<?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>174215</bug_id>
          
          <creation_ts>2017-07-06 12:55:19 -0700</creation_ts>
          <short_desc>Resource Load Statistics: Prune statistics in order of importance</short_desc>
          <delta_ts>2017-07-11 09:52:40 -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>WebKit2</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="John Wilander">wilander</reporter>
          <assigned_to name="John Wilander">wilander</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>dbates</cc>
    
    <cc>japhet</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wilander</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1326137</commentid>
    <comment_count>0</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-07-06 12:55:19 -0700</bug_when>
    <thetext>We should cap the size of stored statistics and prune the store in order of importance, less to more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1326138</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-07-06 12:55:49 -0700</bug_when>
    <thetext>&lt;rdar://problem/33164403&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1326152</commentid>
    <comment_count>2</comment_count>
      <attachid>314750</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-07-06 13:15:48 -0700</bug_when>
    <thetext>Created attachment 314750
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1326153</commentid>
    <comment_count>3</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-07-06 13:16:58 -0700</bug_when>
    <thetext>I know there are a couple of whitespace changes that shouldn&apos;t be there but I just can&apos;t get Xcode to not add them back in so I&apos;ll have to fix the files in some other editor before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1326155</commentid>
    <comment_count>4</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-07-06 13:17:26 -0700</bug_when>
    <thetext>Oh, patch doesn&apos;t seem to apply to trunk. Will merge.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1326227</commentid>
    <comment_count>5</comment_count>
      <attachid>314767</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-07-06 16:02:07 -0700</bug_when>
    <thetext>Created attachment 314767
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1326249</commentid>
    <comment_count>6</comment_count>
      <attachid>314776</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-07-06 16:31:20 -0700</bug_when>
    <thetext>Created attachment 314776
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1326285</commentid>
    <comment_count>7</comment_count>
      <attachid>314776</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-07-06 18:22:58 -0700</bug_when>
    <thetext>Comment on attachment 314776
Patch

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

&gt; Source/WebKit2/UIProcess/Storage/ResourceLoadStatisticsStore.cpp:47
&gt; +static size_t maxStatisticsEntries = 1000;

All those overridable statics are wrong and should be data members. There can be several ResourceLoadStatisticsStore per process at least in theory since there is one store per WebSiteDataStore.
I believe those should be data members.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1326286</commentid>
    <comment_count>8</comment_count>
      <attachid>314776</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-07-06 18:34:19 -0700</bug_when>
    <thetext>Comment on attachment 314776
Patch

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

&gt; Source/WebCore/loader/ResourceLoadStatistics.h:65
&gt; +    WallTime lastSeen { WallTime::fromRawSeconds(-1) };

Do we really need this magic -1 value here? Do we really need to distinguish default value from reset?

&gt; Source/WebKit2/UIProcess/Storage/ResourceLoadStatisticsStore.cpp:295
&gt; +void ResourceLoadStatisticsStore::setMaxStatisticsEntries(size_t entries)

entries is a bad name

&gt; Source/WebKit2/UIProcess/Storage/ResourceLoadStatisticsStore.cpp:300
&gt; +void ResourceLoadStatisticsStore::setPruneEntriesDownTo(size_t entries)

entries is a bad name

&gt; Source/WebKit2/UIProcess/Storage/ResourceLoadStatisticsStore.cpp:454
&gt; +    size_t numberOfEntriesLeftToPrune = m_resourceStatisticsMap.size() - pruneEntriesDownTo;

If this is 0, we&apos;re in trouble, based on your implementation of sortAndPrune()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1326293</commentid>
    <comment_count>9</comment_count>
      <attachid>314776</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-07-06 18:53:54 -0700</bug_when>
    <thetext>Comment on attachment 314776
Patch

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

&gt; Source/WebKit2/UIProcess/Storage/ResourceLoadStatisticsStore.cpp:435
&gt; +    std::sort(statisticsToPrune.begin(), statisticsToPrune.end(), [](const StatisticsLastSeen&amp; a, const StatisticsLastSeen&amp; b) {

If statisticsToPrune.size() &lt;= numberOfEntriesToPrune, then sorting is useless, right? We are going to remove ALL the entries in statisticsToPrune in this case, and it does not matter in which order they are removed.

&gt; Source/WebKit2/UIProcess/Storage/ResourceLoadStatisticsStore.cpp:448
&gt; +void ResourceLoadStatisticsStore::pruneStatisticsIfNeeded()

How often is this called?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1326303</commentid>
    <comment_count>10</comment_count>
      <attachid>314776</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-07-06 19:07:24 -0700</bug_when>
    <thetext>Comment on attachment 314776
Patch

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

&gt; Source/WebKit2/UIProcess/Storage/ResourceLoadStatisticsStore.cpp:441
&gt; +        if (!--numberOfEntriesToPrune)

This is bad if numberOfEntriesToPrune is 0.

&gt; Source/WebKit2/UIProcess/Storage/ResourceLoadStatisticsStore.cpp:456
&gt; +    Vector&lt;StatisticsLastSeen&gt; nonPrevalentResourcesWithoutUserInteraction;

Feels like this could be an array of Vectors, then the pruning code could be written as a loop. e.g. roughly 

Vector&lt;StatisticsLastSeen&gt; resourcesToPrunePerImportance[maxImportance + 1];
for (auto&amp; resourceStatistic : m_resourceStatisticsMap.values())
    resourcesToPruneInPriority[computeImportance(resourceStatistic)].append({ resourceStatistic.highLevelDomain, resourceStatistic.lastSeen });

unsigned importance = 0;
while (numberOfEntriesLeftToPrune) {
    ASSERT(importance &lt;= maxImportance);
    numberOfEntriesLeftToPrune = pruneResources(m_resourceStatisticsMap, resourcesToPrunePerImportance[importance++], numberOfEntriesLeftToPrune);
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1326309</commentid>
    <comment_count>11</comment_count>
      <attachid>314776</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-07-06 19:14:34 -0700</bug_when>
    <thetext>Comment on attachment 314776
Patch

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

&gt; Source/WebCore/loader/ResourceLoadObserver.cpp:82
&gt; +static WallTime reduceTimeResolution(WallTime time)

What&apos;s the reason we need to reduce the resolution of the lastSeen timestamp?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1327108</commentid>
    <comment_count>12</comment_count>
      <attachid>314776</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-07-10 12:45:59 -0700</bug_when>
    <thetext>Comment on attachment 314776
Patch

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

&gt;&gt; Source/WebKit2/UIProcess/Storage/ResourceLoadStatisticsStore.cpp:47
&gt;&gt; +static size_t maxStatisticsEntries = 1000;
&gt; 
&gt; All those overridable statics are wrong and should be data members. There can be several ResourceLoadStatisticsStore per process at least in theory since there is one store per WebSiteDataStore.
&gt; I believe those should be data members.

Will fix.

&gt;&gt; Source/WebKit2/UIProcess/Storage/ResourceLoadStatisticsStore.cpp:295
&gt;&gt; +void ResourceLoadStatisticsStore::setMaxStatisticsEntries(size_t entries)
&gt; 
&gt; entries is a bad name

Will fix.

&gt;&gt; Source/WebKit2/UIProcess/Storage/ResourceLoadStatisticsStore.cpp:300
&gt;&gt; +void ResourceLoadStatisticsStore::setPruneEntriesDownTo(size_t entries)
&gt; 
&gt; entries is a bad name

Will fix.

I also think we should assert if we set &quot;pruneEntriesDownTo&quot; some value that is greater than the maximum number of allowable entries.

&gt;&gt; Source/WebKit2/UIProcess/Storage/ResourceLoadStatisticsStore.cpp:435
&gt;&gt; +    std::sort(statisticsToPrune.begin(), statisticsToPrune.end(), [](const StatisticsLastSeen&amp; a, const StatisticsLastSeen&amp; b) {
&gt; 
&gt; If statisticsToPrune.size() &lt;= numberOfEntriesToPrune, then sorting is useless, right? We are going to remove ALL the entries in statisticsToPrune in this case, and it does not matter in which order they are removed.

Good point -- since at each pruning step we are seeking to remove a smaller number of records, we may hit this routine at a point where we need to remove all, and a later point where we only remove some.

&gt;&gt; Source/WebKit2/UIProcess/Storage/ResourceLoadStatisticsStore.cpp:441
&gt;&gt; +        if (!--numberOfEntriesToPrune)
&gt; 
&gt; This is bad if numberOfEntriesToPrune is 0.

Again, I&apos;m pretty sure we can&apos;t enter this function with a non-zero &apos;numberOfEntriesToPrune&apos;, but I added an ASSERT in this loop just to prove we don&apos;t do so.

&gt;&gt; Source/WebKit2/UIProcess/Storage/ResourceLoadStatisticsStore.cpp:448
&gt;&gt; +void ResourceLoadStatisticsStore::pruneStatisticsIfNeeded()
&gt; 
&gt; How often is this called?

It looks like this is triggered when the WebProcess completes a load and thinks its found new data to share.

&gt;&gt; Source/WebKit2/UIProcess/Storage/ResourceLoadStatisticsStore.cpp:454
&gt;&gt; +    size_t numberOfEntriesLeftToPrune = m_resourceStatisticsMap.size() - pruneEntriesDownTo;
&gt; 
&gt; If this is 0, we&apos;re in trouble, based on your implementation of sortAndPrune()

We only hit this if m_resourceStatisticsMap.size() &gt; the max count, and the pruning target count should always be less than the overall max (by default, by around 200 or so). I don&apos;t think we can hit this, but I&apos;ll add an assert.

Would you prefer a test and early return?

&gt;&gt; Source/WebKit2/UIProcess/Storage/ResourceLoadStatisticsStore.cpp:456
&gt;&gt; +    Vector&lt;StatisticsLastSeen&gt; nonPrevalentResourcesWithoutUserInteraction;
&gt; 
&gt; Feels like this could be an array of Vectors, then the pruning code could be written as a loop. e.g. roughly 
&gt; 
&gt; Vector&lt;StatisticsLastSeen&gt; resourcesToPrunePerImportance[maxImportance + 1];
&gt; for (auto&amp; resourceStatistic : m_resourceStatisticsMap.values())
&gt;     resourcesToPruneInPriority[computeImportance(resourceStatistic)].append({ resourceStatistic.highLevelDomain, resourceStatistic.lastSeen });
&gt; 
&gt; unsigned importance = 0;
&gt; while (numberOfEntriesLeftToPrune) {
&gt;     ASSERT(importance &lt;= maxImportance);
&gt;     numberOfEntriesLeftToPrune = pruneResources(m_resourceStatisticsMap, resourcesToPrunePerImportance[importance++], numberOfEntriesLeftToPrune);
&gt; }

Seems reasonable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1327117</commentid>
    <comment_count>13</comment_count>
      <attachid>314776</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-07-10 13:03:26 -0700</bug_when>
    <thetext>Comment on attachment 314776
Patch

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

&gt;&gt; Source/WebCore/loader/ResourceLoadObserver.cpp:82
&gt;&gt; +static WallTime reduceTimeResolution(WallTime time)
&gt; 
&gt; What&apos;s the reason we need to reduce the resolution of the lastSeen timestamp?

I&apos;m not sure, either. I left it in for now, but it seems like this could be omitted if we found it was a hotspot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1327118</commentid>
    <comment_count>14</comment_count>
      <attachid>314776</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-07-10 13:04:14 -0700</bug_when>
    <thetext>Comment on attachment 314776
Patch

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

&gt;&gt;&gt; Source/WebKit2/UIProcess/Storage/ResourceLoadStatisticsStore.cpp:454
&gt;&gt;&gt; +    size_t numberOfEntriesLeftToPrune = m_resourceStatisticsMap.size() - pruneEntriesDownTo;
&gt;&gt; 
&gt;&gt; If this is 0, we&apos;re in trouble, based on your implementation of sortAndPrune()
&gt; 
&gt; We only hit this if m_resourceStatisticsMap.size() &gt; the max count, and the pruning target count should always be less than the overall max (by default, by around 200 or so). I don&apos;t think we can hit this, but I&apos;ll add an assert.
&gt; 
&gt; Would you prefer a test and early return?

??

The check 3 lines above is:
if (m_resourceStatisticsMap.size() &lt; maxStatisticsEntries)
    return;

So if m_resourceStatisticsMap.size() == maxStatisticsEntries then you can end up with 0 here, no?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1327119</commentid>
    <comment_count>15</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-07-10 13:07:42 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #14)
&gt; Comment on attachment 314776 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=314776&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebKit2/UIProcess/Storage/ResourceLoadStatisticsStore.cpp:454
&gt; &gt;&gt;&gt; +    size_t numberOfEntriesLeftToPrune = m_resourceStatisticsMap.size() - pruneEntriesDownTo;
&gt; 
&gt; The check 3 lines above is:
&gt; if (m_resourceStatisticsMap.size() &lt; maxStatisticsEntries)
&gt;     return;
&gt; 
&gt; So if m_resourceStatisticsMap.size() == maxStatisticsEntries then you can
&gt; end up with 0 here, no?

If m_resourceStatisticsMap.size() == maxStatisticsEntries, we can only get zero if maxStatisticsEntries also equals &quot;pruneEntriesDownTo&quot;, right?

It&apos;s all academic now, since your revised algorithm protects against it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1327122</commentid>
    <comment_count>16</comment_count>
      <attachid>315014</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-07-10 13:11:06 -0700</bug_when>
    <thetext>Created attachment 315014
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1327204</commentid>
    <comment_count>17</comment_count>
      <attachid>315029</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-07-10 14:26:40 -0700</bug_when>
    <thetext>Created attachment 315029
Patch (Rebaselined)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1327249</commentid>
    <comment_count>18</comment_count>
      <attachid>315042</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-07-10 16:31:48 -0700</bug_when>
    <thetext>Created attachment 315042
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1327250</commentid>
    <comment_count>19</comment_count>
      <attachid>315029</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-07-10 16:32:12 -0700</bug_when>
    <thetext>Comment on attachment 315029
Patch (Rebaselined)

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

&gt; Source/WebCore/loader/ResourceLoadStatistics.h:65
&gt; +    WallTime lastSeen { WallTime::fromRawSeconds(-1) };

As I commented on the earlier iteration. I do not think we need this magic -1 value. Why do we need to distinguish reset from default value here? I think this was just a bad copy/paste from the other WallTime member in statistics.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:150
&gt; +        coreStore().pruneStatisticsIfNeeded();

Will need some rebaselining now that I merged the 2 stores.

&gt; Source/WebKit2/UIProcess/Storage/ResourceLoadStatisticsStore.cpp:257
&gt; +    ASSERT(pruneTargetCount &lt;= m_maxStatisticsEntries);

It is best to check this when pruning than here since you could imagine someone calling setPruneEntriesDownTo() then setMaxStatisticsEntries(), in this order, and yet leading to something valid.

&gt; Source/WebKit2/UIProcess/Storage/ResourceLoadStatisticsStore.cpp:367
&gt; +static size_t pruneResources(HashMap&lt;String, WebCore::ResourceLoadStatistics&gt;&amp; statisticsMap, Vector&lt;StatisticsLastSeen&gt;&amp; statisticsToPrune, size_t numberOfEntriesToPrune)

Looks like the Vector should be const.

&gt; Source/WebKit2/UIProcess/Storage/ResourceLoadStatisticsStore.cpp:375
&gt; +    for (auto&amp; statistic : statisticsToPrune) {

I think it would be better as:
for (size_t i = 0, end = std::min(numberOfEntriesToPrune, statisticsToPrune.size()); i != end; ++i)
    statisticsMap.remove(statisticsToPrune[i].topPrivatelyOwnedDomain);

&gt; Source/WebKit2/UIProcess/Storage/ResourceLoadStatisticsStore.cpp:382
&gt; +    return numberOfEntriesToPrune;

Could we just pass numberOfEntriesToPrune by reference instead of returning it. It would seem better to me.

&gt; Source/WebKit2/UIProcess/Storage/ResourceLoadStatisticsStore.cpp:385
&gt; +constexpr size_t maxImportance { 3 };

I think global constants should go to the top of the cpp file.
I think using unsigned should be enough for importance, both here and below.

&gt; Source/WebKit2/UIProcess/Storage/ResourceLoadStatisticsStore.cpp:389
&gt; +    if (!resourceStatistic.isPrevalentResource)

I think this may be a bit more readable:
unsigned importance = maxImportance;
if (!resourceStatistic.isPrevalentResource)
    importance -= 1;
if (!resourceStatistic.hadUserInteraction)
    importance -= 2;
return importance;

&gt; Source/WebKit2/UIProcess/Storage/ResourceLoadStatisticsStore.cpp:398
&gt; +    if (m_resourceStatisticsMap.size() &lt; m_maxStatisticsEntries)

Shouldn&apos;t this be &lt;= ?
If we have max entries, it sounds like we don&apos;t need pruning yet.

&gt; Source/WebKit2/UIProcess/Storage/ResourceLoadStatisticsStore.cpp:409
&gt; +    while (numberOfEntriesLeftToPrune) {

I think this would look better as:
for (unsigned importance = 0; numberOfEntriesLeftToPrune &amp;&amp; importance &lt;= maxImportance; ++importance)
    numberOfEntriesLeftToPrune = pruneResources(m_resourceStatisticsMap, resourcesToPrunePerImportance[importance], numberOfEntriesLeftToPrune);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1327252</commentid>
    <comment_count>20</comment_count>
      <attachid>315029</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-07-10 16:33:23 -0700</bug_when>
    <thetext>Comment on attachment 315029
Patch (Rebaselined)

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

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:510
&gt; +void WebResourceLoadStatisticsStore::setLastSeen(Seconds seconds, const URL&amp; url)

The parameters look backward to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1327258</commentid>
    <comment_count>21</comment_count>
      <attachid>315029</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-07-10 16:46:39 -0700</bug_when>
    <thetext>Comment on attachment 315029
Patch (Rebaselined)

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

&gt;&gt; Source/WebCore/loader/ResourceLoadStatistics.h:65
&gt;&gt; +    WallTime lastSeen { WallTime::fromRawSeconds(-1) };
&gt; 
&gt; As I commented on the earlier iteration. I do not think we need this magic -1 value. Why do we need to distinguish reset from default value here? I think this was just a bad copy/paste from the other WallTime member in statistics.

Ok. I&apos;ll get rid of it.

&gt;&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:150
&gt;&gt; +        coreStore().pruneStatisticsIfNeeded();
&gt; 
&gt; Will need some rebaselining now that I merged the 2 stores.

No kidding! It wasn&apos;t too bad, but a new patch is up (missing some of your comments, so don&apos;t review it yet).

&gt;&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:510
&gt;&gt; +void WebResourceLoadStatisticsStore::setLastSeen(Seconds seconds, const URL&amp; url)
&gt; 
&gt; The parameters look backward to me.

Switched.

&gt;&gt; Source/WebKit2/UIProcess/Storage/ResourceLoadStatisticsStore.cpp:257
&gt;&gt; +    ASSERT(pruneTargetCount &lt;= m_maxStatisticsEntries);
&gt; 
&gt; It is best to check this when pruning than here since you could imagine someone calling setPruneEntriesDownTo() then setMaxStatisticsEntries(), in this order, and yet leading to something valid.

Will do.

&gt;&gt; Source/WebKit2/UIProcess/Storage/ResourceLoadStatisticsStore.cpp:367
&gt;&gt; +static size_t pruneResources(HashMap&lt;String, WebCore::ResourceLoadStatistics&gt;&amp; statisticsMap, Vector&lt;StatisticsLastSeen&gt;&amp; statisticsToPrune, size_t numberOfEntriesToPrune)
&gt; 
&gt; Looks like the Vector should be const.

Will do.

&gt;&gt; Source/WebKit2/UIProcess/Storage/ResourceLoadStatisticsStore.cpp:375
&gt;&gt; +    for (auto&amp; statistic : statisticsToPrune) {
&gt; 
&gt; I think it would be better as:
&gt; for (size_t i = 0, end = std::min(numberOfEntriesToPrune, statisticsToPrune.size()); i != end; ++i)
&gt;     statisticsMap.remove(statisticsToPrune[i].topPrivatelyOwnedDomain);

Eh. Ok.

&gt;&gt; Source/WebKit2/UIProcess/Storage/ResourceLoadStatisticsStore.cpp:382
&gt;&gt; +    return numberOfEntriesToPrune;
&gt; 
&gt; Could we just pass numberOfEntriesToPrune by reference instead of returning it. It would seem better to me.

Yes. Good idea.

&gt;&gt; Source/WebKit2/UIProcess/Storage/ResourceLoadStatisticsStore.cpp:385
&gt;&gt; +constexpr size_t maxImportance { 3 };
&gt; 
&gt; I think global constants should go to the top of the cpp file.
&gt; I think using unsigned should be enough for importance, both here and below.

OK.

&gt;&gt; Source/WebKit2/UIProcess/Storage/ResourceLoadStatisticsStore.cpp:389
&gt;&gt; +    if (!resourceStatistic.isPrevalentResource)
&gt; 
&gt; I think this may be a bit more readable:
&gt; unsigned importance = maxImportance;
&gt; if (!resourceStatistic.isPrevalentResource)
&gt;     importance -= 1;
&gt; if (!resourceStatistic.hadUserInteraction)
&gt;     importance -= 2;
&gt; return importance;

Sure!

&gt;&gt; Source/WebKit2/UIProcess/Storage/ResourceLoadStatisticsStore.cpp:398
&gt;&gt; +    if (m_resourceStatisticsMap.size() &lt; m_maxStatisticsEntries)
&gt; 
&gt; Shouldn&apos;t this be &lt;= ?
&gt; If we have max entries, it sounds like we don&apos;t need pruning yet.

Reasonable. I&apos;ll change it.

&gt;&gt; Source/WebKit2/UIProcess/Storage/ResourceLoadStatisticsStore.cpp:409
&gt;&gt; +    while (numberOfEntriesLeftToPrune) {
&gt; 
&gt; I think this would look better as:
&gt; for (unsigned importance = 0; numberOfEntriesLeftToPrune &amp;&amp; importance &lt;= maxImportance; ++importance)
&gt;     numberOfEntriesLeftToPrune = pruneResources(m_resourceStatisticsMap, resourcesToPrunePerImportance[importance], numberOfEntriesLeftToPrune);

Okay!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1327260</commentid>
    <comment_count>22</comment_count>
      <attachid>315043</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-07-10 16:49:16 -0700</bug_when>
    <thetext>Created attachment 315043
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1327261</commentid>
    <comment_count>23</comment_count>
      <attachid>315043</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-07-10 16:53:05 -0700</bug_when>
    <thetext>Comment on attachment 315043
Patch

r=me if the bots are happy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1327273</commentid>
    <comment_count>24</comment_count>
      <attachid>315048</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-07-10 17:01:22 -0700</bug_when>
    <thetext>Created attachment 315048
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1327290</commentid>
    <comment_count>25</comment_count>
      <attachid>315029</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-07-10 17:23:45 -0700</bug_when>
    <thetext>Comment on attachment 315029
Patch (Rebaselined)

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

&gt;&gt;&gt; Source/WebKit2/UIProcess/Storage/ResourceLoadStatisticsStore.cpp:367
&gt;&gt;&gt; +static size_t pruneResources(HashMap&lt;String, WebCore::ResourceLoadStatistics&gt;&amp; statisticsMap, Vector&lt;StatisticsLastSeen&gt;&amp; statisticsToPrune, size_t numberOfEntriesToPrune)
&gt;&gt; 
&gt;&gt; Looks like the Vector should be const.
&gt; 
&gt; Will do.

Bah -- it can&apos;t be -- the sort operation needs to modify the statisticsToPrune Vector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1327294</commentid>
    <comment_count>26</comment_count>
      <attachid>315053</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-07-10 17:25:03 -0700</bug_when>
    <thetext>Created attachment 315053
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1327307</commentid>
    <comment_count>27</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-07-10 18:16:14 -0700</bug_when>
    <thetext>(In reply to Brent Fulgham from comment #25)
&gt; Comment on attachment 315029 [details]
&gt; Patch (Rebaselined)
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=315029&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebKit2/UIProcess/Storage/ResourceLoadStatisticsStore.cpp:367
&gt; &gt;&gt;&gt; +static size_t pruneResources(HashMap&lt;String, WebCore::ResourceLoadStatistics&gt;&amp; statisticsMap, Vector&lt;StatisticsLastSeen&gt;&amp; statisticsToPrune, size_t numberOfEntriesToPrune)
&gt; &gt;&gt; 
&gt; &gt;&gt; Looks like the Vector should be const.
&gt; &gt; 
&gt; &gt; Will do.
&gt; 
&gt; Bah -- it can&apos;t be -- the sort operation needs to modify the
&gt; statisticsToPrune Vector.

oh, duh :) sorry.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1327308</commentid>
    <comment_count>28</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-07-10 18:16:54 -0700</bug_when>
    <thetext>Your latest patch only seems to include the changes to TestRunner?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1327322</commentid>
    <comment_count>29</comment_count>
      <attachid>315061</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-07-10 19:00:45 -0700</bug_when>
    <thetext>Created attachment 315061
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1327323</commentid>
    <comment_count>30</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-07-10 19:02:38 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #28)
&gt; Your latest patch only seems to include the changes to TestRunner?

Oh, rats. I must have uploaded from the Tools directory (which was the last place I was manually patching the changes). Grrr!

Uploaded the hopefully final version!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1327334</commentid>
    <comment_count>31</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-07-10 19:52:09 -0700</bug_when>
    <thetext>Committed r219319: &lt;http://trac.webkit.org/changeset/219319&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1327347</commentid>
    <comment_count>32</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-07-10 20:31:20 -0700</bug_when>
    <thetext>Reopening to attach new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1327348</commentid>
    <comment_count>33</comment_count>
      <attachid>315069</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-07-10 20:31:21 -0700</bug_when>
    <thetext>Created attachment 315069
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1327390</commentid>
    <comment_count>34</comment_count>
      <attachid>315069</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-07-10 23:32:34 -0700</bug_when>
    <thetext>Comment on attachment 315069
Patch

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

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:947
&gt; +        ++removed;

Why not directly --numberOfEntriesToPrune; ? instead of having an extra variable?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1327523</commentid>
    <comment_count>35</comment_count>
      <attachid>315069</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-07-11 09:35:13 -0700</bug_when>
    <thetext>Comment on attachment 315069
Patch

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

&gt;&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:947
&gt;&gt; +        ++removed;
&gt; 
&gt; Why not directly --numberOfEntriesToPrune; ? instead of having an extra variable?

I was worried that std::min would be evaluated at each iteration loop, but now I see that it was being assigned to &apos;end&apos;, so would not.

I&apos;ll land a correction to tidy that up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1327524</commentid>
    <comment_count>36</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-07-11 09:35:37 -0700</bug_when>
    <thetext>Second patch:
Committed r219323: &lt;http://trac.webkit.org/changeset/219323&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1327535</commentid>
    <comment_count>37</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-07-11 09:52:40 -0700</bug_when>
    <thetext>Final cleanup:
Committed r219337: &lt;http://trac.webkit.org/changeset/219337&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314750</attachid>
            <date>2017-07-06 13:15:48 -0700</date>
            <delta_ts>2017-07-06 16:02:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174215-20170706131518.patch</filename>
            <type>text/plain</type>
            <size>44315</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxOTEyNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDE3LTA3LTA2ICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIExvYWQgU3Rh
dGlzdGljczogUHJ1bmUgc3RhdGlzdGljcyBpbiBvcmRlcnMgb2YgaW1wb3J0YW5jZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0MjE1CisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS8zMzE2NDQwMz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUZXN0OiBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2Fk
U3RhdGlzdGljcy9wcnVuZS1zdGF0aXN0aWNzLmh0bWwKKworICAgICAgICAqIGxvYWRlci9SZXNv
dXJjZUxvYWRPYnNlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZWR1Y2VUaW1lUmVzb2x1
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nRnJhbWVO
YXZpZ2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dT
dWJyZXNvdXJjZUxvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OmxvZ1dlYlNvY2tldExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OmxvZ1VzZXJJbnRlcmFjdGlvbldpdGhSZWR1Y2VkVGltZVJlc29sdXRpb24pOgor
ICAgICAgICAgICAgTm93IGFsbCBzZXQgdGhlIG5ldyBzdGF0aXN0aWNzIGZpZWxkIGxhc3RTZWVu
LgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M6OmVuY29kZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljczo6dG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljczo6bWVyZ2UpOgorICAgICAgICAgICAgSGFuZGxpbmcgb2YgdGhl
IG5ldyBzdGF0aXN0aWNzIGZpZWxkIGxhc3RTZWVuLgorICAgICAgICAqIGxvYWRlci9SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzLmg6CisKIDIwMTctMDctMDUgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5A
YXBwbGUuY29tPgogCiAgICAgICAgIFJlY2VpdmluZyB0cmFja3Mgc2hvdWxkIGJlIGVuZGVkIHdo
ZW4gcGVlciBjb25uZWN0aW9uIGlzIGJlaW5nIGNsb3NlZApJbmRleDogU291cmNlL1dlYkNvcmUv
bG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCShyZXZpc2lvbiAyMTkxMjcpCisr
KyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03NCw2ICs3NCwxMSBAQCBib29sIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaG91
bGRMb2coUGFnCiAgICAgcmV0dXJuIFNldHRpbmdzOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5h
YmxlZCgpICYmICFwYWdlLT51c2VzRXBoZW1lcmFsU2Vzc2lvbigpICYmIG1fbm90aWZpY2F0aW9u
Q2FsbGJhY2s7CiB9CiAKK3N0YXRpYyBXYWxsVGltZSByZWR1Y2VUaW1lUmVzb2x1dGlvbihXYWxs
VGltZSB0aW1lKQoreworICAgIHJldHVybiBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoc3RkOjpm
bG9vcih0aW1lLnNlY29uZHNTaW5jZUVwb2NoKCkgLyB0aW1lc3RhbXBSZXNvbHV0aW9uKSAqIHRp
bWVzdGFtcFJlc29sdXRpb24uc2Vjb25kcygpKTsKK30KKyAgICAKIHZvaWQgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OmxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBGcmFtZSYgZnJhbWUsIGNvbnN0IEZy
YW1lJiB0b3BGcmFtZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBuZXdSZXF1ZXN0LCBjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQogewogICAgIEFTU0VSVChmcmFtZS5k
b2N1bWVudCgpKTsKQEAgLTE1NSw2ICsxNjAsOCBAQCB2b2lkIFJlc291cmNlTG9hZE9ic2VydmVy
Ojpsb2dGcmFtZU5hdmlnCiAgICAgICAgIH0KICAgICB9CiAKKyAgICB0YXJnZXRTdGF0aXN0aWNz
Lmxhc3RTZWVuID0gcmVkdWNlVGltZVJlc29sdXRpb24oV2FsbFRpbWU6Om5vdygpKTsKKyAgICAK
ICAgICBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5zZXQodGFyZ2V0UHJpbWFyeURvbWFpbiwgV1RG
TW92ZSh0YXJnZXRTdGF0aXN0aWNzKSk7CiAKICAgICBpZiAoc2hvdWxkQ2FsbE5vdGlmaWNhdGlv
bkNhbGxiYWNrKQpAQCAtMjIwLDcgKzIyNyw5IEBAIHZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OmxvZ1N1YnJlc291cmMKIAogICAgICAgICB0YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlSGFz
QmVlblN1YnJlc291cmNlQ291bnREaXZpZGVkQnlUb3RhbE51bWJlck9mT3JpZ2luc1Zpc2l0ZWQg
PSBzdGF0aWNfY2FzdDxkb3VibGU+KHRhcmdldFN0YXRpc3RpY3Muc3VicmVzb3VyY2VIYXNCZWVu
U3VicmVzb3VyY2VDb3VudCkgLyB0b3RhbFZpc2l0ZWQ7CiAgICAgfQotCisgICAgCisgICAgdGFy
Z2V0U3RhdGlzdGljcy5sYXN0U2VlbiA9IHJlZHVjZVRpbWVSZXNvbHV0aW9uKFdhbGxUaW1lOjpu
b3coKSk7CisgICAgCiAgICAgbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuc2V0KHRhcmdldFByaW1h
cnlEb21haW4sIFdURk1vdmUodGFyZ2V0U3RhdGlzdGljcykpOwogCiAgICAgaWYgKHNob3VsZENh
bGxOb3RpZmljYXRpb25DYWxsYmFjaykKQEAgLTI2NiwxNSArMjc1LDEyIEBAIHZvaWQgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OmxvZ1dlYlNvY2tldEwKIAogICAgIHRhcmdldFN0YXRpc3RpY3Muc3Vi
cmVzb3VyY2VIYXNCZWVuU3VicmVzb3VyY2VDb3VudERpdmlkZWRCeVRvdGFsTnVtYmVyT2ZPcmln
aW5zVmlzaXRlZCA9IHN0YXRpY19jYXN0PGRvdWJsZT4odGFyZ2V0U3RhdGlzdGljcy5zdWJyZXNv
dXJjZUhhc0JlZW5TdWJyZXNvdXJjZUNvdW50KSAvIHRvdGFsVmlzaXRlZDsKIAorICAgIHRhcmdl
dFN0YXRpc3RpY3MubGFzdFNlZW4gPSByZWR1Y2VUaW1lUmVzb2x1dGlvbihXYWxsVGltZTo6bm93
KCkpOworICAgIAogICAgIGlmIChzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2spCiAgICAg
ICAgIG1fbm90aWZpY2F0aW9uQ2FsbGJhY2soKTsKIH0KIAotc3RhdGljIFdhbGxUaW1lIHJlZHVj
ZVRpbWVSZXNvbHV0aW9uKFdhbGxUaW1lIHRpbWUpCi17Ci0gICAgcmV0dXJuIFdhbGxUaW1lOjpm
cm9tUmF3U2Vjb25kcyhzdGQ6OmZsb29yKHRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKSAvIHRpbWVz
dGFtcFJlc29sdXRpb24pICogdGltZXN0YW1wUmVzb2x1dGlvbi5zZWNvbmRzKCkpOwotfQotCiB2
b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dVc2VySW50ZXJhY3Rpb25XaXRoUmVkdWNlZFRp
bWVSZXNvbHV0aW9uKGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkKIHsKICAgICBBU1NFUlQoZG9j
dW1lbnQucGFnZSgpKTsKQEAgLTI5Miw2ICsyOTgsNyBAQCB2b2lkIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpsb2dVc2VySW50ZXJhCiAgICAgICAgIHJldHVybjsKIAogICAgIHN0YXRpc3RpY3MuaGFk
VXNlckludGVyYWN0aW9uID0gdHJ1ZTsKKyAgICBzdGF0aXN0aWNzLmxhc3RTZWVuID0gbmV3VGlt
ZTsKICAgICBzdGF0aXN0aWNzLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lID0gbmV3VGlt
ZTsKIAogICAgIG1fbm90aWZpY2F0aW9uQ2FsbGJhY2soKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5jcHAJKHJldmlzaW9uIDIxOTEy
NykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3M6OmVuY29kZShLZXllCiB7CiAgICAgZW5jb2Rlci5lbmNvZGVTdHJpbmcoIlByZXZhbGVudFJl
c291cmNlT3JpZ2luIiwgaGlnaExldmVsRG9tYWluKTsKICAgICAKKyAgICBlbmNvZGVyLmVuY29k
ZURvdWJsZSgibGFzdFNlZW4iLCBsYXN0U2Vlbi5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkp
OworICAgIAogICAgIC8vIFVzZXIgaW50ZXJhY3Rpb24KICAgICBlbmNvZGVyLmVuY29kZUJvb2wo
ImhhZFVzZXJJbnRlcmFjdGlvbiIsIGhhZFVzZXJJbnRlcmFjdGlvbik7CiAgICAgZW5jb2Rlci5l
bmNvZGVEb3VibGUoIm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24iLCBtb3N0UmVjZW50VXNlcklu
dGVyYWN0aW9uVGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpOwpAQCAtMTkyLDYgKzE5
NCwxNCBAQCBib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3M6OmRlY29kZShLZXllCiAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZUJvb2woImdyYW5kZmF0aGVyZWQiLCBncmFuZGZhdGhlcmVkKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgaWYgKHZlcnNpb24gPCA1KQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAKKyAgICBkb3VibGUgbGFzdFNlZW5UaW1lQXNEb3VibGU7CisgICAgaWYg
KCFkZWNvZGVyLmRlY29kZURvdWJsZSgibGFzdFNlZW4iLCBsYXN0U2VlblRpbWVBc0RvdWJsZSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBsYXN0U2VlbiA9IFdhbGxUaW1lOjpmcm9tUmF3
U2Vjb25kcyhsYXN0U2VlblRpbWVBc0RvdWJsZSk7CisgICAgCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKQEAgLTIyNSw2ICsyMzUsMTAgQEAgU3RyaW5nIFJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnRv
U3RyaW5nKAogewogICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKICAgICAKKyAgICBidWlsZGVy
LmFwcGVuZExpdGVyYWwoImxhc3RTZWVuIik7CisgICAgYnVpbGRlci5hcHBlbmROdW1iZXIobGFz
dFNlZW4uc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKTsKKyAgICBidWlsZGVyLmFwcGVuZCgn
XG4nKTsKKyAgICAKICAgICAvLyBVc2VyIGludGVyYWN0aW9uCiAgICAgYXBwZW5kQm9vbGVhbihi
dWlsZGVyLCAiaGFkVXNlckludGVyYWN0aW9uIiwgaGFkVXNlckludGVyYWN0aW9uKTsKICAgICBi
dWlsZGVyLmFwcGVuZCgnXG4nKTsKQEAgLTMxNyw2ICszMzEsOSBAQCB2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3M6Om1lcmdlKGNvbnN0CiB7CiAgICAgQVNTRVJUKG90aGVyLmhpZ2hMZXZlbERv
bWFpbiA9PSBoaWdoTGV2ZWxEb21haW4pOwogCisgICAgaWYgKGxhc3RTZWVuIDwgb3RoZXIubGFz
dFNlZW4pCisgICAgICAgIGxhc3RTZWVuID0gb3RoZXIubGFzdFNlZW47CisgICAgCiAgICAgaWYg
KCFvdGhlci5oYWRVc2VySW50ZXJhY3Rpb24pIHsKICAgICAgICAgLy8gSWYgdXNlciBpbnRlcmFj
dGlvbiBoYXMgYmVlbiByZXNldCBkbyBzbyBoZXJlIHRvby4KICAgICAgICAgLy8gRWxzZSwgZG8g
bm90aGluZy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0
aWNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3MuaAkocmV2aXNpb24gMjE5MTI3KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3MuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEsOSBAQCBz
dHJ1Y3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyB7CiAKICAgICBTdHJpbmcgaGlnaExldmVsRG9t
YWluOwogCisgICAgLy8gVGltZXN0YW1wLiBEZWZhdWx0IHZhbHVlIGlzIG5lZ2F0aXZlLCAwIG1l
YW5zIGl0IHdhcyByZXNldC4KKyAgICBXYWxsVGltZSBsYXN0U2VlbiB7IFdhbGxUaW1lOjpmcm9t
UmF3U2Vjb25kcygtMSkgfTsKKyAgICAKICAgICAvLyBVc2VyIGludGVyYWN0aW9uCiAgICAgYm9v
bCBoYWRVc2VySW50ZXJhY3Rpb24geyBmYWxzZSB9OwogICAgIC8vIFRpbWVzdGFtcC4gRGVmYXVs
dCB2YWx1ZSBpcyBuZWdhdGl2ZSwgMCBtZWFucyBpdCB3YXMgcmVzZXQuCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMTkxMjcpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSw0OSBAQAorMjAxNy0wNy0wNiAgSm9obiBXaWxhbmRlciAgPHdpbGFu
ZGVyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXNvdXJjZSBMb2FkIFN0YXRpc3RpY3M6IFBydW5l
IHN0YXRpc3RpY3MgaW4gb3JkZXJzIG9mIGltcG9ydGFuY2UKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDIxNQorICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vMzMxNjQ0MDM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgTmV3IGZ1bmN0aW9uYWxpdHkuIFBydW5lcyBzdGF0aXN0aWNzIGluIHRoaXMgb3JkZXI6
CisgICAgICAgIDEuIE5vbi1wcmV2YWxlbnQgcmVzb3VyY2VzIHdpdGhvdXQgdXNlciBpbnRlcmFj
dGlvbi4KKyAgICAgICAgMi4gUHJldmFsZW50IHJlc291cmNlcyB3aXRob3V0IHVzZXIgaW50ZXJh
Y3Rpb24uCisgICAgICAgIDMuIE5vbi1wcmV2YWxlbnQgcmVzb3VyY2VzIHdpdGggdXNlciBpbnRl
cmFjdGlvbi4KKyAgICAgICAgNC4gUHJldmFsZW50IHJlc291cmNlcyB3aXRoIHVzZXIgaW50ZXJh
Y3Rpb24uCisKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcDoKKyAg
ICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPjo6ZW5jb2Rl
KToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPjo6
ZGVjb2RlKToKKyAgICAgICAgICAgIEFkZGVkIHRpbWVzdGFtcCBmaWVsZCBsYXN0U2Vlbi4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbToKKyAgICAg
ICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0TGFzdFNl
ZW46Zm9ySG9zdDpdKToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU2V0TWF4U3RhdGlzdGljc0VudHJpZXM6XSk6CisgICAgICAgICgtW1dLV2Vi
c2l0ZURhdGFTdG9yZSBfcmVzb3VyY2VMb2FkU3RhdGlzdGljc1NldFBydW5lRW50cmllc0Rvd25U
bzpdKToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZV0pOgorICAgICAgICAgICAgVGVzdCBpbmZyYXN0cnVj
dHVyZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVBy
aXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvU3RvcmFnZS9SZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKToKKyAgICAgICAgICAgIFRlc3QgaW5mcmFzdHJ1
Y3R1cmUuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0
UHJ1bmVFbnRyaWVzRG93blRvKToKKyAgICAgICAgICAgIFRlc3QgaW5mcmFzdHJ1Y3R1cmUuCisg
ICAgICAgIChXZWJLaXQ6OnNvcnRBbmRQcnVuZSk6CisgICAgICAgICAgICBDb252ZW5pZW5jZSBm
dW5jdGlvbi4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpw
cnVuZVN0YXRpc3RpY3NJZk5lZWRlZCk6CisgICAgICAgICAgICBUaGUgbmV3IHBydW5pbmcgZnVu
Y3Rpb24uCisgICAgICAgICogVUlQcm9jZXNzL1N0b3JhZ2UvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlLmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6cHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3Jkcyk6CisgICAgICAgICAgICBOb3cgY2Fs
bHMgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCgp
LgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldExh
c3RTZWVuKToKKyAgICAgICAgICAgIFRlc3QgaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgIChXZWJL
aXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0TWF4U3RhdGlzdGljc0VudHJp
ZXMpOgorICAgICAgICAgICAgVGVzdCBpbmZyYXN0cnVjdHVyZS4KKyAgICAgICAgKFdlYktpdDo6
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRQcnVuZUVudHJpZXNEb3duVG8pOgor
ICAgICAgICAgICAgVGVzdCBpbmZyYXN0cnVjdHVyZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmg6CisKIDIwMTctMDctMDUgIFphbiBEb2JlcnNl
ayAgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHTGliXSBJbmNvcnJlY3QgPGds
aWIvZ2kxOG4uaD4gaW5jbHVkZSBpbiBXZWJLaXRXZWJzaXRlRGF0YQpJbmRleDogU291cmNlL1dl
YktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAJKHJldmlzaW9uIDIx
OTEyNykKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMjQyLDYgKzIyNDIsOCBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8
UmVzb3VyY2VMb2FkU3RhdGlzdGljCiB7CiAgICAgZW5jb2RlciA8PCBzdGF0aXN0aWNzLmhpZ2hM
ZXZlbERvbWFpbjsKICAgICAKKyAgICBlbmNvZGVyIDw8IHN0YXRpc3RpY3MubGFzdFNlZW4uc2Vj
b25kc1NpbmNlRXBvY2goKS52YWx1ZSgpOworICAgIAogICAgIC8vIFVzZXIgaW50ZXJhY3Rpb24K
ICAgICBlbmNvZGVyIDw8IHN0YXRpc3RpY3MuaGFkVXNlckludGVyYWN0aW9uOwogICAgIGVuY29k
ZXIgPDwgc3RhdGlzdGljcy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZS5zZWNvbmRzU2lu
Y2VFcG9jaCgpLnZhbHVlKCk7CkBAIC0yMjg0LDYgKzIyODYsMTEgQEAgYm9vbCBBcmd1bWVudENv
ZGVyPFJlc291cmNlTG9hZFN0YXRpc3RpYwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3RhdGlz
dGljcy5oaWdoTGV2ZWxEb21haW4pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCisgICAg
ZG91YmxlIGxhc3RTZWVuVGltZUFzRG91YmxlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUobGFz
dFNlZW5UaW1lQXNEb3VibGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgc3RhdGlzdGlj
cy5sYXN0U2VlbiA9IFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhsYXN0U2VlblRpbWVBc0RvdWJs
ZSk7CisgICAgCiAgICAgLy8gVXNlciBpbnRlcmFjdGlvbgogICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUoc3RhdGlzdGljcy5oYWRVc2VySW50ZXJhY3Rpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAkocmV2aXNpb24gMjE5MTI3KQorKysgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE2Miw2ICsxNjIsOCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6cHJvCiAgICAgICAgIH0KICAgICAgICAgcmVtb3ZlRGF0YVJlY29yZHMoKTsK
ICAgICAgICAgCisgICAgICAgIGNvcmVTdG9yZSgpLnBydW5lU3RhdGlzdGljc0lmTmVlZGVkKCk7
CisgICAgICAgIAogICAgICAgICBpZiAobm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nh
bm5lZCkgewogICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtdICgpIG11dGFi
bGUgewogICAgICAgICAgICAgICAgIFdlYlByb2Nlc3NQcm94eTo6bm90aWZ5UGFnZVN0YXRpc3Rp
Y3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NlZCgpOwpAQCAtNTQ3LDYgKzU0OSwxNyBAQCB2b2lkIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFzCiAgICAgfSk7CiB9CiAKK3ZvaWQgV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRMYXN0U2VlbihTZWNvbmRzIHNlY29uZHMs
IGNvbnN0IFVSTCYgdXJsKQoreworICAgIGlmICh1cmwuaXNCbGFua1VSTCgpIHx8IHVybC5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX3N0YXRpc3RpY3NRdWV1ZS0+ZGlz
cGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgdXJsID0gdXJsLmlz
b2xhdGVkQ29weSgpLCBzZWNvbmRzXSB7CisgICAgICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBjb3Jl
U3RvcmUoKS5lbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1hcnlE
b21haW4odXJsKSk7CisgICAgICAgIHN0YXRpc3RpY3MubGFzdFNlZW4gPSBXYWxsVGltZTo6ZnJv
bVJhd1NlY29uZHMoc2Vjb25kcy5zZWNvbmRzKCkpOworICAgIH0pOworfQorICAgIAogdm9pZCBX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKGNvbnN0
IFVSTCYgdXJsKQogewogICAgIGlmICh1cmwuaXNCbGFua1VSTCgpIHx8IHVybC5pc0VtcHR5KCkp
CkBAIC03MTgsNCArNzMxLDE0IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpzZXQKICAgICBjb3JlU3RvcmUoKS5zZXRHcmFuZGZhdGhlcmluZ1RpbWUoc2Vjb25kcyk7CiB9
CiAgICAgCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0TWF4U3RhdGlz
dGljc0VudHJpZXMoc2l6ZV90IGVudHJpZXMpCit7CisgICAgY29yZVN0b3JlKCkuc2V0TWF4U3Rh
dGlzdGljc0VudHJpZXMoZW50cmllcyk7Cit9CisgICAgCit2b2lkIFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKHNpemVfdCBlbnRyaWVzKQorewor
ICAgIGNvcmVTdG9yZSgpLnNldFBydW5lRW50cmllc0Rvd25UbyhlbnRyaWVzKTsKK30KKyAgICAK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAkocmV2aXNpb24g
MjE5MTI3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw2ICs3OCw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBXZWJDb3JlOjpVUkwmKTsKICAgICB2b2lk
IGNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFdlYkNvcmU6OlVSTCYpOwogICAgIHZvaWQgaGFz
SGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFdlYkNvcmU6OlVSTCYsIFdURjo6RnVuY3Rpb248dm9p
ZCAoYm9vbCk+JiYpOworICAgIHZvaWQgc2V0TGFzdFNlZW4oU2Vjb25kcywgY29uc3QgV2ViQ29y
ZTo6VVJMJik7CiAgICAgdm9pZCBzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBXZWJDb3JlOjpV
UkwmKTsKICAgICB2b2lkIGlzUHJldmFsZW50UmVzb3VyY2UoY29uc3QgV2ViQ29yZTo6VVJMJiwg
V1RGOjpGdW5jdGlvbjx2b2lkIChib29sKT4mJik7CiAgICAgdm9pZCBjbGVhclByZXZhbGVudFJl
c291cmNlKGNvbnN0IFdlYkNvcmU6OlVSTCYpOwpAQCAtOTksNyArMTAwLDkgQEAgcHVibGljOgog
ICAgIHZvaWQgc2V0VGltZVRvTGl2ZUNvb2tpZVBhcnRpdGlvbkZyZWUoU2Vjb25kcyk7CiAgICAg
dm9pZCBzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoU2Vjb25kcyk7CiAg
ICAgdm9pZCBzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyk7Ci0KKyAgICB2b2lkIHNldE1h
eFN0YXRpc3RpY3NFbnRyaWVzKHNpemVfdCk7CisgICAgdm9pZCBzZXRQcnVuZUVudHJpZXNEb3du
VG8oc2l6ZV90KTsKKyAgICAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlKGNvbnN0IFN0cmluZyYpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbQko
cmV2aXNpb24gMjE5MTI3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYnNpdGVEYXRhU3RvcmUubW0JKHdvcmtpbmcgY29weSkKQEAgLTIwNyw2ICsyMDcsMTUgQEAg
LSAodm9pZClfc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZQogICAgIF93ZWJzaXRlRGF0
YVN0b3JlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJs
ZWQoZW5hYmxlZCk7CiB9CiAKKy0gKHZvaWQpX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTZXRMYXN0
U2VlbjooZG91YmxlKXNlY29uZHMgZm9ySG9zdDooTlNTdHJpbmcgKilob3N0Cit7CisgICAgYXV0
byogc3RvcmUgPSBfd2Vic2l0ZURhdGFTdG9yZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnJlc291cmNl
TG9hZFN0YXRpc3RpY3MoKTsKKyAgICBpZiAoIXN0b3JlKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgc3RvcmUtPnNldExhc3RTZWVuKFNlY29uZHMgeyBzZWNvbmRzIH0sIFVSTChVUkwoKSwg
aG9zdCkpOworfQorCiAtICh2b2lkKV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0SXNQcmV2YWxl
bnRSZXNvdXJjZTooQk9PTCl2YWx1ZSBmb3JIb3N0OihOU1N0cmluZyAqKWhvc3QKIHsKICAgICBh
dXRvKiBzdG9yZSA9IF93ZWJzaXRlRGF0YVN0b3JlLT53ZWJzaXRlRGF0YVN0b3JlKCkucmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcygpOwpAQCAtMzQ1LDYgKzM1NCwyNCBAQCAtICh2b2lkKV9yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU2V0R3JhbmRmCiAgICAgc3RvcmUtPnNldEdyYW5kZmF0aGVyaW5nVGlt
ZShTZWNvbmRzIHtzZWNvbmRzIH0pOwogfQogCistICh2b2lkKV9yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU2V0TWF4U3RhdGlzdGljc0VudHJpZXM6KHNpemVfdCllbnRyaWVzCit7CisgICAgYXV0byog
c3RvcmUgPSBfd2Vic2l0ZURhdGFTdG9yZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnJlc291cmNlTG9h
ZFN0YXRpc3RpY3MoKTsKKyAgICBpZiAoIXN0b3JlKQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgc3RvcmUtPnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKGVudHJpZXMpOworfQorCistICh2b2lk
KV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0UHJ1bmVFbnRyaWVzRG93blRvOihzaXplX3QpZW50
cmllcworeworICAgIGF1dG8qIHN0b3JlID0gX3dlYnNpdGVEYXRhU3RvcmUtPndlYnNpdGVEYXRh
U3RvcmUoKS5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCk7CisgICAgaWYgKCFzdG9yZSkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIHN0b3JlLT5zZXRQcnVuZUVudHJpZXNEb3duVG8oZW50cmll
cyk7Cit9CisKIC0gKHZvaWQpX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJlRGF0YU1vZGlmaWNh
dGlvbkhhbmRsZXIKIHsKICAgICBhdXRvKiBzdG9yZSA9IF93ZWJzaXRlRGF0YVN0b3JlLT53ZWJz
aXRlRGF0YVN0b3JlKCkucmVzb3VyY2VMb2FkU3RhdGlzdGljcygpOwpAQCAtNDQwLDYgKzQ2Nyw4
IEBAIC0gKHZvaWQpX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NSZXNldFRvQ28KICAgICBpZiAoIXN0
b3JlKQogICAgICAgICByZXR1cm47CiAKKyAgICBzdG9yZS0+c2V0TWF4U3RhdGlzdGljc0VudHJp
ZXMoMTAwMCk7CisgICAgc3RvcmUtPnNldFBydW5lRW50cmllc0Rvd25Ubyg4MDApOwogICAgIHN0
b3JlLT5zZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKDI0X2ggKiAzMC4pOwogICAgIHN0b3Jl
LT5zZXRUaW1lVG9MaXZlQ29va2llUGFydGl0aW9uRnJlZSgyNF9oKTsKICAgICBzdG9yZS0+c2V0
TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKDFfaCk7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0
ZURhdGFTdG9yZVByaXZhdGUuaAkocmV2aXNpb24gMjE5MTI3KQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAgdHlwZWRlZiBOU19PUFRJT05TKE5TVUludGVnZXIsIF9X
S1dlYnNpdAogQHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0VuYWJsZWQ6KSBCT09MIF9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCBXS19B
UElfQVZBSUxBQkxFKG1hY29zeCgxMC4xMiksIGlvcygxMC4wKSk7CiAKIC8vIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3MgU1BJIGZvciB0ZXN0aW5nLgorLSAodm9pZClfcmVzb3VyY2VMb2FkU3RhdGlz
dGljc1NldExhc3RTZWVuOihkb3VibGUpc2Vjb25kcyBmb3JIb3N0OihOU1N0cmluZyAqKWhvc3Qg
V0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAt
ICh2b2lkKV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0SXNQcmV2YWxlbnRSZXNvdXJjZTooQk9P
TCl2YWx1ZSBmb3JIb3N0OihOU1N0cmluZyAqKWhvc3QgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3go
V0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAtICh2b2lkKV9yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzSXNQcmV2YWxlbnRSZXNvdXJjZTooTlNTdHJpbmcgKilob3N0IGNvbXBsZXRpb25IYW5k
bGVyOih2b2lkICheKShCT09MKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1h
Y29zeChXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKIC0gKHZvaWQpX3Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NTZXRIYWRVc2VySW50ZXJhY3Rpb246KEJPT0wpdmFsdWUgZm9ySG9zdDooTlNT
dHJpbmcgKilob3N0IFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tf
SU9TX1RCQSkpOwpAQCAtNTcsNiArNTgsOCBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50ZWdl
ciwgX1dLV2Vic2l0CiAtICh2b2lkKV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0VGltZVRvTGl2
ZUNvb2tpZVBhcnRpdGlvbkZyZWU6KGRvdWJsZSlzZWNvbmRzIFdLX0FQSV9BVkFJTEFCTEUobWFj
b3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogLSAodm9pZClfcmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1NldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbDooZG91Ymxl
KXNlY29uZHMgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1Nf
VEJBKSk7CiAtICh2b2lkKV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0R3JhbmRmYXRoZXJpbmdU
aW1lOihkb3VibGUpc2Vjb25kcyBXS19BUElfQVZBSUxBQkxFKG1hY29zeChXS19NQUNfVEJBKSwg
aW9zKFdLX0lPU19UQkEpKTsKKy0gKHZvaWQpX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTZXRNYXhT
dGF0aXN0aWNzRW50cmllczooc2l6ZV90KWVudHJpZXMgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3go
V0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU2V0UHJ1bmVFbnRyaWVzRG93blRvOihzaXplX3QpZW50cmllcyBXS19BUElfQVZBSUxB
QkxFKG1hY29zeChXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKIC0gKHZvaWQpX3Jlc291
cmNlTG9hZFN0YXRpc3RpY3NGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlM
QUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAtICh2b2lkKV9yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogLSAodm9p
ZClfcmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxl
ckZvck9uZURvbWFpbjooQk9PTCl2YWx1ZSBmb3JIb3N0OihOU1N0cmluZyAqKWhvc3QgV0tfQVBJ
X0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU3RvcmFnZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9TdG9yYWdlL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAJKHJldmlzaW9uIDIxOTEyNykKKysrIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9TdG9yYWdlL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDggQEAgc3RhdGljIFNlY29uZHMgdGltZVRv
TGl2ZVVzZXJJbnRlcmFjdGlvbgogc3RhdGljIFNlY29uZHMgdGltZVRvTGl2ZUNvb2tpZVBhcnRp
dGlvbkZyZWUgeyAyNF9oIH07CiBzdGF0aWMgU2Vjb25kcyBncmFuZGZhdGhlcmluZ1RpbWUgeyAx
X2ggfTsKIHN0YXRpYyBTZWNvbmRzIG1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3Zh
bCB7IDFfaCB9Oworc3RhdGljIHNpemVfdCBtYXhTdGF0aXN0aWNzRW50cmllcyA9IDEwMDA7Citz
dGF0aWMgc2l6ZV90IHBydW5lRW50cmllc0Rvd25UbyA9IDgwMDsKIAogUmVmPFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZT4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjcmVhdGUoKQog
ewpAQCAtMjg5LDcgKzI5MSwxNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
c2V0R3JhCiAgICAgaWYgKHNlY29uZHMgPj0gMF9zKQogICAgICAgICBncmFuZGZhdGhlcmluZ1Rp
bWUgPSBzZWNvbmRzOwogfQorICAgIAordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKHNpemVfdCBlbnRyaWVzKQoreworICAgIG1heFN0YXRp
c3RpY3NFbnRyaWVzID0gZW50cmllczsKK30KIAordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OnNldFBydW5lRW50cmllc0Rvd25UbyhzaXplX3QgZW50cmllcykKK3sKKyAgICBwcnVu
ZUVudHJpZXNEb3duVG8gPSBlbnRyaWVzOworfQorICAgIAogdm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnByb2Nlc3NTdGF0aXN0aWNzKFdURjo6RnVuY3Rpb248dm9pZChSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzJik+JiYgcHJvY2Vzc0Z1bmN0aW9uKQogewogICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOwpAQCAtNDEzLDQgKzQyNSw2NCBAQCB2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6ZGF0YVJlCiAgICAgbV9kYXRhUmVjb3Jkc1JlbW92YWxQZW5kaW5nID0g
ZmFsc2U7CiB9CiAgICAgCitzdHJ1Y3QgU3RhdGlzdGljc0xhc3RTZWVuIHsKKyAgICBTdHJpbmcg
dG9wUHJpdmF0ZWx5T3duZWREb21haW47CisgICAgV2FsbFRpbWUgbGFzdFNlZW47Cit9OworICAg
IAorc3RhdGljIHNpemVfdCBzb3J0QW5kUHJ1bmUoVmVjdG9yPFN0YXRpc3RpY3NMYXN0U2Vlbj4m
IHN0YXRpc3RpY3NUb1BydW5lLCBIYXNoTWFwPFN0cmluZywgV2ViQ29yZTo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljcz4mIHN0YXRpc3RpY3NNYXAsIHNpemVfdCBudW1iZXJPZkVudHJpZXNUb1BydW5l
KQoreworICAgIHN0ZDo6c29ydChzdGF0aXN0aWNzVG9QcnVuZS5iZWdpbigpLCBzdGF0aXN0aWNz
VG9QcnVuZS5lbmQoKSwgW10oY29uc3QgU3RhdGlzdGljc0xhc3RTZWVuJiBhLCBjb25zdCBTdGF0
aXN0aWNzTGFzdFNlZW4mIGIpIHsKKyAgICAgICAgcmV0dXJuIGEubGFzdFNlZW4gPCBiLmxhc3RT
ZWVuOworICAgIH0pOworICAgIAorICAgIGZvciAoYXV0byYgc3RhdGlzdGljIDogc3RhdGlzdGlj
c1RvUHJ1bmUpIHsKKyAgICAgICAgc3RhdGlzdGljc01hcC5yZW1vdmUoc3RhdGlzdGljLnRvcFBy
aXZhdGVseU93bmVkRG9tYWluKTsKKyAgICAgICAgaWYgKCEtLW51bWJlck9mRW50cmllc1RvUHJ1
bmUpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIG51bWJl
ck9mRW50cmllc1RvUHJ1bmU7Cit9CisgICAgCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6cHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOworICAgIGlmIChtX3Jlc291cmNlU3RhdGlzdGljc01hcC5zaXplKCkgPCBtYXhT
dGF0aXN0aWNzRW50cmllcykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHNpemVfdCBudW1i
ZXJPZkVudHJpZXNMZWZ0VG9QcnVuZSA9IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnNpemUoKSAt
IHBydW5lRW50cmllc0Rvd25UbzsKKyAgICAKKyAgICBWZWN0b3I8U3RhdGlzdGljc0xhc3RTZWVu
PiBub25QcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uOworICAgIFZlY3Rv
cjxTdGF0aXN0aWNzTGFzdFNlZW4+IHByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJh
Y3Rpb247CisgICAgVmVjdG9yPFN0YXRpc3RpY3NMYXN0U2Vlbj4gbm9uUHJldmFsZW50UmVzb3Vy
Y2VzV2l0aFVzZXJJbnRlcmFjdGlvbjsKKyAgICBWZWN0b3I8U3RhdGlzdGljc0xhc3RTZWVuPiBw
cmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uOworICAgIGZvciAoYXV0byYgcmVz
b3VyY2VTdGF0aXN0aWMgOiBtX3Jlc291cmNlU3RhdGlzdGljc01hcC52YWx1ZXMoKSkgeworICAg
ICAgICBpZiAoIXJlc291cmNlU3RhdGlzdGljLmlzUHJldmFsZW50UmVzb3VyY2UpIHsKKyAgICAg
ICAgICAgIGlmICghcmVzb3VyY2VTdGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uKQorICAgICAg
ICAgICAgICAgIG5vblByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24uYXBw
ZW5kKHsgcmVzb3VyY2VTdGF0aXN0aWMuaGlnaExldmVsRG9tYWluLCByZXNvdXJjZVN0YXRpc3Rp
Yy5sYXN0U2VlbiB9KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBub25QcmV2
YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uLmFwcGVuZCh7IHJlc291cmNlU3RhdGlz
dGljLmhpZ2hMZXZlbERvbWFpbiwgcmVzb3VyY2VTdGF0aXN0aWMubGFzdFNlZW4gfSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoIXJlc291cmNlU3RhdGlzdGljLmhhZFVzZXJJ
bnRlcmFjdGlvbikKKyAgICAgICAgICAgICAgICBwcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNl
ckludGVyYWN0aW9uLmFwcGVuZCh7IHJlc291cmNlU3RhdGlzdGljLmhpZ2hMZXZlbERvbWFpbiwg
cmVzb3VyY2VTdGF0aXN0aWMubGFzdFNlZW4gfSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgcHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbi5hcHBlbmQoeyBy
ZXNvdXJjZVN0YXRpc3RpYy5oaWdoTGV2ZWxEb21haW4sIHJlc291cmNlU3RhdGlzdGljLmxhc3RT
ZWVuIH0pOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIG51bWJlck9mRW50cmllc0xlZnRU
b1BydW5lID0gc29ydEFuZFBydW5lKG5vblByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50
ZXJhY3Rpb24sIG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLCBudW1iZXJPZkVudHJpZXNMZWZ0VG9Q
cnVuZSk7CisgICAgaWYgKCFudW1iZXJPZkVudHJpZXNMZWZ0VG9QcnVuZSkKKyAgICAgICAgcmV0
dXJuOworICAgIG51bWJlck9mRW50cmllc0xlZnRUb1BydW5lID0gc29ydEFuZFBydW5lKHByZXZh
bGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIG1fcmVzb3VyY2VTdGF0aXN0aWNz
TWFwLCBudW1iZXJPZkVudHJpZXNMZWZ0VG9QcnVuZSk7CisgICAgaWYgKCFudW1iZXJPZkVudHJp
ZXNMZWZ0VG9QcnVuZSkKKyAgICAgICAgcmV0dXJuOworICAgIG51bWJlck9mRW50cmllc0xlZnRU
b1BydW5lID0gc29ydEFuZFBydW5lKG5vblByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJh
Y3Rpb24sIG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLCBudW1iZXJPZkVudHJpZXNMZWZ0VG9QcnVu
ZSk7CisgICAgaWYgKCFudW1iZXJPZkVudHJpZXNMZWZ0VG9QcnVuZSkKKyAgICAgICAgcmV0dXJu
OworICAgIG51bWJlck9mRW50cmllc0xlZnRUb1BydW5lID0gc29ydEFuZFBydW5lKHByZXZhbGVu
dFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24sIG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLCBu
dW1iZXJPZkVudHJpZXNMZWZ0VG9QcnVuZSk7CisgICAgCisgICAgQVNTRVJUKCFudW1iZXJPZkVu
dHJpZXNMZWZ0VG9QcnVuZSk7Cit9CisgICAgCiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvU3RvcmFnZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU3RvcmFnZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUuaAkocmV2aXNpb24gMjE5MTI3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1N0
b3JhZ2UvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTg1
LDYgKzg1LDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0VGltZVRvTGl2ZUNvb2tpZVBhcnRpdGlv
bkZyZWUoU2Vjb25kcyk7CiAgICAgdm9pZCBzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jk
c1JlbW92YWwoU2Vjb25kcyk7CiAgICAgdm9pZCBzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25k
cyk7CisgICAgdm9pZCBzZXRNYXhTdGF0aXN0aWNzRW50cmllcyhzaXplX3QpOworICAgIHZvaWQg
c2V0UHJ1bmVFbnRyaWVzRG93blRvKHNpemVfdCk7CiAgICAgdm9pZCBmaXJlU2hvdWxkUGFydGl0
aW9uQ29va2llc0hhbmRsZXIoKTsKICAgICB2b2lkIGZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVz
SGFuZGxlcihjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWluc1RvUmVtb3ZlLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgZG9tYWluc1RvQWRkLCBib29sIGNsZWFyRmlyc3QpOwogCkBAIC0xMDAsNiAr
MTAyLDcgQEAgcHVibGljOgogICAgIHZvaWQgZGF0YVJlY29yZHNCZWluZ1JlbW92ZWQoKTsKICAg
ICB2b2lkIGRhdGFSZWNvcmRzV2VyZVJlbW92ZWQoKTsKIAorICAgIHZvaWQgcHJ1bmVTdGF0aXN0
aWNzSWZOZWVkZWQoKTsKIHByaXZhdGU6CiAgICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
KCkgPSBkZWZhdWx0OwogCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMTkyMTEpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwzNCBAQAorMjAxNy0wNy0wNiAgSm9obiBXaWxhbmRlciAgPHdp
bGFuZGVyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXNvdXJjZSBMb2FkIFN0YXRpc3RpY3M6IFBy
dW5lIHN0YXRpc3RpY3MgaW4gb3JkZXJzIG9mIGltcG9ydGFuY2UKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDIxNQorICAgICAgICA8cmRhcjovL3By
b2JsZW0vMzMxNjQ0MDM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgTmVzdCBpbmZyYXN0cnVjdHVyZS4gQWRkcyB0aGVzZSBmdW5jdGlvbnM6CisgICAg
ICAgIDEuIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc0xhc3RTZWVuKCkKKyAgICAgICAgMi4gc2V0
U3RhdGlzdGljc01heFN0YXRpc3RpY3NFbnRyaWVzKCkKKyAgICAgICAgMy4gc2V0U3RhdGlzdGlj
c1BydW5lRW50cmllc0Rvd25UbygpCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsOgorICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OnNldFN0YXRpc3RpY3NMYXN0U2Vlbik6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OnNldFN0YXRpc3RpY3NNYXhTdGF0aXN0aWNzRW50cmllcyk6CisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OnNldFN0YXRpc3RpY3NQcnVuZUVudHJpZXNEb3duVG8pOgorICAgICAgICAqIFdlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oOgorICAgICAgICAqIFdlYktp
dFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJv
bGxlcjo6c2V0U3RhdGlzdGljc0xhc3RTZWVuKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xs
ZXI6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xs
ZXI6OnNldFBydW5lRW50cmllc0Rvd25Ubyk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0Q29udHJvbGxlci5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRp
b24uY3BwOgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9u
b3VzTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZSk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5l
ci9jb2NvYS9UZXN0Q29udHJvbGxlckNvY29hLm1tOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJv
bGxlcjo6c2V0U3RhdGlzdGljc0xhc3RTZWVuKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xs
ZXI6OnNldFN0YXRpc3RpY3NNYXhTdGF0aXN0aWNzRW50cmllcyk6CisgICAgICAgIChXVFI6OlRl
c3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzUHJ1bmVFbnRyaWVzRG93blRvKToKKwogMjAxNy0w
Ny0wNiAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
VW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIxOTE5NC4KSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyMTkxMjcpCisrKyBUb29scy9XZWJL
aXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI0OSw2
ICsyMjQ5LDEwIEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJlbW92ZUFsbFNlc3Npb25DcmUKIAog
I2lmICFQTEFURk9STShDT0NPQSkgfHwgIVdLX0FQSV9FTkFCTEVECiAKK3ZvaWQgVGVzdENvbnRy
b2xsZXI6OnNldFN0YXRpc3RpY3NMYXN0U2VlbihXS1N0cmluZ1JlZiwgZG91YmxlKQoreworfQor
ICAgIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNl
KFdLU3RyaW5nUmVmLCBib29sKQogewogfQpAQCAtMjMzMiw2ICsyMzM2LDE0IEBAIHZvaWQgVGVz
dENvbnRyb2xsZXI6OnNldFN0YXRpc3RpY3NHcmFuZGYKIHsKIH0KIAordm9pZCBUZXN0Q29udHJv
bGxlcjo6c2V0TWF4U3RhdGlzdGljc0VudHJpZXModW5zaWduZWQpCit7Cit9CisgICAgCit2b2lk
IFRlc3RDb250cm9sbGVyOjpzZXRQcnVuZUVudHJpZXNEb3duVG8odW5zaWduZWQpCit7Cit9Cisg
ICAgCiB2b2lkIFRlc3RDb250cm9sbGVyOjpzdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNp
c3RlbnRTdG9yZSgpCiB7CiB9CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250
cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJv
bGxlci5oCShyZXZpc2lvbiAyMTkxMjcpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RD
b250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MCw2ICsxNTAsNyBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIHNldFNob3VsZERvd25sb2FkVW5kaXNwbGF5YWJsZU1JTUVUeXBlcyhib29sIHZh
bHVlKSB7IG1fc2hvdWxkRG93bmxvYWRVbmRpc3BsYXlhYmxlTUlNRVR5cGVzID0gdmFsdWU7IH0K
IAorICAgIHZvaWQgc2V0U3RhdGlzdGljc0xhc3RTZWVuKFdLU3RyaW5nUmVmIGhvc3ROYW1lLCBk
b3VibGUgc2Vjb25kcyk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2Uo
V0tTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpOwogICAgIGJvb2wgaXNTdGF0aXN0aWNz
UHJldmFsZW50UmVzb3VyY2UoV0tTdHJpbmdSZWYgaG9zdE5hbWUpOwogICAgIHZvaWQgc2V0U3Rh
dGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbihXS1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2
YWx1ZSk7CkBAIC0xNzAsNiArMTcxLDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0U3RhdGlzdGlj
c05vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKGJvb2wgdmFsdWUpOwogICAgIHZv
aWQgc2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChkb3Vi
bGUpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyaW5nVGltZShkb3VibGUgc2Vj
b25kcyk7CisgICAgdm9pZCBzZXRTdGF0aXN0aWNzTWF4U3RhdGlzdGljc0VudHJpZXModW5zaWdu
ZWQpOworICAgIHZvaWQgc2V0U3RhdGlzdGljc1BydW5lRW50cmllc0Rvd25Ubyh1bnNpZ25lZCk7
CiAgICAgdm9pZCBzdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSgpOwog
ICAgIHZvaWQgc3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmVNb2RpZmll
ZFNpbmNlSG91cnModW5zaWduZWQpOwogICAgIHZvaWQgc3RhdGlzdGljc1Jlc2V0VG9Db25zaXN0
ZW50U3RhdGUoKTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24u
Y3BwCShyZXZpc2lvbiAyMTkxMjcpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZv
Y2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEyLDYgKzkxMiwyMSBAQCBXS1JldGFpblB0
cjxXS1R5cGVSZWY+IFRlc3RJbnZvY2F0aW9uOjpkCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgfQogCisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJTZXRTdGF0aXN0aWNzTGFzdFNlZW4iKSkgeworICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQo
bWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKKyAgICAgICAgCisgICAg
ICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxX
S0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IGhvc3ROYW1lS2V5KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJIb3N0TmFtZSIpKTsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHZhbHVlS2V5
KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIpKTsKKyAgICAg
ICAgCisgICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdS
ZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0
TmFtZUtleS5nZXQoKSkpOworICAgICAgICBXS0RvdWJsZVJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0
PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgdmFsdWVLZXkuZ2V0KCkpKTsKKyAgICAgICAgCisgICAgICAgIFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzTGFzdFNlZW4oaG9zdE5hbWUsIFdLRG91YmxlR2V0
VmFsdWUodmFsdWUpKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0K
KyAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwg
IlNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZSIpKSB7CiAgICAgICAgIEFTU0VSVChXS0dl
dFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwogCkBAIC0x
MTAxLDYgKzExMTYsMjAgQEAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0SW52b2NhdGlvbjo6
ZAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCisgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRNYXhTdGF0aXN0aWNzRW50cmll
cyIpKSB7CisgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tVSW50
NjRHZXRUeXBlSUQoKSk7CisgICAgICAgIFdLVUludDY0UmVmIGVudHJpZXMgPSBzdGF0aWNfY2Fz
dDxXS1VJbnQ2NFJlZj4obWVzc2FnZUJvZHkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkuc2V0U3RhdGlzdGljc01heFN0YXRpc3RpY3NFbnRyaWVzKFdLVUludDY0R2V0VmFs
dWUoZW50cmllcykpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCisgICAg
aWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRQcnVuZUVu
dHJpZXNEb3duVG8iKSkgeworICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkp
ID09IFdLVUludDY0R2V0VHlwZUlEKCkpOworICAgICAgICBXS1VJbnQ2NFJlZiBlbnRyaWVzID0g
c3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NQcnVuZUVudHJpZXNEb3duVG8oV0tVSW50
NjRHZXRWYWx1ZShlbnRyaWVzKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAg
ICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlN0
YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlIikpIHsKICAgICAgICAgVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lz
dGVudFN0b3JlKCk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwpJbmRleDogVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwCShyZXZp
c2lvbiAyMTkxMjcpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rl
c3RSdW5uZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTc1LDYgKzExNzUsMzEgQEAgdm9pZCBU
ZXN0UnVubmVyOjpjYWxsRGlkUmVtb3ZlU3dpcGVTbmFwcwogICAgIGNhbGxUZXN0UnVubmVyQ2Fs
bGJhY2soRGlkUmVtb3ZlU3dpcGVTbmFwc2hvdENhbGxiYWNrSUQpOwogfQogCit2b2lkIFRlc3RS
dW5uZXI6OnNldFN0YXRpc3RpY3NMYXN0U2VlbihKU1N0cmluZ1JlZiBob3N0TmFtZSwgZG91Ymxl
IHNlY29uZHMpCit7CisgICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsK
KyAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOworICAgIAorICAgIGtl
eXMuYXBwZW5kKHsgQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3RO
YW1lIikgfSk7CisgICAgdmFsdWVzLmFwcGVuZCh7IEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0
aEpTU3RyaW5nKGhvc3ROYW1lKSB9KTsKKyAgICAKKyAgICBrZXlzLmFwcGVuZCh7IEFkb3B0V0ss
IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIpIH0pOworICAgIHZhbHVlcy5h
cHBlbmQoeyBBZG9wdFdLLCBXS0RvdWJsZUNyZWF0ZShzZWNvbmRzKSB9KTsKKyAgICAKKyAgICBW
ZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXMoa2V5cy5zaXplKCkpOworICAgIFZlY3RvcjxXS1R5
cGVSZWY+IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNb
aV0uZ2V0KCk7CisgICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKKyAgICB9
CisgICAgCisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ss
IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzTGFzdFNlZW4iKSk7
CisgICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keShBZG9wdFdLLCBX
S0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tl
eXMuc2l6ZSgpKSk7CisgICAgCisgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1l
c3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKK30KKyAgICAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0
U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIHZh
bHVlKQogewogICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7CkBAIC0x
NDkxLDYgKzE1MTYsMjAgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzR3JhbmRmYXRo
ZQogICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwg
bnVsbHB0cik7CiB9CiAKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc01heFN0YXRpc3Rp
Y3NFbnRyaWVzKHVuc2lnbmVkIGVudHJpZXMpCit7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJT
ZXRNYXhTdGF0aXN0aWNzRW50cmllcyIpKTsKKyAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IG1l
c3NhZ2VCb2R5KEFkb3B0V0ssIFdLVUludDY0Q3JlYXRlKGVudHJpZXMpKTsKKyAgICBXS0J1bmRs
ZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRs
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworfQor
ICAgIAordm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzUHJ1bmVFbnRyaWVzRG93blRvKHVu
c2lnbmVkIGVudHJpZXMpCit7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VO
YW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRQcnVuZUVudHJp
ZXNEb3duVG8iKSk7CisgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBtZXNzYWdlQm9keShBZG9w
dFdLLCBXS1VJbnQ2NENyZWF0ZShlbnRyaWVzKSk7CisgICAgV0tCdW5kbGVQb3N0U3luY2hyb25v
dXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKK30KKyAgICAKIHZvaWQgVGVz
dFJ1bm5lcjo6c3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUoKQogewog
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0
ZW50U3RvcmUiKSk7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L1Rlc3RSdW5uZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL1Rlc3RSdW5uZXIuaAkocmV2aXNpb24gMjE5MTI3KQorKysgVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM1Nyw2ICszNTcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdGF0aXN0aWNzRmlyZVNob3VsZFBh
cnRpdGlvbkNvb2tpZXNIYW5kbGVyKCk7CiAgICAgdm9pZCBzdGF0aXN0aWNzRmlyZVNob3VsZFBh
cnRpdGlvbkNvb2tpZXNIYW5kbGVyRm9yT25lRG9tYWluKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBi
b29sIHZhbHVlKTsKICAgICB2b2lkIHN0YXRpc3RpY3NGaXJlVGVsZW1ldHJ5SGFuZGxlcigpOwor
ICAgIHZvaWQgc2V0U3RhdGlzdGljc0xhc3RTZWVuKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBkb3Vi
bGUgc2Vjb25kcyk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoSlNT
dHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpOwogICAgIGJvb2wgaXNTdGF0aXN0aWNzUHJl
dmFsZW50UmVzb3VyY2UoSlNTdHJpbmdSZWYgaG9zdE5hbWUpOwogICAgIHZvaWQgc2V0U3RhdGlz
dGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbihKU1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1
ZSk7CkBAIC0zNzMsNiArMzc0LDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0U3RhdGlzdGljc05v
dGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKGJvb2wgdmFsdWUpOwogICAgIHZvaWQg
c2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChkb3VibGUp
OwogICAgIHZvaWQgc2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyaW5nVGltZShkb3VibGUgc2Vjb25k
cyk7CisgICAgdm9pZCBzZXRTdGF0aXN0aWNzTWF4U3RhdGlzdGljc0VudHJpZXModW5zaWduZWQp
OworICAgIHZvaWQgc2V0U3RhdGlzdGljc1BydW5lRW50cmllc0Rvd25Ubyh1bnNpZ25lZCk7CiAg
ICAgdm9pZCBzdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSgpOwogICAg
IHZvaWQgc3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmVNb2RpZmllZFNp
bmNlSG91cnModW5zaWduZWQgaG91cnMpOwogICAgIHZvaWQgc3RhdGlzdGljc1Jlc2V0VG9Db25z
aXN0ZW50U3RhdGUoKTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvQmluZGluZ3MvVGVzdFJ1bm5lci5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbAkocmV2aXNpb24g
MjE5MTI3KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5n
cy9UZXN0UnVubmVyLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjU0LDYgKzI1NCw3IEBAIGludGVy
ZmFjZSBUZXN0UnVubmVyIHsKICAgICB2b2lkIGluc3RhbGxTdGF0aXN0aWNzRGlkTW9kaWZ5RGF0
YVJlY29yZHNDYWxsYmFjayhvYmplY3QgY2FsbGJhY2spOwogICAgIHZvaWQgaW5zdGFsbFN0YXRp
c3RpY3NEaWRTY2FuRGF0YVJlY29yZHNDYWxsYmFjayhvYmplY3QgY2FsbGJhY2spOwogICAgIHZv
aWQgaW5zdGFsbFN0YXRpc3RpY3NEaWRSdW5UZWxlbWV0cnlDYWxsYmFjayhvYmplY3QgY2FsbGJh
Y2spOworICAgIHZvaWQgc2V0U3RhdGlzdGljc0xhc3RTZWVuKERPTVN0cmluZyBob3N0TmFtZSwg
ZG91YmxlIHNlY29uZHMpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNl
KERPTVN0cmluZyBob3N0TmFtZSwgYm9vbGVhbiB2YWx1ZSk7CiAgICAgYm9vbGVhbiBpc1N0YXRp
c3RpY3NQcmV2YWxlbnRSZXNvdXJjZShET01TdHJpbmcgaG9zdE5hbWUpOwogICAgIHZvaWQgc2V0
U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbihET01TdHJpbmcgaG9zdE5hbWUsIGJvb2xl
YW4gdmFsdWUpOwpAQCAtMjc0LDYgKzI3NSw4IEBAIGludGVyZmFjZSBUZXN0UnVubmVyIHsKICAg
ICB2b2lkIHNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZChi
b29sZWFuIHZhbHVlKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NNaW5pbXVtVGltZUJldHdlZW5E
YXRhUmVjb3Jkc1JlbW92YWwoZG91YmxlIHNlY29uZHMpOwogICAgIHZvaWQgc2V0U3RhdGlzdGlj
c0dyYW5kZmF0aGVyaW5nVGltZShkb3VibGUgc2Vjb25kcyk7CisgICAgdm9pZCBzZXRTdGF0aXN0
aWNzTWF4U3RhdGlzdGljc0VudHJpZXModW5zaWduZWQgbG9uZyBlbnRyaWVzKTsKKyAgICB2b2lk
IHNldFN0YXRpc3RpY3NQcnVuZUVudHJpZXNEb3duVG8odW5zaWduZWQgbG9uZyBlbnRyaWVzKTsK
ICAgICB2b2lkIHN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlKCk7CiAg
ICAgdm9pZCBzdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZU1vZGlmaWVk
U2luY2VIb3Vycyh1bnNpZ25lZCBsb25nIGhvdXJzKTsKICAgICB2b2lkIHN0YXRpc3RpY3NSZXNl
dFRvQ29uc2lzdGVudFN0YXRlKCk7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29h
L1Rlc3RDb250cm9sbGVyQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9jb2NvYS9UZXN0Q29udHJvbGxlckNvY29hLm1tCShyZXZpc2lvbiAyMTkxMjcpCisrKyBU
b29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29jb2EubW0JKHdvcmtp
bmcgY29weSkKQEAgLTIyMiw2ICsyMjIsMTEgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cmVtb3Zl
QWxsU2Vzc2lvbkNyZQogfQogCiAjaWYgV0tfQVBJX0VOQUJMRUQKK3ZvaWQgVGVzdENvbnRyb2xs
ZXI6OnNldFN0YXRpc3RpY3NMYXN0U2VlbihXS1N0cmluZ1JlZiBob3N0TmFtZSwgZG91YmxlIHNl
Y29uZHMpCit7CisgICAgW2dsb2JhbFdlYlZpZXdDb25maWd1cmF0aW9uLndlYnNpdGVEYXRhU3Rv
cmUgX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTZXRMYXN0U2VlbjpzZWNvbmRzIGZvckhvc3Q6dG9O
U1N0cmluZyhob3N0TmFtZSldOworfQorICAgIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0U3Rh
dGlzdGljc1ByZXZhbGVudFJlc291cmNlKFdLU3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIHZhbHVl
KQogewogICAgIFtnbG9iYWxXZWJWaWV3Q29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlIF9y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0SXNQcmV2YWxlbnRSZXNvdXJjZTp2YWx1ZSBmb3JIb3N0
OnRvTlNTdHJpbmcoaG9zdE5hbWUpXTsKQEAgLTM0Niw2ICszNTEsMTYgQEAgdm9pZCBUZXN0Q29u
dHJvbGxlcjo6c2V0U3RhdGlzdGljc0dyYW5kZgogICAgIFtnbG9iYWxXZWJWaWV3Q29uZmlndXJh
dGlvbi53ZWJzaXRlRGF0YVN0b3JlIF9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0R3JhbmRmYXRo
ZXJpbmdUaW1lOnNlY29uZHNdOwogfQogCit2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0
aWNzTWF4U3RhdGlzdGljc0VudHJpZXModW5zaWduZWQgZW50cmllcykKK3sKKyAgICBbZ2xvYmFs
V2ViVmlld0NvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSBfcmVzb3VyY2VMb2FkU3RhdGlz
dGljc1NldE1heFN0YXRpc3RpY3NFbnRyaWVzOmVudHJpZXNdOworfQorICAgIAordm9pZCBUZXN0
Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc1BydW5lRW50cmllc0Rvd25Ubyh1bnNpZ25lZCBlbnRy
aWVzKQoreworICAgIFtnbG9iYWxXZWJWaWV3Q29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3Jl
IF9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0UHJ1bmVFbnRyaWVzRG93blRvOmVudHJpZXNdOwor
fQorICAgIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6c3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQ
ZXJzaXN0ZW50U3RvcmUoKQogewogICAgIFtnbG9iYWxXZWJWaWV3Q29uZmlndXJhdGlvbi53ZWJz
aXRlRGF0YVN0b3JlIF9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNp
c3RlbnRTdG9yZV07CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMTkxMjcpCisrKyBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxNy0wNy0wNiAgSm9o
biBXaWxhbmRlciAgPHdpbGFuZGVyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXNvdXJjZSBMb2Fk
IFN0YXRpc3RpY3M6IFBydW5lIHN0YXRpc3RpY3MgaW4gb3JkZXJzIG9mIGltcG9ydGFuY2UKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDIxNQorICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vMzMxNjQ0MDM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2Fk
U3RhdGlzdGljcy9wcnVuZS1zdGF0aXN0aWNzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcHJ1bmUtc3RhdGlz
dGljcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS93azIvVGVzdEV4cGVjdGF0aW9u
czoKKyAgICAgICAgICAgIEFkZGVkIGh0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzL3BydW5lLXN0YXRpc3RpY3MuaHRtbCBhcworICAgICAgICAgICAgWyBQYXNzIF0gc2lu
Y2UgUmVzb3VyY2UgTG9hZCBTdGF0aXN0aWNzIGlzIFdLMi1vbmx5LgorCiAyMDE3LTA3LTA1ICBZ
b3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZWNlaXZpbmcgdHJh
Y2tzIHNob3VsZCBiZSBlbmRlZCB3aGVuIHBlZXIgY29ubmVjdGlvbiBpcyBiZWluZyBjbG9zZWQK
SW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzL3BydW5lLXN0YXRpc3RpY3MtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3BydW5lLXN0YXRp
c3RpY3MtZXhwZWN0ZWQudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVz
dHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3BydW5lLXN0YXRpc3RpY3MtZXhwZWN0
ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjMgQEAKK21haW4gZnJhbWUgLSBkaWRT
dGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lCittYWluIGZyYW1lIC0gZGlkQ29tbWl0TG9hZEZv
ckZyYW1lCittYWluIGZyYW1lIC0gZGlkUmVjZWl2ZVRpdGxlOiBUZXN0IGZvciBSZXNvdXJjZSBM
b2FkIFN0YXRpc3RpY3MgUHJ1bmluZworbWFpbiBmcmFtZSAtIGRpZEZpbmlzaERvY3VtZW50TG9h
ZEZvckZyYW1lCittYWluIGZyYW1lIC0gZGlkSGFuZGxlT25sb2FkRXZlbnRzRm9yRnJhbWUKK21h
aW4gZnJhbWUgLSBkaWRGaW5pc2hMb2FkRm9yRnJhbWUKK1Rlc3RzIHRoYXQgc3RhdGlzdGljcyBh
cmUgcHJ1bmVkIGluIHRoZSByaWdodCBvcmRlci4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2Vl
IGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUi
LgorCisKK1BBU1MgVGVzdCBpdGVyYXRpb24gMSBwYXNzZWQuCitQQVNTIFRlc3QgaXRlcmF0aW9u
IDIgcGFzc2VkLgorUEFTUyBUZXN0IGl0ZXJhdGlvbiAzIHBhc3NlZC4KK1BBU1MgVGVzdCBpdGVy
YXRpb24gNCBwYXNzZWQuCitQQVNTIFRlc3QgaXRlcmF0aW9uIDUgcGFzc2VkLgorUEFTUyBUZXN0
IGl0ZXJhdGlvbiA2IHBhc3NlZC4KK1BBU1MgVGVzdCBpdGVyYXRpb24gNyBwYXNzZWQuCitQQVNT
IFRlc3QgaXRlcmF0aW9uIDggcGFzc2VkLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGlu
Zy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3BydW5lLXN0YXRpc3RpY3MuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGlj
cy9wcnVuZS1zdGF0aXN0aWNzLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcHJ1bmUtc3RhdGlzdGljcy5o
dG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPGhlYWQ+CisgICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiPgorICAgIDx0aXRsZT5UZXN0
IGZvciBSZXNvdXJjZSBMb2FkIFN0YXRpc3RpY3MgUHJ1bmluZzwvdGl0bGU+CisgICAgPHNjcmlw
dCBzcmM9Ii9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5PgorPHNjcmlwdD4KKyAgICBkZXNjcmlwdGlvbigiVGVzdHMgdGhhdCBzdGF0aXN0aWNz
IGFyZSBwcnVuZWQgaW4gdGhlIHJpZ2h0IG9yZGVyLiIpOworICAgIGpzVGVzdElzQXN5bmMgPSB0
cnVlOworCisgICAgY29uc3Qgb2xkZXJUaW1lc3RhbXAgPSBNYXRoLnJvdW5kKChuZXcgRGF0ZSgp
KS5nZXRUaW1lKCkgLyAxMDAwKTsKKyAgICBjb25zdCBuZXdlclRpbWVzdGFtcCA9IG9sZGVyVGlt
ZXN0YW1wICsgMTA7CisgICAgY29uc3QgbmV3ZXN0VGltZXN0YW1wID0gbmV3ZXJUaW1lc3RhbXAg
KyAxMDsKKworICAgIGNvbnN0IHVybHNUb0JlUHJ1bmVkID0gWworICAgICAgICB7IHVybDogImh0
dHA6Ly8xMjcuMC4wLjE6ODAwMC90ZW1wIiwgcHJldmFsZW50OiBmYWxzZSB9LAorICAgICAgICB7
IHVybDogImh0dHA6Ly8xMjcuMC4wLjI6ODAwMC90ZW1wIiwgcHJldmFsZW50OiBmYWxzZSB9LAor
ICAgICAgICB7IHVybDogImh0dHA6Ly8xMjcuMC4wLjM6ODAwMC90ZW1wIiwgcHJldmFsZW50OiB0
cnVlIH0sCisgICAgICAgIHsgdXJsOiAiaHR0cDovLzEyNy4wLjAuNDo4MDAwL3RlbXAiLCBwcmV2
YWxlbnQ6IHRydWUgfSwKKyAgICAgICAgeyB1cmw6ICJodHRwOi8vMTI3LjAuMC41OjgwMDAvdGVt
cCIsIHByZXZhbGVudDogZmFsc2UgfSwKKyAgICAgICAgeyB1cmw6ICJodHRwOi8vMTI3LjAuMC42
OjgwMDAvdGVtcCIsIHByZXZhbGVudDogZmFsc2UgfSwKKyAgICAgICAgeyB1cmw6ICJodHRwOi8v
MTI3LjAuMC43OjgwMDAvdGVtcCIsIHByZXZhbGVudDogdHJ1ZSB9LAorICAgICAgICB7IHVybDog
Imh0dHA6Ly8xMjcuMC4wLjg6ODAwMC90ZW1wIiwgcHJldmFsZW50OiB0cnVlIH0KKyAgICBdOwor
CisgICAgZnVuY3Rpb24gY2hlY2tJZlByZXZhbGVudEFjY29yZGluZ1RvSW5pdGlhbEV4cGVjdGF0
aW9uKGJlZ2luLCBlbmQpIHsKKyAgICAgICAgdmFyIGZhaWxlZCA9IGZhbHNlOworICAgICAgICBm
b3IgKHZhciBpID0gYmVnaW47IGkgPCBlbmQ7ICsraSkgeworICAgICAgICAgICAgaWYgKHRlc3RS
dW5uZXIuaXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UodXJsc1RvQmVQcnVuZWRbaV0udXJs
KSAhPT0gdXJsc1RvQmVQcnVuZWRbaV0ucHJldmFsZW50KSB7CisgICAgICAgICAgICAgICAgdGVz
dEZhaWxlZCgiY2hlY2tJZlByZXZhbGVudEFjY29yZGluZ1RvSW5pdGlhbEV4cGVjdGF0aW9uOiBU
ZXN0IGl0ZXJhdGlvbiAiICsgY3VycmVudFRlc3QgKyAiIGZhaWxlZC4gIiArIHVybHNUb0JlUHJ1
bmVkW2ldLnVybCArICh1cmxzVG9CZVBydW5lZFtpXS5wcmV2YWxlbnQgPyAiIHdhc24ndCAiIDog
IiB3YXMgIikgKyAicHJldmFsZW50Iik7CisgICAgICAgICAgICAgICAgZmFpbGVkID0gdHJ1ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoZmFpbGVkKQorICAgICAgICAg
ICAgZmluaXNoSlNUZXN0KCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gY2hlY2tJZlByZXZhbGVu
dChiZWdpbiwgZW5kLCBleHBlY3RlZCkgeworICAgICAgICB2YXIgZmFpbGVkID0gZmFsc2U7Cisg
ICAgICAgIGZvciAodmFyIGkgPSBiZWdpbjsgaSA8IGVuZDsgKytpKSB7CisgICAgICAgICAgICBp
ZiAodGVzdFJ1bm5lci5pc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZSh1cmxzVG9CZVBydW5l
ZFtpXS51cmwpICE9PSBleHBlY3RlZCkgeworICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoImNo
ZWNrSWZQcmV2YWxlbnQ6IFRlc3QgaXRlcmF0aW9uICIgKyBjdXJyZW50VGVzdCArICIgZmFpbGVk
LiAiICsgdXJsc1RvQmVQcnVuZWRbaV0udXJsICsgKGV4cGVjdGVkID8gIiB3YXNuJ3QgIiA6ICIg
d2FzICIpICsgInByZXZhbGVudCIpOworICAgICAgICAgICAgICAgIGZhaWxlZCA9IHRydWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZhaWxlZCkKKyAgICAgICAgICAg
IGZpbmlzaEpTVGVzdCgpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGluaXRpYWxpemVTdGF0aXN0
aWNzKCkgeworICAgICAgICB0ZXN0UnVubmVyLmluc3RhbGxTdGF0aXN0aWNzRGlkU2NhbkRhdGFS
ZWNvcmRzQ2FsbGJhY2soY2hlY2tTdGF0aXN0aWNzQWZ0ZXJQcnVuaW5nKTsKKworICAgICAgICAv
LyBOb24tcHJldmFsZW50IHdpdGhvdXQgdXNlciBpbnRlcmFjdGlvbiB0byBiZSBwcnVuZWQgZmly
c3QuCisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc0xhc3RTZWVuKHVybHNUb0JlUHJ1
bmVkWzBdLnVybCwgb2xkZXJUaW1lc3RhbXApOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRp
c3RpY3NMYXN0U2Vlbih1cmxzVG9CZVBydW5lZFsxXS51cmwsIG5ld2VyVGltZXN0YW1wKTsKKwor
ICAgICAgICAvLyBQcmV2YWxlbnQgd2l0aG91dCB1c2VyIGludGVyYWN0aW9uIHRvIGJlIHBydW5l
ZCBzZWNvbmQuCisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291
cmNlKHVybHNUb0JlUHJ1bmVkWzJdLnVybCwgdHJ1ZSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0
U3RhdGlzdGljc0xhc3RTZWVuKHVybHNUb0JlUHJ1bmVkWzJdLnVybCwgb2xkZXJUaW1lc3RhbXAp
OworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZSh1cmxz
VG9CZVBydW5lZFszXS51cmwsIHRydWUpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3Rp
Y3NMYXN0U2Vlbih1cmxzVG9CZVBydW5lZFszXS51cmwsIG5ld2VyVGltZXN0YW1wKTsKKworICAg
ICAgICAvLyBOb24tcHJldmFsZW50IHdpdGggdXNlciBpbnRlcmFjdGlvbiB0byBiZSBwcnVuZWQg
dGhpcmQuCisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFj
dGlvbih1cmxzVG9CZVBydW5lZFs0XS51cmwsIHRydWUpOworICAgICAgICB0ZXN0UnVubmVyLnNl
dFN0YXRpc3RpY3NMYXN0U2Vlbih1cmxzVG9CZVBydW5lZFs0XS51cmwsIG9sZGVyVGltZXN0YW1w
KTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9u
KHVybHNUb0JlUHJ1bmVkWzVdLnVybCwgdHJ1ZSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3Rh
dGlzdGljc0xhc3RTZWVuKHVybHNUb0JlUHJ1bmVkWzVdLnVybCwgbmV3ZXJUaW1lc3RhbXApOwor
CisgICAgICAgIC8vIFByZXZhbGVudCB3aXRoIHVzZXIgaW50ZXJhY3Rpb24gdG8gYmUgcHJ1bmVk
IGxhc3QuCisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNl
KHVybHNUb0JlUHJ1bmVkWzZdLnVybCwgdHJ1ZSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3Rh
dGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbih1cmxzVG9CZVBydW5lZFs2XS51cmwsIHRydWUp
OworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NMYXN0U2Vlbih1cmxzVG9CZVBydW5l
ZFs2XS51cmwsIG9sZGVyVGltZXN0YW1wKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0
aWNzUHJldmFsZW50UmVzb3VyY2UodXJsc1RvQmVQcnVuZWRbN10udXJsLCB0cnVlKTsKKyAgICAg
ICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKHVybHNUb0Jl
UHJ1bmVkWzddLnVybCwgdHJ1ZSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc0xh
c3RTZWVuKHVybHNUb0JlUHJ1bmVkWzddLnVybCwgbmV3ZXJUaW1lc3RhbXApOworCisgICAgICAg
IGNoZWNrSWZQcmV2YWxlbnRBY2NvcmRpbmdUb0luaXRpYWxFeHBlY3RhdGlvbigwLCB1cmxzVG9C
ZVBydW5lZC5sZW5ndGgpOworICAgIH0KKworICAgIHZhciBjdXJyZW50VGVzdDsKKyAgICBmdW5j
dGlvbiBjaGVja1N0YXRpc3RpY3NBZnRlclBydW5pbmcoKSB7CisgICAgICAgIC8vIFBydW5lZCBl
bnRyaWVzIHNob3VsZCBub3QgYmUgcHJldmFsZW50LgorICAgICAgICBjaGVja0lmUHJldmFsZW50
KDAsIGN1cnJlbnRUZXN0LCBmYWxzZSk7CisgICAgICAgIC8vIE5vbi1wcnVuZWQgZW50cmllcyBz
aG91bGQga2VlcCB0aGVpciBleHBlY3RlZCBzdGF0dXMuCisgICAgICAgIGNoZWNrSWZQcmV2YWxl
bnRBY2NvcmRpbmdUb0luaXRpYWxFeHBlY3RhdGlvbihjdXJyZW50VGVzdCwgdXJsc1RvQmVQcnVu
ZWQubGVuZ3RoKTsKKyAgICAgICAgdGVzdFBhc3NlZCgiVGVzdCBpdGVyYXRpb24gIiArIGN1cnJl
bnRUZXN0ICsgIiBwYXNzZWQuIik7CisgICAgICAgIGlmIChjdXJyZW50VGVzdCA8IHVybHNUb0Jl
UHJ1bmVkLmxlbmd0aCkgeworICAgICAgICAgICAgKytjdXJyZW50VGVzdDsKKyAgICAgICAgICAg
IHJ1blRlc3QoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZpbmlzaEpTVGVzdCgp
OworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICAgICAg
aW5pdGlhbGl6ZVN0YXRpc3RpY3MoKTsKKworICAgICAgICB2YXIgZmlsbGVyVXJsID0gImh0dHA6
Ly8xMjcuMC4iICsgY3VycmVudFRlc3QgKyAiLjE6ODAwMC90ZW1wIjsKKyAgICAgICAgdGVzdFJ1
bm5lci5zZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoZmlsbGVyVXJsLCB0cnVlKTsKKyAg
ICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKGZpbGxl
clVybCwgdHJ1ZSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc0xhc3RTZWVuKGZp
bGxlclVybCwgbmV3ZXN0VGltZXN0YW1wKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zdGF0aXN0aWNz
RmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CisgICAgfQorCisgICAgaWYgKHdpbmRvdy50
ZXN0UnVubmVyKSB7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1Nob3VsZENsYXNz
aWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGZhbHNlKTsKKyAgICAgICAgdGVz
dFJ1bm5lci5zZXRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFs
KDApOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRh
UmVjb3Jkc1dlcmVTY2FubmVkKHRydWUpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3Rp
Y3NNYXhTdGF0aXN0aWNzRW50cmllcyh1cmxzVG9CZVBydW5lZC5sZW5ndGgpOworICAgICAgICB0
ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NQcnVuZUVudHJpZXNEb3duVG8odXJsc1RvQmVQcnVuZWQu
bGVuZ3RoKTsKKworICAgICAgICBjdXJyZW50VGVzdCA9IDE7CisgICAgICAgIHJ1blRlc3QoKTsK
KyAgICB9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93azIvVGVzdEV4cGVjdGF0aW9ucwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93azIvVGVzdEV4cGVjdGF0aW9ucwko
cmV2aXNpb24gMjE5MTI3KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2syL1Rlc3RFeHBlY3Rh
dGlvbnMJKHdvcmtpbmcgY29weSkKQEAgLTcwNiw2ICs3MDYsNyBAQCBodHRwL3Rlc3RzL2xvYWRp
bmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljCiBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2Fk
U3RhdGlzdGljcy9jbGVhci1pbi1tZW1vcnktYW5kLXBlcnNpc3RlbnQtc3RvcmUuaHRtbCBbIFBh
c3MgXQogd2Via2l0Lm9yZy9iLzE3MjQ1MiBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2Fk
U3RhdGlzdGljcy9ncmFuZGZhdGhlcmluZy5odG1sIFsgUGFzcyBGYWlsdXJlIFRpbWVvdXQgXQog
d2Via2l0Lm9yZy9iLzE3MzQ5OSBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlz
dGljcy90ZWxlbWV0cnktZ2VuZXJhdGlvbi5odG1sIFsgUGFzcyBGYWlsdXJlIF0KK2h0dHAvdGVz
dHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3BydW5lLXN0YXRpc3RpY3MuaHRtbCBb
IFBhc3MgXQogCiAjIyMgRU5EIE9GICg1KSBQcm9ncmVzc2lvbnMsIGV4cGVjdGVkIHN1Y2Nlc3Nl
cyB0aGF0IGFyZSBleHBlY3RlZCBmYWlsdXJlcyBpbiBXZWJLaXQxLgogIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314767</attachid>
            <date>2017-07-06 16:02:07 -0700</date>
            <delta_ts>2017-07-06 16:31:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174215-20170706160138.patch</filename>
            <type>text/plain</type>
            <size>44536</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxOTIyMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDE3LTA3LTA2ICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIExvYWQgU3Rh
dGlzdGljczogUHJ1bmUgc3RhdGlzdGljcyBpbiBvcmRlcnMgb2YgaW1wb3J0YW5jZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0MjE1CisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS8zMzE2NDQwMz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUZXN0OiBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2Fk
U3RhdGlzdGljcy9wcnVuZS1zdGF0aXN0aWNzLmh0bWwKKworICAgICAgICAqIGxvYWRlci9SZXNv
dXJjZUxvYWRPYnNlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZWR1Y2VUaW1lUmVzb2x1
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nRnJhbWVO
YXZpZ2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dT
dWJyZXNvdXJjZUxvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OmxvZ1dlYlNvY2tldExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OmxvZ1VzZXJJbnRlcmFjdGlvbldpdGhSZWR1Y2VkVGltZVJlc29sdXRpb24pOgor
ICAgICAgICAgICAgTm93IGFsbCBzZXQgdGhlIG5ldyBzdGF0aXN0aWNzIGZpZWxkIGxhc3RTZWVu
LgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M6OmVuY29kZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljczo6dG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljczo6bWVyZ2UpOgorICAgICAgICAgICAgSGFuZGxpbmcgb2YgdGhl
IG5ldyBzdGF0aXN0aWNzIGZpZWxkIGxhc3RTZWVuLgorICAgICAgICAqIGxvYWRlci9SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzLmg6CisKIDIwMTctMDctMDYgIE15bGVzIEMuIE1heGZpZWxkICA8bW1h
eGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIyMTY5NDQpOiBGb250IGxv
YWRzIGNhbiBjYXVzZSBDaGluZXNlIGNoYXJhY3RlcnMgdG8gZHJhdyBhcyAubm90ZGVmCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAJKHJl
dmlzaW9uIDIxOTIxNCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNl
cnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDYgKzc5LDExIEBAIGJvb2wgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNob3VsZExvZyhQYWcKICAgICByZXR1cm4gU2V0dGluZ3M6OnJlc291cmNl
TG9hZFN0YXRpc3RpY3NFbmFibGVkKCkgJiYgIXBhZ2UtPnVzZXNFcGhlbWVyYWxTZXNzaW9uKCkg
JiYgbV9ub3RpZmljYXRpb25DYWxsYmFjazsKIH0KIAorc3RhdGljIFdhbGxUaW1lIHJlZHVjZVRp
bWVSZXNvbHV0aW9uKFdhbGxUaW1lIHRpbWUpCit7CisgICAgcmV0dXJuIFdhbGxUaW1lOjpmcm9t
UmF3U2Vjb25kcyhzdGQ6OmZsb29yKHRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKSAvIHRpbWVzdGFt
cFJlc29sdXRpb24pICogdGltZXN0YW1wUmVzb2x1dGlvbi5zZWNvbmRzKCkpOworfQorICAgIAog
dm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IEZyYW1l
JiBmcmFtZSwgY29uc3QgRnJhbWUmIHRvcEZyYW1lLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIG5l
d1JlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCiB7CiAg
ICAgQVNTRVJUKGZyYW1lLmRvY3VtZW50KCkpOwpAQCAtMTYwLDYgKzE2NSw4IEBAIHZvaWQgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ0ZyYW1lTmF2aWcKICAgICAgICAgfQogICAgIH0KIAorICAg
IHRhcmdldFN0YXRpc3RpY3MubGFzdFNlZW4gPSByZWR1Y2VUaW1lUmVzb2x1dGlvbihXYWxsVGlt
ZTo6bm93KCkpOworICAgIAogICAgIG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnNldCh0YXJnZXRQ
cmltYXJ5RG9tYWluLCBXVEZNb3ZlKHRhcmdldFN0YXRpc3RpY3MpKTsKIAogICAgIGlmIChzaG91
bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2spCkBAIC0yMjYsNiArMjMzLDggQEAgdm9pZCBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6bG9nU3VicmVzb3VyYwogICAgICAgICB0YXJnZXRTdGF0aXN0aWNz
LnN1YnJlc291cmNlSGFzQmVlblN1YnJlc291cmNlQ291bnREaXZpZGVkQnlUb3RhbE51bWJlck9m
T3JpZ2luc1Zpc2l0ZWQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KHRhcmdldFN0YXRpc3RpY3Muc3Vi
cmVzb3VyY2VIYXNCZWVuU3VicmVzb3VyY2VDb3VudCkgLyB0b3RhbFZpc2l0ZWQ7CiAgICAgfQog
CisgICAgdGFyZ2V0U3RhdGlzdGljcy5sYXN0U2VlbiA9IHJlZHVjZVRpbWVSZXNvbHV0aW9uKFdh
bGxUaW1lOjpub3coKSk7CisgICAgCiAgICAgbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuc2V0KHRh
cmdldFByaW1hcnlEb21haW4sIFdURk1vdmUodGFyZ2V0U3RhdGlzdGljcykpOwogCiAgICAgaWYg
KHNob3VsZENhbGxOb3RpZmljYXRpb25DYWxsYmFjaykKQEAgLTI3MSwxNSArMjgwLDEyIEBAIHZv
aWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1dlYlNvY2tldEwKIAogICAgIHRhcmdldFN0YXRp
c3RpY3Muc3VicmVzb3VyY2VIYXNCZWVuU3VicmVzb3VyY2VDb3VudERpdmlkZWRCeVRvdGFsTnVt
YmVyT2ZPcmlnaW5zVmlzaXRlZCA9IHN0YXRpY19jYXN0PGRvdWJsZT4odGFyZ2V0U3RhdGlzdGlj
cy5zdWJyZXNvdXJjZUhhc0JlZW5TdWJyZXNvdXJjZUNvdW50KSAvIHRvdGFsVmlzaXRlZDsKIAor
ICAgIHRhcmdldFN0YXRpc3RpY3MubGFzdFNlZW4gPSByZWR1Y2VUaW1lUmVzb2x1dGlvbihXYWxs
VGltZTo6bm93KCkpOworICAgIAogICAgIGlmIChzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJh
Y2spCiAgICAgICAgIHNjaGVkdWxlTm90aWZpY2F0aW9uSWZOZWVkZWQoKTsKIH0KIAotc3RhdGlj
IFdhbGxUaW1lIHJlZHVjZVRpbWVSZXNvbHV0aW9uKFdhbGxUaW1lIHRpbWUpCi17Ci0gICAgcmV0
dXJuIFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhzdGQ6OmZsb29yKHRpbWUuc2Vjb25kc1NpbmNl
RXBvY2goKSAvIHRpbWVzdGFtcFJlc29sdXRpb24pICogdGltZXN0YW1wUmVzb2x1dGlvbi5zZWNv
bmRzKCkpOwotfQotCiB2b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dVc2VySW50ZXJhY3Rp
b25XaXRoUmVkdWNlZFRpbWVSZXNvbHV0aW9uKGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkKIHsK
ICAgICBBU1NFUlQoZG9jdW1lbnQucGFnZSgpKTsKQEAgLTI5Nyw2ICszMDMsNyBAQCB2b2lkIFJl
c291cmNlTG9hZE9ic2VydmVyOjpsb2dVc2VySW50ZXJhCiAgICAgICAgIHJldHVybjsKIAogICAg
IHN0YXRpc3RpY3MuaGFkVXNlckludGVyYWN0aW9uID0gdHJ1ZTsKKyAgICBzdGF0aXN0aWNzLmxh
c3RTZWVuID0gbmV3VGltZTsKICAgICBzdGF0aXN0aWNzLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rp
b25UaW1lID0gbmV3VGltZTsKIAogICAgIHNjaGVkdWxlTm90aWZpY2F0aW9uSWZOZWVkZWQoKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cy5jcHAJKHJldmlzaW9uIDIxOTIxNCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsOCBAQCB2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3M6OmVuY29kZShLZXllCiB7CiAgICAgZW5jb2Rlci5lbmNv
ZGVTdHJpbmcoIlByZXZhbGVudFJlc291cmNlT3JpZ2luIiwgaGlnaExldmVsRG9tYWluKTsKICAg
ICAKKyAgICBlbmNvZGVyLmVuY29kZURvdWJsZSgibGFzdFNlZW4iLCBsYXN0U2Vlbi5zZWNvbmRz
U2luY2VFcG9jaCgpLnZhbHVlKCkpOworICAgIAogICAgIC8vIFVzZXIgaW50ZXJhY3Rpb24KICAg
ICBlbmNvZGVyLmVuY29kZUJvb2woImhhZFVzZXJJbnRlcmFjdGlvbiIsIGhhZFVzZXJJbnRlcmFj
dGlvbik7CiAgICAgZW5jb2Rlci5lbmNvZGVEb3VibGUoIm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rp
b24iLCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLnZh
bHVlKCkpOwpAQCAtMTkyLDYgKzE5NCwxNCBAQCBib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3M6
OmRlY29kZShLZXllCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUJvb2woImdyYW5kZmF0aGVyZWQi
LCBncmFuZGZhdGhlcmVkKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgaWYgKHZlcnNp
b24gPCA1KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBkb3VibGUgbGFzdFNlZW5U
aW1lQXNEb3VibGU7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZURvdWJsZSgibGFzdFNlZW4iLCBs
YXN0U2VlblRpbWVBc0RvdWJsZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBsYXN0U2Vl
biA9IFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhsYXN0U2VlblRpbWVBc0RvdWJsZSk7CisgICAg
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTIyNSw2ICsyMzUsMTAgQEAgU3RyaW5nIFJlc291
cmNlTG9hZFN0YXRpc3RpY3M6OnRvU3RyaW5nKAogewogICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRl
cjsKICAgICAKKyAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoImxhc3RTZWVuIik7CisgICAgYnVp
bGRlci5hcHBlbmROdW1iZXIobGFzdFNlZW4uc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKTsK
KyAgICBidWlsZGVyLmFwcGVuZCgnXG4nKTsKKyAgICAKICAgICAvLyBVc2VyIGludGVyYWN0aW9u
CiAgICAgYXBwZW5kQm9vbGVhbihidWlsZGVyLCAiaGFkVXNlckludGVyYWN0aW9uIiwgaGFkVXNl
ckludGVyYWN0aW9uKTsKICAgICBidWlsZGVyLmFwcGVuZCgnXG4nKTsKQEAgLTMxNyw2ICszMzEs
OSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3M6Om1lcmdlKGNvbnN0CiB7CiAgICAgQVNT
RVJUKG90aGVyLmhpZ2hMZXZlbERvbWFpbiA9PSBoaWdoTGV2ZWxEb21haW4pOwogCisgICAgaWYg
KGxhc3RTZWVuIDwgb3RoZXIubGFzdFNlZW4pCisgICAgICAgIGxhc3RTZWVuID0gb3RoZXIubGFz
dFNlZW47CisgICAgCiAgICAgaWYgKCFvdGhlci5oYWRVc2VySW50ZXJhY3Rpb24pIHsKICAgICAg
ICAgLy8gSWYgdXNlciBpbnRlcmFjdGlvbiBoYXMgYmVlbiByZXNldCBkbyBzbyBoZXJlIHRvby4K
ICAgICAgICAgLy8gRWxzZSwgZG8gbm90aGluZy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
bG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuaAkocmV2aXNpb24gMjE5MjE0KQorKysgU291
cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuaAkod29ya2luZyBjb3B5
KQpAQCAtNjEsNiArNjEsOSBAQCBzdHJ1Y3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyB7CiAKICAg
ICBTdHJpbmcgaGlnaExldmVsRG9tYWluOwogCisgICAgLy8gVGltZXN0YW1wLiBEZWZhdWx0IHZh
bHVlIGlzIG5lZ2F0aXZlLCAwIG1lYW5zIGl0IHdhcyByZXNldC4KKyAgICBXYWxsVGltZSBsYXN0
U2VlbiB7IFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcygtMSkgfTsKKyAgICAKICAgICAvLyBVc2Vy
IGludGVyYWN0aW9uCiAgICAgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb24geyBmYWxzZSB9OwogICAg
IC8vIFRpbWVzdGFtcC4gRGVmYXVsdCB2YWx1ZSBpcyBuZWdhdGl2ZSwgMCBtZWFucyBpdCB3YXMg
cmVzZXQuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMTkyMjIpCisrKyBTb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0OSBAQAorMjAxNy0wNy0wNiAg
Sm9obiBXaWxhbmRlciAgPHdpbGFuZGVyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXNvdXJjZSBM
b2FkIFN0YXRpc3RpY3M6IFBydW5lIHN0YXRpc3RpY3MgaW4gb3JkZXJzIG9mIGltcG9ydGFuY2UK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDIxNQor
ICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzMxNjQ0MDM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IGZ1bmN0aW9uYWxpdHkuIFBydW5lcyBzdGF0
aXN0aWNzIGluIHRoaXMgb3JkZXI6CisgICAgICAgIDEuIE5vbi1wcmV2YWxlbnQgcmVzb3VyY2Vz
IHdpdGhvdXQgdXNlciBpbnRlcmFjdGlvbi4KKyAgICAgICAgMi4gUHJldmFsZW50IHJlc291cmNl
cyB3aXRob3V0IHVzZXIgaW50ZXJhY3Rpb24uCisgICAgICAgIDMuIE5vbi1wcmV2YWxlbnQgcmVz
b3VyY2VzIHdpdGggdXNlciBpbnRlcmFjdGlvbi4KKyAgICAgICAgNC4gUHJldmFsZW50IHJlc291
cmNlcyB3aXRoIHVzZXIgaW50ZXJhY3Rpb24uCisKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFy
Z3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzPjo6ZW5jb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzPjo6ZGVjb2RlKToKKyAgICAgICAgICAgIEFkZGVkIHRpbWVzdGFt
cCBmaWVsZCBsYXN0U2Vlbi4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0
ZURhdGFTdG9yZS5tbToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU2V0TGFzdFNlZW46Zm9ySG9zdDpdKToKKyAgICAgICAgKC1bV0tXZWJzaXRl
RGF0YVN0b3JlIF9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0TWF4U3RhdGlzdGljc0VudHJpZXM6
XSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFTdG9yZSBfcmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1NldFBydW5lRW50cmllc0Rvd25UbzpdKToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3Jl
IF9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZV0pOgorICAgICAg
ICAgICAgVGVzdCBpbmZyYXN0cnVjdHVyZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29h
L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvU3RvcmFn
ZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKToKKyAgICAg
ICAgICAgIFRlc3QgaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKToKKyAgICAgICAgICAgIFRl
c3QgaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgIChXZWJLaXQ6OnNvcnRBbmRQcnVuZSk6CisgICAg
ICAgICAgICBDb252ZW5pZW5jZSBmdW5jdGlvbi4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCk6CisgICAgICAgICAg
ICBUaGUgbmV3IHBydW5pbmcgZnVuY3Rpb24uCisgICAgICAgICogVUlQcm9jZXNzL1N0b3JhZ2Uv
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3Jkcyk6
CisgICAgICAgICAgICBOb3cgY2FsbHMgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcnVu
ZVN0YXRpc3RpY3NJZk5lZWRlZCgpLgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnNldExhc3RTZWVuKToKKyAgICAgICAgICAgIFRlc3QgaW5mcmFzdHJ1
Y3R1cmUuCisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
c2V0TWF4U3RhdGlzdGljc0VudHJpZXMpOgorICAgICAgICAgICAgVGVzdCBpbmZyYXN0cnVjdHVy
ZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRQ
cnVuZUVudHJpZXNEb3duVG8pOgorICAgICAgICAgICAgVGVzdCBpbmZyYXN0cnVjdHVyZS4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmg6CisKIDIw
MTctMDctMDYgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAgICAg
W1dLMl0gUmVzb3VyY2VMb2FkU3RhdGlzdGljcyBzaG91bGQgYmF0Y2ggaXRzIHdyaXRlcwpJbmRl
eDogU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAJ
KHJldmlzaW9uIDIxOTIxNCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1l
bnRDb2RlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjQyLDYgKzIyNDIsOCBAQCB2b2lkIEFy
Z3VtZW50Q29kZXI8UmVzb3VyY2VMb2FkU3RhdGlzdGljCiB7CiAgICAgZW5jb2RlciA8PCBzdGF0
aXN0aWNzLmhpZ2hMZXZlbERvbWFpbjsKICAgICAKKyAgICBlbmNvZGVyIDw8IHN0YXRpc3RpY3Mu
bGFzdFNlZW4uc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpOworICAgIAogICAgIC8vIFVzZXIg
aW50ZXJhY3Rpb24KICAgICBlbmNvZGVyIDw8IHN0YXRpc3RpY3MuaGFkVXNlckludGVyYWN0aW9u
OwogICAgIGVuY29kZXIgPDwgc3RhdGlzdGljcy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGlt
ZS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCk7CkBAIC0yMjg0LDYgKzIyODYsMTEgQEAgYm9v
bCBBcmd1bWVudENvZGVyPFJlc291cmNlTG9hZFN0YXRpc3RpYwogICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUoc3RhdGlzdGljcy5oaWdoTGV2ZWxEb21haW4pKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgCisgICAgZG91YmxlIGxhc3RTZWVuVGltZUFzRG91YmxlOworICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUobGFzdFNlZW5UaW1lQXNEb3VibGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgc3RhdGlzdGljcy5sYXN0U2VlbiA9IFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhsYXN0U2Vl
blRpbWVBc0RvdWJsZSk7CisgICAgCiAgICAgLy8gVXNlciBpbnRlcmFjdGlvbgogICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoc3RhdGlzdGljcy5oYWRVc2VySW50ZXJhY3Rpb24pKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAkocmV2aXNpb24gMjE5MjE0
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OSw2ICsxOTksOCBAQCB2b2lkIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJvCiAgICAgICAgIH0KICAgICAgICAgcmVtb3ZlRGF0
YVJlY29yZHMoKTsKICAgICAgICAgCisgICAgICAgIGNvcmVTdG9yZSgpLnBydW5lU3RhdGlzdGlj
c0lmTmVlZGVkKCk7CisgICAgICAgIAogICAgICAgICBpZiAobm90aWZ5UGFnZXNXaGVuRGF0YVJl
Y29yZHNXZXJlU2Nhbm5lZCkgewogICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNo
KFtdICgpIG11dGFibGUgewogICAgICAgICAgICAgICAgIFdlYlByb2Nlc3NQcm94eTo6bm90aWZ5
UGFnZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NlZCgpOwpAQCAtNTcyLDYgKzU3NCwx
NyBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFzCiAgICAgfSk7CiB9
CiAKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRMYXN0U2VlbihTZWNv
bmRzIHNlY29uZHMsIGNvbnN0IFVSTCYgdXJsKQoreworICAgIGlmICh1cmwuaXNCbGFua1VSTCgp
IHx8IHVybC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX3N0YXRpc3Rp
Y3NRdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwg
dXJsID0gdXJsLmlzb2xhdGVkQ29weSgpLCBzZWNvbmRzXSB7CisgICAgICAgIGF1dG8mIHN0YXRp
c3RpY3MgPSBjb3JlU3RvcmUoKS5lbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9t
YWluKHByaW1hcnlEb21haW4odXJsKSk7CisgICAgICAgIHN0YXRpc3RpY3MubGFzdFNlZW4gPSBX
YWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoc2Vjb25kcy5zZWNvbmRzKCkpOworICAgIH0pOworfQor
ICAgIAogdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFByZXZhbGVudFJl
c291cmNlKGNvbnN0IFVSTCYgdXJsKQogewogICAgIGlmICh1cmwuaXNCbGFua1VSTCgpIHx8IHVy
bC5pc0VtcHR5KCkpCkBAIC03NDMsNCArNzU2LDE0IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpzZXQKICAgICBjb3JlU3RvcmUoKS5zZXRHcmFuZGZhdGhlcmluZ1RpbWUo
c2Vjb25kcyk7CiB9CiAgICAgCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
c2V0TWF4U3RhdGlzdGljc0VudHJpZXMoc2l6ZV90IGVudHJpZXMpCit7CisgICAgY29yZVN0b3Jl
KCkuc2V0TWF4U3RhdGlzdGljc0VudHJpZXMoZW50cmllcyk7Cit9CisgICAgCit2b2lkIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKHNpemVfdCBl
bnRyaWVzKQoreworICAgIGNvcmVTdG9yZSgpLnNldFBydW5lRW50cmllc0Rvd25UbyhlbnRyaWVz
KTsKK30KKyAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUu
aAkocmV2aXNpb24gMjE5MjE0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw2ICs3Nyw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIGxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBXZWJDb3JlOjpVUkwm
KTsKICAgICB2b2lkIGNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFdlYkNvcmU6OlVSTCYpOwog
ICAgIHZvaWQgaGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFdlYkNvcmU6OlVSTCYsIFdURjo6
RnVuY3Rpb248dm9pZCAoYm9vbCk+JiYpOworICAgIHZvaWQgc2V0TGFzdFNlZW4oU2Vjb25kcywg
Y29uc3QgV2ViQ29yZTo6VVJMJik7CiAgICAgdm9pZCBzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25z
dCBXZWJDb3JlOjpVUkwmKTsKICAgICB2b2lkIGlzUHJldmFsZW50UmVzb3VyY2UoY29uc3QgV2Vi
Q29yZTo6VVJMJiwgV1RGOjpGdW5jdGlvbjx2b2lkIChib29sKT4mJik7CiAgICAgdm9pZCBjbGVh
clByZXZhbGVudFJlc291cmNlKGNvbnN0IFdlYkNvcmU6OlVSTCYpOwpAQCAtOTgsNyArOTksOSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzZXRUaW1lVG9MaXZlQ29va2llUGFydGl0aW9uRnJlZShTZWNv
bmRzKTsKICAgICB2b2lkIHNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChT
ZWNvbmRzKTsKICAgICB2b2lkIHNldEdyYW5kZmF0aGVyaW5nVGltZShTZWNvbmRzKTsKLQorICAg
IHZvaWQgc2V0TWF4U3RhdGlzdGljc0VudHJpZXMoc2l6ZV90KTsKKyAgICB2b2lkIHNldFBydW5l
RW50cmllc0Rvd25UbyhzaXplX3QpOworICAgIAogcHJpdmF0ZToKICAgICBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUoY29uc3QgU3RyaW5nJiwgVXBkYXRlUGFydGl0aW9uQ29va2llc0Zv
ckRvbWFpbnNIYW5kbGVyJiYpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbQkocmV2aXNpb24gMjE5
MjE0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRh
U3RvcmUubW0JKHdvcmtpbmcgY29weSkKQEAgLTIwNyw2ICsyMDcsMTUgQEAgLSAodm9pZClfc2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZQogICAgIF93ZWJzaXRlRGF0YVN0b3JlLT53ZWJz
aXRlRGF0YVN0b3JlKCkuc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoZW5hYmxlZCk7
CiB9CiAKKy0gKHZvaWQpX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTZXRMYXN0U2VlbjooZG91Ymxl
KXNlY29uZHMgZm9ySG9zdDooTlNTdHJpbmcgKilob3N0Cit7CisgICAgYXV0byogc3RvcmUgPSBf
d2Vic2l0ZURhdGFTdG9yZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnJlc291cmNlTG9hZFN0YXRpc3Rp
Y3MoKTsKKyAgICBpZiAoIXN0b3JlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgc3RvcmUt
PnNldExhc3RTZWVuKFNlY29uZHMgeyBzZWNvbmRzIH0sIFVSTChVUkwoKSwgaG9zdCkpOworfQor
CiAtICh2b2lkKV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0SXNQcmV2YWxlbnRSZXNvdXJjZToo
Qk9PTCl2YWx1ZSBmb3JIb3N0OihOU1N0cmluZyAqKWhvc3QKIHsKICAgICBhdXRvKiBzdG9yZSA9
IF93ZWJzaXRlRGF0YVN0b3JlLT53ZWJzaXRlRGF0YVN0b3JlKCkucmVzb3VyY2VMb2FkU3RhdGlz
dGljcygpOwpAQCAtMzQ1LDYgKzM1NCwyNCBAQCAtICh2b2lkKV9yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU2V0R3JhbmRmCiAgICAgc3RvcmUtPnNldEdyYW5kZmF0aGVyaW5nVGltZShTZWNvbmRzIHtz
ZWNvbmRzIH0pOwogfQogCistICh2b2lkKV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0TWF4U3Rh
dGlzdGljc0VudHJpZXM6KHNpemVfdCllbnRyaWVzCit7CisgICAgYXV0byogc3RvcmUgPSBfd2Vi
c2l0ZURhdGFTdG9yZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnJlc291cmNlTG9hZFN0YXRpc3RpY3Mo
KTsKKyAgICBpZiAoIXN0b3JlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgc3RvcmUtPnNl
dE1heFN0YXRpc3RpY3NFbnRyaWVzKGVudHJpZXMpOworfQorCistICh2b2lkKV9yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU2V0UHJ1bmVFbnRyaWVzRG93blRvOihzaXplX3QpZW50cmllcworeworICAg
IGF1dG8qIHN0b3JlID0gX3dlYnNpdGVEYXRhU3RvcmUtPndlYnNpdGVEYXRhU3RvcmUoKS5yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzKCk7CisgICAgaWYgKCFzdG9yZSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIHN0b3JlLT5zZXRQcnVuZUVudHJpZXNEb3duVG8oZW50cmllcyk7Cit9CisKIC0g
KHZvaWQpX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIK
IHsKICAgICBhdXRvKiBzdG9yZSA9IF93ZWJzaXRlRGF0YVN0b3JlLT53ZWJzaXRlRGF0YVN0b3Jl
KCkucmVzb3VyY2VMb2FkU3RhdGlzdGljcygpOwpAQCAtNDQwLDYgKzQ2Nyw4IEBAIC0gKHZvaWQp
X3Jlc291cmNlTG9hZFN0YXRpc3RpY3NSZXNldFRvQ28KICAgICBpZiAoIXN0b3JlKQogICAgICAg
ICByZXR1cm47CiAKKyAgICBzdG9yZS0+c2V0TWF4U3RhdGlzdGljc0VudHJpZXMoMTAwMCk7Cisg
ICAgc3RvcmUtPnNldFBydW5lRW50cmllc0Rvd25Ubyg4MDApOwogICAgIHN0b3JlLT5zZXRUaW1l
VG9MaXZlVXNlckludGVyYWN0aW9uKDI0X2ggKiAzMC4pOwogICAgIHN0b3JlLT5zZXRUaW1lVG9M
aXZlQ29va2llUGFydGl0aW9uRnJlZSgyNF9oKTsKICAgICBzdG9yZS0+c2V0TWluaW11bVRpbWVC
ZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKDFfaCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVBy
aXZhdGUuaAkocmV2aXNpb24gMjE5MjE0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0
LDYgKzQ0LDcgQEAgdHlwZWRlZiBOU19PUFRJT05TKE5TVUludGVnZXIsIF9XS1dlYnNpdAogQHBy
b3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJs
ZWQ6KSBCT09MIF9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCBXS19BUElfQVZBSUxBQkxF
KG1hY29zeCgxMC4xMiksIGlvcygxMC4wKSk7CiAKIC8vIFJlc291cmNlTG9hZFN0YXRpc3RpY3Mg
U1BJIGZvciB0ZXN0aW5nLgorLSAodm9pZClfcmVzb3VyY2VMb2FkU3RhdGlzdGljc1NldExhc3RT
ZWVuOihkb3VibGUpc2Vjb25kcyBmb3JIb3N0OihOU1N0cmluZyAqKWhvc3QgV0tfQVBJX0FWQUlM
QUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAtICh2b2lkKV9yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU2V0SXNQcmV2YWxlbnRSZXNvdXJjZTooQk9PTCl2YWx1ZSBmb3JI
b3N0OihOU1N0cmluZyAqKWhvc3QgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSks
IGlvcyhXS19JT1NfVEJBKSk7CiAtICh2b2lkKV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzSXNQcmV2
YWxlbnRSZXNvdXJjZTooTlNTdHJpbmcgKilob3N0IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkIChe
KShCT09MKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zeChXS19NQUNf
VEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKIC0gKHZvaWQpX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NT
ZXRIYWRVc2VySW50ZXJhY3Rpb246KEJPT0wpdmFsdWUgZm9ySG9zdDooTlNTdHJpbmcgKilob3N0
IFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwpA
QCAtNTcsNiArNTgsOCBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dLV2Vic2l0
CiAtICh2b2lkKV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0VGltZVRvTGl2ZUNvb2tpZVBhcnRp
dGlvbkZyZWU6KGRvdWJsZSlzZWNvbmRzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19U
QkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogLSAodm9pZClfcmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nl
dE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbDooZG91YmxlKXNlY29uZHMgV0tf
QVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAtICh2
b2lkKV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0R3JhbmRmYXRoZXJpbmdUaW1lOihkb3VibGUp
c2Vjb25kcyBXS19BUElfQVZBSUxBQkxFKG1hY29zeChXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19U
QkEpKTsKKy0gKHZvaWQpX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTZXRNYXhTdGF0aXN0aWNzRW50
cmllczooc2l6ZV90KWVudHJpZXMgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSks
IGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0UHJ1
bmVFbnRyaWVzRG93blRvOihzaXplX3QpZW50cmllcyBXS19BUElfQVZBSUxBQkxFKG1hY29zeChX
S19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKIC0gKHZvaWQpX3Jlc291cmNlTG9hZFN0YXRp
c3RpY3NGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3go
V0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAtICh2b2lkKV9yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogLSAodm9pZClfcmVzb3VyY2VM
b2FkU3RhdGlzdGljc0ZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlckZvck9uZURvbWFp
bjooQk9PTCl2YWx1ZSBmb3JIb3N0OihOU1N0cmluZyAqKWhvc3QgV0tfQVBJX0FWQUlMQUJMRSht
YWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvU3RvcmFnZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9TdG9yYWdlL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5jcHAJKHJldmlzaW9uIDIxOTIxNCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9TdG9yYWdlL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM5LDExICszOSwxMyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAKLXN0YXRpYyBjb25zdCBhdXRvIHN0YXRpc3RpY3NNb2RlbFZlcnNp
b24gPSA0Oworc3RhdGljIGNvbnN0IGF1dG8gc3RhdGlzdGljc01vZGVsVmVyc2lvbiA9IDU7CiBz
dGF0aWMgU2Vjb25kcyB0aW1lVG9MaXZlVXNlckludGVyYWN0aW9uIHsgMjRfaCAqIDMwLiB9Owog
c3RhdGljIFNlY29uZHMgdGltZVRvTGl2ZUNvb2tpZVBhcnRpdGlvbkZyZWUgeyAyNF9oIH07CiBz
dGF0aWMgU2Vjb25kcyBncmFuZGZhdGhlcmluZ1RpbWUgeyAxX2ggfTsKIHN0YXRpYyBTZWNvbmRz
IG1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCB7IDFfaCB9Oworc3RhdGljIHNp
emVfdCBtYXhTdGF0aXN0aWNzRW50cmllcyA9IDEwMDA7CitzdGF0aWMgc2l6ZV90IHBydW5lRW50
cmllc0Rvd25UbyA9IDgwMDsKIAogUmVmPFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjcmVhdGUoKQogewpAQCAtMjg5LDcgKzI5MSwxNyBA
QCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0R3JhCiAgICAgaWYgKHNlY29u
ZHMgPj0gMF9zKQogICAgICAgICBncmFuZGZhdGhlcmluZ1RpbWUgPSBzZWNvbmRzOwogfQorICAg
IAordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldE1heFN0YXRpc3RpY3NFbnRy
aWVzKHNpemVfdCBlbnRyaWVzKQoreworICAgIG1heFN0YXRpc3RpY3NFbnRyaWVzID0gZW50cmll
czsKK30KIAordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFBydW5lRW50cmll
c0Rvd25UbyhzaXplX3QgZW50cmllcykKK3sKKyAgICBwcnVuZUVudHJpZXNEb3duVG8gPSBlbnRy
aWVzOworfQorICAgIAogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnByb2Nlc3NT
dGF0aXN0aWNzKFdURjo6RnVuY3Rpb248dm9pZChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik+JiYg
cHJvY2Vzc0Z1bmN0aW9uKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwpAQCAt
NDEzLDQgKzQyNSw2NCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZGF0YVJl
CiAgICAgbV9kYXRhUmVjb3Jkc1JlbW92YWxQZW5kaW5nID0gZmFsc2U7CiB9CiAgICAgCitzdHJ1
Y3QgU3RhdGlzdGljc0xhc3RTZWVuIHsKKyAgICBTdHJpbmcgdG9wUHJpdmF0ZWx5T3duZWREb21h
aW47CisgICAgV2FsbFRpbWUgbGFzdFNlZW47Cit9OworICAgIAorc3RhdGljIHNpemVfdCBzb3J0
QW5kUHJ1bmUoVmVjdG9yPFN0YXRpc3RpY3NMYXN0U2Vlbj4mIHN0YXRpc3RpY3NUb1BydW5lLCBI
YXNoTWFwPFN0cmluZywgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4mIHN0YXRpc3Rp
Y3NNYXAsIHNpemVfdCBudW1iZXJPZkVudHJpZXNUb1BydW5lKQoreworICAgIHN0ZDo6c29ydChz
dGF0aXN0aWNzVG9QcnVuZS5iZWdpbigpLCBzdGF0aXN0aWNzVG9QcnVuZS5lbmQoKSwgW10oY29u
c3QgU3RhdGlzdGljc0xhc3RTZWVuJiBhLCBjb25zdCBTdGF0aXN0aWNzTGFzdFNlZW4mIGIpIHsK
KyAgICAgICAgcmV0dXJuIGEubGFzdFNlZW4gPCBiLmxhc3RTZWVuOworICAgIH0pOworICAgIAor
ICAgIGZvciAoYXV0byYgc3RhdGlzdGljIDogc3RhdGlzdGljc1RvUHJ1bmUpIHsKKyAgICAgICAg
c3RhdGlzdGljc01hcC5yZW1vdmUoc3RhdGlzdGljLnRvcFByaXZhdGVseU93bmVkRG9tYWluKTsK
KyAgICAgICAgaWYgKCEtLW51bWJlck9mRW50cmllc1RvUHJ1bmUpCisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIG51bWJlck9mRW50cmllc1RvUHJ1bmU7Cit9
CisgICAgCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJ1bmVTdGF0aXN0aWNz
SWZOZWVkZWQoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIGlmICht
X3Jlc291cmNlU3RhdGlzdGljc01hcC5zaXplKCkgPCBtYXhTdGF0aXN0aWNzRW50cmllcykKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIHNpemVfdCBudW1iZXJPZkVudHJpZXNMZWZ0VG9QcnVu
ZSA9IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnNpemUoKSAtIHBydW5lRW50cmllc0Rvd25UbzsK
KyAgICAKKyAgICBWZWN0b3I8U3RhdGlzdGljc0xhc3RTZWVuPiBub25QcmV2YWxlbnRSZXNvdXJj
ZXNXaXRob3V0VXNlckludGVyYWN0aW9uOworICAgIFZlY3RvcjxTdGF0aXN0aWNzTGFzdFNlZW4+
IHByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb247CisgICAgVmVjdG9yPFN0
YXRpc3RpY3NMYXN0U2Vlbj4gbm9uUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlv
bjsKKyAgICBWZWN0b3I8U3RhdGlzdGljc0xhc3RTZWVuPiBwcmV2YWxlbnRSZXNvdXJjZXNXaXRo
VXNlckludGVyYWN0aW9uOworICAgIGZvciAoYXV0byYgcmVzb3VyY2VTdGF0aXN0aWMgOiBtX3Jl
c291cmNlU3RhdGlzdGljc01hcC52YWx1ZXMoKSkgeworICAgICAgICBpZiAoIXJlc291cmNlU3Rh
dGlzdGljLmlzUHJldmFsZW50UmVzb3VyY2UpIHsKKyAgICAgICAgICAgIGlmICghcmVzb3VyY2VT
dGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uKQorICAgICAgICAgICAgICAgIG5vblByZXZhbGVu
dFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24uYXBwZW5kKHsgcmVzb3VyY2VTdGF0aXN0
aWMuaGlnaExldmVsRG9tYWluLCByZXNvdXJjZVN0YXRpc3RpYy5sYXN0U2VlbiB9KTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBub25QcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNl
ckludGVyYWN0aW9uLmFwcGVuZCh7IHJlc291cmNlU3RhdGlzdGljLmhpZ2hMZXZlbERvbWFpbiwg
cmVzb3VyY2VTdGF0aXN0aWMubGFzdFNlZW4gfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBpZiAoIXJlc291cmNlU3RhdGlzdGljLmhhZFVzZXJJbnRlcmFjdGlvbikKKyAgICAgICAg
ICAgICAgICBwcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLmFwcGVuZCh7
IHJlc291cmNlU3RhdGlzdGljLmhpZ2hMZXZlbERvbWFpbiwgcmVzb3VyY2VTdGF0aXN0aWMubGFz
dFNlZW4gfSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcHJldmFsZW50UmVz
b3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbi5hcHBlbmQoeyByZXNvdXJjZVN0YXRpc3RpYy5oaWdo
TGV2ZWxEb21haW4sIHJlc291cmNlU3RhdGlzdGljLmxhc3RTZWVuIH0pOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIG51bWJlck9mRW50cmllc0xlZnRUb1BydW5lID0gc29ydEFuZFBydW5l
KG5vblByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIG1fcmVzb3VyY2VT
dGF0aXN0aWNzTWFwLCBudW1iZXJPZkVudHJpZXNMZWZ0VG9QcnVuZSk7CisgICAgaWYgKCFudW1i
ZXJPZkVudHJpZXNMZWZ0VG9QcnVuZSkKKyAgICAgICAgcmV0dXJuOworICAgIG51bWJlck9mRW50
cmllc0xlZnRUb1BydW5lID0gc29ydEFuZFBydW5lKHByZXZhbGVudFJlc291cmNlc1dpdGhvdXRV
c2VySW50ZXJhY3Rpb24sIG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLCBudW1iZXJPZkVudHJpZXNM
ZWZ0VG9QcnVuZSk7CisgICAgaWYgKCFudW1iZXJPZkVudHJpZXNMZWZ0VG9QcnVuZSkKKyAgICAg
ICAgcmV0dXJuOworICAgIG51bWJlck9mRW50cmllc0xlZnRUb1BydW5lID0gc29ydEFuZFBydW5l
KG5vblByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24sIG1fcmVzb3VyY2VTdGF0
aXN0aWNzTWFwLCBudW1iZXJPZkVudHJpZXNMZWZ0VG9QcnVuZSk7CisgICAgaWYgKCFudW1iZXJP
ZkVudHJpZXNMZWZ0VG9QcnVuZSkKKyAgICAgICAgcmV0dXJuOworICAgIG51bWJlck9mRW50cmll
c0xlZnRUb1BydW5lID0gc29ydEFuZFBydW5lKHByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50
ZXJhY3Rpb24sIG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLCBudW1iZXJPZkVudHJpZXNMZWZ0VG9Q
cnVuZSk7CisgICAgCisgICAgQVNTRVJUKCFudW1iZXJPZkVudHJpZXNMZWZ0VG9QcnVuZSk7Cit9
CisgICAgCiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU3RvcmFnZS9SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvU3RvcmFnZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAkocmV2aXNpb24gMjE5
MjE0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1N0b3JhZ2UvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTg1LDYgKzg1LDggQEAgcHVibGljOgog
ICAgIHZvaWQgc2V0VGltZVRvTGl2ZUNvb2tpZVBhcnRpdGlvbkZyZWUoU2Vjb25kcyk7CiAgICAg
dm9pZCBzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoU2Vjb25kcyk7CiAg
ICAgdm9pZCBzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyk7CisgICAgdm9pZCBzZXRNYXhT
dGF0aXN0aWNzRW50cmllcyhzaXplX3QpOworICAgIHZvaWQgc2V0UHJ1bmVFbnRyaWVzRG93blRv
KHNpemVfdCk7CiAgICAgdm9pZCBmaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIoKTsK
ICAgICB2b2lkIGZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcihjb25zdCBWZWN0b3I8
U3RyaW5nPiYgZG9tYWluc1RvUmVtb3ZlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWluc1Rv
QWRkLCBib29sIGNsZWFyRmlyc3QpOwogCkBAIC0xMDAsNiArMTAyLDcgQEAgcHVibGljOgogICAg
IHZvaWQgZGF0YVJlY29yZHNCZWluZ1JlbW92ZWQoKTsKICAgICB2b2lkIGRhdGFSZWNvcmRzV2Vy
ZVJlbW92ZWQoKTsKIAorICAgIHZvaWQgcHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQoKTsKIHByaXZh
dGU6CiAgICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKCkgPSBkZWZhdWx0OwogCkluZGV4
OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lv
biAyMTkyMjIpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwz
NCBAQAorMjAxNy0wNy0wNiAgSm9obiBXaWxhbmRlciAgPHdpbGFuZGVyQGFwcGxlLmNvbT4KKwor
ICAgICAgICBSZXNvdXJjZSBMb2FkIFN0YXRpc3RpY3M6IFBydW5lIHN0YXRpc3RpY3MgaW4gb3Jk
ZXJzIG9mIGltcG9ydGFuY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3NDIxNQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzMxNjQ0MDM+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmVzdCBpbmZyYXN0
cnVjdHVyZS4gQWRkcyB0aGVzZSBmdW5jdGlvbnM6CisgICAgICAgIDEuIHRlc3RSdW5uZXIuc2V0
U3RhdGlzdGljc0xhc3RTZWVuKCkKKyAgICAgICAgMi4gc2V0U3RhdGlzdGljc01heFN0YXRpc3Rp
Y3NFbnRyaWVzKCkKKyAgICAgICAgMy4gc2V0U3RhdGlzdGljc1BydW5lRW50cmllc0Rvd25Ubygp
CisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rl
c3RSdW5uZXIuaWRsOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
VGVzdFJ1bm5lci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NM
YXN0U2Vlbik6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NNYXhTdGF0
aXN0aWNzRW50cmllcyk6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NQ
cnVuZUVudHJpZXNEb3duVG8pOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvVGVzdFJ1bm5lci5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc0xh
c3RTZWVuKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnNldE1heFN0YXRpc3RpY3NF
bnRyaWVzKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnNldFBydW5lRW50cmllc0Rv
d25Ubyk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oOgorICAg
ICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwOgorICAgICAgICAoV1RS
OjpUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3Rl
ZEJ1bmRsZSk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0Q29udHJvbGxl
ckNvY29hLm1tOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc0xh
c3RTZWVuKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnNldFN0YXRpc3RpY3NNYXhT
dGF0aXN0aWNzRW50cmllcyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpzZXRTdGF0
aXN0aWNzUHJ1bmVFbnRyaWVzRG93blRvKToKKwogMjAxNy0wNy0wNiAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEZpbGVNb25pdG9yIHNob3VsZCBub3QgYmUgcmVm
IGNvdW50ZWQKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3Bw
CShyZXZpc2lvbiAyMTkyMTQpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9s
bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI0OSw2ICsyMjQ5LDEwIEBAIHZvaWQgVGVzdENv
bnRyb2xsZXI6OnJlbW92ZUFsbFNlc3Npb25DcmUKIAogI2lmICFQTEFURk9STShDT0NPQSkgfHwg
IVdLX0FQSV9FTkFCTEVECiAKK3ZvaWQgVGVzdENvbnRyb2xsZXI6OnNldFN0YXRpc3RpY3NMYXN0
U2VlbihXS1N0cmluZ1JlZiwgZG91YmxlKQoreworfQorICAgIAogdm9pZCBUZXN0Q29udHJvbGxl
cjo6c2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKFdLU3RyaW5nUmVmLCBib29sKQogewog
fQpAQCAtMjMzMiw2ICsyMzM2LDE0IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnNldFN0YXRpc3Rp
Y3NHcmFuZGYKIHsKIH0KIAordm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0TWF4U3RhdGlzdGljc0Vu
dHJpZXModW5zaWduZWQpCit7Cit9CisgICAgCit2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRQcnVu
ZUVudHJpZXNEb3duVG8odW5zaWduZWQpCit7Cit9CisgICAgCiB2b2lkIFRlc3RDb250cm9sbGVy
OjpzdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSgpCiB7CiB9CkluZGV4
OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCShyZXZpc2lvbiAyMTkyMTQp
CisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE1MCw2ICsxNTAsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFNob3VsZERvd25s
b2FkVW5kaXNwbGF5YWJsZU1JTUVUeXBlcyhib29sIHZhbHVlKSB7IG1fc2hvdWxkRG93bmxvYWRV
bmRpc3BsYXlhYmxlTUlNRVR5cGVzID0gdmFsdWU7IH0KIAorICAgIHZvaWQgc2V0U3RhdGlzdGlj
c0xhc3RTZWVuKFdLU3RyaW5nUmVmIGhvc3ROYW1lLCBkb3VibGUgc2Vjb25kcyk7CiAgICAgdm9p
ZCBzZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoV0tTdHJpbmdSZWYgaG9zdE5hbWUsIGJv
b2wgdmFsdWUpOwogICAgIGJvb2wgaXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoV0tTdHJp
bmdSZWYgaG9zdE5hbWUpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFj
dGlvbihXS1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7CkBAIC0xNzAsNiArMTcxLDgg
QEAgcHVibGljOgogICAgIHZvaWQgc2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlblRlbGVtZXRy
eVdhc0NhcHR1cmVkKGJvb2wgdmFsdWUpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc01pbmltdW1U
aW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChkb3VibGUpOwogICAgIHZvaWQgc2V0U3RhdGlz
dGljc0dyYW5kZmF0aGVyaW5nVGltZShkb3VibGUgc2Vjb25kcyk7CisgICAgdm9pZCBzZXRTdGF0
aXN0aWNzTWF4U3RhdGlzdGljc0VudHJpZXModW5zaWduZWQpOworICAgIHZvaWQgc2V0U3RhdGlz
dGljc1BydW5lRW50cmllc0Rvd25Ubyh1bnNpZ25lZCk7CiAgICAgdm9pZCBzdGF0aXN0aWNzQ2xl
YXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSgpOwogICAgIHZvaWQgc3RhdGlzdGljc0NsZWFy
SW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmVNb2RpZmllZFNpbmNlSG91cnModW5zaWduZWQpOwog
ICAgIHZvaWQgc3RhdGlzdGljc1Jlc2V0VG9Db25zaXN0ZW50U3RhdGUoKTsKSW5kZXg6IFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCShyZXZpc2lvbiAyMTkyMTQpCisr
KyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTEyLDYgKzkxMiwyMSBAQCBXS1JldGFpblB0cjxXS1R5cGVSZWY+IFRlc3RJbnZvY2F0
aW9uOjpkCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCisgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzTGFzdFNlZW4i
KSkgeworICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlv
bmFyeUdldFR5cGVJRCgpKTsKKyAgICAgICAgCisgICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNz
YWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VC
b2R5KTsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1lS2V5KEFkb3B0
V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKTsKKyAgICAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHZhbHVlS2V5KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIpKTsKKyAgICAgICAgCisgICAgICAgIFdLU3RyaW5nUmVm
IGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1G
b3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZUtleS5nZXQoKSkpOworICAgICAg
ICBXS0RvdWJsZVJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25h
cnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdmFsdWVLZXkuZ2V0KCkpKTsK
KyAgICAgICAgCisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0
aWNzTGFzdFNlZW4oaG9zdE5hbWUsIFdLRG91YmxlR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAg
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICAKICAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NQcmV2YWxlbnRS
ZXNvdXJjZSIpKSB7CiAgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0g
V0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwogCkBAIC0xMTAxLDYgKzExMTYsMjAgQEAgV0tSZXRh
aW5QdHI8V0tUeXBlUmVmPiBUZXN0SW52b2NhdGlvbjo6ZAogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9CiAgICAgCisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVz
c2FnZU5hbWUsICJTZXRNYXhTdGF0aXN0aWNzRW50cmllcyIpKSB7CisgICAgICAgIEFTU0VSVChX
S0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tVSW50NjRHZXRUeXBlSUQoKSk7CisgICAgICAg
IFdLVUludDY0UmVmIGVudHJpZXMgPSBzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4obWVzc2FnZUJv
ZHkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc01h
eFN0YXRpc3RpY3NFbnRyaWVzKFdLVUludDY0R2V0VmFsdWUoZW50cmllcykpOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRQcnVuZUVudHJpZXNEb3duVG8iKSkgeworICAgICAg
ICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLVUludDY0R2V0VHlwZUlEKCkp
OworICAgICAgICBXS1VJbnQ2NFJlZiBlbnRyaWVzID0gc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+
KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0
YXRpc3RpY3NQcnVuZUVudHJpZXNEb3duVG8oV0tVSW50NjRHZXRWYWx1ZShlbnRyaWVzKSk7Cisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICAKICAgICBpZiAoV0tTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5k
UGVyc2lzdGVudFN0b3JlIikpIHsKICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LnN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlKCk7CiAgICAgICAgIHJl
dHVybiBudWxscHRyOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9UZXN0UnVubmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwCShyZXZpc2lvbiAyMTkyMTQpCisrKyBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTc1LDYgKzExNzUsMzEgQEAgdm9pZCBUZXN0UnVubmVyOjpjYWxsRGlkUmVtb3Zl
U3dpcGVTbmFwcwogICAgIGNhbGxUZXN0UnVubmVyQ2FsbGJhY2soRGlkUmVtb3ZlU3dpcGVTbmFw
c2hvdENhbGxiYWNrSUQpOwogfQogCit2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NMYXN0
U2VlbihKU1N0cmluZ1JlZiBob3N0TmFtZSwgZG91YmxlIHNlY29uZHMpCit7CisgICAgVmVjdG9y
PFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKKyAgICBWZWN0b3I8V0tSZXRhaW5QdHI8
V0tUeXBlUmVmPj4gdmFsdWVzOworICAgIAorICAgIGtleXMuYXBwZW5kKHsgQWRvcHRXSywgV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikgfSk7CisgICAgdmFsdWVzLmFw
cGVuZCh7IEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSB9KTsK
KyAgICAKKyAgICBrZXlzLmFwcGVuZCh7IEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJWYWx1ZSIpIH0pOworICAgIHZhbHVlcy5hcHBlbmQoeyBBZG9wdFdLLCBXS0RvdWJs
ZUNyZWF0ZShzZWNvbmRzKSB9KTsKKyAgICAKKyAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tl
eXMoa2V5cy5zaXplKCkpOworICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlcyh2YWx1ZXMu
c2l6ZSgpKTsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7CisgICAgICAgIHJhd1Zh
bHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKKyAgICB9CisgICAgCisgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJTZXRTdGF0aXN0aWNzTGFzdFNlZW4iKSk7CisgICAgV0tSZXRhaW5QdHI8V0tEaWN0
aW9uYXJ5UmVmPiBtZXNzYWdlQm9keShBZG9wdFdLLCBXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5
cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7CisgICAgCisgICAg
V0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRy
KTsKK30KKyAgICAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291
cmNlKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIHZhbHVlKQogewogICAgIFZlY3RvcjxXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7CkBAIC0xNDkxLDYgKzE1MTYsMjAgQEAgdm9pZCBU
ZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzR3JhbmRmYXRoZQogICAgIFdLQnVuZGxlUG9zdFN5bmNo
cm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3Nh
Z2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CiB9CiAKK3ZvaWQgVGVz
dFJ1bm5lcjo6c2V0U3RhdGlzdGljc01heFN0YXRpc3RpY3NFbnRyaWVzKHVuc2lnbmVkIGVudHJp
ZXMpCit7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ss
IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRNYXhTdGF0aXN0aWNzRW50cmllcyIp
KTsKKyAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IG1lc3NhZ2VCb2R5KEFkb3B0V0ssIFdLVUlu
dDY0Q3JlYXRlKGVudHJpZXMpKTsKKyAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2Uo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
bWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworfQorICAgIAordm9pZCBUZXN0UnVubmVyOjpz
ZXRTdGF0aXN0aWNzUHJ1bmVFbnRyaWVzRG93blRvKHVuc2lnbmVkIGVudHJpZXMpCit7CisgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJTZXRQcnVuZUVudHJpZXNEb3duVG8iKSk7CisgICAgV0tSZXRh
aW5QdHI8V0tUeXBlUmVmPiBtZXNzYWdlQm9keShBZG9wdFdLLCBXS1VJbnQ2NENyZWF0ZShlbnRy
aWVzKSk7CisgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5Lmdl
dCgpLCBudWxscHRyKTsKK30KKyAgICAKIHZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0NsZWFy
SW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUoKQogewogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
U3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUiKSk7CkluZGV4OiBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaAko
cmV2aXNpb24gMjE5MjE0KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9UZXN0UnVubmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1Nyw2ICszNTcsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzdGF0aXN0aWNzRmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyKCk7
CiAgICAgdm9pZCBzdGF0aXN0aWNzRmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyRm9y
T25lRG9tYWluKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIHZhbHVlKTsKICAgICB2b2lkIHN0
YXRpc3RpY3NGaXJlVGVsZW1ldHJ5SGFuZGxlcigpOworICAgIHZvaWQgc2V0U3RhdGlzdGljc0xh
c3RTZWVuKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBkb3VibGUgc2Vjb25kcyk7CiAgICAgdm9pZCBz
ZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wg
dmFsdWUpOwogICAgIGJvb2wgaXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoSlNTdHJpbmdS
ZWYgaG9zdE5hbWUpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlv
bihKU1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7CkBAIC0zNzMsNiArMzc0LDggQEAg
cHVibGljOgogICAgIHZvaWQgc2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdh
c0NhcHR1cmVkKGJvb2wgdmFsdWUpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc01pbmltdW1UaW1l
QmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChkb3VibGUpOwogICAgIHZvaWQgc2V0U3RhdGlzdGlj
c0dyYW5kZmF0aGVyaW5nVGltZShkb3VibGUgc2Vjb25kcyk7CisgICAgdm9pZCBzZXRTdGF0aXN0
aWNzTWF4U3RhdGlzdGljc0VudHJpZXModW5zaWduZWQpOworICAgIHZvaWQgc2V0U3RhdGlzdGlj
c1BydW5lRW50cmllc0Rvd25Ubyh1bnNpZ25lZCk7CiAgICAgdm9pZCBzdGF0aXN0aWNzQ2xlYXJJ
bk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSgpOwogICAgIHZvaWQgc3RhdGlzdGljc0NsZWFySW5N
ZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmVNb2RpZmllZFNpbmNlSG91cnModW5zaWduZWQgaG91cnMp
OwogICAgIHZvaWQgc3RhdGlzdGljc1Jlc2V0VG9Db25zaXN0ZW50U3RhdGUoKTsKSW5kZXg6IFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5p
ZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9C
aW5kaW5ncy9UZXN0UnVubmVyLmlkbAkocmV2aXNpb24gMjE5MjE0KQorKysgVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbAkod29ya2lu
ZyBjb3B5KQpAQCAtMjU0LDYgKzI1NCw3IEBAIGludGVyZmFjZSBUZXN0UnVubmVyIHsKICAgICB2
b2lkIGluc3RhbGxTdGF0aXN0aWNzRGlkTW9kaWZ5RGF0YVJlY29yZHNDYWxsYmFjayhvYmplY3Qg
Y2FsbGJhY2spOwogICAgIHZvaWQgaW5zdGFsbFN0YXRpc3RpY3NEaWRTY2FuRGF0YVJlY29yZHND
YWxsYmFjayhvYmplY3QgY2FsbGJhY2spOwogICAgIHZvaWQgaW5zdGFsbFN0YXRpc3RpY3NEaWRS
dW5UZWxlbWV0cnlDYWxsYmFjayhvYmplY3QgY2FsbGJhY2spOworICAgIHZvaWQgc2V0U3RhdGlz
dGljc0xhc3RTZWVuKERPTVN0cmluZyBob3N0TmFtZSwgZG91YmxlIHNlY29uZHMpOwogICAgIHZv
aWQgc2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKERPTVN0cmluZyBob3N0TmFtZSwgYm9v
bGVhbiB2YWx1ZSk7CiAgICAgYm9vbGVhbiBpc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShE
T01TdHJpbmcgaG9zdE5hbWUpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRl
cmFjdGlvbihET01TdHJpbmcgaG9zdE5hbWUsIGJvb2xlYW4gdmFsdWUpOwpAQCAtMjc0LDYgKzI3
NSw4IEBAIGludGVyZmFjZSBUZXN0UnVubmVyIHsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NOb3Rp
ZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZChib29sZWFuIHZhbHVlKTsKICAgICB2b2lk
IHNldFN0YXRpc3RpY3NNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoZG91Ymxl
IHNlY29uZHMpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyaW5nVGltZShkb3Vi
bGUgc2Vjb25kcyk7CisgICAgdm9pZCBzZXRTdGF0aXN0aWNzTWF4U3RhdGlzdGljc0VudHJpZXMo
dW5zaWduZWQgbG9uZyBlbnRyaWVzKTsKKyAgICB2b2lkIHNldFN0YXRpc3RpY3NQcnVuZUVudHJp
ZXNEb3duVG8odW5zaWduZWQgbG9uZyBlbnRyaWVzKTsKICAgICB2b2lkIHN0YXRpc3RpY3NDbGVh
ckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlKCk7CiAgICAgdm9pZCBzdGF0aXN0aWNzQ2xlYXJJ
bk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZU1vZGlmaWVkU2luY2VIb3Vycyh1bnNpZ25lZCBsb25n
IGhvdXJzKTsKICAgICB2b2lkIHN0YXRpc3RpY3NSZXNldFRvQ29uc2lzdGVudFN0YXRlKCk7Cklu
ZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29jb2EubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0Q29udHJvbGxl
ckNvY29hLm1tCShyZXZpc2lvbiAyMTkyMTQpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL2Nv
Y29hL1Rlc3RDb250cm9sbGVyQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTIyMiw2ICsyMjIs
MTEgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cmVtb3ZlQWxsU2Vzc2lvbkNyZQogfQogCiAjaWYg
V0tfQVBJX0VOQUJMRUQKK3ZvaWQgVGVzdENvbnRyb2xsZXI6OnNldFN0YXRpc3RpY3NMYXN0U2Vl
bihXS1N0cmluZ1JlZiBob3N0TmFtZSwgZG91YmxlIHNlY29uZHMpCit7CisgICAgW2dsb2JhbFdl
YlZpZXdDb25maWd1cmF0aW9uLndlYnNpdGVEYXRhU3RvcmUgX3Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTZXRMYXN0U2VlbjpzZWNvbmRzIGZvckhvc3Q6dG9OU1N0cmluZyhob3N0TmFtZSldOworfQor
ICAgIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNl
KFdLU3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIHZhbHVlKQogewogICAgIFtnbG9iYWxXZWJWaWV3
Q29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlIF9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0
SXNQcmV2YWxlbnRSZXNvdXJjZTp2YWx1ZSBmb3JIb3N0OnRvTlNTdHJpbmcoaG9zdE5hbWUpXTsK
QEAgLTM0Niw2ICszNTEsMTYgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc0dy
YW5kZgogICAgIFtnbG9iYWxXZWJWaWV3Q29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlIF9y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0R3JhbmRmYXRoZXJpbmdUaW1lOnNlY29uZHNdOwogfQog
Cit2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzTWF4U3RhdGlzdGljc0VudHJpZXMo
dW5zaWduZWQgZW50cmllcykKK3sKKyAgICBbZ2xvYmFsV2ViVmlld0NvbmZpZ3VyYXRpb24ud2Vi
c2l0ZURhdGFTdG9yZSBfcmVzb3VyY2VMb2FkU3RhdGlzdGljc1NldE1heFN0YXRpc3RpY3NFbnRy
aWVzOmVudHJpZXNdOworfQorICAgIAordm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGlj
c1BydW5lRW50cmllc0Rvd25Ubyh1bnNpZ25lZCBlbnRyaWVzKQoreworICAgIFtnbG9iYWxXZWJW
aWV3Q29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlIF9yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U2V0UHJ1bmVFbnRyaWVzRG93blRvOmVudHJpZXNdOworfQorICAgIAogdm9pZCBUZXN0Q29udHJv
bGxlcjo6c3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUoKQogewogICAg
IFtnbG9iYWxXZWJWaWV3Q29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlIF9yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZV07CkluZGV4OiBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAyMTkyMjIpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxNyBAQAorMjAxNy0wNy0wNiAgSm9obiBXaWxhbmRlciAgPHdpbGFuZGVyQGFw
cGxlLmNvbT4KKworICAgICAgICBSZXNvdXJjZSBMb2FkIFN0YXRpc3RpY3M6IFBydW5lIHN0YXRp
c3RpY3MgaW4gb3JkZXJzIG9mIGltcG9ydGFuY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDIxNQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzMx
NjQ0MDM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wcnVuZS1zdGF0aXN0
aWNzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9sb2FkaW5nL3Jl
c291cmNlTG9hZFN0YXRpc3RpY3MvcHJ1bmUtc3RhdGlzdGljcy5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS93azIvVGVzdEV4cGVjdGF0aW9uczoKKyAgICAgICAgICAgIEFkZGVkIGh0
dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3BydW5lLXN0YXRpc3RpY3Mu
aHRtbCBhcworICAgICAgICAgICAgWyBQYXNzIF0gc2luY2UgUmVzb3VyY2UgTG9hZCBTdGF0aXN0
aWNzIGlzIFdLMi1vbmx5LgorCiAyMDE3LTA3LTA2ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhm
aWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTihyMjE2OTQ0KTogRm9udCBsb2Fk
cyBjYW4gY2F1c2UgQ2hpbmVzZSBjaGFyYWN0ZXJzIHRvIGRyYXcgYXMgLm5vdGRlZgpJbmRleDog
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcHJ1
bmUtc3RhdGlzdGljcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcHJ1bmUtc3RhdGlzdGljcy1l
eHBlY3RlZC50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2Fk
aW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcHJ1bmUtc3RhdGlzdGljcy1leHBlY3RlZC50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMyBAQAorbWFpbiBmcmFtZSAtIGRpZFN0YXJ0UHJv
dmlzaW9uYWxMb2FkRm9yRnJhbWUKK21haW4gZnJhbWUgLSBkaWRDb21taXRMb2FkRm9yRnJhbWUK
K21haW4gZnJhbWUgLSBkaWRSZWNlaXZlVGl0bGU6IFRlc3QgZm9yIFJlc291cmNlIExvYWQgU3Rh
dGlzdGljcyBQcnVuaW5nCittYWluIGZyYW1lIC0gZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJh
bWUKK21haW4gZnJhbWUgLSBkaWRIYW5kbGVPbmxvYWRFdmVudHNGb3JGcmFtZQorbWFpbiBmcmFt
ZSAtIGRpZEZpbmlzaExvYWRGb3JGcmFtZQorVGVzdHMgdGhhdCBzdGF0aXN0aWNzIGFyZSBwcnVu
ZWQgaW4gdGhlIHJpZ2h0IG9yZGVyLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJp
ZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKwor
UEFTUyBUZXN0IGl0ZXJhdGlvbiAxIHBhc3NlZC4KK1BBU1MgVGVzdCBpdGVyYXRpb24gMiBwYXNz
ZWQuCitQQVNTIFRlc3QgaXRlcmF0aW9uIDMgcGFzc2VkLgorUEFTUyBUZXN0IGl0ZXJhdGlvbiA0
IHBhc3NlZC4KK1BBU1MgVGVzdCBpdGVyYXRpb24gNSBwYXNzZWQuCitQQVNTIFRlc3QgaXRlcmF0
aW9uIDYgcGFzc2VkLgorUEFTUyBUZXN0IGl0ZXJhdGlvbiA3IHBhc3NlZC4KK1BBU1MgVGVzdCBp
dGVyYXRpb24gOCBwYXNzZWQuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RF
U1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291
cmNlTG9hZFN0YXRpc3RpY3MvcHJ1bmUtc3RhdGlzdGljcy5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3BydW5l
LXN0YXRpc3RpY3MuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wcnVuZS1zdGF0aXN0aWNzLmh0bWwJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
aGVhZD4KKyAgICA8bWV0YSBjaGFyc2V0PSJVVEYtOCI+CisgICAgPHRpdGxlPlRlc3QgZm9yIFJl
c291cmNlIExvYWQgU3RhdGlzdGljcyBQcnVuaW5nPC90aXRsZT4KKyAgICA8c2NyaXB0IHNyYz0i
L2pzLXRlc3QtcmVzb3VyY2VzL2pzLXRlc3QuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+
Cis8c2NyaXB0PgorICAgIGRlc2NyaXB0aW9uKCJUZXN0cyB0aGF0IHN0YXRpc3RpY3MgYXJlIHBy
dW5lZCBpbiB0aGUgcmlnaHQgb3JkZXIuIik7CisgICAganNUZXN0SXNBc3luYyA9IHRydWU7CisK
KyAgICBjb25zdCBvbGRlclRpbWVzdGFtcCA9IE1hdGgucm91bmQoKG5ldyBEYXRlKCkpLmdldFRp
bWUoKSAvIDEwMDApOworICAgIGNvbnN0IG5ld2VyVGltZXN0YW1wID0gb2xkZXJUaW1lc3RhbXAg
KyAxMDsKKyAgICBjb25zdCBuZXdlc3RUaW1lc3RhbXAgPSBuZXdlclRpbWVzdGFtcCArIDEwOwor
CisgICAgY29uc3QgdXJsc1RvQmVQcnVuZWQgPSBbCisgICAgICAgIHsgdXJsOiAiaHR0cDovLzEy
Ny4wLjAuMTo4MDAwL3RlbXAiLCBwcmV2YWxlbnQ6IGZhbHNlIH0sCisgICAgICAgIHsgdXJsOiAi
aHR0cDovLzEyNy4wLjAuMjo4MDAwL3RlbXAiLCBwcmV2YWxlbnQ6IGZhbHNlIH0sCisgICAgICAg
IHsgdXJsOiAiaHR0cDovLzEyNy4wLjAuMzo4MDAwL3RlbXAiLCBwcmV2YWxlbnQ6IHRydWUgfSwK
KyAgICAgICAgeyB1cmw6ICJodHRwOi8vMTI3LjAuMC40OjgwMDAvdGVtcCIsIHByZXZhbGVudDog
dHJ1ZSB9LAorICAgICAgICB7IHVybDogImh0dHA6Ly8xMjcuMC4wLjU6ODAwMC90ZW1wIiwgcHJl
dmFsZW50OiBmYWxzZSB9LAorICAgICAgICB7IHVybDogImh0dHA6Ly8xMjcuMC4wLjY6ODAwMC90
ZW1wIiwgcHJldmFsZW50OiBmYWxzZSB9LAorICAgICAgICB7IHVybDogImh0dHA6Ly8xMjcuMC4w
Ljc6ODAwMC90ZW1wIiwgcHJldmFsZW50OiB0cnVlIH0sCisgICAgICAgIHsgdXJsOiAiaHR0cDov
LzEyNy4wLjAuODo4MDAwL3RlbXAiLCBwcmV2YWxlbnQ6IHRydWUgfQorICAgIF07CisKKyAgICBm
dW5jdGlvbiBjaGVja0lmUHJldmFsZW50QWNjb3JkaW5nVG9Jbml0aWFsRXhwZWN0YXRpb24oYmVn
aW4sIGVuZCkgeworICAgICAgICB2YXIgZmFpbGVkID0gZmFsc2U7CisgICAgICAgIGZvciAodmFy
IGkgPSBiZWdpbjsgaSA8IGVuZDsgKytpKSB7CisgICAgICAgICAgICBpZiAodGVzdFJ1bm5lci5p
c1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZSh1cmxzVG9CZVBydW5lZFtpXS51cmwpICE9PSB1
cmxzVG9CZVBydW5lZFtpXS5wcmV2YWxlbnQpIHsKKyAgICAgICAgICAgICAgICB0ZXN0RmFpbGVk
KCJjaGVja0lmUHJldmFsZW50QWNjb3JkaW5nVG9Jbml0aWFsRXhwZWN0YXRpb246IFRlc3QgaXRl
cmF0aW9uICIgKyBjdXJyZW50VGVzdCArICIgZmFpbGVkLiAiICsgdXJsc1RvQmVQcnVuZWRbaV0u
dXJsICsgKHVybHNUb0JlUHJ1bmVkW2ldLnByZXZhbGVudCA/ICIgd2Fzbid0ICIgOiAiIHdhcyAi
KSArICJwcmV2YWxlbnQiKTsKKyAgICAgICAgICAgICAgICBmYWlsZWQgPSB0cnVlOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChmYWlsZWQpCisgICAgICAgICAgICBmaW5p
c2hKU1Rlc3QoKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjaGVja0lmUHJldmFsZW50KGJlZ2lu
LCBlbmQsIGV4cGVjdGVkKSB7CisgICAgICAgIHZhciBmYWlsZWQgPSBmYWxzZTsKKyAgICAgICAg
Zm9yICh2YXIgaSA9IGJlZ2luOyBpIDwgZW5kOyArK2kpIHsKKyAgICAgICAgICAgIGlmICh0ZXN0
UnVubmVyLmlzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKHVybHNUb0JlUHJ1bmVkW2ldLnVy
bCkgIT09IGV4cGVjdGVkKSB7CisgICAgICAgICAgICAgICAgdGVzdEZhaWxlZCgiY2hlY2tJZlBy
ZXZhbGVudDogVGVzdCBpdGVyYXRpb24gIiArIGN1cnJlbnRUZXN0ICsgIiBmYWlsZWQuICIgKyB1
cmxzVG9CZVBydW5lZFtpXS51cmwgKyAoZXhwZWN0ZWQgPyAiIHdhc24ndCAiIDogIiB3YXMgIikg
KyAicHJldmFsZW50Iik7CisgICAgICAgICAgICAgICAgZmFpbGVkID0gdHJ1ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoZmFpbGVkKQorICAgICAgICAgICAgZmluaXNo
SlNUZXN0KCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gaW5pdGlhbGl6ZVN0YXRpc3RpY3MoKSB7
CisgICAgICAgIHRlc3RSdW5uZXIuaW5zdGFsbFN0YXRpc3RpY3NEaWRTY2FuRGF0YVJlY29yZHND
YWxsYmFjayhjaGVja1N0YXRpc3RpY3NBZnRlclBydW5pbmcpOworCisgICAgICAgIC8vIE5vbi1w
cmV2YWxlbnQgd2l0aG91dCB1c2VyIGludGVyYWN0aW9uIHRvIGJlIHBydW5lZCBmaXJzdC4KKyAg
ICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzTGFzdFNlZW4odXJsc1RvQmVQcnVuZWRbMF0u
dXJsLCBvbGRlclRpbWVzdGFtcCk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc0xh
c3RTZWVuKHVybHNUb0JlUHJ1bmVkWzFdLnVybCwgbmV3ZXJUaW1lc3RhbXApOworCisgICAgICAg
IC8vIFByZXZhbGVudCB3aXRob3V0IHVzZXIgaW50ZXJhY3Rpb24gdG8gYmUgcHJ1bmVkIHNlY29u
ZC4KKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UodXJs
c1RvQmVQcnVuZWRbMl0udXJsLCB0cnVlKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0
aWNzTGFzdFNlZW4odXJsc1RvQmVQcnVuZWRbMl0udXJsLCBvbGRlclRpbWVzdGFtcCk7CisgICAg
ICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKHVybHNUb0JlUHJ1
bmVkWzNdLnVybCwgdHJ1ZSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc0xhc3RT
ZWVuKHVybHNUb0JlUHJ1bmVkWzNdLnVybCwgbmV3ZXJUaW1lc3RhbXApOworCisgICAgICAgIC8v
IE5vbi1wcmV2YWxlbnQgd2l0aCB1c2VyIGludGVyYWN0aW9uIHRvIGJlIHBydW5lZCB0aGlyZC4K
KyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKHVy
bHNUb0JlUHJ1bmVkWzRdLnVybCwgdHJ1ZSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlz
dGljc0xhc3RTZWVuKHVybHNUb0JlUHJ1bmVkWzRdLnVybCwgb2xkZXJUaW1lc3RhbXApOworICAg
ICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24odXJsc1Rv
QmVQcnVuZWRbNV0udXJsLCB0cnVlKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNz
TGFzdFNlZW4odXJsc1RvQmVQcnVuZWRbNV0udXJsLCBuZXdlclRpbWVzdGFtcCk7CisKKyAgICAg
ICAgLy8gUHJldmFsZW50IHdpdGggdXNlciBpbnRlcmFjdGlvbiB0byBiZSBwcnVuZWQgbGFzdC4K
KyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UodXJsc1Rv
QmVQcnVuZWRbNl0udXJsLCB0cnVlKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNz
SGFzSGFkVXNlckludGVyYWN0aW9uKHVybHNUb0JlUHJ1bmVkWzZdLnVybCwgdHJ1ZSk7CisgICAg
ICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc0xhc3RTZWVuKHVybHNUb0JlUHJ1bmVkWzZdLnVy
bCwgb2xkZXJUaW1lc3RhbXApOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NQcmV2
YWxlbnRSZXNvdXJjZSh1cmxzVG9CZVBydW5lZFs3XS51cmwsIHRydWUpOworICAgICAgICB0ZXN0
UnVubmVyLnNldFN0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24odXJsc1RvQmVQcnVuZWRb
N10udXJsLCB0cnVlKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzTGFzdFNlZW4o
dXJsc1RvQmVQcnVuZWRbN10udXJsLCBuZXdlclRpbWVzdGFtcCk7CisKKyAgICAgICAgY2hlY2tJ
ZlByZXZhbGVudEFjY29yZGluZ1RvSW5pdGlhbEV4cGVjdGF0aW9uKDAsIHVybHNUb0JlUHJ1bmVk
Lmxlbmd0aCk7CisgICAgfQorCisgICAgdmFyIGN1cnJlbnRUZXN0OworICAgIGZ1bmN0aW9uIGNo
ZWNrU3RhdGlzdGljc0FmdGVyUHJ1bmluZygpIHsKKyAgICAgICAgLy8gUHJ1bmVkIGVudHJpZXMg
c2hvdWxkIG5vdCBiZSBwcmV2YWxlbnQuCisgICAgICAgIGNoZWNrSWZQcmV2YWxlbnQoMCwgY3Vy
cmVudFRlc3QsIGZhbHNlKTsKKyAgICAgICAgLy8gTm9uLXBydW5lZCBlbnRyaWVzIHNob3VsZCBr
ZWVwIHRoZWlyIGV4cGVjdGVkIHN0YXR1cy4KKyAgICAgICAgY2hlY2tJZlByZXZhbGVudEFjY29y
ZGluZ1RvSW5pdGlhbEV4cGVjdGF0aW9uKGN1cnJlbnRUZXN0LCB1cmxzVG9CZVBydW5lZC5sZW5n
dGgpOworICAgICAgICB0ZXN0UGFzc2VkKCJUZXN0IGl0ZXJhdGlvbiAiICsgY3VycmVudFRlc3Qg
KyAiIHBhc3NlZC4iKTsKKyAgICAgICAgaWYgKGN1cnJlbnRUZXN0IDwgdXJsc1RvQmVQcnVuZWQu
bGVuZ3RoKSB7CisgICAgICAgICAgICArK2N1cnJlbnRUZXN0OworICAgICAgICAgICAgcnVuVGVz
dCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBydW5UZXN0KCkgeworICAgICAgICBpbml0aWFs
aXplU3RhdGlzdGljcygpOworCisgICAgICAgIHZhciBmaWxsZXJVcmwgPSAiaHR0cDovLzEyNy4w
LiIgKyBjdXJyZW50VGVzdCArICIuMTo4MDAwL3RlbXAiOworICAgICAgICB0ZXN0UnVubmVyLnNl
dFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShmaWxsZXJVcmwsIHRydWUpOworICAgICAgICB0
ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24oZmlsbGVyVXJsLCB0
cnVlKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzTGFzdFNlZW4oZmlsbGVyVXJs
LCBuZXdlc3RUaW1lc3RhbXApOworICAgICAgICB0ZXN0UnVubmVyLnN0YXRpc3RpY3NGaXJlRGF0
YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKKyAgICB9CisKKyAgICBpZiAod2luZG93LnRlc3RSdW5u
ZXIpIHsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNv
dXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoZmFsc2UpOworICAgICAgICB0ZXN0UnVubmVy
LnNldFN0YXRpc3RpY3NNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoMCk7Cisg
ICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRz
V2VyZVNjYW5uZWQodHJ1ZSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc01heFN0
YXRpc3RpY3NFbnRyaWVzKHVybHNUb0JlUHJ1bmVkLmxlbmd0aCk7CisgICAgICAgIHRlc3RSdW5u
ZXIuc2V0U3RhdGlzdGljc1BydW5lRW50cmllc0Rvd25Ubyh1cmxzVG9CZVBydW5lZC5sZW5ndGgp
OworCisgICAgICAgIGN1cnJlbnRUZXN0ID0gMTsKKyAgICAgICAgcnVuVGVzdCgpOworICAgIH0K
Kzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
SW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3drMi9UZXN0RXhwZWN0YXRpb25zCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3drMi9UZXN0RXhwZWN0YXRpb25zCShyZXZpc2lv
biAyMTkyMTQpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93azIvVGVzdEV4cGVjdGF0aW9ucwko
d29ya2luZyBjb3B5KQpAQCAtNzA2LDYgKzcwNiw3IEBAIGh0dHAvdGVzdHMvbG9hZGluZy9yZXNv
dXJjZUxvYWRTdGF0aXN0aWMKIGh0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzL2NsZWFyLWluLW1lbW9yeS1hbmQtcGVyc2lzdGVudC1zdG9yZS5odG1sIFsgUGFzcyBdCiB3
ZWJraXQub3JnL2IvMTcyNDUyIGh0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzL2dyYW5kZmF0aGVyaW5nLmh0bWwgWyBQYXNzIEZhaWx1cmUgVGltZW91dCBdCiB3ZWJraXQu
b3JnL2IvMTczNDk5IGh0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3Rl
bGVtZXRyeS1nZW5lcmF0aW9uLmh0bWwgWyBQYXNzIEZhaWx1cmUgXQoraHR0cC90ZXN0cy9sb2Fk
aW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcHJ1bmUtc3RhdGlzdGljcy5odG1sIFsgUGFzcyBd
CiAKICMjIyBFTkQgT0YgKDUpIFByb2dyZXNzaW9ucywgZXhwZWN0ZWQgc3VjY2Vzc2VzIHRoYXQg
YXJlIGV4cGVjdGVkIGZhaWx1cmVzIGluIFdlYktpdDEuCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314776</attachid>
            <date>2017-07-06 16:31:20 -0700</date>
            <delta_ts>2017-07-10 13:11:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174215-20170706163051.patch</filename>
            <type>text/plain</type>
            <size>44556</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxOTIyMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDE3LTA3LTA2ICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIExvYWQgU3Rh
dGlzdGljczogUHJ1bmUgc3RhdGlzdGljcyBpbiBvcmRlcnMgb2YgaW1wb3J0YW5jZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0MjE1CisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS8zMzE2NDQwMz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUZXN0OiBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2Fk
U3RhdGlzdGljcy9wcnVuZS1zdGF0aXN0aWNzLmh0bWwKKworICAgICAgICAqIGxvYWRlci9SZXNv
dXJjZUxvYWRPYnNlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZWR1Y2VUaW1lUmVzb2x1
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nRnJhbWVO
YXZpZ2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dT
dWJyZXNvdXJjZUxvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OmxvZ1dlYlNvY2tldExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OmxvZ1VzZXJJbnRlcmFjdGlvbldpdGhSZWR1Y2VkVGltZVJlc29sdXRpb24pOgor
ICAgICAgICAgICAgTm93IGFsbCBzZXQgdGhlIG5ldyBzdGF0aXN0aWNzIGZpZWxkIGxhc3RTZWVu
LgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M6OmVuY29kZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljczo6dG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljczo6bWVyZ2UpOgorICAgICAgICAgICAgSGFuZGxpbmcgb2YgdGhl
IG5ldyBzdGF0aXN0aWNzIGZpZWxkIGxhc3RTZWVuLgorICAgICAgICAqIGxvYWRlci9SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzLmg6CisKIDIwMTctMDctMDYgIE15bGVzIEMuIE1heGZpZWxkICA8bW1h
eGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIyMTY5NDQpOiBGb250IGxv
YWRzIGNhbiBjYXVzZSBDaGluZXNlIGNoYXJhY3RlcnMgdG8gZHJhdyBhcyAubm90ZGVmCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAJKHJl
dmlzaW9uIDIxOTIxNCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNl
cnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDYgKzc5LDExIEBAIGJvb2wgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OnNob3VsZExvZyhQYWcKICAgICByZXR1cm4gU2V0dGluZ3M6OnJlc291cmNl
TG9hZFN0YXRpc3RpY3NFbmFibGVkKCkgJiYgIXBhZ2UtPnVzZXNFcGhlbWVyYWxTZXNzaW9uKCkg
JiYgbV9ub3RpZmljYXRpb25DYWxsYmFjazsKIH0KIAorc3RhdGljIFdhbGxUaW1lIHJlZHVjZVRp
bWVSZXNvbHV0aW9uKFdhbGxUaW1lIHRpbWUpCit7CisgICAgcmV0dXJuIFdhbGxUaW1lOjpmcm9t
UmF3U2Vjb25kcyhzdGQ6OmZsb29yKHRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKSAvIHRpbWVzdGFt
cFJlc29sdXRpb24pICogdGltZXN0YW1wUmVzb2x1dGlvbi5zZWNvbmRzKCkpOworfQorICAgIAog
dm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IEZyYW1l
JiBmcmFtZSwgY29uc3QgRnJhbWUmIHRvcEZyYW1lLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIG5l
d1JlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCiB7CiAg
ICAgQVNTRVJUKGZyYW1lLmRvY3VtZW50KCkpOwpAQCAtMTYwLDYgKzE2NSw4IEBAIHZvaWQgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ0ZyYW1lTmF2aWcKICAgICAgICAgfQogICAgIH0KIAorICAg
IHRhcmdldFN0YXRpc3RpY3MubGFzdFNlZW4gPSByZWR1Y2VUaW1lUmVzb2x1dGlvbihXYWxsVGlt
ZTo6bm93KCkpOworICAgIAogICAgIG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnNldCh0YXJnZXRQ
cmltYXJ5RG9tYWluLCBXVEZNb3ZlKHRhcmdldFN0YXRpc3RpY3MpKTsKIAogICAgIGlmIChzaG91
bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2spCkBAIC0yMjYsNiArMjMzLDggQEAgdm9pZCBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6bG9nU3VicmVzb3VyYwogICAgICAgICB0YXJnZXRTdGF0aXN0aWNz
LnN1YnJlc291cmNlSGFzQmVlblN1YnJlc291cmNlQ291bnREaXZpZGVkQnlUb3RhbE51bWJlck9m
T3JpZ2luc1Zpc2l0ZWQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KHRhcmdldFN0YXRpc3RpY3Muc3Vi
cmVzb3VyY2VIYXNCZWVuU3VicmVzb3VyY2VDb3VudCkgLyB0b3RhbFZpc2l0ZWQ7CiAgICAgfQog
CisgICAgdGFyZ2V0U3RhdGlzdGljcy5sYXN0U2VlbiA9IHJlZHVjZVRpbWVSZXNvbHV0aW9uKFdh
bGxUaW1lOjpub3coKSk7CisgICAgCiAgICAgbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuc2V0KHRh
cmdldFByaW1hcnlEb21haW4sIFdURk1vdmUodGFyZ2V0U3RhdGlzdGljcykpOwogCiAgICAgaWYg
KHNob3VsZENhbGxOb3RpZmljYXRpb25DYWxsYmFjaykKQEAgLTI3MSwxNSArMjgwLDEyIEBAIHZv
aWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1dlYlNvY2tldEwKIAogICAgIHRhcmdldFN0YXRp
c3RpY3Muc3VicmVzb3VyY2VIYXNCZWVuU3VicmVzb3VyY2VDb3VudERpdmlkZWRCeVRvdGFsTnVt
YmVyT2ZPcmlnaW5zVmlzaXRlZCA9IHN0YXRpY19jYXN0PGRvdWJsZT4odGFyZ2V0U3RhdGlzdGlj
cy5zdWJyZXNvdXJjZUhhc0JlZW5TdWJyZXNvdXJjZUNvdW50KSAvIHRvdGFsVmlzaXRlZDsKIAor
ICAgIHRhcmdldFN0YXRpc3RpY3MubGFzdFNlZW4gPSByZWR1Y2VUaW1lUmVzb2x1dGlvbihXYWxs
VGltZTo6bm93KCkpOworICAgIAogICAgIGlmIChzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJh
Y2spCiAgICAgICAgIHNjaGVkdWxlTm90aWZpY2F0aW9uSWZOZWVkZWQoKTsKIH0KIAotc3RhdGlj
IFdhbGxUaW1lIHJlZHVjZVRpbWVSZXNvbHV0aW9uKFdhbGxUaW1lIHRpbWUpCi17Ci0gICAgcmV0
dXJuIFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhzdGQ6OmZsb29yKHRpbWUuc2Vjb25kc1NpbmNl
RXBvY2goKSAvIHRpbWVzdGFtcFJlc29sdXRpb24pICogdGltZXN0YW1wUmVzb2x1dGlvbi5zZWNv
bmRzKCkpOwotfQotCiB2b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dVc2VySW50ZXJhY3Rp
b25XaXRoUmVkdWNlZFRpbWVSZXNvbHV0aW9uKGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkKIHsK
ICAgICBBU1NFUlQoZG9jdW1lbnQucGFnZSgpKTsKQEAgLTI5Nyw2ICszMDMsNyBAQCB2b2lkIFJl
c291cmNlTG9hZE9ic2VydmVyOjpsb2dVc2VySW50ZXJhCiAgICAgICAgIHJldHVybjsKIAogICAg
IHN0YXRpc3RpY3MuaGFkVXNlckludGVyYWN0aW9uID0gdHJ1ZTsKKyAgICBzdGF0aXN0aWNzLmxh
c3RTZWVuID0gbmV3VGltZTsKICAgICBzdGF0aXN0aWNzLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rp
b25UaW1lID0gbmV3VGltZTsKIAogICAgIHNjaGVkdWxlTm90aWZpY2F0aW9uSWZOZWVkZWQoKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cy5jcHAJKHJldmlzaW9uIDIxOTIxNCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsOCBAQCB2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3M6OmVuY29kZShLZXllCiB7CiAgICAgZW5jb2Rlci5lbmNv
ZGVTdHJpbmcoIlByZXZhbGVudFJlc291cmNlT3JpZ2luIiwgaGlnaExldmVsRG9tYWluKTsKICAg
ICAKKyAgICBlbmNvZGVyLmVuY29kZURvdWJsZSgibGFzdFNlZW4iLCBsYXN0U2Vlbi5zZWNvbmRz
U2luY2VFcG9jaCgpLnZhbHVlKCkpOworICAgIAogICAgIC8vIFVzZXIgaW50ZXJhY3Rpb24KICAg
ICBlbmNvZGVyLmVuY29kZUJvb2woImhhZFVzZXJJbnRlcmFjdGlvbiIsIGhhZFVzZXJJbnRlcmFj
dGlvbik7CiAgICAgZW5jb2Rlci5lbmNvZGVEb3VibGUoIm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rp
b24iLCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLnZh
bHVlKCkpOwpAQCAtMTkyLDYgKzE5NCwxNCBAQCBib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3M6
OmRlY29kZShLZXllCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUJvb2woImdyYW5kZmF0aGVyZWQi
LCBncmFuZGZhdGhlcmVkKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgaWYgKHZlcnNp
b24gPCA1KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBkb3VibGUgbGFzdFNlZW5U
aW1lQXNEb3VibGU7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZURvdWJsZSgibGFzdFNlZW4iLCBs
YXN0U2VlblRpbWVBc0RvdWJsZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBsYXN0U2Vl
biA9IFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhsYXN0U2VlblRpbWVBc0RvdWJsZSk7CisgICAg
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTIyNSw2ICsyMzUsMTAgQEAgU3RyaW5nIFJlc291
cmNlTG9hZFN0YXRpc3RpY3M6OnRvU3RyaW5nKAogewogICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRl
cjsKICAgICAKKyAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoImxhc3RTZWVuIik7CisgICAgYnVp
bGRlci5hcHBlbmROdW1iZXIobGFzdFNlZW4uc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKTsK
KyAgICBidWlsZGVyLmFwcGVuZCgnXG4nKTsKKyAgICAKICAgICAvLyBVc2VyIGludGVyYWN0aW9u
CiAgICAgYXBwZW5kQm9vbGVhbihidWlsZGVyLCAiaGFkVXNlckludGVyYWN0aW9uIiwgaGFkVXNl
ckludGVyYWN0aW9uKTsKICAgICBidWlsZGVyLmFwcGVuZCgnXG4nKTsKQEAgLTMxNyw2ICszMzEs
OSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3M6Om1lcmdlKGNvbnN0CiB7CiAgICAgQVNT
RVJUKG90aGVyLmhpZ2hMZXZlbERvbWFpbiA9PSBoaWdoTGV2ZWxEb21haW4pOwogCisgICAgaWYg
KGxhc3RTZWVuIDwgb3RoZXIubGFzdFNlZW4pCisgICAgICAgIGxhc3RTZWVuID0gb3RoZXIubGFz
dFNlZW47CisgICAgCiAgICAgaWYgKCFvdGhlci5oYWRVc2VySW50ZXJhY3Rpb24pIHsKICAgICAg
ICAgLy8gSWYgdXNlciBpbnRlcmFjdGlvbiBoYXMgYmVlbiByZXNldCBkbyBzbyBoZXJlIHRvby4K
ICAgICAgICAgLy8gRWxzZSwgZG8gbm90aGluZy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
bG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuaAkocmV2aXNpb24gMjE5MjE0KQorKysgU291
cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuaAkod29ya2luZyBjb3B5
KQpAQCAtNjEsNiArNjEsOSBAQCBzdHJ1Y3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyB7CiAKICAg
ICBTdHJpbmcgaGlnaExldmVsRG9tYWluOwogCisgICAgLy8gVGltZXN0YW1wLiBEZWZhdWx0IHZh
bHVlIGlzIG5lZ2F0aXZlLCAwIG1lYW5zIGl0IHdhcyByZXNldC4KKyAgICBXYWxsVGltZSBsYXN0
U2VlbiB7IFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcygtMSkgfTsKKyAgICAKICAgICAvLyBVc2Vy
IGludGVyYWN0aW9uCiAgICAgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb24geyBmYWxzZSB9OwogICAg
IC8vIFRpbWVzdGFtcC4gRGVmYXVsdCB2YWx1ZSBpcyBuZWdhdGl2ZSwgMCBtZWFucyBpdCB3YXMg
cmVzZXQuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMTkyMjIpCisrKyBTb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0OSBAQAorMjAxNy0wNy0wNiAg
Sm9obiBXaWxhbmRlciAgPHdpbGFuZGVyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXNvdXJjZSBM
b2FkIFN0YXRpc3RpY3M6IFBydW5lIHN0YXRpc3RpY3MgaW4gb3JkZXJzIG9mIGltcG9ydGFuY2UK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDIxNQor
ICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzMxNjQ0MDM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IGZ1bmN0aW9uYWxpdHkuIFBydW5lcyBzdGF0
aXN0aWNzIGluIHRoaXMgb3JkZXI6CisgICAgICAgIDEuIE5vbi1wcmV2YWxlbnQgcmVzb3VyY2Vz
IHdpdGhvdXQgdXNlciBpbnRlcmFjdGlvbi4KKyAgICAgICAgMi4gUHJldmFsZW50IHJlc291cmNl
cyB3aXRob3V0IHVzZXIgaW50ZXJhY3Rpb24uCisgICAgICAgIDMuIE5vbi1wcmV2YWxlbnQgcmVz
b3VyY2VzIHdpdGggdXNlciBpbnRlcmFjdGlvbi4KKyAgICAgICAgNC4gUHJldmFsZW50IHJlc291
cmNlcyB3aXRoIHVzZXIgaW50ZXJhY3Rpb24uCisKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFy
Z3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzPjo6ZW5jb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzPjo6ZGVjb2RlKToKKyAgICAgICAgICAgIEFkZGVkIHRpbWVzdGFt
cCBmaWVsZCBsYXN0U2Vlbi4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0
ZURhdGFTdG9yZS5tbToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU2V0TGFzdFNlZW46Zm9ySG9zdDpdKToKKyAgICAgICAgKC1bV0tXZWJzaXRl
RGF0YVN0b3JlIF9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0TWF4U3RhdGlzdGljc0VudHJpZXM6
XSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFTdG9yZSBfcmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1NldFBydW5lRW50cmllc0Rvd25UbzpdKToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3Jl
IF9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZV0pOgorICAgICAg
ICAgICAgVGVzdCBpbmZyYXN0cnVjdHVyZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29h
L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvU3RvcmFn
ZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKToKKyAgICAg
ICAgICAgIFRlc3QgaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKToKKyAgICAgICAgICAgIFRl
c3QgaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgIChXZWJLaXQ6OnNvcnRBbmRQcnVuZSk6CisgICAg
ICAgICAgICBDb252ZW5pZW5jZSBmdW5jdGlvbi4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCk6CisgICAgICAgICAg
ICBUaGUgbmV3IHBydW5pbmcgZnVuY3Rpb24uCisgICAgICAgICogVUlQcm9jZXNzL1N0b3JhZ2Uv
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3Jkcyk6
CisgICAgICAgICAgICBOb3cgY2FsbHMgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcnVu
ZVN0YXRpc3RpY3NJZk5lZWRlZCgpLgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnNldExhc3RTZWVuKToKKyAgICAgICAgICAgIFRlc3QgaW5mcmFzdHJ1
Y3R1cmUuCisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
c2V0TWF4U3RhdGlzdGljc0VudHJpZXMpOgorICAgICAgICAgICAgVGVzdCBpbmZyYXN0cnVjdHVy
ZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRQ
cnVuZUVudHJpZXNEb3duVG8pOgorICAgICAgICAgICAgVGVzdCBpbmZyYXN0cnVjdHVyZS4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmg6CisKIDIw
MTctMDctMDYgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAgICAg
W1dLMl0gUmVzb3VyY2VMb2FkU3RhdGlzdGljcyBzaG91bGQgYmF0Y2ggaXRzIHdyaXRlcwpJbmRl
eDogU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAJ
KHJldmlzaW9uIDIxOTIxNCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1l
bnRDb2RlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjQyLDYgKzIyNDIsOCBAQCB2b2lkIEFy
Z3VtZW50Q29kZXI8UmVzb3VyY2VMb2FkU3RhdGlzdGljCiB7CiAgICAgZW5jb2RlciA8PCBzdGF0
aXN0aWNzLmhpZ2hMZXZlbERvbWFpbjsKICAgICAKKyAgICBlbmNvZGVyIDw8IHN0YXRpc3RpY3Mu
bGFzdFNlZW4uc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpOworICAgIAogICAgIC8vIFVzZXIg
aW50ZXJhY3Rpb24KICAgICBlbmNvZGVyIDw8IHN0YXRpc3RpY3MuaGFkVXNlckludGVyYWN0aW9u
OwogICAgIGVuY29kZXIgPDwgc3RhdGlzdGljcy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGlt
ZS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCk7CkBAIC0yMjg0LDYgKzIyODYsMTEgQEAgYm9v
bCBBcmd1bWVudENvZGVyPFJlc291cmNlTG9hZFN0YXRpc3RpYwogICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUoc3RhdGlzdGljcy5oaWdoTGV2ZWxEb21haW4pKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgCisgICAgZG91YmxlIGxhc3RTZWVuVGltZUFzRG91YmxlOworICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUobGFzdFNlZW5UaW1lQXNEb3VibGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgc3RhdGlzdGljcy5sYXN0U2VlbiA9IFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhsYXN0U2Vl
blRpbWVBc0RvdWJsZSk7CisgICAgCiAgICAgLy8gVXNlciBpbnRlcmFjdGlvbgogICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoc3RhdGlzdGljcy5oYWRVc2VySW50ZXJhY3Rpb24pKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAkocmV2aXNpb24gMjE5MjE0
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OSw2ICsxOTksOCBAQCB2b2lkIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJvCiAgICAgICAgIH0KICAgICAgICAgcmVtb3ZlRGF0
YVJlY29yZHMoKTsKICAgICAgICAgCisgICAgICAgIGNvcmVTdG9yZSgpLnBydW5lU3RhdGlzdGlj
c0lmTmVlZGVkKCk7CisgICAgICAgIAogICAgICAgICBpZiAobm90aWZ5UGFnZXNXaGVuRGF0YVJl
Y29yZHNXZXJlU2Nhbm5lZCkgewogICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNo
KFtdICgpIG11dGFibGUgewogICAgICAgICAgICAgICAgIFdlYlByb2Nlc3NQcm94eTo6bm90aWZ5
UGFnZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NlZCgpOwpAQCAtNTcyLDYgKzU3NCwx
NyBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFzCiAgICAgfSk7CiB9
CiAKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRMYXN0U2VlbihTZWNv
bmRzIHNlY29uZHMsIGNvbnN0IFVSTCYgdXJsKQoreworICAgIGlmICh1cmwuaXNCbGFua1VSTCgp
IHx8IHVybC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX3N0YXRpc3Rp
Y3NRdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwg
dXJsID0gdXJsLmlzb2xhdGVkQ29weSgpLCBzZWNvbmRzXSB7CisgICAgICAgIGF1dG8mIHN0YXRp
c3RpY3MgPSBjb3JlU3RvcmUoKS5lbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9t
YWluKHByaW1hcnlEb21haW4odXJsKSk7CisgICAgICAgIHN0YXRpc3RpY3MubGFzdFNlZW4gPSBX
YWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoc2Vjb25kcy5zZWNvbmRzKCkpOworICAgIH0pOworfQor
ICAgIAogdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFByZXZhbGVudFJl
c291cmNlKGNvbnN0IFVSTCYgdXJsKQogewogICAgIGlmICh1cmwuaXNCbGFua1VSTCgpIHx8IHVy
bC5pc0VtcHR5KCkpCkBAIC03NDMsNCArNzU2LDE0IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpzZXQKICAgICBjb3JlU3RvcmUoKS5zZXRHcmFuZGZhdGhlcmluZ1RpbWUo
c2Vjb25kcyk7CiB9CiAgICAgCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
c2V0TWF4U3RhdGlzdGljc0VudHJpZXMoc2l6ZV90IGVudHJpZXMpCit7CisgICAgY29yZVN0b3Jl
KCkuc2V0TWF4U3RhdGlzdGljc0VudHJpZXMoZW50cmllcyk7Cit9CisgICAgCit2b2lkIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKHNpemVfdCBl
bnRyaWVzKQoreworICAgIGNvcmVTdG9yZSgpLnNldFBydW5lRW50cmllc0Rvd25UbyhlbnRyaWVz
KTsKK30KKyAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUu
aAkocmV2aXNpb24gMjE5MjE0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw2ICs3Nyw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIGxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBXZWJDb3JlOjpVUkwm
KTsKICAgICB2b2lkIGNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFdlYkNvcmU6OlVSTCYpOwog
ICAgIHZvaWQgaGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFdlYkNvcmU6OlVSTCYsIFdURjo6
RnVuY3Rpb248dm9pZCAoYm9vbCk+JiYpOworICAgIHZvaWQgc2V0TGFzdFNlZW4oU2Vjb25kcywg
Y29uc3QgV2ViQ29yZTo6VVJMJik7CiAgICAgdm9pZCBzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25z
dCBXZWJDb3JlOjpVUkwmKTsKICAgICB2b2lkIGlzUHJldmFsZW50UmVzb3VyY2UoY29uc3QgV2Vi
Q29yZTo6VVJMJiwgV1RGOjpGdW5jdGlvbjx2b2lkIChib29sKT4mJik7CiAgICAgdm9pZCBjbGVh
clByZXZhbGVudFJlc291cmNlKGNvbnN0IFdlYkNvcmU6OlVSTCYpOwpAQCAtOTgsNyArOTksOSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzZXRUaW1lVG9MaXZlQ29va2llUGFydGl0aW9uRnJlZShTZWNv
bmRzKTsKICAgICB2b2lkIHNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChT
ZWNvbmRzKTsKICAgICB2b2lkIHNldEdyYW5kZmF0aGVyaW5nVGltZShTZWNvbmRzKTsKLQorICAg
IHZvaWQgc2V0TWF4U3RhdGlzdGljc0VudHJpZXMoc2l6ZV90KTsKKyAgICB2b2lkIHNldFBydW5l
RW50cmllc0Rvd25UbyhzaXplX3QpOworICAgIAogcHJpdmF0ZToKICAgICBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUoY29uc3QgU3RyaW5nJiwgVXBkYXRlUGFydGl0aW9uQ29va2llc0Zv
ckRvbWFpbnNIYW5kbGVyJiYpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbQkocmV2aXNpb24gMjE5
MjE0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRh
U3RvcmUubW0JKHdvcmtpbmcgY29weSkKQEAgLTIwNyw2ICsyMDcsMTUgQEAgLSAodm9pZClfc2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZQogICAgIF93ZWJzaXRlRGF0YVN0b3JlLT53ZWJz
aXRlRGF0YVN0b3JlKCkuc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoZW5hYmxlZCk7
CiB9CiAKKy0gKHZvaWQpX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTZXRMYXN0U2VlbjooZG91Ymxl
KXNlY29uZHMgZm9ySG9zdDooTlNTdHJpbmcgKilob3N0Cit7CisgICAgYXV0byogc3RvcmUgPSBf
d2Vic2l0ZURhdGFTdG9yZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnJlc291cmNlTG9hZFN0YXRpc3Rp
Y3MoKTsKKyAgICBpZiAoIXN0b3JlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgc3RvcmUt
PnNldExhc3RTZWVuKFNlY29uZHMgeyBzZWNvbmRzIH0sIFVSTChVUkwoKSwgaG9zdCkpOworfQor
CiAtICh2b2lkKV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0SXNQcmV2YWxlbnRSZXNvdXJjZToo
Qk9PTCl2YWx1ZSBmb3JIb3N0OihOU1N0cmluZyAqKWhvc3QKIHsKICAgICBhdXRvKiBzdG9yZSA9
IF93ZWJzaXRlRGF0YVN0b3JlLT53ZWJzaXRlRGF0YVN0b3JlKCkucmVzb3VyY2VMb2FkU3RhdGlz
dGljcygpOwpAQCAtMzQ1LDYgKzM1NCwyNCBAQCAtICh2b2lkKV9yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU2V0R3JhbmRmCiAgICAgc3RvcmUtPnNldEdyYW5kZmF0aGVyaW5nVGltZShTZWNvbmRzIHtz
ZWNvbmRzIH0pOwogfQogCistICh2b2lkKV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0TWF4U3Rh
dGlzdGljc0VudHJpZXM6KHNpemVfdCllbnRyaWVzCit7CisgICAgYXV0byogc3RvcmUgPSBfd2Vi
c2l0ZURhdGFTdG9yZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnJlc291cmNlTG9hZFN0YXRpc3RpY3Mo
KTsKKyAgICBpZiAoIXN0b3JlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgc3RvcmUtPnNl
dE1heFN0YXRpc3RpY3NFbnRyaWVzKGVudHJpZXMpOworfQorCistICh2b2lkKV9yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU2V0UHJ1bmVFbnRyaWVzRG93blRvOihzaXplX3QpZW50cmllcworeworICAg
IGF1dG8qIHN0b3JlID0gX3dlYnNpdGVEYXRhU3RvcmUtPndlYnNpdGVEYXRhU3RvcmUoKS5yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzKCk7CisgICAgaWYgKCFzdG9yZSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIHN0b3JlLT5zZXRQcnVuZUVudHJpZXNEb3duVG8oZW50cmllcyk7Cit9CisKIC0g
KHZvaWQpX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIK
IHsKICAgICBhdXRvKiBzdG9yZSA9IF93ZWJzaXRlRGF0YVN0b3JlLT53ZWJzaXRlRGF0YVN0b3Jl
KCkucmVzb3VyY2VMb2FkU3RhdGlzdGljcygpOwpAQCAtNDQwLDYgKzQ2Nyw4IEBAIC0gKHZvaWQp
X3Jlc291cmNlTG9hZFN0YXRpc3RpY3NSZXNldFRvQ28KICAgICBpZiAoIXN0b3JlKQogICAgICAg
ICByZXR1cm47CiAKKyAgICBzdG9yZS0+c2V0TWF4U3RhdGlzdGljc0VudHJpZXMoMTAwMCk7Cisg
ICAgc3RvcmUtPnNldFBydW5lRW50cmllc0Rvd25Ubyg4MDApOwogICAgIHN0b3JlLT5zZXRUaW1l
VG9MaXZlVXNlckludGVyYWN0aW9uKDI0X2ggKiAzMC4pOwogICAgIHN0b3JlLT5zZXRUaW1lVG9M
aXZlQ29va2llUGFydGl0aW9uRnJlZSgyNF9oKTsKICAgICBzdG9yZS0+c2V0TWluaW11bVRpbWVC
ZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKDFfaCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVBy
aXZhdGUuaAkocmV2aXNpb24gMjE5MjE0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0
LDYgKzQ0LDcgQEAgdHlwZWRlZiBOU19PUFRJT05TKE5TVUludGVnZXIsIF9XS1dlYnNpdAogQHBy
b3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJs
ZWQ6KSBCT09MIF9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCBXS19BUElfQVZBSUxBQkxF
KG1hY29zeCgxMC4xMiksIGlvcygxMC4wKSk7CiAKIC8vIFJlc291cmNlTG9hZFN0YXRpc3RpY3Mg
U1BJIGZvciB0ZXN0aW5nLgorLSAodm9pZClfcmVzb3VyY2VMb2FkU3RhdGlzdGljc1NldExhc3RT
ZWVuOihkb3VibGUpc2Vjb25kcyBmb3JIb3N0OihOU1N0cmluZyAqKWhvc3QgV0tfQVBJX0FWQUlM
QUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAtICh2b2lkKV9yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU2V0SXNQcmV2YWxlbnRSZXNvdXJjZTooQk9PTCl2YWx1ZSBmb3JI
b3N0OihOU1N0cmluZyAqKWhvc3QgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSks
IGlvcyhXS19JT1NfVEJBKSk7CiAtICh2b2lkKV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzSXNQcmV2
YWxlbnRSZXNvdXJjZTooTlNTdHJpbmcgKilob3N0IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkIChe
KShCT09MKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zeChXS19NQUNf
VEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKIC0gKHZvaWQpX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NT
ZXRIYWRVc2VySW50ZXJhY3Rpb246KEJPT0wpdmFsdWUgZm9ySG9zdDooTlNTdHJpbmcgKilob3N0
IFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwpA
QCAtNTcsNiArNTgsOCBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dLV2Vic2l0
CiAtICh2b2lkKV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0VGltZVRvTGl2ZUNvb2tpZVBhcnRp
dGlvbkZyZWU6KGRvdWJsZSlzZWNvbmRzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19U
QkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogLSAodm9pZClfcmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nl
dE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbDooZG91YmxlKXNlY29uZHMgV0tf
QVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAtICh2
b2lkKV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0R3JhbmRmYXRoZXJpbmdUaW1lOihkb3VibGUp
c2Vjb25kcyBXS19BUElfQVZBSUxBQkxFKG1hY29zeChXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19U
QkEpKTsKKy0gKHZvaWQpX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTZXRNYXhTdGF0aXN0aWNzRW50
cmllczooc2l6ZV90KWVudHJpZXMgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSks
IGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0UHJ1
bmVFbnRyaWVzRG93blRvOihzaXplX3QpZW50cmllcyBXS19BUElfQVZBSUxBQkxFKG1hY29zeChX
S19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKIC0gKHZvaWQpX3Jlc291cmNlTG9hZFN0YXRp
c3RpY3NGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3go
V0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAtICh2b2lkKV9yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogLSAodm9pZClfcmVzb3VyY2VM
b2FkU3RhdGlzdGljc0ZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlckZvck9uZURvbWFp
bjooQk9PTCl2YWx1ZSBmb3JIb3N0OihOU1N0cmluZyAqKWhvc3QgV0tfQVBJX0FWQUlMQUJMRSht
YWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvU3RvcmFnZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9TdG9yYWdlL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5jcHAJKHJldmlzaW9uIDIxOTIxNCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9TdG9yYWdlL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM5LDExICszOSwxMyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAKLXN0YXRpYyBjb25zdCBhdXRvIHN0YXRpc3RpY3NNb2RlbFZlcnNp
b24gPSA0Oworc3RhdGljIGNvbnN0IGF1dG8gc3RhdGlzdGljc01vZGVsVmVyc2lvbiA9IDU7CiBz
dGF0aWMgU2Vjb25kcyB0aW1lVG9MaXZlVXNlckludGVyYWN0aW9uIHsgMjRfaCAqIDMwLiB9Owog
c3RhdGljIFNlY29uZHMgdGltZVRvTGl2ZUNvb2tpZVBhcnRpdGlvbkZyZWUgeyAyNF9oIH07CiBz
dGF0aWMgU2Vjb25kcyBncmFuZGZhdGhlcmluZ1RpbWUgeyAxX2ggfTsKIHN0YXRpYyBTZWNvbmRz
IG1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCB7IDFfaCB9Oworc3RhdGljIHNp
emVfdCBtYXhTdGF0aXN0aWNzRW50cmllcyA9IDEwMDA7CitzdGF0aWMgc2l6ZV90IHBydW5lRW50
cmllc0Rvd25UbyA9IDgwMDsKIAogUmVmPFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjcmVhdGUoKQogewpAQCAtMjg5LDcgKzI5MSwxNyBA
QCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0R3JhCiAgICAgaWYgKHNlY29u
ZHMgPj0gMF9zKQogICAgICAgICBncmFuZGZhdGhlcmluZ1RpbWUgPSBzZWNvbmRzOwogfQorICAg
IAordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldE1heFN0YXRpc3RpY3NFbnRy
aWVzKHNpemVfdCBlbnRyaWVzKQoreworICAgIG1heFN0YXRpc3RpY3NFbnRyaWVzID0gZW50cmll
czsKK30KIAordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFBydW5lRW50cmll
c0Rvd25UbyhzaXplX3QgZW50cmllcykKK3sKKyAgICBwcnVuZUVudHJpZXNEb3duVG8gPSBlbnRy
aWVzOworfQorICAgIAogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnByb2Nlc3NT
dGF0aXN0aWNzKFdURjo6RnVuY3Rpb248dm9pZChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik+JiYg
cHJvY2Vzc0Z1bmN0aW9uKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwpAQCAt
NDEzLDQgKzQyNSw2NCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZGF0YVJl
CiAgICAgbV9kYXRhUmVjb3Jkc1JlbW92YWxQZW5kaW5nID0gZmFsc2U7CiB9CiAgICAgCitzdHJ1
Y3QgU3RhdGlzdGljc0xhc3RTZWVuIHsKKyAgICBTdHJpbmcgdG9wUHJpdmF0ZWx5T3duZWREb21h
aW47CisgICAgV2FsbFRpbWUgbGFzdFNlZW47Cit9OworICAgIAorc3RhdGljIHNpemVfdCBzb3J0
QW5kUHJ1bmUoVmVjdG9yPFN0YXRpc3RpY3NMYXN0U2Vlbj4mIHN0YXRpc3RpY3NUb1BydW5lLCBI
YXNoTWFwPFN0cmluZywgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4mIHN0YXRpc3Rp
Y3NNYXAsIHNpemVfdCBudW1iZXJPZkVudHJpZXNUb1BydW5lKQoreworICAgIHN0ZDo6c29ydChz
dGF0aXN0aWNzVG9QcnVuZS5iZWdpbigpLCBzdGF0aXN0aWNzVG9QcnVuZS5lbmQoKSwgW10oY29u
c3QgU3RhdGlzdGljc0xhc3RTZWVuJiBhLCBjb25zdCBTdGF0aXN0aWNzTGFzdFNlZW4mIGIpIHsK
KyAgICAgICAgcmV0dXJuIGEubGFzdFNlZW4gPCBiLmxhc3RTZWVuOworICAgIH0pOworICAgIAor
ICAgIGZvciAoYXV0byYgc3RhdGlzdGljIDogc3RhdGlzdGljc1RvUHJ1bmUpIHsKKyAgICAgICAg
c3RhdGlzdGljc01hcC5yZW1vdmUoc3RhdGlzdGljLnRvcFByaXZhdGVseU93bmVkRG9tYWluKTsK
KyAgICAgICAgaWYgKCEtLW51bWJlck9mRW50cmllc1RvUHJ1bmUpCisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIG51bWJlck9mRW50cmllc1RvUHJ1bmU7Cit9
CisgICAgCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJ1bmVTdGF0aXN0aWNz
SWZOZWVkZWQoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIGlmICht
X3Jlc291cmNlU3RhdGlzdGljc01hcC5zaXplKCkgPCBtYXhTdGF0aXN0aWNzRW50cmllcykKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIHNpemVfdCBudW1iZXJPZkVudHJpZXNMZWZ0VG9QcnVu
ZSA9IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnNpemUoKSAtIHBydW5lRW50cmllc0Rvd25UbzsK
KyAgICAKKyAgICBWZWN0b3I8U3RhdGlzdGljc0xhc3RTZWVuPiBub25QcmV2YWxlbnRSZXNvdXJj
ZXNXaXRob3V0VXNlckludGVyYWN0aW9uOworICAgIFZlY3RvcjxTdGF0aXN0aWNzTGFzdFNlZW4+
IHByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb247CisgICAgVmVjdG9yPFN0
YXRpc3RpY3NMYXN0U2Vlbj4gbm9uUHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlv
bjsKKyAgICBWZWN0b3I8U3RhdGlzdGljc0xhc3RTZWVuPiBwcmV2YWxlbnRSZXNvdXJjZXNXaXRo
VXNlckludGVyYWN0aW9uOworICAgIGZvciAoYXV0byYgcmVzb3VyY2VTdGF0aXN0aWMgOiBtX3Jl
c291cmNlU3RhdGlzdGljc01hcC52YWx1ZXMoKSkgeworICAgICAgICBpZiAoIXJlc291cmNlU3Rh
dGlzdGljLmlzUHJldmFsZW50UmVzb3VyY2UpIHsKKyAgICAgICAgICAgIGlmICghcmVzb3VyY2VT
dGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uKQorICAgICAgICAgICAgICAgIG5vblByZXZhbGVu
dFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24uYXBwZW5kKHsgcmVzb3VyY2VTdGF0aXN0
aWMuaGlnaExldmVsRG9tYWluLCByZXNvdXJjZVN0YXRpc3RpYy5sYXN0U2VlbiB9KTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBub25QcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNl
ckludGVyYWN0aW9uLmFwcGVuZCh7IHJlc291cmNlU3RhdGlzdGljLmhpZ2hMZXZlbERvbWFpbiwg
cmVzb3VyY2VTdGF0aXN0aWMubGFzdFNlZW4gfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBpZiAoIXJlc291cmNlU3RhdGlzdGljLmhhZFVzZXJJbnRlcmFjdGlvbikKKyAgICAgICAg
ICAgICAgICBwcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNlckludGVyYWN0aW9uLmFwcGVuZCh7
IHJlc291cmNlU3RhdGlzdGljLmhpZ2hMZXZlbERvbWFpbiwgcmVzb3VyY2VTdGF0aXN0aWMubGFz
dFNlZW4gfSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcHJldmFsZW50UmVz
b3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvbi5hcHBlbmQoeyByZXNvdXJjZVN0YXRpc3RpYy5oaWdo
TGV2ZWxEb21haW4sIHJlc291cmNlU3RhdGlzdGljLmxhc3RTZWVuIH0pOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIG51bWJlck9mRW50cmllc0xlZnRUb1BydW5lID0gc29ydEFuZFBydW5l
KG5vblByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24sIG1fcmVzb3VyY2VT
dGF0aXN0aWNzTWFwLCBudW1iZXJPZkVudHJpZXNMZWZ0VG9QcnVuZSk7CisgICAgaWYgKCFudW1i
ZXJPZkVudHJpZXNMZWZ0VG9QcnVuZSkKKyAgICAgICAgcmV0dXJuOworICAgIG51bWJlck9mRW50
cmllc0xlZnRUb1BydW5lID0gc29ydEFuZFBydW5lKHByZXZhbGVudFJlc291cmNlc1dpdGhvdXRV
c2VySW50ZXJhY3Rpb24sIG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLCBudW1iZXJPZkVudHJpZXNM
ZWZ0VG9QcnVuZSk7CisgICAgaWYgKCFudW1iZXJPZkVudHJpZXNMZWZ0VG9QcnVuZSkKKyAgICAg
ICAgcmV0dXJuOworICAgIG51bWJlck9mRW50cmllc0xlZnRUb1BydW5lID0gc29ydEFuZFBydW5l
KG5vblByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb24sIG1fcmVzb3VyY2VTdGF0
aXN0aWNzTWFwLCBudW1iZXJPZkVudHJpZXNMZWZ0VG9QcnVuZSk7CisgICAgaWYgKCFudW1iZXJP
ZkVudHJpZXNMZWZ0VG9QcnVuZSkKKyAgICAgICAgcmV0dXJuOworICAgIG51bWJlck9mRW50cmll
c0xlZnRUb1BydW5lID0gc29ydEFuZFBydW5lKHByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50
ZXJhY3Rpb24sIG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLCBudW1iZXJPZkVudHJpZXNMZWZ0VG9Q
cnVuZSk7CisgICAgCisgICAgQVNTRVJUKCFudW1iZXJPZkVudHJpZXNMZWZ0VG9QcnVuZSk7Cit9
CisgICAgCiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU3RvcmFnZS9SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvU3RvcmFnZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAkocmV2aXNpb24gMjE5
MjE0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1N0b3JhZ2UvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTg1LDYgKzg1LDggQEAgcHVibGljOgog
ICAgIHZvaWQgc2V0VGltZVRvTGl2ZUNvb2tpZVBhcnRpdGlvbkZyZWUoU2Vjb25kcyk7CiAgICAg
dm9pZCBzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoU2Vjb25kcyk7CiAg
ICAgdm9pZCBzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyk7CisgICAgdm9pZCBzZXRNYXhT
dGF0aXN0aWNzRW50cmllcyhzaXplX3QpOworICAgIHZvaWQgc2V0UHJ1bmVFbnRyaWVzRG93blRv
KHNpemVfdCk7CiAgICAgdm9pZCBmaXJlU2hvdWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIoKTsK
ICAgICB2b2lkIGZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcihjb25zdCBWZWN0b3I8
U3RyaW5nPiYgZG9tYWluc1RvUmVtb3ZlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWluc1Rv
QWRkLCBib29sIGNsZWFyRmlyc3QpOwogCkBAIC0xMDAsNiArMTAyLDcgQEAgcHVibGljOgogICAg
IHZvaWQgZGF0YVJlY29yZHNCZWluZ1JlbW92ZWQoKTsKICAgICB2b2lkIGRhdGFSZWNvcmRzV2Vy
ZVJlbW92ZWQoKTsKIAorICAgIHZvaWQgcHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQoKTsKIHByaXZh
dGU6CiAgICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKCkgPSBkZWZhdWx0OwogCkluZGV4
OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lv
biAyMTkyMjIpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwz
NCBAQAorMjAxNy0wNy0wNiAgSm9obiBXaWxhbmRlciAgPHdpbGFuZGVyQGFwcGxlLmNvbT4KKwor
ICAgICAgICBSZXNvdXJjZSBMb2FkIFN0YXRpc3RpY3M6IFBydW5lIHN0YXRpc3RpY3MgaW4gb3Jk
ZXJzIG9mIGltcG9ydGFuY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3NDIxNQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzMxNjQ0MDM+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmVzdCBpbmZyYXN0
cnVjdHVyZS4gQWRkcyB0aGVzZSBmdW5jdGlvbnM6CisgICAgICAgIDEuIHRlc3RSdW5uZXIuc2V0
U3RhdGlzdGljc0xhc3RTZWVuKCkKKyAgICAgICAgMi4gc2V0U3RhdGlzdGljc01heFN0YXRpc3Rp
Y3NFbnRyaWVzKCkKKyAgICAgICAgMy4gc2V0U3RhdGlzdGljc1BydW5lRW50cmllc0Rvd25Ubygp
CisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rl
c3RSdW5uZXIuaWRsOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
VGVzdFJ1bm5lci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NM
YXN0U2Vlbik6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NNYXhTdGF0
aXN0aWNzRW50cmllcyk6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NQ
cnVuZUVudHJpZXNEb3duVG8pOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvVGVzdFJ1bm5lci5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc0xh
c3RTZWVuKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnNldE1heFN0YXRpc3RpY3NF
bnRyaWVzKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnNldFBydW5lRW50cmllc0Rv
d25Ubyk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oOgorICAg
ICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwOgorICAgICAgICAoV1RS
OjpUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3Rl
ZEJ1bmRsZSk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0Q29udHJvbGxl
ckNvY29hLm1tOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc0xh
c3RTZWVuKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnNldFN0YXRpc3RpY3NNYXhT
dGF0aXN0aWNzRW50cmllcyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpzZXRTdGF0
aXN0aWNzUHJ1bmVFbnRyaWVzRG93blRvKToKKwogMjAxNy0wNy0wNiAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEZpbGVNb25pdG9yIHNob3VsZCBub3QgYmUgcmVm
IGNvdW50ZWQKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3Bw
CShyZXZpc2lvbiAyMTkyMTQpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9s
bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI0OSw2ICsyMjQ5LDEwIEBAIHZvaWQgVGVzdENv
bnRyb2xsZXI6OnJlbW92ZUFsbFNlc3Npb25DcmUKIAogI2lmICFQTEFURk9STShDT0NPQSkgfHwg
IVdLX0FQSV9FTkFCTEVECiAKK3ZvaWQgVGVzdENvbnRyb2xsZXI6OnNldFN0YXRpc3RpY3NMYXN0
U2VlbihXS1N0cmluZ1JlZiwgZG91YmxlKQoreworfQorICAgIAogdm9pZCBUZXN0Q29udHJvbGxl
cjo6c2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKFdLU3RyaW5nUmVmLCBib29sKQogewog
fQpAQCAtMjMzMiw2ICsyMzM2LDE0IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnNldFN0YXRpc3Rp
Y3NHcmFuZGYKIHsKIH0KIAordm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc01heFN0
YXRpc3RpY3NFbnRyaWVzKHVuc2lnbmVkKQoreworfQorICAgIAordm9pZCBUZXN0Q29udHJvbGxl
cjo6c2V0U3RhdGlzdGljc1BydW5lRW50cmllc0Rvd25Ubyh1bnNpZ25lZCkKK3sKK30KKyAgICAK
IHZvaWQgVGVzdENvbnRyb2xsZXI6OnN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVu
dFN0b3JlKCkKIHsKIH0KSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xs
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVy
LmgJKHJldmlzaW9uIDIxOTIxNCkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRy
b2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDYgKzE1MCw3IEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgc2V0U2hvdWxkRG93bmxvYWRVbmRpc3BsYXlhYmxlTUlNRVR5cGVzKGJvb2wgdmFsdWUp
IHsgbV9zaG91bGREb3dubG9hZFVuZGlzcGxheWFibGVNSU1FVHlwZXMgPSB2YWx1ZTsgfQogCisg
ICAgdm9pZCBzZXRTdGF0aXN0aWNzTGFzdFNlZW4oV0tTdHJpbmdSZWYgaG9zdE5hbWUsIGRvdWJs
ZSBzZWNvbmRzKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShXS1N0
cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7CiAgICAgYm9vbCBpc1N0YXRpc3RpY3NQcmV2
YWxlbnRSZXNvdXJjZShXS1N0cmluZ1JlZiBob3N0TmFtZSk7CiAgICAgdm9pZCBzZXRTdGF0aXN0
aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKFdLU3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIHZhbHVl
KTsKQEAgLTE3MCw2ICsxNzEsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzTm90
aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQoYm9vbCB2YWx1ZSk7CiAgICAgdm9pZCBz
ZXRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKGRvdWJsZSk7
CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzR3JhbmRmYXRoZXJpbmdUaW1lKGRvdWJsZSBzZWNvbmRz
KTsKKyAgICB2b2lkIHNldFN0YXRpc3RpY3NNYXhTdGF0aXN0aWNzRW50cmllcyh1bnNpZ25lZCk7
CisgICAgdm9pZCBzZXRTdGF0aXN0aWNzUHJ1bmVFbnRyaWVzRG93blRvKHVuc2lnbmVkKTsKICAg
ICB2b2lkIHN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlKCk7CiAgICAg
dm9pZCBzdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZU1vZGlmaWVkU2lu
Y2VIb3Vycyh1bnNpZ25lZCk7CiAgICAgdm9pZCBzdGF0aXN0aWNzUmVzZXRUb0NvbnNpc3RlbnRT
dGF0ZSgpOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAJ
KHJldmlzaW9uIDIxOTIxNCkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MTIsNiArOTEyLDIxIEBAIFdLUmV0YWluUHRyPFdL
VHlwZVJlZj4gVGVzdEludm9jYXRpb246OmQKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9
CiAKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNl
dFN0YXRpc3RpY3NMYXN0U2VlbiIpKSB7CisgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNz
YWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOworICAgICAgICAKKyAgICAgICAg
V0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGlj
dGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOworICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gaG9zdE5hbWVLZXkoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhv
c3ROYW1lIikpOworICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdmFsdWVLZXkoQWRv
cHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlZhbHVlIikpOworICAgICAgICAK
KyAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4o
V0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1l
S2V5LmdldCgpKSk7CisgICAgICAgIFdLRG91YmxlUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tE
b3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCB2YWx1ZUtleS5nZXQoKSkpOworICAgICAgICAKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLnNldFN0YXRpc3RpY3NMYXN0U2Vlbihob3N0TmFtZSwgV0tEb3VibGVHZXRWYWx1
ZSh2YWx1ZSkpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAg
IAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0
U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlIikpIHsKICAgICAgICAgQVNTRVJUKFdLR2V0VHlw
ZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7CiAKQEAgLTExMDEs
NiArMTExNiwyMCBAQCBXS1JldGFpblB0cjxXS1R5cGVSZWY+IFRlc3RJbnZvY2F0aW9uOjpkCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKKyAgICBpZiAoV0tTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldE1heFN0YXRpc3RpY3NFbnRyaWVzIikp
IHsKKyAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1VJbnQ2NEdl
dFR5cGVJRCgpKTsKKyAgICAgICAgV0tVSW50NjRSZWYgZW50cmllcyA9IHN0YXRpY19jYXN0PFdL
VUludDY0UmVmPihtZXNzYWdlQm9keSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5zZXRTdGF0aXN0aWNzTWF4U3RhdGlzdGljc0VudHJpZXMoV0tVSW50NjRHZXRWYWx1ZShl
bnRyaWVzKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICAKKyAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFBydW5lRW50cmll
c0Rvd25UbyIpKSB7CisgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0g
V0tVSW50NjRHZXRUeXBlSUQoKSk7CisgICAgICAgIFdLVUludDY0UmVmIGVudHJpZXMgPSBzdGF0
aWNfY2FzdDxXS1VJbnQ2NFJlZj4obWVzc2FnZUJvZHkpOworICAgICAgICBUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1BydW5lRW50cmllc0Rvd25UbyhXS1VJbnQ2NEdl
dFZhbHVlKGVudHJpZXMpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAog
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU3RhdGlz
dGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUiKSkgewogICAgICAgICBUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkuc3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50
U3RvcmUoKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAJKHJldmlzaW9u
IDIxOTIxNCkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1
bm5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNzUsNiArMTE3NSwzMSBAQCB2b2lkIFRlc3RS
dW5uZXI6OmNhbGxEaWRSZW1vdmVTd2lwZVNuYXBzCiAgICAgY2FsbFRlc3RSdW5uZXJDYWxsYmFj
ayhEaWRSZW1vdmVTd2lwZVNuYXBzaG90Q2FsbGJhY2tJRCk7CiB9CiAKK3ZvaWQgVGVzdFJ1bm5l
cjo6c2V0U3RhdGlzdGljc0xhc3RTZWVuKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBkb3VibGUgc2Vj
b25kcykKK3sKKyAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOworICAg
IFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7CisgICAgCisgICAga2V5cy5h
cHBlbmQoeyBBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUi
KSB9KTsKKyAgICB2YWx1ZXMuYXBwZW5kKHsgQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoSlNT
dHJpbmcoaG9zdE5hbWUpIH0pOworICAgIAorICAgIGtleXMuYXBwZW5kKHsgQWRvcHRXSywgV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlZhbHVlIikgfSk7CisgICAgdmFsdWVzLmFwcGVu
ZCh7IEFkb3B0V0ssIFdLRG91YmxlQ3JlYXRlKHNlY29uZHMpIH0pOworICAgIAorICAgIFZlY3Rv
cjxXS1N0cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNpemUoKSk7CisgICAgVmVjdG9yPFdLVHlwZVJl
Zj4gcmF3VmFsdWVzKHZhbHVlcy5zaXplKCkpOworICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwga2V5cy5zaXplKCk7ICsraSkgeworICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5n
ZXQoKTsKKyAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOworICAgIH0KKyAg
ICAKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUoQWRvcHRXSywgV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NMYXN0U2VlbiIpKTsKKyAg
ICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5KEFkb3B0V0ssIFdLRGlj
dGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5z
aXplKCkpKTsKKyAgICAKKyAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2Fn
ZUJvZHkuZ2V0KCksIG51bGxwdHIpOworfQorICAgIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0
aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUp
CiB7CiAgICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKQEAgLTE0OTEs
NiArMTUxNiwyMCBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NHcmFuZGZhdGhlCiAg
ICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxs
cHRyKTsKIH0KIAordm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzTWF4U3RhdGlzdGljc0Vu
dHJpZXModW5zaWduZWQgZW50cmllcykKK3sKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldE1h
eFN0YXRpc3RpY3NFbnRyaWVzIikpOworICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gbWVzc2Fn
ZUJvZHkoQWRvcHRXSywgV0tVSW50NjRDcmVhdGUoZW50cmllcykpOworICAgIFdLQnVuZGxlUG9z
dFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCks
IG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7Cit9CisgICAg
Cit2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NQcnVuZUVudHJpZXNEb3duVG8odW5zaWdu
ZWQgZW50cmllcykKK3sKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUo
QWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFBydW5lRW50cmllc0Rv
d25UbyIpKTsKKyAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IG1lc3NhZ2VCb2R5KEFkb3B0V0ss
IFdLVUludDY0Q3JlYXRlKGVudHJpZXMpKTsKKyAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01l
c3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworfQorICAgIAogdm9pZCBUZXN0UnVu
bmVyOjpzdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSgpCiB7CiAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRT
dG9yZSIpKTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVz
dFJ1bm5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvVGVzdFJ1bm5lci5oCShyZXZpc2lvbiAyMTkyMTQpCisrKyBUb29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzU3
LDYgKzM1Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHN0YXRpc3RpY3NGaXJlU2hvdWxkUGFydGl0
aW9uQ29va2llc0hhbmRsZXIoKTsKICAgICB2b2lkIHN0YXRpc3RpY3NGaXJlU2hvdWxkUGFydGl0
aW9uQ29va2llc0hhbmRsZXJGb3JPbmVEb21haW4oSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wg
dmFsdWUpOwogICAgIHZvaWQgc3RhdGlzdGljc0ZpcmVUZWxlbWV0cnlIYW5kbGVyKCk7CisgICAg
dm9pZCBzZXRTdGF0aXN0aWNzTGFzdFNlZW4oSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGRvdWJsZSBz
ZWNvbmRzKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShKU1N0cmlu
Z1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7CiAgICAgYm9vbCBpc1N0YXRpc3RpY3NQcmV2YWxl
bnRSZXNvdXJjZShKU1N0cmluZ1JlZiBob3N0TmFtZSk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNz
SGFzSGFkVXNlckludGVyYWN0aW9uKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIHZhbHVlKTsK
QEAgLTM3Myw2ICszNzQsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzTm90aWZ5
UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQoYm9vbCB2YWx1ZSk7CiAgICAgdm9pZCBzZXRT
dGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKGRvdWJsZSk7CiAg
ICAgdm9pZCBzZXRTdGF0aXN0aWNzR3JhbmRmYXRoZXJpbmdUaW1lKGRvdWJsZSBzZWNvbmRzKTsK
KyAgICB2b2lkIHNldFN0YXRpc3RpY3NNYXhTdGF0aXN0aWNzRW50cmllcyh1bnNpZ25lZCk7Cisg
ICAgdm9pZCBzZXRTdGF0aXN0aWNzUHJ1bmVFbnRyaWVzRG93blRvKHVuc2lnbmVkKTsKICAgICB2
b2lkIHN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlKCk7CiAgICAgdm9p
ZCBzdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZU1vZGlmaWVkU2luY2VI
b3Vycyh1bnNpZ25lZCBob3Vycyk7CiAgICAgdm9pZCBzdGF0aXN0aWNzUmVzZXRUb0NvbnNpc3Rl
bnRTdGF0ZSgpOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9C
aW5kaW5ncy9UZXN0UnVubmVyLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsCShyZXZpc2lvbiAyMTky
MTQpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rl
c3RSdW5uZXIuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yNTQsNiArMjU0LDcgQEAgaW50ZXJmYWNl
IFRlc3RSdW5uZXIgewogICAgIHZvaWQgaW5zdGFsbFN0YXRpc3RpY3NEaWRNb2RpZnlEYXRhUmVj
b3Jkc0NhbGxiYWNrKG9iamVjdCBjYWxsYmFjayk7CiAgICAgdm9pZCBpbnN0YWxsU3RhdGlzdGlj
c0RpZFNjYW5EYXRhUmVjb3Jkc0NhbGxiYWNrKG9iamVjdCBjYWxsYmFjayk7CiAgICAgdm9pZCBp
bnN0YWxsU3RhdGlzdGljc0RpZFJ1blRlbGVtZXRyeUNhbGxiYWNrKG9iamVjdCBjYWxsYmFjayk7
CisgICAgdm9pZCBzZXRTdGF0aXN0aWNzTGFzdFNlZW4oRE9NU3RyaW5nIGhvc3ROYW1lLCBkb3Vi
bGUgc2Vjb25kcyk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoRE9N
U3RyaW5nIGhvc3ROYW1lLCBib29sZWFuIHZhbHVlKTsKICAgICBib29sZWFuIGlzU3RhdGlzdGlj
c1ByZXZhbGVudFJlc291cmNlKERPTVN0cmluZyBob3N0TmFtZSk7CiAgICAgdm9pZCBzZXRTdGF0
aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKERPTVN0cmluZyBob3N0TmFtZSwgYm9vbGVhbiB2
YWx1ZSk7CkBAIC0yNzQsNiArMjc1LDggQEAgaW50ZXJmYWNlIFRlc3RSdW5uZXIgewogICAgIHZv
aWQgc2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKGJvb2xl
YW4gdmFsdWUpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlbkRhdGFS
ZWNvcmRzUmVtb3ZhbChkb3VibGUgc2Vjb25kcyk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzR3Jh
bmRmYXRoZXJpbmdUaW1lKGRvdWJsZSBzZWNvbmRzKTsKKyAgICB2b2lkIHNldFN0YXRpc3RpY3NN
YXhTdGF0aXN0aWNzRW50cmllcyh1bnNpZ25lZCBsb25nIGVudHJpZXMpOworICAgIHZvaWQgc2V0
U3RhdGlzdGljc1BydW5lRW50cmllc0Rvd25Ubyh1bnNpZ25lZCBsb25nIGVudHJpZXMpOwogICAg
IHZvaWQgc3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUoKTsKICAgICB2
b2lkIHN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlTW9kaWZpZWRTaW5j
ZUhvdXJzKHVuc2lnbmVkIGxvbmcgaG91cnMpOwogICAgIHZvaWQgc3RhdGlzdGljc1Jlc2V0VG9D
b25zaXN0ZW50U3RhdGUoKTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVz
dENvbnRyb2xsZXJDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVy
L2NvY29hL1Rlc3RDb250cm9sbGVyQ29jb2EubW0JKHJldmlzaW9uIDIxOTIxNCkKKysrIFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdENvbnRyb2xsZXJDb2NvYS5tbQkod29ya2luZyBj
b3B5KQpAQCAtMjIyLDYgKzIyMiwxMSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpyZW1vdmVBbGxT
ZXNzaW9uQ3JlCiB9CiAKICNpZiBXS19BUElfRU5BQkxFRAordm9pZCBUZXN0Q29udHJvbGxlcjo6
c2V0U3RhdGlzdGljc0xhc3RTZWVuKFdLU3RyaW5nUmVmIGhvc3ROYW1lLCBkb3VibGUgc2Vjb25k
cykKK3sKKyAgICBbZ2xvYmFsV2ViVmlld0NvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSBf
cmVzb3VyY2VMb2FkU3RhdGlzdGljc1NldExhc3RTZWVuOnNlY29uZHMgZm9ySG9zdDp0b05TU3Ry
aW5nKGhvc3ROYW1lKV07Cit9CisgICAgCiB2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0
aWNzUHJldmFsZW50UmVzb3VyY2UoV0tTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpCiB7
CiAgICAgW2dsb2JhbFdlYlZpZXdDb25maWd1cmF0aW9uLndlYnNpdGVEYXRhU3RvcmUgX3Jlc291
cmNlTG9hZFN0YXRpc3RpY3NTZXRJc1ByZXZhbGVudFJlc291cmNlOnZhbHVlIGZvckhvc3Q6dG9O
U1N0cmluZyhob3N0TmFtZSldOwpAQCAtMzQ2LDYgKzM1MSwxNiBAQCB2b2lkIFRlc3RDb250cm9s
bGVyOjpzZXRTdGF0aXN0aWNzR3JhbmRmCiAgICAgW2dsb2JhbFdlYlZpZXdDb25maWd1cmF0aW9u
LndlYnNpdGVEYXRhU3RvcmUgX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTZXRHcmFuZGZhdGhlcmlu
Z1RpbWU6c2Vjb25kc107CiB9CiAKK3ZvaWQgVGVzdENvbnRyb2xsZXI6OnNldFN0YXRpc3RpY3NN
YXhTdGF0aXN0aWNzRW50cmllcyh1bnNpZ25lZCBlbnRyaWVzKQoreworICAgIFtnbG9iYWxXZWJW
aWV3Q29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlIF9yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U2V0TWF4U3RhdGlzdGljc0VudHJpZXM6ZW50cmllc107Cit9CisgICAgCit2b2lkIFRlc3RDb250
cm9sbGVyOjpzZXRTdGF0aXN0aWNzUHJ1bmVFbnRyaWVzRG93blRvKHVuc2lnbmVkIGVudHJpZXMp
Cit7CisgICAgW2dsb2JhbFdlYlZpZXdDb25maWd1cmF0aW9uLndlYnNpdGVEYXRhU3RvcmUgX3Jl
c291cmNlTG9hZFN0YXRpc3RpY3NTZXRQcnVuZUVudHJpZXNEb3duVG86ZW50cmllc107Cit9Cisg
ICAgCiB2b2lkIFRlc3RDb250cm9sbGVyOjpzdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNp
c3RlbnRTdG9yZSgpCiB7CiAgICAgW2dsb2JhbFdlYlZpZXdDb25maWd1cmF0aW9uLndlYnNpdGVE
YXRhU3RvcmUgX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVu
dFN0b3JlXTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxOTIyMikKKysrIExheW91dFRlc3RzL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE3LTA3LTA2ICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIExvYWQgU3Rh
dGlzdGljczogUHJ1bmUgc3RhdGlzdGljcyBpbiBvcmRlcnMgb2YgaW1wb3J0YW5jZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0MjE1CisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS8zMzE2NDQwMz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIGh0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzL3BydW5lLXN0YXRpc3RpY3MtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBo
dHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wcnVuZS1zdGF0aXN0aWNz
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3drMi9UZXN0RXhwZWN0YXRpb25zOgor
ICAgICAgICAgICAgQWRkZWQgaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3MvcHJ1bmUtc3RhdGlzdGljcy5odG1sIGFzCisgICAgICAgICAgICBbIFBhc3MgXSBzaW5jZSBS
ZXNvdXJjZSBMb2FkIFN0YXRpc3RpY3MgaXMgV0syLW9ubHkuCisKIDIwMTctMDctMDYgIE15bGVz
IEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9O
KHIyMTY5NDQpOiBGb250IGxvYWRzIGNhbiBjYXVzZSBDaGluZXNlIGNoYXJhY3RlcnMgdG8gZHJh
dyBhcyAubm90ZGVmCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcy9wcnVuZS1zdGF0aXN0aWNzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGlj
cy9wcnVuZS1zdGF0aXN0aWNzLWV4cGVjdGVkLnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wcnVuZS1zdGF0
aXN0aWNzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIzIEBACittYWlu
IGZyYW1lIC0gZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRp
ZENvbW1pdExvYWRGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRpZFJlY2VpdmVUaXRsZTogVGVzdCBm
b3IgUmVzb3VyY2UgTG9hZCBTdGF0aXN0aWNzIFBydW5pbmcKK21haW4gZnJhbWUgLSBkaWRGaW5p
c2hEb2N1bWVudExvYWRGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRpZEhhbmRsZU9ubG9hZEV2ZW50
c0ZvckZyYW1lCittYWluIGZyYW1lIC0gZGlkRmluaXNoTG9hZEZvckZyYW1lCitUZXN0cyB0aGF0
IHN0YXRpc3RpY3MgYXJlIHBydW5lZCBpbiB0aGUgcmlnaHQgb3JkZXIuCisKK09uIHN1Y2Nlc3Ms
IHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJU
RVNUIENPTVBMRVRFIi4KKworCitQQVNTIFRlc3QgaXRlcmF0aW9uIDEgcGFzc2VkLgorUEFTUyBU
ZXN0IGl0ZXJhdGlvbiAyIHBhc3NlZC4KK1BBU1MgVGVzdCBpdGVyYXRpb24gMyBwYXNzZWQuCitQ
QVNTIFRlc3QgaXRlcmF0aW9uIDQgcGFzc2VkLgorUEFTUyBUZXN0IGl0ZXJhdGlvbiA1IHBhc3Nl
ZC4KK1BBU1MgVGVzdCBpdGVyYXRpb24gNiBwYXNzZWQuCitQQVNTIFRlc3QgaXRlcmF0aW9uIDcg
cGFzc2VkLgorUEFTUyBUZXN0IGl0ZXJhdGlvbiA4IHBhc3NlZC4KK1BBU1Mgc3VjY2Vzc2Z1bGx5
UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wcnVuZS1zdGF0aXN0aWNzLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNl
TG9hZFN0YXRpc3RpY3MvcHJ1bmUtc3RhdGlzdGljcy5odG1sCShub25leGlzdGVudCkKKysrIExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3BydW5l
LXN0YXRpc3RpY3MuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExOSBAQAorPCFET0NU
WVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KKyAg
ICA8dGl0bGU+VGVzdCBmb3IgUmVzb3VyY2UgTG9hZCBTdGF0aXN0aWNzIFBydW5pbmc8L3RpdGxl
PgorICAgIDxzY3JpcHQgc3JjPSIvanMtdGVzdC1yZXNvdXJjZXMvanMtdGVzdC5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+CisgICAgZGVzY3JpcHRpb24oIlRlc3RzIHRo
YXQgc3RhdGlzdGljcyBhcmUgcHJ1bmVkIGluIHRoZSByaWdodCBvcmRlci4iKTsKKyAgICBqc1Rl
c3RJc0FzeW5jID0gdHJ1ZTsKKworICAgIGNvbnN0IG9sZGVyVGltZXN0YW1wID0gTWF0aC5yb3Vu
ZCgobmV3IERhdGUoKSkuZ2V0VGltZSgpIC8gMTAwMCk7CisgICAgY29uc3QgbmV3ZXJUaW1lc3Rh
bXAgPSBvbGRlclRpbWVzdGFtcCArIDEwOworICAgIGNvbnN0IG5ld2VzdFRpbWVzdGFtcCA9IG5l
d2VyVGltZXN0YW1wICsgMTA7CisKKyAgICBjb25zdCB1cmxzVG9CZVBydW5lZCA9IFsKKyAgICAg
ICAgeyB1cmw6ICJodHRwOi8vMTI3LjAuMC4xOjgwMDAvdGVtcCIsIHByZXZhbGVudDogZmFsc2Ug
fSwKKyAgICAgICAgeyB1cmw6ICJodHRwOi8vMTI3LjAuMC4yOjgwMDAvdGVtcCIsIHByZXZhbGVu
dDogZmFsc2UgfSwKKyAgICAgICAgeyB1cmw6ICJodHRwOi8vMTI3LjAuMC4zOjgwMDAvdGVtcCIs
IHByZXZhbGVudDogdHJ1ZSB9LAorICAgICAgICB7IHVybDogImh0dHA6Ly8xMjcuMC4wLjQ6ODAw
MC90ZW1wIiwgcHJldmFsZW50OiB0cnVlIH0sCisgICAgICAgIHsgdXJsOiAiaHR0cDovLzEyNy4w
LjAuNTo4MDAwL3RlbXAiLCBwcmV2YWxlbnQ6IGZhbHNlIH0sCisgICAgICAgIHsgdXJsOiAiaHR0
cDovLzEyNy4wLjAuNjo4MDAwL3RlbXAiLCBwcmV2YWxlbnQ6IGZhbHNlIH0sCisgICAgICAgIHsg
dXJsOiAiaHR0cDovLzEyNy4wLjAuNzo4MDAwL3RlbXAiLCBwcmV2YWxlbnQ6IHRydWUgfSwKKyAg
ICAgICAgeyB1cmw6ICJodHRwOi8vMTI3LjAuMC44OjgwMDAvdGVtcCIsIHByZXZhbGVudDogdHJ1
ZSB9CisgICAgXTsKKworICAgIGZ1bmN0aW9uIGNoZWNrSWZQcmV2YWxlbnRBY2NvcmRpbmdUb0lu
aXRpYWxFeHBlY3RhdGlvbihiZWdpbiwgZW5kKSB7CisgICAgICAgIHZhciBmYWlsZWQgPSBmYWxz
ZTsKKyAgICAgICAgZm9yICh2YXIgaSA9IGJlZ2luOyBpIDwgZW5kOyArK2kpIHsKKyAgICAgICAg
ICAgIGlmICh0ZXN0UnVubmVyLmlzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKHVybHNUb0Jl
UHJ1bmVkW2ldLnVybCkgIT09IHVybHNUb0JlUHJ1bmVkW2ldLnByZXZhbGVudCkgeworICAgICAg
ICAgICAgICAgIHRlc3RGYWlsZWQoImNoZWNrSWZQcmV2YWxlbnRBY2NvcmRpbmdUb0luaXRpYWxF
eHBlY3RhdGlvbjogVGVzdCBpdGVyYXRpb24gIiArIGN1cnJlbnRUZXN0ICsgIiBmYWlsZWQuICIg
KyB1cmxzVG9CZVBydW5lZFtpXS51cmwgKyAodXJsc1RvQmVQcnVuZWRbaV0ucHJldmFsZW50ID8g
IiB3YXNuJ3QgIiA6ICIgd2FzICIpICsgInByZXZhbGVudCIpOworICAgICAgICAgICAgICAgIGZh
aWxlZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZhaWxl
ZCkKKyAgICAgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNo
ZWNrSWZQcmV2YWxlbnQoYmVnaW4sIGVuZCwgZXhwZWN0ZWQpIHsKKyAgICAgICAgdmFyIGZhaWxl
ZCA9IGZhbHNlOworICAgICAgICBmb3IgKHZhciBpID0gYmVnaW47IGkgPCBlbmQ7ICsraSkgewor
ICAgICAgICAgICAgaWYgKHRlc3RSdW5uZXIuaXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2Uo
dXJsc1RvQmVQcnVuZWRbaV0udXJsKSAhPT0gZXhwZWN0ZWQpIHsKKyAgICAgICAgICAgICAgICB0
ZXN0RmFpbGVkKCJjaGVja0lmUHJldmFsZW50OiBUZXN0IGl0ZXJhdGlvbiAiICsgY3VycmVudFRl
c3QgKyAiIGZhaWxlZC4gIiArIHVybHNUb0JlUHJ1bmVkW2ldLnVybCArIChleHBlY3RlZCA/ICIg
d2Fzbid0ICIgOiAiIHdhcyAiKSArICJwcmV2YWxlbnQiKTsKKyAgICAgICAgICAgICAgICBmYWls
ZWQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChmYWlsZWQp
CisgICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBpbml0
aWFsaXplU3RhdGlzdGljcygpIHsKKyAgICAgICAgdGVzdFJ1bm5lci5pbnN0YWxsU3RhdGlzdGlj
c0RpZFNjYW5EYXRhUmVjb3Jkc0NhbGxiYWNrKGNoZWNrU3RhdGlzdGljc0FmdGVyUHJ1bmluZyk7
CisKKyAgICAgICAgLy8gTm9uLXByZXZhbGVudCB3aXRob3V0IHVzZXIgaW50ZXJhY3Rpb24gdG8g
YmUgcHJ1bmVkIGZpcnN0LgorICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NMYXN0U2Vl
bih1cmxzVG9CZVBydW5lZFswXS51cmwsIG9sZGVyVGltZXN0YW1wKTsKKyAgICAgICAgdGVzdFJ1
bm5lci5zZXRTdGF0aXN0aWNzTGFzdFNlZW4odXJsc1RvQmVQcnVuZWRbMV0udXJsLCBuZXdlclRp
bWVzdGFtcCk7CisKKyAgICAgICAgLy8gUHJldmFsZW50IHdpdGhvdXQgdXNlciBpbnRlcmFjdGlv
biB0byBiZSBwcnVuZWQgc2Vjb25kLgorICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NQ
cmV2YWxlbnRSZXNvdXJjZSh1cmxzVG9CZVBydW5lZFsyXS51cmwsIHRydWUpOworICAgICAgICB0
ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NMYXN0U2Vlbih1cmxzVG9CZVBydW5lZFsyXS51cmwsIG9s
ZGVyVGltZXN0YW1wKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzUHJldmFsZW50
UmVzb3VyY2UodXJsc1RvQmVQcnVuZWRbM10udXJsLCB0cnVlKTsKKyAgICAgICAgdGVzdFJ1bm5l
ci5zZXRTdGF0aXN0aWNzTGFzdFNlZW4odXJsc1RvQmVQcnVuZWRbM10udXJsLCBuZXdlclRpbWVz
dGFtcCk7CisKKyAgICAgICAgLy8gTm9uLXByZXZhbGVudCB3aXRoIHVzZXIgaW50ZXJhY3Rpb24g
dG8gYmUgcHJ1bmVkIHRoaXJkLgorICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NIYXNI
YWRVc2VySW50ZXJhY3Rpb24odXJsc1RvQmVQcnVuZWRbNF0udXJsLCB0cnVlKTsKKyAgICAgICAg
dGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzTGFzdFNlZW4odXJsc1RvQmVQcnVuZWRbNF0udXJsLCBv
bGRlclRpbWVzdGFtcCk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc0hhc0hhZFVz
ZXJJbnRlcmFjdGlvbih1cmxzVG9CZVBydW5lZFs1XS51cmwsIHRydWUpOworICAgICAgICB0ZXN0
UnVubmVyLnNldFN0YXRpc3RpY3NMYXN0U2Vlbih1cmxzVG9CZVBydW5lZFs1XS51cmwsIG5ld2Vy
VGltZXN0YW1wKTsKKworICAgICAgICAvLyBQcmV2YWxlbnQgd2l0aCB1c2VyIGludGVyYWN0aW9u
IHRvIGJlIHBydW5lZCBsYXN0LgorICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NQcmV2
YWxlbnRSZXNvdXJjZSh1cmxzVG9CZVBydW5lZFs2XS51cmwsIHRydWUpOworICAgICAgICB0ZXN0
UnVubmVyLnNldFN0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24odXJsc1RvQmVQcnVuZWRb
Nl0udXJsLCB0cnVlKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzTGFzdFNlZW4o
dXJsc1RvQmVQcnVuZWRbNl0udXJsLCBvbGRlclRpbWVzdGFtcCk7CisgICAgICAgIHRlc3RSdW5u
ZXIuc2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKHVybHNUb0JlUHJ1bmVkWzddLnVybCwg
dHJ1ZSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFj
dGlvbih1cmxzVG9CZVBydW5lZFs3XS51cmwsIHRydWUpOworICAgICAgICB0ZXN0UnVubmVyLnNl
dFN0YXRpc3RpY3NMYXN0U2Vlbih1cmxzVG9CZVBydW5lZFs3XS51cmwsIG5ld2VyVGltZXN0YW1w
KTsKKworICAgICAgICBjaGVja0lmUHJldmFsZW50QWNjb3JkaW5nVG9Jbml0aWFsRXhwZWN0YXRp
b24oMCwgdXJsc1RvQmVQcnVuZWQubGVuZ3RoKTsKKyAgICB9CisKKyAgICB2YXIgY3VycmVudFRl
c3Q7CisgICAgZnVuY3Rpb24gY2hlY2tTdGF0aXN0aWNzQWZ0ZXJQcnVuaW5nKCkgeworICAgICAg
ICAvLyBQcnVuZWQgZW50cmllcyBzaG91bGQgbm90IGJlIHByZXZhbGVudC4KKyAgICAgICAgY2hl
Y2tJZlByZXZhbGVudCgwLCBjdXJyZW50VGVzdCwgZmFsc2UpOworICAgICAgICAvLyBOb24tcHJ1
bmVkIGVudHJpZXMgc2hvdWxkIGtlZXAgdGhlaXIgZXhwZWN0ZWQgc3RhdHVzLgorICAgICAgICBj
aGVja0lmUHJldmFsZW50QWNjb3JkaW5nVG9Jbml0aWFsRXhwZWN0YXRpb24oY3VycmVudFRlc3Qs
IHVybHNUb0JlUHJ1bmVkLmxlbmd0aCk7CisgICAgICAgIHRlc3RQYXNzZWQoIlRlc3QgaXRlcmF0
aW9uICIgKyBjdXJyZW50VGVzdCArICIgcGFzc2VkLiIpOworICAgICAgICBpZiAoY3VycmVudFRl
c3QgPCB1cmxzVG9CZVBydW5lZC5sZW5ndGgpIHsKKyAgICAgICAgICAgICsrY3VycmVudFRlc3Q7
CisgICAgICAgICAgICBydW5UZXN0KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBm
aW5pc2hKU1Rlc3QoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIHJ1blRlc3Qo
KSB7CisgICAgICAgIGluaXRpYWxpemVTdGF0aXN0aWNzKCk7CisKKyAgICAgICAgdmFyIGZpbGxl
clVybCA9ICJodHRwOi8vMTI3LjAuIiArIGN1cnJlbnRUZXN0ICsgIi4xOjgwMDAvdGVtcCI7Cisg
ICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKGZpbGxlclVy
bCwgdHJ1ZSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRl
cmFjdGlvbihmaWxsZXJVcmwsIHRydWUpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3Rp
Y3NMYXN0U2VlbihmaWxsZXJVcmwsIG5ld2VzdFRpbWVzdGFtcCk7CisgICAgICAgIHRlc3RSdW5u
ZXIuc3RhdGlzdGljc0ZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOworICAgIH0KKworICAg
IGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3Rp
Y3NTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChmYWxzZSk7
CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlbkRhdGFS
ZWNvcmRzUmVtb3ZhbCgwKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzTm90aWZ5
UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCh0cnVlKTsKKyAgICAgICAgdGVzdFJ1bm5l
ci5zZXRTdGF0aXN0aWNzTWF4U3RhdGlzdGljc0VudHJpZXModXJsc1RvQmVQcnVuZWQubGVuZ3Ro
KTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzUHJ1bmVFbnRyaWVzRG93blRvKHVy
bHNUb0JlUHJ1bmVkLmxlbmd0aCk7CisKKyAgICAgICAgY3VycmVudFRlc3QgPSAxOworICAgICAg
ICBydW5UZXN0KCk7CisgICAgfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2syL1Rlc3RF
eHBlY3RhdGlvbnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2syL1Rlc3RF
eHBlY3RhdGlvbnMJKHJldmlzaW9uIDIxOTIxNCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL3dr
Mi9UZXN0RXhwZWN0YXRpb25zCSh3b3JraW5nIGNvcHkpCkBAIC03MDYsNiArNzA2LDcgQEAgaHR0
cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpYwogaHR0cC90ZXN0cy9sb2FkaW5n
L3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvY2xlYXItaW4tbWVtb3J5LWFuZC1wZXJzaXN0ZW50LXN0
b3JlLmh0bWwgWyBQYXNzIF0KIHdlYmtpdC5vcmcvYi8xNzI0NTIgaHR0cC90ZXN0cy9sb2FkaW5n
L3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvZ3JhbmRmYXRoZXJpbmcuaHRtbCBbIFBhc3MgRmFpbHVy
ZSBUaW1lb3V0IF0KIHdlYmtpdC5vcmcvYi8xNzM0OTkgaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291
cmNlTG9hZFN0YXRpc3RpY3MvdGVsZW1ldHJ5LWdlbmVyYXRpb24uaHRtbCBbIFBhc3MgRmFpbHVy
ZSBdCitodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wcnVuZS1zdGF0
aXN0aWNzLmh0bWwgWyBQYXNzIF0KIAogIyMjIEVORCBPRiAoNSkgUHJvZ3Jlc3Npb25zLCBleHBl
Y3RlZCBzdWNjZXNzZXMgdGhhdCBhcmUgZXhwZWN0ZWQgZmFpbHVyZXMgaW4gV2ViS2l0MS4KICMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>315014</attachid>
            <date>2017-07-10 13:11:06 -0700</date>
            <delta_ts>2017-07-10 14:26:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174215-20170710131105.patch</filename>
            <type>text/plain</type>
            <size>44379</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxOTI5NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDE3LTA3LTEwICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIExvYWQgU3Rh
dGlzdGljczogUHJ1bmUgc3RhdGlzdGljcyBpbiBvcmRlcnMgb2YgaW1wb3J0YW5jZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0MjE1CisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS8zMzE2NDQwMz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUZXN0OiBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2Fk
U3RhdGlzdGljcy9wcnVuZS1zdGF0aXN0aWNzLmh0bWwKKworICAgICAgICAqIGxvYWRlci9SZXNv
dXJjZUxvYWRPYnNlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZWR1Y2VUaW1lUmVzb2x1
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nRnJhbWVO
YXZpZ2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dT
dWJyZXNvdXJjZUxvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OmxvZ1dlYlNvY2tldExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OmxvZ1VzZXJJbnRlcmFjdGlvbldpdGhSZWR1Y2VkVGltZVJlc29sdXRpb24pOgor
ICAgICAgICAgICAgTm93IGFsbCBzZXQgdGhlIG5ldyBzdGF0aXN0aWNzIGZpZWxkIGxhc3RTZWVu
LgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M6OmVuY29kZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljczo6dG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljczo6bWVyZ2UpOgorICAgICAgICAgICAgSGFuZGxpbmcgb2YgdGhl
IG5ldyBzdGF0aXN0aWNzIGZpZWxkIGxhc3RTZWVuLgorICAgICAgICAqIGxvYWRlci9SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzLmg6CisKIDIwMTctMDctMTAgIERhbmllbCBCYXRlcyAgPGRhYmF0ZXNA
YXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIyMTg2MTYpOiBDYW5ub3QgYnVpbGQg
V2ViQ29yZSBmb3IgbWFjT1MgMTAuMTIgd2l0aCBtYWNPUyAxMC4xMyBTREsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmNwcAkocmV2aXNpb24g
MjE5Mjk1KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTIsNiArOTIsMTEgQEAgYm9vbCBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hvdWxkTG9nKFBhZwogICAgIHJldHVybiBTZXR0aW5nczo6cmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0VuYWJsZWQoKSAmJiAhcGFnZS0+dXNlc0VwaGVtZXJhbFNlc3Npb24oKSAmJiBtX25v
dGlmaWNhdGlvbkNhbGxiYWNrOwogfQogCitzdGF0aWMgV2FsbFRpbWUgcmVkdWNlVG9Ib3VybHlU
aW1lUmVzb2x1dGlvbihXYWxsVGltZSB0aW1lKQoreworICAgIHJldHVybiBXYWxsVGltZTo6ZnJv
bVJhd1NlY29uZHMoc3RkOjpmbG9vcih0aW1lLnNlY29uZHNTaW5jZUVwb2NoKCkgLyB0aW1lc3Rh
bXBSZXNvbHV0aW9uKSAqIHRpbWVzdGFtcFJlc29sdXRpb24uc2Vjb25kcygpKTsKK30KKwogdm9p
ZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IEZyYW1lJiBm
cmFtZSwgY29uc3QgRnJhbWUmIHRvcEZyYW1lLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIG5ld1Jl
cXVlc3QpCiB7CiAgICAgQVNTRVJUKGZyYW1lLmRvY3VtZW50KCkpOwpAQCAtMTI1LDYgKzEzMCw3
IEBAIHZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ0ZyYW1lTmF2aWcKICAgICAgICAgcmV0
dXJuOwogCiAgICAgYXV0byYgdGFyZ2V0U3RhdGlzdGljcyA9IGVuc3VyZVJlc291cmNlU3RhdGlz
dGljc0ZvclByaW1hcnlEb21haW4odGFyZ2V0UHJpbWFyeURvbWFpbik7CisgICAgdGFyZ2V0U3Rh
dGlzdGljcy5sYXN0U2VlbiA9IHJlZHVjZVRvSG91cmx5VGltZVJlc29sdXRpb24oV2FsbFRpbWU6
Om5vdygpKTsKICAgICBhdXRvIHN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNSZXN1bHQgPSB0
YXJnZXRTdGF0aXN0aWNzLnN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMuYWRkKG1haW5GcmFt
ZVByaW1hcnlEb21haW4pOwogICAgIGlmIChzdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zUmVz
dWx0LmlzTmV3RW50cnkpCiAgICAgICAgIHNjaGVkdWxlTm90aWZpY2F0aW9uSWZOZWVkZWQoKTsK
QEAgLTE1OCw2ICsxNjQsNyBAQCB2b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dTdWJyZXNv
dXJjCiAgICAgYm9vbCBzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2sgPSBmYWxzZTsKICAg
ICB7CiAgICAgICAgIGF1dG8mIHRhcmdldFN0YXRpc3RpY3MgPSBlbnN1cmVSZXNvdXJjZVN0YXRp
c3RpY3NGb3JQcmltYXJ5RG9tYWluKHRhcmdldFByaW1hcnlEb21haW4pOworICAgICAgICB0YXJn
ZXRTdGF0aXN0aWNzLmxhc3RTZWVuID0gcmVkdWNlVG9Ib3VybHlUaW1lUmVzb2x1dGlvbihXYWxs
VGltZTo6bm93KCkpOwogICAgICAgICBpZiAodGFyZ2V0U3RhdGlzdGljcy5zdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVPcmlnaW5zLmFkZChtYWluRnJhbWVQcmltYXJ5RG9tYWluKS5pc05ld0VudHJ5
KQogICAgICAgICAgICAgc2hvdWxkQ2FsbE5vdGlmaWNhdGlvbkNhbGxiYWNrID0gdHJ1ZTsKICAg
ICB9CkBAIC0xOTcsMTUgKzIwNCwxMSBAQCB2b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dX
ZWJTb2NrZXRMCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8mIHRhcmdldFN0YXRpc3RpY3Mg
PSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHRhcmdldFByaW1hcnlE
b21haW4pOworICAgIHRhcmdldFN0YXRpc3RpY3MubGFzdFNlZW4gPSByZWR1Y2VUb0hvdXJseVRp
bWVSZXNvbHV0aW9uKFdhbGxUaW1lOjpub3coKSk7CiAgICAgaWYgKHRhcmdldFN0YXRpc3RpY3Mu
c3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2lucy5hZGQobWFpbkZyYW1lUHJpbWFyeURvbWFp
bikuaXNOZXdFbnRyeSkKICAgICAgICAgc2NoZWR1bGVOb3RpZmljYXRpb25JZk5lZWRlZCgpOwog
fQogCi1zdGF0aWMgV2FsbFRpbWUgcmVkdWNlVGltZVJlc29sdXRpb24oV2FsbFRpbWUgdGltZSkK
LXsKLSAgICByZXR1cm4gV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRzKHN0ZDo6Zmxvb3IodGltZS5z
ZWNvbmRzU2luY2VFcG9jaCgpIC8gdGltZXN0YW1wUmVzb2x1dGlvbikgKiB0aW1lc3RhbXBSZXNv
bHV0aW9uLnNlY29uZHMoKSk7Ci19Ci0KIHZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1Vz
ZXJJbnRlcmFjdGlvbldpdGhSZWR1Y2VkVGltZVJlc29sdXRpb24oY29uc3QgRG9jdW1lbnQmIGRv
Y3VtZW50KQogewogICAgIEFTU0VSVChkb2N1bWVudC5wYWdlKCkpOwpAQCAtMjE4LDExICsyMjEs
MTIgQEAgdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nVXNlckludGVyYQogICAgICAgICBy
ZXR1cm47CiAKICAgICBhdXRvJiBzdGF0aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNz
Rm9yUHJpbWFyeURvbWFpbihwcmltYXJ5RG9tYWluKHVybCkpOwotICAgIGF1dG8gbmV3VGltZSA9
IHJlZHVjZVRpbWVSZXNvbHV0aW9uKFdhbGxUaW1lOjpub3coKSk7CisgICAgYXV0byBuZXdUaW1l
ID0gcmVkdWNlVG9Ib3VybHlUaW1lUmVzb2x1dGlvbihXYWxsVGltZTo6bm93KCkpOwogICAgIGlm
IChuZXdUaW1lID09IHN0YXRpc3RpY3MubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIHN0YXRpc3RpY3MuaGFkVXNlckludGVyYWN0aW9uID0gdHJ1
ZTsKKyAgICBzdGF0aXN0aWNzLmxhc3RTZWVuID0gbmV3VGltZTsKICAgICBzdGF0aXN0aWNzLm1v
c3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lID0gbmV3VGltZTsKIAogICAgIHNjaGVkdWxlTm90
aWZpY2F0aW9uSWZOZWVkZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
UmVzb3VyY2VMb2FkU3RhdGlzdGljcy5jcHAJKHJldmlzaW9uIDIxOTI5NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTAsNiArNTAsOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3M6OmVuY29kZShLZXll
CiB7CiAgICAgZW5jb2Rlci5lbmNvZGVTdHJpbmcoIlByZXZhbGVudFJlc291cmNlT3JpZ2luIiwg
aGlnaExldmVsRG9tYWluKTsKICAgICAKKyAgICBlbmNvZGVyLmVuY29kZURvdWJsZSgibGFzdFNl
ZW4iLCBsYXN0U2Vlbi5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpOworICAgIAogICAgIC8v
IFVzZXIgaW50ZXJhY3Rpb24KICAgICBlbmNvZGVyLmVuY29kZUJvb2woImhhZFVzZXJJbnRlcmFj
dGlvbiIsIGhhZFVzZXJJbnRlcmFjdGlvbik7CiAgICAgZW5jb2Rlci5lbmNvZGVEb3VibGUoIm1v
c3RSZWNlbnRVc2VySW50ZXJhY3Rpb24iLCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZS5z
ZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpOwpAQCAtMTE0LDYgKzExNiwxMSBAQCBib29sIFJl
c291cmNlTG9hZFN0YXRpc3RpY3M6OmRlY29kZShLZXllCiAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZUJvb2woImdyYW5kZmF0aGVyZWQiLCBncmFuZGZhdGhlcmVkKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCisgICAgZG91YmxlIGxhc3RTZWVuVGltZUFzRG91YmxlOworICAgIGlmICghZGVjb2Rl
ci5kZWNvZGVEb3VibGUoImxhc3RTZWVuIiwgbGFzdFNlZW5UaW1lQXNEb3VibGUpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgbGFzdFNlZW4gPSBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMo
bGFzdFNlZW5UaW1lQXNEb3VibGUpOworICAgIAogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0x
NDcsNiArMTU0LDEwIEBAIFN0cmluZyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjp0b1N0cmluZygK
IHsKICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CiAgICAgCisgICAgYnVpbGRlci5hcHBlbmRM
aXRlcmFsKCJsYXN0U2VlbiIpOworICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKGxhc3RTZWVuLnNl
Y29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSk7CisgICAgYnVpbGRlci5hcHBlbmQoJ1xuJyk7Cisg
ICAgCiAgICAgLy8gVXNlciBpbnRlcmFjdGlvbgogICAgIGFwcGVuZEJvb2xlYW4oYnVpbGRlciwg
ImhhZFVzZXJJbnRlcmFjdGlvbiIsIGhhZFVzZXJJbnRlcmFjdGlvbik7CiAgICAgYnVpbGRlci5h
cHBlbmQoJ1xuJyk7CkBAIC0xODksNiArMjAwLDkgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzOjptZXJnZShjb25zdAogewogICAgIEFTU0VSVChvdGhlci5oaWdoTGV2ZWxEb21haW4gPT0g
aGlnaExldmVsRG9tYWluKTsKIAorICAgIGlmIChsYXN0U2VlbiA8IG90aGVyLmxhc3RTZWVuKQor
ICAgICAgICBsYXN0U2VlbiA9IG90aGVyLmxhc3RTZWVuOworICAgIAogICAgIGlmICghb3RoZXIu
aGFkVXNlckludGVyYWN0aW9uKSB7CiAgICAgICAgIC8vIElmIHVzZXIgaW50ZXJhY3Rpb24gaGFz
IGJlZW4gcmVzZXQgZG8gc28gaGVyZSB0b28uCiAgICAgICAgIC8vIEVsc2UsIGRvIG5vdGhpbmcu
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNz
LmgJKHJldmlzaW9uIDIxOTI5NSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDkgQEAgc3RydWN0IFJl
c291cmNlTG9hZFN0YXRpc3RpY3MgewogCiAgICAgU3RyaW5nIGhpZ2hMZXZlbERvbWFpbjsKIAor
ICAgIC8vIFRpbWVzdGFtcC4gRGVmYXVsdCB2YWx1ZSBpcyBuZWdhdGl2ZSwgMCBtZWFucyBpdCB3
YXMgcmVzZXQuCisgICAgV2FsbFRpbWUgbGFzdFNlZW4geyBXYWxsVGltZTo6ZnJvbVJhd1NlY29u
ZHMoLTEpIH07CisgICAgCiAgICAgLy8gVXNlciBpbnRlcmFjdGlvbgogICAgIGJvb2wgaGFkVXNl
ckludGVyYWN0aW9uIHsgZmFsc2UgfTsKICAgICAvLyBUaW1lc3RhbXAuIERlZmF1bHQgdmFsdWUg
aXMgbmVnYXRpdmUsIDAgbWVhbnMgaXQgd2FzIHJlc2V0LgpJbmRleDogU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNp
b24gMjE5Mjk1KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDkgQEAKKzIwMTctMDctMTAgIEpvaG4gV2lsYW5kZXIgIDx3aWxhbmRlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmVzb3VyY2UgTG9hZCBTdGF0aXN0aWNzOiBQcnVuZSBzdGF0aXN0
aWNzIGluIG9yZGVycyBvZiBpbXBvcnRhbmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQyMTUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMzMTY0
NDAzPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5l
dyBmdW5jdGlvbmFsaXR5LiBQcnVuZXMgc3RhdGlzdGljcyBpbiB0aGlzIG9yZGVyOgorICAgICAg
ICAxLiBOb24tcHJldmFsZW50IHJlc291cmNlcyB3aXRob3V0IHVzZXIgaW50ZXJhY3Rpb24uCisg
ICAgICAgIDIuIFByZXZhbGVudCByZXNvdXJjZXMgd2l0aG91dCB1c2VyIGludGVyYWN0aW9uLgor
ICAgICAgICAzLiBOb24tcHJldmFsZW50IHJlc291cmNlcyB3aXRoIHVzZXIgaW50ZXJhY3Rpb24u
CisgICAgICAgIDQuIFByZXZhbGVudCByZXNvdXJjZXMgd2l0aCB1c2VyIGludGVyYWN0aW9uLgor
CisgICAgICAgICogU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHA6CisgICAgICAgIChJ
UEM6OkFyZ3VtZW50Q29kZXI8UmVzb3VyY2VMb2FkU3RhdGlzdGljcz46OmVuY29kZSk6CisgICAg
ICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8UmVzb3VyY2VMb2FkU3RhdGlzdGljcz46OmRlY29kZSk6
CisgICAgICAgICAgICBBZGRlZCB0aW1lc3RhbXAgZmllbGQgbGFzdFNlZW4uCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW06CisgICAgICAgICgtW1dL
V2Vic2l0ZURhdGFTdG9yZSBfcmVzb3VyY2VMb2FkU3RhdGlzdGljc1NldExhc3RTZWVuOmZvckhv
c3Q6XSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFTdG9yZSBfcmVzb3VyY2VMb2FkU3RhdGlz
dGljc1NldE1heFN0YXRpc3RpY3NFbnRyaWVzOl0pOgorICAgICAgICAoLVtXS1dlYnNpdGVEYXRh
U3RvcmUgX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTZXRQcnVuZUVudHJpZXNEb3duVG86XSk6Cisg
ICAgICAgICgtW1dLV2Vic2l0ZURhdGFTdG9yZSBfcmVzb3VyY2VMb2FkU3RhdGlzdGljc1Jlc2V0
VG9Db25zaXN0ZW50U3RhdGVdKToKKyAgICAgICAgICAgIFRlc3QgaW5mcmFzdHJ1Y3R1cmUuCisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg6
CisgICAgICAgICogVUlQcm9jZXNzL1N0b3JhZ2UvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRN
YXhTdGF0aXN0aWNzRW50cmllcyk6CisgICAgICAgICAgICBUZXN0IGluZnJhc3RydWN0dXJlLgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFBydW5lRW50
cmllc0Rvd25Ubyk6CisgICAgICAgICAgICBUZXN0IGluZnJhc3RydWN0dXJlLgorICAgICAgICAo
V2ViS2l0Ojpzb3J0QW5kUHJ1bmUpOgorICAgICAgICAgICAgQ29udmVuaWVuY2UgZnVuY3Rpb24u
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJ1bmVTdGF0
aXN0aWNzSWZOZWVkZWQpOgorICAgICAgICAgICAgVGhlIG5ldyBwcnVuaW5nIGZ1bmN0aW9uLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9TdG9yYWdlL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnByb2Nl
c3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMpOgorICAgICAgICAgICAgTm93IGNhbGxzIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQoKS4KKyAgICAg
ICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRMYXN0U2Vlbik6
CisgICAgICAgICAgICBUZXN0IGluZnJhc3RydWN0dXJlLgorICAgICAgICAoV2ViS2l0OjpXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKToKKyAg
ICAgICAgICAgIFRlc3QgaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgIChXZWJLaXQ6OldlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKToKKyAgICAgICAg
ICAgIFRlc3QgaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZS5oOgorCiAyMDE3LTA3LTEwICBNaWNoYWVsIENhdGFuemFybyAg
PG1jYXRhbnphcm9AaWdhbGlhLmNvbT4KIAogICAgICAgICBbU09VUF0gUmVtb3ZlIFdlYktpdFNv
dXBDb29raWVKYXJTcWxpdGUKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJn
dW1lbnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJD
b3JlQXJndW1lbnRDb2RlcnMuY3BwCShyZXZpc2lvbiAyMTkyOTUpCisrKyBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI0
Miw2ICsyMjQyLDggQEAgdm9pZCBBcmd1bWVudENvZGVyPFJlc291cmNlTG9hZFN0YXRpc3RpYwog
ewogICAgIGVuY29kZXIgPDwgc3RhdGlzdGljcy5oaWdoTGV2ZWxEb21haW47CiAgICAgCisgICAg
ZW5jb2RlciA8PCBzdGF0aXN0aWNzLmxhc3RTZWVuLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUo
KTsKKyAgICAKICAgICAvLyBVc2VyIGludGVyYWN0aW9uCiAgICAgZW5jb2RlciA8PCBzdGF0aXN0
aWNzLmhhZFVzZXJJbnRlcmFjdGlvbjsKICAgICBlbmNvZGVyIDw8IHN0YXRpc3RpY3MubW9zdFJl
Y2VudFVzZXJJbnRlcmFjdGlvblRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpOwpAQCAt
MjI2NCw2ICsyMjY2LDExIEBAIGJvb2wgQXJndW1lbnRDb2RlcjxSZXNvdXJjZUxvYWRTdGF0aXN0
aWMKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0YXRpc3RpY3MuaGlnaExldmVsRG9tYWluKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAorICAgIGRvdWJsZSBsYXN0U2VlblRpbWVBc0Rv
dWJsZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGxhc3RTZWVuVGltZUFzRG91YmxlKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIHN0YXRpc3RpY3MubGFzdFNlZW4gPSBXYWxsVGltZTo6
ZnJvbVJhd1NlY29uZHMobGFzdFNlZW5UaW1lQXNEb3VibGUpOworICAgIAogICAgIC8vIFVzZXIg
aW50ZXJhY3Rpb24KICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0YXRpc3RpY3MuaGFkVXNlcklu
dGVyYWN0aW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZS5jcHAJKHJldmlzaW9uIDIxOTI5NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzUsNiAr
MTc1LDggQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnBybwogICAgICAg
ICB9CiAgICAgICAgIHJlbW92ZURhdGFSZWNvcmRzKCk7CiAgICAgICAgIAorICAgICAgICBjb3Jl
U3RvcmUoKS5wcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCgpOworICAgICAgICAKICAgICAgICAgaWYg
KG5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQpIHsKICAgICAgICAgICAgIFJ1
bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbXSB7CiAgICAgICAgICAgICAgICAgV2ViUHJvY2Vzc1By
b3h5Ojpub3RpZnlQYWdlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2VkKCk7CkBAIC01
NzksNiArNTgxLDE3IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpoYXMK
ICAgICB9KTsKIH0KIAordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldExh
c3RTZWVuKFNlY29uZHMgc2Vjb25kcywgY29uc3QgVVJMJiB1cmwpCit7CisgICAgaWYgKHVybC5p
c0JsYW5rVVJMKCkgfHwgdXJsLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IG1fc3RhdGlzdGljc1F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpLCB1cmwgPSB1cmwuaXNvbGF0ZWRDb3B5KCksIHNlY29uZHNdIHsKKyAgICAgICAg
YXV0byYgc3RhdGlzdGljcyA9IGNvcmVTdG9yZSgpLmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0Zv
clByaW1hcnlEb21haW4ocHJpbWFyeURvbWFpbih1cmwpKTsKKyAgICAgICAgc3RhdGlzdGljcy5s
YXN0U2VlbiA9IFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhzZWNvbmRzLnNlY29uZHMoKSk7Cisg
ICAgfSk7Cit9CisgICAgCiB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0
UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwpCiB7CiAgICAgaWYgKHVybC5pc0JsYW5r
VVJMKCkgfHwgdXJsLmlzRW1wdHkoKSkKQEAgLTc2Myw0ICs3NzYsMTQgQEAgdm9pZCBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmRhdAogICAgIG1fZGF0YVJlY29yZHNSZW1vdmFsUGVu
ZGluZyA9IGZhbHNlOwogfQogICAgIAordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKHNpemVfdCBlbnRyaWVzKQoreworICAgIGNvcmVT
dG9yZSgpLnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKGVudHJpZXMpOworfQorICAgIAordm9pZCBX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFBydW5lRW50cmllc0Rvd25UbyhzaXpl
X3QgZW50cmllcykKK3sKKyAgICBjb3JlU3RvcmUoKS5zZXRQcnVuZUVudHJpZXNEb3duVG8oZW50
cmllcyk7Cit9CisgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlLmgJKHJldmlzaW9uIDIxOTI5NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsNiArNzcs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBsb2dVc2VySW50ZXJhY3Rpb24oY29uc3QgV2ViQ29yZTo6
VVJMJik7CiAgICAgdm9pZCBjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBXZWJDb3JlOjpVUkwm
KTsKICAgICB2b2lkIGhhc0hhZFVzZXJJbnRlcmFjdGlvbihjb25zdCBXZWJDb3JlOjpVUkwmLCBX
VEY6OkZ1bmN0aW9uPHZvaWQgKGJvb2wpPiYmKTsKKyAgICB2b2lkIHNldExhc3RTZWVuKFNlY29u
ZHMsIGNvbnN0IFdlYkNvcmU6OlVSTCYpOwogICAgIHZvaWQgc2V0UHJldmFsZW50UmVzb3VyY2Uo
Y29uc3QgV2ViQ29yZTo6VVJMJik7CiAgICAgdm9pZCBpc1ByZXZhbGVudFJlc291cmNlKGNvbnN0
IFdlYkNvcmU6OlVSTCYsIFdURjo6RnVuY3Rpb248dm9pZCAoYm9vbCk+JiYpOwogICAgIHZvaWQg
Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBXZWJDb3JlOjpVUkwmKTsKQEAgLTk4LDcgKzk5
LDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VGltZVRvTGl2ZUNvb2tpZVBhcnRpdGlvbkZyZWUo
U2Vjb25kcyk7CiAgICAgdm9pZCBzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92
YWwoU2Vjb25kcyk7CiAgICAgdm9pZCBzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyk7Ci0K
KyAgICB2b2lkIHNldE1heFN0YXRpc3RpY3NFbnRyaWVzKHNpemVfdCk7CisgICAgdm9pZCBzZXRQ
cnVuZUVudHJpZXNEb3duVG8oc2l6ZV90KTsKKyAgICAKIHByaXZhdGU6CiAgICAgV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlKGNvbnN0IFN0cmluZyYsIFVwZGF0ZVBhcnRpdGlvbkNvb2tp
ZXNGb3JEb21haW5zSGFuZGxlciYmKTsKIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0JKHJldmlzaW9u
IDIxOTI5NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRl
RGF0YVN0b3JlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMDcsNiArMjA3LDE1IEBAIC0gKHZvaWQp
X3NldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGUKICAgICBfd2Vic2l0ZURhdGFTdG9yZS0+
d2Vic2l0ZURhdGFTdG9yZSgpLnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGVuYWJs
ZWQpOwogfQogCistICh2b2lkKV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0TGFzdFNlZW46KGRv
dWJsZSlzZWNvbmRzIGZvckhvc3Q6KE5TU3RyaW5nICopaG9zdAoreworICAgIGF1dG8qIHN0b3Jl
ID0gX3dlYnNpdGVEYXRhU3RvcmUtPndlYnNpdGVEYXRhU3RvcmUoKS5yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzKCk7CisgICAgaWYgKCFzdG9yZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHN0
b3JlLT5zZXRMYXN0U2VlbihTZWNvbmRzIHsgc2Vjb25kcyB9LCBVUkwoVVJMKCksIGhvc3QpKTsK
K30KKwogLSAodm9pZClfcmVzb3VyY2VMb2FkU3RhdGlzdGljc1NldElzUHJldmFsZW50UmVzb3Vy
Y2U6KEJPT0wpdmFsdWUgZm9ySG9zdDooTlNTdHJpbmcgKilob3N0CiB7CiAgICAgYXV0byogc3Rv
cmUgPSBfd2Vic2l0ZURhdGFTdG9yZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnJlc291cmNlTG9hZFN0
YXRpc3RpY3MoKTsKQEAgLTM0NSw2ICszNTQsMjQgQEAgLSAodm9pZClfcmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1NldEdyYW5kZgogICAgIHN0b3JlLT5zZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25k
cyB7c2Vjb25kcyB9KTsKIH0KIAorLSAodm9pZClfcmVzb3VyY2VMb2FkU3RhdGlzdGljc1NldE1h
eFN0YXRpc3RpY3NFbnRyaWVzOihzaXplX3QpZW50cmllcworeworICAgIGF1dG8qIHN0b3JlID0g
X3dlYnNpdGVEYXRhU3RvcmUtPndlYnNpdGVEYXRhU3RvcmUoKS5yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzKCk7CisgICAgaWYgKCFzdG9yZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RvcmUtPnNl
dE1heFN0YXRpc3RpY3NFbnRyaWVzKGVudHJpZXMpOworfQorCistICh2b2lkKV9yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU2V0UHJ1bmVFbnRyaWVzRG93blRvOihzaXplX3QpZW50cmllcworeworICAg
IGF1dG8qIHN0b3JlID0gX3dlYnNpdGVEYXRhU3RvcmUtPndlYnNpdGVEYXRhU3RvcmUoKS5yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzKCk7CisgICAgaWYgKCFzdG9yZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgc3RvcmUtPnNldFBydW5lRW50cmllc0Rvd25UbyhlbnRyaWVzKTsKK30KKwogLSAodm9p
ZClfcmVzb3VyY2VMb2FkU3RhdGlzdGljc1Byb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMK
IHsKICAgICBhdXRvKiBzdG9yZSA9IF93ZWJzaXRlRGF0YVN0b3JlLT53ZWJzaXRlRGF0YVN0b3Jl
KCkucmVzb3VyY2VMb2FkU3RhdGlzdGljcygpOwpAQCAtNDQxLDYgKzQ2OCw4IEBAIC0gKHZvaWQp
X3Jlc291cmNlTG9hZFN0YXRpc3RpY3NSZXNldFRvQ28KICAgICAgICAgcmV0dXJuOwogCiAgICAg
Ly8gRklYTUU6IFRoZXNlIG5lZWRzIHRvIG1hdGNoIHRoZSBkZWZhdWx0IGRhdGEgbWVtYmVyIHZh
bHVlcyBpbiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCB3aGljaCBpcyBmcmFnaWxlLgorICAgIHN0
b3JlLT5zZXRNYXhTdGF0aXN0aWNzRW50cmllcygxMDAwKTsKKyAgICBzdG9yZS0+c2V0UHJ1bmVF
bnRyaWVzRG93blRvKDgwMCk7CiAgICAgc3RvcmUtPnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rp
b24oc3RkOjpudWxsb3B0KTsKICAgICBzdG9yZS0+c2V0VGltZVRvTGl2ZUNvb2tpZVBhcnRpdGlv
bkZyZWUoMjRfaCk7CiAgICAgc3RvcmUtPnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRz
UmVtb3ZhbCgxX2gpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgJKHJldmlzaW9u
IDIxOTI5NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRl
RGF0YVN0b3JlUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3IEBAIHR5cGVk
ZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBfV0tXZWJzaXQKIEBwcm9wZXJ0eSAobm9uYXRvbWlj
LCBzZXR0ZXI9X3NldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkOikgQk9PTCBfcmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0VuYWJsZWQgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goMTAuMTIpLCBp
b3MoMTAuMCkpOwogCiAvLyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzIFNQSSBmb3IgdGVzdGluZy4K
Ky0gKHZvaWQpX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTZXRMYXN0U2VlbjooZG91YmxlKXNlY29u
ZHMgZm9ySG9zdDooTlNTdHJpbmcgKilob3N0IFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01B
Q19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogLSAodm9pZClfcmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1NldElzUHJldmFsZW50UmVzb3VyY2U6KEJPT0wpdmFsdWUgZm9ySG9zdDooTlNTdHJpbmcgKilo
b3N0IFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkp
OwogLSAodm9pZClfcmVzb3VyY2VMb2FkU3RhdGlzdGljc0lzUHJldmFsZW50UmVzb3VyY2U6KE5T
U3RyaW5nICopaG9zdCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoQk9PTCkpY29tcGxldGlv
bkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1Nf
VEJBKSk7CiAtICh2b2lkKV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0SGFkVXNlckludGVyYWN0
aW9uOihCT09MKXZhbHVlIGZvckhvc3Q6KE5TU3RyaW5nICopaG9zdCBXS19BUElfQVZBSUxBQkxF
KG1hY29zeChXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKQEAgLTU3LDYgKzU4LDggQEAg
dHlwZWRlZiBOU19PUFRJT05TKE5TVUludGVnZXIsIF9XS1dlYnNpdAogLSAodm9pZClfcmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1NldFRpbWVUb0xpdmVDb29raWVQYXJ0aXRpb25GcmVlOihkb3VibGUp
c2Vjb25kcyBXS19BUElfQVZBSUxBQkxFKG1hY29zeChXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19U
QkEpKTsKIC0gKHZvaWQpX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTZXRNaW5pbXVtVGltZUJldHdl
ZW5EYXRhUmVjb3Jkc1JlbW92YWw6KGRvdWJsZSlzZWNvbmRzIFdLX0FQSV9BVkFJTEFCTEUobWFj
b3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogLSAodm9pZClfcmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1NldEdyYW5kZmF0aGVyaW5nVGltZTooZG91YmxlKXNlY29uZHMgV0tfQVBJX0FW
QUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0TWF4U3RhdGlzdGljc0VudHJpZXM6KHNpemVfdCllbnRy
aWVzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkp
OworLSAodm9pZClfcmVzb3VyY2VMb2FkU3RhdGlzdGljc1NldFBydW5lRW50cmllc0Rvd25Ubzoo
c2l6ZV90KWVudHJpZXMgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhX
S19JT1NfVEJBKSk7CiAtICh2b2lkKV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUHJvY2Vzc1N0YXRp
c3RpY3NBbmREYXRhUmVjb3JkcyBXS19BUElfQVZBSUxBQkxFKG1hY29zeChXS19NQUNfVEJBKSwg
aW9zKFdLX0lPU19UQkEpKTsKIC0gKHZvaWQpX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJlU2hv
dWxkUGFydGl0aW9uQ29va2llc0hhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFD
X1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAtICh2b2lkKV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RmlyZVNob3VsZFBhcnRpdGlvbkNvb2tpZXNIYW5kbGVyRm9yT25lRG9tYWluOihCT09MKXZhbHVl
IGZvckhvc3Q6KE5TU3RyaW5nICopaG9zdCBXS19BUElfQVZBSUxBQkxFKG1hY29zeChXS19NQUNf
VEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9T
dG9yYWdlL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1N0b3JhZ2UvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
LmNwcAkocmV2aXNpb24gMjE5Mjk1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1N0b3Jh
Z2UvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcs
NyArMzcsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogY29uc3QgdW5zaWduZWQgbWlu
aW11bVByZXZhbGVudFJlc291cmNlc0ZvclRlbGVtZXRyeSA9IDM7CiBjb25zdCB1bnNpZ25lZCBv
cGVyYXRpbmdEYXRlc1dpbmRvdyB7IDMwIH07Ci1jb25zdCB1bnNpZ25lZCBzdGF0aXN0aWNzTW9k
ZWxWZXJzaW9uIHsgNiB9OworY29uc3QgdW5zaWduZWQgc3RhdGlzdGljc01vZGVsVmVyc2lvbiB7
IDcgfTsKIAogUmVmPFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpjcmVhdGUoKQogewpAQCAtMjQ0LDYgKzI0NCwxNyBAQCB2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0R3JhCiAgICAgbV9ncmFuZGZhdGhlcmluZ1RpbWUg
PSBzZWNvbmRzOwogfQogCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0TWF4
U3RhdGlzdGljc0VudHJpZXMoc2l6ZV90IG1heGltdW1FbnRyeUNvdW50KQoreworICAgIG1fbWF4
U3RhdGlzdGljc0VudHJpZXMgPSBtYXhpbXVtRW50cnlDb3VudDsKK30KKwordm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFBydW5lRW50cmllc0Rvd25UbyhzaXplX3QgcHJ1bmVU
YXJnZXRDb3VudCkKK3sKKyAgICBBU1NFUlQocHJ1bmVUYXJnZXRDb3VudCA8PSBtX21heFN0YXRp
c3RpY3NFbnRyaWVzKTsKKyAgICBtX3BydW5lRW50cmllc0Rvd25UbyA9IHBydW5lVGFyZ2V0Q291
bnQ7Cit9CisKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcm9jZXNzU3RhdGlz
dGljcyhjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpPiYg
cHJvY2Vzc0Z1bmN0aW9uKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwpAQCAt
MzY4LDQgKzM3OSw2MCBAQCBib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFzU3Rh
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogICAgIAorc3RydWN0IFN0YXRpc3RpY3NMYXN0U2VlbiB7
CisgICAgU3RyaW5nIHRvcFByaXZhdGVseU93bmVkRG9tYWluOworICAgIFdhbGxUaW1lIGxhc3RT
ZWVuOworfTsKKyAgICAKK3N0YXRpYyBzaXplX3QgcHJ1bmVSZXNvdXJjZXMoSGFzaE1hcDxTdHJp
bmcsIFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M+JiBzdGF0aXN0aWNzTWFwLCBWZWN0
b3I8U3RhdGlzdGljc0xhc3RTZWVuPiYgc3RhdGlzdGljc1RvUHJ1bmUsIHNpemVfdCBudW1iZXJP
ZkVudHJpZXNUb1BydW5lKQoreworICAgIGlmIChzdGF0aXN0aWNzVG9QcnVuZS5zaXplKCkgPiBu
dW1iZXJPZkVudHJpZXNUb1BydW5lKSB7CisgICAgICAgIHN0ZDo6c29ydChzdGF0aXN0aWNzVG9Q
cnVuZS5iZWdpbigpLCBzdGF0aXN0aWNzVG9QcnVuZS5lbmQoKSwgW10oY29uc3QgU3RhdGlzdGlj
c0xhc3RTZWVuJiBhLCBjb25zdCBTdGF0aXN0aWNzTGFzdFNlZW4mIGIpIHsKKyAgICAgICAgICAg
IHJldHVybiBhLmxhc3RTZWVuIDwgYi5sYXN0U2VlbjsKKyAgICAgICAgfSk7CisgICAgfQorICAg
IAorICAgIGZvciAoYXV0byYgc3RhdGlzdGljIDogc3RhdGlzdGljc1RvUHJ1bmUpIHsKKyAgICAg
ICAgc3RhdGlzdGljc01hcC5yZW1vdmUoc3RhdGlzdGljLnRvcFByaXZhdGVseU93bmVkRG9tYWlu
KTsKKyAgICAgICAgQVNTRVJUKG51bWJlck9mRW50cmllc1RvUHJ1bmUpOworICAgICAgICBpZiAo
IS0tbnVtYmVyT2ZFbnRyaWVzVG9QcnVuZSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0K
KyAgICAKKyAgICByZXR1cm4gbnVtYmVyT2ZFbnRyaWVzVG9QcnVuZTsKK30KKworY29uc3RleHBy
IHNpemVfdCBtYXhJbXBvcnRhbmNlIHsgMyB9OworCitzdGF0aWMgc2l6ZV90IGNvbXB1dGVJbXBv
cnRhbmNlKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHJlc291cmNlU3RhdGlzdGljKQor
eworICAgIGlmICghcmVzb3VyY2VTdGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNvdXJjZSkKKyAgICAg
ICAgcmV0dXJuICFyZXNvdXJjZVN0YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rpb24gPyAwIDogMjsK
KworICAgIHJldHVybiAhcmVzb3VyY2VTdGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uID8gMSA6
IDM7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcnVuZVN0YXRpc3Rp
Y3NJZk5lZWRlZCgpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgaWYg
KG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnNpemUoKSA8IG1fbWF4U3RhdGlzdGljc0VudHJpZXMp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBzaXplX3QgbnVtYmVyT2ZFbnRyaWVzTGVmdFRv
UHJ1bmUgPSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5zaXplKCkgLSBtX3BydW5lRW50cmllc0Rv
d25UbzsKKyAgICBBU1NFUlQobnVtYmVyT2ZFbnRyaWVzTGVmdFRvUHJ1bmUpOworCisgICAgVmVj
dG9yPFN0YXRpc3RpY3NMYXN0U2Vlbj4gcmVzb3VyY2VzVG9QcnVuZVBlckltcG9ydGFuY2VbbWF4
SW1wb3J0YW5jZSArIDFdOworICAgIGZvciAoYXV0byYgcmVzb3VyY2VTdGF0aXN0aWMgOiBtX3Jl
c291cmNlU3RhdGlzdGljc01hcC52YWx1ZXMoKSkKKyAgICAgICAgcmVzb3VyY2VzVG9QcnVuZVBl
ckltcG9ydGFuY2VbY29tcHV0ZUltcG9ydGFuY2UocmVzb3VyY2VTdGF0aXN0aWMpXS5hcHBlbmQo
eyByZXNvdXJjZVN0YXRpc3RpYy5oaWdoTGV2ZWxEb21haW4sIHJlc291cmNlU3RhdGlzdGljLmxh
c3RTZWVuIH0pOworCisgICAgc2l6ZV90IGltcG9ydGFuY2UgPSAwOworICAgIHdoaWxlIChudW1i
ZXJPZkVudHJpZXNMZWZ0VG9QcnVuZSkgeworICAgICAgICBBU1NFUlQoaW1wb3J0YW5jZSA8PSBt
YXhJbXBvcnRhbmNlKTsKKyAgICAgICAgbnVtYmVyT2ZFbnRyaWVzTGVmdFRvUHJ1bmUgPSBwcnVu
ZVJlc291cmNlcyhtX3Jlc291cmNlU3RhdGlzdGljc01hcCwgcmVzb3VyY2VzVG9QcnVuZVBlcklt
cG9ydGFuY2VbaW1wb3J0YW5jZV0sIG51bWJlck9mRW50cmllc0xlZnRUb1BydW5lKTsKKyAgICAg
ICAgKytpbXBvcnRhbmNlOworICAgIH0KKworICAgIEFTU0VSVCghbnVtYmVyT2ZFbnRyaWVzTGVm
dFRvUHJ1bmUpOworfQorCiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU3RvcmFn
ZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvU3RvcmFnZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAkocmV2
aXNpb24gMjE5Mjk1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1N0b3JhZ2UvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDggQEAg
cHVibGljOgogICAgIHZvaWQgc2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihzdGQ6Om9wdGlv
bmFsPFNlY29uZHM+KTsKICAgICB2b2lkIHNldFRpbWVUb0xpdmVDb29raWVQYXJ0aXRpb25GcmVl
KFNlY29uZHMpOwogICAgIHZvaWQgc2V0R3JhbmRmYXRoZXJpbmdUaW1lKFNlY29uZHMpOworICAg
IHZvaWQgc2V0TWF4U3RhdGlzdGljc0VudHJpZXMoc2l6ZV90KTsKKyAgICB2b2lkIHNldFBydW5l
RW50cmllc0Rvd25UbyhzaXplX3QpOwogCiAgICAgdm9pZCBmaXJlU2hvdWxkUGFydGl0aW9uQ29v
a2llc0hhbmRsZXIoKTsKICAgICB2b2lkIGZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxl
cihjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWluc1RvUmVtb3ZlLCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgZG9tYWluc1RvQWRkLCBib29sIGNsZWFyRmlyc3QpOwpAQCAtODcsNiArODksNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCBoYW5kbGVGcmVzaFN0YXJ0V2l0aEVtcHR5T3JOb1N0b3JlKEhhc2hT
ZXQ8U3RyaW5nPiYmIHRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zVG9HcmFuZGZhdGhlcik7
CiAgICAgdm9pZCBpbmNsdWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeSgpOwogCisg
ICAgdm9pZCBwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCgpOwogcHJpdmF0ZToKICAgICBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUoKSA9IGRlZmF1bHQ7CiAKQEAgLTEwMSw2ICsxMDQsOCBAQCBw
cml2YXRlOgogICAgIHN0ZDo6b3B0aW9uYWw8U2Vjb25kcz4gbV90aW1lVG9MaXZlVXNlckludGVy
YWN0aW9uOwogICAgIFNlY29uZHMgbV90aW1lVG9MaXZlQ29va2llUGFydGl0aW9uRnJlZSB7IDI0
X2ggfTsKICAgICBTZWNvbmRzIG1fZ3JhbmRmYXRoZXJpbmdUaW1lIHsgMV9oIH07CisgICAgc2l6
ZV90IG1fbWF4U3RhdGlzdGljc0VudHJpZXMgeyAxMDAwIH07CisgICAgc2l6ZV90IG1fcHJ1bmVF
bnRyaWVzRG93blRvIHsgODAwIH07CiAKICAgICBXYWxsVGltZSBtX2VuZE9mR3JhbmRmYXRoZXJp
bmdUaW1lc3RhbXA7CiB9OwpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjE5Mjk1KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTctMDctMTAgIEpvaG4gV2lsYW5kZXIgIDx3
aWxhbmRlckBhcHBsZS5jb20+CisKKyAgICAgICAgUmVzb3VyY2UgTG9hZCBTdGF0aXN0aWNzOiBQ
cnVuZSBzdGF0aXN0aWNzIGluIG9yZGVycyBvZiBpbXBvcnRhbmNlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQyMTUKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzMzMTY0NDAzPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE5lc3QgaW5mcmFzdHJ1Y3R1cmUuIEFkZHMgdGhlc2UgZnVuY3Rpb25zOgorICAg
ICAgICAxLiB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NMYXN0U2VlbigpCisgICAgICAgIDIuIHNl
dFN0YXRpc3RpY3NNYXhTdGF0aXN0aWNzRW50cmllcygpCisgICAgICAgIDMuIHNldFN0YXRpc3Rp
Y3NQcnVuZUVudHJpZXNEb3duVG8oKQorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbDoKKyAgICAgICAgKiBXZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjpzZXRTdGF0aXN0aWNzTGFzdFNlZW4pOgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
OjpzZXRTdGF0aXN0aWNzTWF4U3RhdGlzdGljc0VudHJpZXMpOgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjpzZXRTdGF0aXN0aWNzUHJ1bmVFbnRyaWVzRG93blRvKToKKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaDoKKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdENvbnRy
b2xsZXI6OnNldFN0YXRpc3RpY3NMYXN0U2Vlbik6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9s
bGVyOjpzZXRNYXhTdGF0aXN0aWNzRW50cmllcyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9s
bGVyOjpzZXRQcnVuZUVudHJpZXNEb3duVG8pOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIv
VGVzdENvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0
aW9uLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVTeW5jaHJv
bm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5u
ZXIvY29jb2EvVGVzdENvbnRyb2xsZXJDb2NvYS5tbToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRy
b2xsZXI6OnNldFN0YXRpc3RpY3NMYXN0U2Vlbik6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9s
bGVyOjpzZXRTdGF0aXN0aWNzTWF4U3RhdGlzdGljc0VudHJpZXMpOgorICAgICAgICAoV1RSOjpU
ZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc1BydW5lRW50cmllc0Rvd25Ubyk6CisKIDIwMTct
MDctMTAgIENoYXJsaWUgVHVybmVyICA8Y3R1cm5lckBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtH
U3RyZWFtZXJdIExpdmUgdHdpdGNoLnR2IHZpZGVvcyBkbyBub3QgcGxheQpJbmRleDogVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDIxOTI5NSkKKysr
IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMjQ5LDYgKzIyNDksMTAgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cmVtb3ZlQWxsU2Vz
c2lvbkNyZQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKSB8fCAhV0tfQVBJX0VOQUJMRUQKIAordm9p
ZCBUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc0xhc3RTZWVuKFdLU3RyaW5nUmVmLCBkb3Vi
bGUpCit7Cit9CisgICAgCiB2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzUHJldmFs
ZW50UmVzb3VyY2UoV0tTdHJpbmdSZWYsIGJvb2wpCiB7CiB9CkBAIC0yMzMyLDYgKzIzMzYsMTQg
QEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc0dyYW5kZgogewogfQogCit2b2lk
IFRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzTWF4U3RhdGlzdGljc0VudHJpZXModW5zaWdu
ZWQpCit7Cit9CisgICAgCit2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzUHJ1bmVF
bnRyaWVzRG93blRvKHVuc2lnbmVkKQoreworfQorICAgIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6
c3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUoKQogewogfQpJbmRleDog
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAkocmV2aXNpb24gMjE5Mjk1KQor
KysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTAsNiArMTUwLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRTaG91bGREb3dubG9h
ZFVuZGlzcGxheWFibGVNSU1FVHlwZXMoYm9vbCB2YWx1ZSkgeyBtX3Nob3VsZERvd25sb2FkVW5k
aXNwbGF5YWJsZU1JTUVUeXBlcyA9IHZhbHVlOyB9CiAKKyAgICB2b2lkIHNldFN0YXRpc3RpY3NM
YXN0U2VlbihXS1N0cmluZ1JlZiBob3N0TmFtZSwgZG91YmxlIHNlY29uZHMpOwogICAgIHZvaWQg
c2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKFdLU3RyaW5nUmVmIGhvc3ROYW1lLCBib29s
IHZhbHVlKTsKICAgICBib29sIGlzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKFdLU3RyaW5n
UmVmIGhvc3ROYW1lKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rp
b24oV0tTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpOwpAQCAtMTcwLDYgKzE3MSw4IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlX
YXNDYXB0dXJlZChib29sIHZhbHVlKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NNaW5pbXVtVGlt
ZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoZG91YmxlKTsKICAgICB2b2lkIHNldFN0YXRpc3Rp
Y3NHcmFuZGZhdGhlcmluZ1RpbWUoZG91YmxlIHNlY29uZHMpOworICAgIHZvaWQgc2V0U3RhdGlz
dGljc01heFN0YXRpc3RpY3NFbnRyaWVzKHVuc2lnbmVkKTsKKyAgICB2b2lkIHNldFN0YXRpc3Rp
Y3NQcnVuZUVudHJpZXNEb3duVG8odW5zaWduZWQpOwogICAgIHZvaWQgc3RhdGlzdGljc0NsZWFy
SW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUoKTsKICAgICB2b2lkIHN0YXRpc3RpY3NDbGVhcklu
TWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlTW9kaWZpZWRTaW5jZUhvdXJzKHVuc2lnbmVkKTsKICAg
ICB2b2lkIHN0YXRpc3RpY3NSZXNldFRvQ29uc2lzdGVudFN0YXRlKCk7CkluZGV4OiBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcAkocmV2aXNpb24gMjE5Mjk1KQorKysg
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTkxMiw2ICs5MTIsMjEgQEAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0SW52b2NhdGlv
bjo6ZAogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAorICAgIGlmIChXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc0xhc3RTZWVuIikp
IHsKKyAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25h
cnlHZXRUeXBlSUQoKSk7CisgICAgICAgIAorICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9k
eSk7CisgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZUtleShBZG9wdFdL
LCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSk7CisgICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiB2YWx1ZUtleShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiVmFsdWUiKSk7CisgICAgICAgIAorICAgICAgICBXS1N0cmluZ1JlZiBo
b3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9y
S2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaG9zdE5hbWVLZXkuZ2V0KCkpKTsKKyAgICAgICAg
V0tEb3VibGVSZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5
R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHZhbHVlS2V5LmdldCgpKSk7Cisg
ICAgICAgIAorICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGlj
c0xhc3RTZWVuKGhvc3ROYW1lLCBXS0RvdWJsZUdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIAor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzUHJldmFsZW50UmVz
b3VyY2UiKSkgewogICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdL
RGljdGlvbmFyeUdldFR5cGVJRCgpKTsKIApAQCAtMTEwMSw2ICsxMTE2LDIwIEBAIFdLUmV0YWlu
UHRyPFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246OmQKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgfQogICAgIAorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3Nh
Z2VOYW1lLCAiU2V0TWF4U3RhdGlzdGljc0VudHJpZXMiKSkgeworICAgICAgICBBU1NFUlQoV0tH
ZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLVUludDY0R2V0VHlwZUlEKCkpOworICAgICAgICBX
S1VJbnQ2NFJlZiBlbnRyaWVzID0gc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KG1lc3NhZ2VCb2R5
KTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NNYXhT
dGF0aXN0aWNzRW50cmllcyhXS1VJbnQ2NEdldFZhbHVlKGVudHJpZXMpKTsKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgfQorICAgIAorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0UHJ1bmVFbnRyaWVzRG93blRvIikpIHsKKyAgICAgICAg
QVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1VJbnQ2NEdldFR5cGVJRCgpKTsK
KyAgICAgICAgV0tVSW50NjRSZWYgZW50cmllcyA9IHN0YXRpY19jYXN0PFdLVUludDY0UmVmPiht
ZXNzYWdlQm9keSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0
aXN0aWNzUHJ1bmVFbnRyaWVzRG93blRvKFdLVUludDY0R2V0VmFsdWUoZW50cmllcykpOworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBl
cnNpc3RlbnRTdG9yZSIpKSB7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5z
dGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSgpOwogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
VGVzdFJ1bm5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAkocmV2aXNpb24gMjE5Mjk1KQorKysgVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTE3NSw2ICsxMTc1LDMxIEBAIHZvaWQgVGVzdFJ1bm5lcjo6Y2FsbERpZFJlbW92ZVN3
aXBlU25hcHMKICAgICBjYWxsVGVzdFJ1bm5lckNhbGxiYWNrKERpZFJlbW92ZVN3aXBlU25hcHNo
b3RDYWxsYmFja0lEKTsKIH0KIAordm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzTGFzdFNl
ZW4oSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGRvdWJsZSBzZWNvbmRzKQoreworICAgIFZlY3RvcjxX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7CisgICAgVmVjdG9yPFdLUmV0YWluUHRyPFdL
VHlwZVJlZj4+IHZhbHVlczsKKyAgICAKKyAgICBrZXlzLmFwcGVuZCh7IEFkb3B0V0ssIFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpIH0pOworICAgIHZhbHVlcy5hcHBl
bmQoeyBBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkgfSk7Cisg
ICAgCisgICAga2V5cy5hcHBlbmQoeyBBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiVmFsdWUiKSB9KTsKKyAgICB2YWx1ZXMuYXBwZW5kKHsgQWRvcHRXSywgV0tEb3VibGVD
cmVhdGUoc2Vjb25kcykgfSk7CisgICAgCisgICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlz
KGtleXMuc2l6ZSgpKTsKKyAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXModmFsdWVzLnNp
emUoKSk7CisgICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytp
KSB7CisgICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOworICAgICAgICByYXdWYWx1
ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7CisgICAgfQorICAgIAorICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiU2V0U3RhdGlzdGljc0xhc3RTZWVuIikpOworICAgIFdLUmV0YWluUHRyPFdLRGljdGlv
bmFyeVJlZj4gbWVzc2FnZUJvZHkoQWRvcHRXSywgV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMu
ZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOworICAgIAorICAgIFdL
QnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
YnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7
Cit9CisgICAgCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJj
ZShKU1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSkKIHsKICAgICBWZWN0b3I8V0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOwpAQCAtMTQ5MSw2ICsxNTE2LDIwIEBAIHZvaWQgVGVz
dFJ1bm5lcjo6c2V0U3RhdGlzdGljc0dyYW5kZmF0aGUKICAgICBXS0J1bmRsZVBvc3RTeW5jaHJv
bm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOwogfQogCit2b2lkIFRlc3RS
dW5uZXI6OnNldFN0YXRpc3RpY3NNYXhTdGF0aXN0aWNzRW50cmllcyh1bnNpZ25lZCBlbnRyaWVz
KQoreworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZShBZG9wdFdLLCBX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0TWF4U3RhdGlzdGljc0VudHJpZXMiKSk7
CisgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBtZXNzYWdlQm9keShBZG9wdFdLLCBXS1VJbnQ2
NENyZWF0ZShlbnRyaWVzKSk7CisgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1l
c3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKK30KKyAgICAKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0
U3RhdGlzdGljc1BydW5lRW50cmllc0Rvd25Ubyh1bnNpZ25lZCBlbnRyaWVzKQoreworICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiU2V0UHJ1bmVFbnRyaWVzRG93blRvIikpOworICAgIFdLUmV0YWlu
UHRyPFdLVHlwZVJlZj4gbWVzc2FnZUJvZHkoQWRvcHRXSywgV0tVSW50NjRDcmVhdGUoZW50cmll
cykpOworICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQo
KSwgbnVsbHB0cik7Cit9CisgICAgCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDbGVhcklu
TWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlKCkKIHsKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0
YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlIikpOwpJbmRleDogVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmgJKHJl
dmlzaW9uIDIxOTI5NSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
VGVzdFJ1bm5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNTcsNiArMzU3LDcgQEAgcHVibGljOgog
ICAgIHZvaWQgc3RhdGlzdGljc0ZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlcigpOwog
ICAgIHZvaWQgc3RhdGlzdGljc0ZpcmVTaG91bGRQYXJ0aXRpb25Db29raWVzSGFuZGxlckZvck9u
ZURvbWFpbihKU1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7CiAgICAgdm9pZCBzdGF0
aXN0aWNzU3VibWl0VGVsZW1ldHJ5KCk7CisgICAgdm9pZCBzZXRTdGF0aXN0aWNzTGFzdFNlZW4o
SlNTdHJpbmdSZWYgaG9zdE5hbWUsIGRvdWJsZSBzZWNvbmRzKTsKICAgICB2b2lkIHNldFN0YXRp
c3RpY3NQcmV2YWxlbnRSZXNvdXJjZShKU1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7
CiAgICAgYm9vbCBpc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShKU1N0cmluZ1JlZiBob3N0
TmFtZSk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKEpTU3Ry
aW5nUmVmIGhvc3ROYW1lLCBib29sIHZhbHVlKTsKQEAgLTM3Myw2ICszNzQsOCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVy
ZWQoYm9vbCB2YWx1ZSk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVu
RGF0YVJlY29yZHNSZW1vdmFsKGRvdWJsZSk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzR3JhbmRm
YXRoZXJpbmdUaW1lKGRvdWJsZSBzZWNvbmRzKTsKKyAgICB2b2lkIHNldFN0YXRpc3RpY3NNYXhT
dGF0aXN0aWNzRW50cmllcyh1bnNpZ25lZCk7CisgICAgdm9pZCBzZXRTdGF0aXN0aWNzUHJ1bmVF
bnRyaWVzRG93blRvKHVuc2lnbmVkKTsKICAgICB2b2lkIHN0YXRpc3RpY3NDbGVhckluTWVtb3J5
QW5kUGVyc2lzdGVudFN0b3JlKCk7CiAgICAgdm9pZCBzdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFu
ZFBlcnNpc3RlbnRTdG9yZU1vZGlmaWVkU2luY2VIb3Vycyh1bnNpZ25lZCBob3Vycyk7CiAgICAg
dm9pZCBzdGF0aXN0aWNzUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSgpOwpJbmRleDogVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdz
L1Rlc3RSdW5uZXIuaWRsCShyZXZpc2lvbiAyMTkyOTUpCisrKyBUb29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsCSh3b3JraW5nIGNvcHkp
CkBAIC0yNTQsNiArMjU0LDcgQEAgaW50ZXJmYWNlIFRlc3RSdW5uZXIgewogICAgIHZvaWQgaW5z
dGFsbFN0YXRpc3RpY3NEaWRNb2RpZnlEYXRhUmVjb3Jkc0NhbGxiYWNrKG9iamVjdCBjYWxsYmFj
ayk7CiAgICAgdm9pZCBpbnN0YWxsU3RhdGlzdGljc0RpZFNjYW5EYXRhUmVjb3Jkc0NhbGxiYWNr
KG9iamVjdCBjYWxsYmFjayk7CiAgICAgdm9pZCBpbnN0YWxsU3RhdGlzdGljc0RpZFJ1blRlbGVt
ZXRyeUNhbGxiYWNrKG9iamVjdCBjYWxsYmFjayk7CisgICAgdm9pZCBzZXRTdGF0aXN0aWNzTGFz
dFNlZW4oRE9NU3RyaW5nIGhvc3ROYW1lLCBkb3VibGUgc2Vjb25kcyk7CiAgICAgdm9pZCBzZXRT
dGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoRE9NU3RyaW5nIGhvc3ROYW1lLCBib29sZWFuIHZh
bHVlKTsKICAgICBib29sZWFuIGlzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKERPTVN0cmlu
ZyBob3N0TmFtZSk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9u
KERPTVN0cmluZyBob3N0TmFtZSwgYm9vbGVhbiB2YWx1ZSk7CkBAIC0yNzQsNiArMjc1LDggQEAg
aW50ZXJmYWNlIFRlc3RSdW5uZXIgewogICAgIHZvaWQgc2V0U3RhdGlzdGljc05vdGlmeVBhZ2Vz
V2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKGJvb2xlYW4gdmFsdWUpOwogICAgIHZvaWQgc2V0U3Rh
dGlzdGljc01pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChkb3VibGUgc2Vjb25k
cyk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzR3JhbmRmYXRoZXJpbmdUaW1lKGRvdWJsZSBzZWNv
bmRzKTsKKyAgICB2b2lkIHNldFN0YXRpc3RpY3NNYXhTdGF0aXN0aWNzRW50cmllcyh1bnNpZ25l
ZCBsb25nIGVudHJpZXMpOworICAgIHZvaWQgc2V0U3RhdGlzdGljc1BydW5lRW50cmllc0Rvd25U
byh1bnNpZ25lZCBsb25nIGVudHJpZXMpOwogICAgIHZvaWQgc3RhdGlzdGljc0NsZWFySW5NZW1v
cnlBbmRQZXJzaXN0ZW50U3RvcmUoKTsKICAgICB2b2lkIHN0YXRpc3RpY3NDbGVhckluTWVtb3J5
QW5kUGVyc2lzdGVudFN0b3JlTW9kaWZpZWRTaW5jZUhvdXJzKHVuc2lnbmVkIGxvbmcgaG91cnMp
OwogICAgIHZvaWQgc3RhdGlzdGljc1Jlc2V0VG9Db25zaXN0ZW50U3RhdGUoKTsKSW5kZXg6IFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdENvbnRyb2xsZXJDb2NvYS5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29jb2Eu
bW0JKHJldmlzaW9uIDIxOTI5NSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVz
dENvbnRyb2xsZXJDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjIyLDYgKzIyMiwxMSBAQCB2
b2lkIFRlc3RDb250cm9sbGVyOjpyZW1vdmVBbGxTZXNzaW9uQ3JlCiB9CiAKICNpZiBXS19BUElf
RU5BQkxFRAordm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc0xhc3RTZWVuKFdLU3Ry
aW5nUmVmIGhvc3ROYW1lLCBkb3VibGUgc2Vjb25kcykKK3sKKyAgICBbZ2xvYmFsV2ViVmlld0Nv
bmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSBfcmVzb3VyY2VMb2FkU3RhdGlzdGljc1NldExh
c3RTZWVuOnNlY29uZHMgZm9ySG9zdDp0b05TU3RyaW5nKGhvc3ROYW1lKV07Cit9CisgICAgCiB2
b2lkIFRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoV0tTdHJp
bmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpCiB7CiAgICAgW2dsb2JhbFdlYlZpZXdDb25maWd1
cmF0aW9uLndlYnNpdGVEYXRhU3RvcmUgX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTZXRJc1ByZXZh
bGVudFJlc291cmNlOnZhbHVlIGZvckhvc3Q6dG9OU1N0cmluZyhob3N0TmFtZSldOwpAQCAtMzQ2
LDYgKzM1MSwxNiBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzR3JhbmRmCiAg
ICAgW2dsb2JhbFdlYlZpZXdDb25maWd1cmF0aW9uLndlYnNpdGVEYXRhU3RvcmUgX3Jlc291cmNl
TG9hZFN0YXRpc3RpY3NTZXRHcmFuZGZhdGhlcmluZ1RpbWU6c2Vjb25kc107CiB9CiAKK3ZvaWQg
VGVzdENvbnRyb2xsZXI6OnNldFN0YXRpc3RpY3NNYXhTdGF0aXN0aWNzRW50cmllcyh1bnNpZ25l
ZCBlbnRyaWVzKQoreworICAgIFtnbG9iYWxXZWJWaWV3Q29uZmlndXJhdGlvbi53ZWJzaXRlRGF0
YVN0b3JlIF9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0TWF4U3RhdGlzdGljc0VudHJpZXM6ZW50
cmllc107Cit9CisgICAgCit2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzUHJ1bmVF
bnRyaWVzRG93blRvKHVuc2lnbmVkIGVudHJpZXMpCit7CisgICAgW2dsb2JhbFdlYlZpZXdDb25m
aWd1cmF0aW9uLndlYnNpdGVEYXRhU3RvcmUgX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTZXRQcnVu
ZUVudHJpZXNEb3duVG86ZW50cmllc107Cit9CisgICAgCiB2b2lkIFRlc3RDb250cm9sbGVyOjpz
dGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSgpCiB7CiAgICAgW2dsb2Jh
bFdlYlZpZXdDb25maWd1cmF0aW9uLndlYnNpdGVEYXRhU3RvcmUgX3Jlc291cmNlTG9hZFN0YXRp
c3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlXTsKSW5kZXg6IExheW91dFRlc3Rz
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDIxOTI5NSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE3IEBACisyMDE3LTA3LTEwICBKb2huIFdpbGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29t
PgorCisgICAgICAgIFJlc291cmNlIExvYWQgU3RhdGlzdGljczogUHJ1bmUgc3RhdGlzdGljcyBp
biBvcmRlcnMgb2YgaW1wb3J0YW5jZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTc0MjE1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMzE2NDQwMz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGh0dHAv
dGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3BydW5lLXN0YXRpc3RpY3MtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VM
b2FkU3RhdGlzdGljcy9wcnVuZS1zdGF0aXN0aWNzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBs
YXRmb3JtL3drMi9UZXN0RXhwZWN0YXRpb25zOgorICAgICAgICAgICAgQWRkZWQgaHR0cC90ZXN0
cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcHJ1bmUtc3RhdGlzdGljcy5odG1sIGFz
CisgICAgICAgICAgICBbIFBhc3MgXSBzaW5jZSBSZXNvdXJjZSBMb2FkIFN0YXRpc3RpY3MgaXMg
V0syLW9ubHkuCisKIDIwMTctMDctMTAgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4K
IAogICAgICAgICBCbG9jayBvZiB0ZXh0IGlzIG1pc3NpbmcgaW4gaUJvb2tzIHNhbXBsZSBib29r
cy4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzL3BydW5lLXN0YXRpc3RpY3MtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3BydW5lLXN0
YXRpc3RpY3MtZXhwZWN0ZWQudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2h0dHAv
dGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3BydW5lLXN0YXRpc3RpY3MtZXhw
ZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjMgQEAKK21haW4gZnJhbWUgLSBk
aWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lCittYWluIGZyYW1lIC0gZGlkQ29tbWl0TG9h
ZEZvckZyYW1lCittYWluIGZyYW1lIC0gZGlkUmVjZWl2ZVRpdGxlOiBUZXN0IGZvciBSZXNvdXJj
ZSBMb2FkIFN0YXRpc3RpY3MgUHJ1bmluZworbWFpbiBmcmFtZSAtIGRpZEZpbmlzaERvY3VtZW50
TG9hZEZvckZyYW1lCittYWluIGZyYW1lIC0gZGlkSGFuZGxlT25sb2FkRXZlbnRzRm9yRnJhbWUK
K21haW4gZnJhbWUgLSBkaWRGaW5pc2hMb2FkRm9yRnJhbWUKK1Rlc3RzIHRoYXQgc3RhdGlzdGlj
cyBhcmUgcHJ1bmVkIGluIHRoZSByaWdodCBvcmRlci4KKworT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorCisKK1BBU1MgVGVzdCBpdGVyYXRpb24gMSBwYXNzZWQuCitQQVNTIFRlc3QgaXRlcmF0
aW9uIDIgcGFzc2VkLgorUEFTUyBUZXN0IGl0ZXJhdGlvbiAzIHBhc3NlZC4KK1BBU1MgVGVzdCBp
dGVyYXRpb24gNCBwYXNzZWQuCitQQVNTIFRlc3QgaXRlcmF0aW9uIDUgcGFzc2VkLgorUEFTUyBU
ZXN0IGl0ZXJhdGlvbiA2IHBhc3NlZC4KK1BBU1MgVGVzdCBpdGVyYXRpb24gNyBwYXNzZWQuCitQ
QVNTIFRlc3QgaXRlcmF0aW9uIDggcGFzc2VkLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9h
ZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3BydW5lLXN0YXRpc3RpY3MuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlz
dGljcy9wcnVuZS1zdGF0aXN0aWNzLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcHJ1bmUtc3RhdGlzdGlj
cy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE5IEBACis8IURPQ1RZUEUgaHRtbD4K
KzxodG1sPgorPGhlYWQ+CisgICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiPgorICAgIDx0aXRsZT5U
ZXN0IGZvciBSZXNvdXJjZSBMb2FkIFN0YXRpc3RpY3MgUHJ1bmluZzwvdGl0bGU+CisgICAgPHNj
cmlwdCBzcmM9Ii9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0LmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPHNjcmlwdD4KKyAgICBkZXNjcmlwdGlvbigiVGVzdHMgdGhhdCBzdGF0aXN0
aWNzIGFyZSBwcnVuZWQgaW4gdGhlIHJpZ2h0IG9yZGVyLiIpOworICAgIGpzVGVzdElzQXN5bmMg
PSB0cnVlOworCisgICAgY29uc3Qgb2xkZXJUaW1lc3RhbXAgPSBNYXRoLnJvdW5kKChuZXcgRGF0
ZSgpKS5nZXRUaW1lKCkgLyAxMDAwKTsKKyAgICBjb25zdCBuZXdlclRpbWVzdGFtcCA9IG9sZGVy
VGltZXN0YW1wICsgMTA7CisgICAgY29uc3QgbmV3ZXN0VGltZXN0YW1wID0gbmV3ZXJUaW1lc3Rh
bXAgKyAxMDsKKworICAgIGNvbnN0IHVybHNUb0JlUHJ1bmVkID0gWworICAgICAgICB7IHVybDog
Imh0dHA6Ly8xMjcuMC4wLjE6ODAwMC90ZW1wIiwgcHJldmFsZW50OiBmYWxzZSB9LAorICAgICAg
ICB7IHVybDogImh0dHA6Ly8xMjcuMC4wLjI6ODAwMC90ZW1wIiwgcHJldmFsZW50OiBmYWxzZSB9
LAorICAgICAgICB7IHVybDogImh0dHA6Ly8xMjcuMC4wLjM6ODAwMC90ZW1wIiwgcHJldmFsZW50
OiB0cnVlIH0sCisgICAgICAgIHsgdXJsOiAiaHR0cDovLzEyNy4wLjAuNDo4MDAwL3RlbXAiLCBw
cmV2YWxlbnQ6IHRydWUgfSwKKyAgICAgICAgeyB1cmw6ICJodHRwOi8vMTI3LjAuMC41OjgwMDAv
dGVtcCIsIHByZXZhbGVudDogZmFsc2UgfSwKKyAgICAgICAgeyB1cmw6ICJodHRwOi8vMTI3LjAu
MC42OjgwMDAvdGVtcCIsIHByZXZhbGVudDogZmFsc2UgfSwKKyAgICAgICAgeyB1cmw6ICJodHRw
Oi8vMTI3LjAuMC43OjgwMDAvdGVtcCIsIHByZXZhbGVudDogdHJ1ZSB9LAorICAgICAgICB7IHVy
bDogImh0dHA6Ly8xMjcuMC4wLjg6ODAwMC90ZW1wIiwgcHJldmFsZW50OiB0cnVlIH0KKyAgICBd
OworCisgICAgZnVuY3Rpb24gY2hlY2tJZlByZXZhbGVudEFjY29yZGluZ1RvSW5pdGlhbEV4cGVj
dGF0aW9uKGJlZ2luLCBlbmQpIHsKKyAgICAgICAgdmFyIGZhaWxlZCA9IGZhbHNlOworICAgICAg
ICBmb3IgKHZhciBpID0gYmVnaW47IGkgPCBlbmQ7ICsraSkgeworICAgICAgICAgICAgaWYgKHRl
c3RSdW5uZXIuaXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UodXJsc1RvQmVQcnVuZWRbaV0u
dXJsKSAhPT0gdXJsc1RvQmVQcnVuZWRbaV0ucHJldmFsZW50KSB7CisgICAgICAgICAgICAgICAg
dGVzdEZhaWxlZCgiY2hlY2tJZlByZXZhbGVudEFjY29yZGluZ1RvSW5pdGlhbEV4cGVjdGF0aW9u
OiBUZXN0IGl0ZXJhdGlvbiAiICsgY3VycmVudFRlc3QgKyAiIGZhaWxlZC4gIiArIHVybHNUb0Jl
UHJ1bmVkW2ldLnVybCArICh1cmxzVG9CZVBydW5lZFtpXS5wcmV2YWxlbnQgPyAiIHdhc24ndCAi
IDogIiB3YXMgIikgKyAicHJldmFsZW50Iik7CisgICAgICAgICAgICAgICAgZmFpbGVkID0gdHJ1
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoZmFpbGVkKQorICAgICAg
ICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gY2hlY2tJZlByZXZh
bGVudChiZWdpbiwgZW5kLCBleHBlY3RlZCkgeworICAgICAgICB2YXIgZmFpbGVkID0gZmFsc2U7
CisgICAgICAgIGZvciAodmFyIGkgPSBiZWdpbjsgaSA8IGVuZDsgKytpKSB7CisgICAgICAgICAg
ICBpZiAodGVzdFJ1bm5lci5pc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZSh1cmxzVG9CZVBy
dW5lZFtpXS51cmwpICE9PSBleHBlY3RlZCkgeworICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQo
ImNoZWNrSWZQcmV2YWxlbnQ6IFRlc3QgaXRlcmF0aW9uICIgKyBjdXJyZW50VGVzdCArICIgZmFp
bGVkLiAiICsgdXJsc1RvQmVQcnVuZWRbaV0udXJsICsgKGV4cGVjdGVkID8gIiB3YXNuJ3QgIiA6
ICIgd2FzICIpICsgInByZXZhbGVudCIpOworICAgICAgICAgICAgICAgIGZhaWxlZCA9IHRydWU7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZhaWxlZCkKKyAgICAgICAg
ICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGluaXRpYWxpemVTdGF0
aXN0aWNzKCkgeworICAgICAgICB0ZXN0UnVubmVyLmluc3RhbGxTdGF0aXN0aWNzRGlkU2NhbkRh
dGFSZWNvcmRzQ2FsbGJhY2soY2hlY2tTdGF0aXN0aWNzQWZ0ZXJQcnVuaW5nKTsKKworICAgICAg
ICAvLyBOb24tcHJldmFsZW50IHdpdGhvdXQgdXNlciBpbnRlcmFjdGlvbiB0byBiZSBwcnVuZWQg
Zmlyc3QuCisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc0xhc3RTZWVuKHVybHNUb0Jl
UHJ1bmVkWzBdLnVybCwgb2xkZXJUaW1lc3RhbXApOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0
YXRpc3RpY3NMYXN0U2Vlbih1cmxzVG9CZVBydW5lZFsxXS51cmwsIG5ld2VyVGltZXN0YW1wKTsK
KworICAgICAgICAvLyBQcmV2YWxlbnQgd2l0aG91dCB1c2VyIGludGVyYWN0aW9uIHRvIGJlIHBy
dW5lZCBzZWNvbmQuCisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1ByZXZhbGVudFJl
c291cmNlKHVybHNUb0JlUHJ1bmVkWzJdLnVybCwgdHJ1ZSk7CisgICAgICAgIHRlc3RSdW5uZXIu
c2V0U3RhdGlzdGljc0xhc3RTZWVuKHVybHNUb0JlUHJ1bmVkWzJdLnVybCwgb2xkZXJUaW1lc3Rh
bXApOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZSh1
cmxzVG9CZVBydW5lZFszXS51cmwsIHRydWUpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRp
c3RpY3NMYXN0U2Vlbih1cmxzVG9CZVBydW5lZFszXS51cmwsIG5ld2VyVGltZXN0YW1wKTsKKwor
ICAgICAgICAvLyBOb24tcHJldmFsZW50IHdpdGggdXNlciBpbnRlcmFjdGlvbiB0byBiZSBwcnVu
ZWQgdGhpcmQuCisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRl
cmFjdGlvbih1cmxzVG9CZVBydW5lZFs0XS51cmwsIHRydWUpOworICAgICAgICB0ZXN0UnVubmVy
LnNldFN0YXRpc3RpY3NMYXN0U2Vlbih1cmxzVG9CZVBydW5lZFs0XS51cmwsIG9sZGVyVGltZXN0
YW1wKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0
aW9uKHVybHNUb0JlUHJ1bmVkWzVdLnVybCwgdHJ1ZSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0
U3RhdGlzdGljc0xhc3RTZWVuKHVybHNUb0JlUHJ1bmVkWzVdLnVybCwgbmV3ZXJUaW1lc3RhbXAp
OworCisgICAgICAgIC8vIFByZXZhbGVudCB3aXRoIHVzZXIgaW50ZXJhY3Rpb24gdG8gYmUgcHJ1
bmVkIGxhc3QuCisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291
cmNlKHVybHNUb0JlUHJ1bmVkWzZdLnVybCwgdHJ1ZSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0
U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbih1cmxzVG9CZVBydW5lZFs2XS51cmwsIHRy
dWUpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NMYXN0U2Vlbih1cmxzVG9CZVBy
dW5lZFs2XS51cmwsIG9sZGVyVGltZXN0YW1wKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0
aXN0aWNzUHJldmFsZW50UmVzb3VyY2UodXJsc1RvQmVQcnVuZWRbN10udXJsLCB0cnVlKTsKKyAg
ICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKHVybHNU
b0JlUHJ1bmVkWzddLnVybCwgdHJ1ZSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGlj
c0xhc3RTZWVuKHVybHNUb0JlUHJ1bmVkWzddLnVybCwgbmV3ZXJUaW1lc3RhbXApOworCisgICAg
ICAgIGNoZWNrSWZQcmV2YWxlbnRBY2NvcmRpbmdUb0luaXRpYWxFeHBlY3RhdGlvbigwLCB1cmxz
VG9CZVBydW5lZC5sZW5ndGgpOworICAgIH0KKworICAgIHZhciBjdXJyZW50VGVzdDsKKyAgICBm
dW5jdGlvbiBjaGVja1N0YXRpc3RpY3NBZnRlclBydW5pbmcoKSB7CisgICAgICAgIC8vIFBydW5l
ZCBlbnRyaWVzIHNob3VsZCBub3QgYmUgcHJldmFsZW50LgorICAgICAgICBjaGVja0lmUHJldmFs
ZW50KDAsIGN1cnJlbnRUZXN0LCBmYWxzZSk7CisgICAgICAgIC8vIE5vbi1wcnVuZWQgZW50cmll
cyBzaG91bGQga2VlcCB0aGVpciBleHBlY3RlZCBzdGF0dXMuCisgICAgICAgIGNoZWNrSWZQcmV2
YWxlbnRBY2NvcmRpbmdUb0luaXRpYWxFeHBlY3RhdGlvbihjdXJyZW50VGVzdCwgdXJsc1RvQmVQ
cnVuZWQubGVuZ3RoKTsKKyAgICAgICAgdGVzdFBhc3NlZCgiVGVzdCBpdGVyYXRpb24gIiArIGN1
cnJlbnRUZXN0ICsgIiBwYXNzZWQuIik7CisgICAgICAgIGlmIChjdXJyZW50VGVzdCA8IHVybHNU
b0JlUHJ1bmVkLmxlbmd0aCkgeworICAgICAgICAgICAgKytjdXJyZW50VGVzdDsKKyAgICAgICAg
ICAgIHJ1blRlc3QoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZpbmlzaEpTVGVz
dCgpOworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICAg
ICAgaW5pdGlhbGl6ZVN0YXRpc3RpY3MoKTsKKworICAgICAgICB2YXIgZmlsbGVyVXJsID0gImh0
dHA6Ly8xMjcuMC4iICsgY3VycmVudFRlc3QgKyAiLjE6ODAwMC90ZW1wIjsKKyAgICAgICAgdGVz
dFJ1bm5lci5zZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoZmlsbGVyVXJsLCB0cnVlKTsK
KyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKGZp
bGxlclVybCwgdHJ1ZSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc0xhc3RTZWVu
KGZpbGxlclVybCwgbmV3ZXN0VGltZXN0YW1wKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zdGF0aXN0
aWNzUHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3JkcygpOworICAgIH0KKworICAgIGlmICh3
aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NTaG91
bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChmYWxzZSk7CisgICAg
ICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRz
UmVtb3ZhbCgwKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNX
aGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCh0cnVlKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRT
dGF0aXN0aWNzTWF4U3RhdGlzdGljc0VudHJpZXModXJsc1RvQmVQcnVuZWQubGVuZ3RoKTsKKyAg
ICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzUHJ1bmVFbnRyaWVzRG93blRvKHVybHNUb0Jl
UHJ1bmVkLmxlbmd0aCk7CisKKyAgICAgICAgY3VycmVudFRlc3QgPSAxOworICAgICAgICBydW5U
ZXN0KCk7CisgICAgfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2syL1Rlc3RFeHBlY3Rh
dGlvbnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2syL1Rlc3RFeHBlY3Rh
dGlvbnMJKHJldmlzaW9uIDIxOTI5NSkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL3drMi9UZXN0
RXhwZWN0YXRpb25zCSh3b3JraW5nIGNvcHkpCkBAIC03MDYsNiArNzA2LDcgQEAgaHR0cC90ZXN0
cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpYwogaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291
cmNlTG9hZFN0YXRpc3RpY3MvY2xlYXItaW4tbWVtb3J5LWFuZC1wZXJzaXN0ZW50LXN0b3JlLmh0
bWwgWyBQYXNzIF0KIHdlYmtpdC5vcmcvYi8xNzI0NTIgaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291
cmNlTG9hZFN0YXRpc3RpY3MvZ3JhbmRmYXRoZXJpbmcuaHRtbCBbIFBhc3MgRmFpbHVyZSBUaW1l
b3V0IF0KIHdlYmtpdC5vcmcvYi8xNzM0OTkgaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9h
ZFN0YXRpc3RpY3MvdGVsZW1ldHJ5LWdlbmVyYXRpb24uaHRtbCBbIFBhc3MgRmFpbHVyZSBdCito
dHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wcnVuZS1zdGF0aXN0aWNz
Lmh0bWwgWyBQYXNzIF0KIAogIyMjIEVORCBPRiAoNSkgUHJvZ3Jlc3Npb25zLCBleHBlY3RlZCBz
dWNjZXNzZXMgdGhhdCBhcmUgZXhwZWN0ZWQgZmFpbHVyZXMgaW4gV2ViS2l0MS4KICMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>315029</attachid>
            <date>2017-07-10 14:26:40 -0700</date>
            <delta_ts>2017-07-10 16:48:45 -0700</delta_ts>
            <desc>Patch (Rebaselined)</desc>
            <filename>bug-174215-20170710142640.patch</filename>
            <type>text/plain</type>
            <size>44466</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxOTMwOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDE3LTA3LTEwICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIExvYWQgU3Rh
dGlzdGljczogUHJ1bmUgc3RhdGlzdGljcyBpbiBvcmRlcnMgb2YgaW1wb3J0YW5jZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0MjE1CisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS8zMzE2NDQwMz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUZXN0OiBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2Fk
U3RhdGlzdGljcy9wcnVuZS1zdGF0aXN0aWNzLmh0bWwKKworICAgICAgICAqIGxvYWRlci9SZXNv
dXJjZUxvYWRPYnNlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZWR1Y2VUaW1lUmVzb2x1
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nRnJhbWVO
YXZpZ2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dT
dWJyZXNvdXJjZUxvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OmxvZ1dlYlNvY2tldExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OmxvZ1VzZXJJbnRlcmFjdGlvbldpdGhSZWR1Y2VkVGltZVJlc29sdXRpb24pOgor
ICAgICAgICAgICAgTm93IGFsbCBzZXQgdGhlIG5ldyBzdGF0aXN0aWNzIGZpZWxkIGxhc3RTZWVu
LgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M6OmVuY29kZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljczo6dG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljczo6bWVyZ2UpOgorICAgICAgICAgICAgSGFuZGxpbmcgb2YgdGhl
IG5ldyBzdGF0aXN0aWNzIGZpZWxkIGxhc3RTZWVuLgorICAgICAgICAqIGxvYWRlci9SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzLmg6CisKIDIwMTctMDctMTAgIEplcmVteSBKb25lcyAgPGplcmVteWpA
YXBwbGUuY29tPgogCiAgICAgICAgIENhcHRpb25zIGFuZCBzdWJ0aXRsZXMgbm90IHNob3dpbmcg
dXAgaW4gcGljdHVyZS1pbi1waWN0dXJlIGZvciBNU0UgY29udGVudApJbmRleDogU291cmNlL1dl
YkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCShyZXZpc2lvbiAyMTkz
MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05Miw2ICs5MiwxMSBAQCBib29sIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaG91bGRMb2coUGFnCiAgICAgcmV0dXJuIFNldHRpbmdzOjpyZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRW5hYmxlZCgpICYmICFwYWdlLT51c2VzRXBoZW1lcmFsU2Vzc2lvbigpICYmIG1fbm90aWZp
Y2F0aW9uQ2FsbGJhY2s7CiB9CiAKK3N0YXRpYyBXYWxsVGltZSByZWR1Y2VUb0hvdXJseVRpbWVS
ZXNvbHV0aW9uKFdhbGxUaW1lIHRpbWUpCit7CisgICAgcmV0dXJuIFdhbGxUaW1lOjpmcm9tUmF3
U2Vjb25kcyhzdGQ6OmZsb29yKHRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKSAvIHRpbWVzdGFtcFJl
c29sdXRpb24pICogdGltZXN0YW1wUmVzb2x1dGlvbi5zZWNvbmRzKCkpOworfQorCiB2b2lkIFJl
c291cmNlTG9hZE9ic2VydmVyOjpsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgRnJhbWUmIGZyYW1l
LCBjb25zdCBGcmFtZSYgdG9wRnJhbWUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgbmV3UmVxdWVz
dCkKIHsKICAgICBBU1NFUlQoZnJhbWUuZG9jdW1lbnQoKSk7CkBAIC0xMjUsNiArMTMwLDcgQEAg
dm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nRnJhbWVOYXZpZwogICAgICAgICByZXR1cm47
CiAKICAgICBhdXRvJiB0YXJnZXRTdGF0aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNz
Rm9yUHJpbWFyeURvbWFpbih0YXJnZXRQcmltYXJ5RG9tYWluKTsKKyAgICB0YXJnZXRTdGF0aXN0
aWNzLmxhc3RTZWVuID0gcmVkdWNlVG9Ib3VybHlUaW1lUmVzb2x1dGlvbihXYWxsVGltZTo6bm93
KCkpOwogICAgIGF1dG8gc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc1Jlc3VsdCA9IHRhcmdl
dFN0YXRpc3RpY3Muc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucy5hZGQobWFpbkZyYW1lUHJp
bWFyeURvbWFpbik7CiAgICAgaWYgKHN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNSZXN1bHQu
aXNOZXdFbnRyeSkKICAgICAgICAgc2NoZWR1bGVOb3RpZmljYXRpb25JZk5lZWRlZCgpOwpAQCAt
MTU4LDYgKzE2NCw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1N1YnJlc291cmMK
ICAgICBib29sIHNob3VsZENhbGxOb3RpZmljYXRpb25DYWxsYmFjayA9IGZhbHNlOwogICAgIHsK
ICAgICAgICAgYXV0byYgdGFyZ2V0U3RhdGlzdGljcyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGlj
c0ZvclByaW1hcnlEb21haW4odGFyZ2V0UHJpbWFyeURvbWFpbik7CisgICAgICAgIHRhcmdldFN0
YXRpc3RpY3MubGFzdFNlZW4gPSByZWR1Y2VUb0hvdXJseVRpbWVSZXNvbHV0aW9uKFdhbGxUaW1l
Ojpub3coKSk7CiAgICAgICAgIGlmICh0YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlVW5kZXJU
b3BGcmFtZU9yaWdpbnMuYWRkKG1haW5GcmFtZVByaW1hcnlEb21haW4pLmlzTmV3RW50cnkpCiAg
ICAgICAgICAgICBzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2sgPSB0cnVlOwogICAgIH0K
QEAgLTE5NywxNSArMjA0LDExIEBAIHZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1dlYlNv
Y2tldEwKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byYgdGFyZ2V0U3RhdGlzdGljcyA9IGVu
c3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4odGFyZ2V0UHJpbWFyeURvbWFp
bik7CisgICAgdGFyZ2V0U3RhdGlzdGljcy5sYXN0U2VlbiA9IHJlZHVjZVRvSG91cmx5VGltZVJl
c29sdXRpb24oV2FsbFRpbWU6Om5vdygpKTsKICAgICBpZiAodGFyZ2V0U3RhdGlzdGljcy5zdWJy
ZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zLmFkZChtYWluRnJhbWVQcmltYXJ5RG9tYWluKS5p
c05ld0VudHJ5KQogICAgICAgICBzY2hlZHVsZU5vdGlmaWNhdGlvbklmTmVlZGVkKCk7CiB9CiAK
LXN0YXRpYyBXYWxsVGltZSByZWR1Y2VUaW1lUmVzb2x1dGlvbihXYWxsVGltZSB0aW1lKQotewot
ICAgIHJldHVybiBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoc3RkOjpmbG9vcih0aW1lLnNlY29u
ZHNTaW5jZUVwb2NoKCkgLyB0aW1lc3RhbXBSZXNvbHV0aW9uKSAqIHRpbWVzdGFtcFJlc29sdXRp
b24uc2Vjb25kcygpKTsKLX0KLQogdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nVXNlcklu
dGVyYWN0aW9uV2l0aFJlZHVjZWRUaW1lUmVzb2x1dGlvbihjb25zdCBEb2N1bWVudCYgZG9jdW1l
bnQpCiB7CiAgICAgQVNTRVJUKGRvY3VtZW50LnBhZ2UoKSk7CkBAIC0yMTgsMTEgKzIyMSwxMiBA
QCB2b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dVc2VySW50ZXJhCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQ
cmltYXJ5RG9tYWluKHByaW1hcnlEb21haW4odXJsKSk7Ci0gICAgYXV0byBuZXdUaW1lID0gcmVk
dWNlVGltZVJlc29sdXRpb24oV2FsbFRpbWU6Om5vdygpKTsKKyAgICBhdXRvIG5ld1RpbWUgPSBy
ZWR1Y2VUb0hvdXJseVRpbWVSZXNvbHV0aW9uKFdhbGxUaW1lOjpub3coKSk7CiAgICAgaWYgKG5l
d1RpbWUgPT0gc3RhdGlzdGljcy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgc3RhdGlzdGljcy5oYWRVc2VySW50ZXJhY3Rpb24gPSB0cnVlOwor
ICAgIHN0YXRpc3RpY3MubGFzdFNlZW4gPSBuZXdUaW1lOwogICAgIHN0YXRpc3RpY3MubW9zdFJl
Y2VudFVzZXJJbnRlcmFjdGlvblRpbWUgPSBuZXdUaW1lOwogCiAgICAgc2NoZWR1bGVOb3RpZmlj
YXRpb25JZk5lZWRlZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNv
dXJjZUxvYWRTdGF0aXN0aWNzLmNwcAkocmV2aXNpb24gMjE5MzA4KQorKysgU291cmNlL1dlYkNv
cmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MCw2ICs1MCw4IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6ZW5jb2RlKEtleWUKIHsK
ICAgICBlbmNvZGVyLmVuY29kZVN0cmluZygiUHJldmFsZW50UmVzb3VyY2VPcmlnaW4iLCBoaWdo
TGV2ZWxEb21haW4pOwogICAgIAorICAgIGVuY29kZXIuZW5jb2RlRG91YmxlKCJsYXN0U2VlbiIs
IGxhc3RTZWVuLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSk7CisgICAgCiAgICAgLy8gVXNl
ciBpbnRlcmFjdGlvbgogICAgIGVuY29kZXIuZW5jb2RlQm9vbCgiaGFkVXNlckludGVyYWN0aW9u
IiwgaGFkVXNlckludGVyYWN0aW9uKTsKICAgICBlbmNvZGVyLmVuY29kZURvdWJsZSgibW9zdFJl
Y2VudFVzZXJJbnRlcmFjdGlvbiIsIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lLnNlY29u
ZHNTaW5jZUVwb2NoKCkudmFsdWUoKSk7CkBAIC0xMTQsNiArMTE2LDExIEBAIGJvb2wgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljczo6ZGVjb2RlKEtleWUKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlQm9v
bCgiZ3JhbmRmYXRoZXJlZCIsIGdyYW5kZmF0aGVyZWQpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKKyAgICBkb3VibGUgbGFzdFNlZW5UaW1lQXNEb3VibGU7CisgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZURvdWJsZSgibGFzdFNlZW4iLCBsYXN0U2VlblRpbWVBc0RvdWJsZSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBsYXN0U2VlbiA9IFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhsYXN0
U2VlblRpbWVBc0RvdWJsZSk7CisgICAgCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE0Nyw2
ICsxNTQsMTAgQEAgU3RyaW5nIFJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnRvU3RyaW5nKAogewog
ICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKICAgICAKKyAgICBidWlsZGVyLmFwcGVuZExpdGVy
YWwoImxhc3RTZWVuIik7CisgICAgYnVpbGRlci5hcHBlbmROdW1iZXIobGFzdFNlZW4uc2Vjb25k
c1NpbmNlRXBvY2goKS52YWx1ZSgpKTsKKyAgICBidWlsZGVyLmFwcGVuZCgnXG4nKTsKKyAgICAK
ICAgICAvLyBVc2VyIGludGVyYWN0aW9uCiAgICAgYXBwZW5kQm9vbGVhbihidWlsZGVyLCAiaGFk
VXNlckludGVyYWN0aW9uIiwgaGFkVXNlckludGVyYWN0aW9uKTsKICAgICBidWlsZGVyLmFwcGVu
ZCgnXG4nKTsKQEAgLTE4OSw2ICsyMDAsOSBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3M6
Om1lcmdlKGNvbnN0CiB7CiAgICAgQVNTRVJUKG90aGVyLmhpZ2hMZXZlbERvbWFpbiA9PSBoaWdo
TGV2ZWxEb21haW4pOwogCisgICAgaWYgKGxhc3RTZWVuIDwgb3RoZXIubGFzdFNlZW4pCisgICAg
ICAgIGxhc3RTZWVuID0gb3RoZXIubGFzdFNlZW47CisgICAgCiAgICAgaWYgKCFvdGhlci5oYWRV
c2VySW50ZXJhY3Rpb24pIHsKICAgICAgICAgLy8gSWYgdXNlciBpbnRlcmFjdGlvbiBoYXMgYmVl
biByZXNldCBkbyBzbyBoZXJlIHRvby4KICAgICAgICAgLy8gRWxzZSwgZG8gbm90aGluZy4KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuaAko
cmV2aXNpb24gMjE5MzA4KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3MuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEsOSBAQCBzdHJ1Y3QgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyB7CiAKICAgICBTdHJpbmcgaGlnaExldmVsRG9tYWluOwogCisgICAg
Ly8gVGltZXN0YW1wLiBEZWZhdWx0IHZhbHVlIGlzIG5lZ2F0aXZlLCAwIG1lYW5zIGl0IHdhcyBy
ZXNldC4KKyAgICBXYWxsVGltZSBsYXN0U2VlbiB7IFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcygt
MSkgfTsKKyAgICAKICAgICAvLyBVc2VyIGludGVyYWN0aW9uCiAgICAgYm9vbCBoYWRVc2VySW50
ZXJhY3Rpb24geyBmYWxzZSB9OwogICAgIC8vIFRpbWVzdGFtcC4gRGVmYXVsdCB2YWx1ZSBpcyBu
ZWdhdGl2ZSwgMCBtZWFucyBpdCB3YXMgcmVzZXQuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
MTkzMDgpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSw0OSBAQAorMjAxNy0wNy0xMCAgSm9obiBXaWxhbmRlciAgPHdpbGFuZGVyQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXNvdXJjZSBMb2FkIFN0YXRpc3RpY3M6IFBydW5lIHN0YXRpc3RpY3Mg
aW4gb3JkZXJzIG9mIGltcG9ydGFuY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3NDIxNQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzMxNjQ0MDM+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IGZ1
bmN0aW9uYWxpdHkuIFBydW5lcyBzdGF0aXN0aWNzIGluIHRoaXMgb3JkZXI6CisgICAgICAgIDEu
IE5vbi1wcmV2YWxlbnQgcmVzb3VyY2VzIHdpdGhvdXQgdXNlciBpbnRlcmFjdGlvbi4KKyAgICAg
ICAgMi4gUHJldmFsZW50IHJlc291cmNlcyB3aXRob3V0IHVzZXIgaW50ZXJhY3Rpb24uCisgICAg
ICAgIDMuIE5vbi1wcmV2YWxlbnQgcmVzb3VyY2VzIHdpdGggdXNlciBpbnRlcmFjdGlvbi4KKyAg
ICAgICAgNC4gUHJldmFsZW50IHJlc291cmNlcyB3aXRoIHVzZXIgaW50ZXJhY3Rpb24uCisKKyAg
ICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKElQQzo6
QXJndW1lbnRDb2RlcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPjo6ZW5jb2RlKToKKyAgICAgICAg
KElQQzo6QXJndW1lbnRDb2RlcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPjo6ZGVjb2RlKToKKyAg
ICAgICAgICAgIEFkZGVkIHRpbWVzdGFtcCBmaWVsZCBsYXN0U2Vlbi4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbToKKyAgICAgICAgKC1bV0tXZWJz
aXRlRGF0YVN0b3JlIF9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0TGFzdFNlZW46Zm9ySG9zdDpd
KToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U2V0TWF4U3RhdGlzdGljc0VudHJpZXM6XSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFTdG9y
ZSBfcmVzb3VyY2VMb2FkU3RhdGlzdGljc1NldFBydW5lRW50cmllc0Rvd25UbzpdKToKKyAgICAg
ICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUmVzZXRUb0Nv
bnNpc3RlbnRTdGF0ZV0pOgorICAgICAgICAgICAgVGVzdCBpbmZyYXN0cnVjdHVyZS4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvU3RvcmFnZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldE1heFN0
YXRpc3RpY3NFbnRyaWVzKToKKyAgICAgICAgICAgIFRlc3QgaW5mcmFzdHJ1Y3R1cmUuCisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJ1bmVFbnRyaWVz
RG93blRvKToKKyAgICAgICAgICAgIFRlc3QgaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgIChXZWJL
aXQ6OnNvcnRBbmRQcnVuZSk6CisgICAgICAgICAgICBDb252ZW5pZW5jZSBmdW5jdGlvbi4KKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcnVuZVN0YXRpc3Rp
Y3NJZk5lZWRlZCk6CisgICAgICAgICAgICBUaGUgbmV3IHBydW5pbmcgZnVuY3Rpb24uCisgICAg
ICAgICogVUlQcm9jZXNzL1N0b3JhZ2UvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmg6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJvY2Vzc1N0
YXRpc3RpY3NBbmREYXRhUmVjb3Jkcyk6CisgICAgICAgICAgICBOb3cgY2FsbHMgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCgpLgorICAgICAgICAo
V2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldExhc3RTZWVuKToKKyAg
ICAgICAgICAgIFRlc3QgaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgIChXZWJLaXQ6OldlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0TWF4U3RhdGlzdGljc0VudHJpZXMpOgorICAgICAg
ICAgICAgVGVzdCBpbmZyYXN0cnVjdHVyZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpzZXRQcnVuZUVudHJpZXNEb3duVG8pOgorICAgICAgICAgICAg
VGVzdCBpbmZyYXN0cnVjdHVyZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlLmg6CisKIDIwMTctMDctMTAgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hh
bUBhcHBsZS5jb20+CiAKICAgICAgICAgW1dLMl1bbWFjT1NdIEFsbG93IGFjY2VzcyB0byBjb20u
YXBwbGUuY2ZuZXR3b3JrLmNmbmV0d29ya2FnZW50IGluIHRoZSBOZXR3b3JrIFByb2Nlc3MKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3Bw
CShyZXZpc2lvbiAyMTkzMDgpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3Vt
ZW50Q29kZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI0Miw2ICsyMjQyLDggQEAgdm9pZCBB
cmd1bWVudENvZGVyPFJlc291cmNlTG9hZFN0YXRpc3RpYwogewogICAgIGVuY29kZXIgPDwgc3Rh
dGlzdGljcy5oaWdoTGV2ZWxEb21haW47CiAgICAgCisgICAgZW5jb2RlciA8PCBzdGF0aXN0aWNz
Lmxhc3RTZWVuLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKTsKKyAgICAKICAgICAvLyBVc2Vy
IGludGVyYWN0aW9uCiAgICAgZW5jb2RlciA8PCBzdGF0aXN0aWNzLmhhZFVzZXJJbnRlcmFjdGlv
bjsKICAgICBlbmNvZGVyIDw8IHN0YXRpc3RpY3MubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRp
bWUuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpOwpAQCAtMjI2NCw2ICsyMjY2LDExIEBAIGJv
b2wgQXJndW1lbnRDb2RlcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWMKICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKHN0YXRpc3RpY3MuaGlnaExldmVsRG9tYWluKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIAorICAgIGRvdWJsZSBsYXN0U2VlblRpbWVBc0RvdWJsZTsKKyAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKGxhc3RTZWVuVGltZUFzRG91YmxlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIHN0YXRpc3RpY3MubGFzdFNlZW4gPSBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMobGFzdFNl
ZW5UaW1lQXNEb3VibGUpOworICAgIAogICAgIC8vIFVzZXIgaW50ZXJhY3Rpb24KICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHN0YXRpc3RpY3MuaGFkVXNlckludGVyYWN0aW9uKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAJKHJldmlzaW9uIDIxOTMw
OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsNiArMTQ3LDggQEAgdm9pZCBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnBybwogICAgICAgICB9CiAgICAgICAgIHJlbW92ZURh
dGFSZWNvcmRzKCk7CiAgICAgICAgIAorICAgICAgICBjb3JlU3RvcmUoKS5wcnVuZVN0YXRpc3Rp
Y3NJZk5lZWRlZCgpOworCiAgICAgICAgIGlmIChtX3Nob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFS
ZWNvcmRzV2VyZVNjYW5uZWQpIHsKICAgICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRj
aChbXSB7CiAgICAgICAgICAgICAgICAgV2ViUHJvY2Vzc1Byb3h5Ojpub3RpZnlQYWdlU3RhdGlz
dGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2VkKCk7CkBAIC01MDUsNiArNTA3LDE3IEBAIHZvaWQg
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpoYXMKICAgICB9KTsKIH0KIAordm9pZCBX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldExhc3RTZWVuKFNlY29uZHMgc2Vjb25k
cywgY29uc3QgVVJMJiB1cmwpCit7CisgICAgaWYgKHVybC5pc0JsYW5rVVJMKCkgfHwgdXJsLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fc3RhdGlzdGljc1F1ZXVlLT5k
aXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCB1cmwgPSB1cmwu
aXNvbGF0ZWRDb3B5KCksIHNlY29uZHNdIHsKKyAgICAgICAgYXV0byYgc3RhdGlzdGljcyA9IGNv
cmVTdG9yZSgpLmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJpbWFy
eURvbWFpbih1cmwpKTsKKyAgICAgICAgc3RhdGlzdGljcy5sYXN0U2VlbiA9IFdhbGxUaW1lOjpm
cm9tUmF3U2Vjb25kcyhzZWNvbmRzLnNlY29uZHMoKSk7CisgICAgfSk7Cit9CisgICAgCiB2b2lk
IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29u
c3QgVVJMJiB1cmwpCiB7CiAgICAgaWYgKHVybC5pc0JsYW5rVVJMKCkgfHwgdXJsLmlzRW1wdHko
KSkKQEAgLTY4Myw0ICs2OTYsMTQgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnNldAogICAgICAgICBtX2xhc3RUaW1lRGF0YVJlY29yZHNXZXJlUmVtb3ZlZCA9IE1vbm90
b25pY1RpbWU6Om5vdygpOwogfQogICAgIAordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKHNpemVfdCBlbnRyaWVzKQoreworICAgIGNv
cmVTdG9yZSgpLnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKGVudHJpZXMpOworfQorICAgIAordm9p
ZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFBydW5lRW50cmllc0Rvd25Ubyhz
aXplX3QgZW50cmllcykKK3sKKyAgICBjb3JlU3RvcmUoKS5zZXRQcnVuZUVudHJpZXNEb3duVG8o
ZW50cmllcyk7Cit9CisgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlLmgJKHJldmlzaW9uIDIxOTMwOCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtODAsNiAr
ODAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBsb2dVc2VySW50ZXJhY3Rpb24oY29uc3QgV2ViQ29y
ZTo6VVJMJik7CiAgICAgdm9pZCBjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBXZWJDb3JlOjpV
UkwmKTsKICAgICB2b2lkIGhhc0hhZFVzZXJJbnRlcmFjdGlvbihjb25zdCBXZWJDb3JlOjpVUkwm
LCBXVEY6OkZ1bmN0aW9uPHZvaWQgKGJvb2wpPiYmKTsKKyAgICB2b2lkIHNldExhc3RTZWVuKFNl
Y29uZHMsIGNvbnN0IFdlYkNvcmU6OlVSTCYpOwogICAgIHZvaWQgc2V0UHJldmFsZW50UmVzb3Vy
Y2UoY29uc3QgV2ViQ29yZTo6VVJMJik7CiAgICAgdm9pZCBpc1ByZXZhbGVudFJlc291cmNlKGNv
bnN0IFdlYkNvcmU6OlVSTCYsIFdURjo6RnVuY3Rpb248dm9pZCAoYm9vbCk+JiYpOwogICAgIHZv
aWQgY2xlYXJQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBXZWJDb3JlOjpVUkwmKTsKQEAgLTEwMSw3
ICsxMDIsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRUaW1lVG9MaXZlQ29va2llUGFydGl0aW9u
RnJlZShTZWNvbmRzKTsKICAgICB2b2lkIHNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRz
UmVtb3ZhbChTZWNvbmRzKTsKICAgICB2b2lkIHNldEdyYW5kZmF0aGVyaW5nVGltZShTZWNvbmRz
KTsKLQorICAgIHZvaWQgc2V0TWF4U3RhdGlzdGljc0VudHJpZXMoc2l6ZV90KTsKKyAgICB2b2lk
IHNldFBydW5lRW50cmllc0Rvd25UbyhzaXplX3QpOworICAgIAogcHJpdmF0ZToKICAgICBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoY29uc3QgU3RyaW5nJiwgVXBkYXRlQ29va2llUGFy
dGl0aW9uaW5nRm9yRG9tYWluc0hhbmRsZXImJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tCShy
ZXZpc2lvbiAyMTkzMDgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
V2Vic2l0ZURhdGFTdG9yZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjA3LDYgKzIwNywxNSBAQCAt
ICh2b2lkKV9zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlCiAgICAgX3dlYnNpdGVEYXRh
U3RvcmUtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxl
ZChlbmFibGVkKTsKIH0KIAorLSAodm9pZClfcmVzb3VyY2VMb2FkU3RhdGlzdGljc1NldExhc3RT
ZWVuOihkb3VibGUpc2Vjb25kcyBmb3JIb3N0OihOU1N0cmluZyAqKWhvc3QKK3sKKyAgICBhdXRv
KiBzdG9yZSA9IF93ZWJzaXRlRGF0YVN0b3JlLT53ZWJzaXRlRGF0YVN0b3JlKCkucmVzb3VyY2VM
b2FkU3RhdGlzdGljcygpOworICAgIGlmICghc3RvcmUpCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICBzdG9yZS0+c2V0TGFzdFNlZW4oU2Vjb25kcyB7IHNlY29uZHMgfSwgVVJMKFVSTCgpLCBo
b3N0KSk7Cit9CisKIC0gKHZvaWQpX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTZXRJc1ByZXZhbGVu
dFJlc291cmNlOihCT09MKXZhbHVlIGZvckhvc3Q6KE5TU3RyaW5nICopaG9zdAogewogICAgIGF1
dG8qIHN0b3JlID0gX3dlYnNpdGVEYXRhU3RvcmUtPndlYnNpdGVEYXRhU3RvcmUoKS5yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzKCk7CkBAIC0zNDUsNiArMzU0LDI0IEBAIC0gKHZvaWQpX3Jlc291cmNl
TG9hZFN0YXRpc3RpY3NTZXRHcmFuZGYKICAgICBzdG9yZS0+c2V0R3JhbmRmYXRoZXJpbmdUaW1l
KFNlY29uZHMge3NlY29uZHMgfSk7CiB9CiAKKy0gKHZvaWQpX3Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTZXRNYXhTdGF0aXN0aWNzRW50cmllczooc2l6ZV90KWVudHJpZXMKK3sKKyAgICBhdXRvKiBz
dG9yZSA9IF93ZWJzaXRlRGF0YVN0b3JlLT53ZWJzaXRlRGF0YVN0b3JlKCkucmVzb3VyY2VMb2Fk
U3RhdGlzdGljcygpOworICAgIGlmICghc3RvcmUpCisgICAgICAgIHJldHVybjsKKworICAgIHN0
b3JlLT5zZXRNYXhTdGF0aXN0aWNzRW50cmllcyhlbnRyaWVzKTsKK30KKworLSAodm9pZClfcmVz
b3VyY2VMb2FkU3RhdGlzdGljc1NldFBydW5lRW50cmllc0Rvd25Ubzooc2l6ZV90KWVudHJpZXMK
K3sKKyAgICBhdXRvKiBzdG9yZSA9IF93ZWJzaXRlRGF0YVN0b3JlLT53ZWJzaXRlRGF0YVN0b3Jl
KCkucmVzb3VyY2VMb2FkU3RhdGlzdGljcygpOworICAgIGlmICghc3RvcmUpCisgICAgICAgIHJl
dHVybjsKKworICAgIHN0b3JlLT5zZXRQcnVuZUVudHJpZXNEb3duVG8oZW50cmllcyk7Cit9CisK
IC0gKHZvaWQpX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NQcm9jZXNzU3RhdGlzdGljc0FuZERhdGFS
ZWNvcmRzCiB7CiAgICAgYXV0byogc3RvcmUgPSBfd2Vic2l0ZURhdGFTdG9yZS0+d2Vic2l0ZURh
dGFTdG9yZSgpLnJlc291cmNlTG9hZFN0YXRpc3RpY3MoKTsKQEAgLTQ0MSw2ICs0NjgsOCBAQCAt
ICh2b2lkKV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUmVzZXRUb0NvCiAgICAgICAgIHJldHVybjsK
IAogICAgIC8vIEZJWE1FOiBUaGVzZSBuZWVkcyB0byBtYXRjaCB0aGUgZGVmYXVsdCBkYXRhIG1l
bWJlciB2YWx1ZXMgaW4gUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgd2hpY2ggaXMgZnJhZ2lsZS4K
KyAgICBzdG9yZS0+c2V0TWF4U3RhdGlzdGljc0VudHJpZXMoMTAwMCk7CisgICAgc3RvcmUtPnNl
dFBydW5lRW50cmllc0Rvd25Ubyg4MDApOwogICAgIHN0b3JlLT5zZXRUaW1lVG9MaXZlVXNlcklu
dGVyYWN0aW9uKHN0ZDo6bnVsbG9wdCk7CiAgICAgc3RvcmUtPnNldFRpbWVUb0xpdmVDb29raWVQ
YXJ0aXRpb25GcmVlKDI0X2gpOwogICAgIHN0b3JlLT5zZXRNaW5pbXVtVGltZUJldHdlZW5EYXRh
UmVjb3Jkc1JlbW92YWwoMV9oKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oCShy
ZXZpc2lvbiAyMTkzMDgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
V2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsNyBA
QCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dLV2Vic2l0CiBAcHJvcGVydHkgKG5v
bmF0b21pYywgc2V0dGVyPV9zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZDopIEJPT0wg
X3Jlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KDEw
LjEyKSwgaW9zKDEwLjApKTsKIAogLy8gUmVzb3VyY2VMb2FkU3RhdGlzdGljcyBTUEkgZm9yIHRl
c3RpbmcuCistICh2b2lkKV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0TGFzdFNlZW46KGRvdWJs
ZSlzZWNvbmRzIGZvckhvc3Q6KE5TU3RyaW5nICopaG9zdCBXS19BUElfQVZBSUxBQkxFKG1hY29z
eChXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKIC0gKHZvaWQpX3Jlc291cmNlTG9hZFN0
YXRpc3RpY3NTZXRJc1ByZXZhbGVudFJlc291cmNlOihCT09MKXZhbHVlIGZvckhvc3Q6KE5TU3Ry
aW5nICopaG9zdCBXS19BUElfQVZBSUxBQkxFKG1hY29zeChXS19NQUNfVEJBKSwgaW9zKFdLX0lP
U19UQkEpKTsKIC0gKHZvaWQpX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NJc1ByZXZhbGVudFJlc291
cmNlOihOU1N0cmluZyAqKWhvc3QgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKEJPT0wpKWNv
bXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3Mo
V0tfSU9TX1RCQSkpOwogLSAodm9pZClfcmVzb3VyY2VMb2FkU3RhdGlzdGljc1NldEhhZFVzZXJJ
bnRlcmFjdGlvbjooQk9PTCl2YWx1ZSBmb3JIb3N0OihOU1N0cmluZyAqKWhvc3QgV0tfQVBJX0FW
QUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CkBAIC01Nyw2ICs1
OCw4IEBAIHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBfV0tXZWJzaXQKIC0gKHZvaWQp
X3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTZXRUaW1lVG9MaXZlQ29va2llUGFydGl0aW9uRnJlZToo
ZG91YmxlKXNlY29uZHMgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhX
S19JT1NfVEJBKSk7CiAtICh2b2lkKV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0TWluaW11bVRp
bWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsOihkb3VibGUpc2Vjb25kcyBXS19BUElfQVZBSUxB
QkxFKG1hY29zeChXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKIC0gKHZvaWQpX3Jlc291
cmNlTG9hZFN0YXRpc3RpY3NTZXRHcmFuZGZhdGhlcmluZ1RpbWU6KGRvdWJsZSlzZWNvbmRzIFdL
X0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworLSAo
dm9pZClfcmVzb3VyY2VMb2FkU3RhdGlzdGljc1NldE1heFN0YXRpc3RpY3NFbnRyaWVzOihzaXpl
X3QpZW50cmllcyBXS19BUElfQVZBSUxBQkxFKG1hY29zeChXS19NQUNfVEJBKSwgaW9zKFdLX0lP
U19UQkEpKTsKKy0gKHZvaWQpX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTZXRQcnVuZUVudHJpZXNE
b3duVG86KHNpemVfdCllbnRyaWVzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEp
LCBpb3MoV0tfSU9TX1RCQSkpOwogLSAodm9pZClfcmVzb3VyY2VMb2FkU3RhdGlzdGljc1Byb2Nl
c3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFD
X1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAtICh2b2lkKV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
VXBkYXRlQ29va2llUGFydGl0aW9uaW5nIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19U
QkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogLSAodm9pZClfcmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nl
dFNob3VsZFBhcnRpdGlvbkNvb2tpZXM6KEJPT0wpdmFsdWUgZm9ySG9zdDooTlNTdHJpbmcgKilo
b3N0IFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkp
OwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1N0b3JhZ2UvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
U3RvcmFnZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCShyZXZpc2lvbiAyMTkzMDgp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU3RvcmFnZS9SZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIG5hbWVzcGFjZSBX
ZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIGNvbnN0IHVuc2lnbmVkIG9wZXJh
dGluZ0RhdGVzV2luZG93IHsgMzAgfTsKLWNvbnN0IHVuc2lnbmVkIHN0YXRpc3RpY3NNb2RlbFZl
cnNpb24geyA2IH07Citjb25zdCB1bnNpZ25lZCBzdGF0aXN0aWNzTW9kZWxWZXJzaW9uIHsgNyB9
OwogCiBSZWY8UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OmNyZWF0ZShVcGRhdGVDb29raWVQYXJ0aXRpb25pbmdGb3JEb21haW5zSGFuZGxl
ciYmIHVwZGF0ZUNvb2tpZVBhcnRpdGlvbmluZ0ZvckRvbWFpbnNIYW5kbGVyKQogewpAQCAtMjQ3
LDYgKzI0NywxNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0R3JhCiAg
ICAgbV9ncmFuZGZhdGhlcmluZ1RpbWUgPSBzZWNvbmRzOwogfQogCit2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6c2V0TWF4U3RhdGlzdGljc0VudHJpZXMoc2l6ZV90IG1heGltdW1F
bnRyeUNvdW50KQoreworICAgIG1fbWF4U3RhdGlzdGljc0VudHJpZXMgPSBtYXhpbXVtRW50cnlD
b3VudDsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFBydW5lRW50
cmllc0Rvd25UbyhzaXplX3QgcHJ1bmVUYXJnZXRDb3VudCkKK3sKKyAgICBBU1NFUlQocHJ1bmVU
YXJnZXRDb3VudCA8PSBtX21heFN0YXRpc3RpY3NFbnRyaWVzKTsKKyAgICBtX3BydW5lRW50cmll
c0Rvd25UbyA9IHBydW5lVGFyZ2V0Q291bnQ7Cit9CisKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpwcm9jZXNzU3RhdGlzdGljcyhjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoUmVz
b3VyY2VMb2FkU3RhdGlzdGljcyYpPiYgcHJvY2Vzc0Z1bmN0aW9uKQogewogICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOwpAQCAtMzQ4LDQgKzM1OSw2MCBAQCBib29sIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6aGFzU3RhCiAgICAgcmV0dXJuIGZhbHNlOwogfQogICAgIAorc3Ry
dWN0IFN0YXRpc3RpY3NMYXN0U2VlbiB7CisgICAgU3RyaW5nIHRvcFByaXZhdGVseU93bmVkRG9t
YWluOworICAgIFdhbGxUaW1lIGxhc3RTZWVuOworfTsKKyAgICAKK3N0YXRpYyBzaXplX3QgcHJ1
bmVSZXNvdXJjZXMoSGFzaE1hcDxTdHJpbmcsIFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3M+JiBzdGF0aXN0aWNzTWFwLCBWZWN0b3I8U3RhdGlzdGljc0xhc3RTZWVuPiYgc3RhdGlzdGlj
c1RvUHJ1bmUsIHNpemVfdCBudW1iZXJPZkVudHJpZXNUb1BydW5lKQoreworICAgIGlmIChzdGF0
aXN0aWNzVG9QcnVuZS5zaXplKCkgPiBudW1iZXJPZkVudHJpZXNUb1BydW5lKSB7CisgICAgICAg
IHN0ZDo6c29ydChzdGF0aXN0aWNzVG9QcnVuZS5iZWdpbigpLCBzdGF0aXN0aWNzVG9QcnVuZS5l
bmQoKSwgW10oY29uc3QgU3RhdGlzdGljc0xhc3RTZWVuJiBhLCBjb25zdCBTdGF0aXN0aWNzTGFz
dFNlZW4mIGIpIHsKKyAgICAgICAgICAgIHJldHVybiBhLmxhc3RTZWVuIDwgYi5sYXN0U2VlbjsK
KyAgICAgICAgfSk7CisgICAgfQorICAgIAorICAgIGZvciAoYXV0byYgc3RhdGlzdGljIDogc3Rh
dGlzdGljc1RvUHJ1bmUpIHsKKyAgICAgICAgc3RhdGlzdGljc01hcC5yZW1vdmUoc3RhdGlzdGlj
LnRvcFByaXZhdGVseU93bmVkRG9tYWluKTsKKyAgICAgICAgQVNTRVJUKG51bWJlck9mRW50cmll
c1RvUHJ1bmUpOworICAgICAgICBpZiAoIS0tbnVtYmVyT2ZFbnRyaWVzVG9QcnVuZSkKKyAgICAg
ICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gbnVtYmVyT2ZFbnRyaWVz
VG9QcnVuZTsKK30KKworY29uc3RleHByIHNpemVfdCBtYXhJbXBvcnRhbmNlIHsgMyB9OworCitz
dGF0aWMgc2l6ZV90IGNvbXB1dGVJbXBvcnRhbmNlKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3MmIHJlc291cmNlU3RhdGlzdGljKQoreworICAgIGlmICghcmVzb3VyY2VTdGF0aXN0aWMuaXNQ
cmV2YWxlbnRSZXNvdXJjZSkKKyAgICAgICAgcmV0dXJuICFyZXNvdXJjZVN0YXRpc3RpYy5oYWRV
c2VySW50ZXJhY3Rpb24gPyAwIDogMjsKKworICAgIHJldHVybiAhcmVzb3VyY2VTdGF0aXN0aWMu
aGFkVXNlckludGVyYWN0aW9uID8gMSA6IDM7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCgpCit7CisgICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7CisgICAgaWYgKG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnNpemUoKSA8
IG1fbWF4U3RhdGlzdGljc0VudHJpZXMpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBzaXpl
X3QgbnVtYmVyT2ZFbnRyaWVzTGVmdFRvUHJ1bmUgPSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5z
aXplKCkgLSBtX3BydW5lRW50cmllc0Rvd25UbzsKKyAgICBBU1NFUlQobnVtYmVyT2ZFbnRyaWVz
TGVmdFRvUHJ1bmUpOworCisgICAgVmVjdG9yPFN0YXRpc3RpY3NMYXN0U2Vlbj4gcmVzb3VyY2Vz
VG9QcnVuZVBlckltcG9ydGFuY2VbbWF4SW1wb3J0YW5jZSArIDFdOworICAgIGZvciAoYXV0byYg
cmVzb3VyY2VTdGF0aXN0aWMgOiBtX3Jlc291cmNlU3RhdGlzdGljc01hcC52YWx1ZXMoKSkKKyAg
ICAgICAgcmVzb3VyY2VzVG9QcnVuZVBlckltcG9ydGFuY2VbY29tcHV0ZUltcG9ydGFuY2UocmVz
b3VyY2VTdGF0aXN0aWMpXS5hcHBlbmQoeyByZXNvdXJjZVN0YXRpc3RpYy5oaWdoTGV2ZWxEb21h
aW4sIHJlc291cmNlU3RhdGlzdGljLmxhc3RTZWVuIH0pOworCisgICAgc2l6ZV90IGltcG9ydGFu
Y2UgPSAwOworICAgIHdoaWxlIChudW1iZXJPZkVudHJpZXNMZWZ0VG9QcnVuZSkgeworICAgICAg
ICBBU1NFUlQoaW1wb3J0YW5jZSA8PSBtYXhJbXBvcnRhbmNlKTsKKyAgICAgICAgbnVtYmVyT2ZF
bnRyaWVzTGVmdFRvUHJ1bmUgPSBwcnVuZVJlc291cmNlcyhtX3Jlc291cmNlU3RhdGlzdGljc01h
cCwgcmVzb3VyY2VzVG9QcnVuZVBlckltcG9ydGFuY2VbaW1wb3J0YW5jZV0sIG51bWJlck9mRW50
cmllc0xlZnRUb1BydW5lKTsKKyAgICAgICAgKytpbXBvcnRhbmNlOworICAgIH0KKworICAgIEFT
U0VSVCghbnVtYmVyT2ZFbnRyaWVzTGVmdFRvUHJ1bmUpOworfQorCiB9CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvU3RvcmFnZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU3RvcmFnZS9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUuaAkocmV2aXNpb24gMjE5MzA4KQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1N0b3JhZ2UvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTY2LDYgKzY2LDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0VGltZVRvTGl2ZVVz
ZXJJbnRlcmFjdGlvbihzdGQ6Om9wdGlvbmFsPFNlY29uZHM+KTsKICAgICB2b2lkIHNldFRpbWVU
b0xpdmVDb29raWVQYXJ0aXRpb25GcmVlKFNlY29uZHMpOwogICAgIHZvaWQgc2V0R3JhbmRmYXRo
ZXJpbmdUaW1lKFNlY29uZHMpOworICAgIHZvaWQgc2V0TWF4U3RhdGlzdGljc0VudHJpZXMoc2l6
ZV90KTsKKyAgICB2b2lkIHNldFBydW5lRW50cmllc0Rvd25UbyhzaXplX3QpOwogCiAgICAgdm9p
ZCB1cGRhdGVDb29raWVQYXJ0aXRpb25pbmcoKTsKICAgICB2b2lkIHVwZGF0ZUNvb2tpZVBhcnRp
dGlvbmluZ0ZvckRvbWFpbnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnNUb1JlbW92ZSwg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnNUb0FkZCwgU2hvdWxkQ2xlYXJGaXJzdCk7CkBA
IC03OSw2ICs4MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGhhbmRsZUZyZXNoU3RhcnRXaXRoRW1w
dHlPck5vU3RvcmUoSGFzaFNldDxTdHJpbmc+JiYgdG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFp
bnNUb0dyYW5kZmF0aGVyKTsKICAgICB2b2lkIGluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlm
TmVjZXNzYXJ5KCk7CiAKKyAgICB2b2lkIHBydW5lU3RhdGlzdGljc0lmTmVlZGVkKCk7CiBwcml2
YXRlOgogICAgIGV4cGxpY2l0IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZShVcGRhdGVDb29r
aWVQYXJ0aXRpb25pbmdGb3JEb21haW5zSGFuZGxlciYmKTsKIApAQCAtOTQsNiArOTcsOCBAQCBw
cml2YXRlOgogICAgIHN0ZDo6b3B0aW9uYWw8U2Vjb25kcz4gbV90aW1lVG9MaXZlVXNlckludGVy
YWN0aW9uOwogICAgIFNlY29uZHMgbV90aW1lVG9MaXZlQ29va2llUGFydGl0aW9uRnJlZSB7IDI0
X2ggfTsKICAgICBTZWNvbmRzIG1fZ3JhbmRmYXRoZXJpbmdUaW1lIHsgMV9oIH07CisgICAgc2l6
ZV90IG1fbWF4U3RhdGlzdGljc0VudHJpZXMgeyAxMDAwIH07CisgICAgc2l6ZV90IG1fcHJ1bmVF
bnRyaWVzRG93blRvIHsgODAwIH07CiAKICAgICBXYWxsVGltZSBtX2VuZE9mR3JhbmRmYXRoZXJp
bmdUaW1lc3RhbXA7CiB9OwpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjE5MzA4KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTctMDctMTAgIEpvaG4gV2lsYW5kZXIgIDx3
aWxhbmRlckBhcHBsZS5jb20+CisKKyAgICAgICAgUmVzb3VyY2UgTG9hZCBTdGF0aXN0aWNzOiBQ
cnVuZSBzdGF0aXN0aWNzIGluIG9yZGVycyBvZiBpbXBvcnRhbmNlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQyMTUKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzMzMTY0NDAzPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE5lc3QgaW5mcmFzdHJ1Y3R1cmUuIEFkZHMgdGhlc2UgZnVuY3Rpb25zOgorICAg
ICAgICAxLiB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NMYXN0U2VlbigpCisgICAgICAgIDIuIHNl
dFN0YXRpc3RpY3NNYXhTdGF0aXN0aWNzRW50cmllcygpCisgICAgICAgIDMuIHNldFN0YXRpc3Rp
Y3NQcnVuZUVudHJpZXNEb3duVG8oKQorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbDoKKyAgICAgICAgKiBXZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjpzZXRTdGF0aXN0aWNzTGFzdFNlZW4pOgorICAgICAgICAoV1RSOjpUZXN0UnVubmVy
OjpzZXRTdGF0aXN0aWNzTWF4U3RhdGlzdGljc0VudHJpZXMpOgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjpzZXRTdGF0aXN0aWNzUHJ1bmVFbnRyaWVzRG93blRvKToKKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaDoKKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdENvbnRy
b2xsZXI6OnNldFN0YXRpc3RpY3NMYXN0U2Vlbik6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9s
bGVyOjpzZXRNYXhTdGF0aXN0aWNzRW50cmllcyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9s
bGVyOjpzZXRQcnVuZUVudHJpZXNEb3duVG8pOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIv
VGVzdENvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0
aW9uLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVTeW5jaHJv
bm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5u
ZXIvY29jb2EvVGVzdENvbnRyb2xsZXJDb2NvYS5tbToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRy
b2xsZXI6OnNldFN0YXRpc3RpY3NMYXN0U2Vlbik6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9s
bGVyOjpzZXRTdGF0aXN0aWNzTWF4U3RhdGlzdGljc0VudHJpZXMpOgorICAgICAgICAoV1RSOjpU
ZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc1BydW5lRW50cmllc0Rvd25Ubyk6CisKIDIwMTct
MDctMDMgIEJyaWFuIEJ1cmcgIDxiYnVyZ0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIFJlcGxh
eTogcmVtb3ZlIHNvbWUgdW51c2VkIGNvZGUKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIv
VGVzdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIv
VGVzdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyMTkzMDgpCisrKyBUb29scy9XZWJLaXRUZXN0
UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI0OSw2ICsyMjQ5
LDEwIEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJlbW92ZUFsbFNlc3Npb25DcmUKIAogI2lmICFQ
TEFURk9STShDT0NPQSkgfHwgIVdLX0FQSV9FTkFCTEVECiAKK3ZvaWQgVGVzdENvbnRyb2xsZXI6
OnNldFN0YXRpc3RpY3NMYXN0U2VlbihXS1N0cmluZ1JlZiwgZG91YmxlKQoreworfQorICAgIAog
dm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKFdLU3Ry
aW5nUmVmLCBib29sKQogewogfQpAQCAtMjMzMiw2ICsyMzM2LDE0IEBAIHZvaWQgVGVzdENvbnRy
b2xsZXI6OnNldFN0YXRpc3RpY3NHcmFuZGYKIHsKIH0KIAordm9pZCBUZXN0Q29udHJvbGxlcjo6
c2V0U3RhdGlzdGljc01heFN0YXRpc3RpY3NFbnRyaWVzKHVuc2lnbmVkKQoreworfQorICAgIAor
dm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc1BydW5lRW50cmllc0Rvd25Ubyh1bnNp
Z25lZCkKK3sKK30KKyAgICAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnN0YXRpc3RpY3NDbGVhcklu
TWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlKCkKIHsKIH0KSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvVGVzdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVu
bmVyL1Rlc3RDb250cm9sbGVyLmgJKHJldmlzaW9uIDIxOTMwOCkKKysrIFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDYgKzE1MCw3
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0U2hvdWxkRG93bmxvYWRVbmRpc3BsYXlhYmxlTUlN
RVR5cGVzKGJvb2wgdmFsdWUpIHsgbV9zaG91bGREb3dubG9hZFVuZGlzcGxheWFibGVNSU1FVHlw
ZXMgPSB2YWx1ZTsgfQogCisgICAgdm9pZCBzZXRTdGF0aXN0aWNzTGFzdFNlZW4oV0tTdHJpbmdS
ZWYgaG9zdE5hbWUsIGRvdWJsZSBzZWNvbmRzKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NQcmV2
YWxlbnRSZXNvdXJjZShXS1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7CiAgICAgYm9v
bCBpc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShXS1N0cmluZ1JlZiBob3N0TmFtZSk7CiAg
ICAgdm9pZCBzZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKFdLU3RyaW5nUmVmIGhv
c3ROYW1lLCBib29sIHZhbHVlKTsKQEAgLTE3MCw2ICsxNzEsOCBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQoYm9vbCB2
YWx1ZSk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29y
ZHNSZW1vdmFsKGRvdWJsZSk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzR3JhbmRmYXRoZXJpbmdU
aW1lKGRvdWJsZSBzZWNvbmRzKTsKKyAgICB2b2lkIHNldFN0YXRpc3RpY3NNYXhTdGF0aXN0aWNz
RW50cmllcyh1bnNpZ25lZCk7CisgICAgdm9pZCBzZXRTdGF0aXN0aWNzUHJ1bmVFbnRyaWVzRG93
blRvKHVuc2lnbmVkKTsKICAgICB2b2lkIHN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lz
dGVudFN0b3JlKCk7CiAgICAgdm9pZCBzdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3Rl
bnRTdG9yZU1vZGlmaWVkU2luY2VIb3Vycyh1bnNpZ25lZCk7CiAgICAgdm9pZCBzdGF0aXN0aWNz
UmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSgpOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0SW52b2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0SW52b2NhdGlvbi5jcHAJKHJldmlzaW9uIDIxOTMwOCkKKysrIFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvVGVzdEludm9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MTIsNiArOTEyLDIx
IEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246OmQKICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9CiAKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NMYXN0U2VlbiIpKSB7CisgICAgICAgIEFTU0VS
VChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwor
ICAgICAgICAKKyAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9
IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOworICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVLZXkoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpOworICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gdmFsdWVLZXkoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlZh
bHVlIikpOworICAgICAgICAKKyAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNf
Y2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURp
Y3Rpb25hcnksIGhvc3ROYW1lS2V5LmdldCgpKSk7CisgICAgICAgIFdLRG91YmxlUmVmIHZhbHVl
ID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVz
c2FnZUJvZHlEaWN0aW9uYXJ5LCB2YWx1ZUtleS5nZXQoKSkpOworICAgICAgICAKKyAgICAgICAg
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NMYXN0U2Vlbihob3N0TmFt
ZSwgV0tEb3VibGVHZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgfQorICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlIikpIHsKICAgICAg
ICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBl
SUQoKSk7CiAKQEAgLTExMDEsNiArMTExNiwyMCBAQCBXS1JldGFpblB0cjxXS1R5cGVSZWY+IFRl
c3RJbnZvY2F0aW9uOjpkCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKKyAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldE1heFN0
YXRpc3RpY3NFbnRyaWVzIikpIHsKKyAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VC
b2R5KSA9PSBXS1VJbnQ2NEdldFR5cGVJRCgpKTsKKyAgICAgICAgV0tVSW50NjRSZWYgZW50cmll
cyA9IHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihtZXNzYWdlQm9keSk7CisgICAgICAgIFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzTWF4U3RhdGlzdGljc0VudHJpZXMo
V0tVSW50NjRHZXRWYWx1ZShlbnRyaWVzKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KKyAgICAKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFt
ZSwgIlNldFBydW5lRW50cmllc0Rvd25UbyIpKSB7CisgICAgICAgIEFTU0VSVChXS0dldFR5cGVJ
RChtZXNzYWdlQm9keSkgPT0gV0tVSW50NjRHZXRUeXBlSUQoKSk7CisgICAgICAgIFdLVUludDY0
UmVmIGVudHJpZXMgPSBzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4obWVzc2FnZUJvZHkpOworICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1BydW5lRW50cmll
c0Rvd25UbyhXS1VJbnQ2NEdldFZhbHVlKGVudHJpZXMpKTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorICAgIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1l
c3NhZ2VOYW1lLCAiU3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUiKSkg
ewogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc3RhdGlzdGljc0NsZWFySW5N
ZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUoKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkluZGV4
OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1
bm5lci5jcHAJKHJldmlzaW9uIDIxOTMwOCkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNzUsNiArMTE3
NSwzMSBAQCB2b2lkIFRlc3RSdW5uZXI6OmNhbGxEaWRSZW1vdmVTd2lwZVNuYXBzCiAgICAgY2Fs
bFRlc3RSdW5uZXJDYWxsYmFjayhEaWRSZW1vdmVTd2lwZVNuYXBzaG90Q2FsbGJhY2tJRCk7CiB9
CiAKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0xhc3RTZWVuKEpTU3RyaW5nUmVmIGhv
c3ROYW1lLCBkb3VibGUgc2Vjb25kcykKK3sKKyAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+PiBrZXlzOworICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7
CisgICAgCisgICAga2V5cy5hcHBlbmQoeyBBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiSG9zdE5hbWUiKSB9KTsKKyAgICB2YWx1ZXMuYXBwZW5kKHsgQWRvcHRXSywgV0tT
dHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpIH0pOworICAgIAorICAgIGtleXMuYXBw
ZW5kKHsgQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlZhbHVlIikgfSk7
CisgICAgdmFsdWVzLmFwcGVuZCh7IEFkb3B0V0ssIFdLRG91YmxlQ3JlYXRlKHNlY29uZHMpIH0p
OworICAgIAorICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5cyhrZXlzLnNpemUoKSk7Cisg
ICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzKHZhbHVlcy5zaXplKCkpOworICAgIAorICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgeworICAgICAgICByYXdL
ZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKKyAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ld
LmdldCgpOworICAgIH0KKyAgICAKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3Rp
Y3NMYXN0U2VlbiIpKTsKKyAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VC
b2R5KEFkb3B0V0ssIFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVz
LmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKKyAgICAKKyAgICBXS0J1bmRsZVBvc3RTeW5jaHJv
bm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworfQorICAgIAogdm9pZCBU
ZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoSlNTdHJpbmdSZWYgaG9z
dE5hbWUsIGJvb2wgdmFsdWUpCiB7CiAgICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
Pj4ga2V5czsKQEAgLTE0OTEsNiArMTUxNiwyMCBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRp
c3RpY3NHcmFuZGZhdGhlCiAgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3Nh
Z2VCb2R5LmdldCgpLCBudWxscHRyKTsKIH0KIAordm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0
aWNzTWF4U3RhdGlzdGljc0VudHJpZXModW5zaWduZWQgZW50cmllcykKK3sKKyAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlNldE1heFN0YXRpc3RpY3NFbnRyaWVzIikpOworICAgIFdLUmV0YWluUHRy
PFdLVHlwZVJlZj4gbWVzc2FnZUJvZHkoQWRvcHRXSywgV0tVSW50NjRDcmVhdGUoZW50cmllcykp
OworICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwg
bnVsbHB0cik7Cit9CisgICAgCit2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NQcnVuZUVu
dHJpZXNEb3duVG8odW5zaWduZWQgZW50cmllcykKK3sKKyAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlNldFBydW5lRW50cmllc0Rvd25UbyIpKTsKKyAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IG1l
c3NhZ2VCb2R5KEFkb3B0V0ssIFdLVUludDY0Q3JlYXRlKGVudHJpZXMpKTsKKyAgICBXS0J1bmRs
ZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRs
ZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworfQor
ICAgIAogdm9pZCBUZXN0UnVubmVyOjpzdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3Rl
bnRTdG9yZSgpCiB7CiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFk
b3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzQ2xlYXJJbk1l
bW9yeUFuZFBlcnNpc3RlbnRTdG9yZSIpKTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oCShyZXZpc2lvbiAyMTkzMDgpCisr
KyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMzU3LDYgKzM1Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHN0YXRpc3Rp
Y3NVcGRhdGVDb29raWVQYXJ0aXRpb25pbmcoKTsKICAgICB2b2lkIHN0YXRpc3RpY3NTZXRTaG91
bGRQYXJ0aXRpb25Db29raWVzRm9ySG9zdChKU1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1
ZSk7CiAgICAgdm9pZCBzdGF0aXN0aWNzU3VibWl0VGVsZW1ldHJ5KCk7CisgICAgdm9pZCBzZXRT
dGF0aXN0aWNzTGFzdFNlZW4oSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGRvdWJsZSBzZWNvbmRzKTsK
ICAgICB2b2lkIHNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShKU1N0cmluZ1JlZiBob3N0
TmFtZSwgYm9vbCB2YWx1ZSk7CiAgICAgYm9vbCBpc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJj
ZShKU1N0cmluZ1JlZiBob3N0TmFtZSk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzSGFzSGFkVXNl
ckludGVyYWN0aW9uKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIHZhbHVlKTsKQEAgLTM3Myw2
ICszNzQsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVu
VGVsZW1ldHJ5V2FzQ2FwdHVyZWQoYm9vbCB2YWx1ZSk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNz
TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKGRvdWJsZSk7CiAgICAgdm9pZCBz
ZXRTdGF0aXN0aWNzR3JhbmRmYXRoZXJpbmdUaW1lKGRvdWJsZSBzZWNvbmRzKTsKKyAgICB2b2lk
IHNldFN0YXRpc3RpY3NNYXhTdGF0aXN0aWNzRW50cmllcyh1bnNpZ25lZCk7CisgICAgdm9pZCBz
ZXRTdGF0aXN0aWNzUHJ1bmVFbnRyaWVzRG93blRvKHVuc2lnbmVkKTsKICAgICB2b2lkIHN0YXRp
c3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlKCk7CiAgICAgdm9pZCBzdGF0aXN0
aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZU1vZGlmaWVkU2luY2VIb3Vycyh1bnNp
Z25lZCBob3Vycyk7CiAgICAgdm9pZCBzdGF0aXN0aWNzUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSgp
OwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9U
ZXN0UnVubmVyLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsCShyZXZpc2lvbiAyMTkzMDgpCisrKyBU
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIu
aWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yNTQsNiArMjU0LDcgQEAgaW50ZXJmYWNlIFRlc3RSdW5u
ZXIgewogICAgIHZvaWQgaW5zdGFsbFN0YXRpc3RpY3NEaWRNb2RpZnlEYXRhUmVjb3Jkc0NhbGxi
YWNrKG9iamVjdCBjYWxsYmFjayk7CiAgICAgdm9pZCBpbnN0YWxsU3RhdGlzdGljc0RpZFNjYW5E
YXRhUmVjb3Jkc0NhbGxiYWNrKG9iamVjdCBjYWxsYmFjayk7CiAgICAgdm9pZCBpbnN0YWxsU3Rh
dGlzdGljc0RpZFJ1blRlbGVtZXRyeUNhbGxiYWNrKG9iamVjdCBjYWxsYmFjayk7CisgICAgdm9p
ZCBzZXRTdGF0aXN0aWNzTGFzdFNlZW4oRE9NU3RyaW5nIGhvc3ROYW1lLCBkb3VibGUgc2Vjb25k
cyk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoRE9NU3RyaW5nIGhv
c3ROYW1lLCBib29sZWFuIHZhbHVlKTsKICAgICBib29sZWFuIGlzU3RhdGlzdGljc1ByZXZhbGVu
dFJlc291cmNlKERPTVN0cmluZyBob3N0TmFtZSk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzSGFz
SGFkVXNlckludGVyYWN0aW9uKERPTVN0cmluZyBob3N0TmFtZSwgYm9vbGVhbiB2YWx1ZSk7CkBA
IC0yNzQsNiArMjc1LDggQEAgaW50ZXJmYWNlIFRlc3RSdW5uZXIgewogICAgIHZvaWQgc2V0U3Rh
dGlzdGljc05vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKGJvb2xlYW4gdmFsdWUp
OwogICAgIHZvaWQgc2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVt
b3ZhbChkb3VibGUgc2Vjb25kcyk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzR3JhbmRmYXRoZXJp
bmdUaW1lKGRvdWJsZSBzZWNvbmRzKTsKKyAgICB2b2lkIHNldFN0YXRpc3RpY3NNYXhTdGF0aXN0
aWNzRW50cmllcyh1bnNpZ25lZCBsb25nIGVudHJpZXMpOworICAgIHZvaWQgc2V0U3RhdGlzdGlj
c1BydW5lRW50cmllc0Rvd25Ubyh1bnNpZ25lZCBsb25nIGVudHJpZXMpOwogICAgIHZvaWQgc3Rh
dGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUoKTsKICAgICB2b2lkIHN0YXRp
c3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlTW9kaWZpZWRTaW5jZUhvdXJzKHVu
c2lnbmVkIGxvbmcgaG91cnMpOwogICAgIHZvaWQgc3RhdGlzdGljc1Jlc2V0VG9Db25zaXN0ZW50
U3RhdGUoKTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdENvbnRyb2xs
ZXJDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rl
c3RDb250cm9sbGVyQ29jb2EubW0JKHJldmlzaW9uIDIxOTMwOCkKKysrIFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvY29jb2EvVGVzdENvbnRyb2xsZXJDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAt
MjIyLDYgKzIyMiwxMSBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpyZW1vdmVBbGxTZXNzaW9uQ3Jl
CiB9CiAKICNpZiBXS19BUElfRU5BQkxFRAordm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlz
dGljc0xhc3RTZWVuKFdLU3RyaW5nUmVmIGhvc3ROYW1lLCBkb3VibGUgc2Vjb25kcykKK3sKKyAg
ICBbZ2xvYmFsV2ViVmlld0NvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSBfcmVzb3VyY2VM
b2FkU3RhdGlzdGljc1NldExhc3RTZWVuOnNlY29uZHMgZm9ySG9zdDp0b05TU3RyaW5nKGhvc3RO
YW1lKV07Cit9CisgICAgCiB2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzUHJldmFs
ZW50UmVzb3VyY2UoV0tTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpCiB7CiAgICAgW2ds
b2JhbFdlYlZpZXdDb25maWd1cmF0aW9uLndlYnNpdGVEYXRhU3RvcmUgX3Jlc291cmNlTG9hZFN0
YXRpc3RpY3NTZXRJc1ByZXZhbGVudFJlc291cmNlOnZhbHVlIGZvckhvc3Q6dG9OU1N0cmluZyho
b3N0TmFtZSldOwpAQCAtMzQ2LDYgKzM1MSwxNiBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRT
dGF0aXN0aWNzR3JhbmRmCiAgICAgW2dsb2JhbFdlYlZpZXdDb25maWd1cmF0aW9uLndlYnNpdGVE
YXRhU3RvcmUgX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTZXRHcmFuZGZhdGhlcmluZ1RpbWU6c2Vj
b25kc107CiB9CiAKK3ZvaWQgVGVzdENvbnRyb2xsZXI6OnNldFN0YXRpc3RpY3NNYXhTdGF0aXN0
aWNzRW50cmllcyh1bnNpZ25lZCBlbnRyaWVzKQoreworICAgIFtnbG9iYWxXZWJWaWV3Q29uZmln
dXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlIF9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0TWF4U3Rh
dGlzdGljc0VudHJpZXM6ZW50cmllc107Cit9CisgICAgCit2b2lkIFRlc3RDb250cm9sbGVyOjpz
ZXRTdGF0aXN0aWNzUHJ1bmVFbnRyaWVzRG93blRvKHVuc2lnbmVkIGVudHJpZXMpCit7CisgICAg
W2dsb2JhbFdlYlZpZXdDb25maWd1cmF0aW9uLndlYnNpdGVEYXRhU3RvcmUgX3Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NTZXRQcnVuZUVudHJpZXNEb3duVG86ZW50cmllc107Cit9CisgICAgCiB2b2lk
IFRlc3RDb250cm9sbGVyOjpzdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9y
ZSgpCiB7CiAgICAgW2dsb2JhbFdlYlZpZXdDb25maWd1cmF0aW9uLndlYnNpdGVEYXRhU3RvcmUg
X3Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlXTsK
SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDIxOTMwOCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE3LTA3LTEwICBKb2huIFdpbGFuZGVyICA8
d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIExvYWQgU3RhdGlzdGljczog
UHJ1bmUgc3RhdGlzdGljcyBpbiBvcmRlcnMgb2YgaW1wb3J0YW5jZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0MjE1CisgICAgICAgIDxyZGFyOi8v
cHJvYmxlbS8zMzE2NDQwMz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIGh0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3By
dW5lLXN0YXRpc3RpY3MtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3Rz
L2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wcnVuZS1zdGF0aXN0aWNzLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3drMi9UZXN0RXhwZWN0YXRpb25zOgorICAgICAgICAg
ICAgQWRkZWQgaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcHJ1bmUt
c3RhdGlzdGljcy5odG1sIGFzCisgICAgICAgICAgICBbIFBhc3MgXSBzaW5jZSBSZXNvdXJjZSBM
b2FkIFN0YXRpc3RpY3MgaXMgV0syLW9ubHkuCisKIDIwMTctMDctMTAgIEplcmVteSBKb25lcyAg
PGplcmVteWpAYXBwbGUuY29tPgogCiAgICAgICAgIG1lZGlhIGVsZW1lbnQgaGFuZGxlIGFkZGlu
ZyBzb3VyY2UgaW1tZWRpYXRlbHkgYmVmb3JlIHNyYy4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAv
dGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3BydW5lLXN0YXRpc3RpY3MtZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3BydW5lLXN0YXRpc3RpY3MtZXhwZWN0ZWQudHh0CShub25l
eGlzdGVudCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzL3BydW5lLXN0YXRpc3RpY3MtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMjMgQEAKK21haW4gZnJhbWUgLSBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZy
YW1lCittYWluIGZyYW1lIC0gZGlkQ29tbWl0TG9hZEZvckZyYW1lCittYWluIGZyYW1lIC0gZGlk
UmVjZWl2ZVRpdGxlOiBUZXN0IGZvciBSZXNvdXJjZSBMb2FkIFN0YXRpc3RpY3MgUHJ1bmluZwor
bWFpbiBmcmFtZSAtIGRpZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1lCittYWluIGZyYW1lIC0g
ZGlkSGFuZGxlT25sb2FkRXZlbnRzRm9yRnJhbWUKK21haW4gZnJhbWUgLSBkaWRGaW5pc2hMb2Fk
Rm9yRnJhbWUKK1Rlc3RzIHRoYXQgc3RhdGlzdGljcyBhcmUgcHJ1bmVkIGluIHRoZSByaWdodCBv
cmRlci4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNz
YWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgVGVzdCBpdGVyYXRp
b24gMSBwYXNzZWQuCitQQVNTIFRlc3QgaXRlcmF0aW9uIDIgcGFzc2VkLgorUEFTUyBUZXN0IGl0
ZXJhdGlvbiAzIHBhc3NlZC4KK1BBU1MgVGVzdCBpdGVyYXRpb24gNCBwYXNzZWQuCitQQVNTIFRl
c3QgaXRlcmF0aW9uIDUgcGFzc2VkLgorUEFTUyBUZXN0IGl0ZXJhdGlvbiA2IHBhc3NlZC4KK1BB
U1MgVGVzdCBpdGVyYXRpb24gNyBwYXNzZWQuCitQQVNTIFRlc3QgaXRlcmF0aW9uIDggcGFzc2Vk
LgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5k
ZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
L3BydW5lLXN0YXRpc3RpY3MuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wcnVuZS1zdGF0aXN0aWNzLmh0bWwJ
KG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNl
TG9hZFN0YXRpc3RpY3MvcHJ1bmUtc3RhdGlzdGljcy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTE5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPG1ldGEg
Y2hhcnNldD0iVVRGLTgiPgorICAgIDx0aXRsZT5UZXN0IGZvciBSZXNvdXJjZSBMb2FkIFN0YXRp
c3RpY3MgUHJ1bmluZzwvdGl0bGU+CisgICAgPHNjcmlwdCBzcmM9Ii9qcy10ZXN0LXJlc291cmNl
cy9qcy10ZXN0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KKyAgICBk
ZXNjcmlwdGlvbigiVGVzdHMgdGhhdCBzdGF0aXN0aWNzIGFyZSBwcnVuZWQgaW4gdGhlIHJpZ2h0
IG9yZGVyLiIpOworICAgIGpzVGVzdElzQXN5bmMgPSB0cnVlOworCisgICAgY29uc3Qgb2xkZXJU
aW1lc3RhbXAgPSBNYXRoLnJvdW5kKChuZXcgRGF0ZSgpKS5nZXRUaW1lKCkgLyAxMDAwKTsKKyAg
ICBjb25zdCBuZXdlclRpbWVzdGFtcCA9IG9sZGVyVGltZXN0YW1wICsgMTA7CisgICAgY29uc3Qg
bmV3ZXN0VGltZXN0YW1wID0gbmV3ZXJUaW1lc3RhbXAgKyAxMDsKKworICAgIGNvbnN0IHVybHNU
b0JlUHJ1bmVkID0gWworICAgICAgICB7IHVybDogImh0dHA6Ly8xMjcuMC4wLjE6ODAwMC90ZW1w
IiwgcHJldmFsZW50OiBmYWxzZSB9LAorICAgICAgICB7IHVybDogImh0dHA6Ly8xMjcuMC4wLjI6
ODAwMC90ZW1wIiwgcHJldmFsZW50OiBmYWxzZSB9LAorICAgICAgICB7IHVybDogImh0dHA6Ly8x
MjcuMC4wLjM6ODAwMC90ZW1wIiwgcHJldmFsZW50OiB0cnVlIH0sCisgICAgICAgIHsgdXJsOiAi
aHR0cDovLzEyNy4wLjAuNDo4MDAwL3RlbXAiLCBwcmV2YWxlbnQ6IHRydWUgfSwKKyAgICAgICAg
eyB1cmw6ICJodHRwOi8vMTI3LjAuMC41OjgwMDAvdGVtcCIsIHByZXZhbGVudDogZmFsc2UgfSwK
KyAgICAgICAgeyB1cmw6ICJodHRwOi8vMTI3LjAuMC42OjgwMDAvdGVtcCIsIHByZXZhbGVudDog
ZmFsc2UgfSwKKyAgICAgICAgeyB1cmw6ICJodHRwOi8vMTI3LjAuMC43OjgwMDAvdGVtcCIsIHBy
ZXZhbGVudDogdHJ1ZSB9LAorICAgICAgICB7IHVybDogImh0dHA6Ly8xMjcuMC4wLjg6ODAwMC90
ZW1wIiwgcHJldmFsZW50OiB0cnVlIH0KKyAgICBdOworCisgICAgZnVuY3Rpb24gY2hlY2tJZlBy
ZXZhbGVudEFjY29yZGluZ1RvSW5pdGlhbEV4cGVjdGF0aW9uKGJlZ2luLCBlbmQpIHsKKyAgICAg
ICAgdmFyIGZhaWxlZCA9IGZhbHNlOworICAgICAgICBmb3IgKHZhciBpID0gYmVnaW47IGkgPCBl
bmQ7ICsraSkgeworICAgICAgICAgICAgaWYgKHRlc3RSdW5uZXIuaXNTdGF0aXN0aWNzUHJldmFs
ZW50UmVzb3VyY2UodXJsc1RvQmVQcnVuZWRbaV0udXJsKSAhPT0gdXJsc1RvQmVQcnVuZWRbaV0u
cHJldmFsZW50KSB7CisgICAgICAgICAgICAgICAgdGVzdEZhaWxlZCgiY2hlY2tJZlByZXZhbGVu
dEFjY29yZGluZ1RvSW5pdGlhbEV4cGVjdGF0aW9uOiBUZXN0IGl0ZXJhdGlvbiAiICsgY3VycmVu
dFRlc3QgKyAiIGZhaWxlZC4gIiArIHVybHNUb0JlUHJ1bmVkW2ldLnVybCArICh1cmxzVG9CZVBy
dW5lZFtpXS5wcmV2YWxlbnQgPyAiIHdhc24ndCAiIDogIiB3YXMgIikgKyAicHJldmFsZW50Iik7
CisgICAgICAgICAgICAgICAgZmFpbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICBpZiAoZmFpbGVkKQorICAgICAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAg
fQorCisgICAgZnVuY3Rpb24gY2hlY2tJZlByZXZhbGVudChiZWdpbiwgZW5kLCBleHBlY3RlZCkg
eworICAgICAgICB2YXIgZmFpbGVkID0gZmFsc2U7CisgICAgICAgIGZvciAodmFyIGkgPSBiZWdp
bjsgaSA8IGVuZDsgKytpKSB7CisgICAgICAgICAgICBpZiAodGVzdFJ1bm5lci5pc1N0YXRpc3Rp
Y3NQcmV2YWxlbnRSZXNvdXJjZSh1cmxzVG9CZVBydW5lZFtpXS51cmwpICE9PSBleHBlY3RlZCkg
eworICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoImNoZWNrSWZQcmV2YWxlbnQ6IFRlc3QgaXRl
cmF0aW9uICIgKyBjdXJyZW50VGVzdCArICIgZmFpbGVkLiAiICsgdXJsc1RvQmVQcnVuZWRbaV0u
dXJsICsgKGV4cGVjdGVkID8gIiB3YXNuJ3QgIiA6ICIgd2FzICIpICsgInByZXZhbGVudCIpOwor
ICAgICAgICAgICAgICAgIGZhaWxlZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgaWYgKGZhaWxlZCkKKyAgICAgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0K
KworICAgIGZ1bmN0aW9uIGluaXRpYWxpemVTdGF0aXN0aWNzKCkgeworICAgICAgICB0ZXN0UnVu
bmVyLmluc3RhbGxTdGF0aXN0aWNzRGlkU2NhbkRhdGFSZWNvcmRzQ2FsbGJhY2soY2hlY2tTdGF0
aXN0aWNzQWZ0ZXJQcnVuaW5nKTsKKworICAgICAgICAvLyBOb24tcHJldmFsZW50IHdpdGhvdXQg
dXNlciBpbnRlcmFjdGlvbiB0byBiZSBwcnVuZWQgZmlyc3QuCisgICAgICAgIHRlc3RSdW5uZXIu
c2V0U3RhdGlzdGljc0xhc3RTZWVuKHVybHNUb0JlUHJ1bmVkWzBdLnVybCwgb2xkZXJUaW1lc3Rh
bXApOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NMYXN0U2Vlbih1cmxzVG9CZVBy
dW5lZFsxXS51cmwsIG5ld2VyVGltZXN0YW1wKTsKKworICAgICAgICAvLyBQcmV2YWxlbnQgd2l0
aG91dCB1c2VyIGludGVyYWN0aW9uIHRvIGJlIHBydW5lZCBzZWNvbmQuCisgICAgICAgIHRlc3RS
dW5uZXIuc2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKHVybHNUb0JlUHJ1bmVkWzJdLnVy
bCwgdHJ1ZSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc0xhc3RTZWVuKHVybHNU
b0JlUHJ1bmVkWzJdLnVybCwgb2xkZXJUaW1lc3RhbXApOworICAgICAgICB0ZXN0UnVubmVyLnNl
dFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZSh1cmxzVG9CZVBydW5lZFszXS51cmwsIHRydWUp
OworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NMYXN0U2Vlbih1cmxzVG9CZVBydW5l
ZFszXS51cmwsIG5ld2VyVGltZXN0YW1wKTsKKworICAgICAgICAvLyBOb24tcHJldmFsZW50IHdp
dGggdXNlciBpbnRlcmFjdGlvbiB0byBiZSBwcnVuZWQgdGhpcmQuCisgICAgICAgIHRlc3RSdW5u
ZXIuc2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbih1cmxzVG9CZVBydW5lZFs0XS51
cmwsIHRydWUpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NMYXN0U2Vlbih1cmxz
VG9CZVBydW5lZFs0XS51cmwsIG9sZGVyVGltZXN0YW1wKTsKKyAgICAgICAgdGVzdFJ1bm5lci5z
ZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKHVybHNUb0JlUHJ1bmVkWzVdLnVybCwg
dHJ1ZSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc0xhc3RTZWVuKHVybHNUb0Jl
UHJ1bmVkWzVdLnVybCwgbmV3ZXJUaW1lc3RhbXApOworCisgICAgICAgIC8vIFByZXZhbGVudCB3
aXRoIHVzZXIgaW50ZXJhY3Rpb24gdG8gYmUgcHJ1bmVkIGxhc3QuCisgICAgICAgIHRlc3RSdW5u
ZXIuc2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKHVybHNUb0JlUHJ1bmVkWzZdLnVybCwg
dHJ1ZSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFj
dGlvbih1cmxzVG9CZVBydW5lZFs2XS51cmwsIHRydWUpOworICAgICAgICB0ZXN0UnVubmVyLnNl
dFN0YXRpc3RpY3NMYXN0U2Vlbih1cmxzVG9CZVBydW5lZFs2XS51cmwsIG9sZGVyVGltZXN0YW1w
KTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UodXJs
c1RvQmVQcnVuZWRbN10udXJsLCB0cnVlKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0
aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKHVybHNUb0JlUHJ1bmVkWzddLnVybCwgdHJ1ZSk7Cisg
ICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc0xhc3RTZWVuKHVybHNUb0JlUHJ1bmVkWzdd
LnVybCwgbmV3ZXJUaW1lc3RhbXApOworCisgICAgICAgIGNoZWNrSWZQcmV2YWxlbnRBY2NvcmRp
bmdUb0luaXRpYWxFeHBlY3RhdGlvbigwLCB1cmxzVG9CZVBydW5lZC5sZW5ndGgpOworICAgIH0K
KworICAgIHZhciBjdXJyZW50VGVzdDsKKyAgICBmdW5jdGlvbiBjaGVja1N0YXRpc3RpY3NBZnRl
clBydW5pbmcoKSB7CisgICAgICAgIC8vIFBydW5lZCBlbnRyaWVzIHNob3VsZCBub3QgYmUgcHJl
dmFsZW50LgorICAgICAgICBjaGVja0lmUHJldmFsZW50KDAsIGN1cnJlbnRUZXN0LCBmYWxzZSk7
CisgICAgICAgIC8vIE5vbi1wcnVuZWQgZW50cmllcyBzaG91bGQga2VlcCB0aGVpciBleHBlY3Rl
ZCBzdGF0dXMuCisgICAgICAgIGNoZWNrSWZQcmV2YWxlbnRBY2NvcmRpbmdUb0luaXRpYWxFeHBl
Y3RhdGlvbihjdXJyZW50VGVzdCwgdXJsc1RvQmVQcnVuZWQubGVuZ3RoKTsKKyAgICAgICAgdGVz
dFBhc3NlZCgiVGVzdCBpdGVyYXRpb24gIiArIGN1cnJlbnRUZXN0ICsgIiBwYXNzZWQuIik7Cisg
ICAgICAgIGlmIChjdXJyZW50VGVzdCA8IHVybHNUb0JlUHJ1bmVkLmxlbmd0aCkgeworICAgICAg
ICAgICAgKytjdXJyZW50VGVzdDsKKyAgICAgICAgICAgIHJ1blRlc3QoKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgICAgICB9CisgICAgfQorCisg
ICAgZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICAgICAgaW5pdGlhbGl6ZVN0YXRpc3RpY3MoKTsK
KworICAgICAgICB2YXIgZmlsbGVyVXJsID0gImh0dHA6Ly8xMjcuMC4iICsgY3VycmVudFRlc3Qg
KyAiLjE6ODAwMC90ZW1wIjsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzUHJldmFs
ZW50UmVzb3VyY2UoZmlsbGVyVXJsLCB0cnVlKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0
aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKGZpbGxlclVybCwgdHJ1ZSk7CisgICAgICAgIHRl
c3RSdW5uZXIuc2V0U3RhdGlzdGljc0xhc3RTZWVuKGZpbGxlclVybCwgbmV3ZXN0VGltZXN0YW1w
KTsKKyAgICAgICAgdGVzdFJ1bm5lci5zdGF0aXN0aWNzUHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRh
UmVjb3JkcygpOworICAgIH0KKworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAg
ICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURh
dGFSZWNvcmRzUmVtb3ZhbChmYWxzZSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGlj
c01pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCgwKTsKKyAgICAgICAgdGVzdFJ1
bm5lci5zZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCh0
cnVlKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzTWF4U3RhdGlzdGljc0VudHJp
ZXModXJsc1RvQmVQcnVuZWQubGVuZ3RoKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0
aWNzUHJ1bmVFbnRyaWVzRG93blRvKHVybHNUb0JlUHJ1bmVkLmxlbmd0aCk7CisKKyAgICAgICAg
Y3VycmVudFRlc3QgPSAxOworICAgICAgICBydW5UZXN0KCk7CisgICAgfQorPC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0
VGVzdHMvcGxhdGZvcm0vd2syL1Rlc3RFeHBlY3RhdGlvbnMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvcGxhdGZvcm0vd2syL1Rlc3RFeHBlY3RhdGlvbnMJKHJldmlzaW9uIDIxOTMwOCkKKysr
IExheW91dFRlc3RzL3BsYXRmb3JtL3drMi9UZXN0RXhwZWN0YXRpb25zCSh3b3JraW5nIGNvcHkp
CkBAIC03MDYsNiArNzA2LDcgQEAgaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRp
c3RpYwogaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvY2xlYXItaW4t
bWVtb3J5LWFuZC1wZXJzaXN0ZW50LXN0b3JlLmh0bWwgWyBQYXNzIF0KIHdlYmtpdC5vcmcvYi8x
NzI0NTIgaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvZ3JhbmRmYXRo
ZXJpbmcuaHRtbCBbIFBhc3MgRmFpbHVyZSBUaW1lb3V0IF0KIHdlYmtpdC5vcmcvYi8xNzM0OTkg
aHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvdGVsZW1ldHJ5LWdlbmVy
YXRpb24uaHRtbCBbIFBhc3MgRmFpbHVyZSBdCitodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VM
b2FkU3RhdGlzdGljcy9wcnVuZS1zdGF0aXN0aWNzLmh0bWwgWyBQYXNzIF0KIAogIyMjIEVORCBP
RiAoNSkgUHJvZ3Jlc3Npb25zLCBleHBlY3RlZCBzdWNjZXNzZXMgdGhhdCBhcmUgZXhwZWN0ZWQg
ZmFpbHVyZXMgaW4gV2ViS2l0MS4KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>315042</attachid>
            <date>2017-07-10 16:31:48 -0700</date>
            <delta_ts>2017-07-10 16:48:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174215-20170710163147.patch</filename>
            <type>text/plain</type>
            <size>43002</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxOTMxMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDE3LTA3LTEwICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIExvYWQgU3Rh
dGlzdGljczogUHJ1bmUgc3RhdGlzdGljcyBpbiBvcmRlcnMgb2YgaW1wb3J0YW5jZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0MjE1CisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS8zMzE2NDQwMz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUZXN0OiBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2Fk
U3RhdGlzdGljcy9wcnVuZS1zdGF0aXN0aWNzLmh0bWwKKworICAgICAgICAqIGxvYWRlci9SZXNv
dXJjZUxvYWRPYnNlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZWR1Y2VUaW1lUmVzb2x1
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nRnJhbWVO
YXZpZ2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dT
dWJyZXNvdXJjZUxvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OmxvZ1dlYlNvY2tldExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OmxvZ1VzZXJJbnRlcmFjdGlvbldpdGhSZWR1Y2VkVGltZVJlc29sdXRpb24pOgor
ICAgICAgICAgICAgTm93IGFsbCBzZXQgdGhlIG5ldyBzdGF0aXN0aWNzIGZpZWxkIGxhc3RTZWVu
LgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M6OmVuY29kZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljczo6dG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljczo6bWVyZ2UpOgorICAgICAgICAgICAgSGFuZGxpbmcgb2YgdGhl
IG5ldyBzdGF0aXN0aWNzIGZpZWxkIGxhc3RTZWVuLgorICAgICAgICAqIGxvYWRlci9SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzLmg6CisKIDIwMTctMDctMTAgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9o
c2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgW1dLMl0gSWdub3JlIHRvdWNoIGV2ZW50cyB0aGF0
IGludGVycnVwdCBwbGF0Zm9ybS1kcml2ZW4gbW9tZW50dW0gc2Nyb2xsaW5nCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAJKHJldmlzaW9u
IDIxOTMxMikKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDYgKzkyLDExIEBAIGJvb2wgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNob3VsZExvZyhQYWcKICAgICByZXR1cm4gU2V0dGluZ3M6OnJlc291cmNlTG9hZFN0
YXRpc3RpY3NFbmFibGVkKCkgJiYgIXBhZ2UtPnVzZXNFcGhlbWVyYWxTZXNzaW9uKCkgJiYgbV9u
b3RpZmljYXRpb25DYWxsYmFjazsKIH0KIAorc3RhdGljIFdhbGxUaW1lIHJlZHVjZVRvSG91cmx5
VGltZVJlc29sdXRpb24oV2FsbFRpbWUgdGltZSkKK3sKKyAgICByZXR1cm4gV2FsbFRpbWU6OmZy
b21SYXdTZWNvbmRzKHN0ZDo6Zmxvb3IodGltZS5zZWNvbmRzU2luY2VFcG9jaCgpIC8gdGltZXN0
YW1wUmVzb2x1dGlvbikgKiB0aW1lc3RhbXBSZXNvbHV0aW9uLnNlY29uZHMoKSk7Cit9CisKIHZv
aWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBGcmFtZSYg
ZnJhbWUsIGNvbnN0IEZyYW1lJiB0b3BGcmFtZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBuZXdS
ZXF1ZXN0KQogewogICAgIEFTU0VSVChmcmFtZS5kb2N1bWVudCgpKTsKQEAgLTEyNSw2ICsxMzAs
NyBAQCB2b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dGcmFtZU5hdmlnCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGF1dG8mIHRhcmdldFN0YXRpc3RpY3MgPSBlbnN1cmVSZXNvdXJjZVN0YXRp
c3RpY3NGb3JQcmltYXJ5RG9tYWluKHRhcmdldFByaW1hcnlEb21haW4pOworICAgIHRhcmdldFN0
YXRpc3RpY3MubGFzdFNlZW4gPSByZWR1Y2VUb0hvdXJseVRpbWVSZXNvbHV0aW9uKFdhbGxUaW1l
Ojpub3coKSk7CiAgICAgYXV0byBzdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zUmVzdWx0ID0g
dGFyZ2V0U3RhdGlzdGljcy5zdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zLmFkZChtYWluRnJh
bWVQcmltYXJ5RG9tYWluKTsKICAgICBpZiAoc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc1Jl
c3VsdC5pc05ld0VudHJ5KQogICAgICAgICBzY2hlZHVsZU5vdGlmaWNhdGlvbklmTmVlZGVkKCk7
CkBAIC0xNTgsNiArMTY0LDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nU3VicmVz
b3VyYwogICAgIGJvb2wgc2hvdWxkQ2FsbE5vdGlmaWNhdGlvbkNhbGxiYWNrID0gZmFsc2U7CiAg
ICAgewogICAgICAgICBhdXRvJiB0YXJnZXRTdGF0aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VTdGF0
aXN0aWNzRm9yUHJpbWFyeURvbWFpbih0YXJnZXRQcmltYXJ5RG9tYWluKTsKKyAgICAgICAgdGFy
Z2V0U3RhdGlzdGljcy5sYXN0U2VlbiA9IHJlZHVjZVRvSG91cmx5VGltZVJlc29sdXRpb24oV2Fs
bFRpbWU6Om5vdygpKTsKICAgICAgICAgaWYgKHRhcmdldFN0YXRpc3RpY3Muc3VicmVzb3VyY2VV
bmRlclRvcEZyYW1lT3JpZ2lucy5hZGQobWFpbkZyYW1lUHJpbWFyeURvbWFpbikuaXNOZXdFbnRy
eSkKICAgICAgICAgICAgIHNob3VsZENhbGxOb3RpZmljYXRpb25DYWxsYmFjayA9IHRydWU7CiAg
ICAgfQpAQCAtMTk3LDE1ICsyMDQsMTEgQEAgdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9n
V2ViU29ja2V0TAogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvJiB0YXJnZXRTdGF0aXN0aWNz
ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbih0YXJnZXRQcmltYXJ5
RG9tYWluKTsKKyAgICB0YXJnZXRTdGF0aXN0aWNzLmxhc3RTZWVuID0gcmVkdWNlVG9Ib3VybHlU
aW1lUmVzb2x1dGlvbihXYWxsVGltZTo6bm93KCkpOwogICAgIGlmICh0YXJnZXRTdGF0aXN0aWNz
LnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMuYWRkKG1haW5GcmFtZVByaW1hcnlEb21h
aW4pLmlzTmV3RW50cnkpCiAgICAgICAgIHNjaGVkdWxlTm90aWZpY2F0aW9uSWZOZWVkZWQoKTsK
IH0KIAotc3RhdGljIFdhbGxUaW1lIHJlZHVjZVRpbWVSZXNvbHV0aW9uKFdhbGxUaW1lIHRpbWUp
Ci17Ci0gICAgcmV0dXJuIFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhzdGQ6OmZsb29yKHRpbWUu
c2Vjb25kc1NpbmNlRXBvY2goKSAvIHRpbWVzdGFtcFJlc29sdXRpb24pICogdGltZXN0YW1wUmVz
b2x1dGlvbi5zZWNvbmRzKCkpOwotfQotCiB2b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dV
c2VySW50ZXJhY3Rpb25XaXRoUmVkdWNlZFRpbWVSZXNvbHV0aW9uKGNvbnN0IERvY3VtZW50JiBk
b2N1bWVudCkKIHsKICAgICBBU1NFUlQoZG9jdW1lbnQucGFnZSgpKTsKQEAgLTIxOCwxMSArMjIx
LDEyIEBAIHZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1VzZXJJbnRlcmEKICAgICAgICAg
cmV0dXJuOwogCiAgICAgYXV0byYgc3RhdGlzdGljcyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGlj
c0ZvclByaW1hcnlEb21haW4ocHJpbWFyeURvbWFpbih1cmwpKTsKLSAgICBhdXRvIG5ld1RpbWUg
PSByZWR1Y2VUaW1lUmVzb2x1dGlvbihXYWxsVGltZTo6bm93KCkpOworICAgIGF1dG8gbmV3VGlt
ZSA9IHJlZHVjZVRvSG91cmx5VGltZVJlc29sdXRpb24oV2FsbFRpbWU6Om5vdygpKTsKICAgICBp
ZiAobmV3VGltZSA9PSBzdGF0aXN0aWNzLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lKQog
ICAgICAgICByZXR1cm47CiAKICAgICBzdGF0aXN0aWNzLmhhZFVzZXJJbnRlcmFjdGlvbiA9IHRy
dWU7CisgICAgc3RhdGlzdGljcy5sYXN0U2VlbiA9IG5ld1RpbWU7CiAgICAgc3RhdGlzdGljcy5t
b3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSA9IG5ld1RpbWU7CiAKICAgICBzY2hlZHVsZU5v
dGlmaWNhdGlvbklmTmVlZGVkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVy
L1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuY3BwCShyZXZpc2lvbiAyMTkzMTIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUwLDYgKzUwLDggQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjplbmNvZGUoS2V5
ZQogewogICAgIGVuY29kZXIuZW5jb2RlU3RyaW5nKCJQcmV2YWxlbnRSZXNvdXJjZU9yaWdpbiIs
IGhpZ2hMZXZlbERvbWFpbik7CiAgICAgCisgICAgZW5jb2Rlci5lbmNvZGVEb3VibGUoImxhc3RT
ZWVuIiwgbGFzdFNlZW4uc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKTsKKyAgICAKICAgICAv
LyBVc2VyIGludGVyYWN0aW9uCiAgICAgZW5jb2Rlci5lbmNvZGVCb29sKCJoYWRVc2VySW50ZXJh
Y3Rpb24iLCBoYWRVc2VySW50ZXJhY3Rpb24pOwogICAgIGVuY29kZXIuZW5jb2RlRG91YmxlKCJt
b3N0UmVjZW50VXNlckludGVyYWN0aW9uIiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUu
c2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKTsKQEAgLTExNCw2ICsxMTYsMTEgQEAgYm9vbCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpkZWNvZGUoS2V5ZQogICAgIGlmICghZGVjb2Rlci5kZWNv
ZGVCb29sKCJncmFuZGZhdGhlcmVkIiwgZ3JhbmRmYXRoZXJlZCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAorICAgIGRvdWJsZSBsYXN0U2VlblRpbWVBc0RvdWJsZTsKKyAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlRG91YmxlKCJsYXN0U2VlbiIsIGxhc3RTZWVuVGltZUFzRG91YmxlKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGxhc3RTZWVuID0gV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRz
KGxhc3RTZWVuVGltZUFzRG91YmxlKTsKKyAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAt
MTQ3LDYgKzE1NCwxMCBAQCBTdHJpbmcgUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6dG9TdHJpbmco
CiB7CiAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwogICAgIAorICAgIGJ1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgibGFzdFNlZW4iKTsKKyAgICBidWlsZGVyLmFwcGVuZE51bWJlcihsYXN0U2Vlbi5z
ZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpOworICAgIGJ1aWxkZXIuYXBwZW5kKCdcbicpOwor
ICAgIAogICAgIC8vIFVzZXIgaW50ZXJhY3Rpb24KICAgICBhcHBlbmRCb29sZWFuKGJ1aWxkZXIs
ICJoYWRVc2VySW50ZXJhY3Rpb24iLCBoYWRVc2VySW50ZXJhY3Rpb24pOwogICAgIGJ1aWxkZXIu
YXBwZW5kKCdcbicpOwpAQCAtMTg5LDYgKzIwMCw5IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljczo6bWVyZ2UoY29uc3QKIHsKICAgICBBU1NFUlQob3RoZXIuaGlnaExldmVsRG9tYWluID09
IGhpZ2hMZXZlbERvbWFpbik7CiAKKyAgICBpZiAobGFzdFNlZW4gPCBvdGhlci5sYXN0U2VlbikK
KyAgICAgICAgbGFzdFNlZW4gPSBvdGhlci5sYXN0U2VlbjsKKyAgICAKICAgICBpZiAoIW90aGVy
LmhhZFVzZXJJbnRlcmFjdGlvbikgewogICAgICAgICAvLyBJZiB1c2VyIGludGVyYWN0aW9uIGhh
cyBiZWVuIHJlc2V0IGRvIHNvIGhlcmUgdG9vLgogICAgICAgICAvLyBFbHNlLCBkbyBub3RoaW5n
LgpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cy5oCShyZXZpc2lvbiAyMTkzMTIpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VM
b2FkU3RhdGlzdGljcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSw5IEBAIHN0cnVjdCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzIHsKIAogICAgIFN0cmluZyBoaWdoTGV2ZWxEb21haW47CiAK
KyAgICAvLyBUaW1lc3RhbXAuIERlZmF1bHQgdmFsdWUgaXMgbmVnYXRpdmUsIDAgbWVhbnMgaXQg
d2FzIHJlc2V0LgorICAgIFdhbGxUaW1lIGxhc3RTZWVuIHsgV2FsbFRpbWU6OmZyb21SYXdTZWNv
bmRzKC0xKSB9OworICAgIAogICAgIC8vIFVzZXIgaW50ZXJhY3Rpb24KICAgICBib29sIGhhZFVz
ZXJJbnRlcmFjdGlvbiB7IGZhbHNlIH07CiAgICAgLy8gVGltZXN0YW1wLiBEZWZhdWx0IHZhbHVl
IGlzIG5lZ2F0aXZlLCAwIG1lYW5zIGl0IHdhcyByZXNldC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlz
aW9uIDIxOTMxMikKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDQ5IEBACisyMDE3LTA3LTEwICBKb2huIFdpbGFuZGVyICA8d2lsYW5kZXJAYXBw
bGUuY29tPgorCisgICAgICAgIFJlc291cmNlIExvYWQgU3RhdGlzdGljczogUHJ1bmUgc3RhdGlz
dGljcyBpbiBvcmRlcnMgb2YgaW1wb3J0YW5jZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0MjE1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMzE2
NDQwMz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBO
ZXcgZnVuY3Rpb25hbGl0eS4gUHJ1bmVzIHN0YXRpc3RpY3MgaW4gdGhpcyBvcmRlcjoKKyAgICAg
ICAgMS4gTm9uLXByZXZhbGVudCByZXNvdXJjZXMgd2l0aG91dCB1c2VyIGludGVyYWN0aW9uLgor
ICAgICAgICAyLiBQcmV2YWxlbnQgcmVzb3VyY2VzIHdpdGhvdXQgdXNlciBpbnRlcmFjdGlvbi4K
KyAgICAgICAgMy4gTm9uLXByZXZhbGVudCByZXNvdXJjZXMgd2l0aCB1c2VyIGludGVyYWN0aW9u
LgorICAgICAgICA0LiBQcmV2YWxlbnQgcmVzb3VyY2VzIHdpdGggdXNlciBpbnRlcmFjdGlvbi4K
KworICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwOgorICAgICAgICAo
SVBDOjpBcmd1bWVudENvZGVyPFJlc291cmNlTG9hZFN0YXRpc3RpY3M+OjplbmNvZGUpOgorICAg
ICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFJlc291cmNlTG9hZFN0YXRpc3RpY3M+OjpkZWNvZGUp
OgorICAgICAgICAgICAgQWRkZWQgdGltZXN0YW1wIGZpZWxkIGxhc3RTZWVuLgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tOgorICAgICAgICAoLVtX
S1dlYnNpdGVEYXRhU3RvcmUgX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTZXRMYXN0U2Vlbjpmb3JI
b3N0Ol0pOgorICAgICAgICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX3Jlc291cmNlTG9hZFN0YXRp
c3RpY3NTZXRNYXhTdGF0aXN0aWNzRW50cmllczpdKToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0
YVN0b3JlIF9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0UHJ1bmVFbnRyaWVzRG93blRvOl0pOgor
ICAgICAgICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NSZXNl
dFRvQ29uc2lzdGVudFN0YXRlXSk6CisgICAgICAgICAgICBUZXN0IGluZnJhc3RydWN0dXJlLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9TdG9yYWdlL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0
TWF4U3RhdGlzdGljc0VudHJpZXMpOgorICAgICAgICAgICAgVGVzdCBpbmZyYXN0cnVjdHVyZS4K
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRQcnVuZUVu
dHJpZXNEb3duVG8pOgorICAgICAgICAgICAgVGVzdCBpbmZyYXN0cnVjdHVyZS4KKyAgICAgICAg
KFdlYktpdDo6c29ydEFuZFBydW5lKToKKyAgICAgICAgICAgIENvbnZlbmllbmNlIGZ1bmN0aW9u
LgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnBydW5lU3Rh
dGlzdGljc0lmTmVlZGVkKToKKyAgICAgICAgICAgIFRoZSBuZXcgcHJ1bmluZyBmdW5jdGlvbi4K
KyAgICAgICAgKiBVSVByb2Nlc3MvU3RvcmFnZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUu
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcm9j
ZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzKToKKyAgICAgICAgICAgIE5vdyBjYWxscyBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnBydW5lU3RhdGlzdGljc0lmTmVlZGVkKCkuCisgICAg
ICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0TGFzdFNlZW4p
OgorICAgICAgICAgICAgVGVzdCBpbmZyYXN0cnVjdHVyZS4KKyAgICAgICAgKFdlYktpdDo6V2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRNYXhTdGF0aXN0aWNzRW50cmllcyk6Cisg
ICAgICAgICAgICBUZXN0IGluZnJhc3RydWN0dXJlLgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFBydW5lRW50cmllc0Rvd25Ubyk6CisgICAgICAg
ICAgICBUZXN0IGluZnJhc3RydWN0dXJlLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUuaDoKKwogMjAxNy0wNy0xMCAgQ2hyaXMgRHVtZXogIDxjZHVt
ZXpAYXBwbGUuY29tPgogCiAgICAgICAgIE1lcmdlIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZSBpbnRvIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZQpJbmRleDogU291cmNlL1dlYktp
dDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAJKHJldmlzaW9uIDIxOTMx
MikKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMjQyLDYgKzIyNDIsOCBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8UmVz
b3VyY2VMb2FkU3RhdGlzdGljCiB7CiAgICAgZW5jb2RlciA8PCBzdGF0aXN0aWNzLmhpZ2hMZXZl
bERvbWFpbjsKICAgICAKKyAgICBlbmNvZGVyIDw8IHN0YXRpc3RpY3MubGFzdFNlZW4uc2Vjb25k
c1NpbmNlRXBvY2goKS52YWx1ZSgpOworICAgIAogICAgIC8vIFVzZXIgaW50ZXJhY3Rpb24KICAg
ICBlbmNvZGVyIDw8IHN0YXRpc3RpY3MuaGFkVXNlckludGVyYWN0aW9uOwogICAgIGVuY29kZXIg
PDwgc3RhdGlzdGljcy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZS5zZWNvbmRzU2luY2VF
cG9jaCgpLnZhbHVlKCk7CkBAIC0yMjY0LDYgKzIyNjYsMTEgQEAgYm9vbCBBcmd1bWVudENvZGVy
PFJlc291cmNlTG9hZFN0YXRpc3RpYwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3RhdGlzdGlj
cy5oaWdoTGV2ZWxEb21haW4pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCisgICAgZG91
YmxlIGxhc3RTZWVuVGltZUFzRG91YmxlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUobGFzdFNl
ZW5UaW1lQXNEb3VibGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgc3RhdGlzdGljcy5s
YXN0U2VlbiA9IFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhsYXN0U2VlblRpbWVBc0RvdWJsZSk7
CisgICAgCiAgICAgLy8gVXNlciBpbnRlcmFjdGlvbgogICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
c3RhdGlzdGljcy5oYWRVc2VySW50ZXJhY3Rpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAkocmV2aXNpb24gMjE5MzEyKQorKysgU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNvbnN0ZXhw
ciBTZWNvbmRzIG1pbmltdW1TdGF0aXN0aWNzRmlsZVdyaXRlSW50ZXJ2YWwgeyA1X21pbiB9Owog
Y29uc3RleHByIHVuc2lnbmVkIG9wZXJhdGluZ0RhdGVzV2luZG93IHsgMzAgfTsKLWNvbnN0ZXhw
ciB1bnNpZ25lZCBzdGF0aXN0aWNzTW9kZWxWZXJzaW9uIHsgNiB9OworY29uc3RleHByIHVuc2ln
bmVkIHN0YXRpc3RpY3NNb2RlbFZlcnNpb24geyA3IH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0YXRpYyBpbmxpbmUgU3RyaW5nIHByaW1hcnlEb21haW4oY29uc3QgVCYgdmFsdWUpCiB7CkBA
IC0xNDYsNiArMTQ2LDggQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnBy
bwogICAgICAgICB9CiAgICAgICAgIHJlbW92ZURhdGFSZWNvcmRzKCk7CiAgICAgICAgIAorICAg
ICAgICBjb3JlU3RvcmUoKS5wcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCgpOworCiAgICAgICAgIGlm
IChtX3Nob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQpIHsKICAgICAg
ICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbXSB7CiAgICAgICAgICAgICAgICAgV2Vi
UHJvY2Vzc1Byb3h5Ojpub3RpZnlQYWdlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2Vk
KCk7CkBAIC01MDAsNiArNTAyLDE3IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpoYXMKICAgICB9KTsKIH0KIAordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnNldExhc3RTZWVuKFNlY29uZHMgc2Vjb25kcywgY29uc3QgVVJMJiB1cmwpCit7CisgICAg
aWYgKHVybC5pc0JsYW5rVVJMKCkgfHwgdXJsLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIG1fc3RhdGlzdGljc1F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhp
cyA9IG1ha2VSZWYoKnRoaXMpLCB1cmwgPSB1cmwuaXNvbGF0ZWRDb3B5KCksIHNlY29uZHNdIHsK
KyAgICAgICAgYXV0byYgc3RhdGlzdGljcyA9IGNvcmVTdG9yZSgpLmVuc3VyZVJlc291cmNlU3Rh
dGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJpbWFyeURvbWFpbih1cmwpKTsKKyAgICAgICAgc3Rh
dGlzdGljcy5sYXN0U2VlbiA9IFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhzZWNvbmRzLnNlY29u
ZHMoKSk7CisgICAgfSk7Cit9CisgICAgCiB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwpCiB7CiAgICAgaWYgKHVy
bC5pc0JsYW5rVVJMKCkgfHwgdXJsLmlzRW1wdHkoKSkKQEAgLTgzMyw3ICs4NDYsNyBAQCB2b2lk
IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6dXBkCiAgICAgZm9yIChhdXRvJiBkb21h
aW4gOiBkb21haW5zVG9BZGQpCiAgICAgICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclBy
aW1hcnlEb21haW4oZG9tYWluKS5pc01hcmtlZEZvckNvb2tpZVBhcnRpdGlvbmluZyA9IHRydWU7
CiB9Ci0KKyAgICAKIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcm9jZXNz
U3RhdGlzdGljcyhjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQgKGNvbnN0IFJlc291cmNlTG9hZFN0
YXRpc3RpY3MmKT4mIHByb2Nlc3NGdW5jdGlvbikgY29uc3QKIHsKICAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKQEAgLTkwNCw0ICs5MTcsNzEgQEAgYm9vbCBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OmhhcwogICAgIHJldHVybiBmYWxzZTsKIH0KICAgICAKK3ZvaWQgV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRNYXhTdGF0aXN0aWNzRW50cmllcyhzaXpl
X3QgbV9tYXhTdGF0aXN0aWNzRW50cmllcykKK3sKKyAgICBtX21heFN0YXRpc3RpY3NFbnRyaWVz
ID0gbWF4aW11bUVudHJ5Q291bnQ7Cit9CisgICAgCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKHNpemVfdCBwcnVuZVRhcmdldENvdW50
KQoreworICAgIEFTU0VSVChwcnVuZVRhcmdldENvdW50IDw9IG1fbWF4U3RhdGlzdGljc0VudHJp
ZXMpOworICAgIG1fcHJ1bmVFbnRyaWVzRG93blRvID0gcHJ1bmVUYXJnZXRDb3VudDsKK30KKyAg
ICAKK3N0cnVjdCBTdGF0aXN0aWNzTGFzdFNlZW4geworICAgIFN0cmluZyB0b3BQcml2YXRlbHlP
d25lZERvbWFpbjsKKyAgICBXYWxsVGltZSBsYXN0U2VlbjsKK307CisgICAgCitzdGF0aWMgc2l6
ZV90IHBydW5lUmVzb3VyY2VzKEhhc2hNYXA8U3RyaW5nLCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzPiYgc3RhdGlzdGljc01hcCwgVmVjdG9yPFN0YXRpc3RpY3NMYXN0U2Vlbj4mIHN0
YXRpc3RpY3NUb1BydW5lLCBzaXplX3QgbnVtYmVyT2ZFbnRyaWVzVG9QcnVuZSkKK3sKKyAgICBp
ZiAoc3RhdGlzdGljc1RvUHJ1bmUuc2l6ZSgpID4gbnVtYmVyT2ZFbnRyaWVzVG9QcnVuZSkgewor
ICAgICAgICBzdGQ6OnNvcnQoc3RhdGlzdGljc1RvUHJ1bmUuYmVnaW4oKSwgc3RhdGlzdGljc1Rv
UHJ1bmUuZW5kKCksIFtdKGNvbnN0IFN0YXRpc3RpY3NMYXN0U2VlbiYgYSwgY29uc3QgU3RhdGlz
dGljc0xhc3RTZWVuJiBiKSB7CisgICAgICAgICAgICByZXR1cm4gYS5sYXN0U2VlbiA8IGIubGFz
dFNlZW47CisgICAgICAgIH0pOworICAgIH0KKyAgICAKKyAgICBmb3IgKGF1dG8mIHN0YXRpc3Rp
YyA6IHN0YXRpc3RpY3NUb1BydW5lKSB7CisgICAgICAgIHN0YXRpc3RpY3NNYXAucmVtb3ZlKHN0
YXRpc3RpYy50b3BQcml2YXRlbHlPd25lZERvbWFpbik7CisgICAgICAgIEFTU0VSVChudW1iZXJP
ZkVudHJpZXNUb1BydW5lKTsKKyAgICAgICAgaWYgKCEtLW51bWJlck9mRW50cmllc1RvUHJ1bmUp
CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIG51bWJlck9m
RW50cmllc1RvUHJ1bmU7Cit9CisgICAgCitjb25zdGV4cHIgc2l6ZV90IG1heEltcG9ydGFuY2Ug
eyAzIH07CisgICAgCitzdGF0aWMgc2l6ZV90IGNvbXB1dGVJbXBvcnRhbmNlKGNvbnN0IFJlc291
cmNlTG9hZFN0YXRpc3RpY3MmIHJlc291cmNlU3RhdGlzdGljKQoreworICAgIGlmICghcmVzb3Vy
Y2VTdGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNvdXJjZSkKKyAgICAgICAgcmV0dXJuICFyZXNvdXJj
ZVN0YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rpb24gPyAwIDogMjsKKyAgICAKKyAgICByZXR1cm4g
IXJlc291cmNlU3RhdGlzdGljLmhhZFVzZXJJbnRlcmFjdGlvbiA/IDEgOiAzOworfQorICAgIAor
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnBydW5lU3RhdGlzdGljc0lmTmVlZGVk
KCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBpZiAobV9yZXNvdXJj
ZVN0YXRpc3RpY3NNYXAuc2l6ZSgpIDwgbV9tYXhTdGF0aXN0aWNzRW50cmllcykKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIHNpemVfdCBudW1iZXJPZkVudHJpZXNMZWZ0VG9QcnVuZSA9IG1f
cmVzb3VyY2VTdGF0aXN0aWNzTWFwLnNpemUoKSAtIG1fcHJ1bmVFbnRyaWVzRG93blRvOworICAg
IEFTU0VSVChudW1iZXJPZkVudHJpZXNMZWZ0VG9QcnVuZSk7CisgICAgCisgICAgVmVjdG9yPFN0
YXRpc3RpY3NMYXN0U2Vlbj4gcmVzb3VyY2VzVG9QcnVuZVBlckltcG9ydGFuY2VbbWF4SW1wb3J0
YW5jZSArIDFdOworICAgIGZvciAoYXV0byYgcmVzb3VyY2VTdGF0aXN0aWMgOiBtX3Jlc291cmNl
U3RhdGlzdGljc01hcC52YWx1ZXMoKSkKKyAgICAgICAgcmVzb3VyY2VzVG9QcnVuZVBlckltcG9y
dGFuY2VbY29tcHV0ZUltcG9ydGFuY2UocmVzb3VyY2VTdGF0aXN0aWMpXS5hcHBlbmQoeyByZXNv
dXJjZVN0YXRpc3RpYy5oaWdoTGV2ZWxEb21haW4sIHJlc291cmNlU3RhdGlzdGljLmxhc3RTZWVu
IH0pOworICAgIAorICAgIHNpemVfdCBpbXBvcnRhbmNlID0gMDsKKyAgICB3aGlsZSAobnVtYmVy
T2ZFbnRyaWVzTGVmdFRvUHJ1bmUpIHsKKyAgICAgICAgQVNTRVJUKGltcG9ydGFuY2UgPD0gbWF4
SW1wb3J0YW5jZSk7CisgICAgICAgIG51bWJlck9mRW50cmllc0xlZnRUb1BydW5lID0gcHJ1bmVS
ZXNvdXJjZXMobV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAsIHJlc291cmNlc1RvUHJ1bmVQZXJJbXBv
cnRhbmNlW2ltcG9ydGFuY2VdLCBudW1iZXJPZkVudHJpZXNMZWZ0VG9QcnVuZSk7CisgICAgICAg
ICsraW1wb3J0YW5jZTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKCFudW1iZXJPZkVudHJpZXNM
ZWZ0VG9QcnVuZSk7Cit9CisgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlLmgJKHJldmlzaW9uIDIxOTMxMikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtNzks
NiArNzksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBsb2dVc2VySW50ZXJhY3Rpb24oY29uc3QgV2Vi
Q29yZTo6VVJMJik7CiAgICAgdm9pZCBjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBXZWJDb3Jl
OjpVUkwmKTsKICAgICB2b2lkIGhhc0hhZFVzZXJJbnRlcmFjdGlvbihjb25zdCBXZWJDb3JlOjpV
UkwmLCBXVEY6OkZ1bmN0aW9uPHZvaWQgKGJvb2wpPiYmKTsKKyAgICB2b2lkIHNldExhc3RTZWVu
KFNlY29uZHMsIGNvbnN0IFdlYkNvcmU6OlVSTCYpOwogICAgIHZvaWQgc2V0UHJldmFsZW50UmVz
b3VyY2UoY29uc3QgV2ViQ29yZTo6VVJMJik7CiAgICAgdm9pZCBpc1ByZXZhbGVudFJlc291cmNl
KGNvbnN0IFdlYkNvcmU6OlVSTCYsIFdURjo6RnVuY3Rpb248dm9pZCAoYm9vbCk+JiYpOwogICAg
IHZvaWQgY2xlYXJQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBXZWJDb3JlOjpVUkwmKTsKQEAgLTEw
MCw5ICsxMDEsMTIgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VGltZVRvTGl2ZUNvb2tpZVBhcnRp
dGlvbkZyZWUoU2Vjb25kcyk7CiAgICAgdm9pZCBzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVj
b3Jkc1JlbW92YWwoU2Vjb25kcyk7CiAgICAgdm9pZCBzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vj
b25kcyk7Ci0KKyAgICB2b2lkIHNldE1heFN0YXRpc3RpY3NFbnRyaWVzKHNpemVfdCk7CisgICAg
dm9pZCBzZXRQcnVuZUVudHJpZXNEb3duVG8oc2l6ZV90KTsKKyAgICAKICAgICB2b2lkIHByb2Nl
c3NTdGF0aXN0aWNzKGNvbnN0IFdURjo6RnVuY3Rpb248dm9pZCAoY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljcyYpPiYpIGNvbnN0OwotCisgICAgdm9pZCBwcnVuZVN0YXRpc3Rp
Y3NJZk5lZWRlZCgpOworICAgIAogcHJpdmF0ZToKICAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUoY29uc3QgU3RyaW5nJiwgVXBkYXRlQ29va2llUGFydGl0aW9uaW5nRm9yRG9tYWlu
c0hhbmRsZXImJik7CiAKQEAgLTE3Miw2ICsxNzYsOCBAQCBwcml2YXRlOgogICAgIHN0ZDo6b3B0
aW9uYWw8U2Vjb25kcz4gbV90aW1lVG9MaXZlVXNlckludGVyYWN0aW9uOwogICAgIFNlY29uZHMg
bV90aW1lVG9MaXZlQ29va2llUGFydGl0aW9uRnJlZSB7IDI0X2ggfTsKICAgICBTZWNvbmRzIG1f
Z3JhbmRmYXRoZXJpbmdUaW1lIHsgMV9oIH07CisgICAgc2l6ZV90IG1fbWF4U3RhdGlzdGljc0Vu
dHJpZXMgeyAxMDAwIH07CisgICAgc2l6ZV90IG1fcHJ1bmVFbnRyaWVzRG93blRvIHsgODAwIH07
CiAgICAgYm9vbCBtX2RhdGFSZWNvcmRzQmVpbmdSZW1vdmVkIHsgZmFsc2UgfTsKICAgICBib29s
IG1fZGlkU2NoZWR1bGVXcml0ZSB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3Nob3VsZE5vdGlmeVBh
Z2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQgeyBmYWxzZSB9OwpJbmRleDogU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3Rv
cmUubW0JKHJldmlzaW9uIDIxOTMxMikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMDcsNiArMjA3
LDE1IEBAIC0gKHZvaWQpX3NldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGUKICAgICBfd2Vi
c2l0ZURhdGFTdG9yZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnNldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NFbmFibGVkKGVuYWJsZWQpOwogfQogCistICh2b2lkKV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U2V0TGFzdFNlZW46KGRvdWJsZSlzZWNvbmRzIGZvckhvc3Q6KE5TU3RyaW5nICopaG9zdAorewor
ICAgIGF1dG8qIHN0b3JlID0gX3dlYnNpdGVEYXRhU3RvcmUtPndlYnNpdGVEYXRhU3RvcmUoKS5y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCk7CisgICAgaWYgKCFzdG9yZSkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIHN0b3JlLT5zZXRMYXN0U2VlbihTZWNvbmRzIHsgc2Vjb25kcyB9LCBVUkwo
VVJMKCksIGhvc3QpKTsKK30KKwogLSAodm9pZClfcmVzb3VyY2VMb2FkU3RhdGlzdGljc1NldElz
UHJldmFsZW50UmVzb3VyY2U6KEJPT0wpdmFsdWUgZm9ySG9zdDooTlNTdHJpbmcgKilob3N0CiB7
CiAgICAgYXV0byogc3RvcmUgPSBfd2Vic2l0ZURhdGFTdG9yZS0+d2Vic2l0ZURhdGFTdG9yZSgp
LnJlc291cmNlTG9hZFN0YXRpc3RpY3MoKTsKQEAgLTM0NSw2ICszNTQsMjQgQEAgLSAodm9pZClf
cmVzb3VyY2VMb2FkU3RhdGlzdGljc1NldEdyYW5kZgogICAgIHN0b3JlLT5zZXRHcmFuZGZhdGhl
cmluZ1RpbWUoU2Vjb25kcyB7c2Vjb25kcyB9KTsKIH0KIAorLSAodm9pZClfcmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1NldE1heFN0YXRpc3RpY3NFbnRyaWVzOihzaXplX3QpZW50cmllcworeworICAg
IGF1dG8qIHN0b3JlID0gX3dlYnNpdGVEYXRhU3RvcmUtPndlYnNpdGVEYXRhU3RvcmUoKS5yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzKCk7CisgICAgaWYgKCFzdG9yZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgc3RvcmUtPnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKGVudHJpZXMpOworfQorCistICh2
b2lkKV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0UHJ1bmVFbnRyaWVzRG93blRvOihzaXplX3Qp
ZW50cmllcworeworICAgIGF1dG8qIHN0b3JlID0gX3dlYnNpdGVEYXRhU3RvcmUtPndlYnNpdGVE
YXRhU3RvcmUoKS5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCk7CisgICAgaWYgKCFzdG9yZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgc3RvcmUtPnNldFBydW5lRW50cmllc0Rvd25UbyhlbnRyaWVz
KTsKK30KKwogLSAodm9pZClfcmVzb3VyY2VMb2FkU3RhdGlzdGljc1Byb2Nlc3NTdGF0aXN0aWNz
QW5kRGF0YVJlY29yZHMKIHsKICAgICBhdXRvKiBzdG9yZSA9IF93ZWJzaXRlRGF0YVN0b3JlLT53
ZWJzaXRlRGF0YVN0b3JlKCkucmVzb3VyY2VMb2FkU3RhdGlzdGljcygpOwpAQCAtNDQxLDYgKzQ2
OCw4IEBAIC0gKHZvaWQpX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NSZXNldFRvQ28KICAgICAgICAg
cmV0dXJuOwogCiAgICAgLy8gRklYTUU6IFRoZXNlIG5lZWRzIHRvIG1hdGNoIHRoZSBkZWZhdWx0
IGRhdGEgbWVtYmVyIHZhbHVlcyBpbiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCB3aGljaCBpcyBm
cmFnaWxlLgorICAgIHN0b3JlLT5zZXRNYXhTdGF0aXN0aWNzRW50cmllcygxMDAwKTsKKyAgICBz
dG9yZS0+c2V0UHJ1bmVFbnRyaWVzRG93blRvKDgwMCk7CiAgICAgc3RvcmUtPnNldFRpbWVUb0xp
dmVVc2VySW50ZXJhY3Rpb24oc3RkOjpudWxsb3B0KTsKICAgICBzdG9yZS0+c2V0VGltZVRvTGl2
ZUNvb2tpZVBhcnRpdGlvbkZyZWUoMjRfaCk7CiAgICAgc3RvcmUtPnNldE1pbmltdW1UaW1lQmV0
d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCgxX2gpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2
YXRlLmgJKHJldmlzaW9uIDIxOTMxMikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2
ICs0NCw3IEBAIHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBfV0tXZWJzaXQKIEBwcm9w
ZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVk
OikgQk9PTCBfcmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQgV0tfQVBJX0FWQUlMQUJMRSht
YWNvc3goMTAuMTIpLCBpb3MoMTAuMCkpOwogCiAvLyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzIFNQ
SSBmb3IgdGVzdGluZy4KKy0gKHZvaWQpX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTZXRMYXN0U2Vl
bjooZG91YmxlKXNlY29uZHMgZm9ySG9zdDooTlNTdHJpbmcgKilob3N0IFdLX0FQSV9BVkFJTEFC
TEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogLSAodm9pZClfcmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1NldElzUHJldmFsZW50UmVzb3VyY2U6KEJPT0wpdmFsdWUgZm9ySG9z
dDooTlNTdHJpbmcgKilob3N0IFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBp
b3MoV0tfSU9TX1RCQSkpOwogLSAodm9pZClfcmVzb3VyY2VMb2FkU3RhdGlzdGljc0lzUHJldmFs
ZW50UmVzb3VyY2U6KE5TU3RyaW5nICopaG9zdCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXiko
Qk9PTCkpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RC
QSksIGlvcyhXS19JT1NfVEJBKSk7CiAtICh2b2lkKV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0
SGFkVXNlckludGVyYWN0aW9uOihCT09MKXZhbHVlIGZvckhvc3Q6KE5TU3RyaW5nICopaG9zdCBX
S19BUElfQVZBSUxBQkxFKG1hY29zeChXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKQEAg
LTU3LDYgKzU4LDggQEAgdHlwZWRlZiBOU19PUFRJT05TKE5TVUludGVnZXIsIF9XS1dlYnNpdAog
LSAodm9pZClfcmVzb3VyY2VMb2FkU3RhdGlzdGljc1NldFRpbWVUb0xpdmVDb29raWVQYXJ0aXRp
b25GcmVlOihkb3VibGUpc2Vjb25kcyBXS19BUElfQVZBSUxBQkxFKG1hY29zeChXS19NQUNfVEJB
KSwgaW9zKFdLX0lPU19UQkEpKTsKIC0gKHZvaWQpX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTZXRN
aW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWw6KGRvdWJsZSlzZWNvbmRzIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogLSAodm9p
ZClfcmVzb3VyY2VMb2FkU3RhdGlzdGljc1NldEdyYW5kZmF0aGVyaW5nVGltZTooZG91YmxlKXNl
Y29uZHMgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJB
KSk7CistICh2b2lkKV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0TWF4U3RhdGlzdGljc0VudHJp
ZXM6KHNpemVfdCllbnRyaWVzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBp
b3MoV0tfSU9TX1RCQSkpOworLSAodm9pZClfcmVzb3VyY2VMb2FkU3RhdGlzdGljc1NldFBydW5l
RW50cmllc0Rvd25Ubzooc2l6ZV90KWVudHJpZXMgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tf
TUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAtICh2b2lkKV9yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzUHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3JkcyBXS19BUElfQVZBSUxBQkxFKG1hY29z
eChXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKIC0gKHZvaWQpX3Jlc291cmNlTG9hZFN0
YXRpc3RpY3NVcGRhdGVDb29raWVQYXJ0aXRpb25pbmcgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3go
V0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAtICh2b2lkKV9yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU2V0U2hvdWxkUGFydGl0aW9uQ29va2llczooQk9PTCl2YWx1ZSBmb3JIb3N0OihOU1N0
cmluZyAqKWhvc3QgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19J
T1NfVEJBKSk7CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMTkzMTIpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwzNCBAQAorMjAxNy0wNy0xMCAgSm9obiBXaWxhbmRlciAgPHdpbGFuZGVy
QGFwcGxlLmNvbT4KKworICAgICAgICBSZXNvdXJjZSBMb2FkIFN0YXRpc3RpY3M6IFBydW5lIHN0
YXRpc3RpY3MgaW4gb3JkZXJzIG9mIGltcG9ydGFuY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDIxNQorICAgICAgICA8cmRhcjovL3Byb2JsZW0v
MzMxNjQ0MDM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTmVzdCBpbmZyYXN0cnVjdHVyZS4gQWRkcyB0aGVzZSBmdW5jdGlvbnM6CisgICAgICAgIDEu
IHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc0xhc3RTZWVuKCkKKyAgICAgICAgMi4gc2V0U3RhdGlz
dGljc01heFN0YXRpc3RpY3NFbnRyaWVzKCkKKyAgICAgICAgMy4gc2V0U3RhdGlzdGljc1BydW5l
RW50cmllc0Rvd25UbygpCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OnNldFN0YXRpc3RpY3NMYXN0U2Vlbik6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0
YXRpc3RpY3NNYXhTdGF0aXN0aWNzRW50cmllcyk6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OnNldFN0YXRpc3RpY3NQcnVuZUVudHJpZXNEb3duVG8pOgorICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oOgorICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6
c2V0U3RhdGlzdGljc0xhc3RTZWVuKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnNl
dE1heFN0YXRpc3RpY3NFbnRyaWVzKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnNl
dFBydW5lRW50cmllc0Rvd25Ubyk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29u
dHJvbGxlci5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3Bw
OgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVz
c2FnZUZyb21JbmplY3RlZEJ1bmRsZSk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9jb2Nv
YS9UZXN0Q29udHJvbGxlckNvY29hLm1tOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6
c2V0U3RhdGlzdGljc0xhc3RTZWVuKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnNl
dFN0YXRpc3RpY3NNYXhTdGF0aXN0aWNzRW50cmllcyk6CisgICAgICAgIChXVFI6OlRlc3RDb250
cm9sbGVyOjpzZXRTdGF0aXN0aWNzUHJ1bmVFbnRyaWVzRG93blRvKToKKwogMjAxNy0wNy0wMyAg
QnJpYW4gQnVyZyAgPGJidXJnQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgUmVwbGF5OiByZW1v
dmUgc29tZSB1bnVzZWQgY29kZQpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29u
dHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29u
dHJvbGxlci5jcHAJKHJldmlzaW9uIDIxOTMxMikKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIv
VGVzdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjQ5LDYgKzIyNDksMTAgQEAg
dm9pZCBUZXN0Q29udHJvbGxlcjo6cmVtb3ZlQWxsU2Vzc2lvbkNyZQogCiAjaWYgIVBMQVRGT1JN
KENPQ09BKSB8fCAhV0tfQVBJX0VOQUJMRUQKIAordm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0U3Rh
dGlzdGljc0xhc3RTZWVuKFdLU3RyaW5nUmVmLCBkb3VibGUpCit7Cit9CisgICAgCiB2b2lkIFRl
c3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoV0tTdHJpbmdSZWYs
IGJvb2wpCiB7CiB9CkBAIC0yMzMyLDYgKzIzMzYsMTQgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6
c2V0U3RhdGlzdGljc0dyYW5kZgogewogfQogCit2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRTdGF0
aXN0aWNzTWF4U3RhdGlzdGljc0VudHJpZXModW5zaWduZWQpCit7Cit9CisgICAgCit2b2lkIFRl
c3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzUHJ1bmVFbnRyaWVzRG93blRvKHVuc2lnbmVkKQor
eworfQorICAgIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6c3RhdGlzdGljc0NsZWFySW5NZW1vcnlB
bmRQZXJzaXN0ZW50U3RvcmUoKQogewogfQpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVz
dENvbnRyb2xsZXIuaAkocmV2aXNpb24gMjE5MzEyKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9UZXN0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTAsNiArMTUwLDcgQEAgcHVi
bGljOgogCiAgICAgdm9pZCBzZXRTaG91bGREb3dubG9hZFVuZGlzcGxheWFibGVNSU1FVHlwZXMo
Ym9vbCB2YWx1ZSkgeyBtX3Nob3VsZERvd25sb2FkVW5kaXNwbGF5YWJsZU1JTUVUeXBlcyA9IHZh
bHVlOyB9CiAKKyAgICB2b2lkIHNldFN0YXRpc3RpY3NMYXN0U2VlbihXS1N0cmluZ1JlZiBob3N0
TmFtZSwgZG91YmxlIHNlY29uZHMpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc1ByZXZhbGVudFJl
c291cmNlKFdLU3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIHZhbHVlKTsKICAgICBib29sIGlzU3Rh
dGlzdGljc1ByZXZhbGVudFJlc291cmNlKFdLU3RyaW5nUmVmIGhvc3ROYW1lKTsKICAgICB2b2lk
IHNldFN0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24oV0tTdHJpbmdSZWYgaG9zdE5hbWUs
IGJvb2wgdmFsdWUpOwpAQCAtMTcwLDYgKzE3MSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFN0
YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZChib29sIHZhbHVlKTsK
ICAgICB2b2lkIHNldFN0YXRpc3RpY3NNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92
YWwoZG91YmxlKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NHcmFuZGZhdGhlcmluZ1RpbWUoZG91
YmxlIHNlY29uZHMpOworICAgIHZvaWQgc2V0U3RhdGlzdGljc01heFN0YXRpc3RpY3NFbnRyaWVz
KHVuc2lnbmVkKTsKKyAgICB2b2lkIHNldFN0YXRpc3RpY3NQcnVuZUVudHJpZXNEb3duVG8odW5z
aWduZWQpOwogICAgIHZvaWQgc3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3Rv
cmUoKTsKICAgICB2b2lkIHN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3Jl
TW9kaWZpZWRTaW5jZUhvdXJzKHVuc2lnbmVkKTsKICAgICB2b2lkIHN0YXRpc3RpY3NSZXNldFRv
Q29uc2lzdGVudFN0YXRlKCk7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZv
Y2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZv
Y2F0aW9uLmNwcAkocmV2aXNpb24gMjE5MzEyKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0SW52b2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxMiw2ICs5MTIsMjEgQEAgV0tS
ZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0SW52b2NhdGlvbjo6ZAogICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIH0KIAorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3Nh
Z2VOYW1lLCAiU2V0U3RhdGlzdGljc0xhc3RTZWVuIikpIHsKKyAgICAgICAgQVNTRVJUKFdLR2V0
VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7CisgICAgICAg
IAorICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGlj
X2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7CisgICAgICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBob3N0TmFtZUtleShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiSG9zdE5hbWUiKSk7CisgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB2
YWx1ZUtleShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVmFsdWUiKSk7
CisgICAgICAgIAorICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdL
U3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgaG9zdE5hbWVLZXkuZ2V0KCkpKTsKKyAgICAgICAgV0tEb3VibGVSZWYgdmFsdWUgPSBzdGF0
aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9k
eURpY3Rpb25hcnksIHZhbHVlS2V5LmdldCgpKSk7CisgICAgICAgIAorICAgICAgICBUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0xhc3RTZWVuKGhvc3ROYW1lLCBXS0Rv
dWJsZUdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9CisgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2Fn
ZU5hbWUsICJTZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UiKSkgewogICAgICAgICBBU1NF
UlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsK
IApAQCAtMTEwMSw2ICsxMTE2LDIwIEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdEludm9j
YXRpb246OmQKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAorICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0TWF4U3RhdGlzdGlj
c0VudHJpZXMiKSkgeworICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09
IFdLVUludDY0R2V0VHlwZUlEKCkpOworICAgICAgICBXS1VJbnQ2NFJlZiBlbnRyaWVzID0gc3Rh
dGljX2Nhc3Q8V0tVSW50NjRSZWY+KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NNYXhTdGF0aXN0aWNzRW50cmllcyhXS1VJbnQ2
NEdldFZhbHVlKGVudHJpZXMpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAg
IAorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0
UHJ1bmVFbnRyaWVzRG93blRvIikpIHsKKyAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3Nh
Z2VCb2R5KSA9PSBXS1VJbnQ2NEdldFR5cGVJRCgpKTsKKyAgICAgICAgV0tVSW50NjRSZWYgZW50
cmllcyA9IHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihtZXNzYWdlQm9keSk7CisgICAgICAgIFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzUHJ1bmVFbnRyaWVzRG93blRv
KFdLVUludDY0R2V0VmFsdWUoZW50cmllcykpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICB9CisgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5h
bWUsICJTdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSIpKSB7CiAgICAg
ICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFu
ZFBlcnNpc3RlbnRTdG9yZSgpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKSW5kZXg6IFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNw
cAkocmV2aXNpb24gMjE5MzEyKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9UZXN0UnVubmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3NSw2ICsxMTc1LDMxIEBA
IHZvaWQgVGVzdFJ1bm5lcjo6Y2FsbERpZFJlbW92ZVN3aXBlU25hcHMKICAgICBjYWxsVGVzdFJ1
bm5lckNhbGxiYWNrKERpZFJlbW92ZVN3aXBlU25hcHNob3RDYWxsYmFja0lEKTsKIH0KIAordm9p
ZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzTGFzdFNlZW4oSlNTdHJpbmdSZWYgaG9zdE5hbWUs
IGRvdWJsZSBzZWNvbmRzKQoreworICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+
IGtleXM7CisgICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsKKyAgICAK
KyAgICBrZXlzLmFwcGVuZCh7IEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJIb3N0TmFtZSIpIH0pOworICAgIHZhbHVlcy5hcHBlbmQoeyBBZG9wdFdLLCBXS1N0cmluZ0Ny
ZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkgfSk7CisgICAgCisgICAga2V5cy5hcHBlbmQoeyBB
ZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVmFsdWUiKSB9KTsKKyAgICB2
YWx1ZXMuYXBwZW5kKHsgQWRvcHRXSywgV0tEb3VibGVDcmVhdGUoc2Vjb25kcykgfSk7CisgICAg
CisgICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzKGtleXMuc2l6ZSgpKTsKKyAgICBWZWN0
b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXModmFsdWVzLnNpemUoKSk7CisgICAgCisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHJhd0tleXNbaV0g
PSBrZXlzW2ldLmdldCgpOworICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7
CisgICAgfQorICAgIAorICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZShB
ZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc0xhc3RT
ZWVuIikpOworICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkoQWRv
cHRXSywgV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgp
LCByYXdLZXlzLnNpemUoKSkpOworICAgIAorICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVz
c2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdl
dCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7Cit9CisgICAgCiB2b2lkIFRlc3RSdW5u
ZXI6OnNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShKU1N0cmluZ1JlZiBob3N0TmFtZSwg
Ym9vbCB2YWx1ZSkKIHsKICAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlz
OwpAQCAtMTQ5MSw2ICsxNTE2LDIwIEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0dy
YW5kZmF0aGUKICAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHku
Z2V0KCksIG51bGxwdHIpOwogfQogCit2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NNYXhT
dGF0aXN0aWNzRW50cmllcyh1bnNpZ25lZCBlbnRyaWVzKQoreworICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiU2V0TWF4U3RhdGlzdGljc0VudHJpZXMiKSk7CisgICAgV0tSZXRhaW5QdHI8V0tUeXBl
UmVmPiBtZXNzYWdlQm9keShBZG9wdFdLLCBXS1VJbnQ2NENyZWF0ZShlbnRyaWVzKSk7CisgICAg
V0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRy
KTsKK30KKyAgICAKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1BydW5lRW50cmllc0Rv
d25Ubyh1bnNpZ25lZCBlbnRyaWVzKQoreworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0UHJ1
bmVFbnRyaWVzRG93blRvIikpOworICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gbWVzc2FnZUJv
ZHkoQWRvcHRXSywgV0tVSW50NjRDcmVhdGUoZW50cmllcykpOworICAgIFdLQnVuZGxlUG9zdFN5
bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1l
c3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7Cit9CisgICAgCiB2
b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3Jl
KCkKIHsKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUoQWRvcHRXSywg
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5k
UGVyc2lzdGVudFN0b3JlIikpOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9UZXN0UnVubmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmgJKHJldmlzaW9uIDIxOTMxMikKKysrIFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNTcsNiArMzU3LDcgQEAgcHVibGljOgogICAgIHZvaWQgc3RhdGlzdGljc1VwZGF0
ZUNvb2tpZVBhcnRpdGlvbmluZygpOwogICAgIHZvaWQgc3RhdGlzdGljc1NldFNob3VsZFBhcnRp
dGlvbkNvb2tpZXNGb3JIb3N0KEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIHZhbHVlKTsKICAg
ICB2b2lkIHN0YXRpc3RpY3NTdWJtaXRUZWxlbWV0cnkoKTsKKyAgICB2b2lkIHNldFN0YXRpc3Rp
Y3NMYXN0U2VlbihKU1N0cmluZ1JlZiBob3N0TmFtZSwgZG91YmxlIHNlY29uZHMpOwogICAgIHZv
aWQgc2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBi
b29sIHZhbHVlKTsKICAgICBib29sIGlzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKEpTU3Ry
aW5nUmVmIGhvc3ROYW1lKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJh
Y3Rpb24oSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpOwpAQCAtMzczLDYgKzM3NCw4
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5UZWxlbWV0
cnlXYXNDYXB0dXJlZChib29sIHZhbHVlKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NNaW5pbXVt
VGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoZG91YmxlKTsKICAgICB2b2lkIHNldFN0YXRp
c3RpY3NHcmFuZGZhdGhlcmluZ1RpbWUoZG91YmxlIHNlY29uZHMpOworICAgIHZvaWQgc2V0U3Rh
dGlzdGljc01heFN0YXRpc3RpY3NFbnRyaWVzKHVuc2lnbmVkKTsKKyAgICB2b2lkIHNldFN0YXRp
c3RpY3NQcnVuZUVudHJpZXNEb3duVG8odW5zaWduZWQpOwogICAgIHZvaWQgc3RhdGlzdGljc0Ns
ZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUoKTsKICAgICB2b2lkIHN0YXRpc3RpY3NDbGVh
ckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlTW9kaWZpZWRTaW5jZUhvdXJzKHVuc2lnbmVkIGhv
dXJzKTsKICAgICB2b2lkIHN0YXRpc3RpY3NSZXNldFRvQ29uc2lzdGVudFN0YXRlKCk7CkluZGV4
OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5u
ZXIuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvQmluZGluZ3MvVGVzdFJ1bm5lci5pZGwJKHJldmlzaW9uIDIxOTMxMikKKysrIFRvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5pZGwJKHdv
cmtpbmcgY29weSkKQEAgLTI1NCw2ICsyNTQsNyBAQCBpbnRlcmZhY2UgVGVzdFJ1bm5lciB7CiAg
ICAgdm9pZCBpbnN0YWxsU3RhdGlzdGljc0RpZE1vZGlmeURhdGFSZWNvcmRzQ2FsbGJhY2sob2Jq
ZWN0IGNhbGxiYWNrKTsKICAgICB2b2lkIGluc3RhbGxTdGF0aXN0aWNzRGlkU2NhbkRhdGFSZWNv
cmRzQ2FsbGJhY2sob2JqZWN0IGNhbGxiYWNrKTsKICAgICB2b2lkIGluc3RhbGxTdGF0aXN0aWNz
RGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2sob2JqZWN0IGNhbGxiYWNrKTsKKyAgICB2b2lkIHNldFN0
YXRpc3RpY3NMYXN0U2VlbihET01TdHJpbmcgaG9zdE5hbWUsIGRvdWJsZSBzZWNvbmRzKTsKICAg
ICB2b2lkIHNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShET01TdHJpbmcgaG9zdE5hbWUs
IGJvb2xlYW4gdmFsdWUpOwogICAgIGJvb2xlYW4gaXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3Vy
Y2UoRE9NU3RyaW5nIGhvc3ROYW1lKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NIYXNIYWRVc2Vy
SW50ZXJhY3Rpb24oRE9NU3RyaW5nIGhvc3ROYW1lLCBib29sZWFuIHZhbHVlKTsKQEAgLTI3NCw2
ICsyNzUsOCBAQCBpbnRlcmZhY2UgVGVzdFJ1bm5lciB7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNz
Tm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQoYm9vbGVhbiB2YWx1ZSk7CiAgICAg
dm9pZCBzZXRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKGRv
dWJsZSBzZWNvbmRzKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NHcmFuZGZhdGhlcmluZ1RpbWUo
ZG91YmxlIHNlY29uZHMpOworICAgIHZvaWQgc2V0U3RhdGlzdGljc01heFN0YXRpc3RpY3NFbnRy
aWVzKHVuc2lnbmVkIGxvbmcgZW50cmllcyk7CisgICAgdm9pZCBzZXRTdGF0aXN0aWNzUHJ1bmVF
bnRyaWVzRG93blRvKHVuc2lnbmVkIGxvbmcgZW50cmllcyk7CiAgICAgdm9pZCBzdGF0aXN0aWNz
Q2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSgpOwogICAgIHZvaWQgc3RhdGlzdGljc0Ns
ZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmVNb2RpZmllZFNpbmNlSG91cnModW5zaWduZWQg
bG9uZyBob3Vycyk7CiAgICAgdm9pZCBzdGF0aXN0aWNzUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSgp
OwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0Q29udHJvbGxlckNvY29h
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdENvbnRy
b2xsZXJDb2NvYS5tbQkocmV2aXNpb24gMjE5MzEyKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9jb2NvYS9UZXN0Q29udHJvbGxlckNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMjIsNiAr
MjIyLDExIEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJlbW92ZUFsbFNlc3Npb25DcmUKIH0KIAog
I2lmIFdLX0FQSV9FTkFCTEVECit2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzTGFz
dFNlZW4oV0tTdHJpbmdSZWYgaG9zdE5hbWUsIGRvdWJsZSBzZWNvbmRzKQoreworICAgIFtnbG9i
YWxXZWJWaWV3Q29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlIF9yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU2V0TGFzdFNlZW46c2Vjb25kcyBmb3JIb3N0OnRvTlNTdHJpbmcoaG9zdE5hbWUpXTsK
K30KKyAgICAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNv
dXJjZShXS1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSkKIHsKICAgICBbZ2xvYmFsV2Vi
Vmlld0NvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSBfcmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1NldElzUHJldmFsZW50UmVzb3VyY2U6dmFsdWUgZm9ySG9zdDp0b05TU3RyaW5nKGhvc3ROYW1l
KV07CkBAIC0zNDYsNiArMzUxLDE2IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnNldFN0YXRpc3Rp
Y3NHcmFuZGYKICAgICBbZ2xvYmFsV2ViVmlld0NvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9y
ZSBfcmVzb3VyY2VMb2FkU3RhdGlzdGljc1NldEdyYW5kZmF0aGVyaW5nVGltZTpzZWNvbmRzXTsK
IH0KIAordm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc01heFN0YXRpc3RpY3NFbnRy
aWVzKHVuc2lnbmVkIGVudHJpZXMpCit7CisgICAgW2dsb2JhbFdlYlZpZXdDb25maWd1cmF0aW9u
LndlYnNpdGVEYXRhU3RvcmUgX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTZXRNYXhTdGF0aXN0aWNz
RW50cmllczplbnRyaWVzXTsKK30KKyAgICAKK3ZvaWQgVGVzdENvbnRyb2xsZXI6OnNldFN0YXRp
c3RpY3NQcnVuZUVudHJpZXNEb3duVG8odW5zaWduZWQgZW50cmllcykKK3sKKyAgICBbZ2xvYmFs
V2ViVmlld0NvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSBfcmVzb3VyY2VMb2FkU3RhdGlz
dGljc1NldFBydW5lRW50cmllc0Rvd25UbzplbnRyaWVzXTsKK30KKyAgICAKIHZvaWQgVGVzdENv
bnRyb2xsZXI6OnN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlKCkKIHsK
ICAgICBbZ2xvYmFsV2ViVmlld0NvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSBfcmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmVdOwpJbmRleDog
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxv
ZwkocmV2aXNpb24gMjE5MzEyKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTctMDctMTAgIEpvaG4gV2lsYW5kZXIgIDx3aWxhbmRl
ckBhcHBsZS5jb20+CisKKyAgICAgICAgUmVzb3VyY2UgTG9hZCBTdGF0aXN0aWNzOiBQcnVuZSBz
dGF0aXN0aWNzIGluIG9yZGVycyBvZiBpbXBvcnRhbmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQyMTUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzMzMTY0NDAzPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcHJ1bmUtc3Rh
dGlzdGljcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvbG9hZGlu
Zy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3BydW5lLXN0YXRpc3RpY3MuaHRtbDogQWRkZWQuCisg
ICAgICAgICogcGxhdGZvcm0vd2syL1Rlc3RFeHBlY3RhdGlvbnM6CisgICAgICAgICAgICBBZGRl
ZCBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wcnVuZS1zdGF0aXN0
aWNzLmh0bWwgYXMKKyAgICAgICAgICAgIFsgUGFzcyBdIHNpbmNlIFJlc291cmNlIExvYWQgU3Rh
dGlzdGljcyBpcyBXSzItb25seS4KKwogMjAxNy0wNy0xMCAgWW91ZW5uIEZhYmxldCAgPHlvdWVu
bkBhcHBsZS5jb20+CiAKICAgICAgICAgVXBkYXRlIHdlYnJ0YyBleHBlY3RhdGlvbnMKSW5kZXg6
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3By
dW5lLXN0YXRpc3RpY3MtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0
dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3BydW5lLXN0YXRpc3RpY3Mt
ZXhwZWN0ZWQudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9h
ZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3BydW5lLXN0YXRpc3RpY3MtZXhwZWN0ZWQudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjMgQEAKK21haW4gZnJhbWUgLSBkaWRTdGFydFBy
b3Zpc2lvbmFsTG9hZEZvckZyYW1lCittYWluIGZyYW1lIC0gZGlkQ29tbWl0TG9hZEZvckZyYW1l
CittYWluIGZyYW1lIC0gZGlkUmVjZWl2ZVRpdGxlOiBUZXN0IGZvciBSZXNvdXJjZSBMb2FkIFN0
YXRpc3RpY3MgUHJ1bmluZworbWFpbiBmcmFtZSAtIGRpZEZpbmlzaERvY3VtZW50TG9hZEZvckZy
YW1lCittYWluIGZyYW1lIC0gZGlkSGFuZGxlT25sb2FkRXZlbnRzRm9yRnJhbWUKK21haW4gZnJh
bWUgLSBkaWRGaW5pc2hMb2FkRm9yRnJhbWUKK1Rlc3RzIHRoYXQgc3RhdGlzdGljcyBhcmUgcHJ1
bmVkIGluIHRoZSByaWdodCBvcmRlci4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2Vy
aWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisK
K1BBU1MgVGVzdCBpdGVyYXRpb24gMSBwYXNzZWQuCitQQVNTIFRlc3QgaXRlcmF0aW9uIDIgcGFz
c2VkLgorUEFTUyBUZXN0IGl0ZXJhdGlvbiAzIHBhc3NlZC4KK1BBU1MgVGVzdCBpdGVyYXRpb24g
NCBwYXNzZWQuCitQQVNTIFRlc3QgaXRlcmF0aW9uIDUgcGFzc2VkLgorUEFTUyBUZXN0IGl0ZXJh
dGlvbiA2IHBhc3NlZC4KK1BBU1MgVGVzdCBpdGVyYXRpb24gNyBwYXNzZWQuCitQQVNTIFRlc3Qg
aXRlcmF0aW9uIDggcGFzc2VkLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitU
RVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzL3BydW5lLXN0YXRpc3RpY3MuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wcnVu
ZS1zdGF0aXN0aWNzLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcHJ1bmUtc3RhdGlzdGljcy5odG1sCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgor
PGhlYWQ+CisgICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiPgorICAgIDx0aXRsZT5UZXN0IGZvciBS
ZXNvdXJjZSBMb2FkIFN0YXRpc3RpY3MgUHJ1bmluZzwvdGl0bGU+CisgICAgPHNjcmlwdCBzcmM9
Ii9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorPHNjcmlwdD4KKyAgICBkZXNjcmlwdGlvbigiVGVzdHMgdGhhdCBzdGF0aXN0aWNzIGFyZSBw
cnVuZWQgaW4gdGhlIHJpZ2h0IG9yZGVyLiIpOworICAgIGpzVGVzdElzQXN5bmMgPSB0cnVlOwor
CisgICAgY29uc3Qgb2xkZXJUaW1lc3RhbXAgPSBNYXRoLnJvdW5kKChuZXcgRGF0ZSgpKS5nZXRU
aW1lKCkgLyAxMDAwKTsKKyAgICBjb25zdCBuZXdlclRpbWVzdGFtcCA9IG9sZGVyVGltZXN0YW1w
ICsgMTA7CisgICAgY29uc3QgbmV3ZXN0VGltZXN0YW1wID0gbmV3ZXJUaW1lc3RhbXAgKyAxMDsK
KworICAgIGNvbnN0IHVybHNUb0JlUHJ1bmVkID0gWworICAgICAgICB7IHVybDogImh0dHA6Ly8x
MjcuMC4wLjE6ODAwMC90ZW1wIiwgcHJldmFsZW50OiBmYWxzZSB9LAorICAgICAgICB7IHVybDog
Imh0dHA6Ly8xMjcuMC4wLjI6ODAwMC90ZW1wIiwgcHJldmFsZW50OiBmYWxzZSB9LAorICAgICAg
ICB7IHVybDogImh0dHA6Ly8xMjcuMC4wLjM6ODAwMC90ZW1wIiwgcHJldmFsZW50OiB0cnVlIH0s
CisgICAgICAgIHsgdXJsOiAiaHR0cDovLzEyNy4wLjAuNDo4MDAwL3RlbXAiLCBwcmV2YWxlbnQ6
IHRydWUgfSwKKyAgICAgICAgeyB1cmw6ICJodHRwOi8vMTI3LjAuMC41OjgwMDAvdGVtcCIsIHBy
ZXZhbGVudDogZmFsc2UgfSwKKyAgICAgICAgeyB1cmw6ICJodHRwOi8vMTI3LjAuMC42OjgwMDAv
dGVtcCIsIHByZXZhbGVudDogZmFsc2UgfSwKKyAgICAgICAgeyB1cmw6ICJodHRwOi8vMTI3LjAu
MC43OjgwMDAvdGVtcCIsIHByZXZhbGVudDogdHJ1ZSB9LAorICAgICAgICB7IHVybDogImh0dHA6
Ly8xMjcuMC4wLjg6ODAwMC90ZW1wIiwgcHJldmFsZW50OiB0cnVlIH0KKyAgICBdOworCisgICAg
ZnVuY3Rpb24gY2hlY2tJZlByZXZhbGVudEFjY29yZGluZ1RvSW5pdGlhbEV4cGVjdGF0aW9uKGJl
Z2luLCBlbmQpIHsKKyAgICAgICAgdmFyIGZhaWxlZCA9IGZhbHNlOworICAgICAgICBmb3IgKHZh
ciBpID0gYmVnaW47IGkgPCBlbmQ7ICsraSkgeworICAgICAgICAgICAgaWYgKHRlc3RSdW5uZXIu
aXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UodXJsc1RvQmVQcnVuZWRbaV0udXJsKSAhPT0g
dXJsc1RvQmVQcnVuZWRbaV0ucHJldmFsZW50KSB7CisgICAgICAgICAgICAgICAgdGVzdEZhaWxl
ZCgiY2hlY2tJZlByZXZhbGVudEFjY29yZGluZ1RvSW5pdGlhbEV4cGVjdGF0aW9uOiBUZXN0IGl0
ZXJhdGlvbiAiICsgY3VycmVudFRlc3QgKyAiIGZhaWxlZC4gIiArIHVybHNUb0JlUHJ1bmVkW2ld
LnVybCArICh1cmxzVG9CZVBydW5lZFtpXS5wcmV2YWxlbnQgPyAiIHdhc24ndCAiIDogIiB3YXMg
IikgKyAicHJldmFsZW50Iik7CisgICAgICAgICAgICAgICAgZmFpbGVkID0gdHJ1ZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoZmFpbGVkKQorICAgICAgICAgICAgZmlu
aXNoSlNUZXN0KCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gY2hlY2tJZlByZXZhbGVudChiZWdp
biwgZW5kLCBleHBlY3RlZCkgeworICAgICAgICB2YXIgZmFpbGVkID0gZmFsc2U7CisgICAgICAg
IGZvciAodmFyIGkgPSBiZWdpbjsgaSA8IGVuZDsgKytpKSB7CisgICAgICAgICAgICBpZiAodGVz
dFJ1bm5lci5pc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZSh1cmxzVG9CZVBydW5lZFtpXS51
cmwpICE9PSBleHBlY3RlZCkgeworICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoImNoZWNrSWZQ
cmV2YWxlbnQ6IFRlc3QgaXRlcmF0aW9uICIgKyBjdXJyZW50VGVzdCArICIgZmFpbGVkLiAiICsg
dXJsc1RvQmVQcnVuZWRbaV0udXJsICsgKGV4cGVjdGVkID8gIiB3YXNuJ3QgIiA6ICIgd2FzICIp
ICsgInByZXZhbGVudCIpOworICAgICAgICAgICAgICAgIGZhaWxlZCA9IHRydWU7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZhaWxlZCkKKyAgICAgICAgICAgIGZpbmlz
aEpTVGVzdCgpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGluaXRpYWxpemVTdGF0aXN0aWNzKCkg
eworICAgICAgICB0ZXN0UnVubmVyLmluc3RhbGxTdGF0aXN0aWNzRGlkU2NhbkRhdGFSZWNvcmRz
Q2FsbGJhY2soY2hlY2tTdGF0aXN0aWNzQWZ0ZXJQcnVuaW5nKTsKKworICAgICAgICAvLyBOb24t
cHJldmFsZW50IHdpdGhvdXQgdXNlciBpbnRlcmFjdGlvbiB0byBiZSBwcnVuZWQgZmlyc3QuCisg
ICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc0xhc3RTZWVuKHVybHNUb0JlUHJ1bmVkWzBd
LnVybCwgb2xkZXJUaW1lc3RhbXApOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NM
YXN0U2Vlbih1cmxzVG9CZVBydW5lZFsxXS51cmwsIG5ld2VyVGltZXN0YW1wKTsKKworICAgICAg
ICAvLyBQcmV2YWxlbnQgd2l0aG91dCB1c2VyIGludGVyYWN0aW9uIHRvIGJlIHBydW5lZCBzZWNv
bmQuCisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKHVy
bHNUb0JlUHJ1bmVkWzJdLnVybCwgdHJ1ZSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlz
dGljc0xhc3RTZWVuKHVybHNUb0JlUHJ1bmVkWzJdLnVybCwgb2xkZXJUaW1lc3RhbXApOworICAg
ICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZSh1cmxzVG9CZVBy
dW5lZFszXS51cmwsIHRydWUpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NMYXN0
U2Vlbih1cmxzVG9CZVBydW5lZFszXS51cmwsIG5ld2VyVGltZXN0YW1wKTsKKworICAgICAgICAv
LyBOb24tcHJldmFsZW50IHdpdGggdXNlciBpbnRlcmFjdGlvbiB0byBiZSBwcnVuZWQgdGhpcmQu
CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbih1
cmxzVG9CZVBydW5lZFs0XS51cmwsIHRydWUpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRp
c3RpY3NMYXN0U2Vlbih1cmxzVG9CZVBydW5lZFs0XS51cmwsIG9sZGVyVGltZXN0YW1wKTsKKyAg
ICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKHVybHNU
b0JlUHJ1bmVkWzVdLnVybCwgdHJ1ZSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGlj
c0xhc3RTZWVuKHVybHNUb0JlUHJ1bmVkWzVdLnVybCwgbmV3ZXJUaW1lc3RhbXApOworCisgICAg
ICAgIC8vIFByZXZhbGVudCB3aXRoIHVzZXIgaW50ZXJhY3Rpb24gdG8gYmUgcHJ1bmVkIGxhc3Qu
CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKHVybHNU
b0JlUHJ1bmVkWzZdLnVybCwgdHJ1ZSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGlj
c0hhc0hhZFVzZXJJbnRlcmFjdGlvbih1cmxzVG9CZVBydW5lZFs2XS51cmwsIHRydWUpOworICAg
ICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NMYXN0U2Vlbih1cmxzVG9CZVBydW5lZFs2XS51
cmwsIG9sZGVyVGltZXN0YW1wKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzUHJl
dmFsZW50UmVzb3VyY2UodXJsc1RvQmVQcnVuZWRbN10udXJsLCB0cnVlKTsKKyAgICAgICAgdGVz
dFJ1bm5lci5zZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKHVybHNUb0JlUHJ1bmVk
WzddLnVybCwgdHJ1ZSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc0xhc3RTZWVu
KHVybHNUb0JlUHJ1bmVkWzddLnVybCwgbmV3ZXJUaW1lc3RhbXApOworCisgICAgICAgIGNoZWNr
SWZQcmV2YWxlbnRBY2NvcmRpbmdUb0luaXRpYWxFeHBlY3RhdGlvbigwLCB1cmxzVG9CZVBydW5l
ZC5sZW5ndGgpOworICAgIH0KKworICAgIHZhciBjdXJyZW50VGVzdDsKKyAgICBmdW5jdGlvbiBj
aGVja1N0YXRpc3RpY3NBZnRlclBydW5pbmcoKSB7CisgICAgICAgIC8vIFBydW5lZCBlbnRyaWVz
IHNob3VsZCBub3QgYmUgcHJldmFsZW50LgorICAgICAgICBjaGVja0lmUHJldmFsZW50KDAsIGN1
cnJlbnRUZXN0LCBmYWxzZSk7CisgICAgICAgIC8vIE5vbi1wcnVuZWQgZW50cmllcyBzaG91bGQg
a2VlcCB0aGVpciBleHBlY3RlZCBzdGF0dXMuCisgICAgICAgIGNoZWNrSWZQcmV2YWxlbnRBY2Nv
cmRpbmdUb0luaXRpYWxFeHBlY3RhdGlvbihjdXJyZW50VGVzdCwgdXJsc1RvQmVQcnVuZWQubGVu
Z3RoKTsKKyAgICAgICAgdGVzdFBhc3NlZCgiVGVzdCBpdGVyYXRpb24gIiArIGN1cnJlbnRUZXN0
ICsgIiBwYXNzZWQuIik7CisgICAgICAgIGlmIChjdXJyZW50VGVzdCA8IHVybHNUb0JlUHJ1bmVk
Lmxlbmd0aCkgeworICAgICAgICAgICAgKytjdXJyZW50VGVzdDsKKyAgICAgICAgICAgIHJ1blRl
c3QoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAg
ICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICAgICAgaW5pdGlh
bGl6ZVN0YXRpc3RpY3MoKTsKKworICAgICAgICB2YXIgZmlsbGVyVXJsID0gImh0dHA6Ly8xMjcu
MC4iICsgY3VycmVudFRlc3QgKyAiLjE6ODAwMC90ZW1wIjsKKyAgICAgICAgdGVzdFJ1bm5lci5z
ZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoZmlsbGVyVXJsLCB0cnVlKTsKKyAgICAgICAg
dGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKGZpbGxlclVybCwg
dHJ1ZSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc0xhc3RTZWVuKGZpbGxlclVy
bCwgbmV3ZXN0VGltZXN0YW1wKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zdGF0aXN0aWNzUHJvY2Vz
c1N0YXRpc3RpY3NBbmREYXRhUmVjb3JkcygpOworICAgIH0KKworICAgIGlmICh3aW5kb3cudGVz
dFJ1bm5lcikgeworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NTaG91bGRDbGFzc2lm
eVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChmYWxzZSk7CisgICAgICAgIHRlc3RS
dW5uZXIuc2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCgw
KTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuRGF0YVJl
Y29yZHNXZXJlU2Nhbm5lZCh0cnVlKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNz
TWF4U3RhdGlzdGljc0VudHJpZXModXJsc1RvQmVQcnVuZWQubGVuZ3RoKTsKKyAgICAgICAgdGVz
dFJ1bm5lci5zZXRTdGF0aXN0aWNzUHJ1bmVFbnRyaWVzRG93blRvKHVybHNUb0JlUHJ1bmVkLmxl
bmd0aCk7CisKKyAgICAgICAgY3VycmVudFRlc3QgPSAxOworICAgICAgICBydW5UZXN0KCk7Cisg
ICAgfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
ZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2syL1Rlc3RFeHBlY3RhdGlvbnMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2syL1Rlc3RFeHBlY3RhdGlvbnMJKHJl
dmlzaW9uIDIxOTMxMikKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL3drMi9UZXN0RXhwZWN0YXRp
b25zCSh3b3JraW5nIGNvcHkpCkBAIC03MDYsNiArNzA2LDcgQEAgaHR0cC90ZXN0cy9sb2FkaW5n
L3Jlc291cmNlTG9hZFN0YXRpc3RpYwogaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0
YXRpc3RpY3MvY2xlYXItaW4tbWVtb3J5LWFuZC1wZXJzaXN0ZW50LXN0b3JlLmh0bWwgWyBQYXNz
IF0KIHdlYmtpdC5vcmcvYi8xNzI0NTIgaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0
YXRpc3RpY3MvZ3JhbmRmYXRoZXJpbmcuaHRtbCBbIFBhc3MgRmFpbHVyZSBUaW1lb3V0IF0KIHdl
YmtpdC5vcmcvYi8xNzM0OTkgaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3MvdGVsZW1ldHJ5LWdlbmVyYXRpb24uaHRtbCBbIFBhc3MgRmFpbHVyZSBdCitodHRwL3Rlc3Rz
L2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wcnVuZS1zdGF0aXN0aWNzLmh0bWwgWyBQ
YXNzIF0KIAogIyMjIEVORCBPRiAoNSkgUHJvZ3Jlc3Npb25zLCBleHBlY3RlZCBzdWNjZXNzZXMg
dGhhdCBhcmUgZXhwZWN0ZWQgZmFpbHVyZXMgaW4gV2ViS2l0MS4KICMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>315043</attachid>
            <date>2017-07-10 16:49:16 -0700</date>
            <delta_ts>2017-07-10 17:25:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174215-20170710164915.patch</filename>
            <type>text/plain</type>
            <size>42758</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxOTMxMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDE3LTA3LTEwICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIExvYWQgU3Rh
dGlzdGljczogUHJ1bmUgc3RhdGlzdGljcyBpbiBvcmRlcnMgb2YgaW1wb3J0YW5jZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0MjE1CisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS8zMzE2NDQwMz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUZXN0OiBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2Fk
U3RhdGlzdGljcy9wcnVuZS1zdGF0aXN0aWNzLmh0bWwKKworICAgICAgICAqIGxvYWRlci9SZXNv
dXJjZUxvYWRPYnNlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZWR1Y2VUaW1lUmVzb2x1
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nRnJhbWVO
YXZpZ2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dT
dWJyZXNvdXJjZUxvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OmxvZ1dlYlNvY2tldExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OmxvZ1VzZXJJbnRlcmFjdGlvbldpdGhSZWR1Y2VkVGltZVJlc29sdXRpb24pOgor
ICAgICAgICAgICAgTm93IGFsbCBzZXQgdGhlIG5ldyBzdGF0aXN0aWNzIGZpZWxkIGxhc3RTZWVu
LgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M6OmVuY29kZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljczo6dG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljczo6bWVyZ2UpOgorICAgICAgICAgICAgSGFuZGxpbmcgb2YgdGhl
IG5ldyBzdGF0aXN0aWNzIGZpZWxkIGxhc3RTZWVuLgorICAgICAgICAqIGxvYWRlci9SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzLmg6CisKIDIwMTctMDctMTAgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9o
c2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgW1dLMl0gSWdub3JlIHRvdWNoIGV2ZW50cyB0aGF0
IGludGVycnVwdCBwbGF0Zm9ybS1kcml2ZW4gbW9tZW50dW0gc2Nyb2xsaW5nCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAJKHJldmlzaW9u
IDIxOTMxMikKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDYgKzkyLDExIEBAIGJvb2wgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNob3VsZExvZyhQYWcKICAgICByZXR1cm4gU2V0dGluZ3M6OnJlc291cmNlTG9hZFN0
YXRpc3RpY3NFbmFibGVkKCkgJiYgIXBhZ2UtPnVzZXNFcGhlbWVyYWxTZXNzaW9uKCkgJiYgbV9u
b3RpZmljYXRpb25DYWxsYmFjazsKIH0KIAorc3RhdGljIFdhbGxUaW1lIHJlZHVjZVRvSG91cmx5
VGltZVJlc29sdXRpb24oV2FsbFRpbWUgdGltZSkKK3sKKyAgICByZXR1cm4gV2FsbFRpbWU6OmZy
b21SYXdTZWNvbmRzKHN0ZDo6Zmxvb3IodGltZS5zZWNvbmRzU2luY2VFcG9jaCgpIC8gdGltZXN0
YW1wUmVzb2x1dGlvbikgKiB0aW1lc3RhbXBSZXNvbHV0aW9uLnNlY29uZHMoKSk7Cit9CisKIHZv
aWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBGcmFtZSYg
ZnJhbWUsIGNvbnN0IEZyYW1lJiB0b3BGcmFtZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBuZXdS
ZXF1ZXN0KQogewogICAgIEFTU0VSVChmcmFtZS5kb2N1bWVudCgpKTsKQEAgLTEyNSw2ICsxMzAs
NyBAQCB2b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dGcmFtZU5hdmlnCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGF1dG8mIHRhcmdldFN0YXRpc3RpY3MgPSBlbnN1cmVSZXNvdXJjZVN0YXRp
c3RpY3NGb3JQcmltYXJ5RG9tYWluKHRhcmdldFByaW1hcnlEb21haW4pOworICAgIHRhcmdldFN0
YXRpc3RpY3MubGFzdFNlZW4gPSByZWR1Y2VUb0hvdXJseVRpbWVSZXNvbHV0aW9uKFdhbGxUaW1l
Ojpub3coKSk7CiAgICAgYXV0byBzdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zUmVzdWx0ID0g
dGFyZ2V0U3RhdGlzdGljcy5zdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zLmFkZChtYWluRnJh
bWVQcmltYXJ5RG9tYWluKTsKICAgICBpZiAoc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc1Jl
c3VsdC5pc05ld0VudHJ5KQogICAgICAgICBzY2hlZHVsZU5vdGlmaWNhdGlvbklmTmVlZGVkKCk7
CkBAIC0xNTgsNiArMTY0LDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nU3VicmVz
b3VyYwogICAgIGJvb2wgc2hvdWxkQ2FsbE5vdGlmaWNhdGlvbkNhbGxiYWNrID0gZmFsc2U7CiAg
ICAgewogICAgICAgICBhdXRvJiB0YXJnZXRTdGF0aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VTdGF0
aXN0aWNzRm9yUHJpbWFyeURvbWFpbih0YXJnZXRQcmltYXJ5RG9tYWluKTsKKyAgICAgICAgdGFy
Z2V0U3RhdGlzdGljcy5sYXN0U2VlbiA9IHJlZHVjZVRvSG91cmx5VGltZVJlc29sdXRpb24oV2Fs
bFRpbWU6Om5vdygpKTsKICAgICAgICAgaWYgKHRhcmdldFN0YXRpc3RpY3Muc3VicmVzb3VyY2VV
bmRlclRvcEZyYW1lT3JpZ2lucy5hZGQobWFpbkZyYW1lUHJpbWFyeURvbWFpbikuaXNOZXdFbnRy
eSkKICAgICAgICAgICAgIHNob3VsZENhbGxOb3RpZmljYXRpb25DYWxsYmFjayA9IHRydWU7CiAg
ICAgfQpAQCAtMTk3LDE1ICsyMDQsMTEgQEAgdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9n
V2ViU29ja2V0TAogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvJiB0YXJnZXRTdGF0aXN0aWNz
ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbih0YXJnZXRQcmltYXJ5
RG9tYWluKTsKKyAgICB0YXJnZXRTdGF0aXN0aWNzLmxhc3RTZWVuID0gcmVkdWNlVG9Ib3VybHlU
aW1lUmVzb2x1dGlvbihXYWxsVGltZTo6bm93KCkpOwogICAgIGlmICh0YXJnZXRTdGF0aXN0aWNz
LnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMuYWRkKG1haW5GcmFtZVByaW1hcnlEb21h
aW4pLmlzTmV3RW50cnkpCiAgICAgICAgIHNjaGVkdWxlTm90aWZpY2F0aW9uSWZOZWVkZWQoKTsK
IH0KIAotc3RhdGljIFdhbGxUaW1lIHJlZHVjZVRpbWVSZXNvbHV0aW9uKFdhbGxUaW1lIHRpbWUp
Ci17Ci0gICAgcmV0dXJuIFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhzdGQ6OmZsb29yKHRpbWUu
c2Vjb25kc1NpbmNlRXBvY2goKSAvIHRpbWVzdGFtcFJlc29sdXRpb24pICogdGltZXN0YW1wUmVz
b2x1dGlvbi5zZWNvbmRzKCkpOwotfQotCiB2b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dV
c2VySW50ZXJhY3Rpb25XaXRoUmVkdWNlZFRpbWVSZXNvbHV0aW9uKGNvbnN0IERvY3VtZW50JiBk
b2N1bWVudCkKIHsKICAgICBBU1NFUlQoZG9jdW1lbnQucGFnZSgpKTsKQEAgLTIxOCwxMSArMjIx
LDEyIEBAIHZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1VzZXJJbnRlcmEKICAgICAgICAg
cmV0dXJuOwogCiAgICAgYXV0byYgc3RhdGlzdGljcyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGlj
c0ZvclByaW1hcnlEb21haW4ocHJpbWFyeURvbWFpbih1cmwpKTsKLSAgICBhdXRvIG5ld1RpbWUg
PSByZWR1Y2VUaW1lUmVzb2x1dGlvbihXYWxsVGltZTo6bm93KCkpOworICAgIGF1dG8gbmV3VGlt
ZSA9IHJlZHVjZVRvSG91cmx5VGltZVJlc29sdXRpb24oV2FsbFRpbWU6Om5vdygpKTsKICAgICBp
ZiAobmV3VGltZSA9PSBzdGF0aXN0aWNzLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lKQog
ICAgICAgICByZXR1cm47CiAKICAgICBzdGF0aXN0aWNzLmhhZFVzZXJJbnRlcmFjdGlvbiA9IHRy
dWU7CisgICAgc3RhdGlzdGljcy5sYXN0U2VlbiA9IG5ld1RpbWU7CiAgICAgc3RhdGlzdGljcy5t
b3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSA9IG5ld1RpbWU7CiAKICAgICBzY2hlZHVsZU5v
dGlmaWNhdGlvbklmTmVlZGVkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVy
L1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuY3BwCShyZXZpc2lvbiAyMTkzMTIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUwLDYgKzUwLDggQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjplbmNvZGUoS2V5
ZQogewogICAgIGVuY29kZXIuZW5jb2RlU3RyaW5nKCJQcmV2YWxlbnRSZXNvdXJjZU9yaWdpbiIs
IGhpZ2hMZXZlbERvbWFpbik7CiAgICAgCisgICAgZW5jb2Rlci5lbmNvZGVEb3VibGUoImxhc3RT
ZWVuIiwgbGFzdFNlZW4uc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKTsKKyAgICAKICAgICAv
LyBVc2VyIGludGVyYWN0aW9uCiAgICAgZW5jb2Rlci5lbmNvZGVCb29sKCJoYWRVc2VySW50ZXJh
Y3Rpb24iLCBoYWRVc2VySW50ZXJhY3Rpb24pOwogICAgIGVuY29kZXIuZW5jb2RlRG91YmxlKCJt
b3N0UmVjZW50VXNlckludGVyYWN0aW9uIiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUu
c2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKTsKQEAgLTExNCw2ICsxMTYsMTEgQEAgYm9vbCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpkZWNvZGUoS2V5ZQogICAgIGlmICghZGVjb2Rlci5kZWNv
ZGVCb29sKCJncmFuZGZhdGhlcmVkIiwgZ3JhbmRmYXRoZXJlZCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAorICAgIGRvdWJsZSBsYXN0U2VlblRpbWVBc0RvdWJsZTsKKyAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlRG91YmxlKCJsYXN0U2VlbiIsIGxhc3RTZWVuVGltZUFzRG91YmxlKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGxhc3RTZWVuID0gV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRz
KGxhc3RTZWVuVGltZUFzRG91YmxlKTsKKyAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAt
MTQ3LDYgKzE1NCwxMCBAQCBTdHJpbmcgUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6dG9TdHJpbmco
CiB7CiAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwogICAgIAorICAgIGJ1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgibGFzdFNlZW4iKTsKKyAgICBidWlsZGVyLmFwcGVuZE51bWJlcihsYXN0U2Vlbi5z
ZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpOworICAgIGJ1aWxkZXIuYXBwZW5kKCdcbicpOwor
ICAgIAogICAgIC8vIFVzZXIgaW50ZXJhY3Rpb24KICAgICBhcHBlbmRCb29sZWFuKGJ1aWxkZXIs
ICJoYWRVc2VySW50ZXJhY3Rpb24iLCBoYWRVc2VySW50ZXJhY3Rpb24pOwogICAgIGJ1aWxkZXIu
YXBwZW5kKCdcbicpOwpAQCAtMTg5LDYgKzIwMCw5IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljczo6bWVyZ2UoY29uc3QKIHsKICAgICBBU1NFUlQob3RoZXIuaGlnaExldmVsRG9tYWluID09
IGhpZ2hMZXZlbERvbWFpbik7CiAKKyAgICBpZiAobGFzdFNlZW4gPCBvdGhlci5sYXN0U2VlbikK
KyAgICAgICAgbGFzdFNlZW4gPSBvdGhlci5sYXN0U2VlbjsKKyAgICAKICAgICBpZiAoIW90aGVy
LmhhZFVzZXJJbnRlcmFjdGlvbikgewogICAgICAgICAvLyBJZiB1c2VyIGludGVyYWN0aW9uIGhh
cyBiZWVuIHJlc2V0IGRvIHNvIGhlcmUgdG9vLgogICAgICAgICAvLyBFbHNlLCBkbyBub3RoaW5n
LgpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cy5oCShyZXZpc2lvbiAyMTkzMTIpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VM
b2FkU3RhdGlzdGljcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSw4IEBAIHN0cnVjdCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzIHsKIAogICAgIFN0cmluZyBoaWdoTGV2ZWxEb21haW47CiAK
KyAgICBXYWxsVGltZSBsYXN0U2VlbjsKKyAgICAKICAgICAvLyBVc2VyIGludGVyYWN0aW9uCiAg
ICAgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb24geyBmYWxzZSB9OwogICAgIC8vIFRpbWVzdGFtcC4g
RGVmYXVsdCB2YWx1ZSBpcyBuZWdhdGl2ZSwgMCBtZWFucyBpdCB3YXMgcmVzZXQuCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMTkzMTIpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSw0OSBAQAorMjAxNy0wNy0xMCAgSm9obiBXaWxhbmRlciAg
PHdpbGFuZGVyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXNvdXJjZSBMb2FkIFN0YXRpc3RpY3M6
IFBydW5lIHN0YXRpc3RpY3MgaW4gb3JkZXJzIG9mIGltcG9ydGFuY2UKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDIxNQorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vMzMxNjQ0MDM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTmV3IGZ1bmN0aW9uYWxpdHkuIFBydW5lcyBzdGF0aXN0aWNzIGluIHRoaXMg
b3JkZXI6CisgICAgICAgIDEuIE5vbi1wcmV2YWxlbnQgcmVzb3VyY2VzIHdpdGhvdXQgdXNlciBp
bnRlcmFjdGlvbi4KKyAgICAgICAgMi4gUHJldmFsZW50IHJlc291cmNlcyB3aXRob3V0IHVzZXIg
aW50ZXJhY3Rpb24uCisgICAgICAgIDMuIE5vbi1wcmV2YWxlbnQgcmVzb3VyY2VzIHdpdGggdXNl
ciBpbnRlcmFjdGlvbi4KKyAgICAgICAgNC4gUHJldmFsZW50IHJlc291cmNlcyB3aXRoIHVzZXIg
aW50ZXJhY3Rpb24uCisKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNw
cDoKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPjo6
ZW5jb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzPjo6ZGVjb2RlKToKKyAgICAgICAgICAgIEFkZGVkIHRpbWVzdGFtcCBmaWVsZCBsYXN0U2Vl
bi4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbToK
KyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0
TGFzdFNlZW46Zm9ySG9zdDpdKToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU2V0TWF4U3RhdGlzdGljc0VudHJpZXM6XSk6CisgICAgICAgICgt
W1dLV2Vic2l0ZURhdGFTdG9yZSBfcmVzb3VyY2VMb2FkU3RhdGlzdGljc1NldFBydW5lRW50cmll
c0Rvd25UbzpdKToKKyAgICAgICAgKC1bV0tXZWJzaXRlRGF0YVN0b3JlIF9yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZV0pOgorICAgICAgICAgICAgVGVzdCBpbmZy
YXN0cnVjdHVyZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFT
dG9yZVByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvU3RvcmFnZS9SZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKToKKyAgICAgICAgICAgIFRlc3QgaW5m
cmFzdHJ1Y3R1cmUuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKToKKyAgICAgICAgICAgIFRlc3QgaW5mcmFzdHJ1Y3R1
cmUuCisgICAgICAgIChXZWJLaXQ6OnNvcnRBbmRQcnVuZSk6CisgICAgICAgICAgICBDb252ZW5p
ZW5jZSBmdW5jdGlvbi4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCk6CisgICAgICAgICAgICBUaGUgbmV3IHBydW5p
bmcgZnVuY3Rpb24uCisgICAgICAgICogVUlQcm9jZXNzL1N0b3JhZ2UvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlLmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6cHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3Jkcyk6CisgICAgICAgICAgICBO
b3cgY2FsbHMgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcnVuZVN0YXRpc3RpY3NJZk5l
ZWRlZCgpLgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OnNldExhc3RTZWVuKToKKyAgICAgICAgICAgIFRlc3QgaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAg
IChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0TWF4U3RhdGlzdGlj
c0VudHJpZXMpOgorICAgICAgICAgICAgVGVzdCBpbmZyYXN0cnVjdHVyZS4KKyAgICAgICAgKFdl
YktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRQcnVuZUVudHJpZXNEb3du
VG8pOgorICAgICAgICAgICAgVGVzdCBpbmZyYXN0cnVjdHVyZS4KKyAgICAgICAgKiBVSVByb2Nl
c3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmg6CisKIDIwMTctMDctMTAgIENocmlz
IER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBNZXJnZSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUgaW50byBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCShy
ZXZpc2lvbiAyMTkzMTIpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50
Q29kZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI0Miw2ICsyMjQyLDggQEAgdm9pZCBBcmd1
bWVudENvZGVyPFJlc291cmNlTG9hZFN0YXRpc3RpYwogewogICAgIGVuY29kZXIgPDwgc3RhdGlz
dGljcy5oaWdoTGV2ZWxEb21haW47CiAgICAgCisgICAgZW5jb2RlciA8PCBzdGF0aXN0aWNzLmxh
c3RTZWVuLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKTsKKyAgICAKICAgICAvLyBVc2VyIGlu
dGVyYWN0aW9uCiAgICAgZW5jb2RlciA8PCBzdGF0aXN0aWNzLmhhZFVzZXJJbnRlcmFjdGlvbjsK
ICAgICBlbmNvZGVyIDw8IHN0YXRpc3RpY3MubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUu
c2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpOwpAQCAtMjI2NCw2ICsyMjY2LDExIEBAIGJvb2wg
QXJndW1lbnRDb2RlcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWMKICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHN0YXRpc3RpY3MuaGlnaExldmVsRG9tYWluKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIAorICAgIGRvdWJsZSBsYXN0U2VlblRpbWVBc0RvdWJsZTsKKyAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKGxhc3RTZWVuVGltZUFzRG91YmxlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHN0YXRpc3RpY3MubGFzdFNlZW4gPSBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMobGFzdFNlZW5U
aW1lQXNEb3VibGUpOworICAgIAogICAgIC8vIFVzZXIgaW50ZXJhY3Rpb24KICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHN0YXRpc3RpY3MuaGFkVXNlckludGVyYWN0aW9uKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAJKHJldmlzaW9uIDIxOTMxMikK
KysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw4IEBAIG5hbWVzcGFjZSBXZWJLaXQg
ewogCiBjb25zdGV4cHIgU2Vjb25kcyBtaW5pbXVtU3RhdGlzdGljc0ZpbGVXcml0ZUludGVydmFs
IHsgNV9taW4gfTsKIGNvbnN0ZXhwciB1bnNpZ25lZCBvcGVyYXRpbmdEYXRlc1dpbmRvdyB7IDMw
IH07Ci1jb25zdGV4cHIgdW5zaWduZWQgc3RhdGlzdGljc01vZGVsVmVyc2lvbiB7IDYgfTsKK2Nv
bnN0ZXhwciB1bnNpZ25lZCBzdGF0aXN0aWNzTW9kZWxWZXJzaW9uIHsgNyB9OworY29uc3RleHBy
IHVuc2lnbmVkIG1heEltcG9ydGFuY2UgeyAzIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
YXRpYyBpbmxpbmUgU3RyaW5nIHByaW1hcnlEb21haW4oY29uc3QgVCYgdmFsdWUpCiB7CkBAIC0x
NDYsNiArMTQ3LDggQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnBybwog
ICAgICAgICB9CiAgICAgICAgIHJlbW92ZURhdGFSZWNvcmRzKCk7CiAgICAgICAgIAorICAgICAg
ICBwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCgpOworCiAgICAgICAgIGlmIChtX3Nob3VsZE5vdGlm
eVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQpIHsKICAgICAgICAgICAgIFJ1bkxvb3A6
Om1haW4oKS5kaXNwYXRjaChbXSB7CiAgICAgICAgICAgICAgICAgV2ViUHJvY2Vzc1Byb3h5Ojpu
b3RpZnlQYWdlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2VkKCk7CkBAIC01MDAsNiAr
NTAzLDE3IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpoYXMKICAgICB9
KTsKIH0KIAordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldExhc3RTZWVu
KGNvbnN0IFVSTCYgdXJsLCBTZWNvbmRzIHNlY29uZHMpCit7CisgICAgaWYgKHVybC5pc0JsYW5r
VVJMKCkgfHwgdXJsLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fc3Rh
dGlzdGljc1F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpLCB1cmwgPSB1cmwuaXNvbGF0ZWRDb3B5KCksIHNlY29uZHNdIHsKKyAgICAgICAgYXV0byYg
c3RhdGlzdGljcyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJp
bWFyeURvbWFpbih1cmwpKTsKKyAgICAgICAgc3RhdGlzdGljcy5sYXN0U2VlbiA9IFdhbGxUaW1l
Ojpmcm9tUmF3U2Vjb25kcyhzZWNvbmRzLnNlY29uZHMoKSk7CisgICAgfSk7Cit9CisgICAgCiB2
b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2Uo
Y29uc3QgVVJMJiB1cmwpCiB7CiAgICAgaWYgKHVybC5pc0JsYW5rVVJMKCkgfHwgdXJsLmlzRW1w
dHkoKSkKQEAgLTgzMyw3ICs4NDcsNyBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6dXBkCiAgICAgZm9yIChhdXRvJiBkb21haW4gOiBkb21haW5zVG9BZGQpCiAgICAgICAg
IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4oZG9tYWluKS5pc01hcmtl
ZEZvckNvb2tpZVBhcnRpdGlvbmluZyA9IHRydWU7CiB9Ci0KKyAgICAKIHZvaWQgV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcm9jZXNzU3RhdGlzdGljcyhjb25zdCBXVEY6OkZ1bmN0
aW9uPHZvaWQgKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmKT4mIHByb2Nlc3NGdW5jdGlv
bikgY29uc3QKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKQEAgLTkwNCw0ICs5
MTgsNjIgQEAgYm9vbCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmhhcwogICAgIHJl
dHVybiBmYWxzZTsKIH0KICAgICAKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpzZXRNYXhTdGF0aXN0aWNzRW50cmllcyhzaXplX3QgbWF4aW11bUVudHJ5Q291bnQpCit7Cisg
ICAgbV9tYXhTdGF0aXN0aWNzRW50cmllcyA9IG1heGltdW1FbnRyeUNvdW50OworfQorICAgIAor
dm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFBydW5lRW50cmllc0Rvd25U
byhzaXplX3QgcHJ1bmVUYXJnZXRDb3VudCkKK3sKKyAgICBtX3BydW5lRW50cmllc0Rvd25UbyA9
IHBydW5lVGFyZ2V0Q291bnQ7Cit9CisgICAgCitzdHJ1Y3QgU3RhdGlzdGljc0xhc3RTZWVuIHsK
KyAgICBTdHJpbmcgdG9wUHJpdmF0ZWx5T3duZWREb21haW47CisgICAgV2FsbFRpbWUgbGFzdFNl
ZW47Cit9OworICAgIAorc3RhdGljIHZvaWQgcHJ1bmVSZXNvdXJjZXMoSGFzaE1hcDxTdHJpbmcs
IFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M+JiBzdGF0aXN0aWNzTWFwLCBjb25zdCBW
ZWN0b3I8U3RhdGlzdGljc0xhc3RTZWVuPiYgc3RhdGlzdGljc1RvUHJ1bmUsIHNpemVfdCYgbnVt
YmVyT2ZFbnRyaWVzVG9QcnVuZSkKK3sKKyAgICBpZiAoc3RhdGlzdGljc1RvUHJ1bmUuc2l6ZSgp
ID4gbnVtYmVyT2ZFbnRyaWVzVG9QcnVuZSkgeworICAgICAgICBzdGQ6OnNvcnQoc3RhdGlzdGlj
c1RvUHJ1bmUuYmVnaW4oKSwgc3RhdGlzdGljc1RvUHJ1bmUuZW5kKCksIFtdKGNvbnN0IFN0YXRp
c3RpY3NMYXN0U2VlbiYgYSwgY29uc3QgU3RhdGlzdGljc0xhc3RTZWVuJiBiKSB7CisgICAgICAg
ICAgICByZXR1cm4gYS5sYXN0U2VlbiA8IGIubGFzdFNlZW47CisgICAgICAgIH0pOworICAgIH0K
KyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gMCwgZW5kID0gc3RkOjptaW4obnVtYmVyT2ZFbnRy
aWVzVG9QcnVuZSwgc3RhdGlzdGljc1RvUHJ1bmUuc2l6ZSgpKTsgaSAhPSBlbmQ7ICsraSkKKyAg
ICAgICAgc3RhdGlzdGljc01hcC5yZW1vdmUoc3RhdGlzdGljc1RvUHJ1bmVbaV0udG9wUHJpdmF0
ZWx5T3duZWREb21haW4pOworfQorICAgIAorc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVJbXBvcnRh
bmNlKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHJlc291cmNlU3RhdGlzdGljKQorewor
ICAgIHVuc2lnbmVkIGltcG9ydGFuY2UgPSBtYXhJbXBvcnRhbmNlOworICAgIGlmICghcmVzb3Vy
Y2VTdGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNvdXJjZSkKKyAgICAgICAgaW1wb3J0YW5jZSAtPSAx
OworICAgIGlmICghcmVzb3VyY2VTdGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uKQorICAgICAg
ICBpbXBvcnRhbmNlIC09IDI7CisgICAgcmV0dXJuIGltcG9ydGFuY2U7Cit9CisgICAgCit2b2lk
IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQo
KQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIGlmIChtX3Jlc291cmNl
U3RhdGlzdGljc01hcC5zaXplKCkgPD0gbV9tYXhTdGF0aXN0aWNzRW50cmllcykKKyAgICAgICAg
cmV0dXJuOworCisgICAgQVNTRVJUKHBydW5lVGFyZ2V0Q291bnQgPD0gbV9tYXhTdGF0aXN0aWNz
RW50cmllcyk7CisKKyAgICBzaXplX3QgbnVtYmVyT2ZFbnRyaWVzTGVmdFRvUHJ1bmUgPSBtX3Jl
c291cmNlU3RhdGlzdGljc01hcC5zaXplKCkgLSBtX3BydW5lRW50cmllc0Rvd25UbzsKKyAgICBB
U1NFUlQobnVtYmVyT2ZFbnRyaWVzTGVmdFRvUHJ1bmUpOworICAgIAorICAgIFZlY3RvcjxTdGF0
aXN0aWNzTGFzdFNlZW4+IHJlc291cmNlc1RvUHJ1bmVQZXJJbXBvcnRhbmNlW21heEltcG9ydGFu
Y2UgKyAxXTsKKyAgICBmb3IgKGF1dG8mIHJlc291cmNlU3RhdGlzdGljIDogbV9yZXNvdXJjZVN0
YXRpc3RpY3NNYXAudmFsdWVzKCkpCisgICAgICAgIHJlc291cmNlc1RvUHJ1bmVQZXJJbXBvcnRh
bmNlW2NvbXB1dGVJbXBvcnRhbmNlKHJlc291cmNlU3RhdGlzdGljKV0uYXBwZW5kKHsgcmVzb3Vy
Y2VTdGF0aXN0aWMuaGlnaExldmVsRG9tYWluLCByZXNvdXJjZVN0YXRpc3RpYy5sYXN0U2VlbiB9
KTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGltcG9ydGFuY2UgPSAwOyBudW1iZXJPZkVudHJp
ZXNMZWZ0VG9QcnVuZSAmJiBpbXBvcnRhbmNlIDw9IG1heEltcG9ydGFuY2U7ICsraW1wb3J0YW5j
ZSkKKyAgICAgICAgcHJ1bmVSZXNvdXJjZXMobV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAsIHJlc291
cmNlc1RvUHJ1bmVQZXJJbXBvcnRhbmNlW2ltcG9ydGFuY2VdLCBudW1iZXJPZkVudHJpZXNMZWZ0
VG9QcnVuZSk7CisKKyAgICBBU1NFUlQoIW51bWJlck9mRW50cmllc0xlZnRUb1BydW5lKTsKK30K
KyAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAkocmV2
aXNpb24gMjE5MzEyKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw2ICs3OSw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBXZWJDb3JlOjpVUkwmKTsKICAg
ICB2b2lkIGNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFdlYkNvcmU6OlVSTCYpOwogICAgIHZv
aWQgaGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFdlYkNvcmU6OlVSTCYsIFdURjo6RnVuY3Rp
b248dm9pZCAoYm9vbCk+JiYpOworICAgIHZvaWQgc2V0TGFzdFNlZW4oY29uc3QgV2ViQ29yZTo6
VVJMJiwgU2Vjb25kcyk7CiAgICAgdm9pZCBzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBXZWJD
b3JlOjpVUkwmKTsKICAgICB2b2lkIGlzUHJldmFsZW50UmVzb3VyY2UoY29uc3QgV2ViQ29yZTo6
VVJMJiwgV1RGOjpGdW5jdGlvbjx2b2lkIChib29sKT4mJik7CiAgICAgdm9pZCBjbGVhclByZXZh
bGVudFJlc291cmNlKGNvbnN0IFdlYkNvcmU6OlVSTCYpOwpAQCAtMTAwLDkgKzEwMSwxMiBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRUaW1lVG9MaXZlQ29va2llUGFydGl0aW9uRnJlZShTZWNvbmRz
KTsKICAgICB2b2lkIHNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChTZWNv
bmRzKTsKICAgICB2b2lkIHNldEdyYW5kZmF0aGVyaW5nVGltZShTZWNvbmRzKTsKLQorICAgIHZv
aWQgc2V0TWF4U3RhdGlzdGljc0VudHJpZXMoc2l6ZV90KTsKKyAgICB2b2lkIHNldFBydW5lRW50
cmllc0Rvd25UbyhzaXplX3QpOworICAgIAogICAgIHZvaWQgcHJvY2Vzc1N0YXRpc3RpY3MoY29u
c3QgV1RGOjpGdW5jdGlvbjx2b2lkIChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzJik+JikgY29uc3Q7Ci0KKyAgICB2b2lkIHBydW5lU3RhdGlzdGljc0lmTmVlZGVkKCk7Cisg
ICAgCiBwcml2YXRlOgogICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZShjb25zdCBT
dHJpbmcmLCBVcGRhdGVDb29raWVQYXJ0aXRpb25pbmdGb3JEb21haW5zSGFuZGxlciYmKTsKIApA
QCAtMTcyLDYgKzE3Niw4IEBAIHByaXZhdGU6CiAgICAgc3RkOjpvcHRpb25hbDxTZWNvbmRzPiBt
X3RpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb247CiAgICAgU2Vjb25kcyBtX3RpbWVUb0xpdmVDb29r
aWVQYXJ0aXRpb25GcmVlIHsgMjRfaCB9OwogICAgIFNlY29uZHMgbV9ncmFuZGZhdGhlcmluZ1Rp
bWUgeyAxX2ggfTsKKyAgICBzaXplX3QgbV9tYXhTdGF0aXN0aWNzRW50cmllcyB7IDEwMDAgfTsK
KyAgICBzaXplX3QgbV9wcnVuZUVudHJpZXNEb3duVG8geyA4MDAgfTsKICAgICBib29sIG1fZGF0
YVJlY29yZHNCZWluZ1JlbW92ZWQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9kaWRTY2hlZHVsZVdy
aXRlIHsgZmFsc2UgfTsKICAgICBib29sIG1fc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29y
ZHNXZXJlU2Nhbm5lZCB7IGZhbHNlIH07CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbQkocmV2aXNpb24g
MjE5MzEyKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVE
YXRhU3RvcmUubW0JKHdvcmtpbmcgY29weSkKQEAgLTIwNyw2ICsyMDcsMTUgQEAgLSAodm9pZClf
c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZQogICAgIF93ZWJzaXRlRGF0YVN0b3JlLT53
ZWJzaXRlRGF0YVN0b3JlKCkuc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoZW5hYmxl
ZCk7CiB9CiAKKy0gKHZvaWQpX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTZXRMYXN0U2VlbjooZG91
YmxlKXNlY29uZHMgZm9ySG9zdDooTlNTdHJpbmcgKilob3N0Cit7CisgICAgYXV0byogc3RvcmUg
PSBfd2Vic2l0ZURhdGFTdG9yZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnJlc291cmNlTG9hZFN0YXRp
c3RpY3MoKTsKKyAgICBpZiAoIXN0b3JlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgc3Rv
cmUtPnNldExhc3RTZWVuKFVSTChVUkwoKSwgaG9zdCksIFNlY29uZHMgeyBzZWNvbmRzIH0pOwor
fQorCiAtICh2b2lkKV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0SXNQcmV2YWxlbnRSZXNvdXJj
ZTooQk9PTCl2YWx1ZSBmb3JIb3N0OihOU1N0cmluZyAqKWhvc3QKIHsKICAgICBhdXRvKiBzdG9y
ZSA9IF93ZWJzaXRlRGF0YVN0b3JlLT53ZWJzaXRlRGF0YVN0b3JlKCkucmVzb3VyY2VMb2FkU3Rh
dGlzdGljcygpOwpAQCAtMzQ1LDYgKzM1NCwyNCBAQCAtICh2b2lkKV9yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU2V0R3JhbmRmCiAgICAgc3RvcmUtPnNldEdyYW5kZmF0aGVyaW5nVGltZShTZWNvbmRz
IHtzZWNvbmRzIH0pOwogfQogCistICh2b2lkKV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0TWF4
U3RhdGlzdGljc0VudHJpZXM6KHNpemVfdCllbnRyaWVzCit7CisgICAgYXV0byogc3RvcmUgPSBf
d2Vic2l0ZURhdGFTdG9yZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnJlc291cmNlTG9hZFN0YXRpc3Rp
Y3MoKTsKKyAgICBpZiAoIXN0b3JlKQorICAgICAgICByZXR1cm47CisKKyAgICBzdG9yZS0+c2V0
TWF4U3RhdGlzdGljc0VudHJpZXMoZW50cmllcyk7Cit9CisKKy0gKHZvaWQpX3Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NTZXRQcnVuZUVudHJpZXNEb3duVG86KHNpemVfdCllbnRyaWVzCit7CisgICAg
YXV0byogc3RvcmUgPSBfd2Vic2l0ZURhdGFTdG9yZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnJlc291
cmNlTG9hZFN0YXRpc3RpY3MoKTsKKyAgICBpZiAoIXN0b3JlKQorICAgICAgICByZXR1cm47CisK
KyAgICBzdG9yZS0+c2V0UHJ1bmVFbnRyaWVzRG93blRvKGVudHJpZXMpOworfQorCiAtICh2b2lk
KV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3Jkcwog
ewogICAgIGF1dG8qIHN0b3JlID0gX3dlYnNpdGVEYXRhU3RvcmUtPndlYnNpdGVEYXRhU3RvcmUo
KS5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCk7CkBAIC00NDEsNiArNDY4LDggQEAgLSAodm9pZClf
cmVzb3VyY2VMb2FkU3RhdGlzdGljc1Jlc2V0VG9DbwogICAgICAgICByZXR1cm47CiAKICAgICAv
LyBGSVhNRTogVGhlc2UgbmVlZHMgdG8gbWF0Y2ggdGhlIGRlZmF1bHQgZGF0YSBtZW1iZXIgdmFs
dWVzIGluIFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIHdoaWNoIGlzIGZyYWdpbGUuCisgICAgc3Rv
cmUtPnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKDEwMDApOworICAgIHN0b3JlLT5zZXRQcnVuZUVu
dHJpZXNEb3duVG8oODAwKTsKICAgICBzdG9yZS0+c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlv
bihzdGQ6Om51bGxvcHQpOwogICAgIHN0b3JlLT5zZXRUaW1lVG9MaXZlQ29va2llUGFydGl0aW9u
RnJlZSgyNF9oKTsKICAgICBzdG9yZS0+c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNS
ZW1vdmFsKDFfaCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
V2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaAkocmV2aXNpb24g
MjE5MzEyKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVE
YXRhU3RvcmVQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAgdHlwZWRl
ZiBOU19PUFRJT05TKE5TVUludGVnZXIsIF9XS1dlYnNpdAogQHByb3BlcnR5IChub25hdG9taWMs
IHNldHRlcj1fc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQ6KSBCT09MIF9yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCBXS19BUElfQVZBSUxBQkxFKG1hY29zeCgxMC4xMiksIGlv
cygxMC4wKSk7CiAKIC8vIFJlc291cmNlTG9hZFN0YXRpc3RpY3MgU1BJIGZvciB0ZXN0aW5nLgor
LSAodm9pZClfcmVzb3VyY2VMb2FkU3RhdGlzdGljc1NldExhc3RTZWVuOihkb3VibGUpc2Vjb25k
cyBmb3JIb3N0OihOU1N0cmluZyAqKWhvc3QgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFD
X1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAtICh2b2lkKV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U2V0SXNQcmV2YWxlbnRSZXNvdXJjZTooQk9PTCl2YWx1ZSBmb3JIb3N0OihOU1N0cmluZyAqKWhv
c3QgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7
CiAtICh2b2lkKV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzSXNQcmV2YWxlbnRSZXNvdXJjZTooTlNT
dHJpbmcgKilob3N0IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShCT09MKSljb21wbGV0aW9u
SGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zeChXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19U
QkEpKTsKIC0gKHZvaWQpX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTZXRIYWRVc2VySW50ZXJhY3Rp
b246KEJPT0wpdmFsdWUgZm9ySG9zdDooTlNTdHJpbmcgKilob3N0IFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwpAQCAtNTcsNiArNTgsOCBAQCB0
eXBlZGVmIE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dLV2Vic2l0CiAtICh2b2lkKV9yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU2V0VGltZVRvTGl2ZUNvb2tpZVBhcnRpdGlvbkZyZWU6KGRvdWJsZSlz
ZWNvbmRzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RC
QSkpOwogLSAodm9pZClfcmVzb3VyY2VMb2FkU3RhdGlzdGljc1NldE1pbmltdW1UaW1lQmV0d2Vl
bkRhdGFSZWNvcmRzUmVtb3ZhbDooZG91YmxlKXNlY29uZHMgV0tfQVBJX0FWQUlMQUJMRShtYWNv
c3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAtICh2b2lkKV9yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU2V0R3JhbmRmYXRoZXJpbmdUaW1lOihkb3VibGUpc2Vjb25kcyBXS19BUElfQVZB
SUxBQkxFKG1hY29zeChXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKy0gKHZvaWQpX3Jl
c291cmNlTG9hZFN0YXRpc3RpY3NTZXRNYXhTdGF0aXN0aWNzRW50cmllczooc2l6ZV90KWVudHJp
ZXMgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7
CistICh2b2lkKV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0UHJ1bmVFbnRyaWVzRG93blRvOihz
aXplX3QpZW50cmllcyBXS19BUElfQVZBSUxBQkxFKG1hY29zeChXS19NQUNfVEJBKSwgaW9zKFdL
X0lPU19UQkEpKTsKIC0gKHZvaWQpX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NQcm9jZXNzU3RhdGlz
dGljc0FuZERhdGFSZWNvcmRzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBp
b3MoV0tfSU9TX1RCQSkpOwogLSAodm9pZClfcmVzb3VyY2VMb2FkU3RhdGlzdGljc1VwZGF0ZUNv
b2tpZVBhcnRpdGlvbmluZyBXS19BUElfQVZBSUxBQkxFKG1hY29zeChXS19NQUNfVEJBKSwgaW9z
KFdLX0lPU19UQkEpKTsKIC0gKHZvaWQpX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTZXRTaG91bGRQ
YXJ0aXRpb25Db29raWVzOihCT09MKXZhbHVlIGZvckhvc3Q6KE5TU3RyaW5nICopaG9zdCBXS19B
UElfQVZBSUxBQkxFKG1hY29zeChXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKSW5kZXg6
IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDIxOTMxMikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0
IEBACisyMDE3LTA3LTEwICBKb2huIFdpbGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisg
ICAgICAgIFJlc291cmNlIExvYWQgU3RhdGlzdGljczogUHJ1bmUgc3RhdGlzdGljcyBpbiBvcmRl
cnMgb2YgaW1wb3J0YW5jZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTc0MjE1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMzE2NDQwMz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZXN0IGluZnJhc3Ry
dWN0dXJlLiBBZGRzIHRoZXNlIGZ1bmN0aW9uczoKKyAgICAgICAgMS4gdGVzdFJ1bm5lci5zZXRT
dGF0aXN0aWNzTGFzdFNlZW4oKQorICAgICAgICAyLiBzZXRTdGF0aXN0aWNzTWF4U3RhdGlzdGlj
c0VudHJpZXMoKQorICAgICAgICAzLiBzZXRTdGF0aXN0aWNzUHJ1bmVFbnRyaWVzRG93blRvKCkK
KworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVz
dFJ1bm5lci5pZGw6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9U
ZXN0UnVubmVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0xh
c3RTZWVuKToKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc01heFN0YXRp
c3RpY3NFbnRyaWVzKToKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1By
dW5lRW50cmllc0Rvd25Ubyk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9UZXN0UnVubmVyLmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJv
bGxlci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzTGFz
dFNlZW4pOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6c2V0TWF4U3RhdGlzdGljc0Vu
dHJpZXMpOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6c2V0UHJ1bmVFbnRyaWVzRG93
blRvKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmg6CisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHA6CisgICAgICAgIChXVFI6
OlRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVk
QnVuZGxlKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVy
Q29jb2EubW06CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzTGFz
dFNlZW4pOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc01heFN0
YXRpc3RpY3NFbnRyaWVzKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnNldFN0YXRp
c3RpY3NQcnVuZUVudHJpZXNEb3duVG8pOgorCiAyMDE3LTA3LTAzICBCcmlhbiBCdXJnICA8YmJ1
cmdAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBSZXBsYXk6IHJlbW92ZSBzb21lIHVudXNlZCBj
b2RlCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAkocmV2
aXNpb24gMjE5MzEyKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNDksNiArMjI0OSwxMCBAQCB2b2lkIFRlc3RDb250cm9s
bGVyOjpyZW1vdmVBbGxTZXNzaW9uQ3JlCiAKICNpZiAhUExBVEZPUk0oQ09DT0EpIHx8ICFXS19B
UElfRU5BQkxFRAogCit2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzTGFzdFNlZW4o
V0tTdHJpbmdSZWYsIGRvdWJsZSkKK3sKK30KKyAgICAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnNl
dFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShXS1N0cmluZ1JlZiwgYm9vbCkKIHsKIH0KQEAg
LTIzMzIsNiArMjMzNiwxNCBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzR3Jh
bmRmCiB7CiB9CiAKK3ZvaWQgVGVzdENvbnRyb2xsZXI6OnNldFN0YXRpc3RpY3NNYXhTdGF0aXN0
aWNzRW50cmllcyh1bnNpZ25lZCkKK3sKK30KKyAgICAKK3ZvaWQgVGVzdENvbnRyb2xsZXI6OnNl
dFN0YXRpc3RpY3NQcnVuZUVudHJpZXNEb3duVG8odW5zaWduZWQpCit7Cit9CisgICAgCiB2b2lk
IFRlc3RDb250cm9sbGVyOjpzdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9y
ZSgpCiB7CiB9CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCShy
ZXZpc2lvbiAyMTkzMTIpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MCw2ICsxNTAsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IHNldFNob3VsZERvd25sb2FkVW5kaXNwbGF5YWJsZU1JTUVUeXBlcyhib29sIHZhbHVlKSB7IG1f
c2hvdWxkRG93bmxvYWRVbmRpc3BsYXlhYmxlTUlNRVR5cGVzID0gdmFsdWU7IH0KIAorICAgIHZv
aWQgc2V0U3RhdGlzdGljc0xhc3RTZWVuKFdLU3RyaW5nUmVmIGhvc3ROYW1lLCBkb3VibGUgc2Vj
b25kcyk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoV0tTdHJpbmdS
ZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpOwogICAgIGJvb2wgaXNTdGF0aXN0aWNzUHJldmFsZW50
UmVzb3VyY2UoV0tTdHJpbmdSZWYgaG9zdE5hbWUpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc0hh
c0hhZFVzZXJJbnRlcmFjdGlvbihXS1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7CkBA
IC0xNzAsNiArMTcxLDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0U3RhdGlzdGljc05vdGlmeVBh
Z2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKGJvb2wgdmFsdWUpOwogICAgIHZvaWQgc2V0U3Rh
dGlzdGljc01pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChkb3VibGUpOwogICAg
IHZvaWQgc2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyaW5nVGltZShkb3VibGUgc2Vjb25kcyk7Cisg
ICAgdm9pZCBzZXRTdGF0aXN0aWNzTWF4U3RhdGlzdGljc0VudHJpZXModW5zaWduZWQpOworICAg
IHZvaWQgc2V0U3RhdGlzdGljc1BydW5lRW50cmllc0Rvd25Ubyh1bnNpZ25lZCk7CiAgICAgdm9p
ZCBzdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSgpOwogICAgIHZvaWQg
c3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmVNb2RpZmllZFNpbmNlSG91
cnModW5zaWduZWQpOwogICAgIHZvaWQgc3RhdGlzdGljc1Jlc2V0VG9Db25zaXN0ZW50U3RhdGUo
KTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCShyZXZp
c2lvbiAyMTkzMTIpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTEyLDYgKzkxMiwyMSBAQCBXS1JldGFpblB0cjxXS1R5cGVS
ZWY+IFRlc3RJbnZvY2F0aW9uOjpkCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCisg
ICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0
aXN0aWNzTGFzdFNlZW4iKSkgeworICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJv
ZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKKyAgICAgICAgCisgICAgICAgIFdLRGlj
dGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25h
cnlSZWY+KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhv
c3ROYW1lS2V5KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFt
ZSIpKTsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHZhbHVlS2V5KEFkb3B0V0ss
IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIpKTsKKyAgICAgICAgCisgICAg
ICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGlj
dGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZUtleS5n
ZXQoKSkpOworICAgICAgICBXS0RvdWJsZVJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLRG91Ymxl
UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdmFs
dWVLZXkuZ2V0KCkpKTsKKyAgICAgICAgCisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5zZXRTdGF0aXN0aWNzTGFzdFNlZW4oaG9zdE5hbWUsIFdLRG91YmxlR2V0VmFsdWUodmFs
dWUpKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICAKICAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRp
c3RpY3NQcmV2YWxlbnRSZXNvdXJjZSIpKSB7CiAgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRCht
ZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwogCkBAIC0xMTAxLDYgKzEx
MTYsMjAgQEAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0SW52b2NhdGlvbjo6ZAogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRNYXhTdGF0aXN0aWNzRW50cmllcyIpKSB7Cisg
ICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tVSW50NjRHZXRUeXBl
SUQoKSk7CisgICAgICAgIFdLVUludDY0UmVmIGVudHJpZXMgPSBzdGF0aWNfY2FzdDxXS1VJbnQ2
NFJlZj4obWVzc2FnZUJvZHkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
c2V0U3RhdGlzdGljc01heFN0YXRpc3RpY3NFbnRyaWVzKFdLVUludDY0R2V0VmFsdWUoZW50cmll
cykpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCisgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRQcnVuZUVudHJpZXNEb3du
VG8iKSkgeworICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLVUlu
dDY0R2V0VHlwZUlEKCkpOworICAgICAgICBXS1VJbnQ2NFJlZiBlbnRyaWVzID0gc3RhdGljX2Nh
c3Q8V0tVSW50NjRSZWY+KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLnNldFN0YXRpc3RpY3NQcnVuZUVudHJpZXNEb3duVG8oV0tVSW50NjRHZXRWYWx1
ZShlbnRyaWVzKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICAKICAgICBp
ZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlN0YXRpc3RpY3ND
bGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlIikpIHsKICAgICAgICAgVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLnN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3Jl
KCk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwCShyZXZpc2lvbiAyMTkz
MTIpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTc1LDYgKzExNzUsMzEgQEAgdm9pZCBUZXN0UnVubmVy
OjpjYWxsRGlkUmVtb3ZlU3dpcGVTbmFwcwogICAgIGNhbGxUZXN0UnVubmVyQ2FsbGJhY2soRGlk
UmVtb3ZlU3dpcGVTbmFwc2hvdENhbGxiYWNrSUQpOwogfQogCit2b2lkIFRlc3RSdW5uZXI6OnNl
dFN0YXRpc3RpY3NMYXN0U2VlbihKU1N0cmluZ1JlZiBob3N0TmFtZSwgZG91YmxlIHNlY29uZHMp
Cit7CisgICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKKyAgICBWZWN0
b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOworICAgIAorICAgIGtleXMuYXBwZW5k
KHsgQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikgfSk7
CisgICAgdmFsdWVzLmFwcGVuZCh7IEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5n
KGhvc3ROYW1lKSB9KTsKKyAgICAKKyAgICBrZXlzLmFwcGVuZCh7IEFkb3B0V0ssIFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIpIH0pOworICAgIHZhbHVlcy5hcHBlbmQoeyBB
ZG9wdFdLLCBXS0RvdWJsZUNyZWF0ZShzZWNvbmRzKSB9KTsKKyAgICAKKyAgICBWZWN0b3I8V0tT
dHJpbmdSZWY+IHJhd0tleXMoa2V5cy5zaXplKCkpOworICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJh
d1ZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGtleXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7
CisgICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKKyAgICB9CisgICAgCisg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzTGFzdFNlZW4iKSk7CisgICAgV0tS
ZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keShBZG9wdFdLLCBXS0RpY3Rpb25h
cnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgp
KSk7CisgICAgCisgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5
LmdldCgpLCBudWxscHRyKTsKK30KKyAgICAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGlj
c1ByZXZhbGVudFJlc291cmNlKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIHZhbHVlKQogewog
ICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7CkBAIC0xNDkxLDYgKzE1
MTYsMjAgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzR3JhbmRmYXRoZQogICAgIFdL
QnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
YnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7
CiB9CiAKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc01heFN0YXRpc3RpY3NFbnRyaWVz
KHVuc2lnbmVkIGVudHJpZXMpCit7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRNYXhTdGF0
aXN0aWNzRW50cmllcyIpKTsKKyAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IG1lc3NhZ2VCb2R5
KEFkb3B0V0ssIFdLVUludDY0Q3JlYXRlKGVudHJpZXMpKTsKKyAgICBXS0J1bmRsZVBvc3RTeW5j
aHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNz
YWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworfQorICAgIAordm9p
ZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzUHJ1bmVFbnRyaWVzRG93blRvKHVuc2lnbmVkIGVu
dHJpZXMpCit7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0
V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRQcnVuZUVudHJpZXNEb3duVG8i
KSk7CisgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBtZXNzYWdlQm9keShBZG9wdFdLLCBXS1VJ
bnQ2NENyZWF0ZShlbnRyaWVzKSk7CisgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdl
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKK30KKyAgICAKIHZvaWQgVGVzdFJ1bm5lcjo6
c3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUoKQogewogICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiU3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUi
KSk7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5u
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L1Rlc3RSdW5uZXIuaAkocmV2aXNpb24gMjE5MzEyKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1Nyw2ICsz
NTcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdGF0aXN0aWNzVXBkYXRlQ29va2llUGFydGl0aW9u
aW5nKCk7CiAgICAgdm9pZCBzdGF0aXN0aWNzU2V0U2hvdWxkUGFydGl0aW9uQ29va2llc0Zvckhv
c3QoSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpOwogICAgIHZvaWQgc3RhdGlzdGlj
c1N1Ym1pdFRlbGVtZXRyeSgpOworICAgIHZvaWQgc2V0U3RhdGlzdGljc0xhc3RTZWVuKEpTU3Ry
aW5nUmVmIGhvc3ROYW1lLCBkb3VibGUgc2Vjb25kcyk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNz
UHJldmFsZW50UmVzb3VyY2UoSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpOwogICAg
IGJvb2wgaXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoSlNTdHJpbmdSZWYgaG9zdE5hbWUp
OwogICAgIHZvaWQgc2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbihKU1N0cmluZ1Jl
ZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7CkBAIC0zNzMsNiArMzc0LDggQEAgcHVibGljOgogICAg
IHZvaWQgc2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKGJv
b2wgdmFsdWUpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlbkRhdGFS
ZWNvcmRzUmVtb3ZhbChkb3VibGUpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc0dyYW5kZmF0aGVy
aW5nVGltZShkb3VibGUgc2Vjb25kcyk7CisgICAgdm9pZCBzZXRTdGF0aXN0aWNzTWF4U3RhdGlz
dGljc0VudHJpZXModW5zaWduZWQpOworICAgIHZvaWQgc2V0U3RhdGlzdGljc1BydW5lRW50cmll
c0Rvd25Ubyh1bnNpZ25lZCk7CiAgICAgdm9pZCBzdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBl
cnNpc3RlbnRTdG9yZSgpOwogICAgIHZvaWQgc3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJz
aXN0ZW50U3RvcmVNb2RpZmllZFNpbmNlSG91cnModW5zaWduZWQgaG91cnMpOwogICAgIHZvaWQg
c3RhdGlzdGljc1Jlc2V0VG9Db25zaXN0ZW50U3RhdGUoKTsKSW5kZXg6IFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5pZGwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0
UnVubmVyLmlkbAkocmV2aXNpb24gMjE5MzEyKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbAkod29ya2luZyBjb3B5KQpAQCAt
MjU0LDYgKzI1NCw3IEBAIGludGVyZmFjZSBUZXN0UnVubmVyIHsKICAgICB2b2lkIGluc3RhbGxT
dGF0aXN0aWNzRGlkTW9kaWZ5RGF0YVJlY29yZHNDYWxsYmFjayhvYmplY3QgY2FsbGJhY2spOwog
ICAgIHZvaWQgaW5zdGFsbFN0YXRpc3RpY3NEaWRTY2FuRGF0YVJlY29yZHNDYWxsYmFjayhvYmpl
Y3QgY2FsbGJhY2spOwogICAgIHZvaWQgaW5zdGFsbFN0YXRpc3RpY3NEaWRSdW5UZWxlbWV0cnlD
YWxsYmFjayhvYmplY3QgY2FsbGJhY2spOworICAgIHZvaWQgc2V0U3RhdGlzdGljc0xhc3RTZWVu
KERPTVN0cmluZyBob3N0TmFtZSwgZG91YmxlIHNlY29uZHMpOwogICAgIHZvaWQgc2V0U3RhdGlz
dGljc1ByZXZhbGVudFJlc291cmNlKERPTVN0cmluZyBob3N0TmFtZSwgYm9vbGVhbiB2YWx1ZSk7
CiAgICAgYm9vbGVhbiBpc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShET01TdHJpbmcgaG9z
dE5hbWUpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbihET01T
dHJpbmcgaG9zdE5hbWUsIGJvb2xlYW4gdmFsdWUpOwpAQCAtMjc0LDYgKzI3NSw4IEBAIGludGVy
ZmFjZSBUZXN0UnVubmVyIHsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5U
ZWxlbWV0cnlXYXNDYXB0dXJlZChib29sZWFuIHZhbHVlKTsKICAgICB2b2lkIHNldFN0YXRpc3Rp
Y3NNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoZG91YmxlIHNlY29uZHMpOwog
ICAgIHZvaWQgc2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyaW5nVGltZShkb3VibGUgc2Vjb25kcyk7
CisgICAgdm9pZCBzZXRTdGF0aXN0aWNzTWF4U3RhdGlzdGljc0VudHJpZXModW5zaWduZWQgbG9u
ZyBlbnRyaWVzKTsKKyAgICB2b2lkIHNldFN0YXRpc3RpY3NQcnVuZUVudHJpZXNEb3duVG8odW5z
aWduZWQgbG9uZyBlbnRyaWVzKTsKICAgICB2b2lkIHN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5k
UGVyc2lzdGVudFN0b3JlKCk7CiAgICAgdm9pZCBzdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBl
cnNpc3RlbnRTdG9yZU1vZGlmaWVkU2luY2VIb3Vycyh1bnNpZ25lZCBsb25nIGhvdXJzKTsKICAg
ICB2b2lkIHN0YXRpc3RpY3NSZXNldFRvQ29uc2lzdGVudFN0YXRlKCk7CkluZGV4OiBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29jb2EubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0Q29udHJvbGxlckNvY29hLm1tCShy
ZXZpc2lvbiAyMTkzMTIpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250
cm9sbGVyQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTIyMiw2ICsyMjIsMTEgQEAgdm9pZCBU
ZXN0Q29udHJvbGxlcjo6cmVtb3ZlQWxsU2Vzc2lvbkNyZQogfQogCiAjaWYgV0tfQVBJX0VOQUJM
RUQKK3ZvaWQgVGVzdENvbnRyb2xsZXI6OnNldFN0YXRpc3RpY3NMYXN0U2VlbihXS1N0cmluZ1Jl
ZiBob3N0TmFtZSwgZG91YmxlIHNlY29uZHMpCit7CisgICAgW2dsb2JhbFdlYlZpZXdDb25maWd1
cmF0aW9uLndlYnNpdGVEYXRhU3RvcmUgX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTZXRMYXN0U2Vl
bjpzZWNvbmRzIGZvckhvc3Q6dG9OU1N0cmluZyhob3N0TmFtZSldOworfQorICAgIAogdm9pZCBU
ZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKFdLU3RyaW5nUmVm
IGhvc3ROYW1lLCBib29sIHZhbHVlKQogewogICAgIFtnbG9iYWxXZWJWaWV3Q29uZmlndXJhdGlv
bi53ZWJzaXRlRGF0YVN0b3JlIF9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0SXNQcmV2YWxlbnRS
ZXNvdXJjZTp2YWx1ZSBmb3JIb3N0OnRvTlNTdHJpbmcoaG9zdE5hbWUpXTsKQEAgLTM0Niw2ICsz
NTEsMTYgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc0dyYW5kZgogICAgIFtn
bG9iYWxXZWJWaWV3Q29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlIF9yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU2V0R3JhbmRmYXRoZXJpbmdUaW1lOnNlY29uZHNdOwogfQogCit2b2lkIFRlc3RD
b250cm9sbGVyOjpzZXRTdGF0aXN0aWNzTWF4U3RhdGlzdGljc0VudHJpZXModW5zaWduZWQgZW50
cmllcykKK3sKKyAgICBbZ2xvYmFsV2ViVmlld0NvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9y
ZSBfcmVzb3VyY2VMb2FkU3RhdGlzdGljc1NldE1heFN0YXRpc3RpY3NFbnRyaWVzOmVudHJpZXNd
OworfQorICAgIAordm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc1BydW5lRW50cmll
c0Rvd25Ubyh1bnNpZ25lZCBlbnRyaWVzKQoreworICAgIFtnbG9iYWxXZWJWaWV3Q29uZmlndXJh
dGlvbi53ZWJzaXRlRGF0YVN0b3JlIF9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0UHJ1bmVFbnRy
aWVzRG93blRvOmVudHJpZXNdOworfQorICAgIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6c3RhdGlz
dGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUoKQogewogICAgIFtnbG9iYWxXZWJW
aWV3Q29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlIF9yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
Q2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZV07CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMTkz
MTIpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
NyBAQAorMjAxNy0wNy0xMCAgSm9obiBXaWxhbmRlciAgPHdpbGFuZGVyQGFwcGxlLmNvbT4KKwor
ICAgICAgICBSZXNvdXJjZSBMb2FkIFN0YXRpc3RpY3M6IFBydW5lIHN0YXRpc3RpY3MgaW4gb3Jk
ZXJzIG9mIGltcG9ydGFuY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3NDIxNQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzMxNjQ0MDM+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBodHRwL3Rlc3Rz
L2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wcnVuZS1zdGF0aXN0aWNzLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0
YXRpc3RpY3MvcHJ1bmUtc3RhdGlzdGljcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS93azIvVGVzdEV4cGVjdGF0aW9uczoKKyAgICAgICAgICAgIEFkZGVkIGh0dHAvdGVzdHMvbG9h
ZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3BydW5lLXN0YXRpc3RpY3MuaHRtbCBhcworICAg
ICAgICAgICAgWyBQYXNzIF0gc2luY2UgUmVzb3VyY2UgTG9hZCBTdGF0aXN0aWNzIGlzIFdLMi1v
bmx5LgorCiAyMDE3LTA3LTEwICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAog
ICAgICAgICBVcGRhdGUgd2VicnRjIGV4cGVjdGF0aW9ucwpJbmRleDogTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcHJ1bmUtc3RhdGlzdGljcy1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5n
L3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcHJ1bmUtc3RhdGlzdGljcy1leHBlY3RlZC50eHQJKG5v
bmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9h
ZFN0YXRpc3RpY3MvcHJ1bmUtc3RhdGlzdGljcy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwyMyBAQAorbWFpbiBmcmFtZSAtIGRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9y
RnJhbWUKK21haW4gZnJhbWUgLSBkaWRDb21taXRMb2FkRm9yRnJhbWUKK21haW4gZnJhbWUgLSBk
aWRSZWNlaXZlVGl0bGU6IFRlc3QgZm9yIFJlc291cmNlIExvYWQgU3RhdGlzdGljcyBQcnVuaW5n
CittYWluIGZyYW1lIC0gZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWUKK21haW4gZnJhbWUg
LSBkaWRIYW5kbGVPbmxvYWRFdmVudHNGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRpZEZpbmlzaExv
YWRGb3JGcmFtZQorVGVzdHMgdGhhdCBzdGF0aXN0aWNzIGFyZSBwcnVuZWQgaW4gdGhlIHJpZ2h0
IG9yZGVyLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1l
c3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBUZXN0IGl0ZXJh
dGlvbiAxIHBhc3NlZC4KK1BBU1MgVGVzdCBpdGVyYXRpb24gMiBwYXNzZWQuCitQQVNTIFRlc3Qg
aXRlcmF0aW9uIDMgcGFzc2VkLgorUEFTUyBUZXN0IGl0ZXJhdGlvbiA0IHBhc3NlZC4KK1BBU1Mg
VGVzdCBpdGVyYXRpb24gNSBwYXNzZWQuCitQQVNTIFRlc3QgaXRlcmF0aW9uIDYgcGFzc2VkLgor
UEFTUyBUZXN0IGl0ZXJhdGlvbiA3IHBhc3NlZC4KK1BBU1MgVGVzdCBpdGVyYXRpb24gOCBwYXNz
ZWQuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJ
bmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3MvcHJ1bmUtc3RhdGlzdGljcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAv
dGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3BydW5lLXN0YXRpc3RpY3MuaHRt
bAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcy9wcnVuZS1zdGF0aXN0aWNzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMTkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8bWV0
YSBjaGFyc2V0PSJVVEYtOCI+CisgICAgPHRpdGxlPlRlc3QgZm9yIFJlc291cmNlIExvYWQgU3Rh
dGlzdGljcyBQcnVuaW5nPC90aXRsZT4KKyAgICA8c2NyaXB0IHNyYz0iL2pzLXRlc3QtcmVzb3Vy
Y2VzL2pzLXRlc3QuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorICAg
IGRlc2NyaXB0aW9uKCJUZXN0cyB0aGF0IHN0YXRpc3RpY3MgYXJlIHBydW5lZCBpbiB0aGUgcmln
aHQgb3JkZXIuIik7CisgICAganNUZXN0SXNBc3luYyA9IHRydWU7CisKKyAgICBjb25zdCBvbGRl
clRpbWVzdGFtcCA9IE1hdGgucm91bmQoKG5ldyBEYXRlKCkpLmdldFRpbWUoKSAvIDEwMDApOwor
ICAgIGNvbnN0IG5ld2VyVGltZXN0YW1wID0gb2xkZXJUaW1lc3RhbXAgKyAxMDsKKyAgICBjb25z
dCBuZXdlc3RUaW1lc3RhbXAgPSBuZXdlclRpbWVzdGFtcCArIDEwOworCisgICAgY29uc3QgdXJs
c1RvQmVQcnVuZWQgPSBbCisgICAgICAgIHsgdXJsOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwL3Rl
bXAiLCBwcmV2YWxlbnQ6IGZhbHNlIH0sCisgICAgICAgIHsgdXJsOiAiaHR0cDovLzEyNy4wLjAu
Mjo4MDAwL3RlbXAiLCBwcmV2YWxlbnQ6IGZhbHNlIH0sCisgICAgICAgIHsgdXJsOiAiaHR0cDov
LzEyNy4wLjAuMzo4MDAwL3RlbXAiLCBwcmV2YWxlbnQ6IHRydWUgfSwKKyAgICAgICAgeyB1cmw6
ICJodHRwOi8vMTI3LjAuMC40OjgwMDAvdGVtcCIsIHByZXZhbGVudDogdHJ1ZSB9LAorICAgICAg
ICB7IHVybDogImh0dHA6Ly8xMjcuMC4wLjU6ODAwMC90ZW1wIiwgcHJldmFsZW50OiBmYWxzZSB9
LAorICAgICAgICB7IHVybDogImh0dHA6Ly8xMjcuMC4wLjY6ODAwMC90ZW1wIiwgcHJldmFsZW50
OiBmYWxzZSB9LAorICAgICAgICB7IHVybDogImh0dHA6Ly8xMjcuMC4wLjc6ODAwMC90ZW1wIiwg
cHJldmFsZW50OiB0cnVlIH0sCisgICAgICAgIHsgdXJsOiAiaHR0cDovLzEyNy4wLjAuODo4MDAw
L3RlbXAiLCBwcmV2YWxlbnQ6IHRydWUgfQorICAgIF07CisKKyAgICBmdW5jdGlvbiBjaGVja0lm
UHJldmFsZW50QWNjb3JkaW5nVG9Jbml0aWFsRXhwZWN0YXRpb24oYmVnaW4sIGVuZCkgeworICAg
ICAgICB2YXIgZmFpbGVkID0gZmFsc2U7CisgICAgICAgIGZvciAodmFyIGkgPSBiZWdpbjsgaSA8
IGVuZDsgKytpKSB7CisgICAgICAgICAgICBpZiAodGVzdFJ1bm5lci5pc1N0YXRpc3RpY3NQcmV2
YWxlbnRSZXNvdXJjZSh1cmxzVG9CZVBydW5lZFtpXS51cmwpICE9PSB1cmxzVG9CZVBydW5lZFtp
XS5wcmV2YWxlbnQpIHsKKyAgICAgICAgICAgICAgICB0ZXN0RmFpbGVkKCJjaGVja0lmUHJldmFs
ZW50QWNjb3JkaW5nVG9Jbml0aWFsRXhwZWN0YXRpb246IFRlc3QgaXRlcmF0aW9uICIgKyBjdXJy
ZW50VGVzdCArICIgZmFpbGVkLiAiICsgdXJsc1RvQmVQcnVuZWRbaV0udXJsICsgKHVybHNUb0Jl
UHJ1bmVkW2ldLnByZXZhbGVudCA/ICIgd2Fzbid0ICIgOiAiIHdhcyAiKSArICJwcmV2YWxlbnQi
KTsKKyAgICAgICAgICAgICAgICBmYWlsZWQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGlmIChmYWlsZWQpCisgICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAg
ICB9CisKKyAgICBmdW5jdGlvbiBjaGVja0lmUHJldmFsZW50KGJlZ2luLCBlbmQsIGV4cGVjdGVk
KSB7CisgICAgICAgIHZhciBmYWlsZWQgPSBmYWxzZTsKKyAgICAgICAgZm9yICh2YXIgaSA9IGJl
Z2luOyBpIDwgZW5kOyArK2kpIHsKKyAgICAgICAgICAgIGlmICh0ZXN0UnVubmVyLmlzU3RhdGlz
dGljc1ByZXZhbGVudFJlc291cmNlKHVybHNUb0JlUHJ1bmVkW2ldLnVybCkgIT09IGV4cGVjdGVk
KSB7CisgICAgICAgICAgICAgICAgdGVzdEZhaWxlZCgiY2hlY2tJZlByZXZhbGVudDogVGVzdCBp
dGVyYXRpb24gIiArIGN1cnJlbnRUZXN0ICsgIiBmYWlsZWQuICIgKyB1cmxzVG9CZVBydW5lZFtp
XS51cmwgKyAoZXhwZWN0ZWQgPyAiIHdhc24ndCAiIDogIiB3YXMgIikgKyAicHJldmFsZW50Iik7
CisgICAgICAgICAgICAgICAgZmFpbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICBpZiAoZmFpbGVkKQorICAgICAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAg
fQorCisgICAgZnVuY3Rpb24gaW5pdGlhbGl6ZVN0YXRpc3RpY3MoKSB7CisgICAgICAgIHRlc3RS
dW5uZXIuaW5zdGFsbFN0YXRpc3RpY3NEaWRTY2FuRGF0YVJlY29yZHNDYWxsYmFjayhjaGVja1N0
YXRpc3RpY3NBZnRlclBydW5pbmcpOworCisgICAgICAgIC8vIE5vbi1wcmV2YWxlbnQgd2l0aG91
dCB1c2VyIGludGVyYWN0aW9uIHRvIGJlIHBydW5lZCBmaXJzdC4KKyAgICAgICAgdGVzdFJ1bm5l
ci5zZXRTdGF0aXN0aWNzTGFzdFNlZW4odXJsc1RvQmVQcnVuZWRbMF0udXJsLCBvbGRlclRpbWVz
dGFtcCk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc0xhc3RTZWVuKHVybHNUb0Jl
UHJ1bmVkWzFdLnVybCwgbmV3ZXJUaW1lc3RhbXApOworCisgICAgICAgIC8vIFByZXZhbGVudCB3
aXRob3V0IHVzZXIgaW50ZXJhY3Rpb24gdG8gYmUgcHJ1bmVkIHNlY29uZC4KKyAgICAgICAgdGVz
dFJ1bm5lci5zZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UodXJsc1RvQmVQcnVuZWRbMl0u
dXJsLCB0cnVlKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzTGFzdFNlZW4odXJs
c1RvQmVQcnVuZWRbMl0udXJsLCBvbGRlclRpbWVzdGFtcCk7CisgICAgICAgIHRlc3RSdW5uZXIu
c2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKHVybHNUb0JlUHJ1bmVkWzNdLnVybCwgdHJ1
ZSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc0xhc3RTZWVuKHVybHNUb0JlUHJ1
bmVkWzNdLnVybCwgbmV3ZXJUaW1lc3RhbXApOworCisgICAgICAgIC8vIE5vbi1wcmV2YWxlbnQg
d2l0aCB1c2VyIGludGVyYWN0aW9uIHRvIGJlIHBydW5lZCB0aGlyZC4KKyAgICAgICAgdGVzdFJ1
bm5lci5zZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKHVybHNUb0JlUHJ1bmVkWzRd
LnVybCwgdHJ1ZSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc0xhc3RTZWVuKHVy
bHNUb0JlUHJ1bmVkWzRdLnVybCwgb2xkZXJUaW1lc3RhbXApOworICAgICAgICB0ZXN0UnVubmVy
LnNldFN0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24odXJsc1RvQmVQcnVuZWRbNV0udXJs
LCB0cnVlKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzTGFzdFNlZW4odXJsc1Rv
QmVQcnVuZWRbNV0udXJsLCBuZXdlclRpbWVzdGFtcCk7CisKKyAgICAgICAgLy8gUHJldmFsZW50
IHdpdGggdXNlciBpbnRlcmFjdGlvbiB0byBiZSBwcnVuZWQgbGFzdC4KKyAgICAgICAgdGVzdFJ1
bm5lci5zZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UodXJsc1RvQmVQcnVuZWRbNl0udXJs
LCB0cnVlKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVy
YWN0aW9uKHVybHNUb0JlUHJ1bmVkWzZdLnVybCwgdHJ1ZSk7CisgICAgICAgIHRlc3RSdW5uZXIu
c2V0U3RhdGlzdGljc0xhc3RTZWVuKHVybHNUb0JlUHJ1bmVkWzZdLnVybCwgb2xkZXJUaW1lc3Rh
bXApOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZSh1
cmxzVG9CZVBydW5lZFs3XS51cmwsIHRydWUpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRp
c3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24odXJsc1RvQmVQcnVuZWRbN10udXJsLCB0cnVlKTsK
KyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzTGFzdFNlZW4odXJsc1RvQmVQcnVuZWRb
N10udXJsLCBuZXdlclRpbWVzdGFtcCk7CisKKyAgICAgICAgY2hlY2tJZlByZXZhbGVudEFjY29y
ZGluZ1RvSW5pdGlhbEV4cGVjdGF0aW9uKDAsIHVybHNUb0JlUHJ1bmVkLmxlbmd0aCk7CisgICAg
fQorCisgICAgdmFyIGN1cnJlbnRUZXN0OworICAgIGZ1bmN0aW9uIGNoZWNrU3RhdGlzdGljc0Fm
dGVyUHJ1bmluZygpIHsKKyAgICAgICAgLy8gUHJ1bmVkIGVudHJpZXMgc2hvdWxkIG5vdCBiZSBw
cmV2YWxlbnQuCisgICAgICAgIGNoZWNrSWZQcmV2YWxlbnQoMCwgY3VycmVudFRlc3QsIGZhbHNl
KTsKKyAgICAgICAgLy8gTm9uLXBydW5lZCBlbnRyaWVzIHNob3VsZCBrZWVwIHRoZWlyIGV4cGVj
dGVkIHN0YXR1cy4KKyAgICAgICAgY2hlY2tJZlByZXZhbGVudEFjY29yZGluZ1RvSW5pdGlhbEV4
cGVjdGF0aW9uKGN1cnJlbnRUZXN0LCB1cmxzVG9CZVBydW5lZC5sZW5ndGgpOworICAgICAgICB0
ZXN0UGFzc2VkKCJUZXN0IGl0ZXJhdGlvbiAiICsgY3VycmVudFRlc3QgKyAiIHBhc3NlZC4iKTsK
KyAgICAgICAgaWYgKGN1cnJlbnRUZXN0IDwgdXJsc1RvQmVQcnVuZWQubGVuZ3RoKSB7CisgICAg
ICAgICAgICArK2N1cnJlbnRUZXN0OworICAgICAgICAgICAgcnVuVGVzdCgpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBmdW5jdGlvbiBydW5UZXN0KCkgeworICAgICAgICBpbml0aWFsaXplU3RhdGlzdGljcygp
OworCisgICAgICAgIHZhciBmaWxsZXJVcmwgPSAiaHR0cDovLzEyNy4wLiIgKyBjdXJyZW50VGVz
dCArICIuMTo4MDAwL3RlbXAiOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NQcmV2
YWxlbnRSZXNvdXJjZShmaWxsZXJVcmwsIHRydWUpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0
YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24oZmlsbGVyVXJsLCB0cnVlKTsKKyAgICAgICAg
dGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzTGFzdFNlZW4oZmlsbGVyVXJsLCBuZXdlc3RUaW1lc3Rh
bXApOworICAgICAgICB0ZXN0UnVubmVyLnN0YXRpc3RpY3NQcm9jZXNzU3RhdGlzdGljc0FuZERh
dGFSZWNvcmRzKCk7CisgICAgfQorCisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAg
ICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1Nob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3Jl
RGF0YVJlY29yZHNSZW1vdmFsKGZhbHNlKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0
aWNzTWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKDApOworICAgICAgICB0ZXN0
UnVubmVyLnNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVk
KHRydWUpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NNYXhTdGF0aXN0aWNzRW50
cmllcyh1cmxzVG9CZVBydW5lZC5sZW5ndGgpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRp
c3RpY3NQcnVuZUVudHJpZXNEb3duVG8odXJsc1RvQmVQcnVuZWQubGVuZ3RoKTsKKworICAgICAg
ICBjdXJyZW50VGVzdCA9IDE7CisgICAgICAgIHJ1blRlc3QoKTsKKyAgICB9Cis8L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS93azIvVGVzdEV4cGVjdGF0aW9ucwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS93azIvVGVzdEV4cGVjdGF0aW9ucwkocmV2aXNpb24gMjE5MzEyKQor
KysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2syL1Rlc3RFeHBlY3RhdGlvbnMJKHdvcmtpbmcgY29w
eSkKQEAgLTcwNiw2ICs3MDYsNyBAQCBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3Rh
dGlzdGljCiBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9jbGVhci1p
bi1tZW1vcnktYW5kLXBlcnNpc3RlbnQtc3RvcmUuaHRtbCBbIFBhc3MgXQogd2Via2l0Lm9yZy9i
LzE3MjQ1MiBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9ncmFuZGZh
dGhlcmluZy5odG1sIFsgUGFzcyBGYWlsdXJlIFRpbWVvdXQgXQogd2Via2l0Lm9yZy9iLzE3MzQ5
OSBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy90ZWxlbWV0cnktZ2Vu
ZXJhdGlvbi5odG1sIFsgUGFzcyBGYWlsdXJlIF0KK2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzL3BydW5lLXN0YXRpc3RpY3MuaHRtbCBbIFBhc3MgXQogCiAjIyMgRU5E
IE9GICg1KSBQcm9ncmVzc2lvbnMsIGV4cGVjdGVkIHN1Y2Nlc3NlcyB0aGF0IGFyZSBleHBlY3Rl
ZCBmYWlsdXJlcyBpbiBXZWJLaXQxLgogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>315048</attachid>
            <date>2017-07-10 17:01:22 -0700</date>
            <delta_ts>2017-07-10 17:25:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174215-20170710170121.patch</filename>
            <type>text/plain</type>
            <size>42871</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxOTMxNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDE3LTA3LTEwICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIExvYWQgU3Rh
dGlzdGljczogUHJ1bmUgc3RhdGlzdGljcyBpbiBvcmRlcnMgb2YgaW1wb3J0YW5jZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0MjE1CisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS8zMzE2NDQwMz4KKworICAgICAgICBSZXZpZXdlZCBieSBDaHJpcyBE
dW1lei4KKworICAgICAgICBUZXN0OiBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3Rh
dGlzdGljcy9wcnVuZS1zdGF0aXN0aWNzLmh0bWwKKworICAgICAgICAqIGxvYWRlci9SZXNvdXJj
ZUxvYWRPYnNlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZWR1Y2VUaW1lUmVzb2x1dGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nRnJhbWVOYXZp
Z2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dTdWJy
ZXNvdXJjZUxvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OmxvZ1dlYlNvY2tldExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OmxvZ1VzZXJJbnRlcmFjdGlvbldpdGhSZWR1Y2VkVGltZVJlc29sdXRpb24pOgorICAg
ICAgICAgICAgTm93IGFsbCBzZXQgdGhlIG5ldyBzdGF0aXN0aWNzIGZpZWxkIGxhc3RTZWVuLgor
ICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M6OmVuY29kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljczo6dG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljczo6bWVyZ2UpOgorICAgICAgICAgICAgSGFuZGxpbmcgb2YgdGhlIG5l
dyBzdGF0aXN0aWNzIGZpZWxkIGxhc3RTZWVuLgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzLmg6CisKIDIwMTctMDctMTAgIEphdmllciBGZXJuYW5kZXogIDxqZmVybmFu
ZGV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgW2Nzcy1hbGlnbl1bY3NzLWZsZXhdW2Nzcy1ncmlk
XSAnYXV0bycgdmFsdWVzIG9mIGFsaWduLXNlbGYgYW5kIGp1c3RpZnktc2VsZiBtdXN0IG5vdCBi
ZSByZXNvbHZlZApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2Vy
dmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXIuY3BwCShyZXZpc2lvbiAyMTkzMTUpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
UmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Miw2ICs5MiwxMSBA
QCBib29sIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaG91bGRMb2coUGFnCiAgICAgcmV0dXJuIFNl
dHRpbmdzOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpICYmICFwYWdlLT51c2VzRXBo
ZW1lcmFsU2Vzc2lvbigpICYmIG1fbm90aWZpY2F0aW9uQ2FsbGJhY2s7CiB9CiAKK3N0YXRpYyBX
YWxsVGltZSByZWR1Y2VUb0hvdXJseVRpbWVSZXNvbHV0aW9uKFdhbGxUaW1lIHRpbWUpCit7Cisg
ICAgcmV0dXJuIFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhzdGQ6OmZsb29yKHRpbWUuc2Vjb25k
c1NpbmNlRXBvY2goKSAvIHRpbWVzdGFtcFJlc29sdXRpb24pICogdGltZXN0YW1wUmVzb2x1dGlv
bi5zZWNvbmRzKCkpOworfQorCiB2b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dGcmFtZU5h
dmlnYXRpb24oY29uc3QgRnJhbWUmIGZyYW1lLCBjb25zdCBGcmFtZSYgdG9wRnJhbWUsIGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgbmV3UmVxdWVzdCkKIHsKICAgICBBU1NFUlQoZnJhbWUuZG9jdW1l
bnQoKSk7CkBAIC0xMjUsNiArMTMwLDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9n
RnJhbWVOYXZpZwogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvJiB0YXJnZXRTdGF0aXN0aWNz
ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbih0YXJnZXRQcmltYXJ5
RG9tYWluKTsKKyAgICB0YXJnZXRTdGF0aXN0aWNzLmxhc3RTZWVuID0gcmVkdWNlVG9Ib3VybHlU
aW1lUmVzb2x1dGlvbihXYWxsVGltZTo6bm93KCkpOwogICAgIGF1dG8gc3ViZnJhbWVVbmRlclRv
cEZyYW1lT3JpZ2luc1Jlc3VsdCA9IHRhcmdldFN0YXRpc3RpY3Muc3ViZnJhbWVVbmRlclRvcEZy
YW1lT3JpZ2lucy5hZGQobWFpbkZyYW1lUHJpbWFyeURvbWFpbik7CiAgICAgaWYgKHN1YmZyYW1l
VW5kZXJUb3BGcmFtZU9yaWdpbnNSZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgc2NoZWR1bGVO
b3RpZmljYXRpb25JZk5lZWRlZCgpOwpAQCAtMTU4LDYgKzE2NCw3IEBAIHZvaWQgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OmxvZ1N1YnJlc291cmMKICAgICBib29sIHNob3VsZENhbGxOb3RpZmljYXRp
b25DYWxsYmFjayA9IGZhbHNlOwogICAgIHsKICAgICAgICAgYXV0byYgdGFyZ2V0U3RhdGlzdGlj
cyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4odGFyZ2V0UHJpbWFy
eURvbWFpbik7CisgICAgICAgIHRhcmdldFN0YXRpc3RpY3MubGFzdFNlZW4gPSByZWR1Y2VUb0hv
dXJseVRpbWVSZXNvbHV0aW9uKFdhbGxUaW1lOjpub3coKSk7CiAgICAgICAgIGlmICh0YXJnZXRT
dGF0aXN0aWNzLnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMuYWRkKG1haW5GcmFtZVBy
aW1hcnlEb21haW4pLmlzTmV3RW50cnkpCiAgICAgICAgICAgICBzaG91bGRDYWxsTm90aWZpY2F0
aW9uQ2FsbGJhY2sgPSB0cnVlOwogICAgIH0KQEAgLTE5NywxNSArMjA0LDExIEBAIHZvaWQgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1dlYlNvY2tldEwKICAgICAgICAgcmV0dXJuOwogCiAgICAg
YXV0byYgdGFyZ2V0U3RhdGlzdGljcyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1h
cnlEb21haW4odGFyZ2V0UHJpbWFyeURvbWFpbik7CisgICAgdGFyZ2V0U3RhdGlzdGljcy5sYXN0
U2VlbiA9IHJlZHVjZVRvSG91cmx5VGltZVJlc29sdXRpb24oV2FsbFRpbWU6Om5vdygpKTsKICAg
ICBpZiAodGFyZ2V0U3RhdGlzdGljcy5zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zLmFk
ZChtYWluRnJhbWVQcmltYXJ5RG9tYWluKS5pc05ld0VudHJ5KQogICAgICAgICBzY2hlZHVsZU5v
dGlmaWNhdGlvbklmTmVlZGVkKCk7CiB9CiAKLXN0YXRpYyBXYWxsVGltZSByZWR1Y2VUaW1lUmVz
b2x1dGlvbihXYWxsVGltZSB0aW1lKQotewotICAgIHJldHVybiBXYWxsVGltZTo6ZnJvbVJhd1Nl
Y29uZHMoc3RkOjpmbG9vcih0aW1lLnNlY29uZHNTaW5jZUVwb2NoKCkgLyB0aW1lc3RhbXBSZXNv
bHV0aW9uKSAqIHRpbWVzdGFtcFJlc29sdXRpb24uc2Vjb25kcygpKTsKLX0KLQogdm9pZCBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6bG9nVXNlckludGVyYWN0aW9uV2l0aFJlZHVjZWRUaW1lUmVzb2x1
dGlvbihjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQpCiB7CiAgICAgQVNTRVJUKGRvY3VtZW50LnBh
Z2UoKSk7CkBAIC0yMTgsMTEgKzIyMSwxMiBAQCB2b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjps
b2dVc2VySW50ZXJhCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBl
bnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1hcnlEb21haW4odXJs
KSk7Ci0gICAgYXV0byBuZXdUaW1lID0gcmVkdWNlVGltZVJlc29sdXRpb24oV2FsbFRpbWU6Om5v
dygpKTsKKyAgICBhdXRvIG5ld1RpbWUgPSByZWR1Y2VUb0hvdXJseVRpbWVSZXNvbHV0aW9uKFdh
bGxUaW1lOjpub3coKSk7CiAgICAgaWYgKG5ld1RpbWUgPT0gc3RhdGlzdGljcy5tb3N0UmVjZW50
VXNlckludGVyYWN0aW9uVGltZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc3RhdGlzdGljcy5o
YWRVc2VySW50ZXJhY3Rpb24gPSB0cnVlOworICAgIHN0YXRpc3RpY3MubGFzdFNlZW4gPSBuZXdU
aW1lOwogICAgIHN0YXRpc3RpY3MubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgPSBuZXdU
aW1lOwogCiAgICAgc2NoZWR1bGVOb3RpZmljYXRpb25JZk5lZWRlZCgpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmNwcAkocmV2aXNp
b24gMjE5MzE1KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw4IEBAIHZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljczo6ZW5jb2RlKEtleWUKIHsKICAgICBlbmNvZGVyLmVuY29kZVN0cmluZygiUHJl
dmFsZW50UmVzb3VyY2VPcmlnaW4iLCBoaWdoTGV2ZWxEb21haW4pOwogICAgIAorICAgIGVuY29k
ZXIuZW5jb2RlRG91YmxlKCJsYXN0U2VlbiIsIGxhc3RTZWVuLnNlY29uZHNTaW5jZUVwb2NoKCku
dmFsdWUoKSk7CisgICAgCiAgICAgLy8gVXNlciBpbnRlcmFjdGlvbgogICAgIGVuY29kZXIuZW5j
b2RlQm9vbCgiaGFkVXNlckludGVyYWN0aW9uIiwgaGFkVXNlckludGVyYWN0aW9uKTsKICAgICBl
bmNvZGVyLmVuY29kZURvdWJsZSgibW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiIsIG1vc3RSZWNl
bnRVc2VySW50ZXJhY3Rpb25UaW1lLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSk7CkBAIC0x
MTQsNiArMTE2LDExIEBAIGJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6ZGVjb2RlKEtleWUK
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlQm9vbCgiZ3JhbmRmYXRoZXJlZCIsIGdyYW5kZmF0aGVy
ZWQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBkb3VibGUgbGFzdFNlZW5UaW1lQXNE
b3VibGU7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZURvdWJsZSgibGFzdFNlZW4iLCBsYXN0U2Vl
blRpbWVBc0RvdWJsZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBsYXN0U2VlbiA9IFdh
bGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhsYXN0U2VlblRpbWVBc0RvdWJsZSk7CisgICAgCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKQEAgLTE0Nyw2ICsxNTQsMTAgQEAgU3RyaW5nIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3M6OnRvU3RyaW5nKAogewogICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKICAg
ICAKKyAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoImxhc3RTZWVuIik7CisgICAgYnVpbGRlci5h
cHBlbmROdW1iZXIobGFzdFNlZW4uc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKTsKKyAgICBi
dWlsZGVyLmFwcGVuZCgnXG4nKTsKKyAgICAKICAgICAvLyBVc2VyIGludGVyYWN0aW9uCiAgICAg
YXBwZW5kQm9vbGVhbihidWlsZGVyLCAiaGFkVXNlckludGVyYWN0aW9uIiwgaGFkVXNlckludGVy
YWN0aW9uKTsKICAgICBidWlsZGVyLmFwcGVuZCgnXG4nKTsKQEAgLTE4OSw2ICsyMDAsOSBAQCB2
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3M6Om1lcmdlKGNvbnN0CiB7CiAgICAgQVNTRVJUKG90
aGVyLmhpZ2hMZXZlbERvbWFpbiA9PSBoaWdoTGV2ZWxEb21haW4pOwogCisgICAgaWYgKGxhc3RT
ZWVuIDwgb3RoZXIubGFzdFNlZW4pCisgICAgICAgIGxhc3RTZWVuID0gb3RoZXIubGFzdFNlZW47
CisgICAgCiAgICAgaWYgKCFvdGhlci5oYWRVc2VySW50ZXJhY3Rpb24pIHsKICAgICAgICAgLy8g
SWYgdXNlciBpbnRlcmFjdGlvbiBoYXMgYmVlbiByZXNldCBkbyBzbyBoZXJlIHRvby4KICAgICAg
ICAgLy8gRWxzZSwgZG8gbm90aGluZy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNv
dXJjZUxvYWRTdGF0aXN0aWNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVy
L1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuaAkocmV2aXNpb24gMjE5MzE1KQorKysgU291cmNlL1dl
YkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuaAkod29ya2luZyBjb3B5KQpAQCAt
NjEsNiArNjEsOCBAQCBzdHJ1Y3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyB7CiAKICAgICBTdHJp
bmcgaGlnaExldmVsRG9tYWluOwogCisgICAgV2FsbFRpbWUgbGFzdFNlZW47CisgICAgCiAgICAg
Ly8gVXNlciBpbnRlcmFjdGlvbgogICAgIGJvb2wgaGFkVXNlckludGVyYWN0aW9uIHsgZmFsc2Ug
fTsKICAgICAvLyBUaW1lc3RhbXAuIERlZmF1bHQgdmFsdWUgaXMgbmVnYXRpdmUsIDAgbWVhbnMg
aXQgd2FzIHJlc2V0LgpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMjE5MzE1KQorKysgU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDkgQEAKKzIwMTct
MDctMTAgIEpvaG4gV2lsYW5kZXIgIDx3aWxhbmRlckBhcHBsZS5jb20+CisKKyAgICAgICAgUmVz
b3VyY2UgTG9hZCBTdGF0aXN0aWNzOiBQcnVuZSBzdGF0aXN0aWNzIGluIG9yZGVycyBvZiBpbXBv
cnRhbmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NzQyMTUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMzMTY0NDAzPgorCisgICAgICAgIFJldmll
d2VkIGJ5IENocmlzIER1bWV6LgorCisgICAgICAgIE5ldyBmdW5jdGlvbmFsaXR5LiBQcnVuZXMg
c3RhdGlzdGljcyBpbiB0aGlzIG9yZGVyOgorICAgICAgICAxLiBOb24tcHJldmFsZW50IHJlc291
cmNlcyB3aXRob3V0IHVzZXIgaW50ZXJhY3Rpb24uCisgICAgICAgIDIuIFByZXZhbGVudCByZXNv
dXJjZXMgd2l0aG91dCB1c2VyIGludGVyYWN0aW9uLgorICAgICAgICAzLiBOb24tcHJldmFsZW50
IHJlc291cmNlcyB3aXRoIHVzZXIgaW50ZXJhY3Rpb24uCisgICAgICAgIDQuIFByZXZhbGVudCBy
ZXNvdXJjZXMgd2l0aCB1c2VyIGludGVyYWN0aW9uLgorCisgICAgICAgICogU2hhcmVkL1dlYkNv
cmVBcmd1bWVudENvZGVycy5jcHA6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcz46OmVuY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8
UmVzb3VyY2VMb2FkU3RhdGlzdGljcz46OmRlY29kZSk6CisgICAgICAgICAgICBBZGRlZCB0aW1l
c3RhbXAgZmllbGQgbGFzdFNlZW4uCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YnNpdGVEYXRhU3RvcmUubW06CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFTdG9yZSBfcmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1NldExhc3RTZWVuOmZvckhvc3Q6XSk6CisgICAgICAgICgtW1dLV2Vi
c2l0ZURhdGFTdG9yZSBfcmVzb3VyY2VMb2FkU3RhdGlzdGljc1NldE1heFN0YXRpc3RpY3NFbnRy
aWVzOl0pOgorICAgICAgICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX3Jlc291cmNlTG9hZFN0YXRp
c3RpY3NTZXRQcnVuZUVudHJpZXNEb3duVG86XSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFT
dG9yZSBfcmVzb3VyY2VMb2FkU3RhdGlzdGljc1Jlc2V0VG9Db25zaXN0ZW50U3RhdGVdKToKKyAg
ICAgICAgICAgIFRlc3QgaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL1N0
b3JhZ2UvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRNYXhTdGF0aXN0aWNzRW50cmllcyk6Cisg
ICAgICAgICAgICBUZXN0IGluZnJhc3RydWN0dXJlLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFBydW5lRW50cmllc0Rvd25Ubyk6CisgICAgICAgICAg
ICBUZXN0IGluZnJhc3RydWN0dXJlLgorICAgICAgICAoV2ViS2l0Ojpzb3J0QW5kUHJ1bmUpOgor
ICAgICAgICAgICAgQ29udmVuaWVuY2UgZnVuY3Rpb24uCisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQpOgorICAgICAg
ICAgICAgVGhlIG5ldyBwcnVuaW5nIGZ1bmN0aW9uLgorICAgICAgICAqIFVJUHJvY2Vzcy9TdG9y
YWdlL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29y
ZHMpOgorICAgICAgICAgICAgTm93IGNhbGxzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
cHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQoKS4KKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpzZXRMYXN0U2Vlbik6CisgICAgICAgICAgICBUZXN0IGluZnJh
c3RydWN0dXJlLgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKToKKyAgICAgICAgICAgIFRlc3QgaW5mcmFzdHJ1
Y3R1cmUuCisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
c2V0UHJ1bmVFbnRyaWVzRG93blRvKToKKyAgICAgICAgICAgIFRlc3QgaW5mcmFzdHJ1Y3R1cmUu
CisgICAgICAgICogVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oOgor
CiAyMDE3LTA3LTEwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAg
W2lPU10gX2RpZENvbW1pdExheWVyVHJlZSBzaG91bGQgYXZvaWQgY2FsbGluZyBbc2Nyb2xsVmll
dyBzZXRab29tU2NhbGVdIHVubmVjZXNzYXJpbHkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCShyZXZpc2lvbiAyMTkzMTUpCisrKyBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjI0Miw2ICsyMjQyLDggQEAgdm9pZCBBcmd1bWVudENvZGVyPFJlc291cmNlTG9h
ZFN0YXRpc3RpYwogewogICAgIGVuY29kZXIgPDwgc3RhdGlzdGljcy5oaWdoTGV2ZWxEb21haW47
CiAgICAgCisgICAgZW5jb2RlciA8PCBzdGF0aXN0aWNzLmxhc3RTZWVuLnNlY29uZHNTaW5jZUVw
b2NoKCkudmFsdWUoKTsKKyAgICAKICAgICAvLyBVc2VyIGludGVyYWN0aW9uCiAgICAgZW5jb2Rl
ciA8PCBzdGF0aXN0aWNzLmhhZFVzZXJJbnRlcmFjdGlvbjsKICAgICBlbmNvZGVyIDw8IHN0YXRp
c3RpY3MubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS52
YWx1ZSgpOwpAQCAtMjI2NCw2ICsyMjY2LDExIEBAIGJvb2wgQXJndW1lbnRDb2RlcjxSZXNvdXJj
ZUxvYWRTdGF0aXN0aWMKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0YXRpc3RpY3MuaGlnaExl
dmVsRG9tYWluKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAorICAgIGRvdWJsZSBsYXN0
U2VlblRpbWVBc0RvdWJsZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGxhc3RTZWVuVGltZUFz
RG91YmxlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHN0YXRpc3RpY3MubGFzdFNlZW4g
PSBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMobGFzdFNlZW5UaW1lQXNEb3VibGUpOworICAgIAog
ICAgIC8vIFVzZXIgaW50ZXJhY3Rpb24KICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0YXRpc3Rp
Y3MuaGFkVXNlckludGVyYWN0aW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5jcHAJKHJldmlzaW9uIDIxOTMxNSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01MCw3ICs1MCw4IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjb25zdGV4cHIgU2Vjb25k
cyBtaW5pbXVtU3RhdGlzdGljc0ZpbGVXcml0ZUludGVydmFsIHsgNV9taW4gfTsKIGNvbnN0ZXhw
ciB1bnNpZ25lZCBvcGVyYXRpbmdEYXRlc1dpbmRvdyB7IDMwIH07Ci1jb25zdGV4cHIgdW5zaWdu
ZWQgc3RhdGlzdGljc01vZGVsVmVyc2lvbiB7IDYgfTsKK2NvbnN0ZXhwciB1bnNpZ25lZCBzdGF0
aXN0aWNzTW9kZWxWZXJzaW9uIHsgNyB9OworY29uc3RleHByIHVuc2lnbmVkIG1heEltcG9ydGFu
Y2UgeyAzIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBpbmxpbmUgU3RyaW5nIHBy
aW1hcnlEb21haW4oY29uc3QgVCYgdmFsdWUpCiB7CkBAIC0xNDYsNiArMTQ3LDggQEAgdm9pZCBX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnBybwogICAgICAgICB9CiAgICAgICAgIHJl
bW92ZURhdGFSZWNvcmRzKCk7CiAgICAgICAgIAorICAgICAgICBwcnVuZVN0YXRpc3RpY3NJZk5l
ZWRlZCgpOworCiAgICAgICAgIGlmIChtX3Nob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRz
V2VyZVNjYW5uZWQpIHsKICAgICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbXSB7
CiAgICAgICAgICAgICAgICAgV2ViUHJvY2Vzc1Byb3h5Ojpub3RpZnlQYWdlU3RhdGlzdGljc0Fu
ZERhdGFSZWNvcmRzUHJvY2Vzc2VkKCk7CkBAIC01MDAsNiArNTAzLDE3IEBAIHZvaWQgV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpoYXMKICAgICB9KTsKIH0KIAordm9pZCBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldExhc3RTZWVuKGNvbnN0IFVSTCYgdXJsLCBTZWNv
bmRzIHNlY29uZHMpCit7CisgICAgaWYgKHVybC5pc0JsYW5rVVJMKCkgfHwgdXJsLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fc3RhdGlzdGljc1F1ZXVlLT5kaXNwYXRj
aChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCB1cmwgPSB1cmwuaXNvbGF0
ZWRDb3B5KCksIHNlY29uZHNdIHsKKyAgICAgICAgYXV0byYgc3RhdGlzdGljcyA9IGVuc3VyZVJl
c291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJpbWFyeURvbWFpbih1cmwpKTsKKyAg
ICAgICAgc3RhdGlzdGljcy5sYXN0U2VlbiA9IFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhzZWNv
bmRzLnNlY29uZHMoKSk7CisgICAgfSk7Cit9CisgICAgCiB2b2lkIFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwpCiB7CiAg
ICAgaWYgKHVybC5pc0JsYW5rVVJMKCkgfHwgdXJsLmlzRW1wdHkoKSkKQEAgLTgzMyw3ICs4NDcs
NyBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6dXBkCiAgICAgZm9yIChh
dXRvJiBkb21haW4gOiBkb21haW5zVG9BZGQpCiAgICAgICAgIGVuc3VyZVJlc291cmNlU3RhdGlz
dGljc0ZvclByaW1hcnlEb21haW4oZG9tYWluKS5pc01hcmtlZEZvckNvb2tpZVBhcnRpdGlvbmlu
ZyA9IHRydWU7CiB9Ci0KKyAgICAKIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
Ojpwcm9jZXNzU3RhdGlzdGljcyhjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQgKGNvbnN0IFJlc291
cmNlTG9hZFN0YXRpc3RpY3MmKT4mIHByb2Nlc3NGdW5jdGlvbikgY29uc3QKIHsKICAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKQEAgLTkwNCw0ICs5MTgsNjIgQEAgYm9vbCBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmhhcwogICAgIHJldHVybiBmYWxzZTsKIH0KICAgICAK
K3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRNYXhTdGF0aXN0aWNzRW50
cmllcyhzaXplX3QgbWF4aW11bUVudHJ5Q291bnQpCit7CisgICAgbV9tYXhTdGF0aXN0aWNzRW50
cmllcyA9IG1heGltdW1FbnRyeUNvdW50OworfQorICAgIAordm9pZCBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnNldFBydW5lRW50cmllc0Rvd25UbyhzaXplX3QgcHJ1bmVUYXJnZXRD
b3VudCkKK3sKKyAgICBtX3BydW5lRW50cmllc0Rvd25UbyA9IHBydW5lVGFyZ2V0Q291bnQ7Cit9
CisgICAgCitzdHJ1Y3QgU3RhdGlzdGljc0xhc3RTZWVuIHsKKyAgICBTdHJpbmcgdG9wUHJpdmF0
ZWx5T3duZWREb21haW47CisgICAgV2FsbFRpbWUgbGFzdFNlZW47Cit9OworICAgIAorc3RhdGlj
IHZvaWQgcHJ1bmVSZXNvdXJjZXMoSGFzaE1hcDxTdHJpbmcsIFdlYkNvcmU6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3M+JiBzdGF0aXN0aWNzTWFwLCBjb25zdCBWZWN0b3I8U3RhdGlzdGljc0xhc3RT
ZWVuPiYgc3RhdGlzdGljc1RvUHJ1bmUsIHNpemVfdCYgbnVtYmVyT2ZFbnRyaWVzVG9QcnVuZSkK
K3sKKyAgICBpZiAoc3RhdGlzdGljc1RvUHJ1bmUuc2l6ZSgpID4gbnVtYmVyT2ZFbnRyaWVzVG9Q
cnVuZSkgeworICAgICAgICBzdGQ6OnNvcnQoc3RhdGlzdGljc1RvUHJ1bmUuYmVnaW4oKSwgc3Rh
dGlzdGljc1RvUHJ1bmUuZW5kKCksIFtdKGNvbnN0IFN0YXRpc3RpY3NMYXN0U2VlbiYgYSwgY29u
c3QgU3RhdGlzdGljc0xhc3RTZWVuJiBiKSB7CisgICAgICAgICAgICByZXR1cm4gYS5sYXN0U2Vl
biA8IGIubGFzdFNlZW47CisgICAgICAgIH0pOworICAgIH0KKyAgICAKKyAgICBmb3IgKHNpemVf
dCBpID0gMCwgZW5kID0gc3RkOjptaW4obnVtYmVyT2ZFbnRyaWVzVG9QcnVuZSwgc3RhdGlzdGlj
c1RvUHJ1bmUuc2l6ZSgpKTsgaSAhPSBlbmQ7ICsraSkKKyAgICAgICAgc3RhdGlzdGljc01hcC5y
ZW1vdmUoc3RhdGlzdGljc1RvUHJ1bmVbaV0udG9wUHJpdmF0ZWx5T3duZWREb21haW4pOworfQor
ICAgIAorc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVJbXBvcnRhbmNlKGNvbnN0IFJlc291cmNlTG9h
ZFN0YXRpc3RpY3MmIHJlc291cmNlU3RhdGlzdGljKQoreworICAgIHVuc2lnbmVkIGltcG9ydGFu
Y2UgPSBtYXhJbXBvcnRhbmNlOworICAgIGlmICghcmVzb3VyY2VTdGF0aXN0aWMuaXNQcmV2YWxl
bnRSZXNvdXJjZSkKKyAgICAgICAgaW1wb3J0YW5jZSAtPSAxOworICAgIGlmICghcmVzb3VyY2VT
dGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uKQorICAgICAgICBpbXBvcnRhbmNlIC09IDI7Cisg
ICAgcmV0dXJuIGltcG9ydGFuY2U7Cit9CisgICAgCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6cHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQoKQoreworICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOworICAgIGlmIChtX3Jlc291cmNlU3RhdGlzdGljc01hcC5zaXplKCkg
PD0gbV9tYXhTdGF0aXN0aWNzRW50cmllcykKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJU
KG1fcHJ1bmVFbnRyaWVzRG93blRvIDw9IG1fbWF4U3RhdGlzdGljc0VudHJpZXMpOworCisgICAg
c2l6ZV90IG51bWJlck9mRW50cmllc0xlZnRUb1BydW5lID0gbV9yZXNvdXJjZVN0YXRpc3RpY3NN
YXAuc2l6ZSgpIC0gbV9wcnVuZUVudHJpZXNEb3duVG87CisgICAgQVNTRVJUKG51bWJlck9mRW50
cmllc0xlZnRUb1BydW5lKTsKKyAgICAKKyAgICBWZWN0b3I8U3RhdGlzdGljc0xhc3RTZWVuPiBy
ZXNvdXJjZXNUb1BydW5lUGVySW1wb3J0YW5jZVttYXhJbXBvcnRhbmNlICsgMV07CisgICAgZm9y
IChhdXRvJiByZXNvdXJjZVN0YXRpc3RpYyA6IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnZhbHVl
cygpKQorICAgICAgICByZXNvdXJjZXNUb1BydW5lUGVySW1wb3J0YW5jZVtjb21wdXRlSW1wb3J0
YW5jZShyZXNvdXJjZVN0YXRpc3RpYyldLmFwcGVuZCh7IHJlc291cmNlU3RhdGlzdGljLmhpZ2hM
ZXZlbERvbWFpbiwgcmVzb3VyY2VTdGF0aXN0aWMubGFzdFNlZW4gfSk7CisgICAgCisgICAgZm9y
ICh1bnNpZ25lZCBpbXBvcnRhbmNlID0gMDsgbnVtYmVyT2ZFbnRyaWVzTGVmdFRvUHJ1bmUgJiYg
aW1wb3J0YW5jZSA8PSBtYXhJbXBvcnRhbmNlOyArK2ltcG9ydGFuY2UpCisgICAgICAgIHBydW5l
UmVzb3VyY2VzKG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLCByZXNvdXJjZXNUb1BydW5lUGVySW1w
b3J0YW5jZVtpbXBvcnRhbmNlXSwgbnVtYmVyT2ZFbnRyaWVzTGVmdFRvUHJ1bmUpOworCisgICAg
QVNTRVJUKCFudW1iZXJPZkVudHJpZXNMZWZ0VG9QcnVuZSk7Cit9CisgICAgCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgJKHJldmlzaW9uIDIxOTMxNSkKKysr
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUu
aAkod29ya2luZyBjb3B5KQpAQCAtNzksNiArNzksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBsb2dV
c2VySW50ZXJhY3Rpb24oY29uc3QgV2ViQ29yZTo6VVJMJik7CiAgICAgdm9pZCBjbGVhclVzZXJJ
bnRlcmFjdGlvbihjb25zdCBXZWJDb3JlOjpVUkwmKTsKICAgICB2b2lkIGhhc0hhZFVzZXJJbnRl
cmFjdGlvbihjb25zdCBXZWJDb3JlOjpVUkwmLCBXVEY6OkZ1bmN0aW9uPHZvaWQgKGJvb2wpPiYm
KTsKKyAgICB2b2lkIHNldExhc3RTZWVuKGNvbnN0IFdlYkNvcmU6OlVSTCYsIFNlY29uZHMpOwog
ICAgIHZvaWQgc2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgV2ViQ29yZTo6VVJMJik7CiAgICAg
dm9pZCBpc1ByZXZhbGVudFJlc291cmNlKGNvbnN0IFdlYkNvcmU6OlVSTCYsIFdURjo6RnVuY3Rp
b248dm9pZCAoYm9vbCk+JiYpOwogICAgIHZvaWQgY2xlYXJQcmV2YWxlbnRSZXNvdXJjZShjb25z
dCBXZWJDb3JlOjpVUkwmKTsKQEAgLTEwMCw5ICsxMDEsMTIgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0VGltZVRvTGl2ZUNvb2tpZVBhcnRpdGlvbkZyZWUoU2Vjb25kcyk7CiAgICAgdm9pZCBzZXRN
aW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoU2Vjb25kcyk7CiAgICAgdm9pZCBz
ZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyk7Ci0KKyAgICB2b2lkIHNldE1heFN0YXRpc3Rp
Y3NFbnRyaWVzKHNpemVfdCk7CisgICAgdm9pZCBzZXRQcnVuZUVudHJpZXNEb3duVG8oc2l6ZV90
KTsKKyAgICAKICAgICB2b2lkIHByb2Nlc3NTdGF0aXN0aWNzKGNvbnN0IFdURjo6RnVuY3Rpb248
dm9pZCAoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpPiYpIGNvbnN0Owot
CisgICAgdm9pZCBwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCgpOworICAgIAogcHJpdmF0ZToKICAg
ICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoY29uc3QgU3RyaW5nJiwgVXBkYXRlQ29v
a2llUGFydGl0aW9uaW5nRm9yRG9tYWluc0hhbmRsZXImJik7CiAKQEAgLTE3Miw2ICsxNzYsOCBA
QCBwcml2YXRlOgogICAgIHN0ZDo6b3B0aW9uYWw8U2Vjb25kcz4gbV90aW1lVG9MaXZlVXNlcklu
dGVyYWN0aW9uOwogICAgIFNlY29uZHMgbV90aW1lVG9MaXZlQ29va2llUGFydGl0aW9uRnJlZSB7
IDI0X2ggfTsKICAgICBTZWNvbmRzIG1fZ3JhbmRmYXRoZXJpbmdUaW1lIHsgMV9oIH07CisgICAg
c2l6ZV90IG1fbWF4U3RhdGlzdGljc0VudHJpZXMgeyAxMDAwIH07CisgICAgc2l6ZV90IG1fcHJ1
bmVFbnRyaWVzRG93blRvIHsgODAwIH07CiAgICAgYm9vbCBtX2RhdGFSZWNvcmRzQmVpbmdSZW1v
dmVkIHsgZmFsc2UgfTsKICAgICBib29sIG1fZGlkU2NoZWR1bGVXcml0ZSB7IGZhbHNlIH07CiAg
ICAgYm9vbCBtX3Nob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQgeyBm
YWxzZSB9OwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNp
dGVEYXRhU3RvcmUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0JKHJldmlzaW9uIDIxOTMxNSkKKysrIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMDcsNiArMjA3LDE1IEBAIC0gKHZvaWQpX3NldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NFbmFibGUKICAgICBfd2Vic2l0ZURhdGFTdG9yZS0+d2Vic2l0ZURhdGFTdG9yZSgp
LnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGVuYWJsZWQpOwogfQogCistICh2b2lk
KV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0TGFzdFNlZW46KGRvdWJsZSlzZWNvbmRzIGZvckhv
c3Q6KE5TU3RyaW5nICopaG9zdAoreworICAgIGF1dG8qIHN0b3JlID0gX3dlYnNpdGVEYXRhU3Rv
cmUtPndlYnNpdGVEYXRhU3RvcmUoKS5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCk7CisgICAgaWYg
KCFzdG9yZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHN0b3JlLT5zZXRMYXN0U2VlbihV
UkwoVVJMKCksIGhvc3QpLCBTZWNvbmRzIHsgc2Vjb25kcyB9KTsKK30KKwogLSAodm9pZClfcmVz
b3VyY2VMb2FkU3RhdGlzdGljc1NldElzUHJldmFsZW50UmVzb3VyY2U6KEJPT0wpdmFsdWUgZm9y
SG9zdDooTlNTdHJpbmcgKilob3N0CiB7CiAgICAgYXV0byogc3RvcmUgPSBfd2Vic2l0ZURhdGFT
dG9yZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnJlc291cmNlTG9hZFN0YXRpc3RpY3MoKTsKQEAgLTM0
NSw2ICszNTQsMjQgQEAgLSAodm9pZClfcmVzb3VyY2VMb2FkU3RhdGlzdGljc1NldEdyYW5kZgog
ICAgIHN0b3JlLT5zZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyB7c2Vjb25kcyB9KTsKIH0K
IAorLSAodm9pZClfcmVzb3VyY2VMb2FkU3RhdGlzdGljc1NldE1heFN0YXRpc3RpY3NFbnRyaWVz
OihzaXplX3QpZW50cmllcworeworICAgIGF1dG8qIHN0b3JlID0gX3dlYnNpdGVEYXRhU3RvcmUt
PndlYnNpdGVEYXRhU3RvcmUoKS5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCk7CisgICAgaWYgKCFz
dG9yZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RvcmUtPnNldE1heFN0YXRpc3RpY3NFbnRy
aWVzKGVudHJpZXMpOworfQorCistICh2b2lkKV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0UHJ1
bmVFbnRyaWVzRG93blRvOihzaXplX3QpZW50cmllcworeworICAgIGF1dG8qIHN0b3JlID0gX3dl
YnNpdGVEYXRhU3RvcmUtPndlYnNpdGVEYXRhU3RvcmUoKS5yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
KCk7CisgICAgaWYgKCFzdG9yZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RvcmUtPnNldFBy
dW5lRW50cmllc0Rvd25UbyhlbnRyaWVzKTsKK30KKwogLSAodm9pZClfcmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1Byb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMKIHsKICAgICBhdXRvKiBzdG9y
ZSA9IF93ZWJzaXRlRGF0YVN0b3JlLT53ZWJzaXRlRGF0YVN0b3JlKCkucmVzb3VyY2VMb2FkU3Rh
dGlzdGljcygpOwpAQCAtNDQxLDYgKzQ2OCw4IEBAIC0gKHZvaWQpX3Jlc291cmNlTG9hZFN0YXRp
c3RpY3NSZXNldFRvQ28KICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IFRoZXNlIG5l
ZWRzIHRvIG1hdGNoIHRoZSBkZWZhdWx0IGRhdGEgbWVtYmVyIHZhbHVlcyBpbiBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzLCB3aGljaCBpcyBmcmFnaWxlLgorICAgIHN0b3JlLT5zZXRNYXhTdGF0aXN0
aWNzRW50cmllcygxMDAwKTsKKyAgICBzdG9yZS0+c2V0UHJ1bmVFbnRyaWVzRG93blRvKDgwMCk7
CiAgICAgc3RvcmUtPnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oc3RkOjpudWxsb3B0KTsK
ICAgICBzdG9yZS0+c2V0VGltZVRvTGl2ZUNvb2tpZVBhcnRpdGlvbkZyZWUoMjRfaCk7CiAgICAg
c3RvcmUtPnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCgxX2gpOwpJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQ
cml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgJKHJldmlzaW9uIDIxOTMxNSkKKysrIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3IEBAIHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJ
bnRlZ2VyLCBfV0tXZWJzaXQKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldFJlc291
cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkOikgQk9PTCBfcmVzb3VyY2VMb2FkU3RhdGlzdGljc0Vu
YWJsZWQgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goMTAuMTIpLCBpb3MoMTAuMCkpOwogCiAvLyBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzIFNQSSBmb3IgdGVzdGluZy4KKy0gKHZvaWQpX3Jlc291cmNl
TG9hZFN0YXRpc3RpY3NTZXRMYXN0U2VlbjooZG91YmxlKXNlY29uZHMgZm9ySG9zdDooTlNTdHJp
bmcgKilob3N0IFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9T
X1RCQSkpOwogLSAodm9pZClfcmVzb3VyY2VMb2FkU3RhdGlzdGljc1NldElzUHJldmFsZW50UmVz
b3VyY2U6KEJPT0wpdmFsdWUgZm9ySG9zdDooTlNTdHJpbmcgKilob3N0IFdLX0FQSV9BVkFJTEFC
TEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogLSAodm9pZClfcmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0lzUHJldmFsZW50UmVzb3VyY2U6KE5TU3RyaW5nICopaG9zdCBjb21w
bGV0aW9uSGFuZGxlcjoodm9pZCAoXikoQk9PTCkpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FW
QUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAtICh2b2lkKV9y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0SGFkVXNlckludGVyYWN0aW9uOihCT09MKXZhbHVlIGZv
ckhvc3Q6KE5TU3RyaW5nICopaG9zdCBXS19BUElfQVZBSUxBQkxFKG1hY29zeChXS19NQUNfVEJB
KSwgaW9zKFdLX0lPU19UQkEpKTsKQEAgLTU3LDYgKzU4LDggQEAgdHlwZWRlZiBOU19PUFRJT05T
KE5TVUludGVnZXIsIF9XS1dlYnNpdAogLSAodm9pZClfcmVzb3VyY2VMb2FkU3RhdGlzdGljc1Nl
dFRpbWVUb0xpdmVDb29raWVQYXJ0aXRpb25GcmVlOihkb3VibGUpc2Vjb25kcyBXS19BUElfQVZB
SUxBQkxFKG1hY29zeChXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKIC0gKHZvaWQpX3Jl
c291cmNlTG9hZFN0YXRpc3RpY3NTZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92
YWw6KGRvdWJsZSlzZWNvbmRzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBp
b3MoV0tfSU9TX1RCQSkpOwogLSAodm9pZClfcmVzb3VyY2VMb2FkU3RhdGlzdGljc1NldEdyYW5k
ZmF0aGVyaW5nVGltZTooZG91YmxlKXNlY29uZHMgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tf
TUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CistICh2b2lkKV9yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU2V0TWF4U3RhdGlzdGljc0VudHJpZXM6KHNpemVfdCllbnRyaWVzIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworLSAodm9pZClfcmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1NldFBydW5lRW50cmllc0Rvd25Ubzooc2l6ZV90KWVudHJpZXMgV0tf
QVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAtICh2
b2lkKV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzUHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3Jk
cyBXS19BUElfQVZBSUxBQkxFKG1hY29zeChXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsK
IC0gKHZvaWQpX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NVcGRhdGVDb29raWVQYXJ0aXRpb25pbmcg
V0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAt
ICh2b2lkKV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0U2hvdWxkUGFydGl0aW9uQ29va2llczoo
Qk9PTCl2YWx1ZSBmb3JIb3N0OihOU1N0cmluZyAqKWhvc3QgV0tfQVBJX0FWQUlMQUJMRShtYWNv
c3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CkluZGV4OiBUb29scy9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMTkzMTUpCisrKyBUb29s
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNCBAQAorMjAxNy0wNy0xMCAg
Sm9obiBXaWxhbmRlciAgPHdpbGFuZGVyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXNvdXJjZSBM
b2FkIFN0YXRpc3RpY3M6IFBydW5lIHN0YXRpc3RpY3MgaW4gb3JkZXJzIG9mIGltcG9ydGFuY2UK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDIxNQor
ICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzMxNjQ0MDM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Q2hyaXMgRHVtZXouCisKKyAgICAgICAgTmVzdCBpbmZyYXN0cnVjdHVyZS4gQWRkcyB0aGVzZSBm
dW5jdGlvbnM6CisgICAgICAgIDEuIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc0xhc3RTZWVuKCkK
KyAgICAgICAgMi4gc2V0U3RhdGlzdGljc01heFN0YXRpc3RpY3NFbnRyaWVzKCkKKyAgICAgICAg
My4gc2V0U3RhdGlzdGljc1BydW5lRW50cmllc0Rvd25UbygpCisKKyAgICAgICAgKiBXZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsOgorICAgICAg
ICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHA6CisgICAg
ICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NMYXN0U2Vlbik6CisgICAgICAgIChX
VFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NNYXhTdGF0aXN0aWNzRW50cmllcyk6CisgICAg
ICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NQcnVuZUVudHJpZXNEb3duVG8pOgor
ICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oOgor
ICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAo
V1RSOjpUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc0xhc3RTZWVuKToKKyAgICAgICAgKFdU
Ujo6VGVzdENvbnRyb2xsZXI6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKToKKyAgICAgICAgKFdU
Ujo6VGVzdENvbnRyb2xsZXI6OnNldFBydW5lRW50cmllc0Rvd25Ubyk6CisgICAgICAgICogV2Vi
S2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5u
ZXIvVGVzdEludm9jYXRpb24uY3BwOgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlk
UmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZSk6CisgICAgICAgICog
V2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0Q29udHJvbGxlckNvY29hLm1tOgorICAgICAgICAo
V1RSOjpUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc0xhc3RTZWVuKToKKyAgICAgICAgKFdU
Ujo6VGVzdENvbnRyb2xsZXI6OnNldFN0YXRpc3RpY3NNYXhTdGF0aXN0aWNzRW50cmllcyk6Cisg
ICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzUHJ1bmVFbnRyaWVzRG93
blRvKToKKwogMjAxNy0wNy0wMyAgQnJpYW4gQnVyZyAgPGJidXJnQGFwcGxlLmNvbT4KIAogICAg
ICAgICBXZWIgUmVwbGF5OiByZW1vdmUgc29tZSB1bnVzZWQgY29kZQpJbmRleDogVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDIxOTMxNSkKKysrIFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMjQ5LDYgKzIyNDksMTAgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cmVtb3ZlQWxsU2Vzc2lv
bkNyZQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKSB8fCAhV0tfQVBJX0VOQUJMRUQKIAordm9pZCBU
ZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc0xhc3RTZWVuKFdLU3RyaW5nUmVmLCBkb3VibGUp
Cit7Cit9CisgICAgCiB2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzUHJldmFsZW50
UmVzb3VyY2UoV0tTdHJpbmdSZWYsIGJvb2wpCiB7CiB9CkBAIC0yMzMyLDYgKzIzMzYsMTQgQEAg
dm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc0dyYW5kZgogewogfQogCit2b2lkIFRl
c3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzTWF4U3RhdGlzdGljc0VudHJpZXModW5zaWduZWQp
Cit7Cit9CisgICAgCit2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzUHJ1bmVFbnRy
aWVzRG93blRvKHVuc2lnbmVkKQoreworfQorICAgIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6c3Rh
dGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUoKQogewogfQpJbmRleDogVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAkocmV2aXNpb24gMjE5MzE1KQorKysg
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTAsNiArMTUwLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRTaG91bGREb3dubG9hZFVu
ZGlzcGxheWFibGVNSU1FVHlwZXMoYm9vbCB2YWx1ZSkgeyBtX3Nob3VsZERvd25sb2FkVW5kaXNw
bGF5YWJsZU1JTUVUeXBlcyA9IHZhbHVlOyB9CiAKKyAgICB2b2lkIHNldFN0YXRpc3RpY3NMYXN0
U2VlbihXS1N0cmluZ1JlZiBob3N0TmFtZSwgZG91YmxlIHNlY29uZHMpOwogICAgIHZvaWQgc2V0
U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKFdLU3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIHZh
bHVlKTsKICAgICBib29sIGlzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKFdLU3RyaW5nUmVm
IGhvc3ROYW1lKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24o
V0tTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpOwpAQCAtMTcwLDYgKzE3MSw4IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXND
YXB0dXJlZChib29sIHZhbHVlKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NNaW5pbXVtVGltZUJl
dHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoZG91YmxlKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NH
cmFuZGZhdGhlcmluZ1RpbWUoZG91YmxlIHNlY29uZHMpOworICAgIHZvaWQgc2V0U3RhdGlzdGlj
c01heFN0YXRpc3RpY3NFbnRyaWVzKHVuc2lnbmVkKTsKKyAgICB2b2lkIHNldFN0YXRpc3RpY3NQ
cnVuZUVudHJpZXNEb3duVG8odW5zaWduZWQpOwogICAgIHZvaWQgc3RhdGlzdGljc0NsZWFySW5N
ZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUoKTsKICAgICB2b2lkIHN0YXRpc3RpY3NDbGVhckluTWVt
b3J5QW5kUGVyc2lzdGVudFN0b3JlTW9kaWZpZWRTaW5jZUhvdXJzKHVuc2lnbmVkKTsKICAgICB2
b2lkIHN0YXRpc3RpY3NSZXNldFRvQ29uc2lzdGVudFN0YXRlKCk7CkluZGV4OiBUb29scy9XZWJL
aXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJL
aXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcAkocmV2aXNpb24gMjE5MzE1KQorKysgVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTkxMiw2ICs5MTIsMjEgQEAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0SW52b2NhdGlvbjo6
ZAogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAorICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc0xhc3RTZWVuIikpIHsK
KyAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlH
ZXRUeXBlSUQoKSk7CisgICAgICAgIAorICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7
CisgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZUtleShBZG9wdFdLLCBX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSk7CisgICAgICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiB2YWx1ZUtleShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiVmFsdWUiKSk7CisgICAgICAgIAorICAgICAgICBXS1N0cmluZ1JlZiBob3N0
TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaG9zdE5hbWVLZXkuZ2V0KCkpKTsKKyAgICAgICAgV0tE
b3VibGVSZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0
SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHZhbHVlS2V5LmdldCgpKSk7CisgICAg
ICAgIAorICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0xh
c3RTZWVuKGhvc3ROYW1lLCBXS0RvdWJsZUdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIAorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3Vy
Y2UiKSkgewogICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGlj
dGlvbmFyeUdldFR5cGVJRCgpKTsKIApAQCAtMTEwMSw2ICsxMTE2LDIwIEBAIFdLUmV0YWluUHRy
PFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246OmQKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgfQogICAgIAorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VO
YW1lLCAiU2V0TWF4U3RhdGlzdGljc0VudHJpZXMiKSkgeworICAgICAgICBBU1NFUlQoV0tHZXRU
eXBlSUQobWVzc2FnZUJvZHkpID09IFdLVUludDY0R2V0VHlwZUlEKCkpOworICAgICAgICBXS1VJ
bnQ2NFJlZiBlbnRyaWVzID0gc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KG1lc3NhZ2VCb2R5KTsK
KyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NNYXhTdGF0
aXN0aWNzRW50cmllcyhXS1VJbnQ2NEdldFZhbHVlKGVudHJpZXMpKTsKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfQorICAgIAorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKG1lc3NhZ2VOYW1lLCAiU2V0UHJ1bmVFbnRyaWVzRG93blRvIikpIHsKKyAgICAgICAgQVNT
RVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1VJbnQ2NEdldFR5cGVJRCgpKTsKKyAg
ICAgICAgV0tVSW50NjRSZWYgZW50cmllcyA9IHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihtZXNz
YWdlQm9keSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0
aWNzUHJ1bmVFbnRyaWVzRG93blRvKFdLVUludDY0R2V0VmFsdWUoZW50cmllcykpOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNp
c3RlbnRTdG9yZSIpKSB7CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zdGF0
aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSgpOwogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVz
dFJ1bm5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAkocmV2aXNpb24gMjE5MzE1KQorKysgVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTE3NSw2ICsxMTc1LDMxIEBAIHZvaWQgVGVzdFJ1bm5lcjo6Y2FsbERpZFJlbW92ZVN3aXBl
U25hcHMKICAgICBjYWxsVGVzdFJ1bm5lckNhbGxiYWNrKERpZFJlbW92ZVN3aXBlU25hcHNob3RD
YWxsYmFja0lEKTsKIH0KIAordm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzTGFzdFNlZW4o
SlNTdHJpbmdSZWYgaG9zdE5hbWUsIGRvdWJsZSBzZWNvbmRzKQoreworICAgIFZlY3RvcjxXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7CisgICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlw
ZVJlZj4+IHZhbHVlczsKKyAgICAKKyAgICBrZXlzLmFwcGVuZCh7IEFkb3B0V0ssIFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpIH0pOworICAgIHZhbHVlcy5hcHBlbmQo
eyBBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkgfSk7CisgICAg
CisgICAga2V5cy5hcHBlbmQoeyBBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiVmFsdWUiKSB9KTsKKyAgICB2YWx1ZXMuYXBwZW5kKHsgQWRvcHRXSywgV0tEb3VibGVDcmVh
dGUoc2Vjb25kcykgfSk7CisgICAgCisgICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzKGtl
eXMuc2l6ZSgpKTsKKyAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXModmFsdWVzLnNpemUo
KSk7CisgICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7
CisgICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOworICAgICAgICByYXdWYWx1ZXNb
aV0gPSB2YWx1ZXNbaV0uZ2V0KCk7CisgICAgfQorICAgIAorICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiU2V0U3RhdGlzdGljc0xhc3RTZWVuIikpOworICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFy
eVJlZj4gbWVzc2FnZUJvZHkoQWRvcHRXSywgV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0
YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOworICAgIAorICAgIFdLQnVu
ZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVu
ZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7Cit9
CisgICAgCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShK
U1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSkKIHsKICAgICBWZWN0b3I8V0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+PiBrZXlzOwpAQCAtMTQ5MSw2ICsxNTE2LDIwIEBAIHZvaWQgVGVzdFJ1
bm5lcjo6c2V0U3RhdGlzdGljc0dyYW5kZmF0aGUKICAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91
c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOwogfQogCit2b2lkIFRlc3RSdW5u
ZXI6OnNldFN0YXRpc3RpY3NNYXhTdGF0aXN0aWNzRW50cmllcyh1bnNpZ25lZCBlbnRyaWVzKQor
eworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0TWF4U3RhdGlzdGljc0VudHJpZXMiKSk7Cisg
ICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBtZXNzYWdlQm9keShBZG9wdFdLLCBXS1VJbnQ2NENy
ZWF0ZShlbnRyaWVzKSk7CisgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3Nh
Z2VCb2R5LmdldCgpLCBudWxscHRyKTsKK30KKyAgICAKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0U3Rh
dGlzdGljc1BydW5lRW50cmllc0Rvd25Ubyh1bnNpZ25lZCBlbnRyaWVzKQoreworICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiU2V0UHJ1bmVFbnRyaWVzRG93blRvIikpOworICAgIFdLUmV0YWluUHRy
PFdLVHlwZVJlZj4gbWVzc2FnZUJvZHkoQWRvcHRXSywgV0tVSW50NjRDcmVhdGUoZW50cmllcykp
OworICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwg
bnVsbHB0cik7Cit9CisgICAgCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDbGVhckluTWVt
b3J5QW5kUGVyc2lzdGVudFN0b3JlKCkKIHsKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRp
c3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlIikpOwpJbmRleDogVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmgJKHJldmlz
aW9uIDIxOTMxNSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVz
dFJ1bm5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNTcsNiArMzU3LDcgQEAgcHVibGljOgogICAg
IHZvaWQgc3RhdGlzdGljc1VwZGF0ZUNvb2tpZVBhcnRpdGlvbmluZygpOwogICAgIHZvaWQgc3Rh
dGlzdGljc1NldFNob3VsZFBhcnRpdGlvbkNvb2tpZXNGb3JIb3N0KEpTU3RyaW5nUmVmIGhvc3RO
YW1lLCBib29sIHZhbHVlKTsKICAgICB2b2lkIHN0YXRpc3RpY3NTdWJtaXRUZWxlbWV0cnkoKTsK
KyAgICB2b2lkIHNldFN0YXRpc3RpY3NMYXN0U2VlbihKU1N0cmluZ1JlZiBob3N0TmFtZSwgZG91
YmxlIHNlY29uZHMpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKEpT
U3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIHZhbHVlKTsKICAgICBib29sIGlzU3RhdGlzdGljc1By
ZXZhbGVudFJlc291cmNlKEpTU3RyaW5nUmVmIGhvc3ROYW1lKTsKICAgICB2b2lkIHNldFN0YXRp
c3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24oSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFs
dWUpOwpAQCAtMzczLDYgKzM3NCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFN0YXRpc3RpY3NO
b3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZChib29sIHZhbHVlKTsKICAgICB2b2lk
IHNldFN0YXRpc3RpY3NNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoZG91Ymxl
KTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NHcmFuZGZhdGhlcmluZ1RpbWUoZG91YmxlIHNlY29u
ZHMpOworICAgIHZvaWQgc2V0U3RhdGlzdGljc01heFN0YXRpc3RpY3NFbnRyaWVzKHVuc2lnbmVk
KTsKKyAgICB2b2lkIHNldFN0YXRpc3RpY3NQcnVuZUVudHJpZXNEb3duVG8odW5zaWduZWQpOwog
ICAgIHZvaWQgc3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUoKTsKICAg
ICB2b2lkIHN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlTW9kaWZpZWRT
aW5jZUhvdXJzKHVuc2lnbmVkIGhvdXJzKTsKICAgICB2b2lkIHN0YXRpc3RpY3NSZXNldFRvQ29u
c2lzdGVudFN0YXRlKCk7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5pZGwJKHJldmlzaW9u
IDIxOTMxNSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGlu
Z3MvVGVzdFJ1bm5lci5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTI1NCw2ICsyNTQsNyBAQCBpbnRl
cmZhY2UgVGVzdFJ1bm5lciB7CiAgICAgdm9pZCBpbnN0YWxsU3RhdGlzdGljc0RpZE1vZGlmeURh
dGFSZWNvcmRzQ2FsbGJhY2sob2JqZWN0IGNhbGxiYWNrKTsKICAgICB2b2lkIGluc3RhbGxTdGF0
aXN0aWNzRGlkU2NhbkRhdGFSZWNvcmRzQ2FsbGJhY2sob2JqZWN0IGNhbGxiYWNrKTsKICAgICB2
b2lkIGluc3RhbGxTdGF0aXN0aWNzRGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2sob2JqZWN0IGNhbGxi
YWNrKTsKKyAgICB2b2lkIHNldFN0YXRpc3RpY3NMYXN0U2VlbihET01TdHJpbmcgaG9zdE5hbWUs
IGRvdWJsZSBzZWNvbmRzKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJj
ZShET01TdHJpbmcgaG9zdE5hbWUsIGJvb2xlYW4gdmFsdWUpOwogICAgIGJvb2xlYW4gaXNTdGF0
aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoRE9NU3RyaW5nIGhvc3ROYW1lKTsKICAgICB2b2lkIHNl
dFN0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24oRE9NU3RyaW5nIGhvc3ROYW1lLCBib29s
ZWFuIHZhbHVlKTsKQEAgLTI3NCw2ICsyNzUsOCBAQCBpbnRlcmZhY2UgVGVzdFJ1bm5lciB7CiAg
ICAgdm9pZCBzZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQo
Ym9vbGVhbiB2YWx1ZSk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVu
RGF0YVJlY29yZHNSZW1vdmFsKGRvdWJsZSBzZWNvbmRzKTsKICAgICB2b2lkIHNldFN0YXRpc3Rp
Y3NHcmFuZGZhdGhlcmluZ1RpbWUoZG91YmxlIHNlY29uZHMpOworICAgIHZvaWQgc2V0U3RhdGlz
dGljc01heFN0YXRpc3RpY3NFbnRyaWVzKHVuc2lnbmVkIGxvbmcgZW50cmllcyk7CisgICAgdm9p
ZCBzZXRTdGF0aXN0aWNzUHJ1bmVFbnRyaWVzRG93blRvKHVuc2lnbmVkIGxvbmcgZW50cmllcyk7
CiAgICAgdm9pZCBzdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSgpOwog
ICAgIHZvaWQgc3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmVNb2RpZmll
ZFNpbmNlSG91cnModW5zaWduZWQgbG9uZyBob3Vycyk7CiAgICAgdm9pZCBzdGF0aXN0aWNzUmVz
ZXRUb0NvbnNpc3RlbnRTdGF0ZSgpOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2Nv
YS9UZXN0Q29udHJvbGxlckNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvY29jb2EvVGVzdENvbnRyb2xsZXJDb2NvYS5tbQkocmV2aXNpb24gMjE5MzE1KQorKysg
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0Q29udHJvbGxlckNvY29hLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMjIsNiArMjIyLDExIEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJlbW92
ZUFsbFNlc3Npb25DcmUKIH0KIAogI2lmIFdLX0FQSV9FTkFCTEVECit2b2lkIFRlc3RDb250cm9s
bGVyOjpzZXRTdGF0aXN0aWNzTGFzdFNlZW4oV0tTdHJpbmdSZWYgaG9zdE5hbWUsIGRvdWJsZSBz
ZWNvbmRzKQoreworICAgIFtnbG9iYWxXZWJWaWV3Q29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0
b3JlIF9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0TGFzdFNlZW46c2Vjb25kcyBmb3JIb3N0OnRv
TlNTdHJpbmcoaG9zdE5hbWUpXTsKK30KKyAgICAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnNldFN0
YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShXS1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1
ZSkKIHsKICAgICBbZ2xvYmFsV2ViVmlld0NvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSBf
cmVzb3VyY2VMb2FkU3RhdGlzdGljc1NldElzUHJldmFsZW50UmVzb3VyY2U6dmFsdWUgZm9ySG9z
dDp0b05TU3RyaW5nKGhvc3ROYW1lKV07CkBAIC0zNDYsNiArMzUxLDE2IEBAIHZvaWQgVGVzdENv
bnRyb2xsZXI6OnNldFN0YXRpc3RpY3NHcmFuZGYKICAgICBbZ2xvYmFsV2ViVmlld0NvbmZpZ3Vy
YXRpb24ud2Vic2l0ZURhdGFTdG9yZSBfcmVzb3VyY2VMb2FkU3RhdGlzdGljc1NldEdyYW5kZmF0
aGVyaW5nVGltZTpzZWNvbmRzXTsKIH0KIAordm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlz
dGljc01heFN0YXRpc3RpY3NFbnRyaWVzKHVuc2lnbmVkIGVudHJpZXMpCit7CisgICAgW2dsb2Jh
bFdlYlZpZXdDb25maWd1cmF0aW9uLndlYnNpdGVEYXRhU3RvcmUgX3Jlc291cmNlTG9hZFN0YXRp
c3RpY3NTZXRNYXhTdGF0aXN0aWNzRW50cmllczplbnRyaWVzXTsKK30KKyAgICAKK3ZvaWQgVGVz
dENvbnRyb2xsZXI6OnNldFN0YXRpc3RpY3NQcnVuZUVudHJpZXNEb3duVG8odW5zaWduZWQgZW50
cmllcykKK3sKKyAgICBbZ2xvYmFsV2ViVmlld0NvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9y
ZSBfcmVzb3VyY2VMb2FkU3RhdGlzdGljc1NldFBydW5lRW50cmllc0Rvd25UbzplbnRyaWVzXTsK
K30KKyAgICAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5k
UGVyc2lzdGVudFN0b3JlKCkKIHsKICAgICBbZ2xvYmFsV2ViVmlld0NvbmZpZ3VyYXRpb24ud2Vi
c2l0ZURhdGFTdG9yZSBfcmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJz
aXN0ZW50U3RvcmVdOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjE5MzE1KQorKysgTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTctMDctMTAgIEpv
aG4gV2lsYW5kZXIgIDx3aWxhbmRlckBhcHBsZS5jb20+CisKKyAgICAgICAgUmVzb3VyY2UgTG9h
ZCBTdGF0aXN0aWNzOiBQcnVuZSBzdGF0aXN0aWNzIGluIG9yZGVycyBvZiBpbXBvcnRhbmNlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQyMTUKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMzMTY0NDAzPgorCisgICAgICAgIFJldmlld2VkIGJ5IENo
cmlzIER1bWV6LgorCisgICAgICAgICogaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0
YXRpc3RpY3MvcHJ1bmUtc3RhdGlzdGljcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IGh0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3BydW5lLXN0YXRpc3Rp
Y3MuaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vd2syL1Rlc3RFeHBlY3RhdGlvbnM6
CisgICAgICAgICAgICBBZGRlZCBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlz
dGljcy9wcnVuZS1zdGF0aXN0aWNzLmh0bWwgYXMKKyAgICAgICAgICAgIFsgUGFzcyBdIHNpbmNl
IFJlc291cmNlIExvYWQgU3RhdGlzdGljcyBpcyBXSzItb25seS4KKwogMjAxNy0wNy0xMCAgSmF2
aWVyIEZlcm5hbmRleiAgPGpmZXJuYW5kZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBbY3NzLWFs
aWduXVtjc3MtZmxleF1bY3NzLWdyaWRdICdhdXRvJyB2YWx1ZXMgb2YgYWxpZ24tc2VsZiBhbmQg
anVzdGlmeS1zZWxmIG11c3Qgbm90IGJlIHJlc29sdmVkCkluZGV4OiBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wcnVuZS1zdGF0aXN0aWNzLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcv
cmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wcnVuZS1zdGF0aXN0aWNzLWV4cGVjdGVkLnR4dAkobm9u
ZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2Fk
U3RhdGlzdGljcy9wcnVuZS1zdGF0aXN0aWNzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDIzIEBACittYWluIGZyYW1lIC0gZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JG
cmFtZQorbWFpbiBmcmFtZSAtIGRpZENvbW1pdExvYWRGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRp
ZFJlY2VpdmVUaXRsZTogVGVzdCBmb3IgUmVzb3VyY2UgTG9hZCBTdGF0aXN0aWNzIFBydW5pbmcK
K21haW4gZnJhbWUgLSBkaWRGaW5pc2hEb2N1bWVudExvYWRGb3JGcmFtZQorbWFpbiBmcmFtZSAt
IGRpZEhhbmRsZU9ubG9hZEV2ZW50c0ZvckZyYW1lCittYWluIGZyYW1lIC0gZGlkRmluaXNoTG9h
ZEZvckZyYW1lCitUZXN0cyB0aGF0IHN0YXRpc3RpY3MgYXJlIHBydW5lZCBpbiB0aGUgcmlnaHQg
b3JkZXIuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVz
c2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIFRlc3QgaXRlcmF0
aW9uIDEgcGFzc2VkLgorUEFTUyBUZXN0IGl0ZXJhdGlvbiAyIHBhc3NlZC4KK1BBU1MgVGVzdCBp
dGVyYXRpb24gMyBwYXNzZWQuCitQQVNTIFRlc3QgaXRlcmF0aW9uIDQgcGFzc2VkLgorUEFTUyBU
ZXN0IGl0ZXJhdGlvbiA1IHBhc3NlZC4KK1BBU1MgVGVzdCBpdGVyYXRpb24gNiBwYXNzZWQuCitQ
QVNTIFRlc3QgaXRlcmF0aW9uIDcgcGFzc2VkLgorUEFTUyBUZXN0IGl0ZXJhdGlvbiA4IHBhc3Nl
ZC4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCklu
ZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGlj
cy9wcnVuZS1zdGF0aXN0aWNzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcHJ1bmUtc3RhdGlzdGljcy5odG1s
CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzL3BydW5lLXN0YXRpc3RpY3MuaHRtbAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDExOSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDxtZXRh
IGNoYXJzZXQ9IlVURi04Ij4KKyAgICA8dGl0bGU+VGVzdCBmb3IgUmVzb3VyY2UgTG9hZCBTdGF0
aXN0aWNzIFBydW5pbmc8L3RpdGxlPgorICAgIDxzY3JpcHQgc3JjPSIvanMtdGVzdC1yZXNvdXJj
ZXMvanMtdGVzdC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+CisgICAg
ZGVzY3JpcHRpb24oIlRlc3RzIHRoYXQgc3RhdGlzdGljcyBhcmUgcHJ1bmVkIGluIHRoZSByaWdo
dCBvcmRlci4iKTsKKyAgICBqc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKworICAgIGNvbnN0IG9sZGVy
VGltZXN0YW1wID0gTWF0aC5yb3VuZCgobmV3IERhdGUoKSkuZ2V0VGltZSgpIC8gMTAwMCk7Cisg
ICAgY29uc3QgbmV3ZXJUaW1lc3RhbXAgPSBvbGRlclRpbWVzdGFtcCArIDEwOworICAgIGNvbnN0
IG5ld2VzdFRpbWVzdGFtcCA9IG5ld2VyVGltZXN0YW1wICsgMTA7CisKKyAgICBjb25zdCB1cmxz
VG9CZVBydW5lZCA9IFsKKyAgICAgICAgeyB1cmw6ICJodHRwOi8vMTI3LjAuMC4xOjgwMDAvdGVt
cCIsIHByZXZhbGVudDogZmFsc2UgfSwKKyAgICAgICAgeyB1cmw6ICJodHRwOi8vMTI3LjAuMC4y
OjgwMDAvdGVtcCIsIHByZXZhbGVudDogZmFsc2UgfSwKKyAgICAgICAgeyB1cmw6ICJodHRwOi8v
MTI3LjAuMC4zOjgwMDAvdGVtcCIsIHByZXZhbGVudDogdHJ1ZSB9LAorICAgICAgICB7IHVybDog
Imh0dHA6Ly8xMjcuMC4wLjQ6ODAwMC90ZW1wIiwgcHJldmFsZW50OiB0cnVlIH0sCisgICAgICAg
IHsgdXJsOiAiaHR0cDovLzEyNy4wLjAuNTo4MDAwL3RlbXAiLCBwcmV2YWxlbnQ6IGZhbHNlIH0s
CisgICAgICAgIHsgdXJsOiAiaHR0cDovLzEyNy4wLjAuNjo4MDAwL3RlbXAiLCBwcmV2YWxlbnQ6
IGZhbHNlIH0sCisgICAgICAgIHsgdXJsOiAiaHR0cDovLzEyNy4wLjAuNzo4MDAwL3RlbXAiLCBw
cmV2YWxlbnQ6IHRydWUgfSwKKyAgICAgICAgeyB1cmw6ICJodHRwOi8vMTI3LjAuMC44OjgwMDAv
dGVtcCIsIHByZXZhbGVudDogdHJ1ZSB9CisgICAgXTsKKworICAgIGZ1bmN0aW9uIGNoZWNrSWZQ
cmV2YWxlbnRBY2NvcmRpbmdUb0luaXRpYWxFeHBlY3RhdGlvbihiZWdpbiwgZW5kKSB7CisgICAg
ICAgIHZhciBmYWlsZWQgPSBmYWxzZTsKKyAgICAgICAgZm9yICh2YXIgaSA9IGJlZ2luOyBpIDwg
ZW5kOyArK2kpIHsKKyAgICAgICAgICAgIGlmICh0ZXN0UnVubmVyLmlzU3RhdGlzdGljc1ByZXZh
bGVudFJlc291cmNlKHVybHNUb0JlUHJ1bmVkW2ldLnVybCkgIT09IHVybHNUb0JlUHJ1bmVkW2ld
LnByZXZhbGVudCkgeworICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoImNoZWNrSWZQcmV2YWxl
bnRBY2NvcmRpbmdUb0luaXRpYWxFeHBlY3RhdGlvbjogVGVzdCBpdGVyYXRpb24gIiArIGN1cnJl
bnRUZXN0ICsgIiBmYWlsZWQuICIgKyB1cmxzVG9CZVBydW5lZFtpXS51cmwgKyAodXJsc1RvQmVQ
cnVuZWRbaV0ucHJldmFsZW50ID8gIiB3YXNuJ3QgIiA6ICIgd2FzICIpICsgInByZXZhbGVudCIp
OworICAgICAgICAgICAgICAgIGZhaWxlZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGZhaWxlZCkKKyAgICAgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAg
IH0KKworICAgIGZ1bmN0aW9uIGNoZWNrSWZQcmV2YWxlbnQoYmVnaW4sIGVuZCwgZXhwZWN0ZWQp
IHsKKyAgICAgICAgdmFyIGZhaWxlZCA9IGZhbHNlOworICAgICAgICBmb3IgKHZhciBpID0gYmVn
aW47IGkgPCBlbmQ7ICsraSkgeworICAgICAgICAgICAgaWYgKHRlc3RSdW5uZXIuaXNTdGF0aXN0
aWNzUHJldmFsZW50UmVzb3VyY2UodXJsc1RvQmVQcnVuZWRbaV0udXJsKSAhPT0gZXhwZWN0ZWQp
IHsKKyAgICAgICAgICAgICAgICB0ZXN0RmFpbGVkKCJjaGVja0lmUHJldmFsZW50OiBUZXN0IGl0
ZXJhdGlvbiAiICsgY3VycmVudFRlc3QgKyAiIGZhaWxlZC4gIiArIHVybHNUb0JlUHJ1bmVkW2ld
LnVybCArIChleHBlY3RlZCA/ICIgd2Fzbid0ICIgOiAiIHdhcyAiKSArICJwcmV2YWxlbnQiKTsK
KyAgICAgICAgICAgICAgICBmYWlsZWQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGlmIChmYWlsZWQpCisgICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiBpbml0aWFsaXplU3RhdGlzdGljcygpIHsKKyAgICAgICAgdGVzdFJ1
bm5lci5pbnN0YWxsU3RhdGlzdGljc0RpZFNjYW5EYXRhUmVjb3Jkc0NhbGxiYWNrKGNoZWNrU3Rh
dGlzdGljc0FmdGVyUHJ1bmluZyk7CisKKyAgICAgICAgLy8gTm9uLXByZXZhbGVudCB3aXRob3V0
IHVzZXIgaW50ZXJhY3Rpb24gdG8gYmUgcHJ1bmVkIGZpcnN0LgorICAgICAgICB0ZXN0UnVubmVy
LnNldFN0YXRpc3RpY3NMYXN0U2Vlbih1cmxzVG9CZVBydW5lZFswXS51cmwsIG9sZGVyVGltZXN0
YW1wKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzTGFzdFNlZW4odXJsc1RvQmVQ
cnVuZWRbMV0udXJsLCBuZXdlclRpbWVzdGFtcCk7CisKKyAgICAgICAgLy8gUHJldmFsZW50IHdp
dGhvdXQgdXNlciBpbnRlcmFjdGlvbiB0byBiZSBwcnVuZWQgc2Vjb25kLgorICAgICAgICB0ZXN0
UnVubmVyLnNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZSh1cmxzVG9CZVBydW5lZFsyXS51
cmwsIHRydWUpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NMYXN0U2Vlbih1cmxz
VG9CZVBydW5lZFsyXS51cmwsIG9sZGVyVGltZXN0YW1wKTsKKyAgICAgICAgdGVzdFJ1bm5lci5z
ZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UodXJsc1RvQmVQcnVuZWRbM10udXJsLCB0cnVl
KTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzTGFzdFNlZW4odXJsc1RvQmVQcnVu
ZWRbM10udXJsLCBuZXdlclRpbWVzdGFtcCk7CisKKyAgICAgICAgLy8gTm9uLXByZXZhbGVudCB3
aXRoIHVzZXIgaW50ZXJhY3Rpb24gdG8gYmUgcHJ1bmVkIHRoaXJkLgorICAgICAgICB0ZXN0UnVu
bmVyLnNldFN0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24odXJsc1RvQmVQcnVuZWRbNF0u
dXJsLCB0cnVlKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzTGFzdFNlZW4odXJs
c1RvQmVQcnVuZWRbNF0udXJsLCBvbGRlclRpbWVzdGFtcCk7CisgICAgICAgIHRlc3RSdW5uZXIu
c2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbih1cmxzVG9CZVBydW5lZFs1XS51cmws
IHRydWUpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NMYXN0U2Vlbih1cmxzVG9C
ZVBydW5lZFs1XS51cmwsIG5ld2VyVGltZXN0YW1wKTsKKworICAgICAgICAvLyBQcmV2YWxlbnQg
d2l0aCB1c2VyIGludGVyYWN0aW9uIHRvIGJlIHBydW5lZCBsYXN0LgorICAgICAgICB0ZXN0UnVu
bmVyLnNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZSh1cmxzVG9CZVBydW5lZFs2XS51cmws
IHRydWUpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJh
Y3Rpb24odXJsc1RvQmVQcnVuZWRbNl0udXJsLCB0cnVlKTsKKyAgICAgICAgdGVzdFJ1bm5lci5z
ZXRTdGF0aXN0aWNzTGFzdFNlZW4odXJsc1RvQmVQcnVuZWRbNl0udXJsLCBvbGRlclRpbWVzdGFt
cCk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKHVy
bHNUb0JlUHJ1bmVkWzddLnVybCwgdHJ1ZSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlz
dGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbih1cmxzVG9CZVBydW5lZFs3XS51cmwsIHRydWUpOwor
ICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NMYXN0U2Vlbih1cmxzVG9CZVBydW5lZFs3
XS51cmwsIG5ld2VyVGltZXN0YW1wKTsKKworICAgICAgICBjaGVja0lmUHJldmFsZW50QWNjb3Jk
aW5nVG9Jbml0aWFsRXhwZWN0YXRpb24oMCwgdXJsc1RvQmVQcnVuZWQubGVuZ3RoKTsKKyAgICB9
CisKKyAgICB2YXIgY3VycmVudFRlc3Q7CisgICAgZnVuY3Rpb24gY2hlY2tTdGF0aXN0aWNzQWZ0
ZXJQcnVuaW5nKCkgeworICAgICAgICAvLyBQcnVuZWQgZW50cmllcyBzaG91bGQgbm90IGJlIHBy
ZXZhbGVudC4KKyAgICAgICAgY2hlY2tJZlByZXZhbGVudCgwLCBjdXJyZW50VGVzdCwgZmFsc2Up
OworICAgICAgICAvLyBOb24tcHJ1bmVkIGVudHJpZXMgc2hvdWxkIGtlZXAgdGhlaXIgZXhwZWN0
ZWQgc3RhdHVzLgorICAgICAgICBjaGVja0lmUHJldmFsZW50QWNjb3JkaW5nVG9Jbml0aWFsRXhw
ZWN0YXRpb24oY3VycmVudFRlc3QsIHVybHNUb0JlUHJ1bmVkLmxlbmd0aCk7CisgICAgICAgIHRl
c3RQYXNzZWQoIlRlc3QgaXRlcmF0aW9uICIgKyBjdXJyZW50VGVzdCArICIgcGFzc2VkLiIpOwor
ICAgICAgICBpZiAoY3VycmVudFRlc3QgPCB1cmxzVG9CZVBydW5lZC5sZW5ndGgpIHsKKyAgICAg
ICAgICAgICsrY3VycmVudFRlc3Q7CisgICAgICAgICAgICBydW5UZXN0KCk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGZ1bmN0aW9uIHJ1blRlc3QoKSB7CisgICAgICAgIGluaXRpYWxpemVTdGF0aXN0aWNzKCk7
CisKKyAgICAgICAgdmFyIGZpbGxlclVybCA9ICJodHRwOi8vMTI3LjAuIiArIGN1cnJlbnRUZXN0
ICsgIi4xOjgwMDAvdGVtcCI7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1ByZXZh
bGVudFJlc291cmNlKGZpbGxlclVybCwgdHJ1ZSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3Rh
dGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbihmaWxsZXJVcmwsIHRydWUpOworICAgICAgICB0
ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NMYXN0U2VlbihmaWxsZXJVcmwsIG5ld2VzdFRpbWVzdGFt
cCk7CisgICAgICAgIHRlc3RSdW5uZXIuc3RhdGlzdGljc1Byb2Nlc3NTdGF0aXN0aWNzQW5kRGF0
YVJlY29yZHMoKTsKKyAgICB9CisKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAg
ICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVE
YXRhUmVjb3Jkc1JlbW92YWwoZmFsc2UpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3Rp
Y3NNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoMCk7CisgICAgICAgIHRlc3RS
dW5uZXIuc2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQo
dHJ1ZSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc01heFN0YXRpc3RpY3NFbnRy
aWVzKHVybHNUb0JlUHJ1bmVkLmxlbmd0aCk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlz
dGljc1BydW5lRW50cmllc0Rvd25Ubyh1cmxzVG9CZVBydW5lZC5sZW5ndGgpOworCisgICAgICAg
IGN1cnJlbnRUZXN0ID0gMTsKKyAgICAgICAgcnVuVGVzdCgpOworICAgIH0KKzwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91
dFRlc3RzL3BsYXRmb3JtL3drMi9UZXN0RXhwZWN0YXRpb25zCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL3BsYXRmb3JtL3drMi9UZXN0RXhwZWN0YXRpb25zCShyZXZpc2lvbiAyMTkzMTUpCisr
KyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93azIvVGVzdEV4cGVjdGF0aW9ucwkod29ya2luZyBjb3B5
KQpAQCAtNzA2LDYgKzcwNiw3IEBAIGh0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0
aXN0aWMKIGh0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL2NsZWFyLWlu
LW1lbW9yeS1hbmQtcGVyc2lzdGVudC1zdG9yZS5odG1sIFsgUGFzcyBdCiB3ZWJraXQub3JnL2Iv
MTcyNDUyIGh0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL2dyYW5kZmF0
aGVyaW5nLmh0bWwgWyBQYXNzIEZhaWx1cmUgVGltZW91dCBdCiB3ZWJraXQub3JnL2IvMTczNDk5
IGh0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3RlbGVtZXRyeS1nZW5l
cmF0aW9uLmh0bWwgWyBQYXNzIEZhaWx1cmUgXQoraHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNl
TG9hZFN0YXRpc3RpY3MvcHJ1bmUtc3RhdGlzdGljcy5odG1sIFsgUGFzcyBdCiAKICMjIyBFTkQg
T0YgKDUpIFByb2dyZXNzaW9ucywgZXhwZWN0ZWQgc3VjY2Vzc2VzIHRoYXQgYXJlIGV4cGVjdGVk
IGZhaWx1cmVzIGluIFdlYktpdDEuCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>315053</attachid>
            <date>2017-07-10 17:25:03 -0700</date>
            <delta_ts>2017-07-10 19:00:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174215-20170710172503.patch</filename>
            <type>text/plain</type>
            <size>13090</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxOTMxNikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDM0IEBACisyMDE3LTA3LTEwICBKb2huIFdpbGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29t
PgorCisgICAgICAgIFJlc291cmNlIExvYWQgU3RhdGlzdGljczogUHJ1bmUgc3RhdGlzdGljcyBp
biBvcmRlcnMgb2YgaW1wb3J0YW5jZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTc0MjE1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMzE2NDQwMz4K
KworICAgICAgICBSZXZpZXdlZCBieSBDaHJpcyBEdW1lei4KKworICAgICAgICBOZXN0IGluZnJh
c3RydWN0dXJlLiBBZGRzIHRoZXNlIGZ1bmN0aW9uczoKKyAgICAgICAgMS4gdGVzdFJ1bm5lci5z
ZXRTdGF0aXN0aWNzTGFzdFNlZW4oKQorICAgICAgICAyLiBzZXRTdGF0aXN0aWNzTWF4U3RhdGlz
dGljc0VudHJpZXMoKQorICAgICAgICAzLiBzZXRTdGF0aXN0aWNzUHJ1bmVFbnRyaWVzRG93blRv
KCkKKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3Mv
VGVzdFJ1bm5lci5pZGw6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9UZXN0UnVubmVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGlj
c0xhc3RTZWVuKToKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc01heFN0
YXRpc3RpY3NFbnRyaWVzKToKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGlj
c1BydW5lRW50cmllc0Rvd25Ubyk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9UZXN0UnVubmVyLmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29u
dHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNz
TGFzdFNlZW4pOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6c2V0TWF4U3RhdGlzdGlj
c0VudHJpZXMpOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6c2V0UHJ1bmVFbnRyaWVz
RG93blRvKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmg6Cisg
ICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHA6CisgICAgICAgIChX
VFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVj
dGVkQnVuZGxlKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9s
bGVyQ29jb2EubW06CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNz
TGFzdFNlZW4pOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc01h
eFN0YXRpc3RpY3NFbnRyaWVzKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnNldFN0
YXRpc3RpY3NQcnVuZUVudHJpZXNEb3duVG8pOgorCiAyMDE3LTA3LTAzICBCcmlhbiBCdXJnICA8
YmJ1cmdAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBSZXBsYXk6IHJlbW92ZSBzb21lIHVudXNl
ZCBjb2RlCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAko
cmV2aXNpb24gMjE5MzE2KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNDksNiArMjI0OSwxMCBAQCB2b2lkIFRlc3RDb250
cm9sbGVyOjpyZW1vdmVBbGxTZXNzaW9uQ3JlCiAKICNpZiAhUExBVEZPUk0oQ09DT0EpIHx8ICFX
S19BUElfRU5BQkxFRAogCit2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzTGFzdFNl
ZW4oV0tTdHJpbmdSZWYsIGRvdWJsZSkKK3sKK30KKyAgICAKIHZvaWQgVGVzdENvbnRyb2xsZXI6
OnNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShXS1N0cmluZ1JlZiwgYm9vbCkKIHsKIH0K
QEAgLTIzMzIsNiArMjMzNiwxNCBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNz
R3JhbmRmCiB7CiB9CiAKK3ZvaWQgVGVzdENvbnRyb2xsZXI6OnNldFN0YXRpc3RpY3NNYXhTdGF0
aXN0aWNzRW50cmllcyh1bnNpZ25lZCkKK3sKK30KKyAgICAKK3ZvaWQgVGVzdENvbnRyb2xsZXI6
OnNldFN0YXRpc3RpY3NQcnVuZUVudHJpZXNEb3duVG8odW5zaWduZWQpCit7Cit9CisgICAgCiB2
b2lkIFRlc3RDb250cm9sbGVyOjpzdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRT
dG9yZSgpCiB7CiB9CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5o
CShyZXZpc2lvbiAyMTkzMTYpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9s
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MCw2ICsxNTAsNyBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIHNldFNob3VsZERvd25sb2FkVW5kaXNwbGF5YWJsZU1JTUVUeXBlcyhib29sIHZhbHVlKSB7
IG1fc2hvdWxkRG93bmxvYWRVbmRpc3BsYXlhYmxlTUlNRVR5cGVzID0gdmFsdWU7IH0KIAorICAg
IHZvaWQgc2V0U3RhdGlzdGljc0xhc3RTZWVuKFdLU3RyaW5nUmVmIGhvc3ROYW1lLCBkb3VibGUg
c2Vjb25kcyk7CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoV0tTdHJp
bmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpOwogICAgIGJvb2wgaXNTdGF0aXN0aWNzUHJldmFs
ZW50UmVzb3VyY2UoV0tTdHJpbmdSZWYgaG9zdE5hbWUpOwogICAgIHZvaWQgc2V0U3RhdGlzdGlj
c0hhc0hhZFVzZXJJbnRlcmFjdGlvbihXS1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7
CkBAIC0xNzAsNiArMTcxLDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0U3RhdGlzdGljc05vdGlm
eVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVkKGJvb2wgdmFsdWUpOwogICAgIHZvaWQgc2V0
U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChkb3VibGUpOwog
ICAgIHZvaWQgc2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyaW5nVGltZShkb3VibGUgc2Vjb25kcyk7
CisgICAgdm9pZCBzZXRTdGF0aXN0aWNzTWF4U3RhdGlzdGljc0VudHJpZXModW5zaWduZWQpOwor
ICAgIHZvaWQgc2V0U3RhdGlzdGljc1BydW5lRW50cmllc0Rvd25Ubyh1bnNpZ25lZCk7CiAgICAg
dm9pZCBzdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSgpOwogICAgIHZv
aWQgc3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmVNb2RpZmllZFNpbmNl
SG91cnModW5zaWduZWQpOwogICAgIHZvaWQgc3RhdGlzdGljc1Jlc2V0VG9Db25zaXN0ZW50U3Rh
dGUoKTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCShy
ZXZpc2lvbiAyMTkzMTYpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEyLDYgKzkxMiwyMSBAQCBXS1JldGFpblB0cjxXS1R5
cGVSZWY+IFRlc3RJbnZvY2F0aW9uOjpkCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQog
CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRT
dGF0aXN0aWNzTGFzdFNlZW4iKSkgeworICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2Fn
ZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKKyAgICAgICAgCisgICAgICAgIFdL
RGljdGlvbmFyeVJlZiBtZXNzYWdlQm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rp
b25hcnlSZWY+KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IGhvc3ROYW1lS2V5KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0
TmFtZSIpKTsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHZhbHVlS2V5KEFkb3B0
V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIpKTsKKyAgICAgICAgCisg
ICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdL
RGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZUtl
eS5nZXQoKSkpOworICAgICAgICBXS0RvdWJsZVJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLRG91
YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
dmFsdWVLZXkuZ2V0KCkpKTsKKyAgICAgICAgCisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5zZXRTdGF0aXN0aWNzTGFzdFNlZW4oaG9zdE5hbWUsIFdLRG91YmxlR2V0VmFsdWUo
dmFsdWUpKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICAK
ICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0
YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZSIpKSB7CiAgICAgICAgIEFTU0VSVChXS0dldFR5cGVJ
RChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpOwogCkBAIC0xMTAxLDYg
KzExMTYsMjAgQEAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0SW52b2NhdGlvbjo6ZAogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCisgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRNYXhTdGF0aXN0aWNzRW50cmllcyIpKSB7
CisgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tVSW50NjRHZXRU
eXBlSUQoKSk7CisgICAgICAgIFdLVUludDY0UmVmIGVudHJpZXMgPSBzdGF0aWNfY2FzdDxXS1VJ
bnQ2NFJlZj4obWVzc2FnZUJvZHkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkuc2V0U3RhdGlzdGljc01heFN0YXRpc3RpY3NFbnRyaWVzKFdLVUludDY0R2V0VmFsdWUoZW50
cmllcykpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCisgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRQcnVuZUVudHJpZXNE
b3duVG8iKSkgeworICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdL
VUludDY0R2V0VHlwZUlEKCkpOworICAgICAgICBXS1VJbnQ2NFJlZiBlbnRyaWVzID0gc3RhdGlj
X2Nhc3Q8V0tVSW50NjRSZWY+KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NQcnVuZUVudHJpZXNEb3duVG8oV0tVSW50NjRHZXRW
YWx1ZShlbnRyaWVzKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICAKICAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlN0YXRpc3Rp
Y3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlIikpIHsKICAgICAgICAgVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLnN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0
b3JlKCk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwCShyZXZpc2lvbiAy
MTkzMTYpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5u
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTc1LDYgKzExNzUsMzEgQEAgdm9pZCBUZXN0UnVu
bmVyOjpjYWxsRGlkUmVtb3ZlU3dpcGVTbmFwcwogICAgIGNhbGxUZXN0UnVubmVyQ2FsbGJhY2so
RGlkUmVtb3ZlU3dpcGVTbmFwc2hvdENhbGxiYWNrSUQpOwogfQogCit2b2lkIFRlc3RSdW5uZXI6
OnNldFN0YXRpc3RpY3NMYXN0U2VlbihKU1N0cmluZ1JlZiBob3N0TmFtZSwgZG91YmxlIHNlY29u
ZHMpCit7CisgICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKKyAgICBW
ZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOworICAgIAorICAgIGtleXMuYXBw
ZW5kKHsgQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikg
fSk7CisgICAgdmFsdWVzLmFwcGVuZCh7IEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3Ry
aW5nKGhvc3ROYW1lKSB9KTsKKyAgICAKKyAgICBrZXlzLmFwcGVuZCh7IEFkb3B0V0ssIFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIpIH0pOworICAgIHZhbHVlcy5hcHBlbmQo
eyBBZG9wdFdLLCBXS0RvdWJsZUNyZWF0ZShzZWNvbmRzKSB9KTsKKyAgICAKKyAgICBWZWN0b3I8
V0tTdHJpbmdSZWY+IHJhd0tleXMoa2V5cy5zaXplKCkpOworICAgIFZlY3RvcjxXS1R5cGVSZWY+
IHJhd1ZhbHVlcyh2YWx1ZXMuc2l6ZSgpKTsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0
KCk7CisgICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKKyAgICB9CisgICAg
CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzTGFzdFNlZW4iKSk7CisgICAg
V0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keShBZG9wdFdLLCBXS0RpY3Rp
b25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6
ZSgpKSk7CisgICAgCisgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VC
b2R5LmdldCgpLCBudWxscHRyKTsKK30KKyAgICAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlz
dGljc1ByZXZhbGVudFJlc291cmNlKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIHZhbHVlKQog
ewogICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4+IGtleXM7CkBAIC0xNDkxLDYg
KzE1MTYsMjAgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzR3JhbmRmYXRoZQogICAg
IFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0
cik7CiB9CiAKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc01heFN0YXRpc3RpY3NFbnRy
aWVzKHVuc2lnbmVkIGVudHJpZXMpCit7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRNYXhT
dGF0aXN0aWNzRW50cmllcyIpKTsKKyAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IG1lc3NhZ2VC
b2R5KEFkb3B0V0ssIFdLVUludDY0Q3JlYXRlKGVudHJpZXMpKTsKKyAgICBXS0J1bmRsZVBvc3RT
eW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworfQorICAgIAor
dm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzUHJ1bmVFbnRyaWVzRG93blRvKHVuc2lnbmVk
IGVudHJpZXMpCit7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFk
b3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRQcnVuZUVudHJpZXNEb3du
VG8iKSk7CisgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBtZXNzYWdlQm9keShBZG9wdFdLLCBX
S1VJbnQ2NENyZWF0ZShlbnRyaWVzKSk7CisgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNz
YWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKK30KKyAgICAKIHZvaWQgVGVzdFJ1bm5l
cjo6c3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUoKQogewogICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiU3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3Rv
cmUiKSk7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RS
dW5uZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL1Rlc3RSdW5uZXIuaAkocmV2aXNpb24gMjE5MzE2KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1Nyw2
ICszNTcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdGF0aXN0aWNzVXBkYXRlQ29va2llUGFydGl0
aW9uaW5nKCk7CiAgICAgdm9pZCBzdGF0aXN0aWNzU2V0U2hvdWxkUGFydGl0aW9uQ29va2llc0Zv
ckhvc3QoSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpOwogICAgIHZvaWQgc3RhdGlz
dGljc1N1Ym1pdFRlbGVtZXRyeSgpOworICAgIHZvaWQgc2V0U3RhdGlzdGljc0xhc3RTZWVuKEpT
U3RyaW5nUmVmIGhvc3ROYW1lLCBkb3VibGUgc2Vjb25kcyk7CiAgICAgdm9pZCBzZXRTdGF0aXN0
aWNzUHJldmFsZW50UmVzb3VyY2UoSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpOwog
ICAgIGJvb2wgaXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoSlNTdHJpbmdSZWYgaG9zdE5h
bWUpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbihKU1N0cmlu
Z1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7CkBAIC0zNzMsNiArMzc0LDggQEAgcHVibGljOgog
ICAgIHZvaWQgc2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlblRlbGVtZXRyeVdhc0NhcHR1cmVk
KGJvb2wgdmFsdWUpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlbkRh
dGFSZWNvcmRzUmVtb3ZhbChkb3VibGUpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc0dyYW5kZmF0
aGVyaW5nVGltZShkb3VibGUgc2Vjb25kcyk7CisgICAgdm9pZCBzZXRTdGF0aXN0aWNzTWF4U3Rh
dGlzdGljc0VudHJpZXModW5zaWduZWQpOworICAgIHZvaWQgc2V0U3RhdGlzdGljc1BydW5lRW50
cmllc0Rvd25Ubyh1bnNpZ25lZCk7CiAgICAgdm9pZCBzdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFu
ZFBlcnNpc3RlbnRTdG9yZSgpOwogICAgIHZvaWQgc3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQ
ZXJzaXN0ZW50U3RvcmVNb2RpZmllZFNpbmNlSG91cnModW5zaWduZWQgaG91cnMpOwogICAgIHZv
aWQgc3RhdGlzdGljc1Jlc2V0VG9Db25zaXN0ZW50U3RhdGUoKTsKSW5kZXg6IFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5pZGwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9U
ZXN0UnVubmVyLmlkbAkocmV2aXNpb24gMjE5MzE2KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbAkod29ya2luZyBjb3B5KQpA
QCAtMjU0LDYgKzI1NCw3IEBAIGludGVyZmFjZSBUZXN0UnVubmVyIHsKICAgICB2b2lkIGluc3Rh
bGxTdGF0aXN0aWNzRGlkTW9kaWZ5RGF0YVJlY29yZHNDYWxsYmFjayhvYmplY3QgY2FsbGJhY2sp
OwogICAgIHZvaWQgaW5zdGFsbFN0YXRpc3RpY3NEaWRTY2FuRGF0YVJlY29yZHNDYWxsYmFjayhv
YmplY3QgY2FsbGJhY2spOwogICAgIHZvaWQgaW5zdGFsbFN0YXRpc3RpY3NEaWRSdW5UZWxlbWV0
cnlDYWxsYmFjayhvYmplY3QgY2FsbGJhY2spOworICAgIHZvaWQgc2V0U3RhdGlzdGljc0xhc3RT
ZWVuKERPTVN0cmluZyBob3N0TmFtZSwgZG91YmxlIHNlY29uZHMpOwogICAgIHZvaWQgc2V0U3Rh
dGlzdGljc1ByZXZhbGVudFJlc291cmNlKERPTVN0cmluZyBob3N0TmFtZSwgYm9vbGVhbiB2YWx1
ZSk7CiAgICAgYm9vbGVhbiBpc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShET01TdHJpbmcg
aG9zdE5hbWUpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbihE
T01TdHJpbmcgaG9zdE5hbWUsIGJvb2xlYW4gdmFsdWUpOwpAQCAtMjc0LDYgKzI3NSw4IEBAIGlu
dGVyZmFjZSBUZXN0UnVubmVyIHsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1do
ZW5UZWxlbWV0cnlXYXNDYXB0dXJlZChib29sZWFuIHZhbHVlKTsKICAgICB2b2lkIHNldFN0YXRp
c3RpY3NNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoZG91YmxlIHNlY29uZHMp
OwogICAgIHZvaWQgc2V0U3RhdGlzdGljc0dyYW5kZmF0aGVyaW5nVGltZShkb3VibGUgc2Vjb25k
cyk7CisgICAgdm9pZCBzZXRTdGF0aXN0aWNzTWF4U3RhdGlzdGljc0VudHJpZXModW5zaWduZWQg
bG9uZyBlbnRyaWVzKTsKKyAgICB2b2lkIHNldFN0YXRpc3RpY3NQcnVuZUVudHJpZXNEb3duVG8o
dW5zaWduZWQgbG9uZyBlbnRyaWVzKTsKICAgICB2b2lkIHN0YXRpc3RpY3NDbGVhckluTWVtb3J5
QW5kUGVyc2lzdGVudFN0b3JlKCk7CiAgICAgdm9pZCBzdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFu
ZFBlcnNpc3RlbnRTdG9yZU1vZGlmaWVkU2luY2VIb3Vycyh1bnNpZ25lZCBsb25nIGhvdXJzKTsK
ICAgICB2b2lkIHN0YXRpc3RpY3NSZXNldFRvQ29uc2lzdGVudFN0YXRlKCk7CkluZGV4OiBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RDb250cm9sbGVyQ29jb2EubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0Q29udHJvbGxlckNvY29hLm1t
CShyZXZpc2lvbiAyMTkzMTYpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RD
b250cm9sbGVyQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTIyMiw2ICsyMjIsMTEgQEAgdm9p
ZCBUZXN0Q29udHJvbGxlcjo6cmVtb3ZlQWxsU2Vzc2lvbkNyZQogfQogCiAjaWYgV0tfQVBJX0VO
QUJMRUQKK3ZvaWQgVGVzdENvbnRyb2xsZXI6OnNldFN0YXRpc3RpY3NMYXN0U2VlbihXS1N0cmlu
Z1JlZiBob3N0TmFtZSwgZG91YmxlIHNlY29uZHMpCit7CisgICAgW2dsb2JhbFdlYlZpZXdDb25m
aWd1cmF0aW9uLndlYnNpdGVEYXRhU3RvcmUgX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTZXRMYXN0
U2VlbjpzZWNvbmRzIGZvckhvc3Q6dG9OU1N0cmluZyhob3N0TmFtZSldOworfQorICAgIAogdm9p
ZCBUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKFdLU3RyaW5n
UmVmIGhvc3ROYW1lLCBib29sIHZhbHVlKQogewogICAgIFtnbG9iYWxXZWJWaWV3Q29uZmlndXJh
dGlvbi53ZWJzaXRlRGF0YVN0b3JlIF9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0SXNQcmV2YWxl
bnRSZXNvdXJjZTp2YWx1ZSBmb3JIb3N0OnRvTlNTdHJpbmcoaG9zdE5hbWUpXTsKQEAgLTM0Niw2
ICszNTEsMTYgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc0dyYW5kZgogICAg
IFtnbG9iYWxXZWJWaWV3Q29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlIF9yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU2V0R3JhbmRmYXRoZXJpbmdUaW1lOnNlY29uZHNdOwogfQogCit2b2lkIFRl
c3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzTWF4U3RhdGlzdGljc0VudHJpZXModW5zaWduZWQg
ZW50cmllcykKK3sKKyAgICBbZ2xvYmFsV2ViVmlld0NvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFT
dG9yZSBfcmVzb3VyY2VMb2FkU3RhdGlzdGljc1NldE1heFN0YXRpc3RpY3NFbnRyaWVzOmVudHJp
ZXNdOworfQorICAgIAordm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc1BydW5lRW50
cmllc0Rvd25Ubyh1bnNpZ25lZCBlbnRyaWVzKQoreworICAgIFtnbG9iYWxXZWJWaWV3Q29uZmln
dXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlIF9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0UHJ1bmVF
bnRyaWVzRG93blRvOmVudHJpZXNdOworfQorICAgIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6c3Rh
dGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUoKQogewogICAgIFtnbG9iYWxX
ZWJWaWV3Q29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlIF9yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZV07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>315061</attachid>
            <date>2017-07-10 19:00:45 -0700</date>
            <delta_ts>2017-07-10 20:31:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174215-20170710190044.patch</filename>
            <type>text/plain</type>
            <size>42847</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxOTMxNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDE3LTA3LTEwICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIExvYWQgU3Rh
dGlzdGljczogUHJ1bmUgc3RhdGlzdGljcyBpbiBvcmRlcnMgb2YgaW1wb3J0YW5jZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0MjE1CisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS8zMzE2NDQwMz4KKworICAgICAgICBSZXZpZXdlZCBieSBDaHJpcyBE
dW1lei4KKworICAgICAgICBUZXN0OiBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3Rh
dGlzdGljcy9wcnVuZS1zdGF0aXN0aWNzLmh0bWwKKworICAgICAgICAqIGxvYWRlci9SZXNvdXJj
ZUxvYWRPYnNlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZWR1Y2VUaW1lUmVzb2x1dGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nRnJhbWVOYXZp
Z2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dTdWJy
ZXNvdXJjZUxvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OmxvZ1dlYlNvY2tldExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OmxvZ1VzZXJJbnRlcmFjdGlvbldpdGhSZWR1Y2VkVGltZVJlc29sdXRpb24pOgorICAg
ICAgICAgICAgTm93IGFsbCBzZXQgdGhlIG5ldyBzdGF0aXN0aWNzIGZpZWxkIGxhc3RTZWVuLgor
ICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M6OmVuY29kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljczo6dG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljczo6bWVyZ2UpOgorICAgICAgICAgICAgSGFuZGxpbmcgb2YgdGhlIG5l
dyBzdGF0aXN0aWNzIGZpZWxkIGxhc3RTZWVuLgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzLmg6CisKIDIwMTctMDctMTAgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBw
bGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IEhpZ2hsaWdodCBtYXRjaGluZyBDU1Mg
Y2FudmFzIGNsaWVudHMgd2hlbiBob3ZlcmluZyBjb250ZXh0cyBpbiB0aGUgUmVzb3VyY2VzIHRh
YgpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIu
Y3BwCShyZXZpc2lvbiAyMTkzMTYpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VM
b2FkT2JzZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Miw2ICs5MiwxMSBAQCBib29sIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaG91bGRMb2coUGFnCiAgICAgcmV0dXJuIFNldHRpbmdzOjpy
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpICYmICFwYWdlLT51c2VzRXBoZW1lcmFsU2Vz
c2lvbigpICYmIG1fbm90aWZpY2F0aW9uQ2FsbGJhY2s7CiB9CiAKK3N0YXRpYyBXYWxsVGltZSBy
ZWR1Y2VUb0hvdXJseVRpbWVSZXNvbHV0aW9uKFdhbGxUaW1lIHRpbWUpCit7CisgICAgcmV0dXJu
IFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhzdGQ6OmZsb29yKHRpbWUuc2Vjb25kc1NpbmNlRXBv
Y2goKSAvIHRpbWVzdGFtcFJlc29sdXRpb24pICogdGltZXN0YW1wUmVzb2x1dGlvbi5zZWNvbmRz
KCkpOworfQorCiB2b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dGcmFtZU5hdmlnYXRpb24o
Y29uc3QgRnJhbWUmIGZyYW1lLCBjb25zdCBGcmFtZSYgdG9wRnJhbWUsIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgbmV3UmVxdWVzdCkKIHsKICAgICBBU1NFUlQoZnJhbWUuZG9jdW1lbnQoKSk7CkBA
IC0xMjUsNiArMTMwLDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nRnJhbWVOYXZp
ZwogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvJiB0YXJnZXRTdGF0aXN0aWNzID0gZW5zdXJl
UmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbih0YXJnZXRQcmltYXJ5RG9tYWluKTsK
KyAgICB0YXJnZXRTdGF0aXN0aWNzLmxhc3RTZWVuID0gcmVkdWNlVG9Ib3VybHlUaW1lUmVzb2x1
dGlvbihXYWxsVGltZTo6bm93KCkpOwogICAgIGF1dG8gc3ViZnJhbWVVbmRlclRvcEZyYW1lT3Jp
Z2luc1Jlc3VsdCA9IHRhcmdldFN0YXRpc3RpY3Muc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lu
cy5hZGQobWFpbkZyYW1lUHJpbWFyeURvbWFpbik7CiAgICAgaWYgKHN1YmZyYW1lVW5kZXJUb3BG
cmFtZU9yaWdpbnNSZXN1bHQuaXNOZXdFbnRyeSkKICAgICAgICAgc2NoZWR1bGVOb3RpZmljYXRp
b25JZk5lZWRlZCgpOwpAQCAtMTU4LDYgKzE2NCw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OmxvZ1N1YnJlc291cmMKICAgICBib29sIHNob3VsZENhbGxOb3RpZmljYXRpb25DYWxsYmFj
ayA9IGZhbHNlOwogICAgIHsKICAgICAgICAgYXV0byYgdGFyZ2V0U3RhdGlzdGljcyA9IGVuc3Vy
ZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4odGFyZ2V0UHJpbWFyeURvbWFpbik7
CisgICAgICAgIHRhcmdldFN0YXRpc3RpY3MubGFzdFNlZW4gPSByZWR1Y2VUb0hvdXJseVRpbWVS
ZXNvbHV0aW9uKFdhbGxUaW1lOjpub3coKSk7CiAgICAgICAgIGlmICh0YXJnZXRTdGF0aXN0aWNz
LnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMuYWRkKG1haW5GcmFtZVByaW1hcnlEb21h
aW4pLmlzTmV3RW50cnkpCiAgICAgICAgICAgICBzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJh
Y2sgPSB0cnVlOwogICAgIH0KQEAgLTE5NywxNSArMjA0LDExIEBAIHZvaWQgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OmxvZ1dlYlNvY2tldEwKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byYgdGFy
Z2V0U3RhdGlzdGljcyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4o
dGFyZ2V0UHJpbWFyeURvbWFpbik7CisgICAgdGFyZ2V0U3RhdGlzdGljcy5sYXN0U2VlbiA9IHJl
ZHVjZVRvSG91cmx5VGltZVJlc29sdXRpb24oV2FsbFRpbWU6Om5vdygpKTsKICAgICBpZiAodGFy
Z2V0U3RhdGlzdGljcy5zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zLmFkZChtYWluRnJh
bWVQcmltYXJ5RG9tYWluKS5pc05ld0VudHJ5KQogICAgICAgICBzY2hlZHVsZU5vdGlmaWNhdGlv
bklmTmVlZGVkKCk7CiB9CiAKLXN0YXRpYyBXYWxsVGltZSByZWR1Y2VUaW1lUmVzb2x1dGlvbihX
YWxsVGltZSB0aW1lKQotewotICAgIHJldHVybiBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoc3Rk
OjpmbG9vcih0aW1lLnNlY29uZHNTaW5jZUVwb2NoKCkgLyB0aW1lc3RhbXBSZXNvbHV0aW9uKSAq
IHRpbWVzdGFtcFJlc29sdXRpb24uc2Vjb25kcygpKTsKLX0KLQogdm9pZCBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6bG9nVXNlckludGVyYWN0aW9uV2l0aFJlZHVjZWRUaW1lUmVzb2x1dGlvbihjb25z
dCBEb2N1bWVudCYgZG9jdW1lbnQpCiB7CiAgICAgQVNTRVJUKGRvY3VtZW50LnBhZ2UoKSk7CkBA
IC0yMTgsMTEgKzIyMSwxMiBAQCB2b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dVc2VySW50
ZXJhCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBlbnN1cmVSZXNv
dXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1hcnlEb21haW4odXJsKSk7Ci0gICAg
YXV0byBuZXdUaW1lID0gcmVkdWNlVGltZVJlc29sdXRpb24oV2FsbFRpbWU6Om5vdygpKTsKKyAg
ICBhdXRvIG5ld1RpbWUgPSByZWR1Y2VUb0hvdXJseVRpbWVSZXNvbHV0aW9uKFdhbGxUaW1lOjpu
b3coKSk7CiAgICAgaWYgKG5ld1RpbWUgPT0gc3RhdGlzdGljcy5tb3N0UmVjZW50VXNlckludGVy
YWN0aW9uVGltZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc3RhdGlzdGljcy5oYWRVc2VySW50
ZXJhY3Rpb24gPSB0cnVlOworICAgIHN0YXRpc3RpY3MubGFzdFNlZW4gPSBuZXdUaW1lOwogICAg
IHN0YXRpc3RpY3MubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgPSBuZXdUaW1lOwogCiAg
ICAgc2NoZWR1bGVOb3RpZmljYXRpb25JZk5lZWRlZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
bG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmNwcAkocmV2aXNpb24gMjE5MzE2
KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw4IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
czo6ZW5jb2RlKEtleWUKIHsKICAgICBlbmNvZGVyLmVuY29kZVN0cmluZygiUHJldmFsZW50UmVz
b3VyY2VPcmlnaW4iLCBoaWdoTGV2ZWxEb21haW4pOwogICAgIAorICAgIGVuY29kZXIuZW5jb2Rl
RG91YmxlKCJsYXN0U2VlbiIsIGxhc3RTZWVuLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSk7
CisgICAgCiAgICAgLy8gVXNlciBpbnRlcmFjdGlvbgogICAgIGVuY29kZXIuZW5jb2RlQm9vbCgi
aGFkVXNlckludGVyYWN0aW9uIiwgaGFkVXNlckludGVyYWN0aW9uKTsKICAgICBlbmNvZGVyLmVu
Y29kZURvdWJsZSgibW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiIsIG1vc3RSZWNlbnRVc2VySW50
ZXJhY3Rpb25UaW1lLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSk7CkBAIC0xMTQsNiArMTE2
LDExIEBAIGJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6ZGVjb2RlKEtleWUKICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlQm9vbCgiZ3JhbmRmYXRoZXJlZCIsIGdyYW5kZmF0aGVyZWQpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBkb3VibGUgbGFzdFNlZW5UaW1lQXNEb3VibGU7Cisg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZURvdWJsZSgibGFzdFNlZW4iLCBsYXN0U2VlblRpbWVBc0Rv
dWJsZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBsYXN0U2VlbiA9IFdhbGxUaW1lOjpm
cm9tUmF3U2Vjb25kcyhsYXN0U2VlblRpbWVBc0RvdWJsZSk7CisgICAgCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKQEAgLTE0Nyw2ICsxNTQsMTAgQEAgU3RyaW5nIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3M6OnRvU3RyaW5nKAogewogICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKICAgICAKKyAgICBi
dWlsZGVyLmFwcGVuZExpdGVyYWwoImxhc3RTZWVuIik7CisgICAgYnVpbGRlci5hcHBlbmROdW1i
ZXIobGFzdFNlZW4uc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKTsKKyAgICBidWlsZGVyLmFw
cGVuZCgnXG4nKTsKKyAgICAKICAgICAvLyBVc2VyIGludGVyYWN0aW9uCiAgICAgYXBwZW5kQm9v
bGVhbihidWlsZGVyLCAiaGFkVXNlckludGVyYWN0aW9uIiwgaGFkVXNlckludGVyYWN0aW9uKTsK
ICAgICBidWlsZGVyLmFwcGVuZCgnXG4nKTsKQEAgLTE4OSw2ICsyMDAsOSBAQCB2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3M6Om1lcmdlKGNvbnN0CiB7CiAgICAgQVNTRVJUKG90aGVyLmhpZ2hM
ZXZlbERvbWFpbiA9PSBoaWdoTGV2ZWxEb21haW4pOwogCisgICAgaWYgKGxhc3RTZWVuIDwgb3Ro
ZXIubGFzdFNlZW4pCisgICAgICAgIGxhc3RTZWVuID0gb3RoZXIubGFzdFNlZW47CisgICAgCiAg
ICAgaWYgKCFvdGhlci5oYWRVc2VySW50ZXJhY3Rpb24pIHsKICAgICAgICAgLy8gSWYgdXNlciBp
bnRlcmFjdGlvbiBoYXMgYmVlbiByZXNldCBkbyBzbyBoZXJlIHRvby4KICAgICAgICAgLy8gRWxz
ZSwgZG8gbm90aGluZy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRT
dGF0aXN0aWNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNl
TG9hZFN0YXRpc3RpY3MuaAkocmV2aXNpb24gMjE5MzE2KQorKysgU291cmNlL1dlYkNvcmUvbG9h
ZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEs
OCBAQCBzdHJ1Y3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyB7CiAKICAgICBTdHJpbmcgaGlnaExl
dmVsRG9tYWluOwogCisgICAgV2FsbFRpbWUgbGFzdFNlZW47CisgICAgCiAgICAgLy8gVXNlciBp
bnRlcmFjdGlvbgogICAgIGJvb2wgaGFkVXNlckludGVyYWN0aW9uIHsgZmFsc2UgfTsKICAgICAv
LyBUaW1lc3RhbXAuIERlZmF1bHQgdmFsdWUgaXMgbmVnYXRpdmUsIDAgbWVhbnMgaXQgd2FzIHJl
c2V0LgpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMjE5MzE2KQorKysgU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDkgQEAKKzIwMTctMDctMTAgIEpv
aG4gV2lsYW5kZXIgIDx3aWxhbmRlckBhcHBsZS5jb20+CisKKyAgICAgICAgUmVzb3VyY2UgTG9h
ZCBTdGF0aXN0aWNzOiBQcnVuZSBzdGF0aXN0aWNzIGluIG9yZGVycyBvZiBpbXBvcnRhbmNlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQyMTUKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMzMTY0NDAzPgorCisgICAgICAgIFJldmlld2VkIGJ5IENo
cmlzIER1bWV6LgorCisgICAgICAgIE5ldyBmdW5jdGlvbmFsaXR5LiBQcnVuZXMgc3RhdGlzdGlj
cyBpbiB0aGlzIG9yZGVyOgorICAgICAgICAxLiBOb24tcHJldmFsZW50IHJlc291cmNlcyB3aXRo
b3V0IHVzZXIgaW50ZXJhY3Rpb24uCisgICAgICAgIDIuIFByZXZhbGVudCByZXNvdXJjZXMgd2l0
aG91dCB1c2VyIGludGVyYWN0aW9uLgorICAgICAgICAzLiBOb24tcHJldmFsZW50IHJlc291cmNl
cyB3aXRoIHVzZXIgaW50ZXJhY3Rpb24uCisgICAgICAgIDQuIFByZXZhbGVudCByZXNvdXJjZXMg
d2l0aCB1c2VyIGludGVyYWN0aW9uLgorCisgICAgICAgICogU2hhcmVkL1dlYkNvcmVBcmd1bWVu
dENvZGVycy5jcHA6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8UmVzb3VyY2VMb2FkU3Rh
dGlzdGljcz46OmVuY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8UmVzb3VyY2VM
b2FkU3RhdGlzdGljcz46OmRlY29kZSk6CisgICAgICAgICAgICBBZGRlZCB0aW1lc3RhbXAgZmll
bGQgbGFzdFNlZW4uCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRh
U3RvcmUubW06CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFTdG9yZSBfcmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1NldExhc3RTZWVuOmZvckhvc3Q6XSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFT
dG9yZSBfcmVzb3VyY2VMb2FkU3RhdGlzdGljc1NldE1heFN0YXRpc3RpY3NFbnRyaWVzOl0pOgor
ICAgICAgICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTZXRQ
cnVuZUVudHJpZXNEb3duVG86XSk6CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFTdG9yZSBfcmVz
b3VyY2VMb2FkU3RhdGlzdGljc1Jlc2V0VG9Db25zaXN0ZW50U3RhdGVdKToKKyAgICAgICAgICAg
IFRlc3QgaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YnNpdGVEYXRhU3RvcmVQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL1N0b3JhZ2UvUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpzZXRNYXhTdGF0aXN0aWNzRW50cmllcyk6CisgICAgICAgICAg
ICBUZXN0IGluZnJhc3RydWN0dXJlLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnNldFBydW5lRW50cmllc0Rvd25Ubyk6CisgICAgICAgICAgICBUZXN0IGlu
ZnJhc3RydWN0dXJlLgorICAgICAgICAoV2ViS2l0Ojpzb3J0QW5kUHJ1bmUpOgorICAgICAgICAg
ICAgQ29udmVuaWVuY2UgZnVuY3Rpb24uCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6cHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQpOgorICAgICAgICAgICAgVGhl
IG5ldyBwcnVuaW5nIGZ1bmN0aW9uLgorICAgICAgICAqIFVJUHJvY2Vzcy9TdG9yYWdlL1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMpOgorICAg
ICAgICAgICAgTm93IGNhbGxzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJ1bmVTdGF0
aXN0aWNzSWZOZWVkZWQoKS4KKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpzZXRMYXN0U2Vlbik6CisgICAgICAgICAgICBUZXN0IGluZnJhc3RydWN0dXJl
LgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldE1h
eFN0YXRpc3RpY3NFbnRyaWVzKToKKyAgICAgICAgICAgIFRlc3QgaW5mcmFzdHJ1Y3R1cmUuCisg
ICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJ1bmVF
bnRyaWVzRG93blRvKToKKyAgICAgICAgICAgIFRlc3QgaW5mcmFzdHJ1Y3R1cmUuCisgICAgICAg
ICogVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oOgorCiAyMDE3LTA3
LTEwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgW2lPU10gX2Rp
ZENvbW1pdExheWVyVHJlZSBzaG91bGQgYXZvaWQgY2FsbGluZyBbc2Nyb2xsVmlldyBzZXRab29t
U2NhbGVdIHVubmVjZXNzYXJpbHkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3Jl
QXJndW1lbnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9X
ZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCShyZXZpc2lvbiAyMTkzMTYpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjI0Miw2ICsyMjQyLDggQEAgdm9pZCBBcmd1bWVudENvZGVyPFJlc291cmNlTG9hZFN0YXRpc3Rp
YwogewogICAgIGVuY29kZXIgPDwgc3RhdGlzdGljcy5oaWdoTGV2ZWxEb21haW47CiAgICAgCisg
ICAgZW5jb2RlciA8PCBzdGF0aXN0aWNzLmxhc3RTZWVuLnNlY29uZHNTaW5jZUVwb2NoKCkudmFs
dWUoKTsKKyAgICAKICAgICAvLyBVc2VyIGludGVyYWN0aW9uCiAgICAgZW5jb2RlciA8PCBzdGF0
aXN0aWNzLmhhZFVzZXJJbnRlcmFjdGlvbjsKICAgICBlbmNvZGVyIDw8IHN0YXRpc3RpY3MubW9z
dFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpOwpA
QCAtMjI2NCw2ICsyMjY2LDExIEBAIGJvb2wgQXJndW1lbnRDb2RlcjxSZXNvdXJjZUxvYWRTdGF0
aXN0aWMKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0YXRpc3RpY3MuaGlnaExldmVsRG9tYWlu
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAorICAgIGRvdWJsZSBsYXN0U2VlblRpbWVB
c0RvdWJsZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGxhc3RTZWVuVGltZUFzRG91YmxlKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHN0YXRpc3RpY3MubGFzdFNlZW4gPSBXYWxsVGlt
ZTo6ZnJvbVJhd1NlY29uZHMobGFzdFNlZW5UaW1lQXNEb3VibGUpOworICAgIAogICAgIC8vIFVz
ZXIgaW50ZXJhY3Rpb24KICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0YXRpc3RpY3MuaGFkVXNl
ckludGVyYWN0aW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZS5jcHAJKHJldmlzaW9uIDIxOTMxNikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3
ICs1MCw4IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjb25zdGV4cHIgU2Vjb25kcyBtaW5pbXVt
U3RhdGlzdGljc0ZpbGVXcml0ZUludGVydmFsIHsgNV9taW4gfTsKIGNvbnN0ZXhwciB1bnNpZ25l
ZCBvcGVyYXRpbmdEYXRlc1dpbmRvdyB7IDMwIH07Ci1jb25zdGV4cHIgdW5zaWduZWQgc3RhdGlz
dGljc01vZGVsVmVyc2lvbiB7IDYgfTsKK2NvbnN0ZXhwciB1bnNpZ25lZCBzdGF0aXN0aWNzTW9k
ZWxWZXJzaW9uIHsgNyB9OworY29uc3RleHByIHVuc2lnbmVkIG1heEltcG9ydGFuY2UgeyAzIH07
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBpbmxpbmUgU3RyaW5nIHByaW1hcnlEb21h
aW4oY29uc3QgVCYgdmFsdWUpCiB7CkBAIC0xNDYsNiArMTQ3LDggQEAgdm9pZCBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnBybwogICAgICAgICB9CiAgICAgICAgIHJlbW92ZURhdGFS
ZWNvcmRzKCk7CiAgICAgICAgIAorICAgICAgICBwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCgpOwor
CiAgICAgICAgIGlmIChtX3Nob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5u
ZWQpIHsKICAgICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbXSB7CiAgICAgICAg
ICAgICAgICAgV2ViUHJvY2Vzc1Byb3h5Ojpub3RpZnlQYWdlU3RhdGlzdGljc0FuZERhdGFSZWNv
cmRzUHJvY2Vzc2VkKCk7CkBAIC01MDAsNiArNTAzLDE3IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpoYXMKICAgICB9KTsKIH0KIAordm9pZCBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnNldExhc3RTZWVuKGNvbnN0IFVSTCYgdXJsLCBTZWNvbmRzIHNlY29u
ZHMpCit7CisgICAgaWYgKHVybC5pc0JsYW5rVVJMKCkgfHwgdXJsLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIG1fc3RhdGlzdGljc1F1ZXVlLT5kaXNwYXRjaChbdGhpcywg
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCB1cmwgPSB1cmwuaXNvbGF0ZWRDb3B5KCks
IHNlY29uZHNdIHsKKyAgICAgICAgYXV0byYgc3RhdGlzdGljcyA9IGVuc3VyZVJlc291cmNlU3Rh
dGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJpbWFyeURvbWFpbih1cmwpKTsKKyAgICAgICAgc3Rh
dGlzdGljcy5sYXN0U2VlbiA9IFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhzZWNvbmRzLnNlY29u
ZHMoKSk7CisgICAgfSk7Cit9CisgICAgCiB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwpCiB7CiAgICAgaWYgKHVy
bC5pc0JsYW5rVVJMKCkgfHwgdXJsLmlzRW1wdHkoKSkKQEAgLTgzMyw3ICs4NDcsNyBAQCB2b2lk
IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6dXBkCiAgICAgZm9yIChhdXRvJiBkb21h
aW4gOiBkb21haW5zVG9BZGQpCiAgICAgICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclBy
aW1hcnlEb21haW4oZG9tYWluKS5pc01hcmtlZEZvckNvb2tpZVBhcnRpdGlvbmluZyA9IHRydWU7
CiB9Ci0KKyAgICAKIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcm9jZXNz
U3RhdGlzdGljcyhjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQgKGNvbnN0IFJlc291cmNlTG9hZFN0
YXRpc3RpY3MmKT4mIHByb2Nlc3NGdW5jdGlvbikgY29uc3QKIHsKICAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKQEAgLTkwNCw0ICs5MTgsNjIgQEAgYm9vbCBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OmhhcwogICAgIHJldHVybiBmYWxzZTsKIH0KICAgICAKK3ZvaWQgV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRNYXhTdGF0aXN0aWNzRW50cmllcyhzaXpl
X3QgbWF4aW11bUVudHJ5Q291bnQpCit7CisgICAgbV9tYXhTdGF0aXN0aWNzRW50cmllcyA9IG1h
eGltdW1FbnRyeUNvdW50OworfQorICAgIAordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OnNldFBydW5lRW50cmllc0Rvd25UbyhzaXplX3QgcHJ1bmVUYXJnZXRDb3VudCkKK3sK
KyAgICBtX3BydW5lRW50cmllc0Rvd25UbyA9IHBydW5lVGFyZ2V0Q291bnQ7Cit9CisgICAgCitz
dHJ1Y3QgU3RhdGlzdGljc0xhc3RTZWVuIHsKKyAgICBTdHJpbmcgdG9wUHJpdmF0ZWx5T3duZWRE
b21haW47CisgICAgV2FsbFRpbWUgbGFzdFNlZW47Cit9OworICAgIAorc3RhdGljIHZvaWQgcHJ1
bmVSZXNvdXJjZXMoSGFzaE1hcDxTdHJpbmcsIFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3M+JiBzdGF0aXN0aWNzTWFwLCBWZWN0b3I8U3RhdGlzdGljc0xhc3RTZWVuPiYgc3RhdGlzdGlj
c1RvUHJ1bmUsIHNpemVfdCYgbnVtYmVyT2ZFbnRyaWVzVG9QcnVuZSkKK3sKKyAgICBpZiAoc3Rh
dGlzdGljc1RvUHJ1bmUuc2l6ZSgpID4gbnVtYmVyT2ZFbnRyaWVzVG9QcnVuZSkgeworICAgICAg
ICBzdGQ6OnNvcnQoc3RhdGlzdGljc1RvUHJ1bmUuYmVnaW4oKSwgc3RhdGlzdGljc1RvUHJ1bmUu
ZW5kKCksIFtdKGNvbnN0IFN0YXRpc3RpY3NMYXN0U2VlbiYgYSwgY29uc3QgU3RhdGlzdGljc0xh
c3RTZWVuJiBiKSB7CisgICAgICAgICAgICByZXR1cm4gYS5sYXN0U2VlbiA8IGIubGFzdFNlZW47
CisgICAgICAgIH0pOworICAgIH0KKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gMCwgZW5kID0g
c3RkOjptaW4obnVtYmVyT2ZFbnRyaWVzVG9QcnVuZSwgc3RhdGlzdGljc1RvUHJ1bmUuc2l6ZSgp
KTsgaSAhPSBlbmQ7ICsraSkKKyAgICAgICAgc3RhdGlzdGljc01hcC5yZW1vdmUoc3RhdGlzdGlj
c1RvUHJ1bmVbaV0udG9wUHJpdmF0ZWx5T3duZWREb21haW4pOworfQorICAgIAorc3RhdGljIHVu
c2lnbmVkIGNvbXB1dGVJbXBvcnRhbmNlKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHJl
c291cmNlU3RhdGlzdGljKQoreworICAgIHVuc2lnbmVkIGltcG9ydGFuY2UgPSBtYXhJbXBvcnRh
bmNlOworICAgIGlmICghcmVzb3VyY2VTdGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNvdXJjZSkKKyAg
ICAgICAgaW1wb3J0YW5jZSAtPSAxOworICAgIGlmICghcmVzb3VyY2VTdGF0aXN0aWMuaGFkVXNl
ckludGVyYWN0aW9uKQorICAgICAgICBpbXBvcnRhbmNlIC09IDI7CisgICAgcmV0dXJuIGltcG9y
dGFuY2U7Cit9CisgICAgCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJ1
bmVTdGF0aXN0aWNzSWZOZWVkZWQoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OworICAgIGlmIChtX3Jlc291cmNlU3RhdGlzdGljc01hcC5zaXplKCkgPD0gbV9tYXhTdGF0aXN0
aWNzRW50cmllcykKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fcHJ1bmVFbnRyaWVz
RG93blRvIDw9IG1fbWF4U3RhdGlzdGljc0VudHJpZXMpOworCisgICAgc2l6ZV90IG51bWJlck9m
RW50cmllc0xlZnRUb1BydW5lID0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuc2l6ZSgpIC0gbV9w
cnVuZUVudHJpZXNEb3duVG87CisgICAgQVNTRVJUKG51bWJlck9mRW50cmllc0xlZnRUb1BydW5l
KTsKKyAgICAKKyAgICBWZWN0b3I8U3RhdGlzdGljc0xhc3RTZWVuPiByZXNvdXJjZXNUb1BydW5l
UGVySW1wb3J0YW5jZVttYXhJbXBvcnRhbmNlICsgMV07CisgICAgZm9yIChhdXRvJiByZXNvdXJj
ZVN0YXRpc3RpYyA6IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnZhbHVlcygpKQorICAgICAgICBy
ZXNvdXJjZXNUb1BydW5lUGVySW1wb3J0YW5jZVtjb21wdXRlSW1wb3J0YW5jZShyZXNvdXJjZVN0
YXRpc3RpYyldLmFwcGVuZCh7IHJlc291cmNlU3RhdGlzdGljLmhpZ2hMZXZlbERvbWFpbiwgcmVz
b3VyY2VTdGF0aXN0aWMubGFzdFNlZW4gfSk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpbXBv
cnRhbmNlID0gMDsgbnVtYmVyT2ZFbnRyaWVzTGVmdFRvUHJ1bmUgJiYgaW1wb3J0YW5jZSA8PSBt
YXhJbXBvcnRhbmNlOyArK2ltcG9ydGFuY2UpCisgICAgICAgIHBydW5lUmVzb3VyY2VzKG1fcmVz
b3VyY2VTdGF0aXN0aWNzTWFwLCByZXNvdXJjZXNUb1BydW5lUGVySW1wb3J0YW5jZVtpbXBvcnRh
bmNlXSwgbnVtYmVyT2ZFbnRyaWVzTGVmdFRvUHJ1bmUpOworCisgICAgQVNTRVJUKCFudW1iZXJP
ZkVudHJpZXNMZWZ0VG9QcnVuZSk7Cit9CisgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlLmgJKHJldmlzaW9uIDIxOTMxNikKKysrIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAkod29ya2luZyBjb3B5
KQpAQCAtNzksNiArNzksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBsb2dVc2VySW50ZXJhY3Rpb24o
Y29uc3QgV2ViQ29yZTo6VVJMJik7CiAgICAgdm9pZCBjbGVhclVzZXJJbnRlcmFjdGlvbihjb25z
dCBXZWJDb3JlOjpVUkwmKTsKICAgICB2b2lkIGhhc0hhZFVzZXJJbnRlcmFjdGlvbihjb25zdCBX
ZWJDb3JlOjpVUkwmLCBXVEY6OkZ1bmN0aW9uPHZvaWQgKGJvb2wpPiYmKTsKKyAgICB2b2lkIHNl
dExhc3RTZWVuKGNvbnN0IFdlYkNvcmU6OlVSTCYsIFNlY29uZHMpOwogICAgIHZvaWQgc2V0UHJl
dmFsZW50UmVzb3VyY2UoY29uc3QgV2ViQ29yZTo6VVJMJik7CiAgICAgdm9pZCBpc1ByZXZhbGVu
dFJlc291cmNlKGNvbnN0IFdlYkNvcmU6OlVSTCYsIFdURjo6RnVuY3Rpb248dm9pZCAoYm9vbCk+
JiYpOwogICAgIHZvaWQgY2xlYXJQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBXZWJDb3JlOjpVUkwm
KTsKQEAgLTEwMCw5ICsxMDEsMTIgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VGltZVRvTGl2ZUNv
b2tpZVBhcnRpdGlvbkZyZWUoU2Vjb25kcyk7CiAgICAgdm9pZCBzZXRNaW5pbXVtVGltZUJldHdl
ZW5EYXRhUmVjb3Jkc1JlbW92YWwoU2Vjb25kcyk7CiAgICAgdm9pZCBzZXRHcmFuZGZhdGhlcmlu
Z1RpbWUoU2Vjb25kcyk7Ci0KKyAgICB2b2lkIHNldE1heFN0YXRpc3RpY3NFbnRyaWVzKHNpemVf
dCk7CisgICAgdm9pZCBzZXRQcnVuZUVudHJpZXNEb3duVG8oc2l6ZV90KTsKKyAgICAKICAgICB2
b2lkIHByb2Nlc3NTdGF0aXN0aWNzKGNvbnN0IFdURjo6RnVuY3Rpb248dm9pZCAoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpPiYpIGNvbnN0OwotCisgICAgdm9pZCBwcnVu
ZVN0YXRpc3RpY3NJZk5lZWRlZCgpOworICAgIAogcHJpdmF0ZToKICAgICBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUoY29uc3QgU3RyaW5nJiwgVXBkYXRlQ29va2llUGFydGl0aW9uaW5n
Rm9yRG9tYWluc0hhbmRsZXImJik7CiAKQEAgLTE3Miw2ICsxNzYsOCBAQCBwcml2YXRlOgogICAg
IHN0ZDo6b3B0aW9uYWw8U2Vjb25kcz4gbV90aW1lVG9MaXZlVXNlckludGVyYWN0aW9uOwogICAg
IFNlY29uZHMgbV90aW1lVG9MaXZlQ29va2llUGFydGl0aW9uRnJlZSB7IDI0X2ggfTsKICAgICBT
ZWNvbmRzIG1fZ3JhbmRmYXRoZXJpbmdUaW1lIHsgMV9oIH07CisgICAgc2l6ZV90IG1fbWF4U3Rh
dGlzdGljc0VudHJpZXMgeyAxMDAwIH07CisgICAgc2l6ZV90IG1fcHJ1bmVFbnRyaWVzRG93blRv
IHsgODAwIH07CiAgICAgYm9vbCBtX2RhdGFSZWNvcmRzQmVpbmdSZW1vdmVkIHsgZmFsc2UgfTsK
ICAgICBib29sIG1fZGlkU2NoZWR1bGVXcml0ZSB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3Nob3Vs
ZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQgeyBmYWxzZSB9OwpJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNp
dGVEYXRhU3RvcmUubW0JKHJldmlzaW9uIDIxOTMxNikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0y
MDcsNiArMjA3LDE1IEBAIC0gKHZvaWQpX3NldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGUK
ICAgICBfd2Vic2l0ZURhdGFTdG9yZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnNldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NFbmFibGVkKGVuYWJsZWQpOwogfQogCistICh2b2lkKV9yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU2V0TGFzdFNlZW46KGRvdWJsZSlzZWNvbmRzIGZvckhvc3Q6KE5TU3RyaW5nICop
aG9zdAoreworICAgIGF1dG8qIHN0b3JlID0gX3dlYnNpdGVEYXRhU3RvcmUtPndlYnNpdGVEYXRh
U3RvcmUoKS5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCk7CisgICAgaWYgKCFzdG9yZSkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIHN0b3JlLT5zZXRMYXN0U2VlbihVUkwoVVJMKCksIGhvc3Qp
LCBTZWNvbmRzIHsgc2Vjb25kcyB9KTsKK30KKwogLSAodm9pZClfcmVzb3VyY2VMb2FkU3RhdGlz
dGljc1NldElzUHJldmFsZW50UmVzb3VyY2U6KEJPT0wpdmFsdWUgZm9ySG9zdDooTlNTdHJpbmcg
Kilob3N0CiB7CiAgICAgYXV0byogc3RvcmUgPSBfd2Vic2l0ZURhdGFTdG9yZS0+d2Vic2l0ZURh
dGFTdG9yZSgpLnJlc291cmNlTG9hZFN0YXRpc3RpY3MoKTsKQEAgLTM0NSw2ICszNTQsMjQgQEAg
LSAodm9pZClfcmVzb3VyY2VMb2FkU3RhdGlzdGljc1NldEdyYW5kZgogICAgIHN0b3JlLT5zZXRH
cmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyB7c2Vjb25kcyB9KTsKIH0KIAorLSAodm9pZClfcmVz
b3VyY2VMb2FkU3RhdGlzdGljc1NldE1heFN0YXRpc3RpY3NFbnRyaWVzOihzaXplX3QpZW50cmll
cworeworICAgIGF1dG8qIHN0b3JlID0gX3dlYnNpdGVEYXRhU3RvcmUtPndlYnNpdGVEYXRhU3Rv
cmUoKS5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCk7CisgICAgaWYgKCFzdG9yZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgc3RvcmUtPnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKGVudHJpZXMpOwor
fQorCistICh2b2lkKV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0UHJ1bmVFbnRyaWVzRG93blRv
OihzaXplX3QpZW50cmllcworeworICAgIGF1dG8qIHN0b3JlID0gX3dlYnNpdGVEYXRhU3RvcmUt
PndlYnNpdGVEYXRhU3RvcmUoKS5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCk7CisgICAgaWYgKCFz
dG9yZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RvcmUtPnNldFBydW5lRW50cmllc0Rvd25U
byhlbnRyaWVzKTsKK30KKwogLSAodm9pZClfcmVzb3VyY2VMb2FkU3RhdGlzdGljc1Byb2Nlc3NT
dGF0aXN0aWNzQW5kRGF0YVJlY29yZHMKIHsKICAgICBhdXRvKiBzdG9yZSA9IF93ZWJzaXRlRGF0
YVN0b3JlLT53ZWJzaXRlRGF0YVN0b3JlKCkucmVzb3VyY2VMb2FkU3RhdGlzdGljcygpOwpAQCAt
NDQxLDYgKzQ2OCw4IEBAIC0gKHZvaWQpX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NSZXNldFRvQ28K
ICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IFRoZXNlIG5lZWRzIHRvIG1hdGNoIHRo
ZSBkZWZhdWx0IGRhdGEgbWVtYmVyIHZhbHVlcyBpbiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCB3
aGljaCBpcyBmcmFnaWxlLgorICAgIHN0b3JlLT5zZXRNYXhTdGF0aXN0aWNzRW50cmllcygxMDAw
KTsKKyAgICBzdG9yZS0+c2V0UHJ1bmVFbnRyaWVzRG93blRvKDgwMCk7CiAgICAgc3RvcmUtPnNl
dFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oc3RkOjpudWxsb3B0KTsKICAgICBzdG9yZS0+c2V0
VGltZVRvTGl2ZUNvb2tpZVBhcnRpdGlvbkZyZWUoMjRfaCk7CiAgICAgc3RvcmUtPnNldE1pbmlt
dW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCgxX2gpOwpJbmRleDogU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRh
U3RvcmVQcml2YXRlLmgJKHJldmlzaW9uIDIxOTMxNikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NCw2ICs0NCw3IEBAIHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBfV0tXZWJz
aXQKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NFbmFibGVkOikgQk9PTCBfcmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQgV0tfQVBJX0FW
QUlMQUJMRShtYWNvc3goMTAuMTIpLCBpb3MoMTAuMCkpOwogCiAvLyBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzIFNQSSBmb3IgdGVzdGluZy4KKy0gKHZvaWQpX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NT
ZXRMYXN0U2VlbjooZG91YmxlKXNlY29uZHMgZm9ySG9zdDooTlNTdHJpbmcgKilob3N0IFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogLSAodm9p
ZClfcmVzb3VyY2VMb2FkU3RhdGlzdGljc1NldElzUHJldmFsZW50UmVzb3VyY2U6KEJPT0wpdmFs
dWUgZm9ySG9zdDooTlNTdHJpbmcgKilob3N0IFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01B
Q19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogLSAodm9pZClfcmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0lzUHJldmFsZW50UmVzb3VyY2U6KE5TU3RyaW5nICopaG9zdCBjb21wbGV0aW9uSGFuZGxlcjoo
dm9pZCAoXikoQk9PTCkpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3go
V0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAtICh2b2lkKV9yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU2V0SGFkVXNlckludGVyYWN0aW9uOihCT09MKXZhbHVlIGZvckhvc3Q6KE5TU3RyaW5n
ICopaG9zdCBXS19BUElfQVZBSUxBQkxFKG1hY29zeChXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19U
QkEpKTsKQEAgLTU3LDYgKzU4LDggQEAgdHlwZWRlZiBOU19PUFRJT05TKE5TVUludGVnZXIsIF9X
S1dlYnNpdAogLSAodm9pZClfcmVzb3VyY2VMb2FkU3RhdGlzdGljc1NldFRpbWVUb0xpdmVDb29r
aWVQYXJ0aXRpb25GcmVlOihkb3VibGUpc2Vjb25kcyBXS19BUElfQVZBSUxBQkxFKG1hY29zeChX
S19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKIC0gKHZvaWQpX3Jlc291cmNlTG9hZFN0YXRp
c3RpY3NTZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWw6KGRvdWJsZSlzZWNv
bmRzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkp
OwogLSAodm9pZClfcmVzb3VyY2VMb2FkU3RhdGlzdGljc1NldEdyYW5kZmF0aGVyaW5nVGltZToo
ZG91YmxlKXNlY29uZHMgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhX
S19JT1NfVEJBKSk7CistICh2b2lkKV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU2V0TWF4U3RhdGlz
dGljc0VudHJpZXM6KHNpemVfdCllbnRyaWVzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01B
Q19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworLSAodm9pZClfcmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1NldFBydW5lRW50cmllc0Rvd25Ubzooc2l6ZV90KWVudHJpZXMgV0tfQVBJX0FWQUlMQUJMRSht
YWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAtICh2b2lkKV9yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzUHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3JkcyBXS19BUElfQVZBSUxB
QkxFKG1hY29zeChXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKIC0gKHZvaWQpX3Jlc291
cmNlTG9hZFN0YXRpc3RpY3NVcGRhdGVDb29raWVQYXJ0aXRpb25pbmcgV0tfQVBJX0FWQUlMQUJM
RShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAtICh2b2lkKV9yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU2V0U2hvdWxkUGFydGl0aW9uQ29va2llczooQk9PTCl2YWx1ZSBmb3JI
b3N0OihOU1N0cmluZyAqKWhvc3QgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSks
IGlvcyhXS19JT1NfVEJBKSk7CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMTkzMTYpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwzNCBAQAorMjAxNy0wNy0xMCAgSm9obiBXaWxhbmRlciAg
PHdpbGFuZGVyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXNvdXJjZSBMb2FkIFN0YXRpc3RpY3M6
IFBydW5lIHN0YXRpc3RpY3MgaW4gb3JkZXJzIG9mIGltcG9ydGFuY2UKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDIxNQorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vMzMxNjQ0MDM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQ2hyaXMgRHVtZXouCisK
KyAgICAgICAgTmVzdCBpbmZyYXN0cnVjdHVyZS4gQWRkcyB0aGVzZSBmdW5jdGlvbnM6CisgICAg
ICAgIDEuIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc0xhc3RTZWVuKCkKKyAgICAgICAgMi4gc2V0
U3RhdGlzdGljc01heFN0YXRpc3RpY3NFbnRyaWVzKCkKKyAgICAgICAgMy4gc2V0U3RhdGlzdGlj
c1BydW5lRW50cmllc0Rvd25UbygpCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsOgorICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OnNldFN0YXRpc3RpY3NMYXN0U2Vlbik6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OnNldFN0YXRpc3RpY3NNYXhTdGF0aXN0aWNzRW50cmllcyk6CisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OnNldFN0YXRpc3RpY3NQcnVuZUVudHJpZXNEb3duVG8pOgorICAgICAgICAqIFdlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oOgorICAgICAgICAqIFdlYktp
dFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJv
bGxlcjo6c2V0U3RhdGlzdGljc0xhc3RTZWVuKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xs
ZXI6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xs
ZXI6OnNldFBydW5lRW50cmllc0Rvd25Ubyk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0Q29udHJvbGxlci5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRp
b24uY3BwOgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9u
b3VzTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZSk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5l
ci9jb2NvYS9UZXN0Q29udHJvbGxlckNvY29hLm1tOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJv
bGxlcjo6c2V0U3RhdGlzdGljc0xhc3RTZWVuKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xs
ZXI6OnNldFN0YXRpc3RpY3NNYXhTdGF0aXN0aWNzRW50cmllcyk6CisgICAgICAgIChXVFI6OlRl
c3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzUHJ1bmVFbnRyaWVzRG93blRvKToKKwogMjAxNy0w
Ny0wMyAgQnJpYW4gQnVyZyAgPGJidXJnQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgUmVwbGF5
OiByZW1vdmUgc29tZSB1bnVzZWQgY29kZQpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDIxOTMxNikKKysrIFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjQ5LDYgKzIyNDks
MTAgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cmVtb3ZlQWxsU2Vzc2lvbkNyZQogCiAjaWYgIVBM
QVRGT1JNKENPQ09BKSB8fCAhV0tfQVBJX0VOQUJMRUQKIAordm9pZCBUZXN0Q29udHJvbGxlcjo6
c2V0U3RhdGlzdGljc0xhc3RTZWVuKFdLU3RyaW5nUmVmLCBkb3VibGUpCit7Cit9CisgICAgCiB2
b2lkIFRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoV0tTdHJp
bmdSZWYsIGJvb2wpCiB7CiB9CkBAIC0yMzMyLDYgKzIzMzYsMTQgQEAgdm9pZCBUZXN0Q29udHJv
bGxlcjo6c2V0U3RhdGlzdGljc0dyYW5kZgogewogfQogCit2b2lkIFRlc3RDb250cm9sbGVyOjpz
ZXRTdGF0aXN0aWNzTWF4U3RhdGlzdGljc0VudHJpZXModW5zaWduZWQpCit7Cit9CisgICAgCit2
b2lkIFRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzUHJ1bmVFbnRyaWVzRG93blRvKHVuc2ln
bmVkKQoreworfQorICAgIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6c3RhdGlzdGljc0NsZWFySW5N
ZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUoKQogewogfQpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9UZXN0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvVGVzdENvbnRyb2xsZXIuaAkocmV2aXNpb24gMjE5MzE2KQorKysgVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTAsNiArMTUwLDcg
QEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRTaG91bGREb3dubG9hZFVuZGlzcGxheWFibGVNSU1F
VHlwZXMoYm9vbCB2YWx1ZSkgeyBtX3Nob3VsZERvd25sb2FkVW5kaXNwbGF5YWJsZU1JTUVUeXBl
cyA9IHZhbHVlOyB9CiAKKyAgICB2b2lkIHNldFN0YXRpc3RpY3NMYXN0U2VlbihXS1N0cmluZ1Jl
ZiBob3N0TmFtZSwgZG91YmxlIHNlY29uZHMpOwogICAgIHZvaWQgc2V0U3RhdGlzdGljc1ByZXZh
bGVudFJlc291cmNlKFdLU3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIHZhbHVlKTsKICAgICBib29s
IGlzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKFdLU3RyaW5nUmVmIGhvc3ROYW1lKTsKICAg
ICB2b2lkIHNldFN0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24oV0tTdHJpbmdSZWYgaG9z
dE5hbWUsIGJvb2wgdmFsdWUpOwpAQCAtMTcwLDYgKzE3MSw4IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5UZWxlbWV0cnlXYXNDYXB0dXJlZChib29sIHZh
bHVlKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jk
c1JlbW92YWwoZG91YmxlKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NHcmFuZGZhdGhlcmluZ1Rp
bWUoZG91YmxlIHNlY29uZHMpOworICAgIHZvaWQgc2V0U3RhdGlzdGljc01heFN0YXRpc3RpY3NF
bnRyaWVzKHVuc2lnbmVkKTsKKyAgICB2b2lkIHNldFN0YXRpc3RpY3NQcnVuZUVudHJpZXNEb3du
VG8odW5zaWduZWQpOwogICAgIHZvaWQgc3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0
ZW50U3RvcmUoKTsKICAgICB2b2lkIHN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVu
dFN0b3JlTW9kaWZpZWRTaW5jZUhvdXJzKHVuc2lnbmVkKTsKICAgICB2b2lkIHN0YXRpc3RpY3NS
ZXNldFRvQ29uc2lzdGVudFN0YXRlKCk7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rl
c3RJbnZvY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rl
c3RJbnZvY2F0aW9uLmNwcAkocmV2aXNpb24gMjE5MzE2KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9UZXN0SW52b2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxMiw2ICs5MTIsMjEg
QEAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0SW52b2NhdGlvbjo6ZAogICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KIAorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc0xhc3RTZWVuIikpIHsKKyAgICAgICAgQVNTRVJU
KFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7Cisg
ICAgICAgIAorICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0g
c3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7CisgICAgICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZUtleShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSk7CisgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiB2YWx1ZUtleShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVmFs
dWUiKSk7CisgICAgICAgIAorICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19j
YXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGlj
dGlvbmFyeSwgaG9zdE5hbWVLZXkuZ2V0KCkpKTsKKyAgICAgICAgV0tEb3VibGVSZWYgdmFsdWUg
PSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNz
YWdlQm9keURpY3Rpb25hcnksIHZhbHVlS2V5LmdldCgpKSk7CisgICAgICAgIAorICAgICAgICBU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc0xhc3RTZWVuKGhvc3ROYW1l
LCBXS0RvdWJsZUdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICB9CisgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UiKSkgewogICAgICAg
ICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJ
RCgpKTsKIApAQCAtMTEwMSw2ICsxMTE2LDIwIEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVz
dEludm9jYXRpb246OmQKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIAorICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0TWF4U3Rh
dGlzdGljc0VudHJpZXMiKSkgeworICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJv
ZHkpID09IFdLVUludDY0R2V0VHlwZUlEKCkpOworICAgICAgICBXS1VJbnQ2NFJlZiBlbnRyaWVz
ID0gc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NNYXhTdGF0aXN0aWNzRW50cmllcyhX
S1VJbnQ2NEdldFZhbHVlKGVudHJpZXMpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
fQorICAgIAorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1l
LCAiU2V0UHJ1bmVFbnRyaWVzRG93blRvIikpIHsKKyAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlE
KG1lc3NhZ2VCb2R5KSA9PSBXS1VJbnQ2NEdldFR5cGVJRCgpKTsKKyAgICAgICAgV0tVSW50NjRS
ZWYgZW50cmllcyA9IHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihtZXNzYWdlQm9keSk7CisgICAg
ICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzUHJ1bmVFbnRyaWVz
RG93blRvKFdLVUludDY0R2V0VmFsdWUoZW50cmllcykpOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9CisgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVz
c2FnZU5hbWUsICJTdGF0aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSIpKSB7
CiAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zdGF0aXN0aWNzQ2xlYXJJbk1l
bW9yeUFuZFBlcnNpc3RlbnRTdG9yZSgpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKSW5kZXg6
IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVu
bmVyLmNwcAkocmV2aXNpb24gMjE5MzE2KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3NSw2ICsxMTc1
LDMxIEBAIHZvaWQgVGVzdFJ1bm5lcjo6Y2FsbERpZFJlbW92ZVN3aXBlU25hcHMKICAgICBjYWxs
VGVzdFJ1bm5lckNhbGxiYWNrKERpZFJlbW92ZVN3aXBlU25hcHNob3RDYWxsYmFja0lEKTsKIH0K
IAordm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzTGFzdFNlZW4oSlNTdHJpbmdSZWYgaG9z
dE5hbWUsIGRvdWJsZSBzZWNvbmRzKQoreworICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4+IGtleXM7CisgICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLVHlwZVJlZj4+IHZhbHVlczsK
KyAgICAKKyAgICBrZXlzLmFwcGVuZCh7IEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJIb3N0TmFtZSIpIH0pOworICAgIHZhbHVlcy5hcHBlbmQoeyBBZG9wdFdLLCBXS1N0
cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkgfSk7CisgICAgCisgICAga2V5cy5hcHBl
bmQoeyBBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVmFsdWUiKSB9KTsK
KyAgICB2YWx1ZXMuYXBwZW5kKHsgQWRvcHRXSywgV0tEb3VibGVDcmVhdGUoc2Vjb25kcykgfSk7
CisgICAgCisgICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzKGtleXMuc2l6ZSgpKTsKKyAg
ICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXModmFsdWVzLnNpemUoKSk7CisgICAgCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHJhd0tl
eXNbaV0gPSBrZXlzW2ldLmdldCgpOworICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0u
Z2V0KCk7CisgICAgfQorICAgIAorICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGlj
c0xhc3RTZWVuIikpOworICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJv
ZHkoQWRvcHRXSywgV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMu
ZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOworICAgIAorICAgIFdLQnVuZGxlUG9zdFN5bmNocm9u
b3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7Cit9CisgICAgCiB2b2lkIFRl
c3RSdW5uZXI6OnNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShKU1N0cmluZ1JlZiBob3N0
TmFtZSwgYm9vbCB2YWx1ZSkKIHsKICAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
PiBrZXlzOwpAQCAtMTQ5MSw2ICsxNTE2LDIwIEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlz
dGljc0dyYW5kZmF0aGUKICAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2Fn
ZUJvZHkuZ2V0KCksIG51bGxwdHIpOwogfQogCit2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3Rp
Y3NNYXhTdGF0aXN0aWNzRW50cmllcyh1bnNpZ25lZCBlbnRyaWVzKQoreworICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiU2V0TWF4U3RhdGlzdGljc0VudHJpZXMiKSk7CisgICAgV0tSZXRhaW5QdHI8
V0tUeXBlUmVmPiBtZXNzYWdlQm9keShBZG9wdFdLLCBXS1VJbnQ2NENyZWF0ZShlbnRyaWVzKSk7
CisgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBu
dWxscHRyKTsKK30KKyAgICAKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1BydW5lRW50
cmllc0Rvd25Ubyh1bnNpZ25lZCBlbnRyaWVzKQoreworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
U2V0UHJ1bmVFbnRyaWVzRG93blRvIikpOworICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gbWVz
c2FnZUJvZHkoQWRvcHRXSywgV0tVSW50NjRDcmVhdGUoZW50cmllcykpOworICAgIFdLQnVuZGxl
UG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxl
KCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7Cit9Cisg
ICAgCiB2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVu
dFN0b3JlKCkKIHsKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUoQWRv
cHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3NDbGVhckluTWVt
b3J5QW5kUGVyc2lzdGVudFN0b3JlIikpOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmgJKHJldmlzaW9uIDIxOTMxNikKKysr
IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNTcsNiArMzU3LDcgQEAgcHVibGljOgogICAgIHZvaWQgc3RhdGlzdGlj
c1VwZGF0ZUNvb2tpZVBhcnRpdGlvbmluZygpOwogICAgIHZvaWQgc3RhdGlzdGljc1NldFNob3Vs
ZFBhcnRpdGlvbkNvb2tpZXNGb3JIb3N0KEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIHZhbHVl
KTsKICAgICB2b2lkIHN0YXRpc3RpY3NTdWJtaXRUZWxlbWV0cnkoKTsKKyAgICB2b2lkIHNldFN0
YXRpc3RpY3NMYXN0U2VlbihKU1N0cmluZ1JlZiBob3N0TmFtZSwgZG91YmxlIHNlY29uZHMpOwog
ICAgIHZvaWQgc2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKEpTU3RyaW5nUmVmIGhvc3RO
YW1lLCBib29sIHZhbHVlKTsKICAgICBib29sIGlzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNl
KEpTU3RyaW5nUmVmIGhvc3ROYW1lKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NIYXNIYWRVc2Vy
SW50ZXJhY3Rpb24oSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpOwpAQCAtMzczLDYg
KzM3NCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5U
ZWxlbWV0cnlXYXNDYXB0dXJlZChib29sIHZhbHVlKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NN
aW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoZG91YmxlKTsKICAgICB2b2lkIHNl
dFN0YXRpc3RpY3NHcmFuZGZhdGhlcmluZ1RpbWUoZG91YmxlIHNlY29uZHMpOworICAgIHZvaWQg
c2V0U3RhdGlzdGljc01heFN0YXRpc3RpY3NFbnRyaWVzKHVuc2lnbmVkKTsKKyAgICB2b2lkIHNl
dFN0YXRpc3RpY3NQcnVuZUVudHJpZXNEb3duVG8odW5zaWduZWQpOwogICAgIHZvaWQgc3RhdGlz
dGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmUoKTsKICAgICB2b2lkIHN0YXRpc3Rp
Y3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3JlTW9kaWZpZWRTaW5jZUhvdXJzKHVuc2ln
bmVkIGhvdXJzKTsKICAgICB2b2lkIHN0YXRpc3RpY3NSZXNldFRvQ29uc2lzdGVudFN0YXRlKCk7
CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rl
c3RSdW5uZXIuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5pZGwJKHJldmlzaW9uIDIxOTMxNikKKysrIFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5p
ZGwJKHdvcmtpbmcgY29weSkKQEAgLTI1NCw2ICsyNTQsNyBAQCBpbnRlcmZhY2UgVGVzdFJ1bm5l
ciB7CiAgICAgdm9pZCBpbnN0YWxsU3RhdGlzdGljc0RpZE1vZGlmeURhdGFSZWNvcmRzQ2FsbGJh
Y2sob2JqZWN0IGNhbGxiYWNrKTsKICAgICB2b2lkIGluc3RhbGxTdGF0aXN0aWNzRGlkU2NhbkRh
dGFSZWNvcmRzQ2FsbGJhY2sob2JqZWN0IGNhbGxiYWNrKTsKICAgICB2b2lkIGluc3RhbGxTdGF0
aXN0aWNzRGlkUnVuVGVsZW1ldHJ5Q2FsbGJhY2sob2JqZWN0IGNhbGxiYWNrKTsKKyAgICB2b2lk
IHNldFN0YXRpc3RpY3NMYXN0U2VlbihET01TdHJpbmcgaG9zdE5hbWUsIGRvdWJsZSBzZWNvbmRz
KTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShET01TdHJpbmcgaG9z
dE5hbWUsIGJvb2xlYW4gdmFsdWUpOwogICAgIGJvb2xlYW4gaXNTdGF0aXN0aWNzUHJldmFsZW50
UmVzb3VyY2UoRE9NU3RyaW5nIGhvc3ROYW1lKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NIYXNI
YWRVc2VySW50ZXJhY3Rpb24oRE9NU3RyaW5nIGhvc3ROYW1lLCBib29sZWFuIHZhbHVlKTsKQEAg
LTI3NCw2ICsyNzUsOCBAQCBpbnRlcmZhY2UgVGVzdFJ1bm5lciB7CiAgICAgdm9pZCBzZXRTdGF0
aXN0aWNzTm90aWZ5UGFnZXNXaGVuVGVsZW1ldHJ5V2FzQ2FwdHVyZWQoYm9vbGVhbiB2YWx1ZSk7
CiAgICAgdm9pZCBzZXRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1v
dmFsKGRvdWJsZSBzZWNvbmRzKTsKICAgICB2b2lkIHNldFN0YXRpc3RpY3NHcmFuZGZhdGhlcmlu
Z1RpbWUoZG91YmxlIHNlY29uZHMpOworICAgIHZvaWQgc2V0U3RhdGlzdGljc01heFN0YXRpc3Rp
Y3NFbnRyaWVzKHVuc2lnbmVkIGxvbmcgZW50cmllcyk7CisgICAgdm9pZCBzZXRTdGF0aXN0aWNz
UHJ1bmVFbnRyaWVzRG93blRvKHVuc2lnbmVkIGxvbmcgZW50cmllcyk7CiAgICAgdm9pZCBzdGF0
aXN0aWNzQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnRTdG9yZSgpOwogICAgIHZvaWQgc3RhdGlz
dGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmVNb2RpZmllZFNpbmNlSG91cnModW5z
aWduZWQgbG9uZyBob3Vycyk7CiAgICAgdm9pZCBzdGF0aXN0aWNzUmVzZXRUb0NvbnNpc3RlbnRT
dGF0ZSgpOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0Q29udHJvbGxl
ckNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVz
dENvbnRyb2xsZXJDb2NvYS5tbQkocmV2aXNpb24gMjE5MzE2KQorKysgVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9jb2NvYS9UZXN0Q29udHJvbGxlckNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0y
MjIsNiArMjIyLDExIEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJlbW92ZUFsbFNlc3Npb25DcmUK
IH0KIAogI2lmIFdLX0FQSV9FTkFCTEVECit2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0
aWNzTGFzdFNlZW4oV0tTdHJpbmdSZWYgaG9zdE5hbWUsIGRvdWJsZSBzZWNvbmRzKQoreworICAg
IFtnbG9iYWxXZWJWaWV3Q29uZmlndXJhdGlvbi53ZWJzaXRlRGF0YVN0b3JlIF9yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU2V0TGFzdFNlZW46c2Vjb25kcyBmb3JIb3N0OnRvTlNTdHJpbmcoaG9zdE5h
bWUpXTsKK30KKyAgICAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnNldFN0YXRpc3RpY3NQcmV2YWxl
bnRSZXNvdXJjZShXS1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSkKIHsKICAgICBbZ2xv
YmFsV2ViVmlld0NvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSBfcmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1NldElzUHJldmFsZW50UmVzb3VyY2U6dmFsdWUgZm9ySG9zdDp0b05TU3RyaW5nKGhv
c3ROYW1lKV07CkBAIC0zNDYsNiArMzUxLDE2IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnNldFN0
YXRpc3RpY3NHcmFuZGYKICAgICBbZ2xvYmFsV2ViVmlld0NvbmZpZ3VyYXRpb24ud2Vic2l0ZURh
dGFTdG9yZSBfcmVzb3VyY2VMb2FkU3RhdGlzdGljc1NldEdyYW5kZmF0aGVyaW5nVGltZTpzZWNv
bmRzXTsKIH0KIAordm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc01heFN0YXRpc3Rp
Y3NFbnRyaWVzKHVuc2lnbmVkIGVudHJpZXMpCit7CisgICAgW2dsb2JhbFdlYlZpZXdDb25maWd1
cmF0aW9uLndlYnNpdGVEYXRhU3RvcmUgX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTZXRNYXhTdGF0
aXN0aWNzRW50cmllczplbnRyaWVzXTsKK30KKyAgICAKK3ZvaWQgVGVzdENvbnRyb2xsZXI6OnNl
dFN0YXRpc3RpY3NQcnVuZUVudHJpZXNEb3duVG8odW5zaWduZWQgZW50cmllcykKK3sKKyAgICBb
Z2xvYmFsV2ViVmlld0NvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSBfcmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1NldFBydW5lRW50cmllc0Rvd25UbzplbnRyaWVzXTsKK30KKyAgICAKIHZvaWQg
VGVzdENvbnRyb2xsZXI6OnN0YXRpc3RpY3NDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudFN0b3Jl
KCkKIHsKICAgICBbZ2xvYmFsV2ViVmlld0NvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSBf
cmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50U3RvcmVdOwpJ
bmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0No
YW5nZUxvZwkocmV2aXNpb24gMjE5MzE2KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTctMDctMTAgIEpvaG4gV2lsYW5kZXIgIDx3
aWxhbmRlckBhcHBsZS5jb20+CisKKyAgICAgICAgUmVzb3VyY2UgTG9hZCBTdGF0aXN0aWNzOiBQ
cnVuZSBzdGF0aXN0aWNzIGluIG9yZGVycyBvZiBpbXBvcnRhbmNlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzQyMTUKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzMzMTY0NDAzPgorCisgICAgICAgIFJldmlld2VkIGJ5IENocmlzIER1bWV6LgorCisg
ICAgICAgICogaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcHJ1bmUt
c3RhdGlzdGljcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvbG9h
ZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3BydW5lLXN0YXRpc3RpY3MuaHRtbDogQWRkZWQu
CisgICAgICAgICogcGxhdGZvcm0vd2syL1Rlc3RFeHBlY3RhdGlvbnM6CisgICAgICAgICAgICBB
ZGRlZCBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wcnVuZS1zdGF0
aXN0aWNzLmh0bWwgYXMKKyAgICAgICAgICAgIFsgUGFzcyBdIHNpbmNlIFJlc291cmNlIExvYWQg
U3RhdGlzdGljcyBpcyBXSzItb25seS4KKwogMjAxNy0wNy0xMCAgRGV2aW4gUm91c3NvICA8ZHJv
dXNzb0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogSGlnaGxpZ2h0IG1hdGNo
aW5nIENTUyBjYW52YXMgY2xpZW50cyB3aGVuIGhvdmVyaW5nIGNvbnRleHRzIGluIHRoZSBSZXNv
dXJjZXMgdGFiCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VM
b2FkU3RhdGlzdGljcy9wcnVuZS1zdGF0aXN0aWNzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9w
cnVuZS1zdGF0aXN0aWNzLWV4cGVjdGVkLnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wcnVuZS1zdGF0aXN0
aWNzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIzIEBACittYWluIGZy
YW1lIC0gZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRpZENv
bW1pdExvYWRGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRpZFJlY2VpdmVUaXRsZTogVGVzdCBmb3Ig
UmVzb3VyY2UgTG9hZCBTdGF0aXN0aWNzIFBydW5pbmcKK21haW4gZnJhbWUgLSBkaWRGaW5pc2hE
b2N1bWVudExvYWRGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRpZEhhbmRsZU9ubG9hZEV2ZW50c0Zv
ckZyYW1lCittYWluIGZyYW1lIC0gZGlkRmluaXNoTG9hZEZvckZyYW1lCitUZXN0cyB0aGF0IHN0
YXRpc3RpY3MgYXJlIHBydW5lZCBpbiB0aGUgcmlnaHQgb3JkZXIuCisKK09uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNU
IENPTVBMRVRFIi4KKworCitQQVNTIFRlc3QgaXRlcmF0aW9uIDEgcGFzc2VkLgorUEFTUyBUZXN0
IGl0ZXJhdGlvbiAyIHBhc3NlZC4KK1BBU1MgVGVzdCBpdGVyYXRpb24gMyBwYXNzZWQuCitQQVNT
IFRlc3QgaXRlcmF0aW9uIDQgcGFzc2VkLgorUEFTUyBUZXN0IGl0ZXJhdGlvbiA1IHBhc3NlZC4K
K1BBU1MgVGVzdCBpdGVyYXRpb24gNiBwYXNzZWQuCitQQVNTIFRlc3QgaXRlcmF0aW9uIDcgcGFz
c2VkLgorUEFTUyBUZXN0IGl0ZXJhdGlvbiA4IHBhc3NlZC4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wcnVuZS1zdGF0aXN0aWNzLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9h
ZFN0YXRpc3RpY3MvcHJ1bmUtc3RhdGlzdGljcy5odG1sCShub25leGlzdGVudCkKKysrIExheW91
dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3BydW5lLXN0
YXRpc3RpY3MuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExOSBAQAorPCFET0NUWVBF
IGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KKyAgICA8
dGl0bGU+VGVzdCBmb3IgUmVzb3VyY2UgTG9hZCBTdGF0aXN0aWNzIFBydW5pbmc8L3RpdGxlPgor
ICAgIDxzY3JpcHQgc3JjPSIvanMtdGVzdC1yZXNvdXJjZXMvanMtdGVzdC5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+CisgICAgZGVzY3JpcHRpb24oIlRlc3RzIHRoYXQg
c3RhdGlzdGljcyBhcmUgcHJ1bmVkIGluIHRoZSByaWdodCBvcmRlci4iKTsKKyAgICBqc1Rlc3RJ
c0FzeW5jID0gdHJ1ZTsKKworICAgIGNvbnN0IG9sZGVyVGltZXN0YW1wID0gTWF0aC5yb3VuZCgo
bmV3IERhdGUoKSkuZ2V0VGltZSgpIC8gMTAwMCk7CisgICAgY29uc3QgbmV3ZXJUaW1lc3RhbXAg
PSBvbGRlclRpbWVzdGFtcCArIDEwOworICAgIGNvbnN0IG5ld2VzdFRpbWVzdGFtcCA9IG5ld2Vy
VGltZXN0YW1wICsgMTA7CisKKyAgICBjb25zdCB1cmxzVG9CZVBydW5lZCA9IFsKKyAgICAgICAg
eyB1cmw6ICJodHRwOi8vMTI3LjAuMC4xOjgwMDAvdGVtcCIsIHByZXZhbGVudDogZmFsc2UgfSwK
KyAgICAgICAgeyB1cmw6ICJodHRwOi8vMTI3LjAuMC4yOjgwMDAvdGVtcCIsIHByZXZhbGVudDog
ZmFsc2UgfSwKKyAgICAgICAgeyB1cmw6ICJodHRwOi8vMTI3LjAuMC4zOjgwMDAvdGVtcCIsIHBy
ZXZhbGVudDogdHJ1ZSB9LAorICAgICAgICB7IHVybDogImh0dHA6Ly8xMjcuMC4wLjQ6ODAwMC90
ZW1wIiwgcHJldmFsZW50OiB0cnVlIH0sCisgICAgICAgIHsgdXJsOiAiaHR0cDovLzEyNy4wLjAu
NTo4MDAwL3RlbXAiLCBwcmV2YWxlbnQ6IGZhbHNlIH0sCisgICAgICAgIHsgdXJsOiAiaHR0cDov
LzEyNy4wLjAuNjo4MDAwL3RlbXAiLCBwcmV2YWxlbnQ6IGZhbHNlIH0sCisgICAgICAgIHsgdXJs
OiAiaHR0cDovLzEyNy4wLjAuNzo4MDAwL3RlbXAiLCBwcmV2YWxlbnQ6IHRydWUgfSwKKyAgICAg
ICAgeyB1cmw6ICJodHRwOi8vMTI3LjAuMC44OjgwMDAvdGVtcCIsIHByZXZhbGVudDogdHJ1ZSB9
CisgICAgXTsKKworICAgIGZ1bmN0aW9uIGNoZWNrSWZQcmV2YWxlbnRBY2NvcmRpbmdUb0luaXRp
YWxFeHBlY3RhdGlvbihiZWdpbiwgZW5kKSB7CisgICAgICAgIHZhciBmYWlsZWQgPSBmYWxzZTsK
KyAgICAgICAgZm9yICh2YXIgaSA9IGJlZ2luOyBpIDwgZW5kOyArK2kpIHsKKyAgICAgICAgICAg
IGlmICh0ZXN0UnVubmVyLmlzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKHVybHNUb0JlUHJ1
bmVkW2ldLnVybCkgIT09IHVybHNUb0JlUHJ1bmVkW2ldLnByZXZhbGVudCkgeworICAgICAgICAg
ICAgICAgIHRlc3RGYWlsZWQoImNoZWNrSWZQcmV2YWxlbnRBY2NvcmRpbmdUb0luaXRpYWxFeHBl
Y3RhdGlvbjogVGVzdCBpdGVyYXRpb24gIiArIGN1cnJlbnRUZXN0ICsgIiBmYWlsZWQuICIgKyB1
cmxzVG9CZVBydW5lZFtpXS51cmwgKyAodXJsc1RvQmVQcnVuZWRbaV0ucHJldmFsZW50ID8gIiB3
YXNuJ3QgIiA6ICIgd2FzICIpICsgInByZXZhbGVudCIpOworICAgICAgICAgICAgICAgIGZhaWxl
ZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZhaWxlZCkK
KyAgICAgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNoZWNr
SWZQcmV2YWxlbnQoYmVnaW4sIGVuZCwgZXhwZWN0ZWQpIHsKKyAgICAgICAgdmFyIGZhaWxlZCA9
IGZhbHNlOworICAgICAgICBmb3IgKHZhciBpID0gYmVnaW47IGkgPCBlbmQ7ICsraSkgeworICAg
ICAgICAgICAgaWYgKHRlc3RSdW5uZXIuaXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UodXJs
c1RvQmVQcnVuZWRbaV0udXJsKSAhPT0gZXhwZWN0ZWQpIHsKKyAgICAgICAgICAgICAgICB0ZXN0
RmFpbGVkKCJjaGVja0lmUHJldmFsZW50OiBUZXN0IGl0ZXJhdGlvbiAiICsgY3VycmVudFRlc3Qg
KyAiIGZhaWxlZC4gIiArIHVybHNUb0JlUHJ1bmVkW2ldLnVybCArIChleHBlY3RlZCA/ICIgd2Fz
bid0ICIgOiAiIHdhcyAiKSArICJwcmV2YWxlbnQiKTsKKyAgICAgICAgICAgICAgICBmYWlsZWQg
PSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChmYWlsZWQpCisg
ICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBpbml0aWFs
aXplU3RhdGlzdGljcygpIHsKKyAgICAgICAgdGVzdFJ1bm5lci5pbnN0YWxsU3RhdGlzdGljc0Rp
ZFNjYW5EYXRhUmVjb3Jkc0NhbGxiYWNrKGNoZWNrU3RhdGlzdGljc0FmdGVyUHJ1bmluZyk7CisK
KyAgICAgICAgLy8gTm9uLXByZXZhbGVudCB3aXRob3V0IHVzZXIgaW50ZXJhY3Rpb24gdG8gYmUg
cHJ1bmVkIGZpcnN0LgorICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NMYXN0U2Vlbih1
cmxzVG9CZVBydW5lZFswXS51cmwsIG9sZGVyVGltZXN0YW1wKTsKKyAgICAgICAgdGVzdFJ1bm5l
ci5zZXRTdGF0aXN0aWNzTGFzdFNlZW4odXJsc1RvQmVQcnVuZWRbMV0udXJsLCBuZXdlclRpbWVz
dGFtcCk7CisKKyAgICAgICAgLy8gUHJldmFsZW50IHdpdGhvdXQgdXNlciBpbnRlcmFjdGlvbiB0
byBiZSBwcnVuZWQgc2Vjb25kLgorICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NQcmV2
YWxlbnRSZXNvdXJjZSh1cmxzVG9CZVBydW5lZFsyXS51cmwsIHRydWUpOworICAgICAgICB0ZXN0
UnVubmVyLnNldFN0YXRpc3RpY3NMYXN0U2Vlbih1cmxzVG9CZVBydW5lZFsyXS51cmwsIG9sZGVy
VGltZXN0YW1wKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzUHJldmFsZW50UmVz
b3VyY2UodXJsc1RvQmVQcnVuZWRbM10udXJsLCB0cnVlKTsKKyAgICAgICAgdGVzdFJ1bm5lci5z
ZXRTdGF0aXN0aWNzTGFzdFNlZW4odXJsc1RvQmVQcnVuZWRbM10udXJsLCBuZXdlclRpbWVzdGFt
cCk7CisKKyAgICAgICAgLy8gTm9uLXByZXZhbGVudCB3aXRoIHVzZXIgaW50ZXJhY3Rpb24gdG8g
YmUgcHJ1bmVkIHRoaXJkLgorICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NIYXNIYWRV
c2VySW50ZXJhY3Rpb24odXJsc1RvQmVQcnVuZWRbNF0udXJsLCB0cnVlKTsKKyAgICAgICAgdGVz
dFJ1bm5lci5zZXRTdGF0aXN0aWNzTGFzdFNlZW4odXJsc1RvQmVQcnVuZWRbNF0udXJsLCBvbGRl
clRpbWVzdGFtcCk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJ
bnRlcmFjdGlvbih1cmxzVG9CZVBydW5lZFs1XS51cmwsIHRydWUpOworICAgICAgICB0ZXN0UnVu
bmVyLnNldFN0YXRpc3RpY3NMYXN0U2Vlbih1cmxzVG9CZVBydW5lZFs1XS51cmwsIG5ld2VyVGlt
ZXN0YW1wKTsKKworICAgICAgICAvLyBQcmV2YWxlbnQgd2l0aCB1c2VyIGludGVyYWN0aW9uIHRv
IGJlIHBydW5lZCBsYXN0LgorICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NQcmV2YWxl
bnRSZXNvdXJjZSh1cmxzVG9CZVBydW5lZFs2XS51cmwsIHRydWUpOworICAgICAgICB0ZXN0UnVu
bmVyLnNldFN0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24odXJsc1RvQmVQcnVuZWRbNl0u
dXJsLCB0cnVlKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzTGFzdFNlZW4odXJs
c1RvQmVQcnVuZWRbNl0udXJsLCBvbGRlclRpbWVzdGFtcCk7CisgICAgICAgIHRlc3RSdW5uZXIu
c2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKHVybHNUb0JlUHJ1bmVkWzddLnVybCwgdHJ1
ZSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlv
bih1cmxzVG9CZVBydW5lZFs3XS51cmwsIHRydWUpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0
YXRpc3RpY3NMYXN0U2Vlbih1cmxzVG9CZVBydW5lZFs3XS51cmwsIG5ld2VyVGltZXN0YW1wKTsK
KworICAgICAgICBjaGVja0lmUHJldmFsZW50QWNjb3JkaW5nVG9Jbml0aWFsRXhwZWN0YXRpb24o
MCwgdXJsc1RvQmVQcnVuZWQubGVuZ3RoKTsKKyAgICB9CisKKyAgICB2YXIgY3VycmVudFRlc3Q7
CisgICAgZnVuY3Rpb24gY2hlY2tTdGF0aXN0aWNzQWZ0ZXJQcnVuaW5nKCkgeworICAgICAgICAv
LyBQcnVuZWQgZW50cmllcyBzaG91bGQgbm90IGJlIHByZXZhbGVudC4KKyAgICAgICAgY2hlY2tJ
ZlByZXZhbGVudCgwLCBjdXJyZW50VGVzdCwgZmFsc2UpOworICAgICAgICAvLyBOb24tcHJ1bmVk
IGVudHJpZXMgc2hvdWxkIGtlZXAgdGhlaXIgZXhwZWN0ZWQgc3RhdHVzLgorICAgICAgICBjaGVj
a0lmUHJldmFsZW50QWNjb3JkaW5nVG9Jbml0aWFsRXhwZWN0YXRpb24oY3VycmVudFRlc3QsIHVy
bHNUb0JlUHJ1bmVkLmxlbmd0aCk7CisgICAgICAgIHRlc3RQYXNzZWQoIlRlc3QgaXRlcmF0aW9u
ICIgKyBjdXJyZW50VGVzdCArICIgcGFzc2VkLiIpOworICAgICAgICBpZiAoY3VycmVudFRlc3Qg
PCB1cmxzVG9CZVBydW5lZC5sZW5ndGgpIHsKKyAgICAgICAgICAgICsrY3VycmVudFRlc3Q7Cisg
ICAgICAgICAgICBydW5UZXN0KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmaW5p
c2hKU1Rlc3QoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIHJ1blRlc3QoKSB7
CisgICAgICAgIGluaXRpYWxpemVTdGF0aXN0aWNzKCk7CisKKyAgICAgICAgdmFyIGZpbGxlclVy
bCA9ICJodHRwOi8vMTI3LjAuIiArIGN1cnJlbnRUZXN0ICsgIi4xOjgwMDAvdGVtcCI7CisgICAg
ICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKGZpbGxlclVybCwg
dHJ1ZSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFj
dGlvbihmaWxsZXJVcmwsIHRydWUpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NM
YXN0U2VlbihmaWxsZXJVcmwsIG5ld2VzdFRpbWVzdGFtcCk7CisgICAgICAgIHRlc3RSdW5uZXIu
c3RhdGlzdGljc1Byb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMoKTsKKyAgICB9CisKKyAg
ICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0
aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoZmFsc2Up
OworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NNaW5pbXVtVGltZUJldHdlZW5EYXRh
UmVjb3Jkc1JlbW92YWwoMCk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc05vdGlm
eVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQodHJ1ZSk7CisgICAgICAgIHRlc3RSdW5u
ZXIuc2V0U3RhdGlzdGljc01heFN0YXRpc3RpY3NFbnRyaWVzKHVybHNUb0JlUHJ1bmVkLmxlbmd0
aCk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1BydW5lRW50cmllc0Rvd25Ubyh1
cmxzVG9CZVBydW5lZC5sZW5ndGgpOworCisgICAgICAgIGN1cnJlbnRUZXN0ID0gMTsKKyAgICAg
ICAgcnVuVGVzdCgpOworICAgIH0KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5l
d2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3drMi9UZXN0
RXhwZWN0YXRpb25zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3drMi9UZXN0
RXhwZWN0YXRpb25zCShyZXZpc2lvbiAyMTkzMTYpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93
azIvVGVzdEV4cGVjdGF0aW9ucwkod29ya2luZyBjb3B5KQpAQCAtNzA2LDYgKzcwNiw3IEBAIGh0
dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWMKIGh0dHAvdGVzdHMvbG9hZGlu
Zy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL2NsZWFyLWluLW1lbW9yeS1hbmQtcGVyc2lzdGVudC1z
dG9yZS5odG1sIFsgUGFzcyBdCiB3ZWJraXQub3JnL2IvMTcyNDUyIGh0dHAvdGVzdHMvbG9hZGlu
Zy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL2dyYW5kZmF0aGVyaW5nLmh0bWwgWyBQYXNzIEZhaWx1
cmUgVGltZW91dCBdCiB3ZWJraXQub3JnL2IvMTczNDk5IGh0dHAvdGVzdHMvbG9hZGluZy9yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzL3RlbGVtZXRyeS1nZW5lcmF0aW9uLmh0bWwgWyBQYXNzIEZhaWx1
cmUgXQoraHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcHJ1bmUtc3Rh
dGlzdGljcy5odG1sIFsgUGFzcyBdCiAKICMjIyBFTkQgT0YgKDUpIFByb2dyZXNzaW9ucywgZXhw
ZWN0ZWQgc3VjY2Vzc2VzIHRoYXQgYXJlIGV4cGVjdGVkIGZhaWx1cmVzIGluIFdlYktpdDEuCiAj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>315069</attachid>
            <date>2017-07-10 20:31:21 -0700</date>
            <delta_ts>2017-07-10 23:32:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174215-20170710203120.patch</filename>
            <type>text/plain</type>
            <size>4415</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxOTMxOSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE3LTA3LTEwICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFJlc291cmNlIExvYWQgU3Rh
dGlzdGljczogUHJ1bmUgc3RhdGlzdGljcyBpbiBvcmRlcnMgb2YgaW1wb3J0YW5jZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0MjE1CisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS8zMzE2NDQwMz4KKyAKKyAgICAgICAgVW5yZXZpZXdlZCB0ZXN0IGZp
eC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpwcnVuZVJlc291cmNlcyk6IFRoZSByZXZpc2VkIGFsZ29y
aXRobSBkaWQgbm90IHVwZGF0ZSB0aGUKKyAgICAgICAgcHJ1bmVkIGNvdW50LCBjYXVzaW5nIGEg
dGVzdCBmYWlsdXJlLgorCiAyMDE3LTA3LTEwICBKb2huIFdpbGFuZGVyICA8d2lsYW5kZXJAYXBw
bGUuY29tPgogCiAgICAgICAgIFJlc291cmNlIExvYWQgU3RhdGlzdGljczogUHJ1bmUgc3RhdGlz
dGljcyBpbiBvcmRlcnMgb2YgaW1wb3J0YW5jZQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAJ
KHJldmlzaW9uIDIxOTMxOSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NDEsOCArOTQxLDEz
IEBAIHN0YXRpYyB2b2lkIHBydW5lUmVzb3VyY2VzKEhhc2hNYXA8U3RyaW4KICAgICAgICAgfSk7
CiAgICAgfQogICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwLCBlbmQgPSBzdGQ6Om1pbihudW1i
ZXJPZkVudHJpZXNUb1BydW5lLCBzdGF0aXN0aWNzVG9QcnVuZS5zaXplKCkpOyBpICE9IGVuZDsg
KytpKQorICAgIHVuc2lnbmVkIHJlbW92ZWQgPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSAwLCBl
bmQgPSBzdGQ6Om1pbihudW1iZXJPZkVudHJpZXNUb1BydW5lLCBzdGF0aXN0aWNzVG9QcnVuZS5z
aXplKCkpOyBpICE9IGVuZDsgKytpKSB7CiAgICAgICAgIHN0YXRpc3RpY3NNYXAucmVtb3ZlKHN0
YXRpc3RpY3NUb1BydW5lW2ldLnRvcFByaXZhdGVseU93bmVkRG9tYWluKTsKKyAgICAgICAgKyty
ZW1vdmVkOworICAgIH0KKworICAgIG51bWJlck9mRW50cmllc1RvUHJ1bmUgLT0gcmVtb3ZlZDsK
IH0KICAgICAKIHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlSW1wb3J0YW5jZShjb25zdCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzJiByZXNvdXJjZVN0YXRpc3RpYykKSW5kZXg6IExheW91dFRlc3RzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIx
OTMxOSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE2IEBACisyMDE3LTA3LTEwICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgor
CisgICAgICAgIFJlc291cmNlIExvYWQgU3RhdGlzdGljczogUHJ1bmUgc3RhdGlzdGljcyBpbiBv
cmRlcnMgb2YgaW1wb3J0YW5jZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTc0MjE1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMzE2NDQwMz4KKwor
ICAgICAgICBVbnJldmlld2VkIHRlc3QgZml4LgorCisgICAgICAgIFR3byBvZiB0aGUgVGVzdFJ1
bm5lciBtZXRob2QgbmFtZXMgY2hhbmdlZCwgYW5kIHRoZSB0ZXN0cyB3ZXJlIG5vdCB1cGRhdGVk
LgorCisgICAgICAgICogaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3Mv
cGFydGl0aW9uZWQtYW5kLXVucGFydGl0aW9uZWQtY29va2llLWRlbGV0aW9uLmh0bWw6CisgICAg
ICAgICogaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcGFydGl0aW9u
ZWQtY29va2llcy13aXRoLWFuZC13aXRob3V0LXVzZXItaW50ZXJhY3Rpb24uaHRtbDoKKwogMjAx
Ny0wNy0xMCAgSm9obiBXaWxhbmRlciAgPHdpbGFuZGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXNvdXJjZSBMb2FkIFN0YXRpc3RpY3M6IFBydW5lIHN0YXRpc3RpY3MgaW4gb3JkZXJzIG9mIGlt
cG9ydGFuY2UKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzL3BhcnRpdGlvbmVkLWFuZC11bnBhcnRpdGlvbmVkLWNvb2tpZS1kZWxldGlv
bi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzL3BhcnRpdGlvbmVkLWFuZC11bnBhcnRpdGlvbmVkLWNvb2tpZS1k
ZWxldGlvbi5odG1sCShyZXZpc2lvbiAyMTkzMTkpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wYXJ0aXRpb25lZC1hbmQtdW5wYXJ0aXRp
b25lZC1jb29raWUtZGVsZXRpb24uaHRtbAkod29ya2luZyBjb3B5KQpAQCAtOTMsNyArOTMsNyBA
QAogICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJlc291cmNl
c0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChmYWxzZSk7CiAgICAgICAgIHRlc3RSdW5uZXIuc2V0
U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCgwKTsKIAotICAg
ICAgICB0ZXN0UnVubmVyLnN0YXRpc3RpY3NVcGRhdGVDb29raWVQYXJ0aXRpb25pbmdGb3JPbmVE
b21haW4oImxvY2FsaG9zdCIsIHRydWUpOworICAgICAgICB0ZXN0UnVubmVyLnN0YXRpc3RpY3NT
ZXRTaG91bGRQYXJ0aXRpb25Db29raWVzRm9ySG9zdCgibG9jYWxob3N0IiwgdHJ1ZSk7CiAgICAg
ICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKCJodHRwOi8vbG9j
YWxob3N0IiwgdHJ1ZSk7CiAgICAgICAgIGlmICghdGVzdFJ1bm5lci5pc1N0YXRpc3RpY3NQcmV2
YWxlbnRSZXNvdXJjZSgiaHR0cDovL2xvY2FsaG9zdCIpKQogICAgICAgICAgICAgdGVzdEZhaWxl
ZCgiSG9zdCBkaWQgbm90IGdldCBzZXQgYXMgcHJldmFsZW50IHJlc291cmNlLiIpOwpJbmRleDog
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcGFy
dGl0aW9uZWQtY29va2llcy13aXRoLWFuZC13aXRob3V0LXVzZXItaW50ZXJhY3Rpb24uaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2Fk
U3RhdGlzdGljcy9wYXJ0aXRpb25lZC1jb29raWVzLXdpdGgtYW5kLXdpdGhvdXQtdXNlci1pbnRl
cmFjdGlvbi5odG1sCShyZXZpc2lvbiAyMTkzMTkpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wYXJ0aXRpb25lZC1jb29raWVzLXdpdGgt
YW5kLXdpdGhvdXQtdXNlci1pbnRlcmFjdGlvbi5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3
ICs3Myw3IEBACiAgICAgaWYgKGRvY3VtZW50LmxvY2F0aW9uLmhvc3QgPT09IHBhcnRpdGlvbkhv
c3QgJiYgZG9jdW1lbnQubG9jYXRpb24uaGFzaCA9PSAiIiAmJiB3aW5kb3cudGVzdFJ1bm5lciAm
JiB3aW5kb3cuaW50ZXJuYWxzKSB7CiAgICAgICAgIHNldEVuYWJsZUZlYXR1cmUodHJ1ZSk7CiAK
LSAgICAgICAgdGVzdFJ1bm5lci5zdGF0aXN0aWNzVXBkYXRlQ29va2llUGFydGl0aW9uaW5nRm9y
T25lRG9tYWluKCJsb2NhbGhvc3QiLCB0cnVlKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zdGF0aXN0
aWNzU2V0U2hvdWxkUGFydGl0aW9uQ29va2llc0Zvckhvc3QoImxvY2FsaG9zdCIsIHRydWUpOwog
CiAgICAgICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOwogICAgICAgICB0ZXN0UnVubmVy
LmR1bXBDaGlsZEZyYW1lc0FzVGV4dCgpOwo=
</data>
<flag name="review"
          id="335933"
          type_id="1"
          status="+"
          setter="cdumez"
    />
          </attachment>
      

    </bug>

</bugzilla>