<?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>190519</bug_id>
          
          <creation_ts>2018-10-12 06:01:02 -0700</creation_ts>
          <short_desc>[MediaStream] Consolidate all image conversion and resizing into one class</short_desc>
          <delta_ts>2018-10-17 16:54:27 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebRTC</component>
          <version>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Carlson">eric.carlson</reporter>
          <assigned_to name="Eric Carlson">eric.carlson</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1468418</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2018-10-12 06:01:02 -0700</bug_when>
    <thetext>Consolidate all image conversion and resizing into one class</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1468419</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-10-12 06:01:39 -0700</bug_when>
    <thetext>&lt;rdar://problem/45224307&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1468574</commentid>
    <comment_count>2</comment_count>
      <attachid>352200</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2018-10-12 14:25:48 -0700</bug_when>
    <thetext>Created attachment 352200
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1468757</commentid>
    <comment_count>3</comment_count>
      <attachid>352200</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2018-10-12 22:04:07 -0700</bug_when>
    <thetext>Comment on attachment 352200
Patch

Looks like a good refactoring!
Some nits below.
I haven&apos;t looked at why iOS/Mac are not compiling.

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

&gt; Source/WebCore/platform/MediaSample.h:96
&gt; +    virtual uint32_t videoPixelFormat() const { return 0; }

It feels like it should be a MediaSampleObjC method only.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaSampleAVFObjC.h:67
&gt; +    uint32_t videoPixelFormat() const override;

s/override/final/

&gt; Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.h:31
&gt; +#include &quot;MediaSample.h&quot;

forward declare MediaSample?

&gt; Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.h:32
&gt; +#include &lt;CoreMedia/CMTime.h&gt;

Do we need this one?

&gt; Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.mm:51
&gt; +

line to remove?

&gt; Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.mm:101
&gt; +RetainPtr&lt;CVPixelBufferRef&gt; ImageTransferSessionVT::createPixelBuffer(CVPixelBufferRef sourceBuffer, const IntSize&amp; size)

s/createPixelBuffer/convertPixelBuffer/ ?

Ditto for other methods.

&gt; Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.mm:104
&gt; +        return nullptr;

I wonder whether we should special case when sourceBuffer has the right size and right format.
We should then be able to directly return sourceBuffer.

&gt; Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.mm:131
&gt; +    return convertedPixelBuffer;

Probably can be rewritten as:
return createPixelBuffer(CMSampleBufferGetImageBuffer(sourceBuffer), size);
Maybe sourceBuffer check is needed though?

&gt; Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.mm:134
&gt; +RetainPtr&lt;CMSampleBufferRef&gt; ImageTransferSessionVT::createCMSampleBuffer(CMSampleBufferRef sourceBuffer, const IntSize&amp; size)

s/createCMSampleBuffer/convertCMSampleBuffer/?

&gt; Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.mm:137
&gt; +        return nullptr;

Already done within next call to createPixelBuffer.

&gt; Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.mm:143
&gt; +    CMVideoFormatDescriptionRef formatDescription = nullptr;

Should we store formatDescription in a retain pointer to ensure we do not leak it in case of early return?

&gt; Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.mm:185
&gt; +    if (!m_cgImageBufferPool || m_cgImagePoolSize != imageSize) {

Do we need a m_cgImageBufferPool?
It seems we will only use one ARGB pixel buffer at a time since we will convert it later on.
Except maybe if we optimize the case of same-size same format case.

&gt; Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.mm:200
&gt; +        CVReturn status = CVPixelBufferPoolCreate(kCFAllocatorDefault, pixelBufferPoolOptions, pixelBufferOptions, &amp;bufferPool);

auto

&gt; Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.mm:209
&gt; +    CVReturn status = CVPixelBufferPoolCreatePixelBuffer(kCFAllocatorDefault, m_cgImageBufferPool.get(), &amp;rgbBuffer);

auto

&gt; Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.mm:233
&gt; +    if (bufferSize != m_size) {

If the format is not the right one, we should probably call createPixelBuffer.

&gt; Source/WebCore/platform/mediastream/RealtimeMediaSource.cpp:168
&gt; +    RefPtr&lt;MediaSample&gt; protectedMediaSample = &amp;mediaSample;

It seems we should only do this assignment when using m_imageTransferSession.

&gt; Source/WebCore/platform/mediastream/RealtimeMediaSource.h:228
&gt; +    std::unique_ptr&lt;ImageTransferSessionVT&gt; m_imageTransferSession;

I am not sure whether this should be added at that level, RealtimeMediaSource is an abstract class.
Maybe we should keep it at the leaf classes for now.
We might want to have it in RealtimeIncomingVideoSourceCocoa as well (this patch or another).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1469939</commentid>
    <comment_count>4</comment_count>
      <attachid>352514</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2018-10-16 16:31:22 -0700</bug_when>
    <thetext>Created attachment 352514
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470022</commentid>
    <comment_count>5</comment_count>
      <attachid>352200</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2018-10-16 20:27:26 -0700</bug_when>
    <thetext>Comment on attachment 352200
Patch

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

&gt;&gt; Source/WebCore/platform/MediaSample.h:96
&gt;&gt; +    virtual uint32_t videoPixelFormat() const { return 0; }
&gt; 
&gt; It feels like it should be a MediaSampleObjC method only.

Changed.

&gt;&gt; Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.h:31
&gt;&gt; +#include &quot;MediaSample.h&quot;
&gt; 
&gt; forward declare MediaSample?

We do now.

&gt;&gt; Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.h:32
&gt;&gt; +#include &lt;CoreMedia/CMTime.h&gt;
&gt; 
&gt; Do we need this one?

No, removed.

&gt;&gt; Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.mm:51
&gt;&gt; +
&gt; 
&gt; line to remove?

Removed.

&gt;&gt; Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.mm:101
&gt;&gt; +RetainPtr&lt;CVPixelBufferRef&gt; ImageTransferSessionVT::createPixelBuffer(CVPixelBufferRef sourceBuffer, const IntSize&amp; size)
&gt; 
&gt; s/createPixelBuffer/convertPixelBuffer/ ?
&gt; 
&gt; Ditto for other methods.

Good point, changed.

&gt;&gt; Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.mm:104
&gt;&gt; +        return nullptr;
&gt; 
&gt; I wonder whether we should special case when sourceBuffer has the right size and right format.
&gt; We should then be able to directly return sourceBuffer.

Yes, fixed this and convertCMSampleBuffer.

&gt;&gt; Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.mm:131
&gt;&gt; +    return convertedPixelBuffer;
&gt; 
&gt; Probably can be rewritten as:
&gt; return createPixelBuffer(CMSampleBufferGetImageBuffer(sourceBuffer), size);
&gt; Maybe sourceBuffer check is needed though?

Changed.

&gt;&gt; Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.mm:137
&gt;&gt; +        return nullptr;
&gt; 
&gt; Already done within next call to createPixelBuffer.

Changed.

&gt;&gt; Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.mm:143
&gt;&gt; +    CMVideoFormatDescriptionRef formatDescription = nullptr;
&gt; 
&gt; Should we store formatDescription in a retain pointer to ensure we do not leak it in case of early return?

I moved the call to CMVideoFormatDescriptionCreateForImageBuffer to just before it is used.

&gt;&gt; Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.mm:185
&gt;&gt; +    if (!m_cgImageBufferPool || m_cgImagePoolSize != imageSize) {
&gt; 
&gt; Do we need a m_cgImageBufferPool?
&gt; It seems we will only use one ARGB pixel buffer at a time since we will convert it later on.
&gt; Except maybe if we optimize the case of same-size same format case.

We probably don&apos;t need it, removed.

&gt;&gt; Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.mm:200
&gt;&gt; +        CVReturn status = CVPixelBufferPoolCreate(kCFAllocatorDefault, pixelBufferPoolOptions, pixelBufferOptions, &amp;bufferPool);
&gt; 
&gt; auto

Fixed.

&gt;&gt; Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.mm:209
&gt;&gt; +    CVReturn status = CVPixelBufferPoolCreatePixelBuffer(kCFAllocatorDefault, m_cgImageBufferPool.get(), &amp;rgbBuffer);
&gt; 
&gt; auto

Fixed.

&gt;&gt; Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.mm:233
&gt;&gt; +    if (bufferSize != m_size) {
&gt; 
&gt; If the format is not the right one, we should probably call createPixelBuffer.

Good point, fixed.

&gt;&gt; Source/WebCore/platform/mediastream/RealtimeMediaSource.cpp:168
&gt;&gt; +    RefPtr&lt;MediaSample&gt; protectedMediaSample = &amp;mediaSample;
&gt; 
&gt; It seems we should only do this assignment when using m_imageTransferSession.

I moved this logic to the derived classes.

&gt;&gt; Source/WebCore/platform/mediastream/RealtimeMediaSource.h:228
&gt;&gt; +    std::unique_ptr&lt;ImageTransferSessionVT&gt; m_imageTransferSession;
&gt; 
&gt; I am not sure whether this should be added at that level, RealtimeMediaSource is an abstract class.
&gt; Maybe we should keep it at the leaf classes for now.
&gt; We might want to have it in RealtimeIncomingVideoSourceCocoa as well (this patch or another).

Lets change RealtimeIncomingVideoSourceCocoa in a followup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470023</commentid>
    <comment_count>6</comment_count>
      <attachid>352544</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2018-10-16 20:28:10 -0700</bug_when>
    <thetext>Created attachment 352544
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470024</commentid>
    <comment_count>7</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-10-16 20:31:35 -0700</bug_when>
    <thetext>Attachment 352544 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.h:51:  The parameter name &quot;rotation&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.h:52:  The parameter name &quot;rotation&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.h:55:  The parameter name &quot;rotation&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/mediastream/RealtimeMediaSource.h:168:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/platform/mediastream/RealtimeMediaSource.h:169:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
ERROR: Source/WebCore/platform/mediastream/RealtimeMediaSource.h:206:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
Total errors found: 6 in 25 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470025</commentid>
    <comment_count>8</comment_count>
      <attachid>352545</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2018-10-16 20:48:39 -0700</bug_when>
    <thetext>Created attachment 352545
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470026</commentid>
    <comment_count>9</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-10-16 20:51:35 -0700</bug_when>
    <thetext>Attachment 352545 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.h:51:  The parameter name &quot;rotation&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.h:52:  The parameter name &quot;rotation&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.h:55:  The parameter name &quot;rotation&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/mediastream/RealtimeMediaSource.h:203:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
Total errors found: 4 in 25 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470027</commentid>
    <comment_count>10</comment_count>
      <attachid>352546</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2018-10-16 21:00:43 -0700</bug_when>
    <thetext>Created attachment 352546
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470028</commentid>
    <comment_count>11</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-10-16 21:03:34 -0700</bug_when>
    <thetext>Attachment 352546 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.h:51:  The parameter name &quot;rotation&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.h:52:  The parameter name &quot;rotation&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.h:55:  The parameter name &quot;rotation&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/mediastream/RealtimeMediaSource.h:203:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
Total errors found: 4 in 24 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470118</commentid>
    <comment_count>12</comment_count>
      <attachid>352570</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2018-10-17 09:12:00 -0700</bug_when>
    <thetext>Created attachment 352570
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470119</commentid>
    <comment_count>13</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-10-17 09:13:55 -0700</bug_when>
    <thetext>Attachment 352570 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.h:51:  The parameter name &quot;rotation&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.h:52:  The parameter name &quot;rotation&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.h:55:  The parameter name &quot;rotation&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/mediastream/RealtimeMediaSource.h:203:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
Total errors found: 4 in 24 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470128</commentid>
    <comment_count>14</comment_count>
      <attachid>352570</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2018-10-17 09:52:49 -0700</bug_when>
    <thetext>Comment on attachment 352570
Patch

It seems some of the minor changes could impact tests, for instance deviceID.

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

&gt; Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.h:31
&gt; +#include &quot;MediaSampleAVFObjc.h&quot;

Is this one needed here? It is already included in the .mm

&gt; Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.h:55
&gt; +    RefPtr&lt;MediaSample&gt; createMediaSample(IOSurfaceRef, const MediaTime&amp;, const IntSize&amp;, MediaSample::VideoRotation rotation = MediaSample::VideoRotation::None, bool mirrored = false);

s/rotation =/=/ here and above.

&gt; Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.h:59
&gt; +    WEBCORE_EXPORT ImageTransferSessionVT(uint32_t);

explicit. Maybe add pixelFormat since this is not clear without.
I wonder whether we should consider typing the pixelFormat like we do for ObjectIdentifier.

&gt; Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.mm:62
&gt; +    VTSessionSetProperty(transferSession, kVTPixelTransferPropertyKey_ScalingMode, kVTScalingMode_Trim);

Should we check status for all of these and return nullptr in create in case this fails?
Or output some debug/release logging if failing?

&gt; Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.mm:131
&gt; +        RELEASE_LOG(Media, &quot;ImageTransferSessionVT::createPixelBuffer: CMSampleBufferGetImageBuffer returned nullptr&quot;);

No need for this release logging, error case will be logged in convertPixelBuffer.

&gt; Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.mm:258
&gt; +    return createCMSampleBuffer(pixelBuffer.get(), sampleTime, size);

There will be some redundant checks related to size.
Not a big deal but maybe a helper function could be used to share the same code between the two createCMSampleBuffer variants?

&gt; Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.mm:284
&gt; +    int32_t extendedBottom = roundUpToMacroblockMultiple(height) - height;

auto as well.
Maybe add a comment to explain this?

&gt; Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.mm:295
&gt; +    }

I do not understand well this code, in particular why we have m_ioSurfaceBufferAttributes sometimes not having any kCVPixelBufferExtendedPixelsRightKey/kCVPixelBufferExtendedPixelsBottomKey

&gt; Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.mm:325
&gt; +        return nullptr;

These checks are done within below createPixelBuffer call.

&gt; Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.mm:343
&gt; +        return nullptr;

Isn&apos;t setSize called within convertCMSampleBuffer?

&gt; Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.h:106
&gt; +    void processNewFrame(RefPtr&lt;MediaSample&gt;);

RefPtr&lt;MediaSample&gt;&amp;&amp; probably.
Could we make it a Ref&lt;MediaSample&gt;&amp;&amp;?

&gt; Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.mm:564
&gt; +    scheduleDeferredTask([this, sample = WTFMove(sample)] {

sample = sample.releaseNonNull() should do the trick to make it a Ref

&gt; Source/WebCore/platform/mediastream/mac/DisplayCaptureSourceCocoa.cpp:174
&gt; +    auto frame = generateFrame();

Can frame be null?
If not, we can probably remove the if checks within the switchOn lambdas.

&gt; Source/WebCore/platform/mediastream/mac/MockRealtimeVideoSourceMac.mm:85
&gt; +        return;

Put this if inside the previous if.
I wonder whether we need release logging here, maybe ImageTransferSessionVT::create is already doing that for us.

&gt; Source/WebCore/platform/mediastream/mac/MockRealtimeVideoSourceMac.mm:90
&gt; +        return;

Ditto here for logging.

&gt; Source/WebCore/platform/mediastream/mac/MockRealtimeVideoSourceMac.mm:93
&gt; +    dispatchMediaSampleToObservers(*sampleBuffer.get());

s/.get()// ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470130</commentid>
    <comment_count>15</comment_count>
      <attachid>352576</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2018-10-17 10:03:03 -0700</bug_when>
    <thetext>Created attachment 352576
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470131</commentid>
    <comment_count>16</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-10-17 10:05:18 -0700</bug_when>
    <thetext>Attachment 352576 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.h:51:  The parameter name &quot;rotation&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.h:52:  The parameter name &quot;rotation&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.h:55:  The parameter name &quot;rotation&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/mediastream/mac/DisplayCaptureSourceCocoa.cpp:188:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/platform/mediastream/RealtimeMediaSource.h:203:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
Total errors found: 5 in 24 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470215</commentid>
    <comment_count>17</comment_count>
      <attachid>352596</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2018-10-17 11:27:50 -0700</bug_when>
    <thetext>Created attachment 352596
Patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470217</commentid>
    <comment_count>18</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-10-17 11:29:30 -0700</bug_when>
    <thetext>Attachment 352596 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.h:51:  The parameter name &quot;rotation&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.h:52:  The parameter name &quot;rotation&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.h:55:  The parameter name &quot;rotation&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/mediastream/RealtimeMediaSource.h:203:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
Total errors found: 4 in 24 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470289</commentid>
    <comment_count>19</comment_count>
      <attachid>352623</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2018-10-17 13:01:30 -0700</bug_when>
    <thetext>Created attachment 352623
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470290</commentid>
    <comment_count>20</comment_count>
      <attachid>352570</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2018-10-17 13:02:11 -0700</bug_when>
    <thetext>Comment on attachment 352570
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.h:31
&gt;&gt; +#include &quot;MediaSampleAVFObjc.h&quot;
&gt; 
&gt; Is this one needed here? It is already included in the .mm

An include is needed for the VideoRotation enum.

&gt;&gt; Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.h:55
&gt;&gt; +    RefPtr&lt;MediaSample&gt; createMediaSample(IOSurfaceRef, const MediaTime&amp;, const IntSize&amp;, MediaSample::VideoRotation rotation = MediaSample::VideoRotation::None, bool mirrored = false);
&gt; 
&gt; s/rotation =/=/ here and above.

Fixed.

&gt;&gt; Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.h:59
&gt;&gt; +    WEBCORE_EXPORT ImageTransferSessionVT(uint32_t);
&gt; 
&gt; explicit. Maybe add pixelFormat since this is not clear without.
&gt; I wonder whether we should consider typing the pixelFormat like we do for ObjectIdentifier.

Fixed.

&gt;&gt; Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.mm:62
&gt;&gt; +    VTSessionSetProperty(transferSession, kVTPixelTransferPropertyKey_ScalingMode, kVTScalingMode_Trim);
&gt; 
&gt; Should we check status for all of these and return nullptr in create in case this fails?
&gt; Or output some debug/release logging if failing?

Logging added.

&gt;&gt; Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.mm:284
&gt;&gt; +    int32_t extendedBottom = roundUpToMacroblockMultiple(height) - height;
&gt; 
&gt; auto as well.
&gt; Maybe add a comment to explain this?

Fixed.

&gt;&gt; Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.mm:325
&gt;&gt; +        return nullptr;
&gt; 
&gt; These checks are done within below createPixelBuffer call.

Fixed.

&gt;&gt; Source/WebCore/platform/graphics/cv/ImageTransferSessionVT.mm:343
&gt;&gt; +        return nullptr;
&gt; 
&gt; Isn&apos;t setSize called within convertCMSampleBuffer?

Indeed, removed.

&gt;&gt; Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.h:106
&gt;&gt; +    void processNewFrame(RefPtr&lt;MediaSample&gt;);
&gt; 
&gt; RefPtr&lt;MediaSample&gt;&amp;&amp; probably.
&gt; Could we make it a Ref&lt;MediaSample&gt;&amp;&amp;?

Fixed.

&gt;&gt; Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.mm:564
&gt;&gt; +    scheduleDeferredTask([this, sample = WTFMove(sample)] {
&gt; 
&gt; sample = sample.releaseNonNull() should do the trick to make it a Ref

OK

&gt;&gt; Source/WebCore/platform/mediastream/mac/DisplayCaptureSourceCocoa.cpp:174
&gt;&gt; +    auto frame = generateFrame();
&gt; 
&gt; Can frame be null?
&gt; If not, we can probably remove the if checks within the switchOn lambdas.

Yes, it can be NULL.

&gt;&gt; Source/WebCore/platform/mediastream/mac/MockRealtimeVideoSourceMac.mm:85
&gt;&gt; +        return;
&gt; 
&gt; Put this if inside the previous if.
&gt; I wonder whether we need release logging here, maybe ImageTransferSessionVT::create is already doing that for us.

Fixed.

&gt;&gt; Source/WebCore/platform/mediastream/mac/MockRealtimeVideoSourceMac.mm:90
&gt;&gt; +        return;
&gt; 
&gt; Ditto here for logging.

createMediaSample will log in the event of a failure.

&gt;&gt; Source/WebCore/platform/mediastream/mac/MockRealtimeVideoSourceMac.mm:93
&gt;&gt; +    dispatchMediaSampleToObservers(*sampleBuffer.get());
&gt; 
&gt; s/.get()// ?

Removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470292</commentid>
    <comment_count>21</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-10-17 13:03:29 -0700</bug_when>
    <thetext>Attachment 352623 did not pass style-queue:


ERROR: Source/WebCore/platform/mediastream/RealtimeMediaSource.h:203:  Inline functions should not be in classes annotated with WEBCORE_EXPORT. Remove the macro from the class and apply it to each appropriate method, or move the inline function definition out-of-line.  [build/webcore_export] [4]
Total errors found: 1 in 24 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470350</commentid>
    <comment_count>22</comment_count>
      <attachid>352623</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-10-17 14:55:43 -0700</bug_when>
    <thetext>Comment on attachment 352623
patch for landing

Clearing flags on attachment: 352623

Committed r237236: &lt;https://trac.webkit.org/changeset/237236&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470351</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-10-17 14:55:45 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470383</commentid>
    <comment_count>24</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2018-10-17 16:14:13 -0700</bug_when>
    <thetext>Reopening to attach new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470384</commentid>
    <comment_count>25</comment_count>
      <attachid>352660</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2018-10-17 16:14:14 -0700</bug_when>
    <thetext>Created attachment 352660
Fix iOSMac build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470385</commentid>
    <comment_count>26</comment_count>
      <attachid>352660</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-10-17 16:15:20 -0700</bug_when>
    <thetext>Comment on attachment 352660
Fix iOSMac build

Rejecting attachment 352660 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-01&apos;, &apos;validate-changelog&apos;, &apos;--check-oops&apos;, &apos;--non-interactive&apos;, 352660, &apos;--port=mac&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

/Volumes/Data/EWS/WebKit/Source/WebCore/ChangeLog neither lists a valid reviewer nor contains the string &quot;Unreviewed&quot; or &quot;Rubber stamp&quot; (case insensitive).

Full output: https://webkit-queues.webkit.org/results/9644368</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470398</commentid>
    <comment_count>27</comment_count>
      <attachid>352660</attachid>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2018-10-17 16:54:25 -0700</bug_when>
    <thetext>Comment on attachment 352660
Fix iOSMac build

Clearing flags on attachment: 352660

Committed r237240: &lt;https://trac.webkit.org/changeset/237240&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470399</commentid>
    <comment_count>28</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2018-10-17 16:54:27 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>352200</attachid>
            <date>2018-10-12 14:25:48 -0700</date>
            <delta_ts>2018-10-16 16:31:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-190519-20181012172546.patch</filename>
            <type>text/plain</type>
            <size>87049</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM3MDM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzBmNDM0NzgzOGNiZjZj
OTViM2VkYmM5MTRhZDI5MDM0YzU3MWNkYy4uYTcyMmExOWM4ZDIzM2U3ZDg1ZTJkNzNlYTNlZWE2
MDg5MmZiMTI4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg0IEBACisyMDE4LTEwLTEyICBFcmlj
IENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNZWRpYVN0cmVh
bV0gQ29uc29saWRhdGUgYWxsIGltYWdlIGNvbnZlcnNpb24gYW5kIHJlc2l6aW5nIGludG8gb25l
IGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
OTA1MTkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQ1MjI0MzA3PgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gZnVuY3Rp
b25hbCBjaGFuZ2UuCisKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OiBBZGQgSW1hZ2VUcmFu
c2ZlclNlc3Npb25WVC4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6IERpdHRvLgorCisgICAgICAgICogcGxhdGZvcm0vTWVkaWFTYW1wbGUuaDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhU2FtcGxlOjp2aWRlb1BpeGVsRm9ybWF0IGNvbnN0KTogTmV3LgorCisg
ICAgICAgICogcGxhdGZvcm0vY29jb2EvVmlkZW9Ub29sYm94U29mdExpbmsuY3BwOiBBZGQgbmV3
IGtWVFBpeGVsVHJhbnNmZXJQcm9wZXJ0eSBrZXlzLgorICAgICAgICAqIHBsYXRmb3JtL2NvY29h
L1ZpZGVvVG9vbGJveFNvZnRMaW5rLmg6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMuaDoKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhU2FtcGxlQVZGT2JqQzo6Y3JlYXRlKTogUmVtb3ZlIHVuaW1wbGVtZW50ZWQgdmFyaWFu
dC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNh
bXBsZUFWRk9iakMubW06CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZUFWRk9iakM6OnZp
ZGVvUGl4ZWxGb3JtYXQgY29uc3QpOiBOZXcuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jdi9JbWFnZVRyYW5zZmVyU2Vzc2lvblZULmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jdi9JbWFnZVRyYW5zZmVyU2Vzc2lvblZULm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OkltYWdlVHJhbnNmZXJTZXNzaW9uVlQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6fkltYWdlVHJhbnNmZXJTZXNz
aW9uVlQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6c2V0U2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVhdGVQaXhl
bEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVh
dGVDTVNhbXBsZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpyb3VuZFVwVG9NYWNyb2Jsb2Nr
TXVsdGlwbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6aW9T
dXJmYWNlUGl4ZWxCdWZmZXJDcmVhdGlvbk9wdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlTWVkaWFTYW1wbGUpOgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJSZXNpemVyLmg6IFJlbW92ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJSZXNpemVyLm1tOiBSZW1vdmVkLgor
CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU1lZGlhU291cmNlOjp2aWRlb1NhbXBsZUF2YWls
YWJsZSk6IFJlc2l6ZSB0aGUgaW1hZ2UgaWYgbmVjZXNzYXJ5LgorICAgICAgICAqIHBsYXRmb3Jt
L21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuaDoKKworICAgICAgICAqIHBsYXRmb3Jt
L21lZGlhc3RyZWFtL21hYy9BVlZpZGVvQ2FwdHVyZVNvdXJjZS5oOgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9BVlZpZGVvQ2FwdHVyZVNvdXJjZS5tbToKKyAgICAgICAgKFdl
YkNvcmU6OkFWVmlkZW9DYXB0dXJlU291cmNlOjpwcmVmZXJzUHJlc2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OkFWVmlkZW9DYXB0dXJlU291cmNlOjpjYXB0dXJlT3V0cHV0RGlkT3V0cHV0U2FtcGxl
QnVmZmVyRnJvbUNvbm5lY3Rpb24pOiBSZW1vdmUKKyAgICAgICAgdGhlIHJlc2l6aW5nIGxvZ2lj
LCBpdCBpcyBoYW5kbGVkIGJ5IHRoZSBiYXNlIGNsYXNzLgorCisgICAgICAgICogcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbWFjL0Rpc3BsYXlDYXB0dXJlU291cmNlQ29jb2EuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6Y2FwYWJpbGl0aWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OnNldHRpbmdzRGlkQ2hhbmdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OnNldEludHJp
bnNpY1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6
ZW1pdEZyYW1lKTogUmVtb3ZlIHJlc2l6aW5nIGxvZ2ljLCBqdXN0IHVzZSBhIHRyYW5zZmVyCisg
ICAgICAgIHNlc3Npb24gdG8gY3JlYXRlIGFuIGltYWdlIGZyb20gdGhlIGNhcHR1cmUgc291cmNl
IG5hdGl2ZSBvdXRwdXQgZm9ybWF0LgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUNhcHR1cmVT
b3VyY2VDb2NvYTo6c2FtcGxlQnVmZmVyRnJvbVBpeGVsQnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OnJvdW5kVXBUb01hY3JvYmxvY2tNdWx0aXBsZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpwaXhlbEJ1ZmZlckZyb21J
T1N1cmZhY2UpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9E
aXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hLmg6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW06CisgICAgICAg
IChXZWJDb3JlOjpNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYzo6dXBkYXRlU2FtcGxlQnVmZmVy
KTogVXNlIGltYWdlIHRyYW5zZmVyIHNlc3Npb24uCisgICAgICAgIChXZWJDb3JlOjpNb2NrUmVh
bHRpbWVWaWRlb1NvdXJjZU1hYzo6Q01TYW1wbGVCdWZmZXJGcm9tUGl4ZWxCdWZmZXIpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6TW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWM6OnBpeGVs
QnVmZmVyRnJvbUNHSW1hZ2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TW9j
a1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWM6OnNldFNpemVBbmRGcmFtZVJhdGVXaXRoUHJlc2V0KTog
RGVsZXRlZC4KKworICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9TY3JlZW5EaXNw
bGF5Q2FwdHVyZVNvdXJjZU1hYy5oOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21h
Yy9TY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpjcmVhdGVEaXNwbGF5U3RyZWFtKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpnZW5lcmF0ZUZyYW1l
KTogUmV0dXJuIHRoZSBJT1N1cmZhY2UgZGlyZWN0bHkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9tYWMvV2luZG93RGlzcGxheUNhcHR1cmVTb3VyY2VNYWMuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvV2luZG93RGlzcGxheUNhcHR1cmVTb3VyY2VNYWMu
bW06CisgICAgICAgIChXZWJDb3JlOjpXaW5kb3dEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6Z2Vu
ZXJhdGVGcmFtZSk6IFJldHVybiB0aGUgQ0dJbWFnZSBkaXJlY3RseS4KKyAgICAgICAgKFdlYkNv
cmU6OldpbmRvd0Rpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpwaXhlbEJ1ZmZlckZyb21DR0ltYWdl
KTogRGVsZXRlZC4KKworICAgICAgICAqIHBsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9T
b3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2U6OmNh
cGFiaWxpdGllcyk6IE9ubHkgdGhlIGNhbWVyYSBzdXBwb3J0cyBkZXZpY2UgSUQuCisgICAgICAg
IChXZWJDb3JlOjpNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZTo6c2V0dGluZ3MpOiBEaXR0by4KKwog
MjAxOC0xMC0xMSAgRW5yaXF1ZSBPY2HDsWEgR29uesOhbGV6ICA8ZW9jYW5oYUBpZ2FsaWEuY29t
PgogCiAgICAgICAgIFtHU3RyZWFtZXJdW01TRV0gRml4IGhlaWdodCBjYWxjdWxhdGlvbiBmb3Ig
c3RyZWFtcyB3aXRoIHNvdXJjZSBhc3BlY3QgcmF0aW8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0Cmlu
ZGV4IGM3NmY0OTIzMWNiNWUwYmJkNWMwOWNmMmUyNGM0YzkxNTljZDllNTcuLjg0NTU1YTZhNzlh
YTA0MWUyYWJiNWE5YjA0ODk0ODlkODYyMDMwODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dApA
QCAtMzE0LDggKzMxNCw4IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIubW0K
IHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYk1ldGFsTGF5ZXIubW0KIHBsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL1RleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EubW0KIAorcGxhdGZvcm0vZ3Jh
cGhpY3MvY3YvSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3Yv
UGl4ZWxCdWZmZXJDb25mb3JtZXJDVi5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2N2L1BpeGVsQnVm
ZmVyUmVzaXplci5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvVGV4dHVyZUNhY2hlQ1YubW0KIHBs
YXRmb3JtL2dyYXBoaWNzL2N2L1ZpZGVvVGV4dHVyZUNvcGllckNWLmNwcAogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYWRhMjZl
MGE3YWZlZTM2ODNiZTIxMmU3OTZjN2Y2NGI0YzY0ODQyYy4uZGM2YjJjM2I2ZmJmZjYwMDFkMGY0
YmQyMmY5M2IwODg1ZjE5OTQ2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTY5LDYgKzE2OSw3IEBACiAJCTA3OEU0M0RBMUFC
QjZDN0UwMDFDMkZBNiAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzhFNDNEODFBQkI2QzdFMDAxQzJG
QTYgLyogTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA3OEU0M0REMUFCQjZGNkYwMDFDMkZBNiAvKiBN
ZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwNzhFNDNEQjFBQkI2RjZGMDAxQzJGQTYgLyogTWVkaWFQbGF5
YmFja1RhcmdldFBpY2tlck1hYy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTA3OEU0M0RFMUFCQjZGNkYwMDFDMkZBNiAvKiBNZWRpYVBsYXliYWNr
VGFyZ2V0UGlja2VyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMDc4RTQzREMxQUJCNkY2RjAwMUMyRkE2IC8qIE1lZGlhUGxheWJhY2tUYXJnZXRQ
aWNrZXJNYWMubW0gKi87IH07CisJCTA3OEVEMTkzMjE2RDA3OTUwMDc3NUIzMyAvKiBJbWFnZVRy
YW5zZmVyU2Vzc2lvblZULmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwNzQ2RDMwQzIxNDZFQTM4MDAzRERGODQgLyogSW1hZ2VUcmFuc2ZlclNlc3Npb25W
VC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA3
OTIxNjU1MUFBNTYwQUEwMEEzQzA0OSAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0Q2xpZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzkyMTY1MzFBQTU2
MEFBMDBBM0MwNDkgLyogTWVkaWFQbGF5YmFja1RhcmdldENsaWVudC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA3OTQxNzkxMTY2RTg1NUYwMDk0
MTZDMiAvKiBJbmJhbmRUZXh0VHJhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDc5NDE3OEYxNjZFODU1RjAwOTQxNkMyIC8qIEluYmFuZFRleHRU
cmFjay5jcHAgKi87IH07CiAJCTA3OTQxNzkyMTY2RTg1NUYwMDk0MTZDMiAvKiBJbmJhbmRUZXh0
VHJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3
OTQxNzkwMTY2RTg1NUYwMDk0MTZDMiAvKiBJbmJhbmRUZXh0VHJhY2suaCAqLzsgfTsKQEAgLTUz
NjMsOCArNTM2NCw4IEBACiAJCTA3M0I4NzY1MUU0Mzg1OUQwMDcxQzBFQyAvKiBBdWRpb1NhbXBs
ZURhdGFTb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXVkaW9TYW1w
bGVEYXRhU291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3NDRFQ0VCMUUw
QzRBRTUwMDBEMDk0NCAvKiBNb2NrUmVhbHRpbWVBdWRpb1NvdXJjZU1hYy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBNb2NrUmVhbHRpbWVBdWRpb1NvdXJjZU1hYy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzQ0RUNFQzFFMEM0QUU1MDAwRDA5NDQgLyogTW9j
a1JlYWx0aW1lQXVkaW9Tb3VyY2VNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBNb2NrUmVhbHRpbWVBdWRpb1NvdXJjZU1hYy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMDc0NkQzMEEyMTQ2RUEzNzAwM0RERjg0IC8qIFBpeGVsQnVmZmVyUmVz
aXplci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBpeGVsQnVm
ZmVyUmVzaXplci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDc0NkQzMEMyMTQ2
RUEzODAwM0RERjg0IC8qIFBpeGVsQnVmZmVyUmVzaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQaXhlbEJ1ZmZlclJlc2l6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMDc0NkQzMEEyMTQ2RUEzNzAwM0RERjg0IC8qIEltYWdlVHJhbnNmZXJTZXNzaW9u
VlQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBJbWFnZVRyYW5z
ZmVyU2Vzc2lvblZULm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwNzQ2RDMwQzIx
NDZFQTM4MDAzRERGODQgLyogSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZVRyYW5zZmVyU2Vzc2lvblZULmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTA3NEU4MkI4MThBNjlGMEUwMDdFRjU0QyAvKiBQbGF0Zm9ybVRp
bWVSYW5nZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGxhdGZv
cm1UaW1lUmFuZ2VzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDc0RTgyQjkx
OEE2OUYwRTAwN0VGNTRDIC8qIFBsYXRmb3JtVGltZVJhbmdlcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybVRpbWVSYW5nZXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMDc1Mzg2MDAxNDQ4OUU5ODAwQjc4NDUyIC8qIENhY2hlZFRleHRUcmFjay5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWNoZWRUZXh0VHJhY2su
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjUwNjIsMTAgKzI1MDYzLDEwIEBA
CiAJCUNEOUQ4MjdDMUM3QkIyRUQwMDZGRjA2NiAvKiBjdiAqLyA9IHsKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMDc0NkQzMEMyMTQ2RUEzODAwM0RERjg0IC8qIElt
YWdlVHJhbnNmZXJTZXNzaW9uVlQuaCAqLywKKwkJCQkwNzQ2RDMwQTIxNDZFQTM3MDAzRERGODQg
LyogSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5tbSAqLywKIAkJCQlDRDdEMzM0MTFDN0ExMjNGMDAw
NDEyOTMgLyogUGl4ZWxCdWZmZXJDb25mb3JtZXJDVi5jcHAgKi8sCiAJCQkJQ0Q3RDMzNDIxQzdB
MTIzRjAwMDQxMjkzIC8qIFBpeGVsQnVmZmVyQ29uZm9ybWVyQ1YuaCAqLywKLQkJCQkwNzQ2RDMw
QzIxNDZFQTM4MDAzRERGODQgLyogUGl4ZWxCdWZmZXJSZXNpemVyLmggKi8sCi0JCQkJMDc0NkQz
MEEyMTQ2RUEzNzAwM0RERjg0IC8qIFBpeGVsQnVmZmVyUmVzaXplci5tbSAqLywKIAkJCQlDRDlE
ODI3NDFDN0FFNTM1MDA2RkYwNjYgLyogVGV4dHVyZUNhY2hlQ1YuaCAqLywKIAkJCQlDRDlEODI3
MzFDN0FFNTM1MDA2RkYwNjYgLyogVGV4dHVyZUNhY2hlQ1YubW0gKi8sCiAJCQkJQ0Q5RDgyNzcx
QzdCOEVFMTAwNkZGMDY2IC8qIFZpZGVvVGV4dHVyZUNvcGllckNWLmNwcCAqLywKQEAgLTI3NTgz
LDcgKzI3NTg0LDYgQEAKIAkJCQlBMTVENzUxNjFFNjhGN0M4MDBBMzVGQkMgLyogQmxvYkNhbGxi
YWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRURFRjFGNDEyMUIwRUZDMDA3MjZEQjIgLyogQmxv
YkRhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxRDMxQ0REMTkxOTYwMjAwMDEwMDVBMyAvKiBC
bG9iRGF0YUZpbGVSZWZlcmVuY2UuaCBpbiBIZWFkZXJzICovLAotCQkJCUU0RThCNEY1MjE2Qjk1
NjUwMEI4ODM0RCAvKiBGb250Q2FzY2FkZURlc2NyaXB0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0RDNCMDBBRjIxNUQ2QTY5MDA3NkI5ODMgLyogQmxvYkV2ZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQk3Qzc3QzNENzFERUY4NTBBMDBBNTBCRkEgLyogQmxvYkxpbmVFbmRpbmdzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFMUM5NEFGOTE5MTMwM0YwMDBENUE4OTMgLyogQmxvYlBhcnQuaCBpbiBI
ZWFkZXJzICovLApAQCAtMjc2NzYsNyArMjc2NzYsNiBAQAogCQkJCTU3MzAzQkJCMjAwNkM2RUUw
MDM1NTk2NSAvKiBDQk9SQmluYXJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQk1NzMwM0JDMTIwMDZF
MDBDMDAzNTU5NjUgLyogQ0JPUlJlYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTczMDNCQjky
MDA2QzZFRTAwMzU1OTY1IC8qIENCT1JWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRTRFOEI0
RUMyMTZCNzlFNTAwQjg4MzREIC8qIFN5c3RlbUZvbnREYXRhYmFzZUNvcmVUZXh0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1NzMwM0JCQTIwMDZDNkVFMDAzNTU5NjUgLyogQ0JPUldyaXRlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNjU1MEI2OUUwOTlERjAyNzAwOTBENzgxIC8qIENEQVRBU2VjdGlv
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0RGNEI3MTYxRTAwQjdFNTAwRTIzNUEyIC8qIENETS5o
IGluIEhlYWRlcnMgKi8sCkBAIC0yNzc2OCw3ICsyNzc2Nyw2IEBACiAJCQkJQ0U3OTlGOTgxQzZB
NDZCQzAwOTdCNTE4IC8qIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUNFNzk5RkFDMUM2QTUwNjYwMDk3QjUxOCAvKiBDb250ZW50U2VjdXJpdHlQ
b2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MUQwMTVDQTBG
NEI1QzcxMDA0QTY2MkYgLyogQ29udGVudFR5cGUuaCBpbiBIZWFkZXJzICovLAotCQkJCUU0NjA1
RkVDMjE2NjQ4MDkwMEU1MzA0NiAvKiBQcmV3YXJtSW5mb3JtYXRpb24uaCBpbiBIZWFkZXJzICov
LAogCQkJCTk3NjI3QjhFMTRGQjNDRUUwMDJDRENBMSAvKiBDb250ZXh0RGVzdHJ1Y3Rpb25PYnNl
cnZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNCNkEwRTYwQjBCQ0E1QzAwRjUwMjdBIC8qIENv
bnRleHRNZW51LmggaW4gSGVhZGVycyAqLywKIAkJCQkwNjVBRDRGNTBCMEMyRURBMDA1QTJCMUQg
LyogQ29udGV4dE1lbnVDbGllbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjgzMjEsNiArMjgzMTks
NyBAQAogCQkJCUIyQzNEQTYzMEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FjaGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUMyNDU4RTYzMUZFODk3QjAwMDU5NDc1OSAvKiBGb250Q2FjaGVDb3JlVGV4
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJDM0RBNjEwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRD
YXNjYWRlLmggaW4gSGVhZGVycyAqLywKKwkJCQlFNEU4QjRGNTIxNkI5NTY1MDBCODgzNEQgLyog
Rm9udENhc2NhZGVEZXNjcmlwdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJDM0RBNjgwRDAw
NkNENjAwRUY2RjI2IC8qIEZvbnRDYXNjYWRlRm9udHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUIy
QUZGQzdFMEQwMEE1QzEwMDMwMDc0RCAvKiBGb250Q3VzdG9tUGxhdGZvcm1EYXRhLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCMkMzREE2NjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udERlc2NyaXB0aW9u
LmggaW4gSGVhZGVycyAqLywKQEAgLTI4Njc3LDYgKzI4Njc2LDcgQEAKIAkJCQk3QzE5M0JDMTFG
NUUwRUVEMDA4OEYzRTYgLyogSW1hZ2VTbW9vdGhpbmdRdWFsaXR5LmggaW4gSGVhZGVycyAqLywK
IAkJCQk1NTQ2NzU3QjFGRDIxMkE5MDAzQjEwQjAgLyogSW1hZ2VTb3VyY2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTRCMzQ4MDk0MEVFRjUwRDQwMEFDMUI0MSAvKiBJbWFnZVNvdXJjZUNHLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwNzhFRDE5MzIxNkQwNzk1MDA3NzVCMzMgLyogSW1hZ2VUcmFuc2Zl
clNlc3Npb25WVC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTU1MENCNDIxRTk1NUUzQzAwMTExQUEw
IC8qIEltYWdlVHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTI2Rjc1NkIzMUIzQjY2RjcwMDA1
REQ3OSAvKiBJbW11dGFibGVORkEuaCBpbiBIZWFkZXJzICovLAogCQkJCTI2Rjc1NkI1MUIzQjY4
RjIwMDA1REQ3OSAvKiBJbW11dGFibGVORkFOb2RlQnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCkBA
IC0zMDEzMiw2ICszMDEzMiw3IEBACiAJCQkJQTFDMTUwN0ExRTNGMkIzRTAwMzJDOThDIC8qIFBy
ZXZpZXdDb252ZXJ0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUExODVCNDJBMUU4MjExQTEwMERD
OTExOCAvKiBQcmV2aWV3TG9hZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTBEQkY0NzE4Rjky
MzE3MDAwRDcwQzYgLyogUHJldmlld0xvYWRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
RTQ2MDVGRUMyMTY2NDgwOTAwRTUzMDQ2IC8qIFByZXdhcm1JbmZvcm1hdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQjcxRkU2REYxMTA5MUNCMzAwREFFRjc3IC8qIFByaW50Q29udGV4dC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTFGNjQ1RDUxRkVDREJDRTAwQjU0REVEIC8qIFByb2Nlc3MuaCBp
biBIZWFkZXJzICovLAogCQkJCUE4RUE3RUJDMEExOTQ1RDAwMEE4RUY1RiAvKiBQcm9jZXNzaW5n
SW5zdHJ1Y3Rpb24uaCBpbiBIZWFkZXJzICovLApAQCAtMzEwMTIsNiArMzEwMTMsNyBAQAogCQkJ
CTUxODU0MzBCMUZCNjc4NDUwMDQ3OEY5NSAvKiBTV1NlcnZlclRvQ29udGV4dENvbm5lY3Rpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCTUxN0E1MzQ2MUY1MEMxN0YwMERDREMwQSAvKiBTV1NlcnZl
cldvcmtlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTE4MDgxMTcxNkZDRjlDQjAwQjgwRDA3IC8q
IFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQlFNEU4QjRFQzIx
NkI3OUU1MDBCODgzNEQgLyogU3lzdGVtRm9udERhdGFiYXNlQ29yZVRleHQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMDNDMDc0MTg4NDY5NUUwMEE1RjhDQSAvKiBTeXN0ZW1NZW1vcnkuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTVENTk3NUIzMTk2MzVGMTEwMEQwMDg3OCAvKiBTeXN0ZW1WZXJzaW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOENGRjA1MTBBMTU0RjA5MDAwQTQyMzQgLyogVGFibGVM
YXlvdXQuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vTWVkaWFTYW1wbGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01lZGlhU2FtcGxlLmgK
aW5kZXggZTU4MmZkYjQ5YWNlZWRhMGZjMzY4YTBjZWM1NjE4ODFhZTg4YzM3Yi4uNzUxNjY1NjIx
YWNkMjVhMmRmYjJlYTI5YTFjOTA2NWVlMjI5MzExOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vTWVkaWFTYW1wbGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9N
ZWRpYVNhbXBsZS5oCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJGbG9hdFNpemUuaCIK
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5cy5oPgorI2luY2x1ZGUgPHd0Zi9F
bnVtVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL01lZGlhVGltZS5oPgogI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CkBAIC05Miw2
ICs5Myw3IEBAIHB1YmxpYzoKICAgICB9OwogICAgIHZpcnR1YWwgVmlkZW9Sb3RhdGlvbiB2aWRl
b1JvdGF0aW9uKCkgY29uc3QgeyByZXR1cm4gVmlkZW9Sb3RhdGlvbjo6Tm9uZTsgfQogICAgIHZp
cnR1YWwgYm9vbCB2aWRlb01pcnJvcmVkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2
aXJ0dWFsIHVpbnQzMl90IHZpZGVvUGl4ZWxGb3JtYXQoKSBjb25zdCB7IHJldHVybiAwOyB9CiAK
ICAgICBib29sIGlzU3luYygpIGNvbnN0IHsgcmV0dXJuIGZsYWdzKCkgJiBJc1N5bmM7IH0KICAg
ICBib29sIGlzTm9uRGlzcGxheWluZygpIGNvbnN0IHsgcmV0dXJuIGZsYWdzKCkgJiBJc05vbkRp
c3BsYXlpbmc7IH0KQEAgLTEwMCw2ICsxMDIsMjAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3QgPSAwOwogfTsKIAotfQorfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0
czxXZWJDb3JlOjpNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbj4geworICAgIHVzaW5nIHZhbHVl
cyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYkNvcmU6Ok1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0
aW9uLAorICAgICAgICBXZWJDb3JlOjpNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6Tm9uZSwK
KyAgICAgICAgV2ViQ29yZTo6TWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246OlVwc2lkZURvd24s
CisgICAgICAgIFdlYkNvcmU6Ok1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpSaWdodCwKKyAg
ICAgICAgV2ViQ29yZTo6TWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246OkxlZnQKKyAgICA+Owor
fTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY29jb2EvQ29yZVZpZGVvU29mdExpbmsuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY29jb2EvQ29yZVZpZGVvU29mdExpbmsuY3BwCmluZGV4IDhiYjM2MmJmMjY4
MGQzNmQ2ZTNmMGQ1YzMyMDUyMTM1YzFkZjVhOTguLmRjZmIxY2ZiNDdhMDNkMzczYTNhNjIyODc0
ZTcwMzg1OTE2Y2UwOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29h
L0NvcmVWaWRlb1NvZnRMaW5rLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2Nv
YS9Db3JlVmlkZW9Tb2Z0TGluay5jcHAKQEAgLTkyLDQgKzkyLDYgQEAgU09GVF9MSU5LX0NPTlNU
QU5UX0ZPUl9TT1VSQ0UoV2ViQ29yZSwgQ29yZVZpZGVvLCBrQ1ZQaXhlbEJ1ZmZlckV4dGVuZGVk
UGl4ZWxzQm8KIFNPRlRfTElOS19DT05TVEFOVF9GT1JfU09VUkNFKFdlYkNvcmUsIENvcmVWaWRl
bywga0NWUGl4ZWxCdWZmZXJPcGVuR0xDb21wYXRpYmlsaXR5S2V5LCBDRlN0cmluZ1JlZikKICNl
bmRpZgogCitTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX1NPVVJDRShXZWJDb3JlLCBDb3JlVmlkZW8s
IENWUGl4ZWxCdWZmZXJDcmVhdGVXaXRoSU9TdXJmYWNlLCBDVlJldHVybiwgKENGQWxsb2NhdG9y
UmVmIGFsbG9jYXRvciwgSU9TdXJmYWNlUmVmIHN1cmZhY2UsIENGRGljdGlvbmFyeVJlZiBwaXhl
bEJ1ZmZlckF0dHJpYnV0ZXMsIENWUGl4ZWxCdWZmZXJSZWYgKiBwaXhlbEJ1ZmZlck91dCksIChh
bGxvY2F0b3IsIHN1cmZhY2UsIHBpeGVsQnVmZmVyQXR0cmlidXRlcywgcGl4ZWxCdWZmZXJPdXQp
KQorCiAjZW5kaWYgLy8gSEFWRShDT1JFX1ZJREVPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY29jb2EvQ29yZVZpZGVvU29mdExpbmsuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2NvY29hL0NvcmVWaWRlb1NvZnRMaW5rLmgKaW5kZXggOWVlYjQzNDYxODkzODQ1YTY4
MjQ0ODhiNDM4ZjU5NjlhYjJjOGIxMi4uNTI5NWU1OGM4NDcwZjUyZjJhZDg0M2IxNjdhMTc5NDc3
MDhkNTRiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvQ29yZVZp
ZGVvU29mdExpbmsuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9Db3JlVmlk
ZW9Tb2Z0TGluay5oCkBAIC0xNDcsNCArMTQ3LDcgQEAgU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9I
RUFERVIoV2ViQ29yZSwgQ29yZVZpZGVvLCBrQ1ZQaXhlbEJ1ZmZlck9wZW5HTENvbXBhdGliaWwK
ICNkZWZpbmUga0NWUGl4ZWxCdWZmZXJPcGVuR0xDb21wYXRpYmlsaXR5S2V5IGdldF9Db3JlVmlk
ZW9fa0NWUGl4ZWxCdWZmZXJPcGVuR0xDb21wYXRpYmlsaXR5S2V5KCkKICNlbmRpZgogCitTT0ZU
X0xJTktfRlVOQ1RJT05fRk9SX0hFQURFUihXZWJDb3JlLCBDb3JlVmlkZW8sIENWUGl4ZWxCdWZm
ZXJDcmVhdGVXaXRoSU9TdXJmYWNlLCBDVlJldHVybiwgKENGQWxsb2NhdG9yUmVmIGFsbG9jYXRv
ciwgSU9TdXJmYWNlUmVmIHN1cmZhY2UsIENGRGljdGlvbmFyeVJlZiBwaXhlbEJ1ZmZlckF0dHJp
YnV0ZXMsIENWUGl4ZWxCdWZmZXJSZWYgKiBwaXhlbEJ1ZmZlck91dCksIChhbGxvY2F0b3IsIHN1
cmZhY2UsIHBpeGVsQnVmZmVyQXR0cmlidXRlcywgcGl4ZWxCdWZmZXJPdXQpKQorI2RlZmluZSBD
VlBpeGVsQnVmZmVyQ3JlYXRlV2l0aElPU3VyZmFjZSBzb2Z0TGlua19Db3JlVmlkZW9fQ1ZQaXhl
bEJ1ZmZlckNyZWF0ZVdpdGhJT1N1cmZhY2UKKwogI2VuZGlmIC8vIEhBVkUoQ09SRV9WSURFTykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvVG9vbGJveFNv
ZnRMaW5rLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvVG9vbGJveFNv
ZnRMaW5rLmNwcAppbmRleCA5ODdmYmNmNjE5NjZkMjRjZjA1Y2EwODQ2OTlkMDU4MGEyZjExMWRm
Li5lYWY3OGI0NWQwNTI4N2E3OTZlNmEyYTA1Y2QwZThmMGE4OTk0ZDNmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9WaWRlb1Rvb2xib3hTb2Z0TGluay5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvVmlkZW9Ub29sYm94U29mdExpbmsuY3Bw
CkBAIC01OSw2ICs1OSw5IEBAIFNPRlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNFKFdlYkNvcmUs
IFZpZGVvVG9vbGJveCwgVlRQaXhlbFRyYW5zZmVyU2Vzc2lvblRyYW5zCiBTT0ZUX0xJTktfRlVO
Q1RJT05fRk9SX1NPVVJDRShXZWJDb3JlLCBWaWRlb1Rvb2xib3gsIFZUU2Vzc2lvblNldFByb3Bl
cnR5LCBPU1N0YXR1cywgKFZUU2Vzc2lvblJlZiBzZXNzaW9uLCBDRlN0cmluZ1JlZiBwcm9wZXJ0
eUtleSwgQ0ZUeXBlUmVmIHByb3BlcnR5VmFsdWUpLCAoc2Vzc2lvbiwgcHJvcGVydHlLZXksIHBy
b3BlcnR5VmFsdWUpKQogU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9TT1VSQ0UoV2ViQ29yZSwgVmlk
ZW9Ub29sYm94LCBrVlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXlfU2NhbGluZ01vZGUsIENGU3Ry
aW5nUmVmKQogU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9TT1VSQ0UoV2ViQ29yZSwgVmlkZW9Ub29s
Ym94LCBrVlRTY2FsaW5nTW9kZV9UcmltLCBDRlN0cmluZ1JlZikKK1NPRlRfTElOS19DT05TVEFO
VF9GT1JfU09VUkNFKFdlYkNvcmUsIFZpZGVvVG9vbGJveCwga1ZUUGl4ZWxUcmFuc2ZlclByb3Bl
cnR5S2V5X0VuYWJsZUhhcmR3YXJlQWNjZWxlcmF0ZWRUcmFuc2ZlciwgQ0ZTdHJpbmdSZWYpCitT
T0ZUX0xJTktfQ09OU1RBTlRfRk9SX1NPVVJDRShXZWJDb3JlLCBWaWRlb1Rvb2xib3gsIGtWVFBp
eGVsVHJhbnNmZXJQcm9wZXJ0eUtleV9FbmFibGVIaWdoU3BlZWRUcmFuc2ZlciwgQ0ZTdHJpbmdS
ZWYpCitTT0ZUX0xJTktfQ09OU1RBTlRfRk9SX1NPVVJDRShXZWJDb3JlLCBWaWRlb1Rvb2xib3gs
IGtWVFBpeGVsVHJhbnNmZXJQcm9wZXJ0eUtleV9SZWFsVGltZSwgQ0ZTdHJpbmdSZWYpCiAKIFNP
RlRfTElOS19DT05TVEFOVF9NQVlfRkFJTF9GT1JfU09VUkNFKFdlYkNvcmUsIFZpZGVvVG9vbGJv
eCwga1ZUSEVWQ0RlY29kZXJDYXBhYmlsaXR5X1N1cHBvcnRlZFByb2ZpbGVzLCBDRlN0cmluZ1Jl
ZikKIFNPRlRfTElOS19DT05TVEFOVF9NQVlfRkFJTF9GT1JfU09VUkNFKFdlYkNvcmUsIFZpZGVv
VG9vbGJveCwga1ZUSEVWQ0RlY29kZXJDYXBhYmlsaXR5X1BlclByb2ZpbGVTdXBwb3J0LCBDRlN0
cmluZ1JlZikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVv
VG9vbGJveFNvZnRMaW5rLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9WaWRlb1Rv
b2xib3hTb2Z0TGluay5oCmluZGV4IGYzMTliMTg4ZWQxNjA1ODA5NDc2MTJlYjM3Mjg2ZGUyMjMy
NGUyNWQuLjA3MWI3MTFlZDA0ZDNiODE0ODIyODkyYTE1MGQ3YWU1ZmRlNmY4NTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvVG9vbGJveFNvZnRMaW5rLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvVmlkZW9Ub29sYm94U29mdExpbmsu
aApAQCAtODUsNiArODUsMTIgQEAgU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9IRUFERVIoV2ViQ29y
ZSwgVmlkZW9Ub29sYm94LCBrVlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXkKICNkZWZpbmUga1ZU
UGl4ZWxUcmFuc2ZlclByb3BlcnR5S2V5X1NjYWxpbmdNb2RlIGdldF9WaWRlb1Rvb2xib3hfa1ZU
UGl4ZWxUcmFuc2ZlclByb3BlcnR5S2V5X1NjYWxpbmdNb2RlKCkKIFNPRlRfTElOS19DT05TVEFO
VF9GT1JfSEVBREVSKFdlYkNvcmUsIFZpZGVvVG9vbGJveCwga1ZUU2NhbGluZ01vZGVfVHJpbSwg
Q0ZTdHJpbmdSZWYpCiAjZGVmaW5lIGtWVFNjYWxpbmdNb2RlX1RyaW0gZ2V0X1ZpZGVvVG9vbGJv
eF9rVlRTY2FsaW5nTW9kZV9UcmltKCkKK1NPRlRfTElOS19DT05TVEFOVF9GT1JfSEVBREVSKFdl
YkNvcmUsIFZpZGVvVG9vbGJveCwga1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5S2V5X0VuYWJsZUhh
cmR3YXJlQWNjZWxlcmF0ZWRUcmFuc2ZlciwgQ0ZTdHJpbmdSZWYpCisjZGVmaW5lIGtWVFBpeGVs
VHJhbnNmZXJQcm9wZXJ0eUtleV9FbmFibGVIYXJkd2FyZUFjY2VsZXJhdGVkVHJhbnNmZXIgZ2V0
X1ZpZGVvVG9vbGJveF9rVlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXlfRW5hYmxlSGFyZHdhcmVB
Y2NlbGVyYXRlZFRyYW5zZmVyKCkKK1NPRlRfTElOS19DT05TVEFOVF9GT1JfSEVBREVSKFdlYkNv
cmUsIFZpZGVvVG9vbGJveCwga1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5S2V5X0VuYWJsZUhpZ2hT
cGVlZFRyYW5zZmVyLCBDRlN0cmluZ1JlZikKKyNkZWZpbmUga1ZUUGl4ZWxUcmFuc2ZlclByb3Bl
cnR5S2V5X0VuYWJsZUhpZ2hTcGVlZFRyYW5zZmVyIGdldF9WaWRlb1Rvb2xib3hfa1ZUUGl4ZWxU
cmFuc2ZlclByb3BlcnR5S2V5X0VuYWJsZUhpZ2hTcGVlZFRyYW5zZmVyKCkKK1NPRlRfTElOS19D
T05TVEFOVF9GT1JfSEVBREVSKFdlYkNvcmUsIFZpZGVvVG9vbGJveCwga1ZUUGl4ZWxUcmFuc2Zl
clByb3BlcnR5S2V5X1JlYWxUaW1lLCBDRlN0cmluZ1JlZikKKyNkZWZpbmUga1ZUUGl4ZWxUcmFu
c2ZlclByb3BlcnR5S2V5X1JlYWxUaW1lIGdldF9WaWRlb1Rvb2xib3hfa1ZUUGl4ZWxUcmFuc2Zl
clByb3BlcnR5S2V5X1JlYWxUaW1lKCkKIAogU09GVF9MSU5LX0NPTlNUQU5UX01BWV9GQUlMX0ZP
Ul9IRUFERVIoV2ViQ29yZSwgVmlkZW9Ub29sYm94LCBrVlRIRVZDRGVjb2RlckNhcGFiaWxpdHlf
U3VwcG9ydGVkUHJvZmlsZXMsIENGU3RyaW5nUmVmKQogI2RlZmluZSBrVlRIRVZDRGVjb2RlckNh
cGFiaWxpdHlfU3VwcG9ydGVkUHJvZmlsZXMgZ2V0X1ZpZGVvVG9vbGJveF9rVlRIRVZDRGVjb2Rl
ckNhcGFiaWxpdHlfU3VwcG9ydGVkUHJvZmlsZXMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpD
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9N
ZWRpYVNhbXBsZUFWRk9iakMuaAppbmRleCBkNWE4MDZkZmUzM2U5N2MwYzFmMjhkMjExMGRmNTg4
Zjk1NjgyNmFjLi43ZTU5NDBmZGRjMTRkNjYxZGI4MDc5NTg2M2IzNGFjNGY5NTZjYjFmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2Jq
Yy9NZWRpYVNhbXBsZUFWRk9iakMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMuaApAQCAtMzEsMTMgKzMx
LDEyIEBACiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewot
ICAgIAorCiBjbGFzcyBNZWRpYVNhbXBsZUFWRk9iakMgOiBwdWJsaWMgTWVkaWFTYW1wbGUgewog
cHVibGljOgogICAgIHN0YXRpYyBSZWY8TWVkaWFTYW1wbGVBVkZPYmpDPiBjcmVhdGUoQ01TYW1w
bGVCdWZmZXJSZWYgc2FtcGxlLCBpbnQgdHJhY2tJRCkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBN
ZWRpYVNhbXBsZUFWRk9iakMoc2FtcGxlLCB0cmFja0lEKSk7IH0KICAgICBzdGF0aWMgUmVmPE1l
ZGlhU2FtcGxlQVZGT2JqQz4gY3JlYXRlKENNU2FtcGxlQnVmZmVyUmVmIHNhbXBsZSwgQXRvbWlj
U3RyaW5nIHRyYWNrSUQpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTWVkaWFTYW1wbGVBVkZPYmpD
KHNhbXBsZSwgdHJhY2tJRCkpOyB9CiAgICAgc3RhdGljIFJlZjxNZWRpYVNhbXBsZUFWRk9iakM+
IGNyZWF0ZShDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGUsIFZpZGVvUm90YXRpb24gcm90YXRpb24g
PSBWaWRlb1JvdGF0aW9uOjpOb25lLCBib29sIG1pcnJvcmVkID0gZmFsc2UpIHsgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgTWVkaWFTYW1wbGVBVkZPYmpDKHNhbXBsZSwgcm90YXRpb24sIG1pcnJvcmVk
KSk7IH0KLSAgICBzdGF0aWMgUmVmUHRyPE1lZGlhU2FtcGxlQVZGT2JqQz4gY3JlYXRlSW1hZ2VT
YW1wbGUoUmVmPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+JiYsIHVuc2lnbmVkIGxvbmcgd2lkdGgs
IHVuc2lnbmVkIGxvbmcgaGVpZ2h0KTsKICAgICBzdGF0aWMgUmVmUHRyPE1lZGlhU2FtcGxlQVZG
T2JqQz4gY3JlYXRlSW1hZ2VTYW1wbGUoVmVjdG9yPHVpbnQ4X3Q+JiYsIHVuc2lnbmVkIGxvbmcg
d2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KTsKIAogICAgIFJlZlB0cjxKU0M6OlVpbnQ4Q2xh
bXBlZEFycmF5PiBnZXRSR0JBSW1hZ2VEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC02NSw2ICs2
NCw3IEBAIHB1YmxpYzoKIAogICAgIFZpZGVvUm90YXRpb24gdmlkZW9Sb3RhdGlvbigpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIG1fcm90YXRpb247IH0KICAgICBib29sIHZpZGVvTWlycm9yZWQo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX21pcnJvcmVkOyB9CisgICAgdWludDMyX3Qgdmlk
ZW9QaXhlbEZvcm1hdCgpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgQ01TYW1wbGVCdWZmZXJSZWYg
c2FtcGxlQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGUuZ2V0KCk7IH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
TWVkaWFTYW1wbGVBVkZPYmpDLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpDLm1tCmluZGV4IGMzYmNhNjEwOTA1
NTRmODI4Yjg0ODM5YWQ0MDU0OWE2MjdiZmU3NDAuLjY3YmI0YzZkZmUzMzA0OWRiZTE5MjI4YjUw
ZjdjYTg3NjcxNGM3ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU2FtcGxlQVZGT2JqQy5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFW
Rk9iakMubW0KQEAgLTExMyw2ICsxMTMsMTIgQEAgUGxhdGZvcm1TYW1wbGUgTWVkaWFTYW1wbGVB
VkZPYmpDOjpwbGF0Zm9ybVNhbXBsZSgpCiAgICAgcmV0dXJuIHNhbXBsZTsKIH0KIAordWludDMy
X3QgTWVkaWFTYW1wbGVBVkZPYmpDOjp2aWRlb1BpeGVsRm9ybWF0KCkgY29uc3QKK3sKKyAgICBh
dXRvIHBpeGVsQnVmZmVyID0gc3RhdGljX2Nhc3Q8Q1ZQaXhlbEJ1ZmZlclJlZj4oQ01TYW1wbGVC
dWZmZXJHZXRJbWFnZUJ1ZmZlcihtX3NhbXBsZS5nZXQoKSkpOworICAgIHJldHVybiBDVlBpeGVs
QnVmZmVyR2V0UGl4ZWxGb3JtYXRUeXBlKHBpeGVsQnVmZmVyKTsKK30KKwogc3RhdGljIGJvb2wg
Q01TYW1wbGVCdWZmZXJJc1JhbmRvbUFjY2VzcyhDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGUpCiB7
CiAgICAgQ0ZBcnJheVJlZiBhdHRhY2htZW50cyA9IENNU2FtcGxlQnVmZmVyR2V0U2FtcGxlQXR0
YWNobWVudHNBcnJheShzYW1wbGUsIGZhbHNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2N2L0ltYWdlVHJhbnNmZXJTZXNzaW9uVlQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0ltYWdlVHJhbnNmZXJTZXNzaW9uVlQuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi40MTEzYWQxNjlhM2MzNjg0MWI4YTBjZDM4ZTI2ZmY1YzgwOTc3YTVmCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvSW1hZ2VUcmFu
c2ZlclNlc3Npb25WVC5oCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIFVTRShWSURFT1RPT0xCT1gpCisKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5j
bHVkZSAiTWVkaWFTYW1wbGUuaCIKKyNpbmNsdWRlIDxDb3JlTWVkaWEvQ01UaW1lLmg+CisjaW5j
bHVkZSA8d3RmL1JldGFpblB0ci5oPgorCit0eXBlZGVmIHN0cnVjdCBDR0ltYWdlICpDR0ltYWdl
UmVmOwordHlwZWRlZiBzdHJ1Y3QgT3BhcXVlVlRQaXhlbFRyYW5zZmVyU2Vzc2lvbiogVlRQaXhl
bFRyYW5zZmVyU2Vzc2lvblJlZjsKK3R5cGVkZWYgc3RydWN0IF9fQ1ZCdWZmZXIgKkNWUGl4ZWxC
dWZmZXJSZWY7Cit0eXBlZGVmIHN0cnVjdCBfX0NWUGl4ZWxCdWZmZXJQb29sICpDVlBpeGVsQnVm
ZmVyUG9vbFJlZjsKK3R5cGVkZWYgc3RydWN0IF9fSU9TdXJmYWNlICpJT1N1cmZhY2VSZWY7Cit0
eXBlZGVmIHN0cnVjdCBvcGFxdWVDTVNhbXBsZUJ1ZmZlciAqQ01TYW1wbGVCdWZmZXJSZWY7CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VUcmFuc2ZlclNlc3Npb25WVCB7Citw
dWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZVRyYW5zZmVyU2Vzc2lvblZU
PiBjcmVhdGUodWludDMyX3QgcGl4ZWxGb3JtYXQpCisgICAgeworICAgICAgICByZXR1cm4gc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ+KG5ldyBJbWFnZVRyYW5zZmVyU2Vz
c2lvblZUKHBpeGVsRm9ybWF0KSk7CisgICAgfQorCisjaWYgSEFWRShJT1NVUkZBQ0UpCisgICAg
V0VCQ09SRV9FWFBPUlQgUmVmUHRyPE1lZGlhU2FtcGxlPiBjcmVhdGVNZWRpYVNhbXBsZShJT1N1
cmZhY2VSZWYsIGNvbnN0IENNVGltZSYsIGNvbnN0IEludFNpemUmKTsKKyAgICBSZXRhaW5QdHI8
Q01TYW1wbGVCdWZmZXJSZWY+IGNyZWF0ZUNNU2FtcGxlQnVmZmVyKElPU3VyZmFjZVJlZiwgY29u
c3QgQ01UaW1lJiwgY29uc3QgSW50U2l6ZSYpOworICAgIFJldGFpblB0cjxDVlBpeGVsQnVmZmVy
UmVmPiBjcmVhdGVQaXhlbEJ1ZmZlcihJT1N1cmZhY2VSZWYsIGNvbnN0IEludFNpemUmKTsKKyNl
bmRpZgorCisgICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPE1lZGlhU2FtcGxlPiBjcmVhdGVNZWRp
YVNhbXBsZShDR0ltYWdlUmVmLCBjb25zdCBDTVRpbWUmLCBjb25zdCBJbnRTaXplJik7CisgICAg
UmVmUHRyPE1lZGlhU2FtcGxlPiBjcmVhdGVNZWRpYVNhbXBsZShNZWRpYVNhbXBsZSYsIGNvbnN0
IEludFNpemUmKTsKKworICAgIFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4gY3JlYXRlQ01T
YW1wbGVCdWZmZXIoQ1ZQaXhlbEJ1ZmZlclJlZiwgY29uc3QgQ01UaW1lJiwgY29uc3QgSW50U2l6
ZSYpOworICAgIFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4gY3JlYXRlQ01TYW1wbGVCdWZm
ZXIoQ0dJbWFnZVJlZiwgY29uc3QgQ01UaW1lJiwgY29uc3QgSW50U2l6ZSYpOworICAgIFJldGFp
blB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4gY3JlYXRlQ01TYW1wbGVCdWZmZXIoQ01TYW1wbGVCdWZm
ZXJSZWYsIGNvbnN0IEludFNpemUmKTsKKworICAgIFJldGFpblB0cjxDVlBpeGVsQnVmZmVyUmVm
PiBjcmVhdGVQaXhlbEJ1ZmZlcihDVlBpeGVsQnVmZmVyUmVmLCBjb25zdCBJbnRTaXplJik7Cisg
ICAgUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJSZWY+IGNyZWF0ZVBpeGVsQnVmZmVyKENNU2FtcGxl
QnVmZmVyUmVmLCBjb25zdCBJbnRTaXplJik7CisgICAgUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJS
ZWY+IGNyZWF0ZVBpeGVsQnVmZmVyKENHSW1hZ2VSZWYsIGNvbnN0IEludFNpemUmKTsKKworcHJp
dmF0ZToKKyAgICBXRUJDT1JFX0VYUE9SVCBJbWFnZVRyYW5zZmVyU2Vzc2lvblZUKHVpbnQzMl90
KTsKKworI2lmIEhBVkUoSU9TVVJGQUNFKQorICAgIENGRGljdGlvbmFyeVJlZiBpb1N1cmZhY2VQ
aXhlbEJ1ZmZlckNyZWF0aW9uT3B0aW9ucyhJT1N1cmZhY2VSZWYpOworI2VuZGlmCisKKyAgICBi
b29sIHNldFNpemUoY29uc3QgSW50U2l6ZSYpOworCisgICAgUmV0YWluUHRyPFZUUGl4ZWxUcmFu
c2ZlclNlc3Npb25SZWY+IG1fdHJhbnNmZXJTZXNzaW9uOworICAgIFJldGFpblB0cjxDVlBpeGVs
QnVmZmVyUG9vbFJlZj4gbV9vdXRwdXRCdWZmZXJQb29sOworICAgIFJldGFpblB0cjxDRkRpY3Rp
b25hcnlSZWY+IG1faW9TdXJmYWNlQnVmZmVyQXR0cmlidXRlczsKKyAgICB1aW50MzJfdCBtX3Bp
eGVsRm9ybWF0OworICAgIEludFNpemUgbV9zaXplOworCisgICAgUmV0YWluUHRyPENWUGl4ZWxC
dWZmZXJQb29sUmVmPiBtX2NnSW1hZ2VCdWZmZXJQb29sOworICAgIEludFNpemUgbV9jZ0ltYWdl
UG9vbFNpemU7Cit9OworCit9CisKKyNlbmRpZiAvLyBVU0UoVklERU9UT09MQk9YKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvSW1hZ2VUcmFuc2ZlclNl
c3Npb25WVC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0ltYWdlVHJh
bnNmZXJTZXNzaW9uVlQubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjYwNjQxYzNmN2YzODMwMzE5OTlhNmM2MjI5
MzY0YzZhYjQ1YzQ5NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2N2L0ltYWdlVHJhbnNmZXJTZXNzaW9uVlQubW0KQEAgLTAsMCArMSwzODAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJJbWFnZVRyYW5zZmVy
U2Vzc2lvblZULmgiCisKKyNpZiBVU0UoVklERU9UT09MQk9YKQorCisjaW1wb3J0ICJMb2dnaW5n
LmgiCisjaW1wb3J0ICJNZWRpYVNhbXBsZUFWRk9iakMuaCIKKworI2lmIEhBVkUoSU9TVVJGQUNF
KQorI2luY2x1ZGUgPHBhbC9zcGkvY29jb2EvSU9TdXJmYWNlU1BJLmg+CisjZW5kaWYKKworI2lt
cG9ydCA8cGFsL2NmL0NvcmVNZWRpYVNvZnRMaW5rLmg+CisjaW1wb3J0ICJDb3JlVmlkZW9Tb2Z0
TGluay5oIgorI2ltcG9ydCAiVmlkZW9Ub29sYm94U29mdExpbmsuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitzdGF0aWMgaW5saW5lIENGU3RyaW5nUmVmIGN2UGl4ZWxGb3JtYXRPcGVuR0xL
ZXkoKQoreworI2lmIFBMQVRGT1JNKElPUykgJiYgIVBMQVRGT1JNKElPU01BQykKKyAgICByZXR1
cm4ga0NWUGl4ZWxGb3JtYXRPcGVuR0xFU0NvbXBhdGliaWxpdHk7CisjZWxzZQorICAgIHJldHVy
biBrQ1ZQaXhlbEJ1ZmZlck9wZW5HTENvbXBhdGliaWxpdHlLZXk7CisjZW5kaWYKKworfQorCitJ
bWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpJbWFnZVRyYW5zZmVyU2Vzc2lvblZUKHVpbnQzMl90IHBp
eGVsRm9ybWF0KQoreworICAgIFZUUGl4ZWxUcmFuc2ZlclNlc3Npb25SZWYgdHJhbnNmZXJTZXNz
aW9uOworICAgIFZUUGl4ZWxUcmFuc2ZlclNlc3Npb25DcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVs
dCwgJnRyYW5zZmVyU2Vzc2lvbik7CisgICAgQVNTRVJUKHRyYW5zZmVyU2Vzc2lvbik7CisgICAg
bV90cmFuc2ZlclNlc3Npb24gPSBhZG9wdENGKHRyYW5zZmVyU2Vzc2lvbik7CisKKyAgICBWVFNl
c3Npb25TZXRQcm9wZXJ0eSh0cmFuc2ZlclNlc3Npb24sIGtWVFBpeGVsVHJhbnNmZXJQcm9wZXJ0
eUtleV9TY2FsaW5nTW9kZSwga1ZUU2NhbGluZ01vZGVfVHJpbSk7CisgICAgVlRTZXNzaW9uU2V0
UHJvcGVydHkodHJhbnNmZXJTZXNzaW9uLCBrVlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXlfRW5h
YmxlSGlnaFNwZWVkVHJhbnNmZXIsIEAoWUVTKSk7CisgICAgVlRTZXNzaW9uU2V0UHJvcGVydHko
dHJhbnNmZXJTZXNzaW9uLCBrVlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXlfUmVhbFRpbWUsIEAo
WUVTKSk7CisjaWYgUExBVEZPUk0oSU9TKSAmJiAhUExBVEZPUk0oSU9TTUFDKQorICAgIFZUU2Vz
c2lvblNldFByb3BlcnR5KHRyYW5zZmVyU2Vzc2lvbiwga1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5
S2V5X0VuYWJsZUhhcmR3YXJlQWNjZWxlcmF0ZWRUcmFuc2ZlciwgQChZRVMpKTsKKyNlbmRpZgor
CisgICAgbV9waXhlbEZvcm1hdCA9IHBpeGVsRm9ybWF0OworfQorCitib29sIEltYWdlVHJhbnNm
ZXJTZXNzaW9uVlQ6OnNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAobV9z
aXplID09IHNpemUgJiYgbV9vdXRwdXRCdWZmZXJQb29sKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIENGRGljdGlvbmFyeVJlZiBwaXhlbEJ1ZmZlck9wdGlvbnMgPSAoX19icmlkZ2UgQ0ZE
aWN0aW9uYXJ5UmVmKSBAeworICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ1ZQaXhlbEJ1
ZmZlcldpZHRoS2V5IDpAKHNpemUud2lkdGgoKSksCisgICAgICAgIChfX2JyaWRnZSBOU1N0cmlu
ZyAqKWtDVlBpeGVsQnVmZmVySGVpZ2h0S2V5OkAoc2l6ZS5oZWlnaHQoKSksCisgICAgICAgIChf
X2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsQnVmZmVyUGl4ZWxGb3JtYXRUeXBlS2V5OkAobV9w
aXhlbEZvcm1hdCksCisgICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWN2UGl4ZWxGb3JtYXRP
cGVuR0xLZXkoKSA6IEAoWUVTKSwKKyAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4
ZWxCdWZmZXJJT1N1cmZhY2VQcm9wZXJ0aWVzS2V5IDogQHsgLyplbXB0eSBkaWN0aW9uYXJ5Ki8g
fSwKKyAgICB9OworCisgICAgQ0ZEaWN0aW9uYXJ5UmVmIHBpeGVsQnVmZmVyUG9vbE9wdGlvbnMg
PSAoX19icmlkZ2UgQ0ZEaWN0aW9uYXJ5UmVmKSBAeworICAgICAgICAoX19icmlkZ2UgTlNTdHJp
bmcgKilrQ1ZQaXhlbEJ1ZmZlclBvb2xNaW5pbXVtQnVmZmVyQ291bnRLZXkgOiBAKDYpCisgICAg
fTsKKworICAgIENWUGl4ZWxCdWZmZXJQb29sUmVmIGJ1ZmZlclBvb2w7CisgICAgYXV0byBzdGF0
dXMgPSBDVlBpeGVsQnVmZmVyUG9vbENyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBwaXhlbEJ1
ZmZlclBvb2xPcHRpb25zLCBwaXhlbEJ1ZmZlck9wdGlvbnMsICZidWZmZXJQb29sKTsKKyAgICBB
U1NFUlQoIXN0YXR1cyk7CisgICAgaWYgKHN0YXR1cyAhPSBrQ1ZSZXR1cm5TdWNjZXNzKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX291dHB1dEJ1ZmZlclBvb2wgPSBhZG9wdENGKGJ1
ZmZlclBvb2wpOworICAgIG1fc2l6ZSA9IHNpemU7CisgICAgbV9pb1N1cmZhY2VCdWZmZXJBdHRy
aWJ1dGVzID0gbnVsbHB0cjsKKworICAgIHJldHVybiB0cnVlOworfQorCitSZXRhaW5QdHI8Q1ZQ
aXhlbEJ1ZmZlclJlZj4gSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlUGl4ZWxCdWZmZXIo
Q1ZQaXhlbEJ1ZmZlclJlZiBzb3VyY2VCdWZmZXIsIGNvbnN0IEludFNpemUmIHNpemUpCit7Cisg
ICAgaWYgKCFzb3VyY2VCdWZmZXIgfHwgIXNldFNpemUoc2l6ZSkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgQ1ZQaXhlbEJ1ZmZlclJlZiBvdXRwdXRCdWZmZXIgPSBudWxscHRyOwor
ICAgIGF1dG8gc3RhdHVzID0gQ1ZQaXhlbEJ1ZmZlclBvb2xDcmVhdGVQaXhlbEJ1ZmZlcihrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCBtX291dHB1dEJ1ZmZlclBvb2wuZ2V0KCksICZvdXRwdXRCdWZmZXIp
OworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgUkVMRUFTRV9MT0coTWVkaWEsICJJbWFnZVRy
YW5zZmVyU2Vzc2lvblZUOjpjcmVhdGVQaXhlbEJ1ZmZlciwgQ1ZQaXhlbEJ1ZmZlclBvb2xDcmVh
dGVQaXhlbEJ1ZmZlciBmYWlsZWQgd2l0aCBlcnJvciAlZCIsIHN0YXRpY19jYXN0PGludD4oc3Rh
dHVzKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGF1dG8gZXJyID0g
VlRQaXhlbFRyYW5zZmVyU2Vzc2lvblRyYW5zZmVySW1hZ2UobV90cmFuc2ZlclNlc3Npb24uZ2V0
KCksIHNvdXJjZUJ1ZmZlciwgb3V0cHV0QnVmZmVyKTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAg
IFJFTEVBU0VfTE9HKE1lZGlhLCAiSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlUGl4ZWxC
dWZmZXIsIFZUUGl4ZWxUcmFuc2ZlclNlc3Npb25UcmFuc2ZlckltYWdlIGZhaWxlZCB3aXRoIGVy
cm9yICVkIiwgc3RhdGljX2Nhc3Q8aW50PihlcnIpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgfQorCisgICAgcmV0dXJuIGFkb3B0Q0Yob3V0cHV0QnVmZmVyKTsKK30KKworUmV0YWlu
UHRyPENWUGl4ZWxCdWZmZXJSZWY+IEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNyZWF0ZVBpeGVs
QnVmZmVyKENNU2FtcGxlQnVmZmVyUmVmIHNvdXJjZUJ1ZmZlciwgY29uc3QgSW50U2l6ZSYgc2l6
ZSkKK3sKKyAgICBpZiAoIXNvdXJjZUJ1ZmZlciB8fCAhc2V0U2l6ZShzaXplKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGNvbnZlcnRlZFBpeGVsQnVmZmVyID0gY3JlYXRl
UGl4ZWxCdWZmZXIoQ01TYW1wbGVCdWZmZXJHZXRJbWFnZUJ1ZmZlcihzb3VyY2VCdWZmZXIpLCBz
aXplKTsKKyAgICBpZiAoIWNvbnZlcnRlZFBpeGVsQnVmZmVyKQorICAgICAgICBSRUxFQVNFX0xP
RyhNZWRpYSwgIkltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNyZWF0ZVBpeGVsQnVmZmVyOiBDTVNh
bXBsZUJ1ZmZlckdldEltYWdlQnVmZmVyIHJldHVybmVkIG51bGxwdHIiKTsKKworICAgIHJldHVy
biBjb252ZXJ0ZWRQaXhlbEJ1ZmZlcjsKK30KKworUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVm
PiBJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVhdGVDTVNhbXBsZUJ1ZmZlcihDTVNhbXBsZUJ1
ZmZlclJlZiBzb3VyY2VCdWZmZXIsIGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgaWYgKCFz
b3VyY2VCdWZmZXIgfHwgIXNldFNpemUoc2l6ZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgYXV0byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGNyZWF0ZVBpeGVsQnVmZmVyKHNvdXJj
ZUJ1ZmZlciwgc2l6ZSk7CisgICAgaWYgKCFjb252ZXJ0ZWRQaXhlbEJ1ZmZlcikKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25SZWYgZm9ybWF0
RGVzY3JpcHRpb24gPSBudWxscHRyOworICAgIGF1dG8gc3RhdHVzID0gQ01WaWRlb0Zvcm1hdERl
c2NyaXB0aW9uQ3JlYXRlRm9ySW1hZ2VCdWZmZXIoa0NGQWxsb2NhdG9yRGVmYXVsdCwgY29udmVy
dGVkUGl4ZWxCdWZmZXIuZ2V0KCksICZmb3JtYXREZXNjcmlwdGlvbik7CisgICAgaWYgKHN0YXR1
cyAhPSBub0VycikgeworICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIkltYWdlVHJhbnNmZXJT
ZXNzaW9uVlQ6OmNyZWF0ZUNNU2FtcGxlQnVmZmVyOiBmYWlsZWQgdG8gY3JlYXRlIENNVmlkZW9G
b3JtYXREZXNjcmlwdGlvbiB3aXRoIGVycm9yIGNvZGU6ICVkIiwgc3RhdGljX2Nhc3Q8aW50Pihz
dGF0dXMpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgQ01JdGVtQ291
bnQgaXRlbUNvdW50ID0gMDsKKyAgICBzdGF0dXMgPSBDTVNhbXBsZUJ1ZmZlckdldFNhbXBsZVRp
bWluZ0luZm9BcnJheShzb3VyY2VCdWZmZXIsIDEsIG51bGxwdHIsICZpdGVtQ291bnQpOworICAg
IGlmIChzdGF0dXMgIT0gbm9FcnIpIHsKKyAgICAgICAgUkVMRUFTRV9MT0coTWVkaWEsICJJbWFn
ZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVhdGVDTVNhbXBsZUJ1ZmZlcjogQ01TYW1wbGVCdWZmZXJH
ZXRTYW1wbGVUaW1pbmdJbmZvQXJyYXkgZmFpbGVkIHdpdGggZXJyb3IgY29kZTogJWQiLCBzdGF0
aWNfY2FzdDxpbnQ+KHN0YXR1cykpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9Cisg
ICAgVmVjdG9yPENNU2FtcGxlVGltaW5nSW5mbz4gdGltaW5nSW5mb0FycmF5OworICAgIENNU2Ft
cGxlVGltaW5nSW5mbyogdGltZWluZ0luZm9QdHIgPSBudWxscHRyOworICAgIGlmIChpdGVtQ291
bnQpIHsKKyAgICAgICAgdGltaW5nSW5mb0FycmF5Lmdyb3coaXRlbUNvdW50KTsKKyAgICAgICAg
c3RhdHVzID0gQ01TYW1wbGVCdWZmZXJHZXRTYW1wbGVUaW1pbmdJbmZvQXJyYXkoc291cmNlQnVm
ZmVyLCBpdGVtQ291bnQsIHRpbWluZ0luZm9BcnJheS5kYXRhKCksIG51bGxwdHIpOworICAgICAg
ICBpZiAoc3RhdHVzICE9IG5vRXJyKSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwg
IkltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNyZWF0ZUNNU2FtcGxlQnVmZmVyOiBDTVNhbXBsZUJ1
ZmZlckdldFNhbXBsZVRpbWluZ0luZm9BcnJheSBmYWlsZWQgd2l0aCBlcnJvciBjb2RlOiAlZCIs
IHN0YXRpY19jYXN0PGludD4oc3RhdHVzKSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgfQorICAgICAgICB0aW1laW5nSW5mb1B0ciA9IHRpbWluZ0luZm9BcnJheS5kYXRh
KCk7CisgICAgfQorCisgICAgQ01TYW1wbGVCdWZmZXJSZWYgcmVzaXplZFNhbXBsZUJ1ZmZlcjsK
KyAgICBzdGF0dXMgPSBDTVNhbXBsZUJ1ZmZlckNyZWF0ZVJlYWR5V2l0aEltYWdlQnVmZmVyKGtD
RkFsbG9jYXRvckRlZmF1bHQsIGNvbnZlcnRlZFBpeGVsQnVmZmVyLmdldCgpLCBmb3JtYXREZXNj
cmlwdGlvbiwgdGltZWluZ0luZm9QdHIsICZyZXNpemVkU2FtcGxlQnVmZmVyKTsKKyAgICBDRlJl
bGVhc2UoZm9ybWF0RGVzY3JpcHRpb24pOworICAgIGlmIChzdGF0dXMgIT0gbm9FcnIpIHsKKyAg
ICAgICAgUkVMRUFTRV9MT0coTWVkaWEsICJJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVhdGVD
TVNhbXBsZUJ1ZmZlcjogZmFpbGVkIHRvIGNyZWF0ZSBDTVNhbXBsZUJ1ZmZlciB3aXRoIGVycm9y
IGNvZGU6ICVkIiwgc3RhdGljX2Nhc3Q8aW50PihzdGF0dXMpKTsKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIGFkb3B0Q0YocmVzaXplZFNhbXBsZUJ1ZmZlcik7
Cit9CisKK1JldGFpblB0cjxDVlBpeGVsQnVmZmVyUmVmPiBJbWFnZVRyYW5zZmVyU2Vzc2lvblZU
OjpjcmVhdGVQaXhlbEJ1ZmZlcihDR0ltYWdlUmVmIGltYWdlLCBjb25zdCBJbnRTaXplJiBzaXpl
KQoreworICAgIGlmICghaW1hZ2UgfHwgIXNldFNpemUoc2l6ZSkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgYXV0byBpbWFnZVNpemUgPSBJbnRTaXplKENHSW1hZ2VHZXRXaWR0aChp
bWFnZSksIENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpKTsKKyAgICBpZiAoIW1fY2dJbWFnZUJ1ZmZl
clBvb2wgfHwgbV9jZ0ltYWdlUG9vbFNpemUgIT0gaW1hZ2VTaXplKSB7CisKKyAgICAgICAgQ1ZQ
aXhlbEJ1ZmZlclBvb2xSZWYgYnVmZmVyUG9vbDsKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIHBp
eGVsQnVmZmVyT3B0aW9ucyA9IChfX2JyaWRnZSBDRkRpY3Rpb25hcnlSZWYpIEB7CisgICAgICAg
ICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ1ZQaXhlbEJ1ZmZlclBpeGVsRm9ybWF0VHlwZUtl
eSA6IEAoa0NWUGl4ZWxGb3JtYXRUeXBlXzMyQVJHQiksCisgICAgICAgICAgICAoX19icmlkZ2Ug
TlNTdHJpbmcgKilrQ1ZQaXhlbEJ1ZmZlcldpZHRoS2V5IDogQChpbWFnZVNpemUud2lkdGgoKSks
CisgICAgICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ1ZQaXhlbEJ1ZmZlckhlaWdodEtl
eSA6IEAoaW1hZ2VTaXplLmhlaWdodCgpKSwKKyAgICAgICAgICAgIChfX2JyaWRnZSBOU1N0cmlu
ZyAqKWN2UGl4ZWxGb3JtYXRPcGVuR0xLZXkoKSA6IEAoWUVTKSwKKyAgICAgICAgICAgIChfX2Jy
aWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsQnVmZmVySU9TdXJmYWNlUHJvcGVydGllc0tleSA6IEB7
IC8qZW1wdHkgZGljdGlvbmFyeSovIH0KKyAgICAgICAgfTsKKworICAgICAgICBDRkRpY3Rpb25h
cnlSZWYgcGl4ZWxCdWZmZXJQb29sT3B0aW9ucyA9IChfX2JyaWRnZSBDRkRpY3Rpb25hcnlSZWYp
IEB7CisgICAgICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ1ZQaXhlbEJ1ZmZlclBvb2xN
aW5pbXVtQnVmZmVyQ291bnRLZXkgOiBAKDQpCisgICAgICAgIH07CisKKyAgICAgICAgQ1ZSZXR1
cm4gc3RhdHVzID0gQ1ZQaXhlbEJ1ZmZlclBvb2xDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
cGl4ZWxCdWZmZXJQb29sT3B0aW9ucywgcGl4ZWxCdWZmZXJPcHRpb25zLCAmYnVmZmVyUG9vbCk7
CisgICAgICAgIGlmIChzdGF0dXMgIT0ga0NWUmV0dXJuU3VjY2VzcykKKyAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgICAgIG1fY2dJbWFnZUJ1ZmZlclBvb2wgPSBhZG9wdENGKGJ1
ZmZlclBvb2wpOworICAgICAgICBtX2NnSW1hZ2VQb29sU2l6ZSA9IGltYWdlU2l6ZTsKKyAgICB9
CisKKyAgICBDVlBpeGVsQnVmZmVyUmVmIHJnYkJ1ZmZlcjsKKyAgICBDVlJldHVybiBzdGF0dXMg
PSBDVlBpeGVsQnVmZmVyUG9vbENyZWF0ZVBpeGVsQnVmZmVyKGtDRkFsbG9jYXRvckRlZmF1bHQs
IG1fY2dJbWFnZUJ1ZmZlclBvb2wuZ2V0KCksICZyZ2JCdWZmZXIpOworICAgIGlmIChzdGF0dXMg
IT0ga0NWUmV0dXJuU3VjY2VzcykgeworICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIkltYWdl
VHJhbnNmZXJTZXNzaW9uVlQ6OnJlc2l6ZTogQ1ZQaXhlbEJ1ZmZlclBvb2xDcmVhdGVQaXhlbEJ1
ZmZlciBmYWlsZWQgd2l0aCBlcnJvciBjb2RlOiAlZCIsIHN0YXRpY19jYXN0PGludD4oc3RhdHVz
KSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIENWUGl4ZWxCdWZmZXJM
b2NrQmFzZUFkZHJlc3MocmdiQnVmZmVyLCAwKTsKKyAgICB2b2lkKiBkYXRhID0gQ1ZQaXhlbEJ1
ZmZlckdldEJhc2VBZGRyZXNzKHJnYkJ1ZmZlcik7CisgICAgYXV0byBjb250ZXh0ID0gYWRvcHRD
RihDR0JpdG1hcENvbnRleHRDcmVhdGUoZGF0YSwgaW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6
ZS5oZWlnaHQoKSwgOCwgQ1ZQaXhlbEJ1ZmZlckdldEJ5dGVzUGVyUm93KHJnYkJ1ZmZlciksIHNS
R0JDb2xvclNwYWNlUmVmKCksIChDR0JpdG1hcEluZm8pIGtDR0ltYWdlQWxwaGFOb25lU2tpcEZp
cnN0KSk7CisgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2Uo
MCwgMCwgaW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSksIGltYWdlKTsKKyAg
ICBDVlBpeGVsQnVmZmVyVW5sb2NrQmFzZUFkZHJlc3MocmdiQnVmZmVyLCAwKTsKKworICAgIGF1
dG8gcmV0YWluZWRSR0JCdWZmZXIgPSBhZG9wdENGKHJnYkJ1ZmZlcik7CisKKyAgICByZXR1cm4g
Y3JlYXRlUGl4ZWxCdWZmZXIocmV0YWluZWRSR0JCdWZmZXIuZ2V0KCksIHNpemUpOworfQorCitS
ZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+IEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNyZWF0
ZUNNU2FtcGxlQnVmZmVyKENWUGl4ZWxCdWZmZXJSZWYgc291cmNlQnVmZmVyLCBjb25zdCBDTVRp
bWUmIHNhbXBsZVRpbWUsIGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgaWYgKCFzb3VyY2VC
dWZmZXIgfHwgIXNldFNpemUoc2l6ZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
YXV0byBidWZmZXJTaXplID0gSW50U2l6ZShDVlBpeGVsQnVmZmVyR2V0V2lkdGgoc291cmNlQnVm
ZmVyKSwgQ1ZQaXhlbEJ1ZmZlckdldEhlaWdodChzb3VyY2VCdWZmZXIpKTsKKyAgICBSZXRhaW5Q
dHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gaW5wdXRCdWZmZXIgPSBzb3VyY2VCdWZmZXI7CisgICAgaWYg
KGJ1ZmZlclNpemUgIT0gbV9zaXplKSB7CisgICAgICAgIGlucHV0QnVmZmVyID0gY3JlYXRlUGl4
ZWxCdWZmZXIoc291cmNlQnVmZmVyLCBtX3NpemUpOworICAgICAgICBpZiAoIWlucHV0QnVmZmVy
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgQ01WaWRlb0Zvcm1h
dERlc2NyaXB0aW9uUmVmIGZvcm1hdERlc2NyaXB0aW9uID0gbnVsbHB0cjsKKyAgICBhdXRvIHN0
YXR1cyA9IENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkNyZWF0ZUZvckltYWdlQnVmZmVyKGtDRkFs
bG9jYXRvckRlZmF1bHQsIChDVkltYWdlQnVmZmVyUmVmKWlucHV0QnVmZmVyLmdldCgpLCAmZm9y
bWF0RGVzY3JpcHRpb24pOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgUkVMRUFTRV9MT0co
TWVkaWEsICJJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVhdGVDTVNhbXBsZUJ1ZmZlcjogZmFp
bGVkIHRvIGluaXRpYWxpemUgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uIHdpdGggZXJyb3IgY29k
ZTogJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9CisKKyAgICBDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGVCdWZmZXI7CisgICAgQ01T
YW1wbGVUaW1pbmdJbmZvIHRpbWluZ0luZm8gPSB7IGtDTVRpbWVJbnZhbGlkLCBzYW1wbGVUaW1l
LCBzYW1wbGVUaW1lIH07CisgICAgc3RhdHVzID0gQ01TYW1wbGVCdWZmZXJDcmVhdGVSZWFkeVdp
dGhJbWFnZUJ1ZmZlcihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAoQ1ZJbWFnZUJ1ZmZlclJlZilpbnB1
dEJ1ZmZlci5nZXQoKSwgZm9ybWF0RGVzY3JpcHRpb24sICZ0aW1pbmdJbmZvLCAmc2FtcGxlQnVm
ZmVyKTsKKyAgICBDRlJlbGVhc2UoZm9ybWF0RGVzY3JpcHRpb24pOworICAgIGlmIChzdGF0dXMp
IHsKKyAgICAgICAgUkVMRUFTRV9MT0coTWVkaWEsICJJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpj
cmVhdGVDTVNhbXBsZUJ1ZmZlcjogZmFpbGVkIHRvIGluaXRpYWxpemUgQ01TYW1wbGVCdWZmZXIg
d2l0aCBlcnJvciBjb2RlOiAlZCIsIHN0YXRpY19jYXN0PGludD4oc3RhdHVzKSk7CisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHJldHVybiBhZG9wdENGKHNhbXBsZUJ1ZmZl
cik7Cit9CisKK1JldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4gSW1hZ2VUcmFuc2ZlclNlc3Np
b25WVDo6Y3JlYXRlQ01TYW1wbGVCdWZmZXIoQ0dJbWFnZVJlZiBpbWFnZSwgY29uc3QgQ01UaW1l
JiBzYW1wbGVUaW1lLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIGF1dG8gcGl4ZWxCdWZm
ZXIgPSBjcmVhdGVQaXhlbEJ1ZmZlcihpbWFnZSwgc2l6ZSk7CisgICAgaWYgKCFwaXhlbEJ1ZmZl
cikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gY3JlYXRlQ01TYW1wbGVC
dWZmZXIocGl4ZWxCdWZmZXIuZ2V0KCksIHNhbXBsZVRpbWUsIHNpemUpOworfQorCisjaWYgSEFW
RShJT1NVUkZBQ0UpCisKKyNpZiBQTEFURk9STShNQUMpCitzdGF0aWMgaW50MzJfdCByb3VuZFVw
VG9NYWNyb2Jsb2NrTXVsdGlwbGUoaW50MzJfdCBzaXplKQoreworICAgIHJldHVybiAoc2l6ZSAr
IDE1KSAmIH4xNTsKK30KKyNlbmRpZgorCitDRkRpY3Rpb25hcnlSZWYgSW1hZ2VUcmFuc2ZlclNl
c3Npb25WVDo6aW9TdXJmYWNlUGl4ZWxCdWZmZXJDcmVhdGlvbk9wdGlvbnMoSU9TdXJmYWNlUmVm
IHN1cmZhY2UpCit7CisgICAgaWYgKG1faW9TdXJmYWNlQnVmZmVyQXR0cmlidXRlcykKKyAgICAg
ICAgcmV0dXJuIG1faW9TdXJmYWNlQnVmZmVyQXR0cmlidXRlcy5nZXQoKTsKKworICAgIG1faW9T
dXJmYWNlQnVmZmVyQXR0cmlidXRlcyA9IChfX2JyaWRnZSBDRkRpY3Rpb25hcnlSZWYpIEB7Cisg
ICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWN2UGl4ZWxGb3JtYXRPcGVuR0xLZXkoKSA6IEAo
WUVTKSwKKyAgICB9OworCisjaWYgUExBVEZPUk0oTUFDKQorICAgIGF1dG8gZm9ybWF0ID0gSU9T
dXJmYWNlR2V0UGl4ZWxGb3JtYXQoc3VyZmFjZSk7CisgICAgYXV0byB3aWR0aCA9IElPU3VyZmFj
ZUdldFdpZHRoKHN1cmZhY2UpOworICAgIGF1dG8gaGVpZ2h0ID0gSU9TdXJmYWNlR2V0SGVpZ2h0
KHN1cmZhY2UpOworICAgIGludDMyX3QgZXh0ZW5kZWRSaWdodCA9IHJvdW5kVXBUb01hY3JvYmxv
Y2tNdWx0aXBsZSh3aWR0aCkgLSB3aWR0aDsKKyAgICBpbnQzMl90IGV4dGVuZGVkQm90dG9tID0g
cm91bmRVcFRvTWFjcm9ibG9ja011bHRpcGxlKGhlaWdodCkgLSBoZWlnaHQ7CisKKyAgICBpZiAo
KGZvcm1hdCA9PSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOEJpUGxhbmFyVmlkZW9SYW5n
ZSB8fCBmb3JtYXQgPT0ga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhCaVBsYW5hckZ1bGxS
YW5nZSkKKyAgICAgICAgJiYgKElPU3VyZmFjZUdldEJ5dGVzUGVyUm93T2ZQbGFuZShzdXJmYWNl
LCAwKSA+PSB3aWR0aCArIGV4dGVuZGVkUmlnaHQpCisgICAgICAgICYmIChJT1N1cmZhY2VHZXRC
eXRlc1BlclJvd09mUGxhbmUoc3VyZmFjZSwgMSkgPj0gd2lkdGggKyBleHRlbmRlZFJpZ2h0KQor
ICAgICAgICAmJiAoSU9TdXJmYWNlR2V0QWxsb2NTaXplKHN1cmZhY2UpID49IChoZWlnaHQgKyBl
eHRlbmRlZEJvdHRvbSkgKiBJT1N1cmZhY2VHZXRCeXRlc1BlclJvd09mUGxhbmUoc3VyZmFjZSwg
MCkgKiAzIC8gMikpIHsKKyAgICAgICAgICAgIG1faW9TdXJmYWNlQnVmZmVyQXR0cmlidXRlcyA9
IChfX2JyaWRnZSBDRkRpY3Rpb25hcnlSZWYpIEB7CisgICAgICAgICAgICAgICAgKF9fYnJpZGdl
IE5TU3RyaW5nICopa0NWUGl4ZWxCdWZmZXJPcGVuR0xDb21wYXRpYmlsaXR5S2V5OworICAgICAg
ICAgICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsQnVmZmVyRXh0ZW5kZWRQaXhl
bHNSaWdodEtleSA6IEAoZXh0ZW5kZWRSaWdodCksCisgICAgICAgICAgICAgICAgKF9fYnJpZGdl
IE5TU3RyaW5nICopa0NWUGl4ZWxCdWZmZXJFeHRlbmRlZFBpeGVsc0JvdHRvbUtleSA6IEAoZXh0
ZW5kZWRCb3R0b20pCisgICAgICAgICAgICB9OworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKHN1cmZhY2UpOworI2VuZGlmCisKKyAgICByZXR1cm4gbV9pb1N1cmZhY2VCdWZmZXJBdHRy
aWJ1dGVzLmdldCgpOworfQorCitSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gSW1hZ2VUcmFu
c2ZlclNlc3Npb25WVDo6Y3JlYXRlUGl4ZWxCdWZmZXIoSU9TdXJmYWNlUmVmIHN1cmZhY2UsIGNv
bnN0IEludFNpemUmIHNpemUpCit7CisgICAgaWYgKCFzdXJmYWNlIHx8ICFzZXRTaXplKHNpemUp
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIENWUGl4ZWxCdWZmZXJSZWYgcGl4ZWxC
dWZmZXI7CisgICAgYXV0byBzdGF0dXMgPSBDVlBpeGVsQnVmZmVyQ3JlYXRlV2l0aElPU3VyZmFj
ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBzdXJmYWNlLCBpb1N1cmZhY2VQaXhlbEJ1ZmZlckNyZWF0
aW9uT3B0aW9ucyhzdXJmYWNlKSwgJnBpeGVsQnVmZmVyKTsKKyAgICBpZiAoc3RhdHVzKSB7Cisg
ICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhLCAiQ1ZQaXhlbEJ1ZmZlckNyZWF0ZVdpdGhJT1N1cmZh
Y2UgZmFpbGVkIHdpdGggZXJyb3IgY29kZTogJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykp
OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBhdXRvIHJldGFpbmVkQnVm
ZmVyID0gYWRvcHRDRihwaXhlbEJ1ZmZlcik7CisgICAgaWYgKG1fc2l6ZSA9PSBJbnRTaXplKENW
UGl4ZWxCdWZmZXJHZXRXaWR0aChwaXhlbEJ1ZmZlciksIENWUGl4ZWxCdWZmZXJHZXRIZWlnaHQo
cGl4ZWxCdWZmZXIpKSAmJiBtX3BpeGVsRm9ybWF0ID09IENWUGl4ZWxCdWZmZXJHZXRQaXhlbEZv
cm1hdFR5cGUocGl4ZWxCdWZmZXIpKQorICAgICAgICByZXR1cm4gcmV0YWluZWRCdWZmZXI7CisK
KyAgICByZXR1cm4gY3JlYXRlUGl4ZWxCdWZmZXIocGl4ZWxCdWZmZXIsIHNpemUpOworfQorCitS
ZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+IEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNyZWF0
ZUNNU2FtcGxlQnVmZmVyKElPU3VyZmFjZVJlZiBzdXJmYWNlLCBjb25zdCBDTVRpbWUmIHNhbXBs
ZVRpbWUsIGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgaWYgKCFzdXJmYWNlIHx8ICFzZXRT
aXplKHNpemUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gcGl4ZWxCdWZm
ZXIgPSBjcmVhdGVQaXhlbEJ1ZmZlcihzdXJmYWNlLCBzaXplKTsKKyAgICBpZiAoIXBpeGVsQnVm
ZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBjcmVhdGVDTVNhbXBs
ZUJ1ZmZlcihwaXhlbEJ1ZmZlci5nZXQoKSwgc2FtcGxlVGltZSwgc2l6ZSk7Cit9CisjZW5kaWYK
KworUmVmUHRyPE1lZGlhU2FtcGxlPiBJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVhdGVNZWRp
YVNhbXBsZShNZWRpYVNhbXBsZSYgc2FtcGxlLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAg
IEFTU0VSVChzYW1wbGUucGxhdGZvcm1TYW1wbGUoKS50eXBlID09IFBsYXRmb3JtU2FtcGxlOjpD
TVNhbXBsZUJ1ZmZlclR5cGUpOworCisgICAgaWYgKHNpemUgPT0gcm91bmRlZEludFNpemUoc2Ft
cGxlLnByZXNlbnRhdGlvblNpemUoKSkpCisgICAgICAgIHJldHVybiAmc2FtcGxlOworCisgICAg
aWYgKCFzZXRTaXplKHNpemUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8g
cmVzaXplZEJ1ZmZlciA9IGNyZWF0ZUNNU2FtcGxlQnVmZmVyKHNhbXBsZS5wbGF0Zm9ybVNhbXBs
ZSgpLnNhbXBsZS5jbVNhbXBsZUJ1ZmZlciwgc2l6ZSk7CisgICAgaWYgKCFyZXNpemVkQnVmZmVy
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBNZWRpYVNhbXBsZUFWRk9i
akM6OmNyZWF0ZShyZXNpemVkQnVmZmVyLmdldCgpLCBzYW1wbGUudmlkZW9Sb3RhdGlvbigpLCBz
YW1wbGUudmlkZW9NaXJyb3JlZCgpKTsKK30KKworI2lmIEhBVkUoSU9TVVJGQUNFKQorUmVmUHRy
PE1lZGlhU2FtcGxlPiBJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVhdGVNZWRpYVNhbXBsZShJ
T1N1cmZhY2VSZWYgc3VyZmFjZSwgY29uc3QgQ01UaW1lJiBzYW1wbGVUaW1lLCBjb25zdCBJbnRT
aXplJiBzaXplKQoreworICAgIGF1dG8gc2FtcGxlQnVmZmVyID0gY3JlYXRlQ01TYW1wbGVCdWZm
ZXIoc3VyZmFjZSwgc2FtcGxlVGltZSwgc2l6ZSk7CisgICAgaWYgKCFzYW1wbGVCdWZmZXIpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIE1lZGlhU2FtcGxlQVZGT2JqQzo6
Y3JlYXRlKHNhbXBsZUJ1ZmZlci5nZXQoKSk7Cit9CisjZW5kaWYKKworUmVmUHRyPE1lZGlhU2Ft
cGxlPiBJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVhdGVNZWRpYVNhbXBsZShDR0ltYWdlUmVm
IGltYWdlLCBjb25zdCBDTVRpbWUmIHNhbXBsZVRpbWUsIGNvbnN0IEludFNpemUmIHNpemUpCit7
CisgICAgYXV0byBzYW1wbGVCdWZmZXIgPSBjcmVhdGVDTVNhbXBsZUJ1ZmZlcihpbWFnZSwgc2Ft
cGxlVGltZSwgc2l6ZSk7CisgICAgaWYgKCFzYW1wbGVCdWZmZXIpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgcmV0dXJuIE1lZGlhU2FtcGxlQVZGT2JqQzo6Y3JlYXRlKHNhbXBsZUJ1
ZmZlci5nZXQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVT
RShWSURFT1RPT0xCT1gpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jdi9QaXhlbEJ1ZmZlclJlc2l6ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2N2L1BpeGVsQnVmZmVyUmVzaXplci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAzZGNkNGFiMjI0MDUwZTQ3ZmI1NzNjNWE5M2UzNzVmODgyOTE1ZjVkLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2N2L1BpeGVsQnVmZmVyUmVzaXplci5oCisrKyAvZGV2L251bGwKQEAgLTEs
NTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgVVNFKFZJREVPVE9P
TEJPWCkKLQotI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+
Ci0KLXR5cGVkZWYgc3RydWN0IE9wYXF1ZVZUUGl4ZWxUcmFuc2ZlclNlc3Npb24qIFZUUGl4ZWxU
cmFuc2ZlclNlc3Npb25SZWY7Ci10eXBlZGVmIHN0cnVjdCBfX0NWQnVmZmVyICpDVlBpeGVsQnVm
ZmVyUmVmOwotdHlwZWRlZiBzdHJ1Y3QgX19DVlBpeGVsQnVmZmVyUG9vbCAqQ1ZQaXhlbEJ1ZmZl
clBvb2xSZWY7Ci10eXBlZGVmIHN0cnVjdCBvcGFxdWVDTVNhbXBsZUJ1ZmZlciAqQ01TYW1wbGVC
dWZmZXJSZWY7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUGl4ZWxCdWZmZXJSZXNp
emVyIHsKLXB1YmxpYzoKLSAgICBQaXhlbEJ1ZmZlclJlc2l6ZXIoSW50U2l6ZSwgT1NUeXBlKTsK
LQotICAgIFJldGFpblB0cjxDVlBpeGVsQnVmZmVyUmVmPiByZXNpemUoQ1ZQaXhlbEJ1ZmZlclJl
Zik7Ci0gICAgUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiByZXNpemUoQ01TYW1wbGVCdWZm
ZXJSZWYpOwotICAgIGJvb2wgY2FuUmVzaXplVG8oSW50U2l6ZSBzaXplKSB7IHJldHVybiBzaXpl
ID09IG1fc2l6ZTsgfQotCi1wcml2YXRlOgotICAgIFJldGFpblB0cjxWVFBpeGVsVHJhbnNmZXJT
ZXNzaW9uUmVmPiBtX3RyYW5zZmVyU2Vzc2lvbjsKLSAgICBSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZl
clBvb2xSZWY+IG1fYnVmZmVyUG9vbDsKLSAgICBJbnRTaXplIG1fc2l6ZTsKLX07Ci0KLX0KLQot
I2VuZGlmIC8vIFVTRShWSURFT1RPT0xCT1gpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jdi9QaXhlbEJ1ZmZlclJlc2l6ZXIubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9QaXhlbEJ1ZmZlclJlc2l6ZXIubW0KZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDZjNzQxYTBjZjM1MjAxMjYyOWEwMjkwMThmY2M1MjJjZGJiZWJl
ODguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJSZXNpemVyLm1tCisrKyAv
ZGV2L251bGwKQEAgLTEsMTM4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmln
LmgiCi0jaW1wb3J0ICJQaXhlbEJ1ZmZlclJlc2l6ZXIuaCIKLQotI2lmIFVTRShWSURFT1RPT0xC
T1gpCi0KLSNpbXBvcnQgIkxvZ2dpbmcuaCIKLSNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgot
Ci0jaW1wb3J0ICJDb3JlVmlkZW9Tb2Z0TGluay5oIgotI2ltcG9ydCAiVmlkZW9Ub29sYm94U29m
dExpbmsuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QaXhlbEJ1ZmZlclJlc2l6ZXI6OlBp
eGVsQnVmZmVyUmVzaXplcihJbnRTaXplIHNpemUsIE9TVHlwZSB2aWRlb0Zvcm1hdCkKLXsKLSAg
ICBWVFBpeGVsVHJhbnNmZXJTZXNzaW9uUmVmIHRyYW5zZmVyU2Vzc2lvbjsKLSAgICBWVFBpeGVs
VHJhbnNmZXJTZXNzaW9uQ3JlYXRlKE5VTEwsICZ0cmFuc2ZlclNlc3Npb24pOwotICAgIEFTU0VS
VCh0cmFuc2ZlclNlc3Npb24pOwotICAgIG1fdHJhbnNmZXJTZXNzaW9uID0gYWRvcHRDRih0cmFu
c2ZlclNlc3Npb24pOwotCi0gICAgVlRTZXNzaW9uU2V0UHJvcGVydHkodHJhbnNmZXJTZXNzaW9u
LCBrVlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXlfU2NhbGluZ01vZGUsIGtWVFNjYWxpbmdNb2Rl
X1RyaW0pOwotCi0gICAgQ0ZEaWN0aW9uYXJ5UmVmIHNvdXJjZVBpeGVsQnVmZmVyT3B0aW9ucyA9
IChfX2JyaWRnZSBDRkRpY3Rpb25hcnlSZWYpIEB7Ci0gICAgICAgIChfX2JyaWRnZSBOU1N0cmlu
ZyAqKWtDVlBpeGVsQnVmZmVyV2lkdGhLZXkgOkAoc2l6ZS53aWR0aCgpKSwKLSAgICAgICAgKF9f
YnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxCdWZmZXJIZWlnaHRLZXk6QChzaXplLmhlaWdodCgp
KSwKLSAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxCdWZmZXJQaXhlbEZvcm1h
dFR5cGVLZXk6QCh2aWRlb0Zvcm1hdCksCi0jaWYgUExBVEZPUk0oSU9TKSAmJiAhUExBVEZPUk0o
SU9TTUFDKQotICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ1ZQaXhlbEZvcm1hdE9wZW5H
TEVTQ29tcGF0aWJpbGl0eSA6IEAoWUVTKSwKLSNlbHNlCi0gICAgICAgIChfX2JyaWRnZSBOU1N0
cmluZyAqKWtDVlBpeGVsQnVmZmVyT3BlbkdMQ29tcGF0aWJpbGl0eUtleSA6IEAoWUVTKSwKLSNl
bmRpZgotICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ1ZQaXhlbEJ1ZmZlcklPU3VyZmFj
ZVByb3BlcnRpZXNLZXkgOiBAeyAvKmVtcHR5IGRpY3Rpb25hcnkqLyB9LAotICAgIH07Ci0gICAg
Q1ZQaXhlbEJ1ZmZlclBvb2xSZWYgYnVmZmVyUG9vbDsKLSAgICBhdXRvIHN0YXR1cyA9IENWUGl4
ZWxCdWZmZXJQb29sQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIE5VTEwsIHNvdXJjZVBpeGVs
QnVmZmVyT3B0aW9ucywgJmJ1ZmZlclBvb2wpOwotICAgIEFTU0VSVCghc3RhdHVzKTsKLSAgICBp
ZiAoc3RhdHVzICE9IGtDVlJldHVyblN1Y2Nlc3MpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
YnVmZmVyUG9vbCA9IGFkb3B0Q0YoYnVmZmVyUG9vbCk7Ci0gICAgbV9zaXplID0gc2l6ZTsKLX0K
LQotUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJSZWY+IFBpeGVsQnVmZmVyUmVzaXplcjo6cmVzaXpl
KENWUGl4ZWxCdWZmZXJSZWYgaW5wdXRCdWZmZXIpCi17Ci0gICAgQVNTRVJUKG1fYnVmZmVyUG9v
bCAmJiAhbV9zaXplLmlzRW1wdHkoKSk7Ci0gICAgaWYgKCFtX2J1ZmZlclBvb2wgfHwgbV9zaXpl
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZXRhaW5QdHI8Q1ZQ
aXhlbEJ1ZmZlclJlZj4gcmVzdWx0OwotICAgIENWUGl4ZWxCdWZmZXJSZWYgb3V0cHV0QnVmZmVy
ID0gbnVsbHB0cjsKLQotICAgIGF1dG8gc3RhdHVzID0gQ1ZQaXhlbEJ1ZmZlclBvb2xDcmVhdGVQ
aXhlbEJ1ZmZlcihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBtX2J1ZmZlclBvb2wuZ2V0KCksICZvdXRw
dXRCdWZmZXIpOwotICAgIGlmIChzdGF0dXMpIHsKLSAgICAgICAgUkVMRUFTRV9MT0coTWVkaWEs
ICJQaXhlbEJ1ZmZlclJlc2l6ZXI6OnJlc2l6ZSwgQ1ZQaXhlbEJ1ZmZlclBvb2xDcmVhdGVQaXhl
bEJ1ZmZlciBmYWlsZWQgd2l0aCBlcnJvciAlZCIsIHN0YXRpY19jYXN0PGludD4oc3RhdHVzKSk7
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICByZXN1bHQgPSBhZG9wdENGKG91
dHB1dEJ1ZmZlcik7Ci0KLSAgICBhdXRvIGVyciA9IFZUUGl4ZWxUcmFuc2ZlclNlc3Npb25UcmFu
c2ZlckltYWdlKG1fdHJhbnNmZXJTZXNzaW9uLmdldCgpLCBpbnB1dEJ1ZmZlciwgb3V0cHV0QnVm
ZmVyKTsKLSAgICBpZiAoZXJyKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhLCAiUGl4ZWxC
dWZmZXJSZXNpemVyOjpyZXNpemUsIFZUUGl4ZWxUcmFuc2ZlclNlc3Npb25UcmFuc2ZlckltYWdl
IGZhaWxlZCB3aXRoIGVycm9yICVkIiwgc3RhdGljX2Nhc3Q8aW50PihlcnIpKTsKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUmV0YWlu
UHRyPENNU2FtcGxlQnVmZmVyUmVmPiBQaXhlbEJ1ZmZlclJlc2l6ZXI6OnJlc2l6ZShDTVNhbXBs
ZUJ1ZmZlclJlZiBzYW1wbGVCdWZmZXIpCi17Ci0gICAgYXV0byBjb252ZXJ0ZWRQaXhlbEJ1ZmZl
ciA9IHJlc2l6ZShDTVNhbXBsZUJ1ZmZlckdldEltYWdlQnVmZmVyKHNhbXBsZUJ1ZmZlcikpOwot
ICAgIGlmICghY29udmVydGVkUGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uUmVmIGZvcm1hdERlc2NyaXB0aW9uID0gbnVs
bHB0cjsKLSAgICBhdXRvIHN0YXR1cyA9IENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkNyZWF0ZUZv
ckltYWdlQnVmZmVyKGtDRkFsbG9jYXRvckRlZmF1bHQsIGNvbnZlcnRlZFBpeGVsQnVmZmVyLmdl
dCgpLCAmZm9ybWF0RGVzY3JpcHRpb24pOwotICAgIGlmIChzdGF0dXMgIT0gbm9FcnIpIHsKLSAg
ICAgICAgUkVMRUFTRV9MT0coTWVkaWEsICJQaXhlbEJ1ZmZlclJlc2l6ZXI6OnJlc2l6ZTogZmFp
bGVkIHRvIGNyZWF0ZSBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb24gd2l0aCBlcnJvciBjb2RlOiAl
ZCIsIHN0YXRpY19jYXN0PGludD4oc3RhdHVzKSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIH0KLQotICAgIENNSXRlbUNvdW50IGl0ZW1Db3VudCA9IDA7Ci0gICAgc3RhdHVzID0gQ01T
YW1wbGVCdWZmZXJHZXRTYW1wbGVUaW1pbmdJbmZvQXJyYXkoc2FtcGxlQnVmZmVyLCAxLCBudWxs
cHRyLCAmaXRlbUNvdW50KTsKLSAgICBpZiAoc3RhdHVzICE9IG5vRXJyKSB7Ci0gICAgICAgIFJF
TEVBU0VfTE9HKE1lZGlhLCAiUGl4ZWxCdWZmZXJSZXNpemVyOjpyZXNpemU6IENNU2FtcGxlQnVm
ZmVyR2V0U2FtcGxlVGltaW5nSW5mb0FycmF5IGZhaWxlZCB3aXRoIGVycm9yIGNvZGU6ICVkIiwg
c3RhdGljX2Nhc3Q8aW50PihzdGF0dXMpKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
fQotICAgIFZlY3RvcjxDTVNhbXBsZVRpbWluZ0luZm8+IHRpbWluZ0luZm9BcnJheTsKLSAgICBD
TVNhbXBsZVRpbWluZ0luZm8qIHRpbWVpbmdJbmZvUHRyID0gbnVsbHB0cjsKLSAgICBpZiAoaXRl
bUNvdW50KSB7Ci0gICAgICAgIHRpbWluZ0luZm9BcnJheS5ncm93KGl0ZW1Db3VudCk7Ci0gICAg
ICAgIHN0YXR1cyA9IENNU2FtcGxlQnVmZmVyR2V0U2FtcGxlVGltaW5nSW5mb0FycmF5KHNhbXBs
ZUJ1ZmZlciwgaXRlbUNvdW50LCB0aW1pbmdJbmZvQXJyYXkuZGF0YSgpLCBudWxscHRyKTsKLSAg
ICAgICAgaWYgKHN0YXR1cyAhPSBub0VycikgewotICAgICAgICAgICAgUkVMRUFTRV9MT0coTWVk
aWEsICJQaXhlbEJ1ZmZlclJlc2l6ZXI6OnJlc2l6ZTogQ01TYW1wbGVCdWZmZXJHZXRTYW1wbGVU
aW1pbmdJbmZvQXJyYXkgZmFpbGVkIHdpdGggZXJyb3IgY29kZTogJWQiLCBzdGF0aWNfY2FzdDxp
bnQ+KHN0YXR1cykpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLSAg
ICAgICAgdGltZWluZ0luZm9QdHIgPSB0aW1pbmdJbmZvQXJyYXkuZGF0YSgpOwotICAgIH0KLQot
ICAgIENNU2FtcGxlQnVmZmVyUmVmIHJlc2l6ZWRTYW1wbGVCdWZmZXI7Ci0gICAgc3RhdHVzID0g
Q01TYW1wbGVCdWZmZXJDcmVhdGVSZWFkeVdpdGhJbWFnZUJ1ZmZlcihrQ0ZBbGxvY2F0b3JEZWZh
dWx0LCBjb252ZXJ0ZWRQaXhlbEJ1ZmZlci5nZXQoKSwgZm9ybWF0RGVzY3JpcHRpb24sIHRpbWVp
bmdJbmZvUHRyLCAmcmVzaXplZFNhbXBsZUJ1ZmZlcik7Ci0gICAgQ0ZSZWxlYXNlKGZvcm1hdERl
c2NyaXB0aW9uKTsKLSAgICBpZiAoc3RhdHVzICE9IG5vRXJyKSB7Ci0gICAgICAgIFJFTEVBU0Vf
TE9HKE1lZGlhLCAiUGl4ZWxCdWZmZXJSZXNpemVyOjpyZXNpemU6IGZhaWxlZCB0byBjcmVhdGUg
Q01TYW1wbGVCdWZmZXIgd2l0aCBlcnJvciBjb2RlOiAlZCIsIHN0YXRpY19jYXN0PGludD4oc3Rh
dHVzKSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIHJldHVybiBhZG9w
dENGKHJlc2l6ZWRTYW1wbGVCdWZmZXIpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZiAvLyBVU0UoVklERU9UT09MQk9YKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlLmNwcAppbmRleCA4
MDUwNDMyN2UzYTY4MjQ5OTU4NmY4ZDNjN2I4Y2UwNDRkYTMwMjg3Li4zNmQ5OWVhODRjYTg1NWQ4
MmE0ZWRiYjZiYmZmY2M2ZTY4ZjY0ODQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlLmNwcApAQCAtNDEs
MTEgKzQxLDE5IEBACiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJSZWFs
dGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzLmgiCiAjaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNv
dXJjZUNlbnRlci5oIgorI2luY2x1ZGUgIlJlYWx0aW1lVmlkZW9VdGlsaXRpZXMuaCIKICNpbmNs
dWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9VVUlELmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5jbHVkZSAi
SW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5oIgorI2luY2x1ZGUgPHBhbC9jZi9Db3JlTWVkaWFTb2Z0
TGluay5oPgorI2luY2x1ZGUgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCisjZW5kaWYKKwogbmFtZXNw
YWNlIFdlYkNvcmUgewordXNpbmcgbmFtZXNwYWNlIFBBTDsKIAogUmVhbHRpbWVNZWRpYVNvdXJj
ZTo6UmVhbHRpbWVNZWRpYVNvdXJjZShUeXBlIHR5cGUsIFN0cmluZyYmIG5hbWUsIFN0cmluZyYm
IGRldmljZUlELCBTdHJpbmcmJiBoYXNoU2FsdCkKICAgICA6IG1faWRIYXNoU2FsdChXVEZNb3Zl
KGhhc2hTYWx0KSkKQEAgLTE1Nyw4ICsxNjUsMjYgQEAgdm9pZCBSZWFsdGltZU1lZGlhU291cmNl
Ojpub3RpZnlTZXR0aW5nc0RpZENoYW5nZU9ic2VydmVycyhPcHRpb25TZXQ8UmVhbHRpbWVNZWQK
IAogdm9pZCBSZWFsdGltZU1lZGlhU291cmNlOjp2aWRlb1NhbXBsZUF2YWlsYWJsZShNZWRpYVNh
bXBsZSYgbWVkaWFTYW1wbGUpCiB7CisgICAgUmVmUHRyPE1lZGlhU2FtcGxlPiBwcm90ZWN0ZWRN
ZWRpYVNhbXBsZSA9ICZtZWRpYVNhbXBsZTsKKworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGlm
ICghbV9zaXplLmlzRW1wdHkoKSAmJiBtX3NpemUgIT0gcm91bmRlZEludFNpemUobWVkaWFTYW1w
bGUucHJlc2VudGF0aW9uU2l6ZSgpKSkgeworCisgICAgICAgIGlmICghbV9pbWFnZVRyYW5zZmVy
U2Vzc2lvbikKKyAgICAgICAgICAgIG1faW1hZ2VUcmFuc2ZlclNlc3Npb24gPSBJbWFnZVRyYW5z
ZmVyU2Vzc2lvblZUOjpjcmVhdGUobWVkaWFTYW1wbGUudmlkZW9QaXhlbEZvcm1hdCgpKTsKKwor
ICAgICAgICBpZiAobV9pbWFnZVRyYW5zZmVyU2Vzc2lvbikgeworICAgICAgICAgICAgcHJvdGVj
dGVkTWVkaWFTYW1wbGUgPSBtX2ltYWdlVHJhbnNmZXJTZXNzaW9uLT5jcmVhdGVNZWRpYVNhbXBs
ZShtZWRpYVNhbXBsZSwgbV9zaXplKTsKKyAgICAgICAgICAgIGlmICghcHJvdGVjdGVkTWVkaWFT
YW1wbGUpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgICAgICBwcm90ZWN0ZWRNZWRpYVNhbXBsZSA9ICZtZWRpYVNhbXBsZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCiAgICAgZm9yRWFjaE9ic2VydmVyKFsmXShh
dXRvJiBvYnNlcnZlcikgewotICAgICAgICBvYnNlcnZlci52aWRlb1NhbXBsZUF2YWlsYWJsZSht
ZWRpYVNhbXBsZSk7CisgICAgICAgIG9ic2VydmVyLnZpZGVvU2FtcGxlQXZhaWxhYmxlKCpwcm90
ZWN0ZWRNZWRpYVNhbXBsZSk7CiAgICAgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuaAppbmRleCBi
Y2VmNTY5YmE1ODRiMWVhYmI1Y2EyMmJlZDNiODY2YmE3YWRkYWJlLi5lMWViOTE5YzhkYTQ0YzMy
MmU1YTllZmYyYWE4YWUxMzU5NzZlMzdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZS5oCkBAIC00OCw2ICs0
OCwxMCBAQAogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKKyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNsdWRlICJJbWFnZVRyYW5zZmVy
U2Vzc2lvblZULmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdURiB7CiBjbGFzcyBNZWRpYVRpbWU7
CiB9CkBAIC0yMjAsNiArMjI0LDEwIEBAIHByaXZhdGU6CiAgICAgZG91YmxlIG1fZml0bmVzc1Nj
b3JlIHsgc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpIH07CiAgICAgUmVh
bHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpWaWRlb0ZhY2luZ01vZGUgbV9mYWNpbmdNb2RlIHsg
UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpVc2VyfTsKIAorI2lmIFBMQVRGT1JNKENPQ09B
KQorICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZVRyYW5zZmVyU2Vzc2lvblZUPiBtX2ltYWdlVHJh
bnNmZXJTZXNzaW9uOworI2VuZGlmCisKICAgICBib29sIG1fcGVuZGluZ1NldHRpbmdzRGlkQ2hh
bmdlTm90aWZpY2F0aW9uIHsgZmFsc2UgfTsKICAgICBib29sIG1fZWNob0NhbmNlbGxhdGlvbiB7
IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzUHJvZHVjaW5nRGF0YSB7IGZhbHNlIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZWaWRlb0NhcHR1
cmVTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVlZp
ZGVvQ2FwdHVyZVNvdXJjZS5oCmluZGV4IDNiNDlmNDZmZGEzZWMzMjZjNzM4NTE3M2ZhNmNkMjdl
Y2YyOWVmNjIuLjBhYzY0YjdlMzQxZmMzNzQyMTcyYWI5ODdlZmI2OWNkMzI4MTY3OTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVlZpZGVvQ2Fw
dHVyZVNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21h
Yy9BVlZpZGVvQ2FwdHVyZVNvdXJjZS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDksNyArNDksNyBAQCBPQkpDX0NMQVNTIFdl
YkNvcmVBVlZpZGVvQ2FwdHVyZVNvdXJjZU9ic2VydmVyOwogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBBVlZpZGVvUHJlc2V0OwotY2xhc3MgUGl4ZWxCdWZmZXJSZXNpemVyOworY2xhc3Mg
SW1hZ2VUcmFuc2ZlclNlc3Npb25WVDsKIAogY2xhc3MgQVZWaWRlb0NhcHR1cmVTb3VyY2UgOiBw
dWJsaWMgUmVhbHRpbWVWaWRlb1NvdXJjZSwgcHJpdmF0ZSBPcmllbnRhdGlvbk5vdGlmaWVyOjpP
YnNlcnZlciB7CiBwdWJsaWM6CkBAIC0xMTgsNyArMTE4LDYgQEAgcHJpdmF0ZToKICAgICBpbnQg
bV9kZXZpY2VPcmllbnRhdGlvbiB7IDAgfTsKICAgICBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlv
biBtX3NhbXBsZVJvdGF0aW9uIHsgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246Ok5vbmUgfTsK
IAotICAgIHN0ZDo6dW5pcXVlX3B0cjxQaXhlbEJ1ZmZlclJlc2l6ZXI+IG1fcGl4ZWxCdWZmZXJS
ZXNpemVyOwogICAgIHN0ZDo6b3B0aW9uYWw8UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzPiBt
X2N1cnJlbnRTZXR0aW5nczsKICAgICBzdGQ6Om9wdGlvbmFsPFJlYWx0aW1lTWVkaWFTb3VyY2VD
YXBhYmlsaXRpZXM+IG1fY2FwYWJpbGl0aWVzOwogICAgIFJldGFpblB0cjxXZWJDb3JlQVZWaWRl
b0NhcHR1cmVTb3VyY2VPYnNlcnZlcj4gbV9vYmpjT2JzZXJ2ZXI7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZWaWRlb0NhcHR1cmVTb3VyY2Uu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZWaWRlb0NhcHR1
cmVTb3VyY2UubW0KaW5kZXggNTE5NjA4MjIyZTY2MTRhYjJlZGNlYzIzZjM1MDA5MDc1OWQxMTkx
Ni4uNDVmNmVjOTdjNTc3NWJmODkzNTUzMzRiMmZmOTg3ZjUzNDhkZWQ0MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJlU291
cmNlLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVlZp
ZGVvQ2FwdHVyZVNvdXJjZS5tbQpAQCAtMzMsNyArMzMsNiBAQAogI2ltcG9ydCAiTG9nZ2luZy5o
IgogI2ltcG9ydCAiTWVkaWFDb25zdHJhaW50cy5oIgogI2ltcG9ydCAiTWVkaWFTYW1wbGVBVkZP
YmpDLmgiCi0jaW1wb3J0ICJQaXhlbEJ1ZmZlclJlc2l6ZXIuaCIKICNpbXBvcnQgIlBsYXRmb3Jt
TGF5ZXIuaCIKICNpbXBvcnQgIlJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWMuaCIKICNpbXBv
cnQgIlJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncy5oIgpAQCAtMjk5LDcgKzI5OCw3IEBAIGNv
bnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmIEFWVmlkZW9DYXB0dXJlU291cmNl
OjpjYXBhYmlsaXRpZXMoKQogYm9vbCBBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6cHJlZmVyc1ByZXNl
dChWaWRlb1ByZXNldCYgcHJlc2V0KQogewogI2lmIFBMQVRGT1JNKElPUykKLSAgICByZXR1cm4g
IVtzdGF0aWNfY2FzdDxBVlZpZGVvUHJlc2V0Kj4oJnByZXNldCktPmZvcm1hdC5nZXQoKSBpc1Zp
ZGVvQmlubmVkXTsKKyAgICByZXR1cm4gW3N0YXRpY19jYXN0PEFWVmlkZW9QcmVzZXQqPigmcHJl
c2V0KS0+Zm9ybWF0LmdldCgpIGlzVmlkZW9CaW5uZWRdOwogI2Vsc2UKICAgICBVTlVTRURfUEFS
QU0ocHJlc2V0KTsKICNlbmRpZgpAQCAtNTQ0LDI5ICs1NDMsOCBAQCB2b2lkIEFWVmlkZW9DYXB0
dXJlU291cmNlOjpwcm9jZXNzTmV3RnJhbWUoUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBz
YW1wbGVCdQogCiB2b2lkIEFWVmlkZW9DYXB0dXJlU291cmNlOjpjYXB0dXJlT3V0cHV0RGlkT3V0
cHV0U2FtcGxlQnVmZmVyRnJvbUNvbm5lY3Rpb24oQVZDYXB0dXJlT3V0cHV0VHlwZSosIENNU2Ft
cGxlQnVmZmVyUmVmIHNhbXBsZUJ1ZmZlciwgQVZDYXB0dXJlQ29ubmVjdGlvblR5cGUqIGNhcHR1
cmVDb25uZWN0aW9uKQogewotICAgIENNRm9ybWF0RGVzY3JpcHRpb25SZWYgZm9ybWF0RGVzY3Jp
cHRpb24gPSBDTVNhbXBsZUJ1ZmZlckdldEZvcm1hdERlc2NyaXB0aW9uKHNhbXBsZUJ1ZmZlcik7
Ci0gICAgaWYgKCFmb3JtYXREZXNjcmlwdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ01W
aWRlb0RpbWVuc2lvbnMgZGltZW5zaW9ucyA9IENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkdldERp
bWVuc2lvbnMoZm9ybWF0RGVzY3JpcHRpb24pOwotICAgIGlmIChkaW1lbnNpb25zLndpZHRoICE9
IG1fcmVxdWVzdGVkU2l6ZS53aWR0aCgpIHx8IGRpbWVuc2lvbnMuaGVpZ2h0ICE9IG1fcmVxdWVz
dGVkU2l6ZS5oZWlnaHQoKSkgewotICAgICAgICBpZiAobV9waXhlbEJ1ZmZlclJlc2l6ZXIgJiYg
IW1fcGl4ZWxCdWZmZXJSZXNpemVyLT5jYW5SZXNpemVUbyhtX3JlcXVlc3RlZFNpemUpKQotICAg
ICAgICAgICAgbV9waXhlbEJ1ZmZlclJlc2l6ZXIgPSBudWxscHRyOwotCi0gICAgICAgIGlmICgh
bV9waXhlbEJ1ZmZlclJlc2l6ZXIpCi0gICAgICAgICAgICBtX3BpeGVsQnVmZmVyUmVzaXplciA9
IHN0ZDo6bWFrZV91bmlxdWU8UGl4ZWxCdWZmZXJSZXNpemVyPihtX3JlcXVlc3RlZFNpemUsIGF2
VmlkZW9DYXB0dXJlUGl4ZWxCdWZmZXJGb3JtYXQoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1f
cGl4ZWxCdWZmZXJSZXNpemVyID0gbnVsbHB0cjsKLQotICAgIGF1dG8gYnVmZmVyID0gcmV0YWlu
UHRyKHNhbXBsZUJ1ZmZlcik7Ci0gICAgaWYgKG1fcGl4ZWxCdWZmZXJSZXNpemVyKSB7Ci0gICAg
ICAgIGJ1ZmZlciA9IG1fcGl4ZWxCdWZmZXJSZXNpemVyLT5yZXNpemUoc2FtcGxlQnVmZmVyKTsK
LSAgICAgICAgaWYgKCFidWZmZXIpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
c2NoZWR1bGVEZWZlcnJlZFRhc2soW3RoaXMsIGJ1ZmZlciwgY29ubmVjdGlvbiA9IHJldGFpblB0
cihjYXB0dXJlQ29ubmVjdGlvbildIHsKLSAgICAgICAgdGhpcy0+cHJvY2Vzc05ld0ZyYW1lKGJ1
ZmZlciwgY29ubmVjdGlvbik7CisgICAgc2NoZWR1bGVEZWZlcnJlZFRhc2soW3RoaXMsIGJ1ZmZl
ciA9IHJldGFpblB0cihzYW1wbGVCdWZmZXIpLCBjb25uZWN0aW9uID0gcmV0YWluUHRyKGNhcHR1
cmVDb25uZWN0aW9uKV0geworICAgICAgICBwcm9jZXNzTmV3RnJhbWUoYnVmZmVyLCBjb25uZWN0
aW9uKTsKICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbWFjL0Rpc3BsYXlDYXB0dXJlU291cmNlQ29jb2EuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0Rpc3BsYXlDYXB0dXJlU291cmNlQ29jb2Eu
Y3BwCmluZGV4IDM3M2QwZjhhNTNhNWU2YTZlYTRjN2U0YmRmOTc2ZDhlZGQ5NTQ0MWUuLjlhYzNm
MjYxYTVmY2ExM2Y3YjQwNmVkZjg2MGZhZjJmZDc2OGQzNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9EaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29h
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvRGlzcGxh
eUNhcHR1cmVTb3VyY2VDb2NvYS5jcHAKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJMb2dn
aW5nLmgiCiAjaW5jbHVkZSAiTWVkaWFTYW1wbGVBVkZPYmpDLmgiCiAjaW5jbHVkZSAiUGl4ZWxC
dWZmZXJDb25mb3JtZXJDVi5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyUmVzaXplci5oIgogI2lu
Y2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2UuaCIKICNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291
cmNlQ2VudGVyLmgiCiAjaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzLmgiCkBA
IC00Miw2ICs0MSw3IEBACiAjaW5jbHVkZSA8cGFsL2F2Zm91bmRhdGlvbi9NZWRpYVRpbWVBVkZv
dW5kYXRpb24uaD4KICNpbmNsdWRlIDxwYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuaD4KICNpbmNs
dWRlIDxwYWwvc3BpL2NmL0NvcmVBdWRpb1NQSS5oPgorI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29y
ZUdyYXBoaWNzU1BJLmg+CiAjaW5jbHVkZSA8c3lzL3RpbWUuaD4KICNpbmNsdWRlIDx3dGYvTWFp
blRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgpAQCAtNzIsNyArNzIs
NyBAQCBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzJiBEaXNwbGF5Q2FwdHVy
ZVNvdXJjZUNvY29hOjpjYXBhYmlsaXRpZXMoKQogICAgICAgICAvLyBGSVhNRTogd2hhdCBzaG91
bGQgdGhlc2UgYmU/CiAgICAgICAgIGNhcGFiaWxpdGllcy5zZXRXaWR0aChDYXBhYmlsaXR5VmFs
dWVPclJhbmdlKDcyLCAyODgwKSk7CiAgICAgICAgIGNhcGFiaWxpdGllcy5zZXRIZWlnaHQoQ2Fw
YWJpbGl0eVZhbHVlT3JSYW5nZSg0NSwgMTgwMCkpOwotICAgICAgICBjYXBhYmlsaXRpZXMuc2V0
RnJhbWVSYXRlKENhcGFiaWxpdHlWYWx1ZU9yUmFuZ2UoLjAxLCA2MC4wKSk7CisgICAgICAgIGNh
cGFiaWxpdGllcy5zZXRGcmFtZVJhdGUoQ2FwYWJpbGl0eVZhbHVlT3JSYW5nZSguMDEsIDMwLjAp
KTsKIAogICAgICAgICBtX2NhcGFiaWxpdGllcyA9IFdURk1vdmUoY2FwYWJpbGl0aWVzKTsKICAg
ICB9CkBAIC0xMTEsMTAgKzExMSw4IEBAIHZvaWQgRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6
c2V0dGluZ3NEaWRDaGFuZ2UoT3B0aW9uU2V0PFJlYWx0aW1lTWVkaWFTb3VyY2VTCiAgICAgaWYg
KHNldHRpbmdzLmNvbnRhaW5zKFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RmxhZzo6RnJh
bWVSYXRlKSAmJiBtX3RpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIG1fdGltZXIuc3RhcnRSZXBl
YXRpbmcoMV9zIC8gZnJhbWVSYXRlKCkpOwogCi0gICAgaWYgKHNldHRpbmdzLmNvbnRhaW5zQW55
KHsgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpGbGFnOjpXaWR0aCwgUmVhbHRpbWVNZWRp
YVNvdXJjZVNldHRpbmdzOjpGbGFnOjpIZWlnaHQgfSkpIHsKKyAgICBpZiAoc2V0dGluZ3MuY29u
dGFpbnNBbnkoeyBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M6OkZsYWc6OldpZHRoLCBSZWFs
dGltZU1lZGlhU291cmNlU2V0dGluZ3M6OkZsYWc6OkhlaWdodCB9KSkKICAgICAgICAgbV9idWZm
ZXJBdHRyaWJ1dGVzID0gbnVsbHB0cjsKLSAgICAgICAgbV9sYXN0U2FtcGxlQnVmZmVyID0gbnVs
bHB0cjsKLSAgICB9CiAKICAgICBtX2N1cnJlbnRTZXR0aW5ncyA9IHsgfTsKIH0KQEAgLTE1OSw3
ICsxNTcsOCBAQCB2b2lkIERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OnNldEludHJpbnNpY1Np
emUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9pbnRyaW5z
aWNTaXplID0gc2l6ZTsKLSAgICBtX2xhc3RTYW1wbGVCdWZmZXIgPSBudWxscHRyOworICAgIG5v
dGlmeVNldHRpbmdzRGlkQ2hhbmdlT2JzZXJ2ZXJzKHsgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRp
bmdzOjpGbGFnOjpXaWR0aCwgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpGbGFnOjpIZWln
aHQgfSk7CisKIH0KIAogdm9pZCBEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjplbWl0RnJhbWUo
KQpAQCAtMTY3LDEyNCArMTY2LDQxIEBAIHZvaWQgRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6
ZW1pdEZyYW1lKCkKICAgICBpZiAobXV0ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0
byBwaXhlbEJ1ZmZlciA9IGdlbmVyYXRlRnJhbWUoKTsKLSAgICBpZiAoIXBpeGVsQnVmZmVyKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9sYXN0U2FtcGxlQnVmZmVyICYmIG1fbGFzdEZ1
bGxTaXplZFBpeGVsQnVmZmVyICYmIENGRXF1YWwobV9sYXN0RnVsbFNpemVkUGl4ZWxCdWZmZXIu
Z2V0KCksIHBpeGVsQnVmZmVyLmdldCgpKSkgewotICAgICAgICB2aWRlb1NhbXBsZUF2YWlsYWJs
ZShNZWRpYVNhbXBsZUFWRk9iakM6OmNyZWF0ZShtX2xhc3RTYW1wbGVCdWZmZXIuZ2V0KCkpKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fbGFzdEZ1bGxTaXplZFBpeGVsQnVmZmVy
ID0gcGl4ZWxCdWZmZXI7Ci0KLSAgICBpbnQgd2lkdGggPSBXVEY6OnNhZmVDYXN0PGludD4oQ1ZQ
aXhlbEJ1ZmZlckdldFdpZHRoKHBpeGVsQnVmZmVyLmdldCgpKSk7Ci0gICAgaW50IGhlaWdodCA9
IFdURjo6c2FmZUNhc3Q8aW50PihDVlBpeGVsQnVmZmVyR2V0SGVpZ2h0KHBpeGVsQnVmZmVyLmdl
dCgpKSk7Ci0gICAgYXV0byByZXF1ZXN0ZWRTaXplID0gZnJhbWVTaXplKCk7Ci0gICAgaWYgKHdp
ZHRoICE9IHJlcXVlc3RlZFNpemUud2lkdGgoKSB8fCBoZWlnaHQgIT0gcmVxdWVzdGVkU2l6ZS5o
ZWlnaHQoKSkgewotICAgICAgICBpZiAobV9waXhlbEJ1ZmZlclJlc2l6ZXIgJiYgIW1fcGl4ZWxC
dWZmZXJSZXNpemVyLT5jYW5SZXNpemVUbyhyZXF1ZXN0ZWRTaXplKSkKLSAgICAgICAgICAgIG1f
cGl4ZWxCdWZmZXJSZXNpemVyID0gbnVsbHB0cjsKLQotICAgICAgICBpZiAoIW1fcGl4ZWxCdWZm
ZXJSZXNpemVyKQotICAgICAgICAgICAgbV9waXhlbEJ1ZmZlclJlc2l6ZXIgPSBzdGQ6Om1ha2Vf
dW5pcXVlPFBpeGVsQnVmZmVyUmVzaXplcj4ocmVxdWVzdGVkU2l6ZSwgcHJlZmVyZWRQaXhlbEJ1
ZmZlckZvcm1hdCgpKTsKLQotICAgICAgICBwaXhlbEJ1ZmZlciA9IG1fcGl4ZWxCdWZmZXJSZXNp
emVyLT5yZXNpemUocGl4ZWxCdWZmZXIuZ2V0KCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1f
cGl4ZWxCdWZmZXJSZXNpemVyID0gbnVsbHB0cjsKLQotICAgICAgICBhdXRvIHBpeGVsRm9ybWF0
VHlwZSA9IENWUGl4ZWxCdWZmZXJHZXRQaXhlbEZvcm1hdFR5cGUocGl4ZWxCdWZmZXIuZ2V0KCkp
OwotICAgICAgICBpZiAocGl4ZWxGb3JtYXRUeXBlICE9IHByZWZlcmVkUGl4ZWxCdWZmZXJGb3Jt
YXQoKSkgewotICAgICAgICAgICAgaWYgKCFtX3BpeGVsQnVmZmVyQ29uZm9ybWVyKSB7Ci0gICAg
ICAgICAgICAgICAgYXV0byBwcmVmZXJyZWRGcm9tYXQgPSBwcmVmZXJlZFBpeGVsQnVmZmVyRm9y
bWF0KCk7Ci0gICAgICAgICAgICAgICAgYXV0byBjb25mb3JtZXJBdHRyaWJ1dGVzID0gYWRvcHRD
RihDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKG51bGxwdHIsIDAsICZrQ0ZUeXBlRGljdGlvbmFy
eUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKLSAgICAg
ICAgICAgICAgICBhdXRvIHZpZGVvVHlwZSA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUobnVsbHB0
ciwgIGtDRk51bWJlclNJbnQzMlR5cGUsICAmcHJlZmVycmVkRnJvbWF0KSk7Ci0gICAgICAgICAg
ICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUoY29uZm9ybWVyQXR0cmlidXRlcy5nZXQoKSwga0NW
UGl4ZWxCdWZmZXJQaXhlbEZvcm1hdFR5cGVLZXksIHZpZGVvVHlwZS5nZXQoKSk7Ci0KLSAgICAg
ICAgICAgICAgICBtX3BpeGVsQnVmZmVyQ29uZm9ybWVyID0gc3RkOjptYWtlX3VuaXF1ZTxQaXhl
bEJ1ZmZlckNvbmZvcm1lckNWPihjb25mb3JtZXJBdHRyaWJ1dGVzLmdldCgpKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgcGl4ZWxCdWZmZXIgPSBtX3BpeGVsQnVmZmVyQ29uZm9ybWVy
LT5jb252ZXJ0KHBpeGVsQnVmZmVyLmdldCgpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAo
IXBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2xhc3RTYW1wbGVCdWZmZXIg
PSBzYW1wbGVCdWZmZXJGcm9tUGl4ZWxCdWZmZXIocGl4ZWxCdWZmZXIuZ2V0KCkpOwotICAgIGlm
ICghbV9sYXN0U2FtcGxlQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICB2aWRlb1NhbXBs
ZUF2YWlsYWJsZShNZWRpYVNhbXBsZUFWRk9iakM6OmNyZWF0ZShtX2xhc3RTYW1wbGVCdWZmZXIu
Z2V0KCkpKTsKLX0KLQotUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBEaXNwbGF5Q2FwdHVy
ZVNvdXJjZUNvY29hOjpzYW1wbGVCdWZmZXJGcm9tUGl4ZWxCdWZmZXIoQ1ZQaXhlbEJ1ZmZlclJl
ZiBwaXhlbEJ1ZmZlcikKLXsKLSAgICBpZiAoIXBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICBpZiAoIW1faW1hZ2VUcmFuc2ZlclNlc3Npb24pCisgICAgICAgIG1faW1h
Z2VUcmFuc2ZlclNlc3Npb24gPSBJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVhdGUocHJlZmVy
ZWRQaXhlbEJ1ZmZlckZvcm1hdCgpKTsKIAogICAgIENNVGltZSBzYW1wbGVUaW1lID0gQ01UaW1l
TWFrZSgoKGVsYXBzZWRUaW1lKCkgKyAxMDBfbXMpICogMTAwKS5zZWNvbmRzKCksIDEwMCk7Ci0g
ICAgQ01TYW1wbGVUaW1pbmdJbmZvIHRpbWluZ0luZm8gPSB7IGtDTVRpbWVJbnZhbGlkLCBzYW1w
bGVUaW1lLCBzYW1wbGVUaW1lIH07Ci0KLSAgICBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25SZWYg
Zm9ybWF0RGVzY3JpcHRpb24gPSBudWxscHRyOwotICAgIGF1dG8gc3RhdHVzID0gQ01WaWRlb0Zv
cm1hdERlc2NyaXB0aW9uQ3JlYXRlRm9ySW1hZ2VCdWZmZXIoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
KENWSW1hZ2VCdWZmZXJSZWYpcGl4ZWxCdWZmZXIsICZmb3JtYXREZXNjcmlwdGlvbik7Ci0gICAg
aWYgKHN0YXR1cykgewotICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIkZhaWxlZCB0byBpbml0
aWFsaXplIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbiB3aXRoIGVycm9yIGNvZGU6ICVkIiwgc3Rh
dGljX2Nhc3Q8aW50PihzdGF0dXMpKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQot
Ci0gICAgQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlQnVmZmVyOwotICAgIHN0YXR1cyA9IENNU2Ft
cGxlQnVmZmVyQ3JlYXRlUmVhZHlXaXRoSW1hZ2VCdWZmZXIoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
KENWSW1hZ2VCdWZmZXJSZWYpcGl4ZWxCdWZmZXIsIGZvcm1hdERlc2NyaXB0aW9uLCAmdGltaW5n
SW5mbywgJnNhbXBsZUJ1ZmZlcik7Ci0gICAgQ0ZSZWxlYXNlKGZvcm1hdERlc2NyaXB0aW9uKTsK
LSAgICBpZiAoc3RhdHVzKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhLCAiRmFpbGVkIHRv
IGluaXRpYWxpemUgQ01TYW1wbGVCdWZmZXIgd2l0aCBlcnJvciBjb2RlOiAlZCIsIHN0YXRpY19j
YXN0PGludD4oc3RhdHVzKSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAg
IHJldHVybiBhZG9wdENGKHNhbXBsZUJ1ZmZlcik7Ci19CisgICAgYXV0byBmcmFtZSA9IGdlbmVy
YXRlRnJhbWUoKTsKKyAgICBJbnRTaXplIGltYWdlU2l6ZTsKKyAgICBSZWZQdHI8TWVkaWFTYW1w
bGU+IHNhbXBsZSA9IFdURjo6c3dpdGNoT24oZnJhbWUsCisgICAgICAgIFt0aGlzLCBzYW1wbGVU
aW1lLCAmaW1hZ2VTaXplXShSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UpIC0+IFJlZlB0cjxN
ZWRpYVNhbXBsZT4geworICAgICAgICAgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgICAgICAgICAgaW1hZ2VTaXplID0gSW50U2l6ZShDR0ltYWdl
R2V0V2lkdGgoaW1hZ2UuZ2V0KCkpLCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlLmdldCgpKSk7Cisg
ICAgICAgICAgICByZXR1cm4gbV9pbWFnZVRyYW5zZmVyU2Vzc2lvbi0+Y3JlYXRlTWVkaWFTYW1w
bGUoaW1hZ2UuZ2V0KCksIHNhbXBsZVRpbWUsIGltYWdlU2l6ZSk7CisgICAgICAgIH0sCisgICAg
ICAgIFt0aGlzLCBzYW1wbGVUaW1lLCAmaW1hZ2VTaXplXShSZXRhaW5QdHI8SU9TdXJmYWNlUmVm
PiBzdXJmYWNlKSAtPiBSZWZQdHI8TWVkaWFTYW1wbGU+IHsKKyAgICAgICAgICAgIGlmICghc3Vy
ZmFjZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICAgICAgaW1h
Z2VTaXplID0gSW50U2l6ZShJT1N1cmZhY2VHZXRXaWR0aChzdXJmYWNlLmdldCgpKSwgSU9TdXJm
YWNlR2V0SGVpZ2h0KHN1cmZhY2UuZ2V0KCkpKTsKKyAgICAgICAgICAgIHJldHVybiBtX2ltYWdl
VHJhbnNmZXJTZXNzaW9uLT5jcmVhdGVNZWRpYVNhbXBsZShzdXJmYWNlLmdldCgpLCBzYW1wbGVU
aW1lLCBpbWFnZVNpemUpOwogCi0jaWYgSEFWRShJT1NVUkZBQ0UpICYmIFBMQVRGT1JNKE1BQykK
LXN0YXRpYyBpbnQzMl90IHJvdW5kVXBUb01hY3JvYmxvY2tNdWx0aXBsZShpbnQzMl90IHNpemUp
Ci17Ci0gICAgcmV0dXJuIChzaXplICsgMTUpICYgfjE1OwotfQotCi1SZXRhaW5QdHI8Q1ZQaXhl
bEJ1ZmZlclJlZj4gRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6cGl4ZWxCdWZmZXJGcm9tSU9T
dXJmYWNlKElPU3VyZmFjZVJlZiBzdXJmYWNlKQotewotICAgIGlmICghbV9idWZmZXJBdHRyaWJ1
dGVzKSB7Ci0gICAgICAgIG1fYnVmZmVyQXR0cmlidXRlcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5
Q3JlYXRlTXV0YWJsZShudWxscHRyLCAwLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3Ms
ICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0KLSAgICAgICAgYXV0byBmb3Jt
YXQgPSBJT1N1cmZhY2VHZXRQaXhlbEZvcm1hdChzdXJmYWNlKTsKLSAgICAgICAgaWYgKGZvcm1h
dCA9PSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOEJpUGxhbmFyVmlkZW9SYW5nZSB8fCBm
b3JtYXQgPT0ga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhCaVBsYW5hckZ1bGxSYW5nZSkg
ewotCi0gICAgICAgICAgICAvLyBJZiB0aGUgd2lkdGggeCBoZWlnaHQgaXNuJ3QgYSBtdWx0aXBs
ZSBvZiAxNiB4IDE2IGFuZCB0aGUgc3VyZmFjZSBoYXMgZXh0cmEgbWVtb3J5IGluIHRoZSBwbGFu
ZXMsIHNldCBwaXhlbCBidWZmZXIgYXR0cmlidXRlcyB0byByZWZsZWN0IGl0LgotICAgICAgICAg
ICAgYXV0byB3aWR0aCA9IElPU3VyZmFjZUdldFdpZHRoKHN1cmZhY2UpOwotICAgICAgICAgICAg
YXV0byBoZWlnaHQgPSBJT1N1cmZhY2VHZXRIZWlnaHQoc3VyZmFjZSk7Ci0gICAgICAgICAgICBp
bnQzMl90IGV4dGVuZGVkUmlnaHQgPSByb3VuZFVwVG9NYWNyb2Jsb2NrTXVsdGlwbGUod2lkdGgp
IC0gd2lkdGg7Ci0gICAgICAgICAgICBpbnQzMl90IGV4dGVuZGVkQm90dG9tID0gcm91bmRVcFRv
TWFjcm9ibG9ja011bHRpcGxlKGhlaWdodCkgLSBoZWlnaHQ7Ci0KLSAgICAgICAgICAgIGlmICgo
SU9TdXJmYWNlR2V0Qnl0ZXNQZXJSb3dPZlBsYW5lKHN1cmZhY2UsIDApID49IHdpZHRoICsgZXh0
ZW5kZWRSaWdodCkKLSAgICAgICAgICAgICAgICAmJiAoSU9TdXJmYWNlR2V0Qnl0ZXNQZXJSb3dP
ZlBsYW5lKHN1cmZhY2UsIDEpID49IHdpZHRoICsgZXh0ZW5kZWRSaWdodCkKLSAgICAgICAgICAg
ICAgICAmJiAoSU9TdXJmYWNlR2V0QWxsb2NTaXplKHN1cmZhY2UpID49IChoZWlnaHQgKyBleHRl
bmRlZEJvdHRvbSkgKiBJT1N1cmZhY2VHZXRCeXRlc1BlclJvd09mUGxhbmUoc3VyZmFjZSwgMCkg
KiAzIC8gMikpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGNmSW50ID0gYWRvcHRDRihDRk51bWJl
ckNyZWF0ZShudWxscHRyLCAga0NGTnVtYmVySW50VHlwZSwgICZleHRlbmRlZFJpZ2h0KSk7Ci0g
ICAgICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUobV9idWZmZXJBdHRyaWJ1dGVzLmdl
dCgpLCBrQ1ZQaXhlbEJ1ZmZlckV4dGVuZGVkUGl4ZWxzUmlnaHRLZXksIGNmSW50LmdldCgpKTsK
LSAgICAgICAgICAgICAgICBjZkludCA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUobnVsbHB0ciwg
IGtDRk51bWJlckludFR5cGUsICAmZXh0ZW5kZWRCb3R0b20pKTsKLSAgICAgICAgICAgICAgICBD
RkRpY3Rpb25hcnlTZXRWYWx1ZShtX2J1ZmZlckF0dHJpYnV0ZXMuZ2V0KCksIGtDVlBpeGVsQnVm
ZmVyRXh0ZW5kZWRQaXhlbHNCb3R0b21LZXksIGNmSW50LmdldCgpKTsKLSAgICAgICAgICAgIH0K
ICAgICAgICAgfQorICAgICk7CiAKLSAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUobV9idWZm
ZXJBdHRyaWJ1dGVzLmdldCgpLCBrQ1ZQaXhlbEJ1ZmZlck9wZW5HTENvbXBhdGliaWxpdHlLZXks
IGtDRkJvb2xlYW5UcnVlKTsKLSAgICB9CiAKLSAgICBDVlBpeGVsQnVmZmVyUmVmIHBpeGVsQnVm
ZmVyOwotICAgIGF1dG8gc3RhdHVzID0gQ1ZQaXhlbEJ1ZmZlckNyZWF0ZVdpdGhJT1N1cmZhY2Uo
a0NGQWxsb2NhdG9yRGVmYXVsdCwgc3VyZmFjZSwgbV9idWZmZXJBdHRyaWJ1dGVzLmdldCgpLCAm
cGl4ZWxCdWZmZXIpOwotICAgIGlmIChzdGF0dXMpIHsKLSAgICAgICAgUkVMRUFTRV9MT0coTWVk
aWEsICJDVlBpeGVsQnVmZmVyQ3JlYXRlV2l0aElPU3VyZmFjZSBmYWlsZWQgd2l0aCBlcnJvciBj
b2RlOiAlZCIsIHN0YXRpY19jYXN0PGludD4oc3RhdHVzKSk7Ci0gICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIGlmICghc2FtcGxlKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgcmV0dXJuIGFkb3B0Q0YocGl4ZWxCdWZmZXIp
OworICAgIGlmIChtX2ludHJpbnNpY1NpemUgIT0gaW1hZ2VTaXplKQorICAgICAgICBzZXRJbnRy
aW5zaWNTaXplKGltYWdlU2l6ZSk7CisKKyAgICB2aWRlb1NhbXBsZUF2YWlsYWJsZSgqc2FtcGxl
LmdldCgpKTsKIH0KLSNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9EaXNwbGF5Q2FwdHVy
ZVNvdXJjZUNvY29hLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMv
RGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYS5oCmluZGV4IGJmZTQwYjg2MDU4MWYxY2RiOTMxYjM1
Y2JmNDdmZjA3MmMzYmFhYTUuLjljMDllYzhkMzIxNDAyNGQ0ZTZiNjdkMmJmMDIyZmRkMDM0ZjM1
YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9E
aXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbWFjL0Rpc3BsYXlDYXB0dXJlU291cmNlQ29jb2EuaApAQCAtMjgsMTIgKzI4
LDE0IEBACiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKIAogI2luY2x1ZGUgIkNhcHR1cmVEZXZp
Y2UuaCIKKyNpbmNsdWRlICJJbWFnZVRyYW5zZmVyU2Vzc2lvblZULmgiCiAjaW5jbHVkZSAiUmVh
bHRpbWVNZWRpYVNvdXJjZS5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKK3R5cGVkZWYgc3RydWN0IENHSW1hZ2UgKkNHSW1hZ2VSZWY7
CiB0eXBlZGVmIHN0cnVjdCBfX0NWQnVmZmVyICpDVlBpeGVsQnVmZmVyUmVmOwogdHlwZWRlZiBz
dHJ1Y3QgX19JT1N1cmZhY2UgKklPU3VyZmFjZVJlZjsKIApAQCAtNDQsOCArNDYsOCBAQCBjbGFz
cyBNZWRpYVRpbWU7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENhcHR1cmVEZXZpY2VJ
bmZvOworY2xhc3MgSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDsKIGNsYXNzIFBpeGVsQnVmZmVyQ29u
Zm9ybWVyQ1Y7Ci1jbGFzcyBQaXhlbEJ1ZmZlclJlc2l6ZXI7CiAKIGNsYXNzIERpc3BsYXlDYXB0
dXJlU291cmNlQ29jb2EgOiBwdWJsaWMgUmVhbHRpbWVNZWRpYVNvdXJjZSB7CiBwdWJsaWM6CkBA
IC01NCw3ICs1Niw5IEBAIHByb3RlY3RlZDoKICAgICBEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29h
KFN0cmluZyYmIG5hbWUpOwogICAgIHZpcnR1YWwgfkRpc3BsYXlDYXB0dXJlU291cmNlQ29jb2Eo
KTsKIAotICAgIHZpcnR1YWwgUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJSZWY+IGdlbmVyYXRlRnJh
bWUoKSA9IDA7CisgICAgdXNpbmcgRGlzcGxheUZyYW1lVHlwZSA9IFdURjo6VmFyaWFudDxSZXRh
aW5QdHI8Q0dJbWFnZVJlZj4sIFJldGFpblB0cjxJT1N1cmZhY2VSZWY+PjsKKyAgICB2aXJ0dWFs
IERpc3BsYXlGcmFtZVR5cGUgZ2VuZXJhdGVGcmFtZSgpID0gMDsKKwogICAgIHZpcnR1YWwgUmVh
bHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpEaXNwbGF5U3VyZmFjZVR5cGUgc3VyZmFjZVR5cGUo
KSBjb25zdCA9IDA7CiAKICAgICB2b2lkIHN0YXJ0UHJvZHVjaW5nRGF0YSgpIG92ZXJyaWRlOwpA
QCAtNjIsMTEgKzY2LDYgQEAgcHJvdGVjdGVkOgogCiAgICAgU2Vjb25kcyBlbGFwc2VkVGltZSgp
OwogCi0gICAgUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBzYW1wbGVCdWZmZXJGcm9tUGl4
ZWxCdWZmZXIoQ1ZQaXhlbEJ1ZmZlclJlZik7Ci0jaWYgSEFWRShJT1NVUkZBQ0UpCi0gICAgUmV0
YWluUHRyPENWUGl4ZWxCdWZmZXJSZWY+IHBpeGVsQnVmZmVyRnJvbUlPU3VyZmFjZShJT1N1cmZh
Y2VSZWYpOwotI2VuZGlmCi0KICAgICB2b2lkIHNldHRpbmdzRGlkQ2hhbmdlKE9wdGlvblNldDxS
ZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M6OkZsYWc+KSBvdmVycmlkZTsKIAogICAgIGNvbnN0
IEludFNpemUmIGludHJpbnNpY1NpemUoKSBjb25zdCB7IHJldHVybiBtX2ludHJpbnNpY1NpemU7
IH0KQEAgLTkzLDEwICs5Miw3IEBAIHByaXZhdGU6CiAgICAgUmV0YWluUHRyPENGTXV0YWJsZURp
Y3Rpb25hcnlSZWY+IG1fYnVmZmVyQXR0cmlidXRlczsKICAgICBSdW5Mb29wOjpUaW1lcjxEaXNw
bGF5Q2FwdHVyZVNvdXJjZUNvY29hPiBtX3RpbWVyOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPFBp
eGVsQnVmZmVyUmVzaXplcj4gbV9waXhlbEJ1ZmZlclJlc2l6ZXI7Ci0gICAgc3RkOjp1bmlxdWVf
cHRyPFBpeGVsQnVmZmVyQ29uZm9ybWVyQ1Y+IG1fcGl4ZWxCdWZmZXJDb25mb3JtZXI7Ci0gICAg
UmV0YWluUHRyPENWUGl4ZWxCdWZmZXJSZWY+IG1fbGFzdEZ1bGxTaXplZFBpeGVsQnVmZmVyOwot
ICAgIFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4gbV9sYXN0U2FtcGxlQnVmZmVyOworICAg
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZVRyYW5zZmVyU2Vzc2lvblZUPiBtX2ltYWdlVHJhbnNmZXJT
ZXNzaW9uOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01vY2tSZWFsdGltZVZpZGVvU291cmNl
TWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0
aW1lVmlkZW9Tb3VyY2VNYWMuaAppbmRleCA5Yzc0ZGRlMTgzMWU0NzFhMTA3NjAxYjAzZTY2NTQ3
Yzc2OWEwOGVhLi5lOGJlODJmNjhmN2M2OTExNTIxODg5MWNkNDQ2OTgzZGY2OTYyNmI0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0
aW1lVmlkZW9Tb3VyY2VNYWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMuaApAQCAtNDMsNyArNDMsNyBAQCB0
eXBlZGVmIHN0cnVjdCBfX0NWUGl4ZWxCdWZmZXJQb29sICpDVlBpeGVsQnVmZmVyUG9vbFJlZjsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBQaXhlbEJ1ZmZlclJlc2l6ZXI7CitjbGFz
cyBJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOwogCiBjbGFzcyBNb2NrUmVhbHRpbWVWaWRlb1NvdXJj
ZU1hYyBmaW5hbCA6IHB1YmxpYyBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZSwgcHJpdmF0ZSBPcmll
bnRhdGlvbk5vdGlmaWVyOjpPYnNlcnZlciB7CiBwdWJsaWM6CkBAIC01MywxNCArNTMsMTAgQEAg
cHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2U7CiAgICAg
TW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMoU3RyaW5nJiYgZGV2aWNlSUQsIFN0cmluZyYmIG5h
bWUsIFN0cmluZyYmIGhhc2hTYWx0KTsKIAotICAgIFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJl
Zj4gQ01TYW1wbGVCdWZmZXJGcm9tUGl4ZWxCdWZmZXIoQ1ZQaXhlbEJ1ZmZlclJlZik7Ci0gICAg
UmV0YWluUHRyPENWUGl4ZWxCdWZmZXJSZWY+IHBpeGVsQnVmZmVyRnJvbUNHSW1hZ2UoQ0dJbWFn
ZVJlZikgY29uc3Q7Ci0KICAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7
CiAgICAgdm9pZCB1cGRhdGVTYW1wbGVCdWZmZXIoKSBmaW5hbDsKICAgICB2b2lkIHNldHRpbmdz
RGlkQ2hhbmdlKE9wdGlvblNldDxSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M6OkZsYWc+KSBm
aW5hbDsKICAgICBib29sIGNhblJlc2l6ZVZpZGVvRnJhbWVzKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gdHJ1ZTsgfQotICAgIHZvaWQgc2V0U2l6ZUFuZEZyYW1lUmF0ZVdpdGhQcmVzZXQoSW50U2l6
ZSwgZG91YmxlLCBSZWZQdHI8VmlkZW9QcmVzZXQ+KSBmaW5hbDsKIAogICAgIHZvaWQgb3JpZW50
YXRpb25DaGFuZ2VkKGludCBvcmllbnRhdGlvbikgZmluYWw7CiAgICAgdm9pZCBtb25pdG9yT3Jp
ZW50YXRpb24oT3JpZW50YXRpb25Ob3RpZmllciYpIGZpbmFsOwpAQCAtNjgsNyArNjQsNyBAQCBw
cml2YXRlOgogICAgIG11dGFibGUgUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJQb29sUmVmPiBtX2J1
ZmZlclBvb2w7CiAgICAgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb24gbV9kZXZpY2VPcmllbnRh
dGlvbiB7IE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpOb25lIH07CiAgICAgc3RkOjp1bmlx
dWVfcHRyPFBpeGVsQnVmZmVyQ29uZm9ybWVyQ1Y+IG1fcGl4ZWxCdWZmZXJDb25mb3JtZXI7Ci0g
ICAgc3RkOjp1bmlxdWVfcHRyPFBpeGVsQnVmZmVyUmVzaXplcj4gbV9waXhlbEJ1ZmZlclJlc2l6
ZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ+IG1faW1hZ2VU
cmFuc2ZlclNlc3Npb247CiAgICAgSW50U2l6ZSBtX3ByZXNldFNpemU7CiB9OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1l
VmlkZW9Tb3VyY2VNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9t
YWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW0KaW5kZXggMjNhMTY5NjJiNTM5NDE4NGM1
ZjY1NGU5ZWM1ZTFkMWZlOTBjZDI5YS4uZWZjN2YwZjQ0ZjcxYzgxM2M5MDliNzgxNGEwNmYwOTg1
NTBkMWY1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
bWFjL01vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbQpAQCAt
MzQsMTAgKzM0LDEwIEBACiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICNpbXBvcnQgIkdyYXBo
aWNzQ29udGV4dENHLmgiCiAjaW1wb3J0ICJJbWFnZUJ1ZmZlci5oIgorI2ltcG9ydCAiSW1hZ2VU
cmFuc2ZlclNlc3Npb25WVC5oIgogI2ltcG9ydCAiTWVkaWFDb25zdHJhaW50cy5oIgogI2ltcG9y
dCAiTWVkaWFTYW1wbGVBVkZPYmpDLmgiCiAjaW1wb3J0ICJOb3RJbXBsZW1lbnRlZC5oIgotI2lt
cG9ydCAiUGl4ZWxCdWZmZXJSZXNpemVyLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybUxheWVyLmgiCiAj
aW1wb3J0ICJSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MuaCIKICNpbXBvcnQgIlJlYWx0aW1l
VmlkZW9VdGlsaXRpZXMuaCIKQEAgLTc1LDk1ICs3NSwyMSBAQCBNb2NrUmVhbHRpbWVWaWRlb1Nv
dXJjZU1hYzo6TW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMoU3RyaW5nJiYgZGV2aWNlSUQsIFN0
cmluZwogewogfQogCi1SZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+IE1vY2tSZWFsdGltZVZp
ZGVvU291cmNlTWFjOjpDTVNhbXBsZUJ1ZmZlckZyb21QaXhlbEJ1ZmZlcihDVlBpeGVsQnVmZmVy
UmVmIHBpeGVsQnVmZmVyKQotewotICAgIGlmICghcGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIAotICAgIENNVGltZSBzYW1wbGVUaW1lID0gQ01UaW1lTWFrZSgoKGVs
YXBzZWRUaW1lKCkgKyAxMDBfbXMpICogdmlkZW9TYW1wbGVSYXRlKS5zZWNvbmRzKCksIHZpZGVv
U2FtcGxlUmF0ZSk7Ci0gICAgQ01TYW1wbGVUaW1pbmdJbmZvIHRpbWluZ0luZm8gPSB7IGtDTVRp
bWVJbnZhbGlkLCBzYW1wbGVUaW1lLCBzYW1wbGVUaW1lIH07Ci0KLSAgICBDTVZpZGVvRm9ybWF0
RGVzY3JpcHRpb25SZWYgZm9ybWF0RGVzY3JpcHRpb24gPSBudWxscHRyOwotICAgIE9TU3RhdHVz
IHN0YXR1cyA9IENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkNyZWF0ZUZvckltYWdlQnVmZmVyKGtD
RkFsbG9jYXRvckRlZmF1bHQsIChDVkltYWdlQnVmZmVyUmVmKXBpeGVsQnVmZmVyLCAmZm9ybWF0
RGVzY3JpcHRpb24pOwotICAgIGlmIChzdGF0dXMgIT0gbm9FcnIpIHsKLSAgICAgICAgTE9HX0VS
Uk9SKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb24gd2l0aCBl
cnJvciBjb2RlOiAlZCIsIHN0YXR1cyk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0K
LQotICAgIENNU2FtcGxlQnVmZmVyUmVmIHNhbXBsZUJ1ZmZlcjsKLSAgICBzdGF0dXMgPSBDTVNh
bXBsZUJ1ZmZlckNyZWF0ZVJlYWR5V2l0aEltYWdlQnVmZmVyKGtDRkFsbG9jYXRvckRlZmF1bHQs
IChDVkltYWdlQnVmZmVyUmVmKXBpeGVsQnVmZmVyLCBmb3JtYXREZXNjcmlwdGlvbiwgJnRpbWlu
Z0luZm8sICZzYW1wbGVCdWZmZXIpOwotICAgIENGUmVsZWFzZShmb3JtYXREZXNjcmlwdGlvbik7
Ci0gICAgaWYgKHN0YXR1cyAhPSBub0VycikgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0
byBpbml0aWFsaXplIENNU2FtcGxlQnVmZmVyIHdpdGggZXJyb3IgY29kZTogJWQiLCBzdGF0dXMp
OwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICByZXR1cm4gYWRvcHRDRihz
YW1wbGVCdWZmZXIpOwotfQotCi1SZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gTW9ja1JlYWx0
aW1lVmlkZW9Tb3VyY2VNYWM6OnBpeGVsQnVmZmVyRnJvbUNHSW1hZ2UoQ0dJbWFnZVJlZiBpbWFn
ZSkgY29uc3QKLXsKLSAgICBzdGF0aWMgQ0dDb2xvclNwYWNlUmVmIHNSR0JDb2xvclNwYWNlID0g
c1JHQkNvbG9yU3BhY2VSZWYoKTsKLQotICAgIENHU2l6ZSBpbWFnZVNpemUgPSBDR1NpemVNYWtl
KENHSW1hZ2VHZXRXaWR0aChpbWFnZSksIENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpKTsKLSAgICBp
ZiAoIW1fYnVmZmVyUG9vbCkgewotICAgICAgICBDVlBpeGVsQnVmZmVyUG9vbFJlZiBidWZmZXJQ
b29sOwotICAgICAgICBDRkRpY3Rpb25hcnlSZWYgc291cmNlUGl4ZWxCdWZmZXJPcHRpb25zID0g
KF9fYnJpZGdlIENGRGljdGlvbmFyeVJlZikgQHsKLSAgICAgICAgICAgIChfX2JyaWRnZSBOU1N0
cmluZyAqKWtDVlBpeGVsQnVmZmVyUGl4ZWxGb3JtYXRUeXBlS2V5IDogQChrQ1ZQaXhlbEZvcm1h
dFR5cGVfMzJBUkdCKSwKLSAgICAgICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVs
QnVmZmVyV2lkdGhLZXkgOiBAKGltYWdlU2l6ZS53aWR0aCksCi0gICAgICAgICAgICAoX19icmlk
Z2UgTlNTdHJpbmcgKilrQ1ZQaXhlbEJ1ZmZlckhlaWdodEtleSA6IEAoaW1hZ2VTaXplLmhlaWdo
dCksCi0jaWYgUExBVEZPUk0oSU9TKQotICAgICAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICop
a0NWUGl4ZWxGb3JtYXRPcGVuR0xFU0NvbXBhdGliaWxpdHkgOiBAKFlFUyksCi0jZWxzZQotICAg
ICAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxCdWZmZXJPcGVuR0xDb21wYXRp
YmlsaXR5S2V5IDogQChZRVMpLAotI2VuZGlmCi0gICAgICAgICAgICAoX19icmlkZ2UgTlNTdHJp
bmcgKilrQ1ZQaXhlbEJ1ZmZlcklPU3VyZmFjZVByb3BlcnRpZXNLZXkgOiBAey8qZW1wdHkgZGlj
dGlvbmFyeSovfQotICAgICAgICB9OwotCi0gICAgICAgIENGRGljdGlvbmFyeVJlZiBwaXhlbEJ1
ZmZlclBvb2xPcHRpb25zID0gKF9fYnJpZGdlIENGRGljdGlvbmFyeVJlZikgQHsKLSAgICAgICAg
ICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxCdWZmZXJQb29sTWluaW11bUJ1ZmZlckNv
dW50S2V5IDogQCg0KQotICAgICAgICB9OwotCi0gICAgICAgIENWUmV0dXJuIHN0YXR1cyA9IENW
UGl4ZWxCdWZmZXJQb29sQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIHBpeGVsQnVmZmVyUG9v
bE9wdGlvbnMsIHNvdXJjZVBpeGVsQnVmZmVyT3B0aW9ucywgJmJ1ZmZlclBvb2wpOwotICAgICAg
ICBpZiAoc3RhdHVzICE9IGtDVlJldHVyblN1Y2Nlc3MpCi0gICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgICAgICBtX2J1ZmZlclBvb2wgPSBhZG9wdENGKGJ1ZmZlclBvb2wpOwotICAg
IH0KLQotICAgIENWUGl4ZWxCdWZmZXJSZWYgcGl4ZWxCdWZmZXI7Ci0gICAgQ1ZSZXR1cm4gc3Rh
dHVzID0gQ1ZQaXhlbEJ1ZmZlclBvb2xDcmVhdGVQaXhlbEJ1ZmZlcihudWxscHRyLCBtX2J1ZmZl
clBvb2wuZ2V0KCksICZwaXhlbEJ1ZmZlcik7Ci0gICAgaWYgKHN0YXR1cyAhPSBrQ1ZSZXR1cm5T
dWNjZXNzKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENWUGl4ZWxCdWZmZXJMb2Nr
QmFzZUFkZHJlc3MocGl4ZWxCdWZmZXIsIDApOwotICAgIHZvaWQqIGRhdGEgPSBDVlBpeGVsQnVm
ZmVyR2V0QmFzZUFkZHJlc3MocGl4ZWxCdWZmZXIpOwotICAgIGF1dG8gY29udGV4dCA9IGFkb3B0
Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKGRhdGEsIGltYWdlU2l6ZS53aWR0aCwgaW1hZ2VTaXpl
LmhlaWdodCwgOCwgQ1ZQaXhlbEJ1ZmZlckdldEJ5dGVzUGVyUm93KHBpeGVsQnVmZmVyKSwgc1JH
QkNvbG9yU3BhY2UsIChDR0JpdG1hcEluZm8pIGtDR0ltYWdlQWxwaGFOb25lU2tpcEZpcnN0KSk7
Ci0gICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwg
Q0dJbWFnZUdldFdpZHRoKGltYWdlKSwgQ0dJbWFnZUdldEhlaWdodChpbWFnZSkpLCBpbWFnZSk7
Ci0gICAgQ1ZQaXhlbEJ1ZmZlclVubG9ja0Jhc2VBZGRyZXNzKHBpeGVsQnVmZmVyLCAwKTsKLQot
ICAgIHJldHVybiBhZG9wdENGKHBpeGVsQnVmZmVyKTsKLX0KLQogdm9pZCBNb2NrUmVhbHRpbWVW
aWRlb1NvdXJjZU1hYzo6dXBkYXRlU2FtcGxlQnVmZmVyKCkKIHsKICAgICBhdXRvIGltYWdlQnVm
ZmVyID0gdGhpcy0+aW1hZ2VCdWZmZXIoKTsKICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBhdXRvIHBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJGcm9tQ0dJbWFn
ZShpbWFnZUJ1ZmZlci0+Y29weUltYWdlKCktPm5hdGl2ZUltYWdlKCkuZ2V0KCkpOwotICAgIGlm
IChtX3BpeGVsQnVmZmVyUmVzaXplcikKLSAgICAgICAgcGl4ZWxCdWZmZXIgPSBtX3BpeGVsQnVm
ZmVyUmVzaXplci0+cmVzaXplKHBpeGVsQnVmZmVyLmdldCgpKTsKLSAgICBlbHNlIHsKLSAgICAg
ICAgaWYgKCFtX3BpeGVsQnVmZmVyQ29uZm9ybWVyKSB7Ci0gICAgICAgICAgICBtX3BpeGVsQnVm
ZmVyQ29uZm9ybWVyID0gc3RkOjptYWtlX3VuaXF1ZTxQaXhlbEJ1ZmZlckNvbmZvcm1lckNWPigo
X19icmlkZ2UgQ0ZEaWN0aW9uYXJ5UmVmKUB7Ci0gICAgICAgICAgICAgICAgKF9fYnJpZGdlIE5T
U3RyaW5nICopa0NWUGl4ZWxCdWZmZXJQaXhlbEZvcm1hdFR5cGVLZXk6IEAocHJlZmVyZWRQaXhl
bEJ1ZmZlckZvcm1hdCgpKQotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLQotICAgICAgICBw
aXhlbEJ1ZmZlciA9IG1fcGl4ZWxCdWZmZXJDb25mb3JtZXItPmNvbnZlcnQocGl4ZWxCdWZmZXIu
Z2V0KCkpOwotICAgIH0KLSAgICBhdXRvIHNhbXBsZUJ1ZmZlciA9IENNU2FtcGxlQnVmZmVyRnJv
bVBpeGVsQnVmZmVyKHBpeGVsQnVmZmVyLmdldCgpKTsKKyAgICBpZiAoIW1faW1hZ2VUcmFuc2Zl
clNlc3Npb24pCisgICAgICAgIG1faW1hZ2VUcmFuc2ZlclNlc3Npb24gPSBJbWFnZVRyYW5zZmVy
U2Vzc2lvblZUOjpjcmVhdGUocHJlZmVyZWRQaXhlbEJ1ZmZlckZvcm1hdCgpKTsKKyAgICBpZiAo
IW1faW1hZ2VUcmFuc2ZlclNlc3Npb24pCisgICAgICAgIHJldHVybjsKKworICAgIENNVGltZSBz
YW1wbGVUaW1lID0gQ01UaW1lTWFrZSgoKGVsYXBzZWRUaW1lKCkgKyAxMDBfbXMpICogdmlkZW9T
YW1wbGVSYXRlKS5zZWNvbmRzKCksIHZpZGVvU2FtcGxlUmF0ZSk7CisgICAgYXV0byBzYW1wbGVC
dWZmZXIgPSBtX2ltYWdlVHJhbnNmZXJTZXNzaW9uLT5jcmVhdGVDTVNhbXBsZUJ1ZmZlcihpbWFn
ZUJ1ZmZlci0+Y29weUltYWdlKCktPm5hdGl2ZUltYWdlKCkuZ2V0KCksIHNhbXBsZVRpbWUsIHNp
emUoKSk7CisgICAgaWYgKCFzYW1wbGVCdWZmZXIpCisgICAgICAgIHJldHVybjsKIAogICAgIC8v
IFdlIHVzZSBtX2RldmljZU9yaWVudGF0aW9uIHRvIGVtdWxhdGUgc2Vuc29yIG9yaWVudGF0aW9u
CiAgICAgZGlzcGF0Y2hNZWRpYVNhbXBsZVRvT2JzZXJ2ZXJzKE1lZGlhU2FtcGxlQVZGT2JqQzo6
Y3JlYXRlKHNhbXBsZUJ1ZmZlci5nZXQoKSwgbV9kZXZpY2VPcmllbnRhdGlvbikpOwpAQCAtMjAz
LDIxICsxMjksNiBAQCB2b2lkIE1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjOjptb25pdG9yT3Jp
ZW50YXRpb24oT3JpZW50YXRpb25Ob3RpZmllciYgbm90aWZpZQogICAgIG9yaWVudGF0aW9uQ2hh
bmdlZChub3RpZmllci5vcmllbnRhdGlvbigpKTsKIH0KIAotdm9pZCBNb2NrUmVhbHRpbWVWaWRl
b1NvdXJjZU1hYzo6c2V0U2l6ZUFuZEZyYW1lUmF0ZVdpdGhQcmVzZXQoSW50U2l6ZSByZXF1ZXN0
ZWRTaXplLCBkb3VibGUsIFJlZlB0cjxWaWRlb1ByZXNldD4gcHJlc2V0KQotewotICAgIGlmICgh
cHJlc2V0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAocHJlc2V0LT5zaXplICE9IHJlcXVl
c3RlZFNpemUpIHsKLSAgICAgICAgaWYgKG1fcGl4ZWxCdWZmZXJSZXNpemVyICYmICFtX3BpeGVs
QnVmZmVyUmVzaXplci0+Y2FuUmVzaXplVG8ocmVxdWVzdGVkU2l6ZSkpCi0gICAgICAgICAgICBt
X3BpeGVsQnVmZmVyUmVzaXplciA9IG51bGxwdHI7Ci0KLSAgICAgICAgaWYgKCFtX3BpeGVsQnVm
ZmVyUmVzaXplcikKLSAgICAgICAgICAgIG1fcGl4ZWxCdWZmZXJSZXNpemVyID0gc3RkOjptYWtl
X3VuaXF1ZTxQaXhlbEJ1ZmZlclJlc2l6ZXI+KHJlcXVlc3RlZFNpemUsIHByZWZlcmVkUGl4ZWxC
dWZmZXJGb3JtYXQoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fcGl4ZWxCdWZmZXJSZXNpemVy
ID0gbnVsbHB0cjsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5B
QkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL21hYy9TY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1NjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNl
TWFjLmgKaW5kZXggZWM5MjBmMDI0YTU2ODk5MjAwOTQ0OTQ0NDdkNzJiZWU2MzI5MGRjNy4uOWM4
Zjg3MWMzZDFmOWM2OWMyNTdhNmJkOTllYTlmNDQyNzIwZDllZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1NjcmVlbkRpc3BsYXlDYXB0dXJlU291
cmNlTWFjLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1Nj
cmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLmgKQEAgLTU2LDcgKzU2LDcgQEAgcHJpdmF0ZToK
IAogICAgIHZvaWQgZnJhbWVBdmFpbGFibGUoQ0dEaXNwbGF5U3RyZWFtRnJhbWVTdGF0dXMsIHVp
bnQ2NF90LCBJT1N1cmZhY2VSZWYsIENHRGlzcGxheVN0cmVhbVVwZGF0ZVJlZik7CiAKLSAgICBS
ZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gZ2VuZXJhdGVGcmFtZSgpIGZpbmFsOworICAgIERp
c3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OkRpc3BsYXlGcmFtZVR5cGUgZ2VuZXJhdGVGcmFtZSgp
IGZpbmFsOwogICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RGlzcGxheVN1cmZhY2VU
eXBlIHN1cmZhY2VUeXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gUmVhbHRpbWVNZWRpYVNvdXJj
ZVNldHRpbmdzOjpEaXNwbGF5U3VyZmFjZVR5cGU6Ok1vbml0b3I7IH0KIAogICAgIHZvaWQgc3Rh
cnRQcm9kdWNpbmdEYXRhKCkgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvU2NyZWVuRGlzcGxheUNhcHR1
cmVTb3VyY2VNYWMubW0KaW5kZXggYTIzOGYyOGY5NzViODQwODM0Mjc3ZThiMGMyZGVkYzE5Y2Fi
ZTQ0Ny4uNGNiNGQxM2NhNTAyZjQzZDIxMmJkODRhMWQ3ZTcwYjhhZWUyYTJiNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1NjcmVlbkRpc3BsYXlD
YXB0dXJlU291cmNlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL21hYy9TY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5tbQpAQCAtMzYsNiArMzYsNyBA
QAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1MYXllci5o
IgogI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlJl
YWx0aW1lVmlkZW9VdGlsaXRpZXMuaCIKIAogI2luY2x1ZGUgIkNvcmVWaWRlb1NvZnRMaW5rLmgi
CiAKQEAgLTE2Niw3ICsxNjcsNyBAQCBib29sIFNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFj
OjpjcmVhdGVEaXNwbGF5U3RyZWFtKCkKICAgICAgICAgfSk7CiAKICAgICAgICAgYXV0byBzaXpl
ID0gZnJhbWVTaXplKCk7Ci0gICAgICAgIG1fZGlzcGxheVN0cmVhbSA9IGFkb3B0Q0YoQ0dEaXNw
bGF5U3RyZWFtQ3JlYXRlV2l0aERpc3BhdGNoUXVldWUobV9kaXNwbGF5SUQsIHNpemUud2lkdGgo
KSwgc2l6ZS5oZWlnaHQoKSwga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhQbGFuYXIsIHN0
cmVhbU9wdGlvbnMuZ2V0KCksIG1fY2FwdHVyZVF1ZXVlLmdldCgpLCBtX2ZyYW1lQXZhaWxhYmxl
QmxvY2spKTsKKyAgICAgICAgbV9kaXNwbGF5U3RyZWFtID0gYWRvcHRDRihDR0Rpc3BsYXlTdHJl
YW1DcmVhdGVXaXRoRGlzcGF0Y2hRdWV1ZShtX2Rpc3BsYXlJRCwgc2l6ZS53aWR0aCgpLCBzaXpl
LmhlaWdodCgpLCBwcmVmZXJlZFBpeGVsQnVmZmVyRm9ybWF0KCksIHN0cmVhbU9wdGlvbnMuZ2V0
KCksIG1fY2FwdHVyZVF1ZXVlLmdldCgpLCBtX2ZyYW1lQXZhaWxhYmxlQmxvY2spKTsKICAgICAg
ICAgaWYgKCFtX2Rpc3BsYXlTdHJlYW0pIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HKE1lZGlh
LCAiU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OmNyZWF0ZURpc3BsYXlTdHJlYW06IENH
RGlzcGxheVN0cmVhbUNyZWF0ZSBmYWlsZWQiKTsKICAgICAgICAgICAgIGNhcHR1cmVGYWlsZWQo
KTsKQEAgLTIwNSwxOCArMjA2LDE1IEBAIHZvaWQgU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VN
YWM6OnN0b3BQcm9kdWNpbmdEYXRhKCkKICAgICBtX2lzUnVubmluZyA9IGZhbHNlOwogfQogCi1S
ZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6
OmdlbmVyYXRlRnJhbWUoKQorRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6RGlzcGxheUZyYW1l
VHlwZSBTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6Z2VuZXJhdGVGcmFtZSgpCiB7Ci0g
ICAgaWYgKCFtX2N1cnJlbnRGcmFtZS5pb1N1cmZhY2UoKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KICAgICBEaXNwbGF5U3VyZmFjZSBjdXJyZW50RnJhbWU7CiAgICAgewogICAgICAgICBM
b2NrSG9sZGVyIGxvY2sobV9jdXJyZW50RnJhbWVNdXRleCk7CiAgICAgICAgIGN1cnJlbnRGcmFt
ZSA9IG1fY3VycmVudEZyYW1lLmlvU3VyZmFjZSgpOwogICAgIH0KIAotICAgIHJldHVybiBwaXhl
bEJ1ZmZlckZyb21JT1N1cmZhY2UoY3VycmVudEZyYW1lLmlvU3VyZmFjZSgpKTsKKyAgICByZXR1
cm4gRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6RGlzcGxheUZyYW1lVHlwZSB7IFJldGFpblB0
cjxJT1N1cmZhY2VSZWY+IHsgY3VycmVudEZyYW1lLmlvU3VyZmFjZSgpIH0gfTsKIH0KIAogdm9p
ZCBTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6c3RhcnREaXNwbGF5U3RyZWFtKCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9XaW5kb3dE
aXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL1dpbmRvd0Rpc3BsYXlDYXB0dXJlU291cmNlTWFjLmgKaW5kZXggMWM0ZDM3NjBm
ODhjZmY1ZmE3NGNkMjcwNjYwM2U2OGExZDNkNmRkZi4uMmQxYTY2ZTAzMTJiYWRjYTg5ZDliY2Yw
YjgwNjZlZDQzMmRiMmQ1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbWFjL1dpbmRvd0Rpc3BsYXlDYXB0dXJlU291cmNlTWFjLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1dpbmRvd0Rpc3BsYXlDYXB0dXJlU291
cmNlTWFjLmgKQEAgLTQ5LDExICs0OSwxMCBAQCBwcml2YXRlOgogICAgIFdpbmRvd0Rpc3BsYXlD
YXB0dXJlU291cmNlTWFjKHVpbnQzMl90LCBTdHJpbmcmJik7CiAgICAgdmlydHVhbCB+V2luZG93
RGlzcGxheUNhcHR1cmVTb3VyY2VNYWMoKSA9IGRlZmF1bHQ7CiAKLSAgICBSZXRhaW5QdHI8Q1ZQ
aXhlbEJ1ZmZlclJlZj4gZ2VuZXJhdGVGcmFtZSgpIGZpbmFsOworICAgIERpc3BsYXlDYXB0dXJl
U291cmNlQ29jb2E6OkRpc3BsYXlGcmFtZVR5cGUgZ2VuZXJhdGVGcmFtZSgpIGZpbmFsOwogICAg
IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RGlzcGxheVN1cmZhY2VUeXBlIHN1cmZhY2VU
eXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpE
aXNwbGF5U3VyZmFjZVR5cGU6OldpbmRvdzsgfQogCiAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+
IHdpbmRvd0ltYWdlKCk7Ci0gICAgUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJSZWY+IHBpeGVsQnVm
ZmVyRnJvbUNHSW1hZ2UoQ0dJbWFnZVJlZik7CiAKICAgICBJbnRTaXplIG1fd2luZG93U2l6ZTsK
ICAgICBDR1dpbmRvd0lEIG1fd2luZG93SUQgeyAwIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvV2luZG93RGlzcGxheUNhcHR1cmVTb3VyY2VN
YWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvV2luZG93RGlz
cGxheUNhcHR1cmVTb3VyY2VNYWMubW0KaW5kZXggMWQ2YTE3Y2Q0MTM4ZmQxZDU2NzJiZjkzMjkz
NzA0YmYxMDE0MTkyMy4uOWM1ZDVkNDMxMmQ2ZDUzNjg0Yzg1ZjJhNzgwZDgzYjMyNjk1MTU4MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1dpbmRv
d0Rpc3BsYXlDYXB0dXJlU291cmNlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL21hYy9XaW5kb3dEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5tbQpAQCAtMTM5
LDY5ICsxMzksOSBAQCBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gV2luZG93RGlzcGxheUNhcHR1cmVT
b3VyY2VNYWM6OndpbmRvd0ltYWdlKCkKICAgICByZXR1cm4gaW1hZ2U7CiB9CiAKLVJldGFpblB0
cjxDVlBpeGVsQnVmZmVyUmVmPiBXaW5kb3dEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6Z2VuZXJh
dGVGcmFtZSgpCitEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpEaXNwbGF5RnJhbWVUeXBlIFdp
bmRvd0Rpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpnZW5lcmF0ZUZyYW1lKCkKIHsKLSAgICBhdXRv
IGltYWdlID0gd2luZG93SW1hZ2UoKTsKLSAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIGlmIChtX2xhc3RJbWFnZSAmJiBtX2xhc3RQaXhlbEJ1ZmZlciAmJiBD
RkVxdWFsKG1fbGFzdEltYWdlLmdldCgpLCBpbWFnZS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBt
X2xhc3RQaXhlbEJ1ZmZlci5nZXQoKTsKLQotICAgIG1fbGFzdEltYWdlID0gV1RGTW92ZShpbWFn
ZSk7Ci0gICAgcmV0dXJuIHBpeGVsQnVmZmVyRnJvbUNHSW1hZ2UobV9sYXN0SW1hZ2UuZ2V0KCkp
OwotfQotCi1SZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gV2luZG93RGlzcGxheUNhcHR1cmVT
b3VyY2VNYWM6OnBpeGVsQnVmZmVyRnJvbUNHSW1hZ2UoQ0dJbWFnZVJlZiBpbWFnZSkKLXsKLSAg
ICBzdGF0aWMgQ0dDb2xvclNwYWNlUmVmIHNSR0JDb2xvclNwYWNlID0gc1JHQkNvbG9yU3BhY2VS
ZWYoKTsKLQotICAgIGF1dG8gaW1hZ2VTaXplID0gSW50U2l6ZShDR0ltYWdlR2V0V2lkdGgoaW1h
Z2UpLCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKSk7Ci0gICAgaWYgKGltYWdlU2l6ZSAhPSBpbnRy
aW5zaWNTaXplKCkpIHsKLSAgICAgICAgbV9idWZmZXJQb29sID0gbnVsbHB0cjsKLSAgICAgICAg
bV9sYXN0SW1hZ2UgPSBudWxscHRyOwotICAgICAgICBtX2xhc3RQaXhlbEJ1ZmZlciA9IG51bGxw
dHI7Ci0gICAgfQotCi0gICAgaWYgKCFtX2J1ZmZlclBvb2wpIHsKLSAgICAgICAgQ1ZQaXhlbEJ1
ZmZlclBvb2xSZWYgYnVmZmVyUG9vbDsKLSAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIHNvdXJjZVBp
eGVsQnVmZmVyT3B0aW9ucyA9IChfX2JyaWRnZSBDRkRpY3Rpb25hcnlSZWYpIEB7Ci0gICAgICAg
IChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsQnVmZmVyUGl4ZWxGb3JtYXRUeXBlS2V5IDog
QChrQ1ZQaXhlbEZvcm1hdFR5cGVfMzJBUkdCKSwKLSAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5n
ICopa0NWUGl4ZWxCdWZmZXJXaWR0aEtleSA6IEAoaW1hZ2VTaXplLndpZHRoKCkpLAotICAgICAg
ICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ1ZQaXhlbEJ1ZmZlckhlaWdodEtleSA6IEAoaW1hZ2VT
aXplLmhlaWdodCgpKSwKLSNpZiBQTEFURk9STShJT1MpCi0gICAgICAgIChfX2JyaWRnZSBOU1N0
cmluZyAqKWtDVlBpeGVsRm9ybWF0T3BlbkdMRVNDb21wYXRpYmlsaXR5IDogQChZRVMpLAotI2Vs
c2UKLSAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxCdWZmZXJPcGVuR0xDb21w
YXRpYmlsaXR5S2V5IDogQChZRVMpLAotI2VuZGlmCi0gICAgICAgIChfX2JyaWRnZSBOU1N0cmlu
ZyAqKWtDVlBpeGVsQnVmZmVySU9TdXJmYWNlUHJvcGVydGllc0tleSA6IEB7IC8qZW1wdHkgZGlj
dGlvbmFyeSovIH0KLSAgICB9OwotCi0gICAgICAgIENGRGljdGlvbmFyeVJlZiBwaXhlbEJ1ZmZl
clBvb2xPcHRpb25zID0gKF9fYnJpZGdlIENGRGljdGlvbmFyeVJlZikgQHsKLSAgICAgICAgICAg
IChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsQnVmZmVyUG9vbE1pbmltdW1CdWZmZXJDb3Vu
dEtleSA6IEAoMykKLSAgICAgICAgfTsKLQotICAgICAgICBDVlJldHVybiBzdGF0dXMgPSBDVlBp
eGVsQnVmZmVyUG9vbENyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBwaXhlbEJ1ZmZlclBvb2xP
cHRpb25zLCBzb3VyY2VQaXhlbEJ1ZmZlck9wdGlvbnMsICZidWZmZXJQb29sKTsKLSAgICAgICAg
aWYgKHN0YXR1cyAhPSBrQ1ZSZXR1cm5TdWNjZXNzKQotICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICAgICAgbV9idWZmZXJQb29sID0gYWRvcHRDRihidWZmZXJQb29sKTsKLSAgICAg
ICAgc2V0SW50cmluc2ljU2l6ZShpbWFnZVNpemUpOwotICAgIH0KLQotICAgIENWUGl4ZWxCdWZm
ZXJSZWYgcGl4ZWxCdWZmZXI7Ci0gICAgQ1ZSZXR1cm4gc3RhdHVzID0gQ1ZQaXhlbEJ1ZmZlclBv
b2xDcmVhdGVQaXhlbEJ1ZmZlcihudWxscHRyLCBtX2J1ZmZlclBvb2wuZ2V0KCksICZwaXhlbEJ1
ZmZlcik7Ci0gICAgaWYgKHN0YXR1cyAhPSBrQ1ZSZXR1cm5TdWNjZXNzKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIENWUGl4ZWxCdWZmZXJMb2NrQmFzZUFkZHJlc3MocGl4ZWxCdWZm
ZXIsIDApOwotICAgIHZvaWQqIGRhdGEgPSBDVlBpeGVsQnVmZmVyR2V0QmFzZUFkZHJlc3MocGl4
ZWxCdWZmZXIpOwotICAgIGF1dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3Jl
YXRlKGRhdGEsIGltYWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCksIDgsIENWUGl4
ZWxCdWZmZXJHZXRCeXRlc1BlclJvdyhwaXhlbEJ1ZmZlciksIHNSR0JDb2xvclNwYWNlLCAoQ0dC
aXRtYXBJbmZvKSBrQ0dJbWFnZUFscGhhTm9uZVNraXBGaXJzdCkpOwotICAgIENHQ29udGV4dERy
YXdJbWFnZShjb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIENHSW1hZ2VHZXRXaWR0aChp
bWFnZSksIENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpKSwgaW1hZ2UpOwotICAgIENWUGl4ZWxCdWZm
ZXJVbmxvY2tCYXNlQWRkcmVzcyhwaXhlbEJ1ZmZlciwgMCk7Ci0KLSAgICBtX2xhc3RQaXhlbEJ1
ZmZlciA9IGFkb3B0Q0YocGl4ZWxCdWZmZXIpOwotICAgIHJldHVybiBtX2xhc3RQaXhlbEJ1ZmZl
cjsKKyAgICByZXR1cm4gRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6RGlzcGxheUZyYW1lVHlw
ZSB7IFJldGFpblB0cjxDR0ltYWdlUmVmPiB7IHdpbmRvd0ltYWdlKCkgfSB9OwogfQogCiBzdGQ6
Om9wdGlvbmFsPENhcHR1cmVEZXZpY2U+IFdpbmRvd0Rpc3BsYXlDYXB0dXJlU291cmNlTWFjOjp3
aW5kb3dDYXB0dXJlRGV2aWNlV2l0aFBlcnNpc3RlbnRJRChjb25zdCBTdHJpbmcmIGlkU3RyaW5n
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVW
aWRlb1NvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGlt
ZVZpZGVvU291cmNlLmNwcAppbmRleCA2MjI0N2VkNTZkZDBmZTcyYmUwMDM5MTQ0YjhmMDQ2ZjUw
ZDk2ZjRkLi43YWI3YTIxNTRlM2FlMmE0MWM3ZDEyYzhjMDc0ZDIyMWY4Nzg3NmMzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVv
U291cmNlLmNwcApAQCAtMTI2LDYgKzEyNiw3IEBAIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VD
YXBhYmlsaXRpZXMmIE1vY2tSZWFsdGltZVZpZGVvU291cmNlOjpjYXBhYmlsaXRpZXMoKQogICAg
ICAgICAgICAgY2FwYWJpbGl0aWVzLmFkZEZhY2luZ01vZGUoV1RGOjpnZXQ8TW9ja0NhbWVyYVBy
b3BlcnRpZXM+KG1fZGV2aWNlLnByb3BlcnRpZXMpLmZhY2luZ01vZGUpOwogICAgICAgICAgICAg
Y2FwYWJpbGl0aWVzLnNldERldmljZUlkKGhhc2hlZElkKCkpOwogICAgICAgICAgICAgdXBkYXRl
Q2FwYWJpbGl0aWVzKGNhcGFiaWxpdGllcyk7CisgICAgICAgICAgICBjYXBhYmlsaXRpZXMuc2V0
RGV2aWNlSWQoaGFzaGVkSWQoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBjYXBh
YmlsaXRpZXMuc2V0V2lkdGgoQ2FwYWJpbGl0eVZhbHVlT3JSYW5nZSg3MiwgMjg4MCkpOwogICAg
ICAgICAgICAgY2FwYWJpbGl0aWVzLnNldEhlaWdodChDYXBhYmlsaXR5VmFsdWVPclJhbmdlKDQ1
LCAxODAwKSk7CkBAIC0xNTksMTQgKzE2MCwxNCBAQCBjb25zdCBSZWFsdGltZU1lZGlhU291cmNl
U2V0dGluZ3MmIE1vY2tSZWFsdGltZVZpZGVvU291cmNlOjpzZXR0aW5ncygpCiAgICAgICAgIHNl
dHRpbmdzLnNldEFzcGVjdFJhdGlvKGFzcGVjdFJhdGlvKCkpOwogCiAgICAgUmVhbHRpbWVNZWRp
YVNvdXJjZVN1cHBvcnRlZENvbnN0cmFpbnRzIHN1cHBvcnRlZENvbnN0cmFpbnRzOwotICAgIHN1
cHBvcnRlZENvbnN0cmFpbnRzLnNldFN1cHBvcnRzRGV2aWNlSWQodHJ1ZSk7CiAgICAgc3VwcG9y
dGVkQ29uc3RyYWludHMuc2V0U3VwcG9ydHNGcmFtZVJhdGUodHJ1ZSk7CiAgICAgc3VwcG9ydGVk
Q29uc3RyYWludHMuc2V0U3VwcG9ydHNXaWR0aCh0cnVlKTsKICAgICBzdXBwb3J0ZWRDb25zdHJh
aW50cy5zZXRTdXBwb3J0c0hlaWdodCh0cnVlKTsKICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5z
ZXRTdXBwb3J0c0FzcGVjdFJhdGlvKHRydWUpOwotICAgIGlmIChtb2NrQ2FtZXJhKCkpCisgICAg
aWYgKG1vY2tDYW1lcmEoKSkgeworICAgICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBw
b3J0c0RldmljZUlkKHRydWUpOwogICAgICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBw
b3J0c0ZhY2luZ01vZGUodHJ1ZSk7Ci0gICAgZWxzZSB7CisgICAgfSBlbHNlIHsKICAgICAgICAg
c3VwcG9ydGVkQ29uc3RyYWludHMuc2V0U3VwcG9ydHNEaXNwbGF5U3VyZmFjZSh0cnVlKTsKICAg
ICAgICAgc3VwcG9ydGVkQ29uc3RyYWludHMuc2V0U3VwcG9ydHNMb2dpY2FsU3VyZmFjZSh0cnVl
KTsKICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>352514</attachid>
            <date>2018-10-16 16:31:22 -0700</date>
            <delta_ts>2018-10-16 20:28:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-190519-20181016163121.patch</filename>
            <type>text/plain</type>
            <size>89149</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM3MDM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzBmNDM0NzgzOGNiZjZj
OTViM2VkYmM5MTRhZDI5MDM0YzU3MWNkYy4uZjMxMTFkOThiNTUwNjRiZjYwYmI1YjM2NGYwMjhj
NTViN2NjZGQ4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgwIEBACisyMDE4LTEwLTE2ICBFcmlj
IENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNZWRpYVN0cmVh
bV0gQ29uc29saWRhdGUgYWxsIGltYWdlIGNvbnZlcnNpb24gYW5kIHJlc2l6aW5nIGludG8gb25l
IGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
OTA1MTkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQ1MjI0MzA3PgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gZnVuY3Rp
b25hbCBjaGFuZ2UuCisKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OiBBZGQgSW1hZ2VUcmFu
c2ZlclNlc3Npb25WVC4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6IERpdHRvLgorCisgICAgICAgICogcGxhdGZvcm0vTWVkaWFTYW1wbGUuaDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhU2FtcGxlOjp2aWRlb1BpeGVsRm9ybWF0IGNvbnN0KTogTmV3LgorCisg
ICAgICAgICogcGxhdGZvcm0vY29jb2EvVmlkZW9Ub29sYm94U29mdExpbmsuY3BwOiBBZGQgbmV3
IGtWVFBpeGVsVHJhbnNmZXJQcm9wZXJ0eSBrZXlzLgorICAgICAgICAqIHBsYXRmb3JtL2NvY29h
L1ZpZGVvVG9vbGJveFNvZnRMaW5rLmg6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMuaDoKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhU2FtcGxlQVZGT2JqQzo6Y3JlYXRlKTogUmVtb3ZlIHVuaW1wbGVtZW50ZWQgdmFyaWFu
dC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNh
bXBsZUFWRk9iakMubW06CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZUFWRk9iakM6OnZp
ZGVvUGl4ZWxGb3JtYXQgY29uc3QpOiBOZXcuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jdi9JbWFnZVRyYW5zZmVyU2Vzc2lvblZULmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jdi9JbWFnZVRyYW5zZmVyU2Vzc2lvblZULm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OkltYWdlVHJhbnNmZXJTZXNzaW9uVlQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6fkltYWdlVHJhbnNmZXJTZXNz
aW9uVlQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6c2V0U2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVhdGVQaXhl
bEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVh
dGVDTVNhbXBsZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpyb3VuZFVwVG9NYWNyb2Jsb2Nr
TXVsdGlwbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6aW9T
dXJmYWNlUGl4ZWxCdWZmZXJDcmVhdGlvbk9wdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlTWVkaWFTYW1wbGUpOgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJSZXNpemVyLmg6IFJlbW92ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJSZXNpemVyLm1tOiBSZW1vdmVkLgor
CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJlU291cmNl
Lmg6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJlU291
cmNlLm1tOgorICAgICAgICAoV2ViQ29yZTo6QVZWaWRlb0NhcHR1cmVTb3VyY2U6OnByZWZlcnNQ
cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6QVZWaWRlb0NhcHR1cmVTb3VyY2U6OmNhcHR1cmVP
dXRwdXREaWRPdXRwdXRTYW1wbGVCdWZmZXJGcm9tQ29ubmVjdGlvbik6IFJlbW92ZQorICAgICAg
ICB0aGUgcmVzaXppbmcgbG9naWMsIGl0IGlzIGhhbmRsZWQgYnkgdGhlIGJhc2UgY2xhc3MuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVTb3VyY2VD
b2NvYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpj
YXBhYmlsaXRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUNhcHR1cmVTb3VyY2VDb2Nv
YTo6c2V0dGluZ3NEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUNhcHR1cmVT
b3VyY2VDb2NvYTo6c2V0SW50cmluc2ljU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
Q2FwdHVyZVNvdXJjZUNvY29hOjplbWl0RnJhbWUpOiBSZW1vdmUgcmVzaXppbmcgbG9naWMsIGp1
c3QgdXNlIGEgdHJhbnNmZXIKKyAgICAgICAgc2Vzc2lvbiB0byBjcmVhdGUgYW4gaW1hZ2UgZnJv
bSB0aGUgY2FwdHVyZSBzb3VyY2UgbmF0aXZlIG91dHB1dCBmb3JtYXQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpzYW1wbGVCdWZmZXJGcm9tUGl4ZWxCdWZm
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6cm91bmRVcFRvTWFjcm9ibG9ja011bHRp
cGxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlDYXB0dXJlU291cmNlQ29j
b2E6OnBpeGVsQnVmZmVyRnJvbUlPU3VyZmFjZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL0Rpc3BsYXlDYXB0dXJlU291cmNlQ29jb2EuaDoKKworICAgICAg
ICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5o
OgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1Nv
dXJjZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFj
Ojp1cGRhdGVTYW1wbGVCdWZmZXIpOiBVc2UgaW1hZ2UgdHJhbnNmZXIgc2Vzc2lvbi4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjOjpDTVNhbXBsZUJ1ZmZlckZy
b21QaXhlbEJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpNb2NrUmVhbHRpbWVW
aWRlb1NvdXJjZU1hYzo6cGl4ZWxCdWZmZXJGcm9tQ0dJbWFnZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYzo6c2V0U2l6ZUFuZEZy
YW1lUmF0ZVdpdGhQcmVzZXQpOiBEZWxldGVkLgorCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL1NjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLmg6CisgICAgICAgICogcGxh
dGZvcm0vbWVkaWFzdHJlYW0vbWFjL1NjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6U2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OmNyZWF0ZURp
c3BsYXlTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6U2NyZWVuRGlzcGxheUNhcHR1cmVTb3Vy
Y2VNYWM6OmdlbmVyYXRlRnJhbWUpOiBSZXR1cm4gdGhlIElPU3VyZmFjZSBkaXJlY3RseS4KKwor
ICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9XaW5kb3dEaXNwbGF5Q2FwdHVyZVNv
dXJjZU1hYy5oOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9XaW5kb3dEaXNw
bGF5Q2FwdHVyZVNvdXJjZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OldpbmRvd0Rpc3BsYXlD
YXB0dXJlU291cmNlTWFjOjpnZW5lcmF0ZUZyYW1lKTogUmV0dXJuIHRoZSBDR0ltYWdlIGRpcmVj
dGx5LgorICAgICAgICAoV2ViQ29yZTo6V2luZG93RGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OnBp
eGVsQnVmZmVyRnJvbUNHSW1hZ2UpOiBEZWxldGVkLgorCisgICAgICAgICogcGxhdGZvcm0vbW9j
ay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNb2NrUmVh
bHRpbWVWaWRlb1NvdXJjZTo6Y2FwYWJpbGl0aWVzKTogT25seSB0aGUgY2FtZXJhIHN1cHBvcnRz
IGRldmljZSBJRC4KKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tSZWFsdGltZVZpZGVvU291cmNlOjpz
ZXR0aW5ncyk6IERpdHRvLgorCiAyMDE4LTEwLTExICBFbnJpcXVlIE9jYcOxYSBHb256w6FsZXog
IDxlb2NhbmhhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dTdHJlYW1lcl1bTVNFXSBGaXggaGVp
Z2h0IGNhbGN1bGF0aW9uIGZvciBzdHJlYW1zIHdpdGggc291cmNlIGFzcGVjdCByYXRpbwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXNDb2NvYS50eHQKaW5kZXggYzc2ZjQ5MjMxY2I1ZTBiYmQ1YzA5Y2YyZTI0YzRjOTE1
OWNkOWU1Ny4uODQ1NTVhNmE3OWFhMDQxZTJhYmI1YTliMDQ4OTQ4OWQ4NjIwMzA4MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC0zMTQsOCArMzE0LDggQEAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvV2ViR0xMYXllci5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViTWV0YWxMYXll
ci5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2Nv
YS5tbQogCitwbGF0Zm9ybS9ncmFwaGljcy9jdi9JbWFnZVRyYW5zZmVyU2Vzc2lvblZULm1tCiBw
bGF0Zm9ybS9ncmFwaGljcy9jdi9QaXhlbEJ1ZmZlckNvbmZvcm1lckNWLmNwcAotcGxhdGZvcm0v
Z3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJSZXNpemVyLm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jdi9U
ZXh0dXJlQ2FjaGVDVi5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvVmlkZW9UZXh0dXJlQ29waWVy
Q1YuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagppbmRleCBhZGEyNmUwYTdhZmVlMzY4M2JlMjEyZTc5NmM3ZjY0YjRjNjQ4NDJjLi5k
YzZiMmMzYjZmYmZmNjAwMWQwZjRiZDIyZjkzYjA4ODVmMTk5NDZmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNjksNiArMTY5
LDcgQEAKIAkJMDc4RTQzREExQUJCNkM3RTAwMUMyRkE2IC8qIE1lZGlhUGxheWJhY2tUYXJnZXRQ
aWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3
OEU0M0Q4MUFCQjZDN0UwMDFDMkZBNiAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDc4RTQzREQx
QUJCNkY2RjAwMUMyRkE2IC8qIE1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJNYWMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3OEU0M0RCMUFCQjZGNkYw
MDFDMkZBNiAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyTWFjLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDc4RTQzREUxQUJCNkY2RjAwMUMy
RkE2IC8qIE1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJNYWMubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzhFNDNEQzFBQkI2RjZGMDAxQzJGQTYgLyog
TWVkaWFQbGF5YmFja1RhcmdldFBpY2tlck1hYy5tbSAqLzsgfTsKKwkJMDc4RUQxOTMyMTZEMDc5
NTAwNzc1QjMzIC8qIEltYWdlVHJhbnNmZXJTZXNzaW9uVlQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3NDZEMzBDMjE0NkVBMzgwMDNEREY4NCAvKiBJ
bWFnZVRyYW5zZmVyU2Vzc2lvblZULmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMDc5MjE2NTUxQUE1NjBBQTAwQTNDMDQ5IC8qIE1lZGlhUGxheWJh
Y2tUYXJnZXRDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDA3OTIxNjUzMUFBNTYwQUEwMEEzQzA0OSAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0Q2xp
ZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MDc5NDE3OTExNjZFODU1RjAwOTQxNkMyIC8qIEluYmFuZFRleHRUcmFjay5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzk0MTc4RjE2NkU4NTVGMDA5
NDE2QzIgLyogSW5iYW5kVGV4dFRyYWNrLmNwcCAqLzsgfTsKIAkJMDc5NDE3OTIxNjZFODU1RjAw
OTQxNkMyIC8qIEluYmFuZFRleHRUcmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDc5NDE3OTAxNjZFODU1RjAwOTQxNkMyIC8qIEluYmFuZFRleHRU
cmFjay5oICovOyB9OwpAQCAtNTM2Myw4ICs1MzY0LDggQEAKIAkJMDczQjg3NjUxRTQzODU5RDAw
NzFDMEVDIC8qIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBBdWRpb1NhbXBsZURhdGFTb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMDc0NEVDRUIxRTBDNEFFNTAwMEQwOTQ0IC8qIE1vY2tSZWFsdGltZUF1ZGlvU291
cmNlTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1vY2tSZWFsdGltZUF1
ZGlvU291cmNlTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3NDRFQ0VDMUUw
QzRBRTUwMDBEMDk0NCAvKiBNb2NrUmVhbHRpbWVBdWRpb1NvdXJjZU1hYy5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE1vY2tSZWFsdGltZUF1ZGlvU291cmNlTWFj
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwNzQ2RDMwQTIxNDZFQTM3MDAzRERG
ODQgLyogUGl4ZWxCdWZmZXJSZXNpemVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gUGl4ZWxCdWZmZXJSZXNpemVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkwNzQ2RDMwQzIxNDZFQTM4MDAzRERGODQgLyogUGl4ZWxCdWZmZXJSZXNpemVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBpeGVsQnVmZmVyUmVzaXplci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwNzQ2RDMwQTIxNDZFQTM3MDAzRERGODQgLyog
SW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IEltYWdlVHJhbnNmZXJTZXNzaW9uVlQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTA3NDZEMzBDMjE0NkVBMzgwMDNEREY4NCAvKiBJbWFnZVRyYW5zZmVyU2Vzc2lv
blZULmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlVHJhbnNmZXJTZXNz
aW9uVlQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDc0RTgyQjgxOEE2OUYwRTAw
N0VGNTRDIC8qIFBsYXRmb3JtVGltZVJhbmdlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBQbGF0Zm9ybVRpbWVSYW5nZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwNzRFODJCOTE4QTY5RjBFMDA3RUY1NEMgLyogUGxhdGZvcm1UaW1lUmFuZ2Vz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtVGltZVJhbmdlcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzUzODYwMDE0NDg5RTk4MDBCNzg0NTIg
LyogQ2FjaGVkVGV4dFRyYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENhY2hlZFRleHRUcmFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0y
NTA2MiwxMCArMjUwNjMsMTAgQEAKIAkJQ0Q5RDgyN0MxQzdCQjJFRDAwNkZGMDY2IC8qIGN2ICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwNzQ2RDMwQzIx
NDZFQTM4MDAzRERGODQgLyogSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5oICovLAorCQkJCTA3NDZE
MzBBMjE0NkVBMzcwMDNEREY4NCAvKiBJbWFnZVRyYW5zZmVyU2Vzc2lvblZULm1tICovLAogCQkJ
CUNEN0QzMzQxMUM3QTEyM0YwMDA0MTI5MyAvKiBQaXhlbEJ1ZmZlckNvbmZvcm1lckNWLmNwcCAq
LywKIAkJCQlDRDdEMzM0MjFDN0ExMjNGMDAwNDEyOTMgLyogUGl4ZWxCdWZmZXJDb25mb3JtZXJD
Vi5oICovLAotCQkJCTA3NDZEMzBDMjE0NkVBMzgwMDNEREY4NCAvKiBQaXhlbEJ1ZmZlclJlc2l6
ZXIuaCAqLywKLQkJCQkwNzQ2RDMwQTIxNDZFQTM3MDAzRERGODQgLyogUGl4ZWxCdWZmZXJSZXNp
emVyLm1tICovLAogCQkJCUNEOUQ4Mjc0MUM3QUU1MzUwMDZGRjA2NiAvKiBUZXh0dXJlQ2FjaGVD
Vi5oICovLAogCQkJCUNEOUQ4MjczMUM3QUU1MzUwMDZGRjA2NiAvKiBUZXh0dXJlQ2FjaGVDVi5t
bSAqLywKIAkJCQlDRDlEODI3NzFDN0I4RUUxMDA2RkYwNjYgLyogVmlkZW9UZXh0dXJlQ29waWVy
Q1YuY3BwICovLApAQCAtMjc1ODMsNyArMjc1ODQsNiBAQAogCQkJCUExNUQ3NTE2MUU2OEY3Qzgw
MEEzNUZCQyAvKiBCbG9iQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTJFREVGMUY0MTIx
QjBFRkMwMDcyNkRCMiAvKiBCbG9iRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFEMzFDREQx
OTE5NjAyMDAwMTAwNUEzIC8qIEJsb2JEYXRhRmlsZVJlZmVyZW5jZS5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJRTRFOEI0RjUyMTZCOTU2NTAwQjg4MzREIC8qIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCTREM0IwMEFGMjE1RDZBNjkwMDc2Qjk4MyAvKiBCbG9iRXZl
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDNzdDM0Q3MURFRjg1MEEwMEE1MEJGQSAvKiBCbG9i
TGluZUVuZGluZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxQzk0QUY5MTkxMzAzRjAwMEQ1QTg5
MyAvKiBCbG9iUGFydC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzY3Niw3ICsyNzY3Niw2IEBACiAJ
CQkJNTczMDNCQkIyMDA2QzZFRTAwMzU1OTY1IC8qIENCT1JCaW5hcnkuaCBpbiBIZWFkZXJzICov
LAogCQkJCTU3MzAzQkMxMjAwNkUwMEMwMDM1NTk2NSAvKiBDQk9SUmVhZGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1NzMwM0JCOTIwMDZDNkVFMDAzNTU5NjUgLyogQ0JPUlZhbHVlLmggaW4gSGVh
ZGVycyAqLywKLQkJCQlFNEU4QjRFQzIxNkI3OUU1MDBCODgzNEQgLyogU3lzdGVtRm9udERhdGFi
YXNlQ29yZVRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTU3MzAzQkJBMjAwNkM2RUUwMDM1NTk2
NSAvKiBDQk9SV3JpdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTUwQjY5RTA5OURGMDI3MDA5
MEQ3ODEgLyogQ0RBVEFTZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlDREY0QjcxNjFFMDBC
N0U1MDBFMjM1QTIgLyogQ0RNLmggaW4gSGVhZGVycyAqLywKQEAgLTI3NzY4LDcgKzI3NzY3LDYg
QEAKIAkJCQlDRTc5OUY5ODFDNkE0NkJDMDA5N0I1MTggLyogQ29udGVudFNlY3VyaXR5UG9saWN5
U291cmNlTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0U3OTlGQUMxQzZBNTA2NjAwOTdCNTE4
IC8qIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTQxRDAxNUNBMEY0QjVDNzEwMDRBNjYyRiAvKiBDb250ZW50VHlwZS5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJRTQ2MDVGRUMyMTY2NDgwOTAwRTUzMDQ2IC8qIFByZXdhcm1JbmZvcm1h
dGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc2MjdCOEUxNEZCM0NFRTAwMkNEQ0ExIC8qIENv
bnRleHREZXN0cnVjdGlvbk9ic2VydmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0I2QTBFNjBC
MEJDQTVDMDBGNTAyN0EgLyogQ29udGV4dE1lbnUuaCBpbiBIZWFkZXJzICovLAogCQkJCTA2NUFE
NEY1MEIwQzJFREEwMDVBMkIxRCAvKiBDb250ZXh0TWVudUNsaWVudC5oIGluIEhlYWRlcnMgKi8s
CkBAIC0yODMyMSw2ICsyODMxOSw3IEBACiAJCQkJQjJDM0RBNjMwRDAwNkNENjAwRUY2RjI2IC8q
IEZvbnRDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzI0NThFNjMxRkU4OTdCMDAwNTk0NzU5
IC8qIEZvbnRDYWNoZUNvcmVUZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkMzREE2MTBEMDA2
Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUU0RThCNEY1
MjE2Qjk1NjUwMEI4ODM0RCAvKiBGb250Q2FzY2FkZURlc2NyaXB0aW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCMkMzREE2ODBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2NhZGVGb250cy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQjJBRkZDN0UwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDdXN0b21Q
bGF0Zm9ybURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQzNEQTY2MEQwMDZDRDYwMEVGNkYy
NiAvKiBGb250RGVzY3JpcHRpb24uaCBpbiBIZWFkZXJzICovLApAQCAtMjg2NzcsNiArMjg2NzYs
NyBAQAogCQkJCTdDMTkzQkMxMUY1RTBFRUQwMDg4RjNFNiAvKiBJbWFnZVNtb290aGluZ1F1YWxp
dHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTU1NDY3NTdCMUZEMjEyQTkwMDNCMTBCMCAvKiBJbWFn
ZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEIzNDgwOTQwRUVGNTBENDAwQUMxQjQxIC8q
IEltYWdlU291cmNlQ0cuaCBpbiBIZWFkZXJzICovLAorCQkJCTA3OEVEMTkzMjE2RDA3OTUwMDc3
NUIzMyAvKiBJbWFnZVRyYW5zZmVyU2Vzc2lvblZULmggaW4gSGVhZGVycyAqLywKIAkJCQk1NTUw
Q0I0MjFFOTU1RTNDMDAxMTFBQTAgLyogSW1hZ2VUeXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MjZGNzU2QjMxQjNCNjZGNzAwMDVERDc5IC8qIEltbXV0YWJsZU5GQS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMjZGNzU2QjUxQjNCNjhGMjAwMDVERDc5IC8qIEltbXV0YWJsZU5GQU5vZGVCdWlsZGVy
LmggaW4gSGVhZGVycyAqLywKQEAgLTMwMTMyLDYgKzMwMTMyLDcgQEAKIAkJCQlBMUMxNTA3QTFF
M0YyQjNFMDAzMkM5OEMgLyogUHJldmlld0NvbnZlcnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTE4NUI0MkExRTgyMTFBMTAwREM5MTE4IC8qIFByZXZpZXdMb2FkZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUExMERCRjQ3MThGOTIzMTcwMDBENzBDNiAvKiBQcmV2aWV3TG9hZGVyQ2xpZW50Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQlFNDYwNUZFQzIxNjY0ODA5MDBFNTMwNDYgLyogUHJld2FybUlu
Zm9ybWF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCNzFGRTZERjExMDkxQ0IzMDBEQUVGNzcg
LyogUHJpbnRDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUY2NDVENTFGRUNEQkNFMDBC
NTRERUQgLyogUHJvY2Vzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThFQTdFQkMwQTE5NDVEMDAw
QThFRjVGIC8qIFByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMTAx
Miw2ICszMTAxMyw3IEBACiAJCQkJNTE4NTQzMEIxRkI2Nzg0NTAwNDc4Rjk1IC8qIFNXU2VydmVy
VG9Db250ZXh0Q29ubmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE3QTUzNDYxRjUwQzE3
RjAwRENEQzBBIC8qIFNXU2VydmVyV29ya2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTgwODEx
NzE2RkNGOUNCMDBCODBEMDcgLyogU3luY2hyb25vdXNMb2FkZXJDbGllbnQuaCBpbiBIZWFkZXJz
ICovLAorCQkJCUU0RThCNEVDMjE2Qjc5RTUwMEI4ODM0RCAvKiBTeXN0ZW1Gb250RGF0YWJhc2VD
b3JlVGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwM0MwNzQxODg0Njk1RTAwQTVGOENBIC8q
IFN5c3RlbU1lbW9yeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUQ1OTc1QjMxOTYzNUYxMTAwRDAw
ODc4IC8qIFN5c3RlbVZlcnNpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE4Q0ZGMDUxMEExNTRG
MDkwMDBBNDIzNCAvKiBUYWJsZUxheW91dC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZWRpYVNhbXBsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vTWVkaWFTYW1wbGUuaAppbmRleCBlNTgyZmRiNDlhY2VlZGEwZmMzNjhhMGNlYzU2MTg4
MWFlODhjMzdiLi4wNTBkOTM4OWQxOGUxMGY1ZDk3YmE0M2Q4NjBjMmExMzUyMDY2MmZlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZWRpYVNhbXBsZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL01lZGlhU2FtcGxlLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lu
Y2x1ZGUgIkZsb2F0U2l6ZS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlz
Lmg+CisjaW5jbHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvTWVkaWFUaW1l
Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9t
aWNTdHJpbmcuaD4KQEAgLTEwMCw2ICsxMDEsMjAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3QgPSAwOwogfTsKIAotfQorfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0
czxXZWJDb3JlOjpNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbj4geworICAgIHVzaW5nIHZhbHVl
cyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYkNvcmU6Ok1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0
aW9uLAorICAgICAgICBXZWJDb3JlOjpNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6Tm9uZSwK
KyAgICAgICAgV2ViQ29yZTo6TWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246OlVwc2lkZURvd24s
CisgICAgICAgIFdlYkNvcmU6Ok1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpSaWdodCwKKyAg
ICAgICAgV2ViQ29yZTo6TWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246OkxlZnQKKyAgICA+Owor
fTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY29jb2EvQ29yZVZpZGVvU29mdExpbmsuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY29jb2EvQ29yZVZpZGVvU29mdExpbmsuY3BwCmluZGV4IDhiYjM2MmJmMjY4
MGQzNmQ2ZTNmMGQ1YzMyMDUyMTM1YzFkZjVhOTguLmRjZmIxY2ZiNDdhMDNkMzczYTNhNjIyODc0
ZTcwMzg1OTE2Y2UwOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29h
L0NvcmVWaWRlb1NvZnRMaW5rLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2Nv
YS9Db3JlVmlkZW9Tb2Z0TGluay5jcHAKQEAgLTkyLDQgKzkyLDYgQEAgU09GVF9MSU5LX0NPTlNU
QU5UX0ZPUl9TT1VSQ0UoV2ViQ29yZSwgQ29yZVZpZGVvLCBrQ1ZQaXhlbEJ1ZmZlckV4dGVuZGVk
UGl4ZWxzQm8KIFNPRlRfTElOS19DT05TVEFOVF9GT1JfU09VUkNFKFdlYkNvcmUsIENvcmVWaWRl
bywga0NWUGl4ZWxCdWZmZXJPcGVuR0xDb21wYXRpYmlsaXR5S2V5LCBDRlN0cmluZ1JlZikKICNl
bmRpZgogCitTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX1NPVVJDRShXZWJDb3JlLCBDb3JlVmlkZW8s
IENWUGl4ZWxCdWZmZXJDcmVhdGVXaXRoSU9TdXJmYWNlLCBDVlJldHVybiwgKENGQWxsb2NhdG9y
UmVmIGFsbG9jYXRvciwgSU9TdXJmYWNlUmVmIHN1cmZhY2UsIENGRGljdGlvbmFyeVJlZiBwaXhl
bEJ1ZmZlckF0dHJpYnV0ZXMsIENWUGl4ZWxCdWZmZXJSZWYgKiBwaXhlbEJ1ZmZlck91dCksIChh
bGxvY2F0b3IsIHN1cmZhY2UsIHBpeGVsQnVmZmVyQXR0cmlidXRlcywgcGl4ZWxCdWZmZXJPdXQp
KQorCiAjZW5kaWYgLy8gSEFWRShDT1JFX1ZJREVPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY29jb2EvQ29yZVZpZGVvU29mdExpbmsuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2NvY29hL0NvcmVWaWRlb1NvZnRMaW5rLmgKaW5kZXggOWVlYjQzNDYxODkzODQ1YTY4
MjQ0ODhiNDM4ZjU5NjlhYjJjOGIxMi4uNTI5NWU1OGM4NDcwZjUyZjJhZDg0M2IxNjdhMTc5NDc3
MDhkNTRiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvQ29yZVZp
ZGVvU29mdExpbmsuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9Db3JlVmlk
ZW9Tb2Z0TGluay5oCkBAIC0xNDcsNCArMTQ3LDcgQEAgU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9I
RUFERVIoV2ViQ29yZSwgQ29yZVZpZGVvLCBrQ1ZQaXhlbEJ1ZmZlck9wZW5HTENvbXBhdGliaWwK
ICNkZWZpbmUga0NWUGl4ZWxCdWZmZXJPcGVuR0xDb21wYXRpYmlsaXR5S2V5IGdldF9Db3JlVmlk
ZW9fa0NWUGl4ZWxCdWZmZXJPcGVuR0xDb21wYXRpYmlsaXR5S2V5KCkKICNlbmRpZgogCitTT0ZU
X0xJTktfRlVOQ1RJT05fRk9SX0hFQURFUihXZWJDb3JlLCBDb3JlVmlkZW8sIENWUGl4ZWxCdWZm
ZXJDcmVhdGVXaXRoSU9TdXJmYWNlLCBDVlJldHVybiwgKENGQWxsb2NhdG9yUmVmIGFsbG9jYXRv
ciwgSU9TdXJmYWNlUmVmIHN1cmZhY2UsIENGRGljdGlvbmFyeVJlZiBwaXhlbEJ1ZmZlckF0dHJp
YnV0ZXMsIENWUGl4ZWxCdWZmZXJSZWYgKiBwaXhlbEJ1ZmZlck91dCksIChhbGxvY2F0b3IsIHN1
cmZhY2UsIHBpeGVsQnVmZmVyQXR0cmlidXRlcywgcGl4ZWxCdWZmZXJPdXQpKQorI2RlZmluZSBD
VlBpeGVsQnVmZmVyQ3JlYXRlV2l0aElPU3VyZmFjZSBzb2Z0TGlua19Db3JlVmlkZW9fQ1ZQaXhl
bEJ1ZmZlckNyZWF0ZVdpdGhJT1N1cmZhY2UKKwogI2VuZGlmIC8vIEhBVkUoQ09SRV9WSURFTykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvVG9vbGJveFNv
ZnRMaW5rLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvVG9vbGJveFNv
ZnRMaW5rLmNwcAppbmRleCA5ODdmYmNmNjE5NjZkMjRjZjA1Y2EwODQ2OTlkMDU4MGEyZjExMWRm
Li5lYWY3OGI0NWQwNTI4N2E3OTZlNmEyYTA1Y2QwZThmMGE4OTk0ZDNmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9WaWRlb1Rvb2xib3hTb2Z0TGluay5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvVmlkZW9Ub29sYm94U29mdExpbmsuY3Bw
CkBAIC01OSw2ICs1OSw5IEBAIFNPRlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNFKFdlYkNvcmUs
IFZpZGVvVG9vbGJveCwgVlRQaXhlbFRyYW5zZmVyU2Vzc2lvblRyYW5zCiBTT0ZUX0xJTktfRlVO
Q1RJT05fRk9SX1NPVVJDRShXZWJDb3JlLCBWaWRlb1Rvb2xib3gsIFZUU2Vzc2lvblNldFByb3Bl
cnR5LCBPU1N0YXR1cywgKFZUU2Vzc2lvblJlZiBzZXNzaW9uLCBDRlN0cmluZ1JlZiBwcm9wZXJ0
eUtleSwgQ0ZUeXBlUmVmIHByb3BlcnR5VmFsdWUpLCAoc2Vzc2lvbiwgcHJvcGVydHlLZXksIHBy
b3BlcnR5VmFsdWUpKQogU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9TT1VSQ0UoV2ViQ29yZSwgVmlk
ZW9Ub29sYm94LCBrVlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXlfU2NhbGluZ01vZGUsIENGU3Ry
aW5nUmVmKQogU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9TT1VSQ0UoV2ViQ29yZSwgVmlkZW9Ub29s
Ym94LCBrVlRTY2FsaW5nTW9kZV9UcmltLCBDRlN0cmluZ1JlZikKK1NPRlRfTElOS19DT05TVEFO
VF9GT1JfU09VUkNFKFdlYkNvcmUsIFZpZGVvVG9vbGJveCwga1ZUUGl4ZWxUcmFuc2ZlclByb3Bl
cnR5S2V5X0VuYWJsZUhhcmR3YXJlQWNjZWxlcmF0ZWRUcmFuc2ZlciwgQ0ZTdHJpbmdSZWYpCitT
T0ZUX0xJTktfQ09OU1RBTlRfRk9SX1NPVVJDRShXZWJDb3JlLCBWaWRlb1Rvb2xib3gsIGtWVFBp
eGVsVHJhbnNmZXJQcm9wZXJ0eUtleV9FbmFibGVIaWdoU3BlZWRUcmFuc2ZlciwgQ0ZTdHJpbmdS
ZWYpCitTT0ZUX0xJTktfQ09OU1RBTlRfRk9SX1NPVVJDRShXZWJDb3JlLCBWaWRlb1Rvb2xib3gs
IGtWVFBpeGVsVHJhbnNmZXJQcm9wZXJ0eUtleV9SZWFsVGltZSwgQ0ZTdHJpbmdSZWYpCiAKIFNP
RlRfTElOS19DT05TVEFOVF9NQVlfRkFJTF9GT1JfU09VUkNFKFdlYkNvcmUsIFZpZGVvVG9vbGJv
eCwga1ZUSEVWQ0RlY29kZXJDYXBhYmlsaXR5X1N1cHBvcnRlZFByb2ZpbGVzLCBDRlN0cmluZ1Jl
ZikKIFNPRlRfTElOS19DT05TVEFOVF9NQVlfRkFJTF9GT1JfU09VUkNFKFdlYkNvcmUsIFZpZGVv
VG9vbGJveCwga1ZUSEVWQ0RlY29kZXJDYXBhYmlsaXR5X1BlclByb2ZpbGVTdXBwb3J0LCBDRlN0
cmluZ1JlZikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVv
VG9vbGJveFNvZnRMaW5rLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9WaWRlb1Rv
b2xib3hTb2Z0TGluay5oCmluZGV4IGYzMTliMTg4ZWQxNjA1ODA5NDc2MTJlYjM3Mjg2ZGUyMjMy
NGUyNWQuLjA3MWI3MTFlZDA0ZDNiODE0ODIyODkyYTE1MGQ3YWU1ZmRlNmY4NTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvVG9vbGJveFNvZnRMaW5rLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvVmlkZW9Ub29sYm94U29mdExpbmsu
aApAQCAtODUsNiArODUsMTIgQEAgU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9IRUFERVIoV2ViQ29y
ZSwgVmlkZW9Ub29sYm94LCBrVlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXkKICNkZWZpbmUga1ZU
UGl4ZWxUcmFuc2ZlclByb3BlcnR5S2V5X1NjYWxpbmdNb2RlIGdldF9WaWRlb1Rvb2xib3hfa1ZU
UGl4ZWxUcmFuc2ZlclByb3BlcnR5S2V5X1NjYWxpbmdNb2RlKCkKIFNPRlRfTElOS19DT05TVEFO
VF9GT1JfSEVBREVSKFdlYkNvcmUsIFZpZGVvVG9vbGJveCwga1ZUU2NhbGluZ01vZGVfVHJpbSwg
Q0ZTdHJpbmdSZWYpCiAjZGVmaW5lIGtWVFNjYWxpbmdNb2RlX1RyaW0gZ2V0X1ZpZGVvVG9vbGJv
eF9rVlRTY2FsaW5nTW9kZV9UcmltKCkKK1NPRlRfTElOS19DT05TVEFOVF9GT1JfSEVBREVSKFdl
YkNvcmUsIFZpZGVvVG9vbGJveCwga1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5S2V5X0VuYWJsZUhh
cmR3YXJlQWNjZWxlcmF0ZWRUcmFuc2ZlciwgQ0ZTdHJpbmdSZWYpCisjZGVmaW5lIGtWVFBpeGVs
VHJhbnNmZXJQcm9wZXJ0eUtleV9FbmFibGVIYXJkd2FyZUFjY2VsZXJhdGVkVHJhbnNmZXIgZ2V0
X1ZpZGVvVG9vbGJveF9rVlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXlfRW5hYmxlSGFyZHdhcmVB
Y2NlbGVyYXRlZFRyYW5zZmVyKCkKK1NPRlRfTElOS19DT05TVEFOVF9GT1JfSEVBREVSKFdlYkNv
cmUsIFZpZGVvVG9vbGJveCwga1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5S2V5X0VuYWJsZUhpZ2hT
cGVlZFRyYW5zZmVyLCBDRlN0cmluZ1JlZikKKyNkZWZpbmUga1ZUUGl4ZWxUcmFuc2ZlclByb3Bl
cnR5S2V5X0VuYWJsZUhpZ2hTcGVlZFRyYW5zZmVyIGdldF9WaWRlb1Rvb2xib3hfa1ZUUGl4ZWxU
cmFuc2ZlclByb3BlcnR5S2V5X0VuYWJsZUhpZ2hTcGVlZFRyYW5zZmVyKCkKK1NPRlRfTElOS19D
T05TVEFOVF9GT1JfSEVBREVSKFdlYkNvcmUsIFZpZGVvVG9vbGJveCwga1ZUUGl4ZWxUcmFuc2Zl
clByb3BlcnR5S2V5X1JlYWxUaW1lLCBDRlN0cmluZ1JlZikKKyNkZWZpbmUga1ZUUGl4ZWxUcmFu
c2ZlclByb3BlcnR5S2V5X1JlYWxUaW1lIGdldF9WaWRlb1Rvb2xib3hfa1ZUUGl4ZWxUcmFuc2Zl
clByb3BlcnR5S2V5X1JlYWxUaW1lKCkKIAogU09GVF9MSU5LX0NPTlNUQU5UX01BWV9GQUlMX0ZP
Ul9IRUFERVIoV2ViQ29yZSwgVmlkZW9Ub29sYm94LCBrVlRIRVZDRGVjb2RlckNhcGFiaWxpdHlf
U3VwcG9ydGVkUHJvZmlsZXMsIENGU3RyaW5nUmVmKQogI2RlZmluZSBrVlRIRVZDRGVjb2RlckNh
cGFiaWxpdHlfU3VwcG9ydGVkUHJvZmlsZXMgZ2V0X1ZpZGVvVG9vbGJveF9rVlRIRVZDRGVjb2Rl
ckNhcGFiaWxpdHlfU3VwcG9ydGVkUHJvZmlsZXMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpD
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9N
ZWRpYVNhbXBsZUFWRk9iakMuaAppbmRleCBkNWE4MDZkZmUzM2U5N2MwYzFmMjhkMjExMGRmNTg4
Zjk1NjgyNmFjLi4wOTIzODgzZTViYzdlNDQ2NGIxMTZiOTJiYmZkMDhhNmUyNjNhNzJmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2Jq
Yy9NZWRpYVNhbXBsZUFWRk9iakMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMuaApAQCAtMzEsMTMgKzMx
LDEyIEBACiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewot
ICAgIAorCiBjbGFzcyBNZWRpYVNhbXBsZUFWRk9iakMgOiBwdWJsaWMgTWVkaWFTYW1wbGUgewog
cHVibGljOgogICAgIHN0YXRpYyBSZWY8TWVkaWFTYW1wbGVBVkZPYmpDPiBjcmVhdGUoQ01TYW1w
bGVCdWZmZXJSZWYgc2FtcGxlLCBpbnQgdHJhY2tJRCkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBN
ZWRpYVNhbXBsZUFWRk9iakMoc2FtcGxlLCB0cmFja0lEKSk7IH0KICAgICBzdGF0aWMgUmVmPE1l
ZGlhU2FtcGxlQVZGT2JqQz4gY3JlYXRlKENNU2FtcGxlQnVmZmVyUmVmIHNhbXBsZSwgQXRvbWlj
U3RyaW5nIHRyYWNrSUQpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTWVkaWFTYW1wbGVBVkZPYmpD
KHNhbXBsZSwgdHJhY2tJRCkpOyB9CiAgICAgc3RhdGljIFJlZjxNZWRpYVNhbXBsZUFWRk9iakM+
IGNyZWF0ZShDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGUsIFZpZGVvUm90YXRpb24gcm90YXRpb24g
PSBWaWRlb1JvdGF0aW9uOjpOb25lLCBib29sIG1pcnJvcmVkID0gZmFsc2UpIHsgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgTWVkaWFTYW1wbGVBVkZPYmpDKHNhbXBsZSwgcm90YXRpb24sIG1pcnJvcmVk
KSk7IH0KLSAgICBzdGF0aWMgUmVmUHRyPE1lZGlhU2FtcGxlQVZGT2JqQz4gY3JlYXRlSW1hZ2VT
YW1wbGUoUmVmPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+JiYsIHVuc2lnbmVkIGxvbmcgd2lkdGgs
IHVuc2lnbmVkIGxvbmcgaGVpZ2h0KTsKICAgICBzdGF0aWMgUmVmUHRyPE1lZGlhU2FtcGxlQVZG
T2JqQz4gY3JlYXRlSW1hZ2VTYW1wbGUoVmVjdG9yPHVpbnQ4X3Q+JiYsIHVuc2lnbmVkIGxvbmcg
d2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KTsKIAogICAgIFJlZlB0cjxKU0M6OlVpbnQ4Q2xh
bXBlZEFycmF5PiBnZXRSR0JBSW1hZ2VEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC02NSw2ICs2
NCw3IEBAIHB1YmxpYzoKIAogICAgIFZpZGVvUm90YXRpb24gdmlkZW9Sb3RhdGlvbigpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIG1fcm90YXRpb247IH0KICAgICBib29sIHZpZGVvTWlycm9yZWQo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX21pcnJvcmVkOyB9CisgICAgdWludDMyX3Qgdmlk
ZW9QaXhlbEZvcm1hdCgpIGNvbnN0OwogCiAgICAgQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlQnVm
ZmVyKCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGUuZ2V0KCk7IH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1w
bGVBVkZPYmpDLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpDLm1tCmluZGV4IGMzYmNhNjEwOTA1NTRmODI4Yjg0
ODM5YWQ0MDU0OWE2MjdiZmU3NDAuLjY3YmI0YzZkZmUzMzA0OWRiZTE5MjI4YjUwZjdjYTg3Njcx
NGM3ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL01lZGlhU2FtcGxlQVZGT2JqQy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMubW0K
QEAgLTExMyw2ICsxMTMsMTIgQEAgUGxhdGZvcm1TYW1wbGUgTWVkaWFTYW1wbGVBVkZPYmpDOjpw
bGF0Zm9ybVNhbXBsZSgpCiAgICAgcmV0dXJuIHNhbXBsZTsKIH0KIAordWludDMyX3QgTWVkaWFT
YW1wbGVBVkZPYmpDOjp2aWRlb1BpeGVsRm9ybWF0KCkgY29uc3QKK3sKKyAgICBhdXRvIHBpeGVs
QnVmZmVyID0gc3RhdGljX2Nhc3Q8Q1ZQaXhlbEJ1ZmZlclJlZj4oQ01TYW1wbGVCdWZmZXJHZXRJ
bWFnZUJ1ZmZlcihtX3NhbXBsZS5nZXQoKSkpOworICAgIHJldHVybiBDVlBpeGVsQnVmZmVyR2V0
UGl4ZWxGb3JtYXRUeXBlKHBpeGVsQnVmZmVyKTsKK30KKwogc3RhdGljIGJvb2wgQ01TYW1wbGVC
dWZmZXJJc1JhbmRvbUFjY2VzcyhDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGUpCiB7CiAgICAgQ0ZB
cnJheVJlZiBhdHRhY2htZW50cyA9IENNU2FtcGxlQnVmZmVyR2V0U2FtcGxlQXR0YWNobWVudHNB
cnJheShzYW1wbGUsIGZhbHNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2N2L0ltYWdlVHJhbnNmZXJTZXNzaW9uVlQuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2N2L0ltYWdlVHJhbnNmZXJTZXNzaW9uVlQuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41
ODE0M2JlNDdlYjBiZTAxYmNhMzA4MGNhZWFjY2Y0ZDkwMzdiMTFiCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvSW1hZ2VUcmFuc2ZlclNlc3Np
b25WVC5oCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IFVTRShWSURFT1RPT0xCT1gpCisKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiTWVk
aWFTYW1wbGVBVkZPYmpjLmgiCisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCit0eXBlZGVm
IHN0cnVjdCBDR0ltYWdlICpDR0ltYWdlUmVmOwordHlwZWRlZiBzdHJ1Y3QgT3BhcXVlVlRQaXhl
bFRyYW5zZmVyU2Vzc2lvbiogVlRQaXhlbFRyYW5zZmVyU2Vzc2lvblJlZjsKK3R5cGVkZWYgc3Ry
dWN0IF9fQ1ZCdWZmZXIgKkNWUGl4ZWxCdWZmZXJSZWY7Cit0eXBlZGVmIHN0cnVjdCBfX0NWUGl4
ZWxCdWZmZXJQb29sICpDVlBpeGVsQnVmZmVyUG9vbFJlZjsKK3R5cGVkZWYgc3RydWN0IF9fSU9T
dXJmYWNlICpJT1N1cmZhY2VSZWY7Cit0eXBlZGVmIHN0cnVjdCBvcGFxdWVDTVNhbXBsZUJ1ZmZl
ciAqQ01TYW1wbGVCdWZmZXJSZWY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1h
Z2VUcmFuc2ZlclNlc3Npb25WVCB7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZVRyYW5zZmVyU2Vzc2lvblZUPiBjcmVhdGUodWludDMyX3QgcGl4ZWxGb3JtYXQpCisg
ICAgeworICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlVHJhbnNmZXJTZXNzaW9u
VlQ+KG5ldyBJbWFnZVRyYW5zZmVyU2Vzc2lvblZUKHBpeGVsRm9ybWF0KSk7CisgICAgfQorCisg
ICAgUmVmUHRyPE1lZGlhU2FtcGxlPiBjb252ZXJ0TWVkaWFTYW1wbGUoTWVkaWFTYW1wbGUmLCBj
b25zdCBJbnRTaXplJik7CisgICAgUmVmUHRyPE1lZGlhU2FtcGxlPiBjcmVhdGVNZWRpYVNhbXBs
ZShDR0ltYWdlUmVmLCBjb25zdCBNZWRpYVRpbWUmLCBjb25zdCBJbnRTaXplJiwgTWVkaWFTYW1w
bGU6OlZpZGVvUm90YXRpb24gcm90YXRpb24gPSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6
Tm9uZSwgYm9vbCBtaXJyb3JlZCA9IGZhbHNlKTsKKyAgICBSZWZQdHI8TWVkaWFTYW1wbGU+IGNy
ZWF0ZU1lZGlhU2FtcGxlKENNU2FtcGxlQnVmZmVyUmVmLCBjb25zdCBJbnRTaXplJiwgTWVkaWFT
YW1wbGU6OlZpZGVvUm90YXRpb24gcm90YXRpb24gPSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlv
bjo6Tm9uZSwgYm9vbCBtaXJyb3JlZCA9IGZhbHNlKTsKKworI2lmIEhBVkUoSU9TVVJGQUNFKQor
ICAgIFJlZlB0cjxNZWRpYVNhbXBsZT4gY3JlYXRlTWVkaWFTYW1wbGUoSU9TdXJmYWNlUmVmLCBj
b25zdCBNZWRpYVRpbWUmLCBjb25zdCBJbnRTaXplJiwgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRp
b24gcm90YXRpb24gPSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6Tm9uZSwgYm9vbCBtaXJy
b3JlZCA9IGZhbHNlKTsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIFdFQkNPUkVfRVhQT1JUIElt
YWdlVHJhbnNmZXJTZXNzaW9uVlQodWludDMyX3QpOworCisjaWYgSEFWRShJT1NVUkZBQ0UpCisg
ICAgQ0ZEaWN0aW9uYXJ5UmVmIGlvU3VyZmFjZVBpeGVsQnVmZmVyQ3JlYXRpb25PcHRpb25zKElP
U3VyZmFjZVJlZik7CisgICAgUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBjcmVhdGVDTVNh
bXBsZUJ1ZmZlcihJT1N1cmZhY2VSZWYsIGNvbnN0IE1lZGlhVGltZSYsIGNvbnN0IEludFNpemUm
KTsKKyAgICBSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gY3JlYXRlUGl4ZWxCdWZmZXIoSU9T
dXJmYWNlUmVmLCBjb25zdCBJbnRTaXplJik7CisjZW5kaWYKKworICAgIFJldGFpblB0cjxDTVNh
bXBsZUJ1ZmZlclJlZj4gY29udmVydENNU2FtcGxlQnVmZmVyKENNU2FtcGxlQnVmZmVyUmVmLCBj
b25zdCBJbnRTaXplJik7CisgICAgUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBjcmVhdGVD
TVNhbXBsZUJ1ZmZlcihDVlBpeGVsQnVmZmVyUmVmLCBjb25zdCBNZWRpYVRpbWUmLCBjb25zdCBJ
bnRTaXplJik7CisgICAgUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBjcmVhdGVDTVNhbXBs
ZUJ1ZmZlcihDR0ltYWdlUmVmLCBjb25zdCBNZWRpYVRpbWUmLCBjb25zdCBJbnRTaXplJik7CisK
KyAgICBSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gY29udmVydFBpeGVsQnVmZmVyKENWUGl4
ZWxCdWZmZXJSZWYsIGNvbnN0IEludFNpemUmKTsKKyAgICBSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZl
clJlZj4gY3JlYXRlUGl4ZWxCdWZmZXIoQ01TYW1wbGVCdWZmZXJSZWYsIGNvbnN0IEludFNpemUm
KTsKKyAgICBSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gY3JlYXRlUGl4ZWxCdWZmZXIoQ0dJ
bWFnZVJlZiwgY29uc3QgSW50U2l6ZSYpOworCisgICAgYm9vbCBzZXRTaXplKGNvbnN0IEludFNp
emUmKTsKKworICAgIFJldGFpblB0cjxWVFBpeGVsVHJhbnNmZXJTZXNzaW9uUmVmPiBtX3RyYW5z
ZmVyU2Vzc2lvbjsKKyAgICBSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclBvb2xSZWY+IG1fb3V0cHV0
QnVmZmVyUG9vbDsKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBtX2lvU3VyZmFjZUJ1
ZmZlckF0dHJpYnV0ZXM7CisgICAgdWludDMyX3QgbV9waXhlbEZvcm1hdDsKKyAgICBJbnRTaXpl
IG1fc2l6ZTsKK307CisKK30KKworI2VuZGlmIC8vIFVTRShWSURFT1RPT0xCT1gpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9JbWFnZVRyYW5zZmVyU2Vz
c2lvblZULm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvSW1hZ2VUcmFu
c2ZlclNlc3Npb25WVC5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYTdmY2NlNjNmYzE2ODEwNzM0MDJkMGY1MmUy
NDc1NWFiOWE4MDhmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY3YvSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5tbQpAQCAtMCwwICsxLDM4MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkltYWdlVHJhbnNmZXJT
ZXNzaW9uVlQuaCIKKworI2lmIFVTRShWSURFT1RPT0xCT1gpCisKKyNpbXBvcnQgIkxvZ2dpbmcu
aCIKKyNpbXBvcnQgIk1lZGlhU2FtcGxlQVZGT2JqQy5oIgorI2ltcG9ydCA8Q29yZU1lZGlhL0NN
Rm9ybWF0RGVzY3JpcHRpb24uaD4KKyNpbXBvcnQgPENvcmVNZWRpYS9DTVNhbXBsZUJ1ZmZlci5o
PgorI2ltcG9ydCA8cGFsL2NmL0NvcmVNZWRpYVNvZnRMaW5rLmg+CisKKyNpZiBIQVZFKElPU1VS
RkFDRSkKKyNpbmNsdWRlIDxwYWwvc3BpL2NvY29hL0lPU3VyZmFjZVNQSS5oPgorI2VuZGlmCisK
KyNpbXBvcnQgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK3Vz
aW5nIG5hbWVzcGFjZSBQQUw7CisKK3N0YXRpYyBpbmxpbmUgQ0ZTdHJpbmdSZWYgY3ZQaXhlbEZv
cm1hdE9wZW5HTEtleSgpCit7CisjaWYgUExBVEZPUk0oSU9TKSAmJiAhUExBVEZPUk0oSU9TTUFD
KQorICAgIHJldHVybiBrQ1ZQaXhlbEZvcm1hdE9wZW5HTEVTQ29tcGF0aWJpbGl0eTsKKyNlbHNl
CisgICAgcmV0dXJuIGtDVlBpeGVsQnVmZmVyT3BlbkdMQ29tcGF0aWJpbGl0eUtleTsKKyNlbmRp
ZgorfQorCitJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpJbWFnZVRyYW5zZmVyU2Vzc2lvblZUKHVp
bnQzMl90IHBpeGVsRm9ybWF0KQoreworICAgIFZUUGl4ZWxUcmFuc2ZlclNlc3Npb25SZWYgdHJh
bnNmZXJTZXNzaW9uOworICAgIFZUUGl4ZWxUcmFuc2ZlclNlc3Npb25DcmVhdGUoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwgJnRyYW5zZmVyU2Vzc2lvbik7CisgICAgQVNTRVJUKHRyYW5zZmVyU2Vzc2lv
bik7CisgICAgbV90cmFuc2ZlclNlc3Npb24gPSBhZG9wdENGKHRyYW5zZmVyU2Vzc2lvbik7CisK
KyAgICBWVFNlc3Npb25TZXRQcm9wZXJ0eSh0cmFuc2ZlclNlc3Npb24sIGtWVFBpeGVsVHJhbnNm
ZXJQcm9wZXJ0eUtleV9TY2FsaW5nTW9kZSwga1ZUU2NhbGluZ01vZGVfVHJpbSk7CisgICAgVlRT
ZXNzaW9uU2V0UHJvcGVydHkodHJhbnNmZXJTZXNzaW9uLCBrVlRQaXhlbFRyYW5zZmVyUHJvcGVy
dHlLZXlfRW5hYmxlSGlnaFNwZWVkVHJhbnNmZXIsIEAoWUVTKSk7CisgICAgVlRTZXNzaW9uU2V0
UHJvcGVydHkodHJhbnNmZXJTZXNzaW9uLCBrVlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXlfUmVh
bFRpbWUsIEAoWUVTKSk7CisjaWYgUExBVEZPUk0oSU9TKSAmJiAhUExBVEZPUk0oSU9TTUFDKQor
ICAgIFZUU2Vzc2lvblNldFByb3BlcnR5KHRyYW5zZmVyU2Vzc2lvbiwga1ZUUGl4ZWxUcmFuc2Zl
clByb3BlcnR5S2V5X0VuYWJsZUhhcmR3YXJlQWNjZWxlcmF0ZWRUcmFuc2ZlciwgQChZRVMpKTsK
KyNlbmRpZgorCisgICAgbV9waXhlbEZvcm1hdCA9IHBpeGVsRm9ybWF0OworfQorCitib29sIElt
YWdlVHJhbnNmZXJTZXNzaW9uVlQ6OnNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAg
ICBpZiAobV9zaXplID09IHNpemUgJiYgbV9vdXRwdXRCdWZmZXJQb29sKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIENGRGljdGlvbmFyeVJlZiBwaXhlbEJ1ZmZlck9wdGlvbnMgPSAoX19i
cmlkZ2UgQ0ZEaWN0aW9uYXJ5UmVmKSBAeworICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilr
Q1ZQaXhlbEJ1ZmZlcldpZHRoS2V5IDpAKHNpemUud2lkdGgoKSksCisgICAgICAgIChfX2JyaWRn
ZSBOU1N0cmluZyAqKWtDVlBpeGVsQnVmZmVySGVpZ2h0S2V5OkAoc2l6ZS5oZWlnaHQoKSksCisg
ICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsQnVmZmVyUGl4ZWxGb3JtYXRUeXBl
S2V5OkAobV9waXhlbEZvcm1hdCksCisgICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWN2UGl4
ZWxGb3JtYXRPcGVuR0xLZXkoKSA6IEAoWUVTKSwKKyAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5n
ICopa0NWUGl4ZWxCdWZmZXJJT1N1cmZhY2VQcm9wZXJ0aWVzS2V5IDogQHsgLyplbXB0eSBkaWN0
aW9uYXJ5Ki8gfSwKKyAgICB9OworCisgICAgQ0ZEaWN0aW9uYXJ5UmVmIHBpeGVsQnVmZmVyUG9v
bE9wdGlvbnMgPSAoX19icmlkZ2UgQ0ZEaWN0aW9uYXJ5UmVmKSBAeworICAgICAgICAoX19icmlk
Z2UgTlNTdHJpbmcgKilrQ1ZQaXhlbEJ1ZmZlclBvb2xNaW5pbXVtQnVmZmVyQ291bnRLZXkgOiBA
KDYpCisgICAgfTsKKworICAgIENWUGl4ZWxCdWZmZXJQb29sUmVmIGJ1ZmZlclBvb2w7CisgICAg
YXV0byBzdGF0dXMgPSBDVlBpeGVsQnVmZmVyUG9vbENyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCBwaXhlbEJ1ZmZlclBvb2xPcHRpb25zLCBwaXhlbEJ1ZmZlck9wdGlvbnMsICZidWZmZXJQb29s
KTsKKyAgICBBU1NFUlQoIXN0YXR1cyk7CisgICAgaWYgKHN0YXR1cyAhPSBrQ1ZSZXR1cm5TdWNj
ZXNzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX291dHB1dEJ1ZmZlclBvb2wgPSBh
ZG9wdENGKGJ1ZmZlclBvb2wpOworICAgIG1fc2l6ZSA9IHNpemU7CisgICAgbV9pb1N1cmZhY2VC
dWZmZXJBdHRyaWJ1dGVzID0gbnVsbHB0cjsKKworICAgIHJldHVybiB0cnVlOworfQorCitSZXRh
aW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y29udmVydFBp
eGVsQnVmZmVyKENWUGl4ZWxCdWZmZXJSZWYgc291cmNlQnVmZmVyLCBjb25zdCBJbnRTaXplJiBz
aXplKQoreworICAgIGlmIChzb3VyY2VCdWZmZXIgJiYgbV9zaXplID09IEludFNpemUoQ1ZQaXhl
bEJ1ZmZlckdldFdpZHRoKHNvdXJjZUJ1ZmZlciksIENWUGl4ZWxCdWZmZXJHZXRIZWlnaHQoc291
cmNlQnVmZmVyKSkgJiYgbV9waXhlbEZvcm1hdCA9PSBDVlBpeGVsQnVmZmVyR2V0UGl4ZWxGb3Jt
YXRUeXBlKHNvdXJjZUJ1ZmZlcikpCisgICAgICAgIHJldHVybiByZXRhaW5QdHIoc291cmNlQnVm
ZmVyKTsKKworICAgIGlmICghc291cmNlQnVmZmVyIHx8ICFzZXRTaXplKHNpemUpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIENWUGl4ZWxCdWZmZXJSZWYgb3V0cHV0QnVmZmVyID0g
bnVsbHB0cjsKKyAgICBhdXRvIHN0YXR1cyA9IENWUGl4ZWxCdWZmZXJQb29sQ3JlYXRlUGl4ZWxC
dWZmZXIoa0NGQWxsb2NhdG9yRGVmYXVsdCwgbV9vdXRwdXRCdWZmZXJQb29sLmdldCgpLCAmb3V0
cHV0QnVmZmVyKTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIFJFTEVBU0VfTE9HKE1lZGlh
LCAiSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y29udmVydFBpeGVsQnVmZmVyLCBDVlBpeGVsQnVm
ZmVyUG9vbENyZWF0ZVBpeGVsQnVmZmVyIGZhaWxlZCB3aXRoIGVycm9yICVkIiwgc3RhdGljX2Nh
c3Q8aW50PihzdGF0dXMpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIGF1
dG8gcmVzdWx0ID0gYWRvcHRDRihvdXRwdXRCdWZmZXIpOworCisgICAgYXV0byBlcnIgPSBWVFBp
eGVsVHJhbnNmZXJTZXNzaW9uVHJhbnNmZXJJbWFnZShtX3RyYW5zZmVyU2Vzc2lvbi5nZXQoKSwg
c291cmNlQnVmZmVyLCBvdXRwdXRCdWZmZXIpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgUkVM
RUFTRV9MT0coTWVkaWEsICJJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjb252ZXJ0UGl4ZWxCdWZm
ZXIsIFZUUGl4ZWxUcmFuc2ZlclNlc3Npb25UcmFuc2ZlckltYWdlIGZhaWxlZCB3aXRoIGVycm9y
ICVkIiwgc3RhdGljX2Nhc3Q8aW50PihlcnIpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJS
ZWY+IEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNyZWF0ZVBpeGVsQnVmZmVyKENNU2FtcGxlQnVm
ZmVyUmVmIHNvdXJjZUJ1ZmZlciwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBhdXRvIGNv
bnZlcnRlZFBpeGVsQnVmZmVyID0gY29udmVydFBpeGVsQnVmZmVyKENNU2FtcGxlQnVmZmVyR2V0
SW1hZ2VCdWZmZXIoc291cmNlQnVmZmVyKSwgc2l6ZSk7CisgICAgaWYgKCFjb252ZXJ0ZWRQaXhl
bEJ1ZmZlcikKKyAgICAgICAgUkVMRUFTRV9MT0coTWVkaWEsICJJbWFnZVRyYW5zZmVyU2Vzc2lv
blZUOjpjcmVhdGVQaXhlbEJ1ZmZlcjogQ01TYW1wbGVCdWZmZXJHZXRJbWFnZUJ1ZmZlciByZXR1
cm5lZCBudWxscHRyIik7CisKKyAgICByZXR1cm4gY29udmVydGVkUGl4ZWxCdWZmZXI7Cit9CisK
K1JldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4gSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y29u
dmVydENNU2FtcGxlQnVmZmVyKENNU2FtcGxlQnVmZmVyUmVmIHNvdXJjZUJ1ZmZlciwgY29uc3Qg
SW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAoIXNvdXJjZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBhdXRvIGRlc2NyaXB0aW9uID0gQ01TYW1wbGVCdWZmZXJHZXRGb3Jt
YXREZXNjcmlwdGlvbihzb3VyY2VCdWZmZXIpOworICAgIGF1dG8gc291cmNlU2l6ZSA9IEZsb2F0
U2l6ZShDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25HZXRQcmVzZW50YXRpb25EaW1lbnNpb25zKGRl
c2NyaXB0aW9uLCB0cnVlLCB0cnVlKSk7CisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IHN0YXRpY19j
YXN0PENWUGl4ZWxCdWZmZXJSZWY+KENNU2FtcGxlQnVmZmVyR2V0SW1hZ2VCdWZmZXIoc291cmNl
QnVmZmVyKSk7CisgICAgaWYgKHNpemUgPT0gcm91bmRlZEludFNpemUoc291cmNlU2l6ZSkgJiYg
bV9waXhlbEZvcm1hdCA9PSBDVlBpeGVsQnVmZmVyR2V0UGl4ZWxGb3JtYXRUeXBlKHBpeGVsQnVm
ZmVyKSkKKyAgICAgICAgcmV0dXJuIHJldGFpblB0cihzb3VyY2VCdWZmZXIpOworCisgICAgaWYg
KCFzZXRTaXplKHNpemUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gY29u
dmVydGVkUGl4ZWxCdWZmZXIgPSBjcmVhdGVQaXhlbEJ1ZmZlcihzb3VyY2VCdWZmZXIsIHNpemUp
OworICAgIGlmICghY29udmVydGVkUGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgQ01JdGVtQ291bnQgaXRlbUNvdW50ID0gMDsKKyAgICBhdXRvIHN0YXR1cyA9IENN
U2FtcGxlQnVmZmVyR2V0U2FtcGxlVGltaW5nSW5mb0FycmF5KHNvdXJjZUJ1ZmZlciwgMSwgbnVs
bHB0ciwgJml0ZW1Db3VudCk7CisgICAgaWYgKHN0YXR1cyAhPSBub0VycikgeworICAgICAgICBS
RUxFQVNFX0xPRyhNZWRpYSwgIkltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNvbnZlcnRDTVNhbXBs
ZUJ1ZmZlcjogQ01TYW1wbGVCdWZmZXJHZXRTYW1wbGVUaW1pbmdJbmZvQXJyYXkgZmFpbGVkIHdp
dGggZXJyb3IgY29kZTogJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgVmVjdG9yPENNU2FtcGxlVGltaW5nSW5mbz4gdGlt
aW5nSW5mb0FycmF5OworICAgIENNU2FtcGxlVGltaW5nSW5mbyogdGltZWluZ0luZm9QdHIgPSBu
dWxscHRyOworICAgIGlmIChpdGVtQ291bnQpIHsKKyAgICAgICAgdGltaW5nSW5mb0FycmF5Lmdy
b3coaXRlbUNvdW50KTsKKyAgICAgICAgc3RhdHVzID0gQ01TYW1wbGVCdWZmZXJHZXRTYW1wbGVU
aW1pbmdJbmZvQXJyYXkoc291cmNlQnVmZmVyLCBpdGVtQ291bnQsIHRpbWluZ0luZm9BcnJheS5k
YXRhKCksIG51bGxwdHIpOworICAgICAgICBpZiAoc3RhdHVzICE9IG5vRXJyKSB7CisgICAgICAg
ICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIkltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNvbnZlcnRD
TVNhbXBsZUJ1ZmZlcjogQ01TYW1wbGVCdWZmZXJHZXRTYW1wbGVUaW1pbmdJbmZvQXJyYXkgZmFp
bGVkIHdpdGggZXJyb3IgY29kZTogJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOworICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgdGltZWluZ0luZm9Q
dHIgPSB0aW1pbmdJbmZvQXJyYXkuZGF0YSgpOworICAgIH0KKworICAgIENNVmlkZW9Gb3JtYXRE
ZXNjcmlwdGlvblJlZiBmb3JtYXREZXNjcmlwdGlvbiA9IG51bGxwdHI7CisgICAgc3RhdHVzID0g
Q01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uQ3JlYXRlRm9ySW1hZ2VCdWZmZXIoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgY29udmVydGVkUGl4ZWxCdWZmZXIuZ2V0KCksICZmb3JtYXREZXNjcmlwdGlvbik7
CisgICAgaWYgKHN0YXR1cyAhPSBub0VycikgeworICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwg
IkltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNvbnZlcnRDTVNhbXBsZUJ1ZmZlcjogQ01WaWRlb0Zv
cm1hdERlc2NyaXB0aW9uQ3JlYXRlRm9ySW1hZ2VCdWZmZXIgcmV0dXJuZWQ6ICVkIiwgc3RhdGlj
X2Nhc3Q8aW50PihzdGF0dXMpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisg
ICAgQ01TYW1wbGVCdWZmZXJSZWYgcmVzaXplZFNhbXBsZUJ1ZmZlcjsKKyAgICBzdGF0dXMgPSBD
TVNhbXBsZUJ1ZmZlckNyZWF0ZVJlYWR5V2l0aEltYWdlQnVmZmVyKGtDRkFsbG9jYXRvckRlZmF1
bHQsIGNvbnZlcnRlZFBpeGVsQnVmZmVyLmdldCgpLCBmb3JtYXREZXNjcmlwdGlvbiwgdGltZWlu
Z0luZm9QdHIsICZyZXNpemVkU2FtcGxlQnVmZmVyKTsKKyAgICBDRlJlbGVhc2UoZm9ybWF0RGVz
Y3JpcHRpb24pOworICAgIGlmIChzdGF0dXMgIT0gbm9FcnIpIHsKKyAgICAgICAgUkVMRUFTRV9M
T0coTWVkaWEsICJJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjb252ZXJ0Q01TYW1wbGVCdWZmZXI6
IGZhaWxlZCB0byBjcmVhdGUgQ01TYW1wbGVCdWZmZXIgd2l0aCBlcnJvciBjb2RlOiAlZCIsIHN0
YXRpY19jYXN0PGludD4oc3RhdHVzKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0K
KworICAgIHJldHVybiBhZG9wdENGKHJlc2l6ZWRTYW1wbGVCdWZmZXIpOworfQorCitSZXRhaW5Q
dHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlUGl4ZWxC
dWZmZXIoQ0dJbWFnZVJlZiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAo
IWltYWdlIHx8ICFzZXRTaXplKHNpemUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IENWUGl4ZWxCdWZmZXJSZWYgcmdiQnVmZmVyOworICAgIGF1dG8gaW1hZ2VTaXplID0gSW50U2l6
ZShDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpLCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKSk7CisgICAg
YXV0byBzdGF0dXMgPSBDVlBpeGVsQnVmZmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGlt
YWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCksIGtDVlBpeGVsRm9ybWF0VHlwZV8z
MkFSR0IsIG51bGxwdHIsICZyZ2JCdWZmZXIpOworICAgIGlmIChzdGF0dXMgIT0ga0NWUmV0dXJu
U3VjY2VzcykgeworICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIkltYWdlVHJhbnNmZXJTZXNz
aW9uVlQ6OmNyZWF0ZVBpeGVsQnVmZmVyOiBDVlBpeGVsQnVmZmVyQ3JlYXRlIGZhaWxlZCB3aXRo
IGVycm9yIGNvZGU6ICVkIiwgc3RhdGljX2Nhc3Q8aW50PihzdGF0dXMpKTsKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgQ1ZQaXhlbEJ1ZmZlckxvY2tCYXNlQWRkcmVzcyhy
Z2JCdWZmZXIsIDApOworICAgIHZvaWQqIGRhdGEgPSBDVlBpeGVsQnVmZmVyR2V0QmFzZUFkZHJl
c3MocmdiQnVmZmVyKTsKKyAgICBhdXRvIHJldGFpbmVkUkdCQnVmZmVyID0gYWRvcHRDRihyZ2JC
dWZmZXIpOworICAgIGF1dG8gY29udGV4dCA9IENHQml0bWFwQ29udGV4dENyZWF0ZShkYXRhLCBp
bWFnZVNpemUud2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpLCA4LCBDVlBpeGVsQnVmZmVyR2V0
Qnl0ZXNQZXJSb3cocmdiQnVmZmVyKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwgKENHQml0bWFwSW5m
bykga0NHSW1hZ2VBbHBoYU5vbmVTa2lwRmlyc3QpOworICAgIGlmICghY29udGV4dCkgeworICAg
ICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIkltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNyZWF0ZVBp
eGVsQnVmZmVyOiBDR0JpdG1hcENvbnRleHRDcmVhdGUgcmV0dXJuZWQgbnVsbHB0ciIpOworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBhdXRvIHJldGFpbmVkQ29udGV4dCA9
IGFkb3B0Q0YoY29udGV4dCk7CisgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQsIENHUmVj
dE1ha2UoMCwgMCwgaW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSksIGltYWdl
KTsKKyAgICBDVlBpeGVsQnVmZmVyVW5sb2NrQmFzZUFkZHJlc3MocmdiQnVmZmVyLCAwKTsKKwor
ICAgIHJldHVybiBjb252ZXJ0UGl4ZWxCdWZmZXIocmdiQnVmZmVyLCBzaXplKTsKK30KKworUmV0
YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVhdGVD
TVNhbXBsZUJ1ZmZlcihDVlBpeGVsQnVmZmVyUmVmIHNvdXJjZUJ1ZmZlciwgY29uc3QgTWVkaWFU
aW1lJiBzYW1wbGVUaW1lLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIGlmICghc291cmNl
QnVmZmVyIHx8ICFzZXRTaXplKHNpemUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IGF1dG8gYnVmZmVyU2l6ZSA9IEludFNpemUoQ1ZQaXhlbEJ1ZmZlckdldFdpZHRoKHNvdXJjZUJ1
ZmZlciksIENWUGl4ZWxCdWZmZXJHZXRIZWlnaHQoc291cmNlQnVmZmVyKSk7CisgICAgUmV0YWlu
UHRyPENWUGl4ZWxCdWZmZXJSZWY+IGlucHV0QnVmZmVyID0gc291cmNlQnVmZmVyOworICAgIGlm
IChidWZmZXJTaXplICE9IG1fc2l6ZSB8fCBtX3BpeGVsRm9ybWF0ICE9IENWUGl4ZWxCdWZmZXJH
ZXRQaXhlbEZvcm1hdFR5cGUoc291cmNlQnVmZmVyKSkgeworICAgICAgICBpbnB1dEJ1ZmZlciA9
IGNvbnZlcnRQaXhlbEJ1ZmZlcihzb3VyY2VCdWZmZXIsIG1fc2l6ZSk7CisgICAgICAgIGlmICgh
aW5wdXRCdWZmZXIpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBD
TVZpZGVvRm9ybWF0RGVzY3JpcHRpb25SZWYgZm9ybWF0RGVzY3JpcHRpb24gPSBudWxscHRyOwor
ICAgIGF1dG8gc3RhdHVzID0gQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uQ3JlYXRlRm9ySW1hZ2VC
dWZmZXIoa0NGQWxsb2NhdG9yRGVmYXVsdCwgKENWSW1hZ2VCdWZmZXJSZWYpaW5wdXRCdWZmZXIu
Z2V0KCksICZmb3JtYXREZXNjcmlwdGlvbik7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICBS
RUxFQVNFX0xPRyhNZWRpYSwgIkltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNvbnZlcnRQaXhlbEJ1
ZmZlcjogZmFpbGVkIHRvIGluaXRpYWxpemUgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uIHdpdGgg
ZXJyb3IgY29kZTogJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOworICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGVCdWZmZXI7
CisgICAgYXV0byBjbVRpbWUgPSB0b0NNVGltZShzYW1wbGVUaW1lKTsKKyAgICBDTVNhbXBsZVRp
bWluZ0luZm8gdGltaW5nSW5mbyA9IHsga0NNVGltZUludmFsaWQsIGNtVGltZSwgY21UaW1lIH07
CisgICAgc3RhdHVzID0gQ01TYW1wbGVCdWZmZXJDcmVhdGVSZWFkeVdpdGhJbWFnZUJ1ZmZlcihr
Q0ZBbGxvY2F0b3JEZWZhdWx0LCAoQ1ZJbWFnZUJ1ZmZlclJlZilpbnB1dEJ1ZmZlci5nZXQoKSwg
Zm9ybWF0RGVzY3JpcHRpb24sICZ0aW1pbmdJbmZvLCAmc2FtcGxlQnVmZmVyKTsKKyAgICBDRlJl
bGVhc2UoZm9ybWF0RGVzY3JpcHRpb24pOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgUkVM
RUFTRV9MT0coTWVkaWEsICJJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjb252ZXJ0UGl4ZWxCdWZm
ZXI6IGZhaWxlZCB0byBpbml0aWFsaXplIENNU2FtcGxlQnVmZmVyIHdpdGggZXJyb3IgY29kZTog
JWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9CisKKyAgICByZXR1cm4gYWRvcHRDRihzYW1wbGVCdWZmZXIpOworfQorCitSZXRhaW5Q
dHI8Q01TYW1wbGVCdWZmZXJSZWY+IEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNyZWF0ZUNNU2Ft
cGxlQnVmZmVyKENHSW1hZ2VSZWYgaW1hZ2UsIGNvbnN0IE1lZGlhVGltZSYgc2FtcGxlVGltZSwg
Y29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gY3JlYXRlUGl4
ZWxCdWZmZXIoaW1hZ2UsIHNpemUpOworICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGNyZWF0ZUNNU2FtcGxlQnVmZmVyKHBpeGVsQnVm
ZmVyLmdldCgpLCBzYW1wbGVUaW1lLCBzaXplKTsKK30KKworI2lmIEhBVkUoSU9TVVJGQUNFKQor
CisjaWYgUExBVEZPUk0oTUFDKQorc3RhdGljIGludDMyX3Qgcm91bmRVcFRvTWFjcm9ibG9ja011
bHRpcGxlKGludDMyX3Qgc2l6ZSkKK3sKKyAgICByZXR1cm4gKHNpemUgKyAxNSkgJiB+MTU7Cit9
CisjZW5kaWYKKworQ0ZEaWN0aW9uYXJ5UmVmIEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmlvU3Vy
ZmFjZVBpeGVsQnVmZmVyQ3JlYXRpb25PcHRpb25zKElPU3VyZmFjZVJlZiBzdXJmYWNlKQorewor
ICAgIGlmIChtX2lvU3VyZmFjZUJ1ZmZlckF0dHJpYnV0ZXMpCisgICAgICAgIHJldHVybiBtX2lv
U3VyZmFjZUJ1ZmZlckF0dHJpYnV0ZXMuZ2V0KCk7CisKKyAgICBtX2lvU3VyZmFjZUJ1ZmZlckF0
dHJpYnV0ZXMgPSAoX19icmlkZ2UgQ0ZEaWN0aW9uYXJ5UmVmKSBAeworICAgICAgICAoX19icmlk
Z2UgTlNTdHJpbmcgKiljdlBpeGVsRm9ybWF0T3BlbkdMS2V5KCkgOiBAKFlFUyksCisgICAgfTsK
KworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBhdXRvIGZvcm1hdCA9IElPU3VyZmFjZUdldFBpeGVs
Rm9ybWF0KHN1cmZhY2UpOworICAgIGF1dG8gd2lkdGggPSBJT1N1cmZhY2VHZXRXaWR0aChzdXJm
YWNlKTsKKyAgICBhdXRvIGhlaWdodCA9IElPU3VyZmFjZUdldEhlaWdodChzdXJmYWNlKTsKKyAg
ICBpbnQzMl90IGV4dGVuZGVkUmlnaHQgPSByb3VuZFVwVG9NYWNyb2Jsb2NrTXVsdGlwbGUod2lk
dGgpIC0gd2lkdGg7CisgICAgaW50MzJfdCBleHRlbmRlZEJvdHRvbSA9IHJvdW5kVXBUb01hY3Jv
YmxvY2tNdWx0aXBsZShoZWlnaHQpIC0gaGVpZ2h0OworCisgICAgaWYgKChmb3JtYXQgPT0ga0NW
UGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhCaVBsYW5hclZpZGVvUmFuZ2UgfHwgZm9ybWF0ID09
IGtDVlBpeGVsRm9ybWF0VHlwZV80MjBZcENiQ3I4QmlQbGFuYXJGdWxsUmFuZ2UpCisgICAgICAg
ICYmIChJT1N1cmZhY2VHZXRCeXRlc1BlclJvd09mUGxhbmUoc3VyZmFjZSwgMCkgPj0gd2lkdGgg
KyBleHRlbmRlZFJpZ2h0KQorICAgICAgICAmJiAoSU9TdXJmYWNlR2V0Qnl0ZXNQZXJSb3dPZlBs
YW5lKHN1cmZhY2UsIDEpID49IHdpZHRoICsgZXh0ZW5kZWRSaWdodCkKKyAgICAgICAgJiYgKElP
U3VyZmFjZUdldEFsbG9jU2l6ZShzdXJmYWNlKSA+PSAoaGVpZ2h0ICsgZXh0ZW5kZWRCb3R0b20p
ICogSU9TdXJmYWNlR2V0Qnl0ZXNQZXJSb3dPZlBsYW5lKHN1cmZhY2UsIDApICogMyAvIDIpKSB7
CisgICAgICAgICAgICBtX2lvU3VyZmFjZUJ1ZmZlckF0dHJpYnV0ZXMgPSAoX19icmlkZ2UgQ0ZE
aWN0aW9uYXJ5UmVmKSBAeworICAgICAgICAgICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtD
VlBpeGVsQnVmZmVyT3BlbkdMQ29tcGF0aWJpbGl0eUtleSA6IEAoWUVTKSwKKyAgICAgICAgICAg
ICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ1ZQaXhlbEJ1ZmZlckV4dGVuZGVkUGl4ZWxzUmln
aHRLZXkgOiBAKGV4dGVuZGVkUmlnaHQpLAorICAgICAgICAgICAgICAgIChfX2JyaWRnZSBOU1N0
cmluZyAqKWtDVlBpeGVsQnVmZmVyRXh0ZW5kZWRQaXhlbHNCb3R0b21LZXkgOiBAKGV4dGVuZGVk
Qm90dG9tKQorICAgICAgICAgICAgfTsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShz
dXJmYWNlKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIG1faW9TdXJmYWNlQnVmZmVyQXR0cmlidXRl
cy5nZXQoKTsKK30KKworUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJSZWY+IEltYWdlVHJhbnNmZXJT
ZXNzaW9uVlQ6OmNyZWF0ZVBpeGVsQnVmZmVyKElPU3VyZmFjZVJlZiBzdXJmYWNlLCBjb25zdCBJ
bnRTaXplJiBzaXplKQoreworICAgIGlmICghc3VyZmFjZSB8fCAhc2V0U2l6ZShzaXplKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBDVlBpeGVsQnVmZmVyUmVmIHBpeGVsQnVmZmVy
OworICAgIGF1dG8gc3RhdHVzID0gQ1ZQaXhlbEJ1ZmZlckNyZWF0ZVdpdGhJT1N1cmZhY2Uoa0NG
QWxsb2NhdG9yRGVmYXVsdCwgc3VyZmFjZSwgaW9TdXJmYWNlUGl4ZWxCdWZmZXJDcmVhdGlvbk9w
dGlvbnMoc3VyZmFjZSksICZwaXhlbEJ1ZmZlcik7CisgICAgaWYgKHN0YXR1cykgeworICAgICAg
ICBSRUxFQVNFX0xPRyhNZWRpYSwgIkNWUGl4ZWxCdWZmZXJDcmVhdGVXaXRoSU9TdXJmYWNlIGZh
aWxlZCB3aXRoIGVycm9yIGNvZGU6ICVkIiwgc3RhdGljX2Nhc3Q8aW50PihzdGF0dXMpKTsKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgYXV0byByZXRhaW5lZEJ1ZmZlciA9
IGFkb3B0Q0YocGl4ZWxCdWZmZXIpOworICAgIGlmIChtX3NpemUgPT0gSW50U2l6ZShDVlBpeGVs
QnVmZmVyR2V0V2lkdGgocGl4ZWxCdWZmZXIpLCBDVlBpeGVsQnVmZmVyR2V0SGVpZ2h0KHBpeGVs
QnVmZmVyKSkgJiYgbV9waXhlbEZvcm1hdCA9PSBDVlBpeGVsQnVmZmVyR2V0UGl4ZWxGb3JtYXRU
eXBlKHBpeGVsQnVmZmVyKSkKKyAgICAgICAgcmV0dXJuIHJldGFpbmVkQnVmZmVyOworCisgICAg
cmV0dXJuIGNvbnZlcnRQaXhlbEJ1ZmZlcihwaXhlbEJ1ZmZlciwgc2l6ZSk7Cit9CisKK1JldGFp
blB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4gSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlQ01T
YW1wbGVCdWZmZXIoSU9TdXJmYWNlUmVmIHN1cmZhY2UsIGNvbnN0IE1lZGlhVGltZSYgc2FtcGxl
VGltZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAoIXN1cmZhY2UgfHwgIXNldFNp
emUoc2l6ZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBwaXhlbEJ1ZmZl
ciA9IGNyZWF0ZVBpeGVsQnVmZmVyKHN1cmZhY2UsIHNpemUpOworICAgIGlmICghcGl4ZWxCdWZm
ZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGNyZWF0ZUNNU2FtcGxl
QnVmZmVyKHBpeGVsQnVmZmVyLmdldCgpLCBzYW1wbGVUaW1lLCBzaXplKTsKK30KKyNlbmRpZgor
CitSZWZQdHI8TWVkaWFTYW1wbGU+IEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNvbnZlcnRNZWRp
YVNhbXBsZShNZWRpYVNhbXBsZSYgc2FtcGxlLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAg
IEFTU0VSVChzYW1wbGUucGxhdGZvcm1TYW1wbGUoKS50eXBlID09IFBsYXRmb3JtU2FtcGxlOjpD
TVNhbXBsZUJ1ZmZlclR5cGUpOworCisgICAgaWYgKHNpemUgPT0gcm91bmRlZEludFNpemUoc2Ft
cGxlLnByZXNlbnRhdGlvblNpemUoKSkpCisgICAgICAgIHJldHVybiAmc2FtcGxlOworCisgICAg
aWYgKCFzZXRTaXplKHNpemUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8g
cmVzaXplZEJ1ZmZlciA9IGNvbnZlcnRDTVNhbXBsZUJ1ZmZlcihzYW1wbGUucGxhdGZvcm1TYW1w
bGUoKS5zYW1wbGUuY21TYW1wbGVCdWZmZXIsIHNpemUpOworICAgIGlmICghcmVzaXplZEJ1ZmZl
cikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gTWVkaWFTYW1wbGVBVkZP
YmpDOjpjcmVhdGUocmVzaXplZEJ1ZmZlci5nZXQoKSwgc2FtcGxlLnZpZGVvUm90YXRpb24oKSwg
c2FtcGxlLnZpZGVvTWlycm9yZWQoKSk7Cit9CisKKyNpZiBIQVZFKElPU1VSRkFDRSkKK1JlZlB0
cjxNZWRpYVNhbXBsZT4gSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlTWVkaWFTYW1wbGUo
SU9TdXJmYWNlUmVmIHN1cmZhY2UsIGNvbnN0IE1lZGlhVGltZSYgc2FtcGxlVGltZSwgY29uc3Qg
SW50U2l6ZSYgc2l6ZSwgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb24gcm90YXRpb24sIGJvb2wg
bWlycm9yZWQpCit7CisgICAgYXV0byBzYW1wbGVCdWZmZXIgPSBjcmVhdGVDTVNhbXBsZUJ1ZmZl
cihzdXJmYWNlLCBzYW1wbGVUaW1lLCBzaXplKTsKKyAgICBpZiAoIXNhbXBsZUJ1ZmZlcikKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gTWVkaWFTYW1wbGVBVkZPYmpDOjpj
cmVhdGUoc2FtcGxlQnVmZmVyLmdldCgpLCByb3RhdGlvbiwgbWlycm9yZWQpOworfQorI2VuZGlm
CisKK1JlZlB0cjxNZWRpYVNhbXBsZT4gSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlTWVk
aWFTYW1wbGUoQ0dJbWFnZVJlZiBpbWFnZSwgY29uc3QgTWVkaWFUaW1lJiBzYW1wbGVUaW1lLCBj
b25zdCBJbnRTaXplJiBzaXplLCBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbiByb3RhdGlvbiwg
Ym9vbCBtaXJyb3JlZCkKK3sKKyAgICBhdXRvIHNhbXBsZUJ1ZmZlciA9IGNyZWF0ZUNNU2FtcGxl
QnVmZmVyKGltYWdlLCBzYW1wbGVUaW1lLCBzaXplKTsKKyAgICBpZiAoIXNhbXBsZUJ1ZmZlcikK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gTWVkaWFTYW1wbGVBVkZPYmpD
OjpjcmVhdGUoc2FtcGxlQnVmZmVyLmdldCgpLCByb3RhdGlvbiwgbWlycm9yZWQpOworfQorCitS
ZWZQdHI8TWVkaWFTYW1wbGU+IEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNyZWF0ZU1lZGlhU2Ft
cGxlKENNU2FtcGxlQnVmZmVyUmVmIGJ1ZmZlciwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgTWVkaWFT
YW1wbGU6OlZpZGVvUm90YXRpb24gcm90YXRpb24sIGJvb2wgbWlycm9yZWQpCit7CisgICAgYXV0
byBzYW1wbGVCdWZmZXIgPSBjb252ZXJ0Q01TYW1wbGVCdWZmZXIoYnVmZmVyLCBzaXplKTsKKyAg
ICBpZiAoIXNhbXBsZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1
cm4gTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVhdGUoc2FtcGxlQnVmZmVyLmdldCgpLCByb3RhdGlv
biwgbWlycm9yZWQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBV
U0UoVklERU9UT09MQk9YKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY3YvUGl4ZWxCdWZmZXJSZXNpemVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jdi9QaXhlbEJ1ZmZlclJlc2l6ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggM2RjZDRhYjIyNDA1MGU0N2ZiNTczYzVhOTNlMzc1Zjg4MjkxNWY1ZC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jdi9QaXhlbEJ1ZmZlclJlc2l6ZXIuaAorKysgL2Rldi9udWxsCkBAIC0x
LDU2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFVTRShWSURFT1RP
T0xCT1gpCi0KLSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5o
PgotCi10eXBlZGVmIHN0cnVjdCBPcGFxdWVWVFBpeGVsVHJhbnNmZXJTZXNzaW9uKiBWVFBpeGVs
VHJhbnNmZXJTZXNzaW9uUmVmOwotdHlwZWRlZiBzdHJ1Y3QgX19DVkJ1ZmZlciAqQ1ZQaXhlbEJ1
ZmZlclJlZjsKLXR5cGVkZWYgc3RydWN0IF9fQ1ZQaXhlbEJ1ZmZlclBvb2wgKkNWUGl4ZWxCdWZm
ZXJQb29sUmVmOwotdHlwZWRlZiBzdHJ1Y3Qgb3BhcXVlQ01TYW1wbGVCdWZmZXIgKkNNU2FtcGxl
QnVmZmVyUmVmOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFBpeGVsQnVmZmVyUmVz
aXplciB7Ci1wdWJsaWM6Ci0gICAgUGl4ZWxCdWZmZXJSZXNpemVyKEludFNpemUsIE9TVHlwZSk7
Ci0KLSAgICBSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gcmVzaXplKENWUGl4ZWxCdWZmZXJS
ZWYpOwotICAgIFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4gcmVzaXplKENNU2FtcGxlQnVm
ZmVyUmVmKTsKLSAgICBib29sIGNhblJlc2l6ZVRvKEludFNpemUgc2l6ZSkgeyByZXR1cm4gc2l6
ZSA9PSBtX3NpemU7IH0KLQotcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8VlRQaXhlbFRyYW5zZmVy
U2Vzc2lvblJlZj4gbV90cmFuc2ZlclNlc3Npb247Ci0gICAgUmV0YWluUHRyPENWUGl4ZWxCdWZm
ZXJQb29sUmVmPiBtX2J1ZmZlclBvb2w7Ci0gICAgSW50U2l6ZSBtX3NpemU7Ci19OwotCi19Ci0K
LSNlbmRpZiAvLyBVU0UoVklERU9UT09MQk9YKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJSZXNpemVyLm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJSZXNpemVyLm1tCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA2Yzc0MWEwY2YzNTIwMTI2MjlhMDI5MDE4ZmNjNTIyY2RiYmVi
ZTg4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L1BpeGVsQnVmZmVyUmVzaXplci5tbQorKysg
L2Rldi9udWxsCkBAIC0xLDEzOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZp
Zy5oIgotI2ltcG9ydCAiUGl4ZWxCdWZmZXJSZXNpemVyLmgiCi0KLSNpZiBVU0UoVklERU9UT09M
Qk9YKQotCi0jaW1wb3J0ICJMb2dnaW5nLmgiCi0jaW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4K
LQotI2ltcG9ydCAiQ29yZVZpZGVvU29mdExpbmsuaCIKLSNpbXBvcnQgIlZpZGVvVG9vbGJveFNv
ZnRMaW5rLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGl4ZWxCdWZmZXJSZXNpemVyOjpQ
aXhlbEJ1ZmZlclJlc2l6ZXIoSW50U2l6ZSBzaXplLCBPU1R5cGUgdmlkZW9Gb3JtYXQpCi17Ci0g
ICAgVlRQaXhlbFRyYW5zZmVyU2Vzc2lvblJlZiB0cmFuc2ZlclNlc3Npb247Ci0gICAgVlRQaXhl
bFRyYW5zZmVyU2Vzc2lvbkNyZWF0ZShOVUxMLCAmdHJhbnNmZXJTZXNzaW9uKTsKLSAgICBBU1NF
UlQodHJhbnNmZXJTZXNzaW9uKTsKLSAgICBtX3RyYW5zZmVyU2Vzc2lvbiA9IGFkb3B0Q0YodHJh
bnNmZXJTZXNzaW9uKTsKLQotICAgIFZUU2Vzc2lvblNldFByb3BlcnR5KHRyYW5zZmVyU2Vzc2lv
biwga1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5S2V5X1NjYWxpbmdNb2RlLCBrVlRTY2FsaW5nTW9k
ZV9UcmltKTsKLQotICAgIENGRGljdGlvbmFyeVJlZiBzb3VyY2VQaXhlbEJ1ZmZlck9wdGlvbnMg
PSAoX19icmlkZ2UgQ0ZEaWN0aW9uYXJ5UmVmKSBAewotICAgICAgICAoX19icmlkZ2UgTlNTdHJp
bmcgKilrQ1ZQaXhlbEJ1ZmZlcldpZHRoS2V5IDpAKHNpemUud2lkdGgoKSksCi0gICAgICAgIChf
X2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsQnVmZmVySGVpZ2h0S2V5OkAoc2l6ZS5oZWlnaHQo
KSksCi0gICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsQnVmZmVyUGl4ZWxGb3Jt
YXRUeXBlS2V5OkAodmlkZW9Gb3JtYXQpLAotI2lmIFBMQVRGT1JNKElPUykgJiYgIVBMQVRGT1JN
KElPU01BQykKLSAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxGb3JtYXRPcGVu
R0xFU0NvbXBhdGliaWxpdHkgOiBAKFlFUyksCi0jZWxzZQotICAgICAgICAoX19icmlkZ2UgTlNT
dHJpbmcgKilrQ1ZQaXhlbEJ1ZmZlck9wZW5HTENvbXBhdGliaWxpdHlLZXkgOiBAKFlFUyksCi0j
ZW5kaWYKLSAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxCdWZmZXJJT1N1cmZh
Y2VQcm9wZXJ0aWVzS2V5IDogQHsgLyplbXB0eSBkaWN0aW9uYXJ5Ki8gfSwKLSAgICB9OwotICAg
IENWUGl4ZWxCdWZmZXJQb29sUmVmIGJ1ZmZlclBvb2w7Ci0gICAgYXV0byBzdGF0dXMgPSBDVlBp
eGVsQnVmZmVyUG9vbENyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBOVUxMLCBzb3VyY2VQaXhl
bEJ1ZmZlck9wdGlvbnMsICZidWZmZXJQb29sKTsKLSAgICBBU1NFUlQoIXN0YXR1cyk7Ci0gICAg
aWYgKHN0YXR1cyAhPSBrQ1ZSZXR1cm5TdWNjZXNzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X2J1ZmZlclBvb2wgPSBhZG9wdENGKGJ1ZmZlclBvb2wpOwotICAgIG1fc2l6ZSA9IHNpemU7Ci19
Ci0KLVJldGFpblB0cjxDVlBpeGVsQnVmZmVyUmVmPiBQaXhlbEJ1ZmZlclJlc2l6ZXI6OnJlc2l6
ZShDVlBpeGVsQnVmZmVyUmVmIGlucHV0QnVmZmVyKQotewotICAgIEFTU0VSVChtX2J1ZmZlclBv
b2wgJiYgIW1fc2l6ZS5pc0VtcHR5KCkpOwotICAgIGlmICghbV9idWZmZXJQb29sIHx8IG1fc2l6
ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgUmV0YWluUHRyPENW
UGl4ZWxCdWZmZXJSZWY+IHJlc3VsdDsKLSAgICBDVlBpeGVsQnVmZmVyUmVmIG91dHB1dEJ1ZmZl
ciA9IG51bGxwdHI7Ci0KLSAgICBhdXRvIHN0YXR1cyA9IENWUGl4ZWxCdWZmZXJQb29sQ3JlYXRl
UGl4ZWxCdWZmZXIoa0NGQWxsb2NhdG9yRGVmYXVsdCwgbV9idWZmZXJQb29sLmdldCgpLCAmb3V0
cHV0QnVmZmVyKTsKLSAgICBpZiAoc3RhdHVzKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HKE1lZGlh
LCAiUGl4ZWxCdWZmZXJSZXNpemVyOjpyZXNpemUsIENWUGl4ZWxCdWZmZXJQb29sQ3JlYXRlUGl4
ZWxCdWZmZXIgZmFpbGVkIHdpdGggZXJyb3IgJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykp
OwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgcmVzdWx0ID0gYWRvcHRDRihv
dXRwdXRCdWZmZXIpOwotCi0gICAgYXV0byBlcnIgPSBWVFBpeGVsVHJhbnNmZXJTZXNzaW9uVHJh
bnNmZXJJbWFnZShtX3RyYW5zZmVyU2Vzc2lvbi5nZXQoKSwgaW5wdXRCdWZmZXIsIG91dHB1dEJ1
ZmZlcik7Ci0gICAgaWYgKGVycikgewotICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIlBpeGVs
QnVmZmVyUmVzaXplcjo6cmVzaXplLCBWVFBpeGVsVHJhbnNmZXJTZXNzaW9uVHJhbnNmZXJJbWFn
ZSBmYWlsZWQgd2l0aCBlcnJvciAlZCIsIHN0YXRpY19jYXN0PGludD4oZXJyKSk7Ci0gICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVJldGFp
blB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4gUGl4ZWxCdWZmZXJSZXNpemVyOjpyZXNpemUoQ01TYW1w
bGVCdWZmZXJSZWYgc2FtcGxlQnVmZmVyKQotewotICAgIGF1dG8gY29udmVydGVkUGl4ZWxCdWZm
ZXIgPSByZXNpemUoQ01TYW1wbGVCdWZmZXJHZXRJbWFnZUJ1ZmZlcihzYW1wbGVCdWZmZXIpKTsK
LSAgICBpZiAoIWNvbnZlcnRlZFBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvblJlZiBmb3JtYXREZXNjcmlwdGlvbiA9IG51
bGxwdHI7Ci0gICAgYXV0byBzdGF0dXMgPSBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25DcmVhdGVG
b3JJbWFnZUJ1ZmZlcihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBjb252ZXJ0ZWRQaXhlbEJ1ZmZlci5n
ZXQoKSwgJmZvcm1hdERlc2NyaXB0aW9uKTsKLSAgICBpZiAoc3RhdHVzICE9IG5vRXJyKSB7Ci0g
ICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhLCAiUGl4ZWxCdWZmZXJSZXNpemVyOjpyZXNpemU6IGZh
aWxlZCB0byBjcmVhdGUgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uIHdpdGggZXJyb3IgY29kZTog
JWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICB9Ci0KLSAgICBDTUl0ZW1Db3VudCBpdGVtQ291bnQgPSAwOwotICAgIHN0YXR1cyA9IENN
U2FtcGxlQnVmZmVyR2V0U2FtcGxlVGltaW5nSW5mb0FycmF5KHNhbXBsZUJ1ZmZlciwgMSwgbnVs
bHB0ciwgJml0ZW1Db3VudCk7Ci0gICAgaWYgKHN0YXR1cyAhPSBub0VycikgewotICAgICAgICBS
RUxFQVNFX0xPRyhNZWRpYSwgIlBpeGVsQnVmZmVyUmVzaXplcjo6cmVzaXplOiBDTVNhbXBsZUJ1
ZmZlckdldFNhbXBsZVRpbWluZ0luZm9BcnJheSBmYWlsZWQgd2l0aCBlcnJvciBjb2RlOiAlZCIs
IHN0YXRpY19jYXN0PGludD4oc3RhdHVzKSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IH0KLSAgICBWZWN0b3I8Q01TYW1wbGVUaW1pbmdJbmZvPiB0aW1pbmdJbmZvQXJyYXk7Ci0gICAg
Q01TYW1wbGVUaW1pbmdJbmZvKiB0aW1laW5nSW5mb1B0ciA9IG51bGxwdHI7Ci0gICAgaWYgKGl0
ZW1Db3VudCkgewotICAgICAgICB0aW1pbmdJbmZvQXJyYXkuZ3JvdyhpdGVtQ291bnQpOwotICAg
ICAgICBzdGF0dXMgPSBDTVNhbXBsZUJ1ZmZlckdldFNhbXBsZVRpbWluZ0luZm9BcnJheShzYW1w
bGVCdWZmZXIsIGl0ZW1Db3VudCwgdGltaW5nSW5mb0FycmF5LmRhdGEoKSwgbnVsbHB0cik7Ci0g
ICAgICAgIGlmIChzdGF0dXMgIT0gbm9FcnIpIHsKLSAgICAgICAgICAgIFJFTEVBU0VfTE9HKE1l
ZGlhLCAiUGl4ZWxCdWZmZXJSZXNpemVyOjpyZXNpemU6IENNU2FtcGxlQnVmZmVyR2V0U2FtcGxl
VGltaW5nSW5mb0FycmF5IGZhaWxlZCB3aXRoIGVycm9yIGNvZGU6ICVkIiwgc3RhdGljX2Nhc3Q8
aW50PihzdGF0dXMpKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0g
ICAgICAgIHRpbWVpbmdJbmZvUHRyID0gdGltaW5nSW5mb0FycmF5LmRhdGEoKTsKLSAgICB9Ci0K
LSAgICBDTVNhbXBsZUJ1ZmZlclJlZiByZXNpemVkU2FtcGxlQnVmZmVyOwotICAgIHN0YXR1cyA9
IENNU2FtcGxlQnVmZmVyQ3JlYXRlUmVhZHlXaXRoSW1hZ2VCdWZmZXIoa0NGQWxsb2NhdG9yRGVm
YXVsdCwgY29udmVydGVkUGl4ZWxCdWZmZXIuZ2V0KCksIGZvcm1hdERlc2NyaXB0aW9uLCB0aW1l
aW5nSW5mb1B0ciwgJnJlc2l6ZWRTYW1wbGVCdWZmZXIpOwotICAgIENGUmVsZWFzZShmb3JtYXRE
ZXNjcmlwdGlvbik7Ci0gICAgaWYgKHN0YXR1cyAhPSBub0VycikgewotICAgICAgICBSRUxFQVNF
X0xPRyhNZWRpYSwgIlBpeGVsQnVmZmVyUmVzaXplcjo6cmVzaXplOiBmYWlsZWQgdG8gY3JlYXRl
IENNU2FtcGxlQnVmZmVyIHdpdGggZXJyb3IgY29kZTogJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0
YXR1cykpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICByZXR1cm4gYWRv
cHRDRihyZXNpemVkU2FtcGxlQnVmZmVyKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gVVNFKFZJREVPVE9PTEJPWCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAKaW5kZXgg
ODA1MDQzMjdlM2E2ODI0OTk1ODZmOGQzYzdiOGNlMDQ0ZGEzMDI4Ny4uYjRhMTUxZTRlNzNjMTg0
YzAyNDRkMzA2NjZhYzlmODFjZTAxNjcxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAKQEAgLTQx
LDYgKzQxLDcgQEAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlJlYWx0
aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMuaCIKICNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291
cmNlQ2VudGVyLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVWaWRlb1V0aWxpdGllcy5oIgogI2luY2x1
ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL1VVSUQuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdIYXNoLmg+CkBAIC0xMzMsMTAgKzEzNCw2IEBAIHZvaWQgUmVhbHRpbWVN
ZWRpYVNvdXJjZTo6bm90aWZ5TXV0ZWRPYnNlcnZlcnMoKSBjb25zdAogICAgIH0pOwogfQogCi12
b2lkIFJlYWx0aW1lTWVkaWFTb3VyY2U6OnNldHRpbmdzRGlkQ2hhbmdlKE9wdGlvblNldDxSZWFs
dGltZU1lZGlhU291cmNlU2V0dGluZ3M6OkZsYWc+KQotewotfQotCiB2b2lkIFJlYWx0aW1lTWVk
aWFTb3VyY2U6Om5vdGlmeVNldHRpbmdzRGlkQ2hhbmdlT2JzZXJ2ZXJzKE9wdGlvblNldDxSZWFs
dGltZU1lZGlhU291cmNlU2V0dGluZ3M6OkZsYWc+IGZsYWdzKQogewogICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9SZWFsdGltZU1lZGlhU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlLmgKaW5kZXggYmNlZjU2OWJhNTg0YjFlYWJiNWNh
MjJiZWQzYjg2NmJhN2FkZGFiZS4uZDgwZmI4MDdmZGYwZTFhY2RmYjE0YWE5MjI0MjMwYmJlYzI5
NmI3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVh
bHRpbWVNZWRpYVNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuaApAQCAtMTk3LDcgKzE5Nyw3IEBAIHByb3RlY3RlZDoK
IHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0UHJvZHVjaW5nRGF0YSgpIHsgfQogICAg
IHZpcnR1YWwgdm9pZCBzdG9wUHJvZHVjaW5nRGF0YSgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBz
ZXR0aW5nc0RpZENoYW5nZShPcHRpb25TZXQ8UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpG
bGFnPik7CisgICAgdmlydHVhbCB2b2lkIHNldHRpbmdzRGlkQ2hhbmdlKE9wdGlvblNldDxSZWFs
dGltZU1lZGlhU291cmNlU2V0dGluZ3M6OkZsYWc+KSB7IH0KIAogCiAgICAgdm9pZCBmb3JFYWNo
T2JzZXJ2ZXIoY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKE9ic2VydmVyJik+JikgY29uc3Q7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZWaWRl
b0NhcHR1cmVTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21h
Yy9BVlZpZGVvQ2FwdHVyZVNvdXJjZS5oCmluZGV4IDNiNDlmNDZmZGEzZWMzMjZjNzM4NTE3M2Zh
NmNkMjdlY2YyOWVmNjIuLjI2YmY4MzE1NDU1YjE3ZWM4MzIyZmI1OTExYWE5ZTA1ZTc2MzYzMzcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVlZp
ZGVvQ2FwdHVyZVNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL21hYy9BVlZpZGVvQ2FwdHVyZVNvdXJjZS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDksNyArNDksNyBAQCBPQkpDX0NM
QVNTIFdlYkNvcmVBVlZpZGVvQ2FwdHVyZVNvdXJjZU9ic2VydmVyOwogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBBVlZpZGVvUHJlc2V0OwotY2xhc3MgUGl4ZWxCdWZmZXJSZXNpemVyOwor
Y2xhc3MgSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDsKIAogY2xhc3MgQVZWaWRlb0NhcHR1cmVTb3Vy
Y2UgOiBwdWJsaWMgUmVhbHRpbWVWaWRlb1NvdXJjZSwgcHJpdmF0ZSBPcmllbnRhdGlvbk5vdGlm
aWVyOjpPYnNlcnZlciB7CiBwdWJsaWM6CkBAIC0xMDMsMTMgKzEwMywxNCBAQCBwcml2YXRlOgog
CiAgICAgYm9vbCBzZXRGcmFtZVJhdGVDb25zdHJhaW50KGRvdWJsZSBtaW5GcmFtZVJhdGUsIGRv
dWJsZSBtYXhGcmFtZVJhdGUpOwogCi0gICAgdm9pZCBwcm9jZXNzTmV3RnJhbWUoUmV0YWluUHRy
PENNU2FtcGxlQnVmZmVyUmVmPiwgUmV0YWluUHRyPEFWQ2FwdHVyZUNvbm5lY3Rpb24+KTsKKyAg
ICB2b2lkIHByb2Nlc3NOZXdGcmFtZShSZWZQdHI8TWVkaWFTYW1wbGU+KTsKICAgICBJbnRTaXpl
IHNpemVGb3JQcmVzZXQoTlNTdHJpbmcqKTsKIAogICAgIEFWQ2FwdHVyZURldmljZSogZGV2aWNl
KCkgY29uc3QgeyByZXR1cm4gbV9kZXZpY2UuZ2V0KCk7IH0KIAotICAgIFJldGFpblB0cjxDTVNh
bXBsZUJ1ZmZlclJlZj4gbV9idWZmZXI7CisgICAgUmVmUHRyPE1lZGlhU2FtcGxlPiBtX2J1ZmZl
cjsKICAgICBSZXRhaW5QdHI8QVZDYXB0dXJlVmlkZW9EYXRhT3V0cHV0PiBtX3ZpZGVvT3V0cHV0
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZVRyYW5zZmVyU2Vzc2lvblZUPiBtX2ltYWdlVHJh
bnNmZXJTZXNzaW9uOwogCiAgICAgSW50U2l6ZSBtX3JlcXVlc3RlZFNpemU7CiAgICAgaW50MzJf
dCBtX3dpZHRoIHsgMCB9OwpAQCAtMTE4LDcgKzExOSw2IEBAIHByaXZhdGU6CiAgICAgaW50IG1f
ZGV2aWNlT3JpZW50YXRpb24geyAwIH07CiAgICAgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb24g
bV9zYW1wbGVSb3RhdGlvbiB7IE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpOb25lIH07CiAK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8UGl4ZWxCdWZmZXJSZXNpemVyPiBtX3BpeGVsQnVmZmVyUmVz
aXplcjsKICAgICBzdGQ6Om9wdGlvbmFsPFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncz4gbV9j
dXJyZW50U2V0dGluZ3M7CiAgICAgc3RkOjpvcHRpb25hbDxSZWFsdGltZU1lZGlhU291cmNlQ2Fw
YWJpbGl0aWVzPiBtX2NhcGFiaWxpdGllczsKICAgICBSZXRhaW5QdHI8V2ViQ29yZUFWVmlkZW9D
YXB0dXJlU291cmNlT2JzZXJ2ZXI+IG1fb2JqY09ic2VydmVyOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJlU291cmNlLm1t
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJl
U291cmNlLm1tCmluZGV4IDUxOTYwODIyMmU2NjE0YWIyZWRjZWMyM2YzNTAwOTA3NTlkMTE5MTYu
LjdhOTYyMTZjODU0YjVkYWVlZmQxODNkN2JkMmM4ZjdkNWQxYTU4ZjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVlZpZGVvQ2FwdHVyZVNvdXJj
ZS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZWaWRl
b0NhcHR1cmVTb3VyY2UubW0KQEAgLTI5LDExICsyOSwxMSBAQAogI2lmIEVOQUJMRShNRURJQV9T
VFJFQU0pICYmIFVTRShBVkZPVU5EQVRJT04pCiAKICNpbXBvcnQgIkltYWdlQnVmZmVyLmgiCisj
aW1wb3J0ICJJbWFnZVRyYW5zZmVyU2Vzc2lvblZULmgiCiAjaW1wb3J0ICJJbnRSZWN0LmgiCiAj
aW1wb3J0ICJMb2dnaW5nLmgiCiAjaW1wb3J0ICJNZWRpYUNvbnN0cmFpbnRzLmgiCiAjaW1wb3J0
ICJNZWRpYVNhbXBsZUFWRk9iakMuaCIKLSNpbXBvcnQgIlBpeGVsQnVmZmVyUmVzaXplci5oIgog
I2ltcG9ydCAiUGxhdGZvcm1MYXllci5oIgogI2ltcG9ydCAiUmVhbHRpbWVNZWRpYVNvdXJjZUNl
bnRlck1hYy5oIgogI2ltcG9ydCAiUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzLmgiCkBAIC0y
OTksNyArMjk5LDcgQEAgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYgQVZW
aWRlb0NhcHR1cmVTb3VyY2U6OmNhcGFiaWxpdGllcygpCiBib29sIEFWVmlkZW9DYXB0dXJlU291
cmNlOjpwcmVmZXJzUHJlc2V0KFZpZGVvUHJlc2V0JiBwcmVzZXQpCiB7CiAjaWYgUExBVEZPUk0o
SU9TKQotICAgIHJldHVybiAhW3N0YXRpY19jYXN0PEFWVmlkZW9QcmVzZXQqPigmcHJlc2V0KS0+
Zm9ybWF0LmdldCgpIGlzVmlkZW9CaW5uZWRdOworICAgIHJldHVybiBbc3RhdGljX2Nhc3Q8QVZW
aWRlb1ByZXNldCo+KCZwcmVzZXQpLT5mb3JtYXQuZ2V0KCkgaXNWaWRlb0Jpbm5lZF07CiAjZWxz
ZQogICAgIFVOVVNFRF9QQVJBTShwcmVzZXQpOwogI2VuZGlmCkBAIC01MTksMjcgKzUxOSwyMyBA
QCB2b2lkIEFWVmlkZW9DYXB0dXJlU291cmNlOjpjb21wdXRlU2FtcGxlUm90YXRpb24oKQogICAg
IH0KIH0KIAotdm9pZCBBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6cHJvY2Vzc05ld0ZyYW1lKFJldGFp
blB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4gc2FtcGxlQnVmZmVyLCBSZXRhaW5QdHI8QVZDYXB0dXJl
Q29ubmVjdGlvblR5cGU+IGNvbm5lY3Rpb24pCit2b2lkIEFWVmlkZW9DYXB0dXJlU291cmNlOjpw
cm9jZXNzTmV3RnJhbWUoUmVmUHRyPE1lZGlhU2FtcGxlPiBzYW1wbGUpCiB7CiAgICAgaWYgKCFp
c1Byb2R1Y2luZ0RhdGEoKSB8fCBtdXRlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBDTUZv
cm1hdERlc2NyaXB0aW9uUmVmIGZvcm1hdERlc2NyaXB0aW9uID0gQ01TYW1wbGVCdWZmZXJHZXRG
b3JtYXREZXNjcmlwdGlvbihzYW1wbGVCdWZmZXIuZ2V0KCkpOwotICAgIGlmICghZm9ybWF0RGVz
Y3JpcHRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fYnVmZmVyID0gc2FtcGxlQnVmZmVy
OwotICAgIENNVmlkZW9EaW1lbnNpb25zIGRpbWVuc2lvbnMgPSBDTVZpZGVvRm9ybWF0RGVzY3Jp
cHRpb25HZXREaW1lbnNpb25zKGZvcm1hdERlc2NyaXB0aW9uKTsKKyAgICBtX2J1ZmZlciA9IHNh
bXBsZTsKKyAgICBhdXRvIGRpbWVuc2lvbnMgPSByb3VuZGVkSW50U2l6ZShzYW1wbGUtPnByZXNl
bnRhdGlvblNpemUoKSk7CiAgICAgaWYgKG1fc2FtcGxlUm90YXRpb24gPT0gTWVkaWFTYW1wbGU6
OlZpZGVvUm90YXRpb246OkxlZnQgfHwgbV9zYW1wbGVSb3RhdGlvbiA9PSBNZWRpYVNhbXBsZTo6
VmlkZW9Sb3RhdGlvbjo6UmlnaHQpCi0gICAgICAgIHN0ZDo6c3dhcChkaW1lbnNpb25zLndpZHRo
LCBkaW1lbnNpb25zLmhlaWdodCk7CisgICAgICAgIGRpbWVuc2lvbnMgPSB7IGRpbWVuc2lvbnMu
aGVpZ2h0KCksIGRpbWVuc2lvbnMud2lkdGgoKSB9OwogCi0gICAgaWYgKGRpbWVuc2lvbnMud2lk
dGggIT0gbV93aWR0aCB8fCBkaW1lbnNpb25zLmhlaWdodCAhPSBtX2hlaWdodCkgewotICAgICAg
ICBtX3dpZHRoID0gZGltZW5zaW9ucy53aWR0aDsKLSAgICAgICAgbV9oZWlnaHQgPSBkaW1lbnNp
b25zLmhlaWdodDsKLSAgICAgICAgc2V0U2l6ZSh7IGRpbWVuc2lvbnMud2lkdGgsIGRpbWVuc2lv
bnMuaGVpZ2h0IH0pOworICAgIGlmIChkaW1lbnNpb25zLndpZHRoKCkgIT0gbV93aWR0aCB8fCBk
aW1lbnNpb25zLmhlaWdodCgpICE9IG1faGVpZ2h0KSB7CisgICAgICAgIG1fd2lkdGggPSBkaW1l
bnNpb25zLndpZHRoKCk7CisgICAgICAgIG1faGVpZ2h0ID0gZGltZW5zaW9ucy5oZWlnaHQoKTsK
KyAgICAgICAgc2V0U2l6ZShkaW1lbnNpb25zKTsKICAgICB9CiAKLSAgICB2aWRlb1NhbXBsZUF2
YWlsYWJsZShNZWRpYVNhbXBsZUFWRk9iakM6OmNyZWF0ZShtX2J1ZmZlci5nZXQoKSwgbV9zYW1w
bGVSb3RhdGlvbiwgW2Nvbm5lY3Rpb24gaXNWaWRlb01pcnJvcmVkXSkpOworICAgIGRpc3BhdGNo
TWVkaWFTYW1wbGVUb09ic2VydmVycygqc2FtcGxlKTsKIH0KIAogdm9pZCBBVlZpZGVvQ2FwdHVy
ZVNvdXJjZTo6Y2FwdHVyZU91dHB1dERpZE91dHB1dFNhbXBsZUJ1ZmZlckZyb21Db25uZWN0aW9u
KEFWQ2FwdHVyZU91dHB1dFR5cGUqLCBDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGVCdWZmZXIsIEFW
Q2FwdHVyZUNvbm5lY3Rpb25UeXBlKiBjYXB0dXJlQ29ubmVjdGlvbikKQEAgLTU0OSwyNCArNTQ1
LDI0IEBAIHZvaWQgQVZWaWRlb0NhcHR1cmVTb3VyY2U6OmNhcHR1cmVPdXRwdXREaWRPdXRwdXRT
YW1wbGVCdWZmZXJGcm9tQ29ubmVjdGlvbihBVkNhCiAgICAgICAgIHJldHVybjsKIAogICAgIENN
VmlkZW9EaW1lbnNpb25zIGRpbWVuc2lvbnMgPSBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25HZXRE
aW1lbnNpb25zKGZvcm1hdERlc2NyaXB0aW9uKTsKKyAgICBSZWZQdHI8TWVkaWFTYW1wbGU+IHNh
bXBsZTsKICAgICBpZiAoZGltZW5zaW9ucy53aWR0aCAhPSBtX3JlcXVlc3RlZFNpemUud2lkdGgo
KSB8fCBkaW1lbnNpb25zLmhlaWdodCAhPSBtX3JlcXVlc3RlZFNpemUuaGVpZ2h0KCkpIHsKLSAg
ICAgICAgaWYgKG1fcGl4ZWxCdWZmZXJSZXNpemVyICYmICFtX3BpeGVsQnVmZmVyUmVzaXplci0+
Y2FuUmVzaXplVG8obV9yZXF1ZXN0ZWRTaXplKSkKLSAgICAgICAgICAgIG1fcGl4ZWxCdWZmZXJS
ZXNpemVyID0gbnVsbHB0cjsKIAotICAgICAgICBpZiAoIW1fcGl4ZWxCdWZmZXJSZXNpemVyKQot
ICAgICAgICAgICAgbV9waXhlbEJ1ZmZlclJlc2l6ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFBpeGVs
QnVmZmVyUmVzaXplcj4obV9yZXF1ZXN0ZWRTaXplLCBhdlZpZGVvQ2FwdHVyZVBpeGVsQnVmZmVy
Rm9ybWF0KCkpOwotICAgIH0gZWxzZQotICAgICAgICBtX3BpeGVsQnVmZmVyUmVzaXplciA9IG51
bGxwdHI7CisgICAgICAgIGlmICghbV9pbWFnZVRyYW5zZmVyU2Vzc2lvbikKKyAgICAgICAgICAg
IG1faW1hZ2VUcmFuc2ZlclNlc3Npb24gPSBJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVhdGUo
YXZWaWRlb0NhcHR1cmVQaXhlbEJ1ZmZlckZvcm1hdCgpKTsKIAotICAgIGF1dG8gYnVmZmVyID0g
cmV0YWluUHRyKHNhbXBsZUJ1ZmZlcik7Ci0gICAgaWYgKG1fcGl4ZWxCdWZmZXJSZXNpemVyKSB7
Ci0gICAgICAgIGJ1ZmZlciA9IG1fcGl4ZWxCdWZmZXJSZXNpemVyLT5yZXNpemUoc2FtcGxlQnVm
ZmVyKTsKLSAgICAgICAgaWYgKCFidWZmZXIpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQor
ICAgICAgICBpZiAobV9pbWFnZVRyYW5zZmVyU2Vzc2lvbikgeworICAgICAgICAgICAgc2FtcGxl
ID0gbV9pbWFnZVRyYW5zZmVyU2Vzc2lvbi0+Y3JlYXRlTWVkaWFTYW1wbGUoc2FtcGxlQnVmZmVy
LCBtX3JlcXVlc3RlZFNpemUsIG1fc2FtcGxlUm90YXRpb24sIFtjYXB0dXJlQ29ubmVjdGlvbiBp
c1ZpZGVvTWlycm9yZWRdKTsKKyAgICAgICAgICAgIGlmICghc2FtcGxlKSB7CisgICAgICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIHNhbXBsZSA9IE1lZGlh
U2FtcGxlQVZGT2JqQzo6Y3JlYXRlKHNhbXBsZUJ1ZmZlciwgbV9zYW1wbGVSb3RhdGlvbiwgW2Nh
cHR1cmVDb25uZWN0aW9uIGlzVmlkZW9NaXJyb3JlZF0pOwogCi0gICAgc2NoZWR1bGVEZWZlcnJl
ZFRhc2soW3RoaXMsIGJ1ZmZlciwgY29ubmVjdGlvbiA9IHJldGFpblB0cihjYXB0dXJlQ29ubmVj
dGlvbildIHsKLSAgICAgICAgdGhpcy0+cHJvY2Vzc05ld0ZyYW1lKGJ1ZmZlciwgY29ubmVjdGlv
bik7CisgICAgc2NoZWR1bGVEZWZlcnJlZFRhc2soW3RoaXMsIHNhbXBsZSA9IFdURk1vdmUoc2Ft
cGxlKV0geworICAgICAgICBwcm9jZXNzTmV3RnJhbWUoc2FtcGxlKTsKICAgICB9KTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0Rpc3Bs
YXlDYXB0dXJlU291cmNlQ29jb2EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL0Rpc3BsYXlDYXB0dXJlU291cmNlQ29jb2EuY3BwCmluZGV4IDM3M2QwZjhhNTNh
NWU2YTZlYTRjN2U0YmRmOTc2ZDhlZGQ5NTQ0MWUuLjZhMDNkOGZmMWRlY2JlMTgxZDY4YTc4ZTQ3
MjE5NDI1Y2YzNGIwZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL21hYy9EaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYS5j
cHAKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVk
aWFTYW1wbGVBVkZPYmpDLmgiCiAjaW5jbHVkZSAiUGl4ZWxCdWZmZXJDb25mb3JtZXJDVi5oIgot
I2luY2x1ZGUgIlBpeGVsQnVmZmVyUmVzaXplci5oIgogI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFT
b3VyY2UuaCIKICNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmgiCiAjaW5jbHVk
ZSAiUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzLmgiCkBAIC00Miw2ICs0MSw3IEBACiAjaW5j
bHVkZSA8cGFsL2F2Zm91bmRhdGlvbi9NZWRpYVRpbWVBVkZvdW5kYXRpb24uaD4KICNpbmNsdWRl
IDxwYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuaD4KICNpbmNsdWRlIDxwYWwvc3BpL2NmL0NvcmVB
dWRpb1NQSS5oPgorI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CiAjaW5j
bHVkZSA8c3lzL3RpbWUuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgpAQCAtNzIsNyArNzIsNyBAQCBjb25zdCBSZWFsdGltZU1l
ZGlhU291cmNlQ2FwYWJpbGl0aWVzJiBEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpjYXBhYmls
aXRpZXMoKQogICAgICAgICAvLyBGSVhNRTogd2hhdCBzaG91bGQgdGhlc2UgYmU/CiAgICAgICAg
IGNhcGFiaWxpdGllcy5zZXRXaWR0aChDYXBhYmlsaXR5VmFsdWVPclJhbmdlKDcyLCAyODgwKSk7
CiAgICAgICAgIGNhcGFiaWxpdGllcy5zZXRIZWlnaHQoQ2FwYWJpbGl0eVZhbHVlT3JSYW5nZSg0
NSwgMTgwMCkpOwotICAgICAgICBjYXBhYmlsaXRpZXMuc2V0RnJhbWVSYXRlKENhcGFiaWxpdHlW
YWx1ZU9yUmFuZ2UoLjAxLCA2MC4wKSk7CisgICAgICAgIGNhcGFiaWxpdGllcy5zZXRGcmFtZVJh
dGUoQ2FwYWJpbGl0eVZhbHVlT3JSYW5nZSguMDEsIDMwLjApKTsKIAogICAgICAgICBtX2NhcGFi
aWxpdGllcyA9IFdURk1vdmUoY2FwYWJpbGl0aWVzKTsKICAgICB9CkBAIC0xMTEsMTAgKzExMSw4
IEBAIHZvaWQgRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6c2V0dGluZ3NEaWRDaGFuZ2UoT3B0
aW9uU2V0PFJlYWx0aW1lTWVkaWFTb3VyY2VTCiAgICAgaWYgKHNldHRpbmdzLmNvbnRhaW5zKFJl
YWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RmxhZzo6RnJhbWVSYXRlKSAmJiBtX3RpbWVyLmlz
QWN0aXZlKCkpCiAgICAgICAgIG1fdGltZXIuc3RhcnRSZXBlYXRpbmcoMV9zIC8gZnJhbWVSYXRl
KCkpOwogCi0gICAgaWYgKHNldHRpbmdzLmNvbnRhaW5zQW55KHsgUmVhbHRpbWVNZWRpYVNvdXJj
ZVNldHRpbmdzOjpGbGFnOjpXaWR0aCwgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpGbGFn
OjpIZWlnaHQgfSkpIHsKKyAgICBpZiAoc2V0dGluZ3MuY29udGFpbnNBbnkoeyBSZWFsdGltZU1l
ZGlhU291cmNlU2V0dGluZ3M6OkZsYWc6OldpZHRoLCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGlu
Z3M6OkZsYWc6OkhlaWdodCB9KSkKICAgICAgICAgbV9idWZmZXJBdHRyaWJ1dGVzID0gbnVsbHB0
cjsKLSAgICAgICAgbV9sYXN0U2FtcGxlQnVmZmVyID0gbnVsbHB0cjsKLSAgICB9CiAKICAgICBt
X2N1cnJlbnRTZXR0aW5ncyA9IHsgfTsKIH0KQEAgLTE1OSw3ICsxNTcsOCBAQCB2b2lkIERpc3Bs
YXlDYXB0dXJlU291cmNlQ29jb2E6OnNldEludHJpbnNpY1NpemUoY29uc3QgSW50U2l6ZSYgc2l6
ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9pbnRyaW5zaWNTaXplID0gc2l6ZTsKLSAgICBt
X2xhc3RTYW1wbGVCdWZmZXIgPSBudWxscHRyOworICAgIG5vdGlmeVNldHRpbmdzRGlkQ2hhbmdl
T2JzZXJ2ZXJzKHsgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpGbGFnOjpXaWR0aCwgUmVh
bHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpGbGFnOjpIZWlnaHQgfSk7CisKIH0KIAogdm9pZCBE
aXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjplbWl0RnJhbWUoKQpAQCAtMTY3LDEyNCArMTY2LDQw
IEBAIHZvaWQgRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6ZW1pdEZyYW1lKCkKICAgICBpZiAo
bXV0ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBwaXhlbEJ1ZmZlciA9IGdlbmVy
YXRlRnJhbWUoKTsKLSAgICBpZiAoIXBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAobV9sYXN0U2FtcGxlQnVmZmVyICYmIG1fbGFzdEZ1bGxTaXplZFBpeGVsQnVmZmVyICYm
IENGRXF1YWwobV9sYXN0RnVsbFNpemVkUGl4ZWxCdWZmZXIuZ2V0KCksIHBpeGVsQnVmZmVyLmdl
dCgpKSkgewotICAgICAgICB2aWRlb1NhbXBsZUF2YWlsYWJsZShNZWRpYVNhbXBsZUFWRk9iakM6
OmNyZWF0ZShtX2xhc3RTYW1wbGVCdWZmZXIuZ2V0KCkpKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIG1fbGFzdEZ1bGxTaXplZFBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXI7Ci0KLSAg
ICBpbnQgd2lkdGggPSBXVEY6OnNhZmVDYXN0PGludD4oQ1ZQaXhlbEJ1ZmZlckdldFdpZHRoKHBp
eGVsQnVmZmVyLmdldCgpKSk7Ci0gICAgaW50IGhlaWdodCA9IFdURjo6c2FmZUNhc3Q8aW50PihD
VlBpeGVsQnVmZmVyR2V0SGVpZ2h0KHBpeGVsQnVmZmVyLmdldCgpKSk7Ci0gICAgYXV0byByZXF1
ZXN0ZWRTaXplID0gZnJhbWVTaXplKCk7Ci0gICAgaWYgKHdpZHRoICE9IHJlcXVlc3RlZFNpemUu
d2lkdGgoKSB8fCBoZWlnaHQgIT0gcmVxdWVzdGVkU2l6ZS5oZWlnaHQoKSkgewotICAgICAgICBp
ZiAobV9waXhlbEJ1ZmZlclJlc2l6ZXIgJiYgIW1fcGl4ZWxCdWZmZXJSZXNpemVyLT5jYW5SZXNp
emVUbyhyZXF1ZXN0ZWRTaXplKSkKLSAgICAgICAgICAgIG1fcGl4ZWxCdWZmZXJSZXNpemVyID0g
bnVsbHB0cjsKLQotICAgICAgICBpZiAoIW1fcGl4ZWxCdWZmZXJSZXNpemVyKQotICAgICAgICAg
ICAgbV9waXhlbEJ1ZmZlclJlc2l6ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFBpeGVsQnVmZmVyUmVz
aXplcj4ocmVxdWVzdGVkU2l6ZSwgcHJlZmVyZWRQaXhlbEJ1ZmZlckZvcm1hdCgpKTsKLQotICAg
ICAgICBwaXhlbEJ1ZmZlciA9IG1fcGl4ZWxCdWZmZXJSZXNpemVyLT5yZXNpemUocGl4ZWxCdWZm
ZXIuZ2V0KCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fcGl4ZWxCdWZmZXJSZXNpemVyID0g
bnVsbHB0cjsKLQotICAgICAgICBhdXRvIHBpeGVsRm9ybWF0VHlwZSA9IENWUGl4ZWxCdWZmZXJH
ZXRQaXhlbEZvcm1hdFR5cGUocGl4ZWxCdWZmZXIuZ2V0KCkpOwotICAgICAgICBpZiAocGl4ZWxG
b3JtYXRUeXBlICE9IHByZWZlcmVkUGl4ZWxCdWZmZXJGb3JtYXQoKSkgewotICAgICAgICAgICAg
aWYgKCFtX3BpeGVsQnVmZmVyQ29uZm9ybWVyKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBwcmVm
ZXJyZWRGcm9tYXQgPSBwcmVmZXJlZFBpeGVsQnVmZmVyRm9ybWF0KCk7Ci0gICAgICAgICAgICAg
ICAgYXV0byBjb25mb3JtZXJBdHRyaWJ1dGVzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGVN
dXRhYmxlKG51bGxwdHIsIDAsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5
cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKLSAgICAgICAgICAgICAgICBhdXRvIHZpZGVv
VHlwZSA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUobnVsbHB0ciwgIGtDRk51bWJlclNJbnQzMlR5
cGUsICAmcHJlZmVycmVkRnJvbWF0KSk7Ci0gICAgICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0
VmFsdWUoY29uZm9ybWVyQXR0cmlidXRlcy5nZXQoKSwga0NWUGl4ZWxCdWZmZXJQaXhlbEZvcm1h
dFR5cGVLZXksIHZpZGVvVHlwZS5nZXQoKSk7Ci0KLSAgICAgICAgICAgICAgICBtX3BpeGVsQnVm
ZmVyQ29uZm9ybWVyID0gc3RkOjptYWtlX3VuaXF1ZTxQaXhlbEJ1ZmZlckNvbmZvcm1lckNWPihj
b25mb3JtZXJBdHRyaWJ1dGVzLmdldCgpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
cGl4ZWxCdWZmZXIgPSBtX3BpeGVsQnVmZmVyQ29uZm9ybWVyLT5jb252ZXJ0KHBpeGVsQnVmZmVy
LmdldCgpKTsKKyAgICBpZiAoIW1faW1hZ2VUcmFuc2ZlclNlc3Npb24pCisgICAgICAgIG1faW1h
Z2VUcmFuc2ZlclNlc3Npb24gPSBJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVhdGUocHJlZmVy
ZWRQaXhlbEJ1ZmZlckZvcm1hdCgpKTsKKworICAgIGF1dG8gc2FtcGxlVGltZSA9IE1lZGlhVGlt
ZTo6Y3JlYXRlV2l0aERvdWJsZSgoZWxhcHNlZFRpbWUoKSArIDEwMF9tcykuc2Vjb25kcygpKTsK
KyAgICBhdXRvIGZyYW1lID0gZ2VuZXJhdGVGcmFtZSgpOworICAgIEludFNpemUgaW1hZ2VTaXpl
OworICAgIFJlZlB0cjxNZWRpYVNhbXBsZT4gc2FtcGxlID0gV1RGOjpzd2l0Y2hPbihmcmFtZSwK
KyAgICAgICAgW3RoaXMsIHNhbXBsZVRpbWUsICZpbWFnZVNpemVdKFJldGFpblB0cjxDR0ltYWdl
UmVmPiBpbWFnZSkgLT4gUmVmUHRyPE1lZGlhU2FtcGxlPiB7CisgICAgICAgICAgICBpZiAoIWlt
YWdlKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgICAgICBpbWFn
ZVNpemUgPSBJbnRTaXplKENHSW1hZ2VHZXRXaWR0aChpbWFnZS5nZXQoKSksIENHSW1hZ2VHZXRI
ZWlnaHQoaW1hZ2UuZ2V0KCkpKTsKKyAgICAgICAgICAgIHJldHVybiBtX2ltYWdlVHJhbnNmZXJT
ZXNzaW9uLT5jcmVhdGVNZWRpYVNhbXBsZShpbWFnZS5nZXQoKSwgc2FtcGxlVGltZSwgaW1hZ2VT
aXplKTsKKyAgICAgICAgfSwKKyAgICAgICAgW3RoaXMsIHNhbXBsZVRpbWUsICZpbWFnZVNpemVd
KFJldGFpblB0cjxJT1N1cmZhY2VSZWY+IHN1cmZhY2UpIC0+IFJlZlB0cjxNZWRpYVNhbXBsZT4g
eworICAgICAgICAgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgICAgICAgICBpbWFnZVNpemUgPSBJbnRTaXplKElPU3VyZmFjZUdldFdpZHRo
KHN1cmZhY2UuZ2V0KCkpLCBJT1N1cmZhY2VHZXRIZWlnaHQoc3VyZmFjZS5nZXQoKSkpOworICAg
ICAgICAgICAgcmV0dXJuIG1faW1hZ2VUcmFuc2ZlclNlc3Npb24tPmNyZWF0ZU1lZGlhU2FtcGxl
KHN1cmZhY2UuZ2V0KCksIHNhbXBsZVRpbWUsIGltYWdlU2l6ZSk7CiAgICAgICAgIH0KLSAgICB9
Ci0gICAgaWYgKCFwaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9sYXN0U2Ft
cGxlQnVmZmVyID0gc2FtcGxlQnVmZmVyRnJvbVBpeGVsQnVmZmVyKHBpeGVsQnVmZmVyLmdldCgp
KTsKLSAgICBpZiAoIW1fbGFzdFNhbXBsZUJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
dmlkZW9TYW1wbGVBdmFpbGFibGUoTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVhdGUobV9sYXN0U2Ft
cGxlQnVmZmVyLmdldCgpKSk7Ci19Ci0KLVJldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4gRGlz
cGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6c2FtcGxlQnVmZmVyRnJvbVBpeGVsQnVmZmVyKENWUGl4
ZWxCdWZmZXJSZWYgcGl4ZWxCdWZmZXIpCi17Ci0gICAgaWYgKCFwaXhlbEJ1ZmZlcikKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDTVRpbWUgc2FtcGxlVGltZSA9IENNVGltZU1ha2Uo
KChlbGFwc2VkVGltZSgpICsgMTAwX21zKSAqIDEwMCkuc2Vjb25kcygpLCAxMDApOwotICAgIENN
U2FtcGxlVGltaW5nSW5mbyB0aW1pbmdJbmZvID0geyBrQ01UaW1lSW52YWxpZCwgc2FtcGxlVGlt
ZSwgc2FtcGxlVGltZSB9OwotCi0gICAgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uUmVmIGZvcm1h
dERlc2NyaXB0aW9uID0gbnVsbHB0cjsKLSAgICBhdXRvIHN0YXR1cyA9IENNVmlkZW9Gb3JtYXRE
ZXNjcmlwdGlvbkNyZWF0ZUZvckltYWdlQnVmZmVyKGtDRkFsbG9jYXRvckRlZmF1bHQsIChDVklt
YWdlQnVmZmVyUmVmKXBpeGVsQnVmZmVyLCAmZm9ybWF0RGVzY3JpcHRpb24pOwotICAgIGlmIChz
dGF0dXMpIHsKLSAgICAgICAgUkVMRUFTRV9MT0coTWVkaWEsICJGYWlsZWQgdG8gaW5pdGlhbGl6
ZSBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb24gd2l0aCBlcnJvciBjb2RlOiAlZCIsIHN0YXRpY19j
YXN0PGludD4oc3RhdHVzKSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAg
IENNU2FtcGxlQnVmZmVyUmVmIHNhbXBsZUJ1ZmZlcjsKLSAgICBzdGF0dXMgPSBDTVNhbXBsZUJ1
ZmZlckNyZWF0ZVJlYWR5V2l0aEltYWdlQnVmZmVyKGtDRkFsbG9jYXRvckRlZmF1bHQsIChDVklt
YWdlQnVmZmVyUmVmKXBpeGVsQnVmZmVyLCBmb3JtYXREZXNjcmlwdGlvbiwgJnRpbWluZ0luZm8s
ICZzYW1wbGVCdWZmZXIpOwotICAgIENGUmVsZWFzZShmb3JtYXREZXNjcmlwdGlvbik7Ci0gICAg
aWYgKHN0YXR1cykgewotICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIkZhaWxlZCB0byBpbml0
aWFsaXplIENNU2FtcGxlQnVmZmVyIHdpdGggZXJyb3IgY29kZTogJWQiLCBzdGF0aWNfY2FzdDxp
bnQ+KHN0YXR1cykpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICByZXR1
cm4gYWRvcHRDRihzYW1wbGVCdWZmZXIpOwotfQorICAgICk7CiAKLSNpZiBIQVZFKElPU1VSRkFD
RSkgJiYgUExBVEZPUk0oTUFDKQotc3RhdGljIGludDMyX3Qgcm91bmRVcFRvTWFjcm9ibG9ja011
bHRpcGxlKGludDMyX3Qgc2l6ZSkKLXsKLSAgICByZXR1cm4gKHNpemUgKyAxNSkgJiB+MTU7Ci19
CiAKLVJldGFpblB0cjxDVlBpeGVsQnVmZmVyUmVmPiBEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29h
OjpwaXhlbEJ1ZmZlckZyb21JT1N1cmZhY2UoSU9TdXJmYWNlUmVmIHN1cmZhY2UpCi17Ci0gICAg
aWYgKCFtX2J1ZmZlckF0dHJpYnV0ZXMpIHsKLSAgICAgICAgbV9idWZmZXJBdHRyaWJ1dGVzID0g
YWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKG51bGxwdHIsIDAsICZrQ0ZUeXBlRGlj
dGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsK
LQotICAgICAgICBhdXRvIGZvcm1hdCA9IElPU3VyZmFjZUdldFBpeGVsRm9ybWF0KHN1cmZhY2Up
OwotICAgICAgICBpZiAoZm9ybWF0ID09IGtDVlBpeGVsRm9ybWF0VHlwZV80MjBZcENiQ3I4QmlQ
bGFuYXJWaWRlb1JhbmdlIHx8IGZvcm1hdCA9PSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNy
OEJpUGxhbmFyRnVsbFJhbmdlKSB7Ci0KLSAgICAgICAgICAgIC8vIElmIHRoZSB3aWR0aCB4IGhl
aWdodCBpc24ndCBhIG11bHRpcGxlIG9mIDE2IHggMTYgYW5kIHRoZSBzdXJmYWNlIGhhcyBleHRy
YSBtZW1vcnkgaW4gdGhlIHBsYW5lcywgc2V0IHBpeGVsIGJ1ZmZlciBhdHRyaWJ1dGVzIHRvIHJl
ZmxlY3QgaXQuCi0gICAgICAgICAgICBhdXRvIHdpZHRoID0gSU9TdXJmYWNlR2V0V2lkdGgoc3Vy
ZmFjZSk7Ci0gICAgICAgICAgICBhdXRvIGhlaWdodCA9IElPU3VyZmFjZUdldEhlaWdodChzdXJm
YWNlKTsKLSAgICAgICAgICAgIGludDMyX3QgZXh0ZW5kZWRSaWdodCA9IHJvdW5kVXBUb01hY3Jv
YmxvY2tNdWx0aXBsZSh3aWR0aCkgLSB3aWR0aDsKLSAgICAgICAgICAgIGludDMyX3QgZXh0ZW5k
ZWRCb3R0b20gPSByb3VuZFVwVG9NYWNyb2Jsb2NrTXVsdGlwbGUoaGVpZ2h0KSAtIGhlaWdodDsK
LQotICAgICAgICAgICAgaWYgKChJT1N1cmZhY2VHZXRCeXRlc1BlclJvd09mUGxhbmUoc3VyZmFj
ZSwgMCkgPj0gd2lkdGggKyBleHRlbmRlZFJpZ2h0KQotICAgICAgICAgICAgICAgICYmIChJT1N1
cmZhY2VHZXRCeXRlc1BlclJvd09mUGxhbmUoc3VyZmFjZSwgMSkgPj0gd2lkdGggKyBleHRlbmRl
ZFJpZ2h0KQotICAgICAgICAgICAgICAgICYmIChJT1N1cmZhY2VHZXRBbGxvY1NpemUoc3VyZmFj
ZSkgPj0gKGhlaWdodCArIGV4dGVuZGVkQm90dG9tKSAqIElPU3VyZmFjZUdldEJ5dGVzUGVyUm93
T2ZQbGFuZShzdXJmYWNlLCAwKSAqIDMgLyAyKSkgewotICAgICAgICAgICAgICAgIGF1dG8gY2ZJ
bnQgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKG51bGxwdHIsICBrQ0ZOdW1iZXJJbnRUeXBlLCAg
JmV4dGVuZGVkUmlnaHQpKTsKLSAgICAgICAgICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZSht
X2J1ZmZlckF0dHJpYnV0ZXMuZ2V0KCksIGtDVlBpeGVsQnVmZmVyRXh0ZW5kZWRQaXhlbHNSaWdo
dEtleSwgY2ZJbnQuZ2V0KCkpOwotICAgICAgICAgICAgICAgIGNmSW50ID0gYWRvcHRDRihDRk51
bWJlckNyZWF0ZShudWxscHRyLCAga0NGTnVtYmVySW50VHlwZSwgICZleHRlbmRlZEJvdHRvbSkp
OwotICAgICAgICAgICAgICAgIENGRGljdGlvbmFyeVNldFZhbHVlKG1fYnVmZmVyQXR0cmlidXRl
cy5nZXQoKSwga0NWUGl4ZWxCdWZmZXJFeHRlbmRlZFBpeGVsc0JvdHRvbUtleSwgY2ZJbnQuZ2V0
KCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0
VmFsdWUobV9idWZmZXJBdHRyaWJ1dGVzLmdldCgpLCBrQ1ZQaXhlbEJ1ZmZlck9wZW5HTENvbXBh
dGliaWxpdHlLZXksIGtDRkJvb2xlYW5UcnVlKTsKKyAgICBpZiAoIXNhbXBsZSkgeworICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIENW
UGl4ZWxCdWZmZXJSZWYgcGl4ZWxCdWZmZXI7Ci0gICAgYXV0byBzdGF0dXMgPSBDVlBpeGVsQnVm
ZmVyQ3JlYXRlV2l0aElPU3VyZmFjZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBzdXJmYWNlLCBtX2J1
ZmZlckF0dHJpYnV0ZXMuZ2V0KCksICZwaXhlbEJ1ZmZlcik7Ci0gICAgaWYgKHN0YXR1cykgewot
ICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIkNWUGl4ZWxCdWZmZXJDcmVhdGVXaXRoSU9TdXJm
YWNlIGZhaWxlZCB3aXRoIGVycm9yIGNvZGU6ICVkIiwgc3RhdGljX2Nhc3Q8aW50PihzdGF0dXMp
KTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQorICAgIGlmIChtX2ludHJpbnNpY1Np
emUgIT0gaW1hZ2VTaXplKQorICAgICAgICBzZXRJbnRyaW5zaWNTaXplKGltYWdlU2l6ZSk7CiAK
LSAgICByZXR1cm4gYWRvcHRDRihwaXhlbEJ1ZmZlcik7CisgICAgdmlkZW9TYW1wbGVBdmFpbGFi
bGUoKnNhbXBsZS5nZXQoKSk7CiB9Ci0jZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvRGlz
cGxheUNhcHR1cmVTb3VyY2VDb2NvYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL0Rpc3BsYXlDYXB0dXJlU291cmNlQ29jb2EuaAppbmRleCBiZmU0MGI4NjA1ODFm
MWNkYjkzMWIzNWNiZjQ3ZmYwNzJjM2JhYWE1Li45YzA5ZWM4ZDMyMTQwMjRkNGU2YjY3ZDJiZjAy
MmZkZDAzNGYzNWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9EaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hLmgKQEAg
LTI4LDEyICsyOCwxNCBAQAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAKICNpbmNsdWRlICJD
YXB0dXJlRGV2aWNlLmgiCisjaW5jbHVkZSAiSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5oIgogI2lu
Y2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2UuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCit0eXBlZGVmIHN0cnVjdCBDR0ltYWdlICpD
R0ltYWdlUmVmOwogdHlwZWRlZiBzdHJ1Y3QgX19DVkJ1ZmZlciAqQ1ZQaXhlbEJ1ZmZlclJlZjsK
IHR5cGVkZWYgc3RydWN0IF9fSU9TdXJmYWNlICpJT1N1cmZhY2VSZWY7CiAKQEAgLTQ0LDggKzQ2
LDggQEAgY2xhc3MgTWVkaWFUaW1lOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDYXB0
dXJlRGV2aWNlSW5mbzsKK2NsYXNzIEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ7CiBjbGFzcyBQaXhl
bEJ1ZmZlckNvbmZvcm1lckNWOwotY2xhc3MgUGl4ZWxCdWZmZXJSZXNpemVyOwogCiBjbGFzcyBE
aXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hIDogcHVibGljIFJlYWx0aW1lTWVkaWFTb3VyY2Ugewog
cHVibGljOgpAQCAtNTQsNyArNTYsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgRGlzcGxheUNhcHR1cmVT
b3VyY2VDb2NvYShTdHJpbmcmJiBuYW1lKTsKICAgICB2aXJ0dWFsIH5EaXNwbGF5Q2FwdHVyZVNv
dXJjZUNvY29hKCk7CiAKLSAgICB2aXJ0dWFsIFJldGFpblB0cjxDVlBpeGVsQnVmZmVyUmVmPiBn
ZW5lcmF0ZUZyYW1lKCkgPSAwOworICAgIHVzaW5nIERpc3BsYXlGcmFtZVR5cGUgPSBXVEY6OlZh
cmlhbnQ8UmV0YWluUHRyPENHSW1hZ2VSZWY+LCBSZXRhaW5QdHI8SU9TdXJmYWNlUmVmPj47Cisg
ICAgdmlydHVhbCBEaXNwbGF5RnJhbWVUeXBlIGdlbmVyYXRlRnJhbWUoKSA9IDA7CisKICAgICB2
aXJ0dWFsIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RGlzcGxheVN1cmZhY2VUeXBlIHN1
cmZhY2VUeXBlKCkgY29uc3QgPSAwOwogCiAgICAgdm9pZCBzdGFydFByb2R1Y2luZ0RhdGEoKSBv
dmVycmlkZTsKQEAgLTYyLDExICs2Niw2IEBAIHByb3RlY3RlZDoKIAogICAgIFNlY29uZHMgZWxh
cHNlZFRpbWUoKTsKIAotICAgIFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4gc2FtcGxlQnVm
ZmVyRnJvbVBpeGVsQnVmZmVyKENWUGl4ZWxCdWZmZXJSZWYpOwotI2lmIEhBVkUoSU9TVVJGQUNF
KQotICAgIFJldGFpblB0cjxDVlBpeGVsQnVmZmVyUmVmPiBwaXhlbEJ1ZmZlckZyb21JT1N1cmZh
Y2UoSU9TdXJmYWNlUmVmKTsKLSNlbmRpZgotCiAgICAgdm9pZCBzZXR0aW5nc0RpZENoYW5nZShP
cHRpb25TZXQ8UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpGbGFnPikgb3ZlcnJpZGU7CiAK
ICAgICBjb25zdCBJbnRTaXplJiBpbnRyaW5zaWNTaXplKCkgY29uc3QgeyByZXR1cm4gbV9pbnRy
aW5zaWNTaXplOyB9CkBAIC05MywxMCArOTIsNyBAQCBwcml2YXRlOgogICAgIFJldGFpblB0cjxD
Rk11dGFibGVEaWN0aW9uYXJ5UmVmPiBtX2J1ZmZlckF0dHJpYnV0ZXM7CiAgICAgUnVuTG9vcDo6
VGltZXI8RGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYT4gbV90aW1lcjsKIAotICAgIHN0ZDo6dW5p
cXVlX3B0cjxQaXhlbEJ1ZmZlclJlc2l6ZXI+IG1fcGl4ZWxCdWZmZXJSZXNpemVyOwotICAgIHN0
ZDo6dW5pcXVlX3B0cjxQaXhlbEJ1ZmZlckNvbmZvcm1lckNWPiBtX3BpeGVsQnVmZmVyQ29uZm9y
bWVyOwotICAgIFJldGFpblB0cjxDVlBpeGVsQnVmZmVyUmVmPiBtX2xhc3RGdWxsU2l6ZWRQaXhl
bEJ1ZmZlcjsKLSAgICBSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+IG1fbGFzdFNhbXBsZUJ1
ZmZlcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VUcmFuc2ZlclNlc3Npb25WVD4gbV9pbWFn
ZVRyYW5zZmVyU2Vzc2lvbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVW
aWRlb1NvdXJjZU1hYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L01vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLmgKaW5kZXggOWM3NGRkZTE4MzFlNDcxYTEwNzYw
MWIwM2U2NjU0N2M3NjlhMDhlYS4uZThiZTgyZjY4ZjdjNjkxMTUyMTg4OTFjZDQ0Njk4M2RmNjk2
MjZiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L01vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL01vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLmgKQEAgLTQzLDcg
KzQzLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgX19DVlBpeGVsQnVmZmVyUG9vbCAqQ1ZQaXhlbEJ1ZmZl
clBvb2xSZWY7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgUGl4ZWxCdWZmZXJSZXNp
emVyOworY2xhc3MgSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDsKIAogY2xhc3MgTW9ja1JlYWx0aW1l
VmlkZW9Tb3VyY2VNYWMgZmluYWwgOiBwdWJsaWMgTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UsIHBy
aXZhdGUgT3JpZW50YXRpb25Ob3RpZmllcjo6T2JzZXJ2ZXIgewogcHVibGljOgpAQCAtNTMsMTQg
KzUzLDEwIEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIE1vY2tSZWFsdGltZVZpZGVvU291
cmNlOwogICAgIE1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjKFN0cmluZyYmIGRldmljZUlELCBT
dHJpbmcmJiBuYW1lLCBTdHJpbmcmJiBoYXNoU2FsdCk7CiAKLSAgICBSZXRhaW5QdHI8Q01TYW1w
bGVCdWZmZXJSZWY+IENNU2FtcGxlQnVmZmVyRnJvbVBpeGVsQnVmZmVyKENWUGl4ZWxCdWZmZXJS
ZWYpOwotICAgIFJldGFpblB0cjxDVlBpeGVsQnVmZmVyUmVmPiBwaXhlbEJ1ZmZlckZyb21DR0lt
YWdlKENHSW1hZ2VSZWYpIGNvbnN0OwotCiAgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXll
cigpIGNvbnN0OwogICAgIHZvaWQgdXBkYXRlU2FtcGxlQnVmZmVyKCkgZmluYWw7CiAgICAgdm9p
ZCBzZXR0aW5nc0RpZENoYW5nZShPcHRpb25TZXQ8UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdz
OjpGbGFnPikgZmluYWw7CiAgICAgYm9vbCBjYW5SZXNpemVWaWRlb0ZyYW1lcygpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2b2lkIHNldFNpemVBbmRGcmFtZVJhdGVXaXRoUHJl
c2V0KEludFNpemUsIGRvdWJsZSwgUmVmUHRyPFZpZGVvUHJlc2V0PikgZmluYWw7CiAKICAgICB2
b2lkIG9yaWVudGF0aW9uQ2hhbmdlZChpbnQgb3JpZW50YXRpb24pIGZpbmFsOwogICAgIHZvaWQg
bW9uaXRvck9yaWVudGF0aW9uKE9yaWVudGF0aW9uTm90aWZpZXImKSBmaW5hbDsKQEAgLTY4LDcg
KzY0LDcgQEAgcHJpdmF0ZToKICAgICBtdXRhYmxlIFJldGFpblB0cjxDVlBpeGVsQnVmZmVyUG9v
bFJlZj4gbV9idWZmZXJQb29sOwogICAgIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uIG1fZGV2
aWNlT3JpZW50YXRpb24geyBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6Tm9uZSB9OwogICAg
IHN0ZDo6dW5pcXVlX3B0cjxQaXhlbEJ1ZmZlckNvbmZvcm1lckNWPiBtX3BpeGVsQnVmZmVyQ29u
Zm9ybWVyOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxQaXhlbEJ1ZmZlclJlc2l6ZXI+IG1fcGl4ZWxC
dWZmZXJSZXNpemVyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZVRyYW5zZmVyU2Vzc2lvblZU
PiBtX2ltYWdlVHJhbnNmZXJTZXNzaW9uOwogICAgIEludFNpemUgbV9wcmVzZXRTaXplOwogfTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01v
Y2tSZWFsdGltZVZpZGVvU291cmNlTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbWFjL01vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLm1tCmluZGV4IDIzYTE2OTYy
YjUzOTQxODRjNWY2NTRlOWVjNWUxZDFmZTkwY2QyOWEuLjcyNTlkYjFlODVkMGYyZGY2MWU0NGVi
ZjdlNWUzMDk0MTQ0ZmUzNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VN
YWMubW0KQEAgLTM0LDEwICszNCwxMCBAQAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAjaW1w
b3J0ICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2ltcG9ydCAiSW1hZ2VCdWZmZXIuaCIKKyNpbXBv
cnQgIkltYWdlVHJhbnNmZXJTZXNzaW9uVlQuaCIKICNpbXBvcnQgIk1lZGlhQ29uc3RyYWludHMu
aCIKICNpbXBvcnQgIk1lZGlhU2FtcGxlQVZGT2JqQy5oIgogI2ltcG9ydCAiTm90SW1wbGVtZW50
ZWQuaCIKLSNpbXBvcnQgIlBpeGVsQnVmZmVyUmVzaXplci5oIgogI2ltcG9ydCAiUGxhdGZvcm1M
YXllci5oIgogI2ltcG9ydCAiUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzLmgiCiAjaW1wb3J0
ICJSZWFsdGltZVZpZGVvVXRpbGl0aWVzLmgiCkBAIC01MSw4ICs1MSw2IEBACiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgUEFMOwogCi1zdGF0aWMgY29uc3QgaW50IHZpZGVv
U2FtcGxlUmF0ZSA9IDkwMDAwOwotCiBDYXB0dXJlU291cmNlT3JFcnJvciBNb2NrUmVhbHRpbWVW
aWRlb1NvdXJjZTo6Y3JlYXRlKFN0cmluZyYmIGRldmljZUlELCBTdHJpbmcmJiBuYW1lLCBTdHJp
bmcmJiBoYXNoU2FsdCwgY29uc3QgTWVkaWFDb25zdHJhaW50cyogY29uc3RyYWludHMpCiB7CiAj
aWZuZGVmIE5ERUJVRwpAQCAtNzUsOTggKzczLDI0IEBAIE1vY2tSZWFsdGltZVZpZGVvU291cmNl
TWFjOjpNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYyhTdHJpbmcmJiBkZXZpY2VJRCwgU3RyaW5n
CiB7CiB9CiAKLVJldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4gTW9ja1JlYWx0aW1lVmlkZW9T
b3VyY2VNYWM6OkNNU2FtcGxlQnVmZmVyRnJvbVBpeGVsQnVmZmVyKENWUGl4ZWxCdWZmZXJSZWYg
cGl4ZWxCdWZmZXIpCi17Ci0gICAgaWYgKCFwaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgCi0gICAgQ01UaW1lIHNhbXBsZVRpbWUgPSBDTVRpbWVNYWtlKCgoZWxhcHNl
ZFRpbWUoKSArIDEwMF9tcykgKiB2aWRlb1NhbXBsZVJhdGUpLnNlY29uZHMoKSwgdmlkZW9TYW1w
bGVSYXRlKTsKLSAgICBDTVNhbXBsZVRpbWluZ0luZm8gdGltaW5nSW5mbyA9IHsga0NNVGltZUlu
dmFsaWQsIHNhbXBsZVRpbWUsIHNhbXBsZVRpbWUgfTsKLQotICAgIENNVmlkZW9Gb3JtYXREZXNj
cmlwdGlvblJlZiBmb3JtYXREZXNjcmlwdGlvbiA9IG51bGxwdHI7Ci0gICAgT1NTdGF0dXMgc3Rh
dHVzID0gQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uQ3JlYXRlRm9ySW1hZ2VCdWZmZXIoa0NGQWxs
b2NhdG9yRGVmYXVsdCwgKENWSW1hZ2VCdWZmZXJSZWYpcGl4ZWxCdWZmZXIsICZmb3JtYXREZXNj
cmlwdGlvbik7Ci0gICAgaWYgKHN0YXR1cyAhPSBub0VycikgewotICAgICAgICBMT0dfRVJST1Io
IkZhaWxlZCB0byBpbml0aWFsaXplIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbiB3aXRoIGVycm9y
IGNvZGU6ICVkIiwgc3RhdHVzKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0g
ICAgQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlQnVmZmVyOwotICAgIHN0YXR1cyA9IENNU2FtcGxl
QnVmZmVyQ3JlYXRlUmVhZHlXaXRoSW1hZ2VCdWZmZXIoa0NGQWxsb2NhdG9yRGVmYXVsdCwgKENW
SW1hZ2VCdWZmZXJSZWYpcGl4ZWxCdWZmZXIsIGZvcm1hdERlc2NyaXB0aW9uLCAmdGltaW5nSW5m
bywgJnNhbXBsZUJ1ZmZlcik7Ci0gICAgQ0ZSZWxlYXNlKGZvcm1hdERlc2NyaXB0aW9uKTsKLSAg
ICBpZiAoc3RhdHVzICE9IG5vRXJyKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGlu
aXRpYWxpemUgQ01TYW1wbGVCdWZmZXIgd2l0aCBlcnJvciBjb2RlOiAlZCIsIHN0YXR1cyk7Ci0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIHJldHVybiBhZG9wdENGKHNhbXBs
ZUJ1ZmZlcik7Ci19Ci0KLVJldGFpblB0cjxDVlBpeGVsQnVmZmVyUmVmPiBNb2NrUmVhbHRpbWVW
aWRlb1NvdXJjZU1hYzo6cGl4ZWxCdWZmZXJGcm9tQ0dJbWFnZShDR0ltYWdlUmVmIGltYWdlKSBj
b25zdAotewotICAgIHN0YXRpYyBDR0NvbG9yU3BhY2VSZWYgc1JHQkNvbG9yU3BhY2UgPSBzUkdC
Q29sb3JTcGFjZVJlZigpOwotCi0gICAgQ0dTaXplIGltYWdlU2l6ZSA9IENHU2l6ZU1ha2UoQ0dJ
bWFnZUdldFdpZHRoKGltYWdlKSwgQ0dJbWFnZUdldEhlaWdodChpbWFnZSkpOwotICAgIGlmICgh
bV9idWZmZXJQb29sKSB7Ci0gICAgICAgIENWUGl4ZWxCdWZmZXJQb29sUmVmIGJ1ZmZlclBvb2w7
Ci0gICAgICAgIENGRGljdGlvbmFyeVJlZiBzb3VyY2VQaXhlbEJ1ZmZlck9wdGlvbnMgPSAoX19i
cmlkZ2UgQ0ZEaWN0aW9uYXJ5UmVmKSBAewotICAgICAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5n
ICopa0NWUGl4ZWxCdWZmZXJQaXhlbEZvcm1hdFR5cGVLZXkgOiBAKGtDVlBpeGVsRm9ybWF0VHlw
ZV8zMkFSR0IpLAotICAgICAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxCdWZm
ZXJXaWR0aEtleSA6IEAoaW1hZ2VTaXplLndpZHRoKSwKLSAgICAgICAgICAgIChfX2JyaWRnZSBO
U1N0cmluZyAqKWtDVlBpeGVsQnVmZmVySGVpZ2h0S2V5IDogQChpbWFnZVNpemUuaGVpZ2h0KSwK
LSNpZiBQTEFURk9STShJT1MpCi0gICAgICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ1ZQ
aXhlbEZvcm1hdE9wZW5HTEVTQ29tcGF0aWJpbGl0eSA6IEAoWUVTKSwKLSNlbHNlCi0gICAgICAg
ICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ1ZQaXhlbEJ1ZmZlck9wZW5HTENvbXBhdGliaWxp
dHlLZXkgOiBAKFlFUyksCi0jZW5kaWYKLSAgICAgICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAq
KWtDVlBpeGVsQnVmZmVySU9TdXJmYWNlUHJvcGVydGllc0tleSA6IEB7LyplbXB0eSBkaWN0aW9u
YXJ5Ki99Ci0gICAgICAgIH07Ci0KLSAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIHBpeGVsQnVmZmVy
UG9vbE9wdGlvbnMgPSAoX19icmlkZ2UgQ0ZEaWN0aW9uYXJ5UmVmKSBAewotICAgICAgICAgICAo
X19icmlkZ2UgTlNTdHJpbmcgKilrQ1ZQaXhlbEJ1ZmZlclBvb2xNaW5pbXVtQnVmZmVyQ291bnRL
ZXkgOiBAKDQpCi0gICAgICAgIH07Ci0KLSAgICAgICAgQ1ZSZXR1cm4gc3RhdHVzID0gQ1ZQaXhl
bEJ1ZmZlclBvb2xDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgcGl4ZWxCdWZmZXJQb29sT3B0
aW9ucywgc291cmNlUGl4ZWxCdWZmZXJPcHRpb25zLCAmYnVmZmVyUG9vbCk7Ci0gICAgICAgIGlm
IChzdGF0dXMgIT0ga0NWUmV0dXJuU3VjY2VzcykKLSAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgICAgIG1fYnVmZmVyUG9vbCA9IGFkb3B0Q0YoYnVmZmVyUG9vbCk7Ci0gICAgfQot
Ci0gICAgQ1ZQaXhlbEJ1ZmZlclJlZiBwaXhlbEJ1ZmZlcjsKLSAgICBDVlJldHVybiBzdGF0dXMg
PSBDVlBpeGVsQnVmZmVyUG9vbENyZWF0ZVBpeGVsQnVmZmVyKG51bGxwdHIsIG1fYnVmZmVyUG9v
bC5nZXQoKSwgJnBpeGVsQnVmZmVyKTsKLSAgICBpZiAoc3RhdHVzICE9IGtDVlJldHVyblN1Y2Nl
c3MpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQ1ZQaXhlbEJ1ZmZlckxvY2tCYXNl
QWRkcmVzcyhwaXhlbEJ1ZmZlciwgMCk7Ci0gICAgdm9pZCogZGF0YSA9IENWUGl4ZWxCdWZmZXJH
ZXRCYXNlQWRkcmVzcyhwaXhlbEJ1ZmZlcik7Ci0gICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihD
R0JpdG1hcENvbnRleHRDcmVhdGUoZGF0YSwgaW1hZ2VTaXplLndpZHRoLCBpbWFnZVNpemUuaGVp
Z2h0LCA4LCBDVlBpeGVsQnVmZmVyR2V0Qnl0ZXNQZXJSb3cocGl4ZWxCdWZmZXIpLCBzUkdCQ29s
b3JTcGFjZSwgKENHQml0bWFwSW5mbykga0NHSW1hZ2VBbHBoYU5vbmVTa2lwRmlyc3QpKTsKLSAg
ICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBDR0lt
YWdlR2V0V2lkdGgoaW1hZ2UpLCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKSksIGltYWdlKTsKLSAg
ICBDVlBpeGVsQnVmZmVyVW5sb2NrQmFzZUFkZHJlc3MocGl4ZWxCdWZmZXIsIDApOwotCi0gICAg
cmV0dXJuIGFkb3B0Q0YocGl4ZWxCdWZmZXIpOwotfQotCiB2b2lkIE1vY2tSZWFsdGltZVZpZGVv
U291cmNlTWFjOjp1cGRhdGVTYW1wbGVCdWZmZXIoKQogewogICAgIGF1dG8gaW1hZ2VCdWZmZXIg
PSB0aGlzLT5pbWFnZUJ1ZmZlcigpOwogICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlckZyb21DR0ltYWdlKGlt
YWdlQnVmZmVyLT5jb3B5SW1hZ2UoKS0+bmF0aXZlSW1hZ2UoKS5nZXQoKSk7Ci0gICAgaWYgKG1f
cGl4ZWxCdWZmZXJSZXNpemVyKQotICAgICAgICBwaXhlbEJ1ZmZlciA9IG1fcGl4ZWxCdWZmZXJS
ZXNpemVyLT5yZXNpemUocGl4ZWxCdWZmZXIuZ2V0KCkpOwotICAgIGVsc2UgewotICAgICAgICBp
ZiAoIW1fcGl4ZWxCdWZmZXJDb25mb3JtZXIpIHsKLSAgICAgICAgICAgIG1fcGl4ZWxCdWZmZXJD
b25mb3JtZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFBpeGVsQnVmZmVyQ29uZm9ybWVyQ1Y+KChfX2Jy
aWRnZSBDRkRpY3Rpb25hcnlSZWYpQHsKLSAgICAgICAgICAgICAgICAoX19icmlkZ2UgTlNTdHJp
bmcgKilrQ1ZQaXhlbEJ1ZmZlclBpeGVsRm9ybWF0VHlwZUtleTogQChwcmVmZXJlZFBpeGVsQnVm
ZmVyRm9ybWF0KCkpCi0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQotCi0gICAgICAgIHBpeGVs
QnVmZmVyID0gbV9waXhlbEJ1ZmZlckNvbmZvcm1lci0+Y29udmVydChwaXhlbEJ1ZmZlci5nZXQo
KSk7Ci0gICAgfQotICAgIGF1dG8gc2FtcGxlQnVmZmVyID0gQ01TYW1wbGVCdWZmZXJGcm9tUGl4
ZWxCdWZmZXIocGl4ZWxCdWZmZXIuZ2V0KCkpOworICAgIGlmICghbV9pbWFnZVRyYW5zZmVyU2Vz
c2lvbikKKyAgICAgICAgbV9pbWFnZVRyYW5zZmVyU2Vzc2lvbiA9IEltYWdlVHJhbnNmZXJTZXNz
aW9uVlQ6OmNyZWF0ZShwcmVmZXJlZFBpeGVsQnVmZmVyRm9ybWF0KCkpOworICAgIGlmICghbV9p
bWFnZVRyYW5zZmVyU2Vzc2lvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBzYW1wbGVU
aW1lID0gTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKChlbGFwc2VkVGltZSgpICsgMTAwX21z
KS5zZWNvbmRzKCkpOworICAgIGF1dG8gc2FtcGxlQnVmZmVyID0gbV9pbWFnZVRyYW5zZmVyU2Vz
c2lvbi0+Y3JlYXRlTWVkaWFTYW1wbGUoaW1hZ2VCdWZmZXItPmNvcHlJbWFnZSgpLT5uYXRpdmVJ
bWFnZSgpLmdldCgpLCBzYW1wbGVUaW1lLCBzaXplKCksIG1fZGV2aWNlT3JpZW50YXRpb24pOwor
ICAgIGlmICghc2FtcGxlQnVmZmVyKQorICAgICAgICByZXR1cm47CiAKICAgICAvLyBXZSB1c2Ug
bV9kZXZpY2VPcmllbnRhdGlvbiB0byBlbXVsYXRlIHNlbnNvciBvcmllbnRhdGlvbgotICAgIGRp
c3BhdGNoTWVkaWFTYW1wbGVUb09ic2VydmVycyhNZWRpYVNhbXBsZUFWRk9iakM6OmNyZWF0ZShz
YW1wbGVCdWZmZXIuZ2V0KCksIG1fZGV2aWNlT3JpZW50YXRpb24pKTsKKyAgICBkaXNwYXRjaE1l
ZGlhU2FtcGxlVG9PYnNlcnZlcnMoKnNhbXBsZUJ1ZmZlci5nZXQoKSk7CiB9CiAKIHZvaWQgTW9j
a1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWM6OnNldHRpbmdzRGlkQ2hhbmdlKE9wdGlvblNldDxSZWFs
dGltZU1lZGlhU291cmNlU2V0dGluZ3M6OkZsYWc+IHNldHRpbmdzKQpAQCAtMjAzLDIxICsxMjcs
NiBAQCB2b2lkIE1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjOjptb25pdG9yT3JpZW50YXRpb24o
T3JpZW50YXRpb25Ob3RpZmllciYgbm90aWZpZQogICAgIG9yaWVudGF0aW9uQ2hhbmdlZChub3Rp
Zmllci5vcmllbnRhdGlvbigpKTsKIH0KIAotdm9pZCBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1h
Yzo6c2V0U2l6ZUFuZEZyYW1lUmF0ZVdpdGhQcmVzZXQoSW50U2l6ZSByZXF1ZXN0ZWRTaXplLCBk
b3VibGUsIFJlZlB0cjxWaWRlb1ByZXNldD4gcHJlc2V0KQotewotICAgIGlmICghcHJlc2V0KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAocHJlc2V0LT5zaXplICE9IHJlcXVlc3RlZFNpemUp
IHsKLSAgICAgICAgaWYgKG1fcGl4ZWxCdWZmZXJSZXNpemVyICYmICFtX3BpeGVsQnVmZmVyUmVz
aXplci0+Y2FuUmVzaXplVG8ocmVxdWVzdGVkU2l6ZSkpCi0gICAgICAgICAgICBtX3BpeGVsQnVm
ZmVyUmVzaXplciA9IG51bGxwdHI7Ci0KLSAgICAgICAgaWYgKCFtX3BpeGVsQnVmZmVyUmVzaXpl
cikKLSAgICAgICAgICAgIG1fcGl4ZWxCdWZmZXJSZXNpemVyID0gc3RkOjptYWtlX3VuaXF1ZTxQ
aXhlbEJ1ZmZlclJlc2l6ZXI+KHJlcXVlc3RlZFNpemUsIHByZWZlcmVkUGl4ZWxCdWZmZXJGb3Jt
YXQoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fcGl4ZWxCdWZmZXJSZXNpemVyID0gbnVsbHB0
cjsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKE1FRElB
X1NUUkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9TY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vbWFjL1NjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLmgKaW5k
ZXggZWM5MjBmMDI0YTU2ODk5MjAwOTQ0OTQ0NDdkNzJiZWU2MzI5MGRjNy4uOWM4Zjg3MWMzZDFm
OWM2OWMyNTdhNmJkOTllYTlmNDQyNzIwZDllZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1NjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1NjcmVlbkRpc3Bs
YXlDYXB0dXJlU291cmNlTWFjLmgKQEAgLTU2LDcgKzU2LDcgQEAgcHJpdmF0ZToKIAogICAgIHZv
aWQgZnJhbWVBdmFpbGFibGUoQ0dEaXNwbGF5U3RyZWFtRnJhbWVTdGF0dXMsIHVpbnQ2NF90LCBJ
T1N1cmZhY2VSZWYsIENHRGlzcGxheVN0cmVhbVVwZGF0ZVJlZik7CiAKLSAgICBSZXRhaW5QdHI8
Q1ZQaXhlbEJ1ZmZlclJlZj4gZ2VuZXJhdGVGcmFtZSgpIGZpbmFsOworICAgIERpc3BsYXlDYXB0
dXJlU291cmNlQ29jb2E6OkRpc3BsYXlGcmFtZVR5cGUgZ2VuZXJhdGVGcmFtZSgpIGZpbmFsOwog
ICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RGlzcGxheVN1cmZhY2VUeXBlIHN1cmZh
Y2VUeXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdz
OjpEaXNwbGF5U3VyZmFjZVR5cGU6Ok1vbml0b3I7IH0KIAogICAgIHZvaWQgc3RhcnRQcm9kdWNp
bmdEYXRhKCkgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9tYWMvU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VN
YWMubW0KaW5kZXggYTIzOGYyOGY5NzViODQwODM0Mjc3ZThiMGMyZGVkYzE5Y2FiZTQ0Ny4uNGNi
NGQxM2NhNTAyZjQzZDIxMmJkODRhMWQ3ZTcwYjhhZWUyYTJiNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1NjcmVlbkRpc3BsYXlDYXB0dXJlU291
cmNlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9T
Y3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5tbQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgogI2luY2x1
ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlJlYWx0aW1lVmlk
ZW9VdGlsaXRpZXMuaCIKIAogI2luY2x1ZGUgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCiAKQEAgLTE2
Niw3ICsxNjcsNyBAQCBib29sIFNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpjcmVhdGVE
aXNwbGF5U3RyZWFtKCkKICAgICAgICAgfSk7CiAKICAgICAgICAgYXV0byBzaXplID0gZnJhbWVT
aXplKCk7Ci0gICAgICAgIG1fZGlzcGxheVN0cmVhbSA9IGFkb3B0Q0YoQ0dEaXNwbGF5U3RyZWFt
Q3JlYXRlV2l0aERpc3BhdGNoUXVldWUobV9kaXNwbGF5SUQsIHNpemUud2lkdGgoKSwgc2l6ZS5o
ZWlnaHQoKSwga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhQbGFuYXIsIHN0cmVhbU9wdGlv
bnMuZ2V0KCksIG1fY2FwdHVyZVF1ZXVlLmdldCgpLCBtX2ZyYW1lQXZhaWxhYmxlQmxvY2spKTsK
KyAgICAgICAgbV9kaXNwbGF5U3RyZWFtID0gYWRvcHRDRihDR0Rpc3BsYXlTdHJlYW1DcmVhdGVX
aXRoRGlzcGF0Y2hRdWV1ZShtX2Rpc3BsYXlJRCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgp
LCBwcmVmZXJlZFBpeGVsQnVmZmVyRm9ybWF0KCksIHN0cmVhbU9wdGlvbnMuZ2V0KCksIG1fY2Fw
dHVyZVF1ZXVlLmdldCgpLCBtX2ZyYW1lQXZhaWxhYmxlQmxvY2spKTsKICAgICAgICAgaWYgKCFt
X2Rpc3BsYXlTdHJlYW0pIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhLCAiU2NyZWVu
RGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OmNyZWF0ZURpc3BsYXlTdHJlYW06IENHRGlzcGxheVN0
cmVhbUNyZWF0ZSBmYWlsZWQiKTsKICAgICAgICAgICAgIGNhcHR1cmVGYWlsZWQoKTsKQEAgLTIw
NSwxOCArMjA2LDE1IEBAIHZvaWQgU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OnN0b3BQ
cm9kdWNpbmdEYXRhKCkKICAgICBtX2lzUnVubmluZyA9IGZhbHNlOwogfQogCi1SZXRhaW5QdHI8
Q1ZQaXhlbEJ1ZmZlclJlZj4gU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OmdlbmVyYXRl
RnJhbWUoKQorRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6RGlzcGxheUZyYW1lVHlwZSBTY3Jl
ZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6Z2VuZXJhdGVGcmFtZSgpCiB7Ci0gICAgaWYgKCFt
X2N1cnJlbnRGcmFtZS5pb1N1cmZhY2UoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KICAg
ICBEaXNwbGF5U3VyZmFjZSBjdXJyZW50RnJhbWU7CiAgICAgewogICAgICAgICBMb2NrSG9sZGVy
IGxvY2sobV9jdXJyZW50RnJhbWVNdXRleCk7CiAgICAgICAgIGN1cnJlbnRGcmFtZSA9IG1fY3Vy
cmVudEZyYW1lLmlvU3VyZmFjZSgpOwogICAgIH0KIAotICAgIHJldHVybiBwaXhlbEJ1ZmZlckZy
b21JT1N1cmZhY2UoY3VycmVudEZyYW1lLmlvU3VyZmFjZSgpKTsKKyAgICByZXR1cm4gRGlzcGxh
eUNhcHR1cmVTb3VyY2VDb2NvYTo6RGlzcGxheUZyYW1lVHlwZSB7IFJldGFpblB0cjxJT1N1cmZh
Y2VSZWY+IHsgY3VycmVudEZyYW1lLmlvU3VyZmFjZSgpIH0gfTsKIH0KIAogdm9pZCBTY3JlZW5E
aXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6c3RhcnREaXNwbGF5U3RyZWFtKCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9XaW5kb3dEaXNwbGF5Q2Fw
dHVyZVNvdXJjZU1hYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L1dpbmRvd0Rpc3BsYXlDYXB0dXJlU291cmNlTWFjLmgKaW5kZXggMWM0ZDM3NjBmODhjZmY1ZmE3
NGNkMjcwNjYwM2U2OGExZDNkNmRkZi4uMmQxYTY2ZTAzMTJiYWRjYTg5ZDliY2YwYjgwNjZlZDQz
MmRiMmQ1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
bWFjL1dpbmRvd0Rpc3BsYXlDYXB0dXJlU291cmNlTWFjLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1dpbmRvd0Rpc3BsYXlDYXB0dXJlU291cmNlTWFjLmgK
QEAgLTQ5LDExICs0OSwxMCBAQCBwcml2YXRlOgogICAgIFdpbmRvd0Rpc3BsYXlDYXB0dXJlU291
cmNlTWFjKHVpbnQzMl90LCBTdHJpbmcmJik7CiAgICAgdmlydHVhbCB+V2luZG93RGlzcGxheUNh
cHR1cmVTb3VyY2VNYWMoKSA9IGRlZmF1bHQ7CiAKLSAgICBSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZl
clJlZj4gZ2VuZXJhdGVGcmFtZSgpIGZpbmFsOworICAgIERpc3BsYXlDYXB0dXJlU291cmNlQ29j
b2E6OkRpc3BsYXlGcmFtZVR5cGUgZ2VuZXJhdGVGcmFtZSgpIGZpbmFsOwogICAgIFJlYWx0aW1l
TWVkaWFTb3VyY2VTZXR0aW5nczo6RGlzcGxheVN1cmZhY2VUeXBlIHN1cmZhY2VUeXBlKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpEaXNwbGF5U3Vy
ZmFjZVR5cGU6OldpbmRvdzsgfQogCiAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IHdpbmRvd0lt
YWdlKCk7Ci0gICAgUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJSZWY+IHBpeGVsQnVmZmVyRnJvbUNH
SW1hZ2UoQ0dJbWFnZVJlZik7CiAKICAgICBJbnRTaXplIG1fd2luZG93U2l6ZTsKICAgICBDR1dp
bmRvd0lEIG1fd2luZG93SUQgeyAwIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvV2luZG93RGlzcGxheUNhcHR1cmVTb3VyY2VNYWMubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvV2luZG93RGlzcGxheUNhcHR1
cmVTb3VyY2VNYWMubW0KaW5kZXggMWQ2YTE3Y2Q0MTM4ZmQxZDU2NzJiZjkzMjkzNzA0YmYxMDE0
MTkyMy4uOWM1ZDVkNDMxMmQ2ZDUzNjg0Yzg1ZjJhNzgwZDgzYjMyNjk1MTU4MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1dpbmRvd0Rpc3BsYXlD
YXB0dXJlU291cmNlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL21hYy9XaW5kb3dEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5tbQpAQCAtMTM5LDY5ICsxMzks
OSBAQCBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gV2luZG93RGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6
OndpbmRvd0ltYWdlKCkKICAgICByZXR1cm4gaW1hZ2U7CiB9CiAKLVJldGFpblB0cjxDVlBpeGVs
QnVmZmVyUmVmPiBXaW5kb3dEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6Z2VuZXJhdGVGcmFtZSgp
CitEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpEaXNwbGF5RnJhbWVUeXBlIFdpbmRvd0Rpc3Bs
YXlDYXB0dXJlU291cmNlTWFjOjpnZW5lcmF0ZUZyYW1lKCkKIHsKLSAgICBhdXRvIGltYWdlID0g
d2luZG93SW1hZ2UoKTsKLSAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgIGlmIChtX2xhc3RJbWFnZSAmJiBtX2xhc3RQaXhlbEJ1ZmZlciAmJiBDRkVxdWFsKG1f
bGFzdEltYWdlLmdldCgpLCBpbWFnZS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBtX2xhc3RQaXhl
bEJ1ZmZlci5nZXQoKTsKLQotICAgIG1fbGFzdEltYWdlID0gV1RGTW92ZShpbWFnZSk7Ci0gICAg
cmV0dXJuIHBpeGVsQnVmZmVyRnJvbUNHSW1hZ2UobV9sYXN0SW1hZ2UuZ2V0KCkpOwotfQotCi1S
ZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gV2luZG93RGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6
OnBpeGVsQnVmZmVyRnJvbUNHSW1hZ2UoQ0dJbWFnZVJlZiBpbWFnZSkKLXsKLSAgICBzdGF0aWMg
Q0dDb2xvclNwYWNlUmVmIHNSR0JDb2xvclNwYWNlID0gc1JHQkNvbG9yU3BhY2VSZWYoKTsKLQot
ICAgIGF1dG8gaW1hZ2VTaXplID0gSW50U2l6ZShDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpLCBDR0lt
YWdlR2V0SGVpZ2h0KGltYWdlKSk7Ci0gICAgaWYgKGltYWdlU2l6ZSAhPSBpbnRyaW5zaWNTaXpl
KCkpIHsKLSAgICAgICAgbV9idWZmZXJQb29sID0gbnVsbHB0cjsKLSAgICAgICAgbV9sYXN0SW1h
Z2UgPSBudWxscHRyOwotICAgICAgICBtX2xhc3RQaXhlbEJ1ZmZlciA9IG51bGxwdHI7Ci0gICAg
fQotCi0gICAgaWYgKCFtX2J1ZmZlclBvb2wpIHsKLSAgICAgICAgQ1ZQaXhlbEJ1ZmZlclBvb2xS
ZWYgYnVmZmVyUG9vbDsKLSAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIHNvdXJjZVBpeGVsQnVmZmVy
T3B0aW9ucyA9IChfX2JyaWRnZSBDRkRpY3Rpb25hcnlSZWYpIEB7Ci0gICAgICAgIChfX2JyaWRn
ZSBOU1N0cmluZyAqKWtDVlBpeGVsQnVmZmVyUGl4ZWxGb3JtYXRUeXBlS2V5IDogQChrQ1ZQaXhl
bEZvcm1hdFR5cGVfMzJBUkdCKSwKLSAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4
ZWxCdWZmZXJXaWR0aEtleSA6IEAoaW1hZ2VTaXplLndpZHRoKCkpLAotICAgICAgICAoX19icmlk
Z2UgTlNTdHJpbmcgKilrQ1ZQaXhlbEJ1ZmZlckhlaWdodEtleSA6IEAoaW1hZ2VTaXplLmhlaWdo
dCgpKSwKLSNpZiBQTEFURk9STShJT1MpCi0gICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtD
VlBpeGVsRm9ybWF0T3BlbkdMRVNDb21wYXRpYmlsaXR5IDogQChZRVMpLAotI2Vsc2UKLSAgICAg
ICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxCdWZmZXJPcGVuR0xDb21wYXRpYmlsaXR5
S2V5IDogQChZRVMpLAotI2VuZGlmCi0gICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBp
eGVsQnVmZmVySU9TdXJmYWNlUHJvcGVydGllc0tleSA6IEB7IC8qZW1wdHkgZGljdGlvbmFyeSov
IH0KLSAgICB9OwotCi0gICAgICAgIENGRGljdGlvbmFyeVJlZiBwaXhlbEJ1ZmZlclBvb2xPcHRp
b25zID0gKF9fYnJpZGdlIENGRGljdGlvbmFyeVJlZikgQHsKLSAgICAgICAgICAgIChfX2JyaWRn
ZSBOU1N0cmluZyAqKWtDVlBpeGVsQnVmZmVyUG9vbE1pbmltdW1CdWZmZXJDb3VudEtleSA6IEAo
MykKLSAgICAgICAgfTsKLQotICAgICAgICBDVlJldHVybiBzdGF0dXMgPSBDVlBpeGVsQnVmZmVy
UG9vbENyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBwaXhlbEJ1ZmZlclBvb2xPcHRpb25zLCBz
b3VyY2VQaXhlbEJ1ZmZlck9wdGlvbnMsICZidWZmZXJQb29sKTsKLSAgICAgICAgaWYgKHN0YXR1
cyAhPSBrQ1ZSZXR1cm5TdWNjZXNzKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICAgICAgbV9idWZmZXJQb29sID0gYWRvcHRDRihidWZmZXJQb29sKTsKLSAgICAgICAgc2V0SW50
cmluc2ljU2l6ZShpbWFnZVNpemUpOwotICAgIH0KLQotICAgIENWUGl4ZWxCdWZmZXJSZWYgcGl4
ZWxCdWZmZXI7Ci0gICAgQ1ZSZXR1cm4gc3RhdHVzID0gQ1ZQaXhlbEJ1ZmZlclBvb2xDcmVhdGVQ
aXhlbEJ1ZmZlcihudWxscHRyLCBtX2J1ZmZlclBvb2wuZ2V0KCksICZwaXhlbEJ1ZmZlcik7Ci0g
ICAgaWYgKHN0YXR1cyAhPSBrQ1ZSZXR1cm5TdWNjZXNzKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIENWUGl4ZWxCdWZmZXJMb2NrQmFzZUFkZHJlc3MocGl4ZWxCdWZmZXIsIDApOwot
ICAgIHZvaWQqIGRhdGEgPSBDVlBpeGVsQnVmZmVyR2V0QmFzZUFkZHJlc3MocGl4ZWxCdWZmZXIp
OwotICAgIGF1dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKGRhdGEs
IGltYWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCksIDgsIENWUGl4ZWxCdWZmZXJH
ZXRCeXRlc1BlclJvdyhwaXhlbEJ1ZmZlciksIHNSR0JDb2xvclNwYWNlLCAoQ0dCaXRtYXBJbmZv
KSBrQ0dJbWFnZUFscGhhTm9uZVNraXBGaXJzdCkpOwotICAgIENHQ29udGV4dERyYXdJbWFnZShj
b250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIENHSW1hZ2VHZXRXaWR0aChpbWFnZSksIENH
SW1hZ2VHZXRIZWlnaHQoaW1hZ2UpKSwgaW1hZ2UpOwotICAgIENWUGl4ZWxCdWZmZXJVbmxvY2tC
YXNlQWRkcmVzcyhwaXhlbEJ1ZmZlciwgMCk7Ci0KLSAgICBtX2xhc3RQaXhlbEJ1ZmZlciA9IGFk
b3B0Q0YocGl4ZWxCdWZmZXIpOwotICAgIHJldHVybiBtX2xhc3RQaXhlbEJ1ZmZlcjsKKyAgICBy
ZXR1cm4gRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6RGlzcGxheUZyYW1lVHlwZSB7IFJldGFp
blB0cjxDR0ltYWdlUmVmPiB7IHdpbmRvd0ltYWdlKCkgfSB9OwogfQogCiBzdGQ6Om9wdGlvbmFs
PENhcHR1cmVEZXZpY2U+IFdpbmRvd0Rpc3BsYXlDYXB0dXJlU291cmNlTWFjOjp3aW5kb3dDYXB0
dXJlRGV2aWNlV2l0aFBlcnNpc3RlbnRJRChjb25zdCBTdHJpbmcmIGlkU3RyaW5nKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJj
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291
cmNlLmNwcAppbmRleCA2MjI0N2VkNTZkZDBmZTcyYmUwMDM5MTQ0YjhmMDQ2ZjUwZDk2ZjRkLi43
YWI3YTIxNTRlM2FlMmE0MWM3ZDEyYzhjMDc0ZDIyMWY4Nzg3NmMzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNw
cApAQCAtMTI2LDYgKzEyNiw3IEBAIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRp
ZXMmIE1vY2tSZWFsdGltZVZpZGVvU291cmNlOjpjYXBhYmlsaXRpZXMoKQogICAgICAgICAgICAg
Y2FwYWJpbGl0aWVzLmFkZEZhY2luZ01vZGUoV1RGOjpnZXQ8TW9ja0NhbWVyYVByb3BlcnRpZXM+
KG1fZGV2aWNlLnByb3BlcnRpZXMpLmZhY2luZ01vZGUpOwogICAgICAgICAgICAgY2FwYWJpbGl0
aWVzLnNldERldmljZUlkKGhhc2hlZElkKCkpOwogICAgICAgICAgICAgdXBkYXRlQ2FwYWJpbGl0
aWVzKGNhcGFiaWxpdGllcyk7CisgICAgICAgICAgICBjYXBhYmlsaXRpZXMuc2V0RGV2aWNlSWQo
aGFzaGVkSWQoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBjYXBhYmlsaXRpZXMu
c2V0V2lkdGgoQ2FwYWJpbGl0eVZhbHVlT3JSYW5nZSg3MiwgMjg4MCkpOwogICAgICAgICAgICAg
Y2FwYWJpbGl0aWVzLnNldEhlaWdodChDYXBhYmlsaXR5VmFsdWVPclJhbmdlKDQ1LCAxODAwKSk7
CkBAIC0xNTksMTQgKzE2MCwxNCBAQCBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3Mm
IE1vY2tSZWFsdGltZVZpZGVvU291cmNlOjpzZXR0aW5ncygpCiAgICAgICAgIHNldHRpbmdzLnNl
dEFzcGVjdFJhdGlvKGFzcGVjdFJhdGlvKCkpOwogCiAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZVN1
cHBvcnRlZENvbnN0cmFpbnRzIHN1cHBvcnRlZENvbnN0cmFpbnRzOwotICAgIHN1cHBvcnRlZENv
bnN0cmFpbnRzLnNldFN1cHBvcnRzRGV2aWNlSWQodHJ1ZSk7CiAgICAgc3VwcG9ydGVkQ29uc3Ry
YWludHMuc2V0U3VwcG9ydHNGcmFtZVJhdGUodHJ1ZSk7CiAgICAgc3VwcG9ydGVkQ29uc3RyYWlu
dHMuc2V0U3VwcG9ydHNXaWR0aCh0cnVlKTsKICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRT
dXBwb3J0c0hlaWdodCh0cnVlKTsKICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0
c0FzcGVjdFJhdGlvKHRydWUpOwotICAgIGlmIChtb2NrQ2FtZXJhKCkpCisgICAgaWYgKG1vY2tD
YW1lcmEoKSkgeworICAgICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0Rldmlj
ZUlkKHRydWUpOwogICAgICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0ZhY2lu
Z01vZGUodHJ1ZSk7Ci0gICAgZWxzZSB7CisgICAgfSBlbHNlIHsKICAgICAgICAgc3VwcG9ydGVk
Q29uc3RyYWludHMuc2V0U3VwcG9ydHNEaXNwbGF5U3VyZmFjZSh0cnVlKTsKICAgICAgICAgc3Vw
cG9ydGVkQ29uc3RyYWludHMuc2V0U3VwcG9ydHNMb2dpY2FsU3VyZmFjZSh0cnVlKTsKICAgICB9
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>352544</attachid>
            <date>2018-10-16 20:28:10 -0700</date>
            <delta_ts>2018-10-16 20:48:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-190519-20181016202809.patch</filename>
            <type>text/plain</type>
            <size>86522</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM3MjE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2RiYzlmZDA2YjBhZTJk
OWZmYWM1M2Q5NjMyNjg4OGIwN2VjMTg1My4uZjYxYjdkM2U2N2ZjZjA1YzYyMDg1ZWFlMDk4ZmU4
YmIyM2NhOWEyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgwIEBACisyMDE4LTEwLTE2ICBFcmlj
IENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNZWRpYVN0cmVh
bV0gQ29uc29saWRhdGUgYWxsIGltYWdlIGNvbnZlcnNpb24gYW5kIHJlc2l6aW5nIGludG8gb25l
IGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
OTA1MTkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQ1MjI0MzA3PgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gZnVuY3Rp
b25hbCBjaGFuZ2UuCisKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OiBBZGQgSW1hZ2VUcmFu
c2ZlclNlc3Npb25WVC4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6IERpdHRvLgorCisgICAgICAgICogcGxhdGZvcm0vTWVkaWFTYW1wbGUuaDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhU2FtcGxlOjp2aWRlb1BpeGVsRm9ybWF0IGNvbnN0KTogTmV3LgorCisg
ICAgICAgICogcGxhdGZvcm0vY29jb2EvVmlkZW9Ub29sYm94U29mdExpbmsuY3BwOiBBZGQgbmV3
IGtWVFBpeGVsVHJhbnNmZXJQcm9wZXJ0eSBrZXlzLgorICAgICAgICAqIHBsYXRmb3JtL2NvY29h
L1ZpZGVvVG9vbGJveFNvZnRMaW5rLmg6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMuaDoKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhU2FtcGxlQVZGT2JqQzo6Y3JlYXRlKTogUmVtb3ZlIHVuaW1wbGVtZW50ZWQgdmFyaWFu
dC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNh
bXBsZUFWRk9iakMubW06CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZUFWRk9iakM6OnZp
ZGVvUGl4ZWxGb3JtYXQgY29uc3QpOiBOZXcuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jdi9JbWFnZVRyYW5zZmVyU2Vzc2lvblZULmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jdi9JbWFnZVRyYW5zZmVyU2Vzc2lvblZULm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OkltYWdlVHJhbnNmZXJTZXNzaW9uVlQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6fkltYWdlVHJhbnNmZXJTZXNz
aW9uVlQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6c2V0U2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVhdGVQaXhl
bEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVh
dGVDTVNhbXBsZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpyb3VuZFVwVG9NYWNyb2Jsb2Nr
TXVsdGlwbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6aW9T
dXJmYWNlUGl4ZWxCdWZmZXJDcmVhdGlvbk9wdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlTWVkaWFTYW1wbGUpOgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJSZXNpemVyLmg6IFJlbW92ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJSZXNpemVyLm1tOiBSZW1vdmVkLgor
CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJlU291cmNl
Lmg6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJlU291
cmNlLm1tOgorICAgICAgICAoV2ViQ29yZTo6QVZWaWRlb0NhcHR1cmVTb3VyY2U6OnByZWZlcnNQ
cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6QVZWaWRlb0NhcHR1cmVTb3VyY2U6OmNhcHR1cmVP
dXRwdXREaWRPdXRwdXRTYW1wbGVCdWZmZXJGcm9tQ29ubmVjdGlvbik6IFJlbW92ZQorICAgICAg
ICB0aGUgcmVzaXppbmcgbG9naWMsIGl0IGlzIGhhbmRsZWQgYnkgdGhlIGJhc2UgY2xhc3MuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVTb3VyY2VD
b2NvYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpj
YXBhYmlsaXRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUNhcHR1cmVTb3VyY2VDb2Nv
YTo6c2V0dGluZ3NEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUNhcHR1cmVT
b3VyY2VDb2NvYTo6c2V0SW50cmluc2ljU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
Q2FwdHVyZVNvdXJjZUNvY29hOjplbWl0RnJhbWUpOiBSZW1vdmUgcmVzaXppbmcgbG9naWMsIGp1
c3QgdXNlIGEgdHJhbnNmZXIKKyAgICAgICAgc2Vzc2lvbiB0byBjcmVhdGUgYW4gaW1hZ2UgZnJv
bSB0aGUgY2FwdHVyZSBzb3VyY2UgbmF0aXZlIG91dHB1dCBmb3JtYXQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpzYW1wbGVCdWZmZXJGcm9tUGl4ZWxCdWZm
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6cm91bmRVcFRvTWFjcm9ibG9ja011bHRp
cGxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlDYXB0dXJlU291cmNlQ29j
b2E6OnBpeGVsQnVmZmVyRnJvbUlPU3VyZmFjZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL0Rpc3BsYXlDYXB0dXJlU291cmNlQ29jb2EuaDoKKworICAgICAg
ICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5o
OgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1Nv
dXJjZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFj
Ojp1cGRhdGVTYW1wbGVCdWZmZXIpOiBVc2UgaW1hZ2UgdHJhbnNmZXIgc2Vzc2lvbi4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjOjpDTVNhbXBsZUJ1ZmZlckZy
b21QaXhlbEJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpNb2NrUmVhbHRpbWVW
aWRlb1NvdXJjZU1hYzo6cGl4ZWxCdWZmZXJGcm9tQ0dJbWFnZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYzo6c2V0U2l6ZUFuZEZy
YW1lUmF0ZVdpdGhQcmVzZXQpOiBEZWxldGVkLgorCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL1NjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLmg6CisgICAgICAgICogcGxh
dGZvcm0vbWVkaWFzdHJlYW0vbWFjL1NjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6U2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OmNyZWF0ZURp
c3BsYXlTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6U2NyZWVuRGlzcGxheUNhcHR1cmVTb3Vy
Y2VNYWM6OmdlbmVyYXRlRnJhbWUpOiBSZXR1cm4gdGhlIElPU3VyZmFjZSBkaXJlY3RseS4KKwor
ICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9XaW5kb3dEaXNwbGF5Q2FwdHVyZVNv
dXJjZU1hYy5oOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9XaW5kb3dEaXNw
bGF5Q2FwdHVyZVNvdXJjZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OldpbmRvd0Rpc3BsYXlD
YXB0dXJlU291cmNlTWFjOjpnZW5lcmF0ZUZyYW1lKTogUmV0dXJuIHRoZSBDR0ltYWdlIGRpcmVj
dGx5LgorICAgICAgICAoV2ViQ29yZTo6V2luZG93RGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OnBp
eGVsQnVmZmVyRnJvbUNHSW1hZ2UpOiBEZWxldGVkLgorCisgICAgICAgICogcGxhdGZvcm0vbW9j
ay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNb2NrUmVh
bHRpbWVWaWRlb1NvdXJjZTo6Y2FwYWJpbGl0aWVzKTogT25seSB0aGUgY2FtZXJhIHN1cHBvcnRz
IGRldmljZSBJRC4KKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tSZWFsdGltZVZpZGVvU291cmNlOjpz
ZXR0aW5ncyk6IERpdHRvLgorCiAyMDE4LTEwLTE2ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBs
ZS5jb20+CiAKICAgICAgICAgUmVncmVzc2lvbihyMjM2Nzk1KSBDaGVjayBib3hlcyBhcmUgc29t
ZXRpbWVzIGNoZWNrZWQgd2hlbiB0aGV5IHNob3VsZCBub3QgYmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2Eu
dHh0CmluZGV4IGM3NmY0OTIzMWNiNWUwYmJkNWMwOWNmMmUyNGM0YzkxNTljZDllNTcuLjg0NTU1
YTZhNzlhYTA0MWUyYWJiNWE5YjA0ODk0ODlkODYyMDMwODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29h
LnR4dApAQCAtMzE0LDggKzMxNCw4IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5
ZXIubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYk1ldGFsTGF5ZXIubW0KIHBsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL1RleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EubW0KIAorcGxhdGZv
cm0vZ3JhcGhpY3MvY3YvSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5tbQogcGxhdGZvcm0vZ3JhcGhp
Y3MvY3YvUGl4ZWxCdWZmZXJDb25mb3JtZXJDVi5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2N2L1Bp
eGVsQnVmZmVyUmVzaXplci5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvVGV4dHVyZUNhY2hlQ1Yu
bW0KIHBsYXRmb3JtL2dyYXBoaWNzL2N2L1ZpZGVvVGV4dHVyZUNvcGllckNWLmNwcAogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
OTdiMzVhZmZmOTFhMzIzNTYzMDdjYTZhNzQ2MDA1OGQyMDJhMDViZi4uZTU2ZTdlYmVhNzA2ZTNi
YTQyZWUyMWQ4NmJkZGE1YTI5NzYxMTBlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTY5LDYgKzE2OSw3IEBACiAJCTA3OEU0
M0RBMUFCQjZDN0UwMDFDMkZBNiAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzhFNDNEODFBQkI2QzdF
MDAxQzJGQTYgLyogTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA3OEU0M0REMUFCQjZGNkYwMDFDMkZB
NiAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzhFNDNEQjFBQkI2RjZGMDAxQzJGQTYgLyogTWVk
aWFQbGF5YmFja1RhcmdldFBpY2tlck1hYy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTA3OEU0M0RFMUFCQjZGNkYwMDFDMkZBNiAvKiBNZWRpYVBs
YXliYWNrVGFyZ2V0UGlja2VyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDc4RTQzREMxQUJCNkY2RjAwMUMyRkE2IC8qIE1lZGlhUGxheWJhY2tU
YXJnZXRQaWNrZXJNYWMubW0gKi87IH07CisJCTA3OEVEMTkzMjE2RDA3OTUwMDc3NUIzMyAvKiBJ
bWFnZVRyYW5zZmVyU2Vzc2lvblZULmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwNzQ2RDMwQzIxNDZFQTM4MDAzRERGODQgLyogSW1hZ2VUcmFuc2ZlclNl
c3Npb25WVC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTA3OTIxNjU1MUFBNTYwQUEwMEEzQzA0OSAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0Q2xpZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzkyMTY1
MzFBQTU2MEFBMDBBM0MwNDkgLyogTWVkaWFQbGF5YmFja1RhcmdldENsaWVudC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA3OTQxNzkxMTY2RTg1
NUYwMDk0MTZDMiAvKiBJbmJhbmRUZXh0VHJhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDc5NDE3OEYxNjZFODU1RjAwOTQxNkMyIC8qIEluYmFu
ZFRleHRUcmFjay5jcHAgKi87IH07CiAJCTA3OTQxNzkyMTY2RTg1NUYwMDk0MTZDMiAvKiBJbmJh
bmRUZXh0VHJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDA3OTQxNzkwMTY2RTg1NUYwMDk0MTZDMiAvKiBJbmJhbmRUZXh0VHJhY2suaCAqLzsgfTsK
QEAgLTUzNjgsOCArNTM2OSw4IEBACiAJCTA3M0I4NzY1MUU0Mzg1OUQwMDcxQzBFQyAvKiBBdWRp
b1NhbXBsZURhdGFTb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXVk
aW9TYW1wbGVEYXRhU291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3NDRF
Q0VCMUUwQzRBRTUwMDBEMDk0NCAvKiBNb2NrUmVhbHRpbWVBdWRpb1NvdXJjZU1hYy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNb2NrUmVhbHRpbWVBdWRpb1NvdXJjZU1hYy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzQ0RUNFQzFFMEM0QUU1MDAwRDA5NDQg
LyogTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2VNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBNb2NrUmVhbHRpbWVBdWRpb1NvdXJjZU1hYy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDc0NkQzMEEyMTQ2RUEzNzAwM0RERjg0IC8qIFBpeGVsQnVm
ZmVyUmVzaXplci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBp
eGVsQnVmZmVyUmVzaXplci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDc0NkQz
MEMyMTQ2RUEzODAwM0RERjg0IC8qIFBpeGVsQnVmZmVyUmVzaXplci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQaXhlbEJ1ZmZlclJlc2l6ZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMDc0NkQzMEEyMTQ2RUEzNzAwM0RERjg0IC8qIEltYWdlVHJhbnNmZXJT
ZXNzaW9uVlQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBJbWFn
ZVRyYW5zZmVyU2Vzc2lvblZULm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwNzQ2
RDMwQzIxNDZFQTM4MDAzRERGODQgLyogSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZVRyYW5zZmVyU2Vzc2lvblZULmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3NEU4MkI4MThBNjlGMEUwMDdFRjU0QyAvKiBQbGF0
Zm9ybVRpbWVSYW5nZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UGxhdGZvcm1UaW1lUmFuZ2VzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDc0
RTgyQjkxOEE2OUYwRTAwN0VGNTRDIC8qIFBsYXRmb3JtVGltZVJhbmdlcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybVRpbWVSYW5nZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMDc1Mzg2MDAxNDQ4OUU5ODAwQjc4NDUyIC8qIENhY2hlZFRleHRU
cmFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWNoZWRUZXh0
VHJhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjUwOTUsMTAgKzI1MDk2
LDEwIEBACiAJCUNEOUQ4MjdDMUM3QkIyRUQwMDZGRjA2NiAvKiBjdiAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMDc0NkQzMEMyMTQ2RUEzODAwM0RERjg0
IC8qIEltYWdlVHJhbnNmZXJTZXNzaW9uVlQuaCAqLywKKwkJCQkwNzQ2RDMwQTIxNDZFQTM3MDAz
RERGODQgLyogSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5tbSAqLywKIAkJCQlDRDdEMzM0MTFDN0Ex
MjNGMDAwNDEyOTMgLyogUGl4ZWxCdWZmZXJDb25mb3JtZXJDVi5jcHAgKi8sCiAJCQkJQ0Q3RDMz
NDIxQzdBMTIzRjAwMDQxMjkzIC8qIFBpeGVsQnVmZmVyQ29uZm9ybWVyQ1YuaCAqLywKLQkJCQkw
NzQ2RDMwQzIxNDZFQTM4MDAzRERGODQgLyogUGl4ZWxCdWZmZXJSZXNpemVyLmggKi8sCi0JCQkJ
MDc0NkQzMEEyMTQ2RUEzNzAwM0RERjg0IC8qIFBpeGVsQnVmZmVyUmVzaXplci5tbSAqLywKIAkJ
CQlDRDlEODI3NDFDN0FFNTM1MDA2RkYwNjYgLyogVGV4dHVyZUNhY2hlQ1YuaCAqLywKIAkJCQlD
RDlEODI3MzFDN0FFNTM1MDA2RkYwNjYgLyogVGV4dHVyZUNhY2hlQ1YubW0gKi8sCiAJCQkJQ0Q5
RDgyNzcxQzdCOEVFMTAwNkZGMDY2IC8qIFZpZGVvVGV4dHVyZUNvcGllckNWLmNwcCAqLywKQEAg
LTI4NzIwLDYgKzI4NzIxLDcgQEAKIAkJCQk3QzE5M0JDMTFGNUUwRUVEMDA4OEYzRTYgLyogSW1h
Z2VTbW9vdGhpbmdRdWFsaXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQk1NTQ2NzU3QjFGRDIxMkE5
MDAzQjEwQjAgLyogSW1hZ2VTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTRCMzQ4MDk0MEVF
RjUwRDQwMEFDMUI0MSAvKiBJbWFnZVNvdXJjZUNHLmggaW4gSGVhZGVycyAqLywKKwkJCQkwNzhF
RDE5MzIxNkQwNzk1MDA3NzVCMzMgLyogSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTU1MENCNDIxRTk1NUUzQzAwMTExQUEwIC8qIEltYWdlVHlwZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTI2Rjc1NkIzMUIzQjY2RjcwMDA1REQ3OSAvKiBJbW11dGFibGVORkEu
aCBpbiBIZWFkZXJzICovLAogCQkJCTI2Rjc1NkI1MUIzQjY4RjIwMDA1REQ3OSAvKiBJbW11dGFi
bGVORkFOb2RlQnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9NZWRpYVNhbXBsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVk
aWFTYW1wbGUuaAppbmRleCBlNTgyZmRiNDlhY2VlZGEwZmMzNjhhMGNlYzU2MTg4MWFlODhjMzdi
Li4wNTBkOTM4OWQxOGUxMGY1ZDk3YmE0M2Q4NjBjMmExMzUyMDY2MmZlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZWRpYVNhbXBsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL01lZGlhU2FtcGxlLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkZs
b2F0U2l6ZS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlzLmg+CisjaW5j
bHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvTWVkaWFUaW1lLmg+CiAjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcu
aD4KQEAgLTEwMCw2ICsxMDEsMjAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3QgPSAwOwogfTsKIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3Jl
OjpNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbj4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1W
YWx1ZXM8CisgICAgICAgIFdlYkNvcmU6Ok1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uLAorICAg
ICAgICBXZWJDb3JlOjpNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6Tm9uZSwKKyAgICAgICAg
V2ViQ29yZTo6TWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246OlVwc2lkZURvd24sCisgICAgICAg
IFdlYkNvcmU6Ok1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpSaWdodCwKKyAgICAgICAgV2Vi
Q29yZTo6TWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246OkxlZnQKKyAgICA+OworfTsKKworfSAv
LyBuYW1lc3BhY2UgV1RGCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY29jb2EvQ29yZVZpZGVvU29mdExpbmsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY29jb2EvQ29yZVZpZGVvU29mdExpbmsuY3BwCmluZGV4IDhiYjM2MmJmMjY4MGQzNmQ2ZTNm
MGQ1YzMyMDUyMTM1YzFkZjVhOTguLmRjZmIxY2ZiNDdhMDNkMzczYTNhNjIyODc0ZTcwMzg1OTE2
Y2UwOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL0NvcmVWaWRl
b1NvZnRMaW5rLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9Db3JlVmlk
ZW9Tb2Z0TGluay5jcHAKQEAgLTkyLDQgKzkyLDYgQEAgU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9T
T1VSQ0UoV2ViQ29yZSwgQ29yZVZpZGVvLCBrQ1ZQaXhlbEJ1ZmZlckV4dGVuZGVkUGl4ZWxzQm8K
IFNPRlRfTElOS19DT05TVEFOVF9GT1JfU09VUkNFKFdlYkNvcmUsIENvcmVWaWRlbywga0NWUGl4
ZWxCdWZmZXJPcGVuR0xDb21wYXRpYmlsaXR5S2V5LCBDRlN0cmluZ1JlZikKICNlbmRpZgogCitT
T0ZUX0xJTktfRlVOQ1RJT05fRk9SX1NPVVJDRShXZWJDb3JlLCBDb3JlVmlkZW8sIENWUGl4ZWxC
dWZmZXJDcmVhdGVXaXRoSU9TdXJmYWNlLCBDVlJldHVybiwgKENGQWxsb2NhdG9yUmVmIGFsbG9j
YXRvciwgSU9TdXJmYWNlUmVmIHN1cmZhY2UsIENGRGljdGlvbmFyeVJlZiBwaXhlbEJ1ZmZlckF0
dHJpYnV0ZXMsIENWUGl4ZWxCdWZmZXJSZWYgKiBwaXhlbEJ1ZmZlck91dCksIChhbGxvY2F0b3Is
IHN1cmZhY2UsIHBpeGVsQnVmZmVyQXR0cmlidXRlcywgcGl4ZWxCdWZmZXJPdXQpKQorCiAjZW5k
aWYgLy8gSEFWRShDT1JFX1ZJREVPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY29jb2EvQ29yZVZpZGVvU29mdExpbmsuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nv
Y29hL0NvcmVWaWRlb1NvZnRMaW5rLmgKaW5kZXggOWVlYjQzNDYxODkzODQ1YTY4MjQ0ODhiNDM4
ZjU5NjlhYjJjOGIxMi4uNTI5NWU1OGM4NDcwZjUyZjJhZDg0M2IxNjdhMTc5NDc3MDhkNTRiOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvQ29yZVZpZGVvU29mdExp
bmsuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9Db3JlVmlkZW9Tb2Z0TGlu
ay5oCkBAIC0xNDcsNCArMTQ3LDcgQEAgU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9IRUFERVIoV2Vi
Q29yZSwgQ29yZVZpZGVvLCBrQ1ZQaXhlbEJ1ZmZlck9wZW5HTENvbXBhdGliaWwKICNkZWZpbmUg
a0NWUGl4ZWxCdWZmZXJPcGVuR0xDb21wYXRpYmlsaXR5S2V5IGdldF9Db3JlVmlkZW9fa0NWUGl4
ZWxCdWZmZXJPcGVuR0xDb21wYXRpYmlsaXR5S2V5KCkKICNlbmRpZgogCitTT0ZUX0xJTktfRlVO
Q1RJT05fRk9SX0hFQURFUihXZWJDb3JlLCBDb3JlVmlkZW8sIENWUGl4ZWxCdWZmZXJDcmVhdGVX
aXRoSU9TdXJmYWNlLCBDVlJldHVybiwgKENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciwgSU9TdXJm
YWNlUmVmIHN1cmZhY2UsIENGRGljdGlvbmFyeVJlZiBwaXhlbEJ1ZmZlckF0dHJpYnV0ZXMsIENW
UGl4ZWxCdWZmZXJSZWYgKiBwaXhlbEJ1ZmZlck91dCksIChhbGxvY2F0b3IsIHN1cmZhY2UsIHBp
eGVsQnVmZmVyQXR0cmlidXRlcywgcGl4ZWxCdWZmZXJPdXQpKQorI2RlZmluZSBDVlBpeGVsQnVm
ZmVyQ3JlYXRlV2l0aElPU3VyZmFjZSBzb2Z0TGlua19Db3JlVmlkZW9fQ1ZQaXhlbEJ1ZmZlckNy
ZWF0ZVdpdGhJT1N1cmZhY2UKKwogI2VuZGlmIC8vIEhBVkUoQ09SRV9WSURFTykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvVG9vbGJveFNvZnRMaW5rLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvVG9vbGJveFNvZnRMaW5rLmNw
cAppbmRleCA5ODdmYmNmNjE5NjZkMjRjZjA1Y2EwODQ2OTlkMDU4MGEyZjExMWRmLi5lYWY3OGI0
NWQwNTI4N2E3OTZlNmEyYTA1Y2QwZThmMGE4OTk0ZDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jb2NvYS9WaWRlb1Rvb2xib3hTb2Z0TGluay5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvVmlkZW9Ub29sYm94U29mdExpbmsuY3BwCkBAIC01OSw2
ICs1OSw5IEBAIFNPRlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNFKFdlYkNvcmUsIFZpZGVvVG9v
bGJveCwgVlRQaXhlbFRyYW5zZmVyU2Vzc2lvblRyYW5zCiBTT0ZUX0xJTktfRlVOQ1RJT05fRk9S
X1NPVVJDRShXZWJDb3JlLCBWaWRlb1Rvb2xib3gsIFZUU2Vzc2lvblNldFByb3BlcnR5LCBPU1N0
YXR1cywgKFZUU2Vzc2lvblJlZiBzZXNzaW9uLCBDRlN0cmluZ1JlZiBwcm9wZXJ0eUtleSwgQ0ZU
eXBlUmVmIHByb3BlcnR5VmFsdWUpLCAoc2Vzc2lvbiwgcHJvcGVydHlLZXksIHByb3BlcnR5VmFs
dWUpKQogU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9TT1VSQ0UoV2ViQ29yZSwgVmlkZW9Ub29sYm94
LCBrVlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXlfU2NhbGluZ01vZGUsIENGU3RyaW5nUmVmKQog
U09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9TT1VSQ0UoV2ViQ29yZSwgVmlkZW9Ub29sYm94LCBrVlRT
Y2FsaW5nTW9kZV9UcmltLCBDRlN0cmluZ1JlZikKK1NPRlRfTElOS19DT05TVEFOVF9GT1JfU09V
UkNFKFdlYkNvcmUsIFZpZGVvVG9vbGJveCwga1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5S2V5X0Vu
YWJsZUhhcmR3YXJlQWNjZWxlcmF0ZWRUcmFuc2ZlciwgQ0ZTdHJpbmdSZWYpCitTT0ZUX0xJTktf
Q09OU1RBTlRfRk9SX1NPVVJDRShXZWJDb3JlLCBWaWRlb1Rvb2xib3gsIGtWVFBpeGVsVHJhbnNm
ZXJQcm9wZXJ0eUtleV9FbmFibGVIaWdoU3BlZWRUcmFuc2ZlciwgQ0ZTdHJpbmdSZWYpCitTT0ZU
X0xJTktfQ09OU1RBTlRfRk9SX1NPVVJDRShXZWJDb3JlLCBWaWRlb1Rvb2xib3gsIGtWVFBpeGVs
VHJhbnNmZXJQcm9wZXJ0eUtleV9SZWFsVGltZSwgQ0ZTdHJpbmdSZWYpCiAKIFNPRlRfTElOS19D
T05TVEFOVF9NQVlfRkFJTF9GT1JfU09VUkNFKFdlYkNvcmUsIFZpZGVvVG9vbGJveCwga1ZUSEVW
Q0RlY29kZXJDYXBhYmlsaXR5X1N1cHBvcnRlZFByb2ZpbGVzLCBDRlN0cmluZ1JlZikKIFNPRlRf
TElOS19DT05TVEFOVF9NQVlfRkFJTF9GT1JfU09VUkNFKFdlYkNvcmUsIFZpZGVvVG9vbGJveCwg
a1ZUSEVWQ0RlY29kZXJDYXBhYmlsaXR5X1BlclByb2ZpbGVTdXBwb3J0LCBDRlN0cmluZ1JlZikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvVG9vbGJveFNv
ZnRMaW5rLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9WaWRlb1Rvb2xib3hTb2Z0
TGluay5oCmluZGV4IGYzMTliMTg4ZWQxNjA1ODA5NDc2MTJlYjM3Mjg2ZGUyMjMyNGUyNWQuLjA3
MWI3MTFlZDA0ZDNiODE0ODIyODkyYTE1MGQ3YWU1ZmRlNmY4NTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvVG9vbGJveFNvZnRMaW5rLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvVmlkZW9Ub29sYm94U29mdExpbmsuaApAQCAtODUs
NiArODUsMTIgQEAgU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9IRUFERVIoV2ViQ29yZSwgVmlkZW9U
b29sYm94LCBrVlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXkKICNkZWZpbmUga1ZUUGl4ZWxUcmFu
c2ZlclByb3BlcnR5S2V5X1NjYWxpbmdNb2RlIGdldF9WaWRlb1Rvb2xib3hfa1ZUUGl4ZWxUcmFu
c2ZlclByb3BlcnR5S2V5X1NjYWxpbmdNb2RlKCkKIFNPRlRfTElOS19DT05TVEFOVF9GT1JfSEVB
REVSKFdlYkNvcmUsIFZpZGVvVG9vbGJveCwga1ZUU2NhbGluZ01vZGVfVHJpbSwgQ0ZTdHJpbmdS
ZWYpCiAjZGVmaW5lIGtWVFNjYWxpbmdNb2RlX1RyaW0gZ2V0X1ZpZGVvVG9vbGJveF9rVlRTY2Fs
aW5nTW9kZV9UcmltKCkKK1NPRlRfTElOS19DT05TVEFOVF9GT1JfSEVBREVSKFdlYkNvcmUsIFZp
ZGVvVG9vbGJveCwga1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5S2V5X0VuYWJsZUhhcmR3YXJlQWNj
ZWxlcmF0ZWRUcmFuc2ZlciwgQ0ZTdHJpbmdSZWYpCisjZGVmaW5lIGtWVFBpeGVsVHJhbnNmZXJQ
cm9wZXJ0eUtleV9FbmFibGVIYXJkd2FyZUFjY2VsZXJhdGVkVHJhbnNmZXIgZ2V0X1ZpZGVvVG9v
bGJveF9rVlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXlfRW5hYmxlSGFyZHdhcmVBY2NlbGVyYXRl
ZFRyYW5zZmVyKCkKK1NPRlRfTElOS19DT05TVEFOVF9GT1JfSEVBREVSKFdlYkNvcmUsIFZpZGVv
VG9vbGJveCwga1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5S2V5X0VuYWJsZUhpZ2hTcGVlZFRyYW5z
ZmVyLCBDRlN0cmluZ1JlZikKKyNkZWZpbmUga1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5S2V5X0Vu
YWJsZUhpZ2hTcGVlZFRyYW5zZmVyIGdldF9WaWRlb1Rvb2xib3hfa1ZUUGl4ZWxUcmFuc2ZlclBy
b3BlcnR5S2V5X0VuYWJsZUhpZ2hTcGVlZFRyYW5zZmVyKCkKK1NPRlRfTElOS19DT05TVEFOVF9G
T1JfSEVBREVSKFdlYkNvcmUsIFZpZGVvVG9vbGJveCwga1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5
S2V5X1JlYWxUaW1lLCBDRlN0cmluZ1JlZikKKyNkZWZpbmUga1ZUUGl4ZWxUcmFuc2ZlclByb3Bl
cnR5S2V5X1JlYWxUaW1lIGdldF9WaWRlb1Rvb2xib3hfa1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5
S2V5X1JlYWxUaW1lKCkKIAogU09GVF9MSU5LX0NPTlNUQU5UX01BWV9GQUlMX0ZPUl9IRUFERVIo
V2ViQ29yZSwgVmlkZW9Ub29sYm94LCBrVlRIRVZDRGVjb2RlckNhcGFiaWxpdHlfU3VwcG9ydGVk
UHJvZmlsZXMsIENGU3RyaW5nUmVmKQogI2RlZmluZSBrVlRIRVZDRGVjb2RlckNhcGFiaWxpdHlf
U3VwcG9ydGVkUHJvZmlsZXMgZ2V0X1ZpZGVvVG9vbGJveF9rVlRIRVZDRGVjb2RlckNhcGFiaWxp
dHlfU3VwcG9ydGVkUHJvZmlsZXMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpDLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBs
ZUFWRk9iakMuaAppbmRleCBkNWE4MDZkZmUzM2U5N2MwYzFmMjhkMjExMGRmNTg4Zjk1NjgyNmFj
Li4wOTIzODgzZTViYzdlNDQ2NGIxMTZiOTJiYmZkMDhhNmUyNjNhNzJmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNh
bXBsZUFWRk9iakMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMuaApAQCAtMzEsMTMgKzMxLDEyIEBACiAj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAorCiBj
bGFzcyBNZWRpYVNhbXBsZUFWRk9iakMgOiBwdWJsaWMgTWVkaWFTYW1wbGUgewogcHVibGljOgog
ICAgIHN0YXRpYyBSZWY8TWVkaWFTYW1wbGVBVkZPYmpDPiBjcmVhdGUoQ01TYW1wbGVCdWZmZXJS
ZWYgc2FtcGxlLCBpbnQgdHJhY2tJRCkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBNZWRpYVNhbXBs
ZUFWRk9iakMoc2FtcGxlLCB0cmFja0lEKSk7IH0KICAgICBzdGF0aWMgUmVmPE1lZGlhU2FtcGxl
QVZGT2JqQz4gY3JlYXRlKENNU2FtcGxlQnVmZmVyUmVmIHNhbXBsZSwgQXRvbWljU3RyaW5nIHRy
YWNrSUQpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTWVkaWFTYW1wbGVBVkZPYmpDKHNhbXBsZSwg
dHJhY2tJRCkpOyB9CiAgICAgc3RhdGljIFJlZjxNZWRpYVNhbXBsZUFWRk9iakM+IGNyZWF0ZShD
TVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGUsIFZpZGVvUm90YXRpb24gcm90YXRpb24gPSBWaWRlb1Jv
dGF0aW9uOjpOb25lLCBib29sIG1pcnJvcmVkID0gZmFsc2UpIHsgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgTWVkaWFTYW1wbGVBVkZPYmpDKHNhbXBsZSwgcm90YXRpb24sIG1pcnJvcmVkKSk7IH0KLSAg
ICBzdGF0aWMgUmVmUHRyPE1lZGlhU2FtcGxlQVZGT2JqQz4gY3JlYXRlSW1hZ2VTYW1wbGUoUmVm
PEpTQzo6VWludDhDbGFtcGVkQXJyYXk+JiYsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVk
IGxvbmcgaGVpZ2h0KTsKICAgICBzdGF0aWMgUmVmUHRyPE1lZGlhU2FtcGxlQVZGT2JqQz4gY3Jl
YXRlSW1hZ2VTYW1wbGUoVmVjdG9yPHVpbnQ4X3Q+JiYsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVu
c2lnbmVkIGxvbmcgaGVpZ2h0KTsKIAogICAgIFJlZlB0cjxKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5
PiBnZXRSR0JBSW1hZ2VEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC02NSw2ICs2NCw3IEBAIHB1
YmxpYzoKIAogICAgIFZpZGVvUm90YXRpb24gdmlkZW9Sb3RhdGlvbigpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIG1fcm90YXRpb247IH0KICAgICBib29sIHZpZGVvTWlycm9yZWQoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBtX21pcnJvcmVkOyB9CisgICAgdWludDMyX3QgdmlkZW9QaXhlbEZv
cm1hdCgpIGNvbnN0OwogCiAgICAgQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlQnVmZmVyKCkgY29u
c3QgeyByZXR1cm4gbV9zYW1wbGUuZ2V0KCk7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpD
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
TWVkaWFTYW1wbGVBVkZPYmpDLm1tCmluZGV4IGMzYmNhNjEwOTA1NTRmODI4Yjg0ODM5YWQ0MDU0
OWE2MjdiZmU3NDAuLjY3YmI0YzZkZmUzMzA0OWRiZTE5MjI4YjUwZjdjYTg3NjcxNGM3ZWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL01lZGlhU2FtcGxlQVZGT2JqQy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMubW0KQEAgLTExMyw2
ICsxMTMsMTIgQEAgUGxhdGZvcm1TYW1wbGUgTWVkaWFTYW1wbGVBVkZPYmpDOjpwbGF0Zm9ybVNh
bXBsZSgpCiAgICAgcmV0dXJuIHNhbXBsZTsKIH0KIAordWludDMyX3QgTWVkaWFTYW1wbGVBVkZP
YmpDOjp2aWRlb1BpeGVsRm9ybWF0KCkgY29uc3QKK3sKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0g
c3RhdGljX2Nhc3Q8Q1ZQaXhlbEJ1ZmZlclJlZj4oQ01TYW1wbGVCdWZmZXJHZXRJbWFnZUJ1ZmZl
cihtX3NhbXBsZS5nZXQoKSkpOworICAgIHJldHVybiBDVlBpeGVsQnVmZmVyR2V0UGl4ZWxGb3Jt
YXRUeXBlKHBpeGVsQnVmZmVyKTsKK30KKwogc3RhdGljIGJvb2wgQ01TYW1wbGVCdWZmZXJJc1Jh
bmRvbUFjY2VzcyhDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGUpCiB7CiAgICAgQ0ZBcnJheVJlZiBh
dHRhY2htZW50cyA9IENNU2FtcGxlQnVmZmVyR2V0U2FtcGxlQXR0YWNobWVudHNBcnJheShzYW1w
bGUsIGZhbHNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2N2L0ltYWdlVHJhbnNmZXJTZXNzaW9uVlQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2N2L0ltYWdlVHJhbnNmZXJTZXNzaW9uVlQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ODE0M2JlNDdl
YjBiZTAxYmNhMzA4MGNhZWFjY2Y0ZDkwMzdiMTFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5oCkBA
IC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShWSURF
T1RPT0xCT1gpCisKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiTWVkaWFTYW1wbGVB
VkZPYmpjLmgiCisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCit0eXBlZGVmIHN0cnVjdCBD
R0ltYWdlICpDR0ltYWdlUmVmOwordHlwZWRlZiBzdHJ1Y3QgT3BhcXVlVlRQaXhlbFRyYW5zZmVy
U2Vzc2lvbiogVlRQaXhlbFRyYW5zZmVyU2Vzc2lvblJlZjsKK3R5cGVkZWYgc3RydWN0IF9fQ1ZC
dWZmZXIgKkNWUGl4ZWxCdWZmZXJSZWY7Cit0eXBlZGVmIHN0cnVjdCBfX0NWUGl4ZWxCdWZmZXJQ
b29sICpDVlBpeGVsQnVmZmVyUG9vbFJlZjsKK3R5cGVkZWYgc3RydWN0IF9fSU9TdXJmYWNlICpJ
T1N1cmZhY2VSZWY7Cit0eXBlZGVmIHN0cnVjdCBvcGFxdWVDTVNhbXBsZUJ1ZmZlciAqQ01TYW1w
bGVCdWZmZXJSZWY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VUcmFuc2Zl
clNlc3Npb25WVCB7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZVRy
YW5zZmVyU2Vzc2lvblZUPiBjcmVhdGUodWludDMyX3QgcGl4ZWxGb3JtYXQpCisgICAgeworICAg
ICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ+KG5ldyBJ
bWFnZVRyYW5zZmVyU2Vzc2lvblZUKHBpeGVsRm9ybWF0KSk7CisgICAgfQorCisgICAgUmVmUHRy
PE1lZGlhU2FtcGxlPiBjb252ZXJ0TWVkaWFTYW1wbGUoTWVkaWFTYW1wbGUmLCBjb25zdCBJbnRT
aXplJik7CisgICAgUmVmUHRyPE1lZGlhU2FtcGxlPiBjcmVhdGVNZWRpYVNhbXBsZShDR0ltYWdl
UmVmLCBjb25zdCBNZWRpYVRpbWUmLCBjb25zdCBJbnRTaXplJiwgTWVkaWFTYW1wbGU6OlZpZGVv
Um90YXRpb24gcm90YXRpb24gPSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6Tm9uZSwgYm9v
bCBtaXJyb3JlZCA9IGZhbHNlKTsKKyAgICBSZWZQdHI8TWVkaWFTYW1wbGU+IGNyZWF0ZU1lZGlh
U2FtcGxlKENNU2FtcGxlQnVmZmVyUmVmLCBjb25zdCBJbnRTaXplJiwgTWVkaWFTYW1wbGU6OlZp
ZGVvUm90YXRpb24gcm90YXRpb24gPSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6Tm9uZSwg
Ym9vbCBtaXJyb3JlZCA9IGZhbHNlKTsKKworI2lmIEhBVkUoSU9TVVJGQUNFKQorICAgIFJlZlB0
cjxNZWRpYVNhbXBsZT4gY3JlYXRlTWVkaWFTYW1wbGUoSU9TdXJmYWNlUmVmLCBjb25zdCBNZWRp
YVRpbWUmLCBjb25zdCBJbnRTaXplJiwgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb24gcm90YXRp
b24gPSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6Tm9uZSwgYm9vbCBtaXJyb3JlZCA9IGZh
bHNlKTsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlVHJhbnNm
ZXJTZXNzaW9uVlQodWludDMyX3QpOworCisjaWYgSEFWRShJT1NVUkZBQ0UpCisgICAgQ0ZEaWN0
aW9uYXJ5UmVmIGlvU3VyZmFjZVBpeGVsQnVmZmVyQ3JlYXRpb25PcHRpb25zKElPU3VyZmFjZVJl
Zik7CisgICAgUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBjcmVhdGVDTVNhbXBsZUJ1ZmZl
cihJT1N1cmZhY2VSZWYsIGNvbnN0IE1lZGlhVGltZSYsIGNvbnN0IEludFNpemUmKTsKKyAgICBS
ZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gY3JlYXRlUGl4ZWxCdWZmZXIoSU9TdXJmYWNlUmVm
LCBjb25zdCBJbnRTaXplJik7CisjZW5kaWYKKworICAgIFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZl
clJlZj4gY29udmVydENNU2FtcGxlQnVmZmVyKENNU2FtcGxlQnVmZmVyUmVmLCBjb25zdCBJbnRT
aXplJik7CisgICAgUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBjcmVhdGVDTVNhbXBsZUJ1
ZmZlcihDVlBpeGVsQnVmZmVyUmVmLCBjb25zdCBNZWRpYVRpbWUmLCBjb25zdCBJbnRTaXplJik7
CisgICAgUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBjcmVhdGVDTVNhbXBsZUJ1ZmZlcihD
R0ltYWdlUmVmLCBjb25zdCBNZWRpYVRpbWUmLCBjb25zdCBJbnRTaXplJik7CisKKyAgICBSZXRh
aW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gY29udmVydFBpeGVsQnVmZmVyKENWUGl4ZWxCdWZmZXJS
ZWYsIGNvbnN0IEludFNpemUmKTsKKyAgICBSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gY3Jl
YXRlUGl4ZWxCdWZmZXIoQ01TYW1wbGVCdWZmZXJSZWYsIGNvbnN0IEludFNpemUmKTsKKyAgICBS
ZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gY3JlYXRlUGl4ZWxCdWZmZXIoQ0dJbWFnZVJlZiwg
Y29uc3QgSW50U2l6ZSYpOworCisgICAgYm9vbCBzZXRTaXplKGNvbnN0IEludFNpemUmKTsKKwor
ICAgIFJldGFpblB0cjxWVFBpeGVsVHJhbnNmZXJTZXNzaW9uUmVmPiBtX3RyYW5zZmVyU2Vzc2lv
bjsKKyAgICBSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclBvb2xSZWY+IG1fb3V0cHV0QnVmZmVyUG9v
bDsKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBtX2lvU3VyZmFjZUJ1ZmZlckF0dHJp
YnV0ZXM7CisgICAgdWludDMyX3QgbV9waXhlbEZvcm1hdDsKKyAgICBJbnRTaXplIG1fc2l6ZTsK
K307CisKK30KKworI2VuZGlmIC8vIFVTRShWSURFT1RPT0xCT1gpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9JbWFnZVRyYW5zZmVyU2Vzc2lvblZULm1t
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvSW1hZ2VUcmFuc2ZlclNlc3Np
b25WVC5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5hYTdmY2NlNjNmYzE2ODEwNzM0MDJkMGY1MmUyNDc1NWFiOWE4
MDhmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y3YvSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5tbQpAQCAtMCwwICsxLDM4MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkltYWdlVHJhbnNmZXJTZXNzaW9uVlQu
aCIKKworI2lmIFVTRShWSURFT1RPT0xCT1gpCisKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBv
cnQgIk1lZGlhU2FtcGxlQVZGT2JqQy5oIgorI2ltcG9ydCA8Q29yZU1lZGlhL0NNRm9ybWF0RGVz
Y3JpcHRpb24uaD4KKyNpbXBvcnQgPENvcmVNZWRpYS9DTVNhbXBsZUJ1ZmZlci5oPgorI2ltcG9y
dCA8cGFsL2NmL0NvcmVNZWRpYVNvZnRMaW5rLmg+CisKKyNpZiBIQVZFKElPU1VSRkFDRSkKKyNp
bmNsdWRlIDxwYWwvc3BpL2NvY29hL0lPU3VyZmFjZVNQSS5oPgorI2VuZGlmCisKKyNpbXBvcnQg
IkNvcmVWaWRlb1NvZnRMaW5rLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK3VzaW5nIG5hbWVz
cGFjZSBQQUw7CisKK3N0YXRpYyBpbmxpbmUgQ0ZTdHJpbmdSZWYgY3ZQaXhlbEZvcm1hdE9wZW5H
TEtleSgpCit7CisjaWYgUExBVEZPUk0oSU9TKSAmJiAhUExBVEZPUk0oSU9TTUFDKQorICAgIHJl
dHVybiBrQ1ZQaXhlbEZvcm1hdE9wZW5HTEVTQ29tcGF0aWJpbGl0eTsKKyNlbHNlCisgICAgcmV0
dXJuIGtDVlBpeGVsQnVmZmVyT3BlbkdMQ29tcGF0aWJpbGl0eUtleTsKKyNlbmRpZgorfQorCitJ
bWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpJbWFnZVRyYW5zZmVyU2Vzc2lvblZUKHVpbnQzMl90IHBp
eGVsRm9ybWF0KQoreworICAgIFZUUGl4ZWxUcmFuc2ZlclNlc3Npb25SZWYgdHJhbnNmZXJTZXNz
aW9uOworICAgIFZUUGl4ZWxUcmFuc2ZlclNlc3Npb25DcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVs
dCwgJnRyYW5zZmVyU2Vzc2lvbik7CisgICAgQVNTRVJUKHRyYW5zZmVyU2Vzc2lvbik7CisgICAg
bV90cmFuc2ZlclNlc3Npb24gPSBhZG9wdENGKHRyYW5zZmVyU2Vzc2lvbik7CisKKyAgICBWVFNl
c3Npb25TZXRQcm9wZXJ0eSh0cmFuc2ZlclNlc3Npb24sIGtWVFBpeGVsVHJhbnNmZXJQcm9wZXJ0
eUtleV9TY2FsaW5nTW9kZSwga1ZUU2NhbGluZ01vZGVfVHJpbSk7CisgICAgVlRTZXNzaW9uU2V0
UHJvcGVydHkodHJhbnNmZXJTZXNzaW9uLCBrVlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXlfRW5h
YmxlSGlnaFNwZWVkVHJhbnNmZXIsIEAoWUVTKSk7CisgICAgVlRTZXNzaW9uU2V0UHJvcGVydHko
dHJhbnNmZXJTZXNzaW9uLCBrVlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXlfUmVhbFRpbWUsIEAo
WUVTKSk7CisjaWYgUExBVEZPUk0oSU9TKSAmJiAhUExBVEZPUk0oSU9TTUFDKQorICAgIFZUU2Vz
c2lvblNldFByb3BlcnR5KHRyYW5zZmVyU2Vzc2lvbiwga1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5
S2V5X0VuYWJsZUhhcmR3YXJlQWNjZWxlcmF0ZWRUcmFuc2ZlciwgQChZRVMpKTsKKyNlbmRpZgor
CisgICAgbV9waXhlbEZvcm1hdCA9IHBpeGVsRm9ybWF0OworfQorCitib29sIEltYWdlVHJhbnNm
ZXJTZXNzaW9uVlQ6OnNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAobV9z
aXplID09IHNpemUgJiYgbV9vdXRwdXRCdWZmZXJQb29sKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIENGRGljdGlvbmFyeVJlZiBwaXhlbEJ1ZmZlck9wdGlvbnMgPSAoX19icmlkZ2UgQ0ZE
aWN0aW9uYXJ5UmVmKSBAeworICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ1ZQaXhlbEJ1
ZmZlcldpZHRoS2V5IDpAKHNpemUud2lkdGgoKSksCisgICAgICAgIChfX2JyaWRnZSBOU1N0cmlu
ZyAqKWtDVlBpeGVsQnVmZmVySGVpZ2h0S2V5OkAoc2l6ZS5oZWlnaHQoKSksCisgICAgICAgIChf
X2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsQnVmZmVyUGl4ZWxGb3JtYXRUeXBlS2V5OkAobV9w
aXhlbEZvcm1hdCksCisgICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWN2UGl4ZWxGb3JtYXRP
cGVuR0xLZXkoKSA6IEAoWUVTKSwKKyAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4
ZWxCdWZmZXJJT1N1cmZhY2VQcm9wZXJ0aWVzS2V5IDogQHsgLyplbXB0eSBkaWN0aW9uYXJ5Ki8g
fSwKKyAgICB9OworCisgICAgQ0ZEaWN0aW9uYXJ5UmVmIHBpeGVsQnVmZmVyUG9vbE9wdGlvbnMg
PSAoX19icmlkZ2UgQ0ZEaWN0aW9uYXJ5UmVmKSBAeworICAgICAgICAoX19icmlkZ2UgTlNTdHJp
bmcgKilrQ1ZQaXhlbEJ1ZmZlclBvb2xNaW5pbXVtQnVmZmVyQ291bnRLZXkgOiBAKDYpCisgICAg
fTsKKworICAgIENWUGl4ZWxCdWZmZXJQb29sUmVmIGJ1ZmZlclBvb2w7CisgICAgYXV0byBzdGF0
dXMgPSBDVlBpeGVsQnVmZmVyUG9vbENyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBwaXhlbEJ1
ZmZlclBvb2xPcHRpb25zLCBwaXhlbEJ1ZmZlck9wdGlvbnMsICZidWZmZXJQb29sKTsKKyAgICBB
U1NFUlQoIXN0YXR1cyk7CisgICAgaWYgKHN0YXR1cyAhPSBrQ1ZSZXR1cm5TdWNjZXNzKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX291dHB1dEJ1ZmZlclBvb2wgPSBhZG9wdENGKGJ1
ZmZlclBvb2wpOworICAgIG1fc2l6ZSA9IHNpemU7CisgICAgbV9pb1N1cmZhY2VCdWZmZXJBdHRy
aWJ1dGVzID0gbnVsbHB0cjsKKworICAgIHJldHVybiB0cnVlOworfQorCitSZXRhaW5QdHI8Q1ZQ
aXhlbEJ1ZmZlclJlZj4gSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y29udmVydFBpeGVsQnVmZmVy
KENWUGl4ZWxCdWZmZXJSZWYgc291cmNlQnVmZmVyLCBjb25zdCBJbnRTaXplJiBzaXplKQorewor
ICAgIGlmIChzb3VyY2VCdWZmZXIgJiYgbV9zaXplID09IEludFNpemUoQ1ZQaXhlbEJ1ZmZlckdl
dFdpZHRoKHNvdXJjZUJ1ZmZlciksIENWUGl4ZWxCdWZmZXJHZXRIZWlnaHQoc291cmNlQnVmZmVy
KSkgJiYgbV9waXhlbEZvcm1hdCA9PSBDVlBpeGVsQnVmZmVyR2V0UGl4ZWxGb3JtYXRUeXBlKHNv
dXJjZUJ1ZmZlcikpCisgICAgICAgIHJldHVybiByZXRhaW5QdHIoc291cmNlQnVmZmVyKTsKKwor
ICAgIGlmICghc291cmNlQnVmZmVyIHx8ICFzZXRTaXplKHNpemUpKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIENWUGl4ZWxCdWZmZXJSZWYgb3V0cHV0QnVmZmVyID0gbnVsbHB0cjsK
KyAgICBhdXRvIHN0YXR1cyA9IENWUGl4ZWxCdWZmZXJQb29sQ3JlYXRlUGl4ZWxCdWZmZXIoa0NG
QWxsb2NhdG9yRGVmYXVsdCwgbV9vdXRwdXRCdWZmZXJQb29sLmdldCgpLCAmb3V0cHV0QnVmZmVy
KTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhLCAiSW1hZ2VU
cmFuc2ZlclNlc3Npb25WVDo6Y29udmVydFBpeGVsQnVmZmVyLCBDVlBpeGVsQnVmZmVyUG9vbENy
ZWF0ZVBpeGVsQnVmZmVyIGZhaWxlZCB3aXRoIGVycm9yICVkIiwgc3RhdGljX2Nhc3Q8aW50Pihz
dGF0dXMpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIGF1dG8gcmVzdWx0
ID0gYWRvcHRDRihvdXRwdXRCdWZmZXIpOworCisgICAgYXV0byBlcnIgPSBWVFBpeGVsVHJhbnNm
ZXJTZXNzaW9uVHJhbnNmZXJJbWFnZShtX3RyYW5zZmVyU2Vzc2lvbi5nZXQoKSwgc291cmNlQnVm
ZmVyLCBvdXRwdXRCdWZmZXIpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgUkVMRUFTRV9MT0co
TWVkaWEsICJJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjb252ZXJ0UGl4ZWxCdWZmZXIsIFZUUGl4
ZWxUcmFuc2ZlclNlc3Npb25UcmFuc2ZlckltYWdlIGZhaWxlZCB3aXRoIGVycm9yICVkIiwgc3Rh
dGljX2Nhc3Q8aW50PihlcnIpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJSZWY+IEltYWdl
VHJhbnNmZXJTZXNzaW9uVlQ6OmNyZWF0ZVBpeGVsQnVmZmVyKENNU2FtcGxlQnVmZmVyUmVmIHNv
dXJjZUJ1ZmZlciwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBhdXRvIGNvbnZlcnRlZFBp
eGVsQnVmZmVyID0gY29udmVydFBpeGVsQnVmZmVyKENNU2FtcGxlQnVmZmVyR2V0SW1hZ2VCdWZm
ZXIoc291cmNlQnVmZmVyKSwgc2l6ZSk7CisgICAgaWYgKCFjb252ZXJ0ZWRQaXhlbEJ1ZmZlcikK
KyAgICAgICAgUkVMRUFTRV9MT0coTWVkaWEsICJJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVh
dGVQaXhlbEJ1ZmZlcjogQ01TYW1wbGVCdWZmZXJHZXRJbWFnZUJ1ZmZlciByZXR1cm5lZCBudWxs
cHRyIik7CisKKyAgICByZXR1cm4gY29udmVydGVkUGl4ZWxCdWZmZXI7Cit9CisKK1JldGFpblB0
cjxDTVNhbXBsZUJ1ZmZlclJlZj4gSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y29udmVydENNU2Ft
cGxlQnVmZmVyKENNU2FtcGxlQnVmZmVyUmVmIHNvdXJjZUJ1ZmZlciwgY29uc3QgSW50U2l6ZSYg
c2l6ZSkKK3sKKyAgICBpZiAoIXNvdXJjZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBhdXRvIGRlc2NyaXB0aW9uID0gQ01TYW1wbGVCdWZmZXJHZXRGb3JtYXREZXNjcmlw
dGlvbihzb3VyY2VCdWZmZXIpOworICAgIGF1dG8gc291cmNlU2l6ZSA9IEZsb2F0U2l6ZShDTVZp
ZGVvRm9ybWF0RGVzY3JpcHRpb25HZXRQcmVzZW50YXRpb25EaW1lbnNpb25zKGRlc2NyaXB0aW9u
LCB0cnVlLCB0cnVlKSk7CisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IHN0YXRpY19jYXN0PENWUGl4
ZWxCdWZmZXJSZWY+KENNU2FtcGxlQnVmZmVyR2V0SW1hZ2VCdWZmZXIoc291cmNlQnVmZmVyKSk7
CisgICAgaWYgKHNpemUgPT0gcm91bmRlZEludFNpemUoc291cmNlU2l6ZSkgJiYgbV9waXhlbEZv
cm1hdCA9PSBDVlBpeGVsQnVmZmVyR2V0UGl4ZWxGb3JtYXRUeXBlKHBpeGVsQnVmZmVyKSkKKyAg
ICAgICAgcmV0dXJuIHJldGFpblB0cihzb3VyY2VCdWZmZXIpOworCisgICAgaWYgKCFzZXRTaXpl
KHNpemUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gY29udmVydGVkUGl4
ZWxCdWZmZXIgPSBjcmVhdGVQaXhlbEJ1ZmZlcihzb3VyY2VCdWZmZXIsIHNpemUpOworICAgIGlm
ICghY29udmVydGVkUGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
Q01JdGVtQ291bnQgaXRlbUNvdW50ID0gMDsKKyAgICBhdXRvIHN0YXR1cyA9IENNU2FtcGxlQnVm
ZmVyR2V0U2FtcGxlVGltaW5nSW5mb0FycmF5KHNvdXJjZUJ1ZmZlciwgMSwgbnVsbHB0ciwgJml0
ZW1Db3VudCk7CisgICAgaWYgKHN0YXR1cyAhPSBub0VycikgeworICAgICAgICBSRUxFQVNFX0xP
RyhNZWRpYSwgIkltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNvbnZlcnRDTVNhbXBsZUJ1ZmZlcjog
Q01TYW1wbGVCdWZmZXJHZXRTYW1wbGVUaW1pbmdJbmZvQXJyYXkgZmFpbGVkIHdpdGggZXJyb3Ig
Y29kZTogJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICB9CisgICAgVmVjdG9yPENNU2FtcGxlVGltaW5nSW5mbz4gdGltaW5nSW5mb0Fy
cmF5OworICAgIENNU2FtcGxlVGltaW5nSW5mbyogdGltZWluZ0luZm9QdHIgPSBudWxscHRyOwor
ICAgIGlmIChpdGVtQ291bnQpIHsKKyAgICAgICAgdGltaW5nSW5mb0FycmF5Lmdyb3coaXRlbUNv
dW50KTsKKyAgICAgICAgc3RhdHVzID0gQ01TYW1wbGVCdWZmZXJHZXRTYW1wbGVUaW1pbmdJbmZv
QXJyYXkoc291cmNlQnVmZmVyLCBpdGVtQ291bnQsIHRpbWluZ0luZm9BcnJheS5kYXRhKCksIG51
bGxwdHIpOworICAgICAgICBpZiAoc3RhdHVzICE9IG5vRXJyKSB7CisgICAgICAgICAgICBSRUxF
QVNFX0xPRyhNZWRpYSwgIkltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNvbnZlcnRDTVNhbXBsZUJ1
ZmZlcjogQ01TYW1wbGVCdWZmZXJHZXRTYW1wbGVUaW1pbmdJbmZvQXJyYXkgZmFpbGVkIHdpdGgg
ZXJyb3IgY29kZTogJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOworICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgdGltZWluZ0luZm9QdHIgPSB0aW1p
bmdJbmZvQXJyYXkuZGF0YSgpOworICAgIH0KKworICAgIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlv
blJlZiBmb3JtYXREZXNjcmlwdGlvbiA9IG51bGxwdHI7CisgICAgc3RhdHVzID0gQ01WaWRlb0Zv
cm1hdERlc2NyaXB0aW9uQ3JlYXRlRm9ySW1hZ2VCdWZmZXIoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
Y29udmVydGVkUGl4ZWxCdWZmZXIuZ2V0KCksICZmb3JtYXREZXNjcmlwdGlvbik7CisgICAgaWYg
KHN0YXR1cyAhPSBub0VycikgeworICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIkltYWdlVHJh
bnNmZXJTZXNzaW9uVlQ6OmNvbnZlcnRDTVNhbXBsZUJ1ZmZlcjogQ01WaWRlb0Zvcm1hdERlc2Ny
aXB0aW9uQ3JlYXRlRm9ySW1hZ2VCdWZmZXIgcmV0dXJuZWQ6ICVkIiwgc3RhdGljX2Nhc3Q8aW50
PihzdGF0dXMpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgQ01TYW1w
bGVCdWZmZXJSZWYgcmVzaXplZFNhbXBsZUJ1ZmZlcjsKKyAgICBzdGF0dXMgPSBDTVNhbXBsZUJ1
ZmZlckNyZWF0ZVJlYWR5V2l0aEltYWdlQnVmZmVyKGtDRkFsbG9jYXRvckRlZmF1bHQsIGNvbnZl
cnRlZFBpeGVsQnVmZmVyLmdldCgpLCBmb3JtYXREZXNjcmlwdGlvbiwgdGltZWluZ0luZm9QdHIs
ICZyZXNpemVkU2FtcGxlQnVmZmVyKTsKKyAgICBDRlJlbGVhc2UoZm9ybWF0RGVzY3JpcHRpb24p
OworICAgIGlmIChzdGF0dXMgIT0gbm9FcnIpIHsKKyAgICAgICAgUkVMRUFTRV9MT0coTWVkaWEs
ICJJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjb252ZXJ0Q01TYW1wbGVCdWZmZXI6IGZhaWxlZCB0
byBjcmVhdGUgQ01TYW1wbGVCdWZmZXIgd2l0aCBlcnJvciBjb2RlOiAlZCIsIHN0YXRpY19jYXN0
PGludD4oc3RhdHVzKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHJl
dHVybiBhZG9wdENGKHJlc2l6ZWRTYW1wbGVCdWZmZXIpOworfQorCitSZXRhaW5QdHI8Q1ZQaXhl
bEJ1ZmZlclJlZj4gSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlUGl4ZWxCdWZmZXIoQ0dJ
bWFnZVJlZiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAoIWltYWdlIHx8
ICFzZXRTaXplKHNpemUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIENWUGl4ZWxC
dWZmZXJSZWYgcmdiQnVmZmVyOworICAgIGF1dG8gaW1hZ2VTaXplID0gSW50U2l6ZShDR0ltYWdl
R2V0V2lkdGgoaW1hZ2UpLCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKSk7CisgICAgYXV0byBzdGF0
dXMgPSBDVlBpeGVsQnVmZmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGltYWdlU2l6ZS53
aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCksIGtDVlBpeGVsRm9ybWF0VHlwZV8zMkFSR0IsIG51
bGxwdHIsICZyZ2JCdWZmZXIpOworICAgIGlmIChzdGF0dXMgIT0ga0NWUmV0dXJuU3VjY2Vzcykg
eworICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIkltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNy
ZWF0ZVBpeGVsQnVmZmVyOiBDVlBpeGVsQnVmZmVyQ3JlYXRlIGZhaWxlZCB3aXRoIGVycm9yIGNv
ZGU6ICVkIiwgc3RhdGljX2Nhc3Q8aW50PihzdGF0dXMpKTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorCisgICAgQ1ZQaXhlbEJ1ZmZlckxvY2tCYXNlQWRkcmVzcyhyZ2JCdWZmZXIs
IDApOworICAgIHZvaWQqIGRhdGEgPSBDVlBpeGVsQnVmZmVyR2V0QmFzZUFkZHJlc3MocmdiQnVm
ZmVyKTsKKyAgICBhdXRvIHJldGFpbmVkUkdCQnVmZmVyID0gYWRvcHRDRihyZ2JCdWZmZXIpOwor
ICAgIGF1dG8gY29udGV4dCA9IENHQml0bWFwQ29udGV4dENyZWF0ZShkYXRhLCBpbWFnZVNpemUu
d2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpLCA4LCBDVlBpeGVsQnVmZmVyR2V0Qnl0ZXNQZXJS
b3cocmdiQnVmZmVyKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwgKENHQml0bWFwSW5mbykga0NHSW1h
Z2VBbHBoYU5vbmVTa2lwRmlyc3QpOworICAgIGlmICghY29udGV4dCkgeworICAgICAgICBSRUxF
QVNFX0xPRyhNZWRpYSwgIkltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNyZWF0ZVBpeGVsQnVmZmVy
OiBDR0JpdG1hcENvbnRleHRDcmVhdGUgcmV0dXJuZWQgbnVsbHB0ciIpOworICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBhdXRvIHJldGFpbmVkQ29udGV4dCA9IGFkb3B0Q0Yo
Y29udGV4dCk7CisgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQsIENHUmVjdE1ha2UoMCwg
MCwgaW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSksIGltYWdlKTsKKyAgICBD
VlBpeGVsQnVmZmVyVW5sb2NrQmFzZUFkZHJlc3MocmdiQnVmZmVyLCAwKTsKKworICAgIHJldHVy
biBjb252ZXJ0UGl4ZWxCdWZmZXIocmdiQnVmZmVyLCBzaXplKTsKK30KKworUmV0YWluUHRyPENN
U2FtcGxlQnVmZmVyUmVmPiBJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVhdGVDTVNhbXBsZUJ1
ZmZlcihDVlBpeGVsQnVmZmVyUmVmIHNvdXJjZUJ1ZmZlciwgY29uc3QgTWVkaWFUaW1lJiBzYW1w
bGVUaW1lLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIGlmICghc291cmNlQnVmZmVyIHx8
ICFzZXRTaXplKHNpemUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gYnVm
ZmVyU2l6ZSA9IEludFNpemUoQ1ZQaXhlbEJ1ZmZlckdldFdpZHRoKHNvdXJjZUJ1ZmZlciksIENW
UGl4ZWxCdWZmZXJHZXRIZWlnaHQoc291cmNlQnVmZmVyKSk7CisgICAgUmV0YWluUHRyPENWUGl4
ZWxCdWZmZXJSZWY+IGlucHV0QnVmZmVyID0gc291cmNlQnVmZmVyOworICAgIGlmIChidWZmZXJT
aXplICE9IG1fc2l6ZSB8fCBtX3BpeGVsRm9ybWF0ICE9IENWUGl4ZWxCdWZmZXJHZXRQaXhlbEZv
cm1hdFR5cGUoc291cmNlQnVmZmVyKSkgeworICAgICAgICBpbnB1dEJ1ZmZlciA9IGNvbnZlcnRQ
aXhlbEJ1ZmZlcihzb3VyY2VCdWZmZXIsIG1fc2l6ZSk7CisgICAgICAgIGlmICghaW5wdXRCdWZm
ZXIpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBDTVZpZGVvRm9y
bWF0RGVzY3JpcHRpb25SZWYgZm9ybWF0RGVzY3JpcHRpb24gPSBudWxscHRyOworICAgIGF1dG8g
c3RhdHVzID0gQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uQ3JlYXRlRm9ySW1hZ2VCdWZmZXIoa0NG
QWxsb2NhdG9yRGVmYXVsdCwgKENWSW1hZ2VCdWZmZXJSZWYpaW5wdXRCdWZmZXIuZ2V0KCksICZm
b3JtYXREZXNjcmlwdGlvbik7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICBSRUxFQVNFX0xP
RyhNZWRpYSwgIkltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNvbnZlcnRQaXhlbEJ1ZmZlcjogZmFp
bGVkIHRvIGluaXRpYWxpemUgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uIHdpdGggZXJyb3IgY29k
ZTogJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9CisKKyAgICBDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGVCdWZmZXI7CisgICAgYXV0
byBjbVRpbWUgPSB0b0NNVGltZShzYW1wbGVUaW1lKTsKKyAgICBDTVNhbXBsZVRpbWluZ0luZm8g
dGltaW5nSW5mbyA9IHsga0NNVGltZUludmFsaWQsIGNtVGltZSwgY21UaW1lIH07CisgICAgc3Rh
dHVzID0gQ01TYW1wbGVCdWZmZXJDcmVhdGVSZWFkeVdpdGhJbWFnZUJ1ZmZlcihrQ0ZBbGxvY2F0
b3JEZWZhdWx0LCAoQ1ZJbWFnZUJ1ZmZlclJlZilpbnB1dEJ1ZmZlci5nZXQoKSwgZm9ybWF0RGVz
Y3JpcHRpb24sICZ0aW1pbmdJbmZvLCAmc2FtcGxlQnVmZmVyKTsKKyAgICBDRlJlbGVhc2UoZm9y
bWF0RGVzY3JpcHRpb24pOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgUkVMRUFTRV9MT0co
TWVkaWEsICJJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjb252ZXJ0UGl4ZWxCdWZmZXI6IGZhaWxl
ZCB0byBpbml0aWFsaXplIENNU2FtcGxlQnVmZmVyIHdpdGggZXJyb3IgY29kZTogJWQiLCBzdGF0
aWNfY2FzdDxpbnQ+KHN0YXR1cykpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisK
KyAgICByZXR1cm4gYWRvcHRDRihzYW1wbGVCdWZmZXIpOworfQorCitSZXRhaW5QdHI8Q01TYW1w
bGVCdWZmZXJSZWY+IEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNyZWF0ZUNNU2FtcGxlQnVmZmVy
KENHSW1hZ2VSZWYgaW1hZ2UsIGNvbnN0IE1lZGlhVGltZSYgc2FtcGxlVGltZSwgY29uc3QgSW50
U2l6ZSYgc2l6ZSkKK3sKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gY3JlYXRlUGl4ZWxCdWZmZXIo
aW1hZ2UsIHNpemUpOworICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgcmV0dXJuIGNyZWF0ZUNNU2FtcGxlQnVmZmVyKHBpeGVsQnVmZmVyLmdldCgp
LCBzYW1wbGVUaW1lLCBzaXplKTsKK30KKworI2lmIEhBVkUoSU9TVVJGQUNFKQorCisjaWYgUExB
VEZPUk0oTUFDKQorc3RhdGljIGludDMyX3Qgcm91bmRVcFRvTWFjcm9ibG9ja011bHRpcGxlKGlu
dDMyX3Qgc2l6ZSkKK3sKKyAgICByZXR1cm4gKHNpemUgKyAxNSkgJiB+MTU7Cit9CisjZW5kaWYK
KworQ0ZEaWN0aW9uYXJ5UmVmIEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmlvU3VyZmFjZVBpeGVs
QnVmZmVyQ3JlYXRpb25PcHRpb25zKElPU3VyZmFjZVJlZiBzdXJmYWNlKQoreworICAgIGlmICht
X2lvU3VyZmFjZUJ1ZmZlckF0dHJpYnV0ZXMpCisgICAgICAgIHJldHVybiBtX2lvU3VyZmFjZUJ1
ZmZlckF0dHJpYnV0ZXMuZ2V0KCk7CisKKyAgICBtX2lvU3VyZmFjZUJ1ZmZlckF0dHJpYnV0ZXMg
PSAoX19icmlkZ2UgQ0ZEaWN0aW9uYXJ5UmVmKSBAeworICAgICAgICAoX19icmlkZ2UgTlNTdHJp
bmcgKiljdlBpeGVsRm9ybWF0T3BlbkdMS2V5KCkgOiBAKFlFUyksCisgICAgfTsKKworI2lmIFBM
QVRGT1JNKE1BQykKKyAgICBhdXRvIGZvcm1hdCA9IElPU3VyZmFjZUdldFBpeGVsRm9ybWF0KHN1
cmZhY2UpOworICAgIGF1dG8gd2lkdGggPSBJT1N1cmZhY2VHZXRXaWR0aChzdXJmYWNlKTsKKyAg
ICBhdXRvIGhlaWdodCA9IElPU3VyZmFjZUdldEhlaWdodChzdXJmYWNlKTsKKyAgICBpbnQzMl90
IGV4dGVuZGVkUmlnaHQgPSByb3VuZFVwVG9NYWNyb2Jsb2NrTXVsdGlwbGUod2lkdGgpIC0gd2lk
dGg7CisgICAgaW50MzJfdCBleHRlbmRlZEJvdHRvbSA9IHJvdW5kVXBUb01hY3JvYmxvY2tNdWx0
aXBsZShoZWlnaHQpIC0gaGVpZ2h0OworCisgICAgaWYgKChmb3JtYXQgPT0ga0NWUGl4ZWxGb3Jt
YXRUeXBlXzQyMFlwQ2JDcjhCaVBsYW5hclZpZGVvUmFuZ2UgfHwgZm9ybWF0ID09IGtDVlBpeGVs
Rm9ybWF0VHlwZV80MjBZcENiQ3I4QmlQbGFuYXJGdWxsUmFuZ2UpCisgICAgICAgICYmIChJT1N1
cmZhY2VHZXRCeXRlc1BlclJvd09mUGxhbmUoc3VyZmFjZSwgMCkgPj0gd2lkdGggKyBleHRlbmRl
ZFJpZ2h0KQorICAgICAgICAmJiAoSU9TdXJmYWNlR2V0Qnl0ZXNQZXJSb3dPZlBsYW5lKHN1cmZh
Y2UsIDEpID49IHdpZHRoICsgZXh0ZW5kZWRSaWdodCkKKyAgICAgICAgJiYgKElPU3VyZmFjZUdl
dEFsbG9jU2l6ZShzdXJmYWNlKSA+PSAoaGVpZ2h0ICsgZXh0ZW5kZWRCb3R0b20pICogSU9TdXJm
YWNlR2V0Qnl0ZXNQZXJSb3dPZlBsYW5lKHN1cmZhY2UsIDApICogMyAvIDIpKSB7CisgICAgICAg
ICAgICBtX2lvU3VyZmFjZUJ1ZmZlckF0dHJpYnV0ZXMgPSAoX19icmlkZ2UgQ0ZEaWN0aW9uYXJ5
UmVmKSBAeworICAgICAgICAgICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsQnVm
ZmVyT3BlbkdMQ29tcGF0aWJpbGl0eUtleSA6IEAoWUVTKSwKKyAgICAgICAgICAgICAgICAoX19i
cmlkZ2UgTlNTdHJpbmcgKilrQ1ZQaXhlbEJ1ZmZlckV4dGVuZGVkUGl4ZWxzUmlnaHRLZXkgOiBA
KGV4dGVuZGVkUmlnaHQpLAorICAgICAgICAgICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtD
VlBpeGVsQnVmZmVyRXh0ZW5kZWRQaXhlbHNCb3R0b21LZXkgOiBAKGV4dGVuZGVkQm90dG9tKQor
ICAgICAgICAgICAgfTsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzdXJmYWNlKTsK
KyNlbmRpZgorCisgICAgcmV0dXJuIG1faW9TdXJmYWNlQnVmZmVyQXR0cmlidXRlcy5nZXQoKTsK
K30KKworUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJSZWY+IEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6
OmNyZWF0ZVBpeGVsQnVmZmVyKElPU3VyZmFjZVJlZiBzdXJmYWNlLCBjb25zdCBJbnRTaXplJiBz
aXplKQoreworICAgIGlmICghc3VyZmFjZSB8fCAhc2V0U2l6ZShzaXplKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBDVlBpeGVsQnVmZmVyUmVmIHBpeGVsQnVmZmVyOworICAgIGF1
dG8gc3RhdHVzID0gQ1ZQaXhlbEJ1ZmZlckNyZWF0ZVdpdGhJT1N1cmZhY2Uoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgc3VyZmFjZSwgaW9TdXJmYWNlUGl4ZWxCdWZmZXJDcmVhdGlvbk9wdGlvbnMoc3Vy
ZmFjZSksICZwaXhlbEJ1ZmZlcik7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICBSRUxFQVNF
X0xPRyhNZWRpYSwgIkNWUGl4ZWxCdWZmZXJDcmVhdGVXaXRoSU9TdXJmYWNlIGZhaWxlZCB3aXRo
IGVycm9yIGNvZGU6ICVkIiwgc3RhdGljX2Nhc3Q8aW50PihzdGF0dXMpKTsKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgYXV0byByZXRhaW5lZEJ1ZmZlciA9IGFkb3B0Q0Yo
cGl4ZWxCdWZmZXIpOworICAgIGlmIChtX3NpemUgPT0gSW50U2l6ZShDVlBpeGVsQnVmZmVyR2V0
V2lkdGgocGl4ZWxCdWZmZXIpLCBDVlBpeGVsQnVmZmVyR2V0SGVpZ2h0KHBpeGVsQnVmZmVyKSkg
JiYgbV9waXhlbEZvcm1hdCA9PSBDVlBpeGVsQnVmZmVyR2V0UGl4ZWxGb3JtYXRUeXBlKHBpeGVs
QnVmZmVyKSkKKyAgICAgICAgcmV0dXJuIHJldGFpbmVkQnVmZmVyOworCisgICAgcmV0dXJuIGNv
bnZlcnRQaXhlbEJ1ZmZlcihwaXhlbEJ1ZmZlciwgc2l6ZSk7Cit9CisKK1JldGFpblB0cjxDTVNh
bXBsZUJ1ZmZlclJlZj4gSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlQ01TYW1wbGVCdWZm
ZXIoSU9TdXJmYWNlUmVmIHN1cmZhY2UsIGNvbnN0IE1lZGlhVGltZSYgc2FtcGxlVGltZSwgY29u
c3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAoIXN1cmZhY2UgfHwgIXNldFNpemUoc2l6ZSkp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IGNyZWF0
ZVBpeGVsQnVmZmVyKHN1cmZhY2UsIHNpemUpOworICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGNyZWF0ZUNNU2FtcGxlQnVmZmVyKHBp
eGVsQnVmZmVyLmdldCgpLCBzYW1wbGVUaW1lLCBzaXplKTsKK30KKyNlbmRpZgorCitSZWZQdHI8
TWVkaWFTYW1wbGU+IEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNvbnZlcnRNZWRpYVNhbXBsZShN
ZWRpYVNhbXBsZSYgc2FtcGxlLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIEFTU0VSVChz
YW1wbGUucGxhdGZvcm1TYW1wbGUoKS50eXBlID09IFBsYXRmb3JtU2FtcGxlOjpDTVNhbXBsZUJ1
ZmZlclR5cGUpOworCisgICAgaWYgKHNpemUgPT0gcm91bmRlZEludFNpemUoc2FtcGxlLnByZXNl
bnRhdGlvblNpemUoKSkpCisgICAgICAgIHJldHVybiAmc2FtcGxlOworCisgICAgaWYgKCFzZXRT
aXplKHNpemUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gcmVzaXplZEJ1
ZmZlciA9IGNvbnZlcnRDTVNhbXBsZUJ1ZmZlcihzYW1wbGUucGxhdGZvcm1TYW1wbGUoKS5zYW1w
bGUuY21TYW1wbGVCdWZmZXIsIHNpemUpOworICAgIGlmICghcmVzaXplZEJ1ZmZlcikKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVh
dGUocmVzaXplZEJ1ZmZlci5nZXQoKSwgc2FtcGxlLnZpZGVvUm90YXRpb24oKSwgc2FtcGxlLnZp
ZGVvTWlycm9yZWQoKSk7Cit9CisKKyNpZiBIQVZFKElPU1VSRkFDRSkKK1JlZlB0cjxNZWRpYVNh
bXBsZT4gSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlTWVkaWFTYW1wbGUoSU9TdXJmYWNl
UmVmIHN1cmZhY2UsIGNvbnN0IE1lZGlhVGltZSYgc2FtcGxlVGltZSwgY29uc3QgSW50U2l6ZSYg
c2l6ZSwgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb24gcm90YXRpb24sIGJvb2wgbWlycm9yZWQp
Cit7CisgICAgYXV0byBzYW1wbGVCdWZmZXIgPSBjcmVhdGVDTVNhbXBsZUJ1ZmZlcihzdXJmYWNl
LCBzYW1wbGVUaW1lLCBzaXplKTsKKyAgICBpZiAoIXNhbXBsZUJ1ZmZlcikKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVhdGUoc2Ft
cGxlQnVmZmVyLmdldCgpLCByb3RhdGlvbiwgbWlycm9yZWQpOworfQorI2VuZGlmCisKK1JlZlB0
cjxNZWRpYVNhbXBsZT4gSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlTWVkaWFTYW1wbGUo
Q0dJbWFnZVJlZiBpbWFnZSwgY29uc3QgTWVkaWFUaW1lJiBzYW1wbGVUaW1lLCBjb25zdCBJbnRT
aXplJiBzaXplLCBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbiByb3RhdGlvbiwgYm9vbCBtaXJy
b3JlZCkKK3sKKyAgICBhdXRvIHNhbXBsZUJ1ZmZlciA9IGNyZWF0ZUNNU2FtcGxlQnVmZmVyKGlt
YWdlLCBzYW1wbGVUaW1lLCBzaXplKTsKKyAgICBpZiAoIXNhbXBsZUJ1ZmZlcikKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVhdGUo
c2FtcGxlQnVmZmVyLmdldCgpLCByb3RhdGlvbiwgbWlycm9yZWQpOworfQorCitSZWZQdHI8TWVk
aWFTYW1wbGU+IEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNyZWF0ZU1lZGlhU2FtcGxlKENNU2Ft
cGxlQnVmZmVyUmVmIGJ1ZmZlciwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgTWVkaWFTYW1wbGU6OlZp
ZGVvUm90YXRpb24gcm90YXRpb24sIGJvb2wgbWlycm9yZWQpCit7CisgICAgYXV0byBzYW1wbGVC
dWZmZXIgPSBjb252ZXJ0Q01TYW1wbGVCdWZmZXIoYnVmZmVyLCBzaXplKTsKKyAgICBpZiAoIXNh
bXBsZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gTWVkaWFT
YW1wbGVBVkZPYmpDOjpjcmVhdGUoc2FtcGxlQnVmZmVyLmdldCgpLCByb3RhdGlvbiwgbWlycm9y
ZWQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoVklERU9U
T09MQk9YKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3Yv
UGl4ZWxCdWZmZXJSZXNpemVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
di9QaXhlbEJ1ZmZlclJlc2l6ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Rj
ZDRhYjIyNDA1MGU0N2ZiNTczYzVhOTNlMzc1Zjg4MjkxNWY1ZC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jdi9QaXhlbEJ1ZmZlclJlc2l6ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFVTRShWSURFT1RPT0xCT1gpCi0K
LSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi10eXBl
ZGVmIHN0cnVjdCBPcGFxdWVWVFBpeGVsVHJhbnNmZXJTZXNzaW9uKiBWVFBpeGVsVHJhbnNmZXJT
ZXNzaW9uUmVmOwotdHlwZWRlZiBzdHJ1Y3QgX19DVkJ1ZmZlciAqQ1ZQaXhlbEJ1ZmZlclJlZjsK
LXR5cGVkZWYgc3RydWN0IF9fQ1ZQaXhlbEJ1ZmZlclBvb2wgKkNWUGl4ZWxCdWZmZXJQb29sUmVm
OwotdHlwZWRlZiBzdHJ1Y3Qgb3BhcXVlQ01TYW1wbGVCdWZmZXIgKkNNU2FtcGxlQnVmZmVyUmVm
OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFBpeGVsQnVmZmVyUmVzaXplciB7Ci1w
dWJsaWM6Ci0gICAgUGl4ZWxCdWZmZXJSZXNpemVyKEludFNpemUsIE9TVHlwZSk7Ci0KLSAgICBS
ZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gcmVzaXplKENWUGl4ZWxCdWZmZXJSZWYpOwotICAg
IFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4gcmVzaXplKENNU2FtcGxlQnVmZmVyUmVmKTsK
LSAgICBib29sIGNhblJlc2l6ZVRvKEludFNpemUgc2l6ZSkgeyByZXR1cm4gc2l6ZSA9PSBtX3Np
emU7IH0KLQotcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8VlRQaXhlbFRyYW5zZmVyU2Vzc2lvblJl
Zj4gbV90cmFuc2ZlclNlc3Npb247Ci0gICAgUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJQb29sUmVm
PiBtX2J1ZmZlclBvb2w7Ci0gICAgSW50U2l6ZSBtX3NpemU7Ci19OwotCi19Ci0KLSNlbmRpZiAv
LyBVU0UoVklERU9UT09MQk9YKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJSZXNpemVyLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJSZXNpemVyLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA2Yzc0MWEwY2YzNTIwMTI2MjlhMDI5MDE4ZmNjNTIyY2RiYmViZTg4Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2N2L1BpeGVsQnVmZmVyUmVzaXplci5tbQorKysgL2Rldi9udWxs
CkBAIC0xLDEzOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2lt
cG9ydCAiUGl4ZWxCdWZmZXJSZXNpemVyLmgiCi0KLSNpZiBVU0UoVklERU9UT09MQk9YKQotCi0j
aW1wb3J0ICJMb2dnaW5nLmgiCi0jaW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4KLQotI2ltcG9y
dCAiQ29yZVZpZGVvU29mdExpbmsuaCIKLSNpbXBvcnQgIlZpZGVvVG9vbGJveFNvZnRMaW5rLmgi
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGl4ZWxCdWZmZXJSZXNpemVyOjpQaXhlbEJ1ZmZl
clJlc2l6ZXIoSW50U2l6ZSBzaXplLCBPU1R5cGUgdmlkZW9Gb3JtYXQpCi17Ci0gICAgVlRQaXhl
bFRyYW5zZmVyU2Vzc2lvblJlZiB0cmFuc2ZlclNlc3Npb247Ci0gICAgVlRQaXhlbFRyYW5zZmVy
U2Vzc2lvbkNyZWF0ZShOVUxMLCAmdHJhbnNmZXJTZXNzaW9uKTsKLSAgICBBU1NFUlQodHJhbnNm
ZXJTZXNzaW9uKTsKLSAgICBtX3RyYW5zZmVyU2Vzc2lvbiA9IGFkb3B0Q0YodHJhbnNmZXJTZXNz
aW9uKTsKLQotICAgIFZUU2Vzc2lvblNldFByb3BlcnR5KHRyYW5zZmVyU2Vzc2lvbiwga1ZUUGl4
ZWxUcmFuc2ZlclByb3BlcnR5S2V5X1NjYWxpbmdNb2RlLCBrVlRTY2FsaW5nTW9kZV9UcmltKTsK
LQotICAgIENGRGljdGlvbmFyeVJlZiBzb3VyY2VQaXhlbEJ1ZmZlck9wdGlvbnMgPSAoX19icmlk
Z2UgQ0ZEaWN0aW9uYXJ5UmVmKSBAewotICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ1ZQ
aXhlbEJ1ZmZlcldpZHRoS2V5IDpAKHNpemUud2lkdGgoKSksCi0gICAgICAgIChfX2JyaWRnZSBO
U1N0cmluZyAqKWtDVlBpeGVsQnVmZmVySGVpZ2h0S2V5OkAoc2l6ZS5oZWlnaHQoKSksCi0gICAg
ICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsQnVmZmVyUGl4ZWxGb3JtYXRUeXBlS2V5
OkAodmlkZW9Gb3JtYXQpLAotI2lmIFBMQVRGT1JNKElPUykgJiYgIVBMQVRGT1JNKElPU01BQykK
LSAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxGb3JtYXRPcGVuR0xFU0NvbXBh
dGliaWxpdHkgOiBAKFlFUyksCi0jZWxzZQotICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilr
Q1ZQaXhlbEJ1ZmZlck9wZW5HTENvbXBhdGliaWxpdHlLZXkgOiBAKFlFUyksCi0jZW5kaWYKLSAg
ICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxCdWZmZXJJT1N1cmZhY2VQcm9wZXJ0
aWVzS2V5IDogQHsgLyplbXB0eSBkaWN0aW9uYXJ5Ki8gfSwKLSAgICB9OwotICAgIENWUGl4ZWxC
dWZmZXJQb29sUmVmIGJ1ZmZlclBvb2w7Ci0gICAgYXV0byBzdGF0dXMgPSBDVlBpeGVsQnVmZmVy
UG9vbENyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBOVUxMLCBzb3VyY2VQaXhlbEJ1ZmZlck9w
dGlvbnMsICZidWZmZXJQb29sKTsKLSAgICBBU1NFUlQoIXN0YXR1cyk7Ci0gICAgaWYgKHN0YXR1
cyAhPSBrQ1ZSZXR1cm5TdWNjZXNzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2J1ZmZlclBv
b2wgPSBhZG9wdENGKGJ1ZmZlclBvb2wpOwotICAgIG1fc2l6ZSA9IHNpemU7Ci19Ci0KLVJldGFp
blB0cjxDVlBpeGVsQnVmZmVyUmVmPiBQaXhlbEJ1ZmZlclJlc2l6ZXI6OnJlc2l6ZShDVlBpeGVs
QnVmZmVyUmVmIGlucHV0QnVmZmVyKQotewotICAgIEFTU0VSVChtX2J1ZmZlclBvb2wgJiYgIW1f
c2l6ZS5pc0VtcHR5KCkpOwotICAgIGlmICghbV9idWZmZXJQb29sIHx8IG1fc2l6ZS5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgUmV0YWluUHRyPENWUGl4ZWxCdWZm
ZXJSZWY+IHJlc3VsdDsKLSAgICBDVlBpeGVsQnVmZmVyUmVmIG91dHB1dEJ1ZmZlciA9IG51bGxw
dHI7Ci0KLSAgICBhdXRvIHN0YXR1cyA9IENWUGl4ZWxCdWZmZXJQb29sQ3JlYXRlUGl4ZWxCdWZm
ZXIoa0NGQWxsb2NhdG9yRGVmYXVsdCwgbV9idWZmZXJQb29sLmdldCgpLCAmb3V0cHV0QnVmZmVy
KTsKLSAgICBpZiAoc3RhdHVzKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhLCAiUGl4ZWxC
dWZmZXJSZXNpemVyOjpyZXNpemUsIENWUGl4ZWxCdWZmZXJQb29sQ3JlYXRlUGl4ZWxCdWZmZXIg
ZmFpbGVkIHdpdGggZXJyb3IgJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOwotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgcmVzdWx0ID0gYWRvcHRDRihvdXRwdXRCdWZm
ZXIpOwotCi0gICAgYXV0byBlcnIgPSBWVFBpeGVsVHJhbnNmZXJTZXNzaW9uVHJhbnNmZXJJbWFn
ZShtX3RyYW5zZmVyU2Vzc2lvbi5nZXQoKSwgaW5wdXRCdWZmZXIsIG91dHB1dEJ1ZmZlcik7Ci0g
ICAgaWYgKGVycikgewotICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIlBpeGVsQnVmZmVyUmVz
aXplcjo6cmVzaXplLCBWVFBpeGVsVHJhbnNmZXJTZXNzaW9uVHJhbnNmZXJJbWFnZSBmYWlsZWQg
d2l0aCBlcnJvciAlZCIsIHN0YXRpY19jYXN0PGludD4oZXJyKSk7Ci0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVJldGFpblB0cjxDTVNh
bXBsZUJ1ZmZlclJlZj4gUGl4ZWxCdWZmZXJSZXNpemVyOjpyZXNpemUoQ01TYW1wbGVCdWZmZXJS
ZWYgc2FtcGxlQnVmZmVyKQotewotICAgIGF1dG8gY29udmVydGVkUGl4ZWxCdWZmZXIgPSByZXNp
emUoQ01TYW1wbGVCdWZmZXJHZXRJbWFnZUJ1ZmZlcihzYW1wbGVCdWZmZXIpKTsKLSAgICBpZiAo
IWNvbnZlcnRlZFBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENN
VmlkZW9Gb3JtYXREZXNjcmlwdGlvblJlZiBmb3JtYXREZXNjcmlwdGlvbiA9IG51bGxwdHI7Ci0g
ICAgYXV0byBzdGF0dXMgPSBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25DcmVhdGVGb3JJbWFnZUJ1
ZmZlcihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBjb252ZXJ0ZWRQaXhlbEJ1ZmZlci5nZXQoKSwgJmZv
cm1hdERlc2NyaXB0aW9uKTsKLSAgICBpZiAoc3RhdHVzICE9IG5vRXJyKSB7Ci0gICAgICAgIFJF
TEVBU0VfTE9HKE1lZGlhLCAiUGl4ZWxCdWZmZXJSZXNpemVyOjpyZXNpemU6IGZhaWxlZCB0byBj
cmVhdGUgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uIHdpdGggZXJyb3IgY29kZTogJWQiLCBzdGF0
aWNfY2FzdDxpbnQ+KHN0YXR1cykpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0K
LSAgICBDTUl0ZW1Db3VudCBpdGVtQ291bnQgPSAwOwotICAgIHN0YXR1cyA9IENNU2FtcGxlQnVm
ZmVyR2V0U2FtcGxlVGltaW5nSW5mb0FycmF5KHNhbXBsZUJ1ZmZlciwgMSwgbnVsbHB0ciwgJml0
ZW1Db3VudCk7Ci0gICAgaWYgKHN0YXR1cyAhPSBub0VycikgewotICAgICAgICBSRUxFQVNFX0xP
RyhNZWRpYSwgIlBpeGVsQnVmZmVyUmVzaXplcjo6cmVzaXplOiBDTVNhbXBsZUJ1ZmZlckdldFNh
bXBsZVRpbWluZ0luZm9BcnJheSBmYWlsZWQgd2l0aCBlcnJvciBjb2RlOiAlZCIsIHN0YXRpY19j
YXN0PGludD4oc3RhdHVzKSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICBW
ZWN0b3I8Q01TYW1wbGVUaW1pbmdJbmZvPiB0aW1pbmdJbmZvQXJyYXk7Ci0gICAgQ01TYW1wbGVU
aW1pbmdJbmZvKiB0aW1laW5nSW5mb1B0ciA9IG51bGxwdHI7Ci0gICAgaWYgKGl0ZW1Db3VudCkg
ewotICAgICAgICB0aW1pbmdJbmZvQXJyYXkuZ3JvdyhpdGVtQ291bnQpOwotICAgICAgICBzdGF0
dXMgPSBDTVNhbXBsZUJ1ZmZlckdldFNhbXBsZVRpbWluZ0luZm9BcnJheShzYW1wbGVCdWZmZXIs
IGl0ZW1Db3VudCwgdGltaW5nSW5mb0FycmF5LmRhdGEoKSwgbnVsbHB0cik7Ci0gICAgICAgIGlm
IChzdGF0dXMgIT0gbm9FcnIpIHsKLSAgICAgICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhLCAiUGl4
ZWxCdWZmZXJSZXNpemVyOjpyZXNpemU6IENNU2FtcGxlQnVmZmVyR2V0U2FtcGxlVGltaW5nSW5m
b0FycmF5IGZhaWxlZCB3aXRoIGVycm9yIGNvZGU6ICVkIiwgc3RhdGljX2Nhc3Q8aW50PihzdGF0
dXMpKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0gICAgICAgIHRp
bWVpbmdJbmZvUHRyID0gdGltaW5nSW5mb0FycmF5LmRhdGEoKTsKLSAgICB9Ci0KLSAgICBDTVNh
bXBsZUJ1ZmZlclJlZiByZXNpemVkU2FtcGxlQnVmZmVyOwotICAgIHN0YXR1cyA9IENNU2FtcGxl
QnVmZmVyQ3JlYXRlUmVhZHlXaXRoSW1hZ2VCdWZmZXIoa0NGQWxsb2NhdG9yRGVmYXVsdCwgY29u
dmVydGVkUGl4ZWxCdWZmZXIuZ2V0KCksIGZvcm1hdERlc2NyaXB0aW9uLCB0aW1laW5nSW5mb1B0
ciwgJnJlc2l6ZWRTYW1wbGVCdWZmZXIpOwotICAgIENGUmVsZWFzZShmb3JtYXREZXNjcmlwdGlv
bik7Ci0gICAgaWYgKHN0YXR1cyAhPSBub0VycikgewotICAgICAgICBSRUxFQVNFX0xPRyhNZWRp
YSwgIlBpeGVsQnVmZmVyUmVzaXplcjo6cmVzaXplOiBmYWlsZWQgdG8gY3JlYXRlIENNU2FtcGxl
QnVmZmVyIHdpdGggZXJyb3IgY29kZTogJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOwot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICByZXR1cm4gYWRvcHRDRihyZXNp
emVkU2FtcGxlQnVmZmVyKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gVVNFKFZJREVPVE9PTEJPWCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAKaW5kZXggODA1MDQzMjdl
M2E2ODI0OTk1ODZmOGQzYzdiOGNlMDQ0ZGEzMDI4Ny4uYjRhMTUxZTRlNzNjMTg0YzAyNDRkMzA2
NjZhYzlmODFjZTAxNjcxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAKQEAgLTQxLDYgKzQxLDcg
QEAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFT
b3VyY2VDYXBhYmlsaXRpZXMuaCIKICNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlQ2VudGVy
LmgiCisjaW5jbHVkZSAiUmVhbHRpbWVWaWRlb1V0aWxpdGllcy5oIgogI2luY2x1ZGUgPHd0Zi9N
YWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL1VVSUQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdIYXNoLmg+CkBAIC0xMzMsMTAgKzEzNCw2IEBAIHZvaWQgUmVhbHRpbWVNZWRpYVNvdXJj
ZTo6bm90aWZ5TXV0ZWRPYnNlcnZlcnMoKSBjb25zdAogICAgIH0pOwogfQogCi12b2lkIFJlYWx0
aW1lTWVkaWFTb3VyY2U6OnNldHRpbmdzRGlkQ2hhbmdlKE9wdGlvblNldDxSZWFsdGltZU1lZGlh
U291cmNlU2V0dGluZ3M6OkZsYWc+KQotewotfQotCiB2b2lkIFJlYWx0aW1lTWVkaWFTb3VyY2U6
Om5vdGlmeVNldHRpbmdzRGlkQ2hhbmdlT2JzZXJ2ZXJzKE9wdGlvblNldDxSZWFsdGltZU1lZGlh
U291cmNlU2V0dGluZ3M6OkZsYWc+IGZsYWdzKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFs
dGltZU1lZGlhU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9S
ZWFsdGltZU1lZGlhU291cmNlLmgKaW5kZXggNzE2Y2U2OWMwMjQwNzZlMmRiZjBmNjY2YmY1OGVj
MjlkMjZkMDQ2NS4uNWUyMWM2ZDA1YTcxZTQxNTFhZjdlNjM0NzY2OTU3MzY2ZjM4NTNlOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRp
YVNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0
aW1lTWVkaWFTb3VyY2UuaApAQCAtMTY1LDYgKzE2NSw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IGJvb2wgaXNJbmNvbWluZ0F1ZGlvU291cmNlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAg
ICB2aXJ0dWFsIGJvb2wgaXNJbmNvbWluZ1ZpZGVvU291cmNlKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KIAorICAgIHZvaWQgc2V0SXNSZW1vdGUoYm9vbCBpc1JlbW90ZSkgeyBtX2lzUmVtb3Rl
ID0gaXNSZW1vdGU7IH0KKyAgICBib29sIGlzUmVtb3RlKCkgY29uc3QgeyByZXR1cm4gbV9pc1Jl
bW90ZTsgfQorCiAgICAgLy8gVGVzdGluZyBvbmx5CiAgICAgdmlydHVhbCB2b2lkIGRlbGF5U2Ft
cGxlcyhTZWNvbmRzKSB7IH07CiAKQEAgLTIwMCw3ICsyMDMsNyBAQCBwcm90ZWN0ZWQ6CiBwcml2
YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzdGFydFByb2R1Y2luZ0RhdGEoKSB7IH0KICAgICB2aXJ0
dWFsIHZvaWQgc3RvcFByb2R1Y2luZ0RhdGEoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0dGlu
Z3NEaWRDaGFuZ2UoT3B0aW9uU2V0PFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RmxhZz4p
OworICAgIHZpcnR1YWwgdm9pZCBzZXR0aW5nc0RpZENoYW5nZShPcHRpb25TZXQ8UmVhbHRpbWVN
ZWRpYVNvdXJjZVNldHRpbmdzOjpGbGFnPikgeyB9CiAKIAogICAgIHZvaWQgZm9yRWFjaE9ic2Vy
dmVyKGNvbnN0IFdURjo6RnVuY3Rpb248dm9pZChPYnNlcnZlciYpPiYpIGNvbnN0OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0
dXJlU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZW
aWRlb0NhcHR1cmVTb3VyY2UuaAppbmRleCAzYjQ5ZjQ2ZmRhM2VjMzI2YzczODUxNzNmYTZjZDI3
ZWNmMjllZjYyLi4yNmJmODMxNTQ1NWIxN2VjODMyMmZiNTkxMWFhOWUwNWU3NjM2MzM3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZWaWRlb0Nh
cHR1cmVTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9t
YWMvQVZWaWRlb0NhcHR1cmVTb3VyY2UuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ5LDcgKzQ5LDcgQEAgT0JKQ19DTEFTUyBX
ZWJDb3JlQVZWaWRlb0NhcHR1cmVTb3VyY2VPYnNlcnZlcjsKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgQVZWaWRlb1ByZXNldDsKLWNsYXNzIFBpeGVsQnVmZmVyUmVzaXplcjsKK2NsYXNz
IEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ7CiAKIGNsYXNzIEFWVmlkZW9DYXB0dXJlU291cmNlIDog
cHVibGljIFJlYWx0aW1lVmlkZW9Tb3VyY2UsIHByaXZhdGUgT3JpZW50YXRpb25Ob3RpZmllcjo6
T2JzZXJ2ZXIgewogcHVibGljOgpAQCAtMTAzLDEzICsxMDMsMTQgQEAgcHJpdmF0ZToKIAogICAg
IGJvb2wgc2V0RnJhbWVSYXRlQ29uc3RyYWludChkb3VibGUgbWluRnJhbWVSYXRlLCBkb3VibGUg
bWF4RnJhbWVSYXRlKTsKIAotICAgIHZvaWQgcHJvY2Vzc05ld0ZyYW1lKFJldGFpblB0cjxDTVNh
bXBsZUJ1ZmZlclJlZj4sIFJldGFpblB0cjxBVkNhcHR1cmVDb25uZWN0aW9uPik7CisgICAgdm9p
ZCBwcm9jZXNzTmV3RnJhbWUoUmVmUHRyPE1lZGlhU2FtcGxlPik7CiAgICAgSW50U2l6ZSBzaXpl
Rm9yUHJlc2V0KE5TU3RyaW5nKik7CiAKICAgICBBVkNhcHR1cmVEZXZpY2UqIGRldmljZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZGV2aWNlLmdldCgpOyB9CiAKLSAgICBSZXRhaW5QdHI8Q01TYW1wbGVC
dWZmZXJSZWY+IG1fYnVmZmVyOworICAgIFJlZlB0cjxNZWRpYVNhbXBsZT4gbV9idWZmZXI7CiAg
ICAgUmV0YWluUHRyPEFWQ2FwdHVyZVZpZGVvRGF0YU91dHB1dD4gbV92aWRlb091dHB1dDsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VUcmFuc2ZlclNlc3Npb25WVD4gbV9pbWFnZVRyYW5zZmVy
U2Vzc2lvbjsKIAogICAgIEludFNpemUgbV9yZXF1ZXN0ZWRTaXplOwogICAgIGludDMyX3QgbV93
aWR0aCB7IDAgfTsKQEAgLTExOCw3ICsxMTksNiBAQCBwcml2YXRlOgogICAgIGludCBtX2Rldmlj
ZU9yaWVudGF0aW9uIHsgMCB9OwogICAgIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uIG1fc2Ft
cGxlUm90YXRpb24geyBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6Tm9uZSB9OwogCi0gICAg
c3RkOjp1bmlxdWVfcHRyPFBpeGVsQnVmZmVyUmVzaXplcj4gbV9waXhlbEJ1ZmZlclJlc2l6ZXI7
CiAgICAgc3RkOjpvcHRpb25hbDxSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M+IG1fY3VycmVu
dFNldHRpbmdzOwogICAgIHN0ZDo6b3B0aW9uYWw8UmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxp
dGllcz4gbV9jYXBhYmlsaXRpZXM7CiAgICAgUmV0YWluUHRyPFdlYkNvcmVBVlZpZGVvQ2FwdHVy
ZVNvdXJjZU9ic2VydmVyPiBtX29iamNPYnNlcnZlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVlZpZGVvQ2FwdHVyZVNvdXJjZS5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVlZpZGVvQ2FwdHVyZVNvdXJj
ZS5tbQppbmRleCA1MTk2MDgyMjJlNjYxNGFiMmVkY2VjMjNmMzUwMDkwNzU5ZDExOTE2Li43YTk2
MjE2Yzg1NGI1ZGFlZWZkMTgzZDdiZDJjOGY3ZDVkMWE1OGYyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZWaWRlb0NhcHR1cmVTb3VyY2UubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0
dXJlU291cmNlLm1tCkBAIC0yOSwxMSArMjksMTEgQEAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFN
KSAmJiBVU0UoQVZGT1VOREFUSU9OKQogCiAjaW1wb3J0ICJJbWFnZUJ1ZmZlci5oIgorI2ltcG9y
dCAiSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5oIgogI2ltcG9ydCAiSW50UmVjdC5oIgogI2ltcG9y
dCAiTG9nZ2luZy5oIgogI2ltcG9ydCAiTWVkaWFDb25zdHJhaW50cy5oIgogI2ltcG9ydCAiTWVk
aWFTYW1wbGVBVkZPYmpDLmgiCi0jaW1wb3J0ICJQaXhlbEJ1ZmZlclJlc2l6ZXIuaCIKICNpbXBv
cnQgIlBsYXRmb3JtTGF5ZXIuaCIKICNpbXBvcnQgIlJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJN
YWMuaCIKICNpbXBvcnQgIlJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncy5oIgpAQCAtMjk5LDcg
KzI5OSw3IEBAIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmIEFWVmlkZW9D
YXB0dXJlU291cmNlOjpjYXBhYmlsaXRpZXMoKQogYm9vbCBBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6
cHJlZmVyc1ByZXNldChWaWRlb1ByZXNldCYgcHJlc2V0KQogewogI2lmIFBMQVRGT1JNKElPUykK
LSAgICByZXR1cm4gIVtzdGF0aWNfY2FzdDxBVlZpZGVvUHJlc2V0Kj4oJnByZXNldCktPmZvcm1h
dC5nZXQoKSBpc1ZpZGVvQmlubmVkXTsKKyAgICByZXR1cm4gW3N0YXRpY19jYXN0PEFWVmlkZW9Q
cmVzZXQqPigmcHJlc2V0KS0+Zm9ybWF0LmdldCgpIGlzVmlkZW9CaW5uZWRdOwogI2Vsc2UKICAg
ICBVTlVTRURfUEFSQU0ocHJlc2V0KTsKICNlbmRpZgpAQCAtNTE5LDI3ICs1MTksMjMgQEAgdm9p
ZCBBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6Y29tcHV0ZVNhbXBsZVJvdGF0aW9uKCkKICAgICB9CiB9
CiAKLXZvaWQgQVZWaWRlb0NhcHR1cmVTb3VyY2U6OnByb2Nlc3NOZXdGcmFtZShSZXRhaW5QdHI8
Q01TYW1wbGVCdWZmZXJSZWY+IHNhbXBsZUJ1ZmZlciwgUmV0YWluUHRyPEFWQ2FwdHVyZUNvbm5l
Y3Rpb25UeXBlPiBjb25uZWN0aW9uKQordm9pZCBBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6cHJvY2Vz
c05ld0ZyYW1lKFJlZlB0cjxNZWRpYVNhbXBsZT4gc2FtcGxlKQogewogICAgIGlmICghaXNQcm9k
dWNpbmdEYXRhKCkgfHwgbXV0ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ01Gb3JtYXRE
ZXNjcmlwdGlvblJlZiBmb3JtYXREZXNjcmlwdGlvbiA9IENNU2FtcGxlQnVmZmVyR2V0Rm9ybWF0
RGVzY3JpcHRpb24oc2FtcGxlQnVmZmVyLmdldCgpKTsKLSAgICBpZiAoIWZvcm1hdERlc2NyaXB0
aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2J1ZmZlciA9IHNhbXBsZUJ1ZmZlcjsKLSAg
ICBDTVZpZGVvRGltZW5zaW9ucyBkaW1lbnNpb25zID0gQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9u
R2V0RGltZW5zaW9ucyhmb3JtYXREZXNjcmlwdGlvbik7CisgICAgbV9idWZmZXIgPSBzYW1wbGU7
CisgICAgYXV0byBkaW1lbnNpb25zID0gcm91bmRlZEludFNpemUoc2FtcGxlLT5wcmVzZW50YXRp
b25TaXplKCkpOwogICAgIGlmIChtX3NhbXBsZVJvdGF0aW9uID09IE1lZGlhU2FtcGxlOjpWaWRl
b1JvdGF0aW9uOjpMZWZ0IHx8IG1fc2FtcGxlUm90YXRpb24gPT0gTWVkaWFTYW1wbGU6OlZpZGVv
Um90YXRpb246OlJpZ2h0KQotICAgICAgICBzdGQ6OnN3YXAoZGltZW5zaW9ucy53aWR0aCwgZGlt
ZW5zaW9ucy5oZWlnaHQpOworICAgICAgICBkaW1lbnNpb25zID0geyBkaW1lbnNpb25zLmhlaWdo
dCgpLCBkaW1lbnNpb25zLndpZHRoKCkgfTsKIAotICAgIGlmIChkaW1lbnNpb25zLndpZHRoICE9
IG1fd2lkdGggfHwgZGltZW5zaW9ucy5oZWlnaHQgIT0gbV9oZWlnaHQpIHsKLSAgICAgICAgbV93
aWR0aCA9IGRpbWVuc2lvbnMud2lkdGg7Ci0gICAgICAgIG1faGVpZ2h0ID0gZGltZW5zaW9ucy5o
ZWlnaHQ7Ci0gICAgICAgIHNldFNpemUoeyBkaW1lbnNpb25zLndpZHRoLCBkaW1lbnNpb25zLmhl
aWdodCB9KTsKKyAgICBpZiAoZGltZW5zaW9ucy53aWR0aCgpICE9IG1fd2lkdGggfHwgZGltZW5z
aW9ucy5oZWlnaHQoKSAhPSBtX2hlaWdodCkgeworICAgICAgICBtX3dpZHRoID0gZGltZW5zaW9u
cy53aWR0aCgpOworICAgICAgICBtX2hlaWdodCA9IGRpbWVuc2lvbnMuaGVpZ2h0KCk7CisgICAg
ICAgIHNldFNpemUoZGltZW5zaW9ucyk7CiAgICAgfQogCi0gICAgdmlkZW9TYW1wbGVBdmFpbGFi
bGUoTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVhdGUobV9idWZmZXIuZ2V0KCksIG1fc2FtcGxlUm90
YXRpb24sIFtjb25uZWN0aW9uIGlzVmlkZW9NaXJyb3JlZF0pKTsKKyAgICBkaXNwYXRjaE1lZGlh
U2FtcGxlVG9PYnNlcnZlcnMoKnNhbXBsZSk7CiB9CiAKIHZvaWQgQVZWaWRlb0NhcHR1cmVTb3Vy
Y2U6OmNhcHR1cmVPdXRwdXREaWRPdXRwdXRTYW1wbGVCdWZmZXJGcm9tQ29ubmVjdGlvbihBVkNh
cHR1cmVPdXRwdXRUeXBlKiwgQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlQnVmZmVyLCBBVkNhcHR1
cmVDb25uZWN0aW9uVHlwZSogY2FwdHVyZUNvbm5lY3Rpb24pCkBAIC01NDksMjQgKzU0NSwyNCBA
QCB2b2lkIEFWVmlkZW9DYXB0dXJlU291cmNlOjpjYXB0dXJlT3V0cHV0RGlkT3V0cHV0U2FtcGxl
QnVmZmVyRnJvbUNvbm5lY3Rpb24oQVZDYQogICAgICAgICByZXR1cm47CiAKICAgICBDTVZpZGVv
RGltZW5zaW9ucyBkaW1lbnNpb25zID0gQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uR2V0RGltZW5z
aW9ucyhmb3JtYXREZXNjcmlwdGlvbik7CisgICAgUmVmUHRyPE1lZGlhU2FtcGxlPiBzYW1wbGU7
CiAgICAgaWYgKGRpbWVuc2lvbnMud2lkdGggIT0gbV9yZXF1ZXN0ZWRTaXplLndpZHRoKCkgfHwg
ZGltZW5zaW9ucy5oZWlnaHQgIT0gbV9yZXF1ZXN0ZWRTaXplLmhlaWdodCgpKSB7Ci0gICAgICAg
IGlmIChtX3BpeGVsQnVmZmVyUmVzaXplciAmJiAhbV9waXhlbEJ1ZmZlclJlc2l6ZXItPmNhblJl
c2l6ZVRvKG1fcmVxdWVzdGVkU2l6ZSkpCi0gICAgICAgICAgICBtX3BpeGVsQnVmZmVyUmVzaXpl
ciA9IG51bGxwdHI7CiAKLSAgICAgICAgaWYgKCFtX3BpeGVsQnVmZmVyUmVzaXplcikKLSAgICAg
ICAgICAgIG1fcGl4ZWxCdWZmZXJSZXNpemVyID0gc3RkOjptYWtlX3VuaXF1ZTxQaXhlbEJ1ZmZl
clJlc2l6ZXI+KG1fcmVxdWVzdGVkU2l6ZSwgYXZWaWRlb0NhcHR1cmVQaXhlbEJ1ZmZlckZvcm1h
dCgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbV9waXhlbEJ1ZmZlclJlc2l6ZXIgPSBudWxscHRy
OworICAgICAgICBpZiAoIW1faW1hZ2VUcmFuc2ZlclNlc3Npb24pCisgICAgICAgICAgICBtX2lt
YWdlVHJhbnNmZXJTZXNzaW9uID0gSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlKGF2Vmlk
ZW9DYXB0dXJlUGl4ZWxCdWZmZXJGb3JtYXQoKSk7CiAKLSAgICBhdXRvIGJ1ZmZlciA9IHJldGFp
blB0cihzYW1wbGVCdWZmZXIpOwotICAgIGlmIChtX3BpeGVsQnVmZmVyUmVzaXplcikgewotICAg
ICAgICBidWZmZXIgPSBtX3BpeGVsQnVmZmVyUmVzaXplci0+cmVzaXplKHNhbXBsZUJ1ZmZlcik7
Ci0gICAgICAgIGlmICghYnVmZmVyKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICAg
ICAgaWYgKG1faW1hZ2VUcmFuc2ZlclNlc3Npb24pIHsKKyAgICAgICAgICAgIHNhbXBsZSA9IG1f
aW1hZ2VUcmFuc2ZlclNlc3Npb24tPmNyZWF0ZU1lZGlhU2FtcGxlKHNhbXBsZUJ1ZmZlciwgbV9y
ZXF1ZXN0ZWRTaXplLCBtX3NhbXBsZVJvdGF0aW9uLCBbY2FwdHVyZUNvbm5lY3Rpb24gaXNWaWRl
b01pcnJvcmVkXSk7CisgICAgICAgICAgICBpZiAoIXNhbXBsZSkgeworICAgICAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBzYW1wbGUgPSBNZWRpYVNhbXBs
ZUFWRk9iakM6OmNyZWF0ZShzYW1wbGVCdWZmZXIsIG1fc2FtcGxlUm90YXRpb24sIFtjYXB0dXJl
Q29ubmVjdGlvbiBpc1ZpZGVvTWlycm9yZWRdKTsKIAotICAgIHNjaGVkdWxlRGVmZXJyZWRUYXNr
KFt0aGlzLCBidWZmZXIsIGNvbm5lY3Rpb24gPSByZXRhaW5QdHIoY2FwdHVyZUNvbm5lY3Rpb24p
XSB7Ci0gICAgICAgIHRoaXMtPnByb2Nlc3NOZXdGcmFtZShidWZmZXIsIGNvbm5lY3Rpb24pOwor
ICAgIHNjaGVkdWxlRGVmZXJyZWRUYXNrKFt0aGlzLCBzYW1wbGUgPSBXVEZNb3ZlKHNhbXBsZSld
IHsKKyAgICAgICAgcHJvY2Vzc05ld0ZyYW1lKHNhbXBsZSk7CiAgICAgfSk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9EaXNwbGF5Q2Fw
dHVyZVNvdXJjZUNvY29hLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9EaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hLmNwcAppbmRleCAzNzNkMGY4YTUzYTVlNmE2
ZWE0YzdlNGJkZjk3NmQ4ZWRkOTU0NDFlLi42YTAzZDhmZjFkZWNiZTE4MWQ2OGE3OGU0NzIxOTQy
NWNmMzRiMGYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9tYWMvRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0Rpc3BsYXlDYXB0dXJlU291cmNlQ29jb2EuY3BwCkBA
IC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk1lZGlhU2Ft
cGxlQVZGT2JqQy5oIgogI2luY2x1ZGUgIlBpeGVsQnVmZmVyQ29uZm9ybWVyQ1YuaCIKLSNpbmNs
dWRlICJQaXhlbEJ1ZmZlclJlc2l6ZXIuaCIKICNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNl
LmgiCiAjaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5oIgogI2luY2x1ZGUgIlJl
YWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncy5oIgpAQCAtNDIsNiArNDEsNyBAQAogI2luY2x1ZGUg
PHBhbC9hdmZvdW5kYXRpb24vTWVkaWFUaW1lQVZGb3VuZGF0aW9uLmg+CiAjaW5jbHVkZSA8cGFs
L2NmL0NvcmVNZWRpYVNvZnRMaW5rLmg+CiAjaW5jbHVkZSA8cGFsL3NwaS9jZi9Db3JlQXVkaW9T
UEkuaD4KKyNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgogI2luY2x1ZGUg
PHN5cy90aW1lLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KQEAgLTcyLDcgKzcyLDcgQEAgY29uc3QgUmVhbHRpbWVNZWRpYVNv
dXJjZUNhcGFiaWxpdGllcyYgRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6Y2FwYWJpbGl0aWVz
KCkKICAgICAgICAgLy8gRklYTUU6IHdoYXQgc2hvdWxkIHRoZXNlIGJlPwogICAgICAgICBjYXBh
YmlsaXRpZXMuc2V0V2lkdGgoQ2FwYWJpbGl0eVZhbHVlT3JSYW5nZSg3MiwgMjg4MCkpOwogICAg
ICAgICBjYXBhYmlsaXRpZXMuc2V0SGVpZ2h0KENhcGFiaWxpdHlWYWx1ZU9yUmFuZ2UoNDUsIDE4
MDApKTsKLSAgICAgICAgY2FwYWJpbGl0aWVzLnNldEZyYW1lUmF0ZShDYXBhYmlsaXR5VmFsdWVP
clJhbmdlKC4wMSwgNjAuMCkpOworICAgICAgICBjYXBhYmlsaXRpZXMuc2V0RnJhbWVSYXRlKENh
cGFiaWxpdHlWYWx1ZU9yUmFuZ2UoLjAxLCAzMC4wKSk7CiAKICAgICAgICAgbV9jYXBhYmlsaXRp
ZXMgPSBXVEZNb3ZlKGNhcGFiaWxpdGllcyk7CiAgICAgfQpAQCAtMTExLDEwICsxMTEsOCBAQCB2
b2lkIERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OnNldHRpbmdzRGlkQ2hhbmdlKE9wdGlvblNl
dDxSZWFsdGltZU1lZGlhU291cmNlUwogICAgIGlmIChzZXR0aW5ncy5jb250YWlucyhSZWFsdGlt
ZU1lZGlhU291cmNlU2V0dGluZ3M6OkZsYWc6OkZyYW1lUmF0ZSkgJiYgbV90aW1lci5pc0FjdGl2
ZSgpKQogICAgICAgICBtX3RpbWVyLnN0YXJ0UmVwZWF0aW5nKDFfcyAvIGZyYW1lUmF0ZSgpKTsK
IAotICAgIGlmIChzZXR0aW5ncy5jb250YWluc0FueSh7IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0
aW5nczo6RmxhZzo6V2lkdGgsIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RmxhZzo6SGVp
Z2h0IH0pKSB7CisgICAgaWYgKHNldHRpbmdzLmNvbnRhaW5zQW55KHsgUmVhbHRpbWVNZWRpYVNv
dXJjZVNldHRpbmdzOjpGbGFnOjpXaWR0aCwgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpG
bGFnOjpIZWlnaHQgfSkpCiAgICAgICAgIG1fYnVmZmVyQXR0cmlidXRlcyA9IG51bGxwdHI7Ci0g
ICAgICAgIG1fbGFzdFNhbXBsZUJ1ZmZlciA9IG51bGxwdHI7Ci0gICAgfQogCiAgICAgbV9jdXJy
ZW50U2V0dGluZ3MgPSB7IH07CiB9CkBAIC0xNTksNyArMTU3LDggQEAgdm9pZCBEaXNwbGF5Q2Fw
dHVyZVNvdXJjZUNvY29hOjpzZXRJbnRyaW5zaWNTaXplKGNvbnN0IEludFNpemUmIHNpemUpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIG1faW50cmluc2ljU2l6ZSA9IHNpemU7Ci0gICAgbV9sYXN0
U2FtcGxlQnVmZmVyID0gbnVsbHB0cjsKKyAgICBub3RpZnlTZXR0aW5nc0RpZENoYW5nZU9ic2Vy
dmVycyh7IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RmxhZzo6V2lkdGgsIFJlYWx0aW1l
TWVkaWFTb3VyY2VTZXR0aW5nczo6RmxhZzo6SGVpZ2h0IH0pOworCiB9CiAKIHZvaWQgRGlzcGxh
eUNhcHR1cmVTb3VyY2VDb2NvYTo6ZW1pdEZyYW1lKCkKQEAgLTE2NywxMjQgKzE2Niw0MCBAQCB2
b2lkIERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OmVtaXRGcmFtZSgpCiAgICAgaWYgKG11dGVk
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBnZW5lcmF0ZUZy
YW1lKCk7Ci0gICAgaWYgKCFwaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KG1fbGFzdFNhbXBsZUJ1ZmZlciAmJiBtX2xhc3RGdWxsU2l6ZWRQaXhlbEJ1ZmZlciAmJiBDRkVx
dWFsKG1fbGFzdEZ1bGxTaXplZFBpeGVsQnVmZmVyLmdldCgpLCBwaXhlbEJ1ZmZlci5nZXQoKSkp
IHsKLSAgICAgICAgdmlkZW9TYW1wbGVBdmFpbGFibGUoTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVh
dGUobV9sYXN0U2FtcGxlQnVmZmVyLmdldCgpKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBtX2xhc3RGdWxsU2l6ZWRQaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVyOwotCi0gICAgaW50
IHdpZHRoID0gV1RGOjpzYWZlQ2FzdDxpbnQ+KENWUGl4ZWxCdWZmZXJHZXRXaWR0aChwaXhlbEJ1
ZmZlci5nZXQoKSkpOwotICAgIGludCBoZWlnaHQgPSBXVEY6OnNhZmVDYXN0PGludD4oQ1ZQaXhl
bEJ1ZmZlckdldEhlaWdodChwaXhlbEJ1ZmZlci5nZXQoKSkpOwotICAgIGF1dG8gcmVxdWVzdGVk
U2l6ZSA9IGZyYW1lU2l6ZSgpOwotICAgIGlmICh3aWR0aCAhPSByZXF1ZXN0ZWRTaXplLndpZHRo
KCkgfHwgaGVpZ2h0ICE9IHJlcXVlc3RlZFNpemUuaGVpZ2h0KCkpIHsKLSAgICAgICAgaWYgKG1f
cGl4ZWxCdWZmZXJSZXNpemVyICYmICFtX3BpeGVsQnVmZmVyUmVzaXplci0+Y2FuUmVzaXplVG8o
cmVxdWVzdGVkU2l6ZSkpCi0gICAgICAgICAgICBtX3BpeGVsQnVmZmVyUmVzaXplciA9IG51bGxw
dHI7Ci0KLSAgICAgICAgaWYgKCFtX3BpeGVsQnVmZmVyUmVzaXplcikKLSAgICAgICAgICAgIG1f
cGl4ZWxCdWZmZXJSZXNpemVyID0gc3RkOjptYWtlX3VuaXF1ZTxQaXhlbEJ1ZmZlclJlc2l6ZXI+
KHJlcXVlc3RlZFNpemUsIHByZWZlcmVkUGl4ZWxCdWZmZXJGb3JtYXQoKSk7Ci0KLSAgICAgICAg
cGl4ZWxCdWZmZXIgPSBtX3BpeGVsQnVmZmVyUmVzaXplci0+cmVzaXplKHBpeGVsQnVmZmVyLmdl
dCgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBtX3BpeGVsQnVmZmVyUmVzaXplciA9IG51bGxw
dHI7Ci0KLSAgICAgICAgYXV0byBwaXhlbEZvcm1hdFR5cGUgPSBDVlBpeGVsQnVmZmVyR2V0UGl4
ZWxGb3JtYXRUeXBlKHBpeGVsQnVmZmVyLmdldCgpKTsKLSAgICAgICAgaWYgKHBpeGVsRm9ybWF0
VHlwZSAhPSBwcmVmZXJlZFBpeGVsQnVmZmVyRm9ybWF0KCkpIHsKLSAgICAgICAgICAgIGlmICgh
bV9waXhlbEJ1ZmZlckNvbmZvcm1lcikgewotICAgICAgICAgICAgICAgIGF1dG8gcHJlZmVycmVk
RnJvbWF0ID0gcHJlZmVyZWRQaXhlbEJ1ZmZlckZvcm1hdCgpOwotICAgICAgICAgICAgICAgIGF1
dG8gY29uZm9ybWVyQXR0cmlidXRlcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJs
ZShudWxscHRyLCAwLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGlj
dGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0gICAgICAgICAgICAgICAgYXV0byB2aWRlb1R5cGUg
PSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKG51bGxwdHIsICBrQ0ZOdW1iZXJTSW50MzJUeXBlLCAg
JnByZWZlcnJlZEZyb21hdCkpOwotICAgICAgICAgICAgICAgIENGRGljdGlvbmFyeVNldFZhbHVl
KGNvbmZvcm1lckF0dHJpYnV0ZXMuZ2V0KCksIGtDVlBpeGVsQnVmZmVyUGl4ZWxGb3JtYXRUeXBl
S2V5LCB2aWRlb1R5cGUuZ2V0KCkpOwotCi0gICAgICAgICAgICAgICAgbV9waXhlbEJ1ZmZlckNv
bmZvcm1lciA9IHN0ZDo6bWFrZV91bmlxdWU8UGl4ZWxCdWZmZXJDb25mb3JtZXJDVj4oY29uZm9y
bWVyQXR0cmlidXRlcy5nZXQoKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHBpeGVs
QnVmZmVyID0gbV9waXhlbEJ1ZmZlckNvbmZvcm1lci0+Y29udmVydChwaXhlbEJ1ZmZlci5nZXQo
KSk7CisgICAgaWYgKCFtX2ltYWdlVHJhbnNmZXJTZXNzaW9uKQorICAgICAgICBtX2ltYWdlVHJh
bnNmZXJTZXNzaW9uID0gSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlKHByZWZlcmVkUGl4
ZWxCdWZmZXJGb3JtYXQoKSk7CisKKyAgICBhdXRvIHNhbXBsZVRpbWUgPSBNZWRpYVRpbWU6OmNy
ZWF0ZVdpdGhEb3VibGUoKGVsYXBzZWRUaW1lKCkgKyAxMDBfbXMpLnNlY29uZHMoKSk7CisgICAg
YXV0byBmcmFtZSA9IGdlbmVyYXRlRnJhbWUoKTsKKyAgICBJbnRTaXplIGltYWdlU2l6ZTsKKyAg
ICBSZWZQdHI8TWVkaWFTYW1wbGU+IHNhbXBsZSA9IFdURjo6c3dpdGNoT24oZnJhbWUsCisgICAg
ICAgIFt0aGlzLCBzYW1wbGVUaW1lLCAmaW1hZ2VTaXplXShSZXRhaW5QdHI8Q0dJbWFnZVJlZj4g
aW1hZ2UpIC0+IFJlZlB0cjxNZWRpYVNhbXBsZT4geworICAgICAgICAgICAgaWYgKCFpbWFnZSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICAgICAgaW1hZ2VTaXpl
ID0gSW50U2l6ZShDR0ltYWdlR2V0V2lkdGgoaW1hZ2UuZ2V0KCkpLCBDR0ltYWdlR2V0SGVpZ2h0
KGltYWdlLmdldCgpKSk7CisgICAgICAgICAgICByZXR1cm4gbV9pbWFnZVRyYW5zZmVyU2Vzc2lv
bi0+Y3JlYXRlTWVkaWFTYW1wbGUoaW1hZ2UuZ2V0KCksIHNhbXBsZVRpbWUsIGltYWdlU2l6ZSk7
CisgICAgICAgIH0sCisgICAgICAgIFt0aGlzLCBzYW1wbGVUaW1lLCAmaW1hZ2VTaXplXShSZXRh
aW5QdHI8SU9TdXJmYWNlUmVmPiBzdXJmYWNlKSAtPiBSZWZQdHI8TWVkaWFTYW1wbGU+IHsKKyAg
ICAgICAgICAgIGlmICghc3VyZmFjZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgICAgICAgICAgaW1hZ2VTaXplID0gSW50U2l6ZShJT1N1cmZhY2VHZXRXaWR0aChzdXJm
YWNlLmdldCgpKSwgSU9TdXJmYWNlR2V0SGVpZ2h0KHN1cmZhY2UuZ2V0KCkpKTsKKyAgICAgICAg
ICAgIHJldHVybiBtX2ltYWdlVHJhbnNmZXJTZXNzaW9uLT5jcmVhdGVNZWRpYVNhbXBsZShzdXJm
YWNlLmdldCgpLCBzYW1wbGVUaW1lLCBpbWFnZVNpemUpOwogICAgICAgICB9Ci0gICAgfQotICAg
IGlmICghcGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbGFzdFNhbXBsZUJ1
ZmZlciA9IHNhbXBsZUJ1ZmZlckZyb21QaXhlbEJ1ZmZlcihwaXhlbEJ1ZmZlci5nZXQoKSk7Ci0g
ICAgaWYgKCFtX2xhc3RTYW1wbGVCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIHZpZGVv
U2FtcGxlQXZhaWxhYmxlKE1lZGlhU2FtcGxlQVZGT2JqQzo6Y3JlYXRlKG1fbGFzdFNhbXBsZUJ1
ZmZlci5nZXQoKSkpOwotfQotCi1SZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+IERpc3BsYXlD
YXB0dXJlU291cmNlQ29jb2E6OnNhbXBsZUJ1ZmZlckZyb21QaXhlbEJ1ZmZlcihDVlBpeGVsQnVm
ZmVyUmVmIHBpeGVsQnVmZmVyKQotewotICAgIGlmICghcGl4ZWxCdWZmZXIpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgQ01UaW1lIHNhbXBsZVRpbWUgPSBDTVRpbWVNYWtlKCgoZWxh
cHNlZFRpbWUoKSArIDEwMF9tcykgKiAxMDApLnNlY29uZHMoKSwgMTAwKTsKLSAgICBDTVNhbXBs
ZVRpbWluZ0luZm8gdGltaW5nSW5mbyA9IHsga0NNVGltZUludmFsaWQsIHNhbXBsZVRpbWUsIHNh
bXBsZVRpbWUgfTsKLQotICAgIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvblJlZiBmb3JtYXREZXNj
cmlwdGlvbiA9IG51bGxwdHI7Ci0gICAgYXV0byBzdGF0dXMgPSBDTVZpZGVvRm9ybWF0RGVzY3Jp
cHRpb25DcmVhdGVGb3JJbWFnZUJ1ZmZlcihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAoQ1ZJbWFnZUJ1
ZmZlclJlZilwaXhlbEJ1ZmZlciwgJmZvcm1hdERlc2NyaXB0aW9uKTsKLSAgICBpZiAoc3RhdHVz
KSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhLCAiRmFpbGVkIHRvIGluaXRpYWxpemUgQ01W
aWRlb0Zvcm1hdERlc2NyaXB0aW9uIHdpdGggZXJyb3IgY29kZTogJWQiLCBzdGF0aWNfY2FzdDxp
bnQ+KHN0YXR1cykpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBDTVNh
bXBsZUJ1ZmZlclJlZiBzYW1wbGVCdWZmZXI7Ci0gICAgc3RhdHVzID0gQ01TYW1wbGVCdWZmZXJD
cmVhdGVSZWFkeVdpdGhJbWFnZUJ1ZmZlcihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAoQ1ZJbWFnZUJ1
ZmZlclJlZilwaXhlbEJ1ZmZlciwgZm9ybWF0RGVzY3JpcHRpb24sICZ0aW1pbmdJbmZvLCAmc2Ft
cGxlQnVmZmVyKTsKLSAgICBDRlJlbGVhc2UoZm9ybWF0RGVzY3JpcHRpb24pOwotICAgIGlmIChz
dGF0dXMpIHsKLSAgICAgICAgUkVMRUFTRV9MT0coTWVkaWEsICJGYWlsZWQgdG8gaW5pdGlhbGl6
ZSBDTVNhbXBsZUJ1ZmZlciB3aXRoIGVycm9yIGNvZGU6ICVkIiwgc3RhdGljX2Nhc3Q8aW50Pihz
dGF0dXMpKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgcmV0dXJuIGFk
b3B0Q0Yoc2FtcGxlQnVmZmVyKTsKLX0KKyAgICApOwogCi0jaWYgSEFWRShJT1NVUkZBQ0UpICYm
IFBMQVRGT1JNKE1BQykKLXN0YXRpYyBpbnQzMl90IHJvdW5kVXBUb01hY3JvYmxvY2tNdWx0aXBs
ZShpbnQzMl90IHNpemUpCi17Ci0gICAgcmV0dXJuIChzaXplICsgMTUpICYgfjE1OwotfQogCi1S
ZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6cGl4
ZWxCdWZmZXJGcm9tSU9TdXJmYWNlKElPU3VyZmFjZVJlZiBzdXJmYWNlKQotewotICAgIGlmICgh
bV9idWZmZXJBdHRyaWJ1dGVzKSB7Ci0gICAgICAgIG1fYnVmZmVyQXR0cmlidXRlcyA9IGFkb3B0
Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZShudWxscHRyLCAwLCAma0NGVHlwZURpY3Rpb25h
cnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0KLSAg
ICAgICAgYXV0byBmb3JtYXQgPSBJT1N1cmZhY2VHZXRQaXhlbEZvcm1hdChzdXJmYWNlKTsKLSAg
ICAgICAgaWYgKGZvcm1hdCA9PSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOEJpUGxhbmFy
VmlkZW9SYW5nZSB8fCBmb3JtYXQgPT0ga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhCaVBs
YW5hckZ1bGxSYW5nZSkgewotCi0gICAgICAgICAgICAvLyBJZiB0aGUgd2lkdGggeCBoZWlnaHQg
aXNuJ3QgYSBtdWx0aXBsZSBvZiAxNiB4IDE2IGFuZCB0aGUgc3VyZmFjZSBoYXMgZXh0cmEgbWVt
b3J5IGluIHRoZSBwbGFuZXMsIHNldCBwaXhlbCBidWZmZXIgYXR0cmlidXRlcyB0byByZWZsZWN0
IGl0LgotICAgICAgICAgICAgYXV0byB3aWR0aCA9IElPU3VyZmFjZUdldFdpZHRoKHN1cmZhY2Up
OwotICAgICAgICAgICAgYXV0byBoZWlnaHQgPSBJT1N1cmZhY2VHZXRIZWlnaHQoc3VyZmFjZSk7
Ci0gICAgICAgICAgICBpbnQzMl90IGV4dGVuZGVkUmlnaHQgPSByb3VuZFVwVG9NYWNyb2Jsb2Nr
TXVsdGlwbGUod2lkdGgpIC0gd2lkdGg7Ci0gICAgICAgICAgICBpbnQzMl90IGV4dGVuZGVkQm90
dG9tID0gcm91bmRVcFRvTWFjcm9ibG9ja011bHRpcGxlKGhlaWdodCkgLSBoZWlnaHQ7Ci0KLSAg
ICAgICAgICAgIGlmICgoSU9TdXJmYWNlR2V0Qnl0ZXNQZXJSb3dPZlBsYW5lKHN1cmZhY2UsIDAp
ID49IHdpZHRoICsgZXh0ZW5kZWRSaWdodCkKLSAgICAgICAgICAgICAgICAmJiAoSU9TdXJmYWNl
R2V0Qnl0ZXNQZXJSb3dPZlBsYW5lKHN1cmZhY2UsIDEpID49IHdpZHRoICsgZXh0ZW5kZWRSaWdo
dCkKLSAgICAgICAgICAgICAgICAmJiAoSU9TdXJmYWNlR2V0QWxsb2NTaXplKHN1cmZhY2UpID49
IChoZWlnaHQgKyBleHRlbmRlZEJvdHRvbSkgKiBJT1N1cmZhY2VHZXRCeXRlc1BlclJvd09mUGxh
bmUoc3VyZmFjZSwgMCkgKiAzIC8gMikpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGNmSW50ID0g
YWRvcHRDRihDRk51bWJlckNyZWF0ZShudWxscHRyLCAga0NGTnVtYmVySW50VHlwZSwgICZleHRl
bmRlZFJpZ2h0KSk7Ci0gICAgICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUobV9idWZm
ZXJBdHRyaWJ1dGVzLmdldCgpLCBrQ1ZQaXhlbEJ1ZmZlckV4dGVuZGVkUGl4ZWxzUmlnaHRLZXks
IGNmSW50LmdldCgpKTsKLSAgICAgICAgICAgICAgICBjZkludCA9IGFkb3B0Q0YoQ0ZOdW1iZXJD
cmVhdGUobnVsbHB0ciwgIGtDRk51bWJlckludFR5cGUsICAmZXh0ZW5kZWRCb3R0b20pKTsKLSAg
ICAgICAgICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShtX2J1ZmZlckF0dHJpYnV0ZXMuZ2V0
KCksIGtDVlBpeGVsQnVmZmVyRXh0ZW5kZWRQaXhlbHNCb3R0b21LZXksIGNmSW50LmdldCgpKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIENGRGljdGlvbmFyeVNldFZhbHVl
KG1fYnVmZmVyQXR0cmlidXRlcy5nZXQoKSwga0NWUGl4ZWxCdWZmZXJPcGVuR0xDb21wYXRpYmls
aXR5S2V5LCBrQ0ZCb29sZWFuVHJ1ZSk7CisgICAgaWYgKCFzYW1wbGUpIHsKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBDVlBpeGVs
QnVmZmVyUmVmIHBpeGVsQnVmZmVyOwotICAgIGF1dG8gc3RhdHVzID0gQ1ZQaXhlbEJ1ZmZlckNy
ZWF0ZVdpdGhJT1N1cmZhY2Uoa0NGQWxsb2NhdG9yRGVmYXVsdCwgc3VyZmFjZSwgbV9idWZmZXJB
dHRyaWJ1dGVzLmdldCgpLCAmcGl4ZWxCdWZmZXIpOwotICAgIGlmIChzdGF0dXMpIHsKLSAgICAg
ICAgUkVMRUFTRV9MT0coTWVkaWEsICJDVlBpeGVsQnVmZmVyQ3JlYXRlV2l0aElPU3VyZmFjZSBm
YWlsZWQgd2l0aCBlcnJvciBjb2RlOiAlZCIsIHN0YXRpY19jYXN0PGludD4oc3RhdHVzKSk7Ci0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KKyAgICBpZiAobV9pbnRyaW5zaWNTaXplICE9
IGltYWdlU2l6ZSkKKyAgICAgICAgc2V0SW50cmluc2ljU2l6ZShpbWFnZVNpemUpOwogCi0gICAg
cmV0dXJuIGFkb3B0Q0YocGl4ZWxCdWZmZXIpOworICAgIHZpZGVvU2FtcGxlQXZhaWxhYmxlKCpz
YW1wbGUuZ2V0KCkpOwogfQotI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0Rpc3BsYXlD
YXB0dXJlU291cmNlQ29jb2EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9EaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hLmgKaW5kZXggYmZlNDBiODYwNTgxZjFjZGI5
MzFiMzVjYmY0N2ZmMDcyYzNiYWFhNS4uOWMwOWVjOGQzMjE0MDI0ZDRlNmI2N2QyYmYwMjJmZGQw
MzRmMzVhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
bWFjL0Rpc3BsYXlDYXB0dXJlU291cmNlQ29jb2EuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYS5oCkBAIC0yOCwx
MiArMjgsMTQgQEAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogCiAjaW5jbHVkZSAiQ2FwdHVy
ZURldmljZS5oIgorI2luY2x1ZGUgIkltYWdlVHJhbnNmZXJTZXNzaW9uVlQuaCIKICNpbmNsdWRl
ICJSZWFsdGltZU1lZGlhU291cmNlLmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAordHlwZWRlZiBzdHJ1Y3QgQ0dJbWFnZSAqQ0dJbWFn
ZVJlZjsKIHR5cGVkZWYgc3RydWN0IF9fQ1ZCdWZmZXIgKkNWUGl4ZWxCdWZmZXJSZWY7CiB0eXBl
ZGVmIHN0cnVjdCBfX0lPU3VyZmFjZSAqSU9TdXJmYWNlUmVmOwogCkBAIC00NCw4ICs0Niw4IEBA
IGNsYXNzIE1lZGlhVGltZTsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ2FwdHVyZURl
dmljZUluZm87CitjbGFzcyBJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOwogY2xhc3MgUGl4ZWxCdWZm
ZXJDb25mb3JtZXJDVjsKLWNsYXNzIFBpeGVsQnVmZmVyUmVzaXplcjsKIAogY2xhc3MgRGlzcGxh
eUNhcHR1cmVTb3VyY2VDb2NvYSA6IHB1YmxpYyBSZWFsdGltZU1lZGlhU291cmNlIHsKIHB1Ymxp
YzoKQEAgLTU0LDcgKzU2LDkgQEAgcHJvdGVjdGVkOgogICAgIERpc3BsYXlDYXB0dXJlU291cmNl
Q29jb2EoU3RyaW5nJiYgbmFtZSk7CiAgICAgdmlydHVhbCB+RGlzcGxheUNhcHR1cmVTb3VyY2VD
b2NvYSgpOwogCi0gICAgdmlydHVhbCBSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gZ2VuZXJh
dGVGcmFtZSgpID0gMDsKKyAgICB1c2luZyBEaXNwbGF5RnJhbWVUeXBlID0gV1RGOjpWYXJpYW50
PFJldGFpblB0cjxDR0ltYWdlUmVmPiwgUmV0YWluUHRyPElPU3VyZmFjZVJlZj4+OworICAgIHZp
cnR1YWwgRGlzcGxheUZyYW1lVHlwZSBnZW5lcmF0ZUZyYW1lKCkgPSAwOworCiAgICAgdmlydHVh
bCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M6OkRpc3BsYXlTdXJmYWNlVHlwZSBzdXJmYWNl
VHlwZSgpIGNvbnN0ID0gMDsKIAogICAgIHZvaWQgc3RhcnRQcm9kdWNpbmdEYXRhKCkgb3ZlcnJp
ZGU7CkBAIC02MiwxMSArNjYsNiBAQCBwcm90ZWN0ZWQ6CiAKICAgICBTZWNvbmRzIGVsYXBzZWRU
aW1lKCk7CiAKLSAgICBSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+IHNhbXBsZUJ1ZmZlckZy
b21QaXhlbEJ1ZmZlcihDVlBpeGVsQnVmZmVyUmVmKTsKLSNpZiBIQVZFKElPU1VSRkFDRSkKLSAg
ICBSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gcGl4ZWxCdWZmZXJGcm9tSU9TdXJmYWNlKElP
U3VyZmFjZVJlZik7Ci0jZW5kaWYKLQogICAgIHZvaWQgc2V0dGluZ3NEaWRDaGFuZ2UoT3B0aW9u
U2V0PFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RmxhZz4pIG92ZXJyaWRlOwogCiAgICAg
Y29uc3QgSW50U2l6ZSYgaW50cmluc2ljU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW50cmluc2lj
U2l6ZTsgfQpAQCAtOTMsMTAgKzkyLDcgQEAgcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8Q0ZNdXRh
YmxlRGljdGlvbmFyeVJlZj4gbV9idWZmZXJBdHRyaWJ1dGVzOwogICAgIFJ1bkxvb3A6OlRpbWVy
PERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E+IG1fdGltZXI7CiAKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8UGl4ZWxCdWZmZXJSZXNpemVyPiBtX3BpeGVsQnVmZmVyUmVzaXplcjsKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8UGl4ZWxCdWZmZXJDb25mb3JtZXJDVj4gbV9waXhlbEJ1ZmZlckNvbmZvcm1lcjsK
LSAgICBSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gbV9sYXN0RnVsbFNpemVkUGl4ZWxCdWZm
ZXI7Ci0gICAgUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBtX2xhc3RTYW1wbGVCdWZmZXI7
CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ+IG1faW1hZ2VUcmFu
c2ZlclNlc3Npb247CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9T
b3VyY2VNYWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2Nr
UmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5oCmluZGV4IDljNzRkZGUxODMxZTQ3MWExMDc2MDFiMDNl
NjY1NDdjNzY5YTA4ZWEuLmU4YmU4MmY2OGY3YzY5MTE1MjE4ODkxY2Q0NDY5ODNkZjY5NjI2YjQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2Nr
UmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5oCkBAIC00Myw3ICs0Myw3
IEBAIHR5cGVkZWYgc3RydWN0IF9fQ1ZQaXhlbEJ1ZmZlclBvb2wgKkNWUGl4ZWxCdWZmZXJQb29s
UmVmOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFBpeGVsQnVmZmVyUmVzaXplcjsK
K2NsYXNzIEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ7CiAKIGNsYXNzIE1vY2tSZWFsdGltZVZpZGVv
U291cmNlTWFjIGZpbmFsIDogcHVibGljIE1vY2tSZWFsdGltZVZpZGVvU291cmNlLCBwcml2YXRl
IE9yaWVudGF0aW9uTm90aWZpZXI6Ok9ic2VydmVyIHsKIHB1YmxpYzoKQEAgLTUzLDE0ICs1Mywx
MCBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZTsK
ICAgICBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYyhTdHJpbmcmJiBkZXZpY2VJRCwgU3RyaW5n
JiYgbmFtZSwgU3RyaW5nJiYgaGFzaFNhbHQpOwogCi0gICAgUmV0YWluUHRyPENNU2FtcGxlQnVm
ZmVyUmVmPiBDTVNhbXBsZUJ1ZmZlckZyb21QaXhlbEJ1ZmZlcihDVlBpeGVsQnVmZmVyUmVmKTsK
LSAgICBSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gcGl4ZWxCdWZmZXJGcm9tQ0dJbWFnZShD
R0ltYWdlUmVmKSBjb25zdDsKLQogICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBj
b25zdDsKICAgICB2b2lkIHVwZGF0ZVNhbXBsZUJ1ZmZlcigpIGZpbmFsOwogICAgIHZvaWQgc2V0
dGluZ3NEaWRDaGFuZ2UoT3B0aW9uU2V0PFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6Rmxh
Zz4pIGZpbmFsOwogICAgIGJvb2wgY2FuUmVzaXplVmlkZW9GcmFtZXMoKSBjb25zdCBmaW5hbCB7
IHJldHVybiB0cnVlOyB9Ci0gICAgdm9pZCBzZXRTaXplQW5kRnJhbWVSYXRlV2l0aFByZXNldChJ
bnRTaXplLCBkb3VibGUsIFJlZlB0cjxWaWRlb1ByZXNldD4pIGZpbmFsOwogCiAgICAgdm9pZCBv
cmllbnRhdGlvbkNoYW5nZWQoaW50IG9yaWVudGF0aW9uKSBmaW5hbDsKICAgICB2b2lkIG1vbml0
b3JPcmllbnRhdGlvbihPcmllbnRhdGlvbk5vdGlmaWVyJikgZmluYWw7CkBAIC02OCw3ICs2NCw3
IEBAIHByaXZhdGU6CiAgICAgbXV0YWJsZSBSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclBvb2xSZWY+
IG1fYnVmZmVyUG9vbDsKICAgICBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbiBtX2RldmljZU9y
aWVudGF0aW9uIHsgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246Ok5vbmUgfTsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8UGl4ZWxCdWZmZXJDb25mb3JtZXJDVj4gbV9waXhlbEJ1ZmZlckNvbmZvcm1l
cjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UGl4ZWxCdWZmZXJSZXNpemVyPiBtX3BpeGVsQnVmZmVy
UmVzaXplcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VUcmFuc2ZlclNlc3Npb25WVD4gbV9p
bWFnZVRyYW5zZmVyU2Vzc2lvbjsKICAgICBJbnRTaXplIG1fcHJlc2V0U2l6ZTsKIH07CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVh
bHRpbWVWaWRlb1NvdXJjZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbQppbmRleCAyM2ExNjk2MmI1Mzk0
MTg0YzVmNjU0ZTllYzVlMWQxZmU5MGNkMjlhLi43MjU5ZGIxZTg1ZDBmMmRmNjFlNDRlYmY3ZTVl
MzA5NDE0NGZlMzY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLm1t
CkBAIC0zNCwxMCArMzQsMTAgQEAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogI2ltcG9ydCAi
R3JhcGhpY3NDb250ZXh0Q0cuaCIKICNpbXBvcnQgIkltYWdlQnVmZmVyLmgiCisjaW1wb3J0ICJJ
bWFnZVRyYW5zZmVyU2Vzc2lvblZULmgiCiAjaW1wb3J0ICJNZWRpYUNvbnN0cmFpbnRzLmgiCiAj
aW1wb3J0ICJNZWRpYVNhbXBsZUFWRk9iakMuaCIKICNpbXBvcnQgIk5vdEltcGxlbWVudGVkLmgi
Ci0jaW1wb3J0ICJQaXhlbEJ1ZmZlclJlc2l6ZXIuaCIKICNpbXBvcnQgIlBsYXRmb3JtTGF5ZXIu
aCIKICNpbXBvcnQgIlJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncy5oIgogI2ltcG9ydCAiUmVh
bHRpbWVWaWRlb1V0aWxpdGllcy5oIgpAQCAtNTEsOCArNTEsNiBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogdXNpbmcgbmFtZXNwYWNlIFBBTDsKIAotc3RhdGljIGNvbnN0IGludCB2aWRlb1NhbXBs
ZVJhdGUgPSA5MDAwMDsKLQogQ2FwdHVyZVNvdXJjZU9yRXJyb3IgTW9ja1JlYWx0aW1lVmlkZW9T
b3VyY2U6OmNyZWF0ZShTdHJpbmcmJiBkZXZpY2VJRCwgU3RyaW5nJiYgbmFtZSwgU3RyaW5nJiYg
aGFzaFNhbHQsIGNvbnN0IE1lZGlhQ29uc3RyYWludHMqIGNvbnN0cmFpbnRzKQogewogI2lmbmRl
ZiBOREVCVUcKQEAgLTc1LDk4ICs3MywyNCBAQCBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYzo6
TW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMoU3RyaW5nJiYgZGV2aWNlSUQsIFN0cmluZwogewog
fQogCi1SZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+IE1vY2tSZWFsdGltZVZpZGVvU291cmNl
TWFjOjpDTVNhbXBsZUJ1ZmZlckZyb21QaXhlbEJ1ZmZlcihDVlBpeGVsQnVmZmVyUmVmIHBpeGVs
QnVmZmVyKQotewotICAgIGlmICghcGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIAotICAgIENNVGltZSBzYW1wbGVUaW1lID0gQ01UaW1lTWFrZSgoKGVsYXBzZWRUaW1l
KCkgKyAxMDBfbXMpICogdmlkZW9TYW1wbGVSYXRlKS5zZWNvbmRzKCksIHZpZGVvU2FtcGxlUmF0
ZSk7Ci0gICAgQ01TYW1wbGVUaW1pbmdJbmZvIHRpbWluZ0luZm8gPSB7IGtDTVRpbWVJbnZhbGlk
LCBzYW1wbGVUaW1lLCBzYW1wbGVUaW1lIH07Ci0KLSAgICBDTVZpZGVvRm9ybWF0RGVzY3JpcHRp
b25SZWYgZm9ybWF0RGVzY3JpcHRpb24gPSBudWxscHRyOwotICAgIE9TU3RhdHVzIHN0YXR1cyA9
IENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkNyZWF0ZUZvckltYWdlQnVmZmVyKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIChDVkltYWdlQnVmZmVyUmVmKXBpeGVsQnVmZmVyLCAmZm9ybWF0RGVzY3JpcHRp
b24pOwotICAgIGlmIChzdGF0dXMgIT0gbm9FcnIpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWls
ZWQgdG8gaW5pdGlhbGl6ZSBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb24gd2l0aCBlcnJvciBjb2Rl
OiAlZCIsIHN0YXR1cyk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIENN
U2FtcGxlQnVmZmVyUmVmIHNhbXBsZUJ1ZmZlcjsKLSAgICBzdGF0dXMgPSBDTVNhbXBsZUJ1ZmZl
ckNyZWF0ZVJlYWR5V2l0aEltYWdlQnVmZmVyKGtDRkFsbG9jYXRvckRlZmF1bHQsIChDVkltYWdl
QnVmZmVyUmVmKXBpeGVsQnVmZmVyLCBmb3JtYXREZXNjcmlwdGlvbiwgJnRpbWluZ0luZm8sICZz
YW1wbGVCdWZmZXIpOwotICAgIENGUmVsZWFzZShmb3JtYXREZXNjcmlwdGlvbik7Ci0gICAgaWYg
KHN0YXR1cyAhPSBub0VycikgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBpbml0aWFs
aXplIENNU2FtcGxlQnVmZmVyIHdpdGggZXJyb3IgY29kZTogJWQiLCBzdGF0dXMpOwotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICByZXR1cm4gYWRvcHRDRihzYW1wbGVCdWZm
ZXIpOwotfQotCi1SZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gTW9ja1JlYWx0aW1lVmlkZW9T
b3VyY2VNYWM6OnBpeGVsQnVmZmVyRnJvbUNHSW1hZ2UoQ0dJbWFnZVJlZiBpbWFnZSkgY29uc3QK
LXsKLSAgICBzdGF0aWMgQ0dDb2xvclNwYWNlUmVmIHNSR0JDb2xvclNwYWNlID0gc1JHQkNvbG9y
U3BhY2VSZWYoKTsKLQotICAgIENHU2l6ZSBpbWFnZVNpemUgPSBDR1NpemVNYWtlKENHSW1hZ2VH
ZXRXaWR0aChpbWFnZSksIENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpKTsKLSAgICBpZiAoIW1fYnVm
ZmVyUG9vbCkgewotICAgICAgICBDVlBpeGVsQnVmZmVyUG9vbFJlZiBidWZmZXJQb29sOwotICAg
ICAgICBDRkRpY3Rpb25hcnlSZWYgc291cmNlUGl4ZWxCdWZmZXJPcHRpb25zID0gKF9fYnJpZGdl
IENGRGljdGlvbmFyeVJlZikgQHsKLSAgICAgICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtD
VlBpeGVsQnVmZmVyUGl4ZWxGb3JtYXRUeXBlS2V5IDogQChrQ1ZQaXhlbEZvcm1hdFR5cGVfMzJB
UkdCKSwKLSAgICAgICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsQnVmZmVyV2lk
dGhLZXkgOiBAKGltYWdlU2l6ZS53aWR0aCksCi0gICAgICAgICAgICAoX19icmlkZ2UgTlNTdHJp
bmcgKilrQ1ZQaXhlbEJ1ZmZlckhlaWdodEtleSA6IEAoaW1hZ2VTaXplLmhlaWdodCksCi0jaWYg
UExBVEZPUk0oSU9TKQotICAgICAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxG
b3JtYXRPcGVuR0xFU0NvbXBhdGliaWxpdHkgOiBAKFlFUyksCi0jZWxzZQotICAgICAgICAgICAg
KF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxCdWZmZXJPcGVuR0xDb21wYXRpYmlsaXR5S2V5
IDogQChZRVMpLAotI2VuZGlmCi0gICAgICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ1ZQ
aXhlbEJ1ZmZlcklPU3VyZmFjZVByb3BlcnRpZXNLZXkgOiBAey8qZW1wdHkgZGljdGlvbmFyeSov
fQotICAgICAgICB9OwotCi0gICAgICAgIENGRGljdGlvbmFyeVJlZiBwaXhlbEJ1ZmZlclBvb2xP
cHRpb25zID0gKF9fYnJpZGdlIENGRGljdGlvbmFyeVJlZikgQHsKLSAgICAgICAgICAgKF9fYnJp
ZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxCdWZmZXJQb29sTWluaW11bUJ1ZmZlckNvdW50S2V5IDog
QCg0KQotICAgICAgICB9OwotCi0gICAgICAgIENWUmV0dXJuIHN0YXR1cyA9IENWUGl4ZWxCdWZm
ZXJQb29sQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIHBpeGVsQnVmZmVyUG9vbE9wdGlvbnMs
IHNvdXJjZVBpeGVsQnVmZmVyT3B0aW9ucywgJmJ1ZmZlclBvb2wpOwotICAgICAgICBpZiAoc3Rh
dHVzICE9IGtDVlJldHVyblN1Y2Nlc3MpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgICAgICBtX2J1ZmZlclBvb2wgPSBhZG9wdENGKGJ1ZmZlclBvb2wpOwotICAgIH0KLQotICAg
IENWUGl4ZWxCdWZmZXJSZWYgcGl4ZWxCdWZmZXI7Ci0gICAgQ1ZSZXR1cm4gc3RhdHVzID0gQ1ZQ
aXhlbEJ1ZmZlclBvb2xDcmVhdGVQaXhlbEJ1ZmZlcihudWxscHRyLCBtX2J1ZmZlclBvb2wuZ2V0
KCksICZwaXhlbEJ1ZmZlcik7Ci0gICAgaWYgKHN0YXR1cyAhPSBrQ1ZSZXR1cm5TdWNjZXNzKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENWUGl4ZWxCdWZmZXJMb2NrQmFzZUFkZHJl
c3MocGl4ZWxCdWZmZXIsIDApOwotICAgIHZvaWQqIGRhdGEgPSBDVlBpeGVsQnVmZmVyR2V0QmFz
ZUFkZHJlc3MocGl4ZWxCdWZmZXIpOwotICAgIGF1dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRt
YXBDb250ZXh0Q3JlYXRlKGRhdGEsIGltYWdlU2l6ZS53aWR0aCwgaW1hZ2VTaXplLmhlaWdodCwg
OCwgQ1ZQaXhlbEJ1ZmZlckdldEJ5dGVzUGVyUm93KHBpeGVsQnVmZmVyKSwgc1JHQkNvbG9yU3Bh
Y2UsIChDR0JpdG1hcEluZm8pIGtDR0ltYWdlQWxwaGFOb25lU2tpcEZpcnN0KSk7Ci0gICAgQ0dD
b250ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgQ0dJbWFnZUdl
dFdpZHRoKGltYWdlKSwgQ0dJbWFnZUdldEhlaWdodChpbWFnZSkpLCBpbWFnZSk7Ci0gICAgQ1ZQ
aXhlbEJ1ZmZlclVubG9ja0Jhc2VBZGRyZXNzKHBpeGVsQnVmZmVyLCAwKTsKLQotICAgIHJldHVy
biBhZG9wdENGKHBpeGVsQnVmZmVyKTsKLX0KLQogdm9pZCBNb2NrUmVhbHRpbWVWaWRlb1NvdXJj
ZU1hYzo6dXBkYXRlU2FtcGxlQnVmZmVyKCkKIHsKICAgICBhdXRvIGltYWdlQnVmZmVyID0gdGhp
cy0+aW1hZ2VCdWZmZXIoKTsKICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm47
CiAKLSAgICBhdXRvIHBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJGcm9tQ0dJbWFnZShpbWFnZUJ1
ZmZlci0+Y29weUltYWdlKCktPm5hdGl2ZUltYWdlKCkuZ2V0KCkpOwotICAgIGlmIChtX3BpeGVs
QnVmZmVyUmVzaXplcikKLSAgICAgICAgcGl4ZWxCdWZmZXIgPSBtX3BpeGVsQnVmZmVyUmVzaXpl
ci0+cmVzaXplKHBpeGVsQnVmZmVyLmdldCgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKCFt
X3BpeGVsQnVmZmVyQ29uZm9ybWVyKSB7Ci0gICAgICAgICAgICBtX3BpeGVsQnVmZmVyQ29uZm9y
bWVyID0gc3RkOjptYWtlX3VuaXF1ZTxQaXhlbEJ1ZmZlckNvbmZvcm1lckNWPigoX19icmlkZ2Ug
Q0ZEaWN0aW9uYXJ5UmVmKUB7Ci0gICAgICAgICAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICop
a0NWUGl4ZWxCdWZmZXJQaXhlbEZvcm1hdFR5cGVLZXk6IEAocHJlZmVyZWRQaXhlbEJ1ZmZlckZv
cm1hdCgpKQotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwaXhlbEJ1ZmZl
ciA9IG1fcGl4ZWxCdWZmZXJDb25mb3JtZXItPmNvbnZlcnQocGl4ZWxCdWZmZXIuZ2V0KCkpOwot
ICAgIH0KLSAgICBhdXRvIHNhbXBsZUJ1ZmZlciA9IENNU2FtcGxlQnVmZmVyRnJvbVBpeGVsQnVm
ZmVyKHBpeGVsQnVmZmVyLmdldCgpKTsKKyAgICBpZiAoIW1faW1hZ2VUcmFuc2ZlclNlc3Npb24p
CisgICAgICAgIG1faW1hZ2VUcmFuc2ZlclNlc3Npb24gPSBJbWFnZVRyYW5zZmVyU2Vzc2lvblZU
OjpjcmVhdGUocHJlZmVyZWRQaXhlbEJ1ZmZlckZvcm1hdCgpKTsKKyAgICBpZiAoIW1faW1hZ2VU
cmFuc2ZlclNlc3Npb24pCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gc2FtcGxlVGltZSA9
IE1lZGlhVGltZTo6Y3JlYXRlV2l0aERvdWJsZSgoZWxhcHNlZFRpbWUoKSArIDEwMF9tcykuc2Vj
b25kcygpKTsKKyAgICBhdXRvIHNhbXBsZUJ1ZmZlciA9IG1faW1hZ2VUcmFuc2ZlclNlc3Npb24t
PmNyZWF0ZU1lZGlhU2FtcGxlKGltYWdlQnVmZmVyLT5jb3B5SW1hZ2UoKS0+bmF0aXZlSW1hZ2Uo
KS5nZXQoKSwgc2FtcGxlVGltZSwgc2l6ZSgpLCBtX2RldmljZU9yaWVudGF0aW9uKTsKKyAgICBp
ZiAoIXNhbXBsZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gV2UgdXNlIG1fZGV2
aWNlT3JpZW50YXRpb24gdG8gZW11bGF0ZSBzZW5zb3Igb3JpZW50YXRpb24KLSAgICBkaXNwYXRj
aE1lZGlhU2FtcGxlVG9PYnNlcnZlcnMoTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVhdGUoc2FtcGxl
QnVmZmVyLmdldCgpLCBtX2RldmljZU9yaWVudGF0aW9uKSk7CisgICAgZGlzcGF0Y2hNZWRpYVNh
bXBsZVRvT2JzZXJ2ZXJzKCpzYW1wbGVCdWZmZXIuZ2V0KCkpOwogfQogCiB2b2lkIE1vY2tSZWFs
dGltZVZpZGVvU291cmNlTWFjOjpzZXR0aW5nc0RpZENoYW5nZShPcHRpb25TZXQ8UmVhbHRpbWVN
ZWRpYVNvdXJjZVNldHRpbmdzOjpGbGFnPiBzZXR0aW5ncykKQEAgLTIwMywyMSArMTI3LDYgQEAg
dm9pZCBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYzo6bW9uaXRvck9yaWVudGF0aW9uKE9yaWVu
dGF0aW9uTm90aWZpZXImIG5vdGlmaWUKICAgICBvcmllbnRhdGlvbkNoYW5nZWQobm90aWZpZXIu
b3JpZW50YXRpb24oKSk7CiB9CiAKLXZvaWQgTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWM6OnNl
dFNpemVBbmRGcmFtZVJhdGVXaXRoUHJlc2V0KEludFNpemUgcmVxdWVzdGVkU2l6ZSwgZG91Ymxl
LCBSZWZQdHI8VmlkZW9QcmVzZXQ+IHByZXNldCkKLXsKLSAgICBpZiAoIXByZXNldCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKHByZXNldC0+c2l6ZSAhPSByZXF1ZXN0ZWRTaXplKSB7Ci0g
ICAgICAgIGlmIChtX3BpeGVsQnVmZmVyUmVzaXplciAmJiAhbV9waXhlbEJ1ZmZlclJlc2l6ZXIt
PmNhblJlc2l6ZVRvKHJlcXVlc3RlZFNpemUpKQotICAgICAgICAgICAgbV9waXhlbEJ1ZmZlclJl
c2l6ZXIgPSBudWxscHRyOwotCi0gICAgICAgIGlmICghbV9waXhlbEJ1ZmZlclJlc2l6ZXIpCi0g
ICAgICAgICAgICBtX3BpeGVsQnVmZmVyUmVzaXplciA9IHN0ZDo6bWFrZV91bmlxdWU8UGl4ZWxC
dWZmZXJSZXNpemVyPihyZXF1ZXN0ZWRTaXplLCBwcmVmZXJlZFBpeGVsQnVmZmVyRm9ybWF0KCkp
OwotICAgIH0gZWxzZQotICAgICAgICBtX3BpeGVsQnVmZmVyUmVzaXplciA9IG51bGxwdHI7Ci19
Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJF
QU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMv
U2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL21hYy9TY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5oCmluZGV4IGVj
OTIwZjAyNGE1Njg5OTIwMDk0NDk0NDQ3ZDcyYmVlNjMyOTBkYzcuLjljOGY4NzFjM2QxZjljNjlj
MjU3YTZiZDk5ZWE5ZjQ0MjcyMGQ5ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9TY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9TY3JlZW5EaXNwbGF5Q2Fw
dHVyZVNvdXJjZU1hYy5oCkBAIC01Niw3ICs1Niw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGZy
YW1lQXZhaWxhYmxlKENHRGlzcGxheVN0cmVhbUZyYW1lU3RhdHVzLCB1aW50NjRfdCwgSU9TdXJm
YWNlUmVmLCBDR0Rpc3BsYXlTdHJlYW1VcGRhdGVSZWYpOwogCi0gICAgUmV0YWluUHRyPENWUGl4
ZWxCdWZmZXJSZWY+IGdlbmVyYXRlRnJhbWUoKSBmaW5hbDsKKyAgICBEaXNwbGF5Q2FwdHVyZVNv
dXJjZUNvY29hOjpEaXNwbGF5RnJhbWVUeXBlIGdlbmVyYXRlRnJhbWUoKSBmaW5hbDsKICAgICBS
ZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M6OkRpc3BsYXlTdXJmYWNlVHlwZSBzdXJmYWNlVHlw
ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RGlz
cGxheVN1cmZhY2VUeXBlOjpNb25pdG9yOyB9CiAKICAgICB2b2lkIHN0YXJ0UHJvZHVjaW5nRGF0
YSgpIGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbWFjL1NjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1NjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLm1t
CmluZGV4IGEyMzhmMjhmOTc1Yjg0MDgzNDI3N2U4YjBjMmRlZGMxOWNhYmU0NDcuLjRjYjRkMTNj
YTUwMmY0M2QyMTJiZDg0YTFkN2U3MGI4YWVlMmEyYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9TY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1h
Yy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvU2NyZWVu
RGlzcGxheUNhcHR1cmVTb3VyY2VNYWMubW0KQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKICNpbmNsdWRlICJS
ZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJSZWFsdGltZVZpZGVvVXRp
bGl0aWVzLmgiCiAKICNpbmNsdWRlICJDb3JlVmlkZW9Tb2Z0TGluay5oIgogCkBAIC0xNjYsNyAr
MTY3LDcgQEAgYm9vbCBTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6Y3JlYXRlRGlzcGxh
eVN0cmVhbSgpCiAgICAgICAgIH0pOwogCiAgICAgICAgIGF1dG8gc2l6ZSA9IGZyYW1lU2l6ZSgp
OwotICAgICAgICBtX2Rpc3BsYXlTdHJlYW0gPSBhZG9wdENGKENHRGlzcGxheVN0cmVhbUNyZWF0
ZVdpdGhEaXNwYXRjaFF1ZXVlKG1fZGlzcGxheUlELCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0
KCksIGtDVlBpeGVsRm9ybWF0VHlwZV80MjBZcENiQ3I4UGxhbmFyLCBzdHJlYW1PcHRpb25zLmdl
dCgpLCBtX2NhcHR1cmVRdWV1ZS5nZXQoKSwgbV9mcmFtZUF2YWlsYWJsZUJsb2NrKSk7CisgICAg
ICAgIG1fZGlzcGxheVN0cmVhbSA9IGFkb3B0Q0YoQ0dEaXNwbGF5U3RyZWFtQ3JlYXRlV2l0aERp
c3BhdGNoUXVldWUobV9kaXNwbGF5SUQsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgcHJl
ZmVyZWRQaXhlbEJ1ZmZlckZvcm1hdCgpLCBzdHJlYW1PcHRpb25zLmdldCgpLCBtX2NhcHR1cmVR
dWV1ZS5nZXQoKSwgbV9mcmFtZUF2YWlsYWJsZUJsb2NrKSk7CiAgICAgICAgIGlmICghbV9kaXNw
bGF5U3RyZWFtKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIlNjcmVlbkRpc3Bs
YXlDYXB0dXJlU291cmNlTWFjOjpjcmVhdGVEaXNwbGF5U3RyZWFtOiBDR0Rpc3BsYXlTdHJlYW1D
cmVhdGUgZmFpbGVkIik7CiAgICAgICAgICAgICBjYXB0dXJlRmFpbGVkKCk7CkBAIC0yMDUsMTgg
KzIwNiwxNSBAQCB2b2lkIFNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpzdG9wUHJvZHVj
aW5nRGF0YSgpCiAgICAgbV9pc1J1bm5pbmcgPSBmYWxzZTsKIH0KIAotUmV0YWluUHRyPENWUGl4
ZWxCdWZmZXJSZWY+IFNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpnZW5lcmF0ZUZyYW1l
KCkKK0Rpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OkRpc3BsYXlGcmFtZVR5cGUgU2NyZWVuRGlz
cGxheUNhcHR1cmVTb3VyY2VNYWM6OmdlbmVyYXRlRnJhbWUoKQogewotICAgIGlmICghbV9jdXJy
ZW50RnJhbWUuaW9TdXJmYWNlKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCiAgICAgRGlz
cGxheVN1cmZhY2UgY3VycmVudEZyYW1lOwogICAgIHsKICAgICAgICAgTG9ja0hvbGRlciBsb2Nr
KG1fY3VycmVudEZyYW1lTXV0ZXgpOwogICAgICAgICBjdXJyZW50RnJhbWUgPSBtX2N1cnJlbnRG
cmFtZS5pb1N1cmZhY2UoKTsKICAgICB9CiAKLSAgICByZXR1cm4gcGl4ZWxCdWZmZXJGcm9tSU9T
dXJmYWNlKGN1cnJlbnRGcmFtZS5pb1N1cmZhY2UoKSk7CisgICAgcmV0dXJuIERpc3BsYXlDYXB0
dXJlU291cmNlQ29jb2E6OkRpc3BsYXlGcmFtZVR5cGUgeyBSZXRhaW5QdHI8SU9TdXJmYWNlUmVm
PiB7IGN1cnJlbnRGcmFtZS5pb1N1cmZhY2UoKSB9IH07CiB9CiAKIHZvaWQgU2NyZWVuRGlzcGxh
eUNhcHR1cmVTb3VyY2VNYWM6OnN0YXJ0RGlzcGxheVN0cmVhbSgpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvV2luZG93RGlzcGxheUNhcHR1cmVT
b3VyY2VNYWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9XaW5k
b3dEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5oCmluZGV4IDFjNGQzNzYwZjg4Y2ZmNWZhNzRjZDI3
MDY2MDNlNjhhMWQzZDZkZGYuLjJkMWE2NmUwMzEyYmFkY2E4OWQ5YmNmMGI4MDY2ZWQ0MzJkYjJk
NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9X
aW5kb3dEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9XaW5kb3dEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5oCkBAIC00
OSwxMSArNDksMTAgQEAgcHJpdmF0ZToKICAgICBXaW5kb3dEaXNwbGF5Q2FwdHVyZVNvdXJjZU1h
Yyh1aW50MzJfdCwgU3RyaW5nJiYpOwogICAgIHZpcnR1YWwgfldpbmRvd0Rpc3BsYXlDYXB0dXJl
U291cmNlTWFjKCkgPSBkZWZhdWx0OwogCi0gICAgUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJSZWY+
IGdlbmVyYXRlRnJhbWUoKSBmaW5hbDsKKyAgICBEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpE
aXNwbGF5RnJhbWVUeXBlIGdlbmVyYXRlRnJhbWUoKSBmaW5hbDsKICAgICBSZWFsdGltZU1lZGlh
U291cmNlU2V0dGluZ3M6OkRpc3BsYXlTdXJmYWNlVHlwZSBzdXJmYWNlVHlwZSgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RGlzcGxheVN1cmZhY2VU
eXBlOjpXaW5kb3c7IH0KIAogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiB3aW5kb3dJbWFnZSgp
OwotICAgIFJldGFpblB0cjxDVlBpeGVsQnVmZmVyUmVmPiBwaXhlbEJ1ZmZlckZyb21DR0ltYWdl
KENHSW1hZ2VSZWYpOwogCiAgICAgSW50U2l6ZSBtX3dpbmRvd1NpemU7CiAgICAgQ0dXaW5kb3dJ
RCBtX3dpbmRvd0lEIHsgMCB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbWFjL1dpbmRvd0Rpc3BsYXlDYXB0dXJlU291cmNlTWFjLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1dpbmRvd0Rpc3BsYXlDYXB0dXJlU291
cmNlTWFjLm1tCmluZGV4IDFkNmExN2NkNDEzOGZkMWQ1NjcyYmY5MzI5MzcwNGJmMTAxNDE5MjMu
LjljNWQ1ZDQzMTJkNmQ1MzY4NGM4NWYyYTc4MGQ4M2IzMjY5NTE1ODEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9XaW5kb3dEaXNwbGF5Q2FwdHVy
ZVNvdXJjZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9t
YWMvV2luZG93RGlzcGxheUNhcHR1cmVTb3VyY2VNYWMubW0KQEAgLTEzOSw2OSArMTM5LDkgQEAg
UmV0YWluUHRyPENHSW1hZ2VSZWY+IFdpbmRvd0Rpc3BsYXlDYXB0dXJlU291cmNlTWFjOjp3aW5k
b3dJbWFnZSgpCiAgICAgcmV0dXJuIGltYWdlOwogfQogCi1SZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZl
clJlZj4gV2luZG93RGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OmdlbmVyYXRlRnJhbWUoKQorRGlz
cGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6RGlzcGxheUZyYW1lVHlwZSBXaW5kb3dEaXNwbGF5Q2Fw
dHVyZVNvdXJjZU1hYzo6Z2VuZXJhdGVGcmFtZSgpCiB7Ci0gICAgYXV0byBpbWFnZSA9IHdpbmRv
d0ltYWdlKCk7Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICBpZiAobV9sYXN0SW1hZ2UgJiYgbV9sYXN0UGl4ZWxCdWZmZXIgJiYgQ0ZFcXVhbChtX2xhc3RJ
bWFnZS5nZXQoKSwgaW1hZ2UuZ2V0KCkpKQotICAgICAgICByZXR1cm4gbV9sYXN0UGl4ZWxCdWZm
ZXIuZ2V0KCk7Ci0KLSAgICBtX2xhc3RJbWFnZSA9IFdURk1vdmUoaW1hZ2UpOwotICAgIHJldHVy
biBwaXhlbEJ1ZmZlckZyb21DR0ltYWdlKG1fbGFzdEltYWdlLmdldCgpKTsKLX0KLQotUmV0YWlu
UHRyPENWUGl4ZWxCdWZmZXJSZWY+IFdpbmRvd0Rpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpwaXhl
bEJ1ZmZlckZyb21DR0ltYWdlKENHSW1hZ2VSZWYgaW1hZ2UpCi17Ci0gICAgc3RhdGljIENHQ29s
b3JTcGFjZVJlZiBzUkdCQ29sb3JTcGFjZSA9IHNSR0JDb2xvclNwYWNlUmVmKCk7Ci0KLSAgICBh
dXRvIGltYWdlU2l6ZSA9IEludFNpemUoQ0dJbWFnZUdldFdpZHRoKGltYWdlKSwgQ0dJbWFnZUdl
dEhlaWdodChpbWFnZSkpOwotICAgIGlmIChpbWFnZVNpemUgIT0gaW50cmluc2ljU2l6ZSgpKSB7
Ci0gICAgICAgIG1fYnVmZmVyUG9vbCA9IG51bGxwdHI7Ci0gICAgICAgIG1fbGFzdEltYWdlID0g
bnVsbHB0cjsKLSAgICAgICAgbV9sYXN0UGl4ZWxCdWZmZXIgPSBudWxscHRyOwotICAgIH0KLQot
ICAgIGlmICghbV9idWZmZXJQb29sKSB7Ci0gICAgICAgIENWUGl4ZWxCdWZmZXJQb29sUmVmIGJ1
ZmZlclBvb2w7Ci0gICAgICAgIENGRGljdGlvbmFyeVJlZiBzb3VyY2VQaXhlbEJ1ZmZlck9wdGlv
bnMgPSAoX19icmlkZ2UgQ0ZEaWN0aW9uYXJ5UmVmKSBAewotICAgICAgICAoX19icmlkZ2UgTlNT
dHJpbmcgKilrQ1ZQaXhlbEJ1ZmZlclBpeGVsRm9ybWF0VHlwZUtleSA6IEAoa0NWUGl4ZWxGb3Jt
YXRUeXBlXzMyQVJHQiksCi0gICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsQnVm
ZmVyV2lkdGhLZXkgOiBAKGltYWdlU2l6ZS53aWR0aCgpKSwKLSAgICAgICAgKF9fYnJpZGdlIE5T
U3RyaW5nICopa0NWUGl4ZWxCdWZmZXJIZWlnaHRLZXkgOiBAKGltYWdlU2l6ZS5oZWlnaHQoKSks
Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ1ZQaXhl
bEZvcm1hdE9wZW5HTEVTQ29tcGF0aWJpbGl0eSA6IEAoWUVTKSwKLSNlbHNlCi0gICAgICAgIChf
X2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsQnVmZmVyT3BlbkdMQ29tcGF0aWJpbGl0eUtleSA6
IEAoWUVTKSwKLSNlbmRpZgotICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ1ZQaXhlbEJ1
ZmZlcklPU3VyZmFjZVByb3BlcnRpZXNLZXkgOiBAeyAvKmVtcHR5IGRpY3Rpb25hcnkqLyB9Ci0g
ICAgfTsKLQotICAgICAgICBDRkRpY3Rpb25hcnlSZWYgcGl4ZWxCdWZmZXJQb29sT3B0aW9ucyA9
IChfX2JyaWRnZSBDRkRpY3Rpb25hcnlSZWYpIEB7Ci0gICAgICAgICAgICAoX19icmlkZ2UgTlNT
dHJpbmcgKilrQ1ZQaXhlbEJ1ZmZlclBvb2xNaW5pbXVtQnVmZmVyQ291bnRLZXkgOiBAKDMpCi0g
ICAgICAgIH07Ci0KLSAgICAgICAgQ1ZSZXR1cm4gc3RhdHVzID0gQ1ZQaXhlbEJ1ZmZlclBvb2xD
cmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgcGl4ZWxCdWZmZXJQb29sT3B0aW9ucywgc291cmNl
UGl4ZWxCdWZmZXJPcHRpb25zLCAmYnVmZmVyUG9vbCk7Ci0gICAgICAgIGlmIChzdGF0dXMgIT0g
a0NWUmV0dXJuU3VjY2VzcykKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAg
IG1fYnVmZmVyUG9vbCA9IGFkb3B0Q0YoYnVmZmVyUG9vbCk7Ci0gICAgICAgIHNldEludHJpbnNp
Y1NpemUoaW1hZ2VTaXplKTsKLSAgICB9Ci0KLSAgICBDVlBpeGVsQnVmZmVyUmVmIHBpeGVsQnVm
ZmVyOwotICAgIENWUmV0dXJuIHN0YXR1cyA9IENWUGl4ZWxCdWZmZXJQb29sQ3JlYXRlUGl4ZWxC
dWZmZXIobnVsbHB0ciwgbV9idWZmZXJQb29sLmdldCgpLCAmcGl4ZWxCdWZmZXIpOwotICAgIGlm
IChzdGF0dXMgIT0ga0NWUmV0dXJuU3VjY2VzcykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBDVlBpeGVsQnVmZmVyTG9ja0Jhc2VBZGRyZXNzKHBpeGVsQnVmZmVyLCAwKTsKLSAgICB2
b2lkKiBkYXRhID0gQ1ZQaXhlbEJ1ZmZlckdldEJhc2VBZGRyZXNzKHBpeGVsQnVmZmVyKTsKLSAg
ICBhdXRvIGNvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShkYXRhLCBpbWFn
ZVNpemUud2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpLCA4LCBDVlBpeGVsQnVmZmVyR2V0Qnl0
ZXNQZXJSb3cocGl4ZWxCdWZmZXIpLCBzUkdCQ29sb3JTcGFjZSwgKENHQml0bWFwSW5mbykga0NH
SW1hZ2VBbHBoYU5vbmVTa2lwRmlyc3QpKTsKLSAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4
dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpLCBDR0ltYWdl
R2V0SGVpZ2h0KGltYWdlKSksIGltYWdlKTsKLSAgICBDVlBpeGVsQnVmZmVyVW5sb2NrQmFzZUFk
ZHJlc3MocGl4ZWxCdWZmZXIsIDApOwotCi0gICAgbV9sYXN0UGl4ZWxCdWZmZXIgPSBhZG9wdENG
KHBpeGVsQnVmZmVyKTsKLSAgICByZXR1cm4gbV9sYXN0UGl4ZWxCdWZmZXI7CisgICAgcmV0dXJu
IERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OkRpc3BsYXlGcmFtZVR5cGUgeyBSZXRhaW5QdHI8
Q0dJbWFnZVJlZj4geyB3aW5kb3dJbWFnZSgpIH0gfTsKIH0KIAogc3RkOjpvcHRpb25hbDxDYXB0
dXJlRGV2aWNlPiBXaW5kb3dEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6d2luZG93Q2FwdHVyZURl
dmljZVdpdGhQZXJzaXN0ZW50SUQoY29uc3QgU3RyaW5nJiBpZFN0cmluZykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5j
cHAKaW5kZXggNjIyNDdlZDU2ZGQwZmU3MmJlMDAzOTE0NGI4ZjA0NmY1MGQ5NmY0ZC4uN2FiN2Ey
MTU0ZTNhZTJhNDFjN2QxMmM4YzA3NGQyMjFmODc4NzZjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKQEAg
LTEyNiw2ICsxMjYsNyBAQCBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzJiBN
b2NrUmVhbHRpbWVWaWRlb1NvdXJjZTo6Y2FwYWJpbGl0aWVzKCkKICAgICAgICAgICAgIGNhcGFi
aWxpdGllcy5hZGRGYWNpbmdNb2RlKFdURjo6Z2V0PE1vY2tDYW1lcmFQcm9wZXJ0aWVzPihtX2Rl
dmljZS5wcm9wZXJ0aWVzKS5mYWNpbmdNb2RlKTsKICAgICAgICAgICAgIGNhcGFiaWxpdGllcy5z
ZXREZXZpY2VJZChoYXNoZWRJZCgpKTsKICAgICAgICAgICAgIHVwZGF0ZUNhcGFiaWxpdGllcyhj
YXBhYmlsaXRpZXMpOworICAgICAgICAgICAgY2FwYWJpbGl0aWVzLnNldERldmljZUlkKGhhc2hl
ZElkKCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgY2FwYWJpbGl0aWVzLnNldFdp
ZHRoKENhcGFiaWxpdHlWYWx1ZU9yUmFuZ2UoNzIsIDI4ODApKTsKICAgICAgICAgICAgIGNhcGFi
aWxpdGllcy5zZXRIZWlnaHQoQ2FwYWJpbGl0eVZhbHVlT3JSYW5nZSg0NSwgMTgwMCkpOwpAQCAt
MTU5LDE0ICsxNjAsMTQgQEAgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBNb2Nr
UmVhbHRpbWVWaWRlb1NvdXJjZTo6c2V0dGluZ3MoKQogICAgICAgICBzZXR0aW5ncy5zZXRBc3Bl
Y3RSYXRpbyhhc3BlY3RSYXRpbygpKTsKIAogICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0
ZWRDb25zdHJhaW50cyBzdXBwb3J0ZWRDb25zdHJhaW50czsKLSAgICBzdXBwb3J0ZWRDb25zdHJh
aW50cy5zZXRTdXBwb3J0c0RldmljZUlkKHRydWUpOwogICAgIHN1cHBvcnRlZENvbnN0cmFpbnRz
LnNldFN1cHBvcnRzRnJhbWVSYXRlKHRydWUpOwogICAgIHN1cHBvcnRlZENvbnN0cmFpbnRzLnNl
dFN1cHBvcnRzV2lkdGgodHJ1ZSk7CiAgICAgc3VwcG9ydGVkQ29uc3RyYWludHMuc2V0U3VwcG9y
dHNIZWlnaHQodHJ1ZSk7CiAgICAgc3VwcG9ydGVkQ29uc3RyYWludHMuc2V0U3VwcG9ydHNBc3Bl
Y3RSYXRpbyh0cnVlKTsKLSAgICBpZiAobW9ja0NhbWVyYSgpKQorICAgIGlmIChtb2NrQ2FtZXJh
KCkpIHsKKyAgICAgICAgc3VwcG9ydGVkQ29uc3RyYWludHMuc2V0U3VwcG9ydHNEZXZpY2VJZCh0
cnVlKTsKICAgICAgICAgc3VwcG9ydGVkQ29uc3RyYWludHMuc2V0U3VwcG9ydHNGYWNpbmdNb2Rl
KHRydWUpOwotICAgIGVsc2UgeworICAgIH0gZWxzZSB7CiAgICAgICAgIHN1cHBvcnRlZENvbnN0
cmFpbnRzLnNldFN1cHBvcnRzRGlzcGxheVN1cmZhY2UodHJ1ZSk7CiAgICAgICAgIHN1cHBvcnRl
ZENvbnN0cmFpbnRzLnNldFN1cHBvcnRzTG9naWNhbFN1cmZhY2UodHJ1ZSk7CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>352545</attachid>
            <date>2018-10-16 20:48:39 -0700</date>
            <delta_ts>2018-10-16 21:00:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-190519-20181016204838.patch</filename>
            <type>text/plain</type>
            <size>86176</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM3MjE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2RiYzlmZDA2YjBhZTJk
OWZmYWM1M2Q5NjMyNjg4OGIwN2VjMTg1My4uZjYxYjdkM2U2N2ZjZjA1YzYyMDg1ZWFlMDk4ZmU4
YmIyM2NhOWEyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgwIEBACisyMDE4LTEwLTE2ICBFcmlj
IENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNZWRpYVN0cmVh
bV0gQ29uc29saWRhdGUgYWxsIGltYWdlIGNvbnZlcnNpb24gYW5kIHJlc2l6aW5nIGludG8gb25l
IGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
OTA1MTkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQ1MjI0MzA3PgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gZnVuY3Rp
b25hbCBjaGFuZ2UuCisKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OiBBZGQgSW1hZ2VUcmFu
c2ZlclNlc3Npb25WVC4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6IERpdHRvLgorCisgICAgICAgICogcGxhdGZvcm0vTWVkaWFTYW1wbGUuaDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhU2FtcGxlOjp2aWRlb1BpeGVsRm9ybWF0IGNvbnN0KTogTmV3LgorCisg
ICAgICAgICogcGxhdGZvcm0vY29jb2EvVmlkZW9Ub29sYm94U29mdExpbmsuY3BwOiBBZGQgbmV3
IGtWVFBpeGVsVHJhbnNmZXJQcm9wZXJ0eSBrZXlzLgorICAgICAgICAqIHBsYXRmb3JtL2NvY29h
L1ZpZGVvVG9vbGJveFNvZnRMaW5rLmg6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMuaDoKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhU2FtcGxlQVZGT2JqQzo6Y3JlYXRlKTogUmVtb3ZlIHVuaW1wbGVtZW50ZWQgdmFyaWFu
dC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNh
bXBsZUFWRk9iakMubW06CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZUFWRk9iakM6OnZp
ZGVvUGl4ZWxGb3JtYXQgY29uc3QpOiBOZXcuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jdi9JbWFnZVRyYW5zZmVyU2Vzc2lvblZULmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jdi9JbWFnZVRyYW5zZmVyU2Vzc2lvblZULm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OkltYWdlVHJhbnNmZXJTZXNzaW9uVlQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6fkltYWdlVHJhbnNmZXJTZXNz
aW9uVlQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6c2V0U2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVhdGVQaXhl
bEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVh
dGVDTVNhbXBsZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpyb3VuZFVwVG9NYWNyb2Jsb2Nr
TXVsdGlwbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6aW9T
dXJmYWNlUGl4ZWxCdWZmZXJDcmVhdGlvbk9wdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlTWVkaWFTYW1wbGUpOgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJSZXNpemVyLmg6IFJlbW92ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJSZXNpemVyLm1tOiBSZW1vdmVkLgor
CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJlU291cmNl
Lmg6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJlU291
cmNlLm1tOgorICAgICAgICAoV2ViQ29yZTo6QVZWaWRlb0NhcHR1cmVTb3VyY2U6OnByZWZlcnNQ
cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6QVZWaWRlb0NhcHR1cmVTb3VyY2U6OmNhcHR1cmVP
dXRwdXREaWRPdXRwdXRTYW1wbGVCdWZmZXJGcm9tQ29ubmVjdGlvbik6IFJlbW92ZQorICAgICAg
ICB0aGUgcmVzaXppbmcgbG9naWMsIGl0IGlzIGhhbmRsZWQgYnkgdGhlIGJhc2UgY2xhc3MuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVTb3VyY2VD
b2NvYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpj
YXBhYmlsaXRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUNhcHR1cmVTb3VyY2VDb2Nv
YTo6c2V0dGluZ3NEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUNhcHR1cmVT
b3VyY2VDb2NvYTo6c2V0SW50cmluc2ljU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
Q2FwdHVyZVNvdXJjZUNvY29hOjplbWl0RnJhbWUpOiBSZW1vdmUgcmVzaXppbmcgbG9naWMsIGp1
c3QgdXNlIGEgdHJhbnNmZXIKKyAgICAgICAgc2Vzc2lvbiB0byBjcmVhdGUgYW4gaW1hZ2UgZnJv
bSB0aGUgY2FwdHVyZSBzb3VyY2UgbmF0aXZlIG91dHB1dCBmb3JtYXQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpzYW1wbGVCdWZmZXJGcm9tUGl4ZWxCdWZm
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6cm91bmRVcFRvTWFjcm9ibG9ja011bHRp
cGxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlDYXB0dXJlU291cmNlQ29j
b2E6OnBpeGVsQnVmZmVyRnJvbUlPU3VyZmFjZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL0Rpc3BsYXlDYXB0dXJlU291cmNlQ29jb2EuaDoKKworICAgICAg
ICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5o
OgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1Nv
dXJjZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFj
Ojp1cGRhdGVTYW1wbGVCdWZmZXIpOiBVc2UgaW1hZ2UgdHJhbnNmZXIgc2Vzc2lvbi4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjOjpDTVNhbXBsZUJ1ZmZlckZy
b21QaXhlbEJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpNb2NrUmVhbHRpbWVW
aWRlb1NvdXJjZU1hYzo6cGl4ZWxCdWZmZXJGcm9tQ0dJbWFnZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYzo6c2V0U2l6ZUFuZEZy
YW1lUmF0ZVdpdGhQcmVzZXQpOiBEZWxldGVkLgorCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL1NjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLmg6CisgICAgICAgICogcGxh
dGZvcm0vbWVkaWFzdHJlYW0vbWFjL1NjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6U2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OmNyZWF0ZURp
c3BsYXlTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6U2NyZWVuRGlzcGxheUNhcHR1cmVTb3Vy
Y2VNYWM6OmdlbmVyYXRlRnJhbWUpOiBSZXR1cm4gdGhlIElPU3VyZmFjZSBkaXJlY3RseS4KKwor
ICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9XaW5kb3dEaXNwbGF5Q2FwdHVyZVNv
dXJjZU1hYy5oOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9XaW5kb3dEaXNw
bGF5Q2FwdHVyZVNvdXJjZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OldpbmRvd0Rpc3BsYXlD
YXB0dXJlU291cmNlTWFjOjpnZW5lcmF0ZUZyYW1lKTogUmV0dXJuIHRoZSBDR0ltYWdlIGRpcmVj
dGx5LgorICAgICAgICAoV2ViQ29yZTo6V2luZG93RGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OnBp
eGVsQnVmZmVyRnJvbUNHSW1hZ2UpOiBEZWxldGVkLgorCisgICAgICAgICogcGxhdGZvcm0vbW9j
ay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNb2NrUmVh
bHRpbWVWaWRlb1NvdXJjZTo6Y2FwYWJpbGl0aWVzKTogT25seSB0aGUgY2FtZXJhIHN1cHBvcnRz
IGRldmljZSBJRC4KKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tSZWFsdGltZVZpZGVvU291cmNlOjpz
ZXR0aW5ncyk6IERpdHRvLgorCiAyMDE4LTEwLTE2ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBs
ZS5jb20+CiAKICAgICAgICAgUmVncmVzc2lvbihyMjM2Nzk1KSBDaGVjayBib3hlcyBhcmUgc29t
ZXRpbWVzIGNoZWNrZWQgd2hlbiB0aGV5IHNob3VsZCBub3QgYmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2Eu
dHh0CmluZGV4IGM3NmY0OTIzMWNiNWUwYmJkNWMwOWNmMmUyNGM0YzkxNTljZDllNTcuLjg0NTU1
YTZhNzlhYTA0MWUyYWJiNWE5YjA0ODk0ODlkODYyMDMwODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29h
LnR4dApAQCAtMzE0LDggKzMxNCw4IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5
ZXIubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYk1ldGFsTGF5ZXIubW0KIHBsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL1RleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EubW0KIAorcGxhdGZv
cm0vZ3JhcGhpY3MvY3YvSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5tbQogcGxhdGZvcm0vZ3JhcGhp
Y3MvY3YvUGl4ZWxCdWZmZXJDb25mb3JtZXJDVi5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2N2L1Bp
eGVsQnVmZmVyUmVzaXplci5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvVGV4dHVyZUNhY2hlQ1Yu
bW0KIHBsYXRmb3JtL2dyYXBoaWNzL2N2L1ZpZGVvVGV4dHVyZUNvcGllckNWLmNwcAogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
OTdiMzVhZmZmOTFhMzIzNTYzMDdjYTZhNzQ2MDA1OGQyMDJhMDViZi4uZTU2ZTdlYmVhNzA2ZTNi
YTQyZWUyMWQ4NmJkZGE1YTI5NzYxMTBlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTY5LDYgKzE2OSw3IEBACiAJCTA3OEU0
M0RBMUFCQjZDN0UwMDFDMkZBNiAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzhFNDNEODFBQkI2QzdF
MDAxQzJGQTYgLyogTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA3OEU0M0REMUFCQjZGNkYwMDFDMkZB
NiAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzhFNDNEQjFBQkI2RjZGMDAxQzJGQTYgLyogTWVk
aWFQbGF5YmFja1RhcmdldFBpY2tlck1hYy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTA3OEU0M0RFMUFCQjZGNkYwMDFDMkZBNiAvKiBNZWRpYVBs
YXliYWNrVGFyZ2V0UGlja2VyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDc4RTQzREMxQUJCNkY2RjAwMUMyRkE2IC8qIE1lZGlhUGxheWJhY2tU
YXJnZXRQaWNrZXJNYWMubW0gKi87IH07CisJCTA3OEVEMTkzMjE2RDA3OTUwMDc3NUIzMyAvKiBJ
bWFnZVRyYW5zZmVyU2Vzc2lvblZULmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwNzQ2RDMwQzIxNDZFQTM4MDAzRERGODQgLyogSW1hZ2VUcmFuc2ZlclNl
c3Npb25WVC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTA3OTIxNjU1MUFBNTYwQUEwMEEzQzA0OSAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0Q2xpZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzkyMTY1
MzFBQTU2MEFBMDBBM0MwNDkgLyogTWVkaWFQbGF5YmFja1RhcmdldENsaWVudC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA3OTQxNzkxMTY2RTg1
NUYwMDk0MTZDMiAvKiBJbmJhbmRUZXh0VHJhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDc5NDE3OEYxNjZFODU1RjAwOTQxNkMyIC8qIEluYmFu
ZFRleHRUcmFjay5jcHAgKi87IH07CiAJCTA3OTQxNzkyMTY2RTg1NUYwMDk0MTZDMiAvKiBJbmJh
bmRUZXh0VHJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDA3OTQxNzkwMTY2RTg1NUYwMDk0MTZDMiAvKiBJbmJhbmRUZXh0VHJhY2suaCAqLzsgfTsK
QEAgLTUzNjgsOCArNTM2OSw4IEBACiAJCTA3M0I4NzY1MUU0Mzg1OUQwMDcxQzBFQyAvKiBBdWRp
b1NhbXBsZURhdGFTb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXVk
aW9TYW1wbGVEYXRhU291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3NDRF
Q0VCMUUwQzRBRTUwMDBEMDk0NCAvKiBNb2NrUmVhbHRpbWVBdWRpb1NvdXJjZU1hYy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNb2NrUmVhbHRpbWVBdWRpb1NvdXJjZU1hYy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzQ0RUNFQzFFMEM0QUU1MDAwRDA5NDQg
LyogTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2VNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBNb2NrUmVhbHRpbWVBdWRpb1NvdXJjZU1hYy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDc0NkQzMEEyMTQ2RUEzNzAwM0RERjg0IC8qIFBpeGVsQnVm
ZmVyUmVzaXplci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBp
eGVsQnVmZmVyUmVzaXplci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDc0NkQz
MEMyMTQ2RUEzODAwM0RERjg0IC8qIFBpeGVsQnVmZmVyUmVzaXplci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQaXhlbEJ1ZmZlclJlc2l6ZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMDc0NkQzMEEyMTQ2RUEzNzAwM0RERjg0IC8qIEltYWdlVHJhbnNmZXJT
ZXNzaW9uVlQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBJbWFn
ZVRyYW5zZmVyU2Vzc2lvblZULm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwNzQ2
RDMwQzIxNDZFQTM4MDAzRERGODQgLyogSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZVRyYW5zZmVyU2Vzc2lvblZULmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3NEU4MkI4MThBNjlGMEUwMDdFRjU0QyAvKiBQbGF0
Zm9ybVRpbWVSYW5nZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UGxhdGZvcm1UaW1lUmFuZ2VzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDc0
RTgyQjkxOEE2OUYwRTAwN0VGNTRDIC8qIFBsYXRmb3JtVGltZVJhbmdlcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybVRpbWVSYW5nZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMDc1Mzg2MDAxNDQ4OUU5ODAwQjc4NDUyIC8qIENhY2hlZFRleHRU
cmFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWNoZWRUZXh0
VHJhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjUwOTUsMTAgKzI1MDk2
LDEwIEBACiAJCUNEOUQ4MjdDMUM3QkIyRUQwMDZGRjA2NiAvKiBjdiAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMDc0NkQzMEMyMTQ2RUEzODAwM0RERjg0
IC8qIEltYWdlVHJhbnNmZXJTZXNzaW9uVlQuaCAqLywKKwkJCQkwNzQ2RDMwQTIxNDZFQTM3MDAz
RERGODQgLyogSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5tbSAqLywKIAkJCQlDRDdEMzM0MTFDN0Ex
MjNGMDAwNDEyOTMgLyogUGl4ZWxCdWZmZXJDb25mb3JtZXJDVi5jcHAgKi8sCiAJCQkJQ0Q3RDMz
NDIxQzdBMTIzRjAwMDQxMjkzIC8qIFBpeGVsQnVmZmVyQ29uZm9ybWVyQ1YuaCAqLywKLQkJCQkw
NzQ2RDMwQzIxNDZFQTM4MDAzRERGODQgLyogUGl4ZWxCdWZmZXJSZXNpemVyLmggKi8sCi0JCQkJ
MDc0NkQzMEEyMTQ2RUEzNzAwM0RERjg0IC8qIFBpeGVsQnVmZmVyUmVzaXplci5tbSAqLywKIAkJ
CQlDRDlEODI3NDFDN0FFNTM1MDA2RkYwNjYgLyogVGV4dHVyZUNhY2hlQ1YuaCAqLywKIAkJCQlD
RDlEODI3MzFDN0FFNTM1MDA2RkYwNjYgLyogVGV4dHVyZUNhY2hlQ1YubW0gKi8sCiAJCQkJQ0Q5
RDgyNzcxQzdCOEVFMTAwNkZGMDY2IC8qIFZpZGVvVGV4dHVyZUNvcGllckNWLmNwcCAqLywKQEAg
LTI4NzIwLDYgKzI4NzIxLDcgQEAKIAkJCQk3QzE5M0JDMTFGNUUwRUVEMDA4OEYzRTYgLyogSW1h
Z2VTbW9vdGhpbmdRdWFsaXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQk1NTQ2NzU3QjFGRDIxMkE5
MDAzQjEwQjAgLyogSW1hZ2VTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTRCMzQ4MDk0MEVF
RjUwRDQwMEFDMUI0MSAvKiBJbWFnZVNvdXJjZUNHLmggaW4gSGVhZGVycyAqLywKKwkJCQkwNzhF
RDE5MzIxNkQwNzk1MDA3NzVCMzMgLyogSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTU1MENCNDIxRTk1NUUzQzAwMTExQUEwIC8qIEltYWdlVHlwZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTI2Rjc1NkIzMUIzQjY2RjcwMDA1REQ3OSAvKiBJbW11dGFibGVORkEu
aCBpbiBIZWFkZXJzICovLAogCQkJCTI2Rjc1NkI1MUIzQjY4RjIwMDA1REQ3OSAvKiBJbW11dGFi
bGVORkFOb2RlQnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9NZWRpYVNhbXBsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVk
aWFTYW1wbGUuaAppbmRleCBlNTgyZmRiNDlhY2VlZGEwZmMzNjhhMGNlYzU2MTg4MWFlODhjMzdi
Li4wNTBkOTM4OWQxOGUxMGY1ZDk3YmE0M2Q4NjBjMmExMzUyMDY2MmZlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZWRpYVNhbXBsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL01lZGlhU2FtcGxlLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkZs
b2F0U2l6ZS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlzLmg+CisjaW5j
bHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvTWVkaWFUaW1lLmg+CiAjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcu
aD4KQEAgLTEwMCw2ICsxMDEsMjAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3QgPSAwOwogfTsKIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3Jl
OjpNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbj4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1W
YWx1ZXM8CisgICAgICAgIFdlYkNvcmU6Ok1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uLAorICAg
ICAgICBXZWJDb3JlOjpNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6Tm9uZSwKKyAgICAgICAg
V2ViQ29yZTo6TWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246OlVwc2lkZURvd24sCisgICAgICAg
IFdlYkNvcmU6Ok1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpSaWdodCwKKyAgICAgICAgV2Vi
Q29yZTo6TWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246OkxlZnQKKyAgICA+OworfTsKKworfSAv
LyBuYW1lc3BhY2UgV1RGCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY29jb2EvQ29yZVZpZGVvU29mdExpbmsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY29jb2EvQ29yZVZpZGVvU29mdExpbmsuY3BwCmluZGV4IDhiYjM2MmJmMjY4MGQzNmQ2ZTNm
MGQ1YzMyMDUyMTM1YzFkZjVhOTguLmRjZmIxY2ZiNDdhMDNkMzczYTNhNjIyODc0ZTcwMzg1OTE2
Y2UwOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL0NvcmVWaWRl
b1NvZnRMaW5rLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9Db3JlVmlk
ZW9Tb2Z0TGluay5jcHAKQEAgLTkyLDQgKzkyLDYgQEAgU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9T
T1VSQ0UoV2ViQ29yZSwgQ29yZVZpZGVvLCBrQ1ZQaXhlbEJ1ZmZlckV4dGVuZGVkUGl4ZWxzQm8K
IFNPRlRfTElOS19DT05TVEFOVF9GT1JfU09VUkNFKFdlYkNvcmUsIENvcmVWaWRlbywga0NWUGl4
ZWxCdWZmZXJPcGVuR0xDb21wYXRpYmlsaXR5S2V5LCBDRlN0cmluZ1JlZikKICNlbmRpZgogCitT
T0ZUX0xJTktfRlVOQ1RJT05fRk9SX1NPVVJDRShXZWJDb3JlLCBDb3JlVmlkZW8sIENWUGl4ZWxC
dWZmZXJDcmVhdGVXaXRoSU9TdXJmYWNlLCBDVlJldHVybiwgKENGQWxsb2NhdG9yUmVmIGFsbG9j
YXRvciwgSU9TdXJmYWNlUmVmIHN1cmZhY2UsIENGRGljdGlvbmFyeVJlZiBwaXhlbEJ1ZmZlckF0
dHJpYnV0ZXMsIENWUGl4ZWxCdWZmZXJSZWYgKiBwaXhlbEJ1ZmZlck91dCksIChhbGxvY2F0b3Is
IHN1cmZhY2UsIHBpeGVsQnVmZmVyQXR0cmlidXRlcywgcGl4ZWxCdWZmZXJPdXQpKQorCiAjZW5k
aWYgLy8gSEFWRShDT1JFX1ZJREVPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY29jb2EvQ29yZVZpZGVvU29mdExpbmsuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nv
Y29hL0NvcmVWaWRlb1NvZnRMaW5rLmgKaW5kZXggOWVlYjQzNDYxODkzODQ1YTY4MjQ0ODhiNDM4
ZjU5NjlhYjJjOGIxMi4uNTI5NWU1OGM4NDcwZjUyZjJhZDg0M2IxNjdhMTc5NDc3MDhkNTRiOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvQ29yZVZpZGVvU29mdExp
bmsuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9Db3JlVmlkZW9Tb2Z0TGlu
ay5oCkBAIC0xNDcsNCArMTQ3LDcgQEAgU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9IRUFERVIoV2Vi
Q29yZSwgQ29yZVZpZGVvLCBrQ1ZQaXhlbEJ1ZmZlck9wZW5HTENvbXBhdGliaWwKICNkZWZpbmUg
a0NWUGl4ZWxCdWZmZXJPcGVuR0xDb21wYXRpYmlsaXR5S2V5IGdldF9Db3JlVmlkZW9fa0NWUGl4
ZWxCdWZmZXJPcGVuR0xDb21wYXRpYmlsaXR5S2V5KCkKICNlbmRpZgogCitTT0ZUX0xJTktfRlVO
Q1RJT05fRk9SX0hFQURFUihXZWJDb3JlLCBDb3JlVmlkZW8sIENWUGl4ZWxCdWZmZXJDcmVhdGVX
aXRoSU9TdXJmYWNlLCBDVlJldHVybiwgKENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciwgSU9TdXJm
YWNlUmVmIHN1cmZhY2UsIENGRGljdGlvbmFyeVJlZiBwaXhlbEJ1ZmZlckF0dHJpYnV0ZXMsIENW
UGl4ZWxCdWZmZXJSZWYgKiBwaXhlbEJ1ZmZlck91dCksIChhbGxvY2F0b3IsIHN1cmZhY2UsIHBp
eGVsQnVmZmVyQXR0cmlidXRlcywgcGl4ZWxCdWZmZXJPdXQpKQorI2RlZmluZSBDVlBpeGVsQnVm
ZmVyQ3JlYXRlV2l0aElPU3VyZmFjZSBzb2Z0TGlua19Db3JlVmlkZW9fQ1ZQaXhlbEJ1ZmZlckNy
ZWF0ZVdpdGhJT1N1cmZhY2UKKwogI2VuZGlmIC8vIEhBVkUoQ09SRV9WSURFTykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvVG9vbGJveFNvZnRMaW5rLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvVG9vbGJveFNvZnRMaW5rLmNw
cAppbmRleCA5ODdmYmNmNjE5NjZkMjRjZjA1Y2EwODQ2OTlkMDU4MGEyZjExMWRmLi5lYWY3OGI0
NWQwNTI4N2E3OTZlNmEyYTA1Y2QwZThmMGE4OTk0ZDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jb2NvYS9WaWRlb1Rvb2xib3hTb2Z0TGluay5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvVmlkZW9Ub29sYm94U29mdExpbmsuY3BwCkBAIC01OSw2
ICs1OSw5IEBAIFNPRlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNFKFdlYkNvcmUsIFZpZGVvVG9v
bGJveCwgVlRQaXhlbFRyYW5zZmVyU2Vzc2lvblRyYW5zCiBTT0ZUX0xJTktfRlVOQ1RJT05fRk9S
X1NPVVJDRShXZWJDb3JlLCBWaWRlb1Rvb2xib3gsIFZUU2Vzc2lvblNldFByb3BlcnR5LCBPU1N0
YXR1cywgKFZUU2Vzc2lvblJlZiBzZXNzaW9uLCBDRlN0cmluZ1JlZiBwcm9wZXJ0eUtleSwgQ0ZU
eXBlUmVmIHByb3BlcnR5VmFsdWUpLCAoc2Vzc2lvbiwgcHJvcGVydHlLZXksIHByb3BlcnR5VmFs
dWUpKQogU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9TT1VSQ0UoV2ViQ29yZSwgVmlkZW9Ub29sYm94
LCBrVlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXlfU2NhbGluZ01vZGUsIENGU3RyaW5nUmVmKQog
U09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9TT1VSQ0UoV2ViQ29yZSwgVmlkZW9Ub29sYm94LCBrVlRT
Y2FsaW5nTW9kZV9UcmltLCBDRlN0cmluZ1JlZikKK1NPRlRfTElOS19DT05TVEFOVF9GT1JfU09V
UkNFKFdlYkNvcmUsIFZpZGVvVG9vbGJveCwga1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5S2V5X0Vu
YWJsZUhhcmR3YXJlQWNjZWxlcmF0ZWRUcmFuc2ZlciwgQ0ZTdHJpbmdSZWYpCitTT0ZUX0xJTktf
Q09OU1RBTlRfRk9SX1NPVVJDRShXZWJDb3JlLCBWaWRlb1Rvb2xib3gsIGtWVFBpeGVsVHJhbnNm
ZXJQcm9wZXJ0eUtleV9FbmFibGVIaWdoU3BlZWRUcmFuc2ZlciwgQ0ZTdHJpbmdSZWYpCitTT0ZU
X0xJTktfQ09OU1RBTlRfRk9SX1NPVVJDRShXZWJDb3JlLCBWaWRlb1Rvb2xib3gsIGtWVFBpeGVs
VHJhbnNmZXJQcm9wZXJ0eUtleV9SZWFsVGltZSwgQ0ZTdHJpbmdSZWYpCiAKIFNPRlRfTElOS19D
T05TVEFOVF9NQVlfRkFJTF9GT1JfU09VUkNFKFdlYkNvcmUsIFZpZGVvVG9vbGJveCwga1ZUSEVW
Q0RlY29kZXJDYXBhYmlsaXR5X1N1cHBvcnRlZFByb2ZpbGVzLCBDRlN0cmluZ1JlZikKIFNPRlRf
TElOS19DT05TVEFOVF9NQVlfRkFJTF9GT1JfU09VUkNFKFdlYkNvcmUsIFZpZGVvVG9vbGJveCwg
a1ZUSEVWQ0RlY29kZXJDYXBhYmlsaXR5X1BlclByb2ZpbGVTdXBwb3J0LCBDRlN0cmluZ1JlZikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvVG9vbGJveFNv
ZnRMaW5rLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9WaWRlb1Rvb2xib3hTb2Z0
TGluay5oCmluZGV4IGYzMTliMTg4ZWQxNjA1ODA5NDc2MTJlYjM3Mjg2ZGUyMjMyNGUyNWQuLjA3
MWI3MTFlZDA0ZDNiODE0ODIyODkyYTE1MGQ3YWU1ZmRlNmY4NTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvVG9vbGJveFNvZnRMaW5rLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvVmlkZW9Ub29sYm94U29mdExpbmsuaApAQCAtODUs
NiArODUsMTIgQEAgU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9IRUFERVIoV2ViQ29yZSwgVmlkZW9U
b29sYm94LCBrVlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXkKICNkZWZpbmUga1ZUUGl4ZWxUcmFu
c2ZlclByb3BlcnR5S2V5X1NjYWxpbmdNb2RlIGdldF9WaWRlb1Rvb2xib3hfa1ZUUGl4ZWxUcmFu
c2ZlclByb3BlcnR5S2V5X1NjYWxpbmdNb2RlKCkKIFNPRlRfTElOS19DT05TVEFOVF9GT1JfSEVB
REVSKFdlYkNvcmUsIFZpZGVvVG9vbGJveCwga1ZUU2NhbGluZ01vZGVfVHJpbSwgQ0ZTdHJpbmdS
ZWYpCiAjZGVmaW5lIGtWVFNjYWxpbmdNb2RlX1RyaW0gZ2V0X1ZpZGVvVG9vbGJveF9rVlRTY2Fs
aW5nTW9kZV9UcmltKCkKK1NPRlRfTElOS19DT05TVEFOVF9GT1JfSEVBREVSKFdlYkNvcmUsIFZp
ZGVvVG9vbGJveCwga1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5S2V5X0VuYWJsZUhhcmR3YXJlQWNj
ZWxlcmF0ZWRUcmFuc2ZlciwgQ0ZTdHJpbmdSZWYpCisjZGVmaW5lIGtWVFBpeGVsVHJhbnNmZXJQ
cm9wZXJ0eUtleV9FbmFibGVIYXJkd2FyZUFjY2VsZXJhdGVkVHJhbnNmZXIgZ2V0X1ZpZGVvVG9v
bGJveF9rVlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXlfRW5hYmxlSGFyZHdhcmVBY2NlbGVyYXRl
ZFRyYW5zZmVyKCkKK1NPRlRfTElOS19DT05TVEFOVF9GT1JfSEVBREVSKFdlYkNvcmUsIFZpZGVv
VG9vbGJveCwga1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5S2V5X0VuYWJsZUhpZ2hTcGVlZFRyYW5z
ZmVyLCBDRlN0cmluZ1JlZikKKyNkZWZpbmUga1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5S2V5X0Vu
YWJsZUhpZ2hTcGVlZFRyYW5zZmVyIGdldF9WaWRlb1Rvb2xib3hfa1ZUUGl4ZWxUcmFuc2ZlclBy
b3BlcnR5S2V5X0VuYWJsZUhpZ2hTcGVlZFRyYW5zZmVyKCkKK1NPRlRfTElOS19DT05TVEFOVF9G
T1JfSEVBREVSKFdlYkNvcmUsIFZpZGVvVG9vbGJveCwga1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5
S2V5X1JlYWxUaW1lLCBDRlN0cmluZ1JlZikKKyNkZWZpbmUga1ZUUGl4ZWxUcmFuc2ZlclByb3Bl
cnR5S2V5X1JlYWxUaW1lIGdldF9WaWRlb1Rvb2xib3hfa1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5
S2V5X1JlYWxUaW1lKCkKIAogU09GVF9MSU5LX0NPTlNUQU5UX01BWV9GQUlMX0ZPUl9IRUFERVIo
V2ViQ29yZSwgVmlkZW9Ub29sYm94LCBrVlRIRVZDRGVjb2RlckNhcGFiaWxpdHlfU3VwcG9ydGVk
UHJvZmlsZXMsIENGU3RyaW5nUmVmKQogI2RlZmluZSBrVlRIRVZDRGVjb2RlckNhcGFiaWxpdHlf
U3VwcG9ydGVkUHJvZmlsZXMgZ2V0X1ZpZGVvVG9vbGJveF9rVlRIRVZDRGVjb2RlckNhcGFiaWxp
dHlfU3VwcG9ydGVkUHJvZmlsZXMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpDLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBs
ZUFWRk9iakMuaAppbmRleCBkNWE4MDZkZmUzM2U5N2MwYzFmMjhkMjExMGRmNTg4Zjk1NjgyNmFj
Li4wOTIzODgzZTViYzdlNDQ2NGIxMTZiOTJiYmZkMDhhNmUyNjNhNzJmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNh
bXBsZUFWRk9iakMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMuaApAQCAtMzEsMTMgKzMxLDEyIEBACiAj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAorCiBj
bGFzcyBNZWRpYVNhbXBsZUFWRk9iakMgOiBwdWJsaWMgTWVkaWFTYW1wbGUgewogcHVibGljOgog
ICAgIHN0YXRpYyBSZWY8TWVkaWFTYW1wbGVBVkZPYmpDPiBjcmVhdGUoQ01TYW1wbGVCdWZmZXJS
ZWYgc2FtcGxlLCBpbnQgdHJhY2tJRCkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBNZWRpYVNhbXBs
ZUFWRk9iakMoc2FtcGxlLCB0cmFja0lEKSk7IH0KICAgICBzdGF0aWMgUmVmPE1lZGlhU2FtcGxl
QVZGT2JqQz4gY3JlYXRlKENNU2FtcGxlQnVmZmVyUmVmIHNhbXBsZSwgQXRvbWljU3RyaW5nIHRy
YWNrSUQpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTWVkaWFTYW1wbGVBVkZPYmpDKHNhbXBsZSwg
dHJhY2tJRCkpOyB9CiAgICAgc3RhdGljIFJlZjxNZWRpYVNhbXBsZUFWRk9iakM+IGNyZWF0ZShD
TVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGUsIFZpZGVvUm90YXRpb24gcm90YXRpb24gPSBWaWRlb1Jv
dGF0aW9uOjpOb25lLCBib29sIG1pcnJvcmVkID0gZmFsc2UpIHsgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgTWVkaWFTYW1wbGVBVkZPYmpDKHNhbXBsZSwgcm90YXRpb24sIG1pcnJvcmVkKSk7IH0KLSAg
ICBzdGF0aWMgUmVmUHRyPE1lZGlhU2FtcGxlQVZGT2JqQz4gY3JlYXRlSW1hZ2VTYW1wbGUoUmVm
PEpTQzo6VWludDhDbGFtcGVkQXJyYXk+JiYsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVk
IGxvbmcgaGVpZ2h0KTsKICAgICBzdGF0aWMgUmVmUHRyPE1lZGlhU2FtcGxlQVZGT2JqQz4gY3Jl
YXRlSW1hZ2VTYW1wbGUoVmVjdG9yPHVpbnQ4X3Q+JiYsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVu
c2lnbmVkIGxvbmcgaGVpZ2h0KTsKIAogICAgIFJlZlB0cjxKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5
PiBnZXRSR0JBSW1hZ2VEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC02NSw2ICs2NCw3IEBAIHB1
YmxpYzoKIAogICAgIFZpZGVvUm90YXRpb24gdmlkZW9Sb3RhdGlvbigpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIG1fcm90YXRpb247IH0KICAgICBib29sIHZpZGVvTWlycm9yZWQoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBtX21pcnJvcmVkOyB9CisgICAgdWludDMyX3QgdmlkZW9QaXhlbEZv
cm1hdCgpIGNvbnN0OwogCiAgICAgQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlQnVmZmVyKCkgY29u
c3QgeyByZXR1cm4gbV9zYW1wbGUuZ2V0KCk7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpD
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
TWVkaWFTYW1wbGVBVkZPYmpDLm1tCmluZGV4IGMzYmNhNjEwOTA1NTRmODI4Yjg0ODM5YWQ0MDU0
OWE2MjdiZmU3NDAuLjY3YmI0YzZkZmUzMzA0OWRiZTE5MjI4YjUwZjdjYTg3NjcxNGM3ZWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL01lZGlhU2FtcGxlQVZGT2JqQy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMubW0KQEAgLTExMyw2
ICsxMTMsMTIgQEAgUGxhdGZvcm1TYW1wbGUgTWVkaWFTYW1wbGVBVkZPYmpDOjpwbGF0Zm9ybVNh
bXBsZSgpCiAgICAgcmV0dXJuIHNhbXBsZTsKIH0KIAordWludDMyX3QgTWVkaWFTYW1wbGVBVkZP
YmpDOjp2aWRlb1BpeGVsRm9ybWF0KCkgY29uc3QKK3sKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0g
c3RhdGljX2Nhc3Q8Q1ZQaXhlbEJ1ZmZlclJlZj4oQ01TYW1wbGVCdWZmZXJHZXRJbWFnZUJ1ZmZl
cihtX3NhbXBsZS5nZXQoKSkpOworICAgIHJldHVybiBDVlBpeGVsQnVmZmVyR2V0UGl4ZWxGb3Jt
YXRUeXBlKHBpeGVsQnVmZmVyKTsKK30KKwogc3RhdGljIGJvb2wgQ01TYW1wbGVCdWZmZXJJc1Jh
bmRvbUFjY2VzcyhDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGUpCiB7CiAgICAgQ0ZBcnJheVJlZiBh
dHRhY2htZW50cyA9IENNU2FtcGxlQnVmZmVyR2V0U2FtcGxlQXR0YWNobWVudHNBcnJheShzYW1w
bGUsIGZhbHNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2N2L0ltYWdlVHJhbnNmZXJTZXNzaW9uVlQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2N2L0ltYWdlVHJhbnNmZXJTZXNzaW9uVlQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ODE0M2JlNDdl
YjBiZTAxYmNhMzA4MGNhZWFjY2Y0ZDkwMzdiMTFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5oCkBA
IC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShWSURF
T1RPT0xCT1gpCisKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiTWVkaWFTYW1wbGVB
VkZPYmpjLmgiCisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCit0eXBlZGVmIHN0cnVjdCBD
R0ltYWdlICpDR0ltYWdlUmVmOwordHlwZWRlZiBzdHJ1Y3QgT3BhcXVlVlRQaXhlbFRyYW5zZmVy
U2Vzc2lvbiogVlRQaXhlbFRyYW5zZmVyU2Vzc2lvblJlZjsKK3R5cGVkZWYgc3RydWN0IF9fQ1ZC
dWZmZXIgKkNWUGl4ZWxCdWZmZXJSZWY7Cit0eXBlZGVmIHN0cnVjdCBfX0NWUGl4ZWxCdWZmZXJQ
b29sICpDVlBpeGVsQnVmZmVyUG9vbFJlZjsKK3R5cGVkZWYgc3RydWN0IF9fSU9TdXJmYWNlICpJ
T1N1cmZhY2VSZWY7Cit0eXBlZGVmIHN0cnVjdCBvcGFxdWVDTVNhbXBsZUJ1ZmZlciAqQ01TYW1w
bGVCdWZmZXJSZWY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VUcmFuc2Zl
clNlc3Npb25WVCB7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZVRy
YW5zZmVyU2Vzc2lvblZUPiBjcmVhdGUodWludDMyX3QgcGl4ZWxGb3JtYXQpCisgICAgeworICAg
ICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ+KG5ldyBJ
bWFnZVRyYW5zZmVyU2Vzc2lvblZUKHBpeGVsRm9ybWF0KSk7CisgICAgfQorCisgICAgUmVmUHRy
PE1lZGlhU2FtcGxlPiBjb252ZXJ0TWVkaWFTYW1wbGUoTWVkaWFTYW1wbGUmLCBjb25zdCBJbnRT
aXplJik7CisgICAgUmVmUHRyPE1lZGlhU2FtcGxlPiBjcmVhdGVNZWRpYVNhbXBsZShDR0ltYWdl
UmVmLCBjb25zdCBNZWRpYVRpbWUmLCBjb25zdCBJbnRTaXplJiwgTWVkaWFTYW1wbGU6OlZpZGVv
Um90YXRpb24gcm90YXRpb24gPSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6Tm9uZSwgYm9v
bCBtaXJyb3JlZCA9IGZhbHNlKTsKKyAgICBSZWZQdHI8TWVkaWFTYW1wbGU+IGNyZWF0ZU1lZGlh
U2FtcGxlKENNU2FtcGxlQnVmZmVyUmVmLCBjb25zdCBJbnRTaXplJiwgTWVkaWFTYW1wbGU6OlZp
ZGVvUm90YXRpb24gcm90YXRpb24gPSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6Tm9uZSwg
Ym9vbCBtaXJyb3JlZCA9IGZhbHNlKTsKKworI2lmIEhBVkUoSU9TVVJGQUNFKQorICAgIFJlZlB0
cjxNZWRpYVNhbXBsZT4gY3JlYXRlTWVkaWFTYW1wbGUoSU9TdXJmYWNlUmVmLCBjb25zdCBNZWRp
YVRpbWUmLCBjb25zdCBJbnRTaXplJiwgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb24gcm90YXRp
b24gPSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6Tm9uZSwgYm9vbCBtaXJyb3JlZCA9IGZh
bHNlKTsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlVHJhbnNm
ZXJTZXNzaW9uVlQodWludDMyX3QpOworCisjaWYgSEFWRShJT1NVUkZBQ0UpCisgICAgQ0ZEaWN0
aW9uYXJ5UmVmIGlvU3VyZmFjZVBpeGVsQnVmZmVyQ3JlYXRpb25PcHRpb25zKElPU3VyZmFjZVJl
Zik7CisgICAgUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBjcmVhdGVDTVNhbXBsZUJ1ZmZl
cihJT1N1cmZhY2VSZWYsIGNvbnN0IE1lZGlhVGltZSYsIGNvbnN0IEludFNpemUmKTsKKyAgICBS
ZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gY3JlYXRlUGl4ZWxCdWZmZXIoSU9TdXJmYWNlUmVm
LCBjb25zdCBJbnRTaXplJik7CisjZW5kaWYKKworICAgIFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZl
clJlZj4gY29udmVydENNU2FtcGxlQnVmZmVyKENNU2FtcGxlQnVmZmVyUmVmLCBjb25zdCBJbnRT
aXplJik7CisgICAgUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBjcmVhdGVDTVNhbXBsZUJ1
ZmZlcihDVlBpeGVsQnVmZmVyUmVmLCBjb25zdCBNZWRpYVRpbWUmLCBjb25zdCBJbnRTaXplJik7
CisgICAgUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBjcmVhdGVDTVNhbXBsZUJ1ZmZlcihD
R0ltYWdlUmVmLCBjb25zdCBNZWRpYVRpbWUmLCBjb25zdCBJbnRTaXplJik7CisKKyAgICBSZXRh
aW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gY29udmVydFBpeGVsQnVmZmVyKENWUGl4ZWxCdWZmZXJS
ZWYsIGNvbnN0IEludFNpemUmKTsKKyAgICBSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gY3Jl
YXRlUGl4ZWxCdWZmZXIoQ01TYW1wbGVCdWZmZXJSZWYsIGNvbnN0IEludFNpemUmKTsKKyAgICBS
ZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gY3JlYXRlUGl4ZWxCdWZmZXIoQ0dJbWFnZVJlZiwg
Y29uc3QgSW50U2l6ZSYpOworCisgICAgYm9vbCBzZXRTaXplKGNvbnN0IEludFNpemUmKTsKKwor
ICAgIFJldGFpblB0cjxWVFBpeGVsVHJhbnNmZXJTZXNzaW9uUmVmPiBtX3RyYW5zZmVyU2Vzc2lv
bjsKKyAgICBSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclBvb2xSZWY+IG1fb3V0cHV0QnVmZmVyUG9v
bDsKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBtX2lvU3VyZmFjZUJ1ZmZlckF0dHJp
YnV0ZXM7CisgICAgdWludDMyX3QgbV9waXhlbEZvcm1hdDsKKyAgICBJbnRTaXplIG1fc2l6ZTsK
K307CisKK30KKworI2VuZGlmIC8vIFVTRShWSURFT1RPT0xCT1gpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9JbWFnZVRyYW5zZmVyU2Vzc2lvblZULm1t
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvSW1hZ2VUcmFuc2ZlclNlc3Np
b25WVC5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5hYTdmY2NlNjNmYzE2ODEwNzM0MDJkMGY1MmUyNDc1NWFiOWE4
MDhmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y3YvSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5tbQpAQCAtMCwwICsxLDM4MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkltYWdlVHJhbnNmZXJTZXNzaW9uVlQu
aCIKKworI2lmIFVTRShWSURFT1RPT0xCT1gpCisKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBv
cnQgIk1lZGlhU2FtcGxlQVZGT2JqQy5oIgorI2ltcG9ydCA8Q29yZU1lZGlhL0NNRm9ybWF0RGVz
Y3JpcHRpb24uaD4KKyNpbXBvcnQgPENvcmVNZWRpYS9DTVNhbXBsZUJ1ZmZlci5oPgorI2ltcG9y
dCA8cGFsL2NmL0NvcmVNZWRpYVNvZnRMaW5rLmg+CisKKyNpZiBIQVZFKElPU1VSRkFDRSkKKyNp
bmNsdWRlIDxwYWwvc3BpL2NvY29hL0lPU3VyZmFjZVNQSS5oPgorI2VuZGlmCisKKyNpbXBvcnQg
IkNvcmVWaWRlb1NvZnRMaW5rLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK3VzaW5nIG5hbWVz
cGFjZSBQQUw7CisKK3N0YXRpYyBpbmxpbmUgQ0ZTdHJpbmdSZWYgY3ZQaXhlbEZvcm1hdE9wZW5H
TEtleSgpCit7CisjaWYgUExBVEZPUk0oSU9TKSAmJiAhUExBVEZPUk0oSU9TTUFDKQorICAgIHJl
dHVybiBrQ1ZQaXhlbEZvcm1hdE9wZW5HTEVTQ29tcGF0aWJpbGl0eTsKKyNlbHNlCisgICAgcmV0
dXJuIGtDVlBpeGVsQnVmZmVyT3BlbkdMQ29tcGF0aWJpbGl0eUtleTsKKyNlbmRpZgorfQorCitJ
bWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpJbWFnZVRyYW5zZmVyU2Vzc2lvblZUKHVpbnQzMl90IHBp
eGVsRm9ybWF0KQoreworICAgIFZUUGl4ZWxUcmFuc2ZlclNlc3Npb25SZWYgdHJhbnNmZXJTZXNz
aW9uOworICAgIFZUUGl4ZWxUcmFuc2ZlclNlc3Npb25DcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVs
dCwgJnRyYW5zZmVyU2Vzc2lvbik7CisgICAgQVNTRVJUKHRyYW5zZmVyU2Vzc2lvbik7CisgICAg
bV90cmFuc2ZlclNlc3Npb24gPSBhZG9wdENGKHRyYW5zZmVyU2Vzc2lvbik7CisKKyAgICBWVFNl
c3Npb25TZXRQcm9wZXJ0eSh0cmFuc2ZlclNlc3Npb24sIGtWVFBpeGVsVHJhbnNmZXJQcm9wZXJ0
eUtleV9TY2FsaW5nTW9kZSwga1ZUU2NhbGluZ01vZGVfVHJpbSk7CisgICAgVlRTZXNzaW9uU2V0
UHJvcGVydHkodHJhbnNmZXJTZXNzaW9uLCBrVlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXlfRW5h
YmxlSGlnaFNwZWVkVHJhbnNmZXIsIEAoWUVTKSk7CisgICAgVlRTZXNzaW9uU2V0UHJvcGVydHko
dHJhbnNmZXJTZXNzaW9uLCBrVlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXlfUmVhbFRpbWUsIEAo
WUVTKSk7CisjaWYgUExBVEZPUk0oSU9TKSAmJiAhUExBVEZPUk0oSU9TTUFDKQorICAgIFZUU2Vz
c2lvblNldFByb3BlcnR5KHRyYW5zZmVyU2Vzc2lvbiwga1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5
S2V5X0VuYWJsZUhhcmR3YXJlQWNjZWxlcmF0ZWRUcmFuc2ZlciwgQChZRVMpKTsKKyNlbmRpZgor
CisgICAgbV9waXhlbEZvcm1hdCA9IHBpeGVsRm9ybWF0OworfQorCitib29sIEltYWdlVHJhbnNm
ZXJTZXNzaW9uVlQ6OnNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAobV9z
aXplID09IHNpemUgJiYgbV9vdXRwdXRCdWZmZXJQb29sKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIENGRGljdGlvbmFyeVJlZiBwaXhlbEJ1ZmZlck9wdGlvbnMgPSAoX19icmlkZ2UgQ0ZE
aWN0aW9uYXJ5UmVmKSBAeworICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ1ZQaXhlbEJ1
ZmZlcldpZHRoS2V5IDpAKHNpemUud2lkdGgoKSksCisgICAgICAgIChfX2JyaWRnZSBOU1N0cmlu
ZyAqKWtDVlBpeGVsQnVmZmVySGVpZ2h0S2V5OkAoc2l6ZS5oZWlnaHQoKSksCisgICAgICAgIChf
X2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsQnVmZmVyUGl4ZWxGb3JtYXRUeXBlS2V5OkAobV9w
aXhlbEZvcm1hdCksCisgICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWN2UGl4ZWxGb3JtYXRP
cGVuR0xLZXkoKSA6IEAoWUVTKSwKKyAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4
ZWxCdWZmZXJJT1N1cmZhY2VQcm9wZXJ0aWVzS2V5IDogQHsgLyplbXB0eSBkaWN0aW9uYXJ5Ki8g
fSwKKyAgICB9OworCisgICAgQ0ZEaWN0aW9uYXJ5UmVmIHBpeGVsQnVmZmVyUG9vbE9wdGlvbnMg
PSAoX19icmlkZ2UgQ0ZEaWN0aW9uYXJ5UmVmKSBAeworICAgICAgICAoX19icmlkZ2UgTlNTdHJp
bmcgKilrQ1ZQaXhlbEJ1ZmZlclBvb2xNaW5pbXVtQnVmZmVyQ291bnRLZXkgOiBAKDYpCisgICAg
fTsKKworICAgIENWUGl4ZWxCdWZmZXJQb29sUmVmIGJ1ZmZlclBvb2w7CisgICAgYXV0byBzdGF0
dXMgPSBDVlBpeGVsQnVmZmVyUG9vbENyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBwaXhlbEJ1
ZmZlclBvb2xPcHRpb25zLCBwaXhlbEJ1ZmZlck9wdGlvbnMsICZidWZmZXJQb29sKTsKKyAgICBB
U1NFUlQoIXN0YXR1cyk7CisgICAgaWYgKHN0YXR1cyAhPSBrQ1ZSZXR1cm5TdWNjZXNzKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX291dHB1dEJ1ZmZlclBvb2wgPSBhZG9wdENGKGJ1
ZmZlclBvb2wpOworICAgIG1fc2l6ZSA9IHNpemU7CisgICAgbV9pb1N1cmZhY2VCdWZmZXJBdHRy
aWJ1dGVzID0gbnVsbHB0cjsKKworICAgIHJldHVybiB0cnVlOworfQorCitSZXRhaW5QdHI8Q1ZQ
aXhlbEJ1ZmZlclJlZj4gSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y29udmVydFBpeGVsQnVmZmVy
KENWUGl4ZWxCdWZmZXJSZWYgc291cmNlQnVmZmVyLCBjb25zdCBJbnRTaXplJiBzaXplKQorewor
ICAgIGlmIChzb3VyY2VCdWZmZXIgJiYgbV9zaXplID09IEludFNpemUoQ1ZQaXhlbEJ1ZmZlckdl
dFdpZHRoKHNvdXJjZUJ1ZmZlciksIENWUGl4ZWxCdWZmZXJHZXRIZWlnaHQoc291cmNlQnVmZmVy
KSkgJiYgbV9waXhlbEZvcm1hdCA9PSBDVlBpeGVsQnVmZmVyR2V0UGl4ZWxGb3JtYXRUeXBlKHNv
dXJjZUJ1ZmZlcikpCisgICAgICAgIHJldHVybiByZXRhaW5QdHIoc291cmNlQnVmZmVyKTsKKwor
ICAgIGlmICghc291cmNlQnVmZmVyIHx8ICFzZXRTaXplKHNpemUpKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIENWUGl4ZWxCdWZmZXJSZWYgb3V0cHV0QnVmZmVyID0gbnVsbHB0cjsK
KyAgICBhdXRvIHN0YXR1cyA9IENWUGl4ZWxCdWZmZXJQb29sQ3JlYXRlUGl4ZWxCdWZmZXIoa0NG
QWxsb2NhdG9yRGVmYXVsdCwgbV9vdXRwdXRCdWZmZXJQb29sLmdldCgpLCAmb3V0cHV0QnVmZmVy
KTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhLCAiSW1hZ2VU
cmFuc2ZlclNlc3Npb25WVDo6Y29udmVydFBpeGVsQnVmZmVyLCBDVlBpeGVsQnVmZmVyUG9vbENy
ZWF0ZVBpeGVsQnVmZmVyIGZhaWxlZCB3aXRoIGVycm9yICVkIiwgc3RhdGljX2Nhc3Q8aW50Pihz
dGF0dXMpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIGF1dG8gcmVzdWx0
ID0gYWRvcHRDRihvdXRwdXRCdWZmZXIpOworCisgICAgYXV0byBlcnIgPSBWVFBpeGVsVHJhbnNm
ZXJTZXNzaW9uVHJhbnNmZXJJbWFnZShtX3RyYW5zZmVyU2Vzc2lvbi5nZXQoKSwgc291cmNlQnVm
ZmVyLCBvdXRwdXRCdWZmZXIpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgUkVMRUFTRV9MT0co
TWVkaWEsICJJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjb252ZXJ0UGl4ZWxCdWZmZXIsIFZUUGl4
ZWxUcmFuc2ZlclNlc3Npb25UcmFuc2ZlckltYWdlIGZhaWxlZCB3aXRoIGVycm9yICVkIiwgc3Rh
dGljX2Nhc3Q8aW50PihlcnIpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJSZWY+IEltYWdl
VHJhbnNmZXJTZXNzaW9uVlQ6OmNyZWF0ZVBpeGVsQnVmZmVyKENNU2FtcGxlQnVmZmVyUmVmIHNv
dXJjZUJ1ZmZlciwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBhdXRvIGNvbnZlcnRlZFBp
eGVsQnVmZmVyID0gY29udmVydFBpeGVsQnVmZmVyKENNU2FtcGxlQnVmZmVyR2V0SW1hZ2VCdWZm
ZXIoc291cmNlQnVmZmVyKSwgc2l6ZSk7CisgICAgaWYgKCFjb252ZXJ0ZWRQaXhlbEJ1ZmZlcikK
KyAgICAgICAgUkVMRUFTRV9MT0coTWVkaWEsICJJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVh
dGVQaXhlbEJ1ZmZlcjogQ01TYW1wbGVCdWZmZXJHZXRJbWFnZUJ1ZmZlciByZXR1cm5lZCBudWxs
cHRyIik7CisKKyAgICByZXR1cm4gY29udmVydGVkUGl4ZWxCdWZmZXI7Cit9CisKK1JldGFpblB0
cjxDTVNhbXBsZUJ1ZmZlclJlZj4gSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y29udmVydENNU2Ft
cGxlQnVmZmVyKENNU2FtcGxlQnVmZmVyUmVmIHNvdXJjZUJ1ZmZlciwgY29uc3QgSW50U2l6ZSYg
c2l6ZSkKK3sKKyAgICBpZiAoIXNvdXJjZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBhdXRvIGRlc2NyaXB0aW9uID0gQ01TYW1wbGVCdWZmZXJHZXRGb3JtYXREZXNjcmlw
dGlvbihzb3VyY2VCdWZmZXIpOworICAgIGF1dG8gc291cmNlU2l6ZSA9IEZsb2F0U2l6ZShDTVZp
ZGVvRm9ybWF0RGVzY3JpcHRpb25HZXRQcmVzZW50YXRpb25EaW1lbnNpb25zKGRlc2NyaXB0aW9u
LCB0cnVlLCB0cnVlKSk7CisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IHN0YXRpY19jYXN0PENWUGl4
ZWxCdWZmZXJSZWY+KENNU2FtcGxlQnVmZmVyR2V0SW1hZ2VCdWZmZXIoc291cmNlQnVmZmVyKSk7
CisgICAgaWYgKHNpemUgPT0gcm91bmRlZEludFNpemUoc291cmNlU2l6ZSkgJiYgbV9waXhlbEZv
cm1hdCA9PSBDVlBpeGVsQnVmZmVyR2V0UGl4ZWxGb3JtYXRUeXBlKHBpeGVsQnVmZmVyKSkKKyAg
ICAgICAgcmV0dXJuIHJldGFpblB0cihzb3VyY2VCdWZmZXIpOworCisgICAgaWYgKCFzZXRTaXpl
KHNpemUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gY29udmVydGVkUGl4
ZWxCdWZmZXIgPSBjcmVhdGVQaXhlbEJ1ZmZlcihzb3VyY2VCdWZmZXIsIHNpemUpOworICAgIGlm
ICghY29udmVydGVkUGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
Q01JdGVtQ291bnQgaXRlbUNvdW50ID0gMDsKKyAgICBhdXRvIHN0YXR1cyA9IENNU2FtcGxlQnVm
ZmVyR2V0U2FtcGxlVGltaW5nSW5mb0FycmF5KHNvdXJjZUJ1ZmZlciwgMSwgbnVsbHB0ciwgJml0
ZW1Db3VudCk7CisgICAgaWYgKHN0YXR1cyAhPSBub0VycikgeworICAgICAgICBSRUxFQVNFX0xP
RyhNZWRpYSwgIkltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNvbnZlcnRDTVNhbXBsZUJ1ZmZlcjog
Q01TYW1wbGVCdWZmZXJHZXRTYW1wbGVUaW1pbmdJbmZvQXJyYXkgZmFpbGVkIHdpdGggZXJyb3Ig
Y29kZTogJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICB9CisgICAgVmVjdG9yPENNU2FtcGxlVGltaW5nSW5mbz4gdGltaW5nSW5mb0Fy
cmF5OworICAgIENNU2FtcGxlVGltaW5nSW5mbyogdGltZWluZ0luZm9QdHIgPSBudWxscHRyOwor
ICAgIGlmIChpdGVtQ291bnQpIHsKKyAgICAgICAgdGltaW5nSW5mb0FycmF5Lmdyb3coaXRlbUNv
dW50KTsKKyAgICAgICAgc3RhdHVzID0gQ01TYW1wbGVCdWZmZXJHZXRTYW1wbGVUaW1pbmdJbmZv
QXJyYXkoc291cmNlQnVmZmVyLCBpdGVtQ291bnQsIHRpbWluZ0luZm9BcnJheS5kYXRhKCksIG51
bGxwdHIpOworICAgICAgICBpZiAoc3RhdHVzICE9IG5vRXJyKSB7CisgICAgICAgICAgICBSRUxF
QVNFX0xPRyhNZWRpYSwgIkltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNvbnZlcnRDTVNhbXBsZUJ1
ZmZlcjogQ01TYW1wbGVCdWZmZXJHZXRTYW1wbGVUaW1pbmdJbmZvQXJyYXkgZmFpbGVkIHdpdGgg
ZXJyb3IgY29kZTogJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOworICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgdGltZWluZ0luZm9QdHIgPSB0aW1p
bmdJbmZvQXJyYXkuZGF0YSgpOworICAgIH0KKworICAgIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlv
blJlZiBmb3JtYXREZXNjcmlwdGlvbiA9IG51bGxwdHI7CisgICAgc3RhdHVzID0gQ01WaWRlb0Zv
cm1hdERlc2NyaXB0aW9uQ3JlYXRlRm9ySW1hZ2VCdWZmZXIoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
Y29udmVydGVkUGl4ZWxCdWZmZXIuZ2V0KCksICZmb3JtYXREZXNjcmlwdGlvbik7CisgICAgaWYg
KHN0YXR1cyAhPSBub0VycikgeworICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIkltYWdlVHJh
bnNmZXJTZXNzaW9uVlQ6OmNvbnZlcnRDTVNhbXBsZUJ1ZmZlcjogQ01WaWRlb0Zvcm1hdERlc2Ny
aXB0aW9uQ3JlYXRlRm9ySW1hZ2VCdWZmZXIgcmV0dXJuZWQ6ICVkIiwgc3RhdGljX2Nhc3Q8aW50
PihzdGF0dXMpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgQ01TYW1w
bGVCdWZmZXJSZWYgcmVzaXplZFNhbXBsZUJ1ZmZlcjsKKyAgICBzdGF0dXMgPSBDTVNhbXBsZUJ1
ZmZlckNyZWF0ZVJlYWR5V2l0aEltYWdlQnVmZmVyKGtDRkFsbG9jYXRvckRlZmF1bHQsIGNvbnZl
cnRlZFBpeGVsQnVmZmVyLmdldCgpLCBmb3JtYXREZXNjcmlwdGlvbiwgdGltZWluZ0luZm9QdHIs
ICZyZXNpemVkU2FtcGxlQnVmZmVyKTsKKyAgICBDRlJlbGVhc2UoZm9ybWF0RGVzY3JpcHRpb24p
OworICAgIGlmIChzdGF0dXMgIT0gbm9FcnIpIHsKKyAgICAgICAgUkVMRUFTRV9MT0coTWVkaWEs
ICJJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjb252ZXJ0Q01TYW1wbGVCdWZmZXI6IGZhaWxlZCB0
byBjcmVhdGUgQ01TYW1wbGVCdWZmZXIgd2l0aCBlcnJvciBjb2RlOiAlZCIsIHN0YXRpY19jYXN0
PGludD4oc3RhdHVzKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHJl
dHVybiBhZG9wdENGKHJlc2l6ZWRTYW1wbGVCdWZmZXIpOworfQorCitSZXRhaW5QdHI8Q1ZQaXhl
bEJ1ZmZlclJlZj4gSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlUGl4ZWxCdWZmZXIoQ0dJ
bWFnZVJlZiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAoIWltYWdlIHx8
ICFzZXRTaXplKHNpemUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIENWUGl4ZWxC
dWZmZXJSZWYgcmdiQnVmZmVyOworICAgIGF1dG8gaW1hZ2VTaXplID0gSW50U2l6ZShDR0ltYWdl
R2V0V2lkdGgoaW1hZ2UpLCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKSk7CisgICAgYXV0byBzdGF0
dXMgPSBDVlBpeGVsQnVmZmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGltYWdlU2l6ZS53
aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCksIGtDVlBpeGVsRm9ybWF0VHlwZV8zMkFSR0IsIG51
bGxwdHIsICZyZ2JCdWZmZXIpOworICAgIGlmIChzdGF0dXMgIT0ga0NWUmV0dXJuU3VjY2Vzcykg
eworICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIkltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNy
ZWF0ZVBpeGVsQnVmZmVyOiBDVlBpeGVsQnVmZmVyQ3JlYXRlIGZhaWxlZCB3aXRoIGVycm9yIGNv
ZGU6ICVkIiwgc3RhdGljX2Nhc3Q8aW50PihzdGF0dXMpKTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorCisgICAgQ1ZQaXhlbEJ1ZmZlckxvY2tCYXNlQWRkcmVzcyhyZ2JCdWZmZXIs
IDApOworICAgIHZvaWQqIGRhdGEgPSBDVlBpeGVsQnVmZmVyR2V0QmFzZUFkZHJlc3MocmdiQnVm
ZmVyKTsKKyAgICBhdXRvIHJldGFpbmVkUkdCQnVmZmVyID0gYWRvcHRDRihyZ2JCdWZmZXIpOwor
ICAgIGF1dG8gY29udGV4dCA9IENHQml0bWFwQ29udGV4dENyZWF0ZShkYXRhLCBpbWFnZVNpemUu
d2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpLCA4LCBDVlBpeGVsQnVmZmVyR2V0Qnl0ZXNQZXJS
b3cocmdiQnVmZmVyKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwgKENHQml0bWFwSW5mbykga0NHSW1h
Z2VBbHBoYU5vbmVTa2lwRmlyc3QpOworICAgIGlmICghY29udGV4dCkgeworICAgICAgICBSRUxF
QVNFX0xPRyhNZWRpYSwgIkltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNyZWF0ZVBpeGVsQnVmZmVy
OiBDR0JpdG1hcENvbnRleHRDcmVhdGUgcmV0dXJuZWQgbnVsbHB0ciIpOworICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBhdXRvIHJldGFpbmVkQ29udGV4dCA9IGFkb3B0Q0Yo
Y29udGV4dCk7CisgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQsIENHUmVjdE1ha2UoMCwg
MCwgaW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSksIGltYWdlKTsKKyAgICBD
VlBpeGVsQnVmZmVyVW5sb2NrQmFzZUFkZHJlc3MocmdiQnVmZmVyLCAwKTsKKworICAgIHJldHVy
biBjb252ZXJ0UGl4ZWxCdWZmZXIocmdiQnVmZmVyLCBzaXplKTsKK30KKworUmV0YWluUHRyPENN
U2FtcGxlQnVmZmVyUmVmPiBJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVhdGVDTVNhbXBsZUJ1
ZmZlcihDVlBpeGVsQnVmZmVyUmVmIHNvdXJjZUJ1ZmZlciwgY29uc3QgTWVkaWFUaW1lJiBzYW1w
bGVUaW1lLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIGlmICghc291cmNlQnVmZmVyIHx8
ICFzZXRTaXplKHNpemUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gYnVm
ZmVyU2l6ZSA9IEludFNpemUoQ1ZQaXhlbEJ1ZmZlckdldFdpZHRoKHNvdXJjZUJ1ZmZlciksIENW
UGl4ZWxCdWZmZXJHZXRIZWlnaHQoc291cmNlQnVmZmVyKSk7CisgICAgUmV0YWluUHRyPENWUGl4
ZWxCdWZmZXJSZWY+IGlucHV0QnVmZmVyID0gc291cmNlQnVmZmVyOworICAgIGlmIChidWZmZXJT
aXplICE9IG1fc2l6ZSB8fCBtX3BpeGVsRm9ybWF0ICE9IENWUGl4ZWxCdWZmZXJHZXRQaXhlbEZv
cm1hdFR5cGUoc291cmNlQnVmZmVyKSkgeworICAgICAgICBpbnB1dEJ1ZmZlciA9IGNvbnZlcnRQ
aXhlbEJ1ZmZlcihzb3VyY2VCdWZmZXIsIG1fc2l6ZSk7CisgICAgICAgIGlmICghaW5wdXRCdWZm
ZXIpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBDTVZpZGVvRm9y
bWF0RGVzY3JpcHRpb25SZWYgZm9ybWF0RGVzY3JpcHRpb24gPSBudWxscHRyOworICAgIGF1dG8g
c3RhdHVzID0gQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uQ3JlYXRlRm9ySW1hZ2VCdWZmZXIoa0NG
QWxsb2NhdG9yRGVmYXVsdCwgKENWSW1hZ2VCdWZmZXJSZWYpaW5wdXRCdWZmZXIuZ2V0KCksICZm
b3JtYXREZXNjcmlwdGlvbik7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICBSRUxFQVNFX0xP
RyhNZWRpYSwgIkltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNvbnZlcnRQaXhlbEJ1ZmZlcjogZmFp
bGVkIHRvIGluaXRpYWxpemUgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uIHdpdGggZXJyb3IgY29k
ZTogJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9CisKKyAgICBDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGVCdWZmZXI7CisgICAgYXV0
byBjbVRpbWUgPSB0b0NNVGltZShzYW1wbGVUaW1lKTsKKyAgICBDTVNhbXBsZVRpbWluZ0luZm8g
dGltaW5nSW5mbyA9IHsga0NNVGltZUludmFsaWQsIGNtVGltZSwgY21UaW1lIH07CisgICAgc3Rh
dHVzID0gQ01TYW1wbGVCdWZmZXJDcmVhdGVSZWFkeVdpdGhJbWFnZUJ1ZmZlcihrQ0ZBbGxvY2F0
b3JEZWZhdWx0LCAoQ1ZJbWFnZUJ1ZmZlclJlZilpbnB1dEJ1ZmZlci5nZXQoKSwgZm9ybWF0RGVz
Y3JpcHRpb24sICZ0aW1pbmdJbmZvLCAmc2FtcGxlQnVmZmVyKTsKKyAgICBDRlJlbGVhc2UoZm9y
bWF0RGVzY3JpcHRpb24pOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgUkVMRUFTRV9MT0co
TWVkaWEsICJJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjb252ZXJ0UGl4ZWxCdWZmZXI6IGZhaWxl
ZCB0byBpbml0aWFsaXplIENNU2FtcGxlQnVmZmVyIHdpdGggZXJyb3IgY29kZTogJWQiLCBzdGF0
aWNfY2FzdDxpbnQ+KHN0YXR1cykpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisK
KyAgICByZXR1cm4gYWRvcHRDRihzYW1wbGVCdWZmZXIpOworfQorCitSZXRhaW5QdHI8Q01TYW1w
bGVCdWZmZXJSZWY+IEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNyZWF0ZUNNU2FtcGxlQnVmZmVy
KENHSW1hZ2VSZWYgaW1hZ2UsIGNvbnN0IE1lZGlhVGltZSYgc2FtcGxlVGltZSwgY29uc3QgSW50
U2l6ZSYgc2l6ZSkKK3sKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gY3JlYXRlUGl4ZWxCdWZmZXIo
aW1hZ2UsIHNpemUpOworICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgcmV0dXJuIGNyZWF0ZUNNU2FtcGxlQnVmZmVyKHBpeGVsQnVmZmVyLmdldCgp
LCBzYW1wbGVUaW1lLCBzaXplKTsKK30KKworI2lmIEhBVkUoSU9TVVJGQUNFKQorCisjaWYgUExB
VEZPUk0oTUFDKQorc3RhdGljIGludDMyX3Qgcm91bmRVcFRvTWFjcm9ibG9ja011bHRpcGxlKGlu
dDMyX3Qgc2l6ZSkKK3sKKyAgICByZXR1cm4gKHNpemUgKyAxNSkgJiB+MTU7Cit9CisjZW5kaWYK
KworQ0ZEaWN0aW9uYXJ5UmVmIEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmlvU3VyZmFjZVBpeGVs
QnVmZmVyQ3JlYXRpb25PcHRpb25zKElPU3VyZmFjZVJlZiBzdXJmYWNlKQoreworICAgIGlmICht
X2lvU3VyZmFjZUJ1ZmZlckF0dHJpYnV0ZXMpCisgICAgICAgIHJldHVybiBtX2lvU3VyZmFjZUJ1
ZmZlckF0dHJpYnV0ZXMuZ2V0KCk7CisKKyAgICBtX2lvU3VyZmFjZUJ1ZmZlckF0dHJpYnV0ZXMg
PSAoX19icmlkZ2UgQ0ZEaWN0aW9uYXJ5UmVmKSBAeworICAgICAgICAoX19icmlkZ2UgTlNTdHJp
bmcgKiljdlBpeGVsRm9ybWF0T3BlbkdMS2V5KCkgOiBAKFlFUyksCisgICAgfTsKKworI2lmIFBM
QVRGT1JNKE1BQykKKyAgICBhdXRvIGZvcm1hdCA9IElPU3VyZmFjZUdldFBpeGVsRm9ybWF0KHN1
cmZhY2UpOworICAgIGF1dG8gd2lkdGggPSBJT1N1cmZhY2VHZXRXaWR0aChzdXJmYWNlKTsKKyAg
ICBhdXRvIGhlaWdodCA9IElPU3VyZmFjZUdldEhlaWdodChzdXJmYWNlKTsKKyAgICBpbnQzMl90
IGV4dGVuZGVkUmlnaHQgPSByb3VuZFVwVG9NYWNyb2Jsb2NrTXVsdGlwbGUod2lkdGgpIC0gd2lk
dGg7CisgICAgaW50MzJfdCBleHRlbmRlZEJvdHRvbSA9IHJvdW5kVXBUb01hY3JvYmxvY2tNdWx0
aXBsZShoZWlnaHQpIC0gaGVpZ2h0OworCisgICAgaWYgKChmb3JtYXQgPT0ga0NWUGl4ZWxGb3Jt
YXRUeXBlXzQyMFlwQ2JDcjhCaVBsYW5hclZpZGVvUmFuZ2UgfHwgZm9ybWF0ID09IGtDVlBpeGVs
Rm9ybWF0VHlwZV80MjBZcENiQ3I4QmlQbGFuYXJGdWxsUmFuZ2UpCisgICAgICAgICYmIChJT1N1
cmZhY2VHZXRCeXRlc1BlclJvd09mUGxhbmUoc3VyZmFjZSwgMCkgPj0gd2lkdGggKyBleHRlbmRl
ZFJpZ2h0KQorICAgICAgICAmJiAoSU9TdXJmYWNlR2V0Qnl0ZXNQZXJSb3dPZlBsYW5lKHN1cmZh
Y2UsIDEpID49IHdpZHRoICsgZXh0ZW5kZWRSaWdodCkKKyAgICAgICAgJiYgKElPU3VyZmFjZUdl
dEFsbG9jU2l6ZShzdXJmYWNlKSA+PSAoaGVpZ2h0ICsgZXh0ZW5kZWRCb3R0b20pICogSU9TdXJm
YWNlR2V0Qnl0ZXNQZXJSb3dPZlBsYW5lKHN1cmZhY2UsIDApICogMyAvIDIpKSB7CisgICAgICAg
ICAgICBtX2lvU3VyZmFjZUJ1ZmZlckF0dHJpYnV0ZXMgPSAoX19icmlkZ2UgQ0ZEaWN0aW9uYXJ5
UmVmKSBAeworICAgICAgICAgICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsQnVm
ZmVyT3BlbkdMQ29tcGF0aWJpbGl0eUtleSA6IEAoWUVTKSwKKyAgICAgICAgICAgICAgICAoX19i
cmlkZ2UgTlNTdHJpbmcgKilrQ1ZQaXhlbEJ1ZmZlckV4dGVuZGVkUGl4ZWxzUmlnaHRLZXkgOiBA
KGV4dGVuZGVkUmlnaHQpLAorICAgICAgICAgICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtD
VlBpeGVsQnVmZmVyRXh0ZW5kZWRQaXhlbHNCb3R0b21LZXkgOiBAKGV4dGVuZGVkQm90dG9tKQor
ICAgICAgICAgICAgfTsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzdXJmYWNlKTsK
KyNlbmRpZgorCisgICAgcmV0dXJuIG1faW9TdXJmYWNlQnVmZmVyQXR0cmlidXRlcy5nZXQoKTsK
K30KKworUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJSZWY+IEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6
OmNyZWF0ZVBpeGVsQnVmZmVyKElPU3VyZmFjZVJlZiBzdXJmYWNlLCBjb25zdCBJbnRTaXplJiBz
aXplKQoreworICAgIGlmICghc3VyZmFjZSB8fCAhc2V0U2l6ZShzaXplKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBDVlBpeGVsQnVmZmVyUmVmIHBpeGVsQnVmZmVyOworICAgIGF1
dG8gc3RhdHVzID0gQ1ZQaXhlbEJ1ZmZlckNyZWF0ZVdpdGhJT1N1cmZhY2Uoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgc3VyZmFjZSwgaW9TdXJmYWNlUGl4ZWxCdWZmZXJDcmVhdGlvbk9wdGlvbnMoc3Vy
ZmFjZSksICZwaXhlbEJ1ZmZlcik7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICBSRUxFQVNF
X0xPRyhNZWRpYSwgIkNWUGl4ZWxCdWZmZXJDcmVhdGVXaXRoSU9TdXJmYWNlIGZhaWxlZCB3aXRo
IGVycm9yIGNvZGU6ICVkIiwgc3RhdGljX2Nhc3Q8aW50PihzdGF0dXMpKTsKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgYXV0byByZXRhaW5lZEJ1ZmZlciA9IGFkb3B0Q0Yo
cGl4ZWxCdWZmZXIpOworICAgIGlmIChtX3NpemUgPT0gSW50U2l6ZShDVlBpeGVsQnVmZmVyR2V0
V2lkdGgocGl4ZWxCdWZmZXIpLCBDVlBpeGVsQnVmZmVyR2V0SGVpZ2h0KHBpeGVsQnVmZmVyKSkg
JiYgbV9waXhlbEZvcm1hdCA9PSBDVlBpeGVsQnVmZmVyR2V0UGl4ZWxGb3JtYXRUeXBlKHBpeGVs
QnVmZmVyKSkKKyAgICAgICAgcmV0dXJuIHJldGFpbmVkQnVmZmVyOworCisgICAgcmV0dXJuIGNv
bnZlcnRQaXhlbEJ1ZmZlcihwaXhlbEJ1ZmZlciwgc2l6ZSk7Cit9CisKK1JldGFpblB0cjxDTVNh
bXBsZUJ1ZmZlclJlZj4gSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlQ01TYW1wbGVCdWZm
ZXIoSU9TdXJmYWNlUmVmIHN1cmZhY2UsIGNvbnN0IE1lZGlhVGltZSYgc2FtcGxlVGltZSwgY29u
c3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAoIXN1cmZhY2UgfHwgIXNldFNpemUoc2l6ZSkp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IGNyZWF0
ZVBpeGVsQnVmZmVyKHN1cmZhY2UsIHNpemUpOworICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGNyZWF0ZUNNU2FtcGxlQnVmZmVyKHBp
eGVsQnVmZmVyLmdldCgpLCBzYW1wbGVUaW1lLCBzaXplKTsKK30KKyNlbmRpZgorCitSZWZQdHI8
TWVkaWFTYW1wbGU+IEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNvbnZlcnRNZWRpYVNhbXBsZShN
ZWRpYVNhbXBsZSYgc2FtcGxlLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIEFTU0VSVChz
YW1wbGUucGxhdGZvcm1TYW1wbGUoKS50eXBlID09IFBsYXRmb3JtU2FtcGxlOjpDTVNhbXBsZUJ1
ZmZlclR5cGUpOworCisgICAgaWYgKHNpemUgPT0gcm91bmRlZEludFNpemUoc2FtcGxlLnByZXNl
bnRhdGlvblNpemUoKSkpCisgICAgICAgIHJldHVybiAmc2FtcGxlOworCisgICAgaWYgKCFzZXRT
aXplKHNpemUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gcmVzaXplZEJ1
ZmZlciA9IGNvbnZlcnRDTVNhbXBsZUJ1ZmZlcihzYW1wbGUucGxhdGZvcm1TYW1wbGUoKS5zYW1w
bGUuY21TYW1wbGVCdWZmZXIsIHNpemUpOworICAgIGlmICghcmVzaXplZEJ1ZmZlcikKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVh
dGUocmVzaXplZEJ1ZmZlci5nZXQoKSwgc2FtcGxlLnZpZGVvUm90YXRpb24oKSwgc2FtcGxlLnZp
ZGVvTWlycm9yZWQoKSk7Cit9CisKKyNpZiBIQVZFKElPU1VSRkFDRSkKK1JlZlB0cjxNZWRpYVNh
bXBsZT4gSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlTWVkaWFTYW1wbGUoSU9TdXJmYWNl
UmVmIHN1cmZhY2UsIGNvbnN0IE1lZGlhVGltZSYgc2FtcGxlVGltZSwgY29uc3QgSW50U2l6ZSYg
c2l6ZSwgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb24gcm90YXRpb24sIGJvb2wgbWlycm9yZWQp
Cit7CisgICAgYXV0byBzYW1wbGVCdWZmZXIgPSBjcmVhdGVDTVNhbXBsZUJ1ZmZlcihzdXJmYWNl
LCBzYW1wbGVUaW1lLCBzaXplKTsKKyAgICBpZiAoIXNhbXBsZUJ1ZmZlcikKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVhdGUoc2Ft
cGxlQnVmZmVyLmdldCgpLCByb3RhdGlvbiwgbWlycm9yZWQpOworfQorI2VuZGlmCisKK1JlZlB0
cjxNZWRpYVNhbXBsZT4gSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlTWVkaWFTYW1wbGUo
Q0dJbWFnZVJlZiBpbWFnZSwgY29uc3QgTWVkaWFUaW1lJiBzYW1wbGVUaW1lLCBjb25zdCBJbnRT
aXplJiBzaXplLCBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbiByb3RhdGlvbiwgYm9vbCBtaXJy
b3JlZCkKK3sKKyAgICBhdXRvIHNhbXBsZUJ1ZmZlciA9IGNyZWF0ZUNNU2FtcGxlQnVmZmVyKGlt
YWdlLCBzYW1wbGVUaW1lLCBzaXplKTsKKyAgICBpZiAoIXNhbXBsZUJ1ZmZlcikKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVhdGUo
c2FtcGxlQnVmZmVyLmdldCgpLCByb3RhdGlvbiwgbWlycm9yZWQpOworfQorCitSZWZQdHI8TWVk
aWFTYW1wbGU+IEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNyZWF0ZU1lZGlhU2FtcGxlKENNU2Ft
cGxlQnVmZmVyUmVmIGJ1ZmZlciwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgTWVkaWFTYW1wbGU6OlZp
ZGVvUm90YXRpb24gcm90YXRpb24sIGJvb2wgbWlycm9yZWQpCit7CisgICAgYXV0byBzYW1wbGVC
dWZmZXIgPSBjb252ZXJ0Q01TYW1wbGVCdWZmZXIoYnVmZmVyLCBzaXplKTsKKyAgICBpZiAoIXNh
bXBsZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gTWVkaWFT
YW1wbGVBVkZPYmpDOjpjcmVhdGUoc2FtcGxlQnVmZmVyLmdldCgpLCByb3RhdGlvbiwgbWlycm9y
ZWQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoVklERU9U
T09MQk9YKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3Yv
UGl4ZWxCdWZmZXJSZXNpemVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
di9QaXhlbEJ1ZmZlclJlc2l6ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Rj
ZDRhYjIyNDA1MGU0N2ZiNTczYzVhOTNlMzc1Zjg4MjkxNWY1ZC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jdi9QaXhlbEJ1ZmZlclJlc2l6ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFVTRShWSURFT1RPT0xCT1gpCi0K
LSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi10eXBl
ZGVmIHN0cnVjdCBPcGFxdWVWVFBpeGVsVHJhbnNmZXJTZXNzaW9uKiBWVFBpeGVsVHJhbnNmZXJT
ZXNzaW9uUmVmOwotdHlwZWRlZiBzdHJ1Y3QgX19DVkJ1ZmZlciAqQ1ZQaXhlbEJ1ZmZlclJlZjsK
LXR5cGVkZWYgc3RydWN0IF9fQ1ZQaXhlbEJ1ZmZlclBvb2wgKkNWUGl4ZWxCdWZmZXJQb29sUmVm
OwotdHlwZWRlZiBzdHJ1Y3Qgb3BhcXVlQ01TYW1wbGVCdWZmZXIgKkNNU2FtcGxlQnVmZmVyUmVm
OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFBpeGVsQnVmZmVyUmVzaXplciB7Ci1w
dWJsaWM6Ci0gICAgUGl4ZWxCdWZmZXJSZXNpemVyKEludFNpemUsIE9TVHlwZSk7Ci0KLSAgICBS
ZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gcmVzaXplKENWUGl4ZWxCdWZmZXJSZWYpOwotICAg
IFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4gcmVzaXplKENNU2FtcGxlQnVmZmVyUmVmKTsK
LSAgICBib29sIGNhblJlc2l6ZVRvKEludFNpemUgc2l6ZSkgeyByZXR1cm4gc2l6ZSA9PSBtX3Np
emU7IH0KLQotcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8VlRQaXhlbFRyYW5zZmVyU2Vzc2lvblJl
Zj4gbV90cmFuc2ZlclNlc3Npb247Ci0gICAgUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJQb29sUmVm
PiBtX2J1ZmZlclBvb2w7Ci0gICAgSW50U2l6ZSBtX3NpemU7Ci19OwotCi19Ci0KLSNlbmRpZiAv
LyBVU0UoVklERU9UT09MQk9YKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJSZXNpemVyLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJSZXNpemVyLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA2Yzc0MWEwY2YzNTIwMTI2MjlhMDI5MDE4ZmNjNTIyY2RiYmViZTg4Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2N2L1BpeGVsQnVmZmVyUmVzaXplci5tbQorKysgL2Rldi9udWxs
CkBAIC0xLDEzOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2lt
cG9ydCAiUGl4ZWxCdWZmZXJSZXNpemVyLmgiCi0KLSNpZiBVU0UoVklERU9UT09MQk9YKQotCi0j
aW1wb3J0ICJMb2dnaW5nLmgiCi0jaW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4KLQotI2ltcG9y
dCAiQ29yZVZpZGVvU29mdExpbmsuaCIKLSNpbXBvcnQgIlZpZGVvVG9vbGJveFNvZnRMaW5rLmgi
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGl4ZWxCdWZmZXJSZXNpemVyOjpQaXhlbEJ1ZmZl
clJlc2l6ZXIoSW50U2l6ZSBzaXplLCBPU1R5cGUgdmlkZW9Gb3JtYXQpCi17Ci0gICAgVlRQaXhl
bFRyYW5zZmVyU2Vzc2lvblJlZiB0cmFuc2ZlclNlc3Npb247Ci0gICAgVlRQaXhlbFRyYW5zZmVy
U2Vzc2lvbkNyZWF0ZShOVUxMLCAmdHJhbnNmZXJTZXNzaW9uKTsKLSAgICBBU1NFUlQodHJhbnNm
ZXJTZXNzaW9uKTsKLSAgICBtX3RyYW5zZmVyU2Vzc2lvbiA9IGFkb3B0Q0YodHJhbnNmZXJTZXNz
aW9uKTsKLQotICAgIFZUU2Vzc2lvblNldFByb3BlcnR5KHRyYW5zZmVyU2Vzc2lvbiwga1ZUUGl4
ZWxUcmFuc2ZlclByb3BlcnR5S2V5X1NjYWxpbmdNb2RlLCBrVlRTY2FsaW5nTW9kZV9UcmltKTsK
LQotICAgIENGRGljdGlvbmFyeVJlZiBzb3VyY2VQaXhlbEJ1ZmZlck9wdGlvbnMgPSAoX19icmlk
Z2UgQ0ZEaWN0aW9uYXJ5UmVmKSBAewotICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ1ZQ
aXhlbEJ1ZmZlcldpZHRoS2V5IDpAKHNpemUud2lkdGgoKSksCi0gICAgICAgIChfX2JyaWRnZSBO
U1N0cmluZyAqKWtDVlBpeGVsQnVmZmVySGVpZ2h0S2V5OkAoc2l6ZS5oZWlnaHQoKSksCi0gICAg
ICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsQnVmZmVyUGl4ZWxGb3JtYXRUeXBlS2V5
OkAodmlkZW9Gb3JtYXQpLAotI2lmIFBMQVRGT1JNKElPUykgJiYgIVBMQVRGT1JNKElPU01BQykK
LSAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxGb3JtYXRPcGVuR0xFU0NvbXBh
dGliaWxpdHkgOiBAKFlFUyksCi0jZWxzZQotICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilr
Q1ZQaXhlbEJ1ZmZlck9wZW5HTENvbXBhdGliaWxpdHlLZXkgOiBAKFlFUyksCi0jZW5kaWYKLSAg
ICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxCdWZmZXJJT1N1cmZhY2VQcm9wZXJ0
aWVzS2V5IDogQHsgLyplbXB0eSBkaWN0aW9uYXJ5Ki8gfSwKLSAgICB9OwotICAgIENWUGl4ZWxC
dWZmZXJQb29sUmVmIGJ1ZmZlclBvb2w7Ci0gICAgYXV0byBzdGF0dXMgPSBDVlBpeGVsQnVmZmVy
UG9vbENyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBOVUxMLCBzb3VyY2VQaXhlbEJ1ZmZlck9w
dGlvbnMsICZidWZmZXJQb29sKTsKLSAgICBBU1NFUlQoIXN0YXR1cyk7Ci0gICAgaWYgKHN0YXR1
cyAhPSBrQ1ZSZXR1cm5TdWNjZXNzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2J1ZmZlclBv
b2wgPSBhZG9wdENGKGJ1ZmZlclBvb2wpOwotICAgIG1fc2l6ZSA9IHNpemU7Ci19Ci0KLVJldGFp
blB0cjxDVlBpeGVsQnVmZmVyUmVmPiBQaXhlbEJ1ZmZlclJlc2l6ZXI6OnJlc2l6ZShDVlBpeGVs
QnVmZmVyUmVmIGlucHV0QnVmZmVyKQotewotICAgIEFTU0VSVChtX2J1ZmZlclBvb2wgJiYgIW1f
c2l6ZS5pc0VtcHR5KCkpOwotICAgIGlmICghbV9idWZmZXJQb29sIHx8IG1fc2l6ZS5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgUmV0YWluUHRyPENWUGl4ZWxCdWZm
ZXJSZWY+IHJlc3VsdDsKLSAgICBDVlBpeGVsQnVmZmVyUmVmIG91dHB1dEJ1ZmZlciA9IG51bGxw
dHI7Ci0KLSAgICBhdXRvIHN0YXR1cyA9IENWUGl4ZWxCdWZmZXJQb29sQ3JlYXRlUGl4ZWxCdWZm
ZXIoa0NGQWxsb2NhdG9yRGVmYXVsdCwgbV9idWZmZXJQb29sLmdldCgpLCAmb3V0cHV0QnVmZmVy
KTsKLSAgICBpZiAoc3RhdHVzKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhLCAiUGl4ZWxC
dWZmZXJSZXNpemVyOjpyZXNpemUsIENWUGl4ZWxCdWZmZXJQb29sQ3JlYXRlUGl4ZWxCdWZmZXIg
ZmFpbGVkIHdpdGggZXJyb3IgJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOwotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgcmVzdWx0ID0gYWRvcHRDRihvdXRwdXRCdWZm
ZXIpOwotCi0gICAgYXV0byBlcnIgPSBWVFBpeGVsVHJhbnNmZXJTZXNzaW9uVHJhbnNmZXJJbWFn
ZShtX3RyYW5zZmVyU2Vzc2lvbi5nZXQoKSwgaW5wdXRCdWZmZXIsIG91dHB1dEJ1ZmZlcik7Ci0g
ICAgaWYgKGVycikgewotICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIlBpeGVsQnVmZmVyUmVz
aXplcjo6cmVzaXplLCBWVFBpeGVsVHJhbnNmZXJTZXNzaW9uVHJhbnNmZXJJbWFnZSBmYWlsZWQg
d2l0aCBlcnJvciAlZCIsIHN0YXRpY19jYXN0PGludD4oZXJyKSk7Ci0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVJldGFpblB0cjxDTVNh
bXBsZUJ1ZmZlclJlZj4gUGl4ZWxCdWZmZXJSZXNpemVyOjpyZXNpemUoQ01TYW1wbGVCdWZmZXJS
ZWYgc2FtcGxlQnVmZmVyKQotewotICAgIGF1dG8gY29udmVydGVkUGl4ZWxCdWZmZXIgPSByZXNp
emUoQ01TYW1wbGVCdWZmZXJHZXRJbWFnZUJ1ZmZlcihzYW1wbGVCdWZmZXIpKTsKLSAgICBpZiAo
IWNvbnZlcnRlZFBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENN
VmlkZW9Gb3JtYXREZXNjcmlwdGlvblJlZiBmb3JtYXREZXNjcmlwdGlvbiA9IG51bGxwdHI7Ci0g
ICAgYXV0byBzdGF0dXMgPSBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25DcmVhdGVGb3JJbWFnZUJ1
ZmZlcihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBjb252ZXJ0ZWRQaXhlbEJ1ZmZlci5nZXQoKSwgJmZv
cm1hdERlc2NyaXB0aW9uKTsKLSAgICBpZiAoc3RhdHVzICE9IG5vRXJyKSB7Ci0gICAgICAgIFJF
TEVBU0VfTE9HKE1lZGlhLCAiUGl4ZWxCdWZmZXJSZXNpemVyOjpyZXNpemU6IGZhaWxlZCB0byBj
cmVhdGUgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uIHdpdGggZXJyb3IgY29kZTogJWQiLCBzdGF0
aWNfY2FzdDxpbnQ+KHN0YXR1cykpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0K
LSAgICBDTUl0ZW1Db3VudCBpdGVtQ291bnQgPSAwOwotICAgIHN0YXR1cyA9IENNU2FtcGxlQnVm
ZmVyR2V0U2FtcGxlVGltaW5nSW5mb0FycmF5KHNhbXBsZUJ1ZmZlciwgMSwgbnVsbHB0ciwgJml0
ZW1Db3VudCk7Ci0gICAgaWYgKHN0YXR1cyAhPSBub0VycikgewotICAgICAgICBSRUxFQVNFX0xP
RyhNZWRpYSwgIlBpeGVsQnVmZmVyUmVzaXplcjo6cmVzaXplOiBDTVNhbXBsZUJ1ZmZlckdldFNh
bXBsZVRpbWluZ0luZm9BcnJheSBmYWlsZWQgd2l0aCBlcnJvciBjb2RlOiAlZCIsIHN0YXRpY19j
YXN0PGludD4oc3RhdHVzKSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICBW
ZWN0b3I8Q01TYW1wbGVUaW1pbmdJbmZvPiB0aW1pbmdJbmZvQXJyYXk7Ci0gICAgQ01TYW1wbGVU
aW1pbmdJbmZvKiB0aW1laW5nSW5mb1B0ciA9IG51bGxwdHI7Ci0gICAgaWYgKGl0ZW1Db3VudCkg
ewotICAgICAgICB0aW1pbmdJbmZvQXJyYXkuZ3JvdyhpdGVtQ291bnQpOwotICAgICAgICBzdGF0
dXMgPSBDTVNhbXBsZUJ1ZmZlckdldFNhbXBsZVRpbWluZ0luZm9BcnJheShzYW1wbGVCdWZmZXIs
IGl0ZW1Db3VudCwgdGltaW5nSW5mb0FycmF5LmRhdGEoKSwgbnVsbHB0cik7Ci0gICAgICAgIGlm
IChzdGF0dXMgIT0gbm9FcnIpIHsKLSAgICAgICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhLCAiUGl4
ZWxCdWZmZXJSZXNpemVyOjpyZXNpemU6IENNU2FtcGxlQnVmZmVyR2V0U2FtcGxlVGltaW5nSW5m
b0FycmF5IGZhaWxlZCB3aXRoIGVycm9yIGNvZGU6ICVkIiwgc3RhdGljX2Nhc3Q8aW50PihzdGF0
dXMpKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0gICAgICAgIHRp
bWVpbmdJbmZvUHRyID0gdGltaW5nSW5mb0FycmF5LmRhdGEoKTsKLSAgICB9Ci0KLSAgICBDTVNh
bXBsZUJ1ZmZlclJlZiByZXNpemVkU2FtcGxlQnVmZmVyOwotICAgIHN0YXR1cyA9IENNU2FtcGxl
QnVmZmVyQ3JlYXRlUmVhZHlXaXRoSW1hZ2VCdWZmZXIoa0NGQWxsb2NhdG9yRGVmYXVsdCwgY29u
dmVydGVkUGl4ZWxCdWZmZXIuZ2V0KCksIGZvcm1hdERlc2NyaXB0aW9uLCB0aW1laW5nSW5mb1B0
ciwgJnJlc2l6ZWRTYW1wbGVCdWZmZXIpOwotICAgIENGUmVsZWFzZShmb3JtYXREZXNjcmlwdGlv
bik7Ci0gICAgaWYgKHN0YXR1cyAhPSBub0VycikgewotICAgICAgICBSRUxFQVNFX0xPRyhNZWRp
YSwgIlBpeGVsQnVmZmVyUmVzaXplcjo6cmVzaXplOiBmYWlsZWQgdG8gY3JlYXRlIENNU2FtcGxl
QnVmZmVyIHdpdGggZXJyb3IgY29kZTogJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOwot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICByZXR1cm4gYWRvcHRDRihyZXNp
emVkU2FtcGxlQnVmZmVyKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gVVNFKFZJREVPVE9PTEJPWCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAKaW5kZXggODA1MDQzMjdl
M2E2ODI0OTk1ODZmOGQzYzdiOGNlMDQ0ZGEzMDI4Ny4uYjRhMTUxZTRlNzNjMTg0YzAyNDRkMzA2
NjZhYzlmODFjZTAxNjcxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAKQEAgLTQxLDYgKzQxLDcg
QEAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFT
b3VyY2VDYXBhYmlsaXRpZXMuaCIKICNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlQ2VudGVy
LmgiCisjaW5jbHVkZSAiUmVhbHRpbWVWaWRlb1V0aWxpdGllcy5oIgogI2luY2x1ZGUgPHd0Zi9N
YWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL1VVSUQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdIYXNoLmg+CkBAIC0xMzMsMTAgKzEzNCw2IEBAIHZvaWQgUmVhbHRpbWVNZWRpYVNvdXJj
ZTo6bm90aWZ5TXV0ZWRPYnNlcnZlcnMoKSBjb25zdAogICAgIH0pOwogfQogCi12b2lkIFJlYWx0
aW1lTWVkaWFTb3VyY2U6OnNldHRpbmdzRGlkQ2hhbmdlKE9wdGlvblNldDxSZWFsdGltZU1lZGlh
U291cmNlU2V0dGluZ3M6OkZsYWc+KQotewotfQotCiB2b2lkIFJlYWx0aW1lTWVkaWFTb3VyY2U6
Om5vdGlmeVNldHRpbmdzRGlkQ2hhbmdlT2JzZXJ2ZXJzKE9wdGlvblNldDxSZWFsdGltZU1lZGlh
U291cmNlU2V0dGluZ3M6OkZsYWc+IGZsYWdzKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFs
dGltZU1lZGlhU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9S
ZWFsdGltZU1lZGlhU291cmNlLmgKaW5kZXggNzE2Y2U2OWMwMjQwNzZlMmRiZjBmNjY2YmY1OGVj
MjlkMjZkMDQ2NS4uYTkzZGUzMzhjNDFhNTcxY2IxMDVkMWY0MzZkNTJjNWU1OTM4MGI2MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRp
YVNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0
aW1lTWVkaWFTb3VyY2UuaApAQCAtMjAwLDcgKzIwMCw3IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6
CiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0UHJvZHVjaW5nRGF0YSgpIHsgfQogICAgIHZpcnR1YWwg
dm9pZCBzdG9wUHJvZHVjaW5nRGF0YSgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXR0aW5nc0Rp
ZENoYW5nZShPcHRpb25TZXQ8UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpGbGFnPik7Cisg
ICAgdmlydHVhbCB2b2lkIHNldHRpbmdzRGlkQ2hhbmdlKE9wdGlvblNldDxSZWFsdGltZU1lZGlh
U291cmNlU2V0dGluZ3M6OkZsYWc+KSB7IH0KIAogCiAgICAgdm9pZCBmb3JFYWNoT2JzZXJ2ZXIo
Y29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKE9ic2VydmVyJik+JikgY29uc3Q7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZWaWRlb0NhcHR1cmVT
b3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVlZpZGVv
Q2FwdHVyZVNvdXJjZS5oCmluZGV4IDNiNDlmNDZmZGEzZWMzMjZjNzM4NTE3M2ZhNmNkMjdlY2Yy
OWVmNjIuLjI2YmY4MzE1NDU1YjE3ZWM4MzIyZmI1OTExYWE5ZTA1ZTc2MzYzMzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVlZpZGVvQ2FwdHVy
ZVNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9B
VlZpZGVvQ2FwdHVyZVNvdXJjZS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDksNyArNDksNyBAQCBPQkpDX0NMQVNTIFdlYkNv
cmVBVlZpZGVvQ2FwdHVyZVNvdXJjZU9ic2VydmVyOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBBVlZpZGVvUHJlc2V0OwotY2xhc3MgUGl4ZWxCdWZmZXJSZXNpemVyOworY2xhc3MgSW1h
Z2VUcmFuc2ZlclNlc3Npb25WVDsKIAogY2xhc3MgQVZWaWRlb0NhcHR1cmVTb3VyY2UgOiBwdWJs
aWMgUmVhbHRpbWVWaWRlb1NvdXJjZSwgcHJpdmF0ZSBPcmllbnRhdGlvbk5vdGlmaWVyOjpPYnNl
cnZlciB7CiBwdWJsaWM6CkBAIC0xMDMsMTMgKzEwMywxNCBAQCBwcml2YXRlOgogCiAgICAgYm9v
bCBzZXRGcmFtZVJhdGVDb25zdHJhaW50KGRvdWJsZSBtaW5GcmFtZVJhdGUsIGRvdWJsZSBtYXhG
cmFtZVJhdGUpOwogCi0gICAgdm9pZCBwcm9jZXNzTmV3RnJhbWUoUmV0YWluUHRyPENNU2FtcGxl
QnVmZmVyUmVmPiwgUmV0YWluUHRyPEFWQ2FwdHVyZUNvbm5lY3Rpb24+KTsKKyAgICB2b2lkIHBy
b2Nlc3NOZXdGcmFtZShSZWZQdHI8TWVkaWFTYW1wbGU+KTsKICAgICBJbnRTaXplIHNpemVGb3JQ
cmVzZXQoTlNTdHJpbmcqKTsKIAogICAgIEFWQ2FwdHVyZURldmljZSogZGV2aWNlKCkgY29uc3Qg
eyByZXR1cm4gbV9kZXZpY2UuZ2V0KCk7IH0KIAotICAgIFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZl
clJlZj4gbV9idWZmZXI7CisgICAgUmVmUHRyPE1lZGlhU2FtcGxlPiBtX2J1ZmZlcjsKICAgICBS
ZXRhaW5QdHI8QVZDYXB0dXJlVmlkZW9EYXRhT3V0cHV0PiBtX3ZpZGVvT3V0cHV0OworICAgIHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZVRyYW5zZmVyU2Vzc2lvblZUPiBtX2ltYWdlVHJhbnNmZXJTZXNz
aW9uOwogCiAgICAgSW50U2l6ZSBtX3JlcXVlc3RlZFNpemU7CiAgICAgaW50MzJfdCBtX3dpZHRo
IHsgMCB9OwpAQCAtMTE4LDcgKzExOSw2IEBAIHByaXZhdGU6CiAgICAgaW50IG1fZGV2aWNlT3Jp
ZW50YXRpb24geyAwIH07CiAgICAgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb24gbV9zYW1wbGVS
b3RhdGlvbiB7IE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpOb25lIH07CiAKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8UGl4ZWxCdWZmZXJSZXNpemVyPiBtX3BpeGVsQnVmZmVyUmVzaXplcjsKICAg
ICBzdGQ6Om9wdGlvbmFsPFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncz4gbV9jdXJyZW50U2V0
dGluZ3M7CiAgICAgc3RkOjpvcHRpb25hbDxSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVz
PiBtX2NhcGFiaWxpdGllczsKICAgICBSZXRhaW5QdHI8V2ViQ29yZUFWVmlkZW9DYXB0dXJlU291
cmNlT2JzZXJ2ZXI+IG1fb2JqY09ic2VydmVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJlU291cmNlLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJlU291cmNlLm1t
CmluZGV4IDUxOTYwODIyMmU2NjE0YWIyZWRjZWMyM2YzNTAwOTA3NTlkMTE5MTYuLjdhOTYyMTZj
ODU0YjVkYWVlZmQxODNkN2JkMmM4ZjdkNWQxYTU4ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVlZpZGVvQ2FwdHVyZVNvdXJjZS5tbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZWaWRlb0NhcHR1cmVT
b3VyY2UubW0KQEAgLTI5LDExICsyOSwxMSBAQAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYm
IFVTRShBVkZPVU5EQVRJT04pCiAKICNpbXBvcnQgIkltYWdlQnVmZmVyLmgiCisjaW1wb3J0ICJJ
bWFnZVRyYW5zZmVyU2Vzc2lvblZULmgiCiAjaW1wb3J0ICJJbnRSZWN0LmgiCiAjaW1wb3J0ICJM
b2dnaW5nLmgiCiAjaW1wb3J0ICJNZWRpYUNvbnN0cmFpbnRzLmgiCiAjaW1wb3J0ICJNZWRpYVNh
bXBsZUFWRk9iakMuaCIKLSNpbXBvcnQgIlBpeGVsQnVmZmVyUmVzaXplci5oIgogI2ltcG9ydCAi
UGxhdGZvcm1MYXllci5oIgogI2ltcG9ydCAiUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck1hYy5o
IgogI2ltcG9ydCAiUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzLmgiCkBAIC0yOTksNyArMjk5
LDcgQEAgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYgQVZWaWRlb0NhcHR1
cmVTb3VyY2U6OmNhcGFiaWxpdGllcygpCiBib29sIEFWVmlkZW9DYXB0dXJlU291cmNlOjpwcmVm
ZXJzUHJlc2V0KFZpZGVvUHJlc2V0JiBwcmVzZXQpCiB7CiAjaWYgUExBVEZPUk0oSU9TKQotICAg
IHJldHVybiAhW3N0YXRpY19jYXN0PEFWVmlkZW9QcmVzZXQqPigmcHJlc2V0KS0+Zm9ybWF0Lmdl
dCgpIGlzVmlkZW9CaW5uZWRdOworICAgIHJldHVybiBbc3RhdGljX2Nhc3Q8QVZWaWRlb1ByZXNl
dCo+KCZwcmVzZXQpLT5mb3JtYXQuZ2V0KCkgaXNWaWRlb0Jpbm5lZF07CiAjZWxzZQogICAgIFVO
VVNFRF9QQVJBTShwcmVzZXQpOwogI2VuZGlmCkBAIC01MTksMjcgKzUxOSwyMyBAQCB2b2lkIEFW
VmlkZW9DYXB0dXJlU291cmNlOjpjb21wdXRlU2FtcGxlUm90YXRpb24oKQogICAgIH0KIH0KIAot
dm9pZCBBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6cHJvY2Vzc05ld0ZyYW1lKFJldGFpblB0cjxDTVNh
bXBsZUJ1ZmZlclJlZj4gc2FtcGxlQnVmZmVyLCBSZXRhaW5QdHI8QVZDYXB0dXJlQ29ubmVjdGlv
blR5cGU+IGNvbm5lY3Rpb24pCit2b2lkIEFWVmlkZW9DYXB0dXJlU291cmNlOjpwcm9jZXNzTmV3
RnJhbWUoUmVmUHRyPE1lZGlhU2FtcGxlPiBzYW1wbGUpCiB7CiAgICAgaWYgKCFpc1Byb2R1Y2lu
Z0RhdGEoKSB8fCBtdXRlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBDTUZvcm1hdERlc2Ny
aXB0aW9uUmVmIGZvcm1hdERlc2NyaXB0aW9uID0gQ01TYW1wbGVCdWZmZXJHZXRGb3JtYXREZXNj
cmlwdGlvbihzYW1wbGVCdWZmZXIuZ2V0KCkpOwotICAgIGlmICghZm9ybWF0RGVzY3JpcHRpb24p
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fYnVmZmVyID0gc2FtcGxlQnVmZmVyOwotICAgIENN
VmlkZW9EaW1lbnNpb25zIGRpbWVuc2lvbnMgPSBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25HZXRE
aW1lbnNpb25zKGZvcm1hdERlc2NyaXB0aW9uKTsKKyAgICBtX2J1ZmZlciA9IHNhbXBsZTsKKyAg
ICBhdXRvIGRpbWVuc2lvbnMgPSByb3VuZGVkSW50U2l6ZShzYW1wbGUtPnByZXNlbnRhdGlvblNp
emUoKSk7CiAgICAgaWYgKG1fc2FtcGxlUm90YXRpb24gPT0gTWVkaWFTYW1wbGU6OlZpZGVvUm90
YXRpb246OkxlZnQgfHwgbV9zYW1wbGVSb3RhdGlvbiA9PSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3Rh
dGlvbjo6UmlnaHQpCi0gICAgICAgIHN0ZDo6c3dhcChkaW1lbnNpb25zLndpZHRoLCBkaW1lbnNp
b25zLmhlaWdodCk7CisgICAgICAgIGRpbWVuc2lvbnMgPSB7IGRpbWVuc2lvbnMuaGVpZ2h0KCks
IGRpbWVuc2lvbnMud2lkdGgoKSB9OwogCi0gICAgaWYgKGRpbWVuc2lvbnMud2lkdGggIT0gbV93
aWR0aCB8fCBkaW1lbnNpb25zLmhlaWdodCAhPSBtX2hlaWdodCkgewotICAgICAgICBtX3dpZHRo
ID0gZGltZW5zaW9ucy53aWR0aDsKLSAgICAgICAgbV9oZWlnaHQgPSBkaW1lbnNpb25zLmhlaWdo
dDsKLSAgICAgICAgc2V0U2l6ZSh7IGRpbWVuc2lvbnMud2lkdGgsIGRpbWVuc2lvbnMuaGVpZ2h0
IH0pOworICAgIGlmIChkaW1lbnNpb25zLndpZHRoKCkgIT0gbV93aWR0aCB8fCBkaW1lbnNpb25z
LmhlaWdodCgpICE9IG1faGVpZ2h0KSB7CisgICAgICAgIG1fd2lkdGggPSBkaW1lbnNpb25zLndp
ZHRoKCk7CisgICAgICAgIG1faGVpZ2h0ID0gZGltZW5zaW9ucy5oZWlnaHQoKTsKKyAgICAgICAg
c2V0U2l6ZShkaW1lbnNpb25zKTsKICAgICB9CiAKLSAgICB2aWRlb1NhbXBsZUF2YWlsYWJsZShN
ZWRpYVNhbXBsZUFWRk9iakM6OmNyZWF0ZShtX2J1ZmZlci5nZXQoKSwgbV9zYW1wbGVSb3RhdGlv
biwgW2Nvbm5lY3Rpb24gaXNWaWRlb01pcnJvcmVkXSkpOworICAgIGRpc3BhdGNoTWVkaWFTYW1w
bGVUb09ic2VydmVycygqc2FtcGxlKTsKIH0KIAogdm9pZCBBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6
Y2FwdHVyZU91dHB1dERpZE91dHB1dFNhbXBsZUJ1ZmZlckZyb21Db25uZWN0aW9uKEFWQ2FwdHVy
ZU91dHB1dFR5cGUqLCBDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGVCdWZmZXIsIEFWQ2FwdHVyZUNv
bm5lY3Rpb25UeXBlKiBjYXB0dXJlQ29ubmVjdGlvbikKQEAgLTU0OSwyNCArNTQ1LDI0IEBAIHZv
aWQgQVZWaWRlb0NhcHR1cmVTb3VyY2U6OmNhcHR1cmVPdXRwdXREaWRPdXRwdXRTYW1wbGVCdWZm
ZXJGcm9tQ29ubmVjdGlvbihBVkNhCiAgICAgICAgIHJldHVybjsKIAogICAgIENNVmlkZW9EaW1l
bnNpb25zIGRpbWVuc2lvbnMgPSBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25HZXREaW1lbnNpb25z
KGZvcm1hdERlc2NyaXB0aW9uKTsKKyAgICBSZWZQdHI8TWVkaWFTYW1wbGU+IHNhbXBsZTsKICAg
ICBpZiAoZGltZW5zaW9ucy53aWR0aCAhPSBtX3JlcXVlc3RlZFNpemUud2lkdGgoKSB8fCBkaW1l
bnNpb25zLmhlaWdodCAhPSBtX3JlcXVlc3RlZFNpemUuaGVpZ2h0KCkpIHsKLSAgICAgICAgaWYg
KG1fcGl4ZWxCdWZmZXJSZXNpemVyICYmICFtX3BpeGVsQnVmZmVyUmVzaXplci0+Y2FuUmVzaXpl
VG8obV9yZXF1ZXN0ZWRTaXplKSkKLSAgICAgICAgICAgIG1fcGl4ZWxCdWZmZXJSZXNpemVyID0g
bnVsbHB0cjsKIAotICAgICAgICBpZiAoIW1fcGl4ZWxCdWZmZXJSZXNpemVyKQotICAgICAgICAg
ICAgbV9waXhlbEJ1ZmZlclJlc2l6ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFBpeGVsQnVmZmVyUmVz
aXplcj4obV9yZXF1ZXN0ZWRTaXplLCBhdlZpZGVvQ2FwdHVyZVBpeGVsQnVmZmVyRm9ybWF0KCkp
OwotICAgIH0gZWxzZQotICAgICAgICBtX3BpeGVsQnVmZmVyUmVzaXplciA9IG51bGxwdHI7Cisg
ICAgICAgIGlmICghbV9pbWFnZVRyYW5zZmVyU2Vzc2lvbikKKyAgICAgICAgICAgIG1faW1hZ2VU
cmFuc2ZlclNlc3Npb24gPSBJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVhdGUoYXZWaWRlb0Nh
cHR1cmVQaXhlbEJ1ZmZlckZvcm1hdCgpKTsKIAotICAgIGF1dG8gYnVmZmVyID0gcmV0YWluUHRy
KHNhbXBsZUJ1ZmZlcik7Ci0gICAgaWYgKG1fcGl4ZWxCdWZmZXJSZXNpemVyKSB7Ci0gICAgICAg
IGJ1ZmZlciA9IG1fcGl4ZWxCdWZmZXJSZXNpemVyLT5yZXNpemUoc2FtcGxlQnVmZmVyKTsKLSAg
ICAgICAgaWYgKCFidWZmZXIpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQorICAgICAgICBp
ZiAobV9pbWFnZVRyYW5zZmVyU2Vzc2lvbikgeworICAgICAgICAgICAgc2FtcGxlID0gbV9pbWFn
ZVRyYW5zZmVyU2Vzc2lvbi0+Y3JlYXRlTWVkaWFTYW1wbGUoc2FtcGxlQnVmZmVyLCBtX3JlcXVl
c3RlZFNpemUsIG1fc2FtcGxlUm90YXRpb24sIFtjYXB0dXJlQ29ubmVjdGlvbiBpc1ZpZGVvTWly
cm9yZWRdKTsKKyAgICAgICAgICAgIGlmICghc2FtcGxlKSB7CisgICAgICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIHNhbXBsZSA9IE1lZGlhU2FtcGxlQVZG
T2JqQzo6Y3JlYXRlKHNhbXBsZUJ1ZmZlciwgbV9zYW1wbGVSb3RhdGlvbiwgW2NhcHR1cmVDb25u
ZWN0aW9uIGlzVmlkZW9NaXJyb3JlZF0pOwogCi0gICAgc2NoZWR1bGVEZWZlcnJlZFRhc2soW3Ro
aXMsIGJ1ZmZlciwgY29ubmVjdGlvbiA9IHJldGFpblB0cihjYXB0dXJlQ29ubmVjdGlvbildIHsK
LSAgICAgICAgdGhpcy0+cHJvY2Vzc05ld0ZyYW1lKGJ1ZmZlciwgY29ubmVjdGlvbik7CisgICAg
c2NoZWR1bGVEZWZlcnJlZFRhc2soW3RoaXMsIHNhbXBsZSA9IFdURk1vdmUoc2FtcGxlKV0gewor
ICAgICAgICBwcm9jZXNzTmV3RnJhbWUoc2FtcGxlKTsKICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0Rpc3BsYXlDYXB0dXJl
U291cmNlQ29jb2EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L0Rpc3BsYXlDYXB0dXJlU291cmNlQ29jb2EuY3BwCmluZGV4IDM3M2QwZjhhNTNhNWU2YTZlYTRj
N2U0YmRmOTc2ZDhlZGQ5NTQ0MWUuLjZhMDNkOGZmMWRlY2JlMTgxZDY4YTc4ZTQ3MjE5NDI1Y2Yz
NGIwZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21h
Yy9EaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYS5jcHAKQEAgLTMx
LDcgKzMxLDYgQEAKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVkaWFTYW1wbGVB
VkZPYmpDLmgiCiAjaW5jbHVkZSAiUGl4ZWxCdWZmZXJDb25mb3JtZXJDVi5oIgotI2luY2x1ZGUg
IlBpeGVsQnVmZmVyUmVzaXplci5oIgogI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2UuaCIK
ICNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmgiCiAjaW5jbHVkZSAiUmVhbHRp
bWVNZWRpYVNvdXJjZVNldHRpbmdzLmgiCkBAIC00Miw2ICs0MSw3IEBACiAjaW5jbHVkZSA8cGFs
L2F2Zm91bmRhdGlvbi9NZWRpYVRpbWVBVkZvdW5kYXRpb24uaD4KICNpbmNsdWRlIDxwYWwvY2Yv
Q29yZU1lZGlhU29mdExpbmsuaD4KICNpbmNsdWRlIDxwYWwvc3BpL2NmL0NvcmVBdWRpb1NQSS5o
PgorI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CiAjaW5jbHVkZSA8c3lz
L3RpbWUuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgpAQCAtNzIsNyArNzIsNyBAQCBjb25zdCBSZWFsdGltZU1lZGlhU291cmNl
Q2FwYWJpbGl0aWVzJiBEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpjYXBhYmlsaXRpZXMoKQog
ICAgICAgICAvLyBGSVhNRTogd2hhdCBzaG91bGQgdGhlc2UgYmU/CiAgICAgICAgIGNhcGFiaWxp
dGllcy5zZXRXaWR0aChDYXBhYmlsaXR5VmFsdWVPclJhbmdlKDcyLCAyODgwKSk7CiAgICAgICAg
IGNhcGFiaWxpdGllcy5zZXRIZWlnaHQoQ2FwYWJpbGl0eVZhbHVlT3JSYW5nZSg0NSwgMTgwMCkp
OwotICAgICAgICBjYXBhYmlsaXRpZXMuc2V0RnJhbWVSYXRlKENhcGFiaWxpdHlWYWx1ZU9yUmFu
Z2UoLjAxLCA2MC4wKSk7CisgICAgICAgIGNhcGFiaWxpdGllcy5zZXRGcmFtZVJhdGUoQ2FwYWJp
bGl0eVZhbHVlT3JSYW5nZSguMDEsIDMwLjApKTsKIAogICAgICAgICBtX2NhcGFiaWxpdGllcyA9
IFdURk1vdmUoY2FwYWJpbGl0aWVzKTsKICAgICB9CkBAIC0xMTEsMTAgKzExMSw4IEBAIHZvaWQg
RGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6c2V0dGluZ3NEaWRDaGFuZ2UoT3B0aW9uU2V0PFJl
YWx0aW1lTWVkaWFTb3VyY2VTCiAgICAgaWYgKHNldHRpbmdzLmNvbnRhaW5zKFJlYWx0aW1lTWVk
aWFTb3VyY2VTZXR0aW5nczo6RmxhZzo6RnJhbWVSYXRlKSAmJiBtX3RpbWVyLmlzQWN0aXZlKCkp
CiAgICAgICAgIG1fdGltZXIuc3RhcnRSZXBlYXRpbmcoMV9zIC8gZnJhbWVSYXRlKCkpOwogCi0g
ICAgaWYgKHNldHRpbmdzLmNvbnRhaW5zQW55KHsgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdz
OjpGbGFnOjpXaWR0aCwgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpGbGFnOjpIZWlnaHQg
fSkpIHsKKyAgICBpZiAoc2V0dGluZ3MuY29udGFpbnNBbnkoeyBSZWFsdGltZU1lZGlhU291cmNl
U2V0dGluZ3M6OkZsYWc6OldpZHRoLCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M6OkZsYWc6
OkhlaWdodCB9KSkKICAgICAgICAgbV9idWZmZXJBdHRyaWJ1dGVzID0gbnVsbHB0cjsKLSAgICAg
ICAgbV9sYXN0U2FtcGxlQnVmZmVyID0gbnVsbHB0cjsKLSAgICB9CiAKICAgICBtX2N1cnJlbnRT
ZXR0aW5ncyA9IHsgfTsKIH0KQEAgLTE1OSw3ICsxNTcsOCBAQCB2b2lkIERpc3BsYXlDYXB0dXJl
U291cmNlQ29jb2E6OnNldEludHJpbnNpY1NpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgbV9pbnRyaW5zaWNTaXplID0gc2l6ZTsKLSAgICBtX2xhc3RTYW1w
bGVCdWZmZXIgPSBudWxscHRyOworICAgIG5vdGlmeVNldHRpbmdzRGlkQ2hhbmdlT2JzZXJ2ZXJz
KHsgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpGbGFnOjpXaWR0aCwgUmVhbHRpbWVNZWRp
YVNvdXJjZVNldHRpbmdzOjpGbGFnOjpIZWlnaHQgfSk7CisKIH0KIAogdm9pZCBEaXNwbGF5Q2Fw
dHVyZVNvdXJjZUNvY29hOjplbWl0RnJhbWUoKQpAQCAtMTY3LDEyNCArMTY2LDQwIEBAIHZvaWQg
RGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6ZW1pdEZyYW1lKCkKICAgICBpZiAobXV0ZWQoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBwaXhlbEJ1ZmZlciA9IGdlbmVyYXRlRnJhbWUo
KTsKLSAgICBpZiAoIXBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9s
YXN0U2FtcGxlQnVmZmVyICYmIG1fbGFzdEZ1bGxTaXplZFBpeGVsQnVmZmVyICYmIENGRXF1YWwo
bV9sYXN0RnVsbFNpemVkUGl4ZWxCdWZmZXIuZ2V0KCksIHBpeGVsQnVmZmVyLmdldCgpKSkgewot
ICAgICAgICB2aWRlb1NhbXBsZUF2YWlsYWJsZShNZWRpYVNhbXBsZUFWRk9iakM6OmNyZWF0ZSht
X2xhc3RTYW1wbGVCdWZmZXIuZ2V0KCkpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IG1fbGFzdEZ1bGxTaXplZFBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXI7Ci0KLSAgICBpbnQgd2lk
dGggPSBXVEY6OnNhZmVDYXN0PGludD4oQ1ZQaXhlbEJ1ZmZlckdldFdpZHRoKHBpeGVsQnVmZmVy
LmdldCgpKSk7Ci0gICAgaW50IGhlaWdodCA9IFdURjo6c2FmZUNhc3Q8aW50PihDVlBpeGVsQnVm
ZmVyR2V0SGVpZ2h0KHBpeGVsQnVmZmVyLmdldCgpKSk7Ci0gICAgYXV0byByZXF1ZXN0ZWRTaXpl
ID0gZnJhbWVTaXplKCk7Ci0gICAgaWYgKHdpZHRoICE9IHJlcXVlc3RlZFNpemUud2lkdGgoKSB8
fCBoZWlnaHQgIT0gcmVxdWVzdGVkU2l6ZS5oZWlnaHQoKSkgewotICAgICAgICBpZiAobV9waXhl
bEJ1ZmZlclJlc2l6ZXIgJiYgIW1fcGl4ZWxCdWZmZXJSZXNpemVyLT5jYW5SZXNpemVUbyhyZXF1
ZXN0ZWRTaXplKSkKLSAgICAgICAgICAgIG1fcGl4ZWxCdWZmZXJSZXNpemVyID0gbnVsbHB0cjsK
LQotICAgICAgICBpZiAoIW1fcGl4ZWxCdWZmZXJSZXNpemVyKQotICAgICAgICAgICAgbV9waXhl
bEJ1ZmZlclJlc2l6ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFBpeGVsQnVmZmVyUmVzaXplcj4ocmVx
dWVzdGVkU2l6ZSwgcHJlZmVyZWRQaXhlbEJ1ZmZlckZvcm1hdCgpKTsKLQotICAgICAgICBwaXhl
bEJ1ZmZlciA9IG1fcGl4ZWxCdWZmZXJSZXNpemVyLT5yZXNpemUocGl4ZWxCdWZmZXIuZ2V0KCkp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fcGl4ZWxCdWZmZXJSZXNpemVyID0gbnVsbHB0cjsK
LQotICAgICAgICBhdXRvIHBpeGVsRm9ybWF0VHlwZSA9IENWUGl4ZWxCdWZmZXJHZXRQaXhlbEZv
cm1hdFR5cGUocGl4ZWxCdWZmZXIuZ2V0KCkpOwotICAgICAgICBpZiAocGl4ZWxGb3JtYXRUeXBl
ICE9IHByZWZlcmVkUGl4ZWxCdWZmZXJGb3JtYXQoKSkgewotICAgICAgICAgICAgaWYgKCFtX3Bp
eGVsQnVmZmVyQ29uZm9ybWVyKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBwcmVmZXJyZWRGcm9t
YXQgPSBwcmVmZXJlZFBpeGVsQnVmZmVyRm9ybWF0KCk7Ci0gICAgICAgICAgICAgICAgYXV0byBj
b25mb3JtZXJBdHRyaWJ1dGVzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKG51
bGxwdHIsIDAsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9u
YXJ5VmFsdWVDYWxsQmFja3MpKTsKLSAgICAgICAgICAgICAgICBhdXRvIHZpZGVvVHlwZSA9IGFk
b3B0Q0YoQ0ZOdW1iZXJDcmVhdGUobnVsbHB0ciwgIGtDRk51bWJlclNJbnQzMlR5cGUsICAmcHJl
ZmVycmVkRnJvbWF0KSk7Ci0gICAgICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUoY29u
Zm9ybWVyQXR0cmlidXRlcy5nZXQoKSwga0NWUGl4ZWxCdWZmZXJQaXhlbEZvcm1hdFR5cGVLZXks
IHZpZGVvVHlwZS5nZXQoKSk7Ci0KLSAgICAgICAgICAgICAgICBtX3BpeGVsQnVmZmVyQ29uZm9y
bWVyID0gc3RkOjptYWtlX3VuaXF1ZTxQaXhlbEJ1ZmZlckNvbmZvcm1lckNWPihjb25mb3JtZXJB
dHRyaWJ1dGVzLmdldCgpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcGl4ZWxCdWZm
ZXIgPSBtX3BpeGVsQnVmZmVyQ29uZm9ybWVyLT5jb252ZXJ0KHBpeGVsQnVmZmVyLmdldCgpKTsK
KyAgICBpZiAoIW1faW1hZ2VUcmFuc2ZlclNlc3Npb24pCisgICAgICAgIG1faW1hZ2VUcmFuc2Zl
clNlc3Npb24gPSBJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVhdGUocHJlZmVyZWRQaXhlbEJ1
ZmZlckZvcm1hdCgpKTsKKworICAgIGF1dG8gc2FtcGxlVGltZSA9IE1lZGlhVGltZTo6Y3JlYXRl
V2l0aERvdWJsZSgoZWxhcHNlZFRpbWUoKSArIDEwMF9tcykuc2Vjb25kcygpKTsKKyAgICBhdXRv
IGZyYW1lID0gZ2VuZXJhdGVGcmFtZSgpOworICAgIEludFNpemUgaW1hZ2VTaXplOworICAgIFJl
ZlB0cjxNZWRpYVNhbXBsZT4gc2FtcGxlID0gV1RGOjpzd2l0Y2hPbihmcmFtZSwKKyAgICAgICAg
W3RoaXMsIHNhbXBsZVRpbWUsICZpbWFnZVNpemVdKFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFn
ZSkgLT4gUmVmUHRyPE1lZGlhU2FtcGxlPiB7CisgICAgICAgICAgICBpZiAoIWltYWdlKQorICAg
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgICAgICBpbWFnZVNpemUgPSBJ
bnRTaXplKENHSW1hZ2VHZXRXaWR0aChpbWFnZS5nZXQoKSksIENHSW1hZ2VHZXRIZWlnaHQoaW1h
Z2UuZ2V0KCkpKTsKKyAgICAgICAgICAgIHJldHVybiBtX2ltYWdlVHJhbnNmZXJTZXNzaW9uLT5j
cmVhdGVNZWRpYVNhbXBsZShpbWFnZS5nZXQoKSwgc2FtcGxlVGltZSwgaW1hZ2VTaXplKTsKKyAg
ICAgICAgfSwKKyAgICAgICAgW3RoaXMsIHNhbXBsZVRpbWUsICZpbWFnZVNpemVdKFJldGFpblB0
cjxJT1N1cmZhY2VSZWY+IHN1cmZhY2UpIC0+IFJlZlB0cjxNZWRpYVNhbXBsZT4geworICAgICAg
ICAgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgICAgICAgICBpbWFnZVNpemUgPSBJbnRTaXplKElPU3VyZmFjZUdldFdpZHRoKHN1cmZhY2Uu
Z2V0KCkpLCBJT1N1cmZhY2VHZXRIZWlnaHQoc3VyZmFjZS5nZXQoKSkpOworICAgICAgICAgICAg
cmV0dXJuIG1faW1hZ2VUcmFuc2ZlclNlc3Npb24tPmNyZWF0ZU1lZGlhU2FtcGxlKHN1cmZhY2Uu
Z2V0KCksIHNhbXBsZVRpbWUsIGltYWdlU2l6ZSk7CiAgICAgICAgIH0KLSAgICB9Ci0gICAgaWYg
KCFwaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9sYXN0U2FtcGxlQnVmZmVy
ID0gc2FtcGxlQnVmZmVyRnJvbVBpeGVsQnVmZmVyKHBpeGVsQnVmZmVyLmdldCgpKTsKLSAgICBp
ZiAoIW1fbGFzdFNhbXBsZUJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdmlkZW9TYW1w
bGVBdmFpbGFibGUoTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVhdGUobV9sYXN0U2FtcGxlQnVmZmVy
LmdldCgpKSk7Ci19Ci0KLVJldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4gRGlzcGxheUNhcHR1
cmVTb3VyY2VDb2NvYTo6c2FtcGxlQnVmZmVyRnJvbVBpeGVsQnVmZmVyKENWUGl4ZWxCdWZmZXJS
ZWYgcGl4ZWxCdWZmZXIpCi17Ci0gICAgaWYgKCFwaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBDTVRpbWUgc2FtcGxlVGltZSA9IENNVGltZU1ha2UoKChlbGFwc2Vk
VGltZSgpICsgMTAwX21zKSAqIDEwMCkuc2Vjb25kcygpLCAxMDApOwotICAgIENNU2FtcGxlVGlt
aW5nSW5mbyB0aW1pbmdJbmZvID0geyBrQ01UaW1lSW52YWxpZCwgc2FtcGxlVGltZSwgc2FtcGxl
VGltZSB9OwotCi0gICAgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uUmVmIGZvcm1hdERlc2NyaXB0
aW9uID0gbnVsbHB0cjsKLSAgICBhdXRvIHN0YXR1cyA9IENNVmlkZW9Gb3JtYXREZXNjcmlwdGlv
bkNyZWF0ZUZvckltYWdlQnVmZmVyKGtDRkFsbG9jYXRvckRlZmF1bHQsIChDVkltYWdlQnVmZmVy
UmVmKXBpeGVsQnVmZmVyLCAmZm9ybWF0RGVzY3JpcHRpb24pOwotICAgIGlmIChzdGF0dXMpIHsK
LSAgICAgICAgUkVMRUFTRV9MT0coTWVkaWEsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBDTVZpZGVv
Rm9ybWF0RGVzY3JpcHRpb24gd2l0aCBlcnJvciBjb2RlOiAlZCIsIHN0YXRpY19jYXN0PGludD4o
c3RhdHVzKSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIENNU2FtcGxl
QnVmZmVyUmVmIHNhbXBsZUJ1ZmZlcjsKLSAgICBzdGF0dXMgPSBDTVNhbXBsZUJ1ZmZlckNyZWF0
ZVJlYWR5V2l0aEltYWdlQnVmZmVyKGtDRkFsbG9jYXRvckRlZmF1bHQsIChDVkltYWdlQnVmZmVy
UmVmKXBpeGVsQnVmZmVyLCBmb3JtYXREZXNjcmlwdGlvbiwgJnRpbWluZ0luZm8sICZzYW1wbGVC
dWZmZXIpOwotICAgIENGUmVsZWFzZShmb3JtYXREZXNjcmlwdGlvbik7Ci0gICAgaWYgKHN0YXR1
cykgewotICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIkZhaWxlZCB0byBpbml0aWFsaXplIENN
U2FtcGxlQnVmZmVyIHdpdGggZXJyb3IgY29kZTogJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1
cykpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICByZXR1cm4gYWRvcHRD
RihzYW1wbGVCdWZmZXIpOwotfQorICAgICk7CiAKLSNpZiBIQVZFKElPU1VSRkFDRSkgJiYgUExB
VEZPUk0oTUFDKQotc3RhdGljIGludDMyX3Qgcm91bmRVcFRvTWFjcm9ibG9ja011bHRpcGxlKGlu
dDMyX3Qgc2l6ZSkKLXsKLSAgICByZXR1cm4gKHNpemUgKyAxNSkgJiB+MTU7Ci19CiAKLVJldGFp
blB0cjxDVlBpeGVsQnVmZmVyUmVmPiBEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpwaXhlbEJ1
ZmZlckZyb21JT1N1cmZhY2UoSU9TdXJmYWNlUmVmIHN1cmZhY2UpCi17Ci0gICAgaWYgKCFtX2J1
ZmZlckF0dHJpYnV0ZXMpIHsKLSAgICAgICAgbV9idWZmZXJBdHRyaWJ1dGVzID0gYWRvcHRDRihD
RkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKG51bGxwdHIsIDAsICZrQ0ZUeXBlRGljdGlvbmFyeUtl
eUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKLQotICAgICAg
ICBhdXRvIGZvcm1hdCA9IElPU3VyZmFjZUdldFBpeGVsRm9ybWF0KHN1cmZhY2UpOwotICAgICAg
ICBpZiAoZm9ybWF0ID09IGtDVlBpeGVsRm9ybWF0VHlwZV80MjBZcENiQ3I4QmlQbGFuYXJWaWRl
b1JhbmdlIHx8IGZvcm1hdCA9PSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOEJpUGxhbmFy
RnVsbFJhbmdlKSB7Ci0KLSAgICAgICAgICAgIC8vIElmIHRoZSB3aWR0aCB4IGhlaWdodCBpc24n
dCBhIG11bHRpcGxlIG9mIDE2IHggMTYgYW5kIHRoZSBzdXJmYWNlIGhhcyBleHRyYSBtZW1vcnkg
aW4gdGhlIHBsYW5lcywgc2V0IHBpeGVsIGJ1ZmZlciBhdHRyaWJ1dGVzIHRvIHJlZmxlY3QgaXQu
Ci0gICAgICAgICAgICBhdXRvIHdpZHRoID0gSU9TdXJmYWNlR2V0V2lkdGgoc3VyZmFjZSk7Ci0g
ICAgICAgICAgICBhdXRvIGhlaWdodCA9IElPU3VyZmFjZUdldEhlaWdodChzdXJmYWNlKTsKLSAg
ICAgICAgICAgIGludDMyX3QgZXh0ZW5kZWRSaWdodCA9IHJvdW5kVXBUb01hY3JvYmxvY2tNdWx0
aXBsZSh3aWR0aCkgLSB3aWR0aDsKLSAgICAgICAgICAgIGludDMyX3QgZXh0ZW5kZWRCb3R0b20g
PSByb3VuZFVwVG9NYWNyb2Jsb2NrTXVsdGlwbGUoaGVpZ2h0KSAtIGhlaWdodDsKLQotICAgICAg
ICAgICAgaWYgKChJT1N1cmZhY2VHZXRCeXRlc1BlclJvd09mUGxhbmUoc3VyZmFjZSwgMCkgPj0g
d2lkdGggKyBleHRlbmRlZFJpZ2h0KQotICAgICAgICAgICAgICAgICYmIChJT1N1cmZhY2VHZXRC
eXRlc1BlclJvd09mUGxhbmUoc3VyZmFjZSwgMSkgPj0gd2lkdGggKyBleHRlbmRlZFJpZ2h0KQot
ICAgICAgICAgICAgICAgICYmIChJT1N1cmZhY2VHZXRBbGxvY1NpemUoc3VyZmFjZSkgPj0gKGhl
aWdodCArIGV4dGVuZGVkQm90dG9tKSAqIElPU3VyZmFjZUdldEJ5dGVzUGVyUm93T2ZQbGFuZShz
dXJmYWNlLCAwKSAqIDMgLyAyKSkgewotICAgICAgICAgICAgICAgIGF1dG8gY2ZJbnQgPSBhZG9w
dENGKENGTnVtYmVyQ3JlYXRlKG51bGxwdHIsICBrQ0ZOdW1iZXJJbnRUeXBlLCAgJmV4dGVuZGVk
UmlnaHQpKTsKLSAgICAgICAgICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShtX2J1ZmZlckF0
dHJpYnV0ZXMuZ2V0KCksIGtDVlBpeGVsQnVmZmVyRXh0ZW5kZWRQaXhlbHNSaWdodEtleSwgY2ZJ
bnQuZ2V0KCkpOwotICAgICAgICAgICAgICAgIGNmSW50ID0gYWRvcHRDRihDRk51bWJlckNyZWF0
ZShudWxscHRyLCAga0NGTnVtYmVySW50VHlwZSwgICZleHRlbmRlZEJvdHRvbSkpOwotICAgICAg
ICAgICAgICAgIENGRGljdGlvbmFyeVNldFZhbHVlKG1fYnVmZmVyQXR0cmlidXRlcy5nZXQoKSwg
a0NWUGl4ZWxCdWZmZXJFeHRlbmRlZFBpeGVsc0JvdHRvbUtleSwgY2ZJbnQuZ2V0KCkpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUobV9i
dWZmZXJBdHRyaWJ1dGVzLmdldCgpLCBrQ1ZQaXhlbEJ1ZmZlck9wZW5HTENvbXBhdGliaWxpdHlL
ZXksIGtDRkJvb2xlYW5UcnVlKTsKKyAgICBpZiAoIXNhbXBsZSkgeworICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIENWUGl4ZWxCdWZm
ZXJSZWYgcGl4ZWxCdWZmZXI7Ci0gICAgYXV0byBzdGF0dXMgPSBDVlBpeGVsQnVmZmVyQ3JlYXRl
V2l0aElPU3VyZmFjZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBzdXJmYWNlLCBtX2J1ZmZlckF0dHJp
YnV0ZXMuZ2V0KCksICZwaXhlbEJ1ZmZlcik7Ci0gICAgaWYgKHN0YXR1cykgewotICAgICAgICBS
RUxFQVNFX0xPRyhNZWRpYSwgIkNWUGl4ZWxCdWZmZXJDcmVhdGVXaXRoSU9TdXJmYWNlIGZhaWxl
ZCB3aXRoIGVycm9yIGNvZGU6ICVkIiwgc3RhdGljX2Nhc3Q8aW50PihzdGF0dXMpKTsKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQorICAgIGlmIChtX2ludHJpbnNpY1NpemUgIT0gaW1h
Z2VTaXplKQorICAgICAgICBzZXRJbnRyaW5zaWNTaXplKGltYWdlU2l6ZSk7CiAKLSAgICByZXR1
cm4gYWRvcHRDRihwaXhlbEJ1ZmZlcik7CisgICAgdmlkZW9TYW1wbGVBdmFpbGFibGUoKnNhbXBs
ZS5nZXQoKSk7CiB9Ci0jZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNhcHR1
cmVTb3VyY2VDb2NvYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L0Rpc3BsYXlDYXB0dXJlU291cmNlQ29jb2EuaAppbmRleCBiZmU0MGI4NjA1ODFmMWNkYjkzMWIz
NWNiZjQ3ZmYwNzJjM2JhYWE1Li45YzA5ZWM4ZDMyMTQwMjRkNGU2YjY3ZDJiZjAyMmZkZDAzNGYz
NWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMv
RGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL21hYy9EaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hLmgKQEAgLTI4LDEyICsy
OCwxNCBAQAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAKICNpbmNsdWRlICJDYXB0dXJlRGV2
aWNlLmgiCisjaW5jbHVkZSAiSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5oIgogI2luY2x1ZGUgIlJl
YWx0aW1lTWVkaWFTb3VyY2UuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCit0eXBlZGVmIHN0cnVjdCBDR0ltYWdlICpDR0ltYWdlUmVm
OwogdHlwZWRlZiBzdHJ1Y3QgX19DVkJ1ZmZlciAqQ1ZQaXhlbEJ1ZmZlclJlZjsKIHR5cGVkZWYg
c3RydWN0IF9fSU9TdXJmYWNlICpJT1N1cmZhY2VSZWY7CiAKQEAgLTQ0LDggKzQ2LDggQEAgY2xh
c3MgTWVkaWFUaW1lOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDYXB0dXJlRGV2aWNl
SW5mbzsKK2NsYXNzIEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ7CiBjbGFzcyBQaXhlbEJ1ZmZlckNv
bmZvcm1lckNWOwotY2xhc3MgUGl4ZWxCdWZmZXJSZXNpemVyOwogCiBjbGFzcyBEaXNwbGF5Q2Fw
dHVyZVNvdXJjZUNvY29hIDogcHVibGljIFJlYWx0aW1lTWVkaWFTb3VyY2UgewogcHVibGljOgpA
QCAtNTQsNyArNTYsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgRGlzcGxheUNhcHR1cmVTb3VyY2VDb2Nv
YShTdHJpbmcmJiBuYW1lKTsKICAgICB2aXJ0dWFsIH5EaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29h
KCk7CiAKLSAgICB2aXJ0dWFsIFJldGFpblB0cjxDVlBpeGVsQnVmZmVyUmVmPiBnZW5lcmF0ZUZy
YW1lKCkgPSAwOworICAgIHVzaW5nIERpc3BsYXlGcmFtZVR5cGUgPSBXVEY6OlZhcmlhbnQ8UmV0
YWluUHRyPENHSW1hZ2VSZWY+LCBSZXRhaW5QdHI8SU9TdXJmYWNlUmVmPj47CisgICAgdmlydHVh
bCBEaXNwbGF5RnJhbWVUeXBlIGdlbmVyYXRlRnJhbWUoKSA9IDA7CisKICAgICB2aXJ0dWFsIFJl
YWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RGlzcGxheVN1cmZhY2VUeXBlIHN1cmZhY2VUeXBl
KCkgY29uc3QgPSAwOwogCiAgICAgdm9pZCBzdGFydFByb2R1Y2luZ0RhdGEoKSBvdmVycmlkZTsK
QEAgLTYyLDExICs2Niw2IEBAIHByb3RlY3RlZDoKIAogICAgIFNlY29uZHMgZWxhcHNlZFRpbWUo
KTsKIAotICAgIFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4gc2FtcGxlQnVmZmVyRnJvbVBp
eGVsQnVmZmVyKENWUGl4ZWxCdWZmZXJSZWYpOwotI2lmIEhBVkUoSU9TVVJGQUNFKQotICAgIFJl
dGFpblB0cjxDVlBpeGVsQnVmZmVyUmVmPiBwaXhlbEJ1ZmZlckZyb21JT1N1cmZhY2UoSU9TdXJm
YWNlUmVmKTsKLSNlbmRpZgotCiAgICAgdm9pZCBzZXR0aW5nc0RpZENoYW5nZShPcHRpb25TZXQ8
UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpGbGFnPikgb3ZlcnJpZGU7CiAKICAgICBjb25z
dCBJbnRTaXplJiBpbnRyaW5zaWNTaXplKCkgY29uc3QgeyByZXR1cm4gbV9pbnRyaW5zaWNTaXpl
OyB9CkBAIC05MywxMCArOTIsNyBAQCBwcml2YXRlOgogICAgIFJldGFpblB0cjxDRk11dGFibGVE
aWN0aW9uYXJ5UmVmPiBtX2J1ZmZlckF0dHJpYnV0ZXM7CiAgICAgUnVuTG9vcDo6VGltZXI8RGlz
cGxheUNhcHR1cmVTb3VyY2VDb2NvYT4gbV90aW1lcjsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxQ
aXhlbEJ1ZmZlclJlc2l6ZXI+IG1fcGl4ZWxCdWZmZXJSZXNpemVyOwotICAgIHN0ZDo6dW5pcXVl
X3B0cjxQaXhlbEJ1ZmZlckNvbmZvcm1lckNWPiBtX3BpeGVsQnVmZmVyQ29uZm9ybWVyOwotICAg
IFJldGFpblB0cjxDVlBpeGVsQnVmZmVyUmVmPiBtX2xhc3RGdWxsU2l6ZWRQaXhlbEJ1ZmZlcjsK
LSAgICBSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+IG1fbGFzdFNhbXBsZUJ1ZmZlcjsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VUcmFuc2ZlclNlc3Npb25WVD4gbV9pbWFnZVRyYW5zZmVy
U2Vzc2lvbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJj
ZU1hYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01vY2tSZWFs
dGltZVZpZGVvU291cmNlTWFjLmgKaW5kZXggOWM3NGRkZTE4MzFlNDcxYTEwNzYwMWIwM2U2NjU0
N2M3NjlhMDhlYS4uZThiZTgyZjY4ZjdjNjkxMTUyMTg4OTFjZDQ0Njk4M2RmNjk2MjZiNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01vY2tSZWFs
dGltZVZpZGVvU291cmNlTWFjLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL01vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLmgKQEAgLTQzLDcgKzQzLDcgQEAg
dHlwZWRlZiBzdHJ1Y3QgX19DVlBpeGVsQnVmZmVyUG9vbCAqQ1ZQaXhlbEJ1ZmZlclBvb2xSZWY7
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgUGl4ZWxCdWZmZXJSZXNpemVyOworY2xh
c3MgSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDsKIAogY2xhc3MgTW9ja1JlYWx0aW1lVmlkZW9Tb3Vy
Y2VNYWMgZmluYWwgOiBwdWJsaWMgTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UsIHByaXZhdGUgT3Jp
ZW50YXRpb25Ob3RpZmllcjo6T2JzZXJ2ZXIgewogcHVibGljOgpAQCAtNTMsMTQgKzUzLDEwIEBA
IHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIE1vY2tSZWFsdGltZVZpZGVvU291cmNlOwogICAg
IE1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjKFN0cmluZyYmIGRldmljZUlELCBTdHJpbmcmJiBu
YW1lLCBTdHJpbmcmJiBoYXNoU2FsdCk7CiAKLSAgICBSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJS
ZWY+IENNU2FtcGxlQnVmZmVyRnJvbVBpeGVsQnVmZmVyKENWUGl4ZWxCdWZmZXJSZWYpOwotICAg
IFJldGFpblB0cjxDVlBpeGVsQnVmZmVyUmVmPiBwaXhlbEJ1ZmZlckZyb21DR0ltYWdlKENHSW1h
Z2VSZWYpIGNvbnN0OwotCiAgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0
OwogICAgIHZvaWQgdXBkYXRlU2FtcGxlQnVmZmVyKCkgZmluYWw7CiAgICAgdm9pZCBzZXR0aW5n
c0RpZENoYW5nZShPcHRpb25TZXQ8UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpGbGFnPikg
ZmluYWw7CiAgICAgYm9vbCBjYW5SZXNpemVWaWRlb0ZyYW1lcygpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIHRydWU7IH0KLSAgICB2b2lkIHNldFNpemVBbmRGcmFtZVJhdGVXaXRoUHJlc2V0KEludFNp
emUsIGRvdWJsZSwgUmVmUHRyPFZpZGVvUHJlc2V0PikgZmluYWw7CiAKICAgICB2b2lkIG9yaWVu
dGF0aW9uQ2hhbmdlZChpbnQgb3JpZW50YXRpb24pIGZpbmFsOwogICAgIHZvaWQgbW9uaXRvck9y
aWVudGF0aW9uKE9yaWVudGF0aW9uTm90aWZpZXImKSBmaW5hbDsKQEAgLTY4LDcgKzY0LDcgQEAg
cHJpdmF0ZToKICAgICBtdXRhYmxlIFJldGFpblB0cjxDVlBpeGVsQnVmZmVyUG9vbFJlZj4gbV9i
dWZmZXJQb29sOwogICAgIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uIG1fZGV2aWNlT3JpZW50
YXRpb24geyBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6Tm9uZSB9OwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxQaXhlbEJ1ZmZlckNvbmZvcm1lckNWPiBtX3BpeGVsQnVmZmVyQ29uZm9ybWVyOwot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxQaXhlbEJ1ZmZlclJlc2l6ZXI+IG1fcGl4ZWxCdWZmZXJSZXNp
emVyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZVRyYW5zZmVyU2Vzc2lvblZUPiBtX2ltYWdl
VHJhbnNmZXJTZXNzaW9uOwogICAgIEludFNpemUgbV9wcmVzZXRTaXplOwogfTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01vY2tSZWFsdGlt
ZVZpZGVvU291cmNlTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
bWFjL01vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLm1tCmluZGV4IDIzYTE2OTYyYjUzOTQxODRj
NWY2NTRlOWVjNWUxZDFmZTkwY2QyOWEuLjcyNTlkYjFlODVkMGYyZGY2MWU0NGViZjdlNWUzMDk0
MTQ0ZmUzNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW0KQEAg
LTM0LDEwICszNCwxMCBAQAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAjaW1wb3J0ICJHcmFw
aGljc0NvbnRleHRDRy5oIgogI2ltcG9ydCAiSW1hZ2VCdWZmZXIuaCIKKyNpbXBvcnQgIkltYWdl
VHJhbnNmZXJTZXNzaW9uVlQuaCIKICNpbXBvcnQgIk1lZGlhQ29uc3RyYWludHMuaCIKICNpbXBv
cnQgIk1lZGlhU2FtcGxlQVZGT2JqQy5oIgogI2ltcG9ydCAiTm90SW1wbGVtZW50ZWQuaCIKLSNp
bXBvcnQgIlBpeGVsQnVmZmVyUmVzaXplci5oIgogI2ltcG9ydCAiUGxhdGZvcm1MYXllci5oIgog
I2ltcG9ydCAiUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzLmgiCiAjaW1wb3J0ICJSZWFsdGlt
ZVZpZGVvVXRpbGl0aWVzLmgiCkBAIC01MSw4ICs1MSw2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiB1c2luZyBuYW1lc3BhY2UgUEFMOwogCi1zdGF0aWMgY29uc3QgaW50IHZpZGVvU2FtcGxlUmF0
ZSA9IDkwMDAwOwotCiBDYXB0dXJlU291cmNlT3JFcnJvciBNb2NrUmVhbHRpbWVWaWRlb1NvdXJj
ZTo6Y3JlYXRlKFN0cmluZyYmIGRldmljZUlELCBTdHJpbmcmJiBuYW1lLCBTdHJpbmcmJiBoYXNo
U2FsdCwgY29uc3QgTWVkaWFDb25zdHJhaW50cyogY29uc3RyYWludHMpCiB7CiAjaWZuZGVmIE5E
RUJVRwpAQCAtNzUsOTggKzczLDI0IEBAIE1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjOjpNb2Nr
UmVhbHRpbWVWaWRlb1NvdXJjZU1hYyhTdHJpbmcmJiBkZXZpY2VJRCwgU3RyaW5nCiB7CiB9CiAK
LVJldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4gTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWM6
OkNNU2FtcGxlQnVmZmVyRnJvbVBpeGVsQnVmZmVyKENWUGl4ZWxCdWZmZXJSZWYgcGl4ZWxCdWZm
ZXIpCi17Ci0gICAgaWYgKCFwaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgCi0gICAgQ01UaW1lIHNhbXBsZVRpbWUgPSBDTVRpbWVNYWtlKCgoZWxhcHNlZFRpbWUoKSAr
IDEwMF9tcykgKiB2aWRlb1NhbXBsZVJhdGUpLnNlY29uZHMoKSwgdmlkZW9TYW1wbGVSYXRlKTsK
LSAgICBDTVNhbXBsZVRpbWluZ0luZm8gdGltaW5nSW5mbyA9IHsga0NNVGltZUludmFsaWQsIHNh
bXBsZVRpbWUsIHNhbXBsZVRpbWUgfTsKLQotICAgIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvblJl
ZiBmb3JtYXREZXNjcmlwdGlvbiA9IG51bGxwdHI7Ci0gICAgT1NTdGF0dXMgc3RhdHVzID0gQ01W
aWRlb0Zvcm1hdERlc2NyaXB0aW9uQ3JlYXRlRm9ySW1hZ2VCdWZmZXIoa0NGQWxsb2NhdG9yRGVm
YXVsdCwgKENWSW1hZ2VCdWZmZXJSZWYpcGl4ZWxCdWZmZXIsICZmb3JtYXREZXNjcmlwdGlvbik7
Ci0gICAgaWYgKHN0YXR1cyAhPSBub0VycikgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0
byBpbml0aWFsaXplIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbiB3aXRoIGVycm9yIGNvZGU6ICVk
Iiwgc3RhdHVzKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgQ01TYW1w
bGVCdWZmZXJSZWYgc2FtcGxlQnVmZmVyOwotICAgIHN0YXR1cyA9IENNU2FtcGxlQnVmZmVyQ3Jl
YXRlUmVhZHlXaXRoSW1hZ2VCdWZmZXIoa0NGQWxsb2NhdG9yRGVmYXVsdCwgKENWSW1hZ2VCdWZm
ZXJSZWYpcGl4ZWxCdWZmZXIsIGZvcm1hdERlc2NyaXB0aW9uLCAmdGltaW5nSW5mbywgJnNhbXBs
ZUJ1ZmZlcik7Ci0gICAgQ0ZSZWxlYXNlKGZvcm1hdERlc2NyaXB0aW9uKTsKLSAgICBpZiAoc3Rh
dHVzICE9IG5vRXJyKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGluaXRpYWxpemUg
Q01TYW1wbGVCdWZmZXIgd2l0aCBlcnJvciBjb2RlOiAlZCIsIHN0YXR1cyk7Ci0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIH0KLQotICAgIHJldHVybiBhZG9wdENGKHNhbXBsZUJ1ZmZlcik7
Ci19Ci0KLVJldGFpblB0cjxDVlBpeGVsQnVmZmVyUmVmPiBNb2NrUmVhbHRpbWVWaWRlb1NvdXJj
ZU1hYzo6cGl4ZWxCdWZmZXJGcm9tQ0dJbWFnZShDR0ltYWdlUmVmIGltYWdlKSBjb25zdAotewot
ICAgIHN0YXRpYyBDR0NvbG9yU3BhY2VSZWYgc1JHQkNvbG9yU3BhY2UgPSBzUkdCQ29sb3JTcGFj
ZVJlZigpOwotCi0gICAgQ0dTaXplIGltYWdlU2l6ZSA9IENHU2l6ZU1ha2UoQ0dJbWFnZUdldFdp
ZHRoKGltYWdlKSwgQ0dJbWFnZUdldEhlaWdodChpbWFnZSkpOwotICAgIGlmICghbV9idWZmZXJQ
b29sKSB7Ci0gICAgICAgIENWUGl4ZWxCdWZmZXJQb29sUmVmIGJ1ZmZlclBvb2w7Ci0gICAgICAg
IENGRGljdGlvbmFyeVJlZiBzb3VyY2VQaXhlbEJ1ZmZlck9wdGlvbnMgPSAoX19icmlkZ2UgQ0ZE
aWN0aW9uYXJ5UmVmKSBAewotICAgICAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4
ZWxCdWZmZXJQaXhlbEZvcm1hdFR5cGVLZXkgOiBAKGtDVlBpeGVsRm9ybWF0VHlwZV8zMkFSR0Ip
LAotICAgICAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxCdWZmZXJXaWR0aEtl
eSA6IEAoaW1hZ2VTaXplLndpZHRoKSwKLSAgICAgICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAq
KWtDVlBpeGVsQnVmZmVySGVpZ2h0S2V5IDogQChpbWFnZVNpemUuaGVpZ2h0KSwKLSNpZiBQTEFU
Rk9STShJT1MpCi0gICAgICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ1ZQaXhlbEZvcm1h
dE9wZW5HTEVTQ29tcGF0aWJpbGl0eSA6IEAoWUVTKSwKLSNlbHNlCi0gICAgICAgICAgICAoX19i
cmlkZ2UgTlNTdHJpbmcgKilrQ1ZQaXhlbEJ1ZmZlck9wZW5HTENvbXBhdGliaWxpdHlLZXkgOiBA
KFlFUyksCi0jZW5kaWYKLSAgICAgICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVs
QnVmZmVySU9TdXJmYWNlUHJvcGVydGllc0tleSA6IEB7LyplbXB0eSBkaWN0aW9uYXJ5Ki99Ci0g
ICAgICAgIH07Ci0KLSAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIHBpeGVsQnVmZmVyUG9vbE9wdGlv
bnMgPSAoX19icmlkZ2UgQ0ZEaWN0aW9uYXJ5UmVmKSBAewotICAgICAgICAgICAoX19icmlkZ2Ug
TlNTdHJpbmcgKilrQ1ZQaXhlbEJ1ZmZlclBvb2xNaW5pbXVtQnVmZmVyQ291bnRLZXkgOiBAKDQp
Ci0gICAgICAgIH07Ci0KLSAgICAgICAgQ1ZSZXR1cm4gc3RhdHVzID0gQ1ZQaXhlbEJ1ZmZlclBv
b2xDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgcGl4ZWxCdWZmZXJQb29sT3B0aW9ucywgc291
cmNlUGl4ZWxCdWZmZXJPcHRpb25zLCAmYnVmZmVyUG9vbCk7Ci0gICAgICAgIGlmIChzdGF0dXMg
IT0ga0NWUmV0dXJuU3VjY2VzcykKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
ICAgIG1fYnVmZmVyUG9vbCA9IGFkb3B0Q0YoYnVmZmVyUG9vbCk7Ci0gICAgfQotCi0gICAgQ1ZQ
aXhlbEJ1ZmZlclJlZiBwaXhlbEJ1ZmZlcjsKLSAgICBDVlJldHVybiBzdGF0dXMgPSBDVlBpeGVs
QnVmZmVyUG9vbENyZWF0ZVBpeGVsQnVmZmVyKG51bGxwdHIsIG1fYnVmZmVyUG9vbC5nZXQoKSwg
JnBpeGVsQnVmZmVyKTsKLSAgICBpZiAoc3RhdHVzICE9IGtDVlJldHVyblN1Y2Nlc3MpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQ1ZQaXhlbEJ1ZmZlckxvY2tCYXNlQWRkcmVzcyhw
aXhlbEJ1ZmZlciwgMCk7Ci0gICAgdm9pZCogZGF0YSA9IENWUGl4ZWxCdWZmZXJHZXRCYXNlQWRk
cmVzcyhwaXhlbEJ1ZmZlcik7Ci0gICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENv
bnRleHRDcmVhdGUoZGF0YSwgaW1hZ2VTaXplLndpZHRoLCBpbWFnZVNpemUuaGVpZ2h0LCA4LCBD
VlBpeGVsQnVmZmVyR2V0Qnl0ZXNQZXJSb3cocGl4ZWxCdWZmZXIpLCBzUkdCQ29sb3JTcGFjZSwg
KENHQml0bWFwSW5mbykga0NHSW1hZ2VBbHBoYU5vbmVTa2lwRmlyc3QpKTsKLSAgICBDR0NvbnRl
eHREcmF3SW1hZ2UoY29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBDR0ltYWdlR2V0V2lk
dGgoaW1hZ2UpLCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKSksIGltYWdlKTsKLSAgICBDVlBpeGVs
QnVmZmVyVW5sb2NrQmFzZUFkZHJlc3MocGl4ZWxCdWZmZXIsIDApOwotCi0gICAgcmV0dXJuIGFk
b3B0Q0YocGl4ZWxCdWZmZXIpOwotfQotCiB2b2lkIE1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFj
Ojp1cGRhdGVTYW1wbGVCdWZmZXIoKQogewogICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSB0aGlzLT5p
bWFnZUJ1ZmZlcigpOwogICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlckZyb21DR0ltYWdlKGltYWdlQnVmZmVy
LT5jb3B5SW1hZ2UoKS0+bmF0aXZlSW1hZ2UoKS5nZXQoKSk7Ci0gICAgaWYgKG1fcGl4ZWxCdWZm
ZXJSZXNpemVyKQotICAgICAgICBwaXhlbEJ1ZmZlciA9IG1fcGl4ZWxCdWZmZXJSZXNpemVyLT5y
ZXNpemUocGl4ZWxCdWZmZXIuZ2V0KCkpOwotICAgIGVsc2UgewotICAgICAgICBpZiAoIW1fcGl4
ZWxCdWZmZXJDb25mb3JtZXIpIHsKLSAgICAgICAgICAgIG1fcGl4ZWxCdWZmZXJDb25mb3JtZXIg
PSBzdGQ6Om1ha2VfdW5pcXVlPFBpeGVsQnVmZmVyQ29uZm9ybWVyQ1Y+KChfX2JyaWRnZSBDRkRp
Y3Rpb25hcnlSZWYpQHsKLSAgICAgICAgICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ1ZQ
aXhlbEJ1ZmZlclBpeGVsRm9ybWF0VHlwZUtleTogQChwcmVmZXJlZFBpeGVsQnVmZmVyRm9ybWF0
KCkpCi0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQotCi0gICAgICAgIHBpeGVsQnVmZmVyID0g
bV9waXhlbEJ1ZmZlckNvbmZvcm1lci0+Y29udmVydChwaXhlbEJ1ZmZlci5nZXQoKSk7Ci0gICAg
fQotICAgIGF1dG8gc2FtcGxlQnVmZmVyID0gQ01TYW1wbGVCdWZmZXJGcm9tUGl4ZWxCdWZmZXIo
cGl4ZWxCdWZmZXIuZ2V0KCkpOworICAgIGlmICghbV9pbWFnZVRyYW5zZmVyU2Vzc2lvbikKKyAg
ICAgICAgbV9pbWFnZVRyYW5zZmVyU2Vzc2lvbiA9IEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNy
ZWF0ZShwcmVmZXJlZFBpeGVsQnVmZmVyRm9ybWF0KCkpOworICAgIGlmICghbV9pbWFnZVRyYW5z
ZmVyU2Vzc2lvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBzYW1wbGVUaW1lID0gTWVk
aWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKChlbGFwc2VkVGltZSgpICsgMTAwX21zKS5zZWNvbmRz
KCkpOworICAgIGF1dG8gc2FtcGxlQnVmZmVyID0gbV9pbWFnZVRyYW5zZmVyU2Vzc2lvbi0+Y3Jl
YXRlTWVkaWFTYW1wbGUoaW1hZ2VCdWZmZXItPmNvcHlJbWFnZSgpLT5uYXRpdmVJbWFnZSgpLmdl
dCgpLCBzYW1wbGVUaW1lLCBzaXplKCksIG1fZGV2aWNlT3JpZW50YXRpb24pOworICAgIGlmICgh
c2FtcGxlQnVmZmVyKQorICAgICAgICByZXR1cm47CiAKICAgICAvLyBXZSB1c2UgbV9kZXZpY2VP
cmllbnRhdGlvbiB0byBlbXVsYXRlIHNlbnNvciBvcmllbnRhdGlvbgotICAgIGRpc3BhdGNoTWVk
aWFTYW1wbGVUb09ic2VydmVycyhNZWRpYVNhbXBsZUFWRk9iakM6OmNyZWF0ZShzYW1wbGVCdWZm
ZXIuZ2V0KCksIG1fZGV2aWNlT3JpZW50YXRpb24pKTsKKyAgICBkaXNwYXRjaE1lZGlhU2FtcGxl
VG9PYnNlcnZlcnMoKnNhbXBsZUJ1ZmZlci5nZXQoKSk7CiB9CiAKIHZvaWQgTW9ja1JlYWx0aW1l
VmlkZW9Tb3VyY2VNYWM6OnNldHRpbmdzRGlkQ2hhbmdlKE9wdGlvblNldDxSZWFsdGltZU1lZGlh
U291cmNlU2V0dGluZ3M6OkZsYWc+IHNldHRpbmdzKQpAQCAtMjAzLDIxICsxMjcsNiBAQCB2b2lk
IE1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjOjptb25pdG9yT3JpZW50YXRpb24oT3JpZW50YXRp
b25Ob3RpZmllciYgbm90aWZpZQogICAgIG9yaWVudGF0aW9uQ2hhbmdlZChub3RpZmllci5vcmll
bnRhdGlvbigpKTsKIH0KIAotdm9pZCBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYzo6c2V0U2l6
ZUFuZEZyYW1lUmF0ZVdpdGhQcmVzZXQoSW50U2l6ZSByZXF1ZXN0ZWRTaXplLCBkb3VibGUsIFJl
ZlB0cjxWaWRlb1ByZXNldD4gcHJlc2V0KQotewotICAgIGlmICghcHJlc2V0KQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAocHJlc2V0LT5zaXplICE9IHJlcXVlc3RlZFNpemUpIHsKLSAgICAg
ICAgaWYgKG1fcGl4ZWxCdWZmZXJSZXNpemVyICYmICFtX3BpeGVsQnVmZmVyUmVzaXplci0+Y2Fu
UmVzaXplVG8ocmVxdWVzdGVkU2l6ZSkpCi0gICAgICAgICAgICBtX3BpeGVsQnVmZmVyUmVzaXpl
ciA9IG51bGxwdHI7Ci0KLSAgICAgICAgaWYgKCFtX3BpeGVsQnVmZmVyUmVzaXplcikKLSAgICAg
ICAgICAgIG1fcGl4ZWxCdWZmZXJSZXNpemVyID0gc3RkOjptYWtlX3VuaXF1ZTxQaXhlbEJ1ZmZl
clJlc2l6ZXI+KHJlcXVlc3RlZFNpemUsIHByZWZlcmVkUGl4ZWxCdWZmZXJGb3JtYXQoKSk7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIG1fcGl4ZWxCdWZmZXJSZXNpemVyID0gbnVsbHB0cjsKLX0KLQog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9TY3Jl
ZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbWFjL1NjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLmgKaW5kZXggZWM5MjBm
MDI0YTU2ODk5MjAwOTQ0OTQ0NDdkNzJiZWU2MzI5MGRjNy4uOWM4Zjg3MWMzZDFmOWM2OWMyNTdh
NmJkOTllYTlmNDQyNzIwZDllZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbWFjL1NjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1NjcmVlbkRpc3BsYXlDYXB0dXJl
U291cmNlTWFjLmgKQEAgLTU2LDcgKzU2LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZnJhbWVB
dmFpbGFibGUoQ0dEaXNwbGF5U3RyZWFtRnJhbWVTdGF0dXMsIHVpbnQ2NF90LCBJT1N1cmZhY2VS
ZWYsIENHRGlzcGxheVN0cmVhbVVwZGF0ZVJlZik7CiAKLSAgICBSZXRhaW5QdHI8Q1ZQaXhlbEJ1
ZmZlclJlZj4gZ2VuZXJhdGVGcmFtZSgpIGZpbmFsOworICAgIERpc3BsYXlDYXB0dXJlU291cmNl
Q29jb2E6OkRpc3BsYXlGcmFtZVR5cGUgZ2VuZXJhdGVGcmFtZSgpIGZpbmFsOwogICAgIFJlYWx0
aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RGlzcGxheVN1cmZhY2VUeXBlIHN1cmZhY2VUeXBlKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpEaXNwbGF5
U3VyZmFjZVR5cGU6Ok1vbml0b3I7IH0KIAogICAgIHZvaWQgc3RhcnRQcm9kdWNpbmdEYXRhKCkg
ZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9t
YWMvU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMubW0KaW5k
ZXggYTIzOGYyOGY5NzViODQwODM0Mjc3ZThiMGMyZGVkYzE5Y2FiZTQ0Ny4uNGNiNGQxM2NhNTAy
ZjQzZDIxMmJkODRhMWQ3ZTcwYjhhZWUyYTJiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1NjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9TY3JlZW5EaXNw
bGF5Q2FwdHVyZVNvdXJjZU1hYy5tbQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgogI2luY2x1ZGUgIlJlYWx0
aW1lTWVkaWFTb3VyY2VTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlJlYWx0aW1lVmlkZW9VdGlsaXRp
ZXMuaCIKIAogI2luY2x1ZGUgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCiAKQEAgLTE2Niw3ICsxNjcs
NyBAQCBib29sIFNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpjcmVhdGVEaXNwbGF5U3Ry
ZWFtKCkKICAgICAgICAgfSk7CiAKICAgICAgICAgYXV0byBzaXplID0gZnJhbWVTaXplKCk7Ci0g
ICAgICAgIG1fZGlzcGxheVN0cmVhbSA9IGFkb3B0Q0YoQ0dEaXNwbGF5U3RyZWFtQ3JlYXRlV2l0
aERpc3BhdGNoUXVldWUobV9kaXNwbGF5SUQsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwg
a0NWUGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhQbGFuYXIsIHN0cmVhbU9wdGlvbnMuZ2V0KCks
IG1fY2FwdHVyZVF1ZXVlLmdldCgpLCBtX2ZyYW1lQXZhaWxhYmxlQmxvY2spKTsKKyAgICAgICAg
bV9kaXNwbGF5U3RyZWFtID0gYWRvcHRDRihDR0Rpc3BsYXlTdHJlYW1DcmVhdGVXaXRoRGlzcGF0
Y2hRdWV1ZShtX2Rpc3BsYXlJRCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCBwcmVmZXJl
ZFBpeGVsQnVmZmVyRm9ybWF0KCksIHN0cmVhbU9wdGlvbnMuZ2V0KCksIG1fY2FwdHVyZVF1ZXVl
LmdldCgpLCBtX2ZyYW1lQXZhaWxhYmxlQmxvY2spKTsKICAgICAgICAgaWYgKCFtX2Rpc3BsYXlT
dHJlYW0pIHsKICAgICAgICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhLCAiU2NyZWVuRGlzcGxheUNh
cHR1cmVTb3VyY2VNYWM6OmNyZWF0ZURpc3BsYXlTdHJlYW06IENHRGlzcGxheVN0cmVhbUNyZWF0
ZSBmYWlsZWQiKTsKICAgICAgICAgICAgIGNhcHR1cmVGYWlsZWQoKTsKQEAgLTIwNSwxOCArMjA2
LDE1IEBAIHZvaWQgU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OnN0b3BQcm9kdWNpbmdE
YXRhKCkKICAgICBtX2lzUnVubmluZyA9IGZhbHNlOwogfQogCi1SZXRhaW5QdHI8Q1ZQaXhlbEJ1
ZmZlclJlZj4gU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OmdlbmVyYXRlRnJhbWUoKQor
RGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6RGlzcGxheUZyYW1lVHlwZSBTY3JlZW5EaXNwbGF5
Q2FwdHVyZVNvdXJjZU1hYzo6Z2VuZXJhdGVGcmFtZSgpCiB7Ci0gICAgaWYgKCFtX2N1cnJlbnRG
cmFtZS5pb1N1cmZhY2UoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KICAgICBEaXNwbGF5
U3VyZmFjZSBjdXJyZW50RnJhbWU7CiAgICAgewogICAgICAgICBMb2NrSG9sZGVyIGxvY2sobV9j
dXJyZW50RnJhbWVNdXRleCk7CiAgICAgICAgIGN1cnJlbnRGcmFtZSA9IG1fY3VycmVudEZyYW1l
LmlvU3VyZmFjZSgpOwogICAgIH0KIAotICAgIHJldHVybiBwaXhlbEJ1ZmZlckZyb21JT1N1cmZh
Y2UoY3VycmVudEZyYW1lLmlvU3VyZmFjZSgpKTsKKyAgICByZXR1cm4gRGlzcGxheUNhcHR1cmVT
b3VyY2VDb2NvYTo6RGlzcGxheUZyYW1lVHlwZSB7IFJldGFpblB0cjxJT1N1cmZhY2VSZWY+IHsg
Y3VycmVudEZyYW1lLmlvU3VyZmFjZSgpIH0gfTsKIH0KIAogdm9pZCBTY3JlZW5EaXNwbGF5Q2Fw
dHVyZVNvdXJjZU1hYzo6c3RhcnREaXNwbGF5U3RyZWFtKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9XaW5kb3dEaXNwbGF5Q2FwdHVyZVNvdXJj
ZU1hYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1dpbmRvd0Rp
c3BsYXlDYXB0dXJlU291cmNlTWFjLmgKaW5kZXggMWM0ZDM3NjBmODhjZmY1ZmE3NGNkMjcwNjYw
M2U2OGExZDNkNmRkZi4uMmQxYTY2ZTAzMTJiYWRjYTg5ZDliY2YwYjgwNjZlZDQzMmRiMmQ1NiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1dpbmRv
d0Rpc3BsYXlDYXB0dXJlU291cmNlTWFjLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbWFjL1dpbmRvd0Rpc3BsYXlDYXB0dXJlU291cmNlTWFjLmgKQEAgLTQ5LDEx
ICs0OSwxMCBAQCBwcml2YXRlOgogICAgIFdpbmRvd0Rpc3BsYXlDYXB0dXJlU291cmNlTWFjKHVp
bnQzMl90LCBTdHJpbmcmJik7CiAgICAgdmlydHVhbCB+V2luZG93RGlzcGxheUNhcHR1cmVTb3Vy
Y2VNYWMoKSA9IGRlZmF1bHQ7CiAKLSAgICBSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gZ2Vu
ZXJhdGVGcmFtZSgpIGZpbmFsOworICAgIERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OkRpc3Bs
YXlGcmFtZVR5cGUgZ2VuZXJhdGVGcmFtZSgpIGZpbmFsOwogICAgIFJlYWx0aW1lTWVkaWFTb3Vy
Y2VTZXR0aW5nczo6RGlzcGxheVN1cmZhY2VUeXBlIHN1cmZhY2VUeXBlKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpEaXNwbGF5U3VyZmFjZVR5cGU6
OldpbmRvdzsgfQogCiAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IHdpbmRvd0ltYWdlKCk7Ci0g
ICAgUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJSZWY+IHBpeGVsQnVmZmVyRnJvbUNHSW1hZ2UoQ0dJ
bWFnZVJlZik7CiAKICAgICBJbnRTaXplIG1fd2luZG93U2l6ZTsKICAgICBDR1dpbmRvd0lEIG1f
d2luZG93SUQgeyAwIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9tYWMvV2luZG93RGlzcGxheUNhcHR1cmVTb3VyY2VNYWMubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvV2luZG93RGlzcGxheUNhcHR1cmVTb3VyY2VN
YWMubW0KaW5kZXggMWQ2YTE3Y2Q0MTM4ZmQxZDU2NzJiZjkzMjkzNzA0YmYxMDE0MTkyMy4uOWM1
ZDVkNDMxMmQ2ZDUzNjg0Yzg1ZjJhNzgwZDgzYjMyNjk1MTU4MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1dpbmRvd0Rpc3BsYXlDYXB0dXJlU291
cmNlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9X
aW5kb3dEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5tbQpAQCAtMTM5LDY5ICsxMzksOSBAQCBSZXRh
aW5QdHI8Q0dJbWFnZVJlZj4gV2luZG93RGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OndpbmRvd0lt
YWdlKCkKICAgICByZXR1cm4gaW1hZ2U7CiB9CiAKLVJldGFpblB0cjxDVlBpeGVsQnVmZmVyUmVm
PiBXaW5kb3dEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6Z2VuZXJhdGVGcmFtZSgpCitEaXNwbGF5
Q2FwdHVyZVNvdXJjZUNvY29hOjpEaXNwbGF5RnJhbWVUeXBlIFdpbmRvd0Rpc3BsYXlDYXB0dXJl
U291cmNlTWFjOjpnZW5lcmF0ZUZyYW1lKCkKIHsKLSAgICBhdXRvIGltYWdlID0gd2luZG93SW1h
Z2UoKTsKLSAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlm
IChtX2xhc3RJbWFnZSAmJiBtX2xhc3RQaXhlbEJ1ZmZlciAmJiBDRkVxdWFsKG1fbGFzdEltYWdl
LmdldCgpLCBpbWFnZS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBtX2xhc3RQaXhlbEJ1ZmZlci5n
ZXQoKTsKLQotICAgIG1fbGFzdEltYWdlID0gV1RGTW92ZShpbWFnZSk7Ci0gICAgcmV0dXJuIHBp
eGVsQnVmZmVyRnJvbUNHSW1hZ2UobV9sYXN0SW1hZ2UuZ2V0KCkpOwotfQotCi1SZXRhaW5QdHI8
Q1ZQaXhlbEJ1ZmZlclJlZj4gV2luZG93RGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OnBpeGVsQnVm
ZmVyRnJvbUNHSW1hZ2UoQ0dJbWFnZVJlZiBpbWFnZSkKLXsKLSAgICBzdGF0aWMgQ0dDb2xvclNw
YWNlUmVmIHNSR0JDb2xvclNwYWNlID0gc1JHQkNvbG9yU3BhY2VSZWYoKTsKLQotICAgIGF1dG8g
aW1hZ2VTaXplID0gSW50U2l6ZShDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpLCBDR0ltYWdlR2V0SGVp
Z2h0KGltYWdlKSk7Ci0gICAgaWYgKGltYWdlU2l6ZSAhPSBpbnRyaW5zaWNTaXplKCkpIHsKLSAg
ICAgICAgbV9idWZmZXJQb29sID0gbnVsbHB0cjsKLSAgICAgICAgbV9sYXN0SW1hZ2UgPSBudWxs
cHRyOwotICAgICAgICBtX2xhc3RQaXhlbEJ1ZmZlciA9IG51bGxwdHI7Ci0gICAgfQotCi0gICAg
aWYgKCFtX2J1ZmZlclBvb2wpIHsKLSAgICAgICAgQ1ZQaXhlbEJ1ZmZlclBvb2xSZWYgYnVmZmVy
UG9vbDsKLSAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIHNvdXJjZVBpeGVsQnVmZmVyT3B0aW9ucyA9
IChfX2JyaWRnZSBDRkRpY3Rpb25hcnlSZWYpIEB7Ci0gICAgICAgIChfX2JyaWRnZSBOU1N0cmlu
ZyAqKWtDVlBpeGVsQnVmZmVyUGl4ZWxGb3JtYXRUeXBlS2V5IDogQChrQ1ZQaXhlbEZvcm1hdFR5
cGVfMzJBUkdCKSwKLSAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxCdWZmZXJX
aWR0aEtleSA6IEAoaW1hZ2VTaXplLndpZHRoKCkpLAotICAgICAgICAoX19icmlkZ2UgTlNTdHJp
bmcgKilrQ1ZQaXhlbEJ1ZmZlckhlaWdodEtleSA6IEAoaW1hZ2VTaXplLmhlaWdodCgpKSwKLSNp
ZiBQTEFURk9STShJT1MpCi0gICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsRm9y
bWF0T3BlbkdMRVNDb21wYXRpYmlsaXR5IDogQChZRVMpLAotI2Vsc2UKLSAgICAgICAgKF9fYnJp
ZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxCdWZmZXJPcGVuR0xDb21wYXRpYmlsaXR5S2V5IDogQChZ
RVMpLAotI2VuZGlmCi0gICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsQnVmZmVy
SU9TdXJmYWNlUHJvcGVydGllc0tleSA6IEB7IC8qZW1wdHkgZGljdGlvbmFyeSovIH0KLSAgICB9
OwotCi0gICAgICAgIENGRGljdGlvbmFyeVJlZiBwaXhlbEJ1ZmZlclBvb2xPcHRpb25zID0gKF9f
YnJpZGdlIENGRGljdGlvbmFyeVJlZikgQHsKLSAgICAgICAgICAgIChfX2JyaWRnZSBOU1N0cmlu
ZyAqKWtDVlBpeGVsQnVmZmVyUG9vbE1pbmltdW1CdWZmZXJDb3VudEtleSA6IEAoMykKLSAgICAg
ICAgfTsKLQotICAgICAgICBDVlJldHVybiBzdGF0dXMgPSBDVlBpeGVsQnVmZmVyUG9vbENyZWF0
ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBwaXhlbEJ1ZmZlclBvb2xPcHRpb25zLCBzb3VyY2VQaXhl
bEJ1ZmZlck9wdGlvbnMsICZidWZmZXJQb29sKTsKLSAgICAgICAgaWYgKHN0YXR1cyAhPSBrQ1ZS
ZXR1cm5TdWNjZXNzKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgbV9i
dWZmZXJQb29sID0gYWRvcHRDRihidWZmZXJQb29sKTsKLSAgICAgICAgc2V0SW50cmluc2ljU2l6
ZShpbWFnZVNpemUpOwotICAgIH0KLQotICAgIENWUGl4ZWxCdWZmZXJSZWYgcGl4ZWxCdWZmZXI7
Ci0gICAgQ1ZSZXR1cm4gc3RhdHVzID0gQ1ZQaXhlbEJ1ZmZlclBvb2xDcmVhdGVQaXhlbEJ1ZmZl
cihudWxscHRyLCBtX2J1ZmZlclBvb2wuZ2V0KCksICZwaXhlbEJ1ZmZlcik7Ci0gICAgaWYgKHN0
YXR1cyAhPSBrQ1ZSZXR1cm5TdWNjZXNzKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IENWUGl4ZWxCdWZmZXJMb2NrQmFzZUFkZHJlc3MocGl4ZWxCdWZmZXIsIDApOwotICAgIHZvaWQq
IGRhdGEgPSBDVlBpeGVsQnVmZmVyR2V0QmFzZUFkZHJlc3MocGl4ZWxCdWZmZXIpOwotICAgIGF1
dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKGRhdGEsIGltYWdlU2l6
ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCksIDgsIENWUGl4ZWxCdWZmZXJHZXRCeXRlc1Bl
clJvdyhwaXhlbEJ1ZmZlciksIHNSR0JDb2xvclNwYWNlLCAoQ0dCaXRtYXBJbmZvKSBrQ0dJbWFn
ZUFscGhhTm9uZVNraXBGaXJzdCkpOwotICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0Lmdl
dCgpLCBDR1JlY3RNYWtlKDAsIDAsIENHSW1hZ2VHZXRXaWR0aChpbWFnZSksIENHSW1hZ2VHZXRI
ZWlnaHQoaW1hZ2UpKSwgaW1hZ2UpOwotICAgIENWUGl4ZWxCdWZmZXJVbmxvY2tCYXNlQWRkcmVz
cyhwaXhlbEJ1ZmZlciwgMCk7Ci0KLSAgICBtX2xhc3RQaXhlbEJ1ZmZlciA9IGFkb3B0Q0YocGl4
ZWxCdWZmZXIpOwotICAgIHJldHVybiBtX2xhc3RQaXhlbEJ1ZmZlcjsKKyAgICByZXR1cm4gRGlz
cGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6RGlzcGxheUZyYW1lVHlwZSB7IFJldGFpblB0cjxDR0lt
YWdlUmVmPiB7IHdpbmRvd0ltYWdlKCkgfSB9OwogfQogCiBzdGQ6Om9wdGlvbmFsPENhcHR1cmVE
ZXZpY2U+IFdpbmRvd0Rpc3BsYXlDYXB0dXJlU291cmNlTWFjOjp3aW5kb3dDYXB0dXJlRGV2aWNl
V2l0aFBlcnNpc3RlbnRJRChjb25zdCBTdHJpbmcmIGlkU3RyaW5nKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNwcApp
bmRleCA2MjI0N2VkNTZkZDBmZTcyYmUwMDM5MTQ0YjhmMDQ2ZjUwZDk2ZjRkLi43YWI3YTIxNTRl
M2FlMmE0MWM3ZDEyYzhjMDc0ZDIyMWY4Nzg3NmMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNwcApAQCAtMTI2
LDYgKzEyNiw3IEBAIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmIE1vY2tS
ZWFsdGltZVZpZGVvU291cmNlOjpjYXBhYmlsaXRpZXMoKQogICAgICAgICAgICAgY2FwYWJpbGl0
aWVzLmFkZEZhY2luZ01vZGUoV1RGOjpnZXQ8TW9ja0NhbWVyYVByb3BlcnRpZXM+KG1fZGV2aWNl
LnByb3BlcnRpZXMpLmZhY2luZ01vZGUpOwogICAgICAgICAgICAgY2FwYWJpbGl0aWVzLnNldERl
dmljZUlkKGhhc2hlZElkKCkpOwogICAgICAgICAgICAgdXBkYXRlQ2FwYWJpbGl0aWVzKGNhcGFi
aWxpdGllcyk7CisgICAgICAgICAgICBjYXBhYmlsaXRpZXMuc2V0RGV2aWNlSWQoaGFzaGVkSWQo
KSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBjYXBhYmlsaXRpZXMuc2V0V2lkdGgo
Q2FwYWJpbGl0eVZhbHVlT3JSYW5nZSg3MiwgMjg4MCkpOwogICAgICAgICAgICAgY2FwYWJpbGl0
aWVzLnNldEhlaWdodChDYXBhYmlsaXR5VmFsdWVPclJhbmdlKDQ1LCAxODAwKSk7CkBAIC0xNTks
MTQgKzE2MCwxNCBAQCBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MmIE1vY2tSZWFs
dGltZVZpZGVvU291cmNlOjpzZXR0aW5ncygpCiAgICAgICAgIHNldHRpbmdzLnNldEFzcGVjdFJh
dGlvKGFzcGVjdFJhdGlvKCkpOwogCiAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENv
bnN0cmFpbnRzIHN1cHBvcnRlZENvbnN0cmFpbnRzOwotICAgIHN1cHBvcnRlZENvbnN0cmFpbnRz
LnNldFN1cHBvcnRzRGV2aWNlSWQodHJ1ZSk7CiAgICAgc3VwcG9ydGVkQ29uc3RyYWludHMuc2V0
U3VwcG9ydHNGcmFtZVJhdGUodHJ1ZSk7CiAgICAgc3VwcG9ydGVkQ29uc3RyYWludHMuc2V0U3Vw
cG9ydHNXaWR0aCh0cnVlKTsKICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0hl
aWdodCh0cnVlKTsKICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0FzcGVjdFJh
dGlvKHRydWUpOwotICAgIGlmIChtb2NrQ2FtZXJhKCkpCisgICAgaWYgKG1vY2tDYW1lcmEoKSkg
eworICAgICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0RldmljZUlkKHRydWUp
OwogICAgICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0ZhY2luZ01vZGUodHJ1
ZSk7Ci0gICAgZWxzZSB7CisgICAgfSBlbHNlIHsKICAgICAgICAgc3VwcG9ydGVkQ29uc3RyYWlu
dHMuc2V0U3VwcG9ydHNEaXNwbGF5U3VyZmFjZSh0cnVlKTsKICAgICAgICAgc3VwcG9ydGVkQ29u
c3RyYWludHMuc2V0U3VwcG9ydHNMb2dpY2FsU3VyZmFjZSh0cnVlKTsKICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>352546</attachid>
            <date>2018-10-16 21:00:43 -0700</date>
            <delta_ts>2018-10-17 09:11:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-190519-20181016210042.patch</filename>
            <type>text/plain</type>
            <size>85920</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM3MjE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2RiYzlmZDA2YjBhZTJk
OWZmYWM1M2Q5NjMyNjg4OGIwN2VjMTg1My4uZjYxYjdkM2U2N2ZjZjA1YzYyMDg1ZWFlMDk4ZmU4
YmIyM2NhOWEyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgwIEBACisyMDE4LTEwLTE2ICBFcmlj
IENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNZWRpYVN0cmVh
bV0gQ29uc29saWRhdGUgYWxsIGltYWdlIGNvbnZlcnNpb24gYW5kIHJlc2l6aW5nIGludG8gb25l
IGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
OTA1MTkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQ1MjI0MzA3PgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gZnVuY3Rp
b25hbCBjaGFuZ2UuCisKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OiBBZGQgSW1hZ2VUcmFu
c2ZlclNlc3Npb25WVC4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6IERpdHRvLgorCisgICAgICAgICogcGxhdGZvcm0vTWVkaWFTYW1wbGUuaDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhU2FtcGxlOjp2aWRlb1BpeGVsRm9ybWF0IGNvbnN0KTogTmV3LgorCisg
ICAgICAgICogcGxhdGZvcm0vY29jb2EvVmlkZW9Ub29sYm94U29mdExpbmsuY3BwOiBBZGQgbmV3
IGtWVFBpeGVsVHJhbnNmZXJQcm9wZXJ0eSBrZXlzLgorICAgICAgICAqIHBsYXRmb3JtL2NvY29h
L1ZpZGVvVG9vbGJveFNvZnRMaW5rLmg6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMuaDoKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhU2FtcGxlQVZGT2JqQzo6Y3JlYXRlKTogUmVtb3ZlIHVuaW1wbGVtZW50ZWQgdmFyaWFu
dC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNh
bXBsZUFWRk9iakMubW06CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZUFWRk9iakM6OnZp
ZGVvUGl4ZWxGb3JtYXQgY29uc3QpOiBOZXcuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jdi9JbWFnZVRyYW5zZmVyU2Vzc2lvblZULmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jdi9JbWFnZVRyYW5zZmVyU2Vzc2lvblZULm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OkltYWdlVHJhbnNmZXJTZXNzaW9uVlQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6fkltYWdlVHJhbnNmZXJTZXNz
aW9uVlQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6c2V0U2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVhdGVQaXhl
bEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVh
dGVDTVNhbXBsZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpyb3VuZFVwVG9NYWNyb2Jsb2Nr
TXVsdGlwbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6aW9T
dXJmYWNlUGl4ZWxCdWZmZXJDcmVhdGlvbk9wdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlTWVkaWFTYW1wbGUpOgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJSZXNpemVyLmg6IFJlbW92ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJSZXNpemVyLm1tOiBSZW1vdmVkLgor
CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJlU291cmNl
Lmg6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJlU291
cmNlLm1tOgorICAgICAgICAoV2ViQ29yZTo6QVZWaWRlb0NhcHR1cmVTb3VyY2U6OnByZWZlcnNQ
cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6QVZWaWRlb0NhcHR1cmVTb3VyY2U6OmNhcHR1cmVP
dXRwdXREaWRPdXRwdXRTYW1wbGVCdWZmZXJGcm9tQ29ubmVjdGlvbik6IFJlbW92ZQorICAgICAg
ICB0aGUgcmVzaXppbmcgbG9naWMsIGl0IGlzIGhhbmRsZWQgYnkgdGhlIGJhc2UgY2xhc3MuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVTb3VyY2VD
b2NvYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpj
YXBhYmlsaXRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUNhcHR1cmVTb3VyY2VDb2Nv
YTo6c2V0dGluZ3NEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUNhcHR1cmVT
b3VyY2VDb2NvYTo6c2V0SW50cmluc2ljU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
Q2FwdHVyZVNvdXJjZUNvY29hOjplbWl0RnJhbWUpOiBSZW1vdmUgcmVzaXppbmcgbG9naWMsIGp1
c3QgdXNlIGEgdHJhbnNmZXIKKyAgICAgICAgc2Vzc2lvbiB0byBjcmVhdGUgYW4gaW1hZ2UgZnJv
bSB0aGUgY2FwdHVyZSBzb3VyY2UgbmF0aXZlIG91dHB1dCBmb3JtYXQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpzYW1wbGVCdWZmZXJGcm9tUGl4ZWxCdWZm
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6cm91bmRVcFRvTWFjcm9ibG9ja011bHRp
cGxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlDYXB0dXJlU291cmNlQ29j
b2E6OnBpeGVsQnVmZmVyRnJvbUlPU3VyZmFjZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL0Rpc3BsYXlDYXB0dXJlU291cmNlQ29jb2EuaDoKKworICAgICAg
ICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5o
OgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1Nv
dXJjZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFj
Ojp1cGRhdGVTYW1wbGVCdWZmZXIpOiBVc2UgaW1hZ2UgdHJhbnNmZXIgc2Vzc2lvbi4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjOjpDTVNhbXBsZUJ1ZmZlckZy
b21QaXhlbEJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpNb2NrUmVhbHRpbWVW
aWRlb1NvdXJjZU1hYzo6cGl4ZWxCdWZmZXJGcm9tQ0dJbWFnZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYzo6c2V0U2l6ZUFuZEZy
YW1lUmF0ZVdpdGhQcmVzZXQpOiBEZWxldGVkLgorCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL1NjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLmg6CisgICAgICAgICogcGxh
dGZvcm0vbWVkaWFzdHJlYW0vbWFjL1NjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6U2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OmNyZWF0ZURp
c3BsYXlTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6U2NyZWVuRGlzcGxheUNhcHR1cmVTb3Vy
Y2VNYWM6OmdlbmVyYXRlRnJhbWUpOiBSZXR1cm4gdGhlIElPU3VyZmFjZSBkaXJlY3RseS4KKwor
ICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9XaW5kb3dEaXNwbGF5Q2FwdHVyZVNv
dXJjZU1hYy5oOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9XaW5kb3dEaXNw
bGF5Q2FwdHVyZVNvdXJjZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OldpbmRvd0Rpc3BsYXlD
YXB0dXJlU291cmNlTWFjOjpnZW5lcmF0ZUZyYW1lKTogUmV0dXJuIHRoZSBDR0ltYWdlIGRpcmVj
dGx5LgorICAgICAgICAoV2ViQ29yZTo6V2luZG93RGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OnBp
eGVsQnVmZmVyRnJvbUNHSW1hZ2UpOiBEZWxldGVkLgorCisgICAgICAgICogcGxhdGZvcm0vbW9j
ay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNb2NrUmVh
bHRpbWVWaWRlb1NvdXJjZTo6Y2FwYWJpbGl0aWVzKTogT25seSB0aGUgY2FtZXJhIHN1cHBvcnRz
IGRldmljZSBJRC4KKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tSZWFsdGltZVZpZGVvU291cmNlOjpz
ZXR0aW5ncyk6IERpdHRvLgorCiAyMDE4LTEwLTE2ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBs
ZS5jb20+CiAKICAgICAgICAgUmVncmVzc2lvbihyMjM2Nzk1KSBDaGVjayBib3hlcyBhcmUgc29t
ZXRpbWVzIGNoZWNrZWQgd2hlbiB0aGV5IHNob3VsZCBub3QgYmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2Eu
dHh0CmluZGV4IGM3NmY0OTIzMWNiNWUwYmJkNWMwOWNmMmUyNGM0YzkxNTljZDllNTcuLjg0NTU1
YTZhNzlhYTA0MWUyYWJiNWE5YjA0ODk0ODlkODYyMDMwODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29h
LnR4dApAQCAtMzE0LDggKzMxNCw4IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5
ZXIubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYk1ldGFsTGF5ZXIubW0KIHBsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL1RleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EubW0KIAorcGxhdGZv
cm0vZ3JhcGhpY3MvY3YvSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5tbQogcGxhdGZvcm0vZ3JhcGhp
Y3MvY3YvUGl4ZWxCdWZmZXJDb25mb3JtZXJDVi5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2N2L1Bp
eGVsQnVmZmVyUmVzaXplci5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvVGV4dHVyZUNhY2hlQ1Yu
bW0KIHBsYXRmb3JtL2dyYXBoaWNzL2N2L1ZpZGVvVGV4dHVyZUNvcGllckNWLmNwcAogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
OTdiMzVhZmZmOTFhMzIzNTYzMDdjYTZhNzQ2MDA1OGQyMDJhMDViZi4uZTU2ZTdlYmVhNzA2ZTNi
YTQyZWUyMWQ4NmJkZGE1YTI5NzYxMTBlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTY5LDYgKzE2OSw3IEBACiAJCTA3OEU0
M0RBMUFCQjZDN0UwMDFDMkZBNiAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzhFNDNEODFBQkI2QzdF
MDAxQzJGQTYgLyogTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA3OEU0M0REMUFCQjZGNkYwMDFDMkZB
NiAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzhFNDNEQjFBQkI2RjZGMDAxQzJGQTYgLyogTWVk
aWFQbGF5YmFja1RhcmdldFBpY2tlck1hYy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTA3OEU0M0RFMUFCQjZGNkYwMDFDMkZBNiAvKiBNZWRpYVBs
YXliYWNrVGFyZ2V0UGlja2VyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDc4RTQzREMxQUJCNkY2RjAwMUMyRkE2IC8qIE1lZGlhUGxheWJhY2tU
YXJnZXRQaWNrZXJNYWMubW0gKi87IH07CisJCTA3OEVEMTkzMjE2RDA3OTUwMDc3NUIzMyAvKiBJ
bWFnZVRyYW5zZmVyU2Vzc2lvblZULmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwNzQ2RDMwQzIxNDZFQTM4MDAzRERGODQgLyogSW1hZ2VUcmFuc2ZlclNl
c3Npb25WVC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTA3OTIxNjU1MUFBNTYwQUEwMEEzQzA0OSAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0Q2xpZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzkyMTY1
MzFBQTU2MEFBMDBBM0MwNDkgLyogTWVkaWFQbGF5YmFja1RhcmdldENsaWVudC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA3OTQxNzkxMTY2RTg1
NUYwMDk0MTZDMiAvKiBJbmJhbmRUZXh0VHJhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDc5NDE3OEYxNjZFODU1RjAwOTQxNkMyIC8qIEluYmFu
ZFRleHRUcmFjay5jcHAgKi87IH07CiAJCTA3OTQxNzkyMTY2RTg1NUYwMDk0MTZDMiAvKiBJbmJh
bmRUZXh0VHJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDA3OTQxNzkwMTY2RTg1NUYwMDk0MTZDMiAvKiBJbmJhbmRUZXh0VHJhY2suaCAqLzsgfTsK
QEAgLTUzNjgsOCArNTM2OSw4IEBACiAJCTA3M0I4NzY1MUU0Mzg1OUQwMDcxQzBFQyAvKiBBdWRp
b1NhbXBsZURhdGFTb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXVk
aW9TYW1wbGVEYXRhU291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3NDRF
Q0VCMUUwQzRBRTUwMDBEMDk0NCAvKiBNb2NrUmVhbHRpbWVBdWRpb1NvdXJjZU1hYy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNb2NrUmVhbHRpbWVBdWRpb1NvdXJjZU1hYy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzQ0RUNFQzFFMEM0QUU1MDAwRDA5NDQg
LyogTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2VNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBNb2NrUmVhbHRpbWVBdWRpb1NvdXJjZU1hYy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDc0NkQzMEEyMTQ2RUEzNzAwM0RERjg0IC8qIFBpeGVsQnVm
ZmVyUmVzaXplci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBp
eGVsQnVmZmVyUmVzaXplci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDc0NkQz
MEMyMTQ2RUEzODAwM0RERjg0IC8qIFBpeGVsQnVmZmVyUmVzaXplci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQaXhlbEJ1ZmZlclJlc2l6ZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMDc0NkQzMEEyMTQ2RUEzNzAwM0RERjg0IC8qIEltYWdlVHJhbnNmZXJT
ZXNzaW9uVlQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBJbWFn
ZVRyYW5zZmVyU2Vzc2lvblZULm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwNzQ2
RDMwQzIxNDZFQTM4MDAzRERGODQgLyogSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZVRyYW5zZmVyU2Vzc2lvblZULmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3NEU4MkI4MThBNjlGMEUwMDdFRjU0QyAvKiBQbGF0
Zm9ybVRpbWVSYW5nZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UGxhdGZvcm1UaW1lUmFuZ2VzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDc0
RTgyQjkxOEE2OUYwRTAwN0VGNTRDIC8qIFBsYXRmb3JtVGltZVJhbmdlcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybVRpbWVSYW5nZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMDc1Mzg2MDAxNDQ4OUU5ODAwQjc4NDUyIC8qIENhY2hlZFRleHRU
cmFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWNoZWRUZXh0
VHJhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjUwOTUsMTAgKzI1MDk2
LDEwIEBACiAJCUNEOUQ4MjdDMUM3QkIyRUQwMDZGRjA2NiAvKiBjdiAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMDc0NkQzMEMyMTQ2RUEzODAwM0RERjg0
IC8qIEltYWdlVHJhbnNmZXJTZXNzaW9uVlQuaCAqLywKKwkJCQkwNzQ2RDMwQTIxNDZFQTM3MDAz
RERGODQgLyogSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5tbSAqLywKIAkJCQlDRDdEMzM0MTFDN0Ex
MjNGMDAwNDEyOTMgLyogUGl4ZWxCdWZmZXJDb25mb3JtZXJDVi5jcHAgKi8sCiAJCQkJQ0Q3RDMz
NDIxQzdBMTIzRjAwMDQxMjkzIC8qIFBpeGVsQnVmZmVyQ29uZm9ybWVyQ1YuaCAqLywKLQkJCQkw
NzQ2RDMwQzIxNDZFQTM4MDAzRERGODQgLyogUGl4ZWxCdWZmZXJSZXNpemVyLmggKi8sCi0JCQkJ
MDc0NkQzMEEyMTQ2RUEzNzAwM0RERjg0IC8qIFBpeGVsQnVmZmVyUmVzaXplci5tbSAqLywKIAkJ
CQlDRDlEODI3NDFDN0FFNTM1MDA2RkYwNjYgLyogVGV4dHVyZUNhY2hlQ1YuaCAqLywKIAkJCQlD
RDlEODI3MzFDN0FFNTM1MDA2RkYwNjYgLyogVGV4dHVyZUNhY2hlQ1YubW0gKi8sCiAJCQkJQ0Q5
RDgyNzcxQzdCOEVFMTAwNkZGMDY2IC8qIFZpZGVvVGV4dHVyZUNvcGllckNWLmNwcCAqLywKQEAg
LTI4NzIwLDYgKzI4NzIxLDcgQEAKIAkJCQk3QzE5M0JDMTFGNUUwRUVEMDA4OEYzRTYgLyogSW1h
Z2VTbW9vdGhpbmdRdWFsaXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQk1NTQ2NzU3QjFGRDIxMkE5
MDAzQjEwQjAgLyogSW1hZ2VTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTRCMzQ4MDk0MEVF
RjUwRDQwMEFDMUI0MSAvKiBJbWFnZVNvdXJjZUNHLmggaW4gSGVhZGVycyAqLywKKwkJCQkwNzhF
RDE5MzIxNkQwNzk1MDA3NzVCMzMgLyogSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTU1MENCNDIxRTk1NUUzQzAwMTExQUEwIC8qIEltYWdlVHlwZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTI2Rjc1NkIzMUIzQjY2RjcwMDA1REQ3OSAvKiBJbW11dGFibGVORkEu
aCBpbiBIZWFkZXJzICovLAogCQkJCTI2Rjc1NkI1MUIzQjY4RjIwMDA1REQ3OSAvKiBJbW11dGFi
bGVORkFOb2RlQnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9NZWRpYVNhbXBsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVk
aWFTYW1wbGUuaAppbmRleCBlNTgyZmRiNDlhY2VlZGEwZmMzNjhhMGNlYzU2MTg4MWFlODhjMzdi
Li4wNTBkOTM4OWQxOGUxMGY1ZDk3YmE0M2Q4NjBjMmExMzUyMDY2MmZlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZWRpYVNhbXBsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL01lZGlhU2FtcGxlLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkZs
b2F0U2l6ZS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlzLmg+CisjaW5j
bHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvTWVkaWFUaW1lLmg+CiAjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcu
aD4KQEAgLTEwMCw2ICsxMDEsMjAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3QgPSAwOwogfTsKIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3Jl
OjpNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbj4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1W
YWx1ZXM8CisgICAgICAgIFdlYkNvcmU6Ok1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uLAorICAg
ICAgICBXZWJDb3JlOjpNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6Tm9uZSwKKyAgICAgICAg
V2ViQ29yZTo6TWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246OlVwc2lkZURvd24sCisgICAgICAg
IFdlYkNvcmU6Ok1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpSaWdodCwKKyAgICAgICAgV2Vi
Q29yZTo6TWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246OkxlZnQKKyAgICA+OworfTsKKworfSAv
LyBuYW1lc3BhY2UgV1RGCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY29jb2EvQ29yZVZpZGVvU29mdExpbmsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY29jb2EvQ29yZVZpZGVvU29mdExpbmsuY3BwCmluZGV4IDhiYjM2MmJmMjY4MGQzNmQ2ZTNm
MGQ1YzMyMDUyMTM1YzFkZjVhOTguLmRjZmIxY2ZiNDdhMDNkMzczYTNhNjIyODc0ZTcwMzg1OTE2
Y2UwOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL0NvcmVWaWRl
b1NvZnRMaW5rLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9Db3JlVmlk
ZW9Tb2Z0TGluay5jcHAKQEAgLTkyLDQgKzkyLDYgQEAgU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9T
T1VSQ0UoV2ViQ29yZSwgQ29yZVZpZGVvLCBrQ1ZQaXhlbEJ1ZmZlckV4dGVuZGVkUGl4ZWxzQm8K
IFNPRlRfTElOS19DT05TVEFOVF9GT1JfU09VUkNFKFdlYkNvcmUsIENvcmVWaWRlbywga0NWUGl4
ZWxCdWZmZXJPcGVuR0xDb21wYXRpYmlsaXR5S2V5LCBDRlN0cmluZ1JlZikKICNlbmRpZgogCitT
T0ZUX0xJTktfRlVOQ1RJT05fRk9SX1NPVVJDRShXZWJDb3JlLCBDb3JlVmlkZW8sIENWUGl4ZWxC
dWZmZXJDcmVhdGVXaXRoSU9TdXJmYWNlLCBDVlJldHVybiwgKENGQWxsb2NhdG9yUmVmIGFsbG9j
YXRvciwgSU9TdXJmYWNlUmVmIHN1cmZhY2UsIENGRGljdGlvbmFyeVJlZiBwaXhlbEJ1ZmZlckF0
dHJpYnV0ZXMsIENWUGl4ZWxCdWZmZXJSZWYgKiBwaXhlbEJ1ZmZlck91dCksIChhbGxvY2F0b3Is
IHN1cmZhY2UsIHBpeGVsQnVmZmVyQXR0cmlidXRlcywgcGl4ZWxCdWZmZXJPdXQpKQorCiAjZW5k
aWYgLy8gSEFWRShDT1JFX1ZJREVPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY29jb2EvQ29yZVZpZGVvU29mdExpbmsuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nv
Y29hL0NvcmVWaWRlb1NvZnRMaW5rLmgKaW5kZXggOWVlYjQzNDYxODkzODQ1YTY4MjQ0ODhiNDM4
ZjU5NjlhYjJjOGIxMi4uNTI5NWU1OGM4NDcwZjUyZjJhZDg0M2IxNjdhMTc5NDc3MDhkNTRiOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvQ29yZVZpZGVvU29mdExp
bmsuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9Db3JlVmlkZW9Tb2Z0TGlu
ay5oCkBAIC0xNDcsNCArMTQ3LDcgQEAgU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9IRUFERVIoV2Vi
Q29yZSwgQ29yZVZpZGVvLCBrQ1ZQaXhlbEJ1ZmZlck9wZW5HTENvbXBhdGliaWwKICNkZWZpbmUg
a0NWUGl4ZWxCdWZmZXJPcGVuR0xDb21wYXRpYmlsaXR5S2V5IGdldF9Db3JlVmlkZW9fa0NWUGl4
ZWxCdWZmZXJPcGVuR0xDb21wYXRpYmlsaXR5S2V5KCkKICNlbmRpZgogCitTT0ZUX0xJTktfRlVO
Q1RJT05fRk9SX0hFQURFUihXZWJDb3JlLCBDb3JlVmlkZW8sIENWUGl4ZWxCdWZmZXJDcmVhdGVX
aXRoSU9TdXJmYWNlLCBDVlJldHVybiwgKENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciwgSU9TdXJm
YWNlUmVmIHN1cmZhY2UsIENGRGljdGlvbmFyeVJlZiBwaXhlbEJ1ZmZlckF0dHJpYnV0ZXMsIENW
UGl4ZWxCdWZmZXJSZWYgKiBwaXhlbEJ1ZmZlck91dCksIChhbGxvY2F0b3IsIHN1cmZhY2UsIHBp
eGVsQnVmZmVyQXR0cmlidXRlcywgcGl4ZWxCdWZmZXJPdXQpKQorI2RlZmluZSBDVlBpeGVsQnVm
ZmVyQ3JlYXRlV2l0aElPU3VyZmFjZSBzb2Z0TGlua19Db3JlVmlkZW9fQ1ZQaXhlbEJ1ZmZlckNy
ZWF0ZVdpdGhJT1N1cmZhY2UKKwogI2VuZGlmIC8vIEhBVkUoQ09SRV9WSURFTykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvVG9vbGJveFNvZnRMaW5rLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvVG9vbGJveFNvZnRMaW5rLmNw
cAppbmRleCA5ODdmYmNmNjE5NjZkMjRjZjA1Y2EwODQ2OTlkMDU4MGEyZjExMWRmLi5lYWY3OGI0
NWQwNTI4N2E3OTZlNmEyYTA1Y2QwZThmMGE4OTk0ZDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jb2NvYS9WaWRlb1Rvb2xib3hTb2Z0TGluay5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvVmlkZW9Ub29sYm94U29mdExpbmsuY3BwCkBAIC01OSw2
ICs1OSw5IEBAIFNPRlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNFKFdlYkNvcmUsIFZpZGVvVG9v
bGJveCwgVlRQaXhlbFRyYW5zZmVyU2Vzc2lvblRyYW5zCiBTT0ZUX0xJTktfRlVOQ1RJT05fRk9S
X1NPVVJDRShXZWJDb3JlLCBWaWRlb1Rvb2xib3gsIFZUU2Vzc2lvblNldFByb3BlcnR5LCBPU1N0
YXR1cywgKFZUU2Vzc2lvblJlZiBzZXNzaW9uLCBDRlN0cmluZ1JlZiBwcm9wZXJ0eUtleSwgQ0ZU
eXBlUmVmIHByb3BlcnR5VmFsdWUpLCAoc2Vzc2lvbiwgcHJvcGVydHlLZXksIHByb3BlcnR5VmFs
dWUpKQogU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9TT1VSQ0UoV2ViQ29yZSwgVmlkZW9Ub29sYm94
LCBrVlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXlfU2NhbGluZ01vZGUsIENGU3RyaW5nUmVmKQog
U09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9TT1VSQ0UoV2ViQ29yZSwgVmlkZW9Ub29sYm94LCBrVlRT
Y2FsaW5nTW9kZV9UcmltLCBDRlN0cmluZ1JlZikKK1NPRlRfTElOS19DT05TVEFOVF9GT1JfU09V
UkNFKFdlYkNvcmUsIFZpZGVvVG9vbGJveCwga1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5S2V5X0Vu
YWJsZUhhcmR3YXJlQWNjZWxlcmF0ZWRUcmFuc2ZlciwgQ0ZTdHJpbmdSZWYpCitTT0ZUX0xJTktf
Q09OU1RBTlRfRk9SX1NPVVJDRShXZWJDb3JlLCBWaWRlb1Rvb2xib3gsIGtWVFBpeGVsVHJhbnNm
ZXJQcm9wZXJ0eUtleV9FbmFibGVIaWdoU3BlZWRUcmFuc2ZlciwgQ0ZTdHJpbmdSZWYpCitTT0ZU
X0xJTktfQ09OU1RBTlRfRk9SX1NPVVJDRShXZWJDb3JlLCBWaWRlb1Rvb2xib3gsIGtWVFBpeGVs
VHJhbnNmZXJQcm9wZXJ0eUtleV9SZWFsVGltZSwgQ0ZTdHJpbmdSZWYpCiAKIFNPRlRfTElOS19D
T05TVEFOVF9NQVlfRkFJTF9GT1JfU09VUkNFKFdlYkNvcmUsIFZpZGVvVG9vbGJveCwga1ZUSEVW
Q0RlY29kZXJDYXBhYmlsaXR5X1N1cHBvcnRlZFByb2ZpbGVzLCBDRlN0cmluZ1JlZikKIFNPRlRf
TElOS19DT05TVEFOVF9NQVlfRkFJTF9GT1JfU09VUkNFKFdlYkNvcmUsIFZpZGVvVG9vbGJveCwg
a1ZUSEVWQ0RlY29kZXJDYXBhYmlsaXR5X1BlclByb2ZpbGVTdXBwb3J0LCBDRlN0cmluZ1JlZikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvVG9vbGJveFNv
ZnRMaW5rLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9WaWRlb1Rvb2xib3hTb2Z0
TGluay5oCmluZGV4IGYzMTliMTg4ZWQxNjA1ODA5NDc2MTJlYjM3Mjg2ZGUyMjMyNGUyNWQuLjA3
MWI3MTFlZDA0ZDNiODE0ODIyODkyYTE1MGQ3YWU1ZmRlNmY4NTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvVG9vbGJveFNvZnRMaW5rLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvVmlkZW9Ub29sYm94U29mdExpbmsuaApAQCAtODUs
NiArODUsMTIgQEAgU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9IRUFERVIoV2ViQ29yZSwgVmlkZW9U
b29sYm94LCBrVlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXkKICNkZWZpbmUga1ZUUGl4ZWxUcmFu
c2ZlclByb3BlcnR5S2V5X1NjYWxpbmdNb2RlIGdldF9WaWRlb1Rvb2xib3hfa1ZUUGl4ZWxUcmFu
c2ZlclByb3BlcnR5S2V5X1NjYWxpbmdNb2RlKCkKIFNPRlRfTElOS19DT05TVEFOVF9GT1JfSEVB
REVSKFdlYkNvcmUsIFZpZGVvVG9vbGJveCwga1ZUU2NhbGluZ01vZGVfVHJpbSwgQ0ZTdHJpbmdS
ZWYpCiAjZGVmaW5lIGtWVFNjYWxpbmdNb2RlX1RyaW0gZ2V0X1ZpZGVvVG9vbGJveF9rVlRTY2Fs
aW5nTW9kZV9UcmltKCkKK1NPRlRfTElOS19DT05TVEFOVF9GT1JfSEVBREVSKFdlYkNvcmUsIFZp
ZGVvVG9vbGJveCwga1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5S2V5X0VuYWJsZUhhcmR3YXJlQWNj
ZWxlcmF0ZWRUcmFuc2ZlciwgQ0ZTdHJpbmdSZWYpCisjZGVmaW5lIGtWVFBpeGVsVHJhbnNmZXJQ
cm9wZXJ0eUtleV9FbmFibGVIYXJkd2FyZUFjY2VsZXJhdGVkVHJhbnNmZXIgZ2V0X1ZpZGVvVG9v
bGJveF9rVlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXlfRW5hYmxlSGFyZHdhcmVBY2NlbGVyYXRl
ZFRyYW5zZmVyKCkKK1NPRlRfTElOS19DT05TVEFOVF9GT1JfSEVBREVSKFdlYkNvcmUsIFZpZGVv
VG9vbGJveCwga1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5S2V5X0VuYWJsZUhpZ2hTcGVlZFRyYW5z
ZmVyLCBDRlN0cmluZ1JlZikKKyNkZWZpbmUga1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5S2V5X0Vu
YWJsZUhpZ2hTcGVlZFRyYW5zZmVyIGdldF9WaWRlb1Rvb2xib3hfa1ZUUGl4ZWxUcmFuc2ZlclBy
b3BlcnR5S2V5X0VuYWJsZUhpZ2hTcGVlZFRyYW5zZmVyKCkKK1NPRlRfTElOS19DT05TVEFOVF9G
T1JfSEVBREVSKFdlYkNvcmUsIFZpZGVvVG9vbGJveCwga1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5
S2V5X1JlYWxUaW1lLCBDRlN0cmluZ1JlZikKKyNkZWZpbmUga1ZUUGl4ZWxUcmFuc2ZlclByb3Bl
cnR5S2V5X1JlYWxUaW1lIGdldF9WaWRlb1Rvb2xib3hfa1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5
S2V5X1JlYWxUaW1lKCkKIAogU09GVF9MSU5LX0NPTlNUQU5UX01BWV9GQUlMX0ZPUl9IRUFERVIo
V2ViQ29yZSwgVmlkZW9Ub29sYm94LCBrVlRIRVZDRGVjb2RlckNhcGFiaWxpdHlfU3VwcG9ydGVk
UHJvZmlsZXMsIENGU3RyaW5nUmVmKQogI2RlZmluZSBrVlRIRVZDRGVjb2RlckNhcGFiaWxpdHlf
U3VwcG9ydGVkUHJvZmlsZXMgZ2V0X1ZpZGVvVG9vbGJveF9rVlRIRVZDRGVjb2RlckNhcGFiaWxp
dHlfU3VwcG9ydGVkUHJvZmlsZXMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpDLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBs
ZUFWRk9iakMuaAppbmRleCBkNWE4MDZkZmUzM2U5N2MwYzFmMjhkMjExMGRmNTg4Zjk1NjgyNmFj
Li4wOTIzODgzZTViYzdlNDQ2NGIxMTZiOTJiYmZkMDhhNmUyNjNhNzJmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNh
bXBsZUFWRk9iakMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMuaApAQCAtMzEsMTMgKzMxLDEyIEBACiAj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAorCiBj
bGFzcyBNZWRpYVNhbXBsZUFWRk9iakMgOiBwdWJsaWMgTWVkaWFTYW1wbGUgewogcHVibGljOgog
ICAgIHN0YXRpYyBSZWY8TWVkaWFTYW1wbGVBVkZPYmpDPiBjcmVhdGUoQ01TYW1wbGVCdWZmZXJS
ZWYgc2FtcGxlLCBpbnQgdHJhY2tJRCkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBNZWRpYVNhbXBs
ZUFWRk9iakMoc2FtcGxlLCB0cmFja0lEKSk7IH0KICAgICBzdGF0aWMgUmVmPE1lZGlhU2FtcGxl
QVZGT2JqQz4gY3JlYXRlKENNU2FtcGxlQnVmZmVyUmVmIHNhbXBsZSwgQXRvbWljU3RyaW5nIHRy
YWNrSUQpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTWVkaWFTYW1wbGVBVkZPYmpDKHNhbXBsZSwg
dHJhY2tJRCkpOyB9CiAgICAgc3RhdGljIFJlZjxNZWRpYVNhbXBsZUFWRk9iakM+IGNyZWF0ZShD
TVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGUsIFZpZGVvUm90YXRpb24gcm90YXRpb24gPSBWaWRlb1Jv
dGF0aW9uOjpOb25lLCBib29sIG1pcnJvcmVkID0gZmFsc2UpIHsgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgTWVkaWFTYW1wbGVBVkZPYmpDKHNhbXBsZSwgcm90YXRpb24sIG1pcnJvcmVkKSk7IH0KLSAg
ICBzdGF0aWMgUmVmUHRyPE1lZGlhU2FtcGxlQVZGT2JqQz4gY3JlYXRlSW1hZ2VTYW1wbGUoUmVm
PEpTQzo6VWludDhDbGFtcGVkQXJyYXk+JiYsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVk
IGxvbmcgaGVpZ2h0KTsKICAgICBzdGF0aWMgUmVmUHRyPE1lZGlhU2FtcGxlQVZGT2JqQz4gY3Jl
YXRlSW1hZ2VTYW1wbGUoVmVjdG9yPHVpbnQ4X3Q+JiYsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVu
c2lnbmVkIGxvbmcgaGVpZ2h0KTsKIAogICAgIFJlZlB0cjxKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5
PiBnZXRSR0JBSW1hZ2VEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC02NSw2ICs2NCw3IEBAIHB1
YmxpYzoKIAogICAgIFZpZGVvUm90YXRpb24gdmlkZW9Sb3RhdGlvbigpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIG1fcm90YXRpb247IH0KICAgICBib29sIHZpZGVvTWlycm9yZWQoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBtX21pcnJvcmVkOyB9CisgICAgdWludDMyX3QgdmlkZW9QaXhlbEZv
cm1hdCgpIGNvbnN0OwogCiAgICAgQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlQnVmZmVyKCkgY29u
c3QgeyByZXR1cm4gbV9zYW1wbGUuZ2V0KCk7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpD
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
TWVkaWFTYW1wbGVBVkZPYmpDLm1tCmluZGV4IGMzYmNhNjEwOTA1NTRmODI4Yjg0ODM5YWQ0MDU0
OWE2MjdiZmU3NDAuLjY3YmI0YzZkZmUzMzA0OWRiZTE5MjI4YjUwZjdjYTg3NjcxNGM3ZWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL01lZGlhU2FtcGxlQVZGT2JqQy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMubW0KQEAgLTExMyw2
ICsxMTMsMTIgQEAgUGxhdGZvcm1TYW1wbGUgTWVkaWFTYW1wbGVBVkZPYmpDOjpwbGF0Zm9ybVNh
bXBsZSgpCiAgICAgcmV0dXJuIHNhbXBsZTsKIH0KIAordWludDMyX3QgTWVkaWFTYW1wbGVBVkZP
YmpDOjp2aWRlb1BpeGVsRm9ybWF0KCkgY29uc3QKK3sKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0g
c3RhdGljX2Nhc3Q8Q1ZQaXhlbEJ1ZmZlclJlZj4oQ01TYW1wbGVCdWZmZXJHZXRJbWFnZUJ1ZmZl
cihtX3NhbXBsZS5nZXQoKSkpOworICAgIHJldHVybiBDVlBpeGVsQnVmZmVyR2V0UGl4ZWxGb3Jt
YXRUeXBlKHBpeGVsQnVmZmVyKTsKK30KKwogc3RhdGljIGJvb2wgQ01TYW1wbGVCdWZmZXJJc1Jh
bmRvbUFjY2VzcyhDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGUpCiB7CiAgICAgQ0ZBcnJheVJlZiBh
dHRhY2htZW50cyA9IENNU2FtcGxlQnVmZmVyR2V0U2FtcGxlQXR0YWNobWVudHNBcnJheShzYW1w
bGUsIGZhbHNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2N2L0ltYWdlVHJhbnNmZXJTZXNzaW9uVlQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2N2L0ltYWdlVHJhbnNmZXJTZXNzaW9uVlQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ODE0M2JlNDdl
YjBiZTAxYmNhMzA4MGNhZWFjY2Y0ZDkwMzdiMTFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5oCkBA
IC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShWSURF
T1RPT0xCT1gpCisKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiTWVkaWFTYW1wbGVB
VkZPYmpjLmgiCisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCit0eXBlZGVmIHN0cnVjdCBD
R0ltYWdlICpDR0ltYWdlUmVmOwordHlwZWRlZiBzdHJ1Y3QgT3BhcXVlVlRQaXhlbFRyYW5zZmVy
U2Vzc2lvbiogVlRQaXhlbFRyYW5zZmVyU2Vzc2lvblJlZjsKK3R5cGVkZWYgc3RydWN0IF9fQ1ZC
dWZmZXIgKkNWUGl4ZWxCdWZmZXJSZWY7Cit0eXBlZGVmIHN0cnVjdCBfX0NWUGl4ZWxCdWZmZXJQ
b29sICpDVlBpeGVsQnVmZmVyUG9vbFJlZjsKK3R5cGVkZWYgc3RydWN0IF9fSU9TdXJmYWNlICpJ
T1N1cmZhY2VSZWY7Cit0eXBlZGVmIHN0cnVjdCBvcGFxdWVDTVNhbXBsZUJ1ZmZlciAqQ01TYW1w
bGVCdWZmZXJSZWY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VUcmFuc2Zl
clNlc3Npb25WVCB7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZVRy
YW5zZmVyU2Vzc2lvblZUPiBjcmVhdGUodWludDMyX3QgcGl4ZWxGb3JtYXQpCisgICAgeworICAg
ICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ+KG5ldyBJ
bWFnZVRyYW5zZmVyU2Vzc2lvblZUKHBpeGVsRm9ybWF0KSk7CisgICAgfQorCisgICAgUmVmUHRy
PE1lZGlhU2FtcGxlPiBjb252ZXJ0TWVkaWFTYW1wbGUoTWVkaWFTYW1wbGUmLCBjb25zdCBJbnRT
aXplJik7CisgICAgUmVmUHRyPE1lZGlhU2FtcGxlPiBjcmVhdGVNZWRpYVNhbXBsZShDR0ltYWdl
UmVmLCBjb25zdCBNZWRpYVRpbWUmLCBjb25zdCBJbnRTaXplJiwgTWVkaWFTYW1wbGU6OlZpZGVv
Um90YXRpb24gcm90YXRpb24gPSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6Tm9uZSwgYm9v
bCBtaXJyb3JlZCA9IGZhbHNlKTsKKyAgICBSZWZQdHI8TWVkaWFTYW1wbGU+IGNyZWF0ZU1lZGlh
U2FtcGxlKENNU2FtcGxlQnVmZmVyUmVmLCBjb25zdCBJbnRTaXplJiwgTWVkaWFTYW1wbGU6OlZp
ZGVvUm90YXRpb24gcm90YXRpb24gPSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6Tm9uZSwg
Ym9vbCBtaXJyb3JlZCA9IGZhbHNlKTsKKworI2lmIEhBVkUoSU9TVVJGQUNFKQorICAgIFJlZlB0
cjxNZWRpYVNhbXBsZT4gY3JlYXRlTWVkaWFTYW1wbGUoSU9TdXJmYWNlUmVmLCBjb25zdCBNZWRp
YVRpbWUmLCBjb25zdCBJbnRTaXplJiwgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb24gcm90YXRp
b24gPSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6Tm9uZSwgYm9vbCBtaXJyb3JlZCA9IGZh
bHNlKTsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlVHJhbnNm
ZXJTZXNzaW9uVlQodWludDMyX3QpOworCisjaWYgSEFWRShJT1NVUkZBQ0UpCisgICAgQ0ZEaWN0
aW9uYXJ5UmVmIGlvU3VyZmFjZVBpeGVsQnVmZmVyQ3JlYXRpb25PcHRpb25zKElPU3VyZmFjZVJl
Zik7CisgICAgUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBjcmVhdGVDTVNhbXBsZUJ1ZmZl
cihJT1N1cmZhY2VSZWYsIGNvbnN0IE1lZGlhVGltZSYsIGNvbnN0IEludFNpemUmKTsKKyAgICBS
ZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gY3JlYXRlUGl4ZWxCdWZmZXIoSU9TdXJmYWNlUmVm
LCBjb25zdCBJbnRTaXplJik7CisjZW5kaWYKKworICAgIFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZl
clJlZj4gY29udmVydENNU2FtcGxlQnVmZmVyKENNU2FtcGxlQnVmZmVyUmVmLCBjb25zdCBJbnRT
aXplJik7CisgICAgUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBjcmVhdGVDTVNhbXBsZUJ1
ZmZlcihDVlBpeGVsQnVmZmVyUmVmLCBjb25zdCBNZWRpYVRpbWUmLCBjb25zdCBJbnRTaXplJik7
CisgICAgUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBjcmVhdGVDTVNhbXBsZUJ1ZmZlcihD
R0ltYWdlUmVmLCBjb25zdCBNZWRpYVRpbWUmLCBjb25zdCBJbnRTaXplJik7CisKKyAgICBSZXRh
aW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gY29udmVydFBpeGVsQnVmZmVyKENWUGl4ZWxCdWZmZXJS
ZWYsIGNvbnN0IEludFNpemUmKTsKKyAgICBSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gY3Jl
YXRlUGl4ZWxCdWZmZXIoQ01TYW1wbGVCdWZmZXJSZWYsIGNvbnN0IEludFNpemUmKTsKKyAgICBS
ZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gY3JlYXRlUGl4ZWxCdWZmZXIoQ0dJbWFnZVJlZiwg
Y29uc3QgSW50U2l6ZSYpOworCisgICAgYm9vbCBzZXRTaXplKGNvbnN0IEludFNpemUmKTsKKwor
ICAgIFJldGFpblB0cjxWVFBpeGVsVHJhbnNmZXJTZXNzaW9uUmVmPiBtX3RyYW5zZmVyU2Vzc2lv
bjsKKyAgICBSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclBvb2xSZWY+IG1fb3V0cHV0QnVmZmVyUG9v
bDsKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBtX2lvU3VyZmFjZUJ1ZmZlckF0dHJp
YnV0ZXM7CisgICAgdWludDMyX3QgbV9waXhlbEZvcm1hdDsKKyAgICBJbnRTaXplIG1fc2l6ZTsK
K307CisKK30KKworI2VuZGlmIC8vIFVTRShWSURFT1RPT0xCT1gpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9JbWFnZVRyYW5zZmVyU2Vzc2lvblZULm1t
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvSW1hZ2VUcmFuc2ZlclNlc3Np
b25WVC5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5hYTdmY2NlNjNmYzE2ODEwNzM0MDJkMGY1MmUyNDc1NWFiOWE4
MDhmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y3YvSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5tbQpAQCAtMCwwICsxLDM4MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkltYWdlVHJhbnNmZXJTZXNzaW9uVlQu
aCIKKworI2lmIFVTRShWSURFT1RPT0xCT1gpCisKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBv
cnQgIk1lZGlhU2FtcGxlQVZGT2JqQy5oIgorI2ltcG9ydCA8Q29yZU1lZGlhL0NNRm9ybWF0RGVz
Y3JpcHRpb24uaD4KKyNpbXBvcnQgPENvcmVNZWRpYS9DTVNhbXBsZUJ1ZmZlci5oPgorI2ltcG9y
dCA8cGFsL2NmL0NvcmVNZWRpYVNvZnRMaW5rLmg+CisKKyNpZiBIQVZFKElPU1VSRkFDRSkKKyNp
bmNsdWRlIDxwYWwvc3BpL2NvY29hL0lPU3VyZmFjZVNQSS5oPgorI2VuZGlmCisKKyNpbXBvcnQg
IkNvcmVWaWRlb1NvZnRMaW5rLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK3VzaW5nIG5hbWVz
cGFjZSBQQUw7CisKK3N0YXRpYyBpbmxpbmUgQ0ZTdHJpbmdSZWYgY3ZQaXhlbEZvcm1hdE9wZW5H
TEtleSgpCit7CisjaWYgUExBVEZPUk0oSU9TKSAmJiAhUExBVEZPUk0oSU9TTUFDKQorICAgIHJl
dHVybiBrQ1ZQaXhlbEZvcm1hdE9wZW5HTEVTQ29tcGF0aWJpbGl0eTsKKyNlbHNlCisgICAgcmV0
dXJuIGtDVlBpeGVsQnVmZmVyT3BlbkdMQ29tcGF0aWJpbGl0eUtleTsKKyNlbmRpZgorfQorCitJ
bWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpJbWFnZVRyYW5zZmVyU2Vzc2lvblZUKHVpbnQzMl90IHBp
eGVsRm9ybWF0KQoreworICAgIFZUUGl4ZWxUcmFuc2ZlclNlc3Npb25SZWYgdHJhbnNmZXJTZXNz
aW9uOworICAgIFZUUGl4ZWxUcmFuc2ZlclNlc3Npb25DcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVs
dCwgJnRyYW5zZmVyU2Vzc2lvbik7CisgICAgQVNTRVJUKHRyYW5zZmVyU2Vzc2lvbik7CisgICAg
bV90cmFuc2ZlclNlc3Npb24gPSBhZG9wdENGKHRyYW5zZmVyU2Vzc2lvbik7CisKKyAgICBWVFNl
c3Npb25TZXRQcm9wZXJ0eSh0cmFuc2ZlclNlc3Npb24sIGtWVFBpeGVsVHJhbnNmZXJQcm9wZXJ0
eUtleV9TY2FsaW5nTW9kZSwga1ZUU2NhbGluZ01vZGVfVHJpbSk7CisgICAgVlRTZXNzaW9uU2V0
UHJvcGVydHkodHJhbnNmZXJTZXNzaW9uLCBrVlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXlfRW5h
YmxlSGlnaFNwZWVkVHJhbnNmZXIsIEAoWUVTKSk7CisgICAgVlRTZXNzaW9uU2V0UHJvcGVydHko
dHJhbnNmZXJTZXNzaW9uLCBrVlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXlfUmVhbFRpbWUsIEAo
WUVTKSk7CisjaWYgUExBVEZPUk0oSU9TKSAmJiAhUExBVEZPUk0oSU9TTUFDKQorICAgIFZUU2Vz
c2lvblNldFByb3BlcnR5KHRyYW5zZmVyU2Vzc2lvbiwga1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5
S2V5X0VuYWJsZUhhcmR3YXJlQWNjZWxlcmF0ZWRUcmFuc2ZlciwgQChZRVMpKTsKKyNlbmRpZgor
CisgICAgbV9waXhlbEZvcm1hdCA9IHBpeGVsRm9ybWF0OworfQorCitib29sIEltYWdlVHJhbnNm
ZXJTZXNzaW9uVlQ6OnNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAobV9z
aXplID09IHNpemUgJiYgbV9vdXRwdXRCdWZmZXJQb29sKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIENGRGljdGlvbmFyeVJlZiBwaXhlbEJ1ZmZlck9wdGlvbnMgPSAoX19icmlkZ2UgQ0ZE
aWN0aW9uYXJ5UmVmKSBAeworICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ1ZQaXhlbEJ1
ZmZlcldpZHRoS2V5IDpAKHNpemUud2lkdGgoKSksCisgICAgICAgIChfX2JyaWRnZSBOU1N0cmlu
ZyAqKWtDVlBpeGVsQnVmZmVySGVpZ2h0S2V5OkAoc2l6ZS5oZWlnaHQoKSksCisgICAgICAgIChf
X2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsQnVmZmVyUGl4ZWxGb3JtYXRUeXBlS2V5OkAobV9w
aXhlbEZvcm1hdCksCisgICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWN2UGl4ZWxGb3JtYXRP
cGVuR0xLZXkoKSA6IEAoWUVTKSwKKyAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4
ZWxCdWZmZXJJT1N1cmZhY2VQcm9wZXJ0aWVzS2V5IDogQHsgLyplbXB0eSBkaWN0aW9uYXJ5Ki8g
fSwKKyAgICB9OworCisgICAgQ0ZEaWN0aW9uYXJ5UmVmIHBpeGVsQnVmZmVyUG9vbE9wdGlvbnMg
PSAoX19icmlkZ2UgQ0ZEaWN0aW9uYXJ5UmVmKSBAeworICAgICAgICAoX19icmlkZ2UgTlNTdHJp
bmcgKilrQ1ZQaXhlbEJ1ZmZlclBvb2xNaW5pbXVtQnVmZmVyQ291bnRLZXkgOiBAKDYpCisgICAg
fTsKKworICAgIENWUGl4ZWxCdWZmZXJQb29sUmVmIGJ1ZmZlclBvb2w7CisgICAgYXV0byBzdGF0
dXMgPSBDVlBpeGVsQnVmZmVyUG9vbENyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBwaXhlbEJ1
ZmZlclBvb2xPcHRpb25zLCBwaXhlbEJ1ZmZlck9wdGlvbnMsICZidWZmZXJQb29sKTsKKyAgICBB
U1NFUlQoIXN0YXR1cyk7CisgICAgaWYgKHN0YXR1cyAhPSBrQ1ZSZXR1cm5TdWNjZXNzKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX291dHB1dEJ1ZmZlclBvb2wgPSBhZG9wdENGKGJ1
ZmZlclBvb2wpOworICAgIG1fc2l6ZSA9IHNpemU7CisgICAgbV9pb1N1cmZhY2VCdWZmZXJBdHRy
aWJ1dGVzID0gbnVsbHB0cjsKKworICAgIHJldHVybiB0cnVlOworfQorCitSZXRhaW5QdHI8Q1ZQ
aXhlbEJ1ZmZlclJlZj4gSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y29udmVydFBpeGVsQnVmZmVy
KENWUGl4ZWxCdWZmZXJSZWYgc291cmNlQnVmZmVyLCBjb25zdCBJbnRTaXplJiBzaXplKQorewor
ICAgIGlmIChzb3VyY2VCdWZmZXIgJiYgbV9zaXplID09IEludFNpemUoQ1ZQaXhlbEJ1ZmZlckdl
dFdpZHRoKHNvdXJjZUJ1ZmZlciksIENWUGl4ZWxCdWZmZXJHZXRIZWlnaHQoc291cmNlQnVmZmVy
KSkgJiYgbV9waXhlbEZvcm1hdCA9PSBDVlBpeGVsQnVmZmVyR2V0UGl4ZWxGb3JtYXRUeXBlKHNv
dXJjZUJ1ZmZlcikpCisgICAgICAgIHJldHVybiByZXRhaW5QdHIoc291cmNlQnVmZmVyKTsKKwor
ICAgIGlmICghc291cmNlQnVmZmVyIHx8ICFzZXRTaXplKHNpemUpKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIENWUGl4ZWxCdWZmZXJSZWYgb3V0cHV0QnVmZmVyID0gbnVsbHB0cjsK
KyAgICBhdXRvIHN0YXR1cyA9IENWUGl4ZWxCdWZmZXJQb29sQ3JlYXRlUGl4ZWxCdWZmZXIoa0NG
QWxsb2NhdG9yRGVmYXVsdCwgbV9vdXRwdXRCdWZmZXJQb29sLmdldCgpLCAmb3V0cHV0QnVmZmVy
KTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhLCAiSW1hZ2VU
cmFuc2ZlclNlc3Npb25WVDo6Y29udmVydFBpeGVsQnVmZmVyLCBDVlBpeGVsQnVmZmVyUG9vbENy
ZWF0ZVBpeGVsQnVmZmVyIGZhaWxlZCB3aXRoIGVycm9yICVkIiwgc3RhdGljX2Nhc3Q8aW50Pihz
dGF0dXMpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIGF1dG8gcmVzdWx0
ID0gYWRvcHRDRihvdXRwdXRCdWZmZXIpOworCisgICAgYXV0byBlcnIgPSBWVFBpeGVsVHJhbnNm
ZXJTZXNzaW9uVHJhbnNmZXJJbWFnZShtX3RyYW5zZmVyU2Vzc2lvbi5nZXQoKSwgc291cmNlQnVm
ZmVyLCBvdXRwdXRCdWZmZXIpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgUkVMRUFTRV9MT0co
TWVkaWEsICJJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjb252ZXJ0UGl4ZWxCdWZmZXIsIFZUUGl4
ZWxUcmFuc2ZlclNlc3Npb25UcmFuc2ZlckltYWdlIGZhaWxlZCB3aXRoIGVycm9yICVkIiwgc3Rh
dGljX2Nhc3Q8aW50PihlcnIpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJSZWY+IEltYWdl
VHJhbnNmZXJTZXNzaW9uVlQ6OmNyZWF0ZVBpeGVsQnVmZmVyKENNU2FtcGxlQnVmZmVyUmVmIHNv
dXJjZUJ1ZmZlciwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBhdXRvIGNvbnZlcnRlZFBp
eGVsQnVmZmVyID0gY29udmVydFBpeGVsQnVmZmVyKENNU2FtcGxlQnVmZmVyR2V0SW1hZ2VCdWZm
ZXIoc291cmNlQnVmZmVyKSwgc2l6ZSk7CisgICAgaWYgKCFjb252ZXJ0ZWRQaXhlbEJ1ZmZlcikK
KyAgICAgICAgUkVMRUFTRV9MT0coTWVkaWEsICJJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVh
dGVQaXhlbEJ1ZmZlcjogQ01TYW1wbGVCdWZmZXJHZXRJbWFnZUJ1ZmZlciByZXR1cm5lZCBudWxs
cHRyIik7CisKKyAgICByZXR1cm4gY29udmVydGVkUGl4ZWxCdWZmZXI7Cit9CisKK1JldGFpblB0
cjxDTVNhbXBsZUJ1ZmZlclJlZj4gSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y29udmVydENNU2Ft
cGxlQnVmZmVyKENNU2FtcGxlQnVmZmVyUmVmIHNvdXJjZUJ1ZmZlciwgY29uc3QgSW50U2l6ZSYg
c2l6ZSkKK3sKKyAgICBpZiAoIXNvdXJjZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBhdXRvIGRlc2NyaXB0aW9uID0gQ01TYW1wbGVCdWZmZXJHZXRGb3JtYXREZXNjcmlw
dGlvbihzb3VyY2VCdWZmZXIpOworICAgIGF1dG8gc291cmNlU2l6ZSA9IEZsb2F0U2l6ZShDTVZp
ZGVvRm9ybWF0RGVzY3JpcHRpb25HZXRQcmVzZW50YXRpb25EaW1lbnNpb25zKGRlc2NyaXB0aW9u
LCB0cnVlLCB0cnVlKSk7CisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IHN0YXRpY19jYXN0PENWUGl4
ZWxCdWZmZXJSZWY+KENNU2FtcGxlQnVmZmVyR2V0SW1hZ2VCdWZmZXIoc291cmNlQnVmZmVyKSk7
CisgICAgaWYgKHNpemUgPT0gcm91bmRlZEludFNpemUoc291cmNlU2l6ZSkgJiYgbV9waXhlbEZv
cm1hdCA9PSBDVlBpeGVsQnVmZmVyR2V0UGl4ZWxGb3JtYXRUeXBlKHBpeGVsQnVmZmVyKSkKKyAg
ICAgICAgcmV0dXJuIHJldGFpblB0cihzb3VyY2VCdWZmZXIpOworCisgICAgaWYgKCFzZXRTaXpl
KHNpemUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gY29udmVydGVkUGl4
ZWxCdWZmZXIgPSBjcmVhdGVQaXhlbEJ1ZmZlcihzb3VyY2VCdWZmZXIsIHNpemUpOworICAgIGlm
ICghY29udmVydGVkUGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
Q01JdGVtQ291bnQgaXRlbUNvdW50ID0gMDsKKyAgICBhdXRvIHN0YXR1cyA9IENNU2FtcGxlQnVm
ZmVyR2V0U2FtcGxlVGltaW5nSW5mb0FycmF5KHNvdXJjZUJ1ZmZlciwgMSwgbnVsbHB0ciwgJml0
ZW1Db3VudCk7CisgICAgaWYgKHN0YXR1cyAhPSBub0VycikgeworICAgICAgICBSRUxFQVNFX0xP
RyhNZWRpYSwgIkltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNvbnZlcnRDTVNhbXBsZUJ1ZmZlcjog
Q01TYW1wbGVCdWZmZXJHZXRTYW1wbGVUaW1pbmdJbmZvQXJyYXkgZmFpbGVkIHdpdGggZXJyb3Ig
Y29kZTogJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICB9CisgICAgVmVjdG9yPENNU2FtcGxlVGltaW5nSW5mbz4gdGltaW5nSW5mb0Fy
cmF5OworICAgIENNU2FtcGxlVGltaW5nSW5mbyogdGltZWluZ0luZm9QdHIgPSBudWxscHRyOwor
ICAgIGlmIChpdGVtQ291bnQpIHsKKyAgICAgICAgdGltaW5nSW5mb0FycmF5Lmdyb3coaXRlbUNv
dW50KTsKKyAgICAgICAgc3RhdHVzID0gQ01TYW1wbGVCdWZmZXJHZXRTYW1wbGVUaW1pbmdJbmZv
QXJyYXkoc291cmNlQnVmZmVyLCBpdGVtQ291bnQsIHRpbWluZ0luZm9BcnJheS5kYXRhKCksIG51
bGxwdHIpOworICAgICAgICBpZiAoc3RhdHVzICE9IG5vRXJyKSB7CisgICAgICAgICAgICBSRUxF
QVNFX0xPRyhNZWRpYSwgIkltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNvbnZlcnRDTVNhbXBsZUJ1
ZmZlcjogQ01TYW1wbGVCdWZmZXJHZXRTYW1wbGVUaW1pbmdJbmZvQXJyYXkgZmFpbGVkIHdpdGgg
ZXJyb3IgY29kZTogJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOworICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgdGltZWluZ0luZm9QdHIgPSB0aW1p
bmdJbmZvQXJyYXkuZGF0YSgpOworICAgIH0KKworICAgIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlv
blJlZiBmb3JtYXREZXNjcmlwdGlvbiA9IG51bGxwdHI7CisgICAgc3RhdHVzID0gQ01WaWRlb0Zv
cm1hdERlc2NyaXB0aW9uQ3JlYXRlRm9ySW1hZ2VCdWZmZXIoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
Y29udmVydGVkUGl4ZWxCdWZmZXIuZ2V0KCksICZmb3JtYXREZXNjcmlwdGlvbik7CisgICAgaWYg
KHN0YXR1cyAhPSBub0VycikgeworICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIkltYWdlVHJh
bnNmZXJTZXNzaW9uVlQ6OmNvbnZlcnRDTVNhbXBsZUJ1ZmZlcjogQ01WaWRlb0Zvcm1hdERlc2Ny
aXB0aW9uQ3JlYXRlRm9ySW1hZ2VCdWZmZXIgcmV0dXJuZWQ6ICVkIiwgc3RhdGljX2Nhc3Q8aW50
PihzdGF0dXMpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgQ01TYW1w
bGVCdWZmZXJSZWYgcmVzaXplZFNhbXBsZUJ1ZmZlcjsKKyAgICBzdGF0dXMgPSBDTVNhbXBsZUJ1
ZmZlckNyZWF0ZVJlYWR5V2l0aEltYWdlQnVmZmVyKGtDRkFsbG9jYXRvckRlZmF1bHQsIGNvbnZl
cnRlZFBpeGVsQnVmZmVyLmdldCgpLCBmb3JtYXREZXNjcmlwdGlvbiwgdGltZWluZ0luZm9QdHIs
ICZyZXNpemVkU2FtcGxlQnVmZmVyKTsKKyAgICBDRlJlbGVhc2UoZm9ybWF0RGVzY3JpcHRpb24p
OworICAgIGlmIChzdGF0dXMgIT0gbm9FcnIpIHsKKyAgICAgICAgUkVMRUFTRV9MT0coTWVkaWEs
ICJJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjb252ZXJ0Q01TYW1wbGVCdWZmZXI6IGZhaWxlZCB0
byBjcmVhdGUgQ01TYW1wbGVCdWZmZXIgd2l0aCBlcnJvciBjb2RlOiAlZCIsIHN0YXRpY19jYXN0
PGludD4oc3RhdHVzKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHJl
dHVybiBhZG9wdENGKHJlc2l6ZWRTYW1wbGVCdWZmZXIpOworfQorCitSZXRhaW5QdHI8Q1ZQaXhl
bEJ1ZmZlclJlZj4gSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlUGl4ZWxCdWZmZXIoQ0dJ
bWFnZVJlZiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAoIWltYWdlIHx8
ICFzZXRTaXplKHNpemUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIENWUGl4ZWxC
dWZmZXJSZWYgcmdiQnVmZmVyOworICAgIGF1dG8gaW1hZ2VTaXplID0gSW50U2l6ZShDR0ltYWdl
R2V0V2lkdGgoaW1hZ2UpLCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKSk7CisgICAgYXV0byBzdGF0
dXMgPSBDVlBpeGVsQnVmZmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGltYWdlU2l6ZS53
aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCksIGtDVlBpeGVsRm9ybWF0VHlwZV8zMkFSR0IsIG51
bGxwdHIsICZyZ2JCdWZmZXIpOworICAgIGlmIChzdGF0dXMgIT0ga0NWUmV0dXJuU3VjY2Vzcykg
eworICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIkltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNy
ZWF0ZVBpeGVsQnVmZmVyOiBDVlBpeGVsQnVmZmVyQ3JlYXRlIGZhaWxlZCB3aXRoIGVycm9yIGNv
ZGU6ICVkIiwgc3RhdGljX2Nhc3Q8aW50PihzdGF0dXMpKTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorCisgICAgQ1ZQaXhlbEJ1ZmZlckxvY2tCYXNlQWRkcmVzcyhyZ2JCdWZmZXIs
IDApOworICAgIHZvaWQqIGRhdGEgPSBDVlBpeGVsQnVmZmVyR2V0QmFzZUFkZHJlc3MocmdiQnVm
ZmVyKTsKKyAgICBhdXRvIHJldGFpbmVkUkdCQnVmZmVyID0gYWRvcHRDRihyZ2JCdWZmZXIpOwor
ICAgIGF1dG8gY29udGV4dCA9IENHQml0bWFwQ29udGV4dENyZWF0ZShkYXRhLCBpbWFnZVNpemUu
d2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpLCA4LCBDVlBpeGVsQnVmZmVyR2V0Qnl0ZXNQZXJS
b3cocmdiQnVmZmVyKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwgKENHQml0bWFwSW5mbykga0NHSW1h
Z2VBbHBoYU5vbmVTa2lwRmlyc3QpOworICAgIGlmICghY29udGV4dCkgeworICAgICAgICBSRUxF
QVNFX0xPRyhNZWRpYSwgIkltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNyZWF0ZVBpeGVsQnVmZmVy
OiBDR0JpdG1hcENvbnRleHRDcmVhdGUgcmV0dXJuZWQgbnVsbHB0ciIpOworICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBhdXRvIHJldGFpbmVkQ29udGV4dCA9IGFkb3B0Q0Yo
Y29udGV4dCk7CisgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQsIENHUmVjdE1ha2UoMCwg
MCwgaW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSksIGltYWdlKTsKKyAgICBD
VlBpeGVsQnVmZmVyVW5sb2NrQmFzZUFkZHJlc3MocmdiQnVmZmVyLCAwKTsKKworICAgIHJldHVy
biBjb252ZXJ0UGl4ZWxCdWZmZXIocmdiQnVmZmVyLCBzaXplKTsKK30KKworUmV0YWluUHRyPENN
U2FtcGxlQnVmZmVyUmVmPiBJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVhdGVDTVNhbXBsZUJ1
ZmZlcihDVlBpeGVsQnVmZmVyUmVmIHNvdXJjZUJ1ZmZlciwgY29uc3QgTWVkaWFUaW1lJiBzYW1w
bGVUaW1lLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIGlmICghc291cmNlQnVmZmVyIHx8
ICFzZXRTaXplKHNpemUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gYnVm
ZmVyU2l6ZSA9IEludFNpemUoQ1ZQaXhlbEJ1ZmZlckdldFdpZHRoKHNvdXJjZUJ1ZmZlciksIENW
UGl4ZWxCdWZmZXJHZXRIZWlnaHQoc291cmNlQnVmZmVyKSk7CisgICAgUmV0YWluUHRyPENWUGl4
ZWxCdWZmZXJSZWY+IGlucHV0QnVmZmVyID0gc291cmNlQnVmZmVyOworICAgIGlmIChidWZmZXJT
aXplICE9IG1fc2l6ZSB8fCBtX3BpeGVsRm9ybWF0ICE9IENWUGl4ZWxCdWZmZXJHZXRQaXhlbEZv
cm1hdFR5cGUoc291cmNlQnVmZmVyKSkgeworICAgICAgICBpbnB1dEJ1ZmZlciA9IGNvbnZlcnRQ
aXhlbEJ1ZmZlcihzb3VyY2VCdWZmZXIsIG1fc2l6ZSk7CisgICAgICAgIGlmICghaW5wdXRCdWZm
ZXIpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBDTVZpZGVvRm9y
bWF0RGVzY3JpcHRpb25SZWYgZm9ybWF0RGVzY3JpcHRpb24gPSBudWxscHRyOworICAgIGF1dG8g
c3RhdHVzID0gQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uQ3JlYXRlRm9ySW1hZ2VCdWZmZXIoa0NG
QWxsb2NhdG9yRGVmYXVsdCwgKENWSW1hZ2VCdWZmZXJSZWYpaW5wdXRCdWZmZXIuZ2V0KCksICZm
b3JtYXREZXNjcmlwdGlvbik7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICBSRUxFQVNFX0xP
RyhNZWRpYSwgIkltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNvbnZlcnRQaXhlbEJ1ZmZlcjogZmFp
bGVkIHRvIGluaXRpYWxpemUgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uIHdpdGggZXJyb3IgY29k
ZTogJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9CisKKyAgICBDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGVCdWZmZXI7CisgICAgYXV0
byBjbVRpbWUgPSB0b0NNVGltZShzYW1wbGVUaW1lKTsKKyAgICBDTVNhbXBsZVRpbWluZ0luZm8g
dGltaW5nSW5mbyA9IHsga0NNVGltZUludmFsaWQsIGNtVGltZSwgY21UaW1lIH07CisgICAgc3Rh
dHVzID0gQ01TYW1wbGVCdWZmZXJDcmVhdGVSZWFkeVdpdGhJbWFnZUJ1ZmZlcihrQ0ZBbGxvY2F0
b3JEZWZhdWx0LCAoQ1ZJbWFnZUJ1ZmZlclJlZilpbnB1dEJ1ZmZlci5nZXQoKSwgZm9ybWF0RGVz
Y3JpcHRpb24sICZ0aW1pbmdJbmZvLCAmc2FtcGxlQnVmZmVyKTsKKyAgICBDRlJlbGVhc2UoZm9y
bWF0RGVzY3JpcHRpb24pOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgUkVMRUFTRV9MT0co
TWVkaWEsICJJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjb252ZXJ0UGl4ZWxCdWZmZXI6IGZhaWxl
ZCB0byBpbml0aWFsaXplIENNU2FtcGxlQnVmZmVyIHdpdGggZXJyb3IgY29kZTogJWQiLCBzdGF0
aWNfY2FzdDxpbnQ+KHN0YXR1cykpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisK
KyAgICByZXR1cm4gYWRvcHRDRihzYW1wbGVCdWZmZXIpOworfQorCitSZXRhaW5QdHI8Q01TYW1w
bGVCdWZmZXJSZWY+IEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNyZWF0ZUNNU2FtcGxlQnVmZmVy
KENHSW1hZ2VSZWYgaW1hZ2UsIGNvbnN0IE1lZGlhVGltZSYgc2FtcGxlVGltZSwgY29uc3QgSW50
U2l6ZSYgc2l6ZSkKK3sKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gY3JlYXRlUGl4ZWxCdWZmZXIo
aW1hZ2UsIHNpemUpOworICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgcmV0dXJuIGNyZWF0ZUNNU2FtcGxlQnVmZmVyKHBpeGVsQnVmZmVyLmdldCgp
LCBzYW1wbGVUaW1lLCBzaXplKTsKK30KKworI2lmIEhBVkUoSU9TVVJGQUNFKQorCisjaWYgUExB
VEZPUk0oTUFDKQorc3RhdGljIGludDMyX3Qgcm91bmRVcFRvTWFjcm9ibG9ja011bHRpcGxlKGlu
dDMyX3Qgc2l6ZSkKK3sKKyAgICByZXR1cm4gKHNpemUgKyAxNSkgJiB+MTU7Cit9CisjZW5kaWYK
KworQ0ZEaWN0aW9uYXJ5UmVmIEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmlvU3VyZmFjZVBpeGVs
QnVmZmVyQ3JlYXRpb25PcHRpb25zKElPU3VyZmFjZVJlZiBzdXJmYWNlKQoreworICAgIGlmICht
X2lvU3VyZmFjZUJ1ZmZlckF0dHJpYnV0ZXMpCisgICAgICAgIHJldHVybiBtX2lvU3VyZmFjZUJ1
ZmZlckF0dHJpYnV0ZXMuZ2V0KCk7CisKKyAgICBtX2lvU3VyZmFjZUJ1ZmZlckF0dHJpYnV0ZXMg
PSAoX19icmlkZ2UgQ0ZEaWN0aW9uYXJ5UmVmKSBAeworICAgICAgICAoX19icmlkZ2UgTlNTdHJp
bmcgKiljdlBpeGVsRm9ybWF0T3BlbkdMS2V5KCkgOiBAKFlFUyksCisgICAgfTsKKworI2lmIFBM
QVRGT1JNKE1BQykKKyAgICBhdXRvIGZvcm1hdCA9IElPU3VyZmFjZUdldFBpeGVsRm9ybWF0KHN1
cmZhY2UpOworICAgIGF1dG8gd2lkdGggPSBJT1N1cmZhY2VHZXRXaWR0aChzdXJmYWNlKTsKKyAg
ICBhdXRvIGhlaWdodCA9IElPU3VyZmFjZUdldEhlaWdodChzdXJmYWNlKTsKKyAgICBpbnQzMl90
IGV4dGVuZGVkUmlnaHQgPSByb3VuZFVwVG9NYWNyb2Jsb2NrTXVsdGlwbGUod2lkdGgpIC0gd2lk
dGg7CisgICAgaW50MzJfdCBleHRlbmRlZEJvdHRvbSA9IHJvdW5kVXBUb01hY3JvYmxvY2tNdWx0
aXBsZShoZWlnaHQpIC0gaGVpZ2h0OworCisgICAgaWYgKChmb3JtYXQgPT0ga0NWUGl4ZWxGb3Jt
YXRUeXBlXzQyMFlwQ2JDcjhCaVBsYW5hclZpZGVvUmFuZ2UgfHwgZm9ybWF0ID09IGtDVlBpeGVs
Rm9ybWF0VHlwZV80MjBZcENiQ3I4QmlQbGFuYXJGdWxsUmFuZ2UpCisgICAgICAgICYmIChJT1N1
cmZhY2VHZXRCeXRlc1BlclJvd09mUGxhbmUoc3VyZmFjZSwgMCkgPj0gd2lkdGggKyBleHRlbmRl
ZFJpZ2h0KQorICAgICAgICAmJiAoSU9TdXJmYWNlR2V0Qnl0ZXNQZXJSb3dPZlBsYW5lKHN1cmZh
Y2UsIDEpID49IHdpZHRoICsgZXh0ZW5kZWRSaWdodCkKKyAgICAgICAgJiYgKElPU3VyZmFjZUdl
dEFsbG9jU2l6ZShzdXJmYWNlKSA+PSAoaGVpZ2h0ICsgZXh0ZW5kZWRCb3R0b20pICogSU9TdXJm
YWNlR2V0Qnl0ZXNQZXJSb3dPZlBsYW5lKHN1cmZhY2UsIDApICogMyAvIDIpKSB7CisgICAgICAg
ICAgICBtX2lvU3VyZmFjZUJ1ZmZlckF0dHJpYnV0ZXMgPSAoX19icmlkZ2UgQ0ZEaWN0aW9uYXJ5
UmVmKSBAeworICAgICAgICAgICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsQnVm
ZmVyT3BlbkdMQ29tcGF0aWJpbGl0eUtleSA6IEAoWUVTKSwKKyAgICAgICAgICAgICAgICAoX19i
cmlkZ2UgTlNTdHJpbmcgKilrQ1ZQaXhlbEJ1ZmZlckV4dGVuZGVkUGl4ZWxzUmlnaHRLZXkgOiBA
KGV4dGVuZGVkUmlnaHQpLAorICAgICAgICAgICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtD
VlBpeGVsQnVmZmVyRXh0ZW5kZWRQaXhlbHNCb3R0b21LZXkgOiBAKGV4dGVuZGVkQm90dG9tKQor
ICAgICAgICAgICAgfTsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzdXJmYWNlKTsK
KyNlbmRpZgorCisgICAgcmV0dXJuIG1faW9TdXJmYWNlQnVmZmVyQXR0cmlidXRlcy5nZXQoKTsK
K30KKworUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJSZWY+IEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6
OmNyZWF0ZVBpeGVsQnVmZmVyKElPU3VyZmFjZVJlZiBzdXJmYWNlLCBjb25zdCBJbnRTaXplJiBz
aXplKQoreworICAgIGlmICghc3VyZmFjZSB8fCAhc2V0U2l6ZShzaXplKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBDVlBpeGVsQnVmZmVyUmVmIHBpeGVsQnVmZmVyOworICAgIGF1
dG8gc3RhdHVzID0gQ1ZQaXhlbEJ1ZmZlckNyZWF0ZVdpdGhJT1N1cmZhY2Uoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgc3VyZmFjZSwgaW9TdXJmYWNlUGl4ZWxCdWZmZXJDcmVhdGlvbk9wdGlvbnMoc3Vy
ZmFjZSksICZwaXhlbEJ1ZmZlcik7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICBSRUxFQVNF
X0xPRyhNZWRpYSwgIkNWUGl4ZWxCdWZmZXJDcmVhdGVXaXRoSU9TdXJmYWNlIGZhaWxlZCB3aXRo
IGVycm9yIGNvZGU6ICVkIiwgc3RhdGljX2Nhc3Q8aW50PihzdGF0dXMpKTsKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgYXV0byByZXRhaW5lZEJ1ZmZlciA9IGFkb3B0Q0Yo
cGl4ZWxCdWZmZXIpOworICAgIGlmIChtX3NpemUgPT0gSW50U2l6ZShDVlBpeGVsQnVmZmVyR2V0
V2lkdGgocGl4ZWxCdWZmZXIpLCBDVlBpeGVsQnVmZmVyR2V0SGVpZ2h0KHBpeGVsQnVmZmVyKSkg
JiYgbV9waXhlbEZvcm1hdCA9PSBDVlBpeGVsQnVmZmVyR2V0UGl4ZWxGb3JtYXRUeXBlKHBpeGVs
QnVmZmVyKSkKKyAgICAgICAgcmV0dXJuIHJldGFpbmVkQnVmZmVyOworCisgICAgcmV0dXJuIGNv
bnZlcnRQaXhlbEJ1ZmZlcihwaXhlbEJ1ZmZlciwgc2l6ZSk7Cit9CisKK1JldGFpblB0cjxDTVNh
bXBsZUJ1ZmZlclJlZj4gSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlQ01TYW1wbGVCdWZm
ZXIoSU9TdXJmYWNlUmVmIHN1cmZhY2UsIGNvbnN0IE1lZGlhVGltZSYgc2FtcGxlVGltZSwgY29u
c3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAoIXN1cmZhY2UgfHwgIXNldFNpemUoc2l6ZSkp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IGNyZWF0
ZVBpeGVsQnVmZmVyKHN1cmZhY2UsIHNpemUpOworICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGNyZWF0ZUNNU2FtcGxlQnVmZmVyKHBp
eGVsQnVmZmVyLmdldCgpLCBzYW1wbGVUaW1lLCBzaXplKTsKK30KKyNlbmRpZgorCitSZWZQdHI8
TWVkaWFTYW1wbGU+IEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNvbnZlcnRNZWRpYVNhbXBsZShN
ZWRpYVNhbXBsZSYgc2FtcGxlLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIEFTU0VSVChz
YW1wbGUucGxhdGZvcm1TYW1wbGUoKS50eXBlID09IFBsYXRmb3JtU2FtcGxlOjpDTVNhbXBsZUJ1
ZmZlclR5cGUpOworCisgICAgaWYgKHNpemUgPT0gcm91bmRlZEludFNpemUoc2FtcGxlLnByZXNl
bnRhdGlvblNpemUoKSkpCisgICAgICAgIHJldHVybiAmc2FtcGxlOworCisgICAgaWYgKCFzZXRT
aXplKHNpemUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gcmVzaXplZEJ1
ZmZlciA9IGNvbnZlcnRDTVNhbXBsZUJ1ZmZlcihzYW1wbGUucGxhdGZvcm1TYW1wbGUoKS5zYW1w
bGUuY21TYW1wbGVCdWZmZXIsIHNpemUpOworICAgIGlmICghcmVzaXplZEJ1ZmZlcikKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVh
dGUocmVzaXplZEJ1ZmZlci5nZXQoKSwgc2FtcGxlLnZpZGVvUm90YXRpb24oKSwgc2FtcGxlLnZp
ZGVvTWlycm9yZWQoKSk7Cit9CisKKyNpZiBIQVZFKElPU1VSRkFDRSkKK1JlZlB0cjxNZWRpYVNh
bXBsZT4gSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlTWVkaWFTYW1wbGUoSU9TdXJmYWNl
UmVmIHN1cmZhY2UsIGNvbnN0IE1lZGlhVGltZSYgc2FtcGxlVGltZSwgY29uc3QgSW50U2l6ZSYg
c2l6ZSwgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb24gcm90YXRpb24sIGJvb2wgbWlycm9yZWQp
Cit7CisgICAgYXV0byBzYW1wbGVCdWZmZXIgPSBjcmVhdGVDTVNhbXBsZUJ1ZmZlcihzdXJmYWNl
LCBzYW1wbGVUaW1lLCBzaXplKTsKKyAgICBpZiAoIXNhbXBsZUJ1ZmZlcikKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVhdGUoc2Ft
cGxlQnVmZmVyLmdldCgpLCByb3RhdGlvbiwgbWlycm9yZWQpOworfQorI2VuZGlmCisKK1JlZlB0
cjxNZWRpYVNhbXBsZT4gSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlTWVkaWFTYW1wbGUo
Q0dJbWFnZVJlZiBpbWFnZSwgY29uc3QgTWVkaWFUaW1lJiBzYW1wbGVUaW1lLCBjb25zdCBJbnRT
aXplJiBzaXplLCBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbiByb3RhdGlvbiwgYm9vbCBtaXJy
b3JlZCkKK3sKKyAgICBhdXRvIHNhbXBsZUJ1ZmZlciA9IGNyZWF0ZUNNU2FtcGxlQnVmZmVyKGlt
YWdlLCBzYW1wbGVUaW1lLCBzaXplKTsKKyAgICBpZiAoIXNhbXBsZUJ1ZmZlcikKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVhdGUo
c2FtcGxlQnVmZmVyLmdldCgpLCByb3RhdGlvbiwgbWlycm9yZWQpOworfQorCitSZWZQdHI8TWVk
aWFTYW1wbGU+IEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNyZWF0ZU1lZGlhU2FtcGxlKENNU2Ft
cGxlQnVmZmVyUmVmIGJ1ZmZlciwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgTWVkaWFTYW1wbGU6OlZp
ZGVvUm90YXRpb24gcm90YXRpb24sIGJvb2wgbWlycm9yZWQpCit7CisgICAgYXV0byBzYW1wbGVC
dWZmZXIgPSBjb252ZXJ0Q01TYW1wbGVCdWZmZXIoYnVmZmVyLCBzaXplKTsKKyAgICBpZiAoIXNh
bXBsZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gTWVkaWFT
YW1wbGVBVkZPYmpDOjpjcmVhdGUoc2FtcGxlQnVmZmVyLmdldCgpLCByb3RhdGlvbiwgbWlycm9y
ZWQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoVklERU9U
T09MQk9YKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3Yv
UGl4ZWxCdWZmZXJSZXNpemVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
di9QaXhlbEJ1ZmZlclJlc2l6ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Rj
ZDRhYjIyNDA1MGU0N2ZiNTczYzVhOTNlMzc1Zjg4MjkxNWY1ZC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jdi9QaXhlbEJ1ZmZlclJlc2l6ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFVTRShWSURFT1RPT0xCT1gpCi0K
LSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi10eXBl
ZGVmIHN0cnVjdCBPcGFxdWVWVFBpeGVsVHJhbnNmZXJTZXNzaW9uKiBWVFBpeGVsVHJhbnNmZXJT
ZXNzaW9uUmVmOwotdHlwZWRlZiBzdHJ1Y3QgX19DVkJ1ZmZlciAqQ1ZQaXhlbEJ1ZmZlclJlZjsK
LXR5cGVkZWYgc3RydWN0IF9fQ1ZQaXhlbEJ1ZmZlclBvb2wgKkNWUGl4ZWxCdWZmZXJQb29sUmVm
OwotdHlwZWRlZiBzdHJ1Y3Qgb3BhcXVlQ01TYW1wbGVCdWZmZXIgKkNNU2FtcGxlQnVmZmVyUmVm
OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFBpeGVsQnVmZmVyUmVzaXplciB7Ci1w
dWJsaWM6Ci0gICAgUGl4ZWxCdWZmZXJSZXNpemVyKEludFNpemUsIE9TVHlwZSk7Ci0KLSAgICBS
ZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gcmVzaXplKENWUGl4ZWxCdWZmZXJSZWYpOwotICAg
IFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4gcmVzaXplKENNU2FtcGxlQnVmZmVyUmVmKTsK
LSAgICBib29sIGNhblJlc2l6ZVRvKEludFNpemUgc2l6ZSkgeyByZXR1cm4gc2l6ZSA9PSBtX3Np
emU7IH0KLQotcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8VlRQaXhlbFRyYW5zZmVyU2Vzc2lvblJl
Zj4gbV90cmFuc2ZlclNlc3Npb247Ci0gICAgUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJQb29sUmVm
PiBtX2J1ZmZlclBvb2w7Ci0gICAgSW50U2l6ZSBtX3NpemU7Ci19OwotCi19Ci0KLSNlbmRpZiAv
LyBVU0UoVklERU9UT09MQk9YKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJSZXNpemVyLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJSZXNpemVyLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA2Yzc0MWEwY2YzNTIwMTI2MjlhMDI5MDE4ZmNjNTIyY2RiYmViZTg4Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2N2L1BpeGVsQnVmZmVyUmVzaXplci5tbQorKysgL2Rldi9udWxs
CkBAIC0xLDEzOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2lt
cG9ydCAiUGl4ZWxCdWZmZXJSZXNpemVyLmgiCi0KLSNpZiBVU0UoVklERU9UT09MQk9YKQotCi0j
aW1wb3J0ICJMb2dnaW5nLmgiCi0jaW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4KLQotI2ltcG9y
dCAiQ29yZVZpZGVvU29mdExpbmsuaCIKLSNpbXBvcnQgIlZpZGVvVG9vbGJveFNvZnRMaW5rLmgi
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGl4ZWxCdWZmZXJSZXNpemVyOjpQaXhlbEJ1ZmZl
clJlc2l6ZXIoSW50U2l6ZSBzaXplLCBPU1R5cGUgdmlkZW9Gb3JtYXQpCi17Ci0gICAgVlRQaXhl
bFRyYW5zZmVyU2Vzc2lvblJlZiB0cmFuc2ZlclNlc3Npb247Ci0gICAgVlRQaXhlbFRyYW5zZmVy
U2Vzc2lvbkNyZWF0ZShOVUxMLCAmdHJhbnNmZXJTZXNzaW9uKTsKLSAgICBBU1NFUlQodHJhbnNm
ZXJTZXNzaW9uKTsKLSAgICBtX3RyYW5zZmVyU2Vzc2lvbiA9IGFkb3B0Q0YodHJhbnNmZXJTZXNz
aW9uKTsKLQotICAgIFZUU2Vzc2lvblNldFByb3BlcnR5KHRyYW5zZmVyU2Vzc2lvbiwga1ZUUGl4
ZWxUcmFuc2ZlclByb3BlcnR5S2V5X1NjYWxpbmdNb2RlLCBrVlRTY2FsaW5nTW9kZV9UcmltKTsK
LQotICAgIENGRGljdGlvbmFyeVJlZiBzb3VyY2VQaXhlbEJ1ZmZlck9wdGlvbnMgPSAoX19icmlk
Z2UgQ0ZEaWN0aW9uYXJ5UmVmKSBAewotICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ1ZQ
aXhlbEJ1ZmZlcldpZHRoS2V5IDpAKHNpemUud2lkdGgoKSksCi0gICAgICAgIChfX2JyaWRnZSBO
U1N0cmluZyAqKWtDVlBpeGVsQnVmZmVySGVpZ2h0S2V5OkAoc2l6ZS5oZWlnaHQoKSksCi0gICAg
ICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsQnVmZmVyUGl4ZWxGb3JtYXRUeXBlS2V5
OkAodmlkZW9Gb3JtYXQpLAotI2lmIFBMQVRGT1JNKElPUykgJiYgIVBMQVRGT1JNKElPU01BQykK
LSAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxGb3JtYXRPcGVuR0xFU0NvbXBh
dGliaWxpdHkgOiBAKFlFUyksCi0jZWxzZQotICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilr
Q1ZQaXhlbEJ1ZmZlck9wZW5HTENvbXBhdGliaWxpdHlLZXkgOiBAKFlFUyksCi0jZW5kaWYKLSAg
ICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxCdWZmZXJJT1N1cmZhY2VQcm9wZXJ0
aWVzS2V5IDogQHsgLyplbXB0eSBkaWN0aW9uYXJ5Ki8gfSwKLSAgICB9OwotICAgIENWUGl4ZWxC
dWZmZXJQb29sUmVmIGJ1ZmZlclBvb2w7Ci0gICAgYXV0byBzdGF0dXMgPSBDVlBpeGVsQnVmZmVy
UG9vbENyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBOVUxMLCBzb3VyY2VQaXhlbEJ1ZmZlck9w
dGlvbnMsICZidWZmZXJQb29sKTsKLSAgICBBU1NFUlQoIXN0YXR1cyk7Ci0gICAgaWYgKHN0YXR1
cyAhPSBrQ1ZSZXR1cm5TdWNjZXNzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2J1ZmZlclBv
b2wgPSBhZG9wdENGKGJ1ZmZlclBvb2wpOwotICAgIG1fc2l6ZSA9IHNpemU7Ci19Ci0KLVJldGFp
blB0cjxDVlBpeGVsQnVmZmVyUmVmPiBQaXhlbEJ1ZmZlclJlc2l6ZXI6OnJlc2l6ZShDVlBpeGVs
QnVmZmVyUmVmIGlucHV0QnVmZmVyKQotewotICAgIEFTU0VSVChtX2J1ZmZlclBvb2wgJiYgIW1f
c2l6ZS5pc0VtcHR5KCkpOwotICAgIGlmICghbV9idWZmZXJQb29sIHx8IG1fc2l6ZS5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgUmV0YWluUHRyPENWUGl4ZWxCdWZm
ZXJSZWY+IHJlc3VsdDsKLSAgICBDVlBpeGVsQnVmZmVyUmVmIG91dHB1dEJ1ZmZlciA9IG51bGxw
dHI7Ci0KLSAgICBhdXRvIHN0YXR1cyA9IENWUGl4ZWxCdWZmZXJQb29sQ3JlYXRlUGl4ZWxCdWZm
ZXIoa0NGQWxsb2NhdG9yRGVmYXVsdCwgbV9idWZmZXJQb29sLmdldCgpLCAmb3V0cHV0QnVmZmVy
KTsKLSAgICBpZiAoc3RhdHVzKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhLCAiUGl4ZWxC
dWZmZXJSZXNpemVyOjpyZXNpemUsIENWUGl4ZWxCdWZmZXJQb29sQ3JlYXRlUGl4ZWxCdWZmZXIg
ZmFpbGVkIHdpdGggZXJyb3IgJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOwotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgcmVzdWx0ID0gYWRvcHRDRihvdXRwdXRCdWZm
ZXIpOwotCi0gICAgYXV0byBlcnIgPSBWVFBpeGVsVHJhbnNmZXJTZXNzaW9uVHJhbnNmZXJJbWFn
ZShtX3RyYW5zZmVyU2Vzc2lvbi5nZXQoKSwgaW5wdXRCdWZmZXIsIG91dHB1dEJ1ZmZlcik7Ci0g
ICAgaWYgKGVycikgewotICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIlBpeGVsQnVmZmVyUmVz
aXplcjo6cmVzaXplLCBWVFBpeGVsVHJhbnNmZXJTZXNzaW9uVHJhbnNmZXJJbWFnZSBmYWlsZWQg
d2l0aCBlcnJvciAlZCIsIHN0YXRpY19jYXN0PGludD4oZXJyKSk7Ci0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVJldGFpblB0cjxDTVNh
bXBsZUJ1ZmZlclJlZj4gUGl4ZWxCdWZmZXJSZXNpemVyOjpyZXNpemUoQ01TYW1wbGVCdWZmZXJS
ZWYgc2FtcGxlQnVmZmVyKQotewotICAgIGF1dG8gY29udmVydGVkUGl4ZWxCdWZmZXIgPSByZXNp
emUoQ01TYW1wbGVCdWZmZXJHZXRJbWFnZUJ1ZmZlcihzYW1wbGVCdWZmZXIpKTsKLSAgICBpZiAo
IWNvbnZlcnRlZFBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENN
VmlkZW9Gb3JtYXREZXNjcmlwdGlvblJlZiBmb3JtYXREZXNjcmlwdGlvbiA9IG51bGxwdHI7Ci0g
ICAgYXV0byBzdGF0dXMgPSBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25DcmVhdGVGb3JJbWFnZUJ1
ZmZlcihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBjb252ZXJ0ZWRQaXhlbEJ1ZmZlci5nZXQoKSwgJmZv
cm1hdERlc2NyaXB0aW9uKTsKLSAgICBpZiAoc3RhdHVzICE9IG5vRXJyKSB7Ci0gICAgICAgIFJF
TEVBU0VfTE9HKE1lZGlhLCAiUGl4ZWxCdWZmZXJSZXNpemVyOjpyZXNpemU6IGZhaWxlZCB0byBj
cmVhdGUgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uIHdpdGggZXJyb3IgY29kZTogJWQiLCBzdGF0
aWNfY2FzdDxpbnQ+KHN0YXR1cykpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0K
LSAgICBDTUl0ZW1Db3VudCBpdGVtQ291bnQgPSAwOwotICAgIHN0YXR1cyA9IENNU2FtcGxlQnVm
ZmVyR2V0U2FtcGxlVGltaW5nSW5mb0FycmF5KHNhbXBsZUJ1ZmZlciwgMSwgbnVsbHB0ciwgJml0
ZW1Db3VudCk7Ci0gICAgaWYgKHN0YXR1cyAhPSBub0VycikgewotICAgICAgICBSRUxFQVNFX0xP
RyhNZWRpYSwgIlBpeGVsQnVmZmVyUmVzaXplcjo6cmVzaXplOiBDTVNhbXBsZUJ1ZmZlckdldFNh
bXBsZVRpbWluZ0luZm9BcnJheSBmYWlsZWQgd2l0aCBlcnJvciBjb2RlOiAlZCIsIHN0YXRpY19j
YXN0PGludD4oc3RhdHVzKSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICBW
ZWN0b3I8Q01TYW1wbGVUaW1pbmdJbmZvPiB0aW1pbmdJbmZvQXJyYXk7Ci0gICAgQ01TYW1wbGVU
aW1pbmdJbmZvKiB0aW1laW5nSW5mb1B0ciA9IG51bGxwdHI7Ci0gICAgaWYgKGl0ZW1Db3VudCkg
ewotICAgICAgICB0aW1pbmdJbmZvQXJyYXkuZ3JvdyhpdGVtQ291bnQpOwotICAgICAgICBzdGF0
dXMgPSBDTVNhbXBsZUJ1ZmZlckdldFNhbXBsZVRpbWluZ0luZm9BcnJheShzYW1wbGVCdWZmZXIs
IGl0ZW1Db3VudCwgdGltaW5nSW5mb0FycmF5LmRhdGEoKSwgbnVsbHB0cik7Ci0gICAgICAgIGlm
IChzdGF0dXMgIT0gbm9FcnIpIHsKLSAgICAgICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhLCAiUGl4
ZWxCdWZmZXJSZXNpemVyOjpyZXNpemU6IENNU2FtcGxlQnVmZmVyR2V0U2FtcGxlVGltaW5nSW5m
b0FycmF5IGZhaWxlZCB3aXRoIGVycm9yIGNvZGU6ICVkIiwgc3RhdGljX2Nhc3Q8aW50PihzdGF0
dXMpKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0gICAgICAgIHRp
bWVpbmdJbmZvUHRyID0gdGltaW5nSW5mb0FycmF5LmRhdGEoKTsKLSAgICB9Ci0KLSAgICBDTVNh
bXBsZUJ1ZmZlclJlZiByZXNpemVkU2FtcGxlQnVmZmVyOwotICAgIHN0YXR1cyA9IENNU2FtcGxl
QnVmZmVyQ3JlYXRlUmVhZHlXaXRoSW1hZ2VCdWZmZXIoa0NGQWxsb2NhdG9yRGVmYXVsdCwgY29u
dmVydGVkUGl4ZWxCdWZmZXIuZ2V0KCksIGZvcm1hdERlc2NyaXB0aW9uLCB0aW1laW5nSW5mb1B0
ciwgJnJlc2l6ZWRTYW1wbGVCdWZmZXIpOwotICAgIENGUmVsZWFzZShmb3JtYXREZXNjcmlwdGlv
bik7Ci0gICAgaWYgKHN0YXR1cyAhPSBub0VycikgewotICAgICAgICBSRUxFQVNFX0xPRyhNZWRp
YSwgIlBpeGVsQnVmZmVyUmVzaXplcjo6cmVzaXplOiBmYWlsZWQgdG8gY3JlYXRlIENNU2FtcGxl
QnVmZmVyIHdpdGggZXJyb3IgY29kZTogJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOwot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICByZXR1cm4gYWRvcHRDRihyZXNp
emVkU2FtcGxlQnVmZmVyKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gVVNFKFZJREVPVE9PTEJPWCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAKaW5kZXggODA1MDQzMjdl
M2E2ODI0OTk1ODZmOGQzYzdiOGNlMDQ0ZGEzMDI4Ny4uZWM4YjViOWRkZTBjY2Q3NTE0MTRiZWE0
MjJjNWM2NWU5YjIzOGIxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAKQEAgLTEzMywxMCArMTMz
LDYgQEAgdm9pZCBSZWFsdGltZU1lZGlhU291cmNlOjpub3RpZnlNdXRlZE9ic2VydmVycygpIGNv
bnN0CiAgICAgfSk7CiB9CiAKLXZvaWQgUmVhbHRpbWVNZWRpYVNvdXJjZTo6c2V0dGluZ3NEaWRD
aGFuZ2UoT3B0aW9uU2V0PFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RmxhZz4pCi17Ci19
Ci0KIHZvaWQgUmVhbHRpbWVNZWRpYVNvdXJjZTo6bm90aWZ5U2V0dGluZ3NEaWRDaGFuZ2VPYnNl
cnZlcnMoT3B0aW9uU2V0PFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RmxhZz4gZmxhZ3Mp
CiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuaAppbmRleCA3
MTZjZTY5YzAyNDA3NmUyZGJmMGY2NjZiZjU4ZWMyOWQyNmQwNDY1Li5hOTNkZTMzOGM0MWE1NzFj
YjEwNWQxZjQzNmQ1MmM1ZTU5MzgwYjYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZS5oCkBAIC0yMDAsNyAr
MjAwLDcgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc3RhcnRQcm9k
dWNpbmdEYXRhKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHN0b3BQcm9kdWNpbmdEYXRhKCkgeyB9
Ci0gICAgdmlydHVhbCB2b2lkIHNldHRpbmdzRGlkQ2hhbmdlKE9wdGlvblNldDxSZWFsdGltZU1l
ZGlhU291cmNlU2V0dGluZ3M6OkZsYWc+KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0dGluZ3NEaWRD
aGFuZ2UoT3B0aW9uU2V0PFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RmxhZz4pIHsgfQog
CiAKICAgICB2b2lkIGZvckVhY2hPYnNlcnZlcihjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoT2Jz
ZXJ2ZXImKT4mKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL21hYy9BVlZpZGVvQ2FwdHVyZVNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJlU291cmNlLmgKaW5kZXggM2I0OWY0
NmZkYTNlYzMyNmM3Mzg1MTczZmE2Y2QyN2VjZjI5ZWY2Mi4uMjZiZjgzMTU0NTViMTdlYzgzMjJm
YjU5MTFhYTllMDVlNzYzNjMzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJlU291cmNlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJlU291cmNlLmgKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00
OSw3ICs0OSw3IEBAIE9CSkNfQ0xBU1MgV2ViQ29yZUFWVmlkZW9DYXB0dXJlU291cmNlT2JzZXJ2
ZXI7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEFWVmlkZW9QcmVzZXQ7Ci1jbGFzcyBQ
aXhlbEJ1ZmZlclJlc2l6ZXI7CitjbGFzcyBJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOwogCiBjbGFz
cyBBVlZpZGVvQ2FwdHVyZVNvdXJjZSA6IHB1YmxpYyBSZWFsdGltZVZpZGVvU291cmNlLCBwcml2
YXRlIE9yaWVudGF0aW9uTm90aWZpZXI6Ok9ic2VydmVyIHsKIHB1YmxpYzoKQEAgLTEwMywxMyAr
MTAzLDE0IEBAIHByaXZhdGU6CiAKICAgICBib29sIHNldEZyYW1lUmF0ZUNvbnN0cmFpbnQoZG91
YmxlIG1pbkZyYW1lUmF0ZSwgZG91YmxlIG1heEZyYW1lUmF0ZSk7CiAKLSAgICB2b2lkIHByb2Nl
c3NOZXdGcmFtZShSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+LCBSZXRhaW5QdHI8QVZDYXB0
dXJlQ29ubmVjdGlvbj4pOworICAgIHZvaWQgcHJvY2Vzc05ld0ZyYW1lKFJlZlB0cjxNZWRpYVNh
bXBsZT4pOwogICAgIEludFNpemUgc2l6ZUZvclByZXNldChOU1N0cmluZyopOwogCiAgICAgQVZD
YXB0dXJlRGV2aWNlKiBkZXZpY2UoKSBjb25zdCB7IHJldHVybiBtX2RldmljZS5nZXQoKTsgfQog
Ci0gICAgUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBtX2J1ZmZlcjsKKyAgICBSZWZQdHI8
TWVkaWFTYW1wbGU+IG1fYnVmZmVyOwogICAgIFJldGFpblB0cjxBVkNhcHR1cmVWaWRlb0RhdGFP
dXRwdXQ+IG1fdmlkZW9PdXRwdXQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlVHJhbnNmZXJT
ZXNzaW9uVlQ+IG1faW1hZ2VUcmFuc2ZlclNlc3Npb247CiAKICAgICBJbnRTaXplIG1fcmVxdWVz
dGVkU2l6ZTsKICAgICBpbnQzMl90IG1fd2lkdGggeyAwIH07CkBAIC0xMTgsNyArMTE5LDYgQEAg
cHJpdmF0ZToKICAgICBpbnQgbV9kZXZpY2VPcmllbnRhdGlvbiB7IDAgfTsKICAgICBNZWRpYVNh
bXBsZTo6VmlkZW9Sb3RhdGlvbiBtX3NhbXBsZVJvdGF0aW9uIHsgTWVkaWFTYW1wbGU6OlZpZGVv
Um90YXRpb246Ok5vbmUgfTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxQaXhlbEJ1ZmZlclJlc2l6
ZXI+IG1fcGl4ZWxCdWZmZXJSZXNpemVyOwogICAgIHN0ZDo6b3B0aW9uYWw8UmVhbHRpbWVNZWRp
YVNvdXJjZVNldHRpbmdzPiBtX2N1cnJlbnRTZXR0aW5nczsKICAgICBzdGQ6Om9wdGlvbmFsPFJl
YWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXM+IG1fY2FwYWJpbGl0aWVzOwogICAgIFJldGFp
blB0cjxXZWJDb3JlQVZWaWRlb0NhcHR1cmVTb3VyY2VPYnNlcnZlcj4gbV9vYmpjT2JzZXJ2ZXI7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZW
aWRlb0NhcHR1cmVTb3VyY2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9tYWMvQVZWaWRlb0NhcHR1cmVTb3VyY2UubW0KaW5kZXggNTE5NjA4MjIyZTY2MTRhYjJlZGNl
YzIzZjM1MDA5MDc1OWQxMTkxNi4uN2E5NjIxNmM4NTRiNWRhZWVmZDE4M2Q3YmQyYzhmN2Q1ZDFh
NThmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L0FWVmlkZW9DYXB0dXJlU291cmNlLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL21hYy9BVlZpZGVvQ2FwdHVyZVNvdXJjZS5tbQpAQCAtMjksMTEgKzI5LDExIEBA
CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEFWRk9VTkRBVElPTikKIAogI2ltcG9y
dCAiSW1hZ2VCdWZmZXIuaCIKKyNpbXBvcnQgIkltYWdlVHJhbnNmZXJTZXNzaW9uVlQuaCIKICNp
bXBvcnQgIkludFJlY3QuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQgIk1lZGlhQ29u
c3RyYWludHMuaCIKICNpbXBvcnQgIk1lZGlhU2FtcGxlQVZGT2JqQy5oIgotI2ltcG9ydCAiUGl4
ZWxCdWZmZXJSZXNpemVyLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybUxheWVyLmgiCiAjaW1wb3J0ICJS
ZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFjLmgiCiAjaW1wb3J0ICJSZWFsdGltZU1lZGlhU291
cmNlU2V0dGluZ3MuaCIKQEAgLTI5OSw3ICsyOTksNyBAQCBjb25zdCBSZWFsdGltZU1lZGlhU291
cmNlQ2FwYWJpbGl0aWVzJiBBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6Y2FwYWJpbGl0aWVzKCkKIGJv
b2wgQVZWaWRlb0NhcHR1cmVTb3VyY2U6OnByZWZlcnNQcmVzZXQoVmlkZW9QcmVzZXQmIHByZXNl
dCkKIHsKICNpZiBQTEFURk9STShJT1MpCi0gICAgcmV0dXJuICFbc3RhdGljX2Nhc3Q8QVZWaWRl
b1ByZXNldCo+KCZwcmVzZXQpLT5mb3JtYXQuZ2V0KCkgaXNWaWRlb0Jpbm5lZF07CisgICAgcmV0
dXJuIFtzdGF0aWNfY2FzdDxBVlZpZGVvUHJlc2V0Kj4oJnByZXNldCktPmZvcm1hdC5nZXQoKSBp
c1ZpZGVvQmlubmVkXTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHByZXNldCk7CiAjZW5kaWYK
QEAgLTUxOSwyNyArNTE5LDIzIEBAIHZvaWQgQVZWaWRlb0NhcHR1cmVTb3VyY2U6OmNvbXB1dGVT
YW1wbGVSb3RhdGlvbigpCiAgICAgfQogfQogCi12b2lkIEFWVmlkZW9DYXB0dXJlU291cmNlOjpw
cm9jZXNzTmV3RnJhbWUoUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBzYW1wbGVCdWZmZXIs
IFJldGFpblB0cjxBVkNhcHR1cmVDb25uZWN0aW9uVHlwZT4gY29ubmVjdGlvbikKK3ZvaWQgQVZW
aWRlb0NhcHR1cmVTb3VyY2U6OnByb2Nlc3NOZXdGcmFtZShSZWZQdHI8TWVkaWFTYW1wbGU+IHNh
bXBsZSkKIHsKICAgICBpZiAoIWlzUHJvZHVjaW5nRGF0YSgpIHx8IG11dGVkKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIENNRm9ybWF0RGVzY3JpcHRpb25SZWYgZm9ybWF0RGVzY3JpcHRpb24g
PSBDTVNhbXBsZUJ1ZmZlckdldEZvcm1hdERlc2NyaXB0aW9uKHNhbXBsZUJ1ZmZlci5nZXQoKSk7
Ci0gICAgaWYgKCFmb3JtYXREZXNjcmlwdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9i
dWZmZXIgPSBzYW1wbGVCdWZmZXI7Ci0gICAgQ01WaWRlb0RpbWVuc2lvbnMgZGltZW5zaW9ucyA9
IENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkdldERpbWVuc2lvbnMoZm9ybWF0RGVzY3JpcHRpb24p
OworICAgIG1fYnVmZmVyID0gc2FtcGxlOworICAgIGF1dG8gZGltZW5zaW9ucyA9IHJvdW5kZWRJ
bnRTaXplKHNhbXBsZS0+cHJlc2VudGF0aW9uU2l6ZSgpKTsKICAgICBpZiAobV9zYW1wbGVSb3Rh
dGlvbiA9PSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6TGVmdCB8fCBtX3NhbXBsZVJvdGF0
aW9uID09IE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpSaWdodCkKLSAgICAgICAgc3RkOjpz
d2FwKGRpbWVuc2lvbnMud2lkdGgsIGRpbWVuc2lvbnMuaGVpZ2h0KTsKKyAgICAgICAgZGltZW5z
aW9ucyA9IHsgZGltZW5zaW9ucy5oZWlnaHQoKSwgZGltZW5zaW9ucy53aWR0aCgpIH07CiAKLSAg
ICBpZiAoZGltZW5zaW9ucy53aWR0aCAhPSBtX3dpZHRoIHx8IGRpbWVuc2lvbnMuaGVpZ2h0ICE9
IG1faGVpZ2h0KSB7Ci0gICAgICAgIG1fd2lkdGggPSBkaW1lbnNpb25zLndpZHRoOwotICAgICAg
ICBtX2hlaWdodCA9IGRpbWVuc2lvbnMuaGVpZ2h0OwotICAgICAgICBzZXRTaXplKHsgZGltZW5z
aW9ucy53aWR0aCwgZGltZW5zaW9ucy5oZWlnaHQgfSk7CisgICAgaWYgKGRpbWVuc2lvbnMud2lk
dGgoKSAhPSBtX3dpZHRoIHx8IGRpbWVuc2lvbnMuaGVpZ2h0KCkgIT0gbV9oZWlnaHQpIHsKKyAg
ICAgICAgbV93aWR0aCA9IGRpbWVuc2lvbnMud2lkdGgoKTsKKyAgICAgICAgbV9oZWlnaHQgPSBk
aW1lbnNpb25zLmhlaWdodCgpOworICAgICAgICBzZXRTaXplKGRpbWVuc2lvbnMpOwogICAgIH0K
IAotICAgIHZpZGVvU2FtcGxlQXZhaWxhYmxlKE1lZGlhU2FtcGxlQVZGT2JqQzo6Y3JlYXRlKG1f
YnVmZmVyLmdldCgpLCBtX3NhbXBsZVJvdGF0aW9uLCBbY29ubmVjdGlvbiBpc1ZpZGVvTWlycm9y
ZWRdKSk7CisgICAgZGlzcGF0Y2hNZWRpYVNhbXBsZVRvT2JzZXJ2ZXJzKCpzYW1wbGUpOwogfQog
CiB2b2lkIEFWVmlkZW9DYXB0dXJlU291cmNlOjpjYXB0dXJlT3V0cHV0RGlkT3V0cHV0U2FtcGxl
QnVmZmVyRnJvbUNvbm5lY3Rpb24oQVZDYXB0dXJlT3V0cHV0VHlwZSosIENNU2FtcGxlQnVmZmVy
UmVmIHNhbXBsZUJ1ZmZlciwgQVZDYXB0dXJlQ29ubmVjdGlvblR5cGUqIGNhcHR1cmVDb25uZWN0
aW9uKQpAQCAtNTQ5LDI0ICs1NDUsMjQgQEAgdm9pZCBBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6Y2Fw
dHVyZU91dHB1dERpZE91dHB1dFNhbXBsZUJ1ZmZlckZyb21Db25uZWN0aW9uKEFWQ2EKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgQ01WaWRlb0RpbWVuc2lvbnMgZGltZW5zaW9ucyA9IENNVmlkZW9G
b3JtYXREZXNjcmlwdGlvbkdldERpbWVuc2lvbnMoZm9ybWF0RGVzY3JpcHRpb24pOworICAgIFJl
ZlB0cjxNZWRpYVNhbXBsZT4gc2FtcGxlOwogICAgIGlmIChkaW1lbnNpb25zLndpZHRoICE9IG1f
cmVxdWVzdGVkU2l6ZS53aWR0aCgpIHx8IGRpbWVuc2lvbnMuaGVpZ2h0ICE9IG1fcmVxdWVzdGVk
U2l6ZS5oZWlnaHQoKSkgewotICAgICAgICBpZiAobV9waXhlbEJ1ZmZlclJlc2l6ZXIgJiYgIW1f
cGl4ZWxCdWZmZXJSZXNpemVyLT5jYW5SZXNpemVUbyhtX3JlcXVlc3RlZFNpemUpKQotICAgICAg
ICAgICAgbV9waXhlbEJ1ZmZlclJlc2l6ZXIgPSBudWxscHRyOwogCi0gICAgICAgIGlmICghbV9w
aXhlbEJ1ZmZlclJlc2l6ZXIpCi0gICAgICAgICAgICBtX3BpeGVsQnVmZmVyUmVzaXplciA9IHN0
ZDo6bWFrZV91bmlxdWU8UGl4ZWxCdWZmZXJSZXNpemVyPihtX3JlcXVlc3RlZFNpemUsIGF2Vmlk
ZW9DYXB0dXJlUGl4ZWxCdWZmZXJGb3JtYXQoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fcGl4
ZWxCdWZmZXJSZXNpemVyID0gbnVsbHB0cjsKKyAgICAgICAgaWYgKCFtX2ltYWdlVHJhbnNmZXJT
ZXNzaW9uKQorICAgICAgICAgICAgbV9pbWFnZVRyYW5zZmVyU2Vzc2lvbiA9IEltYWdlVHJhbnNm
ZXJTZXNzaW9uVlQ6OmNyZWF0ZShhdlZpZGVvQ2FwdHVyZVBpeGVsQnVmZmVyRm9ybWF0KCkpOwog
Ci0gICAgYXV0byBidWZmZXIgPSByZXRhaW5QdHIoc2FtcGxlQnVmZmVyKTsKLSAgICBpZiAobV9w
aXhlbEJ1ZmZlclJlc2l6ZXIpIHsKLSAgICAgICAgYnVmZmVyID0gbV9waXhlbEJ1ZmZlclJlc2l6
ZXItPnJlc2l6ZShzYW1wbGVCdWZmZXIpOwotICAgICAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICB9CisgICAgICAgIGlmIChtX2ltYWdlVHJhbnNmZXJTZXNzaW9uKSB7
CisgICAgICAgICAgICBzYW1wbGUgPSBtX2ltYWdlVHJhbnNmZXJTZXNzaW9uLT5jcmVhdGVNZWRp
YVNhbXBsZShzYW1wbGVCdWZmZXIsIG1fcmVxdWVzdGVkU2l6ZSwgbV9zYW1wbGVSb3RhdGlvbiwg
W2NhcHR1cmVDb25uZWN0aW9uIGlzVmlkZW9NaXJyb3JlZF0pOworICAgICAgICAgICAgaWYgKCFz
YW1wbGUpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAg
ICAgICAgc2FtcGxlID0gTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVhdGUoc2FtcGxlQnVmZmVyLCBt
X3NhbXBsZVJvdGF0aW9uLCBbY2FwdHVyZUNvbm5lY3Rpb24gaXNWaWRlb01pcnJvcmVkXSk7CiAK
LSAgICBzY2hlZHVsZURlZmVycmVkVGFzayhbdGhpcywgYnVmZmVyLCBjb25uZWN0aW9uID0gcmV0
YWluUHRyKGNhcHR1cmVDb25uZWN0aW9uKV0gewotICAgICAgICB0aGlzLT5wcm9jZXNzTmV3RnJh
bWUoYnVmZmVyLCBjb25uZWN0aW9uKTsKKyAgICBzY2hlZHVsZURlZmVycmVkVGFzayhbdGhpcywg
c2FtcGxlID0gV1RGTW92ZShzYW1wbGUpXSB7CisgICAgICAgIHByb2Nlc3NOZXdGcmFtZShzYW1w
bGUpOwogICAgIH0pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYS5j
cHAKaW5kZXggMzczZDBmOGE1M2E1ZTZhNmVhNGM3ZTRiZGY5NzZkOGVkZDk1NDQxZS4uNmEwM2Q4
ZmYxZGVjYmUxODFkNjhhNzhlNDcyMTk0MjVjZjM0YjBmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0Rpc3BsYXlDYXB0dXJlU291cmNlQ29jb2Eu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9EaXNwbGF5
Q2FwdHVyZVNvdXJjZUNvY29hLmNwcApAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKICNpbmNsdWRlICJNZWRpYVNhbXBsZUFWRk9iakMuaCIKICNpbmNsdWRlICJQaXhlbEJ1
ZmZlckNvbmZvcm1lckNWLmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXJSZXNpemVyLmgiCiAjaW5j
bHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZS5oIgogI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3Vy
Y2VDZW50ZXIuaCIKICNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MuaCIKQEAg
LTQyLDYgKzQxLDcgQEAKICNpbmNsdWRlIDxwYWwvYXZmb3VuZGF0aW9uL01lZGlhVGltZUFWRm91
bmRhdGlvbi5oPgogI2luY2x1ZGUgPHBhbC9jZi9Db3JlTWVkaWFTb2Z0TGluay5oPgogI2luY2x1
ZGUgPHBhbC9zcGkvY2YvQ29yZUF1ZGlvU1BJLmg+CisjaW5jbHVkZSA8cGFsL3NwaS9jZy9Db3Jl
R3JhcGhpY3NTUEkuaD4KICNpbmNsdWRlIDxzeXMvdGltZS5oPgogI2luY2x1ZGUgPHd0Zi9NYWlu
VGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CkBAIC03Miw3ICs3Miw3
IEBAIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmIERpc3BsYXlDYXB0dXJl
U291cmNlQ29jb2E6OmNhcGFiaWxpdGllcygpCiAgICAgICAgIC8vIEZJWE1FOiB3aGF0IHNob3Vs
ZCB0aGVzZSBiZT8KICAgICAgICAgY2FwYWJpbGl0aWVzLnNldFdpZHRoKENhcGFiaWxpdHlWYWx1
ZU9yUmFuZ2UoNzIsIDI4ODApKTsKICAgICAgICAgY2FwYWJpbGl0aWVzLnNldEhlaWdodChDYXBh
YmlsaXR5VmFsdWVPclJhbmdlKDQ1LCAxODAwKSk7Ci0gICAgICAgIGNhcGFiaWxpdGllcy5zZXRG
cmFtZVJhdGUoQ2FwYWJpbGl0eVZhbHVlT3JSYW5nZSguMDEsIDYwLjApKTsKKyAgICAgICAgY2Fw
YWJpbGl0aWVzLnNldEZyYW1lUmF0ZShDYXBhYmlsaXR5VmFsdWVPclJhbmdlKC4wMSwgMzAuMCkp
OwogCiAgICAgICAgIG1fY2FwYWJpbGl0aWVzID0gV1RGTW92ZShjYXBhYmlsaXRpZXMpOwogICAg
IH0KQEAgLTExMSwxMCArMTExLDggQEAgdm9pZCBEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpz
ZXR0aW5nc0RpZENoYW5nZShPcHRpb25TZXQ8UmVhbHRpbWVNZWRpYVNvdXJjZVMKICAgICBpZiAo
c2V0dGluZ3MuY29udGFpbnMoUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpGbGFnOjpGcmFt
ZVJhdGUpICYmIG1fdGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAgbV90aW1lci5zdGFydFJlcGVh
dGluZygxX3MgLyBmcmFtZVJhdGUoKSk7CiAKLSAgICBpZiAoc2V0dGluZ3MuY29udGFpbnNBbnko
eyBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M6OkZsYWc6OldpZHRoLCBSZWFsdGltZU1lZGlh
U291cmNlU2V0dGluZ3M6OkZsYWc6OkhlaWdodCB9KSkgeworICAgIGlmIChzZXR0aW5ncy5jb250
YWluc0FueSh7IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RmxhZzo6V2lkdGgsIFJlYWx0
aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RmxhZzo6SGVpZ2h0IH0pKQogICAgICAgICBtX2J1ZmZl
ckF0dHJpYnV0ZXMgPSBudWxscHRyOwotICAgICAgICBtX2xhc3RTYW1wbGVCdWZmZXIgPSBudWxs
cHRyOwotICAgIH0KIAogICAgIG1fY3VycmVudFNldHRpbmdzID0geyB9OwogfQpAQCAtMTU5LDcg
KzE1Nyw4IEBAIHZvaWQgRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6c2V0SW50cmluc2ljU2l6
ZShjb25zdCBJbnRTaXplJiBzaXplKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2ludHJpbnNp
Y1NpemUgPSBzaXplOwotICAgIG1fbGFzdFNhbXBsZUJ1ZmZlciA9IG51bGxwdHI7CisgICAgbm90
aWZ5U2V0dGluZ3NEaWRDaGFuZ2VPYnNlcnZlcnMoeyBSZWFsdGltZU1lZGlhU291cmNlU2V0dGlu
Z3M6OkZsYWc6OldpZHRoLCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M6OkZsYWc6OkhlaWdo
dCB9KTsKKwogfQogCiB2b2lkIERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OmVtaXRGcmFtZSgp
CkBAIC0xNjcsMTI0ICsxNjYsNDAgQEAgdm9pZCBEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpl
bWl0RnJhbWUoKQogICAgIGlmIChtdXRlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRv
IHBpeGVsQnVmZmVyID0gZ2VuZXJhdGVGcmFtZSgpOwotICAgIGlmICghcGl4ZWxCdWZmZXIpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2xhc3RTYW1wbGVCdWZmZXIgJiYgbV9sYXN0RnVs
bFNpemVkUGl4ZWxCdWZmZXIgJiYgQ0ZFcXVhbChtX2xhc3RGdWxsU2l6ZWRQaXhlbEJ1ZmZlci5n
ZXQoKSwgcGl4ZWxCdWZmZXIuZ2V0KCkpKSB7Ci0gICAgICAgIHZpZGVvU2FtcGxlQXZhaWxhYmxl
KE1lZGlhU2FtcGxlQVZGT2JqQzo6Y3JlYXRlKG1fbGFzdFNhbXBsZUJ1ZmZlci5nZXQoKSkpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9sYXN0RnVsbFNpemVkUGl4ZWxCdWZmZXIg
PSBwaXhlbEJ1ZmZlcjsKLQotICAgIGludCB3aWR0aCA9IFdURjo6c2FmZUNhc3Q8aW50PihDVlBp
eGVsQnVmZmVyR2V0V2lkdGgocGl4ZWxCdWZmZXIuZ2V0KCkpKTsKLSAgICBpbnQgaGVpZ2h0ID0g
V1RGOjpzYWZlQ2FzdDxpbnQ+KENWUGl4ZWxCdWZmZXJHZXRIZWlnaHQocGl4ZWxCdWZmZXIuZ2V0
KCkpKTsKLSAgICBhdXRvIHJlcXVlc3RlZFNpemUgPSBmcmFtZVNpemUoKTsKLSAgICBpZiAod2lk
dGggIT0gcmVxdWVzdGVkU2l6ZS53aWR0aCgpIHx8IGhlaWdodCAhPSByZXF1ZXN0ZWRTaXplLmhl
aWdodCgpKSB7Ci0gICAgICAgIGlmIChtX3BpeGVsQnVmZmVyUmVzaXplciAmJiAhbV9waXhlbEJ1
ZmZlclJlc2l6ZXItPmNhblJlc2l6ZVRvKHJlcXVlc3RlZFNpemUpKQotICAgICAgICAgICAgbV9w
aXhlbEJ1ZmZlclJlc2l6ZXIgPSBudWxscHRyOwotCi0gICAgICAgIGlmICghbV9waXhlbEJ1ZmZl
clJlc2l6ZXIpCi0gICAgICAgICAgICBtX3BpeGVsQnVmZmVyUmVzaXplciA9IHN0ZDo6bWFrZV91
bmlxdWU8UGl4ZWxCdWZmZXJSZXNpemVyPihyZXF1ZXN0ZWRTaXplLCBwcmVmZXJlZFBpeGVsQnVm
ZmVyRm9ybWF0KCkpOwotCi0gICAgICAgIHBpeGVsQnVmZmVyID0gbV9waXhlbEJ1ZmZlclJlc2l6
ZXItPnJlc2l6ZShwaXhlbEJ1ZmZlci5nZXQoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbV9w
aXhlbEJ1ZmZlclJlc2l6ZXIgPSBudWxscHRyOwotCi0gICAgICAgIGF1dG8gcGl4ZWxGb3JtYXRU
eXBlID0gQ1ZQaXhlbEJ1ZmZlckdldFBpeGVsRm9ybWF0VHlwZShwaXhlbEJ1ZmZlci5nZXQoKSk7
Ci0gICAgICAgIGlmIChwaXhlbEZvcm1hdFR5cGUgIT0gcHJlZmVyZWRQaXhlbEJ1ZmZlckZvcm1h
dCgpKSB7Ci0gICAgICAgICAgICBpZiAoIW1fcGl4ZWxCdWZmZXJDb25mb3JtZXIpIHsKLSAgICAg
ICAgICAgICAgICBhdXRvIHByZWZlcnJlZEZyb21hdCA9IHByZWZlcmVkUGl4ZWxCdWZmZXJGb3Jt
YXQoKTsKLSAgICAgICAgICAgICAgICBhdXRvIGNvbmZvcm1lckF0dHJpYnV0ZXMgPSBhZG9wdENG
KENGRGljdGlvbmFyeUNyZWF0ZU11dGFibGUobnVsbHB0ciwgMCwgJmtDRlR5cGVEaWN0aW9uYXJ5
S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwotICAgICAg
ICAgICAgICAgIGF1dG8gdmlkZW9UeXBlID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShudWxscHRy
LCAga0NGTnVtYmVyU0ludDMyVHlwZSwgICZwcmVmZXJyZWRGcm9tYXQpKTsKLSAgICAgICAgICAg
ICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShjb25mb3JtZXJBdHRyaWJ1dGVzLmdldCgpLCBrQ1ZQ
aXhlbEJ1ZmZlclBpeGVsRm9ybWF0VHlwZUtleSwgdmlkZW9UeXBlLmdldCgpKTsKLQotICAgICAg
ICAgICAgICAgIG1fcGl4ZWxCdWZmZXJDb25mb3JtZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFBpeGVs
QnVmZmVyQ29uZm9ybWVyQ1Y+KGNvbmZvcm1lckF0dHJpYnV0ZXMuZ2V0KCkpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBwaXhlbEJ1ZmZlciA9IG1fcGl4ZWxCdWZmZXJDb25mb3JtZXIt
PmNvbnZlcnQocGl4ZWxCdWZmZXIuZ2V0KCkpOworICAgIGlmICghbV9pbWFnZVRyYW5zZmVyU2Vz
c2lvbikKKyAgICAgICAgbV9pbWFnZVRyYW5zZmVyU2Vzc2lvbiA9IEltYWdlVHJhbnNmZXJTZXNz
aW9uVlQ6OmNyZWF0ZShwcmVmZXJlZFBpeGVsQnVmZmVyRm9ybWF0KCkpOworCisgICAgYXV0byBz
YW1wbGVUaW1lID0gTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKChlbGFwc2VkVGltZSgpICsg
MTAwX21zKS5zZWNvbmRzKCkpOworICAgIGF1dG8gZnJhbWUgPSBnZW5lcmF0ZUZyYW1lKCk7Cisg
ICAgSW50U2l6ZSBpbWFnZVNpemU7CisgICAgUmVmUHRyPE1lZGlhU2FtcGxlPiBzYW1wbGUgPSBX
VEY6OnN3aXRjaE9uKGZyYW1lLAorICAgICAgICBbdGhpcywgc2FtcGxlVGltZSwgJmltYWdlU2l6
ZV0oUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlKSAtPiBSZWZQdHI8TWVkaWFTYW1wbGU+IHsK
KyAgICAgICAgICAgIGlmICghaW1hZ2UpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICAgICAgICAgIGltYWdlU2l6ZSA9IEludFNpemUoQ0dJbWFnZUdldFdpZHRoKGltYWdl
LmdldCgpKSwgQ0dJbWFnZUdldEhlaWdodChpbWFnZS5nZXQoKSkpOworICAgICAgICAgICAgcmV0
dXJuIG1faW1hZ2VUcmFuc2ZlclNlc3Npb24tPmNyZWF0ZU1lZGlhU2FtcGxlKGltYWdlLmdldCgp
LCBzYW1wbGVUaW1lLCBpbWFnZVNpemUpOworICAgICAgICB9LAorICAgICAgICBbdGhpcywgc2Ft
cGxlVGltZSwgJmltYWdlU2l6ZV0oUmV0YWluUHRyPElPU3VyZmFjZVJlZj4gc3VyZmFjZSkgLT4g
UmVmUHRyPE1lZGlhU2FtcGxlPiB7CisgICAgICAgICAgICBpZiAoIXN1cmZhY2UpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgICAgIGltYWdlU2l6ZSA9IEludFNp
emUoSU9TdXJmYWNlR2V0V2lkdGgoc3VyZmFjZS5nZXQoKSksIElPU3VyZmFjZUdldEhlaWdodChz
dXJmYWNlLmdldCgpKSk7CisgICAgICAgICAgICByZXR1cm4gbV9pbWFnZVRyYW5zZmVyU2Vzc2lv
bi0+Y3JlYXRlTWVkaWFTYW1wbGUoc3VyZmFjZS5nZXQoKSwgc2FtcGxlVGltZSwgaW1hZ2VTaXpl
KTsKICAgICAgICAgfQotICAgIH0KLSAgICBpZiAoIXBpeGVsQnVmZmVyKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX2xhc3RTYW1wbGVCdWZmZXIgPSBzYW1wbGVCdWZmZXJGcm9tUGl4ZWxCdWZm
ZXIocGl4ZWxCdWZmZXIuZ2V0KCkpOwotICAgIGlmICghbV9sYXN0U2FtcGxlQnVmZmVyKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICB2aWRlb1NhbXBsZUF2YWlsYWJsZShNZWRpYVNhbXBsZUFWRk9i
akM6OmNyZWF0ZShtX2xhc3RTYW1wbGVCdWZmZXIuZ2V0KCkpKTsKLX0KLQotUmV0YWluUHRyPENN
U2FtcGxlQnVmZmVyUmVmPiBEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpzYW1wbGVCdWZmZXJG
cm9tUGl4ZWxCdWZmZXIoQ1ZQaXhlbEJ1ZmZlclJlZiBwaXhlbEJ1ZmZlcikKLXsKLSAgICBpZiAo
IXBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENNVGltZSBzYW1w
bGVUaW1lID0gQ01UaW1lTWFrZSgoKGVsYXBzZWRUaW1lKCkgKyAxMDBfbXMpICogMTAwKS5zZWNv
bmRzKCksIDEwMCk7Ci0gICAgQ01TYW1wbGVUaW1pbmdJbmZvIHRpbWluZ0luZm8gPSB7IGtDTVRp
bWVJbnZhbGlkLCBzYW1wbGVUaW1lLCBzYW1wbGVUaW1lIH07Ci0KLSAgICBDTVZpZGVvRm9ybWF0
RGVzY3JpcHRpb25SZWYgZm9ybWF0RGVzY3JpcHRpb24gPSBudWxscHRyOwotICAgIGF1dG8gc3Rh
dHVzID0gQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uQ3JlYXRlRm9ySW1hZ2VCdWZmZXIoa0NGQWxs
b2NhdG9yRGVmYXVsdCwgKENWSW1hZ2VCdWZmZXJSZWYpcGl4ZWxCdWZmZXIsICZmb3JtYXREZXNj
cmlwdGlvbik7Ci0gICAgaWYgKHN0YXR1cykgewotICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwg
IkZhaWxlZCB0byBpbml0aWFsaXplIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbiB3aXRoIGVycm9y
IGNvZGU6ICVkIiwgc3RhdGljX2Nhc3Q8aW50PihzdGF0dXMpKTsKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgfQotCi0gICAgQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlQnVmZmVyOwotICAg
IHN0YXR1cyA9IENNU2FtcGxlQnVmZmVyQ3JlYXRlUmVhZHlXaXRoSW1hZ2VCdWZmZXIoa0NGQWxs
b2NhdG9yRGVmYXVsdCwgKENWSW1hZ2VCdWZmZXJSZWYpcGl4ZWxCdWZmZXIsIGZvcm1hdERlc2Ny
aXB0aW9uLCAmdGltaW5nSW5mbywgJnNhbXBsZUJ1ZmZlcik7Ci0gICAgQ0ZSZWxlYXNlKGZvcm1h
dERlc2NyaXB0aW9uKTsKLSAgICBpZiAoc3RhdHVzKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HKE1l
ZGlhLCAiRmFpbGVkIHRvIGluaXRpYWxpemUgQ01TYW1wbGVCdWZmZXIgd2l0aCBlcnJvciBjb2Rl
OiAlZCIsIHN0YXRpY19jYXN0PGludD4oc3RhdHVzKSk7Ci0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIH0KLQotICAgIHJldHVybiBhZG9wdENGKHNhbXBsZUJ1ZmZlcik7Ci19CisgICAgKTsK
IAotI2lmIEhBVkUoSU9TVVJGQUNFKSAmJiBQTEFURk9STShNQUMpCi1zdGF0aWMgaW50MzJfdCBy
b3VuZFVwVG9NYWNyb2Jsb2NrTXVsdGlwbGUoaW50MzJfdCBzaXplKQotewotICAgIHJldHVybiAo
c2l6ZSArIDE1KSAmIH4xNTsKLX0KIAotUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJSZWY+IERpc3Bs
YXlDYXB0dXJlU291cmNlQ29jb2E6OnBpeGVsQnVmZmVyRnJvbUlPU3VyZmFjZShJT1N1cmZhY2VS
ZWYgc3VyZmFjZSkKLXsKLSAgICBpZiAoIW1fYnVmZmVyQXR0cmlidXRlcykgewotICAgICAgICBt
X2J1ZmZlckF0dHJpYnV0ZXMgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZU11dGFibGUobnVs
bHB0ciwgMCwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25h
cnlWYWx1ZUNhbGxCYWNrcykpOwotCi0gICAgICAgIGF1dG8gZm9ybWF0ID0gSU9TdXJmYWNlR2V0
UGl4ZWxGb3JtYXQoc3VyZmFjZSk7Ci0gICAgICAgIGlmIChmb3JtYXQgPT0ga0NWUGl4ZWxGb3Jt
YXRUeXBlXzQyMFlwQ2JDcjhCaVBsYW5hclZpZGVvUmFuZ2UgfHwgZm9ybWF0ID09IGtDVlBpeGVs
Rm9ybWF0VHlwZV80MjBZcENiQ3I4QmlQbGFuYXJGdWxsUmFuZ2UpIHsKLQotICAgICAgICAgICAg
Ly8gSWYgdGhlIHdpZHRoIHggaGVpZ2h0IGlzbid0IGEgbXVsdGlwbGUgb2YgMTYgeCAxNiBhbmQg
dGhlIHN1cmZhY2UgaGFzIGV4dHJhIG1lbW9yeSBpbiB0aGUgcGxhbmVzLCBzZXQgcGl4ZWwgYnVm
ZmVyIGF0dHJpYnV0ZXMgdG8gcmVmbGVjdCBpdC4KLSAgICAgICAgICAgIGF1dG8gd2lkdGggPSBJ
T1N1cmZhY2VHZXRXaWR0aChzdXJmYWNlKTsKLSAgICAgICAgICAgIGF1dG8gaGVpZ2h0ID0gSU9T
dXJmYWNlR2V0SGVpZ2h0KHN1cmZhY2UpOwotICAgICAgICAgICAgaW50MzJfdCBleHRlbmRlZFJp
Z2h0ID0gcm91bmRVcFRvTWFjcm9ibG9ja011bHRpcGxlKHdpZHRoKSAtIHdpZHRoOwotICAgICAg
ICAgICAgaW50MzJfdCBleHRlbmRlZEJvdHRvbSA9IHJvdW5kVXBUb01hY3JvYmxvY2tNdWx0aXBs
ZShoZWlnaHQpIC0gaGVpZ2h0OwotCi0gICAgICAgICAgICBpZiAoKElPU3VyZmFjZUdldEJ5dGVz
UGVyUm93T2ZQbGFuZShzdXJmYWNlLCAwKSA+PSB3aWR0aCArIGV4dGVuZGVkUmlnaHQpCi0gICAg
ICAgICAgICAgICAgJiYgKElPU3VyZmFjZUdldEJ5dGVzUGVyUm93T2ZQbGFuZShzdXJmYWNlLCAx
KSA+PSB3aWR0aCArIGV4dGVuZGVkUmlnaHQpCi0gICAgICAgICAgICAgICAgJiYgKElPU3VyZmFj
ZUdldEFsbG9jU2l6ZShzdXJmYWNlKSA+PSAoaGVpZ2h0ICsgZXh0ZW5kZWRCb3R0b20pICogSU9T
dXJmYWNlR2V0Qnl0ZXNQZXJSb3dPZlBsYW5lKHN1cmZhY2UsIDApICogMyAvIDIpKSB7Ci0gICAg
ICAgICAgICAgICAgYXV0byBjZkludCA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUobnVsbHB0ciwg
IGtDRk51bWJlckludFR5cGUsICAmZXh0ZW5kZWRSaWdodCkpOwotICAgICAgICAgICAgICAgIENG
RGljdGlvbmFyeVNldFZhbHVlKG1fYnVmZmVyQXR0cmlidXRlcy5nZXQoKSwga0NWUGl4ZWxCdWZm
ZXJFeHRlbmRlZFBpeGVsc1JpZ2h0S2V5LCBjZkludC5nZXQoKSk7Ci0gICAgICAgICAgICAgICAg
Y2ZJbnQgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKG51bGxwdHIsICBrQ0ZOdW1iZXJJbnRUeXBl
LCAgJmV4dGVuZGVkQm90dG9tKSk7Ci0gICAgICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFs
dWUobV9idWZmZXJBdHRyaWJ1dGVzLmdldCgpLCBrQ1ZQaXhlbEJ1ZmZlckV4dGVuZGVkUGl4ZWxz
Qm90dG9tS2V5LCBjZkludC5nZXQoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShtX2J1ZmZlckF0dHJpYnV0ZXMuZ2V0KCksIGtDVlBp
eGVsQnVmZmVyT3BlbkdMQ29tcGF0aWJpbGl0eUtleSwga0NGQm9vbGVhblRydWUpOworICAgIGlm
ICghc2FtcGxlKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgQ1ZQaXhlbEJ1ZmZlclJlZiBwaXhlbEJ1ZmZlcjsKLSAgICBhdXRv
IHN0YXR1cyA9IENWUGl4ZWxCdWZmZXJDcmVhdGVXaXRoSU9TdXJmYWNlKGtDRkFsbG9jYXRvckRl
ZmF1bHQsIHN1cmZhY2UsIG1fYnVmZmVyQXR0cmlidXRlcy5nZXQoKSwgJnBpeGVsQnVmZmVyKTsK
LSAgICBpZiAoc3RhdHVzKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhLCAiQ1ZQaXhlbEJ1
ZmZlckNyZWF0ZVdpdGhJT1N1cmZhY2UgZmFpbGVkIHdpdGggZXJyb3IgY29kZTogJWQiLCBzdGF0
aWNfY2FzdDxpbnQ+KHN0YXR1cykpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Cisg
ICAgaWYgKG1faW50cmluc2ljU2l6ZSAhPSBpbWFnZVNpemUpCisgICAgICAgIHNldEludHJpbnNp
Y1NpemUoaW1hZ2VTaXplKTsKIAotICAgIHJldHVybiBhZG9wdENGKHBpeGVsQnVmZmVyKTsKKyAg
ICB2aWRlb1NhbXBsZUF2YWlsYWJsZSgqc2FtcGxlLmdldCgpKTsKIH0KLSNlbmRpZgogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL21hYy9EaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYS5o
CmluZGV4IGJmZTQwYjg2MDU4MWYxY2RiOTMxYjM1Y2JmNDdmZjA3MmMzYmFhYTUuLjljMDllYzhk
MzIxNDAyNGQ0ZTZiNjdkMmJmMDIyZmRkMDM0ZjM1YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9EaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0Rpc3BsYXlDYXB0
dXJlU291cmNlQ29jb2EuaApAQCAtMjgsMTIgKzI4LDE0IEBACiAjaWYgRU5BQkxFKE1FRElBX1NU
UkVBTSkKIAogI2luY2x1ZGUgIkNhcHR1cmVEZXZpY2UuaCIKKyNpbmNsdWRlICJJbWFnZVRyYW5z
ZmVyU2Vzc2lvblZULmgiCiAjaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZS5oIgogI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9SdW5Mb29wLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKK3R5cGVk
ZWYgc3RydWN0IENHSW1hZ2UgKkNHSW1hZ2VSZWY7CiB0eXBlZGVmIHN0cnVjdCBfX0NWQnVmZmVy
ICpDVlBpeGVsQnVmZmVyUmVmOwogdHlwZWRlZiBzdHJ1Y3QgX19JT1N1cmZhY2UgKklPU3VyZmFj
ZVJlZjsKIApAQCAtNDQsOCArNDYsOCBAQCBjbGFzcyBNZWRpYVRpbWU7CiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIENhcHR1cmVEZXZpY2VJbmZvOworY2xhc3MgSW1hZ2VUcmFuc2ZlclNl
c3Npb25WVDsKIGNsYXNzIFBpeGVsQnVmZmVyQ29uZm9ybWVyQ1Y7Ci1jbGFzcyBQaXhlbEJ1ZmZl
clJlc2l6ZXI7CiAKIGNsYXNzIERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2EgOiBwdWJsaWMgUmVh
bHRpbWVNZWRpYVNvdXJjZSB7CiBwdWJsaWM6CkBAIC01NCw3ICs1Niw5IEBAIHByb3RlY3RlZDoK
ICAgICBEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hKFN0cmluZyYmIG5hbWUpOwogICAgIHZpcnR1
YWwgfkRpc3BsYXlDYXB0dXJlU291cmNlQ29jb2EoKTsKIAotICAgIHZpcnR1YWwgUmV0YWluUHRy
PENWUGl4ZWxCdWZmZXJSZWY+IGdlbmVyYXRlRnJhbWUoKSA9IDA7CisgICAgdXNpbmcgRGlzcGxh
eUZyYW1lVHlwZSA9IFdURjo6VmFyaWFudDxSZXRhaW5QdHI8Q0dJbWFnZVJlZj4sIFJldGFpblB0
cjxJT1N1cmZhY2VSZWY+PjsKKyAgICB2aXJ0dWFsIERpc3BsYXlGcmFtZVR5cGUgZ2VuZXJhdGVG
cmFtZSgpID0gMDsKKwogICAgIHZpcnR1YWwgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpE
aXNwbGF5U3VyZmFjZVR5cGUgc3VyZmFjZVR5cGUoKSBjb25zdCA9IDA7CiAKICAgICB2b2lkIHN0
YXJ0UHJvZHVjaW5nRGF0YSgpIG92ZXJyaWRlOwpAQCAtNjIsMTEgKzY2LDYgQEAgcHJvdGVjdGVk
OgogCiAgICAgU2Vjb25kcyBlbGFwc2VkVGltZSgpOwogCi0gICAgUmV0YWluUHRyPENNU2FtcGxl
QnVmZmVyUmVmPiBzYW1wbGVCdWZmZXJGcm9tUGl4ZWxCdWZmZXIoQ1ZQaXhlbEJ1ZmZlclJlZik7
Ci0jaWYgSEFWRShJT1NVUkZBQ0UpCi0gICAgUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJSZWY+IHBp
eGVsQnVmZmVyRnJvbUlPU3VyZmFjZShJT1N1cmZhY2VSZWYpOwotI2VuZGlmCi0KICAgICB2b2lk
IHNldHRpbmdzRGlkQ2hhbmdlKE9wdGlvblNldDxSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M6
OkZsYWc+KSBvdmVycmlkZTsKIAogICAgIGNvbnN0IEludFNpemUmIGludHJpbnNpY1NpemUoKSBj
b25zdCB7IHJldHVybiBtX2ludHJpbnNpY1NpemU7IH0KQEAgLTkzLDEwICs5Miw3IEBAIHByaXZh
dGU6CiAgICAgUmV0YWluUHRyPENGTXV0YWJsZURpY3Rpb25hcnlSZWY+IG1fYnVmZmVyQXR0cmli
dXRlczsKICAgICBSdW5Mb29wOjpUaW1lcjxEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hPiBtX3Rp
bWVyOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPFBpeGVsQnVmZmVyUmVzaXplcj4gbV9waXhlbEJ1
ZmZlclJlc2l6ZXI7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFBpeGVsQnVmZmVyQ29uZm9ybWVyQ1Y+
IG1fcGl4ZWxCdWZmZXJDb25mb3JtZXI7Ci0gICAgUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJSZWY+
IG1fbGFzdEZ1bGxTaXplZFBpeGVsQnVmZmVyOwotICAgIFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZl
clJlZj4gbV9sYXN0U2FtcGxlQnVmZmVyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZVRyYW5z
ZmVyU2Vzc2lvblZUPiBtX2ltYWdlVHJhbnNmZXJTZXNzaW9uOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbWFjL01vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMuaAppbmRleCA5
Yzc0ZGRlMTgzMWU0NzFhMTA3NjAxYjAzZTY2NTQ3Yzc2OWEwOGVhLi5lOGJlODJmNjhmN2M2OTEx
NTIxODg5MWNkNDQ2OTgzZGY2OTYyNmI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9T
b3VyY2VNYWMuaApAQCAtNDMsNyArNDMsNyBAQCB0eXBlZGVmIHN0cnVjdCBfX0NWUGl4ZWxCdWZm
ZXJQb29sICpDVlBpeGVsQnVmZmVyUG9vbFJlZjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBQaXhlbEJ1ZmZlclJlc2l6ZXI7CitjbGFzcyBJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOwog
CiBjbGFzcyBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYyBmaW5hbCA6IHB1YmxpYyBNb2NrUmVh
bHRpbWVWaWRlb1NvdXJjZSwgcHJpdmF0ZSBPcmllbnRhdGlvbk5vdGlmaWVyOjpPYnNlcnZlciB7
CiBwdWJsaWM6CkBAIC01MywxNCArNTMsMTAgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3Mg
TW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2U7CiAgICAgTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMo
U3RyaW5nJiYgZGV2aWNlSUQsIFN0cmluZyYmIG5hbWUsIFN0cmluZyYmIGhhc2hTYWx0KTsKIAot
ICAgIFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4gQ01TYW1wbGVCdWZmZXJGcm9tUGl4ZWxC
dWZmZXIoQ1ZQaXhlbEJ1ZmZlclJlZik7Ci0gICAgUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJSZWY+
IHBpeGVsQnVmZmVyRnJvbUNHSW1hZ2UoQ0dJbWFnZVJlZikgY29uc3Q7Ci0KICAgICBQbGF0Zm9y
bUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CiAgICAgdm9pZCB1cGRhdGVTYW1wbGVCdWZm
ZXIoKSBmaW5hbDsKICAgICB2b2lkIHNldHRpbmdzRGlkQ2hhbmdlKE9wdGlvblNldDxSZWFsdGlt
ZU1lZGlhU291cmNlU2V0dGluZ3M6OkZsYWc+KSBmaW5hbDsKICAgICBib29sIGNhblJlc2l6ZVZp
ZGVvRnJhbWVzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZvaWQgc2V0U2l6
ZUFuZEZyYW1lUmF0ZVdpdGhQcmVzZXQoSW50U2l6ZSwgZG91YmxlLCBSZWZQdHI8VmlkZW9QcmVz
ZXQ+KSBmaW5hbDsKIAogICAgIHZvaWQgb3JpZW50YXRpb25DaGFuZ2VkKGludCBvcmllbnRhdGlv
bikgZmluYWw7CiAgICAgdm9pZCBtb25pdG9yT3JpZW50YXRpb24oT3JpZW50YXRpb25Ob3RpZmll
ciYpIGZpbmFsOwpAQCAtNjgsNyArNjQsNyBAQCBwcml2YXRlOgogICAgIG11dGFibGUgUmV0YWlu
UHRyPENWUGl4ZWxCdWZmZXJQb29sUmVmPiBtX2J1ZmZlclBvb2w7CiAgICAgTWVkaWFTYW1wbGU6
OlZpZGVvUm90YXRpb24gbV9kZXZpY2VPcmllbnRhdGlvbiB7IE1lZGlhU2FtcGxlOjpWaWRlb1Jv
dGF0aW9uOjpOb25lIH07CiAgICAgc3RkOjp1bmlxdWVfcHRyPFBpeGVsQnVmZmVyQ29uZm9ybWVy
Q1Y+IG1fcGl4ZWxCdWZmZXJDb25mb3JtZXI7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFBpeGVsQnVm
ZmVyUmVzaXplcj4gbV9waXhlbEJ1ZmZlclJlc2l6ZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPElt
YWdlVHJhbnNmZXJTZXNzaW9uVlQ+IG1faW1hZ2VUcmFuc2ZlclNlc3Npb247CiAgICAgSW50U2l6
ZSBtX3ByZXNldFNpemU7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VN
YWMubW0KaW5kZXggMjNhMTY5NjJiNTM5NDE4NGM1ZjY1NGU5ZWM1ZTFkMWZlOTBjZDI5YS4uNzI1
OWRiMWU4NWQwZjJkZjYxZTQ0ZWJmN2U1ZTMwOTQxNDRmZTM2NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01vY2tSZWFsdGltZVZpZGVvU291cmNl
TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2Nr
UmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbQpAQCAtMzQsMTAgKzM0LDEwIEBACiAjaWYgRU5BQkxF
KE1FRElBX1NUUkVBTSkKICNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW1wb3J0ICJJ
bWFnZUJ1ZmZlci5oIgorI2ltcG9ydCAiSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5oIgogI2ltcG9y
dCAiTWVkaWFDb25zdHJhaW50cy5oIgogI2ltcG9ydCAiTWVkaWFTYW1wbGVBVkZPYmpDLmgiCiAj
aW1wb3J0ICJOb3RJbXBsZW1lbnRlZC5oIgotI2ltcG9ydCAiUGl4ZWxCdWZmZXJSZXNpemVyLmgi
CiAjaW1wb3J0ICJQbGF0Zm9ybUxheWVyLmgiCiAjaW1wb3J0ICJSZWFsdGltZU1lZGlhU291cmNl
U2V0dGluZ3MuaCIKICNpbXBvcnQgIlJlYWx0aW1lVmlkZW9VdGlsaXRpZXMuaCIKQEAgLTUxLDgg
KzUxLDYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBQQUw7CiAKLXN0
YXRpYyBjb25zdCBpbnQgdmlkZW9TYW1wbGVSYXRlID0gOTAwMDA7Ci0KIENhcHR1cmVTb3VyY2VP
ckVycm9yIE1vY2tSZWFsdGltZVZpZGVvU291cmNlOjpjcmVhdGUoU3RyaW5nJiYgZGV2aWNlSUQs
IFN0cmluZyYmIG5hbWUsIFN0cmluZyYmIGhhc2hTYWx0LCBjb25zdCBNZWRpYUNvbnN0cmFpbnRz
KiBjb25zdHJhaW50cykKIHsKICNpZm5kZWYgTkRFQlVHCkBAIC03NSw5OCArNzMsMjQgQEAgTW9j
a1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWM6Ok1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjKFN0cmlu
ZyYmIGRldmljZUlELCBTdHJpbmcKIHsKIH0KIAotUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVm
PiBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYzo6Q01TYW1wbGVCdWZmZXJGcm9tUGl4ZWxCdWZm
ZXIoQ1ZQaXhlbEJ1ZmZlclJlZiBwaXhlbEJ1ZmZlcikKLXsKLSAgICBpZiAoIXBpeGVsQnVmZmVy
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICBDTVRpbWUgc2FtcGxlVGltZSA9
IENNVGltZU1ha2UoKChlbGFwc2VkVGltZSgpICsgMTAwX21zKSAqIHZpZGVvU2FtcGxlUmF0ZSku
c2Vjb25kcygpLCB2aWRlb1NhbXBsZVJhdGUpOwotICAgIENNU2FtcGxlVGltaW5nSW5mbyB0aW1p
bmdJbmZvID0geyBrQ01UaW1lSW52YWxpZCwgc2FtcGxlVGltZSwgc2FtcGxlVGltZSB9OwotCi0g
ICAgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uUmVmIGZvcm1hdERlc2NyaXB0aW9uID0gbnVsbHB0
cjsKLSAgICBPU1N0YXR1cyBzdGF0dXMgPSBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25DcmVhdGVG
b3JJbWFnZUJ1ZmZlcihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAoQ1ZJbWFnZUJ1ZmZlclJlZilwaXhl
bEJ1ZmZlciwgJmZvcm1hdERlc2NyaXB0aW9uKTsKLSAgICBpZiAoc3RhdHVzICE9IG5vRXJyKSB7
Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGluaXRpYWxpemUgQ01WaWRlb0Zvcm1hdERl
c2NyaXB0aW9uIHdpdGggZXJyb3IgY29kZTogJWQiLCBzdGF0dXMpOwotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICB9Ci0KLSAgICBDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGVCdWZmZXI7Ci0g
ICAgc3RhdHVzID0gQ01TYW1wbGVCdWZmZXJDcmVhdGVSZWFkeVdpdGhJbWFnZUJ1ZmZlcihrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCAoQ1ZJbWFnZUJ1ZmZlclJlZilwaXhlbEJ1ZmZlciwgZm9ybWF0RGVz
Y3JpcHRpb24sICZ0aW1pbmdJbmZvLCAmc2FtcGxlQnVmZmVyKTsKLSAgICBDRlJlbGVhc2UoZm9y
bWF0RGVzY3JpcHRpb24pOwotICAgIGlmIChzdGF0dXMgIT0gbm9FcnIpIHsKLSAgICAgICAgTE9H
X0VSUk9SKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBDTVNhbXBsZUJ1ZmZlciB3aXRoIGVycm9yIGNv
ZGU6ICVkIiwgc3RhdHVzKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAg
cmV0dXJuIGFkb3B0Q0Yoc2FtcGxlQnVmZmVyKTsKLX0KLQotUmV0YWluUHRyPENWUGl4ZWxCdWZm
ZXJSZWY+IE1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjOjpwaXhlbEJ1ZmZlckZyb21DR0ltYWdl
KENHSW1hZ2VSZWYgaW1hZ2UpIGNvbnN0Ci17Ci0gICAgc3RhdGljIENHQ29sb3JTcGFjZVJlZiBz
UkdCQ29sb3JTcGFjZSA9IHNSR0JDb2xvclNwYWNlUmVmKCk7Ci0KLSAgICBDR1NpemUgaW1hZ2VT
aXplID0gQ0dTaXplTWFrZShDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpLCBDR0ltYWdlR2V0SGVpZ2h0
KGltYWdlKSk7Ci0gICAgaWYgKCFtX2J1ZmZlclBvb2wpIHsKLSAgICAgICAgQ1ZQaXhlbEJ1ZmZl
clBvb2xSZWYgYnVmZmVyUG9vbDsKLSAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIHNvdXJjZVBpeGVs
QnVmZmVyT3B0aW9ucyA9IChfX2JyaWRnZSBDRkRpY3Rpb25hcnlSZWYpIEB7Ci0gICAgICAgICAg
ICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ1ZQaXhlbEJ1ZmZlclBpeGVsRm9ybWF0VHlwZUtleSA6
IEAoa0NWUGl4ZWxGb3JtYXRUeXBlXzMyQVJHQiksCi0gICAgICAgICAgICAoX19icmlkZ2UgTlNT
dHJpbmcgKilrQ1ZQaXhlbEJ1ZmZlcldpZHRoS2V5IDogQChpbWFnZVNpemUud2lkdGgpLAotICAg
ICAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxCdWZmZXJIZWlnaHRLZXkgOiBA
KGltYWdlU2l6ZS5oZWlnaHQpLAotI2lmIFBMQVRGT1JNKElPUykKLSAgICAgICAgICAgIChfX2Jy
aWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsRm9ybWF0T3BlbkdMRVNDb21wYXRpYmlsaXR5IDogQChZ
RVMpLAotI2Vsc2UKLSAgICAgICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsQnVm
ZmVyT3BlbkdMQ29tcGF0aWJpbGl0eUtleSA6IEAoWUVTKSwKLSNlbmRpZgotICAgICAgICAgICAg
KF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxCdWZmZXJJT1N1cmZhY2VQcm9wZXJ0aWVzS2V5
IDogQHsvKmVtcHR5IGRpY3Rpb25hcnkqL30KLSAgICAgICAgfTsKLQotICAgICAgICBDRkRpY3Rp
b25hcnlSZWYgcGl4ZWxCdWZmZXJQb29sT3B0aW9ucyA9IChfX2JyaWRnZSBDRkRpY3Rpb25hcnlS
ZWYpIEB7Ci0gICAgICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsQnVmZmVyUG9v
bE1pbmltdW1CdWZmZXJDb3VudEtleSA6IEAoNCkKLSAgICAgICAgfTsKLQotICAgICAgICBDVlJl
dHVybiBzdGF0dXMgPSBDVlBpeGVsQnVmZmVyUG9vbENyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCBwaXhlbEJ1ZmZlclBvb2xPcHRpb25zLCBzb3VyY2VQaXhlbEJ1ZmZlck9wdGlvbnMsICZidWZm
ZXJQb29sKTsKLSAgICAgICAgaWYgKHN0YXR1cyAhPSBrQ1ZSZXR1cm5TdWNjZXNzKQotICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgbV9idWZmZXJQb29sID0gYWRvcHRDRihi
dWZmZXJQb29sKTsKLSAgICB9Ci0KLSAgICBDVlBpeGVsQnVmZmVyUmVmIHBpeGVsQnVmZmVyOwot
ICAgIENWUmV0dXJuIHN0YXR1cyA9IENWUGl4ZWxCdWZmZXJQb29sQ3JlYXRlUGl4ZWxCdWZmZXIo
bnVsbHB0ciwgbV9idWZmZXJQb29sLmdldCgpLCAmcGl4ZWxCdWZmZXIpOwotICAgIGlmIChzdGF0
dXMgIT0ga0NWUmV0dXJuU3VjY2VzcykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBD
VlBpeGVsQnVmZmVyTG9ja0Jhc2VBZGRyZXNzKHBpeGVsQnVmZmVyLCAwKTsKLSAgICB2b2lkKiBk
YXRhID0gQ1ZQaXhlbEJ1ZmZlckdldEJhc2VBZGRyZXNzKHBpeGVsQnVmZmVyKTsKLSAgICBhdXRv
IGNvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShkYXRhLCBpbWFnZVNpemUu
d2lkdGgsIGltYWdlU2l6ZS5oZWlnaHQsIDgsIENWUGl4ZWxCdWZmZXJHZXRCeXRlc1BlclJvdyhw
aXhlbEJ1ZmZlciksIHNSR0JDb2xvclNwYWNlLCAoQ0dCaXRtYXBJbmZvKSBrQ0dJbWFnZUFscGhh
Tm9uZVNraXBGaXJzdCkpOwotICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBD
R1JlY3RNYWtlKDAsIDAsIENHSW1hZ2VHZXRXaWR0aChpbWFnZSksIENHSW1hZ2VHZXRIZWlnaHQo
aW1hZ2UpKSwgaW1hZ2UpOwotICAgIENWUGl4ZWxCdWZmZXJVbmxvY2tCYXNlQWRkcmVzcyhwaXhl
bEJ1ZmZlciwgMCk7Ci0KLSAgICByZXR1cm4gYWRvcHRDRihwaXhlbEJ1ZmZlcik7Ci19Ci0KIHZv
aWQgTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWM6OnVwZGF0ZVNhbXBsZUJ1ZmZlcigpCiB7CiAg
ICAgYXV0byBpbWFnZUJ1ZmZlciA9IHRoaXMtPmltYWdlQnVmZmVyKCk7CiAgICAgaWYgKCFpbWFn
ZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBwaXhlbEJ1ZmZlciA9IHBpeGVs
QnVmZmVyRnJvbUNHSW1hZ2UoaW1hZ2VCdWZmZXItPmNvcHlJbWFnZSgpLT5uYXRpdmVJbWFnZSgp
LmdldCgpKTsKLSAgICBpZiAobV9waXhlbEJ1ZmZlclJlc2l6ZXIpCi0gICAgICAgIHBpeGVsQnVm
ZmVyID0gbV9waXhlbEJ1ZmZlclJlc2l6ZXItPnJlc2l6ZShwaXhlbEJ1ZmZlci5nZXQoKSk7Ci0g
ICAgZWxzZSB7Ci0gICAgICAgIGlmICghbV9waXhlbEJ1ZmZlckNvbmZvcm1lcikgewotICAgICAg
ICAgICAgbV9waXhlbEJ1ZmZlckNvbmZvcm1lciA9IHN0ZDo6bWFrZV91bmlxdWU8UGl4ZWxCdWZm
ZXJDb25mb3JtZXJDVj4oKF9fYnJpZGdlIENGRGljdGlvbmFyeVJlZilAewotICAgICAgICAgICAg
ICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsQnVmZmVyUGl4ZWxGb3JtYXRUeXBlS2V5
OiBAKHByZWZlcmVkUGl4ZWxCdWZmZXJGb3JtYXQoKSkKLSAgICAgICAgICAgIH0pOwotICAgICAg
ICB9Ci0KLSAgICAgICAgcGl4ZWxCdWZmZXIgPSBtX3BpeGVsQnVmZmVyQ29uZm9ybWVyLT5jb252
ZXJ0KHBpeGVsQnVmZmVyLmdldCgpKTsKLSAgICB9Ci0gICAgYXV0byBzYW1wbGVCdWZmZXIgPSBD
TVNhbXBsZUJ1ZmZlckZyb21QaXhlbEJ1ZmZlcihwaXhlbEJ1ZmZlci5nZXQoKSk7CisgICAgaWYg
KCFtX2ltYWdlVHJhbnNmZXJTZXNzaW9uKQorICAgICAgICBtX2ltYWdlVHJhbnNmZXJTZXNzaW9u
ID0gSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlKHByZWZlcmVkUGl4ZWxCdWZmZXJGb3Jt
YXQoKSk7CisgICAgaWYgKCFtX2ltYWdlVHJhbnNmZXJTZXNzaW9uKQorICAgICAgICByZXR1cm47
CisKKyAgICBhdXRvIHNhbXBsZVRpbWUgPSBNZWRpYVRpbWU6OmNyZWF0ZVdpdGhEb3VibGUoKGVs
YXBzZWRUaW1lKCkgKyAxMDBfbXMpLnNlY29uZHMoKSk7CisgICAgYXV0byBzYW1wbGVCdWZmZXIg
PSBtX2ltYWdlVHJhbnNmZXJTZXNzaW9uLT5jcmVhdGVNZWRpYVNhbXBsZShpbWFnZUJ1ZmZlci0+
Y29weUltYWdlKCktPm5hdGl2ZUltYWdlKCkuZ2V0KCksIHNhbXBsZVRpbWUsIHNpemUoKSwgbV9k
ZXZpY2VPcmllbnRhdGlvbik7CisgICAgaWYgKCFzYW1wbGVCdWZmZXIpCisgICAgICAgIHJldHVy
bjsKIAogICAgIC8vIFdlIHVzZSBtX2RldmljZU9yaWVudGF0aW9uIHRvIGVtdWxhdGUgc2Vuc29y
IG9yaWVudGF0aW9uCi0gICAgZGlzcGF0Y2hNZWRpYVNhbXBsZVRvT2JzZXJ2ZXJzKE1lZGlhU2Ft
cGxlQVZGT2JqQzo6Y3JlYXRlKHNhbXBsZUJ1ZmZlci5nZXQoKSwgbV9kZXZpY2VPcmllbnRhdGlv
bikpOworICAgIGRpc3BhdGNoTWVkaWFTYW1wbGVUb09ic2VydmVycygqc2FtcGxlQnVmZmVyLmdl
dCgpKTsKIH0KIAogdm9pZCBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYzo6c2V0dGluZ3NEaWRD
aGFuZ2UoT3B0aW9uU2V0PFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RmxhZz4gc2V0dGlu
Z3MpCkBAIC0yMDMsMjEgKzEyNyw2IEBAIHZvaWQgTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWM6
Om1vbml0b3JPcmllbnRhdGlvbihPcmllbnRhdGlvbk5vdGlmaWVyJiBub3RpZmllCiAgICAgb3Jp
ZW50YXRpb25DaGFuZ2VkKG5vdGlmaWVyLm9yaWVudGF0aW9uKCkpOwogfQogCi12b2lkIE1vY2tS
ZWFsdGltZVZpZGVvU291cmNlTWFjOjpzZXRTaXplQW5kRnJhbWVSYXRlV2l0aFByZXNldChJbnRT
aXplIHJlcXVlc3RlZFNpemUsIGRvdWJsZSwgUmVmUHRyPFZpZGVvUHJlc2V0PiBwcmVzZXQpCi17
Ci0gICAgaWYgKCFwcmVzZXQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChwcmVzZXQtPnNp
emUgIT0gcmVxdWVzdGVkU2l6ZSkgewotICAgICAgICBpZiAobV9waXhlbEJ1ZmZlclJlc2l6ZXIg
JiYgIW1fcGl4ZWxCdWZmZXJSZXNpemVyLT5jYW5SZXNpemVUbyhyZXF1ZXN0ZWRTaXplKSkKLSAg
ICAgICAgICAgIG1fcGl4ZWxCdWZmZXJSZXNpemVyID0gbnVsbHB0cjsKLQotICAgICAgICBpZiAo
IW1fcGl4ZWxCdWZmZXJSZXNpemVyKQotICAgICAgICAgICAgbV9waXhlbEJ1ZmZlclJlc2l6ZXIg
PSBzdGQ6Om1ha2VfdW5pcXVlPFBpeGVsQnVmZmVyUmVzaXplcj4ocmVxdWVzdGVkU2l6ZSwgcHJl
ZmVyZWRQaXhlbEJ1ZmZlckZvcm1hdCgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbV9waXhlbEJ1
ZmZlclJlc2l6ZXIgPSBudWxscHRyOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNl
bmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1NjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvU2NyZWVuRGlzcGxheUNh
cHR1cmVTb3VyY2VNYWMuaAppbmRleCBlYzkyMGYwMjRhNTY4OTkyMDA5NDQ5NDQ0N2Q3MmJlZTYz
MjkwZGM3Li45YzhmODcxYzNkMWY5YzY5YzI1N2E2YmQ5OWVhOWY0NDI3MjBkOWVkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvU2NyZWVuRGlzcGxh
eUNhcHR1cmVTb3VyY2VNYWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMuaApAQCAtNTYsNyArNTYsNyBA
QCBwcml2YXRlOgogCiAgICAgdm9pZCBmcmFtZUF2YWlsYWJsZShDR0Rpc3BsYXlTdHJlYW1GcmFt
ZVN0YXR1cywgdWludDY0X3QsIElPU3VyZmFjZVJlZiwgQ0dEaXNwbGF5U3RyZWFtVXBkYXRlUmVm
KTsKIAotICAgIFJldGFpblB0cjxDVlBpeGVsQnVmZmVyUmVmPiBnZW5lcmF0ZUZyYW1lKCkgZmlu
YWw7CisgICAgRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6RGlzcGxheUZyYW1lVHlwZSBnZW5l
cmF0ZUZyYW1lKCkgZmluYWw7CiAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpEaXNw
bGF5U3VyZmFjZVR5cGUgc3VyZmFjZVR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBSZWFsdGlt
ZU1lZGlhU291cmNlU2V0dGluZ3M6OkRpc3BsYXlTdXJmYWNlVHlwZTo6TW9uaXRvcjsgfQogCiAg
ICAgdm9pZCBzdGFydFByb2R1Y2luZ0RhdGEoKSBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9TY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJj
ZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9TY3JlZW5E
aXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5tbQppbmRleCBhMjM4ZjI4Zjk3NWI4NDA4MzQyNzdlOGIw
YzJkZWRjMTljYWJlNDQ3Li40Y2I0ZDEzY2E1MDJmNDNkMjEyYmQ4NGExZDdlNzBiOGFlZTJhMmI3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvU2Ny
ZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL1NjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLm1tCkBAIC0z
Niw2ICszNiw3IEBACiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQbGF0
Zm9ybUxheWVyLmgiCiAjaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzLmgiCisj
aW5jbHVkZSAiUmVhbHRpbWVWaWRlb1V0aWxpdGllcy5oIgogCiAjaW5jbHVkZSAiQ29yZVZpZGVv
U29mdExpbmsuaCIKIApAQCAtMTY2LDcgKzE2Nyw3IEBAIGJvb2wgU2NyZWVuRGlzcGxheUNhcHR1
cmVTb3VyY2VNYWM6OmNyZWF0ZURpc3BsYXlTdHJlYW0oKQogICAgICAgICB9KTsKIAogICAgICAg
ICBhdXRvIHNpemUgPSBmcmFtZVNpemUoKTsKLSAgICAgICAgbV9kaXNwbGF5U3RyZWFtID0gYWRv
cHRDRihDR0Rpc3BsYXlTdHJlYW1DcmVhdGVXaXRoRGlzcGF0Y2hRdWV1ZShtX2Rpc3BsYXlJRCwg
c2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNy
OFBsYW5hciwgc3RyZWFtT3B0aW9ucy5nZXQoKSwgbV9jYXB0dXJlUXVldWUuZ2V0KCksIG1fZnJh
bWVBdmFpbGFibGVCbG9jaykpOworICAgICAgICBtX2Rpc3BsYXlTdHJlYW0gPSBhZG9wdENGKENH
RGlzcGxheVN0cmVhbUNyZWF0ZVdpdGhEaXNwYXRjaFF1ZXVlKG1fZGlzcGxheUlELCBzaXplLndp
ZHRoKCksIHNpemUuaGVpZ2h0KCksIHByZWZlcmVkUGl4ZWxCdWZmZXJGb3JtYXQoKSwgc3RyZWFt
T3B0aW9ucy5nZXQoKSwgbV9jYXB0dXJlUXVldWUuZ2V0KCksIG1fZnJhbWVBdmFpbGFibGVCbG9j
aykpOwogICAgICAgICBpZiAoIW1fZGlzcGxheVN0cmVhbSkgewogICAgICAgICAgICAgUkVMRUFT
RV9MT0coTWVkaWEsICJTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6Y3JlYXRlRGlzcGxh
eVN0cmVhbTogQ0dEaXNwbGF5U3RyZWFtQ3JlYXRlIGZhaWxlZCIpOwogICAgICAgICAgICAgY2Fw
dHVyZUZhaWxlZCgpOwpAQCAtMjA1LDE4ICsyMDYsMTUgQEAgdm9pZCBTY3JlZW5EaXNwbGF5Q2Fw
dHVyZVNvdXJjZU1hYzo6c3RvcFByb2R1Y2luZ0RhdGEoKQogICAgIG1faXNSdW5uaW5nID0gZmFs
c2U7CiB9CiAKLVJldGFpblB0cjxDVlBpeGVsQnVmZmVyUmVmPiBTY3JlZW5EaXNwbGF5Q2FwdHVy
ZVNvdXJjZU1hYzo6Z2VuZXJhdGVGcmFtZSgpCitEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpE
aXNwbGF5RnJhbWVUeXBlIFNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpnZW5lcmF0ZUZy
YW1lKCkKIHsKLSAgICBpZiAoIW1fY3VycmVudEZyYW1lLmlvU3VyZmFjZSgpKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQogICAgIERpc3BsYXlTdXJmYWNlIGN1cnJlbnRGcmFtZTsKICAgICB7
CiAgICAgICAgIExvY2tIb2xkZXIgbG9jayhtX2N1cnJlbnRGcmFtZU11dGV4KTsKICAgICAgICAg
Y3VycmVudEZyYW1lID0gbV9jdXJyZW50RnJhbWUuaW9TdXJmYWNlKCk7CiAgICAgfQogCi0gICAg
cmV0dXJuIHBpeGVsQnVmZmVyRnJvbUlPU3VyZmFjZShjdXJyZW50RnJhbWUuaW9TdXJmYWNlKCkp
OworICAgIHJldHVybiBEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpEaXNwbGF5RnJhbWVUeXBl
IHsgUmV0YWluUHRyPElPU3VyZmFjZVJlZj4geyBjdXJyZW50RnJhbWUuaW9TdXJmYWNlKCkgfSB9
OwogfQogCiB2b2lkIFNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpzdGFydERpc3BsYXlT
dHJlYW0oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
bWFjL1dpbmRvd0Rpc3BsYXlDYXB0dXJlU291cmNlTWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvV2luZG93RGlzcGxheUNhcHR1cmVTb3VyY2VNYWMuaAppbmRl
eCAxYzRkMzc2MGY4OGNmZjVmYTc0Y2QyNzA2NjAzZTY4YTFkM2Q2ZGRmLi4yZDFhNjZlMDMxMmJh
ZGNhODlkOWJjZjBiODA2NmVkNDMyZGIyZDU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvV2luZG93RGlzcGxheUNhcHR1cmVTb3VyY2VNYWMuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvV2luZG93RGlzcGxh
eUNhcHR1cmVTb3VyY2VNYWMuaApAQCAtNDksMTEgKzQ5LDEwIEBAIHByaXZhdGU6CiAgICAgV2lu
ZG93RGlzcGxheUNhcHR1cmVTb3VyY2VNYWModWludDMyX3QsIFN0cmluZyYmKTsKICAgICB2aXJ0
dWFsIH5XaW5kb3dEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYygpID0gZGVmYXVsdDsKIAotICAgIFJl
dGFpblB0cjxDVlBpeGVsQnVmZmVyUmVmPiBnZW5lcmF0ZUZyYW1lKCkgZmluYWw7CisgICAgRGlz
cGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6RGlzcGxheUZyYW1lVHlwZSBnZW5lcmF0ZUZyYW1lKCkg
ZmluYWw7CiAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpEaXNwbGF5U3VyZmFjZVR5
cGUgc3VyZmFjZVR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBSZWFsdGltZU1lZGlhU291cmNl
U2V0dGluZ3M6OkRpc3BsYXlTdXJmYWNlVHlwZTo6V2luZG93OyB9CiAKICAgICBSZXRhaW5QdHI8
Q0dJbWFnZVJlZj4gd2luZG93SW1hZ2UoKTsKLSAgICBSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJl
Zj4gcGl4ZWxCdWZmZXJGcm9tQ0dJbWFnZShDR0ltYWdlUmVmKTsKIAogICAgIEludFNpemUgbV93
aW5kb3dTaXplOwogICAgIENHV2luZG93SUQgbV93aW5kb3dJRCB7IDAgfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9XaW5kb3dEaXNwbGF5Q2Fw
dHVyZVNvdXJjZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21h
Yy9XaW5kb3dEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5tbQppbmRleCAxZDZhMTdjZDQxMzhmZDFk
NTY3MmJmOTMyOTM3MDRiZjEwMTQxOTIzLi45YzVkNWQ0MzEyZDZkNTM2ODRjODVmMmE3ODBkODNi
MzI2OTUxNTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9tYWMvV2luZG93RGlzcGxheUNhcHR1cmVTb3VyY2VNYWMubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1dpbmRvd0Rpc3BsYXlDYXB0dXJlU291cmNlTWFj
Lm1tCkBAIC0xMzksNjkgKzEzOSw5IEBAIFJldGFpblB0cjxDR0ltYWdlUmVmPiBXaW5kb3dEaXNw
bGF5Q2FwdHVyZVNvdXJjZU1hYzo6d2luZG93SW1hZ2UoKQogICAgIHJldHVybiBpbWFnZTsKIH0K
IAotUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJSZWY+IFdpbmRvd0Rpc3BsYXlDYXB0dXJlU291cmNl
TWFjOjpnZW5lcmF0ZUZyYW1lKCkKK0Rpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OkRpc3BsYXlG
cmFtZVR5cGUgV2luZG93RGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OmdlbmVyYXRlRnJhbWUoKQog
ewotICAgIGF1dG8gaW1hZ2UgPSB3aW5kb3dJbWFnZSgpOwotICAgIGlmICghaW1hZ2UpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKG1fbGFzdEltYWdlICYmIG1fbGFzdFBpeGVs
QnVmZmVyICYmIENGRXF1YWwobV9sYXN0SW1hZ2UuZ2V0KCksIGltYWdlLmdldCgpKSkKLSAgICAg
ICAgcmV0dXJuIG1fbGFzdFBpeGVsQnVmZmVyLmdldCgpOwotCi0gICAgbV9sYXN0SW1hZ2UgPSBX
VEZNb3ZlKGltYWdlKTsKLSAgICByZXR1cm4gcGl4ZWxCdWZmZXJGcm9tQ0dJbWFnZShtX2xhc3RJ
bWFnZS5nZXQoKSk7Ci19Ci0KLVJldGFpblB0cjxDVlBpeGVsQnVmZmVyUmVmPiBXaW5kb3dEaXNw
bGF5Q2FwdHVyZVNvdXJjZU1hYzo6cGl4ZWxCdWZmZXJGcm9tQ0dJbWFnZShDR0ltYWdlUmVmIGlt
YWdlKQotewotICAgIHN0YXRpYyBDR0NvbG9yU3BhY2VSZWYgc1JHQkNvbG9yU3BhY2UgPSBzUkdC
Q29sb3JTcGFjZVJlZigpOwotCi0gICAgYXV0byBpbWFnZVNpemUgPSBJbnRTaXplKENHSW1hZ2VH
ZXRXaWR0aChpbWFnZSksIENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpKTsKLSAgICBpZiAoaW1hZ2VT
aXplICE9IGludHJpbnNpY1NpemUoKSkgewotICAgICAgICBtX2J1ZmZlclBvb2wgPSBudWxscHRy
OwotICAgICAgICBtX2xhc3RJbWFnZSA9IG51bGxwdHI7Ci0gICAgICAgIG1fbGFzdFBpeGVsQnVm
ZmVyID0gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBpZiAoIW1fYnVmZmVyUG9vbCkgewotICAgICAg
ICBDVlBpeGVsQnVmZmVyUG9vbFJlZiBidWZmZXJQb29sOwotICAgICAgICBDRkRpY3Rpb25hcnlS
ZWYgc291cmNlUGl4ZWxCdWZmZXJPcHRpb25zID0gKF9fYnJpZGdlIENGRGljdGlvbmFyeVJlZikg
QHsKLSAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxCdWZmZXJQaXhlbEZvcm1h
dFR5cGVLZXkgOiBAKGtDVlBpeGVsRm9ybWF0VHlwZV8zMkFSR0IpLAotICAgICAgICAoX19icmlk
Z2UgTlNTdHJpbmcgKilrQ1ZQaXhlbEJ1ZmZlcldpZHRoS2V5IDogQChpbWFnZVNpemUud2lkdGgo
KSksCi0gICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsQnVmZmVySGVpZ2h0S2V5
IDogQChpbWFnZVNpemUuaGVpZ2h0KCkpLAotI2lmIFBMQVRGT1JNKElPUykKLSAgICAgICAgKF9f
YnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxGb3JtYXRPcGVuR0xFU0NvbXBhdGliaWxpdHkgOiBA
KFlFUyksCi0jZWxzZQotICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ1ZQaXhlbEJ1ZmZl
ck9wZW5HTENvbXBhdGliaWxpdHlLZXkgOiBAKFlFUyksCi0jZW5kaWYKLSAgICAgICAgKF9fYnJp
ZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxCdWZmZXJJT1N1cmZhY2VQcm9wZXJ0aWVzS2V5IDogQHsg
LyplbXB0eSBkaWN0aW9uYXJ5Ki8gfQotICAgIH07Ci0KLSAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVm
IHBpeGVsQnVmZmVyUG9vbE9wdGlvbnMgPSAoX19icmlkZ2UgQ0ZEaWN0aW9uYXJ5UmVmKSBAewot
ICAgICAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxCdWZmZXJQb29sTWluaW11
bUJ1ZmZlckNvdW50S2V5IDogQCgzKQotICAgICAgICB9OwotCi0gICAgICAgIENWUmV0dXJuIHN0
YXR1cyA9IENWUGl4ZWxCdWZmZXJQb29sQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIHBpeGVs
QnVmZmVyUG9vbE9wdGlvbnMsIHNvdXJjZVBpeGVsQnVmZmVyT3B0aW9ucywgJmJ1ZmZlclBvb2wp
OwotICAgICAgICBpZiAoc3RhdHVzICE9IGtDVlJldHVyblN1Y2Nlc3MpCi0gICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBtX2J1ZmZlclBvb2wgPSBhZG9wdENGKGJ1ZmZlclBv
b2wpOwotICAgICAgICBzZXRJbnRyaW5zaWNTaXplKGltYWdlU2l6ZSk7Ci0gICAgfQotCi0gICAg
Q1ZQaXhlbEJ1ZmZlclJlZiBwaXhlbEJ1ZmZlcjsKLSAgICBDVlJldHVybiBzdGF0dXMgPSBDVlBp
eGVsQnVmZmVyUG9vbENyZWF0ZVBpeGVsQnVmZmVyKG51bGxwdHIsIG1fYnVmZmVyUG9vbC5nZXQo
KSwgJnBpeGVsQnVmZmVyKTsKLSAgICBpZiAoc3RhdHVzICE9IGtDVlJldHVyblN1Y2Nlc3MpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQ1ZQaXhlbEJ1ZmZlckxvY2tCYXNlQWRkcmVz
cyhwaXhlbEJ1ZmZlciwgMCk7Ci0gICAgdm9pZCogZGF0YSA9IENWUGl4ZWxCdWZmZXJHZXRCYXNl
QWRkcmVzcyhwaXhlbEJ1ZmZlcik7Ci0gICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0JpdG1h
cENvbnRleHRDcmVhdGUoZGF0YSwgaW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQo
KSwgOCwgQ1ZQaXhlbEJ1ZmZlckdldEJ5dGVzUGVyUm93KHBpeGVsQnVmZmVyKSwgc1JHQkNvbG9y
U3BhY2UsIChDR0JpdG1hcEluZm8pIGtDR0ltYWdlQWxwaGFOb25lU2tpcEZpcnN0KSk7Ci0gICAg
Q0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgQ0dJbWFn
ZUdldFdpZHRoKGltYWdlKSwgQ0dJbWFnZUdldEhlaWdodChpbWFnZSkpLCBpbWFnZSk7Ci0gICAg
Q1ZQaXhlbEJ1ZmZlclVubG9ja0Jhc2VBZGRyZXNzKHBpeGVsQnVmZmVyLCAwKTsKLQotICAgIG1f
bGFzdFBpeGVsQnVmZmVyID0gYWRvcHRDRihwaXhlbEJ1ZmZlcik7Ci0gICAgcmV0dXJuIG1fbGFz
dFBpeGVsQnVmZmVyOworICAgIHJldHVybiBEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpEaXNw
bGF5RnJhbWVUeXBlIHsgUmV0YWluUHRyPENHSW1hZ2VSZWY+IHsgd2luZG93SW1hZ2UoKSB9IH07
CiB9CiAKIHN0ZDo6b3B0aW9uYWw8Q2FwdHVyZURldmljZT4gV2luZG93RGlzcGxheUNhcHR1cmVT
b3VyY2VNYWM6OndpbmRvd0NhcHR1cmVEZXZpY2VXaXRoUGVyc2lzdGVudElEKGNvbnN0IFN0cmlu
ZyYgaWRTdHJpbmcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01v
Y2tSZWFsdGltZVZpZGVvU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2sv
TW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCmluZGV4IDYyMjQ3ZWQ1NmRkMGZlNzJiZTAwMzkx
NDRiOGYwNDZmNTBkOTZmNGQuLjdhYjdhMjE1NGUzYWUyYTQxYzdkMTJjOGMwNzRkMjIxZjg3ODc2
YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1l
VmlkZW9Tb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1Jl
YWx0aW1lVmlkZW9Tb3VyY2UuY3BwCkBAIC0xMjYsNiArMTI2LDcgQEAgY29uc3QgUmVhbHRpbWVN
ZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYgTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2U6OmNhcGFiaWxp
dGllcygpCiAgICAgICAgICAgICBjYXBhYmlsaXRpZXMuYWRkRmFjaW5nTW9kZShXVEY6OmdldDxN
b2NrQ2FtZXJhUHJvcGVydGllcz4obV9kZXZpY2UucHJvcGVydGllcykuZmFjaW5nTW9kZSk7CiAg
ICAgICAgICAgICBjYXBhYmlsaXRpZXMuc2V0RGV2aWNlSWQoaGFzaGVkSWQoKSk7CiAgICAgICAg
ICAgICB1cGRhdGVDYXBhYmlsaXRpZXMoY2FwYWJpbGl0aWVzKTsKKyAgICAgICAgICAgIGNhcGFi
aWxpdGllcy5zZXREZXZpY2VJZChoYXNoZWRJZCgpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIGNhcGFiaWxpdGllcy5zZXRXaWR0aChDYXBhYmlsaXR5VmFsdWVPclJhbmdlKDcyLCAy
ODgwKSk7CiAgICAgICAgICAgICBjYXBhYmlsaXRpZXMuc2V0SGVpZ2h0KENhcGFiaWxpdHlWYWx1
ZU9yUmFuZ2UoNDUsIDE4MDApKTsKQEAgLTE1OSwxNCArMTYwLDE0IEBAIGNvbnN0IFJlYWx0aW1l
TWVkaWFTb3VyY2VTZXR0aW5ncyYgTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2U6OnNldHRpbmdzKCkK
ICAgICAgICAgc2V0dGluZ3Muc2V0QXNwZWN0UmF0aW8oYXNwZWN0UmF0aW8oKSk7CiAKICAgICBS
ZWFsdGltZU1lZGlhU291cmNlU3VwcG9ydGVkQ29uc3RyYWludHMgc3VwcG9ydGVkQ29uc3RyYWlu
dHM7Ci0gICAgc3VwcG9ydGVkQ29uc3RyYWludHMuc2V0U3VwcG9ydHNEZXZpY2VJZCh0cnVlKTsK
ICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0ZyYW1lUmF0ZSh0cnVlKTsKICAg
ICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c1dpZHRoKHRydWUpOwogICAgIHN1cHBv
cnRlZENvbnN0cmFpbnRzLnNldFN1cHBvcnRzSGVpZ2h0KHRydWUpOwogICAgIHN1cHBvcnRlZENv
bnN0cmFpbnRzLnNldFN1cHBvcnRzQXNwZWN0UmF0aW8odHJ1ZSk7Ci0gICAgaWYgKG1vY2tDYW1l
cmEoKSkKKyAgICBpZiAobW9ja0NhbWVyYSgpKSB7CisgICAgICAgIHN1cHBvcnRlZENvbnN0cmFp
bnRzLnNldFN1cHBvcnRzRGV2aWNlSWQodHJ1ZSk7CiAgICAgICAgIHN1cHBvcnRlZENvbnN0cmFp
bnRzLnNldFN1cHBvcnRzRmFjaW5nTW9kZSh0cnVlKTsKLSAgICBlbHNlIHsKKyAgICB9IGVsc2Ug
ewogICAgICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0Rpc3BsYXlTdXJmYWNl
KHRydWUpOwogICAgICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0xvZ2ljYWxT
dXJmYWNlKHRydWUpOwogICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>352570</attachid>
            <date>2018-10-17 09:12:00 -0700</date>
            <delta_ts>2018-10-17 10:03:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-190519-20181017091159.patch</filename>
            <type>text/plain</type>
            <size>85961</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM3MjE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2RiYzlmZDA2YjBhZTJk
OWZmYWM1M2Q5NjMyNjg4OGIwN2VjMTg1My4uZjYxYjdkM2U2N2ZjZjA1YzYyMDg1ZWFlMDk4ZmU4
YmIyM2NhOWEyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgwIEBACisyMDE4LTEwLTE2ICBFcmlj
IENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNZWRpYVN0cmVh
bV0gQ29uc29saWRhdGUgYWxsIGltYWdlIGNvbnZlcnNpb24gYW5kIHJlc2l6aW5nIGludG8gb25l
IGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
OTA1MTkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQ1MjI0MzA3PgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gZnVuY3Rp
b25hbCBjaGFuZ2UuCisKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OiBBZGQgSW1hZ2VUcmFu
c2ZlclNlc3Npb25WVC4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6IERpdHRvLgorCisgICAgICAgICogcGxhdGZvcm0vTWVkaWFTYW1wbGUuaDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhU2FtcGxlOjp2aWRlb1BpeGVsRm9ybWF0IGNvbnN0KTogTmV3LgorCisg
ICAgICAgICogcGxhdGZvcm0vY29jb2EvVmlkZW9Ub29sYm94U29mdExpbmsuY3BwOiBBZGQgbmV3
IGtWVFBpeGVsVHJhbnNmZXJQcm9wZXJ0eSBrZXlzLgorICAgICAgICAqIHBsYXRmb3JtL2NvY29h
L1ZpZGVvVG9vbGJveFNvZnRMaW5rLmg6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMuaDoKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhU2FtcGxlQVZGT2JqQzo6Y3JlYXRlKTogUmVtb3ZlIHVuaW1wbGVtZW50ZWQgdmFyaWFu
dC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNh
bXBsZUFWRk9iakMubW06CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZUFWRk9iakM6OnZp
ZGVvUGl4ZWxGb3JtYXQgY29uc3QpOiBOZXcuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jdi9JbWFnZVRyYW5zZmVyU2Vzc2lvblZULmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jdi9JbWFnZVRyYW5zZmVyU2Vzc2lvblZULm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OkltYWdlVHJhbnNmZXJTZXNzaW9uVlQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6fkltYWdlVHJhbnNmZXJTZXNz
aW9uVlQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6c2V0U2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVhdGVQaXhl
bEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVh
dGVDTVNhbXBsZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpyb3VuZFVwVG9NYWNyb2Jsb2Nr
TXVsdGlwbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6aW9T
dXJmYWNlUGl4ZWxCdWZmZXJDcmVhdGlvbk9wdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlTWVkaWFTYW1wbGUpOgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJSZXNpemVyLmg6IFJlbW92ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJSZXNpemVyLm1tOiBSZW1vdmVkLgor
CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJlU291cmNl
Lmg6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJlU291
cmNlLm1tOgorICAgICAgICAoV2ViQ29yZTo6QVZWaWRlb0NhcHR1cmVTb3VyY2U6OnByZWZlcnNQ
cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6QVZWaWRlb0NhcHR1cmVTb3VyY2U6OmNhcHR1cmVP
dXRwdXREaWRPdXRwdXRTYW1wbGVCdWZmZXJGcm9tQ29ubmVjdGlvbik6IFJlbW92ZQorICAgICAg
ICB0aGUgcmVzaXppbmcgbG9naWMsIGl0IGlzIGhhbmRsZWQgYnkgdGhlIGJhc2UgY2xhc3MuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVTb3VyY2VD
b2NvYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpj
YXBhYmlsaXRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUNhcHR1cmVTb3VyY2VDb2Nv
YTo6c2V0dGluZ3NEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUNhcHR1cmVT
b3VyY2VDb2NvYTo6c2V0SW50cmluc2ljU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
Q2FwdHVyZVNvdXJjZUNvY29hOjplbWl0RnJhbWUpOiBSZW1vdmUgcmVzaXppbmcgbG9naWMsIGp1
c3QgdXNlIGEgdHJhbnNmZXIKKyAgICAgICAgc2Vzc2lvbiB0byBjcmVhdGUgYW4gaW1hZ2UgZnJv
bSB0aGUgY2FwdHVyZSBzb3VyY2UgbmF0aXZlIG91dHB1dCBmb3JtYXQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpzYW1wbGVCdWZmZXJGcm9tUGl4ZWxCdWZm
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6cm91bmRVcFRvTWFjcm9ibG9ja011bHRp
cGxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlDYXB0dXJlU291cmNlQ29j
b2E6OnBpeGVsQnVmZmVyRnJvbUlPU3VyZmFjZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL0Rpc3BsYXlDYXB0dXJlU291cmNlQ29jb2EuaDoKKworICAgICAg
ICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5o
OgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1Nv
dXJjZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFj
Ojp1cGRhdGVTYW1wbGVCdWZmZXIpOiBVc2UgaW1hZ2UgdHJhbnNmZXIgc2Vzc2lvbi4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjOjpDTVNhbXBsZUJ1ZmZlckZy
b21QaXhlbEJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpNb2NrUmVhbHRpbWVW
aWRlb1NvdXJjZU1hYzo6cGl4ZWxCdWZmZXJGcm9tQ0dJbWFnZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYzo6c2V0U2l6ZUFuZEZy
YW1lUmF0ZVdpdGhQcmVzZXQpOiBEZWxldGVkLgorCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL1NjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLmg6CisgICAgICAgICogcGxh
dGZvcm0vbWVkaWFzdHJlYW0vbWFjL1NjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6U2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OmNyZWF0ZURp
c3BsYXlTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6U2NyZWVuRGlzcGxheUNhcHR1cmVTb3Vy
Y2VNYWM6OmdlbmVyYXRlRnJhbWUpOiBSZXR1cm4gdGhlIElPU3VyZmFjZSBkaXJlY3RseS4KKwor
ICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9XaW5kb3dEaXNwbGF5Q2FwdHVyZVNv
dXJjZU1hYy5oOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9XaW5kb3dEaXNw
bGF5Q2FwdHVyZVNvdXJjZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OldpbmRvd0Rpc3BsYXlD
YXB0dXJlU291cmNlTWFjOjpnZW5lcmF0ZUZyYW1lKTogUmV0dXJuIHRoZSBDR0ltYWdlIGRpcmVj
dGx5LgorICAgICAgICAoV2ViQ29yZTo6V2luZG93RGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OnBp
eGVsQnVmZmVyRnJvbUNHSW1hZ2UpOiBEZWxldGVkLgorCisgICAgICAgICogcGxhdGZvcm0vbW9j
ay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNb2NrUmVh
bHRpbWVWaWRlb1NvdXJjZTo6Y2FwYWJpbGl0aWVzKTogT25seSB0aGUgY2FtZXJhIHN1cHBvcnRz
IGRldmljZSBJRC4KKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tSZWFsdGltZVZpZGVvU291cmNlOjpz
ZXR0aW5ncyk6IERpdHRvLgorCiAyMDE4LTEwLTE2ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBs
ZS5jb20+CiAKICAgICAgICAgUmVncmVzc2lvbihyMjM2Nzk1KSBDaGVjayBib3hlcyBhcmUgc29t
ZXRpbWVzIGNoZWNrZWQgd2hlbiB0aGV5IHNob3VsZCBub3QgYmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2Eu
dHh0CmluZGV4IGM3NmY0OTIzMWNiNWUwYmJkNWMwOWNmMmUyNGM0YzkxNTljZDllNTcuLjg0NTU1
YTZhNzlhYTA0MWUyYWJiNWE5YjA0ODk0ODlkODYyMDMwODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29h
LnR4dApAQCAtMzE0LDggKzMxNCw4IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5
ZXIubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYk1ldGFsTGF5ZXIubW0KIHBsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL1RleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EubW0KIAorcGxhdGZv
cm0vZ3JhcGhpY3MvY3YvSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5tbQogcGxhdGZvcm0vZ3JhcGhp
Y3MvY3YvUGl4ZWxCdWZmZXJDb25mb3JtZXJDVi5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2N2L1Bp
eGVsQnVmZmVyUmVzaXplci5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvVGV4dHVyZUNhY2hlQ1Yu
bW0KIHBsYXRmb3JtL2dyYXBoaWNzL2N2L1ZpZGVvVGV4dHVyZUNvcGllckNWLmNwcAogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
OTdiMzVhZmZmOTFhMzIzNTYzMDdjYTZhNzQ2MDA1OGQyMDJhMDViZi4uZTU2ZTdlYmVhNzA2ZTNi
YTQyZWUyMWQ4NmJkZGE1YTI5NzYxMTBlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTY5LDYgKzE2OSw3IEBACiAJCTA3OEU0
M0RBMUFCQjZDN0UwMDFDMkZBNiAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzhFNDNEODFBQkI2QzdF
MDAxQzJGQTYgLyogTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA3OEU0M0REMUFCQjZGNkYwMDFDMkZB
NiAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzhFNDNEQjFBQkI2RjZGMDAxQzJGQTYgLyogTWVk
aWFQbGF5YmFja1RhcmdldFBpY2tlck1hYy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTA3OEU0M0RFMUFCQjZGNkYwMDFDMkZBNiAvKiBNZWRpYVBs
YXliYWNrVGFyZ2V0UGlja2VyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDc4RTQzREMxQUJCNkY2RjAwMUMyRkE2IC8qIE1lZGlhUGxheWJhY2tU
YXJnZXRQaWNrZXJNYWMubW0gKi87IH07CisJCTA3OEVEMTkzMjE2RDA3OTUwMDc3NUIzMyAvKiBJ
bWFnZVRyYW5zZmVyU2Vzc2lvblZULmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwNzQ2RDMwQzIxNDZFQTM4MDAzRERGODQgLyogSW1hZ2VUcmFuc2ZlclNl
c3Npb25WVC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTA3OTIxNjU1MUFBNTYwQUEwMEEzQzA0OSAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0Q2xpZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzkyMTY1
MzFBQTU2MEFBMDBBM0MwNDkgLyogTWVkaWFQbGF5YmFja1RhcmdldENsaWVudC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA3OTQxNzkxMTY2RTg1
NUYwMDk0MTZDMiAvKiBJbmJhbmRUZXh0VHJhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDc5NDE3OEYxNjZFODU1RjAwOTQxNkMyIC8qIEluYmFu
ZFRleHRUcmFjay5jcHAgKi87IH07CiAJCTA3OTQxNzkyMTY2RTg1NUYwMDk0MTZDMiAvKiBJbmJh
bmRUZXh0VHJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDA3OTQxNzkwMTY2RTg1NUYwMDk0MTZDMiAvKiBJbmJhbmRUZXh0VHJhY2suaCAqLzsgfTsK
QEAgLTUzNjgsOCArNTM2OSw4IEBACiAJCTA3M0I4NzY1MUU0Mzg1OUQwMDcxQzBFQyAvKiBBdWRp
b1NhbXBsZURhdGFTb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXVk
aW9TYW1wbGVEYXRhU291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3NDRF
Q0VCMUUwQzRBRTUwMDBEMDk0NCAvKiBNb2NrUmVhbHRpbWVBdWRpb1NvdXJjZU1hYy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNb2NrUmVhbHRpbWVBdWRpb1NvdXJjZU1hYy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzQ0RUNFQzFFMEM0QUU1MDAwRDA5NDQg
LyogTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2VNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBNb2NrUmVhbHRpbWVBdWRpb1NvdXJjZU1hYy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDc0NkQzMEEyMTQ2RUEzNzAwM0RERjg0IC8qIFBpeGVsQnVm
ZmVyUmVzaXplci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBp
eGVsQnVmZmVyUmVzaXplci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDc0NkQz
MEMyMTQ2RUEzODAwM0RERjg0IC8qIFBpeGVsQnVmZmVyUmVzaXplci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQaXhlbEJ1ZmZlclJlc2l6ZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMDc0NkQzMEEyMTQ2RUEzNzAwM0RERjg0IC8qIEltYWdlVHJhbnNmZXJT
ZXNzaW9uVlQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBJbWFn
ZVRyYW5zZmVyU2Vzc2lvblZULm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwNzQ2
RDMwQzIxNDZFQTM4MDAzRERGODQgLyogSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZVRyYW5zZmVyU2Vzc2lvblZULmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3NEU4MkI4MThBNjlGMEUwMDdFRjU0QyAvKiBQbGF0
Zm9ybVRpbWVSYW5nZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UGxhdGZvcm1UaW1lUmFuZ2VzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDc0
RTgyQjkxOEE2OUYwRTAwN0VGNTRDIC8qIFBsYXRmb3JtVGltZVJhbmdlcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybVRpbWVSYW5nZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMDc1Mzg2MDAxNDQ4OUU5ODAwQjc4NDUyIC8qIENhY2hlZFRleHRU
cmFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWNoZWRUZXh0
VHJhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjUwOTUsMTAgKzI1MDk2
LDEwIEBACiAJCUNEOUQ4MjdDMUM3QkIyRUQwMDZGRjA2NiAvKiBjdiAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMDc0NkQzMEMyMTQ2RUEzODAwM0RERjg0
IC8qIEltYWdlVHJhbnNmZXJTZXNzaW9uVlQuaCAqLywKKwkJCQkwNzQ2RDMwQTIxNDZFQTM3MDAz
RERGODQgLyogSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5tbSAqLywKIAkJCQlDRDdEMzM0MTFDN0Ex
MjNGMDAwNDEyOTMgLyogUGl4ZWxCdWZmZXJDb25mb3JtZXJDVi5jcHAgKi8sCiAJCQkJQ0Q3RDMz
NDIxQzdBMTIzRjAwMDQxMjkzIC8qIFBpeGVsQnVmZmVyQ29uZm9ybWVyQ1YuaCAqLywKLQkJCQkw
NzQ2RDMwQzIxNDZFQTM4MDAzRERGODQgLyogUGl4ZWxCdWZmZXJSZXNpemVyLmggKi8sCi0JCQkJ
MDc0NkQzMEEyMTQ2RUEzNzAwM0RERjg0IC8qIFBpeGVsQnVmZmVyUmVzaXplci5tbSAqLywKIAkJ
CQlDRDlEODI3NDFDN0FFNTM1MDA2RkYwNjYgLyogVGV4dHVyZUNhY2hlQ1YuaCAqLywKIAkJCQlD
RDlEODI3MzFDN0FFNTM1MDA2RkYwNjYgLyogVGV4dHVyZUNhY2hlQ1YubW0gKi8sCiAJCQkJQ0Q5
RDgyNzcxQzdCOEVFMTAwNkZGMDY2IC8qIFZpZGVvVGV4dHVyZUNvcGllckNWLmNwcCAqLywKQEAg
LTI4NzIwLDYgKzI4NzIxLDcgQEAKIAkJCQk3QzE5M0JDMTFGNUUwRUVEMDA4OEYzRTYgLyogSW1h
Z2VTbW9vdGhpbmdRdWFsaXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQk1NTQ2NzU3QjFGRDIxMkE5
MDAzQjEwQjAgLyogSW1hZ2VTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTRCMzQ4MDk0MEVF
RjUwRDQwMEFDMUI0MSAvKiBJbWFnZVNvdXJjZUNHLmggaW4gSGVhZGVycyAqLywKKwkJCQkwNzhF
RDE5MzIxNkQwNzk1MDA3NzVCMzMgLyogSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTU1MENCNDIxRTk1NUUzQzAwMTExQUEwIC8qIEltYWdlVHlwZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTI2Rjc1NkIzMUIzQjY2RjcwMDA1REQ3OSAvKiBJbW11dGFibGVORkEu
aCBpbiBIZWFkZXJzICovLAogCQkJCTI2Rjc1NkI1MUIzQjY4RjIwMDA1REQ3OSAvKiBJbW11dGFi
bGVORkFOb2RlQnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9NZWRpYVNhbXBsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVk
aWFTYW1wbGUuaAppbmRleCBlNTgyZmRiNDlhY2VlZGEwZmMzNjhhMGNlYzU2MTg4MWFlODhjMzdi
Li4wNTBkOTM4OWQxOGUxMGY1ZDk3YmE0M2Q4NjBjMmExMzUyMDY2MmZlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZWRpYVNhbXBsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL01lZGlhU2FtcGxlLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkZs
b2F0U2l6ZS5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlzLmg+CisjaW5j
bHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvTWVkaWFUaW1lLmg+CiAjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcu
aD4KQEAgLTEwMCw2ICsxMDEsMjAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3QgPSAwOwogfTsKIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3Jl
OjpNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbj4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1W
YWx1ZXM8CisgICAgICAgIFdlYkNvcmU6Ok1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uLAorICAg
ICAgICBXZWJDb3JlOjpNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6Tm9uZSwKKyAgICAgICAg
V2ViQ29yZTo6TWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246OlVwc2lkZURvd24sCisgICAgICAg
IFdlYkNvcmU6Ok1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpSaWdodCwKKyAgICAgICAgV2Vi
Q29yZTo6TWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246OkxlZnQKKyAgICA+OworfTsKKworfSAv
LyBuYW1lc3BhY2UgV1RGCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY29jb2EvQ29yZVZpZGVvU29mdExpbmsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY29jb2EvQ29yZVZpZGVvU29mdExpbmsuY3BwCmluZGV4IDhiYjM2MmJmMjY4MGQzNmQ2ZTNm
MGQ1YzMyMDUyMTM1YzFkZjVhOTguLmRjZmIxY2ZiNDdhMDNkMzczYTNhNjIyODc0ZTcwMzg1OTE2
Y2UwOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL0NvcmVWaWRl
b1NvZnRMaW5rLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9Db3JlVmlk
ZW9Tb2Z0TGluay5jcHAKQEAgLTkyLDQgKzkyLDYgQEAgU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9T
T1VSQ0UoV2ViQ29yZSwgQ29yZVZpZGVvLCBrQ1ZQaXhlbEJ1ZmZlckV4dGVuZGVkUGl4ZWxzQm8K
IFNPRlRfTElOS19DT05TVEFOVF9GT1JfU09VUkNFKFdlYkNvcmUsIENvcmVWaWRlbywga0NWUGl4
ZWxCdWZmZXJPcGVuR0xDb21wYXRpYmlsaXR5S2V5LCBDRlN0cmluZ1JlZikKICNlbmRpZgogCitT
T0ZUX0xJTktfRlVOQ1RJT05fRk9SX1NPVVJDRShXZWJDb3JlLCBDb3JlVmlkZW8sIENWUGl4ZWxC
dWZmZXJDcmVhdGVXaXRoSU9TdXJmYWNlLCBDVlJldHVybiwgKENGQWxsb2NhdG9yUmVmIGFsbG9j
YXRvciwgSU9TdXJmYWNlUmVmIHN1cmZhY2UsIENGRGljdGlvbmFyeVJlZiBwaXhlbEJ1ZmZlckF0
dHJpYnV0ZXMsIENWUGl4ZWxCdWZmZXJSZWYgKiBwaXhlbEJ1ZmZlck91dCksIChhbGxvY2F0b3Is
IHN1cmZhY2UsIHBpeGVsQnVmZmVyQXR0cmlidXRlcywgcGl4ZWxCdWZmZXJPdXQpKQorCiAjZW5k
aWYgLy8gSEFWRShDT1JFX1ZJREVPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY29jb2EvQ29yZVZpZGVvU29mdExpbmsuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nv
Y29hL0NvcmVWaWRlb1NvZnRMaW5rLmgKaW5kZXggOWVlYjQzNDYxODkzODQ1YTY4MjQ0ODhiNDM4
ZjU5NjlhYjJjOGIxMi4uNTI5NWU1OGM4NDcwZjUyZjJhZDg0M2IxNjdhMTc5NDc3MDhkNTRiOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvQ29yZVZpZGVvU29mdExp
bmsuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9Db3JlVmlkZW9Tb2Z0TGlu
ay5oCkBAIC0xNDcsNCArMTQ3LDcgQEAgU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9IRUFERVIoV2Vi
Q29yZSwgQ29yZVZpZGVvLCBrQ1ZQaXhlbEJ1ZmZlck9wZW5HTENvbXBhdGliaWwKICNkZWZpbmUg
a0NWUGl4ZWxCdWZmZXJPcGVuR0xDb21wYXRpYmlsaXR5S2V5IGdldF9Db3JlVmlkZW9fa0NWUGl4
ZWxCdWZmZXJPcGVuR0xDb21wYXRpYmlsaXR5S2V5KCkKICNlbmRpZgogCitTT0ZUX0xJTktfRlVO
Q1RJT05fRk9SX0hFQURFUihXZWJDb3JlLCBDb3JlVmlkZW8sIENWUGl4ZWxCdWZmZXJDcmVhdGVX
aXRoSU9TdXJmYWNlLCBDVlJldHVybiwgKENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciwgSU9TdXJm
YWNlUmVmIHN1cmZhY2UsIENGRGljdGlvbmFyeVJlZiBwaXhlbEJ1ZmZlckF0dHJpYnV0ZXMsIENW
UGl4ZWxCdWZmZXJSZWYgKiBwaXhlbEJ1ZmZlck91dCksIChhbGxvY2F0b3IsIHN1cmZhY2UsIHBp
eGVsQnVmZmVyQXR0cmlidXRlcywgcGl4ZWxCdWZmZXJPdXQpKQorI2RlZmluZSBDVlBpeGVsQnVm
ZmVyQ3JlYXRlV2l0aElPU3VyZmFjZSBzb2Z0TGlua19Db3JlVmlkZW9fQ1ZQaXhlbEJ1ZmZlckNy
ZWF0ZVdpdGhJT1N1cmZhY2UKKwogI2VuZGlmIC8vIEhBVkUoQ09SRV9WSURFTykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvVG9vbGJveFNvZnRMaW5rLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvVG9vbGJveFNvZnRMaW5rLmNw
cAppbmRleCA5ODdmYmNmNjE5NjZkMjRjZjA1Y2EwODQ2OTlkMDU4MGEyZjExMWRmLi5lYWY3OGI0
NWQwNTI4N2E3OTZlNmEyYTA1Y2QwZThmMGE4OTk0ZDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jb2NvYS9WaWRlb1Rvb2xib3hTb2Z0TGluay5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvVmlkZW9Ub29sYm94U29mdExpbmsuY3BwCkBAIC01OSw2
ICs1OSw5IEBAIFNPRlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNFKFdlYkNvcmUsIFZpZGVvVG9v
bGJveCwgVlRQaXhlbFRyYW5zZmVyU2Vzc2lvblRyYW5zCiBTT0ZUX0xJTktfRlVOQ1RJT05fRk9S
X1NPVVJDRShXZWJDb3JlLCBWaWRlb1Rvb2xib3gsIFZUU2Vzc2lvblNldFByb3BlcnR5LCBPU1N0
YXR1cywgKFZUU2Vzc2lvblJlZiBzZXNzaW9uLCBDRlN0cmluZ1JlZiBwcm9wZXJ0eUtleSwgQ0ZU
eXBlUmVmIHByb3BlcnR5VmFsdWUpLCAoc2Vzc2lvbiwgcHJvcGVydHlLZXksIHByb3BlcnR5VmFs
dWUpKQogU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9TT1VSQ0UoV2ViQ29yZSwgVmlkZW9Ub29sYm94
LCBrVlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXlfU2NhbGluZ01vZGUsIENGU3RyaW5nUmVmKQog
U09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9TT1VSQ0UoV2ViQ29yZSwgVmlkZW9Ub29sYm94LCBrVlRT
Y2FsaW5nTW9kZV9UcmltLCBDRlN0cmluZ1JlZikKK1NPRlRfTElOS19DT05TVEFOVF9GT1JfU09V
UkNFKFdlYkNvcmUsIFZpZGVvVG9vbGJveCwga1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5S2V5X0Vu
YWJsZUhhcmR3YXJlQWNjZWxlcmF0ZWRUcmFuc2ZlciwgQ0ZTdHJpbmdSZWYpCitTT0ZUX0xJTktf
Q09OU1RBTlRfRk9SX1NPVVJDRShXZWJDb3JlLCBWaWRlb1Rvb2xib3gsIGtWVFBpeGVsVHJhbnNm
ZXJQcm9wZXJ0eUtleV9FbmFibGVIaWdoU3BlZWRUcmFuc2ZlciwgQ0ZTdHJpbmdSZWYpCitTT0ZU
X0xJTktfQ09OU1RBTlRfRk9SX1NPVVJDRShXZWJDb3JlLCBWaWRlb1Rvb2xib3gsIGtWVFBpeGVs
VHJhbnNmZXJQcm9wZXJ0eUtleV9SZWFsVGltZSwgQ0ZTdHJpbmdSZWYpCiAKIFNPRlRfTElOS19D
T05TVEFOVF9NQVlfRkFJTF9GT1JfU09VUkNFKFdlYkNvcmUsIFZpZGVvVG9vbGJveCwga1ZUSEVW
Q0RlY29kZXJDYXBhYmlsaXR5X1N1cHBvcnRlZFByb2ZpbGVzLCBDRlN0cmluZ1JlZikKIFNPRlRf
TElOS19DT05TVEFOVF9NQVlfRkFJTF9GT1JfU09VUkNFKFdlYkNvcmUsIFZpZGVvVG9vbGJveCwg
a1ZUSEVWQ0RlY29kZXJDYXBhYmlsaXR5X1BlclByb2ZpbGVTdXBwb3J0LCBDRlN0cmluZ1JlZikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvVG9vbGJveFNv
ZnRMaW5rLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9WaWRlb1Rvb2xib3hTb2Z0
TGluay5oCmluZGV4IGYzMTliMTg4ZWQxNjA1ODA5NDc2MTJlYjM3Mjg2ZGUyMjMyNGUyNWQuLjA3
MWI3MTFlZDA0ZDNiODE0ODIyODkyYTE1MGQ3YWU1ZmRlNmY4NTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvVG9vbGJveFNvZnRMaW5rLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvVmlkZW9Ub29sYm94U29mdExpbmsuaApAQCAtODUs
NiArODUsMTIgQEAgU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9IRUFERVIoV2ViQ29yZSwgVmlkZW9U
b29sYm94LCBrVlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXkKICNkZWZpbmUga1ZUUGl4ZWxUcmFu
c2ZlclByb3BlcnR5S2V5X1NjYWxpbmdNb2RlIGdldF9WaWRlb1Rvb2xib3hfa1ZUUGl4ZWxUcmFu
c2ZlclByb3BlcnR5S2V5X1NjYWxpbmdNb2RlKCkKIFNPRlRfTElOS19DT05TVEFOVF9GT1JfSEVB
REVSKFdlYkNvcmUsIFZpZGVvVG9vbGJveCwga1ZUU2NhbGluZ01vZGVfVHJpbSwgQ0ZTdHJpbmdS
ZWYpCiAjZGVmaW5lIGtWVFNjYWxpbmdNb2RlX1RyaW0gZ2V0X1ZpZGVvVG9vbGJveF9rVlRTY2Fs
aW5nTW9kZV9UcmltKCkKK1NPRlRfTElOS19DT05TVEFOVF9GT1JfSEVBREVSKFdlYkNvcmUsIFZp
ZGVvVG9vbGJveCwga1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5S2V5X0VuYWJsZUhhcmR3YXJlQWNj
ZWxlcmF0ZWRUcmFuc2ZlciwgQ0ZTdHJpbmdSZWYpCisjZGVmaW5lIGtWVFBpeGVsVHJhbnNmZXJQ
cm9wZXJ0eUtleV9FbmFibGVIYXJkd2FyZUFjY2VsZXJhdGVkVHJhbnNmZXIgZ2V0X1ZpZGVvVG9v
bGJveF9rVlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXlfRW5hYmxlSGFyZHdhcmVBY2NlbGVyYXRl
ZFRyYW5zZmVyKCkKK1NPRlRfTElOS19DT05TVEFOVF9GT1JfSEVBREVSKFdlYkNvcmUsIFZpZGVv
VG9vbGJveCwga1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5S2V5X0VuYWJsZUhpZ2hTcGVlZFRyYW5z
ZmVyLCBDRlN0cmluZ1JlZikKKyNkZWZpbmUga1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5S2V5X0Vu
YWJsZUhpZ2hTcGVlZFRyYW5zZmVyIGdldF9WaWRlb1Rvb2xib3hfa1ZUUGl4ZWxUcmFuc2ZlclBy
b3BlcnR5S2V5X0VuYWJsZUhpZ2hTcGVlZFRyYW5zZmVyKCkKK1NPRlRfTElOS19DT05TVEFOVF9G
T1JfSEVBREVSKFdlYkNvcmUsIFZpZGVvVG9vbGJveCwga1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5
S2V5X1JlYWxUaW1lLCBDRlN0cmluZ1JlZikKKyNkZWZpbmUga1ZUUGl4ZWxUcmFuc2ZlclByb3Bl
cnR5S2V5X1JlYWxUaW1lIGdldF9WaWRlb1Rvb2xib3hfa1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5
S2V5X1JlYWxUaW1lKCkKIAogU09GVF9MSU5LX0NPTlNUQU5UX01BWV9GQUlMX0ZPUl9IRUFERVIo
V2ViQ29yZSwgVmlkZW9Ub29sYm94LCBrVlRIRVZDRGVjb2RlckNhcGFiaWxpdHlfU3VwcG9ydGVk
UHJvZmlsZXMsIENGU3RyaW5nUmVmKQogI2RlZmluZSBrVlRIRVZDRGVjb2RlckNhcGFiaWxpdHlf
U3VwcG9ydGVkUHJvZmlsZXMgZ2V0X1ZpZGVvVG9vbGJveF9rVlRIRVZDRGVjb2RlckNhcGFiaWxp
dHlfU3VwcG9ydGVkUHJvZmlsZXMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpDLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBs
ZUFWRk9iakMuaAppbmRleCBkNWE4MDZkZmUzM2U5N2MwYzFmMjhkMjExMGRmNTg4Zjk1NjgyNmFj
Li4wOTIzODgzZTViYzdlNDQ2NGIxMTZiOTJiYmZkMDhhNmUyNjNhNzJmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNh
bXBsZUFWRk9iakMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMuaApAQCAtMzEsMTMgKzMxLDEyIEBACiAj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAorCiBj
bGFzcyBNZWRpYVNhbXBsZUFWRk9iakMgOiBwdWJsaWMgTWVkaWFTYW1wbGUgewogcHVibGljOgog
ICAgIHN0YXRpYyBSZWY8TWVkaWFTYW1wbGVBVkZPYmpDPiBjcmVhdGUoQ01TYW1wbGVCdWZmZXJS
ZWYgc2FtcGxlLCBpbnQgdHJhY2tJRCkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBNZWRpYVNhbXBs
ZUFWRk9iakMoc2FtcGxlLCB0cmFja0lEKSk7IH0KICAgICBzdGF0aWMgUmVmPE1lZGlhU2FtcGxl
QVZGT2JqQz4gY3JlYXRlKENNU2FtcGxlQnVmZmVyUmVmIHNhbXBsZSwgQXRvbWljU3RyaW5nIHRy
YWNrSUQpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTWVkaWFTYW1wbGVBVkZPYmpDKHNhbXBsZSwg
dHJhY2tJRCkpOyB9CiAgICAgc3RhdGljIFJlZjxNZWRpYVNhbXBsZUFWRk9iakM+IGNyZWF0ZShD
TVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGUsIFZpZGVvUm90YXRpb24gcm90YXRpb24gPSBWaWRlb1Jv
dGF0aW9uOjpOb25lLCBib29sIG1pcnJvcmVkID0gZmFsc2UpIHsgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgTWVkaWFTYW1wbGVBVkZPYmpDKHNhbXBsZSwgcm90YXRpb24sIG1pcnJvcmVkKSk7IH0KLSAg
ICBzdGF0aWMgUmVmUHRyPE1lZGlhU2FtcGxlQVZGT2JqQz4gY3JlYXRlSW1hZ2VTYW1wbGUoUmVm
PEpTQzo6VWludDhDbGFtcGVkQXJyYXk+JiYsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVk
IGxvbmcgaGVpZ2h0KTsKICAgICBzdGF0aWMgUmVmUHRyPE1lZGlhU2FtcGxlQVZGT2JqQz4gY3Jl
YXRlSW1hZ2VTYW1wbGUoVmVjdG9yPHVpbnQ4X3Q+JiYsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVu
c2lnbmVkIGxvbmcgaGVpZ2h0KTsKIAogICAgIFJlZlB0cjxKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5
PiBnZXRSR0JBSW1hZ2VEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC02NSw2ICs2NCw3IEBAIHB1
YmxpYzoKIAogICAgIFZpZGVvUm90YXRpb24gdmlkZW9Sb3RhdGlvbigpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIG1fcm90YXRpb247IH0KICAgICBib29sIHZpZGVvTWlycm9yZWQoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBtX21pcnJvcmVkOyB9CisgICAgdWludDMyX3QgdmlkZW9QaXhlbEZv
cm1hdCgpIGNvbnN0OwogCiAgICAgQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlQnVmZmVyKCkgY29u
c3QgeyByZXR1cm4gbV9zYW1wbGUuZ2V0KCk7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpD
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
TWVkaWFTYW1wbGVBVkZPYmpDLm1tCmluZGV4IGMzYmNhNjEwOTA1NTRmODI4Yjg0ODM5YWQ0MDU0
OWE2MjdiZmU3NDAuLjY3YmI0YzZkZmUzMzA0OWRiZTE5MjI4YjUwZjdjYTg3NjcxNGM3ZWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL01lZGlhU2FtcGxlQVZGT2JqQy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMubW0KQEAgLTExMyw2
ICsxMTMsMTIgQEAgUGxhdGZvcm1TYW1wbGUgTWVkaWFTYW1wbGVBVkZPYmpDOjpwbGF0Zm9ybVNh
bXBsZSgpCiAgICAgcmV0dXJuIHNhbXBsZTsKIH0KIAordWludDMyX3QgTWVkaWFTYW1wbGVBVkZP
YmpDOjp2aWRlb1BpeGVsRm9ybWF0KCkgY29uc3QKK3sKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0g
c3RhdGljX2Nhc3Q8Q1ZQaXhlbEJ1ZmZlclJlZj4oQ01TYW1wbGVCdWZmZXJHZXRJbWFnZUJ1ZmZl
cihtX3NhbXBsZS5nZXQoKSkpOworICAgIHJldHVybiBDVlBpeGVsQnVmZmVyR2V0UGl4ZWxGb3Jt
YXRUeXBlKHBpeGVsQnVmZmVyKTsKK30KKwogc3RhdGljIGJvb2wgQ01TYW1wbGVCdWZmZXJJc1Jh
bmRvbUFjY2VzcyhDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGUpCiB7CiAgICAgQ0ZBcnJheVJlZiBh
dHRhY2htZW50cyA9IENNU2FtcGxlQnVmZmVyR2V0U2FtcGxlQXR0YWNobWVudHNBcnJheShzYW1w
bGUsIGZhbHNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2N2L0ltYWdlVHJhbnNmZXJTZXNzaW9uVlQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2N2L0ltYWdlVHJhbnNmZXJTZXNzaW9uVlQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ODE0M2JlNDdl
YjBiZTAxYmNhMzA4MGNhZWFjY2Y0ZDkwMzdiMTFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5oCkBA
IC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShWSURF
T1RPT0xCT1gpCisKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiTWVkaWFTYW1wbGVB
VkZPYmpjLmgiCisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCit0eXBlZGVmIHN0cnVjdCBD
R0ltYWdlICpDR0ltYWdlUmVmOwordHlwZWRlZiBzdHJ1Y3QgT3BhcXVlVlRQaXhlbFRyYW5zZmVy
U2Vzc2lvbiogVlRQaXhlbFRyYW5zZmVyU2Vzc2lvblJlZjsKK3R5cGVkZWYgc3RydWN0IF9fQ1ZC
dWZmZXIgKkNWUGl4ZWxCdWZmZXJSZWY7Cit0eXBlZGVmIHN0cnVjdCBfX0NWUGl4ZWxCdWZmZXJQ
b29sICpDVlBpeGVsQnVmZmVyUG9vbFJlZjsKK3R5cGVkZWYgc3RydWN0IF9fSU9TdXJmYWNlICpJ
T1N1cmZhY2VSZWY7Cit0eXBlZGVmIHN0cnVjdCBvcGFxdWVDTVNhbXBsZUJ1ZmZlciAqQ01TYW1w
bGVCdWZmZXJSZWY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VUcmFuc2Zl
clNlc3Npb25WVCB7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZVRy
YW5zZmVyU2Vzc2lvblZUPiBjcmVhdGUodWludDMyX3QgcGl4ZWxGb3JtYXQpCisgICAgeworICAg
ICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ+KG5ldyBJ
bWFnZVRyYW5zZmVyU2Vzc2lvblZUKHBpeGVsRm9ybWF0KSk7CisgICAgfQorCisgICAgUmVmUHRy
PE1lZGlhU2FtcGxlPiBjb252ZXJ0TWVkaWFTYW1wbGUoTWVkaWFTYW1wbGUmLCBjb25zdCBJbnRT
aXplJik7CisgICAgUmVmUHRyPE1lZGlhU2FtcGxlPiBjcmVhdGVNZWRpYVNhbXBsZShDR0ltYWdl
UmVmLCBjb25zdCBNZWRpYVRpbWUmLCBjb25zdCBJbnRTaXplJiwgTWVkaWFTYW1wbGU6OlZpZGVv
Um90YXRpb24gcm90YXRpb24gPSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6Tm9uZSwgYm9v
bCBtaXJyb3JlZCA9IGZhbHNlKTsKKyAgICBSZWZQdHI8TWVkaWFTYW1wbGU+IGNyZWF0ZU1lZGlh
U2FtcGxlKENNU2FtcGxlQnVmZmVyUmVmLCBjb25zdCBJbnRTaXplJiwgTWVkaWFTYW1wbGU6OlZp
ZGVvUm90YXRpb24gcm90YXRpb24gPSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6Tm9uZSwg
Ym9vbCBtaXJyb3JlZCA9IGZhbHNlKTsKKworI2lmIEhBVkUoSU9TVVJGQUNFKQorICAgIFJlZlB0
cjxNZWRpYVNhbXBsZT4gY3JlYXRlTWVkaWFTYW1wbGUoSU9TdXJmYWNlUmVmLCBjb25zdCBNZWRp
YVRpbWUmLCBjb25zdCBJbnRTaXplJiwgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb24gcm90YXRp
b24gPSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6Tm9uZSwgYm9vbCBtaXJyb3JlZCA9IGZh
bHNlKTsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlVHJhbnNm
ZXJTZXNzaW9uVlQodWludDMyX3QpOworCisjaWYgSEFWRShJT1NVUkZBQ0UpCisgICAgQ0ZEaWN0
aW9uYXJ5UmVmIGlvU3VyZmFjZVBpeGVsQnVmZmVyQ3JlYXRpb25PcHRpb25zKElPU3VyZmFjZVJl
Zik7CisgICAgUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBjcmVhdGVDTVNhbXBsZUJ1ZmZl
cihJT1N1cmZhY2VSZWYsIGNvbnN0IE1lZGlhVGltZSYsIGNvbnN0IEludFNpemUmKTsKKyAgICBS
ZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gY3JlYXRlUGl4ZWxCdWZmZXIoSU9TdXJmYWNlUmVm
LCBjb25zdCBJbnRTaXplJik7CisjZW5kaWYKKworICAgIFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZl
clJlZj4gY29udmVydENNU2FtcGxlQnVmZmVyKENNU2FtcGxlQnVmZmVyUmVmLCBjb25zdCBJbnRT
aXplJik7CisgICAgUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBjcmVhdGVDTVNhbXBsZUJ1
ZmZlcihDVlBpeGVsQnVmZmVyUmVmLCBjb25zdCBNZWRpYVRpbWUmLCBjb25zdCBJbnRTaXplJik7
CisgICAgUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBjcmVhdGVDTVNhbXBsZUJ1ZmZlcihD
R0ltYWdlUmVmLCBjb25zdCBNZWRpYVRpbWUmLCBjb25zdCBJbnRTaXplJik7CisKKyAgICBSZXRh
aW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gY29udmVydFBpeGVsQnVmZmVyKENWUGl4ZWxCdWZmZXJS
ZWYsIGNvbnN0IEludFNpemUmKTsKKyAgICBSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gY3Jl
YXRlUGl4ZWxCdWZmZXIoQ01TYW1wbGVCdWZmZXJSZWYsIGNvbnN0IEludFNpemUmKTsKKyAgICBS
ZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gY3JlYXRlUGl4ZWxCdWZmZXIoQ0dJbWFnZVJlZiwg
Y29uc3QgSW50U2l6ZSYpOworCisgICAgYm9vbCBzZXRTaXplKGNvbnN0IEludFNpemUmKTsKKwor
ICAgIFJldGFpblB0cjxWVFBpeGVsVHJhbnNmZXJTZXNzaW9uUmVmPiBtX3RyYW5zZmVyU2Vzc2lv
bjsKKyAgICBSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclBvb2xSZWY+IG1fb3V0cHV0QnVmZmVyUG9v
bDsKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBtX2lvU3VyZmFjZUJ1ZmZlckF0dHJp
YnV0ZXM7CisgICAgdWludDMyX3QgbV9waXhlbEZvcm1hdDsKKyAgICBJbnRTaXplIG1fc2l6ZTsK
K307CisKK30KKworI2VuZGlmIC8vIFVTRShWSURFT1RPT0xCT1gpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9JbWFnZVRyYW5zZmVyU2Vzc2lvblZULm1t
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvSW1hZ2VUcmFuc2ZlclNlc3Np
b25WVC5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5hYTdmY2NlNjNmYzE2ODEwNzM0MDJkMGY1MmUyNDc1NWFiOWE4
MDhmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y3YvSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5tbQpAQCAtMCwwICsxLDM4MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkltYWdlVHJhbnNmZXJTZXNzaW9uVlQu
aCIKKworI2lmIFVTRShWSURFT1RPT0xCT1gpCisKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBv
cnQgIk1lZGlhU2FtcGxlQVZGT2JqQy5oIgorI2ltcG9ydCA8Q29yZU1lZGlhL0NNRm9ybWF0RGVz
Y3JpcHRpb24uaD4KKyNpbXBvcnQgPENvcmVNZWRpYS9DTVNhbXBsZUJ1ZmZlci5oPgorI2ltcG9y
dCA8cGFsL2NmL0NvcmVNZWRpYVNvZnRMaW5rLmg+CisKKyNpZiBIQVZFKElPU1VSRkFDRSkKKyNp
bmNsdWRlIDxwYWwvc3BpL2NvY29hL0lPU3VyZmFjZVNQSS5oPgorI2VuZGlmCisKKyNpbXBvcnQg
IkNvcmVWaWRlb1NvZnRMaW5rLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK3VzaW5nIG5hbWVz
cGFjZSBQQUw7CisKK3N0YXRpYyBpbmxpbmUgQ0ZTdHJpbmdSZWYgY3ZQaXhlbEZvcm1hdE9wZW5H
TEtleSgpCit7CisjaWYgUExBVEZPUk0oSU9TKSAmJiAhUExBVEZPUk0oSU9TTUFDKQorICAgIHJl
dHVybiBrQ1ZQaXhlbEZvcm1hdE9wZW5HTEVTQ29tcGF0aWJpbGl0eTsKKyNlbHNlCisgICAgcmV0
dXJuIGtDVlBpeGVsQnVmZmVyT3BlbkdMQ29tcGF0aWJpbGl0eUtleTsKKyNlbmRpZgorfQorCitJ
bWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpJbWFnZVRyYW5zZmVyU2Vzc2lvblZUKHVpbnQzMl90IHBp
eGVsRm9ybWF0KQoreworICAgIFZUUGl4ZWxUcmFuc2ZlclNlc3Npb25SZWYgdHJhbnNmZXJTZXNz
aW9uOworICAgIFZUUGl4ZWxUcmFuc2ZlclNlc3Npb25DcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVs
dCwgJnRyYW5zZmVyU2Vzc2lvbik7CisgICAgQVNTRVJUKHRyYW5zZmVyU2Vzc2lvbik7CisgICAg
bV90cmFuc2ZlclNlc3Npb24gPSBhZG9wdENGKHRyYW5zZmVyU2Vzc2lvbik7CisKKyAgICBWVFNl
c3Npb25TZXRQcm9wZXJ0eSh0cmFuc2ZlclNlc3Npb24sIGtWVFBpeGVsVHJhbnNmZXJQcm9wZXJ0
eUtleV9TY2FsaW5nTW9kZSwga1ZUU2NhbGluZ01vZGVfVHJpbSk7CisgICAgVlRTZXNzaW9uU2V0
UHJvcGVydHkodHJhbnNmZXJTZXNzaW9uLCBrVlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXlfRW5h
YmxlSGlnaFNwZWVkVHJhbnNmZXIsIEAoWUVTKSk7CisgICAgVlRTZXNzaW9uU2V0UHJvcGVydHko
dHJhbnNmZXJTZXNzaW9uLCBrVlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXlfUmVhbFRpbWUsIEAo
WUVTKSk7CisjaWYgUExBVEZPUk0oSU9TKSAmJiAhUExBVEZPUk0oSU9TTUFDKQorICAgIFZUU2Vz
c2lvblNldFByb3BlcnR5KHRyYW5zZmVyU2Vzc2lvbiwga1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5
S2V5X0VuYWJsZUhhcmR3YXJlQWNjZWxlcmF0ZWRUcmFuc2ZlciwgQChZRVMpKTsKKyNlbmRpZgor
CisgICAgbV9waXhlbEZvcm1hdCA9IHBpeGVsRm9ybWF0OworfQorCitib29sIEltYWdlVHJhbnNm
ZXJTZXNzaW9uVlQ6OnNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAobV9z
aXplID09IHNpemUgJiYgbV9vdXRwdXRCdWZmZXJQb29sKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIENGRGljdGlvbmFyeVJlZiBwaXhlbEJ1ZmZlck9wdGlvbnMgPSAoX19icmlkZ2UgQ0ZE
aWN0aW9uYXJ5UmVmKSBAeworICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ1ZQaXhlbEJ1
ZmZlcldpZHRoS2V5IDpAKHNpemUud2lkdGgoKSksCisgICAgICAgIChfX2JyaWRnZSBOU1N0cmlu
ZyAqKWtDVlBpeGVsQnVmZmVySGVpZ2h0S2V5OkAoc2l6ZS5oZWlnaHQoKSksCisgICAgICAgIChf
X2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsQnVmZmVyUGl4ZWxGb3JtYXRUeXBlS2V5OkAobV9w
aXhlbEZvcm1hdCksCisgICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWN2UGl4ZWxGb3JtYXRP
cGVuR0xLZXkoKSA6IEAoWUVTKSwKKyAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4
ZWxCdWZmZXJJT1N1cmZhY2VQcm9wZXJ0aWVzS2V5IDogQHsgLyplbXB0eSBkaWN0aW9uYXJ5Ki8g
fSwKKyAgICB9OworCisgICAgQ0ZEaWN0aW9uYXJ5UmVmIHBpeGVsQnVmZmVyUG9vbE9wdGlvbnMg
PSAoX19icmlkZ2UgQ0ZEaWN0aW9uYXJ5UmVmKSBAeworICAgICAgICAoX19icmlkZ2UgTlNTdHJp
bmcgKilrQ1ZQaXhlbEJ1ZmZlclBvb2xNaW5pbXVtQnVmZmVyQ291bnRLZXkgOiBAKDYpCisgICAg
fTsKKworICAgIENWUGl4ZWxCdWZmZXJQb29sUmVmIGJ1ZmZlclBvb2w7CisgICAgYXV0byBzdGF0
dXMgPSBDVlBpeGVsQnVmZmVyUG9vbENyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBwaXhlbEJ1
ZmZlclBvb2xPcHRpb25zLCBwaXhlbEJ1ZmZlck9wdGlvbnMsICZidWZmZXJQb29sKTsKKyAgICBB
U1NFUlQoIXN0YXR1cyk7CisgICAgaWYgKHN0YXR1cyAhPSBrQ1ZSZXR1cm5TdWNjZXNzKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX291dHB1dEJ1ZmZlclBvb2wgPSBhZG9wdENGKGJ1
ZmZlclBvb2wpOworICAgIG1fc2l6ZSA9IHNpemU7CisgICAgbV9pb1N1cmZhY2VCdWZmZXJBdHRy
aWJ1dGVzID0gbnVsbHB0cjsKKworICAgIHJldHVybiB0cnVlOworfQorCitSZXRhaW5QdHI8Q1ZQ
aXhlbEJ1ZmZlclJlZj4gSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y29udmVydFBpeGVsQnVmZmVy
KENWUGl4ZWxCdWZmZXJSZWYgc291cmNlQnVmZmVyLCBjb25zdCBJbnRTaXplJiBzaXplKQorewor
ICAgIGlmIChzb3VyY2VCdWZmZXIgJiYgbV9zaXplID09IEludFNpemUoQ1ZQaXhlbEJ1ZmZlckdl
dFdpZHRoKHNvdXJjZUJ1ZmZlciksIENWUGl4ZWxCdWZmZXJHZXRIZWlnaHQoc291cmNlQnVmZmVy
KSkgJiYgbV9waXhlbEZvcm1hdCA9PSBDVlBpeGVsQnVmZmVyR2V0UGl4ZWxGb3JtYXRUeXBlKHNv
dXJjZUJ1ZmZlcikpCisgICAgICAgIHJldHVybiByZXRhaW5QdHIoc291cmNlQnVmZmVyKTsKKwor
ICAgIGlmICghc291cmNlQnVmZmVyIHx8ICFzZXRTaXplKHNpemUpKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIENWUGl4ZWxCdWZmZXJSZWYgb3V0cHV0QnVmZmVyID0gbnVsbHB0cjsK
KyAgICBhdXRvIHN0YXR1cyA9IENWUGl4ZWxCdWZmZXJQb29sQ3JlYXRlUGl4ZWxCdWZmZXIoa0NG
QWxsb2NhdG9yRGVmYXVsdCwgbV9vdXRwdXRCdWZmZXJQb29sLmdldCgpLCAmb3V0cHV0QnVmZmVy
KTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhLCAiSW1hZ2VU
cmFuc2ZlclNlc3Npb25WVDo6Y29udmVydFBpeGVsQnVmZmVyLCBDVlBpeGVsQnVmZmVyUG9vbENy
ZWF0ZVBpeGVsQnVmZmVyIGZhaWxlZCB3aXRoIGVycm9yICVkIiwgc3RhdGljX2Nhc3Q8aW50Pihz
dGF0dXMpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIGF1dG8gcmVzdWx0
ID0gYWRvcHRDRihvdXRwdXRCdWZmZXIpOworCisgICAgYXV0byBlcnIgPSBWVFBpeGVsVHJhbnNm
ZXJTZXNzaW9uVHJhbnNmZXJJbWFnZShtX3RyYW5zZmVyU2Vzc2lvbi5nZXQoKSwgc291cmNlQnVm
ZmVyLCBvdXRwdXRCdWZmZXIpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgUkVMRUFTRV9MT0co
TWVkaWEsICJJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjb252ZXJ0UGl4ZWxCdWZmZXIsIFZUUGl4
ZWxUcmFuc2ZlclNlc3Npb25UcmFuc2ZlckltYWdlIGZhaWxlZCB3aXRoIGVycm9yICVkIiwgc3Rh
dGljX2Nhc3Q8aW50PihlcnIpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJSZWY+IEltYWdl
VHJhbnNmZXJTZXNzaW9uVlQ6OmNyZWF0ZVBpeGVsQnVmZmVyKENNU2FtcGxlQnVmZmVyUmVmIHNv
dXJjZUJ1ZmZlciwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBhdXRvIGNvbnZlcnRlZFBp
eGVsQnVmZmVyID0gY29udmVydFBpeGVsQnVmZmVyKENNU2FtcGxlQnVmZmVyR2V0SW1hZ2VCdWZm
ZXIoc291cmNlQnVmZmVyKSwgc2l6ZSk7CisgICAgaWYgKCFjb252ZXJ0ZWRQaXhlbEJ1ZmZlcikK
KyAgICAgICAgUkVMRUFTRV9MT0coTWVkaWEsICJJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVh
dGVQaXhlbEJ1ZmZlcjogQ01TYW1wbGVCdWZmZXJHZXRJbWFnZUJ1ZmZlciByZXR1cm5lZCBudWxs
cHRyIik7CisKKyAgICByZXR1cm4gY29udmVydGVkUGl4ZWxCdWZmZXI7Cit9CisKK1JldGFpblB0
cjxDTVNhbXBsZUJ1ZmZlclJlZj4gSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y29udmVydENNU2Ft
cGxlQnVmZmVyKENNU2FtcGxlQnVmZmVyUmVmIHNvdXJjZUJ1ZmZlciwgY29uc3QgSW50U2l6ZSYg
c2l6ZSkKK3sKKyAgICBpZiAoIXNvdXJjZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBhdXRvIGRlc2NyaXB0aW9uID0gQ01TYW1wbGVCdWZmZXJHZXRGb3JtYXREZXNjcmlw
dGlvbihzb3VyY2VCdWZmZXIpOworICAgIGF1dG8gc291cmNlU2l6ZSA9IEZsb2F0U2l6ZShDTVZp
ZGVvRm9ybWF0RGVzY3JpcHRpb25HZXRQcmVzZW50YXRpb25EaW1lbnNpb25zKGRlc2NyaXB0aW9u
LCB0cnVlLCB0cnVlKSk7CisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IHN0YXRpY19jYXN0PENWUGl4
ZWxCdWZmZXJSZWY+KENNU2FtcGxlQnVmZmVyR2V0SW1hZ2VCdWZmZXIoc291cmNlQnVmZmVyKSk7
CisgICAgaWYgKHNpemUgPT0gcm91bmRlZEludFNpemUoc291cmNlU2l6ZSkgJiYgbV9waXhlbEZv
cm1hdCA9PSBDVlBpeGVsQnVmZmVyR2V0UGl4ZWxGb3JtYXRUeXBlKHBpeGVsQnVmZmVyKSkKKyAg
ICAgICAgcmV0dXJuIHJldGFpblB0cihzb3VyY2VCdWZmZXIpOworCisgICAgaWYgKCFzZXRTaXpl
KHNpemUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gY29udmVydGVkUGl4
ZWxCdWZmZXIgPSBjcmVhdGVQaXhlbEJ1ZmZlcihzb3VyY2VCdWZmZXIsIHNpemUpOworICAgIGlm
ICghY29udmVydGVkUGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
Q01JdGVtQ291bnQgaXRlbUNvdW50ID0gMDsKKyAgICBhdXRvIHN0YXR1cyA9IENNU2FtcGxlQnVm
ZmVyR2V0U2FtcGxlVGltaW5nSW5mb0FycmF5KHNvdXJjZUJ1ZmZlciwgMSwgbnVsbHB0ciwgJml0
ZW1Db3VudCk7CisgICAgaWYgKHN0YXR1cyAhPSBub0VycikgeworICAgICAgICBSRUxFQVNFX0xP
RyhNZWRpYSwgIkltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNvbnZlcnRDTVNhbXBsZUJ1ZmZlcjog
Q01TYW1wbGVCdWZmZXJHZXRTYW1wbGVUaW1pbmdJbmZvQXJyYXkgZmFpbGVkIHdpdGggZXJyb3Ig
Y29kZTogJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICB9CisgICAgVmVjdG9yPENNU2FtcGxlVGltaW5nSW5mbz4gdGltaW5nSW5mb0Fy
cmF5OworICAgIENNU2FtcGxlVGltaW5nSW5mbyogdGltZWluZ0luZm9QdHIgPSBudWxscHRyOwor
ICAgIGlmIChpdGVtQ291bnQpIHsKKyAgICAgICAgdGltaW5nSW5mb0FycmF5Lmdyb3coaXRlbUNv
dW50KTsKKyAgICAgICAgc3RhdHVzID0gQ01TYW1wbGVCdWZmZXJHZXRTYW1wbGVUaW1pbmdJbmZv
QXJyYXkoc291cmNlQnVmZmVyLCBpdGVtQ291bnQsIHRpbWluZ0luZm9BcnJheS5kYXRhKCksIG51
bGxwdHIpOworICAgICAgICBpZiAoc3RhdHVzICE9IG5vRXJyKSB7CisgICAgICAgICAgICBSRUxF
QVNFX0xPRyhNZWRpYSwgIkltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNvbnZlcnRDTVNhbXBsZUJ1
ZmZlcjogQ01TYW1wbGVCdWZmZXJHZXRTYW1wbGVUaW1pbmdJbmZvQXJyYXkgZmFpbGVkIHdpdGgg
ZXJyb3IgY29kZTogJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOworICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgdGltZWluZ0luZm9QdHIgPSB0aW1p
bmdJbmZvQXJyYXkuZGF0YSgpOworICAgIH0KKworICAgIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlv
blJlZiBmb3JtYXREZXNjcmlwdGlvbiA9IG51bGxwdHI7CisgICAgc3RhdHVzID0gQ01WaWRlb0Zv
cm1hdERlc2NyaXB0aW9uQ3JlYXRlRm9ySW1hZ2VCdWZmZXIoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
Y29udmVydGVkUGl4ZWxCdWZmZXIuZ2V0KCksICZmb3JtYXREZXNjcmlwdGlvbik7CisgICAgaWYg
KHN0YXR1cyAhPSBub0VycikgeworICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIkltYWdlVHJh
bnNmZXJTZXNzaW9uVlQ6OmNvbnZlcnRDTVNhbXBsZUJ1ZmZlcjogQ01WaWRlb0Zvcm1hdERlc2Ny
aXB0aW9uQ3JlYXRlRm9ySW1hZ2VCdWZmZXIgcmV0dXJuZWQ6ICVkIiwgc3RhdGljX2Nhc3Q8aW50
PihzdGF0dXMpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgQ01TYW1w
bGVCdWZmZXJSZWYgcmVzaXplZFNhbXBsZUJ1ZmZlcjsKKyAgICBzdGF0dXMgPSBDTVNhbXBsZUJ1
ZmZlckNyZWF0ZVJlYWR5V2l0aEltYWdlQnVmZmVyKGtDRkFsbG9jYXRvckRlZmF1bHQsIGNvbnZl
cnRlZFBpeGVsQnVmZmVyLmdldCgpLCBmb3JtYXREZXNjcmlwdGlvbiwgdGltZWluZ0luZm9QdHIs
ICZyZXNpemVkU2FtcGxlQnVmZmVyKTsKKyAgICBDRlJlbGVhc2UoZm9ybWF0RGVzY3JpcHRpb24p
OworICAgIGlmIChzdGF0dXMgIT0gbm9FcnIpIHsKKyAgICAgICAgUkVMRUFTRV9MT0coTWVkaWEs
ICJJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjb252ZXJ0Q01TYW1wbGVCdWZmZXI6IGZhaWxlZCB0
byBjcmVhdGUgQ01TYW1wbGVCdWZmZXIgd2l0aCBlcnJvciBjb2RlOiAlZCIsIHN0YXRpY19jYXN0
PGludD4oc3RhdHVzKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHJl
dHVybiBhZG9wdENGKHJlc2l6ZWRTYW1wbGVCdWZmZXIpOworfQorCitSZXRhaW5QdHI8Q1ZQaXhl
bEJ1ZmZlclJlZj4gSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlUGl4ZWxCdWZmZXIoQ0dJ
bWFnZVJlZiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAoIWltYWdlIHx8
ICFzZXRTaXplKHNpemUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIENWUGl4ZWxC
dWZmZXJSZWYgcmdiQnVmZmVyOworICAgIGF1dG8gaW1hZ2VTaXplID0gSW50U2l6ZShDR0ltYWdl
R2V0V2lkdGgoaW1hZ2UpLCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKSk7CisgICAgYXV0byBzdGF0
dXMgPSBDVlBpeGVsQnVmZmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGltYWdlU2l6ZS53
aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCksIGtDVlBpeGVsRm9ybWF0VHlwZV8zMkFSR0IsIG51
bGxwdHIsICZyZ2JCdWZmZXIpOworICAgIGlmIChzdGF0dXMgIT0ga0NWUmV0dXJuU3VjY2Vzcykg
eworICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIkltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNy
ZWF0ZVBpeGVsQnVmZmVyOiBDVlBpeGVsQnVmZmVyQ3JlYXRlIGZhaWxlZCB3aXRoIGVycm9yIGNv
ZGU6ICVkIiwgc3RhdGljX2Nhc3Q8aW50PihzdGF0dXMpKTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorCisgICAgQ1ZQaXhlbEJ1ZmZlckxvY2tCYXNlQWRkcmVzcyhyZ2JCdWZmZXIs
IDApOworICAgIHZvaWQqIGRhdGEgPSBDVlBpeGVsQnVmZmVyR2V0QmFzZUFkZHJlc3MocmdiQnVm
ZmVyKTsKKyAgICBhdXRvIHJldGFpbmVkUkdCQnVmZmVyID0gYWRvcHRDRihyZ2JCdWZmZXIpOwor
ICAgIGF1dG8gY29udGV4dCA9IENHQml0bWFwQ29udGV4dENyZWF0ZShkYXRhLCBpbWFnZVNpemUu
d2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpLCA4LCBDVlBpeGVsQnVmZmVyR2V0Qnl0ZXNQZXJS
b3cocmdiQnVmZmVyKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwgKENHQml0bWFwSW5mbykga0NHSW1h
Z2VBbHBoYU5vbmVTa2lwRmlyc3QpOworICAgIGlmICghY29udGV4dCkgeworICAgICAgICBSRUxF
QVNFX0xPRyhNZWRpYSwgIkltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNyZWF0ZVBpeGVsQnVmZmVy
OiBDR0JpdG1hcENvbnRleHRDcmVhdGUgcmV0dXJuZWQgbnVsbHB0ciIpOworICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBhdXRvIHJldGFpbmVkQ29udGV4dCA9IGFkb3B0Q0Yo
Y29udGV4dCk7CisgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQsIENHUmVjdE1ha2UoMCwg
MCwgaW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSksIGltYWdlKTsKKyAgICBD
VlBpeGVsQnVmZmVyVW5sb2NrQmFzZUFkZHJlc3MocmdiQnVmZmVyLCAwKTsKKworICAgIHJldHVy
biBjb252ZXJ0UGl4ZWxCdWZmZXIocmdiQnVmZmVyLCBzaXplKTsKK30KKworUmV0YWluUHRyPENN
U2FtcGxlQnVmZmVyUmVmPiBJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVhdGVDTVNhbXBsZUJ1
ZmZlcihDVlBpeGVsQnVmZmVyUmVmIHNvdXJjZUJ1ZmZlciwgY29uc3QgTWVkaWFUaW1lJiBzYW1w
bGVUaW1lLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIGlmICghc291cmNlQnVmZmVyIHx8
ICFzZXRTaXplKHNpemUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gYnVm
ZmVyU2l6ZSA9IEludFNpemUoQ1ZQaXhlbEJ1ZmZlckdldFdpZHRoKHNvdXJjZUJ1ZmZlciksIENW
UGl4ZWxCdWZmZXJHZXRIZWlnaHQoc291cmNlQnVmZmVyKSk7CisgICAgUmV0YWluUHRyPENWUGl4
ZWxCdWZmZXJSZWY+IGlucHV0QnVmZmVyID0gc291cmNlQnVmZmVyOworICAgIGlmIChidWZmZXJT
aXplICE9IG1fc2l6ZSB8fCBtX3BpeGVsRm9ybWF0ICE9IENWUGl4ZWxCdWZmZXJHZXRQaXhlbEZv
cm1hdFR5cGUoc291cmNlQnVmZmVyKSkgeworICAgICAgICBpbnB1dEJ1ZmZlciA9IGNvbnZlcnRQ
aXhlbEJ1ZmZlcihzb3VyY2VCdWZmZXIsIG1fc2l6ZSk7CisgICAgICAgIGlmICghaW5wdXRCdWZm
ZXIpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBDTVZpZGVvRm9y
bWF0RGVzY3JpcHRpb25SZWYgZm9ybWF0RGVzY3JpcHRpb24gPSBudWxscHRyOworICAgIGF1dG8g
c3RhdHVzID0gQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uQ3JlYXRlRm9ySW1hZ2VCdWZmZXIoa0NG
QWxsb2NhdG9yRGVmYXVsdCwgKENWSW1hZ2VCdWZmZXJSZWYpaW5wdXRCdWZmZXIuZ2V0KCksICZm
b3JtYXREZXNjcmlwdGlvbik7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICBSRUxFQVNFX0xP
RyhNZWRpYSwgIkltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNvbnZlcnRQaXhlbEJ1ZmZlcjogZmFp
bGVkIHRvIGluaXRpYWxpemUgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uIHdpdGggZXJyb3IgY29k
ZTogJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9CisKKyAgICBDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGVCdWZmZXI7CisgICAgYXV0
byBjbVRpbWUgPSB0b0NNVGltZShzYW1wbGVUaW1lKTsKKyAgICBDTVNhbXBsZVRpbWluZ0luZm8g
dGltaW5nSW5mbyA9IHsga0NNVGltZUludmFsaWQsIGNtVGltZSwgY21UaW1lIH07CisgICAgc3Rh
dHVzID0gQ01TYW1wbGVCdWZmZXJDcmVhdGVSZWFkeVdpdGhJbWFnZUJ1ZmZlcihrQ0ZBbGxvY2F0
b3JEZWZhdWx0LCAoQ1ZJbWFnZUJ1ZmZlclJlZilpbnB1dEJ1ZmZlci5nZXQoKSwgZm9ybWF0RGVz
Y3JpcHRpb24sICZ0aW1pbmdJbmZvLCAmc2FtcGxlQnVmZmVyKTsKKyAgICBDRlJlbGVhc2UoZm9y
bWF0RGVzY3JpcHRpb24pOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgUkVMRUFTRV9MT0co
TWVkaWEsICJJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjb252ZXJ0UGl4ZWxCdWZmZXI6IGZhaWxl
ZCB0byBpbml0aWFsaXplIENNU2FtcGxlQnVmZmVyIHdpdGggZXJyb3IgY29kZTogJWQiLCBzdGF0
aWNfY2FzdDxpbnQ+KHN0YXR1cykpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisK
KyAgICByZXR1cm4gYWRvcHRDRihzYW1wbGVCdWZmZXIpOworfQorCitSZXRhaW5QdHI8Q01TYW1w
bGVCdWZmZXJSZWY+IEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNyZWF0ZUNNU2FtcGxlQnVmZmVy
KENHSW1hZ2VSZWYgaW1hZ2UsIGNvbnN0IE1lZGlhVGltZSYgc2FtcGxlVGltZSwgY29uc3QgSW50
U2l6ZSYgc2l6ZSkKK3sKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gY3JlYXRlUGl4ZWxCdWZmZXIo
aW1hZ2UsIHNpemUpOworICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgcmV0dXJuIGNyZWF0ZUNNU2FtcGxlQnVmZmVyKHBpeGVsQnVmZmVyLmdldCgp
LCBzYW1wbGVUaW1lLCBzaXplKTsKK30KKworI2lmIEhBVkUoSU9TVVJGQUNFKQorCisjaWYgUExB
VEZPUk0oTUFDKQorc3RhdGljIGludDMyX3Qgcm91bmRVcFRvTWFjcm9ibG9ja011bHRpcGxlKGlu
dDMyX3Qgc2l6ZSkKK3sKKyAgICByZXR1cm4gKHNpemUgKyAxNSkgJiB+MTU7Cit9CisjZW5kaWYK
KworQ0ZEaWN0aW9uYXJ5UmVmIEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmlvU3VyZmFjZVBpeGVs
QnVmZmVyQ3JlYXRpb25PcHRpb25zKElPU3VyZmFjZVJlZiBzdXJmYWNlKQoreworICAgIGlmICht
X2lvU3VyZmFjZUJ1ZmZlckF0dHJpYnV0ZXMpCisgICAgICAgIHJldHVybiBtX2lvU3VyZmFjZUJ1
ZmZlckF0dHJpYnV0ZXMuZ2V0KCk7CisKKyAgICBtX2lvU3VyZmFjZUJ1ZmZlckF0dHJpYnV0ZXMg
PSAoX19icmlkZ2UgQ0ZEaWN0aW9uYXJ5UmVmKSBAeworICAgICAgICAoX19icmlkZ2UgTlNTdHJp
bmcgKiljdlBpeGVsRm9ybWF0T3BlbkdMS2V5KCkgOiBAKFlFUyksCisgICAgfTsKKworI2lmIFBM
QVRGT1JNKE1BQykKKyAgICBhdXRvIGZvcm1hdCA9IElPU3VyZmFjZUdldFBpeGVsRm9ybWF0KHN1
cmZhY2UpOworICAgIGF1dG8gd2lkdGggPSBJT1N1cmZhY2VHZXRXaWR0aChzdXJmYWNlKTsKKyAg
ICBhdXRvIGhlaWdodCA9IElPU3VyZmFjZUdldEhlaWdodChzdXJmYWNlKTsKKyAgICBpbnQzMl90
IGV4dGVuZGVkUmlnaHQgPSByb3VuZFVwVG9NYWNyb2Jsb2NrTXVsdGlwbGUod2lkdGgpIC0gd2lk
dGg7CisgICAgaW50MzJfdCBleHRlbmRlZEJvdHRvbSA9IHJvdW5kVXBUb01hY3JvYmxvY2tNdWx0
aXBsZShoZWlnaHQpIC0gaGVpZ2h0OworCisgICAgaWYgKChmb3JtYXQgPT0ga0NWUGl4ZWxGb3Jt
YXRUeXBlXzQyMFlwQ2JDcjhCaVBsYW5hclZpZGVvUmFuZ2UgfHwgZm9ybWF0ID09IGtDVlBpeGVs
Rm9ybWF0VHlwZV80MjBZcENiQ3I4QmlQbGFuYXJGdWxsUmFuZ2UpCisgICAgICAgICYmIChJT1N1
cmZhY2VHZXRCeXRlc1BlclJvd09mUGxhbmUoc3VyZmFjZSwgMCkgPj0gd2lkdGggKyBleHRlbmRl
ZFJpZ2h0KQorICAgICAgICAmJiAoSU9TdXJmYWNlR2V0Qnl0ZXNQZXJSb3dPZlBsYW5lKHN1cmZh
Y2UsIDEpID49IHdpZHRoICsgZXh0ZW5kZWRSaWdodCkKKyAgICAgICAgJiYgKElPU3VyZmFjZUdl
dEFsbG9jU2l6ZShzdXJmYWNlKSA+PSAoaGVpZ2h0ICsgZXh0ZW5kZWRCb3R0b20pICogSU9TdXJm
YWNlR2V0Qnl0ZXNQZXJSb3dPZlBsYW5lKHN1cmZhY2UsIDApICogMyAvIDIpKSB7CisgICAgICAg
ICAgICBtX2lvU3VyZmFjZUJ1ZmZlckF0dHJpYnV0ZXMgPSAoX19icmlkZ2UgQ0ZEaWN0aW9uYXJ5
UmVmKSBAeworICAgICAgICAgICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsQnVm
ZmVyT3BlbkdMQ29tcGF0aWJpbGl0eUtleSA6IEAoWUVTKSwKKyAgICAgICAgICAgICAgICAoX19i
cmlkZ2UgTlNTdHJpbmcgKilrQ1ZQaXhlbEJ1ZmZlckV4dGVuZGVkUGl4ZWxzUmlnaHRLZXkgOiBA
KGV4dGVuZGVkUmlnaHQpLAorICAgICAgICAgICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtD
VlBpeGVsQnVmZmVyRXh0ZW5kZWRQaXhlbHNCb3R0b21LZXkgOiBAKGV4dGVuZGVkQm90dG9tKQor
ICAgICAgICAgICAgfTsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzdXJmYWNlKTsK
KyNlbmRpZgorCisgICAgcmV0dXJuIG1faW9TdXJmYWNlQnVmZmVyQXR0cmlidXRlcy5nZXQoKTsK
K30KKworUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJSZWY+IEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6
OmNyZWF0ZVBpeGVsQnVmZmVyKElPU3VyZmFjZVJlZiBzdXJmYWNlLCBjb25zdCBJbnRTaXplJiBz
aXplKQoreworICAgIGlmICghc3VyZmFjZSB8fCAhc2V0U2l6ZShzaXplKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBDVlBpeGVsQnVmZmVyUmVmIHBpeGVsQnVmZmVyOworICAgIGF1
dG8gc3RhdHVzID0gQ1ZQaXhlbEJ1ZmZlckNyZWF0ZVdpdGhJT1N1cmZhY2Uoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgc3VyZmFjZSwgaW9TdXJmYWNlUGl4ZWxCdWZmZXJDcmVhdGlvbk9wdGlvbnMoc3Vy
ZmFjZSksICZwaXhlbEJ1ZmZlcik7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICBSRUxFQVNF
X0xPRyhNZWRpYSwgIkNWUGl4ZWxCdWZmZXJDcmVhdGVXaXRoSU9TdXJmYWNlIGZhaWxlZCB3aXRo
IGVycm9yIGNvZGU6ICVkIiwgc3RhdGljX2Nhc3Q8aW50PihzdGF0dXMpKTsKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgYXV0byByZXRhaW5lZEJ1ZmZlciA9IGFkb3B0Q0Yo
cGl4ZWxCdWZmZXIpOworICAgIGlmIChtX3NpemUgPT0gSW50U2l6ZShDVlBpeGVsQnVmZmVyR2V0
V2lkdGgocGl4ZWxCdWZmZXIpLCBDVlBpeGVsQnVmZmVyR2V0SGVpZ2h0KHBpeGVsQnVmZmVyKSkg
JiYgbV9waXhlbEZvcm1hdCA9PSBDVlBpeGVsQnVmZmVyR2V0UGl4ZWxGb3JtYXRUeXBlKHBpeGVs
QnVmZmVyKSkKKyAgICAgICAgcmV0dXJuIHJldGFpbmVkQnVmZmVyOworCisgICAgcmV0dXJuIGNv
bnZlcnRQaXhlbEJ1ZmZlcihwaXhlbEJ1ZmZlciwgc2l6ZSk7Cit9CisKK1JldGFpblB0cjxDTVNh
bXBsZUJ1ZmZlclJlZj4gSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlQ01TYW1wbGVCdWZm
ZXIoSU9TdXJmYWNlUmVmIHN1cmZhY2UsIGNvbnN0IE1lZGlhVGltZSYgc2FtcGxlVGltZSwgY29u
c3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAoIXN1cmZhY2UgfHwgIXNldFNpemUoc2l6ZSkp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IGNyZWF0
ZVBpeGVsQnVmZmVyKHN1cmZhY2UsIHNpemUpOworICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGNyZWF0ZUNNU2FtcGxlQnVmZmVyKHBp
eGVsQnVmZmVyLmdldCgpLCBzYW1wbGVUaW1lLCBzaXplKTsKK30KKyNlbmRpZgorCitSZWZQdHI8
TWVkaWFTYW1wbGU+IEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNvbnZlcnRNZWRpYVNhbXBsZShN
ZWRpYVNhbXBsZSYgc2FtcGxlLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIEFTU0VSVChz
YW1wbGUucGxhdGZvcm1TYW1wbGUoKS50eXBlID09IFBsYXRmb3JtU2FtcGxlOjpDTVNhbXBsZUJ1
ZmZlclR5cGUpOworCisgICAgaWYgKHNpemUgPT0gcm91bmRlZEludFNpemUoc2FtcGxlLnByZXNl
bnRhdGlvblNpemUoKSkpCisgICAgICAgIHJldHVybiAmc2FtcGxlOworCisgICAgaWYgKCFzZXRT
aXplKHNpemUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gcmVzaXplZEJ1
ZmZlciA9IGNvbnZlcnRDTVNhbXBsZUJ1ZmZlcihzYW1wbGUucGxhdGZvcm1TYW1wbGUoKS5zYW1w
bGUuY21TYW1wbGVCdWZmZXIsIHNpemUpOworICAgIGlmICghcmVzaXplZEJ1ZmZlcikKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVh
dGUocmVzaXplZEJ1ZmZlci5nZXQoKSwgc2FtcGxlLnZpZGVvUm90YXRpb24oKSwgc2FtcGxlLnZp
ZGVvTWlycm9yZWQoKSk7Cit9CisKKyNpZiBIQVZFKElPU1VSRkFDRSkKK1JlZlB0cjxNZWRpYVNh
bXBsZT4gSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlTWVkaWFTYW1wbGUoSU9TdXJmYWNl
UmVmIHN1cmZhY2UsIGNvbnN0IE1lZGlhVGltZSYgc2FtcGxlVGltZSwgY29uc3QgSW50U2l6ZSYg
c2l6ZSwgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb24gcm90YXRpb24sIGJvb2wgbWlycm9yZWQp
Cit7CisgICAgYXV0byBzYW1wbGVCdWZmZXIgPSBjcmVhdGVDTVNhbXBsZUJ1ZmZlcihzdXJmYWNl
LCBzYW1wbGVUaW1lLCBzaXplKTsKKyAgICBpZiAoIXNhbXBsZUJ1ZmZlcikKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVhdGUoc2Ft
cGxlQnVmZmVyLmdldCgpLCByb3RhdGlvbiwgbWlycm9yZWQpOworfQorI2VuZGlmCisKK1JlZlB0
cjxNZWRpYVNhbXBsZT4gSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlTWVkaWFTYW1wbGUo
Q0dJbWFnZVJlZiBpbWFnZSwgY29uc3QgTWVkaWFUaW1lJiBzYW1wbGVUaW1lLCBjb25zdCBJbnRT
aXplJiBzaXplLCBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbiByb3RhdGlvbiwgYm9vbCBtaXJy
b3JlZCkKK3sKKyAgICBhdXRvIHNhbXBsZUJ1ZmZlciA9IGNyZWF0ZUNNU2FtcGxlQnVmZmVyKGlt
YWdlLCBzYW1wbGVUaW1lLCBzaXplKTsKKyAgICBpZiAoIXNhbXBsZUJ1ZmZlcikKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVhdGUo
c2FtcGxlQnVmZmVyLmdldCgpLCByb3RhdGlvbiwgbWlycm9yZWQpOworfQorCitSZWZQdHI8TWVk
aWFTYW1wbGU+IEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNyZWF0ZU1lZGlhU2FtcGxlKENNU2Ft
cGxlQnVmZmVyUmVmIGJ1ZmZlciwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgTWVkaWFTYW1wbGU6OlZp
ZGVvUm90YXRpb24gcm90YXRpb24sIGJvb2wgbWlycm9yZWQpCit7CisgICAgYXV0byBzYW1wbGVC
dWZmZXIgPSBjb252ZXJ0Q01TYW1wbGVCdWZmZXIoYnVmZmVyLCBzaXplKTsKKyAgICBpZiAoIXNh
bXBsZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gTWVkaWFT
YW1wbGVBVkZPYmpDOjpjcmVhdGUoc2FtcGxlQnVmZmVyLmdldCgpLCByb3RhdGlvbiwgbWlycm9y
ZWQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoVklERU9U
T09MQk9YKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3Yv
UGl4ZWxCdWZmZXJSZXNpemVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
di9QaXhlbEJ1ZmZlclJlc2l6ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Rj
ZDRhYjIyNDA1MGU0N2ZiNTczYzVhOTNlMzc1Zjg4MjkxNWY1ZC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jdi9QaXhlbEJ1ZmZlclJlc2l6ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFVTRShWSURFT1RPT0xCT1gpCi0K
LSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi10eXBl
ZGVmIHN0cnVjdCBPcGFxdWVWVFBpeGVsVHJhbnNmZXJTZXNzaW9uKiBWVFBpeGVsVHJhbnNmZXJT
ZXNzaW9uUmVmOwotdHlwZWRlZiBzdHJ1Y3QgX19DVkJ1ZmZlciAqQ1ZQaXhlbEJ1ZmZlclJlZjsK
LXR5cGVkZWYgc3RydWN0IF9fQ1ZQaXhlbEJ1ZmZlclBvb2wgKkNWUGl4ZWxCdWZmZXJQb29sUmVm
OwotdHlwZWRlZiBzdHJ1Y3Qgb3BhcXVlQ01TYW1wbGVCdWZmZXIgKkNNU2FtcGxlQnVmZmVyUmVm
OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFBpeGVsQnVmZmVyUmVzaXplciB7Ci1w
dWJsaWM6Ci0gICAgUGl4ZWxCdWZmZXJSZXNpemVyKEludFNpemUsIE9TVHlwZSk7Ci0KLSAgICBS
ZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gcmVzaXplKENWUGl4ZWxCdWZmZXJSZWYpOwotICAg
IFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4gcmVzaXplKENNU2FtcGxlQnVmZmVyUmVmKTsK
LSAgICBib29sIGNhblJlc2l6ZVRvKEludFNpemUgc2l6ZSkgeyByZXR1cm4gc2l6ZSA9PSBtX3Np
emU7IH0KLQotcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8VlRQaXhlbFRyYW5zZmVyU2Vzc2lvblJl
Zj4gbV90cmFuc2ZlclNlc3Npb247Ci0gICAgUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJQb29sUmVm
PiBtX2J1ZmZlclBvb2w7Ci0gICAgSW50U2l6ZSBtX3NpemU7Ci19OwotCi19Ci0KLSNlbmRpZiAv
LyBVU0UoVklERU9UT09MQk9YKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJSZXNpemVyLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJSZXNpemVyLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA2Yzc0MWEwY2YzNTIwMTI2MjlhMDI5MDE4ZmNjNTIyY2RiYmViZTg4Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2N2L1BpeGVsQnVmZmVyUmVzaXplci5tbQorKysgL2Rldi9udWxs
CkBAIC0xLDEzOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2lt
cG9ydCAiUGl4ZWxCdWZmZXJSZXNpemVyLmgiCi0KLSNpZiBVU0UoVklERU9UT09MQk9YKQotCi0j
aW1wb3J0ICJMb2dnaW5nLmgiCi0jaW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4KLQotI2ltcG9y
dCAiQ29yZVZpZGVvU29mdExpbmsuaCIKLSNpbXBvcnQgIlZpZGVvVG9vbGJveFNvZnRMaW5rLmgi
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGl4ZWxCdWZmZXJSZXNpemVyOjpQaXhlbEJ1ZmZl
clJlc2l6ZXIoSW50U2l6ZSBzaXplLCBPU1R5cGUgdmlkZW9Gb3JtYXQpCi17Ci0gICAgVlRQaXhl
bFRyYW5zZmVyU2Vzc2lvblJlZiB0cmFuc2ZlclNlc3Npb247Ci0gICAgVlRQaXhlbFRyYW5zZmVy
U2Vzc2lvbkNyZWF0ZShOVUxMLCAmdHJhbnNmZXJTZXNzaW9uKTsKLSAgICBBU1NFUlQodHJhbnNm
ZXJTZXNzaW9uKTsKLSAgICBtX3RyYW5zZmVyU2Vzc2lvbiA9IGFkb3B0Q0YodHJhbnNmZXJTZXNz
aW9uKTsKLQotICAgIFZUU2Vzc2lvblNldFByb3BlcnR5KHRyYW5zZmVyU2Vzc2lvbiwga1ZUUGl4
ZWxUcmFuc2ZlclByb3BlcnR5S2V5X1NjYWxpbmdNb2RlLCBrVlRTY2FsaW5nTW9kZV9UcmltKTsK
LQotICAgIENGRGljdGlvbmFyeVJlZiBzb3VyY2VQaXhlbEJ1ZmZlck9wdGlvbnMgPSAoX19icmlk
Z2UgQ0ZEaWN0aW9uYXJ5UmVmKSBAewotICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ1ZQ
aXhlbEJ1ZmZlcldpZHRoS2V5IDpAKHNpemUud2lkdGgoKSksCi0gICAgICAgIChfX2JyaWRnZSBO
U1N0cmluZyAqKWtDVlBpeGVsQnVmZmVySGVpZ2h0S2V5OkAoc2l6ZS5oZWlnaHQoKSksCi0gICAg
ICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsQnVmZmVyUGl4ZWxGb3JtYXRUeXBlS2V5
OkAodmlkZW9Gb3JtYXQpLAotI2lmIFBMQVRGT1JNKElPUykgJiYgIVBMQVRGT1JNKElPU01BQykK
LSAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxGb3JtYXRPcGVuR0xFU0NvbXBh
dGliaWxpdHkgOiBAKFlFUyksCi0jZWxzZQotICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilr
Q1ZQaXhlbEJ1ZmZlck9wZW5HTENvbXBhdGliaWxpdHlLZXkgOiBAKFlFUyksCi0jZW5kaWYKLSAg
ICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxCdWZmZXJJT1N1cmZhY2VQcm9wZXJ0
aWVzS2V5IDogQHsgLyplbXB0eSBkaWN0aW9uYXJ5Ki8gfSwKLSAgICB9OwotICAgIENWUGl4ZWxC
dWZmZXJQb29sUmVmIGJ1ZmZlclBvb2w7Ci0gICAgYXV0byBzdGF0dXMgPSBDVlBpeGVsQnVmZmVy
UG9vbENyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBOVUxMLCBzb3VyY2VQaXhlbEJ1ZmZlck9w
dGlvbnMsICZidWZmZXJQb29sKTsKLSAgICBBU1NFUlQoIXN0YXR1cyk7Ci0gICAgaWYgKHN0YXR1
cyAhPSBrQ1ZSZXR1cm5TdWNjZXNzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2J1ZmZlclBv
b2wgPSBhZG9wdENGKGJ1ZmZlclBvb2wpOwotICAgIG1fc2l6ZSA9IHNpemU7Ci19Ci0KLVJldGFp
blB0cjxDVlBpeGVsQnVmZmVyUmVmPiBQaXhlbEJ1ZmZlclJlc2l6ZXI6OnJlc2l6ZShDVlBpeGVs
QnVmZmVyUmVmIGlucHV0QnVmZmVyKQotewotICAgIEFTU0VSVChtX2J1ZmZlclBvb2wgJiYgIW1f
c2l6ZS5pc0VtcHR5KCkpOwotICAgIGlmICghbV9idWZmZXJQb29sIHx8IG1fc2l6ZS5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgUmV0YWluUHRyPENWUGl4ZWxCdWZm
ZXJSZWY+IHJlc3VsdDsKLSAgICBDVlBpeGVsQnVmZmVyUmVmIG91dHB1dEJ1ZmZlciA9IG51bGxw
dHI7Ci0KLSAgICBhdXRvIHN0YXR1cyA9IENWUGl4ZWxCdWZmZXJQb29sQ3JlYXRlUGl4ZWxCdWZm
ZXIoa0NGQWxsb2NhdG9yRGVmYXVsdCwgbV9idWZmZXJQb29sLmdldCgpLCAmb3V0cHV0QnVmZmVy
KTsKLSAgICBpZiAoc3RhdHVzKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhLCAiUGl4ZWxC
dWZmZXJSZXNpemVyOjpyZXNpemUsIENWUGl4ZWxCdWZmZXJQb29sQ3JlYXRlUGl4ZWxCdWZmZXIg
ZmFpbGVkIHdpdGggZXJyb3IgJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOwotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgcmVzdWx0ID0gYWRvcHRDRihvdXRwdXRCdWZm
ZXIpOwotCi0gICAgYXV0byBlcnIgPSBWVFBpeGVsVHJhbnNmZXJTZXNzaW9uVHJhbnNmZXJJbWFn
ZShtX3RyYW5zZmVyU2Vzc2lvbi5nZXQoKSwgaW5wdXRCdWZmZXIsIG91dHB1dEJ1ZmZlcik7Ci0g
ICAgaWYgKGVycikgewotICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIlBpeGVsQnVmZmVyUmVz
aXplcjo6cmVzaXplLCBWVFBpeGVsVHJhbnNmZXJTZXNzaW9uVHJhbnNmZXJJbWFnZSBmYWlsZWQg
d2l0aCBlcnJvciAlZCIsIHN0YXRpY19jYXN0PGludD4oZXJyKSk7Ci0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVJldGFpblB0cjxDTVNh
bXBsZUJ1ZmZlclJlZj4gUGl4ZWxCdWZmZXJSZXNpemVyOjpyZXNpemUoQ01TYW1wbGVCdWZmZXJS
ZWYgc2FtcGxlQnVmZmVyKQotewotICAgIGF1dG8gY29udmVydGVkUGl4ZWxCdWZmZXIgPSByZXNp
emUoQ01TYW1wbGVCdWZmZXJHZXRJbWFnZUJ1ZmZlcihzYW1wbGVCdWZmZXIpKTsKLSAgICBpZiAo
IWNvbnZlcnRlZFBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENN
VmlkZW9Gb3JtYXREZXNjcmlwdGlvblJlZiBmb3JtYXREZXNjcmlwdGlvbiA9IG51bGxwdHI7Ci0g
ICAgYXV0byBzdGF0dXMgPSBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25DcmVhdGVGb3JJbWFnZUJ1
ZmZlcihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBjb252ZXJ0ZWRQaXhlbEJ1ZmZlci5nZXQoKSwgJmZv
cm1hdERlc2NyaXB0aW9uKTsKLSAgICBpZiAoc3RhdHVzICE9IG5vRXJyKSB7Ci0gICAgICAgIFJF
TEVBU0VfTE9HKE1lZGlhLCAiUGl4ZWxCdWZmZXJSZXNpemVyOjpyZXNpemU6IGZhaWxlZCB0byBj
cmVhdGUgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uIHdpdGggZXJyb3IgY29kZTogJWQiLCBzdGF0
aWNfY2FzdDxpbnQ+KHN0YXR1cykpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0K
LSAgICBDTUl0ZW1Db3VudCBpdGVtQ291bnQgPSAwOwotICAgIHN0YXR1cyA9IENNU2FtcGxlQnVm
ZmVyR2V0U2FtcGxlVGltaW5nSW5mb0FycmF5KHNhbXBsZUJ1ZmZlciwgMSwgbnVsbHB0ciwgJml0
ZW1Db3VudCk7Ci0gICAgaWYgKHN0YXR1cyAhPSBub0VycikgewotICAgICAgICBSRUxFQVNFX0xP
RyhNZWRpYSwgIlBpeGVsQnVmZmVyUmVzaXplcjo6cmVzaXplOiBDTVNhbXBsZUJ1ZmZlckdldFNh
bXBsZVRpbWluZ0luZm9BcnJheSBmYWlsZWQgd2l0aCBlcnJvciBjb2RlOiAlZCIsIHN0YXRpY19j
YXN0PGludD4oc3RhdHVzKSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICBW
ZWN0b3I8Q01TYW1wbGVUaW1pbmdJbmZvPiB0aW1pbmdJbmZvQXJyYXk7Ci0gICAgQ01TYW1wbGVU
aW1pbmdJbmZvKiB0aW1laW5nSW5mb1B0ciA9IG51bGxwdHI7Ci0gICAgaWYgKGl0ZW1Db3VudCkg
ewotICAgICAgICB0aW1pbmdJbmZvQXJyYXkuZ3JvdyhpdGVtQ291bnQpOwotICAgICAgICBzdGF0
dXMgPSBDTVNhbXBsZUJ1ZmZlckdldFNhbXBsZVRpbWluZ0luZm9BcnJheShzYW1wbGVCdWZmZXIs
IGl0ZW1Db3VudCwgdGltaW5nSW5mb0FycmF5LmRhdGEoKSwgbnVsbHB0cik7Ci0gICAgICAgIGlm
IChzdGF0dXMgIT0gbm9FcnIpIHsKLSAgICAgICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhLCAiUGl4
ZWxCdWZmZXJSZXNpemVyOjpyZXNpemU6IENNU2FtcGxlQnVmZmVyR2V0U2FtcGxlVGltaW5nSW5m
b0FycmF5IGZhaWxlZCB3aXRoIGVycm9yIGNvZGU6ICVkIiwgc3RhdGljX2Nhc3Q8aW50PihzdGF0
dXMpKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0gICAgICAgIHRp
bWVpbmdJbmZvUHRyID0gdGltaW5nSW5mb0FycmF5LmRhdGEoKTsKLSAgICB9Ci0KLSAgICBDTVNh
bXBsZUJ1ZmZlclJlZiByZXNpemVkU2FtcGxlQnVmZmVyOwotICAgIHN0YXR1cyA9IENNU2FtcGxl
QnVmZmVyQ3JlYXRlUmVhZHlXaXRoSW1hZ2VCdWZmZXIoa0NGQWxsb2NhdG9yRGVmYXVsdCwgY29u
dmVydGVkUGl4ZWxCdWZmZXIuZ2V0KCksIGZvcm1hdERlc2NyaXB0aW9uLCB0aW1laW5nSW5mb1B0
ciwgJnJlc2l6ZWRTYW1wbGVCdWZmZXIpOwotICAgIENGUmVsZWFzZShmb3JtYXREZXNjcmlwdGlv
bik7Ci0gICAgaWYgKHN0YXR1cyAhPSBub0VycikgewotICAgICAgICBSRUxFQVNFX0xPRyhNZWRp
YSwgIlBpeGVsQnVmZmVyUmVzaXplcjo6cmVzaXplOiBmYWlsZWQgdG8gY3JlYXRlIENNU2FtcGxl
QnVmZmVyIHdpdGggZXJyb3IgY29kZTogJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOwot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICByZXR1cm4gYWRvcHRDRihyZXNp
emVkU2FtcGxlQnVmZmVyKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gVVNFKFZJREVPVE9PTEJPWCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAKaW5kZXggODA1MDQzMjdl
M2E2ODI0OTk1ODZmOGQzYzdiOGNlMDQ0ZGEzMDI4Ny4uZWM4YjViOWRkZTBjY2Q3NTE0MTRiZWE0
MjJjNWM2NWU5YjIzOGIxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAKQEAgLTEzMywxMCArMTMz
LDYgQEAgdm9pZCBSZWFsdGltZU1lZGlhU291cmNlOjpub3RpZnlNdXRlZE9ic2VydmVycygpIGNv
bnN0CiAgICAgfSk7CiB9CiAKLXZvaWQgUmVhbHRpbWVNZWRpYVNvdXJjZTo6c2V0dGluZ3NEaWRD
aGFuZ2UoT3B0aW9uU2V0PFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RmxhZz4pCi17Ci19
Ci0KIHZvaWQgUmVhbHRpbWVNZWRpYVNvdXJjZTo6bm90aWZ5U2V0dGluZ3NEaWRDaGFuZ2VPYnNl
cnZlcnMoT3B0aW9uU2V0PFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RmxhZz4gZmxhZ3Mp
CiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuaAppbmRleCA3
MTZjZTY5YzAyNDA3NmUyZGJmMGY2NjZiZjU4ZWMyOWQyNmQwNDY1Li5hOTNkZTMzOGM0MWE1NzFj
YjEwNWQxZjQzNmQ1MmM1ZTU5MzgwYjYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZS5oCkBAIC0yMDAsNyAr
MjAwLDcgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc3RhcnRQcm9k
dWNpbmdEYXRhKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHN0b3BQcm9kdWNpbmdEYXRhKCkgeyB9
Ci0gICAgdmlydHVhbCB2b2lkIHNldHRpbmdzRGlkQ2hhbmdlKE9wdGlvblNldDxSZWFsdGltZU1l
ZGlhU291cmNlU2V0dGluZ3M6OkZsYWc+KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0dGluZ3NEaWRD
aGFuZ2UoT3B0aW9uU2V0PFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RmxhZz4pIHsgfQog
CiAKICAgICB2b2lkIGZvckVhY2hPYnNlcnZlcihjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoT2Jz
ZXJ2ZXImKT4mKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL21hYy9BVlZpZGVvQ2FwdHVyZVNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJlU291cmNlLmgKaW5kZXggM2I0OWY0
NmZkYTNlYzMyNmM3Mzg1MTczZmE2Y2QyN2VjZjI5ZWY2Mi4uMjZiZjgzMTU0NTViMTdlYzgzMjJm
YjU5MTFhYTllMDVlNzYzNjMzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJlU291cmNlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJlU291cmNlLmgKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00
OSw3ICs0OSw3IEBAIE9CSkNfQ0xBU1MgV2ViQ29yZUFWVmlkZW9DYXB0dXJlU291cmNlT2JzZXJ2
ZXI7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEFWVmlkZW9QcmVzZXQ7Ci1jbGFzcyBQ
aXhlbEJ1ZmZlclJlc2l6ZXI7CitjbGFzcyBJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOwogCiBjbGFz
cyBBVlZpZGVvQ2FwdHVyZVNvdXJjZSA6IHB1YmxpYyBSZWFsdGltZVZpZGVvU291cmNlLCBwcml2
YXRlIE9yaWVudGF0aW9uTm90aWZpZXI6Ok9ic2VydmVyIHsKIHB1YmxpYzoKQEAgLTEwMywxMyAr
MTAzLDE0IEBAIHByaXZhdGU6CiAKICAgICBib29sIHNldEZyYW1lUmF0ZUNvbnN0cmFpbnQoZG91
YmxlIG1pbkZyYW1lUmF0ZSwgZG91YmxlIG1heEZyYW1lUmF0ZSk7CiAKLSAgICB2b2lkIHByb2Nl
c3NOZXdGcmFtZShSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+LCBSZXRhaW5QdHI8QVZDYXB0
dXJlQ29ubmVjdGlvbj4pOworICAgIHZvaWQgcHJvY2Vzc05ld0ZyYW1lKFJlZlB0cjxNZWRpYVNh
bXBsZT4pOwogICAgIEludFNpemUgc2l6ZUZvclByZXNldChOU1N0cmluZyopOwogCiAgICAgQVZD
YXB0dXJlRGV2aWNlKiBkZXZpY2UoKSBjb25zdCB7IHJldHVybiBtX2RldmljZS5nZXQoKTsgfQog
Ci0gICAgUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBtX2J1ZmZlcjsKKyAgICBSZWZQdHI8
TWVkaWFTYW1wbGU+IG1fYnVmZmVyOwogICAgIFJldGFpblB0cjxBVkNhcHR1cmVWaWRlb0RhdGFP
dXRwdXQ+IG1fdmlkZW9PdXRwdXQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlVHJhbnNmZXJT
ZXNzaW9uVlQ+IG1faW1hZ2VUcmFuc2ZlclNlc3Npb247CiAKICAgICBJbnRTaXplIG1fcmVxdWVz
dGVkU2l6ZTsKICAgICBpbnQzMl90IG1fd2lkdGggeyAwIH07CkBAIC0xMTgsNyArMTE5LDYgQEAg
cHJpdmF0ZToKICAgICBpbnQgbV9kZXZpY2VPcmllbnRhdGlvbiB7IDAgfTsKICAgICBNZWRpYVNh
bXBsZTo6VmlkZW9Sb3RhdGlvbiBtX3NhbXBsZVJvdGF0aW9uIHsgTWVkaWFTYW1wbGU6OlZpZGVv
Um90YXRpb246Ok5vbmUgfTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxQaXhlbEJ1ZmZlclJlc2l6
ZXI+IG1fcGl4ZWxCdWZmZXJSZXNpemVyOwogICAgIHN0ZDo6b3B0aW9uYWw8UmVhbHRpbWVNZWRp
YVNvdXJjZVNldHRpbmdzPiBtX2N1cnJlbnRTZXR0aW5nczsKICAgICBzdGQ6Om9wdGlvbmFsPFJl
YWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXM+IG1fY2FwYWJpbGl0aWVzOwogICAgIFJldGFp
blB0cjxXZWJDb3JlQVZWaWRlb0NhcHR1cmVTb3VyY2VPYnNlcnZlcj4gbV9vYmpjT2JzZXJ2ZXI7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZW
aWRlb0NhcHR1cmVTb3VyY2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9tYWMvQVZWaWRlb0NhcHR1cmVTb3VyY2UubW0KaW5kZXggNTE5NjA4MjIyZTY2MTRhYjJlZGNl
YzIzZjM1MDA5MDc1OWQxMTkxNi4uN2E5NjIxNmM4NTRiNWRhZWVmZDE4M2Q3YmQyYzhmN2Q1ZDFh
NThmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L0FWVmlkZW9DYXB0dXJlU291cmNlLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL21hYy9BVlZpZGVvQ2FwdHVyZVNvdXJjZS5tbQpAQCAtMjksMTEgKzI5LDExIEBA
CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEFWRk9VTkRBVElPTikKIAogI2ltcG9y
dCAiSW1hZ2VCdWZmZXIuaCIKKyNpbXBvcnQgIkltYWdlVHJhbnNmZXJTZXNzaW9uVlQuaCIKICNp
bXBvcnQgIkludFJlY3QuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQgIk1lZGlhQ29u
c3RyYWludHMuaCIKICNpbXBvcnQgIk1lZGlhU2FtcGxlQVZGT2JqQy5oIgotI2ltcG9ydCAiUGl4
ZWxCdWZmZXJSZXNpemVyLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybUxheWVyLmgiCiAjaW1wb3J0ICJS
ZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFjLmgiCiAjaW1wb3J0ICJSZWFsdGltZU1lZGlhU291
cmNlU2V0dGluZ3MuaCIKQEAgLTI5OSw3ICsyOTksNyBAQCBjb25zdCBSZWFsdGltZU1lZGlhU291
cmNlQ2FwYWJpbGl0aWVzJiBBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6Y2FwYWJpbGl0aWVzKCkKIGJv
b2wgQVZWaWRlb0NhcHR1cmVTb3VyY2U6OnByZWZlcnNQcmVzZXQoVmlkZW9QcmVzZXQmIHByZXNl
dCkKIHsKICNpZiBQTEFURk9STShJT1MpCi0gICAgcmV0dXJuICFbc3RhdGljX2Nhc3Q8QVZWaWRl
b1ByZXNldCo+KCZwcmVzZXQpLT5mb3JtYXQuZ2V0KCkgaXNWaWRlb0Jpbm5lZF07CisgICAgcmV0
dXJuIFtzdGF0aWNfY2FzdDxBVlZpZGVvUHJlc2V0Kj4oJnByZXNldCktPmZvcm1hdC5nZXQoKSBp
c1ZpZGVvQmlubmVkXTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHByZXNldCk7CiAjZW5kaWYK
QEAgLTUxOSwyNyArNTE5LDIzIEBAIHZvaWQgQVZWaWRlb0NhcHR1cmVTb3VyY2U6OmNvbXB1dGVT
YW1wbGVSb3RhdGlvbigpCiAgICAgfQogfQogCi12b2lkIEFWVmlkZW9DYXB0dXJlU291cmNlOjpw
cm9jZXNzTmV3RnJhbWUoUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBzYW1wbGVCdWZmZXIs
IFJldGFpblB0cjxBVkNhcHR1cmVDb25uZWN0aW9uVHlwZT4gY29ubmVjdGlvbikKK3ZvaWQgQVZW
aWRlb0NhcHR1cmVTb3VyY2U6OnByb2Nlc3NOZXdGcmFtZShSZWZQdHI8TWVkaWFTYW1wbGU+IHNh
bXBsZSkKIHsKICAgICBpZiAoIWlzUHJvZHVjaW5nRGF0YSgpIHx8IG11dGVkKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIENNRm9ybWF0RGVzY3JpcHRpb25SZWYgZm9ybWF0RGVzY3JpcHRpb24g
PSBDTVNhbXBsZUJ1ZmZlckdldEZvcm1hdERlc2NyaXB0aW9uKHNhbXBsZUJ1ZmZlci5nZXQoKSk7
Ci0gICAgaWYgKCFmb3JtYXREZXNjcmlwdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9i
dWZmZXIgPSBzYW1wbGVCdWZmZXI7Ci0gICAgQ01WaWRlb0RpbWVuc2lvbnMgZGltZW5zaW9ucyA9
IENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkdldERpbWVuc2lvbnMoZm9ybWF0RGVzY3JpcHRpb24p
OworICAgIG1fYnVmZmVyID0gc2FtcGxlOworICAgIGF1dG8gZGltZW5zaW9ucyA9IHJvdW5kZWRJ
bnRTaXplKHNhbXBsZS0+cHJlc2VudGF0aW9uU2l6ZSgpKTsKICAgICBpZiAobV9zYW1wbGVSb3Rh
dGlvbiA9PSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6TGVmdCB8fCBtX3NhbXBsZVJvdGF0
aW9uID09IE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpSaWdodCkKLSAgICAgICAgc3RkOjpz
d2FwKGRpbWVuc2lvbnMud2lkdGgsIGRpbWVuc2lvbnMuaGVpZ2h0KTsKKyAgICAgICAgZGltZW5z
aW9ucyA9IHsgZGltZW5zaW9ucy5oZWlnaHQoKSwgZGltZW5zaW9ucy53aWR0aCgpIH07CiAKLSAg
ICBpZiAoZGltZW5zaW9ucy53aWR0aCAhPSBtX3dpZHRoIHx8IGRpbWVuc2lvbnMuaGVpZ2h0ICE9
IG1faGVpZ2h0KSB7Ci0gICAgICAgIG1fd2lkdGggPSBkaW1lbnNpb25zLndpZHRoOwotICAgICAg
ICBtX2hlaWdodCA9IGRpbWVuc2lvbnMuaGVpZ2h0OwotICAgICAgICBzZXRTaXplKHsgZGltZW5z
aW9ucy53aWR0aCwgZGltZW5zaW9ucy5oZWlnaHQgfSk7CisgICAgaWYgKGRpbWVuc2lvbnMud2lk
dGgoKSAhPSBtX3dpZHRoIHx8IGRpbWVuc2lvbnMuaGVpZ2h0KCkgIT0gbV9oZWlnaHQpIHsKKyAg
ICAgICAgbV93aWR0aCA9IGRpbWVuc2lvbnMud2lkdGgoKTsKKyAgICAgICAgbV9oZWlnaHQgPSBk
aW1lbnNpb25zLmhlaWdodCgpOworICAgICAgICBzZXRTaXplKGRpbWVuc2lvbnMpOwogICAgIH0K
IAotICAgIHZpZGVvU2FtcGxlQXZhaWxhYmxlKE1lZGlhU2FtcGxlQVZGT2JqQzo6Y3JlYXRlKG1f
YnVmZmVyLmdldCgpLCBtX3NhbXBsZVJvdGF0aW9uLCBbY29ubmVjdGlvbiBpc1ZpZGVvTWlycm9y
ZWRdKSk7CisgICAgZGlzcGF0Y2hNZWRpYVNhbXBsZVRvT2JzZXJ2ZXJzKCpzYW1wbGUpOwogfQog
CiB2b2lkIEFWVmlkZW9DYXB0dXJlU291cmNlOjpjYXB0dXJlT3V0cHV0RGlkT3V0cHV0U2FtcGxl
QnVmZmVyRnJvbUNvbm5lY3Rpb24oQVZDYXB0dXJlT3V0cHV0VHlwZSosIENNU2FtcGxlQnVmZmVy
UmVmIHNhbXBsZUJ1ZmZlciwgQVZDYXB0dXJlQ29ubmVjdGlvblR5cGUqIGNhcHR1cmVDb25uZWN0
aW9uKQpAQCAtNTQ5LDI0ICs1NDUsMjQgQEAgdm9pZCBBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6Y2Fw
dHVyZU91dHB1dERpZE91dHB1dFNhbXBsZUJ1ZmZlckZyb21Db25uZWN0aW9uKEFWQ2EKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgQ01WaWRlb0RpbWVuc2lvbnMgZGltZW5zaW9ucyA9IENNVmlkZW9G
b3JtYXREZXNjcmlwdGlvbkdldERpbWVuc2lvbnMoZm9ybWF0RGVzY3JpcHRpb24pOworICAgIFJl
ZlB0cjxNZWRpYVNhbXBsZT4gc2FtcGxlOwogICAgIGlmIChkaW1lbnNpb25zLndpZHRoICE9IG1f
cmVxdWVzdGVkU2l6ZS53aWR0aCgpIHx8IGRpbWVuc2lvbnMuaGVpZ2h0ICE9IG1fcmVxdWVzdGVk
U2l6ZS5oZWlnaHQoKSkgewotICAgICAgICBpZiAobV9waXhlbEJ1ZmZlclJlc2l6ZXIgJiYgIW1f
cGl4ZWxCdWZmZXJSZXNpemVyLT5jYW5SZXNpemVUbyhtX3JlcXVlc3RlZFNpemUpKQotICAgICAg
ICAgICAgbV9waXhlbEJ1ZmZlclJlc2l6ZXIgPSBudWxscHRyOwogCi0gICAgICAgIGlmICghbV9w
aXhlbEJ1ZmZlclJlc2l6ZXIpCi0gICAgICAgICAgICBtX3BpeGVsQnVmZmVyUmVzaXplciA9IHN0
ZDo6bWFrZV91bmlxdWU8UGl4ZWxCdWZmZXJSZXNpemVyPihtX3JlcXVlc3RlZFNpemUsIGF2Vmlk
ZW9DYXB0dXJlUGl4ZWxCdWZmZXJGb3JtYXQoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fcGl4
ZWxCdWZmZXJSZXNpemVyID0gbnVsbHB0cjsKKyAgICAgICAgaWYgKCFtX2ltYWdlVHJhbnNmZXJT
ZXNzaW9uKQorICAgICAgICAgICAgbV9pbWFnZVRyYW5zZmVyU2Vzc2lvbiA9IEltYWdlVHJhbnNm
ZXJTZXNzaW9uVlQ6OmNyZWF0ZShhdlZpZGVvQ2FwdHVyZVBpeGVsQnVmZmVyRm9ybWF0KCkpOwog
Ci0gICAgYXV0byBidWZmZXIgPSByZXRhaW5QdHIoc2FtcGxlQnVmZmVyKTsKLSAgICBpZiAobV9w
aXhlbEJ1ZmZlclJlc2l6ZXIpIHsKLSAgICAgICAgYnVmZmVyID0gbV9waXhlbEJ1ZmZlclJlc2l6
ZXItPnJlc2l6ZShzYW1wbGVCdWZmZXIpOwotICAgICAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICB9CisgICAgICAgIGlmIChtX2ltYWdlVHJhbnNmZXJTZXNzaW9uKSB7
CisgICAgICAgICAgICBzYW1wbGUgPSBtX2ltYWdlVHJhbnNmZXJTZXNzaW9uLT5jcmVhdGVNZWRp
YVNhbXBsZShzYW1wbGVCdWZmZXIsIG1fcmVxdWVzdGVkU2l6ZSwgbV9zYW1wbGVSb3RhdGlvbiwg
W2NhcHR1cmVDb25uZWN0aW9uIGlzVmlkZW9NaXJyb3JlZF0pOworICAgICAgICAgICAgaWYgKCFz
YW1wbGUpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAg
ICAgICAgc2FtcGxlID0gTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVhdGUoc2FtcGxlQnVmZmVyLCBt
X3NhbXBsZVJvdGF0aW9uLCBbY2FwdHVyZUNvbm5lY3Rpb24gaXNWaWRlb01pcnJvcmVkXSk7CiAK
LSAgICBzY2hlZHVsZURlZmVycmVkVGFzayhbdGhpcywgYnVmZmVyLCBjb25uZWN0aW9uID0gcmV0
YWluUHRyKGNhcHR1cmVDb25uZWN0aW9uKV0gewotICAgICAgICB0aGlzLT5wcm9jZXNzTmV3RnJh
bWUoYnVmZmVyLCBjb25uZWN0aW9uKTsKKyAgICBzY2hlZHVsZURlZmVycmVkVGFzayhbdGhpcywg
c2FtcGxlID0gV1RGTW92ZShzYW1wbGUpXSB7CisgICAgICAgIHByb2Nlc3NOZXdGcmFtZShzYW1w
bGUpOwogICAgIH0pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYS5j
cHAKaW5kZXggMzczZDBmOGE1M2E1ZTZhNmVhNGM3ZTRiZGY5NzZkOGVkZDk1NDQxZS4uMTE5OTdk
N2RmYzMyZWEwNDA2M2Q5MTI3ZmM2Y2E1YzE4ZjFiZmYyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0Rpc3BsYXlDYXB0dXJlU291cmNlQ29jb2Eu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9EaXNwbGF5
Q2FwdHVyZVNvdXJjZUNvY29hLmNwcApAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKICNpbmNsdWRlICJNZWRpYVNhbXBsZUFWRk9iakMuaCIKICNpbmNsdWRlICJQaXhlbEJ1
ZmZlckNvbmZvcm1lckNWLmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXJSZXNpemVyLmgiCiAjaW5j
bHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZS5oIgogI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3Vy
Y2VDZW50ZXIuaCIKICNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MuaCIKQEAg
LTQyLDYgKzQxLDggQEAKICNpbmNsdWRlIDxwYWwvYXZmb3VuZGF0aW9uL01lZGlhVGltZUFWRm91
bmRhdGlvbi5oPgogI2luY2x1ZGUgPHBhbC9jZi9Db3JlTWVkaWFTb2Z0TGluay5oPgogI2luY2x1
ZGUgPHBhbC9zcGkvY2YvQ29yZUF1ZGlvU1BJLmg+CisjaW5jbHVkZSA8cGFsL3NwaS9jZy9Db3Jl
R3JhcGhpY3NTUEkuaD4KKyNpbmNsdWRlIDxwYWwvc3BpL2NvY29hL0lPU3VyZmFjZVNQSS5oPgog
I2luY2x1ZGUgPHN5cy90aW1lLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNs
dWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KQEAgLTcyLDcgKzczLDcgQEAgY29uc3QgUmVhbHRp
bWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYgRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6Y2Fw
YWJpbGl0aWVzKCkKICAgICAgICAgLy8gRklYTUU6IHdoYXQgc2hvdWxkIHRoZXNlIGJlPwogICAg
ICAgICBjYXBhYmlsaXRpZXMuc2V0V2lkdGgoQ2FwYWJpbGl0eVZhbHVlT3JSYW5nZSg3MiwgMjg4
MCkpOwogICAgICAgICBjYXBhYmlsaXRpZXMuc2V0SGVpZ2h0KENhcGFiaWxpdHlWYWx1ZU9yUmFu
Z2UoNDUsIDE4MDApKTsKLSAgICAgICAgY2FwYWJpbGl0aWVzLnNldEZyYW1lUmF0ZShDYXBhYmls
aXR5VmFsdWVPclJhbmdlKC4wMSwgNjAuMCkpOworICAgICAgICBjYXBhYmlsaXRpZXMuc2V0RnJh
bWVSYXRlKENhcGFiaWxpdHlWYWx1ZU9yUmFuZ2UoLjAxLCAzMC4wKSk7CiAKICAgICAgICAgbV9j
YXBhYmlsaXRpZXMgPSBXVEZNb3ZlKGNhcGFiaWxpdGllcyk7CiAgICAgfQpAQCAtMTExLDEwICsx
MTIsOCBAQCB2b2lkIERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OnNldHRpbmdzRGlkQ2hhbmdl
KE9wdGlvblNldDxSZWFsdGltZU1lZGlhU291cmNlUwogICAgIGlmIChzZXR0aW5ncy5jb250YWlu
cyhSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M6OkZsYWc6OkZyYW1lUmF0ZSkgJiYgbV90aW1l
ci5pc0FjdGl2ZSgpKQogICAgICAgICBtX3RpbWVyLnN0YXJ0UmVwZWF0aW5nKDFfcyAvIGZyYW1l
UmF0ZSgpKTsKIAotICAgIGlmIChzZXR0aW5ncy5jb250YWluc0FueSh7IFJlYWx0aW1lTWVkaWFT
b3VyY2VTZXR0aW5nczo6RmxhZzo6V2lkdGgsIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6
RmxhZzo6SGVpZ2h0IH0pKSB7CisgICAgaWYgKHNldHRpbmdzLmNvbnRhaW5zQW55KHsgUmVhbHRp
bWVNZWRpYVNvdXJjZVNldHRpbmdzOjpGbGFnOjpXaWR0aCwgUmVhbHRpbWVNZWRpYVNvdXJjZVNl
dHRpbmdzOjpGbGFnOjpIZWlnaHQgfSkpCiAgICAgICAgIG1fYnVmZmVyQXR0cmlidXRlcyA9IG51
bGxwdHI7Ci0gICAgICAgIG1fbGFzdFNhbXBsZUJ1ZmZlciA9IG51bGxwdHI7Ci0gICAgfQogCiAg
ICAgbV9jdXJyZW50U2V0dGluZ3MgPSB7IH07CiB9CkBAIC0xNTksNyArMTU4LDggQEAgdm9pZCBE
aXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpzZXRJbnRyaW5zaWNTaXplKGNvbnN0IEludFNpemUm
IHNpemUpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1faW50cmluc2ljU2l6ZSA9IHNpemU7Ci0g
ICAgbV9sYXN0U2FtcGxlQnVmZmVyID0gbnVsbHB0cjsKKyAgICBub3RpZnlTZXR0aW5nc0RpZENo
YW5nZU9ic2VydmVycyh7IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RmxhZzo6V2lkdGgs
IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RmxhZzo6SGVpZ2h0IH0pOworCiB9CiAKIHZv
aWQgRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6ZW1pdEZyYW1lKCkKQEAgLTE2NywxMjQgKzE2
Nyw0MCBAQCB2b2lkIERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OmVtaXRGcmFtZSgpCiAgICAg
aWYgKG11dGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBn
ZW5lcmF0ZUZyYW1lKCk7Ci0gICAgaWYgKCFwaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKG1fbGFzdFNhbXBsZUJ1ZmZlciAmJiBtX2xhc3RGdWxsU2l6ZWRQaXhlbEJ1ZmZl
ciAmJiBDRkVxdWFsKG1fbGFzdEZ1bGxTaXplZFBpeGVsQnVmZmVyLmdldCgpLCBwaXhlbEJ1ZmZl
ci5nZXQoKSkpIHsKLSAgICAgICAgdmlkZW9TYW1wbGVBdmFpbGFibGUoTWVkaWFTYW1wbGVBVkZP
YmpDOjpjcmVhdGUobV9sYXN0U2FtcGxlQnVmZmVyLmdldCgpKSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBtX2xhc3RGdWxsU2l6ZWRQaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVyOwot
Ci0gICAgaW50IHdpZHRoID0gV1RGOjpzYWZlQ2FzdDxpbnQ+KENWUGl4ZWxCdWZmZXJHZXRXaWR0
aChwaXhlbEJ1ZmZlci5nZXQoKSkpOwotICAgIGludCBoZWlnaHQgPSBXVEY6OnNhZmVDYXN0PGlu
dD4oQ1ZQaXhlbEJ1ZmZlckdldEhlaWdodChwaXhlbEJ1ZmZlci5nZXQoKSkpOwotICAgIGF1dG8g
cmVxdWVzdGVkU2l6ZSA9IGZyYW1lU2l6ZSgpOwotICAgIGlmICh3aWR0aCAhPSByZXF1ZXN0ZWRT
aXplLndpZHRoKCkgfHwgaGVpZ2h0ICE9IHJlcXVlc3RlZFNpemUuaGVpZ2h0KCkpIHsKLSAgICAg
ICAgaWYgKG1fcGl4ZWxCdWZmZXJSZXNpemVyICYmICFtX3BpeGVsQnVmZmVyUmVzaXplci0+Y2Fu
UmVzaXplVG8ocmVxdWVzdGVkU2l6ZSkpCi0gICAgICAgICAgICBtX3BpeGVsQnVmZmVyUmVzaXpl
ciA9IG51bGxwdHI7Ci0KLSAgICAgICAgaWYgKCFtX3BpeGVsQnVmZmVyUmVzaXplcikKLSAgICAg
ICAgICAgIG1fcGl4ZWxCdWZmZXJSZXNpemVyID0gc3RkOjptYWtlX3VuaXF1ZTxQaXhlbEJ1ZmZl
clJlc2l6ZXI+KHJlcXVlc3RlZFNpemUsIHByZWZlcmVkUGl4ZWxCdWZmZXJGb3JtYXQoKSk7Ci0K
LSAgICAgICAgcGl4ZWxCdWZmZXIgPSBtX3BpeGVsQnVmZmVyUmVzaXplci0+cmVzaXplKHBpeGVs
QnVmZmVyLmdldCgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBtX3BpeGVsQnVmZmVyUmVzaXpl
ciA9IG51bGxwdHI7Ci0KLSAgICAgICAgYXV0byBwaXhlbEZvcm1hdFR5cGUgPSBDVlBpeGVsQnVm
ZmVyR2V0UGl4ZWxGb3JtYXRUeXBlKHBpeGVsQnVmZmVyLmdldCgpKTsKLSAgICAgICAgaWYgKHBp
eGVsRm9ybWF0VHlwZSAhPSBwcmVmZXJlZFBpeGVsQnVmZmVyRm9ybWF0KCkpIHsKLSAgICAgICAg
ICAgIGlmICghbV9waXhlbEJ1ZmZlckNvbmZvcm1lcikgewotICAgICAgICAgICAgICAgIGF1dG8g
cHJlZmVycmVkRnJvbWF0ID0gcHJlZmVyZWRQaXhlbEJ1ZmZlckZvcm1hdCgpOwotICAgICAgICAg
ICAgICAgIGF1dG8gY29uZm9ybWVyQXR0cmlidXRlcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3Jl
YXRlTXV0YWJsZShudWxscHRyLCAwLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZr
Q0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0gICAgICAgICAgICAgICAgYXV0byB2
aWRlb1R5cGUgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKG51bGxwdHIsICBrQ0ZOdW1iZXJTSW50
MzJUeXBlLCAgJnByZWZlcnJlZEZyb21hdCkpOwotICAgICAgICAgICAgICAgIENGRGljdGlvbmFy
eVNldFZhbHVlKGNvbmZvcm1lckF0dHJpYnV0ZXMuZ2V0KCksIGtDVlBpeGVsQnVmZmVyUGl4ZWxG
b3JtYXRUeXBlS2V5LCB2aWRlb1R5cGUuZ2V0KCkpOwotCi0gICAgICAgICAgICAgICAgbV9waXhl
bEJ1ZmZlckNvbmZvcm1lciA9IHN0ZDo6bWFrZV91bmlxdWU8UGl4ZWxCdWZmZXJDb25mb3JtZXJD
Vj4oY29uZm9ybWVyQXR0cmlidXRlcy5nZXQoKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIHBpeGVsQnVmZmVyID0gbV9waXhlbEJ1ZmZlckNvbmZvcm1lci0+Y29udmVydChwaXhlbEJ1
ZmZlci5nZXQoKSk7CisgICAgaWYgKCFtX2ltYWdlVHJhbnNmZXJTZXNzaW9uKQorICAgICAgICBt
X2ltYWdlVHJhbnNmZXJTZXNzaW9uID0gSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlKHBy
ZWZlcmVkUGl4ZWxCdWZmZXJGb3JtYXQoKSk7CisKKyAgICBhdXRvIHNhbXBsZVRpbWUgPSBNZWRp
YVRpbWU6OmNyZWF0ZVdpdGhEb3VibGUoKGVsYXBzZWRUaW1lKCkgKyAxMDBfbXMpLnNlY29uZHMo
KSk7CisgICAgYXV0byBmcmFtZSA9IGdlbmVyYXRlRnJhbWUoKTsKKyAgICBJbnRTaXplIGltYWdl
U2l6ZTsKKyAgICBSZWZQdHI8TWVkaWFTYW1wbGU+IHNhbXBsZSA9IFdURjo6c3dpdGNoT24oZnJh
bWUsCisgICAgICAgIFt0aGlzLCBzYW1wbGVUaW1lLCAmaW1hZ2VTaXplXShSZXRhaW5QdHI8Q0dJ
bWFnZVJlZj4gaW1hZ2UpIC0+IFJlZlB0cjxNZWRpYVNhbXBsZT4geworICAgICAgICAgICAgaWYg
KCFpbWFnZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICAgICAg
aW1hZ2VTaXplID0gSW50U2l6ZShDR0ltYWdlR2V0V2lkdGgoaW1hZ2UuZ2V0KCkpLCBDR0ltYWdl
R2V0SGVpZ2h0KGltYWdlLmdldCgpKSk7CisgICAgICAgICAgICByZXR1cm4gbV9pbWFnZVRyYW5z
ZmVyU2Vzc2lvbi0+Y3JlYXRlTWVkaWFTYW1wbGUoaW1hZ2UuZ2V0KCksIHNhbXBsZVRpbWUsIGlt
YWdlU2l6ZSk7CisgICAgICAgIH0sCisgICAgICAgIFt0aGlzLCBzYW1wbGVUaW1lLCAmaW1hZ2VT
aXplXShSZXRhaW5QdHI8SU9TdXJmYWNlUmVmPiBzdXJmYWNlKSAtPiBSZWZQdHI8TWVkaWFTYW1w
bGU+IHsKKyAgICAgICAgICAgIGlmICghc3VyZmFjZSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgICAgICAgICAgaW1hZ2VTaXplID0gSW50U2l6ZShJT1N1cmZhY2VHZXRX
aWR0aChzdXJmYWNlLmdldCgpKSwgSU9TdXJmYWNlR2V0SGVpZ2h0KHN1cmZhY2UuZ2V0KCkpKTsK
KyAgICAgICAgICAgIHJldHVybiBtX2ltYWdlVHJhbnNmZXJTZXNzaW9uLT5jcmVhdGVNZWRpYVNh
bXBsZShzdXJmYWNlLmdldCgpLCBzYW1wbGVUaW1lLCBpbWFnZVNpemUpOwogICAgICAgICB9Ci0g
ICAgfQotICAgIGlmICghcGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbGFz
dFNhbXBsZUJ1ZmZlciA9IHNhbXBsZUJ1ZmZlckZyb21QaXhlbEJ1ZmZlcihwaXhlbEJ1ZmZlci5n
ZXQoKSk7Ci0gICAgaWYgKCFtX2xhc3RTYW1wbGVCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIHZpZGVvU2FtcGxlQXZhaWxhYmxlKE1lZGlhU2FtcGxlQVZGT2JqQzo6Y3JlYXRlKG1fbGFz
dFNhbXBsZUJ1ZmZlci5nZXQoKSkpOwotfQotCi1SZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+
IERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OnNhbXBsZUJ1ZmZlckZyb21QaXhlbEJ1ZmZlcihD
VlBpeGVsQnVmZmVyUmVmIHBpeGVsQnVmZmVyKQotewotICAgIGlmICghcGl4ZWxCdWZmZXIpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQ01UaW1lIHNhbXBsZVRpbWUgPSBDTVRpbWVN
YWtlKCgoZWxhcHNlZFRpbWUoKSArIDEwMF9tcykgKiAxMDApLnNlY29uZHMoKSwgMTAwKTsKLSAg
ICBDTVNhbXBsZVRpbWluZ0luZm8gdGltaW5nSW5mbyA9IHsga0NNVGltZUludmFsaWQsIHNhbXBs
ZVRpbWUsIHNhbXBsZVRpbWUgfTsKLQotICAgIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvblJlZiBm
b3JtYXREZXNjcmlwdGlvbiA9IG51bGxwdHI7Ci0gICAgYXV0byBzdGF0dXMgPSBDTVZpZGVvRm9y
bWF0RGVzY3JpcHRpb25DcmVhdGVGb3JJbWFnZUJ1ZmZlcihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAo
Q1ZJbWFnZUJ1ZmZlclJlZilwaXhlbEJ1ZmZlciwgJmZvcm1hdERlc2NyaXB0aW9uKTsKLSAgICBp
ZiAoc3RhdHVzKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhLCAiRmFpbGVkIHRvIGluaXRp
YWxpemUgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uIHdpdGggZXJyb3IgY29kZTogJWQiLCBzdGF0
aWNfY2FzdDxpbnQ+KHN0YXR1cykpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0K
LSAgICBDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGVCdWZmZXI7Ci0gICAgc3RhdHVzID0gQ01TYW1w
bGVCdWZmZXJDcmVhdGVSZWFkeVdpdGhJbWFnZUJ1ZmZlcihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAo
Q1ZJbWFnZUJ1ZmZlclJlZilwaXhlbEJ1ZmZlciwgZm9ybWF0RGVzY3JpcHRpb24sICZ0aW1pbmdJ
bmZvLCAmc2FtcGxlQnVmZmVyKTsKLSAgICBDRlJlbGVhc2UoZm9ybWF0RGVzY3JpcHRpb24pOwot
ICAgIGlmIChzdGF0dXMpIHsKLSAgICAgICAgUkVMRUFTRV9MT0coTWVkaWEsICJGYWlsZWQgdG8g
aW5pdGlhbGl6ZSBDTVNhbXBsZUJ1ZmZlciB3aXRoIGVycm9yIGNvZGU6ICVkIiwgc3RhdGljX2Nh
c3Q8aW50PihzdGF0dXMpKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAg
cmV0dXJuIGFkb3B0Q0Yoc2FtcGxlQnVmZmVyKTsKLX0KKyAgICApOwogCi0jaWYgSEFWRShJT1NV
UkZBQ0UpICYmIFBMQVRGT1JNKE1BQykKLXN0YXRpYyBpbnQzMl90IHJvdW5kVXBUb01hY3JvYmxv
Y2tNdWx0aXBsZShpbnQzMl90IHNpemUpCi17Ci0gICAgcmV0dXJuIChzaXplICsgMTUpICYgfjE1
OwotfQogCi1SZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gRGlzcGxheUNhcHR1cmVTb3VyY2VD
b2NvYTo6cGl4ZWxCdWZmZXJGcm9tSU9TdXJmYWNlKElPU3VyZmFjZVJlZiBzdXJmYWNlKQotewot
ICAgIGlmICghbV9idWZmZXJBdHRyaWJ1dGVzKSB7Ci0gICAgICAgIG1fYnVmZmVyQXR0cmlidXRl
cyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZShudWxscHRyLCAwLCAma0NGVHlw
ZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tz
KSk7Ci0KLSAgICAgICAgYXV0byBmb3JtYXQgPSBJT1N1cmZhY2VHZXRQaXhlbEZvcm1hdChzdXJm
YWNlKTsKLSAgICAgICAgaWYgKGZvcm1hdCA9PSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNy
OEJpUGxhbmFyVmlkZW9SYW5nZSB8fCBmb3JtYXQgPT0ga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMFlw
Q2JDcjhCaVBsYW5hckZ1bGxSYW5nZSkgewotCi0gICAgICAgICAgICAvLyBJZiB0aGUgd2lkdGgg
eCBoZWlnaHQgaXNuJ3QgYSBtdWx0aXBsZSBvZiAxNiB4IDE2IGFuZCB0aGUgc3VyZmFjZSBoYXMg
ZXh0cmEgbWVtb3J5IGluIHRoZSBwbGFuZXMsIHNldCBwaXhlbCBidWZmZXIgYXR0cmlidXRlcyB0
byByZWZsZWN0IGl0LgotICAgICAgICAgICAgYXV0byB3aWR0aCA9IElPU3VyZmFjZUdldFdpZHRo
KHN1cmZhY2UpOwotICAgICAgICAgICAgYXV0byBoZWlnaHQgPSBJT1N1cmZhY2VHZXRIZWlnaHQo
c3VyZmFjZSk7Ci0gICAgICAgICAgICBpbnQzMl90IGV4dGVuZGVkUmlnaHQgPSByb3VuZFVwVG9N
YWNyb2Jsb2NrTXVsdGlwbGUod2lkdGgpIC0gd2lkdGg7Ci0gICAgICAgICAgICBpbnQzMl90IGV4
dGVuZGVkQm90dG9tID0gcm91bmRVcFRvTWFjcm9ibG9ja011bHRpcGxlKGhlaWdodCkgLSBoZWln
aHQ7Ci0KLSAgICAgICAgICAgIGlmICgoSU9TdXJmYWNlR2V0Qnl0ZXNQZXJSb3dPZlBsYW5lKHN1
cmZhY2UsIDApID49IHdpZHRoICsgZXh0ZW5kZWRSaWdodCkKLSAgICAgICAgICAgICAgICAmJiAo
SU9TdXJmYWNlR2V0Qnl0ZXNQZXJSb3dPZlBsYW5lKHN1cmZhY2UsIDEpID49IHdpZHRoICsgZXh0
ZW5kZWRSaWdodCkKLSAgICAgICAgICAgICAgICAmJiAoSU9TdXJmYWNlR2V0QWxsb2NTaXplKHN1
cmZhY2UpID49IChoZWlnaHQgKyBleHRlbmRlZEJvdHRvbSkgKiBJT1N1cmZhY2VHZXRCeXRlc1Bl
clJvd09mUGxhbmUoc3VyZmFjZSwgMCkgKiAzIC8gMikpIHsKLSAgICAgICAgICAgICAgICBhdXRv
IGNmSW50ID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShudWxscHRyLCAga0NGTnVtYmVySW50VHlw
ZSwgICZleHRlbmRlZFJpZ2h0KSk7Ci0gICAgICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFs
dWUobV9idWZmZXJBdHRyaWJ1dGVzLmdldCgpLCBrQ1ZQaXhlbEJ1ZmZlckV4dGVuZGVkUGl4ZWxz
UmlnaHRLZXksIGNmSW50LmdldCgpKTsKLSAgICAgICAgICAgICAgICBjZkludCA9IGFkb3B0Q0Yo
Q0ZOdW1iZXJDcmVhdGUobnVsbHB0ciwgIGtDRk51bWJlckludFR5cGUsICAmZXh0ZW5kZWRCb3R0
b20pKTsKLSAgICAgICAgICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShtX2J1ZmZlckF0dHJp
YnV0ZXMuZ2V0KCksIGtDVlBpeGVsQnVmZmVyRXh0ZW5kZWRQaXhlbHNCb3R0b21LZXksIGNmSW50
LmdldCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIENGRGljdGlvbmFy
eVNldFZhbHVlKG1fYnVmZmVyQXR0cmlidXRlcy5nZXQoKSwga0NWUGl4ZWxCdWZmZXJPcGVuR0xD
b21wYXRpYmlsaXR5S2V5LCBrQ0ZCb29sZWFuVHJ1ZSk7CisgICAgaWYgKCFzYW1wbGUpIHsKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBDVlBpeGVsQnVmZmVyUmVmIHBpeGVsQnVmZmVyOwotICAgIGF1dG8gc3RhdHVzID0gQ1ZQaXhl
bEJ1ZmZlckNyZWF0ZVdpdGhJT1N1cmZhY2Uoa0NGQWxsb2NhdG9yRGVmYXVsdCwgc3VyZmFjZSwg
bV9idWZmZXJBdHRyaWJ1dGVzLmdldCgpLCAmcGl4ZWxCdWZmZXIpOwotICAgIGlmIChzdGF0dXMp
IHsKLSAgICAgICAgUkVMRUFTRV9MT0coTWVkaWEsICJDVlBpeGVsQnVmZmVyQ3JlYXRlV2l0aElP
U3VyZmFjZSBmYWlsZWQgd2l0aCBlcnJvciBjb2RlOiAlZCIsIHN0YXRpY19jYXN0PGludD4oc3Rh
dHVzKSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KKyAgICBpZiAobV9pbnRyaW5z
aWNTaXplICE9IGltYWdlU2l6ZSkKKyAgICAgICAgc2V0SW50cmluc2ljU2l6ZShpbWFnZVNpemUp
OwogCi0gICAgcmV0dXJuIGFkb3B0Q0YocGl4ZWxCdWZmZXIpOworICAgIHZpZGVvU2FtcGxlQXZh
aWxhYmxlKCpzYW1wbGUuZ2V0KCkpOwogfQotI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L0Rpc3BsYXlDYXB0dXJlU291cmNlQ29jb2EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL21hYy9EaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hLmgKaW5kZXggYmZlNDBiODYw
NTgxZjFjZGI5MzFiMzVjYmY0N2ZmMDcyYzNiYWFhNS4uOWMwOWVjOGQzMjE0MDI0ZDRlNmI2N2Qy
YmYwMjJmZGQwMzRmMzVhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbWFjL0Rpc3BsYXlDYXB0dXJlU291cmNlQ29jb2EuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYS5o
CkBAIC0yOCwxMiArMjgsMTQgQEAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogCiAjaW5jbHVk
ZSAiQ2FwdHVyZURldmljZS5oIgorI2luY2x1ZGUgIkltYWdlVHJhbnNmZXJTZXNzaW9uVlQuaCIK
ICNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlLmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAordHlwZWRlZiBzdHJ1Y3QgQ0dJbWFn
ZSAqQ0dJbWFnZVJlZjsKIHR5cGVkZWYgc3RydWN0IF9fQ1ZCdWZmZXIgKkNWUGl4ZWxCdWZmZXJS
ZWY7CiB0eXBlZGVmIHN0cnVjdCBfX0lPU3VyZmFjZSAqSU9TdXJmYWNlUmVmOwogCkBAIC00NCw4
ICs0Niw4IEBAIGNsYXNzIE1lZGlhVGltZTsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
Q2FwdHVyZURldmljZUluZm87CitjbGFzcyBJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOwogY2xhc3Mg
UGl4ZWxCdWZmZXJDb25mb3JtZXJDVjsKLWNsYXNzIFBpeGVsQnVmZmVyUmVzaXplcjsKIAogY2xh
c3MgRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYSA6IHB1YmxpYyBSZWFsdGltZU1lZGlhU291cmNl
IHsKIHB1YmxpYzoKQEAgLTU0LDcgKzU2LDkgQEAgcHJvdGVjdGVkOgogICAgIERpc3BsYXlDYXB0
dXJlU291cmNlQ29jb2EoU3RyaW5nJiYgbmFtZSk7CiAgICAgdmlydHVhbCB+RGlzcGxheUNhcHR1
cmVTb3VyY2VDb2NvYSgpOwogCi0gICAgdmlydHVhbCBSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJl
Zj4gZ2VuZXJhdGVGcmFtZSgpID0gMDsKKyAgICB1c2luZyBEaXNwbGF5RnJhbWVUeXBlID0gV1RG
OjpWYXJpYW50PFJldGFpblB0cjxDR0ltYWdlUmVmPiwgUmV0YWluUHRyPElPU3VyZmFjZVJlZj4+
OworICAgIHZpcnR1YWwgRGlzcGxheUZyYW1lVHlwZSBnZW5lcmF0ZUZyYW1lKCkgPSAwOworCiAg
ICAgdmlydHVhbCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M6OkRpc3BsYXlTdXJmYWNlVHlw
ZSBzdXJmYWNlVHlwZSgpIGNvbnN0ID0gMDsKIAogICAgIHZvaWQgc3RhcnRQcm9kdWNpbmdEYXRh
KCkgb3ZlcnJpZGU7CkBAIC02MiwxMSArNjYsNiBAQCBwcm90ZWN0ZWQ6CiAKICAgICBTZWNvbmRz
IGVsYXBzZWRUaW1lKCk7CiAKLSAgICBSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+IHNhbXBs
ZUJ1ZmZlckZyb21QaXhlbEJ1ZmZlcihDVlBpeGVsQnVmZmVyUmVmKTsKLSNpZiBIQVZFKElPU1VS
RkFDRSkKLSAgICBSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gcGl4ZWxCdWZmZXJGcm9tSU9T
dXJmYWNlKElPU3VyZmFjZVJlZik7Ci0jZW5kaWYKLQogICAgIHZvaWQgc2V0dGluZ3NEaWRDaGFu
Z2UoT3B0aW9uU2V0PFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RmxhZz4pIG92ZXJyaWRl
OwogCiAgICAgY29uc3QgSW50U2l6ZSYgaW50cmluc2ljU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
aW50cmluc2ljU2l6ZTsgfQpAQCAtOTMsMTAgKzkyLDcgQEAgcHJpdmF0ZToKICAgICBSZXRhaW5Q
dHI8Q0ZNdXRhYmxlRGljdGlvbmFyeVJlZj4gbV9idWZmZXJBdHRyaWJ1dGVzOwogICAgIFJ1bkxv
b3A6OlRpbWVyPERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E+IG1fdGltZXI7CiAKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8UGl4ZWxCdWZmZXJSZXNpemVyPiBtX3BpeGVsQnVmZmVyUmVzaXplcjsKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UGl4ZWxCdWZmZXJDb25mb3JtZXJDVj4gbV9waXhlbEJ1ZmZlckNv
bmZvcm1lcjsKLSAgICBSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gbV9sYXN0RnVsbFNpemVk
UGl4ZWxCdWZmZXI7Ci0gICAgUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBtX2xhc3RTYW1w
bGVCdWZmZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ+IG1f
aW1hZ2VUcmFuc2ZlclNlc3Npb247CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0
aW1lVmlkZW9Tb3VyY2VNYWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5oCmluZGV4IDljNzRkZGUxODMxZTQ3MWEx
MDc2MDFiMDNlNjY1NDdjNzY5YTA4ZWEuLmU4YmU4MmY2OGY3YzY5MTE1MjE4ODkxY2Q0NDY5ODNk
ZjY5NjI2YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5oCkBAIC00
Myw3ICs0Myw3IEBAIHR5cGVkZWYgc3RydWN0IF9fQ1ZQaXhlbEJ1ZmZlclBvb2wgKkNWUGl4ZWxC
dWZmZXJQb29sUmVmOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFBpeGVsQnVmZmVy
UmVzaXplcjsKK2NsYXNzIEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ7CiAKIGNsYXNzIE1vY2tSZWFs
dGltZVZpZGVvU291cmNlTWFjIGZpbmFsIDogcHVibGljIE1vY2tSZWFsdGltZVZpZGVvU291cmNl
LCBwcml2YXRlIE9yaWVudGF0aW9uTm90aWZpZXI6Ok9ic2VydmVyIHsKIHB1YmxpYzoKQEAgLTUz
LDE0ICs1MywxMCBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBNb2NrUmVhbHRpbWVWaWRl
b1NvdXJjZTsKICAgICBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYyhTdHJpbmcmJiBkZXZpY2VJ
RCwgU3RyaW5nJiYgbmFtZSwgU3RyaW5nJiYgaGFzaFNhbHQpOwogCi0gICAgUmV0YWluUHRyPENN
U2FtcGxlQnVmZmVyUmVmPiBDTVNhbXBsZUJ1ZmZlckZyb21QaXhlbEJ1ZmZlcihDVlBpeGVsQnVm
ZmVyUmVmKTsKLSAgICBSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gcGl4ZWxCdWZmZXJGcm9t
Q0dJbWFnZShDR0ltYWdlUmVmKSBjb25zdDsKLQogICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3Jt
TGF5ZXIoKSBjb25zdDsKICAgICB2b2lkIHVwZGF0ZVNhbXBsZUJ1ZmZlcigpIGZpbmFsOwogICAg
IHZvaWQgc2V0dGluZ3NEaWRDaGFuZ2UoT3B0aW9uU2V0PFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0
aW5nczo6RmxhZz4pIGZpbmFsOwogICAgIGJvb2wgY2FuUmVzaXplVmlkZW9GcmFtZXMoKSBjb25z
dCBmaW5hbCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdm9pZCBzZXRTaXplQW5kRnJhbWVSYXRlV2l0
aFByZXNldChJbnRTaXplLCBkb3VibGUsIFJlZlB0cjxWaWRlb1ByZXNldD4pIGZpbmFsOwogCiAg
ICAgdm9pZCBvcmllbnRhdGlvbkNoYW5nZWQoaW50IG9yaWVudGF0aW9uKSBmaW5hbDsKICAgICB2
b2lkIG1vbml0b3JPcmllbnRhdGlvbihPcmllbnRhdGlvbk5vdGlmaWVyJikgZmluYWw7CkBAIC02
OCw3ICs2NCw3IEBAIHByaXZhdGU6CiAgICAgbXV0YWJsZSBSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZl
clBvb2xSZWY+IG1fYnVmZmVyUG9vbDsKICAgICBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbiBt
X2RldmljZU9yaWVudGF0aW9uIHsgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246Ok5vbmUgfTsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8UGl4ZWxCdWZmZXJDb25mb3JtZXJDVj4gbV9waXhlbEJ1ZmZl
ckNvbmZvcm1lcjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UGl4ZWxCdWZmZXJSZXNpemVyPiBtX3Bp
eGVsQnVmZmVyUmVzaXplcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VUcmFuc2ZlclNlc3Np
b25WVD4gbV9pbWFnZVRyYW5zZmVyU2Vzc2lvbjsKICAgICBJbnRTaXplIG1fcHJlc2V0U2l6ZTsK
IH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21h
Yy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbQppbmRleCAyM2Ex
Njk2MmI1Mzk0MTg0YzVmNjU0ZTllYzVlMWQxZmU5MGNkMjlhLi43MjU5ZGIxZTg1ZDBmMmRmNjFl
NDRlYmY3ZTVlMzA5NDE0NGZlMzY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01vY2tSZWFsdGltZVZpZGVvU291
cmNlTWFjLm1tCkBAIC0zNCwxMCArMzQsMTAgQEAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQog
I2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKICNpbXBvcnQgIkltYWdlQnVmZmVyLmgiCisj
aW1wb3J0ICJJbWFnZVRyYW5zZmVyU2Vzc2lvblZULmgiCiAjaW1wb3J0ICJNZWRpYUNvbnN0cmFp
bnRzLmgiCiAjaW1wb3J0ICJNZWRpYVNhbXBsZUFWRk9iakMuaCIKICNpbXBvcnQgIk5vdEltcGxl
bWVudGVkLmgiCi0jaW1wb3J0ICJQaXhlbEJ1ZmZlclJlc2l6ZXIuaCIKICNpbXBvcnQgIlBsYXRm
b3JtTGF5ZXIuaCIKICNpbXBvcnQgIlJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncy5oIgogI2lt
cG9ydCAiUmVhbHRpbWVWaWRlb1V0aWxpdGllcy5oIgpAQCAtNTEsOCArNTEsNiBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIFBBTDsKIAotc3RhdGljIGNvbnN0IGludCB2
aWRlb1NhbXBsZVJhdGUgPSA5MDAwMDsKLQogQ2FwdHVyZVNvdXJjZU9yRXJyb3IgTW9ja1JlYWx0
aW1lVmlkZW9Tb3VyY2U6OmNyZWF0ZShTdHJpbmcmJiBkZXZpY2VJRCwgU3RyaW5nJiYgbmFtZSwg
U3RyaW5nJiYgaGFzaFNhbHQsIGNvbnN0IE1lZGlhQ29uc3RyYWludHMqIGNvbnN0cmFpbnRzKQog
ewogI2lmbmRlZiBOREVCVUcKQEAgLTc1LDk4ICs3MywyNCBAQCBNb2NrUmVhbHRpbWVWaWRlb1Nv
dXJjZU1hYzo6TW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMoU3RyaW5nJiYgZGV2aWNlSUQsIFN0
cmluZwogewogfQogCi1SZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+IE1vY2tSZWFsdGltZVZp
ZGVvU291cmNlTWFjOjpDTVNhbXBsZUJ1ZmZlckZyb21QaXhlbEJ1ZmZlcihDVlBpeGVsQnVmZmVy
UmVmIHBpeGVsQnVmZmVyKQotewotICAgIGlmICghcGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIAotICAgIENNVGltZSBzYW1wbGVUaW1lID0gQ01UaW1lTWFrZSgoKGVs
YXBzZWRUaW1lKCkgKyAxMDBfbXMpICogdmlkZW9TYW1wbGVSYXRlKS5zZWNvbmRzKCksIHZpZGVv
U2FtcGxlUmF0ZSk7Ci0gICAgQ01TYW1wbGVUaW1pbmdJbmZvIHRpbWluZ0luZm8gPSB7IGtDTVRp
bWVJbnZhbGlkLCBzYW1wbGVUaW1lLCBzYW1wbGVUaW1lIH07Ci0KLSAgICBDTVZpZGVvRm9ybWF0
RGVzY3JpcHRpb25SZWYgZm9ybWF0RGVzY3JpcHRpb24gPSBudWxscHRyOwotICAgIE9TU3RhdHVz
IHN0YXR1cyA9IENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkNyZWF0ZUZvckltYWdlQnVmZmVyKGtD
RkFsbG9jYXRvckRlZmF1bHQsIChDVkltYWdlQnVmZmVyUmVmKXBpeGVsQnVmZmVyLCAmZm9ybWF0
RGVzY3JpcHRpb24pOwotICAgIGlmIChzdGF0dXMgIT0gbm9FcnIpIHsKLSAgICAgICAgTE9HX0VS
Uk9SKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb24gd2l0aCBl
cnJvciBjb2RlOiAlZCIsIHN0YXR1cyk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0K
LQotICAgIENNU2FtcGxlQnVmZmVyUmVmIHNhbXBsZUJ1ZmZlcjsKLSAgICBzdGF0dXMgPSBDTVNh
bXBsZUJ1ZmZlckNyZWF0ZVJlYWR5V2l0aEltYWdlQnVmZmVyKGtDRkFsbG9jYXRvckRlZmF1bHQs
IChDVkltYWdlQnVmZmVyUmVmKXBpeGVsQnVmZmVyLCBmb3JtYXREZXNjcmlwdGlvbiwgJnRpbWlu
Z0luZm8sICZzYW1wbGVCdWZmZXIpOwotICAgIENGUmVsZWFzZShmb3JtYXREZXNjcmlwdGlvbik7
Ci0gICAgaWYgKHN0YXR1cyAhPSBub0VycikgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0
byBpbml0aWFsaXplIENNU2FtcGxlQnVmZmVyIHdpdGggZXJyb3IgY29kZTogJWQiLCBzdGF0dXMp
OwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICByZXR1cm4gYWRvcHRDRihz
YW1wbGVCdWZmZXIpOwotfQotCi1SZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gTW9ja1JlYWx0
aW1lVmlkZW9Tb3VyY2VNYWM6OnBpeGVsQnVmZmVyRnJvbUNHSW1hZ2UoQ0dJbWFnZVJlZiBpbWFn
ZSkgY29uc3QKLXsKLSAgICBzdGF0aWMgQ0dDb2xvclNwYWNlUmVmIHNSR0JDb2xvclNwYWNlID0g
c1JHQkNvbG9yU3BhY2VSZWYoKTsKLQotICAgIENHU2l6ZSBpbWFnZVNpemUgPSBDR1NpemVNYWtl
KENHSW1hZ2VHZXRXaWR0aChpbWFnZSksIENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpKTsKLSAgICBp
ZiAoIW1fYnVmZmVyUG9vbCkgewotICAgICAgICBDVlBpeGVsQnVmZmVyUG9vbFJlZiBidWZmZXJQ
b29sOwotICAgICAgICBDRkRpY3Rpb25hcnlSZWYgc291cmNlUGl4ZWxCdWZmZXJPcHRpb25zID0g
KF9fYnJpZGdlIENGRGljdGlvbmFyeVJlZikgQHsKLSAgICAgICAgICAgIChfX2JyaWRnZSBOU1N0
cmluZyAqKWtDVlBpeGVsQnVmZmVyUGl4ZWxGb3JtYXRUeXBlS2V5IDogQChrQ1ZQaXhlbEZvcm1h
dFR5cGVfMzJBUkdCKSwKLSAgICAgICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVs
QnVmZmVyV2lkdGhLZXkgOiBAKGltYWdlU2l6ZS53aWR0aCksCi0gICAgICAgICAgICAoX19icmlk
Z2UgTlNTdHJpbmcgKilrQ1ZQaXhlbEJ1ZmZlckhlaWdodEtleSA6IEAoaW1hZ2VTaXplLmhlaWdo
dCksCi0jaWYgUExBVEZPUk0oSU9TKQotICAgICAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICop
a0NWUGl4ZWxGb3JtYXRPcGVuR0xFU0NvbXBhdGliaWxpdHkgOiBAKFlFUyksCi0jZWxzZQotICAg
ICAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxCdWZmZXJPcGVuR0xDb21wYXRp
YmlsaXR5S2V5IDogQChZRVMpLAotI2VuZGlmCi0gICAgICAgICAgICAoX19icmlkZ2UgTlNTdHJp
bmcgKilrQ1ZQaXhlbEJ1ZmZlcklPU3VyZmFjZVByb3BlcnRpZXNLZXkgOiBAey8qZW1wdHkgZGlj
dGlvbmFyeSovfQotICAgICAgICB9OwotCi0gICAgICAgIENGRGljdGlvbmFyeVJlZiBwaXhlbEJ1
ZmZlclBvb2xPcHRpb25zID0gKF9fYnJpZGdlIENGRGljdGlvbmFyeVJlZikgQHsKLSAgICAgICAg
ICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxCdWZmZXJQb29sTWluaW11bUJ1ZmZlckNv
dW50S2V5IDogQCg0KQotICAgICAgICB9OwotCi0gICAgICAgIENWUmV0dXJuIHN0YXR1cyA9IENW
UGl4ZWxCdWZmZXJQb29sQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIHBpeGVsQnVmZmVyUG9v
bE9wdGlvbnMsIHNvdXJjZVBpeGVsQnVmZmVyT3B0aW9ucywgJmJ1ZmZlclBvb2wpOwotICAgICAg
ICBpZiAoc3RhdHVzICE9IGtDVlJldHVyblN1Y2Nlc3MpCi0gICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgICAgICBtX2J1ZmZlclBvb2wgPSBhZG9wdENGKGJ1ZmZlclBvb2wpOwotICAg
IH0KLQotICAgIENWUGl4ZWxCdWZmZXJSZWYgcGl4ZWxCdWZmZXI7Ci0gICAgQ1ZSZXR1cm4gc3Rh
dHVzID0gQ1ZQaXhlbEJ1ZmZlclBvb2xDcmVhdGVQaXhlbEJ1ZmZlcihudWxscHRyLCBtX2J1ZmZl
clBvb2wuZ2V0KCksICZwaXhlbEJ1ZmZlcik7Ci0gICAgaWYgKHN0YXR1cyAhPSBrQ1ZSZXR1cm5T
dWNjZXNzKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENWUGl4ZWxCdWZmZXJMb2Nr
QmFzZUFkZHJlc3MocGl4ZWxCdWZmZXIsIDApOwotICAgIHZvaWQqIGRhdGEgPSBDVlBpeGVsQnVm
ZmVyR2V0QmFzZUFkZHJlc3MocGl4ZWxCdWZmZXIpOwotICAgIGF1dG8gY29udGV4dCA9IGFkb3B0
Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKGRhdGEsIGltYWdlU2l6ZS53aWR0aCwgaW1hZ2VTaXpl
LmhlaWdodCwgOCwgQ1ZQaXhlbEJ1ZmZlckdldEJ5dGVzUGVyUm93KHBpeGVsQnVmZmVyKSwgc1JH
QkNvbG9yU3BhY2UsIChDR0JpdG1hcEluZm8pIGtDR0ltYWdlQWxwaGFOb25lU2tpcEZpcnN0KSk7
Ci0gICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwg
Q0dJbWFnZUdldFdpZHRoKGltYWdlKSwgQ0dJbWFnZUdldEhlaWdodChpbWFnZSkpLCBpbWFnZSk7
Ci0gICAgQ1ZQaXhlbEJ1ZmZlclVubG9ja0Jhc2VBZGRyZXNzKHBpeGVsQnVmZmVyLCAwKTsKLQot
ICAgIHJldHVybiBhZG9wdENGKHBpeGVsQnVmZmVyKTsKLX0KLQogdm9pZCBNb2NrUmVhbHRpbWVW
aWRlb1NvdXJjZU1hYzo6dXBkYXRlU2FtcGxlQnVmZmVyKCkKIHsKICAgICBhdXRvIGltYWdlQnVm
ZmVyID0gdGhpcy0+aW1hZ2VCdWZmZXIoKTsKICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBhdXRvIHBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXJGcm9tQ0dJbWFn
ZShpbWFnZUJ1ZmZlci0+Y29weUltYWdlKCktPm5hdGl2ZUltYWdlKCkuZ2V0KCkpOwotICAgIGlm
IChtX3BpeGVsQnVmZmVyUmVzaXplcikKLSAgICAgICAgcGl4ZWxCdWZmZXIgPSBtX3BpeGVsQnVm
ZmVyUmVzaXplci0+cmVzaXplKHBpeGVsQnVmZmVyLmdldCgpKTsKLSAgICBlbHNlIHsKLSAgICAg
ICAgaWYgKCFtX3BpeGVsQnVmZmVyQ29uZm9ybWVyKSB7Ci0gICAgICAgICAgICBtX3BpeGVsQnVm
ZmVyQ29uZm9ybWVyID0gc3RkOjptYWtlX3VuaXF1ZTxQaXhlbEJ1ZmZlckNvbmZvcm1lckNWPigo
X19icmlkZ2UgQ0ZEaWN0aW9uYXJ5UmVmKUB7Ci0gICAgICAgICAgICAgICAgKF9fYnJpZGdlIE5T
U3RyaW5nICopa0NWUGl4ZWxCdWZmZXJQaXhlbEZvcm1hdFR5cGVLZXk6IEAocHJlZmVyZWRQaXhl
bEJ1ZmZlckZvcm1hdCgpKQotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLQotICAgICAgICBw
aXhlbEJ1ZmZlciA9IG1fcGl4ZWxCdWZmZXJDb25mb3JtZXItPmNvbnZlcnQocGl4ZWxCdWZmZXIu
Z2V0KCkpOwotICAgIH0KLSAgICBhdXRvIHNhbXBsZUJ1ZmZlciA9IENNU2FtcGxlQnVmZmVyRnJv
bVBpeGVsQnVmZmVyKHBpeGVsQnVmZmVyLmdldCgpKTsKKyAgICBpZiAoIW1faW1hZ2VUcmFuc2Zl
clNlc3Npb24pCisgICAgICAgIG1faW1hZ2VUcmFuc2ZlclNlc3Npb24gPSBJbWFnZVRyYW5zZmVy
U2Vzc2lvblZUOjpjcmVhdGUocHJlZmVyZWRQaXhlbEJ1ZmZlckZvcm1hdCgpKTsKKyAgICBpZiAo
IW1faW1hZ2VUcmFuc2ZlclNlc3Npb24pCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gc2Ft
cGxlVGltZSA9IE1lZGlhVGltZTo6Y3JlYXRlV2l0aERvdWJsZSgoZWxhcHNlZFRpbWUoKSArIDEw
MF9tcykuc2Vjb25kcygpKTsKKyAgICBhdXRvIHNhbXBsZUJ1ZmZlciA9IG1faW1hZ2VUcmFuc2Zl
clNlc3Npb24tPmNyZWF0ZU1lZGlhU2FtcGxlKGltYWdlQnVmZmVyLT5jb3B5SW1hZ2UoKS0+bmF0
aXZlSW1hZ2UoKS5nZXQoKSwgc2FtcGxlVGltZSwgc2l6ZSgpLCBtX2RldmljZU9yaWVudGF0aW9u
KTsKKyAgICBpZiAoIXNhbXBsZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gV2Ug
dXNlIG1fZGV2aWNlT3JpZW50YXRpb24gdG8gZW11bGF0ZSBzZW5zb3Igb3JpZW50YXRpb24KLSAg
ICBkaXNwYXRjaE1lZGlhU2FtcGxlVG9PYnNlcnZlcnMoTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVh
dGUoc2FtcGxlQnVmZmVyLmdldCgpLCBtX2RldmljZU9yaWVudGF0aW9uKSk7CisgICAgZGlzcGF0
Y2hNZWRpYVNhbXBsZVRvT2JzZXJ2ZXJzKCpzYW1wbGVCdWZmZXIuZ2V0KCkpOwogfQogCiB2b2lk
IE1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjOjpzZXR0aW5nc0RpZENoYW5nZShPcHRpb25TZXQ8
UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpGbGFnPiBzZXR0aW5ncykKQEAgLTIwMywyMSAr
MTI3LDYgQEAgdm9pZCBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYzo6bW9uaXRvck9yaWVudGF0
aW9uKE9yaWVudGF0aW9uTm90aWZpZXImIG5vdGlmaWUKICAgICBvcmllbnRhdGlvbkNoYW5nZWQo
bm90aWZpZXIub3JpZW50YXRpb24oKSk7CiB9CiAKLXZvaWQgTW9ja1JlYWx0aW1lVmlkZW9Tb3Vy
Y2VNYWM6OnNldFNpemVBbmRGcmFtZVJhdGVXaXRoUHJlc2V0KEludFNpemUgcmVxdWVzdGVkU2l6
ZSwgZG91YmxlLCBSZWZQdHI8VmlkZW9QcmVzZXQ+IHByZXNldCkKLXsKLSAgICBpZiAoIXByZXNl
dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHByZXNldC0+c2l6ZSAhPSByZXF1ZXN0ZWRT
aXplKSB7Ci0gICAgICAgIGlmIChtX3BpeGVsQnVmZmVyUmVzaXplciAmJiAhbV9waXhlbEJ1ZmZl
clJlc2l6ZXItPmNhblJlc2l6ZVRvKHJlcXVlc3RlZFNpemUpKQotICAgICAgICAgICAgbV9waXhl
bEJ1ZmZlclJlc2l6ZXIgPSBudWxscHRyOwotCi0gICAgICAgIGlmICghbV9waXhlbEJ1ZmZlclJl
c2l6ZXIpCi0gICAgICAgICAgICBtX3BpeGVsQnVmZmVyUmVzaXplciA9IHN0ZDo6bWFrZV91bmlx
dWU8UGl4ZWxCdWZmZXJSZXNpemVyPihyZXF1ZXN0ZWRTaXplLCBwcmVmZXJlZFBpeGVsQnVmZmVy
Rm9ybWF0KCkpOwotICAgIH0gZWxzZQotICAgICAgICBtX3BpeGVsQnVmZmVyUmVzaXplciA9IG51
bGxwdHI7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShN
RURJQV9TVFJFQU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9TY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5o
CmluZGV4IGVjOTIwZjAyNGE1Njg5OTIwMDk0NDk0NDQ3ZDcyYmVlNjMyOTBkYzcuLjljOGY4NzFj
M2QxZjljNjljMjU3YTZiZDk5ZWE5ZjQ0MjcyMGQ5ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9TY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1h
Yy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9TY3JlZW5E
aXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5oCkBAIC01Niw3ICs1Niw3IEBAIHByaXZhdGU6CiAKICAg
ICB2b2lkIGZyYW1lQXZhaWxhYmxlKENHRGlzcGxheVN0cmVhbUZyYW1lU3RhdHVzLCB1aW50NjRf
dCwgSU9TdXJmYWNlUmVmLCBDR0Rpc3BsYXlTdHJlYW1VcGRhdGVSZWYpOwogCi0gICAgUmV0YWlu
UHRyPENWUGl4ZWxCdWZmZXJSZWY+IGdlbmVyYXRlRnJhbWUoKSBmaW5hbDsKKyAgICBEaXNwbGF5
Q2FwdHVyZVNvdXJjZUNvY29hOjpEaXNwbGF5RnJhbWVUeXBlIGdlbmVyYXRlRnJhbWUoKSBmaW5h
bDsKICAgICBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M6OkRpc3BsYXlTdXJmYWNlVHlwZSBz
dXJmYWNlVHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0
aW5nczo6RGlzcGxheVN1cmZhY2VUeXBlOjpNb25pdG9yOyB9CiAKICAgICB2b2lkIHN0YXJ0UHJv
ZHVjaW5nRGF0YSgpIGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbWFjL1NjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1NjcmVlbkRpc3BsYXlDYXB0dXJlU291
cmNlTWFjLm1tCmluZGV4IGEyMzhmMjhmOTc1Yjg0MDgzNDI3N2U4YjBjMmRlZGMxOWNhYmU0NDcu
LjRjYjRkMTNjYTUwMmY0M2QyMTJiZDg0YTFkN2U3MGI4YWVlMmEyYjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9TY3JlZW5EaXNwbGF5Q2FwdHVy
ZVNvdXJjZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9t
YWMvU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMubW0KQEAgLTM2LDYgKzM2LDcgQEAKICNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKICNp
bmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJSZWFsdGlt
ZVZpZGVvVXRpbGl0aWVzLmgiCiAKICNpbmNsdWRlICJDb3JlVmlkZW9Tb2Z0TGluay5oIgogCkBA
IC0xNjYsNyArMTY3LDcgQEAgYm9vbCBTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6Y3Jl
YXRlRGlzcGxheVN0cmVhbSgpCiAgICAgICAgIH0pOwogCiAgICAgICAgIGF1dG8gc2l6ZSA9IGZy
YW1lU2l6ZSgpOwotICAgICAgICBtX2Rpc3BsYXlTdHJlYW0gPSBhZG9wdENGKENHRGlzcGxheVN0
cmVhbUNyZWF0ZVdpdGhEaXNwYXRjaFF1ZXVlKG1fZGlzcGxheUlELCBzaXplLndpZHRoKCksIHNp
emUuaGVpZ2h0KCksIGtDVlBpeGVsRm9ybWF0VHlwZV80MjBZcENiQ3I4UGxhbmFyLCBzdHJlYW1P
cHRpb25zLmdldCgpLCBtX2NhcHR1cmVRdWV1ZS5nZXQoKSwgbV9mcmFtZUF2YWlsYWJsZUJsb2Nr
KSk7CisgICAgICAgIG1fZGlzcGxheVN0cmVhbSA9IGFkb3B0Q0YoQ0dEaXNwbGF5U3RyZWFtQ3Jl
YXRlV2l0aERpc3BhdGNoUXVldWUobV9kaXNwbGF5SUQsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWln
aHQoKSwgcHJlZmVyZWRQaXhlbEJ1ZmZlckZvcm1hdCgpLCBzdHJlYW1PcHRpb25zLmdldCgpLCBt
X2NhcHR1cmVRdWV1ZS5nZXQoKSwgbV9mcmFtZUF2YWlsYWJsZUJsb2NrKSk7CiAgICAgICAgIGlm
ICghbV9kaXNwbGF5U3RyZWFtKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIlNj
cmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpjcmVhdGVEaXNwbGF5U3RyZWFtOiBDR0Rpc3Bs
YXlTdHJlYW1DcmVhdGUgZmFpbGVkIik7CiAgICAgICAgICAgICBjYXB0dXJlRmFpbGVkKCk7CkBA
IC0yMDUsMTggKzIwNiwxNSBAQCB2b2lkIFNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpz
dG9wUHJvZHVjaW5nRGF0YSgpCiAgICAgbV9pc1J1bm5pbmcgPSBmYWxzZTsKIH0KIAotUmV0YWlu
UHRyPENWUGl4ZWxCdWZmZXJSZWY+IFNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpnZW5l
cmF0ZUZyYW1lKCkKK0Rpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OkRpc3BsYXlGcmFtZVR5cGUg
U2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OmdlbmVyYXRlRnJhbWUoKQogewotICAgIGlm
ICghbV9jdXJyZW50RnJhbWUuaW9TdXJmYWNlKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
CiAgICAgRGlzcGxheVN1cmZhY2UgY3VycmVudEZyYW1lOwogICAgIHsKICAgICAgICAgTG9ja0hv
bGRlciBsb2NrKG1fY3VycmVudEZyYW1lTXV0ZXgpOwogICAgICAgICBjdXJyZW50RnJhbWUgPSBt
X2N1cnJlbnRGcmFtZS5pb1N1cmZhY2UoKTsKICAgICB9CiAKLSAgICByZXR1cm4gcGl4ZWxCdWZm
ZXJGcm9tSU9TdXJmYWNlKGN1cnJlbnRGcmFtZS5pb1N1cmZhY2UoKSk7CisgICAgcmV0dXJuIERp
c3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OkRpc3BsYXlGcmFtZVR5cGUgeyBSZXRhaW5QdHI8SU9T
dXJmYWNlUmVmPiB7IGN1cnJlbnRGcmFtZS5pb1N1cmZhY2UoKSB9IH07CiB9CiAKIHZvaWQgU2Ny
ZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OnN0YXJ0RGlzcGxheVN0cmVhbSgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvV2luZG93RGlzcGxh
eUNhcHR1cmVTb3VyY2VNYWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9XaW5kb3dEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5oCmluZGV4IDFjNGQzNzYwZjg4Y2Zm
NWZhNzRjZDI3MDY2MDNlNjhhMWQzZDZkZGYuLjJkMWE2NmUwMzEyYmFkY2E4OWQ5YmNmMGI4MDY2
ZWQ0MzJkYjJkNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL21hYy9XaW5kb3dEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9XaW5kb3dEaXNwbGF5Q2FwdHVyZVNvdXJjZU1h
Yy5oCkBAIC00OSwxMSArNDksMTAgQEAgcHJpdmF0ZToKICAgICBXaW5kb3dEaXNwbGF5Q2FwdHVy
ZVNvdXJjZU1hYyh1aW50MzJfdCwgU3RyaW5nJiYpOwogICAgIHZpcnR1YWwgfldpbmRvd0Rpc3Bs
YXlDYXB0dXJlU291cmNlTWFjKCkgPSBkZWZhdWx0OwogCi0gICAgUmV0YWluUHRyPENWUGl4ZWxC
dWZmZXJSZWY+IGdlbmVyYXRlRnJhbWUoKSBmaW5hbDsKKyAgICBEaXNwbGF5Q2FwdHVyZVNvdXJj
ZUNvY29hOjpEaXNwbGF5RnJhbWVUeXBlIGdlbmVyYXRlRnJhbWUoKSBmaW5hbDsKICAgICBSZWFs
dGltZU1lZGlhU291cmNlU2V0dGluZ3M6OkRpc3BsYXlTdXJmYWNlVHlwZSBzdXJmYWNlVHlwZSgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RGlzcGxh
eVN1cmZhY2VUeXBlOjpXaW5kb3c7IH0KIAogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiB3aW5k
b3dJbWFnZSgpOwotICAgIFJldGFpblB0cjxDVlBpeGVsQnVmZmVyUmVmPiBwaXhlbEJ1ZmZlckZy
b21DR0ltYWdlKENHSW1hZ2VSZWYpOwogCiAgICAgSW50U2l6ZSBtX3dpbmRvd1NpemU7CiAgICAg
Q0dXaW5kb3dJRCBtX3dpbmRvd0lEIHsgMCB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1dpbmRvd0Rpc3BsYXlDYXB0dXJlU291cmNlTWFjLm1t
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1dpbmRvd0Rpc3BsYXlD
YXB0dXJlU291cmNlTWFjLm1tCmluZGV4IDFkNmExN2NkNDEzOGZkMWQ1NjcyYmY5MzI5MzcwNGJm
MTAxNDE5MjMuLjljNWQ1ZDQzMTJkNmQ1MzY4NGM4NWYyYTc4MGQ4M2IzMjY5NTE1ODEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9XaW5kb3dEaXNw
bGF5Q2FwdHVyZVNvdXJjZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9tYWMvV2luZG93RGlzcGxheUNhcHR1cmVTb3VyY2VNYWMubW0KQEAgLTEzOSw2OSAr
MTM5LDkgQEAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IFdpbmRvd0Rpc3BsYXlDYXB0dXJlU291cmNl
TWFjOjp3aW5kb3dJbWFnZSgpCiAgICAgcmV0dXJuIGltYWdlOwogfQogCi1SZXRhaW5QdHI8Q1ZQ
aXhlbEJ1ZmZlclJlZj4gV2luZG93RGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OmdlbmVyYXRlRnJh
bWUoKQorRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6RGlzcGxheUZyYW1lVHlwZSBXaW5kb3dE
aXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6Z2VuZXJhdGVGcmFtZSgpCiB7Ci0gICAgYXV0byBpbWFn
ZSA9IHdpbmRvd0ltYWdlKCk7Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICBpZiAobV9sYXN0SW1hZ2UgJiYgbV9sYXN0UGl4ZWxCdWZmZXIgJiYgQ0ZFcXVh
bChtX2xhc3RJbWFnZS5nZXQoKSwgaW1hZ2UuZ2V0KCkpKQotICAgICAgICByZXR1cm4gbV9sYXN0
UGl4ZWxCdWZmZXIuZ2V0KCk7Ci0KLSAgICBtX2xhc3RJbWFnZSA9IFdURk1vdmUoaW1hZ2UpOwot
ICAgIHJldHVybiBwaXhlbEJ1ZmZlckZyb21DR0ltYWdlKG1fbGFzdEltYWdlLmdldCgpKTsKLX0K
LQotUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJSZWY+IFdpbmRvd0Rpc3BsYXlDYXB0dXJlU291cmNl
TWFjOjpwaXhlbEJ1ZmZlckZyb21DR0ltYWdlKENHSW1hZ2VSZWYgaW1hZ2UpCi17Ci0gICAgc3Rh
dGljIENHQ29sb3JTcGFjZVJlZiBzUkdCQ29sb3JTcGFjZSA9IHNSR0JDb2xvclNwYWNlUmVmKCk7
Ci0KLSAgICBhdXRvIGltYWdlU2l6ZSA9IEludFNpemUoQ0dJbWFnZUdldFdpZHRoKGltYWdlKSwg
Q0dJbWFnZUdldEhlaWdodChpbWFnZSkpOwotICAgIGlmIChpbWFnZVNpemUgIT0gaW50cmluc2lj
U2l6ZSgpKSB7Ci0gICAgICAgIG1fYnVmZmVyUG9vbCA9IG51bGxwdHI7Ci0gICAgICAgIG1fbGFz
dEltYWdlID0gbnVsbHB0cjsKLSAgICAgICAgbV9sYXN0UGl4ZWxCdWZmZXIgPSBudWxscHRyOwot
ICAgIH0KLQotICAgIGlmICghbV9idWZmZXJQb29sKSB7Ci0gICAgICAgIENWUGl4ZWxCdWZmZXJQ
b29sUmVmIGJ1ZmZlclBvb2w7Ci0gICAgICAgIENGRGljdGlvbmFyeVJlZiBzb3VyY2VQaXhlbEJ1
ZmZlck9wdGlvbnMgPSAoX19icmlkZ2UgQ0ZEaWN0aW9uYXJ5UmVmKSBAewotICAgICAgICAoX19i
cmlkZ2UgTlNTdHJpbmcgKilrQ1ZQaXhlbEJ1ZmZlclBpeGVsRm9ybWF0VHlwZUtleSA6IEAoa0NW
UGl4ZWxGb3JtYXRUeXBlXzMyQVJHQiksCi0gICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtD
VlBpeGVsQnVmZmVyV2lkdGhLZXkgOiBAKGltYWdlU2l6ZS53aWR0aCgpKSwKLSAgICAgICAgKF9f
YnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxCdWZmZXJIZWlnaHRLZXkgOiBAKGltYWdlU2l6ZS5o
ZWlnaHQoKSksCi0jaWYgUExBVEZPUk0oSU9TKQotICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcg
KilrQ1ZQaXhlbEZvcm1hdE9wZW5HTEVTQ29tcGF0aWJpbGl0eSA6IEAoWUVTKSwKLSNlbHNlCi0g
ICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsQnVmZmVyT3BlbkdMQ29tcGF0aWJp
bGl0eUtleSA6IEAoWUVTKSwKLSNlbmRpZgotICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilr
Q1ZQaXhlbEJ1ZmZlcklPU3VyZmFjZVByb3BlcnRpZXNLZXkgOiBAeyAvKmVtcHR5IGRpY3Rpb25h
cnkqLyB9Ci0gICAgfTsKLQotICAgICAgICBDRkRpY3Rpb25hcnlSZWYgcGl4ZWxCdWZmZXJQb29s
T3B0aW9ucyA9IChfX2JyaWRnZSBDRkRpY3Rpb25hcnlSZWYpIEB7Ci0gICAgICAgICAgICAoX19i
cmlkZ2UgTlNTdHJpbmcgKilrQ1ZQaXhlbEJ1ZmZlclBvb2xNaW5pbXVtQnVmZmVyQ291bnRLZXkg
OiBAKDMpCi0gICAgICAgIH07Ci0KLSAgICAgICAgQ1ZSZXR1cm4gc3RhdHVzID0gQ1ZQaXhlbEJ1
ZmZlclBvb2xDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgcGl4ZWxCdWZmZXJQb29sT3B0aW9u
cywgc291cmNlUGl4ZWxCdWZmZXJPcHRpb25zLCAmYnVmZmVyUG9vbCk7Ci0gICAgICAgIGlmIChz
dGF0dXMgIT0ga0NWUmV0dXJuU3VjY2VzcykKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgICAgIG1fYnVmZmVyUG9vbCA9IGFkb3B0Q0YoYnVmZmVyUG9vbCk7Ci0gICAgICAgIHNl
dEludHJpbnNpY1NpemUoaW1hZ2VTaXplKTsKLSAgICB9Ci0KLSAgICBDVlBpeGVsQnVmZmVyUmVm
IHBpeGVsQnVmZmVyOwotICAgIENWUmV0dXJuIHN0YXR1cyA9IENWUGl4ZWxCdWZmZXJQb29sQ3Jl
YXRlUGl4ZWxCdWZmZXIobnVsbHB0ciwgbV9idWZmZXJQb29sLmdldCgpLCAmcGl4ZWxCdWZmZXIp
OwotICAgIGlmIChzdGF0dXMgIT0ga0NWUmV0dXJuU3VjY2VzcykKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICBDVlBpeGVsQnVmZmVyTG9ja0Jhc2VBZGRyZXNzKHBpeGVsQnVmZmVyLCAw
KTsKLSAgICB2b2lkKiBkYXRhID0gQ1ZQaXhlbEJ1ZmZlckdldEJhc2VBZGRyZXNzKHBpeGVsQnVm
ZmVyKTsKLSAgICBhdXRvIGNvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShk
YXRhLCBpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpLCA4LCBDVlBpeGVsQnVm
ZmVyR2V0Qnl0ZXNQZXJSb3cocGl4ZWxCdWZmZXIpLCBzUkdCQ29sb3JTcGFjZSwgKENHQml0bWFw
SW5mbykga0NHSW1hZ2VBbHBoYU5vbmVTa2lwRmlyc3QpKTsKLSAgICBDR0NvbnRleHREcmF3SW1h
Z2UoY29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBDR0ltYWdlR2V0V2lkdGgoaW1hZ2Up
LCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKSksIGltYWdlKTsKLSAgICBDVlBpeGVsQnVmZmVyVW5s
b2NrQmFzZUFkZHJlc3MocGl4ZWxCdWZmZXIsIDApOwotCi0gICAgbV9sYXN0UGl4ZWxCdWZmZXIg
PSBhZG9wdENGKHBpeGVsQnVmZmVyKTsKLSAgICByZXR1cm4gbV9sYXN0UGl4ZWxCdWZmZXI7Cisg
ICAgcmV0dXJuIERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OkRpc3BsYXlGcmFtZVR5cGUgeyBS
ZXRhaW5QdHI8Q0dJbWFnZVJlZj4geyB3aW5kb3dJbWFnZSgpIH0gfTsKIH0KIAogc3RkOjpvcHRp
b25hbDxDYXB0dXJlRGV2aWNlPiBXaW5kb3dEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6d2luZG93
Q2FwdHVyZURldmljZVdpdGhQZXJzaXN0ZW50SUQoY29uc3QgU3RyaW5nJiBpZFN0cmluZykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9T
b3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRl
b1NvdXJjZS5jcHAKaW5kZXggNjIyNDdlZDU2ZGQwZmU3MmJlMDAzOTE0NGI4ZjA0NmY1MGQ5NmY0
ZC4uN2FiN2EyMTU0ZTNhZTJhNDFjN2QxMmM4YzA3NGQyMjFmODc4NzZjMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJj
ZS5jcHAKQEAgLTEyNiw2ICsxMjYsNyBAQCBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJp
bGl0aWVzJiBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZTo6Y2FwYWJpbGl0aWVzKCkKICAgICAgICAg
ICAgIGNhcGFiaWxpdGllcy5hZGRGYWNpbmdNb2RlKFdURjo6Z2V0PE1vY2tDYW1lcmFQcm9wZXJ0
aWVzPihtX2RldmljZS5wcm9wZXJ0aWVzKS5mYWNpbmdNb2RlKTsKICAgICAgICAgICAgIGNhcGFi
aWxpdGllcy5zZXREZXZpY2VJZChoYXNoZWRJZCgpKTsKICAgICAgICAgICAgIHVwZGF0ZUNhcGFi
aWxpdGllcyhjYXBhYmlsaXRpZXMpOworICAgICAgICAgICAgY2FwYWJpbGl0aWVzLnNldERldmlj
ZUlkKGhhc2hlZElkKCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgY2FwYWJpbGl0
aWVzLnNldFdpZHRoKENhcGFiaWxpdHlWYWx1ZU9yUmFuZ2UoNzIsIDI4ODApKTsKICAgICAgICAg
ICAgIGNhcGFiaWxpdGllcy5zZXRIZWlnaHQoQ2FwYWJpbGl0eVZhbHVlT3JSYW5nZSg0NSwgMTgw
MCkpOwpAQCAtMTU5LDE0ICsxNjAsMTQgQEAgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRp
bmdzJiBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZTo6c2V0dGluZ3MoKQogICAgICAgICBzZXR0aW5n
cy5zZXRBc3BlY3RSYXRpbyhhc3BlY3RSYXRpbygpKTsKIAogICAgIFJlYWx0aW1lTWVkaWFTb3Vy
Y2VTdXBwb3J0ZWRDb25zdHJhaW50cyBzdXBwb3J0ZWRDb25zdHJhaW50czsKLSAgICBzdXBwb3J0
ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0RldmljZUlkKHRydWUpOwogICAgIHN1cHBvcnRlZENv
bnN0cmFpbnRzLnNldFN1cHBvcnRzRnJhbWVSYXRlKHRydWUpOwogICAgIHN1cHBvcnRlZENvbnN0
cmFpbnRzLnNldFN1cHBvcnRzV2lkdGgodHJ1ZSk7CiAgICAgc3VwcG9ydGVkQ29uc3RyYWludHMu
c2V0U3VwcG9ydHNIZWlnaHQodHJ1ZSk7CiAgICAgc3VwcG9ydGVkQ29uc3RyYWludHMuc2V0U3Vw
cG9ydHNBc3BlY3RSYXRpbyh0cnVlKTsKLSAgICBpZiAobW9ja0NhbWVyYSgpKQorICAgIGlmICht
b2NrQ2FtZXJhKCkpIHsKKyAgICAgICAgc3VwcG9ydGVkQ29uc3RyYWludHMuc2V0U3VwcG9ydHNE
ZXZpY2VJZCh0cnVlKTsKICAgICAgICAgc3VwcG9ydGVkQ29uc3RyYWludHMuc2V0U3VwcG9ydHNG
YWNpbmdNb2RlKHRydWUpOwotICAgIGVsc2UgeworICAgIH0gZWxzZSB7CiAgICAgICAgIHN1cHBv
cnRlZENvbnN0cmFpbnRzLnNldFN1cHBvcnRzRGlzcGxheVN1cmZhY2UodHJ1ZSk7CiAgICAgICAg
IHN1cHBvcnRlZENvbnN0cmFpbnRzLnNldFN1cHBvcnRzTG9naWNhbFN1cmZhY2UodHJ1ZSk7CiAg
ICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>352576</attachid>
            <date>2018-10-17 10:03:03 -0700</date>
            <delta_ts>2018-10-17 11:27:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-190519-20181017100302.patch</filename>
            <type>text/plain</type>
            <size>85993</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM3MjIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWE0NmI3NzY0NzJmODlk
ZTBlYWNjMTBlNjZmNTc0M2ZjMDhlNDQwOC4uNmNkNWMxYTc4NzJmYWVhMWFiNTdlMzI4ZjM4MjU5
ZjMxNmM0ZGIzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgwIEBACisyMDE4LTEwLTE2ICBFcmlj
IENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNZWRpYVN0cmVh
bV0gQ29uc29saWRhdGUgYWxsIGltYWdlIGNvbnZlcnNpb24gYW5kIHJlc2l6aW5nIGludG8gb25l
IGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
OTA1MTkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQ1MjI0MzA3PgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gZnVuY3Rp
b25hbCBjaGFuZ2UuCisKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OiBBZGQgSW1hZ2VUcmFu
c2ZlclNlc3Npb25WVC4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6IERpdHRvLgorCisgICAgICAgICogcGxhdGZvcm0vTWVkaWFTYW1wbGUuaDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhU2FtcGxlOjp2aWRlb1BpeGVsRm9ybWF0IGNvbnN0KTogTmV3LgorCisg
ICAgICAgICogcGxhdGZvcm0vY29jb2EvVmlkZW9Ub29sYm94U29mdExpbmsuY3BwOiBBZGQgbmV3
IGtWVFBpeGVsVHJhbnNmZXJQcm9wZXJ0eSBrZXlzLgorICAgICAgICAqIHBsYXRmb3JtL2NvY29h
L1ZpZGVvVG9vbGJveFNvZnRMaW5rLmg6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMuaDoKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhU2FtcGxlQVZGT2JqQzo6Y3JlYXRlKTogUmVtb3ZlIHVuaW1wbGVtZW50ZWQgdmFyaWFu
dC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNh
bXBsZUFWRk9iakMubW06CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZUFWRk9iakM6OnZp
ZGVvUGl4ZWxGb3JtYXQgY29uc3QpOiBOZXcuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jdi9JbWFnZVRyYW5zZmVyU2Vzc2lvblZULmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jdi9JbWFnZVRyYW5zZmVyU2Vzc2lvblZULm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OkltYWdlVHJhbnNmZXJTZXNzaW9uVlQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6fkltYWdlVHJhbnNmZXJTZXNz
aW9uVlQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6c2V0U2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVhdGVQaXhl
bEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVh
dGVDTVNhbXBsZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpyb3VuZFVwVG9NYWNyb2Jsb2Nr
TXVsdGlwbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6aW9T
dXJmYWNlUGl4ZWxCdWZmZXJDcmVhdGlvbk9wdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlTWVkaWFTYW1wbGUpOgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJSZXNpemVyLmg6IFJlbW92ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJSZXNpemVyLm1tOiBSZW1vdmVkLgor
CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJlU291cmNl
Lmg6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJlU291
cmNlLm1tOgorICAgICAgICAoV2ViQ29yZTo6QVZWaWRlb0NhcHR1cmVTb3VyY2U6OnByZWZlcnNQ
cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6QVZWaWRlb0NhcHR1cmVTb3VyY2U6OmNhcHR1cmVP
dXRwdXREaWRPdXRwdXRTYW1wbGVCdWZmZXJGcm9tQ29ubmVjdGlvbik6IFJlbW92ZQorICAgICAg
ICB0aGUgcmVzaXppbmcgbG9naWMsIGl0IGlzIGhhbmRsZWQgYnkgdGhlIGJhc2UgY2xhc3MuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVTb3VyY2VD
b2NvYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpj
YXBhYmlsaXRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUNhcHR1cmVTb3VyY2VDb2Nv
YTo6c2V0dGluZ3NEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUNhcHR1cmVT
b3VyY2VDb2NvYTo6c2V0SW50cmluc2ljU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
Q2FwdHVyZVNvdXJjZUNvY29hOjplbWl0RnJhbWUpOiBSZW1vdmUgcmVzaXppbmcgbG9naWMsIGp1
c3QgdXNlIGEgdHJhbnNmZXIKKyAgICAgICAgc2Vzc2lvbiB0byBjcmVhdGUgYW4gaW1hZ2UgZnJv
bSB0aGUgY2FwdHVyZSBzb3VyY2UgbmF0aXZlIG91dHB1dCBmb3JtYXQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpzYW1wbGVCdWZmZXJGcm9tUGl4ZWxCdWZm
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6cm91bmRVcFRvTWFjcm9ibG9ja011bHRp
cGxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlDYXB0dXJlU291cmNlQ29j
b2E6OnBpeGVsQnVmZmVyRnJvbUlPU3VyZmFjZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL0Rpc3BsYXlDYXB0dXJlU291cmNlQ29jb2EuaDoKKworICAgICAg
ICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5o
OgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1Nv
dXJjZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFj
Ojp1cGRhdGVTYW1wbGVCdWZmZXIpOiBVc2UgaW1hZ2UgdHJhbnNmZXIgc2Vzc2lvbi4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjOjpDTVNhbXBsZUJ1ZmZlckZy
b21QaXhlbEJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpNb2NrUmVhbHRpbWVW
aWRlb1NvdXJjZU1hYzo6cGl4ZWxCdWZmZXJGcm9tQ0dJbWFnZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYzo6c2V0U2l6ZUFuZEZy
YW1lUmF0ZVdpdGhQcmVzZXQpOiBEZWxldGVkLgorCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL1NjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLmg6CisgICAgICAgICogcGxh
dGZvcm0vbWVkaWFzdHJlYW0vbWFjL1NjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6U2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OmNyZWF0ZURp
c3BsYXlTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6U2NyZWVuRGlzcGxheUNhcHR1cmVTb3Vy
Y2VNYWM6OmdlbmVyYXRlRnJhbWUpOiBSZXR1cm4gdGhlIElPU3VyZmFjZSBkaXJlY3RseS4KKwor
ICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9XaW5kb3dEaXNwbGF5Q2FwdHVyZVNv
dXJjZU1hYy5oOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9XaW5kb3dEaXNw
bGF5Q2FwdHVyZVNvdXJjZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OldpbmRvd0Rpc3BsYXlD
YXB0dXJlU291cmNlTWFjOjpnZW5lcmF0ZUZyYW1lKTogUmV0dXJuIHRoZSBDR0ltYWdlIGRpcmVj
dGx5LgorICAgICAgICAoV2ViQ29yZTo6V2luZG93RGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OnBp
eGVsQnVmZmVyRnJvbUNHSW1hZ2UpOiBEZWxldGVkLgorCisgICAgICAgICogcGxhdGZvcm0vbW9j
ay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNb2NrUmVh
bHRpbWVWaWRlb1NvdXJjZTo6Y2FwYWJpbGl0aWVzKTogT25seSB0aGUgY2FtZXJhIHN1cHBvcnRz
IGRldmljZSBJRC4KKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tSZWFsdGltZVZpZGVvU291cmNlOjpz
ZXR0aW5ncyk6IERpdHRvLgorCiAyMDE4LTEwLTE3ICBBbGkgSnVtYSAgPGFqdW1hQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBGbGFreSBJbnRlcnNlY3Rpb25PYnNlcnZlciB3ZWIgcGxhdGZvcm0g
dGVzdHMgaW52b2x2aW5nIHN0eWxlIHVwZGF0ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CmluZGV4
IGM3NmY0OTIzMWNiNWUwYmJkNWMwOWNmMmUyNGM0YzkxNTljZDllNTcuLjg0NTU1YTZhNzlhYTA0
MWUyYWJiNWE5YjA0ODk0ODlkODYyMDMwODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dApAQCAt
MzE0LDggKzMxNCw4IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIubW0KIHBs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYk1ldGFsTGF5ZXIubW0KIHBsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL1RleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EubW0KIAorcGxhdGZvcm0vZ3JhcGhp
Y3MvY3YvSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvUGl4
ZWxCdWZmZXJDb25mb3JtZXJDVi5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2N2L1BpeGVsQnVmZmVy
UmVzaXplci5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvVGV4dHVyZUNhY2hlQ1YubW0KIHBsYXRm
b3JtL2dyYXBoaWNzL2N2L1ZpZGVvVGV4dHVyZUNvcGllckNWLmNwcAogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggOTdiMzVhZmZm
OTFhMzIzNTYzMDdjYTZhNzQ2MDA1OGQyMDJhMDViZi4uZTU2ZTdlYmVhNzA2ZTNiYTQyZWUyMWQ4
NmJkZGE1YTI5NzYxMTBlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTY5LDYgKzE2OSw3IEBACiAJCTA3OEU0M0RBMUFCQjZD
N0UwMDFDMkZBNiAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzhFNDNEODFBQkI2QzdFMDAxQzJGQTYg
LyogTWVkaWFQbGF5YmFja1RhcmdldFBpY2tlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA3OEU0M0REMUFCQjZGNkYwMDFDMkZBNiAvKiBNZWRp
YVBsYXliYWNrVGFyZ2V0UGlja2VyTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwNzhFNDNEQjFBQkI2RjZGMDAxQzJGQTYgLyogTWVkaWFQbGF5YmFj
a1RhcmdldFBpY2tlck1hYy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTA3OEU0M0RFMUFCQjZGNkYwMDFDMkZBNiAvKiBNZWRpYVBsYXliYWNrVGFy
Z2V0UGlja2VyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMDc4RTQzREMxQUJCNkY2RjAwMUMyRkE2IC8qIE1lZGlhUGxheWJhY2tUYXJnZXRQaWNr
ZXJNYWMubW0gKi87IH07CisJCTA3OEVEMTkzMjE2RDA3OTUwMDc3NUIzMyAvKiBJbWFnZVRyYW5z
ZmVyU2Vzc2lvblZULmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwNzQ2RDMwQzIxNDZFQTM4MDAzRERGODQgLyogSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA3OTIx
NjU1MUFBNTYwQUEwMEEzQzA0OSAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0Q2xpZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzkyMTY1MzFBQTU2MEFB
MDBBM0MwNDkgLyogTWVkaWFQbGF5YmFja1RhcmdldENsaWVudC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA3OTQxNzkxMTY2RTg1NUYwMDk0MTZD
MiAvKiBJbmJhbmRUZXh0VHJhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDc5NDE3OEYxNjZFODU1RjAwOTQxNkMyIC8qIEluYmFuZFRleHRUcmFj
ay5jcHAgKi87IH07CiAJCTA3OTQxNzkyMTY2RTg1NUYwMDk0MTZDMiAvKiBJbmJhbmRUZXh0VHJh
Y2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3OTQx
NzkwMTY2RTg1NUYwMDk0MTZDMiAvKiBJbmJhbmRUZXh0VHJhY2suaCAqLzsgfTsKQEAgLTUzNjgs
OCArNTM2OSw4IEBACiAJCTA3M0I4NzY1MUU0Mzg1OUQwMDcxQzBFQyAvKiBBdWRpb1NhbXBsZURh
dGFTb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXVkaW9TYW1wbGVE
YXRhU291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3NDRFQ0VCMUUwQzRB
RTUwMDBEMDk0NCAvKiBNb2NrUmVhbHRpbWVBdWRpb1NvdXJjZU1hYy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNb2NrUmVhbHRpbWVBdWRpb1NvdXJjZU1hYy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwNzQ0RUNFQzFFMEM0QUU1MDAwRDA5NDQgLyogTW9ja1Jl
YWx0aW1lQXVkaW9Tb3VyY2VNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBNb2NrUmVhbHRpbWVBdWRpb1NvdXJjZU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMDc0NkQzMEEyMTQ2RUEzNzAwM0RERjg0IC8qIFBpeGVsQnVmZmVyUmVzaXpl
ci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBpeGVsQnVmZmVy
UmVzaXplci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDc0NkQzMEMyMTQ2RUEz
ODAwM0RERjg0IC8qIFBpeGVsQnVmZmVyUmVzaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBQaXhlbEJ1ZmZlclJlc2l6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMDc0NkQzMEEyMTQ2RUEzNzAwM0RERjg0IC8qIEltYWdlVHJhbnNmZXJTZXNzaW9uVlQu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBJbWFnZVRyYW5zZmVy
U2Vzc2lvblZULm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwNzQ2RDMwQzIxNDZF
QTM4MDAzRERGODQgLyogSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJbWFnZVRyYW5zZmVyU2Vzc2lvblZULmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTA3NEU4MkI4MThBNjlGMEUwMDdFRjU0QyAvKiBQbGF0Zm9ybVRpbWVS
YW5nZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGxhdGZvcm1U
aW1lUmFuZ2VzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDc0RTgyQjkxOEE2
OUYwRTAwN0VGNTRDIC8qIFBsYXRmb3JtVGltZVJhbmdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQbGF0Zm9ybVRpbWVSYW5nZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMDc1Mzg2MDAxNDQ4OUU5ODAwQjc4NDUyIC8qIENhY2hlZFRleHRUcmFjay5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWNoZWRUZXh0VHJhY2suY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjUwOTUsMTAgKzI1MDk2LDEwIEBACiAJ
CUNEOUQ4MjdDMUM3QkIyRUQwMDZGRjA2NiAvKiBjdiAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3Vw
OwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMDc0NkQzMEMyMTQ2RUEzODAwM0RERjg0IC8qIEltYWdl
VHJhbnNmZXJTZXNzaW9uVlQuaCAqLywKKwkJCQkwNzQ2RDMwQTIxNDZFQTM3MDAzRERGODQgLyog
SW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5tbSAqLywKIAkJCQlDRDdEMzM0MTFDN0ExMjNGMDAwNDEy
OTMgLyogUGl4ZWxCdWZmZXJDb25mb3JtZXJDVi5jcHAgKi8sCiAJCQkJQ0Q3RDMzNDIxQzdBMTIz
RjAwMDQxMjkzIC8qIFBpeGVsQnVmZmVyQ29uZm9ybWVyQ1YuaCAqLywKLQkJCQkwNzQ2RDMwQzIx
NDZFQTM4MDAzRERGODQgLyogUGl4ZWxCdWZmZXJSZXNpemVyLmggKi8sCi0JCQkJMDc0NkQzMEEy
MTQ2RUEzNzAwM0RERjg0IC8qIFBpeGVsQnVmZmVyUmVzaXplci5tbSAqLywKIAkJCQlDRDlEODI3
NDFDN0FFNTM1MDA2RkYwNjYgLyogVGV4dHVyZUNhY2hlQ1YuaCAqLywKIAkJCQlDRDlEODI3MzFD
N0FFNTM1MDA2RkYwNjYgLyogVGV4dHVyZUNhY2hlQ1YubW0gKi8sCiAJCQkJQ0Q5RDgyNzcxQzdC
OEVFMTAwNkZGMDY2IC8qIFZpZGVvVGV4dHVyZUNvcGllckNWLmNwcCAqLywKQEAgLTI4NzIwLDYg
KzI4NzIxLDcgQEAKIAkJCQk3QzE5M0JDMTFGNUUwRUVEMDA4OEYzRTYgLyogSW1hZ2VTbW9vdGhp
bmdRdWFsaXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQk1NTQ2NzU3QjFGRDIxMkE5MDAzQjEwQjAg
LyogSW1hZ2VTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTRCMzQ4MDk0MEVFRjUwRDQwMEFD
MUI0MSAvKiBJbWFnZVNvdXJjZUNHLmggaW4gSGVhZGVycyAqLywKKwkJCQkwNzhFRDE5MzIxNkQw
Nzk1MDA3NzVCMzMgLyogSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNTU1MENCNDIxRTk1NUUzQzAwMTExQUEwIC8qIEltYWdlVHlwZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTI2Rjc1NkIzMUIzQjY2RjcwMDA1REQ3OSAvKiBJbW11dGFibGVORkEuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTI2Rjc1NkI1MUIzQjY4RjIwMDA1REQ3OSAvKiBJbW11dGFibGVORkFOb2Rl
QnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9NZWRpYVNhbXBsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVkaWFTYW1wbGUu
aAppbmRleCBlNTgyZmRiNDlhY2VlZGEwZmMzNjhhMGNlYzU2MTg4MWFlODhjMzdiLi4wNTBkOTM4
OWQxOGUxMGY1ZDk3YmE0M2Q4NjBjMmExMzUyMDY2MmZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9NZWRpYVNhbXBsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L01lZGlhU2FtcGxlLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkZsb2F0U2l6ZS5o
IgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlzLmg+CisjaW5jbHVkZSA8d3Rm
L0VudW1UcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvTWVkaWFUaW1lLmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KQEAgLTEw
MCw2ICsxMDEsMjAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3QgPSAwOwogfTsKIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCituYW1lc3Bh
Y2UgV1RGIHsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpNZWRpYVNh
bXBsZTo6VmlkZW9Sb3RhdGlvbj4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8Cisg
ICAgICAgIFdlYkNvcmU6Ok1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uLAorICAgICAgICBXZWJD
b3JlOjpNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6Tm9uZSwKKyAgICAgICAgV2ViQ29yZTo6
TWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246OlVwc2lkZURvd24sCisgICAgICAgIFdlYkNvcmU6
Ok1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpSaWdodCwKKyAgICAgICAgV2ViQ29yZTo6TWVk
aWFTYW1wbGU6OlZpZGVvUm90YXRpb246OkxlZnQKKyAgICA+OworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29j
b2EvQ29yZVZpZGVvU29mdExpbmsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2Ev
Q29yZVZpZGVvU29mdExpbmsuY3BwCmluZGV4IDhiYjM2MmJmMjY4MGQzNmQ2ZTNmMGQ1YzMyMDUy
MTM1YzFkZjVhOTguLmRjZmIxY2ZiNDdhMDNkMzczYTNhNjIyODc0ZTcwMzg1OTE2Y2UwOGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL0NvcmVWaWRlb1NvZnRMaW5r
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9Db3JlVmlkZW9Tb2Z0TGlu
ay5jcHAKQEAgLTkyLDQgKzkyLDYgQEAgU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9TT1VSQ0UoV2Vi
Q29yZSwgQ29yZVZpZGVvLCBrQ1ZQaXhlbEJ1ZmZlckV4dGVuZGVkUGl4ZWxzQm8KIFNPRlRfTElO
S19DT05TVEFOVF9GT1JfU09VUkNFKFdlYkNvcmUsIENvcmVWaWRlbywga0NWUGl4ZWxCdWZmZXJP
cGVuR0xDb21wYXRpYmlsaXR5S2V5LCBDRlN0cmluZ1JlZikKICNlbmRpZgogCitTT0ZUX0xJTktf
RlVOQ1RJT05fRk9SX1NPVVJDRShXZWJDb3JlLCBDb3JlVmlkZW8sIENWUGl4ZWxCdWZmZXJDcmVh
dGVXaXRoSU9TdXJmYWNlLCBDVlJldHVybiwgKENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciwgSU9T
dXJmYWNlUmVmIHN1cmZhY2UsIENGRGljdGlvbmFyeVJlZiBwaXhlbEJ1ZmZlckF0dHJpYnV0ZXMs
IENWUGl4ZWxCdWZmZXJSZWYgKiBwaXhlbEJ1ZmZlck91dCksIChhbGxvY2F0b3IsIHN1cmZhY2Us
IHBpeGVsQnVmZmVyQXR0cmlidXRlcywgcGl4ZWxCdWZmZXJPdXQpKQorCiAjZW5kaWYgLy8gSEFW
RShDT1JFX1ZJREVPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2Ev
Q29yZVZpZGVvU29mdExpbmsuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL0NvcmVW
aWRlb1NvZnRMaW5rLmgKaW5kZXggOWVlYjQzNDYxODkzODQ1YTY4MjQ0ODhiNDM4ZjU5NjlhYjJj
OGIxMi4uNTI5NWU1OGM4NDcwZjUyZjJhZDg0M2IxNjdhMTc5NDc3MDhkNTRiOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvQ29yZVZpZGVvU29mdExpbmsuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9Db3JlVmlkZW9Tb2Z0TGluay5oCkBAIC0x
NDcsNCArMTQ3LDcgQEAgU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9IRUFERVIoV2ViQ29yZSwgQ29y
ZVZpZGVvLCBrQ1ZQaXhlbEJ1ZmZlck9wZW5HTENvbXBhdGliaWwKICNkZWZpbmUga0NWUGl4ZWxC
dWZmZXJPcGVuR0xDb21wYXRpYmlsaXR5S2V5IGdldF9Db3JlVmlkZW9fa0NWUGl4ZWxCdWZmZXJP
cGVuR0xDb21wYXRpYmlsaXR5S2V5KCkKICNlbmRpZgogCitTT0ZUX0xJTktfRlVOQ1RJT05fRk9S
X0hFQURFUihXZWJDb3JlLCBDb3JlVmlkZW8sIENWUGl4ZWxCdWZmZXJDcmVhdGVXaXRoSU9TdXJm
YWNlLCBDVlJldHVybiwgKENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciwgSU9TdXJmYWNlUmVmIHN1
cmZhY2UsIENGRGljdGlvbmFyeVJlZiBwaXhlbEJ1ZmZlckF0dHJpYnV0ZXMsIENWUGl4ZWxCdWZm
ZXJSZWYgKiBwaXhlbEJ1ZmZlck91dCksIChhbGxvY2F0b3IsIHN1cmZhY2UsIHBpeGVsQnVmZmVy
QXR0cmlidXRlcywgcGl4ZWxCdWZmZXJPdXQpKQorI2RlZmluZSBDVlBpeGVsQnVmZmVyQ3JlYXRl
V2l0aElPU3VyZmFjZSBzb2Z0TGlua19Db3JlVmlkZW9fQ1ZQaXhlbEJ1ZmZlckNyZWF0ZVdpdGhJ
T1N1cmZhY2UKKwogI2VuZGlmIC8vIEhBVkUoQ09SRV9WSURFTykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvVG9vbGJveFNvZnRMaW5rLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvVG9vbGJveFNvZnRMaW5rLmNwcAppbmRleCA5
ODdmYmNmNjE5NjZkMjRjZjA1Y2EwODQ2OTlkMDU4MGEyZjExMWRmLi5lYWY3OGI0NWQwNTI4N2E3
OTZlNmEyYTA1Y2QwZThmMGE4OTk0ZDNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jb2NvYS9WaWRlb1Rvb2xib3hTb2Z0TGluay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY29jb2EvVmlkZW9Ub29sYm94U29mdExpbmsuY3BwCkBAIC01OSw2ICs1OSw5IEBA
IFNPRlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNFKFdlYkNvcmUsIFZpZGVvVG9vbGJveCwgVlRQ
aXhlbFRyYW5zZmVyU2Vzc2lvblRyYW5zCiBTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX1NPVVJDRShX
ZWJDb3JlLCBWaWRlb1Rvb2xib3gsIFZUU2Vzc2lvblNldFByb3BlcnR5LCBPU1N0YXR1cywgKFZU
U2Vzc2lvblJlZiBzZXNzaW9uLCBDRlN0cmluZ1JlZiBwcm9wZXJ0eUtleSwgQ0ZUeXBlUmVmIHBy
b3BlcnR5VmFsdWUpLCAoc2Vzc2lvbiwgcHJvcGVydHlLZXksIHByb3BlcnR5VmFsdWUpKQogU09G
VF9MSU5LX0NPTlNUQU5UX0ZPUl9TT1VSQ0UoV2ViQ29yZSwgVmlkZW9Ub29sYm94LCBrVlRQaXhl
bFRyYW5zZmVyUHJvcGVydHlLZXlfU2NhbGluZ01vZGUsIENGU3RyaW5nUmVmKQogU09GVF9MSU5L
X0NPTlNUQU5UX0ZPUl9TT1VSQ0UoV2ViQ29yZSwgVmlkZW9Ub29sYm94LCBrVlRTY2FsaW5nTW9k
ZV9UcmltLCBDRlN0cmluZ1JlZikKK1NPRlRfTElOS19DT05TVEFOVF9GT1JfU09VUkNFKFdlYkNv
cmUsIFZpZGVvVG9vbGJveCwga1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5S2V5X0VuYWJsZUhhcmR3
YXJlQWNjZWxlcmF0ZWRUcmFuc2ZlciwgQ0ZTdHJpbmdSZWYpCitTT0ZUX0xJTktfQ09OU1RBTlRf
Rk9SX1NPVVJDRShXZWJDb3JlLCBWaWRlb1Rvb2xib3gsIGtWVFBpeGVsVHJhbnNmZXJQcm9wZXJ0
eUtleV9FbmFibGVIaWdoU3BlZWRUcmFuc2ZlciwgQ0ZTdHJpbmdSZWYpCitTT0ZUX0xJTktfQ09O
U1RBTlRfRk9SX1NPVVJDRShXZWJDb3JlLCBWaWRlb1Rvb2xib3gsIGtWVFBpeGVsVHJhbnNmZXJQ
cm9wZXJ0eUtleV9SZWFsVGltZSwgQ0ZTdHJpbmdSZWYpCiAKIFNPRlRfTElOS19DT05TVEFOVF9N
QVlfRkFJTF9GT1JfU09VUkNFKFdlYkNvcmUsIFZpZGVvVG9vbGJveCwga1ZUSEVWQ0RlY29kZXJD
YXBhYmlsaXR5X1N1cHBvcnRlZFByb2ZpbGVzLCBDRlN0cmluZ1JlZikKIFNPRlRfTElOS19DT05T
VEFOVF9NQVlfRkFJTF9GT1JfU09VUkNFKFdlYkNvcmUsIFZpZGVvVG9vbGJveCwga1ZUSEVWQ0Rl
Y29kZXJDYXBhYmlsaXR5X1BlclByb2ZpbGVTdXBwb3J0LCBDRlN0cmluZ1JlZikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvVG9vbGJveFNvZnRMaW5rLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9WaWRlb1Rvb2xib3hTb2Z0TGluay5oCmlu
ZGV4IGYzMTliMTg4ZWQxNjA1ODA5NDc2MTJlYjM3Mjg2ZGUyMjMyNGUyNWQuLjA3MWI3MTFlZDA0
ZDNiODE0ODIyODkyYTE1MGQ3YWU1ZmRlNmY4NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NvY29hL1ZpZGVvVG9vbGJveFNvZnRMaW5rLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY29jb2EvVmlkZW9Ub29sYm94U29mdExpbmsuaApAQCAtODUsNiArODUsMTIg
QEAgU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9IRUFERVIoV2ViQ29yZSwgVmlkZW9Ub29sYm94LCBr
VlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXkKICNkZWZpbmUga1ZUUGl4ZWxUcmFuc2ZlclByb3Bl
cnR5S2V5X1NjYWxpbmdNb2RlIGdldF9WaWRlb1Rvb2xib3hfa1ZUUGl4ZWxUcmFuc2ZlclByb3Bl
cnR5S2V5X1NjYWxpbmdNb2RlKCkKIFNPRlRfTElOS19DT05TVEFOVF9GT1JfSEVBREVSKFdlYkNv
cmUsIFZpZGVvVG9vbGJveCwga1ZUU2NhbGluZ01vZGVfVHJpbSwgQ0ZTdHJpbmdSZWYpCiAjZGVm
aW5lIGtWVFNjYWxpbmdNb2RlX1RyaW0gZ2V0X1ZpZGVvVG9vbGJveF9rVlRTY2FsaW5nTW9kZV9U
cmltKCkKK1NPRlRfTElOS19DT05TVEFOVF9GT1JfSEVBREVSKFdlYkNvcmUsIFZpZGVvVG9vbGJv
eCwga1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5S2V5X0VuYWJsZUhhcmR3YXJlQWNjZWxlcmF0ZWRU
cmFuc2ZlciwgQ0ZTdHJpbmdSZWYpCisjZGVmaW5lIGtWVFBpeGVsVHJhbnNmZXJQcm9wZXJ0eUtl
eV9FbmFibGVIYXJkd2FyZUFjY2VsZXJhdGVkVHJhbnNmZXIgZ2V0X1ZpZGVvVG9vbGJveF9rVlRQ
aXhlbFRyYW5zZmVyUHJvcGVydHlLZXlfRW5hYmxlSGFyZHdhcmVBY2NlbGVyYXRlZFRyYW5zZmVy
KCkKK1NPRlRfTElOS19DT05TVEFOVF9GT1JfSEVBREVSKFdlYkNvcmUsIFZpZGVvVG9vbGJveCwg
a1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5S2V5X0VuYWJsZUhpZ2hTcGVlZFRyYW5zZmVyLCBDRlN0
cmluZ1JlZikKKyNkZWZpbmUga1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5S2V5X0VuYWJsZUhpZ2hT
cGVlZFRyYW5zZmVyIGdldF9WaWRlb1Rvb2xib3hfa1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5S2V5
X0VuYWJsZUhpZ2hTcGVlZFRyYW5zZmVyKCkKK1NPRlRfTElOS19DT05TVEFOVF9GT1JfSEVBREVS
KFdlYkNvcmUsIFZpZGVvVG9vbGJveCwga1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5S2V5X1JlYWxU
aW1lLCBDRlN0cmluZ1JlZikKKyNkZWZpbmUga1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5S2V5X1Jl
YWxUaW1lIGdldF9WaWRlb1Rvb2xib3hfa1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5S2V5X1JlYWxU
aW1lKCkKIAogU09GVF9MSU5LX0NPTlNUQU5UX01BWV9GQUlMX0ZPUl9IRUFERVIoV2ViQ29yZSwg
VmlkZW9Ub29sYm94LCBrVlRIRVZDRGVjb2RlckNhcGFiaWxpdHlfU3VwcG9ydGVkUHJvZmlsZXMs
IENGU3RyaW5nUmVmKQogI2RlZmluZSBrVlRIRVZDRGVjb2RlckNhcGFiaWxpdHlfU3VwcG9ydGVk
UHJvZmlsZXMgZ2V0X1ZpZGVvVG9vbGJveF9rVlRIRVZDRGVjb2RlckNhcGFiaWxpdHlfU3VwcG9y
dGVkUHJvZmlsZXMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpDLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMu
aAppbmRleCBkNWE4MDZkZmUzM2U5N2MwYzFmMjhkMjExMGRmNTg4Zjk1NjgyNmFjLi4wOTIzODgz
ZTViYzdlNDQ2NGIxMTZiOTJiYmZkMDhhNmUyNjNhNzJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9i
akMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
b2JqYy9NZWRpYVNhbXBsZUFWRk9iakMuaApAQCAtMzEsMTMgKzMxLDEyIEBACiAjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAorCiBjbGFzcyBNZWRp
YVNhbXBsZUFWRk9iakMgOiBwdWJsaWMgTWVkaWFTYW1wbGUgewogcHVibGljOgogICAgIHN0YXRp
YyBSZWY8TWVkaWFTYW1wbGVBVkZPYmpDPiBjcmVhdGUoQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxl
LCBpbnQgdHJhY2tJRCkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBNZWRpYVNhbXBsZUFWRk9iakMo
c2FtcGxlLCB0cmFja0lEKSk7IH0KICAgICBzdGF0aWMgUmVmPE1lZGlhU2FtcGxlQVZGT2JqQz4g
Y3JlYXRlKENNU2FtcGxlQnVmZmVyUmVmIHNhbXBsZSwgQXRvbWljU3RyaW5nIHRyYWNrSUQpIHsg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgTWVkaWFTYW1wbGVBVkZPYmpDKHNhbXBsZSwgdHJhY2tJRCkp
OyB9CiAgICAgc3RhdGljIFJlZjxNZWRpYVNhbXBsZUFWRk9iakM+IGNyZWF0ZShDTVNhbXBsZUJ1
ZmZlclJlZiBzYW1wbGUsIFZpZGVvUm90YXRpb24gcm90YXRpb24gPSBWaWRlb1JvdGF0aW9uOjpO
b25lLCBib29sIG1pcnJvcmVkID0gZmFsc2UpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTWVkaWFT
YW1wbGVBVkZPYmpDKHNhbXBsZSwgcm90YXRpb24sIG1pcnJvcmVkKSk7IH0KLSAgICBzdGF0aWMg
UmVmUHRyPE1lZGlhU2FtcGxlQVZGT2JqQz4gY3JlYXRlSW1hZ2VTYW1wbGUoUmVmPEpTQzo6VWlu
dDhDbGFtcGVkQXJyYXk+JiYsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVp
Z2h0KTsKICAgICBzdGF0aWMgUmVmUHRyPE1lZGlhU2FtcGxlQVZGT2JqQz4gY3JlYXRlSW1hZ2VT
YW1wbGUoVmVjdG9yPHVpbnQ4X3Q+JiYsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxv
bmcgaGVpZ2h0KTsKIAogICAgIFJlZlB0cjxKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRSR0JB
SW1hZ2VEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC02NSw2ICs2NCw3IEBAIHB1YmxpYzoKIAog
ICAgIFZpZGVvUm90YXRpb24gdmlkZW9Sb3RhdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IG1fcm90YXRpb247IH0KICAgICBib29sIHZpZGVvTWlycm9yZWQoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBtX21pcnJvcmVkOyB9CisgICAgdWludDMyX3QgdmlkZW9QaXhlbEZvcm1hdCgpIGNv
bnN0OwogCiAgICAgQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlQnVmZmVyKCkgY29uc3QgeyByZXR1
cm4gbV9zYW1wbGUuZ2V0KCk7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpDLm1tIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1w
bGVBVkZPYmpDLm1tCmluZGV4IGMzYmNhNjEwOTA1NTRmODI4Yjg0ODM5YWQ0MDU0OWE2MjdiZmU3
NDAuLjY3YmI0YzZkZmUzMzA0OWRiZTE5MjI4YjUwZjdjYTg3NjcxNGM3ZWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlh
U2FtcGxlQVZGT2JqQy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMubW0KQEAgLTExMyw2ICsxMTMsMTIg
QEAgUGxhdGZvcm1TYW1wbGUgTWVkaWFTYW1wbGVBVkZPYmpDOjpwbGF0Zm9ybVNhbXBsZSgpCiAg
ICAgcmV0dXJuIHNhbXBsZTsKIH0KIAordWludDMyX3QgTWVkaWFTYW1wbGVBVkZPYmpDOjp2aWRl
b1BpeGVsRm9ybWF0KCkgY29uc3QKK3sKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gc3RhdGljX2Nh
c3Q8Q1ZQaXhlbEJ1ZmZlclJlZj4oQ01TYW1wbGVCdWZmZXJHZXRJbWFnZUJ1ZmZlcihtX3NhbXBs
ZS5nZXQoKSkpOworICAgIHJldHVybiBDVlBpeGVsQnVmZmVyR2V0UGl4ZWxGb3JtYXRUeXBlKHBp
eGVsQnVmZmVyKTsKK30KKwogc3RhdGljIGJvb2wgQ01TYW1wbGVCdWZmZXJJc1JhbmRvbUFjY2Vz
cyhDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGUpCiB7CiAgICAgQ0ZBcnJheVJlZiBhdHRhY2htZW50
cyA9IENNU2FtcGxlQnVmZmVyR2V0U2FtcGxlQXR0YWNobWVudHNBcnJheShzYW1wbGUsIGZhbHNl
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0ltYWdl
VHJhbnNmZXJTZXNzaW9uVlQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2
L0ltYWdlVHJhbnNmZXJTZXNzaW9uVlQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ODE0M2JlNDdlYjBiZTAxYmNh
MzA4MGNhZWFjY2Y0ZDkwMzdiMTFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY3YvSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5oCkBAIC0wLDAgKzEs
ODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShWSURFT1RPT0xCT1gp
CisKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiTWVkaWFTYW1wbGVBVkZPYmpjLmgi
CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCit0eXBlZGVmIHN0cnVjdCBDR0ltYWdlICpD
R0ltYWdlUmVmOwordHlwZWRlZiBzdHJ1Y3QgT3BhcXVlVlRQaXhlbFRyYW5zZmVyU2Vzc2lvbiog
VlRQaXhlbFRyYW5zZmVyU2Vzc2lvblJlZjsKK3R5cGVkZWYgc3RydWN0IF9fQ1ZCdWZmZXIgKkNW
UGl4ZWxCdWZmZXJSZWY7Cit0eXBlZGVmIHN0cnVjdCBfX0NWUGl4ZWxCdWZmZXJQb29sICpDVlBp
eGVsQnVmZmVyUG9vbFJlZjsKK3R5cGVkZWYgc3RydWN0IF9fSU9TdXJmYWNlICpJT1N1cmZhY2VS
ZWY7Cit0eXBlZGVmIHN0cnVjdCBvcGFxdWVDTVNhbXBsZUJ1ZmZlciAqQ01TYW1wbGVCdWZmZXJS
ZWY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VUcmFuc2ZlclNlc3Npb25W
VCB7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZVRyYW5zZmVyU2Vz
c2lvblZUPiBjcmVhdGUodWludDMyX3QgcGl4ZWxGb3JtYXQpCisgICAgeworICAgICAgICByZXR1
cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ+KG5ldyBJbWFnZVRyYW5z
ZmVyU2Vzc2lvblZUKHBpeGVsRm9ybWF0KSk7CisgICAgfQorCisgICAgUmVmUHRyPE1lZGlhU2Ft
cGxlPiBjb252ZXJ0TWVkaWFTYW1wbGUoTWVkaWFTYW1wbGUmLCBjb25zdCBJbnRTaXplJik7Cisg
ICAgUmVmUHRyPE1lZGlhU2FtcGxlPiBjcmVhdGVNZWRpYVNhbXBsZShDR0ltYWdlUmVmLCBjb25z
dCBNZWRpYVRpbWUmLCBjb25zdCBJbnRTaXplJiwgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb24g
cm90YXRpb24gPSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6Tm9uZSwgYm9vbCBtaXJyb3Jl
ZCA9IGZhbHNlKTsKKyAgICBSZWZQdHI8TWVkaWFTYW1wbGU+IGNyZWF0ZU1lZGlhU2FtcGxlKENN
U2FtcGxlQnVmZmVyUmVmLCBjb25zdCBJbnRTaXplJiwgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRp
b24gcm90YXRpb24gPSBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6Tm9uZSwgYm9vbCBtaXJy
b3JlZCA9IGZhbHNlKTsKKworI2lmIEhBVkUoSU9TVVJGQUNFKQorICAgIFJlZlB0cjxNZWRpYVNh
bXBsZT4gY3JlYXRlTWVkaWFTYW1wbGUoSU9TdXJmYWNlUmVmLCBjb25zdCBNZWRpYVRpbWUmLCBj
b25zdCBJbnRTaXplJiwgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb24gcm90YXRpb24gPSBNZWRp
YVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6Tm9uZSwgYm9vbCBtaXJyb3JlZCA9IGZhbHNlKTsKKyNl
bmRpZgorCitwcml2YXRlOgorICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlVHJhbnNmZXJTZXNzaW9u
VlQodWludDMyX3QpOworCisjaWYgSEFWRShJT1NVUkZBQ0UpCisgICAgQ0ZEaWN0aW9uYXJ5UmVm
IGlvU3VyZmFjZVBpeGVsQnVmZmVyQ3JlYXRpb25PcHRpb25zKElPU3VyZmFjZVJlZik7CisgICAg
UmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBjcmVhdGVDTVNhbXBsZUJ1ZmZlcihJT1N1cmZh
Y2VSZWYsIGNvbnN0IE1lZGlhVGltZSYsIGNvbnN0IEludFNpemUmKTsKKyAgICBSZXRhaW5QdHI8
Q1ZQaXhlbEJ1ZmZlclJlZj4gY3JlYXRlUGl4ZWxCdWZmZXIoSU9TdXJmYWNlUmVmLCBjb25zdCBJ
bnRTaXplJik7CisjZW5kaWYKKworICAgIFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4gY29u
dmVydENNU2FtcGxlQnVmZmVyKENNU2FtcGxlQnVmZmVyUmVmLCBjb25zdCBJbnRTaXplJik7Cisg
ICAgUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBjcmVhdGVDTVNhbXBsZUJ1ZmZlcihDVlBp
eGVsQnVmZmVyUmVmLCBjb25zdCBNZWRpYVRpbWUmLCBjb25zdCBJbnRTaXplJik7CisgICAgUmV0
YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBjcmVhdGVDTVNhbXBsZUJ1ZmZlcihDR0ltYWdlUmVm
LCBjb25zdCBNZWRpYVRpbWUmLCBjb25zdCBJbnRTaXplJik7CisKKyAgICBSZXRhaW5QdHI8Q1ZQ
aXhlbEJ1ZmZlclJlZj4gY29udmVydFBpeGVsQnVmZmVyKENWUGl4ZWxCdWZmZXJSZWYsIGNvbnN0
IEludFNpemUmKTsKKyAgICBSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gY3JlYXRlUGl4ZWxC
dWZmZXIoQ01TYW1wbGVCdWZmZXJSZWYsIGNvbnN0IEludFNpemUmKTsKKyAgICBSZXRhaW5QdHI8
Q1ZQaXhlbEJ1ZmZlclJlZj4gY3JlYXRlUGl4ZWxCdWZmZXIoQ0dJbWFnZVJlZiwgY29uc3QgSW50
U2l6ZSYpOworCisgICAgYm9vbCBzZXRTaXplKGNvbnN0IEludFNpemUmKTsKKworICAgIFJldGFp
blB0cjxWVFBpeGVsVHJhbnNmZXJTZXNzaW9uUmVmPiBtX3RyYW5zZmVyU2Vzc2lvbjsKKyAgICBS
ZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclBvb2xSZWY+IG1fb3V0cHV0QnVmZmVyUG9vbDsKKyAgICBS
ZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBtX2lvU3VyZmFjZUJ1ZmZlckF0dHJpYnV0ZXM7Cisg
ICAgdWludDMyX3QgbV9waXhlbEZvcm1hdDsKKyAgICBJbnRTaXplIG1fc2l6ZTsKK307CisKK30K
KworI2VuZGlmIC8vIFVTRShWSURFT1RPT0xCT1gpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9JbWFnZVRyYW5zZmVyU2Vzc2lvblZULm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5tbQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5hYTdmY2NlNjNmYzE2ODEwNzM0MDJkMGY1MmUyNDc1NWFiOWE4MDhmCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvSW1hZ2VU
cmFuc2ZlclNlc3Npb25WVC5tbQpAQCAtMCwwICsxLDM4MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1w
b3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkltYWdlVHJhbnNmZXJTZXNzaW9uVlQuaCIKKworI2lm
IFVTRShWSURFT1RPT0xCT1gpCisKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIk1lZGlh
U2FtcGxlQVZGT2JqQy5oIgorI2ltcG9ydCA8Q29yZU1lZGlhL0NNRm9ybWF0RGVzY3JpcHRpb24u
aD4KKyNpbXBvcnQgPENvcmVNZWRpYS9DTVNhbXBsZUJ1ZmZlci5oPgorI2ltcG9ydCA8cGFsL2Nm
L0NvcmVNZWRpYVNvZnRMaW5rLmg+CisKKyNpZiBIQVZFKElPU1VSRkFDRSkKKyNpbmNsdWRlIDxw
YWwvc3BpL2NvY29hL0lPU3VyZmFjZVNQSS5oPgorI2VuZGlmCisKKyNpbXBvcnQgIkNvcmVWaWRl
b1NvZnRMaW5rLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK3VzaW5nIG5hbWVzcGFjZSBQQUw7
CisKK3N0YXRpYyBpbmxpbmUgQ0ZTdHJpbmdSZWYgY3ZQaXhlbEZvcm1hdE9wZW5HTEtleSgpCit7
CisjaWYgUExBVEZPUk0oSU9TKSAmJiAhUExBVEZPUk0oSU9TTUFDKQorICAgIHJldHVybiBrQ1ZQ
aXhlbEZvcm1hdE9wZW5HTEVTQ29tcGF0aWJpbGl0eTsKKyNlbHNlCisgICAgcmV0dXJuIGtDVlBp
eGVsQnVmZmVyT3BlbkdMQ29tcGF0aWJpbGl0eUtleTsKKyNlbmRpZgorfQorCitJbWFnZVRyYW5z
ZmVyU2Vzc2lvblZUOjpJbWFnZVRyYW5zZmVyU2Vzc2lvblZUKHVpbnQzMl90IHBpeGVsRm9ybWF0
KQoreworICAgIFZUUGl4ZWxUcmFuc2ZlclNlc3Npb25SZWYgdHJhbnNmZXJTZXNzaW9uOworICAg
IFZUUGl4ZWxUcmFuc2ZlclNlc3Npb25DcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgJnRyYW5z
ZmVyU2Vzc2lvbik7CisgICAgQVNTRVJUKHRyYW5zZmVyU2Vzc2lvbik7CisgICAgbV90cmFuc2Zl
clNlc3Npb24gPSBhZG9wdENGKHRyYW5zZmVyU2Vzc2lvbik7CisKKyAgICBWVFNlc3Npb25TZXRQ
cm9wZXJ0eSh0cmFuc2ZlclNlc3Npb24sIGtWVFBpeGVsVHJhbnNmZXJQcm9wZXJ0eUtleV9TY2Fs
aW5nTW9kZSwga1ZUU2NhbGluZ01vZGVfVHJpbSk7CisgICAgVlRTZXNzaW9uU2V0UHJvcGVydHko
dHJhbnNmZXJTZXNzaW9uLCBrVlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXlfRW5hYmxlSGlnaFNw
ZWVkVHJhbnNmZXIsIEAoWUVTKSk7CisgICAgVlRTZXNzaW9uU2V0UHJvcGVydHkodHJhbnNmZXJT
ZXNzaW9uLCBrVlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXlfUmVhbFRpbWUsIEAoWUVTKSk7Cisj
aWYgUExBVEZPUk0oSU9TKSAmJiAhUExBVEZPUk0oSU9TTUFDKQorICAgIFZUU2Vzc2lvblNldFBy
b3BlcnR5KHRyYW5zZmVyU2Vzc2lvbiwga1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5S2V5X0VuYWJs
ZUhhcmR3YXJlQWNjZWxlcmF0ZWRUcmFuc2ZlciwgQChZRVMpKTsKKyNlbmRpZgorCisgICAgbV9w
aXhlbEZvcm1hdCA9IHBpeGVsRm9ybWF0OworfQorCitib29sIEltYWdlVHJhbnNmZXJTZXNzaW9u
VlQ6OnNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAobV9zaXplID09IHNp
emUgJiYgbV9vdXRwdXRCdWZmZXJQb29sKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIENG
RGljdGlvbmFyeVJlZiBwaXhlbEJ1ZmZlck9wdGlvbnMgPSAoX19icmlkZ2UgQ0ZEaWN0aW9uYXJ5
UmVmKSBAeworICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ1ZQaXhlbEJ1ZmZlcldpZHRo
S2V5IDpAKHNpemUud2lkdGgoKSksCisgICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBp
eGVsQnVmZmVySGVpZ2h0S2V5OkAoc2l6ZS5oZWlnaHQoKSksCisgICAgICAgIChfX2JyaWRnZSBO
U1N0cmluZyAqKWtDVlBpeGVsQnVmZmVyUGl4ZWxGb3JtYXRUeXBlS2V5OkAobV9waXhlbEZvcm1h
dCksCisgICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWN2UGl4ZWxGb3JtYXRPcGVuR0xLZXko
KSA6IEAoWUVTKSwKKyAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxCdWZmZXJJ
T1N1cmZhY2VQcm9wZXJ0aWVzS2V5IDogQHsgLyplbXB0eSBkaWN0aW9uYXJ5Ki8gfSwKKyAgICB9
OworCisgICAgQ0ZEaWN0aW9uYXJ5UmVmIHBpeGVsQnVmZmVyUG9vbE9wdGlvbnMgPSAoX19icmlk
Z2UgQ0ZEaWN0aW9uYXJ5UmVmKSBAeworICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ1ZQ
aXhlbEJ1ZmZlclBvb2xNaW5pbXVtQnVmZmVyQ291bnRLZXkgOiBAKDYpCisgICAgfTsKKworICAg
IENWUGl4ZWxCdWZmZXJQb29sUmVmIGJ1ZmZlclBvb2w7CisgICAgYXV0byBzdGF0dXMgPSBDVlBp
eGVsQnVmZmVyUG9vbENyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBwaXhlbEJ1ZmZlclBvb2xP
cHRpb25zLCBwaXhlbEJ1ZmZlck9wdGlvbnMsICZidWZmZXJQb29sKTsKKyAgICBBU1NFUlQoIXN0
YXR1cyk7CisgICAgaWYgKHN0YXR1cyAhPSBrQ1ZSZXR1cm5TdWNjZXNzKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBtX291dHB1dEJ1ZmZlclBvb2wgPSBhZG9wdENGKGJ1ZmZlclBvb2wp
OworICAgIG1fc2l6ZSA9IHNpemU7CisgICAgbV9pb1N1cmZhY2VCdWZmZXJBdHRyaWJ1dGVzID0g
bnVsbHB0cjsKKworICAgIHJldHVybiB0cnVlOworfQorCitSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZl
clJlZj4gSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y29udmVydFBpeGVsQnVmZmVyKENWUGl4ZWxC
dWZmZXJSZWYgc291cmNlQnVmZmVyLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIGlmIChz
b3VyY2VCdWZmZXIgJiYgbV9zaXplID09IEludFNpemUoQ1ZQaXhlbEJ1ZmZlckdldFdpZHRoKHNv
dXJjZUJ1ZmZlciksIENWUGl4ZWxCdWZmZXJHZXRIZWlnaHQoc291cmNlQnVmZmVyKSkgJiYgbV9w
aXhlbEZvcm1hdCA9PSBDVlBpeGVsQnVmZmVyR2V0UGl4ZWxGb3JtYXRUeXBlKHNvdXJjZUJ1ZmZl
cikpCisgICAgICAgIHJldHVybiByZXRhaW5QdHIoc291cmNlQnVmZmVyKTsKKworICAgIGlmICgh
c291cmNlQnVmZmVyIHx8ICFzZXRTaXplKHNpemUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIENWUGl4ZWxCdWZmZXJSZWYgb3V0cHV0QnVmZmVyID0gbnVsbHB0cjsKKyAgICBhdXRv
IHN0YXR1cyA9IENWUGl4ZWxCdWZmZXJQb29sQ3JlYXRlUGl4ZWxCdWZmZXIoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgbV9vdXRwdXRCdWZmZXJQb29sLmdldCgpLCAmb3V0cHV0QnVmZmVyKTsKKyAgICBp
ZiAoc3RhdHVzKSB7CisgICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhLCAiSW1hZ2VUcmFuc2ZlclNl
c3Npb25WVDo6Y29udmVydFBpeGVsQnVmZmVyLCBDVlBpeGVsQnVmZmVyUG9vbENyZWF0ZVBpeGVs
QnVmZmVyIGZhaWxlZCB3aXRoIGVycm9yICVkIiwgc3RhdGljX2Nhc3Q8aW50PihzdGF0dXMpKTsK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIGF1dG8gcmVzdWx0ID0gYWRvcHRD
RihvdXRwdXRCdWZmZXIpOworCisgICAgYXV0byBlcnIgPSBWVFBpeGVsVHJhbnNmZXJTZXNzaW9u
VHJhbnNmZXJJbWFnZShtX3RyYW5zZmVyU2Vzc2lvbi5nZXQoKSwgc291cmNlQnVmZmVyLCBvdXRw
dXRCdWZmZXIpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgUkVMRUFTRV9MT0coTWVkaWEsICJJ
bWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjb252ZXJ0UGl4ZWxCdWZmZXIsIFZUUGl4ZWxUcmFuc2Zl
clNlc3Npb25UcmFuc2ZlckltYWdlIGZhaWxlZCB3aXRoIGVycm9yICVkIiwgc3RhdGljX2Nhc3Q8
aW50PihlcnIpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJSZWY+IEltYWdlVHJhbnNmZXJT
ZXNzaW9uVlQ6OmNyZWF0ZVBpeGVsQnVmZmVyKENNU2FtcGxlQnVmZmVyUmVmIHNvdXJjZUJ1ZmZl
ciwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBhdXRvIGNvbnZlcnRlZFBpeGVsQnVmZmVy
ID0gY29udmVydFBpeGVsQnVmZmVyKENNU2FtcGxlQnVmZmVyR2V0SW1hZ2VCdWZmZXIoc291cmNl
QnVmZmVyKSwgc2l6ZSk7CisgICAgaWYgKCFjb252ZXJ0ZWRQaXhlbEJ1ZmZlcikKKyAgICAgICAg
UkVMRUFTRV9MT0coTWVkaWEsICJJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVhdGVQaXhlbEJ1
ZmZlcjogQ01TYW1wbGVCdWZmZXJHZXRJbWFnZUJ1ZmZlciByZXR1cm5lZCBudWxscHRyIik7CisK
KyAgICByZXR1cm4gY29udmVydGVkUGl4ZWxCdWZmZXI7Cit9CisKK1JldGFpblB0cjxDTVNhbXBs
ZUJ1ZmZlclJlZj4gSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y29udmVydENNU2FtcGxlQnVmZmVy
KENNU2FtcGxlQnVmZmVyUmVmIHNvdXJjZUJ1ZmZlciwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sK
KyAgICBpZiAoIXNvdXJjZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBh
dXRvIGRlc2NyaXB0aW9uID0gQ01TYW1wbGVCdWZmZXJHZXRGb3JtYXREZXNjcmlwdGlvbihzb3Vy
Y2VCdWZmZXIpOworICAgIGF1dG8gc291cmNlU2l6ZSA9IEZsb2F0U2l6ZShDTVZpZGVvRm9ybWF0
RGVzY3JpcHRpb25HZXRQcmVzZW50YXRpb25EaW1lbnNpb25zKGRlc2NyaXB0aW9uLCB0cnVlLCB0
cnVlKSk7CisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IHN0YXRpY19jYXN0PENWUGl4ZWxCdWZmZXJS
ZWY+KENNU2FtcGxlQnVmZmVyR2V0SW1hZ2VCdWZmZXIoc291cmNlQnVmZmVyKSk7CisgICAgaWYg
KHNpemUgPT0gcm91bmRlZEludFNpemUoc291cmNlU2l6ZSkgJiYgbV9waXhlbEZvcm1hdCA9PSBD
VlBpeGVsQnVmZmVyR2V0UGl4ZWxGb3JtYXRUeXBlKHBpeGVsQnVmZmVyKSkKKyAgICAgICAgcmV0
dXJuIHJldGFpblB0cihzb3VyY2VCdWZmZXIpOworCisgICAgaWYgKCFzZXRTaXplKHNpemUpKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gY29udmVydGVkUGl4ZWxCdWZmZXIg
PSBjcmVhdGVQaXhlbEJ1ZmZlcihzb3VyY2VCdWZmZXIsIHNpemUpOworICAgIGlmICghY29udmVy
dGVkUGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQ01JdGVtQ291
bnQgaXRlbUNvdW50ID0gMDsKKyAgICBhdXRvIHN0YXR1cyA9IENNU2FtcGxlQnVmZmVyR2V0U2Ft
cGxlVGltaW5nSW5mb0FycmF5KHNvdXJjZUJ1ZmZlciwgMSwgbnVsbHB0ciwgJml0ZW1Db3VudCk7
CisgICAgaWYgKHN0YXR1cyAhPSBub0VycikgeworICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwg
IkltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNvbnZlcnRDTVNhbXBsZUJ1ZmZlcjogQ01TYW1wbGVC
dWZmZXJHZXRTYW1wbGVUaW1pbmdJbmZvQXJyYXkgZmFpbGVkIHdpdGggZXJyb3IgY29kZTogJWQi
LCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICB9CisgICAgVmVjdG9yPENNU2FtcGxlVGltaW5nSW5mbz4gdGltaW5nSW5mb0FycmF5OworICAg
IENNU2FtcGxlVGltaW5nSW5mbyogdGltZWluZ0luZm9QdHIgPSBudWxscHRyOworICAgIGlmIChp
dGVtQ291bnQpIHsKKyAgICAgICAgdGltaW5nSW5mb0FycmF5Lmdyb3coaXRlbUNvdW50KTsKKyAg
ICAgICAgc3RhdHVzID0gQ01TYW1wbGVCdWZmZXJHZXRTYW1wbGVUaW1pbmdJbmZvQXJyYXkoc291
cmNlQnVmZmVyLCBpdGVtQ291bnQsIHRpbWluZ0luZm9BcnJheS5kYXRhKCksIG51bGxwdHIpOwor
ICAgICAgICBpZiAoc3RhdHVzICE9IG5vRXJyKSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPRyhN
ZWRpYSwgIkltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNvbnZlcnRDTVNhbXBsZUJ1ZmZlcjogQ01T
YW1wbGVCdWZmZXJHZXRTYW1wbGVUaW1pbmdJbmZvQXJyYXkgZmFpbGVkIHdpdGggZXJyb3IgY29k
ZTogJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOworICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgdGltZWluZ0luZm9QdHIgPSB0aW1pbmdJbmZvQXJy
YXkuZGF0YSgpOworICAgIH0KKworICAgIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvblJlZiBmb3Jt
YXREZXNjcmlwdGlvbiA9IG51bGxwdHI7CisgICAgc3RhdHVzID0gQ01WaWRlb0Zvcm1hdERlc2Ny
aXB0aW9uQ3JlYXRlRm9ySW1hZ2VCdWZmZXIoa0NGQWxsb2NhdG9yRGVmYXVsdCwgY29udmVydGVk
UGl4ZWxCdWZmZXIuZ2V0KCksICZmb3JtYXREZXNjcmlwdGlvbik7CisgICAgaWYgKHN0YXR1cyAh
PSBub0VycikgeworICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIkltYWdlVHJhbnNmZXJTZXNz
aW9uVlQ6OmNvbnZlcnRDTVNhbXBsZUJ1ZmZlcjogQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uQ3Jl
YXRlRm9ySW1hZ2VCdWZmZXIgcmV0dXJuZWQ6ICVkIiwgc3RhdGljX2Nhc3Q8aW50PihzdGF0dXMp
KTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgQ01TYW1wbGVCdWZmZXJS
ZWYgcmVzaXplZFNhbXBsZUJ1ZmZlcjsKKyAgICBzdGF0dXMgPSBDTVNhbXBsZUJ1ZmZlckNyZWF0
ZVJlYWR5V2l0aEltYWdlQnVmZmVyKGtDRkFsbG9jYXRvckRlZmF1bHQsIGNvbnZlcnRlZFBpeGVs
QnVmZmVyLmdldCgpLCBmb3JtYXREZXNjcmlwdGlvbiwgdGltZWluZ0luZm9QdHIsICZyZXNpemVk
U2FtcGxlQnVmZmVyKTsKKyAgICBDRlJlbGVhc2UoZm9ybWF0RGVzY3JpcHRpb24pOworICAgIGlm
IChzdGF0dXMgIT0gbm9FcnIpIHsKKyAgICAgICAgUkVMRUFTRV9MT0coTWVkaWEsICJJbWFnZVRy
YW5zZmVyU2Vzc2lvblZUOjpjb252ZXJ0Q01TYW1wbGVCdWZmZXI6IGZhaWxlZCB0byBjcmVhdGUg
Q01TYW1wbGVCdWZmZXIgd2l0aCBlcnJvciBjb2RlOiAlZCIsIHN0YXRpY19jYXN0PGludD4oc3Rh
dHVzKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHJldHVybiBhZG9w
dENGKHJlc2l6ZWRTYW1wbGVCdWZmZXIpOworfQorCitSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJl
Zj4gSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlUGl4ZWxCdWZmZXIoQ0dJbWFnZVJlZiBp
bWFnZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAoIWltYWdlIHx8ICFzZXRTaXpl
KHNpemUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIENWUGl4ZWxCdWZmZXJSZWYg
cmdiQnVmZmVyOworICAgIGF1dG8gaW1hZ2VTaXplID0gSW50U2l6ZShDR0ltYWdlR2V0V2lkdGgo
aW1hZ2UpLCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKSk7CisgICAgYXV0byBzdGF0dXMgPSBDVlBp
eGVsQnVmZmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGltYWdlU2l6ZS53aWR0aCgpLCBp
bWFnZVNpemUuaGVpZ2h0KCksIGtDVlBpeGVsRm9ybWF0VHlwZV8zMkFSR0IsIG51bGxwdHIsICZy
Z2JCdWZmZXIpOworICAgIGlmIChzdGF0dXMgIT0ga0NWUmV0dXJuU3VjY2VzcykgeworICAgICAg
ICBSRUxFQVNFX0xPRyhNZWRpYSwgIkltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNyZWF0ZVBpeGVs
QnVmZmVyOiBDVlBpeGVsQnVmZmVyQ3JlYXRlIGZhaWxlZCB3aXRoIGVycm9yIGNvZGU6ICVkIiwg
c3RhdGljX2Nhc3Q8aW50PihzdGF0dXMpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
fQorCisgICAgQ1ZQaXhlbEJ1ZmZlckxvY2tCYXNlQWRkcmVzcyhyZ2JCdWZmZXIsIDApOworICAg
IHZvaWQqIGRhdGEgPSBDVlBpeGVsQnVmZmVyR2V0QmFzZUFkZHJlc3MocmdiQnVmZmVyKTsKKyAg
ICBhdXRvIHJldGFpbmVkUkdCQnVmZmVyID0gYWRvcHRDRihyZ2JCdWZmZXIpOworICAgIGF1dG8g
Y29udGV4dCA9IENHQml0bWFwQ29udGV4dENyZWF0ZShkYXRhLCBpbWFnZVNpemUud2lkdGgoKSwg
aW1hZ2VTaXplLmhlaWdodCgpLCA4LCBDVlBpeGVsQnVmZmVyR2V0Qnl0ZXNQZXJSb3cocmdiQnVm
ZmVyKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwgKENHQml0bWFwSW5mbykga0NHSW1hZ2VBbHBoYU5v
bmVTa2lwRmlyc3QpOworICAgIGlmICghY29udGV4dCkgeworICAgICAgICBSRUxFQVNFX0xPRyhN
ZWRpYSwgIkltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNyZWF0ZVBpeGVsQnVmZmVyOiBDR0JpdG1h
cENvbnRleHRDcmVhdGUgcmV0dXJuZWQgbnVsbHB0ciIpOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9CisKKyAgICBhdXRvIHJldGFpbmVkQ29udGV4dCA9IGFkb3B0Q0YoY29udGV4dCk7
CisgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQsIENHUmVjdE1ha2UoMCwgMCwgaW1hZ2VT
aXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSksIGltYWdlKTsKKyAgICBDVlBpeGVsQnVm
ZmVyVW5sb2NrQmFzZUFkZHJlc3MocmdiQnVmZmVyLCAwKTsKKworICAgIHJldHVybiBjb252ZXJ0
UGl4ZWxCdWZmZXIocmdiQnVmZmVyLCBzaXplKTsKK30KKworUmV0YWluUHRyPENNU2FtcGxlQnVm
ZmVyUmVmPiBJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVhdGVDTVNhbXBsZUJ1ZmZlcihDVlBp
eGVsQnVmZmVyUmVmIHNvdXJjZUJ1ZmZlciwgY29uc3QgTWVkaWFUaW1lJiBzYW1wbGVUaW1lLCBj
b25zdCBJbnRTaXplJiBzaXplKQoreworICAgIGlmICghc291cmNlQnVmZmVyIHx8ICFzZXRTaXpl
KHNpemUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gYnVmZmVyU2l6ZSA9
IEludFNpemUoQ1ZQaXhlbEJ1ZmZlckdldFdpZHRoKHNvdXJjZUJ1ZmZlciksIENWUGl4ZWxCdWZm
ZXJHZXRIZWlnaHQoc291cmNlQnVmZmVyKSk7CisgICAgUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJS
ZWY+IGlucHV0QnVmZmVyID0gc291cmNlQnVmZmVyOworICAgIGlmIChidWZmZXJTaXplICE9IG1f
c2l6ZSB8fCBtX3BpeGVsRm9ybWF0ICE9IENWUGl4ZWxCdWZmZXJHZXRQaXhlbEZvcm1hdFR5cGUo
c291cmNlQnVmZmVyKSkgeworICAgICAgICBpbnB1dEJ1ZmZlciA9IGNvbnZlcnRQaXhlbEJ1ZmZl
cihzb3VyY2VCdWZmZXIsIG1fc2l6ZSk7CisgICAgICAgIGlmICghaW5wdXRCdWZmZXIpCisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBDTVZpZGVvRm9ybWF0RGVzY3Jp
cHRpb25SZWYgZm9ybWF0RGVzY3JpcHRpb24gPSBudWxscHRyOworICAgIGF1dG8gc3RhdHVzID0g
Q01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uQ3JlYXRlRm9ySW1hZ2VCdWZmZXIoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgKENWSW1hZ2VCdWZmZXJSZWYpaW5wdXRCdWZmZXIuZ2V0KCksICZmb3JtYXREZXNj
cmlwdGlvbik7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwg
IkltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNvbnZlcnRQaXhlbEJ1ZmZlcjogZmFpbGVkIHRvIGlu
aXRpYWxpemUgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uIHdpdGggZXJyb3IgY29kZTogJWQiLCBz
dGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9
CisKKyAgICBDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGVCdWZmZXI7CisgICAgYXV0byBjbVRpbWUg
PSB0b0NNVGltZShzYW1wbGVUaW1lKTsKKyAgICBDTVNhbXBsZVRpbWluZ0luZm8gdGltaW5nSW5m
byA9IHsga0NNVGltZUludmFsaWQsIGNtVGltZSwgY21UaW1lIH07CisgICAgc3RhdHVzID0gQ01T
YW1wbGVCdWZmZXJDcmVhdGVSZWFkeVdpdGhJbWFnZUJ1ZmZlcihrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCAoQ1ZJbWFnZUJ1ZmZlclJlZilpbnB1dEJ1ZmZlci5nZXQoKSwgZm9ybWF0RGVzY3JpcHRpb24s
ICZ0aW1pbmdJbmZvLCAmc2FtcGxlQnVmZmVyKTsKKyAgICBDRlJlbGVhc2UoZm9ybWF0RGVzY3Jp
cHRpb24pOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgUkVMRUFTRV9MT0coTWVkaWEsICJJ
bWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjb252ZXJ0UGl4ZWxCdWZmZXI6IGZhaWxlZCB0byBpbml0
aWFsaXplIENNU2FtcGxlQnVmZmVyIHdpdGggZXJyb3IgY29kZTogJWQiLCBzdGF0aWNfY2FzdDxp
bnQ+KHN0YXR1cykpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICByZXR1
cm4gYWRvcHRDRihzYW1wbGVCdWZmZXIpOworfQorCitSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJS
ZWY+IEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNyZWF0ZUNNU2FtcGxlQnVmZmVyKENHSW1hZ2VS
ZWYgaW1hZ2UsIGNvbnN0IE1lZGlhVGltZSYgc2FtcGxlVGltZSwgY29uc3QgSW50U2l6ZSYgc2l6
ZSkKK3sKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gY3JlYXRlUGl4ZWxCdWZmZXIoaW1hZ2UsIHNp
emUpOworICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgcmV0dXJuIGNyZWF0ZUNNU2FtcGxlQnVmZmVyKHBpeGVsQnVmZmVyLmdldCgpLCBzYW1wbGVU
aW1lLCBzaXplKTsKK30KKworI2lmIEhBVkUoSU9TVVJGQUNFKQorCisjaWYgUExBVEZPUk0oTUFD
KQorc3RhdGljIGludDMyX3Qgcm91bmRVcFRvTWFjcm9ibG9ja011bHRpcGxlKGludDMyX3Qgc2l6
ZSkKK3sKKyAgICByZXR1cm4gKHNpemUgKyAxNSkgJiB+MTU7Cit9CisjZW5kaWYKKworQ0ZEaWN0
aW9uYXJ5UmVmIEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmlvU3VyZmFjZVBpeGVsQnVmZmVyQ3Jl
YXRpb25PcHRpb25zKElPU3VyZmFjZVJlZiBzdXJmYWNlKQoreworICAgIGlmIChtX2lvU3VyZmFj
ZUJ1ZmZlckF0dHJpYnV0ZXMpCisgICAgICAgIHJldHVybiBtX2lvU3VyZmFjZUJ1ZmZlckF0dHJp
YnV0ZXMuZ2V0KCk7CisKKyAgICBtX2lvU3VyZmFjZUJ1ZmZlckF0dHJpYnV0ZXMgPSAoX19icmlk
Z2UgQ0ZEaWN0aW9uYXJ5UmVmKSBAeworICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKiljdlBp
eGVsRm9ybWF0T3BlbkdMS2V5KCkgOiBAKFlFUyksCisgICAgfTsKKworI2lmIFBMQVRGT1JNKE1B
QykKKyAgICBhdXRvIGZvcm1hdCA9IElPU3VyZmFjZUdldFBpeGVsRm9ybWF0KHN1cmZhY2UpOwor
ICAgIGF1dG8gd2lkdGggPSBJT1N1cmZhY2VHZXRXaWR0aChzdXJmYWNlKTsKKyAgICBhdXRvIGhl
aWdodCA9IElPU3VyZmFjZUdldEhlaWdodChzdXJmYWNlKTsKKyAgICBpbnQzMl90IGV4dGVuZGVk
UmlnaHQgPSByb3VuZFVwVG9NYWNyb2Jsb2NrTXVsdGlwbGUod2lkdGgpIC0gd2lkdGg7CisgICAg
aW50MzJfdCBleHRlbmRlZEJvdHRvbSA9IHJvdW5kVXBUb01hY3JvYmxvY2tNdWx0aXBsZShoZWln
aHQpIC0gaGVpZ2h0OworCisgICAgaWYgKChmb3JtYXQgPT0ga0NWUGl4ZWxGb3JtYXRUeXBlXzQy
MFlwQ2JDcjhCaVBsYW5hclZpZGVvUmFuZ2UgfHwgZm9ybWF0ID09IGtDVlBpeGVsRm9ybWF0VHlw
ZV80MjBZcENiQ3I4QmlQbGFuYXJGdWxsUmFuZ2UpCisgICAgICAgICYmIChJT1N1cmZhY2VHZXRC
eXRlc1BlclJvd09mUGxhbmUoc3VyZmFjZSwgMCkgPj0gd2lkdGggKyBleHRlbmRlZFJpZ2h0KQor
ICAgICAgICAmJiAoSU9TdXJmYWNlR2V0Qnl0ZXNQZXJSb3dPZlBsYW5lKHN1cmZhY2UsIDEpID49
IHdpZHRoICsgZXh0ZW5kZWRSaWdodCkKKyAgICAgICAgJiYgKElPU3VyZmFjZUdldEFsbG9jU2l6
ZShzdXJmYWNlKSA+PSAoaGVpZ2h0ICsgZXh0ZW5kZWRCb3R0b20pICogSU9TdXJmYWNlR2V0Qnl0
ZXNQZXJSb3dPZlBsYW5lKHN1cmZhY2UsIDApICogMyAvIDIpKSB7CisgICAgICAgICAgICBtX2lv
U3VyZmFjZUJ1ZmZlckF0dHJpYnV0ZXMgPSAoX19icmlkZ2UgQ0ZEaWN0aW9uYXJ5UmVmKSBAewor
ICAgICAgICAgICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsQnVmZmVyT3BlbkdM
Q29tcGF0aWJpbGl0eUtleSA6IEAoWUVTKSwKKyAgICAgICAgICAgICAgICAoX19icmlkZ2UgTlNT
dHJpbmcgKilrQ1ZQaXhlbEJ1ZmZlckV4dGVuZGVkUGl4ZWxzUmlnaHRLZXkgOiBAKGV4dGVuZGVk
UmlnaHQpLAorICAgICAgICAgICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsQnVm
ZmVyRXh0ZW5kZWRQaXhlbHNCb3R0b21LZXkgOiBAKGV4dGVuZGVkQm90dG9tKQorICAgICAgICAg
ICAgfTsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzdXJmYWNlKTsKKyNlbmRpZgor
CisgICAgcmV0dXJuIG1faW9TdXJmYWNlQnVmZmVyQXR0cmlidXRlcy5nZXQoKTsKK30KKworUmV0
YWluUHRyPENWUGl4ZWxCdWZmZXJSZWY+IEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNyZWF0ZVBp
eGVsQnVmZmVyKElPU3VyZmFjZVJlZiBzdXJmYWNlLCBjb25zdCBJbnRTaXplJiBzaXplKQorewor
ICAgIGlmICghc3VyZmFjZSB8fCAhc2V0U2l6ZShzaXplKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBDVlBpeGVsQnVmZmVyUmVmIHBpeGVsQnVmZmVyOworICAgIGF1dG8gc3RhdHVz
ID0gQ1ZQaXhlbEJ1ZmZlckNyZWF0ZVdpdGhJT1N1cmZhY2Uoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
c3VyZmFjZSwgaW9TdXJmYWNlUGl4ZWxCdWZmZXJDcmVhdGlvbk9wdGlvbnMoc3VyZmFjZSksICZw
aXhlbEJ1ZmZlcik7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICBSRUxFQVNFX0xPRyhNZWRp
YSwgIkNWUGl4ZWxCdWZmZXJDcmVhdGVXaXRoSU9TdXJmYWNlIGZhaWxlZCB3aXRoIGVycm9yIGNv
ZGU6ICVkIiwgc3RhdGljX2Nhc3Q8aW50PihzdGF0dXMpKTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorCisgICAgYXV0byByZXRhaW5lZEJ1ZmZlciA9IGFkb3B0Q0YocGl4ZWxCdWZm
ZXIpOworICAgIGlmIChtX3NpemUgPT0gSW50U2l6ZShDVlBpeGVsQnVmZmVyR2V0V2lkdGgocGl4
ZWxCdWZmZXIpLCBDVlBpeGVsQnVmZmVyR2V0SGVpZ2h0KHBpeGVsQnVmZmVyKSkgJiYgbV9waXhl
bEZvcm1hdCA9PSBDVlBpeGVsQnVmZmVyR2V0UGl4ZWxGb3JtYXRUeXBlKHBpeGVsQnVmZmVyKSkK
KyAgICAgICAgcmV0dXJuIHJldGFpbmVkQnVmZmVyOworCisgICAgcmV0dXJuIGNvbnZlcnRQaXhl
bEJ1ZmZlcihwaXhlbEJ1ZmZlciwgc2l6ZSk7Cit9CisKK1JldGFpblB0cjxDTVNhbXBsZUJ1ZmZl
clJlZj4gSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlQ01TYW1wbGVCdWZmZXIoSU9TdXJm
YWNlUmVmIHN1cmZhY2UsIGNvbnN0IE1lZGlhVGltZSYgc2FtcGxlVGltZSwgY29uc3QgSW50U2l6
ZSYgc2l6ZSkKK3sKKyAgICBpZiAoIXN1cmZhY2UgfHwgIXNldFNpemUoc2l6ZSkpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgYXV0byBwaXhlbEJ1ZmZlciA9IGNyZWF0ZVBpeGVsQnVm
ZmVyKHN1cmZhY2UsIHNpemUpOworICAgIGlmICghcGl4ZWxCdWZmZXIpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgcmV0dXJuIGNyZWF0ZUNNU2FtcGxlQnVmZmVyKHBpeGVsQnVmZmVy
LmdldCgpLCBzYW1wbGVUaW1lLCBzaXplKTsKK30KKyNlbmRpZgorCitSZWZQdHI8TWVkaWFTYW1w
bGU+IEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNvbnZlcnRNZWRpYVNhbXBsZShNZWRpYVNhbXBs
ZSYgc2FtcGxlLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIEFTU0VSVChzYW1wbGUucGxh
dGZvcm1TYW1wbGUoKS50eXBlID09IFBsYXRmb3JtU2FtcGxlOjpDTVNhbXBsZUJ1ZmZlclR5cGUp
OworCisgICAgaWYgKHNpemUgPT0gcm91bmRlZEludFNpemUoc2FtcGxlLnByZXNlbnRhdGlvblNp
emUoKSkpCisgICAgICAgIHJldHVybiAmc2FtcGxlOworCisgICAgaWYgKCFzZXRTaXplKHNpemUp
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gcmVzaXplZEJ1ZmZlciA9IGNv
bnZlcnRDTVNhbXBsZUJ1ZmZlcihzYW1wbGUucGxhdGZvcm1TYW1wbGUoKS5zYW1wbGUuY21TYW1w
bGVCdWZmZXIsIHNpemUpOworICAgIGlmICghcmVzaXplZEJ1ZmZlcikKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICByZXR1cm4gTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVhdGUocmVzaXpl
ZEJ1ZmZlci5nZXQoKSwgc2FtcGxlLnZpZGVvUm90YXRpb24oKSwgc2FtcGxlLnZpZGVvTWlycm9y
ZWQoKSk7Cit9CisKKyNpZiBIQVZFKElPU1VSRkFDRSkKK1JlZlB0cjxNZWRpYVNhbXBsZT4gSW1h
Z2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlTWVkaWFTYW1wbGUoSU9TdXJmYWNlUmVmIHN1cmZh
Y2UsIGNvbnN0IE1lZGlhVGltZSYgc2FtcGxlVGltZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgTWVk
aWFTYW1wbGU6OlZpZGVvUm90YXRpb24gcm90YXRpb24sIGJvb2wgbWlycm9yZWQpCit7CisgICAg
YXV0byBzYW1wbGVCdWZmZXIgPSBjcmVhdGVDTVNhbXBsZUJ1ZmZlcihzdXJmYWNlLCBzYW1wbGVU
aW1lLCBzaXplKTsKKyAgICBpZiAoIXNhbXBsZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICByZXR1cm4gTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVhdGUoc2FtcGxlQnVmZmVy
LmdldCgpLCByb3RhdGlvbiwgbWlycm9yZWQpOworfQorI2VuZGlmCisKK1JlZlB0cjxNZWRpYVNh
bXBsZT4gSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlTWVkaWFTYW1wbGUoQ0dJbWFnZVJl
ZiBpbWFnZSwgY29uc3QgTWVkaWFUaW1lJiBzYW1wbGVUaW1lLCBjb25zdCBJbnRTaXplJiBzaXpl
LCBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbiByb3RhdGlvbiwgYm9vbCBtaXJyb3JlZCkKK3sK
KyAgICBhdXRvIHNhbXBsZUJ1ZmZlciA9IGNyZWF0ZUNNU2FtcGxlQnVmZmVyKGltYWdlLCBzYW1w
bGVUaW1lLCBzaXplKTsKKyAgICBpZiAoIXNhbXBsZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICByZXR1cm4gTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVhdGUoc2FtcGxlQnVm
ZmVyLmdldCgpLCByb3RhdGlvbiwgbWlycm9yZWQpOworfQorCitSZWZQdHI8TWVkaWFTYW1wbGU+
IEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNyZWF0ZU1lZGlhU2FtcGxlKENNU2FtcGxlQnVmZmVy
UmVmIGJ1ZmZlciwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRp
b24gcm90YXRpb24sIGJvb2wgbWlycm9yZWQpCit7CisgICAgYXV0byBzYW1wbGVCdWZmZXIgPSBj
b252ZXJ0Q01TYW1wbGVCdWZmZXIoYnVmZmVyLCBzaXplKTsKKyAgICBpZiAoIXNhbXBsZUJ1ZmZl
cikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gTWVkaWFTYW1wbGVBVkZP
YmpDOjpjcmVhdGUoc2FtcGxlQnVmZmVyLmdldCgpLCByb3RhdGlvbiwgbWlycm9yZWQpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoVklERU9UT09MQk9YKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZm
ZXJSZXNpemVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9QaXhlbEJ1
ZmZlclJlc2l6ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RjZDRhYjIyNDA1
MGU0N2ZiNTczYzVhOTNlMzc1Zjg4MjkxNWY1ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9Q
aXhlbEJ1ZmZlclJlc2l6ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFVTRShWSURFT1RPT0xCT1gpCi0KLSNpbmNsdWRl
ICJJbnRTaXplLmgiCi0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi10eXBlZGVmIHN0cnVj
dCBPcGFxdWVWVFBpeGVsVHJhbnNmZXJTZXNzaW9uKiBWVFBpeGVsVHJhbnNmZXJTZXNzaW9uUmVm
OwotdHlwZWRlZiBzdHJ1Y3QgX19DVkJ1ZmZlciAqQ1ZQaXhlbEJ1ZmZlclJlZjsKLXR5cGVkZWYg
c3RydWN0IF9fQ1ZQaXhlbEJ1ZmZlclBvb2wgKkNWUGl4ZWxCdWZmZXJQb29sUmVmOwotdHlwZWRl
ZiBzdHJ1Y3Qgb3BhcXVlQ01TYW1wbGVCdWZmZXIgKkNNU2FtcGxlQnVmZmVyUmVmOwotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFBpeGVsQnVmZmVyUmVzaXplciB7Ci1wdWJsaWM6Ci0g
ICAgUGl4ZWxCdWZmZXJSZXNpemVyKEludFNpemUsIE9TVHlwZSk7Ci0KLSAgICBSZXRhaW5QdHI8
Q1ZQaXhlbEJ1ZmZlclJlZj4gcmVzaXplKENWUGl4ZWxCdWZmZXJSZWYpOwotICAgIFJldGFpblB0
cjxDTVNhbXBsZUJ1ZmZlclJlZj4gcmVzaXplKENNU2FtcGxlQnVmZmVyUmVmKTsKLSAgICBib29s
IGNhblJlc2l6ZVRvKEludFNpemUgc2l6ZSkgeyByZXR1cm4gc2l6ZSA9PSBtX3NpemU7IH0KLQot
cHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8VlRQaXhlbFRyYW5zZmVyU2Vzc2lvblJlZj4gbV90cmFu
c2ZlclNlc3Npb247Ci0gICAgUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJQb29sUmVmPiBtX2J1ZmZl
clBvb2w7Ci0gICAgSW50U2l6ZSBtX3NpemU7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBVU0UoVklE
RU9UT09MQk9YKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y3YvUGl4ZWxCdWZmZXJSZXNpemVyLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY3YvUGl4ZWxCdWZmZXJSZXNpemVyLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA2Yzc0MWEwY2YzNTIwMTI2MjlhMDI5MDE4ZmNjNTIyY2RiYmViZTg4Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2N2L1BpeGVsQnVmZmVyUmVzaXplci5tbQorKysgL2Rldi9udWxsCkBAIC0xLDEz
OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiUGl4
ZWxCdWZmZXJSZXNpemVyLmgiCi0KLSNpZiBVU0UoVklERU9UT09MQk9YKQotCi0jaW1wb3J0ICJM
b2dnaW5nLmgiCi0jaW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4KLQotI2ltcG9ydCAiQ29yZVZp
ZGVvU29mdExpbmsuaCIKLSNpbXBvcnQgIlZpZGVvVG9vbGJveFNvZnRMaW5rLmgiCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotUGl4ZWxCdWZmZXJSZXNpemVyOjpQaXhlbEJ1ZmZlclJlc2l6ZXIo
SW50U2l6ZSBzaXplLCBPU1R5cGUgdmlkZW9Gb3JtYXQpCi17Ci0gICAgVlRQaXhlbFRyYW5zZmVy
U2Vzc2lvblJlZiB0cmFuc2ZlclNlc3Npb247Ci0gICAgVlRQaXhlbFRyYW5zZmVyU2Vzc2lvbkNy
ZWF0ZShOVUxMLCAmdHJhbnNmZXJTZXNzaW9uKTsKLSAgICBBU1NFUlQodHJhbnNmZXJTZXNzaW9u
KTsKLSAgICBtX3RyYW5zZmVyU2Vzc2lvbiA9IGFkb3B0Q0YodHJhbnNmZXJTZXNzaW9uKTsKLQot
ICAgIFZUU2Vzc2lvblNldFByb3BlcnR5KHRyYW5zZmVyU2Vzc2lvbiwga1ZUUGl4ZWxUcmFuc2Zl
clByb3BlcnR5S2V5X1NjYWxpbmdNb2RlLCBrVlRTY2FsaW5nTW9kZV9UcmltKTsKLQotICAgIENG
RGljdGlvbmFyeVJlZiBzb3VyY2VQaXhlbEJ1ZmZlck9wdGlvbnMgPSAoX19icmlkZ2UgQ0ZEaWN0
aW9uYXJ5UmVmKSBAewotICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ1ZQaXhlbEJ1ZmZl
cldpZHRoS2V5IDpAKHNpemUud2lkdGgoKSksCi0gICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAq
KWtDVlBpeGVsQnVmZmVySGVpZ2h0S2V5OkAoc2l6ZS5oZWlnaHQoKSksCi0gICAgICAgIChfX2Jy
aWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsQnVmZmVyUGl4ZWxGb3JtYXRUeXBlS2V5OkAodmlkZW9G
b3JtYXQpLAotI2lmIFBMQVRGT1JNKElPUykgJiYgIVBMQVRGT1JNKElPU01BQykKLSAgICAgICAg
KF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxGb3JtYXRPcGVuR0xFU0NvbXBhdGliaWxpdHkg
OiBAKFlFUyksCi0jZWxzZQotICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ1ZQaXhlbEJ1
ZmZlck9wZW5HTENvbXBhdGliaWxpdHlLZXkgOiBAKFlFUyksCi0jZW5kaWYKLSAgICAgICAgKF9f
YnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxCdWZmZXJJT1N1cmZhY2VQcm9wZXJ0aWVzS2V5IDog
QHsgLyplbXB0eSBkaWN0aW9uYXJ5Ki8gfSwKLSAgICB9OwotICAgIENWUGl4ZWxCdWZmZXJQb29s
UmVmIGJ1ZmZlclBvb2w7Ci0gICAgYXV0byBzdGF0dXMgPSBDVlBpeGVsQnVmZmVyUG9vbENyZWF0
ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBOVUxMLCBzb3VyY2VQaXhlbEJ1ZmZlck9wdGlvbnMsICZi
dWZmZXJQb29sKTsKLSAgICBBU1NFUlQoIXN0YXR1cyk7Ci0gICAgaWYgKHN0YXR1cyAhPSBrQ1ZS
ZXR1cm5TdWNjZXNzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2J1ZmZlclBvb2wgPSBhZG9w
dENGKGJ1ZmZlclBvb2wpOwotICAgIG1fc2l6ZSA9IHNpemU7Ci19Ci0KLVJldGFpblB0cjxDVlBp
eGVsQnVmZmVyUmVmPiBQaXhlbEJ1ZmZlclJlc2l6ZXI6OnJlc2l6ZShDVlBpeGVsQnVmZmVyUmVm
IGlucHV0QnVmZmVyKQotewotICAgIEFTU0VSVChtX2J1ZmZlclBvb2wgJiYgIW1fc2l6ZS5pc0Vt
cHR5KCkpOwotICAgIGlmICghbV9idWZmZXJQb29sIHx8IG1fc2l6ZS5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJSZWY+IHJl
c3VsdDsKLSAgICBDVlBpeGVsQnVmZmVyUmVmIG91dHB1dEJ1ZmZlciA9IG51bGxwdHI7Ci0KLSAg
ICBhdXRvIHN0YXR1cyA9IENWUGl4ZWxCdWZmZXJQb29sQ3JlYXRlUGl4ZWxCdWZmZXIoa0NGQWxs
b2NhdG9yRGVmYXVsdCwgbV9idWZmZXJQb29sLmdldCgpLCAmb3V0cHV0QnVmZmVyKTsKLSAgICBp
ZiAoc3RhdHVzKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhLCAiUGl4ZWxCdWZmZXJSZXNp
emVyOjpyZXNpemUsIENWUGl4ZWxCdWZmZXJQb29sQ3JlYXRlUGl4ZWxCdWZmZXIgZmFpbGVkIHdp
dGggZXJyb3IgJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOwotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICB9Ci0gICAgcmVzdWx0ID0gYWRvcHRDRihvdXRwdXRCdWZmZXIpOwotCi0g
ICAgYXV0byBlcnIgPSBWVFBpeGVsVHJhbnNmZXJTZXNzaW9uVHJhbnNmZXJJbWFnZShtX3RyYW5z
ZmVyU2Vzc2lvbi5nZXQoKSwgaW5wdXRCdWZmZXIsIG91dHB1dEJ1ZmZlcik7Ci0gICAgaWYgKGVy
cikgewotICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIlBpeGVsQnVmZmVyUmVzaXplcjo6cmVz
aXplLCBWVFBpeGVsVHJhbnNmZXJTZXNzaW9uVHJhbnNmZXJJbWFnZSBmYWlsZWQgd2l0aCBlcnJv
ciAlZCIsIHN0YXRpY19jYXN0PGludD4oZXJyKSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVJldGFpblB0cjxDTVNhbXBsZUJ1ZmZl
clJlZj4gUGl4ZWxCdWZmZXJSZXNpemVyOjpyZXNpemUoQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxl
QnVmZmVyKQotewotICAgIGF1dG8gY29udmVydGVkUGl4ZWxCdWZmZXIgPSByZXNpemUoQ01TYW1w
bGVCdWZmZXJHZXRJbWFnZUJ1ZmZlcihzYW1wbGVCdWZmZXIpKTsKLSAgICBpZiAoIWNvbnZlcnRl
ZFBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENNVmlkZW9Gb3Jt
YXREZXNjcmlwdGlvblJlZiBmb3JtYXREZXNjcmlwdGlvbiA9IG51bGxwdHI7Ci0gICAgYXV0byBz
dGF0dXMgPSBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25DcmVhdGVGb3JJbWFnZUJ1ZmZlcihrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCBjb252ZXJ0ZWRQaXhlbEJ1ZmZlci5nZXQoKSwgJmZvcm1hdERlc2Ny
aXB0aW9uKTsKLSAgICBpZiAoc3RhdHVzICE9IG5vRXJyKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9H
KE1lZGlhLCAiUGl4ZWxCdWZmZXJSZXNpemVyOjpyZXNpemU6IGZhaWxlZCB0byBjcmVhdGUgQ01W
aWRlb0Zvcm1hdERlc2NyaXB0aW9uIHdpdGggZXJyb3IgY29kZTogJWQiLCBzdGF0aWNfY2FzdDxp
bnQ+KHN0YXR1cykpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBDTUl0
ZW1Db3VudCBpdGVtQ291bnQgPSAwOwotICAgIHN0YXR1cyA9IENNU2FtcGxlQnVmZmVyR2V0U2Ft
cGxlVGltaW5nSW5mb0FycmF5KHNhbXBsZUJ1ZmZlciwgMSwgbnVsbHB0ciwgJml0ZW1Db3VudCk7
Ci0gICAgaWYgKHN0YXR1cyAhPSBub0VycikgewotICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwg
IlBpeGVsQnVmZmVyUmVzaXplcjo6cmVzaXplOiBDTVNhbXBsZUJ1ZmZlckdldFNhbXBsZVRpbWlu
Z0luZm9BcnJheSBmYWlsZWQgd2l0aCBlcnJvciBjb2RlOiAlZCIsIHN0YXRpY19jYXN0PGludD4o
c3RhdHVzKSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICBWZWN0b3I8Q01T
YW1wbGVUaW1pbmdJbmZvPiB0aW1pbmdJbmZvQXJyYXk7Ci0gICAgQ01TYW1wbGVUaW1pbmdJbmZv
KiB0aW1laW5nSW5mb1B0ciA9IG51bGxwdHI7Ci0gICAgaWYgKGl0ZW1Db3VudCkgewotICAgICAg
ICB0aW1pbmdJbmZvQXJyYXkuZ3JvdyhpdGVtQ291bnQpOwotICAgICAgICBzdGF0dXMgPSBDTVNh
bXBsZUJ1ZmZlckdldFNhbXBsZVRpbWluZ0luZm9BcnJheShzYW1wbGVCdWZmZXIsIGl0ZW1Db3Vu
dCwgdGltaW5nSW5mb0FycmF5LmRhdGEoKSwgbnVsbHB0cik7Ci0gICAgICAgIGlmIChzdGF0dXMg
IT0gbm9FcnIpIHsKLSAgICAgICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhLCAiUGl4ZWxCdWZmZXJS
ZXNpemVyOjpyZXNpemU6IENNU2FtcGxlQnVmZmVyR2V0U2FtcGxlVGltaW5nSW5mb0FycmF5IGZh
aWxlZCB3aXRoIGVycm9yIGNvZGU6ICVkIiwgc3RhdGljX2Nhc3Q8aW50PihzdGF0dXMpKTsKLSAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0gICAgICAgIHRpbWVpbmdJbmZv
UHRyID0gdGltaW5nSW5mb0FycmF5LmRhdGEoKTsKLSAgICB9Ci0KLSAgICBDTVNhbXBsZUJ1ZmZl
clJlZiByZXNpemVkU2FtcGxlQnVmZmVyOwotICAgIHN0YXR1cyA9IENNU2FtcGxlQnVmZmVyQ3Jl
YXRlUmVhZHlXaXRoSW1hZ2VCdWZmZXIoa0NGQWxsb2NhdG9yRGVmYXVsdCwgY29udmVydGVkUGl4
ZWxCdWZmZXIuZ2V0KCksIGZvcm1hdERlc2NyaXB0aW9uLCB0aW1laW5nSW5mb1B0ciwgJnJlc2l6
ZWRTYW1wbGVCdWZmZXIpOwotICAgIENGUmVsZWFzZShmb3JtYXREZXNjcmlwdGlvbik7Ci0gICAg
aWYgKHN0YXR1cyAhPSBub0VycikgewotICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIlBpeGVs
QnVmZmVyUmVzaXplcjo6cmVzaXplOiBmYWlsZWQgdG8gY3JlYXRlIENNU2FtcGxlQnVmZmVyIHdp
dGggZXJyb3IgY29kZTogJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOwotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICByZXR1cm4gYWRvcHRDRihyZXNpemVkU2FtcGxl
QnVmZmVyKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKFZJ
REVPVE9PTEJPWCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAKaW5kZXggODA1MDQzMjdlM2E2ODI0OTk1
ODZmOGQzYzdiOGNlMDQ0ZGEzMDI4Ny4uZWM4YjViOWRkZTBjY2Q3NTE0MTRiZWE0MjJjNWM2NWU5
YjIzOGIxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
UmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAKQEAgLTEzMywxMCArMTMzLDYgQEAgdm9p
ZCBSZWFsdGltZU1lZGlhU291cmNlOjpub3RpZnlNdXRlZE9ic2VydmVycygpIGNvbnN0CiAgICAg
fSk7CiB9CiAKLXZvaWQgUmVhbHRpbWVNZWRpYVNvdXJjZTo6c2V0dGluZ3NEaWRDaGFuZ2UoT3B0
aW9uU2V0PFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RmxhZz4pCi17Ci19Ci0KIHZvaWQg
UmVhbHRpbWVNZWRpYVNvdXJjZTo6bm90aWZ5U2V0dGluZ3NEaWRDaGFuZ2VPYnNlcnZlcnMoT3B0
aW9uU2V0PFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RmxhZz4gZmxhZ3MpCiB7CiAgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuaAppbmRleCA3MTZjZTY5YzAy
NDA3NmUyZGJmMGY2NjZiZjU4ZWMyOWQyNmQwNDY1Li5hOTNkZTMzOGM0MWE1NzFjYjEwNWQxZjQz
NmQ1MmM1ZTU5MzgwYjYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZS5oCkBAIC0yMDAsNyArMjAwLDcgQEAg
cHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc3RhcnRQcm9kdWNpbmdEYXRh
KCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHN0b3BQcm9kdWNpbmdEYXRhKCkgeyB9Ci0gICAgdmly
dHVhbCB2b2lkIHNldHRpbmdzRGlkQ2hhbmdlKE9wdGlvblNldDxSZWFsdGltZU1lZGlhU291cmNl
U2V0dGluZ3M6OkZsYWc+KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0dGluZ3NEaWRDaGFuZ2UoT3B0
aW9uU2V0PFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RmxhZz4pIHsgfQogCiAKICAgICB2
b2lkIGZvckVhY2hPYnNlcnZlcihjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoT2JzZXJ2ZXImKT4m
KSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9BVlZpZGVvQ2FwdHVyZVNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJlU291cmNlLmgKaW5kZXggM2I0OWY0NmZkYTNlYzMy
NmM3Mzg1MTczZmE2Y2QyN2VjZjI5ZWY2Mi4uMjZiZjgzMTU0NTViMTdlYzgzMjJmYjU5MTFhYTll
MDVlNzYzNjMzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbWFjL0FWVmlkZW9DYXB0dXJlU291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJlU291cmNlLmgKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OSw3ICs0OSw3
IEBAIE9CSkNfQ0xBU1MgV2ViQ29yZUFWVmlkZW9DYXB0dXJlU291cmNlT2JzZXJ2ZXI7CiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEFWVmlkZW9QcmVzZXQ7Ci1jbGFzcyBQaXhlbEJ1ZmZl
clJlc2l6ZXI7CitjbGFzcyBJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOwogCiBjbGFzcyBBVlZpZGVv
Q2FwdHVyZVNvdXJjZSA6IHB1YmxpYyBSZWFsdGltZVZpZGVvU291cmNlLCBwcml2YXRlIE9yaWVu
dGF0aW9uTm90aWZpZXI6Ok9ic2VydmVyIHsKIHB1YmxpYzoKQEAgLTEwMywxMyArMTAzLDE0IEBA
IHByaXZhdGU6CiAKICAgICBib29sIHNldEZyYW1lUmF0ZUNvbnN0cmFpbnQoZG91YmxlIG1pbkZy
YW1lUmF0ZSwgZG91YmxlIG1heEZyYW1lUmF0ZSk7CiAKLSAgICB2b2lkIHByb2Nlc3NOZXdGcmFt
ZShSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+LCBSZXRhaW5QdHI8QVZDYXB0dXJlQ29ubmVj
dGlvbj4pOworICAgIHZvaWQgcHJvY2Vzc05ld0ZyYW1lKFJlZlB0cjxNZWRpYVNhbXBsZT4pOwog
ICAgIEludFNpemUgc2l6ZUZvclByZXNldChOU1N0cmluZyopOwogCiAgICAgQVZDYXB0dXJlRGV2
aWNlKiBkZXZpY2UoKSBjb25zdCB7IHJldHVybiBtX2RldmljZS5nZXQoKTsgfQogCi0gICAgUmV0
YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBtX2J1ZmZlcjsKKyAgICBSZWZQdHI8TWVkaWFTYW1w
bGU+IG1fYnVmZmVyOwogICAgIFJldGFpblB0cjxBVkNhcHR1cmVWaWRlb0RhdGFPdXRwdXQ+IG1f
dmlkZW9PdXRwdXQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ+
IG1faW1hZ2VUcmFuc2ZlclNlc3Npb247CiAKICAgICBJbnRTaXplIG1fcmVxdWVzdGVkU2l6ZTsK
ICAgICBpbnQzMl90IG1fd2lkdGggeyAwIH07CkBAIC0xMTgsNyArMTE5LDYgQEAgcHJpdmF0ZToK
ICAgICBpbnQgbV9kZXZpY2VPcmllbnRhdGlvbiB7IDAgfTsKICAgICBNZWRpYVNhbXBsZTo6Vmlk
ZW9Sb3RhdGlvbiBtX3NhbXBsZVJvdGF0aW9uIHsgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246
Ok5vbmUgfTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxQaXhlbEJ1ZmZlclJlc2l6ZXI+IG1fcGl4
ZWxCdWZmZXJSZXNpemVyOwogICAgIHN0ZDo6b3B0aW9uYWw8UmVhbHRpbWVNZWRpYVNvdXJjZVNl
dHRpbmdzPiBtX2N1cnJlbnRTZXR0aW5nczsKICAgICBzdGQ6Om9wdGlvbmFsPFJlYWx0aW1lTWVk
aWFTb3VyY2VDYXBhYmlsaXRpZXM+IG1fY2FwYWJpbGl0aWVzOwogICAgIFJldGFpblB0cjxXZWJD
b3JlQVZWaWRlb0NhcHR1cmVTb3VyY2VPYnNlcnZlcj4gbV9vYmpjT2JzZXJ2ZXI7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZWaWRlb0NhcHR1
cmVTb3VyY2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZW
aWRlb0NhcHR1cmVTb3VyY2UubW0KaW5kZXggNTE5NjA4MjIyZTY2MTRhYjJlZGNlYzIzZjM1MDA5
MDc1OWQxMTkxNi4uN2E5NjIxNmM4NTRiNWRhZWVmZDE4M2Q3YmQyYzhmN2Q1ZDFhNThmMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9D
YXB0dXJlU291cmNlLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9BVlZpZGVvQ2FwdHVyZVNvdXJjZS5tbQpAQCAtMjksMTEgKzI5LDExIEBACiAjaWYgRU5B
QkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEFWRk9VTkRBVElPTikKIAogI2ltcG9ydCAiSW1hZ2VC
dWZmZXIuaCIKKyNpbXBvcnQgIkltYWdlVHJhbnNmZXJTZXNzaW9uVlQuaCIKICNpbXBvcnQgIklu
dFJlY3QuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQgIk1lZGlhQ29uc3RyYWludHMu
aCIKICNpbXBvcnQgIk1lZGlhU2FtcGxlQVZGT2JqQy5oIgotI2ltcG9ydCAiUGl4ZWxCdWZmZXJS
ZXNpemVyLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybUxheWVyLmgiCiAjaW1wb3J0ICJSZWFsdGltZU1l
ZGlhU291cmNlQ2VudGVyTWFjLmgiCiAjaW1wb3J0ICJSZWFsdGltZU1lZGlhU291cmNlU2V0dGlu
Z3MuaCIKQEAgLTI5OSw3ICsyOTksNyBAQCBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJp
bGl0aWVzJiBBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6Y2FwYWJpbGl0aWVzKCkKIGJvb2wgQVZWaWRl
b0NhcHR1cmVTb3VyY2U6OnByZWZlcnNQcmVzZXQoVmlkZW9QcmVzZXQmIHByZXNldCkKIHsKICNp
ZiBQTEFURk9STShJT1MpCi0gICAgcmV0dXJuICFbc3RhdGljX2Nhc3Q8QVZWaWRlb1ByZXNldCo+
KCZwcmVzZXQpLT5mb3JtYXQuZ2V0KCkgaXNWaWRlb0Jpbm5lZF07CisgICAgcmV0dXJuIFtzdGF0
aWNfY2FzdDxBVlZpZGVvUHJlc2V0Kj4oJnByZXNldCktPmZvcm1hdC5nZXQoKSBpc1ZpZGVvQmlu
bmVkXTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHByZXNldCk7CiAjZW5kaWYKQEAgLTUxOSwy
NyArNTE5LDIzIEBAIHZvaWQgQVZWaWRlb0NhcHR1cmVTb3VyY2U6OmNvbXB1dGVTYW1wbGVSb3Rh
dGlvbigpCiAgICAgfQogfQogCi12b2lkIEFWVmlkZW9DYXB0dXJlU291cmNlOjpwcm9jZXNzTmV3
RnJhbWUoUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBzYW1wbGVCdWZmZXIsIFJldGFpblB0
cjxBVkNhcHR1cmVDb25uZWN0aW9uVHlwZT4gY29ubmVjdGlvbikKK3ZvaWQgQVZWaWRlb0NhcHR1
cmVTb3VyY2U6OnByb2Nlc3NOZXdGcmFtZShSZWZQdHI8TWVkaWFTYW1wbGU+IHNhbXBsZSkKIHsK
ICAgICBpZiAoIWlzUHJvZHVjaW5nRGF0YSgpIHx8IG11dGVkKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIENNRm9ybWF0RGVzY3JpcHRpb25SZWYgZm9ybWF0RGVzY3JpcHRpb24gPSBDTVNhbXBs
ZUJ1ZmZlckdldEZvcm1hdERlc2NyaXB0aW9uKHNhbXBsZUJ1ZmZlci5nZXQoKSk7Ci0gICAgaWYg
KCFmb3JtYXREZXNjcmlwdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9idWZmZXIgPSBz
YW1wbGVCdWZmZXI7Ci0gICAgQ01WaWRlb0RpbWVuc2lvbnMgZGltZW5zaW9ucyA9IENNVmlkZW9G
b3JtYXREZXNjcmlwdGlvbkdldERpbWVuc2lvbnMoZm9ybWF0RGVzY3JpcHRpb24pOworICAgIG1f
YnVmZmVyID0gc2FtcGxlOworICAgIGF1dG8gZGltZW5zaW9ucyA9IHJvdW5kZWRJbnRTaXplKHNh
bXBsZS0+cHJlc2VudGF0aW9uU2l6ZSgpKTsKICAgICBpZiAobV9zYW1wbGVSb3RhdGlvbiA9PSBN
ZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6TGVmdCB8fCBtX3NhbXBsZVJvdGF0aW9uID09IE1l
ZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpSaWdodCkKLSAgICAgICAgc3RkOjpzd2FwKGRpbWVu
c2lvbnMud2lkdGgsIGRpbWVuc2lvbnMuaGVpZ2h0KTsKKyAgICAgICAgZGltZW5zaW9ucyA9IHsg
ZGltZW5zaW9ucy5oZWlnaHQoKSwgZGltZW5zaW9ucy53aWR0aCgpIH07CiAKLSAgICBpZiAoZGlt
ZW5zaW9ucy53aWR0aCAhPSBtX3dpZHRoIHx8IGRpbWVuc2lvbnMuaGVpZ2h0ICE9IG1faGVpZ2h0
KSB7Ci0gICAgICAgIG1fd2lkdGggPSBkaW1lbnNpb25zLndpZHRoOwotICAgICAgICBtX2hlaWdo
dCA9IGRpbWVuc2lvbnMuaGVpZ2h0OwotICAgICAgICBzZXRTaXplKHsgZGltZW5zaW9ucy53aWR0
aCwgZGltZW5zaW9ucy5oZWlnaHQgfSk7CisgICAgaWYgKGRpbWVuc2lvbnMud2lkdGgoKSAhPSBt
X3dpZHRoIHx8IGRpbWVuc2lvbnMuaGVpZ2h0KCkgIT0gbV9oZWlnaHQpIHsKKyAgICAgICAgbV93
aWR0aCA9IGRpbWVuc2lvbnMud2lkdGgoKTsKKyAgICAgICAgbV9oZWlnaHQgPSBkaW1lbnNpb25z
LmhlaWdodCgpOworICAgICAgICBzZXRTaXplKGRpbWVuc2lvbnMpOwogICAgIH0KIAotICAgIHZp
ZGVvU2FtcGxlQXZhaWxhYmxlKE1lZGlhU2FtcGxlQVZGT2JqQzo6Y3JlYXRlKG1fYnVmZmVyLmdl
dCgpLCBtX3NhbXBsZVJvdGF0aW9uLCBbY29ubmVjdGlvbiBpc1ZpZGVvTWlycm9yZWRdKSk7Cisg
ICAgZGlzcGF0Y2hNZWRpYVNhbXBsZVRvT2JzZXJ2ZXJzKCpzYW1wbGUpOwogfQogCiB2b2lkIEFW
VmlkZW9DYXB0dXJlU291cmNlOjpjYXB0dXJlT3V0cHV0RGlkT3V0cHV0U2FtcGxlQnVmZmVyRnJv
bUNvbm5lY3Rpb24oQVZDYXB0dXJlT3V0cHV0VHlwZSosIENNU2FtcGxlQnVmZmVyUmVmIHNhbXBs
ZUJ1ZmZlciwgQVZDYXB0dXJlQ29ubmVjdGlvblR5cGUqIGNhcHR1cmVDb25uZWN0aW9uKQpAQCAt
NTQ5LDI0ICs1NDUsMjQgQEAgdm9pZCBBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6Y2FwdHVyZU91dHB1
dERpZE91dHB1dFNhbXBsZUJ1ZmZlckZyb21Db25uZWN0aW9uKEFWQ2EKICAgICAgICAgcmV0dXJu
OwogCiAgICAgQ01WaWRlb0RpbWVuc2lvbnMgZGltZW5zaW9ucyA9IENNVmlkZW9Gb3JtYXREZXNj
cmlwdGlvbkdldERpbWVuc2lvbnMoZm9ybWF0RGVzY3JpcHRpb24pOworICAgIFJlZlB0cjxNZWRp
YVNhbXBsZT4gc2FtcGxlOwogICAgIGlmIChkaW1lbnNpb25zLndpZHRoICE9IG1fcmVxdWVzdGVk
U2l6ZS53aWR0aCgpIHx8IGRpbWVuc2lvbnMuaGVpZ2h0ICE9IG1fcmVxdWVzdGVkU2l6ZS5oZWln
aHQoKSkgewotICAgICAgICBpZiAobV9waXhlbEJ1ZmZlclJlc2l6ZXIgJiYgIW1fcGl4ZWxCdWZm
ZXJSZXNpemVyLT5jYW5SZXNpemVUbyhtX3JlcXVlc3RlZFNpemUpKQotICAgICAgICAgICAgbV9w
aXhlbEJ1ZmZlclJlc2l6ZXIgPSBudWxscHRyOwogCi0gICAgICAgIGlmICghbV9waXhlbEJ1ZmZl
clJlc2l6ZXIpCi0gICAgICAgICAgICBtX3BpeGVsQnVmZmVyUmVzaXplciA9IHN0ZDo6bWFrZV91
bmlxdWU8UGl4ZWxCdWZmZXJSZXNpemVyPihtX3JlcXVlc3RlZFNpemUsIGF2VmlkZW9DYXB0dXJl
UGl4ZWxCdWZmZXJGb3JtYXQoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fcGl4ZWxCdWZmZXJS
ZXNpemVyID0gbnVsbHB0cjsKKyAgICAgICAgaWYgKCFtX2ltYWdlVHJhbnNmZXJTZXNzaW9uKQor
ICAgICAgICAgICAgbV9pbWFnZVRyYW5zZmVyU2Vzc2lvbiA9IEltYWdlVHJhbnNmZXJTZXNzaW9u
VlQ6OmNyZWF0ZShhdlZpZGVvQ2FwdHVyZVBpeGVsQnVmZmVyRm9ybWF0KCkpOwogCi0gICAgYXV0
byBidWZmZXIgPSByZXRhaW5QdHIoc2FtcGxlQnVmZmVyKTsKLSAgICBpZiAobV9waXhlbEJ1ZmZl
clJlc2l6ZXIpIHsKLSAgICAgICAgYnVmZmVyID0gbV9waXhlbEJ1ZmZlclJlc2l6ZXItPnJlc2l6
ZShzYW1wbGVCdWZmZXIpOwotICAgICAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgICAgIGlmIChtX2ltYWdlVHJhbnNmZXJTZXNzaW9uKSB7CisgICAgICAg
ICAgICBzYW1wbGUgPSBtX2ltYWdlVHJhbnNmZXJTZXNzaW9uLT5jcmVhdGVNZWRpYVNhbXBsZShz
YW1wbGVCdWZmZXIsIG1fcmVxdWVzdGVkU2l6ZSwgbV9zYW1wbGVSb3RhdGlvbiwgW2NhcHR1cmVD
b25uZWN0aW9uIGlzVmlkZW9NaXJyb3JlZF0pOworICAgICAgICAgICAgaWYgKCFzYW1wbGUpIHsK
KyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgc2Ft
cGxlID0gTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVhdGUoc2FtcGxlQnVmZmVyLCBtX3NhbXBsZVJv
dGF0aW9uLCBbY2FwdHVyZUNvbm5lY3Rpb24gaXNWaWRlb01pcnJvcmVkXSk7CiAKLSAgICBzY2hl
ZHVsZURlZmVycmVkVGFzayhbdGhpcywgYnVmZmVyLCBjb25uZWN0aW9uID0gcmV0YWluUHRyKGNh
cHR1cmVDb25uZWN0aW9uKV0gewotICAgICAgICB0aGlzLT5wcm9jZXNzTmV3RnJhbWUoYnVmZmVy
LCBjb25uZWN0aW9uKTsKKyAgICBzY2hlZHVsZURlZmVycmVkVGFzayhbdGhpcywgc2FtcGxlID0g
V1RGTW92ZShzYW1wbGUpXSB7CisgICAgICAgIHByb2Nlc3NOZXdGcmFtZShzYW1wbGUpOwogICAg
IH0pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9tYWMvRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYS5jcHAKaW5kZXgg
MzczZDBmOGE1M2E1ZTZhNmVhNGM3ZTRiZGY5NzZkOGVkZDk1NDQxZS4uYjk3ZWM3MmZjYjBlMTMw
MDY2MDdlMmVmZGExMjFjM2IxNTBlYTQ4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vbWFjL0Rpc3BsYXlDYXB0dXJlU291cmNlQ29jb2EuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9EaXNwbGF5Q2FwdHVyZVNv
dXJjZUNvY29hLmNwcApAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNp
bmNsdWRlICJNZWRpYVNhbXBsZUFWRk9iakMuaCIKICNpbmNsdWRlICJQaXhlbEJ1ZmZlckNvbmZv
cm1lckNWLmgiCi0jaW5jbHVkZSAiUGl4ZWxCdWZmZXJSZXNpemVyLmgiCiAjaW5jbHVkZSAiUmVh
bHRpbWVNZWRpYVNvdXJjZS5oIgogI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIu
aCIKICNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MuaCIKQEAgLTQyLDYgKzQx
LDggQEAKICNpbmNsdWRlIDxwYWwvYXZmb3VuZGF0aW9uL01lZGlhVGltZUFWRm91bmRhdGlvbi5o
PgogI2luY2x1ZGUgPHBhbC9jZi9Db3JlTWVkaWFTb2Z0TGluay5oPgogI2luY2x1ZGUgPHBhbC9z
cGkvY2YvQ29yZUF1ZGlvU1BJLmg+CisjaW5jbHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NT
UEkuaD4KKyNpbmNsdWRlIDxwYWwvc3BpL2NvY29hL0lPU3VyZmFjZVNQSS5oPgogI2luY2x1ZGUg
PHN5cy90aW1lLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KQEAgLTcyLDcgKzczLDcgQEAgY29uc3QgUmVhbHRpbWVNZWRpYVNv
dXJjZUNhcGFiaWxpdGllcyYgRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6Y2FwYWJpbGl0aWVz
KCkKICAgICAgICAgLy8gRklYTUU6IHdoYXQgc2hvdWxkIHRoZXNlIGJlPwogICAgICAgICBjYXBh
YmlsaXRpZXMuc2V0V2lkdGgoQ2FwYWJpbGl0eVZhbHVlT3JSYW5nZSg3MiwgMjg4MCkpOwogICAg
ICAgICBjYXBhYmlsaXRpZXMuc2V0SGVpZ2h0KENhcGFiaWxpdHlWYWx1ZU9yUmFuZ2UoNDUsIDE4
MDApKTsKLSAgICAgICAgY2FwYWJpbGl0aWVzLnNldEZyYW1lUmF0ZShDYXBhYmlsaXR5VmFsdWVP
clJhbmdlKC4wMSwgNjAuMCkpOworICAgICAgICBjYXBhYmlsaXRpZXMuc2V0RnJhbWVSYXRlKENh
cGFiaWxpdHlWYWx1ZU9yUmFuZ2UoLjAxLCAzMC4wKSk7CiAKICAgICAgICAgbV9jYXBhYmlsaXRp
ZXMgPSBXVEZNb3ZlKGNhcGFiaWxpdGllcyk7CiAgICAgfQpAQCAtMTExLDEwICsxMTIsOCBAQCB2
b2lkIERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OnNldHRpbmdzRGlkQ2hhbmdlKE9wdGlvblNl
dDxSZWFsdGltZU1lZGlhU291cmNlUwogICAgIGlmIChzZXR0aW5ncy5jb250YWlucyhSZWFsdGlt
ZU1lZGlhU291cmNlU2V0dGluZ3M6OkZsYWc6OkZyYW1lUmF0ZSkgJiYgbV90aW1lci5pc0FjdGl2
ZSgpKQogICAgICAgICBtX3RpbWVyLnN0YXJ0UmVwZWF0aW5nKDFfcyAvIGZyYW1lUmF0ZSgpKTsK
IAotICAgIGlmIChzZXR0aW5ncy5jb250YWluc0FueSh7IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0
aW5nczo6RmxhZzo6V2lkdGgsIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RmxhZzo6SGVp
Z2h0IH0pKSB7CisgICAgaWYgKHNldHRpbmdzLmNvbnRhaW5zQW55KHsgUmVhbHRpbWVNZWRpYVNv
dXJjZVNldHRpbmdzOjpGbGFnOjpXaWR0aCwgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpG
bGFnOjpIZWlnaHQgfSkpCiAgICAgICAgIG1fYnVmZmVyQXR0cmlidXRlcyA9IG51bGxwdHI7Ci0g
ICAgICAgIG1fbGFzdFNhbXBsZUJ1ZmZlciA9IG51bGxwdHI7Ci0gICAgfQogCiAgICAgbV9jdXJy
ZW50U2V0dGluZ3MgPSB7IH07CiB9CkBAIC0xNTksNyArMTU4LDggQEAgdm9pZCBEaXNwbGF5Q2Fw
dHVyZVNvdXJjZUNvY29hOjpzZXRJbnRyaW5zaWNTaXplKGNvbnN0IEludFNpemUmIHNpemUpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIG1faW50cmluc2ljU2l6ZSA9IHNpemU7Ci0gICAgbV9sYXN0
U2FtcGxlQnVmZmVyID0gbnVsbHB0cjsKKyAgICBub3RpZnlTZXR0aW5nc0RpZENoYW5nZU9ic2Vy
dmVycyh7IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RmxhZzo6V2lkdGgsIFJlYWx0aW1l
TWVkaWFTb3VyY2VTZXR0aW5nczo6RmxhZzo6SGVpZ2h0IH0pOworCiB9CiAKIHZvaWQgRGlzcGxh
eUNhcHR1cmVTb3VyY2VDb2NvYTo6ZW1pdEZyYW1lKCkKQEAgLTE2NywxMjUgKzE2Nyw0MiBAQCB2
b2lkIERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OmVtaXRGcmFtZSgpCiAgICAgaWYgKG11dGVk
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBnZW5lcmF0ZUZy
YW1lKCk7Ci0gICAgaWYgKCFwaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KG1fbGFzdFNhbXBsZUJ1ZmZlciAmJiBtX2xhc3RGdWxsU2l6ZWRQaXhlbEJ1ZmZlciAmJiBDRkVx
dWFsKG1fbGFzdEZ1bGxTaXplZFBpeGVsQnVmZmVyLmdldCgpLCBwaXhlbEJ1ZmZlci5nZXQoKSkp
IHsKLSAgICAgICAgdmlkZW9TYW1wbGVBdmFpbGFibGUoTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVh
dGUobV9sYXN0U2FtcGxlQnVmZmVyLmdldCgpKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBtX2xhc3RGdWxsU2l6ZWRQaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVyOwotCi0gICAgaW50
IHdpZHRoID0gV1RGOjpzYWZlQ2FzdDxpbnQ+KENWUGl4ZWxCdWZmZXJHZXRXaWR0aChwaXhlbEJ1
ZmZlci5nZXQoKSkpOwotICAgIGludCBoZWlnaHQgPSBXVEY6OnNhZmVDYXN0PGludD4oQ1ZQaXhl
bEJ1ZmZlckdldEhlaWdodChwaXhlbEJ1ZmZlci5nZXQoKSkpOwotICAgIGF1dG8gcmVxdWVzdGVk
U2l6ZSA9IGZyYW1lU2l6ZSgpOwotICAgIGlmICh3aWR0aCAhPSByZXF1ZXN0ZWRTaXplLndpZHRo
KCkgfHwgaGVpZ2h0ICE9IHJlcXVlc3RlZFNpemUuaGVpZ2h0KCkpIHsKLSAgICAgICAgaWYgKG1f
cGl4ZWxCdWZmZXJSZXNpemVyICYmICFtX3BpeGVsQnVmZmVyUmVzaXplci0+Y2FuUmVzaXplVG8o
cmVxdWVzdGVkU2l6ZSkpCi0gICAgICAgICAgICBtX3BpeGVsQnVmZmVyUmVzaXplciA9IG51bGxw
dHI7Ci0KLSAgICAgICAgaWYgKCFtX3BpeGVsQnVmZmVyUmVzaXplcikKLSAgICAgICAgICAgIG1f
cGl4ZWxCdWZmZXJSZXNpemVyID0gc3RkOjptYWtlX3VuaXF1ZTxQaXhlbEJ1ZmZlclJlc2l6ZXI+
KHJlcXVlc3RlZFNpemUsIHByZWZlcmVkUGl4ZWxCdWZmZXJGb3JtYXQoKSk7Ci0KLSAgICAgICAg
cGl4ZWxCdWZmZXIgPSBtX3BpeGVsQnVmZmVyUmVzaXplci0+cmVzaXplKHBpeGVsQnVmZmVyLmdl
dCgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBtX3BpeGVsQnVmZmVyUmVzaXplciA9IG51bGxw
dHI7Ci0KLSAgICAgICAgYXV0byBwaXhlbEZvcm1hdFR5cGUgPSBDVlBpeGVsQnVmZmVyR2V0UGl4
ZWxGb3JtYXRUeXBlKHBpeGVsQnVmZmVyLmdldCgpKTsKLSAgICAgICAgaWYgKHBpeGVsRm9ybWF0
VHlwZSAhPSBwcmVmZXJlZFBpeGVsQnVmZmVyRm9ybWF0KCkpIHsKLSAgICAgICAgICAgIGlmICgh
bV9waXhlbEJ1ZmZlckNvbmZvcm1lcikgewotICAgICAgICAgICAgICAgIGF1dG8gcHJlZmVycmVk
RnJvbWF0ID0gcHJlZmVyZWRQaXhlbEJ1ZmZlckZvcm1hdCgpOwotICAgICAgICAgICAgICAgIGF1
dG8gY29uZm9ybWVyQXR0cmlidXRlcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJs
ZShudWxscHRyLCAwLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGlj
dGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0gICAgICAgICAgICAgICAgYXV0byB2aWRlb1R5cGUg
PSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKG51bGxwdHIsICBrQ0ZOdW1iZXJTSW50MzJUeXBlLCAg
JnByZWZlcnJlZEZyb21hdCkpOwotICAgICAgICAgICAgICAgIENGRGljdGlvbmFyeVNldFZhbHVl
KGNvbmZvcm1lckF0dHJpYnV0ZXMuZ2V0KCksIGtDVlBpeGVsQnVmZmVyUGl4ZWxGb3JtYXRUeXBl
S2V5LCB2aWRlb1R5cGUuZ2V0KCkpOwotCi0gICAgICAgICAgICAgICAgbV9waXhlbEJ1ZmZlckNv
bmZvcm1lciA9IHN0ZDo6bWFrZV91bmlxdWU8UGl4ZWxCdWZmZXJDb25mb3JtZXJDVj4oY29uZm9y
bWVyQXR0cmlidXRlcy5nZXQoKSk7Ci0gICAgICAgICAgICB9CisgICAgaWYgKCFtX2ltYWdlVHJh
bnNmZXJTZXNzaW9uKQorICAgICAgICBtX2ltYWdlVHJhbnNmZXJTZXNzaW9uID0gSW1hZ2VUcmFu
c2ZlclNlc3Npb25WVDo6Y3JlYXRlKHByZWZlcmVkUGl4ZWxCdWZmZXJGb3JtYXQoKSk7CisKKyAg
ICBhdXRvIHNhbXBsZVRpbWUgPSBNZWRpYVRpbWU6OmNyZWF0ZVdpdGhEb3VibGUoKGVsYXBzZWRU
aW1lKCkgKyAxMDBfbXMpLnNlY29uZHMoKSk7CisgICAgYXV0byBmcmFtZSA9IGdlbmVyYXRlRnJh
bWUoKTsKKyAgICBJbnRTaXplIGltYWdlU2l6ZTsKKyAgICBSZWZQdHI8TWVkaWFTYW1wbGU+IHNh
bXBsZSA9IFdURjo6c3dpdGNoT24oZnJhbWUsCisjaWYgSEFWRShJT1NVUkZBQ0UpCisgICAgICAg
IFt0aGlzLCBzYW1wbGVUaW1lLCAmaW1hZ2VTaXplXShSZXRhaW5QdHI8SU9TdXJmYWNlUmVmPiBz
dXJmYWNlKSAtPiBSZWZQdHI8TWVkaWFTYW1wbGU+IHsKKyAgICAgICAgICAgIGlmICghc3VyZmFj
ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICAgICAgaW1hZ2VT
aXplID0gSW50U2l6ZShJT1N1cmZhY2VHZXRXaWR0aChzdXJmYWNlLmdldCgpKSwgSU9TdXJmYWNl
R2V0SGVpZ2h0KHN1cmZhY2UuZ2V0KCkpKTsKKyAgICAgICAgICAgIHJldHVybiBtX2ltYWdlVHJh
bnNmZXJTZXNzaW9uLT5jcmVhdGVNZWRpYVNhbXBsZShzdXJmYWNlLmdldCgpLCBzYW1wbGVUaW1l
LCBpbWFnZVNpemUpOworICAgICAgICB9LAorI2VuZGlmCisgICAgICAgIFt0aGlzLCBzYW1wbGVU
aW1lLCAmaW1hZ2VTaXplXShSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UpIC0+IFJlZlB0cjxN
ZWRpYVNhbXBsZT4geworICAgICAgICAgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCi0gICAgICAgICAgICBwaXhlbEJ1ZmZlciA9IG1fcGl4ZWxCdWZmZXJD
b25mb3JtZXItPmNvbnZlcnQocGl4ZWxCdWZmZXIuZ2V0KCkpOworICAgICAgICAgICAgaW1hZ2VT
aXplID0gSW50U2l6ZShDR0ltYWdlR2V0V2lkdGgoaW1hZ2UuZ2V0KCkpLCBDR0ltYWdlR2V0SGVp
Z2h0KGltYWdlLmdldCgpKSk7CisgICAgICAgICAgICByZXR1cm4gbV9pbWFnZVRyYW5zZmVyU2Vz
c2lvbi0+Y3JlYXRlTWVkaWFTYW1wbGUoaW1hZ2UuZ2V0KCksIHNhbXBsZVRpbWUsIGltYWdlU2l6
ZSk7CiAgICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCFwaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0
dXJuOworICAgICk7CiAKLSAgICBtX2xhc3RTYW1wbGVCdWZmZXIgPSBzYW1wbGVCdWZmZXJGcm9t
UGl4ZWxCdWZmZXIocGl4ZWxCdWZmZXIuZ2V0KCkpOwotICAgIGlmICghbV9sYXN0U2FtcGxlQnVm
ZmVyKQorICAgIGlmICghc2FtcGxlKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICByZXR1cm47Ci0KLSAgICB2aWRlb1NhbXBsZUF2YWlsYWJsZShNZWRpYVNhbXBsZUFW
Rk9iakM6OmNyZWF0ZShtX2xhc3RTYW1wbGVCdWZmZXIuZ2V0KCkpKTsKLX0KLQotUmV0YWluUHRy
PENNU2FtcGxlQnVmZmVyUmVmPiBEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpzYW1wbGVCdWZm
ZXJGcm9tUGl4ZWxCdWZmZXIoQ1ZQaXhlbEJ1ZmZlclJlZiBwaXhlbEJ1ZmZlcikKLXsKLSAgICBp
ZiAoIXBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENNVGltZSBz
YW1wbGVUaW1lID0gQ01UaW1lTWFrZSgoKGVsYXBzZWRUaW1lKCkgKyAxMDBfbXMpICogMTAwKS5z
ZWNvbmRzKCksIDEwMCk7Ci0gICAgQ01TYW1wbGVUaW1pbmdJbmZvIHRpbWluZ0luZm8gPSB7IGtD
TVRpbWVJbnZhbGlkLCBzYW1wbGVUaW1lLCBzYW1wbGVUaW1lIH07Ci0KLSAgICBDTVZpZGVvRm9y
bWF0RGVzY3JpcHRpb25SZWYgZm9ybWF0RGVzY3JpcHRpb24gPSBudWxscHRyOwotICAgIGF1dG8g
c3RhdHVzID0gQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uQ3JlYXRlRm9ySW1hZ2VCdWZmZXIoa0NG
QWxsb2NhdG9yRGVmYXVsdCwgKENWSW1hZ2VCdWZmZXJSZWYpcGl4ZWxCdWZmZXIsICZmb3JtYXRE
ZXNjcmlwdGlvbik7Ci0gICAgaWYgKHN0YXR1cykgewotICAgICAgICBSRUxFQVNFX0xPRyhNZWRp
YSwgIkZhaWxlZCB0byBpbml0aWFsaXplIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbiB3aXRoIGVy
cm9yIGNvZGU6ICVkIiwgc3RhdGljX2Nhc3Q8aW50PihzdGF0dXMpKTsKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgfQogCi0gICAgQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlQnVmZmVyOwot
ICAgIHN0YXR1cyA9IENNU2FtcGxlQnVmZmVyQ3JlYXRlUmVhZHlXaXRoSW1hZ2VCdWZmZXIoa0NG
QWxsb2NhdG9yRGVmYXVsdCwgKENWSW1hZ2VCdWZmZXJSZWYpcGl4ZWxCdWZmZXIsIGZvcm1hdERl
c2NyaXB0aW9uLCAmdGltaW5nSW5mbywgJnNhbXBsZUJ1ZmZlcik7Ci0gICAgQ0ZSZWxlYXNlKGZv
cm1hdERlc2NyaXB0aW9uKTsKLSAgICBpZiAoc3RhdHVzKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9H
KE1lZGlhLCAiRmFpbGVkIHRvIGluaXRpYWxpemUgQ01TYW1wbGVCdWZmZXIgd2l0aCBlcnJvciBj
b2RlOiAlZCIsIHN0YXRpY19jYXN0PGludD4oc3RhdHVzKSk7Ci0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIH0KKyAgICBpZiAobV9pbnRyaW5zaWNTaXplICE9IGltYWdlU2l6ZSkKKyAgICAg
ICAgc2V0SW50cmluc2ljU2l6ZShpbWFnZVNpemUpOwogCi0gICAgcmV0dXJuIGFkb3B0Q0Yoc2Ft
cGxlQnVmZmVyKTsKKyAgICB2aWRlb1NhbXBsZUF2YWlsYWJsZSgqc2FtcGxlLmdldCgpKTsKIH0K
IAotI2lmIEhBVkUoSU9TVVJGQUNFKSAmJiBQTEFURk9STShNQUMpCi1zdGF0aWMgaW50MzJfdCBy
b3VuZFVwVG9NYWNyb2Jsb2NrTXVsdGlwbGUoaW50MzJfdCBzaXplKQotewotICAgIHJldHVybiAo
c2l6ZSArIDE1KSAmIH4xNTsKLX0KLQotUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJSZWY+IERpc3Bs
YXlDYXB0dXJlU291cmNlQ29jb2E6OnBpeGVsQnVmZmVyRnJvbUlPU3VyZmFjZShJT1N1cmZhY2VS
ZWYgc3VyZmFjZSkKLXsKLSAgICBpZiAoIW1fYnVmZmVyQXR0cmlidXRlcykgewotICAgICAgICBt
X2J1ZmZlckF0dHJpYnV0ZXMgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZU11dGFibGUobnVs
bHB0ciwgMCwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25h
cnlWYWx1ZUNhbGxCYWNrcykpOwotCi0gICAgICAgIGF1dG8gZm9ybWF0ID0gSU9TdXJmYWNlR2V0
UGl4ZWxGb3JtYXQoc3VyZmFjZSk7Ci0gICAgICAgIGlmIChmb3JtYXQgPT0ga0NWUGl4ZWxGb3Jt
YXRUeXBlXzQyMFlwQ2JDcjhCaVBsYW5hclZpZGVvUmFuZ2UgfHwgZm9ybWF0ID09IGtDVlBpeGVs
Rm9ybWF0VHlwZV80MjBZcENiQ3I4QmlQbGFuYXJGdWxsUmFuZ2UpIHsKLQotICAgICAgICAgICAg
Ly8gSWYgdGhlIHdpZHRoIHggaGVpZ2h0IGlzbid0IGEgbXVsdGlwbGUgb2YgMTYgeCAxNiBhbmQg
dGhlIHN1cmZhY2UgaGFzIGV4dHJhIG1lbW9yeSBpbiB0aGUgcGxhbmVzLCBzZXQgcGl4ZWwgYnVm
ZmVyIGF0dHJpYnV0ZXMgdG8gcmVmbGVjdCBpdC4KLSAgICAgICAgICAgIGF1dG8gd2lkdGggPSBJ
T1N1cmZhY2VHZXRXaWR0aChzdXJmYWNlKTsKLSAgICAgICAgICAgIGF1dG8gaGVpZ2h0ID0gSU9T
dXJmYWNlR2V0SGVpZ2h0KHN1cmZhY2UpOwotICAgICAgICAgICAgaW50MzJfdCBleHRlbmRlZFJp
Z2h0ID0gcm91bmRVcFRvTWFjcm9ibG9ja011bHRpcGxlKHdpZHRoKSAtIHdpZHRoOwotICAgICAg
ICAgICAgaW50MzJfdCBleHRlbmRlZEJvdHRvbSA9IHJvdW5kVXBUb01hY3JvYmxvY2tNdWx0aXBs
ZShoZWlnaHQpIC0gaGVpZ2h0OwotCi0gICAgICAgICAgICBpZiAoKElPU3VyZmFjZUdldEJ5dGVz
UGVyUm93T2ZQbGFuZShzdXJmYWNlLCAwKSA+PSB3aWR0aCArIGV4dGVuZGVkUmlnaHQpCi0gICAg
ICAgICAgICAgICAgJiYgKElPU3VyZmFjZUdldEJ5dGVzUGVyUm93T2ZQbGFuZShzdXJmYWNlLCAx
KSA+PSB3aWR0aCArIGV4dGVuZGVkUmlnaHQpCi0gICAgICAgICAgICAgICAgJiYgKElPU3VyZmFj
ZUdldEFsbG9jU2l6ZShzdXJmYWNlKSA+PSAoaGVpZ2h0ICsgZXh0ZW5kZWRCb3R0b20pICogSU9T
dXJmYWNlR2V0Qnl0ZXNQZXJSb3dPZlBsYW5lKHN1cmZhY2UsIDApICogMyAvIDIpKSB7Ci0gICAg
ICAgICAgICAgICAgYXV0byBjZkludCA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUobnVsbHB0ciwg
IGtDRk51bWJlckludFR5cGUsICAmZXh0ZW5kZWRSaWdodCkpOwotICAgICAgICAgICAgICAgIENG
RGljdGlvbmFyeVNldFZhbHVlKG1fYnVmZmVyQXR0cmlidXRlcy5nZXQoKSwga0NWUGl4ZWxCdWZm
ZXJFeHRlbmRlZFBpeGVsc1JpZ2h0S2V5LCBjZkludC5nZXQoKSk7Ci0gICAgICAgICAgICAgICAg
Y2ZJbnQgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKG51bGxwdHIsICBrQ0ZOdW1iZXJJbnRUeXBl
LCAgJmV4dGVuZGVkQm90dG9tKSk7Ci0gICAgICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFs
dWUobV9idWZmZXJBdHRyaWJ1dGVzLmdldCgpLCBrQ1ZQaXhlbEJ1ZmZlckV4dGVuZGVkUGl4ZWxz
Qm90dG9tS2V5LCBjZkludC5nZXQoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShtX2J1ZmZlckF0dHJpYnV0ZXMuZ2V0KCksIGtDVlBp
eGVsQnVmZmVyT3BlbkdMQ29tcGF0aWJpbGl0eUtleSwga0NGQm9vbGVhblRydWUpOwotICAgIH0K
LQotICAgIENWUGl4ZWxCdWZmZXJSZWYgcGl4ZWxCdWZmZXI7Ci0gICAgYXV0byBzdGF0dXMgPSBD
VlBpeGVsQnVmZmVyQ3JlYXRlV2l0aElPU3VyZmFjZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBzdXJm
YWNlLCBtX2J1ZmZlckF0dHJpYnV0ZXMuZ2V0KCksICZwaXhlbEJ1ZmZlcik7Ci0gICAgaWYgKHN0
YXR1cykgewotICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIkNWUGl4ZWxCdWZmZXJDcmVhdGVX
aXRoSU9TdXJmYWNlIGZhaWxlZCB3aXRoIGVycm9yIGNvZGU6ICVkIiwgc3RhdGljX2Nhc3Q8aW50
PihzdGF0dXMpKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgcmV0dXJu
IGFkb3B0Q0YocGl4ZWxCdWZmZXIpOwotfQotI2VuZGlmCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVTb3VyY2VDb2Nv
YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0Rpc3BsYXlDYXB0
dXJlU291cmNlQ29jb2EuaAppbmRleCBiZmU0MGI4NjA1ODFmMWNkYjkzMWIzNWNiZjQ3ZmYwNzJj
M2JhYWE1Li45YzA5ZWM4ZDMyMTQwMjRkNGU2YjY3ZDJiZjAyMmZkZDAzNGYzNWEyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNhcHR1
cmVTb3VyY2VDb2NvYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9EaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hLmgKQEAgLTI4LDEyICsyOCwxNCBAQAogI2lm
IEVOQUJMRShNRURJQV9TVFJFQU0pCiAKICNpbmNsdWRlICJDYXB0dXJlRGV2aWNlLmgiCisjaW5j
bHVkZSAiSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5oIgogI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFT
b3VyY2UuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCit0eXBlZGVmIHN0cnVjdCBDR0ltYWdlICpDR0ltYWdlUmVmOwogdHlwZWRlZiBz
dHJ1Y3QgX19DVkJ1ZmZlciAqQ1ZQaXhlbEJ1ZmZlclJlZjsKIHR5cGVkZWYgc3RydWN0IF9fSU9T
dXJmYWNlICpJT1N1cmZhY2VSZWY7CiAKQEAgLTQ0LDggKzQ2LDggQEAgY2xhc3MgTWVkaWFUaW1l
OwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDYXB0dXJlRGV2aWNlSW5mbzsKK2NsYXNz
IEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ7CiBjbGFzcyBQaXhlbEJ1ZmZlckNvbmZvcm1lckNWOwot
Y2xhc3MgUGl4ZWxCdWZmZXJSZXNpemVyOwogCiBjbGFzcyBEaXNwbGF5Q2FwdHVyZVNvdXJjZUNv
Y29hIDogcHVibGljIFJlYWx0aW1lTWVkaWFTb3VyY2UgewogcHVibGljOgpAQCAtNTQsNyArNTYs
OSBAQCBwcm90ZWN0ZWQ6CiAgICAgRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYShTdHJpbmcmJiBu
YW1lKTsKICAgICB2aXJ0dWFsIH5EaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hKCk7CiAKLSAgICB2
aXJ0dWFsIFJldGFpblB0cjxDVlBpeGVsQnVmZmVyUmVmPiBnZW5lcmF0ZUZyYW1lKCkgPSAwOwor
ICAgIHVzaW5nIERpc3BsYXlGcmFtZVR5cGUgPSBXVEY6OlZhcmlhbnQ8UmV0YWluUHRyPENHSW1h
Z2VSZWY+LCBSZXRhaW5QdHI8SU9TdXJmYWNlUmVmPj47CisgICAgdmlydHVhbCBEaXNwbGF5RnJh
bWVUeXBlIGdlbmVyYXRlRnJhbWUoKSA9IDA7CisKICAgICB2aXJ0dWFsIFJlYWx0aW1lTWVkaWFT
b3VyY2VTZXR0aW5nczo6RGlzcGxheVN1cmZhY2VUeXBlIHN1cmZhY2VUeXBlKCkgY29uc3QgPSAw
OwogCiAgICAgdm9pZCBzdGFydFByb2R1Y2luZ0RhdGEoKSBvdmVycmlkZTsKQEAgLTYyLDExICs2
Niw2IEBAIHByb3RlY3RlZDoKIAogICAgIFNlY29uZHMgZWxhcHNlZFRpbWUoKTsKIAotICAgIFJl
dGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4gc2FtcGxlQnVmZmVyRnJvbVBpeGVsQnVmZmVyKENW
UGl4ZWxCdWZmZXJSZWYpOwotI2lmIEhBVkUoSU9TVVJGQUNFKQotICAgIFJldGFpblB0cjxDVlBp
eGVsQnVmZmVyUmVmPiBwaXhlbEJ1ZmZlckZyb21JT1N1cmZhY2UoSU9TdXJmYWNlUmVmKTsKLSNl
bmRpZgotCiAgICAgdm9pZCBzZXR0aW5nc0RpZENoYW5nZShPcHRpb25TZXQ8UmVhbHRpbWVNZWRp
YVNvdXJjZVNldHRpbmdzOjpGbGFnPikgb3ZlcnJpZGU7CiAKICAgICBjb25zdCBJbnRTaXplJiBp
bnRyaW5zaWNTaXplKCkgY29uc3QgeyByZXR1cm4gbV9pbnRyaW5zaWNTaXplOyB9CkBAIC05Mywx
MCArOTIsNyBAQCBwcml2YXRlOgogICAgIFJldGFpblB0cjxDRk11dGFibGVEaWN0aW9uYXJ5UmVm
PiBtX2J1ZmZlckF0dHJpYnV0ZXM7CiAgICAgUnVuTG9vcDo6VGltZXI8RGlzcGxheUNhcHR1cmVT
b3VyY2VDb2NvYT4gbV90aW1lcjsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxQaXhlbEJ1ZmZlclJl
c2l6ZXI+IG1fcGl4ZWxCdWZmZXJSZXNpemVyOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxQaXhlbEJ1
ZmZlckNvbmZvcm1lckNWPiBtX3BpeGVsQnVmZmVyQ29uZm9ybWVyOwotICAgIFJldGFpblB0cjxD
VlBpeGVsQnVmZmVyUmVmPiBtX2xhc3RGdWxsU2l6ZWRQaXhlbEJ1ZmZlcjsKLSAgICBSZXRhaW5Q
dHI8Q01TYW1wbGVCdWZmZXJSZWY+IG1fbGFzdFNhbXBsZUJ1ZmZlcjsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VUcmFuc2ZlclNlc3Npb25WVD4gbV9pbWFnZVRyYW5zZmVyU2Vzc2lvbjsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01vY2tSZWFsdGltZVZpZGVvU291
cmNlTWFjLmgKaW5kZXggOWM3NGRkZTE4MzFlNDcxYTEwNzYwMWIwM2U2NjU0N2M3NjlhMDhlYS4u
ZThiZTgyZjY4ZjdjNjkxMTUyMTg4OTFjZDQ0Njk4M2RmNjk2MjZiNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01vY2tSZWFsdGltZVZpZGVvU291
cmNlTWFjLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01v
Y2tSZWFsdGltZVZpZGVvU291cmNlTWFjLmgKQEAgLTQzLDcgKzQzLDcgQEAgdHlwZWRlZiBzdHJ1
Y3QgX19DVlBpeGVsQnVmZmVyUG9vbCAqQ1ZQaXhlbEJ1ZmZlclBvb2xSZWY7CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotY2xhc3MgUGl4ZWxCdWZmZXJSZXNpemVyOworY2xhc3MgSW1hZ2VUcmFu
c2ZlclNlc3Npb25WVDsKIAogY2xhc3MgTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMgZmluYWwg
OiBwdWJsaWMgTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UsIHByaXZhdGUgT3JpZW50YXRpb25Ob3Rp
Zmllcjo6T2JzZXJ2ZXIgewogcHVibGljOgpAQCAtNTMsMTQgKzUzLDEwIEBAIHByaXZhdGU6CiAg
ICAgZnJpZW5kIGNsYXNzIE1vY2tSZWFsdGltZVZpZGVvU291cmNlOwogICAgIE1vY2tSZWFsdGlt
ZVZpZGVvU291cmNlTWFjKFN0cmluZyYmIGRldmljZUlELCBTdHJpbmcmJiBuYW1lLCBTdHJpbmcm
JiBoYXNoU2FsdCk7CiAKLSAgICBSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+IENNU2FtcGxl
QnVmZmVyRnJvbVBpeGVsQnVmZmVyKENWUGl4ZWxCdWZmZXJSZWYpOwotICAgIFJldGFpblB0cjxD
VlBpeGVsQnVmZmVyUmVmPiBwaXhlbEJ1ZmZlckZyb21DR0ltYWdlKENHSW1hZ2VSZWYpIGNvbnN0
OwotCiAgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0OwogICAgIHZvaWQg
dXBkYXRlU2FtcGxlQnVmZmVyKCkgZmluYWw7CiAgICAgdm9pZCBzZXR0aW5nc0RpZENoYW5nZShP
cHRpb25TZXQ8UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpGbGFnPikgZmluYWw7CiAgICAg
Ym9vbCBjYW5SZXNpemVWaWRlb0ZyYW1lcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0K
LSAgICB2b2lkIHNldFNpemVBbmRGcmFtZVJhdGVXaXRoUHJlc2V0KEludFNpemUsIGRvdWJsZSwg
UmVmUHRyPFZpZGVvUHJlc2V0PikgZmluYWw7CiAKICAgICB2b2lkIG9yaWVudGF0aW9uQ2hhbmdl
ZChpbnQgb3JpZW50YXRpb24pIGZpbmFsOwogICAgIHZvaWQgbW9uaXRvck9yaWVudGF0aW9uKE9y
aWVudGF0aW9uTm90aWZpZXImKSBmaW5hbDsKQEAgLTY4LDcgKzY0LDcgQEAgcHJpdmF0ZToKICAg
ICBtdXRhYmxlIFJldGFpblB0cjxDVlBpeGVsQnVmZmVyUG9vbFJlZj4gbV9idWZmZXJQb29sOwog
ICAgIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uIG1fZGV2aWNlT3JpZW50YXRpb24geyBNZWRp
YVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6Tm9uZSB9OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxQaXhl
bEJ1ZmZlckNvbmZvcm1lckNWPiBtX3BpeGVsQnVmZmVyQ29uZm9ybWVyOwotICAgIHN0ZDo6dW5p
cXVlX3B0cjxQaXhlbEJ1ZmZlclJlc2l6ZXI+IG1fcGl4ZWxCdWZmZXJSZXNpemVyOworICAgIHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZVRyYW5zZmVyU2Vzc2lvblZUPiBtX2ltYWdlVHJhbnNmZXJTZXNz
aW9uOwogICAgIEludFNpemUgbV9wcmVzZXRTaXplOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01vY2tSZWFsdGltZVZpZGVvU291cmNl
TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01vY2tSZWFs
dGltZVZpZGVvU291cmNlTWFjLm1tCmluZGV4IDIzYTE2OTYyYjUzOTQxODRjNWY2NTRlOWVjNWUx
ZDFmZTkwY2QyOWEuLjcyNTlkYjFlODVkMGYyZGY2MWU0NGViZjdlNWUzMDk0MTQ0ZmUzNjYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVh
bHRpbWVWaWRlb1NvdXJjZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW0KQEAgLTM0LDEwICszNCwx
MCBAQAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAjaW1wb3J0ICJHcmFwaGljc0NvbnRleHRD
Ry5oIgogI2ltcG9ydCAiSW1hZ2VCdWZmZXIuaCIKKyNpbXBvcnQgIkltYWdlVHJhbnNmZXJTZXNz
aW9uVlQuaCIKICNpbXBvcnQgIk1lZGlhQ29uc3RyYWludHMuaCIKICNpbXBvcnQgIk1lZGlhU2Ft
cGxlQVZGT2JqQy5oIgogI2ltcG9ydCAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbXBvcnQgIlBpeGVs
QnVmZmVyUmVzaXplci5oIgogI2ltcG9ydCAiUGxhdGZvcm1MYXllci5oIgogI2ltcG9ydCAiUmVh
bHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzLmgiCiAjaW1wb3J0ICJSZWFsdGltZVZpZGVvVXRpbGl0
aWVzLmgiCkBAIC01MSw4ICs1MSw2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1l
c3BhY2UgUEFMOwogCi1zdGF0aWMgY29uc3QgaW50IHZpZGVvU2FtcGxlUmF0ZSA9IDkwMDAwOwot
CiBDYXB0dXJlU291cmNlT3JFcnJvciBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZTo6Y3JlYXRlKFN0
cmluZyYmIGRldmljZUlELCBTdHJpbmcmJiBuYW1lLCBTdHJpbmcmJiBoYXNoU2FsdCwgY29uc3Qg
TWVkaWFDb25zdHJhaW50cyogY29uc3RyYWludHMpCiB7CiAjaWZuZGVmIE5ERUJVRwpAQCAtNzUs
OTggKzczLDI0IEBAIE1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjOjpNb2NrUmVhbHRpbWVWaWRl
b1NvdXJjZU1hYyhTdHJpbmcmJiBkZXZpY2VJRCwgU3RyaW5nCiB7CiB9CiAKLVJldGFpblB0cjxD
TVNhbXBsZUJ1ZmZlclJlZj4gTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWM6OkNNU2FtcGxlQnVm
ZmVyRnJvbVBpeGVsQnVmZmVyKENWUGl4ZWxCdWZmZXJSZWYgcGl4ZWxCdWZmZXIpCi17Ci0gICAg
aWYgKCFwaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgQ01U
aW1lIHNhbXBsZVRpbWUgPSBDTVRpbWVNYWtlKCgoZWxhcHNlZFRpbWUoKSArIDEwMF9tcykgKiB2
aWRlb1NhbXBsZVJhdGUpLnNlY29uZHMoKSwgdmlkZW9TYW1wbGVSYXRlKTsKLSAgICBDTVNhbXBs
ZVRpbWluZ0luZm8gdGltaW5nSW5mbyA9IHsga0NNVGltZUludmFsaWQsIHNhbXBsZVRpbWUsIHNh
bXBsZVRpbWUgfTsKLQotICAgIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvblJlZiBmb3JtYXREZXNj
cmlwdGlvbiA9IG51bGxwdHI7Ci0gICAgT1NTdGF0dXMgc3RhdHVzID0gQ01WaWRlb0Zvcm1hdERl
c2NyaXB0aW9uQ3JlYXRlRm9ySW1hZ2VCdWZmZXIoa0NGQWxsb2NhdG9yRGVmYXVsdCwgKENWSW1h
Z2VCdWZmZXJSZWYpcGl4ZWxCdWZmZXIsICZmb3JtYXREZXNjcmlwdGlvbik7Ci0gICAgaWYgKHN0
YXR1cyAhPSBub0VycikgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBpbml0aWFsaXpl
IENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbiB3aXRoIGVycm9yIGNvZGU6ICVkIiwgc3RhdHVzKTsK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgQ01TYW1wbGVCdWZmZXJSZWYg
c2FtcGxlQnVmZmVyOwotICAgIHN0YXR1cyA9IENNU2FtcGxlQnVmZmVyQ3JlYXRlUmVhZHlXaXRo
SW1hZ2VCdWZmZXIoa0NGQWxsb2NhdG9yRGVmYXVsdCwgKENWSW1hZ2VCdWZmZXJSZWYpcGl4ZWxC
dWZmZXIsIGZvcm1hdERlc2NyaXB0aW9uLCAmdGltaW5nSW5mbywgJnNhbXBsZUJ1ZmZlcik7Ci0g
ICAgQ0ZSZWxlYXNlKGZvcm1hdERlc2NyaXB0aW9uKTsKLSAgICBpZiAoc3RhdHVzICE9IG5vRXJy
KSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGluaXRpYWxpemUgQ01TYW1wbGVCdWZm
ZXIgd2l0aCBlcnJvciBjb2RlOiAlZCIsIHN0YXR1cyk7Ci0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIH0KLQotICAgIHJldHVybiBhZG9wdENGKHNhbXBsZUJ1ZmZlcik7Ci19Ci0KLVJldGFp
blB0cjxDVlBpeGVsQnVmZmVyUmVmPiBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYzo6cGl4ZWxC
dWZmZXJGcm9tQ0dJbWFnZShDR0ltYWdlUmVmIGltYWdlKSBjb25zdAotewotICAgIHN0YXRpYyBD
R0NvbG9yU3BhY2VSZWYgc1JHQkNvbG9yU3BhY2UgPSBzUkdCQ29sb3JTcGFjZVJlZigpOwotCi0g
ICAgQ0dTaXplIGltYWdlU2l6ZSA9IENHU2l6ZU1ha2UoQ0dJbWFnZUdldFdpZHRoKGltYWdlKSwg
Q0dJbWFnZUdldEhlaWdodChpbWFnZSkpOwotICAgIGlmICghbV9idWZmZXJQb29sKSB7Ci0gICAg
ICAgIENWUGl4ZWxCdWZmZXJQb29sUmVmIGJ1ZmZlclBvb2w7Ci0gICAgICAgIENGRGljdGlvbmFy
eVJlZiBzb3VyY2VQaXhlbEJ1ZmZlck9wdGlvbnMgPSAoX19icmlkZ2UgQ0ZEaWN0aW9uYXJ5UmVm
KSBAewotICAgICAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxCdWZmZXJQaXhl
bEZvcm1hdFR5cGVLZXkgOiBAKGtDVlBpeGVsRm9ybWF0VHlwZV8zMkFSR0IpLAotICAgICAgICAg
ICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxCdWZmZXJXaWR0aEtleSA6IEAoaW1hZ2VT
aXplLndpZHRoKSwKLSAgICAgICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsQnVm
ZmVySGVpZ2h0S2V5IDogQChpbWFnZVNpemUuaGVpZ2h0KSwKLSNpZiBQTEFURk9STShJT1MpCi0g
ICAgICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ1ZQaXhlbEZvcm1hdE9wZW5HTEVTQ29t
cGF0aWJpbGl0eSA6IEAoWUVTKSwKLSNlbHNlCi0gICAgICAgICAgICAoX19icmlkZ2UgTlNTdHJp
bmcgKilrQ1ZQaXhlbEJ1ZmZlck9wZW5HTENvbXBhdGliaWxpdHlLZXkgOiBAKFlFUyksCi0jZW5k
aWYKLSAgICAgICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsQnVmZmVySU9TdXJm
YWNlUHJvcGVydGllc0tleSA6IEB7LyplbXB0eSBkaWN0aW9uYXJ5Ki99Ci0gICAgICAgIH07Ci0K
LSAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIHBpeGVsQnVmZmVyUG9vbE9wdGlvbnMgPSAoX19icmlk
Z2UgQ0ZEaWN0aW9uYXJ5UmVmKSBAewotICAgICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilr
Q1ZQaXhlbEJ1ZmZlclBvb2xNaW5pbXVtQnVmZmVyQ291bnRLZXkgOiBAKDQpCi0gICAgICAgIH07
Ci0KLSAgICAgICAgQ1ZSZXR1cm4gc3RhdHVzID0gQ1ZQaXhlbEJ1ZmZlclBvb2xDcmVhdGUoa0NG
QWxsb2NhdG9yRGVmYXVsdCwgcGl4ZWxCdWZmZXJQb29sT3B0aW9ucywgc291cmNlUGl4ZWxCdWZm
ZXJPcHRpb25zLCAmYnVmZmVyUG9vbCk7Ci0gICAgICAgIGlmIChzdGF0dXMgIT0ga0NWUmV0dXJu
U3VjY2VzcykKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIG1fYnVmZmVy
UG9vbCA9IGFkb3B0Q0YoYnVmZmVyUG9vbCk7Ci0gICAgfQotCi0gICAgQ1ZQaXhlbEJ1ZmZlclJl
ZiBwaXhlbEJ1ZmZlcjsKLSAgICBDVlJldHVybiBzdGF0dXMgPSBDVlBpeGVsQnVmZmVyUG9vbENy
ZWF0ZVBpeGVsQnVmZmVyKG51bGxwdHIsIG1fYnVmZmVyUG9vbC5nZXQoKSwgJnBpeGVsQnVmZmVy
KTsKLSAgICBpZiAoc3RhdHVzICE9IGtDVlJldHVyblN1Y2Nlc3MpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgQ1ZQaXhlbEJ1ZmZlckxvY2tCYXNlQWRkcmVzcyhwaXhlbEJ1ZmZlciwg
MCk7Ci0gICAgdm9pZCogZGF0YSA9IENWUGl4ZWxCdWZmZXJHZXRCYXNlQWRkcmVzcyhwaXhlbEJ1
ZmZlcik7Ci0gICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUo
ZGF0YSwgaW1hZ2VTaXplLndpZHRoLCBpbWFnZVNpemUuaGVpZ2h0LCA4LCBDVlBpeGVsQnVmZmVy
R2V0Qnl0ZXNQZXJSb3cocGl4ZWxCdWZmZXIpLCBzUkdCQ29sb3JTcGFjZSwgKENHQml0bWFwSW5m
bykga0NHSW1hZ2VBbHBoYU5vbmVTa2lwRmlyc3QpKTsKLSAgICBDR0NvbnRleHREcmF3SW1hZ2Uo
Y29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpLCBD
R0ltYWdlR2V0SGVpZ2h0KGltYWdlKSksIGltYWdlKTsKLSAgICBDVlBpeGVsQnVmZmVyVW5sb2Nr
QmFzZUFkZHJlc3MocGl4ZWxCdWZmZXIsIDApOwotCi0gICAgcmV0dXJuIGFkb3B0Q0YocGl4ZWxC
dWZmZXIpOwotfQotCiB2b2lkIE1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjOjp1cGRhdGVTYW1w
bGVCdWZmZXIoKQogewogICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSB0aGlzLT5pbWFnZUJ1ZmZlcigp
OwogICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gcGl4
ZWxCdWZmZXIgPSBwaXhlbEJ1ZmZlckZyb21DR0ltYWdlKGltYWdlQnVmZmVyLT5jb3B5SW1hZ2Uo
KS0+bmF0aXZlSW1hZ2UoKS5nZXQoKSk7Ci0gICAgaWYgKG1fcGl4ZWxCdWZmZXJSZXNpemVyKQot
ICAgICAgICBwaXhlbEJ1ZmZlciA9IG1fcGl4ZWxCdWZmZXJSZXNpemVyLT5yZXNpemUocGl4ZWxC
dWZmZXIuZ2V0KCkpOwotICAgIGVsc2UgewotICAgICAgICBpZiAoIW1fcGl4ZWxCdWZmZXJDb25m
b3JtZXIpIHsKLSAgICAgICAgICAgIG1fcGl4ZWxCdWZmZXJDb25mb3JtZXIgPSBzdGQ6Om1ha2Vf
dW5pcXVlPFBpeGVsQnVmZmVyQ29uZm9ybWVyQ1Y+KChfX2JyaWRnZSBDRkRpY3Rpb25hcnlSZWYp
QHsKLSAgICAgICAgICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ1ZQaXhlbEJ1ZmZlclBp
eGVsRm9ybWF0VHlwZUtleTogQChwcmVmZXJlZFBpeGVsQnVmZmVyRm9ybWF0KCkpCi0gICAgICAg
ICAgICB9KTsKLSAgICAgICAgfQotCi0gICAgICAgIHBpeGVsQnVmZmVyID0gbV9waXhlbEJ1ZmZl
ckNvbmZvcm1lci0+Y29udmVydChwaXhlbEJ1ZmZlci5nZXQoKSk7Ci0gICAgfQotICAgIGF1dG8g
c2FtcGxlQnVmZmVyID0gQ01TYW1wbGVCdWZmZXJGcm9tUGl4ZWxCdWZmZXIocGl4ZWxCdWZmZXIu
Z2V0KCkpOworICAgIGlmICghbV9pbWFnZVRyYW5zZmVyU2Vzc2lvbikKKyAgICAgICAgbV9pbWFn
ZVRyYW5zZmVyU2Vzc2lvbiA9IEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNyZWF0ZShwcmVmZXJl
ZFBpeGVsQnVmZmVyRm9ybWF0KCkpOworICAgIGlmICghbV9pbWFnZVRyYW5zZmVyU2Vzc2lvbikK
KyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBzYW1wbGVUaW1lID0gTWVkaWFUaW1lOjpjcmVh
dGVXaXRoRG91YmxlKChlbGFwc2VkVGltZSgpICsgMTAwX21zKS5zZWNvbmRzKCkpOworICAgIGF1
dG8gc2FtcGxlQnVmZmVyID0gbV9pbWFnZVRyYW5zZmVyU2Vzc2lvbi0+Y3JlYXRlTWVkaWFTYW1w
bGUoaW1hZ2VCdWZmZXItPmNvcHlJbWFnZSgpLT5uYXRpdmVJbWFnZSgpLmdldCgpLCBzYW1wbGVU
aW1lLCBzaXplKCksIG1fZGV2aWNlT3JpZW50YXRpb24pOworICAgIGlmICghc2FtcGxlQnVmZmVy
KQorICAgICAgICByZXR1cm47CiAKICAgICAvLyBXZSB1c2UgbV9kZXZpY2VPcmllbnRhdGlvbiB0
byBlbXVsYXRlIHNlbnNvciBvcmllbnRhdGlvbgotICAgIGRpc3BhdGNoTWVkaWFTYW1wbGVUb09i
c2VydmVycyhNZWRpYVNhbXBsZUFWRk9iakM6OmNyZWF0ZShzYW1wbGVCdWZmZXIuZ2V0KCksIG1f
ZGV2aWNlT3JpZW50YXRpb24pKTsKKyAgICBkaXNwYXRjaE1lZGlhU2FtcGxlVG9PYnNlcnZlcnMo
KnNhbXBsZUJ1ZmZlci5nZXQoKSk7CiB9CiAKIHZvaWQgTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VN
YWM6OnNldHRpbmdzRGlkQ2hhbmdlKE9wdGlvblNldDxSZWFsdGltZU1lZGlhU291cmNlU2V0dGlu
Z3M6OkZsYWc+IHNldHRpbmdzKQpAQCAtMjAzLDIxICsxMjcsNiBAQCB2b2lkIE1vY2tSZWFsdGlt
ZVZpZGVvU291cmNlTWFjOjptb25pdG9yT3JpZW50YXRpb24oT3JpZW50YXRpb25Ob3RpZmllciYg
bm90aWZpZQogICAgIG9yaWVudGF0aW9uQ2hhbmdlZChub3RpZmllci5vcmllbnRhdGlvbigpKTsK
IH0KIAotdm9pZCBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYzo6c2V0U2l6ZUFuZEZyYW1lUmF0
ZVdpdGhQcmVzZXQoSW50U2l6ZSByZXF1ZXN0ZWRTaXplLCBkb3VibGUsIFJlZlB0cjxWaWRlb1By
ZXNldD4gcHJlc2V0KQotewotICAgIGlmICghcHJlc2V0KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAocHJlc2V0LT5zaXplICE9IHJlcXVlc3RlZFNpemUpIHsKLSAgICAgICAgaWYgKG1fcGl4
ZWxCdWZmZXJSZXNpemVyICYmICFtX3BpeGVsQnVmZmVyUmVzaXplci0+Y2FuUmVzaXplVG8ocmVx
dWVzdGVkU2l6ZSkpCi0gICAgICAgICAgICBtX3BpeGVsQnVmZmVyUmVzaXplciA9IG51bGxwdHI7
Ci0KLSAgICAgICAgaWYgKCFtX3BpeGVsQnVmZmVyUmVzaXplcikKLSAgICAgICAgICAgIG1fcGl4
ZWxCdWZmZXJSZXNpemVyID0gc3RkOjptYWtlX3VuaXF1ZTxQaXhlbEJ1ZmZlclJlc2l6ZXI+KHJl
cXVlc3RlZFNpemUsIHByZWZlcmVkUGl4ZWxCdWZmZXJGb3JtYXQoKSk7Ci0gICAgfSBlbHNlCi0g
ICAgICAgIG1fcGl4ZWxCdWZmZXJSZXNpemVyID0gbnVsbHB0cjsKLX0KLQogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9TY3JlZW5EaXNwbGF5Q2Fw
dHVyZVNvdXJjZU1hYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L1NjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLmgKaW5kZXggZWM5MjBmMDI0YTU2ODk5MjAw
OTQ0OTQ0NDdkNzJiZWU2MzI5MGRjNy4uOWM4Zjg3MWMzZDFmOWM2OWMyNTdhNmJkOTllYTlmNDQy
NzIwZDllZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
bWFjL1NjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1NjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLmgK
QEAgLTU2LDcgKzU2LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZnJhbWVBdmFpbGFibGUoQ0dE
aXNwbGF5U3RyZWFtRnJhbWVTdGF0dXMsIHVpbnQ2NF90LCBJT1N1cmZhY2VSZWYsIENHRGlzcGxh
eVN0cmVhbVVwZGF0ZVJlZik7CiAKLSAgICBSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gZ2Vu
ZXJhdGVGcmFtZSgpIGZpbmFsOworICAgIERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OkRpc3Bs
YXlGcmFtZVR5cGUgZ2VuZXJhdGVGcmFtZSgpIGZpbmFsOwogICAgIFJlYWx0aW1lTWVkaWFTb3Vy
Y2VTZXR0aW5nczo6RGlzcGxheVN1cmZhY2VUeXBlIHN1cmZhY2VUeXBlKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpEaXNwbGF5U3VyZmFjZVR5cGU6
Ok1vbml0b3I7IH0KIAogICAgIHZvaWQgc3RhcnRQcm9kdWNpbmdEYXRhKCkgZmluYWw7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvU2NyZWVuRGlz
cGxheUNhcHR1cmVTb3VyY2VNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMubW0KaW5kZXggYTIzOGYyOGY5
NzViODQwODM0Mjc3ZThiMGMyZGVkYzE5Y2FiZTQ0Ny4uNGNiNGQxM2NhNTAyZjQzZDIxMmJkODRh
MWQ3ZTcwYjhhZWUyYTJiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbWFjL1NjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9TY3JlZW5EaXNwbGF5Q2FwdHVyZVNv
dXJjZU1hYy5tbQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgogI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3Vy
Y2VTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlJlYWx0aW1lVmlkZW9VdGlsaXRpZXMuaCIKIAogI2lu
Y2x1ZGUgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCiAKQEAgLTE2Niw3ICsxNjcsNyBAQCBib29sIFNj
cmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpjcmVhdGVEaXNwbGF5U3RyZWFtKCkKICAgICAg
ICAgfSk7CiAKICAgICAgICAgYXV0byBzaXplID0gZnJhbWVTaXplKCk7Ci0gICAgICAgIG1fZGlz
cGxheVN0cmVhbSA9IGFkb3B0Q0YoQ0dEaXNwbGF5U3RyZWFtQ3JlYXRlV2l0aERpc3BhdGNoUXVl
dWUobV9kaXNwbGF5SUQsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwga0NWUGl4ZWxGb3Jt
YXRUeXBlXzQyMFlwQ2JDcjhQbGFuYXIsIHN0cmVhbU9wdGlvbnMuZ2V0KCksIG1fY2FwdHVyZVF1
ZXVlLmdldCgpLCBtX2ZyYW1lQXZhaWxhYmxlQmxvY2spKTsKKyAgICAgICAgbV9kaXNwbGF5U3Ry
ZWFtID0gYWRvcHRDRihDR0Rpc3BsYXlTdHJlYW1DcmVhdGVXaXRoRGlzcGF0Y2hRdWV1ZShtX2Rp
c3BsYXlJRCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCBwcmVmZXJlZFBpeGVsQnVmZmVy
Rm9ybWF0KCksIHN0cmVhbU9wdGlvbnMuZ2V0KCksIG1fY2FwdHVyZVF1ZXVlLmdldCgpLCBtX2Zy
YW1lQXZhaWxhYmxlQmxvY2spKTsKICAgICAgICAgaWYgKCFtX2Rpc3BsYXlTdHJlYW0pIHsKICAg
ICAgICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhLCAiU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VN
YWM6OmNyZWF0ZURpc3BsYXlTdHJlYW06IENHRGlzcGxheVN0cmVhbUNyZWF0ZSBmYWlsZWQiKTsK
ICAgICAgICAgICAgIGNhcHR1cmVGYWlsZWQoKTsKQEAgLTIwNSwxOCArMjA2LDE1IEBAIHZvaWQg
U2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OnN0b3BQcm9kdWNpbmdEYXRhKCkKICAgICBt
X2lzUnVubmluZyA9IGZhbHNlOwogfQogCi1SZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gU2Ny
ZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OmdlbmVyYXRlRnJhbWUoKQorRGlzcGxheUNhcHR1
cmVTb3VyY2VDb2NvYTo6RGlzcGxheUZyYW1lVHlwZSBTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJj
ZU1hYzo6Z2VuZXJhdGVGcmFtZSgpCiB7Ci0gICAgaWYgKCFtX2N1cnJlbnRGcmFtZS5pb1N1cmZh
Y2UoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KICAgICBEaXNwbGF5U3VyZmFjZSBjdXJy
ZW50RnJhbWU7CiAgICAgewogICAgICAgICBMb2NrSG9sZGVyIGxvY2sobV9jdXJyZW50RnJhbWVN
dXRleCk7CiAgICAgICAgIGN1cnJlbnRGcmFtZSA9IG1fY3VycmVudEZyYW1lLmlvU3VyZmFjZSgp
OwogICAgIH0KIAotICAgIHJldHVybiBwaXhlbEJ1ZmZlckZyb21JT1N1cmZhY2UoY3VycmVudEZy
YW1lLmlvU3VyZmFjZSgpKTsKKyAgICByZXR1cm4gRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6
RGlzcGxheUZyYW1lVHlwZSB7IFJldGFpblB0cjxJT1N1cmZhY2VSZWY+IHsgY3VycmVudEZyYW1l
LmlvU3VyZmFjZSgpIH0gfTsKIH0KIAogdm9pZCBTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1h
Yzo6c3RhcnREaXNwbGF5U3RyZWFtKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9XaW5kb3dEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1dpbmRvd0Rpc3BsYXlDYXB0dXJl
U291cmNlTWFjLmgKaW5kZXggMWM0ZDM3NjBmODhjZmY1ZmE3NGNkMjcwNjYwM2U2OGExZDNkNmRk
Zi4uMmQxYTY2ZTAzMTJiYWRjYTg5ZDliY2YwYjgwNjZlZDQzMmRiMmQ1NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1dpbmRvd0Rpc3BsYXlDYXB0
dXJlU291cmNlTWFjLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
bWFjL1dpbmRvd0Rpc3BsYXlDYXB0dXJlU291cmNlTWFjLmgKQEAgLTQ5LDExICs0OSwxMCBAQCBw
cml2YXRlOgogICAgIFdpbmRvd0Rpc3BsYXlDYXB0dXJlU291cmNlTWFjKHVpbnQzMl90LCBTdHJp
bmcmJik7CiAgICAgdmlydHVhbCB+V2luZG93RGlzcGxheUNhcHR1cmVTb3VyY2VNYWMoKSA9IGRl
ZmF1bHQ7CiAKLSAgICBSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gZ2VuZXJhdGVGcmFtZSgp
IGZpbmFsOworICAgIERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OkRpc3BsYXlGcmFtZVR5cGUg
Z2VuZXJhdGVGcmFtZSgpIGZpbmFsOwogICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6
RGlzcGxheVN1cmZhY2VUeXBlIHN1cmZhY2VUeXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gUmVh
bHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpEaXNwbGF5U3VyZmFjZVR5cGU6OldpbmRvdzsgfQog
CiAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IHdpbmRvd0ltYWdlKCk7Ci0gICAgUmV0YWluUHRy
PENWUGl4ZWxCdWZmZXJSZWY+IHBpeGVsQnVmZmVyRnJvbUNHSW1hZ2UoQ0dJbWFnZVJlZik7CiAK
ICAgICBJbnRTaXplIG1fd2luZG93U2l6ZTsKICAgICBDR1dpbmRvd0lEIG1fd2luZG93SUQgeyAw
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMv
V2luZG93RGlzcGxheUNhcHR1cmVTb3VyY2VNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvV2luZG93RGlzcGxheUNhcHR1cmVTb3VyY2VNYWMubW0KaW5kZXgg
MWQ2YTE3Y2Q0MTM4ZmQxZDU2NzJiZjkzMjkzNzA0YmYxMDE0MTkyMy4uOWM1ZDVkNDMxMmQ2ZDUz
Njg0Yzg1ZjJhNzgwZDgzYjMyNjk1MTU4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vbWFjL1dpbmRvd0Rpc3BsYXlDYXB0dXJlU291cmNlTWFjLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9XaW5kb3dEaXNwbGF5
Q2FwdHVyZVNvdXJjZU1hYy5tbQpAQCAtMTM5LDY5ICsxMzksOSBAQCBSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gV2luZG93RGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OndpbmRvd0ltYWdlKCkKICAgICBy
ZXR1cm4gaW1hZ2U7CiB9CiAKLVJldGFpblB0cjxDVlBpeGVsQnVmZmVyUmVmPiBXaW5kb3dEaXNw
bGF5Q2FwdHVyZVNvdXJjZU1hYzo6Z2VuZXJhdGVGcmFtZSgpCitEaXNwbGF5Q2FwdHVyZVNvdXJj
ZUNvY29hOjpEaXNwbGF5RnJhbWVUeXBlIFdpbmRvd0Rpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpn
ZW5lcmF0ZUZyYW1lKCkKIHsKLSAgICBhdXRvIGltYWdlID0gd2luZG93SW1hZ2UoKTsKLSAgICBp
ZiAoIWltYWdlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmIChtX2xhc3RJbWFn
ZSAmJiBtX2xhc3RQaXhlbEJ1ZmZlciAmJiBDRkVxdWFsKG1fbGFzdEltYWdlLmdldCgpLCBpbWFn
ZS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBtX2xhc3RQaXhlbEJ1ZmZlci5nZXQoKTsKLQotICAg
IG1fbGFzdEltYWdlID0gV1RGTW92ZShpbWFnZSk7Ci0gICAgcmV0dXJuIHBpeGVsQnVmZmVyRnJv
bUNHSW1hZ2UobV9sYXN0SW1hZ2UuZ2V0KCkpOwotfQotCi1SZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZl
clJlZj4gV2luZG93RGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OnBpeGVsQnVmZmVyRnJvbUNHSW1h
Z2UoQ0dJbWFnZVJlZiBpbWFnZSkKLXsKLSAgICBzdGF0aWMgQ0dDb2xvclNwYWNlUmVmIHNSR0JD
b2xvclNwYWNlID0gc1JHQkNvbG9yU3BhY2VSZWYoKTsKLQotICAgIGF1dG8gaW1hZ2VTaXplID0g
SW50U2l6ZShDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpLCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKSk7
Ci0gICAgaWYgKGltYWdlU2l6ZSAhPSBpbnRyaW5zaWNTaXplKCkpIHsKLSAgICAgICAgbV9idWZm
ZXJQb29sID0gbnVsbHB0cjsKLSAgICAgICAgbV9sYXN0SW1hZ2UgPSBudWxscHRyOwotICAgICAg
ICBtX2xhc3RQaXhlbEJ1ZmZlciA9IG51bGxwdHI7Ci0gICAgfQotCi0gICAgaWYgKCFtX2J1ZmZl
clBvb2wpIHsKLSAgICAgICAgQ1ZQaXhlbEJ1ZmZlclBvb2xSZWYgYnVmZmVyUG9vbDsKLSAgICAg
ICAgQ0ZEaWN0aW9uYXJ5UmVmIHNvdXJjZVBpeGVsQnVmZmVyT3B0aW9ucyA9IChfX2JyaWRnZSBD
RkRpY3Rpb25hcnlSZWYpIEB7Ci0gICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVs
QnVmZmVyUGl4ZWxGb3JtYXRUeXBlS2V5IDogQChrQ1ZQaXhlbEZvcm1hdFR5cGVfMzJBUkdCKSwK
LSAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxCdWZmZXJXaWR0aEtleSA6IEAo
aW1hZ2VTaXplLndpZHRoKCkpLAotICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ1ZQaXhl
bEJ1ZmZlckhlaWdodEtleSA6IEAoaW1hZ2VTaXplLmhlaWdodCgpKSwKLSNpZiBQTEFURk9STShJ
T1MpCi0gICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsRm9ybWF0T3BlbkdMRVND
b21wYXRpYmlsaXR5IDogQChZRVMpLAotI2Vsc2UKLSAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5n
ICopa0NWUGl4ZWxCdWZmZXJPcGVuR0xDb21wYXRpYmlsaXR5S2V5IDogQChZRVMpLAotI2VuZGlm
Ci0gICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsQnVmZmVySU9TdXJmYWNlUHJv
cGVydGllc0tleSA6IEB7IC8qZW1wdHkgZGljdGlvbmFyeSovIH0KLSAgICB9OwotCi0gICAgICAg
IENGRGljdGlvbmFyeVJlZiBwaXhlbEJ1ZmZlclBvb2xPcHRpb25zID0gKF9fYnJpZGdlIENGRGlj
dGlvbmFyeVJlZikgQHsKLSAgICAgICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVs
QnVmZmVyUG9vbE1pbmltdW1CdWZmZXJDb3VudEtleSA6IEAoMykKLSAgICAgICAgfTsKLQotICAg
ICAgICBDVlJldHVybiBzdGF0dXMgPSBDVlBpeGVsQnVmZmVyUG9vbENyZWF0ZShrQ0ZBbGxvY2F0
b3JEZWZhdWx0LCBwaXhlbEJ1ZmZlclBvb2xPcHRpb25zLCBzb3VyY2VQaXhlbEJ1ZmZlck9wdGlv
bnMsICZidWZmZXJQb29sKTsKLSAgICAgICAgaWYgKHN0YXR1cyAhPSBrQ1ZSZXR1cm5TdWNjZXNz
KQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgbV9idWZmZXJQb29sID0g
YWRvcHRDRihidWZmZXJQb29sKTsKLSAgICAgICAgc2V0SW50cmluc2ljU2l6ZShpbWFnZVNpemUp
OwotICAgIH0KLQotICAgIENWUGl4ZWxCdWZmZXJSZWYgcGl4ZWxCdWZmZXI7Ci0gICAgQ1ZSZXR1
cm4gc3RhdHVzID0gQ1ZQaXhlbEJ1ZmZlclBvb2xDcmVhdGVQaXhlbEJ1ZmZlcihudWxscHRyLCBt
X2J1ZmZlclBvb2wuZ2V0KCksICZwaXhlbEJ1ZmZlcik7Ci0gICAgaWYgKHN0YXR1cyAhPSBrQ1ZS
ZXR1cm5TdWNjZXNzKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENWUGl4ZWxCdWZm
ZXJMb2NrQmFzZUFkZHJlc3MocGl4ZWxCdWZmZXIsIDApOwotICAgIHZvaWQqIGRhdGEgPSBDVlBp
eGVsQnVmZmVyR2V0QmFzZUFkZHJlc3MocGl4ZWxCdWZmZXIpOwotICAgIGF1dG8gY29udGV4dCA9
IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKGRhdGEsIGltYWdlU2l6ZS53aWR0aCgpLCBp
bWFnZVNpemUuaGVpZ2h0KCksIDgsIENWUGl4ZWxCdWZmZXJHZXRCeXRlc1BlclJvdyhwaXhlbEJ1
ZmZlciksIHNSR0JDb2xvclNwYWNlLCAoQ0dCaXRtYXBJbmZvKSBrQ0dJbWFnZUFscGhhTm9uZVNr
aXBGaXJzdCkpOwotICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBDR1JlY3RN
YWtlKDAsIDAsIENHSW1hZ2VHZXRXaWR0aChpbWFnZSksIENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2Up
KSwgaW1hZ2UpOwotICAgIENWUGl4ZWxCdWZmZXJVbmxvY2tCYXNlQWRkcmVzcyhwaXhlbEJ1ZmZl
ciwgMCk7Ci0KLSAgICBtX2xhc3RQaXhlbEJ1ZmZlciA9IGFkb3B0Q0YocGl4ZWxCdWZmZXIpOwot
ICAgIHJldHVybiBtX2xhc3RQaXhlbEJ1ZmZlcjsKKyAgICByZXR1cm4gRGlzcGxheUNhcHR1cmVT
b3VyY2VDb2NvYTo6RGlzcGxheUZyYW1lVHlwZSB7IFJldGFpblB0cjxDR0ltYWdlUmVmPiB7IHdp
bmRvd0ltYWdlKCkgfSB9OwogfQogCiBzdGQ6Om9wdGlvbmFsPENhcHR1cmVEZXZpY2U+IFdpbmRv
d0Rpc3BsYXlDYXB0dXJlU291cmNlTWFjOjp3aW5kb3dDYXB0dXJlRGV2aWNlV2l0aFBlcnNpc3Rl
bnRJRChjb25zdCBTdHJpbmcmIGlkU3RyaW5nKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNwcAppbmRleCA2MjI0N2Vk
NTZkZDBmZTcyYmUwMDM5MTQ0YjhmMDQ2ZjUwZDk2ZjRkLi43YWI3YTIxNTRlM2FlMmE0MWM3ZDEy
YzhjMDc0ZDIyMWY4Nzg3NmMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
b2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNwcApAQCAtMTI2LDYgKzEyNiw3IEBA
IGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmIE1vY2tSZWFsdGltZVZpZGVv
U291cmNlOjpjYXBhYmlsaXRpZXMoKQogICAgICAgICAgICAgY2FwYWJpbGl0aWVzLmFkZEZhY2lu
Z01vZGUoV1RGOjpnZXQ8TW9ja0NhbWVyYVByb3BlcnRpZXM+KG1fZGV2aWNlLnByb3BlcnRpZXMp
LmZhY2luZ01vZGUpOwogICAgICAgICAgICAgY2FwYWJpbGl0aWVzLnNldERldmljZUlkKGhhc2hl
ZElkKCkpOwogICAgICAgICAgICAgdXBkYXRlQ2FwYWJpbGl0aWVzKGNhcGFiaWxpdGllcyk7Cisg
ICAgICAgICAgICBjYXBhYmlsaXRpZXMuc2V0RGV2aWNlSWQoaGFzaGVkSWQoKSk7CiAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICBjYXBhYmlsaXRpZXMuc2V0V2lkdGgoQ2FwYWJpbGl0eVZh
bHVlT3JSYW5nZSg3MiwgMjg4MCkpOwogICAgICAgICAgICAgY2FwYWJpbGl0aWVzLnNldEhlaWdo
dChDYXBhYmlsaXR5VmFsdWVPclJhbmdlKDQ1LCAxODAwKSk7CkBAIC0xNTksMTQgKzE2MCwxNCBA
QCBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MmIE1vY2tSZWFsdGltZVZpZGVvU291
cmNlOjpzZXR0aW5ncygpCiAgICAgICAgIHNldHRpbmdzLnNldEFzcGVjdFJhdGlvKGFzcGVjdFJh
dGlvKCkpOwogCiAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0cmFpbnRzIHN1
cHBvcnRlZENvbnN0cmFpbnRzOwotICAgIHN1cHBvcnRlZENvbnN0cmFpbnRzLnNldFN1cHBvcnRz
RGV2aWNlSWQodHJ1ZSk7CiAgICAgc3VwcG9ydGVkQ29uc3RyYWludHMuc2V0U3VwcG9ydHNGcmFt
ZVJhdGUodHJ1ZSk7CiAgICAgc3VwcG9ydGVkQ29uc3RyYWludHMuc2V0U3VwcG9ydHNXaWR0aCh0
cnVlKTsKICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0hlaWdodCh0cnVlKTsK
ICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0FzcGVjdFJhdGlvKHRydWUpOwot
ICAgIGlmIChtb2NrQ2FtZXJhKCkpCisgICAgaWYgKG1vY2tDYW1lcmEoKSkgeworICAgICAgICBz
dXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0RldmljZUlkKHRydWUpOwogICAgICAgICBz
dXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0ZhY2luZ01vZGUodHJ1ZSk7Ci0gICAgZWxz
ZSB7CisgICAgfSBlbHNlIHsKICAgICAgICAgc3VwcG9ydGVkQ29uc3RyYWludHMuc2V0U3VwcG9y
dHNEaXNwbGF5U3VyZmFjZSh0cnVlKTsKICAgICAgICAgc3VwcG9ydGVkQ29uc3RyYWludHMuc2V0
U3VwcG9ydHNMb2dpY2FsU3VyZmFjZSh0cnVlKTsKICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>352596</attachid>
            <date>2018-10-17 11:27:50 -0700</date>
            <delta_ts>2018-10-17 13:01:28 -0700</delta_ts>
            <desc>Patch for landing.</desc>
            <filename>bug-190519-20181017112750.patch</filename>
            <type>text/plain</type>
            <size>85932</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM3MjIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWE0NmI3NzY0NzJmODlk
ZTBlYWNjMTBlNjZmNTc0M2ZjMDhlNDQwOC4uYzMzYjIwZDMyNWI1ZjBjMzE4M2E4YmY2NmM5MWE4
NDk0MjE1NjBlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgwIEBACisyMDE4LTEwLTE2ICBFcmlj
IENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNZWRpYVN0cmVh
bV0gQ29uc29saWRhdGUgYWxsIGltYWdlIGNvbnZlcnNpb24gYW5kIHJlc2l6aW5nIGludG8gb25l
IGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
OTA1MTkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQ1MjI0MzA3PgorCisgICAgICAgIFJldmll
d2VkIGJ5IFlvdWVubiBGYWJsZXQuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBmdW5jdGlv
bmFsIGNoYW5nZS4KKworICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6IEFkZCBJbWFnZVRyYW5z
ZmVyU2Vzc2lvblZULgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajogRGl0dG8uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9NZWRpYVNhbXBsZS5oOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFTYW1wbGU6OnZpZGVvUGl4ZWxGb3JtYXQgY29uc3QpOiBOZXcuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9WaWRlb1Rvb2xib3hTb2Z0TGluay5jcHA6IEFkZCBuZXcg
a1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5IGtleXMuCisgICAgICAgICogcGxhdGZvcm0vY29jb2Ev
VmlkZW9Ub29sYm94U29mdExpbmsuaDoKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL01lZGlhU2FtcGxlQVZGT2JqQy5oOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVhdGUpOiBSZW1vdmUgdW5pbXBsZW1lbnRlZCB2YXJpYW50
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU2Ft
cGxlQVZGT2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2FtcGxlQVZGT2JqQzo6dmlk
ZW9QaXhlbEZvcm1hdCBjb25zdCk6IE5ldy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2N2L0ltYWdlVHJhbnNmZXJTZXNzaW9uVlQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2N2L0ltYWdlVHJhbnNmZXJTZXNzaW9uVlQubW06IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6SW1hZ2VUcmFuc2ZlclNlc3Npb25WVCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjp+SW1hZ2VUcmFuc2ZlclNlc3Np
b25WVCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpzZXRTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNyZWF0ZVBpeGVs
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNyZWF0
ZUNNU2FtcGxlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OnJvdW5kVXBUb01hY3JvYmxvY2tN
dWx0aXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjppb1N1
cmZhY2VQaXhlbEJ1ZmZlckNyZWF0aW9uT3B0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVhdGVNZWRpYVNhbXBsZSk6CisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jdi9QaXhlbEJ1ZmZlclJlc2l6ZXIuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jdi9QaXhlbEJ1ZmZlclJlc2l6ZXIubW06IFJlbW92ZWQuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZWaWRlb0NhcHR1cmVTb3VyY2Uu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZWaWRlb0NhcHR1cmVTb3Vy
Y2UubW06CisgICAgICAgIChXZWJDb3JlOjpBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6cHJlZmVyc1By
ZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6Y2FwdHVyZU91
dHB1dERpZE91dHB1dFNhbXBsZUJ1ZmZlckZyb21Db25uZWN0aW9uKTogUmVtb3ZlCisgICAgICAg
IHRoZSByZXNpemluZyBsb2dpYywgaXQgaXMgaGFuZGxlZCBieSB0aGUgYmFzZSBjbGFzcy4KKwor
ICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9EaXNwbGF5Q2FwdHVyZVNvdXJjZUNv
Y29hLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OmNh
cGFiaWxpdGllcyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29h
OjpzZXR0aW5nc0RpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5Q2FwdHVyZVNv
dXJjZUNvY29hOjpzZXRJbnRyaW5zaWNTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlD
YXB0dXJlU291cmNlQ29jb2E6OmVtaXRGcmFtZSk6IFJlbW92ZSByZXNpemluZyBsb2dpYywganVz
dCB1c2UgYSB0cmFuc2ZlcgorICAgICAgICBzZXNzaW9uIHRvIGNyZWF0ZSBhbiBpbWFnZSBmcm9t
IHRoZSBjYXB0dXJlIHNvdXJjZSBuYXRpdmUgb3V0cHV0IGZvcm1hdC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OnNhbXBsZUJ1ZmZlckZyb21QaXhlbEJ1ZmZl
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpyb3VuZFVwVG9NYWNyb2Jsb2NrTXVsdGlw
bGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUNhcHR1cmVTb3VyY2VDb2Nv
YTo6cGl4ZWxCdWZmZXJGcm9tSU9TdXJmYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYS5oOgorCisgICAgICAg
ICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLmg6
CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01vY2tSZWFsdGltZVZpZGVvU291
cmNlTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6TW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWM6
OnVwZGF0ZVNhbXBsZUJ1ZmZlcik6IFVzZSBpbWFnZSB0cmFuc2ZlciBzZXNzaW9uLgorICAgICAg
ICAoV2ViQ29yZTo6TW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWM6OkNNU2FtcGxlQnVmZmVyRnJv
bVBpeGVsQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tSZWFsdGltZVZp
ZGVvU291cmNlTWFjOjpwaXhlbEJ1ZmZlckZyb21DR0ltYWdlIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6Ok1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjOjpzZXRTaXplQW5kRnJh
bWVSYXRlV2l0aFByZXNldCk6IERlbGV0ZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMubW06Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6Y3JlYXRlRGlz
cGxheVN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJj
ZU1hYzo6Z2VuZXJhdGVGcmFtZSk6IFJldHVybiB0aGUgSU9TdXJmYWNlIGRpcmVjdGx5LgorCisg
ICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1dpbmRvd0Rpc3BsYXlDYXB0dXJlU291
cmNlTWFjLmg6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1dpbmRvd0Rpc3Bs
YXlDYXB0dXJlU291cmNlTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6V2luZG93RGlzcGxheUNh
cHR1cmVTb3VyY2VNYWM6OmdlbmVyYXRlRnJhbWUpOiBSZXR1cm4gdGhlIENHSW1hZ2UgZGlyZWN0
bHkuCisgICAgICAgIChXZWJDb3JlOjpXaW5kb3dEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6cGl4
ZWxCdWZmZXJGcm9tQ0dJbWFnZSk6IERlbGV0ZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tb2Nr
L01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tSZWFs
dGltZVZpZGVvU291cmNlOjpjYXBhYmlsaXRpZXMpOiBPbmx5IHRoZSBjYW1lcmEgc3VwcG9ydHMg
ZGV2aWNlIElELgorICAgICAgICAoV2ViQ29yZTo6TW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2U6OnNl
dHRpbmdzKTogRGl0dG8uCisKIDIwMTgtMTAtMTcgIEFsaSBKdW1hICA8YWp1bWFAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIEZsYWt5IEludGVyc2VjdGlvbk9ic2VydmVyIHdlYiBwbGF0Zm9ybSB0
ZXN0cyBpbnZvbHZpbmcgc3R5bGUgdXBkYXRlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
U291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKaW5kZXgg
Yzc2ZjQ5MjMxY2I1ZTBiYmQ1YzA5Y2YyZTI0YzRjOTE1OWNkOWU1Ny4uODQ1NTVhNmE3OWFhMDQx
ZTJhYmI1YTliMDQ4OTQ4OWQ4NjIwMzA4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291
cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC0z
MTQsOCArMzE0LDggQEAgcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViR0xMYXllci5tbQogcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViTWV0YWxMYXllci5tbQogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYS5tbQogCitwbGF0Zm9ybS9ncmFwaGlj
cy9jdi9JbWFnZVRyYW5zZmVyU2Vzc2lvblZULm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jdi9QaXhl
bEJ1ZmZlckNvbmZvcm1lckNWLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJS
ZXNpemVyLm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jdi9UZXh0dXJlQ2FjaGVDVi5tbQogcGxhdGZv
cm0vZ3JhcGhpY3MvY3YvVmlkZW9UZXh0dXJlQ29waWVyQ1YuY3BwCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA5N2IzNWFmZmY5
MWEzMjM1NjMwN2NhNmE3NDYwMDU4ZDIwMmEwNWJmLi5lNTZlN2ViZWE3MDZlM2JhNDJlZTIxZDg2
YmRkYTVhMjk3NjExMGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNjksNiArMTY5LDcgQEAKIAkJMDc4RTQzREExQUJCNkM3
RTAwMUMyRkE2IC8qIE1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3OEU0M0Q4MUFCQjZDN0UwMDFDMkZBNiAv
KiBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDc4RTQzREQxQUJCNkY2RjAwMUMyRkE2IC8qIE1lZGlh
UGxheWJhY2tUYXJnZXRQaWNrZXJNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDA3OEU0M0RCMUFCQjZGNkYwMDFDMkZBNiAvKiBNZWRpYVBsYXliYWNr
VGFyZ2V0UGlja2VyTWFjLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMDc4RTQzREUxQUJCNkY2RjAwMUMyRkE2IC8qIE1lZGlhUGxheWJhY2tUYXJn
ZXRQaWNrZXJNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwNzhFNDNEQzFBQkI2RjZGMDAxQzJGQTYgLyogTWVkaWFQbGF5YmFja1RhcmdldFBpY2tl
ck1hYy5tbSAqLzsgfTsKKwkJMDc4RUQxOTMyMTZEMDc5NTAwNzc1QjMzIC8qIEltYWdlVHJhbnNm
ZXJTZXNzaW9uVlQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDA3NDZEMzBDMjE0NkVBMzgwMDNEREY4NCAvKiBJbWFnZVRyYW5zZmVyU2Vzc2lvblZULmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDc5MjE2
NTUxQUE1NjBBQTAwQTNDMDQ5IC8qIE1lZGlhUGxheWJhY2tUYXJnZXRDbGllbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3OTIxNjUzMUFBNTYwQUEw
MEEzQzA0OSAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0Q2xpZW50LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDc5NDE3OTExNjZFODU1RjAwOTQxNkMy
IC8qIEluYmFuZFRleHRUcmFjay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwNzk0MTc4RjE2NkU4NTVGMDA5NDE2QzIgLyogSW5iYW5kVGV4dFRyYWNr
LmNwcCAqLzsgfTsKIAkJMDc5NDE3OTIxNjZFODU1RjAwOTQxNkMyIC8qIEluYmFuZFRleHRUcmFj
ay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDc5NDE3
OTAxNjZFODU1RjAwOTQxNkMyIC8qIEluYmFuZFRleHRUcmFjay5oICovOyB9OwpAQCAtNTM2OCw4
ICs1MzY5LDggQEAKIAkJMDczQjg3NjUxRTQzODU5RDAwNzFDMEVDIC8qIEF1ZGlvU2FtcGxlRGF0
YVNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdWRpb1NhbXBsZURh
dGFTb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDc0NEVDRUIxRTBDNEFF
NTAwMEQwOTQ0IC8qIE1vY2tSZWFsdGltZUF1ZGlvU291cmNlTWFjLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE1vY2tSZWFsdGltZUF1ZGlvU291cmNlTWFjLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3NDRFQ0VDMUUwQzRBRTUwMDBEMDk0NCAvKiBNb2NrUmVh
bHRpbWVBdWRpb1NvdXJjZU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IE1vY2tSZWFsdGltZUF1ZGlvU291cmNlTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkwNzQ2RDMwQTIxNDZFQTM3MDAzRERGODQgLyogUGl4ZWxCdWZmZXJSZXNpemVy
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUGl4ZWxCdWZmZXJS
ZXNpemVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwNzQ2RDMwQzIxNDZFQTM4
MDAzRERGODQgLyogUGl4ZWxCdWZmZXJSZXNpemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFBpeGVsQnVmZmVyUmVzaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwNzQ2RDMwQTIxNDZFQTM3MDAzRERGODQgLyogSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEltYWdlVHJhbnNmZXJT
ZXNzaW9uVlQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3NDZEMzBDMjE0NkVB
MzgwMDNEREY4NCAvKiBJbWFnZVRyYW5zZmVyU2Vzc2lvblZULmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEltYWdlVHJhbnNmZXJTZXNzaW9uVlQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMDc0RTgyQjgxOEE2OUYwRTAwN0VGNTRDIC8qIFBsYXRmb3JtVGltZVJh
bmdlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQbGF0Zm9ybVRp
bWVSYW5nZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzRFODJCOTE4QTY5
RjBFMDA3RUY1NEMgLyogUGxhdGZvcm1UaW1lUmFuZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFBsYXRmb3JtVGltZVJhbmdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwNzUzODYwMDE0NDg5RTk4MDBCNzg0NTIgLyogQ2FjaGVkVGV4dFRyYWNrLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhY2hlZFRleHRUcmFjay5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTA5NSwxMCArMjUwOTYsMTAgQEAKIAkJ
Q0Q5RDgyN0MxQzdCQjJFRDAwNkZGMDY2IC8qIGN2ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwNzQ2RDMwQzIxNDZFQTM4MDAzRERGODQgLyogSW1hZ2VU
cmFuc2ZlclNlc3Npb25WVC5oICovLAorCQkJCTA3NDZEMzBBMjE0NkVBMzcwMDNEREY4NCAvKiBJ
bWFnZVRyYW5zZmVyU2Vzc2lvblZULm1tICovLAogCQkJCUNEN0QzMzQxMUM3QTEyM0YwMDA0MTI5
MyAvKiBQaXhlbEJ1ZmZlckNvbmZvcm1lckNWLmNwcCAqLywKIAkJCQlDRDdEMzM0MjFDN0ExMjNG
MDAwNDEyOTMgLyogUGl4ZWxCdWZmZXJDb25mb3JtZXJDVi5oICovLAotCQkJCTA3NDZEMzBDMjE0
NkVBMzgwMDNEREY4NCAvKiBQaXhlbEJ1ZmZlclJlc2l6ZXIuaCAqLywKLQkJCQkwNzQ2RDMwQTIx
NDZFQTM3MDAzRERGODQgLyogUGl4ZWxCdWZmZXJSZXNpemVyLm1tICovLAogCQkJCUNEOUQ4Mjc0
MUM3QUU1MzUwMDZGRjA2NiAvKiBUZXh0dXJlQ2FjaGVDVi5oICovLAogCQkJCUNEOUQ4MjczMUM3
QUU1MzUwMDZGRjA2NiAvKiBUZXh0dXJlQ2FjaGVDVi5tbSAqLywKIAkJCQlDRDlEODI3NzFDN0I4
RUUxMDA2RkYwNjYgLyogVmlkZW9UZXh0dXJlQ29waWVyQ1YuY3BwICovLApAQCAtMjg3MjAsNiAr
Mjg3MjEsNyBAQAogCQkJCTdDMTkzQkMxMUY1RTBFRUQwMDg4RjNFNiAvKiBJbWFnZVNtb290aGlu
Z1F1YWxpdHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTU1NDY3NTdCMUZEMjEyQTkwMDNCMTBCMCAv
KiBJbWFnZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEIzNDgwOTQwRUVGNTBENDAwQUMx
QjQxIC8qIEltYWdlU291cmNlQ0cuaCBpbiBIZWFkZXJzICovLAorCQkJCTA3OEVEMTkzMjE2RDA3
OTUwMDc3NUIzMyAvKiBJbWFnZVRyYW5zZmVyU2Vzc2lvblZULmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1NTUwQ0I0MjFFOTU1RTNDMDAxMTFBQTAgLyogSW1hZ2VUeXBlcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMjZGNzU2QjMxQjNCNjZGNzAwMDVERDc5IC8qIEltbXV0YWJsZU5GQS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMjZGNzU2QjUxQjNCNjhGMjAwMDVERDc5IC8qIEltbXV0YWJsZU5GQU5vZGVC
dWlsZGVyLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL01lZGlhU2FtcGxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZWRpYVNhbXBsZS5o
CmluZGV4IGU1ODJmZGI0OWFjZWVkYTBmYzM2OGEwY2VjNTYxODgxYWU4OGMzN2IuLjA1MGQ5Mzg5
ZDE4ZTEwZjVkOTdiYTQzZDg2MGMyYTEzNTIwNjYyZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL01lZGlhU2FtcGxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
TWVkaWFTYW1wbGUuaApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiRmxvYXRTaXplLmgi
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheXMuaD4KKyNpbmNsdWRlIDx3dGYv
RW51bVRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9NZWRpYVRpbWUuaD4KICNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgpAQCAtMTAw
LDYgKzEwMSwyMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
KSBjb25zdCA9IDA7CiB9OwogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK25hbWVzcGFj
ZSBXVEYgeworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6Ok1lZGlhU2Ft
cGxlOjpWaWRlb1JvdGF0aW9uPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAg
ICAgICAgV2ViQ29yZTo6TWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb24sCisgICAgICAgIFdlYkNv
cmU6Ok1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpOb25lLAorICAgICAgICBXZWJDb3JlOjpN
ZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6VXBzaWRlRG93biwKKyAgICAgICAgV2ViQ29yZTo6
TWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246OlJpZ2h0LAorICAgICAgICBXZWJDb3JlOjpNZWRp
YVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6TGVmdAorICAgID47Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXVEYKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2Nv
YS9Db3JlVmlkZW9Tb2Z0TGluay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9D
b3JlVmlkZW9Tb2Z0TGluay5jcHAKaW5kZXggOGJiMzYyYmYyNjgwZDM2ZDZlM2YwZDVjMzIwNTIx
MzVjMWRmNWE5OC4uZGNmYjFjZmI0N2EwM2QzNzNhM2E2MjI4NzRlNzAzODU5MTZjZTA4YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvQ29yZVZpZGVvU29mdExpbmsu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL0NvcmVWaWRlb1NvZnRMaW5r
LmNwcApAQCAtOTIsNCArOTIsNiBAQCBTT0ZUX0xJTktfQ09OU1RBTlRfRk9SX1NPVVJDRShXZWJD
b3JlLCBDb3JlVmlkZW8sIGtDVlBpeGVsQnVmZmVyRXh0ZW5kZWRQaXhlbHNCbwogU09GVF9MSU5L
X0NPTlNUQU5UX0ZPUl9TT1VSQ0UoV2ViQ29yZSwgQ29yZVZpZGVvLCBrQ1ZQaXhlbEJ1ZmZlck9w
ZW5HTENvbXBhdGliaWxpdHlLZXksIENGU3RyaW5nUmVmKQogI2VuZGlmCiAKK1NPRlRfTElOS19G
VU5DVElPTl9GT1JfU09VUkNFKFdlYkNvcmUsIENvcmVWaWRlbywgQ1ZQaXhlbEJ1ZmZlckNyZWF0
ZVdpdGhJT1N1cmZhY2UsIENWUmV0dXJuLCAoQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9yLCBJT1N1
cmZhY2VSZWYgc3VyZmFjZSwgQ0ZEaWN0aW9uYXJ5UmVmIHBpeGVsQnVmZmVyQXR0cmlidXRlcywg
Q1ZQaXhlbEJ1ZmZlclJlZiAqIHBpeGVsQnVmZmVyT3V0KSwgKGFsbG9jYXRvciwgc3VyZmFjZSwg
cGl4ZWxCdWZmZXJBdHRyaWJ1dGVzLCBwaXhlbEJ1ZmZlck91dCkpCisKICNlbmRpZiAvLyBIQVZF
KENPUkVfVklERU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9D
b3JlVmlkZW9Tb2Z0TGluay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvQ29yZVZp
ZGVvU29mdExpbmsuaAppbmRleCA5ZWViNDM0NjE4OTM4NDVhNjgyNDQ4OGI0MzhmNTk2OWFiMmM4
YjEyLi41Mjk1ZTU4Yzg0NzBmNTJmMmFkODQzYjE2N2ExNzk0NzcwOGQ1NGI4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9Db3JlVmlkZW9Tb2Z0TGluay5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL0NvcmVWaWRlb1NvZnRMaW5rLmgKQEAgLTE0
Nyw0ICsxNDcsNyBAQCBTT0ZUX0xJTktfQ09OU1RBTlRfRk9SX0hFQURFUihXZWJDb3JlLCBDb3Jl
VmlkZW8sIGtDVlBpeGVsQnVmZmVyT3BlbkdMQ29tcGF0aWJpbAogI2RlZmluZSBrQ1ZQaXhlbEJ1
ZmZlck9wZW5HTENvbXBhdGliaWxpdHlLZXkgZ2V0X0NvcmVWaWRlb19rQ1ZQaXhlbEJ1ZmZlck9w
ZW5HTENvbXBhdGliaWxpdHlLZXkoKQogI2VuZGlmCiAKK1NPRlRfTElOS19GVU5DVElPTl9GT1Jf
SEVBREVSKFdlYkNvcmUsIENvcmVWaWRlbywgQ1ZQaXhlbEJ1ZmZlckNyZWF0ZVdpdGhJT1N1cmZh
Y2UsIENWUmV0dXJuLCAoQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9yLCBJT1N1cmZhY2VSZWYgc3Vy
ZmFjZSwgQ0ZEaWN0aW9uYXJ5UmVmIHBpeGVsQnVmZmVyQXR0cmlidXRlcywgQ1ZQaXhlbEJ1ZmZl
clJlZiAqIHBpeGVsQnVmZmVyT3V0KSwgKGFsbG9jYXRvciwgc3VyZmFjZSwgcGl4ZWxCdWZmZXJB
dHRyaWJ1dGVzLCBwaXhlbEJ1ZmZlck91dCkpCisjZGVmaW5lIENWUGl4ZWxCdWZmZXJDcmVhdGVX
aXRoSU9TdXJmYWNlIHNvZnRMaW5rX0NvcmVWaWRlb19DVlBpeGVsQnVmZmVyQ3JlYXRlV2l0aElP
U3VyZmFjZQorCiAjZW5kaWYgLy8gSEFWRShDT1JFX1ZJREVPKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvVmlkZW9Ub29sYm94U29mdExpbmsuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvVmlkZW9Ub29sYm94U29mdExpbmsuY3BwCmluZGV4IDk4
N2ZiY2Y2MTk2NmQyNGNmMDVjYTA4NDY5OWQwNTgwYTJmMTExZGYuLmVhZjc4YjQ1ZDA1Mjg3YTc5
NmU2YTJhMDVjZDBlOGYwYTg5OTRkM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2NvY29hL1ZpZGVvVG9vbGJveFNvZnRMaW5rLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jb2NvYS9WaWRlb1Rvb2xib3hTb2Z0TGluay5jcHAKQEAgLTU5LDYgKzU5LDkgQEAg
U09GVF9MSU5LX0ZVTkNUSU9OX0ZPUl9TT1VSQ0UoV2ViQ29yZSwgVmlkZW9Ub29sYm94LCBWVFBp
eGVsVHJhbnNmZXJTZXNzaW9uVHJhbnMKIFNPRlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNFKFdl
YkNvcmUsIFZpZGVvVG9vbGJveCwgVlRTZXNzaW9uU2V0UHJvcGVydHksIE9TU3RhdHVzLCAoVlRT
ZXNzaW9uUmVmIHNlc3Npb24sIENGU3RyaW5nUmVmIHByb3BlcnR5S2V5LCBDRlR5cGVSZWYgcHJv
cGVydHlWYWx1ZSksIChzZXNzaW9uLCBwcm9wZXJ0eUtleSwgcHJvcGVydHlWYWx1ZSkpCiBTT0ZU
X0xJTktfQ09OU1RBTlRfRk9SX1NPVVJDRShXZWJDb3JlLCBWaWRlb1Rvb2xib3gsIGtWVFBpeGVs
VHJhbnNmZXJQcm9wZXJ0eUtleV9TY2FsaW5nTW9kZSwgQ0ZTdHJpbmdSZWYpCiBTT0ZUX0xJTktf
Q09OU1RBTlRfRk9SX1NPVVJDRShXZWJDb3JlLCBWaWRlb1Rvb2xib3gsIGtWVFNjYWxpbmdNb2Rl
X1RyaW0sIENGU3RyaW5nUmVmKQorU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9TT1VSQ0UoV2ViQ29y
ZSwgVmlkZW9Ub29sYm94LCBrVlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXlfRW5hYmxlSGFyZHdh
cmVBY2NlbGVyYXRlZFRyYW5zZmVyLCBDRlN0cmluZ1JlZikKK1NPRlRfTElOS19DT05TVEFOVF9G
T1JfU09VUkNFKFdlYkNvcmUsIFZpZGVvVG9vbGJveCwga1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5
S2V5X0VuYWJsZUhpZ2hTcGVlZFRyYW5zZmVyLCBDRlN0cmluZ1JlZikKK1NPRlRfTElOS19DT05T
VEFOVF9GT1JfU09VUkNFKFdlYkNvcmUsIFZpZGVvVG9vbGJveCwga1ZUUGl4ZWxUcmFuc2ZlclBy
b3BlcnR5S2V5X1JlYWxUaW1lLCBDRlN0cmluZ1JlZikKIAogU09GVF9MSU5LX0NPTlNUQU5UX01B
WV9GQUlMX0ZPUl9TT1VSQ0UoV2ViQ29yZSwgVmlkZW9Ub29sYm94LCBrVlRIRVZDRGVjb2RlckNh
cGFiaWxpdHlfU3VwcG9ydGVkUHJvZmlsZXMsIENGU3RyaW5nUmVmKQogU09GVF9MSU5LX0NPTlNU
QU5UX01BWV9GQUlMX0ZPUl9TT1VSQ0UoV2ViQ29yZSwgVmlkZW9Ub29sYm94LCBrVlRIRVZDRGVj
b2RlckNhcGFiaWxpdHlfUGVyUHJvZmlsZVN1cHBvcnQsIENGU3RyaW5nUmVmKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvVmlkZW9Ub29sYm94U29mdExpbmsuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvVG9vbGJveFNvZnRMaW5rLmgKaW5k
ZXggZjMxOWIxODhlZDE2MDU4MDk0NzYxMmViMzcyODZkZTIyMzI0ZTI1ZC4uMDcxYjcxMWVkMDRk
M2I4MTQ4MjI4OTJhMTUwZDdhZTVmZGU2Zjg1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY29jb2EvVmlkZW9Ub29sYm94U29mdExpbmsuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jb2NvYS9WaWRlb1Rvb2xib3hTb2Z0TGluay5oCkBAIC04NSw2ICs4NSwxMiBA
QCBTT0ZUX0xJTktfQ09OU1RBTlRfRk9SX0hFQURFUihXZWJDb3JlLCBWaWRlb1Rvb2xib3gsIGtW
VFBpeGVsVHJhbnNmZXJQcm9wZXJ0eUtleQogI2RlZmluZSBrVlRQaXhlbFRyYW5zZmVyUHJvcGVy
dHlLZXlfU2NhbGluZ01vZGUgZ2V0X1ZpZGVvVG9vbGJveF9rVlRQaXhlbFRyYW5zZmVyUHJvcGVy
dHlLZXlfU2NhbGluZ01vZGUoKQogU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9IRUFERVIoV2ViQ29y
ZSwgVmlkZW9Ub29sYm94LCBrVlRTY2FsaW5nTW9kZV9UcmltLCBDRlN0cmluZ1JlZikKICNkZWZp
bmUga1ZUU2NhbGluZ01vZGVfVHJpbSBnZXRfVmlkZW9Ub29sYm94X2tWVFNjYWxpbmdNb2RlX1Ry
aW0oKQorU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9IRUFERVIoV2ViQ29yZSwgVmlkZW9Ub29sYm94
LCBrVlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXlfRW5hYmxlSGFyZHdhcmVBY2NlbGVyYXRlZFRy
YW5zZmVyLCBDRlN0cmluZ1JlZikKKyNkZWZpbmUga1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5S2V5
X0VuYWJsZUhhcmR3YXJlQWNjZWxlcmF0ZWRUcmFuc2ZlciBnZXRfVmlkZW9Ub29sYm94X2tWVFBp
eGVsVHJhbnNmZXJQcm9wZXJ0eUtleV9FbmFibGVIYXJkd2FyZUFjY2VsZXJhdGVkVHJhbnNmZXIo
KQorU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9IRUFERVIoV2ViQ29yZSwgVmlkZW9Ub29sYm94LCBr
VlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXlfRW5hYmxlSGlnaFNwZWVkVHJhbnNmZXIsIENGU3Ry
aW5nUmVmKQorI2RlZmluZSBrVlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXlfRW5hYmxlSGlnaFNw
ZWVkVHJhbnNmZXIgZ2V0X1ZpZGVvVG9vbGJveF9rVlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXlf
RW5hYmxlSGlnaFNwZWVkVHJhbnNmZXIoKQorU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9IRUFERVIo
V2ViQ29yZSwgVmlkZW9Ub29sYm94LCBrVlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXlfUmVhbFRp
bWUsIENGU3RyaW5nUmVmKQorI2RlZmluZSBrVlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXlfUmVh
bFRpbWUgZ2V0X1ZpZGVvVG9vbGJveF9rVlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXlfUmVhbFRp
bWUoKQogCiBTT0ZUX0xJTktfQ09OU1RBTlRfTUFZX0ZBSUxfRk9SX0hFQURFUihXZWJDb3JlLCBW
aWRlb1Rvb2xib3gsIGtWVEhFVkNEZWNvZGVyQ2FwYWJpbGl0eV9TdXBwb3J0ZWRQcm9maWxlcywg
Q0ZTdHJpbmdSZWYpCiAjZGVmaW5lIGtWVEhFVkNEZWNvZGVyQ2FwYWJpbGl0eV9TdXBwb3J0ZWRQ
cm9maWxlcyBnZXRfVmlkZW9Ub29sYm94X2tWVEhFVkNEZWNvZGVyQ2FwYWJpbGl0eV9TdXBwb3J0
ZWRQcm9maWxlcygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU2FtcGxlQVZGT2JqQy5o
CmluZGV4IGQ1YTgwNmRmZTMzZTk3YzBjMWYyOGQyMTEwZGY1ODhmOTU2ODI2YWMuLjA5MjM4ODNl
NWJjN2U0NDY0YjExNmI5MmJiZmQwOGE2ZTI2M2E3MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU2FtcGxlQVZGT2Jq
Qy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL01lZGlhU2FtcGxlQVZGT2JqQy5oCkBAIC0zMSwxMyArMzEsMTIgQEAKICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCisKIGNsYXNzIE1lZGlh
U2FtcGxlQVZGT2JqQyA6IHB1YmxpYyBNZWRpYVNhbXBsZSB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IFJlZjxNZWRpYVNhbXBsZUFWRk9iakM+IGNyZWF0ZShDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGUs
IGludCB0cmFja0lEKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IE1lZGlhU2FtcGxlQVZGT2JqQyhz
YW1wbGUsIHRyYWNrSUQpKTsgfQogICAgIHN0YXRpYyBSZWY8TWVkaWFTYW1wbGVBVkZPYmpDPiBj
cmVhdGUoQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlLCBBdG9taWNTdHJpbmcgdHJhY2tJRCkgeyBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBNZWRpYVNhbXBsZUFWRk9iakMoc2FtcGxlLCB0cmFja0lEKSk7
IH0KICAgICBzdGF0aWMgUmVmPE1lZGlhU2FtcGxlQVZGT2JqQz4gY3JlYXRlKENNU2FtcGxlQnVm
ZmVyUmVmIHNhbXBsZSwgVmlkZW9Sb3RhdGlvbiByb3RhdGlvbiA9IFZpZGVvUm90YXRpb246Ok5v
bmUsIGJvb2wgbWlycm9yZWQgPSBmYWxzZSkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBNZWRpYVNh
bXBsZUFWRk9iakMoc2FtcGxlLCByb3RhdGlvbiwgbWlycm9yZWQpKTsgfQotICAgIHN0YXRpYyBS
ZWZQdHI8TWVkaWFTYW1wbGVBVkZPYmpDPiBjcmVhdGVJbWFnZVNhbXBsZShSZWY8SlNDOjpVaW50
OENsYW1wZWRBcnJheT4mJiwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWln
aHQpOwogICAgIHN0YXRpYyBSZWZQdHI8TWVkaWFTYW1wbGVBVkZPYmpDPiBjcmVhdGVJbWFnZVNh
bXBsZShWZWN0b3I8dWludDhfdD4mJiwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9u
ZyBoZWlnaHQpOwogCiAgICAgUmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IGdldFJHQkFJ
bWFnZURhdGEoKSBjb25zdCBvdmVycmlkZTsKQEAgLTY1LDYgKzY0LDcgQEAgcHVibGljOgogCiAg
ICAgVmlkZW9Sb3RhdGlvbiB2aWRlb1JvdGF0aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
bV9yb3RhdGlvbjsgfQogICAgIGJvb2wgdmlkZW9NaXJyb3JlZCgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIG1fbWlycm9yZWQ7IH0KKyAgICB1aW50MzJfdCB2aWRlb1BpeGVsRm9ybWF0KCkgY29u
c3Q7CiAKICAgICBDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGVCdWZmZXIoKSBjb25zdCB7IHJldHVy
biBtX3NhbXBsZS5nZXQoKTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBs
ZUFWRk9iakMubW0KaW5kZXggYzNiY2E2MTA5MDU1NGY4MjhiODQ4MzlhZDQwNTQ5YTYyN2JmZTc0
MC4uNjdiYjRjNmRmZTMzMDQ5ZGJlMTkyMjhiNTBmN2NhODc2NzE0YzdlZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFT
YW1wbGVBVkZPYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL01lZGlhU2FtcGxlQVZGT2JqQy5tbQpAQCAtMTEzLDYgKzExMywxMiBA
QCBQbGF0Zm9ybVNhbXBsZSBNZWRpYVNhbXBsZUFWRk9iakM6OnBsYXRmb3JtU2FtcGxlKCkKICAg
ICByZXR1cm4gc2FtcGxlOwogfQogCit1aW50MzJfdCBNZWRpYVNhbXBsZUFWRk9iakM6OnZpZGVv
UGl4ZWxGb3JtYXQoKSBjb25zdAoreworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBzdGF0aWNfY2Fz
dDxDVlBpeGVsQnVmZmVyUmVmPihDTVNhbXBsZUJ1ZmZlckdldEltYWdlQnVmZmVyKG1fc2FtcGxl
LmdldCgpKSk7CisgICAgcmV0dXJuIENWUGl4ZWxCdWZmZXJHZXRQaXhlbEZvcm1hdFR5cGUocGl4
ZWxCdWZmZXIpOworfQorCiBzdGF0aWMgYm9vbCBDTVNhbXBsZUJ1ZmZlcklzUmFuZG9tQWNjZXNz
KENNU2FtcGxlQnVmZmVyUmVmIHNhbXBsZSkKIHsKICAgICBDRkFycmF5UmVmIGF0dGFjaG1lbnRz
ID0gQ01TYW1wbGVCdWZmZXJHZXRTYW1wbGVBdHRhY2htZW50c0FycmF5KHNhbXBsZSwgZmFsc2Up
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvSW1hZ2VU
cmFuc2ZlclNlc3Npb25WVC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3Yv
SW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU4MTQzYmU0N2ViMGJlMDFiY2Ez
MDgwY2FlYWNjZjRkOTAzN2IxMWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jdi9JbWFnZVRyYW5zZmVyU2Vzc2lvblZULmgKQEAgLTAsMCArMSw4
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKFZJREVPVE9PTEJPWCkK
KworI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJNZWRpYVNhbXBsZUFWRk9iamMuaCIK
KyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK3R5cGVkZWYgc3RydWN0IENHSW1hZ2UgKkNH
SW1hZ2VSZWY7Cit0eXBlZGVmIHN0cnVjdCBPcGFxdWVWVFBpeGVsVHJhbnNmZXJTZXNzaW9uKiBW
VFBpeGVsVHJhbnNmZXJTZXNzaW9uUmVmOwordHlwZWRlZiBzdHJ1Y3QgX19DVkJ1ZmZlciAqQ1ZQ
aXhlbEJ1ZmZlclJlZjsKK3R5cGVkZWYgc3RydWN0IF9fQ1ZQaXhlbEJ1ZmZlclBvb2wgKkNWUGl4
ZWxCdWZmZXJQb29sUmVmOwordHlwZWRlZiBzdHJ1Y3QgX19JT1N1cmZhY2UgKklPU3VyZmFjZVJl
ZjsKK3R5cGVkZWYgc3RydWN0IG9wYXF1ZUNNU2FtcGxlQnVmZmVyICpDTVNhbXBsZUJ1ZmZlclJl
ZjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZVRyYW5zZmVyU2Vzc2lvblZU
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlVHJhbnNmZXJTZXNz
aW9uVlQ+IGNyZWF0ZSh1aW50MzJfdCBwaXhlbEZvcm1hdCkKKyAgICB7CisgICAgICAgIHJldHVy
biBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VUcmFuc2ZlclNlc3Npb25WVD4obmV3IEltYWdlVHJhbnNm
ZXJTZXNzaW9uVlQocGl4ZWxGb3JtYXQpKTsKKyAgICB9CisKKyAgICBSZWZQdHI8TWVkaWFTYW1w
bGU+IGNvbnZlcnRNZWRpYVNhbXBsZShNZWRpYVNhbXBsZSYsIGNvbnN0IEludFNpemUmKTsKKyAg
ICBSZWZQdHI8TWVkaWFTYW1wbGU+IGNyZWF0ZU1lZGlhU2FtcGxlKENHSW1hZ2VSZWYsIGNvbnN0
IE1lZGlhVGltZSYsIGNvbnN0IEludFNpemUmLCBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbiBy
b3RhdGlvbiA9IE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpOb25lLCBib29sIG1pcnJvcmVk
ID0gZmFsc2UpOworICAgIFJlZlB0cjxNZWRpYVNhbXBsZT4gY3JlYXRlTWVkaWFTYW1wbGUoQ01T
YW1wbGVCdWZmZXJSZWYsIGNvbnN0IEludFNpemUmLCBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlv
biByb3RhdGlvbiA9IE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpOb25lLCBib29sIG1pcnJv
cmVkID0gZmFsc2UpOworCisjaWYgSEFWRShJT1NVUkZBQ0UpCisgICAgUmVmUHRyPE1lZGlhU2Ft
cGxlPiBjcmVhdGVNZWRpYVNhbXBsZShJT1N1cmZhY2VSZWYsIGNvbnN0IE1lZGlhVGltZSYsIGNv
bnN0IEludFNpemUmLCBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbiByb3RhdGlvbiA9IE1lZGlh
U2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpOb25lLCBib29sIG1pcnJvcmVkID0gZmFsc2UpOworI2Vu
ZGlmCisKK3ByaXZhdGU6CisgICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VUcmFuc2ZlclNlc3Npb25W
VCh1aW50MzJfdCk7CisKKyNpZiBIQVZFKElPU1VSRkFDRSkKKyAgICBDRkRpY3Rpb25hcnlSZWYg
aW9TdXJmYWNlUGl4ZWxCdWZmZXJDcmVhdGlvbk9wdGlvbnMoSU9TdXJmYWNlUmVmKTsKKyAgICBS
ZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+IGNyZWF0ZUNNU2FtcGxlQnVmZmVyKElPU3VyZmFj
ZVJlZiwgY29uc3QgTWVkaWFUaW1lJiwgY29uc3QgSW50U2l6ZSYpOworICAgIFJldGFpblB0cjxD
VlBpeGVsQnVmZmVyUmVmPiBjcmVhdGVQaXhlbEJ1ZmZlcihJT1N1cmZhY2VSZWYsIGNvbnN0IElu
dFNpemUmKTsKKyNlbmRpZgorCisgICAgUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBjb252
ZXJ0Q01TYW1wbGVCdWZmZXIoQ01TYW1wbGVCdWZmZXJSZWYsIGNvbnN0IEludFNpemUmKTsKKyAg
ICBSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+IGNyZWF0ZUNNU2FtcGxlQnVmZmVyKENWUGl4
ZWxCdWZmZXJSZWYsIGNvbnN0IE1lZGlhVGltZSYsIGNvbnN0IEludFNpemUmKTsKKyAgICBSZXRh
aW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+IGNyZWF0ZUNNU2FtcGxlQnVmZmVyKENHSW1hZ2VSZWYs
IGNvbnN0IE1lZGlhVGltZSYsIGNvbnN0IEludFNpemUmKTsKKworICAgIFJldGFpblB0cjxDVlBp
eGVsQnVmZmVyUmVmPiBjb252ZXJ0UGl4ZWxCdWZmZXIoQ1ZQaXhlbEJ1ZmZlclJlZiwgY29uc3Qg
SW50U2l6ZSYpOworICAgIFJldGFpblB0cjxDVlBpeGVsQnVmZmVyUmVmPiBjcmVhdGVQaXhlbEJ1
ZmZlcihDTVNhbXBsZUJ1ZmZlclJlZiwgY29uc3QgSW50U2l6ZSYpOworICAgIFJldGFpblB0cjxD
VlBpeGVsQnVmZmVyUmVmPiBjcmVhdGVQaXhlbEJ1ZmZlcihDR0ltYWdlUmVmLCBjb25zdCBJbnRT
aXplJik7CisKKyAgICBib29sIHNldFNpemUoY29uc3QgSW50U2l6ZSYpOworCisgICAgUmV0YWlu
UHRyPFZUUGl4ZWxUcmFuc2ZlclNlc3Npb25SZWY+IG1fdHJhbnNmZXJTZXNzaW9uOworICAgIFJl
dGFpblB0cjxDVlBpeGVsQnVmZmVyUG9vbFJlZj4gbV9vdXRwdXRCdWZmZXJQb29sOworICAgIFJl
dGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IG1faW9TdXJmYWNlQnVmZmVyQXR0cmlidXRlczsKKyAg
ICB1aW50MzJfdCBtX3BpeGVsRm9ybWF0OworICAgIEludFNpemUgbV9zaXplOworfTsKKworfQor
CisjZW5kaWYgLy8gVVNFKFZJREVPVE9PTEJPWCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2N2L0ltYWdlVHJhbnNmZXJTZXNzaW9uVlQubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9JbWFnZVRyYW5zZmVyU2Vzc2lvblZULm1tCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmFhN2ZjY2U2M2ZjMTY4MTA3MzQwMmQwZjUyZTI0NzU1YWI5YTgwOGYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9JbWFnZVRy
YW5zZmVyU2Vzc2lvblZULm1tCkBAIC0wLDAgKzEsMzgzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBv
cnQgImNvbmZpZy5oIgorI2ltcG9ydCAiSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5oIgorCisjaWYg
VVNFKFZJREVPVE9PTEJPWCkKKworI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiTWVkaWFT
YW1wbGVBVkZPYmpDLmgiCisjaW1wb3J0IDxDb3JlTWVkaWEvQ01Gb3JtYXREZXNjcmlwdGlvbi5o
PgorI2ltcG9ydCA8Q29yZU1lZGlhL0NNU2FtcGxlQnVmZmVyLmg+CisjaW1wb3J0IDxwYWwvY2Yv
Q29yZU1lZGlhU29mdExpbmsuaD4KKworI2lmIEhBVkUoSU9TVVJGQUNFKQorI2luY2x1ZGUgPHBh
bC9zcGkvY29jb2EvSU9TdXJmYWNlU1BJLmg+CisjZW5kaWYKKworI2ltcG9ydCAiQ29yZVZpZGVv
U29mdExpbmsuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewordXNpbmcgbmFtZXNwYWNlIFBBTDsK
Kworc3RhdGljIGlubGluZSBDRlN0cmluZ1JlZiBjdlBpeGVsRm9ybWF0T3BlbkdMS2V5KCkKK3sK
KyNpZiBQTEFURk9STShJT1MpICYmICFQTEFURk9STShJT1NNQUMpCisgICAgcmV0dXJuIGtDVlBp
eGVsRm9ybWF0T3BlbkdMRVNDb21wYXRpYmlsaXR5OworI2Vsc2UKKyAgICByZXR1cm4ga0NWUGl4
ZWxCdWZmZXJPcGVuR0xDb21wYXRpYmlsaXR5S2V5OworI2VuZGlmCit9CisKK0ltYWdlVHJhbnNm
ZXJTZXNzaW9uVlQ6OkltYWdlVHJhbnNmZXJTZXNzaW9uVlQodWludDMyX3QgcGl4ZWxGb3JtYXQp
Cit7CisgICAgVlRQaXhlbFRyYW5zZmVyU2Vzc2lvblJlZiB0cmFuc2ZlclNlc3Npb247CisgICAg
VlRQaXhlbFRyYW5zZmVyU2Vzc2lvbkNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAmdHJhbnNm
ZXJTZXNzaW9uKTsKKyAgICBBU1NFUlQodHJhbnNmZXJTZXNzaW9uKTsKKyAgICBtX3RyYW5zZmVy
U2Vzc2lvbiA9IGFkb3B0Q0YodHJhbnNmZXJTZXNzaW9uKTsKKworICAgIFZUU2Vzc2lvblNldFBy
b3BlcnR5KHRyYW5zZmVyU2Vzc2lvbiwga1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5S2V5X1NjYWxp
bmdNb2RlLCBrVlRTY2FsaW5nTW9kZV9UcmltKTsKKyAgICBWVFNlc3Npb25TZXRQcm9wZXJ0eSh0
cmFuc2ZlclNlc3Npb24sIGtWVFBpeGVsVHJhbnNmZXJQcm9wZXJ0eUtleV9FbmFibGVIaWdoU3Bl
ZWRUcmFuc2ZlciwgQChZRVMpKTsKKyAgICBWVFNlc3Npb25TZXRQcm9wZXJ0eSh0cmFuc2ZlclNl
c3Npb24sIGtWVFBpeGVsVHJhbnNmZXJQcm9wZXJ0eUtleV9SZWFsVGltZSwgQChZRVMpKTsKKyNp
ZiBQTEFURk9STShJT1MpICYmICFQTEFURk9STShJT1NNQUMpCisgICAgVlRTZXNzaW9uU2V0UHJv
cGVydHkodHJhbnNmZXJTZXNzaW9uLCBrVlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXlfRW5hYmxl
SGFyZHdhcmVBY2NlbGVyYXRlZFRyYW5zZmVyLCBAKFlFUykpOworI2VuZGlmCisKKyAgICBtX3Bp
eGVsRm9ybWF0ID0gcGl4ZWxGb3JtYXQ7Cit9CisKK2Jvb2wgSW1hZ2VUcmFuc2ZlclNlc3Npb25W
VDo6c2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIGlmIChtX3NpemUgPT0gc2l6
ZSAmJiBtX291dHB1dEJ1ZmZlclBvb2wpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgQ0ZE
aWN0aW9uYXJ5UmVmIHBpeGVsQnVmZmVyT3B0aW9ucyA9IChfX2JyaWRnZSBDRkRpY3Rpb25hcnlS
ZWYpIEB7CisgICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsQnVmZmVyV2lkdGhL
ZXkgOkAoc2l6ZS53aWR0aCgpKSwKKyAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4
ZWxCdWZmZXJIZWlnaHRLZXk6QChzaXplLmhlaWdodCgpKSwKKyAgICAgICAgKF9fYnJpZGdlIE5T
U3RyaW5nICopa0NWUGl4ZWxCdWZmZXJQaXhlbEZvcm1hdFR5cGVLZXk6QChtX3BpeGVsRm9ybWF0
KSwKKyAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopY3ZQaXhlbEZvcm1hdE9wZW5HTEtleSgp
IDogQChZRVMpLAorICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ1ZQaXhlbEJ1ZmZlcklP
U3VyZmFjZVByb3BlcnRpZXNLZXkgOiBAeyAvKmVtcHR5IGRpY3Rpb25hcnkqLyB9LAorICAgIH07
CisKKyAgICBDRkRpY3Rpb25hcnlSZWYgcGl4ZWxCdWZmZXJQb29sT3B0aW9ucyA9IChfX2JyaWRn
ZSBDRkRpY3Rpb25hcnlSZWYpIEB7CisgICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBp
eGVsQnVmZmVyUG9vbE1pbmltdW1CdWZmZXJDb3VudEtleSA6IEAoNikKKyAgICB9OworCisgICAg
Q1ZQaXhlbEJ1ZmZlclBvb2xSZWYgYnVmZmVyUG9vbDsKKyAgICBhdXRvIHN0YXR1cyA9IENWUGl4
ZWxCdWZmZXJQb29sQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIHBpeGVsQnVmZmVyUG9vbE9w
dGlvbnMsIHBpeGVsQnVmZmVyT3B0aW9ucywgJmJ1ZmZlclBvb2wpOworICAgIEFTU0VSVCghc3Rh
dHVzKTsKKyAgICBpZiAoc3RhdHVzICE9IGtDVlJldHVyblN1Y2Nlc3MpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIG1fb3V0cHV0QnVmZmVyUG9vbCA9IGFkb3B0Q0YoYnVmZmVyUG9vbCk7
CisgICAgbV9zaXplID0gc2l6ZTsKKyAgICBtX2lvU3VyZmFjZUJ1ZmZlckF0dHJpYnV0ZXMgPSBu
dWxscHRyOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK1JldGFpblB0cjxDVlBpeGVsQnVmZmVy
UmVmPiBJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjb252ZXJ0UGl4ZWxCdWZmZXIoQ1ZQaXhlbEJ1
ZmZlclJlZiBzb3VyY2VCdWZmZXIsIGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgaWYgKHNv
dXJjZUJ1ZmZlciAmJiBtX3NpemUgPT0gSW50U2l6ZShDVlBpeGVsQnVmZmVyR2V0V2lkdGgoc291
cmNlQnVmZmVyKSwgQ1ZQaXhlbEJ1ZmZlckdldEhlaWdodChzb3VyY2VCdWZmZXIpKSAmJiBtX3Bp
eGVsRm9ybWF0ID09IENWUGl4ZWxCdWZmZXJHZXRQaXhlbEZvcm1hdFR5cGUoc291cmNlQnVmZmVy
KSkKKyAgICAgICAgcmV0dXJuIHJldGFpblB0cihzb3VyY2VCdWZmZXIpOworCisgICAgaWYgKCFz
b3VyY2VCdWZmZXIgfHwgIXNldFNpemUoc2l6ZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgQ1ZQaXhlbEJ1ZmZlclJlZiBvdXRwdXRCdWZmZXIgPSBudWxscHRyOworICAgIGF1dG8g
c3RhdHVzID0gQ1ZQaXhlbEJ1ZmZlclBvb2xDcmVhdGVQaXhlbEJ1ZmZlcihrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCBtX291dHB1dEJ1ZmZlclBvb2wuZ2V0KCksICZvdXRwdXRCdWZmZXIpOworICAgIGlm
IChzdGF0dXMpIHsKKyAgICAgICAgUkVMRUFTRV9MT0coTWVkaWEsICJJbWFnZVRyYW5zZmVyU2Vz
c2lvblZUOjpjb252ZXJ0UGl4ZWxCdWZmZXIsIENWUGl4ZWxCdWZmZXJQb29sQ3JlYXRlUGl4ZWxC
dWZmZXIgZmFpbGVkIHdpdGggZXJyb3IgJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOwor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgYXV0byByZXN1bHQgPSBhZG9wdENG
KG91dHB1dEJ1ZmZlcik7CisKKyAgICBhdXRvIGVyciA9IFZUUGl4ZWxUcmFuc2ZlclNlc3Npb25U
cmFuc2ZlckltYWdlKG1fdHJhbnNmZXJTZXNzaW9uLmdldCgpLCBzb3VyY2VCdWZmZXIsIG91dHB1
dEJ1ZmZlcik7CisgICAgaWYgKGVycikgeworICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIklt
YWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNvbnZlcnRQaXhlbEJ1ZmZlciwgVlRQaXhlbFRyYW5zZmVy
U2Vzc2lvblRyYW5zZmVySW1hZ2UgZmFpbGVkIHdpdGggZXJyb3IgJWQiLCBzdGF0aWNfY2FzdDxp
bnQ+KGVycikpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gSW1hZ2VUcmFuc2ZlclNl
c3Npb25WVDo6Y3JlYXRlUGl4ZWxCdWZmZXIoQ01TYW1wbGVCdWZmZXJSZWYgc291cmNlQnVmZmVy
LCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIGF1dG8gY29udmVydGVkUGl4ZWxCdWZmZXIg
PSBjb252ZXJ0UGl4ZWxCdWZmZXIoQ01TYW1wbGVCdWZmZXJHZXRJbWFnZUJ1ZmZlcihzb3VyY2VC
dWZmZXIpLCBzaXplKTsKKyAgICBpZiAoIWNvbnZlcnRlZFBpeGVsQnVmZmVyKQorICAgICAgICBS
RUxFQVNFX0xPRyhNZWRpYSwgIkltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNyZWF0ZVBpeGVsQnVm
ZmVyOiBDTVNhbXBsZUJ1ZmZlckdldEltYWdlQnVmZmVyIHJldHVybmVkIG51bGxwdHIiKTsKKwor
ICAgIHJldHVybiBjb252ZXJ0ZWRQaXhlbEJ1ZmZlcjsKK30KKworUmV0YWluUHRyPENNU2FtcGxl
QnVmZmVyUmVmPiBJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjb252ZXJ0Q01TYW1wbGVCdWZmZXIo
Q01TYW1wbGVCdWZmZXJSZWYgc291cmNlQnVmZmVyLCBjb25zdCBJbnRTaXplJiBzaXplKQorewor
ICAgIGlmICghc291cmNlQnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1
dG8gZGVzY3JpcHRpb24gPSBDTVNhbXBsZUJ1ZmZlckdldEZvcm1hdERlc2NyaXB0aW9uKHNvdXJj
ZUJ1ZmZlcik7CisgICAgYXV0byBzb3VyY2VTaXplID0gRmxvYXRTaXplKENNVmlkZW9Gb3JtYXRE
ZXNjcmlwdGlvbkdldFByZXNlbnRhdGlvbkRpbWVuc2lvbnMoZGVzY3JpcHRpb24sIHRydWUsIHRy
dWUpKTsKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gc3RhdGljX2Nhc3Q8Q1ZQaXhlbEJ1ZmZlclJl
Zj4oQ01TYW1wbGVCdWZmZXJHZXRJbWFnZUJ1ZmZlcihzb3VyY2VCdWZmZXIpKTsKKyAgICBpZiAo
c2l6ZSA9PSByb3VuZGVkSW50U2l6ZShzb3VyY2VTaXplKSAmJiBtX3BpeGVsRm9ybWF0ID09IENW
UGl4ZWxCdWZmZXJHZXRQaXhlbEZvcm1hdFR5cGUocGl4ZWxCdWZmZXIpKQorICAgICAgICByZXR1
cm4gcmV0YWluUHRyKHNvdXJjZUJ1ZmZlcik7CisKKyAgICBpZiAoIXNldFNpemUoc2l6ZSkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9
IGNyZWF0ZVBpeGVsQnVmZmVyKHNvdXJjZUJ1ZmZlciwgc2l6ZSk7CisgICAgaWYgKCFjb252ZXJ0
ZWRQaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBDTUl0ZW1Db3Vu
dCBpdGVtQ291bnQgPSAwOworICAgIGF1dG8gc3RhdHVzID0gQ01TYW1wbGVCdWZmZXJHZXRTYW1w
bGVUaW1pbmdJbmZvQXJyYXkoc291cmNlQnVmZmVyLCAxLCBudWxscHRyLCAmaXRlbUNvdW50KTsK
KyAgICBpZiAoc3RhdHVzICE9IG5vRXJyKSB7CisgICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhLCAi
SW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y29udmVydENNU2FtcGxlQnVmZmVyOiBDTVNhbXBsZUJ1
ZmZlckdldFNhbXBsZVRpbWluZ0luZm9BcnJheSBmYWlsZWQgd2l0aCBlcnJvciBjb2RlOiAlZCIs
IHN0YXRpY19jYXN0PGludD4oc3RhdHVzKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KKyAgICBWZWN0b3I8Q01TYW1wbGVUaW1pbmdJbmZvPiB0aW1pbmdJbmZvQXJyYXk7CisgICAg
Q01TYW1wbGVUaW1pbmdJbmZvKiB0aW1laW5nSW5mb1B0ciA9IG51bGxwdHI7CisgICAgaWYgKGl0
ZW1Db3VudCkgeworICAgICAgICB0aW1pbmdJbmZvQXJyYXkuZ3JvdyhpdGVtQ291bnQpOworICAg
ICAgICBzdGF0dXMgPSBDTVNhbXBsZUJ1ZmZlckdldFNhbXBsZVRpbWluZ0luZm9BcnJheShzb3Vy
Y2VCdWZmZXIsIGl0ZW1Db3VudCwgdGltaW5nSW5mb0FycmF5LmRhdGEoKSwgbnVsbHB0cik7Cisg
ICAgICAgIGlmIChzdGF0dXMgIT0gbm9FcnIpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HKE1l
ZGlhLCAiSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y29udmVydENNU2FtcGxlQnVmZmVyOiBDTVNh
bXBsZUJ1ZmZlckdldFNhbXBsZVRpbWluZ0luZm9BcnJheSBmYWlsZWQgd2l0aCBlcnJvciBjb2Rl
OiAlZCIsIHN0YXRpY19jYXN0PGludD4oc3RhdHVzKSk7CisgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgfQorICAgICAgICB0aW1laW5nSW5mb1B0ciA9IHRpbWluZ0luZm9BcnJh
eS5kYXRhKCk7CisgICAgfQorCisgICAgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uUmVmIGZvcm1h
dERlc2NyaXB0aW9uID0gbnVsbHB0cjsKKyAgICBzdGF0dXMgPSBDTVZpZGVvRm9ybWF0RGVzY3Jp
cHRpb25DcmVhdGVGb3JJbWFnZUJ1ZmZlcihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBjb252ZXJ0ZWRQ
aXhlbEJ1ZmZlci5nZXQoKSwgJmZvcm1hdERlc2NyaXB0aW9uKTsKKyAgICBpZiAoc3RhdHVzICE9
IG5vRXJyKSB7CisgICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhLCAiSW1hZ2VUcmFuc2ZlclNlc3Np
b25WVDo6Y29udmVydENNU2FtcGxlQnVmZmVyOiBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25DcmVh
dGVGb3JJbWFnZUJ1ZmZlciByZXR1cm5lZDogJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykp
OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBDTVNhbXBsZUJ1ZmZlclJl
ZiByZXNpemVkU2FtcGxlQnVmZmVyOworICAgIHN0YXR1cyA9IENNU2FtcGxlQnVmZmVyQ3JlYXRl
UmVhZHlXaXRoSW1hZ2VCdWZmZXIoa0NGQWxsb2NhdG9yRGVmYXVsdCwgY29udmVydGVkUGl4ZWxC
dWZmZXIuZ2V0KCksIGZvcm1hdERlc2NyaXB0aW9uLCB0aW1laW5nSW5mb1B0ciwgJnJlc2l6ZWRT
YW1wbGVCdWZmZXIpOworICAgIENGUmVsZWFzZShmb3JtYXREZXNjcmlwdGlvbik7CisgICAgaWYg
KHN0YXR1cyAhPSBub0VycikgeworICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIkltYWdlVHJh
bnNmZXJTZXNzaW9uVlQ6OmNvbnZlcnRDTVNhbXBsZUJ1ZmZlcjogZmFpbGVkIHRvIGNyZWF0ZSBD
TVNhbXBsZUJ1ZmZlciB3aXRoIGVycm9yIGNvZGU6ICVkIiwgc3RhdGljX2Nhc3Q8aW50PihzdGF0
dXMpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIGFkb3B0
Q0YocmVzaXplZFNhbXBsZUJ1ZmZlcik7Cit9CisKK1JldGFpblB0cjxDVlBpeGVsQnVmZmVyUmVm
PiBJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVhdGVQaXhlbEJ1ZmZlcihDR0ltYWdlUmVmIGlt
YWdlLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIGlmICghaW1hZ2UgfHwgIXNldFNpemUo
c2l6ZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQ1ZQaXhlbEJ1ZmZlclJlZiBy
Z2JCdWZmZXI7CisgICAgYXV0byBpbWFnZVNpemUgPSBJbnRTaXplKENHSW1hZ2VHZXRXaWR0aChp
bWFnZSksIENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpKTsKKyAgICBhdXRvIHN0YXR1cyA9IENWUGl4
ZWxCdWZmZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgaW1hZ2VTaXplLndpZHRoKCksIGlt
YWdlU2l6ZS5oZWlnaHQoKSwga0NWUGl4ZWxGb3JtYXRUeXBlXzMyQVJHQiwgbnVsbHB0ciwgJnJn
YkJ1ZmZlcik7CisgICAgaWYgKHN0YXR1cyAhPSBrQ1ZSZXR1cm5TdWNjZXNzKSB7CisgICAgICAg
IFJFTEVBU0VfTE9HKE1lZGlhLCAiSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlUGl4ZWxC
dWZmZXI6IENWUGl4ZWxCdWZmZXJDcmVhdGUgZmFpbGVkIHdpdGggZXJyb3IgY29kZTogJWQiLCBz
dGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9
CisKKyAgICBDVlBpeGVsQnVmZmVyTG9ja0Jhc2VBZGRyZXNzKHJnYkJ1ZmZlciwgMCk7CisgICAg
dm9pZCogZGF0YSA9IENWUGl4ZWxCdWZmZXJHZXRCYXNlQWRkcmVzcyhyZ2JCdWZmZXIpOworICAg
IGF1dG8gcmV0YWluZWRSR0JCdWZmZXIgPSBhZG9wdENGKHJnYkJ1ZmZlcik7CisgICAgYXV0byBj
b250ZXh0ID0gQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKGRhdGEsIGltYWdlU2l6ZS53aWR0aCgpLCBp
bWFnZVNpemUuaGVpZ2h0KCksIDgsIENWUGl4ZWxCdWZmZXJHZXRCeXRlc1BlclJvdyhyZ2JCdWZm
ZXIpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCAoQ0dCaXRtYXBJbmZvKSBrQ0dJbWFnZUFscGhhTm9u
ZVNraXBGaXJzdCk7CisgICAgaWYgKCFjb250ZXh0KSB7CisgICAgICAgIFJFTEVBU0VfTE9HKE1l
ZGlhLCAiSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlUGl4ZWxCdWZmZXI6IENHQml0bWFw
Q29udGV4dENyZWF0ZSByZXR1cm5lZCBudWxscHRyIik7CisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIH0KKworICAgIGF1dG8gcmV0YWluZWRDb250ZXh0ID0gYWRvcHRDRihjb250ZXh0KTsK
KyAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwgQ0dSZWN0TWFrZSgwLCAwLCBpbWFnZVNp
emUud2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpKSwgaW1hZ2UpOworICAgIENWUGl4ZWxCdWZm
ZXJVbmxvY2tCYXNlQWRkcmVzcyhyZ2JCdWZmZXIsIDApOworCisgICAgcmV0dXJuIGNvbnZlcnRQ
aXhlbEJ1ZmZlcihyZ2JCdWZmZXIsIHNpemUpOworfQorCitSZXRhaW5QdHI8Q01TYW1wbGVCdWZm
ZXJSZWY+IEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNyZWF0ZUNNU2FtcGxlQnVmZmVyKENWUGl4
ZWxCdWZmZXJSZWYgc291cmNlQnVmZmVyLCBjb25zdCBNZWRpYVRpbWUmIHNhbXBsZVRpbWUsIGNv
bnN0IEludFNpemUmIHNpemUpCit7CisgICAgaWYgKCFzb3VyY2VCdWZmZXIgfHwgIXNldFNpemUo
c2l6ZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBidWZmZXJTaXplID0g
SW50U2l6ZShDVlBpeGVsQnVmZmVyR2V0V2lkdGgoc291cmNlQnVmZmVyKSwgQ1ZQaXhlbEJ1ZmZl
ckdldEhlaWdodChzb3VyY2VCdWZmZXIpKTsKKyAgICBSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJl
Zj4gaW5wdXRCdWZmZXIgPSBzb3VyY2VCdWZmZXI7CisgICAgaWYgKGJ1ZmZlclNpemUgIT0gbV9z
aXplIHx8IG1fcGl4ZWxGb3JtYXQgIT0gQ1ZQaXhlbEJ1ZmZlckdldFBpeGVsRm9ybWF0VHlwZShz
b3VyY2VCdWZmZXIpKSB7CisgICAgICAgIGlucHV0QnVmZmVyID0gY29udmVydFBpeGVsQnVmZmVy
KHNvdXJjZUJ1ZmZlciwgbV9zaXplKTsKKyAgICAgICAgaWYgKCFpbnB1dEJ1ZmZlcikKKyAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIENNVmlkZW9Gb3JtYXREZXNjcmlw
dGlvblJlZiBmb3JtYXREZXNjcmlwdGlvbiA9IG51bGxwdHI7CisgICAgYXV0byBzdGF0dXMgPSBD
TVZpZGVvRm9ybWF0RGVzY3JpcHRpb25DcmVhdGVGb3JJbWFnZUJ1ZmZlcihrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCAoQ1ZJbWFnZUJ1ZmZlclJlZilpbnB1dEJ1ZmZlci5nZXQoKSwgJmZvcm1hdERlc2Ny
aXB0aW9uKTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhLCAi
SW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y29udmVydFBpeGVsQnVmZmVyOiBmYWlsZWQgdG8gaW5p
dGlhbGl6ZSBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb24gd2l0aCBlcnJvciBjb2RlOiAlZCIsIHN0
YXRpY19jYXN0PGludD4oc3RhdHVzKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0K
KworICAgIENNU2FtcGxlQnVmZmVyUmVmIHNhbXBsZUJ1ZmZlcjsKKyAgICBhdXRvIGNtVGltZSA9
IHRvQ01UaW1lKHNhbXBsZVRpbWUpOworICAgIENNU2FtcGxlVGltaW5nSW5mbyB0aW1pbmdJbmZv
ID0geyBrQ01UaW1lSW52YWxpZCwgY21UaW1lLCBjbVRpbWUgfTsKKyAgICBzdGF0dXMgPSBDTVNh
bXBsZUJ1ZmZlckNyZWF0ZVJlYWR5V2l0aEltYWdlQnVmZmVyKGtDRkFsbG9jYXRvckRlZmF1bHQs
IChDVkltYWdlQnVmZmVyUmVmKWlucHV0QnVmZmVyLmdldCgpLCBmb3JtYXREZXNjcmlwdGlvbiwg
JnRpbWluZ0luZm8sICZzYW1wbGVCdWZmZXIpOworICAgIENGUmVsZWFzZShmb3JtYXREZXNjcmlw
dGlvbik7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIklt
YWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNvbnZlcnRQaXhlbEJ1ZmZlcjogZmFpbGVkIHRvIGluaXRp
YWxpemUgQ01TYW1wbGVCdWZmZXIgd2l0aCBlcnJvciBjb2RlOiAlZCIsIHN0YXRpY19jYXN0PGlu
dD4oc3RhdHVzKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHJldHVy
biBhZG9wdENGKHNhbXBsZUJ1ZmZlcik7Cit9CisKK1JldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJl
Zj4gSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlQ01TYW1wbGVCdWZmZXIoQ0dJbWFnZVJl
ZiBpbWFnZSwgY29uc3QgTWVkaWFUaW1lJiBzYW1wbGVUaW1lLCBjb25zdCBJbnRTaXplJiBzaXpl
KQoreworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBjcmVhdGVQaXhlbEJ1ZmZlcihpbWFnZSwgc2l6
ZSk7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICByZXR1cm4gY3JlYXRlQ01TYW1wbGVCdWZmZXIocGl4ZWxCdWZmZXIuZ2V0KCksIHNhbXBsZVRp
bWUsIHNpemUpOworfQorCisjaWYgSEFWRShJT1NVUkZBQ0UpCisKKyNpZiBQTEFURk9STShNQUMp
CitzdGF0aWMgaW50MzJfdCByb3VuZFVwVG9NYWNyb2Jsb2NrTXVsdGlwbGUoaW50MzJfdCBzaXpl
KQoreworICAgIHJldHVybiAoc2l6ZSArIDE1KSAmIH4xNTsKK30KKyNlbmRpZgorCitDRkRpY3Rp
b25hcnlSZWYgSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6aW9TdXJmYWNlUGl4ZWxCdWZmZXJDcmVh
dGlvbk9wdGlvbnMoSU9TdXJmYWNlUmVmIHN1cmZhY2UpCit7CisgICAgaWYgKG1faW9TdXJmYWNl
QnVmZmVyQXR0cmlidXRlcykKKyAgICAgICAgcmV0dXJuIG1faW9TdXJmYWNlQnVmZmVyQXR0cmli
dXRlcy5nZXQoKTsKKworICAgIG1faW9TdXJmYWNlQnVmZmVyQXR0cmlidXRlcyA9IChfX2JyaWRn
ZSBDRkRpY3Rpb25hcnlSZWYpIEB7CisgICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWN2UGl4
ZWxGb3JtYXRPcGVuR0xLZXkoKSA6IEAoWUVTKSwKKyAgICB9OworCisjaWYgUExBVEZPUk0oTUFD
KQorICAgIGF1dG8gZm9ybWF0ID0gSU9TdXJmYWNlR2V0UGl4ZWxGb3JtYXQoc3VyZmFjZSk7Cisg
ICAgYXV0byB3aWR0aCA9IElPU3VyZmFjZUdldFdpZHRoKHN1cmZhY2UpOworICAgIGF1dG8gaGVp
Z2h0ID0gSU9TdXJmYWNlR2V0SGVpZ2h0KHN1cmZhY2UpOworICAgIGludDMyX3QgZXh0ZW5kZWRS
aWdodCA9IHJvdW5kVXBUb01hY3JvYmxvY2tNdWx0aXBsZSh3aWR0aCkgLSB3aWR0aDsKKyAgICBp
bnQzMl90IGV4dGVuZGVkQm90dG9tID0gcm91bmRVcFRvTWFjcm9ibG9ja011bHRpcGxlKGhlaWdo
dCkgLSBoZWlnaHQ7CisKKyAgICBpZiAoKGZvcm1hdCA9PSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIw
WXBDYkNyOEJpUGxhbmFyVmlkZW9SYW5nZSB8fCBmb3JtYXQgPT0ga0NWUGl4ZWxGb3JtYXRUeXBl
XzQyMFlwQ2JDcjhCaVBsYW5hckZ1bGxSYW5nZSkKKyAgICAgICAgJiYgKElPU3VyZmFjZUdldEJ5
dGVzUGVyUm93T2ZQbGFuZShzdXJmYWNlLCAwKSA+PSB3aWR0aCArIGV4dGVuZGVkUmlnaHQpCisg
ICAgICAgICYmIChJT1N1cmZhY2VHZXRCeXRlc1BlclJvd09mUGxhbmUoc3VyZmFjZSwgMSkgPj0g
d2lkdGggKyBleHRlbmRlZFJpZ2h0KQorICAgICAgICAmJiAoSU9TdXJmYWNlR2V0QWxsb2NTaXpl
KHN1cmZhY2UpID49IChoZWlnaHQgKyBleHRlbmRlZEJvdHRvbSkgKiBJT1N1cmZhY2VHZXRCeXRl
c1BlclJvd09mUGxhbmUoc3VyZmFjZSwgMCkgKiAzIC8gMikpIHsKKyAgICAgICAgICAgIG1faW9T
dXJmYWNlQnVmZmVyQXR0cmlidXRlcyA9IChfX2JyaWRnZSBDRkRpY3Rpb25hcnlSZWYpIEB7Cisg
ICAgICAgICAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxCdWZmZXJPcGVuR0xD
b21wYXRpYmlsaXR5S2V5IDogQChZRVMpLAorICAgICAgICAgICAgICAgIChfX2JyaWRnZSBOU1N0
cmluZyAqKWtDVlBpeGVsQnVmZmVyRXh0ZW5kZWRQaXhlbHNSaWdodEtleSA6IEAoZXh0ZW5kZWRS
aWdodCksCisgICAgICAgICAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxCdWZm
ZXJFeHRlbmRlZFBpeGVsc0JvdHRvbUtleSA6IEAoZXh0ZW5kZWRCb3R0b20pCisgICAgICAgICAg
ICB9OworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHN1cmZhY2UpOworI2VuZGlmCisK
KyAgICByZXR1cm4gbV9pb1N1cmZhY2VCdWZmZXJBdHRyaWJ1dGVzLmdldCgpOworfQorCitSZXRh
aW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlUGl4
ZWxCdWZmZXIoSU9TdXJmYWNlUmVmIHN1cmZhY2UsIGNvbnN0IEludFNpemUmIHNpemUpCit7Cisg
ICAgaWYgKCFzdXJmYWNlIHx8ICFzZXRTaXplKHNpemUpKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIENWUGl4ZWxCdWZmZXJSZWYgcGl4ZWxCdWZmZXI7CisgICAgYXV0byBzdGF0dXMg
PSBDVlBpeGVsQnVmZmVyQ3JlYXRlV2l0aElPU3VyZmFjZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBz
dXJmYWNlLCBpb1N1cmZhY2VQaXhlbEJ1ZmZlckNyZWF0aW9uT3B0aW9ucyhzdXJmYWNlKSwgJnBp
eGVsQnVmZmVyKTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIFJFTEVBU0VfTE9HKE1lZGlh
LCAiQ1ZQaXhlbEJ1ZmZlckNyZWF0ZVdpdGhJT1N1cmZhY2UgZmFpbGVkIHdpdGggZXJyb3IgY29k
ZTogJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9CisKKyAgICBhdXRvIHJldGFpbmVkQnVmZmVyID0gYWRvcHRDRihwaXhlbEJ1ZmZl
cik7CisgICAgaWYgKG1fc2l6ZSA9PSBJbnRTaXplKENWUGl4ZWxCdWZmZXJHZXRXaWR0aChwaXhl
bEJ1ZmZlciksIENWUGl4ZWxCdWZmZXJHZXRIZWlnaHQocGl4ZWxCdWZmZXIpKSAmJiBtX3BpeGVs
Rm9ybWF0ID09IENWUGl4ZWxCdWZmZXJHZXRQaXhlbEZvcm1hdFR5cGUocGl4ZWxCdWZmZXIpKQor
ICAgICAgICByZXR1cm4gcmV0YWluZWRCdWZmZXI7CisKKyAgICByZXR1cm4gY29udmVydFBpeGVs
QnVmZmVyKHBpeGVsQnVmZmVyLCBzaXplKTsKK30KKworUmV0YWluUHRyPENNU2FtcGxlQnVmZmVy
UmVmPiBJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVhdGVDTVNhbXBsZUJ1ZmZlcihJT1N1cmZh
Y2VSZWYgc3VyZmFjZSwgY29uc3QgTWVkaWFUaW1lJiBzYW1wbGVUaW1lLCBjb25zdCBJbnRTaXpl
JiBzaXplKQoreworICAgIGlmICghc3VyZmFjZSB8fCAhc2V0U2l6ZShzaXplKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gY3JlYXRlUGl4ZWxCdWZm
ZXIoc3VyZmFjZSwgc2l6ZSk7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICByZXR1cm4gY3JlYXRlQ01TYW1wbGVCdWZmZXIocGl4ZWxCdWZmZXIu
Z2V0KCksIHNhbXBsZVRpbWUsIHNpemUpOworfQorI2VuZGlmCisKK1JlZlB0cjxNZWRpYVNhbXBs
ZT4gSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y29udmVydE1lZGlhU2FtcGxlKE1lZGlhU2FtcGxl
JiBzYW1wbGUsIGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgQVNTRVJUKHNhbXBsZS5wbGF0
Zm9ybVNhbXBsZSgpLnR5cGUgPT0gUGxhdGZvcm1TYW1wbGU6OkNNU2FtcGxlQnVmZmVyVHlwZSk7
CisKKyAgICBpZiAoc2l6ZSA9PSByb3VuZGVkSW50U2l6ZShzYW1wbGUucHJlc2VudGF0aW9uU2l6
ZSgpKSkKKyAgICAgICAgcmV0dXJuICZzYW1wbGU7CisKKyAgICBpZiAoIXNldFNpemUoc2l6ZSkp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byByZXNpemVkQnVmZmVyID0gY29u
dmVydENNU2FtcGxlQnVmZmVyKHNhbXBsZS5wbGF0Zm9ybVNhbXBsZSgpLnNhbXBsZS5jbVNhbXBs
ZUJ1ZmZlciwgc2l6ZSk7CisgICAgaWYgKCFyZXNpemVkQnVmZmVyKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIHJldHVybiBNZWRpYVNhbXBsZUFWRk9iakM6OmNyZWF0ZShyZXNpemVk
QnVmZmVyLmdldCgpLCBzYW1wbGUudmlkZW9Sb3RhdGlvbigpLCBzYW1wbGUudmlkZW9NaXJyb3Jl
ZCgpKTsKK30KKworI2lmIEhBVkUoSU9TVVJGQUNFKQorUmVmUHRyPE1lZGlhU2FtcGxlPiBJbWFn
ZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVhdGVNZWRpYVNhbXBsZShJT1N1cmZhY2VSZWYgc3VyZmFj
ZSwgY29uc3QgTWVkaWFUaW1lJiBzYW1wbGVUaW1lLCBjb25zdCBJbnRTaXplJiBzaXplLCBNZWRp
YVNhbXBsZTo6VmlkZW9Sb3RhdGlvbiByb3RhdGlvbiwgYm9vbCBtaXJyb3JlZCkKK3sKKyAgICBh
dXRvIHNhbXBsZUJ1ZmZlciA9IGNyZWF0ZUNNU2FtcGxlQnVmZmVyKHN1cmZhY2UsIHNhbXBsZVRp
bWUsIHNpemUpOworICAgIGlmICghc2FtcGxlQnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIHJldHVybiBNZWRpYVNhbXBsZUFWRk9iakM6OmNyZWF0ZShzYW1wbGVCdWZmZXIu
Z2V0KCksIHJvdGF0aW9uLCBtaXJyb3JlZCk7Cit9CisjZW5kaWYKKworUmVmUHRyPE1lZGlhU2Ft
cGxlPiBJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVhdGVNZWRpYVNhbXBsZShDR0ltYWdlUmVm
IGltYWdlLCBjb25zdCBNZWRpYVRpbWUmIHNhbXBsZVRpbWUsIGNvbnN0IEludFNpemUmIHNpemUs
IE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uIHJvdGF0aW9uLCBib29sIG1pcnJvcmVkKQorewor
ICAgIGF1dG8gc2FtcGxlQnVmZmVyID0gY3JlYXRlQ01TYW1wbGVCdWZmZXIoaW1hZ2UsIHNhbXBs
ZVRpbWUsIHNpemUpOworICAgIGlmICghc2FtcGxlQnVmZmVyKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIHJldHVybiBNZWRpYVNhbXBsZUFWRk9iakM6OmNyZWF0ZShzYW1wbGVCdWZm
ZXIuZ2V0KCksIHJvdGF0aW9uLCBtaXJyb3JlZCk7Cit9CisKK1JlZlB0cjxNZWRpYVNhbXBsZT4g
SW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlTWVkaWFTYW1wbGUoQ01TYW1wbGVCdWZmZXJS
ZWYgYnVmZmVyLCBjb25zdCBJbnRTaXplJiBzaXplLCBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlv
biByb3RhdGlvbiwgYm9vbCBtaXJyb3JlZCkKK3sKKyAgICBhdXRvIHNhbXBsZUJ1ZmZlciA9IGNv
bnZlcnRDTVNhbXBsZUJ1ZmZlcihidWZmZXIsIHNpemUpOworICAgIGlmICghc2FtcGxlQnVmZmVy
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBNZWRpYVNhbXBsZUFWRk9i
akM6OmNyZWF0ZShzYW1wbGVCdWZmZXIuZ2V0KCksIHJvdGF0aW9uLCBtaXJyb3JlZCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShWSURFT1RPT0xCT1gpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9QaXhlbEJ1ZmZl
clJlc2l6ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L1BpeGVsQnVm
ZmVyUmVzaXplci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZGNkNGFiMjI0MDUw
ZTQ3ZmI1NzNjNWE5M2UzNzVmODgyOTE1ZjVkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L1Bp
eGVsQnVmZmVyUmVzaXplci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgVVNFKFZJREVPVE9PTEJPWCkKLQotI2luY2x1ZGUg
IkludFNpemUuaCIKLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLXR5cGVkZWYgc3RydWN0
IE9wYXF1ZVZUUGl4ZWxUcmFuc2ZlclNlc3Npb24qIFZUUGl4ZWxUcmFuc2ZlclNlc3Npb25SZWY7
Ci10eXBlZGVmIHN0cnVjdCBfX0NWQnVmZmVyICpDVlBpeGVsQnVmZmVyUmVmOwotdHlwZWRlZiBz
dHJ1Y3QgX19DVlBpeGVsQnVmZmVyUG9vbCAqQ1ZQaXhlbEJ1ZmZlclBvb2xSZWY7Ci10eXBlZGVm
IHN0cnVjdCBvcGFxdWVDTVNhbXBsZUJ1ZmZlciAqQ01TYW1wbGVCdWZmZXJSZWY7Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUGl4ZWxCdWZmZXJSZXNpemVyIHsKLXB1YmxpYzoKLSAg
ICBQaXhlbEJ1ZmZlclJlc2l6ZXIoSW50U2l6ZSwgT1NUeXBlKTsKLQotICAgIFJldGFpblB0cjxD
VlBpeGVsQnVmZmVyUmVmPiByZXNpemUoQ1ZQaXhlbEJ1ZmZlclJlZik7Ci0gICAgUmV0YWluUHRy
PENNU2FtcGxlQnVmZmVyUmVmPiByZXNpemUoQ01TYW1wbGVCdWZmZXJSZWYpOwotICAgIGJvb2wg
Y2FuUmVzaXplVG8oSW50U2l6ZSBzaXplKSB7IHJldHVybiBzaXplID09IG1fc2l6ZTsgfQotCi1w
cml2YXRlOgotICAgIFJldGFpblB0cjxWVFBpeGVsVHJhbnNmZXJTZXNzaW9uUmVmPiBtX3RyYW5z
ZmVyU2Vzc2lvbjsKLSAgICBSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclBvb2xSZWY+IG1fYnVmZmVy
UG9vbDsKLSAgICBJbnRTaXplIG1fc2l6ZTsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIFVTRShWSURF
T1RPT0xCT1gpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
di9QaXhlbEJ1ZmZlclJlc2l6ZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jdi9QaXhlbEJ1ZmZlclJlc2l6ZXIubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDZjNzQxYTBjZjM1MjAxMjYyOWEwMjkwMThmY2M1MjJjZGJiZWJlODguLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJSZXNpemVyLm1tCisrKyAvZGV2L251bGwKQEAgLTEsMTM4
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJQaXhl
bEJ1ZmZlclJlc2l6ZXIuaCIKLQotI2lmIFVTRShWSURFT1RPT0xCT1gpCi0KLSNpbXBvcnQgIkxv
Z2dpbmcuaCIKLSNpbXBvcnQgPHd0Zi9Tb2Z0TGlua2luZy5oPgotCi0jaW1wb3J0ICJDb3JlVmlk
ZW9Tb2Z0TGluay5oIgotI2ltcG9ydCAiVmlkZW9Ub29sYm94U29mdExpbmsuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1QaXhlbEJ1ZmZlclJlc2l6ZXI6OlBpeGVsQnVmZmVyUmVzaXplcihJ
bnRTaXplIHNpemUsIE9TVHlwZSB2aWRlb0Zvcm1hdCkKLXsKLSAgICBWVFBpeGVsVHJhbnNmZXJT
ZXNzaW9uUmVmIHRyYW5zZmVyU2Vzc2lvbjsKLSAgICBWVFBpeGVsVHJhbnNmZXJTZXNzaW9uQ3Jl
YXRlKE5VTEwsICZ0cmFuc2ZlclNlc3Npb24pOwotICAgIEFTU0VSVCh0cmFuc2ZlclNlc3Npb24p
OwotICAgIG1fdHJhbnNmZXJTZXNzaW9uID0gYWRvcHRDRih0cmFuc2ZlclNlc3Npb24pOwotCi0g
ICAgVlRTZXNzaW9uU2V0UHJvcGVydHkodHJhbnNmZXJTZXNzaW9uLCBrVlRQaXhlbFRyYW5zZmVy
UHJvcGVydHlLZXlfU2NhbGluZ01vZGUsIGtWVFNjYWxpbmdNb2RlX1RyaW0pOwotCi0gICAgQ0ZE
aWN0aW9uYXJ5UmVmIHNvdXJjZVBpeGVsQnVmZmVyT3B0aW9ucyA9IChfX2JyaWRnZSBDRkRpY3Rp
b25hcnlSZWYpIEB7Ci0gICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsQnVmZmVy
V2lkdGhLZXkgOkAoc2l6ZS53aWR0aCgpKSwKLSAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICop
a0NWUGl4ZWxCdWZmZXJIZWlnaHRLZXk6QChzaXplLmhlaWdodCgpKSwKLSAgICAgICAgKF9fYnJp
ZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxCdWZmZXJQaXhlbEZvcm1hdFR5cGVLZXk6QCh2aWRlb0Zv
cm1hdCksCi0jaWYgUExBVEZPUk0oSU9TKSAmJiAhUExBVEZPUk0oSU9TTUFDKQotICAgICAgICAo
X19icmlkZ2UgTlNTdHJpbmcgKilrQ1ZQaXhlbEZvcm1hdE9wZW5HTEVTQ29tcGF0aWJpbGl0eSA6
IEAoWUVTKSwKLSNlbHNlCi0gICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsQnVm
ZmVyT3BlbkdMQ29tcGF0aWJpbGl0eUtleSA6IEAoWUVTKSwKLSNlbmRpZgotICAgICAgICAoX19i
cmlkZ2UgTlNTdHJpbmcgKilrQ1ZQaXhlbEJ1ZmZlcklPU3VyZmFjZVByb3BlcnRpZXNLZXkgOiBA
eyAvKmVtcHR5IGRpY3Rpb25hcnkqLyB9LAotICAgIH07Ci0gICAgQ1ZQaXhlbEJ1ZmZlclBvb2xS
ZWYgYnVmZmVyUG9vbDsKLSAgICBhdXRvIHN0YXR1cyA9IENWUGl4ZWxCdWZmZXJQb29sQ3JlYXRl
KGtDRkFsbG9jYXRvckRlZmF1bHQsIE5VTEwsIHNvdXJjZVBpeGVsQnVmZmVyT3B0aW9ucywgJmJ1
ZmZlclBvb2wpOwotICAgIEFTU0VSVCghc3RhdHVzKTsKLSAgICBpZiAoc3RhdHVzICE9IGtDVlJl
dHVyblN1Y2Nlc3MpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fYnVmZmVyUG9vbCA9IGFkb3B0
Q0YoYnVmZmVyUG9vbCk7Ci0gICAgbV9zaXplID0gc2l6ZTsKLX0KLQotUmV0YWluUHRyPENWUGl4
ZWxCdWZmZXJSZWY+IFBpeGVsQnVmZmVyUmVzaXplcjo6cmVzaXplKENWUGl4ZWxCdWZmZXJSZWYg
aW5wdXRCdWZmZXIpCi17Ci0gICAgQVNTRVJUKG1fYnVmZmVyUG9vbCAmJiAhbV9zaXplLmlzRW1w
dHkoKSk7Ci0gICAgaWYgKCFtX2J1ZmZlclBvb2wgfHwgbV9zaXplLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gcmVz
dWx0OwotICAgIENWUGl4ZWxCdWZmZXJSZWYgb3V0cHV0QnVmZmVyID0gbnVsbHB0cjsKLQotICAg
IGF1dG8gc3RhdHVzID0gQ1ZQaXhlbEJ1ZmZlclBvb2xDcmVhdGVQaXhlbEJ1ZmZlcihrQ0ZBbGxv
Y2F0b3JEZWZhdWx0LCBtX2J1ZmZlclBvb2wuZ2V0KCksICZvdXRwdXRCdWZmZXIpOwotICAgIGlm
IChzdGF0dXMpIHsKLSAgICAgICAgUkVMRUFTRV9MT0coTWVkaWEsICJQaXhlbEJ1ZmZlclJlc2l6
ZXI6OnJlc2l6ZSwgQ1ZQaXhlbEJ1ZmZlclBvb2xDcmVhdGVQaXhlbEJ1ZmZlciBmYWlsZWQgd2l0
aCBlcnJvciAlZCIsIHN0YXRpY19jYXN0PGludD4oc3RhdHVzKSk7Ci0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIH0KLSAgICByZXN1bHQgPSBhZG9wdENGKG91dHB1dEJ1ZmZlcik7Ci0KLSAg
ICBhdXRvIGVyciA9IFZUUGl4ZWxUcmFuc2ZlclNlc3Npb25UcmFuc2ZlckltYWdlKG1fdHJhbnNm
ZXJTZXNzaW9uLmdldCgpLCBpbnB1dEJ1ZmZlciwgb3V0cHV0QnVmZmVyKTsKLSAgICBpZiAoZXJy
KSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhLCAiUGl4ZWxCdWZmZXJSZXNpemVyOjpyZXNp
emUsIFZUUGl4ZWxUcmFuc2ZlclNlc3Npb25UcmFuc2ZlckltYWdlIGZhaWxlZCB3aXRoIGVycm9y
ICVkIiwgc3RhdGljX2Nhc3Q8aW50PihlcnIpKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUmV0YWluUHRyPENNU2FtcGxlQnVmZmVy
UmVmPiBQaXhlbEJ1ZmZlclJlc2l6ZXI6OnJlc2l6ZShDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGVC
dWZmZXIpCi17Ci0gICAgYXV0byBjb252ZXJ0ZWRQaXhlbEJ1ZmZlciA9IHJlc2l6ZShDTVNhbXBs
ZUJ1ZmZlckdldEltYWdlQnVmZmVyKHNhbXBsZUJ1ZmZlcikpOwotICAgIGlmICghY29udmVydGVk
UGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQ01WaWRlb0Zvcm1h
dERlc2NyaXB0aW9uUmVmIGZvcm1hdERlc2NyaXB0aW9uID0gbnVsbHB0cjsKLSAgICBhdXRvIHN0
YXR1cyA9IENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkNyZWF0ZUZvckltYWdlQnVmZmVyKGtDRkFs
bG9jYXRvckRlZmF1bHQsIGNvbnZlcnRlZFBpeGVsQnVmZmVyLmdldCgpLCAmZm9ybWF0RGVzY3Jp
cHRpb24pOwotICAgIGlmIChzdGF0dXMgIT0gbm9FcnIpIHsKLSAgICAgICAgUkVMRUFTRV9MT0co
TWVkaWEsICJQaXhlbEJ1ZmZlclJlc2l6ZXI6OnJlc2l6ZTogZmFpbGVkIHRvIGNyZWF0ZSBDTVZp
ZGVvRm9ybWF0RGVzY3JpcHRpb24gd2l0aCBlcnJvciBjb2RlOiAlZCIsIHN0YXRpY19jYXN0PGlu
dD4oc3RhdHVzKSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIENNSXRl
bUNvdW50IGl0ZW1Db3VudCA9IDA7Ci0gICAgc3RhdHVzID0gQ01TYW1wbGVCdWZmZXJHZXRTYW1w
bGVUaW1pbmdJbmZvQXJyYXkoc2FtcGxlQnVmZmVyLCAxLCBudWxscHRyLCAmaXRlbUNvdW50KTsK
LSAgICBpZiAoc3RhdHVzICE9IG5vRXJyKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhLCAi
UGl4ZWxCdWZmZXJSZXNpemVyOjpyZXNpemU6IENNU2FtcGxlQnVmZmVyR2V0U2FtcGxlVGltaW5n
SW5mb0FycmF5IGZhaWxlZCB3aXRoIGVycm9yIGNvZGU6ICVkIiwgc3RhdGljX2Nhc3Q8aW50Pihz
dGF0dXMpKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIFZlY3RvcjxDTVNh
bXBsZVRpbWluZ0luZm8+IHRpbWluZ0luZm9BcnJheTsKLSAgICBDTVNhbXBsZVRpbWluZ0luZm8q
IHRpbWVpbmdJbmZvUHRyID0gbnVsbHB0cjsKLSAgICBpZiAoaXRlbUNvdW50KSB7Ci0gICAgICAg
IHRpbWluZ0luZm9BcnJheS5ncm93KGl0ZW1Db3VudCk7Ci0gICAgICAgIHN0YXR1cyA9IENNU2Ft
cGxlQnVmZmVyR2V0U2FtcGxlVGltaW5nSW5mb0FycmF5KHNhbXBsZUJ1ZmZlciwgaXRlbUNvdW50
LCB0aW1pbmdJbmZvQXJyYXkuZGF0YSgpLCBudWxscHRyKTsKLSAgICAgICAgaWYgKHN0YXR1cyAh
PSBub0VycikgewotICAgICAgICAgICAgUkVMRUFTRV9MT0coTWVkaWEsICJQaXhlbEJ1ZmZlclJl
c2l6ZXI6OnJlc2l6ZTogQ01TYW1wbGVCdWZmZXJHZXRTYW1wbGVUaW1pbmdJbmZvQXJyYXkgZmFp
bGVkIHdpdGggZXJyb3IgY29kZTogJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOwotICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLSAgICAgICAgdGltZWluZ0luZm9Q
dHIgPSB0aW1pbmdJbmZvQXJyYXkuZGF0YSgpOwotICAgIH0KLQotICAgIENNU2FtcGxlQnVmZmVy
UmVmIHJlc2l6ZWRTYW1wbGVCdWZmZXI7Ci0gICAgc3RhdHVzID0gQ01TYW1wbGVCdWZmZXJDcmVh
dGVSZWFkeVdpdGhJbWFnZUJ1ZmZlcihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBjb252ZXJ0ZWRQaXhl
bEJ1ZmZlci5nZXQoKSwgZm9ybWF0RGVzY3JpcHRpb24sIHRpbWVpbmdJbmZvUHRyLCAmcmVzaXpl
ZFNhbXBsZUJ1ZmZlcik7Ci0gICAgQ0ZSZWxlYXNlKGZvcm1hdERlc2NyaXB0aW9uKTsKLSAgICBp
ZiAoc3RhdHVzICE9IG5vRXJyKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhLCAiUGl4ZWxC
dWZmZXJSZXNpemVyOjpyZXNpemU6IGZhaWxlZCB0byBjcmVhdGUgQ01TYW1wbGVCdWZmZXIgd2l0
aCBlcnJvciBjb2RlOiAlZCIsIHN0YXRpY19jYXN0PGludD4oc3RhdHVzKSk7Ci0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIH0KLQotICAgIHJldHVybiBhZG9wdENGKHJlc2l6ZWRTYW1wbGVC
dWZmZXIpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoVklE
RU9UT09MQk9YKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlLmNwcAppbmRleCA4MDUwNDMyN2UzYTY4MjQ5OTU4
NmY4ZDNjN2I4Y2UwNDRkYTMwMjg3Li5lYzhiNWI5ZGRlMGNjZDc1MTQxNGJlYTQyMmM1YzY1ZTli
MjM4YjFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9S
ZWFsdGltZU1lZGlhU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlLmNwcApAQCAtMTMzLDEwICsxMzMsNiBAQCB2b2lk
IFJlYWx0aW1lTWVkaWFTb3VyY2U6Om5vdGlmeU11dGVkT2JzZXJ2ZXJzKCkgY29uc3QKICAgICB9
KTsKIH0KIAotdm9pZCBSZWFsdGltZU1lZGlhU291cmNlOjpzZXR0aW5nc0RpZENoYW5nZShPcHRp
b25TZXQ8UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpGbGFnPikKLXsKLX0KLQogdm9pZCBS
ZWFsdGltZU1lZGlhU291cmNlOjpub3RpZnlTZXR0aW5nc0RpZENoYW5nZU9ic2VydmVycyhPcHRp
b25TZXQ8UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpGbGFnPiBmbGFncykKIHsKICAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZS5oCmluZGV4IDcxNmNlNjljMDI0
MDc2ZTJkYmYwZjY2NmJmNThlYzI5ZDI2ZDA0NjUuLmE5M2RlMzM4YzQxYTU3MWNiMTA1ZDFmNDM2
ZDUyYzVlNTkzODBiNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlLmgKQEAgLTIwMCw3ICsyMDAsNyBAQCBw
cm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzdGFydFByb2R1Y2luZ0RhdGEo
KSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc3RvcFByb2R1Y2luZ0RhdGEoKSB7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgc2V0dGluZ3NEaWRDaGFuZ2UoT3B0aW9uU2V0PFJlYWx0aW1lTWVkaWFTb3VyY2VT
ZXR0aW5nczo6RmxhZz4pOworICAgIHZpcnR1YWwgdm9pZCBzZXR0aW5nc0RpZENoYW5nZShPcHRp
b25TZXQ8UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpGbGFnPikgeyB9CiAKIAogICAgIHZv
aWQgZm9yRWFjaE9ic2VydmVyKGNvbnN0IFdURjo6RnVuY3Rpb248dm9pZChPYnNlcnZlciYpPiYp
IGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
bWFjL0FWVmlkZW9DYXB0dXJlU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9tYWMvQVZWaWRlb0NhcHR1cmVTb3VyY2UuaAppbmRleCAzYjQ5ZjQ2ZmRhM2VjMzI2
YzczODUxNzNmYTZjZDI3ZWNmMjllZjYyLi4yNmJmODMxNTQ1NWIxN2VjODMyMmZiNTkxMWFhOWUw
NWU3NjM2MzM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9tYWMvQVZWaWRlb0NhcHR1cmVTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvQVZWaWRlb0NhcHR1cmVTb3VyY2UuaApAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ5LDcgKzQ5LDcg
QEAgT0JKQ19DTEFTUyBXZWJDb3JlQVZWaWRlb0NhcHR1cmVTb3VyY2VPYnNlcnZlcjsKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQVZWaWRlb1ByZXNldDsKLWNsYXNzIFBpeGVsQnVmZmVy
UmVzaXplcjsKK2NsYXNzIEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ7CiAKIGNsYXNzIEFWVmlkZW9D
YXB0dXJlU291cmNlIDogcHVibGljIFJlYWx0aW1lVmlkZW9Tb3VyY2UsIHByaXZhdGUgT3JpZW50
YXRpb25Ob3RpZmllcjo6T2JzZXJ2ZXIgewogcHVibGljOgpAQCAtMTAzLDEzICsxMDMsMTQgQEAg
cHJpdmF0ZToKIAogICAgIGJvb2wgc2V0RnJhbWVSYXRlQ29uc3RyYWludChkb3VibGUgbWluRnJh
bWVSYXRlLCBkb3VibGUgbWF4RnJhbWVSYXRlKTsKIAotICAgIHZvaWQgcHJvY2Vzc05ld0ZyYW1l
KFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4sIFJldGFpblB0cjxBVkNhcHR1cmVDb25uZWN0
aW9uPik7CisgICAgdm9pZCBwcm9jZXNzTmV3RnJhbWUoUmVmUHRyPE1lZGlhU2FtcGxlPik7CiAg
ICAgSW50U2l6ZSBzaXplRm9yUHJlc2V0KE5TU3RyaW5nKik7CiAKICAgICBBVkNhcHR1cmVEZXZp
Y2UqIGRldmljZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGV2aWNlLmdldCgpOyB9CiAKLSAgICBSZXRh
aW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+IG1fYnVmZmVyOworICAgIFJlZlB0cjxNZWRpYVNhbXBs
ZT4gbV9idWZmZXI7CiAgICAgUmV0YWluUHRyPEFWQ2FwdHVyZVZpZGVvRGF0YU91dHB1dD4gbV92
aWRlb091dHB1dDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VUcmFuc2ZlclNlc3Npb25WVD4g
bV9pbWFnZVRyYW5zZmVyU2Vzc2lvbjsKIAogICAgIEludFNpemUgbV9yZXF1ZXN0ZWRTaXplOwog
ICAgIGludDMyX3QgbV93aWR0aCB7IDAgfTsKQEAgLTExOCw3ICsxMTksNiBAQCBwcml2YXRlOgog
ICAgIGludCBtX2RldmljZU9yaWVudGF0aW9uIHsgMCB9OwogICAgIE1lZGlhU2FtcGxlOjpWaWRl
b1JvdGF0aW9uIG1fc2FtcGxlUm90YXRpb24geyBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6
Tm9uZSB9OwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPFBpeGVsQnVmZmVyUmVzaXplcj4gbV9waXhl
bEJ1ZmZlclJlc2l6ZXI7CiAgICAgc3RkOjpvcHRpb25hbDxSZWFsdGltZU1lZGlhU291cmNlU2V0
dGluZ3M+IG1fY3VycmVudFNldHRpbmdzOwogICAgIHN0ZDo6b3B0aW9uYWw8UmVhbHRpbWVNZWRp
YVNvdXJjZUNhcGFiaWxpdGllcz4gbV9jYXBhYmlsaXRpZXM7CiAgICAgUmV0YWluUHRyPFdlYkNv
cmVBVlZpZGVvQ2FwdHVyZVNvdXJjZU9ic2VydmVyPiBtX29iamNPYnNlcnZlcjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVlZpZGVvQ2FwdHVy
ZVNvdXJjZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVlZp
ZGVvQ2FwdHVyZVNvdXJjZS5tbQppbmRleCA1MTk2MDgyMjJlNjYxNGFiMmVkY2VjMjNmMzUwMDkw
NzU5ZDExOTE2Li43YTk2MjE2Yzg1NGI1ZGFlZWZkMTgzZDdiZDJjOGY3ZDVkMWE1OGYyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZWaWRlb0Nh
cHR1cmVTb3VyY2UubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
bWFjL0FWVmlkZW9DYXB0dXJlU291cmNlLm1tCkBAIC0yOSwxMSArMjksMTEgQEAKICNpZiBFTkFC
TEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoQVZGT1VOREFUSU9OKQogCiAjaW1wb3J0ICJJbWFnZUJ1
ZmZlci5oIgorI2ltcG9ydCAiSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5oIgogI2ltcG9ydCAiSW50
UmVjdC5oIgogI2ltcG9ydCAiTG9nZ2luZy5oIgogI2ltcG9ydCAiTWVkaWFDb25zdHJhaW50cy5o
IgogI2ltcG9ydCAiTWVkaWFTYW1wbGVBVkZPYmpDLmgiCi0jaW1wb3J0ICJQaXhlbEJ1ZmZlclJl
c2l6ZXIuaCIKICNpbXBvcnQgIlBsYXRmb3JtTGF5ZXIuaCIKICNpbXBvcnQgIlJlYWx0aW1lTWVk
aWFTb3VyY2VDZW50ZXJNYWMuaCIKICNpbXBvcnQgIlJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5n
cy5oIgpAQCAtMjk5LDcgKzI5OSw3IEBAIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmls
aXRpZXMmIEFWVmlkZW9DYXB0dXJlU291cmNlOjpjYXBhYmlsaXRpZXMoKQogYm9vbCBBVlZpZGVv
Q2FwdHVyZVNvdXJjZTo6cHJlZmVyc1ByZXNldChWaWRlb1ByZXNldCYgcHJlc2V0KQogewogI2lm
IFBMQVRGT1JNKElPUykKLSAgICByZXR1cm4gIVtzdGF0aWNfY2FzdDxBVlZpZGVvUHJlc2V0Kj4o
JnByZXNldCktPmZvcm1hdC5nZXQoKSBpc1ZpZGVvQmlubmVkXTsKKyAgICByZXR1cm4gW3N0YXRp
Y19jYXN0PEFWVmlkZW9QcmVzZXQqPigmcHJlc2V0KS0+Zm9ybWF0LmdldCgpIGlzVmlkZW9CaW5u
ZWRdOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocHJlc2V0KTsKICNlbmRpZgpAQCAtNTE5LDI3
ICs1MTksMjMgQEAgdm9pZCBBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6Y29tcHV0ZVNhbXBsZVJvdGF0
aW9uKCkKICAgICB9CiB9CiAKLXZvaWQgQVZWaWRlb0NhcHR1cmVTb3VyY2U6OnByb2Nlc3NOZXdG
cmFtZShSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+IHNhbXBsZUJ1ZmZlciwgUmV0YWluUHRy
PEFWQ2FwdHVyZUNvbm5lY3Rpb25UeXBlPiBjb25uZWN0aW9uKQordm9pZCBBVlZpZGVvQ2FwdHVy
ZVNvdXJjZTo6cHJvY2Vzc05ld0ZyYW1lKFJlZlB0cjxNZWRpYVNhbXBsZT4gc2FtcGxlKQogewog
ICAgIGlmICghaXNQcm9kdWNpbmdEYXRhKCkgfHwgbXV0ZWQoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgQ01Gb3JtYXREZXNjcmlwdGlvblJlZiBmb3JtYXREZXNjcmlwdGlvbiA9IENNU2FtcGxl
QnVmZmVyR2V0Rm9ybWF0RGVzY3JpcHRpb24oc2FtcGxlQnVmZmVyLmdldCgpKTsKLSAgICBpZiAo
IWZvcm1hdERlc2NyaXB0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2J1ZmZlciA9IHNh
bXBsZUJ1ZmZlcjsKLSAgICBDTVZpZGVvRGltZW5zaW9ucyBkaW1lbnNpb25zID0gQ01WaWRlb0Zv
cm1hdERlc2NyaXB0aW9uR2V0RGltZW5zaW9ucyhmb3JtYXREZXNjcmlwdGlvbik7CisgICAgbV9i
dWZmZXIgPSBzYW1wbGU7CisgICAgYXV0byBkaW1lbnNpb25zID0gcm91bmRlZEludFNpemUoc2Ft
cGxlLT5wcmVzZW50YXRpb25TaXplKCkpOwogICAgIGlmIChtX3NhbXBsZVJvdGF0aW9uID09IE1l
ZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpMZWZ0IHx8IG1fc2FtcGxlUm90YXRpb24gPT0gTWVk
aWFTYW1wbGU6OlZpZGVvUm90YXRpb246OlJpZ2h0KQotICAgICAgICBzdGQ6OnN3YXAoZGltZW5z
aW9ucy53aWR0aCwgZGltZW5zaW9ucy5oZWlnaHQpOworICAgICAgICBkaW1lbnNpb25zID0geyBk
aW1lbnNpb25zLmhlaWdodCgpLCBkaW1lbnNpb25zLndpZHRoKCkgfTsKIAotICAgIGlmIChkaW1l
bnNpb25zLndpZHRoICE9IG1fd2lkdGggfHwgZGltZW5zaW9ucy5oZWlnaHQgIT0gbV9oZWlnaHQp
IHsKLSAgICAgICAgbV93aWR0aCA9IGRpbWVuc2lvbnMud2lkdGg7Ci0gICAgICAgIG1faGVpZ2h0
ID0gZGltZW5zaW9ucy5oZWlnaHQ7Ci0gICAgICAgIHNldFNpemUoeyBkaW1lbnNpb25zLndpZHRo
LCBkaW1lbnNpb25zLmhlaWdodCB9KTsKKyAgICBpZiAoZGltZW5zaW9ucy53aWR0aCgpICE9IG1f
d2lkdGggfHwgZGltZW5zaW9ucy5oZWlnaHQoKSAhPSBtX2hlaWdodCkgeworICAgICAgICBtX3dp
ZHRoID0gZGltZW5zaW9ucy53aWR0aCgpOworICAgICAgICBtX2hlaWdodCA9IGRpbWVuc2lvbnMu
aGVpZ2h0KCk7CisgICAgICAgIHNldFNpemUoZGltZW5zaW9ucyk7CiAgICAgfQogCi0gICAgdmlk
ZW9TYW1wbGVBdmFpbGFibGUoTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVhdGUobV9idWZmZXIuZ2V0
KCksIG1fc2FtcGxlUm90YXRpb24sIFtjb25uZWN0aW9uIGlzVmlkZW9NaXJyb3JlZF0pKTsKKyAg
ICBkaXNwYXRjaE1lZGlhU2FtcGxlVG9PYnNlcnZlcnMoKnNhbXBsZSk7CiB9CiAKIHZvaWQgQVZW
aWRlb0NhcHR1cmVTb3VyY2U6OmNhcHR1cmVPdXRwdXREaWRPdXRwdXRTYW1wbGVCdWZmZXJGcm9t
Q29ubmVjdGlvbihBVkNhcHR1cmVPdXRwdXRUeXBlKiwgQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxl
QnVmZmVyLCBBVkNhcHR1cmVDb25uZWN0aW9uVHlwZSogY2FwdHVyZUNvbm5lY3Rpb24pCkBAIC01
NDksMjQgKzU0NSwyNCBAQCB2b2lkIEFWVmlkZW9DYXB0dXJlU291cmNlOjpjYXB0dXJlT3V0cHV0
RGlkT3V0cHV0U2FtcGxlQnVmZmVyRnJvbUNvbm5lY3Rpb24oQVZDYQogICAgICAgICByZXR1cm47
CiAKICAgICBDTVZpZGVvRGltZW5zaW9ucyBkaW1lbnNpb25zID0gQ01WaWRlb0Zvcm1hdERlc2Ny
aXB0aW9uR2V0RGltZW5zaW9ucyhmb3JtYXREZXNjcmlwdGlvbik7CisgICAgUmVmUHRyPE1lZGlh
U2FtcGxlPiBzYW1wbGU7CiAgICAgaWYgKGRpbWVuc2lvbnMud2lkdGggIT0gbV9yZXF1ZXN0ZWRT
aXplLndpZHRoKCkgfHwgZGltZW5zaW9ucy5oZWlnaHQgIT0gbV9yZXF1ZXN0ZWRTaXplLmhlaWdo
dCgpKSB7Ci0gICAgICAgIGlmIChtX3BpeGVsQnVmZmVyUmVzaXplciAmJiAhbV9waXhlbEJ1ZmZl
clJlc2l6ZXItPmNhblJlc2l6ZVRvKG1fcmVxdWVzdGVkU2l6ZSkpCi0gICAgICAgICAgICBtX3Bp
eGVsQnVmZmVyUmVzaXplciA9IG51bGxwdHI7CiAKLSAgICAgICAgaWYgKCFtX3BpeGVsQnVmZmVy
UmVzaXplcikKLSAgICAgICAgICAgIG1fcGl4ZWxCdWZmZXJSZXNpemVyID0gc3RkOjptYWtlX3Vu
aXF1ZTxQaXhlbEJ1ZmZlclJlc2l6ZXI+KG1fcmVxdWVzdGVkU2l6ZSwgYXZWaWRlb0NhcHR1cmVQ
aXhlbEJ1ZmZlckZvcm1hdCgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbV9waXhlbEJ1ZmZlclJl
c2l6ZXIgPSBudWxscHRyOworICAgICAgICBpZiAoIW1faW1hZ2VUcmFuc2ZlclNlc3Npb24pCisg
ICAgICAgICAgICBtX2ltYWdlVHJhbnNmZXJTZXNzaW9uID0gSW1hZ2VUcmFuc2ZlclNlc3Npb25W
VDo6Y3JlYXRlKGF2VmlkZW9DYXB0dXJlUGl4ZWxCdWZmZXJGb3JtYXQoKSk7CiAKLSAgICBhdXRv
IGJ1ZmZlciA9IHJldGFpblB0cihzYW1wbGVCdWZmZXIpOwotICAgIGlmIChtX3BpeGVsQnVmZmVy
UmVzaXplcikgewotICAgICAgICBidWZmZXIgPSBtX3BpeGVsQnVmZmVyUmVzaXplci0+cmVzaXpl
KHNhbXBsZUJ1ZmZlcik7Ci0gICAgICAgIGlmICghYnVmZmVyKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgIH0KKyAgICAgICAgaWYgKG1faW1hZ2VUcmFuc2ZlclNlc3Npb24pIHsKKyAgICAgICAg
ICAgIHNhbXBsZSA9IG1faW1hZ2VUcmFuc2ZlclNlc3Npb24tPmNyZWF0ZU1lZGlhU2FtcGxlKHNh
bXBsZUJ1ZmZlciwgbV9yZXF1ZXN0ZWRTaXplLCBtX3NhbXBsZVJvdGF0aW9uLCBbY2FwdHVyZUNv
bm5lY3Rpb24gaXNWaWRlb01pcnJvcmVkXSk7CisgICAgICAgICAgICBpZiAoIXNhbXBsZSkgewor
ICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBzYW1w
bGUgPSBNZWRpYVNhbXBsZUFWRk9iakM6OmNyZWF0ZShzYW1wbGVCdWZmZXIsIG1fc2FtcGxlUm90
YXRpb24sIFtjYXB0dXJlQ29ubmVjdGlvbiBpc1ZpZGVvTWlycm9yZWRdKTsKIAotICAgIHNjaGVk
dWxlRGVmZXJyZWRUYXNrKFt0aGlzLCBidWZmZXIsIGNvbm5lY3Rpb24gPSByZXRhaW5QdHIoY2Fw
dHVyZUNvbm5lY3Rpb24pXSB7Ci0gICAgICAgIHRoaXMtPnByb2Nlc3NOZXdGcmFtZShidWZmZXIs
IGNvbm5lY3Rpb24pOworICAgIHNjaGVkdWxlRGVmZXJyZWRUYXNrKFt0aGlzLCBzYW1wbGUgPSBX
VEZNb3ZlKHNhbXBsZSldIHsKKyAgICAgICAgcHJvY2Vzc05ld0ZyYW1lKHNhbXBsZSk7CiAgICAg
fSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9EaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9EaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hLmNwcAppbmRleCAz
NzNkMGY4YTUzYTVlNmE2ZWE0YzdlNGJkZjk3NmQ4ZWRkOTU0NDFlLi4yZWJmNjUwNDg5NzhmNzYw
ZWU1YzRhNjY1MWUyY2Q1MWJiZTQ0NjFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0Rpc3BsYXlDYXB0dXJlU291
cmNlQ29jb2EuY3BwCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2lu
Y2x1ZGUgIk1lZGlhU2FtcGxlQVZGT2JqQy5oIgogI2luY2x1ZGUgIlBpeGVsQnVmZmVyQ29uZm9y
bWVyQ1YuaCIKLSNpbmNsdWRlICJQaXhlbEJ1ZmZlclJlc2l6ZXIuaCIKICNpbmNsdWRlICJSZWFs
dGltZU1lZGlhU291cmNlLmgiCiAjaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5o
IgogI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncy5oIgpAQCAtNDIsNiArNDEs
OCBAQAogI2luY2x1ZGUgPHBhbC9hdmZvdW5kYXRpb24vTWVkaWFUaW1lQVZGb3VuZGF0aW9uLmg+
CiAjaW5jbHVkZSA8cGFsL2NmL0NvcmVNZWRpYVNvZnRMaW5rLmg+CiAjaW5jbHVkZSA8cGFsL3Nw
aS9jZi9Db3JlQXVkaW9TUEkuaD4KKyNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQ
SS5oPgorI2luY2x1ZGUgPHBhbC9zcGkvY29jb2EvSU9TdXJmYWNlU1BJLmg+CiAjaW5jbHVkZSA8
c3lzL3RpbWUuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgpAQCAtNzIsNyArNzMsNyBAQCBjb25zdCBSZWFsdGltZU1lZGlhU291
cmNlQ2FwYWJpbGl0aWVzJiBEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpjYXBhYmlsaXRpZXMo
KQogICAgICAgICAvLyBGSVhNRTogd2hhdCBzaG91bGQgdGhlc2UgYmU/CiAgICAgICAgIGNhcGFi
aWxpdGllcy5zZXRXaWR0aChDYXBhYmlsaXR5VmFsdWVPclJhbmdlKDcyLCAyODgwKSk7CiAgICAg
ICAgIGNhcGFiaWxpdGllcy5zZXRIZWlnaHQoQ2FwYWJpbGl0eVZhbHVlT3JSYW5nZSg0NSwgMTgw
MCkpOwotICAgICAgICBjYXBhYmlsaXRpZXMuc2V0RnJhbWVSYXRlKENhcGFiaWxpdHlWYWx1ZU9y
UmFuZ2UoLjAxLCA2MC4wKSk7CisgICAgICAgIGNhcGFiaWxpdGllcy5zZXRGcmFtZVJhdGUoQ2Fw
YWJpbGl0eVZhbHVlT3JSYW5nZSguMDEsIDMwLjApKTsKIAogICAgICAgICBtX2NhcGFiaWxpdGll
cyA9IFdURk1vdmUoY2FwYWJpbGl0aWVzKTsKICAgICB9CkBAIC0xMTEsMTAgKzExMiw4IEBAIHZv
aWQgRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6c2V0dGluZ3NEaWRDaGFuZ2UoT3B0aW9uU2V0
PFJlYWx0aW1lTWVkaWFTb3VyY2VTCiAgICAgaWYgKHNldHRpbmdzLmNvbnRhaW5zKFJlYWx0aW1l
TWVkaWFTb3VyY2VTZXR0aW5nczo6RmxhZzo6RnJhbWVSYXRlKSAmJiBtX3RpbWVyLmlzQWN0aXZl
KCkpCiAgICAgICAgIG1fdGltZXIuc3RhcnRSZXBlYXRpbmcoMV9zIC8gZnJhbWVSYXRlKCkpOwog
Ci0gICAgaWYgKHNldHRpbmdzLmNvbnRhaW5zQW55KHsgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRp
bmdzOjpGbGFnOjpXaWR0aCwgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpGbGFnOjpIZWln
aHQgfSkpIHsKKyAgICBpZiAoc2V0dGluZ3MuY29udGFpbnNBbnkoeyBSZWFsdGltZU1lZGlhU291
cmNlU2V0dGluZ3M6OkZsYWc6OldpZHRoLCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M6OkZs
YWc6OkhlaWdodCB9KSkKICAgICAgICAgbV9idWZmZXJBdHRyaWJ1dGVzID0gbnVsbHB0cjsKLSAg
ICAgICAgbV9sYXN0U2FtcGxlQnVmZmVyID0gbnVsbHB0cjsKLSAgICB9CiAKICAgICBtX2N1cnJl
bnRTZXR0aW5ncyA9IHsgfTsKIH0KQEAgLTE1OSwxMzIgKzE1OCw1MCBAQCB2b2lkIERpc3BsYXlD
YXB0dXJlU291cmNlQ29jb2E6OnNldEludHJpbnNpY1NpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9pbnRyaW5zaWNTaXplID0gc2l6ZTsKLSAgICBtX2xh
c3RTYW1wbGVCdWZmZXIgPSBudWxscHRyOworICAgIG5vdGlmeVNldHRpbmdzRGlkQ2hhbmdlT2Jz
ZXJ2ZXJzKHsgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpGbGFnOjpXaWR0aCwgUmVhbHRp
bWVNZWRpYVNvdXJjZVNldHRpbmdzOjpGbGFnOjpIZWlnaHQgfSk7CisKIH0KIAogdm9pZCBEaXNw
bGF5Q2FwdHVyZVNvdXJjZUNvY29hOjplbWl0RnJhbWUoKQogeworI2lmIFBMQVRGT1JNKENPQ09B
KSAmJiAhUExBVEZPUk0oSU9TX0ZBTUlMWV9TSU1VTEFUT1IpCiAgICAgaWYgKG11dGVkKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBnZW5lcmF0ZUZyYW1lKCk7
Ci0gICAgaWYgKCFwaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fbGFz
dFNhbXBsZUJ1ZmZlciAmJiBtX2xhc3RGdWxsU2l6ZWRQaXhlbEJ1ZmZlciAmJiBDRkVxdWFsKG1f
bGFzdEZ1bGxTaXplZFBpeGVsQnVmZmVyLmdldCgpLCBwaXhlbEJ1ZmZlci5nZXQoKSkpIHsKLSAg
ICAgICAgdmlkZW9TYW1wbGVBdmFpbGFibGUoTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVhdGUobV9s
YXN0U2FtcGxlQnVmZmVyLmdldCgpKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBt
X2xhc3RGdWxsU2l6ZWRQaXhlbEJ1ZmZlciA9IHBpeGVsQnVmZmVyOwotCi0gICAgaW50IHdpZHRo
ID0gV1RGOjpzYWZlQ2FzdDxpbnQ+KENWUGl4ZWxCdWZmZXJHZXRXaWR0aChwaXhlbEJ1ZmZlci5n
ZXQoKSkpOwotICAgIGludCBoZWlnaHQgPSBXVEY6OnNhZmVDYXN0PGludD4oQ1ZQaXhlbEJ1ZmZl
ckdldEhlaWdodChwaXhlbEJ1ZmZlci5nZXQoKSkpOwotICAgIGF1dG8gcmVxdWVzdGVkU2l6ZSA9
IGZyYW1lU2l6ZSgpOwotICAgIGlmICh3aWR0aCAhPSByZXF1ZXN0ZWRTaXplLndpZHRoKCkgfHwg
aGVpZ2h0ICE9IHJlcXVlc3RlZFNpemUuaGVpZ2h0KCkpIHsKLSAgICAgICAgaWYgKG1fcGl4ZWxC
dWZmZXJSZXNpemVyICYmICFtX3BpeGVsQnVmZmVyUmVzaXplci0+Y2FuUmVzaXplVG8ocmVxdWVz
dGVkU2l6ZSkpCi0gICAgICAgICAgICBtX3BpeGVsQnVmZmVyUmVzaXplciA9IG51bGxwdHI7Ci0K
LSAgICAgICAgaWYgKCFtX3BpeGVsQnVmZmVyUmVzaXplcikKLSAgICAgICAgICAgIG1fcGl4ZWxC
dWZmZXJSZXNpemVyID0gc3RkOjptYWtlX3VuaXF1ZTxQaXhlbEJ1ZmZlclJlc2l6ZXI+KHJlcXVl
c3RlZFNpemUsIHByZWZlcmVkUGl4ZWxCdWZmZXJGb3JtYXQoKSk7Ci0KLSAgICAgICAgcGl4ZWxC
dWZmZXIgPSBtX3BpeGVsQnVmZmVyUmVzaXplci0+cmVzaXplKHBpeGVsQnVmZmVyLmdldCgpKTsK
LSAgICB9IGVsc2UgewotICAgICAgICBtX3BpeGVsQnVmZmVyUmVzaXplciA9IG51bGxwdHI7Ci0K
LSAgICAgICAgYXV0byBwaXhlbEZvcm1hdFR5cGUgPSBDVlBpeGVsQnVmZmVyR2V0UGl4ZWxGb3Jt
YXRUeXBlKHBpeGVsQnVmZmVyLmdldCgpKTsKLSAgICAgICAgaWYgKHBpeGVsRm9ybWF0VHlwZSAh
PSBwcmVmZXJlZFBpeGVsQnVmZmVyRm9ybWF0KCkpIHsKLSAgICAgICAgICAgIGlmICghbV9waXhl
bEJ1ZmZlckNvbmZvcm1lcikgewotICAgICAgICAgICAgICAgIGF1dG8gcHJlZmVycmVkRnJvbWF0
ID0gcHJlZmVyZWRQaXhlbEJ1ZmZlckZvcm1hdCgpOwotICAgICAgICAgICAgICAgIGF1dG8gY29u
Zm9ybWVyQXR0cmlidXRlcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZShudWxs
cHRyLCAwLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFy
eVZhbHVlQ2FsbEJhY2tzKSk7Ci0gICAgICAgICAgICAgICAgYXV0byB2aWRlb1R5cGUgPSBhZG9w
dENGKENGTnVtYmVyQ3JlYXRlKG51bGxwdHIsICBrQ0ZOdW1iZXJTSW50MzJUeXBlLCAgJnByZWZl
cnJlZEZyb21hdCkpOwotICAgICAgICAgICAgICAgIENGRGljdGlvbmFyeVNldFZhbHVlKGNvbmZv
cm1lckF0dHJpYnV0ZXMuZ2V0KCksIGtDVlBpeGVsQnVmZmVyUGl4ZWxGb3JtYXRUeXBlS2V5LCB2
aWRlb1R5cGUuZ2V0KCkpOwotCi0gICAgICAgICAgICAgICAgbV9waXhlbEJ1ZmZlckNvbmZvcm1l
ciA9IHN0ZDo6bWFrZV91bmlxdWU8UGl4ZWxCdWZmZXJDb25mb3JtZXJDVj4oY29uZm9ybWVyQXR0
cmlidXRlcy5nZXQoKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHBpeGVsQnVmZmVy
ID0gbV9waXhlbEJ1ZmZlckNvbmZvcm1lci0+Y29udmVydChwaXhlbEJ1ZmZlci5nZXQoKSk7Cisg
ICAgaWYgKCFtX2ltYWdlVHJhbnNmZXJTZXNzaW9uKQorICAgICAgICBtX2ltYWdlVHJhbnNmZXJT
ZXNzaW9uID0gSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlKHByZWZlcmVkUGl4ZWxCdWZm
ZXJGb3JtYXQoKSk7CisKKyAgICBhdXRvIHNhbXBsZVRpbWUgPSBNZWRpYVRpbWU6OmNyZWF0ZVdp
dGhEb3VibGUoKGVsYXBzZWRUaW1lKCkgKyAxMDBfbXMpLnNlY29uZHMoKSk7CisgICAgYXV0byBm
cmFtZSA9IGdlbmVyYXRlRnJhbWUoKTsKKyAgICBJbnRTaXplIGltYWdlU2l6ZTsKKyAgICBSZWZQ
dHI8TWVkaWFTYW1wbGU+IHNhbXBsZSA9IFdURjo6c3dpdGNoT24oZnJhbWUsCisgICAgICAgIFt0
aGlzLCBzYW1wbGVUaW1lLCAmaW1hZ2VTaXplXShSZXRhaW5QdHI8SU9TdXJmYWNlUmVmPiBzdXJm
YWNlKSAtPiBSZWZQdHI8TWVkaWFTYW1wbGU+IHsKKyAgICAgICAgICAgIGlmICghc3VyZmFjZSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICAgICAgaW1hZ2VTaXpl
ID0gSW50U2l6ZShJT1N1cmZhY2VHZXRXaWR0aChzdXJmYWNlLmdldCgpKSwgSU9TdXJmYWNlR2V0
SGVpZ2h0KHN1cmZhY2UuZ2V0KCkpKTsKKyAgICAgICAgICAgIHJldHVybiBtX2ltYWdlVHJhbnNm
ZXJTZXNzaW9uLT5jcmVhdGVNZWRpYVNhbXBsZShzdXJmYWNlLmdldCgpLCBzYW1wbGVUaW1lLCBp
bWFnZVNpemUpOworICAgICAgICB9LAorICAgICAgICBbdGhpcywgc2FtcGxlVGltZSwgJmltYWdl
U2l6ZV0oUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlKSAtPiBSZWZQdHI8TWVkaWFTYW1wbGU+
IHsKKyAgICAgICAgICAgIGlmICghaW1hZ2UpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICAgICAgICAgIGltYWdlU2l6ZSA9IEludFNpemUoQ0dJbWFnZUdldFdpZHRoKGlt
YWdlLmdldCgpKSwgQ0dJbWFnZUdldEhlaWdodChpbWFnZS5nZXQoKSkpOworICAgICAgICAgICAg
cmV0dXJuIG1faW1hZ2VUcmFuc2ZlclNlc3Npb24tPmNyZWF0ZU1lZGlhU2FtcGxlKGltYWdlLmdl
dCgpLCBzYW1wbGVUaW1lLCBpbWFnZVNpemUpOwogICAgICAgICB9Ci0gICAgfQotICAgIGlmICgh
cGl4ZWxCdWZmZXIpCi0gICAgICAgIHJldHVybjsKKyAgICApOwogCi0gICAgbV9sYXN0U2FtcGxl
QnVmZmVyID0gc2FtcGxlQnVmZmVyRnJvbVBpeGVsQnVmZmVyKHBpeGVsQnVmZmVyLmdldCgpKTsK
LSAgICBpZiAoIW1fbGFzdFNhbXBsZUJ1ZmZlcikKKyAgICBpZiAoIXNhbXBsZSkgeworICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuOwotCi0gICAgdmlkZW9TYW1w
bGVBdmFpbGFibGUoTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVhdGUobV9sYXN0U2FtcGxlQnVmZmVy
LmdldCgpKSk7Ci19Ci0KLVJldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4gRGlzcGxheUNhcHR1
cmVTb3VyY2VDb2NvYTo6c2FtcGxlQnVmZmVyRnJvbVBpeGVsQnVmZmVyKENWUGl4ZWxCdWZmZXJS
ZWYgcGl4ZWxCdWZmZXIpCi17Ci0gICAgaWYgKCFwaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBDTVRpbWUgc2FtcGxlVGltZSA9IENNVGltZU1ha2UoKChlbGFwc2Vk
VGltZSgpICsgMTAwX21zKSAqIDEwMCkuc2Vjb25kcygpLCAxMDApOwotICAgIENNU2FtcGxlVGlt
aW5nSW5mbyB0aW1pbmdJbmZvID0geyBrQ01UaW1lSW52YWxpZCwgc2FtcGxlVGltZSwgc2FtcGxl
VGltZSB9OwotCi0gICAgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uUmVmIGZvcm1hdERlc2NyaXB0
aW9uID0gbnVsbHB0cjsKLSAgICBhdXRvIHN0YXR1cyA9IENNVmlkZW9Gb3JtYXREZXNjcmlwdGlv
bkNyZWF0ZUZvckltYWdlQnVmZmVyKGtDRkFsbG9jYXRvckRlZmF1bHQsIChDVkltYWdlQnVmZmVy
UmVmKXBpeGVsQnVmZmVyLCAmZm9ybWF0RGVzY3JpcHRpb24pOwotICAgIGlmIChzdGF0dXMpIHsK
LSAgICAgICAgUkVMRUFTRV9MT0coTWVkaWEsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBDTVZpZGVv
Rm9ybWF0RGVzY3JpcHRpb24gd2l0aCBlcnJvciBjb2RlOiAlZCIsIHN0YXRpY19jYXN0PGludD4o
c3RhdHVzKSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIENNU2FtcGxl
QnVmZmVyUmVmIHNhbXBsZUJ1ZmZlcjsKLSAgICBzdGF0dXMgPSBDTVNhbXBsZUJ1ZmZlckNyZWF0
ZVJlYWR5V2l0aEltYWdlQnVmZmVyKGtDRkFsbG9jYXRvckRlZmF1bHQsIChDVkltYWdlQnVmZmVy
UmVmKXBpeGVsQnVmZmVyLCBmb3JtYXREZXNjcmlwdGlvbiwgJnRpbWluZ0luZm8sICZzYW1wbGVC
dWZmZXIpOwotICAgIENGUmVsZWFzZShmb3JtYXREZXNjcmlwdGlvbik7Ci0gICAgaWYgKHN0YXR1
cykgewotICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIkZhaWxlZCB0byBpbml0aWFsaXplIENN
U2FtcGxlQnVmZmVyIHdpdGggZXJyb3IgY29kZTogJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1
cykpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICByZXR1cm4gYWRvcHRD
RihzYW1wbGVCdWZmZXIpOwotfQotCi0jaWYgSEFWRShJT1NVUkZBQ0UpICYmIFBMQVRGT1JNKE1B
QykKLXN0YXRpYyBpbnQzMl90IHJvdW5kVXBUb01hY3JvYmxvY2tNdWx0aXBsZShpbnQzMl90IHNp
emUpCi17Ci0gICAgcmV0dXJuIChzaXplICsgMTUpICYgfjE1OwotfQotCi1SZXRhaW5QdHI8Q1ZQ
aXhlbEJ1ZmZlclJlZj4gRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6cGl4ZWxCdWZmZXJGcm9t
SU9TdXJmYWNlKElPU3VyZmFjZVJlZiBzdXJmYWNlKQotewotICAgIGlmICghbV9idWZmZXJBdHRy
aWJ1dGVzKSB7Ci0gICAgICAgIG1fYnVmZmVyQXR0cmlidXRlcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9u
YXJ5Q3JlYXRlTXV0YWJsZShudWxscHRyLCAwLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFj
a3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0KLSAgICAgICAgYXV0byBm
b3JtYXQgPSBJT1N1cmZhY2VHZXRQaXhlbEZvcm1hdChzdXJmYWNlKTsKLSAgICAgICAgaWYgKGZv
cm1hdCA9PSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNyOEJpUGxhbmFyVmlkZW9SYW5nZSB8
fCBmb3JtYXQgPT0ga0NWUGl4ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhCaVBsYW5hckZ1bGxSYW5n
ZSkgewotCi0gICAgICAgICAgICAvLyBJZiB0aGUgd2lkdGggeCBoZWlnaHQgaXNuJ3QgYSBtdWx0
aXBsZSBvZiAxNiB4IDE2IGFuZCB0aGUgc3VyZmFjZSBoYXMgZXh0cmEgbWVtb3J5IGluIHRoZSBw
bGFuZXMsIHNldCBwaXhlbCBidWZmZXIgYXR0cmlidXRlcyB0byByZWZsZWN0IGl0LgotICAgICAg
ICAgICAgYXV0byB3aWR0aCA9IElPU3VyZmFjZUdldFdpZHRoKHN1cmZhY2UpOwotICAgICAgICAg
ICAgYXV0byBoZWlnaHQgPSBJT1N1cmZhY2VHZXRIZWlnaHQoc3VyZmFjZSk7Ci0gICAgICAgICAg
ICBpbnQzMl90IGV4dGVuZGVkUmlnaHQgPSByb3VuZFVwVG9NYWNyb2Jsb2NrTXVsdGlwbGUod2lk
dGgpIC0gd2lkdGg7Ci0gICAgICAgICAgICBpbnQzMl90IGV4dGVuZGVkQm90dG9tID0gcm91bmRV
cFRvTWFjcm9ibG9ja011bHRpcGxlKGhlaWdodCkgLSBoZWlnaHQ7Ci0KLSAgICAgICAgICAgIGlm
ICgoSU9TdXJmYWNlR2V0Qnl0ZXNQZXJSb3dPZlBsYW5lKHN1cmZhY2UsIDApID49IHdpZHRoICsg
ZXh0ZW5kZWRSaWdodCkKLSAgICAgICAgICAgICAgICAmJiAoSU9TdXJmYWNlR2V0Qnl0ZXNQZXJS
b3dPZlBsYW5lKHN1cmZhY2UsIDEpID49IHdpZHRoICsgZXh0ZW5kZWRSaWdodCkKLSAgICAgICAg
ICAgICAgICAmJiAoSU9TdXJmYWNlR2V0QWxsb2NTaXplKHN1cmZhY2UpID49IChoZWlnaHQgKyBl
eHRlbmRlZEJvdHRvbSkgKiBJT1N1cmZhY2VHZXRCeXRlc1BlclJvd09mUGxhbmUoc3VyZmFjZSwg
MCkgKiAzIC8gMikpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGNmSW50ID0gYWRvcHRDRihDRk51
bWJlckNyZWF0ZShudWxscHRyLCAga0NGTnVtYmVySW50VHlwZSwgICZleHRlbmRlZFJpZ2h0KSk7
Ci0gICAgICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUobV9idWZmZXJBdHRyaWJ1dGVz
LmdldCgpLCBrQ1ZQaXhlbEJ1ZmZlckV4dGVuZGVkUGl4ZWxzUmlnaHRLZXksIGNmSW50LmdldCgp
KTsKLSAgICAgICAgICAgICAgICBjZkludCA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUobnVsbHB0
ciwgIGtDRk51bWJlckludFR5cGUsICAmZXh0ZW5kZWRCb3R0b20pKTsKLSAgICAgICAgICAgICAg
ICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShtX2J1ZmZlckF0dHJpYnV0ZXMuZ2V0KCksIGtDVlBpeGVs
QnVmZmVyRXh0ZW5kZWRQaXhlbHNCb3R0b21LZXksIGNmSW50LmdldCgpKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIENGRGljdGlvbmFyeVNldFZhbHVlKG1fYnVmZmVyQXR0
cmlidXRlcy5nZXQoKSwga0NWUGl4ZWxCdWZmZXJPcGVuR0xDb21wYXRpYmlsaXR5S2V5LCBrQ0ZC
b29sZWFuVHJ1ZSk7CiAgICAgfQogCi0gICAgQ1ZQaXhlbEJ1ZmZlclJlZiBwaXhlbEJ1ZmZlcjsK
LSAgICBhdXRvIHN0YXR1cyA9IENWUGl4ZWxCdWZmZXJDcmVhdGVXaXRoSU9TdXJmYWNlKGtDRkFs
bG9jYXRvckRlZmF1bHQsIHN1cmZhY2UsIG1fYnVmZmVyQXR0cmlidXRlcy5nZXQoKSwgJnBpeGVs
QnVmZmVyKTsKLSAgICBpZiAoc3RhdHVzKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhLCAi
Q1ZQaXhlbEJ1ZmZlckNyZWF0ZVdpdGhJT1N1cmZhY2UgZmFpbGVkIHdpdGggZXJyb3IgY29kZTog
JWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICB9CisgICAgaWYgKG1faW50cmluc2ljU2l6ZSAhPSBpbWFnZVNpemUpCisgICAgICAgIHNl
dEludHJpbnNpY1NpemUoaW1hZ2VTaXplKTsKIAotICAgIHJldHVybiBhZG9wdENGKHBpeGVsQnVm
ZmVyKTsKLX0KKyAgICB2aWRlb1NhbXBsZUF2YWlsYWJsZSgqc2FtcGxlLmdldCgpKTsKICNlbmRp
ZgorfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9EaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVT
b3VyY2VDb2NvYS5oCmluZGV4IGJmZTQwYjg2MDU4MWYxY2RiOTMxYjM1Y2JmNDdmZjA3MmMzYmFh
YTUuLjljMDllYzhkMzIxNDAyNGQ0ZTZiNjdkMmJmMDIyZmRkMDM0ZjM1YTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9EaXNwbGF5Q2FwdHVyZVNv
dXJjZUNvY29hLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L0Rpc3BsYXlDYXB0dXJlU291cmNlQ29jb2EuaApAQCAtMjgsMTIgKzI4LDE0IEBACiAjaWYgRU5B
QkxFKE1FRElBX1NUUkVBTSkKIAogI2luY2x1ZGUgIkNhcHR1cmVEZXZpY2UuaCIKKyNpbmNsdWRl
ICJJbWFnZVRyYW5zZmVyU2Vzc2lvblZULmgiCiAjaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJj
ZS5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgogI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAKK3R5cGVkZWYgc3RydWN0IENHSW1hZ2UgKkNHSW1hZ2VSZWY7CiB0eXBlZGVmIHN0cnVj
dCBfX0NWQnVmZmVyICpDVlBpeGVsQnVmZmVyUmVmOwogdHlwZWRlZiBzdHJ1Y3QgX19JT1N1cmZh
Y2UgKklPU3VyZmFjZVJlZjsKIApAQCAtNDQsOCArNDYsOCBAQCBjbGFzcyBNZWRpYVRpbWU7CiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENhcHR1cmVEZXZpY2VJbmZvOworY2xhc3MgSW1h
Z2VUcmFuc2ZlclNlc3Npb25WVDsKIGNsYXNzIFBpeGVsQnVmZmVyQ29uZm9ybWVyQ1Y7Ci1jbGFz
cyBQaXhlbEJ1ZmZlclJlc2l6ZXI7CiAKIGNsYXNzIERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2Eg
OiBwdWJsaWMgUmVhbHRpbWVNZWRpYVNvdXJjZSB7CiBwdWJsaWM6CkBAIC01NCw3ICs1Niw5IEBA
IHByb3RlY3RlZDoKICAgICBEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hKFN0cmluZyYmIG5hbWUp
OwogICAgIHZpcnR1YWwgfkRpc3BsYXlDYXB0dXJlU291cmNlQ29jb2EoKTsKIAotICAgIHZpcnR1
YWwgUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJSZWY+IGdlbmVyYXRlRnJhbWUoKSA9IDA7CisgICAg
dXNpbmcgRGlzcGxheUZyYW1lVHlwZSA9IFdURjo6VmFyaWFudDxSZXRhaW5QdHI8Q0dJbWFnZVJl
Zj4sIFJldGFpblB0cjxJT1N1cmZhY2VSZWY+PjsKKyAgICB2aXJ0dWFsIERpc3BsYXlGcmFtZVR5
cGUgZ2VuZXJhdGVGcmFtZSgpID0gMDsKKwogICAgIHZpcnR1YWwgUmVhbHRpbWVNZWRpYVNvdXJj
ZVNldHRpbmdzOjpEaXNwbGF5U3VyZmFjZVR5cGUgc3VyZmFjZVR5cGUoKSBjb25zdCA9IDA7CiAK
ICAgICB2b2lkIHN0YXJ0UHJvZHVjaW5nRGF0YSgpIG92ZXJyaWRlOwpAQCAtNjIsMTEgKzY2LDYg
QEAgcHJvdGVjdGVkOgogCiAgICAgU2Vjb25kcyBlbGFwc2VkVGltZSgpOwogCi0gICAgUmV0YWlu
UHRyPENNU2FtcGxlQnVmZmVyUmVmPiBzYW1wbGVCdWZmZXJGcm9tUGl4ZWxCdWZmZXIoQ1ZQaXhl
bEJ1ZmZlclJlZik7Ci0jaWYgSEFWRShJT1NVUkZBQ0UpCi0gICAgUmV0YWluUHRyPENWUGl4ZWxC
dWZmZXJSZWY+IHBpeGVsQnVmZmVyRnJvbUlPU3VyZmFjZShJT1N1cmZhY2VSZWYpOwotI2VuZGlm
Ci0KICAgICB2b2lkIHNldHRpbmdzRGlkQ2hhbmdlKE9wdGlvblNldDxSZWFsdGltZU1lZGlhU291
cmNlU2V0dGluZ3M6OkZsYWc+KSBvdmVycmlkZTsKIAogICAgIGNvbnN0IEludFNpemUmIGludHJp
bnNpY1NpemUoKSBjb25zdCB7IHJldHVybiBtX2ludHJpbnNpY1NpemU7IH0KQEAgLTkzLDEwICs5
Miw3IEBAIHByaXZhdGU6CiAgICAgUmV0YWluUHRyPENGTXV0YWJsZURpY3Rpb25hcnlSZWY+IG1f
YnVmZmVyQXR0cmlidXRlczsKICAgICBSdW5Mb29wOjpUaW1lcjxEaXNwbGF5Q2FwdHVyZVNvdXJj
ZUNvY29hPiBtX3RpbWVyOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPFBpeGVsQnVmZmVyUmVzaXpl
cj4gbV9waXhlbEJ1ZmZlclJlc2l6ZXI7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFBpeGVsQnVmZmVy
Q29uZm9ybWVyQ1Y+IG1fcGl4ZWxCdWZmZXJDb25mb3JtZXI7Ci0gICAgUmV0YWluUHRyPENWUGl4
ZWxCdWZmZXJSZWY+IG1fbGFzdEZ1bGxTaXplZFBpeGVsQnVmZmVyOwotICAgIFJldGFpblB0cjxD
TVNhbXBsZUJ1ZmZlclJlZj4gbV9sYXN0U2FtcGxlQnVmZmVyOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZVRyYW5zZmVyU2Vzc2lvblZUPiBtX2ltYWdlVHJhbnNmZXJTZXNzaW9uOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL01vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VN
YWMuaAppbmRleCA5Yzc0ZGRlMTgzMWU0NzFhMTA3NjAxYjAzZTY2NTQ3Yzc2OWEwOGVhLi5lOGJl
ODJmNjhmN2M2OTExNTIxODg5MWNkNDQ2OTgzZGY2OTYyNmI0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VN
YWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1Jl
YWx0aW1lVmlkZW9Tb3VyY2VNYWMuaApAQCAtNDMsNyArNDMsNyBAQCB0eXBlZGVmIHN0cnVjdCBf
X0NWUGl4ZWxCdWZmZXJQb29sICpDVlBpeGVsQnVmZmVyUG9vbFJlZjsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBQaXhlbEJ1ZmZlclJlc2l6ZXI7CitjbGFzcyBJbWFnZVRyYW5zZmVy
U2Vzc2lvblZUOwogCiBjbGFzcyBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYyBmaW5hbCA6IHB1
YmxpYyBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZSwgcHJpdmF0ZSBPcmllbnRhdGlvbk5vdGlmaWVy
OjpPYnNlcnZlciB7CiBwdWJsaWM6CkBAIC01MywxNCArNTMsMTAgQEAgcHJpdmF0ZToKICAgICBm
cmllbmQgY2xhc3MgTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2U7CiAgICAgTW9ja1JlYWx0aW1lVmlk
ZW9Tb3VyY2VNYWMoU3RyaW5nJiYgZGV2aWNlSUQsIFN0cmluZyYmIG5hbWUsIFN0cmluZyYmIGhh
c2hTYWx0KTsKIAotICAgIFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4gQ01TYW1wbGVCdWZm
ZXJGcm9tUGl4ZWxCdWZmZXIoQ1ZQaXhlbEJ1ZmZlclJlZik7Ci0gICAgUmV0YWluUHRyPENWUGl4
ZWxCdWZmZXJSZWY+IHBpeGVsQnVmZmVyRnJvbUNHSW1hZ2UoQ0dJbWFnZVJlZikgY29uc3Q7Ci0K
ICAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CiAgICAgdm9pZCB1cGRh
dGVTYW1wbGVCdWZmZXIoKSBmaW5hbDsKICAgICB2b2lkIHNldHRpbmdzRGlkQ2hhbmdlKE9wdGlv
blNldDxSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M6OkZsYWc+KSBmaW5hbDsKICAgICBib29s
IGNhblJlc2l6ZVZpZGVvRnJhbWVzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQotICAg
IHZvaWQgc2V0U2l6ZUFuZEZyYW1lUmF0ZVdpdGhQcmVzZXQoSW50U2l6ZSwgZG91YmxlLCBSZWZQ
dHI8VmlkZW9QcmVzZXQ+KSBmaW5hbDsKIAogICAgIHZvaWQgb3JpZW50YXRpb25DaGFuZ2VkKGlu
dCBvcmllbnRhdGlvbikgZmluYWw7CiAgICAgdm9pZCBtb25pdG9yT3JpZW50YXRpb24oT3JpZW50
YXRpb25Ob3RpZmllciYpIGZpbmFsOwpAQCAtNjgsNyArNjQsNyBAQCBwcml2YXRlOgogICAgIG11
dGFibGUgUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJQb29sUmVmPiBtX2J1ZmZlclBvb2w7CiAgICAg
TWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb24gbV9kZXZpY2VPcmllbnRhdGlvbiB7IE1lZGlhU2Ft
cGxlOjpWaWRlb1JvdGF0aW9uOjpOb25lIH07CiAgICAgc3RkOjp1bmlxdWVfcHRyPFBpeGVsQnVm
ZmVyQ29uZm9ybWVyQ1Y+IG1fcGl4ZWxCdWZmZXJDb25mb3JtZXI7Ci0gICAgc3RkOjp1bmlxdWVf
cHRyPFBpeGVsQnVmZmVyUmVzaXplcj4gbV9waXhlbEJ1ZmZlclJlc2l6ZXI7CisgICAgc3RkOjp1
bmlxdWVfcHRyPEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ+IG1faW1hZ2VUcmFuc2ZlclNlc3Npb247
CiAgICAgSW50U2l6ZSBtX3ByZXNldFNpemU7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1l
VmlkZW9Tb3VyY2VNYWMubW0KaW5kZXggMjNhMTY5NjJiNTM5NDE4NGM1ZjY1NGU5ZWM1ZTFkMWZl
OTBjZDI5YS4uNzI1OWRiMWU4NWQwZjJkZjYxZTQ0ZWJmN2U1ZTMwOTQxNDRmZTM2NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01vY2tSZWFsdGlt
ZVZpZGVvU291cmNlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbQpAQCAtMzQsMTAgKzM0LDEwIEBA
CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dENHLmgi
CiAjaW1wb3J0ICJJbWFnZUJ1ZmZlci5oIgorI2ltcG9ydCAiSW1hZ2VUcmFuc2ZlclNlc3Npb25W
VC5oIgogI2ltcG9ydCAiTWVkaWFDb25zdHJhaW50cy5oIgogI2ltcG9ydCAiTWVkaWFTYW1wbGVB
VkZPYmpDLmgiCiAjaW1wb3J0ICJOb3RJbXBsZW1lbnRlZC5oIgotI2ltcG9ydCAiUGl4ZWxCdWZm
ZXJSZXNpemVyLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybUxheWVyLmgiCiAjaW1wb3J0ICJSZWFsdGlt
ZU1lZGlhU291cmNlU2V0dGluZ3MuaCIKICNpbXBvcnQgIlJlYWx0aW1lVmlkZW9VdGlsaXRpZXMu
aCIKQEAgLTUxLDggKzUxLDYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFj
ZSBQQUw7CiAKLXN0YXRpYyBjb25zdCBpbnQgdmlkZW9TYW1wbGVSYXRlID0gOTAwMDA7Ci0KIENh
cHR1cmVTb3VyY2VPckVycm9yIE1vY2tSZWFsdGltZVZpZGVvU291cmNlOjpjcmVhdGUoU3RyaW5n
JiYgZGV2aWNlSUQsIFN0cmluZyYmIG5hbWUsIFN0cmluZyYmIGhhc2hTYWx0LCBjb25zdCBNZWRp
YUNvbnN0cmFpbnRzKiBjb25zdHJhaW50cykKIHsKICNpZm5kZWYgTkRFQlVHCkBAIC03NSw5OCAr
NzMsMjQgQEAgTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWM6Ok1vY2tSZWFsdGltZVZpZGVvU291
cmNlTWFjKFN0cmluZyYmIGRldmljZUlELCBTdHJpbmcKIHsKIH0KIAotUmV0YWluUHRyPENNU2Ft
cGxlQnVmZmVyUmVmPiBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYzo6Q01TYW1wbGVCdWZmZXJG
cm9tUGl4ZWxCdWZmZXIoQ1ZQaXhlbEJ1ZmZlclJlZiBwaXhlbEJ1ZmZlcikKLXsKLSAgICBpZiAo
IXBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICBDTVRpbWUg
c2FtcGxlVGltZSA9IENNVGltZU1ha2UoKChlbGFwc2VkVGltZSgpICsgMTAwX21zKSAqIHZpZGVv
U2FtcGxlUmF0ZSkuc2Vjb25kcygpLCB2aWRlb1NhbXBsZVJhdGUpOwotICAgIENNU2FtcGxlVGlt
aW5nSW5mbyB0aW1pbmdJbmZvID0geyBrQ01UaW1lSW52YWxpZCwgc2FtcGxlVGltZSwgc2FtcGxl
VGltZSB9OwotCi0gICAgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uUmVmIGZvcm1hdERlc2NyaXB0
aW9uID0gbnVsbHB0cjsKLSAgICBPU1N0YXR1cyBzdGF0dXMgPSBDTVZpZGVvRm9ybWF0RGVzY3Jp
cHRpb25DcmVhdGVGb3JJbWFnZUJ1ZmZlcihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAoQ1ZJbWFnZUJ1
ZmZlclJlZilwaXhlbEJ1ZmZlciwgJmZvcm1hdERlc2NyaXB0aW9uKTsKLSAgICBpZiAoc3RhdHVz
ICE9IG5vRXJyKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGluaXRpYWxpemUgQ01W
aWRlb0Zvcm1hdERlc2NyaXB0aW9uIHdpdGggZXJyb3IgY29kZTogJWQiLCBzdGF0dXMpOwotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBDTVNhbXBsZUJ1ZmZlclJlZiBzYW1w
bGVCdWZmZXI7Ci0gICAgc3RhdHVzID0gQ01TYW1wbGVCdWZmZXJDcmVhdGVSZWFkeVdpdGhJbWFn
ZUJ1ZmZlcihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAoQ1ZJbWFnZUJ1ZmZlclJlZilwaXhlbEJ1ZmZl
ciwgZm9ybWF0RGVzY3JpcHRpb24sICZ0aW1pbmdJbmZvLCAmc2FtcGxlQnVmZmVyKTsKLSAgICBD
RlJlbGVhc2UoZm9ybWF0RGVzY3JpcHRpb24pOwotICAgIGlmIChzdGF0dXMgIT0gbm9FcnIpIHsK
LSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBDTVNhbXBsZUJ1ZmZlciB3
aXRoIGVycm9yIGNvZGU6ICVkIiwgc3RhdHVzKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGFkb3B0Q0Yoc2FtcGxlQnVmZmVyKTsKLX0KLQotUmV0YWluUHRy
PENWUGl4ZWxCdWZmZXJSZWY+IE1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjOjpwaXhlbEJ1ZmZl
ckZyb21DR0ltYWdlKENHSW1hZ2VSZWYgaW1hZ2UpIGNvbnN0Ci17Ci0gICAgc3RhdGljIENHQ29s
b3JTcGFjZVJlZiBzUkdCQ29sb3JTcGFjZSA9IHNSR0JDb2xvclNwYWNlUmVmKCk7Ci0KLSAgICBD
R1NpemUgaW1hZ2VTaXplID0gQ0dTaXplTWFrZShDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpLCBDR0lt
YWdlR2V0SGVpZ2h0KGltYWdlKSk7Ci0gICAgaWYgKCFtX2J1ZmZlclBvb2wpIHsKLSAgICAgICAg
Q1ZQaXhlbEJ1ZmZlclBvb2xSZWYgYnVmZmVyUG9vbDsKLSAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVm
IHNvdXJjZVBpeGVsQnVmZmVyT3B0aW9ucyA9IChfX2JyaWRnZSBDRkRpY3Rpb25hcnlSZWYpIEB7
Ci0gICAgICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ1ZQaXhlbEJ1ZmZlclBpeGVsRm9y
bWF0VHlwZUtleSA6IEAoa0NWUGl4ZWxGb3JtYXRUeXBlXzMyQVJHQiksCi0gICAgICAgICAgICAo
X19icmlkZ2UgTlNTdHJpbmcgKilrQ1ZQaXhlbEJ1ZmZlcldpZHRoS2V5IDogQChpbWFnZVNpemUu
d2lkdGgpLAotICAgICAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxCdWZmZXJI
ZWlnaHRLZXkgOiBAKGltYWdlU2l6ZS5oZWlnaHQpLAotI2lmIFBMQVRGT1JNKElPUykKLSAgICAg
ICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsRm9ybWF0T3BlbkdMRVNDb21wYXRp
YmlsaXR5IDogQChZRVMpLAotI2Vsc2UKLSAgICAgICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAq
KWtDVlBpeGVsQnVmZmVyT3BlbkdMQ29tcGF0aWJpbGl0eUtleSA6IEAoWUVTKSwKLSNlbmRpZgot
ICAgICAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxCdWZmZXJJT1N1cmZhY2VQ
cm9wZXJ0aWVzS2V5IDogQHsvKmVtcHR5IGRpY3Rpb25hcnkqL30KLSAgICAgICAgfTsKLQotICAg
ICAgICBDRkRpY3Rpb25hcnlSZWYgcGl4ZWxCdWZmZXJQb29sT3B0aW9ucyA9IChfX2JyaWRnZSBD
RkRpY3Rpb25hcnlSZWYpIEB7Ci0gICAgICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBp
eGVsQnVmZmVyUG9vbE1pbmltdW1CdWZmZXJDb3VudEtleSA6IEAoNCkKLSAgICAgICAgfTsKLQot
ICAgICAgICBDVlJldHVybiBzdGF0dXMgPSBDVlBpeGVsQnVmZmVyUG9vbENyZWF0ZShrQ0ZBbGxv
Y2F0b3JEZWZhdWx0LCBwaXhlbEJ1ZmZlclBvb2xPcHRpb25zLCBzb3VyY2VQaXhlbEJ1ZmZlck9w
dGlvbnMsICZidWZmZXJQb29sKTsKLSAgICAgICAgaWYgKHN0YXR1cyAhPSBrQ1ZSZXR1cm5TdWNj
ZXNzKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgbV9idWZmZXJQb29s
ID0gYWRvcHRDRihidWZmZXJQb29sKTsKLSAgICB9Ci0KLSAgICBDVlBpeGVsQnVmZmVyUmVmIHBp
eGVsQnVmZmVyOwotICAgIENWUmV0dXJuIHN0YXR1cyA9IENWUGl4ZWxCdWZmZXJQb29sQ3JlYXRl
UGl4ZWxCdWZmZXIobnVsbHB0ciwgbV9idWZmZXJQb29sLmdldCgpLCAmcGl4ZWxCdWZmZXIpOwot
ICAgIGlmIChzdGF0dXMgIT0ga0NWUmV0dXJuU3VjY2VzcykKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICBDVlBpeGVsQnVmZmVyTG9ja0Jhc2VBZGRyZXNzKHBpeGVsQnVmZmVyLCAwKTsK
LSAgICB2b2lkKiBkYXRhID0gQ1ZQaXhlbEJ1ZmZlckdldEJhc2VBZGRyZXNzKHBpeGVsQnVmZmVy
KTsKLSAgICBhdXRvIGNvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShkYXRh
LCBpbWFnZVNpemUud2lkdGgsIGltYWdlU2l6ZS5oZWlnaHQsIDgsIENWUGl4ZWxCdWZmZXJHZXRC
eXRlc1BlclJvdyhwaXhlbEJ1ZmZlciksIHNSR0JDb2xvclNwYWNlLCAoQ0dCaXRtYXBJbmZvKSBr
Q0dJbWFnZUFscGhhTm9uZVNraXBGaXJzdCkpOwotICAgIENHQ29udGV4dERyYXdJbWFnZShjb250
ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIENHSW1hZ2VHZXRXaWR0aChpbWFnZSksIENHSW1h
Z2VHZXRIZWlnaHQoaW1hZ2UpKSwgaW1hZ2UpOwotICAgIENWUGl4ZWxCdWZmZXJVbmxvY2tCYXNl
QWRkcmVzcyhwaXhlbEJ1ZmZlciwgMCk7Ci0KLSAgICByZXR1cm4gYWRvcHRDRihwaXhlbEJ1ZmZl
cik7Ci19Ci0KIHZvaWQgTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWM6OnVwZGF0ZVNhbXBsZUJ1
ZmZlcigpCiB7CiAgICAgYXV0byBpbWFnZUJ1ZmZlciA9IHRoaXMtPmltYWdlQnVmZmVyKCk7CiAg
ICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBwaXhlbEJ1
ZmZlciA9IHBpeGVsQnVmZmVyRnJvbUNHSW1hZ2UoaW1hZ2VCdWZmZXItPmNvcHlJbWFnZSgpLT5u
YXRpdmVJbWFnZSgpLmdldCgpKTsKLSAgICBpZiAobV9waXhlbEJ1ZmZlclJlc2l6ZXIpCi0gICAg
ICAgIHBpeGVsQnVmZmVyID0gbV9waXhlbEJ1ZmZlclJlc2l6ZXItPnJlc2l6ZShwaXhlbEJ1ZmZl
ci5nZXQoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmICghbV9waXhlbEJ1ZmZlckNvbmZvcm1l
cikgewotICAgICAgICAgICAgbV9waXhlbEJ1ZmZlckNvbmZvcm1lciA9IHN0ZDo6bWFrZV91bmlx
dWU8UGl4ZWxCdWZmZXJDb25mb3JtZXJDVj4oKF9fYnJpZGdlIENGRGljdGlvbmFyeVJlZilAewot
ICAgICAgICAgICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsQnVmZmVyUGl4ZWxG
b3JtYXRUeXBlS2V5OiBAKHByZWZlcmVkUGl4ZWxCdWZmZXJGb3JtYXQoKSkKLSAgICAgICAgICAg
IH0pOwotICAgICAgICB9Ci0KLSAgICAgICAgcGl4ZWxCdWZmZXIgPSBtX3BpeGVsQnVmZmVyQ29u
Zm9ybWVyLT5jb252ZXJ0KHBpeGVsQnVmZmVyLmdldCgpKTsKLSAgICB9Ci0gICAgYXV0byBzYW1w
bGVCdWZmZXIgPSBDTVNhbXBsZUJ1ZmZlckZyb21QaXhlbEJ1ZmZlcihwaXhlbEJ1ZmZlci5nZXQo
KSk7CisgICAgaWYgKCFtX2ltYWdlVHJhbnNmZXJTZXNzaW9uKQorICAgICAgICBtX2ltYWdlVHJh
bnNmZXJTZXNzaW9uID0gSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlKHByZWZlcmVkUGl4
ZWxCdWZmZXJGb3JtYXQoKSk7CisgICAgaWYgKCFtX2ltYWdlVHJhbnNmZXJTZXNzaW9uKQorICAg
ICAgICByZXR1cm47CisKKyAgICBhdXRvIHNhbXBsZVRpbWUgPSBNZWRpYVRpbWU6OmNyZWF0ZVdp
dGhEb3VibGUoKGVsYXBzZWRUaW1lKCkgKyAxMDBfbXMpLnNlY29uZHMoKSk7CisgICAgYXV0byBz
YW1wbGVCdWZmZXIgPSBtX2ltYWdlVHJhbnNmZXJTZXNzaW9uLT5jcmVhdGVNZWRpYVNhbXBsZShp
bWFnZUJ1ZmZlci0+Y29weUltYWdlKCktPm5hdGl2ZUltYWdlKCkuZ2V0KCksIHNhbXBsZVRpbWUs
IHNpemUoKSwgbV9kZXZpY2VPcmllbnRhdGlvbik7CisgICAgaWYgKCFzYW1wbGVCdWZmZXIpCisg
ICAgICAgIHJldHVybjsKIAogICAgIC8vIFdlIHVzZSBtX2RldmljZU9yaWVudGF0aW9uIHRvIGVt
dWxhdGUgc2Vuc29yIG9yaWVudGF0aW9uCi0gICAgZGlzcGF0Y2hNZWRpYVNhbXBsZVRvT2JzZXJ2
ZXJzKE1lZGlhU2FtcGxlQVZGT2JqQzo6Y3JlYXRlKHNhbXBsZUJ1ZmZlci5nZXQoKSwgbV9kZXZp
Y2VPcmllbnRhdGlvbikpOworICAgIGRpc3BhdGNoTWVkaWFTYW1wbGVUb09ic2VydmVycygqc2Ft
cGxlQnVmZmVyLmdldCgpKTsKIH0KIAogdm9pZCBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYzo6
c2V0dGluZ3NEaWRDaGFuZ2UoT3B0aW9uU2V0PFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6
RmxhZz4gc2V0dGluZ3MpCkBAIC0yMDMsMjEgKzEyNyw2IEBAIHZvaWQgTW9ja1JlYWx0aW1lVmlk
ZW9Tb3VyY2VNYWM6Om1vbml0b3JPcmllbnRhdGlvbihPcmllbnRhdGlvbk5vdGlmaWVyJiBub3Rp
ZmllCiAgICAgb3JpZW50YXRpb25DaGFuZ2VkKG5vdGlmaWVyLm9yaWVudGF0aW9uKCkpOwogfQog
Ci12b2lkIE1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjOjpzZXRTaXplQW5kRnJhbWVSYXRlV2l0
aFByZXNldChJbnRTaXplIHJlcXVlc3RlZFNpemUsIGRvdWJsZSwgUmVmUHRyPFZpZGVvUHJlc2V0
PiBwcmVzZXQpCi17Ci0gICAgaWYgKCFwcmVzZXQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChwcmVzZXQtPnNpemUgIT0gcmVxdWVzdGVkU2l6ZSkgewotICAgICAgICBpZiAobV9waXhlbEJ1
ZmZlclJlc2l6ZXIgJiYgIW1fcGl4ZWxCdWZmZXJSZXNpemVyLT5jYW5SZXNpemVUbyhyZXF1ZXN0
ZWRTaXplKSkKLSAgICAgICAgICAgIG1fcGl4ZWxCdWZmZXJSZXNpemVyID0gbnVsbHB0cjsKLQot
ICAgICAgICBpZiAoIW1fcGl4ZWxCdWZmZXJSZXNpemVyKQotICAgICAgICAgICAgbV9waXhlbEJ1
ZmZlclJlc2l6ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFBpeGVsQnVmZmVyUmVzaXplcj4ocmVxdWVz
dGVkU2l6ZSwgcHJlZmVyZWRQaXhlbEJ1ZmZlckZvcm1hdCgpKTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgbV9waXhlbEJ1ZmZlclJlc2l6ZXIgPSBudWxscHRyOwotfQotCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1NjcmVlbkRpc3BsYXlDYXB0dXJl
U291cmNlTWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvU2Ny
ZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMuaAppbmRleCBlYzkyMGYwMjRhNTY4OTkyMDA5NDQ5
NDQ0N2Q3MmJlZTYzMjkwZGM3Li45YzhmODcxYzNkMWY5YzY5YzI1N2E2YmQ5OWVhOWY0NDI3MjBk
OWVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMv
U2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMuaApAQCAt
NTYsNyArNTYsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBmcmFtZUF2YWlsYWJsZShDR0Rpc3Bs
YXlTdHJlYW1GcmFtZVN0YXR1cywgdWludDY0X3QsIElPU3VyZmFjZVJlZiwgQ0dEaXNwbGF5U3Ry
ZWFtVXBkYXRlUmVmKTsKIAotICAgIFJldGFpblB0cjxDVlBpeGVsQnVmZmVyUmVmPiBnZW5lcmF0
ZUZyYW1lKCkgZmluYWw7CisgICAgRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6RGlzcGxheUZy
YW1lVHlwZSBnZW5lcmF0ZUZyYW1lKCkgZmluYWw7CiAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZVNl
dHRpbmdzOjpEaXNwbGF5U3VyZmFjZVR5cGUgc3VyZmFjZVR5cGUoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M6OkRpc3BsYXlTdXJmYWNlVHlwZTo6TW9u
aXRvcjsgfQogCiAgICAgdm9pZCBzdGFydFByb2R1Y2luZ0RhdGEoKSBmaW5hbDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9TY3JlZW5EaXNwbGF5
Q2FwdHVyZVNvdXJjZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9TY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5tbQppbmRleCBhMjM4ZjI4Zjk3NWI4
NDA4MzQyNzdlOGIwYzJkZWRjMTljYWJlNDQ3Li40Y2I0ZDEzY2E1MDJmNDNkMjEyYmQ4NGExZDdl
NzBiOGFlZTJhMmI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1NjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNl
TWFjLm1tCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNp
bmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCiAjaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZVNl
dHRpbmdzLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVWaWRlb1V0aWxpdGllcy5oIgogCiAjaW5jbHVk
ZSAiQ29yZVZpZGVvU29mdExpbmsuaCIKIApAQCAtMTY2LDcgKzE2Nyw3IEBAIGJvb2wgU2NyZWVu
RGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OmNyZWF0ZURpc3BsYXlTdHJlYW0oKQogICAgICAgICB9
KTsKIAogICAgICAgICBhdXRvIHNpemUgPSBmcmFtZVNpemUoKTsKLSAgICAgICAgbV9kaXNwbGF5
U3RyZWFtID0gYWRvcHRDRihDR0Rpc3BsYXlTdHJlYW1DcmVhdGVXaXRoRGlzcGF0Y2hRdWV1ZSht
X2Rpc3BsYXlJRCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCBrQ1ZQaXhlbEZvcm1hdFR5
cGVfNDIwWXBDYkNyOFBsYW5hciwgc3RyZWFtT3B0aW9ucy5nZXQoKSwgbV9jYXB0dXJlUXVldWUu
Z2V0KCksIG1fZnJhbWVBdmFpbGFibGVCbG9jaykpOworICAgICAgICBtX2Rpc3BsYXlTdHJlYW0g
PSBhZG9wdENGKENHRGlzcGxheVN0cmVhbUNyZWF0ZVdpdGhEaXNwYXRjaFF1ZXVlKG1fZGlzcGxh
eUlELCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIHByZWZlcmVkUGl4ZWxCdWZmZXJGb3Jt
YXQoKSwgc3RyZWFtT3B0aW9ucy5nZXQoKSwgbV9jYXB0dXJlUXVldWUuZ2V0KCksIG1fZnJhbWVB
dmFpbGFibGVCbG9jaykpOwogICAgICAgICBpZiAoIW1fZGlzcGxheVN0cmVhbSkgewogICAgICAg
ICAgICAgUkVMRUFTRV9MT0coTWVkaWEsICJTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6
Y3JlYXRlRGlzcGxheVN0cmVhbTogQ0dEaXNwbGF5U3RyZWFtQ3JlYXRlIGZhaWxlZCIpOwogICAg
ICAgICAgICAgY2FwdHVyZUZhaWxlZCgpOwpAQCAtMjA1LDE4ICsyMDYsMTUgQEAgdm9pZCBTY3Jl
ZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6c3RvcFByb2R1Y2luZ0RhdGEoKQogICAgIG1faXNS
dW5uaW5nID0gZmFsc2U7CiB9CiAKLVJldGFpblB0cjxDVlBpeGVsQnVmZmVyUmVmPiBTY3JlZW5E
aXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6Z2VuZXJhdGVGcmFtZSgpCitEaXNwbGF5Q2FwdHVyZVNv
dXJjZUNvY29hOjpEaXNwbGF5RnJhbWVUeXBlIFNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFj
OjpnZW5lcmF0ZUZyYW1lKCkKIHsKLSAgICBpZiAoIW1fY3VycmVudEZyYW1lLmlvU3VyZmFjZSgp
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQogICAgIERpc3BsYXlTdXJmYWNlIGN1cnJlbnRG
cmFtZTsKICAgICB7CiAgICAgICAgIExvY2tIb2xkZXIgbG9jayhtX2N1cnJlbnRGcmFtZU11dGV4
KTsKICAgICAgICAgY3VycmVudEZyYW1lID0gbV9jdXJyZW50RnJhbWUuaW9TdXJmYWNlKCk7CiAg
ICAgfQogCi0gICAgcmV0dXJuIHBpeGVsQnVmZmVyRnJvbUlPU3VyZmFjZShjdXJyZW50RnJhbWUu
aW9TdXJmYWNlKCkpOworICAgIHJldHVybiBEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpEaXNw
bGF5RnJhbWVUeXBlIHsgUmV0YWluUHRyPElPU3VyZmFjZVJlZj4geyBjdXJyZW50RnJhbWUuaW9T
dXJmYWNlKCkgfSB9OwogfQogCiB2b2lkIFNjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpz
dGFydERpc3BsYXlTdHJlYW0oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbWFjL1dpbmRvd0Rpc3BsYXlDYXB0dXJlU291cmNlTWFjLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvV2luZG93RGlzcGxheUNhcHR1cmVTb3Vy
Y2VNYWMuaAppbmRleCAxYzRkMzc2MGY4OGNmZjVmYTc0Y2QyNzA2NjAzZTY4YTFkM2Q2ZGRmLi4y
ZDFhNjZlMDMxMmJhZGNhODlkOWJjZjBiODA2NmVkNDMyZGIyZDU2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvV2luZG93RGlzcGxheUNhcHR1cmVT
b3VyY2VNYWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMv
V2luZG93RGlzcGxheUNhcHR1cmVTb3VyY2VNYWMuaApAQCAtNDksMTEgKzQ5LDEwIEBAIHByaXZh
dGU6CiAgICAgV2luZG93RGlzcGxheUNhcHR1cmVTb3VyY2VNYWModWludDMyX3QsIFN0cmluZyYm
KTsKICAgICB2aXJ0dWFsIH5XaW5kb3dEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYygpID0gZGVmYXVs
dDsKIAotICAgIFJldGFpblB0cjxDVlBpeGVsQnVmZmVyUmVmPiBnZW5lcmF0ZUZyYW1lKCkgZmlu
YWw7CisgICAgRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6RGlzcGxheUZyYW1lVHlwZSBnZW5l
cmF0ZUZyYW1lKCkgZmluYWw7CiAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpEaXNw
bGF5U3VyZmFjZVR5cGUgc3VyZmFjZVR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBSZWFsdGlt
ZU1lZGlhU291cmNlU2V0dGluZ3M6OkRpc3BsYXlTdXJmYWNlVHlwZTo6V2luZG93OyB9CiAKICAg
ICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gd2luZG93SW1hZ2UoKTsKLSAgICBSZXRhaW5QdHI8Q1ZQ
aXhlbEJ1ZmZlclJlZj4gcGl4ZWxCdWZmZXJGcm9tQ0dJbWFnZShDR0ltYWdlUmVmKTsKIAogICAg
IEludFNpemUgbV93aW5kb3dTaXplOwogICAgIENHV2luZG93SUQgbV93aW5kb3dJRCB7IDAgfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9XaW5k
b3dEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL21hYy9XaW5kb3dEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5tbQppbmRleCAxZDZh
MTdjZDQxMzhmZDFkNTY3MmJmOTMyOTM3MDRiZjEwMTQxOTIzLi45YzVkNWQ0MzEyZDZkNTM2ODRj
ODVmMmE3ODBkODNiMzI2OTUxNTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvV2luZG93RGlzcGxheUNhcHR1cmVTb3VyY2VNYWMubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1dpbmRvd0Rpc3BsYXlDYXB0
dXJlU291cmNlTWFjLm1tCkBAIC0xMzksNjkgKzEzOSw5IEBAIFJldGFpblB0cjxDR0ltYWdlUmVm
PiBXaW5kb3dEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6d2luZG93SW1hZ2UoKQogICAgIHJldHVy
biBpbWFnZTsKIH0KIAotUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJSZWY+IFdpbmRvd0Rpc3BsYXlD
YXB0dXJlU291cmNlTWFjOjpnZW5lcmF0ZUZyYW1lKCkKK0Rpc3BsYXlDYXB0dXJlU291cmNlQ29j
b2E6OkRpc3BsYXlGcmFtZVR5cGUgV2luZG93RGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OmdlbmVy
YXRlRnJhbWUoKQogewotICAgIGF1dG8gaW1hZ2UgPSB3aW5kb3dJbWFnZSgpOwotICAgIGlmICgh
aW1hZ2UpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKG1fbGFzdEltYWdlICYm
IG1fbGFzdFBpeGVsQnVmZmVyICYmIENGRXF1YWwobV9sYXN0SW1hZ2UuZ2V0KCksIGltYWdlLmdl
dCgpKSkKLSAgICAgICAgcmV0dXJuIG1fbGFzdFBpeGVsQnVmZmVyLmdldCgpOwotCi0gICAgbV9s
YXN0SW1hZ2UgPSBXVEZNb3ZlKGltYWdlKTsKLSAgICByZXR1cm4gcGl4ZWxCdWZmZXJGcm9tQ0dJ
bWFnZShtX2xhc3RJbWFnZS5nZXQoKSk7Ci19Ci0KLVJldGFpblB0cjxDVlBpeGVsQnVmZmVyUmVm
PiBXaW5kb3dEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6cGl4ZWxCdWZmZXJGcm9tQ0dJbWFnZShD
R0ltYWdlUmVmIGltYWdlKQotewotICAgIHN0YXRpYyBDR0NvbG9yU3BhY2VSZWYgc1JHQkNvbG9y
U3BhY2UgPSBzUkdCQ29sb3JTcGFjZVJlZigpOwotCi0gICAgYXV0byBpbWFnZVNpemUgPSBJbnRT
aXplKENHSW1hZ2VHZXRXaWR0aChpbWFnZSksIENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpKTsKLSAg
ICBpZiAoaW1hZ2VTaXplICE9IGludHJpbnNpY1NpemUoKSkgewotICAgICAgICBtX2J1ZmZlclBv
b2wgPSBudWxscHRyOwotICAgICAgICBtX2xhc3RJbWFnZSA9IG51bGxwdHI7Ci0gICAgICAgIG1f
bGFzdFBpeGVsQnVmZmVyID0gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBpZiAoIW1fYnVmZmVyUG9v
bCkgewotICAgICAgICBDVlBpeGVsQnVmZmVyUG9vbFJlZiBidWZmZXJQb29sOwotICAgICAgICBD
RkRpY3Rpb25hcnlSZWYgc291cmNlUGl4ZWxCdWZmZXJPcHRpb25zID0gKF9fYnJpZGdlIENGRGlj
dGlvbmFyeVJlZikgQHsKLSAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxCdWZm
ZXJQaXhlbEZvcm1hdFR5cGVLZXkgOiBAKGtDVlBpeGVsRm9ybWF0VHlwZV8zMkFSR0IpLAotICAg
ICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ1ZQaXhlbEJ1ZmZlcldpZHRoS2V5IDogQChpbWFn
ZVNpemUud2lkdGgoKSksCi0gICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsQnVm
ZmVySGVpZ2h0S2V5IDogQChpbWFnZVNpemUuaGVpZ2h0KCkpLAotI2lmIFBMQVRGT1JNKElPUykK
LSAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxGb3JtYXRPcGVuR0xFU0NvbXBh
dGliaWxpdHkgOiBAKFlFUyksCi0jZWxzZQotICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilr
Q1ZQaXhlbEJ1ZmZlck9wZW5HTENvbXBhdGliaWxpdHlLZXkgOiBAKFlFUyksCi0jZW5kaWYKLSAg
ICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxCdWZmZXJJT1N1cmZhY2VQcm9wZXJ0
aWVzS2V5IDogQHsgLyplbXB0eSBkaWN0aW9uYXJ5Ki8gfQotICAgIH07Ci0KLSAgICAgICAgQ0ZE
aWN0aW9uYXJ5UmVmIHBpeGVsQnVmZmVyUG9vbE9wdGlvbnMgPSAoX19icmlkZ2UgQ0ZEaWN0aW9u
YXJ5UmVmKSBAewotICAgICAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxCdWZm
ZXJQb29sTWluaW11bUJ1ZmZlckNvdW50S2V5IDogQCgzKQotICAgICAgICB9OwotCi0gICAgICAg
IENWUmV0dXJuIHN0YXR1cyA9IENWUGl4ZWxCdWZmZXJQb29sQ3JlYXRlKGtDRkFsbG9jYXRvckRl
ZmF1bHQsIHBpeGVsQnVmZmVyUG9vbE9wdGlvbnMsIHNvdXJjZVBpeGVsQnVmZmVyT3B0aW9ucywg
JmJ1ZmZlclBvb2wpOwotICAgICAgICBpZiAoc3RhdHVzICE9IGtDVlJldHVyblN1Y2Nlc3MpCi0g
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBtX2J1ZmZlclBvb2wgPSBhZG9w
dENGKGJ1ZmZlclBvb2wpOwotICAgICAgICBzZXRJbnRyaW5zaWNTaXplKGltYWdlU2l6ZSk7Ci0g
ICAgfQotCi0gICAgQ1ZQaXhlbEJ1ZmZlclJlZiBwaXhlbEJ1ZmZlcjsKLSAgICBDVlJldHVybiBz
dGF0dXMgPSBDVlBpeGVsQnVmZmVyUG9vbENyZWF0ZVBpeGVsQnVmZmVyKG51bGxwdHIsIG1fYnVm
ZmVyUG9vbC5nZXQoKSwgJnBpeGVsQnVmZmVyKTsKLSAgICBpZiAoc3RhdHVzICE9IGtDVlJldHVy
blN1Y2Nlc3MpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQ1ZQaXhlbEJ1ZmZlckxv
Y2tCYXNlQWRkcmVzcyhwaXhlbEJ1ZmZlciwgMCk7Ci0gICAgdm9pZCogZGF0YSA9IENWUGl4ZWxC
dWZmZXJHZXRCYXNlQWRkcmVzcyhwaXhlbEJ1ZmZlcik7Ci0gICAgYXV0byBjb250ZXh0ID0gYWRv
cHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoZGF0YSwgaW1hZ2VTaXplLndpZHRoKCksIGltYWdl
U2l6ZS5oZWlnaHQoKSwgOCwgQ1ZQaXhlbEJ1ZmZlckdldEJ5dGVzUGVyUm93KHBpeGVsQnVmZmVy
KSwgc1JHQkNvbG9yU3BhY2UsIChDR0JpdG1hcEluZm8pIGtDR0ltYWdlQWxwaGFOb25lU2tpcEZp
cnN0KSk7Ci0gICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2Uo
MCwgMCwgQ0dJbWFnZUdldFdpZHRoKGltYWdlKSwgQ0dJbWFnZUdldEhlaWdodChpbWFnZSkpLCBp
bWFnZSk7Ci0gICAgQ1ZQaXhlbEJ1ZmZlclVubG9ja0Jhc2VBZGRyZXNzKHBpeGVsQnVmZmVyLCAw
KTsKLQotICAgIG1fbGFzdFBpeGVsQnVmZmVyID0gYWRvcHRDRihwaXhlbEJ1ZmZlcik7Ci0gICAg
cmV0dXJuIG1fbGFzdFBpeGVsQnVmZmVyOworICAgIHJldHVybiBEaXNwbGF5Q2FwdHVyZVNvdXJj
ZUNvY29hOjpEaXNwbGF5RnJhbWVUeXBlIHsgUmV0YWluUHRyPENHSW1hZ2VSZWY+IHsgd2luZG93
SW1hZ2UoKSB9IH07CiB9CiAKIHN0ZDo6b3B0aW9uYWw8Q2FwdHVyZURldmljZT4gV2luZG93RGlz
cGxheUNhcHR1cmVTb3VyY2VNYWM6OndpbmRvd0NhcHR1cmVEZXZpY2VXaXRoUGVyc2lzdGVudElE
KGNvbnN0IFN0cmluZyYgaWRTdHJpbmcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCmluZGV4IDYyMjQ3ZWQ1NmRk
MGZlNzJiZTAwMzkxNDRiOGYwNDZmNTBkOTZmNGQuLjdhYjdhMjE1NGUzYWUyYTQxYzdkMTJjOGMw
NzRkMjIxZjg3ODc2YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2sv
TW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCkBAIC0xMjYsNiArMTI2LDcgQEAgY29u
c3QgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYgTW9ja1JlYWx0aW1lVmlkZW9Tb3Vy
Y2U6OmNhcGFiaWxpdGllcygpCiAgICAgICAgICAgICBjYXBhYmlsaXRpZXMuYWRkRmFjaW5nTW9k
ZShXVEY6OmdldDxNb2NrQ2FtZXJhUHJvcGVydGllcz4obV9kZXZpY2UucHJvcGVydGllcykuZmFj
aW5nTW9kZSk7CiAgICAgICAgICAgICBjYXBhYmlsaXRpZXMuc2V0RGV2aWNlSWQoaGFzaGVkSWQo
KSk7CiAgICAgICAgICAgICB1cGRhdGVDYXBhYmlsaXRpZXMoY2FwYWJpbGl0aWVzKTsKKyAgICAg
ICAgICAgIGNhcGFiaWxpdGllcy5zZXREZXZpY2VJZChoYXNoZWRJZCgpKTsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIGNhcGFiaWxpdGllcy5zZXRXaWR0aChDYXBhYmlsaXR5VmFsdWVP
clJhbmdlKDcyLCAyODgwKSk7CiAgICAgICAgICAgICBjYXBhYmlsaXRpZXMuc2V0SGVpZ2h0KENh
cGFiaWxpdHlWYWx1ZU9yUmFuZ2UoNDUsIDE4MDApKTsKQEAgLTE1OSwxNCArMTYwLDE0IEBAIGNv
bnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYgTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2U6
OnNldHRpbmdzKCkKICAgICAgICAgc2V0dGluZ3Muc2V0QXNwZWN0UmF0aW8oYXNwZWN0UmF0aW8o
KSk7CiAKICAgICBSZWFsdGltZU1lZGlhU291cmNlU3VwcG9ydGVkQ29uc3RyYWludHMgc3VwcG9y
dGVkQ29uc3RyYWludHM7Ci0gICAgc3VwcG9ydGVkQ29uc3RyYWludHMuc2V0U3VwcG9ydHNEZXZp
Y2VJZCh0cnVlKTsKICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0ZyYW1lUmF0
ZSh0cnVlKTsKICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c1dpZHRoKHRydWUp
OwogICAgIHN1cHBvcnRlZENvbnN0cmFpbnRzLnNldFN1cHBvcnRzSGVpZ2h0KHRydWUpOwogICAg
IHN1cHBvcnRlZENvbnN0cmFpbnRzLnNldFN1cHBvcnRzQXNwZWN0UmF0aW8odHJ1ZSk7Ci0gICAg
aWYgKG1vY2tDYW1lcmEoKSkKKyAgICBpZiAobW9ja0NhbWVyYSgpKSB7CisgICAgICAgIHN1cHBv
cnRlZENvbnN0cmFpbnRzLnNldFN1cHBvcnRzRGV2aWNlSWQodHJ1ZSk7CiAgICAgICAgIHN1cHBv
cnRlZENvbnN0cmFpbnRzLnNldFN1cHBvcnRzRmFjaW5nTW9kZSh0cnVlKTsKLSAgICBlbHNlIHsK
KyAgICB9IGVsc2UgewogICAgICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0Rp
c3BsYXlTdXJmYWNlKHRydWUpOwogICAgICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBw
b3J0c0xvZ2ljYWxTdXJmYWNlKHRydWUpOwogICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>352623</attachid>
            <date>2018-10-17 13:01:30 -0700</date>
            <delta_ts>2018-10-17 14:55:43 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>bug-190519-20181017130129.patch</filename>
            <type>text/plain</type>
            <size>86791</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM3MjIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWE0NmI3NzY0NzJmODlk
ZTBlYWNjMTBlNjZmNTc0M2ZjMDhlNDQwOC4uYzMzYjIwZDMyNWI1ZjBjMzE4M2E4YmY2NmM5MWE4
NDk0MjE1NjBlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgwIEBACisyMDE4LTEwLTE2ICBFcmlj
IENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNZWRpYVN0cmVh
bV0gQ29uc29saWRhdGUgYWxsIGltYWdlIGNvbnZlcnNpb24gYW5kIHJlc2l6aW5nIGludG8gb25l
IGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
OTA1MTkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQ1MjI0MzA3PgorCisgICAgICAgIFJldmll
d2VkIGJ5IFlvdWVubiBGYWJsZXQuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBmdW5jdGlv
bmFsIGNoYW5nZS4KKworICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6IEFkZCBJbWFnZVRyYW5z
ZmVyU2Vzc2lvblZULgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajogRGl0dG8uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9NZWRpYVNhbXBsZS5oOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFTYW1wbGU6OnZpZGVvUGl4ZWxGb3JtYXQgY29uc3QpOiBOZXcuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9WaWRlb1Rvb2xib3hTb2Z0TGluay5jcHA6IEFkZCBuZXcg
a1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5IGtleXMuCisgICAgICAgICogcGxhdGZvcm0vY29jb2Ev
VmlkZW9Ub29sYm94U29mdExpbmsuaDoKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL01lZGlhU2FtcGxlQVZGT2JqQy5oOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVhdGUpOiBSZW1vdmUgdW5pbXBsZW1lbnRlZCB2YXJpYW50
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU2Ft
cGxlQVZGT2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2FtcGxlQVZGT2JqQzo6dmlk
ZW9QaXhlbEZvcm1hdCBjb25zdCk6IE5ldy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2N2L0ltYWdlVHJhbnNmZXJTZXNzaW9uVlQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2N2L0ltYWdlVHJhbnNmZXJTZXNzaW9uVlQubW06IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6SW1hZ2VUcmFuc2ZlclNlc3Npb25WVCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjp+SW1hZ2VUcmFuc2ZlclNlc3Np
b25WVCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpzZXRTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNyZWF0ZVBpeGVs
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNyZWF0
ZUNNU2FtcGxlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OnJvdW5kVXBUb01hY3JvYmxvY2tN
dWx0aXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjppb1N1
cmZhY2VQaXhlbEJ1ZmZlckNyZWF0aW9uT3B0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVhdGVNZWRpYVNhbXBsZSk6CisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jdi9QaXhlbEJ1ZmZlclJlc2l6ZXIuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jdi9QaXhlbEJ1ZmZlclJlc2l6ZXIubW06IFJlbW92ZWQuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZWaWRlb0NhcHR1cmVTb3VyY2Uu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZWaWRlb0NhcHR1cmVTb3Vy
Y2UubW06CisgICAgICAgIChXZWJDb3JlOjpBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6cHJlZmVyc1By
ZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6Y2FwdHVyZU91
dHB1dERpZE91dHB1dFNhbXBsZUJ1ZmZlckZyb21Db25uZWN0aW9uKTogUmVtb3ZlCisgICAgICAg
IHRoZSByZXNpemluZyBsb2dpYywgaXQgaXMgaGFuZGxlZCBieSB0aGUgYmFzZSBjbGFzcy4KKwor
ICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9EaXNwbGF5Q2FwdHVyZVNvdXJjZUNv
Y29hLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OmNh
cGFiaWxpdGllcyk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29h
OjpzZXR0aW5nc0RpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5Q2FwdHVyZVNv
dXJjZUNvY29hOjpzZXRJbnRyaW5zaWNTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlD
YXB0dXJlU291cmNlQ29jb2E6OmVtaXRGcmFtZSk6IFJlbW92ZSByZXNpemluZyBsb2dpYywganVz
dCB1c2UgYSB0cmFuc2ZlcgorICAgICAgICBzZXNzaW9uIHRvIGNyZWF0ZSBhbiBpbWFnZSBmcm9t
IHRoZSBjYXB0dXJlIHNvdXJjZSBuYXRpdmUgb3V0cHV0IGZvcm1hdC4KKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OnNhbXBsZUJ1ZmZlckZyb21QaXhlbEJ1ZmZl
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpyb3VuZFVwVG9NYWNyb2Jsb2NrTXVsdGlw
bGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUNhcHR1cmVTb3VyY2VDb2Nv
YTo6cGl4ZWxCdWZmZXJGcm9tSU9TdXJmYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYS5oOgorCisgICAgICAg
ICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLmg6
CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01vY2tSZWFsdGltZVZpZGVvU291
cmNlTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6TW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWM6
OnVwZGF0ZVNhbXBsZUJ1ZmZlcik6IFVzZSBpbWFnZSB0cmFuc2ZlciBzZXNzaW9uLgorICAgICAg
ICAoV2ViQ29yZTo6TW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWM6OkNNU2FtcGxlQnVmZmVyRnJv
bVBpeGVsQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tSZWFsdGltZVZp
ZGVvU291cmNlTWFjOjpwaXhlbEJ1ZmZlckZyb21DR0ltYWdlIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6Ok1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjOjpzZXRTaXplQW5kRnJh
bWVSYXRlV2l0aFByZXNldCk6IERlbGV0ZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMubW06Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6Y3JlYXRlRGlz
cGxheVN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJj
ZU1hYzo6Z2VuZXJhdGVGcmFtZSk6IFJldHVybiB0aGUgSU9TdXJmYWNlIGRpcmVjdGx5LgorCisg
ICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1dpbmRvd0Rpc3BsYXlDYXB0dXJlU291
cmNlTWFjLmg6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1dpbmRvd0Rpc3Bs
YXlDYXB0dXJlU291cmNlTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6V2luZG93RGlzcGxheUNh
cHR1cmVTb3VyY2VNYWM6OmdlbmVyYXRlRnJhbWUpOiBSZXR1cm4gdGhlIENHSW1hZ2UgZGlyZWN0
bHkuCisgICAgICAgIChXZWJDb3JlOjpXaW5kb3dEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYzo6cGl4
ZWxCdWZmZXJGcm9tQ0dJbWFnZSk6IERlbGV0ZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tb2Nr
L01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tSZWFs
dGltZVZpZGVvU291cmNlOjpjYXBhYmlsaXRpZXMpOiBPbmx5IHRoZSBjYW1lcmEgc3VwcG9ydHMg
ZGV2aWNlIElELgorICAgICAgICAoV2ViQ29yZTo6TW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2U6OnNl
dHRpbmdzKTogRGl0dG8uCisKIDIwMTgtMTAtMTcgIEFsaSBKdW1hICA8YWp1bWFAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIEZsYWt5IEludGVyc2VjdGlvbk9ic2VydmVyIHdlYiBwbGF0Zm9ybSB0
ZXN0cyBpbnZvbHZpbmcgc3R5bGUgdXBkYXRlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
U291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKaW5kZXgg
Yzc2ZjQ5MjMxY2I1ZTBiYmQ1YzA5Y2YyZTI0YzRjOTE1OWNkOWU1Ny4uODQ1NTVhNmE3OWFhMDQx
ZTJhYmI1YTliMDQ4OTQ4OWQ4NjIwMzA4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291
cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC0z
MTQsOCArMzE0LDggQEAgcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViR0xMYXllci5tbQogcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViTWV0YWxMYXllci5tbQogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYS5tbQogCitwbGF0Zm9ybS9ncmFwaGlj
cy9jdi9JbWFnZVRyYW5zZmVyU2Vzc2lvblZULm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jdi9QaXhl
bEJ1ZmZlckNvbmZvcm1lckNWLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJS
ZXNpemVyLm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jdi9UZXh0dXJlQ2FjaGVDVi5tbQogcGxhdGZv
cm0vZ3JhcGhpY3MvY3YvVmlkZW9UZXh0dXJlQ29waWVyQ1YuY3BwCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA5N2IzNWFmZmY5
MWEzMjM1NjMwN2NhNmE3NDYwMDU4ZDIwMmEwNWJmLi5lNTZlN2ViZWE3MDZlM2JhNDJlZTIxZDg2
YmRkYTVhMjk3NjExMGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNjksNiArMTY5LDcgQEAKIAkJMDc4RTQzREExQUJCNkM3
RTAwMUMyRkE2IC8qIE1lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3OEU0M0Q4MUFCQjZDN0UwMDFDMkZBNiAv
KiBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDc4RTQzREQxQUJCNkY2RjAwMUMyRkE2IC8qIE1lZGlh
UGxheWJhY2tUYXJnZXRQaWNrZXJNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDA3OEU0M0RCMUFCQjZGNkYwMDFDMkZBNiAvKiBNZWRpYVBsYXliYWNr
VGFyZ2V0UGlja2VyTWFjLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMDc4RTQzREUxQUJCNkY2RjAwMUMyRkE2IC8qIE1lZGlhUGxheWJhY2tUYXJn
ZXRQaWNrZXJNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwNzhFNDNEQzFBQkI2RjZGMDAxQzJGQTYgLyogTWVkaWFQbGF5YmFja1RhcmdldFBpY2tl
ck1hYy5tbSAqLzsgfTsKKwkJMDc4RUQxOTMyMTZEMDc5NTAwNzc1QjMzIC8qIEltYWdlVHJhbnNm
ZXJTZXNzaW9uVlQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDA3NDZEMzBDMjE0NkVBMzgwMDNEREY4NCAvKiBJbWFnZVRyYW5zZmVyU2Vzc2lvblZULmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDc5MjE2
NTUxQUE1NjBBQTAwQTNDMDQ5IC8qIE1lZGlhUGxheWJhY2tUYXJnZXRDbGllbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3OTIxNjUzMUFBNTYwQUEw
MEEzQzA0OSAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0Q2xpZW50LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDc5NDE3OTExNjZFODU1RjAwOTQxNkMy
IC8qIEluYmFuZFRleHRUcmFjay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwNzk0MTc4RjE2NkU4NTVGMDA5NDE2QzIgLyogSW5iYW5kVGV4dFRyYWNr
LmNwcCAqLzsgfTsKIAkJMDc5NDE3OTIxNjZFODU1RjAwOTQxNkMyIC8qIEluYmFuZFRleHRUcmFj
ay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDc5NDE3
OTAxNjZFODU1RjAwOTQxNkMyIC8qIEluYmFuZFRleHRUcmFjay5oICovOyB9OwpAQCAtNTM2OCw4
ICs1MzY5LDggQEAKIAkJMDczQjg3NjUxRTQzODU5RDAwNzFDMEVDIC8qIEF1ZGlvU2FtcGxlRGF0
YVNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdWRpb1NhbXBsZURh
dGFTb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDc0NEVDRUIxRTBDNEFF
NTAwMEQwOTQ0IC8qIE1vY2tSZWFsdGltZUF1ZGlvU291cmNlTWFjLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE1vY2tSZWFsdGltZUF1ZGlvU291cmNlTWFjLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3NDRFQ0VDMUUwQzRBRTUwMDBEMDk0NCAvKiBNb2NrUmVh
bHRpbWVBdWRpb1NvdXJjZU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IE1vY2tSZWFsdGltZUF1ZGlvU291cmNlTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkwNzQ2RDMwQTIxNDZFQTM3MDAzRERGODQgLyogUGl4ZWxCdWZmZXJSZXNpemVy
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUGl4ZWxCdWZmZXJS
ZXNpemVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwNzQ2RDMwQzIxNDZFQTM4
MDAzRERGODQgLyogUGl4ZWxCdWZmZXJSZXNpemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFBpeGVsQnVmZmVyUmVzaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwNzQ2RDMwQTIxNDZFQTM3MDAzRERGODQgLyogSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEltYWdlVHJhbnNmZXJT
ZXNzaW9uVlQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3NDZEMzBDMjE0NkVB
MzgwMDNEREY4NCAvKiBJbWFnZVRyYW5zZmVyU2Vzc2lvblZULmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEltYWdlVHJhbnNmZXJTZXNzaW9uVlQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMDc0RTgyQjgxOEE2OUYwRTAwN0VGNTRDIC8qIFBsYXRmb3JtVGltZVJh
bmdlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQbGF0Zm9ybVRp
bWVSYW5nZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzRFODJCOTE4QTY5
RjBFMDA3RUY1NEMgLyogUGxhdGZvcm1UaW1lUmFuZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFBsYXRmb3JtVGltZVJhbmdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwNzUzODYwMDE0NDg5RTk4MDBCNzg0NTIgLyogQ2FjaGVkVGV4dFRyYWNrLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhY2hlZFRleHRUcmFjay5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTA5NSwxMCArMjUwOTYsMTAgQEAKIAkJ
Q0Q5RDgyN0MxQzdCQjJFRDAwNkZGMDY2IC8qIGN2ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwNzQ2RDMwQzIxNDZFQTM4MDAzRERGODQgLyogSW1hZ2VU
cmFuc2ZlclNlc3Npb25WVC5oICovLAorCQkJCTA3NDZEMzBBMjE0NkVBMzcwMDNEREY4NCAvKiBJ
bWFnZVRyYW5zZmVyU2Vzc2lvblZULm1tICovLAogCQkJCUNEN0QzMzQxMUM3QTEyM0YwMDA0MTI5
MyAvKiBQaXhlbEJ1ZmZlckNvbmZvcm1lckNWLmNwcCAqLywKIAkJCQlDRDdEMzM0MjFDN0ExMjNG
MDAwNDEyOTMgLyogUGl4ZWxCdWZmZXJDb25mb3JtZXJDVi5oICovLAotCQkJCTA3NDZEMzBDMjE0
NkVBMzgwMDNEREY4NCAvKiBQaXhlbEJ1ZmZlclJlc2l6ZXIuaCAqLywKLQkJCQkwNzQ2RDMwQTIx
NDZFQTM3MDAzRERGODQgLyogUGl4ZWxCdWZmZXJSZXNpemVyLm1tICovLAogCQkJCUNEOUQ4Mjc0
MUM3QUU1MzUwMDZGRjA2NiAvKiBUZXh0dXJlQ2FjaGVDVi5oICovLAogCQkJCUNEOUQ4MjczMUM3
QUU1MzUwMDZGRjA2NiAvKiBUZXh0dXJlQ2FjaGVDVi5tbSAqLywKIAkJCQlDRDlEODI3NzFDN0I4
RUUxMDA2RkYwNjYgLyogVmlkZW9UZXh0dXJlQ29waWVyQ1YuY3BwICovLApAQCAtMjg3MjAsNiAr
Mjg3MjEsNyBAQAogCQkJCTdDMTkzQkMxMUY1RTBFRUQwMDg4RjNFNiAvKiBJbWFnZVNtb290aGlu
Z1F1YWxpdHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTU1NDY3NTdCMUZEMjEyQTkwMDNCMTBCMCAv
KiBJbWFnZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEIzNDgwOTQwRUVGNTBENDAwQUMx
QjQxIC8qIEltYWdlU291cmNlQ0cuaCBpbiBIZWFkZXJzICovLAorCQkJCTA3OEVEMTkzMjE2RDA3
OTUwMDc3NUIzMyAvKiBJbWFnZVRyYW5zZmVyU2Vzc2lvblZULmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1NTUwQ0I0MjFFOTU1RTNDMDAxMTFBQTAgLyogSW1hZ2VUeXBlcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMjZGNzU2QjMxQjNCNjZGNzAwMDVERDc5IC8qIEltbXV0YWJsZU5GQS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMjZGNzU2QjUxQjNCNjhGMjAwMDVERDc5IC8qIEltbXV0YWJsZU5GQU5vZGVC
dWlsZGVyLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL01lZGlhU2FtcGxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZWRpYVNhbXBsZS5o
CmluZGV4IGU1ODJmZGI0OWFjZWVkYTBmYzM2OGEwY2VjNTYxODgxYWU4OGMzN2IuLjA1MGQ5Mzg5
ZDE4ZTEwZjVkOTdiYTQzZDg2MGMyYTEzNTIwNjYyZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL01lZGlhU2FtcGxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
TWVkaWFTYW1wbGUuaApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiRmxvYXRTaXplLmgi
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheXMuaD4KKyNpbmNsdWRlIDx3dGYv
RW51bVRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9NZWRpYVRpbWUuaD4KICNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgpAQCAtMTAw
LDYgKzEwMSwyMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
KSBjb25zdCA9IDA7CiB9OwogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK25hbWVzcGFj
ZSBXVEYgeworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6Ok1lZGlhU2Ft
cGxlOjpWaWRlb1JvdGF0aW9uPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAg
ICAgICAgV2ViQ29yZTo6TWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb24sCisgICAgICAgIFdlYkNv
cmU6Ok1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpOb25lLAorICAgICAgICBXZWJDb3JlOjpN
ZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6VXBzaWRlRG93biwKKyAgICAgICAgV2ViQ29yZTo6
TWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246OlJpZ2h0LAorICAgICAgICBXZWJDb3JlOjpNZWRp
YVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6TGVmdAorICAgID47Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXVEYKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2Nv
YS9Db3JlVmlkZW9Tb2Z0TGluay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9D
b3JlVmlkZW9Tb2Z0TGluay5jcHAKaW5kZXggOGJiMzYyYmYyNjgwZDM2ZDZlM2YwZDVjMzIwNTIx
MzVjMWRmNWE5OC4uZGNmYjFjZmI0N2EwM2QzNzNhM2E2MjI4NzRlNzAzODU5MTZjZTA4YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvQ29yZVZpZGVvU29mdExpbmsu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL0NvcmVWaWRlb1NvZnRMaW5r
LmNwcApAQCAtOTIsNCArOTIsNiBAQCBTT0ZUX0xJTktfQ09OU1RBTlRfRk9SX1NPVVJDRShXZWJD
b3JlLCBDb3JlVmlkZW8sIGtDVlBpeGVsQnVmZmVyRXh0ZW5kZWRQaXhlbHNCbwogU09GVF9MSU5L
X0NPTlNUQU5UX0ZPUl9TT1VSQ0UoV2ViQ29yZSwgQ29yZVZpZGVvLCBrQ1ZQaXhlbEJ1ZmZlck9w
ZW5HTENvbXBhdGliaWxpdHlLZXksIENGU3RyaW5nUmVmKQogI2VuZGlmCiAKK1NPRlRfTElOS19G
VU5DVElPTl9GT1JfU09VUkNFKFdlYkNvcmUsIENvcmVWaWRlbywgQ1ZQaXhlbEJ1ZmZlckNyZWF0
ZVdpdGhJT1N1cmZhY2UsIENWUmV0dXJuLCAoQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9yLCBJT1N1
cmZhY2VSZWYgc3VyZmFjZSwgQ0ZEaWN0aW9uYXJ5UmVmIHBpeGVsQnVmZmVyQXR0cmlidXRlcywg
Q1ZQaXhlbEJ1ZmZlclJlZiAqIHBpeGVsQnVmZmVyT3V0KSwgKGFsbG9jYXRvciwgc3VyZmFjZSwg
cGl4ZWxCdWZmZXJBdHRyaWJ1dGVzLCBwaXhlbEJ1ZmZlck91dCkpCisKICNlbmRpZiAvLyBIQVZF
KENPUkVfVklERU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9D
b3JlVmlkZW9Tb2Z0TGluay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvQ29yZVZp
ZGVvU29mdExpbmsuaAppbmRleCA5ZWViNDM0NjE4OTM4NDVhNjgyNDQ4OGI0MzhmNTk2OWFiMmM4
YjEyLi41Mjk1ZTU4Yzg0NzBmNTJmMmFkODQzYjE2N2ExNzk0NzcwOGQ1NGI4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9Db3JlVmlkZW9Tb2Z0TGluay5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL0NvcmVWaWRlb1NvZnRMaW5rLmgKQEAgLTE0
Nyw0ICsxNDcsNyBAQCBTT0ZUX0xJTktfQ09OU1RBTlRfRk9SX0hFQURFUihXZWJDb3JlLCBDb3Jl
VmlkZW8sIGtDVlBpeGVsQnVmZmVyT3BlbkdMQ29tcGF0aWJpbAogI2RlZmluZSBrQ1ZQaXhlbEJ1
ZmZlck9wZW5HTENvbXBhdGliaWxpdHlLZXkgZ2V0X0NvcmVWaWRlb19rQ1ZQaXhlbEJ1ZmZlck9w
ZW5HTENvbXBhdGliaWxpdHlLZXkoKQogI2VuZGlmCiAKK1NPRlRfTElOS19GVU5DVElPTl9GT1Jf
SEVBREVSKFdlYkNvcmUsIENvcmVWaWRlbywgQ1ZQaXhlbEJ1ZmZlckNyZWF0ZVdpdGhJT1N1cmZh
Y2UsIENWUmV0dXJuLCAoQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9yLCBJT1N1cmZhY2VSZWYgc3Vy
ZmFjZSwgQ0ZEaWN0aW9uYXJ5UmVmIHBpeGVsQnVmZmVyQXR0cmlidXRlcywgQ1ZQaXhlbEJ1ZmZl
clJlZiAqIHBpeGVsQnVmZmVyT3V0KSwgKGFsbG9jYXRvciwgc3VyZmFjZSwgcGl4ZWxCdWZmZXJB
dHRyaWJ1dGVzLCBwaXhlbEJ1ZmZlck91dCkpCisjZGVmaW5lIENWUGl4ZWxCdWZmZXJDcmVhdGVX
aXRoSU9TdXJmYWNlIHNvZnRMaW5rX0NvcmVWaWRlb19DVlBpeGVsQnVmZmVyQ3JlYXRlV2l0aElP
U3VyZmFjZQorCiAjZW5kaWYgLy8gSEFWRShDT1JFX1ZJREVPKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvVmlkZW9Ub29sYm94U29mdExpbmsuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvVmlkZW9Ub29sYm94U29mdExpbmsuY3BwCmluZGV4IDk4
N2ZiY2Y2MTk2NmQyNGNmMDVjYTA4NDY5OWQwNTgwYTJmMTExZGYuLmVhZjc4YjQ1ZDA1Mjg3YTc5
NmU2YTJhMDVjZDBlOGYwYTg5OTRkM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2NvY29hL1ZpZGVvVG9vbGJveFNvZnRMaW5rLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jb2NvYS9WaWRlb1Rvb2xib3hTb2Z0TGluay5jcHAKQEAgLTU5LDYgKzU5LDkgQEAg
U09GVF9MSU5LX0ZVTkNUSU9OX0ZPUl9TT1VSQ0UoV2ViQ29yZSwgVmlkZW9Ub29sYm94LCBWVFBp
eGVsVHJhbnNmZXJTZXNzaW9uVHJhbnMKIFNPRlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNFKFdl
YkNvcmUsIFZpZGVvVG9vbGJveCwgVlRTZXNzaW9uU2V0UHJvcGVydHksIE9TU3RhdHVzLCAoVlRT
ZXNzaW9uUmVmIHNlc3Npb24sIENGU3RyaW5nUmVmIHByb3BlcnR5S2V5LCBDRlR5cGVSZWYgcHJv
cGVydHlWYWx1ZSksIChzZXNzaW9uLCBwcm9wZXJ0eUtleSwgcHJvcGVydHlWYWx1ZSkpCiBTT0ZU
X0xJTktfQ09OU1RBTlRfRk9SX1NPVVJDRShXZWJDb3JlLCBWaWRlb1Rvb2xib3gsIGtWVFBpeGVs
VHJhbnNmZXJQcm9wZXJ0eUtleV9TY2FsaW5nTW9kZSwgQ0ZTdHJpbmdSZWYpCiBTT0ZUX0xJTktf
Q09OU1RBTlRfRk9SX1NPVVJDRShXZWJDb3JlLCBWaWRlb1Rvb2xib3gsIGtWVFNjYWxpbmdNb2Rl
X1RyaW0sIENGU3RyaW5nUmVmKQorU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9TT1VSQ0UoV2ViQ29y
ZSwgVmlkZW9Ub29sYm94LCBrVlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXlfRW5hYmxlSGFyZHdh
cmVBY2NlbGVyYXRlZFRyYW5zZmVyLCBDRlN0cmluZ1JlZikKK1NPRlRfTElOS19DT05TVEFOVF9G
T1JfU09VUkNFKFdlYkNvcmUsIFZpZGVvVG9vbGJveCwga1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5
S2V5X0VuYWJsZUhpZ2hTcGVlZFRyYW5zZmVyLCBDRlN0cmluZ1JlZikKK1NPRlRfTElOS19DT05T
VEFOVF9GT1JfU09VUkNFKFdlYkNvcmUsIFZpZGVvVG9vbGJveCwga1ZUUGl4ZWxUcmFuc2ZlclBy
b3BlcnR5S2V5X1JlYWxUaW1lLCBDRlN0cmluZ1JlZikKIAogU09GVF9MSU5LX0NPTlNUQU5UX01B
WV9GQUlMX0ZPUl9TT1VSQ0UoV2ViQ29yZSwgVmlkZW9Ub29sYm94LCBrVlRIRVZDRGVjb2RlckNh
cGFiaWxpdHlfU3VwcG9ydGVkUHJvZmlsZXMsIENGU3RyaW5nUmVmKQogU09GVF9MSU5LX0NPTlNU
QU5UX01BWV9GQUlMX0ZPUl9TT1VSQ0UoV2ViQ29yZSwgVmlkZW9Ub29sYm94LCBrVlRIRVZDRGVj
b2RlckNhcGFiaWxpdHlfUGVyUHJvZmlsZVN1cHBvcnQsIENGU3RyaW5nUmVmKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvVmlkZW9Ub29sYm94U29mdExpbmsuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1ZpZGVvVG9vbGJveFNvZnRMaW5rLmgKaW5k
ZXggZjMxOWIxODhlZDE2MDU4MDk0NzYxMmViMzcyODZkZTIyMzI0ZTI1ZC4uMDcxYjcxMWVkMDRk
M2I4MTQ4MjI4OTJhMTUwZDdhZTVmZGU2Zjg1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY29jb2EvVmlkZW9Ub29sYm94U29mdExpbmsuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jb2NvYS9WaWRlb1Rvb2xib3hTb2Z0TGluay5oCkBAIC04NSw2ICs4NSwxMiBA
QCBTT0ZUX0xJTktfQ09OU1RBTlRfRk9SX0hFQURFUihXZWJDb3JlLCBWaWRlb1Rvb2xib3gsIGtW
VFBpeGVsVHJhbnNmZXJQcm9wZXJ0eUtleQogI2RlZmluZSBrVlRQaXhlbFRyYW5zZmVyUHJvcGVy
dHlLZXlfU2NhbGluZ01vZGUgZ2V0X1ZpZGVvVG9vbGJveF9rVlRQaXhlbFRyYW5zZmVyUHJvcGVy
dHlLZXlfU2NhbGluZ01vZGUoKQogU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9IRUFERVIoV2ViQ29y
ZSwgVmlkZW9Ub29sYm94LCBrVlRTY2FsaW5nTW9kZV9UcmltLCBDRlN0cmluZ1JlZikKICNkZWZp
bmUga1ZUU2NhbGluZ01vZGVfVHJpbSBnZXRfVmlkZW9Ub29sYm94X2tWVFNjYWxpbmdNb2RlX1Ry
aW0oKQorU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9IRUFERVIoV2ViQ29yZSwgVmlkZW9Ub29sYm94
LCBrVlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXlfRW5hYmxlSGFyZHdhcmVBY2NlbGVyYXRlZFRy
YW5zZmVyLCBDRlN0cmluZ1JlZikKKyNkZWZpbmUga1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5S2V5
X0VuYWJsZUhhcmR3YXJlQWNjZWxlcmF0ZWRUcmFuc2ZlciBnZXRfVmlkZW9Ub29sYm94X2tWVFBp
eGVsVHJhbnNmZXJQcm9wZXJ0eUtleV9FbmFibGVIYXJkd2FyZUFjY2VsZXJhdGVkVHJhbnNmZXIo
KQorU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9IRUFERVIoV2ViQ29yZSwgVmlkZW9Ub29sYm94LCBr
VlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXlfRW5hYmxlSGlnaFNwZWVkVHJhbnNmZXIsIENGU3Ry
aW5nUmVmKQorI2RlZmluZSBrVlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXlfRW5hYmxlSGlnaFNw
ZWVkVHJhbnNmZXIgZ2V0X1ZpZGVvVG9vbGJveF9rVlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXlf
RW5hYmxlSGlnaFNwZWVkVHJhbnNmZXIoKQorU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9IRUFERVIo
V2ViQ29yZSwgVmlkZW9Ub29sYm94LCBrVlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXlfUmVhbFRp
bWUsIENGU3RyaW5nUmVmKQorI2RlZmluZSBrVlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXlfUmVh
bFRpbWUgZ2V0X1ZpZGVvVG9vbGJveF9rVlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXlfUmVhbFRp
bWUoKQogCiBTT0ZUX0xJTktfQ09OU1RBTlRfTUFZX0ZBSUxfRk9SX0hFQURFUihXZWJDb3JlLCBW
aWRlb1Rvb2xib3gsIGtWVEhFVkNEZWNvZGVyQ2FwYWJpbGl0eV9TdXBwb3J0ZWRQcm9maWxlcywg
Q0ZTdHJpbmdSZWYpCiAjZGVmaW5lIGtWVEhFVkNEZWNvZGVyQ2FwYWJpbGl0eV9TdXBwb3J0ZWRQ
cm9maWxlcyBnZXRfVmlkZW9Ub29sYm94X2tWVEhFVkNEZWNvZGVyQ2FwYWJpbGl0eV9TdXBwb3J0
ZWRQcm9maWxlcygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU2FtcGxlQVZGT2JqQy5o
CmluZGV4IGQ1YTgwNmRmZTMzZTk3YzBjMWYyOGQyMTEwZGY1ODhmOTU2ODI2YWMuLjA5MjM4ODNl
NWJjN2U0NDY0YjExNmI5MmJiZmQwOGE2ZTI2M2E3MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU2FtcGxlQVZGT2Jq
Qy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL01lZGlhU2FtcGxlQVZGT2JqQy5oCkBAIC0zMSwxMyArMzEsMTIgQEAKICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCisKIGNsYXNzIE1lZGlh
U2FtcGxlQVZGT2JqQyA6IHB1YmxpYyBNZWRpYVNhbXBsZSB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IFJlZjxNZWRpYVNhbXBsZUFWRk9iakM+IGNyZWF0ZShDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGUs
IGludCB0cmFja0lEKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IE1lZGlhU2FtcGxlQVZGT2JqQyhz
YW1wbGUsIHRyYWNrSUQpKTsgfQogICAgIHN0YXRpYyBSZWY8TWVkaWFTYW1wbGVBVkZPYmpDPiBj
cmVhdGUoQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlLCBBdG9taWNTdHJpbmcgdHJhY2tJRCkgeyBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBNZWRpYVNhbXBsZUFWRk9iakMoc2FtcGxlLCB0cmFja0lEKSk7
IH0KICAgICBzdGF0aWMgUmVmPE1lZGlhU2FtcGxlQVZGT2JqQz4gY3JlYXRlKENNU2FtcGxlQnVm
ZmVyUmVmIHNhbXBsZSwgVmlkZW9Sb3RhdGlvbiByb3RhdGlvbiA9IFZpZGVvUm90YXRpb246Ok5v
bmUsIGJvb2wgbWlycm9yZWQgPSBmYWxzZSkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBNZWRpYVNh
bXBsZUFWRk9iakMoc2FtcGxlLCByb3RhdGlvbiwgbWlycm9yZWQpKTsgfQotICAgIHN0YXRpYyBS
ZWZQdHI8TWVkaWFTYW1wbGVBVkZPYmpDPiBjcmVhdGVJbWFnZVNhbXBsZShSZWY8SlNDOjpVaW50
OENsYW1wZWRBcnJheT4mJiwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWln
aHQpOwogICAgIHN0YXRpYyBSZWZQdHI8TWVkaWFTYW1wbGVBVkZPYmpDPiBjcmVhdGVJbWFnZVNh
bXBsZShWZWN0b3I8dWludDhfdD4mJiwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9u
ZyBoZWlnaHQpOwogCiAgICAgUmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IGdldFJHQkFJ
bWFnZURhdGEoKSBjb25zdCBvdmVycmlkZTsKQEAgLTY1LDYgKzY0LDcgQEAgcHVibGljOgogCiAg
ICAgVmlkZW9Sb3RhdGlvbiB2aWRlb1JvdGF0aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
bV9yb3RhdGlvbjsgfQogICAgIGJvb2wgdmlkZW9NaXJyb3JlZCgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIG1fbWlycm9yZWQ7IH0KKyAgICB1aW50MzJfdCB2aWRlb1BpeGVsRm9ybWF0KCkgY29u
c3Q7CiAKICAgICBDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGVCdWZmZXIoKSBjb25zdCB7IHJldHVy
biBtX3NhbXBsZS5nZXQoKTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBs
ZUFWRk9iakMubW0KaW5kZXggYzNiY2E2MTA5MDU1NGY4MjhiODQ4MzlhZDQwNTQ5YTYyN2JmZTc0
MC4uNjdiYjRjNmRmZTMzMDQ5ZGJlMTkyMjhiNTBmN2NhODc2NzE0YzdlZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFT
YW1wbGVBVkZPYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL01lZGlhU2FtcGxlQVZGT2JqQy5tbQpAQCAtMTEzLDYgKzExMywxMiBA
QCBQbGF0Zm9ybVNhbXBsZSBNZWRpYVNhbXBsZUFWRk9iakM6OnBsYXRmb3JtU2FtcGxlKCkKICAg
ICByZXR1cm4gc2FtcGxlOwogfQogCit1aW50MzJfdCBNZWRpYVNhbXBsZUFWRk9iakM6OnZpZGVv
UGl4ZWxGb3JtYXQoKSBjb25zdAoreworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBzdGF0aWNfY2Fz
dDxDVlBpeGVsQnVmZmVyUmVmPihDTVNhbXBsZUJ1ZmZlckdldEltYWdlQnVmZmVyKG1fc2FtcGxl
LmdldCgpKSk7CisgICAgcmV0dXJuIENWUGl4ZWxCdWZmZXJHZXRQaXhlbEZvcm1hdFR5cGUocGl4
ZWxCdWZmZXIpOworfQorCiBzdGF0aWMgYm9vbCBDTVNhbXBsZUJ1ZmZlcklzUmFuZG9tQWNjZXNz
KENNU2FtcGxlQnVmZmVyUmVmIHNhbXBsZSkKIHsKICAgICBDRkFycmF5UmVmIGF0dGFjaG1lbnRz
ID0gQ01TYW1wbGVCdWZmZXJHZXRTYW1wbGVBdHRhY2htZW50c0FycmF5KHNhbXBsZSwgZmFsc2Up
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvSW1hZ2VU
cmFuc2ZlclNlc3Npb25WVC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3Yv
SW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhlMmJkNTc5OWE4ZjY3MTNmYzg4
Yjg2YjI2YjY1ZDJkYjYzYzJhZGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jdi9JbWFnZVRyYW5zZmVyU2Vzc2lvblZULmgKQEAgLTAsMCArMSw4
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKFZJREVPVE9PTEJPWCkK
KworI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJNZWRpYVNhbXBsZS5oIgorI2luY2x1
ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKwordHlwZWRlZiBzdHJ1Y3QgQ0dJbWFnZSAqQ0dJbWFnZVJl
ZjsKK3R5cGVkZWYgc3RydWN0IE9wYXF1ZVZUUGl4ZWxUcmFuc2ZlclNlc3Npb24qIFZUUGl4ZWxU
cmFuc2ZlclNlc3Npb25SZWY7Cit0eXBlZGVmIHN0cnVjdCBfX0NWQnVmZmVyICpDVlBpeGVsQnVm
ZmVyUmVmOwordHlwZWRlZiBzdHJ1Y3QgX19DVlBpeGVsQnVmZmVyUG9vbCAqQ1ZQaXhlbEJ1ZmZl
clBvb2xSZWY7Cit0eXBlZGVmIHN0cnVjdCBfX0lPU3VyZmFjZSAqSU9TdXJmYWNlUmVmOwordHlw
ZWRlZiBzdHJ1Y3Qgb3BhcXVlQ01TYW1wbGVCdWZmZXIgKkNNU2FtcGxlQnVmZmVyUmVmOworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlVHJhbnNmZXJTZXNzaW9uVlQgeworcHVi
bGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VUcmFuc2ZlclNlc3Npb25WVD4g
Y3JlYXRlKHVpbnQzMl90IHBpeGVsRm9ybWF0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZVRyYW5zZmVyU2Vzc2lvblZUPihuZXcgSW1hZ2VUcmFuc2ZlclNlc3Np
b25WVChwaXhlbEZvcm1hdCkpOworICAgIH0KKworICAgIFJlZlB0cjxNZWRpYVNhbXBsZT4gY29u
dmVydE1lZGlhU2FtcGxlKE1lZGlhU2FtcGxlJiwgY29uc3QgSW50U2l6ZSYpOworICAgIFJlZlB0
cjxNZWRpYVNhbXBsZT4gY3JlYXRlTWVkaWFTYW1wbGUoQ0dJbWFnZVJlZiwgY29uc3QgTWVkaWFU
aW1lJiwgY29uc3QgSW50U2l6ZSYsIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uID0gTWVkaWFT
YW1wbGU6OlZpZGVvUm90YXRpb246Ok5vbmUsIGJvb2wgbWlycm9yZWQgPSBmYWxzZSk7CisgICAg
UmVmUHRyPE1lZGlhU2FtcGxlPiBjcmVhdGVNZWRpYVNhbXBsZShDTVNhbXBsZUJ1ZmZlclJlZiwg
Y29uc3QgSW50U2l6ZSYsIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uID0gTWVkaWFTYW1wbGU6
OlZpZGVvUm90YXRpb246Ok5vbmUsIGJvb2wgbWlycm9yZWQgPSBmYWxzZSk7CisKKyNpZiBIQVZF
KElPU1VSRkFDRSkKKyAgICBSZWZQdHI8TWVkaWFTYW1wbGU+IGNyZWF0ZU1lZGlhU2FtcGxlKElP
U3VyZmFjZVJlZiwgY29uc3QgTWVkaWFUaW1lJiwgY29uc3QgSW50U2l6ZSYsIE1lZGlhU2FtcGxl
OjpWaWRlb1JvdGF0aW9uID0gTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246Ok5vbmUsIGJvb2wg
bWlycm9yZWQgPSBmYWxzZSk7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBXRUJDT1JFX0VYUE9S
VCBleHBsaWNpdCBJbWFnZVRyYW5zZmVyU2Vzc2lvblZUKHVpbnQzMl90IHBpeGVsRm9ybWF0KTsK
KworI2lmIEhBVkUoSU9TVVJGQUNFKQorICAgIENGRGljdGlvbmFyeVJlZiBpb1N1cmZhY2VQaXhl
bEJ1ZmZlckNyZWF0aW9uT3B0aW9ucyhJT1N1cmZhY2VSZWYpOworICAgIFJldGFpblB0cjxDTVNh
bXBsZUJ1ZmZlclJlZj4gY3JlYXRlQ01TYW1wbGVCdWZmZXIoSU9TdXJmYWNlUmVmLCBjb25zdCBN
ZWRpYVRpbWUmLCBjb25zdCBJbnRTaXplJik7CisgICAgUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJS
ZWY+IGNyZWF0ZVBpeGVsQnVmZmVyKElPU3VyZmFjZVJlZiwgY29uc3QgSW50U2l6ZSYpOworI2Vu
ZGlmCisKKyAgICBSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+IGNvbnZlcnRDTVNhbXBsZUJ1
ZmZlcihDTVNhbXBsZUJ1ZmZlclJlZiwgY29uc3QgSW50U2l6ZSYpOworICAgIFJldGFpblB0cjxD
TVNhbXBsZUJ1ZmZlclJlZj4gY3JlYXRlQ01TYW1wbGVCdWZmZXIoQ1ZQaXhlbEJ1ZmZlclJlZiwg
Y29uc3QgTWVkaWFUaW1lJiwgY29uc3QgSW50U2l6ZSYpOworICAgIFJldGFpblB0cjxDTVNhbXBs
ZUJ1ZmZlclJlZj4gY3JlYXRlQ01TYW1wbGVCdWZmZXIoQ0dJbWFnZVJlZiwgY29uc3QgTWVkaWFU
aW1lJiwgY29uc3QgSW50U2l6ZSYpOworCisgICAgUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJSZWY+
IGNvbnZlcnRQaXhlbEJ1ZmZlcihDVlBpeGVsQnVmZmVyUmVmLCBjb25zdCBJbnRTaXplJik7Cisg
ICAgUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJSZWY+IGNyZWF0ZVBpeGVsQnVmZmVyKENNU2FtcGxl
QnVmZmVyUmVmLCBjb25zdCBJbnRTaXplJik7CisgICAgUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJS
ZWY+IGNyZWF0ZVBpeGVsQnVmZmVyKENHSW1hZ2VSZWYsIGNvbnN0IEludFNpemUmKTsKKworICAg
IGJvb2wgc2V0U2l6ZShjb25zdCBJbnRTaXplJik7CisKKyAgICBSZXRhaW5QdHI8VlRQaXhlbFRy
YW5zZmVyU2Vzc2lvblJlZj4gbV90cmFuc2ZlclNlc3Npb247CisgICAgUmV0YWluUHRyPENWUGl4
ZWxCdWZmZXJQb29sUmVmPiBtX291dHB1dEJ1ZmZlclBvb2w7CisgICAgUmV0YWluUHRyPENGRGlj
dGlvbmFyeVJlZj4gbV9pb1N1cmZhY2VCdWZmZXJBdHRyaWJ1dGVzOworICAgIHVpbnQzMl90IG1f
cGl4ZWxGb3JtYXQ7CisgICAgSW50U2l6ZSBtX3NpemU7Cit9OworCit9CisKKyNlbmRpZiAvLyBV
U0UoVklERU9UT09MQk9YKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY3YvSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2N2L0ltYWdlVHJhbnNmZXJTZXNzaW9uVlQubW0KbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGE2
Y2RkOTI3NDBlYjQ3MDc2YWQ1YmZjYzMzOTBmZWIxOGU2MjBkOQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0ltYWdlVHJhbnNmZXJTZXNzaW9u
VlQubW0KQEAgLTAsMCArMSwzODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgi
CisjaW1wb3J0ICJJbWFnZVRyYW5zZmVyU2Vzc2lvblZULmgiCisKKyNpZiBVU0UoVklERU9UT09M
Qk9YKQorCisjaW1wb3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJNZWRpYVNhbXBsZUFWRk9iakMu
aCIKKyNpbXBvcnQgPENvcmVNZWRpYS9DTUZvcm1hdERlc2NyaXB0aW9uLmg+CisjaW1wb3J0IDxD
b3JlTWVkaWEvQ01TYW1wbGVCdWZmZXIuaD4KKyNpbXBvcnQgPHBhbC9jZi9Db3JlTWVkaWFTb2Z0
TGluay5oPgorCisjaWYgSEFWRShJT1NVUkZBQ0UpCisjaW5jbHVkZSA8cGFsL3NwaS9jb2NvYS9J
T1N1cmZhY2VTUEkuaD4KKyNlbmRpZgorCisjaW1wb3J0ICJDb3JlVmlkZW9Tb2Z0TGluay5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7Cit1c2luZyBuYW1lc3BhY2UgUEFMOworCitzdGF0aWMgaW5s
aW5lIENGU3RyaW5nUmVmIGN2UGl4ZWxGb3JtYXRPcGVuR0xLZXkoKQoreworI2lmIFBMQVRGT1JN
KElPUykgJiYgIVBMQVRGT1JNKElPU01BQykKKyAgICByZXR1cm4ga0NWUGl4ZWxGb3JtYXRPcGVu
R0xFU0NvbXBhdGliaWxpdHk7CisjZWxzZQorICAgIHJldHVybiBrQ1ZQaXhlbEJ1ZmZlck9wZW5H
TENvbXBhdGliaWxpdHlLZXk7CisjZW5kaWYKK30KKworSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6
SW1hZ2VUcmFuc2ZlclNlc3Npb25WVCh1aW50MzJfdCBwaXhlbEZvcm1hdCkKK3sKKyAgICBWVFBp
eGVsVHJhbnNmZXJTZXNzaW9uUmVmIHRyYW5zZmVyU2Vzc2lvbjsKKyAgICBWVFBpeGVsVHJhbnNm
ZXJTZXNzaW9uQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsICZ0cmFuc2ZlclNlc3Npb24pOwor
ICAgIEFTU0VSVCh0cmFuc2ZlclNlc3Npb24pOworICAgIG1fdHJhbnNmZXJTZXNzaW9uID0gYWRv
cHRDRih0cmFuc2ZlclNlc3Npb24pOworCisgICAgYXV0byBzdGF0dXMgPSBWVFNlc3Npb25TZXRQ
cm9wZXJ0eSh0cmFuc2ZlclNlc3Npb24sIGtWVFBpeGVsVHJhbnNmZXJQcm9wZXJ0eUtleV9TY2Fs
aW5nTW9kZSwga1ZUU2NhbGluZ01vZGVfVHJpbSk7CisgICAgaWYgKHN0YXR1cyAhPSBrQ1ZSZXR1
cm5TdWNjZXNzKQorICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIkltYWdlVHJhbnNmZXJTZXNz
aW9uVlQ6OkltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6IFZUU2Vzc2lvblNldFByb3BlcnR5KGtWVFBp
eGVsVHJhbnNmZXJQcm9wZXJ0eUtleV9TY2FsaW5nTW9kZSkgZmFpbGVkIHdpdGggZXJyb3IgJWQi
LCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOworCisgICAgc3RhdHVzID0gVlRTZXNzaW9uU2V0
UHJvcGVydHkodHJhbnNmZXJTZXNzaW9uLCBrVlRQaXhlbFRyYW5zZmVyUHJvcGVydHlLZXlfRW5h
YmxlSGlnaFNwZWVkVHJhbnNmZXIsIEAoWUVTKSk7CisgICAgaWYgKHN0YXR1cyAhPSBrQ1ZSZXR1
cm5TdWNjZXNzKQorICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIkltYWdlVHJhbnNmZXJTZXNz
aW9uVlQ6OkltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6IFZUU2Vzc2lvblNldFByb3BlcnR5KGtWVFBp
eGVsVHJhbnNmZXJQcm9wZXJ0eUtleV9FbmFibGVIaWdoU3BlZWRUcmFuc2ZlcikgZmFpbGVkIHdp
dGggZXJyb3IgJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOworCisgICAgc3RhdHVzID0g
VlRTZXNzaW9uU2V0UHJvcGVydHkodHJhbnNmZXJTZXNzaW9uLCBrVlRQaXhlbFRyYW5zZmVyUHJv
cGVydHlLZXlfUmVhbFRpbWUsIEAoWUVTKSk7CisgICAgaWYgKHN0YXR1cyAhPSBrQ1ZSZXR1cm5T
dWNjZXNzKQorICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIkltYWdlVHJhbnNmZXJTZXNzaW9u
VlQ6OkltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6IFZUU2Vzc2lvblNldFByb3BlcnR5KGtWVFBpeGVs
VHJhbnNmZXJQcm9wZXJ0eUtleV9SZWFsVGltZSkgZmFpbGVkIHdpdGggZXJyb3IgJWQiLCBzdGF0
aWNfY2FzdDxpbnQ+KHN0YXR1cykpOworCisjaWYgUExBVEZPUk0oSU9TKSAmJiAhUExBVEZPUk0o
SU9TTUFDKQorICAgIHN0YXR1cyA9IFZUU2Vzc2lvblNldFByb3BlcnR5KHRyYW5zZmVyU2Vzc2lv
biwga1ZUUGl4ZWxUcmFuc2ZlclByb3BlcnR5S2V5X0VuYWJsZUhhcmR3YXJlQWNjZWxlcmF0ZWRU
cmFuc2ZlciwgQChZRVMpKTsKKyAgICBpZiAoc3RhdHVzICE9IGtDVlJldHVyblN1Y2Nlc3MpCisg
ICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhLCAiSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6SW1hZ2VU
cmFuc2ZlclNlc3Npb25WVDogVlRTZXNzaW9uU2V0UHJvcGVydHkoa1ZUUGl4ZWxUcmFuc2ZlclBy
b3BlcnR5S2V5X0VuYWJsZUhhcmR3YXJlQWNjZWxlcmF0ZWRUcmFuc2ZlcikgZmFpbGVkIHdpdGgg
ZXJyb3IgJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOworI2VuZGlmCisKKyAgICBtX3Bp
eGVsRm9ybWF0ID0gcGl4ZWxGb3JtYXQ7Cit9CisKK2Jvb2wgSW1hZ2VUcmFuc2ZlclNlc3Npb25W
VDo6c2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIGlmIChtX3NpemUgPT0gc2l6
ZSAmJiBtX291dHB1dEJ1ZmZlclBvb2wpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgQ0ZE
aWN0aW9uYXJ5UmVmIHBpeGVsQnVmZmVyT3B0aW9ucyA9IChfX2JyaWRnZSBDRkRpY3Rpb25hcnlS
ZWYpIEB7CisgICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsQnVmZmVyV2lkdGhL
ZXkgOkAoc2l6ZS53aWR0aCgpKSwKKyAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4
ZWxCdWZmZXJIZWlnaHRLZXk6QChzaXplLmhlaWdodCgpKSwKKyAgICAgICAgKF9fYnJpZGdlIE5T
U3RyaW5nICopa0NWUGl4ZWxCdWZmZXJQaXhlbEZvcm1hdFR5cGVLZXk6QChtX3BpeGVsRm9ybWF0
KSwKKyAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopY3ZQaXhlbEZvcm1hdE9wZW5HTEtleSgp
IDogQChZRVMpLAorICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ1ZQaXhlbEJ1ZmZlcklP
U3VyZmFjZVByb3BlcnRpZXNLZXkgOiBAeyAvKmVtcHR5IGRpY3Rpb25hcnkqLyB9LAorICAgIH07
CisKKyAgICBDRkRpY3Rpb25hcnlSZWYgcGl4ZWxCdWZmZXJQb29sT3B0aW9ucyA9IChfX2JyaWRn
ZSBDRkRpY3Rpb25hcnlSZWYpIEB7CisgICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBp
eGVsQnVmZmVyUG9vbE1pbmltdW1CdWZmZXJDb3VudEtleSA6IEAoNikKKyAgICB9OworCisgICAg
Q1ZQaXhlbEJ1ZmZlclBvb2xSZWYgYnVmZmVyUG9vbDsKKyAgICBhdXRvIHN0YXR1cyA9IENWUGl4
ZWxCdWZmZXJQb29sQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIHBpeGVsQnVmZmVyUG9vbE9w
dGlvbnMsIHBpeGVsQnVmZmVyT3B0aW9ucywgJmJ1ZmZlclBvb2wpOworICAgIEFTU0VSVCghc3Rh
dHVzKTsKKyAgICBpZiAoc3RhdHVzICE9IGtDVlJldHVyblN1Y2Nlc3MpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIG1fb3V0cHV0QnVmZmVyUG9vbCA9IGFkb3B0Q0YoYnVmZmVyUG9vbCk7
CisgICAgbV9zaXplID0gc2l6ZTsKKyAgICBtX2lvU3VyZmFjZUJ1ZmZlckF0dHJpYnV0ZXMgPSBu
dWxscHRyOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK1JldGFpblB0cjxDVlBpeGVsQnVmZmVy
UmVmPiBJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjb252ZXJ0UGl4ZWxCdWZmZXIoQ1ZQaXhlbEJ1
ZmZlclJlZiBzb3VyY2VCdWZmZXIsIGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgaWYgKHNv
dXJjZUJ1ZmZlciAmJiBtX3NpemUgPT0gSW50U2l6ZShDVlBpeGVsQnVmZmVyR2V0V2lkdGgoc291
cmNlQnVmZmVyKSwgQ1ZQaXhlbEJ1ZmZlckdldEhlaWdodChzb3VyY2VCdWZmZXIpKSAmJiBtX3Bp
eGVsRm9ybWF0ID09IENWUGl4ZWxCdWZmZXJHZXRQaXhlbEZvcm1hdFR5cGUoc291cmNlQnVmZmVy
KSkKKyAgICAgICAgcmV0dXJuIHJldGFpblB0cihzb3VyY2VCdWZmZXIpOworCisgICAgaWYgKCFz
b3VyY2VCdWZmZXIgfHwgIXNldFNpemUoc2l6ZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgQ1ZQaXhlbEJ1ZmZlclJlZiBvdXRwdXRCdWZmZXIgPSBudWxscHRyOworICAgIGF1dG8g
c3RhdHVzID0gQ1ZQaXhlbEJ1ZmZlclBvb2xDcmVhdGVQaXhlbEJ1ZmZlcihrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCBtX291dHB1dEJ1ZmZlclBvb2wuZ2V0KCksICZvdXRwdXRCdWZmZXIpOworICAgIGlm
IChzdGF0dXMpIHsKKyAgICAgICAgUkVMRUFTRV9MT0coTWVkaWEsICJJbWFnZVRyYW5zZmVyU2Vz
c2lvblZUOjpjb252ZXJ0UGl4ZWxCdWZmZXIsIENWUGl4ZWxCdWZmZXJQb29sQ3JlYXRlUGl4ZWxC
dWZmZXIgZmFpbGVkIHdpdGggZXJyb3IgJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOwor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgYXV0byByZXN1bHQgPSBhZG9wdENG
KG91dHB1dEJ1ZmZlcik7CisKKyAgICBhdXRvIGVyciA9IFZUUGl4ZWxUcmFuc2ZlclNlc3Npb25U
cmFuc2ZlckltYWdlKG1fdHJhbnNmZXJTZXNzaW9uLmdldCgpLCBzb3VyY2VCdWZmZXIsIG91dHB1
dEJ1ZmZlcik7CisgICAgaWYgKGVycikgeworICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIklt
YWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNvbnZlcnRQaXhlbEJ1ZmZlciwgVlRQaXhlbFRyYW5zZmVy
U2Vzc2lvblRyYW5zZmVySW1hZ2UgZmFpbGVkIHdpdGggZXJyb3IgJWQiLCBzdGF0aWNfY2FzdDxp
bnQ+KGVycikpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gSW1hZ2VUcmFuc2ZlclNl
c3Npb25WVDo6Y3JlYXRlUGl4ZWxCdWZmZXIoQ01TYW1wbGVCdWZmZXJSZWYgc291cmNlQnVmZmVy
LCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIHJldHVybiBjb252ZXJ0UGl4ZWxCdWZmZXIo
Q01TYW1wbGVCdWZmZXJHZXRJbWFnZUJ1ZmZlcihzb3VyY2VCdWZmZXIpLCBzaXplKTsKK30KKwor
UmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjb252
ZXJ0Q01TYW1wbGVCdWZmZXIoQ01TYW1wbGVCdWZmZXJSZWYgc291cmNlQnVmZmVyLCBjb25zdCBJ
bnRTaXplJiBzaXplKQoreworICAgIGlmICghc291cmNlQnVmZmVyKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIGF1dG8gZGVzY3JpcHRpb24gPSBDTVNhbXBsZUJ1ZmZlckdldEZvcm1h
dERlc2NyaXB0aW9uKHNvdXJjZUJ1ZmZlcik7CisgICAgYXV0byBzb3VyY2VTaXplID0gRmxvYXRT
aXplKENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkdldFByZXNlbnRhdGlvbkRpbWVuc2lvbnMoZGVz
Y3JpcHRpb24sIHRydWUsIHRydWUpKTsKKyAgICBhdXRvIHBpeGVsQnVmZmVyID0gc3RhdGljX2Nh
c3Q8Q1ZQaXhlbEJ1ZmZlclJlZj4oQ01TYW1wbGVCdWZmZXJHZXRJbWFnZUJ1ZmZlcihzb3VyY2VC
dWZmZXIpKTsKKyAgICBpZiAoc2l6ZSA9PSByb3VuZGVkSW50U2l6ZShzb3VyY2VTaXplKSAmJiBt
X3BpeGVsRm9ybWF0ID09IENWUGl4ZWxCdWZmZXJHZXRQaXhlbEZvcm1hdFR5cGUocGl4ZWxCdWZm
ZXIpKQorICAgICAgICByZXR1cm4gcmV0YWluUHRyKHNvdXJjZUJ1ZmZlcik7CisKKyAgICBpZiAo
IXNldFNpemUoc2l6ZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBjb252
ZXJ0ZWRQaXhlbEJ1ZmZlciA9IGNyZWF0ZVBpeGVsQnVmZmVyKHNvdXJjZUJ1ZmZlciwgc2l6ZSk7
CisgICAgaWYgKCFjb252ZXJ0ZWRQaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBDTUl0ZW1Db3VudCBpdGVtQ291bnQgPSAwOworICAgIGF1dG8gc3RhdHVzID0gQ01T
YW1wbGVCdWZmZXJHZXRTYW1wbGVUaW1pbmdJbmZvQXJyYXkoc291cmNlQnVmZmVyLCAxLCBudWxs
cHRyLCAmaXRlbUNvdW50KTsKKyAgICBpZiAoc3RhdHVzICE9IG5vRXJyKSB7CisgICAgICAgIFJF
TEVBU0VfTE9HKE1lZGlhLCAiSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y29udmVydENNU2FtcGxl
QnVmZmVyOiBDTVNhbXBsZUJ1ZmZlckdldFNhbXBsZVRpbWluZ0luZm9BcnJheSBmYWlsZWQgd2l0
aCBlcnJvciBjb2RlOiAlZCIsIHN0YXRpY19jYXN0PGludD4oc3RhdHVzKSk7CisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIH0KKyAgICBWZWN0b3I8Q01TYW1wbGVUaW1pbmdJbmZvPiB0aW1p
bmdJbmZvQXJyYXk7CisgICAgQ01TYW1wbGVUaW1pbmdJbmZvKiB0aW1laW5nSW5mb1B0ciA9IG51
bGxwdHI7CisgICAgaWYgKGl0ZW1Db3VudCkgeworICAgICAgICB0aW1pbmdJbmZvQXJyYXkuZ3Jv
dyhpdGVtQ291bnQpOworICAgICAgICBzdGF0dXMgPSBDTVNhbXBsZUJ1ZmZlckdldFNhbXBsZVRp
bWluZ0luZm9BcnJheShzb3VyY2VCdWZmZXIsIGl0ZW1Db3VudCwgdGltaW5nSW5mb0FycmF5LmRh
dGEoKSwgbnVsbHB0cik7CisgICAgICAgIGlmIChzdGF0dXMgIT0gbm9FcnIpIHsKKyAgICAgICAg
ICAgIFJFTEVBU0VfTE9HKE1lZGlhLCAiSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y29udmVydENN
U2FtcGxlQnVmZmVyOiBDTVNhbXBsZUJ1ZmZlckdldFNhbXBsZVRpbWluZ0luZm9BcnJheSBmYWls
ZWQgd2l0aCBlcnJvciBjb2RlOiAlZCIsIHN0YXRpY19jYXN0PGludD4oc3RhdHVzKSk7CisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICB0aW1laW5nSW5mb1B0
ciA9IHRpbWluZ0luZm9BcnJheS5kYXRhKCk7CisgICAgfQorCisgICAgQ01WaWRlb0Zvcm1hdERl
c2NyaXB0aW9uUmVmIGZvcm1hdERlc2NyaXB0aW9uID0gbnVsbHB0cjsKKyAgICBzdGF0dXMgPSBD
TVZpZGVvRm9ybWF0RGVzY3JpcHRpb25DcmVhdGVGb3JJbWFnZUJ1ZmZlcihrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCBjb252ZXJ0ZWRQaXhlbEJ1ZmZlci5nZXQoKSwgJmZvcm1hdERlc2NyaXB0aW9uKTsK
KyAgICBpZiAoc3RhdHVzICE9IG5vRXJyKSB7CisgICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhLCAi
SW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y29udmVydENNU2FtcGxlQnVmZmVyOiBDTVZpZGVvRm9y
bWF0RGVzY3JpcHRpb25DcmVhdGVGb3JJbWFnZUJ1ZmZlciByZXR1cm5lZDogJWQiLCBzdGF0aWNf
Y2FzdDxpbnQ+KHN0YXR1cykpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAg
ICBDTVNhbXBsZUJ1ZmZlclJlZiByZXNpemVkU2FtcGxlQnVmZmVyOworICAgIHN0YXR1cyA9IENN
U2FtcGxlQnVmZmVyQ3JlYXRlUmVhZHlXaXRoSW1hZ2VCdWZmZXIoa0NGQWxsb2NhdG9yRGVmYXVs
dCwgY29udmVydGVkUGl4ZWxCdWZmZXIuZ2V0KCksIGZvcm1hdERlc2NyaXB0aW9uLCB0aW1laW5n
SW5mb1B0ciwgJnJlc2l6ZWRTYW1wbGVCdWZmZXIpOworICAgIENGUmVsZWFzZShmb3JtYXREZXNj
cmlwdGlvbik7CisgICAgaWYgKHN0YXR1cyAhPSBub0VycikgeworICAgICAgICBSRUxFQVNFX0xP
RyhNZWRpYSwgIkltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNvbnZlcnRDTVNhbXBsZUJ1ZmZlcjog
ZmFpbGVkIHRvIGNyZWF0ZSBDTVNhbXBsZUJ1ZmZlciB3aXRoIGVycm9yIGNvZGU6ICVkIiwgc3Rh
dGljX2Nhc3Q8aW50PihzdGF0dXMpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
CisgICAgcmV0dXJuIGFkb3B0Q0YocmVzaXplZFNhbXBsZUJ1ZmZlcik7Cit9CisKK1JldGFpblB0
cjxDVlBpeGVsQnVmZmVyUmVmPiBJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVhdGVQaXhlbEJ1
ZmZlcihDR0ltYWdlUmVmIGltYWdlLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIGlmICgh
aW1hZ2UgfHwgIXNldFNpemUoc2l6ZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
Q1ZQaXhlbEJ1ZmZlclJlZiByZ2JCdWZmZXI7CisgICAgYXV0byBpbWFnZVNpemUgPSBJbnRTaXpl
KENHSW1hZ2VHZXRXaWR0aChpbWFnZSksIENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpKTsKKyAgICBh
dXRvIHN0YXR1cyA9IENWUGl4ZWxCdWZmZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgaW1h
Z2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSwga0NWUGl4ZWxGb3JtYXRUeXBlXzMy
QVJHQiwgbnVsbHB0ciwgJnJnYkJ1ZmZlcik7CisgICAgaWYgKHN0YXR1cyAhPSBrQ1ZSZXR1cm5T
dWNjZXNzKSB7CisgICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhLCAiSW1hZ2VUcmFuc2ZlclNlc3Np
b25WVDo6Y3JlYXRlUGl4ZWxCdWZmZXI6IENWUGl4ZWxCdWZmZXJDcmVhdGUgZmFpbGVkIHdpdGgg
ZXJyb3IgY29kZTogJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOworICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBDVlBpeGVsQnVmZmVyTG9ja0Jhc2VBZGRyZXNzKHJn
YkJ1ZmZlciwgMCk7CisgICAgdm9pZCogZGF0YSA9IENWUGl4ZWxCdWZmZXJHZXRCYXNlQWRkcmVz
cyhyZ2JCdWZmZXIpOworICAgIGF1dG8gcmV0YWluZWRSR0JCdWZmZXIgPSBhZG9wdENGKHJnYkJ1
ZmZlcik7CisgICAgYXV0byBjb250ZXh0ID0gQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKGRhdGEsIGlt
YWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCksIDgsIENWUGl4ZWxCdWZmZXJHZXRC
eXRlc1BlclJvdyhyZ2JCdWZmZXIpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCAoQ0dCaXRtYXBJbmZv
KSBrQ0dJbWFnZUFscGhhTm9uZVNraXBGaXJzdCk7CisgICAgaWYgKCFjb250ZXh0KSB7CisgICAg
ICAgIFJFTEVBU0VfTE9HKE1lZGlhLCAiSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlUGl4
ZWxCdWZmZXI6IENHQml0bWFwQ29udGV4dENyZWF0ZSByZXR1cm5lZCBudWxscHRyIik7CisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGF1dG8gcmV0YWluZWRDb250ZXh0ID0g
YWRvcHRDRihjb250ZXh0KTsKKyAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwgQ0dSZWN0
TWFrZSgwLCAwLCBpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpKSwgaW1hZ2Up
OworICAgIENWUGl4ZWxCdWZmZXJVbmxvY2tCYXNlQWRkcmVzcyhyZ2JCdWZmZXIsIDApOworCisg
ICAgcmV0dXJuIGNvbnZlcnRQaXhlbEJ1ZmZlcihyZ2JCdWZmZXIsIHNpemUpOworfQorCitSZXRh
aW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+IEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNyZWF0ZUNN
U2FtcGxlQnVmZmVyKENWUGl4ZWxCdWZmZXJSZWYgc291cmNlQnVmZmVyLCBjb25zdCBNZWRpYVRp
bWUmIHNhbXBsZVRpbWUsIGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgaWYgKCFzb3VyY2VC
dWZmZXIgfHwgIXNldFNpemUoc2l6ZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
YXV0byBidWZmZXJTaXplID0gSW50U2l6ZShDVlBpeGVsQnVmZmVyR2V0V2lkdGgoc291cmNlQnVm
ZmVyKSwgQ1ZQaXhlbEJ1ZmZlckdldEhlaWdodChzb3VyY2VCdWZmZXIpKTsKKyAgICBSZXRhaW5Q
dHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gaW5wdXRCdWZmZXIgPSBzb3VyY2VCdWZmZXI7CisgICAgaWYg
KGJ1ZmZlclNpemUgIT0gbV9zaXplIHx8IG1fcGl4ZWxGb3JtYXQgIT0gQ1ZQaXhlbEJ1ZmZlckdl
dFBpeGVsRm9ybWF0VHlwZShzb3VyY2VCdWZmZXIpKSB7CisgICAgICAgIGlucHV0QnVmZmVyID0g
Y29udmVydFBpeGVsQnVmZmVyKHNvdXJjZUJ1ZmZlciwgbV9zaXplKTsKKyAgICAgICAgaWYgKCFp
bnB1dEJ1ZmZlcikKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIENN
VmlkZW9Gb3JtYXREZXNjcmlwdGlvblJlZiBmb3JtYXREZXNjcmlwdGlvbiA9IG51bGxwdHI7Cisg
ICAgYXV0byBzdGF0dXMgPSBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25DcmVhdGVGb3JJbWFnZUJ1
ZmZlcihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAoQ1ZJbWFnZUJ1ZmZlclJlZilpbnB1dEJ1ZmZlci5n
ZXQoKSwgJmZvcm1hdERlc2NyaXB0aW9uKTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIFJF
TEVBU0VfTE9HKE1lZGlhLCAiSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y29udmVydFBpeGVsQnVm
ZmVyOiBmYWlsZWQgdG8gaW5pdGlhbGl6ZSBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb24gd2l0aCBl
cnJvciBjb2RlOiAlZCIsIHN0YXRpY19jYXN0PGludD4oc3RhdHVzKSk7CisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KKworICAgIENNU2FtcGxlQnVmZmVyUmVmIHNhbXBsZUJ1ZmZlcjsK
KyAgICBhdXRvIGNtVGltZSA9IHRvQ01UaW1lKHNhbXBsZVRpbWUpOworICAgIENNU2FtcGxlVGlt
aW5nSW5mbyB0aW1pbmdJbmZvID0geyBrQ01UaW1lSW52YWxpZCwgY21UaW1lLCBjbVRpbWUgfTsK
KyAgICBzdGF0dXMgPSBDTVNhbXBsZUJ1ZmZlckNyZWF0ZVJlYWR5V2l0aEltYWdlQnVmZmVyKGtD
RkFsbG9jYXRvckRlZmF1bHQsIChDVkltYWdlQnVmZmVyUmVmKWlucHV0QnVmZmVyLmdldCgpLCBm
b3JtYXREZXNjcmlwdGlvbiwgJnRpbWluZ0luZm8sICZzYW1wbGVCdWZmZXIpOworICAgIENGUmVs
ZWFzZShmb3JtYXREZXNjcmlwdGlvbik7CisgICAgaWYgKHN0YXR1cykgeworICAgICAgICBSRUxF
QVNFX0xPRyhNZWRpYSwgIkltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNvbnZlcnRQaXhlbEJ1ZmZl
cjogZmFpbGVkIHRvIGluaXRpYWxpemUgQ01TYW1wbGVCdWZmZXIgd2l0aCBlcnJvciBjb2RlOiAl
ZCIsIHN0YXRpY19jYXN0PGludD4oc3RhdHVzKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIH0KKworICAgIHJldHVybiBhZG9wdENGKHNhbXBsZUJ1ZmZlcik7Cit9CisKK1JldGFpblB0
cjxDTVNhbXBsZUJ1ZmZlclJlZj4gSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlQ01TYW1w
bGVCdWZmZXIoQ0dJbWFnZVJlZiBpbWFnZSwgY29uc3QgTWVkaWFUaW1lJiBzYW1wbGVUaW1lLCBj
b25zdCBJbnRTaXplJiBzaXplKQoreworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBjcmVhdGVQaXhl
bEJ1ZmZlcihpbWFnZSwgc2l6ZSk7CisgICAgaWYgKCFwaXhlbEJ1ZmZlcikKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gY3JlYXRlQ01TYW1wbGVCdWZmZXIocGl4ZWxCdWZm
ZXIuZ2V0KCksIHNhbXBsZVRpbWUsIHNpemUpOworfQorCisjaWYgSEFWRShJT1NVUkZBQ0UpCisK
KyNpZiBQTEFURk9STShNQUMpCitzdGF0aWMgaW50MzJfdCByb3VuZFVwVG9NYWNyb2Jsb2NrTXVs
dGlwbGUoaW50MzJfdCBzaXplKQoreworICAgIHJldHVybiAoc2l6ZSArIDE1KSAmIH4xNTsKK30K
KyNlbmRpZgorCitDRkRpY3Rpb25hcnlSZWYgSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6aW9TdXJm
YWNlUGl4ZWxCdWZmZXJDcmVhdGlvbk9wdGlvbnMoSU9TdXJmYWNlUmVmIHN1cmZhY2UpCit7Cisg
ICAgaWYgKG1faW9TdXJmYWNlQnVmZmVyQXR0cmlidXRlcykKKyAgICAgICAgcmV0dXJuIG1faW9T
dXJmYWNlQnVmZmVyQXR0cmlidXRlcy5nZXQoKTsKKworICAgIG1faW9TdXJmYWNlQnVmZmVyQXR0
cmlidXRlcyA9IChfX2JyaWRnZSBDRkRpY3Rpb25hcnlSZWYpIEB7CisgICAgICAgIChfX2JyaWRn
ZSBOU1N0cmluZyAqKWN2UGl4ZWxGb3JtYXRPcGVuR0xLZXkoKSA6IEAoWUVTKSwKKyAgICB9Owor
CisjaWYgUExBVEZPUk0oTUFDKQorICAgIGF1dG8gZm9ybWF0ID0gSU9TdXJmYWNlR2V0UGl4ZWxG
b3JtYXQoc3VyZmFjZSk7CisgICAgYXV0byB3aWR0aCA9IElPU3VyZmFjZUdldFdpZHRoKHN1cmZh
Y2UpOworICAgIGF1dG8gaGVpZ2h0ID0gSU9TdXJmYWNlR2V0SGVpZ2h0KHN1cmZhY2UpOworICAg
IGF1dG8gZXh0ZW5kZWRSaWdodCA9IHJvdW5kVXBUb01hY3JvYmxvY2tNdWx0aXBsZSh3aWR0aCkg
LSB3aWR0aDsKKyAgICBhdXRvIGV4dGVuZGVkQm90dG9tID0gcm91bmRVcFRvTWFjcm9ibG9ja011
bHRpcGxlKGhlaWdodCkgLSBoZWlnaHQ7CisKKyAgICBpZiAoKGZvcm1hdCA9PSBrQ1ZQaXhlbEZv
cm1hdFR5cGVfNDIwWXBDYkNyOEJpUGxhbmFyVmlkZW9SYW5nZSB8fCBmb3JtYXQgPT0ga0NWUGl4
ZWxGb3JtYXRUeXBlXzQyMFlwQ2JDcjhCaVBsYW5hckZ1bGxSYW5nZSkKKyAgICAgICAgJiYgKElP
U3VyZmFjZUdldEJ5dGVzUGVyUm93T2ZQbGFuZShzdXJmYWNlLCAwKSA+PSB3aWR0aCArIGV4dGVu
ZGVkUmlnaHQpCisgICAgICAgICYmIChJT1N1cmZhY2VHZXRCeXRlc1BlclJvd09mUGxhbmUoc3Vy
ZmFjZSwgMSkgPj0gd2lkdGggKyBleHRlbmRlZFJpZ2h0KQorICAgICAgICAmJiAoSU9TdXJmYWNl
R2V0QWxsb2NTaXplKHN1cmZhY2UpID49IChoZWlnaHQgKyBleHRlbmRlZEJvdHRvbSkgKiBJT1N1
cmZhY2VHZXRCeXRlc1BlclJvd09mUGxhbmUoc3VyZmFjZSwgMCkgKiAzIC8gMikpIHsKKyAgICAg
ICAgICAgIG1faW9TdXJmYWNlQnVmZmVyQXR0cmlidXRlcyA9IChfX2JyaWRnZSBDRkRpY3Rpb25h
cnlSZWYpIEB7CisgICAgICAgICAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxC
dWZmZXJPcGVuR0xDb21wYXRpYmlsaXR5S2V5IDogQChZRVMpLAorICAgICAgICAgICAgICAgIChf
X2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsQnVmZmVyRXh0ZW5kZWRQaXhlbHNSaWdodEtleSA6
IEAoZXh0ZW5kZWRSaWdodCksCisgICAgICAgICAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICop
a0NWUGl4ZWxCdWZmZXJFeHRlbmRlZFBpeGVsc0JvdHRvbUtleSA6IEAoZXh0ZW5kZWRCb3R0b20p
CisgICAgICAgICAgICB9OworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHN1cmZhY2Up
OworI2VuZGlmCisKKyAgICByZXR1cm4gbV9pb1N1cmZhY2VCdWZmZXJBdHRyaWJ1dGVzLmdldCgp
OworfQorCitSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gSW1hZ2VUcmFuc2ZlclNlc3Npb25W
VDo6Y3JlYXRlUGl4ZWxCdWZmZXIoSU9TdXJmYWNlUmVmIHN1cmZhY2UsIGNvbnN0IEludFNpemUm
IHNpemUpCit7CisgICAgaWYgKCFzdXJmYWNlIHx8ICFzZXRTaXplKHNpemUpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIENWUGl4ZWxCdWZmZXJSZWYgcGl4ZWxCdWZmZXI7CisgICAg
YXV0byBzdGF0dXMgPSBDVlBpeGVsQnVmZmVyQ3JlYXRlV2l0aElPU3VyZmFjZShrQ0ZBbGxvY2F0
b3JEZWZhdWx0LCBzdXJmYWNlLCBpb1N1cmZhY2VQaXhlbEJ1ZmZlckNyZWF0aW9uT3B0aW9ucyhz
dXJmYWNlKSwgJnBpeGVsQnVmZmVyKTsKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIFJFTEVB
U0VfTE9HKE1lZGlhLCAiQ1ZQaXhlbEJ1ZmZlckNyZWF0ZVdpdGhJT1N1cmZhY2UgZmFpbGVkIHdp
dGggZXJyb3IgY29kZTogJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBhdXRvIHJldGFpbmVkQnVmZmVyID0gYWRvcHRD
RihwaXhlbEJ1ZmZlcik7CisgICAgaWYgKG1fc2l6ZSA9PSBJbnRTaXplKENWUGl4ZWxCdWZmZXJH
ZXRXaWR0aChwaXhlbEJ1ZmZlciksIENWUGl4ZWxCdWZmZXJHZXRIZWlnaHQocGl4ZWxCdWZmZXIp
KSAmJiBtX3BpeGVsRm9ybWF0ID09IENWUGl4ZWxCdWZmZXJHZXRQaXhlbEZvcm1hdFR5cGUocGl4
ZWxCdWZmZXIpKQorICAgICAgICByZXR1cm4gcmV0YWluZWRCdWZmZXI7CisKKyAgICByZXR1cm4g
Y29udmVydFBpeGVsQnVmZmVyKHBpeGVsQnVmZmVyLCBzaXplKTsKK30KKworUmV0YWluUHRyPENN
U2FtcGxlQnVmZmVyUmVmPiBJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVhdGVDTVNhbXBsZUJ1
ZmZlcihJT1N1cmZhY2VSZWYgc3VyZmFjZSwgY29uc3QgTWVkaWFUaW1lJiBzYW1wbGVUaW1lLCBj
b25zdCBJbnRTaXplJiBzaXplKQoreworICAgIGF1dG8gcGl4ZWxCdWZmZXIgPSBjcmVhdGVQaXhl
bEJ1ZmZlcihzdXJmYWNlLCBzaXplKTsKKyAgICBpZiAoIXBpeGVsQnVmZmVyKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBjcmVhdGVDTVNhbXBsZUJ1ZmZlcihwaXhlbEJ1
ZmZlci5nZXQoKSwgc2FtcGxlVGltZSwgc2l6ZSk7Cit9CisjZW5kaWYKKworUmVmUHRyPE1lZGlh
U2FtcGxlPiBJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjb252ZXJ0TWVkaWFTYW1wbGUoTWVkaWFT
YW1wbGUmIHNhbXBsZSwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBBU1NFUlQoc2FtcGxl
LnBsYXRmb3JtU2FtcGxlKCkudHlwZSA9PSBQbGF0Zm9ybVNhbXBsZTo6Q01TYW1wbGVCdWZmZXJU
eXBlKTsKKworICAgIGlmIChzaXplID09IHJvdW5kZWRJbnRTaXplKHNhbXBsZS5wcmVzZW50YXRp
b25TaXplKCkpKQorICAgICAgICByZXR1cm4gJnNhbXBsZTsKKworICAgIGF1dG8gcmVzaXplZEJ1
ZmZlciA9IGNvbnZlcnRDTVNhbXBsZUJ1ZmZlcihzYW1wbGUucGxhdGZvcm1TYW1wbGUoKS5zYW1w
bGUuY21TYW1wbGVCdWZmZXIsIHNpemUpOworICAgIGlmICghcmVzaXplZEJ1ZmZlcikKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVh
dGUocmVzaXplZEJ1ZmZlci5nZXQoKSwgc2FtcGxlLnZpZGVvUm90YXRpb24oKSwgc2FtcGxlLnZp
ZGVvTWlycm9yZWQoKSk7Cit9CisKKyNpZiBIQVZFKElPU1VSRkFDRSkKK1JlZlB0cjxNZWRpYVNh
bXBsZT4gSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlTWVkaWFTYW1wbGUoSU9TdXJmYWNl
UmVmIHN1cmZhY2UsIGNvbnN0IE1lZGlhVGltZSYgc2FtcGxlVGltZSwgY29uc3QgSW50U2l6ZSYg
c2l6ZSwgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb24gcm90YXRpb24sIGJvb2wgbWlycm9yZWQp
Cit7CisgICAgYXV0byBzYW1wbGVCdWZmZXIgPSBjcmVhdGVDTVNhbXBsZUJ1ZmZlcihzdXJmYWNl
LCBzYW1wbGVUaW1lLCBzaXplKTsKKyAgICBpZiAoIXNhbXBsZUJ1ZmZlcikKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVhdGUoc2Ft
cGxlQnVmZmVyLmdldCgpLCByb3RhdGlvbiwgbWlycm9yZWQpOworfQorI2VuZGlmCisKK1JlZlB0
cjxNZWRpYVNhbXBsZT4gSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y3JlYXRlTWVkaWFTYW1wbGUo
Q0dJbWFnZVJlZiBpbWFnZSwgY29uc3QgTWVkaWFUaW1lJiBzYW1wbGVUaW1lLCBjb25zdCBJbnRT
aXplJiBzaXplLCBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbiByb3RhdGlvbiwgYm9vbCBtaXJy
b3JlZCkKK3sKKyAgICBhdXRvIHNhbXBsZUJ1ZmZlciA9IGNyZWF0ZUNNU2FtcGxlQnVmZmVyKGlt
YWdlLCBzYW1wbGVUaW1lLCBzaXplKTsKKyAgICBpZiAoIXNhbXBsZUJ1ZmZlcikKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVhdGUo
c2FtcGxlQnVmZmVyLmdldCgpLCByb3RhdGlvbiwgbWlycm9yZWQpOworfQorCitSZWZQdHI8TWVk
aWFTYW1wbGU+IEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ6OmNyZWF0ZU1lZGlhU2FtcGxlKENNU2Ft
cGxlQnVmZmVyUmVmIGJ1ZmZlciwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgTWVkaWFTYW1wbGU6OlZp
ZGVvUm90YXRpb24gcm90YXRpb24sIGJvb2wgbWlycm9yZWQpCit7CisgICAgYXV0byBzYW1wbGVC
dWZmZXIgPSBjb252ZXJ0Q01TYW1wbGVCdWZmZXIoYnVmZmVyLCBzaXplKTsKKyAgICBpZiAoIXNh
bXBsZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gTWVkaWFT
YW1wbGVBVkZPYmpDOjpjcmVhdGUoc2FtcGxlQnVmZmVyLmdldCgpLCByb3RhdGlvbiwgbWlycm9y
ZWQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoVklERU9U
T09MQk9YKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3Yv
UGl4ZWxCdWZmZXJSZXNpemVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
di9QaXhlbEJ1ZmZlclJlc2l6ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Rj
ZDRhYjIyNDA1MGU0N2ZiNTczYzVhOTNlMzc1Zjg4MjkxNWY1ZC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jdi9QaXhlbEJ1ZmZlclJlc2l6ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFVTRShWSURFT1RPT0xCT1gpCi0K
LSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi10eXBl
ZGVmIHN0cnVjdCBPcGFxdWVWVFBpeGVsVHJhbnNmZXJTZXNzaW9uKiBWVFBpeGVsVHJhbnNmZXJT
ZXNzaW9uUmVmOwotdHlwZWRlZiBzdHJ1Y3QgX19DVkJ1ZmZlciAqQ1ZQaXhlbEJ1ZmZlclJlZjsK
LXR5cGVkZWYgc3RydWN0IF9fQ1ZQaXhlbEJ1ZmZlclBvb2wgKkNWUGl4ZWxCdWZmZXJQb29sUmVm
OwotdHlwZWRlZiBzdHJ1Y3Qgb3BhcXVlQ01TYW1wbGVCdWZmZXIgKkNNU2FtcGxlQnVmZmVyUmVm
OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFBpeGVsQnVmZmVyUmVzaXplciB7Ci1w
dWJsaWM6Ci0gICAgUGl4ZWxCdWZmZXJSZXNpemVyKEludFNpemUsIE9TVHlwZSk7Ci0KLSAgICBS
ZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gcmVzaXplKENWUGl4ZWxCdWZmZXJSZWYpOwotICAg
IFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4gcmVzaXplKENNU2FtcGxlQnVmZmVyUmVmKTsK
LSAgICBib29sIGNhblJlc2l6ZVRvKEludFNpemUgc2l6ZSkgeyByZXR1cm4gc2l6ZSA9PSBtX3Np
emU7IH0KLQotcHJpdmF0ZToKLSAgICBSZXRhaW5QdHI8VlRQaXhlbFRyYW5zZmVyU2Vzc2lvblJl
Zj4gbV90cmFuc2ZlclNlc3Npb247Ci0gICAgUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJQb29sUmVm
PiBtX2J1ZmZlclBvb2w7Ci0gICAgSW50U2l6ZSBtX3NpemU7Ci19OwotCi19Ci0KLSNlbmRpZiAv
LyBVU0UoVklERU9UT09MQk9YKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJSZXNpemVyLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJSZXNpemVyLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA2Yzc0MWEwY2YzNTIwMTI2MjlhMDI5MDE4ZmNjNTIyY2RiYmViZTg4Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2N2L1BpeGVsQnVmZmVyUmVzaXplci5tbQorKysgL2Rldi9udWxs
CkBAIC0xLDEzOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2lt
cG9ydCAiUGl4ZWxCdWZmZXJSZXNpemVyLmgiCi0KLSNpZiBVU0UoVklERU9UT09MQk9YKQotCi0j
aW1wb3J0ICJMb2dnaW5nLmgiCi0jaW1wb3J0IDx3dGYvU29mdExpbmtpbmcuaD4KLQotI2ltcG9y
dCAiQ29yZVZpZGVvU29mdExpbmsuaCIKLSNpbXBvcnQgIlZpZGVvVG9vbGJveFNvZnRMaW5rLmgi
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGl4ZWxCdWZmZXJSZXNpemVyOjpQaXhlbEJ1ZmZl
clJlc2l6ZXIoSW50U2l6ZSBzaXplLCBPU1R5cGUgdmlkZW9Gb3JtYXQpCi17Ci0gICAgVlRQaXhl
bFRyYW5zZmVyU2Vzc2lvblJlZiB0cmFuc2ZlclNlc3Npb247Ci0gICAgVlRQaXhlbFRyYW5zZmVy
U2Vzc2lvbkNyZWF0ZShOVUxMLCAmdHJhbnNmZXJTZXNzaW9uKTsKLSAgICBBU1NFUlQodHJhbnNm
ZXJTZXNzaW9uKTsKLSAgICBtX3RyYW5zZmVyU2Vzc2lvbiA9IGFkb3B0Q0YodHJhbnNmZXJTZXNz
aW9uKTsKLQotICAgIFZUU2Vzc2lvblNldFByb3BlcnR5KHRyYW5zZmVyU2Vzc2lvbiwga1ZUUGl4
ZWxUcmFuc2ZlclByb3BlcnR5S2V5X1NjYWxpbmdNb2RlLCBrVlRTY2FsaW5nTW9kZV9UcmltKTsK
LQotICAgIENGRGljdGlvbmFyeVJlZiBzb3VyY2VQaXhlbEJ1ZmZlck9wdGlvbnMgPSAoX19icmlk
Z2UgQ0ZEaWN0aW9uYXJ5UmVmKSBAewotICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ1ZQ
aXhlbEJ1ZmZlcldpZHRoS2V5IDpAKHNpemUud2lkdGgoKSksCi0gICAgICAgIChfX2JyaWRnZSBO
U1N0cmluZyAqKWtDVlBpeGVsQnVmZmVySGVpZ2h0S2V5OkAoc2l6ZS5oZWlnaHQoKSksCi0gICAg
ICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsQnVmZmVyUGl4ZWxGb3JtYXRUeXBlS2V5
OkAodmlkZW9Gb3JtYXQpLAotI2lmIFBMQVRGT1JNKElPUykgJiYgIVBMQVRGT1JNKElPU01BQykK
LSAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxGb3JtYXRPcGVuR0xFU0NvbXBh
dGliaWxpdHkgOiBAKFlFUyksCi0jZWxzZQotICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilr
Q1ZQaXhlbEJ1ZmZlck9wZW5HTENvbXBhdGliaWxpdHlLZXkgOiBAKFlFUyksCi0jZW5kaWYKLSAg
ICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxCdWZmZXJJT1N1cmZhY2VQcm9wZXJ0
aWVzS2V5IDogQHsgLyplbXB0eSBkaWN0aW9uYXJ5Ki8gfSwKLSAgICB9OwotICAgIENWUGl4ZWxC
dWZmZXJQb29sUmVmIGJ1ZmZlclBvb2w7Ci0gICAgYXV0byBzdGF0dXMgPSBDVlBpeGVsQnVmZmVy
UG9vbENyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBOVUxMLCBzb3VyY2VQaXhlbEJ1ZmZlck9w
dGlvbnMsICZidWZmZXJQb29sKTsKLSAgICBBU1NFUlQoIXN0YXR1cyk7Ci0gICAgaWYgKHN0YXR1
cyAhPSBrQ1ZSZXR1cm5TdWNjZXNzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2J1ZmZlclBv
b2wgPSBhZG9wdENGKGJ1ZmZlclBvb2wpOwotICAgIG1fc2l6ZSA9IHNpemU7Ci19Ci0KLVJldGFp
blB0cjxDVlBpeGVsQnVmZmVyUmVmPiBQaXhlbEJ1ZmZlclJlc2l6ZXI6OnJlc2l6ZShDVlBpeGVs
QnVmZmVyUmVmIGlucHV0QnVmZmVyKQotewotICAgIEFTU0VSVChtX2J1ZmZlclBvb2wgJiYgIW1f
c2l6ZS5pc0VtcHR5KCkpOwotICAgIGlmICghbV9idWZmZXJQb29sIHx8IG1fc2l6ZS5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgUmV0YWluUHRyPENWUGl4ZWxCdWZm
ZXJSZWY+IHJlc3VsdDsKLSAgICBDVlBpeGVsQnVmZmVyUmVmIG91dHB1dEJ1ZmZlciA9IG51bGxw
dHI7Ci0KLSAgICBhdXRvIHN0YXR1cyA9IENWUGl4ZWxCdWZmZXJQb29sQ3JlYXRlUGl4ZWxCdWZm
ZXIoa0NGQWxsb2NhdG9yRGVmYXVsdCwgbV9idWZmZXJQb29sLmdldCgpLCAmb3V0cHV0QnVmZmVy
KTsKLSAgICBpZiAoc3RhdHVzKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhLCAiUGl4ZWxC
dWZmZXJSZXNpemVyOjpyZXNpemUsIENWUGl4ZWxCdWZmZXJQb29sQ3JlYXRlUGl4ZWxCdWZmZXIg
ZmFpbGVkIHdpdGggZXJyb3IgJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOwotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgcmVzdWx0ID0gYWRvcHRDRihvdXRwdXRCdWZm
ZXIpOwotCi0gICAgYXV0byBlcnIgPSBWVFBpeGVsVHJhbnNmZXJTZXNzaW9uVHJhbnNmZXJJbWFn
ZShtX3RyYW5zZmVyU2Vzc2lvbi5nZXQoKSwgaW5wdXRCdWZmZXIsIG91dHB1dEJ1ZmZlcik7Ci0g
ICAgaWYgKGVycikgewotICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIlBpeGVsQnVmZmVyUmVz
aXplcjo6cmVzaXplLCBWVFBpeGVsVHJhbnNmZXJTZXNzaW9uVHJhbnNmZXJJbWFnZSBmYWlsZWQg
d2l0aCBlcnJvciAlZCIsIHN0YXRpY19jYXN0PGludD4oZXJyKSk7Ci0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVJldGFpblB0cjxDTVNh
bXBsZUJ1ZmZlclJlZj4gUGl4ZWxCdWZmZXJSZXNpemVyOjpyZXNpemUoQ01TYW1wbGVCdWZmZXJS
ZWYgc2FtcGxlQnVmZmVyKQotewotICAgIGF1dG8gY29udmVydGVkUGl4ZWxCdWZmZXIgPSByZXNp
emUoQ01TYW1wbGVCdWZmZXJHZXRJbWFnZUJ1ZmZlcihzYW1wbGVCdWZmZXIpKTsKLSAgICBpZiAo
IWNvbnZlcnRlZFBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENN
VmlkZW9Gb3JtYXREZXNjcmlwdGlvblJlZiBmb3JtYXREZXNjcmlwdGlvbiA9IG51bGxwdHI7Ci0g
ICAgYXV0byBzdGF0dXMgPSBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25DcmVhdGVGb3JJbWFnZUJ1
ZmZlcihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBjb252ZXJ0ZWRQaXhlbEJ1ZmZlci5nZXQoKSwgJmZv
cm1hdERlc2NyaXB0aW9uKTsKLSAgICBpZiAoc3RhdHVzICE9IG5vRXJyKSB7Ci0gICAgICAgIFJF
TEVBU0VfTE9HKE1lZGlhLCAiUGl4ZWxCdWZmZXJSZXNpemVyOjpyZXNpemU6IGZhaWxlZCB0byBj
cmVhdGUgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uIHdpdGggZXJyb3IgY29kZTogJWQiLCBzdGF0
aWNfY2FzdDxpbnQ+KHN0YXR1cykpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0K
LSAgICBDTUl0ZW1Db3VudCBpdGVtQ291bnQgPSAwOwotICAgIHN0YXR1cyA9IENNU2FtcGxlQnVm
ZmVyR2V0U2FtcGxlVGltaW5nSW5mb0FycmF5KHNhbXBsZUJ1ZmZlciwgMSwgbnVsbHB0ciwgJml0
ZW1Db3VudCk7Ci0gICAgaWYgKHN0YXR1cyAhPSBub0VycikgewotICAgICAgICBSRUxFQVNFX0xP
RyhNZWRpYSwgIlBpeGVsQnVmZmVyUmVzaXplcjo6cmVzaXplOiBDTVNhbXBsZUJ1ZmZlckdldFNh
bXBsZVRpbWluZ0luZm9BcnJheSBmYWlsZWQgd2l0aCBlcnJvciBjb2RlOiAlZCIsIHN0YXRpY19j
YXN0PGludD4oc3RhdHVzKSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICBW
ZWN0b3I8Q01TYW1wbGVUaW1pbmdJbmZvPiB0aW1pbmdJbmZvQXJyYXk7Ci0gICAgQ01TYW1wbGVU
aW1pbmdJbmZvKiB0aW1laW5nSW5mb1B0ciA9IG51bGxwdHI7Ci0gICAgaWYgKGl0ZW1Db3VudCkg
ewotICAgICAgICB0aW1pbmdJbmZvQXJyYXkuZ3JvdyhpdGVtQ291bnQpOwotICAgICAgICBzdGF0
dXMgPSBDTVNhbXBsZUJ1ZmZlckdldFNhbXBsZVRpbWluZ0luZm9BcnJheShzYW1wbGVCdWZmZXIs
IGl0ZW1Db3VudCwgdGltaW5nSW5mb0FycmF5LmRhdGEoKSwgbnVsbHB0cik7Ci0gICAgICAgIGlm
IChzdGF0dXMgIT0gbm9FcnIpIHsKLSAgICAgICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhLCAiUGl4
ZWxCdWZmZXJSZXNpemVyOjpyZXNpemU6IENNU2FtcGxlQnVmZmVyR2V0U2FtcGxlVGltaW5nSW5m
b0FycmF5IGZhaWxlZCB3aXRoIGVycm9yIGNvZGU6ICVkIiwgc3RhdGljX2Nhc3Q8aW50PihzdGF0
dXMpKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0gICAgICAgIHRp
bWVpbmdJbmZvUHRyID0gdGltaW5nSW5mb0FycmF5LmRhdGEoKTsKLSAgICB9Ci0KLSAgICBDTVNh
bXBsZUJ1ZmZlclJlZiByZXNpemVkU2FtcGxlQnVmZmVyOwotICAgIHN0YXR1cyA9IENNU2FtcGxl
QnVmZmVyQ3JlYXRlUmVhZHlXaXRoSW1hZ2VCdWZmZXIoa0NGQWxsb2NhdG9yRGVmYXVsdCwgY29u
dmVydGVkUGl4ZWxCdWZmZXIuZ2V0KCksIGZvcm1hdERlc2NyaXB0aW9uLCB0aW1laW5nSW5mb1B0
ciwgJnJlc2l6ZWRTYW1wbGVCdWZmZXIpOwotICAgIENGUmVsZWFzZShmb3JtYXREZXNjcmlwdGlv
bik7Ci0gICAgaWYgKHN0YXR1cyAhPSBub0VycikgewotICAgICAgICBSRUxFQVNFX0xPRyhNZWRp
YSwgIlBpeGVsQnVmZmVyUmVzaXplcjo6cmVzaXplOiBmYWlsZWQgdG8gY3JlYXRlIENNU2FtcGxl
QnVmZmVyIHdpdGggZXJyb3IgY29kZTogJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXR1cykpOwot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICByZXR1cm4gYWRvcHRDRihyZXNp
emVkU2FtcGxlQnVmZmVyKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gVVNFKFZJREVPVE9PTEJPWCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAKaW5kZXggODA1MDQzMjdl
M2E2ODI0OTk1ODZmOGQzYzdiOGNlMDQ0ZGEzMDI4Ny4uZWM4YjViOWRkZTBjY2Q3NTE0MTRiZWE0
MjJjNWM2NWU5YjIzOGIxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAKQEAgLTEzMywxMCArMTMz
LDYgQEAgdm9pZCBSZWFsdGltZU1lZGlhU291cmNlOjpub3RpZnlNdXRlZE9ic2VydmVycygpIGNv
bnN0CiAgICAgfSk7CiB9CiAKLXZvaWQgUmVhbHRpbWVNZWRpYVNvdXJjZTo6c2V0dGluZ3NEaWRD
aGFuZ2UoT3B0aW9uU2V0PFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RmxhZz4pCi17Ci19
Ci0KIHZvaWQgUmVhbHRpbWVNZWRpYVNvdXJjZTo6bm90aWZ5U2V0dGluZ3NEaWRDaGFuZ2VPYnNl
cnZlcnMoT3B0aW9uU2V0PFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RmxhZz4gZmxhZ3Mp
CiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuaAppbmRleCA3
MTZjZTY5YzAyNDA3NmUyZGJmMGY2NjZiZjU4ZWMyOWQyNmQwNDY1Li5hOTNkZTMzOGM0MWE1NzFj
YjEwNWQxZjQzNmQ1MmM1ZTU5MzgwYjYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZS5oCkBAIC0yMDAsNyAr
MjAwLDcgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc3RhcnRQcm9k
dWNpbmdEYXRhKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHN0b3BQcm9kdWNpbmdEYXRhKCkgeyB9
Ci0gICAgdmlydHVhbCB2b2lkIHNldHRpbmdzRGlkQ2hhbmdlKE9wdGlvblNldDxSZWFsdGltZU1l
ZGlhU291cmNlU2V0dGluZ3M6OkZsYWc+KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0dGluZ3NEaWRD
aGFuZ2UoT3B0aW9uU2V0PFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RmxhZz4pIHsgfQog
CiAKICAgICB2b2lkIGZvckVhY2hPYnNlcnZlcihjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoT2Jz
ZXJ2ZXImKT4mKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL21hYy9BVlZpZGVvQ2FwdHVyZVNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJlU291cmNlLmgKaW5kZXggM2I0OWY0
NmZkYTNlYzMyNmM3Mzg1MTczZmE2Y2QyN2VjZjI5ZWY2Mi4uM2MxYjAyY2RhYmQ0YzU4MzJiMjQ0
MTc4MTA1ZDM2YmE0OTk5NzcxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJlU291cmNlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJlU291cmNlLmgKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00
OSw3ICs0OSw3IEBAIE9CSkNfQ0xBU1MgV2ViQ29yZUFWVmlkZW9DYXB0dXJlU291cmNlT2JzZXJ2
ZXI7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEFWVmlkZW9QcmVzZXQ7Ci1jbGFzcyBQ
aXhlbEJ1ZmZlclJlc2l6ZXI7CitjbGFzcyBJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOwogCiBjbGFz
cyBBVlZpZGVvQ2FwdHVyZVNvdXJjZSA6IHB1YmxpYyBSZWFsdGltZVZpZGVvU291cmNlLCBwcml2
YXRlIE9yaWVudGF0aW9uTm90aWZpZXI6Ok9ic2VydmVyIHsKIHB1YmxpYzoKQEAgLTEwMywxMyAr
MTAzLDE0IEBAIHByaXZhdGU6CiAKICAgICBib29sIHNldEZyYW1lUmF0ZUNvbnN0cmFpbnQoZG91
YmxlIG1pbkZyYW1lUmF0ZSwgZG91YmxlIG1heEZyYW1lUmF0ZSk7CiAKLSAgICB2b2lkIHByb2Nl
c3NOZXdGcmFtZShSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+LCBSZXRhaW5QdHI8QVZDYXB0
dXJlQ29ubmVjdGlvbj4pOworICAgIHZvaWQgcHJvY2Vzc05ld0ZyYW1lKFJlZjxNZWRpYVNhbXBs
ZT4mJik7CiAgICAgSW50U2l6ZSBzaXplRm9yUHJlc2V0KE5TU3RyaW5nKik7CiAKICAgICBBVkNh
cHR1cmVEZXZpY2UqIGRldmljZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGV2aWNlLmdldCgpOyB9CiAK
LSAgICBSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+IG1fYnVmZmVyOworICAgIFJlZlB0cjxN
ZWRpYVNhbXBsZT4gbV9idWZmZXI7CiAgICAgUmV0YWluUHRyPEFWQ2FwdHVyZVZpZGVvRGF0YU91
dHB1dD4gbV92aWRlb091dHB1dDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VUcmFuc2ZlclNl
c3Npb25WVD4gbV9pbWFnZVRyYW5zZmVyU2Vzc2lvbjsKIAogICAgIEludFNpemUgbV9yZXF1ZXN0
ZWRTaXplOwogICAgIGludDMyX3QgbV93aWR0aCB7IDAgfTsKQEAgLTExOCw3ICsxMTksNiBAQCBw
cml2YXRlOgogICAgIGludCBtX2RldmljZU9yaWVudGF0aW9uIHsgMCB9OwogICAgIE1lZGlhU2Ft
cGxlOjpWaWRlb1JvdGF0aW9uIG1fc2FtcGxlUm90YXRpb24geyBNZWRpYVNhbXBsZTo6VmlkZW9S
b3RhdGlvbjo6Tm9uZSB9OwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPFBpeGVsQnVmZmVyUmVzaXpl
cj4gbV9waXhlbEJ1ZmZlclJlc2l6ZXI7CiAgICAgc3RkOjpvcHRpb25hbDxSZWFsdGltZU1lZGlh
U291cmNlU2V0dGluZ3M+IG1fY3VycmVudFNldHRpbmdzOwogICAgIHN0ZDo6b3B0aW9uYWw8UmVh
bHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcz4gbV9jYXBhYmlsaXRpZXM7CiAgICAgUmV0YWlu
UHRyPFdlYkNvcmVBVlZpZGVvQ2FwdHVyZVNvdXJjZU9ic2VydmVyPiBtX29iamNPYnNlcnZlcjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVlZp
ZGVvQ2FwdHVyZVNvdXJjZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9BVlZpZGVvQ2FwdHVyZVNvdXJjZS5tbQppbmRleCA1MTk2MDgyMjJlNjYxNGFiMmVkY2Vj
MjNmMzUwMDkwNzU5ZDExOTE2Li45MTEwNzU2ZGFmOWQ2ZGEyMmQ5YWY1ZDhjMDk4NDRiOGI3YjAx
NGY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMv
QVZWaWRlb0NhcHR1cmVTb3VyY2UubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbWFjL0FWVmlkZW9DYXB0dXJlU291cmNlLm1tCkBAIC0yOSwxMSArMjksMTEgQEAK
ICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoQVZGT1VOREFUSU9OKQogCiAjaW1wb3J0
ICJJbWFnZUJ1ZmZlci5oIgorI2ltcG9ydCAiSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5oIgogI2lt
cG9ydCAiSW50UmVjdC5oIgogI2ltcG9ydCAiTG9nZ2luZy5oIgogI2ltcG9ydCAiTWVkaWFDb25z
dHJhaW50cy5oIgogI2ltcG9ydCAiTWVkaWFTYW1wbGVBVkZPYmpDLmgiCi0jaW1wb3J0ICJQaXhl
bEJ1ZmZlclJlc2l6ZXIuaCIKICNpbXBvcnQgIlBsYXRmb3JtTGF5ZXIuaCIKICNpbXBvcnQgIlJl
YWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJNYWMuaCIKICNpbXBvcnQgIlJlYWx0aW1lTWVkaWFTb3Vy
Y2VTZXR0aW5ncy5oIgpAQCAtMjk5LDcgKzI5OSw3IEBAIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3Vy
Y2VDYXBhYmlsaXRpZXMmIEFWVmlkZW9DYXB0dXJlU291cmNlOjpjYXBhYmlsaXRpZXMoKQogYm9v
bCBBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6cHJlZmVyc1ByZXNldChWaWRlb1ByZXNldCYgcHJlc2V0
KQogewogI2lmIFBMQVRGT1JNKElPUykKLSAgICByZXR1cm4gIVtzdGF0aWNfY2FzdDxBVlZpZGVv
UHJlc2V0Kj4oJnByZXNldCktPmZvcm1hdC5nZXQoKSBpc1ZpZGVvQmlubmVkXTsKKyAgICByZXR1
cm4gW3N0YXRpY19jYXN0PEFWVmlkZW9QcmVzZXQqPigmcHJlc2V0KS0+Zm9ybWF0LmdldCgpIGlz
VmlkZW9CaW5uZWRdOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocHJlc2V0KTsKICNlbmRpZgpA
QCAtNTE5LDI3ICs1MTksMjMgQEAgdm9pZCBBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6Y29tcHV0ZVNh
bXBsZVJvdGF0aW9uKCkKICAgICB9CiB9CiAKLXZvaWQgQVZWaWRlb0NhcHR1cmVTb3VyY2U6OnBy
b2Nlc3NOZXdGcmFtZShSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+IHNhbXBsZUJ1ZmZlciwg
UmV0YWluUHRyPEFWQ2FwdHVyZUNvbm5lY3Rpb25UeXBlPiBjb25uZWN0aW9uKQordm9pZCBBVlZp
ZGVvQ2FwdHVyZVNvdXJjZTo6cHJvY2Vzc05ld0ZyYW1lKFJlZjxNZWRpYVNhbXBsZT4mJiBzYW1w
bGUpCiB7CiAgICAgaWYgKCFpc1Byb2R1Y2luZ0RhdGEoKSB8fCBtdXRlZCgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBDTUZvcm1hdERlc2NyaXB0aW9uUmVmIGZvcm1hdERlc2NyaXB0aW9uID0g
Q01TYW1wbGVCdWZmZXJHZXRGb3JtYXREZXNjcmlwdGlvbihzYW1wbGVCdWZmZXIuZ2V0KCkpOwot
ICAgIGlmICghZm9ybWF0RGVzY3JpcHRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fYnVm
ZmVyID0gc2FtcGxlQnVmZmVyOwotICAgIENNVmlkZW9EaW1lbnNpb25zIGRpbWVuc2lvbnMgPSBD
TVZpZGVvRm9ybWF0RGVzY3JpcHRpb25HZXREaW1lbnNpb25zKGZvcm1hdERlc2NyaXB0aW9uKTsK
KyAgICBtX2J1ZmZlciA9ICZzYW1wbGUuZ2V0KCk7CisgICAgYXV0byBkaW1lbnNpb25zID0gcm91
bmRlZEludFNpemUoc2FtcGxlLT5wcmVzZW50YXRpb25TaXplKCkpOwogICAgIGlmIChtX3NhbXBs
ZVJvdGF0aW9uID09IE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpMZWZ0IHx8IG1fc2FtcGxl
Um90YXRpb24gPT0gTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246OlJpZ2h0KQotICAgICAgICBz
dGQ6OnN3YXAoZGltZW5zaW9ucy53aWR0aCwgZGltZW5zaW9ucy5oZWlnaHQpOworICAgICAgICBk
aW1lbnNpb25zID0geyBkaW1lbnNpb25zLmhlaWdodCgpLCBkaW1lbnNpb25zLndpZHRoKCkgfTsK
IAotICAgIGlmIChkaW1lbnNpb25zLndpZHRoICE9IG1fd2lkdGggfHwgZGltZW5zaW9ucy5oZWln
aHQgIT0gbV9oZWlnaHQpIHsKLSAgICAgICAgbV93aWR0aCA9IGRpbWVuc2lvbnMud2lkdGg7Ci0g
ICAgICAgIG1faGVpZ2h0ID0gZGltZW5zaW9ucy5oZWlnaHQ7Ci0gICAgICAgIHNldFNpemUoeyBk
aW1lbnNpb25zLndpZHRoLCBkaW1lbnNpb25zLmhlaWdodCB9KTsKKyAgICBpZiAoZGltZW5zaW9u
cy53aWR0aCgpICE9IG1fd2lkdGggfHwgZGltZW5zaW9ucy5oZWlnaHQoKSAhPSBtX2hlaWdodCkg
eworICAgICAgICBtX3dpZHRoID0gZGltZW5zaW9ucy53aWR0aCgpOworICAgICAgICBtX2hlaWdo
dCA9IGRpbWVuc2lvbnMuaGVpZ2h0KCk7CisgICAgICAgIHNldFNpemUoZGltZW5zaW9ucyk7CiAg
ICAgfQogCi0gICAgdmlkZW9TYW1wbGVBdmFpbGFibGUoTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVh
dGUobV9idWZmZXIuZ2V0KCksIG1fc2FtcGxlUm90YXRpb24sIFtjb25uZWN0aW9uIGlzVmlkZW9N
aXJyb3JlZF0pKTsKKyAgICBkaXNwYXRjaE1lZGlhU2FtcGxlVG9PYnNlcnZlcnMoV1RGTW92ZShz
YW1wbGUpKTsKIH0KIAogdm9pZCBBVlZpZGVvQ2FwdHVyZVNvdXJjZTo6Y2FwdHVyZU91dHB1dERp
ZE91dHB1dFNhbXBsZUJ1ZmZlckZyb21Db25uZWN0aW9uKEFWQ2FwdHVyZU91dHB1dFR5cGUqLCBD
TVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGVCdWZmZXIsIEFWQ2FwdHVyZUNvbm5lY3Rpb25UeXBlKiBj
YXB0dXJlQ29ubmVjdGlvbikKQEAgLTU0OSwyNCArNTQ1LDIyIEBAIHZvaWQgQVZWaWRlb0NhcHR1
cmVTb3VyY2U6OmNhcHR1cmVPdXRwdXREaWRPdXRwdXRTYW1wbGVCdWZmZXJGcm9tQ29ubmVjdGlv
bihBVkNhCiAgICAgICAgIHJldHVybjsKIAogICAgIENNVmlkZW9EaW1lbnNpb25zIGRpbWVuc2lv
bnMgPSBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25HZXREaW1lbnNpb25zKGZvcm1hdERlc2NyaXB0
aW9uKTsKKyAgICBSZWZQdHI8TWVkaWFTYW1wbGU+IHNhbXBsZTsKICAgICBpZiAoZGltZW5zaW9u
cy53aWR0aCAhPSBtX3JlcXVlc3RlZFNpemUud2lkdGgoKSB8fCBkaW1lbnNpb25zLmhlaWdodCAh
PSBtX3JlcXVlc3RlZFNpemUuaGVpZ2h0KCkpIHsKLSAgICAgICAgaWYgKG1fcGl4ZWxCdWZmZXJS
ZXNpemVyICYmICFtX3BpeGVsQnVmZmVyUmVzaXplci0+Y2FuUmVzaXplVG8obV9yZXF1ZXN0ZWRT
aXplKSkKLSAgICAgICAgICAgIG1fcGl4ZWxCdWZmZXJSZXNpemVyID0gbnVsbHB0cjsKIAotICAg
ICAgICBpZiAoIW1fcGl4ZWxCdWZmZXJSZXNpemVyKQotICAgICAgICAgICAgbV9waXhlbEJ1ZmZl
clJlc2l6ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFBpeGVsQnVmZmVyUmVzaXplcj4obV9yZXF1ZXN0
ZWRTaXplLCBhdlZpZGVvQ2FwdHVyZVBpeGVsQnVmZmVyRm9ybWF0KCkpOwotICAgIH0gZWxzZQot
ICAgICAgICBtX3BpeGVsQnVmZmVyUmVzaXplciA9IG51bGxwdHI7CisgICAgICAgIGlmICghbV9p
bWFnZVRyYW5zZmVyU2Vzc2lvbikKKyAgICAgICAgICAgIG1faW1hZ2VUcmFuc2ZlclNlc3Npb24g
PSBJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVhdGUoYXZWaWRlb0NhcHR1cmVQaXhlbEJ1ZmZl
ckZvcm1hdCgpKTsKIAotICAgIGF1dG8gYnVmZmVyID0gcmV0YWluUHRyKHNhbXBsZUJ1ZmZlcik7
Ci0gICAgaWYgKG1fcGl4ZWxCdWZmZXJSZXNpemVyKSB7Ci0gICAgICAgIGJ1ZmZlciA9IG1fcGl4
ZWxCdWZmZXJSZXNpemVyLT5yZXNpemUoc2FtcGxlQnVmZmVyKTsKLSAgICAgICAgaWYgKCFidWZm
ZXIpCisgICAgICAgIHNhbXBsZSA9IG1faW1hZ2VUcmFuc2ZlclNlc3Npb24tPmNyZWF0ZU1lZGlh
U2FtcGxlKHNhbXBsZUJ1ZmZlciwgbV9yZXF1ZXN0ZWRTaXplLCBtX3NhbXBsZVJvdGF0aW9uLCBb
Y2FwdHVyZUNvbm5lY3Rpb24gaXNWaWRlb01pcnJvcmVkXSk7CisgICAgICAgIGlmICghc2FtcGxl
KSB7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgc2FtcGxlID0gTWVkaWFT
YW1wbGVBVkZPYmpDOjpjcmVhdGUoc2FtcGxlQnVmZmVyLCBtX3NhbXBsZVJvdGF0aW9uLCBbY2Fw
dHVyZUNvbm5lY3Rpb24gaXNWaWRlb01pcnJvcmVkXSk7CiAKLSAgICBzY2hlZHVsZURlZmVycmVk
VGFzayhbdGhpcywgYnVmZmVyLCBjb25uZWN0aW9uID0gcmV0YWluUHRyKGNhcHR1cmVDb25uZWN0
aW9uKV0gewotICAgICAgICB0aGlzLT5wcm9jZXNzTmV3RnJhbWUoYnVmZmVyLCBjb25uZWN0aW9u
KTsKKyAgICBzY2hlZHVsZURlZmVycmVkVGFzayhbdGhpcywgc2FtcGxlID0gV1RGTW92ZShzYW1w
bGUpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgcHJvY2Vzc05ld0ZyYW1lKHNhbXBsZS5yZWxlYXNl
Tm9uTnVsbCgpKTsKICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vbWFjL0Rpc3BsYXlDYXB0dXJlU291cmNlQ29jb2EuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0Rpc3BsYXlDYXB0dXJlU291cmNl
Q29jb2EuY3BwCmluZGV4IDM3M2QwZjhhNTNhNWU2YTZlYTRjN2U0YmRmOTc2ZDhlZGQ5NTQ0MWUu
LjJlYmY2NTA0ODk3OGY3NjBlZTVjNGE2NjUxZTJjZDUxYmJlNDQ2MWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9EaXNwbGF5Q2FwdHVyZVNvdXJj
ZUNvY29hLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMv
RGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYS5jcHAKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRl
ICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVkaWFTYW1wbGVBVkZPYmpDLmgiCiAjaW5jbHVkZSAi
UGl4ZWxCdWZmZXJDb25mb3JtZXJDVi5oIgotI2luY2x1ZGUgIlBpeGVsQnVmZmVyUmVzaXplci5o
IgogI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2UuaCIKICNpbmNsdWRlICJSZWFsdGltZU1l
ZGlhU291cmNlQ2VudGVyLmgiCiAjaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdz
LmgiCkBAIC00Miw2ICs0MSw4IEBACiAjaW5jbHVkZSA8cGFsL2F2Zm91bmRhdGlvbi9NZWRpYVRp
bWVBVkZvdW5kYXRpb24uaD4KICNpbmNsdWRlIDxwYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuaD4K
ICNpbmNsdWRlIDxwYWwvc3BpL2NmL0NvcmVBdWRpb1NQSS5oPgorI2luY2x1ZGUgPHBhbC9zcGkv
Y2cvQ29yZUdyYXBoaWNzU1BJLmg+CisjaW5jbHVkZSA8cGFsL3NwaS9jb2NvYS9JT1N1cmZhY2VT
UEkuaD4KICNpbmNsdWRlIDxzeXMvdGltZS5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+
CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CkBAIC03Miw3ICs3Myw3IEBAIGNvbnN0
IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmIERpc3BsYXlDYXB0dXJlU291cmNlQ29j
b2E6OmNhcGFiaWxpdGllcygpCiAgICAgICAgIC8vIEZJWE1FOiB3aGF0IHNob3VsZCB0aGVzZSBi
ZT8KICAgICAgICAgY2FwYWJpbGl0aWVzLnNldFdpZHRoKENhcGFiaWxpdHlWYWx1ZU9yUmFuZ2Uo
NzIsIDI4ODApKTsKICAgICAgICAgY2FwYWJpbGl0aWVzLnNldEhlaWdodChDYXBhYmlsaXR5VmFs
dWVPclJhbmdlKDQ1LCAxODAwKSk7Ci0gICAgICAgIGNhcGFiaWxpdGllcy5zZXRGcmFtZVJhdGUo
Q2FwYWJpbGl0eVZhbHVlT3JSYW5nZSguMDEsIDYwLjApKTsKKyAgICAgICAgY2FwYWJpbGl0aWVz
LnNldEZyYW1lUmF0ZShDYXBhYmlsaXR5VmFsdWVPclJhbmdlKC4wMSwgMzAuMCkpOwogCiAgICAg
ICAgIG1fY2FwYWJpbGl0aWVzID0gV1RGTW92ZShjYXBhYmlsaXRpZXMpOwogICAgIH0KQEAgLTEx
MSwxMCArMTEyLDggQEAgdm9pZCBEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpzZXR0aW5nc0Rp
ZENoYW5nZShPcHRpb25TZXQ8UmVhbHRpbWVNZWRpYVNvdXJjZVMKICAgICBpZiAoc2V0dGluZ3Mu
Y29udGFpbnMoUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpGbGFnOjpGcmFtZVJhdGUpICYm
IG1fdGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAgbV90aW1lci5zdGFydFJlcGVhdGluZygxX3Mg
LyBmcmFtZVJhdGUoKSk7CiAKLSAgICBpZiAoc2V0dGluZ3MuY29udGFpbnNBbnkoeyBSZWFsdGlt
ZU1lZGlhU291cmNlU2V0dGluZ3M6OkZsYWc6OldpZHRoLCBSZWFsdGltZU1lZGlhU291cmNlU2V0
dGluZ3M6OkZsYWc6OkhlaWdodCB9KSkgeworICAgIGlmIChzZXR0aW5ncy5jb250YWluc0FueSh7
IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RmxhZzo6V2lkdGgsIFJlYWx0aW1lTWVkaWFT
b3VyY2VTZXR0aW5nczo6RmxhZzo6SGVpZ2h0IH0pKQogICAgICAgICBtX2J1ZmZlckF0dHJpYnV0
ZXMgPSBudWxscHRyOwotICAgICAgICBtX2xhc3RTYW1wbGVCdWZmZXIgPSBudWxscHRyOwotICAg
IH0KIAogICAgIG1fY3VycmVudFNldHRpbmdzID0geyB9OwogfQpAQCAtMTU5LDEzMiArMTU4LDUw
IEBAIHZvaWQgRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6c2V0SW50cmluc2ljU2l6ZShjb25z
dCBJbnRTaXplJiBzaXplKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2ludHJpbnNpY1NpemUg
PSBzaXplOwotICAgIG1fbGFzdFNhbXBsZUJ1ZmZlciA9IG51bGxwdHI7CisgICAgbm90aWZ5U2V0
dGluZ3NEaWRDaGFuZ2VPYnNlcnZlcnMoeyBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M6OkZs
YWc6OldpZHRoLCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M6OkZsYWc6OkhlaWdodCB9KTsK
KwogfQogCiB2b2lkIERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OmVtaXRGcmFtZSgpCiB7Cisj
aWYgUExBVEZPUk0oQ09DT0EpICYmICFQTEFURk9STShJT1NfRkFNSUxZX1NJTVVMQVRPUikKICAg
ICBpZiAobXV0ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBwaXhlbEJ1ZmZlciA9
IGdlbmVyYXRlRnJhbWUoKTsKLSAgICBpZiAoIXBpeGVsQnVmZmVyKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAobV9sYXN0U2FtcGxlQnVmZmVyICYmIG1fbGFzdEZ1bGxTaXplZFBpeGVsQnVm
ZmVyICYmIENGRXF1YWwobV9sYXN0RnVsbFNpemVkUGl4ZWxCdWZmZXIuZ2V0KCksIHBpeGVsQnVm
ZmVyLmdldCgpKSkgewotICAgICAgICB2aWRlb1NhbXBsZUF2YWlsYWJsZShNZWRpYVNhbXBsZUFW
Rk9iakM6OmNyZWF0ZShtX2xhc3RTYW1wbGVCdWZmZXIuZ2V0KCkpKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIG1fbGFzdEZ1bGxTaXplZFBpeGVsQnVmZmVyID0gcGl4ZWxCdWZmZXI7
Ci0KLSAgICBpbnQgd2lkdGggPSBXVEY6OnNhZmVDYXN0PGludD4oQ1ZQaXhlbEJ1ZmZlckdldFdp
ZHRoKHBpeGVsQnVmZmVyLmdldCgpKSk7Ci0gICAgaW50IGhlaWdodCA9IFdURjo6c2FmZUNhc3Q8
aW50PihDVlBpeGVsQnVmZmVyR2V0SGVpZ2h0KHBpeGVsQnVmZmVyLmdldCgpKSk7Ci0gICAgYXV0
byByZXF1ZXN0ZWRTaXplID0gZnJhbWVTaXplKCk7Ci0gICAgaWYgKHdpZHRoICE9IHJlcXVlc3Rl
ZFNpemUud2lkdGgoKSB8fCBoZWlnaHQgIT0gcmVxdWVzdGVkU2l6ZS5oZWlnaHQoKSkgewotICAg
ICAgICBpZiAobV9waXhlbEJ1ZmZlclJlc2l6ZXIgJiYgIW1fcGl4ZWxCdWZmZXJSZXNpemVyLT5j
YW5SZXNpemVUbyhyZXF1ZXN0ZWRTaXplKSkKLSAgICAgICAgICAgIG1fcGl4ZWxCdWZmZXJSZXNp
emVyID0gbnVsbHB0cjsKLQotICAgICAgICBpZiAoIW1fcGl4ZWxCdWZmZXJSZXNpemVyKQotICAg
ICAgICAgICAgbV9waXhlbEJ1ZmZlclJlc2l6ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFBpeGVsQnVm
ZmVyUmVzaXplcj4ocmVxdWVzdGVkU2l6ZSwgcHJlZmVyZWRQaXhlbEJ1ZmZlckZvcm1hdCgpKTsK
LQotICAgICAgICBwaXhlbEJ1ZmZlciA9IG1fcGl4ZWxCdWZmZXJSZXNpemVyLT5yZXNpemUocGl4
ZWxCdWZmZXIuZ2V0KCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fcGl4ZWxCdWZmZXJSZXNp
emVyID0gbnVsbHB0cjsKLQotICAgICAgICBhdXRvIHBpeGVsRm9ybWF0VHlwZSA9IENWUGl4ZWxC
dWZmZXJHZXRQaXhlbEZvcm1hdFR5cGUocGl4ZWxCdWZmZXIuZ2V0KCkpOwotICAgICAgICBpZiAo
cGl4ZWxGb3JtYXRUeXBlICE9IHByZWZlcmVkUGl4ZWxCdWZmZXJGb3JtYXQoKSkgewotICAgICAg
ICAgICAgaWYgKCFtX3BpeGVsQnVmZmVyQ29uZm9ybWVyKSB7Ci0gICAgICAgICAgICAgICAgYXV0
byBwcmVmZXJyZWRGcm9tYXQgPSBwcmVmZXJlZFBpeGVsQnVmZmVyRm9ybWF0KCk7Ci0gICAgICAg
ICAgICAgICAgYXV0byBjb25mb3JtZXJBdHRyaWJ1dGVzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlD
cmVhdGVNdXRhYmxlKG51bGxwdHIsIDAsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywg
JmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKLSAgICAgICAgICAgICAgICBhdXRv
IHZpZGVvVHlwZSA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUobnVsbHB0ciwgIGtDRk51bWJlclNJ
bnQzMlR5cGUsICAmcHJlZmVycmVkRnJvbWF0KSk7Ci0gICAgICAgICAgICAgICAgQ0ZEaWN0aW9u
YXJ5U2V0VmFsdWUoY29uZm9ybWVyQXR0cmlidXRlcy5nZXQoKSwga0NWUGl4ZWxCdWZmZXJQaXhl
bEZvcm1hdFR5cGVLZXksIHZpZGVvVHlwZS5nZXQoKSk7Ci0KLSAgICAgICAgICAgICAgICBtX3Bp
eGVsQnVmZmVyQ29uZm9ybWVyID0gc3RkOjptYWtlX3VuaXF1ZTxQaXhlbEJ1ZmZlckNvbmZvcm1l
ckNWPihjb25mb3JtZXJBdHRyaWJ1dGVzLmdldCgpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgcGl4ZWxCdWZmZXIgPSBtX3BpeGVsQnVmZmVyQ29uZm9ybWVyLT5jb252ZXJ0KHBpeGVs
QnVmZmVyLmdldCgpKTsKKyAgICBpZiAoIW1faW1hZ2VUcmFuc2ZlclNlc3Npb24pCisgICAgICAg
IG1faW1hZ2VUcmFuc2ZlclNlc3Npb24gPSBJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVhdGUo
cHJlZmVyZWRQaXhlbEJ1ZmZlckZvcm1hdCgpKTsKKworICAgIGF1dG8gc2FtcGxlVGltZSA9IE1l
ZGlhVGltZTo6Y3JlYXRlV2l0aERvdWJsZSgoZWxhcHNlZFRpbWUoKSArIDEwMF9tcykuc2Vjb25k
cygpKTsKKyAgICBhdXRvIGZyYW1lID0gZ2VuZXJhdGVGcmFtZSgpOworICAgIEludFNpemUgaW1h
Z2VTaXplOworICAgIFJlZlB0cjxNZWRpYVNhbXBsZT4gc2FtcGxlID0gV1RGOjpzd2l0Y2hPbihm
cmFtZSwKKyAgICAgICAgW3RoaXMsIHNhbXBsZVRpbWUsICZpbWFnZVNpemVdKFJldGFpblB0cjxJ
T1N1cmZhY2VSZWY+IHN1cmZhY2UpIC0+IFJlZlB0cjxNZWRpYVNhbXBsZT4geworICAgICAgICAg
ICAgaWYgKCFzdXJmYWNlKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
ICAgICAgICBpbWFnZVNpemUgPSBJbnRTaXplKElPU3VyZmFjZUdldFdpZHRoKHN1cmZhY2UuZ2V0
KCkpLCBJT1N1cmZhY2VHZXRIZWlnaHQoc3VyZmFjZS5nZXQoKSkpOworICAgICAgICAgICAgcmV0
dXJuIG1faW1hZ2VUcmFuc2ZlclNlc3Npb24tPmNyZWF0ZU1lZGlhU2FtcGxlKHN1cmZhY2UuZ2V0
KCksIHNhbXBsZVRpbWUsIGltYWdlU2l6ZSk7CisgICAgICAgIH0sCisgICAgICAgIFt0aGlzLCBz
YW1wbGVUaW1lLCAmaW1hZ2VTaXplXShSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UpIC0+IFJl
ZlB0cjxNZWRpYVNhbXBsZT4geworICAgICAgICAgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICAgICAgaW1hZ2VTaXplID0gSW50U2l6ZShD
R0ltYWdlR2V0V2lkdGgoaW1hZ2UuZ2V0KCkpLCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlLmdldCgp
KSk7CisgICAgICAgICAgICByZXR1cm4gbV9pbWFnZVRyYW5zZmVyU2Vzc2lvbi0+Y3JlYXRlTWVk
aWFTYW1wbGUoaW1hZ2UuZ2V0KCksIHNhbXBsZVRpbWUsIGltYWdlU2l6ZSk7CiAgICAgICAgIH0K
LSAgICB9Ci0gICAgaWYgKCFwaXhlbEJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOworICAgICk7CiAK
LSAgICBtX2xhc3RTYW1wbGVCdWZmZXIgPSBzYW1wbGVCdWZmZXJGcm9tUGl4ZWxCdWZmZXIocGl4
ZWxCdWZmZXIuZ2V0KCkpOwotICAgIGlmICghbV9sYXN0U2FtcGxlQnVmZmVyKQorICAgIGlmICgh
c2FtcGxlKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47
Ci0KLSAgICB2aWRlb1NhbXBsZUF2YWlsYWJsZShNZWRpYVNhbXBsZUFWRk9iakM6OmNyZWF0ZSht
X2xhc3RTYW1wbGVCdWZmZXIuZ2V0KCkpKTsKLX0KLQotUmV0YWluUHRyPENNU2FtcGxlQnVmZmVy
UmVmPiBEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hOjpzYW1wbGVCdWZmZXJGcm9tUGl4ZWxCdWZm
ZXIoQ1ZQaXhlbEJ1ZmZlclJlZiBwaXhlbEJ1ZmZlcikKLXsKLSAgICBpZiAoIXBpeGVsQnVmZmVy
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENNVGltZSBzYW1wbGVUaW1lID0gQ01U
aW1lTWFrZSgoKGVsYXBzZWRUaW1lKCkgKyAxMDBfbXMpICogMTAwKS5zZWNvbmRzKCksIDEwMCk7
Ci0gICAgQ01TYW1wbGVUaW1pbmdJbmZvIHRpbWluZ0luZm8gPSB7IGtDTVRpbWVJbnZhbGlkLCBz
YW1wbGVUaW1lLCBzYW1wbGVUaW1lIH07Ci0KLSAgICBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25S
ZWYgZm9ybWF0RGVzY3JpcHRpb24gPSBudWxscHRyOwotICAgIGF1dG8gc3RhdHVzID0gQ01WaWRl
b0Zvcm1hdERlc2NyaXB0aW9uQ3JlYXRlRm9ySW1hZ2VCdWZmZXIoa0NGQWxsb2NhdG9yRGVmYXVs
dCwgKENWSW1hZ2VCdWZmZXJSZWYpcGl4ZWxCdWZmZXIsICZmb3JtYXREZXNjcmlwdGlvbik7Ci0g
ICAgaWYgKHN0YXR1cykgewotICAgICAgICBSRUxFQVNFX0xPRyhNZWRpYSwgIkZhaWxlZCB0byBp
bml0aWFsaXplIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbiB3aXRoIGVycm9yIGNvZGU6ICVkIiwg
c3RhdGljX2Nhc3Q8aW50PihzdGF0dXMpKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
fQotCi0gICAgQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlQnVmZmVyOwotICAgIHN0YXR1cyA9IENN
U2FtcGxlQnVmZmVyQ3JlYXRlUmVhZHlXaXRoSW1hZ2VCdWZmZXIoa0NGQWxsb2NhdG9yRGVmYXVs
dCwgKENWSW1hZ2VCdWZmZXJSZWYpcGl4ZWxCdWZmZXIsIGZvcm1hdERlc2NyaXB0aW9uLCAmdGlt
aW5nSW5mbywgJnNhbXBsZUJ1ZmZlcik7Ci0gICAgQ0ZSZWxlYXNlKGZvcm1hdERlc2NyaXB0aW9u
KTsKLSAgICBpZiAoc3RhdHVzKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhLCAiRmFpbGVk
IHRvIGluaXRpYWxpemUgQ01TYW1wbGVCdWZmZXIgd2l0aCBlcnJvciBjb2RlOiAlZCIsIHN0YXRp
Y19jYXN0PGludD4oc3RhdHVzKSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQot
ICAgIHJldHVybiBhZG9wdENGKHNhbXBsZUJ1ZmZlcik7Ci19Ci0KLSNpZiBIQVZFKElPU1VSRkFD
RSkgJiYgUExBVEZPUk0oTUFDKQotc3RhdGljIGludDMyX3Qgcm91bmRVcFRvTWFjcm9ibG9ja011
bHRpcGxlKGludDMyX3Qgc2l6ZSkKLXsKLSAgICByZXR1cm4gKHNpemUgKyAxNSkgJiB+MTU7Ci19
Ci0KLVJldGFpblB0cjxDVlBpeGVsQnVmZmVyUmVmPiBEaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29h
OjpwaXhlbEJ1ZmZlckZyb21JT1N1cmZhY2UoSU9TdXJmYWNlUmVmIHN1cmZhY2UpCi17Ci0gICAg
aWYgKCFtX2J1ZmZlckF0dHJpYnV0ZXMpIHsKLSAgICAgICAgbV9idWZmZXJBdHRyaWJ1dGVzID0g
YWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKG51bGxwdHIsIDAsICZrQ0ZUeXBlRGlj
dGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsK
LQotICAgICAgICBhdXRvIGZvcm1hdCA9IElPU3VyZmFjZUdldFBpeGVsRm9ybWF0KHN1cmZhY2Up
OwotICAgICAgICBpZiAoZm9ybWF0ID09IGtDVlBpeGVsRm9ybWF0VHlwZV80MjBZcENiQ3I4QmlQ
bGFuYXJWaWRlb1JhbmdlIHx8IGZvcm1hdCA9PSBrQ1ZQaXhlbEZvcm1hdFR5cGVfNDIwWXBDYkNy
OEJpUGxhbmFyRnVsbFJhbmdlKSB7Ci0KLSAgICAgICAgICAgIC8vIElmIHRoZSB3aWR0aCB4IGhl
aWdodCBpc24ndCBhIG11bHRpcGxlIG9mIDE2IHggMTYgYW5kIHRoZSBzdXJmYWNlIGhhcyBleHRy
YSBtZW1vcnkgaW4gdGhlIHBsYW5lcywgc2V0IHBpeGVsIGJ1ZmZlciBhdHRyaWJ1dGVzIHRvIHJl
ZmxlY3QgaXQuCi0gICAgICAgICAgICBhdXRvIHdpZHRoID0gSU9TdXJmYWNlR2V0V2lkdGgoc3Vy
ZmFjZSk7Ci0gICAgICAgICAgICBhdXRvIGhlaWdodCA9IElPU3VyZmFjZUdldEhlaWdodChzdXJm
YWNlKTsKLSAgICAgICAgICAgIGludDMyX3QgZXh0ZW5kZWRSaWdodCA9IHJvdW5kVXBUb01hY3Jv
YmxvY2tNdWx0aXBsZSh3aWR0aCkgLSB3aWR0aDsKLSAgICAgICAgICAgIGludDMyX3QgZXh0ZW5k
ZWRCb3R0b20gPSByb3VuZFVwVG9NYWNyb2Jsb2NrTXVsdGlwbGUoaGVpZ2h0KSAtIGhlaWdodDsK
LQotICAgICAgICAgICAgaWYgKChJT1N1cmZhY2VHZXRCeXRlc1BlclJvd09mUGxhbmUoc3VyZmFj
ZSwgMCkgPj0gd2lkdGggKyBleHRlbmRlZFJpZ2h0KQotICAgICAgICAgICAgICAgICYmIChJT1N1
cmZhY2VHZXRCeXRlc1BlclJvd09mUGxhbmUoc3VyZmFjZSwgMSkgPj0gd2lkdGggKyBleHRlbmRl
ZFJpZ2h0KQotICAgICAgICAgICAgICAgICYmIChJT1N1cmZhY2VHZXRBbGxvY1NpemUoc3VyZmFj
ZSkgPj0gKGhlaWdodCArIGV4dGVuZGVkQm90dG9tKSAqIElPU3VyZmFjZUdldEJ5dGVzUGVyUm93
T2ZQbGFuZShzdXJmYWNlLCAwKSAqIDMgLyAyKSkgewotICAgICAgICAgICAgICAgIGF1dG8gY2ZJ
bnQgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKG51bGxwdHIsICBrQ0ZOdW1iZXJJbnRUeXBlLCAg
JmV4dGVuZGVkUmlnaHQpKTsKLSAgICAgICAgICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZSht
X2J1ZmZlckF0dHJpYnV0ZXMuZ2V0KCksIGtDVlBpeGVsQnVmZmVyRXh0ZW5kZWRQaXhlbHNSaWdo
dEtleSwgY2ZJbnQuZ2V0KCkpOwotICAgICAgICAgICAgICAgIGNmSW50ID0gYWRvcHRDRihDRk51
bWJlckNyZWF0ZShudWxscHRyLCAga0NGTnVtYmVySW50VHlwZSwgICZleHRlbmRlZEJvdHRvbSkp
OwotICAgICAgICAgICAgICAgIENGRGljdGlvbmFyeVNldFZhbHVlKG1fYnVmZmVyQXR0cmlidXRl
cy5nZXQoKSwga0NWUGl4ZWxCdWZmZXJFeHRlbmRlZFBpeGVsc0JvdHRvbUtleSwgY2ZJbnQuZ2V0
KCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0
VmFsdWUobV9idWZmZXJBdHRyaWJ1dGVzLmdldCgpLCBrQ1ZQaXhlbEJ1ZmZlck9wZW5HTENvbXBh
dGliaWxpdHlLZXksIGtDRkJvb2xlYW5UcnVlKTsKICAgICB9CiAKLSAgICBDVlBpeGVsQnVmZmVy
UmVmIHBpeGVsQnVmZmVyOwotICAgIGF1dG8gc3RhdHVzID0gQ1ZQaXhlbEJ1ZmZlckNyZWF0ZVdp
dGhJT1N1cmZhY2Uoa0NGQWxsb2NhdG9yRGVmYXVsdCwgc3VyZmFjZSwgbV9idWZmZXJBdHRyaWJ1
dGVzLmdldCgpLCAmcGl4ZWxCdWZmZXIpOwotICAgIGlmIChzdGF0dXMpIHsKLSAgICAgICAgUkVM
RUFTRV9MT0coTWVkaWEsICJDVlBpeGVsQnVmZmVyQ3JlYXRlV2l0aElPU3VyZmFjZSBmYWlsZWQg
d2l0aCBlcnJvciBjb2RlOiAlZCIsIHN0YXRpY19jYXN0PGludD4oc3RhdHVzKSk7Ci0gICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIH0KKyAgICBpZiAobV9pbnRyaW5zaWNTaXplICE9IGltYWdl
U2l6ZSkKKyAgICAgICAgc2V0SW50cmluc2ljU2l6ZShpbWFnZVNpemUpOwogCi0gICAgcmV0dXJu
IGFkb3B0Q0YocGl4ZWxCdWZmZXIpOwotfQorICAgIHZpZGVvU2FtcGxlQXZhaWxhYmxlKCpzYW1w
bGUuZ2V0KCkpOwogI2VuZGlmCit9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0Rpc3BsYXlDYXB0
dXJlU291cmNlQ29jb2EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21h
Yy9EaXNwbGF5Q2FwdHVyZVNvdXJjZUNvY29hLmgKaW5kZXggYmZlNDBiODYwNTgxZjFjZGI5MzFi
MzVjYmY0N2ZmMDcyYzNiYWFhNS4uOWMwOWVjOGQzMjE0MDI0ZDRlNmI2N2QyYmYwMjJmZGQwMzRm
MzVhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L0Rpc3BsYXlDYXB0dXJlU291cmNlQ29jb2EuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYS5oCkBAIC0yOCwxMiAr
MjgsMTQgQEAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogCiAjaW5jbHVkZSAiQ2FwdHVyZURl
dmljZS5oIgorI2luY2x1ZGUgIkltYWdlVHJhbnNmZXJTZXNzaW9uVlQuaCIKICNpbmNsdWRlICJS
ZWFsdGltZU1lZGlhU291cmNlLmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAordHlwZWRlZiBzdHJ1Y3QgQ0dJbWFnZSAqQ0dJbWFnZVJl
ZjsKIHR5cGVkZWYgc3RydWN0IF9fQ1ZCdWZmZXIgKkNWUGl4ZWxCdWZmZXJSZWY7CiB0eXBlZGVm
IHN0cnVjdCBfX0lPU3VyZmFjZSAqSU9TdXJmYWNlUmVmOwogCkBAIC00NCw4ICs0Niw4IEBAIGNs
YXNzIE1lZGlhVGltZTsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ2FwdHVyZURldmlj
ZUluZm87CitjbGFzcyBJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOwogY2xhc3MgUGl4ZWxCdWZmZXJD
b25mb3JtZXJDVjsKLWNsYXNzIFBpeGVsQnVmZmVyUmVzaXplcjsKIAogY2xhc3MgRGlzcGxheUNh
cHR1cmVTb3VyY2VDb2NvYSA6IHB1YmxpYyBSZWFsdGltZU1lZGlhU291cmNlIHsKIHB1YmxpYzoK
QEAgLTU0LDcgKzU2LDkgQEAgcHJvdGVjdGVkOgogICAgIERpc3BsYXlDYXB0dXJlU291cmNlQ29j
b2EoU3RyaW5nJiYgbmFtZSk7CiAgICAgdmlydHVhbCB+RGlzcGxheUNhcHR1cmVTb3VyY2VDb2Nv
YSgpOwogCi0gICAgdmlydHVhbCBSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gZ2VuZXJhdGVG
cmFtZSgpID0gMDsKKyAgICB1c2luZyBEaXNwbGF5RnJhbWVUeXBlID0gV1RGOjpWYXJpYW50PFJl
dGFpblB0cjxDR0ltYWdlUmVmPiwgUmV0YWluUHRyPElPU3VyZmFjZVJlZj4+OworICAgIHZpcnR1
YWwgRGlzcGxheUZyYW1lVHlwZSBnZW5lcmF0ZUZyYW1lKCkgPSAwOworCiAgICAgdmlydHVhbCBS
ZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M6OkRpc3BsYXlTdXJmYWNlVHlwZSBzdXJmYWNlVHlw
ZSgpIGNvbnN0ID0gMDsKIAogICAgIHZvaWQgc3RhcnRQcm9kdWNpbmdEYXRhKCkgb3ZlcnJpZGU7
CkBAIC02MiwxMSArNjYsNiBAQCBwcm90ZWN0ZWQ6CiAKICAgICBTZWNvbmRzIGVsYXBzZWRUaW1l
KCk7CiAKLSAgICBSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+IHNhbXBsZUJ1ZmZlckZyb21Q
aXhlbEJ1ZmZlcihDVlBpeGVsQnVmZmVyUmVmKTsKLSNpZiBIQVZFKElPU1VSRkFDRSkKLSAgICBS
ZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gcGl4ZWxCdWZmZXJGcm9tSU9TdXJmYWNlKElPU3Vy
ZmFjZVJlZik7Ci0jZW5kaWYKLQogICAgIHZvaWQgc2V0dGluZ3NEaWRDaGFuZ2UoT3B0aW9uU2V0
PFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RmxhZz4pIG92ZXJyaWRlOwogCiAgICAgY29u
c3QgSW50U2l6ZSYgaW50cmluc2ljU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW50cmluc2ljU2l6
ZTsgfQpAQCAtOTMsMTAgKzkyLDcgQEAgcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxl
RGljdGlvbmFyeVJlZj4gbV9idWZmZXJBdHRyaWJ1dGVzOwogICAgIFJ1bkxvb3A6OlRpbWVyPERp
c3BsYXlDYXB0dXJlU291cmNlQ29jb2E+IG1fdGltZXI7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
UGl4ZWxCdWZmZXJSZXNpemVyPiBtX3BpeGVsQnVmZmVyUmVzaXplcjsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8UGl4ZWxCdWZmZXJDb25mb3JtZXJDVj4gbV9waXhlbEJ1ZmZlckNvbmZvcm1lcjsKLSAg
ICBSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gbV9sYXN0RnVsbFNpemVkUGl4ZWxCdWZmZXI7
Ci0gICAgUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBtX2xhc3RTYW1wbGVCdWZmZXI7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ+IG1faW1hZ2VUcmFuc2Zl
clNlc3Npb247CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3Vy
Y2VNYWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVh
bHRpbWVWaWRlb1NvdXJjZU1hYy5oCmluZGV4IDljNzRkZGUxODMxZTQ3MWExMDc2MDFiMDNlNjY1
NDdjNzY5YTA4ZWEuLjg4NDNhZmFjYmUzZmU2ZTJkNzU2N2Y3NjA3NjFhNzcxMGI5N2Q1MTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVh
bHRpbWVWaWRlb1NvdXJjZU1hYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5oCkBAIC00Myw3ICs0Myw3IEBA
IHR5cGVkZWYgc3RydWN0IF9fQ1ZQaXhlbEJ1ZmZlclBvb2wgKkNWUGl4ZWxCdWZmZXJQb29sUmVm
OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFBpeGVsQnVmZmVyUmVzaXplcjsKK2Ns
YXNzIEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ7CiAKIGNsYXNzIE1vY2tSZWFsdGltZVZpZGVvU291
cmNlTWFjIGZpbmFsIDogcHVibGljIE1vY2tSZWFsdGltZVZpZGVvU291cmNlLCBwcml2YXRlIE9y
aWVudGF0aW9uTm90aWZpZXI6Ok9ic2VydmVyIHsKIHB1YmxpYzoKQEAgLTUzLDIyICs1MywxNSBA
QCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZTsKICAg
ICBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYyhTdHJpbmcmJiBkZXZpY2VJRCwgU3RyaW5nJiYg
bmFtZSwgU3RyaW5nJiYgaGFzaFNhbHQpOwogCi0gICAgUmV0YWluUHRyPENNU2FtcGxlQnVmZmVy
UmVmPiBDTVNhbXBsZUJ1ZmZlckZyb21QaXhlbEJ1ZmZlcihDVlBpeGVsQnVmZmVyUmVmKTsKLSAg
ICBSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gcGl4ZWxCdWZmZXJGcm9tQ0dJbWFnZShDR0lt
YWdlUmVmKSBjb25zdDsKLQogICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25z
dDsKICAgICB2b2lkIHVwZGF0ZVNhbXBsZUJ1ZmZlcigpIGZpbmFsOwotICAgIHZvaWQgc2V0dGlu
Z3NEaWRDaGFuZ2UoT3B0aW9uU2V0PFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RmxhZz4p
IGZpbmFsOwogICAgIGJvb2wgY2FuUmVzaXplVmlkZW9GcmFtZXMoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiB0cnVlOyB9Ci0gICAgdm9pZCBzZXRTaXplQW5kRnJhbWVSYXRlV2l0aFByZXNldChJbnRT
aXplLCBkb3VibGUsIFJlZlB0cjxWaWRlb1ByZXNldD4pIGZpbmFsOwogCiAgICAgdm9pZCBvcmll
bnRhdGlvbkNoYW5nZWQoaW50IG9yaWVudGF0aW9uKSBmaW5hbDsKICAgICB2b2lkIG1vbml0b3JP
cmllbnRhdGlvbihPcmllbnRhdGlvbk5vdGlmaWVyJikgZmluYWw7CiAKLSAgICBtdXRhYmxlIFJl
dGFpblB0cjxDVlBpeGVsQnVmZmVyUG9vbFJlZj4gbV9idWZmZXJQb29sOwogICAgIE1lZGlhU2Ft
cGxlOjpWaWRlb1JvdGF0aW9uIG1fZGV2aWNlT3JpZW50YXRpb24geyBNZWRpYVNhbXBsZTo6Vmlk
ZW9Sb3RhdGlvbjo6Tm9uZSB9OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxQaXhlbEJ1ZmZlckNvbmZv
cm1lckNWPiBtX3BpeGVsQnVmZmVyQ29uZm9ybWVyOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxQaXhl
bEJ1ZmZlclJlc2l6ZXI+IG1fcGl4ZWxCdWZmZXJSZXNpemVyOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZVRyYW5zZmVyU2Vzc2lvblZUPiBtX2ltYWdlVHJhbnNmZXJTZXNzaW9uOwogICAgIElu
dFNpemUgbV9wcmVzZXRTaXplOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vbWFjL01vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLm1tIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01vY2tSZWFsdGltZVZpZGVvU291
cmNlTWFjLm1tCmluZGV4IDIzYTE2OTYyYjUzOTQxODRjNWY2NTRlOWVjNWUxZDFmZTkwY2QyOWEu
LmRmM2E0MjRhMjEzMGFhZWRmMTJlN2Q4ZGUxZDVhMDhiMDJjNWQ5MGUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1Nv
dXJjZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMv
TW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW0KQEAgLTM0LDEwICszNCwxMCBAQAogI2lmIEVO
QUJMRShNRURJQV9TVFJFQU0pCiAjaW1wb3J0ICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2ltcG9y
dCAiSW1hZ2VCdWZmZXIuaCIKKyNpbXBvcnQgIkltYWdlVHJhbnNmZXJTZXNzaW9uVlQuaCIKICNp
bXBvcnQgIk1lZGlhQ29uc3RyYWludHMuaCIKICNpbXBvcnQgIk1lZGlhU2FtcGxlQVZGT2JqQy5o
IgogI2ltcG9ydCAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbXBvcnQgIlBpeGVsQnVmZmVyUmVzaXpl
ci5oIgogI2ltcG9ydCAiUGxhdGZvcm1MYXllci5oIgogI2ltcG9ydCAiUmVhbHRpbWVNZWRpYVNv
dXJjZVNldHRpbmdzLmgiCiAjaW1wb3J0ICJSZWFsdGltZVZpZGVvVXRpbGl0aWVzLmgiCkBAIC01
MSw4ICs1MSw2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgUEFMOwog
Ci1zdGF0aWMgY29uc3QgaW50IHZpZGVvU2FtcGxlUmF0ZSA9IDkwMDAwOwotCiBDYXB0dXJlU291
cmNlT3JFcnJvciBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZTo6Y3JlYXRlKFN0cmluZyYmIGRldmlj
ZUlELCBTdHJpbmcmJiBuYW1lLCBTdHJpbmcmJiBoYXNoU2FsdCwgY29uc3QgTWVkaWFDb25zdHJh
aW50cyogY29uc3RyYWludHMpCiB7CiAjaWZuZGVmIE5ERUJVRwpAQCAtNzUsMTA1ICs3MywyMiBA
QCBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYzo6TW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMo
U3RyaW5nJiYgZGV2aWNlSUQsIFN0cmluZwogewogfQogCi1SZXRhaW5QdHI8Q01TYW1wbGVCdWZm
ZXJSZWY+IE1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjOjpDTVNhbXBsZUJ1ZmZlckZyb21QaXhl
bEJ1ZmZlcihDVlBpeGVsQnVmZmVyUmVmIHBpeGVsQnVmZmVyKQotewotICAgIGlmICghcGl4ZWxC
dWZmZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAotICAgIENNVGltZSBzYW1wbGVU
aW1lID0gQ01UaW1lTWFrZSgoKGVsYXBzZWRUaW1lKCkgKyAxMDBfbXMpICogdmlkZW9TYW1wbGVS
YXRlKS5zZWNvbmRzKCksIHZpZGVvU2FtcGxlUmF0ZSk7Ci0gICAgQ01TYW1wbGVUaW1pbmdJbmZv
IHRpbWluZ0luZm8gPSB7IGtDTVRpbWVJbnZhbGlkLCBzYW1wbGVUaW1lLCBzYW1wbGVUaW1lIH07
Ci0KLSAgICBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25SZWYgZm9ybWF0RGVzY3JpcHRpb24gPSBu
dWxscHRyOwotICAgIE9TU3RhdHVzIHN0YXR1cyA9IENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkNy
ZWF0ZUZvckltYWdlQnVmZmVyKGtDRkFsbG9jYXRvckRlZmF1bHQsIChDVkltYWdlQnVmZmVyUmVm
KXBpeGVsQnVmZmVyLCAmZm9ybWF0RGVzY3JpcHRpb24pOwotICAgIGlmIChzdGF0dXMgIT0gbm9F
cnIpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBDTVZpZGVvRm9y
bWF0RGVzY3JpcHRpb24gd2l0aCBlcnJvciBjb2RlOiAlZCIsIHN0YXR1cyk7Ci0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIH0KLQotICAgIENNU2FtcGxlQnVmZmVyUmVmIHNhbXBsZUJ1ZmZl
cjsKLSAgICBzdGF0dXMgPSBDTVNhbXBsZUJ1ZmZlckNyZWF0ZVJlYWR5V2l0aEltYWdlQnVmZmVy
KGtDRkFsbG9jYXRvckRlZmF1bHQsIChDVkltYWdlQnVmZmVyUmVmKXBpeGVsQnVmZmVyLCBmb3Jt
YXREZXNjcmlwdGlvbiwgJnRpbWluZ0luZm8sICZzYW1wbGVCdWZmZXIpOwotICAgIENGUmVsZWFz
ZShmb3JtYXREZXNjcmlwdGlvbik7Ci0gICAgaWYgKHN0YXR1cyAhPSBub0VycikgewotICAgICAg
ICBMT0dfRVJST1IoIkZhaWxlZCB0byBpbml0aWFsaXplIENNU2FtcGxlQnVmZmVyIHdpdGggZXJy
b3IgY29kZTogJWQiLCBzdGF0dXMpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0K
LSAgICByZXR1cm4gYWRvcHRDRihzYW1wbGVCdWZmZXIpOwotfQotCi1SZXRhaW5QdHI8Q1ZQaXhl
bEJ1ZmZlclJlZj4gTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWM6OnBpeGVsQnVmZmVyRnJvbUNH
SW1hZ2UoQ0dJbWFnZVJlZiBpbWFnZSkgY29uc3QKLXsKLSAgICBzdGF0aWMgQ0dDb2xvclNwYWNl
UmVmIHNSR0JDb2xvclNwYWNlID0gc1JHQkNvbG9yU3BhY2VSZWYoKTsKLQotICAgIENHU2l6ZSBp
bWFnZVNpemUgPSBDR1NpemVNYWtlKENHSW1hZ2VHZXRXaWR0aChpbWFnZSksIENHSW1hZ2VHZXRI
ZWlnaHQoaW1hZ2UpKTsKLSAgICBpZiAoIW1fYnVmZmVyUG9vbCkgewotICAgICAgICBDVlBpeGVs
QnVmZmVyUG9vbFJlZiBidWZmZXJQb29sOwotICAgICAgICBDRkRpY3Rpb25hcnlSZWYgc291cmNl
UGl4ZWxCdWZmZXJPcHRpb25zID0gKF9fYnJpZGdlIENGRGljdGlvbmFyeVJlZikgQHsKLSAgICAg
ICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsQnVmZmVyUGl4ZWxGb3JtYXRUeXBl
S2V5IDogQChrQ1ZQaXhlbEZvcm1hdFR5cGVfMzJBUkdCKSwKLSAgICAgICAgICAgIChfX2JyaWRn
ZSBOU1N0cmluZyAqKWtDVlBpeGVsQnVmZmVyV2lkdGhLZXkgOiBAKGltYWdlU2l6ZS53aWR0aCks
Ci0gICAgICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ1ZQaXhlbEJ1ZmZlckhlaWdodEtl
eSA6IEAoaW1hZ2VTaXplLmhlaWdodCksCi0jaWYgUExBVEZPUk0oSU9TKQotICAgICAgICAgICAg
KF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxGb3JtYXRPcGVuR0xFU0NvbXBhdGliaWxpdHkg
OiBAKFlFUyksCi0jZWxzZQotICAgICAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4
ZWxCdWZmZXJPcGVuR0xDb21wYXRpYmlsaXR5S2V5IDogQChZRVMpLAotI2VuZGlmCi0gICAgICAg
ICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ1ZQaXhlbEJ1ZmZlcklPU3VyZmFjZVByb3BlcnRp
ZXNLZXkgOiBAey8qZW1wdHkgZGljdGlvbmFyeSovfQotICAgICAgICB9OwotCi0gICAgICAgIENG
RGljdGlvbmFyeVJlZiBwaXhlbEJ1ZmZlclBvb2xPcHRpb25zID0gKF9fYnJpZGdlIENGRGljdGlv
bmFyeVJlZikgQHsKLSAgICAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxCdWZm
ZXJQb29sTWluaW11bUJ1ZmZlckNvdW50S2V5IDogQCg0KQotICAgICAgICB9OwotCi0gICAgICAg
IENWUmV0dXJuIHN0YXR1cyA9IENWUGl4ZWxCdWZmZXJQb29sQ3JlYXRlKGtDRkFsbG9jYXRvckRl
ZmF1bHQsIHBpeGVsQnVmZmVyUG9vbE9wdGlvbnMsIHNvdXJjZVBpeGVsQnVmZmVyT3B0aW9ucywg
JmJ1ZmZlclBvb2wpOwotICAgICAgICBpZiAoc3RhdHVzICE9IGtDVlJldHVyblN1Y2Nlc3MpCi0g
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBtX2J1ZmZlclBvb2wgPSBhZG9w
dENGKGJ1ZmZlclBvb2wpOwotICAgIH0KLQotICAgIENWUGl4ZWxCdWZmZXJSZWYgcGl4ZWxCdWZm
ZXI7Ci0gICAgQ1ZSZXR1cm4gc3RhdHVzID0gQ1ZQaXhlbEJ1ZmZlclBvb2xDcmVhdGVQaXhlbEJ1
ZmZlcihudWxscHRyLCBtX2J1ZmZlclBvb2wuZ2V0KCksICZwaXhlbEJ1ZmZlcik7Ci0gICAgaWYg
KHN0YXR1cyAhPSBrQ1ZSZXR1cm5TdWNjZXNzKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIENWUGl4ZWxCdWZmZXJMb2NrQmFzZUFkZHJlc3MocGl4ZWxCdWZmZXIsIDApOwotICAgIHZv
aWQqIGRhdGEgPSBDVlBpeGVsQnVmZmVyR2V0QmFzZUFkZHJlc3MocGl4ZWxCdWZmZXIpOwotICAg
IGF1dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKGRhdGEsIGltYWdl
U2l6ZS53aWR0aCwgaW1hZ2VTaXplLmhlaWdodCwgOCwgQ1ZQaXhlbEJ1ZmZlckdldEJ5dGVzUGVy
Um93KHBpeGVsQnVmZmVyKSwgc1JHQkNvbG9yU3BhY2UsIChDR0JpdG1hcEluZm8pIGtDR0ltYWdl
QWxwaGFOb25lU2tpcEZpcnN0KSk7Ci0gICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0
KCksIENHUmVjdE1ha2UoMCwgMCwgQ0dJbWFnZUdldFdpZHRoKGltYWdlKSwgQ0dJbWFnZUdldEhl
aWdodChpbWFnZSkpLCBpbWFnZSk7Ci0gICAgQ1ZQaXhlbEJ1ZmZlclVubG9ja0Jhc2VBZGRyZXNz
KHBpeGVsQnVmZmVyLCAwKTsKLQotICAgIHJldHVybiBhZG9wdENGKHBpeGVsQnVmZmVyKTsKLX0K
LQogdm9pZCBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYzo6dXBkYXRlU2FtcGxlQnVmZmVyKCkK
IHsKICAgICBhdXRvIGltYWdlQnVmZmVyID0gdGhpcy0+aW1hZ2VCdWZmZXIoKTsKICAgICBpZiAo
IWltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHBpeGVsQnVmZmVyID0g
cGl4ZWxCdWZmZXJGcm9tQ0dJbWFnZShpbWFnZUJ1ZmZlci0+Y29weUltYWdlKCktPm5hdGl2ZUlt
YWdlKCkuZ2V0KCkpOwotICAgIGlmIChtX3BpeGVsQnVmZmVyUmVzaXplcikKLSAgICAgICAgcGl4
ZWxCdWZmZXIgPSBtX3BpeGVsQnVmZmVyUmVzaXplci0+cmVzaXplKHBpeGVsQnVmZmVyLmdldCgp
KTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKCFtX3BpeGVsQnVmZmVyQ29uZm9ybWVyKSB7Ci0g
ICAgICAgICAgICBtX3BpeGVsQnVmZmVyQ29uZm9ybWVyID0gc3RkOjptYWtlX3VuaXF1ZTxQaXhl
bEJ1ZmZlckNvbmZvcm1lckNWPigoX19icmlkZ2UgQ0ZEaWN0aW9uYXJ5UmVmKUB7Ci0gICAgICAg
ICAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxCdWZmZXJQaXhlbEZvcm1hdFR5
cGVLZXk6IEAocHJlZmVyZWRQaXhlbEJ1ZmZlckZvcm1hdCgpKQotICAgICAgICAgICAgfSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBwaXhlbEJ1ZmZlciA9IG1fcGl4ZWxCdWZmZXJDb25mb3JtZXIt
PmNvbnZlcnQocGl4ZWxCdWZmZXIuZ2V0KCkpOwotICAgIH0KLSAgICBhdXRvIHNhbXBsZUJ1ZmZl
ciA9IENNU2FtcGxlQnVmZmVyRnJvbVBpeGVsQnVmZmVyKHBpeGVsQnVmZmVyLmdldCgpKTsKKyAg
ICBpZiAoIW1faW1hZ2VUcmFuc2ZlclNlc3Npb24pCisgICAgICAgIG1faW1hZ2VUcmFuc2ZlclNl
c3Npb24gPSBJbWFnZVRyYW5zZmVyU2Vzc2lvblZUOjpjcmVhdGUocHJlZmVyZWRQaXhlbEJ1ZmZl
ckZvcm1hdCgpKTsKIAotICAgIC8vIFdlIHVzZSBtX2RldmljZU9yaWVudGF0aW9uIHRvIGVtdWxh
dGUgc2Vuc29yIG9yaWVudGF0aW9uCi0gICAgZGlzcGF0Y2hNZWRpYVNhbXBsZVRvT2JzZXJ2ZXJz
KE1lZGlhU2FtcGxlQVZGT2JqQzo6Y3JlYXRlKHNhbXBsZUJ1ZmZlci5nZXQoKSwgbV9kZXZpY2VP
cmllbnRhdGlvbikpOwotfQorICAgIGF1dG8gc2FtcGxlVGltZSA9IE1lZGlhVGltZTo6Y3JlYXRl
V2l0aERvdWJsZSgoZWxhcHNlZFRpbWUoKSArIDEwMF9tcykuc2Vjb25kcygpKTsKKyAgICBhdXRv
IHNhbXBsZUJ1ZmZlciA9IG1faW1hZ2VUcmFuc2ZlclNlc3Npb24tPmNyZWF0ZU1lZGlhU2FtcGxl
KGltYWdlQnVmZmVyLT5jb3B5SW1hZ2UoKS0+bmF0aXZlSW1hZ2UoKS5nZXQoKSwgc2FtcGxlVGlt
ZSwgc2l6ZSgpLCBtX2RldmljZU9yaWVudGF0aW9uKTsKKyAgICBpZiAoIXNhbXBsZUJ1ZmZlcikK
KyAgICAgICAgcmV0dXJuOwogCi12b2lkIE1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjOjpzZXR0
aW5nc0RpZENoYW5nZShPcHRpb25TZXQ8UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpGbGFn
PiBzZXR0aW5ncykKLXsKLSAgICBpZiAoc2V0dGluZ3MuY29udGFpbnNBbnkoeyBSZWFsdGltZU1l
ZGlhU291cmNlU2V0dGluZ3M6OkZsYWc6OldpZHRoLCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGlu
Z3M6OkZsYWc6OkhlaWdodCB9KSkKLSAgICAgICAgbV9idWZmZXJQb29sID0gbnVsbHB0cjsKLSAg
ICBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZTo6c2V0dGluZ3NEaWRDaGFuZ2Uoc2V0dGluZ3MpOwor
ICAgIC8vIFdlIHVzZSBtX2RldmljZU9yaWVudGF0aW9uIHRvIGVtdWxhdGUgc2Vuc29yIG9yaWVu
dGF0aW9uCisgICAgZGlzcGF0Y2hNZWRpYVNhbXBsZVRvT2JzZXJ2ZXJzKCpzYW1wbGVCdWZmZXIp
OwogfQogCiB2b2lkIE1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjOjpvcmllbnRhdGlvbkNoYW5n
ZWQoaW50IG9yaWVudGF0aW9uKQpAQCAtMjAzLDIxICsxMTgsNiBAQCB2b2lkIE1vY2tSZWFsdGlt
ZVZpZGVvU291cmNlTWFjOjptb25pdG9yT3JpZW50YXRpb24oT3JpZW50YXRpb25Ob3RpZmllciYg
bm90aWZpZQogICAgIG9yaWVudGF0aW9uQ2hhbmdlZChub3RpZmllci5vcmllbnRhdGlvbigpKTsK
IH0KIAotdm9pZCBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYzo6c2V0U2l6ZUFuZEZyYW1lUmF0
ZVdpdGhQcmVzZXQoSW50U2l6ZSByZXF1ZXN0ZWRTaXplLCBkb3VibGUsIFJlZlB0cjxWaWRlb1By
ZXNldD4gcHJlc2V0KQotewotICAgIGlmICghcHJlc2V0KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAocHJlc2V0LT5zaXplICE9IHJlcXVlc3RlZFNpemUpIHsKLSAgICAgICAgaWYgKG1fcGl4
ZWxCdWZmZXJSZXNpemVyICYmICFtX3BpeGVsQnVmZmVyUmVzaXplci0+Y2FuUmVzaXplVG8ocmVx
dWVzdGVkU2l6ZSkpCi0gICAgICAgICAgICBtX3BpeGVsQnVmZmVyUmVzaXplciA9IG51bGxwdHI7
Ci0KLSAgICAgICAgaWYgKCFtX3BpeGVsQnVmZmVyUmVzaXplcikKLSAgICAgICAgICAgIG1fcGl4
ZWxCdWZmZXJSZXNpemVyID0gc3RkOjptYWtlX3VuaXF1ZTxQaXhlbEJ1ZmZlclJlc2l6ZXI+KHJl
cXVlc3RlZFNpemUsIHByZWZlcmVkUGl4ZWxCdWZmZXJGb3JtYXQoKSk7Ci0gICAgfSBlbHNlCi0g
ICAgICAgIG1fcGl4ZWxCdWZmZXJSZXNpemVyID0gbnVsbHB0cjsKLX0KLQogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9TY3JlZW5EaXNwbGF5Q2Fw
dHVyZVNvdXJjZU1hYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L1NjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLmgKaW5kZXggZWM5MjBmMDI0YTU2ODk5MjAw
OTQ0OTQ0NDdkNzJiZWU2MzI5MGRjNy4uOWM4Zjg3MWMzZDFmOWM2OWMyNTdhNmJkOTllYTlmNDQy
NzIwZDllZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
bWFjL1NjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1NjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLmgK
QEAgLTU2LDcgKzU2LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZnJhbWVBdmFpbGFibGUoQ0dE
aXNwbGF5U3RyZWFtRnJhbWVTdGF0dXMsIHVpbnQ2NF90LCBJT1N1cmZhY2VSZWYsIENHRGlzcGxh
eVN0cmVhbVVwZGF0ZVJlZik7CiAKLSAgICBSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gZ2Vu
ZXJhdGVGcmFtZSgpIGZpbmFsOworICAgIERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OkRpc3Bs
YXlGcmFtZVR5cGUgZ2VuZXJhdGVGcmFtZSgpIGZpbmFsOwogICAgIFJlYWx0aW1lTWVkaWFTb3Vy
Y2VTZXR0aW5nczo6RGlzcGxheVN1cmZhY2VUeXBlIHN1cmZhY2VUeXBlKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpEaXNwbGF5U3VyZmFjZVR5cGU6
Ok1vbml0b3I7IH0KIAogICAgIHZvaWQgc3RhcnRQcm9kdWNpbmdEYXRhKCkgZmluYWw7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvU2NyZWVuRGlz
cGxheUNhcHR1cmVTb3VyY2VNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWMubW0KaW5kZXggYTIzOGYyOGY5
NzViODQwODM0Mjc3ZThiMGMyZGVkYzE5Y2FiZTQ0Ny4uNGNiNGQxM2NhNTAyZjQzZDIxMmJkODRh
MWQ3ZTcwYjhhZWUyYTJiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbWFjL1NjcmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9TY3JlZW5EaXNwbGF5Q2FwdHVyZVNv
dXJjZU1hYy5tbQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgogI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3Vy
Y2VTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlJlYWx0aW1lVmlkZW9VdGlsaXRpZXMuaCIKIAogI2lu
Y2x1ZGUgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCiAKQEAgLTE2Niw3ICsxNjcsNyBAQCBib29sIFNj
cmVlbkRpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpjcmVhdGVEaXNwbGF5U3RyZWFtKCkKICAgICAg
ICAgfSk7CiAKICAgICAgICAgYXV0byBzaXplID0gZnJhbWVTaXplKCk7Ci0gICAgICAgIG1fZGlz
cGxheVN0cmVhbSA9IGFkb3B0Q0YoQ0dEaXNwbGF5U3RyZWFtQ3JlYXRlV2l0aERpc3BhdGNoUXVl
dWUobV9kaXNwbGF5SUQsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwga0NWUGl4ZWxGb3Jt
YXRUeXBlXzQyMFlwQ2JDcjhQbGFuYXIsIHN0cmVhbU9wdGlvbnMuZ2V0KCksIG1fY2FwdHVyZVF1
ZXVlLmdldCgpLCBtX2ZyYW1lQXZhaWxhYmxlQmxvY2spKTsKKyAgICAgICAgbV9kaXNwbGF5U3Ry
ZWFtID0gYWRvcHRDRihDR0Rpc3BsYXlTdHJlYW1DcmVhdGVXaXRoRGlzcGF0Y2hRdWV1ZShtX2Rp
c3BsYXlJRCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCBwcmVmZXJlZFBpeGVsQnVmZmVy
Rm9ybWF0KCksIHN0cmVhbU9wdGlvbnMuZ2V0KCksIG1fY2FwdHVyZVF1ZXVlLmdldCgpLCBtX2Zy
YW1lQXZhaWxhYmxlQmxvY2spKTsKICAgICAgICAgaWYgKCFtX2Rpc3BsYXlTdHJlYW0pIHsKICAg
ICAgICAgICAgIFJFTEVBU0VfTE9HKE1lZGlhLCAiU2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VN
YWM6OmNyZWF0ZURpc3BsYXlTdHJlYW06IENHRGlzcGxheVN0cmVhbUNyZWF0ZSBmYWlsZWQiKTsK
ICAgICAgICAgICAgIGNhcHR1cmVGYWlsZWQoKTsKQEAgLTIwNSwxOCArMjA2LDE1IEBAIHZvaWQg
U2NyZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OnN0b3BQcm9kdWNpbmdEYXRhKCkKICAgICBt
X2lzUnVubmluZyA9IGZhbHNlOwogfQogCi1SZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gU2Ny
ZWVuRGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OmdlbmVyYXRlRnJhbWUoKQorRGlzcGxheUNhcHR1
cmVTb3VyY2VDb2NvYTo6RGlzcGxheUZyYW1lVHlwZSBTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJj
ZU1hYzo6Z2VuZXJhdGVGcmFtZSgpCiB7Ci0gICAgaWYgKCFtX2N1cnJlbnRGcmFtZS5pb1N1cmZh
Y2UoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KICAgICBEaXNwbGF5U3VyZmFjZSBjdXJy
ZW50RnJhbWU7CiAgICAgewogICAgICAgICBMb2NrSG9sZGVyIGxvY2sobV9jdXJyZW50RnJhbWVN
dXRleCk7CiAgICAgICAgIGN1cnJlbnRGcmFtZSA9IG1fY3VycmVudEZyYW1lLmlvU3VyZmFjZSgp
OwogICAgIH0KIAotICAgIHJldHVybiBwaXhlbEJ1ZmZlckZyb21JT1N1cmZhY2UoY3VycmVudEZy
YW1lLmlvU3VyZmFjZSgpKTsKKyAgICByZXR1cm4gRGlzcGxheUNhcHR1cmVTb3VyY2VDb2NvYTo6
RGlzcGxheUZyYW1lVHlwZSB7IFJldGFpblB0cjxJT1N1cmZhY2VSZWY+IHsgY3VycmVudEZyYW1l
LmlvU3VyZmFjZSgpIH0gfTsKIH0KIAogdm9pZCBTY3JlZW5EaXNwbGF5Q2FwdHVyZVNvdXJjZU1h
Yzo6c3RhcnREaXNwbGF5U3RyZWFtKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9XaW5kb3dEaXNwbGF5Q2FwdHVyZVNvdXJjZU1hYy5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1dpbmRvd0Rpc3BsYXlDYXB0dXJl
U291cmNlTWFjLmgKaW5kZXggMWM0ZDM3NjBmODhjZmY1ZmE3NGNkMjcwNjYwM2U2OGExZDNkNmRk
Zi4uMmQxYTY2ZTAzMTJiYWRjYTg5ZDliY2YwYjgwNjZlZDQzMmRiMmQ1NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1dpbmRvd0Rpc3BsYXlDYXB0
dXJlU291cmNlTWFjLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
bWFjL1dpbmRvd0Rpc3BsYXlDYXB0dXJlU291cmNlTWFjLmgKQEAgLTQ5LDExICs0OSwxMCBAQCBw
cml2YXRlOgogICAgIFdpbmRvd0Rpc3BsYXlDYXB0dXJlU291cmNlTWFjKHVpbnQzMl90LCBTdHJp
bmcmJik7CiAgICAgdmlydHVhbCB+V2luZG93RGlzcGxheUNhcHR1cmVTb3VyY2VNYWMoKSA9IGRl
ZmF1bHQ7CiAKLSAgICBSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gZ2VuZXJhdGVGcmFtZSgp
IGZpbmFsOworICAgIERpc3BsYXlDYXB0dXJlU291cmNlQ29jb2E6OkRpc3BsYXlGcmFtZVR5cGUg
Z2VuZXJhdGVGcmFtZSgpIGZpbmFsOwogICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6
RGlzcGxheVN1cmZhY2VUeXBlIHN1cmZhY2VUeXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gUmVh
bHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpEaXNwbGF5U3VyZmFjZVR5cGU6OldpbmRvdzsgfQog
CiAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IHdpbmRvd0ltYWdlKCk7Ci0gICAgUmV0YWluUHRy
PENWUGl4ZWxCdWZmZXJSZWY+IHBpeGVsQnVmZmVyRnJvbUNHSW1hZ2UoQ0dJbWFnZVJlZik7CiAK
ICAgICBJbnRTaXplIG1fd2luZG93U2l6ZTsKICAgICBDR1dpbmRvd0lEIG1fd2luZG93SUQgeyAw
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMv
V2luZG93RGlzcGxheUNhcHR1cmVTb3VyY2VNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvV2luZG93RGlzcGxheUNhcHR1cmVTb3VyY2VNYWMubW0KaW5kZXgg
MWQ2YTE3Y2Q0MTM4ZmQxZDU2NzJiZjkzMjkzNzA0YmYxMDE0MTkyMy4uOWM1ZDVkNDMxMmQ2ZDUz
Njg0Yzg1ZjJhNzgwZDgzYjMyNjk1MTU4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vbWFjL1dpbmRvd0Rpc3BsYXlDYXB0dXJlU291cmNlTWFjLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9XaW5kb3dEaXNwbGF5
Q2FwdHVyZVNvdXJjZU1hYy5tbQpAQCAtMTM5LDY5ICsxMzksOSBAQCBSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gV2luZG93RGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OndpbmRvd0ltYWdlKCkKICAgICBy
ZXR1cm4gaW1hZ2U7CiB9CiAKLVJldGFpblB0cjxDVlBpeGVsQnVmZmVyUmVmPiBXaW5kb3dEaXNw
bGF5Q2FwdHVyZVNvdXJjZU1hYzo6Z2VuZXJhdGVGcmFtZSgpCitEaXNwbGF5Q2FwdHVyZVNvdXJj
ZUNvY29hOjpEaXNwbGF5RnJhbWVUeXBlIFdpbmRvd0Rpc3BsYXlDYXB0dXJlU291cmNlTWFjOjpn
ZW5lcmF0ZUZyYW1lKCkKIHsKLSAgICBhdXRvIGltYWdlID0gd2luZG93SW1hZ2UoKTsKLSAgICBp
ZiAoIWltYWdlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmIChtX2xhc3RJbWFn
ZSAmJiBtX2xhc3RQaXhlbEJ1ZmZlciAmJiBDRkVxdWFsKG1fbGFzdEltYWdlLmdldCgpLCBpbWFn
ZS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBtX2xhc3RQaXhlbEJ1ZmZlci5nZXQoKTsKLQotICAg
IG1fbGFzdEltYWdlID0gV1RGTW92ZShpbWFnZSk7Ci0gICAgcmV0dXJuIHBpeGVsQnVmZmVyRnJv
bUNHSW1hZ2UobV9sYXN0SW1hZ2UuZ2V0KCkpOwotfQotCi1SZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZl
clJlZj4gV2luZG93RGlzcGxheUNhcHR1cmVTb3VyY2VNYWM6OnBpeGVsQnVmZmVyRnJvbUNHSW1h
Z2UoQ0dJbWFnZVJlZiBpbWFnZSkKLXsKLSAgICBzdGF0aWMgQ0dDb2xvclNwYWNlUmVmIHNSR0JD
b2xvclNwYWNlID0gc1JHQkNvbG9yU3BhY2VSZWYoKTsKLQotICAgIGF1dG8gaW1hZ2VTaXplID0g
SW50U2l6ZShDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpLCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKSk7
Ci0gICAgaWYgKGltYWdlU2l6ZSAhPSBpbnRyaW5zaWNTaXplKCkpIHsKLSAgICAgICAgbV9idWZm
ZXJQb29sID0gbnVsbHB0cjsKLSAgICAgICAgbV9sYXN0SW1hZ2UgPSBudWxscHRyOwotICAgICAg
ICBtX2xhc3RQaXhlbEJ1ZmZlciA9IG51bGxwdHI7Ci0gICAgfQotCi0gICAgaWYgKCFtX2J1ZmZl
clBvb2wpIHsKLSAgICAgICAgQ1ZQaXhlbEJ1ZmZlclBvb2xSZWYgYnVmZmVyUG9vbDsKLSAgICAg
ICAgQ0ZEaWN0aW9uYXJ5UmVmIHNvdXJjZVBpeGVsQnVmZmVyT3B0aW9ucyA9IChfX2JyaWRnZSBD
RkRpY3Rpb25hcnlSZWYpIEB7Ci0gICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVs
QnVmZmVyUGl4ZWxGb3JtYXRUeXBlS2V5IDogQChrQ1ZQaXhlbEZvcm1hdFR5cGVfMzJBUkdCKSwK
LSAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5nICopa0NWUGl4ZWxCdWZmZXJXaWR0aEtleSA6IEAo
aW1hZ2VTaXplLndpZHRoKCkpLAotICAgICAgICAoX19icmlkZ2UgTlNTdHJpbmcgKilrQ1ZQaXhl
bEJ1ZmZlckhlaWdodEtleSA6IEAoaW1hZ2VTaXplLmhlaWdodCgpKSwKLSNpZiBQTEFURk9STShJ
T1MpCi0gICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsRm9ybWF0T3BlbkdMRVND
b21wYXRpYmlsaXR5IDogQChZRVMpLAotI2Vsc2UKLSAgICAgICAgKF9fYnJpZGdlIE5TU3RyaW5n
ICopa0NWUGl4ZWxCdWZmZXJPcGVuR0xDb21wYXRpYmlsaXR5S2V5IDogQChZRVMpLAotI2VuZGlm
Ci0gICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVsQnVmZmVySU9TdXJmYWNlUHJv
cGVydGllc0tleSA6IEB7IC8qZW1wdHkgZGljdGlvbmFyeSovIH0KLSAgICB9OwotCi0gICAgICAg
IENGRGljdGlvbmFyeVJlZiBwaXhlbEJ1ZmZlclBvb2xPcHRpb25zID0gKF9fYnJpZGdlIENGRGlj
dGlvbmFyeVJlZikgQHsKLSAgICAgICAgICAgIChfX2JyaWRnZSBOU1N0cmluZyAqKWtDVlBpeGVs
QnVmZmVyUG9vbE1pbmltdW1CdWZmZXJDb3VudEtleSA6IEAoMykKLSAgICAgICAgfTsKLQotICAg
ICAgICBDVlJldHVybiBzdGF0dXMgPSBDVlBpeGVsQnVmZmVyUG9vbENyZWF0ZShrQ0ZBbGxvY2F0
b3JEZWZhdWx0LCBwaXhlbEJ1ZmZlclBvb2xPcHRpb25zLCBzb3VyY2VQaXhlbEJ1ZmZlck9wdGlv
bnMsICZidWZmZXJQb29sKTsKLSAgICAgICAgaWYgKHN0YXR1cyAhPSBrQ1ZSZXR1cm5TdWNjZXNz
KQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgbV9idWZmZXJQb29sID0g
YWRvcHRDRihidWZmZXJQb29sKTsKLSAgICAgICAgc2V0SW50cmluc2ljU2l6ZShpbWFnZVNpemUp
OwotICAgIH0KLQotICAgIENWUGl4ZWxCdWZmZXJSZWYgcGl4ZWxCdWZmZXI7Ci0gICAgQ1ZSZXR1
cm4gc3RhdHVzID0gQ1ZQaXhlbEJ1ZmZlclBvb2xDcmVhdGVQaXhlbEJ1ZmZlcihudWxscHRyLCBt
X2J1ZmZlclBvb2wuZ2V0KCksICZwaXhlbEJ1ZmZlcik7Ci0gICAgaWYgKHN0YXR1cyAhPSBrQ1ZS
ZXR1cm5TdWNjZXNzKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENWUGl4ZWxCdWZm
ZXJMb2NrQmFzZUFkZHJlc3MocGl4ZWxCdWZmZXIsIDApOwotICAgIHZvaWQqIGRhdGEgPSBDVlBp
eGVsQnVmZmVyR2V0QmFzZUFkZHJlc3MocGl4ZWxCdWZmZXIpOwotICAgIGF1dG8gY29udGV4dCA9
IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKGRhdGEsIGltYWdlU2l6ZS53aWR0aCgpLCBp
bWFnZVNpemUuaGVpZ2h0KCksIDgsIENWUGl4ZWxCdWZmZXJHZXRCeXRlc1BlclJvdyhwaXhlbEJ1
ZmZlciksIHNSR0JDb2xvclNwYWNlLCAoQ0dCaXRtYXBJbmZvKSBrQ0dJbWFnZUFscGhhTm9uZVNr
aXBGaXJzdCkpOwotICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBDR1JlY3RN
YWtlKDAsIDAsIENHSW1hZ2VHZXRXaWR0aChpbWFnZSksIENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2Up
KSwgaW1hZ2UpOwotICAgIENWUGl4ZWxCdWZmZXJVbmxvY2tCYXNlQWRkcmVzcyhwaXhlbEJ1ZmZl
ciwgMCk7Ci0KLSAgICBtX2xhc3RQaXhlbEJ1ZmZlciA9IGFkb3B0Q0YocGl4ZWxCdWZmZXIpOwot
ICAgIHJldHVybiBtX2xhc3RQaXhlbEJ1ZmZlcjsKKyAgICByZXR1cm4gRGlzcGxheUNhcHR1cmVT
b3VyY2VDb2NvYTo6RGlzcGxheUZyYW1lVHlwZSB7IFJldGFpblB0cjxDR0ltYWdlUmVmPiB7IHdp
bmRvd0ltYWdlKCkgfSB9OwogfQogCiBzdGQ6Om9wdGlvbmFsPENhcHR1cmVEZXZpY2U+IFdpbmRv
d0Rpc3BsYXlDYXB0dXJlU291cmNlTWFjOjp3aW5kb3dDYXB0dXJlRGV2aWNlV2l0aFBlcnNpc3Rl
bnRJRChjb25zdCBTdHJpbmcmIGlkU3RyaW5nKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNwcAppbmRleCA2MjI0N2Vk
NTZkZDBmZTcyYmUwMDM5MTQ0YjhmMDQ2ZjUwZDk2ZjRkLi43YWI3YTIxNTRlM2FlMmE0MWM3ZDEy
YzhjMDc0ZDIyMWY4Nzg3NmMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
b2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNwcApAQCAtMTI2LDYgKzEyNiw3IEBA
IGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmIE1vY2tSZWFsdGltZVZpZGVv
U291cmNlOjpjYXBhYmlsaXRpZXMoKQogICAgICAgICAgICAgY2FwYWJpbGl0aWVzLmFkZEZhY2lu
Z01vZGUoV1RGOjpnZXQ8TW9ja0NhbWVyYVByb3BlcnRpZXM+KG1fZGV2aWNlLnByb3BlcnRpZXMp
LmZhY2luZ01vZGUpOwogICAgICAgICAgICAgY2FwYWJpbGl0aWVzLnNldERldmljZUlkKGhhc2hl
ZElkKCkpOwogICAgICAgICAgICAgdXBkYXRlQ2FwYWJpbGl0aWVzKGNhcGFiaWxpdGllcyk7Cisg
ICAgICAgICAgICBjYXBhYmlsaXRpZXMuc2V0RGV2aWNlSWQoaGFzaGVkSWQoKSk7CiAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICBjYXBhYmlsaXRpZXMuc2V0V2lkdGgoQ2FwYWJpbGl0eVZh
bHVlT3JSYW5nZSg3MiwgMjg4MCkpOwogICAgICAgICAgICAgY2FwYWJpbGl0aWVzLnNldEhlaWdo
dChDYXBhYmlsaXR5VmFsdWVPclJhbmdlKDQ1LCAxODAwKSk7CkBAIC0xNTksMTQgKzE2MCwxNCBA
QCBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MmIE1vY2tSZWFsdGltZVZpZGVvU291
cmNlOjpzZXR0aW5ncygpCiAgICAgICAgIHNldHRpbmdzLnNldEFzcGVjdFJhdGlvKGFzcGVjdFJh
dGlvKCkpOwogCiAgICAgUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0cmFpbnRzIHN1
cHBvcnRlZENvbnN0cmFpbnRzOwotICAgIHN1cHBvcnRlZENvbnN0cmFpbnRzLnNldFN1cHBvcnRz
RGV2aWNlSWQodHJ1ZSk7CiAgICAgc3VwcG9ydGVkQ29uc3RyYWludHMuc2V0U3VwcG9ydHNGcmFt
ZVJhdGUodHJ1ZSk7CiAgICAgc3VwcG9ydGVkQ29uc3RyYWludHMuc2V0U3VwcG9ydHNXaWR0aCh0
cnVlKTsKICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0hlaWdodCh0cnVlKTsK
ICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0FzcGVjdFJhdGlvKHRydWUpOwot
ICAgIGlmIChtb2NrQ2FtZXJhKCkpCisgICAgaWYgKG1vY2tDYW1lcmEoKSkgeworICAgICAgICBz
dXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0RldmljZUlkKHRydWUpOwogICAgICAgICBz
dXBwb3J0ZWRDb25zdHJhaW50cy5zZXRTdXBwb3J0c0ZhY2luZ01vZGUodHJ1ZSk7Ci0gICAgZWxz
ZSB7CisgICAgfSBlbHNlIHsKICAgICAgICAgc3VwcG9ydGVkQ29uc3RyYWludHMuc2V0U3VwcG9y
dHNEaXNwbGF5U3VyZmFjZSh0cnVlKTsKICAgICAgICAgc3VwcG9ydGVkQ29uc3RyYWludHMuc2V0
U3VwcG9ydHNMb2dpY2FsU3VyZmFjZSh0cnVlKTsKICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>352660</attachid>
            <date>2018-10-17 16:14:14 -0700</date>
            <delta_ts>2018-10-17 16:54:25 -0700</delta_ts>
            <desc>Fix iOSMac build</desc>
            <filename>bug-190519-20181017161413.patch</filename>
            <type>text/plain</type>
            <size>3649</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM3MjM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmNiYWY4NzdiOTE4YzEy
ZTNmZmMyYWE0YjJjNzNjODhlMTM3ZGI4OC4uNThlM2VjYzE3NWU4NDQ2ZGM0OGViOWMxNTk0OTE0
ZjUxZGQ4ZTQxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDE4LTEwLTE3ICBFcmlj
IENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNZWRpYVN0cmVh
bV0gQ29uc29saWRhdGUgYWxsIGltYWdlIGNvbnZlcnNpb24gYW5kIHJlc2l6aW5nIGludG8gb25l
IGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
OTA1MTkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQ1MjI0MzA3PgorCisgICAgICAgIFRyeSB0
byBmaXggdGhlIGlPU01hYyBidWlsZCBhZnRlciByMjM3MjM2LgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY3YvSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2N2L0ltYWdlVHJhbnNmZXJTZXNzaW9uVlQubW06CisKIDIwMTgtMTAtMTcg
IEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgW01lZGlh
U3RyZWFtXSBDb25zb2xpZGF0ZSBhbGwgaW1hZ2UgY29udmVyc2lvbiBhbmQgcmVzaXppbmcgaW50
byBvbmUgY2xhc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2N2L0ltYWdlVHJhbnNmZXJTZXNzaW9uVlQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2N2L0ltYWdlVHJhbnNmZXJTZXNzaW9uVlQuaAppbmRleCA4ZTJiZDU3OTlhOGY2NzEz
ZmM4OGI4NmIyNmI2NWQyZGI2M2MyYWRlLi41YzMyMzE0MTAzZjUzMzZkYjIwZmE3Y2I5M2NiN2Q5
ZTMxYjRjNzVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
di9JbWFnZVRyYW5zZmVyU2Vzc2lvblZULmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY3YvSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5oCkBAIC01MSwxNCArNTEsMTQgQEAg
cHVibGljOgogICAgIFJlZlB0cjxNZWRpYVNhbXBsZT4gY3JlYXRlTWVkaWFTYW1wbGUoQ0dJbWFn
ZVJlZiwgY29uc3QgTWVkaWFUaW1lJiwgY29uc3QgSW50U2l6ZSYsIE1lZGlhU2FtcGxlOjpWaWRl
b1JvdGF0aW9uID0gTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246Ok5vbmUsIGJvb2wgbWlycm9y
ZWQgPSBmYWxzZSk7CiAgICAgUmVmUHRyPE1lZGlhU2FtcGxlPiBjcmVhdGVNZWRpYVNhbXBsZShD
TVNhbXBsZUJ1ZmZlclJlZiwgY29uc3QgSW50U2l6ZSYsIE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0
aW9uID0gTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246Ok5vbmUsIGJvb2wgbWlycm9yZWQgPSBm
YWxzZSk7CiAKLSNpZiBIQVZFKElPU1VSRkFDRSkKKyNpZiBIQVZFKElPU1VSRkFDRSkgJiYgIVBM
QVRGT1JNKElPU01BQykKICAgICBSZWZQdHI8TWVkaWFTYW1wbGU+IGNyZWF0ZU1lZGlhU2FtcGxl
KElPU3VyZmFjZVJlZiwgY29uc3QgTWVkaWFUaW1lJiwgY29uc3QgSW50U2l6ZSYsIE1lZGlhU2Ft
cGxlOjpWaWRlb1JvdGF0aW9uID0gTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246Ok5vbmUsIGJv
b2wgbWlycm9yZWQgPSBmYWxzZSk7CiAjZW5kaWYKIAogcHJpdmF0ZToKICAgICBXRUJDT1JFX0VY
UE9SVCBleHBsaWNpdCBJbWFnZVRyYW5zZmVyU2Vzc2lvblZUKHVpbnQzMl90IHBpeGVsRm9ybWF0
KTsKIAotI2lmIEhBVkUoSU9TVVJGQUNFKQorI2lmIEhBVkUoSU9TVVJGQUNFKSAmJiAhUExBVEZP
Uk0oSU9TTUFDKQogICAgIENGRGljdGlvbmFyeVJlZiBpb1N1cmZhY2VQaXhlbEJ1ZmZlckNyZWF0
aW9uT3B0aW9ucyhJT1N1cmZhY2VSZWYpOwogICAgIFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJl
Zj4gY3JlYXRlQ01TYW1wbGVCdWZmZXIoSU9TdXJmYWNlUmVmLCBjb25zdCBNZWRpYVRpbWUmLCBj
b25zdCBJbnRTaXplJik7CiAgICAgUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJSZWY+IGNyZWF0ZVBp
eGVsQnVmZmVyKElPU3VyZmFjZVJlZiwgY29uc3QgSW50U2l6ZSYpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N2L0ltYWdlVHJhbnNmZXJTZXNz
aW9uVlQubW0KaW5kZXggOGE2Y2RkOTI3NDBlYjQ3MDc2YWQ1YmZjYzMzOTBmZWIxOGU2MjBkOS4u
ODQ5NDIyYTBhZTQxYzg4NWZkNWE1NzgxZjcwMDFkNDcyN2MyZmIzOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3YvSW1hZ2VUcmFuc2ZlclNlc3Npb25WVC5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdi9JbWFnZVRyYW5zZmVy
U2Vzc2lvblZULm1tCkBAIC0zNCw3ICszNCw3IEBACiAjaW1wb3J0IDxDb3JlTWVkaWEvQ01TYW1w
bGVCdWZmZXIuaD4KICNpbXBvcnQgPHBhbC9jZi9Db3JlTWVkaWFTb2Z0TGluay5oPgogCi0jaWYg
SEFWRShJT1NVUkZBQ0UpCisjaWYgSEFWRShJT1NVUkZBQ0UpICYmICFQTEFURk9STShJT1NNQUMp
CiAjaW5jbHVkZSA8cGFsL3NwaS9jb2NvYS9JT1N1cmZhY2VTUEkuaD4KICNlbmRpZgogCkBAIC0y
NjUsNyArMjY1LDcgQEAgUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBJbWFnZVRyYW5zZmVy
U2Vzc2lvblZUOjpjcmVhdGVDTVNhbXBsZUJ1ZmZlcihDR0ltYWcKICAgICByZXR1cm4gY3JlYXRl
Q01TYW1wbGVCdWZmZXIocGl4ZWxCdWZmZXIuZ2V0KCksIHNhbXBsZVRpbWUsIHNpemUpOwogfQog
Ci0jaWYgSEFWRShJT1NVUkZBQ0UpCisjaWYgSEFWRShJT1NVUkZBQ0UpICYmICFQTEFURk9STShJ
T1NNQUMpCiAKICNpZiBQTEFURk9STShNQUMpCiBzdGF0aWMgaW50MzJfdCByb3VuZFVwVG9NYWNy
b2Jsb2NrTXVsdGlwbGUoaW50MzJfdCBzaXplKQpAQCAtMzUwLDcgKzM1MCw3IEBAIFJlZlB0cjxN
ZWRpYVNhbXBsZT4gSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDo6Y29udmVydE1lZGlhU2FtcGxlKE1l
ZGlhU2FtcGxlJiBzYW1wCiAgICAgcmV0dXJuIE1lZGlhU2FtcGxlQVZGT2JqQzo6Y3JlYXRlKHJl
c2l6ZWRCdWZmZXIuZ2V0KCksIHNhbXBsZS52aWRlb1JvdGF0aW9uKCksIHNhbXBsZS52aWRlb01p
cnJvcmVkKCkpOwogfQogCi0jaWYgSEFWRShJT1NVUkZBQ0UpCisjaWYgSEFWRShJT1NVUkZBQ0Up
ICYmICFQTEFURk9STShJT1NNQUMpCiBSZWZQdHI8TWVkaWFTYW1wbGU+IEltYWdlVHJhbnNmZXJT
ZXNzaW9uVlQ6OmNyZWF0ZU1lZGlhU2FtcGxlKElPU3VyZmFjZVJlZiBzdXJmYWNlLCBjb25zdCBN
ZWRpYVRpbWUmIHNhbXBsZVRpbWUsIGNvbnN0IEludFNpemUmIHNpemUsIE1lZGlhU2FtcGxlOjpW
aWRlb1JvdGF0aW9uIHJvdGF0aW9uLCBib29sIG1pcnJvcmVkKQogewogICAgIGF1dG8gc2FtcGxl
QnVmZmVyID0gY3JlYXRlQ01TYW1wbGVCdWZmZXIoc3VyZmFjZSwgc2FtcGxlVGltZSwgc2l6ZSk7
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>