<?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>135614</bug_id>
          
          <creation_ts>2014-08-05 10:57:13 -0700</creation_ts>
          <short_desc>[MSE] Implement a maximum buffer size for SourceBuffer</short_desc>
          <delta_ts>2014-08-15 16:11:13 -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>Media</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jer Noble">jer.noble</reporter>
          <assigned_to name="Eric Carlson">eric.carlson</assigned_to>
          <cc>calvaris</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jer.noble</cc>
    
    <cc>ltilve</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1026884</commentid>
    <comment_count>0</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2014-08-05 10:57:13 -0700</bug_when>
    <thetext>[MSE] Implement a maximum buffer size for SourceBuffer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1026886</commentid>
    <comment_count>1</comment_count>
      <attachid>236035</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2014-08-05 10:59:00 -0700</bug_when>
    <thetext>Created attachment 236035
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1027909</commentid>
    <comment_count>2</comment_count>
      <attachid>236295</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-08-08 12:19:59 -0700</bug_when>
    <thetext>Created attachment 236295
Updated WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028558</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-08-12 12:32:48 -0700</bug_when>
    <thetext>Attachment 236295 did not pass style-queue:


ERROR: Source/WebCore/html/HTMLMediaSession.cpp:305:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/html/HTMLMediaSession.cpp:306:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 2 in 10 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>1028560</commentid>
    <comment_count>4</comment_count>
      <attachid>236295</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-08-12 12:35:33 -0700</bug_when>
    <thetext>Comment on attachment 236295
Updated WIP

This doesn&apos;t have any tests yet, but we need to make significant changes to the mock MSE implementation and JS library so I have filed https://bugs.webkit.org/show_bug.cgi?id=135847 for adding tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028561</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-08-12 12:36:37 -0700</bug_when>
    <thetext>&lt;rdar://problem/17896828&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028812</commentid>
    <comment_count>6</comment_count>
      <attachid>236295</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2014-08-13 09:57:51 -0700</bug_when>
    <thetext>Comment on attachment 236295
Updated WIP

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

r=me, with a couple nits:

&gt; Source/WebCore/Modules/mediasource/SourceBuffer.cpp:663
&gt; +    m_bufferFull = extraMemoryCost() + newDataSize &gt; maximumBufferSize;

This is technically against the spec.  The buffer full flag should be modified in step 6.4 of the segment parser loop algorithm, which would best fit in sourceBufferPrivateAppendComplete().

&gt; Source/WebCore/html/HTMLMediaSession.cpp:333
&gt; +size_t HTMLMediaSession::maximumMediaSourceBufferSize(const HTMLMediaElement&amp; element) const
&gt; +{
&gt; +    // A good quality 1080p video uses 8,000 kbps and stereo audio uses 384 kbps, so assume 95% for video and 5% for audio.
&gt; +    const float bufferBudgetPercentageForVideo = .95;
&gt; +    const float bufferBudgetPercentageForAudio = .05;
&gt; +
&gt; +    size_t maximum;
&gt; +    Settings* settings = element.document().settings();
&gt; +    if (settings)
&gt; +        maximum = settings-&gt;maximumSourceBufferSize();
&gt; +    else
&gt; +        maximum = fiveMinutesOf1080PVideo + fiveMinutesStereoAudio;
&gt; +
&gt; +    // Allow an element to buffer as though it as audio-only even if it doesn&apos;t have any active tracks.
&gt; +    size_t bufferSize = static_cast&lt;size_t&gt;(maximum * bufferBudgetPercentageForAudio);
&gt; +    if (element.hasVideo())
&gt; +        bufferSize += static_cast&lt;size_t&gt;(maximum * bufferBudgetPercentageForVideo);
&gt; +
&gt; +    // FIXME: we might want to modify this algorithm to:
&gt; +    // - decrease the maximum size for background tabs
&gt; +    // - decrease the maximum size allowed for inactive elements when a process has more than one
&gt; +    //   element, eg. so a page with many elements which are played one at a time doesn&apos;t keep all
&gt; +    //   everything buffered after an element has been played.
&gt; +
&gt; +    return bufferSize;
&gt; +}

So this code will give the same buffer to a SourceBuffer with a single audio track and a SourceBuffer with a single video track, if both those buffers are attached to the same HTMLMediaElement.  I think we should add to the list of FIXMEs that the budget should be based on what tracks each SourceBuffer contains, rather than the HTMLMediaElement as a whole.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029269</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-08-14 17:20:53 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 236295 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=236295&amp;action=review
&gt; 
&gt; r=me, with a couple nits:
&gt; 
&gt; &gt; Source/WebCore/Modules/mediasource/SourceBuffer.cpp:663
&gt; &gt; +    m_bufferFull = extraMemoryCost() + newDataSize &gt; maximumBufferSize;
&gt; 
&gt; This is technically against the spec.  The buffer full flag should be modified in step 6.4 of the segment parser loop algorithm, which would best fit in sourceBufferPrivateAppendComplete().
&gt; 

Fixed, we only ever set m_bufferFull to true in sourceBufferPrivateAppendComplete.

&gt; &gt; Source/WebCore/html/HTMLMediaSession.cpp:333
&gt; &gt; +size_t HTMLMediaSession::maximumMediaSourceBufferSize(const HTMLMediaElement&amp; element) const
&gt; &gt; +{
&gt; &gt; +    // A good quality 1080p video uses 8,000 kbps and stereo audio uses 384 kbps, so assume 95% for video and 5% for audio.
&gt; &gt; +    const float bufferBudgetPercentageForVideo = .95;
&gt; &gt; +    const float bufferBudgetPercentageForAudio = .05;
&gt; &gt; +
&gt; &gt; +    size_t maximum;
&gt; &gt; +    Settings* settings = element.document().settings();
&gt; &gt; +    if (settings)
&gt; &gt; +        maximum = settings-&gt;maximumSourceBufferSize();
&gt; &gt; +    else
&gt; &gt; +        maximum = fiveMinutesOf1080PVideo + fiveMinutesStereoAudio;
&gt; &gt; +
&gt; &gt; +    // Allow an element to buffer as though it as audio-only even if it doesn&apos;t have any active tracks.
&gt; &gt; +    size_t bufferSize = static_cast&lt;size_t&gt;(maximum * bufferBudgetPercentageForAudio);
&gt; &gt; +    if (element.hasVideo())
&gt; &gt; +        bufferSize += static_cast&lt;size_t&gt;(maximum * bufferBudgetPercentageForVideo);
&gt; &gt; +
&gt; &gt; +    // FIXME: we might want to modify this algorithm to:
&gt; &gt; +    // - decrease the maximum size for background tabs
&gt; &gt; +    // - decrease the maximum size allowed for inactive elements when a process has more than one
&gt; &gt; +    //   element, eg. so a page with many elements which are played one at a time doesn&apos;t keep all
&gt; &gt; +    //   everything buffered after an element has been played.
&gt; &gt; +
&gt; &gt; +    return bufferSize;
&gt; &gt; +}
&gt; 
&gt; So this code will give the same buffer to a SourceBuffer with a single audio track and a SourceBuffer with a single video track, if both those buffers are attached to the same HTMLMediaElement.  I think we should add to the list of FIXMEs that the budget should be based on what tracks each SourceBuffer contains, rather than the HTMLMediaElement as a whole.

Good point! I fixed this by having this method take a SourceBuffer and adding hasAudio and hasVideo to SourceBuffer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029271</commentid>
    <comment_count>8</comment_count>
      <attachid>236639</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-08-14 17:22:22 -0700</bug_when>
    <thetext>Created attachment 236639
Updated patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029400</commentid>
    <comment_count>9</comment_count>
      <attachid>236639</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2014-08-15 11:39:10 -0700</bug_when>
    <thetext>Comment on attachment 236639
Updated patch.

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

r=me, with nits:

&gt; Source/WebCore/Modules/mediasource/SourceBuffer.cpp:92
&gt; +#if !LOG_DISABLED
&gt; +static void logRanges(const String&amp; prefix, const TimeRanges* ranges)
&gt; +{
&gt; +
&gt; +    if (!ranges-&gt;length())
&gt; +        return;
&gt; +
&gt; +    StringBuilder log;
&gt; +
&gt; +    log.append(prefix);
&gt; +    for (size_t i = 0; i &lt; ranges-&gt;length(); ++i)
&gt; +        log.append(String::format(&quot;[%lf .. %lf] &quot;, ranges-&gt;start(i, ASSERT_NO_EXCEPTION), ranges-&gt;end(i, ASSERT_NO_EXCEPTION)));
&gt; +
&gt; +    LOG(MediaSource, &quot;%s&quot;, log.toString().utf8().data());
&gt; +}
&gt; +
&gt; +#define LOG_RANGES(prefix, ranges)  logRanges(prefix, ranges)
&gt; +#else
&gt; +#define LOG_RANGES(prefix, ranges)  ((void)0)
&gt; +#endif

It would be better here to add a &quot;void dump(PrintStream&amp; out) const&quot; member variable to PlatformTimeRanges which does this.  We have an existing one for MediaTime which you could use as an example.

&gt; Source/WebCore/Modules/mediasource/SourceBuffer.cpp:756
&gt; +#if !LOG_DISABLED
&gt; +        LOG(MediaSource, &quot;SourceBuffer::evictCodedFrames(%p) - evicted %zu bytes&quot;, this, initialBufferedSize - extraMemoryCost());
&gt; +#endif

This doesn&apos;t need a #if guard.

&gt; Source/WebCore/Modules/mediasource/SourceBuffer.cpp:763
&gt; +    size_t currentTimeRange = m_buffered-&gt;find(m_source-&gt;currentTime());

TimeRanges methods take doubles, but PlatformTimeRanges methods take MediaTimes. You could re-use the existing &quot;currentMediaTime&quot; by doing a &quot;m_buffered-&gt;ranges().find(currentMediaTime)&quot; here, or by caching the result of m_buffered-&gt;ranges() in a local to use later.

&gt; Source/WebCore/Modules/mediasource/SourceBuffer.cpp:767
&gt; +#if !LOG_DISABLED
&gt; +        LOG(MediaSource, &quot;SourceBuffer::evictCodedFrames(%p) - evicted %zu bytes but FAILED to free enough&quot;, this, initialBufferedSize - extraMemoryCost());
&gt; +#endif

No #if guard necessary.

&gt; Source/WebCore/Modules/mediasource/SourceBuffer.cpp:778
&gt; +        size_t startTimeRange = m_buffered-&gt;find(rangeStart.toDouble());

Ditto here about PlatformTimeRanges. This becomes &quot;m_buffered-&gt;ranges().find(rangeStart)&quot;, or &quot;bufferedRanges.find(rangeStart)&quot; if you use a local variable.

&gt; Source/WebCore/Modules/mediasource/SourceBuffer.cpp:780
&gt; +            size_t endTimeRange = m_buffered-&gt;find(rangeEnd.toDouble());

Ditto.

&gt; Source/WebCore/Modules/mediasource/SourceBuffer.cpp:784
&gt; +            rangeEnd = MediaTime::createWithDouble(m_buffered-&gt;start(endTimeRange, ASSERT_NO_EXCEPTION));

ditto.

&gt; Source/WebCore/Modules/mediasource/SourceBuffer.cpp:801
&gt; +#if !LOG_DISABLED
&gt; +    LOG(MediaSource, &quot;SourceBuffer::evictCodedFrames(%p) - evicted %zu bytes%s&quot;, this, initialBufferedSize - extraMemoryCost(), m_bufferFull ? &quot;&quot; : &quot; but FAILED to free enough&quot;);
&gt; +#endif

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029471</commentid>
    <comment_count>10</comment_count>
      <attachid>236676</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-08-15 14:31:37 -0700</bug_when>
    <thetext>Created attachment 236676
Patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029472</commentid>
    <comment_count>11</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-08-15 14:33:21 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 236639 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=236639&amp;action=review
&gt; 
&gt; It would be better here to add a &quot;void dump(PrintStream&amp; out) const&quot; member variable to PlatformTimeRanges which does this.  We have an existing one for MediaTime which you could use as an example.
&gt; 

Fixed.

&gt; &gt; Source/WebCore/Modules/mediasource/SourceBuffer.cpp:756
&gt; &gt; +#if !LOG_DISABLED
&gt; &gt; +        LOG(MediaSource, &quot;SourceBuffer::evictCodedFrames(%p) - evicted %zu bytes&quot;, this, initialBufferedSize - extraMemoryCost());
&gt; &gt; +#endif
&gt; 
&gt; This doesn&apos;t need a #if guard.
&gt; 

Ditto.

&gt; &gt; Source/WebCore/Modules/mediasource/SourceBuffer.cpp:763
&gt; &gt; +    size_t currentTimeRange = m_buffered-&gt;find(m_source-&gt;currentTime());
&gt; 
&gt; TimeRanges methods take doubles, but PlatformTimeRanges methods take MediaTimes. You could re-use the existing &quot;currentMediaTime&quot; by doing a &quot;m_buffered-&gt;ranges().find(currentMediaTime)&quot; here, or by caching the result of m_buffered-&gt;ranges() in a local to use later.
&gt; 

Ditto.

&gt; &gt; Source/WebCore/Modules/mediasource/SourceBuffer.cpp:767
&gt; &gt; +#if !LOG_DISABLED
&gt; &gt; +        LOG(MediaSource, &quot;SourceBuffer::evictCodedFrames(%p) - evicted %zu bytes but FAILED to free enough&quot;, this, initialBufferedSize - extraMemoryCost());
&gt; &gt; +#endif
&gt; 
&gt; No #if guard necessary.
&gt; 

Ditto.

&gt; &gt; Source/WebCore/Modules/mediasource/SourceBuffer.cpp:778
&gt; &gt; +        size_t startTimeRange = m_buffered-&gt;find(rangeStart.toDouble());
&gt; 
&gt; Ditto here about PlatformTimeRanges. This becomes &quot;m_buffered-&gt;ranges().find(rangeStart)&quot;, or &quot;bufferedRanges.find(rangeStart)&quot; if you use a local variable.
&gt; 

Ditto.

&gt; &gt; Source/WebCore/Modules/mediasource/SourceBuffer.cpp:780
&gt; &gt; +            size_t endTimeRange = m_buffered-&gt;find(rangeEnd.toDouble());
&gt; 
&gt; Ditto.
&gt; 

Ditto.

&gt; &gt; Source/WebCore/Modules/mediasource/SourceBuffer.cpp:784
&gt; &gt; +            rangeEnd = MediaTime::createWithDouble(m_buffered-&gt;start(endTimeRange, ASSERT_NO_EXCEPTION));
&gt; 
&gt; ditto.
&gt; 

Ditto.

&gt; &gt; Source/WebCore/Modules/mediasource/SourceBuffer.cpp:801
&gt; &gt; +#if !LOG_DISABLED
&gt; &gt; +    LOG(MediaSource, &quot;SourceBuffer::evictCodedFrames(%p) - evicted %zu bytes%s&quot;, this, initialBufferedSize - extraMemoryCost(), m_bufferFull ? &quot;&quot; : &quot; but FAILED to free enough&quot;);
&gt; &gt; +#endif
&gt; 
&gt; Ditto.


Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029474</commentid>
    <comment_count>12</comment_count>
      <attachid>236677</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-08-15 14:50:19 -0700</bug_when>
    <thetext>Created attachment 236677
Rebased patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029475</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-08-15 14:52:55 -0700</bug_when>
    <thetext>Attachment 236677 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/PlatformTimeRanges.h:36:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/PlatformTimeRanges.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/Modules/mediasource/SourceBuffer.cpp:610:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 3 in 16 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>1029502</commentid>
    <comment_count>14</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-08-15 16:10:59 -0700</bug_when>
    <thetext>Committed r172657: https://trac.webkit.org/r172657</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236035</attachid>
            <date>2014-08-05 10:59:00 -0700</date>
            <delta_ts>2014-08-08 12:19:59 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-135614-20140805105848.patch</filename>
            <type>text/plain</type>
            <size>7770</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcyMDI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5jcHAKaW5kZXggYzdhMjQyNzgxNzYyY2QxY2U5
NDIyOGI0NjZkYTQ0MjVhN2Q0OWNlOC4uNzMxMThmODgxZGIwODk2NDI3ZDVhMzZhZTUxY2UzNTgz
NjcwNjdhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9T
b3VyY2VCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2Uv
U291cmNlQnVmZmVyLmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2lmIEVOQUJMRShNRURJQV9TT1VS
Q0UpCiAKICNpbmNsdWRlICJBdWRpb1RyYWNrTGlzdC5oIgorI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlUGxhY2Vob2xkZXIu
aCIKICNpbmNsdWRlICJHZW5lcmljRXZlbnRRdWV1ZS5oIgpAQCAtNDMsNyArNDQsOSBAQAogI2lu
Y2x1ZGUgIk1lZGlhRGVzY3JpcHRpb24uaCIKICNpbmNsdWRlICJNZWRpYVNhbXBsZS5oIgogI2lu
Y2x1ZGUgIk1lZGlhU291cmNlLmgiCisjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlNhbXBs
ZU1hcC5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU291cmNlQnVmZmVyUHJp
dmF0ZS5oIgogI2luY2x1ZGUgIlRleHRUcmFja0xpc3QuaCIKICNpbmNsdWRlICJUaW1lUmFuZ2Vz
LmgiCkBAIC0xMDgsNiArMTExLDcgQEAgU291cmNlQnVmZmVyOjpTb3VyY2VCdWZmZXIoUGFzc1Jl
ZjxTb3VyY2VCdWZmZXJQcml2YXRlPiBzb3VyY2VCdWZmZXJQcml2YXRlLCBNZWQKICAgICAsIG1f
cmVjZWl2ZWRGaXJzdEluaXRpYWxpemF0aW9uU2VnbWVudChmYWxzZSkKICAgICAsIG1fYnVmZmVy
ZWQoVGltZVJhbmdlczo6Y3JlYXRlKCkpCiAgICAgLCBtX2FjdGl2ZShmYWxzZSkKKyAgICAsIG1f
YnVmZmVyRnVsbChmYWxzZSkKICAgICAsIG1fYXBwZW5kU3RhdGUoV2FpdGluZ0ZvclNlZ21lbnQp
CiAgICAgLCBtX3RpbWVPZkJ1ZmZlcmluZ01vbml0b3IobW9ub3RvbmljYWxseUluY3JlYXNpbmdU
aW1lKCkpCiAgICAgLCBtX2J1ZmZlcmVkU2luY2VMYXN0TW9uaXRvcigwKQpAQCAtNDA0LDEwICs0
MDgsMTAgQEAgdm9pZCBTb3VyY2VCdWZmZXI6OmFwcGVuZEJ1ZmZlckludGVybmFsKHVuc2lnbmVk
IGNoYXIqIGRhdGEsIHVuc2lnbmVkIHNpemUsIEV4Y2UKICAgICBtX3NvdXJjZS0+b3BlbklmSW5F
bmRlZFN0YXRlKCk7CiAKICAgICAvLyA0LiBSdW4gdGhlIGNvZGVkIGZyYW1lIGV2aWN0aW9uIGFs
Z29yaXRobS4KLSAgICBtX3ByaXZhdGUtPmV2aWN0Q29kZWRGcmFtZXMoKTsKKyAgICBldmljdENv
ZGVkRnJhbWVzKHNpemUpOwogCiAgICAgLy8gNS4gSWYgdGhlIGJ1ZmZlciBmdWxsIGZsYWcgZXF1
YWxzIHRydWUsIHRoZW4gdGhyb3cgYSBRVU9UQV9FWENFRURFRF9FUlIgZXhjZXB0aW9uIGFuZCBh
Ym9ydCB0aGVzZSBzdGVwLgotICAgIGlmIChtX3ByaXZhdGUtPmlzRnVsbCgpKSB7CisgICAgaWYg
KG1fYnVmZmVyRnVsbCkgewogICAgICAgICBlYyA9IFFVT1RBX0VYQ0VFREVEX0VSUjsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KQEAgLTYyMiw2ICs2MjYsNjMgQEAgdm9pZCBTb3VyY2VCdWZmZXI6
OnJlbW92ZVRpbWVyRmlyZWQoVGltZXI8U291cmNlQnVmZmVyPiopCiAgICAgc2NoZWR1bGVFdmVu
dChldmVudE5hbWVzKCkudXBkYXRlZW5kRXZlbnQpOwogfQogCit2b2lkIFNvdXJjZUJ1ZmZlcjo6
ZXZpY3RDb2RlZEZyYW1lcyhzaXplX3QgbmV3RGF0YVNpemUpCit7CisgICAgLy8gMy41LjEzIENv
ZGVkIEZyYW1lIEV2aWN0aW9uIEFsZ29yaXRobQorICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RS
L21lZGlhLXNvdXJjZS8jc291cmNlYnVmZmVyLWNvZGVkLWZyYW1lLWV2aWN0aW9uCisKKyAgICBp
ZiAoaXNSZW1vdmVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoaXMgYWxnb3JpdGht
IGlzIHJ1biB0byBmcmVlIHVwIHNwYWNlIGluIHRoaXMgc291cmNlIGJ1ZmZlciB3aGVuIG5ldyBk
YXRhIGlzIGFwcGVuZGVkLgorICAgIC8vIDEuIExldCBuZXcgZGF0YSBlcXVhbCB0aGUgZGF0YSB0
aGF0IGlzIGFib3V0IHRvIGJlIGFwcGVuZGVkIHRvIHRoaXMgU291cmNlQnVmZmVyLgorICAgIC8v
IDIuIElmIHRoZSBidWZmZXIgZnVsbCBmbGFnIGVxdWFscyBmYWxzZSwgdGhlbiBhYm9ydCB0aGVz
ZSBzdGVwcy4KKyAgICBpZiAoIW1fYnVmZmVyRnVsbCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gMy4gTGV0IHJlbW92YWwgcmFuZ2VzIGVxdWFsIGEgbGlzdCBvZiBwcmVzZW50YXRpb24gdGlt
ZSByYW5nZXMgdGhhdCBjYW4gYmUgZXZpY3RlZCBmcm9tCisgICAgLy8gdGhlIHByZXNlbnRhdGlv
biB0byBtYWtlIHJvb20gZm9yIHRoZSBuZXcgZGF0YS4KKworICAgIC8vIE5PVEU6IGJlZ2luIGJ5
IHJlbW92aW5nIGRhdGEgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBidWZmZXJlZCByYW5nZXMs
IDMwIHNlY29uZHMgYXQKKyAgICAvLyBhIHRpbWUsIHVwIHRvIDMwIHNlY29uZHMgYmVmb3JlIGN1
cnJlbnRUaW1lLgorICAgIHVuc2lnbmVkIG1heGltdW1CdWZmZXJTaXplID0gdGhpcy0+bWF4aW11
bUJ1ZmZlclNpemUoKTsKKworICAgIE1lZGlhVGltZSB0aGlydHlTZWNvbmRzID0gTWVkaWFUaW1l
KDMwLCAxKTsKKyAgICBNZWRpYVRpbWUgY3VycmVudFRpbWUgPSBNZWRpYVRpbWU6OmNyZWF0ZVdp
dGhEb3VibGUobV9zb3VyY2UtPmN1cnJlbnRUaW1lKCkpOworICAgIE1lZGlhVGltZSBtYXhpbXVt
UmFuZ2VFbmQgPSBjdXJyZW50VGltZSAtIHRoaXJ0eVNlY29uZHM7CisKKyAgICBNZWRpYVRpbWUg
cmFuZ2VTdGFydCA9IE1lZGlhVGltZTo6emVyb1RpbWUoKTsKKyAgICBNZWRpYVRpbWUgcmFuZ2VF
bmQgPSByYW5nZVN0YXJ0ICsgdGhpcnR5U2Vjb25kczsKKyAgICB3aGlsZSAocmFuZ2VTdGFydCA8
IG1heGltdW1SYW5nZUVuZCkgeworICAgICAgICAvLyA0LiBGb3IgZWFjaCByYW5nZSBpbiByZW1v
dmFsIHJhbmdlcywgcnVuIHRoZSBjb2RlZCBmcmFtZSByZW1vdmFsIGFsZ29yaXRobSB3aXRoIHN0
YXJ0IGFuZAorICAgICAgICAvLyBlbmQgZXF1YWwgdG8gdGhlIHJlbW92YWwgcmFuZ2Ugc3RhcnQg
YW5kIGVuZCB0aW1lc3RhbXAgcmVzcGVjdGl2ZWx5LgorICAgICAgICByZW1vdmVDb2RlZEZyYW1l
cyhyYW5nZVN0YXJ0LCBzdGQ6Om1pbihyYW5nZUVuZCwgbWF4aW11bVJhbmdlRW5kKSk7CisgICAg
ICAgIGlmIChleHRyYU1lbW9yeUNvc3QoKSArIG5ld0RhdGFTaXplIDwgbWF4aW11bUJ1ZmZlclNp
emUpIHsKKyAgICAgICAgICAgIG1fYnVmZmVyRnVsbCA9IGZhbHNlOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgICAgICByYW5nZVN0YXJ0ICs9IHRoaXJ0eVNlY29uZHM7Cisg
ICAgICAgIHJhbmdlRW5kICs9IHRoaXJ0eVNlY29uZHM7CisgICAgfQorfQorCit1bnNpZ25lZCBT
b3VyY2VCdWZmZXI6Om1heGltdW1CdWZmZXJTaXplKCkgY29uc3QKK3sKKyAgICBpZiAoaXNSZW1v
dmVkKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgSFRNTE1lZGlhRWxlbWVudCogZWxlbWVu
dCA9IG1fc291cmNlLT5tZWRpYUVsZW1lbnQoKTsKKyAgICBpZiAoIWVsZW1lbnQpCisgICAgICAg
IHJldHVybiAwOworCisgICAgUGFnZSogcGFnZSA9IGVsZW1lbnQtPmRvY3VtZW50KCkucGFnZSgp
OworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gcGFnZS0+
c2V0dGluZ3MoKS5tYXhpbXVtU291cmNlQnVmZmVyU2l6ZSgpOworfQorCiBjb25zdCBBdG9taWNT
dHJpbmcmIFNvdXJjZUJ1ZmZlcjo6ZGVjb2RlRXJyb3IoKQogewogICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxBdG9taWNTdHJpbmc+IGRlY29kZSgiZGVjb2RlIiwgQXRvbWljU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7CkBAIC0xNDgwLDYgKzE1NDEsMTAgQEAgYm9vbCBTb3VyY2VCdWZm
ZXI6Omhhc0N1cnJlbnRUaW1lKCkgY29uc3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
TWVkaWFUaW1lIGN1cnJlbnRUaW1lID0gTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKG1fc291
cmNlLT5jdXJyZW50VGltZSgpKTsKKyAgICBNZWRpYVRpbWUgZHVyYXRpb24gPSBNZWRpYVRpbWU6
OmNyZWF0ZVdpdGhEb3VibGUobV9zb3VyY2UtPmR1cmF0aW9uKCkpOworICAgIGlmIChjdXJyZW50
VGltZSA+PSBkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiByYW5nZXMgPSBidWZmZXJlZEFjY291bnRpbmdGb3JF
bmRPZlN0cmVhbSgpOwogICAgIHJldHVybiBhYnMocmFuZ2VzLT5uZWFyZXN0KGN1cnJlbnRUaW1l
KSAtIGN1cnJlbnRUaW1lKSA8PSBjdXJyZW50VGltZUZ1ZGdlRmFjdG9yKCk7CiB9CkBAIC0xNDk0
LDYgKzE1NTksMTAgQEAgYm9vbCBTb3VyY2VCdWZmZXI6Omhhc0Z1dHVyZVRpbWUoKSBjb25zdAog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBNZWRpYVRpbWUgY3VycmVudFRpbWUgPSBNZWRp
YVRpbWU6OmNyZWF0ZVdpdGhEb3VibGUobV9zb3VyY2UtPmN1cnJlbnRUaW1lKCkpOworICAgIE1l
ZGlhVGltZSBkdXJhdGlvbiA9IE1lZGlhVGltZTo6Y3JlYXRlV2l0aERvdWJsZShtX3NvdXJjZS0+
ZHVyYXRpb24oKSk7CisgICAgaWYgKGN1cnJlbnRUaW1lID49IGR1cmF0aW9uKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKwogICAgIE1lZGlhVGltZSBuZWFyZXN0ID0gcmFuZ2VzLT5uZWFyZXN0KGN1
cnJlbnRUaW1lKTsKICAgICBpZiAoYWJzKG5lYXJlc3QgLSBjdXJyZW50VGltZSkgPiBjdXJyZW50
VGltZUZ1ZGdlRmFjdG9yKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE1MDMsNyArMTU3
Miw2IEBAIGJvb2wgU291cmNlQnVmZmVyOjpoYXNGdXR1cmVUaW1lKCkgY29uc3QKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgTWVkaWFUaW1lIGxvY2FsRW5kID0gcmFuZ2VzLT5lbmQoZm91
bmQpOwotICAgIE1lZGlhVGltZSBkdXJhdGlvbiA9IE1lZGlhVGltZTo6Y3JlYXRlV2l0aERvdWJs
ZShtX3NvdXJjZS0+ZHVyYXRpb24oKSk7CiAgICAgaWYgKGxvY2FsRW5kID09IGR1cmF0aW9uKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIApAQCAtMTUzNywxMiArMTYwNSwxOCBAQCBib29sIFNvdXJj
ZUJ1ZmZlcjo6Y2FuUGxheVRocm91Z2goKQogICAgIHJldHVybiB1bmJ1ZmZlcmVkVGltZS50b0Rv
dWJsZSgpIC8gbV9hdmVyYWdlQnVmZmVyUmF0ZSA8IHRpbWVSZW1haW5pbmcudG9Eb3VibGUoKTsK
IH0KIAotdm9pZCBTb3VyY2VCdWZmZXI6OnJlcG9ydEV4dHJhTWVtb3J5Q29zdCgpCitzaXplX3Qg
U291cmNlQnVmZmVyOjpleHRyYU1lbW9yeUNvc3QoKSBjb25zdAogewogICAgIHNpemVfdCBleHRy
YU1lbW9yeUNvc3QgPSBtX3BlbmRpbmdBcHBlbmREYXRhLmNhcGFjaXR5KCk7CiAgICAgZm9yIChh
dXRvJiB0cmFja0J1ZmZlciA6IG1fdHJhY2tCdWZmZXJNYXAudmFsdWVzKCkpCiAgICAgICAgIGV4
dHJhTWVtb3J5Q29zdCArPSB0cmFja0J1ZmZlci5zYW1wbGVzLnNpemVJbkJ5dGVzKCk7CiAKKyAg
ICByZXR1cm4gZXh0cmFNZW1vcnlDb3N0OworfQorCit2b2lkIFNvdXJjZUJ1ZmZlcjo6cmVwb3J0
RXh0cmFNZW1vcnlDb3N0KCkKK3sKKyAgICBzaXplX3QgZXh0cmFNZW1vcnlDb3N0ID0gdGhpcy0+
ZXh0cmFNZW1vcnlDb3N0KCk7CiAgICAgaWYgKGV4dHJhTWVtb3J5Q29zdCA8IG1fcmVwb3J0ZWRF
eHRyYU1lbW9yeUNvc3QpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmgKaW5kZXggMWMyZGJjMGNlZTIxMWMw
MTVkNDU3ZDdlYWYxMjJhZDdhZjc0ZGUzOC4uZGQyNTE0YjVhZWE3NjJmM2VhMzQ4YzQ0NDIzODA0
MGIxOTA1N2Y2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJj
ZS9Tb3VyY2VCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNl
L1NvdXJjZUJ1ZmZlci5oCkBAIC0xNTMsMTIgKzE1MywxNSBAQCBwcml2YXRlOgogICAgIHZvaWQg
cmVlbnF1ZXVlTWVkaWFGb3JUaW1lKFRyYWNrQnVmZmVyJiwgQXRvbWljU3RyaW5nIHRyYWNrSUQs
IGNvbnN0IE1lZGlhVGltZSYpOwogICAgIHZvaWQgcHJvdmlkZU1lZGlhRGF0YShUcmFja0J1ZmZl
ciYsIEF0b21pY1N0cmluZyB0cmFja0lEKTsKICAgICB2b2lkIGRpZERyb3BTYW1wbGUoKTsKKyAg
ICB2b2lkIGV2aWN0Q29kZWRGcmFtZXMoc2l6ZV90IG5ld0RhdGFTaXplKTsKKyAgICB1bnNpZ25l
ZCBtYXhpbXVtQnVmZmVyU2l6ZSgpIGNvbnN0OwogCiAgICAgdm9pZCBtb25pdG9yQnVmZmVyaW5n
UmF0ZSgpOwogCiAgICAgdm9pZCByZW1vdmVUaW1lckZpcmVkKFRpbWVyPFNvdXJjZUJ1ZmZlcj4q
KTsKICAgICB2b2lkIHJlbW92ZUNvZGVkRnJhbWVzKGNvbnN0IE1lZGlhVGltZSYgc3RhcnQsIGNv
bnN0IE1lZGlhVGltZSYgZW5kKTsKIAorICAgIHNpemVfdCBleHRyYU1lbW9yeUNvc3QoKSBjb25z
dDsKICAgICB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5Q29zdCgpOwogCiAgICAgc3RkOjp1bmlxdWVf
cHRyPFBsYXRmb3JtVGltZVJhbmdlcz4gYnVmZmVyZWRBY2NvdW50aW5nRm9yRW5kT2ZTdHJlYW0o
KSBjb25zdDsKQEAgLTE5MSw2ICsxOTQsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9yZWNlaXZl
ZEZpcnN0SW5pdGlhbGl6YXRpb25TZWdtZW50OwogICAgIFJlZlB0cjxUaW1lUmFuZ2VzPiBtX2J1
ZmZlcmVkOwogICAgIGJvb2wgbV9hY3RpdmU7CisgICAgYm9vbCBtX2J1ZmZlckZ1bGw7CiAKICAg
ICBlbnVtIEFwcGVuZFN0YXRlVHlwZSB7IFdhaXRpbmdGb3JTZWdtZW50LCBQYXJzaW5nSW5pdFNl
Z21lbnQsIFBhcnNpbmdNZWRpYVNlZ21lbnQgfTsKICAgICBBcHBlbmRTdGF0ZVR5cGUgbV9hcHBl
bmRTdGF0ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaW4gYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmluCmluZGV4IDg5MGJiM2Y5YTkxMjc2NGRkNzBi
MmVmOWExZDc2NDAyZTVhNWIwZTMuLmUwOGRhMDA0NDE2NWYzNjIyODA5ZGRjNmM1N2ZmZjJhZTY0
MWIzMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaW4KKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5pbgpAQCAtMjI4LDMgKzIyOCw2IEBAIHVzZUlt
YWdlRG9jdW1lbnRGb3JTdWJmcmFtZVBERiBpbml0aWFsPWZhbHNlCiAjIEFsbG93IGNsaWVudHMg
dG8gcGVybWl0IG5hdmlnYXRpb24gdG8gYW4gaW52YWxpZCBVUkwuIFNvbWUgYXBwcyBtYXkgdXNl
IGludmFsaWQgVVJMcwogIyBhcyBhIG1lYW5zIHRvIHBhc3MgZGF0YSBmcm9tIHRoZSB3ZWItcG9y
dGlvbiBvZiB0aGVpciBhcHAgdG8gdGhlIG5hdGl2ZSBwb3J0aW9uLgogYWxsb3dOYXZpZ2F0aW9u
VG9JbnZhbGlkVVJMIGluaXRpYWw9ZmFsc2UKKworIyBBbGxvdyBTb3VyY2VCdWZmZXJzIHRvIHN0
b3JlIHVwIHRvIDQwME1CIGVhY2gsIGVub3VnaCBmb3IgMTBtIG9mIDEwODBwIHZpZGVvLgorbWF4
aW11bVNvdXJjZUJ1ZmZlclNpemUgdHlwZT1pbnQsIGluaXRpYWw9NDE5NDMwNDAwLCBjb25kaXRp
b25hbD1NRURJQV9TT1VSQ0UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236295</attachid>
            <date>2014-08-08 12:19:59 -0700</date>
            <delta_ts>2014-08-14 17:22:22 -0700</delta_ts>
            <desc>Updated WIP</desc>
            <filename>patch_4.txt</filename>
            <type>text/plain</type>
            <size>27378</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MjM0NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYyIEBACisyMDE0LTA4LTA4ICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNU0VdIEltcGxlbWVu
dCBhIG1heGltdW0gYnVmZmVyIHNpemUgZm9yIFNvdXJjZUJ1ZmZlcgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1NjE0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNlL1Nh
bXBsZU1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTYW1wbGVNYXA6OmFkZFNhbXBsZSk6IERy
aXZlLWJ5IHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbjogc2FtcGxlLT5wcmVzZW50YXRpb25UaW1l
KCkKKyAgICAgICAgICAgIGlzIHVzZWQgbW9yZSB0aGFuIG9uY2UsIHN0YXNoIGl0IGluIGEgbG9j
YWwgdmFyaWFibGUuCisgICAgICAgIChXZWJDb3JlOjpTYW1wbGVNYXA6OnJlbW92ZVNhbXBsZSk6
IERpdHRvLgorCisgICAgICAgICogTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyOjpTb3VyY2VCdWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6U291cmNlQnVmZmVyOjpyZW1vdmUpOiBPcHRpbWl6ZSBsb2dnaW5nLiBCdWZm
ZXIgZnVsbCBhbmQgY29kZWQgZnJhbWUgZXZpY3Rpb24gbG9naWMKKyAgICAgICAgICAgIGlzIGlu
IFNvdXJjZUJ1ZmZlciBpbnN0ZWFkIG9mIFNvdXJjZUJ1ZmZlclByaXZhdGUuCisgICAgICAgIChX
ZWJDb3JlOjpTb3VyY2VCdWZmZXI6OmFwcGVuZEJ1ZmZlckludGVybmFsKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXI6OnJlbW92ZUNvZGVkRnJhbWVzKTogSW1wcm92ZSBs
b2dnaW5nLiBBdm9pZCBkZWJ1ZyBidWlsZCBhc3NlcnQgd2hlbgorICAgICAgICAgICAgY3VycmVu
dCB0aW1lIGlzIGFmdGVyIGxhc3QgZW5xdWV1ZWQgcHJlc2VudGF0aW9uIHRpbWUuCisgICAgICAg
IChXZWJDb3JlOjpTb3VyY2VCdWZmZXI6OmV2aWN0Q29kZWRGcmFtZXMpOiBUaGUgY29kZWQgZnJh
bWUgZXZpY3Rpb24gYWxnb3JpdGhtOiBhdHRlbXB0IHRvIAorICAgICAgICAgICAgZnJlZSBlbm91
Z2ggY29kZWQgZnJhbWVzIHRvIGFsbG93IGFuIGFwcGVuZCB3aXRob3V0IGdvaW5nIG92ZXIgdGhl
IG1heGltdW0gYnVmZmVyZWQKKyAgICAgICAgICAgIHNpemUuIEZyZWUgZnJhbWVzIGluIDMwIHNl
Y29uZCBjaHVua3MgZnJvbSB0aGUgYmVnaW5uaW5nIGFuZCB0aGVuIGZyb20gdGhlIGVuZCwgYnV0
CisgICAgICAgICAgICBwcmVzZXJ2ZSAzMCBzZWNvbmRzIGJlZm9yZSBhbmQgYWZ0ZXIgY3VycmVu
dCB0aW1lLgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyOjptYXhpbXVtQnVmZmVyU2l6
ZSk6IFJldHVybiB0aGUgbWF4aW11bSBhbW91bnQgb2YgZGF0YSB0aGF0IGNhbiAKKyAgICAgICAg
ICAgIGJlIGJ1ZmZlcmVkLgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyOjpoYXNDdXJy
ZW50VGltZSk6IFJldHVybiB0cnVlIGlmIGN1cnJlbnRUaW1lIGlzIGdyZWF0ZXIgdGhhbiBkdXJh
dGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlcjo6aGFzRnV0dXJlVGltZSk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyOjpleHRyYU1lbW9yeUNvc3QpOiBS
ZXR1cm4gdGhlIGFtb3VudCBvZiBkYXRhIGJ1ZmZlcmVkOiB0aGUgc2l6ZSBvZgorICAgICAgICAg
ICAgdGhlIGlucHV0IGJ1ZmZlciBwbHVzIHRoZSBzaXplIG9mIGFsbCB0cmFjayBzYW1wbGVzLgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyOjpyZXBvcnRFeHRyYU1lbW9yeUNvc3QpOiBN
b3ZlIGJ1ZmZlcmVkIHNpemUgY2FsY3VsYXRpb24gdG8gZXh0cmFNZW1vcnlDb3N0LgorICAgICAg
ICAqIE1vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmg6IERyaXZlLWJ5IHNpemUgb3B0
aW1pemF0aW9uIGJ5IG1vdmluZyBhbGwgYm9vbCBtZW1iZXIKKyAgICAgICAgICAgIHZhcmlhYmxl
cyB0byB0aGUgZW5kIG9mIGNsYXNzLgorCisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnJlZnJlc2hDYWNoZWRU
aW1lKTogRHJpdmUtYnkgcmVtb3ZhbCBvZiBvdmVybHkgY2hhdHR5IGxvZ2dpbmcuCisgICAgICAg
IChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjptYXhpbXVtU291cmNlQnVmZmVyU2l6ZSk6IE5l
dywgbWF4aW11bSBzb3VyY2UgYnVmZmVyIHNpemUuCisgICAgICAgICogaHRtbC9IVE1MTWVkaWFF
bGVtZW50Lmg6CisKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYVNlc3Npb24uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTE1lZGlhU2Vzc2lvbjo6bWF4aW11bU1lZGlhU291cmNlQnVmZmVyU2l6
ZSk6IE5ldywgZ2V0IG1heGltdW0gc291cmNlIGJ1ZmZlciAKKyAgICAgICAgICAgIHNpemUgZnJv
bSBzZXR0aW5ncywgcmV0dXJuIGZ1bGwgYW1vdW50IGZvciBhbiBlbWxlbWVudCB3aXRoIHZpZGVv
IGFuZCBhdWRpbywgcmV0dXJuIDUlCisgICAgICAgICAgICBvZiB0aGUgbWF4aW11bSBmb3IgYW4g
YXVkaW8tb25seSBlbGVtZW50LgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhU2Vzc2lvbi5oOgor
CisgICAgICAgICogcGFnZS9TZXR0aW5ncy5pbjogQWRkIG1heGltdW1Tb3VyY2VCdWZmZXJTaXpl
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnVmZmVyUHJpdmF0ZS5oOiBE
ZWxldGUgZXZpY3RDb2RlZEZyYW1lcyBhbmQgaXNGdWxsLCB0aGF0IGxvZ2ljCisgICAgICAgICAg
ICBpcyBub3QgaW4gU291cmNlQnVmZmVyLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUHJpdmF0ZUFW
Rk9iakMubW06CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6
cHJvY2Vzc0NvZGVkRnJhbWUpOiBEcml2ZS1ieSBsb2dnaW5nIGZpeC4KKyAgICAgICAgKFdlYkNv
cmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpldmljdENvZGVkRnJhbWVzKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjppc0Z1bGwp
OiBEZWxldGVkLgorCisgICAgICAgICogcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrU291
cmNlQnVmZmVyUHJpdmF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNb2NrU291cmNlQnVmZmVy
UHJpdmF0ZTo6ZXZpY3RDb2RlZEZyYW1lcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpN
b2NrU291cmNlQnVmZmVyUHJpdmF0ZTo6aXNGdWxsKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tTb3VyY2VCdWZmZXJQcml2YXRlLmg6CisKIDIwMTQt
MDgtMDggIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAg
ICAgICBQcm9ncmVzcyB0b3dhcmRzIHVzaW5nIENNYWtlIG9uIE1hYy4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU2FtcGxlTWFwLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NhbXBsZU1hcC5jcHAJKHJldmlzaW9u
IDE3MjM0MikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU2FtcGxlTWFw
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDkgKzExMywxMSBAQCB2b2lkIFNhbXBsZU1hcDo6
YWRkU2FtcGxlKFBhc3NSZWZQdHI8TWVkCiAgICAgUmVmUHRyPE1lZGlhU2FtcGxlPiBzYW1wbGUg
PSBwcnBTYW1wbGU7CiAgICAgQVNTRVJUKHNhbXBsZSk7CiAKLSAgICBwcmVzZW50YXRpb25PcmRl
cigpLm1fc2FtcGxlcy5pbnNlcnQoUHJlc2VudGF0aW9uT3JkZXJTYW1wbGVNYXA6Ok1hcFR5cGU6
OnZhbHVlX3R5cGUoc2FtcGxlLT5wcmVzZW50YXRpb25UaW1lKCksIHNhbXBsZSkpOworICAgIE1l
ZGlhVGltZSBwcmVzZW50YXRpb25UaW1lID0gc2FtcGxlLT5wcmVzZW50YXRpb25UaW1lKCk7CiAK
LSAgICBhdXRvIGRlY29kZUtleSA9IERlY29kZU9yZGVyU2FtcGxlTWFwOjpLZXlUeXBlKHNhbXBs
ZS0+ZGVjb2RlVGltZSgpLCBzYW1wbGUtPnByZXNlbnRhdGlvblRpbWUoKSk7CisgICAgcHJlc2Vu
dGF0aW9uT3JkZXIoKS5tX3NhbXBsZXMuaW5zZXJ0KFByZXNlbnRhdGlvbk9yZGVyU2FtcGxlTWFw
OjpNYXBUeXBlOjp2YWx1ZV90eXBlKHByZXNlbnRhdGlvblRpbWUsIHNhbXBsZSkpOworCisgICAg
YXV0byBkZWNvZGVLZXkgPSBEZWNvZGVPcmRlclNhbXBsZU1hcDo6S2V5VHlwZShzYW1wbGUtPmRl
Y29kZVRpbWUoKSwgcHJlc2VudGF0aW9uVGltZSk7CiAgICAgZGVjb2RlT3JkZXIoKS5tX3NhbXBs
ZXMuaW5zZXJ0KERlY29kZU9yZGVyU2FtcGxlTWFwOjpNYXBUeXBlOjp2YWx1ZV90eXBlKGRlY29k
ZUtleSwgc2FtcGxlKSk7CiAKICAgICBtX3RvdGFsU2l6ZSArPSBzYW1wbGUtPnNpemVJbkJ5dGVz
KCk7CkBAIC0xMjQsOSArMTI2LDExIEBAIHZvaWQgU2FtcGxlTWFwOjphZGRTYW1wbGUoUGFzc1Jl
ZlB0cjxNZWQKIHZvaWQgU2FtcGxlTWFwOjpyZW1vdmVTYW1wbGUoTWVkaWFTYW1wbGUqIHNhbXBs
ZSkKIHsKICAgICBBU1NFUlQoc2FtcGxlKTsKLSAgICBwcmVzZW50YXRpb25PcmRlcigpLm1fc2Ft
cGxlcy5lcmFzZShzYW1wbGUtPnByZXNlbnRhdGlvblRpbWUoKSk7CisgICAgTWVkaWFUaW1lIHBy
ZXNlbnRhdGlvblRpbWUgPSBzYW1wbGUtPnByZXNlbnRhdGlvblRpbWUoKTsKKworICAgIHByZXNl
bnRhdGlvbk9yZGVyKCkubV9zYW1wbGVzLmVyYXNlKHByZXNlbnRhdGlvblRpbWUpOwogCi0gICAg
YXV0byBkZWNvZGVLZXkgPSBEZWNvZGVPcmRlclNhbXBsZU1hcDo6S2V5VHlwZShzYW1wbGUtPmRl
Y29kZVRpbWUoKSwgc2FtcGxlLT5wcmVzZW50YXRpb25UaW1lKCkpOworICAgIGF1dG8gZGVjb2Rl
S2V5ID0gRGVjb2RlT3JkZXJTYW1wbGVNYXA6OktleVR5cGUoc2FtcGxlLT5kZWNvZGVUaW1lKCks
IHByZXNlbnRhdGlvblRpbWUpOwogICAgIGRlY29kZU9yZGVyKCkubV9zYW1wbGVzLmVyYXNlKGRl
Y29kZUtleSk7CiAKICAgICBtX3RvdGFsU2l6ZSAtPSBzYW1wbGUtPnNpemVJbkJ5dGVzKCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VC
dWZmZXIuY3BwCShyZXZpc2lvbiAxNzIzNDIpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMiwxMiArMTAy
LDkgQEAgU291cmNlQnVmZmVyOjpTb3VyY2VCdWZmZXIoUGFzc1JlZjxTb3VyYwogICAgICwgbV9w
cml2YXRlKFdURjo6bW92ZShzb3VyY2VCdWZmZXJQcml2YXRlKSkKICAgICAsIG1fc291cmNlKHNv
dXJjZSkKICAgICAsIG1fYXN5bmNFdmVudFF1ZXVlKCp0aGlzKQotICAgICwgbV91cGRhdGluZyhm
YWxzZSkKICAgICAsIG1fYXBwZW5kQnVmZmVyVGltZXIodGhpcywgJlNvdXJjZUJ1ZmZlcjo6YXBw
ZW5kQnVmZmVyVGltZXJGaXJlZCkKICAgICAsIG1faGlnaGVzdFByZXNlbnRhdGlvbkVuZFRpbWVz
dGFtcChNZWRpYVRpbWU6OmludmFsaWRUaW1lKCkpCi0gICAgLCBtX3JlY2VpdmVkRmlyc3RJbml0
aWFsaXphdGlvblNlZ21lbnQoZmFsc2UpCiAgICAgLCBtX2J1ZmZlcmVkKFRpbWVSYW5nZXM6OmNy
ZWF0ZSgpKQotICAgICwgbV9hY3RpdmUoZmFsc2UpCiAgICAgLCBtX2FwcGVuZFN0YXRlKFdhaXRp
bmdGb3JTZWdtZW50KQogICAgICwgbV90aW1lT2ZCdWZmZXJpbmdNb25pdG9yKG1vbm90b25pY2Fs
bHlJbmNyZWFzaW5nVGltZSgpKQogICAgICwgbV9idWZmZXJlZFNpbmNlTGFzdE1vbml0b3IoMCkK
QEAgLTExNiw2ICsxMTMsMTAgQEAgU291cmNlQnVmZmVyOjpTb3VyY2VCdWZmZXIoUGFzc1JlZjxT
b3VyYwogICAgICwgbV9wZW5kaW5nUmVtb3ZlU3RhcnQoTWVkaWFUaW1lOjppbnZhbGlkVGltZSgp
KQogICAgICwgbV9wZW5kaW5nUmVtb3ZlRW5kKE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKSkKICAg
ICAsIG1fcmVtb3ZlVGltZXIodGhpcywgJlNvdXJjZUJ1ZmZlcjo6cmVtb3ZlVGltZXJGaXJlZCkK
KyAgICAsIG1fdXBkYXRpbmcoZmFsc2UpCisgICAgLCBtX3JlY2VpdmVkRmlyc3RJbml0aWFsaXph
dGlvblNlZ21lbnQoZmFsc2UpCisgICAgLCBtX2FjdGl2ZShmYWxzZSkKKyAgICAsIG1fYnVmZmVy
RnVsbChmYWxzZSkKIHsKICAgICBBU1NFUlQobV9zb3VyY2UpOwogCkBAIC0yMzMsNyArMjM0LDgg
QEAgdm9pZCBTb3VyY2VCdWZmZXI6OmFib3J0KEV4Y2VwdGlvbkNvZGUmIAogCiB2b2lkIFNvdXJj
ZUJ1ZmZlcjo6cmVtb3ZlKGRvdWJsZSBzdGFydCwgZG91YmxlIGVuZCwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7Ci0gICAgTE9HKE1lZGlhU291cmNlLCAiU291cmNlQnVmZmVyOjpyZW1vdmUoJXApIC0g
c3RhcnQoJXMpLCBlbmQoJXMpIiwgdGhpcywgdG9TdHJpbmcoc3RhcnQpLnV0ZjgoKS5kYXRhKCks
IHRvU3RyaW5nKGVuZCkudXRmOCgpLmRhdGEoKSk7CisgICAgTE9HKE1lZGlhU291cmNlLCAiU291
cmNlQnVmZmVyOjpyZW1vdmUoJXApIC0gc3RhcnQoJWxmKSwgZW5kKCVsZikiLCB0aGlzLCBzdGFy
dCwgZW5kKTsKKwogICAgIC8vIFNlY3Rpb24gMy4yIHJlbW92ZSgpIG1ldGhvZCBzdGVwcy4KICAg
ICAvLyAxLiBJZiBzdGFydCBpcyBuZWdhdGl2ZSBvciBncmVhdGVyIHRoYW4gZHVyYXRpb24sIHRo
ZW4gdGhyb3cgYW4gSW52YWxpZEFjY2Vzc0Vycm9yIGV4Y2VwdGlvbiBhbmQgYWJvcnQgdGhlc2Ug
c3RlcHMuCiAgICAgLy8gMi4gSWYgZW5kIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBzdGFydCwg
dGhlbiB0aHJvdyBhbiBJbnZhbGlkQWNjZXNzRXJyb3IgZXhjZXB0aW9uIGFuZCBhYm9ydCB0aGVz
ZSBzdGVwcy4KQEAgLTQwNCwxMCArNDA2LDExIEBAIHZvaWQgU291cmNlQnVmZmVyOjphcHBlbmRC
dWZmZXJJbnRlcm5hbCgKICAgICBtX3NvdXJjZS0+b3BlbklmSW5FbmRlZFN0YXRlKCk7CiAKICAg
ICAvLyA0LiBSdW4gdGhlIGNvZGVkIGZyYW1lIGV2aWN0aW9uIGFsZ29yaXRobS4KLSAgICBtX3By
aXZhdGUtPmV2aWN0Q29kZWRGcmFtZXMoKTsKKyAgICBldmljdENvZGVkRnJhbWVzKHNpemUpOwog
CiAgICAgLy8gNS4gSWYgdGhlIGJ1ZmZlciBmdWxsIGZsYWcgZXF1YWxzIHRydWUsIHRoZW4gdGhy
b3cgYSBRVU9UQV9FWENFRURFRF9FUlIgZXhjZXB0aW9uIGFuZCBhYm9ydCB0aGVzZSBzdGVwLgot
ICAgIGlmIChtX3ByaXZhdGUtPmlzRnVsbCgpKSB7CisgICAgaWYgKG1fYnVmZmVyRnVsbCkgewor
ICAgICAgICBMT0coTWVkaWFTb3VyY2UsICJTb3VyY2VCdWZmZXI6OmFwcGVuZEJ1ZmZlckludGVy
bmFsKCVwKSAtICBidWZmZXIgZnVsbCwgZmFpbGluZyB3aXRoIFFVT1RBX0VYQ0VFREVEX0VSUiBl
cnJvciIsIHRoaXMpOwogICAgICAgICBlYyA9IFFVT1RBX0VYQ0VFREVEX0VSUjsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KQEAgLTUyNiw3ICs1MjksMTEgQEAgc3RhdGljIGJvb2wgZGVjb2RlVGlt
ZUNvbXBhcmF0b3IoY29uc3QgUAogCiB2b2lkIFNvdXJjZUJ1ZmZlcjo6cmVtb3ZlQ29kZWRGcmFt
ZXMoY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbmQpCiB7Ci0gICAg
TE9HKE1lZGlhU291cmNlLCAiU291cmNlQnVmZmVyOjpyZW1vdmVDb2RlZEZyYW1lcyglcCkgLSBz
dGFydCglcyksIGVuZCglcykiLCB0aGlzLCB0b1N0cmluZyhzdGFydCkudXRmOCgpLmRhdGEoKSwg
dG9TdHJpbmcoZW5kKS51dGY4KCkuZGF0YSgpKTsKKyNpZiAhTE9HX0RJU0FCTEVECisgICAgZG91
YmxlIGVhcmxpZXN0U2FtcGxlID0gZW5kLnRvRG91YmxlKCk7CisgICAgZG91YmxlIGxhdGVzdFNh
bXBsZSA9IHN0YXJ0LnRvRG91YmxlKCk7CisgICAgc2l6ZV90IGJ5dGVzUmVtb3ZlZCA9IDA7Cisj
ZW5kaWYKIAogICAgIC8vIDMuNS45IENvZGVkIEZyYW1lIFJlbW92YWwgQWxnb3JpdGhtCiAgICAg
Ly8gaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9odG1sLW1lZGlhL3Jhdy1maWxlL3RpcC9tZWRpYS1z
b3VyY2UvbWVkaWEtc291cmNlLmh0bWwjc291cmNlYnVmZmVyLWNvZGVkLWZyYW1lLXJlbW92YWwK
QEAgLTU3MCwxOSArNTc3LDMzIEBAIHZvaWQgU291cmNlQnVmZmVyOjpyZW1vdmVDb2RlZEZyYW1l
cyhjb24KICAgICAgICAgUmVmUHRyPFRpbWVSYW5nZXM+IGVyYXNlZFJhbmdlcyA9IFRpbWVSYW5n
ZXM6OmNyZWF0ZSgpOwogICAgICAgICBNZWRpYVRpbWUgbWljcm9zZWNvbmQoMSwgMTAwMDAwMCk7
CiAgICAgICAgIGZvciAoYXV0byBlcmFzZWRJdCA6IGVyYXNlZFNhbXBsZXMpIHsKKyNpZiAhTE9H
X0RJU0FCTEVECisgICAgICAgICAgICBzaXplX3Qgc3RhcnRCdWZmZXJTaXplID0gdHJhY2tCdWZm
ZXIuc2FtcGxlcy5zaXplSW5CeXRlcygpOworI2VuZGlmCiAgICAgICAgICAgICBSZWZQdHI8TWVk
aWFTYW1wbGU+JiBzYW1wbGUgPSBlcmFzZWRJdC5zZWNvbmQ7CisKICAgICAgICAgICAgIHRyYWNr
QnVmZmVyLnNhbXBsZXMucmVtb3ZlU2FtcGxlKHNhbXBsZS5nZXQoKSk7CiAgICAgICAgICAgICBk
b3VibGUgc3RhcnRUaW1lID0gc2FtcGxlLT5wcmVzZW50YXRpb25UaW1lKCkudG9Eb3VibGUoKTsK
ICAgICAgICAgICAgIGRvdWJsZSBlbmRUaW1lID0gc3RhcnRUaW1lICsgKHNhbXBsZS0+ZHVyYXRp
b24oKSArIG1pY3Jvc2Vjb25kKS50b0RvdWJsZSgpOwogICAgICAgICAgICAgZXJhc2VkUmFuZ2Vz
LT5hZGQoc3RhcnRUaW1lLCBlbmRUaW1lKTsKKworI2lmICFMT0dfRElTQUJMRUQKKyAgICAgICAg
ICAgIGJ5dGVzUmVtb3ZlZCArPSBzdGFydEJ1ZmZlclNpemUgLSB0cmFja0J1ZmZlci5zYW1wbGVz
LnNpemVJbkJ5dGVzKCk7CisgICAgICAgICAgICBpZiAoc3RhcnRUaW1lIDwgZWFybGllc3RTYW1w
bGUpCisgICAgICAgICAgICAgICAgZWFybGllc3RTYW1wbGUgPSBzdGFydFRpbWU7CisgICAgICAg
ICAgICBpZiAoZW5kVGltZSA+IGxhdGVzdFNhbXBsZSkKKyAgICAgICAgICAgICAgICBsYXRlc3RT
YW1wbGUgPSBlbmRUaW1lOworI2VuZGlmCiAgICAgICAgIH0KIAogICAgICAgICAvLyBPbmx5IGZv
cmNlIHRoZSBUcmFja0J1ZmZlciB0byByZS1lbnF1ZXVlIGlmIHRoZSByZW1vdmVkIHJhbmdlcyBv
dmVybGFwIHdpdGggZW5xdWV1ZWQgYW5kIHBvc3NpYmx5CiAgICAgICAgIC8vIG5vdCB5ZXQgZGlz
cGxheWVkIHNhbXBsZXMuCi0gICAgICAgIFBsYXRmb3JtVGltZVJhbmdlcyBwb3NzaWJseUVucXVl
dWVkUmFuZ2VzKGN1cnJlbnRNZWRpYVRpbWUsIHRyYWNrQnVmZmVyLmxhc3RFbnF1ZXVlZFByZXNl
bnRhdGlvblRpbWUpOwotICAgICAgICBwb3NzaWJseUVucXVldWVkUmFuZ2VzLmludGVyc2VjdFdp
dGgoZXJhc2VkUmFuZ2VzLT5yYW5nZXMoKSk7Ci0gICAgICAgIGlmIChwb3NzaWJseUVucXVldWVk
UmFuZ2VzLmxlbmd0aCgpKQotICAgICAgICAgICAgdHJhY2tCdWZmZXIubmVlZHNSZWVucXVldWVp
bmcgPSB0cnVlOworICAgICAgICBpZiAoY3VycmVudE1lZGlhVGltZSA8IHRyYWNrQnVmZmVyLmxh
c3RFbnF1ZXVlZFByZXNlbnRhdGlvblRpbWUpIHsKKyAgICAgICAgICAgIFBsYXRmb3JtVGltZVJh
bmdlcyBwb3NzaWJseUVucXVldWVkUmFuZ2VzKGN1cnJlbnRNZWRpYVRpbWUsIHRyYWNrQnVmZmVy
Lmxhc3RFbnF1ZXVlZFByZXNlbnRhdGlvblRpbWUpOworICAgICAgICAgICAgcG9zc2libHlFbnF1
ZXVlZFJhbmdlcy5pbnRlcnNlY3RXaXRoKGVyYXNlZFJhbmdlcy0+cmFuZ2VzKCkpOworICAgICAg
ICAgICAgaWYgKHBvc3NpYmx5RW5xdWV1ZWRSYW5nZXMubGVuZ3RoKCkpCisgICAgICAgICAgICAg
ICAgdHJhY2tCdWZmZXIubmVlZHNSZWVucXVldWVpbmcgPSB0cnVlOworICAgICAgICB9CiAKICAg
ICAgICAgZXJhc2VkUmFuZ2VzLT5pbnZlcnQoKTsKICAgICAgICAgbV9idWZmZXJlZC0+aW50ZXJz
ZWN0V2l0aCgqZXJhc2VkUmFuZ2VzKTsKQEAgLTU5NCw2ICs2MTUsMTEgQEAgdm9pZCBTb3VyY2VC
dWZmZXI6OnJlbW92ZUNvZGVkRnJhbWVzKGNvbgogICAgICAgICAgICAgbV9wcml2YXRlLT5zZXRS
ZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpIYXZlTWV0YWRhdGEpOwogICAgIH0KIAorI2lmICFMT0df
RElTQUJMRUQKKyAgICBpZiAoYnl0ZXNSZW1vdmVkKQorICAgICAgICBMT0coTWVkaWFTb3VyY2Us
ICJTb3VyY2VCdWZmZXI6OnJlbW92ZUNvZGVkRnJhbWVzKCVwKSAtIHJlbW92ZWQgJXp1IGJ5dGVz
LCBzdGFydCglbGYpLCBlbmQoJWxmKSIsIHRoaXMsIGJ5dGVzUmVtb3ZlZCwgZWFybGllc3RTYW1w
bGUsIGxhdGVzdFNhbXBsZSk7CisjZW5kaWYKKwogICAgIC8vIDQuIElmIGJ1ZmZlciBmdWxsIGZs
YWcgZXF1YWxzIHRydWUgYW5kIHRoaXMgb2JqZWN0IGlzIHJlYWR5IHRvIGFjY2VwdCBtb3JlIGJ5
dGVzLCB0aGVuIHNldCB0aGUgYnVmZmVyIGZ1bGwgZmxhZyB0byBmYWxzZS4KICAgICAvLyBOby1v
cAogfQpAQCAtNjIyLDYgKzY0OCw5NSBAQCB2b2lkIFNvdXJjZUJ1ZmZlcjo6cmVtb3ZlVGltZXJG
aXJlZChUaW1lCiAgICAgc2NoZWR1bGVFdmVudChldmVudE5hbWVzKCkudXBkYXRlZW5kRXZlbnQp
OwogfQogCit2b2lkIFNvdXJjZUJ1ZmZlcjo6ZXZpY3RDb2RlZEZyYW1lcyhzaXplX3QgbmV3RGF0
YVNpemUpCit7CisgICAgLy8gMy41LjEzIENvZGVkIEZyYW1lIEV2aWN0aW9uIEFsZ29yaXRobQor
ICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL21lZGlhLXNvdXJjZS8jc291cmNlYnVmZmVyLWNv
ZGVkLWZyYW1lLWV2aWN0aW9uCisKKyAgICBpZiAoaXNSZW1vdmVkKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIFRoaXMgYWxnb3JpdGhtIGlzIHJ1biB0byBmcmVlIHVwIHNwYWNlIGluIHRo
aXMgc291cmNlIGJ1ZmZlciB3aGVuIG5ldyBkYXRhIGlzIGFwcGVuZGVkLgorICAgIC8vIDEuIExl
dCBuZXcgZGF0YSBlcXVhbCB0aGUgZGF0YSB0aGF0IGlzIGFib3V0IHRvIGJlIGFwcGVuZGVkIHRv
IHRoaXMgU291cmNlQnVmZmVyLgorICAgIC8vIDIuIElmIHRoZSBidWZmZXIgZnVsbCBmbGFnIGVx
dWFscyBmYWxzZSwgdGhlbiBhYm9ydCB0aGVzZSBzdGVwcy4KKyAgICBzaXplX3QgbWF4aW11bUJ1
ZmZlclNpemUgPSB0aGlzLT5tYXhpbXVtQnVmZmVyU2l6ZSgpOworICAgIG1fYnVmZmVyRnVsbCA9
IGV4dHJhTWVtb3J5Q29zdCgpICsgbmV3RGF0YVNpemUgPiBtYXhpbXVtQnVmZmVyU2l6ZTsKKyAg
ICBpZiAoIW1fYnVmZmVyRnVsbCkKKyAgICAgICAgcmV0dXJuOworCisjaWYgIUxPR19ESVNBQkxF
RAorICAgIExPRyhNZWRpYVNvdXJjZSwgIlNvdXJjZUJ1ZmZlcjo6ZXZpY3RDb2RlZEZyYW1lcygl
cCkgLSByZXF1aXJlICV6dSBieXRlcywgbWF4aW11bSBidWZmZXIgc2l6ZSBpcyAlenUiLCB0aGlz
LCBleHRyYU1lbW9yeUNvc3QoKSArIG5ld0RhdGFTaXplLCBtYXhpbXVtQnVmZmVyU2l6ZSk7Cisg
ICAgc2l6ZV90IGJ1ZmZlcmVkU2l6ZSA9IGV4dHJhTWVtb3J5Q29zdCgpOworI2VuZGlmCisKKyAg
ICAvLyAzLiBMZXQgcmVtb3ZhbCByYW5nZXMgZXF1YWwgYSBsaXN0IG9mIHByZXNlbnRhdGlvbiB0
aW1lIHJhbmdlcyB0aGF0IGNhbiBiZSBldmljdGVkIGZyb20KKyAgICAvLyB0aGUgcHJlc2VudGF0
aW9uIHRvIG1ha2Ugcm9vbSBmb3IgdGhlIG5ldyBkYXRhLgorCisgICAgLy8gTk9URTogYmVnaW4g
YnkgcmVtb3ZpbmcgZGF0YSBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlcmVkIHJhbmdl
cywgMzAgc2Vjb25kcyBhdAorICAgIC8vIGEgdGltZSwgdXAgdG8gMzAgc2Vjb25kcyBiZWZvcmUg
Y3VycmVudFRpbWUuCisgICAgTWVkaWFUaW1lIHRoaXJ0eVNlY29uZHMgPSBNZWRpYVRpbWUoMzAs
IDEpOworICAgIE1lZGlhVGltZSBjdXJyZW50VGltZSA9IE1lZGlhVGltZTo6Y3JlYXRlV2l0aERv
dWJsZShtX3NvdXJjZS0+Y3VycmVudFRpbWUoKSk7CisgICAgTWVkaWFUaW1lIG1heGltdW1SYW5n
ZUVuZCA9IGN1cnJlbnRUaW1lIC0gdGhpcnR5U2Vjb25kczsKKworICAgIE1lZGlhVGltZSByYW5n
ZVN0YXJ0ID0gTWVkaWFUaW1lOjp6ZXJvVGltZSgpOworICAgIE1lZGlhVGltZSByYW5nZUVuZCA9
IHJhbmdlU3RhcnQgKyB0aGlydHlTZWNvbmRzOworICAgIHdoaWxlIChyYW5nZVN0YXJ0IDwgbWF4
aW11bVJhbmdlRW5kKSB7CisgICAgICAgIC8vIDQuIEZvciBlYWNoIHJhbmdlIGluIHJlbW92YWwg
cmFuZ2VzLCBydW4gdGhlIGNvZGVkIGZyYW1lIHJlbW92YWwgYWxnb3JpdGhtIHdpdGggc3RhcnQg
YW5kCisgICAgICAgIC8vIGVuZCBlcXVhbCB0byB0aGUgcmVtb3ZhbCByYW5nZSBzdGFydCBhbmQg
ZW5kIHRpbWVzdGFtcCByZXNwZWN0aXZlbHkuCisgICAgICAgIHJlbW92ZUNvZGVkRnJhbWVzKHJh
bmdlU3RhcnQsIHN0ZDo6bWluKHJhbmdlRW5kLCBtYXhpbXVtUmFuZ2VFbmQpKTsKKyAgICAgICAg
aWYgKGV4dHJhTWVtb3J5Q29zdCgpICsgbmV3RGF0YVNpemUgPCBtYXhpbXVtQnVmZmVyU2l6ZSkg
eworICAgICAgICAgICAgbV9idWZmZXJGdWxsID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorCisgICAgICAgIHJhbmdlU3RhcnQgKz0gdGhpcnR5U2Vjb25kczsKKyAgICAg
ICAgcmFuZ2VFbmQgKz0gdGhpcnR5U2Vjb25kczsKKyAgICB9CisKKyAgICBpZiAoIW1fYnVmZmVy
RnVsbCkgeworI2lmICFMT0dfRElTQUJMRUQKKyAgICAgICAgTE9HKE1lZGlhU291cmNlLCAiU291
cmNlQnVmZmVyOjpldmljdENvZGVkRnJhbWVzKCVwKSAtIGZyZWVkICV6dSBieXRlcyIsIHRoaXMs
IGJ1ZmZlcmVkU2l6ZSAtIGV4dHJhTWVtb3J5Q29zdCgpKTsKKyNlbmRpZgorICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgLy8gU3RpbGwgbm90IGVub3VnaCBmcmVlIHNwYWNlLCBkZWxldGUg
MzAgc2Vjb25kcyBhdCBhIHRpbWUgZnJvbSBkdXJhdGlvbiBiYWNrIHRvIDMwCisgICAgLy8gc2Vj
b25kcyBhZnRlciBjdXJyZW5UaW1lLgorICAgIE1lZGlhVGltZSBtaW5pbXVtUmFuZ2VTdGFydCA9
IGN1cnJlbnRUaW1lICsgdGhpcnR5U2Vjb25kczsKKworICAgIHJhbmdlRW5kID0gTWVkaWFUaW1l
OjpjcmVhdGVXaXRoRG91YmxlKG1fc291cmNlLT5kdXJhdGlvbigpKTsKKyAgICByYW5nZVN0YXJ0
ID0gcmFuZ2VFbmQgLSB0aGlydHlTZWNvbmRzOworICAgIHdoaWxlIChyYW5nZVN0YXJ0ID4gbWlu
aW11bVJhbmdlU3RhcnQpIHsKKyAgICAgICAgLy8gNC4gRm9yIGVhY2ggcmFuZ2UgaW4gcmVtb3Zh
bCByYW5nZXMsIHJ1biB0aGUgY29kZWQgZnJhbWUgcmVtb3ZhbCBhbGdvcml0aG0gd2l0aCBzdGFy
dCBhbmQKKyAgICAgICAgLy8gZW5kIGVxdWFsIHRvIHRoZSByZW1vdmFsIHJhbmdlIHN0YXJ0IGFu
ZCBlbmQgdGltZXN0YW1wIHJlc3BlY3RpdmVseS4KKyAgICAgICAgcmVtb3ZlQ29kZWRGcmFtZXMo
c3RkOjptYXgobWluaW11bVJhbmdlU3RhcnQsIHJhbmdlU3RhcnQpLCByYW5nZUVuZCk7CisgICAg
ICAgIGlmIChleHRyYU1lbW9yeUNvc3QoKSArIG5ld0RhdGFTaXplIDwgbWF4aW11bUJ1ZmZlclNp
emUpIHsKKyAgICAgICAgICAgIG1fYnVmZmVyRnVsbCA9IGZhbHNlOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgICAgICByYW5nZVN0YXJ0IC09IHRoaXJ0eVNlY29uZHM7Cisg
ICAgICAgIHJhbmdlRW5kIC09IHRoaXJ0eVNlY29uZHM7CisgICAgfQorCisjaWYgIUxPR19ESVNB
QkxFRAorICAgIGlmICghbV9idWZmZXJGdWxsKQorICAgICAgICBMT0coTWVkaWFTb3VyY2UsICJT
b3VyY2VCdWZmZXI6OmV2aWN0Q29kZWRGcmFtZXMoJXApIC0gZnJlZWQgJXp1IGJ5dGVzIiwgdGhp
cywgYnVmZmVyZWRTaXplIC0gZXh0cmFNZW1vcnlDb3N0KCkpOworI2VuZGlmCit9CisKK3NpemVf
dCBTb3VyY2VCdWZmZXI6Om1heGltdW1CdWZmZXJTaXplKCkgY29uc3QKK3sKKyAgICBpZiAoaXNS
ZW1vdmVkKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgSFRNTE1lZGlhRWxlbWVudCogZWxl
bWVudCA9IG1fc291cmNlLT5tZWRpYUVsZW1lbnQoKTsKKyAgICBpZiAoIWVsZW1lbnQpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGVsZW1lbnQtPm1heGltdW1Tb3VyY2VCdWZmZXJT
aXplKCk7Cit9CisKIGNvbnN0IEF0b21pY1N0cmluZyYgU291cmNlQnVmZmVyOjpkZWNvZGVFcnJv
cigpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gZGVjb2RlKCJk
ZWNvZGUiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKQEAgLTE0ODAsNiAr
MTU5NSwxMCBAQCBib29sIFNvdXJjZUJ1ZmZlcjo6aGFzQ3VycmVudFRpbWUoKSBjb25zCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIE1lZGlhVGltZSBjdXJyZW50VGltZSA9IE1lZGlhVGlt
ZTo6Y3JlYXRlV2l0aERvdWJsZShtX3NvdXJjZS0+Y3VycmVudFRpbWUoKSk7CisgICAgTWVkaWFU
aW1lIGR1cmF0aW9uID0gTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKG1fc291cmNlLT5kdXJh
dGlvbigpKTsKKyAgICBpZiAoY3VycmVudFRpbWUgPj0gZHVyYXRpb24pCisgICAgICAgIHJldHVy
biB0cnVlOworCiAgICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtVGltZVJhbmdlcz4gcmFuZ2Vz
ID0gYnVmZmVyZWRBY2NvdW50aW5nRm9yRW5kT2ZTdHJlYW0oKTsKICAgICByZXR1cm4gYWJzKHJh
bmdlcy0+bmVhcmVzdChjdXJyZW50VGltZSkgLSBjdXJyZW50VGltZSkgPD0gY3VycmVudFRpbWVG
dWRnZUZhY3RvcigpOwogfQpAQCAtMTQ5NCw2ICsxNjEzLDEwIEBAIGJvb2wgU291cmNlQnVmZmVy
OjpoYXNGdXR1cmVUaW1lKCkgY29uc3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgTWVk
aWFUaW1lIGN1cnJlbnRUaW1lID0gTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKG1fc291cmNl
LT5jdXJyZW50VGltZSgpKTsKKyAgICBNZWRpYVRpbWUgZHVyYXRpb24gPSBNZWRpYVRpbWU6OmNy
ZWF0ZVdpdGhEb3VibGUobV9zb3VyY2UtPmR1cmF0aW9uKCkpOworICAgIGlmIChjdXJyZW50VGlt
ZSA+PSBkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKICAgICBNZWRpYVRpbWUgbmVh
cmVzdCA9IHJhbmdlcy0+bmVhcmVzdChjdXJyZW50VGltZSk7CiAgICAgaWYgKGFicyhuZWFyZXN0
IC0gY3VycmVudFRpbWUpID4gY3VycmVudFRpbWVGdWRnZUZhY3RvcigpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC0xNTAzLDcgKzE2MjYsNiBAQCBib29sIFNvdXJjZUJ1ZmZlcjo6aGFzRnV0
dXJlVGltZSgpIGNvbnN0CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIE1lZGlhVGltZSBs
b2NhbEVuZCA9IHJhbmdlcy0+ZW5kKGZvdW5kKTsKLSAgICBNZWRpYVRpbWUgZHVyYXRpb24gPSBN
ZWRpYVRpbWU6OmNyZWF0ZVdpdGhEb3VibGUobV9zb3VyY2UtPmR1cmF0aW9uKCkpOwogICAgIGlm
IChsb2NhbEVuZCA9PSBkdXJhdGlvbikKICAgICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTE1Mzcs
MTIgKzE2NTksMTggQEAgYm9vbCBTb3VyY2VCdWZmZXI6OmNhblBsYXlUaHJvdWdoKCkKICAgICBy
ZXR1cm4gdW5idWZmZXJlZFRpbWUudG9Eb3VibGUoKSAvIG1fYXZlcmFnZUJ1ZmZlclJhdGUgPCB0
aW1lUmVtYWluaW5nLnRvRG91YmxlKCk7CiB9CiAKLXZvaWQgU291cmNlQnVmZmVyOjpyZXBvcnRF
eHRyYU1lbW9yeUNvc3QoKQorc2l6ZV90IFNvdXJjZUJ1ZmZlcjo6ZXh0cmFNZW1vcnlDb3N0KCkg
Y29uc3QKIHsKICAgICBzaXplX3QgZXh0cmFNZW1vcnlDb3N0ID0gbV9wZW5kaW5nQXBwZW5kRGF0
YS5jYXBhY2l0eSgpOwogICAgIGZvciAoYXV0byYgdHJhY2tCdWZmZXIgOiBtX3RyYWNrQnVmZmVy
TWFwLnZhbHVlcygpKQogICAgICAgICBleHRyYU1lbW9yeUNvc3QgKz0gdHJhY2tCdWZmZXIuc2Ft
cGxlcy5zaXplSW5CeXRlcygpOwogCisgICAgcmV0dXJuIGV4dHJhTWVtb3J5Q29zdDsKK30KKwor
dm9pZCBTb3VyY2VCdWZmZXI6OnJlcG9ydEV4dHJhTWVtb3J5Q29zdCgpCit7CisgICAgc2l6ZV90
IGV4dHJhTWVtb3J5Q29zdCA9IHRoaXMtPmV4dHJhTWVtb3J5Q29zdCgpOwogICAgIGlmIChleHRy
YU1lbW9yeUNvc3QgPCBtX3JlcG9ydGVkRXh0cmFNZW1vcnlDb3N0KQogICAgICAgICByZXR1cm47
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3Vy
Y2VCdWZmZXIuaAkocmV2aXNpb24gMTcyMzQyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTUzLDEyICsxNTMs
MTUgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlZW5xdWV1ZU1lZGlhRm9yVGltZShUcmFja0J1ZmZl
ciYsIEF0b21pY1N0cmluZyB0cmFja0lELCBjb25zdCBNZWRpYVRpbWUmKTsKICAgICB2b2lkIHBy
b3ZpZGVNZWRpYURhdGEoVHJhY2tCdWZmZXImLCBBdG9taWNTdHJpbmcgdHJhY2tJRCk7CiAgICAg
dm9pZCBkaWREcm9wU2FtcGxlKCk7CisgICAgdm9pZCBldmljdENvZGVkRnJhbWVzKHNpemVfdCBu
ZXdEYXRhU2l6ZSk7CisgICAgc2l6ZV90IG1heGltdW1CdWZmZXJTaXplKCkgY29uc3Q7CiAKICAg
ICB2b2lkIG1vbml0b3JCdWZmZXJpbmdSYXRlKCk7CiAKICAgICB2b2lkIHJlbW92ZVRpbWVyRmly
ZWQoVGltZXI8U291cmNlQnVmZmVyPiopOwogICAgIHZvaWQgcmVtb3ZlQ29kZWRGcmFtZXMoY29u
c3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbmQpOwogCisgICAgc2l6ZV90
IGV4dHJhTWVtb3J5Q29zdCgpIGNvbnN0OwogICAgIHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlDb3N0
KCk7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBidWZmZXJlZEFj
Y291bnRpbmdGb3JFbmRPZlN0cmVhbSgpIGNvbnN0OwpAQCAtMTcxLDggKzE3NCw2IEBAIHByaXZh
dGU6CiAgICAgTWVkaWFTb3VyY2UqIG1fc291cmNlOwogICAgIEdlbmVyaWNFdmVudFF1ZXVlIG1f
YXN5bmNFdmVudFF1ZXVlOwogCi0gICAgYm9vbCBtX3VwZGF0aW5nOwotCiAgICAgVmVjdG9yPHVu
c2lnbmVkIGNoYXI+IG1fcGVuZGluZ0FwcGVuZERhdGE7CiAgICAgVGltZXI8U291cmNlQnVmZmVy
PiBtX2FwcGVuZEJ1ZmZlclRpbWVyOwogCkBAIC0xODgsOSArMTg5LDcgQEAgcHJpdmF0ZToKICAg
ICBNZWRpYVRpbWUgbV9oaWdoZXN0UHJlc2VudGF0aW9uRW5kVGltZXN0YW1wOwogCiAgICAgSGFz
aE1hcDxBdG9taWNTdHJpbmcsIFRyYWNrQnVmZmVyPiBtX3RyYWNrQnVmZmVyTWFwOwotICAgIGJv
b2wgbV9yZWNlaXZlZEZpcnN0SW5pdGlhbGl6YXRpb25TZWdtZW50OwogICAgIFJlZlB0cjxUaW1l
UmFuZ2VzPiBtX2J1ZmZlcmVkOwotICAgIGJvb2wgbV9hY3RpdmU7CiAKICAgICBlbnVtIEFwcGVu
ZFN0YXRlVHlwZSB7IFdhaXRpbmdGb3JTZWdtZW50LCBQYXJzaW5nSW5pdFNlZ21lbnQsIFBhcnNp
bmdNZWRpYVNlZ21lbnQgfTsKICAgICBBcHBlbmRTdGF0ZVR5cGUgbV9hcHBlbmRTdGF0ZTsKQEAg
LTIwNCw2ICsyMDMsMTEgQEAgcHJpdmF0ZToKICAgICBNZWRpYVRpbWUgbV9wZW5kaW5nUmVtb3Zl
U3RhcnQ7CiAgICAgTWVkaWFUaW1lIG1fcGVuZGluZ1JlbW92ZUVuZDsKICAgICBUaW1lcjxTb3Vy
Y2VCdWZmZXI+IG1fcmVtb3ZlVGltZXI7CisKKyAgICBib29sIG1fdXBkYXRpbmc7CisgICAgYm9v
bCBtX3JlY2VpdmVkRmlyc3RJbml0aWFsaXphdGlvblNlZ21lbnQ7CisgICAgYm9vbCBtX2FjdGl2
ZTsKKyAgICBib29sIG1fYnVmZmVyRnVsbDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkocmV2aXNpb24g
MTcyMzQyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjUxNyw3ICsyNTE3LDYgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpy
ZWZyZXNoQ2FjaGVkVGltZQogICAgICAgICByZXR1cm47IAogICAgIH0gCiAKLSAgICBMT0coTWVk
aWEsICJIVE1MTWVkaWFFbGVtZW50OjpyZWZyZXNoQ2FjaGVkVGltZSAtIGNhY2hpbmcgdGltZSAl
ZiIsIG1fY2FjaGVkVGltZSk7IAogICAgIG1fY2xvY2tUaW1lQXRMYXN0Q2FjaGVkVGltZVVwZGF0
ZSA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOwogfQogCkBAIC01OTY2LDYgKzU5NjUs
MTMgQEAgTWVkaWFTZXNzaW9uOjpNZWRpYVR5cGUgSFRNTE1lZGlhRWxlbWVudAogICAgIHJldHVy
biBNZWRpYVNlc3Npb246OkF1ZGlvOwogfQogCisjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKK3Np
emVfdCBIVE1MTWVkaWFFbGVtZW50OjptYXhpbXVtU291cmNlQnVmZmVyU2l6ZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fbWVkaWFTZXNzaW9uLT5tYXhpbXVtTWVkaWFTb3VyY2VCdWZmZXJTaXpl
KCp0aGlzKTsKK30KKyNlbmRpZgorCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnBhdXNlUGxheWJh
Y2soKQogewogICAgIExPRyhNZWRpYSwgIkhUTUxNZWRpYUVsZW1lbnQ6OnBhdXNlUGxheWJhY2sg
LSBwYXVzZWQgPSAlcyIsIGJvb2xTdHJpbmcocGF1c2VkKCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCShyZXZpc2lvbiAxNzIzNDIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjA4LDYgKzIw
OCw3IEBAIHB1YmxpYzoKIC8vICBNZWRpYSBTb3VyY2UuCiAgICAgdm9pZCBjbG9zZU1lZGlhU291
cmNlKCk7CiAgICAgdm9pZCBpbmNyZW1lbnREcm9wcGVkRnJhbWVDb3VudCgpIHsgKyttX2Ryb3Bw
ZWRWaWRlb0ZyYW1lczsgfQorICAgIHNpemVfdCBtYXhpbXVtU291cmNlQnVmZmVyU2l6ZSgpIGNv
bnN0OwogI2VuZGlmCiAKICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFTZXNzaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxNZWRpYVNlc3Npb24uY3BwCShyZXZpc2lvbiAxNzIzNDIpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYVNlc3Npb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMDEsNiArMzAxLDM4IEBAIHZvaWQgSFRNTE1lZGlhU2Vzc2lvbjo6YXBwbHlNZWRpYVBsYXll
clIKICAgICAKIH0KIAorI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCitjb25zdCB1bnNpZ25lZCBm
aXZlTWludXRlc09mMTA4MFBWaWRlbyA9IDI5MCAqIDEwMjQgKiAxMDI0OyAgIC8vIDI5MCBNQiBp
cyBhcHByb3hpbWF0ZWx5IDUgbWludXRlcyBvZiA4TWJwcyAoMTA4MHApIGNvbnRlbnQuCitjb25z
dCB1bnNpZ25lZCBmaXZlTWludXRlc1N0ZXJlb0F1ZGlvID0gMTQgKiAxMDI0ICogMTAyNDsgICAv
LyAxNCBNQiBpcyBhcHByb3hpbWF0ZWx5IDUgbWludXRlcyBvZiAzODRrYnBzIGNvbnRlbnQuCisK
K3NpemVfdCBIVE1MTWVkaWFTZXNzaW9uOjptYXhpbXVtTWVkaWFTb3VyY2VCdWZmZXJTaXplKGNv
bnN0IEhUTUxNZWRpYUVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0Cit7CisgICAgLy8gQSBnb29kIHF1
YWxpdHkgMTA4MHAgdmlkZW8gdXNlcyA4LDAwMCBrYnBzIGFuZCBzdGVyZW8gYXVkaW8gdXNlcyAz
ODQga2Jwcywgc28gYXNzdW1lIDk1JSBmb3IgdmlkZW8gYW5kIDUlIGZvciBhdWRpby4KKyAgICBj
b25zdCBmbG9hdCBidWZmZXJCdWRnZXRQZXJjZW50YWdlRm9yVmlkZW8gPSAuOTU7CisgICAgY29u
c3QgZmxvYXQgYnVmZmVyQnVkZ2V0UGVyY2VudGFnZUZvckF1ZGlvID0gLjA1OworCisgICAgc2l6
ZV90IG1heGltdW07CisgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZWxlbWVudC5kb2N1bWVudCgp
LnNldHRpbmdzKCk7CisgICAgaWYgKHNldHRpbmdzKQorICAgICAgICBtYXhpbXVtID0gc2V0dGlu
Z3MtPm1heGltdW1Tb3VyY2VCdWZmZXJTaXplKCk7CisgICAgZWxzZQorICAgICAgICBtYXhpbXVt
ID0gZml2ZU1pbnV0ZXNPZjEwODBQVmlkZW8gKyBmaXZlTWludXRlc1N0ZXJlb0F1ZGlvOworCisg
ICAgLy8gQWxsb3cgYW4gZWxlbWVudCB0byBidWZmZXIgYXMgdGhvdWdoIGl0IGFzIGF1ZGlvLW9u
bHkgZXZlbiBpZiBpdCBkb2Vzbid0IGhhdmUgYW55IGFjdGl2ZSB0cmFja3MuCisgICAgc2l6ZV90
IGJ1ZmZlclNpemUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KG1heGltdW0gKiBidWZmZXJCdWRnZXRQ
ZXJjZW50YWdlRm9yQXVkaW8pOworICAgIGlmIChlbGVtZW50Lmhhc1ZpZGVvKCkpCisgICAgICAg
IGJ1ZmZlclNpemUgKz0gc3RhdGljX2Nhc3Q8c2l6ZV90PihtYXhpbXVtICogYnVmZmVyQnVkZ2V0
UGVyY2VudGFnZUZvclZpZGVvKTsKKworICAgIC8vIEZJWE1FOiB3ZSBtaWdodCB3YW50IHRvIG1v
ZGlmeSB0aGlzIGFsZ29yaXRobSB0bzoKKyAgICAvLyAtIGRlY3JlYXNlIHRoZSBtYXhpbXVtIHNp
emUgZm9yIGJhY2tncm91bmQgdGFicworICAgIC8vIC0gZGVjcmVhc2UgdGhlIG1heGltdW0gc2l6
ZSBhbGxvd2VkIGZvciBpbmFjdGl2ZSBlbGVtZW50cyB3aGVuIGEgcHJvY2VzcyBoYXMgbW9yZSB0
aGFuIG9uZQorICAgIC8vICAgZWxlbWVudCwgZWcuIHNvIGEgcGFnZSB3aXRoIG1hbnkgZWxlbWVu
dHMgd2hpY2ggYXJlIHBsYXllZCBvbmUgYXQgYSB0aW1lIGRvZXNuJ3Qga2VlcCBhbGwKKyAgICAv
LyAgIGV2ZXJ5dGhpbmcgYnVmZmVyZWQgYWZ0ZXIgYW4gZWxlbWVudCBoYXMgYmVlbiBwbGF5ZWQu
CisKKyAgICByZXR1cm4gYnVmZmVyU2l6ZTsKK30KKyNlbmRpZgorCiB9CiAKICNlbmRpZiAvLyBF
TkFCTEUoVklERU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYVNlc3Npb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYVNlc3Npb24uaAko
cmV2aXNpb24gMTcyMzQyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFTZXNzaW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDYgKzgyLDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGFk
ZEJlaGF2aW9yUmVzdHJpY3Rpb24oQmVoYXZpb3JSZXN0cmljdGlvbnMpOwogICAgIHZvaWQgcmVt
b3ZlQmVoYXZpb3JSZXN0cmljdGlvbihCZWhhdmlvclJlc3RyaWN0aW9ucyk7CiAKKyNpZiBFTkFC
TEUoTUVESUFfU09VUkNFKQorICAgIHNpemVfdCBtYXhpbXVtTWVkaWFTb3VyY2VCdWZmZXJTaXpl
KGNvbnN0IEhUTUxNZWRpYUVsZW1lbnQmKSBjb25zdDsKKyNlbmRpZgorCiBwcml2YXRlOgogICAg
IEJlaGF2aW9yUmVzdHJpY3Rpb25zIG1fcmVzdHJpY3Rpb25zOwogfTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9TZXR0aW5ncy5pbgkocmV2aXNpb24gMTcyMzQyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9T
ZXR0aW5ncy5pbgkod29ya2luZyBjb3B5KQpAQCAtMjI4LDMgKzIyOCw3IEBAIHVzZUltYWdlRG9j
dW1lbnRGb3JTdWJmcmFtZVBERiBpbml0aWFsPWYKICMgQWxsb3cgY2xpZW50cyB0byBwZXJtaXQg
bmF2aWdhdGlvbiB0byBhbiBpbnZhbGlkIFVSTC4gU29tZSBhcHBzIG1heSB1c2UgaW52YWxpZCBV
UkxzCiAjIGFzIGEgbWVhbnMgdG8gcGFzcyBkYXRhIGZyb20gdGhlIHdlYi1wb3J0aW9uIG9mIHRo
ZWlyIGFwcCB0byB0aGUgbmF0aXZlIHBvcnRpb24uCiBhbGxvd05hdmlnYXRpb25Ub0ludmFsaWRV
UkwgaW5pdGlhbD1mYWxzZQorCisjIEFsbG93IFNvdXJjZUJ1ZmZlcnMgdG8gc3RvcmUgdXAgdG8g
MzA0TUIgZWFjaCwgZW5vdWdoIGZvciBhcHByb3hpbWF0ZWx5IGZpdmUgbWludXRlcworIyBvZiAx
MDgwcCB2aWRlbyBhbmQgc3RlcmVvIGF1ZGlvLgorbWF4aW11bVNvdXJjZUJ1ZmZlclNpemUgdHlw
ZT1pbnQsIGluaXRpYWw9MzE4NzY3MTA0LCBjb25kaXRpb25hbD1NRURJQV9TT1VSQ0UKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJ1ZmZlclByaXZhdGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZm
ZXJQcml2YXRlLmgJKHJldmlzaW9uIDE3MjM0MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1NvdXJjZUJ1ZmZlclByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsOCAr
NTUsNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJl
YWR5U3RhdGUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldFJlYWR5U3RhdGUoTWVk
aWFQbGF5ZXI6OlJlYWR5U3RhdGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZXZpY3RDb2RlZEZy
YW1lcygpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNGdWxsKCkgPSAwOwogCiAgICAgdmlydHVh
bCB2b2lkIGZsdXNoQW5kRW5xdWV1ZU5vbkRpc3BsYXlpbmdTYW1wbGVzKFZlY3RvcjxSZWZQdHI8
TWVkaWFTYW1wbGU+PiwgQXRvbWljU3RyaW5nKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZW5xdWV1
ZVNhbXBsZShQYXNzUmVmUHRyPE1lZGlhU2FtcGxlPiwgQXRvbWljU3RyaW5nKSB7IH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJj
ZUJ1ZmZlclByaXZhdGVBVkZPYmpDLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9i
akMuaAkocmV2aXNpb24gMTcyMzQyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTEyLDggKzExMiw2IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHJl
bW92ZWRGcm9tTWVkaWFTb3VyY2UoKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIE1lZGlhUGxheWVy
OjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZv
aWQgc2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSkgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCB2b2lkIGV2aWN0Q29kZWRGcmFtZXMoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJv
b2wgaXNGdWxsKCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGZsdXNoQW5kRW5xdWV1ZU5v
bkRpc3BsYXlpbmdTYW1wbGVzKFZlY3RvcjxSZWZQdHI8TWVkaWFTYW1wbGU+PiwgQXRvbWljU3Ry
aW5nIHRyYWNrSUQpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBlbnF1ZXVlU2FtcGxlKFBh
c3NSZWZQdHI8TWVkaWFTYW1wbGU+LCBBdG9taWNTdHJpbmcgdHJhY2tJRCkgb3ZlcnJpZGU7CiAg
ICAgdmlydHVhbCBib29sIGlzUmVhZHlGb3JNb3JlU2FtcGxlcyhBdG9taWNTdHJpbmcgdHJhY2tJ
RCkgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vb2JqYy9Tb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9Tb3Vy
Y2VCdWZmZXJQcml2YXRlQVZGT2JqQy5tbQkocmV2aXNpb24gMTcyMzQyKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUHJp
dmF0ZUFWRk9iakMubW0JKHdvcmtpbmcgY29weSkKQEAgLTYzMiw3ICs2MzIsNyBAQCBib29sIFNv
dXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpwcm9jZXNzCiAgICAgICAgIENNRm9ybWF0RGVzY3Jp
cHRpb25SZWYgZm9ybWF0RGVzY3JpcHRpb24gPSBDTVNhbXBsZUJ1ZmZlckdldEZvcm1hdERlc2Ny
aXB0aW9uKHNhbXBsZUJ1ZmZlcik7CiAgICAgICAgIEZsb2F0U2l6ZSBmb3JtYXRTaXplID0gRmxv
YXRTaXplKENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkdldFByZXNlbnRhdGlvbkRpbWVuc2lvbnMo
Zm9ybWF0RGVzY3JpcHRpb24sIHRydWUsIHRydWUpKTsKICAgICAgICAgaWYgKGZvcm1hdFNpemUg
IT0gbV9jYWNoZWRTaXplKSB7Ci0gICAgICAgICAgICBMT0coTWVkaWFTb3VyY2UsICJTb3VyY2VC
dWZmZXJQcml2YXRlQVZGT2JqQzo6cHJvY2Vzc0NvZGVkRnJhbWUoJXApIC0gc2l6ZSBjaGFuZ2Ug
ZGV0ZWN0ZWQ6IHt3aWR0aD0lbGYsIGhlaWdodD0lbGYiLCBmb3JtYXRTaXplLndpZHRoKCksIGZv
cm1hdFNpemUuaGVpZ2h0KCkpOworICAgICAgICAgICAgTE9HKE1lZGlhU291cmNlLCAiU291cmNl
QnVmZmVyUHJpdmF0ZUFWRk9iakM6OnByb2Nlc3NDb2RlZEZyYW1lKCVwKSAtIHNpemUgY2hhbmdl
IGRldGVjdGVkOiB7d2lkdGg9JWxmLCBoZWlnaHQ9JWxmfSIsIGZvcm1hdFNpemUud2lkdGgoKSwg
Zm9ybWF0U2l6ZS5oZWlnaHQoKSk7CiAgICAgICAgICAgICBtX2NhY2hlZFNpemUgPSBmb3JtYXRT
aXplOwogICAgICAgICAgICAgaWYgKG1fbWVkaWFTb3VyY2UpCiAgICAgICAgICAgICAgICAgbV9t
ZWRpYVNvdXJjZS0+cGxheWVyKCktPnNpemVDaGFuZ2VkKCk7CkBAIC03NzksMTggKzc3OSw2IEBA
IHZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OnNldFJlYWQKICAgICAgICAgbV9tZWRp
YVNvdXJjZS0+cGxheWVyKCktPnNldFJlYWR5U3RhdGUocmVhZHlTdGF0ZSk7CiB9CiAKLXZvaWQg
U291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OmV2aWN0Q29kZWRGcmFtZXMoKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6Omlz
RnVsbCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LQogYm9vbCBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6aGFzVmlkZW8oKSBjb25zdAogewog
ICAgIGlmICghbV9jbGllbnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL21l
ZGlhc291cmNlL01vY2tTb3VyY2VCdWZmZXJQcml2YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tTb3VyY2VCdWZmZXJQcml2
YXRlLmNwcAkocmV2aXNpb24gMTcyMzQyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9j
ay9tZWRpYXNvdXJjZS9Nb2NrU291cmNlQnVmZmVyUHJpdmF0ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIxMywxNiArMjEzLDYgQEAgdm9pZCBNb2NrU291cmNlQnVmZmVyUHJpdmF0ZTo6c2V0UmVh
ZHlTdAogICAgICAgICBtX21lZGlhU291cmNlLT5wbGF5ZXIoKS0+c2V0UmVhZHlTdGF0ZShyZWFk
eVN0YXRlKTsKIH0KIAotdm9pZCBNb2NrU291cmNlQnVmZmVyUHJpdmF0ZTo6ZXZpY3RDb2RlZEZy
YW1lcygpCi17Ci0gICAgLy8gTm8tb3AuCi19Ci0KLWJvb2wgTW9ja1NvdXJjZUJ1ZmZlclByaXZh
dGU6OmlzRnVsbCgpCi17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiB2b2lkIE1vY2tTb3VyY2VC
dWZmZXJQcml2YXRlOjpzZXRBY3RpdmUoYm9vbCBpc0FjdGl2ZSkKIHsKICAgICBpZiAobV9tZWRp
YVNvdXJjZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2Uv
TW9ja1NvdXJjZUJ1ZmZlclByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tTb3VyY2VCdWZmZXJQcml2YXRlLmgJKHJldmlz
aW9uIDE3MjM0MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2Uv
TW9ja1NvdXJjZUJ1ZmZlclByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsOCArNjgsNiBA
QCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbU1lZGlhU291cmNlKCkgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKCkg
Y29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldFJlYWR5U3RhdGUoTWVkaWFQbGF5
ZXI6OlJlYWR5U3RhdGUpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBldmljdENvZGVkRnJh
bWVzKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGlzRnVsbCgpIG92ZXJyaWRlOwogCiAg
ICAgdmlydHVhbCB2b2lkIGZsdXNoQW5kRW5xdWV1ZU5vbkRpc3BsYXlpbmdTYW1wbGVzKFZlY3Rv
cjxSZWZQdHI8TWVkaWFTYW1wbGU+PiwgQXRvbWljU3RyaW5nKSBvdmVycmlkZSB7IH0KICAgICB2
aXJ0dWFsIHZvaWQgZW5xdWV1ZVNhbXBsZShQYXNzUmVmUHRyPE1lZGlhU2FtcGxlPiwgQXRvbWlj
U3RyaW5nKSBvdmVycmlkZTsK
</data>
<flag name="review"
          id="261078"
          type_id="1"
          status="+"
          setter="jer.noble"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236639</attachid>
            <date>2014-08-14 17:22:22 -0700</date>
            <delta_ts>2014-08-15 16:11:13 -0700</delta_ts>
            <desc>Updated patch.</desc>
            <filename>patch_8.txt</filename>
            <type>text/plain</type>
            <size>37757</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MjYxMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg1IEBACisyMDE0LTA4LTE0ICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNU0VdIEltcGxlbWVu
dCBhIG1heGltdW0gYnVmZmVyIHNpemUgZm9yIFNvdXJjZUJ1ZmZlcgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1NjE0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IHRoZSBNU0UgY29kZWQg
ZnJhbWUgZXZpY3Rpb24gYWxnb3JpdGhtOiB3aGVuIG5ldyBidWZmZXJzIGFyZSBhcHBlbmRlZCBh
dHRlbXB0CisgICAgICAgIHRvIGtlZXAgdGhlIGFtb3VudCBvZiBkYXRhIGJ1ZmZlcmVkIGJlbG93
IGEgbWF4aW11bSBzaXplICh3aGljaCBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBtZWRpYQorICAgICAg
ICBzZXNzaW9uIG1hbmFnZXIpIGJ5IGZyZWVpbmcgY29kZWQgZnJhbWVzIGFzIGZvbGxvd3M6Cisg
ICAgICAgICAgICAxIC0gRnJlZSBmcmFtZXMgaW4gMzAgc2Vjb25kIGNodW5rcyBmcm9tIDAgdG8g
MzAgc2Vjb25kcyBiZWZvcmUgdGhlIGN1cnJlbnQgdGltZS4KKyAgICAgICAgICAgIDIgLSBJZiB0
aGVyZSBhcmUgdGltZSByYW5nZXMgYWZ0ZXIgdGhlIHJhbmdlIHdpdGggdGhlIGN1cnJlbnQgdGlt
ZSwgZnJlZSBmcmFtZXMgaW4KKyAgICAgICAgICAgICAgICAzMCBzZWNvbmQgY2h1bmtzIGZyb20g
ZHVyYXRpb24gYmFjayB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0aW1lIHJhbmdlIGFmdGVyCisg
ICAgICAgICAgICAgICAgY3VycmVudCB0aW1lLgorCisgICAgICAgIEZvciBub3cgd2UgRE8gTk9U
IHRocm93IGEgUVVPVEFfRVhDRUVERURfRVJSIHdoZW4gd2UgYXJlIG5vdCBhYmxlIHRvIGZyZWUg
dXAgZW5vdWdoCisgICAgICAgIHNwYWNlIHRvIHJlbWFpbiBiZWxvdyB0aGUgcHJlc2NyaWJlZCBx
dW90YSwgYmVjYXVzZSBzb21lIGJpZyBuYW1lLCB3aWRlbHkgZGVwbG95ZWQsIAorICAgICAgICBj
b2RlIGJhc2VzIGlnbm9yZSB0aGUgZXJyb3IgYW5kIGNvbnRpbnVlIGFwcGVuZGluZyBkYXRhIGFz
IHRob3VnaCB0aGUgZmFpbGVkIGFwcGVuZAorICAgICAgICBzdWNjZWVkZWQsIGxlYWRpbmcgdG8g
YSBjb3JydXB0ZWQgYml0c3RyZWFtIGFuZCBmYWlsdXJlIHRvIHBsYXkuCisKKyAgICAgICAgKiBN
b2R1bGVzL21lZGlhc291cmNlL1NhbXBsZU1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTYW1w
bGVNYXA6OmFkZFNhbXBsZSk6IERyaXZlLWJ5IHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbjogc2Ft
cGxlLT5wcmVzZW50YXRpb25UaW1lKCkKKyAgICAgICAgICAgIGlzIHVzZWQgbW9yZSB0aGFuIG9u
Y2UsIHN0YXNoIGl0IGluIGEgbG9jYWwgdmFyaWFibGUuCisgICAgICAgIChXZWJDb3JlOjpTYW1w
bGVNYXA6OnJlbW92ZVNhbXBsZSk6IERpdHRvLgorCisgICAgICAgICogTW9kdWxlcy9tZWRpYXNv
dXJjZS9Tb3VyY2VCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bG9nUmFuZ2VzKTogRGVi
dWctb25seSBmdW5jdGlvbiB0byBsb2cgVGltZVJhbmdlcy4KKyAgICAgICAgKFdlYkNvcmU6OlNv
dXJjZUJ1ZmZlcjo6U291cmNlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZl
cjo6cmVtb3ZlKTogT3B0aW1pemUgbG9nZ2luZy4gQnVmZmVyIGZ1bGwgYW5kIGNvZGVkIGZyYW1l
IGV2aWN0aW9uIGxvZ2ljCisgICAgICAgICAgICBpcyBpbiBTb3VyY2VCdWZmZXIgaW5zdGVhZCBv
ZiBTb3VyY2VCdWZmZXJQcml2YXRlLgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyOjph
cHBlbmRCdWZmZXJJbnRlcm5hbCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVm
ZmVyOjpzb3VyY2VCdWZmZXJQcml2YXRlQXBwZW5kQ29tcGxldGUpOiBTZXQgbV9idWZmZXJGdWxs
IHdoZW4gbW9yZSBkYXRhCisgICAgICAgICAgICBoYXMgYmVlbiBidWZmZXJlZCB0aGFuIGFsbG93
ZWQuCisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVTYW1wbGVzRnJvbVRyYWNrQnVmZmVyKTogQWRk
IGxvZ2dpbmcuCisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXI6OnJlbW92ZUNvZGVkRnJh
bWVzKTogSW1wcm92ZSBsb2dnaW5nLiBBdm9pZCBkZWJ1ZyBidWlsZCBhc3NlcnQgd2hlbgorICAg
ICAgICAgICAgY3VycmVudCB0aW1lIGlzIGFmdGVyIGxhc3QgZW5xdWV1ZWQgcHJlc2VudGF0aW9u
IHRpbWUuCisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXI6OmV2aWN0Q29kZWRGcmFtZXMp
OiBUaGUgY29kZWQgZnJhbWUgZXZpY3Rpb24gYWxnb3JpdGhtLgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlQnVmZmVyOjptYXhpbXVtQnVmZmVyU2l6ZSk6IFJldHVybiB0aGUgbWF4aW11bSBhbW91
bnQgb2YgZGF0YSB0aGF0IGNhbiAKKyAgICAgICAgICAgIGJlIGJ1ZmZlcmVkLgorICAgICAgICAo
V2ViQ29yZTo6U291cmNlQnVmZmVyOjpzb3VyY2VCdWZmZXJQcml2YXRlRGlkUmVjZWl2ZVNhbXBs
ZSk6IEltcHJvdmUgbG9nZ2luZy4gRG9uJ3QgYXR0ZW1wdAorICAgICAgICAgICAgdG8gY3JlYXRl
IGEgUGxhdGZvcm1UaW1lUmFuZ2VzIHdpdGggaW52ZXJ0ZWQgc3RhcnQgYW5kIGVuZCB0byBhdm9p
ZCBhbiBhc3NlcnQgaW4gZGVidWcuCisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXI6Omhh
c0F1ZGlvKTogTmV3LCByZXR1cm4gdHJ1ZSBpZiB0aGVyZSBhcmUgYW55IGF1ZGlvIHRyYWNrcy4K
KyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlcjo6aGFzVmlkZW8pOiBOZXcsIHJldHVybiB0
cnVlIGlmIHRoZXJlIGFyZSBhbnkgdmlkZW8gdHJhY2tzLgorICAgICAgICAoV2ViQ29yZTo6U291
cmNlQnVmZmVyOjpzb3VyY2VCdWZmZXJQcml2YXRlSGFzQXVkaW8pOiBDYWxsIGhhc0F1ZGlvLgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyOjpzb3VyY2VCdWZmZXJQcml2YXRlSGFzVmlk
ZW8pOiBDYWxsIGhhc1ZpZGVvLgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyOjpoYXND
dXJyZW50VGltZSk6IFJldHVybiB0cnVlIGlmIGN1cnJlbnRUaW1lIGlzIGdyZWF0ZXIgdGhhbiBk
dXJhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlcjo6aGFzRnV0dXJlVGltZSk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyOjpleHRyYU1lbW9yeUNvc3Qp
OiBSZXR1cm4gdGhlIGFtb3VudCBvZiBkYXRhIGJ1ZmZlcmVkOiB0aGUgc2l6ZSBvZgorICAgICAg
ICAgICAgdGhlIGlucHV0IGJ1ZmZlciBwbHVzIHRoZSBzaXplIG9mIGFsbCB0cmFjayBzYW1wbGVz
LgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyOjpyZXBvcnRFeHRyYU1lbW9yeUNvc3Qp
OiBNb3ZlIGJ1ZmZlcmVkIHNpemUgY2FsY3VsYXRpb24gdG8gZXh0cmFNZW1vcnlDb3N0LgorICAg
ICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyOjpkb2N1bWVudCk6IERvY3VtZW50IGFjY2Vzc29y
LgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmg6IERyaXZlLWJ5
IHNpemUgb3B0aW1pemF0aW9uIGJ5IG1vdmluZyBhbGwgYm9vbCBtZW1iZXIKKyAgICAgICAgICAg
IHZhcmlhYmxlcyB0byB0aGUgZW5kIG9mIGNsYXNzLgorCisgICAgICAgICogaHRtbC9IVE1MTWVk
aWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnJlZnJl
c2hDYWNoZWRUaW1lKTogRHJpdmUtYnkgcmVtb3ZhbCBvZiBvdmVybHkgY2hhdHR5IGxvZ2dpbmcu
CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjptYXhpbXVtU291cmNlQnVmZmVy
U2l6ZSk6IE5ldywgbWF4aW11bSBzb3VyY2UgYnVmZmVyIHNpemUuCisgICAgICAgICogaHRtbC9I
VE1MTWVkaWFFbGVtZW50Lmg6CisKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYVNlc3Npb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhU2Vzc2lvbjo6bWF4aW11bU1lZGlhU291cmNl
QnVmZmVyU2l6ZSk6IE5ldywgZ2V0IG1heGltdW0gc291cmNlIGJ1ZmZlciAKKyAgICAgICAgICAg
IHNpemUgZnJvbSBzZXR0aW5ncywgcmV0dXJuIGZ1bGwgYW1vdW50IGZvciBhbiBTb3VyY2VCdWZm
ZXIgd2l0aCB2aWRlbyBhbmQgYXVkaW8sIHJldHVybiA1JQorICAgICAgICAgICAgb2YgdGhlIG1h
eGltdW0gZm9yIGFuIGF1ZGlvLW9ubHkgU291cmNlQnVmZmVyLgorICAgICAgICAqIGh0bWwvSFRN
TE1lZGlhU2Vzc2lvbi5oOgorCisgICAgICAgICogcGFnZS9TZXR0aW5ncy5pbjogQWRkIG1heGlt
dW1Tb3VyY2VCdWZmZXJTaXplLiBEZWZhdWx0IHZhbHVlIGlzIGVub3VnaCBmb3IgYXBwcm94aW1h
dGVseQorICAgICAgICAgICAgZml2ZSBtaW51dGVzIG9mIDEwODBwIHZpZGVvIGFuZCBzdGVyZW8g
YXVkaW8uCisgICAgICAgICAgICAKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NvdXJj
ZUJ1ZmZlclByaXZhdGUuaDogRGVsZXRlIGV2aWN0Q29kZWRGcmFtZXMgYW5kIGlzRnVsbCwgdGhh
dCBsb2dpYworICAgICAgICAgICAgaXMgbm90IGluIFNvdXJjZUJ1ZmZlci4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9Tb3VyY2VCdWZmZXJQcml2YXRlQVZG
T2JqQy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1Nv
dXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVm
ZmVyUHJpdmF0ZUFWRk9iakM6OnByb2Nlc3NDb2RlZEZyYW1lKTogRHJpdmUtYnkgbG9nZ2luZyBm
aXguCisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6ZXZpY3RD
b2RlZEZyYW1lcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2
YXRlQVZGT2JqQzo6aXNGdWxsKTogRGVsZXRlZC4KKworICAgICAgICAqIHBsYXRmb3JtL21vY2sv
bWVkaWFzb3VyY2UvTW9ja1NvdXJjZUJ1ZmZlclByaXZhdGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TW9ja1NvdXJjZUJ1ZmZlclByaXZhdGU6OmV2aWN0Q29kZWRGcmFtZXMpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6TW9ja1NvdXJjZUJ1ZmZlclByaXZhdGU6OmlzRnVsbCk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrU291cmNlQnVmZmVy
UHJpdmF0ZS5oOgorCiAyMDE0LTA4LTE0ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUu
Y29tPgogCiAgICAgICAgIFtXaW5dIENvcnJlY3QgYnVpbGQgd2hlbiBEZXJpdmVkU291cmNlcyBs
b2NhdGlvbiBub3Qgc3VwcGxpZWQgYnkgYnVpbGQgZW52aXJvbm1lbnQKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU2FtcGxlTWFwLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NhbXBsZU1hcC5jcHAJKHJldmlzaW9u
IDE3MjU4MykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU2FtcGxlTWFw
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDkgKzExMywxMSBAQCB2b2lkIFNhbXBsZU1hcDo6
YWRkU2FtcGxlKFBhc3NSZWZQdHI8TWVkCiAgICAgUmVmUHRyPE1lZGlhU2FtcGxlPiBzYW1wbGUg
PSBwcnBTYW1wbGU7CiAgICAgQVNTRVJUKHNhbXBsZSk7CiAKLSAgICBwcmVzZW50YXRpb25PcmRl
cigpLm1fc2FtcGxlcy5pbnNlcnQoUHJlc2VudGF0aW9uT3JkZXJTYW1wbGVNYXA6Ok1hcFR5cGU6
OnZhbHVlX3R5cGUoc2FtcGxlLT5wcmVzZW50YXRpb25UaW1lKCksIHNhbXBsZSkpOworICAgIE1l
ZGlhVGltZSBwcmVzZW50YXRpb25UaW1lID0gc2FtcGxlLT5wcmVzZW50YXRpb25UaW1lKCk7CiAK
LSAgICBhdXRvIGRlY29kZUtleSA9IERlY29kZU9yZGVyU2FtcGxlTWFwOjpLZXlUeXBlKHNhbXBs
ZS0+ZGVjb2RlVGltZSgpLCBzYW1wbGUtPnByZXNlbnRhdGlvblRpbWUoKSk7CisgICAgcHJlc2Vu
dGF0aW9uT3JkZXIoKS5tX3NhbXBsZXMuaW5zZXJ0KFByZXNlbnRhdGlvbk9yZGVyU2FtcGxlTWFw
OjpNYXBUeXBlOjp2YWx1ZV90eXBlKHByZXNlbnRhdGlvblRpbWUsIHNhbXBsZSkpOworCisgICAg
YXV0byBkZWNvZGVLZXkgPSBEZWNvZGVPcmRlclNhbXBsZU1hcDo6S2V5VHlwZShzYW1wbGUtPmRl
Y29kZVRpbWUoKSwgcHJlc2VudGF0aW9uVGltZSk7CiAgICAgZGVjb2RlT3JkZXIoKS5tX3NhbXBs
ZXMuaW5zZXJ0KERlY29kZU9yZGVyU2FtcGxlTWFwOjpNYXBUeXBlOjp2YWx1ZV90eXBlKGRlY29k
ZUtleSwgc2FtcGxlKSk7CiAKICAgICBtX3RvdGFsU2l6ZSArPSBzYW1wbGUtPnNpemVJbkJ5dGVz
KCk7CkBAIC0xMjQsOSArMTI2LDExIEBAIHZvaWQgU2FtcGxlTWFwOjphZGRTYW1wbGUoUGFzc1Jl
ZlB0cjxNZWQKIHZvaWQgU2FtcGxlTWFwOjpyZW1vdmVTYW1wbGUoTWVkaWFTYW1wbGUqIHNhbXBs
ZSkKIHsKICAgICBBU1NFUlQoc2FtcGxlKTsKLSAgICBwcmVzZW50YXRpb25PcmRlcigpLm1fc2Ft
cGxlcy5lcmFzZShzYW1wbGUtPnByZXNlbnRhdGlvblRpbWUoKSk7CisgICAgTWVkaWFUaW1lIHBy
ZXNlbnRhdGlvblRpbWUgPSBzYW1wbGUtPnByZXNlbnRhdGlvblRpbWUoKTsKKworICAgIHByZXNl
bnRhdGlvbk9yZGVyKCkubV9zYW1wbGVzLmVyYXNlKHByZXNlbnRhdGlvblRpbWUpOwogCi0gICAg
YXV0byBkZWNvZGVLZXkgPSBEZWNvZGVPcmRlclNhbXBsZU1hcDo6S2V5VHlwZShzYW1wbGUtPmRl
Y29kZVRpbWUoKSwgc2FtcGxlLT5wcmVzZW50YXRpb25UaW1lKCkpOworICAgIGF1dG8gZGVjb2Rl
S2V5ID0gRGVjb2RlT3JkZXJTYW1wbGVNYXA6OktleVR5cGUoc2FtcGxlLT5kZWNvZGVUaW1lKCks
IHByZXNlbnRhdGlvblRpbWUpOwogICAgIGRlY29kZU9yZGVyKCkubV9zYW1wbGVzLmVyYXNlKGRl
Y29kZUtleSk7CiAKICAgICBtX3RvdGFsU2l6ZSAtPSBzYW1wbGUtPnNpemVJbkJ5dGVzKCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VC
dWZmZXIuY3BwCShyZXZpc2lvbiAxNzI1ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDEyICs0OCwx
NiBAQAogI2luY2x1ZGUgIlRleHRUcmFja0xpc3QuaCIKICNpbmNsdWRlICJUaW1lUmFuZ2VzLmgi
CiAjaW5jbHVkZSAiVmlkZW9UcmFja0xpc3QuaCIKKyNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVk
ZSA8bWFwPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUgPHJ1bnRp
bWUvSlNMb2NrLmg+CiAjaW5jbHVkZSA8cnVudGltZS9WTS5oPgogI2luY2x1ZGUgPHd0Zi9DdXJy
ZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2lmICFMT0dfRElT
QUJMRUQKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjZW5kaWYKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC02Niw2ICs3MCwyNyBAQCBzdGF0aWMgY29uc3QgTWVkaWFU
aW1lJiBjdXJyZW50VGltZUZ1ZGdlCiAgICAgcmV0dXJuIGZ1ZGdlRmFjdG9yOwogfQogCisjaWYg
IUxPR19ESVNBQkxFRAorc3RhdGljIHZvaWQgbG9nUmFuZ2VzKGNvbnN0IFN0cmluZyYgcHJlZml4
LCBjb25zdCBUaW1lUmFuZ2VzKiByYW5nZXMpCit7CisKKyAgICBpZiAoIXJhbmdlcy0+bGVuZ3Ro
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFN0cmluZ0J1aWxkZXIgbG9nOworCisgICAgbG9n
LmFwcGVuZChwcmVmaXgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmFuZ2VzLT5sZW5n
dGgoKTsgKytpKQorICAgICAgICBsb2cuYXBwZW5kKFN0cmluZzo6Zm9ybWF0KCJbJWxmIC4uICVs
Zl0gIiwgcmFuZ2VzLT5zdGFydChpLCBBU1NFUlRfTk9fRVhDRVBUSU9OKSwgcmFuZ2VzLT5lbmQo
aSwgQVNTRVJUX05PX0VYQ0VQVElPTikpKTsKKworICAgIExPRyhNZWRpYVNvdXJjZSwgIiVzIiwg
bG9nLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Cit9CisKKyNkZWZpbmUgTE9HX1JBTkdFUyhw
cmVmaXgsIHJhbmdlcykgIGxvZ1JhbmdlcyhwcmVmaXgsIHJhbmdlcykKKyNlbHNlCisjZGVmaW5l
IExPR19SQU5HRVMocHJlZml4LCByYW5nZXMpICAoKHZvaWQpMCkKKyNlbmRpZgorCiBzdHJ1Y3Qg
U291cmNlQnVmZmVyOjpUcmFja0J1ZmZlciB7CiAgICAgTWVkaWFUaW1lIGxhc3REZWNvZGVUaW1l
c3RhbXA7CiAgICAgTWVkaWFUaW1lIGxhc3RGcmFtZUR1cmF0aW9uOwpAQCAtMTA0LDEyICsxMjks
OSBAQCBTb3VyY2VCdWZmZXI6OlNvdXJjZUJ1ZmZlcihQYXNzUmVmPFNvdXJjCiAgICAgLCBtX3By
aXZhdGUoV1RGOjptb3ZlKHNvdXJjZUJ1ZmZlclByaXZhdGUpKQogICAgICwgbV9zb3VyY2Uoc291
cmNlKQogICAgICwgbV9hc3luY0V2ZW50UXVldWUoKnRoaXMpCi0gICAgLCBtX3VwZGF0aW5nKGZh
bHNlKQogICAgICwgbV9hcHBlbmRCdWZmZXJUaW1lcih0aGlzLCAmU291cmNlQnVmZmVyOjphcHBl
bmRCdWZmZXJUaW1lckZpcmVkKQogICAgICwgbV9oaWdoZXN0UHJlc2VudGF0aW9uRW5kVGltZXN0
YW1wKE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKSkKLSAgICAsIG1fcmVjZWl2ZWRGaXJzdEluaXRp
YWxpemF0aW9uU2VnbWVudChmYWxzZSkKICAgICAsIG1fYnVmZmVyZWQoVGltZVJhbmdlczo6Y3Jl
YXRlKCkpCi0gICAgLCBtX2FjdGl2ZShmYWxzZSkKICAgICAsIG1fYXBwZW5kU3RhdGUoV2FpdGlu
Z0ZvclNlZ21lbnQpCiAgICAgLCBtX3RpbWVPZkJ1ZmZlcmluZ01vbml0b3IobW9ub3RvbmljYWxs
eUluY3JlYXNpbmdUaW1lKCkpCiAgICAgLCBtX2J1ZmZlcmVkU2luY2VMYXN0TW9uaXRvcigwKQpA
QCAtMTE4LDYgKzE0MCwxMCBAQCBTb3VyY2VCdWZmZXI6OlNvdXJjZUJ1ZmZlcihQYXNzUmVmPFNv
dXJjCiAgICAgLCBtX3BlbmRpbmdSZW1vdmVTdGFydChNZWRpYVRpbWU6OmludmFsaWRUaW1lKCkp
CiAgICAgLCBtX3BlbmRpbmdSZW1vdmVFbmQoTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpKQogICAg
ICwgbV9yZW1vdmVUaW1lcih0aGlzLCAmU291cmNlQnVmZmVyOjpyZW1vdmVUaW1lckZpcmVkKQor
ICAgICwgbV91cGRhdGluZyhmYWxzZSkKKyAgICAsIG1fcmVjZWl2ZWRGaXJzdEluaXRpYWxpemF0
aW9uU2VnbWVudChmYWxzZSkKKyAgICAsIG1fYWN0aXZlKGZhbHNlKQorICAgICwgbV9idWZmZXJG
dWxsKGZhbHNlKQogewogICAgIEFTU0VSVChtX3NvdXJjZSk7CiAKQEAgLTIzNSw3ICsyNjEsOCBA
QCB2b2lkIFNvdXJjZUJ1ZmZlcjo6YWJvcnQoRXhjZXB0aW9uQ29kZSYgCiAKIHZvaWQgU291cmNl
QnVmZmVyOjpyZW1vdmUoZG91YmxlIHN0YXJ0LCBkb3VibGUgZW5kLCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKLSAgICBMT0coTWVkaWFTb3VyY2UsICJTb3VyY2VCdWZmZXI6OnJlbW92ZSglcCkgLSBz
dGFydCglcyksIGVuZCglcykiLCB0aGlzLCB0b1N0cmluZyhzdGFydCkudXRmOCgpLmRhdGEoKSwg
dG9TdHJpbmcoZW5kKS51dGY4KCkuZGF0YSgpKTsKKyAgICBMT0coTWVkaWFTb3VyY2UsICJTb3Vy
Y2VCdWZmZXI6OnJlbW92ZSglcCkgLSBzdGFydCglbGYpLCBlbmQoJWxmKSIsIHRoaXMsIHN0YXJ0
LCBlbmQpOworCiAgICAgLy8gU2VjdGlvbiAzLjIgcmVtb3ZlKCkgbWV0aG9kIHN0ZXBzLgogICAg
IC8vIDEuIElmIHN0YXJ0IGlzIG5lZ2F0aXZlIG9yIGdyZWF0ZXIgdGhhbiBkdXJhdGlvbiwgdGhl
biB0aHJvdyBhbiBJbnZhbGlkQWNjZXNzRXJyb3IgZXhjZXB0aW9uIGFuZCBhYm9ydCB0aGVzZSBz
dGVwcy4KICAgICAvLyAyLiBJZiBlbmQgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHN0YXJ0LCB0
aGVuIHRocm93IGFuIEludmFsaWRBY2Nlc3NFcnJvciBleGNlcHRpb24gYW5kIGFib3J0IHRoZXNl
IHN0ZXBzLgpAQCAtNDA3LDEzICs0MzQsMTcgQEAgdm9pZCBTb3VyY2VCdWZmZXI6OmFwcGVuZEJ1
ZmZlckludGVybmFsKAogICAgIG1fc291cmNlLT5vcGVuSWZJbkVuZGVkU3RhdGUoKTsKIAogICAg
IC8vIDQuIFJ1biB0aGUgY29kZWQgZnJhbWUgZXZpY3Rpb24gYWxnb3JpdGhtLgotICAgIG1fcHJp
dmF0ZS0+ZXZpY3RDb2RlZEZyYW1lcygpOworICAgIGV2aWN0Q29kZWRGcmFtZXMoc2l6ZSk7CiAK
KyAgICAvLyBGSVhNRTogZW5hYmxlIHRoaXMgY29kZSB3aGVuIE1TRSBsaWJyYXJpZXMgaGF2ZSBi
ZWVuIHVwZGF0ZWQgdG8gc3VwcG9ydCBpdC4KKyNpZiAwCiAgICAgLy8gNS4gSWYgdGhlIGJ1ZmZl
ciBmdWxsIGZsYWcgZXF1YWxzIHRydWUsIHRoZW4gdGhyb3cgYSBRVU9UQV9FWENFRURFRF9FUlIg
ZXhjZXB0aW9uIGFuZCBhYm9ydCB0aGVzZSBzdGVwLgotICAgIGlmIChtX3ByaXZhdGUtPmlzRnVs
bCgpKSB7CisgICAgaWYgKG1fYnVmZmVyRnVsbCkgeworICAgICAgICBMT0coTWVkaWFTb3VyY2Us
ICJTb3VyY2VCdWZmZXI6OmFwcGVuZEJ1ZmZlckludGVybmFsKCVwKSAtICBidWZmZXIgZnVsbCwg
ZmFpbGluZyB3aXRoIFFVT1RBX0VYQ0VFREVEX0VSUiBlcnJvciIsIHRoaXMpOwogICAgICAgICBl
YyA9IFFVT1RBX0VYQ0VFREVEX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyNlbmRpZgog
CiAgICAgLy8gTk9URTogUmV0dXJuIHRvIDMuMiBhcHBlbmRCdWZmZXIoKQogICAgIC8vIDMuIEFk
ZCBkYXRhIHRvIHRoZSBlbmQgb2YgdGhlIGlucHV0IGJ1ZmZlci4KQEAgLTUxNCw2ICs1NDUsMTAg
QEAgdm9pZCBTb3VyY2VCdWZmZXI6OnNvdXJjZUJ1ZmZlclByaXZhdGVBcAogICAgIH0KIAogICAg
IHJlcG9ydEV4dHJhTWVtb3J5Q29zdCgpOworICAgIGlmIChleHRyYU1lbW9yeUNvc3QoKSA+IHRo
aXMtPm1heGltdW1CdWZmZXJTaXplKCkpCisgICAgICAgIG1fYnVmZmVyRnVsbCA9IHRydWU7CisK
KyAgICBMT0dfUkFOR0VTKFN0cmluZzo6Zm9ybWF0KCJTb3VyY2VCdWZmZXI6OnNvdXJjZUJ1ZmZl
clByaXZhdGVBcHBlbmRDb21wbGV0ZSglcCkgLSBidWZmZXJlZCA9ICIsIHRoaXMpLCBtX2J1ZmZl
cmVkLmdldCgpKTsKIH0KIAogdm9pZCBTb3VyY2VCdWZmZXI6OnNvdXJjZUJ1ZmZlclByaXZhdGVE
aWRSZWNlaXZlUmVuZGVyaW5nRXJyb3IoU291cmNlQnVmZmVyUHJpdmF0ZSosIGludCkKQEAgLTUy
Nyw2ICs1NjIsNTYgQEAgc3RhdGljIGJvb2wgZGVjb2RlVGltZUNvbXBhcmF0b3IoY29uc3QgUAog
ICAgIHJldHVybiBhLnNlY29uZC0+ZGVjb2RlVGltZSgpIDwgYi5zZWNvbmQtPmRlY29kZVRpbWUo
KTsKIH0KIAorc3RhdGljIFBhc3NSZWZQdHI8VGltZVJhbmdlcz4gcmVtb3ZlU2FtcGxlc0Zyb21U
cmFja0J1ZmZlcihjb25zdCBEZWNvZGVPcmRlclNhbXBsZU1hcDo6TWFwVHlwZSYgc2FtcGxlcywg
U291cmNlQnVmZmVyOjpUcmFja0J1ZmZlciYgdHJhY2tCdWZmZXIsIGNvbnN0IFNvdXJjZUJ1ZmZl
ciogYnVmZmVyLCBjb25zdCBjaGFyKiBsb2dQcmVmaXgpCit7CisjaWYgIUxPR19ESVNBQkxFRAor
ICAgIGRvdWJsZSBlYXJsaWVzdFNhbXBsZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6
aW5maW5pdHkoKTsKKyAgICBkb3VibGUgbGF0ZXN0U2FtcGxlID0gMDsKKyAgICBzaXplX3QgYnl0
ZXNSZW1vdmVkID0gMDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGxvZ1ByZWZpeCk7CisgICAg
VU5VU0VEX1BBUkFNKGJ1ZmZlcik7CisjZW5kaWYKKworICAgIFJlZlB0cjxUaW1lUmFuZ2VzPiBl
cmFzZWRSYW5nZXMgPSBUaW1lUmFuZ2VzOjpjcmVhdGUoKTsKKyAgICBNZWRpYVRpbWUgbWljcm9z
ZWNvbmQoMSwgMTAwMDAwMCk7CisgICAgZm9yIChhdXRvIHNhbXBsZUl0IDogc2FtcGxlcykgewor
ICAgICAgICBjb25zdCBEZWNvZGVPcmRlclNhbXBsZU1hcDo6S2V5VHlwZSYgZGVjb2RlS2V5ID0g
c2FtcGxlSXQuZmlyc3Q7CisjaWYgIUxPR19ESVNBQkxFRAorICAgICAgICBzaXplX3Qgc3RhcnRC
dWZmZXJTaXplID0gdHJhY2tCdWZmZXIuc2FtcGxlcy5zaXplSW5CeXRlcygpOworI2VuZGlmCisK
KyAgICAgICAgUmVmUHRyPE1lZGlhU2FtcGxlPiYgc2FtcGxlID0gc2FtcGxlSXQuc2Vjb25kOwor
ICAgICAgICBMT0coTWVkaWFTb3VyY2UsICJTb3VyY2VCdWZmZXI6OiVzKCVwKSAtIHJlbW92aW5n
IHNhbXBsZSglcykiLCBsb2dQcmVmaXgsIGJ1ZmZlciwgdG9TdHJpbmcoKnNhbXBsZUl0LnNlY29u
ZCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICAgICAgLy8gUmVtb3ZlIHRoZSBlcmFzZWQgc2FtcGxl
cyBmcm9tIHRoZSBUcmFja0J1ZmZlciBzYW1wbGUgbWFwLgorICAgICAgICB0cmFja0J1ZmZlci5z
YW1wbGVzLnJlbW92ZVNhbXBsZShzYW1wbGUuZ2V0KCkpOworCisgICAgICAgIC8vIEFsc28gcmVt
b3ZlIHRoZSBlcmFzZWQgc2FtcGxlcyBmcm9tIHRoZSBUcmFja0J1ZmZlciBkZWNvZGVRdWV1ZS4K
KyAgICAgICAgdHJhY2tCdWZmZXIuZGVjb2RlUXVldWUuZXJhc2UoZGVjb2RlS2V5KTsKKworICAg
ICAgICBkb3VibGUgc3RhcnRUaW1lID0gc2FtcGxlLT5wcmVzZW50YXRpb25UaW1lKCkudG9Eb3Vi
bGUoKTsKKyAgICAgICAgZG91YmxlIGVuZFRpbWUgPSBzdGFydFRpbWUgKyAoc2FtcGxlLT5kdXJh
dGlvbigpICsgbWljcm9zZWNvbmQpLnRvRG91YmxlKCk7CisgICAgICAgIGVyYXNlZFJhbmdlcy0+
YWRkKHN0YXJ0VGltZSwgZW5kVGltZSk7CisKKyNpZiAhTE9HX0RJU0FCTEVECisgICAgICAgIGJ5
dGVzUmVtb3ZlZCArPSBzdGFydEJ1ZmZlclNpemUgLSB0cmFja0J1ZmZlci5zYW1wbGVzLnNpemVJ
bkJ5dGVzKCk7CisgICAgICAgIGlmIChzdGFydFRpbWUgPCBlYXJsaWVzdFNhbXBsZSkKKyAgICAg
ICAgICAgIGVhcmxpZXN0U2FtcGxlID0gc3RhcnRUaW1lOworICAgICAgICBpZiAoZW5kVGltZSA+
IGxhdGVzdFNhbXBsZSkKKyAgICAgICAgICAgIGxhdGVzdFNhbXBsZSA9IGVuZFRpbWU7CisjZW5k
aWYKKyAgICB9CisKKyNpZiAhTE9HX0RJU0FCTEVECisgICAgaWYgKGJ5dGVzUmVtb3ZlZCkgewor
ICAgICAgICBMT0coTWVkaWFTb3VyY2UsICJTb3VyY2VCdWZmZXI6OiVzKCVwKSByZW1vdmVkICV6
dSBieXRlcywgc3RhcnQoJWxmKSwgZW5kKCVsZikiLCBsb2dQcmVmaXgsIGJ1ZmZlciwgYnl0ZXNS
ZW1vdmVkLCBlYXJsaWVzdFNhbXBsZSwgbGF0ZXN0U2FtcGxlKTsKKyAgICB9CisjZW5kaWYKKwor
ICAgIHJldHVybiBlcmFzZWRSYW5nZXMucmVsZWFzZSgpOworfQorCiB2b2lkIFNvdXJjZUJ1ZmZl
cjo6cmVtb3ZlQ29kZWRGcmFtZXMoY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFU
aW1lJiBlbmQpCiB7CiAgICAgTE9HKE1lZGlhU291cmNlLCAiU291cmNlQnVmZmVyOjpyZW1vdmVD
b2RlZEZyYW1lcyglcCkgLSBzdGFydCglcyksIGVuZCglcykiLCB0aGlzLCB0b1N0cmluZyhzdGFy
dCkudXRmOCgpLmRhdGEoKSwgdG9TdHJpbmcoZW5kKS51dGY4KCkuZGF0YSgpKTsKQEAgLTU2OSwy
MyArNjU0LDE2IEBAIHZvaWQgU291cmNlQnVmZmVyOjpyZW1vdmVDb2RlZEZyYW1lcyhjb24KICAg
ICAgICAgRGVjb2RlT3JkZXJTYW1wbGVNYXA6Oml0ZXJhdG9yIHJlbW92ZURlY29kZVN0YXJ0ID0g
dHJhY2tCdWZmZXIuc2FtcGxlcy5kZWNvZGVPcmRlcigpLmZpbmRTYW1wbGVXaXRoRGVjb2RlS2V5
KGRlY29kZUtleSk7CiAKICAgICAgICAgRGVjb2RlT3JkZXJTYW1wbGVNYXA6Ok1hcFR5cGUgZXJh
c2VkU2FtcGxlcyhyZW1vdmVEZWNvZGVTdGFydCwgcmVtb3ZlRGVjb2RlRW5kKTsKLQotICAgICAg
ICBSZWZQdHI8VGltZVJhbmdlcz4gZXJhc2VkUmFuZ2VzID0gVGltZVJhbmdlczo6Y3JlYXRlKCk7
Ci0gICAgICAgIE1lZGlhVGltZSBtaWNyb3NlY29uZCgxLCAxMDAwMDAwKTsKLSAgICAgICAgZm9y
IChhdXRvIGVyYXNlZEl0IDogZXJhc2VkU2FtcGxlcykgewotICAgICAgICAgICAgUmVmUHRyPE1l
ZGlhU2FtcGxlPiYgc2FtcGxlID0gZXJhc2VkSXQuc2Vjb25kOwotICAgICAgICAgICAgdHJhY2tC
dWZmZXIuc2FtcGxlcy5yZW1vdmVTYW1wbGUoc2FtcGxlLmdldCgpKTsKLSAgICAgICAgICAgIGRv
dWJsZSBzdGFydFRpbWUgPSBzYW1wbGUtPnByZXNlbnRhdGlvblRpbWUoKS50b0RvdWJsZSgpOwot
ICAgICAgICAgICAgZG91YmxlIGVuZFRpbWUgPSBzdGFydFRpbWUgKyAoc2FtcGxlLT5kdXJhdGlv
bigpICsgbWljcm9zZWNvbmQpLnRvRG91YmxlKCk7Ci0gICAgICAgICAgICBlcmFzZWRSYW5nZXMt
PmFkZChzdGFydFRpbWUsIGVuZFRpbWUpOwotICAgICAgICB9CisgICAgICAgIFJlZlB0cjxUaW1l
UmFuZ2VzPiBlcmFzZWRSYW5nZXMgPSByZW1vdmVTYW1wbGVzRnJvbVRyYWNrQnVmZmVyKGVyYXNl
ZFNhbXBsZXMsIHRyYWNrQnVmZmVyLCB0aGlzLCAicmVtb3ZlQ29kZWRGcmFtZXMiKTsKIAogICAg
ICAgICAvLyBPbmx5IGZvcmNlIHRoZSBUcmFja0J1ZmZlciB0byByZS1lbnF1ZXVlIGlmIHRoZSBy
ZW1vdmVkIHJhbmdlcyBvdmVybGFwIHdpdGggZW5xdWV1ZWQgYW5kIHBvc3NpYmx5CiAgICAgICAg
IC8vIG5vdCB5ZXQgZGlzcGxheWVkIHNhbXBsZXMuCi0gICAgICAgIFBsYXRmb3JtVGltZVJhbmdl
cyBwb3NzaWJseUVucXVldWVkUmFuZ2VzKGN1cnJlbnRNZWRpYVRpbWUsIHRyYWNrQnVmZmVyLmxh
c3RFbnF1ZXVlZFByZXNlbnRhdGlvblRpbWUpOwotICAgICAgICBwb3NzaWJseUVucXVldWVkUmFu
Z2VzLmludGVyc2VjdFdpdGgoZXJhc2VkUmFuZ2VzLT5yYW5nZXMoKSk7Ci0gICAgICAgIGlmIChw
b3NzaWJseUVucXVldWVkUmFuZ2VzLmxlbmd0aCgpKQotICAgICAgICAgICAgdHJhY2tCdWZmZXIu
bmVlZHNSZWVucXVldWVpbmcgPSB0cnVlOworICAgICAgICBpZiAoY3VycmVudE1lZGlhVGltZSA8
IHRyYWNrQnVmZmVyLmxhc3RFbnF1ZXVlZFByZXNlbnRhdGlvblRpbWUpIHsKKyAgICAgICAgICAg
IFBsYXRmb3JtVGltZVJhbmdlcyBwb3NzaWJseUVucXVldWVkUmFuZ2VzKGN1cnJlbnRNZWRpYVRp
bWUsIHRyYWNrQnVmZmVyLmxhc3RFbnF1ZXVlZFByZXNlbnRhdGlvblRpbWUpOworICAgICAgICAg
ICAgcG9zc2libHlFbnF1ZXVlZFJhbmdlcy5pbnRlcnNlY3RXaXRoKGVyYXNlZFJhbmdlcy0+cmFu
Z2VzKCkpOworICAgICAgICAgICAgaWYgKHBvc3NpYmx5RW5xdWV1ZWRSYW5nZXMubGVuZ3RoKCkp
CisgICAgICAgICAgICAgICAgdHJhY2tCdWZmZXIubmVlZHNSZWVucXVldWVpbmcgPSB0cnVlOwor
ICAgICAgICB9CiAKICAgICAgICAgZXJhc2VkUmFuZ2VzLT5pbnZlcnQoKTsKICAgICAgICAgbV9i
dWZmZXJlZC0+aW50ZXJzZWN0V2l0aCgqZXJhc2VkUmFuZ2VzKTsKQEAgLTU5OSw2ICs2NzcsOCBA
QCB2b2lkIFNvdXJjZUJ1ZmZlcjo6cmVtb3ZlQ29kZWRGcmFtZXMoY29uCiAKICAgICAvLyA0LiBJ
ZiBidWZmZXIgZnVsbCBmbGFnIGVxdWFscyB0cnVlIGFuZCB0aGlzIG9iamVjdCBpcyByZWFkeSB0
byBhY2NlcHQgbW9yZSBieXRlcywgdGhlbiBzZXQgdGhlIGJ1ZmZlciBmdWxsIGZsYWcgdG8gZmFs
c2UuCiAgICAgLy8gTm8tb3AKKworICAgIExPR19SQU5HRVMoU3RyaW5nOjpmb3JtYXQoIlNvdXJj
ZUJ1ZmZlcjo6cmVtb3ZlQ29kZWRGcmFtZXMoJXApIC0gYnVmZmVyZWQgPSAiLCB0aGlzKSwgbV9i
dWZmZXJlZC5nZXQoKSk7CiB9CiAKIHZvaWQgU291cmNlQnVmZmVyOjpyZW1vdmVUaW1lckZpcmVk
KFRpbWVyPFNvdXJjZUJ1ZmZlcj4qKQpAQCAtNjI1LDYgKzcwNSwxMTQgQEAgdm9pZCBTb3VyY2VC
dWZmZXI6OnJlbW92ZVRpbWVyRmlyZWQoVGltZQogICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1l
cygpLnVwZGF0ZWVuZEV2ZW50KTsKIH0KIAordm9pZCBTb3VyY2VCdWZmZXI6OmV2aWN0Q29kZWRG
cmFtZXMoc2l6ZV90IG5ld0RhdGFTaXplKQoreworICAgIC8vIDMuNS4xMyBDb2RlZCBGcmFtZSBF
dmljdGlvbiBBbGdvcml0aG0KKyAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9tZWRpYS1zb3Vy
Y2UvI3NvdXJjZWJ1ZmZlci1jb2RlZC1mcmFtZS1ldmljdGlvbgorCisgICAgaWYgKGlzUmVtb3Zl
ZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBUaGlzIGFsZ29yaXRobSBpcyBydW4gdG8g
ZnJlZSB1cCBzcGFjZSBpbiB0aGlzIHNvdXJjZSBidWZmZXIgd2hlbiBuZXcgZGF0YSBpcyBhcHBl
bmRlZC4KKyAgICAvLyAxLiBMZXQgbmV3IGRhdGEgZXF1YWwgdGhlIGRhdGEgdGhhdCBpcyBhYm91
dCB0byBiZSBhcHBlbmRlZCB0byB0aGlzIFNvdXJjZUJ1ZmZlci4KKyAgICAvLyAyLiBJZiB0aGUg
YnVmZmVyIGZ1bGwgZmxhZyBlcXVhbHMgZmFsc2UsIHRoZW4gYWJvcnQgdGhlc2Ugc3RlcHMuCisg
ICAgaWYgKCFtX2J1ZmZlckZ1bGwpCisgICAgICAgIHJldHVybjsKKworICAgIHNpemVfdCBtYXhp
bXVtQnVmZmVyU2l6ZSA9IHRoaXMtPm1heGltdW1CdWZmZXJTaXplKCk7CisKKyAgICAvLyAzLiBM
ZXQgcmVtb3ZhbCByYW5nZXMgZXF1YWwgYSBsaXN0IG9mIHByZXNlbnRhdGlvbiB0aW1lIHJhbmdl
cyB0aGF0IGNhbiBiZSBldmljdGVkIGZyb20KKyAgICAvLyB0aGUgcHJlc2VudGF0aW9uIHRvIG1h
a2Ugcm9vbSBmb3IgdGhlIG5ldyBkYXRhLgorCisgICAgLy8gTk9URTogYmVnaW4gYnkgcmVtb3Zp
bmcgZGF0YSBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlcmVkIHJhbmdlcywgMzAgc2Vj
b25kcyBhdAorICAgIC8vIGEgdGltZSwgdXAgdG8gMzAgc2Vjb25kcyBiZWZvcmUgY3VycmVudFRp
bWUuCisgICAgTWVkaWFUaW1lIHRoaXJ0eVNlY29uZHMgPSBNZWRpYVRpbWUoMzAsIDEpOworICAg
IE1lZGlhVGltZSBjdXJyZW50VGltZSA9IE1lZGlhVGltZTo6Y3JlYXRlV2l0aERvdWJsZShtX3Nv
dXJjZS0+Y3VycmVudFRpbWUoKSk7CisgICAgTWVkaWFUaW1lIG1heGltdW1SYW5nZUVuZCA9IGN1
cnJlbnRUaW1lIC0gdGhpcnR5U2Vjb25kczsKKworI2lmICFMT0dfRElTQUJMRUQKKyAgICBMT0co
TWVkaWFTb3VyY2UsICJTb3VyY2VCdWZmZXI6OmV2aWN0Q29kZWRGcmFtZXMoJXApIC0gY3VycmVu
dFRpbWUgPSAlbGYsIHJlcXVpcmUgJXp1IGJ5dGVzLCBtYXhpbXVtIGJ1ZmZlciBzaXplIGlzICV6
dSIsIHRoaXMsIG1fc291cmNlLT5jdXJyZW50VGltZSgpLCBleHRyYU1lbW9yeUNvc3QoKSArIG5l
d0RhdGFTaXplLCBtYXhpbXVtQnVmZmVyU2l6ZSk7CisgICAgc2l6ZV90IGluaXRpYWxCdWZmZXJl
ZFNpemUgPSBleHRyYU1lbW9yeUNvc3QoKTsKKyNlbmRpZgorCisgICAgTWVkaWFUaW1lIHJhbmdl
U3RhcnQgPSBNZWRpYVRpbWU6Onplcm9UaW1lKCk7CisgICAgTWVkaWFUaW1lIHJhbmdlRW5kID0g
cmFuZ2VTdGFydCArIHRoaXJ0eVNlY29uZHM7CisgICAgd2hpbGUgKHJhbmdlU3RhcnQgPCBtYXhp
bXVtUmFuZ2VFbmQpIHsKKyAgICAgICAgLy8gNC4gRm9yIGVhY2ggcmFuZ2UgaW4gcmVtb3ZhbCBy
YW5nZXMsIHJ1biB0aGUgY29kZWQgZnJhbWUgcmVtb3ZhbCBhbGdvcml0aG0gd2l0aCBzdGFydCBh
bmQKKyAgICAgICAgLy8gZW5kIGVxdWFsIHRvIHRoZSByZW1vdmFsIHJhbmdlIHN0YXJ0IGFuZCBl
bmQgdGltZXN0YW1wIHJlc3BlY3RpdmVseS4KKyAgICAgICAgcmVtb3ZlQ29kZWRGcmFtZXMocmFu
Z2VTdGFydCwgc3RkOjptaW4ocmFuZ2VFbmQsIG1heGltdW1SYW5nZUVuZCkpOworICAgICAgICBp
ZiAoZXh0cmFNZW1vcnlDb3N0KCkgKyBuZXdEYXRhU2l6ZSA8IG1heGltdW1CdWZmZXJTaXplKSB7
CisgICAgICAgICAgICBtX2J1ZmZlckZ1bGwgPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgcmFuZ2VTdGFydCArPSB0aGlydHlTZWNvbmRzOworICAgICAg
ICByYW5nZUVuZCArPSB0aGlydHlTZWNvbmRzOworICAgIH0KKworICAgIGlmICghbV9idWZmZXJG
dWxsKSB7CisjaWYgIUxPR19ESVNBQkxFRAorICAgICAgICBMT0coTWVkaWFTb3VyY2UsICJTb3Vy
Y2VCdWZmZXI6OmV2aWN0Q29kZWRGcmFtZXMoJXApIC0gZXZpY3RlZCAlenUgYnl0ZXMiLCB0aGlz
LCBpbml0aWFsQnVmZmVyZWRTaXplIC0gZXh0cmFNZW1vcnlDb3N0KCkpOworI2VuZGlmCisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBJZiB0aGVyZSBzdGlsbCBpc24ndCBlbm91Z2gg
ZnJlZSBzcGFjZSBhbmQgdGhlcmUgYnVmZmVycyBpbiB0aW1lIHJhbmdlcyBhZnRlciB0aGUgY3Vy
cmVudCByYW5nZSAoaWUuIHRoZXJlIGlzIGEgZ2FwIGFmdGVyCisgICAgLy8gdGhlIGN1cnJlbnQg
YnVmZmVyZWQgcmFuZ2UpLCBkZWxldGUgMzAgc2Vjb25kcyBhdCBhIHRpbWUgZnJvbSBkdXJhdGlv
biBiYWNrIHRvIHRoZSBjdXJyZW50IHRpbWUgcmFuZ2Ugb3IgMzAgc2Vjb25kcyBhZnRlcgorICAg
IC8vIGN1cnJlblRpbWUgd2hpY2hldmVyIHdlIGhpdCBmaXJzdC4KKyAgICBzaXplX3QgY3VycmVu
dFRpbWVSYW5nZSA9IG1fYnVmZmVyZWQtPmZpbmQobV9zb3VyY2UtPmN1cnJlbnRUaW1lKCkpOwor
ICAgIGlmIChjdXJyZW50VGltZVJhbmdlID09IG5vdEZvdW5kIHx8IGN1cnJlbnRUaW1lUmFuZ2Ug
PT0gbV9idWZmZXJlZC0+cmFuZ2VzKCkubGVuZ3RoKCkgLSAxKSB7CisjaWYgIUxPR19ESVNBQkxF
RAorICAgICAgICBMT0coTWVkaWFTb3VyY2UsICJTb3VyY2VCdWZmZXI6OmV2aWN0Q29kZWRGcmFt
ZXMoJXApIC0gZXZpY3RlZCAlenUgYnl0ZXMgYnV0IEZBSUxFRCB0byBmcmVlIGVub3VnaCIsIHRo
aXMsIGluaXRpYWxCdWZmZXJlZFNpemUgLSBleHRyYU1lbW9yeUNvc3QoKSk7CisjZW5kaWYKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE1lZGlhVGltZSBtaW5pbXVtUmFuZ2VTdGFydCA9
IGN1cnJlbnRUaW1lICsgdGhpcnR5U2Vjb25kczsKKworICAgIHJhbmdlRW5kID0gTWVkaWFUaW1l
OjpjcmVhdGVXaXRoRG91YmxlKG1fc291cmNlLT5kdXJhdGlvbigpKTsKKyAgICByYW5nZVN0YXJ0
ID0gcmFuZ2VFbmQgLSB0aGlydHlTZWNvbmRzOworICAgIHdoaWxlIChyYW5nZVN0YXJ0ID4gbWlu
aW11bVJhbmdlU3RhcnQpIHsKKworICAgICAgICAvLyBEbyBub3QgZXZpY3QgZGF0YSBmcm9tIHRo
ZSB0aW1lIHJhbmdlIHRoYXQgY29udGFpbnMgY3VycmVudFRpbWUuCisgICAgICAgIHNpemVfdCBz
dGFydFRpbWVSYW5nZSA9IG1fYnVmZmVyZWQtPmZpbmQocmFuZ2VTdGFydC50b0RvdWJsZSgpKTsK
KyAgICAgICAgaWYgKHN0YXJ0VGltZVJhbmdlID09IGN1cnJlbnRUaW1lUmFuZ2UpIHsKKyAgICAg
ICAgICAgIHNpemVfdCBlbmRUaW1lUmFuZ2UgPSBtX2J1ZmZlcmVkLT5maW5kKHJhbmdlRW5kLnRv
RG91YmxlKCkpOworICAgICAgICAgICAgaWYgKGVuZFRpbWVSYW5nZSA9PSBjdXJyZW50VGltZVJh
bmdlKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICByYW5nZUVuZCA9IE1l
ZGlhVGltZTo6Y3JlYXRlV2l0aERvdWJsZShtX2J1ZmZlcmVkLT5zdGFydChlbmRUaW1lUmFuZ2Us
IEFTU0VSVF9OT19FWENFUFRJT04pKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIDQuIEZvciBl
YWNoIHJhbmdlIGluIHJlbW92YWwgcmFuZ2VzLCBydW4gdGhlIGNvZGVkIGZyYW1lIHJlbW92YWwg
YWxnb3JpdGhtIHdpdGggc3RhcnQgYW5kCisgICAgICAgIC8vIGVuZCBlcXVhbCB0byB0aGUgcmVt
b3ZhbCByYW5nZSBzdGFydCBhbmQgZW5kIHRpbWVzdGFtcCByZXNwZWN0aXZlbHkuCisgICAgICAg
IHJlbW92ZUNvZGVkRnJhbWVzKHN0ZDo6bWF4KG1pbmltdW1SYW5nZVN0YXJ0LCByYW5nZVN0YXJ0
KSwgcmFuZ2VFbmQpOworICAgICAgICBpZiAoZXh0cmFNZW1vcnlDb3N0KCkgKyBuZXdEYXRhU2l6
ZSA8IG1heGltdW1CdWZmZXJTaXplKSB7CisgICAgICAgICAgICBtX2J1ZmZlckZ1bGwgPSBmYWxz
ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgcmFuZ2VTdGFydCAt
PSB0aGlydHlTZWNvbmRzOworICAgICAgICByYW5nZUVuZCAtPSB0aGlydHlTZWNvbmRzOworICAg
IH0KKworI2lmICFMT0dfRElTQUJMRUQKKyAgICBMT0coTWVkaWFTb3VyY2UsICJTb3VyY2VCdWZm
ZXI6OmV2aWN0Q29kZWRGcmFtZXMoJXApIC0gZXZpY3RlZCAlenUgYnl0ZXMlcyIsIHRoaXMsIGlu
aXRpYWxCdWZmZXJlZFNpemUgLSBleHRyYU1lbW9yeUNvc3QoKSwgbV9idWZmZXJGdWxsID8gIiIg
OiAiIGJ1dCBGQUlMRUQgdG8gZnJlZSBlbm91Z2giKTsKKyNlbmRpZgorfQorCitzaXplX3QgU291
cmNlQnVmZmVyOjptYXhpbXVtQnVmZmVyU2l6ZSgpIGNvbnN0Cit7CisgICAgaWYgKGlzUmVtb3Zl
ZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEhUTUxNZWRpYUVsZW1lbnQqIGVsZW1lbnQg
PSBtX3NvdXJjZS0+bWVkaWFFbGVtZW50KCk7CisgICAgaWYgKCFlbGVtZW50KQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIHJldHVybiBlbGVtZW50LT5tYXhpbXVtU291cmNlQnVmZmVyU2l6ZSgq
dGhpcyk7Cit9CisKIGNvbnN0IEF0b21pY1N0cmluZyYgU291cmNlQnVmZmVyOjpkZWNvZGVFcnJv
cigpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gZGVjb2RlKCJk
ZWNvZGUiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKQEAgLTExODYsMjMg
KzEzNzQsMTcgQEAgdm9pZCBTb3VyY2VCdWZmZXI6OnNvdXJjZUJ1ZmZlclByaXZhdGVEaQogICAg
ICAgICAgICAgYXV0byBuZXh0U3luY0l0ZXIgPSB0cmFja0J1ZmZlci5zYW1wbGVzLmRlY29kZU9y
ZGVyKCkuZmluZFN5bmNTYW1wbGVBZnRlckRlY29kZUl0ZXJhdG9yKGxhc3REZWNvZGVJdGVyKTsK
ICAgICAgICAgICAgIGRlcGVuZGVudFNhbXBsZXMuaW5zZXJ0KGZpcnN0RGVjb2RlSXRlciwgbmV4
dFN5bmNJdGVyKTsKIAotCi0gICAgICAgICAgICBSZWZQdHI8VGltZVJhbmdlcz4gZXJhc2VkUmFu
Z2VzID0gVGltZVJhbmdlczo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIHNhbXBs
ZVBhaXIgOiBkZXBlbmRlbnRTYW1wbGVzKSB7Ci0gICAgICAgICAgICAgICAgTWVkaWFUaW1lIHN0
YXJ0VGltZSA9IHNhbXBsZVBhaXIuc2Vjb25kLT5wcmVzZW50YXRpb25UaW1lKCk7Ci0gICAgICAg
ICAgICAgICAgTWVkaWFUaW1lIGVuZFRpbWUgPSBzdGFydFRpbWUgKyBzYW1wbGVQYWlyLnNlY29u
ZC0+ZHVyYXRpb24oKSArIG1pY3Jvc2Vjb25kOwotICAgICAgICAgICAgICAgIGVyYXNlZFJhbmdl
cy0+YWRkKHN0YXJ0VGltZS50b0RvdWJsZSgpLCBlbmRUaW1lLnRvRG91YmxlKCkpOwotICAgICAg
ICAgICAgICAgIExPRyhNZWRpYVNvdXJjZSwgIlNvdXJjZUJ1ZmZlcjo6c291cmNlQnVmZmVyUHJp
dmF0ZURpZFJlY2VpdmVTYW1wbGUoJXApIC0gcmVtb3Zpbmcgc2FtcGxlKCVzKSIsIHRoaXMsIHRv
U3RyaW5nKCpzYW1wbGVQYWlyLnNlY29uZCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICAg
ICAgdHJhY2tCdWZmZXIuc2FtcGxlcy5yZW1vdmVTYW1wbGUoc2FtcGxlUGFpci5zZWNvbmQuZ2V0
KCkpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgUmVmUHRyPFRpbWVSYW5nZXM+IGVyYXNl
ZFJhbmdlcyA9IHJlbW92ZVNhbXBsZXNGcm9tVHJhY2tCdWZmZXIoZGVwZW5kZW50U2FtcGxlcywg
dHJhY2tCdWZmZXIsIHRoaXMsICJzb3VyY2VCdWZmZXJQcml2YXRlRGlkUmVjZWl2ZVNhbXBsZSIp
OwogCiAgICAgICAgICAgICAvLyBPbmx5IGZvcmNlIHRoZSBUcmFja0J1ZmZlciB0byByZS1lbnF1
ZXVlIGlmIHRoZSByZW1vdmVkIHJhbmdlcyBvdmVybGFwIHdpdGggZW5xdWV1ZWQgYW5kIHBvc3Np
Ymx5CiAgICAgICAgICAgICAvLyBub3QgeWV0IGRpc3BsYXllZCBzYW1wbGVzLgogICAgICAgICAg
ICAgTWVkaWFUaW1lIGN1cnJlbnRNZWRpYVRpbWUgPSBNZWRpYVRpbWU6OmNyZWF0ZVdpdGhEb3Vi
bGUobV9zb3VyY2UtPmN1cnJlbnRUaW1lKCkpOwotICAgICAgICAgICAgUGxhdGZvcm1UaW1lUmFu
Z2VzIHBvc3NpYmx5RW5xdWV1ZWRSYW5nZXMoY3VycmVudE1lZGlhVGltZSwgdHJhY2tCdWZmZXIu
bGFzdEVucXVldWVkUHJlc2VudGF0aW9uVGltZSk7Ci0gICAgICAgICAgICBwb3NzaWJseUVucXVl
dWVkUmFuZ2VzLmludGVyc2VjdFdpdGgoZXJhc2VkUmFuZ2VzLT5yYW5nZXMoKSk7Ci0gICAgICAg
ICAgICBpZiAocG9zc2libHlFbnF1ZXVlZFJhbmdlcy5sZW5ndGgoKSkKLSAgICAgICAgICAgICAg
ICB0cmFja0J1ZmZlci5uZWVkc1JlZW5xdWV1ZWluZyA9IHRydWU7CisgICAgICAgICAgICBpZiAo
Y3VycmVudE1lZGlhVGltZSA8IHRyYWNrQnVmZmVyLmxhc3RFbnF1ZXVlZFByZXNlbnRhdGlvblRp
bWUpIHsKKyAgICAgICAgICAgICAgICBQbGF0Zm9ybVRpbWVSYW5nZXMgcG9zc2libHlFbnF1ZXVl
ZFJhbmdlcyhjdXJyZW50TWVkaWFUaW1lLCB0cmFja0J1ZmZlci5sYXN0RW5xdWV1ZWRQcmVzZW50
YXRpb25UaW1lKTsKKyAgICAgICAgICAgICAgICBwb3NzaWJseUVucXVldWVkUmFuZ2VzLmludGVy
c2VjdFdpdGgoZXJhc2VkUmFuZ2VzLT5yYW5nZXMoKSk7CisgICAgICAgICAgICAgICAgaWYgKHBv
c3NpYmx5RW5xdWV1ZWRSYW5nZXMubGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgICAgIHRyYWNr
QnVmZmVyLm5lZWRzUmVlbnF1ZXVlaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgZXJhc2VkUmFuZ2VzLT5pbnZlcnQoKTsKICAgICAgICAgICAgIG1fYnVmZmVyZWQtPmlu
dGVyc2VjdFdpdGgoKmVyYXNlZFJhbmdlcy5nZXQoKSk7CkBAIC0xMjU0LDE2ICsxNDM2LDI2IEBA
IHZvaWQgU291cmNlQnVmZmVyOjpzb3VyY2VCdWZmZXJQcml2YXRlRGkKICAgICAgICAgbV9zb3Vy
Y2UtPnNldER1cmF0aW9uSW50ZXJuYWwoaGlnaGVzdFByZXNlbnRhdGlvbkVuZFRpbWVzdGFtcCgp
LnRvRG91YmxlKCkpOwogfQogCi1ib29sIFNvdXJjZUJ1ZmZlcjo6c291cmNlQnVmZmVyUHJpdmF0
ZUhhc0F1ZGlvKGNvbnN0IFNvdXJjZUJ1ZmZlclByaXZhdGUqKSBjb25zdAorYm9vbCBTb3VyY2VC
dWZmZXI6Omhhc0F1ZGlvKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9hdWRpb1RyYWNrcyAmJiBt
X2F1ZGlvVHJhY2tzLT5sZW5ndGgoKTsKIH0KIAotYm9vbCBTb3VyY2VCdWZmZXI6OnNvdXJjZUJ1
ZmZlclByaXZhdGVIYXNWaWRlbyhjb25zdCBTb3VyY2VCdWZmZXJQcml2YXRlKikgY29uc3QKK2Jv
b2wgU291cmNlQnVmZmVyOjpoYXNWaWRlbygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fdmlkZW9U
cmFja3MgJiYgbV92aWRlb1RyYWNrcy0+bGVuZ3RoKCk7CiB9CiAKK2Jvb2wgU291cmNlQnVmZmVy
Ojpzb3VyY2VCdWZmZXJQcml2YXRlSGFzQXVkaW8oY29uc3QgU291cmNlQnVmZmVyUHJpdmF0ZSop
IGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc0F1ZGlvKCk7Cit9CisKK2Jvb2wgU291cmNlQnVmZmVy
Ojpzb3VyY2VCdWZmZXJQcml2YXRlSGFzVmlkZW8oY29uc3QgU291cmNlQnVmZmVyUHJpdmF0ZSop
IGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc1ZpZGVvKCk7Cit9CisKIHZvaWQgU291cmNlQnVmZmVy
Ojp2aWRlb1RyYWNrU2VsZWN0ZWRDaGFuZ2VkKFZpZGVvVHJhY2sqIHRyYWNrKQogewogICAgIC8v
IDIuNC41IENoYW5nZXMgdG8gc2VsZWN0ZWQvZW5hYmxlZCB0cmFjayBzdGF0ZQpAQCAtMTUwNyw2
ICsxNjk5LDEwIEBAIGJvb2wgU291cmNlQnVmZmVyOjpoYXNDdXJyZW50VGltZSgpIGNvbnMKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgTWVkaWFUaW1lIGN1cnJlbnRUaW1lID0gTWVkaWFU
aW1lOjpjcmVhdGVXaXRoRG91YmxlKG1fc291cmNlLT5jdXJyZW50VGltZSgpKTsKKyAgICBNZWRp
YVRpbWUgZHVyYXRpb24gPSBNZWRpYVRpbWU6OmNyZWF0ZVdpdGhEb3VibGUobV9zb3VyY2UtPmR1
cmF0aW9uKCkpOworICAgIGlmIChjdXJyZW50VGltZSA+PSBkdXJhdGlvbikKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiByYW5n
ZXMgPSBidWZmZXJlZEFjY291bnRpbmdGb3JFbmRPZlN0cmVhbSgpOwogICAgIHJldHVybiBhYnMo
cmFuZ2VzLT5uZWFyZXN0KGN1cnJlbnRUaW1lKSAtIGN1cnJlbnRUaW1lKSA8PSBjdXJyZW50VGlt
ZUZ1ZGdlRmFjdG9yKCk7CiB9CkBAIC0xNTIxLDYgKzE3MTcsMTAgQEAgYm9vbCBTb3VyY2VCdWZm
ZXI6Omhhc0Z1dHVyZVRpbWUoKSBjb25zdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBN
ZWRpYVRpbWUgY3VycmVudFRpbWUgPSBNZWRpYVRpbWU6OmNyZWF0ZVdpdGhEb3VibGUobV9zb3Vy
Y2UtPmN1cnJlbnRUaW1lKCkpOworICAgIE1lZGlhVGltZSBkdXJhdGlvbiA9IE1lZGlhVGltZTo6
Y3JlYXRlV2l0aERvdWJsZShtX3NvdXJjZS0+ZHVyYXRpb24oKSk7CisgICAgaWYgKGN1cnJlbnRU
aW1lID49IGR1cmF0aW9uKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwogICAgIE1lZGlhVGltZSBu
ZWFyZXN0ID0gcmFuZ2VzLT5uZWFyZXN0KGN1cnJlbnRUaW1lKTsKICAgICBpZiAoYWJzKG5lYXJl
c3QgLSBjdXJyZW50VGltZSkgPiBjdXJyZW50VGltZUZ1ZGdlRmFjdG9yKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKQEAgLTE1MzAsNyArMTczMCw2IEBAIGJvb2wgU291cmNlQnVmZmVyOjpoYXNG
dXR1cmVUaW1lKCkgY29uc3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgTWVkaWFUaW1l
IGxvY2FsRW5kID0gcmFuZ2VzLT5lbmQoZm91bmQpOwotICAgIE1lZGlhVGltZSBkdXJhdGlvbiA9
IE1lZGlhVGltZTo6Y3JlYXRlV2l0aERvdWJsZShtX3NvdXJjZS0+ZHVyYXRpb24oKSk7CiAgICAg
aWYgKGxvY2FsRW5kID09IGR1cmF0aW9uKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIApAQCAtMTU2
NCwxMiArMTc2MywxOCBAQCBib29sIFNvdXJjZUJ1ZmZlcjo6Y2FuUGxheVRocm91Z2goKQogICAg
IHJldHVybiB1bmJ1ZmZlcmVkVGltZS50b0RvdWJsZSgpIC8gbV9hdmVyYWdlQnVmZmVyUmF0ZSA8
IHRpbWVSZW1haW5pbmcudG9Eb3VibGUoKTsKIH0KIAotdm9pZCBTb3VyY2VCdWZmZXI6OnJlcG9y
dEV4dHJhTWVtb3J5Q29zdCgpCitzaXplX3QgU291cmNlQnVmZmVyOjpleHRyYU1lbW9yeUNvc3Qo
KSBjb25zdAogewogICAgIHNpemVfdCBleHRyYU1lbW9yeUNvc3QgPSBtX3BlbmRpbmdBcHBlbmRE
YXRhLmNhcGFjaXR5KCk7CiAgICAgZm9yIChhdXRvJiB0cmFja0J1ZmZlciA6IG1fdHJhY2tCdWZm
ZXJNYXAudmFsdWVzKCkpCiAgICAgICAgIGV4dHJhTWVtb3J5Q29zdCArPSB0cmFja0J1ZmZlci5z
YW1wbGVzLnNpemVJbkJ5dGVzKCk7CiAKKyAgICByZXR1cm4gZXh0cmFNZW1vcnlDb3N0OworfQor
Cit2b2lkIFNvdXJjZUJ1ZmZlcjo6cmVwb3J0RXh0cmFNZW1vcnlDb3N0KCkKK3sKKyAgICBzaXpl
X3QgZXh0cmFNZW1vcnlDb3N0ID0gdGhpcy0+ZXh0cmFNZW1vcnlDb3N0KCk7CiAgICAgaWYgKGV4
dHJhTWVtb3J5Q29zdCA8IG1fcmVwb3J0ZWRFeHRyYU1lbW9yeUNvc3QpCiAgICAgICAgIHJldHVy
bjsKIApAQCAtMTU5NSw2ICsxODAwLDEyIEBAIFZlY3RvcjxTdHJpbmc+IFNvdXJjZUJ1ZmZlcjo6
YnVmZmVyZWRTYW0KICAgICByZXR1cm4gc2FtcGxlRGVzY3JpcHRpb25zOwogfQogCitEb2N1bWVu
dCYgU291cmNlQnVmZmVyOjpkb2N1bWVudCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKS0+aXNEb2N1bWVudCgpKTsKKyAgICByZXR1cm4gKnN0YXRpY19jYXN0
PERvY3VtZW50Kj4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
b3VyY2UvU291cmNlQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuaAkocmV2aXNpb24gMTcyNTgzKQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtOTAsNiArOTAsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNGdXR1cmVUaW1lKCkgY29u
c3Q7CiAgICAgYm9vbCBjYW5QbGF5VGhyb3VnaCgpOwogCisgICAgYm9vbCBoYXNWaWRlbygpIGNv
bnN0OworICAgIGJvb2wgaGFzQXVkaW8oKSBjb25zdDsKKwogICAgIGJvb2wgYWN0aXZlKCkgY29u
c3QgeyByZXR1cm4gbV9hY3RpdmU7IH0KIAogICAgIC8vIEFjdGl2ZURPTU9iamVjdCBpbnRlcmZh
Y2UKQEAgLTEwMyw2ICsxMDYsMTAgQEAgcHVibGljOgogICAgIHVzaW5nIFJlZkNvdW50ZWQ8U291
cmNlQnVmZmVyPjo6cmVmOwogICAgIHVzaW5nIFJlZkNvdW50ZWQ8U291cmNlQnVmZmVyPjo6ZGVy
ZWY7CiAKKyAgICBzdHJ1Y3QgVHJhY2tCdWZmZXI7CisKKyAgICBEb2N1bWVudCYgZG9jdW1lbnQo
KSBjb25zdDsKKwogcHJvdGVjdGVkOgogICAgIC8vIEV2ZW50VGFyZ2V0IGludGVyZmFjZQogICAg
IHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIG92ZXJyaWRlIHsgcmVmKCk7IH0KQEAgLTE0
OSwxNiArMTU2LDE4IEBAIHByaXZhdGU6CiAKICAgICBib29sIHZhbGlkYXRlSW5pdGlhbGl6YXRp
b25TZWdtZW50KGNvbnN0IEluaXRpYWxpemF0aW9uU2VnbWVudCYpOwogCi0gICAgc3RydWN0IFRy
YWNrQnVmZmVyOwogICAgIHZvaWQgcmVlbnF1ZXVlTWVkaWFGb3JUaW1lKFRyYWNrQnVmZmVyJiwg
QXRvbWljU3RyaW5nIHRyYWNrSUQsIGNvbnN0IE1lZGlhVGltZSYpOwogICAgIHZvaWQgcHJvdmlk
ZU1lZGlhRGF0YShUcmFja0J1ZmZlciYsIEF0b21pY1N0cmluZyB0cmFja0lEKTsKICAgICB2b2lk
IGRpZERyb3BTYW1wbGUoKTsKKyAgICB2b2lkIGV2aWN0Q29kZWRGcmFtZXMoc2l6ZV90IG5ld0Rh
dGFTaXplKTsKKyAgICBzaXplX3QgbWF4aW11bUJ1ZmZlclNpemUoKSBjb25zdDsKIAogICAgIHZv
aWQgbW9uaXRvckJ1ZmZlcmluZ1JhdGUoKTsKIAogICAgIHZvaWQgcmVtb3ZlVGltZXJGaXJlZChU
aW1lcjxTb3VyY2VCdWZmZXI+Kik7CiAgICAgdm9pZCByZW1vdmVDb2RlZEZyYW1lcyhjb25zdCBN
ZWRpYVRpbWUmIHN0YXJ0LCBjb25zdCBNZWRpYVRpbWUmIGVuZCk7CiAKKyAgICBzaXplX3QgZXh0
cmFNZW1vcnlDb3N0KCkgY29uc3Q7CiAgICAgdm9pZCByZXBvcnRFeHRyYU1lbW9yeUNvc3QoKTsK
IAogICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5nZXM+IGJ1ZmZlcmVkQWNjb3Vu
dGluZ0ZvckVuZE9mU3RyZWFtKCkgY29uc3Q7CkBAIC0xNzEsOCArMTgwLDYgQEAgcHJpdmF0ZToK
ICAgICBNZWRpYVNvdXJjZSogbV9zb3VyY2U7CiAgICAgR2VuZXJpY0V2ZW50UXVldWUgbV9hc3lu
Y0V2ZW50UXVldWU7CiAKLSAgICBib29sIG1fdXBkYXRpbmc7Ci0KICAgICBWZWN0b3I8dW5zaWdu
ZWQgY2hhcj4gbV9wZW5kaW5nQXBwZW5kRGF0YTsKICAgICBUaW1lcjxTb3VyY2VCdWZmZXI+IG1f
YXBwZW5kQnVmZmVyVGltZXI7CiAKQEAgLTE4OCw5ICsxOTUsNyBAQCBwcml2YXRlOgogICAgIE1l
ZGlhVGltZSBtX2hpZ2hlc3RQcmVzZW50YXRpb25FbmRUaW1lc3RhbXA7CiAKICAgICBIYXNoTWFw
PEF0b21pY1N0cmluZywgVHJhY2tCdWZmZXI+IG1fdHJhY2tCdWZmZXJNYXA7Ci0gICAgYm9vbCBt
X3JlY2VpdmVkRmlyc3RJbml0aWFsaXphdGlvblNlZ21lbnQ7CiAgICAgUmVmUHRyPFRpbWVSYW5n
ZXM+IG1fYnVmZmVyZWQ7Ci0gICAgYm9vbCBtX2FjdGl2ZTsKIAogICAgIGVudW0gQXBwZW5kU3Rh
dGVUeXBlIHsgV2FpdGluZ0ZvclNlZ21lbnQsIFBhcnNpbmdJbml0U2VnbWVudCwgUGFyc2luZ01l
ZGlhU2VnbWVudCB9OwogICAgIEFwcGVuZFN0YXRlVHlwZSBtX2FwcGVuZFN0YXRlOwpAQCAtMjA0
LDYgKzIwOSwxMSBAQCBwcml2YXRlOgogICAgIE1lZGlhVGltZSBtX3BlbmRpbmdSZW1vdmVTdGFy
dDsKICAgICBNZWRpYVRpbWUgbV9wZW5kaW5nUmVtb3ZlRW5kOwogICAgIFRpbWVyPFNvdXJjZUJ1
ZmZlcj4gbV9yZW1vdmVUaW1lcjsKKworICAgIGJvb2wgbV91cGRhdGluZzsKKyAgICBib29sIG1f
cmVjZWl2ZWRGaXJzdEluaXRpYWxpemF0aW9uU2VnbWVudDsKKyAgICBib29sIG1fYWN0aXZlOwor
ICAgIGJvb2wgbV9idWZmZXJGdWxsOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNzI1
ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNTE4LDcgKzI1MTgsNiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnJlZnJl
c2hDYWNoZWRUaW1lCiAgICAgICAgIHJldHVybjsgCiAgICAgfSAKIAotICAgIExPRyhNZWRpYSwg
IkhUTUxNZWRpYUVsZW1lbnQ6OnJlZnJlc2hDYWNoZWRUaW1lIC0gY2FjaGluZyB0aW1lICVmIiwg
bV9jYWNoZWRUaW1lKTsgCiAgICAgbV9jbG9ja1RpbWVBdExhc3RDYWNoZWRUaW1lVXBkYXRlID0g
bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CiB9CiAKQEAgLTU5NzIsNiArNTk3MSwxMyBA
QCBNZWRpYVNlc3Npb246Ok1lZGlhVHlwZSBIVE1MTWVkaWFFbGVtZW50CiAgICAgcmV0dXJuIE1l
ZGlhU2Vzc2lvbjo6QXVkaW87CiB9CiAKKyNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQorc2l6ZV90
IEhUTUxNZWRpYUVsZW1lbnQ6Om1heGltdW1Tb3VyY2VCdWZmZXJTaXplKGNvbnN0IFNvdXJjZUJ1
ZmZlciYgYnVmZmVyKSBjb25zdAoreworICAgIHJldHVybiBtX21lZGlhU2Vzc2lvbi0+bWF4aW11
bU1lZGlhU291cmNlQnVmZmVyU2l6ZShidWZmZXIpOworfQorI2VuZGlmCisKIHZvaWQgSFRNTE1l
ZGlhRWxlbWVudDo6cGF1c2VQbGF5YmFjaygpCiB7CiAgICAgTE9HKE1lZGlhLCAiSFRNTE1lZGlh
RWxlbWVudDo6cGF1c2VQbGF5YmFjayAtIHBhdXNlZCA9ICVzIiwgYm9vbFN0cmluZyhwYXVzZWQo
KSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgJKHJldmlzaW9u
IDE3MjU4MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Miw2ICs3Miw3IEBAIGNsYXNzIE1lZGlhS2V5czsKICNlbmRpZgogI2lm
IEVOQUJMRShNRURJQV9TT1VSQ0UpCiBjbGFzcyBNZWRpYVNvdXJjZTsKK2NsYXNzIFNvdXJjZUJ1
ZmZlcjsKIGNsYXNzIFZpZGVvUGxheWJhY2tRdWFsaXR5OwogI2VuZGlmCiAKQEAgLTIwOCw2ICsy
MDksNyBAQCBwdWJsaWM6CiAvLyAgTWVkaWEgU291cmNlLgogICAgIHZvaWQgY2xvc2VNZWRpYVNv
dXJjZSgpOwogICAgIHZvaWQgaW5jcmVtZW50RHJvcHBlZEZyYW1lQ291bnQoKSB7ICsrbV9kcm9w
cGVkVmlkZW9GcmFtZXM7IH0KKyAgICBzaXplX3QgbWF4aW11bVNvdXJjZUJ1ZmZlclNpemUoY29u
c3QgU291cmNlQnVmZmVyJikgY29uc3Q7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShFTkNSWVBURURf
TUVESUEpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYVNlc3Npb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhU2Vzc2lvbi5jcHAJKHJl
dmlzaW9uIDE3MjU4MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhU2Vzc2lvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJNZWRpYVNlc3Np
b25NYW5hZ2VyLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xs
ZXIuaCIKKyNpbmNsdWRlICJTb3VyY2VCdWZmZXIuaCIKIAogI2lmIFBMQVRGT1JNKElPUykKICNp
bmNsdWRlICJBdWRpb1Nlc3Npb24uaCIKQEAgLTMwMSw2ICszMDIsMzggQEAgdm9pZCBIVE1MTWVk
aWFTZXNzaW9uOjphcHBseU1lZGlhUGxheWVyUgogICAgIAogfQogCisjaWYgRU5BQkxFKE1FRElB
X1NPVVJDRSkKK2NvbnN0IHVuc2lnbmVkIGZpdmVNaW51dGVzT2YxMDgwUFZpZGVvID0gMjkwICog
MTAyNCAqIDEwMjQ7IC8vIDI5MCBNQiBpcyBhcHByb3hpbWF0ZWx5IDUgbWludXRlcyBvZiA4TWJw
cyAoMTA4MHApIGNvbnRlbnQuCitjb25zdCB1bnNpZ25lZCBmaXZlTWludXRlc1N0ZXJlb0F1ZGlv
ID0gMTQgKiAxMDI0ICogMTAyNDsgLy8gMTQgTUIgaXMgYXBwcm94aW1hdGVseSA1IG1pbnV0ZXMg
b2YgMzg0a2JwcyBjb250ZW50LgorCitzaXplX3QgSFRNTE1lZGlhU2Vzc2lvbjo6bWF4aW11bU1l
ZGlhU291cmNlQnVmZmVyU2l6ZShjb25zdCBTb3VyY2VCdWZmZXImIGJ1ZmZlcikgY29uc3QKK3sK
KyAgICAvLyBBIGdvb2QgcXVhbGl0eSAxMDgwcCB2aWRlbyB1c2VzIDgsMDAwIGticHMgYW5kIHN0
ZXJlbyBhdWRpbyB1c2VzIDM4NCBrYnBzLCBzbyBhc3N1bWUgOTUlIGZvciB2aWRlbyBhbmQgNSUg
Zm9yIGF1ZGlvLgorICAgIGNvbnN0IGZsb2F0IGJ1ZmZlckJ1ZGdldFBlcmNlbnRhZ2VGb3JWaWRl
byA9IC45NTsKKyAgICBjb25zdCBmbG9hdCBidWZmZXJCdWRnZXRQZXJjZW50YWdlRm9yQXVkaW8g
PSAuMDU7CisKKyAgICBzaXplX3QgbWF4aW11bTsKKyAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBi
dWZmZXIuZG9jdW1lbnQoKS5zZXR0aW5ncygpOworICAgIGlmIChzZXR0aW5ncykKKyAgICAgICAg
bWF4aW11bSA9IHNldHRpbmdzLT5tYXhpbXVtU291cmNlQnVmZmVyU2l6ZSgpOworICAgIGVsc2UK
KyAgICAgICAgbWF4aW11bSA9IGZpdmVNaW51dGVzT2YxMDgwUFZpZGVvICsgZml2ZU1pbnV0ZXNT
dGVyZW9BdWRpbzsKKworICAgIC8vIEFsbG93IGEgU291cmNlQnVmZmVyIHRvIGJ1ZmZlciBhcyB0
aG91Z2ggaXQgaXMgYXVkaW8tb25seSBldmVuIGlmIGl0IGRvZXNuJ3QgaGF2ZSBhbnkgYWN0aXZl
IHRyYWNrcyAoeWV0KS4KKyAgICBzaXplX3QgYnVmZmVyU2l6ZSA9IHN0YXRpY19jYXN0PHNpemVf
dD4obWF4aW11bSAqIGJ1ZmZlckJ1ZGdldFBlcmNlbnRhZ2VGb3JBdWRpbyk7CisgICAgaWYgKGJ1
ZmZlci5oYXNWaWRlbygpKQorICAgICAgICBidWZmZXJTaXplICs9IHN0YXRpY19jYXN0PHNpemVf
dD4obWF4aW11bSAqIGJ1ZmZlckJ1ZGdldFBlcmNlbnRhZ2VGb3JWaWRlbyk7CisKKyAgICAvLyBG
SVhNRTogd2UgbWlnaHQgd2FudCB0byBtb2RpZnkgdGhpcyBhbGdvcml0aG0gdG86CisgICAgLy8g
LSBkZWNyZWFzZSB0aGUgbWF4aW11bSBzaXplIGZvciBiYWNrZ3JvdW5kIHRhYnMKKyAgICAvLyAt
IGRlY3JlYXNlIHRoZSBtYXhpbXVtIHNpemUgYWxsb3dlZCBmb3IgaW5hY3RpdmUgZWxlbWVudHMg
d2hlbiBhIHByb2Nlc3MgaGFzIG1vcmUgdGhhbiBvbmUKKyAgICAvLyAgIGVsZW1lbnQsIGVnLiBz
byBhIHBhZ2Ugd2l0aCBtYW55IGVsZW1lbnRzIHdoaWNoIGFyZSBwbGF5ZWQgb25lIGF0IGEgdGlt
ZSBkb2Vzbid0IGtlZXAKKyAgICAvLyAgIGV2ZXJ5dGhpbmcgYnVmZmVyZWQgYWZ0ZXIgYW4gZWxl
bWVudCBoYXMgZmluaXNoZWQgcGxheWluZy4KKworICAgIHJldHVybiBidWZmZXJTaXplOworfQor
I2VuZGlmCisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShWSURFTykKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTE1lZGlhU2Vzc2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE1lZGlhU2Vzc2lvbi5oCShyZXZpc2lvbiAxNzI1ODMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxNZWRpYVNlc3Npb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQs
NyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBIVE1MTWVkaWFFbGVtZW50OworY2xh
c3MgU291cmNlQnVmZmVyOwogCiBjbGFzcyBIVE1MTWVkaWFTZXNzaW9uIDogcHVibGljIE1lZGlh
U2Vzc2lvbiB7CiBwdWJsaWM6CkBAIC04Miw2ICs4MywxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBh
ZGRCZWhhdmlvclJlc3RyaWN0aW9uKEJlaGF2aW9yUmVzdHJpY3Rpb25zKTsKICAgICB2b2lkIHJl
bW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24oQmVoYXZpb3JSZXN0cmljdGlvbnMpOwogCisjaWYgRU5B
QkxFKE1FRElBX1NPVVJDRSkKKyAgICBzaXplX3QgbWF4aW11bU1lZGlhU291cmNlQnVmZmVyU2l6
ZShjb25zdCBTb3VyY2VCdWZmZXImKSBjb25zdDsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIEJl
aGF2aW9yUmVzdHJpY3Rpb25zIG1fcmVzdHJpY3Rpb25zOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvU2V0dGluZ3MuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9T
ZXR0aW5ncy5pbgkocmV2aXNpb24gMTcyNTgzKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0
aW5ncy5pbgkod29ya2luZyBjb3B5KQpAQCAtMjMwLDQgKzIzMCw4IEBAIHVzZUltYWdlRG9jdW1l
bnRGb3JTdWJmcmFtZVBERiBpbml0aWFsPWYKICMgYXMgYSBtZWFucyB0byBwYXNzIGRhdGEgZnJv
bSB0aGUgd2ViLXBvcnRpb24gb2YgdGhlaXIgYXBwIHRvIHRoZSBuYXRpdmUgcG9ydGlvbi4KIGFs
bG93TmF2aWdhdGlvblRvSW52YWxpZFVSTCBpbml0aWFsPWZhbHNlCiAKKyMgQWxsb3cgU291cmNl
QnVmZmVycyB0byBzdG9yZSB1cCB0byAzMDRNQiBlYWNoLCBlbm91Z2ggZm9yIGFwcHJveGltYXRl
bHkgZml2ZSBtaW51dGVzCisjIG9mIDEwODBwIHZpZGVvIGFuZCBzdGVyZW8gYXVkaW8uCittYXhp
bXVtU291cmNlQnVmZmVyU2l6ZSB0eXBlPWludCwgaW5pdGlhbD0zMTg3NjcxMDQsIGNvbmRpdGlv
bmFsPU1FRElBX1NPVVJDRQorCiBsb25nTW91c2VQcmVzc0VuYWJsZWQgaW5pdGlhbD1mYWxzZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnVmZmVyUHJpdmF0
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NvdXJj
ZUJ1ZmZlclByaXZhdGUuaAkocmV2aXNpb24gMTcyNTgzKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvU291cmNlQnVmZmVyUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01
NSw4ICs1NSw2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgTWVkaWFQbGF5ZXI6OlJlYWR5U3Rh
dGUgcmVhZHlTdGF0ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0UmVhZHlTdGF0
ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBldmljdENv
ZGVkRnJhbWVzKCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBpc0Z1bGwoKSA9IDA7CiAKICAgICB2
aXJ0dWFsIHZvaWQgZmx1c2hBbmRFbnF1ZXVlTm9uRGlzcGxheWluZ1NhbXBsZXMoVmVjdG9yPFJl
ZlB0cjxNZWRpYVNhbXBsZT4+LCBBdG9taWNTdHJpbmcpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBl
bnF1ZXVlU2FtcGxlKFBhc3NSZWZQdHI8TWVkaWFTYW1wbGU+LCBBdG9taWNTdHJpbmcpIHsgfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
U291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9Tb3VyY2VCdWZmZXJQcml2YXRl
QVZGT2JqQy5oCShyZXZpc2lvbiAxNzI1ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9Tb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTIsOCArMTEyLDYgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZv
aWQgcmVtb3ZlZEZyb21NZWRpYVNvdXJjZSgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgTWVkaWFQ
bGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1
YWwgdm9pZCBzZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlKSBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIHZvaWQgZXZpY3RDb2RlZEZyYW1lcygpIG92ZXJyaWRlOwotICAgIHZpcnR1
YWwgYm9vbCBpc0Z1bGwoKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZmx1c2hBbmRFbnF1
ZXVlTm9uRGlzcGxheWluZ1NhbXBsZXMoVmVjdG9yPFJlZlB0cjxNZWRpYVNhbXBsZT4+LCBBdG9t
aWNTdHJpbmcgdHJhY2tJRCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGVucXVldWVTYW1w
bGUoUGFzc1JlZlB0cjxNZWRpYVNhbXBsZT4sIEF0b21pY1N0cmluZyB0cmFja0lEKSBvdmVycmlk
ZTsKICAgICB2aXJ0dWFsIGJvb2wgaXNSZWFkeUZvck1vcmVTYW1wbGVzKEF0b21pY1N0cmluZyB0
cmFja0lEKSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpj
L1NvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLm1tCShyZXZpc2lvbiAxNzI1ODMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9Tb3VyY2VCdWZm
ZXJQcml2YXRlQVZGT2JqQy5tbQkod29ya2luZyBjb3B5KQpAQCAtNjMyLDcgKzYzMiw3IEBAIGJv
b2wgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OnByb2Nlc3MKICAgICAgICAgQ01Gb3JtYXRE
ZXNjcmlwdGlvblJlZiBmb3JtYXREZXNjcmlwdGlvbiA9IENNU2FtcGxlQnVmZmVyR2V0Rm9ybWF0
RGVzY3JpcHRpb24oc2FtcGxlQnVmZmVyKTsKICAgICAgICAgRmxvYXRTaXplIGZvcm1hdFNpemUg
PSBGbG9hdFNpemUoQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uR2V0UHJlc2VudGF0aW9uRGltZW5z
aW9ucyhmb3JtYXREZXNjcmlwdGlvbiwgdHJ1ZSwgdHJ1ZSkpOwogICAgICAgICBpZiAoZm9ybWF0
U2l6ZSAhPSBtX2NhY2hlZFNpemUpIHsKLSAgICAgICAgICAgIExPRyhNZWRpYVNvdXJjZSwgIlNv
dXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpwcm9jZXNzQ29kZWRGcmFtZSglcCkgLSBzaXplIGNo
YW5nZSBkZXRlY3RlZDoge3dpZHRoPSVsZiwgaGVpZ2h0PSVsZiIsIGZvcm1hdFNpemUud2lkdGgo
KSwgZm9ybWF0U2l6ZS5oZWlnaHQoKSk7CisgICAgICAgICAgICBMT0coTWVkaWFTb3VyY2UsICJT
b3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6cHJvY2Vzc0NvZGVkRnJhbWUoJXApIC0gc2l6ZSBj
aGFuZ2UgZGV0ZWN0ZWQ6IHt3aWR0aD0lbGYsIGhlaWdodD0lbGZ9IiwgZm9ybWF0U2l6ZS53aWR0
aCgpLCBmb3JtYXRTaXplLmhlaWdodCgpKTsKICAgICAgICAgICAgIG1fY2FjaGVkU2l6ZSA9IGZv
cm1hdFNpemU7CiAgICAgICAgICAgICBpZiAobV9tZWRpYVNvdXJjZSkKICAgICAgICAgICAgICAg
ICBtX21lZGlhU291cmNlLT5wbGF5ZXIoKS0+c2l6ZUNoYW5nZWQoKTsKQEAgLTc3OSwxOCArNzc5
LDYgQEAgdm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6c2V0UmVhZAogICAgICAgICBt
X21lZGlhU291cmNlLT5wbGF5ZXIoKS0+c2V0UmVhZHlTdGF0ZShyZWFkeVN0YXRlKTsKIH0KIAot
dm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6ZXZpY3RDb2RlZEZyYW1lcygpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2Jq
Qzo6aXNGdWxsKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotCiBib29sIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpoYXNWaWRlbygpIGNvbnN0
CiB7CiAgICAgaWYgKCFtX2NsaWVudCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21v
Y2svbWVkaWFzb3VyY2UvTW9ja1NvdXJjZUJ1ZmZlclByaXZhdGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja1NvdXJjZUJ1ZmZl
clByaXZhdGUuY3BwCShyZXZpc2lvbiAxNzI1ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tb2NrL21lZGlhc291cmNlL01vY2tTb3VyY2VCdWZmZXJQcml2YXRlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjEzLDE2ICsyMTMsNiBAQCB2b2lkIE1vY2tTb3VyY2VCdWZmZXJQcml2YXRlOjpz
ZXRSZWFkeVN0CiAgICAgICAgIG1fbWVkaWFTb3VyY2UtPnBsYXllcigpLT5zZXRSZWFkeVN0YXRl
KHJlYWR5U3RhdGUpOwogfQogCi12b2lkIE1vY2tTb3VyY2VCdWZmZXJQcml2YXRlOjpldmljdENv
ZGVkRnJhbWVzKCkKLXsKLSAgICAvLyBOby1vcC4KLX0KLQotYm9vbCBNb2NrU291cmNlQnVmZmVy
UHJpdmF0ZTo6aXNGdWxsKCkKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIHZvaWQgTW9ja1Nv
dXJjZUJ1ZmZlclByaXZhdGU6OnNldEFjdGl2ZShib29sIGlzQWN0aXZlKQogewogICAgIGlmICht
X21lZGlhU291cmNlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9tZWRpYXNv
dXJjZS9Nb2NrU291cmNlQnVmZmVyUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja1NvdXJjZUJ1ZmZlclByaXZhdGUuaAko
cmV2aXNpb24gMTcyNTgzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9tZWRpYXNv
dXJjZS9Nb2NrU291cmNlQnVmZmVyUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw4ICs2
OCw2IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tTWVkaWFTb3VyY2Uo
KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5U3Rh
dGUoKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0UmVhZHlTdGF0ZShNZWRp
YVBsYXllcjo6UmVhZHlTdGF0ZSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGV2aWN0Q29k
ZWRGcmFtZXMoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNGdWxsKCkgb3ZlcnJpZGU7
CiAKICAgICB2aXJ0dWFsIHZvaWQgZmx1c2hBbmRFbnF1ZXVlTm9uRGlzcGxheWluZ1NhbXBsZXMo
VmVjdG9yPFJlZlB0cjxNZWRpYVNhbXBsZT4+LCBBdG9taWNTdHJpbmcpIG92ZXJyaWRlIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCBlbnF1ZXVlU2FtcGxlKFBhc3NSZWZQdHI8TWVkaWFTYW1wbGU+LCBB
dG9taWNTdHJpbmcpIG92ZXJyaWRlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236676</attachid>
            <date>2014-08-15 14:31:37 -0700</date>
            <delta_ts>2014-08-15 14:50:19 -0700</delta_ts>
            <desc>Patch for landing.</desc>
            <filename>patch_9.txt</filename>
            <type>text/plain</type>
            <size>40703</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MjY1MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg5IEBACisyMDE0LTA4LTE0ICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNU0VdIEltcGxlbWVu
dCBhIG1heGltdW0gYnVmZmVyIHNpemUgZm9yIFNvdXJjZUJ1ZmZlcgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1NjE0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgSmVyIE5vYmxlLgorCisgICAgICAgIEltcGxlbWVudCB0aGUgTVNFIGNvZGVkIGZyYW1l
IGV2aWN0aW9uIGFsZ29yaXRobTogd2hlbiBuZXcgYnVmZmVycyBhcmUgYXBwZW5kZWQgYXR0ZW1w
dAorICAgICAgICB0byBrZWVwIHRoZSBhbW91bnQgb2YgZGF0YSBidWZmZXJlZCBiZWxvdyBhIG1h
eGltdW0gc2l6ZSAod2hpY2ggaXMgZGV0ZXJtaW5lZCBieSB0aGUgbWVkaWEKKyAgICAgICAgc2Vz
c2lvbiBtYW5hZ2VyKSBieSBmcmVlaW5nIGNvZGVkIGZyYW1lcyBhcyBmb2xsb3dzOgorICAgICAg
ICAgICAgMSAtIEZyZWUgZnJhbWVzIGluIDMwIHNlY29uZCBjaHVua3MgZnJvbSAwIHRvIDMwIHNl
Y29uZHMgYmVmb3JlIHRoZSBjdXJyZW50IHRpbWUuCisgICAgICAgICAgICAyIC0gSWYgdGhlcmUg
YXJlIHRpbWUgcmFuZ2VzIGFmdGVyIHRoZSByYW5nZSB3aXRoIHRoZSBjdXJyZW50IHRpbWUsIGZy
ZWUgZnJhbWVzIGluCisgICAgICAgICAgICAgICAgMzAgc2Vjb25kIGNodW5rcyBmcm9tIGR1cmF0
aW9uIGJhY2sgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgdGltZSByYW5nZSBhZnRlcgorICAgICAg
ICAgICAgICAgIGN1cnJlbnQgdGltZS4KKworICAgICAgICBGb3Igbm93IHdlIERPIE5PVCB0aHJv
dyBhIFFVT1RBX0VYQ0VFREVEX0VSUiB3aGVuIHdlIGFyZSBub3QgYWJsZSB0byBmcmVlIHVwIGVu
b3VnaAorICAgICAgICBzcGFjZSB0byByZW1haW4gYmVsb3cgdGhlIHByZXNjcmliZWQgcXVvdGEs
IGJlY2F1c2Ugc29tZSBiaWcgbmFtZSwgd2lkZWx5IGRlcGxveWVkLCAKKyAgICAgICAgY29kZSBi
YXNlcyBpZ25vcmUgdGhlIGVycm9yIGFuZCBjb250aW51ZSBhcHBlbmRpbmcgZGF0YSBhcyB0aG91
Z2ggdGhlIGZhaWxlZCBhcHBlbmQKKyAgICAgICAgc3VjY2VlZGVkLCBsZWFkaW5nIHRvIGEgY29y
cnVwdGVkIGJpdHN0cmVhbSBhbmQgZmFpbHVyZSB0byBwbGF5LgorCisgICAgICAgICogTW9kdWxl
cy9tZWRpYXNvdXJjZS9TYW1wbGVNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2FtcGxlTWFw
OjphZGRTYW1wbGUpOiBEcml2ZS1ieSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb246IHNhbXBsZS0+
cHJlc2VudGF0aW9uVGltZSgpCisgICAgICAgICAgICBpcyB1c2VkIG1vcmUgdGhhbiBvbmNlLCBz
dGFzaCBpdCBpbiBhIGxvY2FsIHZhcmlhYmxlLgorICAgICAgICAoV2ViQ29yZTo6U2FtcGxlTWFw
OjpyZW1vdmVTYW1wbGUpOiBEaXR0by4KKworICAgICAgICAqIE1vZHVsZXMvbWVkaWFzb3VyY2Uv
U291cmNlQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmxvZ1Jhbmdlcyk6IERlYnVnLW9u
bHkgZnVuY3Rpb24gdG8gbG9nIFRpbWVSYW5nZXMuCisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VC
dWZmZXI6OlNvdXJjZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXI6OnJl
bW92ZSk6IE9wdGltaXplIGxvZ2dpbmcuIEJ1ZmZlciBmdWxsIGFuZCBjb2RlZCBmcmFtZSBldmlj
dGlvbiBsb2dpYworICAgICAgICAgICAgaXMgaW4gU291cmNlQnVmZmVyIGluc3RlYWQgb2YgU291
cmNlQnVmZmVyUHJpdmF0ZS4KKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlcjo6YXBwZW5k
QnVmZmVySW50ZXJuYWwpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlcjo6
c291cmNlQnVmZmVyUHJpdmF0ZUFwcGVuZENvbXBsZXRlKTogU2V0IG1fYnVmZmVyRnVsbCB3aGVu
IG1vcmUgZGF0YQorICAgICAgICAgICAgaGFzIGJlZW4gYnVmZmVyZWQgdGhhbiBhbGxvd2VkLgor
ICAgICAgICAoV2ViQ29yZTo6cmVtb3ZlU2FtcGxlc0Zyb21UcmFja0J1ZmZlcik6IEFkZCBsb2dn
aW5nLgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyOjpyZW1vdmVDb2RlZEZyYW1lcyk6
IEltcHJvdmUgbG9nZ2luZy4gQXZvaWQgZGVidWcgYnVpbGQgYXNzZXJ0IHdoZW4KKyAgICAgICAg
ICAgIGN1cnJlbnQgdGltZSBpcyBhZnRlciBsYXN0IGVucXVldWVkIHByZXNlbnRhdGlvbiB0aW1l
LgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyOjpldmljdENvZGVkRnJhbWVzKTogVGhl
IGNvZGVkIGZyYW1lIGV2aWN0aW9uIGFsZ29yaXRobS4KKyAgICAgICAgKFdlYkNvcmU6OlNvdXJj
ZUJ1ZmZlcjo6bWF4aW11bUJ1ZmZlclNpemUpOiBSZXR1cm4gdGhlIG1heGltdW0gYW1vdW50IG9m
IGRhdGEgdGhhdCBjYW4gCisgICAgICAgICAgICBiZSBidWZmZXJlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNvdXJjZUJ1ZmZlcjo6c291cmNlQnVmZmVyUHJpdmF0ZURpZFJlY2VpdmVTYW1wbGUpOiBJ
bXByb3ZlIGxvZ2dpbmcuIERvbid0IGF0dGVtcHQKKyAgICAgICAgICAgIHRvIGNyZWF0ZSBhIFBs
YXRmb3JtVGltZVJhbmdlcyB3aXRoIGludmVydGVkIHN0YXJ0IGFuZCBlbmQgdG8gYXZvaWQgYW4g
YXNzZXJ0IGluIGRlYnVnLgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyOjpoYXNBdWRp
byk6IE5ldywgcmV0dXJuIHRydWUgaWYgdGhlcmUgYXJlIGFueSBhdWRpbyB0cmFja3MuCisgICAg
ICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXI6Omhhc1ZpZGVvKTogTmV3LCByZXR1cm4gdHJ1ZSBp
ZiB0aGVyZSBhcmUgYW55IHZpZGVvIHRyYWNrcy4KKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1
ZmZlcjo6c291cmNlQnVmZmVyUHJpdmF0ZUhhc0F1ZGlvKTogQ2FsbCBoYXNBdWRpby4KKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlcjo6c291cmNlQnVmZmVyUHJpdmF0ZUhhc1ZpZGVvKTog
Q2FsbCBoYXNWaWRlby4KKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlcjo6aGFzQ3VycmVu
dFRpbWUpOiBSZXR1cm4gdHJ1ZSBpZiBjdXJyZW50VGltZSBpcyBncmVhdGVyIHRoYW4gZHVyYXRp
b24uCisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXI6Omhhc0Z1dHVyZVRpbWUpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlcjo6ZXh0cmFNZW1vcnlDb3N0KTogUmV0
dXJuIHRoZSBhbW91bnQgb2YgZGF0YSBidWZmZXJlZDogdGhlIHNpemUgb2YKKyAgICAgICAgICAg
IHRoZSBpbnB1dCBidWZmZXIgcGx1cyB0aGUgc2l6ZSBvZiBhbGwgdHJhY2sgc2FtcGxlcy4KKyAg
ICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlcjo6cmVwb3J0RXh0cmFNZW1vcnlDb3N0KTogTW92
ZSBidWZmZXJlZCBzaXplIGNhbGN1bGF0aW9uIHRvIGV4dHJhTWVtb3J5Q29zdC4KKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUJ1ZmZlcjo6ZG9jdW1lbnQpOiBEb2N1bWVudCBhY2Nlc3Nvci4KKyAg
ICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5oOiBEcml2ZS1ieSBzaXpl
IG9wdGltaXphdGlvbiBieSBtb3ZpbmcgYWxsIGJvb2wgbWVtYmVyCisgICAgICAgICAgICB2YXJp
YWJsZXMgdG8gdGhlIGVuZCBvZiBjbGFzcy4KKworICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpyZWZyZXNoQ2Fj
aGVkVGltZSk6IERyaXZlLWJ5IHJlbW92YWwgb2Ygb3Zlcmx5IGNoYXR0eSBsb2dnaW5nLgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6bWF4aW11bVNvdXJjZUJ1ZmZlclNpemUp
OiBOZXcsIG1heGltdW0gc291cmNlIGJ1ZmZlciBzaXplLgorICAgICAgICAqIGh0bWwvSFRNTE1l
ZGlhRWxlbWVudC5oOgorCisgICAgICAgICogaHRtbC9IVE1MTWVkaWFTZXNzaW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYVNlc3Npb246Om1heGltdW1NZWRpYVNvdXJjZUJ1ZmZl
clNpemUpOiBOZXcsIGdldCBtYXhpbXVtIHNvdXJjZSBidWZmZXIgCisgICAgICAgICAgICBzaXpl
IGZyb20gc2V0dGluZ3MsIHJldHVybiBmdWxsIGFtb3VudCBmb3IgYW4gU291cmNlQnVmZmVyIHdp
dGggdmlkZW8gYW5kIGF1ZGlvLCByZXR1cm4gNSUKKyAgICAgICAgICAgIG9mIHRoZSBtYXhpbXVt
IGZvciBhbiBhdWRpby1vbmx5IFNvdXJjZUJ1ZmZlci4KKyAgICAgICAgKiBodG1sL0hUTUxNZWRp
YVNlc3Npb24uaDoKKworICAgICAgICAqIHBhZ2UvU2V0dGluZ3MuaW46IEFkZCBtYXhpbXVtU291
cmNlQnVmZmVyU2l6ZS4gRGVmYXVsdCB2YWx1ZSBpcyBlbm91Z2ggZm9yIGFwcHJveGltYXRlbHkK
KyAgICAgICAgICAgIGZpdmUgbWludXRlcyBvZiAxMDgwcCB2aWRlbyBhbmQgc3RlcmVvIGF1ZGlv
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1UaW1lUmFuZ2VzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtVGltZVJhbmdlczo6dG90YWxEdXJhdGlvbik6IERy
aXZlLWJ5IG9wdGltaXphdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtVGltZVJhbmdl
czo6ZHVtcCk6IE5ldywgYWxsb3cgYSBQbGF0Zm9ybVRpbWVSYW5nZXMgdG8gYmUgcHJpbnRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVRpbWVSYW5nZXMuaDoKKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJ1ZmZlclByaXZhdGUuaDogRGVsZXRlIGV2
aWN0Q29kZWRGcmFtZXMgYW5kIGlzRnVsbCwgdGhhdCBsb2dpYworICAgICAgICAgICAgaXMgbm90
IGluIFNvdXJjZUJ1ZmZlci4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vb2JqYy9Tb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLm1t
OgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OnByb2Nlc3ND
b2RlZEZyYW1lKTogRHJpdmUtYnkgbG9nZ2luZyBmaXguCisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6ZXZpY3RDb2RlZEZyYW1lcyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6aXNGdWxsKTogRGVsZXRl
ZC4KKworICAgICAgICAqIHBsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja1NvdXJjZUJ1ZmZl
clByaXZhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW9ja1NvdXJjZUJ1ZmZlclByaXZhdGU6
OmV2aWN0Q29kZWRGcmFtZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TW9ja1NvdXJj
ZUJ1ZmZlclByaXZhdGU6OmlzRnVsbCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vbW9j
ay9tZWRpYXNvdXJjZS9Nb2NrU291cmNlQnVmZmVyUHJpdmF0ZS5oOgorCiAyMDE0LTA4LTE1ICBK
ZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIFtFTUVdW01hY10gQWRv
cHQgQVZTdHJlYW1TZXNzaW9uLgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNv
dXJjZS9TYW1wbGVNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzb3VyY2UvU2FtcGxlTWFwLmNwcAkocmV2aXNpb24gMTcyNTgzKQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9TYW1wbGVNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTMsOSArMTEzLDExIEBAIHZvaWQgU2FtcGxlTWFwOjphZGRTYW1wbGUoUGFzc1JlZlB0cjxN
ZWQKICAgICBSZWZQdHI8TWVkaWFTYW1wbGU+IHNhbXBsZSA9IHBycFNhbXBsZTsKICAgICBBU1NF
UlQoc2FtcGxlKTsKIAotICAgIHByZXNlbnRhdGlvbk9yZGVyKCkubV9zYW1wbGVzLmluc2VydChQ
cmVzZW50YXRpb25PcmRlclNhbXBsZU1hcDo6TWFwVHlwZTo6dmFsdWVfdHlwZShzYW1wbGUtPnBy
ZXNlbnRhdGlvblRpbWUoKSwgc2FtcGxlKSk7CisgICAgTWVkaWFUaW1lIHByZXNlbnRhdGlvblRp
bWUgPSBzYW1wbGUtPnByZXNlbnRhdGlvblRpbWUoKTsKIAotICAgIGF1dG8gZGVjb2RlS2V5ID0g
RGVjb2RlT3JkZXJTYW1wbGVNYXA6OktleVR5cGUoc2FtcGxlLT5kZWNvZGVUaW1lKCksIHNhbXBs
ZS0+cHJlc2VudGF0aW9uVGltZSgpKTsKKyAgICBwcmVzZW50YXRpb25PcmRlcigpLm1fc2FtcGxl
cy5pbnNlcnQoUHJlc2VudGF0aW9uT3JkZXJTYW1wbGVNYXA6Ok1hcFR5cGU6OnZhbHVlX3R5cGUo
cHJlc2VudGF0aW9uVGltZSwgc2FtcGxlKSk7CisKKyAgICBhdXRvIGRlY29kZUtleSA9IERlY29k
ZU9yZGVyU2FtcGxlTWFwOjpLZXlUeXBlKHNhbXBsZS0+ZGVjb2RlVGltZSgpLCBwcmVzZW50YXRp
b25UaW1lKTsKICAgICBkZWNvZGVPcmRlcigpLm1fc2FtcGxlcy5pbnNlcnQoRGVjb2RlT3JkZXJT
YW1wbGVNYXA6Ok1hcFR5cGU6OnZhbHVlX3R5cGUoZGVjb2RlS2V5LCBzYW1wbGUpKTsKIAogICAg
IG1fdG90YWxTaXplICs9IHNhbXBsZS0+c2l6ZUluQnl0ZXMoKTsKQEAgLTEyNCw5ICsxMjYsMTEg
QEAgdm9pZCBTYW1wbGVNYXA6OmFkZFNhbXBsZShQYXNzUmVmUHRyPE1lZAogdm9pZCBTYW1wbGVN
YXA6OnJlbW92ZVNhbXBsZShNZWRpYVNhbXBsZSogc2FtcGxlKQogewogICAgIEFTU0VSVChzYW1w
bGUpOwotICAgIHByZXNlbnRhdGlvbk9yZGVyKCkubV9zYW1wbGVzLmVyYXNlKHNhbXBsZS0+cHJl
c2VudGF0aW9uVGltZSgpKTsKKyAgICBNZWRpYVRpbWUgcHJlc2VudGF0aW9uVGltZSA9IHNhbXBs
ZS0+cHJlc2VudGF0aW9uVGltZSgpOworCisgICAgcHJlc2VudGF0aW9uT3JkZXIoKS5tX3NhbXBs
ZXMuZXJhc2UocHJlc2VudGF0aW9uVGltZSk7CiAKLSAgICBhdXRvIGRlY29kZUtleSA9IERlY29k
ZU9yZGVyU2FtcGxlTWFwOjpLZXlUeXBlKHNhbXBsZS0+ZGVjb2RlVGltZSgpLCBzYW1wbGUtPnBy
ZXNlbnRhdGlvblRpbWUoKSk7CisgICAgYXV0byBkZWNvZGVLZXkgPSBEZWNvZGVPcmRlclNhbXBs
ZU1hcDo6S2V5VHlwZShzYW1wbGUtPmRlY29kZVRpbWUoKSwgcHJlc2VudGF0aW9uVGltZSk7CiAg
ICAgZGVjb2RlT3JkZXIoKS5tX3NhbXBsZXMuZXJhc2UoZGVjb2RlS2V5KTsKIAogICAgIG1fdG90
YWxTaXplIC09IHNhbXBsZS0+c2l6ZUluQnl0ZXMoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5jcHAJKHJldmlzaW9uIDE3
MjU4MykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTQ4LDEyICs0OSwxNiBAQAogI2luY2x1ZGUgIlRleHRU
cmFja0xpc3QuaCIKICNpbmNsdWRlICJUaW1lUmFuZ2VzLmgiCiAjaW5jbHVkZSAiVmlkZW9UcmFj
a0xpc3QuaCIKKyNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8bWFwPgogI2luY2x1ZGUgPHJ1
bnRpbWUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+CiAjaW5jbHVk
ZSA8cnVudGltZS9WTS5oPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2lmICFMT0dfRElTQUJMRUQKKyNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC0xMDQsMTIgKzEwOSw5IEBAIFNvdXJjZUJ1ZmZlcjo6U291cmNlQnVmZmVyKFBhc3NSZWY8U291
cmMKICAgICAsIG1fcHJpdmF0ZShXVEY6Om1vdmUoc291cmNlQnVmZmVyUHJpdmF0ZSkpCiAgICAg
LCBtX3NvdXJjZShzb3VyY2UpCiAgICAgLCBtX2FzeW5jRXZlbnRRdWV1ZSgqdGhpcykKLSAgICAs
IG1fdXBkYXRpbmcoZmFsc2UpCiAgICAgLCBtX2FwcGVuZEJ1ZmZlclRpbWVyKHRoaXMsICZTb3Vy
Y2VCdWZmZXI6OmFwcGVuZEJ1ZmZlclRpbWVyRmlyZWQpCiAgICAgLCBtX2hpZ2hlc3RQcmVzZW50
YXRpb25FbmRUaW1lc3RhbXAoTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpKQotICAgICwgbV9yZWNl
aXZlZEZpcnN0SW5pdGlhbGl6YXRpb25TZWdtZW50KGZhbHNlKQogICAgICwgbV9idWZmZXJlZChU
aW1lUmFuZ2VzOjpjcmVhdGUoKSkKLSAgICAsIG1fYWN0aXZlKGZhbHNlKQogICAgICwgbV9hcHBl
bmRTdGF0ZShXYWl0aW5nRm9yU2VnbWVudCkKICAgICAsIG1fdGltZU9mQnVmZmVyaW5nTW9uaXRv
cihtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSkKICAgICAsIG1fYnVmZmVyZWRTaW5jZUxh
c3RNb25pdG9yKDApCkBAIC0xMTgsNiArMTIwLDEwIEBAIFNvdXJjZUJ1ZmZlcjo6U291cmNlQnVm
ZmVyKFBhc3NSZWY8U291cmMKICAgICAsIG1fcGVuZGluZ1JlbW92ZVN0YXJ0KE1lZGlhVGltZTo6
aW52YWxpZFRpbWUoKSkKICAgICAsIG1fcGVuZGluZ1JlbW92ZUVuZChNZWRpYVRpbWU6OmludmFs
aWRUaW1lKCkpCiAgICAgLCBtX3JlbW92ZVRpbWVyKHRoaXMsICZTb3VyY2VCdWZmZXI6OnJlbW92
ZVRpbWVyRmlyZWQpCisgICAgLCBtX3VwZGF0aW5nKGZhbHNlKQorICAgICwgbV9yZWNlaXZlZEZp
cnN0SW5pdGlhbGl6YXRpb25TZWdtZW50KGZhbHNlKQorICAgICwgbV9hY3RpdmUoZmFsc2UpCisg
ICAgLCBtX2J1ZmZlckZ1bGwoZmFsc2UpCiB7CiAgICAgQVNTRVJUKG1fc291cmNlKTsKIApAQCAt
MjM1LDcgKzI0MSw4IEBAIHZvaWQgU291cmNlQnVmZmVyOjphYm9ydChFeGNlcHRpb25Db2RlJiAK
IAogdm9pZCBTb3VyY2VCdWZmZXI6OnJlbW92ZShkb3VibGUgc3RhcnQsIGRvdWJsZSBlbmQsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIExPRyhNZWRpYVNvdXJjZSwgIlNvdXJjZUJ1ZmZlcjo6
cmVtb3ZlKCVwKSAtIHN0YXJ0KCVzKSwgZW5kKCVzKSIsIHRoaXMsIHRvU3RyaW5nKHN0YXJ0KS51
dGY4KCkuZGF0YSgpLCB0b1N0cmluZyhlbmQpLnV0ZjgoKS5kYXRhKCkpOworICAgIExPRyhNZWRp
YVNvdXJjZSwgIlNvdXJjZUJ1ZmZlcjo6cmVtb3ZlKCVwKSAtIHN0YXJ0KCVsZiksIGVuZCglbGYp
IiwgdGhpcywgc3RhcnQsIGVuZCk7CisKICAgICAvLyBTZWN0aW9uIDMuMiByZW1vdmUoKSBtZXRo
b2Qgc3RlcHMuCiAgICAgLy8gMS4gSWYgc3RhcnQgaXMgbmVnYXRpdmUgb3IgZ3JlYXRlciB0aGFu
IGR1cmF0aW9uLCB0aGVuIHRocm93IGFuIEludmFsaWRBY2Nlc3NFcnJvciBleGNlcHRpb24gYW5k
IGFib3J0IHRoZXNlIHN0ZXBzLgogICAgIC8vIDIuIElmIGVuZCBpcyBsZXNzIHRoYW4gb3IgZXF1
YWwgdG8gc3RhcnQsIHRoZW4gdGhyb3cgYW4gSW52YWxpZEFjY2Vzc0Vycm9yIGV4Y2VwdGlvbiBh
bmQgYWJvcnQgdGhlc2Ugc3RlcHMuCkBAIC00MDcsMTMgKzQxNCwxNyBAQCB2b2lkIFNvdXJjZUJ1
ZmZlcjo6YXBwZW5kQnVmZmVySW50ZXJuYWwoCiAgICAgbV9zb3VyY2UtPm9wZW5JZkluRW5kZWRT
dGF0ZSgpOwogCiAgICAgLy8gNC4gUnVuIHRoZSBjb2RlZCBmcmFtZSBldmljdGlvbiBhbGdvcml0
aG0uCi0gICAgbV9wcml2YXRlLT5ldmljdENvZGVkRnJhbWVzKCk7CisgICAgZXZpY3RDb2RlZEZy
YW1lcyhzaXplKTsKIAorICAgIC8vIEZJWE1FOiBlbmFibGUgdGhpcyBjb2RlIHdoZW4gTVNFIGxp
YnJhcmllcyBoYXZlIGJlZW4gdXBkYXRlZCB0byBzdXBwb3J0IGl0LgorI2lmIDAKICAgICAvLyA1
LiBJZiB0aGUgYnVmZmVyIGZ1bGwgZmxhZyBlcXVhbHMgdHJ1ZSwgdGhlbiB0aHJvdyBhIFFVT1RB
X0VYQ0VFREVEX0VSUiBleGNlcHRpb24gYW5kIGFib3J0IHRoZXNlIHN0ZXAuCi0gICAgaWYgKG1f
cHJpdmF0ZS0+aXNGdWxsKCkpIHsKKyAgICBpZiAobV9idWZmZXJGdWxsKSB7CisgICAgICAgIExP
RyhNZWRpYVNvdXJjZSwgIlNvdXJjZUJ1ZmZlcjo6YXBwZW5kQnVmZmVySW50ZXJuYWwoJXApIC0g
IGJ1ZmZlciBmdWxsLCBmYWlsaW5nIHdpdGggUVVPVEFfRVhDRUVERURfRVJSIGVycm9yIiwgdGhp
cyk7CiAgICAgICAgIGVjID0gUVVPVEFfRVhDRUVERURfRVJSOwogICAgICAgICByZXR1cm47CiAg
ICAgfQorI2VuZGlmCiAKICAgICAvLyBOT1RFOiBSZXR1cm4gdG8gMy4yIGFwcGVuZEJ1ZmZlcigp
CiAgICAgLy8gMy4gQWRkIGRhdGEgdG8gdGhlIGVuZCBvZiB0aGUgaW5wdXQgYnVmZmVyLgpAQCAt
NTE0LDYgKzUyNSwxMCBAQCB2b2lkIFNvdXJjZUJ1ZmZlcjo6c291cmNlQnVmZmVyUHJpdmF0ZUFw
CiAgICAgfQogCiAgICAgcmVwb3J0RXh0cmFNZW1vcnlDb3N0KCk7CisgICAgaWYgKGV4dHJhTWVt
b3J5Q29zdCgpID4gdGhpcy0+bWF4aW11bUJ1ZmZlclNpemUoKSkKKyAgICAgICAgbV9idWZmZXJG
dWxsID0gdHJ1ZTsKKworICAgIExPRyhNZWRpYSwgIlNvdXJjZUJ1ZmZlcjo6c291cmNlQnVmZmVy
UHJpdmF0ZUFwcGVuZENvbXBsZXRlKCVwKSAtIGJ1ZmZlcmVkID0gJXMiLCB0aGlzLCB0b1N0cmlu
ZyhtX2J1ZmZlcmVkLT5yYW5nZXMoKSkudXRmOCgpLmRhdGEoKSk7CiB9CiAKIHZvaWQgU291cmNl
QnVmZmVyOjpzb3VyY2VCdWZmZXJQcml2YXRlRGlkUmVjZWl2ZVJlbmRlcmluZ0Vycm9yKFNvdXJj
ZUJ1ZmZlclByaXZhdGUqLCBpbnQpCkBAIC01MjcsNiArNTQyLDU2IEBAIHN0YXRpYyBib29sIGRl
Y29kZVRpbWVDb21wYXJhdG9yKGNvbnN0IFAKICAgICByZXR1cm4gYS5zZWNvbmQtPmRlY29kZVRp
bWUoKSA8IGIuc2Vjb25kLT5kZWNvZGVUaW1lKCk7CiB9CiAKK3N0YXRpYyBQYXNzUmVmUHRyPFRp
bWVSYW5nZXM+IHJlbW92ZVNhbXBsZXNGcm9tVHJhY2tCdWZmZXIoY29uc3QgRGVjb2RlT3JkZXJT
YW1wbGVNYXA6Ok1hcFR5cGUmIHNhbXBsZXMsIFNvdXJjZUJ1ZmZlcjo6VHJhY2tCdWZmZXImIHRy
YWNrQnVmZmVyLCBjb25zdCBTb3VyY2VCdWZmZXIqIGJ1ZmZlciwgY29uc3QgY2hhciogbG9nUHJl
Zml4KQoreworI2lmICFMT0dfRElTQUJMRUQKKyAgICBkb3VibGUgZWFybGllc3RTYW1wbGUgPSBz
dGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCk7CisgICAgZG91YmxlIGxhdGVz
dFNhbXBsZSA9IDA7CisgICAgc2l6ZV90IGJ5dGVzUmVtb3ZlZCA9IDA7CisjZWxzZQorICAgIFVO
VVNFRF9QQVJBTShsb2dQcmVmaXgpOworICAgIFVOVVNFRF9QQVJBTShidWZmZXIpOworI2VuZGlm
CisKKyAgICBSZWZQdHI8VGltZVJhbmdlcz4gZXJhc2VkUmFuZ2VzID0gVGltZVJhbmdlczo6Y3Jl
YXRlKCk7CisgICAgTWVkaWFUaW1lIG1pY3Jvc2Vjb25kKDEsIDEwMDAwMDApOworICAgIGZvciAo
YXV0byBzYW1wbGVJdCA6IHNhbXBsZXMpIHsKKyAgICAgICAgY29uc3QgRGVjb2RlT3JkZXJTYW1w
bGVNYXA6OktleVR5cGUmIGRlY29kZUtleSA9IHNhbXBsZUl0LmZpcnN0OworI2lmICFMT0dfRElT
QUJMRUQKKyAgICAgICAgc2l6ZV90IHN0YXJ0QnVmZmVyU2l6ZSA9IHRyYWNrQnVmZmVyLnNhbXBs
ZXMuc2l6ZUluQnl0ZXMoKTsKKyNlbmRpZgorCisgICAgICAgIFJlZlB0cjxNZWRpYVNhbXBsZT4m
IHNhbXBsZSA9IHNhbXBsZUl0LnNlY29uZDsKKyAgICAgICAgTE9HKE1lZGlhU291cmNlLCAiU291
cmNlQnVmZmVyOjolcyglcCkgLSByZW1vdmluZyBzYW1wbGUoJXMpIiwgbG9nUHJlZml4LCBidWZm
ZXIsIHRvU3RyaW5nKCpzYW1wbGVJdC5zZWNvbmQpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgICAg
IC8vIFJlbW92ZSB0aGUgZXJhc2VkIHNhbXBsZXMgZnJvbSB0aGUgVHJhY2tCdWZmZXIgc2FtcGxl
IG1hcC4KKyAgICAgICAgdHJhY2tCdWZmZXIuc2FtcGxlcy5yZW1vdmVTYW1wbGUoc2FtcGxlLmdl
dCgpKTsKKworICAgICAgICAvLyBBbHNvIHJlbW92ZSB0aGUgZXJhc2VkIHNhbXBsZXMgZnJvbSB0
aGUgVHJhY2tCdWZmZXIgZGVjb2RlUXVldWUuCisgICAgICAgIHRyYWNrQnVmZmVyLmRlY29kZVF1
ZXVlLmVyYXNlKGRlY29kZUtleSk7CisKKyAgICAgICAgZG91YmxlIHN0YXJ0VGltZSA9IHNhbXBs
ZS0+cHJlc2VudGF0aW9uVGltZSgpLnRvRG91YmxlKCk7CisgICAgICAgIGRvdWJsZSBlbmRUaW1l
ID0gc3RhcnRUaW1lICsgKHNhbXBsZS0+ZHVyYXRpb24oKSArIG1pY3Jvc2Vjb25kKS50b0RvdWJs
ZSgpOworICAgICAgICBlcmFzZWRSYW5nZXMtPmFkZChzdGFydFRpbWUsIGVuZFRpbWUpOworCisj
aWYgIUxPR19ESVNBQkxFRAorICAgICAgICBieXRlc1JlbW92ZWQgKz0gc3RhcnRCdWZmZXJTaXpl
IC0gdHJhY2tCdWZmZXIuc2FtcGxlcy5zaXplSW5CeXRlcygpOworICAgICAgICBpZiAoc3RhcnRU
aW1lIDwgZWFybGllc3RTYW1wbGUpCisgICAgICAgICAgICBlYXJsaWVzdFNhbXBsZSA9IHN0YXJ0
VGltZTsKKyAgICAgICAgaWYgKGVuZFRpbWUgPiBsYXRlc3RTYW1wbGUpCisgICAgICAgICAgICBs
YXRlc3RTYW1wbGUgPSBlbmRUaW1lOworI2VuZGlmCisgICAgfQorCisjaWYgIUxPR19ESVNBQkxF
RAorICAgIGlmIChieXRlc1JlbW92ZWQpIHsKKyAgICAgICAgTE9HKE1lZGlhU291cmNlLCAiU291
cmNlQnVmZmVyOjolcyglcCkgcmVtb3ZlZCAlenUgYnl0ZXMsIHN0YXJ0KCVsZiksIGVuZCglbGYp
IiwgbG9nUHJlZml4LCBidWZmZXIsIGJ5dGVzUmVtb3ZlZCwgZWFybGllc3RTYW1wbGUsIGxhdGVz
dFNhbXBsZSk7CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4gZXJhc2VkUmFuZ2VzLnJlbGVh
c2UoKTsKK30KKwogdm9pZCBTb3VyY2VCdWZmZXI6OnJlbW92ZUNvZGVkRnJhbWVzKGNvbnN0IE1l
ZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGltZSYgZW5kKQogewogICAgIExPRyhNZWRpYVNv
dXJjZSwgIlNvdXJjZUJ1ZmZlcjo6cmVtb3ZlQ29kZWRGcmFtZXMoJXApIC0gc3RhcnQoJXMpLCBl
bmQoJXMpIiwgdGhpcywgdG9TdHJpbmcoc3RhcnQpLnV0ZjgoKS5kYXRhKCksIHRvU3RyaW5nKGVu
ZCkudXRmOCgpLmRhdGEoKSk7CkBAIC01NjksMjMgKzYzNCwxNiBAQCB2b2lkIFNvdXJjZUJ1ZmZl
cjo6cmVtb3ZlQ29kZWRGcmFtZXMoY29uCiAgICAgICAgIERlY29kZU9yZGVyU2FtcGxlTWFwOjpp
dGVyYXRvciByZW1vdmVEZWNvZGVTdGFydCA9IHRyYWNrQnVmZmVyLnNhbXBsZXMuZGVjb2RlT3Jk
ZXIoKS5maW5kU2FtcGxlV2l0aERlY29kZUtleShkZWNvZGVLZXkpOwogCiAgICAgICAgIERlY29k
ZU9yZGVyU2FtcGxlTWFwOjpNYXBUeXBlIGVyYXNlZFNhbXBsZXMocmVtb3ZlRGVjb2RlU3RhcnQs
IHJlbW92ZURlY29kZUVuZCk7Ci0KLSAgICAgICAgUmVmUHRyPFRpbWVSYW5nZXM+IGVyYXNlZFJh
bmdlcyA9IFRpbWVSYW5nZXM6OmNyZWF0ZSgpOwotICAgICAgICBNZWRpYVRpbWUgbWljcm9zZWNv
bmQoMSwgMTAwMDAwMCk7Ci0gICAgICAgIGZvciAoYXV0byBlcmFzZWRJdCA6IGVyYXNlZFNhbXBs
ZXMpIHsKLSAgICAgICAgICAgIFJlZlB0cjxNZWRpYVNhbXBsZT4mIHNhbXBsZSA9IGVyYXNlZEl0
LnNlY29uZDsKLSAgICAgICAgICAgIHRyYWNrQnVmZmVyLnNhbXBsZXMucmVtb3ZlU2FtcGxlKHNh
bXBsZS5nZXQoKSk7Ci0gICAgICAgICAgICBkb3VibGUgc3RhcnRUaW1lID0gc2FtcGxlLT5wcmVz
ZW50YXRpb25UaW1lKCkudG9Eb3VibGUoKTsKLSAgICAgICAgICAgIGRvdWJsZSBlbmRUaW1lID0g
c3RhcnRUaW1lICsgKHNhbXBsZS0+ZHVyYXRpb24oKSArIG1pY3Jvc2Vjb25kKS50b0RvdWJsZSgp
OwotICAgICAgICAgICAgZXJhc2VkUmFuZ2VzLT5hZGQoc3RhcnRUaW1lLCBlbmRUaW1lKTsKLSAg
ICAgICAgfQorICAgICAgICBSZWZQdHI8VGltZVJhbmdlcz4gZXJhc2VkUmFuZ2VzID0gcmVtb3Zl
U2FtcGxlc0Zyb21UcmFja0J1ZmZlcihlcmFzZWRTYW1wbGVzLCB0cmFja0J1ZmZlciwgdGhpcywg
InJlbW92ZUNvZGVkRnJhbWVzIik7CiAKICAgICAgICAgLy8gT25seSBmb3JjZSB0aGUgVHJhY2tC
dWZmZXIgdG8gcmUtZW5xdWV1ZSBpZiB0aGUgcmVtb3ZlZCByYW5nZXMgb3ZlcmxhcCB3aXRoIGVu
cXVldWVkIGFuZCBwb3NzaWJseQogICAgICAgICAvLyBub3QgeWV0IGRpc3BsYXllZCBzYW1wbGVz
LgotICAgICAgICBQbGF0Zm9ybVRpbWVSYW5nZXMgcG9zc2libHlFbnF1ZXVlZFJhbmdlcyhjdXJy
ZW50TWVkaWFUaW1lLCB0cmFja0J1ZmZlci5sYXN0RW5xdWV1ZWRQcmVzZW50YXRpb25UaW1lKTsK
LSAgICAgICAgcG9zc2libHlFbnF1ZXVlZFJhbmdlcy5pbnRlcnNlY3RXaXRoKGVyYXNlZFJhbmdl
cy0+cmFuZ2VzKCkpOwotICAgICAgICBpZiAocG9zc2libHlFbnF1ZXVlZFJhbmdlcy5sZW5ndGgo
KSkKLSAgICAgICAgICAgIHRyYWNrQnVmZmVyLm5lZWRzUmVlbnF1ZXVlaW5nID0gdHJ1ZTsKKyAg
ICAgICAgaWYgKGN1cnJlbnRNZWRpYVRpbWUgPCB0cmFja0J1ZmZlci5sYXN0RW5xdWV1ZWRQcmVz
ZW50YXRpb25UaW1lKSB7CisgICAgICAgICAgICBQbGF0Zm9ybVRpbWVSYW5nZXMgcG9zc2libHlF
bnF1ZXVlZFJhbmdlcyhjdXJyZW50TWVkaWFUaW1lLCB0cmFja0J1ZmZlci5sYXN0RW5xdWV1ZWRQ
cmVzZW50YXRpb25UaW1lKTsKKyAgICAgICAgICAgIHBvc3NpYmx5RW5xdWV1ZWRSYW5nZXMuaW50
ZXJzZWN0V2l0aChlcmFzZWRSYW5nZXMtPnJhbmdlcygpKTsKKyAgICAgICAgICAgIGlmIChwb3Nz
aWJseUVucXVldWVkUmFuZ2VzLmxlbmd0aCgpKQorICAgICAgICAgICAgICAgIHRyYWNrQnVmZmVy
Lm5lZWRzUmVlbnF1ZXVlaW5nID0gdHJ1ZTsKKyAgICAgICAgfQogCiAgICAgICAgIGVyYXNlZFJh
bmdlcy0+aW52ZXJ0KCk7CiAgICAgICAgIG1fYnVmZmVyZWQtPmludGVyc2VjdFdpdGgoKmVyYXNl
ZFJhbmdlcyk7CkBAIC01OTksNiArNjU3LDggQEAgdm9pZCBTb3VyY2VCdWZmZXI6OnJlbW92ZUNv
ZGVkRnJhbWVzKGNvbgogCiAgICAgLy8gNC4gSWYgYnVmZmVyIGZ1bGwgZmxhZyBlcXVhbHMgdHJ1
ZSBhbmQgdGhpcyBvYmplY3QgaXMgcmVhZHkgdG8gYWNjZXB0IG1vcmUgYnl0ZXMsIHRoZW4gc2V0
IHRoZSBidWZmZXIgZnVsbCBmbGFnIHRvIGZhbHNlLgogICAgIC8vIE5vLW9wCisKKyAgICBMT0co
TWVkaWEsICJTb3VyY2VCdWZmZXI6OnJlbW92ZUNvZGVkRnJhbWVzKCVwKSAtIGJ1ZmZlcmVkID0g
JXMiLCB0aGlzLCB0b1N0cmluZyhtX2J1ZmZlcmVkLT5yYW5nZXMoKSkudXRmOCgpLmRhdGEoKSk7
CiB9CiAKIHZvaWQgU291cmNlQnVmZmVyOjpyZW1vdmVUaW1lckZpcmVkKFRpbWVyPFNvdXJjZUJ1
ZmZlcj4qKQpAQCAtNjI1LDYgKzY4NSwxMDkgQEAgdm9pZCBTb3VyY2VCdWZmZXI6OnJlbW92ZVRp
bWVyRmlyZWQoVGltZQogICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1lcygpLnVwZGF0ZWVuZEV2
ZW50KTsKIH0KIAordm9pZCBTb3VyY2VCdWZmZXI6OmV2aWN0Q29kZWRGcmFtZXMoc2l6ZV90IG5l
d0RhdGFTaXplKQoreworICAgIC8vIDMuNS4xMyBDb2RlZCBGcmFtZSBFdmljdGlvbiBBbGdvcml0
aG0KKyAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9tZWRpYS1zb3VyY2UvI3NvdXJjZWJ1ZmZl
ci1jb2RlZC1mcmFtZS1ldmljdGlvbgorCisgICAgaWYgKGlzUmVtb3ZlZCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLyBUaGlzIGFsZ29yaXRobSBpcyBydW4gdG8gZnJlZSB1cCBzcGFjZSBp
biB0aGlzIHNvdXJjZSBidWZmZXIgd2hlbiBuZXcgZGF0YSBpcyBhcHBlbmRlZC4KKyAgICAvLyAx
LiBMZXQgbmV3IGRhdGEgZXF1YWwgdGhlIGRhdGEgdGhhdCBpcyBhYm91dCB0byBiZSBhcHBlbmRl
ZCB0byB0aGlzIFNvdXJjZUJ1ZmZlci4KKyAgICAvLyAyLiBJZiB0aGUgYnVmZmVyIGZ1bGwgZmxh
ZyBlcXVhbHMgZmFsc2UsIHRoZW4gYWJvcnQgdGhlc2Ugc3RlcHMuCisgICAgaWYgKCFtX2J1ZmZl
ckZ1bGwpCisgICAgICAgIHJldHVybjsKKworICAgIHNpemVfdCBtYXhpbXVtQnVmZmVyU2l6ZSA9
IHRoaXMtPm1heGltdW1CdWZmZXJTaXplKCk7CisKKyAgICAvLyAzLiBMZXQgcmVtb3ZhbCByYW5n
ZXMgZXF1YWwgYSBsaXN0IG9mIHByZXNlbnRhdGlvbiB0aW1lIHJhbmdlcyB0aGF0IGNhbiBiZSBl
dmljdGVkIGZyb20KKyAgICAvLyB0aGUgcHJlc2VudGF0aW9uIHRvIG1ha2Ugcm9vbSBmb3IgdGhl
IG5ldyBkYXRhLgorCisgICAgLy8gTk9URTogYmVnaW4gYnkgcmVtb3ZpbmcgZGF0YSBmcm9tIHRo
ZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlcmVkIHJhbmdlcywgMzAgc2Vjb25kcyBhdAorICAgIC8v
IGEgdGltZSwgdXAgdG8gMzAgc2Vjb25kcyBiZWZvcmUgY3VycmVudFRpbWUuCisgICAgTWVkaWFU
aW1lIHRoaXJ0eVNlY29uZHMgPSBNZWRpYVRpbWUoMzAsIDEpOworICAgIE1lZGlhVGltZSBjdXJy
ZW50VGltZSA9IE1lZGlhVGltZTo6Y3JlYXRlV2l0aERvdWJsZShtX3NvdXJjZS0+Y3VycmVudFRp
bWUoKSk7CisgICAgTWVkaWFUaW1lIG1heGltdW1SYW5nZUVuZCA9IGN1cnJlbnRUaW1lIC0gdGhp
cnR5U2Vjb25kczsKKworI2lmICFMT0dfRElTQUJMRUQKKyAgICBMT0coTWVkaWFTb3VyY2UsICJT
b3VyY2VCdWZmZXI6OmV2aWN0Q29kZWRGcmFtZXMoJXApIC0gY3VycmVudFRpbWUgPSAlbGYsIHJl
cXVpcmUgJXp1IGJ5dGVzLCBtYXhpbXVtIGJ1ZmZlciBzaXplIGlzICV6dSIsIHRoaXMsIG1fc291
cmNlLT5jdXJyZW50VGltZSgpLCBleHRyYU1lbW9yeUNvc3QoKSArIG5ld0RhdGFTaXplLCBtYXhp
bXVtQnVmZmVyU2l6ZSk7CisgICAgc2l6ZV90IGluaXRpYWxCdWZmZXJlZFNpemUgPSBleHRyYU1l
bW9yeUNvc3QoKTsKKyNlbmRpZgorCisgICAgTWVkaWFUaW1lIHJhbmdlU3RhcnQgPSBNZWRpYVRp
bWU6Onplcm9UaW1lKCk7CisgICAgTWVkaWFUaW1lIHJhbmdlRW5kID0gcmFuZ2VTdGFydCArIHRo
aXJ0eVNlY29uZHM7CisgICAgd2hpbGUgKHJhbmdlU3RhcnQgPCBtYXhpbXVtUmFuZ2VFbmQpIHsK
KyAgICAgICAgLy8gNC4gRm9yIGVhY2ggcmFuZ2UgaW4gcmVtb3ZhbCByYW5nZXMsIHJ1biB0aGUg
Y29kZWQgZnJhbWUgcmVtb3ZhbCBhbGdvcml0aG0gd2l0aCBzdGFydCBhbmQKKyAgICAgICAgLy8g
ZW5kIGVxdWFsIHRvIHRoZSByZW1vdmFsIHJhbmdlIHN0YXJ0IGFuZCBlbmQgdGltZXN0YW1wIHJl
c3BlY3RpdmVseS4KKyAgICAgICAgcmVtb3ZlQ29kZWRGcmFtZXMocmFuZ2VTdGFydCwgc3RkOjpt
aW4ocmFuZ2VFbmQsIG1heGltdW1SYW5nZUVuZCkpOworICAgICAgICBpZiAoZXh0cmFNZW1vcnlD
b3N0KCkgKyBuZXdEYXRhU2l6ZSA8IG1heGltdW1CdWZmZXJTaXplKSB7CisgICAgICAgICAgICBt
X2J1ZmZlckZ1bGwgPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgcmFuZ2VTdGFydCArPSB0aGlydHlTZWNvbmRzOworICAgICAgICByYW5nZUVuZCArPSB0
aGlydHlTZWNvbmRzOworICAgIH0KKworICAgIGlmICghbV9idWZmZXJGdWxsKSB7CisgICAgICAg
IExPRyhNZWRpYVNvdXJjZSwgIlNvdXJjZUJ1ZmZlcjo6ZXZpY3RDb2RlZEZyYW1lcyglcCkgLSBl
dmljdGVkICV6dSBieXRlcyIsIHRoaXMsIGluaXRpYWxCdWZmZXJlZFNpemUgLSBleHRyYU1lbW9y
eUNvc3QoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBJZiB0aGVyZSBzdGls
bCBpc24ndCBlbm91Z2ggZnJlZSBzcGFjZSBhbmQgdGhlcmUgYnVmZmVycyBpbiB0aW1lIHJhbmdl
cyBhZnRlciB0aGUgY3VycmVudCByYW5nZSAoaWUuIHRoZXJlIGlzIGEgZ2FwIGFmdGVyCisgICAg
Ly8gdGhlIGN1cnJlbnQgYnVmZmVyZWQgcmFuZ2UpLCBkZWxldGUgMzAgc2Vjb25kcyBhdCBhIHRp
bWUgZnJvbSBkdXJhdGlvbiBiYWNrIHRvIHRoZSBjdXJyZW50IHRpbWUgcmFuZ2Ugb3IgMzAgc2Vj
b25kcyBhZnRlcgorICAgIC8vIGN1cnJlblRpbWUgd2hpY2hldmVyIHdlIGhpdCBmaXJzdC4KKyAg
ICBhdXRvIGJ1ZmZlcmVkID0gbV9idWZmZXJlZC0+cmFuZ2VzKCk7CisgICAgc2l6ZV90IGN1cnJl
bnRUaW1lUmFuZ2UgPSBidWZmZXJlZC5maW5kKGN1cnJlbnRUaW1lKTsKKyAgICBpZiAoY3VycmVu
dFRpbWVSYW5nZSA9PSBub3RGb3VuZCB8fCBjdXJyZW50VGltZVJhbmdlID09IGJ1ZmZlcmVkLmxl
bmd0aCgpIC0gMSkgeworICAgICAgICBMT0coTWVkaWFTb3VyY2UsICJTb3VyY2VCdWZmZXI6OmV2
aWN0Q29kZWRGcmFtZXMoJXApIC0gZXZpY3RlZCAlenUgYnl0ZXMgYnV0IEZBSUxFRCB0byBmcmVl
IGVub3VnaCIsIHRoaXMsIGluaXRpYWxCdWZmZXJlZFNpemUgLSBleHRyYU1lbW9yeUNvc3QoKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBNZWRpYVRpbWUgbWluaW11bVJhbmdlU3Rh
cnQgPSBjdXJyZW50VGltZSArIHRoaXJ0eVNlY29uZHM7CisKKyAgICByYW5nZUVuZCA9IE1lZGlh
VGltZTo6Y3JlYXRlV2l0aERvdWJsZShtX3NvdXJjZS0+ZHVyYXRpb24oKSk7CisgICAgcmFuZ2VT
dGFydCA9IHJhbmdlRW5kIC0gdGhpcnR5U2Vjb25kczsKKyAgICB3aGlsZSAocmFuZ2VTdGFydCA+
IG1pbmltdW1SYW5nZVN0YXJ0KSB7CisKKyAgICAgICAgLy8gRG8gbm90IGV2aWN0IGRhdGEgZnJv
bSB0aGUgdGltZSByYW5nZSB0aGF0IGNvbnRhaW5zIGN1cnJlbnRUaW1lLgorICAgICAgICBzaXpl
X3Qgc3RhcnRUaW1lUmFuZ2UgPSBidWZmZXJlZC5maW5kKHJhbmdlU3RhcnQpOworICAgICAgICBp
ZiAoc3RhcnRUaW1lUmFuZ2UgPT0gY3VycmVudFRpbWVSYW5nZSkgeworICAgICAgICAgICAgc2l6
ZV90IGVuZFRpbWVSYW5nZSA9IGJ1ZmZlcmVkLmZpbmQocmFuZ2VFbmQpOworICAgICAgICAgICAg
aWYgKGVuZFRpbWVSYW5nZSA9PSBjdXJyZW50VGltZVJhbmdlKQorICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICByYW5nZUVuZCA9IGJ1ZmZlcmVkLnN0YXJ0KGVuZFRpbWVSYW5n
ZSk7CisgICAgICAgIH0KKworICAgICAgICAvLyA0LiBGb3IgZWFjaCByYW5nZSBpbiByZW1vdmFs
IHJhbmdlcywgcnVuIHRoZSBjb2RlZCBmcmFtZSByZW1vdmFsIGFsZ29yaXRobSB3aXRoIHN0YXJ0
IGFuZAorICAgICAgICAvLyBlbmQgZXF1YWwgdG8gdGhlIHJlbW92YWwgcmFuZ2Ugc3RhcnQgYW5k
IGVuZCB0aW1lc3RhbXAgcmVzcGVjdGl2ZWx5LgorICAgICAgICByZW1vdmVDb2RlZEZyYW1lcyhz
dGQ6Om1heChtaW5pbXVtUmFuZ2VTdGFydCwgcmFuZ2VTdGFydCksIHJhbmdlRW5kKTsKKyAgICAg
ICAgaWYgKGV4dHJhTWVtb3J5Q29zdCgpICsgbmV3RGF0YVNpemUgPCBtYXhpbXVtQnVmZmVyU2l6
ZSkgeworICAgICAgICAgICAgbV9idWZmZXJGdWxsID0gZmFsc2U7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorCisgICAgICAgIHJhbmdlU3RhcnQgLT0gdGhpcnR5U2Vjb25kczsKKyAg
ICAgICAgcmFuZ2VFbmQgLT0gdGhpcnR5U2Vjb25kczsKKyAgICB9CisKKyAgICBMT0coTWVkaWFT
b3VyY2UsICJTb3VyY2VCdWZmZXI6OmV2aWN0Q29kZWRGcmFtZXMoJXApIC0gZXZpY3RlZCAlenUg
Ynl0ZXMlcyIsIHRoaXMsIGluaXRpYWxCdWZmZXJlZFNpemUgLSBleHRyYU1lbW9yeUNvc3QoKSwg
bV9idWZmZXJGdWxsID8gIiIgOiAiIGJ1dCBGQUlMRUQgdG8gZnJlZSBlbm91Z2giKTsKK30KKwor
c2l6ZV90IFNvdXJjZUJ1ZmZlcjo6bWF4aW11bUJ1ZmZlclNpemUoKSBjb25zdAoreworICAgIGlm
IChpc1JlbW92ZWQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBIVE1MTWVkaWFFbGVtZW50
KiBlbGVtZW50ID0gbV9zb3VyY2UtPm1lZGlhRWxlbWVudCgpOworICAgIGlmICghZWxlbWVudCkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gZWxlbWVudC0+bWF4aW11bVNvdXJjZUJ1
ZmZlclNpemUoKnRoaXMpOworfQorCiBjb25zdCBBdG9taWNTdHJpbmcmIFNvdXJjZUJ1ZmZlcjo6
ZGVjb2RlRXJyb3IoKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+
IGRlY29kZSgiZGVjb2RlIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CkBA
IC0xMTg2LDIzICsxMzQ5LDE3IEBAIHZvaWQgU291cmNlQnVmZmVyOjpzb3VyY2VCdWZmZXJQcml2
YXRlRGkKICAgICAgICAgICAgIGF1dG8gbmV4dFN5bmNJdGVyID0gdHJhY2tCdWZmZXIuc2FtcGxl
cy5kZWNvZGVPcmRlcigpLmZpbmRTeW5jU2FtcGxlQWZ0ZXJEZWNvZGVJdGVyYXRvcihsYXN0RGVj
b2RlSXRlcik7CiAgICAgICAgICAgICBkZXBlbmRlbnRTYW1wbGVzLmluc2VydChmaXJzdERlY29k
ZUl0ZXIsIG5leHRTeW5jSXRlcik7CiAKLQotICAgICAgICAgICAgUmVmUHRyPFRpbWVSYW5nZXM+
IGVyYXNlZFJhbmdlcyA9IFRpbWVSYW5nZXM6OmNyZWF0ZSgpOwotICAgICAgICAgICAgZm9yIChh
dXRvJiBzYW1wbGVQYWlyIDogZGVwZW5kZW50U2FtcGxlcykgewotICAgICAgICAgICAgICAgIE1l
ZGlhVGltZSBzdGFydFRpbWUgPSBzYW1wbGVQYWlyLnNlY29uZC0+cHJlc2VudGF0aW9uVGltZSgp
OwotICAgICAgICAgICAgICAgIE1lZGlhVGltZSBlbmRUaW1lID0gc3RhcnRUaW1lICsgc2FtcGxl
UGFpci5zZWNvbmQtPmR1cmF0aW9uKCkgKyBtaWNyb3NlY29uZDsKLSAgICAgICAgICAgICAgICBl
cmFzZWRSYW5nZXMtPmFkZChzdGFydFRpbWUudG9Eb3VibGUoKSwgZW5kVGltZS50b0RvdWJsZSgp
KTsKLSAgICAgICAgICAgICAgICBMT0coTWVkaWFTb3VyY2UsICJTb3VyY2VCdWZmZXI6OnNvdXJj
ZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZlU2FtcGxlKCVwKSAtIHJlbW92aW5nIHNhbXBsZSglcyki
LCB0aGlzLCB0b1N0cmluZygqc2FtcGxlUGFpci5zZWNvbmQpLnV0ZjgoKS5kYXRhKCkpOwotICAg
ICAgICAgICAgICAgIHRyYWNrQnVmZmVyLnNhbXBsZXMucmVtb3ZlU2FtcGxlKHNhbXBsZVBhaXIu
c2Vjb25kLmdldCgpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFJlZlB0cjxUaW1lUmFu
Z2VzPiBlcmFzZWRSYW5nZXMgPSByZW1vdmVTYW1wbGVzRnJvbVRyYWNrQnVmZmVyKGRlcGVuZGVu
dFNhbXBsZXMsIHRyYWNrQnVmZmVyLCB0aGlzLCAic291cmNlQnVmZmVyUHJpdmF0ZURpZFJlY2Vp
dmVTYW1wbGUiKTsKIAogICAgICAgICAgICAgLy8gT25seSBmb3JjZSB0aGUgVHJhY2tCdWZmZXIg
dG8gcmUtZW5xdWV1ZSBpZiB0aGUgcmVtb3ZlZCByYW5nZXMgb3ZlcmxhcCB3aXRoIGVucXVldWVk
IGFuZCBwb3NzaWJseQogICAgICAgICAgICAgLy8gbm90IHlldCBkaXNwbGF5ZWQgc2FtcGxlcy4K
ICAgICAgICAgICAgIE1lZGlhVGltZSBjdXJyZW50TWVkaWFUaW1lID0gTWVkaWFUaW1lOjpjcmVh
dGVXaXRoRG91YmxlKG1fc291cmNlLT5jdXJyZW50VGltZSgpKTsKLSAgICAgICAgICAgIFBsYXRm
b3JtVGltZVJhbmdlcyBwb3NzaWJseUVucXVldWVkUmFuZ2VzKGN1cnJlbnRNZWRpYVRpbWUsIHRy
YWNrQnVmZmVyLmxhc3RFbnF1ZXVlZFByZXNlbnRhdGlvblRpbWUpOwotICAgICAgICAgICAgcG9z
c2libHlFbnF1ZXVlZFJhbmdlcy5pbnRlcnNlY3RXaXRoKGVyYXNlZFJhbmdlcy0+cmFuZ2VzKCkp
OwotICAgICAgICAgICAgaWYgKHBvc3NpYmx5RW5xdWV1ZWRSYW5nZXMubGVuZ3RoKCkpCi0gICAg
ICAgICAgICAgICAgdHJhY2tCdWZmZXIubmVlZHNSZWVucXVldWVpbmcgPSB0cnVlOworICAgICAg
ICAgICAgaWYgKGN1cnJlbnRNZWRpYVRpbWUgPCB0cmFja0J1ZmZlci5sYXN0RW5xdWV1ZWRQcmVz
ZW50YXRpb25UaW1lKSB7CisgICAgICAgICAgICAgICAgUGxhdGZvcm1UaW1lUmFuZ2VzIHBvc3Np
Ymx5RW5xdWV1ZWRSYW5nZXMoY3VycmVudE1lZGlhVGltZSwgdHJhY2tCdWZmZXIubGFzdEVucXVl
dWVkUHJlc2VudGF0aW9uVGltZSk7CisgICAgICAgICAgICAgICAgcG9zc2libHlFbnF1ZXVlZFJh
bmdlcy5pbnRlcnNlY3RXaXRoKGVyYXNlZFJhbmdlcy0+cmFuZ2VzKCkpOworICAgICAgICAgICAg
ICAgIGlmIChwb3NzaWJseUVucXVldWVkUmFuZ2VzLmxlbmd0aCgpKQorICAgICAgICAgICAgICAg
ICAgICB0cmFja0J1ZmZlci5uZWVkc1JlZW5xdWV1ZWluZyA9IHRydWU7CisgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgIGVyYXNlZFJhbmdlcy0+aW52ZXJ0KCk7CiAgICAgICAgICAgICBtX2J1
ZmZlcmVkLT5pbnRlcnNlY3RXaXRoKCplcmFzZWRSYW5nZXMuZ2V0KCkpOwpAQCAtMTI1NCwxNiAr
MTQxMSwyNiBAQCB2b2lkIFNvdXJjZUJ1ZmZlcjo6c291cmNlQnVmZmVyUHJpdmF0ZURpCiAgICAg
ICAgIG1fc291cmNlLT5zZXREdXJhdGlvbkludGVybmFsKGhpZ2hlc3RQcmVzZW50YXRpb25FbmRU
aW1lc3RhbXAoKS50b0RvdWJsZSgpKTsKIH0KIAotYm9vbCBTb3VyY2VCdWZmZXI6OnNvdXJjZUJ1
ZmZlclByaXZhdGVIYXNBdWRpbyhjb25zdCBTb3VyY2VCdWZmZXJQcml2YXRlKikgY29uc3QKK2Jv
b2wgU291cmNlQnVmZmVyOjpoYXNBdWRpbygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fYXVkaW9U
cmFja3MgJiYgbV9hdWRpb1RyYWNrcy0+bGVuZ3RoKCk7CiB9CiAKLWJvb2wgU291cmNlQnVmZmVy
Ojpzb3VyY2VCdWZmZXJQcml2YXRlSGFzVmlkZW8oY29uc3QgU291cmNlQnVmZmVyUHJpdmF0ZSop
IGNvbnN0Citib29sIFNvdXJjZUJ1ZmZlcjo6aGFzVmlkZW8oKSBjb25zdAogewogICAgIHJldHVy
biBtX3ZpZGVvVHJhY2tzICYmIG1fdmlkZW9UcmFja3MtPmxlbmd0aCgpOwogfQogCitib29sIFNv
dXJjZUJ1ZmZlcjo6c291cmNlQnVmZmVyUHJpdmF0ZUhhc0F1ZGlvKGNvbnN0IFNvdXJjZUJ1ZmZl
clByaXZhdGUqKSBjb25zdAoreworICAgIHJldHVybiBoYXNBdWRpbygpOworfQorCitib29sIFNv
dXJjZUJ1ZmZlcjo6c291cmNlQnVmZmVyUHJpdmF0ZUhhc1ZpZGVvKGNvbnN0IFNvdXJjZUJ1ZmZl
clByaXZhdGUqKSBjb25zdAoreworICAgIHJldHVybiBoYXNWaWRlbygpOworfQorCiB2b2lkIFNv
dXJjZUJ1ZmZlcjo6dmlkZW9UcmFja1NlbGVjdGVkQ2hhbmdlZChWaWRlb1RyYWNrKiB0cmFjaykK
IHsKICAgICAvLyAyLjQuNSBDaGFuZ2VzIHRvIHNlbGVjdGVkL2VuYWJsZWQgdHJhY2sgc3RhdGUK
QEAgLTE1MDcsNiArMTY3NCwxMCBAQCBib29sIFNvdXJjZUJ1ZmZlcjo6aGFzQ3VycmVudFRpbWUo
KSBjb25zCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIE1lZGlhVGltZSBjdXJyZW50VGlt
ZSA9IE1lZGlhVGltZTo6Y3JlYXRlV2l0aERvdWJsZShtX3NvdXJjZS0+Y3VycmVudFRpbWUoKSk7
CisgICAgTWVkaWFUaW1lIGR1cmF0aW9uID0gTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKG1f
c291cmNlLT5kdXJhdGlvbigpKTsKKyAgICBpZiAoY3VycmVudFRpbWUgPj0gZHVyYXRpb24pCisg
ICAgICAgIHJldHVybiB0cnVlOworCiAgICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtVGltZVJh
bmdlcz4gcmFuZ2VzID0gYnVmZmVyZWRBY2NvdW50aW5nRm9yRW5kT2ZTdHJlYW0oKTsKICAgICBy
ZXR1cm4gYWJzKHJhbmdlcy0+bmVhcmVzdChjdXJyZW50VGltZSkgLSBjdXJyZW50VGltZSkgPD0g
Y3VycmVudFRpbWVGdWRnZUZhY3RvcigpOwogfQpAQCAtMTUyMSw2ICsxNjkyLDEwIEBAIGJvb2wg
U291cmNlQnVmZmVyOjpoYXNGdXR1cmVUaW1lKCkgY29uc3QKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgTWVkaWFUaW1lIGN1cnJlbnRUaW1lID0gTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91
YmxlKG1fc291cmNlLT5jdXJyZW50VGltZSgpKTsKKyAgICBNZWRpYVRpbWUgZHVyYXRpb24gPSBN
ZWRpYVRpbWU6OmNyZWF0ZVdpdGhEb3VibGUobV9zb3VyY2UtPmR1cmF0aW9uKCkpOworICAgIGlm
IChjdXJyZW50VGltZSA+PSBkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKICAgICBN
ZWRpYVRpbWUgbmVhcmVzdCA9IHJhbmdlcy0+bmVhcmVzdChjdXJyZW50VGltZSk7CiAgICAgaWYg
KGFicyhuZWFyZXN0IC0gY3VycmVudFRpbWUpID4gY3VycmVudFRpbWVGdWRnZUZhY3RvcigpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNTMwLDcgKzE3MDUsNiBAQCBib29sIFNvdXJjZUJ1
ZmZlcjo6aGFzRnV0dXJlVGltZSgpIGNvbnN0CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IE1lZGlhVGltZSBsb2NhbEVuZCA9IHJhbmdlcy0+ZW5kKGZvdW5kKTsKLSAgICBNZWRpYVRpbWUg
ZHVyYXRpb24gPSBNZWRpYVRpbWU6OmNyZWF0ZVdpdGhEb3VibGUobV9zb3VyY2UtPmR1cmF0aW9u
KCkpOwogICAgIGlmIChsb2NhbEVuZCA9PSBkdXJhdGlvbikKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKQEAgLTE1NjQsMTIgKzE3MzgsMTggQEAgYm9vbCBTb3VyY2VCdWZmZXI6OmNhblBsYXlUaHJv
dWdoKCkKICAgICByZXR1cm4gdW5idWZmZXJlZFRpbWUudG9Eb3VibGUoKSAvIG1fYXZlcmFnZUJ1
ZmZlclJhdGUgPCB0aW1lUmVtYWluaW5nLnRvRG91YmxlKCk7CiB9CiAKLXZvaWQgU291cmNlQnVm
ZmVyOjpyZXBvcnRFeHRyYU1lbW9yeUNvc3QoKQorc2l6ZV90IFNvdXJjZUJ1ZmZlcjo6ZXh0cmFN
ZW1vcnlDb3N0KCkgY29uc3QKIHsKICAgICBzaXplX3QgZXh0cmFNZW1vcnlDb3N0ID0gbV9wZW5k
aW5nQXBwZW5kRGF0YS5jYXBhY2l0eSgpOwogICAgIGZvciAoYXV0byYgdHJhY2tCdWZmZXIgOiBt
X3RyYWNrQnVmZmVyTWFwLnZhbHVlcygpKQogICAgICAgICBleHRyYU1lbW9yeUNvc3QgKz0gdHJh
Y2tCdWZmZXIuc2FtcGxlcy5zaXplSW5CeXRlcygpOwogCisgICAgcmV0dXJuIGV4dHJhTWVtb3J5
Q29zdDsKK30KKwordm9pZCBTb3VyY2VCdWZmZXI6OnJlcG9ydEV4dHJhTWVtb3J5Q29zdCgpCit7
CisgICAgc2l6ZV90IGV4dHJhTWVtb3J5Q29zdCA9IHRoaXMtPmV4dHJhTWVtb3J5Q29zdCgpOwog
ICAgIGlmIChleHRyYU1lbW9yeUNvc3QgPCBtX3JlcG9ydGVkRXh0cmFNZW1vcnlDb3N0KQogICAg
ICAgICByZXR1cm47CiAKQEAgLTE1OTUsNiArMTc3NSwxMiBAQCBWZWN0b3I8U3RyaW5nPiBTb3Vy
Y2VCdWZmZXI6OmJ1ZmZlcmVkU2FtCiAgICAgcmV0dXJuIHNhbXBsZURlc2NyaXB0aW9uczsKIH0K
IAorRG9jdW1lbnQmIFNvdXJjZUJ1ZmZlcjo6ZG9jdW1lbnQoKSBjb25zdAoreworICAgIEFTU0VS
VChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzRG9jdW1lbnQoKSk7CisgICAgcmV0dXJuICpz
dGF0aWNfY2FzdDxEb2N1bWVudCo+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmgJKHJldmlzaW9uIDE3MjU4MykK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCkBAIC05MCw2ICs5MSw5IEBAIHB1YmxpYzoKICAgICBib29sIGhhc0Z1dHVy
ZVRpbWUoKSBjb25zdDsKICAgICBib29sIGNhblBsYXlUaHJvdWdoKCk7CiAKKyAgICBib29sIGhh
c1ZpZGVvKCkgY29uc3Q7CisgICAgYm9vbCBoYXNBdWRpbygpIGNvbnN0OworCiAgICAgYm9vbCBh
Y3RpdmUoKSBjb25zdCB7IHJldHVybiBtX2FjdGl2ZTsgfQogCiAgICAgLy8gQWN0aXZlRE9NT2Jq
ZWN0IGludGVyZmFjZQpAQCAtMTAzLDYgKzEwNywxMCBAQCBwdWJsaWM6CiAgICAgdXNpbmcgUmVm
Q291bnRlZDxTb3VyY2VCdWZmZXI+OjpyZWY7CiAgICAgdXNpbmcgUmVmQ291bnRlZDxTb3VyY2VC
dWZmZXI+OjpkZXJlZjsKIAorICAgIHN0cnVjdCBUcmFja0J1ZmZlcjsKKworICAgIERvY3VtZW50
JiBkb2N1bWVudCgpIGNvbnN0OworCiBwcm90ZWN0ZWQ6CiAgICAgLy8gRXZlbnRUYXJnZXQgaW50
ZXJmYWNlCiAgICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgb3ZlcnJpZGUgeyByZWYo
KTsgfQpAQCAtMTQ5LDE2ICsxNTcsMTggQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgdmFsaWRhdGVJ
bml0aWFsaXphdGlvblNlZ21lbnQoY29uc3QgSW5pdGlhbGl6YXRpb25TZWdtZW50Jik7CiAKLSAg
ICBzdHJ1Y3QgVHJhY2tCdWZmZXI7CiAgICAgdm9pZCByZWVucXVldWVNZWRpYUZvclRpbWUoVHJh
Y2tCdWZmZXImLCBBdG9taWNTdHJpbmcgdHJhY2tJRCwgY29uc3QgTWVkaWFUaW1lJik7CiAgICAg
dm9pZCBwcm92aWRlTWVkaWFEYXRhKFRyYWNrQnVmZmVyJiwgQXRvbWljU3RyaW5nIHRyYWNrSUQp
OwogICAgIHZvaWQgZGlkRHJvcFNhbXBsZSgpOworICAgIHZvaWQgZXZpY3RDb2RlZEZyYW1lcyhz
aXplX3QgbmV3RGF0YVNpemUpOworICAgIHNpemVfdCBtYXhpbXVtQnVmZmVyU2l6ZSgpIGNvbnN0
OwogCiAgICAgdm9pZCBtb25pdG9yQnVmZmVyaW5nUmF0ZSgpOwogCiAgICAgdm9pZCByZW1vdmVU
aW1lckZpcmVkKFRpbWVyPFNvdXJjZUJ1ZmZlcj4qKTsKICAgICB2b2lkIHJlbW92ZUNvZGVkRnJh
bWVzKGNvbnN0IE1lZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGltZSYgZW5kKTsKIAorICAg
IHNpemVfdCBleHRyYU1lbW9yeUNvc3QoKSBjb25zdDsKICAgICB2b2lkIHJlcG9ydEV4dHJhTWVt
b3J5Q29zdCgpOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtVGltZVJhbmdlcz4gYnVm
ZmVyZWRBY2NvdW50aW5nRm9yRW5kT2ZTdHJlYW0oKSBjb25zdDsKQEAgLTE3MSw4ICsxODEsNiBA
QCBwcml2YXRlOgogICAgIE1lZGlhU291cmNlKiBtX3NvdXJjZTsKICAgICBHZW5lcmljRXZlbnRR
dWV1ZSBtX2FzeW5jRXZlbnRRdWV1ZTsKIAotICAgIGJvb2wgbV91cGRhdGluZzsKLQogICAgIFZl
Y3Rvcjx1bnNpZ25lZCBjaGFyPiBtX3BlbmRpbmdBcHBlbmREYXRhOwogICAgIFRpbWVyPFNvdXJj
ZUJ1ZmZlcj4gbV9hcHBlbmRCdWZmZXJUaW1lcjsKIApAQCAtMTg4LDkgKzE5Niw3IEBAIHByaXZh
dGU6CiAgICAgTWVkaWFUaW1lIG1faGlnaGVzdFByZXNlbnRhdGlvbkVuZFRpbWVzdGFtcDsKIAog
ICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBUcmFja0J1ZmZlcj4gbV90cmFja0J1ZmZlck1hcDsK
LSAgICBib29sIG1fcmVjZWl2ZWRGaXJzdEluaXRpYWxpemF0aW9uU2VnbWVudDsKICAgICBSZWZQ
dHI8VGltZVJhbmdlcz4gbV9idWZmZXJlZDsKLSAgICBib29sIG1fYWN0aXZlOwogCiAgICAgZW51
bSBBcHBlbmRTdGF0ZVR5cGUgeyBXYWl0aW5nRm9yU2VnbWVudCwgUGFyc2luZ0luaXRTZWdtZW50
LCBQYXJzaW5nTWVkaWFTZWdtZW50IH07CiAgICAgQXBwZW5kU3RhdGVUeXBlIG1fYXBwZW5kU3Rh
dGU7CkBAIC0yMDQsNiArMjEwLDExIEBAIHByaXZhdGU6CiAgICAgTWVkaWFUaW1lIG1fcGVuZGlu
Z1JlbW92ZVN0YXJ0OwogICAgIE1lZGlhVGltZSBtX3BlbmRpbmdSZW1vdmVFbmQ7CiAgICAgVGlt
ZXI8U291cmNlQnVmZmVyPiBtX3JlbW92ZVRpbWVyOworCisgICAgYm9vbCBtX3VwZGF0aW5nOwor
ICAgIGJvb2wgbV9yZWNlaXZlZEZpcnN0SW5pdGlhbGl6YXRpb25TZWdtZW50OworICAgIGJvb2wg
bV9hY3RpdmU7CisgICAgYm9vbCBtX2J1ZmZlckZ1bGw7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDE3MjU4MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MTgsNyArMjUxOCw2IEBAIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6cmVmcmVzaENhY2hlZFRpbWUKICAgICAgICAgcmV0dXJuOyAKICAgICB9IAogCi0gICAg
TE9HKE1lZGlhLCAiSFRNTE1lZGlhRWxlbWVudDo6cmVmcmVzaENhY2hlZFRpbWUgLSBjYWNoaW5n
IHRpbWUgJWYiLCBtX2NhY2hlZFRpbWUpOyAKICAgICBtX2Nsb2NrVGltZUF0TGFzdENhY2hlZFRp
bWVVcGRhdGUgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKIH0KIApAQCAtNTk3Miw2
ICs1OTcxLDEzIEBAIE1lZGlhU2Vzc2lvbjo6TWVkaWFUeXBlIEhUTUxNZWRpYUVsZW1lbnQKICAg
ICByZXR1cm4gTWVkaWFTZXNzaW9uOjpBdWRpbzsKIH0KIAorI2lmIEVOQUJMRShNRURJQV9TT1VS
Q0UpCitzaXplX3QgSFRNTE1lZGlhRWxlbWVudDo6bWF4aW11bVNvdXJjZUJ1ZmZlclNpemUoY29u
c3QgU291cmNlQnVmZmVyJiBidWZmZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbWVkaWFTZXNz
aW9uLT5tYXhpbXVtTWVkaWFTb3VyY2VCdWZmZXJTaXplKGJ1ZmZlcik7Cit9CisjZW5kaWYKKwog
dm9pZCBIVE1MTWVkaWFFbGVtZW50OjpwYXVzZVBsYXliYWNrKCkKIHsKICAgICBMT0coTWVkaWEs
ICJIVE1MTWVkaWFFbGVtZW50OjpwYXVzZVBsYXliYWNrIC0gcGF1c2VkID0gJXMiLCBib29sU3Ry
aW5nKHBhdXNlZCgpKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQu
aAkocmV2aXNpb24gMTcyNTgzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDYgKzcyLDcgQEAgY2xhc3MgTWVkaWFLZXlzOwog
I2VuZGlmCiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKIGNsYXNzIE1lZGlhU291cmNlOworY2xh
c3MgU291cmNlQnVmZmVyOwogY2xhc3MgVmlkZW9QbGF5YmFja1F1YWxpdHk7CiAjZW5kaWYKIApA
QCAtMjA4LDYgKzIwOSw3IEBAIHB1YmxpYzoKIC8vICBNZWRpYSBTb3VyY2UuCiAgICAgdm9pZCBj
bG9zZU1lZGlhU291cmNlKCk7CiAgICAgdm9pZCBpbmNyZW1lbnREcm9wcGVkRnJhbWVDb3VudCgp
IHsgKyttX2Ryb3BwZWRWaWRlb0ZyYW1lczsgfQorICAgIHNpemVfdCBtYXhpbXVtU291cmNlQnVm
ZmVyU2l6ZShjb25zdCBTb3VyY2VCdWZmZXImKSBjb25zdDsKICNlbmRpZgogCiAjaWYgRU5BQkxF
KEVOQ1JZUFRFRF9NRURJQSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhU2Vz
c2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFTZXNz
aW9uLmNwcAkocmV2aXNpb24gMTcyNTgzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVk
aWFTZXNzaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUg
Ik1lZGlhU2Vzc2lvbk1hbmFnZXIuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiU2Ny
aXB0Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIlNvdXJjZUJ1ZmZlci5oIgogCiAjaWYgUExBVEZP
Uk0oSU9TKQogI2luY2x1ZGUgIkF1ZGlvU2Vzc2lvbi5oIgpAQCAtMzAxLDYgKzMwMiwzOCBAQCB2
b2lkIEhUTUxNZWRpYVNlc3Npb246OmFwcGx5TWVkaWFQbGF5ZXJSCiAgICAgCiB9CiAKKyNpZiBF
TkFCTEUoTUVESUFfU09VUkNFKQorY29uc3QgdW5zaWduZWQgZml2ZU1pbnV0ZXNPZjEwODBQVmlk
ZW8gPSAyOTAgKiAxMDI0ICogMTAyNDsgLy8gMjkwIE1CIGlzIGFwcHJveGltYXRlbHkgNSBtaW51
dGVzIG9mIDhNYnBzICgxMDgwcCkgY29udGVudC4KK2NvbnN0IHVuc2lnbmVkIGZpdmVNaW51dGVz
U3RlcmVvQXVkaW8gPSAxNCAqIDEwMjQgKiAxMDI0OyAvLyAxNCBNQiBpcyBhcHByb3hpbWF0ZWx5
IDUgbWludXRlcyBvZiAzODRrYnBzIGNvbnRlbnQuCisKK3NpemVfdCBIVE1MTWVkaWFTZXNzaW9u
OjptYXhpbXVtTWVkaWFTb3VyY2VCdWZmZXJTaXplKGNvbnN0IFNvdXJjZUJ1ZmZlciYgYnVmZmVy
KSBjb25zdAoreworICAgIC8vIEEgZ29vZCBxdWFsaXR5IDEwODBwIHZpZGVvIHVzZXMgOCwwMDAg
a2JwcyBhbmQgc3RlcmVvIGF1ZGlvIHVzZXMgMzg0IGticHMsIHNvIGFzc3VtZSA5NSUgZm9yIHZp
ZGVvIGFuZCA1JSBmb3IgYXVkaW8uCisgICAgY29uc3QgZmxvYXQgYnVmZmVyQnVkZ2V0UGVyY2Vu
dGFnZUZvclZpZGVvID0gLjk1OworICAgIGNvbnN0IGZsb2F0IGJ1ZmZlckJ1ZGdldFBlcmNlbnRh
Z2VGb3JBdWRpbyA9IC4wNTsKKworICAgIHNpemVfdCBtYXhpbXVtOworICAgIFNldHRpbmdzKiBz
ZXR0aW5ncyA9IGJ1ZmZlci5kb2N1bWVudCgpLnNldHRpbmdzKCk7CisgICAgaWYgKHNldHRpbmdz
KQorICAgICAgICBtYXhpbXVtID0gc2V0dGluZ3MtPm1heGltdW1Tb3VyY2VCdWZmZXJTaXplKCk7
CisgICAgZWxzZQorICAgICAgICBtYXhpbXVtID0gZml2ZU1pbnV0ZXNPZjEwODBQVmlkZW8gKyBm
aXZlTWludXRlc1N0ZXJlb0F1ZGlvOworCisgICAgLy8gQWxsb3cgYSBTb3VyY2VCdWZmZXIgdG8g
YnVmZmVyIGFzIHRob3VnaCBpdCBpcyBhdWRpby1vbmx5IGV2ZW4gaWYgaXQgZG9lc24ndCBoYXZl
IGFueSBhY3RpdmUgdHJhY2tzICh5ZXQpLgorICAgIHNpemVfdCBidWZmZXJTaXplID0gc3RhdGlj
X2Nhc3Q8c2l6ZV90PihtYXhpbXVtICogYnVmZmVyQnVkZ2V0UGVyY2VudGFnZUZvckF1ZGlvKTsK
KyAgICBpZiAoYnVmZmVyLmhhc1ZpZGVvKCkpCisgICAgICAgIGJ1ZmZlclNpemUgKz0gc3RhdGlj
X2Nhc3Q8c2l6ZV90PihtYXhpbXVtICogYnVmZmVyQnVkZ2V0UGVyY2VudGFnZUZvclZpZGVvKTsK
KworICAgIC8vIEZJWE1FOiB3ZSBtaWdodCB3YW50IHRvIG1vZGlmeSB0aGlzIGFsZ29yaXRobSB0
bzoKKyAgICAvLyAtIGRlY3JlYXNlIHRoZSBtYXhpbXVtIHNpemUgZm9yIGJhY2tncm91bmQgdGFi
cworICAgIC8vIC0gZGVjcmVhc2UgdGhlIG1heGltdW0gc2l6ZSBhbGxvd2VkIGZvciBpbmFjdGl2
ZSBlbGVtZW50cyB3aGVuIGEgcHJvY2VzcyBoYXMgbW9yZSB0aGFuIG9uZQorICAgIC8vICAgZWxl
bWVudCwgZWcuIHNvIGEgcGFnZSB3aXRoIG1hbnkgZWxlbWVudHMgd2hpY2ggYXJlIHBsYXllZCBv
bmUgYXQgYSB0aW1lIGRvZXNuJ3Qga2VlcAorICAgIC8vICAgZXZlcnl0aGluZyBidWZmZXJlZCBh
ZnRlciBhbiBlbGVtZW50IGhhcyBmaW5pc2hlZCBwbGF5aW5nLgorCisgICAgcmV0dXJuIGJ1ZmZl
clNpemU7Cit9CisjZW5kaWYKKwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFZJREVPKQpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFTZXNzaW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFTZXNzaW9uLmgJKHJldmlzaW9uIDE3MjU4MykKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhU2Vzc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNCw2ICszNCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhUTUxNZWRpYUVs
ZW1lbnQ7CitjbGFzcyBTb3VyY2VCdWZmZXI7CiAKIGNsYXNzIEhUTUxNZWRpYVNlc3Npb24gOiBw
dWJsaWMgTWVkaWFTZXNzaW9uIHsKIHB1YmxpYzoKQEAgLTgyLDYgKzgzLDEwIEBAIHB1YmxpYzoK
ICAgICB2b2lkIGFkZEJlaGF2aW9yUmVzdHJpY3Rpb24oQmVoYXZpb3JSZXN0cmljdGlvbnMpOwog
ICAgIHZvaWQgcmVtb3ZlQmVoYXZpb3JSZXN0cmljdGlvbihCZWhhdmlvclJlc3RyaWN0aW9ucyk7
CiAKKyNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQorICAgIHNpemVfdCBtYXhpbXVtTWVkaWFTb3Vy
Y2VCdWZmZXJTaXplKGNvbnN0IFNvdXJjZUJ1ZmZlciYpIGNvbnN0OworI2VuZGlmCisKIHByaXZh
dGU6CiAgICAgQmVoYXZpb3JSZXN0cmljdGlvbnMgbV9yZXN0cmljdGlvbnM7CiB9OwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL1NldHRpbmdzLmluCShyZXZpc2lvbiAxNzI1ODMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1NldHRpbmdzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0yMzAsNCArMjMwLDggQEAgdXNl
SW1hZ2VEb2N1bWVudEZvclN1YmZyYW1lUERGIGluaXRpYWw9ZgogIyBhcyBhIG1lYW5zIHRvIHBh
c3MgZGF0YSBmcm9tIHRoZSB3ZWItcG9ydGlvbiBvZiB0aGVpciBhcHAgdG8gdGhlIG5hdGl2ZSBw
b3J0aW9uLgogYWxsb3dOYXZpZ2F0aW9uVG9JbnZhbGlkVVJMIGluaXRpYWw9ZmFsc2UKIAorIyBB
bGxvdyBTb3VyY2VCdWZmZXJzIHRvIHN0b3JlIHVwIHRvIDMwNE1CIGVhY2gsIGVub3VnaCBmb3Ig
YXBwcm94aW1hdGVseSBmaXZlIG1pbnV0ZXMKKyMgb2YgMTA4MHAgdmlkZW8gYW5kIHN0ZXJlbyBh
dWRpby4KK21heGltdW1Tb3VyY2VCdWZmZXJTaXplIHR5cGU9aW50LCBpbml0aWFsPTMxODc2NzEw
NCwgY29uZGl0aW9uYWw9TUVESUFfU09VUkNFCisKIGxvbmdNb3VzZVByZXNzRW5hYmxlZCBpbml0
aWFsPWZhbHNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9y
bVRpbWVSYW5nZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1BsYXRmb3JtVGltZVJhbmdlcy5jcHAJKHJldmlzaW9uIDE3MjU4MykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVGltZVJhbmdlcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJQbGF0Zm9ybVRpbWVSYW5nZXMuaCIKIAorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgog
I2luY2x1ZGUgPG1hdGguaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMjUyLDExICsyNTMs
MTkgQEAgTWVkaWFUaW1lIFBsYXRmb3JtVGltZVJhbmdlczo6bmVhcmVzdChjbwogTWVkaWFUaW1l
IFBsYXRmb3JtVGltZVJhbmdlczo6dG90YWxEdXJhdGlvbigpIGNvbnN0CiB7CiAgICAgTWVkaWFU
aW1lIHRvdGFsID0gTWVkaWFUaW1lOjp6ZXJvVGltZSgpOwotICAgIGJvb2wgaWdub3JlSW52YWxp
ZDsKIAogICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBsZW5ndGgoKTsgbisrKQotICAgICAg
ICB0b3RhbCArPSBhYnMoZW5kKG4sIGlnbm9yZUludmFsaWQpIC0gc3RhcnQobiwgaWdub3JlSW52
YWxpZCkpOworICAgICAgICB0b3RhbCArPSBhYnMoZW5kKG4pIC0gc3RhcnQobikpOwogICAgIHJl
dHVybiB0b3RhbDsKIH0KIAordm9pZCBQbGF0Zm9ybVRpbWVSYW5nZXM6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoIWxlbmd0aCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aCgpOyArK2kpCisgICAgICAgIG91dC5w
cmludCgiWyIsIHN0YXJ0KGkpLCAiLi4iLCBlbmQoaSksICJdICIpOworfQorCiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVRpbWVSYW5nZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVRpbWVS
YW5nZXMuaAkocmV2aXNpb24gMTcyNTgzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvUGxhdGZvcm1UaW1lUmFuZ2VzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDEw
IEBACiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAKK25hbWVzcGFjZSBXVEYgeworICAgIGNsYXNzIFByaW50U3RyZWFtOworfQorCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIFBsYXRmb3JtVGltZVJhbmdlcyB7CkBAIC02OSw2ICs3Myw4
IEBAIHB1YmxpYzoKIAogICAgIE1lZGlhVGltZSB0b3RhbER1cmF0aW9uKCkgY29uc3Q7CiAKKyAg
ICB2b2lkIGR1bXAoV1RGOjpQcmludFN0cmVhbSYpIGNvbnN0OworCiBwcml2YXRlOgogICAgIFBs
YXRmb3JtVGltZVJhbmdlcyYgY29weShjb25zdCBQbGF0Zm9ybVRpbWVSYW5nZXMmKTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnVmZmVyUHJpdmF0ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJ1
ZmZlclByaXZhdGUuaAkocmV2aXNpb24gMTcyNTgzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU291cmNlQnVmZmVyUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtNTUs
OCArNTYsNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRl
IHJlYWR5U3RhdGUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldFJlYWR5U3RhdGUo
TWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZXZpY3RDb2Rl
ZEZyYW1lcygpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNGdWxsKCkgPSAwOwogCiAgICAgdmly
dHVhbCB2b2lkIGZsdXNoQW5kRW5xdWV1ZU5vbkRpc3BsYXlpbmdTYW1wbGVzKFZlY3RvcjxSZWZQ
dHI8TWVkaWFTYW1wbGU+PiwgQXRvbWljU3RyaW5nKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZW5x
dWV1ZVNhbXBsZShQYXNzUmVmUHRyPE1lZGlhU2FtcGxlPiwgQXRvbWljU3RyaW5nKSB7IH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1Nv
dXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUHJpdmF0ZUFW
Rk9iakMuaAkocmV2aXNpb24gMTcyNTgzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0xMTIsOCArMTEyLDYgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgcmVt
b3ZlZEZyb21NZWRpYVNvdXJjZSgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgTWVkaWFQbGF5ZXI6
OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlKSBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIHZvaWQgZXZpY3RDb2RlZEZyYW1lcygpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9v
bCBpc0Z1bGwoKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZmx1c2hBbmRFbnF1ZXVlTm9u
RGlzcGxheWluZ1NhbXBsZXMoVmVjdG9yPFJlZlB0cjxNZWRpYVNhbXBsZT4+LCBBdG9taWNTdHJp
bmcgdHJhY2tJRCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGVucXVldWVTYW1wbGUoUGFz
c1JlZlB0cjxNZWRpYVNhbXBsZT4sIEF0b21pY1N0cmluZyB0cmFja0lEKSBvdmVycmlkZTsKICAg
ICB2aXJ0dWFsIGJvb2wgaXNSZWFkeUZvck1vcmVTYW1wbGVzKEF0b21pY1N0cmluZyB0cmFja0lE
KSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJj
ZUJ1ZmZlclByaXZhdGVBVkZPYmpDLm1tCShyZXZpc2lvbiAxNzI1ODMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9Tb3VyY2VCdWZmZXJQcml2
YXRlQVZGT2JqQy5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02MzIsNyArNjMyLDcgQEAgYm9vbCBTb3VyY2VC
dWZmZXJQcml2YXRlQVZGT2JqQzo6cHJvY2VzcwogICAgICAgICBDTUZvcm1hdERlc2NyaXB0aW9u
UmVmIGZvcm1hdERlc2NyaXB0aW9uID0gQ01TYW1wbGVCdWZmZXJHZXRGb3JtYXREZXNjcmlwdGlv
bihzYW1wbGVCdWZmZXIpOwogICAgICAgICBGbG9hdFNpemUgZm9ybWF0U2l6ZSA9IEZsb2F0U2l6
ZShDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25HZXRQcmVzZW50YXRpb25EaW1lbnNpb25zKGZvcm1h
dERlc2NyaXB0aW9uLCB0cnVlLCB0cnVlKSk7CiAgICAgICAgIGlmIChmb3JtYXRTaXplICE9IG1f
Y2FjaGVkU2l6ZSkgewotICAgICAgICAgICAgTE9HKE1lZGlhU291cmNlLCAiU291cmNlQnVmZmVy
UHJpdmF0ZUFWRk9iakM6OnByb2Nlc3NDb2RlZEZyYW1lKCVwKSAtIHNpemUgY2hhbmdlIGRldGVj
dGVkOiB7d2lkdGg9JWxmLCBoZWlnaHQ9JWxmIiwgZm9ybWF0U2l6ZS53aWR0aCgpLCBmb3JtYXRT
aXplLmhlaWdodCgpKTsKKyAgICAgICAgICAgIExPRyhNZWRpYVNvdXJjZSwgIlNvdXJjZUJ1ZmZl
clByaXZhdGVBVkZPYmpDOjpwcm9jZXNzQ29kZWRGcmFtZSglcCkgLSBzaXplIGNoYW5nZSBkZXRl
Y3RlZDoge3dpZHRoPSVsZiwgaGVpZ2h0PSVsZn0iLCBmb3JtYXRTaXplLndpZHRoKCksIGZvcm1h
dFNpemUuaGVpZ2h0KCkpOwogICAgICAgICAgICAgbV9jYWNoZWRTaXplID0gZm9ybWF0U2l6ZTsK
ICAgICAgICAgICAgIGlmIChtX21lZGlhU291cmNlKQogICAgICAgICAgICAgICAgIG1fbWVkaWFT
b3VyY2UtPnBsYXllcigpLT5zaXplQ2hhbmdlZCgpOwpAQCAtNzc5LDE4ICs3NzksNiBAQCB2b2lk
IFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpzZXRSZWFkCiAgICAgICAgIG1fbWVkaWFTb3Vy
Y2UtPnBsYXllcigpLT5zZXRSZWFkeVN0YXRlKHJlYWR5U3RhdGUpOwogfQogCi12b2lkIFNvdXJj
ZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpldmljdENvZGVkRnJhbWVzKCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi1ib29sIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjppc0Z1bGwo
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0KIGJv
b2wgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6Omhhc1ZpZGVvKCkgY29uc3QKIHsKICAgICBp
ZiAoIW1fY2xpZW50KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9tZWRpYXNv
dXJjZS9Nb2NrU291cmNlQnVmZmVyUHJpdmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrU291cmNlQnVmZmVyUHJpdmF0ZS5j
cHAJKHJldmlzaW9uIDE3MjU4MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svbWVk
aWFzb3VyY2UvTW9ja1NvdXJjZUJ1ZmZlclByaXZhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIxMywx
NiArMjEzLDYgQEAgdm9pZCBNb2NrU291cmNlQnVmZmVyUHJpdmF0ZTo6c2V0UmVhZHlTdAogICAg
ICAgICBtX21lZGlhU291cmNlLT5wbGF5ZXIoKS0+c2V0UmVhZHlTdGF0ZShyZWFkeVN0YXRlKTsK
IH0KIAotdm9pZCBNb2NrU291cmNlQnVmZmVyUHJpdmF0ZTo6ZXZpY3RDb2RlZEZyYW1lcygpCi17
Ci0gICAgLy8gTm8tb3AuCi19Ci0KLWJvb2wgTW9ja1NvdXJjZUJ1ZmZlclByaXZhdGU6OmlzRnVs
bCgpCi17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiB2b2lkIE1vY2tTb3VyY2VCdWZmZXJQcml2
YXRlOjpzZXRBY3RpdmUoYm9vbCBpc0FjdGl2ZSkKIHsKICAgICBpZiAobV9tZWRpYVNvdXJjZSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja1NvdXJj
ZUJ1ZmZlclByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
b2NrL21lZGlhc291cmNlL01vY2tTb3VyY2VCdWZmZXJQcml2YXRlLmgJKHJldmlzaW9uIDE3MjU4
MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja1NvdXJj
ZUJ1ZmZlclByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02OCw4ICs2OCw2IEBAIHByaXZhdGU6CiAg
ICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tTWVkaWFTb3VyY2UoKSBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdCBvdmVycmlk
ZTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0
ZSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGV2aWN0Q29kZWRGcmFtZXMoKSBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNGdWxsKCkgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIHZv
aWQgZmx1c2hBbmRFbnF1ZXVlTm9uRGlzcGxheWluZ1NhbXBsZXMoVmVjdG9yPFJlZlB0cjxNZWRp
YVNhbXBsZT4+LCBBdG9taWNTdHJpbmcpIG92ZXJyaWRlIHsgfQogICAgIHZpcnR1YWwgdm9pZCBl
bnF1ZXVlU2FtcGxlKFBhc3NSZWZQdHI8TWVkaWFTYW1wbGU+LCBBdG9taWNTdHJpbmcpIG92ZXJy
aWRlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236677</attachid>
            <date>2014-08-15 14:50:19 -0700</date>
            <delta_ts>2014-08-15 14:50:19 -0700</delta_ts>
            <desc>Rebased patch for landing.</desc>
            <filename>patch_10.txt</filename>
            <type>text/plain</type>
            <size>39811</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MjY1MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg5IEBACisyMDE0LTA4LTE1ICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNU0VdIEltcGxlbWVu
dCBhIG1heGltdW0gYnVmZmVyIHNpemUgZm9yIFNvdXJjZUJ1ZmZlcgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1NjE0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgSmVyIE5vYmxlLgorCisgICAgICAgIEltcGxlbWVudCB0aGUgTVNFIGNvZGVkIGZyYW1l
IGV2aWN0aW9uIGFsZ29yaXRobTogd2hlbiBuZXcgYnVmZmVycyBhcmUgYXBwZW5kZWQgYXR0ZW1w
dAorICAgICAgICB0byBrZWVwIHRoZSBhbW91bnQgb2YgZGF0YSBidWZmZXJlZCBiZWxvdyBhIG1h
eGltdW0gc2l6ZSAod2hpY2ggaXMgZGV0ZXJtaW5lZCBieSB0aGUgbWVkaWEKKyAgICAgICAgc2Vz
c2lvbiBtYW5hZ2VyKSBieSBmcmVlaW5nIGNvZGVkIGZyYW1lcyBhcyBmb2xsb3dzOgorICAgICAg
ICAgICAgMSAtIEZyZWUgZnJhbWVzIGluIDMwIHNlY29uZCBjaHVua3MgZnJvbSAwIHRvIDMwIHNl
Y29uZHMgYmVmb3JlIHRoZSBjdXJyZW50IHRpbWUuCisgICAgICAgICAgICAyIC0gSWYgdGhlcmUg
YXJlIHRpbWUgcmFuZ2VzIGFmdGVyIHRoZSByYW5nZSB3aXRoIHRoZSBjdXJyZW50IHRpbWUsIGZy
ZWUgZnJhbWVzIGluCisgICAgICAgICAgICAgICAgMzAgc2Vjb25kIGNodW5rcyBmcm9tIGR1cmF0
aW9uIGJhY2sgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgdGltZSByYW5nZSBhZnRlcgorICAgICAg
ICAgICAgICAgIGN1cnJlbnQgdGltZS4KKworICAgICAgICBGb3Igbm93IHdlIERPIE5PVCB0aHJv
dyBhIFFVT1RBX0VYQ0VFREVEX0VSUiB3aGVuIHdlIGFyZSBub3QgYWJsZSB0byBmcmVlIHVwIGVu
b3VnaAorICAgICAgICBzcGFjZSB0byByZW1haW4gYmVsb3cgdGhlIHByZXNjcmliZWQgcXVvdGEs
IGJlY2F1c2Ugc29tZSBiaWcgbmFtZSwgd2lkZWx5IGRlcGxveWVkLCAKKyAgICAgICAgY29kZSBi
YXNlcyBpZ25vcmUgdGhlIGVycm9yIGFuZCBjb250aW51ZSBhcHBlbmRpbmcgZGF0YSBhcyB0aG91
Z2ggdGhlIGZhaWxlZCBhcHBlbmQKKyAgICAgICAgc3VjY2VlZGVkLCBsZWFkaW5nIHRvIGEgY29y
cnVwdGVkIGJpdHN0cmVhbSBhbmQgZmFpbHVyZSB0byBwbGF5LgorCisgICAgICAgICogTW9kdWxl
cy9tZWRpYXNvdXJjZS9TYW1wbGVNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2FtcGxlTWFw
OjphZGRTYW1wbGUpOiBEcml2ZS1ieSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb246IHNhbXBsZS0+
cHJlc2VudGF0aW9uVGltZSgpCisgICAgICAgICAgICBpcyB1c2VkIG1vcmUgdGhhbiBvbmNlLCBz
dGFzaCBpdCBpbiBhIGxvY2FsIHZhcmlhYmxlLgorICAgICAgICAoV2ViQ29yZTo6U2FtcGxlTWFw
OjpyZW1vdmVTYW1wbGUpOiBEaXR0by4KKworICAgICAgICAqIE1vZHVsZXMvbWVkaWFzb3VyY2Uv
U291cmNlQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmxvZ1Jhbmdlcyk6IERlYnVnLW9u
bHkgZnVuY3Rpb24gdG8gbG9nIFRpbWVSYW5nZXMuCisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VC
dWZmZXI6OlNvdXJjZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXI6OnJl
bW92ZSk6IE9wdGltaXplIGxvZ2dpbmcuIEJ1ZmZlciBmdWxsIGFuZCBjb2RlZCBmcmFtZSBldmlj
dGlvbiBsb2dpYworICAgICAgICAgICAgaXMgaW4gU291cmNlQnVmZmVyIGluc3RlYWQgb2YgU291
cmNlQnVmZmVyUHJpdmF0ZS4KKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlcjo6YXBwZW5k
QnVmZmVySW50ZXJuYWwpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlcjo6
c291cmNlQnVmZmVyUHJpdmF0ZUFwcGVuZENvbXBsZXRlKTogU2V0IG1fYnVmZmVyRnVsbCB3aGVu
IG1vcmUgZGF0YQorICAgICAgICAgICAgaGFzIGJlZW4gYnVmZmVyZWQgdGhhbiBhbGxvd2VkLgor
ICAgICAgICAoV2ViQ29yZTo6cmVtb3ZlU2FtcGxlc0Zyb21UcmFja0J1ZmZlcik6IEFkZCBsb2dn
aW5nLgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyOjpyZW1vdmVDb2RlZEZyYW1lcyk6
IEltcHJvdmUgbG9nZ2luZy4gQXZvaWQgZGVidWcgYnVpbGQgYXNzZXJ0IHdoZW4KKyAgICAgICAg
ICAgIGN1cnJlbnQgdGltZSBpcyBhZnRlciBsYXN0IGVucXVldWVkIHByZXNlbnRhdGlvbiB0aW1l
LgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyOjpldmljdENvZGVkRnJhbWVzKTogVGhl
IGNvZGVkIGZyYW1lIGV2aWN0aW9uIGFsZ29yaXRobS4KKyAgICAgICAgKFdlYkNvcmU6OlNvdXJj
ZUJ1ZmZlcjo6bWF4aW11bUJ1ZmZlclNpemUpOiBSZXR1cm4gdGhlIG1heGltdW0gYW1vdW50IG9m
IGRhdGEgdGhhdCBjYW4gCisgICAgICAgICAgICBiZSBidWZmZXJlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNvdXJjZUJ1ZmZlcjo6c291cmNlQnVmZmVyUHJpdmF0ZURpZFJlY2VpdmVTYW1wbGUpOiBJ
bXByb3ZlIGxvZ2dpbmcuIERvbid0IGF0dGVtcHQKKyAgICAgICAgICAgIHRvIGNyZWF0ZSBhIFBs
YXRmb3JtVGltZVJhbmdlcyB3aXRoIGludmVydGVkIHN0YXJ0IGFuZCBlbmQgdG8gYXZvaWQgYW4g
YXNzZXJ0IGluIGRlYnVnLgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyOjpoYXNBdWRp
byk6IE5ldywgcmV0dXJuIHRydWUgaWYgdGhlcmUgYXJlIGFueSBhdWRpbyB0cmFja3MuCisgICAg
ICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXI6Omhhc1ZpZGVvKTogTmV3LCByZXR1cm4gdHJ1ZSBp
ZiB0aGVyZSBhcmUgYW55IHZpZGVvIHRyYWNrcy4KKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1
ZmZlcjo6c291cmNlQnVmZmVyUHJpdmF0ZUhhc0F1ZGlvKTogQ2FsbCBoYXNBdWRpby4KKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlcjo6c291cmNlQnVmZmVyUHJpdmF0ZUhhc1ZpZGVvKTog
Q2FsbCBoYXNWaWRlby4KKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlcjo6aGFzQ3VycmVu
dFRpbWUpOiBSZXR1cm4gdHJ1ZSBpZiBjdXJyZW50VGltZSBpcyBncmVhdGVyIHRoYW4gZHVyYXRp
b24uCisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXI6Omhhc0Z1dHVyZVRpbWUpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlcjo6ZXh0cmFNZW1vcnlDb3N0KTogUmV0
dXJuIHRoZSBhbW91bnQgb2YgZGF0YSBidWZmZXJlZDogdGhlIHNpemUgb2YKKyAgICAgICAgICAg
IHRoZSBpbnB1dCBidWZmZXIgcGx1cyB0aGUgc2l6ZSBvZiBhbGwgdHJhY2sgc2FtcGxlcy4KKyAg
ICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlcjo6cmVwb3J0RXh0cmFNZW1vcnlDb3N0KTogTW92
ZSBidWZmZXJlZCBzaXplIGNhbGN1bGF0aW9uIHRvIGV4dHJhTWVtb3J5Q29zdC4KKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUJ1ZmZlcjo6ZG9jdW1lbnQpOiBEb2N1bWVudCBhY2Nlc3Nvci4KKyAg
ICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5oOiBEcml2ZS1ieSBzaXpl
IG9wdGltaXphdGlvbiBieSBtb3ZpbmcgYWxsIGJvb2wgbWVtYmVyCisgICAgICAgICAgICB2YXJp
YWJsZXMgdG8gdGhlIGVuZCBvZiBjbGFzcy4KKworICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpyZWZyZXNoQ2Fj
aGVkVGltZSk6IERyaXZlLWJ5IHJlbW92YWwgb2Ygb3Zlcmx5IGNoYXR0eSBsb2dnaW5nLgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6bWF4aW11bVNvdXJjZUJ1ZmZlclNpemUp
OiBOZXcsIG1heGltdW0gc291cmNlIGJ1ZmZlciBzaXplLgorICAgICAgICAqIGh0bWwvSFRNTE1l
ZGlhRWxlbWVudC5oOgorCisgICAgICAgICogaHRtbC9IVE1MTWVkaWFTZXNzaW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYVNlc3Npb246Om1heGltdW1NZWRpYVNvdXJjZUJ1ZmZl
clNpemUpOiBOZXcsIGdldCBtYXhpbXVtIHNvdXJjZSBidWZmZXIgCisgICAgICAgICAgICBzaXpl
IGZyb20gc2V0dGluZ3MsIHJldHVybiBmdWxsIGFtb3VudCBmb3IgYW4gU291cmNlQnVmZmVyIHdp
dGggdmlkZW8gYW5kIGF1ZGlvLCByZXR1cm4gNSUKKyAgICAgICAgICAgIG9mIHRoZSBtYXhpbXVt
IGZvciBhbiBhdWRpby1vbmx5IFNvdXJjZUJ1ZmZlci4KKyAgICAgICAgKiBodG1sL0hUTUxNZWRp
YVNlc3Npb24uaDoKKworICAgICAgICAqIHBhZ2UvU2V0dGluZ3MuaW46IEFkZCBtYXhpbXVtU291
cmNlQnVmZmVyU2l6ZS4gRGVmYXVsdCB2YWx1ZSBpcyBlbm91Z2ggZm9yIGFwcHJveGltYXRlbHkK
KyAgICAgICAgICAgIGZpdmUgbWludXRlcyBvZiAxMDgwcCB2aWRlbyBhbmQgc3RlcmVvIGF1ZGlv
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1UaW1lUmFuZ2VzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtVGltZVJhbmdlczo6dG90YWxEdXJhdGlvbik6IERy
aXZlLWJ5IG9wdGltaXphdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtVGltZVJhbmdl
czo6ZHVtcCk6IE5ldywgYWxsb3cgYSBQbGF0Zm9ybVRpbWVSYW5nZXMgdG8gYmUgcHJpbnRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVRpbWVSYW5nZXMuaDoKKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJ1ZmZlclByaXZhdGUuaDogRGVsZXRlIGV2
aWN0Q29kZWRGcmFtZXMgYW5kIGlzRnVsbCwgdGhhdCBsb2dpYworICAgICAgICAgICAgaXMgbm90
IGluIFNvdXJjZUJ1ZmZlci4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vb2JqYy9Tb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLm1t
OgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OnByb2Nlc3ND
b2RlZEZyYW1lKTogRHJpdmUtYnkgbG9nZ2luZyBmaXguCisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6ZXZpY3RDb2RlZEZyYW1lcyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6aXNGdWxsKTogRGVsZXRl
ZC4KKworICAgICAgICAqIHBsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja1NvdXJjZUJ1ZmZl
clByaXZhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW9ja1NvdXJjZUJ1ZmZlclByaXZhdGU6
OmV2aWN0Q29kZWRGcmFtZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TW9ja1NvdXJj
ZUJ1ZmZlclByaXZhdGU6OmlzRnVsbCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vbW9j
ay9tZWRpYXNvdXJjZS9Nb2NrU291cmNlQnVmZmVyUHJpdmF0ZS5oOgorCiAyMDE0LTA4LTE1ICBK
ZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIFtFTUVdW01hY10gQWRv
cHQgQVZTdHJlYW1TZXNzaW9uLgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNv
dXJjZS9TYW1wbGVNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzb3VyY2UvU2FtcGxlTWFwLmNwcAkocmV2aXNpb24gMTcyNjUzKQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9TYW1wbGVNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTMsOSArMTEzLDExIEBAIHZvaWQgU2FtcGxlTWFwOjphZGRTYW1wbGUoUGFzc1JlZlB0cjxN
ZWQKICAgICBSZWZQdHI8TWVkaWFTYW1wbGU+IHNhbXBsZSA9IHBycFNhbXBsZTsKICAgICBBU1NF
UlQoc2FtcGxlKTsKIAotICAgIHByZXNlbnRhdGlvbk9yZGVyKCkubV9zYW1wbGVzLmluc2VydChQ
cmVzZW50YXRpb25PcmRlclNhbXBsZU1hcDo6TWFwVHlwZTo6dmFsdWVfdHlwZShzYW1wbGUtPnBy
ZXNlbnRhdGlvblRpbWUoKSwgc2FtcGxlKSk7CisgICAgTWVkaWFUaW1lIHByZXNlbnRhdGlvblRp
bWUgPSBzYW1wbGUtPnByZXNlbnRhdGlvblRpbWUoKTsKIAotICAgIGF1dG8gZGVjb2RlS2V5ID0g
RGVjb2RlT3JkZXJTYW1wbGVNYXA6OktleVR5cGUoc2FtcGxlLT5kZWNvZGVUaW1lKCksIHNhbXBs
ZS0+cHJlc2VudGF0aW9uVGltZSgpKTsKKyAgICBwcmVzZW50YXRpb25PcmRlcigpLm1fc2FtcGxl
cy5pbnNlcnQoUHJlc2VudGF0aW9uT3JkZXJTYW1wbGVNYXA6Ok1hcFR5cGU6OnZhbHVlX3R5cGUo
cHJlc2VudGF0aW9uVGltZSwgc2FtcGxlKSk7CisKKyAgICBhdXRvIGRlY29kZUtleSA9IERlY29k
ZU9yZGVyU2FtcGxlTWFwOjpLZXlUeXBlKHNhbXBsZS0+ZGVjb2RlVGltZSgpLCBwcmVzZW50YXRp
b25UaW1lKTsKICAgICBkZWNvZGVPcmRlcigpLm1fc2FtcGxlcy5pbnNlcnQoRGVjb2RlT3JkZXJT
YW1wbGVNYXA6Ok1hcFR5cGU6OnZhbHVlX3R5cGUoZGVjb2RlS2V5LCBzYW1wbGUpKTsKIAogICAg
IG1fdG90YWxTaXplICs9IHNhbXBsZS0+c2l6ZUluQnl0ZXMoKTsKQEAgLTEyNCw5ICsxMjYsMTEg
QEAgdm9pZCBTYW1wbGVNYXA6OmFkZFNhbXBsZShQYXNzUmVmUHRyPE1lZAogdm9pZCBTYW1wbGVN
YXA6OnJlbW92ZVNhbXBsZShNZWRpYVNhbXBsZSogc2FtcGxlKQogewogICAgIEFTU0VSVChzYW1w
bGUpOwotICAgIHByZXNlbnRhdGlvbk9yZGVyKCkubV9zYW1wbGVzLmVyYXNlKHNhbXBsZS0+cHJl
c2VudGF0aW9uVGltZSgpKTsKKyAgICBNZWRpYVRpbWUgcHJlc2VudGF0aW9uVGltZSA9IHNhbXBs
ZS0+cHJlc2VudGF0aW9uVGltZSgpOworCisgICAgcHJlc2VudGF0aW9uT3JkZXIoKS5tX3NhbXBs
ZXMuZXJhc2UocHJlc2VudGF0aW9uVGltZSk7CiAKLSAgICBhdXRvIGRlY29kZUtleSA9IERlY29k
ZU9yZGVyU2FtcGxlTWFwOjpLZXlUeXBlKHNhbXBsZS0+ZGVjb2RlVGltZSgpLCBzYW1wbGUtPnBy
ZXNlbnRhdGlvblRpbWUoKSk7CisgICAgYXV0byBkZWNvZGVLZXkgPSBEZWNvZGVPcmRlclNhbXBs
ZU1hcDo6S2V5VHlwZShzYW1wbGUtPmRlY29kZVRpbWUoKSwgcHJlc2VudGF0aW9uVGltZSk7CiAg
ICAgZGVjb2RlT3JkZXIoKS5tX3NhbXBsZXMuZXJhc2UoZGVjb2RlS2V5KTsKIAogICAgIG1fdG90
YWxTaXplIC09IHNhbXBsZS0+c2l6ZUluQnl0ZXMoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5jcHAJKHJldmlzaW9uIDE3
MjY1MykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTQ4LDEyICs0OSwxNiBAQAogI2luY2x1ZGUgIlRleHRU
cmFja0xpc3QuaCIKICNpbmNsdWRlICJUaW1lUmFuZ2VzLmgiCiAjaW5jbHVkZSAiVmlkZW9UcmFj
a0xpc3QuaCIKKyNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8bWFwPgogI2luY2x1ZGUgPHJ1
bnRpbWUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+CiAjaW5jbHVk
ZSA8cnVudGltZS9WTS5oPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2lmICFMT0dfRElTQUJMRUQKKyNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC0xMDQsMTIgKzEwOSw5IEBAIFNvdXJjZUJ1ZmZlcjo6U291cmNlQnVmZmVyKFBhc3NSZWY8U291
cmMKICAgICAsIG1fcHJpdmF0ZShXVEY6Om1vdmUoc291cmNlQnVmZmVyUHJpdmF0ZSkpCiAgICAg
LCBtX3NvdXJjZShzb3VyY2UpCiAgICAgLCBtX2FzeW5jRXZlbnRRdWV1ZSgqdGhpcykKLSAgICAs
IG1fdXBkYXRpbmcoZmFsc2UpCiAgICAgLCBtX2FwcGVuZEJ1ZmZlclRpbWVyKHRoaXMsICZTb3Vy
Y2VCdWZmZXI6OmFwcGVuZEJ1ZmZlclRpbWVyRmlyZWQpCiAgICAgLCBtX2hpZ2hlc3RQcmVzZW50
YXRpb25FbmRUaW1lc3RhbXAoTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpKQotICAgICwgbV9yZWNl
aXZlZEZpcnN0SW5pdGlhbGl6YXRpb25TZWdtZW50KGZhbHNlKQogICAgICwgbV9idWZmZXJlZChU
aW1lUmFuZ2VzOjpjcmVhdGUoKSkKLSAgICAsIG1fYWN0aXZlKGZhbHNlKQogICAgICwgbV9hcHBl
bmRTdGF0ZShXYWl0aW5nRm9yU2VnbWVudCkKICAgICAsIG1fdGltZU9mQnVmZmVyaW5nTW9uaXRv
cihtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSkKICAgICAsIG1fYnVmZmVyZWRTaW5jZUxh
c3RNb25pdG9yKDApCkBAIC0xMTgsNiArMTIwLDEwIEBAIFNvdXJjZUJ1ZmZlcjo6U291cmNlQnVm
ZmVyKFBhc3NSZWY8U291cmMKICAgICAsIG1fcGVuZGluZ1JlbW92ZVN0YXJ0KE1lZGlhVGltZTo6
aW52YWxpZFRpbWUoKSkKICAgICAsIG1fcGVuZGluZ1JlbW92ZUVuZChNZWRpYVRpbWU6OmludmFs
aWRUaW1lKCkpCiAgICAgLCBtX3JlbW92ZVRpbWVyKHRoaXMsICZTb3VyY2VCdWZmZXI6OnJlbW92
ZVRpbWVyRmlyZWQpCisgICAgLCBtX3VwZGF0aW5nKGZhbHNlKQorICAgICwgbV9yZWNlaXZlZEZp
cnN0SW5pdGlhbGl6YXRpb25TZWdtZW50KGZhbHNlKQorICAgICwgbV9hY3RpdmUoZmFsc2UpCisg
ICAgLCBtX2J1ZmZlckZ1bGwoZmFsc2UpCiB7CiAgICAgQVNTRVJUKG1fc291cmNlKTsKIApAQCAt
MjM1LDcgKzI0MSw4IEBAIHZvaWQgU291cmNlQnVmZmVyOjphYm9ydChFeGNlcHRpb25Db2RlJiAK
IAogdm9pZCBTb3VyY2VCdWZmZXI6OnJlbW92ZShkb3VibGUgc3RhcnQsIGRvdWJsZSBlbmQsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIExPRyhNZWRpYVNvdXJjZSwgIlNvdXJjZUJ1ZmZlcjo6
cmVtb3ZlKCVwKSAtIHN0YXJ0KCVzKSwgZW5kKCVzKSIsIHRoaXMsIHRvU3RyaW5nKHN0YXJ0KS51
dGY4KCkuZGF0YSgpLCB0b1N0cmluZyhlbmQpLnV0ZjgoKS5kYXRhKCkpOworICAgIExPRyhNZWRp
YVNvdXJjZSwgIlNvdXJjZUJ1ZmZlcjo6cmVtb3ZlKCVwKSAtIHN0YXJ0KCVsZiksIGVuZCglbGYp
IiwgdGhpcywgc3RhcnQsIGVuZCk7CisKICAgICAvLyBTZWN0aW9uIDMuMiByZW1vdmUoKSBtZXRo
b2Qgc3RlcHMuCiAgICAgLy8gMS4gSWYgc3RhcnQgaXMgbmVnYXRpdmUgb3IgZ3JlYXRlciB0aGFu
IGR1cmF0aW9uLCB0aGVuIHRocm93IGFuIEludmFsaWRBY2Nlc3NFcnJvciBleGNlcHRpb24gYW5k
IGFib3J0IHRoZXNlIHN0ZXBzLgogICAgIC8vIDIuIElmIGVuZCBpcyBsZXNzIHRoYW4gb3IgZXF1
YWwgdG8gc3RhcnQsIHRoZW4gdGhyb3cgYW4gSW52YWxpZEFjY2Vzc0Vycm9yIGV4Y2VwdGlvbiBh
bmQgYWJvcnQgdGhlc2Ugc3RlcHMuCkBAIC00MDcsMTMgKzQxNCwxNyBAQCB2b2lkIFNvdXJjZUJ1
ZmZlcjo6YXBwZW5kQnVmZmVySW50ZXJuYWwoCiAgICAgbV9zb3VyY2UtPm9wZW5JZkluRW5kZWRT
dGF0ZSgpOwogCiAgICAgLy8gNC4gUnVuIHRoZSBjb2RlZCBmcmFtZSBldmljdGlvbiBhbGdvcml0
aG0uCi0gICAgbV9wcml2YXRlLT5ldmljdENvZGVkRnJhbWVzKCk7CisgICAgZXZpY3RDb2RlZEZy
YW1lcyhzaXplKTsKIAorICAgIC8vIEZJWE1FOiBlbmFibGUgdGhpcyBjb2RlIHdoZW4gTVNFIGxp
YnJhcmllcyBoYXZlIGJlZW4gdXBkYXRlZCB0byBzdXBwb3J0IGl0LgorI2lmIDAKICAgICAvLyA1
LiBJZiB0aGUgYnVmZmVyIGZ1bGwgZmxhZyBlcXVhbHMgdHJ1ZSwgdGhlbiB0aHJvdyBhIFFVT1RB
X0VYQ0VFREVEX0VSUiBleGNlcHRpb24gYW5kIGFib3J0IHRoZXNlIHN0ZXAuCi0gICAgaWYgKG1f
cHJpdmF0ZS0+aXNGdWxsKCkpIHsKKyAgICBpZiAobV9idWZmZXJGdWxsKSB7CisgICAgICAgIExP
RyhNZWRpYVNvdXJjZSwgIlNvdXJjZUJ1ZmZlcjo6YXBwZW5kQnVmZmVySW50ZXJuYWwoJXApIC0g
IGJ1ZmZlciBmdWxsLCBmYWlsaW5nIHdpdGggUVVPVEFfRVhDRUVERURfRVJSIGVycm9yIiwgdGhp
cyk7CiAgICAgICAgIGVjID0gUVVPVEFfRVhDRUVERURfRVJSOwogICAgICAgICByZXR1cm47CiAg
ICAgfQorI2VuZGlmCiAKICAgICAvLyBOT1RFOiBSZXR1cm4gdG8gMy4yIGFwcGVuZEJ1ZmZlcigp
CiAgICAgLy8gMy4gQWRkIGRhdGEgdG8gdGhlIGVuZCBvZiB0aGUgaW5wdXQgYnVmZmVyLgpAQCAt
NTE0LDYgKzUyNSwxMCBAQCB2b2lkIFNvdXJjZUJ1ZmZlcjo6c291cmNlQnVmZmVyUHJpdmF0ZUFw
CiAgICAgfQogCiAgICAgcmVwb3J0RXh0cmFNZW1vcnlDb3N0KCk7CisgICAgaWYgKGV4dHJhTWVt
b3J5Q29zdCgpID4gdGhpcy0+bWF4aW11bUJ1ZmZlclNpemUoKSkKKyAgICAgICAgbV9idWZmZXJG
dWxsID0gdHJ1ZTsKKworICAgIExPRyhNZWRpYSwgIlNvdXJjZUJ1ZmZlcjo6c291cmNlQnVmZmVy
UHJpdmF0ZUFwcGVuZENvbXBsZXRlKCVwKSAtIGJ1ZmZlcmVkID0gJXMiLCB0aGlzLCB0b1N0cmlu
ZyhtX2J1ZmZlcmVkLT5yYW5nZXMoKSkudXRmOCgpLmRhdGEoKSk7CiB9CiAKIHZvaWQgU291cmNl
QnVmZmVyOjpzb3VyY2VCdWZmZXJQcml2YXRlRGlkUmVjZWl2ZVJlbmRlcmluZ0Vycm9yKFNvdXJj
ZUJ1ZmZlclByaXZhdGUqLCBpbnQpCkBAIC01NDgsNiArNTYzLDU2IEBAIHN0YXRpYyBQYXNzUmVm
UHRyPFRpbWVSYW5nZXM+IHJlbW92ZVNhbXAKICAgICByZXR1cm4gZXJhc2VkUmFuZ2VzLnJlbGVh
c2UoKTsKIH0KIAorc3RhdGljIFBhc3NSZWZQdHI8VGltZVJhbmdlcz4gcmVtb3ZlU2FtcGxlc0Zy
b21UcmFja0J1ZmZlcihjb25zdCBEZWNvZGVPcmRlclNhbXBsZU1hcDo6TWFwVHlwZSYgc2FtcGxl
cywgU291cmNlQnVmZmVyOjpUcmFja0J1ZmZlciYgdHJhY2tCdWZmZXIsIGNvbnN0IFNvdXJjZUJ1
ZmZlciogYnVmZmVyLCBjb25zdCBjaGFyKiBsb2dQcmVmaXgpCit7CisjaWYgIUxPR19ESVNBQkxF
RAorICAgIGRvdWJsZSBlYXJsaWVzdFNhbXBsZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91Ymxl
Pjo6aW5maW5pdHkoKTsKKyAgICBkb3VibGUgbGF0ZXN0U2FtcGxlID0gMDsKKyAgICBzaXplX3Qg
Ynl0ZXNSZW1vdmVkID0gMDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGxvZ1ByZWZpeCk7Cisg
ICAgVU5VU0VEX1BBUkFNKGJ1ZmZlcik7CisjZW5kaWYKKworICAgIFJlZlB0cjxUaW1lUmFuZ2Vz
PiBlcmFzZWRSYW5nZXMgPSBUaW1lUmFuZ2VzOjpjcmVhdGUoKTsKKyAgICBNZWRpYVRpbWUgbWlj
cm9zZWNvbmQoMSwgMTAwMDAwMCk7CisgICAgZm9yIChhdXRvIHNhbXBsZUl0IDogc2FtcGxlcykg
eworICAgICAgICBjb25zdCBEZWNvZGVPcmRlclNhbXBsZU1hcDo6S2V5VHlwZSYgZGVjb2RlS2V5
ID0gc2FtcGxlSXQuZmlyc3Q7CisjaWYgIUxPR19ESVNBQkxFRAorICAgICAgICBzaXplX3Qgc3Rh
cnRCdWZmZXJTaXplID0gdHJhY2tCdWZmZXIuc2FtcGxlcy5zaXplSW5CeXRlcygpOworI2VuZGlm
CisKKyAgICAgICAgUmVmUHRyPE1lZGlhU2FtcGxlPiYgc2FtcGxlID0gc2FtcGxlSXQuc2Vjb25k
OworICAgICAgICBMT0coTWVkaWFTb3VyY2UsICJTb3VyY2VCdWZmZXI6OiVzKCVwKSAtIHJlbW92
aW5nIHNhbXBsZSglcykiLCBsb2dQcmVmaXgsIGJ1ZmZlciwgdG9TdHJpbmcoKnNhbXBsZUl0LnNl
Y29uZCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICAgICAgLy8gUmVtb3ZlIHRoZSBlcmFzZWQgc2Ft
cGxlcyBmcm9tIHRoZSBUcmFja0J1ZmZlciBzYW1wbGUgbWFwLgorICAgICAgICB0cmFja0J1ZmZl
ci5zYW1wbGVzLnJlbW92ZVNhbXBsZShzYW1wbGUuZ2V0KCkpOworCisgICAgICAgIC8vIEFsc28g
cmVtb3ZlIHRoZSBlcmFzZWQgc2FtcGxlcyBmcm9tIHRoZSBUcmFja0J1ZmZlciBkZWNvZGVRdWV1
ZS4KKyAgICAgICAgdHJhY2tCdWZmZXIuZGVjb2RlUXVldWUuZXJhc2UoZGVjb2RlS2V5KTsKKwor
ICAgICAgICBkb3VibGUgc3RhcnRUaW1lID0gc2FtcGxlLT5wcmVzZW50YXRpb25UaW1lKCkudG9E
b3VibGUoKTsKKyAgICAgICAgZG91YmxlIGVuZFRpbWUgPSBzdGFydFRpbWUgKyAoc2FtcGxlLT5k
dXJhdGlvbigpICsgbWljcm9zZWNvbmQpLnRvRG91YmxlKCk7CisgICAgICAgIGVyYXNlZFJhbmdl
cy0+YWRkKHN0YXJ0VGltZSwgZW5kVGltZSk7CisKKyNpZiAhTE9HX0RJU0FCTEVECisgICAgICAg
IGJ5dGVzUmVtb3ZlZCArPSBzdGFydEJ1ZmZlclNpemUgLSB0cmFja0J1ZmZlci5zYW1wbGVzLnNp
emVJbkJ5dGVzKCk7CisgICAgICAgIGlmIChzdGFydFRpbWUgPCBlYXJsaWVzdFNhbXBsZSkKKyAg
ICAgICAgICAgIGVhcmxpZXN0U2FtcGxlID0gc3RhcnRUaW1lOworICAgICAgICBpZiAoZW5kVGlt
ZSA+IGxhdGVzdFNhbXBsZSkKKyAgICAgICAgICAgIGxhdGVzdFNhbXBsZSA9IGVuZFRpbWU7Cisj
ZW5kaWYKKyAgICB9CisKKyNpZiAhTE9HX0RJU0FCTEVECisgICAgaWYgKGJ5dGVzUmVtb3ZlZCkg
eworICAgICAgICBMT0coTWVkaWFTb3VyY2UsICJTb3VyY2VCdWZmZXI6OiVzKCVwKSByZW1vdmVk
ICV6dSBieXRlcywgc3RhcnQoJWxmKSwgZW5kKCVsZikiLCBsb2dQcmVmaXgsIGJ1ZmZlciwgYnl0
ZXNSZW1vdmVkLCBlYXJsaWVzdFNhbXBsZSwgbGF0ZXN0U2FtcGxlKTsKKyAgICB9CisjZW5kaWYK
KworICAgIHJldHVybiBlcmFzZWRSYW5nZXMucmVsZWFzZSgpOworfQorCiB2b2lkIFNvdXJjZUJ1
ZmZlcjo6cmVtb3ZlQ29kZWRGcmFtZXMoY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVk
aWFUaW1lJiBlbmQpCiB7CiAgICAgTE9HKE1lZGlhU291cmNlLCAiU291cmNlQnVmZmVyOjpyZW1v
dmVDb2RlZEZyYW1lcyglcCkgLSBzdGFydCglcyksIGVuZCglcykiLCB0aGlzLCB0b1N0cmluZyhz
dGFydCkudXRmOCgpLmRhdGEoKSwgdG9TdHJpbmcoZW5kKS51dGY4KCkuZGF0YSgpKTsKQEAgLTU5
MCwxNCArNjU1LDE2IEBAIHZvaWQgU291cmNlQnVmZmVyOjpyZW1vdmVDb2RlZEZyYW1lcyhjb24K
ICAgICAgICAgRGVjb2RlT3JkZXJTYW1wbGVNYXA6Oml0ZXJhdG9yIHJlbW92ZURlY29kZVN0YXJ0
ID0gdHJhY2tCdWZmZXIuc2FtcGxlcy5kZWNvZGVPcmRlcigpLmZpbmRTYW1wbGVXaXRoRGVjb2Rl
S2V5KGRlY29kZUtleSk7CiAKICAgICAgICAgRGVjb2RlT3JkZXJTYW1wbGVNYXA6Ok1hcFR5cGUg
ZXJhc2VkU2FtcGxlcyhyZW1vdmVEZWNvZGVTdGFydCwgcmVtb3ZlRGVjb2RlRW5kKTsKLSAgICAg
ICAgUmVmUHRyPFRpbWVSYW5nZXM+IGVyYXNlZFJhbmdlcyA9IHJlbW92ZVNhbXBsZXNGcm9tVHJh
Y2tCdWZmZXIoZXJhc2VkU2FtcGxlcywgdHJhY2tCdWZmZXIpOworICAgICAgICBSZWZQdHI8VGlt
ZVJhbmdlcz4gZXJhc2VkUmFuZ2VzID0gcmVtb3ZlU2FtcGxlc0Zyb21UcmFja0J1ZmZlcihlcmFz
ZWRTYW1wbGVzLCB0cmFja0J1ZmZlciwgdGhpcywgInJlbW92ZUNvZGVkRnJhbWVzIik7CiAKICAg
ICAgICAgLy8gT25seSBmb3JjZSB0aGUgVHJhY2tCdWZmZXIgdG8gcmUtZW5xdWV1ZSBpZiB0aGUg
cmVtb3ZlZCByYW5nZXMgb3ZlcmxhcCB3aXRoIGVucXVldWVkIGFuZCBwb3NzaWJseQogICAgICAg
ICAvLyBub3QgeWV0IGRpc3BsYXllZCBzYW1wbGVzLgotICAgICAgICBQbGF0Zm9ybVRpbWVSYW5n
ZXMgcG9zc2libHlFbnF1ZXVlZFJhbmdlcyhjdXJyZW50TWVkaWFUaW1lLCB0cmFja0J1ZmZlci5s
YXN0RW5xdWV1ZWRQcmVzZW50YXRpb25UaW1lKTsKLSAgICAgICAgcG9zc2libHlFbnF1ZXVlZFJh
bmdlcy5pbnRlcnNlY3RXaXRoKGVyYXNlZFJhbmdlcy0+cmFuZ2VzKCkpOwotICAgICAgICBpZiAo
cG9zc2libHlFbnF1ZXVlZFJhbmdlcy5sZW5ndGgoKSkKLSAgICAgICAgICAgIHRyYWNrQnVmZmVy
Lm5lZWRzUmVlbnF1ZXVlaW5nID0gdHJ1ZTsKKyAgICAgICAgaWYgKGN1cnJlbnRNZWRpYVRpbWUg
PCB0cmFja0J1ZmZlci5sYXN0RW5xdWV1ZWRQcmVzZW50YXRpb25UaW1lKSB7CisgICAgICAgICAg
ICBQbGF0Zm9ybVRpbWVSYW5nZXMgcG9zc2libHlFbnF1ZXVlZFJhbmdlcyhjdXJyZW50TWVkaWFU
aW1lLCB0cmFja0J1ZmZlci5sYXN0RW5xdWV1ZWRQcmVzZW50YXRpb25UaW1lKTsKKyAgICAgICAg
ICAgIHBvc3NpYmx5RW5xdWV1ZWRSYW5nZXMuaW50ZXJzZWN0V2l0aChlcmFzZWRSYW5nZXMtPnJh
bmdlcygpKTsKKyAgICAgICAgICAgIGlmIChwb3NzaWJseUVucXVldWVkUmFuZ2VzLmxlbmd0aCgp
KQorICAgICAgICAgICAgICAgIHRyYWNrQnVmZmVyLm5lZWRzUmVlbnF1ZXVlaW5nID0gdHJ1ZTsK
KyAgICAgICAgfQogCiAgICAgICAgIGVyYXNlZFJhbmdlcy0+aW52ZXJ0KCk7CiAgICAgICAgIG1f
YnVmZmVyZWQtPmludGVyc2VjdFdpdGgoKmVyYXNlZFJhbmdlcyk7CkBAIC02MTEsNiArNjc4LDgg
QEAgdm9pZCBTb3VyY2VCdWZmZXI6OnJlbW92ZUNvZGVkRnJhbWVzKGNvbgogCiAgICAgLy8gNC4g
SWYgYnVmZmVyIGZ1bGwgZmxhZyBlcXVhbHMgdHJ1ZSBhbmQgdGhpcyBvYmplY3QgaXMgcmVhZHkg
dG8gYWNjZXB0IG1vcmUgYnl0ZXMsIHRoZW4gc2V0IHRoZSBidWZmZXIgZnVsbCBmbGFnIHRvIGZh
bHNlLgogICAgIC8vIE5vLW9wCisKKyAgICBMT0coTWVkaWEsICJTb3VyY2VCdWZmZXI6OnJlbW92
ZUNvZGVkRnJhbWVzKCVwKSAtIGJ1ZmZlcmVkID0gJXMiLCB0aGlzLCB0b1N0cmluZyhtX2J1ZmZl
cmVkLT5yYW5nZXMoKSkudXRmOCgpLmRhdGEoKSk7CiB9CiAKIHZvaWQgU291cmNlQnVmZmVyOjpy
ZW1vdmVUaW1lckZpcmVkKFRpbWVyPFNvdXJjZUJ1ZmZlcj4qKQpAQCAtNjM3LDYgKzcwNiwxMDkg
QEAgdm9pZCBTb3VyY2VCdWZmZXI6OnJlbW92ZVRpbWVyRmlyZWQoVGltZQogICAgIHNjaGVkdWxl
RXZlbnQoZXZlbnROYW1lcygpLnVwZGF0ZWVuZEV2ZW50KTsKIH0KIAordm9pZCBTb3VyY2VCdWZm
ZXI6OmV2aWN0Q29kZWRGcmFtZXMoc2l6ZV90IG5ld0RhdGFTaXplKQoreworICAgIC8vIDMuNS4x
MyBDb2RlZCBGcmFtZSBFdmljdGlvbiBBbGdvcml0aG0KKyAgICAvLyBodHRwOi8vd3d3LnczLm9y
Zy9UUi9tZWRpYS1zb3VyY2UvI3NvdXJjZWJ1ZmZlci1jb2RlZC1mcmFtZS1ldmljdGlvbgorCisg
ICAgaWYgKGlzUmVtb3ZlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBUaGlzIGFsZ29y
aXRobSBpcyBydW4gdG8gZnJlZSB1cCBzcGFjZSBpbiB0aGlzIHNvdXJjZSBidWZmZXIgd2hlbiBu
ZXcgZGF0YSBpcyBhcHBlbmRlZC4KKyAgICAvLyAxLiBMZXQgbmV3IGRhdGEgZXF1YWwgdGhlIGRh
dGEgdGhhdCBpcyBhYm91dCB0byBiZSBhcHBlbmRlZCB0byB0aGlzIFNvdXJjZUJ1ZmZlci4KKyAg
ICAvLyAyLiBJZiB0aGUgYnVmZmVyIGZ1bGwgZmxhZyBlcXVhbHMgZmFsc2UsIHRoZW4gYWJvcnQg
dGhlc2Ugc3RlcHMuCisgICAgaWYgKCFtX2J1ZmZlckZ1bGwpCisgICAgICAgIHJldHVybjsKKwor
ICAgIHNpemVfdCBtYXhpbXVtQnVmZmVyU2l6ZSA9IHRoaXMtPm1heGltdW1CdWZmZXJTaXplKCk7
CisKKyAgICAvLyAzLiBMZXQgcmVtb3ZhbCByYW5nZXMgZXF1YWwgYSBsaXN0IG9mIHByZXNlbnRh
dGlvbiB0aW1lIHJhbmdlcyB0aGF0IGNhbiBiZSBldmljdGVkIGZyb20KKyAgICAvLyB0aGUgcHJl
c2VudGF0aW9uIHRvIG1ha2Ugcm9vbSBmb3IgdGhlIG5ldyBkYXRhLgorCisgICAgLy8gTk9URTog
YmVnaW4gYnkgcmVtb3ZpbmcgZGF0YSBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlcmVk
IHJhbmdlcywgMzAgc2Vjb25kcyBhdAorICAgIC8vIGEgdGltZSwgdXAgdG8gMzAgc2Vjb25kcyBi
ZWZvcmUgY3VycmVudFRpbWUuCisgICAgTWVkaWFUaW1lIHRoaXJ0eVNlY29uZHMgPSBNZWRpYVRp
bWUoMzAsIDEpOworICAgIE1lZGlhVGltZSBjdXJyZW50VGltZSA9IE1lZGlhVGltZTo6Y3JlYXRl
V2l0aERvdWJsZShtX3NvdXJjZS0+Y3VycmVudFRpbWUoKSk7CisgICAgTWVkaWFUaW1lIG1heGlt
dW1SYW5nZUVuZCA9IGN1cnJlbnRUaW1lIC0gdGhpcnR5U2Vjb25kczsKKworI2lmICFMT0dfRElT
QUJMRUQKKyAgICBMT0coTWVkaWFTb3VyY2UsICJTb3VyY2VCdWZmZXI6OmV2aWN0Q29kZWRGcmFt
ZXMoJXApIC0gY3VycmVudFRpbWUgPSAlbGYsIHJlcXVpcmUgJXp1IGJ5dGVzLCBtYXhpbXVtIGJ1
ZmZlciBzaXplIGlzICV6dSIsIHRoaXMsIG1fc291cmNlLT5jdXJyZW50VGltZSgpLCBleHRyYU1l
bW9yeUNvc3QoKSArIG5ld0RhdGFTaXplLCBtYXhpbXVtQnVmZmVyU2l6ZSk7CisgICAgc2l6ZV90
IGluaXRpYWxCdWZmZXJlZFNpemUgPSBleHRyYU1lbW9yeUNvc3QoKTsKKyNlbmRpZgorCisgICAg
TWVkaWFUaW1lIHJhbmdlU3RhcnQgPSBNZWRpYVRpbWU6Onplcm9UaW1lKCk7CisgICAgTWVkaWFU
aW1lIHJhbmdlRW5kID0gcmFuZ2VTdGFydCArIHRoaXJ0eVNlY29uZHM7CisgICAgd2hpbGUgKHJh
bmdlU3RhcnQgPCBtYXhpbXVtUmFuZ2VFbmQpIHsKKyAgICAgICAgLy8gNC4gRm9yIGVhY2ggcmFu
Z2UgaW4gcmVtb3ZhbCByYW5nZXMsIHJ1biB0aGUgY29kZWQgZnJhbWUgcmVtb3ZhbCBhbGdvcml0
aG0gd2l0aCBzdGFydCBhbmQKKyAgICAgICAgLy8gZW5kIGVxdWFsIHRvIHRoZSByZW1vdmFsIHJh
bmdlIHN0YXJ0IGFuZCBlbmQgdGltZXN0YW1wIHJlc3BlY3RpdmVseS4KKyAgICAgICAgcmVtb3Zl
Q29kZWRGcmFtZXMocmFuZ2VTdGFydCwgc3RkOjptaW4ocmFuZ2VFbmQsIG1heGltdW1SYW5nZUVu
ZCkpOworICAgICAgICBpZiAoZXh0cmFNZW1vcnlDb3N0KCkgKyBuZXdEYXRhU2l6ZSA8IG1heGlt
dW1CdWZmZXJTaXplKSB7CisgICAgICAgICAgICBtX2J1ZmZlckZ1bGwgPSBmYWxzZTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgcmFuZ2VTdGFydCArPSB0aGlydHlT
ZWNvbmRzOworICAgICAgICByYW5nZUVuZCArPSB0aGlydHlTZWNvbmRzOworICAgIH0KKworICAg
IGlmICghbV9idWZmZXJGdWxsKSB7CisgICAgICAgIExPRyhNZWRpYVNvdXJjZSwgIlNvdXJjZUJ1
ZmZlcjo6ZXZpY3RDb2RlZEZyYW1lcyglcCkgLSBldmljdGVkICV6dSBieXRlcyIsIHRoaXMsIGlu
aXRpYWxCdWZmZXJlZFNpemUgLSBleHRyYU1lbW9yeUNvc3QoKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICAvLyBJZiB0aGVyZSBzdGlsbCBpc24ndCBlbm91Z2ggZnJlZSBzcGFjZSBh
bmQgdGhlcmUgYnVmZmVycyBpbiB0aW1lIHJhbmdlcyBhZnRlciB0aGUgY3VycmVudCByYW5nZSAo
aWUuIHRoZXJlIGlzIGEgZ2FwIGFmdGVyCisgICAgLy8gdGhlIGN1cnJlbnQgYnVmZmVyZWQgcmFu
Z2UpLCBkZWxldGUgMzAgc2Vjb25kcyBhdCBhIHRpbWUgZnJvbSBkdXJhdGlvbiBiYWNrIHRvIHRo
ZSBjdXJyZW50IHRpbWUgcmFuZ2Ugb3IgMzAgc2Vjb25kcyBhZnRlcgorICAgIC8vIGN1cnJlblRp
bWUgd2hpY2hldmVyIHdlIGhpdCBmaXJzdC4KKyAgICBhdXRvIGJ1ZmZlcmVkID0gbV9idWZmZXJl
ZC0+cmFuZ2VzKCk7CisgICAgc2l6ZV90IGN1cnJlbnRUaW1lUmFuZ2UgPSBidWZmZXJlZC5maW5k
KGN1cnJlbnRUaW1lKTsKKyAgICBpZiAoY3VycmVudFRpbWVSYW5nZSA9PSBub3RGb3VuZCB8fCBj
dXJyZW50VGltZVJhbmdlID09IGJ1ZmZlcmVkLmxlbmd0aCgpIC0gMSkgeworICAgICAgICBMT0co
TWVkaWFTb3VyY2UsICJTb3VyY2VCdWZmZXI6OmV2aWN0Q29kZWRGcmFtZXMoJXApIC0gZXZpY3Rl
ZCAlenUgYnl0ZXMgYnV0IEZBSUxFRCB0byBmcmVlIGVub3VnaCIsIHRoaXMsIGluaXRpYWxCdWZm
ZXJlZFNpemUgLSBleHRyYU1lbW9yeUNvc3QoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBNZWRpYVRpbWUgbWluaW11bVJhbmdlU3RhcnQgPSBjdXJyZW50VGltZSArIHRoaXJ0eVNl
Y29uZHM7CisKKyAgICByYW5nZUVuZCA9IE1lZGlhVGltZTo6Y3JlYXRlV2l0aERvdWJsZShtX3Nv
dXJjZS0+ZHVyYXRpb24oKSk7CisgICAgcmFuZ2VTdGFydCA9IHJhbmdlRW5kIC0gdGhpcnR5U2Vj
b25kczsKKyAgICB3aGlsZSAocmFuZ2VTdGFydCA+IG1pbmltdW1SYW5nZVN0YXJ0KSB7CisKKyAg
ICAgICAgLy8gRG8gbm90IGV2aWN0IGRhdGEgZnJvbSB0aGUgdGltZSByYW5nZSB0aGF0IGNvbnRh
aW5zIGN1cnJlbnRUaW1lLgorICAgICAgICBzaXplX3Qgc3RhcnRUaW1lUmFuZ2UgPSBidWZmZXJl
ZC5maW5kKHJhbmdlU3RhcnQpOworICAgICAgICBpZiAoc3RhcnRUaW1lUmFuZ2UgPT0gY3VycmVu
dFRpbWVSYW5nZSkgeworICAgICAgICAgICAgc2l6ZV90IGVuZFRpbWVSYW5nZSA9IGJ1ZmZlcmVk
LmZpbmQocmFuZ2VFbmQpOworICAgICAgICAgICAgaWYgKGVuZFRpbWVSYW5nZSA9PSBjdXJyZW50
VGltZVJhbmdlKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICByYW5nZUVu
ZCA9IGJ1ZmZlcmVkLnN0YXJ0KGVuZFRpbWVSYW5nZSk7CisgICAgICAgIH0KKworICAgICAgICAv
LyA0LiBGb3IgZWFjaCByYW5nZSBpbiByZW1vdmFsIHJhbmdlcywgcnVuIHRoZSBjb2RlZCBmcmFt
ZSByZW1vdmFsIGFsZ29yaXRobSB3aXRoIHN0YXJ0IGFuZAorICAgICAgICAvLyBlbmQgZXF1YWwg
dG8gdGhlIHJlbW92YWwgcmFuZ2Ugc3RhcnQgYW5kIGVuZCB0aW1lc3RhbXAgcmVzcGVjdGl2ZWx5
LgorICAgICAgICByZW1vdmVDb2RlZEZyYW1lcyhzdGQ6Om1heChtaW5pbXVtUmFuZ2VTdGFydCwg
cmFuZ2VTdGFydCksIHJhbmdlRW5kKTsKKyAgICAgICAgaWYgKGV4dHJhTWVtb3J5Q29zdCgpICsg
bmV3RGF0YVNpemUgPCBtYXhpbXVtQnVmZmVyU2l6ZSkgeworICAgICAgICAgICAgbV9idWZmZXJG
dWxsID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHJh
bmdlU3RhcnQgLT0gdGhpcnR5U2Vjb25kczsKKyAgICAgICAgcmFuZ2VFbmQgLT0gdGhpcnR5U2Vj
b25kczsKKyAgICB9CisKKyAgICBMT0coTWVkaWFTb3VyY2UsICJTb3VyY2VCdWZmZXI6OmV2aWN0
Q29kZWRGcmFtZXMoJXApIC0gZXZpY3RlZCAlenUgYnl0ZXMlcyIsIHRoaXMsIGluaXRpYWxCdWZm
ZXJlZFNpemUgLSBleHRyYU1lbW9yeUNvc3QoKSwgbV9idWZmZXJGdWxsID8gIiIgOiAiIGJ1dCBG
QUlMRUQgdG8gZnJlZSBlbm91Z2giKTsKK30KKworc2l6ZV90IFNvdXJjZUJ1ZmZlcjo6bWF4aW11
bUJ1ZmZlclNpemUoKSBjb25zdAoreworICAgIGlmIChpc1JlbW92ZWQoKSkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBlbGVtZW50ID0gbV9zb3VyY2UtPm1lZGlh
RWxlbWVudCgpOworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBy
ZXR1cm4gZWxlbWVudC0+bWF4aW11bVNvdXJjZUJ1ZmZlclNpemUoKnRoaXMpOworfQorCiBjb25z
dCBBdG9taWNTdHJpbmcmIFNvdXJjZUJ1ZmZlcjo6ZGVjb2RlRXJyb3IoKQogewogICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxBdG9taWNTdHJpbmc+IGRlY29kZSgiZGVjb2RlIiwgQXRvbWljU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CkBAIC0xMTk4LDE5ICsxMzcwLDE3IEBAIHZvaWQg
U291cmNlQnVmZmVyOjpzb3VyY2VCdWZmZXJQcml2YXRlRGkKICAgICAgICAgICAgIGF1dG8gbmV4
dFN5bmNJdGVyID0gdHJhY2tCdWZmZXIuc2FtcGxlcy5kZWNvZGVPcmRlcigpLmZpbmRTeW5jU2Ft
cGxlQWZ0ZXJEZWNvZGVJdGVyYXRvcihsYXN0RGVjb2RlSXRlcik7CiAgICAgICAgICAgICBkZXBl
bmRlbnRTYW1wbGVzLmluc2VydChmaXJzdERlY29kZUl0ZXIsIG5leHRTeW5jSXRlcik7CiAKLSAg
ICAgICAgICAgIFJlZlB0cjxUaW1lUmFuZ2VzPiBlcmFzZWRSYW5nZXMgPSByZW1vdmVTYW1wbGVz
RnJvbVRyYWNrQnVmZmVyKGRlcGVuZGVudFNhbXBsZXMsIHRyYWNrQnVmZmVyKTsKLSNpZiAhTE9H
X0RJU0FCTEVECi0gICAgICAgICAgICBmb3IgKGF1dG8mIHNhbXBsZVBhaXIgOiBkZXBlbmRlbnRT
YW1wbGVzKQotICAgICAgICAgICAgICAgIExPRyhNZWRpYVNvdXJjZSwgIlNvdXJjZUJ1ZmZlcjo6
c291cmNlQnVmZmVyUHJpdmF0ZURpZFJlY2VpdmVTYW1wbGUoJXApIC0gcmVtb3Zpbmcgc2FtcGxl
KCVzKSIsIHRoaXMsIHRvU3RyaW5nKCpzYW1wbGVQYWlyLnNlY29uZCkudXRmOCgpLmRhdGEoKSk7
Ci0jZW5kaWYKKyAgICAgICAgICAgIFJlZlB0cjxUaW1lUmFuZ2VzPiBlcmFzZWRSYW5nZXMgPSBy
ZW1vdmVTYW1wbGVzRnJvbVRyYWNrQnVmZmVyKGRlcGVuZGVudFNhbXBsZXMsIHRyYWNrQnVmZmVy
LCB0aGlzLCAic291cmNlQnVmZmVyUHJpdmF0ZURpZFJlY2VpdmVTYW1wbGUiKTsKIAogICAgICAg
ICAgICAgLy8gT25seSBmb3JjZSB0aGUgVHJhY2tCdWZmZXIgdG8gcmUtZW5xdWV1ZSBpZiB0aGUg
cmVtb3ZlZCByYW5nZXMgb3ZlcmxhcCB3aXRoIGVucXVldWVkIGFuZCBwb3NzaWJseQogICAgICAg
ICAgICAgLy8gbm90IHlldCBkaXNwbGF5ZWQgc2FtcGxlcy4KICAgICAgICAgICAgIE1lZGlhVGlt
ZSBjdXJyZW50TWVkaWFUaW1lID0gTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKG1fc291cmNl
LT5jdXJyZW50VGltZSgpKTsKLSAgICAgICAgICAgIFBsYXRmb3JtVGltZVJhbmdlcyBwb3NzaWJs
eUVucXVldWVkUmFuZ2VzKGN1cnJlbnRNZWRpYVRpbWUsIHRyYWNrQnVmZmVyLmxhc3RFbnF1ZXVl
ZFByZXNlbnRhdGlvblRpbWUpOwotICAgICAgICAgICAgcG9zc2libHlFbnF1ZXVlZFJhbmdlcy5p
bnRlcnNlY3RXaXRoKGVyYXNlZFJhbmdlcy0+cmFuZ2VzKCkpOwotICAgICAgICAgICAgaWYgKHBv
c3NpYmx5RW5xdWV1ZWRSYW5nZXMubGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgdHJhY2tCdWZm
ZXIubmVlZHNSZWVucXVldWVpbmcgPSB0cnVlOworICAgICAgICAgICAgaWYgKGN1cnJlbnRNZWRp
YVRpbWUgPCB0cmFja0J1ZmZlci5sYXN0RW5xdWV1ZWRQcmVzZW50YXRpb25UaW1lKSB7CisgICAg
ICAgICAgICAgICAgUGxhdGZvcm1UaW1lUmFuZ2VzIHBvc3NpYmx5RW5xdWV1ZWRSYW5nZXMoY3Vy
cmVudE1lZGlhVGltZSwgdHJhY2tCdWZmZXIubGFzdEVucXVldWVkUHJlc2VudGF0aW9uVGltZSk7
CisgICAgICAgICAgICAgICAgcG9zc2libHlFbnF1ZXVlZFJhbmdlcy5pbnRlcnNlY3RXaXRoKGVy
YXNlZFJhbmdlcy0+cmFuZ2VzKCkpOworICAgICAgICAgICAgICAgIGlmIChwb3NzaWJseUVucXVl
dWVkUmFuZ2VzLmxlbmd0aCgpKQorICAgICAgICAgICAgICAgICAgICB0cmFja0J1ZmZlci5uZWVk
c1JlZW5xdWV1ZWluZyA9IHRydWU7CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGVyYXNl
ZFJhbmdlcy0+aW52ZXJ0KCk7CiAgICAgICAgICAgICBtX2J1ZmZlcmVkLT5pbnRlcnNlY3RXaXRo
KCplcmFzZWRSYW5nZXMuZ2V0KCkpOwpAQCAtMTI2MiwxNiArMTQzMiwyNiBAQCB2b2lkIFNvdXJj
ZUJ1ZmZlcjo6c291cmNlQnVmZmVyUHJpdmF0ZURpCiAgICAgICAgIG1fc291cmNlLT5zZXREdXJh
dGlvbkludGVybmFsKGhpZ2hlc3RQcmVzZW50YXRpb25FbmRUaW1lc3RhbXAoKS50b0RvdWJsZSgp
KTsKIH0KIAotYm9vbCBTb3VyY2VCdWZmZXI6OnNvdXJjZUJ1ZmZlclByaXZhdGVIYXNBdWRpbyhj
b25zdCBTb3VyY2VCdWZmZXJQcml2YXRlKikgY29uc3QKK2Jvb2wgU291cmNlQnVmZmVyOjpoYXNB
dWRpbygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fYXVkaW9UcmFja3MgJiYgbV9hdWRpb1RyYWNr
cy0+bGVuZ3RoKCk7CiB9CiAKLWJvb2wgU291cmNlQnVmZmVyOjpzb3VyY2VCdWZmZXJQcml2YXRl
SGFzVmlkZW8oY29uc3QgU291cmNlQnVmZmVyUHJpdmF0ZSopIGNvbnN0Citib29sIFNvdXJjZUJ1
ZmZlcjo6aGFzVmlkZW8oKSBjb25zdAogewogICAgIHJldHVybiBtX3ZpZGVvVHJhY2tzICYmIG1f
dmlkZW9UcmFja3MtPmxlbmd0aCgpOwogfQogCitib29sIFNvdXJjZUJ1ZmZlcjo6c291cmNlQnVm
ZmVyUHJpdmF0ZUhhc0F1ZGlvKGNvbnN0IFNvdXJjZUJ1ZmZlclByaXZhdGUqKSBjb25zdAorewor
ICAgIHJldHVybiBoYXNBdWRpbygpOworfQorCitib29sIFNvdXJjZUJ1ZmZlcjo6c291cmNlQnVm
ZmVyUHJpdmF0ZUhhc1ZpZGVvKGNvbnN0IFNvdXJjZUJ1ZmZlclByaXZhdGUqKSBjb25zdAorewor
ICAgIHJldHVybiBoYXNWaWRlbygpOworfQorCiB2b2lkIFNvdXJjZUJ1ZmZlcjo6dmlkZW9UcmFj
a1NlbGVjdGVkQ2hhbmdlZChWaWRlb1RyYWNrKiB0cmFjaykKIHsKICAgICAvLyAyLjQuNSBDaGFu
Z2VzIHRvIHNlbGVjdGVkL2VuYWJsZWQgdHJhY2sgc3RhdGUKQEAgLTE1MTUsNiArMTY5NSwxMCBA
QCBib29sIFNvdXJjZUJ1ZmZlcjo6aGFzQ3VycmVudFRpbWUoKSBjb25zCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIE1lZGlhVGltZSBjdXJyZW50VGltZSA9IE1lZGlhVGltZTo6Y3JlYXRl
V2l0aERvdWJsZShtX3NvdXJjZS0+Y3VycmVudFRpbWUoKSk7CisgICAgTWVkaWFUaW1lIGR1cmF0
aW9uID0gTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKG1fc291cmNlLT5kdXJhdGlvbigpKTsK
KyAgICBpZiAoY3VycmVudFRpbWUgPj0gZHVyYXRpb24pCisgICAgICAgIHJldHVybiB0cnVlOwor
CiAgICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtVGltZVJhbmdlcz4gcmFuZ2VzID0gYnVmZmVy
ZWRBY2NvdW50aW5nRm9yRW5kT2ZTdHJlYW0oKTsKICAgICByZXR1cm4gYWJzKHJhbmdlcy0+bmVh
cmVzdChjdXJyZW50VGltZSkgLSBjdXJyZW50VGltZSkgPD0gY3VycmVudFRpbWVGdWRnZUZhY3Rv
cigpOwogfQpAQCAtMTUyOSw2ICsxNzEzLDEwIEBAIGJvb2wgU291cmNlQnVmZmVyOjpoYXNGdXR1
cmVUaW1lKCkgY29uc3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgTWVkaWFUaW1lIGN1
cnJlbnRUaW1lID0gTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKG1fc291cmNlLT5jdXJyZW50
VGltZSgpKTsKKyAgICBNZWRpYVRpbWUgZHVyYXRpb24gPSBNZWRpYVRpbWU6OmNyZWF0ZVdpdGhE
b3VibGUobV9zb3VyY2UtPmR1cmF0aW9uKCkpOworICAgIGlmIChjdXJyZW50VGltZSA+PSBkdXJh
dGlvbikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKICAgICBNZWRpYVRpbWUgbmVhcmVzdCA9IHJh
bmdlcy0+bmVhcmVzdChjdXJyZW50VGltZSk7CiAgICAgaWYgKGFicyhuZWFyZXN0IC0gY3VycmVu
dFRpbWUpID4gY3VycmVudFRpbWVGdWRnZUZhY3RvcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC0xNTM4LDcgKzE3MjYsNiBAQCBib29sIFNvdXJjZUJ1ZmZlcjo6aGFzRnV0dXJlVGltZSgp
IGNvbnN0CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIE1lZGlhVGltZSBsb2NhbEVuZCA9
IHJhbmdlcy0+ZW5kKGZvdW5kKTsKLSAgICBNZWRpYVRpbWUgZHVyYXRpb24gPSBNZWRpYVRpbWU6
OmNyZWF0ZVdpdGhEb3VibGUobV9zb3VyY2UtPmR1cmF0aW9uKCkpOwogICAgIGlmIChsb2NhbEVu
ZCA9PSBkdXJhdGlvbikKICAgICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTE1NzIsMTIgKzE3NTks
MTggQEAgYm9vbCBTb3VyY2VCdWZmZXI6OmNhblBsYXlUaHJvdWdoKCkKICAgICByZXR1cm4gdW5i
dWZmZXJlZFRpbWUudG9Eb3VibGUoKSAvIG1fYXZlcmFnZUJ1ZmZlclJhdGUgPCB0aW1lUmVtYWlu
aW5nLnRvRG91YmxlKCk7CiB9CiAKLXZvaWQgU291cmNlQnVmZmVyOjpyZXBvcnRFeHRyYU1lbW9y
eUNvc3QoKQorc2l6ZV90IFNvdXJjZUJ1ZmZlcjo6ZXh0cmFNZW1vcnlDb3N0KCkgY29uc3QKIHsK
ICAgICBzaXplX3QgZXh0cmFNZW1vcnlDb3N0ID0gbV9wZW5kaW5nQXBwZW5kRGF0YS5jYXBhY2l0
eSgpOwogICAgIGZvciAoYXV0byYgdHJhY2tCdWZmZXIgOiBtX3RyYWNrQnVmZmVyTWFwLnZhbHVl
cygpKQogICAgICAgICBleHRyYU1lbW9yeUNvc3QgKz0gdHJhY2tCdWZmZXIuc2FtcGxlcy5zaXpl
SW5CeXRlcygpOwogCisgICAgcmV0dXJuIGV4dHJhTWVtb3J5Q29zdDsKK30KKwordm9pZCBTb3Vy
Y2VCdWZmZXI6OnJlcG9ydEV4dHJhTWVtb3J5Q29zdCgpCit7CisgICAgc2l6ZV90IGV4dHJhTWVt
b3J5Q29zdCA9IHRoaXMtPmV4dHJhTWVtb3J5Q29zdCgpOwogICAgIGlmIChleHRyYU1lbW9yeUNv
c3QgPCBtX3JlcG9ydGVkRXh0cmFNZW1vcnlDb3N0KQogICAgICAgICByZXR1cm47CiAKQEAgLTE2
MDMsNiArMTc5NiwxMiBAQCBWZWN0b3I8U3RyaW5nPiBTb3VyY2VCdWZmZXI6OmJ1ZmZlcmVkU2Ft
CiAgICAgcmV0dXJuIHNhbXBsZURlc2NyaXB0aW9uczsKIH0KIAorRG9jdW1lbnQmIFNvdXJjZUJ1
ZmZlcjo6ZG9jdW1lbnQoKSBjb25zdAoreworICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCktPmlzRG9jdW1lbnQoKSk7CisgICAgcmV0dXJuICpzdGF0aWNfY2FzdDxEb2N1bWVudCo+
KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJj
ZUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3Vy
Y2UvU291cmNlQnVmZmVyLmgJKHJldmlzaW9uIDE3MjY1MykKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC05MCw2
ICs5MSw5IEBAIHB1YmxpYzoKICAgICBib29sIGhhc0Z1dHVyZVRpbWUoKSBjb25zdDsKICAgICBi
b29sIGNhblBsYXlUaHJvdWdoKCk7CiAKKyAgICBib29sIGhhc1ZpZGVvKCkgY29uc3Q7CisgICAg
Ym9vbCBoYXNBdWRpbygpIGNvbnN0OworCiAgICAgYm9vbCBhY3RpdmUoKSBjb25zdCB7IHJldHVy
biBtX2FjdGl2ZTsgfQogCiAgICAgLy8gQWN0aXZlRE9NT2JqZWN0IGludGVyZmFjZQpAQCAtMTA1
LDYgKzEwOSw4IEBAIHB1YmxpYzoKIAogICAgIHN0cnVjdCBUcmFja0J1ZmZlcjsKIAorICAgIERv
Y3VtZW50JiBkb2N1bWVudCgpIGNvbnN0OworCiBwcm90ZWN0ZWQ6CiAgICAgLy8gRXZlbnRUYXJn
ZXQgaW50ZXJmYWNlCiAgICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgb3ZlcnJpZGUg
eyByZWYoKTsgfQpAQCAtMTU0LDEyICsxNjAsMTUgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlZW5x
dWV1ZU1lZGlhRm9yVGltZShUcmFja0J1ZmZlciYsIEF0b21pY1N0cmluZyB0cmFja0lELCBjb25z
dCBNZWRpYVRpbWUmKTsKICAgICB2b2lkIHByb3ZpZGVNZWRpYURhdGEoVHJhY2tCdWZmZXImLCBB
dG9taWNTdHJpbmcgdHJhY2tJRCk7CiAgICAgdm9pZCBkaWREcm9wU2FtcGxlKCk7CisgICAgdm9p
ZCBldmljdENvZGVkRnJhbWVzKHNpemVfdCBuZXdEYXRhU2l6ZSk7CisgICAgc2l6ZV90IG1heGlt
dW1CdWZmZXJTaXplKCkgY29uc3Q7CiAKICAgICB2b2lkIG1vbml0b3JCdWZmZXJpbmdSYXRlKCk7
CiAKICAgICB2b2lkIHJlbW92ZVRpbWVyRmlyZWQoVGltZXI8U291cmNlQnVmZmVyPiopOwogICAg
IHZvaWQgcmVtb3ZlQ29kZWRGcmFtZXMoY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVk
aWFUaW1lJiBlbmQpOwogCisgICAgc2l6ZV90IGV4dHJhTWVtb3J5Q29zdCgpIGNvbnN0OwogICAg
IHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlDb3N0KCk7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxh
dGZvcm1UaW1lUmFuZ2VzPiBidWZmZXJlZEFjY291bnRpbmdGb3JFbmRPZlN0cmVhbSgpIGNvbnN0
OwpAQCAtMTcyLDggKzE4MSw2IEBAIHByaXZhdGU6CiAgICAgTWVkaWFTb3VyY2UqIG1fc291cmNl
OwogICAgIEdlbmVyaWNFdmVudFF1ZXVlIG1fYXN5bmNFdmVudFF1ZXVlOwogCi0gICAgYm9vbCBt
X3VwZGF0aW5nOwotCiAgICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IG1fcGVuZGluZ0FwcGVuZERh
dGE7CiAgICAgVGltZXI8U291cmNlQnVmZmVyPiBtX2FwcGVuZEJ1ZmZlclRpbWVyOwogCkBAIC0x
ODksOSArMTk2LDcgQEAgcHJpdmF0ZToKICAgICBNZWRpYVRpbWUgbV9oaWdoZXN0UHJlc2VudGF0
aW9uRW5kVGltZXN0YW1wOwogCiAgICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFRyYWNrQnVmZmVy
PiBtX3RyYWNrQnVmZmVyTWFwOwotICAgIGJvb2wgbV9yZWNlaXZlZEZpcnN0SW5pdGlhbGl6YXRp
b25TZWdtZW50OwogICAgIFJlZlB0cjxUaW1lUmFuZ2VzPiBtX2J1ZmZlcmVkOwotICAgIGJvb2wg
bV9hY3RpdmU7CiAKICAgICBlbnVtIEFwcGVuZFN0YXRlVHlwZSB7IFdhaXRpbmdGb3JTZWdtZW50
LCBQYXJzaW5nSW5pdFNlZ21lbnQsIFBhcnNpbmdNZWRpYVNlZ21lbnQgfTsKICAgICBBcHBlbmRT
dGF0ZVR5cGUgbV9hcHBlbmRTdGF0ZTsKQEAgLTIwNSw2ICsyMTAsMTEgQEAgcHJpdmF0ZToKICAg
ICBNZWRpYVRpbWUgbV9wZW5kaW5nUmVtb3ZlU3RhcnQ7CiAgICAgTWVkaWFUaW1lIG1fcGVuZGlu
Z1JlbW92ZUVuZDsKICAgICBUaW1lcjxTb3VyY2VCdWZmZXI+IG1fcmVtb3ZlVGltZXI7CisKKyAg
ICBib29sIG1fdXBkYXRpbmc7CisgICAgYm9vbCBtX3JlY2VpdmVkRmlyc3RJbml0aWFsaXphdGlv
blNlZ21lbnQ7CisgICAgYm9vbCBtX2FjdGl2ZTsKKyAgICBib29sIG1fYnVmZmVyRnVsbDsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TE1lZGlhRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
TWVkaWFFbGVtZW50LmNwcAkocmV2aXNpb24gMTcyNjUzKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MTWVkaWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUxOCw3ICsyNTE4LDYg
QEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpyZWZyZXNoQ2FjaGVkVGltZQogICAgICAgICByZXR1
cm47IAogICAgIH0gCiAKLSAgICBMT0coTWVkaWEsICJIVE1MTWVkaWFFbGVtZW50OjpyZWZyZXNo
Q2FjaGVkVGltZSAtIGNhY2hpbmcgdGltZSAlZiIsIG1fY2FjaGVkVGltZSk7IAogICAgIG1fY2xv
Y2tUaW1lQXRMYXN0Q2FjaGVkVGltZVVwZGF0ZSA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGlt
ZSgpOwogfQogCkBAIC01OTcyLDYgKzU5NzEsMTMgQEAgTWVkaWFTZXNzaW9uOjpNZWRpYVR5cGUg
SFRNTE1lZGlhRWxlbWVudAogICAgIHJldHVybiBNZWRpYVNlc3Npb246OkF1ZGlvOwogfQogCisj
aWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKK3NpemVfdCBIVE1MTWVkaWFFbGVtZW50OjptYXhpbXVt
U291cmNlQnVmZmVyU2l6ZShjb25zdCBTb3VyY2VCdWZmZXImIGJ1ZmZlcikgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9tZWRpYVNlc3Npb24tPm1heGltdW1NZWRpYVNvdXJjZUJ1ZmZlclNpemUoYnVm
ZmVyKTsKK30KKyNlbmRpZgorCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnBhdXNlUGxheWJhY2so
KQogewogICAgIExPRyhNZWRpYSwgIkhUTUxNZWRpYUVsZW1lbnQ6OnBhdXNlUGxheWJhY2sgLSBw
YXVzZWQgPSAlcyIsIGJvb2xTdHJpbmcocGF1c2VkKCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE1lZGlhRWxlbWVudC5oCShyZXZpc2lvbiAxNzI2NTMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsNiArNzIsNyBA
QCBjbGFzcyBNZWRpYUtleXM7CiAjZW5kaWYKICNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQogY2xh
c3MgTWVkaWFTb3VyY2U7CitjbGFzcyBTb3VyY2VCdWZmZXI7CiBjbGFzcyBWaWRlb1BsYXliYWNr
UXVhbGl0eTsKICNlbmRpZgogCkBAIC0yMDgsNiArMjA5LDcgQEAgcHVibGljOgogLy8gIE1lZGlh
IFNvdXJjZS4KICAgICB2b2lkIGNsb3NlTWVkaWFTb3VyY2UoKTsKICAgICB2b2lkIGluY3JlbWVu
dERyb3BwZWRGcmFtZUNvdW50KCkgeyArK21fZHJvcHBlZFZpZGVvRnJhbWVzOyB9CisgICAgc2l6
ZV90IG1heGltdW1Tb3VyY2VCdWZmZXJTaXplKGNvbnN0IFNvdXJjZUJ1ZmZlciYpIGNvbnN0Owog
I2VuZGlmCiAKICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MTWVkaWFTZXNzaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxNZWRpYVNlc3Npb24uY3BwCShyZXZpc2lvbiAxNzI2NTMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxNZWRpYVNlc3Npb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2
ICszOCw3IEBACiAjaW5jbHVkZSAiTWVkaWFTZXNzaW9uTWFuYWdlci5oIgogI2luY2x1ZGUgIlBh
Z2UuaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiU291cmNlQnVm
ZmVyLmgiCiAKICNpZiBQTEFURk9STShJT1MpCiAjaW5jbHVkZSAiQXVkaW9TZXNzaW9uLmgiCkBA
IC0zMDEsNiArMzAyLDM4IEBAIHZvaWQgSFRNTE1lZGlhU2Vzc2lvbjo6YXBwbHlNZWRpYVBsYXll
clIKICAgICAKIH0KIAorI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCitjb25zdCB1bnNpZ25lZCBm
aXZlTWludXRlc09mMTA4MFBWaWRlbyA9IDI5MCAqIDEwMjQgKiAxMDI0OyAvLyAyOTAgTUIgaXMg
YXBwcm94aW1hdGVseSA1IG1pbnV0ZXMgb2YgOE1icHMgKDEwODBwKSBjb250ZW50LgorY29uc3Qg
dW5zaWduZWQgZml2ZU1pbnV0ZXNTdGVyZW9BdWRpbyA9IDE0ICogMTAyNCAqIDEwMjQ7IC8vIDE0
IE1CIGlzIGFwcHJveGltYXRlbHkgNSBtaW51dGVzIG9mIDM4NGticHMgY29udGVudC4KKworc2l6
ZV90IEhUTUxNZWRpYVNlc3Npb246Om1heGltdW1NZWRpYVNvdXJjZUJ1ZmZlclNpemUoY29uc3Qg
U291cmNlQnVmZmVyJiBidWZmZXIpIGNvbnN0Cit7CisgICAgLy8gQSBnb29kIHF1YWxpdHkgMTA4
MHAgdmlkZW8gdXNlcyA4LDAwMCBrYnBzIGFuZCBzdGVyZW8gYXVkaW8gdXNlcyAzODQga2Jwcywg
c28gYXNzdW1lIDk1JSBmb3IgdmlkZW8gYW5kIDUlIGZvciBhdWRpby4KKyAgICBjb25zdCBmbG9h
dCBidWZmZXJCdWRnZXRQZXJjZW50YWdlRm9yVmlkZW8gPSAuOTU7CisgICAgY29uc3QgZmxvYXQg
YnVmZmVyQnVkZ2V0UGVyY2VudGFnZUZvckF1ZGlvID0gLjA1OworCisgICAgc2l6ZV90IG1heGlt
dW07CisgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gYnVmZmVyLmRvY3VtZW50KCkuc2V0dGluZ3Mo
KTsKKyAgICBpZiAoc2V0dGluZ3MpCisgICAgICAgIG1heGltdW0gPSBzZXR0aW5ncy0+bWF4aW11
bVNvdXJjZUJ1ZmZlclNpemUoKTsKKyAgICBlbHNlCisgICAgICAgIG1heGltdW0gPSBmaXZlTWlu
dXRlc09mMTA4MFBWaWRlbyArIGZpdmVNaW51dGVzU3RlcmVvQXVkaW87CisKKyAgICAvLyBBbGxv
dyBhIFNvdXJjZUJ1ZmZlciB0byBidWZmZXIgYXMgdGhvdWdoIGl0IGlzIGF1ZGlvLW9ubHkgZXZl
biBpZiBpdCBkb2Vzbid0IGhhdmUgYW55IGFjdGl2ZSB0cmFja3MgKHlldCkuCisgICAgc2l6ZV90
IGJ1ZmZlclNpemUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KG1heGltdW0gKiBidWZmZXJCdWRnZXRQ
ZXJjZW50YWdlRm9yQXVkaW8pOworICAgIGlmIChidWZmZXIuaGFzVmlkZW8oKSkKKyAgICAgICAg
YnVmZmVyU2l6ZSArPSBzdGF0aWNfY2FzdDxzaXplX3Q+KG1heGltdW0gKiBidWZmZXJCdWRnZXRQ
ZXJjZW50YWdlRm9yVmlkZW8pOworCisgICAgLy8gRklYTUU6IHdlIG1pZ2h0IHdhbnQgdG8gbW9k
aWZ5IHRoaXMgYWxnb3JpdGhtIHRvOgorICAgIC8vIC0gZGVjcmVhc2UgdGhlIG1heGltdW0gc2l6
ZSBmb3IgYmFja2dyb3VuZCB0YWJzCisgICAgLy8gLSBkZWNyZWFzZSB0aGUgbWF4aW11bSBzaXpl
IGFsbG93ZWQgZm9yIGluYWN0aXZlIGVsZW1lbnRzIHdoZW4gYSBwcm9jZXNzIGhhcyBtb3JlIHRo
YW4gb25lCisgICAgLy8gICBlbGVtZW50LCBlZy4gc28gYSBwYWdlIHdpdGggbWFueSBlbGVtZW50
cyB3aGljaCBhcmUgcGxheWVkIG9uZSBhdCBhIHRpbWUgZG9lc24ndCBrZWVwCisgICAgLy8gICBl
dmVyeXRoaW5nIGJ1ZmZlcmVkIGFmdGVyIGFuIGVsZW1lbnQgaGFzIGZpbmlzaGVkIHBsYXlpbmcu
CisKKyAgICByZXR1cm4gYnVmZmVyU2l6ZTsKK30KKyNlbmRpZgorCiB9CiAKICNlbmRpZiAvLyBF
TkFCTEUoVklERU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYVNlc3Npb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYVNlc3Npb24uaAko
cmV2aXNpb24gMTcyNjUzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFTZXNzaW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgSFRNTE1lZGlhRWxlbWVudDsKK2NsYXNzIFNvdXJjZUJ1ZmZlcjsKIAogY2xhc3Mg
SFRNTE1lZGlhU2Vzc2lvbiA6IHB1YmxpYyBNZWRpYVNlc3Npb24gewogcHVibGljOgpAQCAtODIs
NiArODMsMTAgQEAgcHVibGljOgogICAgIHZvaWQgYWRkQmVoYXZpb3JSZXN0cmljdGlvbihCZWhh
dmlvclJlc3RyaWN0aW9ucyk7CiAgICAgdm9pZCByZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKEJl
aGF2aW9yUmVzdHJpY3Rpb25zKTsKIAorI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCisgICAgc2l6
ZV90IG1heGltdW1NZWRpYVNvdXJjZUJ1ZmZlclNpemUoY29uc3QgU291cmNlQnVmZmVyJikgY29u
c3Q7CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBCZWhhdmlvclJlc3RyaWN0aW9ucyBtX3Jlc3Ry
aWN0aW9uczsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmluCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaW4JKHJldmlzaW9uIDE3MjY1
MykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaW4JKHdvcmtpbmcgY29weSkKQEAg
LTIzMCw0ICsyMzAsOCBAQCB1c2VJbWFnZURvY3VtZW50Rm9yU3ViZnJhbWVQREYgaW5pdGlhbD1m
CiAjIGFzIGEgbWVhbnMgdG8gcGFzcyBkYXRhIGZyb20gdGhlIHdlYi1wb3J0aW9uIG9mIHRoZWly
IGFwcCB0byB0aGUgbmF0aXZlIHBvcnRpb24uCiBhbGxvd05hdmlnYXRpb25Ub0ludmFsaWRVUkwg
aW5pdGlhbD1mYWxzZQogCisjIEFsbG93IFNvdXJjZUJ1ZmZlcnMgdG8gc3RvcmUgdXAgdG8gMzA0
TUIgZWFjaCwgZW5vdWdoIGZvciBhcHByb3hpbWF0ZWx5IGZpdmUgbWludXRlcworIyBvZiAxMDgw
cCB2aWRlbyBhbmQgc3RlcmVvIGF1ZGlvLgorbWF4aW11bVNvdXJjZUJ1ZmZlclNpemUgdHlwZT1p
bnQsIGluaXRpYWw9MzE4NzY3MTA0LCBjb25kaXRpb25hbD1NRURJQV9TT1VSQ0UKKwogbG9uZ01v
dXNlUHJlc3NFbmFibGVkIGluaXRpYWw9ZmFsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1BsYXRmb3JtVGltZVJhbmdlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1UaW1lUmFuZ2VzLmNwcAkocmV2aXNp
b24gMTcyNjUzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1U
aW1lUmFuZ2VzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtVGltZVJhbmdlcy5oIgogCisjaW5jbHVkZSA8
d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8bWF0aC5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC0yNTIsMTEgKzI1MywxOSBAQCBNZWRpYVRpbWUgUGxhdGZvcm1UaW1lUmFuZ2VzOjpu
ZWFyZXN0KGNvCiBNZWRpYVRpbWUgUGxhdGZvcm1UaW1lUmFuZ2VzOjp0b3RhbER1cmF0aW9uKCkg
Y29uc3QKIHsKICAgICBNZWRpYVRpbWUgdG90YWwgPSBNZWRpYVRpbWU6Onplcm9UaW1lKCk7Ci0g
ICAgYm9vbCBpZ25vcmVJbnZhbGlkOwogCiAgICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IGxl
bmd0aCgpOyBuKyspCi0gICAgICAgIHRvdGFsICs9IGFicyhlbmQobiwgaWdub3JlSW52YWxpZCkg
LSBzdGFydChuLCBpZ25vcmVJbnZhbGlkKSk7CisgICAgICAgIHRvdGFsICs9IGFicyhlbmQobikg
LSBzdGFydChuKSk7CiAgICAgcmV0dXJuIHRvdGFsOwogfQogCit2b2lkIFBsYXRmb3JtVGltZVJh
bmdlczo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGlmICghbGVuZ3RoKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoKCk7
ICsraSkKKyAgICAgICAgb3V0LnByaW50KCJbIiwgc3RhcnQoaSksICIuLiIsIGVuZChpKSwgIl0g
Iik7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRm
b3JtVGltZVJhbmdlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1BsYXRmb3JtVGltZVJhbmdlcy5oCShyZXZpc2lvbiAxNzI2NTMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVRpbWVSYW5nZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMzIsNiArMzIsMTAgQEAKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAorbmFtZXNwYWNlIFdURiB7CisgICAgY2xhc3MgUHJpbnRT
dHJlYW07Cit9CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUGxhdGZvcm1UaW1lUmFu
Z2VzIHsKQEAgLTY5LDYgKzczLDggQEAgcHVibGljOgogCiAgICAgTWVkaWFUaW1lIHRvdGFsRHVy
YXRpb24oKSBjb25zdDsKIAorICAgIHZvaWQgZHVtcChXVEY6OlByaW50U3RyZWFtJikgY29uc3Q7
CisKIHByaXZhdGU6CiAgICAgUGxhdGZvcm1UaW1lUmFuZ2VzJiBjb3B5KGNvbnN0IFBsYXRmb3Jt
VGltZVJhbmdlcyYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9T
b3VyY2VCdWZmZXJQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU291cmNlQnVmZmVyUHJpdmF0ZS5oCShyZXZpc2lvbiAxNzI2NTMpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCkBAIC01NSw4ICs1Niw2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgTWVk
aWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgc2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSkgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBldmljdENvZGVkRnJhbWVzKCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBpc0Z1
bGwoKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgZmx1c2hBbmRFbnF1ZXVlTm9uRGlzcGxheWlu
Z1NhbXBsZXMoVmVjdG9yPFJlZlB0cjxNZWRpYVNhbXBsZT4+LCBBdG9taWNTdHJpbmcpIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCBlbnF1ZXVlU2FtcGxlKFBhc3NSZWZQdHI8TWVkaWFTYW1wbGU+LCBB
dG9taWNTdHJpbmcpIHsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9T
b3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5oCShyZXZpc2lvbiAxNzI2NTMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9Tb3VyY2VCdWZmZXJQ
cml2YXRlQVZGT2JqQy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExMiw4ICsxMTIsNiBAQCBwcml2YXRlOgog
ICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbU1lZGlhU291cmNlKCkgb3ZlcnJpZGU7CiAgICAg
dmlydHVhbCBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKCkgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OlJlYWR5U3Rh
dGUpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBldmljdENvZGVkRnJhbWVzKCkgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCBib29sIGlzRnVsbCgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9p
ZCBmbHVzaEFuZEVucXVldWVOb25EaXNwbGF5aW5nU2FtcGxlcyhWZWN0b3I8UmVmUHRyPE1lZGlh
U2FtcGxlPj4sIEF0b21pY1N0cmluZyB0cmFja0lEKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZv
aWQgZW5xdWV1ZVNhbXBsZShQYXNzUmVmUHRyPE1lZGlhU2FtcGxlPiwgQXRvbWljU3RyaW5nIHRy
YWNrSUQpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBpc1JlYWR5Rm9yTW9yZVNhbXBsZXMo
QXRvbWljU3RyaW5nIHRyYWNrSUQpIG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9i
akMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMubW0JKHJldmlzaW9uIDE3
MjY1MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL1NvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYzMiw3ICs2
MzIsNyBAQCBib29sIFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDOjpwcm9jZXNzCiAgICAgICAg
IENNRm9ybWF0RGVzY3JpcHRpb25SZWYgZm9ybWF0RGVzY3JpcHRpb24gPSBDTVNhbXBsZUJ1ZmZl
ckdldEZvcm1hdERlc2NyaXB0aW9uKHNhbXBsZUJ1ZmZlcik7CiAgICAgICAgIEZsb2F0U2l6ZSBm
b3JtYXRTaXplID0gRmxvYXRTaXplKENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkdldFByZXNlbnRh
dGlvbkRpbWVuc2lvbnMoZm9ybWF0RGVzY3JpcHRpb24sIHRydWUsIHRydWUpKTsKICAgICAgICAg
aWYgKGZvcm1hdFNpemUgIT0gbV9jYWNoZWRTaXplKSB7Ci0gICAgICAgICAgICBMT0coTWVkaWFT
b3VyY2UsICJTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6cHJvY2Vzc0NvZGVkRnJhbWUoJXAp
IC0gc2l6ZSBjaGFuZ2UgZGV0ZWN0ZWQ6IHt3aWR0aD0lbGYsIGhlaWdodD0lbGYiLCBmb3JtYXRT
aXplLndpZHRoKCksIGZvcm1hdFNpemUuaGVpZ2h0KCkpOworICAgICAgICAgICAgTE9HKE1lZGlh
U291cmNlLCAiU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OnByb2Nlc3NDb2RlZEZyYW1lKCVw
KSAtIHNpemUgY2hhbmdlIGRldGVjdGVkOiB7d2lkdGg9JWxmLCBoZWlnaHQ9JWxmfSIsIGZvcm1h
dFNpemUud2lkdGgoKSwgZm9ybWF0U2l6ZS5oZWlnaHQoKSk7CiAgICAgICAgICAgICBtX2NhY2hl
ZFNpemUgPSBmb3JtYXRTaXplOwogICAgICAgICAgICAgaWYgKG1fbWVkaWFTb3VyY2UpCiAgICAg
ICAgICAgICAgICAgbV9tZWRpYVNvdXJjZS0+cGxheWVyKCktPnNpemVDaGFuZ2VkKCk7CkBAIC03
NzksMTggKzc3OSw2IEBAIHZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OnNldFJlYWQK
ICAgICAgICAgbV9tZWRpYVNvdXJjZS0+cGxheWVyKCktPnNldFJlYWR5U3RhdGUocmVhZHlTdGF0
ZSk7CiB9CiAKLXZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM6OmV2aWN0Q29kZWRGcmFt
ZXMoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wgU291cmNlQnVmZmVyUHJp
dmF0ZUFWRk9iakM6OmlzRnVsbCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLQogYm9vbCBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzo6aGFzVmlk
ZW8oKSBjb25zdAogewogICAgIGlmICghbV9jbGllbnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tTb3VyY2VCdWZmZXJQcml2YXRlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tT
b3VyY2VCdWZmZXJQcml2YXRlLmNwcAkocmV2aXNpb24gMTcyNjUzKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrU291cmNlQnVmZmVyUHJpdmF0ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjEzLDE2ICsyMTMsNiBAQCB2b2lkIE1vY2tTb3VyY2VCdWZmZXJQcml2
YXRlOjpzZXRSZWFkeVN0CiAgICAgICAgIG1fbWVkaWFTb3VyY2UtPnBsYXllcigpLT5zZXRSZWFk
eVN0YXRlKHJlYWR5U3RhdGUpOwogfQogCi12b2lkIE1vY2tTb3VyY2VCdWZmZXJQcml2YXRlOjpl
dmljdENvZGVkRnJhbWVzKCkKLXsKLSAgICAvLyBOby1vcC4KLX0KLQotYm9vbCBNb2NrU291cmNl
QnVmZmVyUHJpdmF0ZTo6aXNGdWxsKCkKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIHZvaWQg
TW9ja1NvdXJjZUJ1ZmZlclByaXZhdGU6OnNldEFjdGl2ZShib29sIGlzQWN0aXZlKQogewogICAg
IGlmIChtX21lZGlhU291cmNlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9t
ZWRpYXNvdXJjZS9Nb2NrU291cmNlQnVmZmVyUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja1NvdXJjZUJ1ZmZlclByaXZh
dGUuaAkocmV2aXNpb24gMTcyNjUzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9t
ZWRpYXNvdXJjZS9Nb2NrU291cmNlQnVmZmVyUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY4LDgg
KzY4LDYgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21NZWRpYVNvdXJj
ZSgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlT
dGF0ZSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZXRSZWFkeVN0YXRlKE1l
ZGlhUGxheWVyOjpSZWFkeVN0YXRlKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZXZpY3RD
b2RlZEZyYW1lcygpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBpc0Z1bGwoKSBvdmVycmlk
ZTsKIAogICAgIHZpcnR1YWwgdm9pZCBmbHVzaEFuZEVucXVldWVOb25EaXNwbGF5aW5nU2FtcGxl
cyhWZWN0b3I8UmVmUHRyPE1lZGlhU2FtcGxlPj4sIEF0b21pY1N0cmluZykgb3ZlcnJpZGUgeyB9
CiAgICAgdmlydHVhbCB2b2lkIGVucXVldWVTYW1wbGUoUGFzc1JlZlB0cjxNZWRpYVNhbXBsZT4s
IEF0b21pY1N0cmluZykgb3ZlcnJpZGU7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>