<?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>167474</bug_id>
          
          <creation_ts>2017-01-26 16:38:08 -0800</creation_ts>
          <short_desc>Updates to Resource Load Statistics: Get the right website data store and introduce timeout for user interaction</short_desc>
          <delta_ts>2017-04-03 09:43:46 -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>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=168541</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=170400</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>167960</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="John Wilander">wilander</reporter>
          <assigned_to name="John Wilander">wilander</assigned_to>
          <cc>achristensen</cc>
    
    <cc>aestes</cc>
    
    <cc>andersca</cc>
    
    <cc>beidson</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>japhet</cc>
    
    <cc>kangil.han</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wilander</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1270430</commentid>
    <comment_count>0</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-01-26 16:38:08 -0800</bug_when>
    <thetext>Updates to Resource Load Statistics:
1. Get the right website data store. API::WebsiteDataStore::defaultDataStore() does not provide the right data store.
2. Introduce timeout for user interaction. A domain needs interaction every 30 days to stay in that category.
3. Add grandfathered to the statistics model in preparation for grandfathering of existing data records.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1270439</commentid>
    <comment_count>1</comment_count>
      <attachid>299881</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-01-26 16:52:20 -0800</bug_when>
    <thetext>Created attachment 299881
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271797</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-01-31 11:18:52 -0800</bug_when>
    <thetext>&lt;rdar://problem/30290270&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271894</commentid>
    <comment_count>3</comment_count>
      <attachid>300260</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-01-31 14:27:25 -0800</bug_when>
    <thetext>Created attachment 300260
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271945</commentid>
    <comment_count>4</comment_count>
      <attachid>300275</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-01-31 15:39:27 -0800</bug_when>
    <thetext>Created attachment 300275
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271948</commentid>
    <comment_count>5</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-01-31 15:40:32 -0800</bug_when>
    <thetext>Builds fine on my machine. Made some changes to the lambda captures that seemed to cause EWS build errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1272204</commentid>
    <comment_count>6</comment_count>
      <attachid>300339</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-02-01 11:09:12 -0800</bug_when>
    <thetext>Created attachment 300339
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1272205</commentid>
    <comment_count>7</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-02-01 11:10:49 -0800</bug_when>
    <thetext>Fixed a bug in how user interaction timestamps were merged. There are three states – recent user interaction, never seen user interaction in this process, and seen but reset user interaction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1272241</commentid>
    <comment_count>8</comment_count>
      <attachid>300339</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-02-01 12:58:50 -0800</bug_when>
    <thetext>Comment on attachment 300339
Patch

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

&gt; Source/WebCore/loader/ResourceLoadStatisticsStore.cpp:43
&gt; +// 30 days in seconds
&gt; +static const auto timeToLiveUserInteraction = 2592000;

We really need a way to test this.  I don&apos;t want to have to wait 30 days to reproduce bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1274791</commentid>
    <comment_count>9</comment_count>
      <attachid>301025</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-02-09 01:51:11 -0800</bug_when>
    <thetext>Created attachment 301025
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1274968</commentid>
    <comment_count>10</comment_count>
      <attachid>301067</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-02-09 12:19:48 -0800</bug_when>
    <thetext>Created attachment 301067
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1274970</commentid>
    <comment_count>11</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-02-09 12:20:52 -0800</bug_when>
    <thetext>New patch that adds a missing file to the .cmake files for GTK, Efl, and Mac. If all goes green, please review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1274986</commentid>
    <comment_count>12</comment_count>
      <attachid>301073</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-02-09 12:40:34 -0800</bug_when>
    <thetext>Created attachment 301073
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1274987</commentid>
    <comment_count>13</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-02-09 12:41:02 -0800</bug_when>
    <thetext>Added another file reference to the .cmake files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1275426</commentid>
    <comment_count>14</comment_count>
      <attachid>301073</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-02-10 11:10:32 -0800</bug_when>
    <thetext>Comment on attachment 301073
Patch

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

&gt; Source/WebCore/loader/ResourceLoadObserver.cpp:62
&gt; +    // May be null

I don&apos;t think this comment is necessary. If it&apos;s not possible for something to be null, we should return a Ref&lt;&gt;. RefPtr&lt;&gt; implies it can be null.

&gt; Source/WebCore/loader/ResourceLoadObserver.cpp:307
&gt; +    auto&amp; statistics = m_store-&gt;ensureResourceStatisticsForPrimaryDomain(primaryDomain(url));

If &apos;m_store&apos; can be null, we should null check here, or at least ASSERT.

&gt; Source/WebCore/loader/ResourceLoadObserver.cpp:316
&gt; +void ResourceLoadObserver::logUserInteraction(const URL url)

This should be passed by reference: const URL&amp; url.

&gt; Source/WebCore/loader/ResourceLoadObserver.cpp:326
&gt; +void ResourceLoadObserver::clearUserInteraction(const URL url)

Ditto URL -&gt; URL&amp;

&gt; Source/WebCore/loader/ResourceLoadObserver.cpp:331
&gt; +    auto&amp; statistics = m_store-&gt;ensureResourceStatisticsForPrimaryDomain(primaryDomain(url));

If m_store can be null, check. Or, ASSERT if we absolutely know we can&apos;t be in that state when these methods get called.

&gt; Source/WebCore/loader/ResourceLoadObserver.cpp:337
&gt; +bool ResourceLoadObserver::hasHadUserInteraction(const URL url)

Ditto URL&amp;

&gt; Source/WebCore/loader/ResourceLoadObserver.cpp:342
&gt; +    auto&amp; statistics = m_store-&gt;ensureResourceStatisticsForPrimaryDomain(primaryDomain(url));

Ditto comments about null m_store.

&gt; Source/WebCore/loader/ResourceLoadObserver.cpp:347
&gt; +void ResourceLoadObserver::setPrevalentResource(const URL url)

Ditto URL&amp;

&gt; Source/WebCore/loader/ResourceLoadObserver.cpp:352
&gt; +    auto&amp; statistics = m_store-&gt;ensureResourceStatisticsForPrimaryDomain(primaryDomain(url));

Ditto comments about null m_store.

&gt; Source/WebCore/loader/ResourceLoadObserver.cpp:357
&gt; +bool ResourceLoadObserver::isPrevalentResource(const URL url)

Ditto URL&amp;

&gt; Source/WebCore/loader/ResourceLoadObserver.cpp:362
&gt; +    auto&amp; statistics = m_store-&gt;ensureResourceStatisticsForPrimaryDomain(primaryDomain(url));

Ditto comments about null m_store.

&gt; Source/WebCore/loader/ResourceLoadObserver.cpp:367
&gt; +void ResourceLoadObserver::clearPrevalentResource(const URL url)

Ditto URL&amp;

&gt; Source/WebCore/loader/ResourceLoadObserver.cpp:372
&gt; +    auto&amp; statistics = m_store-&gt;ensureResourceStatisticsForPrimaryDomain(primaryDomain(url));

Ditto comments about null m_store.

&gt; Source/WebCore/loader/ResourceLoadObserver.cpp:379
&gt; +    m_store-&gt;setTimeToLiveUserInteraction(seconds);

Ditto comments about null m_store.

&gt; Source/WebCore/loader/ResourceLoadObserver.cpp:384
&gt; +    m_store-&gt;fireDataModificationHandler();

Ditto comments about null m_store.

&gt; Source/WebCore/loader/ResourceLoadStatistics.cpp:316
&gt; +        if (other.mostRecentUserInteraction == 0.0) {

We usually test against 0 (not 0.0), and usually be using something like:  &quot;if (!other.mostRecentUserInteraction)&quot;.

If you are getting very small floating point values in mostRecentUserInteraction, you should use the WTF MathExtras &quot;areEssentiallyEqual&quot; macro.

&gt; Source/WebKit2/UIProcess/WebProcessProxy.cpp:213
&gt; +            pendingCallbacks++;

We prefer ++pendingCallbacks

&gt; Source/WebKit2/UIProcess/WebProcessProxy.cpp:237
&gt; +        if (page.value-&gt;websiteDataStore().isPersistent()) {

This might be easier to read if you did:

if (!page.value-&gt;websiteDataStore().isPersistent())
    continue;

This would allow you to reduce the level of indenting.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsManager.cpp:38
&gt; +void WebResourceLoadStatisticsManager::setPrevalentResource(String hostName, bool value)

All of these String objects should be passed by const&amp;.

&gt; Source/WebKit2/UIProcess/API/C/WKResourceLoadStatisticsManager.h:47
&gt; +    WK_EXPORT void WKResourceLoadStatisticsManagerResetToConsistentState();

These aren&apos;t meant to be API, so we might need to prefix them with underscores or something. Alex will know!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1275554</commentid>
    <comment_count>15</comment_count>
      <attachid>301073</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2017-02-10 14:59:33 -0800</bug_when>
    <thetext>Comment on attachment 301073
Patch

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

r=me.

I have a bunch of optional comments, but the one thing you do need to address before landing is using WKStringRef instead of WTF::String in the new C API.

&gt; Source/WebCore/loader/ResourceLoadObserver.cpp:52
&gt; +static auto timestampResolution = 86400;

This is fine for now, but I&apos;d prefer to see WTF::Seconds used here.

If you added fromDays() and days() functions to the Seconds class, then you could write this as &quot;static auto timestampResolution = Seconds::fromDays(1);&quot; and your comment would be unnecessary.

&gt;&gt; Source/WebCore/loader/ResourceLoadObserver.cpp:307
&gt;&gt; +    auto&amp; statistics = m_store-&gt;ensureResourceStatisticsForPrimaryDomain(primaryDomain(url));
&gt; 
&gt; If &apos;m_store&apos; can be null, we should null check here, or at least ASSERT.

If m_store can&apos;t be null here then an assertion wouldn&apos;t add much, in my opinion. A crash due to dereferencing a null pointer provides the same information as an assertion failure.

&gt; Source/WebCore/loader/ResourceLoadObserver.cpp:313
&gt; +    if (newTimestamp != statistics.mostRecentUserInteraction) {
&gt; +        statistics.hadUserInteraction = true;
&gt; +        statistics.mostRecentUserInteraction = newTimestamp;
&gt; +        m_store-&gt;fireDataModificationHandler();
&gt; +    }

I think this would read better if you instead returned early when newTimestamp == statistics.mostRecentUserInteraction.

&gt;&gt; Source/WebCore/loader/ResourceLoadStatistics.cpp:316
&gt;&gt; +        if (other.mostRecentUserInteraction == 0.0) {
&gt; 
&gt; We usually test against 0 (not 0.0), and usually be using something like:  &quot;if (!other.mostRecentUserInteraction)&quot;.
&gt; 
&gt; If you are getting very small floating point values in mostRecentUserInteraction, you should use the WTF MathExtras &quot;areEssentiallyEqual&quot; macro.

I&apos;d also combine this with the if statement above to reduce indentation: if (!other.hadUserInteraction &amp;&amp; !other.mostRecentInteraction) {}

&gt; Source/WebCore/loader/ResourceLoadStatistics.h:57
&gt; +    double mostRecentUserInteraction { -1.0 };

This should be -1 instead of -1.0.

Having a special default values is fine for now, but I&apos;d prefer to see you use WTF::Optional.

&gt; Source/WebCore/loader/ResourceLoadStatisticsStore.cpp:43
&gt; +// 30 days in seconds
&gt; +static auto timeToLiveUserInteraction = 2592000;

See comment about using WTF::Seconds.

&gt; Source/WebCore/loader/ResourceLoadStatisticsStore.cpp:167
&gt; +    if (currentTime() &gt; (resourceStatistic.mostRecentUserInteraction + timeToLiveUserInteraction)) {

No need for parentheses around the right operand of &gt;.

&gt; Source/WebCore/loader/ResourceLoadStatisticsStore.cpp:171
&gt; +        resourceStatistic.mostRecentUserInteraction = 0.0;

0 instead of 0.0.

&gt; Source/WebKit2/PlatformEfl.cmake:71
&gt; +    UIProcess/API/C/WKResourceLoadStatisticsManager.cpp
&gt; +

This should be inserted in sorted order.

&gt; Source/WebKit2/PlatformGTK.cmake:97
&gt; +    UIProcess/API/C/WKResourceLoadStatisticsManager.cpp
&gt; +

Ditto.

&gt; Source/WebKit2/UIProcess/WebProcessProxy.cpp:203
&gt; +void WebProcessProxy::deleteWebsiteDataForTopPrivatelyOwnedDomainsInAllPersistentDataStores(OptionSet&lt;WebsiteDataType&gt; dataTypes, Vector&lt;String&gt;&amp; topPrivatelyOwnedDomains, bool shouldNotifyPage, std::function&lt;void()&gt; completionHandler)

completionHandler&apos;s type should be WTF::Function&lt;void()&gt;&amp;&amp;.

&gt; Source/WebKit2/UIProcess/WebProcessProxy.cpp:205
&gt; +    struct CallbackAggregator : ThreadSafeRefCounted&lt;CallbackAggregator&gt; {

This is fine for now, but {add,remove}PendingCallback() is really just an explicit duplication of the existing ref-counting. You could instead have a destructor that calls completionHandler, since callbackAggregator will be destroyed when the last removeDataForTopPrivatelyOwnedDomains() completion handler finishes executing.

&gt; Source/WebKit2/UIProcess/WebProcessProxy.cpp:206
&gt; +        explicit CallbackAggregator(std::function&lt;void()&gt; completionHandler)

Ditto.

&gt; Source/WebKit2/UIProcess/WebProcessProxy.cpp:227
&gt; +                RunLoop::main().dispatch(WTFMove(completionHandler));

removePendingCallback() is already called on the main thread, so is this necessary?

&gt; Source/WebKit2/UIProcess/WebProcessProxy.cpp:231
&gt; +        std::function&lt;void()&gt; completionHandler;

Let&apos;s use WTF::Function instead of std::function.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:49
&gt; +static auto minimumTimeBetweeenDataRecordsRemoval = 60;

Another good use for WTF::Seconds.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:52
&gt; +static bool notifyPages = false;
&gt; +static bool shouldClassifyResourcesBeforeDataRecordsRemoval = true;

auto works here too.

&gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:133
&gt; +        &amp;&amp; now &lt; (m_lastTimeDataRecordsWereRemoved + minimumTimeBetweeenDataRecordsRemoval))

No need for parentheses around the right operand of &lt;.

&gt; Source/WebKit2/UIProcess/API/C/WKResourceLoadStatisticsManager.h:40
&gt; +    WK_EXPORT void WKResourceLoadStatisticsManagerSetPrevalentResource(String hostName, bool value);
&gt; +    WK_EXPORT bool WKResourceLoadStatisticsManagerIsPrevalentResource(String hostName);
&gt; +    WK_EXPORT void WKResourceLoadStatisticsManagerSetHasHadUserInteraction(String hostName, bool value);
&gt; +    WK_EXPORT bool WKResourceLoadStatisticsManagerIsHasHadUserInteraction(String hostName);

We need to use WKStringRef in the API, not WTF::String.

&gt;&gt; Source/WebKit2/UIProcess/API/C/WKResourceLoadStatisticsManager.h:47
&gt;&gt; +    WK_EXPORT void WKResourceLoadStatisticsManagerResetToConsistentState();
&gt; 
&gt; These aren&apos;t meant to be API, so we might need to prefix them with underscores or something. Alex will know!

None of the C API is public, so no need for underscores.

&gt; Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp:476
&gt; +void WebsiteDataStore::fetchDataForTopPrivatelyOwnedDomains(OptionSet&lt;WebsiteDataType&gt; dataTypes, OptionSet&lt;WebsiteDataFetchOption&gt; fetchOptions, const Vector&lt;String&gt;&amp; topPrivatelyOwnedDomains, std::function&lt;void(Vector&lt;WebsiteDataRecord&gt;)&gt; completionHandler)

completionHandler should be a Function&lt;...&gt;&amp;&amp;.

&gt; Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp:478
&gt; +    fetchData(dataTypes, fetchOptions, [topPrivatelyOwnedDomains, completionHandler, this](auto existingDataRecords) {

you should WTFMove completionHandler in the capture list (completionHandler = WTFMove(completionHandler).

It&apos;d be a little better if existingDataRecords was passed as an rvalue reference, but this is fine for now.

&gt; Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp:489
&gt; +                    if (dataRecordHost.endsWithIgnoringASCIICase(topPrivatelyOwnedDomain)) {
&gt; +                        auto suffixStart = dataRecordHost.length() - topPrivatelyOwnedDomain.length();
&gt; +                        if (!suffixStart || dataRecordHost[suffixStart - 1] == &apos;.&apos;) {

I believe this check is done in a few places now. It&apos;d be nice if we had a helper function for this.

&gt; Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp:1030
&gt; +void WebsiteDataStore::removeDataForTopPrivatelyOwnedDomains(OptionSet&lt;WebsiteDataType&gt; dataTypes, OptionSet&lt;WebsiteDataFetchOption&gt; fetchOptions, const Vector&lt;String&gt;&amp; topPrivatelyOwnedDomains, std::function&lt;void()&gt; completionHandler)

Ditto about using WTF::Function&lt;...&gt;&amp;&amp; instead.

&gt; Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp:1033
&gt; +        this-&gt;removeData(dataTypes, websiteDataRecords, [completionHandler]() {

Ditto about WTFMoving completionHandler in the capture list.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1275758</commentid>
    <comment_count>16</comment_count>
      <attachid>301246</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-02-10 22:27:53 -0800</bug_when>
    <thetext>Created attachment 301246
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1275759</commentid>
    <comment_count>17</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-02-10 22:34:41 -0800</bug_when>
    <thetext>Thanks, Brent! See details below.

(In reply to comment #14)
&gt; Comment on attachment 301073 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=301073&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/loader/ResourceLoadObserver.cpp:62
&gt; &gt; +    // May be null
&gt; 
&gt; I don&apos;t think this comment is necessary. If it&apos;s not possible for something
&gt; to be null, we should return a Ref&lt;&gt;. RefPtr&lt;&gt; implies it can be null.

Agreed. I added an ASSERT here to catch any access to this when it&apos;s null.

&gt; &gt; Source/WebCore/loader/ResourceLoadObserver.cpp:307
&gt; &gt; +    auto&amp; statistics = m_store-&gt;ensureResourceStatisticsForPrimaryDomain(primaryDomain(url));
&gt; 
&gt; If &apos;m_store&apos; can be null, we should null check here, or at least ASSERT.

I agree with Andy&apos;s point that a null pointer crash will suffice on debug builds. The reason I put the one ASSERT on the getter is that the class in not in control of how that pointer is used so any crash might happen much later.

&gt; &gt; Source/WebCore/loader/ResourceLoadObserver.cpp:316
&gt; &gt; +void ResourceLoadObserver::logUserInteraction(const URL url)
&gt; 
&gt; This should be passed by reference: const URL&amp; url.

Fixed.

&gt; &gt; Source/WebCore/loader/ResourceLoadObserver.cpp:326
&gt; &gt; +void ResourceLoadObserver::clearUserInteraction(const URL url)
&gt; 
&gt; Ditto URL -&gt; URL&amp;

Fixed.

&gt; &gt; Source/WebCore/loader/ResourceLoadObserver.cpp:331
&gt; &gt; +    auto&amp; statistics = m_store-&gt;ensureResourceStatisticsForPrimaryDomain(primaryDomain(url));
&gt; 
&gt; If m_store can be null, check. Or, ASSERT if we absolutely know we can&apos;t be
&gt; in that state when these methods get called.

See above.

&gt; &gt; Source/WebCore/loader/ResourceLoadObserver.cpp:337
&gt; &gt; +bool ResourceLoadObserver::hasHadUserInteraction(const URL url)
&gt; 
&gt; Ditto URL&amp;

Fixed.

&gt; &gt; Source/WebCore/loader/ResourceLoadObserver.cpp:342
&gt; &gt; +    auto&amp; statistics = m_store-&gt;ensureResourceStatisticsForPrimaryDomain(primaryDomain(url));
&gt; 
&gt; Ditto comments about null m_store.

See above.

&gt; &gt; Source/WebCore/loader/ResourceLoadObserver.cpp:347
&gt; &gt; +void ResourceLoadObserver::setPrevalentResource(const URL url)
&gt; 
&gt; Ditto URL&amp;

Fixed.

&gt; &gt; Source/WebCore/loader/ResourceLoadObserver.cpp:352
&gt; &gt; +    auto&amp; statistics = m_store-&gt;ensureResourceStatisticsForPrimaryDomain(primaryDomain(url));
&gt; 
&gt; Ditto comments about null m_store.

See above.

&gt; &gt; Source/WebCore/loader/ResourceLoadObserver.cpp:357
&gt; &gt; +bool ResourceLoadObserver::isPrevalentResource(const URL url)
&gt; 
&gt; Ditto URL&amp;

Fixed.

&gt; &gt; Source/WebCore/loader/ResourceLoadObserver.cpp:362
&gt; &gt; +    auto&amp; statistics = m_store-&gt;ensureResourceStatisticsForPrimaryDomain(primaryDomain(url));
&gt; 
&gt; Ditto comments about null m_store.

See above.

&gt; &gt; Source/WebCore/loader/ResourceLoadObserver.cpp:367
&gt; &gt; +void ResourceLoadObserver::clearPrevalentResource(const URL url)
&gt; 
&gt; Ditto URL&amp;

Fixed.

&gt; &gt; Source/WebCore/loader/ResourceLoadObserver.cpp:372
&gt; &gt; +    auto&amp; statistics = m_store-&gt;ensureResourceStatisticsForPrimaryDomain(primaryDomain(url));
&gt; 
&gt; Ditto comments about null m_store.

See above.

&gt; &gt; Source/WebCore/loader/ResourceLoadObserver.cpp:379
&gt; &gt; +    m_store-&gt;setTimeToLiveUserInteraction(seconds);
&gt; 
&gt; Ditto comments about null m_store.

See above.

&gt; &gt; Source/WebCore/loader/ResourceLoadObserver.cpp:384
&gt; &gt; +    m_store-&gt;fireDataModificationHandler();
&gt; 
&gt; Ditto comments about null m_store.

See above.

&gt; &gt; Source/WebCore/loader/ResourceLoadStatistics.cpp:316
&gt; &gt; +        if (other.mostRecentUserInteraction == 0.0) {
&gt; 
&gt; We usually test against 0 (not 0.0), and usually be using something like: 
&gt; &quot;if (!other.mostRecentUserInteraction)&quot;.

Fixed.

&gt; If you are getting very small floating point values in
&gt; mostRecentUserInteraction, you should use the WTF MathExtras
&gt; &quot;areEssentiallyEqual&quot; macro.

I don&apos;t think it applies here but it may do in another comparison. I will revisit.

&gt; &gt; Source/WebKit2/UIProcess/WebProcessProxy.cpp:213
&gt; &gt; +            pendingCallbacks++;
&gt; 
&gt; We prefer ++pendingCallbacks

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/WebProcessProxy.cpp:237
&gt; &gt; +        if (page.value-&gt;websiteDataStore().isPersistent()) {
&gt; 
&gt; This might be easier to read if you did:
&gt; 
&gt; if (!page.value-&gt;websiteDataStore().isPersistent())
&gt;     continue;

Fixed.

&gt; This would allow you to reduce the level of indenting.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsManager.cpp:38
&gt; &gt; +void WebResourceLoadStatisticsManager::setPrevalentResource(String hostName, bool value)
&gt; 
&gt; All of these String objects should be passed by const&amp;.

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/C/WKResourceLoadStatisticsManager.h:47
&gt; &gt; +    WK_EXPORT void WKResourceLoadStatisticsManagerResetToConsistentState();
&gt; 
&gt; These aren&apos;t meant to be API, so we might need to prefix them with
&gt; underscores or something. Alex will know!

As per Andy&apos;s comment I left it as is.

Again, thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1275760</commentid>
    <comment_count>18</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2017-02-10 22:46:10 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; Comment on attachment 301073 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=301073&amp;action=review
&gt; 
&gt; r=me.
&gt; 
&gt; I have a bunch of optional comments, but the one thing you do need to
&gt; address before landing is using WKStringRef instead of WTF::String in the
&gt; new C API.

Got it! I was looking at the old mechanism for Basic Authentication in TestRunner where WTF Strings are used IIRC.

&gt; &gt; Source/WebCore/loader/ResourceLoadObserver.cpp:52
&gt; &gt; +static auto timestampResolution = 86400;
&gt; 
&gt; This is fine for now, but I&apos;d prefer to see WTF::Seconds used here.

I will revisit.

&gt; If you added fromDays() and days() functions to the Seconds class, then you
&gt; could write this as &quot;static auto timestampResolution =
&gt; Seconds::fromDays(1);&quot; and your comment would be unnecessary.
&gt; 
&gt; &gt;&gt; Source/WebCore/loader/ResourceLoadObserver.cpp:307
&gt; &gt;&gt; +    auto&amp; statistics = m_store-&gt;ensureResourceStatisticsForPrimaryDomain(primaryDomain(url));
&gt; &gt; 
&gt; &gt; If &apos;m_store&apos; can be null, we should null check here, or at least ASSERT.
&gt; 
&gt; If m_store can&apos;t be null here then an assertion wouldn&apos;t add much, in my
&gt; opinion. A crash due to dereferencing a null pointer provides the same
&gt; information as an assertion failure.

I agree. I put one ASSERT on the getter since the class in not in control of how the receiver uses it. The intention is to find null uses early if we have any.

&gt; &gt; Source/WebCore/loader/ResourceLoadObserver.cpp:313
&gt; &gt; +    if (newTimestamp != statistics.mostRecentUserInteraction) {
&gt; &gt; +        statistics.hadUserInteraction = true;
&gt; &gt; +        statistics.mostRecentUserInteraction = newTimestamp;
&gt; &gt; +        m_store-&gt;fireDataModificationHandler();
&gt; &gt; +    }
&gt; 
&gt; I think this would read better if you instead returned early when
&gt; newTimestamp == statistics.mostRecentUserInteraction.

Fixed.

&gt; &gt;&gt; Source/WebCore/loader/ResourceLoadStatistics.cpp:316
&gt; &gt;&gt; +        if (other.mostRecentUserInteraction == 0.0) {
&gt; &gt; 
&gt; &gt; We usually test against 0 (not 0.0), and usually be using something like:  &quot;if (!other.mostRecentUserInteraction)&quot;.

Fixed.

&gt; &gt; If you are getting very small floating point values in mostRecentUserInteraction, you should use the WTF MathExtras &quot;areEssentiallyEqual&quot; macro.
&gt; 
&gt; I&apos;d also combine this with the if statement above to reduce indentation: if
&gt; (!other.hadUserInteraction &amp;&amp; !other.mostRecentInteraction) {}

That actually changes the semantics. I bent this one in several ways before I went with my solution. Leaving as is except for the change from a comparison with 0.0 to a not operator.

&gt; &gt; Source/WebCore/loader/ResourceLoadStatistics.h:57
&gt; &gt; +    double mostRecentUserInteraction { -1.0 };
&gt; 
&gt; This should be -1 instead of -1.0.

Fixed.

&gt; Having a special default values is fine for now, but I&apos;d prefer to see you
&gt; use WTF::Optional.

Got it. I felt a bit uncomfortable with this solution myself. Will revisit.

&gt; &gt; Source/WebCore/loader/ResourceLoadStatisticsStore.cpp:43
&gt; &gt; +// 30 days in seconds
&gt; &gt; +static auto timeToLiveUserInteraction = 2592000;
&gt; 
&gt; See comment about using WTF::Seconds.

Will revisit.

&gt; &gt; Source/WebCore/loader/ResourceLoadStatisticsStore.cpp:167
&gt; &gt; +    if (currentTime() &gt; (resourceStatistic.mostRecentUserInteraction + timeToLiveUserInteraction)) {
&gt; 
&gt; No need for parentheses around the right operand of &gt;.

Fixed.

&gt; &gt; Source/WebCore/loader/ResourceLoadStatisticsStore.cpp:171
&gt; &gt; +        resourceStatistic.mostRecentUserInteraction = 0.0;
&gt; 
&gt; 0 instead of 0.0.

Fixed.

&gt; &gt; Source/WebKit2/PlatformEfl.cmake:71
&gt; &gt; +    UIProcess/API/C/WKResourceLoadStatisticsManager.cpp
&gt; &gt; +
&gt; 
&gt; This should be inserted in sorted order.

It was, but the style script complained and wanted it where it is. I should probably file a bug. Leaving as is.

&gt; &gt; Source/WebKit2/PlatformGTK.cmake:97
&gt; &gt; +    UIProcess/API/C/WKResourceLoadStatisticsManager.cpp
&gt; &gt; +
&gt; 
&gt; Ditto.

Same thing here – the style script said the order was wrong.

&gt; &gt; Source/WebKit2/UIProcess/WebProcessProxy.cpp:203
&gt; &gt; +void WebProcessProxy::deleteWebsiteDataForTopPrivatelyOwnedDomainsInAllPersistentDataStores(OptionSet&lt;WebsiteDataType&gt; dataTypes, Vector&lt;String&gt;&amp; topPrivatelyOwnedDomains, bool shouldNotifyPage, std::function&lt;void()&gt; completionHandler)
&gt; 
&gt; completionHandler&apos;s type should be WTF::Function&lt;void()&gt;&amp;&amp;.

I tried this but ended up with a crasher. I probably need some guidance. Will revisit.

&gt; &gt; Source/WebKit2/UIProcess/WebProcessProxy.cpp:205
&gt; &gt; +    struct CallbackAggregator : ThreadSafeRefCounted&lt;CallbackAggregator&gt; {
&gt; 
&gt; This is fine for now, but {add,remove}PendingCallback() is really just an
&gt; explicit duplication of the existing ref-counting. You could instead have a
&gt; destructor that calls completionHandler, since callbackAggregator will be
&gt; destroyed when the last removeDataForTopPrivatelyOwnedDomains() completion
&gt; handler finishes executing.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/WebProcessProxy.cpp:206
&gt; &gt; +        explicit CallbackAggregator(std::function&lt;void()&gt; completionHandler)
&gt; 
&gt; Ditto.

See above.

&gt; &gt; Source/WebKit2/UIProcess/WebProcessProxy.cpp:227
&gt; &gt; +                RunLoop::main().dispatch(WTFMove(completionHandler));
&gt; 
&gt; removePendingCallback() is already called on the main thread, so is this
&gt; necessary?

No, you&apos;re right. Fixed.

&gt; &gt; Source/WebKit2/UIProcess/WebProcessProxy.cpp:231
&gt; &gt; +        std::function&lt;void()&gt; completionHandler;
&gt; 
&gt; Let&apos;s use WTF::Function instead of std::function.

See above.

&gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:49
&gt; &gt; +static auto minimumTimeBetweeenDataRecordsRemoval = 60;
&gt; 
&gt; Another good use for WTF::Seconds.

Will revisit.

&gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:52
&gt; &gt; +static bool notifyPages = false;
&gt; &gt; +static bool shouldClassifyResourcesBeforeDataRecordsRemoval = true;
&gt; 
&gt; auto works here too.

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/WebResourceLoadStatisticsStore.cpp:133
&gt; &gt; +        &amp;&amp; now &lt; (m_lastTimeDataRecordsWereRemoved + minimumTimeBetweeenDataRecordsRemoval))
&gt; 
&gt; No need for parentheses around the right operand of &lt;.

Fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/C/WKResourceLoadStatisticsManager.h:40
&gt; &gt; +    WK_EXPORT void WKResourceLoadStatisticsManagerSetPrevalentResource(String hostName, bool value);
&gt; &gt; +    WK_EXPORT bool WKResourceLoadStatisticsManagerIsPrevalentResource(String hostName);
&gt; &gt; +    WK_EXPORT void WKResourceLoadStatisticsManagerSetHasHadUserInteraction(String hostName, bool value);
&gt; &gt; +    WK_EXPORT bool WKResourceLoadStatisticsManagerIsHasHadUserInteraction(String hostName);
&gt; 
&gt; We need to use WKStringRef in the API, not WTF::String.

Fixed.

&gt; &gt;&gt; Source/WebKit2/UIProcess/API/C/WKResourceLoadStatisticsManager.h:47
&gt; &gt;&gt; +    WK_EXPORT void WKResourceLoadStatisticsManagerResetToConsistentState();
&gt; &gt; 
&gt; &gt; These aren&apos;t meant to be API, so we might need to prefix them with underscores or something. Alex will know!
&gt; 
&gt; None of the C API is public, so no need for underscores.

Got it. Leaving as is.

&gt; &gt; Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp:476
&gt; &gt; +void WebsiteDataStore::fetchDataForTopPrivatelyOwnedDomains(OptionSet&lt;WebsiteDataType&gt; dataTypes, OptionSet&lt;WebsiteDataFetchOption&gt; fetchOptions, const Vector&lt;String&gt;&amp; topPrivatelyOwnedDomains, std::function&lt;void(Vector&lt;WebsiteDataRecord&gt;)&gt; completionHandler)
&gt; 
&gt; completionHandler should be a Function&lt;...&gt;&amp;&amp;.

See above.

&gt; &gt; Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp:478
&gt; &gt; +    fetchData(dataTypes, fetchOptions, [topPrivatelyOwnedDomains, completionHandler, this](auto existingDataRecords) {
&gt; 
&gt; you should WTFMove completionHandler in the capture list (completionHandler
&gt; = WTFMove(completionHandler).
&gt; 
&gt; It&apos;d be a little better if existingDataRecords was passed as an rvalue
&gt; reference, but this is fine for now.

These changes were also part of what ended up crashing. Will revisit after I fully grasp Function&lt;...&gt;&amp;&amp;.

&gt; &gt; Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp:489
&gt; &gt; +                    if (dataRecordHost.endsWithIgnoringASCIICase(topPrivatelyOwnedDomain)) {
&gt; &gt; +                        auto suffixStart = dataRecordHost.length() - topPrivatelyOwnedDomain.length();
&gt; &gt; +                        if (!suffixStart || dataRecordHost[suffixStart - 1] == &apos;.&apos;) {
&gt; 
&gt; I believe this check is done in a few places now. It&apos;d be nice if we had a
&gt; helper function for this.

Agree.

&gt; &gt; Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp:1030
&gt; &gt; +void WebsiteDataStore::removeDataForTopPrivatelyOwnedDomains(OptionSet&lt;WebsiteDataType&gt; dataTypes, OptionSet&lt;WebsiteDataFetchOption&gt; fetchOptions, const Vector&lt;String&gt;&amp; topPrivatelyOwnedDomains, std::function&lt;void()&gt; completionHandler)
&gt; 
&gt; Ditto about using WTF::Function&lt;...&gt;&amp;&amp; instead.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp:1033
&gt; &gt; +        this-&gt;removeData(dataTypes, websiteDataRecords, [completionHandler]() {
&gt; 
&gt; Ditto about WTFMoving completionHandler in the capture list.

See above.

Thanks a lot for going through all this, Andy! I appreciate it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1275765</commentid>
    <comment_count>19</comment_count>
      <attachid>301246</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-02-10 23:36:16 -0800</bug_when>
    <thetext>Comment on attachment 301246
Patch

Clearing flags on attachment: 301246

Committed r212183: &lt;http://trac.webkit.org/changeset/212183&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1275766</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-02-10 23:36:22 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>299881</attachid>
            <date>2017-01-26 16:52:20 -0800</date>
            <delta_ts>2017-01-31 14:27:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-167474-20170126165017.patch</filename>
            <type>text/plain</type>
            <size>16699</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMTA1MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2IEBACisyMDE3LTAxLTI2ICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFVwZGF0ZXMgdG8gUmVzb3Vy
Y2UgTG9hZCBTdGF0aXN0aWNzOiBHZXQgdGhlIHJpZ2h0IHdlYnNpdGUgZGF0YSBzdG9yZSBhbmQg
aW50cm9kdWNlIHRpbWVvdXQgZm9yIHVzZXIgaW50ZXJhY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NzQ3NAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhlIHN0YXRpc3Rp
Y3MgYXJlIGJhc2VkIG9uIHRvcCBwcml2YXRlbHkgb3duZWQgZG9tYWlucworICAgICAgICB3aGlj
aCBjdXJyZW50bHkgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgbGF5b3V0IHRlc3RzIG5vciBBUEkgdGVz
dHMuCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnQ6OnVwZGF0ZUxhc3RIYW5kbGVkVXNlckdlc3R1cmVUaW1lc3RhbXApOgorICAgICAgICAg
ICAgVGhpcyBub3cgY2FsbHMgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1VzZXJJbnRlcmFjdGlv
bigpIGV2ZXJ5IHRpbWUgc2luY2UKKyAgICAgICAgICAgIHdlIHdhbnQgdG8ga2VlcCB0cmFjayBv
ZiB0aGUgbW9zdCByZWNlbnQgdXNlciBpbnRlcmFjdGlvbi4KKyAgICAgICAgKiBsb2FkZXIvUmVz
b3VyY2VMb2FkT2JzZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVkdWNlVGltZVJlc29s
dXRpb25Ub09uZURheSk6CisgICAgICAgICAgICBSZWR1Y2VzIHRpbWUgcmVzb2x1dGlvbiBmb3Ig
cHJpdmFjeSByZWFzb25zLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OmxvZ1VzZXJJbnRlcmFjdGlvbik6CisgICAgICAgICAgICBOb3cgc2V0cyBhbmQgdXBkYXRlcyBh
IHRpbWVzdGFtcCBvZiBtb3N0IHJlY2VudCB1c2VyIGludGVyYWN0aW9uLgorICAgICAgICAqIGxv
YWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3M6OmVuY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljczo6dG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljczo6bWVyZ2UpOgorICAgICAgICAgICAgU3VwcG9ydCBmb3Igc3RhdGlzdGljcyBtb3N0UmVj
ZW50VXNlckludGVyYWN0aW9uLCBncmFuZGZhdGhlcmVkLCBhbmQKKyAgICAgICAgICAgIGRhdGFS
ZWNvcmRzUmVtb3ZlZC4KKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5o
OgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6aGFzSGFkUmVjZW50VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgICAg
IE5vdyB0YWtlcyBpbnRvIGFjY291bnQgdGhlIHRpbWVzdGFtcCBvZiBtb3N0IHJlY2VudCB1c2Vy
IGludGVyYWN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnNXaXRob3V0VXNlckludGVyYWN0aW9uKToKKyAg
ICAgICAgICAgIE5vdyB1c2VzIGhhc0hhZFJlY2VudFVzZXJJbnRlcmFjdGlvbigpLgorCiAyMDE3
LTAxLTIzICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JF
U1NJT04gKHIyMDgxNDkpOiBWaWRlbyBkZXRhaWxzIGRvZXMgbm90IGFwZWFyIGFuZCBtaXNzaW5n
IHNjcnViYmVyIGluIENvbnRyb2wgQ2VudGVyCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJ
KHJldmlzaW9uIDIxMTA1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTYzMTksMTAgKzYzMTksOCBAQCBEb2N1bWVudDo6UmVnaW9uRml4ZWRQ
YWlyIERvY3VtZW50OjphYnNvCiAKIHZvaWQgRG9jdW1lbnQ6OnVwZGF0ZUxhc3RIYW5kbGVkVXNl
ckdlc3R1cmVUaW1lc3RhbXAoKQogewotICAgIGlmICghbV9sYXN0SGFuZGxlZFVzZXJHZXN0dXJl
VGltZXN0YW1wKQotICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIo
KS5sb2dVc2VySW50ZXJhY3Rpb24oKnRoaXMpOwotCiAgICAgbV9sYXN0SGFuZGxlZFVzZXJHZXN0
dXJlVGltZXN0YW1wID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CisgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZE9ic2VydmVyKCkubG9nVXNlckludGVyYWN0aW9uKCp0aGlz
KTsKIH0KIAogdm9pZCBEb2N1bWVudDo6c3RhcnRUcmFja2luZ1N0eWxlUmVjYWxjcygpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAJKHJl
dmlzaW9uIDIxMTA1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNl
cnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJTZXR0
aW5ncy5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUgIlVSTC5oIgorI2lu
Y2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIApAQCAtMjc4LDYgKzI3OSwx
MiBAQCB2b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dXZWJTb2NrZXRMCiAgICAgICAgIG1f
c3RvcmUtPmZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOwogfQogCitzdGF0aWMgZG91Ymxl
IHJlZHVjZVRpbWVSZXNvbHV0aW9uVG9PbmVEYXkoZG91YmxlIHNlY29uZHMpCit7CisgICAgc3Rh
dGljIGNvbnN0IGF1dG8gb25lRGF5SW5TZWNvbmRzID0gODY0MDA7CisgICAgcmV0dXJuIHN0ZDo6
Zmxvb3Ioc2Vjb25kcyAvIG9uZURheUluU2Vjb25kcykgKiBvbmVEYXlJblNlY29uZHM7Cit9Cisg
ICAgCiB2b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dVc2VySW50ZXJhY3Rpb24oY29uc3Qg
RG9jdW1lbnQmIGRvY3VtZW50KQogewogICAgIEFTU0VSVChkb2N1bWVudC5wYWdlKCkpOwpAQCAt
MjkxLDggKzI5OCwxMyBAQCB2b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dVc2VySW50ZXJh
CiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBtX3N0b3JlLT5lbnN1
cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1hcnlEb21haW4odXJsKSk7
Ci0gICAgc3RhdGlzdGljcy5oYWRVc2VySW50ZXJhY3Rpb24gPSB0cnVlOwotICAgIG1fc3RvcmUt
PmZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOworCisgICAgZG91YmxlIG5ld1RpbWVzdGFt
cCA9IHJlZHVjZVRpbWVSZXNvbHV0aW9uVG9PbmVEYXkoV1RGOjpjdXJyZW50VGltZSgpKTsKKyAg
ICBpZiAobmV3VGltZXN0YW1wICE9IHN0YXRpc3RpY3MubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlv
bikgeworICAgICAgICBzdGF0aXN0aWNzLmhhZFVzZXJJbnRlcmFjdGlvbiA9IHRydWU7CisgICAg
ICAgIHN0YXRpc3RpY3MubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiA9IG5ld1RpbWVzdGFtcDsK
KyAgICAgICAgbV9zdG9yZS0+ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CisgICAgfQog
fQogICAgIAogU3RyaW5nIFJlc291cmNlTG9hZE9ic2VydmVyOjpwcmltYXJ5RG9tYWluKGNvbnN0
IFVSTCYgdXJsKQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRp
c3RpY3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzLmNwcAkocmV2aXNpb24gMjExMDUwKQorKysgU291cmNlL1dlYkNvcmUvbG9h
ZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1
MSw4IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6ZW5jb2RlKEtleWUKICAgICAKICAg
ICAvLyBVc2VyIGludGVyYWN0aW9uCiAgICAgZW5jb2Rlci5lbmNvZGVCb29sKCJoYWRVc2VySW50
ZXJhY3Rpb24iLCBoYWRVc2VySW50ZXJhY3Rpb24pOworICAgIGVuY29kZXIuZW5jb2RlRG91Ymxl
KCJtb3N0UmVjZW50VXNlckludGVyYWN0aW9uIiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbik7
CisgICAgZW5jb2Rlci5lbmNvZGVCb29sKCJncmFuZGZhdGhlcmVkIiwgZ3JhbmRmYXRoZXJlZCk7
CiAgICAgCiAgICAgLy8gVG9wIGZyYW1lIHN0YXRzCiAgICAgZW5jb2Rlci5lbmNvZGVCb29sKCJ0
b3BGcmFtZUhhc0JlZW5OYXZpZ2F0ZWRUb0JlZm9yZSIsIHRvcEZyYW1lSGFzQmVlbk5hdmlnYXRl
ZFRvQmVmb3JlKTsKQEAgLTE3Nyw3ICsxNzksMTYgQEAgYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzOjpkZWNvZGUoS2V5ZQogCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZVVJbnQzMigiZGF0YVJl
Y29yZHNSZW1vdmVkIiwgZGF0YVJlY29yZHNSZW1vdmVkKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIAorCisgICAgaWYgKHZlcnNpb24gPCAzKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGVEb3VibGUoIm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24i
LCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZUJvb2woImdyYW5kZmF0aGVyZWQiLCBncmFuZGZhdGhlcmVk
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTIx
NCw2ICsyMjUsMTEgQEAgU3RyaW5nIFJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnRvU3RyaW5nKAog
ICAgIC8vIFVzZXIgaW50ZXJhY3Rpb24KICAgICBhcHBlbmRCb29sZWFuKGJ1aWxkZXIsICJoYWRV
c2VySW50ZXJhY3Rpb24iLCBoYWRVc2VySW50ZXJhY3Rpb24pOwogICAgIGJ1aWxkZXIuYXBwZW5k
KCdcbicpOworICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiICAgIG1vc3RSZWNlbnRVc2VySW50
ZXJhY3Rpb246ICIpOworICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKG1vc3RSZWNlbnRVc2VySW50
ZXJhY3Rpb24pOworICAgIGJ1aWxkZXIuYXBwZW5kKCdcbicpOworICAgIGFwcGVuZEJvb2xlYW4o
YnVpbGRlciwgIiAgICBncmFuZGZhdGhlcmVkIiwgZ3JhbmRmYXRoZXJlZCk7CisgICAgYnVpbGRl
ci5hcHBlbmQoJ1xuJyk7CiAgICAgCiAgICAgLy8gVG9wIGZyYW1lIHN0YXRzCiAgICAgYXBwZW5k
Qm9vbGVhbihidWlsZGVyLCAidG9wRnJhbWVIYXNCZWVuTmF2aWdhdGVkVG9CZWZvcmUiLCB0b3BG
cmFtZUhhc0JlZW5OYXZpZ2F0ZWRUb0JlZm9yZSk7CkBAIC0yOTUsNiArMzExLDggQEAgdm9pZCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjptZXJnZShjb25zdAogICAgIEFTU0VSVChvdGhlci5oaWdo
TGV2ZWxEb21haW4gPT0gaGlnaExldmVsRG9tYWluKTsKIAogICAgIGhhZFVzZXJJbnRlcmFjdGlv
biB8PSBvdGhlci5oYWRVc2VySW50ZXJhY3Rpb247CisgICAgbW9zdFJlY2VudFVzZXJJbnRlcmFj
dGlvbiA9IG90aGVyLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb247CisgICAgZ3JhbmRmYXRoZXJl
ZCB8PSBvdGhlci5ncmFuZGZhdGhlcmVkOwogICAgIAogICAgIC8vIFRvcCBmcmFtZSBzdGF0cwog
ICAgIHRvcEZyYW1lSGFzQmVlblJlZGlyZWN0ZWRUbyArPSBvdGhlci50b3BGcmFtZUhhc0JlZW5S
ZWRpcmVjdGVkVG87CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzLmgJKHJldmlzaW9uIDIxMTA1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDkg
QEAgc3RydWN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MgewogCiAgICAgLy8gVXNlciBpbnRlcmFj
dGlvbgogICAgIGJvb2wgaGFkVXNlckludGVyYWN0aW9uIHsgZmFsc2UgfTsKLSAgICAKKyAgICBk
b3VibGUgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiB7IDAuMCB9OworICAgIGJvb2wgZ3JhbmRm
YXRoZXJlZCB7IGZhbHNlIH07CisKICAgICAvLyBUb3AgZnJhbWUgc3RhdHMKICAgICB1bnNpZ25l
ZCB0b3BGcmFtZUhhc0JlZW5SZWRpcmVjdGVkVG8geyAwIH07CiAgICAgdW5zaWduZWQgdG9wRnJh
bWVIYXNCZWVuUmVkaXJlY3RlZEZyb20geyAwIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAkocmV2aXNpb24g
MjExMDUwKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDExICszMywxNCBAQAogI2luY2x1ZGUgIlJl
c291cmNlTG9hZFN0YXRpc3RpY3MuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNs
dWRlICJVUkwuaCIKKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgY29uc3Qg
YXV0byBzdGF0aXN0aWNzTW9kZWxWZXJzaW9uID0gMjsKK3N0YXRpYyBjb25zdCBhdXRvIHN0YXRp
c3RpY3NNb2RlbFZlcnNpb24gPSAzOworLy8gMzAgZGF5cyBpbiBzZWNvbmRzCitzdGF0aWMgY29u
c3QgYXV0byB0aW1lVG9MaXZlVXNlckludGVyYWN0aW9uID0gMjU5MjAwMDsKIAogUmVmPFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjcmVh
dGUoKQogewpAQCAtMTUwLDExICsxNTMsMjYgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OnByb2NlcwogICAgICAgICBwcm9jZXNzRnVuY3Rpb24ocmVzb3VyY2VTdGF0aXN0aWMp
OwogfQogCitzdGF0aWMgYm9vbCBoYXNIYWRSZWNlbnRVc2VySW50ZXJhY3Rpb24oUmVzb3VyY2VM
b2FkU3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0aXN0aWMpCit7CisgICAgaWYgKCFyZXNvdXJjZVN0
YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rpb24pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmICgoY3VycmVudFRpbWUoKSAtIHJlc291cmNlU3RhdGlzdGljLm1vc3RSZWNlbnRVc2VySW50
ZXJhY3Rpb24pID4gdGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbikgeworICAgICAgICAvLyBEcm9w
IHByaXZhY3kgc2Vuc2l0aXZlIGRhdGEgYmVjYXVzZSB3ZSBubyBsb25nZXIgbmVlZCBpdC4KKyAg
ICAgICAgcmVzb3VyY2VTdGF0aXN0aWMubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiA9IDAuMDsK
KyAgICAgICAgcmVzb3VyY2VTdGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uID0gZmFsc2U7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogVmVj
dG9yPFN0cmluZz4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcmV2YWxlbnRSZXNvdXJj
ZURvbWFpbnNXaXRob3V0VXNlckludGVyYWN0aW9uKCkKIHsKICAgICBWZWN0b3I8U3RyaW5nPiBw
cmV2YWxlbnRSZXNvdXJjZXM7CiAgICAgZm9yIChhdXRvJiByZXNvdXJjZVN0YXRpc3RpYyA6IG1f
cmVzb3VyY2VTdGF0aXN0aWNzTWFwLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmIChyZXNvdXJjZVN0
YXRpc3RpYy5pc1ByZXZhbGVudFJlc291cmNlICYmICFyZXNvdXJjZVN0YXRpc3RpYy5oYWRVc2Vy
SW50ZXJhY3Rpb24pCisgICAgICAgIGlmIChyZXNvdXJjZVN0YXRpc3RpYy5pc1ByZXZhbGVudFJl
c291cmNlICYmICFoYXNIYWRSZWNlbnRVc2VySW50ZXJhY3Rpb24ocmVzb3VyY2VTdGF0aXN0aWMp
KQogICAgICAgICAgICAgcHJldmFsZW50UmVzb3VyY2VzLmFwcGVuZChyZXNvdXJjZVN0YXRpc3Rp
Yy5oaWdoTGV2ZWxEb21haW4pOwogICAgIH0KICAgICByZXR1cm4gcHJldmFsZW50UmVzb3VyY2Vz
OwpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMjExMjQwKQorKysgU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTctMDEtMjYgIEpvaG4g
V2lsYW5kZXIgIDx3aWxhbmRlckBhcHBsZS5jb20+CisKKyAgICAgICAgVXBkYXRlcyB0byBSZXNv
dXJjZSBMb2FkIFN0YXRpc3RpY3M6IEdldCB0aGUgcmlnaHQgd2Vic2l0ZSBkYXRhIHN0b3JlIGFu
ZCBpbnRyb2R1Y2UgdGltZW91dCBmb3IgdXNlciBpbnRlcmFjdGlvbgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY3NDc0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50
Q29kZXJzLmNwcDoKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzPjo6ZW5jb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzPjo6ZGVjb2RlKToKKyAgICAgICAgICAgIFN1cHBvcnQgZm9yIHN0YXRpc3Rp
Y3MgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiwgZ3JhbmRmYXRoZXJlZCwgYW5kCisgICAgICAg
ICAgICBkYXRhUmVjb3Jkc1JlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
cm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6Zmlyc3RQZXJzaXN0
ZW50V2Vic2l0ZURhdGFTdG9yZUZvckV4aXN0aW5nV2ViUGFnZXMpOgorICAgICAgICAgICAgQSB3
YXkgdG8gZ2V0IHRoZSB3ZWJzaXRlIGRhdGEgc3RvcmUgY29uZmlndXJlZCBieSB0aGUgZW1iZWRk
aW5nIGNsaWVudC4KKyAgICAgICAgICAgIEFQSTo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERh
dGFTdG9yZSgpIGRvZXMgbm90IGRvIHRoaXMgd2hpY2ggY2F1c2VkIHVzCisgICAgICAgICAgICB0
byBza2lwIHNlc3Npb24gc3RvcmFnZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1By
b3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
cmVtb3ZlRGF0YVJlY29yZHMpOgorICAgICAgICAgICAgVXNlIFdlYlByb2Nlc3NQcm94eTo6Zmly
c3RQZXJzaXN0ZW50V2Vic2l0ZURhdGFTdG9yZUZvckV4aXN0aW5nV2ViUGFnZXMoKS4KKwogMjAx
Ny0wMS0yNiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBD
UFUgdXNhZ2UgZGlhZ25vc3RpYyBsb2dnaW5nIGluIFBlckFjdGl2aXR5U3RhdGVDUFVVc2FnZVNh
bXBsZXIKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRD
b2RlcnMuY3BwCShyZXZpc2lvbiAyMTEwNTApCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI0OCw2ICsyMjQ4LDgg
QEAgdm9pZCBBcmd1bWVudENvZGVyPFJlc291cmNlTG9hZFN0YXRpc3RpYwogICAgIAogICAgIC8v
IFVzZXIgaW50ZXJhY3Rpb24KICAgICBlbmNvZGVyIDw8IHN0YXRpc3RpY3MuaGFkVXNlckludGVy
YWN0aW9uOworICAgIGVuY29kZXIgPDwgc3RhdGlzdGljcy5tb3N0UmVjZW50VXNlckludGVyYWN0
aW9uOworICAgIGVuY29kZXIgPDwgc3RhdGlzdGljcy5ncmFuZGZhdGhlcmVkOwogICAgIAogICAg
IC8vIFRvcCBmcmFtZSBzdGF0cwogICAgIGVuY29kZXIgPDwgc3RhdGlzdGljcy50b3BGcmFtZUhh
c0JlZW5OYXZpZ2F0ZWRUb0JlZm9yZTsKQEAgLTIyNzgsNiArMjI4MCw3IEBAIHZvaWQgQXJndW1l
bnRDb2RlcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWMKICAgICAvLyBQcmV2YWxlbnQgUmVzb3VyY2UK
ICAgICBlbmNvZGVyIDw8IHN0YXRpc3RpY3MucmVkaXJlY3RlZFRvT3RoZXJQcmV2YWxlbnRSZXNv
dXJjZU9yaWdpbnM7CiAgICAgZW5jb2RlciA8PCBzdGF0aXN0aWNzLmlzUHJldmFsZW50UmVzb3Vy
Y2U7CisgICAgZW5jb2RlciA8PCBzdGF0aXN0aWNzLmRhdGFSZWNvcmRzUmVtb3ZlZDsKIH0KIAog
Ym9vbCBBcmd1bWVudENvZGVyPFJlc291cmNlTG9hZFN0YXRpc3RpY3M+OjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlciwgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgc3RhdGlzdGljcykK
QEAgLTIyODgsNiArMjI5MSwxMiBAQCBib29sIEFyZ3VtZW50Q29kZXI8UmVzb3VyY2VMb2FkU3Rh
dGlzdGljCiAgICAgLy8gVXNlciBpbnRlcmFjdGlvbgogICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
c3RhdGlzdGljcy5oYWRVc2VySW50ZXJhY3Rpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0YXRpc3RpY3MubW9zdFJlY2VudFVzZXJJbnRlcmFj
dGlvbikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
c3RhdGlzdGljcy5ncmFuZGZhdGhlcmVkKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAog
ICAgIC8vIFRvcCBmcmFtZSBzdGF0cwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3RhdGlzdGlj
cy50b3BGcmFtZUhhc0JlZW5OYXZpZ2F0ZWRUb0JlZm9yZSkpCkBAIC0yMzU4LDcgKzIzNjcsMTAg
QEAgYm9vbCBBcmd1bWVudENvZGVyPFJlc291cmNlTG9hZFN0YXRpc3RpYwogICAgIAogICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUoc3RhdGlzdGljcy5pc1ByZXZhbGVudFJlc291cmNlKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIAorCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGF0aXN0
aWNzLmRhdGFSZWNvcmRzUmVtb3ZlZCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIHJl
dHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vz
c1Byb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJv
Y2Vzc1Byb3h5LmNwcAkocmV2aXNpb24gMjExMDUwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAK
ICNpbmNsdWRlICJBUElGcmFtZUhhbmRsZS5oIgogI2luY2x1ZGUgIkFQSVBhZ2VHcm91cEhhbmRs
ZS5oIgogI2luY2x1ZGUgIkFQSVBhZ2VIYW5kbGUuaCIKKyNpbmNsdWRlICJBUElXZWJzaXRlRGF0
YVN0b3JlLmgiCiAjaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIkRvd25sb2Fk
UHJveHlNYXAuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCkBAIC0xOTksNiArMjAwLDE1IEBAIFdl
YlBhZ2VQcm94eSogV2ViUHJvY2Vzc1Byb3h5Ojp3ZWJQYWdlKHUKICAgICByZXR1cm4gZ2xvYmFs
UGFnZU1hcCgpLmdldChwYWdlSUQpOwogfQogCitXZWJzaXRlRGF0YVN0b3JlJiBXZWJQcm9jZXNz
UHJveHk6OmZpcnN0UGVyc2lzdGVudFdlYnNpdGVEYXRhU3RvcmVGb3JFeGlzdGluZ1dlYlBhZ2Vz
KCkKK3sKKyAgICBmb3IgKGF1dG8mIHBhZ2UgOiBnbG9iYWxQYWdlTWFwKCkpIHsKKyAgICAgICAg
aWYgKHBhZ2UudmFsdWUtPndlYnNpdGVEYXRhU3RvcmUoKS5pc1BlcnNpc3RlbnQoKSkKKyAgICAg
ICAgICAgIHJldHVybiBwYWdlLnZhbHVlLT53ZWJzaXRlRGF0YVN0b3JlKCk7CisgICAgfQorICAg
IHJldHVybiBBUEk6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+d2Vic2l0
ZURhdGFTdG9yZSgpOworfQorCiBSZWY8V2ViUGFnZVByb3h5PiBXZWJQcm9jZXNzUHJveHk6OmNy
ZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCYgcGFnZUNsaWVudCwgUmVmPEFQSTo6UGFnZUNvbmZpZ3Vy
YXRpb24+JiYgcGFnZUNvbmZpZ3VyYXRpb24pCiB7CiAgICAgdWludDY0X3QgcGFnZUlEID0gZ2Vu
ZXJhdGVQYWdlSUQoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNz
UHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vz
c1Byb3h5LmgJKHJldmlzaW9uIDIxMTA1MCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQcm9jZXNzUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsNiArNzcsNyBAQCBwdWJsaWM6
CiAgICAgV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sKCkgeyByZXR1cm4gbV9wcm9jZXNzUG9v
bDsgfQogCiAgICAgc3RhdGljIFdlYlBhZ2VQcm94eSogd2ViUGFnZSh1aW50NjRfdCBwYWdlSUQp
OworICAgIHN0YXRpYyBXZWJzaXRlRGF0YVN0b3JlJiBmaXJzdFBlcnNpc3RlbnRXZWJzaXRlRGF0
YVN0b3JlRm9yRXhpc3RpbmdXZWJQYWdlcygpOwogICAgIFJlZjxXZWJQYWdlUHJveHk+IGNyZWF0
ZVdlYlBhZ2UoUGFnZUNsaWVudCYsIFJlZjxBUEk6OlBhZ2VDb25maWd1cmF0aW9uPiYmKTsKICAg
ICB2b2lkIGFkZEV4aXN0aW5nV2ViUGFnZShXZWJQYWdlUHJveHkqLCB1aW50NjRfdCBwYWdlSUQp
OwogICAgIHZvaWQgcmVtb3ZlV2ViUGFnZSh1aW50NjRfdCBwYWdlSUQpOwpJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5jcHAJKHJldmlzaW9uIDIxMTA1MCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw5ICsyNiw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlLmgiCiAKLSNpbmNsdWRlICJBUElXZWJzaXRlRGF0YVN0b3Jl
LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vz
c1Bvb2wuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmVNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYnNpdGVEYXRh
RmV0Y2hPcHRpb24uaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YVR5cGUuaCIKQEAgLTEyMywxNiAr
MTIzLDI3IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZW0KIAogICAg
IGlmIChkYXRhVHlwZXNUb1JlbW92ZS5pc0VtcHR5KCkpIHsKICAgICAgICAgZGF0YVR5cGVzVG9S
ZW1vdmUgfD0gV2Vic2l0ZURhdGFUeXBlOjpDb29raWVzOwotICAgICAgICBkYXRhVHlwZXNUb1Jl
bW92ZSB8PSBXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZTsKLSAgICAgICAgZGF0YVR5cGVz
VG9SZW1vdmUgfD0gV2Vic2l0ZURhdGFUeXBlOjpJbmRleGVkREJEYXRhYmFzZXM7CiAgICAgICAg
IGRhdGFUeXBlc1RvUmVtb3ZlIHw9IFdlYnNpdGVEYXRhVHlwZTo6RGlza0NhY2hlOwogICAgICAg
ICBkYXRhVHlwZXNUb1JlbW92ZSB8PSBXZWJzaXRlRGF0YVR5cGU6Ok1lbW9yeUNhY2hlOworICAg
ICAgICBkYXRhVHlwZXNUb1JlbW92ZSB8PSBXZWJzaXRlRGF0YVR5cGU6Ok9mZmxpbmVXZWJBcHBs
aWNhdGlvbkNhY2hlOworICAgICAgICBkYXRhVHlwZXNUb1JlbW92ZSB8PSBXZWJzaXRlRGF0YVR5
cGU6OlNlc3Npb25TdG9yYWdlOworICAgICAgICBkYXRhVHlwZXNUb1JlbW92ZSB8PSBXZWJzaXRl
RGF0YVR5cGU6OkxvY2FsU3RvcmFnZTsKKyAgICAgICAgZGF0YVR5cGVzVG9SZW1vdmUgfD0gV2Vi
c2l0ZURhdGFUeXBlOjpXZWJTUUxEYXRhYmFzZXM7CisgICAgICAgIGRhdGFUeXBlc1RvUmVtb3Zl
IHw9IFdlYnNpdGVEYXRhVHlwZTo6SW5kZXhlZERCRGF0YWJhc2VzOworICAgICAgICBkYXRhVHlw
ZXNUb1JlbW92ZSB8PSBXZWJzaXRlRGF0YVR5cGU6Ok1lZGlhS2V5czsKKyAgICAgICAgZGF0YVR5
cGVzVG9SZW1vdmUgfD0gV2Vic2l0ZURhdGFUeXBlOjpIU1RTQ2FjaGU7CisgICAgICAgIGRhdGFU
eXBlc1RvUmVtb3ZlIHw9IFdlYnNpdGVEYXRhVHlwZTo6U2VhcmNoRmllbGRSZWNlbnRTZWFyY2hl
czsKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICAgICAgZGF0YVR5cGVzVG9S
ZW1vdmUgfD0gV2Vic2l0ZURhdGFUeXBlOjpQbHVnSW5EYXRhOworI2VuZGlmCisjaWYgRU5BQkxF
KE1FRElBX1NUUkVBTSkKKyAgICAgICAgZGF0YVR5cGVzVG9SZW1vdmUgfD0gV2Vic2l0ZURhdGFU
eXBlOjpNZWRpYURldmljZUlkZW50aWZpZXI7CisjZW5kaWYKICAgICB9CiAKICAgICAvLyBTd2l0
Y2ggdG8gdGhlIG1haW4gdGhyZWFkIHRvIGdldCB0aGUgZGVmYXVsdCB3ZWJzaXRlIGRhdGEgc3Rv
cmUKICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3ByZXZhbGVudFJlc291cmNlRG9tYWlu
cyA9IFdURk1vdmUocHJldmFsZW50UmVzb3VyY2VEb21haW5zKSwgdGhpc10gKCkgbXV0YWJsZSB7
Ci0gICAgICAgIGF1dG8mIHdlYnNpdGVEYXRhU3RvcmUgPSBBUEk6OldlYnNpdGVEYXRhU3RvcmU6
OmRlZmF1bHREYXRhU3RvcmUoKS0+d2Vic2l0ZURhdGFTdG9yZSgpOwotCisgICAgICAgIGF1dG8m
IHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJQcm9jZXNzUHJveHk6OmZpcnN0UGVyc2lzdGVudFdlYnNp
dGVEYXRhU3RvcmVGb3JFeGlzdGluZ1dlYlBhZ2VzKCk7CiAgICAgICAgIHdlYnNpdGVEYXRhU3Rv
cmUuZmV0Y2hEYXRhKGRhdGFUeXBlc1RvUmVtb3ZlLCB7IH0sIFtwcmV2YWxlbnRSZXNvdXJjZURv
bWFpbnMgPSBXVEZNb3ZlKHByZXZhbGVudFJlc291cmNlRG9tYWlucyksIHRoaXNdKGF1dG8gd2Vi
c2l0ZURhdGFSZWNvcmRzKSB7CiAgICAgICAgICAgICBWZWN0b3I8V2Vic2l0ZURhdGFSZWNvcmQ+
IGRhdGFSZWNvcmRzOwogICAgICAgICAgICAgVmVjdG9yPFN0cmluZz4gcHJldmFsZW50UmVzb3Vy
Y2VEb21haW5zV2l0aERhdGFSZWNvcmRzOwpAQCAtMTUzLDcgKzE2NCw3IEBAIHZvaWQgV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZW0KICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGF1dG8mIHdlYnNpdGVEYXRhU3RvcmUgPSBBUEk6
OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+d2Vic2l0ZURhdGFTdG9yZSgp
OworICAgICAgICAgICAgYXV0byYgd2Vic2l0ZURhdGFTdG9yZSA9IFdlYlByb2Nlc3NQcm94eTo6
Zmlyc3RQZXJzaXN0ZW50V2Vic2l0ZURhdGFTdG9yZUZvckV4aXN0aW5nV2ViUGFnZXMoKTsKICAg
ICAgICAgICAgIHdlYnNpdGVEYXRhU3RvcmUucmVtb3ZlRGF0YShkYXRhVHlwZXNUb1JlbW92ZSwg
ZGF0YVJlY29yZHMsIFtwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnNXaXRoRGF0YVJlY29yZHMgPSBX
VEZNb3ZlKHByZXZhbGVudFJlc291cmNlRG9tYWluc1dpdGhEYXRhUmVjb3JkcyksIHRoaXNdIHsK
ICAgICAgICAgICAgICAgICB0aGlzLT5jb3JlU3RvcmUoKS51cGRhdGVTdGF0aXN0aWNzRm9yUmVt
b3ZlZERhdGFSZWNvcmRzKHByZXZhbGVudFJlc291cmNlRG9tYWluc1dpdGhEYXRhUmVjb3Jkcyk7
CiAgICAgICAgICAgICAgICAgbV9kYXRhUmVjb3Jkc1JlbW92YWxQZW5kaW5nID0gZmFsc2U7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>300260</attachid>
            <date>2017-01-31 14:27:25 -0800</date>
            <delta_ts>2017-01-31 15:39:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-167474-20170131142514.patch</filename>
            <type>text/plain</type>
            <size>23773</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMTA1MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBACisyMDE3LTAxLTMxICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFVwZGF0ZXMgdG8gUmVzb3Vy
Y2UgTG9hZCBTdGF0aXN0aWNzOiBHZXQgdGhlIHJpZ2h0IHdlYnNpdGUgZGF0YSBzdG9yZSBhbmQg
aW50cm9kdWNlIHRpbWVvdXQgZm9yIHVzZXIgaW50ZXJhY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NzQ3NAorICAgICAgICA8cmRhcjovL3By
b2JsZW0vMzAyOTAyNzA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzLiBUaGUgc3RhdGlzdGljcyBhcmUgYmFzZWQgb24gdG9wIHBy
aXZhdGVseSBvd25lZCBkb21haW5zCisgICAgICAgIHdoaWNoIGN1cnJlbnRseSBhcmUgbm90IHN1
cHBvcnRlZCBieSBsYXlvdXQgdGVzdHMgbm9yIEFQSSB0ZXN0cy4KKworICAgICAgICAqIGRvbS9E
b2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dXBkYXRlTGFzdEhhbmRs
ZWRVc2VyR2VzdHVyZVRpbWVzdGFtcCk6CisgICAgICAgICAgICBUaGlzIG5vdyBjYWxscyBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6bG9nVXNlckludGVyYWN0aW9uKCkgZXZlcnkgdGltZSBzaW5jZQor
ICAgICAgICAgICAgd2Ugd2FudCB0byBrZWVwIHRyYWNrIG9mIHRoZSBtb3N0IHJlY2VudCB1c2Vy
IGludGVyYWN0aW9uLgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpyZWR1Y2VUaW1lUmVzb2x1dGlvblRvT25lRGF5KToKKyAgICAg
ICAgICAgIFJlZHVjZXMgdGltZSByZXNvbHV0aW9uIGZvciBwcml2YWN5IHJlYXNvbnMuCisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nVXNlckludGVyYWN0aW9uKToK
KyAgICAgICAgICAgIE5vdyBzZXRzIGFuZCB1cGRhdGVzIGEgdGltZXN0YW1wIG9mIG1vc3QgcmVj
ZW50IHVzZXIgaW50ZXJhY3Rpb24uCisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRp
c3RpY3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljczo6ZW5j
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M6OmRlY29kZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjp0b1N0cmluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjptZXJnZSk6CisgICAgICAg
ICAgICBTdXBwb3J0IGZvciBzdGF0aXN0aWNzIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24sIGdy
YW5kZmF0aGVyZWQsIGFuZAorICAgICAgICAgICAgZGF0YVJlY29yZHNSZW1vdmVkLgorICAgICAg
ICAqIGxvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmg6CisgICAgICAgICogbG9hZGVyL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpoYXNIYWRS
ZWNlbnRVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAgICAgVGFrZXMgaW50byBhY2NvdW50IHRo
ZSB0aW1lc3RhbXAgb2YgbW9zdCByZWNlbnQgdXNlciBpbnRlcmFjdGlvbi4KKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJldmFsZW50UmVzb3VyY2VEb21h
aW5zV2l0aG91dFVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgICAgICBOb3cgdXNlcyBoYXNIYWRS
ZWNlbnRVc2VySW50ZXJhY3Rpb24oKS4KKwogMjAxNy0wMS0yMyAgSmVyIE5vYmxlICA8amVyLm5v
YmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OIChyMjA4MTQ5KTogVmlkZW8gZGV0
YWlscyBkb2VzIG5vdCBhcGVhciBhbmQgbWlzc2luZyBzY3J1YmJlciBpbiBDb250cm9sIENlbnRl
cgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAyMTEwNTApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MzE5LDEwICs2
MzE5LDggQEAgRG9jdW1lbnQ6OlJlZ2lvbkZpeGVkUGFpciBEb2N1bWVudDo6YWJzbwogCiB2b2lk
IERvY3VtZW50Ojp1cGRhdGVMYXN0SGFuZGxlZFVzZXJHZXN0dXJlVGltZXN0YW1wKCkKIHsKLSAg
ICBpZiAoIW1fbGFzdEhhbmRsZWRVc2VyR2VzdHVyZVRpbWVzdGFtcCkKLSAgICAgICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZE9ic2VydmVyKCkubG9nVXNlckludGVyYWN0aW9uKCp0aGlz
KTsKLQogICAgIG1fbGFzdEhhbmRsZWRVc2VyR2VzdHVyZVRpbWVzdGFtcCA9IG1vbm90b25pY2Fs
bHlJbmNyZWFzaW5nVGltZSgpOworICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWRPYnNl
cnZlcigpLmxvZ1VzZXJJbnRlcmFjdGlvbigqdGhpcyk7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OnN0
YXJ0VHJhY2tpbmdTdHlsZVJlY2FsY3MoKQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jl
c291cmNlTG9hZE9ic2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCShyZXZpc2lvbiAyMTEwNTApCisrKyBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTaGFyZWRC
dWZmZXIuaCIKICNpbmNsdWRlICJVUkwuaCIKKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4K
ICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdCdWlsZGVyLmg+CiAKQEAgLTI3OCw2ICsyNzksMTIgQEAgdm9pZCBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6bG9nV2ViU29ja2V0TAogICAgICAgICBtX3N0b3JlLT5maXJlRGF0YU1vZGlmaWNhdGlv
bkhhbmRsZXIoKTsKIH0KIAorc3RhdGljIGRvdWJsZSByZWR1Y2VUaW1lUmVzb2x1dGlvblRvT25l
RGF5KGRvdWJsZSBzZWNvbmRzKQoreworICAgIHN0YXRpYyBjb25zdCBhdXRvIG9uZURheUluU2Vj
b25kcyA9IDg2NDAwOworICAgIHJldHVybiBzdGQ6OmZsb29yKHNlY29uZHMgLyBvbmVEYXlJblNl
Y29uZHMpICogb25lRGF5SW5TZWNvbmRzOworfQorICAgIAogdm9pZCBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6bG9nVXNlckludGVyYWN0aW9uKGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkKIHsKICAg
ICBBU1NFUlQoZG9jdW1lbnQucGFnZSgpKTsKQEAgLTI5MSw4ICsyOTgsMTMgQEAgdm9pZCBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6bG9nVXNlckludGVyYQogICAgICAgICByZXR1cm47CiAKICAgICBh
dXRvJiBzdGF0aXN0aWNzID0gbV9zdG9yZS0+ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJp
bWFyeURvbWFpbihwcmltYXJ5RG9tYWluKHVybCkpOwotICAgIHN0YXRpc3RpY3MuaGFkVXNlcklu
dGVyYWN0aW9uID0gdHJ1ZTsKLSAgICBtX3N0b3JlLT5maXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRs
ZXIoKTsKKworICAgIGRvdWJsZSBuZXdUaW1lc3RhbXAgPSByZWR1Y2VUaW1lUmVzb2x1dGlvblRv
T25lRGF5KFdURjo6Y3VycmVudFRpbWUoKSk7CisgICAgaWYgKG5ld1RpbWVzdGFtcCAhPSBzdGF0
aXN0aWNzLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24pIHsKKyAgICAgICAgc3RhdGlzdGljcy5o
YWRVc2VySW50ZXJhY3Rpb24gPSB0cnVlOworICAgICAgICBzdGF0aXN0aWNzLm1vc3RSZWNlbnRV
c2VySW50ZXJhY3Rpb24gPSBuZXdUaW1lc3RhbXA7CisgICAgICAgIG1fc3RvcmUtPmZpcmVEYXRh
TW9kaWZpY2F0aW9uSGFuZGxlcigpOworICAgIH0KIH0KICAgICAKIFN0cmluZyBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6cHJpbWFyeURvbWFpbihjb25zdCBVUkwmIHVybCkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5jcHAJKHJldmlzaW9u
IDIxMTA1MCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3M6OmVuY29kZShLZXllCiAgICAgCiAgICAgLy8gVXNlciBpbnRlcmFjdGlvbgogICAg
IGVuY29kZXIuZW5jb2RlQm9vbCgiaGFkVXNlckludGVyYWN0aW9uIiwgaGFkVXNlckludGVyYWN0
aW9uKTsKKyAgICBlbmNvZGVyLmVuY29kZURvdWJsZSgibW9zdFJlY2VudFVzZXJJbnRlcmFjdGlv
biIsIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24pOworICAgIGVuY29kZXIuZW5jb2RlQm9vbCgi
Z3JhbmRmYXRoZXJlZCIsIGdyYW5kZmF0aGVyZWQpOwogICAgIAogICAgIC8vIFRvcCBmcmFtZSBz
dGF0cwogICAgIGVuY29kZXIuZW5jb2RlQm9vbCgidG9wRnJhbWVIYXNCZWVuTmF2aWdhdGVkVG9C
ZWZvcmUiLCB0b3BGcmFtZUhhc0JlZW5OYXZpZ2F0ZWRUb0JlZm9yZSk7CkBAIC0xNzcsNyArMTc5
LDE2IEBAIGJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6ZGVjb2RlKEtleWUKIAogICAgIGlm
ICghZGVjb2Rlci5kZWNvZGVVSW50MzIoImRhdGFSZWNvcmRzUmVtb3ZlZCIsIGRhdGFSZWNvcmRz
UmVtb3ZlZCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKworICAgIGlmICh2ZXJzaW9u
IDwgMykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRG91
YmxlKCJtb3N0UmVjZW50VXNlckludGVyYWN0aW9uIiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlv
bikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGVCb29s
KCJncmFuZGZhdGhlcmVkIiwgZ3JhbmRmYXRoZXJlZCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yMTQsNiArMjI1LDExIEBAIFN0cmluZyBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzOjp0b1N0cmluZygKICAgICAvLyBVc2VyIGludGVyYWN0aW9uCiAg
ICAgYXBwZW5kQm9vbGVhbihidWlsZGVyLCAiaGFkVXNlckludGVyYWN0aW9uIiwgaGFkVXNlcklu
dGVyYWN0aW9uKTsKICAgICBidWlsZGVyLmFwcGVuZCgnXG4nKTsKKyAgICBidWlsZGVyLmFwcGVu
ZExpdGVyYWwoIiAgICBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uOiAiKTsKKyAgICBidWlsZGVy
LmFwcGVuZE51bWJlcihtb3N0UmVjZW50VXNlckludGVyYWN0aW9uKTsKKyAgICBidWlsZGVyLmFw
cGVuZCgnXG4nKTsKKyAgICBhcHBlbmRCb29sZWFuKGJ1aWxkZXIsICIgICAgZ3JhbmRmYXRoZXJl
ZCIsIGdyYW5kZmF0aGVyZWQpOworICAgIGJ1aWxkZXIuYXBwZW5kKCdcbicpOwogICAgIAogICAg
IC8vIFRvcCBmcmFtZSBzdGF0cwogICAgIGFwcGVuZEJvb2xlYW4oYnVpbGRlciwgInRvcEZyYW1l
SGFzQmVlbk5hdmlnYXRlZFRvQmVmb3JlIiwgdG9wRnJhbWVIYXNCZWVuTmF2aWdhdGVkVG9CZWZv
cmUpOwpAQCAtMjk1LDYgKzMxMSw4IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6bWVy
Z2UoY29uc3QKICAgICBBU1NFUlQob3RoZXIuaGlnaExldmVsRG9tYWluID09IGhpZ2hMZXZlbERv
bWFpbik7CiAKICAgICBoYWRVc2VySW50ZXJhY3Rpb24gfD0gb3RoZXIuaGFkVXNlckludGVyYWN0
aW9uOworICAgIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24gPSBvdGhlci5tb3N0UmVjZW50VXNl
ckludGVyYWN0aW9uOworICAgIGdyYW5kZmF0aGVyZWQgfD0gb3RoZXIuZ3JhbmRmYXRoZXJlZDsK
ICAgICAKICAgICAvLyBUb3AgZnJhbWUgc3RhdHMKICAgICB0b3BGcmFtZUhhc0JlZW5SZWRpcmVj
dGVkVG8gKz0gb3RoZXIudG9wRnJhbWVIYXNCZWVuUmVkaXJlY3RlZFRvOwpJbmRleDogU291cmNl
L1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5oCShyZXZpc2lvbiAy
MTEwNTApCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw5IEBAIHN0cnVjdCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzIHsKIAogICAgIC8vIFVzZXIgaW50ZXJhY3Rpb24KICAgICBib29sIGhhZFVzZXJJbnRl
cmFjdGlvbiB7IGZhbHNlIH07Ci0gICAgCisgICAgZG91YmxlIG1vc3RSZWNlbnRVc2VySW50ZXJh
Y3Rpb24geyAwLjAgfTsKKyAgICBib29sIGdyYW5kZmF0aGVyZWQgeyBmYWxzZSB9OworCiAgICAg
Ly8gVG9wIGZyYW1lIHN0YXRzCiAgICAgdW5zaWduZWQgdG9wRnJhbWVIYXNCZWVuUmVkaXJlY3Rl
ZFRvIHsgMCB9OwogICAgIHVuc2lnbmVkIHRvcEZyYW1lSGFzQmVlblJlZGlyZWN0ZWRGcm9tIHsg
MCB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZS5jcHAJKHJldmlzaW9uIDIxMTA1MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMywxMSArMzMsMTQgQEAKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmgiCiAj
aW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSAiVVJMLmgiCisjaW5jbHVkZSA8d3Rm
L0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGNvbnN0IGF1dG8gc3RhdGlzdGljc01vZGVsVmVyc2lv
biA9IDI7CitzdGF0aWMgY29uc3QgYXV0byBzdGF0aXN0aWNzTW9kZWxWZXJzaW9uID0gMzsKKy8v
IDMwIGRheXMgaW4gc2Vjb25kcworc3RhdGljIGNvbnN0IGF1dG8gdGltZVRvTGl2ZVVzZXJJbnRl
cmFjdGlvbiA9IDI1OTIwMDA7CiAKIFJlZjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+IFJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y3JlYXRlKCkKIHsKQEAgLTE1MCwxMSArMTUzLDI2
IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcm9jZXMKICAgICAgICAgcHJv
Y2Vzc0Z1bmN0aW9uKHJlc291cmNlU3RhdGlzdGljKTsKIH0KIAorc3RhdGljIGJvb2wgaGFzSGFk
UmVjZW50VXNlckludGVyYWN0aW9uKFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHJlc291cmNlU3Rh
dGlzdGljKQoreworICAgIGlmICghcmVzb3VyY2VTdGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9u
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoKGN1cnJlbnRUaW1lKCkgLSByZXNv
dXJjZVN0YXRpc3RpYy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uKSA+IHRpbWVUb0xpdmVVc2Vy
SW50ZXJhY3Rpb24pIHsKKyAgICAgICAgLy8gRHJvcCBwcml2YWN5IHNlbnNpdGl2ZSBkYXRhIGJl
Y2F1c2Ugd2Ugbm8gbG9uZ2VyIG5lZWQgaXQuCisgICAgICAgIHJlc291cmNlU3RhdGlzdGljLm1v
c3RSZWNlbnRVc2VySW50ZXJhY3Rpb24gPSAwLjA7CisgICAgICAgIHJlc291cmNlU3RhdGlzdGlj
LmhhZFVzZXJJbnRlcmFjdGlvbiA9IGZhbHNlOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKIFZlY3RvcjxTdHJpbmc+IFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6cHJldmFsZW50UmVzb3VyY2VEb21haW5zV2l0aG91dFVzZXJJbnRlcmFj
dGlvbigpCiB7CiAgICAgVmVjdG9yPFN0cmluZz4gcHJldmFsZW50UmVzb3VyY2VzOwogICAgIGZv
ciAoYXV0byYgcmVzb3VyY2VTdGF0aXN0aWMgOiBtX3Jlc291cmNlU3RhdGlzdGljc01hcC52YWx1
ZXMoKSkgewotICAgICAgICBpZiAocmVzb3VyY2VTdGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNvdXJj
ZSAmJiAhcmVzb3VyY2VTdGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uKQorICAgICAgICBpZiAo
cmVzb3VyY2VTdGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNvdXJjZSAmJiAhaGFzSGFkUmVjZW50VXNl
ckludGVyYWN0aW9uKHJlc291cmNlU3RhdGlzdGljKSkKICAgICAgICAgICAgIHByZXZhbGVudFJl
c291cmNlcy5hcHBlbmQocmVzb3VyY2VTdGF0aXN0aWMuaGlnaExldmVsRG9tYWluKTsKICAgICB9
CiAgICAgcmV0dXJuIHByZXZhbGVudFJlc291cmNlczsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9u
IDIxMTQ0NSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDMzIEBACisyMDE3LTAxLTMxICBKb2huIFdpbGFuZGVyICA8d2lsYW5kZXJAYXBwbGUu
Y29tPgorCisgICAgICAgIFVwZGF0ZXMgdG8gUmVzb3VyY2UgTG9hZCBTdGF0aXN0aWNzOiBHZXQg
dGhlIHJpZ2h0IHdlYnNpdGUgZGF0YSBzdG9yZSBhbmQgaW50cm9kdWNlIHRpbWVvdXQgZm9yIHVz
ZXIgaW50ZXJhY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NzQ3NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzAyOTAyNzA+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzPjo6ZW5jb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzPjo6ZGVjb2RlKToKKyAgICAgICAgICAgIFN1cHBvcnQgZm9y
IHN0YXRpc3RpY3MgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiwgZ3JhbmRmYXRoZXJlZCwgYW5k
CisgICAgICAgICAgICBkYXRhUmVjb3Jkc1JlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dl
YlByb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6ZGVs
ZXRlV2Vic2l0ZURhdGFGb3JUb3BQcml2YXRlbHlPd25lZERvbWFpbnNJbkFsbFBlcnNpc3RlbnRE
YXRhU3RvcmVzKToKKyAgICAgICAgICAgIEEgd2F5IHRvIGRlbGV0ZSB3ZWJzaXRlIGRhdGEgaW4g
cGVyc2lzdGVudCBzdG9yZShzKSBjb25maWd1cmVkIGJ5IHRoZSAKKyAgICAgICAgICAgIGVtYmVk
ZGluZyBjbGllbnQuIEFQSTo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpIGRv
ZXMgbm90IAorICAgICAgICAgICAgZG8gdGhpcyB3aGljaCBjYXVzZWQgdXMgdG8gc2tpcCBzZXNz
aW9uIHN0b3JhZ2UuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlbW92ZURhdGFS
ZWNvcmRzKToKKyAgICAgICAgICAgIE5vdyB1c2VzIFdlYlByb2Nlc3NQcm94eTo6IGRlbGV0ZVdl
YnNpdGVEYXRhRm9yVG9wUHJpdmF0ZWx5T3duZWREb21haW5zSW5BbGxQZXJzaXN0ZW50RGF0YVN0
b3JlcygpLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3Jl
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6ZmV0Y2hEYXRhRm9yVG9w
UHJpdmF0ZWx5T3duZWREb21haW5zKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9y
ZTo6cmVtb3ZlRGF0YUZvclRvcFByaXZhdGVseU93bmVkRG9tYWlucyk6CisgICAgICAgICAgICBU
aGVzZSB0d28gZnVuY3Rpb25zIGFyZSBpbnRyb2R1Y2VkIHRvIHN1cHBvcnQgZmV0Y2hpbmcgYW5k
IHJlbW92YWwKKyAgICAgICAgICAgIG9mIGRhdGEgcmVjb3JkcyBpbiB0aGUgV2Vic2l0ZURhdGFT
dG9yZShzKSBjb25uZWN0ZWQgdG8gYQorICAgICAgICAgICAgcGFydGljdWxhciBzZXNzaW9uIG9y
IHBhZ2UuCisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUu
aDoKKwogMjAxNy0wMS0zMSAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgog
CiAgICAgICAgIEFkZCBtb3JlIENSQVNIIGNhbGxzIHRvIHRyeSB0byBmaWd1cmUgb3V0IHdoeSB3
ZSdyZSBmYWlsaW5nIHRvIHNlbmQgbWFjaCBwb3J0cyBvdmVyIHRoZSB3aXJlCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAkocmV2aXNp
b24gMjExMDUwKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVy
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNDgsNiArMjI0OCw4IEBAIHZvaWQgQXJndW1lbnRD
b2RlcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWMKICAgICAKICAgICAvLyBVc2VyIGludGVyYWN0aW9u
CiAgICAgZW5jb2RlciA8PCBzdGF0aXN0aWNzLmhhZFVzZXJJbnRlcmFjdGlvbjsKKyAgICBlbmNv
ZGVyIDw8IHN0YXRpc3RpY3MubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbjsKKyAgICBlbmNvZGVy
IDw8IHN0YXRpc3RpY3MuZ3JhbmRmYXRoZXJlZDsKICAgICAKICAgICAvLyBUb3AgZnJhbWUgc3Rh
dHMKICAgICBlbmNvZGVyIDw8IHN0YXRpc3RpY3MudG9wRnJhbWVIYXNCZWVuTmF2aWdhdGVkVG9C
ZWZvcmU7CkBAIC0yMjc4LDYgKzIyODAsNyBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8UmVzb3VyY2VM
b2FkU3RhdGlzdGljCiAgICAgLy8gUHJldmFsZW50IFJlc291cmNlCiAgICAgZW5jb2RlciA8PCBz
dGF0aXN0aWNzLnJlZGlyZWN0ZWRUb090aGVyUHJldmFsZW50UmVzb3VyY2VPcmlnaW5zOwogICAg
IGVuY29kZXIgPDwgc3RhdGlzdGljcy5pc1ByZXZhbGVudFJlc291cmNlOworICAgIGVuY29kZXIg
PDwgc3RhdGlzdGljcy5kYXRhUmVjb3Jkc1JlbW92ZWQ7CiB9CiAKIGJvb2wgQXJndW1lbnRDb2Rl
cjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFdlYkNv
cmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHN0YXRpc3RpY3MpCkBAIC0yMjg4LDYgKzIyOTEs
MTIgQEAgYm9vbCBBcmd1bWVudENvZGVyPFJlc291cmNlTG9hZFN0YXRpc3RpYwogICAgIC8vIFVz
ZXIgaW50ZXJhY3Rpb24KICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0YXRpc3RpY3MuaGFkVXNl
ckludGVyYWN0aW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShzdGF0aXN0aWNzLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24pKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0YXRpc3RpY3MuZ3JhbmRm
YXRoZXJlZCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICAvLyBUb3AgZnJhbWUg
c3RhdHMKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0YXRpc3RpY3MudG9wRnJhbWVIYXNCZWVu
TmF2aWdhdGVkVG9CZWZvcmUpKQpAQCAtMjM1OCw3ICsyMzY3LDEwIEBAIGJvb2wgQXJndW1lbnRD
b2RlcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWMKICAgICAKICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHN0YXRpc3RpY3MuaXNQcmV2YWxlbnRSZXNvdXJjZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3RhdGlzdGljcy5kYXRhUmVjb3Jkc1Jl
bW92ZWQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJ
bmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAJKHJl
dmlzaW9uIDIxMTA1MCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJv
eHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTksNiArMTk5LDE3IEBAIFdlYlBhZ2VQcm94eSog
V2ViUHJvY2Vzc1Byb3h5Ojp3ZWJQYWdlKHUKICAgICByZXR1cm4gZ2xvYmFsUGFnZU1hcCgpLmdl
dChwYWdlSUQpOwogfQogCit2b2lkIFdlYlByb2Nlc3NQcm94eTo6ZGVsZXRlV2Vic2l0ZURhdGFG
b3JUb3BQcml2YXRlbHlPd25lZERvbWFpbnNJbkFsbFBlcnNpc3RlbnREYXRhU3RvcmVzKE9wdGlv
blNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgVmVjdG9yPFN0cmluZz4mJiB0b3BQcml2
YXRlbHlPd25lZERvbWFpbnMsIHN0ZDo6ZnVuY3Rpb248dm9pZChWZWN0b3I8U3RyaW5nPik+IGNv
bXBsZXRpb25IYW5kbGVyKQoreworICAgIGZvciAoYXV0byYgcGFnZSA6IGdsb2JhbFBhZ2VNYXAo
KSkgeworICAgICAgICBpZiAocGFnZS52YWx1ZS0+d2Vic2l0ZURhdGFTdG9yZSgpLmlzUGVyc2lz
dGVudCgpKSB7CisgICAgICAgICAgICBwYWdlLnZhbHVlLT53ZWJzaXRlRGF0YVN0b3JlKCkucmVt
b3ZlRGF0YUZvclRvcFByaXZhdGVseU93bmVkRG9tYWlucyhkYXRhVHlwZXMsIHsgfSwgV1RGTW92
ZSh0b3BQcml2YXRlbHlPd25lZERvbWFpbnMpLCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byBkb21haW5zV2l0aERhdGFSZWNvcmRzKSB7CisgICAg
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShkb21haW5zV2l0aERhdGFSZWNv
cmRzKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KK30KKwogUmVmPFdlYlBh
Z2VQcm94eT4gV2ViUHJvY2Vzc1Byb3h5OjpjcmVhdGVXZWJQYWdlKFBhZ2VDbGllbnQmIHBhZ2VD
bGllbnQsIFJlZjxBUEk6OlBhZ2VDb25maWd1cmF0aW9uPiYmIHBhZ2VDb25maWd1cmF0aW9uKQog
ewogICAgIHVpbnQ2NF90IHBhZ2VJRCA9IGdlbmVyYXRlUGFnZUlEKCk7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oCShyZXZpc2lvbiAyMTEwNTApCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEyMCw2ICsxMjAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBmZXRjaFdlYnNpdGVEYXRh
KFdlYkNvcmU6OlNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIEZ1bmN0aW9u
PHZvaWQoV2Vic2l0ZURhdGEpPiBjb21wbGV0aW9uSGFuZGxlcik7CiAgICAgdm9pZCBkZWxldGVX
ZWJzaXRlRGF0YShXZWJDb3JlOjpTZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+
LCBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50IG1vZGlmaWVkU2luY2UsIEZ1
bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkhhbmRsZXIpOwogICAgIHZvaWQgZGVsZXRlV2Vic2l0
ZURhdGFGb3JPcmlnaW5zKFdlYkNvcmU6OlNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRh
VHlwZT4sIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+JiwgRnVuY3Rp
b248dm9pZCgpPiBjb21wbGV0aW9uSGFuZGxlcik7CisgICAgc3RhdGljIHZvaWQgZGVsZXRlV2Vi
c2l0ZURhdGFGb3JUb3BQcml2YXRlbHlPd25lZERvbWFpbnNJbkFsbFBlcnNpc3RlbnREYXRhU3Rv
cmVzKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBWZWN0b3I8U3RyaW5nPiYmIHRvcFByaXZh
dGVseU93bmVkRG9tYWlucywgc3RkOjpmdW5jdGlvbjx2b2lkKFZlY3RvcjxTdHJpbmc+KT4gY29t
cGxldGlvbkhhbmRsZXIpOwogCiAgICAgdm9pZCBlbmFibGVTdWRkZW5UZXJtaW5hdGlvbigpOwog
ICAgIHZvaWQgZGlzYWJsZVN1ZGRlblRlcm1pbmF0aW9uKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlLmNwcAkocmV2aXNpb24gMjExMDUwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDkg
KzI2LDkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUuaCIKIAotI2luY2x1ZGUgIkFQSVdlYnNpdGVEYXRhU3RvcmUuaCIKICNp
bmNsdWRlICJXZWJQcm9jZXNzTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5o
IgorI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgIldlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFGZXRjaE9w
dGlvbi5oIgogI2luY2x1ZGUgIldlYnNpdGVEYXRhVHlwZS5oIgpAQCAtMTA1LDcgKzEwNSw3IEBA
IHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZW0KICAgICBpZiAobV9kYXRh
UmVjb3Jkc1JlbW92YWxQZW5kaW5nKQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8U3Ry
aW5nPiBwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMgPSBjb3JlU3RvcmUoKS5wcmV2YWxlbnRSZXNv
dXJjZURvbWFpbnNXaXRob3V0VXNlckludGVyYWN0aW9uKCk7CisgICAgVmVjdG9yPFN0cmluZz4m
JiBwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMgPSBjb3JlU3RvcmUoKS5wcmV2YWxlbnRSZXNvdXJj
ZURvbWFpbnNXaXRob3V0VXNlckludGVyYWN0aW9uKCk7CiAgICAgaWYgKCFwcmV2YWxlbnRSZXNv
dXJjZURvbWFpbnMuc2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTEyMyw0MSArMTIzLDI5
IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZW0KIAogICAgIGlmIChk
YXRhVHlwZXNUb1JlbW92ZS5pc0VtcHR5KCkpIHsKICAgICAgICAgZGF0YVR5cGVzVG9SZW1vdmUg
fD0gV2Vic2l0ZURhdGFUeXBlOjpDb29raWVzOwotICAgICAgICBkYXRhVHlwZXNUb1JlbW92ZSB8
PSBXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZTsKLSAgICAgICAgZGF0YVR5cGVzVG9SZW1v
dmUgfD0gV2Vic2l0ZURhdGFUeXBlOjpJbmRleGVkREJEYXRhYmFzZXM7CiAgICAgICAgIGRhdGFU
eXBlc1RvUmVtb3ZlIHw9IFdlYnNpdGVEYXRhVHlwZTo6RGlza0NhY2hlOwogICAgICAgICBkYXRh
VHlwZXNUb1JlbW92ZSB8PSBXZWJzaXRlRGF0YVR5cGU6Ok1lbW9yeUNhY2hlOworICAgICAgICBk
YXRhVHlwZXNUb1JlbW92ZSB8PSBXZWJzaXRlRGF0YVR5cGU6Ok9mZmxpbmVXZWJBcHBsaWNhdGlv
bkNhY2hlOworICAgICAgICBkYXRhVHlwZXNUb1JlbW92ZSB8PSBXZWJzaXRlRGF0YVR5cGU6OlNl
c3Npb25TdG9yYWdlOworICAgICAgICBkYXRhVHlwZXNUb1JlbW92ZSB8PSBXZWJzaXRlRGF0YVR5
cGU6OkxvY2FsU3RvcmFnZTsKKyAgICAgICAgZGF0YVR5cGVzVG9SZW1vdmUgfD0gV2Vic2l0ZURh
dGFUeXBlOjpXZWJTUUxEYXRhYmFzZXM7CisgICAgICAgIGRhdGFUeXBlc1RvUmVtb3ZlIHw9IFdl
YnNpdGVEYXRhVHlwZTo6SW5kZXhlZERCRGF0YWJhc2VzOworICAgICAgICBkYXRhVHlwZXNUb1Jl
bW92ZSB8PSBXZWJzaXRlRGF0YVR5cGU6Ok1lZGlhS2V5czsKKyAgICAgICAgZGF0YVR5cGVzVG9S
ZW1vdmUgfD0gV2Vic2l0ZURhdGFUeXBlOjpIU1RTQ2FjaGU7CisgICAgICAgIGRhdGFUeXBlc1Rv
UmVtb3ZlIHw9IFdlYnNpdGVEYXRhVHlwZTo6U2VhcmNoRmllbGRSZWNlbnRTZWFyY2hlczsKKyNp
ZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICAgICAgZGF0YVR5cGVzVG9SZW1vdmUg
fD0gV2Vic2l0ZURhdGFUeXBlOjpQbHVnSW5EYXRhOworI2VuZGlmCisjaWYgRU5BQkxFKE1FRElB
X1NUUkVBTSkKKyAgICAgICAgZGF0YVR5cGVzVG9SZW1vdmUgfD0gV2Vic2l0ZURhdGFUeXBlOjpN
ZWRpYURldmljZUlkZW50aWZpZXI7CisjZW5kaWYKICAgICB9CiAKICAgICAvLyBTd2l0Y2ggdG8g
dGhlIG1haW4gdGhyZWFkIHRvIGdldCB0aGUgZGVmYXVsdCB3ZWJzaXRlIGRhdGEgc3RvcmUKICAg
ICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3ByZXZhbGVudFJlc291cmNlRG9tYWlucyA9IFdU
Rk1vdmUocHJldmFsZW50UmVzb3VyY2VEb21haW5zKSwgdGhpc10gKCkgbXV0YWJsZSB7Ci0gICAg
ICAgIGF1dG8mIHdlYnNpdGVEYXRhU3RvcmUgPSBBUEk6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1
bHREYXRhU3RvcmUoKS0+d2Vic2l0ZURhdGFTdG9yZSgpOwotCi0gICAgICAgIHdlYnNpdGVEYXRh
U3RvcmUuZmV0Y2hEYXRhKGRhdGFUeXBlc1RvUmVtb3ZlLCB7IH0sIFtwcmV2YWxlbnRSZXNvdXJj
ZURvbWFpbnMgPSBXVEZNb3ZlKHByZXZhbGVudFJlc291cmNlRG9tYWlucyksIHRoaXNdKGF1dG8g
d2Vic2l0ZURhdGFSZWNvcmRzKSB7Ci0gICAgICAgICAgICBWZWN0b3I8V2Vic2l0ZURhdGFSZWNv
cmQ+IGRhdGFSZWNvcmRzOwotICAgICAgICAgICAgVmVjdG9yPFN0cmluZz4gcHJldmFsZW50UmVz
b3VyY2VEb21haW5zV2l0aERhdGFSZWNvcmRzOwotICAgICAgICAgICAgZm9yIChhdXRvJiB3ZWJz
aXRlRGF0YVJlY29yZCA6IHdlYnNpdGVEYXRhUmVjb3JkcykgewotICAgICAgICAgICAgICAgIGZv
ciAoYXV0byYgcHJldmFsZW50UmVzb3VyY2VEb21haW4gOiBwcmV2YWxlbnRSZXNvdXJjZURvbWFp
bnMpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHdlYnNpdGVEYXRhUmVjb3JkLmRpc3BsYXlO
YW1lLmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UocHJldmFsZW50UmVzb3VyY2VEb21haW4pKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHN1ZmZpeFN0YXJ0ID0gd2Vic2l0ZURhdGFS
ZWNvcmQuZGlzcGxheU5hbWUubGVuZ3RoKCkgLSBwcmV2YWxlbnRSZXNvdXJjZURvbWFpbi5sZW5n
dGgoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3VmZml4U3RhcnQgfHwgd2Vic2l0
ZURhdGFSZWNvcmQuZGlzcGxheU5hbWVbc3VmZml4U3RhcnQgLSAxXSA9PSAnLicpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhUmVjb3Jkcy5hcHBlbmQod2Vic2l0ZURhdGFSZWNv
cmQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZhbGVudFJlc291cmNlRG9tYWlu
c1dpdGhEYXRhUmVjb3Jkcy5hcHBlbmQocHJldmFsZW50UmVzb3VyY2VEb21haW4pOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIWRhdGFSZWNvcmRzLnNpemUo
KSkgewotICAgICAgICAgICAgICAgIG1fZGF0YVJlY29yZHNSZW1vdmFsUGVuZGluZyA9IGZhbHNl
OwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
YXV0byYgd2Vic2l0ZURhdGFTdG9yZSA9IEFQSTo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERh
dGFTdG9yZSgpLT53ZWJzaXRlRGF0YVN0b3JlKCk7Ci0gICAgICAgICAgICB3ZWJzaXRlRGF0YVN0
b3JlLnJlbW92ZURhdGEoZGF0YVR5cGVzVG9SZW1vdmUsIGRhdGFSZWNvcmRzLCBbcHJldmFsZW50
UmVzb3VyY2VEb21haW5zV2l0aERhdGFSZWNvcmRzID0gV1RGTW92ZShwcmV2YWxlbnRSZXNvdXJj
ZURvbWFpbnNXaXRoRGF0YVJlY29yZHMpLCB0aGlzXSB7Ci0gICAgICAgICAgICAgICAgdGhpcy0+
Y29yZVN0b3JlKCkudXBkYXRlU3RhdGlzdGljc0ZvclJlbW92ZWREYXRhUmVjb3JkcyhwcmV2YWxl
bnRSZXNvdXJjZURvbWFpbnNXaXRoRGF0YVJlY29yZHMpOwotICAgICAgICAgICAgICAgIG1fZGF0
YVJlY29yZHNSZW1vdmFsUGVuZGluZyA9IGZhbHNlOwotICAgICAgICAgICAgfSk7CisgICAgICAg
IFdlYlByb2Nlc3NQcm94eTo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JUb3BQcml2YXRlbHlPd25lZERv
bWFpbnNJbkFsbFBlcnNpc3RlbnREYXRhU3RvcmVzKGRhdGFUeXBlc1RvUmVtb3ZlLCBXVEZNb3Zl
KHByZXZhbGVudFJlc291cmNlRG9tYWlucyksIFt0aGlzXShhdXRvIHByZXZhbGVudFJlc291cmNl
RG9tYWluc1dpdGhEYXRhUmVjb3JkcykgbXV0YWJsZSB7CisgICAgICAgICAgICB0aGlzLT5jb3Jl
U3RvcmUoKS51cGRhdGVTdGF0aXN0aWNzRm9yUmVtb3ZlZERhdGFSZWNvcmRzKHByZXZhbGVudFJl
c291cmNlRG9tYWluc1dpdGhEYXRhUmVjb3Jkcyk7CisgICAgICAgICAgICBtX2RhdGFSZWNvcmRz
UmVtb3ZhbFBlbmRpbmcgPSBmYWxzZTsKICAgICAgICAgfSk7CiAgICAgfSk7CiB9CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNp
dGVEYXRhU3RvcmUuY3BwCShyZXZpc2lvbiAyMTEwNTApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ3Myw2ICs0NzMsMzggQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGEoT3B0aW9u
UwogICAgIGNhbGxiYWNrQWdncmVnYXRvci0+Y2FsbElmTmVlZGVkKCk7CiB9CiAKK3ZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6ZmV0Y2hEYXRhRm9yVG9wUHJpdmF0ZWx5T3duZWREb21haW5zKE9wdGlv
blNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgT3B0aW9uU2V0PFdlYnNpdGVEYXRhRmV0
Y2hPcHRpb24+IGZldGNoT3B0aW9ucywgVmVjdG9yPFN0cmluZz4mJiB0b3BQcml2YXRlbHlPd25l
ZERvbWFpbnMsIHN0ZDo6ZnVuY3Rpb248dm9pZChWZWN0b3I8V2Vic2l0ZURhdGFSZWNvcmQ+LCBW
ZWN0b3I8U3RyaW5nPik+IGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGZldGNoRGF0YShkYXRh
VHlwZXMsIGZldGNoT3B0aW9ucywgW3RvcFByaXZhdGVseU93bmVkRG9tYWlucyA9IFdURk1vdmUo
dG9wUHJpdmF0ZWx5T3duZWREb21haW5zKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSwgdGhpc10oYXV0byBleGlzdGluZ0RhdGFSZWNvcmRzKSB7CisKKyAg
ICAgICAgVmVjdG9yPFdlYnNpdGVEYXRhUmVjb3JkPiBtYXRjaGluZ0RhdGFSZWNvcmRzOworICAg
ICAgICBWZWN0b3I8U3RyaW5nPiBkb21haW5zV2l0aERhdGFSZWNvcmRzOworICAgICAgICBmb3Ig
KGF1dG8mIGRhdGFSZWNvcmQgOiBleGlzdGluZ0RhdGFSZWNvcmRzKSB7CisgICAgICAgICAgICBm
b3IgKGF1dG8mIGRhdGFSZWNvcmRPcmlnaW5EYXRhIDogZGF0YVJlY29yZC5vcmlnaW5zKSB7Cisg
ICAgICAgICAgICAgICAgYm9vbCBkYXRhUmVjb3JkQWRkZWQgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICBTdHJpbmcgZGF0YVJlY29yZEhvc3QgPSBkYXRhUmVjb3JkT3JpZ2luRGF0YS5zZWN1cml0
eU9yaWdpbigpLmdldCgpLmhvc3QoKTsKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIHRvcFBy
aXZhdGVseU93bmVkRG9tYWluIDogdG9wUHJpdmF0ZWx5T3duZWREb21haW5zKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChkYXRhUmVjb3JkSG9zdC5lbmRzV2l0aElnbm9yaW5nQVNDSUlDYXNl
KHRvcFByaXZhdGVseU93bmVkRG9tYWluKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYXV0
byBzdWZmaXhTdGFydCA9IGRhdGFSZWNvcmRIb3N0Lmxlbmd0aCgpIC0gdG9wUHJpdmF0ZWx5T3du
ZWREb21haW4ubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN1ZmZpeFN0
YXJ0IHx8IGRhdGFSZWNvcmRIb3N0W3N1ZmZpeFN0YXJ0IC0gMV0gPT0gJy4nKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWF0Y2hpbmdEYXRhUmVjb3Jkcy5hcHBlbmQoZGF0YVJlY29y
ZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tYWluc1dpdGhEYXRhUmVjb3Jkcy5h
cHBlbmQodG9wUHJpdmF0ZWx5T3duZWREb21haW4pOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFSZWNvcmRBZGRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoZGF0YVJlY29yZEFkZGVk
KQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUobWF0Y2hpbmdEYXRhUmVjb3Jkcyks
IFdURk1vdmUoZG9tYWluc1dpdGhEYXRhUmVjb3JkcykpOworICAgIH0pOworCit9CisgICAgCiBz
dGF0aWMgUHJvY2Vzc0FjY2Vzc1R5cGUgY29tcHV0ZU5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZUZv
ckRhdGFSZW1vdmFsKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgYm9vbCBp
c05vblBlcnNpc3RlbnRTdG9yZSkKIHsKICAgICBQcm9jZXNzQWNjZXNzVHlwZSBwcm9jZXNzQWNj
ZXNzVHlwZSA9IFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lOwpAQCAtOTk4LDYgKzEwMzAsMTYgQEAg
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvbgogICAgIGNhbGxiYWNrQWdn
cmVnYXRvci0+Y2FsbElmTmVlZGVkKCk7CiB9CiAKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVt
b3ZlRGF0YUZvclRvcFByaXZhdGVseU93bmVkRG9tYWlucyhPcHRpb25TZXQ8V2Vic2l0ZURhdGFU
eXBlPiBkYXRhVHlwZXMsIE9wdGlvblNldDxXZWJzaXRlRGF0YUZldGNoT3B0aW9uPiBmZXRjaE9w
dGlvbnMsIFZlY3RvcjxTdHJpbmc+JiYgdG9wUHJpdmF0ZWx5T3duZWREb21haW5zLCBzdGQ6OmZ1
bmN0aW9uPHZvaWQoVmVjdG9yPFN0cmluZz4gZG9tYWluc1dpdGhEYXRhUmVjb3Jkc1JlbW92ZWQp
PiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBmZXRjaERhdGFGb3JUb3BQcml2YXRlbHlPd25l
ZERvbWFpbnMoZGF0YVR5cGVzLCBmZXRjaE9wdGlvbnMsIFdURk1vdmUodG9wUHJpdmF0ZWx5T3du
ZWREb21haW5zKSwgW2RhdGFUeXBlcywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSwgdGhpc10oYXV0byB3ZWJzaXRlRGF0YVJlY29yZHMsIGF1dG8gZG9tYWlu
c1dpdGhEYXRhUmVjb3JkcykgeworCisgICAgICAgIHRoaXMtPnJlbW92ZURhdGEoZGF0YVR5cGVz
LCB3ZWJzaXRlRGF0YVJlY29yZHMsIFtkb21haW5zV2l0aERhdGFSZWNvcmRzID0gV1RGTW92ZShk
b21haW5zV2l0aERhdGFSZWNvcmRzKSwgY29tcGxldGlvbkhhbmRsZXJdKCkgeworICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoZG9tYWluc1dpdGhEYXRhUmVjb3Jkcyk7CisgICAgICAgIH0p
OworICAgIH0pOworfQorCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OndlYlBhZ2VXYXNBZGRlZChX
ZWJQYWdlUHJveHkmIHdlYlBhZ2VQcm94eSkKIHsKICAgICBpZiAobV9zdG9yYWdlTWFuYWdlcikK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0
b3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYnNpdGVEYXRh
L1dlYnNpdGVEYXRhU3RvcmUuaAkocmV2aXNpb24gMjExMDUwKQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAkod29ya2luZyBjb3B5KQpA
QCAtODMsOCArODMsMTAgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGNsb25lU2Vzc2lvbkRh
dGEoV2ViUGFnZVByb3h5JiBzb3VyY2VQYWdlLCBXZWJQYWdlUHJveHkmIG5ld1BhZ2UpOwogCiAg
ICAgdm9pZCBmZXRjaERhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIE9wdGlvblNldDxX
ZWJzaXRlRGF0YUZldGNoT3B0aW9uPiwgc3RkOjpmdW5jdGlvbjx2b2lkIChWZWN0b3I8V2Vic2l0
ZURhdGFSZWNvcmQ+KT4gY29tcGxldGlvbkhhbmRsZXIpOworICAgIHZvaWQgZmV0Y2hEYXRhRm9y
VG9wUHJpdmF0ZWx5T3duZWREb21haW5zKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBPcHRp
b25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4sIFZlY3RvcjxTdHJpbmc+JiYgdG9wUHJpdmF0
ZWx5T3duZWREb21haW5zLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoVmVjdG9yPFdlYnNpdGVEYXRhUmVj
b3JkPiwgVmVjdG9yPFN0cmluZz4pPiBjb21wbGV0aW9uSGFuZGxlcik7CiAgICAgdm9pZCByZW1v
dmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBzdGQ6OmNocm9ubzo6c3lzdGVtX2Ns
b2NrOjp0aW1lX3BvaW50IG1vZGlmaWVkU2luY2UsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gY29t
cGxldGlvbkhhbmRsZXIpOwogICAgIHZvaWQgcmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURh
dGFUeXBlPiwgY29uc3QgVmVjdG9yPFdlYnNpdGVEYXRhUmVjb3JkPiYsIHN0ZDo6ZnVuY3Rpb248
dm9pZCAoKT4gY29tcGxldGlvbkhhbmRsZXIpOworICAgIHZvaWQgcmVtb3ZlRGF0YUZvclRvcFBy
aXZhdGVseU93bmVkRG9tYWlucyhPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgT3B0aW9uU2V0
PFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24+LCBWZWN0b3I8U3RyaW5nPiYmIHRvcFByaXZhdGVseU93
bmVkRG9tYWlucywgc3RkOjpmdW5jdGlvbjx2b2lkKFZlY3RvcjxTdHJpbmc+IGRvbWFpbnNXaXRo
RGF0YVJlY29yZHNSZW1vdmVkKT4gY29tcGxldGlvbkhhbmRsZXIpOwogCiAgICAgU3RvcmFnZU1h
bmFnZXIqIHN0b3JhZ2VNYW5hZ2VyKCkgeyByZXR1cm4gbV9zdG9yYWdlTWFuYWdlci5nZXQoKTsg
fQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>300275</attachid>
            <date>2017-01-31 15:39:27 -0800</date>
            <delta_ts>2017-02-01 11:09:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-167474-20170131153715.patch</filename>
            <type>text/plain</type>
            <size>21575</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMjExNDQ3KQorKysgU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjM1OSwxMCArNjM1
OSw4IEBAIERvY3VtZW50OjpSZWdpb25GaXhlZFBhaXIgRG9jdW1lbnQ6OmFic28KIAogdm9pZCBE
b2N1bWVudDo6dXBkYXRlTGFzdEhhbmRsZWRVc2VyR2VzdHVyZVRpbWVzdGFtcCgpCiB7Ci0gICAg
aWYgKCFtX2xhc3RIYW5kbGVkVXNlckdlc3R1cmVUaW1lc3RhbXApCi0gICAgICAgIFJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWRPYnNlcnZlcigpLmxvZ1VzZXJJbnRlcmFjdGlvbigqdGhpcyk7
Ci0KICAgICBtX2xhc3RIYW5kbGVkVXNlckdlc3R1cmVUaW1lc3RhbXAgPSBtb25vdG9uaWNhbGx5
SW5jcmVhc2luZ1RpbWUoKTsKKyAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2
ZXIoKS5sb2dVc2VySW50ZXJhY3Rpb24oKnRoaXMpOwogfQogCiB2b2lkIERvY3VtZW50OjpzdGFy
dFRyYWNraW5nU3R5bGVSZWNhbGNzKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNv
dXJjZUxvYWRPYnNlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVy
L1Jlc291cmNlTG9hZE9ic2VydmVyLmNwcAkocmV2aXNpb24gMjExNDQ3KQorKysgU291cmNlL1dl
YkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDIsNiArNDIsNyBAQAogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVm
ZmVyLmgiCiAjaW5jbHVkZSAiVVJMLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAj
aW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
QnVpbGRlci5oPgogCkBAIC0yNzgsNiArMjc5LDEyIEBAIHZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OmxvZ1dlYlNvY2tldEwKICAgICAgICAgbV9zdG9yZS0+ZmlyZURhdGFNb2RpZmljYXRpb25I
YW5kbGVyKCk7CiB9CiAKK3N0YXRpYyBkb3VibGUgcmVkdWNlVGltZVJlc29sdXRpb25Ub09uZURh
eShkb3VibGUgc2Vjb25kcykKK3sKKyAgICBzdGF0aWMgY29uc3QgYXV0byBvbmVEYXlJblNlY29u
ZHMgPSA4NjQwMDsKKyAgICByZXR1cm4gc3RkOjpmbG9vcihzZWNvbmRzIC8gb25lRGF5SW5TZWNv
bmRzKSAqIG9uZURheUluU2Vjb25kczsKK30KKyAgICAKIHZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OmxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQpCiB7CiAgICAg
QVNTRVJUKGRvY3VtZW50LnBhZ2UoKSk7CkBAIC0yOTEsOCArMjk4LDEzIEBAIHZvaWQgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OmxvZ1VzZXJJbnRlcmEKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0
byYgc3RhdGlzdGljcyA9IG1fc3RvcmUtPmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1h
cnlEb21haW4ocHJpbWFyeURvbWFpbih1cmwpKTsKLSAgICBzdGF0aXN0aWNzLmhhZFVzZXJJbnRl
cmFjdGlvbiA9IHRydWU7Ci0gICAgbV9zdG9yZS0+ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVy
KCk7CisKKyAgICBkb3VibGUgbmV3VGltZXN0YW1wID0gcmVkdWNlVGltZVJlc29sdXRpb25Ub09u
ZURheShXVEY6OmN1cnJlbnRUaW1lKCkpOworICAgIGlmIChuZXdUaW1lc3RhbXAgIT0gc3RhdGlz
dGljcy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uKSB7CisgICAgICAgIHN0YXRpc3RpY3MuaGFk
VXNlckludGVyYWN0aW9uID0gdHJ1ZTsKKyAgICAgICAgc3RhdGlzdGljcy5tb3N0UmVjZW50VXNl
ckludGVyYWN0aW9uID0gbmV3VGltZXN0YW1wOworICAgICAgICBtX3N0b3JlLT5maXJlRGF0YU1v
ZGlmaWNhdGlvbkhhbmRsZXIoKTsKKyAgICB9CiB9CiAgICAgCiBTdHJpbmcgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnByaW1hcnlEb21haW4oY29uc3QgVVJMJiB1cmwpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuY3BwCShyZXZpc2lvbiAy
MTE0NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDggQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzOjplbmNvZGUoS2V5ZQogICAgIAogICAgIC8vIFVzZXIgaW50ZXJhY3Rpb24KICAgICBl
bmNvZGVyLmVuY29kZUJvb2woImhhZFVzZXJJbnRlcmFjdGlvbiIsIGhhZFVzZXJJbnRlcmFjdGlv
bik7CisgICAgZW5jb2Rlci5lbmNvZGVEb3VibGUoIm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24i
LCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uKTsKKyAgICBlbmNvZGVyLmVuY29kZUJvb2woImdy
YW5kZmF0aGVyZWQiLCBncmFuZGZhdGhlcmVkKTsKICAgICAKICAgICAvLyBUb3AgZnJhbWUgc3Rh
dHMKICAgICBlbmNvZGVyLmVuY29kZUJvb2woInRvcEZyYW1lSGFzQmVlbk5hdmlnYXRlZFRvQmVm
b3JlIiwgdG9wRnJhbWVIYXNCZWVuTmF2aWdhdGVkVG9CZWZvcmUpOwpAQCAtMTc3LDcgKzE3OSwx
NiBAQCBib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3M6OmRlY29kZShLZXllCiAKICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlVUludDMyKCJkYXRhUmVjb3Jkc1JlbW92ZWQiLCBkYXRhUmVjb3Jkc1Jl
bW92ZWQpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKKyAgICBpZiAodmVyc2lvbiA8
IDMpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZURvdWJs
ZSgibW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiIsIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24p
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlQm9vbCgi
Z3JhbmRmYXRoZXJlZCIsIGdyYW5kZmF0aGVyZWQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjE0LDYgKzIyNSwxMSBAQCBTdHJpbmcgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljczo6dG9TdHJpbmcoCiAgICAgLy8gVXNlciBpbnRlcmFjdGlvbgogICAg
IGFwcGVuZEJvb2xlYW4oYnVpbGRlciwgImhhZFVzZXJJbnRlcmFjdGlvbiIsIGhhZFVzZXJJbnRl
cmFjdGlvbik7CiAgICAgYnVpbGRlci5hcHBlbmQoJ1xuJyk7CisgICAgYnVpbGRlci5hcHBlbmRM
aXRlcmFsKCIgICAgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbjogIik7CisgICAgYnVpbGRlci5h
cHBlbmROdW1iZXIobW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbik7CisgICAgYnVpbGRlci5hcHBl
bmQoJ1xuJyk7CisgICAgYXBwZW5kQm9vbGVhbihidWlsZGVyLCAiICAgIGdyYW5kZmF0aGVyZWQi
LCBncmFuZGZhdGhlcmVkKTsKKyAgICBidWlsZGVyLmFwcGVuZCgnXG4nKTsKICAgICAKICAgICAv
LyBUb3AgZnJhbWUgc3RhdHMKICAgICBhcHBlbmRCb29sZWFuKGJ1aWxkZXIsICJ0b3BGcmFtZUhh
c0JlZW5OYXZpZ2F0ZWRUb0JlZm9yZSIsIHRvcEZyYW1lSGFzQmVlbk5hdmlnYXRlZFRvQmVmb3Jl
KTsKQEAgLTI5NSw2ICszMTEsOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3M6Om1lcmdl
KGNvbnN0CiAgICAgQVNTRVJUKG90aGVyLmhpZ2hMZXZlbERvbWFpbiA9PSBoaWdoTGV2ZWxEb21h
aW4pOwogCiAgICAgaGFkVXNlckludGVyYWN0aW9uIHw9IG90aGVyLmhhZFVzZXJJbnRlcmFjdGlv
bjsKKyAgICBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uID0gb3RoZXIubW9zdFJlY2VudFVzZXJJ
bnRlcmFjdGlvbjsKKyAgICBncmFuZGZhdGhlcmVkIHw9IG90aGVyLmdyYW5kZmF0aGVyZWQ7CiAg
ICAgCiAgICAgLy8gVG9wIGZyYW1lIHN0YXRzCiAgICAgdG9wRnJhbWVIYXNCZWVuUmVkaXJlY3Rl
ZFRvICs9IG90aGVyLnRvcEZyYW1lSGFzQmVlblJlZGlyZWN0ZWRUbzsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuaAkocmV2aXNpb24gMjEx
NDQ3KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuaAko
d29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsOSBAQCBzdHJ1Y3QgUmVzb3VyY2VMb2FkU3RhdGlz
dGljcyB7CiAKICAgICAvLyBVc2VyIGludGVyYWN0aW9uCiAgICAgYm9vbCBoYWRVc2VySW50ZXJh
Y3Rpb24geyBmYWxzZSB9OwotICAgIAorICAgIGRvdWJsZSBtb3N0UmVjZW50VXNlckludGVyYWN0
aW9uIHsgMC4wIH07CisgICAgYm9vbCBncmFuZGZhdGhlcmVkIHsgZmFsc2UgfTsKKwogICAgIC8v
IFRvcCBmcmFtZSBzdGF0cwogICAgIHVuc2lnbmVkIHRvcEZyYW1lSGFzQmVlblJlZGlyZWN0ZWRU
byB7IDAgfTsKICAgICB1bnNpZ25lZCB0b3BGcmFtZUhhc0JlZW5SZWRpcmVjdGVkRnJvbSB7IDAg
fTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUuY3BwCShyZXZpc2lvbiAyMTE0NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzMsMTEgKzMzLDE0IEBACiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5oIgogI2lu
Y2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUgIlVSTC5oIgorI2luY2x1ZGUgPHd0Zi9D
dXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBjb25zdCBhdXRvIHN0YXRpc3RpY3NNb2RlbFZlcnNpb24g
PSAyOworc3RhdGljIGNvbnN0IGF1dG8gc3RhdGlzdGljc01vZGVsVmVyc2lvbiA9IDM7CisvLyAz
MCBkYXlzIGluIHNlY29uZHMKK3N0YXRpYyBjb25zdCBhdXRvIHRpbWVUb0xpdmVVc2VySW50ZXJh
Y3Rpb24gPSAyNTkyMDAwOwogCiBSZWY8UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNyZWF0ZSgpCiB7CkBAIC0xNTAsMTEgKzE1MywyNiBA
QCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJvY2VzCiAgICAgICAgIHByb2Nl
c3NGdW5jdGlvbihyZXNvdXJjZVN0YXRpc3RpYyk7CiB9CiAKK3N0YXRpYyBib29sIGhhc0hhZFJl
Y2VudFVzZXJJbnRlcmFjdGlvbihSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiByZXNvdXJjZVN0YXRp
c3RpYykKK3sKKyAgICBpZiAoIXJlc291cmNlU3RhdGlzdGljLmhhZFVzZXJJbnRlcmFjdGlvbikK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKChjdXJyZW50VGltZSgpIC0gcmVzb3Vy
Y2VTdGF0aXN0aWMubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbikgPiB0aW1lVG9MaXZlVXNlcklu
dGVyYWN0aW9uKSB7CisgICAgICAgIC8vIERyb3AgcHJpdmFjeSBzZW5zaXRpdmUgZGF0YSBiZWNh
dXNlIHdlIG5vIGxvbmdlciBuZWVkIGl0LgorICAgICAgICByZXNvdXJjZVN0YXRpc3RpYy5tb3N0
UmVjZW50VXNlckludGVyYWN0aW9uID0gMC4wOworICAgICAgICByZXNvdXJjZVN0YXRpc3RpYy5o
YWRVc2VySW50ZXJhY3Rpb24gPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCiBWZWN0b3I8U3RyaW5nPiBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnByZXZhbGVudFJlc291cmNlRG9tYWluc1dpdGhvdXRVc2VySW50ZXJhY3Rp
b24oKQogewogICAgIFZlY3RvcjxTdHJpbmc+IHByZXZhbGVudFJlc291cmNlczsKICAgICBmb3Ig
KGF1dG8mIHJlc291cmNlU3RhdGlzdGljIDogbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAudmFsdWVz
KCkpIHsKLSAgICAgICAgaWYgKHJlc291cmNlU3RhdGlzdGljLmlzUHJldmFsZW50UmVzb3VyY2Ug
JiYgIXJlc291cmNlU3RhdGlzdGljLmhhZFVzZXJJbnRlcmFjdGlvbikKKyAgICAgICAgaWYgKHJl
c291cmNlU3RhdGlzdGljLmlzUHJldmFsZW50UmVzb3VyY2UgJiYgIWhhc0hhZFJlY2VudFVzZXJJ
bnRlcmFjdGlvbihyZXNvdXJjZVN0YXRpc3RpYykpCiAgICAgICAgICAgICBwcmV2YWxlbnRSZXNv
dXJjZXMuYXBwZW5kKHJlc291cmNlU3RhdGlzdGljLmhpZ2hMZXZlbERvbWFpbik7CiAgICAgfQog
ICAgIHJldHVybiBwcmV2YWxlbnRSZXNvdXJjZXM7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
MTE0NDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwzMyBAQAorMjAxNy0wMS0zMSAgSm9obiBXaWxhbmRlciAgPHdpbGFuZGVyQGFwcGxlLmNv
bT4KKworICAgICAgICBVcGRhdGVzIHRvIFJlc291cmNlIExvYWQgU3RhdGlzdGljczogR2V0IHRo
ZSByaWdodCB3ZWJzaXRlIGRhdGEgc3RvcmUgYW5kIGludHJvZHVjZSB0aW1lb3V0IGZvciB1c2Vy
IGludGVyYWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjc0NzQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMwMjkwMjcwPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2hhcmVkL1dlYkNvcmVB
cmd1bWVudENvZGVycy5jcHA6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8UmVzb3VyY2VM
b2FkU3RhdGlzdGljcz46OmVuY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8UmVz
b3VyY2VMb2FkU3RhdGlzdGljcz46OmRlY29kZSk6CisgICAgICAgICAgICBTdXBwb3J0IGZvciBz
dGF0aXN0aWNzIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24sIGdyYW5kZmF0aGVyZWQsIGFuZAor
ICAgICAgICAgICAgZGF0YVJlY29yZHNSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQ
cm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OmRlbGV0
ZVdlYnNpdGVEYXRhRm9yVG9wUHJpdmF0ZWx5T3duZWREb21haW5zSW5BbGxQZXJzaXN0ZW50RGF0
YVN0b3Jlcyk6CisgICAgICAgICAgICBBIHdheSB0byBkZWxldGUgd2Vic2l0ZSBkYXRhIGluIHBl
cnNpc3RlbnQgc3RvcmUocykgY29uZmlndXJlZCBieSB0aGUgCisgICAgICAgICAgICBlbWJlZGRp
bmcgY2xpZW50LiBBUEk6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKSBkb2Vz
IG5vdCAKKyAgICAgICAgICAgIGRvIHRoaXMgd2hpY2ggY2F1c2VkIHVzIHRvIHNraXAgc2Vzc2lv
biBzdG9yYWdlLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZW1vdmVEYXRhUmVj
b3Jkcyk6CisgICAgICAgICAgICBOb3cgdXNlcyBXZWJQcm9jZXNzUHJveHk6OiBkZWxldGVXZWJz
aXRlRGF0YUZvclRvcFByaXZhdGVseU93bmVkRG9tYWluc0luQWxsUGVyc2lzdGVudERhdGFTdG9y
ZXMoKS4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmZldGNoRGF0YUZvclRvcFBy
aXZhdGVseU93bmVkRG9tYWlucyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6
OnJlbW92ZURhdGFGb3JUb3BQcml2YXRlbHlPd25lZERvbWFpbnMpOgorICAgICAgICAgICAgVGhl
c2UgdHdvIGZ1bmN0aW9ucyBhcmUgaW50cm9kdWNlZCB0byBzdXBwb3J0IGZldGNoaW5nIGFuZCBy
ZW1vdmFsCisgICAgICAgICAgICBvZiBkYXRhIHJlY29yZHMgaW4gdGhlIFdlYnNpdGVEYXRhU3Rv
cmUocykgY29ubmVjdGVkIHRvIGEKKyAgICAgICAgICAgIHBhcnRpY3VsYXIgc2Vzc2lvbiBvciBw
YWdlLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmg6
CisKIDIwMTctMDEtMzEgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAog
ICAgICAgICBBZGQgbW9yZSBDUkFTSCBjYWxscyB0byB0cnkgdG8gZmlndXJlIG91dCB3aHkgd2Un
cmUgZmFpbGluZyB0byBzZW5kIG1hY2ggcG9ydHMgb3ZlciB0aGUgd2lyZQpJbmRleDogU291cmNl
L1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAJKHJldmlzaW9u
IDIxMTQ0NykKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUyLDYgKzIyNTIsOCBAQCB2b2lkIEFyZ3VtZW50Q29k
ZXI8UmVzb3VyY2VMb2FkU3RhdGlzdGljCiAgICAgCiAgICAgLy8gVXNlciBpbnRlcmFjdGlvbgog
ICAgIGVuY29kZXIgPDwgc3RhdGlzdGljcy5oYWRVc2VySW50ZXJhY3Rpb247CisgICAgZW5jb2Rl
ciA8PCBzdGF0aXN0aWNzLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb247CisgICAgZW5jb2RlciA8
PCBzdGF0aXN0aWNzLmdyYW5kZmF0aGVyZWQ7CiAgICAgCiAgICAgLy8gVG9wIGZyYW1lIHN0YXRz
CiAgICAgZW5jb2RlciA8PCBzdGF0aXN0aWNzLnRvcEZyYW1lSGFzQmVlbk5hdmlnYXRlZFRvQmVm
b3JlOwpAQCAtMjI4Miw2ICsyMjg0LDcgQEAgdm9pZCBBcmd1bWVudENvZGVyPFJlc291cmNlTG9h
ZFN0YXRpc3RpYwogICAgIC8vIFByZXZhbGVudCBSZXNvdXJjZQogICAgIGVuY29kZXIgPDwgc3Rh
dGlzdGljcy5yZWRpcmVjdGVkVG9PdGhlclByZXZhbGVudFJlc291cmNlT3JpZ2luczsKICAgICBl
bmNvZGVyIDw8IHN0YXRpc3RpY3MuaXNQcmV2YWxlbnRSZXNvdXJjZTsKKyAgICBlbmNvZGVyIDw8
IHN0YXRpc3RpY3MuZGF0YVJlY29yZHNSZW1vdmVkOwogfQogCiBib29sIEFyZ3VtZW50Q29kZXI8
UmVzb3VyY2VMb2FkU3RhdGlzdGljcz46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBXZWJDb3Jl
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBzdGF0aXN0aWNzKQpAQCAtMjI5Miw2ICsyMjk1LDEy
IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWMKICAgICAvLyBVc2Vy
IGludGVyYWN0aW9uCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGF0aXN0aWNzLmhhZFVzZXJJ
bnRlcmFjdGlvbikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUoc3RhdGlzdGljcy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGF0aXN0aWNzLmdyYW5kZmF0
aGVyZWQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgLy8gVG9wIGZyYW1lIHN0
YXRzCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGF0aXN0aWNzLnRvcEZyYW1lSGFzQmVlbk5h
dmlnYXRlZFRvQmVmb3JlKSkKQEAgLTIzNjIsNyArMjM3MSwxMCBAQCBib29sIEFyZ3VtZW50Q29k
ZXI8UmVzb3VyY2VMb2FkU3RhdGlzdGljCiAgICAgCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShz
dGF0aXN0aWNzLmlzUHJldmFsZW50UmVzb3VyY2UpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgCisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0YXRpc3RpY3MuZGF0YVJlY29yZHNSZW1v
dmVkKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCShyZXZp
c2lvbiAyMTE0NDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDYgKzE5OSwxNyBAQCBXZWJQYWdlUHJveHkqIFdl
YlByb2Nlc3NQcm94eTo6d2ViUGFnZSh1CiAgICAgcmV0dXJuIGdsb2JhbFBhZ2VNYXAoKS5nZXQo
cGFnZUlEKTsKIH0KIAordm9pZCBXZWJQcm9jZXNzUHJveHk6OmRlbGV0ZVdlYnNpdGVEYXRhRm9y
VG9wUHJpdmF0ZWx5T3duZWREb21haW5zSW5BbGxQZXJzaXN0ZW50RGF0YVN0b3JlcyhPcHRpb25T
ZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIFZlY3RvcjxTdHJpbmc+JiYgdG9wUHJpdmF0
ZWx5T3duZWREb21haW5zLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoVmVjdG9yPFN0cmluZz4pPiBjb21w
bGV0aW9uSGFuZGxlcikKK3sKKyAgICBmb3IgKGF1dG8mIHBhZ2UgOiBnbG9iYWxQYWdlTWFwKCkp
IHsKKyAgICAgICAgaWYgKHBhZ2UudmFsdWUtPndlYnNpdGVEYXRhU3RvcmUoKS5pc1BlcnNpc3Rl
bnQoKSkgeworICAgICAgICAgICAgcGFnZS52YWx1ZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnJlbW92
ZURhdGFGb3JUb3BQcml2YXRlbHlPd25lZERvbWFpbnMoZGF0YVR5cGVzLCB7IH0sIFdURk1vdmUo
dG9wUHJpdmF0ZWx5T3duZWREb21haW5zKSwgW2NvbXBsZXRpb25IYW5kbGVyXShhdXRvIGRvbWFp
bnNXaXRoRGF0YVJlY29yZHMpIHsKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihX
VEZNb3ZlKGRvbWFpbnNXaXRoRGF0YVJlY29yZHMpKTsKKyAgICAgICAgICAgIH0pOworICAgICAg
ICB9CisgICAgfQorfQorCiBSZWY8V2ViUGFnZVByb3h5PiBXZWJQcm9jZXNzUHJveHk6OmNyZWF0
ZVdlYlBhZ2UoUGFnZUNsaWVudCYgcGFnZUNsaWVudCwgUmVmPEFQSTo6UGFnZUNvbmZpZ3VyYXRp
b24+JiYgcGFnZUNvbmZpZ3VyYXRpb24pCiB7CiAgICAgdWludDY0X3QgcGFnZUlEID0gZ2VuZXJh
dGVQYWdlSUQoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJv
eHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1By
b3h5LmgJKHJldmlzaW9uIDIxMTQ0NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
cm9jZXNzUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDYgKzEyMCw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGZldGNoV2Vic2l0ZURhdGEoV2ViQ29yZTo6U2Vzc2lvbklELCBPcHRpb25TZXQ8
V2Vic2l0ZURhdGFUeXBlPiwgRnVuY3Rpb248dm9pZChXZWJzaXRlRGF0YSk+IGNvbXBsZXRpb25I
YW5kbGVyKTsKICAgICB2b2lkIGRlbGV0ZVdlYnNpdGVEYXRhKFdlYkNvcmU6OlNlc3Npb25JRCwg
T3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRp
bWVfcG9pbnQgbW9kaWZpZWRTaW5jZSwgRnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uSGFuZGxl
cik7CiAgICAgdm9pZCBkZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMoV2ViQ29yZTo6U2Vzc2lv
bklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNl
Y3VyaXR5T3JpZ2luRGF0YT4mLCBGdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25IYW5kbGVyKTsK
KyAgICBzdGF0aWMgdm9pZCBkZWxldGVXZWJzaXRlRGF0YUZvclRvcFByaXZhdGVseU93bmVkRG9t
YWluc0luQWxsUGVyc2lzdGVudERhdGFTdG9yZXMoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4s
IFZlY3RvcjxTdHJpbmc+JiYgdG9wUHJpdmF0ZWx5T3duZWREb21haW5zLCBzdGQ6OmZ1bmN0aW9u
PHZvaWQoVmVjdG9yPFN0cmluZz4pPiBjb21wbGV0aW9uSGFuZGxlcik7CiAKICAgICB2b2lkIGVu
YWJsZVN1ZGRlblRlcm1pbmF0aW9uKCk7CiAgICAgdm9pZCBkaXNhYmxlU3VkZGVuVGVybWluYXRp
b24oKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCShyZXZpc2lvbiAyMTE0NDcpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjYsOSArMjYsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oIgogCi0jaW5jbHVkZSAi
QVBJV2Vic2l0ZURhdGFTdG9yZS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NNZXNzYWdlcy5oIgog
I2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5Lmgi
CiAjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlTWVzc2FnZXMuaCIKICNp
bmNsdWRlICJXZWJzaXRlRGF0YUZldGNoT3B0aW9uLmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFU
eXBlLmgiCkBAIC0xMDUsNyArMTA1LDcgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OnJlbQogICAgIGlmIChtX2RhdGFSZWNvcmRzUmVtb3ZhbFBlbmRpbmcpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFZlY3RvcjxTdHJpbmc+IHByZXZhbGVudFJlc291cmNlRG9tYWlucyA9
IGNvcmVTdG9yZSgpLnByZXZhbGVudFJlc291cmNlRG9tYWluc1dpdGhvdXRVc2VySW50ZXJhY3Rp
b24oKTsKKyAgICBWZWN0b3I8U3RyaW5nPiYmIHByZXZhbGVudFJlc291cmNlRG9tYWlucyA9IGNv
cmVTdG9yZSgpLnByZXZhbGVudFJlc291cmNlRG9tYWluc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24o
KTsKICAgICBpZiAoIXByZXZhbGVudFJlc291cmNlRG9tYWlucy5zaXplKCkpCiAgICAgICAgIHJl
dHVybjsKIApAQCAtMTIzLDQxICsxMjMsMjkgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnJlbQogCiAgICAgaWYgKGRhdGFUeXBlc1RvUmVtb3ZlLmlzRW1wdHkoKSkgewog
ICAgICAgICBkYXRhVHlwZXNUb1JlbW92ZSB8PSBXZWJzaXRlRGF0YVR5cGU6OkNvb2tpZXM7Ci0g
ICAgICAgIGRhdGFUeXBlc1RvUmVtb3ZlIHw9IFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdl
OwotICAgICAgICBkYXRhVHlwZXNUb1JlbW92ZSB8PSBXZWJzaXRlRGF0YVR5cGU6OkluZGV4ZWRE
QkRhdGFiYXNlczsKICAgICAgICAgZGF0YVR5cGVzVG9SZW1vdmUgfD0gV2Vic2l0ZURhdGFUeXBl
OjpEaXNrQ2FjaGU7CiAgICAgICAgIGRhdGFUeXBlc1RvUmVtb3ZlIHw9IFdlYnNpdGVEYXRhVHlw
ZTo6TWVtb3J5Q2FjaGU7CisgICAgICAgIGRhdGFUeXBlc1RvUmVtb3ZlIHw9IFdlYnNpdGVEYXRh
VHlwZTo6T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGU7CisgICAgICAgIGRhdGFUeXBlc1RvUmVt
b3ZlIHw9IFdlYnNpdGVEYXRhVHlwZTo6U2Vzc2lvblN0b3JhZ2U7CisgICAgICAgIGRhdGFUeXBl
c1RvUmVtb3ZlIHw9IFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlOworICAgICAgICBkYXRh
VHlwZXNUb1JlbW92ZSB8PSBXZWJzaXRlRGF0YVR5cGU6OldlYlNRTERhdGFiYXNlczsKKyAgICAg
ICAgZGF0YVR5cGVzVG9SZW1vdmUgfD0gV2Vic2l0ZURhdGFUeXBlOjpJbmRleGVkREJEYXRhYmFz
ZXM7CisgICAgICAgIGRhdGFUeXBlc1RvUmVtb3ZlIHw9IFdlYnNpdGVEYXRhVHlwZTo6TWVkaWFL
ZXlzOworICAgICAgICBkYXRhVHlwZXNUb1JlbW92ZSB8PSBXZWJzaXRlRGF0YVR5cGU6OkhTVFND
YWNoZTsKKyAgICAgICAgZGF0YVR5cGVzVG9SZW1vdmUgfD0gV2Vic2l0ZURhdGFUeXBlOjpTZWFy
Y2hGaWVsZFJlY2VudFNlYXJjaGVzOworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQor
ICAgICAgICBkYXRhVHlwZXNUb1JlbW92ZSB8PSBXZWJzaXRlRGF0YVR5cGU6OlBsdWdJbkRhdGE7
CisjZW5kaWYKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorICAgICAgICBkYXRhVHlwZXNUb1Jl
bW92ZSB8PSBXZWJzaXRlRGF0YVR5cGU6Ok1lZGlhRGV2aWNlSWRlbnRpZmllcjsKKyNlbmRpZgog
ICAgIH0KIAogICAgIC8vIFN3aXRjaCB0byB0aGUgbWFpbiB0aHJlYWQgdG8gZ2V0IHRoZSBkZWZh
dWx0IHdlYnNpdGUgZGF0YSBzdG9yZQogICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJl
dmFsZW50UmVzb3VyY2VEb21haW5zID0gV1RGTW92ZShwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMp
LCB0aGlzXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgYXV0byYgd2Vic2l0ZURhdGFTdG9yZSA9IEFQ
STo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT53ZWJzaXRlRGF0YVN0b3Jl
KCk7Ci0KLSAgICAgICAgd2Vic2l0ZURhdGFTdG9yZS5mZXRjaERhdGEoZGF0YVR5cGVzVG9SZW1v
dmUsIHsgfSwgW3ByZXZhbGVudFJlc291cmNlRG9tYWlucyA9IFdURk1vdmUocHJldmFsZW50UmVz
b3VyY2VEb21haW5zKSwgdGhpc10oYXV0byB3ZWJzaXRlRGF0YVJlY29yZHMpIHsKLSAgICAgICAg
ICAgIFZlY3RvcjxXZWJzaXRlRGF0YVJlY29yZD4gZGF0YVJlY29yZHM7Ci0gICAgICAgICAgICBW
ZWN0b3I8U3RyaW5nPiBwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnNXaXRoRGF0YVJlY29yZHM7Ci0g
ICAgICAgICAgICBmb3IgKGF1dG8mIHdlYnNpdGVEYXRhUmVjb3JkIDogd2Vic2l0ZURhdGFSZWNv
cmRzKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChhdXRvJiBwcmV2YWxlbnRSZXNvdXJjZURvbWFp
biA6IHByZXZhbGVudFJlc291cmNlRG9tYWlucykgewotICAgICAgICAgICAgICAgICAgICBpZiAo
d2Vic2l0ZURhdGFSZWNvcmQuZGlzcGxheU5hbWUuZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShw
cmV2YWxlbnRSZXNvdXJjZURvbWFpbikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8g
c3VmZml4U3RhcnQgPSB3ZWJzaXRlRGF0YVJlY29yZC5kaXNwbGF5TmFtZS5sZW5ndGgoKSAtIHBy
ZXZhbGVudFJlc291cmNlRG9tYWluLmxlbmd0aCgpOwotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCFzdWZmaXhTdGFydCB8fCB3ZWJzaXRlRGF0YVJlY29yZC5kaXNwbGF5TmFtZVtzdWZmaXhT
dGFydCAtIDFdID09ICcuJykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFSZWNv
cmRzLmFwcGVuZCh3ZWJzaXRlRGF0YVJlY29yZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHJldmFsZW50UmVzb3VyY2VEb21haW5zV2l0aERhdGFSZWNvcmRzLmFwcGVuZChwcmV2YWxl
bnRSZXNvdXJjZURvbWFpbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGlmICghZGF0YVJlY29yZHMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgbV9kYXRhUmVj
b3Jkc1JlbW92YWxQZW5kaW5nID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBhdXRvJiB3ZWJzaXRlRGF0YVN0b3JlID0gQVBJOjpX
ZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPndlYnNpdGVEYXRhU3RvcmUoKTsK
LSAgICAgICAgICAgIHdlYnNpdGVEYXRhU3RvcmUucmVtb3ZlRGF0YShkYXRhVHlwZXNUb1JlbW92
ZSwgZGF0YVJlY29yZHMsIFtwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnNXaXRoRGF0YVJlY29yZHMg
PSBXVEZNb3ZlKHByZXZhbGVudFJlc291cmNlRG9tYWluc1dpdGhEYXRhUmVjb3JkcyksIHRoaXNd
IHsKLSAgICAgICAgICAgICAgICB0aGlzLT5jb3JlU3RvcmUoKS51cGRhdGVTdGF0aXN0aWNzRm9y
UmVtb3ZlZERhdGFSZWNvcmRzKHByZXZhbGVudFJlc291cmNlRG9tYWluc1dpdGhEYXRhUmVjb3Jk
cyk7Ci0gICAgICAgICAgICAgICAgbV9kYXRhUmVjb3Jkc1JlbW92YWxQZW5kaW5nID0gZmFsc2U7
Ci0gICAgICAgICAgICB9KTsKKyAgICAgICAgV2ViUHJvY2Vzc1Byb3h5OjpkZWxldGVXZWJzaXRl
RGF0YUZvclRvcFByaXZhdGVseU93bmVkRG9tYWluc0luQWxsUGVyc2lzdGVudERhdGFTdG9yZXMo
ZGF0YVR5cGVzVG9SZW1vdmUsIFdURk1vdmUocHJldmFsZW50UmVzb3VyY2VEb21haW5zKSwgW3Ro
aXNdKGF1dG8gcHJldmFsZW50UmVzb3VyY2VEb21haW5zV2l0aERhdGFSZWNvcmRzKSBtdXRhYmxl
IHsKKyAgICAgICAgICAgIHRoaXMtPmNvcmVTdG9yZSgpLnVwZGF0ZVN0YXRpc3RpY3NGb3JSZW1v
dmVkRGF0YVJlY29yZHMocHJldmFsZW50UmVzb3VyY2VEb21haW5zV2l0aERhdGFSZWNvcmRzKTsK
KyAgICAgICAgICAgIG1fZGF0YVJlY29yZHNSZW1vdmFsUGVuZGluZyA9IGZhbHNlOwogICAgICAg
ICB9KTsKICAgICB9KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJzaXRl
RGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAJKHJldmlzaW9uIDIxMTQ0
NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0
b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDczLDYgKzQ3MywzOCBAQCB2b2lkIFdlYnNpdGVE
YXRhU3RvcmU6OmZldGNoRGF0YShPcHRpb25TCiAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5jYWxs
SWZOZWVkZWQoKTsKIH0KIAordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGFGb3JUb3BQ
cml2YXRlbHlPd25lZERvbWFpbnMoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVz
LCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4gZmV0Y2hPcHRpb25zLCBWZWN0b3I8
U3RyaW5nPiYmIHRvcFByaXZhdGVseU93bmVkRG9tYWlucywgc3RkOjpmdW5jdGlvbjx2b2lkKFZl
Y3RvcjxXZWJzaXRlRGF0YVJlY29yZD4sIFZlY3RvcjxTdHJpbmc+KT4gY29tcGxldGlvbkhhbmRs
ZXIpCit7CisgICAgZmV0Y2hEYXRhKGRhdGFUeXBlcywgZmV0Y2hPcHRpb25zLCBbdG9wUHJpdmF0
ZWx5T3duZWREb21haW5zID0gV1RGTW92ZSh0b3BQcml2YXRlbHlPd25lZERvbWFpbnMpLCBjb21w
bGV0aW9uSGFuZGxlciwgdGhpc10oYXV0byBleGlzdGluZ0RhdGFSZWNvcmRzKSB7CisKKyAgICAg
ICAgVmVjdG9yPFdlYnNpdGVEYXRhUmVjb3JkPiBtYXRjaGluZ0RhdGFSZWNvcmRzOworICAgICAg
ICBWZWN0b3I8U3RyaW5nPiBkb21haW5zV2l0aERhdGFSZWNvcmRzOworICAgICAgICBmb3IgKGF1
dG8mIGRhdGFSZWNvcmQgOiBleGlzdGluZ0RhdGFSZWNvcmRzKSB7CisgICAgICAgICAgICBmb3Ig
KGF1dG8mIGRhdGFSZWNvcmRPcmlnaW5EYXRhIDogZGF0YVJlY29yZC5vcmlnaW5zKSB7CisgICAg
ICAgICAgICAgICAgYm9vbCBkYXRhUmVjb3JkQWRkZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICBTdHJpbmcgZGF0YVJlY29yZEhvc3QgPSBkYXRhUmVjb3JkT3JpZ2luRGF0YS5zZWN1cml0eU9y
aWdpbigpLmdldCgpLmhvc3QoKTsKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIHRvcFByaXZh
dGVseU93bmVkRG9tYWluIDogdG9wUHJpdmF0ZWx5T3duZWREb21haW5zKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChkYXRhUmVjb3JkSG9zdC5lbmRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKHRv
cFByaXZhdGVseU93bmVkRG9tYWluKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBz
dWZmaXhTdGFydCA9IGRhdGFSZWNvcmRIb3N0Lmxlbmd0aCgpIC0gdG9wUHJpdmF0ZWx5T3duZWRE
b21haW4ubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN1ZmZpeFN0YXJ0
IHx8IGRhdGFSZWNvcmRIb3N0W3N1ZmZpeFN0YXJ0IC0gMV0gPT0gJy4nKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWF0Y2hpbmdEYXRhUmVjb3Jkcy5hcHBlbmQoZGF0YVJlY29yZCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tYWluc1dpdGhEYXRhUmVjb3Jkcy5hcHBl
bmQodG9wUHJpdmF0ZWx5T3duZWREb21haW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGFSZWNvcmRBZGRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoZGF0YVJlY29yZEFkZGVkKQor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUobWF0Y2hpbmdEYXRhUmVjb3JkcyksIFdU
Rk1vdmUoZG9tYWluc1dpdGhEYXRhUmVjb3JkcykpOworICAgIH0pOworCit9CisgICAgCiBzdGF0
aWMgUHJvY2Vzc0FjY2Vzc1R5cGUgY29tcHV0ZU5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZUZvckRh
dGFSZW1vdmFsKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgYm9vbCBpc05v
blBlcnNpc3RlbnRTdG9yZSkKIHsKICAgICBQcm9jZXNzQWNjZXNzVHlwZSBwcm9jZXNzQWNjZXNz
VHlwZSA9IFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lOwpAQCAtOTk4LDYgKzEwMzAsMTYgQEAgdm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlvbgogICAgIGNhbGxiYWNrQWdncmVn
YXRvci0+Y2FsbElmTmVlZGVkKCk7CiB9CiAKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3Zl
RGF0YUZvclRvcFByaXZhdGVseU93bmVkRG9tYWlucyhPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBl
PiBkYXRhVHlwZXMsIE9wdGlvblNldDxXZWJzaXRlRGF0YUZldGNoT3B0aW9uPiBmZXRjaE9wdGlv
bnMsIFZlY3RvcjxTdHJpbmc+JiYgdG9wUHJpdmF0ZWx5T3duZWREb21haW5zLCBzdGQ6OmZ1bmN0
aW9uPHZvaWQoVmVjdG9yPFN0cmluZz4gZG9tYWluc1dpdGhEYXRhUmVjb3Jkc1JlbW92ZWQpPiBj
b21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBmZXRjaERhdGFGb3JUb3BQcml2YXRlbHlPd25lZERv
bWFpbnMoZGF0YVR5cGVzLCBmZXRjaE9wdGlvbnMsIFdURk1vdmUodG9wUHJpdmF0ZWx5T3duZWRE
b21haW5zKSwgW2RhdGFUeXBlcywgY29tcGxldGlvbkhhbmRsZXIsIHRoaXNdKGF1dG8gd2Vic2l0
ZURhdGFSZWNvcmRzLCBhdXRvIGRvbWFpbnNXaXRoRGF0YVJlY29yZHMpIHsKKworICAgICAgICB0
aGlzLT5yZW1vdmVEYXRhKGRhdGFUeXBlcywgd2Vic2l0ZURhdGFSZWNvcmRzLCBbZG9tYWluc1dp
dGhEYXRhUmVjb3JkcyA9IFdURk1vdmUoZG9tYWluc1dpdGhEYXRhUmVjb3JkcyksIGNvbXBsZXRp
b25IYW5kbGVyXSgpIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGRvbWFpbnNXaXRo
RGF0YVJlY29yZHMpOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwogdm9pZCBXZWJzaXRlRGF0
YVN0b3JlOjp3ZWJQYWdlV2FzQWRkZWQoV2ViUGFnZVByb3h5JiB3ZWJQYWdlUHJveHkpCiB7CiAg
ICAgaWYgKG1fc3RvcmFnZU1hbmFnZXIpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgJKHJldmlzaW9uIDIx
MTQ0NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0
YVN0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDggKzgzLDEwIEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgdm9pZCBjbG9uZVNlc3Npb25EYXRhKFdlYlBhZ2VQcm94eSYgc291cmNlUGFnZSwgV2Vi
UGFnZVByb3h5JiBuZXdQYWdlKTsKIAogICAgIHZvaWQgZmV0Y2hEYXRhKE9wdGlvblNldDxXZWJz
aXRlRGF0YVR5cGU+LCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4sIHN0ZDo6ZnVu
Y3Rpb248dm9pZCAoVmVjdG9yPFdlYnNpdGVEYXRhUmVjb3JkPik+IGNvbXBsZXRpb25IYW5kbGVy
KTsKKyAgICB2b2lkIGZldGNoRGF0YUZvclRvcFByaXZhdGVseU93bmVkRG9tYWlucyhPcHRpb25T
ZXQ8V2Vic2l0ZURhdGFUeXBlPiwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24+LCBW
ZWN0b3I8U3RyaW5nPiYmIHRvcFByaXZhdGVseU93bmVkRG9tYWlucywgc3RkOjpmdW5jdGlvbjx2
b2lkKFZlY3RvcjxXZWJzaXRlRGF0YVJlY29yZD4sIFZlY3RvcjxTdHJpbmc+KT4gY29tcGxldGlv
bkhhbmRsZXIpOwogICAgIHZvaWQgcmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBl
Piwgc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCBtb2RpZmllZFNpbmNlLCBz
dGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGNvbXBsZXRpb25IYW5kbGVyKTsKICAgICB2b2lkIHJlbW92
ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIGNvbnN0IFZlY3RvcjxXZWJzaXRlRGF0
YVJlY29yZD4mLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGNvbXBsZXRpb25IYW5kbGVyKTsKKyAg
ICB2b2lkIHJlbW92ZURhdGFGb3JUb3BQcml2YXRlbHlPd25lZERvbWFpbnMoT3B0aW9uU2V0PFdl
YnNpdGVEYXRhVHlwZT4sIE9wdGlvblNldDxXZWJzaXRlRGF0YUZldGNoT3B0aW9uPiwgVmVjdG9y
PFN0cmluZz4mJiB0b3BQcml2YXRlbHlPd25lZERvbWFpbnMsIHN0ZDo6ZnVuY3Rpb248dm9pZChW
ZWN0b3I8U3RyaW5nPiBkb21haW5zV2l0aERhdGFSZWNvcmRzUmVtb3ZlZCk+IGNvbXBsZXRpb25I
YW5kbGVyKTsKIAogICAgIFN0b3JhZ2VNYW5hZ2VyKiBzdG9yYWdlTWFuYWdlcigpIHsgcmV0dXJu
IG1fc3RvcmFnZU1hbmFnZXIuZ2V0KCk7IH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>300339</attachid>
            <date>2017-02-01 11:09:12 -0800</date>
            <delta_ts>2017-02-09 01:51:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-167474-20170201110700.patch</filename>
            <type>text/plain</type>
            <size>24275</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMTQ0NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBACisyMDE3LTAyLTAxICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFVwZGF0ZXMgdG8gUmVzb3Vy
Y2UgTG9hZCBTdGF0aXN0aWNzOiBHZXQgdGhlIHJpZ2h0IHdlYnNpdGUgZGF0YSBzdG9yZSBhbmQg
aW50cm9kdWNlIHRpbWVvdXQgZm9yIHVzZXIgaW50ZXJhY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NzQ3NAorICAgICAgICA8cmRhcjovL3By
b2JsZW0vMzAyOTAyNzA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzLiBUaGUgc3RhdGlzdGljcyBhcmUgYmFzZWQgb24gdG9wIHBy
aXZhdGVseSBvd25lZCBkb21haW5zCisgICAgICAgIHdoaWNoIGN1cnJlbnRseSBhcmUgbm90IHN1
cHBvcnRlZCBieSBsYXlvdXQgdGVzdHMgbm9yIEFQSSB0ZXN0cy4KKworICAgICAgICAqIGRvbS9E
b2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dXBkYXRlTGFzdEhhbmRs
ZWRVc2VyR2VzdHVyZVRpbWVzdGFtcCk6CisgICAgICAgICAgICBUaGlzIG5vdyBjYWxscyBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6bG9nVXNlckludGVyYWN0aW9uKCkgZXZlcnkgdGltZSBzaW5jZQor
ICAgICAgICAgICAgd2Ugd2FudCB0byBrZWVwIHRyYWNrIG9mIHRoZSBtb3N0IHJlY2VudCB1c2Vy
IGludGVyYWN0aW9uLgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpyZWR1Y2VUaW1lUmVzb2x1dGlvblRvT25lRGF5KToKKyAgICAg
ICAgICAgIFJlZHVjZXMgdGltZSByZXNvbHV0aW9uIGZvciBwcml2YWN5IHJlYXNvbnMuCisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nVXNlckludGVyYWN0aW9uKToK
KyAgICAgICAgICAgIE5vdyBzZXRzIGFuZCB1cGRhdGVzIGEgdGltZXN0YW1wIG9mIG1vc3QgcmVj
ZW50IHVzZXIgaW50ZXJhY3Rpb24uCisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRp
c3RpY3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljczo6ZW5j
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M6OmRlY29kZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjp0b1N0cmluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjptZXJnZSk6CisgICAgICAg
ICAgICBTdXBwb3J0IGZvciBzdGF0aXN0aWNzIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24sIGdy
YW5kZmF0aGVyZWQsIGFuZAorICAgICAgICAgICAgZGF0YVJlY29yZHNSZW1vdmVkLgorICAgICAg
ICAqIGxvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmg6CisgICAgICAgICogbG9hZGVyL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpoYXNIYWRS
ZWNlbnRVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAgICAgVGFrZXMgaW50byBhY2NvdW50IHRo
ZSB0aW1lc3RhbXAgb2YgbW9zdCByZWNlbnQgdXNlciBpbnRlcmFjdGlvbi4KKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJldmFsZW50UmVzb3VyY2VEb21h
aW5zV2l0aG91dFVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgICAgICBOb3cgdXNlcyBoYXNIYWRS
ZWNlbnRVc2VySW50ZXJhY3Rpb24oKS4KKwogMjAxNy0wMS0zMSAgQW5kZXJzIENhcmxzc29uICA8
YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIEFwcGxlIFBheSBidXR0b24gZG9lcyBub3Ro
aW5nIG9uIG55dGltZXMuY29tCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9u
IDIxMTQ0NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYzNTksMTAgKzYzNTksOCBAQCBEb2N1bWVudDo6UmVnaW9uRml4ZWRQYWlyIERvY3Vt
ZW50OjphYnNvCiAKIHZvaWQgRG9jdW1lbnQ6OnVwZGF0ZUxhc3RIYW5kbGVkVXNlckdlc3R1cmVU
aW1lc3RhbXAoKQogewotICAgIGlmICghbV9sYXN0SGFuZGxlZFVzZXJHZXN0dXJlVGltZXN0YW1w
KQotICAgICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5sb2dVc2Vy
SW50ZXJhY3Rpb24oKnRoaXMpOwotCiAgICAgbV9sYXN0SGFuZGxlZFVzZXJHZXN0dXJlVGltZXN0
YW1wID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CisgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZE9ic2VydmVyKCkubG9nVXNlckludGVyYWN0aW9uKCp0aGlzKTsKIH0KIAog
dm9pZCBEb2N1bWVudDo6c3RhcnRUcmFja2luZ1N0eWxlUmVjYWxjcygpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAJKHJldmlzaW9uIDIx
MTQ0NykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJTZXR0aW5ncy5oIgog
I2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUgIlVSTC5oIgorI2luY2x1ZGUgPHd0
Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIApAQCAtMjc4LDYgKzI3OSwxMiBAQCB2b2lk
IFJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dXZWJTb2NrZXRMCiAgICAgICAgIG1fc3RvcmUtPmZp
cmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOwogfQogCitzdGF0aWMgZG91YmxlIHJlZHVjZVRp
bWVSZXNvbHV0aW9uVG9PbmVEYXkoZG91YmxlIHNlY29uZHMpCit7CisgICAgc3RhdGljIGNvbnN0
IGF1dG8gb25lRGF5SW5TZWNvbmRzID0gODY0MDA7CisgICAgcmV0dXJuIHN0ZDo6Zmxvb3Ioc2Vj
b25kcyAvIG9uZURheUluU2Vjb25kcykgKiBvbmVEYXlJblNlY29uZHM7Cit9CisgICAgCiB2b2lk
IFJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dVc2VySW50ZXJhY3Rpb24oY29uc3QgRG9jdW1lbnQm
IGRvY3VtZW50KQogewogICAgIEFTU0VSVChkb2N1bWVudC5wYWdlKCkpOwpAQCAtMjkxLDggKzI5
OCwxMyBAQCB2b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dVc2VySW50ZXJhCiAgICAgICAg
IHJldHVybjsKIAogICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBtX3N0b3JlLT5lbnN1cmVSZXNvdXJj
ZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1hcnlEb21haW4odXJsKSk7Ci0gICAgc3Rh
dGlzdGljcy5oYWRVc2VySW50ZXJhY3Rpb24gPSB0cnVlOwotICAgIG1fc3RvcmUtPmZpcmVEYXRh
TW9kaWZpY2F0aW9uSGFuZGxlcigpOworCisgICAgZG91YmxlIG5ld1RpbWVzdGFtcCA9IHJlZHVj
ZVRpbWVSZXNvbHV0aW9uVG9PbmVEYXkoV1RGOjpjdXJyZW50VGltZSgpKTsKKyAgICBpZiAobmV3
VGltZXN0YW1wICE9IHN0YXRpc3RpY3MubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbikgeworICAg
ICAgICBzdGF0aXN0aWNzLmhhZFVzZXJJbnRlcmFjdGlvbiA9IHRydWU7CisgICAgICAgIHN0YXRp
c3RpY3MubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiA9IG5ld1RpbWVzdGFtcDsKKyAgICAgICAg
bV9zdG9yZS0+ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CisgICAgfQogfQogICAgIAog
U3RyaW5nIFJlc291cmNlTG9hZE9ic2VydmVyOjpwcmltYXJ5RG9tYWluKGNvbnN0IFVSTCYgdXJs
KQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0
aWNzLmNwcAkocmV2aXNpb24gMjExNDQ3KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291
cmNlTG9hZFN0YXRpc3RpY3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw4IEBAIHZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6ZW5jb2RlKEtleWUKICAgICAKICAgICAvLyBVc2Vy
IGludGVyYWN0aW9uCiAgICAgZW5jb2Rlci5lbmNvZGVCb29sKCJoYWRVc2VySW50ZXJhY3Rpb24i
LCBoYWRVc2VySW50ZXJhY3Rpb24pOworICAgIGVuY29kZXIuZW5jb2RlRG91YmxlKCJtb3N0UmVj
ZW50VXNlckludGVyYWN0aW9uIiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbik7CisgICAgZW5j
b2Rlci5lbmNvZGVCb29sKCJncmFuZGZhdGhlcmVkIiwgZ3JhbmRmYXRoZXJlZCk7CiAgICAgCiAg
ICAgLy8gVG9wIGZyYW1lIHN0YXRzCiAgICAgZW5jb2Rlci5lbmNvZGVCb29sKCJ0b3BGcmFtZUhh
c0JlZW5OYXZpZ2F0ZWRUb0JlZm9yZSIsIHRvcEZyYW1lSGFzQmVlbk5hdmlnYXRlZFRvQmVmb3Jl
KTsKQEAgLTE3Nyw3ICsxNzksMTYgQEAgYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpkZWNv
ZGUoS2V5ZQogCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZVVJbnQzMigiZGF0YVJlY29yZHNSZW1v
dmVkIiwgZGF0YVJlY29yZHNSZW1vdmVkKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAor
CisgICAgaWYgKHZlcnNpb24gPCAzKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGVEb3VibGUoIm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24iLCBtb3N0UmVj
ZW50VXNlckludGVyYWN0aW9uKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZUJvb2woImdyYW5kZmF0aGVyZWQiLCBncmFuZGZhdGhlcmVkKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTIxNCw2ICsyMjUs
MTEgQEAgU3RyaW5nIFJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnRvU3RyaW5nKAogICAgIC8vIFVz
ZXIgaW50ZXJhY3Rpb24KICAgICBhcHBlbmRCb29sZWFuKGJ1aWxkZXIsICJoYWRVc2VySW50ZXJh
Y3Rpb24iLCBoYWRVc2VySW50ZXJhY3Rpb24pOwogICAgIGJ1aWxkZXIuYXBwZW5kKCdcbicpOwor
ICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiICAgIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb246
ICIpOworICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24p
OworICAgIGJ1aWxkZXIuYXBwZW5kKCdcbicpOworICAgIGFwcGVuZEJvb2xlYW4oYnVpbGRlciwg
IiAgICBncmFuZGZhdGhlcmVkIiwgZ3JhbmRmYXRoZXJlZCk7CisgICAgYnVpbGRlci5hcHBlbmQo
J1xuJyk7CiAgICAgCiAgICAgLy8gVG9wIGZyYW1lIHN0YXRzCiAgICAgYXBwZW5kQm9vbGVhbihi
dWlsZGVyLCAidG9wRnJhbWVIYXNCZWVuTmF2aWdhdGVkVG9CZWZvcmUiLCB0b3BGcmFtZUhhc0Jl
ZW5OYXZpZ2F0ZWRUb0JlZm9yZSk7CkBAIC0yOTQsNyArMzEwLDE5IEBAIHZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljczo6bWVyZ2UoY29uc3QKIHsKICAgICBBU1NFUlQob3RoZXIuaGlnaExldmVs
RG9tYWluID09IGhpZ2hMZXZlbERvbWFpbik7CiAKLSAgICBoYWRVc2VySW50ZXJhY3Rpb24gfD0g
b3RoZXIuaGFkVXNlckludGVyYWN0aW9uOworICAgIGlmICghb3RoZXIuaGFkVXNlckludGVyYWN0
aW9uKSB7CisgICAgICAgIC8vIElmIHVzZXIgaW50ZXJhY3Rpb24gaGFzIGJlZW4gcmVzZXQgZG8g
c28gaGVyZSB0b28uCisgICAgICAgIC8vIEVsc2UsIGRvIG5vdGhpbmcuCisgICAgICAgIGlmIChv
dGhlci5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uID09IDAuMCkgeworICAgICAgICAgICAgaGFk
VXNlckludGVyYWN0aW9uID0gZmFsc2U7CisgICAgICAgICAgICBtb3N0UmVjZW50VXNlckludGVy
YWN0aW9uID0gMC4wOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaGFkVXNlcklu
dGVyYWN0aW9uID0gdHJ1ZTsKKyAgICAgICAgaWYgKG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24g
PCBvdGhlci5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uKQorICAgICAgICAgICAgbW9zdFJlY2Vu
dFVzZXJJbnRlcmFjdGlvbiA9IG90aGVyLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb247CisgICAg
fQorICAgIGdyYW5kZmF0aGVyZWQgfD0gb3RoZXIuZ3JhbmRmYXRoZXJlZDsKICAgICAKICAgICAv
LyBUb3AgZnJhbWUgc3RhdHMKICAgICB0b3BGcmFtZUhhc0JlZW5SZWRpcmVjdGVkVG8gKz0gb3Ro
ZXIudG9wRnJhbWVIYXNCZWVuUmVkaXJlY3RlZFRvOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9h
ZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5oCShyZXZpc2lvbiAyMTE0NDcpCisrKyBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC01Myw3ICs1MywxMCBAQCBzdHJ1Y3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyB7CiAK
ICAgICAvLyBVc2VyIGludGVyYWN0aW9uCiAgICAgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb24geyBm
YWxzZSB9OwotICAgIAorICAgIC8vIFRpbWVzdGFtcC4gRGVmYXVsdCB2YWx1ZSBpcyBuZWdhdGl2
ZSwgMC4wIG1lYW5zIGl0IHdhcyByZXNldC4KKyAgICBkb3VibGUgbW9zdFJlY2VudFVzZXJJbnRl
cmFjdGlvbiB7IC0xLjAgfTsKKyAgICBib29sIGdyYW5kZmF0aGVyZWQgeyBmYWxzZSB9OworCiAg
ICAgLy8gVG9wIGZyYW1lIHN0YXRzCiAgICAgdW5zaWduZWQgdG9wRnJhbWVIYXNCZWVuUmVkaXJl
Y3RlZFRvIHsgMCB9OwogICAgIHVuc2lnbmVkIHRvcEZyYW1lSGFzQmVlblJlZGlyZWN0ZWRGcm9t
IHsgMCB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAJKHJldmlzaW9uIDIxMTQ0NykKKysrIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMywxMSArMzMsMTQgQEAKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmgi
CiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSAiVVJMLmgiCisjaW5jbHVkZSA8
d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGNvbnN0IGF1dG8gc3RhdGlzdGljc01vZGVsVmVy
c2lvbiA9IDI7CitzdGF0aWMgY29uc3QgYXV0byBzdGF0aXN0aWNzTW9kZWxWZXJzaW9uID0gMzsK
Ky8vIDMwIGRheXMgaW4gc2Vjb25kcworc3RhdGljIGNvbnN0IGF1dG8gdGltZVRvTGl2ZVVzZXJJ
bnRlcmFjdGlvbiA9IDI1OTIwMDA7CiAKIFJlZjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y3JlYXRlKCkKIHsKQEAgLTE1MCwxMSArMTUz
LDI4IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcm9jZXMKICAgICAgICAg
cHJvY2Vzc0Z1bmN0aW9uKHJlc291cmNlU3RhdGlzdGljKTsKIH0KIAorc3RhdGljIGJvb2wgaGFz
SGFkUmVjZW50VXNlckludGVyYWN0aW9uKFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHJlc291cmNl
U3RhdGlzdGljKQoreworICAgIGlmICghcmVzb3VyY2VTdGF0aXN0aWMuaGFkVXNlckludGVyYWN0
aW9uKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoY3VycmVudFRpbWUoKSA+IChy
ZXNvdXJjZVN0YXRpc3RpYy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uICsgdGltZVRvTGl2ZVVz
ZXJJbnRlcmFjdGlvbikpIHsKKyAgICAgICAgLy8gRHJvcCBwcml2YWN5IHNlbnNpdGl2ZSBkYXRh
IGJlY2F1c2Ugd2Ugbm8gbG9uZ2VyIG5lZWQgaXQuCisgICAgICAgIC8vIFNldCB0aW1lc3RhbXAg
dG8gMC4wIHNvIHRoYXQgc3RhdGlzdGljcyBtZXJnZSB3aWxsIGtub3cKKyAgICAgICAgLy8gaXQg
aGFzIGJlZW4gcmVzZXQgYXMgb3Bwb3NlZCB0byBpdHMgZGVmYXVsdCAtMS4wLgorICAgICAgICBy
ZXNvdXJjZVN0YXRpc3RpYy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uID0gMC4wOworICAgICAg
ICByZXNvdXJjZVN0YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rpb24gPSBmYWxzZTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCiBWZWN0b3I8U3Ry
aW5nPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnByZXZhbGVudFJlc291cmNlRG9tYWlu
c1dpdGhvdXRVc2VySW50ZXJhY3Rpb24oKQogewogICAgIFZlY3RvcjxTdHJpbmc+IHByZXZhbGVu
dFJlc291cmNlczsKICAgICBmb3IgKGF1dG8mIHJlc291cmNlU3RhdGlzdGljIDogbV9yZXNvdXJj
ZVN0YXRpc3RpY3NNYXAudmFsdWVzKCkpIHsKLSAgICAgICAgaWYgKHJlc291cmNlU3RhdGlzdGlj
LmlzUHJldmFsZW50UmVzb3VyY2UgJiYgIXJlc291cmNlU3RhdGlzdGljLmhhZFVzZXJJbnRlcmFj
dGlvbikKKyAgICAgICAgaWYgKHJlc291cmNlU3RhdGlzdGljLmlzUHJldmFsZW50UmVzb3VyY2Ug
JiYgIWhhc0hhZFJlY2VudFVzZXJJbnRlcmFjdGlvbihyZXNvdXJjZVN0YXRpc3RpYykpCiAgICAg
ICAgICAgICBwcmV2YWxlbnRSZXNvdXJjZXMuYXBwZW5kKHJlc291cmNlU3RhdGlzdGljLmhpZ2hM
ZXZlbERvbWFpbik7CiAgICAgfQogICAgIHJldHVybiBwcmV2YWxlbnRSZXNvdXJjZXM7CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCShyZXZpc2lvbiAyMTE0NDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMyBAQAorMjAxNy0wMi0wMSAgSm9obiBXaWxhbmRl
ciAgPHdpbGFuZGVyQGFwcGxlLmNvbT4KKworICAgICAgICBVcGRhdGVzIHRvIFJlc291cmNlIExv
YWQgU3RhdGlzdGljczogR2V0IHRoZSByaWdodCB3ZWJzaXRlIGRhdGEgc3RvcmUgYW5kIGludHJv
ZHVjZSB0aW1lb3V0IGZvciB1c2VyIGludGVyYWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjc0NzQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzMwMjkwMjcwPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHA6CisgICAgICAgIChJUEM6OkFy
Z3VtZW50Q29kZXI8UmVzb3VyY2VMb2FkU3RhdGlzdGljcz46OmVuY29kZSk6CisgICAgICAgIChJ
UEM6OkFyZ3VtZW50Q29kZXI8UmVzb3VyY2VMb2FkU3RhdGlzdGljcz46OmRlY29kZSk6CisgICAg
ICAgICAgICBTdXBwb3J0IGZvciBzdGF0aXN0aWNzIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24s
IGdyYW5kZmF0aGVyZWQsIGFuZAorICAgICAgICAgICAgZGF0YVJlY29yZHNSZW1vdmVkLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUHJveHk6OmRlbGV0ZVdlYnNpdGVEYXRhRm9yVG9wUHJpdmF0ZWx5T3duZWREb21h
aW5zSW5BbGxQZXJzaXN0ZW50RGF0YVN0b3Jlcyk6CisgICAgICAgICAgICBBIHdheSB0byBkZWxl
dGUgd2Vic2l0ZSBkYXRhIGluIHBlcnNpc3RlbnQgc3RvcmUocykgY29uZmlndXJlZCBieSB0aGUg
CisgICAgICAgICAgICBlbWJlZGRpbmcgY2xpZW50LiBBUEk6OldlYnNpdGVEYXRhU3RvcmU6OmRl
ZmF1bHREYXRhU3RvcmUoKSBkb2VzIG5vdCAKKyAgICAgICAgICAgIGRvIHRoaXMgd2hpY2ggY2F1
c2VkIHVzIHRvIHNraXAgc2Vzc2lvbiBzdG9yYWdlLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQ
cm9jZXNzUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpyZW1vdmVEYXRhUmVjb3Jkcyk6CisgICAgICAgICAgICBOb3cgdXNlcyBXZWJQcm9j
ZXNzUHJveHk6OiBkZWxldGVXZWJzaXRlRGF0YUZvclRvcFByaXZhdGVseU93bmVkRG9tYWluc0lu
QWxsUGVyc2lzdGVudERhdGFTdG9yZXMoKS4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURh
dGEvV2Vic2l0ZURhdGFTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OmZldGNoRGF0YUZvclRvcFByaXZhdGVseU93bmVkRG9tYWlucyk6CisgICAgICAgIChXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGFGb3JUb3BQcml2YXRlbHlPd25lZERvbWFp
bnMpOgorICAgICAgICAgICAgVGhlc2UgdHdvIGZ1bmN0aW9ucyBhcmUgaW50cm9kdWNlZCB0byBz
dXBwb3J0IGZldGNoaW5nIGFuZCByZW1vdmFsCisgICAgICAgICAgICBvZiBkYXRhIHJlY29yZHMg
aW4gdGhlIFdlYnNpdGVEYXRhU3RvcmUocykgY29ubmVjdGVkIHRvIGEKKyAgICAgICAgICAgIHBh
cnRpY3VsYXIgc2Vzc2lvbiBvciBwYWdlLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0
YS9XZWJzaXRlRGF0YVN0b3JlLmg6CisKIDIwMTctMDEtMzEgIEFuZGVycyBDYXJsc3NvbiAgPGFu
ZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgbW9yZSBDUkFTSCBjYWxscyB0byB0cnkg
dG8gZmlndXJlIG91dCB3aHkgd2UncmUgZmFpbGluZyB0byBzZW5kIG1hY2ggcG9ydHMgb3ZlciB0
aGUgd2lyZQpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVy
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVu
dENvZGVycy5jcHAJKHJldmlzaW9uIDIxMTQ0NykKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9X
ZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUyLDYgKzIyNTIs
OCBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8UmVzb3VyY2VMb2FkU3RhdGlzdGljCiAgICAgCiAgICAg
Ly8gVXNlciBpbnRlcmFjdGlvbgogICAgIGVuY29kZXIgPDwgc3RhdGlzdGljcy5oYWRVc2VySW50
ZXJhY3Rpb247CisgICAgZW5jb2RlciA8PCBzdGF0aXN0aWNzLm1vc3RSZWNlbnRVc2VySW50ZXJh
Y3Rpb247CisgICAgZW5jb2RlciA8PCBzdGF0aXN0aWNzLmdyYW5kZmF0aGVyZWQ7CiAgICAgCiAg
ICAgLy8gVG9wIGZyYW1lIHN0YXRzCiAgICAgZW5jb2RlciA8PCBzdGF0aXN0aWNzLnRvcEZyYW1l
SGFzQmVlbk5hdmlnYXRlZFRvQmVmb3JlOwpAQCAtMjI4Miw2ICsyMjg0LDcgQEAgdm9pZCBBcmd1
bWVudENvZGVyPFJlc291cmNlTG9hZFN0YXRpc3RpYwogICAgIC8vIFByZXZhbGVudCBSZXNvdXJj
ZQogICAgIGVuY29kZXIgPDwgc3RhdGlzdGljcy5yZWRpcmVjdGVkVG9PdGhlclByZXZhbGVudFJl
c291cmNlT3JpZ2luczsKICAgICBlbmNvZGVyIDw8IHN0YXRpc3RpY3MuaXNQcmV2YWxlbnRSZXNv
dXJjZTsKKyAgICBlbmNvZGVyIDw8IHN0YXRpc3RpY3MuZGF0YVJlY29yZHNSZW1vdmVkOwogfQog
CiBib29sIEFyZ3VtZW50Q29kZXI8UmVzb3VyY2VMb2FkU3RhdGlzdGljcz46OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyLCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBzdGF0aXN0aWNz
KQpAQCAtMjI5Miw2ICsyMjk1LDEyIEBAIGJvb2wgQXJndW1lbnRDb2RlcjxSZXNvdXJjZUxvYWRT
dGF0aXN0aWMKICAgICAvLyBVc2VyIGludGVyYWN0aW9uCiAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShzdGF0aXN0aWNzLmhhZFVzZXJJbnRlcmFjdGlvbikpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3RhdGlzdGljcy5tb3N0UmVjZW50VXNlckludGVy
YWN0aW9uKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShzdGF0aXN0aWNzLmdyYW5kZmF0aGVyZWQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
CiAgICAgLy8gVG9wIGZyYW1lIHN0YXRzCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGF0aXN0
aWNzLnRvcEZyYW1lSGFzQmVlbk5hdmlnYXRlZFRvQmVmb3JlKSkKQEAgLTIzNjIsNyArMjM3MSwx
MCBAQCBib29sIEFyZ3VtZW50Q29kZXI8UmVzb3VyY2VMb2FkU3RhdGlzdGljCiAgICAgCiAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShzdGF0aXN0aWNzLmlzUHJldmFsZW50UmVzb3VyY2UpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0YXRp
c3RpY3MuZGF0YVJlY29yZHNSZW1vdmVkKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9j
ZXNzUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
cm9jZXNzUHJveHkuY3BwCShyZXZpc2lvbiAyMTE0NDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDYgKzE5OSwx
NyBAQCBXZWJQYWdlUHJveHkqIFdlYlByb2Nlc3NQcm94eTo6d2ViUGFnZSh1CiAgICAgcmV0dXJu
IGdsb2JhbFBhZ2VNYXAoKS5nZXQocGFnZUlEKTsKIH0KIAordm9pZCBXZWJQcm9jZXNzUHJveHk6
OmRlbGV0ZVdlYnNpdGVEYXRhRm9yVG9wUHJpdmF0ZWx5T3duZWREb21haW5zSW5BbGxQZXJzaXN0
ZW50RGF0YVN0b3JlcyhPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIFZlY3Rv
cjxTdHJpbmc+JiYgdG9wUHJpdmF0ZWx5T3duZWREb21haW5zLCBzdGQ6OmZ1bmN0aW9uPHZvaWQo
VmVjdG9yPFN0cmluZz4pPiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBmb3IgKGF1dG8mIHBh
Z2UgOiBnbG9iYWxQYWdlTWFwKCkpIHsKKyAgICAgICAgaWYgKHBhZ2UudmFsdWUtPndlYnNpdGVE
YXRhU3RvcmUoKS5pc1BlcnNpc3RlbnQoKSkgeworICAgICAgICAgICAgcGFnZS52YWx1ZS0+d2Vi
c2l0ZURhdGFTdG9yZSgpLnJlbW92ZURhdGFGb3JUb3BQcml2YXRlbHlPd25lZERvbWFpbnMoZGF0
YVR5cGVzLCB7IH0sIFdURk1vdmUodG9wUHJpdmF0ZWx5T3duZWREb21haW5zKSwgW2NvbXBsZXRp
b25IYW5kbGVyXShhdXRvIGRvbWFpbnNXaXRoRGF0YVJlY29yZHMpIHsKKyAgICAgICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGRvbWFpbnNXaXRoRGF0YVJlY29yZHMpKTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfQorfQorCiBSZWY8V2ViUGFnZVByb3h5PiBX
ZWJQcm9jZXNzUHJveHk6OmNyZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCYgcGFnZUNsaWVudCwgUmVm
PEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24+JiYgcGFnZUNvbmZpZ3VyYXRpb24pCiB7CiAgICAgdWlu
dDY0X3QgcGFnZUlEID0gZ2VuZXJhdGVQYWdlSUQoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmgJKHJldmlzaW9uIDIxMTQ0NykKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMTIw
LDYgKzEyMCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGZldGNoV2Vic2l0ZURhdGEoV2ViQ29yZTo6
U2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgRnVuY3Rpb248dm9pZChXZWJz
aXRlRGF0YSk+IGNvbXBsZXRpb25IYW5kbGVyKTsKICAgICB2b2lkIGRlbGV0ZVdlYnNpdGVEYXRh
KFdlYkNvcmU6OlNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIHN0ZDo6Y2hy
b25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQgbW9kaWZpZWRTaW5jZSwgRnVuY3Rpb248dm9p
ZCgpPiBjb21wbGV0aW9uSGFuZGxlcik7CiAgICAgdm9pZCBkZWxldGVXZWJzaXRlRGF0YUZvck9y
aWdpbnMoV2ViQ29yZTo6U2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgY29u
c3QgVmVjdG9yPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4mLCBGdW5jdGlvbjx2b2lkKCk+
IGNvbXBsZXRpb25IYW5kbGVyKTsKKyAgICBzdGF0aWMgdm9pZCBkZWxldGVXZWJzaXRlRGF0YUZv
clRvcFByaXZhdGVseU93bmVkRG9tYWluc0luQWxsUGVyc2lzdGVudERhdGFTdG9yZXMoT3B0aW9u
U2V0PFdlYnNpdGVEYXRhVHlwZT4sIFZlY3RvcjxTdHJpbmc+JiYgdG9wUHJpdmF0ZWx5T3duZWRE
b21haW5zLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoVmVjdG9yPFN0cmluZz4pPiBjb21wbGV0aW9uSGFu
ZGxlcik7CiAKICAgICB2b2lkIGVuYWJsZVN1ZGRlblRlcm1pbmF0aW9uKCk7CiAgICAgdm9pZCBk
aXNhYmxlU3VkZGVuVGVybWluYXRpb24oKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCShy
ZXZpc2lvbiAyMTE0NDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsOSArMjYsOSBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZS5oIgogCi0jaW5jbHVkZSAiQVBJV2Vic2l0ZURhdGFTdG9yZS5oIgogI2luY2x1ZGUgIldl
YlByb2Nlc3NNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCisjaW5jbHVk
ZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YUZldGNoT3B0aW9uLmgiCiAj
aW5jbHVkZSAiV2Vic2l0ZURhdGFUeXBlLmgiCkBAIC0xMDUsNyArMTA1LDcgQEAgdm9pZCBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlbQogICAgIGlmIChtX2RhdGFSZWNvcmRzUmVt
b3ZhbFBlbmRpbmcpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxTdHJpbmc+IHByZXZh
bGVudFJlc291cmNlRG9tYWlucyA9IGNvcmVTdG9yZSgpLnByZXZhbGVudFJlc291cmNlRG9tYWlu
c1dpdGhvdXRVc2VySW50ZXJhY3Rpb24oKTsKKyAgICBWZWN0b3I8U3RyaW5nPiYmIHByZXZhbGVu
dFJlc291cmNlRG9tYWlucyA9IGNvcmVTdG9yZSgpLnByZXZhbGVudFJlc291cmNlRG9tYWluc1dp
dGhvdXRVc2VySW50ZXJhY3Rpb24oKTsKICAgICBpZiAoIXByZXZhbGVudFJlc291cmNlRG9tYWlu
cy5zaXplKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTIzLDQxICsxMjMsMjkgQEAgdm9pZCBX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlbQogCiAgICAgaWYgKGRhdGFUeXBlc1Rv
UmVtb3ZlLmlzRW1wdHkoKSkgewogICAgICAgICBkYXRhVHlwZXNUb1JlbW92ZSB8PSBXZWJzaXRl
RGF0YVR5cGU6OkNvb2tpZXM7Ci0gICAgICAgIGRhdGFUeXBlc1RvUmVtb3ZlIHw9IFdlYnNpdGVE
YXRhVHlwZTo6TG9jYWxTdG9yYWdlOwotICAgICAgICBkYXRhVHlwZXNUb1JlbW92ZSB8PSBXZWJz
aXRlRGF0YVR5cGU6OkluZGV4ZWREQkRhdGFiYXNlczsKICAgICAgICAgZGF0YVR5cGVzVG9SZW1v
dmUgfD0gV2Vic2l0ZURhdGFUeXBlOjpEaXNrQ2FjaGU7CiAgICAgICAgIGRhdGFUeXBlc1RvUmVt
b3ZlIHw9IFdlYnNpdGVEYXRhVHlwZTo6TWVtb3J5Q2FjaGU7CisgICAgICAgIGRhdGFUeXBlc1Rv
UmVtb3ZlIHw9IFdlYnNpdGVEYXRhVHlwZTo6T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGU7Cisg
ICAgICAgIGRhdGFUeXBlc1RvUmVtb3ZlIHw9IFdlYnNpdGVEYXRhVHlwZTo6U2Vzc2lvblN0b3Jh
Z2U7CisgICAgICAgIGRhdGFUeXBlc1RvUmVtb3ZlIHw9IFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxT
dG9yYWdlOworICAgICAgICBkYXRhVHlwZXNUb1JlbW92ZSB8PSBXZWJzaXRlRGF0YVR5cGU6Oldl
YlNRTERhdGFiYXNlczsKKyAgICAgICAgZGF0YVR5cGVzVG9SZW1vdmUgfD0gV2Vic2l0ZURhdGFU
eXBlOjpJbmRleGVkREJEYXRhYmFzZXM7CisgICAgICAgIGRhdGFUeXBlc1RvUmVtb3ZlIHw9IFdl
YnNpdGVEYXRhVHlwZTo6TWVkaWFLZXlzOworICAgICAgICBkYXRhVHlwZXNUb1JlbW92ZSB8PSBX
ZWJzaXRlRGF0YVR5cGU6OkhTVFNDYWNoZTsKKyAgICAgICAgZGF0YVR5cGVzVG9SZW1vdmUgfD0g
V2Vic2l0ZURhdGFUeXBlOjpTZWFyY2hGaWVsZFJlY2VudFNlYXJjaGVzOworI2lmIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgICAgICBkYXRhVHlwZXNUb1JlbW92ZSB8PSBXZWJzaXRl
RGF0YVR5cGU6OlBsdWdJbkRhdGE7CisjZW5kaWYKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQor
ICAgICAgICBkYXRhVHlwZXNUb1JlbW92ZSB8PSBXZWJzaXRlRGF0YVR5cGU6Ok1lZGlhRGV2aWNl
SWRlbnRpZmllcjsKKyNlbmRpZgogICAgIH0KIAogICAgIC8vIFN3aXRjaCB0byB0aGUgbWFpbiB0
aHJlYWQgdG8gZ2V0IHRoZSBkZWZhdWx0IHdlYnNpdGUgZGF0YSBzdG9yZQogICAgIFJ1bkxvb3A6
Om1haW4oKS5kaXNwYXRjaChbcHJldmFsZW50UmVzb3VyY2VEb21haW5zID0gV1RGTW92ZShwcmV2
YWxlbnRSZXNvdXJjZURvbWFpbnMpLCB0aGlzXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgYXV0byYg
d2Vic2l0ZURhdGFTdG9yZSA9IEFQSTo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9y
ZSgpLT53ZWJzaXRlRGF0YVN0b3JlKCk7Ci0KLSAgICAgICAgd2Vic2l0ZURhdGFTdG9yZS5mZXRj
aERhdGEoZGF0YVR5cGVzVG9SZW1vdmUsIHsgfSwgW3ByZXZhbGVudFJlc291cmNlRG9tYWlucyA9
IFdURk1vdmUocHJldmFsZW50UmVzb3VyY2VEb21haW5zKSwgdGhpc10oYXV0byB3ZWJzaXRlRGF0
YVJlY29yZHMpIHsKLSAgICAgICAgICAgIFZlY3RvcjxXZWJzaXRlRGF0YVJlY29yZD4gZGF0YVJl
Y29yZHM7Ci0gICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBwcmV2YWxlbnRSZXNvdXJjZURvbWFp
bnNXaXRoRGF0YVJlY29yZHM7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIHdlYnNpdGVEYXRhUmVj
b3JkIDogd2Vic2l0ZURhdGFSZWNvcmRzKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChhdXRvJiBw
cmV2YWxlbnRSZXNvdXJjZURvbWFpbiA6IHByZXZhbGVudFJlc291cmNlRG9tYWlucykgewotICAg
ICAgICAgICAgICAgICAgICBpZiAod2Vic2l0ZURhdGFSZWNvcmQuZGlzcGxheU5hbWUuZW5kc1dp
dGhJZ25vcmluZ0FTQ0lJQ2FzZShwcmV2YWxlbnRSZXNvdXJjZURvbWFpbikpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGF1dG8gc3VmZml4U3RhcnQgPSB3ZWJzaXRlRGF0YVJlY29yZC5kaXNw
bGF5TmFtZS5sZW5ndGgoKSAtIHByZXZhbGVudFJlc291cmNlRG9tYWluLmxlbmd0aCgpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdWZmaXhTdGFydCB8fCB3ZWJzaXRlRGF0YVJlY29y
ZC5kaXNwbGF5TmFtZVtzdWZmaXhTdGFydCAtIDFdID09ICcuJykgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGFSZWNvcmRzLmFwcGVuZCh3ZWJzaXRlRGF0YVJlY29yZCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHJldmFsZW50UmVzb3VyY2VEb21haW5zV2l0aERhdGFS
ZWNvcmRzLmFwcGVuZChwcmV2YWxlbnRSZXNvdXJjZURvbWFpbik7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghZGF0YVJlY29yZHMuc2l6ZSgpKSB7Ci0gICAg
ICAgICAgICAgICAgbV9kYXRhUmVjb3Jkc1JlbW92YWxQZW5kaW5nID0gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBhdXRvJiB3ZWJz
aXRlRGF0YVN0b3JlID0gQVBJOjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkt
PndlYnNpdGVEYXRhU3RvcmUoKTsKLSAgICAgICAgICAgIHdlYnNpdGVEYXRhU3RvcmUucmVtb3Zl
RGF0YShkYXRhVHlwZXNUb1JlbW92ZSwgZGF0YVJlY29yZHMsIFtwcmV2YWxlbnRSZXNvdXJjZURv
bWFpbnNXaXRoRGF0YVJlY29yZHMgPSBXVEZNb3ZlKHByZXZhbGVudFJlc291cmNlRG9tYWluc1dp
dGhEYXRhUmVjb3JkcyksIHRoaXNdIHsKLSAgICAgICAgICAgICAgICB0aGlzLT5jb3JlU3RvcmUo
KS51cGRhdGVTdGF0aXN0aWNzRm9yUmVtb3ZlZERhdGFSZWNvcmRzKHByZXZhbGVudFJlc291cmNl
RG9tYWluc1dpdGhEYXRhUmVjb3Jkcyk7Ci0gICAgICAgICAgICAgICAgbV9kYXRhUmVjb3Jkc1Jl
bW92YWxQZW5kaW5nID0gZmFsc2U7Ci0gICAgICAgICAgICB9KTsKKyAgICAgICAgV2ViUHJvY2Vz
c1Byb3h5OjpkZWxldGVXZWJzaXRlRGF0YUZvclRvcFByaXZhdGVseU93bmVkRG9tYWluc0luQWxs
UGVyc2lzdGVudERhdGFTdG9yZXMoZGF0YVR5cGVzVG9SZW1vdmUsIFdURk1vdmUocHJldmFsZW50
UmVzb3VyY2VEb21haW5zKSwgW3RoaXNdKGF1dG8gcHJldmFsZW50UmVzb3VyY2VEb21haW5zV2l0
aERhdGFSZWNvcmRzKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHRoaXMtPmNvcmVTdG9yZSgpLnVw
ZGF0ZVN0YXRpc3RpY3NGb3JSZW1vdmVkRGF0YVJlY29yZHMocHJldmFsZW50UmVzb3VyY2VEb21h
aW5zV2l0aERhdGFSZWNvcmRzKTsKKyAgICAgICAgICAgIG1fZGF0YVJlY29yZHNSZW1vdmFsUGVu
ZGluZyA9IGZhbHNlOwogICAgICAgICB9KTsKICAgICB9KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9y
ZS5jcHAJKHJldmlzaW9uIDIxMTQ0NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJz
aXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDczLDYgKzQ3
MywzOCBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZldGNoRGF0YShPcHRpb25TCiAgICAgY2Fs
bGJhY2tBZ2dyZWdhdG9yLT5jYWxsSWZOZWVkZWQoKTsKIH0KIAordm9pZCBXZWJzaXRlRGF0YVN0
b3JlOjpmZXRjaERhdGFGb3JUb3BQcml2YXRlbHlPd25lZERvbWFpbnMoT3B0aW9uU2V0PFdlYnNp
dGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4g
ZmV0Y2hPcHRpb25zLCBWZWN0b3I8U3RyaW5nPiYmIHRvcFByaXZhdGVseU93bmVkRG9tYWlucywg
c3RkOjpmdW5jdGlvbjx2b2lkKFZlY3RvcjxXZWJzaXRlRGF0YVJlY29yZD4sIFZlY3RvcjxTdHJp
bmc+KT4gY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgZmV0Y2hEYXRhKGRhdGFUeXBlcywgZmV0
Y2hPcHRpb25zLCBbdG9wUHJpdmF0ZWx5T3duZWREb21haW5zID0gV1RGTW92ZSh0b3BQcml2YXRl
bHlPd25lZERvbWFpbnMpLCBjb21wbGV0aW9uSGFuZGxlciwgdGhpc10oYXV0byBleGlzdGluZ0Rh
dGFSZWNvcmRzKSB7CisKKyAgICAgICAgVmVjdG9yPFdlYnNpdGVEYXRhUmVjb3JkPiBtYXRjaGlu
Z0RhdGFSZWNvcmRzOworICAgICAgICBWZWN0b3I8U3RyaW5nPiBkb21haW5zV2l0aERhdGFSZWNv
cmRzOworICAgICAgICBmb3IgKGF1dG8mIGRhdGFSZWNvcmQgOiBleGlzdGluZ0RhdGFSZWNvcmRz
KSB7CisgICAgICAgICAgICBmb3IgKGF1dG8mIGRhdGFSZWNvcmRPcmlnaW5EYXRhIDogZGF0YVJl
Y29yZC5vcmlnaW5zKSB7CisgICAgICAgICAgICAgICAgYm9vbCBkYXRhUmVjb3JkQWRkZWQgPSBm
YWxzZTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgZGF0YVJlY29yZEhvc3QgPSBkYXRhUmVjb3Jk
T3JpZ2luRGF0YS5zZWN1cml0eU9yaWdpbigpLmdldCgpLmhvc3QoKTsKKyAgICAgICAgICAgICAg
ICBmb3IgKGF1dG8mIHRvcFByaXZhdGVseU93bmVkRG9tYWluIDogdG9wUHJpdmF0ZWx5T3duZWRE
b21haW5zKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhUmVjb3JkSG9zdC5lbmRzV2l0
aElnbm9yaW5nQVNDSUlDYXNlKHRvcFByaXZhdGVseU93bmVkRG9tYWluKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgYXV0byBzdWZmaXhTdGFydCA9IGRhdGFSZWNvcmRIb3N0Lmxlbmd0aCgp
IC0gdG9wUHJpdmF0ZWx5T3duZWREb21haW4ubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIXN1ZmZpeFN0YXJ0IHx8IGRhdGFSZWNvcmRIb3N0W3N1ZmZpeFN0YXJ0IC0gMV0g
PT0gJy4nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hpbmdEYXRhUmVjb3Jk
cy5hcHBlbmQoZGF0YVJlY29yZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tYWlu
c1dpdGhEYXRhUmVjb3Jkcy5hcHBlbmQodG9wUHJpdmF0ZWx5T3duZWREb21haW4pOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGFSZWNvcmRBZGRlZCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBp
ZiAoZGF0YVJlY29yZEFkZGVkKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUobWF0
Y2hpbmdEYXRhUmVjb3JkcyksIFdURk1vdmUoZG9tYWluc1dpdGhEYXRhUmVjb3JkcykpOworICAg
IH0pOworCit9CisgICAgCiBzdGF0aWMgUHJvY2Vzc0FjY2Vzc1R5cGUgY29tcHV0ZU5ldHdvcmtQ
cm9jZXNzQWNjZXNzVHlwZUZvckRhdGFSZW1vdmFsKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+
IGRhdGFUeXBlcywgYm9vbCBpc05vblBlcnNpc3RlbnRTdG9yZSkKIHsKICAgICBQcm9jZXNzQWNj
ZXNzVHlwZSBwcm9jZXNzQWNjZXNzVHlwZSA9IFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lOwpAQCAt
OTk4LDYgKzEwMzAsMTYgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9wdGlv
bgogICAgIGNhbGxiYWNrQWdncmVnYXRvci0+Y2FsbElmTmVlZGVkKCk7CiB9CiAKK3ZvaWQgV2Vi
c2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YUZvclRvcFByaXZhdGVseU93bmVkRG9tYWlucyhPcHRp
b25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIE9wdGlvblNldDxXZWJzaXRlRGF0YUZl
dGNoT3B0aW9uPiBmZXRjaE9wdGlvbnMsIFZlY3RvcjxTdHJpbmc+JiYgdG9wUHJpdmF0ZWx5T3du
ZWREb21haW5zLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoVmVjdG9yPFN0cmluZz4gZG9tYWluc1dpdGhE
YXRhUmVjb3Jkc1JlbW92ZWQpPiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBmZXRjaERhdGFG
b3JUb3BQcml2YXRlbHlPd25lZERvbWFpbnMoZGF0YVR5cGVzLCBmZXRjaE9wdGlvbnMsIFdURk1v
dmUodG9wUHJpdmF0ZWx5T3duZWREb21haW5zKSwgW2RhdGFUeXBlcywgY29tcGxldGlvbkhhbmRs
ZXIsIHRoaXNdKGF1dG8gd2Vic2l0ZURhdGFSZWNvcmRzLCBhdXRvIGRvbWFpbnNXaXRoRGF0YVJl
Y29yZHMpIHsKKworICAgICAgICB0aGlzLT5yZW1vdmVEYXRhKGRhdGFUeXBlcywgd2Vic2l0ZURh
dGFSZWNvcmRzLCBbZG9tYWluc1dpdGhEYXRhUmVjb3JkcyA9IFdURk1vdmUoZG9tYWluc1dpdGhE
YXRhUmVjb3JkcyksIGNvbXBsZXRpb25IYW5kbGVyXSgpIHsKKyAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKGRvbWFpbnNXaXRoRGF0YVJlY29yZHMpOworICAgICAgICB9KTsKKyAgICB9KTsK
K30KKwogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjp3ZWJQYWdlV2FzQWRkZWQoV2ViUGFnZVByb3h5
JiB3ZWJQYWdlUHJveHkpCiB7CiAgICAgaWYgKG1fc3RvcmFnZU1hbmFnZXIpCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0
YVN0b3JlLmgJKHJldmlzaW9uIDIxMTQ0NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDggKzgz
LDEwIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBjbG9uZVNlc3Npb25EYXRhKFdlYlBhZ2VQ
cm94eSYgc291cmNlUGFnZSwgV2ViUGFnZVByb3h5JiBuZXdQYWdlKTsKIAogICAgIHZvaWQgZmV0
Y2hEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFG
ZXRjaE9wdGlvbj4sIHN0ZDo6ZnVuY3Rpb248dm9pZCAoVmVjdG9yPFdlYnNpdGVEYXRhUmVjb3Jk
Pik+IGNvbXBsZXRpb25IYW5kbGVyKTsKKyAgICB2b2lkIGZldGNoRGF0YUZvclRvcFByaXZhdGVs
eU93bmVkRG9tYWlucyhPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgT3B0aW9uU2V0PFdlYnNp
dGVEYXRhRmV0Y2hPcHRpb24+LCBWZWN0b3I8U3RyaW5nPiYmIHRvcFByaXZhdGVseU93bmVkRG9t
YWlucywgc3RkOjpmdW5jdGlvbjx2b2lkKFZlY3RvcjxXZWJzaXRlRGF0YVJlY29yZD4sIFZlY3Rv
cjxTdHJpbmc+KT4gY29tcGxldGlvbkhhbmRsZXIpOwogICAgIHZvaWQgcmVtb3ZlRGF0YShPcHRp
b25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9w
b2ludCBtb2RpZmllZFNpbmNlLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGNvbXBsZXRpb25IYW5k
bGVyKTsKICAgICB2b2lkIHJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIGNv
bnN0IFZlY3RvcjxXZWJzaXRlRGF0YVJlY29yZD4mLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGNv
bXBsZXRpb25IYW5kbGVyKTsKKyAgICB2b2lkIHJlbW92ZURhdGFGb3JUb3BQcml2YXRlbHlPd25l
ZERvbWFpbnMoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIE9wdGlvblNldDxXZWJzaXRlRGF0
YUZldGNoT3B0aW9uPiwgVmVjdG9yPFN0cmluZz4mJiB0b3BQcml2YXRlbHlPd25lZERvbWFpbnMs
IHN0ZDo6ZnVuY3Rpb248dm9pZChWZWN0b3I8U3RyaW5nPiBkb21haW5zV2l0aERhdGFSZWNvcmRz
UmVtb3ZlZCk+IGNvbXBsZXRpb25IYW5kbGVyKTsKIAogICAgIFN0b3JhZ2VNYW5hZ2VyKiBzdG9y
YWdlTWFuYWdlcigpIHsgcmV0dXJuIG1fc3RvcmFnZU1hbmFnZXIuZ2V0KCk7IH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>301025</attachid>
            <date>2017-02-09 01:51:11 -0800</date>
            <delta_ts>2017-02-09 12:19:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-167474-20170209014846.patch</filename>
            <type>text/plain</type>
            <size>121233</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMTkzMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc1IEBACisyMDE3LTAyLTA5ICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFVwZGF0ZXMgdG8gUmVzb3Vy
Y2UgTG9hZCBTdGF0aXN0aWNzOiBHZXQgdGhlIHJpZ2h0IHdlYnNpdGUgZGF0YSBzdG9yZSBhbmQg
aW50cm9kdWNlIHRpbWVvdXQgZm9yIHVzZXIgaW50ZXJhY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NzQ3NAorICAgICAgICA8cmRhcjovL3By
b2JsZW0vMjQ2ODE4MDg+CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yNDcwMzI4Nj4KKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzMwMjkwMjcwPgorCisgICAgICAgIFRoaXMgcGF0Y2ggZG9lcyB0
aGUgZm9sbG93aW5nOgorICAgICAgICAxLiBHZXRzIHRoZSByaWdodCB3ZWJzaXRlIGRhdGEgc3Rv
cmUuIEFQSTo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpCisgICAgICAgICAg
ICBkb2VzIG5vdCBwcm92aWRlIHRoZSByaWdodCBkYXRhIHN0b3JlLgorICAgICAgICAyLiBJbnRy
b2R1Y2VzIHRpbWVvdXQgZm9yIHVzZXIgaW50ZXJhY3Rpb24uIEEgZG9tYWluIG5lZWRzIGludGVy
YWN0aW9uIGV2ZXJ5IDMwCisgICAgICAgICAgICBkYXlzIHRvIHN0YXkgaW4gdGhhdCBjYXRlZ29y
eS4KKyAgICAgICAgMy4gQWRkcyBncmFuZGZhdGhlcmVkIHRvIHRoZSBzdGF0aXN0aWNzIG1vZGVs
IGluIHByZXBhcmF0aW9uIGZvciBncmFuZGZhdGhlcmluZyBvZgorICAgICAgICAgICAgZXhpc3Rp
bmcgZGF0YSByZWNvcmRzLgorICAgICAgICA0LiBBZGRzIHRlc3QgaW5mcmFzdHJ1Y3R1cmUgdG8g
YWxsb3cgdGVzdGluZyBvZiB0aGUgdmFyaW91cyBydWxlcyBpbiBwbGFjZSBmb3IKKyAgICAgICAg
ICAgIGRhdGEgcmVjb3JkcyByZW1vdmFsLgorICAgICAgICA1LiBGaXhlcyB2YXJpb3VzIHNtYWxs
ZXIgYnVncyB0aGF0IHdlcmUgZm91bmQgYXMgcGFydCBvZiBzZXR0aW5nIHVwIHRoZSB0ZXN0cy4K
KyAgICAgICAgNi4gUmVncmVzc2VzIHRoZSBkYXRhIHJlY29yZHMgcmVtb3ZhbCBjb3VudGluZy4g
V2UgbmVlZCB0byBjb21lIHVwIHdpdGggYSB0aHJlYWQKKyAgICAgICAgICAgIHNhZmUgd2F5IG9m
IGdhdGhlcmluZyByZW1vdmFsIHN0YXRpc3RpY3MgZnJvbSBtb3JlIHRoYW4gb25lIGRhdGEgc3Rv
cmUgbm93CisgICAgICAgICAgICB0aGF0IHdlIHBvdGVudGlhbGx5IGludGVyYWN0IHdpdGggbXVs
dGlwbGUgc3RvcmVzLgorICAgICAgICA3LiBBZGRzIGEgZmlyc3Qgc2V0IG9mIGxheW91dCB0ZXN0
cyBmb3IgcmVzb3VyY2UgbG9hZCBzdGF0aXN0aWNzLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzOiBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcy9ub24tcHJldmFsZW50LXJlc291cmNlLXdpdGgtdXNlci1pbnRlcmFj
dGlvbi5odG1sCisgICAgICAgICAgICAgICBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2Fk
U3RhdGlzdGljcy9ub24tcHJldmFsZW50LXJlc291cmNlLXdpdGhvdXQtdXNlci1pbnRlcmFjdGlv
bi5odG1sCisgICAgICAgICAgICAgICBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3Rh
dGlzdGljcy9wcmV2YWxlbnQtcmVzb3VyY2Utd2l0aC11c2VyLWludGVyYWN0aW9uLXRpbWVvdXQu
aHRtbAorICAgICAgICAgICAgICAgaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRp
c3RpY3MvcHJldmFsZW50LXJlc291cmNlLXdpdGgtdXNlci1pbnRlcmFjdGlvbi5odG1sCisgICAg
ICAgICAgICAgICBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wcmV2
YWxlbnQtcmVzb3VyY2Utd2l0aG91dC11c2VyLWludGVyYWN0aW9uLmh0bWwKKworICAgICAgICAq
IGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dXBkYXRlTGFz
dEhhbmRsZWRVc2VyR2VzdHVyZVRpbWVzdGFtcCk6CisgICAgICAgICAgICBUaGlzIG5vdyBjYWxs
cyBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nVXNlckludGVyYWN0aW9uKCkgZXZlcnkgdGltZSBz
aW5jZQorICAgICAgICAgICAgd2Ugd2FudCB0byBrZWVwIHRyYWNrIG9mIHRoZSBtb3N0IHJlY2Vu
dCB1c2VyIGludGVyYWN0aW9uLgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c3RhdGlzdGlj
c1N0b3JlKToKKyAgICAgICAgICAgIE5ldyBnZXR0ZXIgdXNlZCBieSBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWFuYWdlcjo6cmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSgpLgorICAgICAgICAoV2Vi
Q29yZTo6cmVkdWNlVGltZVJlc29sdXRpb25Ub09uZURheSk6CisgICAgICAgICAgICBDb252ZW5p
ZW5jZSBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjps
b2dVc2VySW50ZXJhY3Rpb25XaXRoUmVkdWNlZFRpbWVSZXNvbHV0aW9uKToKKyAgICAgICAgICAg
IFJlZHVjZXMgdGltZSByZXNvbHV0aW9uIGZvciBwcml2YWN5IHJlYXNvbnMuCisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nVXNlckludGVyYWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpjbGVhclVzZXJJbnRlcmFjdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6aGFzSGFkVXNlckludGVy
YWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpzZXRQcmV2
YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
aXNQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVy
KToKKyAgICAgICAgICAgIE5ldyBmdW5jdGlvbnMgdGhhdCBhbGxvdyBXZWJLaXRUZXN0UnVubmVy
IHRvIHN0YWdlIGV4YWN0CisgICAgICAgICAgICBzdGF0aXN0aWNzLCBmaXJlIHRoZSBoYW5kbGVy
LCBhbmQgdGVzdCB0aGUgb3V0Y29tZS4KKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXIuaDoKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjplbmNvZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljczo6ZGVjb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M6Om1lcmdlKToKKyAgICAgICAgICAgIFN1cHBvcnQg
Zm9yIHN0YXRpc3RpY3MgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiwgZ3JhbmRmYXRoZXJlZCwg
YW5kCisgICAgICAgICAgICBkYXRhUmVjb3Jkc1JlbW92ZWQuCisgICAgICAgICogbG9hZGVyL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3MuaDoKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgICAgICBOZXcg
ZnVuY3Rpb24gdGhhdCBhbGxvd3MgV2ViS2l0VGVzdFJ1bm5lciB0byB0ZXN0IAorICAgICAgICAg
ICAgYWdpbmcgb3V0IG9mIHVzZXIgaW50ZXJhY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omhhc0hhZFJlY2VudFVzZXJJbnRlcmFjdGlvbik6Cisg
ICAgICAgICAgICBOb3cgdGFrZXMgaW50byBhY2NvdW50IHRoZSB0aW1lc3RhbXAgYW5kIGFnZXMK
KyAgICAgICAgICAgIG91dCB1c2VyIGludGVyYWN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnNXaXRob3V0
VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgICAgIE5vdyBtYWtlcyB1c2Ugb2YgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpoYXNIYWRSZWNlbnRVc2VySW50ZXJhY3Rpb24oKS4KKyAgICAg
ICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmg6CisKIDIwMTctMDItMDgg
IFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgUHV0IG5h
bWVzIG9uIG1vcmUgVUlWaWV3cyBmb3IgZWFzZSBvZiBkZWJ1Z2dpbmcKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmNwcAkocmV2aXNpb24gMjExOTMxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjM3MSwxMCArNjM3MSw4IEBAIERvY3VtZW50
OjpSZWdpb25GaXhlZFBhaXIgRG9jdW1lbnQ6OmFic28KIAogdm9pZCBEb2N1bWVudDo6dXBkYXRl
TGFzdEhhbmRsZWRVc2VyR2VzdHVyZVRpbWVzdGFtcCgpCiB7Ci0gICAgaWYgKCFtX2xhc3RIYW5k
bGVkVXNlckdlc3R1cmVUaW1lc3RhbXApCi0gICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWRPYnNlcnZlcigpLmxvZ1VzZXJJbnRlcmFjdGlvbigqdGhpcyk7Ci0KICAgICBtX2xhc3RI
YW5kbGVkVXNlckdlc3R1cmVUaW1lc3RhbXAgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUo
KTsKKyAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5sb2dVc2VySW50
ZXJhY3Rpb25XaXRoUmVkdWNlZFRpbWVSZXNvbHV0aW9uKCp0aGlzKTsKIH0KIAogdm9pZCBEb2N1
bWVudDo6c3RhcnRUcmFja2luZ1N0eWxlUmVjYWxjcygpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAJKHJldmlzaW9uIDIxMTkzMSkKKysr
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNDIsMTcgKzQyLDI3IEBACiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJT
aGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlICJVUkwuaCIKKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRp
bWUuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorLy8gT25lIGRheSBp
biBzZWNvbmRzLgorc3RhdGljIGF1dG8gdGltZXN0YW1wUmVzb2x1dGlvbiA9IDg2NDAwOworCiBS
ZXNvdXJjZUxvYWRPYnNlcnZlciYgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZE9ic2VydmVy
KCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVzb3VyY2VMb2FkT2JzZXJ2ZXI+IHJl
c291cmNlTG9hZE9ic2VydmVyOwogICAgIHJldHVybiByZXNvdXJjZUxvYWRPYnNlcnZlcjsKIH0K
IAorUmVmUHRyPFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4gUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnN0YXRpc3RpY3NTdG9yZSgpCit7CisgICAgLy8gTWF5IGJlIG51bGwKKyAgICByZXR1cm4g
bV9zdG9yZTsKK30KKwogdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2V0U3RhdGlzdGljc1N0
b3JlKFJlZjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+JiYgc3RvcmUpCiB7CiAgICAgbV9z
dG9yZSA9IFdURk1vdmUoc3RvcmUpOwpAQCAtMjc4LDcgKzI4OCwxMiBAQCB2b2lkIFJlc291cmNl
TG9hZE9ic2VydmVyOjpsb2dXZWJTb2NrZXRMCiAgICAgICAgIG1fc3RvcmUtPmZpcmVEYXRhTW9k
aWZpY2F0aW9uSGFuZGxlcigpOwogfQogCi12b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dV
c2VySW50ZXJhY3Rpb24oY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KQorc3RhdGljIGRvdWJsZSBy
ZWR1Y2VUaW1lUmVzb2x1dGlvblRvT25lRGF5KGRvdWJsZSBzZWNvbmRzKQoreworICAgIHJldHVy
biBzdGQ6OmZsb29yKHNlY29uZHMgLyB0aW1lc3RhbXBSZXNvbHV0aW9uKSAqIHRpbWVzdGFtcFJl
c29sdXRpb247Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1VzZXJJbnRlcmFj
dGlvbldpdGhSZWR1Y2VkVGltZVJlc29sdXRpb24oY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KQog
ewogICAgIEFTU0VSVChkb2N1bWVudC5wYWdlKCkpOwogCkBAIC0yODYsMTUgKzMwMSw4OSBAQCB2
b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dVc2VySW50ZXJhCiAgICAgICAgIHJldHVybjsK
IAogICAgIGF1dG8mIHVybCA9IGRvY3VtZW50LnVybCgpOworICAgIGlmICh1cmwuaXNCbGFua1VS
TCgpIHx8IHVybC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBhdXRvJiBz
dGF0aXN0aWNzID0gbV9zdG9yZS0+ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURv
bWFpbihwcmltYXJ5RG9tYWluKHVybCkpOworICAgIGRvdWJsZSBuZXdUaW1lc3RhbXAgPSByZWR1
Y2VUaW1lUmVzb2x1dGlvblRvT25lRGF5KFdURjo6Y3VycmVudFRpbWUoKSk7CisgICAgaWYgKG5l
d1RpbWVzdGFtcCAhPSBzdGF0aXN0aWNzLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24pIHsKKyAg
ICAgICAgc3RhdGlzdGljcy5oYWRVc2VySW50ZXJhY3Rpb24gPSB0cnVlOworICAgICAgICBzdGF0
aXN0aWNzLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24gPSBuZXdUaW1lc3RhbXA7CisgICAgICAg
IG1fc3RvcmUtPmZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOworICAgIH0KK30KIAordm9p
ZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCB1cmwp
Cit7CiAgICAgaWYgKHVybC5pc0JsYW5rVVJMKCkgfHwgdXJsLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgYXV0byYgc3RhdGlzdGljcyA9IG1fc3RvcmUtPmVuc3VyZVJlc291cmNl
U3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJpbWFyeURvbWFpbih1cmwpKTsKICAgICBzdGF0
aXN0aWNzLmhhZFVzZXJJbnRlcmFjdGlvbiA9IHRydWU7Ci0gICAgbV9zdG9yZS0+ZmlyZURhdGFN
b2RpZmljYXRpb25IYW5kbGVyKCk7CisgICAgc3RhdGlzdGljcy5tb3N0UmVjZW50VXNlckludGVy
YWN0aW9uID0gV1RGOjpjdXJyZW50VGltZSgpOwogfQorCit2b2lkIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwgdXJsKQoreworICAgIGlmICh1cmwu
aXNCbGFua1VSTCgpIHx8IHVybC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBhdXRvJiBzdGF0aXN0aWNzID0gbV9zdG9yZS0+ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9y
UHJpbWFyeURvbWFpbihwcmltYXJ5RG9tYWluKHVybCkpOworICAgIAorICAgIHN0YXRpc3RpY3Mu
aGFkVXNlckludGVyYWN0aW9uID0gZmFsc2U7CisgICAgc3RhdGlzdGljcy5tb3N0UmVjZW50VXNl
ckludGVyYWN0aW9uID0gMDsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6aGFzSGFk
VXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCB1cmwpCit7CisgICAgaWYgKHVybC5pc0JsYW5rVVJM
KCkgfHwgdXJsLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAorICAgIGF1
dG8mIHN0YXRpc3RpY3MgPSBtX3N0b3JlLT5lbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmlt
YXJ5RG9tYWluKHByaW1hcnlEb21haW4odXJsKSk7CisgICAgCisgICAgcmV0dXJuIG1fc3RvcmUt
Pmhhc0hhZFJlY2VudFVzZXJJbnRlcmFjdGlvbihzdGF0aXN0aWNzKTsKK30KKwordm9pZCBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMIHVybCkKK3sK
KyAgICBpZiAodXJsLmlzQmxhbmtVUkwoKSB8fCB1cmwuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgYXV0byYgc3RhdGlzdGljcyA9IG1fc3RvcmUtPmVuc3VyZVJlc291cmNl
U3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJpbWFyeURvbWFpbih1cmwpKTsKKyAgICAKKyAg
ICBzdGF0aXN0aWNzLmlzUHJldmFsZW50UmVzb3VyY2UgPSB0cnVlOworfQorCitib29sIFJlc291
cmNlTG9hZE9ic2VydmVyOjppc1ByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCB1cmwpCit7Cisg
ICAgaWYgKHVybC5pc0JsYW5rVVJMKCkgfHwgdXJsLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIAorICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBtX3N0b3JlLT5lbnN1cmVSZXNv
dXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1hcnlEb21haW4odXJsKSk7CisgICAg
CisgICAgcmV0dXJuIHN0YXRpc3RpY3MuaXNQcmV2YWxlbnRSZXNvdXJjZTsKK30KKyAgICAKK3Zv
aWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJM
IHVybCkKK3sKKyAgICBpZiAodXJsLmlzQmxhbmtVUkwoKSB8fCB1cmwuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgYXV0byYgc3RhdGlzdGljcyA9IG1fc3RvcmUtPmVuc3Vy
ZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJpbWFyeURvbWFpbih1cmwpKTsK
KyAgICAKKyAgICBzdGF0aXN0aWNzLmlzUHJldmFsZW50UmVzb3VyY2UgPSBmYWxzZTsKK30KKwor
dm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihk
b3VibGUgc2Vjb25kcykKK3sKKyAgICBtX3N0b3JlLT5zZXRUaW1lVG9MaXZlVXNlckludGVyYWN0
aW9uKHNlY29uZHMpOworfQorCit2b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpmaXJlRGF0YU1v
ZGlmaWNhdGlvbkhhbmRsZXIoKQoreworICAgIG1fc3RvcmUtPmZpcmVEYXRhTW9kaWZpY2F0aW9u
SGFuZGxlcigpOworfQorCiBTdHJpbmcgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnByaW1hcnlEb21h
aW4oY29uc3QgVVJMJiB1cmwpCiB7CiAgICAgU3RyaW5nIHByaW1hcnlEb21haW47CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaAkocmV2aXNpb24g
MjExOTMxKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAxNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC00OCw5ICs0OCwyMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBsb2dGcmFt
ZU5hdmlnYXRpb24oY29uc3QgRnJhbWUmIGZyYW1lLCBjb25zdCBGcmFtZSYgdG9wRnJhbWUsIGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgbmV3UmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYg
cmVkaXJlY3RSZXNwb25zZSk7CiAgICAgdm9pZCBsb2dTdWJyZXNvdXJjZUxvYWRpbmcoY29uc3Qg
RnJhbWUqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIG5ld1JlcXVlc3QsIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpOwogICAgIHZvaWQgbG9nV2ViU29ja2V0TG9hZGlu
Zyhjb25zdCBGcmFtZSosIGNvbnN0IFVSTCYpOworICAgIHZvaWQgbG9nVXNlckludGVyYWN0aW9u
V2l0aFJlZHVjZWRUaW1lUmVzb2x1dGlvbihjb25zdCBEb2N1bWVudCYpOwogCi0gICAgdm9pZCBs
b2dVc2VySW50ZXJhY3Rpb24oY29uc3QgRG9jdW1lbnQmKTsKLSAgICAKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwpOworICAgIFdFQkNPUkVfRVhQ
T1JUIGJvb2wgaGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCk7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwpOworCisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwpOworICAgIFdFQkNP
UkVfRVhQT1JUIGJvb2wgaXNQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwpOworICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgY2xlYXJQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwpOworCisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKGRvdWJsZSBz
ZWNvbmRzKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFJlZHVjZWRUaW1lc3RhbXBSZXNv
bHV0aW9uKGRvdWJsZSBzZWNvbmRzKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlyZURh
dGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiBzdGF0aXN0aWNzU3RvcmUoKTsKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNldFN0YXRpc3RpY3NTdG9yZShSZWY8UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlPiYmKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzdGF0aXN0aWNzRm9yT3Jp
Z2luKGNvbnN0IFN0cmluZyYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNl
TG9hZFN0YXRpc3RpY3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmNwcAkocmV2aXNpb24gMjExOTMxKQorKysgU291cmNlL1dl
YkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NTEsNiArNTEsOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3M6OmVuY29kZShLZXllCiAg
ICAgCiAgICAgLy8gVXNlciBpbnRlcmFjdGlvbgogICAgIGVuY29kZXIuZW5jb2RlQm9vbCgiaGFk
VXNlckludGVyYWN0aW9uIiwgaGFkVXNlckludGVyYWN0aW9uKTsKKyAgICBlbmNvZGVyLmVuY29k
ZURvdWJsZSgibW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiIsIG1vc3RSZWNlbnRVc2VySW50ZXJh
Y3Rpb24pOworICAgIGVuY29kZXIuZW5jb2RlQm9vbCgiZ3JhbmRmYXRoZXJlZCIsIGdyYW5kZmF0
aGVyZWQpOwogICAgIAogICAgIC8vIFRvcCBmcmFtZSBzdGF0cwogICAgIGVuY29kZXIuZW5jb2Rl
Qm9vbCgidG9wRnJhbWVIYXNCZWVuTmF2aWdhdGVkVG9CZWZvcmUiLCB0b3BGcmFtZUhhc0JlZW5O
YXZpZ2F0ZWRUb0JlZm9yZSk7CkBAIC0xNzcsNyArMTc5LDE2IEBAIGJvb2wgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljczo6ZGVjb2RlKEtleWUKIAogICAgIGlmICghZGVjb2Rlci5kZWNvZGVVSW50MzIo
ImRhdGFSZWNvcmRzUmVtb3ZlZCIsIGRhdGFSZWNvcmRzUmVtb3ZlZCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAKKworICAgIGlmICh2ZXJzaW9uIDwgMykKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRG91YmxlKCJtb3N0UmVjZW50VXNlckludGVy
YWN0aW9uIiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbikpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGVCb29sKCJncmFuZGZhdGhlcmVkIiwgZ3JhbmRm
YXRoZXJlZCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIHJldHVybiB0cnVlOwogfQog
CkBAIC0yMTQsNiArMjI1LDExIEBAIFN0cmluZyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjp0b1N0
cmluZygKICAgICAvLyBVc2VyIGludGVyYWN0aW9uCiAgICAgYXBwZW5kQm9vbGVhbihidWlsZGVy
LCAiaGFkVXNlckludGVyYWN0aW9uIiwgaGFkVXNlckludGVyYWN0aW9uKTsKICAgICBidWlsZGVy
LmFwcGVuZCgnXG4nKTsKKyAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiAgICBtb3N0UmVjZW50
VXNlckludGVyYWN0aW9uOiAiKTsKKyAgICBidWlsZGVyLmFwcGVuZE51bWJlcihtb3N0UmVjZW50
VXNlckludGVyYWN0aW9uKTsKKyAgICBidWlsZGVyLmFwcGVuZCgnXG4nKTsKKyAgICBhcHBlbmRC
b29sZWFuKGJ1aWxkZXIsICIgICAgZ3JhbmRmYXRoZXJlZCIsIGdyYW5kZmF0aGVyZWQpOworICAg
IGJ1aWxkZXIuYXBwZW5kKCdcbicpOwogICAgIAogICAgIC8vIFRvcCBmcmFtZSBzdGF0cwogICAg
IGFwcGVuZEJvb2xlYW4oYnVpbGRlciwgInRvcEZyYW1lSGFzQmVlbk5hdmlnYXRlZFRvQmVmb3Jl
IiwgdG9wRnJhbWVIYXNCZWVuTmF2aWdhdGVkVG9CZWZvcmUpOwpAQCAtMjk0LDcgKzMxMCwxOSBA
QCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3M6Om1lcmdlKGNvbnN0CiB7CiAgICAgQVNTRVJU
KG90aGVyLmhpZ2hMZXZlbERvbWFpbiA9PSBoaWdoTGV2ZWxEb21haW4pOwogCi0gICAgaGFkVXNl
ckludGVyYWN0aW9uIHw9IG90aGVyLmhhZFVzZXJJbnRlcmFjdGlvbjsKKyAgICBpZiAoIW90aGVy
LmhhZFVzZXJJbnRlcmFjdGlvbikgeworICAgICAgICAvLyBJZiB1c2VyIGludGVyYWN0aW9uIGhh
cyBiZWVuIHJlc2V0IGRvIHNvIGhlcmUgdG9vLgorICAgICAgICAvLyBFbHNlLCBkbyBub3RoaW5n
LgorICAgICAgICBpZiAob3RoZXIubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiA9PSAwLjApIHsK
KyAgICAgICAgICAgIGhhZFVzZXJJbnRlcmFjdGlvbiA9IGZhbHNlOworICAgICAgICAgICAgbW9z
dFJlY2VudFVzZXJJbnRlcmFjdGlvbiA9IDAuMDsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7Cisg
ICAgICAgIGhhZFVzZXJJbnRlcmFjdGlvbiA9IHRydWU7CisgICAgICAgIGlmIChtb3N0UmVjZW50
VXNlckludGVyYWN0aW9uIDwgb3RoZXIubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbikKKyAgICAg
ICAgICAgIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24gPSBvdGhlci5tb3N0UmVjZW50VXNlcklu
dGVyYWN0aW9uOworICAgIH0KKyAgICBncmFuZGZhdGhlcmVkIHw9IG90aGVyLmdyYW5kZmF0aGVy
ZWQ7CiAgICAgCiAgICAgLy8gVG9wIGZyYW1lIHN0YXRzCiAgICAgdG9wRnJhbWVIYXNCZWVuUmVk
aXJlY3RlZFRvICs9IG90aGVyLnRvcEZyYW1lSGFzQmVlblJlZGlyZWN0ZWRUbzsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuaAkocmV2aXNp
b24gMjExOTMxKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3MuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDE3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDcgKzUzLDEwIEBAIHN0cnVjdCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzIHsKIAogICAgIC8vIFVzZXIgaW50ZXJhY3Rpb24KICAgICBib29sIGhhZFVzZXJJ
bnRlcmFjdGlvbiB7IGZhbHNlIH07Ci0gICAgCisgICAgLy8gVGltZXN0YW1wLiBEZWZhdWx0IHZh
bHVlIGlzIG5lZ2F0aXZlLCAwLjAgbWVhbnMgaXQgd2FzIHJlc2V0LgorICAgIGRvdWJsZSBtb3N0
UmVjZW50VXNlckludGVyYWN0aW9uIHsgLTEuMCB9OworICAgIGJvb2wgZ3JhbmRmYXRoZXJlZCB7
IGZhbHNlIH07CisKICAgICAvLyBUb3AgZnJhbWUgc3RhdHMKICAgICB1bnNpZ25lZCB0b3BGcmFt
ZUhhc0JlZW5SZWRpcmVjdGVkVG8geyAwIH07CiAgICAgdW5zaWduZWQgdG9wRnJhbWVIYXNCZWVu
UmVkaXJlY3RlZEZyb20geyAwIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAkocmV2aXNpb24gMjExOTMxKQor
KysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzMsMTEgKzMzLDE0IEBACiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcy5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUgIlVSTC5oIgor
I2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3ll
ZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBjb25zdCBhdXRvIHN0YXRpc3Rp
Y3NNb2RlbFZlcnNpb24gPSAyOworc3RhdGljIGNvbnN0IGF1dG8gc3RhdGlzdGljc01vZGVsVmVy
c2lvbiA9IDM7CisvLyAzMCBkYXlzIGluIHNlY29uZHMKK3N0YXRpYyBhdXRvIHRpbWVUb0xpdmVV
c2VySW50ZXJhY3Rpb24gPSAyNTkyMDAwOwogCiBSZWY8UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNyZWF0ZSgpCiB7CkBAIC0xNDQsMTcg
KzE0Nyw0MCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZmlyZURhCiAgICAg
ICAgIG1fZGF0YUFkZGVkSGFuZGxlcigpOwogfQogCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihkb3VibGUgc2Vjb25kcykKK3sK
KyAgICBpZiAoc2Vjb25kcyA+PSAwKQorICAgICAgICB0aW1lVG9MaXZlVXNlckludGVyYWN0aW9u
ID0gc2Vjb25kczsKK30KKwogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnByb2Nl
c3NTdGF0aXN0aWNzKHN0ZDo6ZnVuY3Rpb248dm9pZChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik+
JiYgcHJvY2Vzc0Z1bmN0aW9uKQogewogICAgIGZvciAoYXV0byYgcmVzb3VyY2VTdGF0aXN0aWMg
OiBtX3Jlc291cmNlU3RhdGlzdGljc01hcC52YWx1ZXMoKSkKICAgICAgICAgcHJvY2Vzc0Z1bmN0
aW9uKHJlc291cmNlU3RhdGlzdGljKTsKIH0KIAorYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6Omhhc0hhZFJlY2VudFVzZXJJbnRlcmFjdGlvbihSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
JiByZXNvdXJjZVN0YXRpc3RpYykKK3sKKyAgICBpZiAoIXJlc291cmNlU3RhdGlzdGljLmhhZFVz
ZXJJbnRlcmFjdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGN1cnJlbnRU
aW1lKCkgPiAocmVzb3VyY2VTdGF0aXN0aWMubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiArIHRp
bWVUb0xpdmVVc2VySW50ZXJhY3Rpb24pKSB7CisgICAgICAgIC8vIERyb3AgcHJpdmFjeSBzZW5z
aXRpdmUgZGF0YSBiZWNhdXNlIHdlIG5vIGxvbmdlciBuZWVkIGl0LgorICAgICAgICAvLyBTZXQg
dGltZXN0YW1wIHRvIDAuMCBzbyB0aGF0IHN0YXRpc3RpY3MgbWVyZ2Ugd2lsbCBrbm93CisgICAg
ICAgIC8vIGl0IGhhcyBiZWVuIHJlc2V0IGFzIG9wcG9zZWQgdG8gaXRzIGRlZmF1bHQgLTEuMC4K
KyAgICAgICAgcmVzb3VyY2VTdGF0aXN0aWMubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiA9IDAu
MDsKKyAgICAgICAgcmVzb3VyY2VTdGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uID0gZmFsc2U7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwog
VmVjdG9yPFN0cmluZz4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcmV2YWxlbnRSZXNv
dXJjZURvbWFpbnNXaXRob3V0VXNlckludGVyYWN0aW9uKCkKIHsKICAgICBWZWN0b3I8U3RyaW5n
PiBwcmV2YWxlbnRSZXNvdXJjZXM7CiAgICAgZm9yIChhdXRvJiByZXNvdXJjZVN0YXRpc3RpYyA6
IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmIChyZXNvdXJj
ZVN0YXRpc3RpYy5pc1ByZXZhbGVudFJlc291cmNlICYmICFyZXNvdXJjZVN0YXRpc3RpYy5oYWRV
c2VySW50ZXJhY3Rpb24pCisgICAgICAgIGlmIChyZXNvdXJjZVN0YXRpc3RpYy5pc1ByZXZhbGVu
dFJlc291cmNlICYmICFoYXNIYWRSZWNlbnRVc2VySW50ZXJhY3Rpb24ocmVzb3VyY2VTdGF0aXN0
aWMpKQogICAgICAgICAgICAgcHJldmFsZW50UmVzb3VyY2VzLmFwcGVuZChyZXNvdXJjZVN0YXRp
c3RpYy5oaWdoTGV2ZWxEb21haW4pOwogICAgIH0KICAgICByZXR1cm4gcHJldmFsZW50UmVzb3Vy
Y2VzOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUuaAkocmV2aXNpb24gMjExOTMxKQorKysgU291cmNlL1dlYkNvcmUvbG9h
ZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTksOSAr
NTksMTEgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Tm90aWZpY2F0aW9u
Q2FsbGJhY2soc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGhhbmRsZXIpOwogCiAgICAgdm9pZCBmaXJl
RGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKKyAgICB2b2lkIHNldFRpbWVUb0xpdmVVc2VySW50
ZXJhY3Rpb24oZG91YmxlIHNlY29uZHMpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwcm9j
ZXNzU3RhdGlzdGljcyhzdGQ6OmZ1bmN0aW9uPHZvaWQoUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYp
PiYmKTsKIAorICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaGFzSGFkUmVjZW50VXNlckludGVyYWN0
aW9uKFJlc291cmNlTG9hZFN0YXRpc3RpY3MmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8
U3RyaW5nPiBwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnNXaXRob3V0VXNlckludGVyYWN0aW9uKCk7
CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB1cGRhdGVTdGF0aXN0aWNzRm9yUmVtb3ZlZERhdGFS
ZWNvcmRzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMpOwog
cHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMTkzMSkKKysrIFNvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMSBAQAorMjAxNy0wMi0w
OSAgSm9obiBXaWxhbmRlciAgPHdpbGFuZGVyQGFwcGxlLmNvbT4KKworICAgICAgICBVcGRhdGVz
IHRvIFJlc291cmNlIExvYWQgU3RhdGlzdGljczogR2V0IHRoZSByaWdodCB3ZWJzaXRlIGRhdGEg
c3RvcmUgYW5kIGludHJvZHVjZSB0aW1lb3V0IGZvciB1c2VyIGludGVyYWN0aW9uCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjc0NzQKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzI0NjgxODA4PgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjQ3MDMy
ODY+CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMDI5MDI3MD4KKworICAgICAgICBUaGlzIHBh
dGNoIGRvZXMgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgMS4gR2V0cyB0aGUgcmlnaHQgd2Vic2l0
ZSBkYXRhIHN0b3JlLiBBUEk6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKQor
ICAgICAgICAgICAgZG9lcyBub3QgcHJvdmlkZSB0aGUgcmlnaHQgZGF0YSBzdG9yZS4KKyAgICAg
ICAgMi4gSW50cm9kdWNlcyB0aW1lb3V0IGZvciB1c2VyIGludGVyYWN0aW9uLiBBIGRvbWFpbiBu
ZWVkcyBpbnRlcmFjdGlvbiBldmVyeSAzMAorICAgICAgICAgICAgZGF5cyB0byBzdGF5IGluIHRo
YXQgY2F0ZWdvcnkuCisgICAgICAgIDMuIEFkZHMgZ3JhbmRmYXRoZXJlZCB0byB0aGUgc3RhdGlz
dGljcyBtb2RlbCBpbiBwcmVwYXJhdGlvbiBmb3IgZ3JhbmRmYXRoZXJpbmcgb2YKKyAgICAgICAg
ICAgIGV4aXN0aW5nIGRhdGEgcmVjb3Jkcy4KKyAgICAgICAgNC4gQWRkcyB0ZXN0IGluZnJhc3Ry
dWN0dXJlIHRvIGFsbG93IHRlc3Rpbmcgb2YgdGhlIHZhcmlvdXMgcnVsZXMgaW4gcGxhY2UgZm9y
CisgICAgICAgICAgICBkYXRhIHJlY29yZHMgcmVtb3ZhbC4KKyAgICAgICAgNS4gRml4ZXMgdmFy
aW91cyBzbWFsbGVyIGJ1Z3MgdGhhdCB3ZXJlIGZvdW5kIGFzIHBhcnQgb2Ygc2V0dGluZyB1cCB0
aGUgdGVzdHMuCisgICAgICAgIDYuIFJlZ3Jlc3NlcyB0aGUgZGF0YSByZWNvcmRzIHJlbW92YWwg
Y291bnRpbmcuIFdlIG5lZWQgdG8gY29tZSB1cCB3aXRoIGEgdGhyZWFkCisgICAgICAgICAgICBz
YWZlIHdheSBvZiBnYXRoZXJpbmcgcmVtb3ZhbCBzdGF0aXN0aWNzIGZyb20gbW9yZSB0aGFuIG9u
ZSBkYXRhIHN0b3JlIG5vdworICAgICAgICAgICAgdGhhdCB3ZSBwb3RlbnRpYWxseSBpbnRlcmFj
dCB3aXRoIG11bHRpcGxlIHN0b3Jlcy4KKyAgICAgICAgNy4gQWRkcyBhIGZpcnN0IHNldCBvZiBs
YXlvdXQgdGVzdHMgZm9yIHJlc291cmNlIGxvYWQgc3RhdGlzdGljcy4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNoYXJlZC9BUEkvQVBJT2JqZWN0
Lmg6CisgICAgICAgICAgICBBZGRzIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyIHRv
IHRoZSBUeXBlIGVudW0uCisgICAgICAgICogU2hhcmVkL0FQSS9jL1dLQmFzZS5oOgorICAgICAg
ICAgICAgVHlwZWRlZiBvZiBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyUmVmLgorICAg
ICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwOgorICAgICAgICAoSVBDOjpB
cmd1bWVudENvZGVyPFJlc291cmNlTG9hZFN0YXRpc3RpY3M+OjplbmNvZGUpOgorICAgICAgICAo
SVBDOjpBcmd1bWVudENvZGVyPFJlc291cmNlTG9hZFN0YXRpc3RpY3M+OjpkZWNvZGUpOgorICAg
ICAgICAgICAgQWRkcyBzdXBwb3J0IGZvciBzdGF0aXN0aWNzIG1vc3RSZWNlbnRVc2VySW50ZXJh
Y3Rpb24sIGdyYW5kZmF0aGVyZWQsIGFuZAorICAgICAgICAgICAgZGF0YVJlY29yZHNSZW1vdmVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0FQSUNhc3QuaDoKKyAgICAgICAgICAgIEFk
ZHMgQVBJIG1hcHBpbmcgYmV0d2VlbiBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyUmVm
IGFuZCAKKyAgICAgICAgICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNw
cDogQWRkZWQuCisgICAgICAgIChXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyR2V0VHlw
ZUlEKToKKyAgICAgICAgKFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXRQcmV2YWxl
bnRSZXNvdXJjZSk6CisgICAgICAgIChXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VySXNQ
cmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5h
Z2VyU2V0SGFzSGFkVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdLUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01hbmFnZXJJc0hhc0hhZFVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXS1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbik6Cisg
ICAgICAgIChXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyRmlyZURhdGFNb2RpZmljYXRp
b25IYW5kbGVyKToKKyAgICAgICAgKFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXRO
b3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKToKKyAgICAgICAgKFdLUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURh
dGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAgIChXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5h
Z2VyU2V0TWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAgIChX
S1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSk6Cisg
ICAgICAgICAgICBBUEkgbGV2ZWwgYnJpZGdlIHRvIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NN
YW5hZ2VyIGZ1bmN0aW9ucy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWFuYWdlci5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJv
Y2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpkZWxldGVX
ZWJzaXRlRGF0YUZvclRvcFByaXZhdGVseU93bmVkRG9tYWluc0luQWxsUGVyc2lzdGVudERhdGFT
dG9yZXMpOgorICAgICAgICAgICAgQSB3YXkgdG8gZGVsZXRlIHdlYnNpdGUgZGF0YSBpbiBwZXJz
aXN0ZW50IHN0b3JlKHMpIGNvbmZpZ3VyZWQgYnkgdGhlIAorICAgICAgICAgICAgZW1iZWRkaW5n
IGNsaWVudC4gQVBJOjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkgZG9lcyBu
b3QgCisgICAgICAgICAgICBkbyB0aGlzIHdoaWNoIGNhdXNlZCB1cyB0byBza2lwIHNlc3Npb24g
c3RvcmFnZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAg
ICogVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXRQ
cmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NNYW5hZ2VyOjppc1ByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNldEhhc0hhZFVzZXJJbnRlcmFjdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpoYXNI
YWRVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWFuYWdlcjo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChX
ZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpmaXJlRGF0YU1vZGlmaWNh
dGlvbkhhbmRsZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWFuYWdlcjo6c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXRTaG91bGRD
bGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXRNaW5pbXVtVGltZUJldHdl
ZWVuRGF0YVJlY29yZHNSZW1vdmFsKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01hbmFnZXI6OnJlc2V0VG9Db25zaXN0ZW50U3RhdGUpOgorICAgICAgICAgICAg
U3RhdGljIGZ1bmN0aW9ucyB0byBtYW5hZ2UgdGhlIHN0YXRlIGFuZCBiZWhhdmlvciBvZiB0aGUg
VUkgcHJvY2VzcycgCisgICAgICAgICAgICByZXNvdXJjZSBsb2FkIHN0YXRpc3RpY3Mgc3RvcmUu
CisgICAgICAgICogVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmg6
IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdl
cjo6Y3JlYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUpOgorICAgICAgICAgICAgQW4gZWZm
ZWN0IG9mIGEgbWVtYmVyIHZhcmlhYmxlIHJlbmFtZS4gU2VlIGhlYWRlciBmaWxlIGNvbW1lbnQg
YmVsb3cuCisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNv
dXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldE1pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jk
c1JlbW92YWwpOgorICAgICAgICAgICAgVGhyZWUgc3RhdGljIGZ1bmN0aW9ucyBmb3IgY29udHJv
bGxpbmcgdGhlIGJlaGF2aW9yIG9mIHRoZSBzdG9yZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZW1vdmVEYXRhUmVjb3Jkcyk6CisgICAgICAgICAg
ICBDaGFuZ2VzOgorICAgICAgICAgICAgMS4gQ292ZXJzIGFsbCBkYXRhIHJlY29yZCB0eXBlcy4K
KyAgICAgICAgICAgIDIuIEFsbG93cyBkYXRhIHJlbW92YWwgd2hlbiBtX2xhc3RUaW1lRGF0YVJl
Y29yZHNXZXJlUmVtb3ZlZCBpcyBub3Qgc2V0LgorICAgICAgICAgICAgMy4gTW92ZXMgdGhlIGhl
YXZ5IGxpZnRpbmcgdG8gV2Vic2l0ZURhdGFTdG9yZSAoc2VlIGJlbG93KS4KKyAgICAgICAgICAg
IDQuIE5vIGxvbmdlciBjb3VudHMgcmVtb3ZlZCBkYXRhIHJlZ3Jlc3Npb25zLgorICAgICAgICAo
V2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnByb2Nlc3NTdGF0aXN0aWNz
QW5kRGF0YVJlY29yZHMpOgorICAgICAgICAgICAgU2VlIG5leHQgY29tbWVudC4KKyAgICAgICAg
KFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXNvdXJjZUxvYWRTdGF0
aXN0aWNzVXBkYXRlZCk6CisgICAgICAgICAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMoKSBpcyAKKyAgICAgICAgICAgIGJy
b2tlbiBvdXQgb2YgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXNvdXJjZUxvYWRT
dGF0aXN0aWNzVXBkYXRlZAorICAgICAgICAgICAgdG8gYWxsb3cgZm9yIHN0YXRpc3RpY3MgcHJv
Y2Vzc2luZyB3aXRob3V0IHByaW9yIGNsYXNzaWZpY2F0aW9uLgorICAgICAgICAgICAgVGVzdHMg
bmVlZCB0byBzZXQgc3RhdGlzdGljcyBhbmQgYSBydW4gb2YgdGhlIGNsYXNzaWZpZXIgbWF5Cisg
ICAgICAgICAgICByZXNldCB0aGUgZGF0YS4KKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpyZWdpc3RlclNoYXJlZFJlc291cmNlTG9hZE9ic2VydmVyKToK
KyAgICAgICAgICAgIFNldHMgdGhlIG5vdGlmaWNhdGlvbiBjYWxsYmFjayB3aGljaCBjYWxscyAK
KyAgICAgICAgICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJvY2Vzc1N0YXRp
c3RpY3NBbmREYXRhUmVjb3JkcygpLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpjb3JlU3RvcmUpOgorICAgICAgICAgICAgUmVuYW1lZCBtX3Jlc291cmNl
U3RhdGlzdGljc1N0b3JlIHRvIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlIHRvCisgICAg
ICAgICAgICBoYXJtb25pemUgd2l0aCBvdGhlciBuYW1pbmcuCisgICAgICAgICogVUlQcm9jZXNz
L1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJz
aXRlRGF0YVN0b3JlOjpmZXRjaERhdGFGb3JUb3BQcml2YXRlbHlPd25lZERvbWFpbnMpOgorICAg
ICAgICAgICAgVGhpcyBpcyBub3cgd2hlcmUgbWF0Y2hpbmcgaXMgbWFkZSBiZXR3ZWVuIHByZXZh
bGVudCByZXNvdXJjZXMKKyAgICAgICAgICAgIGFuZCBkYXRhIHJlY29yZHMuIFRoaXMgZnVuY3Rp
b24gaXMgdXNlZCBieSAKKyAgICAgICAgICAgIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGFG
b3JUb3BQcml2YXRlbHlPd25lZERvbWFpbnMoKS4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURh
dGFTdG9yZTo6cmVtb3ZlRGF0YUZvclRvcFByaXZhdGVseU93bmVkRG9tYWlucyk6CisgICAgICAg
ICAgICBUaGUgZnVuY3Rpb24gV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZW1vdmVE
YXRhUmVjb3JkcygpCisgICAgICAgICAgICBjYWxscyB0byBnZXQgZGF0YSByZWNvcmRzIHJlbW92
ZWQgaW4gYWxsIHBlcnNpc3RlbnQgc3RvcmVzLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRl
RGF0YS9XZWJzaXRlRGF0YVN0b3JlLmg6CisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Om1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzczo6c3RhdGlzdGljc0NoYW5nZWRUaW1lckZpcmVkKToKKyAgICAgICAg
KFdlYktpdDo6bV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmFnZSk6IERlbGV0ZWQuCisgICAg
ICAgICAgICBSZW5hbWVkIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JhZ2UgdG8gbV9yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUgCisgICAgICAgICAgICB0byBoYXJtb25pemUgd2l0aCBv
dGhlciBuYW1pbmcuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmg6CisKIDIwMTct
MDItMDggIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAg
UHV0IG5hbWVzIG9uIG1vcmUgVUlWaWV3cyBmb3IgZWFzZSBvZiBkZWJ1Z2dpbmcKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCShyZXZp
c2lvbiAyMTE5MzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIyNTIsNiArMjI1Miw4IEBAIHZvaWQgQXJndW1l
bnRDb2RlcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWMKICAgICAKICAgICAvLyBVc2VyIGludGVyYWN0
aW9uCiAgICAgZW5jb2RlciA8PCBzdGF0aXN0aWNzLmhhZFVzZXJJbnRlcmFjdGlvbjsKKyAgICBl
bmNvZGVyIDw8IHN0YXRpc3RpY3MubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbjsKKyAgICBlbmNv
ZGVyIDw8IHN0YXRpc3RpY3MuZ3JhbmRmYXRoZXJlZDsKICAgICAKICAgICAvLyBUb3AgZnJhbWUg
c3RhdHMKICAgICBlbmNvZGVyIDw8IHN0YXRpc3RpY3MudG9wRnJhbWVIYXNCZWVuTmF2aWdhdGVk
VG9CZWZvcmU7CkBAIC0yMjgyLDYgKzIyODQsNyBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljCiAgICAgLy8gUHJldmFsZW50IFJlc291cmNlCiAgICAgZW5jb2RlciA8
PCBzdGF0aXN0aWNzLnJlZGlyZWN0ZWRUb090aGVyUHJldmFsZW50UmVzb3VyY2VPcmlnaW5zOwog
ICAgIGVuY29kZXIgPDwgc3RhdGlzdGljcy5pc1ByZXZhbGVudFJlc291cmNlOworICAgIGVuY29k
ZXIgPDwgc3RhdGlzdGljcy5kYXRhUmVjb3Jkc1JlbW92ZWQ7CiB9CiAKIGJvb2wgQXJndW1lbnRD
b2RlcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFdl
YkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHN0YXRpc3RpY3MpCkBAIC0yMjkyLDYgKzIy
OTUsMTIgQEAgYm9vbCBBcmd1bWVudENvZGVyPFJlc291cmNlTG9hZFN0YXRpc3RpYwogICAgIC8v
IFVzZXIgaW50ZXJhY3Rpb24KICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0YXRpc3RpY3MuaGFk
VXNlckludGVyYWN0aW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShzdGF0aXN0aWNzLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24pKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0YXRpc3RpY3MuZ3Jh
bmRmYXRoZXJlZCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICAvLyBUb3AgZnJh
bWUgc3RhdHMKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0YXRpc3RpY3MudG9wRnJhbWVIYXNC
ZWVuTmF2aWdhdGVkVG9CZWZvcmUpKQpAQCAtMjM2Miw3ICsyMzcxLDEwIEBAIGJvb2wgQXJndW1l
bnRDb2RlcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWMKICAgICAKICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHN0YXRpc3RpY3MuaXNQcmV2YWxlbnRSZXNvdXJjZSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3RhdGlzdGljcy5kYXRhUmVjb3Jk
c1JlbW92ZWQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IApJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9BUElPYmplY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL0FQSU9iamVjdC5oCShyZXZpc2lvbiAyMTE5
MzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL0FQSU9iamVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTE1NCw2ICsxNTQsNyBAQCBwdWJsaWM6CiAgICAgICAgIFZpYnJhdGlvbiwKICAgICAgICAg
Vmlld3BvcnRBdHRyaWJ1dGVzLAogICAgICAgICBWaXNpdGVkTGlua1N0b3JlLAorICAgICAgICBX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlciwKICAgICAgICAgV2Vic2l0ZURhdGFSZWNv
cmQsCiAgICAgICAgIFdlYnNpdGVEYXRhU3RvcmUsCiAgICAgICAgIFdlYnNpdGVQb2xpY2llcywK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS0Jhc2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tCYXNlLmgJKHJldmlzaW9uIDIxMTkzMSkK
KysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS0Jhc2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEw
IE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dApAQCAtMTI3LDYgKzEyNyw3IEBAIHR5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZVdL
UGFnZVJ1bkJlZm8KIHR5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZVdLUGFnZVJ1bkphdmFTY3Jp
cHRBbGVydFJlc3VsdExpc3RlbmVyKiBXS1BhZ2VSdW5KYXZhU2NyaXB0QWxlcnRSZXN1bHRMaXN0
ZW5lclJlZjsKIHR5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZVdLUGFnZVJ1bkphdmFTY3JpcHRD
b25maXJtUmVzdWx0TGlzdGVuZXIqIFdLUGFnZVJ1bkphdmFTY3JpcHRDb25maXJtUmVzdWx0TGlz
dGVuZXJSZWY7CiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVXS1BhZ2VSdW5KYXZhU2NyaXB0
UHJvbXB0UmVzdWx0TGlzdGVuZXIqIFdLUGFnZVJ1bkphdmFTY3JpcHRQcm9tcHRSZXN1bHRMaXN0
ZW5lclJlZjsKK3R5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZVdLUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01hbmFnZXIqIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJSZWY7CiB0eXBlZGVm
IGNvbnN0IHN0cnVjdCBPcGFxdWVXS1RleHRDaGVja2VyKiBXS1RleHRDaGVja2VyUmVmOwogdHlw
ZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlV0tTZXNzaW9uKiBXS1Nlc3Npb25SZWY7CiB0eXBlZGVm
IGNvbnN0IHN0cnVjdCBPcGFxdWVXS1Nlc3Npb25TdGF0ZSogV0tTZXNzaW9uU3RhdGVSZWY7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAkocmV2
aXNpb24gMjExOTMxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEwLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEwLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMDAsNiArMjAwLDUzIEBAIFdlYlBhZ2VQcm94eSog
V2ViUHJvY2Vzc1Byb3h5Ojp3ZWJQYWdlKHUKICAgICByZXR1cm4gZ2xvYmFsUGFnZU1hcCgpLmdl
dChwYWdlSUQpOwogfQogCit2b2lkIFdlYlByb2Nlc3NQcm94eTo6ZGVsZXRlV2Vic2l0ZURhdGFG
b3JUb3BQcml2YXRlbHlPd25lZERvbWFpbnNJbkFsbFBlcnNpc3RlbnREYXRhU3RvcmVzKE9wdGlv
blNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgVmVjdG9yPFN0cmluZz4mIHRvcFByaXZh
dGVseU93bmVkRG9tYWlucywgYm9vbCBzaG91bGROb3RpZnlQYWdlLCBzdGQ6OmZ1bmN0aW9uPHZv
aWQoKT4gY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgc3RydWN0IENhbGxiYWNrQWdncmVnYXRv
ciA6IFRocmVhZFNhZmVSZWZDb3VudGVkPENhbGxiYWNrQWdncmVnYXRvcj4geworICAgICAgICBl
eHBsaWNpdCBDYWxsYmFja0FnZ3JlZ2F0b3Ioc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRp
b25IYW5kbGVyKQorICAgICAgICAgICAgOiBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2
b2lkIGFkZFBlbmRpbmdDYWxsYmFjaygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBlbmRpbmdD
YWxsYmFja3MrKzsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCByZW1vdmVQZW5k
aW5nQ2FsbGJhY2soKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQocGVuZGluZ0NhbGxi
YWNrcyk7CisgICAgICAgICAgICAtLXBlbmRpbmdDYWxsYmFja3M7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGNhbGxJZk5lZWRlZCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2
b2lkIGNhbGxJZk5lZWRlZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghcGVuZGluZ0Nh
bGxiYWNrcykKKyAgICAgICAgICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB1bnNp
Z25lZCBwZW5kaW5nQ2FsbGJhY2tzID0gMDsKKyAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkKCk+
IGNvbXBsZXRpb25IYW5kbGVyOworICAgIH07CisgICAgCisgICAgUmVmUHRyPENhbGxiYWNrQWdn
cmVnYXRvcj4gY2FsbGJhY2tBZ2dyZWdhdG9yID0gYWRvcHRSZWYobmV3IENhbGxiYWNrQWdncmVn
YXRvcihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkpOworCisgICAgZm9yIChhdXRvJiBwYWdl
IDogZ2xvYmFsUGFnZU1hcCgpKSB7CisgICAgICAgIGlmIChwYWdlLnZhbHVlLT53ZWJzaXRlRGF0
YVN0b3JlKCkuaXNQZXJzaXN0ZW50KCkpIHsKKyAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRv
ci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7CisgICAgICAgICAgICBwYWdlLnZhbHVlLT53ZWJzaXRl
RGF0YVN0b3JlKCkucmVtb3ZlRGF0YUZvclRvcFByaXZhdGVseU93bmVkRG9tYWlucyhkYXRhVHlw
ZXMsIHsgfSwgdG9wUHJpdmF0ZWx5T3duZWREb21haW5zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBz
aG91bGROb3RpZnlQYWdlLCBwYWdlXSgpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxkTm90
aWZ5UGFnZSkKKyAgICAgICAgICAgICAgICAgICAgcGFnZS52YWx1ZS0+cG9zdE1lc3NhZ2VUb0lu
amVjdGVkQnVuZGxlKCJXZWJzaXRlRGF0YURlbGV0aW9uRm9yVG9wUHJpdmF0ZWx5T3duZWREb21h
aW5zRmluaXNoZWQiLCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICBXVEY6OlJ1bkxvb3A6Om1h
aW4oKS5kaXNwYXRjaChbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7CisgICAgICAgICAgICAgICAgICAg
IGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKCk7CisgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KK30KKwogUmVmPFdl
YlBhZ2VQcm94eT4gV2ViUHJvY2Vzc1Byb3h5OjpjcmVhdGVXZWJQYWdlKFBhZ2VDbGllbnQmIHBh
Z2VDbGllbnQsIFJlZjxBUEk6OlBhZ2VDb25maWd1cmF0aW9uPiYmIHBhZ2VDb25maWd1cmF0aW9u
KQogewogICAgIHVpbnQ2NF90IHBhZ2VJRCA9IGdlbmVyYXRlUGFnZUlEKCk7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oCShyZXZpc2lvbiAyMTE5MzEp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0xMjAsNiArMTIwLDcgQEAgcHVibGljOgogICAgIHZvaWQgZmV0Y2hXZWJzaXRl
RGF0YShXZWJDb3JlOjpTZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBGdW5j
dGlvbjx2b2lkKFdlYnNpdGVEYXRhKT4gY29tcGxldGlvbkhhbmRsZXIpOwogICAgIHZvaWQgZGVs
ZXRlV2Vic2l0ZURhdGEoV2ViQ29yZTo6U2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFU
eXBlPiwgc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCBtb2RpZmllZFNpbmNl
LCBGdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25IYW5kbGVyKTsKICAgICB2b2lkIGRlbGV0ZVdl
YnNpdGVEYXRhRm9yT3JpZ2lucyhXZWJDb3JlOjpTZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXRl
RGF0YVR5cGU+LCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiYsIEZ1
bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkhhbmRsZXIpOworICAgIHN0YXRpYyB2b2lkIGRlbGV0
ZVdlYnNpdGVEYXRhRm9yVG9wUHJpdmF0ZWx5T3duZWREb21haW5zSW5BbGxQZXJzaXN0ZW50RGF0
YVN0b3JlcyhPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgVmVjdG9yPFN0cmluZz4mIHRvcFBy
aXZhdGVseU93bmVkRG9tYWlucywgYm9vbCBzaG91bGROb3RpZnlQYWdlcywgc3RkOjpmdW5jdGlv
bjx2b2lkKCk+IGNvbXBsZXRpb25IYW5kbGVyKTsKIAogICAgIHZvaWQgZW5hYmxlU3VkZGVuVGVy
bWluYXRpb24oKTsKICAgICB2b2lkIGRpc2FibGVTdWRkZW5UZXJtaW5hdGlvbigpOwpJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01hbmFnZXIuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaCIKKworI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUu
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZE9ic2VydmVyLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9VUkwuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXRQcmV2
YWxlbnRSZXNvdXJjZShTdHJpbmcgaG9zdE5hbWUsIGJvb2wgdmFsdWUpCit7CisgICAgaWYgKHZh
bHVlKQorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2
ZXIoKS5zZXRQcmV2YWxlbnRSZXNvdXJjZShVUkwoVVJMKCksIGhvc3ROYW1lKSk7CisgICAgZWxz
ZQorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIo
KS5jbGVhclByZXZhbGVudFJlc291cmNlKFVSTChVUkwoKSwgaG9zdE5hbWUpKTsKK30KKworYm9v
bCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6aXNQcmV2YWxlbnRSZXNvdXJjZShT
dHJpbmcgaG9zdE5hbWUpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWRPYnNlcnZlcigpLmlzUHJldmFsZW50UmVzb3VyY2UoVVJMKFVSTCgpLCBob3N0
TmFtZSkpOworfQorICAgIAordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6
c2V0SGFzSGFkVXNlckludGVyYWN0aW9uKFN0cmluZyBob3N0TmFtZSwgYm9vbCB2YWx1ZSkKK3sK
KyAgICBpZiAodmFsdWUpCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWRPYnNlcnZlcigpLmxvZ1VzZXJJbnRlcmFjdGlvbihVUkwoVVJMKCksIGhvc3ROYW1lKSk7
CisgICAgZWxzZQorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
T2JzZXJ2ZXIoKS5jbGVhclVzZXJJbnRlcmFjdGlvbihVUkwoVVJMKCksIGhvc3ROYW1lKSk7Cit9
CisKK2Jvb2wgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6Omhhc0hhZFVzZXJJbnRl
cmFjdGlvbihTdHJpbmcgaG9zdE5hbWUpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OlJlc291cmNl
TG9hZE9ic2VydmVyOjpzaGFyZWRPYnNlcnZlcigpLmhhc0hhZFVzZXJJbnRlcmFjdGlvbihVUkwo
VVJMKCksIGhvc3ROYW1lKSk7Cit9CisKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01h
bmFnZXI6OnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oZG91YmxlIHNlY29uZHMpCit7Cisg
ICAgV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZE9ic2VydmVyKCkuc2V0VGlt
ZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihzZWNvbmRzKTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWFuYWdlcjo6ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCkKK3sKKyAg
ICBXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5maXJlRGF0
YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWFuYWdlcjo6c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29s
IHZhbHVlKQoreworICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0Tm90aWZ5
UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCh2YWx1ZSk7Cit9CisKK3ZvaWQgV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVm
b3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wgdmFsdWUpCit7CisgICAgV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNv
cmRzUmVtb3ZhbCh2YWx1ZSk7Cit9CisKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01h
bmFnZXI6OnNldE1pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92YWwoZG91YmxlIHNl
Y29uZHMpCit7CisgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRNaW5pbXVt
VGltZUJldHdlZWVuRGF0YVJlY29yZHNSZW1vdmFsKHNlY29uZHMpOworfQorCit2b2lkIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpyZXNldFRvQ29uc2lzdGVudFN0YXRlKCkKK3sK
KyAgICBXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5zZXRU
aW1lVG9MaXZlVXNlckludGVyYWN0aW9uKDI1OTIwMDApOworICAgIFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChm
YWxzZSk7CisgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTaG91bGRDbGFz
c2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCh0cnVlKTsKKyAgICBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldE1pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jk
c1JlbW92YWwoNjApOworICAgIGF1dG8gc3RvcmUgPSBXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5zdGF0aXN0aWNzU3RvcmUoKTsKKyAgICBpZiAoc3RvcmUp
CisgICAgICAgIHN0b3JlLT5jbGVhcigpOworfQorICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJBUElPYmplY3QuaCIKKworI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyIDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxB
UEk6Ok9iamVjdDo6VHlwZTo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI+IHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUmVmPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyPiBj
cmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01hbmFnZXIoKSk7CisgICAgfQorICAgIHN0YXRpYyB2b2lkIHNldFByZXZh
bGVudFJlc291cmNlKFN0cmluZyBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7CisgICAgc3RhdGljIGJv
b2wgaXNQcmV2YWxlbnRSZXNvdXJjZShTdHJpbmcgaG9zdE5hbWUpOworICAgIHN0YXRpYyB2b2lk
IHNldEhhc0hhZFVzZXJJbnRlcmFjdGlvbihTdHJpbmcgaG9zdE5hbWUsIGJvb2wgdmFsdWUpOwor
ICAgIHN0YXRpYyBib29sIGhhc0hhZFVzZXJJbnRlcmFjdGlvbihTdHJpbmcgaG9zdE5hbWUpOwor
ICAgIHN0YXRpYyB2b2lkIHNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oZG91YmxlIHNlY29u
ZHMpOworICAgIHN0YXRpYyB2b2lkIHNldFJlZHVjZWRUaW1lc3RhbXBSZXNvbHV0aW9uKGRvdWJs
ZSBzZWNvbmRzKTsKKyAgICBzdGF0aWMgdm9pZCBmaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIo
KTsKKyAgICBzdGF0aWMgdm9pZCBzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2Fu
bmVkKGJvb2wpOworICAgIHN0YXRpYyB2b2lkIHNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVm
b3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wgdmFsdWUpOworICAgIHN0YXRpYyB2b2lkIHNldE1p
bmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92YWwoZG91YmxlIHNlY29uZHMpOworICAg
IHN0YXRpYyB2b2lkIHJlc2V0VG9Db25zaXN0ZW50U3RhdGUoKTsKKworcHJpdmF0ZToKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAJKHJldmlz
aW9uIDIxMTkzMSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw5ICsyNiw5IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
LmgiCiAKLSNpbmNsdWRlICJBUElXZWJzaXRlRGF0YVN0b3JlLmgiCiAjaW5jbHVkZSAiV2ViUHJv
Y2Vzc01lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKKyNpbmNsdWRlICJX
ZWJQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmVNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYnNpdGVEYXRhRmV0Y2hPcHRpb24uaCIKICNpbmNs
dWRlICJXZWJzaXRlRGF0YVR5cGUuaCIKQEAgLTQ1LDkgKzQ1LDExIEBAIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotc3RhdGljIGNvbnN0IGF1dG8gbnVt
YmVyT2ZTZWNvbmRzQmV0d2VlblJlbW92aW5nRGF0YVJlY29yZHMgPSA2MDsKIHN0YXRpYyBjb25z
dCBhdXRvIGZlYXR1cmVWZWN0b3JMZW5ndGhUaHJlc2hvbGQgPSAzOworc3RhdGljIGF1dG8gbWlu
aW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbCA9IDYwOwogc3RhdGljIE9wdGlvblNl
dDxXZWJLaXQ6OldlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzVG9SZW1vdmU7CitzdGF0aWMgYm9v
bCBub3RpZnlQYWdlcyA9IGZhbHNlOworc3RhdGljIGJvb2wgc2hvdWxkQ2xhc3NpZnlSZXNvdXJj
ZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwgPSB0cnVlOwogCiBSZWY8V2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlPiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNyZWF0ZShj
b25zdCBTdHJpbmcmIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpCiB7CkBAIC01NSw3
ICs1Nyw3IEBAIFJlZjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+IFdlYlIKIH0KIAog
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUoY29uc3QgU3RyaW5nJiByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KQotICAg
IDogbV9yZXNvdXJjZVN0YXRpc3RpY3NTdG9yZShSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OmNyZWF0ZSgpKQorICAgIDogbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpjcmVhdGUoKSkKICAgICAsIG1fc3RhdGlzdGljc1F1ZXVlKFdv
cmtRdWV1ZTo6Y3JlYXRlKCJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUgUHJvY2VzcyBE
YXRhIFF1ZXVlIikpCiAgICAgLCBtX3N0b3JhZ2VQYXRoKHJlc291cmNlTG9hZFN0YXRpc3RpY3NE
aXJlY3RvcnkpCiB7CkBAIC02NSw2ICs2NywyMiBAQCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6On5XZWJSZXNvCiB7CiB9CiAKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wgYWx3YXlz
KQoreworICAgIG5vdGlmeVBhZ2VzID0gYWx3YXlzOworfQorCit2b2lkIFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVj
b3Jkc1JlbW92YWwoYm9vbCB2YWx1ZSkKK3sKKyAgICBzaG91bGRDbGFzc2lmeVJlc291cmNlc0Jl
Zm9yZURhdGFSZWNvcmRzUmVtb3ZhbCA9IHZhbHVlOworfQorCit2b2lkIFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3Zh
bChkb3VibGUgc2Vjb25kcykKK3sKKyAgICBpZiAoc2Vjb25kcyA+PSAwKQorICAgICAgICBtaW5p
bXVtVGltZUJldHdlZWVuRGF0YVJlY29yZHNSZW1vdmFsID0gc2Vjb25kczsKK30KKwogYm9vbCBX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omhhc1ByZXZhbGVudFJlc291cmNlQ2hhcmFj
dGVyaXN0aWNzKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHJlc291cmNlU3RhdGlzdGlj
KQogewogICAgIGF1dG8gc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50ID0gcmVz
b3VyY2VTdGF0aXN0aWMuc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2lucy5zaXplKCk7CkBA
IC0xMTEsMTIgKzEyOSw4IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpy
ZW0KICAgICAgICAgcmV0dXJuOwogCiAgICAgZG91YmxlIG5vdyA9IGN1cnJlbnRUaW1lKCk7Ci0g
ICAgaWYgKCFtX2xhc3RUaW1lRGF0YVJlY29yZHNXZXJlUmVtb3ZlZCkgewotICAgICAgICBtX2xh
c3RUaW1lRGF0YVJlY29yZHNXZXJlUmVtb3ZlZCA9IG5vdzsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlmIChub3cgPCAobV9sYXN0VGltZURhdGFSZWNvcmRzV2VyZVJlbW92ZWQgKyBu
dW1iZXJPZlNlY29uZHNCZXR3ZWVuUmVtb3ZpbmdEYXRhUmVjb3JkcykpCisgICAgaWYgKG1fbGFz
dFRpbWVEYXRhUmVjb3Jkc1dlcmVSZW1vdmVkCisgICAgICAgICYmIG5vdyA8IChtX2xhc3RUaW1l
RGF0YVJlY29yZHNXZXJlUmVtb3ZlZCArIG1pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1Jl
bW92YWwpKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2RhdGFSZWNvcmRzUmVtb3ZhbFBlbmRp
bmcgPSB0cnVlOwpAQCAtMTI0LDU5ICsxMzgsNTIgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnJlbQogCiAgICAgaWYgKGRhdGFUeXBlc1RvUmVtb3ZlLmlzRW1wdHkoKSkg
ewogICAgICAgICBkYXRhVHlwZXNUb1JlbW92ZSB8PSBXZWJzaXRlRGF0YVR5cGU6OkNvb2tpZXM7
Ci0gICAgICAgIGRhdGFUeXBlc1RvUmVtb3ZlIHw9IFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9y
YWdlOwotICAgICAgICBkYXRhVHlwZXNUb1JlbW92ZSB8PSBXZWJzaXRlRGF0YVR5cGU6OkluZGV4
ZWREQkRhdGFiYXNlczsKICAgICAgICAgZGF0YVR5cGVzVG9SZW1vdmUgfD0gV2Vic2l0ZURhdGFU
eXBlOjpEaXNrQ2FjaGU7CiAgICAgICAgIGRhdGFUeXBlc1RvUmVtb3ZlIHw9IFdlYnNpdGVEYXRh
VHlwZTo6TWVtb3J5Q2FjaGU7CisgICAgICAgIGRhdGFUeXBlc1RvUmVtb3ZlIHw9IFdlYnNpdGVE
YXRhVHlwZTo6T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGU7CisgICAgICAgIGRhdGFUeXBlc1Rv
UmVtb3ZlIHw9IFdlYnNpdGVEYXRhVHlwZTo6U2Vzc2lvblN0b3JhZ2U7CisgICAgICAgIGRhdGFU
eXBlc1RvUmVtb3ZlIHw9IFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlOworICAgICAgICBk
YXRhVHlwZXNUb1JlbW92ZSB8PSBXZWJzaXRlRGF0YVR5cGU6OldlYlNRTERhdGFiYXNlczsKKyAg
ICAgICAgZGF0YVR5cGVzVG9SZW1vdmUgfD0gV2Vic2l0ZURhdGFUeXBlOjpJbmRleGVkREJEYXRh
YmFzZXM7CisgICAgICAgIGRhdGFUeXBlc1RvUmVtb3ZlIHw9IFdlYnNpdGVEYXRhVHlwZTo6TWVk
aWFLZXlzOworICAgICAgICBkYXRhVHlwZXNUb1JlbW92ZSB8PSBXZWJzaXRlRGF0YVR5cGU6OkhT
VFNDYWNoZTsKKyAgICAgICAgZGF0YVR5cGVzVG9SZW1vdmUgfD0gV2Vic2l0ZURhdGFUeXBlOjpT
ZWFyY2hGaWVsZFJlY2VudFNlYXJjaGVzOworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJ
KQorICAgICAgICBkYXRhVHlwZXNUb1JlbW92ZSB8PSBXZWJzaXRlRGF0YVR5cGU6OlBsdWdJbkRh
dGE7CisjZW5kaWYKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorICAgICAgICBkYXRhVHlwZXNU
b1JlbW92ZSB8PSBXZWJzaXRlRGF0YVR5cGU6Ok1lZGlhRGV2aWNlSWRlbnRpZmllcjsKKyNlbmRp
ZgogICAgIH0KIAogICAgIC8vIFN3aXRjaCB0byB0aGUgbWFpbiB0aHJlYWQgdG8gZ2V0IHRoZSBk
ZWZhdWx0IHdlYnNpdGUgZGF0YSBzdG9yZQogICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChb
cHJldmFsZW50UmVzb3VyY2VEb21haW5zID0gV1RGTW92ZShwcmV2YWxlbnRSZXNvdXJjZURvbWFp
bnMpLCB0aGlzXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgYXV0byYgd2Vic2l0ZURhdGFTdG9yZSA9
IEFQSTo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT53ZWJzaXRlRGF0YVN0
b3JlKCk7Ci0KLSAgICAgICAgd2Vic2l0ZURhdGFTdG9yZS5mZXRjaERhdGEoZGF0YVR5cGVzVG9S
ZW1vdmUsIHsgfSwgW3ByZXZhbGVudFJlc291cmNlRG9tYWlucyA9IFdURk1vdmUocHJldmFsZW50
UmVzb3VyY2VEb21haW5zKSwgdGhpc10oYXV0byB3ZWJzaXRlRGF0YVJlY29yZHMpIHsKLSAgICAg
ICAgICAgIFZlY3RvcjxXZWJzaXRlRGF0YVJlY29yZD4gZGF0YVJlY29yZHM7Ci0gICAgICAgICAg
ICBWZWN0b3I8U3RyaW5nPiBwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnNXaXRoRGF0YVJlY29yZHM7
Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIHdlYnNpdGVEYXRhUmVjb3JkIDogd2Vic2l0ZURhdGFS
ZWNvcmRzKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChhdXRvJiBwcmV2YWxlbnRSZXNvdXJjZURv
bWFpbiA6IHByZXZhbGVudFJlc291cmNlRG9tYWlucykgewotICAgICAgICAgICAgICAgICAgICBp
ZiAod2Vic2l0ZURhdGFSZWNvcmQuZGlzcGxheU5hbWUuZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2Fz
ZShwcmV2YWxlbnRSZXNvdXJjZURvbWFpbikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1
dG8gc3VmZml4U3RhcnQgPSB3ZWJzaXRlRGF0YVJlY29yZC5kaXNwbGF5TmFtZS5sZW5ndGgoKSAt
IHByZXZhbGVudFJlc291cmNlRG9tYWluLmxlbmd0aCgpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFzdWZmaXhTdGFydCB8fCB3ZWJzaXRlRGF0YVJlY29yZC5kaXNwbGF5TmFtZVtzdWZm
aXhTdGFydCAtIDFdID09ICcuJykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFS
ZWNvcmRzLmFwcGVuZCh3ZWJzaXRlRGF0YVJlY29yZCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHJldmFsZW50UmVzb3VyY2VEb21haW5zV2l0aERhdGFSZWNvcmRzLmFwcGVuZChwcmV2
YWxlbnRSZXNvdXJjZURvbWFpbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGlmICghZGF0YVJlY29yZHMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgbV9kYXRh
UmVjb3Jkc1JlbW92YWxQZW5kaW5nID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBhdXRvJiB3ZWJzaXRlRGF0YVN0b3JlID0gQVBJ
OjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPndlYnNpdGVEYXRhU3RvcmUo
KTsKLSAgICAgICAgICAgIHdlYnNpdGVEYXRhU3RvcmUucmVtb3ZlRGF0YShkYXRhVHlwZXNUb1Jl
bW92ZSwgZGF0YVJlY29yZHMsIFtwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnNXaXRoRGF0YVJlY29y
ZHMgPSBXVEZNb3ZlKHByZXZhbGVudFJlc291cmNlRG9tYWluc1dpdGhEYXRhUmVjb3JkcyksIHRo
aXNdIHsKLSAgICAgICAgICAgICAgICB0aGlzLT5jb3JlU3RvcmUoKS51cGRhdGVTdGF0aXN0aWNz
Rm9yUmVtb3ZlZERhdGFSZWNvcmRzKHByZXZhbGVudFJlc291cmNlRG9tYWluc1dpdGhEYXRhUmVj
b3Jkcyk7Ci0gICAgICAgICAgICAgICAgbV9kYXRhUmVjb3Jkc1JlbW92YWxQZW5kaW5nID0gZmFs
c2U7Ci0gICAgICAgICAgICB9KTsKKyAgICAgICAgV2ViUHJvY2Vzc1Byb3h5OjpkZWxldGVXZWJz
aXRlRGF0YUZvclRvcFByaXZhdGVseU93bmVkRG9tYWluc0luQWxsUGVyc2lzdGVudERhdGFTdG9y
ZXMoZGF0YVR5cGVzVG9SZW1vdmUsIHByZXZhbGVudFJlc291cmNlRG9tYWlucywgbm90aWZ5UGFn
ZXMsIFt0aGlzXSgpIG11dGFibGUgeworICAgICAgICAgICAgbV9kYXRhUmVjb3Jkc1JlbW92YWxQ
ZW5kaW5nID0gZmFsc2U7CiAgICAgICAgIH0pOwogICAgIH0pOwogfQogCi12b2lkIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1VwZGF0ZWQoY29u
c3QgVmVjdG9yPFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M+JiBvcmlnaW5zKQordm9p
ZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0
YVJlY29yZHMoKQogewotICAgIGNvcmVTdG9yZSgpLm1lcmdlU3RhdGlzdGljcyhvcmlnaW5zKTsK
LQotICAgIGNvcmVTdG9yZSgpLnByb2Nlc3NTdGF0aXN0aWNzKFt0aGlzXSAoUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0aXN0aWMpIHsKLSAgICAgICAgY2xhc3NpZnlSZXNvdXJj
ZShyZXNvdXJjZVN0YXRpc3RpYyk7Ci0gICAgICAgIHJlbW92ZURhdGFSZWNvcmRzKCk7Ci0gICAg
fSk7CisgICAgaWYgKHNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1v
dmFsKSB7CisgICAgICAgIGNvcmVTdG9yZSgpLnByb2Nlc3NTdGF0aXN0aWNzKFt0aGlzXSAoUmVz
b3VyY2VMb2FkU3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0aXN0aWMpIHsKKyAgICAgICAgICAgIGNs
YXNzaWZ5UmVzb3VyY2UocmVzb3VyY2VTdGF0aXN0aWMpOworICAgICAgICB9KTsKKyAgICB9Cisg
ICAgcmVtb3ZlRGF0YVJlY29yZHMoKTsKICAgICAKICAgICBhdXRvIGVuY29kZXIgPSBjb3JlU3Rv
cmUoKS5jcmVhdGVFbmNvZGVyRnJvbURhdGEoKTsKICAgICAKICAgICB3cml0ZUVuY29kZXJUb0Rp
c2soKmVuY29kZXIuZ2V0KCksICJmdWxsX2Jyb3dzaW5nX3Nlc3Npb24iKTsKIH0KIAordm9pZCBX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NVcGRh
dGVkKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiYgb3JpZ2lu
cykKK3sKKyAgICBjb3JlU3RvcmUoKS5tZXJnZVN0YXRpc3RpY3Mob3JpZ2lucyk7CisgICAgcHJv
Y2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3JkcygpOworfQorCiB2b2lkIFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoYm9vbCBl
bmFibGVkKQogewogICAgIGlmIChlbmFibGVkID09IG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0Vu
YWJsZWQpCkBAIC0xOTIsOSArMTk5LDE1IEBAIGJvb2wgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpyZXMKICAgICByZXR1cm4gbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZDsK
IH0KIAorCiB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVnaXN0ZXJTaGFy
ZWRSZXNvdXJjZUxvYWRPYnNlcnZlcigpCiB7Ci0gICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNo
YXJlZE9ic2VydmVyKCkuc2V0U3RhdGlzdGljc1N0b3JlKG1fcmVzb3VyY2VTdGF0aXN0aWNzU3Rv
cmUuY29weVJlZigpKTsKKyAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIo
KS5zZXRTdGF0aXN0aWNzU3RvcmUobV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY29weVJl
ZigpKTsKKyAgICBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS0+c2V0Tm90aWZpY2F0aW9u
Q2FsbGJhY2soW3RoaXNdIHsKKyAgICAgICAgaWYgKG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlLT5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHByb2Nlc3NTdGF0
aXN0aWNzQW5kRGF0YVJlY29yZHMoKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnJlYWREYXRhRnJvbURpc2tJZk5lZWRlZCgpCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5oCShyZXZpc2lvbiAyMTE5MzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUx
LDYgKzUxLDkgQEAgY2xhc3MgV2ViUHJvY2Vzc1Byb3h5OwogY2xhc3MgV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlIDogcHVibGljIElQQzo6Q29ubmVjdGlvbjo6V29ya1F1ZXVlTWVzc2Fn
ZVJlY2VpdmVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZT4gY3JlYXRlKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyB2b2lkIHNldE5v
dGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCk7CisgICAgc3RhdGljIHZv
aWQgc2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9v
bCk7CisgICAgc3RhdGljIHZvaWQgc2V0TWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVt
b3ZhbChkb3VibGUpOwogICAgIHZpcnR1YWwgfldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZSgpOwogICAgIAogICAgIHZvaWQgc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoYm9v
bCk7CkBAIC02NSwxNCArNjgsMTQgQEAgcHVibGljOgogCiAgICAgdm9pZCByZWFkRGF0YUZyb21E
aXNrSWZOZWVkZWQoKTsKIAotICAgIHZvaWQgbWVyZ2VTdGF0aXN0aWNzKGNvbnN0IFZlY3RvcjxX
ZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiYpOwotCi0gICAgV2ViQ29yZTo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlJiBjb3JlU3RvcmUoKSB7IHJldHVybiBtX3Jlc291cmNlU3Rh
dGlzdGljc1N0b3JlLmdldCgpOyB9Ci0gICAgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlJiBjb3JlU3RvcmUoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlU3RhdGlz
dGljc1N0b3JlLmdldCgpOyB9CisgICAgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlJiBjb3JlU3RvcmUoKSB7IHJldHVybiBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5n
ZXQoKTsgfQorICAgIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSYg
Y29yZVN0b3JlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUu
Z2V0KCk7IH0KIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUoY29uc3QgU3RyaW5nJik7CiAKKyAgICB2b2lkIHByb2Nlc3NTdGF0aXN0aWNzQW5k
RGF0YVJlY29yZHMoKTsKKwogICAgIGJvb2wgaGFzUHJldmFsZW50UmVzb3VyY2VDaGFyYWN0ZXJp
c3RpY3MoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpOwogICAgIHZvaWQg
Y2xhc3NpZnlSZXNvdXJjZShXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7CiAgICAg
dm9pZCByZW1vdmVEYXRhUmVjb3JkcygpOwpAQCAtODUsNyArODgsNyBAQCBwcml2YXRlOgogICAg
IHZvaWQgd3JpdGVFbmNvZGVyVG9EaXNrKFdlYkNvcmU6OktleWVkRW5jb2RlciYsIGNvbnN0IFN0
cmluZyYgbGFiZWwpIGNvbnN0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpLZXllZERl
Y29kZXI+IGNyZWF0ZURlY29kZXJGcm9tRGlzayhjb25zdCBTdHJpbmcmIGxhYmVsKSBjb25zdDsK
IAotICAgIFJlZjxXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+IG1fcmVzb3Vy
Y2VTdGF0aXN0aWNzU3RvcmU7CisgICAgUmVmPFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZT4gbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU7CiAgICAgUmVmPFdURjo6V29y
a1F1ZXVlPiBtX3N0YXRpc3RpY3NRdWV1ZTsKICAgICBTdHJpbmcgbV9zdG9yYWdlUGF0aDsKICAg
ICBib29sIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQgeyBmYWxzZSB9OwpJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQVBJQ2FzdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0FQSUNhc3QuaAkocmV2aXNpb24gMjEx
OTMxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQVBJQ2FzdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAx
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBQb3J0aW9ucyBDb3B5cmln
aHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CkBAIC0xMDcsNiArMTA3LDcgQEAgY2xhc3MgV2ViUHJvY2Vzc1Bv
b2w7CiBjbGFzcyBXZWJQcm90ZWN0aW9uU3BhY2U7CiBjbGFzcyBXZWJSZW5kZXJMYXllcjsKIGNs
YXNzIFdlYlJlbmRlck9iamVjdDsKK2NsYXNzIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5h
Z2VyOwogY2xhc3MgV2ViVGV4dENoZWNrZXI7CiBjbGFzcyBXZWJVc2VyQ29udGVudENvbnRyb2xs
ZXJQcm94eTsKIGNsYXNzIFdlYlZpYnJhdGlvblByb3h5OwpAQCAtMTU2LDYgKzE1Nyw3IEBAIFdL
X0FERF9BUElfTUFQUElORyhXS1ByZWZlcmVuY2VzUmVmLCBXZWIKIFdLX0FERF9BUElfTUFQUElO
RyhXS1Byb3RlY3Rpb25TcGFjZVJlZiwgV2ViUHJvdGVjdGlvblNwYWNlKQogV0tfQUREX0FQSV9N
QVBQSU5HKFdLUmVuZGVyTGF5ZXJSZWYsIFdlYlJlbmRlckxheWVyKQogV0tfQUREX0FQSV9NQVBQ
SU5HKFdLUmVuZGVyT2JqZWN0UmVmLCBXZWJSZW5kZXJPYmplY3QpCitXS19BRERfQVBJX01BUFBJ
TkcoV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclJlZiwgV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01hbmFnZXIpCiBXS19BRERfQVBJX01BUFBJTkcoV0tTZXNzaW9uU3RhdGVSZWYsIEFQ
STo6U2Vzc2lvblN0YXRlKQogV0tfQUREX0FQSV9NQVBQSU5HKFdLVGV4dENoZWNrZXJSZWYsIFdl
YlRleHRDaGVja2VyKQogV0tfQUREX0FQSV9NQVBQSU5HKFdLVXNlckNvbnRlbnRDb250cm9sbGVy
UmVmLCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWFuYWdlci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oIgorCisjaW5jbHVk
ZSAiV0tBUElDYXN0LmgiCisjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFn
ZXIuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworV0tUeXBlSUQgV0tSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWFuYWdlckdldFR5cGVJRCgpCit7CisgICAgcmV0dXJuIHRvQVBJKFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpBUElUeXBlKTsKK30KKwordm9pZCBXS1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0UHJldmFsZW50UmVzb3VyY2UoU3RyaW5nIGhvc3RO
YW1lLCBib29sIHZhbHVlKQoreworICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2Vy
OjpzZXRQcmV2YWxlbnRSZXNvdXJjZShob3N0TmFtZSwgdmFsdWUpOworfQorCitib29sIFdLUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJJc1ByZXZhbGVudFJlc291cmNlKFN0cmluZyBob3N0
TmFtZSkKK3sKKyAgICByZXR1cm4gV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6Omlz
UHJldmFsZW50UmVzb3VyY2UoaG9zdE5hbWUpOworfQorCit2b2lkIFdLUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01hbmFnZXJTZXRIYXNIYWRVc2VySW50ZXJhY3Rpb24oU3RyaW5nIGhvc3ROYW1lLCBi
b29sIHZhbHVlKQoreworICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXRI
YXNIYWRVc2VySW50ZXJhY3Rpb24oaG9zdE5hbWUsIHZhbHVlKTsKK30KKworYm9vbCBXS1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VySXNIYXNIYWRVc2VySW50ZXJhY3Rpb24oU3RyaW5nIGhv
c3ROYW1lKQoreworICAgIHJldHVybiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6
aGFzSGFkVXNlckludGVyYWN0aW9uKGhvc3ROYW1lKTsKK30KKwordm9pZCBXS1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NNYW5hZ2VyU2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihkb3VibGUgc2Vj
b25kcykKK3sKKyAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6c2V0VGltZVRv
TGl2ZVVzZXJJbnRlcmFjdGlvbihzZWNvbmRzKTsKK30KKwordm9pZCBXS1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NNYW5hZ2VyRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCkKK3sKKyAgICBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVy
KCk7Cit9CisKK3ZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNldE5vdGlmeVBh
Z2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCB2YWx1ZSkKK3sKKyAgICBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNX
ZXJlU2Nhbm5lZCh2YWx1ZSk7Cit9CisKK3ZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFu
YWdlclNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJv
b2wgdmFsdWUpCit7CisgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNldFNo
b3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKHZhbHVlKTsKK30K
Kwordm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0TWluaW11bVRpbWVCZXR3
ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbChkb3VibGUgc2Vjb25kcykKK3sKKyAgICBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6c2V0TWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRz
UmVtb3ZhbChzZWNvbmRzKTsKK30KKwordm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5h
Z2VyUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSgpCit7CisgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01hbmFnZXI6OnJlc2V0VG9Db25zaXN0ZW50U3RhdGUoKTsKK30KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01hbmFnZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0MvV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgPFdlYktpdC9XS0Jhc2UuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
KworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorICAgIAorICAgIFdL
X0VYUE9SVCBXS1R5cGVJRCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyR2V0VHlwZUlE
KCk7CisgICAgCisgICAgV0tfRVhQT1JUIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFu
YWdlclNldFByZXZhbGVudFJlc291cmNlKFN0cmluZyBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7Cisg
ICAgV0tfRVhQT1JUIGJvb2wgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcklzUHJldmFs
ZW50UmVzb3VyY2UoU3RyaW5nIGhvc3ROYW1lKTsKKyAgICBXS19FWFBPUlQgdm9pZCBXS1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0SGFzSGFkVXNlckludGVyYWN0aW9uKFN0cmluZyBo
b3N0TmFtZSwgYm9vbCB2YWx1ZSk7CisgICAgV0tfRVhQT1JUIGJvb2wgV0tSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWFuYWdlcklzSGFzSGFkVXNlckludGVyYWN0aW9uKFN0cmluZyBob3N0TmFtZSk7
CisgICAgV0tfRVhQT1JUIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNldFRp
bWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oZG91YmxlIHNlY29uZHMpOworICAgIFdLX0VYUE9SVCB2
b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXRSZWR1Y2VkVGltZXN0YW1wUmVz
b2x1dGlvbihkb3VibGUgc2Vjb25kcyk7CisgICAgV0tfRVhQT1JUIHZvaWQgV0tSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWFuYWdlckZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOworICAgIFdL
X0VYUE9SVCB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXROb3RpZnlQYWdl
c1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wgdmFsdWUpOworICAgIFdLX0VYUE9SVCB2
b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXRTaG91bGRDbGFzc2lmeVJlc291
cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sIHZhbHVlKTsKKyAgICBXS19FWFBPUlQg
dm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0TWluaW11bVRpbWVCZXR3ZWVl
bkRhdGFSZWNvcmRzUmVtb3ZhbChkb3VibGUgc2Vjb25kcyk7CisgICAgV0tfRVhQT1JUIHZvaWQg
V0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclJlc2V0VG9Db25zaXN0ZW50U3RhdGUoKTsK
KworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAJ
KHJldmlzaW9uIDIxMTkzMSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJzaXRlRGF0
YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDczLDYgKzQ3MywzNSBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZldGNoRGF0YShPcHRpb25TCiAgICAgY2FsbGJhY2tB
Z2dyZWdhdG9yLT5jYWxsSWZOZWVkZWQoKTsKIH0KIAordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpm
ZXRjaERhdGFGb3JUb3BQcml2YXRlbHlPd25lZERvbWFpbnMoT3B0aW9uU2V0PFdlYnNpdGVEYXRh
VHlwZT4gZGF0YVR5cGVzLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4gZmV0Y2hP
cHRpb25zLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdG9wUHJpdmF0ZWx5T3duZWREb21haW5zLCBz
dGQ6OmZ1bmN0aW9uPHZvaWQoVmVjdG9yPFdlYnNpdGVEYXRhUmVjb3JkPik+IGNvbXBsZXRpb25I
YW5kbGVyKQoreworICAgIGZldGNoRGF0YShkYXRhVHlwZXMsIGZldGNoT3B0aW9ucywgW3RvcFBy
aXZhdGVseU93bmVkRG9tYWlucywgY29tcGxldGlvbkhhbmRsZXIsIHRoaXNdKGF1dG8gZXhpc3Rp
bmdEYXRhUmVjb3JkcykgeworICAgICAgICBWZWN0b3I8V2Vic2l0ZURhdGFSZWNvcmQ+IG1hdGNo
aW5nRGF0YVJlY29yZHM7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IGRvbWFpbnNXaXRoRGF0YVJl
Y29yZHM7CisgICAgICAgIGZvciAoYXV0byYgZGF0YVJlY29yZCA6IGV4aXN0aW5nRGF0YVJlY29y
ZHMpIHsKKyAgICAgICAgICAgIGJvb2wgZGF0YVJlY29yZEFkZGVkOworICAgICAgICAgICAgZm9y
IChhdXRvJiBkYXRhUmVjb3JkT3JpZ2luRGF0YSA6IGRhdGFSZWNvcmQub3JpZ2lucykgeworICAg
ICAgICAgICAgICAgIGRhdGFSZWNvcmRBZGRlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIFN0
cmluZyBkYXRhUmVjb3JkSG9zdCA9IGRhdGFSZWNvcmRPcmlnaW5EYXRhLnNlY3VyaXR5T3JpZ2lu
KCkuZ2V0KCkuaG9zdCgpOworICAgICAgICAgICAgICAgIGZvciAoYXV0byYgdG9wUHJpdmF0ZWx5
T3duZWREb21haW4gOiB0b3BQcml2YXRlbHlPd25lZERvbWFpbnMpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGRhdGFSZWNvcmRIb3N0LmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UodG9wUHJp
dmF0ZWx5T3duZWREb21haW4pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHN1ZmZp
eFN0YXJ0ID0gZGF0YVJlY29yZEhvc3QubGVuZ3RoKCkgLSB0b3BQcml2YXRlbHlPd25lZERvbWFp
bi5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3VmZml4U3RhcnQgfHwg
ZGF0YVJlY29yZEhvc3Rbc3VmZml4U3RhcnQgLSAxXSA9PSAnLicpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtYXRjaGluZ0RhdGFSZWNvcmRzLmFwcGVuZChkYXRhUmVjb3JkKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkb21haW5zV2l0aERhdGFSZWNvcmRzLmFwcGVuZCh0
b3BQcml2YXRlbHlPd25lZERvbWFpbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YVJlY29yZEFkZGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoZGF0YVJlY29yZEFkZGVkKQorICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihtYXRjaGluZ0RhdGFSZWNvcmRzKTsKKyAgICB9KTsKK30KKyAgICAK
IHN0YXRpYyBQcm9jZXNzQWNjZXNzVHlwZSBjb21wdXRlTmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBl
Rm9yRGF0YVJlbW92YWwoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBib29s
IGlzTm9uUGVyc2lzdGVudFN0b3JlKQogewogICAgIFByb2Nlc3NBY2Nlc3NUeXBlIHByb2Nlc3NB
Y2Nlc3NUeXBlID0gUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU7CkBAIC05OTgsNiArMTAyNywxNSBA
QCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uCiAgICAgY2FsbGJhY2tB
Z2dyZWdhdG9yLT5jYWxsSWZOZWVkZWQoKTsKIH0KIAordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpy
ZW1vdmVEYXRhRm9yVG9wUHJpdmF0ZWx5T3duZWREb21haW5zKE9wdGlvblNldDxXZWJzaXRlRGF0
YVR5cGU+IGRhdGFUeXBlcywgT3B0aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24+IGZldGNo
T3B0aW9ucywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHRvcFByaXZhdGVseU93bmVkRG9tYWlucywg
c3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGZldGNoRGF0
YUZvclRvcFByaXZhdGVseU93bmVkRG9tYWlucyhkYXRhVHlwZXMsIGZldGNoT3B0aW9ucywgdG9w
UHJpdmF0ZWx5T3duZWREb21haW5zLCBbZGF0YVR5cGVzLCBjb21wbGV0aW9uSGFuZGxlciwgdGhp
c10oYXV0byB3ZWJzaXRlRGF0YVJlY29yZHMpIHsKKyAgICAgICAgdGhpcy0+cmVtb3ZlRGF0YShk
YXRhVHlwZXMsIHdlYnNpdGVEYXRhUmVjb3JkcywgW2NvbXBsZXRpb25IYW5kbGVyXSgpIHsKKyAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgIH0pOworICAgIH0pOworfQor
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OndlYlBhZ2VXYXNBZGRlZChXZWJQYWdlUHJveHkmIHdl
YlBhZ2VQcm94eSkKIHsKICAgICBpZiAobV9zdG9yYWdlTWFuYWdlcikKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3Rv
cmUuaAkocmV2aXNpb24gMjExOTMxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYnNp
dGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtODQsOCArODQsMTAg
QEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGNsb25lU2Vzc2lvbkRhdGEoV2ViUGFnZVByb3h5
JiBzb3VyY2VQYWdlLCBXZWJQYWdlUHJveHkmIG5ld1BhZ2UpOwogCiAgICAgdm9pZCBmZXRjaERh
dGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIE9wdGlvblNldDxXZWJzaXRlRGF0YUZldGNo
T3B0aW9uPiwgc3RkOjpmdW5jdGlvbjx2b2lkIChWZWN0b3I8V2Vic2l0ZURhdGFSZWNvcmQ+KT4g
Y29tcGxldGlvbkhhbmRsZXIpOworICAgIHZvaWQgZmV0Y2hEYXRhRm9yVG9wUHJpdmF0ZWx5T3du
ZWREb21haW5zKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBPcHRpb25TZXQ8V2Vic2l0ZURh
dGFGZXRjaE9wdGlvbj4sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB0b3BQcml2YXRlbHlPd25lZERv
bWFpbnMsIHN0ZDo6ZnVuY3Rpb248dm9pZChWZWN0b3I8V2Vic2l0ZURhdGFSZWNvcmQ+KT4gY29t
cGxldGlvbkhhbmRsZXIpOwogICAgIHZvaWQgcmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURh
dGFUeXBlPiwgc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCBtb2RpZmllZFNp
bmNlLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGNvbXBsZXRpb25IYW5kbGVyKTsKICAgICB2b2lk
IHJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIGNvbnN0IFZlY3RvcjxXZWJz
aXRlRGF0YVJlY29yZD4mLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGNvbXBsZXRpb25IYW5kbGVy
KTsKKyAgICB2b2lkIHJlbW92ZURhdGFGb3JUb3BQcml2YXRlbHlPd25lZERvbWFpbnMoT3B0aW9u
U2V0PFdlYnNpdGVEYXRhVHlwZT4sIE9wdGlvblNldDxXZWJzaXRlRGF0YUZldGNoT3B0aW9uPiwg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHRvcFByaXZhdGVseU93bmVkRG9tYWlucywgc3RkOjpmdW5j
dGlvbjx2b2lkKCk+IGNvbXBsZXRpb25IYW5kbGVyKTsKIAogICAgIFN0b3JhZ2VNYW5hZ2VyKiBz
dG9yYWdlTWFuYWdlcigpIHsgcmV0dXJuIG1fc3RvcmFnZU1hbmFnZXIuZ2V0KCk7IH0KIApJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMjExOTMxKQorKysgU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQ2LDYgKzExNDYsMTAgQEAKIAkJ
NjUwMUJEMUExMkYxMjQzNDAwRTlGMjQ4IC8qIFdLQnVuZGxlSW5zcGVjdG9yLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1Qjg2RjE3MTJGMTFEN0Iw
MEI3REQ4QSAvKiBXS0J1bmRsZUluc3BlY3Rvci5jcHAgKi87IH07CiAJCTY1OUM1NTFFMTMwMDA2
NDEwMDI1QzBDMiAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VSZXNvdXJjZUxvYWRDbGllbnQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU0NkE4MjkxMzAw
MDE2NDAwMENFQjFDIC8qIEluamVjdGVkQnVuZGxlUGFnZVJlc291cmNlTG9hZENsaWVudC5jcHAg
Ki87IH07CiAJCTY1Qjg2RjFFMTJGMTFERTMwMEI3REQ4QSAvKiBXS0J1bmRsZUluc3BlY3Rvci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVCODZGMTgx
MkYxMUQ3QjAwQjdERDhBIC8qIFdLQnVuZGxlSW5zcGVjdG9yLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNkJFOTY5OUMxRTQzQjNGRjAwOEI3NDgz
IC8qIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZCRTk2OTlCMUU0M0IzRkYwMDhCNzQ4MyAvKiBX
S1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNkJFOTY5OUUxRTQzQjQxRDAwOEI3NDgzIC8qIFdL
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkJFOTY5OUQxRTQzQjQxRDAwOEI3NDgzIC8qIFdLUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwICovOyB9OworCQk2QkU5NjlBMDFFNDNCODZF
MDA4Qjc0ODMgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZCRTk2OTlGMUU0M0I4NkUwMDhC
NzQ4MyAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oICovOyB9OworCQk2QkU5
NjlBMjFFNDNCOEE0MDA4Qjc0ODMgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkJFOTY5
QTExRTQzQjhBNDAwOEI3NDgzIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNw
cCAqLzsgfTsKIAkJNkVFODQ5QzgxMzY4RDkzOTAwMzhENDgxIC8qIFdLSW5zcGVjdG9yUHJpdmF0
ZU1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVF
ODQ5QzYxMzY4RDkyRDAwMzhENDgxIC8qIFdLSW5zcGVjdG9yUHJpdmF0ZU1hYy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyOEU4NkYxMTc5NTE4
OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBpY2tlck1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI4RTg2RUYxNzk1MTg4QzAwODc4NzlFIC8qIFdlYkNv
bG9yUGlja2VyTWFjLmggKi87IH07CiAJCTcyOEU4NkYyMTc5NTE4OEMwMDg3ODc5RSAvKiBXZWJD
b2xvclBpY2tlck1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcyOEU4NkYwMTc5NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBpY2tlck1hYy5tbSAq
LzsgfTsKQEAgLTMzMjksNiArMzMzMywxMCBAQAogCQk2NTQ2QTgyQTEzMDAwMTY0MDAwQ0VCMUMg
LyogSW5qZWN0ZWRCdW5kbGVQYWdlUmVzb3VyY2VMb2FkQ2xpZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEluamVjdGVkQnVuZGxlUGFnZVJlc291cmNlTG9hZENsaWVudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NUI4NkYxNzEyRjExRDdCMDBCN0REOEEg
LyogV0tCdW5kbGVJbnNwZWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV0tCdW5kbGVJbnNwZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk2NUI4NkYxODEyRjExRDdCMDBCN0REOEEgLyogV0tCdW5kbGVJbnNwZWN0b3IuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tCdW5kbGVJbnNwZWN0b3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkJFOTY5OUIxRTQzQjNGRjAwOEI3NDgzIC8qIFdLUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk2QkU5Njk5RDFFNDNCNDFEMDA4Qjc0ODMgLyogV0tSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBX
S1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNkJFOTY5OUYxRTQzQjg2RTAwOEI3NDgzIC8qIFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NNYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTZCRTk2OUExMUU0M0I4QTQwMDhCNzQ4MyAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFu
YWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTZEOEE5MUE1MTFGMEVGRDEwMEREMDFGRSAvKiBjb20uYXBwbGUuV2ViUHJvY2Vzcy5zYi5pbiAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBjb20uYXBwbGUuV2ViUHJvY2Vzcy5zYi5pbjsgcGF0aCA9
IFdlYlByb2Nlc3MvY29tLmFwcGxlLldlYlByb2Nlc3Muc2IuaW47IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTZFRTg0OUM2MTM2OEQ5MkQwMDM4RDQ4MSAvKiBXS0luc3BlY3RvclByaXZh
dGVNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV0tJbnNwZWN0b3JQcml2
YXRlTWFjLmg7IHBhdGggPSBtYWMvV0tJbnNwZWN0b3JQcml2YXRlTWFjLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTcyOEU4NkVGMTc5NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBp
Y2tlck1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb2xvclBpY2tl
ck1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjUzNCw2ICs2NTQyLDggQEAK
IAkJCQlCQzExMUIwRDExMkY1RTRGMDAzMzdCQUIgLyogV2ViUHJvY2Vzc1Byb3h5LmNwcCAqLywK
IAkJCQlCQzAzMkRDRjEwRjQzODlGMDA1OEMxNUEgLyogV2ViUHJvY2Vzc1Byb3h5LmggKi8sCiAJ
CQkJQkNFRTdBQjMxMjgxNzA5NTAwOTgyN0RBIC8qIFdlYlByb2Nlc3NQcm94eS5tZXNzYWdlcy5p
biAqLywKKwkJCQk2QkU5Njk5RjFFNDNCODZFMDA4Qjc0ODMgLyogV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01hbmFnZXIuaCAqLywKKwkJCQk2QkU5NjlBMTFFNDNCOEE0MDA4Qjc0ODMgLyogV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwICovLAogCQkJCTdBOUNEOEMwMUM3Nzk4
NDkwMEQ5RjZDNyAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwICovLAogCQkJ
CTdBOUNEOEMxMUM3Nzk4NDkwMEQ5RjZDNyAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuaCAqLywKIAkJCQk3QTlDRDhDMjFDNzc5QUQ2MDBEOUY2QzcgLyogV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlLm1lc3NhZ2VzLmluICovLApAQCAtNjcyMiw2ICs2NzMyLDggQEAKIAkJ
CQk1MThBQ0FFOTEyQUVFNkJCMDBCMDRCODMgLyogV0tQcm90ZWN0aW9uU3BhY2VUeXBlcy5oICov
LAogCQkJCTMzMzY3NjM4MTMwQzk5REMwMDZDOURFMiAvKiBXS1Jlc291cmNlQ2FjaGVNYW5hZ2Vy
LmNwcCAqLywKIAkJCQkzMzM2NzYzOTEzMEM5OURDMDA2QzlERTIgLyogV0tSZXNvdXJjZUNhY2hl
TWFuYWdlci5oICovLAorCQkJCTZCRTk2OTlEMUU0M0I0MUQwMDhCNzQ4MyAvKiBXS1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcCAqLywKKwkJCQk2QkU5Njk5QjFFNDNCM0ZGMDA4Qjc0
ODMgLyogV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oICovLAogCQkJCTFBREU0NkIw
MTk1NEVDNjEwMDBGNzk4NSAvKiBXS1Nlc3Npb25TdGF0ZVJlZi5jcHAgKi8sCiAJCQkJMUFERTQ2
QjExOTU0RUM2MTAwMEY3OTg1IC8qIFdLU2Vzc2lvblN0YXRlUmVmLmggKi8sCiAJCQkJMzE0ODg4
RkUxRDkxQjExRDAwMzc3MDQyIC8qIFdLVGV4dENoZWNrZXIuY3BwICovLApAQCAtODU3NCw2ICs4
NTg2LDcgQEAKIAkJCQk5MzIxRDU4QTFBMzhGMTk2MDA4MDUyQkUgLyogV0tJbW1lZGlhdGVBY3Rp
b25UeXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUM4RTI5MzkxMjc2MUU1QjAwQkM3QkQwIC8q
IFdLSW5zcGVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjNDNzI1QjE5NkY2MDRFMDBBRURE
MEMgLyogV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3LmggaW4gSGVhZGVycyAqLywKKwkJCQk2QkU5
NjlBMDFFNDNCODZFMDA4Qjc0ODMgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE1NDI5M0E0MTk1QTQzREEwMDI3ODJDNyAvKiBXS0luc3Bl
Y3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkVF
ODQ5QzgxMzY4RDkzOTAwMzhENDgxIC8qIFdLSW5zcGVjdG9yUHJpdmF0ZU1hYy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTFBOUUxMEIxMzE1Q0QxODAwOUU3MDMxIC8qIFdLS2V5VmFsdWVTdG9yYWdl
TWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCkBAIC04NzU4LDYgKzg3NzEsNyBAQAogCQkJCTFBM0ND
MTY3MTg5MDZBQ0YwMDFFNkVEOCAvKiBXS1dlYlZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCTFB
REY1OTFCMTg5MDUyOEUwMDQzQzE0NSAvKiBXS1dlYlZpZXdDb25maWd1cmF0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkyRDdBQUZENjE4Qzk1NkFGMDBBN0FDRDQgLyogV0tXZWJWaWV3Q29uZmln
dXJhdGlvbkludGVybmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQk2QkU5Njk5QzFFNDNCM0ZGMDA4
Qjc0ODMgLyogV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMUFDMTQxNTExOEFDNDdFRTAwNkM2MDJDIC8qIFdLV2ViVmlld0NvbmZpZ3VyYXRpb25Q
cml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MURDNDU5QzFFM0RCQjI4MDBCMTFGNTEgLyog
TGliV2ViUlRDU29ja2V0Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDdBQUZEMzE4Qzg2
NDA2MDBBN0FDRDQgLyogV0tXZWJWaWV3Q29udGVudFByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywK
QEAgLTk5NzgsNiArOTk5Miw3IEBACiAJCQkJMzc2MDg4MUUxNTA0MTNFOTAwRkM4MkM3IC8qIFdl
YlJlbmRlck9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTBBRkZCOTE2NTQyMDQ4MDAx
QkEwNUUgLyogV2ViUmVzb3VyY2VMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFGMDYw
RTExNjU0MzE4NTAwRjMyODFCIC8qIFdlYlJlc291cmNlTG9hZGVyTWVzc2FnZVJlY2VpdmVyLmNw
cCBpbiBTb3VyY2VzICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2QkU5NjlB
MjFFNDNCOEE0MDA4Qjc0ODMgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNTFGMDYwRTExNjU0MzE4NTAwRjMyODFDIC8qIFdlYlJUQ1Nv
Y2tldE1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUYwNjBFMTE2NTQz
MTg1MDBGMzI4MkMgLyogV2ViUlRDUmVzb2x2ZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTFGMDYwRTExNjU0MzE4NTAwRjMyODFEIC8qIE5ldHdvcmtSVENTb2NrZXRN
ZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDE2OCw2ICsxMDE4Myw3IEBA
CiAJCQkJMzc5NDg0MDgxNTBDNEI5NzAwRTUyQ0U5IC8qIFdLUmVuZGVyTGF5ZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMzc2MDg4MjIxNTA0MTRGNzAwRkM4MkM3IC8qIFdLUmVuZGVyT2JqZWN0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMzMzY3NjNBMTMwQzk5REMwMDZDOURFMiAvKiBXS1Jl
c291cmNlQ2FjaGVNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA2QkU5Njk5RTFFNDNCNDFEMDA4Qjc0ODMgLyogV0tSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTdFMzc3ODE4RTRBNEZF
MDAzRDBGRkYgLyogV0tTY3JpcHRNZXNzYWdlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDQjRF
NTUxOEJCRTA0NDAwMEZDRkM5IC8qIFdLU2Nyb2xsVmlldy5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTUxQ0QxQzY2MUIzNEI5REMwMDE0MkNBNSAvKiBXS1NlY3VyaXR5T3JpZ2luLm1tIGluIFNvdXJj
ZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAJKHJl
dmlzaW9uIDIxMTkzMSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA5LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA5LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0xNjgsNyArMTY4LDcgQEAgV2ViUHJvY2Vzczo6V2ViUHJv
Y2VzcygpCiAjaWYgUExBVEZPUk0oSU9TKQogICAgICwgbV93ZWJTUUxpdGVEYXRhYmFzZVRyYWNr
ZXIoKnRoaXMpCiAjZW5kaWYKLSAgICAsIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JhZ2Uo
V2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjcmVhdGUoKSkKKyAgICAsIG1f
cmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6Y3JlYXRlKCkpCiB7CiAgICAgLy8gSW5pdGlhbGl6ZSBvdXIgcGxhdGZvcm0gc3Ry
YXRlZ2llcy4KICAgICBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmluaXRpYWxpemUoKTsKQEAgLTE5
MCw4ICsxOTAsOCBAQCBXZWJQcm9jZXNzOjpXZWJQcm9jZXNzKCkKIAogICAgIG1fcGx1Z0luQXV0
b1N0YXJ0T3JpZ2luSGFzaGVzLmFkZChTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwgSGFz
aE1hcDx1bnNpZ25lZCwgZG91YmxlPigpKTsKIAotICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWRPYnNlcnZlcigpLnNldFN0YXRpc3RpY3NTdG9yZShtX3Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yYWdlLmNvcHlSZWYoKSk7Ci0gICAgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmFn
ZS0+c2V0Tm90aWZpY2F0aW9uQ2FsbGJhY2soW3RoaXNdIHsKKyAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5zZXRTdGF0aXN0aWNzU3RvcmUobV9yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUuY29weVJlZigpKTsKKyAgICBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZS0+c2V0Tm90aWZpY2F0aW9uQ2FsbGJhY2soW3RoaXNdIHsKICAgICAgICAgaWYgKG1fc3Rh
dGlzdGljc0NoYW5nZWRUaW1lci5pc0FjdGl2ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICBtX3N0YXRpc3RpY3NDaGFuZ2VkVGltZXIuc3RhcnRPbmVTaG90KHN0ZDo6Y2hyb25vOjpz
ZWNvbmRzKDUpKTsKQEAgLTEzOTUsMTAgKzEzOTUsMTAgQEAgdm9pZCBXZWJQcm9jZXNzOjpub25W
aXNpYmxlUHJvY2Vzc0NsZWFudQogCiB2b2lkIFdlYlByb2Nlc3M6OnN0YXRpc3RpY3NDaGFuZ2Vk
VGltZXJGaXJlZCgpCiB7Ci0gICAgaWYgKG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JhZ2Ut
PmlzRW1wdHkoKSkKKyAgICBpZiAobV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUtPmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+
c2VuZChNZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzVXBkYXRlZChtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yYWdlLT50YWtl
U3RhdGlzdGljcygpKSwgMCk7CisgICAgcGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChN
ZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzVXBkYXRlZChtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS0+dGFrZVN0YXRpc3Rp
Y3MoKSksIDApOwogfQogCiB2b2lkIFdlYlByb2Nlc3M6OnNldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NFbmFibGVkKGJvb2wgZW5hYmxlZCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUHJvY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UHJvY2Vzcy5oCShyZXZpc2lvbiAyMTE5MzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlByb2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxNiw3ICs0MTYsNyBAQCBwcml2YXRl
OgogICAgIFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tlciBtX3dlYlNRTGl0ZURhdGFiYXNlVHJhY2tl
cjsKICNlbmRpZgogCi0gICAgUmVmPFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZT4gbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmFnZTsKKyAgICBSZWY8V2ViQ29yZTo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTsK
IAogICAgIHVuc2lnbmVkIG1fcGFnZXNNYXJraW5nTGF5ZXJzQXNWb2xhdGlsZSB7IDAgfTsKICAg
ICBib29sIG1fc3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXIgeyBmYWxzZSB9OwpJbmRleDog
VG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24g
MjExOTMyKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTEg
QEAKKzIwMTctMDItMDkgIEpvaG4gV2lsYW5kZXIgIDx3aWxhbmRlckBhcHBsZS5jb20+CisKKyAg
ICAgICAgVXBkYXRlcyB0byBSZXNvdXJjZSBMb2FkIFN0YXRpc3RpY3M6IEdldCB0aGUgcmlnaHQg
d2Vic2l0ZSBkYXRhIHN0b3JlIGFuZCBpbnRyb2R1Y2UgdGltZW91dCBmb3IgdXNlciBpbnRlcmFj
dGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY3
NDc0CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yNDY4MTgwOD4KKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzI0NzAzMjg2PgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzAyOTAyNzA+CisKKyAg
ICAgICAgVGhpcyBwYXRjaCBhZGRzIHRlc3QgaW5mcmFzdHJ1Y3R1cmUgdG8gYWxsb3cgdGVzdGlu
ZyAKKyAgICAgICAgb2YgdGhlIHZhcmlvdXMgcnVsZXMgaW4gcGxhY2UgZm9yIGRhdGEgcmVjb3Jk
cyByZW1vdmFsLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVy
LmlkbDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVk
QnVuZGxlLmNwcDoKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNz
YWdlVG9QYWdlKToKKyAgICAgICAgICAgIENhbGxiYWNrIG1lY2hhbmlzbSB0byB0ZWxsIHBhZ2Vz
IHRoYXQgYSB3ZWJzaXRlIGRhdGEgc3RvcmUKKyAgICAgICAgICAgIHNjYW4gaGFzIGhhcHBlbmVk
LgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5j
cHA6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNv
dXJjZSk6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmlzU3RhdGlzdGljc1ByZXZhbGVudFJl
c291cmNlKToKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0hhc0hhZFVz
ZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmlzU3RhdGlzdGljc0hh
c0hhZFVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRp
c3RpY3NUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6aW5zdGFsbFN0YXRpc3RpY3NEaWRNb2RpZnlEYXRhUmVjb3Jkc0NhbGxiYWNrKToKKyAgICAg
ICAgKFdUUjo6VGVzdFJ1bm5lcjo6c3RhdGlzdGljc0RpZE1vZGlmeURhdGFSZWNvcmRzQ2FsbGJh
Y2spOgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzdGF0aXN0aWNzRmlyZURhdGFNb2RpZmlj
YXRpb25IYW5kbGVyKToKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc05v
dGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQpOgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjpzZXRTdGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVj
b3Jkc1JlbW92YWwpOgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzTWlu
aW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OnN0YXRpc3RpY3NSZXNldFRvQ29uc2lzdGVudFN0YXRlKToKKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaDoKKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdENvbnRy
b2xsZXI6OnNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXVFI6OlRl
c3RDb250cm9sbGVyOjppc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChX
VFI6OlRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKToK
KyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmlzU3RhdGlzdGljc0hhc0hhZFVzZXJJbnRl
cmFjdGlvbik6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzVGlt
ZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpz
dGF0aXN0aWNzRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKToKKyAgICAgICAgKFdUUjo6VGVz
dENvbnRyb2xsZXI6OnNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVT
Y2FubmVkKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnNldFN0YXRpc3RpY3NTaG91
bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAgIChX
VFI6OlRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVlbkRhdGFS
ZWNvcmRzUmVtb3ZhbCk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpzdGF0aXN0aWNz
UmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0
Q29udHJvbGxlci5oOgorICAgICAgICAgICAgVGhlc2UgYXJlIGFsbCBjb25maWd1cmF0aW9uIGFu
ZCB0ZXN0IGZ1bmN0aW9ucy4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0
aW9uLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVTeW5jaHJv
bm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUpOgorCiAyMDE3LTAyLTA4ICBDaHJpcyBEdW1l
eiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgVXBkYXRlIHdlYi1wbGF0Zm9ybS10ZXN0
cyByZXNvdXJjZXMKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIu
Y3BwCShyZXZpc2lvbiAyMTE5MzEpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250
cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAsIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU1LDYgKzU1LDcgQEAK
ICNpbmNsdWRlIDxXZWJLaXQvV0tQbHVnaW5JbmZvcm1hdGlvbi5oPgogI2luY2x1ZGUgPFdlYktp
dC9XS1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5oPgogI2luY2x1ZGUgPFdlYktpdC9XS1Byb3RlY3Rp
b25TcGFjZS5oPgorI2luY2x1ZGUgPFdlYktpdC9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5h
Z2VyLmg+CiAjaW5jbHVkZSA8V2ViS2l0L1dLUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8V2ViS2l0
L1dLU2VjdXJpdHlPcmlnaW5SZWYuaD4KICNpbmNsdWRlIDxXZWJLaXQvV0tUZXh0Q2hlY2tlci5o
PgpAQCAtMjIwNiw2ICsyMjA3LDU1IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnNldElnbm9yZXNW
aWV3cG9ydFMKICAgICBXS1BhZ2VTZXRJZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cyhtX21haW5X
ZWJWaWV3LT5wYWdlKCksIGlnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzKTsKIH0KIAordm9pZCBU
ZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKFN0cmluZyBob3N0
TmFtZSwgYm9vbCB2YWx1ZSkKK3sKKyAgICBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2Vy
U2V0UHJldmFsZW50UmVzb3VyY2UoaG9zdE5hbWUsIHZhbHVlKTsKK30KKworYm9vbCBUZXN0Q29u
dHJvbGxlcjo6aXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoU3RyaW5nIGhvc3ROYW1lKQor
eworICAgIHJldHVybiBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VySXNQcmV2YWxlbnRS
ZXNvdXJjZShob3N0TmFtZSk7Cit9CisKK3ZvaWQgVGVzdENvbnRyb2xsZXI6OnNldFN0YXRpc3Rp
Y3NIYXNIYWRVc2VySW50ZXJhY3Rpb24oU3RyaW5nIGhvc3ROYW1lLCBib29sIHZhbHVlKQorewor
ICAgIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXRIYXNIYWRVc2VySW50ZXJhY3Rp
b24oaG9zdE5hbWUsIHZhbHVlKTsKK30KKworYm9vbCBUZXN0Q29udHJvbGxlcjo6aXNTdGF0aXN0
aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKFN0cmluZyBob3N0TmFtZSkKK3sKKyAgICByZXR1cm4g
V0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcklzSGFzSGFkVXNlckludGVyYWN0aW9uKGhv
c3ROYW1lKTsKK30KKwordm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc1RpbWVUb0xp
dmVVc2VySW50ZXJhY3Rpb24oZG91YmxlIHNlY29uZHMpCit7CisgICAgV0tSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWFuYWdlclNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oc2Vjb25kcyk7Cit9
CisKK3ZvaWQgVGVzdENvbnRyb2xsZXI6OnN0YXRpc3RpY3NGaXJlRGF0YU1vZGlmaWNhdGlvbkhh
bmRsZXIoKQoreworICAgIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJGaXJlRGF0YU1v
ZGlmaWNhdGlvbkhhbmRsZXIoKTsKK30KKyAgICAKK3ZvaWQgVGVzdENvbnRyb2xsZXI6OnNldFN0
YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wgdmFsdWUp
Cit7CisgICAgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNldE5vdGlmeVBhZ2VzV2hl
bkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQodmFsdWUpOworfQorICAgIAordm9pZCBUZXN0Q29udHJv
bGxlcjo6c2V0U3RhdGlzdGljc1Nob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29y
ZHNSZW1vdmFsKGJvb2wgdmFsdWUpCit7CisgICAgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFu
YWdlclNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKHZh
bHVlKTsKK30KKwordm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc01pbmltdW1UaW1l
QmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92YWwoZG91YmxlIHNlY29uZHMpCit7CisgICAgV0tSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNldE1pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jk
c1JlbW92YWwoc2Vjb25kcyk7Cit9Cit2b2lkIFRlc3RDb250cm9sbGVyOjpzdGF0aXN0aWNzUmVz
ZXRUb0NvbnNpc3RlbnRTdGF0ZSgpCit7CisgICAgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFu
YWdlclJlc2V0VG9Db25zaXN0ZW50U3RhdGUoKTsKK30KKyAgICAKICNpZiAhUExBVEZPUk0oQ09D
T0EpCiB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybVdpbGxSdW5UZXN0KGNvbnN0IFRlc3RJ
bnZvY2F0aW9uJikKIHsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xs
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVy
LmgJKHJldmlzaW9uIDIxMTkzMSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRy
b2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAsIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0OCw2ICsxNDgsMTcgQEAg
cHVibGljOgogCiAgICAgdm9pZCBzZXRTaG91bGREb3dubG9hZFVuZGlzcGxheWFibGVNSU1FVHlw
ZXMoYm9vbCB2YWx1ZSkgeyBtX3Nob3VsZERvd25sb2FkVW5kaXNwbGF5YWJsZU1JTUVUeXBlcyA9
IHZhbHVlOyB9CiAKKyAgICB2b2lkIHNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShTdHJp
bmcgaG9zdE5hbWUsIGJvb2wgdmFsdWUpOworICAgIGJvb2wgaXNTdGF0aXN0aWNzUHJldmFsZW50
UmVzb3VyY2UoU3RyaW5nIGhvc3ROYW1lKTsKKyAgICB2b2lkIHNldFN0YXRpc3RpY3NIYXNIYWRV
c2VySW50ZXJhY3Rpb24oU3RyaW5nIGhvc3ROYW1lLCBib29sIHZhbHVlKTsKKyAgICBib29sIGlz
U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbihTdHJpbmcgaG9zdE5hbWUpOworICAgIHZv
aWQgc2V0U3RhdGlzdGljc1RpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oZG91YmxlIHNlY29uZHMp
OworICAgIHZvaWQgc3RhdGlzdGljc0ZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOworICAg
IHZvaWQgc2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQo
Ym9vbCk7CisgICAgdm9pZCBzZXRTdGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZv
cmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCk7CisgICAgdm9pZCBzZXRTdGF0aXN0aWNzTWluaW11
bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbChkb3VibGUpOworICAgIHZvaWQgc3RhdGlz
dGljc1Jlc2V0VG9Db25zaXN0ZW50U3RhdGUoKTsKKwogcHJpdmF0ZToKICAgICBXS1JldGFpblB0
cjxXS1BhZ2VDb25maWd1cmF0aW9uUmVmPiBnZW5lcmF0ZVBhZ2VDb25maWd1cmF0aW9uKFdLQ29u
dGV4dENvbmZpZ3VyYXRpb25SZWYpOwogICAgIFdLUmV0YWluUHRyPFdLQ29udGV4dENvbmZpZ3Vy
YXRpb25SZWY+IGdlbmVyYXRlQ29udGV4dENvbmZpZ3VyYXRpb24oKSBjb25zdDsKSW5kZXg6IFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCShyZXZpc2lvbiAyMTE5MzEp
CisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50
ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBA
IC04ODYsNiArODg2LDg5IEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246
OmQKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKKyAgICBpZiAoV0tTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNv
dXJjZSIpKSB7CisgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tE
aWN0aW9uYXJ5R2V0VHlwZUlEKCkpOworCisgICAgICAgIFdLRGljdGlvbmFyeVJlZiBtZXNzYWdl
Qm9keURpY3Rpb25hcnkgPSBzdGF0aWNfY2FzdDxXS0RpY3Rpb25hcnlSZWY+KG1lc3NhZ2VCb2R5
KTsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGhvc3ROYW1lS2V5KEFkb3B0V0ss
IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpKTsKKyAgICAgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHZhbHVlS2V5KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJWYWx1ZSIpKTsKKworICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9
IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgaG9zdE5hbWVLZXkuZ2V0KCkpKTsKKyAgICAgICAgV0tCb29sZWFu
UmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVt
Rm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdmFsdWVLZXkuZ2V0KCkpKTsKKworICAgICAg
ICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291
cmNlKHRvV1RGU3RyaW5nKGhvc3ROYW1lKSwgV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZSIp
KSB7CisgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdH
ZXRUeXBlSUQoKSk7CisKKyAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2Fz
dDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOworICAgICAgICBib29sIGlzUHJldmFsZW50ID0g
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNl
KHRvV1RGU3RyaW5nKGhvc3ROYW1lKSk7CisgICAgICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4g
cmVzdWx0KEFkb3B0V0ssIFdLQm9vbGVhbkNyZWF0ZShpc1ByZXZhbGVudCkpOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbiIpKSB7
CisgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEaWN0aW9uYXJ5
R2V0VHlwZUlEKCkpOworICAgICAgICAKKyAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkp
OworICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVLZXkoQWRvcHRXSywg
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpOworICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gdmFsdWVLZXkoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlZhbHVlIikpOworICAgICAgICAKKyAgICAgICAgV0tTdHJpbmdSZWYgaG9z
dE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktl
eShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1lS2V5LmdldCgpKSk7CisgICAgICAgIFdL
Qm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5
R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHZhbHVlS2V5LmdldCgpKSk7Cisg
ICAgICAgIAorICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGlj
c0hhc0hhZFVzZXJJbnRlcmFjdGlvbih0b1dURlN0cmluZyhob3N0TmFtZSksIFdLQm9vbGVhbkdl
dFZhbHVlKHZhbHVlKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNTdGF0aXN0aWNz
SGFzSGFkVXNlckludGVyYWN0aW9uIikpIHsKKyAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1l
c3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKKyAgICAgICAgCisgICAgICAgIFdL
U3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5
KTsKKyAgICAgICAgYm9vbCBoYXNIYWRVc2VySW50ZXJhY3Rpb24gPSBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkuaXNTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKHRvV1RGU3RyaW5n
KGhvc3ROYW1lKSk7CisgICAgICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0KEFkb3B0
V0ssIFdLQm9vbGVhbkNyZWF0ZShoYXNIYWRVc2VySW50ZXJhY3Rpb24pKTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzVGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlv
biIpKSB7CisgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEb3Vi
bGVHZXRUeXBlSUQoKSk7CisgICAgICAgIFdLRG91YmxlUmVmIHNlY29uZHMgPSBzdGF0aWNfY2Fz
dDxXS0RvdWJsZVJlZj4obWVzc2FnZUJvZHkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkuc2V0U3RhdGlzdGljc1RpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oV0tEb3VibGVH
ZXRWYWx1ZShzZWNvbmRzKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICAK
KyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlN0YXRp
c3RpY3NGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIiKSkgeworICAgICAgICBUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkuc3RhdGlzdGljc0ZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigp
OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCisgICAgaWYgKFdLU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTdGF0aXN0aWNzTm90aWZ5UGFnZXNX
aGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCIpKSB7CisgICAgICAgIEFTU0VSVChXS0dldFR5cGVJ
RChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOworICAgICAgICBXS0Jvb2xl
YW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKKyAg
ICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NOb3RpZnlQYWdl
c1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7Cisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU3RhdGlzdGljc1Nob3VsZENsYXNzaWZ5UmVzb3Vy
Y2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsIikpIHsKKyAgICAgICAgQVNTRVJUKFdLR2V0VHlw
ZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7CisgICAgICAgIFdLQm9v
bGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwor
ICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1Nob3VsZENs
YXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKFdLQm9vbGVhbkdldFZhbHVl
KHZhbHVlKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc01pbmlt
dW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92YWwiKSkgeworICAgICAgICBBU1NFUlQoV0tH
ZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRG91YmxlR2V0VHlwZUlEKCkpOworICAgICAgICBX
S0RvdWJsZVJlZiBzZWNvbmRzID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KG1lc3NhZ2VCb2R5
KTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NNaW5p
bXVtVGltZUJldHdlZWVuRGF0YVJlY29yZHNSZW1vdmFsKFdLRG91YmxlR2V0VmFsdWUoc2Vjb25k
cykpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCisgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTdGF0aXN0aWNzUmVzZXRUb0Nv
bnNpc3RlbnRTdGF0ZSIpKSB7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5z
dGF0aXN0aWNzUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSgpOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gbnVsbHB0
cjsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRC
dW5kbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCShyZXZpc2lvbiAyMTE5MzEpCisrKyBUb29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI2Niw2ICsyNjYsMTEgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6ZGlkUmVjZWl2
ZU1lc3NhZ2VUbwogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJXZWJzaXRlRGF0YURlbGV0aW9uRm9yVG9w
UHJpdmF0ZWx5T3duZWREb21haW5zRmluaXNoZWQiKSkgeworICAgICAgICBtX3Rlc3RSdW5uZXIt
PnN0YXRpc3RpY3NEaWRNb2RpZnlEYXRhUmVjb3Jkc0NhbGxiYWNrKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZXJyb3JNZXNzYWdlTmFt
ZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXJyb3IiKSk7CiAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGVycm9yTWVzc2FnZUJvZHkoQWRvcHRXSywgV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlVua25vd24iKSk7CiAgICAgV0tCdW5kbGVQYWdlUG9z
dE1lc3NhZ2UocGFnZSwgZXJyb3JNZXNzYWdlTmFtZS5nZXQoKSwgZXJyb3JNZXNzYWdlQm9keS5n
ZXQoKSk7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RS
dW5uZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvVGVzdFJ1bm5lci5jcHAJKHJldmlzaW9uIDIxMTkzMSkKKysrIFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiU3RyaW5nRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAi
VGVzdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NUZXN0UnVubmVy
VXRpbHMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZE9ic2VydmVyLmg+CiAjaW5j
bHVkZSA8V2ViS2l0L1dLQnVuZGxlLmg+CiAjaW5jbHVkZSA8V2ViS2l0L1dLQnVuZGxlQmFja0Zv
cndhcmRMaXN0Lmg+CiAjaW5jbHVkZSA8V2ViS2l0L1dLQnVuZGxlRnJhbWUuaD4KQEAgLTYzNSw2
ICs2MzYsNyBAQCBlbnVtIHsKICAgICBXaWxsRW5kU3dpcGVDYWxsYmFja0lELAogICAgIERpZEVu
ZFN3aXBlQ2FsbGJhY2tJRCwKICAgICBEaWRSZW1vdmVTd2lwZVNuYXBzaG90Q2FsbGJhY2tJRCwK
KyAgICBTdGF0aXN0aWNzRGlkTW9kaWZ5RGF0YVJlY29yZHNDYWxsYmFja0lELAogICAgIEZpcnN0
VUlTY3JpcHRDYWxsYmFja0lEID0gMTAwCiB9OwogCkBAIC0xMTUyLDYgKzExNTQsMTI4IEBAIHZv
aWQgVGVzdFJ1bm5lcjo6Y2FsbERpZFJlbW92ZVN3aXBlU25hcHMKICAgICBjYWxsVGVzdFJ1bm5l
ckNhbGxiYWNrKERpZFJlbW92ZVN3aXBlU25hcHNob3RDYWxsYmFja0lEKTsKIH0KIAordm9pZCBU
ZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoSlNTdHJpbmdSZWYgaG9z
dE5hbWUsIGJvb2wgdmFsdWUpCit7CisgICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
Pj4ga2V5czsKKyAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOworCisg
ICAga2V5cy5hcHBlbmQoeyBBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
SG9zdE5hbWUiKSB9KTsKKyAgICB2YWx1ZXMuYXBwZW5kKHsgQWRvcHRXSywgV0tTdHJpbmdDcmVh
dGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpIH0pOworICAgIAorICAgIGtleXMuYXBwZW5kKHsgQWRv
cHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlZhbHVlIikgfSk7CisgICAgdmFs
dWVzLmFwcGVuZCh7IEFkb3B0V0ssIFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkgfSk7CisgICAgCisg
ICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzOworICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJh
d1ZhbHVlczsKKyAgICByYXdLZXlzLnJlc2l6ZShrZXlzLnNpemUoKSk7CisgICAgcmF3VmFsdWVz
LnJlc2l6ZSh2YWx1ZXMuc2l6ZSgpKTsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGtleXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7
CisgICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKKyAgICB9CisgICAgCisg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UiKSk7
CisgICAgV0tSZXRhaW5QdHI8V0tEaWN0aW9uYXJ5UmVmPiBtZXNzYWdlQm9keShBZG9wdFdLLCBX
S0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tl
eXMuc2l6ZSgpKSk7CisKKyAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2Fn
ZUJvZHkuZ2V0KCksIG51bGxwdHIpOworfQorCitib29sIFRlc3RSdW5uZXI6OmlzU3RhdGlzdGlj
c1ByZXZhbGVudFJlc291cmNlKEpTU3RyaW5nUmVmIGhvc3ROYW1lKQoreworICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiSXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UiKSk7CisgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0
aEpTU3RyaW5nKGhvc3ROYW1lKSk7CisgICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSAwOworICAg
IFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJvbm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3Nh
Z2VCb2R5LmdldCgpLCAmcmV0dXJuRGF0YSk7CisgICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVl
KHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkpOworfQorCit2b2lkIFRlc3RS
dW5uZXI6OnNldFN0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24oSlNTdHJpbmdSZWYgaG9z
dE5hbWUsIGJvb2wgdmFsdWUpCit7CisgICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
Pj4ga2V5czsKKyAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOworICAg
IAorICAgIGtleXMuYXBwZW5kKHsgQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIkhvc3ROYW1lIikgfSk7CisgICAgdmFsdWVzLmFwcGVuZCh7IEFkb3B0V0ssIFdLU3RyaW5n
Q3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSB9KTsKKyAgICAKKyAgICBrZXlzLmFwcGVuZCh7
IEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIpIH0pOworICAg
IHZhbHVlcy5hcHBlbmQoeyBBZG9wdFdLLCBXS0Jvb2xlYW5DcmVhdGUodmFsdWUpIH0pOworICAg
IAorICAgIFZlY3RvcjxXS1N0cmluZ1JlZj4gcmF3S2V5czsKKyAgICBWZWN0b3I8V0tUeXBlUmVm
PiByYXdWYWx1ZXM7CisgICAgcmF3S2V5cy5yZXNpemUoa2V5cy5zaXplKCkpOworICAgIHJhd1Zh
bHVlcy5yZXNpemUodmFsdWVzLnNpemUoKSk7CisgICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdl
dCgpOworICAgICAgICByYXdWYWx1ZXNbaV0gPSB2YWx1ZXNbaV0uZ2V0KCk7CisgICAgfQorICAg
IAorICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFj
dGlvbiIpKTsKKyAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5KEFk
b3B0V0ssIFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEo
KSwgcmF3S2V5cy5zaXplKCkpKTsKKyAgICAKKyAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01l
c3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworfQorCitib29sIFRlc3RSdW5uZXI6
OmlzU3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbihKU1N0cmluZ1JlZiBob3N0TmFtZSkK
K3sKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUoQWRvcHRXSywgV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIklzU3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFj
dGlvbiIpKTsKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZUJvZHkoQWRvcHRX
SywgV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpKTsKKyAgICBXS1R5cGVSZWYg
cmV0dXJuRGF0YSA9IDA7CisgICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZv
clRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNz
YWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKKyAgICByZXR1
cm4gV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRh
KSk7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc1RpbWVUb0xpdmVVc2VySW50
ZXJhY3Rpb24oZG91YmxlIHNlY29uZHMpCit7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRT
dGF0aXN0aWNzVGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbiIpKTsKKyAgICBXS1JldGFpblB0cjxX
S0RvdWJsZVJlZj4gbWVzc2FnZUJvZHkoQWRvcHRXSywgV0tEb3VibGVDcmVhdGUoc2Vjb25kcykp
OworICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwg
bnVsbHB0cik7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6aW5zdGFsbFN0YXRpc3RpY3NEaWRNb2Rp
ZnlEYXRhUmVjb3Jkc0NhbGxiYWNrKEpTVmFsdWVSZWYgY2FsbGJhY2spCit7CisgICAgY2FjaGVU
ZXN0UnVubmVyQ2FsbGJhY2soU3RhdGlzdGljc0RpZE1vZGlmeURhdGFSZWNvcmRzQ2FsbGJhY2tJ
RCwgY2FsbGJhY2spOworfQorCit2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NEaWRNb2RpZnlE
YXRhUmVjb3Jkc0NhbGxiYWNrKCkKK3sKKyAgICBjYWxsVGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRp
c3RpY3NEaWRNb2RpZnlEYXRhUmVjb3Jkc0NhbGxiYWNrSUQpOworfQorCit2b2lkIFRlc3RSdW5u
ZXI6OnN0YXRpc3RpY3NGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKQoreworICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiU3RhdGlzdGljc0ZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlciIpKTsK
KyAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCwgbnVsbHB0cik7Cit9CisKK3Zv
aWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2Vy
ZVNjYW5uZWQoYm9vbCB2YWx1ZSkKK3sKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVz
c2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3Rp
Y3NOb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkIikpOworICAgIFdLUmV0YWlu
UHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkoQWRvcHRXSywgV0tCb29sZWFuQ3JlYXRlKHZh
bHVlKSk7CisgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5Lmdl
dCgpLCBudWxscHRyKTsKK30KKwordm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzU2hvdWxk
Q2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCB2YWx1ZSkKK3sK
KyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJlc291cmNl
c0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCIpKTsKKyAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5S
ZWY+IG1lc3NhZ2VCb2R5KEFkb3B0V0ssIFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOworICAgIFdL
QnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
YnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7
Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlZW5E
YXRhUmVjb3Jkc1JlbW92YWwoZG91YmxlIHNlY29uZHMpCit7CisgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJTZXRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbCIp
KTsKKyAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4gbWVzc2FnZUJvZHkoQWRvcHRXSywgV0tE
b3VibGVDcmVhdGUoc2Vjb25kcykpOworICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgp
LCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7Cit9CisgICAgCit2b2lkIFRlc3RSdW5uZXI6
OnN0YXRpc3RpY3NSZXNldFRvQ29uc2lzdGVudFN0YXRlKCkKK3sKKyAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlN0YXRpc3RpY3NSZXNldFRvQ29uc2lzdGVudFN0YXRlIikpOworICAgIFdLQnVuZGxl
UG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxl
KCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwLCBudWxscHRyKTsKK30KKwogI2lmIFBMQVRGT1JNKE1B
QykKIHZvaWQgVGVzdFJ1bm5lcjo6Y29ubmVjdE1vY2tHYW1lcGFkKHVuc2lnbmVkIGluZGV4KQog
ewpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9U
ZXN0UnVubmVyLmgJKHJldmlzaW9uIDIxMTkzMSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQ1LDYgKzM0
NSwyMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRNb2NrR2FtZXBhZERldGFpbHModW5zaWduZWQg
aW5kZXgsIEpTU3RyaW5nUmVmIGdhbWVwYWRJRCwgdW5zaWduZWQgYXhpc0NvdW50LCB1bnNpZ25l
ZCBidXR0b25Db3VudCk7CiAgICAgdm9pZCBzZXRNb2NrR2FtZXBhZEF4aXNWYWx1ZSh1bnNpZ25l
ZCBpbmRleCwgdW5zaWduZWQgYXhpc0luZGV4LCBkb3VibGUgdmFsdWUpOwogICAgIHZvaWQgc2V0
TW9ja0dhbWVwYWRCdXR0b25WYWx1ZSh1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgYnV0dG9uSW5k
ZXgsIGRvdWJsZSB2YWx1ZSk7CisgICAgCisgICAgLy8gUmVzb3VyY2UgTG9hZCBTdGF0aXN0aWNz
CisgICAgdm9pZCBpbnN0YWxsU3RhdGlzdGljc0RpZE1vZGlmeURhdGFSZWNvcmRzQ2FsbGJhY2so
SlNWYWx1ZVJlZiBjYWxsYmFjayk7CisgICAgdm9pZCBzdGF0aXN0aWNzRGlkTW9kaWZ5RGF0YVJl
Y29yZHNDYWxsYmFjaygpOworICAgIHZvaWQgc3RhdGlzdGljc0ZpcmVEYXRhTW9kaWZpY2F0aW9u
SGFuZGxlcigpOworICAgIHZvaWQgc2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKEpTU3Ry
aW5nUmVmIGhvc3ROYW1lLCBib29sIHZhbHVlKTsKKyAgICBib29sIGlzU3RhdGlzdGljc1ByZXZh
bGVudFJlc291cmNlKEpTU3RyaW5nUmVmIGhvc3ROYW1lKTsKKyAgICB2b2lkIHNldFN0YXRpc3Rp
Y3NIYXNIYWRVc2VySW50ZXJhY3Rpb24oSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUp
OworICAgIGJvb2wgaXNTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKEpTU3RyaW5nUmVm
IGhvc3ROYW1lKTsKKyAgICB2b2lkIHNldFN0YXRpc3RpY3NUaW1lVG9MaXZlVXNlckludGVyYWN0
aW9uKGRvdWJsZSBzZWNvbmRzKTsKKyAgICB2b2lkIHNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1do
ZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wpOworICAgIHZvaWQgc2V0U3RhdGlzdGljc1No
b3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wpOworICAg
IHZvaWQgc2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92YWwo
ZG91YmxlKTsKKyAgICB2b2lkIHN0YXRpc3RpY3NSZXNldFRvQ29uc2lzdGVudFN0YXRlKCk7CiAK
IHByaXZhdGU6CiAgICAgVGVzdFJ1bm5lcigpOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIu
aWRsCShyZXZpc2lvbiAyMTE5MzEpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjQ2LDQg
KzI0NiwxNyBAQCBpbnRlcmZhY2UgVGVzdFJ1bm5lciB7CiAgICAgdm9pZCBzZXRNb2NrR2FtZXBh
ZEJ1dHRvblZhbHVlKHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgYnV0dG9uSW5k
ZXgsIGRvdWJsZSB2YWx1ZSk7CiAgICAgdm9pZCBjb25uZWN0TW9ja0dhbWVwYWQodW5zaWduZWQg
bG9uZyBpbmRleCk7CiAgICAgdm9pZCBkaXNjb25uZWN0TW9ja0dhbWVwYWQodW5zaWduZWQgbG9u
ZyBpbmRleCk7CisKKyAgICAvLyBSZXNvdXJjZSBMb2FkIFN0YXRpc3RpY3MKKyAgICB2b2lkIGlu
c3RhbGxTdGF0aXN0aWNzRGlkTW9kaWZ5RGF0YVJlY29yZHNDYWxsYmFjayhvYmplY3QgY2FsbGJh
Y2spOworICAgIHZvaWQgc2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKERPTVN0cmluZyBo
b3N0TmFtZSwgYm9vbGVhbiB2YWx1ZSk7CisgICAgYm9vbGVhbiBpc1N0YXRpc3RpY3NQcmV2YWxl
bnRSZXNvdXJjZShET01TdHJpbmcgaG9zdE5hbWUpOworICAgIHZvaWQgc2V0U3RhdGlzdGljc0hh
c0hhZFVzZXJJbnRlcmFjdGlvbihET01TdHJpbmcgaG9zdE5hbWUsIGJvb2xlYW4gdmFsdWUpOwor
ICAgIGJvb2xlYW4gaXNTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKERPTVN0cmluZyBo
b3N0TmFtZSk7CisgICAgdm9pZCBzZXRTdGF0aXN0aWNzVGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlv
bihkb3VibGUgc2Vjb25kcyk7CisgICAgdm9pZCBzdGF0aXN0aWNzRmlyZURhdGFNb2RpZmljYXRp
b25IYW5kbGVyKCk7CisgICAgdm9pZCBzZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuRGF0YVJl
Y29yZHNXZXJlU2Nhbm5lZChib29sZWFuIHZhbHVlKTsKKyAgICB2b2lkIHNldFN0YXRpc3RpY3NT
aG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sZWFuIHZh
bHVlKTsKKyAgICB2b2lkIHNldFN0YXRpc3RpY3NNaW5pbXVtVGltZUJldHdlZWVuRGF0YVJlY29y
ZHNSZW1vdmFsKGRvdWJsZSBzZWNvbmRzKTsKKyAgICB2b2lkIHN0YXRpc3RpY3NSZXNldFRvQ29u
c2lzdGVudFN0YXRlKCk7CiB9OwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjExOTMxKQorKysgTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTctMDIt
MDkgIEpvaG4gV2lsYW5kZXIgIDx3aWxhbmRlckBhcHBsZS5jb20+CisKKyAgICAgICAgVXBkYXRl
cyB0byBSZXNvdXJjZSBMb2FkIFN0YXRpc3RpY3M6IEdldCB0aGUgcmlnaHQgd2Vic2l0ZSBkYXRh
IHN0b3JlIGFuZCBpbnRyb2R1Y2UgdGltZW91dCBmb3IgdXNlciBpbnRlcmFjdGlvbgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY3NDc0CisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS8yNDY4MTgwOD4KKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI0NzAz
Mjg2PgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzAyOTAyNzA+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0RXhwZWN0YXRpb25zOgorICAg
ICAgICAgICAgTWFya2VkIGFzIGdlbmVyYWwgc2tpcCAoc2VlIFdLMiBleHBlY3RhdGlvbnMgYmVs
b3cpLgorICAgICAgICAqIGh0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlz
dGljcy9ub24tcHJldmFsZW50LXJlc291cmNlLXdpdGgtdXNlci1pbnRlcmFjdGlvbi1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzL25vbi1wcmV2YWxlbnQtcmVzb3VyY2Utd2l0aC11c2VyLWludGVyYWN0aW9uLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzL25vbi1wcmV2YWxlbnQtcmVzb3VyY2Utd2l0aG91dC11c2VyLWludGVyYWN0aW9uLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNl
TG9hZFN0YXRpc3RpY3Mvbm9uLXByZXZhbGVudC1yZXNvdXJjZS13aXRob3V0LXVzZXItaW50ZXJh
Y3Rpb24uaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNl
TG9hZFN0YXRpc3RpY3MvcHJldmFsZW50LXJlc291cmNlLXdpdGgtdXNlci1pbnRlcmFjdGlvbi1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzL3ByZXZhbGVudC1yZXNvdXJjZS13aXRoLXVzZXItaW50ZXJhY3Rpb24t
dGltZW91dC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvbG9hZGlu
Zy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3ByZXZhbGVudC1yZXNvdXJjZS13aXRoLXVzZXItaW50
ZXJhY3Rpb24tdGltZW91dC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2xvYWRp
bmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wcmV2YWxlbnQtcmVzb3VyY2Utd2l0aC11c2VyLWlu
dGVyYWN0aW9uLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvbG9hZGluZy9yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzL3ByZXZhbGVudC1yZXNvdXJjZS13aXRob3V0LXVzZXItaW50ZXJh
Y3Rpb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2xvYWRpbmcv
cmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wcmV2YWxlbnQtcmVzb3VyY2Utd2l0aG91dC11c2VyLWlu
dGVyYWN0aW9uLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3drMi9UZXN0RXhwZWN0
YXRpb25zOgorICAgICAgICAgICAgTWFya2VkIGFzIHZhbGlkIGZvciBXZWJLaXQyIG9ubHkuCisK
IDIwMTctMDItMDggIFJ5YW4gSGFkZGFkICA8cnlhbmhhZGRhZEBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmViYXNlbGluZSBlbW9qaSB0ZXN0cyBmb3IgaW9zLXNpbXVsYXRvci4KSW5kZXg6IExheW91
dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvVGVzdEV4
cGVjdGF0aW9ucwkocmV2aXNpb24gMjExOTMxKQorKysgTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0
aW9ucwkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsNyBAQCBodHRwL3Rlc3RzL3F1aWNrbG9v
ayBbIFNraXAgXQogIyBUaGVzZSB0ZXN0cyBhcmUgV2ViS2l0Mi1vbmx5CiBodHRwL3Rlc3RzL2Fw
cGNhY2hlL2RlY2lkZS1uYXZpZ2F0aW9uLXBvbGljeS1hZnRlci1kZWxheS5odG1sIFsgU2tpcCBd
CiBodHRwL3Rlc3RzL21pc2Mvd2lsbC1zZW5kLXJlcXVlc3Qtd2l0aC1jbGllbnQtcHJvdmlkZWQt
aHR0cC1ib2R5Lmh0bWwgWyBTa2lwIF0KK2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzLyBbIFNraXAgXQogCiAjIE9ubHkgTWFjIGFuZCBpT1MgaGF2ZSBhbiBpbXBsZW1l
bnRhdGlvbiBvZiBVSVNjcmlwdENvbnRyb2xsZXI6OmRvQXN5bmNUYXNrKCkuCiBmYXN0L2hhcm5l
c3MvdWlzY3JpcHRjb250cm9sbGVyIFsgU2tpcCBdCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9ub24tcHJldmFsZW50LXJlc291cmNl
LXdpdGgtdXNlci1pbnRlcmFjdGlvbi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3Mvbm9uLXByZXZh
bGVudC1yZXNvdXJjZS13aXRoLXVzZXItaW50ZXJhY3Rpb24tZXhwZWN0ZWQudHh0CShub25leGlz
dGVudCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzL25vbi1wcmV2YWxlbnQtcmVzb3VyY2Utd2l0aC11c2VyLWludGVyYWN0aW9uLWV4cGVj
dGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDggQEAKK21haW4gZnJhbWUgLSBkaWRT
dGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lCittYWluIGZyYW1lIC0gZGlkQ29tbWl0TG9hZEZv
ckZyYW1lCittYWluIGZyYW1lIC0gZGlkUmVjZWl2ZVRpdGxlOiBUZXN0cyBmb3IgTm9uLVByZXZh
bGVudCBSZXNvdXJjZSBXaXRoIFVzZXIgSW50ZXJhY3Rpb24KK21haW4gZnJhbWUgLSBkaWRGaW5p
c2hEb2N1bWVudExvYWRGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRpZEhhbmRsZU9ubG9hZEV2ZW50
c0ZvckZyYW1lCittYWluIGZyYW1lIC0gZGlkRmluaXNoTG9hZEZvckZyYW1lCitQQVNTIENvb2tp
ZSBub3QgZGVsZXRlZC4KKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jl
c291cmNlTG9hZFN0YXRpc3RpY3Mvbm9uLXByZXZhbGVudC1yZXNvdXJjZS13aXRoLXVzZXItaW50
ZXJhY3Rpb24uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRp
bmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9ub24tcHJldmFsZW50LXJlc291cmNlLXdpdGgtdXNl
ci1pbnRlcmFjdGlvbi5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVz
dHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL25vbi1wcmV2YWxlbnQtcmVzb3VyY2Ut
d2l0aC11c2VyLWludGVyYWN0aW9uLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NiBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKyAgICA8bWV0YSBj
aGFyc2V0PSJVVEYtOCI+CisgICAgPHRpdGxlPlRlc3RzIGZvciBOb24tUHJldmFsZW50IFJlc291
cmNlIFdpdGggVXNlciBJbnRlcmFjdGlvbjwvdGl0bGU+CisgICAgPHNjcmlwdCBzcmM9Ii4uLy4u
L3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxz
Y3JpcHQ+CisgICAgY29uc3QgaG9zdFVuZGVyVGVzdCA9ICIxMjcuMC4wLjE6ODAwMCI7CisgICAg
Y29uc3Qgc3RhdGlzdGljc1VybCA9ICJodHRwOi8vIiArIGhvc3RVbmRlclRlc3QgKyAiL3RlbXAi
OworICAgIGNvbnN0IG90aGVyUHJldmFsZW50VXJsID0gImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC90
ZW1wIjsKKyAgICBmdW5jdGlvbiBydW5UZXN0UnVubmVyVGVzdCgpIHsKKyAgICAgICAgaWYgKGRv
Y3VtZW50LmNvb2tpZSAhPT0gIiIpCisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJkb2N1bWVudC5j
b29raWUgbm90IGVtcHR5LiIpOworICAgICAgICBjb25zdCBjb29raWUgPSAidGVzdENvb2tpZT10
ZXN0VmFsdWUiOworICAgICAgICBkb2N1bWVudC5jb29raWUgPSBjb29raWUgKyAiOyBtYXgtYWdl
PTEwMDsiOworICAgICAgICBpZiAoZG9jdW1lbnQuY29va2llICE9PSBjb29raWUpCisgICAgICAg
ICAgICB0ZXN0RmFpbGVkKCJkb2N1bWVudC5jb29raWUgZGlkIG5vdCBnZXQgc2V0LiIpOworCisg
ICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKHN0YXRpc3Rp
Y3NVcmwsIGZhbHNlKTsKKyAgICAgICAgaWYgKHRlc3RSdW5uZXIuaXNTdGF0aXN0aWNzUHJldmFs
ZW50UmVzb3VyY2Uoc3RhdGlzdGljc1VybCkpCisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJIb3N0
IGRpZCBub3QgZ2V0IHNldCBhcyBub24tcHJldmFsZW50IHJlc291cmNlLiIpOworCisgICAgICAg
IC8vIFRoaXMgaXMgZG9uZSB0byBub3QgaGF2ZSBhbiBlbXB0eSBzZXQgb2YgcHJldmFsZW50IHJl
c291cmNlcy4KKyAgICAgICAgLy8gT3RoZXJ3aXNlIGRhdGEgcmVjb3JkcyBhcmUgbmV2ZXIgc2Nh
bm5lZC4KKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2Uo
b3RoZXJQcmV2YWxlbnRVcmwsIHRydWUpOworICAgICAgICBpZiAoIXRlc3RSdW5uZXIuaXNTdGF0
aXN0aWNzUHJldmFsZW50UmVzb3VyY2Uob3RoZXJQcmV2YWxlbnRVcmwpKQorICAgICAgICAgICAg
dGVzdEZhaWxlZCgiT3RoZXIgaG9zdCBkaWQgbm90IGdldCBzZXQgYXMgcHJldmFsZW50IHJlc291
cmNlLiIpOworCisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRl
cmFjdGlvbihzdGF0aXN0aWNzVXJsLCB0cnVlKTsKKyAgICAgICAgaWYgKCF0ZXN0UnVubmVyLmlz
U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbihzdGF0aXN0aWNzVXJsKSkKKyAgICAgICAg
ICAgIHRlc3RGYWlsZWQoIkhvc3QgZGlkIG5vdCBnZXQgbG9nZ2VkIGZvciB1c2VyIGludGVyYWN0
aW9uLiIpOworCisgICAgICAgIHRlc3RSdW5uZXIuaW5zdGFsbFN0YXRpc3RpY3NEaWRNb2RpZnlE
YXRhUmVjb3Jkc0NhbGxiYWNrKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgaWYgKGRvY3VtZW50
LmNvb2tpZSA9PT0gY29va2llKQorICAgICAgICAgICAgICAgIHRlc3RQYXNzZWQoIkNvb2tpZSBu
b3QgZGVsZXRlZC4iKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0ZXN0RmFp
bGVkKCJDb29raWUgZGVsZXRlZCBvciBkb2N1bWVudC5jb29raWUgY29udGFpbnMgb3RoZXIgY29v
a2llczogIiArIGRvY3VtZW50LmNvb2tpZSk7CisgICAgICAgICAgICB0ZXN0UnVubmVyLnN0YXRp
c3RpY3NSZXNldFRvQ29uc2lzdGVudFN0YXRlKCk7CisgICAgICAgICAgICB0ZXN0UnVubmVyLm5v
dGlmeURvbmUoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGlj
c1Nob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGZhbHNlKTsK
KyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVlbkRhdGFS
ZWNvcmRzUmVtb3ZhbCgwKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zdGF0aXN0aWNzRmlyZURhdGFN
b2RpZmljYXRpb25IYW5kbGVyKCk7CisgICAgfQorCisgICAgaWYgKGRvY3VtZW50LmxvY2F0aW9u
Lmhvc3QgPT09IGhvc3RVbmRlclRlc3QgJiYgd2luZG93LnRlc3RSdW5uZXIgJiYgd2luZG93Lmlu
dGVybmFscykgeworICAgICAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAg
aW50ZXJuYWxzLnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKHRydWUpOworICAgICAg
ICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVT
Y2FubmVkKHRydWUpOworICAgICAgICBydW5UZXN0UnVubmVyVGVzdCgpOworICAgIH0KKzwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL25v
bi1wcmV2YWxlbnQtcmVzb3VyY2Utd2l0aG91dC11c2VyLWludGVyYWN0aW9uLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VM
b2FkU3RhdGlzdGljcy9ub24tcHJldmFsZW50LXJlc291cmNlLXdpdGhvdXQtdXNlci1pbnRlcmFj
dGlvbi1leHBlY3RlZC50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3Mvbm9uLXByZXZhbGVudC1yZXNvdXJjZS13
aXRob3V0LXVzZXItaW50ZXJhY3Rpb24tZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsOCBAQAorbWFpbiBmcmFtZSAtIGRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUK
K21haW4gZnJhbWUgLSBkaWRDb21taXRMb2FkRm9yRnJhbWUKK21haW4gZnJhbWUgLSBkaWRSZWNl
aXZlVGl0bGU6IFRlc3RzIGZvciBOb24tUHJldmFsZW50IFJlc291cmNlIFdpdGhvdXQgVXNlciBJ
bnRlcmFjdGlvbgorbWFpbiBmcmFtZSAtIGRpZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1lCitt
YWluIGZyYW1lIC0gZGlkSGFuZGxlT25sb2FkRXZlbnRzRm9yRnJhbWUKK21haW4gZnJhbWUgLSBk
aWRGaW5pc2hMb2FkRm9yRnJhbWUKK1BBU1MgQ29va2llIG5vdCBkZWxldGVkLgorCkluZGV4OiBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9ub24t
cHJldmFsZW50LXJlc291cmNlLXdpdGhvdXQtdXNlci1pbnRlcmFjdGlvbi5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzL25vbi1wcmV2YWxlbnQtcmVzb3VyY2Utd2l0aG91dC11c2VyLWludGVyYWN0aW9uLmh0bWwJ
KG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNl
TG9hZFN0YXRpc3RpY3Mvbm9uLXByZXZhbGVudC1yZXNvdXJjZS13aXRob3V0LXVzZXItaW50ZXJh
Y3Rpb24uaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2IEBACis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04Ij4K
KyAgICA8dGl0bGU+VGVzdHMgZm9yIE5vbi1QcmV2YWxlbnQgUmVzb3VyY2UgV2l0aG91dCBVc2Vy
IEludGVyYWN0aW9uPC90aXRsZT4KKyAgICA8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pz
LXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KKyAgICBj
b25zdCBob3N0VW5kZXJUZXN0ID0gIjEyNy4wLjAuMTo4MDAwIjsKKyAgICBjb25zdCBzdGF0aXN0
aWNzVXJsID0gImh0dHA6Ly8iICsgaG9zdFVuZGVyVGVzdCArICIvdGVtcCI7CisgICAgY29uc3Qg
b3RoZXJQcmV2YWxlbnRVcmwgPSAiaHR0cDovL2xvY2FsaG9zdDo4MDAwL3RlbXAiOworICAgIGZ1
bmN0aW9uIHJ1blRlc3RSdW5uZXJUZXN0KCkgeworICAgICAgICBpZiAoZG9jdW1lbnQuY29va2ll
ICE9PSAiIikKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoImRvY3VtZW50LmNvb2tpZSBub3QgZW1w
dHkuIik7CisgICAgICAgIGNvbnN0IGNvb2tpZSA9ICJ0ZXN0Q29va2llPXRlc3RWYWx1ZSI7Cisg
ICAgICAgIGRvY3VtZW50LmNvb2tpZSA9IGNvb2tpZSArICI7IG1heC1hZ2U9MTAwOyI7CisgICAg
ICAgIGlmIChkb2N1bWVudC5jb29raWUgIT09IGNvb2tpZSkKKyAgICAgICAgICAgIHRlc3RGYWls
ZWQoImRvY3VtZW50LmNvb2tpZSBkaWQgbm90IGdldCBzZXQuIik7CisKKyAgICAgICAgdGVzdFJ1
bm5lci5zZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2Uoc3RhdGlzdGljc1VybCwgZmFsc2Up
OworICAgICAgICBpZiAodGVzdFJ1bm5lci5pc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShz
dGF0aXN0aWNzVXJsKSkKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIkhvc3QgZGlkIG5vdCBnZXQg
c2V0IGFzIG5vbi1wcmV2YWxlbnQgcmVzb3VyY2UuIik7CisKKyAgICAgICAgLy8gVGhpcyBpcyBk
b25lIHRvIG5vdCBoYXZlIGFuIGVtcHR5IHNldCBvZiBwcmV2YWxlbnQgcmVzb3VyY2VzLgorICAg
ICAgICAvLyBPdGhlcndpc2UgZGF0YSByZWNvcmRzIGFyZSBuZXZlciBzY2FubmVkLgorICAgICAg
ICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShvdGhlclByZXZhbGVu
dFVybCwgdHJ1ZSk7CisgICAgICAgIGlmICghdGVzdFJ1bm5lci5pc1N0YXRpc3RpY3NQcmV2YWxl
bnRSZXNvdXJjZShvdGhlclByZXZhbGVudFVybCkpCisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJP
dGhlciBob3N0IGRpZCBub3QgZ2V0IHNldCBhcyBwcmV2YWxlbnQgcmVzb3VyY2UuIik7CisKKyAg
ICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKHN0YXRp
c3RpY3NVcmwsIGZhbHNlKTsKKyAgICAgICAgaWYgKHRlc3RSdW5uZXIuaXNTdGF0aXN0aWNzSGFz
SGFkVXNlckludGVyYWN0aW9uKHN0YXRpc3RpY3NVcmwpKQorICAgICAgICAgICAgdGVzdEZhaWxl
ZCgiSG9zdCBkaWQgbm90IGdldCBjbGVhcmVkIG9mIHVzZXIgaW50ZXJhY3Rpb24uIik7CisKKyAg
ICAgICAgdGVzdFJ1bm5lci5pbnN0YWxsU3RhdGlzdGljc0RpZE1vZGlmeURhdGFSZWNvcmRzQ2Fs
bGJhY2soZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBpZiAoZG9jdW1lbnQuY29va2llID09PSBj
b29raWUpCisgICAgICAgICAgICAgICAgdGVzdFBhc3NlZCgiQ29va2llIG5vdCBkZWxldGVkLiIp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoIkNvb2tpZSBk
ZWxldGVkIG9yIGRvY3VtZW50LmNvb2tpZSBjb250YWlucyBvdGhlciBjb29raWVzOiAiICsgZG9j
dW1lbnQuY29va2llKTsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIuc3RhdGlzdGljc1Jlc2V0VG9D
b25zaXN0ZW50U3RhdGUoKTsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOwor
ICAgICAgICB9KTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU2hvdWxkQ2xhc3Np
ZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoZmFsc2UpOworICAgICAgICB0ZXN0
UnVubmVyLnNldFN0YXRpc3RpY3NNaW5pbXVtVGltZUJldHdlZWVuRGF0YVJlY29yZHNSZW1vdmFs
KDApOworICAgICAgICB0ZXN0UnVubmVyLnN0YXRpc3RpY3NGaXJlRGF0YU1vZGlmaWNhdGlvbkhh
bmRsZXIoKTsKKyAgICB9CisKKyAgICBpZiAoZG9jdW1lbnQubG9jYXRpb24uaG9zdCA9PT0gaG9z
dFVuZGVyVGVzdCAmJiB3aW5kb3cudGVzdFJ1bm5lciAmJiB3aW5kb3cuaW50ZXJuYWxzKSB7Cisg
ICAgICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICBpbnRlcm5hbHMuc2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQodHJ1ZSk7CisgICAgICAgIHRlc3RSdW5uZXIu
c2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQodHJ1ZSk7
CisgICAgICAgIHJ1blRlc3RSdW5uZXJUZXN0KCk7CisgICAgfQorPC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcHJldmFsZW50LXJlc291
cmNlLXdpdGgtdXNlci1pbnRlcmFjdGlvbi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcHJldmFs
ZW50LXJlc291cmNlLXdpdGgtdXNlci1pbnRlcmFjdGlvbi1leHBlY3RlZC50eHQJKG5vbmV4aXN0
ZW50KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRp
c3RpY3MvcHJldmFsZW50LXJlc291cmNlLXdpdGgtdXNlci1pbnRlcmFjdGlvbi1leHBlY3RlZC50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4IEBACittYWluIGZyYW1lIC0gZGlkU3RhcnRQ
cm92aXNpb25hbExvYWRGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRpZENvbW1pdExvYWRGb3JGcmFt
ZQorbWFpbiBmcmFtZSAtIGRpZFJlY2VpdmVUaXRsZTogVGVzdHMgZm9yIFByZXZhbGVudCBSZXNv
dXJjZSBXaXRoIFVzZXIgSW50ZXJhY3Rpb24KK21haW4gZnJhbWUgLSBkaWRGaW5pc2hEb2N1bWVu
dExvYWRGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRpZEhhbmRsZU9ubG9hZEV2ZW50c0ZvckZyYW1l
CittYWluIGZyYW1lIC0gZGlkRmluaXNoTG9hZEZvckZyYW1lCitQQVNTIENvb2tpZSBub3QgZGVs
ZXRlZC4KKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9h
ZFN0YXRpc3RpY3MvcHJldmFsZW50LXJlc291cmNlLXdpdGgtdXNlci1pbnRlcmFjdGlvbi10aW1l
b3V0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xv
YWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wcmV2YWxlbnQtcmVzb3VyY2Utd2l0aC11c2Vy
LWludGVyYWN0aW9uLXRpbWVvdXQtZXhwZWN0ZWQudHh0CShub25leGlzdGVudCkKKysrIExheW91
dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3ByZXZhbGVu
dC1yZXNvdXJjZS13aXRoLXVzZXItaW50ZXJhY3Rpb24tdGltZW91dC1leHBlY3RlZC50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw4IEBACittYWluIGZyYW1lIC0gZGlkU3RhcnRQcm92aXNp
b25hbExvYWRGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRpZENvbW1pdExvYWRGb3JGcmFtZQorbWFp
biBmcmFtZSAtIGRpZFJlY2VpdmVUaXRsZTogVGVzdHMgZm9yIFByZXZhbGVudCBSZXNvdXJjZSBX
aXRoIFVzZXIgSW50ZXJhY3Rpb24gVGltZW91dAorbWFpbiBmcmFtZSAtIGRpZEZpbmlzaERvY3Vt
ZW50TG9hZEZvckZyYW1lCittYWluIGZyYW1lIC0gZGlkSGFuZGxlT25sb2FkRXZlbnRzRm9yRnJh
bWUKK21haW4gZnJhbWUgLSBkaWRGaW5pc2hMb2FkRm9yRnJhbWUKK1BBU1MgQ29va2llIGRlbGV0
ZWQuCisKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzL3ByZXZhbGVudC1yZXNvdXJjZS13aXRoLXVzZXItaW50ZXJhY3Rpb24tdGltZW91
dC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzL3ByZXZhbGVudC1yZXNvdXJjZS13aXRoLXVzZXItaW50ZXJhY3Rp
b24tdGltZW91dC5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMv
bG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3ByZXZhbGVudC1yZXNvdXJjZS13aXRoLXVz
ZXItaW50ZXJhY3Rpb24tdGltZW91dC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAg
QEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+CisgICAgPG1ldGEg
Y2hhcnNldD0iVVRGLTgiPgorICAgIDx0aXRsZT5UZXN0cyBmb3IgUHJldmFsZW50IFJlc291cmNl
IFdpdGggVXNlciBJbnRlcmFjdGlvbiBUaW1lb3V0PC90aXRsZT4KKyAgICA8c2NyaXB0IHNyYz0i
Li4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorPHNjcmlwdD4KKyAgICBjb25zdCBob3N0VW5kZXJUZXN0ID0gIjEyNy4wLjAuMTo4MDAwIjsK
KyAgICBjb25zdCBzdGF0aXN0aWNzVXJsID0gImh0dHA6Ly8iICsgaG9zdFVuZGVyVGVzdCArICIv
dGVtcCI7CisgICAgZnVuY3Rpb24gcnVuVGVzdFJ1bm5lclRlc3QoKSB7CisgICAgICAgIGlmIChk
b2N1bWVudC5jb29raWUgIT09ICIiKQorICAgICAgICAgICAgdGVzdEZhaWxlZCgiZG9jdW1lbnQu
Y29va2llIG5vdCBlbXB0eS4iKTsKKyAgICAgICAgY29uc3QgY29va2llID0gInRlc3RDb29raWU9
dGVzdFZhbHVlIjsKKyAgICAgICAgZG9jdW1lbnQuY29va2llID0gY29va2llICsgIjsgbWF4LWFn
ZT0xMDA7IjsKKyAgICAgICAgaWYgKGRvY3VtZW50LmNvb2tpZSAhPT0gY29va2llKQorICAgICAg
ICAgICAgdGVzdEZhaWxlZCgiZG9jdW1lbnQuY29va2llIGRpZCBub3QgZ2V0IHNldC4iKTsKKwor
ICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShzdGF0aXN0
aWNzVXJsLCB0cnVlKTsKKyAgICAgICAgaWYgKCF0ZXN0UnVubmVyLmlzU3RhdGlzdGljc1ByZXZh
bGVudFJlc291cmNlKHN0YXRpc3RpY3NVcmwpKQorICAgICAgICAgICAgdGVzdEZhaWxlZCgiSG9z
dCBkaWQgbm90IGdldCBzZXQgYXMgcHJldmFsZW50IHJlc291cmNlLiIpOworCisgICAgICAgIHRl
c3RSdW5uZXIuc2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbihzdGF0aXN0aWNzVXJs
LCB0cnVlKTsKKyAgICAgICAgaWYgKCF0ZXN0UnVubmVyLmlzU3RhdGlzdGljc0hhc0hhZFVzZXJJ
bnRlcmFjdGlvbihzdGF0aXN0aWNzVXJsKSkKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIkhvc3Qg
ZGlkIG5vdCBnZXQgbG9nZ2VkIGZvciB1c2VyIGludGVyYWN0aW9uLiIpOworCisgICAgICAgIHRl
c3RSdW5uZXIuaW5zdGFsbFN0YXRpc3RpY3NEaWRNb2RpZnlEYXRhUmVjb3Jkc0NhbGxiYWNrKGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgaWYgKGRvY3VtZW50LmNvb2tpZSAhPT0gIiIpCisgICAg
ICAgICAgICAgICAgdGVzdEZhaWxlZCgiQ29va2llIG5vdCBkZWxldGVkOiAiICsgZG9jdW1lbnQu
Y29va2llKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0ZXN0UGFzc2VkKCJD
b29raWUgZGVsZXRlZC4iKTsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIuc3RhdGlzdGljc1Jlc2V0
VG9Db25zaXN0ZW50U3RhdGUoKTsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgp
OworICAgICAgICB9KTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU2hvdWxkQ2xh
c3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoZmFsc2UpOworICAgICAgICB0
ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NNaW5pbXVtVGltZUJldHdlZWVuRGF0YVJlY29yZHNSZW1v
dmFsKDApOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NUaW1lVG9MaXZlVXNlcklu
dGVyYWN0aW9uKDApOworICAgICAgICBzZXRUaW1lb3V0KCJ0ZXN0UnVubmVyLnN0YXRpc3RpY3NG
aXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKSIsIDEwMDApOworICAgIH0KKworICAgIGlmIChk
b2N1bWVudC5sb2NhdGlvbi5ob3N0ID09PSBob3N0VW5kZXJUZXN0ICYmIHdpbmRvdy50ZXN0UnVu
bmVyICYmIHdpbmRvdy5pbnRlcm5hbHMpIHsKKyAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxE
b25lKCk7CisgICAgICAgIGludGVybmFscy5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxl
ZCh0cnVlKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVu
RGF0YVJlY29yZHNXZXJlU2Nhbm5lZCh0cnVlKTsKKyAgICAgICAgcnVuVGVzdFJ1bm5lclRlc3Qo
KTsKKyAgICB9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VM
b2FkU3RhdGlzdGljcy9wcmV2YWxlbnQtcmVzb3VyY2Utd2l0aC11c2VyLWludGVyYWN0aW9uLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNl
TG9hZFN0YXRpc3RpY3MvcHJldmFsZW50LXJlc291cmNlLXdpdGgtdXNlci1pbnRlcmFjdGlvbi5o
dG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzL3ByZXZhbGVudC1yZXNvdXJjZS13aXRoLXVzZXItaW50ZXJhY3Rp
b24uaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2IEBACis8IURPQ1RZUEUgaHRtbD4K
KzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KKyAg
ICA8dGl0bGU+VGVzdHMgZm9yIFByZXZhbGVudCBSZXNvdXJjZSBXaXRoIFVzZXIgSW50ZXJhY3Rp
b248L3RpdGxlPgorICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUu
anMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorICAgIGNvbnN0IGhvc3RV
bmRlclRlc3QgPSAiMTI3LjAuMC4xOjgwMDAiOworICAgIGNvbnN0IHN0YXRpc3RpY3NVcmwgPSAi
aHR0cDovLyIgKyBob3N0VW5kZXJUZXN0ICsgIi90ZW1wIjsKKyAgICBjb25zdCBvdGhlclByZXZh
bGVudFVybCA9ICJodHRwOi8vbG9jYWxob3N0OjgwMDAvdGVtcCI7CisgICAgZnVuY3Rpb24gcnVu
VGVzdFJ1bm5lclRlc3QoKSB7CisgICAgICAgIGlmIChkb2N1bWVudC5jb29raWUgIT09ICIiKQor
ICAgICAgICAgICAgdGVzdEZhaWxlZCgiZG9jdW1lbnQuY29va2llIG5vdCBlbXB0eS4iKTsKKyAg
ICAgICAgY29uc3QgY29va2llID0gInRlc3RDb29raWU9dGVzdFZhbHVlIjsKKyAgICAgICAgZG9j
dW1lbnQuY29va2llID0gY29va2llICsgIjsgbWF4LWFnZT0xMDA7IjsKKyAgICAgICAgaWYgKGRv
Y3VtZW50LmNvb2tpZSAhPT0gY29va2llKQorICAgICAgICAgICAgdGVzdEZhaWxlZCgiZG9jdW1l
bnQuY29va2llIGRpZCBub3QgZ2V0IHNldC4iKTsKKworICAgICAgICB0ZXN0UnVubmVyLnNldFN0
YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShzdGF0aXN0aWNzVXJsLCB0cnVlKTsKKyAgICAgICAg
aWYgKCF0ZXN0UnVubmVyLmlzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKHN0YXRpc3RpY3NV
cmwpKQorICAgICAgICAgICAgdGVzdEZhaWxlZCgiSG9zdCBkaWQgbm90IGdldCBzZXQgYXMgcHJl
dmFsZW50IHJlc291cmNlLiIpOworCisgICAgICAgIC8vIFRoaXMgaXMgZG9uZSB0byBub3QgaGF2
ZSBhbiBlbXB0eSBzZXQgb2YgcHJldmFsZW50IHJlc291cmNlcy4KKyAgICAgICAgLy8gT3RoZXJ3
aXNlIGRhdGEgcmVjb3JkcyBhcmUgbmV2ZXIgc2Nhbm5lZC4KKyAgICAgICAgdGVzdFJ1bm5lci5z
ZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2Uob3RoZXJQcmV2YWxlbnRVcmwsIHRydWUpOwor
ICAgICAgICBpZiAoIXRlc3RSdW5uZXIuaXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2Uob3Ro
ZXJQcmV2YWxlbnRVcmwpKQorICAgICAgICAgICAgdGVzdEZhaWxlZCgiT3RoZXIgaG9zdCBkaWQg
bm90IGdldCBzZXQgYXMgcHJldmFsZW50IHJlc291cmNlLiIpOworCisgICAgICAgIHRlc3RSdW5u
ZXIuc2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbihzdGF0aXN0aWNzVXJsLCB0cnVl
KTsKKyAgICAgICAgaWYgKCF0ZXN0UnVubmVyLmlzU3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFj
dGlvbihzdGF0aXN0aWNzVXJsKSkKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIkhvc3QgZGlkIG5v
dCBnZXQgbG9nZ2VkIGZvciB1c2VyIGludGVyYWN0aW9uLiIpOworCisgICAgICAgIHRlc3RSdW5u
ZXIuaW5zdGFsbFN0YXRpc3RpY3NEaWRNb2RpZnlEYXRhUmVjb3Jkc0NhbGxiYWNrKGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgaWYgKGRvY3VtZW50LmNvb2tpZSA9PT0gY29va2llKQorICAgICAg
ICAgICAgICAgIHRlc3RQYXNzZWQoIkNvb2tpZSBub3QgZGVsZXRlZC4iKTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICB0ZXN0RmFpbGVkKCJDb29raWUgZGVsZXRlZCBvciBkb2N1
bWVudC5jb29raWUgY29udGFpbnMgb3RoZXIgY29va2llczogIiArIGRvY3VtZW50LmNvb2tpZSk7
CisgICAgICAgICAgICB0ZXN0UnVubmVyLnN0YXRpc3RpY3NSZXNldFRvQ29uc2lzdGVudFN0YXRl
KCk7CisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgfSk7Cisg
ICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1Nob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVm
b3JlRGF0YVJlY29yZHNSZW1vdmFsKGZhbHNlKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0
aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbCgwKTsKKyAgICAgICAg
dGVzdFJ1bm5lci5zdGF0aXN0aWNzRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CisgICAg
fQorCisgICAgaWYgKGRvY3VtZW50LmxvY2F0aW9uLmhvc3QgPT09IGhvc3RVbmRlclRlc3QgJiYg
d2luZG93LnRlc3RSdW5uZXIgJiYgd2luZG93LmludGVybmFscykgeworICAgICAgICB0ZXN0UnVu
bmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgaW50ZXJuYWxzLnNldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NFbmFibGVkKHRydWUpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NO
b3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKHRydWUpOworICAgICAgICBydW5U
ZXN0UnVubmVyVGVzdCgpOworICAgIH0KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpcIE5v
IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9h
ZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3ByZXZhbGVudC1yZXNvdXJjZS13aXRob3V0LXVz
ZXItaW50ZXJhY3Rpb24tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0
dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3ByZXZhbGVudC1yZXNvdXJj
ZS13aXRob3V0LXVzZXItaW50ZXJhY3Rpb24tZXhwZWN0ZWQudHh0CShub25leGlzdGVudCkKKysr
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3By
ZXZhbGVudC1yZXNvdXJjZS13aXRob3V0LXVzZXItaW50ZXJhY3Rpb24tZXhwZWN0ZWQudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOCBAQAorbWFpbiBmcmFtZSAtIGRpZFN0YXJ0UHJvdmlz
aW9uYWxMb2FkRm9yRnJhbWUKK21haW4gZnJhbWUgLSBkaWRDb21taXRMb2FkRm9yRnJhbWUKK21h
aW4gZnJhbWUgLSBkaWRSZWNlaXZlVGl0bGU6IFRlc3RzIGZvciBQcmV2YWxlbnQgUmVzb3VyY2Ug
V2l0aG91dCBVc2VyIEludGVyYWN0aW9uCittYWluIGZyYW1lIC0gZGlkRmluaXNoRG9jdW1lbnRM
b2FkRm9yRnJhbWUKK21haW4gZnJhbWUgLSBkaWRIYW5kbGVPbmxvYWRFdmVudHNGb3JGcmFtZQor
bWFpbiBmcmFtZSAtIGRpZEZpbmlzaExvYWRGb3JGcmFtZQorUEFTUyBDb29raWUgZGVsZXRlZC4K
KwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRp
c3RpY3MvcHJldmFsZW50LXJlc291cmNlLXdpdGhvdXQtdXNlci1pbnRlcmFjdGlvbi5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzL3ByZXZhbGVudC1yZXNvdXJjZS13aXRob3V0LXVzZXItaW50ZXJhY3Rpb24uaHRt
bAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcy9wcmV2YWxlbnQtcmVzb3VyY2Utd2l0aG91dC11c2VyLWludGVyYWN0
aW9uLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorPCFET0NUWVBFIGh0bWw+
Cis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKyAgICA8bWV0YSBjaGFyc2V0PSJVVEYtOCI+Cisg
ICAgPHRpdGxlPlRlc3RzIGZvciBQcmV2YWxlbnQgUmVzb3VyY2UgV2l0aG91dCBVc2VyIEludGVy
YWN0aW9uPC90aXRsZT4KKyAgICA8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3Qt
cHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KKyAgICBjb25zdCBo
b3N0VW5kZXJUZXN0ID0gIjEyNy4wLjAuMTo4MDAwIjsKKyAgICBjb25zdCBzdGF0aXN0aWNzVXJs
ID0gImh0dHA6Ly8iICsgaG9zdFVuZGVyVGVzdCArICIvdGVtcCI7CisgICAgZnVuY3Rpb24gcnVu
VGVzdFJ1bm5lclRlc3QoKSB7CisgICAgICAgIGlmIChkb2N1bWVudC5jb29raWUgIT09ICIiKQor
ICAgICAgICAgICAgdGVzdEZhaWxlZCgiZG9jdW1lbnQuY29va2llIG5vdCBlbXB0eS4iKTsKKyAg
ICAgICAgY29uc3QgY29va2llID0gInRlc3RDb29raWU9dGVzdFZhbHVlIjsKKyAgICAgICAgZG9j
dW1lbnQuY29va2llID0gY29va2llICsgIjsgbWF4LWFnZT0xMDA7IjsKKyAgICAgICAgaWYgKGRv
Y3VtZW50LmNvb2tpZSAhPT0gY29va2llKQorICAgICAgICAgICAgdGVzdEZhaWxlZCgiZG9jdW1l
bnQuY29va2llIGRpZCBub3QgZ2V0IHNldC4iKTsKKworICAgICAgICB0ZXN0UnVubmVyLnNldFN0
YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShzdGF0aXN0aWNzVXJsLCB0cnVlKTsKKyAgICAgICAg
aWYgKCF0ZXN0UnVubmVyLmlzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKHN0YXRpc3RpY3NV
cmwpKQorICAgICAgICAgICAgdGVzdEZhaWxlZCgiSG9zdCBkaWQgbm90IGdldCBzZXQgYXMgcHJl
dmFsZW50IHJlc291cmNlLiIpOworCisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc0hh
c0hhZFVzZXJJbnRlcmFjdGlvbihzdGF0aXN0aWNzVXJsLCBmYWxzZSk7CisgICAgICAgIGlmICh0
ZXN0UnVubmVyLmlzU3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbihzdGF0aXN0aWNzVXJs
KSkKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIkhvc3QgZGlkIG5vdCBnZXQgY2xlYXJlZCBvZiB1
c2VyIGludGVyYWN0aW9uLiIpOworCisgICAgICAgIHRlc3RSdW5uZXIuaW5zdGFsbFN0YXRpc3Rp
Y3NEaWRNb2RpZnlEYXRhUmVjb3Jkc0NhbGxiYWNrKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
aWYgKGRvY3VtZW50LmNvb2tpZSAhPT0gIiIpCisgICAgICAgICAgICAgICAgdGVzdEZhaWxlZCgi
Q29va2llIG5vdCBkZWxldGVkOiAiICsgZG9jdW1lbnQuY29va2llKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICB0ZXN0UGFzc2VkKCJDb29raWUgZGVsZXRlZC4iKTsKKyAgICAg
ICAgICAgIHRlc3RSdW5uZXIuc3RhdGlzdGljc1Jlc2V0VG9Db25zaXN0ZW50U3RhdGUoKTsKKyAg
ICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9KTsKKyAgICAgICAg
dGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRh
UmVjb3Jkc1JlbW92YWwoZmFsc2UpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NN
aW5pbXVtVGltZUJldHdlZWVuRGF0YVJlY29yZHNSZW1vdmFsKDApOworICAgICAgICB0ZXN0UnVu
bmVyLnN0YXRpc3RpY3NGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKKyAgICB9CisKKyAg
ICBpZiAoZG9jdW1lbnQubG9jYXRpb24uaG9zdCA9PT0gaG9zdFVuZGVyVGVzdCAmJiB3aW5kb3cu
dGVzdFJ1bm5lciAmJiB3aW5kb3cuaW50ZXJuYWxzKSB7CisgICAgICAgIHRlc3RSdW5uZXIud2Fp
dFVudGlsRG9uZSgpOworICAgICAgICBpbnRlcm5hbHMuc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0VuYWJsZWQodHJ1ZSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc05vdGlmeVBh
Z2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQodHJ1ZSk7CisgICAgICAgIHJ1blRlc3RSdW5u
ZXJUZXN0KCk7CisgICAgfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2syL1Rlc3RFeHBl
Y3RhdGlvbnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2syL1Rlc3RFeHBl
Y3RhdGlvbnMJKHJldmlzaW9uIDIxMTkzMSkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL3drMi9U
ZXN0RXhwZWN0YXRpb25zCSh3b3JraW5nIGNvcHkpCkBAIC02OTgsNiArNjk4LDkgQEAgaHR0cC90
ZXN0cy9taXNjL3dpbGwtc2VuZC1yZXF1ZXN0LXdpdGgtYwogIyBidWcgMTYyMjgxCiBpbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2ZldGNoL2FwaS9yZXF1ZXN0L3JlcXVlc3QtY2FjaGUt
b25seS1pZi1jYWNoZWQuaHRtbCBbIEZhaWx1cmUgXQogCisjIFJlc291cmNlIExvYWQgU3RhdGlz
dGljcyBhcmUgb25seSBzdXBwb3J0ZWQgaW4gV2ViS2l0MgoraHR0cC90ZXN0cy9sb2FkaW5nL3Jl
c291cmNlTG9hZFN0YXRpc3RpY3MvIFsgUGFzcyBdCisKICMjIyBFTkQgT0YgKDUpIFByb2dyZXNz
aW9ucywgZXhwZWN0ZWQgc3VjY2Vzc2VzIHRoYXQgYXJlIGV4cGVjdGVkIGZhaWx1cmVzIGluIFdl
YktpdDEuCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>301067</attachid>
            <date>2017-02-09 12:19:48 -0800</date>
            <delta_ts>2017-02-09 12:40:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-167474-20170209121722.patch</filename>
            <type>text/plain</type>
            <size>123227</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMTkzMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc1IEBACisyMDE3LTAyLTA5ICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFVwZGF0ZXMgdG8gUmVzb3Vy
Y2UgTG9hZCBTdGF0aXN0aWNzOiBHZXQgdGhlIHJpZ2h0IHdlYnNpdGUgZGF0YSBzdG9yZSBhbmQg
aW50cm9kdWNlIHRpbWVvdXQgZm9yIHVzZXIgaW50ZXJhY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NzQ3NAorICAgICAgICA8cmRhcjovL3By
b2JsZW0vMjQ2ODE4MDg+CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yNDcwMzI4Nj4KKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzMwMjkwMjcwPgorCisgICAgICAgIFRoaXMgcGF0Y2ggZG9lcyB0
aGUgZm9sbG93aW5nOgorICAgICAgICAxLiBHZXRzIHRoZSByaWdodCB3ZWJzaXRlIGRhdGEgc3Rv
cmUuIEFQSTo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpCisgICAgICAgICAg
ICBkb2VzIG5vdCBwcm92aWRlIHRoZSByaWdodCBkYXRhIHN0b3JlLgorICAgICAgICAyLiBJbnRy
b2R1Y2VzIHRpbWVvdXQgZm9yIHVzZXIgaW50ZXJhY3Rpb24uIEEgZG9tYWluIG5lZWRzIGludGVy
YWN0aW9uIGV2ZXJ5IDMwCisgICAgICAgICAgICBkYXlzIHRvIHN0YXkgaW4gdGhhdCBjYXRlZ29y
eS4KKyAgICAgICAgMy4gQWRkcyBncmFuZGZhdGhlcmVkIHRvIHRoZSBzdGF0aXN0aWNzIG1vZGVs
IGluIHByZXBhcmF0aW9uIGZvciBncmFuZGZhdGhlcmluZyBvZgorICAgICAgICAgICAgZXhpc3Rp
bmcgZGF0YSByZWNvcmRzLgorICAgICAgICA0LiBBZGRzIHRlc3QgaW5mcmFzdHJ1Y3R1cmUgdG8g
YWxsb3cgdGVzdGluZyBvZiB0aGUgdmFyaW91cyBydWxlcyBpbiBwbGFjZSBmb3IKKyAgICAgICAg
ICAgIGRhdGEgcmVjb3JkcyByZW1vdmFsLgorICAgICAgICA1LiBGaXhlcyB2YXJpb3VzIHNtYWxs
ZXIgYnVncyB0aGF0IHdlcmUgZm91bmQgYXMgcGFydCBvZiBzZXR0aW5nIHVwIHRoZSB0ZXN0cy4K
KyAgICAgICAgNi4gUmVncmVzc2VzIHRoZSBkYXRhIHJlY29yZHMgcmVtb3ZhbCBjb3VudGluZy4g
V2UgbmVlZCB0byBjb21lIHVwIHdpdGggYSB0aHJlYWQKKyAgICAgICAgICAgIHNhZmUgd2F5IG9m
IGdhdGhlcmluZyByZW1vdmFsIHN0YXRpc3RpY3MgZnJvbSBtb3JlIHRoYW4gb25lIGRhdGEgc3Rv
cmUgbm93CisgICAgICAgICAgICB0aGF0IHdlIHBvdGVudGlhbGx5IGludGVyYWN0IHdpdGggbXVs
dGlwbGUgc3RvcmVzLgorICAgICAgICA3LiBBZGRzIGEgZmlyc3Qgc2V0IG9mIGxheW91dCB0ZXN0
cyBmb3IgcmVzb3VyY2UgbG9hZCBzdGF0aXN0aWNzLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzOiBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcy9ub24tcHJldmFsZW50LXJlc291cmNlLXdpdGgtdXNlci1pbnRlcmFj
dGlvbi5odG1sCisgICAgICAgICAgICAgICBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2Fk
U3RhdGlzdGljcy9ub24tcHJldmFsZW50LXJlc291cmNlLXdpdGhvdXQtdXNlci1pbnRlcmFjdGlv
bi5odG1sCisgICAgICAgICAgICAgICBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3Rh
dGlzdGljcy9wcmV2YWxlbnQtcmVzb3VyY2Utd2l0aC11c2VyLWludGVyYWN0aW9uLXRpbWVvdXQu
aHRtbAorICAgICAgICAgICAgICAgaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRp
c3RpY3MvcHJldmFsZW50LXJlc291cmNlLXdpdGgtdXNlci1pbnRlcmFjdGlvbi5odG1sCisgICAg
ICAgICAgICAgICBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wcmV2
YWxlbnQtcmVzb3VyY2Utd2l0aG91dC11c2VyLWludGVyYWN0aW9uLmh0bWwKKworICAgICAgICAq
IGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dXBkYXRlTGFz
dEhhbmRsZWRVc2VyR2VzdHVyZVRpbWVzdGFtcCk6CisgICAgICAgICAgICBUaGlzIG5vdyBjYWxs
cyBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nVXNlckludGVyYWN0aW9uKCkgZXZlcnkgdGltZSBz
aW5jZQorICAgICAgICAgICAgd2Ugd2FudCB0byBrZWVwIHRyYWNrIG9mIHRoZSBtb3N0IHJlY2Vu
dCB1c2VyIGludGVyYWN0aW9uLgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c3RhdGlzdGlj
c1N0b3JlKToKKyAgICAgICAgICAgIE5ldyBnZXR0ZXIgdXNlZCBieSBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWFuYWdlcjo6cmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSgpLgorICAgICAgICAoV2Vi
Q29yZTo6cmVkdWNlVGltZVJlc29sdXRpb25Ub09uZURheSk6CisgICAgICAgICAgICBDb252ZW5p
ZW5jZSBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjps
b2dVc2VySW50ZXJhY3Rpb25XaXRoUmVkdWNlZFRpbWVSZXNvbHV0aW9uKToKKyAgICAgICAgICAg
IFJlZHVjZXMgdGltZSByZXNvbHV0aW9uIGZvciBwcml2YWN5IHJlYXNvbnMuCisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nVXNlckludGVyYWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpjbGVhclVzZXJJbnRlcmFjdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6aGFzSGFkVXNlckludGVy
YWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpzZXRQcmV2
YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
aXNQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVy
KToKKyAgICAgICAgICAgIE5ldyBmdW5jdGlvbnMgdGhhdCBhbGxvdyBXZWJLaXRUZXN0UnVubmVy
IHRvIHN0YWdlIGV4YWN0CisgICAgICAgICAgICBzdGF0aXN0aWNzLCBmaXJlIHRoZSBoYW5kbGVy
LCBhbmQgdGVzdCB0aGUgb3V0Y29tZS4KKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXIuaDoKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjplbmNvZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljczo6ZGVjb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M6Om1lcmdlKToKKyAgICAgICAgICAgIFN1cHBvcnQg
Zm9yIHN0YXRpc3RpY3MgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiwgZ3JhbmRmYXRoZXJlZCwg
YW5kCisgICAgICAgICAgICBkYXRhUmVjb3Jkc1JlbW92ZWQuCisgICAgICAgICogbG9hZGVyL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3MuaDoKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgICAgICBOZXcg
ZnVuY3Rpb24gdGhhdCBhbGxvd3MgV2ViS2l0VGVzdFJ1bm5lciB0byB0ZXN0IAorICAgICAgICAg
ICAgYWdpbmcgb3V0IG9mIHVzZXIgaW50ZXJhY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omhhc0hhZFJlY2VudFVzZXJJbnRlcmFjdGlvbik6Cisg
ICAgICAgICAgICBOb3cgdGFrZXMgaW50byBhY2NvdW50IHRoZSB0aW1lc3RhbXAgYW5kIGFnZXMK
KyAgICAgICAgICAgIG91dCB1c2VyIGludGVyYWN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnNXaXRob3V0
VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgICAgIE5vdyBtYWtlcyB1c2Ugb2YgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpoYXNIYWRSZWNlbnRVc2VySW50ZXJhY3Rpb24oKS4KKyAgICAg
ICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmg6CisKIDIwMTctMDItMDgg
IFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgUHV0IG5h
bWVzIG9uIG1vcmUgVUlWaWV3cyBmb3IgZWFzZSBvZiBkZWJ1Z2dpbmcKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmNwcAkocmV2aXNpb24gMjExOTMxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjM3MSwxMCArNjM3MSw4IEBAIERvY3VtZW50
OjpSZWdpb25GaXhlZFBhaXIgRG9jdW1lbnQ6OmFic28KIAogdm9pZCBEb2N1bWVudDo6dXBkYXRl
TGFzdEhhbmRsZWRVc2VyR2VzdHVyZVRpbWVzdGFtcCgpCiB7Ci0gICAgaWYgKCFtX2xhc3RIYW5k
bGVkVXNlckdlc3R1cmVUaW1lc3RhbXApCi0gICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWRPYnNlcnZlcigpLmxvZ1VzZXJJbnRlcmFjdGlvbigqdGhpcyk7Ci0KICAgICBtX2xhc3RI
YW5kbGVkVXNlckdlc3R1cmVUaW1lc3RhbXAgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUo
KTsKKyAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5sb2dVc2VySW50
ZXJhY3Rpb25XaXRoUmVkdWNlZFRpbWVSZXNvbHV0aW9uKCp0aGlzKTsKIH0KIAogdm9pZCBEb2N1
bWVudDo6c3RhcnRUcmFja2luZ1N0eWxlUmVjYWxjcygpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAJKHJldmlzaW9uIDIxMTkzMSkKKysr
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNDIsMTcgKzQyLDI3IEBACiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJT
aGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlICJVUkwuaCIKKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRp
bWUuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorLy8gT25lIGRheSBp
biBzZWNvbmRzLgorc3RhdGljIGF1dG8gdGltZXN0YW1wUmVzb2x1dGlvbiA9IDg2NDAwOworCiBS
ZXNvdXJjZUxvYWRPYnNlcnZlciYgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZE9ic2VydmVy
KCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVzb3VyY2VMb2FkT2JzZXJ2ZXI+IHJl
c291cmNlTG9hZE9ic2VydmVyOwogICAgIHJldHVybiByZXNvdXJjZUxvYWRPYnNlcnZlcjsKIH0K
IAorUmVmUHRyPFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4gUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnN0YXRpc3RpY3NTdG9yZSgpCit7CisgICAgLy8gTWF5IGJlIG51bGwKKyAgICByZXR1cm4g
bV9zdG9yZTsKK30KKwogdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2V0U3RhdGlzdGljc1N0
b3JlKFJlZjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+JiYgc3RvcmUpCiB7CiAgICAgbV9z
dG9yZSA9IFdURk1vdmUoc3RvcmUpOwpAQCAtMjc4LDcgKzI4OCwxMiBAQCB2b2lkIFJlc291cmNl
TG9hZE9ic2VydmVyOjpsb2dXZWJTb2NrZXRMCiAgICAgICAgIG1fc3RvcmUtPmZpcmVEYXRhTW9k
aWZpY2F0aW9uSGFuZGxlcigpOwogfQogCi12b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dV
c2VySW50ZXJhY3Rpb24oY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KQorc3RhdGljIGRvdWJsZSBy
ZWR1Y2VUaW1lUmVzb2x1dGlvblRvT25lRGF5KGRvdWJsZSBzZWNvbmRzKQoreworICAgIHJldHVy
biBzdGQ6OmZsb29yKHNlY29uZHMgLyB0aW1lc3RhbXBSZXNvbHV0aW9uKSAqIHRpbWVzdGFtcFJl
c29sdXRpb247Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1VzZXJJbnRlcmFj
dGlvbldpdGhSZWR1Y2VkVGltZVJlc29sdXRpb24oY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KQog
ewogICAgIEFTU0VSVChkb2N1bWVudC5wYWdlKCkpOwogCkBAIC0yODYsMTUgKzMwMSw4OSBAQCB2
b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dVc2VySW50ZXJhCiAgICAgICAgIHJldHVybjsK
IAogICAgIGF1dG8mIHVybCA9IGRvY3VtZW50LnVybCgpOworICAgIGlmICh1cmwuaXNCbGFua1VS
TCgpIHx8IHVybC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBhdXRvJiBz
dGF0aXN0aWNzID0gbV9zdG9yZS0+ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURv
bWFpbihwcmltYXJ5RG9tYWluKHVybCkpOworICAgIGRvdWJsZSBuZXdUaW1lc3RhbXAgPSByZWR1
Y2VUaW1lUmVzb2x1dGlvblRvT25lRGF5KFdURjo6Y3VycmVudFRpbWUoKSk7CisgICAgaWYgKG5l
d1RpbWVzdGFtcCAhPSBzdGF0aXN0aWNzLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24pIHsKKyAg
ICAgICAgc3RhdGlzdGljcy5oYWRVc2VySW50ZXJhY3Rpb24gPSB0cnVlOworICAgICAgICBzdGF0
aXN0aWNzLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24gPSBuZXdUaW1lc3RhbXA7CisgICAgICAg
IG1fc3RvcmUtPmZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOworICAgIH0KK30KIAordm9p
ZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCB1cmwp
Cit7CiAgICAgaWYgKHVybC5pc0JsYW5rVVJMKCkgfHwgdXJsLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgYXV0byYgc3RhdGlzdGljcyA9IG1fc3RvcmUtPmVuc3VyZVJlc291cmNl
U3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJpbWFyeURvbWFpbih1cmwpKTsKICAgICBzdGF0
aXN0aWNzLmhhZFVzZXJJbnRlcmFjdGlvbiA9IHRydWU7Ci0gICAgbV9zdG9yZS0+ZmlyZURhdGFN
b2RpZmljYXRpb25IYW5kbGVyKCk7CisgICAgc3RhdGlzdGljcy5tb3N0UmVjZW50VXNlckludGVy
YWN0aW9uID0gV1RGOjpjdXJyZW50VGltZSgpOwogfQorCit2b2lkIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwgdXJsKQoreworICAgIGlmICh1cmwu
aXNCbGFua1VSTCgpIHx8IHVybC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBhdXRvJiBzdGF0aXN0aWNzID0gbV9zdG9yZS0+ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9y
UHJpbWFyeURvbWFpbihwcmltYXJ5RG9tYWluKHVybCkpOworICAgIAorICAgIHN0YXRpc3RpY3Mu
aGFkVXNlckludGVyYWN0aW9uID0gZmFsc2U7CisgICAgc3RhdGlzdGljcy5tb3N0UmVjZW50VXNl
ckludGVyYWN0aW9uID0gMDsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6aGFzSGFk
VXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCB1cmwpCit7CisgICAgaWYgKHVybC5pc0JsYW5rVVJM
KCkgfHwgdXJsLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAorICAgIGF1
dG8mIHN0YXRpc3RpY3MgPSBtX3N0b3JlLT5lbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmlt
YXJ5RG9tYWluKHByaW1hcnlEb21haW4odXJsKSk7CisgICAgCisgICAgcmV0dXJuIG1fc3RvcmUt
Pmhhc0hhZFJlY2VudFVzZXJJbnRlcmFjdGlvbihzdGF0aXN0aWNzKTsKK30KKwordm9pZCBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMIHVybCkKK3sK
KyAgICBpZiAodXJsLmlzQmxhbmtVUkwoKSB8fCB1cmwuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgYXV0byYgc3RhdGlzdGljcyA9IG1fc3RvcmUtPmVuc3VyZVJlc291cmNl
U3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJpbWFyeURvbWFpbih1cmwpKTsKKyAgICAKKyAg
ICBzdGF0aXN0aWNzLmlzUHJldmFsZW50UmVzb3VyY2UgPSB0cnVlOworfQorCitib29sIFJlc291
cmNlTG9hZE9ic2VydmVyOjppc1ByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCB1cmwpCit7Cisg
ICAgaWYgKHVybC5pc0JsYW5rVVJMKCkgfHwgdXJsLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIAorICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBtX3N0b3JlLT5lbnN1cmVSZXNv
dXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1hcnlEb21haW4odXJsKSk7CisgICAg
CisgICAgcmV0dXJuIHN0YXRpc3RpY3MuaXNQcmV2YWxlbnRSZXNvdXJjZTsKK30KKyAgICAKK3Zv
aWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJM
IHVybCkKK3sKKyAgICBpZiAodXJsLmlzQmxhbmtVUkwoKSB8fCB1cmwuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgYXV0byYgc3RhdGlzdGljcyA9IG1fc3RvcmUtPmVuc3Vy
ZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJpbWFyeURvbWFpbih1cmwpKTsK
KyAgICAKKyAgICBzdGF0aXN0aWNzLmlzUHJldmFsZW50UmVzb3VyY2UgPSBmYWxzZTsKK30KKwor
dm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihk
b3VibGUgc2Vjb25kcykKK3sKKyAgICBtX3N0b3JlLT5zZXRUaW1lVG9MaXZlVXNlckludGVyYWN0
aW9uKHNlY29uZHMpOworfQorCit2b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpmaXJlRGF0YU1v
ZGlmaWNhdGlvbkhhbmRsZXIoKQoreworICAgIG1fc3RvcmUtPmZpcmVEYXRhTW9kaWZpY2F0aW9u
SGFuZGxlcigpOworfQorCiBTdHJpbmcgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnByaW1hcnlEb21h
aW4oY29uc3QgVVJMJiB1cmwpCiB7CiAgICAgU3RyaW5nIHByaW1hcnlEb21haW47CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaAkocmV2aXNpb24g
MjExOTMxKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAxNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC00OCw5ICs0OCwyMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBsb2dGcmFt
ZU5hdmlnYXRpb24oY29uc3QgRnJhbWUmIGZyYW1lLCBjb25zdCBGcmFtZSYgdG9wRnJhbWUsIGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgbmV3UmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYg
cmVkaXJlY3RSZXNwb25zZSk7CiAgICAgdm9pZCBsb2dTdWJyZXNvdXJjZUxvYWRpbmcoY29uc3Qg
RnJhbWUqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIG5ld1JlcXVlc3QsIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpOwogICAgIHZvaWQgbG9nV2ViU29ja2V0TG9hZGlu
Zyhjb25zdCBGcmFtZSosIGNvbnN0IFVSTCYpOworICAgIHZvaWQgbG9nVXNlckludGVyYWN0aW9u
V2l0aFJlZHVjZWRUaW1lUmVzb2x1dGlvbihjb25zdCBEb2N1bWVudCYpOwogCi0gICAgdm9pZCBs
b2dVc2VySW50ZXJhY3Rpb24oY29uc3QgRG9jdW1lbnQmKTsKLSAgICAKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwpOworICAgIFdFQkNPUkVfRVhQ
T1JUIGJvb2wgaGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCk7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwpOworCisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwpOworICAgIFdFQkNP
UkVfRVhQT1JUIGJvb2wgaXNQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwpOworICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgY2xlYXJQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwpOworCisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKGRvdWJsZSBz
ZWNvbmRzKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFJlZHVjZWRUaW1lc3RhbXBSZXNv
bHV0aW9uKGRvdWJsZSBzZWNvbmRzKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlyZURh
dGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiBzdGF0aXN0aWNzU3RvcmUoKTsKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNldFN0YXRpc3RpY3NTdG9yZShSZWY8UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlPiYmKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzdGF0aXN0aWNzRm9yT3Jp
Z2luKGNvbnN0IFN0cmluZyYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNl
TG9hZFN0YXRpc3RpY3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmNwcAkocmV2aXNpb24gMjExOTMxKQorKysgU291cmNlL1dl
YkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NTEsNiArNTEsOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3M6OmVuY29kZShLZXllCiAg
ICAgCiAgICAgLy8gVXNlciBpbnRlcmFjdGlvbgogICAgIGVuY29kZXIuZW5jb2RlQm9vbCgiaGFk
VXNlckludGVyYWN0aW9uIiwgaGFkVXNlckludGVyYWN0aW9uKTsKKyAgICBlbmNvZGVyLmVuY29k
ZURvdWJsZSgibW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiIsIG1vc3RSZWNlbnRVc2VySW50ZXJh
Y3Rpb24pOworICAgIGVuY29kZXIuZW5jb2RlQm9vbCgiZ3JhbmRmYXRoZXJlZCIsIGdyYW5kZmF0
aGVyZWQpOwogICAgIAogICAgIC8vIFRvcCBmcmFtZSBzdGF0cwogICAgIGVuY29kZXIuZW5jb2Rl
Qm9vbCgidG9wRnJhbWVIYXNCZWVuTmF2aWdhdGVkVG9CZWZvcmUiLCB0b3BGcmFtZUhhc0JlZW5O
YXZpZ2F0ZWRUb0JlZm9yZSk7CkBAIC0xNzcsNyArMTc5LDE2IEBAIGJvb2wgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljczo6ZGVjb2RlKEtleWUKIAogICAgIGlmICghZGVjb2Rlci5kZWNvZGVVSW50MzIo
ImRhdGFSZWNvcmRzUmVtb3ZlZCIsIGRhdGFSZWNvcmRzUmVtb3ZlZCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAKKworICAgIGlmICh2ZXJzaW9uIDwgMykKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRG91YmxlKCJtb3N0UmVjZW50VXNlckludGVy
YWN0aW9uIiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbikpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGVCb29sKCJncmFuZGZhdGhlcmVkIiwgZ3JhbmRm
YXRoZXJlZCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIHJldHVybiB0cnVlOwogfQog
CkBAIC0yMTQsNiArMjI1LDExIEBAIFN0cmluZyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjp0b1N0
cmluZygKICAgICAvLyBVc2VyIGludGVyYWN0aW9uCiAgICAgYXBwZW5kQm9vbGVhbihidWlsZGVy
LCAiaGFkVXNlckludGVyYWN0aW9uIiwgaGFkVXNlckludGVyYWN0aW9uKTsKICAgICBidWlsZGVy
LmFwcGVuZCgnXG4nKTsKKyAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiAgICBtb3N0UmVjZW50
VXNlckludGVyYWN0aW9uOiAiKTsKKyAgICBidWlsZGVyLmFwcGVuZE51bWJlcihtb3N0UmVjZW50
VXNlckludGVyYWN0aW9uKTsKKyAgICBidWlsZGVyLmFwcGVuZCgnXG4nKTsKKyAgICBhcHBlbmRC
b29sZWFuKGJ1aWxkZXIsICIgICAgZ3JhbmRmYXRoZXJlZCIsIGdyYW5kZmF0aGVyZWQpOworICAg
IGJ1aWxkZXIuYXBwZW5kKCdcbicpOwogICAgIAogICAgIC8vIFRvcCBmcmFtZSBzdGF0cwogICAg
IGFwcGVuZEJvb2xlYW4oYnVpbGRlciwgInRvcEZyYW1lSGFzQmVlbk5hdmlnYXRlZFRvQmVmb3Jl
IiwgdG9wRnJhbWVIYXNCZWVuTmF2aWdhdGVkVG9CZWZvcmUpOwpAQCAtMjk0LDcgKzMxMCwxOSBA
QCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3M6Om1lcmdlKGNvbnN0CiB7CiAgICAgQVNTRVJU
KG90aGVyLmhpZ2hMZXZlbERvbWFpbiA9PSBoaWdoTGV2ZWxEb21haW4pOwogCi0gICAgaGFkVXNl
ckludGVyYWN0aW9uIHw9IG90aGVyLmhhZFVzZXJJbnRlcmFjdGlvbjsKKyAgICBpZiAoIW90aGVy
LmhhZFVzZXJJbnRlcmFjdGlvbikgeworICAgICAgICAvLyBJZiB1c2VyIGludGVyYWN0aW9uIGhh
cyBiZWVuIHJlc2V0IGRvIHNvIGhlcmUgdG9vLgorICAgICAgICAvLyBFbHNlLCBkbyBub3RoaW5n
LgorICAgICAgICBpZiAob3RoZXIubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiA9PSAwLjApIHsK
KyAgICAgICAgICAgIGhhZFVzZXJJbnRlcmFjdGlvbiA9IGZhbHNlOworICAgICAgICAgICAgbW9z
dFJlY2VudFVzZXJJbnRlcmFjdGlvbiA9IDAuMDsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7Cisg
ICAgICAgIGhhZFVzZXJJbnRlcmFjdGlvbiA9IHRydWU7CisgICAgICAgIGlmIChtb3N0UmVjZW50
VXNlckludGVyYWN0aW9uIDwgb3RoZXIubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbikKKyAgICAg
ICAgICAgIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24gPSBvdGhlci5tb3N0UmVjZW50VXNlcklu
dGVyYWN0aW9uOworICAgIH0KKyAgICBncmFuZGZhdGhlcmVkIHw9IG90aGVyLmdyYW5kZmF0aGVy
ZWQ7CiAgICAgCiAgICAgLy8gVG9wIGZyYW1lIHN0YXRzCiAgICAgdG9wRnJhbWVIYXNCZWVuUmVk
aXJlY3RlZFRvICs9IG90aGVyLnRvcEZyYW1lSGFzQmVlblJlZGlyZWN0ZWRUbzsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuaAkocmV2aXNp
b24gMjExOTMxKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3MuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDE3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDcgKzUzLDEwIEBAIHN0cnVjdCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzIHsKIAogICAgIC8vIFVzZXIgaW50ZXJhY3Rpb24KICAgICBib29sIGhhZFVzZXJJ
bnRlcmFjdGlvbiB7IGZhbHNlIH07Ci0gICAgCisgICAgLy8gVGltZXN0YW1wLiBEZWZhdWx0IHZh
bHVlIGlzIG5lZ2F0aXZlLCAwLjAgbWVhbnMgaXQgd2FzIHJlc2V0LgorICAgIGRvdWJsZSBtb3N0
UmVjZW50VXNlckludGVyYWN0aW9uIHsgLTEuMCB9OworICAgIGJvb2wgZ3JhbmRmYXRoZXJlZCB7
IGZhbHNlIH07CisKICAgICAvLyBUb3AgZnJhbWUgc3RhdHMKICAgICB1bnNpZ25lZCB0b3BGcmFt
ZUhhc0JlZW5SZWRpcmVjdGVkVG8geyAwIH07CiAgICAgdW5zaWduZWQgdG9wRnJhbWVIYXNCZWVu
UmVkaXJlY3RlZEZyb20geyAwIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAkocmV2aXNpb24gMjExOTMxKQor
KysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzMsMTEgKzMzLDE0IEBACiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcy5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUgIlVSTC5oIgor
I2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3ll
ZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBjb25zdCBhdXRvIHN0YXRpc3Rp
Y3NNb2RlbFZlcnNpb24gPSAyOworc3RhdGljIGNvbnN0IGF1dG8gc3RhdGlzdGljc01vZGVsVmVy
c2lvbiA9IDM7CisvLyAzMCBkYXlzIGluIHNlY29uZHMKK3N0YXRpYyBhdXRvIHRpbWVUb0xpdmVV
c2VySW50ZXJhY3Rpb24gPSAyNTkyMDAwOwogCiBSZWY8UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNyZWF0ZSgpCiB7CkBAIC0xNDQsMTcg
KzE0Nyw0MCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZmlyZURhCiAgICAg
ICAgIG1fZGF0YUFkZGVkSGFuZGxlcigpOwogfQogCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihkb3VibGUgc2Vjb25kcykKK3sK
KyAgICBpZiAoc2Vjb25kcyA+PSAwKQorICAgICAgICB0aW1lVG9MaXZlVXNlckludGVyYWN0aW9u
ID0gc2Vjb25kczsKK30KKwogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnByb2Nl
c3NTdGF0aXN0aWNzKHN0ZDo6ZnVuY3Rpb248dm9pZChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik+
JiYgcHJvY2Vzc0Z1bmN0aW9uKQogewogICAgIGZvciAoYXV0byYgcmVzb3VyY2VTdGF0aXN0aWMg
OiBtX3Jlc291cmNlU3RhdGlzdGljc01hcC52YWx1ZXMoKSkKICAgICAgICAgcHJvY2Vzc0Z1bmN0
aW9uKHJlc291cmNlU3RhdGlzdGljKTsKIH0KIAorYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6Omhhc0hhZFJlY2VudFVzZXJJbnRlcmFjdGlvbihSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
JiByZXNvdXJjZVN0YXRpc3RpYykKK3sKKyAgICBpZiAoIXJlc291cmNlU3RhdGlzdGljLmhhZFVz
ZXJJbnRlcmFjdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGN1cnJlbnRU
aW1lKCkgPiAocmVzb3VyY2VTdGF0aXN0aWMubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiArIHRp
bWVUb0xpdmVVc2VySW50ZXJhY3Rpb24pKSB7CisgICAgICAgIC8vIERyb3AgcHJpdmFjeSBzZW5z
aXRpdmUgZGF0YSBiZWNhdXNlIHdlIG5vIGxvbmdlciBuZWVkIGl0LgorICAgICAgICAvLyBTZXQg
dGltZXN0YW1wIHRvIDAuMCBzbyB0aGF0IHN0YXRpc3RpY3MgbWVyZ2Ugd2lsbCBrbm93CisgICAg
ICAgIC8vIGl0IGhhcyBiZWVuIHJlc2V0IGFzIG9wcG9zZWQgdG8gaXRzIGRlZmF1bHQgLTEuMC4K
KyAgICAgICAgcmVzb3VyY2VTdGF0aXN0aWMubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiA9IDAu
MDsKKyAgICAgICAgcmVzb3VyY2VTdGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uID0gZmFsc2U7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwog
VmVjdG9yPFN0cmluZz4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcmV2YWxlbnRSZXNv
dXJjZURvbWFpbnNXaXRob3V0VXNlckludGVyYWN0aW9uKCkKIHsKICAgICBWZWN0b3I8U3RyaW5n
PiBwcmV2YWxlbnRSZXNvdXJjZXM7CiAgICAgZm9yIChhdXRvJiByZXNvdXJjZVN0YXRpc3RpYyA6
IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmIChyZXNvdXJj
ZVN0YXRpc3RpYy5pc1ByZXZhbGVudFJlc291cmNlICYmICFyZXNvdXJjZVN0YXRpc3RpYy5oYWRV
c2VySW50ZXJhY3Rpb24pCisgICAgICAgIGlmIChyZXNvdXJjZVN0YXRpc3RpYy5pc1ByZXZhbGVu
dFJlc291cmNlICYmICFoYXNIYWRSZWNlbnRVc2VySW50ZXJhY3Rpb24ocmVzb3VyY2VTdGF0aXN0
aWMpKQogICAgICAgICAgICAgcHJldmFsZW50UmVzb3VyY2VzLmFwcGVuZChyZXNvdXJjZVN0YXRp
c3RpYy5oaWdoTGV2ZWxEb21haW4pOwogICAgIH0KICAgICByZXR1cm4gcHJldmFsZW50UmVzb3Vy
Y2VzOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUuaAkocmV2aXNpb24gMjExOTMxKQorKysgU291cmNlL1dlYkNvcmUvbG9h
ZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTksOSAr
NTksMTEgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Tm90aWZpY2F0aW9u
Q2FsbGJhY2soc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGhhbmRsZXIpOwogCiAgICAgdm9pZCBmaXJl
RGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKKyAgICB2b2lkIHNldFRpbWVUb0xpdmVVc2VySW50
ZXJhY3Rpb24oZG91YmxlIHNlY29uZHMpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwcm9j
ZXNzU3RhdGlzdGljcyhzdGQ6OmZ1bmN0aW9uPHZvaWQoUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYp
PiYmKTsKIAorICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaGFzSGFkUmVjZW50VXNlckludGVyYWN0
aW9uKFJlc291cmNlTG9hZFN0YXRpc3RpY3MmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8
U3RyaW5nPiBwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnNXaXRob3V0VXNlckludGVyYWN0aW9uKCk7
CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB1cGRhdGVTdGF0aXN0aWNzRm9yUmVtb3ZlZERhdGFS
ZWNvcmRzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMpOwog
cHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMTkzMSkKKysrIFNvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNyBAQAorMjAxNy0wMi0w
OSAgSm9obiBXaWxhbmRlciAgPHdpbGFuZGVyQGFwcGxlLmNvbT4KKworICAgICAgICBVcGRhdGVz
IHRvIFJlc291cmNlIExvYWQgU3RhdGlzdGljczogR2V0IHRoZSByaWdodCB3ZWJzaXRlIGRhdGEg
c3RvcmUgYW5kIGludHJvZHVjZSB0aW1lb3V0IGZvciB1c2VyIGludGVyYWN0aW9uCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjc0NzQKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzI0NjgxODA4PgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjQ3MDMy
ODY+CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMDI5MDI3MD4KKworICAgICAgICBUaGlzIHBh
dGNoIGRvZXMgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgMS4gR2V0cyB0aGUgcmlnaHQgd2Vic2l0
ZSBkYXRhIHN0b3JlLiBBUEk6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKQor
ICAgICAgICAgICAgZG9lcyBub3QgcHJvdmlkZSB0aGUgcmlnaHQgZGF0YSBzdG9yZS4KKyAgICAg
ICAgMi4gSW50cm9kdWNlcyB0aW1lb3V0IGZvciB1c2VyIGludGVyYWN0aW9uLiBBIGRvbWFpbiBu
ZWVkcyBpbnRlcmFjdGlvbiBldmVyeSAzMAorICAgICAgICAgICAgZGF5cyB0byBzdGF5IGluIHRo
YXQgY2F0ZWdvcnkuCisgICAgICAgIDMuIEFkZHMgZ3JhbmRmYXRoZXJlZCB0byB0aGUgc3RhdGlz
dGljcyBtb2RlbCBpbiBwcmVwYXJhdGlvbiBmb3IgZ3JhbmRmYXRoZXJpbmcgb2YKKyAgICAgICAg
ICAgIGV4aXN0aW5nIGRhdGEgcmVjb3Jkcy4KKyAgICAgICAgNC4gQWRkcyB0ZXN0IGluZnJhc3Ry
dWN0dXJlIHRvIGFsbG93IHRlc3Rpbmcgb2YgdGhlIHZhcmlvdXMgcnVsZXMgaW4gcGxhY2UgZm9y
CisgICAgICAgICAgICBkYXRhIHJlY29yZHMgcmVtb3ZhbC4KKyAgICAgICAgNS4gRml4ZXMgdmFy
aW91cyBzbWFsbGVyIGJ1Z3MgdGhhdCB3ZXJlIGZvdW5kIGFzIHBhcnQgb2Ygc2V0dGluZyB1cCB0
aGUgdGVzdHMuCisgICAgICAgIDYuIFJlZ3Jlc3NlcyB0aGUgZGF0YSByZWNvcmRzIHJlbW92YWwg
Y291bnRpbmcuIFdlIG5lZWQgdG8gY29tZSB1cCB3aXRoIGEgdGhyZWFkCisgICAgICAgICAgICBz
YWZlIHdheSBvZiBnYXRoZXJpbmcgcmVtb3ZhbCBzdGF0aXN0aWNzIGZyb20gbW9yZSB0aGFuIG9u
ZSBkYXRhIHN0b3JlIG5vdworICAgICAgICAgICAgdGhhdCB3ZSBwb3RlbnRpYWxseSBpbnRlcmFj
dCB3aXRoIG11bHRpcGxlIHN0b3Jlcy4KKyAgICAgICAgNy4gQWRkcyBhIGZpcnN0IHNldCBvZiBs
YXlvdXQgdGVzdHMgZm9yIHJlc291cmNlIGxvYWQgc3RhdGlzdGljcy4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgor
ICAgICAgICAgICAgQWRkZWQgVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5h
Z2VyLmNwcC4KKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgICAgIEFkZGVk
IFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAuCisgICAgICAg
ICogUGxhdGZvcm1NYWMuY21ha2U6CisgICAgICAgICAgICBBZGRlZCBVSVByb2Nlc3MvV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwLgorICAgICAgICAqIFNoYXJlZC9BUEkvQVBJ
T2JqZWN0Lmg6CisgICAgICAgICAgICBBZGRzIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5h
Z2VyIHRvIHRoZSBUeXBlIGVudW0uCisgICAgICAgICogU2hhcmVkL0FQSS9jL1dLQmFzZS5oOgor
ICAgICAgICAgICAgVHlwZWRlZiBvZiBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyUmVm
LgorICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwOgorICAgICAgICAo
SVBDOjpBcmd1bWVudENvZGVyPFJlc291cmNlTG9hZFN0YXRpc3RpY3M+OjplbmNvZGUpOgorICAg
ICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFJlc291cmNlTG9hZFN0YXRpc3RpY3M+OjpkZWNvZGUp
OgorICAgICAgICAgICAgQWRkcyBzdXBwb3J0IGZvciBzdGF0aXN0aWNzIG1vc3RSZWNlbnRVc2Vy
SW50ZXJhY3Rpb24sIGdyYW5kZmF0aGVyZWQsIGFuZAorICAgICAgICAgICAgZGF0YVJlY29yZHNS
ZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0FQSUNhc3QuaDoKKyAgICAgICAg
ICAgIEFkZHMgQVBJIG1hcHBpbmcgYmV0d2VlbiBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5h
Z2VyUmVmIGFuZCAKKyAgICAgICAgICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2Vy
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5h
Z2VyLmNwcDogQWRkZWQuCisgICAgICAgIChXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2Vy
R2V0VHlwZUlEKToKKyAgICAgICAgKFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXRQ
cmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5h
Z2VySXNQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXS1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNYW5hZ2VyU2V0SGFzSGFkVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdLUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01hbmFnZXJJc0hhc0hhZFVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChX
S1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlv
bik6CisgICAgICAgIChXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyRmlyZURhdGFNb2Rp
ZmljYXRpb25IYW5kbGVyKToKKyAgICAgICAgKFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFn
ZXJTZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKToKKyAgICAgICAgKFdL
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0Jl
Zm9yZURhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAgIChXS1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNYW5hZ2VyU2V0TWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAg
ICAgIChXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyUmVzZXRUb0NvbnNpc3RlbnRTdGF0
ZSk6CisgICAgICAgICAgICBBUEkgbGV2ZWwgYnJpZGdlIHRvIFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NNYW5hZ2VyIGZ1bmN0aW9ucy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2ViUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5Ojpk
ZWxldGVXZWJzaXRlRGF0YUZvclRvcFByaXZhdGVseU93bmVkRG9tYWluc0luQWxsUGVyc2lzdGVu
dERhdGFTdG9yZXMpOgorICAgICAgICAgICAgQSB3YXkgdG8gZGVsZXRlIHdlYnNpdGUgZGF0YSBp
biBwZXJzaXN0ZW50IHN0b3JlKHMpIGNvbmZpZ3VyZWQgYnkgdGhlIAorICAgICAgICAgICAgZW1i
ZWRkaW5nIGNsaWVudC4gQVBJOjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkg
ZG9lcyBub3QgCisgICAgICAgICAgICBkbyB0aGlzIHdoaWNoIGNhdXNlZCB1cyB0byBza2lwIHNl
c3Npb24gc3RvcmFnZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5Lmg6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2Vy
OjpzZXRQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNYW5hZ2VyOjppc1ByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNldEhhc0hhZFVzZXJJbnRlcmFj
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2Vy
OjpoYXNIYWRVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWFuYWdlcjo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbik6CisgICAg
ICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpmaXJlRGF0YU1v
ZGlmaWNhdGlvbkhhbmRsZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWFuYWdlcjo6c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXRT
aG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXRNaW5pbXVtVGlt
ZUJldHdlZWVuRGF0YVJlY29yZHNSZW1vdmFsKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnJlc2V0VG9Db25zaXN0ZW50U3RhdGUpOgorICAgICAg
ICAgICAgU3RhdGljIGZ1bmN0aW9ucyB0byBtYW5hZ2UgdGhlIHN0YXRlIGFuZCBiZWhhdmlvciBv
ZiB0aGUgVUkgcHJvY2VzcycgCisgICAgICAgICAgICByZXNvdXJjZSBsb2FkIHN0YXRpc3RpY3Mg
c3RvcmUuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5h
Z2VyLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWFuYWdlcjo6Y3JlYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUpOgorICAgICAgICAgICAg
QW4gZWZmZWN0IG9mIGEgbWVtYmVyIHZhcmlhYmxlIHJlbmFtZS4gU2VlIGhlYWRlciBmaWxlIGNv
bW1lbnQgYmVsb3cuCisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U2hvdWxkQ2xhc3Np
ZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldE1pbmltdW1UaW1lQmV0d2VlZW5EYXRh
UmVjb3Jkc1JlbW92YWwpOgorICAgICAgICAgICAgVGhyZWUgc3RhdGljIGZ1bmN0aW9ucyBmb3Ig
Y29udHJvbGxpbmcgdGhlIGJlaGF2aW9yIG9mIHRoZSBzdG9yZS4KKyAgICAgICAgKFdlYktpdDo6
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZW1vdmVEYXRhUmVjb3Jkcyk6CisgICAg
ICAgICAgICBDaGFuZ2VzOgorICAgICAgICAgICAgMS4gQ292ZXJzIGFsbCBkYXRhIHJlY29yZCB0
eXBlcy4KKyAgICAgICAgICAgIDIuIEFsbG93cyBkYXRhIHJlbW92YWwgd2hlbiBtX2xhc3RUaW1l
RGF0YVJlY29yZHNXZXJlUmVtb3ZlZCBpcyBub3Qgc2V0LgorICAgICAgICAgICAgMy4gTW92ZXMg
dGhlIGhlYXZ5IGxpZnRpbmcgdG8gV2Vic2l0ZURhdGFTdG9yZSAoc2VlIGJlbG93KS4KKyAgICAg
ICAgICAgIDQuIE5vIGxvbmdlciBjb3VudHMgcmVtb3ZlZCBkYXRhIHJlZ3Jlc3Npb25zLgorICAg
ICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnByb2Nlc3NTdGF0
aXN0aWNzQW5kRGF0YVJlY29yZHMpOgorICAgICAgICAgICAgU2VlIG5leHQgY29tbWVudC4KKyAg
ICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXNvdXJjZUxv
YWRTdGF0aXN0aWNzVXBkYXRlZCk6CisgICAgICAgICAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMoKSBpcyAKKyAgICAgICAg
ICAgIGJyb2tlbiBvdXQgb2YgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzVXBkYXRlZAorICAgICAgICAgICAgdG8gYWxsb3cgZm9yIHN0YXRpc3Rp
Y3MgcHJvY2Vzc2luZyB3aXRob3V0IHByaW9yIGNsYXNzaWZpY2F0aW9uLgorICAgICAgICAgICAg
VGVzdHMgbmVlZCB0byBzZXQgc3RhdGlzdGljcyBhbmQgYSBydW4gb2YgdGhlIGNsYXNzaWZpZXIg
bWF5CisgICAgICAgICAgICByZXNldCB0aGUgZGF0YS4KKyAgICAgICAgKFdlYktpdDo6V2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZWdpc3RlclNoYXJlZFJlc291cmNlTG9hZE9ic2Vy
dmVyKToKKyAgICAgICAgICAgIFNldHMgdGhlIG5vdGlmaWNhdGlvbiBjYWxsYmFjayB3aGljaCBj
YWxscyAKKyAgICAgICAgICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJvY2Vz
c1N0YXRpc3RpY3NBbmREYXRhUmVjb3JkcygpLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpjb3JlU3RvcmUpOgorICAgICAgICAgICAgUmVuYW1lZCBtX3Jl
c291cmNlU3RhdGlzdGljc1N0b3JlIHRvIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlIHRv
CisgICAgICAgICAgICBoYXJtb25pemUgd2l0aCBvdGhlciBuYW1pbmcuCisgICAgICAgICogVUlQ
cm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGFGb3JUb3BQcml2YXRlbHlPd25lZERvbWFpbnMp
OgorICAgICAgICAgICAgVGhpcyBpcyBub3cgd2hlcmUgbWF0Y2hpbmcgaXMgbWFkZSBiZXR3ZWVu
IHByZXZhbGVudCByZXNvdXJjZXMKKyAgICAgICAgICAgIGFuZCBkYXRhIHJlY29yZHMuIFRoaXMg
ZnVuY3Rpb24gaXMgdXNlZCBieSAKKyAgICAgICAgICAgIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92
ZURhdGFGb3JUb3BQcml2YXRlbHlPd25lZERvbWFpbnMoKS4KKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YUZvclRvcFByaXZhdGVseU93bmVkRG9tYWlucyk6Cisg
ICAgICAgICAgICBUaGUgZnVuY3Rpb24gV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpy
ZW1vdmVEYXRhUmVjb3JkcygpCisgICAgICAgICAgICBjYWxscyB0byBnZXQgZGF0YSByZWNvcmRz
IHJlbW92ZWQgaW4gYWxsIHBlcnNpc3RlbnQgc3RvcmVzLgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmg6CisgICAgICAgICogV2ViS2l0Mi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHA6
CisgICAgICAgIChXZWJLaXQ6Om1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6c3RhdGlzdGljc0NoYW5nZWRUaW1lckZpcmVkKToKKyAg
ICAgICAgKFdlYktpdDo6bV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmFnZSk6IERlbGV0ZWQu
CisgICAgICAgICAgICBSZW5hbWVkIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JhZ2UgdG8g
bV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUgCisgICAgICAgICAgICB0byBoYXJtb25pemUg
d2l0aCBvdGhlciBuYW1pbmcuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmg6CisK
IDIwMTctMDItMDggIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAg
ICAgICAgUHV0IG5hbWVzIG9uIG1vcmUgVUlWaWV3cyBmb3IgZWFzZSBvZiBkZWJ1Z2dpbmcKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCShyZXZpc2lvbiAyMTE5MzEpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIsNyBA
QCBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nlc3MvQmFja2luZ1N0b3Jl
LmNwcAogICAgIFVJUHJvY2Vzcy9EZWZhdWx0VW5kb0NvbnRyb2xsZXIuY3BwCiAgICAgVUlQcm9j
ZXNzL0xlZ2FjeVNlc3Npb25TdGF0ZUNvZGluZ05vbmUuY3BwCisgICAgVUlQcm9jZXNzL1dlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcAogICAgIFVJUHJvY2Vzcy9XZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCiAgICAgVUlQcm9jZXNzL1dlYlRleHRDaGVja2VyLmNw
cAogICAgIFVJUHJvY2Vzcy9XZWJUZXh0Q2hlY2tlckNsaWVudC5jcHAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtR1RLLmNtYWtlCShyZXZpc2lvbiAyMTE5MzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybUdUSy5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtODgsNiArODgsNyBAQCBsaXN0KEFQUEVO
RCBXZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nlc3MvRGVmYXVsdFVuZG9Db250cm9sbGVyLmNw
cAogICAgIFVJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAKICAgICBVSVByb2Nlc3Mv
TGVnYWN5U2Vzc2lvblN0YXRlQ29kaW5nTm9uZS5jcHAKKyAgICBVSVByb2Nlc3MvV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwCiAgICAgVUlQcm9jZXNzL1dlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZS5jcHAKICAgICBVSVByb2Nlc3MvV2ViVGV4dENoZWNrZXIuY3BwCiAg
ICAgVUlQcm9jZXNzL1dlYlRleHRDaGVja2VyQ2xpZW50LmNwcApJbmRleDogU291cmNlL1dlYktp
dDIvUGxhdGZvcm1NYWMuY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvUGxhdGZv
cm1NYWMuY21ha2UJKHJldmlzaW9uIDIxMTkzMSkKKysrIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
TWFjLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksNiArMTU5LDcgQEAgbGlzdChBUFBFTkQg
V2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL0hpZ2hQZXJmb3JtYW5jZUdyYXBoaWNzVXNh
Z2VTYW1wbGVyLmNwcAogICAgIFVJUHJvY2Vzcy9QZXJBY3Rpdml0eVN0YXRlQ1BVVXNhZ2VTYW1w
bGVyLmNwcAogICAgIFVJUHJvY2Vzcy9XZWJDb250ZXh0TWVudUxpc3RlbmVyUHJveHkuY3BwCisg
ICAgVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcAogICAgIFVJ
UHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCiAKICAgICBVSVByb2Nl
c3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCShyZXZpc2lvbiAyMTE5
MzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTIyNTIsNiArMjI1Miw4IEBAIHZvaWQgQXJndW1lbnRDb2RlcjxS
ZXNvdXJjZUxvYWRTdGF0aXN0aWMKICAgICAKICAgICAvLyBVc2VyIGludGVyYWN0aW9uCiAgICAg
ZW5jb2RlciA8PCBzdGF0aXN0aWNzLmhhZFVzZXJJbnRlcmFjdGlvbjsKKyAgICBlbmNvZGVyIDw8
IHN0YXRpc3RpY3MubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbjsKKyAgICBlbmNvZGVyIDw8IHN0
YXRpc3RpY3MuZ3JhbmRmYXRoZXJlZDsKICAgICAKICAgICAvLyBUb3AgZnJhbWUgc3RhdHMKICAg
ICBlbmNvZGVyIDw8IHN0YXRpc3RpY3MudG9wRnJhbWVIYXNCZWVuTmF2aWdhdGVkVG9CZWZvcmU7
CkBAIC0yMjgyLDYgKzIyODQsNyBAQCB2b2lkIEFyZ3VtZW50Q29kZXI8UmVzb3VyY2VMb2FkU3Rh
dGlzdGljCiAgICAgLy8gUHJldmFsZW50IFJlc291cmNlCiAgICAgZW5jb2RlciA8PCBzdGF0aXN0
aWNzLnJlZGlyZWN0ZWRUb090aGVyUHJldmFsZW50UmVzb3VyY2VPcmlnaW5zOwogICAgIGVuY29k
ZXIgPDwgc3RhdGlzdGljcy5pc1ByZXZhbGVudFJlc291cmNlOworICAgIGVuY29kZXIgPDwgc3Rh
dGlzdGljcy5kYXRhUmVjb3Jkc1JlbW92ZWQ7CiB9CiAKIGJvb2wgQXJndW1lbnRDb2RlcjxSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFdlYkNvcmU6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3MmIHN0YXRpc3RpY3MpCkBAIC0yMjkyLDYgKzIyOTUsMTIgQEAg
Ym9vbCBBcmd1bWVudENvZGVyPFJlc291cmNlTG9hZFN0YXRpc3RpYwogICAgIC8vIFVzZXIgaW50
ZXJhY3Rpb24KICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0YXRpc3RpY3MuaGFkVXNlckludGVy
YWN0aW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShzdGF0aXN0aWNzLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24pKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0YXRpc3RpY3MuZ3JhbmRmYXRoZXJl
ZCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICAvLyBUb3AgZnJhbWUgc3RhdHMK
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0YXRpc3RpY3MudG9wRnJhbWVIYXNCZWVuTmF2aWdh
dGVkVG9CZWZvcmUpKQpAQCAtMjM2Miw3ICsyMzcxLDEwIEBAIGJvb2wgQXJndW1lbnRDb2RlcjxS
ZXNvdXJjZUxvYWRTdGF0aXN0aWMKICAgICAKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0YXRp
c3RpY3MuaXNQcmV2YWxlbnRSZXNvdXJjZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAK
KworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3RhdGlzdGljcy5kYXRhUmVjb3Jkc1JlbW92ZWQp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDog
U291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9BUElPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvQVBJL0FQSU9iamVjdC5oCShyZXZpc2lvbiAyMTE5MzEpCisrKyBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL0FQSU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE1NCw2
ICsxNTQsNyBAQCBwdWJsaWM6CiAgICAgICAgIFZpYnJhdGlvbiwKICAgICAgICAgVmlld3BvcnRB
dHRyaWJ1dGVzLAogICAgICAgICBWaXNpdGVkTGlua1N0b3JlLAorICAgICAgICBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWFuYWdlciwKICAgICAgICAgV2Vic2l0ZURhdGFSZWNvcmQsCiAgICAg
ICAgIFdlYnNpdGVEYXRhU3RvcmUsCiAgICAgICAgIFdlYnNpdGVQb2xpY2llcywKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS0Jhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tCYXNlLmgJKHJldmlzaW9uIDIxMTkzMSkKKysrIFNvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS0Jhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xh
IE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApA
QCAtMTI3LDYgKzEyNyw3IEBAIHR5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZVdLUGFnZVJ1bkJl
Zm8KIHR5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZVdLUGFnZVJ1bkphdmFTY3JpcHRBbGVydFJl
c3VsdExpc3RlbmVyKiBXS1BhZ2VSdW5KYXZhU2NyaXB0QWxlcnRSZXN1bHRMaXN0ZW5lclJlZjsK
IHR5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZVdLUGFnZVJ1bkphdmFTY3JpcHRDb25maXJtUmVz
dWx0TGlzdGVuZXIqIFdLUGFnZVJ1bkphdmFTY3JpcHRDb25maXJtUmVzdWx0TGlzdGVuZXJSZWY7
CiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVXS1BhZ2VSdW5KYXZhU2NyaXB0UHJvbXB0UmVz
dWx0TGlzdGVuZXIqIFdLUGFnZVJ1bkphdmFTY3JpcHRQcm9tcHRSZXN1bHRMaXN0ZW5lclJlZjsK
K3R5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZVdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFn
ZXIqIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJSZWY7CiB0eXBlZGVmIGNvbnN0IHN0
cnVjdCBPcGFxdWVXS1RleHRDaGVja2VyKiBXS1RleHRDaGVja2VyUmVmOwogdHlwZWRlZiBjb25z
dCBzdHJ1Y3QgT3BhcXVlV0tTZXNzaW9uKiBXS1Nlc3Npb25SZWY7CiB0eXBlZGVmIGNvbnN0IHN0
cnVjdCBPcGFxdWVXS1Nlc3Npb25TdGF0ZSogV0tTZXNzaW9uU3RhdGVSZWY7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAkocmV2aXNpb24gMjEx
OTMxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEw
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yMDAsNiArMjAwLDUzIEBAIFdlYlBhZ2VQcm94eSogV2ViUHJvY2Vz
c1Byb3h5Ojp3ZWJQYWdlKHUKICAgICByZXR1cm4gZ2xvYmFsUGFnZU1hcCgpLmdldChwYWdlSUQp
OwogfQogCit2b2lkIFdlYlByb2Nlc3NQcm94eTo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JUb3BQcml2
YXRlbHlPd25lZERvbWFpbnNJbkFsbFBlcnNpc3RlbnREYXRhU3RvcmVzKE9wdGlvblNldDxXZWJz
aXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgVmVjdG9yPFN0cmluZz4mIHRvcFByaXZhdGVseU93bmVk
RG9tYWlucywgYm9vbCBzaG91bGROb3RpZnlQYWdlLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29t
cGxldGlvbkhhbmRsZXIpCit7CisgICAgc3RydWN0IENhbGxiYWNrQWdncmVnYXRvciA6IFRocmVh
ZFNhZmVSZWZDb3VudGVkPENhbGxiYWNrQWdncmVnYXRvcj4geworICAgICAgICBleHBsaWNpdCBD
YWxsYmFja0FnZ3JlZ2F0b3Ioc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25IYW5kbGVy
KQorICAgICAgICAgICAgOiBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGFkZFBl
bmRpbmdDYWxsYmFjaygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBlbmRpbmdDYWxsYmFja3Mr
KzsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCByZW1vdmVQZW5kaW5nQ2FsbGJh
Y2soKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQocGVuZGluZ0NhbGxiYWNrcyk7Cisg
ICAgICAgICAgICAtLXBlbmRpbmdDYWxsYmFja3M7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGNhbGxJZk5lZWRlZCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGNhbGxJ
Zk5lZWRlZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghcGVuZGluZ0NhbGxiYWNrcykK
KyAgICAgICAgICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBwZW5k
aW5nQ2FsbGJhY2tzID0gMDsKKyAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRp
b25IYW5kbGVyOworICAgIH07CisgICAgCisgICAgUmVmUHRyPENhbGxiYWNrQWdncmVnYXRvcj4g
Y2FsbGJhY2tBZ2dyZWdhdG9yID0gYWRvcHRSZWYobmV3IENhbGxiYWNrQWdncmVnYXRvcihXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkpOworCisgICAgZm9yIChhdXRvJiBwYWdlIDogZ2xvYmFs
UGFnZU1hcCgpKSB7CisgICAgICAgIGlmIChwYWdlLnZhbHVlLT53ZWJzaXRlRGF0YVN0b3JlKCku
aXNQZXJzaXN0ZW50KCkpIHsKKyAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVu
ZGluZ0NhbGxiYWNrKCk7CisgICAgICAgICAgICBwYWdlLnZhbHVlLT53ZWJzaXRlRGF0YVN0b3Jl
KCkucmVtb3ZlRGF0YUZvclRvcFByaXZhdGVseU93bmVkRG9tYWlucyhkYXRhVHlwZXMsIHsgfSwg
dG9wUHJpdmF0ZWx5T3duZWREb21haW5zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBzaG91bGROb3Rp
ZnlQYWdlLCBwYWdlXSgpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxkTm90aWZ5UGFnZSkK
KyAgICAgICAgICAgICAgICAgICAgcGFnZS52YWx1ZS0+cG9zdE1lc3NhZ2VUb0luamVjdGVkQnVu
ZGxlKCJXZWJzaXRlRGF0YURlbGV0aW9uRm9yVG9wUHJpdmF0ZWx5T3duZWREb21haW5zRmluaXNo
ZWQiLCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICBXVEY6OlJ1bkxvb3A6Om1haW4oKS5kaXNw
YXRjaChbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNr
QWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKCk7CisgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KK30KKwogUmVmPFdlYlBhZ2VQcm94
eT4gV2ViUHJvY2Vzc1Byb3h5OjpjcmVhdGVXZWJQYWdlKFBhZ2VDbGllbnQmIHBhZ2VDbGllbnQs
IFJlZjxBUEk6OlBhZ2VDb25maWd1cmF0aW9uPiYmIHBhZ2VDb25maWd1cmF0aW9uKQogewogICAg
IHVpbnQ2NF90IHBhZ2VJRCA9IGdlbmVyYXRlUGFnZUlEKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oCShyZXZpc2lvbiAyMTE5MzEpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0xMjAsNiArMTIwLDcgQEAgcHVibGljOgogICAgIHZvaWQgZmV0Y2hXZWJzaXRlRGF0YShXZWJD
b3JlOjpTZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBGdW5jdGlvbjx2b2lk
KFdlYnNpdGVEYXRhKT4gY29tcGxldGlvbkhhbmRsZXIpOwogICAgIHZvaWQgZGVsZXRlV2Vic2l0
ZURhdGEoV2ViQ29yZTo6U2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgc3Rk
OjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCBtb2RpZmllZFNpbmNlLCBGdW5jdGlv
bjx2b2lkKCk+IGNvbXBsZXRpb25IYW5kbGVyKTsKICAgICB2b2lkIGRlbGV0ZVdlYnNpdGVEYXRh
Rm9yT3JpZ2lucyhXZWJDb3JlOjpTZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+
LCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiYsIEZ1bmN0aW9uPHZv
aWQoKT4gY29tcGxldGlvbkhhbmRsZXIpOworICAgIHN0YXRpYyB2b2lkIGRlbGV0ZVdlYnNpdGVE
YXRhRm9yVG9wUHJpdmF0ZWx5T3duZWREb21haW5zSW5BbGxQZXJzaXN0ZW50RGF0YVN0b3JlcyhP
cHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgVmVjdG9yPFN0cmluZz4mIHRvcFByaXZhdGVseU93
bmVkRG9tYWlucywgYm9vbCBzaG91bGROb3RpZnlQYWdlcywgc3RkOjpmdW5jdGlvbjx2b2lkKCk+
IGNvbXBsZXRpb25IYW5kbGVyKTsKIAogICAgIHZvaWQgZW5hYmxlU3VkZGVuVGVybWluYXRpb24o
KTsKICAgICB2b2lkIGRpc2FibGVTdWRkZW5UZXJtaW5hdGlvbigpOwpJbmRleDogU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01hbmFnZXIuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaCIKKworI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKKyNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZE9ic2VydmVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9V
UkwuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgewor
Cit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXRQcmV2YWxlbnRSZXNv
dXJjZShTdHJpbmcgaG9zdE5hbWUsIGJvb2wgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlKQorICAg
ICAgICBXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5zZXRQ
cmV2YWxlbnRSZXNvdXJjZShVUkwoVVJMKCksIGhvc3ROYW1lKSk7CisgICAgZWxzZQorICAgICAg
ICBXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5jbGVhclBy
ZXZhbGVudFJlc291cmNlKFVSTChVUkwoKSwgaG9zdE5hbWUpKTsKK30KKworYm9vbCBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6aXNQcmV2YWxlbnRSZXNvdXJjZShTdHJpbmcgaG9z
dE5hbWUpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWRPYnNlcnZlcigpLmlzUHJldmFsZW50UmVzb3VyY2UoVVJMKFVSTCgpLCBob3N0TmFtZSkpOwor
fQorICAgIAordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6c2V0SGFzSGFk
VXNlckludGVyYWN0aW9uKFN0cmluZyBob3N0TmFtZSwgYm9vbCB2YWx1ZSkKK3sKKyAgICBpZiAo
dmFsdWUpCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWRPYnNl
cnZlcigpLmxvZ1VzZXJJbnRlcmFjdGlvbihVUkwoVVJMKCksIGhvc3ROYW1lKSk7CisgICAgZWxz
ZQorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIo
KS5jbGVhclVzZXJJbnRlcmFjdGlvbihVUkwoVVJMKCksIGhvc3ROYW1lKSk7Cit9CisKK2Jvb2wg
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6Omhhc0hhZFVzZXJJbnRlcmFjdGlvbihT
dHJpbmcgaG9zdE5hbWUpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWRPYnNlcnZlcigpLmhhc0hhZFVzZXJJbnRlcmFjdGlvbihVUkwoVVJMKCksIGhv
c3ROYW1lKSk7Cit9CisKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNl
dFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oZG91YmxlIHNlY29uZHMpCit7CisgICAgV2ViQ29y
ZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZE9ic2VydmVyKCkuc2V0VGltZVRvTGl2ZVVz
ZXJJbnRlcmFjdGlvbihzZWNvbmRzKTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWFuYWdlcjo6ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCkKK3sKKyAgICBXZWJDb3Jl
OjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5maXJlRGF0YU1vZGlmaWNh
dGlvbkhhbmRsZXIoKTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdl
cjo6c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVlKQor
eworICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVu
RGF0YVJlY29yZHNXZXJlU2Nhbm5lZCh2YWx1ZSk7Cit9CisKK3ZvaWQgV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01hbmFnZXI6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJl
Y29yZHNSZW1vdmFsKGJvb2wgdmFsdWUpCit7CisgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3Zh
bCh2YWx1ZSk7Cit9CisKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNl
dE1pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92YWwoZG91YmxlIHNlY29uZHMpCit7
CisgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdl
ZWVuRGF0YVJlY29yZHNSZW1vdmFsKHNlY29uZHMpOworfQorCit2b2lkIFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNYW5hZ2VyOjpyZXNldFRvQ29uc2lzdGVudFN0YXRlKCkKK3sKKyAgICBXZWJD
b3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5zZXRUaW1lVG9MaXZl
VXNlckludGVyYWN0aW9uKDI1OTIwMDApOworICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChmYWxzZSk7Cisg
ICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291
cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCh0cnVlKTsKKyAgICBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnNldE1pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92YWwo
NjApOworICAgIGF1dG8gc3RvcmUgPSBXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkT2JzZXJ2ZXIoKS5zdGF0aXN0aWNzU3RvcmUoKTsKKyAgICBpZiAoc3RvcmUpCisgICAgICAg
IHN0b3JlLT5jbGVhcigpOworfQorICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01hbmFnZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJB
UElPYmplY3QuaCIKKworI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NNYW5hZ2VyIDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVj
dDo6VHlwZTo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI+IHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUmVmPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyPiBjcmVhdGUoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01hbmFnZXIoKSk7CisgICAgfQorICAgIHN0YXRpYyB2b2lkIHNldFByZXZhbGVudFJlc291
cmNlKFN0cmluZyBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7CisgICAgc3RhdGljIGJvb2wgaXNQcmV2
YWxlbnRSZXNvdXJjZShTdHJpbmcgaG9zdE5hbWUpOworICAgIHN0YXRpYyB2b2lkIHNldEhhc0hh
ZFVzZXJJbnRlcmFjdGlvbihTdHJpbmcgaG9zdE5hbWUsIGJvb2wgdmFsdWUpOworICAgIHN0YXRp
YyBib29sIGhhc0hhZFVzZXJJbnRlcmFjdGlvbihTdHJpbmcgaG9zdE5hbWUpOworICAgIHN0YXRp
YyB2b2lkIHNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oZG91YmxlIHNlY29uZHMpOworICAg
IHN0YXRpYyB2b2lkIHNldFJlZHVjZWRUaW1lc3RhbXBSZXNvbHV0aW9uKGRvdWJsZSBzZWNvbmRz
KTsKKyAgICBzdGF0aWMgdm9pZCBmaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKKyAgICBz
dGF0aWMgdm9pZCBzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wp
OworICAgIHN0YXRpYyB2b2lkIHNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJl
Y29yZHNSZW1vdmFsKGJvb2wgdmFsdWUpOworICAgIHN0YXRpYyB2b2lkIHNldE1pbmltdW1UaW1l
QmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92YWwoZG91YmxlIHNlY29uZHMpOworICAgIHN0YXRpYyB2
b2lkIHJlc2V0VG9Db25zaXN0ZW50U3RhdGUoKTsKKworcHJpdmF0ZToKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAJKHJldmlzaW9uIDIxMTkz
MSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw5ICsyNiw5IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgiCiAKLSNp
bmNsdWRlICJBUElXZWJzaXRlRGF0YVN0b3JlLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc01lc3Nh
Z2VzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNz
UHJveHkuaCIKICNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmVNZXNzYWdl
cy5oIgogI2luY2x1ZGUgIldlYnNpdGVEYXRhRmV0Y2hPcHRpb24uaCIKICNpbmNsdWRlICJXZWJz
aXRlRGF0YVR5cGUuaCIKQEAgLTQ1LDkgKzQ1LDExIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotc3RhdGljIGNvbnN0IGF1dG8gbnVtYmVyT2ZTZWNv
bmRzQmV0d2VlblJlbW92aW5nRGF0YVJlY29yZHMgPSA2MDsKIHN0YXRpYyBjb25zdCBhdXRvIGZl
YXR1cmVWZWN0b3JMZW5ndGhUaHJlc2hvbGQgPSAzOworc3RhdGljIGF1dG8gbWluaW11bVRpbWVC
ZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbCA9IDYwOwogc3RhdGljIE9wdGlvblNldDxXZWJLaXQ6
OldlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzVG9SZW1vdmU7CitzdGF0aWMgYm9vbCBub3RpZnlQ
YWdlcyA9IGZhbHNlOworc3RhdGljIGJvb2wgc2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVE
YXRhUmVjb3Jkc1JlbW92YWwgPSB0cnVlOwogCiBSZWY8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlPiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNyZWF0ZShjb25zdCBTdHJp
bmcmIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpCiB7CkBAIC01NSw3ICs1Nyw3IEBA
IFJlZjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+IFdlYlIKIH0KIAogV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoY29u
c3QgU3RyaW5nJiByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KQotICAgIDogbV9yZXNv
dXJjZVN0YXRpc3RpY3NTdG9yZShSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNyZWF0ZSgp
KQorICAgIDogbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpjcmVhdGUoKSkKICAgICAsIG1fc3RhdGlzdGljc1F1ZXVlKFdvcmtRdWV1ZTo6
Y3JlYXRlKCJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUgUHJvY2VzcyBEYXRhIFF1ZXVl
IikpCiAgICAgLCBtX3N0b3JhZ2VQYXRoKHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3Rvcnkp
CiB7CkBAIC02NSw2ICs2NywyMiBAQCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6On5X
ZWJSZXNvCiB7CiB9CiAKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRO
b3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wgYWx3YXlzKQoreworICAg
IG5vdGlmeVBhZ2VzID0gYWx3YXlzOworfQorCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92
YWwoYm9vbCB2YWx1ZSkKK3sKKyAgICBzaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFS
ZWNvcmRzUmVtb3ZhbCA9IHZhbHVlOworfQorCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbChkb3VibGUg
c2Vjb25kcykKK3sKKyAgICBpZiAoc2Vjb25kcyA+PSAwKQorICAgICAgICBtaW5pbXVtVGltZUJl
dHdlZWVuRGF0YVJlY29yZHNSZW1vdmFsID0gc2Vjb25kczsKK30KKwogYm9vbCBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omhhc1ByZXZhbGVudFJlc291cmNlQ2hhcmFjdGVyaXN0aWNz
KGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHJlc291cmNlU3RhdGlzdGljKQogewogICAg
IGF1dG8gc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50ID0gcmVzb3VyY2VTdGF0
aXN0aWMuc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2lucy5zaXplKCk7CkBAIC0xMTEsMTIg
KzEyOSw4IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZW0KICAgICAg
ICAgcmV0dXJuOwogCiAgICAgZG91YmxlIG5vdyA9IGN1cnJlbnRUaW1lKCk7Ci0gICAgaWYgKCFt
X2xhc3RUaW1lRGF0YVJlY29yZHNXZXJlUmVtb3ZlZCkgewotICAgICAgICBtX2xhc3RUaW1lRGF0
YVJlY29yZHNXZXJlUmVtb3ZlZCA9IG5vdzsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGlmIChub3cgPCAobV9sYXN0VGltZURhdGFSZWNvcmRzV2VyZVJlbW92ZWQgKyBudW1iZXJPZlNl
Y29uZHNCZXR3ZWVuUmVtb3ZpbmdEYXRhUmVjb3JkcykpCisgICAgaWYgKG1fbGFzdFRpbWVEYXRh
UmVjb3Jkc1dlcmVSZW1vdmVkCisgICAgICAgICYmIG5vdyA8IChtX2xhc3RUaW1lRGF0YVJlY29y
ZHNXZXJlUmVtb3ZlZCArIG1pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92YWwpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBtX2RhdGFSZWNvcmRzUmVtb3ZhbFBlbmRpbmcgPSB0cnVl
OwpAQCAtMTI0LDU5ICsxMzgsNTIgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnJlbQogCiAgICAgaWYgKGRhdGFUeXBlc1RvUmVtb3ZlLmlzRW1wdHkoKSkgewogICAgICAg
ICBkYXRhVHlwZXNUb1JlbW92ZSB8PSBXZWJzaXRlRGF0YVR5cGU6OkNvb2tpZXM7Ci0gICAgICAg
IGRhdGFUeXBlc1RvUmVtb3ZlIHw9IFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlOwotICAg
ICAgICBkYXRhVHlwZXNUb1JlbW92ZSB8PSBXZWJzaXRlRGF0YVR5cGU6OkluZGV4ZWREQkRhdGFi
YXNlczsKICAgICAgICAgZGF0YVR5cGVzVG9SZW1vdmUgfD0gV2Vic2l0ZURhdGFUeXBlOjpEaXNr
Q2FjaGU7CiAgICAgICAgIGRhdGFUeXBlc1RvUmVtb3ZlIHw9IFdlYnNpdGVEYXRhVHlwZTo6TWVt
b3J5Q2FjaGU7CisgICAgICAgIGRhdGFUeXBlc1RvUmVtb3ZlIHw9IFdlYnNpdGVEYXRhVHlwZTo6
T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGU7CisgICAgICAgIGRhdGFUeXBlc1RvUmVtb3ZlIHw9
IFdlYnNpdGVEYXRhVHlwZTo6U2Vzc2lvblN0b3JhZ2U7CisgICAgICAgIGRhdGFUeXBlc1RvUmVt
b3ZlIHw9IFdlYnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlOworICAgICAgICBkYXRhVHlwZXNU
b1JlbW92ZSB8PSBXZWJzaXRlRGF0YVR5cGU6OldlYlNRTERhdGFiYXNlczsKKyAgICAgICAgZGF0
YVR5cGVzVG9SZW1vdmUgfD0gV2Vic2l0ZURhdGFUeXBlOjpJbmRleGVkREJEYXRhYmFzZXM7Cisg
ICAgICAgIGRhdGFUeXBlc1RvUmVtb3ZlIHw9IFdlYnNpdGVEYXRhVHlwZTo6TWVkaWFLZXlzOwor
ICAgICAgICBkYXRhVHlwZXNUb1JlbW92ZSB8PSBXZWJzaXRlRGF0YVR5cGU6OkhTVFNDYWNoZTsK
KyAgICAgICAgZGF0YVR5cGVzVG9SZW1vdmUgfD0gV2Vic2l0ZURhdGFUeXBlOjpTZWFyY2hGaWVs
ZFJlY2VudFNlYXJjaGVzOworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgICAg
ICBkYXRhVHlwZXNUb1JlbW92ZSB8PSBXZWJzaXRlRGF0YVR5cGU6OlBsdWdJbkRhdGE7CisjZW5k
aWYKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorICAgICAgICBkYXRhVHlwZXNUb1JlbW92ZSB8
PSBXZWJzaXRlRGF0YVR5cGU6Ok1lZGlhRGV2aWNlSWRlbnRpZmllcjsKKyNlbmRpZgogICAgIH0K
IAogICAgIC8vIFN3aXRjaCB0byB0aGUgbWFpbiB0aHJlYWQgdG8gZ2V0IHRoZSBkZWZhdWx0IHdl
YnNpdGUgZGF0YSBzdG9yZQogICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJldmFsZW50
UmVzb3VyY2VEb21haW5zID0gV1RGTW92ZShwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMpLCB0aGlz
XSAoKSBtdXRhYmxlIHsKLSAgICAgICAgYXV0byYgd2Vic2l0ZURhdGFTdG9yZSA9IEFQSTo6V2Vi
c2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpLT53ZWJzaXRlRGF0YVN0b3JlKCk7Ci0K
LSAgICAgICAgd2Vic2l0ZURhdGFTdG9yZS5mZXRjaERhdGEoZGF0YVR5cGVzVG9SZW1vdmUsIHsg
fSwgW3ByZXZhbGVudFJlc291cmNlRG9tYWlucyA9IFdURk1vdmUocHJldmFsZW50UmVzb3VyY2VE
b21haW5zKSwgdGhpc10oYXV0byB3ZWJzaXRlRGF0YVJlY29yZHMpIHsKLSAgICAgICAgICAgIFZl
Y3RvcjxXZWJzaXRlRGF0YVJlY29yZD4gZGF0YVJlY29yZHM7Ci0gICAgICAgICAgICBWZWN0b3I8
U3RyaW5nPiBwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnNXaXRoRGF0YVJlY29yZHM7Ci0gICAgICAg
ICAgICBmb3IgKGF1dG8mIHdlYnNpdGVEYXRhUmVjb3JkIDogd2Vic2l0ZURhdGFSZWNvcmRzKSB7
Ci0gICAgICAgICAgICAgICAgZm9yIChhdXRvJiBwcmV2YWxlbnRSZXNvdXJjZURvbWFpbiA6IHBy
ZXZhbGVudFJlc291cmNlRG9tYWlucykgewotICAgICAgICAgICAgICAgICAgICBpZiAod2Vic2l0
ZURhdGFSZWNvcmQuZGlzcGxheU5hbWUuZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShwcmV2YWxl
bnRSZXNvdXJjZURvbWFpbikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gc3VmZml4
U3RhcnQgPSB3ZWJzaXRlRGF0YVJlY29yZC5kaXNwbGF5TmFtZS5sZW5ndGgoKSAtIHByZXZhbGVu
dFJlc291cmNlRG9tYWluLmxlbmd0aCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFz
dWZmaXhTdGFydCB8fCB3ZWJzaXRlRGF0YVJlY29yZC5kaXNwbGF5TmFtZVtzdWZmaXhTdGFydCAt
IDFdID09ICcuJykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFSZWNvcmRzLmFw
cGVuZCh3ZWJzaXRlRGF0YVJlY29yZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJl
dmFsZW50UmVzb3VyY2VEb21haW5zV2l0aERhdGFSZWNvcmRzLmFwcGVuZChwcmV2YWxlbnRSZXNv
dXJjZURvbWFpbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlm
ICghZGF0YVJlY29yZHMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgbV9kYXRhUmVjb3Jkc1Jl
bW92YWxQZW5kaW5nID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBhdXRvJiB3ZWJzaXRlRGF0YVN0b3JlID0gQVBJOjpXZWJzaXRl
RGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPndlYnNpdGVEYXRhU3RvcmUoKTsKLSAgICAg
ICAgICAgIHdlYnNpdGVEYXRhU3RvcmUucmVtb3ZlRGF0YShkYXRhVHlwZXNUb1JlbW92ZSwgZGF0
YVJlY29yZHMsIFtwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnNXaXRoRGF0YVJlY29yZHMgPSBXVEZN
b3ZlKHByZXZhbGVudFJlc291cmNlRG9tYWluc1dpdGhEYXRhUmVjb3JkcyksIHRoaXNdIHsKLSAg
ICAgICAgICAgICAgICB0aGlzLT5jb3JlU3RvcmUoKS51cGRhdGVTdGF0aXN0aWNzRm9yUmVtb3Zl
ZERhdGFSZWNvcmRzKHByZXZhbGVudFJlc291cmNlRG9tYWluc1dpdGhEYXRhUmVjb3Jkcyk7Ci0g
ICAgICAgICAgICAgICAgbV9kYXRhUmVjb3Jkc1JlbW92YWxQZW5kaW5nID0gZmFsc2U7Ci0gICAg
ICAgICAgICB9KTsKKyAgICAgICAgV2ViUHJvY2Vzc1Byb3h5OjpkZWxldGVXZWJzaXRlRGF0YUZv
clRvcFByaXZhdGVseU93bmVkRG9tYWluc0luQWxsUGVyc2lzdGVudERhdGFTdG9yZXMoZGF0YVR5
cGVzVG9SZW1vdmUsIHByZXZhbGVudFJlc291cmNlRG9tYWlucywgbm90aWZ5UGFnZXMsIFt0aGlz
XSgpIG11dGFibGUgeworICAgICAgICAgICAgbV9kYXRhUmVjb3Jkc1JlbW92YWxQZW5kaW5nID0g
ZmFsc2U7CiAgICAgICAgIH0pOwogICAgIH0pOwogfQogCi12b2lkIFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1VwZGF0ZWQoY29uc3QgVmVjdG9y
PFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M+JiBvcmlnaW5zKQordm9pZCBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMo
KQogewotICAgIGNvcmVTdG9yZSgpLm1lcmdlU3RhdGlzdGljcyhvcmlnaW5zKTsKLQotICAgIGNv
cmVTdG9yZSgpLnByb2Nlc3NTdGF0aXN0aWNzKFt0aGlzXSAoUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyYgcmVzb3VyY2VTdGF0aXN0aWMpIHsKLSAgICAgICAgY2xhc3NpZnlSZXNvdXJjZShyZXNvdXJj
ZVN0YXRpc3RpYyk7Ci0gICAgICAgIHJlbW92ZURhdGFSZWNvcmRzKCk7Ci0gICAgfSk7CisgICAg
aWYgKHNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKSB7Cisg
ICAgICAgIGNvcmVTdG9yZSgpLnByb2Nlc3NTdGF0aXN0aWNzKFt0aGlzXSAoUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0aXN0aWMpIHsKKyAgICAgICAgICAgIGNsYXNzaWZ5UmVz
b3VyY2UocmVzb3VyY2VTdGF0aXN0aWMpOworICAgICAgICB9KTsKKyAgICB9CisgICAgcmVtb3Zl
RGF0YVJlY29yZHMoKTsKICAgICAKICAgICBhdXRvIGVuY29kZXIgPSBjb3JlU3RvcmUoKS5jcmVh
dGVFbmNvZGVyRnJvbURhdGEoKTsKICAgICAKICAgICB3cml0ZUVuY29kZXJUb0Rpc2soKmVuY29k
ZXIuZ2V0KCksICJmdWxsX2Jyb3dzaW5nX3Nlc3Npb24iKTsKIH0KIAordm9pZCBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NVcGRhdGVkKGNvbnN0
IFZlY3RvcjxXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiYgb3JpZ2lucykKK3sKKyAg
ICBjb3JlU3RvcmUoKS5tZXJnZVN0YXRpc3RpY3Mob3JpZ2lucyk7CisgICAgcHJvY2Vzc1N0YXRp
c3RpY3NBbmREYXRhUmVjb3JkcygpOworfQorCiB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoYm9vbCBlbmFibGVkKQog
ewogICAgIGlmIChlbmFibGVkID09IG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQpCkBA
IC0xOTIsOSArMTk5LDE1IEBAIGJvb2wgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpy
ZXMKICAgICByZXR1cm4gbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZDsKIH0KIAorCiB2
b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVnaXN0ZXJTaGFyZWRSZXNvdXJj
ZUxvYWRPYnNlcnZlcigpCiB7Ci0gICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZE9ic2Vy
dmVyKCkuc2V0U3RhdGlzdGljc1N0b3JlKG1fcmVzb3VyY2VTdGF0aXN0aWNzU3RvcmUuY29weVJl
ZigpKTsKKyAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5zZXRTdGF0
aXN0aWNzU3RvcmUobV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY29weVJlZigpKTsKKyAg
ICBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS0+c2V0Tm90aWZpY2F0aW9uQ2FsbGJhY2so
W3RoaXNdIHsKKyAgICAgICAgaWYgKG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLT5pc0Vt
cHR5KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHByb2Nlc3NTdGF0aXN0aWNzQW5k
RGF0YVJlY29yZHMoKTsKKyAgICB9KTsKIH0KIAogdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnJlYWREYXRhRnJvbURpc2tJZk5lZWRlZCgpCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZS5oCShyZXZpc2lvbiAyMTE5MzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDkg
QEAgY2xhc3MgV2ViUHJvY2Vzc1Byb3h5OwogY2xhc3MgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlIDogcHVibGljIElQQzo6Q29ubmVjdGlvbjo6V29ya1F1ZXVlTWVzc2FnZVJlY2VpdmVy
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZT4gY3JlYXRlKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyB2b2lkIHNldE5vdGlmeVBhZ2Vz
V2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCk7CisgICAgc3RhdGljIHZvaWQgc2V0U2hv
dWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCk7CisgICAg
c3RhdGljIHZvaWQgc2V0TWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbChkb3Vi
bGUpOwogICAgIHZpcnR1YWwgfldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSgpOwogICAg
IAogICAgIHZvaWQgc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoYm9vbCk7CkBAIC02
NSwxNCArNjgsMTQgQEAgcHVibGljOgogCiAgICAgdm9pZCByZWFkRGF0YUZyb21EaXNrSWZOZWVk
ZWQoKTsKIAotICAgIHZvaWQgbWVyZ2VTdGF0aXN0aWNzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiYpOwotCi0gICAgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlJiBjb3JlU3RvcmUoKSB7IHJldHVybiBtX3Jlc291cmNlU3RhdGlzdGljc1N0
b3JlLmdldCgpOyB9Ci0gICAgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlJiBjb3JlU3RvcmUoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlU3RhdGlzdGljc1N0b3Jl
LmdldCgpOyB9CisgICAgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJiBjb3Jl
U3RvcmUoKSB7IHJldHVybiBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5nZXQoKTsgfQor
ICAgIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSYgY29yZVN0b3Jl
KCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuZ2V0KCk7IH0K
IAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUo
Y29uc3QgU3RyaW5nJik7CiAKKyAgICB2b2lkIHByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29y
ZHMoKTsKKwogICAgIGJvb2wgaGFzUHJldmFsZW50UmVzb3VyY2VDaGFyYWN0ZXJpc3RpY3MoY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpOwogICAgIHZvaWQgY2xhc3NpZnlS
ZXNvdXJjZShXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7CiAgICAgdm9pZCByZW1v
dmVEYXRhUmVjb3JkcygpOwpAQCAtODUsNyArODgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgd3Jp
dGVFbmNvZGVyVG9EaXNrKFdlYkNvcmU6OktleWVkRW5jb2RlciYsIGNvbnN0IFN0cmluZyYgbGFi
ZWwpIGNvbnN0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpLZXllZERlY29kZXI+IGNy
ZWF0ZURlY29kZXJGcm9tRGlzayhjb25zdCBTdHJpbmcmIGxhYmVsKSBjb25zdDsKIAotICAgIFJl
ZjxXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+IG1fcmVzb3VyY2VTdGF0aXN0
aWNzU3RvcmU7CisgICAgUmVmPFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4g
bV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU7CiAgICAgUmVmPFdURjo6V29ya1F1ZXVlPiBt
X3N0YXRpc3RpY3NRdWV1ZTsKICAgICBTdHJpbmcgbV9zdG9yYWdlUGF0aDsKICAgICBib29sIG1f
cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQgeyBmYWxzZSB9OwpJbmRleDogU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQVBJQ2FzdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0FQSUNhc3QuaAkocmV2aXNpb24gMjExOTMxKQorKysg
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLQVBJQ2FzdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIw
MTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CkBAIC0xMDcsNiArMTA3LDcgQEAgY2xhc3MgV2ViUHJvY2Vzc1Bvb2w7CiBjbGFz
cyBXZWJQcm90ZWN0aW9uU3BhY2U7CiBjbGFzcyBXZWJSZW5kZXJMYXllcjsKIGNsYXNzIFdlYlJl
bmRlck9iamVjdDsKK2NsYXNzIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOwogY2xh
c3MgV2ViVGV4dENoZWNrZXI7CiBjbGFzcyBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTsK
IGNsYXNzIFdlYlZpYnJhdGlvblByb3h5OwpAQCAtMTU2LDYgKzE1Nyw3IEBAIFdLX0FERF9BUElf
TUFQUElORyhXS1ByZWZlcmVuY2VzUmVmLCBXZWIKIFdLX0FERF9BUElfTUFQUElORyhXS1Byb3Rl
Y3Rpb25TcGFjZVJlZiwgV2ViUHJvdGVjdGlvblNwYWNlKQogV0tfQUREX0FQSV9NQVBQSU5HKFdL
UmVuZGVyTGF5ZXJSZWYsIFdlYlJlbmRlckxheWVyKQogV0tfQUREX0FQSV9NQVBQSU5HKFdLUmVu
ZGVyT2JqZWN0UmVmLCBXZWJSZW5kZXJPYmplY3QpCitXS19BRERfQVBJX01BUFBJTkcoV0tSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclJlZiwgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01h
bmFnZXIpCiBXS19BRERfQVBJX01BUFBJTkcoV0tTZXNzaW9uU3RhdGVSZWYsIEFQSTo6U2Vzc2lv
blN0YXRlKQogV0tfQUREX0FQSV9NQVBQSU5HKFdLVGV4dENoZWNrZXJSZWYsIFdlYlRleHRDaGVj
a2VyKQogV0tfQUREX0FQSV9NQVBQSU5HKFdLVXNlckNvbnRlbnRDb250cm9sbGVyUmVmLCBXZWJV
c2VyQ29udGVudENvbnRyb2xsZXJQcm94eSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWFuYWdlci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9DL1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oIgorCisjaW5jbHVkZSAiV0tBUElD
YXN0LmgiCisjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaCIKKwor
dXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworV0tUeXBlSUQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWFuYWdlckdldFR5cGVJRCgpCit7CisgICAgcmV0dXJuIHRvQVBJKFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNYW5hZ2VyOjpBUElUeXBlKTsKK30KKwordm9pZCBXS1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NNYW5hZ2VyU2V0UHJldmFsZW50UmVzb3VyY2UoU3RyaW5nIGhvc3ROYW1lLCBib29s
IHZhbHVlKQoreworICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXRQcmV2
YWxlbnRSZXNvdXJjZShob3N0TmFtZSwgdmFsdWUpOworfQorCitib29sIFdLUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01hbmFnZXJJc1ByZXZhbGVudFJlc291cmNlKFN0cmluZyBob3N0TmFtZSkKK3sK
KyAgICByZXR1cm4gV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OmlzUHJldmFsZW50
UmVzb3VyY2UoaG9zdE5hbWUpOworfQorCit2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01h
bmFnZXJTZXRIYXNIYWRVc2VySW50ZXJhY3Rpb24oU3RyaW5nIGhvc3ROYW1lLCBib29sIHZhbHVl
KQoreworICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXRIYXNIYWRVc2Vy
SW50ZXJhY3Rpb24oaG9zdE5hbWUsIHZhbHVlKTsKK30KKworYm9vbCBXS1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NNYW5hZ2VySXNIYXNIYWRVc2VySW50ZXJhY3Rpb24oU3RyaW5nIGhvc3ROYW1lKQor
eworICAgIHJldHVybiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6aGFzSGFkVXNl
ckludGVyYWN0aW9uKGhvc3ROYW1lKTsKK30KKwordm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNYW5hZ2VyU2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihkb3VibGUgc2Vjb25kcykKK3sK
KyAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6c2V0VGltZVRvTGl2ZVVzZXJJ
bnRlcmFjdGlvbihzZWNvbmRzKTsKK30KKwordm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NN
YW5hZ2VyRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCkKK3sKKyAgICBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWFuYWdlcjo6ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7Cit9CisK
K3ZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNldE5vdGlmeVBhZ2VzV2hlbkRh
dGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCB2YWx1ZSkKK3sKKyAgICBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWFuYWdlcjo6c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5l
ZCh2YWx1ZSk7Cit9CisKK3ZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNldFNo
b3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wgdmFsdWUp
Cit7CisgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNldFNob3VsZENsYXNz
aWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKHZhbHVlKTsKK30KKwordm9pZCBX
S1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0TWluaW11bVRpbWVCZXR3ZWVlbkRhdGFS
ZWNvcmRzUmVtb3ZhbChkb3VibGUgc2Vjb25kcykKK3sKKyAgICBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWFuYWdlcjo6c2V0TWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbChz
ZWNvbmRzKTsKK30KKwordm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyUmVzZXRU
b0NvbnNpc3RlbnRTdGF0ZSgpCit7CisgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFn
ZXI6OnJlc2V0VG9Db25zaXN0ZW50U3RhdGUoKTsKK30KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01hbmFnZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0MvV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPFdl
YktpdC9XS0Jhc2UuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworI2lmZGVm
IF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorICAgIAorICAgIFdLX0VYUE9SVCBX
S1R5cGVJRCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyR2V0VHlwZUlEKCk7CisgICAg
CisgICAgV0tfRVhQT1JUIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNldFBy
ZXZhbGVudFJlc291cmNlKFN0cmluZyBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7CisgICAgV0tfRVhQ
T1JUIGJvb2wgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcklzUHJldmFsZW50UmVzb3Vy
Y2UoU3RyaW5nIGhvc3ROYW1lKTsKKyAgICBXS19FWFBPUlQgdm9pZCBXS1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NNYW5hZ2VyU2V0SGFzSGFkVXNlckludGVyYWN0aW9uKFN0cmluZyBob3N0TmFtZSwg
Ym9vbCB2YWx1ZSk7CisgICAgV0tfRVhQT1JUIGJvb2wgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWFuYWdlcklzSGFzSGFkVXNlckludGVyYWN0aW9uKFN0cmluZyBob3N0TmFtZSk7CisgICAgV0tf
RVhQT1JUIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNldFRpbWVUb0xpdmVV
c2VySW50ZXJhY3Rpb24oZG91YmxlIHNlY29uZHMpOworICAgIFdLX0VYUE9SVCB2b2lkIFdLUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXRSZWR1Y2VkVGltZXN0YW1wUmVzb2x1dGlvbihk
b3VibGUgc2Vjb25kcyk7CisgICAgV0tfRVhQT1JUIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWFuYWdlckZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOworICAgIFdLX0VYUE9SVCB2
b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXROb3RpZnlQYWdlc1doZW5EYXRh
UmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wgdmFsdWUpOworICAgIFdLX0VYUE9SVCB2b2lkIFdLUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9y
ZURhdGFSZWNvcmRzUmVtb3ZhbChib29sIHZhbHVlKTsKKyAgICBXS19FWFBPUlQgdm9pZCBXS1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0TWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNv
cmRzUmVtb3ZhbChkb3VibGUgc2Vjb25kcyk7CisgICAgV0tfRVhQT1JUIHZvaWQgV0tSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWFuYWdlclJlc2V0VG9Db25zaXN0ZW50U3RhdGUoKTsKKworI2lmZGVm
IF9fY3BsdXNwbHVzCit9CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAJKHJldmlzaW9u
IDIxMTkzMSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRl
RGF0YVN0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDczLDYgKzQ3MywzNSBAQCB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OmZldGNoRGF0YShPcHRpb25TCiAgICAgY2FsbGJhY2tBZ2dyZWdhdG9y
LT5jYWxsSWZOZWVkZWQoKTsKIH0KIAordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGFG
b3JUb3BQcml2YXRlbHlPd25lZERvbWFpbnMoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0
YVR5cGVzLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4gZmV0Y2hPcHRpb25zLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgdG9wUHJpdmF0ZWx5T3duZWREb21haW5zLCBzdGQ6OmZ1bmN0
aW9uPHZvaWQoVmVjdG9yPFdlYnNpdGVEYXRhUmVjb3JkPik+IGNvbXBsZXRpb25IYW5kbGVyKQor
eworICAgIGZldGNoRGF0YShkYXRhVHlwZXMsIGZldGNoT3B0aW9ucywgW3RvcFByaXZhdGVseU93
bmVkRG9tYWlucywgY29tcGxldGlvbkhhbmRsZXIsIHRoaXNdKGF1dG8gZXhpc3RpbmdEYXRhUmVj
b3JkcykgeworICAgICAgICBWZWN0b3I8V2Vic2l0ZURhdGFSZWNvcmQ+IG1hdGNoaW5nRGF0YVJl
Y29yZHM7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IGRvbWFpbnNXaXRoRGF0YVJlY29yZHM7Cisg
ICAgICAgIGZvciAoYXV0byYgZGF0YVJlY29yZCA6IGV4aXN0aW5nRGF0YVJlY29yZHMpIHsKKyAg
ICAgICAgICAgIGJvb2wgZGF0YVJlY29yZEFkZGVkOworICAgICAgICAgICAgZm9yIChhdXRvJiBk
YXRhUmVjb3JkT3JpZ2luRGF0YSA6IGRhdGFSZWNvcmQub3JpZ2lucykgeworICAgICAgICAgICAg
ICAgIGRhdGFSZWNvcmRBZGRlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIFN0cmluZyBkYXRh
UmVjb3JkSG9zdCA9IGRhdGFSZWNvcmRPcmlnaW5EYXRhLnNlY3VyaXR5T3JpZ2luKCkuZ2V0KCku
aG9zdCgpOworICAgICAgICAgICAgICAgIGZvciAoYXV0byYgdG9wUHJpdmF0ZWx5T3duZWREb21h
aW4gOiB0b3BQcml2YXRlbHlPd25lZERvbWFpbnMpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGRhdGFSZWNvcmRIb3N0LmVuZHNXaXRoSWdub3JpbmdBU0NJSUNhc2UodG9wUHJpdmF0ZWx5T3du
ZWREb21haW4pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHN1ZmZpeFN0YXJ0ID0g
ZGF0YVJlY29yZEhvc3QubGVuZ3RoKCkgLSB0b3BQcml2YXRlbHlPd25lZERvbWFpbi5sZW5ndGgo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3VmZml4U3RhcnQgfHwgZGF0YVJlY29y
ZEhvc3Rbc3VmZml4U3RhcnQgLSAxXSA9PSAnLicpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtYXRjaGluZ0RhdGFSZWNvcmRzLmFwcGVuZChkYXRhUmVjb3JkKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkb21haW5zV2l0aERhdGFSZWNvcmRzLmFwcGVuZCh0b3BQcml2YXRl
bHlPd25lZERvbWFpbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVJlY29yZEFk
ZGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBpZiAoZGF0YVJlY29yZEFkZGVkKQorICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihtYXRjaGluZ0RhdGFSZWNvcmRzKTsKKyAgICB9KTsKK30KKyAgICAKIHN0YXRpYyBQ
cm9jZXNzQWNjZXNzVHlwZSBjb21wdXRlTmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlRm9yRGF0YVJl
bW92YWwoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBib29sIGlzTm9uUGVy
c2lzdGVudFN0b3JlKQogewogICAgIFByb2Nlc3NBY2Nlc3NUeXBlIHByb2Nlc3NBY2Nlc3NUeXBl
ID0gUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5vbmU7CkBAIC05OTgsNiArMTAyNywxNSBAQCB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoT3B0aW9uCiAgICAgY2FsbGJhY2tBZ2dyZWdhdG9y
LT5jYWxsSWZOZWVkZWQoKTsKIH0KIAordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRh
Rm9yVG9wUHJpdmF0ZWx5T3duZWREb21haW5zKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRh
dGFUeXBlcywgT3B0aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24+IGZldGNoT3B0aW9ucywg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHRvcFByaXZhdGVseU93bmVkRG9tYWlucywgc3RkOjpmdW5j
dGlvbjx2b2lkKCk+IGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGZldGNoRGF0YUZvclRvcFBy
aXZhdGVseU93bmVkRG9tYWlucyhkYXRhVHlwZXMsIGZldGNoT3B0aW9ucywgdG9wUHJpdmF0ZWx5
T3duZWREb21haW5zLCBbZGF0YVR5cGVzLCBjb21wbGV0aW9uSGFuZGxlciwgdGhpc10oYXV0byB3
ZWJzaXRlRGF0YVJlY29yZHMpIHsKKyAgICAgICAgdGhpcy0+cmVtb3ZlRGF0YShkYXRhVHlwZXMs
IHdlYnNpdGVEYXRhUmVjb3JkcywgW2NvbXBsZXRpb25IYW5kbGVyXSgpIHsKKyAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OndlYlBhZ2VXYXNBZGRlZChXZWJQYWdlUHJveHkmIHdlYlBhZ2VQcm94
eSkKIHsKICAgICBpZiAobV9zdG9yYWdlTWFuYWdlcikKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAkocmV2
aXNpb24gMjExOTMxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dl
YnNpdGVEYXRhU3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtODQsOCArODQsMTAgQEAgcHVibGlj
OgogICAgIHN0YXRpYyB2b2lkIGNsb25lU2Vzc2lvbkRhdGEoV2ViUGFnZVByb3h5JiBzb3VyY2VQ
YWdlLCBXZWJQYWdlUHJveHkmIG5ld1BhZ2UpOwogCiAgICAgdm9pZCBmZXRjaERhdGEoT3B0aW9u
U2V0PFdlYnNpdGVEYXRhVHlwZT4sIE9wdGlvblNldDxXZWJzaXRlRGF0YUZldGNoT3B0aW9uPiwg
c3RkOjpmdW5jdGlvbjx2b2lkIChWZWN0b3I8V2Vic2l0ZURhdGFSZWNvcmQ+KT4gY29tcGxldGlv
bkhhbmRsZXIpOworICAgIHZvaWQgZmV0Y2hEYXRhRm9yVG9wUHJpdmF0ZWx5T3duZWREb21haW5z
KE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9w
dGlvbj4sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB0b3BQcml2YXRlbHlPd25lZERvbWFpbnMsIHN0
ZDo6ZnVuY3Rpb248dm9pZChWZWN0b3I8V2Vic2l0ZURhdGFSZWNvcmQ+KT4gY29tcGxldGlvbkhh
bmRsZXIpOwogICAgIHZvaWQgcmVtb3ZlRGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwg
c3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCBtb2RpZmllZFNpbmNlLCBzdGQ6
OmZ1bmN0aW9uPHZvaWQgKCk+IGNvbXBsZXRpb25IYW5kbGVyKTsKICAgICB2b2lkIHJlbW92ZURh
dGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIGNvbnN0IFZlY3RvcjxXZWJzaXRlRGF0YVJl
Y29yZD4mLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGNvbXBsZXRpb25IYW5kbGVyKTsKKyAgICB2
b2lkIHJlbW92ZURhdGFGb3JUb3BQcml2YXRlbHlPd25lZERvbWFpbnMoT3B0aW9uU2V0PFdlYnNp
dGVEYXRhVHlwZT4sIE9wdGlvblNldDxXZWJzaXRlRGF0YUZldGNoT3B0aW9uPiwgY29uc3QgVmVj
dG9yPFN0cmluZz4mIHRvcFByaXZhdGVseU93bmVkRG9tYWlucywgc3RkOjpmdW5jdGlvbjx2b2lk
KCk+IGNvbXBsZXRpb25IYW5kbGVyKTsKIAogICAgIFN0b3JhZ2VNYW5hZ2VyKiBzdG9yYWdlTWFu
YWdlcigpIHsgcmV0dXJuIG1fc3RvcmFnZU1hbmFnZXIuZ2V0KCk7IH0KIApJbmRleDogU291cmNl
L1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMjExOTMxKQorKysgU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQ2LDYgKzExNDYsMTAgQEAKIAkJNjUwMUJEMUEx
MkYxMjQzNDAwRTlGMjQ4IC8qIFdLQnVuZGxlSW5zcGVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1Qjg2RjE3MTJGMTFEN0IwMEI3REQ4QSAv
KiBXS0J1bmRsZUluc3BlY3Rvci5jcHAgKi87IH07CiAJCTY1OUM1NTFFMTMwMDA2NDEwMDI1QzBD
MiAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VSZXNvdXJjZUxvYWRDbGllbnQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU0NkE4MjkxMzAwMDE2NDAwMENF
QjFDIC8qIEluamVjdGVkQnVuZGxlUGFnZVJlc291cmNlTG9hZENsaWVudC5jcHAgKi87IH07CiAJ
CTY1Qjg2RjFFMTJGMTFERTMwMEI3REQ4QSAvKiBXS0J1bmRsZUluc3BlY3Rvci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVCODZGMTgxMkYxMUQ3QjAw
QjdERDhBIC8qIFdLQnVuZGxlSW5zcGVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNkJFOTY5OUMxRTQzQjNGRjAwOEI3NDgzIC8qIFdLUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDZCRTk2OTlCMUU0M0IzRkYwMDhCNzQ4MyAvKiBXS1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJNkJFOTY5OUUxRTQzQjQxRDAwOEI3NDgzIC8qIFdLUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNkJFOTY5OUQxRTQzQjQxRDAwOEI3NDgzIC8qIFdLUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01hbmFnZXIuY3BwICovOyB9OworCQk2QkU5NjlBMDFFNDNCODZFMDA4Qjc0ODMg
LyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZCRTk2OTlGMUU0M0I4NkUwMDhCNzQ4MyAvKiBX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oICovOyB9OworCQk2QkU5NjlBMjFFNDNC
OEE0MDA4Qjc0ODMgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkJFOTY5QTExRTQzQjhB
NDAwOEI3NDgzIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcCAqLzsgfTsK
IAkJNkVFODQ5QzgxMzY4RDkzOTAwMzhENDgxIC8qIFdLSW5zcGVjdG9yUHJpdmF0ZU1hYy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVFODQ5QzYxMzY4
RDkyRDAwMzhENDgxIC8qIFdLSW5zcGVjdG9yUHJpdmF0ZU1hYy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyOEU4NkYxMTc5NTE4OEMwMDg3ODc5
RSAvKiBXZWJDb2xvclBpY2tlck1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzI4RTg2RUYxNzk1MTg4QzAwODc4NzlFIC8qIFdlYkNvbG9yUGlja2Vy
TWFjLmggKi87IH07CiAJCTcyOEU4NkYyMTc5NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBpY2tl
ck1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcy
OEU4NkYwMTc5NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBpY2tlck1hYy5tbSAqLzsgfTsKQEAg
LTMzMjksNiArMzMzMywxMCBAQAogCQk2NTQ2QTgyQTEzMDAwMTY0MDAwQ0VCMUMgLyogSW5qZWN0
ZWRCdW5kbGVQYWdlUmVzb3VyY2VMb2FkQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEluamVjdGVkQnVuZGxlUGFnZVJlc291cmNlTG9hZENsaWVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk2NUI4NkYxNzEyRjExRDdCMDBCN0REOEEgLyogV0tCdW5k
bGVJbnNwZWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0tC
dW5kbGVJbnNwZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NUI4NkYx
ODEyRjExRDdCMDBCN0REOEEgLyogV0tCdW5kbGVJbnNwZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV0tCdW5kbGVJbnNwZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNkJFOTY5OUIxRTQzQjNGRjAwOEI3NDgzIC8qIFdLUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk2QkU5Njk5RDFFNDNCNDFEMDA4Qjc0ODMgLyogV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFu
YWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXS1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NkJFOTY5OUYxRTQzQjg2RTAwOEI3NDgzIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5h
Z2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZCRTk2OUEx
MUU0M0I4QTQwMDhCNzQ4MyAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWFuYWdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZEOEE5MUE1
MTFGMEVGRDEwMEREMDFGRSAvKiBjb20uYXBwbGUuV2ViUHJvY2Vzcy5zYi5pbiAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IG5hbWUgPSBjb20uYXBwbGUuV2ViUHJvY2Vzcy5zYi5pbjsgcGF0aCA9IFdlYlByb2Nl
c3MvY29tLmFwcGxlLldlYlByb2Nlc3Muc2IuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTZFRTg0OUM2MTM2OEQ5MkQwMDM4RDQ4MSAvKiBXS0luc3BlY3RvclByaXZhdGVNYWMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV0tJbnNwZWN0b3JQcml2YXRlTWFjLmg7
IHBhdGggPSBtYWMvV0tJbnNwZWN0b3JQcml2YXRlTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcyOEU4NkVGMTc5NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBpY2tlck1hYy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb2xvclBpY2tlck1hYy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjUzNCw2ICs2NTQyLDggQEAKIAkJCQlCQzEx
MUIwRDExMkY1RTRGMDAzMzdCQUIgLyogV2ViUHJvY2Vzc1Byb3h5LmNwcCAqLywKIAkJCQlCQzAz
MkRDRjEwRjQzODlGMDA1OEMxNUEgLyogV2ViUHJvY2Vzc1Byb3h5LmggKi8sCiAJCQkJQkNFRTdB
QjMxMjgxNzA5NTAwOTgyN0RBIC8qIFdlYlByb2Nlc3NQcm94eS5tZXNzYWdlcy5pbiAqLywKKwkJ
CQk2QkU5Njk5RjFFNDNCODZFMDA4Qjc0ODMgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01h
bmFnZXIuaCAqLywKKwkJCQk2QkU5NjlBMTFFNDNCOEE0MDA4Qjc0ODMgLyogV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01hbmFnZXIuY3BwICovLAogCQkJCTdBOUNEOEMwMUM3Nzk4NDkwMEQ5RjZD
NyAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwICovLAogCQkJCTdBOUNEOEMx
MUM3Nzk4NDkwMEQ5RjZDNyAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCAqLywK
IAkJCQk3QTlDRDhDMjFDNzc5QUQ2MDBEOUY2QzcgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlLm1lc3NhZ2VzLmluICovLApAQCAtNjcyMiw2ICs2NzMyLDggQEAKIAkJCQk1MThBQ0FF
OTEyQUVFNkJCMDBCMDRCODMgLyogV0tQcm90ZWN0aW9uU3BhY2VUeXBlcy5oICovLAogCQkJCTMz
MzY3NjM4MTMwQzk5REMwMDZDOURFMiAvKiBXS1Jlc291cmNlQ2FjaGVNYW5hZ2VyLmNwcCAqLywK
IAkJCQkzMzM2NzYzOTEzMEM5OURDMDA2QzlERTIgLyogV0tSZXNvdXJjZUNhY2hlTWFuYWdlci5o
ICovLAorCQkJCTZCRTk2OTlEMUU0M0I0MUQwMDhCNzQ4MyAvKiBXS1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NNYW5hZ2VyLmNwcCAqLywKKwkJCQk2QkU5Njk5QjFFNDNCM0ZGMDA4Qjc0ODMgLyogV0tS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oICovLAogCQkJCTFBREU0NkIwMTk1NEVDNjEw
MDBGNzk4NSAvKiBXS1Nlc3Npb25TdGF0ZVJlZi5jcHAgKi8sCiAJCQkJMUFERTQ2QjExOTU0RUM2
MTAwMEY3OTg1IC8qIFdLU2Vzc2lvblN0YXRlUmVmLmggKi8sCiAJCQkJMzE0ODg4RkUxRDkxQjEx
RDAwMzc3MDQyIC8qIFdLVGV4dENoZWNrZXIuY3BwICovLApAQCAtODU3NCw2ICs4NTg2LDcgQEAK
IAkJCQk5MzIxRDU4QTFBMzhGMTk2MDA4MDUyQkUgLyogV0tJbW1lZGlhdGVBY3Rpb25UeXBlcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMUM4RTI5MzkxMjc2MUU1QjAwQkM3QkQwIC8qIFdLSW5zcGVj
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjNDNzI1QjE5NkY2MDRFMDBBRUREMEMgLyogV0tJ
bnNwZWN0b3JIaWdobGlnaHRWaWV3LmggaW4gSGVhZGVycyAqLywKKwkJCQk2QkU5NjlBMDFFNDNC
ODZFMDA4Qjc0ODMgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE1NDI5M0E0MTk1QTQzREEwMDI3ODJDNyAvKiBXS0luc3BlY3Rvck5vZGVT
ZWFyY2hHZXN0dXJlUmVjb2duaXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkVFODQ5QzgxMzY4
RDkzOTAwMzhENDgxIC8qIFdLSW5zcGVjdG9yUHJpdmF0ZU1hYy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNTFBOUUxMEIxMzE1Q0QxODAwOUU3MDMxIC8qIFdLS2V5VmFsdWVTdG9yYWdlTWFuYWdlci5o
IGluIEhlYWRlcnMgKi8sCkBAIC04NzU4LDYgKzg3NzEsNyBAQAogCQkJCTFBM0NDMTY3MTg5MDZB
Q0YwMDFFNkVEOCAvKiBXS1dlYlZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBREY1OTFCMTg5
MDUyOEUwMDQzQzE0NSAvKiBXS1dlYlZpZXdDb25maWd1cmF0aW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQkyRDdBQUZENjE4Qzk1NkFGMDBBN0FDRDQgLyogV0tXZWJWaWV3Q29uZmlndXJhdGlvbklu
dGVybmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQk2QkU5Njk5QzFFNDNCM0ZGMDA4Qjc0ODMgLyog
V0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFD
MTQxNTExOEFDNDdFRTAwNkM2MDJDIC8qIFdLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk0MURDNDU5QzFFM0RCQjI4MDBCMTFGNTEgLyogTGliV2ViUlRD
U29ja2V0Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDdBQUZEMzE4Qzg2NDA2MDBBN0FD
RDQgLyogV0tXZWJWaWV3Q29udGVudFByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTk5Nzgs
NiArOTk5Miw3IEBACiAJCQkJMzc2MDg4MUUxNTA0MTNFOTAwRkM4MkM3IC8qIFdlYlJlbmRlck9i
amVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTBBRkZCOTE2NTQyMDQ4MDAxQkEwNUUgLyog
V2ViUmVzb3VyY2VMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFGMDYwRTExNjU0MzE4
NTAwRjMyODFCIC8qIFdlYlJlc291cmNlTG9hZGVyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3Vy
Y2VzICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2QkU5NjlBMjFFNDNCOEE0
MDA4Qjc0ODMgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTFGMDYwRTExNjU0MzE4NTAwRjMyODFDIC8qIFdlYlJUQ1NvY2tldE1lc3Nh
Z2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUYwNjBFMTE2NTQzMTg1MDBGMzI4
MkMgLyogV2ViUlRDUmVzb2x2ZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNTFGMDYwRTExNjU0MzE4NTAwRjMyODFEIC8qIE5ldHdvcmtSVENTb2NrZXRNZXNzYWdlUmVj
ZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDE2OCw2ICsxMDE4Myw3IEBACiAJCQkJMzc5
NDg0MDgxNTBDNEI5NzAwRTUyQ0U5IC8qIFdLUmVuZGVyTGF5ZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMzc2MDg4MjIxNTA0MTRGNzAwRkM4MkM3IC8qIFdLUmVuZGVyT2JqZWN0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTMzMzY3NjNBMTMwQzk5REMwMDZDOURFMiAvKiBXS1Jlc291cmNlQ2Fj
aGVNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA2QkU5Njk5RTFFNDNCNDFEMDA4Qjc0ODMgLyogV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTdFMzc3ODE4RTRBNEZFMDAzRDBGRkYg
LyogV0tTY3JpcHRNZXNzYWdlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDQjRFNTUxOEJCRTA0
NDAwMEZDRkM5IC8qIFdLU2Nyb2xsVmlldy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxQ0QxQzY2
MUIzNEI5REMwMDE0MkNBNSAvKiBXS1NlY3VyaXR5T3JpZ2luLm1tIGluIFNvdXJjZXMgKi8sCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAJKHJldmlzaW9uIDIx
MTkzMSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xNjgsNyArMTY4LDcgQEAgV2ViUHJvY2Vzczo6V2ViUHJvY2VzcygpCiAj
aWYgUExBVEZPUk0oSU9TKQogICAgICwgbV93ZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXIoKnRoaXMp
CiAjZW5kaWYKLSAgICAsIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JhZ2UoV2ViQ29yZTo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjcmVhdGUoKSkKKyAgICAsIG1fcmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlKFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
Y3JlYXRlKCkpCiB7CiAgICAgLy8gSW5pdGlhbGl6ZSBvdXIgcGxhdGZvcm0gc3RyYXRlZ2llcy4K
ICAgICBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmluaXRpYWxpemUoKTsKQEAgLTE5MCw4ICsxOTAs
OCBAQCBXZWJQcm9jZXNzOjpXZWJQcm9jZXNzKCkKIAogICAgIG1fcGx1Z0luQXV0b1N0YXJ0T3Jp
Z2luSGFzaGVzLmFkZChTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwgSGFzaE1hcDx1bnNp
Z25lZCwgZG91YmxlPigpKTsKIAotICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWRPYnNl
cnZlcigpLnNldFN0YXRpc3RpY3NTdG9yZShtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yYWdl
LmNvcHlSZWYoKSk7Ci0gICAgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmFnZS0+c2V0Tm90
aWZpY2F0aW9uQ2FsbGJhY2soW3RoaXNdIHsKKyAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkT2JzZXJ2ZXIoKS5zZXRTdGF0aXN0aWNzU3RvcmUobV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUuY29weVJlZigpKTsKKyAgICBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS0+c2V0
Tm90aWZpY2F0aW9uQ2FsbGJhY2soW3RoaXNdIHsKICAgICAgICAgaWYgKG1fc3RhdGlzdGljc0No
YW5nZWRUaW1lci5pc0FjdGl2ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBtX3N0
YXRpc3RpY3NDaGFuZ2VkVGltZXIuc3RhcnRPbmVTaG90KHN0ZDo6Y2hyb25vOjpzZWNvbmRzKDUp
KTsKQEAgLTEzOTUsMTAgKzEzOTUsMTAgQEAgdm9pZCBXZWJQcm9jZXNzOjpub25WaXNpYmxlUHJv
Y2Vzc0NsZWFudQogCiB2b2lkIFdlYlByb2Nlc3M6OnN0YXRpc3RpY3NDaGFuZ2VkVGltZXJGaXJl
ZCgpCiB7Ci0gICAgaWYgKG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JhZ2UtPmlzRW1wdHko
KSkKKyAgICBpZiAobV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUtPmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgcGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNz
YWdlczo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzVXBkYXRlZChtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yYWdlLT50YWtlU3RhdGlzdGlj
cygpKSwgMCk7CisgICAgcGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVXBk
YXRlZChtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS0+dGFrZVN0YXRpc3RpY3MoKSksIDAp
OwogfQogCiB2b2lkIFdlYlByb2Nlc3M6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVk
KGJvb2wgZW5hYmxlZCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vz
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5o
CShyZXZpc2lvbiAyMTE5MzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nl
c3MuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxNiw3ICs0MTYsNyBAQCBwcml2YXRlOgogICAgIFdl
YlNRTGl0ZURhdGFiYXNlVHJhY2tlciBtX3dlYlNRTGl0ZURhdGFiYXNlVHJhY2tlcjsKICNlbmRp
ZgogCi0gICAgUmVmPFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4gbV9yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmFnZTsKKyAgICBSZWY8V2ViQ29yZTo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlPiBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTsKIAogICAgIHVu
c2lnbmVkIG1fcGFnZXNNYXJraW5nTGF5ZXJzQXNWb2xhdGlsZSB7IDAgfTsKICAgICBib29sIG1f
c3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhhbmRsZXIgeyBmYWxzZSB9OwpJbmRleDogVG9vbHMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjExOTc2KQor
KysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTEgQEAKKzIwMTct
MDItMDkgIEpvaG4gV2lsYW5kZXIgIDx3aWxhbmRlckBhcHBsZS5jb20+CisKKyAgICAgICAgVXBk
YXRlcyB0byBSZXNvdXJjZSBMb2FkIFN0YXRpc3RpY3M6IEdldCB0aGUgcmlnaHQgd2Vic2l0ZSBk
YXRhIHN0b3JlIGFuZCBpbnRyb2R1Y2UgdGltZW91dCBmb3IgdXNlciBpbnRlcmFjdGlvbgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY3NDc0CisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS8yNDY4MTgwOD4KKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI0
NzAzMjg2PgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzAyOTAyNzA+CisKKyAgICAgICAgVGhp
cyBwYXRjaCBhZGRzIHRlc3QgaW5mcmFzdHJ1Y3R1cmUgdG8gYWxsb3cgdGVzdGluZyAKKyAgICAg
ICAgb2YgdGhlIHZhcmlvdXMgcnVsZXMgaW4gcGxhY2UgZm9yIGRhdGEgcmVjb3JkcyByZW1vdmFs
LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbDoKKyAg
ICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNw
cDoKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlVG9QYWdl
KToKKyAgICAgICAgICAgIENhbGxiYWNrIG1lY2hhbmlzbSB0byB0ZWxsIHBhZ2VzIHRoYXQgYSB3
ZWJzaXRlIGRhdGEgc3RvcmUKKyAgICAgICAgICAgIHNjYW4gaGFzIGhhcHBlbmVkLgorICAgICAg
ICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHA6CisgICAg
ICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZSk6Cisg
ICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmlzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKToK
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFj
dGlvbik6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmlzU3RhdGlzdGljc0hhc0hhZFVzZXJJ
bnRlcmFjdGlvbik6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NUaW1l
VG9MaXZlVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aW5zdGFs
bFN0YXRpc3RpY3NEaWRNb2RpZnlEYXRhUmVjb3Jkc0NhbGxiYWNrKToKKyAgICAgICAgKFdUUjo6
VGVzdFJ1bm5lcjo6c3RhdGlzdGljc0RpZE1vZGlmeURhdGFSZWNvcmRzQ2FsbGJhY2spOgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpzdGF0aXN0aWNzRmlyZURhdGFNb2RpZmljYXRpb25IYW5k
bGVyKToKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc05vdGlmeVBhZ2Vz
V2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQpOgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpz
ZXRTdGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92
YWwpOgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzTWluaW11bVRpbWVC
ZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0
YXRpc3RpY3NSZXNldFRvQ29uc2lzdGVudFN0YXRlKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVu
bmVyL1Rlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnNl
dFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9s
bGVyOjppc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXVFI6OlRlc3RD
b250cm9sbGVyOjpzZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKToKKyAgICAgICAg
KFdUUjo6VGVzdENvbnRyb2xsZXI6OmlzU3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbik6
CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzVGltZVRvTGl2ZVVz
ZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpzdGF0aXN0aWNz
RmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xs
ZXI6OnNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKToK
KyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnNldFN0YXRpc3RpY3NTaG91bGRDbGFzc2lm
eVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAgIChXVFI6OlRlc3RD
b250cm9sbGVyOjpzZXRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVt
b3ZhbCk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpzdGF0aXN0aWNzUmVzZXRUb0Nv
bnNpc3RlbnRTdGF0ZSk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxl
ci5oOgorICAgICAgICAgICAgVGhlc2UgYXJlIGFsbCBjb25maWd1cmF0aW9uIGFuZCB0ZXN0IGZ1
bmN0aW9ucy4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcDoK
KyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3Nh
Z2VGcm9tSW5qZWN0ZWRCdW5kbGUpOgorCiAyMDE3LTAyLTA5ICBZb3Vlbm4gRmFibGV0ICA8eW91
ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBJbXByb3ZlIFczQyBpbXBvcnRlciBjb21tYW5kIGxp
bmUgb3B0aW9ucwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5j
cHAJKHJldmlzaW9uIDIxMTkzMSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRy
b2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCwgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMCwgMjAxNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTUsNiArNTUsNyBAQAog
I2luY2x1ZGUgPFdlYktpdC9XS1BsdWdpbkluZm9ybWF0aW9uLmg+CiAjaW5jbHVkZSA8V2ViS2l0
L1dLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmg+CiAjaW5jbHVkZSA8V2ViS2l0L1dLUHJvdGVjdGlv
blNwYWNlLmg+CisjaW5jbHVkZSA8V2ViS2l0L1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFn
ZXIuaD4KICNpbmNsdWRlIDxXZWJLaXQvV0tSZXRhaW5QdHIuaD4KICNpbmNsdWRlIDxXZWJLaXQv
V0tTZWN1cml0eU9yaWdpblJlZi5oPgogI2luY2x1ZGUgPFdlYktpdC9XS1RleHRDaGVja2VyLmg+
CkBAIC0yMjA2LDYgKzIyMDcsNTUgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0SWdub3Jlc1Zp
ZXdwb3J0UwogICAgIFdLUGFnZVNldElnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzKG1fbWFpbldl
YlZpZXctPnBhZ2UoKSwgaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMpOwogfQogCit2b2lkIFRl
c3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoU3RyaW5nIGhvc3RO
YW1lLCBib29sIHZhbHVlKQoreworICAgIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJT
ZXRQcmV2YWxlbnRSZXNvdXJjZShob3N0TmFtZSwgdmFsdWUpOworfQorCitib29sIFRlc3RDb250
cm9sbGVyOjppc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShTdHJpbmcgaG9zdE5hbWUpCit7
CisgICAgcmV0dXJuIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJJc1ByZXZhbGVudFJl
c291cmNlKGhvc3ROYW1lKTsKK30KKwordm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGlj
c0hhc0hhZFVzZXJJbnRlcmFjdGlvbihTdHJpbmcgaG9zdE5hbWUsIGJvb2wgdmFsdWUpCit7Cisg
ICAgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNldEhhc0hhZFVzZXJJbnRlcmFjdGlv
bihob3N0TmFtZSwgdmFsdWUpOworfQorCitib29sIFRlc3RDb250cm9sbGVyOjppc1N0YXRpc3Rp
Y3NIYXNIYWRVc2VySW50ZXJhY3Rpb24oU3RyaW5nIGhvc3ROYW1lKQoreworICAgIHJldHVybiBX
S1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VySXNIYXNIYWRVc2VySW50ZXJhY3Rpb24oaG9z
dE5hbWUpOworfQorCit2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzVGltZVRvTGl2
ZVVzZXJJbnRlcmFjdGlvbihkb3VibGUgc2Vjb25kcykKK3sKKyAgICBXS1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NNYW5hZ2VyU2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihzZWNvbmRzKTsKK30K
Kwordm9pZCBUZXN0Q29udHJvbGxlcjo6c3RhdGlzdGljc0ZpcmVEYXRhTW9kaWZpY2F0aW9uSGFu
ZGxlcigpCit7CisgICAgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlckZpcmVEYXRhTW9k
aWZpY2F0aW9uSGFuZGxlcigpOworfQorICAgIAordm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0U3Rh
dGlzdGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCB2YWx1ZSkK
K3sKKyAgICBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0Tm90aWZ5UGFnZXNXaGVu
RGF0YVJlY29yZHNXZXJlU2Nhbm5lZCh2YWx1ZSk7Cit9CisgICAgCit2b2lkIFRlc3RDb250cm9s
bGVyOjpzZXRTdGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jk
c1JlbW92YWwoYm9vbCB2YWx1ZSkKK3sKKyAgICBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5h
Z2VyU2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwodmFs
dWUpOworfQorCit2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzTWluaW11bVRpbWVC
ZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbChkb3VibGUgc2Vjb25kcykKK3sKKyAgICBXS1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0TWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRz
UmVtb3ZhbChzZWNvbmRzKTsKK30KK3ZvaWQgVGVzdENvbnRyb2xsZXI6OnN0YXRpc3RpY3NSZXNl
dFRvQ29uc2lzdGVudFN0YXRlKCkKK3sKKyAgICBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5h
Z2VyUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSgpOworfQorICAgIAogI2lmICFQTEFURk9STShDT0NP
QSkKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtV2lsbFJ1blRlc3QoY29uc3QgVGVzdElu
dm9jYXRpb24mKQogewpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIu
aAkocmV2aXNpb24gMjExOTMxKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJv
bGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCwgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMCwgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQ4LDYgKzE0OCwxNyBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIHNldFNob3VsZERvd25sb2FkVW5kaXNwbGF5YWJsZU1JTUVUeXBl
cyhib29sIHZhbHVlKSB7IG1fc2hvdWxkRG93bmxvYWRVbmRpc3BsYXlhYmxlTUlNRVR5cGVzID0g
dmFsdWU7IH0KIAorICAgIHZvaWQgc2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKFN0cmlu
ZyBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7CisgICAgYm9vbCBpc1N0YXRpc3RpY3NQcmV2YWxlbnRS
ZXNvdXJjZShTdHJpbmcgaG9zdE5hbWUpOworICAgIHZvaWQgc2V0U3RhdGlzdGljc0hhc0hhZFVz
ZXJJbnRlcmFjdGlvbihTdHJpbmcgaG9zdE5hbWUsIGJvb2wgdmFsdWUpOworICAgIGJvb2wgaXNT
dGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKFN0cmluZyBob3N0TmFtZSk7CisgICAgdm9p
ZCBzZXRTdGF0aXN0aWNzVGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihkb3VibGUgc2Vjb25kcyk7
CisgICAgdm9pZCBzdGF0aXN0aWNzRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CisgICAg
dm9pZCBzZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChi
b29sKTsKKyAgICB2b2lkIHNldFN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9y
ZURhdGFSZWNvcmRzUmVtb3ZhbChib29sKTsKKyAgICB2b2lkIHNldFN0YXRpc3RpY3NNaW5pbXVt
VGltZUJldHdlZWVuRGF0YVJlY29yZHNSZW1vdmFsKGRvdWJsZSk7CisgICAgdm9pZCBzdGF0aXN0
aWNzUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSgpOworCiBwcml2YXRlOgogICAgIFdLUmV0YWluUHRy
PFdLUGFnZUNvbmZpZ3VyYXRpb25SZWY+IGdlbmVyYXRlUGFnZUNvbmZpZ3VyYXRpb24oV0tDb250
ZXh0Q29uZmlndXJhdGlvblJlZik7CiAgICAgV0tSZXRhaW5QdHI8V0tDb250ZXh0Q29uZmlndXJh
dGlvblJlZj4gZ2VuZXJhdGVDb250ZXh0Q29uZmlndXJhdGlvbigpIGNvbnN0OwpJbmRleDogVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAJKHJldmlzaW9uIDIxMTkzMSkK
KysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRl
bCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAg
LTg4Niw2ICs4ODYsODkgQEAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0SW52b2NhdGlvbjo6
ZAogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAorICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291
cmNlIikpIHsKKyAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Rp
Y3Rpb25hcnlHZXRUeXBlSUQoKSk7CisKKyAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VC
b2R5RGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkp
OworICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaG9zdE5hbWVLZXkoQWRvcHRXSywg
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikpOworICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gdmFsdWVLZXkoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlZhbHVlIikpOworCisgICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0g
c3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFtZUtleS5nZXQoKSkpOworICAgICAgICBXS0Jvb2xlYW5S
ZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1G
b3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCB2YWx1ZUtleS5nZXQoKSkpOworCisgICAgICAg
IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3Vy
Y2UodG9XVEZTdHJpbmcoaG9zdE5hbWUpLCBXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIklzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlIikp
IHsKKyAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dl
dFR5cGVJRCgpKTsKKworICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0
PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7CisgICAgICAgIGJvb2wgaXNQcmV2YWxlbnQgPSBU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2Uo
dG9XVEZTdHJpbmcoaG9zdE5hbWUpKTsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBy
ZXN1bHQoQWRvcHRXSywgV0tCb29sZWFuQ3JlYXRlKGlzUHJldmFsZW50KSk7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorCisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uIikpIHsK
KyAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlH
ZXRUeXBlSUQoKSk7CisgICAgICAgIAorICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJv
ZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7
CisgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZUtleShBZG9wdFdLLCBX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSk7CisgICAgICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiB2YWx1ZUtleShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiVmFsdWUiKSk7CisgICAgICAgIAorICAgICAgICBXS1N0cmluZ1JlZiBob3N0
TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5
KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaG9zdE5hbWVLZXkuZ2V0KCkpKTsKKyAgICAgICAgV0tC
b29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlH
ZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdmFsdWVLZXkuZ2V0KCkpKTsKKyAg
ICAgICAgCisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNz
SGFzSGFkVXNlckludGVyYWN0aW9uKHRvV1RGU3RyaW5nKGhvc3ROYW1lKSwgV0tCb29sZWFuR2V0
VmFsdWUodmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJc1N0YXRpc3RpY3NI
YXNIYWRVc2VySW50ZXJhY3Rpb24iKSkgeworICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVz
c2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOworICAgICAgICAKKyAgICAgICAgV0tT
dHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkp
OworICAgICAgICBib29sIGhhc0hhZFVzZXJJbnRlcmFjdGlvbiA9IFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5pc1N0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24odG9XVEZTdHJpbmco
aG9zdE5hbWUpKTsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQoQWRvcHRX
SywgV0tCb29sZWFuQ3JlYXRlKGhhc0hhZFVzZXJJbnRlcmFjdGlvbikpOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0YXRpc3RpY3NUaW1lVG9MaXZlVXNlckludGVyYWN0aW9u
IikpIHsKKyAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RvdWJs
ZUdldFR5cGVJRCgpKTsKKyAgICAgICAgV0tEb3VibGVSZWYgc2Vjb25kcyA9IHN0YXRpY19jYXN0
PFdLRG91YmxlUmVmPihtZXNzYWdlQm9keSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5zZXRTdGF0aXN0aWNzVGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihXS0RvdWJsZUdl
dFZhbHVlKHNlY29uZHMpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAor
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU3RhdGlz
dGljc0ZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlciIpKSB7CisgICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5zdGF0aXN0aWNzRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICAKKyAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlN0YXRpc3RpY3NOb3RpZnlQYWdlc1do
ZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkIikpIHsKKyAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlE
KG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7CisgICAgICAgIFdLQm9vbGVh
blJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOworICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc05vdGlmeVBhZ2Vz
V2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTdGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJj
ZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwiKSkgeworICAgICAgICBBU1NFUlQoV0tHZXRUeXBl
SUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKKyAgICAgICAgV0tCb29s
ZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Cisg
ICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzU2hvdWxkQ2xh
c3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoV0tCb29sZWFuR2V0VmFsdWUo
dmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzTWluaW11
bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbCIpKSB7CisgICAgICAgIEFTU0VSVChXS0dl
dFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEb3VibGVHZXRUeXBlSUQoKSk7CisgICAgICAgIFdL
RG91YmxlUmVmIHNlY29uZHMgPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4obWVzc2FnZUJvZHkp
OworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc01pbmlt
dW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92YWwoV0tEb3VibGVHZXRWYWx1ZShzZWNvbmRz
KSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICAKKyAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlN0YXRpc3RpY3NSZXNldFRvQ29u
c2lzdGVudFN0YXRlIikpIHsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnN0
YXRpc3RpY3NSZXNldFRvQ29uc2lzdGVudFN0YXRlKCk7CisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBudWxscHRy
OwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAJKHJldmlzaW9uIDIxMTkzMSkKKysrIFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjY2LDYgKzI2NiwxMSBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpkaWRSZWNlaXZl
TWVzc2FnZVRvCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBpZiAoV0tTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIldlYnNpdGVEYXRhRGVsZXRpb25Gb3JUb3BQ
cml2YXRlbHlPd25lZERvbWFpbnNGaW5pc2hlZCIpKSB7CisgICAgICAgIG1fdGVzdFJ1bm5lci0+
c3RhdGlzdGljc0RpZE1vZGlmeURhdGFSZWNvcmRzQ2FsbGJhY2soKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKwogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBlcnJvck1lc3NhZ2VOYW1l
KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFcnJvciIpKTsKICAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZXJyb3JNZXNzYWdlQm9keShBZG9wdFdLLCBXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVW5rbm93biIpKTsKICAgICBXS0J1bmRsZVBhZ2VQb3N0
TWVzc2FnZShwYWdlLCBlcnJvck1lc3NhZ2VOYW1lLmdldCgpLCBlcnJvck1lc3NhZ2VCb2R5Lmdl
dCgpKTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1
bm5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9UZXN0UnVubmVyLmNwcAkocmV2aXNpb24gMjExOTMxKQorKysgVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJTdHJpbmdGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJU
ZXN0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ1Rlc3RSdW5uZXJV
dGlscy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaD4KICNpbmNs
dWRlIDxXZWJLaXQvV0tCdW5kbGUuaD4KICNpbmNsdWRlIDxXZWJLaXQvV0tCdW5kbGVCYWNrRm9y
d2FyZExpc3QuaD4KICNpbmNsdWRlIDxXZWJLaXQvV0tCdW5kbGVGcmFtZS5oPgpAQCAtNjM1LDYg
KzYzNiw3IEBAIGVudW0gewogICAgIFdpbGxFbmRTd2lwZUNhbGxiYWNrSUQsCiAgICAgRGlkRW5k
U3dpcGVDYWxsYmFja0lELAogICAgIERpZFJlbW92ZVN3aXBlU25hcHNob3RDYWxsYmFja0lELAor
ICAgIFN0YXRpc3RpY3NEaWRNb2RpZnlEYXRhUmVjb3Jkc0NhbGxiYWNrSUQsCiAgICAgRmlyc3RV
SVNjcmlwdENhbGxiYWNrSUQgPSAxMDAKIH07CiAKQEAgLTExNTIsNiArMTE1NCwxMjggQEAgdm9p
ZCBUZXN0UnVubmVyOjpjYWxsRGlkUmVtb3ZlU3dpcGVTbmFwcwogICAgIGNhbGxUZXN0UnVubmVy
Q2FsbGJhY2soRGlkUmVtb3ZlU3dpcGVTbmFwc2hvdENhbGxiYWNrSUQpOwogfQogCit2b2lkIFRl
c3RSdW5uZXI6OnNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShKU1N0cmluZ1JlZiBob3N0
TmFtZSwgYm9vbCB2YWx1ZSkKK3sKKyAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
PiBrZXlzOworICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7CisKKyAg
ICBrZXlzLmFwcGVuZCh7IEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJI
b3N0TmFtZSIpIH0pOworICAgIHZhbHVlcy5hcHBlbmQoeyBBZG9wdFdLLCBXS1N0cmluZ0NyZWF0
ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkgfSk7CisgICAgCisgICAga2V5cy5hcHBlbmQoeyBBZG9w
dFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVmFsdWUiKSB9KTsKKyAgICB2YWx1
ZXMuYXBwZW5kKHsgQWRvcHRXSywgV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSB9KTsKKyAgICAKKyAg
ICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJhd0tleXM7CisgICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3
VmFsdWVzOworICAgIHJhd0tleXMucmVzaXplKGtleXMuc2l6ZSgpKTsKKyAgICByYXdWYWx1ZXMu
cmVzaXplKHZhbHVlcy5zaXplKCkpOworICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
a2V5cy5zaXplKCk7ICsraSkgeworICAgICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsK
KyAgICAgICAgcmF3VmFsdWVzW2ldID0gdmFsdWVzW2ldLmdldCgpOworICAgIH0KKyAgICAKKyAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZSIpKTsK
KyAgICBXS1JldGFpblB0cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5KEFkb3B0V0ssIFdL
RGljdGlvbmFyeUNyZWF0ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5
cy5zaXplKCkpKTsKKworICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdl
Qm9keS5nZXQoKSwgbnVsbHB0cik7Cit9CisKK2Jvb2wgVGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNz
UHJldmFsZW50UmVzb3VyY2UoSlNTdHJpbmdSZWYgaG9zdE5hbWUpCit7CisgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJJc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZSIpKTsKKyAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZUJvZHkoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRo
SlNTdHJpbmcoaG9zdE5hbWUpKTsKKyAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IDA7CisgICAg
V0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2Fn
ZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKKyAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUo
c3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSk7Cit9CisKK3ZvaWQgVGVzdFJ1
bm5lcjo6c2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbihKU1N0cmluZ1JlZiBob3N0
TmFtZSwgYm9vbCB2YWx1ZSkKK3sKKyAgICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
PiBrZXlzOworICAgIFZlY3RvcjxXS1JldGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7CisgICAg
CisgICAga2V5cy5hcHBlbmQoeyBBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiSG9zdE5hbWUiKSB9KTsKKyAgICB2YWx1ZXMuYXBwZW5kKHsgQWRvcHRXSywgV0tTdHJpbmdD
cmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpIH0pOworICAgIAorICAgIGtleXMuYXBwZW5kKHsg
QWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlZhbHVlIikgfSk7CisgICAg
dmFsdWVzLmFwcGVuZCh7IEFkb3B0V0ssIFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkgfSk7CisgICAg
CisgICAgVmVjdG9yPFdLU3RyaW5nUmVmPiByYXdLZXlzOworICAgIFZlY3RvcjxXS1R5cGVSZWY+
IHJhd1ZhbHVlczsKKyAgICByYXdLZXlzLnJlc2l6ZShrZXlzLnNpemUoKSk7CisgICAgcmF3VmFs
dWVzLnJlc2l6ZSh2YWx1ZXMuc2l6ZSgpKTsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0
KCk7CisgICAgICAgIHJhd1ZhbHVlc1tpXSA9IHZhbHVlc1tpXS5nZXQoKTsKKyAgICB9CisgICAg
CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0
aW9uIikpOworICAgIFdLUmV0YWluUHRyPFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkoQWRv
cHRXSywgV0tEaWN0aW9uYXJ5Q3JlYXRlKHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgp
LCByYXdLZXlzLnNpemUoKSkpOworICAgIAorICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVz
c2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdl
dCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7Cit9CisKK2Jvb2wgVGVzdFJ1bm5lcjo6
aXNTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKEpTU3RyaW5nUmVmIGhvc3ROYW1lKQor
eworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0
aW9uIikpOworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9keShBZG9wdFdL
LCBXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkpOworICAgIFdLVHlwZVJlZiBy
ZXR1cm5EYXRhID0gMDsKKyAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9y
VGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3Nh
Z2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgJnJldHVybkRhdGEpOworICAgIHJldHVy
biBXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEp
KTsKK30KKwordm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzVGltZVRvTGl2ZVVzZXJJbnRl
cmFjdGlvbihkb3VibGUgc2Vjb25kcykKK3sKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0
YXRpc3RpY3NUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uIikpOworICAgIFdLUmV0YWluUHRyPFdL
RG91YmxlUmVmPiBtZXNzYWdlQm9keShBZG9wdFdLLCBXS0RvdWJsZUNyZWF0ZShzZWNvbmRzKSk7
CisgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBu
dWxscHRyKTsKK30KKwordm9pZCBUZXN0UnVubmVyOjppbnN0YWxsU3RhdGlzdGljc0RpZE1vZGlm
eURhdGFSZWNvcmRzQ2FsbGJhY2soSlNWYWx1ZVJlZiBjYWxsYmFjaykKK3sKKyAgICBjYWNoZVRl
c3RSdW5uZXJDYWxsYmFjayhTdGF0aXN0aWNzRGlkTW9kaWZ5RGF0YVJlY29yZHNDYWxsYmFja0lE
LCBjYWxsYmFjayk7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0RpZE1vZGlmeURh
dGFSZWNvcmRzQ2FsbGJhY2soKQoreworICAgIGNhbGxUZXN0UnVubmVyQ2FsbGJhY2soU3RhdGlz
dGljc0RpZE1vZGlmeURhdGFSZWNvcmRzQ2FsbGJhY2tJRCk7Cit9CisKK3ZvaWQgVGVzdFJ1bm5l
cjo6c3RhdGlzdGljc0ZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpCit7CisgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNzRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyIikpOwor
ICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwLCBudWxscHRyKTsKK30KKwordm9p
ZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJl
U2Nhbm5lZChib29sIHZhbHVlKQoreworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3RhdGlzdGlj
c05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQiKSk7CisgICAgV0tSZXRhaW5Q
dHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keShBZG9wdFdLLCBXS0Jvb2xlYW5DcmVhdGUodmFs
dWUpKTsKKyAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0
KCksIG51bGxwdHIpOworfQorCit2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTaG91bGRD
bGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sIHZhbHVlKQorewor
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3RhdGlzdGljc1Nob3VsZENsYXNzaWZ5UmVzb3VyY2Vz
QmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsIikpOworICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJl
Zj4gbWVzc2FnZUJvZHkoQWRvcHRXSywgV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7CisgICAgV0tC
dW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5i
dW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsK
K30KKwordm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVlbkRh
dGFSZWNvcmRzUmVtb3ZhbChkb3VibGUgc2Vjb25kcykKK3sKKyAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlNldFN0YXRpc3RpY3NNaW5pbXVtVGltZUJldHdlZWVuRGF0YVJlY29yZHNSZW1vdmFsIikp
OworICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiBtZXNzYWdlQm9keShBZG9wdFdLLCBXS0Rv
dWJsZUNyZWF0ZShzZWNvbmRzKSk7CisgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdl
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKK30KKyAgICAKK3ZvaWQgVGVzdFJ1bm5lcjo6
c3RhdGlzdGljc1Jlc2V0VG9Db25zaXN0ZW50U3RhdGUoKQoreworICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiU3RhdGlzdGljc1Jlc2V0VG9Db25zaXN0ZW50U3RhdGUiKSk7CisgICAgV0tCdW5kbGVQ
b3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUo
KSwgbWVzc2FnZU5hbWUuZ2V0KCksIDAsIG51bGxwdHIpOworfQorCiAjaWYgUExBVEZPUk0oTUFD
KQogdm9pZCBUZXN0UnVubmVyOjpjb25uZWN0TW9ja0dhbWVwYWQodW5zaWduZWQgaW5kZXgpCiB7
CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rl
c3RSdW5uZXIuaAkocmV2aXNpb24gMjExOTMxKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNDUsNiArMzQ1
LDIwIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE1vY2tHYW1lcGFkRGV0YWlscyh1bnNpZ25lZCBp
bmRleCwgSlNTdHJpbmdSZWYgZ2FtZXBhZElELCB1bnNpZ25lZCBheGlzQ291bnQsIHVuc2lnbmVk
IGJ1dHRvbkNvdW50KTsKICAgICB2b2lkIHNldE1vY2tHYW1lcGFkQXhpc1ZhbHVlKHVuc2lnbmVk
IGluZGV4LCB1bnNpZ25lZCBheGlzSW5kZXgsIGRvdWJsZSB2YWx1ZSk7CiAgICAgdm9pZCBzZXRN
b2NrR2FtZXBhZEJ1dHRvblZhbHVlKHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBidXR0b25JbmRl
eCwgZG91YmxlIHZhbHVlKTsKKyAgICAKKyAgICAvLyBSZXNvdXJjZSBMb2FkIFN0YXRpc3RpY3MK
KyAgICB2b2lkIGluc3RhbGxTdGF0aXN0aWNzRGlkTW9kaWZ5RGF0YVJlY29yZHNDYWxsYmFjayhK
U1ZhbHVlUmVmIGNhbGxiYWNrKTsKKyAgICB2b2lkIHN0YXRpc3RpY3NEaWRNb2RpZnlEYXRhUmVj
b3Jkc0NhbGxiYWNrKCk7CisgICAgdm9pZCBzdGF0aXN0aWNzRmlyZURhdGFNb2RpZmljYXRpb25I
YW5kbGVyKCk7CisgICAgdm9pZCBzZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoSlNTdHJp
bmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpOworICAgIGJvb2wgaXNTdGF0aXN0aWNzUHJldmFs
ZW50UmVzb3VyY2UoSlNTdHJpbmdSZWYgaG9zdE5hbWUpOworICAgIHZvaWQgc2V0U3RhdGlzdGlj
c0hhc0hhZFVzZXJJbnRlcmFjdGlvbihKU1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7
CisgICAgYm9vbCBpc1N0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24oSlNTdHJpbmdSZWYg
aG9zdE5hbWUpOworICAgIHZvaWQgc2V0U3RhdGlzdGljc1RpbWVUb0xpdmVVc2VySW50ZXJhY3Rp
b24oZG91YmxlIHNlY29uZHMpOworICAgIHZvaWQgc2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hl
bkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCk7CisgICAgdm9pZCBzZXRTdGF0aXN0aWNzU2hv
dWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCk7CisgICAg
dm9pZCBzZXRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbChk
b3VibGUpOworICAgIHZvaWQgc3RhdGlzdGljc1Jlc2V0VG9Db25zaXN0ZW50U3RhdGUoKTsKIAog
cHJpdmF0ZToKICAgICBUZXN0UnVubmVyKCk7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5p
ZGwJKHJldmlzaW9uIDIxMTkzMSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNDYsNCAr
MjQ2LDE3IEBAIGludGVyZmFjZSBUZXN0UnVubmVyIHsKICAgICB2b2lkIHNldE1vY2tHYW1lcGFk
QnV0dG9uVmFsdWUodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBidXR0b25JbmRl
eCwgZG91YmxlIHZhbHVlKTsKICAgICB2b2lkIGNvbm5lY3RNb2NrR2FtZXBhZCh1bnNpZ25lZCBs
b25nIGluZGV4KTsKICAgICB2b2lkIGRpc2Nvbm5lY3RNb2NrR2FtZXBhZCh1bnNpZ25lZCBsb25n
IGluZGV4KTsKKworICAgIC8vIFJlc291cmNlIExvYWQgU3RhdGlzdGljcworICAgIHZvaWQgaW5z
dGFsbFN0YXRpc3RpY3NEaWRNb2RpZnlEYXRhUmVjb3Jkc0NhbGxiYWNrKG9iamVjdCBjYWxsYmFj
ayk7CisgICAgdm9pZCBzZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoRE9NU3RyaW5nIGhv
c3ROYW1lLCBib29sZWFuIHZhbHVlKTsKKyAgICBib29sZWFuIGlzU3RhdGlzdGljc1ByZXZhbGVu
dFJlc291cmNlKERPTVN0cmluZyBob3N0TmFtZSk7CisgICAgdm9pZCBzZXRTdGF0aXN0aWNzSGFz
SGFkVXNlckludGVyYWN0aW9uKERPTVN0cmluZyBob3N0TmFtZSwgYm9vbGVhbiB2YWx1ZSk7Cisg
ICAgYm9vbGVhbiBpc1N0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24oRE9NU3RyaW5nIGhv
c3ROYW1lKTsKKyAgICB2b2lkIHNldFN0YXRpc3RpY3NUaW1lVG9MaXZlVXNlckludGVyYWN0aW9u
KGRvdWJsZSBzZWNvbmRzKTsKKyAgICB2b2lkIHN0YXRpc3RpY3NGaXJlRGF0YU1vZGlmaWNhdGlv
bkhhbmRsZXIoKTsKKyAgICB2b2lkIHNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVj
b3Jkc1dlcmVTY2FubmVkKGJvb2xlYW4gdmFsdWUpOworICAgIHZvaWQgc2V0U3RhdGlzdGljc1No
b3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2xlYW4gdmFs
dWUpOworICAgIHZvaWQgc2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jk
c1JlbW92YWwoZG91YmxlIHNlY29uZHMpOworICAgIHZvaWQgc3RhdGlzdGljc1Jlc2V0VG9Db25z
aXN0ZW50U3RhdGUoKTsKIH07CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMTE5MzEpCisrKyBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyOSBAQAorMjAxNy0wMi0w
OSAgSm9obiBXaWxhbmRlciAgPHdpbGFuZGVyQGFwcGxlLmNvbT4KKworICAgICAgICBVcGRhdGVz
IHRvIFJlc291cmNlIExvYWQgU3RhdGlzdGljczogR2V0IHRoZSByaWdodCB3ZWJzaXRlIGRhdGEg
c3RvcmUgYW5kIGludHJvZHVjZSB0aW1lb3V0IGZvciB1c2VyIGludGVyYWN0aW9uCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjc0NzQKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzI0NjgxODA4PgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjQ3MDMy
ODY+CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMDI5MDI3MD4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RFeHBlY3RhdGlvbnM6CisgICAg
ICAgICAgICBNYXJrZWQgYXMgZ2VuZXJhbCBza2lwIChzZWUgV0syIGV4cGVjdGF0aW9ucyBiZWxv
dykuCisgICAgICAgICogaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3M6
IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzL25vbi1wcmV2YWxlbnQtcmVzb3VyY2Utd2l0aC11c2VyLWludGVyYWN0aW9uLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0
YXRpc3RpY3Mvbm9uLXByZXZhbGVudC1yZXNvdXJjZS13aXRoLXVzZXItaW50ZXJhY3Rpb24uaHRt
bDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRp
c3RpY3Mvbm9uLXByZXZhbGVudC1yZXNvdXJjZS13aXRob3V0LXVzZXItaW50ZXJhY3Rpb24tZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VM
b2FkU3RhdGlzdGljcy9ub24tcHJldmFsZW50LXJlc291cmNlLXdpdGhvdXQtdXNlci1pbnRlcmFj
dGlvbi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VM
b2FkU3RhdGlzdGljcy9wcmV2YWxlbnQtcmVzb3VyY2Utd2l0aC11c2VyLWludGVyYWN0aW9uLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNl
TG9hZFN0YXRpc3RpY3MvcHJldmFsZW50LXJlc291cmNlLXdpdGgtdXNlci1pbnRlcmFjdGlvbi10
aW1lb3V0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9sb2FkaW5n
L3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcHJldmFsZW50LXJlc291cmNlLXdpdGgtdXNlci1pbnRl
cmFjdGlvbi10aW1lb3V0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvbG9hZGlu
Zy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3ByZXZhbGVudC1yZXNvdXJjZS13aXRoLXVzZXItaW50
ZXJhY3Rpb24uaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291
cmNlTG9hZFN0YXRpc3RpY3MvcHJldmFsZW50LXJlc291cmNlLXdpdGhvdXQtdXNlci1pbnRlcmFj
dGlvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvbG9hZGluZy9y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3ByZXZhbGVudC1yZXNvdXJjZS13aXRob3V0LXVzZXItaW50
ZXJhY3Rpb24uaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vd2syL1Rlc3RFeHBlY3Rh
dGlvbnM6CisgICAgICAgICAgICBNYXJrZWQgYXMgdmFsaWQgZm9yIFdlYktpdDIgb25seS4KKwog
MjAxNy0wMi0wOCAgUnlhbiBIYWRkYWQgIDxyeWFuaGFkZGFkQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZWJhc2VsaW5lIGVtb2ppIHRlc3RzIGZvciBpb3Mtc2ltdWxhdG9yLgpJbmRleDogTGF5b3V0
VGVzdHMvVGVzdEV4cGVjdGF0aW9ucwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9UZXN0RXhw
ZWN0YXRpb25zCShyZXZpc2lvbiAyMTE5MzEpCisrKyBMYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRp
b25zCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCw3IEBAIGh0dHAvdGVzdHMvcXVpY2tsb29r
IFsgU2tpcCBdCiAjIFRoZXNlIHRlc3RzIGFyZSBXZWJLaXQyLW9ubHkKIGh0dHAvdGVzdHMvYXBw
Y2FjaGUvZGVjaWRlLW5hdmlnYXRpb24tcG9saWN5LWFmdGVyLWRlbGF5Lmh0bWwgWyBTa2lwIF0K
IGh0dHAvdGVzdHMvbWlzYy93aWxsLXNlbmQtcmVxdWVzdC13aXRoLWNsaWVudC1wcm92aWRlZC1o
dHRwLWJvZHkuaHRtbCBbIFNraXAgXQoraHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0
YXRpc3RpY3MvIFsgU2tpcCBdCiAKICMgT25seSBNYWMgYW5kIGlPUyBoYXZlIGFuIGltcGxlbWVu
dGF0aW9uIG9mIFVJU2NyaXB0Q29udHJvbGxlcjo6ZG9Bc3luY1Rhc2soKS4KIGZhc3QvaGFybmVz
cy91aXNjcmlwdGNvbnRyb2xsZXIgWyBTa2lwIF0KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVz
dHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL25vbi1wcmV2YWxlbnQtcmVzb3VyY2Ut
d2l0aC11c2VyLWludGVyYWN0aW9uLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9ub24tcHJldmFs
ZW50LXJlc291cmNlLXdpdGgtdXNlci1pbnRlcmFjdGlvbi1leHBlY3RlZC50eHQJKG5vbmV4aXN0
ZW50KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRp
c3RpY3Mvbm9uLXByZXZhbGVudC1yZXNvdXJjZS13aXRoLXVzZXItaW50ZXJhY3Rpb24tZXhwZWN0
ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOCBAQAorbWFpbiBmcmFtZSAtIGRpZFN0
YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUKK21haW4gZnJhbWUgLSBkaWRDb21taXRMb2FkRm9y
RnJhbWUKK21haW4gZnJhbWUgLSBkaWRSZWNlaXZlVGl0bGU6IFRlc3RzIGZvciBOb24tUHJldmFs
ZW50IFJlc291cmNlIFdpdGggVXNlciBJbnRlcmFjdGlvbgorbWFpbiBmcmFtZSAtIGRpZEZpbmlz
aERvY3VtZW50TG9hZEZvckZyYW1lCittYWluIGZyYW1lIC0gZGlkSGFuZGxlT25sb2FkRXZlbnRz
Rm9yRnJhbWUKK21haW4gZnJhbWUgLSBkaWRGaW5pc2hMb2FkRm9yRnJhbWUKK1BBU1MgQ29va2ll
IG5vdCBkZWxldGVkLgorCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVz
b3VyY2VMb2FkU3RhdGlzdGljcy9ub24tcHJldmFsZW50LXJlc291cmNlLXdpdGgtdXNlci1pbnRl
cmFjdGlvbi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGlu
Zy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL25vbi1wcmV2YWxlbnQtcmVzb3VyY2Utd2l0aC11c2Vy
LWludGVyYWN0aW9uLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3Mvbm9uLXByZXZhbGVudC1yZXNvdXJjZS13
aXRoLXVzZXItaW50ZXJhY3Rpb24uaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2IEBA
Cis8IURPQ1RZUEUgaHRtbD4KKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorICAgIDxtZXRhIGNo
YXJzZXQ9IlVURi04Ij4KKyAgICA8dGl0bGU+VGVzdHMgZm9yIE5vbi1QcmV2YWxlbnQgUmVzb3Vy
Y2UgV2l0aCBVc2VyIEludGVyYWN0aW9uPC90aXRsZT4KKyAgICA8c2NyaXB0IHNyYz0iLi4vLi4v
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNj
cmlwdD4KKyAgICBjb25zdCBob3N0VW5kZXJUZXN0ID0gIjEyNy4wLjAuMTo4MDAwIjsKKyAgICBj
b25zdCBzdGF0aXN0aWNzVXJsID0gImh0dHA6Ly8iICsgaG9zdFVuZGVyVGVzdCArICIvdGVtcCI7
CisgICAgY29uc3Qgb3RoZXJQcmV2YWxlbnRVcmwgPSAiaHR0cDovL2xvY2FsaG9zdDo4MDAwL3Rl
bXAiOworICAgIGZ1bmN0aW9uIHJ1blRlc3RSdW5uZXJUZXN0KCkgeworICAgICAgICBpZiAoZG9j
dW1lbnQuY29va2llICE9PSAiIikKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoImRvY3VtZW50LmNv
b2tpZSBub3QgZW1wdHkuIik7CisgICAgICAgIGNvbnN0IGNvb2tpZSA9ICJ0ZXN0Q29va2llPXRl
c3RWYWx1ZSI7CisgICAgICAgIGRvY3VtZW50LmNvb2tpZSA9IGNvb2tpZSArICI7IG1heC1hZ2U9
MTAwOyI7CisgICAgICAgIGlmIChkb2N1bWVudC5jb29raWUgIT09IGNvb2tpZSkKKyAgICAgICAg
ICAgIHRlc3RGYWlsZWQoImRvY3VtZW50LmNvb2tpZSBkaWQgbm90IGdldCBzZXQuIik7CisKKyAg
ICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2Uoc3RhdGlzdGlj
c1VybCwgZmFsc2UpOworICAgICAgICBpZiAodGVzdFJ1bm5lci5pc1N0YXRpc3RpY3NQcmV2YWxl
bnRSZXNvdXJjZShzdGF0aXN0aWNzVXJsKSkKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIkhvc3Qg
ZGlkIG5vdCBnZXQgc2V0IGFzIG5vbi1wcmV2YWxlbnQgcmVzb3VyY2UuIik7CisKKyAgICAgICAg
Ly8gVGhpcyBpcyBkb25lIHRvIG5vdCBoYXZlIGFuIGVtcHR5IHNldCBvZiBwcmV2YWxlbnQgcmVz
b3VyY2VzLgorICAgICAgICAvLyBPdGhlcndpc2UgZGF0YSByZWNvcmRzIGFyZSBuZXZlciBzY2Fu
bmVkLgorICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShv
dGhlclByZXZhbGVudFVybCwgdHJ1ZSk7CisgICAgICAgIGlmICghdGVzdFJ1bm5lci5pc1N0YXRp
c3RpY3NQcmV2YWxlbnRSZXNvdXJjZShvdGhlclByZXZhbGVudFVybCkpCisgICAgICAgICAgICB0
ZXN0RmFpbGVkKCJPdGhlciBob3N0IGRpZCBub3QgZ2V0IHNldCBhcyBwcmV2YWxlbnQgcmVzb3Vy
Y2UuIik7CisKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVy
YWN0aW9uKHN0YXRpc3RpY3NVcmwsIHRydWUpOworICAgICAgICBpZiAoIXRlc3RSdW5uZXIuaXNT
dGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKHN0YXRpc3RpY3NVcmwpKQorICAgICAgICAg
ICAgdGVzdEZhaWxlZCgiSG9zdCBkaWQgbm90IGdldCBsb2dnZWQgZm9yIHVzZXIgaW50ZXJhY3Rp
b24uIik7CisKKyAgICAgICAgdGVzdFJ1bm5lci5pbnN0YWxsU3RhdGlzdGljc0RpZE1vZGlmeURh
dGFSZWNvcmRzQ2FsbGJhY2soZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBpZiAoZG9jdW1lbnQu
Y29va2llID09PSBjb29raWUpCisgICAgICAgICAgICAgICAgdGVzdFBhc3NlZCgiQ29va2llIG5v
dCBkZWxldGVkLiIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHRlc3RGYWls
ZWQoIkNvb2tpZSBkZWxldGVkIG9yIGRvY3VtZW50LmNvb2tpZSBjb250YWlucyBvdGhlciBjb29r
aWVzOiAiICsgZG9jdW1lbnQuY29va2llKTsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIuc3RhdGlz
dGljc1Jlc2V0VG9Db25zaXN0ZW50U3RhdGUoKTsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90
aWZ5RG9uZSgpOworICAgICAgICB9KTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNz
U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoZmFsc2UpOwor
ICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NNaW5pbXVtVGltZUJldHdlZWVuRGF0YVJl
Y29yZHNSZW1vdmFsKDApOworICAgICAgICB0ZXN0UnVubmVyLnN0YXRpc3RpY3NGaXJlRGF0YU1v
ZGlmaWNhdGlvbkhhbmRsZXIoKTsKKyAgICB9CisKKyAgICBpZiAoZG9jdW1lbnQubG9jYXRpb24u
aG9zdCA9PT0gaG9zdFVuZGVyVGVzdCAmJiB3aW5kb3cudGVzdFJ1bm5lciAmJiB3aW5kb3cuaW50
ZXJuYWxzKSB7CisgICAgICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICBp
bnRlcm5hbHMuc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQodHJ1ZSk7CisgICAgICAg
IHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNj
YW5uZWQodHJ1ZSk7CisgICAgICAgIHJ1blRlc3RSdW5uZXJUZXN0KCk7CisgICAgfQorPC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDog
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3Mvbm9u
LXByZXZhbGVudC1yZXNvdXJjZS13aXRob3V0LXVzZXItaW50ZXJhY3Rpb24tZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzL25vbi1wcmV2YWxlbnQtcmVzb3VyY2Utd2l0aG91dC11c2VyLWludGVyYWN0
aW9uLWV4cGVjdGVkLnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9ub24tcHJldmFsZW50LXJlc291cmNlLXdp
dGhvdXQtdXNlci1pbnRlcmFjdGlvbi1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw4IEBACittYWluIGZyYW1lIC0gZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZQor
bWFpbiBmcmFtZSAtIGRpZENvbW1pdExvYWRGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRpZFJlY2Vp
dmVUaXRsZTogVGVzdHMgZm9yIE5vbi1QcmV2YWxlbnQgUmVzb3VyY2UgV2l0aG91dCBVc2VyIElu
dGVyYWN0aW9uCittYWluIGZyYW1lIC0gZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWUKK21h
aW4gZnJhbWUgLSBkaWRIYW5kbGVPbmxvYWRFdmVudHNGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRp
ZEZpbmlzaExvYWRGb3JGcmFtZQorUEFTUyBDb29raWUgbm90IGRlbGV0ZWQuCisKSW5kZXg6IExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL25vbi1w
cmV2YWxlbnQtcmVzb3VyY2Utd2l0aG91dC11c2VyLWludGVyYWN0aW9uLmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3Mvbm9uLXByZXZhbGVudC1yZXNvdXJjZS13aXRob3V0LXVzZXItaW50ZXJhY3Rpb24uaHRtbAko
bm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VM
b2FkU3RhdGlzdGljcy9ub24tcHJldmFsZW50LXJlc291cmNlLXdpdGhvdXQtdXNlci1pbnRlcmFj
dGlvbi5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTYgQEAKKzwhRE9DVFlQRSBodG1s
PgorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+CisgICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiPgor
ICAgIDx0aXRsZT5UZXN0cyBmb3IgTm9uLVByZXZhbGVudCBSZXNvdXJjZSBXaXRob3V0IFVzZXIg
SW50ZXJhY3Rpb248L3RpdGxlPgorICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMt
dGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorICAgIGNv
bnN0IGhvc3RVbmRlclRlc3QgPSAiMTI3LjAuMC4xOjgwMDAiOworICAgIGNvbnN0IHN0YXRpc3Rp
Y3NVcmwgPSAiaHR0cDovLyIgKyBob3N0VW5kZXJUZXN0ICsgIi90ZW1wIjsKKyAgICBjb25zdCBv
dGhlclByZXZhbGVudFVybCA9ICJodHRwOi8vbG9jYWxob3N0OjgwMDAvdGVtcCI7CisgICAgZnVu
Y3Rpb24gcnVuVGVzdFJ1bm5lclRlc3QoKSB7CisgICAgICAgIGlmIChkb2N1bWVudC5jb29raWUg
IT09ICIiKQorICAgICAgICAgICAgdGVzdEZhaWxlZCgiZG9jdW1lbnQuY29va2llIG5vdCBlbXB0
eS4iKTsKKyAgICAgICAgY29uc3QgY29va2llID0gInRlc3RDb29raWU9dGVzdFZhbHVlIjsKKyAg
ICAgICAgZG9jdW1lbnQuY29va2llID0gY29va2llICsgIjsgbWF4LWFnZT0xMDA7IjsKKyAgICAg
ICAgaWYgKGRvY3VtZW50LmNvb2tpZSAhPT0gY29va2llKQorICAgICAgICAgICAgdGVzdEZhaWxl
ZCgiZG9jdW1lbnQuY29va2llIGRpZCBub3QgZ2V0IHNldC4iKTsKKworICAgICAgICB0ZXN0UnVu
bmVyLnNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShzdGF0aXN0aWNzVXJsLCBmYWxzZSk7
CisgICAgICAgIGlmICh0ZXN0UnVubmVyLmlzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKHN0
YXRpc3RpY3NVcmwpKQorICAgICAgICAgICAgdGVzdEZhaWxlZCgiSG9zdCBkaWQgbm90IGdldCBz
ZXQgYXMgbm9uLXByZXZhbGVudCByZXNvdXJjZS4iKTsKKworICAgICAgICAvLyBUaGlzIGlzIGRv
bmUgdG8gbm90IGhhdmUgYW4gZW1wdHkgc2V0IG9mIHByZXZhbGVudCByZXNvdXJjZXMuCisgICAg
ICAgIC8vIE90aGVyd2lzZSBkYXRhIHJlY29yZHMgYXJlIG5ldmVyIHNjYW5uZWQuCisgICAgICAg
IHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKG90aGVyUHJldmFsZW50
VXJsLCB0cnVlKTsKKyAgICAgICAgaWYgKCF0ZXN0UnVubmVyLmlzU3RhdGlzdGljc1ByZXZhbGVu
dFJlc291cmNlKG90aGVyUHJldmFsZW50VXJsKSkKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIk90
aGVyIGhvc3QgZGlkIG5vdCBnZXQgc2V0IGFzIHByZXZhbGVudCByZXNvdXJjZS4iKTsKKworICAg
ICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24oc3RhdGlz
dGljc1VybCwgZmFsc2UpOworICAgICAgICBpZiAodGVzdFJ1bm5lci5pc1N0YXRpc3RpY3NIYXNI
YWRVc2VySW50ZXJhY3Rpb24oc3RhdGlzdGljc1VybCkpCisgICAgICAgICAgICB0ZXN0RmFpbGVk
KCJIb3N0IGRpZCBub3QgZ2V0IGNsZWFyZWQgb2YgdXNlciBpbnRlcmFjdGlvbi4iKTsKKworICAg
ICAgICB0ZXN0UnVubmVyLmluc3RhbGxTdGF0aXN0aWNzRGlkTW9kaWZ5RGF0YVJlY29yZHNDYWxs
YmFjayhmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGlmIChkb2N1bWVudC5jb29raWUgPT09IGNv
b2tpZSkKKyAgICAgICAgICAgICAgICB0ZXN0UGFzc2VkKCJDb29raWUgbm90IGRlbGV0ZWQuIik7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdGVzdEZhaWxlZCgiQ29va2llIGRl
bGV0ZWQgb3IgZG9jdW1lbnQuY29va2llIGNvbnRhaW5zIG90aGVyIGNvb2tpZXM6ICIgKyBkb2N1
bWVudC5jb29raWUpOworICAgICAgICAgICAgdGVzdFJ1bm5lci5zdGF0aXN0aWNzUmVzZXRUb0Nv
bnNpc3RlbnRTdGF0ZSgpOworICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cisg
ICAgICAgIH0pOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NTaG91bGRDbGFzc2lm
eVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChmYWxzZSk7CisgICAgICAgIHRlc3RS
dW5uZXIuc2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92YWwo
MCk7CisgICAgICAgIHRlc3RSdW5uZXIuc3RhdGlzdGljc0ZpcmVEYXRhTW9kaWZpY2F0aW9uSGFu
ZGxlcigpOworICAgIH0KKworICAgIGlmIChkb2N1bWVudC5sb2NhdGlvbi5ob3N0ID09PSBob3N0
VW5kZXJUZXN0ICYmIHdpbmRvdy50ZXN0UnVubmVyICYmIHdpbmRvdy5pbnRlcm5hbHMpIHsKKyAg
ICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgICAgIGludGVybmFscy5zZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCh0cnVlKTsKKyAgICAgICAgdGVzdFJ1bm5lci5z
ZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCh0cnVlKTsK
KyAgICAgICAgcnVuVGVzdFJ1bm5lclRlc3QoKTsKKyAgICB9Cis8L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wcmV2YWxlbnQtcmVzb3Vy
Y2Utd2l0aC11c2VyLWludGVyYWN0aW9uLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wcmV2YWxl
bnQtcmVzb3VyY2Utd2l0aC11c2VyLWludGVyYWN0aW9uLWV4cGVjdGVkLnR4dAkobm9uZXhpc3Rl
bnQpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlz
dGljcy9wcmV2YWxlbnQtcmVzb3VyY2Utd2l0aC11c2VyLWludGVyYWN0aW9uLWV4cGVjdGVkLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDggQEAKK21haW4gZnJhbWUgLSBkaWRTdGFydFBy
b3Zpc2lvbmFsTG9hZEZvckZyYW1lCittYWluIGZyYW1lIC0gZGlkQ29tbWl0TG9hZEZvckZyYW1l
CittYWluIGZyYW1lIC0gZGlkUmVjZWl2ZVRpdGxlOiBUZXN0cyBmb3IgUHJldmFsZW50IFJlc291
cmNlIFdpdGggVXNlciBJbnRlcmFjdGlvbgorbWFpbiBmcmFtZSAtIGRpZEZpbmlzaERvY3VtZW50
TG9hZEZvckZyYW1lCittYWluIGZyYW1lIC0gZGlkSGFuZGxlT25sb2FkRXZlbnRzRm9yRnJhbWUK
K21haW4gZnJhbWUgLSBkaWRGaW5pc2hMb2FkRm9yRnJhbWUKK1BBU1MgQ29va2llIG5vdCBkZWxl
dGVkLgorCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2Fk
U3RhdGlzdGljcy9wcmV2YWxlbnQtcmVzb3VyY2Utd2l0aC11c2VyLWludGVyYWN0aW9uLXRpbWVv
dXQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9h
ZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3ByZXZhbGVudC1yZXNvdXJjZS13aXRoLXVzZXIt
aW50ZXJhY3Rpb24tdGltZW91dC1leHBlY3RlZC50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcHJldmFsZW50
LXJlc291cmNlLXdpdGgtdXNlci1pbnRlcmFjdGlvbi10aW1lb3V0LWV4cGVjdGVkLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDggQEAKK21haW4gZnJhbWUgLSBkaWRTdGFydFByb3Zpc2lv
bmFsTG9hZEZvckZyYW1lCittYWluIGZyYW1lIC0gZGlkQ29tbWl0TG9hZEZvckZyYW1lCittYWlu
IGZyYW1lIC0gZGlkUmVjZWl2ZVRpdGxlOiBUZXN0cyBmb3IgUHJldmFsZW50IFJlc291cmNlIFdp
dGggVXNlciBJbnRlcmFjdGlvbiBUaW1lb3V0CittYWluIGZyYW1lIC0gZGlkRmluaXNoRG9jdW1l
bnRMb2FkRm9yRnJhbWUKK21haW4gZnJhbWUgLSBkaWRIYW5kbGVPbmxvYWRFdmVudHNGb3JGcmFt
ZQorbWFpbiBmcmFtZSAtIGRpZEZpbmlzaExvYWRGb3JGcmFtZQorUEFTUyBDb29raWUgZGVsZXRl
ZC4KKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0
YXRpc3RpY3MvcHJldmFsZW50LXJlc291cmNlLXdpdGgtdXNlci1pbnRlcmFjdGlvbi10aW1lb3V0
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291
cmNlTG9hZFN0YXRpc3RpY3MvcHJldmFsZW50LXJlc291cmNlLXdpdGgtdXNlci1pbnRlcmFjdGlv
bi10aW1lb3V0Lmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9s
b2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcHJldmFsZW50LXJlc291cmNlLXdpdGgtdXNl
ci1pbnRlcmFjdGlvbi10aW1lb3V0Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKyAgICA8bWV0YSBj
aGFyc2V0PSJVVEYtOCI+CisgICAgPHRpdGxlPlRlc3RzIGZvciBQcmV2YWxlbnQgUmVzb3VyY2Ug
V2l0aCBVc2VyIEludGVyYWN0aW9uIFRpbWVvdXQ8L3RpdGxlPgorICAgIDxzY3JpcHQgc3JjPSIu
Li8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+
Cis8c2NyaXB0PgorICAgIGNvbnN0IGhvc3RVbmRlclRlc3QgPSAiMTI3LjAuMC4xOjgwMDAiOwor
ICAgIGNvbnN0IHN0YXRpc3RpY3NVcmwgPSAiaHR0cDovLyIgKyBob3N0VW5kZXJUZXN0ICsgIi90
ZW1wIjsKKyAgICBmdW5jdGlvbiBydW5UZXN0UnVubmVyVGVzdCgpIHsKKyAgICAgICAgaWYgKGRv
Y3VtZW50LmNvb2tpZSAhPT0gIiIpCisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJkb2N1bWVudC5j
b29raWUgbm90IGVtcHR5LiIpOworICAgICAgICBjb25zdCBjb29raWUgPSAidGVzdENvb2tpZT10
ZXN0VmFsdWUiOworICAgICAgICBkb2N1bWVudC5jb29raWUgPSBjb29raWUgKyAiOyBtYXgtYWdl
PTEwMDsiOworICAgICAgICBpZiAoZG9jdW1lbnQuY29va2llICE9PSBjb29raWUpCisgICAgICAg
ICAgICB0ZXN0RmFpbGVkKCJkb2N1bWVudC5jb29raWUgZGlkIG5vdCBnZXQgc2V0LiIpOworCisg
ICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKHN0YXRpc3Rp
Y3NVcmwsIHRydWUpOworICAgICAgICBpZiAoIXRlc3RSdW5uZXIuaXNTdGF0aXN0aWNzUHJldmFs
ZW50UmVzb3VyY2Uoc3RhdGlzdGljc1VybCkpCisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJIb3N0
IGRpZCBub3QgZ2V0IHNldCBhcyBwcmV2YWxlbnQgcmVzb3VyY2UuIik7CisKKyAgICAgICAgdGVz
dFJ1bm5lci5zZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKHN0YXRpc3RpY3NVcmws
IHRydWUpOworICAgICAgICBpZiAoIXRlc3RSdW5uZXIuaXNTdGF0aXN0aWNzSGFzSGFkVXNlcklu
dGVyYWN0aW9uKHN0YXRpc3RpY3NVcmwpKQorICAgICAgICAgICAgdGVzdEZhaWxlZCgiSG9zdCBk
aWQgbm90IGdldCBsb2dnZWQgZm9yIHVzZXIgaW50ZXJhY3Rpb24uIik7CisKKyAgICAgICAgdGVz
dFJ1bm5lci5pbnN0YWxsU3RhdGlzdGljc0RpZE1vZGlmeURhdGFSZWNvcmRzQ2FsbGJhY2soZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICBpZiAoZG9jdW1lbnQuY29va2llICE9PSAiIikKKyAgICAg
ICAgICAgICAgICB0ZXN0RmFpbGVkKCJDb29raWUgbm90IGRlbGV0ZWQ6ICIgKyBkb2N1bWVudC5j
b29raWUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHRlc3RQYXNzZWQoIkNv
b2tpZSBkZWxldGVkLiIpOworICAgICAgICAgICAgdGVzdFJ1bm5lci5zdGF0aXN0aWNzUmVzZXRU
b0NvbnNpc3RlbnRTdGF0ZSgpOworICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7
CisgICAgICAgIH0pOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NTaG91bGRDbGFz
c2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChmYWxzZSk7CisgICAgICAgIHRl
c3RSdW5uZXIuc2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92
YWwoMCk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1RpbWVUb0xpdmVVc2VySW50
ZXJhY3Rpb24oMCk7CisgICAgICAgIHNldFRpbWVvdXQoInRlc3RSdW5uZXIuc3RhdGlzdGljc0Zp
cmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpIiwgMTAwMCk7CisgICAgfQorCisgICAgaWYgKGRv
Y3VtZW50LmxvY2F0aW9uLmhvc3QgPT09IGhvc3RVbmRlclRlc3QgJiYgd2luZG93LnRlc3RSdW5u
ZXIgJiYgd2luZG93LmludGVybmFscykgeworICAgICAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERv
bmUoKTsKKyAgICAgICAgaW50ZXJuYWxzLnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVk
KHRydWUpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5E
YXRhUmVjb3Jkc1dlcmVTY2FubmVkKHRydWUpOworICAgICAgICBydW5UZXN0UnVubmVyVGVzdCgp
OworICAgIH0KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzL3ByZXZhbGVudC1yZXNvdXJjZS13aXRoLXVzZXItaW50ZXJhY3Rpb24uaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VM
b2FkU3RhdGlzdGljcy9wcmV2YWxlbnQtcmVzb3VyY2Utd2l0aC11c2VyLWludGVyYWN0aW9uLmh0
bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291
cmNlTG9hZFN0YXRpc3RpY3MvcHJldmFsZW50LXJlc291cmNlLXdpdGgtdXNlci1pbnRlcmFjdGlv
bi5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTYgQEAKKzwhRE9DVFlQRSBodG1sPgor
PGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+CisgICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiPgorICAg
IDx0aXRsZT5UZXN0cyBmb3IgUHJldmFsZW50IFJlc291cmNlIFdpdGggVXNlciBJbnRlcmFjdGlv
bjwvdGl0bGU+CisgICAgPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5q
cyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+CisgICAgY29uc3QgaG9zdFVu
ZGVyVGVzdCA9ICIxMjcuMC4wLjE6ODAwMCI7CisgICAgY29uc3Qgc3RhdGlzdGljc1VybCA9ICJo
dHRwOi8vIiArIGhvc3RVbmRlclRlc3QgKyAiL3RlbXAiOworICAgIGNvbnN0IG90aGVyUHJldmFs
ZW50VXJsID0gImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC90ZW1wIjsKKyAgICBmdW5jdGlvbiBydW5U
ZXN0UnVubmVyVGVzdCgpIHsKKyAgICAgICAgaWYgKGRvY3VtZW50LmNvb2tpZSAhPT0gIiIpCisg
ICAgICAgICAgICB0ZXN0RmFpbGVkKCJkb2N1bWVudC5jb29raWUgbm90IGVtcHR5LiIpOworICAg
ICAgICBjb25zdCBjb29raWUgPSAidGVzdENvb2tpZT10ZXN0VmFsdWUiOworICAgICAgICBkb2N1
bWVudC5jb29raWUgPSBjb29raWUgKyAiOyBtYXgtYWdlPTEwMDsiOworICAgICAgICBpZiAoZG9j
dW1lbnQuY29va2llICE9PSBjb29raWUpCisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJkb2N1bWVu
dC5jb29raWUgZGlkIG5vdCBnZXQgc2V0LiIpOworCisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3Rh
dGlzdGljc1ByZXZhbGVudFJlc291cmNlKHN0YXRpc3RpY3NVcmwsIHRydWUpOworICAgICAgICBp
ZiAoIXRlc3RSdW5uZXIuaXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2Uoc3RhdGlzdGljc1Vy
bCkpCisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJIb3N0IGRpZCBub3QgZ2V0IHNldCBhcyBwcmV2
YWxlbnQgcmVzb3VyY2UuIik7CisKKyAgICAgICAgLy8gVGhpcyBpcyBkb25lIHRvIG5vdCBoYXZl
IGFuIGVtcHR5IHNldCBvZiBwcmV2YWxlbnQgcmVzb3VyY2VzLgorICAgICAgICAvLyBPdGhlcndp
c2UgZGF0YSByZWNvcmRzIGFyZSBuZXZlciBzY2FubmVkLgorICAgICAgICB0ZXN0UnVubmVyLnNl
dFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShvdGhlclByZXZhbGVudFVybCwgdHJ1ZSk7Cisg
ICAgICAgIGlmICghdGVzdFJ1bm5lci5pc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShvdGhl
clByZXZhbGVudFVybCkpCisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJPdGhlciBob3N0IGRpZCBu
b3QgZ2V0IHNldCBhcyBwcmV2YWxlbnQgcmVzb3VyY2UuIik7CisKKyAgICAgICAgdGVzdFJ1bm5l
ci5zZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKHN0YXRpc3RpY3NVcmwsIHRydWUp
OworICAgICAgICBpZiAoIXRlc3RSdW5uZXIuaXNTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0
aW9uKHN0YXRpc3RpY3NVcmwpKQorICAgICAgICAgICAgdGVzdEZhaWxlZCgiSG9zdCBkaWQgbm90
IGdldCBsb2dnZWQgZm9yIHVzZXIgaW50ZXJhY3Rpb24uIik7CisKKyAgICAgICAgdGVzdFJ1bm5l
ci5pbnN0YWxsU3RhdGlzdGljc0RpZE1vZGlmeURhdGFSZWNvcmRzQ2FsbGJhY2soZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICBpZiAoZG9jdW1lbnQuY29va2llID09PSBjb29raWUpCisgICAgICAg
ICAgICAgICAgdGVzdFBhc3NlZCgiQ29va2llIG5vdCBkZWxldGVkLiIpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoIkNvb2tpZSBkZWxldGVkIG9yIGRvY3Vt
ZW50LmNvb2tpZSBjb250YWlucyBvdGhlciBjb29raWVzOiAiICsgZG9jdW1lbnQuY29va2llKTsK
KyAgICAgICAgICAgIHRlc3RSdW5uZXIuc3RhdGlzdGljc1Jlc2V0VG9Db25zaXN0ZW50U3RhdGUo
KTsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9KTsKKyAg
ICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZv
cmVEYXRhUmVjb3Jkc1JlbW92YWwoZmFsc2UpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRp
c3RpY3NNaW5pbXVtVGltZUJldHdlZWVuRGF0YVJlY29yZHNSZW1vdmFsKDApOworICAgICAgICB0
ZXN0UnVubmVyLnN0YXRpc3RpY3NGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKKyAgICB9
CisKKyAgICBpZiAoZG9jdW1lbnQubG9jYXRpb24uaG9zdCA9PT0gaG9zdFVuZGVyVGVzdCAmJiB3
aW5kb3cudGVzdFJ1bm5lciAmJiB3aW5kb3cuaW50ZXJuYWxzKSB7CisgICAgICAgIHRlc3RSdW5u
ZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICBpbnRlcm5hbHMuc2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0VuYWJsZWQodHJ1ZSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc05v
dGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQodHJ1ZSk7CisgICAgICAgIHJ1blRl
c3RSdW5uZXJUZXN0KCk7CisgICAgfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8g
bmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2Fk
aW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcHJldmFsZW50LXJlc291cmNlLXdpdGhvdXQtdXNl
ci1pbnRlcmFjdGlvbi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcHJldmFsZW50LXJlc291cmNl
LXdpdGhvdXQtdXNlci1pbnRlcmFjdGlvbi1leHBlY3RlZC50eHQJKG5vbmV4aXN0ZW50KQorKysg
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcHJl
dmFsZW50LXJlc291cmNlLXdpdGhvdXQtdXNlci1pbnRlcmFjdGlvbi1leHBlY3RlZC50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw4IEBACittYWluIGZyYW1lIC0gZGlkU3RhcnRQcm92aXNp
b25hbExvYWRGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRpZENvbW1pdExvYWRGb3JGcmFtZQorbWFp
biBmcmFtZSAtIGRpZFJlY2VpdmVUaXRsZTogVGVzdHMgZm9yIFByZXZhbGVudCBSZXNvdXJjZSBX
aXRob3V0IFVzZXIgSW50ZXJhY3Rpb24KK21haW4gZnJhbWUgLSBkaWRGaW5pc2hEb2N1bWVudExv
YWRGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRpZEhhbmRsZU9ubG9hZEV2ZW50c0ZvckZyYW1lCitt
YWluIGZyYW1lIC0gZGlkRmluaXNoTG9hZEZvckZyYW1lCitQQVNTIENvb2tpZSBkZWxldGVkLgor
CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlz
dGljcy9wcmV2YWxlbnQtcmVzb3VyY2Utd2l0aG91dC11c2VyLWludGVyYWN0aW9uLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0
YXRpc3RpY3MvcHJldmFsZW50LXJlc291cmNlLXdpdGhvdXQtdXNlci1pbnRlcmFjdGlvbi5odG1s
CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzL3ByZXZhbGVudC1yZXNvdXJjZS13aXRob3V0LXVzZXItaW50ZXJhY3Rp
b24uaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBACis8IURPQ1RZUEUgaHRtbD4K
KzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KKyAg
ICA8dGl0bGU+VGVzdHMgZm9yIFByZXZhbGVudCBSZXNvdXJjZSBXaXRob3V0IFVzZXIgSW50ZXJh
Y3Rpb248L3RpdGxlPgorICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorICAgIGNvbnN0IGhv
c3RVbmRlclRlc3QgPSAiMTI3LjAuMC4xOjgwMDAiOworICAgIGNvbnN0IHN0YXRpc3RpY3NVcmwg
PSAiaHR0cDovLyIgKyBob3N0VW5kZXJUZXN0ICsgIi90ZW1wIjsKKyAgICBmdW5jdGlvbiBydW5U
ZXN0UnVubmVyVGVzdCgpIHsKKyAgICAgICAgaWYgKGRvY3VtZW50LmNvb2tpZSAhPT0gIiIpCisg
ICAgICAgICAgICB0ZXN0RmFpbGVkKCJkb2N1bWVudC5jb29raWUgbm90IGVtcHR5LiIpOworICAg
ICAgICBjb25zdCBjb29raWUgPSAidGVzdENvb2tpZT10ZXN0VmFsdWUiOworICAgICAgICBkb2N1
bWVudC5jb29raWUgPSBjb29raWUgKyAiOyBtYXgtYWdlPTEwMDsiOworICAgICAgICBpZiAoZG9j
dW1lbnQuY29va2llICE9PSBjb29raWUpCisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJkb2N1bWVu
dC5jb29raWUgZGlkIG5vdCBnZXQgc2V0LiIpOworCisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3Rh
dGlzdGljc1ByZXZhbGVudFJlc291cmNlKHN0YXRpc3RpY3NVcmwsIHRydWUpOworICAgICAgICBp
ZiAoIXRlc3RSdW5uZXIuaXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2Uoc3RhdGlzdGljc1Vy
bCkpCisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJIb3N0IGRpZCBub3QgZ2V0IHNldCBhcyBwcmV2
YWxlbnQgcmVzb3VyY2UuIik7CisKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzSGFz
SGFkVXNlckludGVyYWN0aW9uKHN0YXRpc3RpY3NVcmwsIGZhbHNlKTsKKyAgICAgICAgaWYgKHRl
c3RSdW5uZXIuaXNTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKHN0YXRpc3RpY3NVcmwp
KQorICAgICAgICAgICAgdGVzdEZhaWxlZCgiSG9zdCBkaWQgbm90IGdldCBjbGVhcmVkIG9mIHVz
ZXIgaW50ZXJhY3Rpb24uIik7CisKKyAgICAgICAgdGVzdFJ1bm5lci5pbnN0YWxsU3RhdGlzdGlj
c0RpZE1vZGlmeURhdGFSZWNvcmRzQ2FsbGJhY2soZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBp
ZiAoZG9jdW1lbnQuY29va2llICE9PSAiIikKKyAgICAgICAgICAgICAgICB0ZXN0RmFpbGVkKCJD
b29raWUgbm90IGRlbGV0ZWQ6ICIgKyBkb2N1bWVudC5jb29raWUpOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIHRlc3RQYXNzZWQoIkNvb2tpZSBkZWxldGVkLiIpOworICAgICAg
ICAgICAgdGVzdFJ1bm5lci5zdGF0aXN0aWNzUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSgpOworICAg
ICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgICAgIH0pOworICAgICAgICB0
ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFS
ZWNvcmRzUmVtb3ZhbChmYWxzZSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc01p
bmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92YWwoMCk7CisgICAgICAgIHRlc3RSdW5u
ZXIuc3RhdGlzdGljc0ZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOworICAgIH0KKworICAg
IGlmIChkb2N1bWVudC5sb2NhdGlvbi5ob3N0ID09PSBob3N0VW5kZXJUZXN0ICYmIHdpbmRvdy50
ZXN0UnVubmVyICYmIHdpbmRvdy5pbnRlcm5hbHMpIHsKKyAgICAgICAgdGVzdFJ1bm5lci53YWl0
VW50aWxEb25lKCk7CisgICAgICAgIGludGVybmFscy5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RW5hYmxlZCh0cnVlKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzTm90aWZ5UGFn
ZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCh0cnVlKTsKKyAgICAgICAgcnVuVGVzdFJ1bm5l
clRlc3QoKTsKKyAgICB9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93azIvVGVzdEV4cGVj
dGF0aW9ucwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93azIvVGVzdEV4cGVj
dGF0aW9ucwkocmV2aXNpb24gMjExOTMxKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2syL1Rl
c3RFeHBlY3RhdGlvbnMJKHdvcmtpbmcgY29weSkKQEAgLTY5OCw2ICs2OTgsOSBAQCBodHRwL3Rl
c3RzL21pc2Mvd2lsbC1zZW5kLXJlcXVlc3Qtd2l0aC1jCiAjIGJ1ZyAxNjIyODEKIGltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZmV0Y2gvYXBpL3JlcXVlc3QvcmVxdWVzdC1jYWNoZS1v
bmx5LWlmLWNhY2hlZC5odG1sIFsgRmFpbHVyZSBdCiAKKyMgUmVzb3VyY2UgTG9hZCBTdGF0aXN0
aWNzIGFyZSBvbmx5IHN1cHBvcnRlZCBpbiBXZWJLaXQyCitodHRwL3Rlc3RzL2xvYWRpbmcvcmVz
b3VyY2VMb2FkU3RhdGlzdGljcy8gWyBQYXNzIF0KKwogIyMjIEVORCBPRiAoNSkgUHJvZ3Jlc3Np
b25zLCBleHBlY3RlZCBzdWNjZXNzZXMgdGhhdCBhcmUgZXhwZWN0ZWQgZmFpbHVyZXMgaW4gV2Vi
S2l0MS4KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>301073</attachid>
            <date>2017-02-09 12:40:34 -0800</date>
            <delta_ts>2017-02-10 22:27:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-167474-20170209123808.patch</filename>
            <type>text/plain</type>
            <size>124058</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMTkzMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc1IEBACisyMDE3LTAyLTA5ICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFVwZGF0ZXMgdG8gUmVzb3Vy
Y2UgTG9hZCBTdGF0aXN0aWNzOiBHZXQgdGhlIHJpZ2h0IHdlYnNpdGUgZGF0YSBzdG9yZSBhbmQg
aW50cm9kdWNlIHRpbWVvdXQgZm9yIHVzZXIgaW50ZXJhY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NzQ3NAorICAgICAgICA8cmRhcjovL3By
b2JsZW0vMjQ2ODE4MDg+CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yNDcwMzI4Nj4KKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzMwMjkwMjcwPgorCisgICAgICAgIFRoaXMgcGF0Y2ggZG9lcyB0
aGUgZm9sbG93aW5nOgorICAgICAgICAxLiBHZXRzIHRoZSByaWdodCB3ZWJzaXRlIGRhdGEgc3Rv
cmUuIEFQSTo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpCisgICAgICAgICAg
ICBkb2VzIG5vdCBwcm92aWRlIHRoZSByaWdodCBkYXRhIHN0b3JlLgorICAgICAgICAyLiBJbnRy
b2R1Y2VzIHRpbWVvdXQgZm9yIHVzZXIgaW50ZXJhY3Rpb24uIEEgZG9tYWluIG5lZWRzIGludGVy
YWN0aW9uIGV2ZXJ5IDMwCisgICAgICAgICAgICBkYXlzIHRvIHN0YXkgaW4gdGhhdCBjYXRlZ29y
eS4KKyAgICAgICAgMy4gQWRkcyBncmFuZGZhdGhlcmVkIHRvIHRoZSBzdGF0aXN0aWNzIG1vZGVs
IGluIHByZXBhcmF0aW9uIGZvciBncmFuZGZhdGhlcmluZyBvZgorICAgICAgICAgICAgZXhpc3Rp
bmcgZGF0YSByZWNvcmRzLgorICAgICAgICA0LiBBZGRzIHRlc3QgaW5mcmFzdHJ1Y3R1cmUgdG8g
YWxsb3cgdGVzdGluZyBvZiB0aGUgdmFyaW91cyBydWxlcyBpbiBwbGFjZSBmb3IKKyAgICAgICAg
ICAgIGRhdGEgcmVjb3JkcyByZW1vdmFsLgorICAgICAgICA1LiBGaXhlcyB2YXJpb3VzIHNtYWxs
ZXIgYnVncyB0aGF0IHdlcmUgZm91bmQgYXMgcGFydCBvZiBzZXR0aW5nIHVwIHRoZSB0ZXN0cy4K
KyAgICAgICAgNi4gUmVncmVzc2VzIHRoZSBkYXRhIHJlY29yZHMgcmVtb3ZhbCBjb3VudGluZy4g
V2UgbmVlZCB0byBjb21lIHVwIHdpdGggYSB0aHJlYWQKKyAgICAgICAgICAgIHNhZmUgd2F5IG9m
IGdhdGhlcmluZyByZW1vdmFsIHN0YXRpc3RpY3MgZnJvbSBtb3JlIHRoYW4gb25lIGRhdGEgc3Rv
cmUgbm93CisgICAgICAgICAgICB0aGF0IHdlIHBvdGVudGlhbGx5IGludGVyYWN0IHdpdGggbXVs
dGlwbGUgc3RvcmVzLgorICAgICAgICA3LiBBZGRzIGEgZmlyc3Qgc2V0IG9mIGxheW91dCB0ZXN0
cyBmb3IgcmVzb3VyY2UgbG9hZCBzdGF0aXN0aWNzLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzOiBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcy9ub24tcHJldmFsZW50LXJlc291cmNlLXdpdGgtdXNlci1pbnRlcmFj
dGlvbi5odG1sCisgICAgICAgICAgICAgICBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2Fk
U3RhdGlzdGljcy9ub24tcHJldmFsZW50LXJlc291cmNlLXdpdGhvdXQtdXNlci1pbnRlcmFjdGlv
bi5odG1sCisgICAgICAgICAgICAgICBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3Rh
dGlzdGljcy9wcmV2YWxlbnQtcmVzb3VyY2Utd2l0aC11c2VyLWludGVyYWN0aW9uLXRpbWVvdXQu
aHRtbAorICAgICAgICAgICAgICAgaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRp
c3RpY3MvcHJldmFsZW50LXJlc291cmNlLXdpdGgtdXNlci1pbnRlcmFjdGlvbi5odG1sCisgICAg
ICAgICAgICAgICBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wcmV2
YWxlbnQtcmVzb3VyY2Utd2l0aG91dC11c2VyLWludGVyYWN0aW9uLmh0bWwKKworICAgICAgICAq
IGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dXBkYXRlTGFz
dEhhbmRsZWRVc2VyR2VzdHVyZVRpbWVzdGFtcCk6CisgICAgICAgICAgICBUaGlzIG5vdyBjYWxs
cyBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nVXNlckludGVyYWN0aW9uKCkgZXZlcnkgdGltZSBz
aW5jZQorICAgICAgICAgICAgd2Ugd2FudCB0byBrZWVwIHRyYWNrIG9mIHRoZSBtb3N0IHJlY2Vu
dCB1c2VyIGludGVyYWN0aW9uLgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c3RhdGlzdGlj
c1N0b3JlKToKKyAgICAgICAgICAgIE5ldyBnZXR0ZXIgdXNlZCBieSBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWFuYWdlcjo6cmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSgpLgorICAgICAgICAoV2Vi
Q29yZTo6cmVkdWNlVGltZVJlc29sdXRpb25Ub09uZURheSk6CisgICAgICAgICAgICBDb252ZW5p
ZW5jZSBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjps
b2dVc2VySW50ZXJhY3Rpb25XaXRoUmVkdWNlZFRpbWVSZXNvbHV0aW9uKToKKyAgICAgICAgICAg
IFJlZHVjZXMgdGltZSByZXNvbHV0aW9uIGZvciBwcml2YWN5IHJlYXNvbnMuCisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nVXNlckludGVyYWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpjbGVhclVzZXJJbnRlcmFjdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6aGFzSGFkVXNlckludGVy
YWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpzZXRQcmV2
YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
aXNQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVy
KToKKyAgICAgICAgICAgIE5ldyBmdW5jdGlvbnMgdGhhdCBhbGxvdyBXZWJLaXRUZXN0UnVubmVy
IHRvIHN0YWdlIGV4YWN0CisgICAgICAgICAgICBzdGF0aXN0aWNzLCBmaXJlIHRoZSBoYW5kbGVy
LCBhbmQgdGVzdCB0aGUgb3V0Y29tZS4KKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXIuaDoKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjplbmNvZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljczo6ZGVjb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M6Om1lcmdlKToKKyAgICAgICAgICAgIFN1cHBvcnQg
Zm9yIHN0YXRpc3RpY3MgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiwgZ3JhbmRmYXRoZXJlZCwg
YW5kCisgICAgICAgICAgICBkYXRhUmVjb3Jkc1JlbW92ZWQuCisgICAgICAgICogbG9hZGVyL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3MuaDoKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgICAgICBOZXcg
ZnVuY3Rpb24gdGhhdCBhbGxvd3MgV2ViS2l0VGVzdFJ1bm5lciB0byB0ZXN0IAorICAgICAgICAg
ICAgYWdpbmcgb3V0IG9mIHVzZXIgaW50ZXJhY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omhhc0hhZFJlY2VudFVzZXJJbnRlcmFjdGlvbik6Cisg
ICAgICAgICAgICBOb3cgdGFrZXMgaW50byBhY2NvdW50IHRoZSB0aW1lc3RhbXAgYW5kIGFnZXMK
KyAgICAgICAgICAgIG91dCB1c2VyIGludGVyYWN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnNXaXRob3V0
VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgICAgIE5vdyBtYWtlcyB1c2Ugb2YgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpoYXNIYWRSZWNlbnRVc2VySW50ZXJhY3Rpb24oKS4KKyAgICAg
ICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmg6CisKIDIwMTctMDItMDgg
IFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgUHV0IG5h
bWVzIG9uIG1vcmUgVUlWaWV3cyBmb3IgZWFzZSBvZiBkZWJ1Z2dpbmcKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmNwcAkocmV2aXNpb24gMjExOTMxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjM3MSwxMCArNjM3MSw4IEBAIERvY3VtZW50
OjpSZWdpb25GaXhlZFBhaXIgRG9jdW1lbnQ6OmFic28KIAogdm9pZCBEb2N1bWVudDo6dXBkYXRl
TGFzdEhhbmRsZWRVc2VyR2VzdHVyZVRpbWVzdGFtcCgpCiB7Ci0gICAgaWYgKCFtX2xhc3RIYW5k
bGVkVXNlckdlc3R1cmVUaW1lc3RhbXApCi0gICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWRPYnNlcnZlcigpLmxvZ1VzZXJJbnRlcmFjdGlvbigqdGhpcyk7Ci0KICAgICBtX2xhc3RI
YW5kbGVkVXNlckdlc3R1cmVUaW1lc3RhbXAgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUo
KTsKKyAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5sb2dVc2VySW50
ZXJhY3Rpb25XaXRoUmVkdWNlZFRpbWVSZXNvbHV0aW9uKCp0aGlzKTsKIH0KIAogdm9pZCBEb2N1
bWVudDo6c3RhcnRUcmFja2luZ1N0eWxlUmVjYWxjcygpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAJKHJldmlzaW9uIDIxMTkzMSkKKysr
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNDIsMTcgKzQyLDI3IEBACiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJT
aGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlICJVUkwuaCIKKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRp
bWUuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorLy8gT25lIGRheSBp
biBzZWNvbmRzLgorc3RhdGljIGF1dG8gdGltZXN0YW1wUmVzb2x1dGlvbiA9IDg2NDAwOworCiBS
ZXNvdXJjZUxvYWRPYnNlcnZlciYgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZE9ic2VydmVy
KCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVzb3VyY2VMb2FkT2JzZXJ2ZXI+IHJl
c291cmNlTG9hZE9ic2VydmVyOwogICAgIHJldHVybiByZXNvdXJjZUxvYWRPYnNlcnZlcjsKIH0K
IAorUmVmUHRyPFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4gUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnN0YXRpc3RpY3NTdG9yZSgpCit7CisgICAgLy8gTWF5IGJlIG51bGwKKyAgICByZXR1cm4g
bV9zdG9yZTsKK30KKwogdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2V0U3RhdGlzdGljc1N0
b3JlKFJlZjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+JiYgc3RvcmUpCiB7CiAgICAgbV9z
dG9yZSA9IFdURk1vdmUoc3RvcmUpOwpAQCAtMjc4LDcgKzI4OCwxMiBAQCB2b2lkIFJlc291cmNl
TG9hZE9ic2VydmVyOjpsb2dXZWJTb2NrZXRMCiAgICAgICAgIG1fc3RvcmUtPmZpcmVEYXRhTW9k
aWZpY2F0aW9uSGFuZGxlcigpOwogfQogCi12b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dV
c2VySW50ZXJhY3Rpb24oY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KQorc3RhdGljIGRvdWJsZSBy
ZWR1Y2VUaW1lUmVzb2x1dGlvblRvT25lRGF5KGRvdWJsZSBzZWNvbmRzKQoreworICAgIHJldHVy
biBzdGQ6OmZsb29yKHNlY29uZHMgLyB0aW1lc3RhbXBSZXNvbHV0aW9uKSAqIHRpbWVzdGFtcFJl
c29sdXRpb247Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1VzZXJJbnRlcmFj
dGlvbldpdGhSZWR1Y2VkVGltZVJlc29sdXRpb24oY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KQog
ewogICAgIEFTU0VSVChkb2N1bWVudC5wYWdlKCkpOwogCkBAIC0yODYsMTUgKzMwMSw4OSBAQCB2
b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dVc2VySW50ZXJhCiAgICAgICAgIHJldHVybjsK
IAogICAgIGF1dG8mIHVybCA9IGRvY3VtZW50LnVybCgpOworICAgIGlmICh1cmwuaXNCbGFua1VS
TCgpIHx8IHVybC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBhdXRvJiBz
dGF0aXN0aWNzID0gbV9zdG9yZS0+ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURv
bWFpbihwcmltYXJ5RG9tYWluKHVybCkpOworICAgIGRvdWJsZSBuZXdUaW1lc3RhbXAgPSByZWR1
Y2VUaW1lUmVzb2x1dGlvblRvT25lRGF5KFdURjo6Y3VycmVudFRpbWUoKSk7CisgICAgaWYgKG5l
d1RpbWVzdGFtcCAhPSBzdGF0aXN0aWNzLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24pIHsKKyAg
ICAgICAgc3RhdGlzdGljcy5oYWRVc2VySW50ZXJhY3Rpb24gPSB0cnVlOworICAgICAgICBzdGF0
aXN0aWNzLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24gPSBuZXdUaW1lc3RhbXA7CisgICAgICAg
IG1fc3RvcmUtPmZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOworICAgIH0KK30KIAordm9p
ZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCB1cmwp
Cit7CiAgICAgaWYgKHVybC5pc0JsYW5rVVJMKCkgfHwgdXJsLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgYXV0byYgc3RhdGlzdGljcyA9IG1fc3RvcmUtPmVuc3VyZVJlc291cmNl
U3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJpbWFyeURvbWFpbih1cmwpKTsKICAgICBzdGF0
aXN0aWNzLmhhZFVzZXJJbnRlcmFjdGlvbiA9IHRydWU7Ci0gICAgbV9zdG9yZS0+ZmlyZURhdGFN
b2RpZmljYXRpb25IYW5kbGVyKCk7CisgICAgc3RhdGlzdGljcy5tb3N0UmVjZW50VXNlckludGVy
YWN0aW9uID0gV1RGOjpjdXJyZW50VGltZSgpOwogfQorCit2b2lkIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwgdXJsKQoreworICAgIGlmICh1cmwu
aXNCbGFua1VSTCgpIHx8IHVybC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBhdXRvJiBzdGF0aXN0aWNzID0gbV9zdG9yZS0+ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9y
UHJpbWFyeURvbWFpbihwcmltYXJ5RG9tYWluKHVybCkpOworICAgIAorICAgIHN0YXRpc3RpY3Mu
aGFkVXNlckludGVyYWN0aW9uID0gZmFsc2U7CisgICAgc3RhdGlzdGljcy5tb3N0UmVjZW50VXNl
ckludGVyYWN0aW9uID0gMDsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6aGFzSGFk
VXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCB1cmwpCit7CisgICAgaWYgKHVybC5pc0JsYW5rVVJM
KCkgfHwgdXJsLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAorICAgIGF1
dG8mIHN0YXRpc3RpY3MgPSBtX3N0b3JlLT5lbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmlt
YXJ5RG9tYWluKHByaW1hcnlEb21haW4odXJsKSk7CisgICAgCisgICAgcmV0dXJuIG1fc3RvcmUt
Pmhhc0hhZFJlY2VudFVzZXJJbnRlcmFjdGlvbihzdGF0aXN0aWNzKTsKK30KKwordm9pZCBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJMIHVybCkKK3sK
KyAgICBpZiAodXJsLmlzQmxhbmtVUkwoKSB8fCB1cmwuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgYXV0byYgc3RhdGlzdGljcyA9IG1fc3RvcmUtPmVuc3VyZVJlc291cmNl
U3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJpbWFyeURvbWFpbih1cmwpKTsKKyAgICAKKyAg
ICBzdGF0aXN0aWNzLmlzUHJldmFsZW50UmVzb3VyY2UgPSB0cnVlOworfQorCitib29sIFJlc291
cmNlTG9hZE9ic2VydmVyOjppc1ByZXZhbGVudFJlc291cmNlKGNvbnN0IFVSTCB1cmwpCit7Cisg
ICAgaWYgKHVybC5pc0JsYW5rVVJMKCkgfHwgdXJsLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIAorICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBtX3N0b3JlLT5lbnN1cmVSZXNv
dXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1hcnlEb21haW4odXJsKSk7CisgICAg
CisgICAgcmV0dXJuIHN0YXRpc3RpY3MuaXNQcmV2YWxlbnRSZXNvdXJjZTsKK30KKyAgICAKK3Zv
aWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgVVJM
IHVybCkKK3sKKyAgICBpZiAodXJsLmlzQmxhbmtVUkwoKSB8fCB1cmwuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgYXV0byYgc3RhdGlzdGljcyA9IG1fc3RvcmUtPmVuc3Vy
ZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJpbWFyeURvbWFpbih1cmwpKTsK
KyAgICAKKyAgICBzdGF0aXN0aWNzLmlzUHJldmFsZW50UmVzb3VyY2UgPSBmYWxzZTsKK30KKwor
dm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihk
b3VibGUgc2Vjb25kcykKK3sKKyAgICBtX3N0b3JlLT5zZXRUaW1lVG9MaXZlVXNlckludGVyYWN0
aW9uKHNlY29uZHMpOworfQorCit2b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpmaXJlRGF0YU1v
ZGlmaWNhdGlvbkhhbmRsZXIoKQoreworICAgIG1fc3RvcmUtPmZpcmVEYXRhTW9kaWZpY2F0aW9u
SGFuZGxlcigpOworfQorCiBTdHJpbmcgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnByaW1hcnlEb21h
aW4oY29uc3QgVVJMJiB1cmwpCiB7CiAgICAgU3RyaW5nIHByaW1hcnlEb21haW47CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaAkocmV2aXNpb24g
MjExOTMxKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAxNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC00OCw5ICs0OCwyMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBsb2dGcmFt
ZU5hdmlnYXRpb24oY29uc3QgRnJhbWUmIGZyYW1lLCBjb25zdCBGcmFtZSYgdG9wRnJhbWUsIGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgbmV3UmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYg
cmVkaXJlY3RSZXNwb25zZSk7CiAgICAgdm9pZCBsb2dTdWJyZXNvdXJjZUxvYWRpbmcoY29uc3Qg
RnJhbWUqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIG5ld1JlcXVlc3QsIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpOwogICAgIHZvaWQgbG9nV2ViU29ja2V0TG9hZGlu
Zyhjb25zdCBGcmFtZSosIGNvbnN0IFVSTCYpOworICAgIHZvaWQgbG9nVXNlckludGVyYWN0aW9u
V2l0aFJlZHVjZWRUaW1lUmVzb2x1dGlvbihjb25zdCBEb2N1bWVudCYpOwogCi0gICAgdm9pZCBs
b2dVc2VySW50ZXJhY3Rpb24oY29uc3QgRG9jdW1lbnQmKTsKLSAgICAKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwpOworICAgIFdFQkNPUkVfRVhQ
T1JUIGJvb2wgaGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFVSTCk7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwpOworCisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwpOworICAgIFdFQkNP
UkVfRVhQT1JUIGJvb2wgaXNQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwpOworICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgY2xlYXJQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwpOworCisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKGRvdWJsZSBz
ZWNvbmRzKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFJlZHVjZWRUaW1lc3RhbXBSZXNv
bHV0aW9uKGRvdWJsZSBzZWNvbmRzKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlyZURh
dGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiBzdGF0aXN0aWNzU3RvcmUoKTsKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNldFN0YXRpc3RpY3NTdG9yZShSZWY8UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlPiYmKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzdGF0aXN0aWNzRm9yT3Jp
Z2luKGNvbnN0IFN0cmluZyYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNl
TG9hZFN0YXRpc3RpY3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmNwcAkocmV2aXNpb24gMjExOTMxKQorKysgU291cmNlL1dl
YkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NTEsNiArNTEsOCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3M6OmVuY29kZShLZXllCiAg
ICAgCiAgICAgLy8gVXNlciBpbnRlcmFjdGlvbgogICAgIGVuY29kZXIuZW5jb2RlQm9vbCgiaGFk
VXNlckludGVyYWN0aW9uIiwgaGFkVXNlckludGVyYWN0aW9uKTsKKyAgICBlbmNvZGVyLmVuY29k
ZURvdWJsZSgibW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiIsIG1vc3RSZWNlbnRVc2VySW50ZXJh
Y3Rpb24pOworICAgIGVuY29kZXIuZW5jb2RlQm9vbCgiZ3JhbmRmYXRoZXJlZCIsIGdyYW5kZmF0
aGVyZWQpOwogICAgIAogICAgIC8vIFRvcCBmcmFtZSBzdGF0cwogICAgIGVuY29kZXIuZW5jb2Rl
Qm9vbCgidG9wRnJhbWVIYXNCZWVuTmF2aWdhdGVkVG9CZWZvcmUiLCB0b3BGcmFtZUhhc0JlZW5O
YXZpZ2F0ZWRUb0JlZm9yZSk7CkBAIC0xNzcsNyArMTc5LDE2IEBAIGJvb2wgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljczo6ZGVjb2RlKEtleWUKIAogICAgIGlmICghZGVjb2Rlci5kZWNvZGVVSW50MzIo
ImRhdGFSZWNvcmRzUmVtb3ZlZCIsIGRhdGFSZWNvcmRzUmVtb3ZlZCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAKKworICAgIGlmICh2ZXJzaW9uIDwgMykKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRG91YmxlKCJtb3N0UmVjZW50VXNlckludGVy
YWN0aW9uIiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbikpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGVCb29sKCJncmFuZGZhdGhlcmVkIiwgZ3JhbmRm
YXRoZXJlZCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIHJldHVybiB0cnVlOwogfQog
CkBAIC0yMTQsNiArMjI1LDExIEBAIFN0cmluZyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjp0b1N0
cmluZygKICAgICAvLyBVc2VyIGludGVyYWN0aW9uCiAgICAgYXBwZW5kQm9vbGVhbihidWlsZGVy
LCAiaGFkVXNlckludGVyYWN0aW9uIiwgaGFkVXNlckludGVyYWN0aW9uKTsKICAgICBidWlsZGVy
LmFwcGVuZCgnXG4nKTsKKyAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiAgICBtb3N0UmVjZW50
VXNlckludGVyYWN0aW9uOiAiKTsKKyAgICBidWlsZGVyLmFwcGVuZE51bWJlcihtb3N0UmVjZW50
VXNlckludGVyYWN0aW9uKTsKKyAgICBidWlsZGVyLmFwcGVuZCgnXG4nKTsKKyAgICBhcHBlbmRC
b29sZWFuKGJ1aWxkZXIsICIgICAgZ3JhbmRmYXRoZXJlZCIsIGdyYW5kZmF0aGVyZWQpOworICAg
IGJ1aWxkZXIuYXBwZW5kKCdcbicpOwogICAgIAogICAgIC8vIFRvcCBmcmFtZSBzdGF0cwogICAg
IGFwcGVuZEJvb2xlYW4oYnVpbGRlciwgInRvcEZyYW1lSGFzQmVlbk5hdmlnYXRlZFRvQmVmb3Jl
IiwgdG9wRnJhbWVIYXNCZWVuTmF2aWdhdGVkVG9CZWZvcmUpOwpAQCAtMjk0LDcgKzMxMCwxOSBA
QCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3M6Om1lcmdlKGNvbnN0CiB7CiAgICAgQVNTRVJU
KG90aGVyLmhpZ2hMZXZlbERvbWFpbiA9PSBoaWdoTGV2ZWxEb21haW4pOwogCi0gICAgaGFkVXNl
ckludGVyYWN0aW9uIHw9IG90aGVyLmhhZFVzZXJJbnRlcmFjdGlvbjsKKyAgICBpZiAoIW90aGVy
LmhhZFVzZXJJbnRlcmFjdGlvbikgeworICAgICAgICAvLyBJZiB1c2VyIGludGVyYWN0aW9uIGhh
cyBiZWVuIHJlc2V0IGRvIHNvIGhlcmUgdG9vLgorICAgICAgICAvLyBFbHNlLCBkbyBub3RoaW5n
LgorICAgICAgICBpZiAob3RoZXIubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiA9PSAwLjApIHsK
KyAgICAgICAgICAgIGhhZFVzZXJJbnRlcmFjdGlvbiA9IGZhbHNlOworICAgICAgICAgICAgbW9z
dFJlY2VudFVzZXJJbnRlcmFjdGlvbiA9IDAuMDsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7Cisg
ICAgICAgIGhhZFVzZXJJbnRlcmFjdGlvbiA9IHRydWU7CisgICAgICAgIGlmIChtb3N0UmVjZW50
VXNlckludGVyYWN0aW9uIDwgb3RoZXIubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbikKKyAgICAg
ICAgICAgIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24gPSBvdGhlci5tb3N0UmVjZW50VXNlcklu
dGVyYWN0aW9uOworICAgIH0KKyAgICBncmFuZGZhdGhlcmVkIHw9IG90aGVyLmdyYW5kZmF0aGVy
ZWQ7CiAgICAgCiAgICAgLy8gVG9wIGZyYW1lIHN0YXRzCiAgICAgdG9wRnJhbWVIYXNCZWVuUmVk
aXJlY3RlZFRvICs9IG90aGVyLnRvcEZyYW1lSGFzQmVlblJlZGlyZWN0ZWRUbzsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuaAkocmV2aXNp
b24gMjExOTMxKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3MuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDE3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDcgKzUzLDEwIEBAIHN0cnVjdCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzIHsKIAogICAgIC8vIFVzZXIgaW50ZXJhY3Rpb24KICAgICBib29sIGhhZFVzZXJJ
bnRlcmFjdGlvbiB7IGZhbHNlIH07Ci0gICAgCisgICAgLy8gVGltZXN0YW1wLiBEZWZhdWx0IHZh
bHVlIGlzIG5lZ2F0aXZlLCAwLjAgbWVhbnMgaXQgd2FzIHJlc2V0LgorICAgIGRvdWJsZSBtb3N0
UmVjZW50VXNlckludGVyYWN0aW9uIHsgLTEuMCB9OworICAgIGJvb2wgZ3JhbmRmYXRoZXJlZCB7
IGZhbHNlIH07CisKICAgICAvLyBUb3AgZnJhbWUgc3RhdHMKICAgICB1bnNpZ25lZCB0b3BGcmFt
ZUhhc0JlZW5SZWRpcmVjdGVkVG8geyAwIH07CiAgICAgdW5zaWduZWQgdG9wRnJhbWVIYXNCZWVu
UmVkaXJlY3RlZEZyb20geyAwIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAkocmV2aXNpb24gMjExOTMxKQor
KysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzMsMTEgKzMzLDE0IEBACiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcy5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUgIlVSTC5oIgor
I2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3ll
ZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBjb25zdCBhdXRvIHN0YXRpc3Rp
Y3NNb2RlbFZlcnNpb24gPSAyOworc3RhdGljIGNvbnN0IGF1dG8gc3RhdGlzdGljc01vZGVsVmVy
c2lvbiA9IDM7CisvLyAzMCBkYXlzIGluIHNlY29uZHMKK3N0YXRpYyBhdXRvIHRpbWVUb0xpdmVV
c2VySW50ZXJhY3Rpb24gPSAyNTkyMDAwOwogCiBSZWY8UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNyZWF0ZSgpCiB7CkBAIC0xNDQsMTcg
KzE0Nyw0MCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZmlyZURhCiAgICAg
ICAgIG1fZGF0YUFkZGVkSGFuZGxlcigpOwogfQogCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihkb3VibGUgc2Vjb25kcykKK3sK
KyAgICBpZiAoc2Vjb25kcyA+PSAwKQorICAgICAgICB0aW1lVG9MaXZlVXNlckludGVyYWN0aW9u
ID0gc2Vjb25kczsKK30KKwogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnByb2Nl
c3NTdGF0aXN0aWNzKHN0ZDo6ZnVuY3Rpb248dm9pZChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik+
JiYgcHJvY2Vzc0Z1bmN0aW9uKQogewogICAgIGZvciAoYXV0byYgcmVzb3VyY2VTdGF0aXN0aWMg
OiBtX3Jlc291cmNlU3RhdGlzdGljc01hcC52YWx1ZXMoKSkKICAgICAgICAgcHJvY2Vzc0Z1bmN0
aW9uKHJlc291cmNlU3RhdGlzdGljKTsKIH0KIAorYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6Omhhc0hhZFJlY2VudFVzZXJJbnRlcmFjdGlvbihSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
JiByZXNvdXJjZVN0YXRpc3RpYykKK3sKKyAgICBpZiAoIXJlc291cmNlU3RhdGlzdGljLmhhZFVz
ZXJJbnRlcmFjdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGN1cnJlbnRU
aW1lKCkgPiAocmVzb3VyY2VTdGF0aXN0aWMubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiArIHRp
bWVUb0xpdmVVc2VySW50ZXJhY3Rpb24pKSB7CisgICAgICAgIC8vIERyb3AgcHJpdmFjeSBzZW5z
aXRpdmUgZGF0YSBiZWNhdXNlIHdlIG5vIGxvbmdlciBuZWVkIGl0LgorICAgICAgICAvLyBTZXQg
dGltZXN0YW1wIHRvIDAuMCBzbyB0aGF0IHN0YXRpc3RpY3MgbWVyZ2Ugd2lsbCBrbm93CisgICAg
ICAgIC8vIGl0IGhhcyBiZWVuIHJlc2V0IGFzIG9wcG9zZWQgdG8gaXRzIGRlZmF1bHQgLTEuMC4K
KyAgICAgICAgcmVzb3VyY2VTdGF0aXN0aWMubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiA9IDAu
MDsKKyAgICAgICAgcmVzb3VyY2VTdGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uID0gZmFsc2U7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwog
VmVjdG9yPFN0cmluZz4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcmV2YWxlbnRSZXNv
dXJjZURvbWFpbnNXaXRob3V0VXNlckludGVyYWN0aW9uKCkKIHsKICAgICBWZWN0b3I8U3RyaW5n
PiBwcmV2YWxlbnRSZXNvdXJjZXM7CiAgICAgZm9yIChhdXRvJiByZXNvdXJjZVN0YXRpc3RpYyA6
IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmIChyZXNvdXJj
ZVN0YXRpc3RpYy5pc1ByZXZhbGVudFJlc291cmNlICYmICFyZXNvdXJjZVN0YXRpc3RpYy5oYWRV
c2VySW50ZXJhY3Rpb24pCisgICAgICAgIGlmIChyZXNvdXJjZVN0YXRpc3RpYy5pc1ByZXZhbGVu
dFJlc291cmNlICYmICFoYXNIYWRSZWNlbnRVc2VySW50ZXJhY3Rpb24ocmVzb3VyY2VTdGF0aXN0
aWMpKQogICAgICAgICAgICAgcHJldmFsZW50UmVzb3VyY2VzLmFwcGVuZChyZXNvdXJjZVN0YXRp
c3RpYy5oaWdoTGV2ZWxEb21haW4pOwogICAgIH0KICAgICByZXR1cm4gcHJldmFsZW50UmVzb3Vy
Y2VzOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUuaAkocmV2aXNpb24gMjExOTMxKQorKysgU291cmNlL1dlYkNvcmUvbG9h
ZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTksOSAr
NTksMTEgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Tm90aWZpY2F0aW9u
Q2FsbGJhY2soc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGhhbmRsZXIpOwogCiAgICAgdm9pZCBmaXJl
RGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKKyAgICB2b2lkIHNldFRpbWVUb0xpdmVVc2VySW50
ZXJhY3Rpb24oZG91YmxlIHNlY29uZHMpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwcm9j
ZXNzU3RhdGlzdGljcyhzdGQ6OmZ1bmN0aW9uPHZvaWQoUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYp
PiYmKTsKIAorICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaGFzSGFkUmVjZW50VXNlckludGVyYWN0
aW9uKFJlc291cmNlTG9hZFN0YXRpc3RpY3MmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8
U3RyaW5nPiBwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnNXaXRob3V0VXNlckludGVyYWN0aW9uKCk7
CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB1cGRhdGVTdGF0aXN0aWNzRm9yUmVtb3ZlZERhdGFS
ZWNvcmRzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMpOwog
cHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMTkzMSkKKysrIFNvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzMCBAQAorMjAxNy0wMi0w
OSAgSm9obiBXaWxhbmRlciAgPHdpbGFuZGVyQGFwcGxlLmNvbT4KKworICAgICAgICBVcGRhdGVz
IHRvIFJlc291cmNlIExvYWQgU3RhdGlzdGljczogR2V0IHRoZSByaWdodCB3ZWJzaXRlIGRhdGEg
c3RvcmUgYW5kIGludHJvZHVjZSB0aW1lb3V0IGZvciB1c2VyIGludGVyYWN0aW9uCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjc0NzQKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzI0NjgxODA4PgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjQ3MDMy
ODY+CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMDI5MDI3MD4KKworICAgICAgICBUaGlzIHBh
dGNoIGRvZXMgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgMS4gR2V0cyB0aGUgcmlnaHQgd2Vic2l0
ZSBkYXRhIHN0b3JlLiBBUEk6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUoKQor
ICAgICAgICAgICAgZG9lcyBub3QgcHJvdmlkZSB0aGUgcmlnaHQgZGF0YSBzdG9yZS4KKyAgICAg
ICAgMi4gSW50cm9kdWNlcyB0aW1lb3V0IGZvciB1c2VyIGludGVyYWN0aW9uLiBBIGRvbWFpbiBu
ZWVkcyBpbnRlcmFjdGlvbiBldmVyeSAzMAorICAgICAgICAgICAgZGF5cyB0byBzdGF5IGluIHRo
YXQgY2F0ZWdvcnkuCisgICAgICAgIDMuIEFkZHMgZ3JhbmRmYXRoZXJlZCB0byB0aGUgc3RhdGlz
dGljcyBtb2RlbCBpbiBwcmVwYXJhdGlvbiBmb3IgZ3JhbmRmYXRoZXJpbmcgb2YKKyAgICAgICAg
ICAgIGV4aXN0aW5nIGRhdGEgcmVjb3Jkcy4KKyAgICAgICAgNC4gQWRkcyB0ZXN0IGluZnJhc3Ry
dWN0dXJlIHRvIGFsbG93IHRlc3Rpbmcgb2YgdGhlIHZhcmlvdXMgcnVsZXMgaW4gcGxhY2UgZm9y
CisgICAgICAgICAgICBkYXRhIHJlY29yZHMgcmVtb3ZhbC4KKyAgICAgICAgNS4gRml4ZXMgdmFy
aW91cyBzbWFsbGVyIGJ1Z3MgdGhhdCB3ZXJlIGZvdW5kIGFzIHBhcnQgb2Ygc2V0dGluZyB1cCB0
aGUgdGVzdHMuCisgICAgICAgIDYuIFJlZ3Jlc3NlcyB0aGUgZGF0YSByZWNvcmRzIHJlbW92YWwg
Y291bnRpbmcuIFdlIG5lZWQgdG8gY29tZSB1cCB3aXRoIGEgdGhyZWFkCisgICAgICAgICAgICBz
YWZlIHdheSBvZiBnYXRoZXJpbmcgcmVtb3ZhbCBzdGF0aXN0aWNzIGZyb20gbW9yZSB0aGFuIG9u
ZSBkYXRhIHN0b3JlIG5vdworICAgICAgICAgICAgdGhhdCB3ZSBwb3RlbnRpYWxseSBpbnRlcmFj
dCB3aXRoIG11bHRpcGxlIHN0b3Jlcy4KKyAgICAgICAgNy4gQWRkcyBhIGZpcnN0IHNldCBvZiBs
YXlvdXQgdGVzdHMgZm9yIHJlc291cmNlIGxvYWQgc3RhdGlzdGljcy4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgor
ICAgICAgICAgICAgQWRkZWQgVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5h
Z2VyLmNwcCBhbmQKKyAgICAgICAgICAgIFVJUHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NNYW5hZ2VyLmNwcC4KKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAg
ICAgICAgIEFkZGVkIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5j
cHAgYW5kCisgICAgICAgICAgICBVSVByb2Nlc3MvQVBJL0MvV0tSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWFuYWdlci5jcHAuCisgICAgICAgICogUGxhdGZvcm1NYWMuY21ha2U6CisgICAgICAgICAg
ICBBZGRlZCBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwIGFu
ZAorICAgICAgICAgICAgVUlQcm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01h
bmFnZXIuY3BwLgorICAgICAgICAqIFNoYXJlZC9BUEkvQVBJT2JqZWN0Lmg6CisgICAgICAgICAg
ICBBZGRzIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyIHRvIHRoZSBUeXBlIGVudW0u
CisgICAgICAgICogU2hhcmVkL0FQSS9jL1dLQmFzZS5oOgorICAgICAgICAgICAgVHlwZWRlZiBv
ZiBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyUmVmLgorICAgICAgICAqIFNoYXJlZC9X
ZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFJl
c291cmNlTG9hZFN0YXRpc3RpY3M+OjplbmNvZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENv
ZGVyPFJlc291cmNlTG9hZFN0YXRpc3RpY3M+OjpkZWNvZGUpOgorICAgICAgICAgICAgQWRkcyBz
dXBwb3J0IGZvciBzdGF0aXN0aWNzIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24sIGdyYW5kZmF0
aGVyZWQsIGFuZAorICAgICAgICAgICAgZGF0YVJlY29yZHNSZW1vdmVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQy9XS0FQSUNhc3QuaDoKKyAgICAgICAgICAgIEFkZHMgQVBJIG1hcHBpbmcg
YmV0d2VlbiBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyUmVmIGFuZCAKKyAgICAgICAg
ICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcDogQWRkZWQuCisgICAg
ICAgIChXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyR2V0VHlwZUlEKToKKyAgICAgICAg
KFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXRQcmV2YWxlbnRSZXNvdXJjZSk6Cisg
ICAgICAgIChXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VySXNQcmV2YWxlbnRSZXNvdXJj
ZSk6CisgICAgICAgIChXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0SGFzSGFkVXNl
ckludGVyYWN0aW9uKToKKyAgICAgICAgKFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJJ
c0hhc0hhZFVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXS1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNYW5hZ2VyU2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXS1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKToKKyAg
ICAgICAgKFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXROb3RpZnlQYWdlc1doZW5E
YXRhUmVjb3Jkc1dlcmVTY2FubmVkKToKKyAgICAgICAgKFdLUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01hbmFnZXJTZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3Zh
bCk6CisgICAgICAgIChXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0TWluaW11bVRp
bWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAgIChXS1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NNYW5hZ2VyUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSk6CisgICAgICAgICAgICBBUEkg
bGV2ZWwgYnJpZGdlIHRvIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyIGZ1bmN0aW9u
cy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFu
YWdlci5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpkZWxldGVXZWJzaXRlRGF0YUZvclRv
cFByaXZhdGVseU93bmVkRG9tYWluc0luQWxsUGVyc2lzdGVudERhdGFTdG9yZXMpOgorICAgICAg
ICAgICAgQSB3YXkgdG8gZGVsZXRlIHdlYnNpdGUgZGF0YSBpbiBwZXJzaXN0ZW50IHN0b3JlKHMp
IGNvbmZpZ3VyZWQgYnkgdGhlIAorICAgICAgICAgICAgZW1iZWRkaW5nIGNsaWVudC4gQVBJOjpX
ZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCkgZG9lcyBub3QgCisgICAgICAgICAg
ICBkbyB0aGlzIHdoaWNoIGNhdXNlZCB1cyB0byBza2lwIHNlc3Npb24gc3RvcmFnZS4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXRQcmV2YWxlbnRSZXNvdXJj
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpp
c1ByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01hbmFnZXI6OnNldEhhc0hhZFVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJL
aXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpoYXNIYWRVc2VySW50ZXJhY3Rp
b24pOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6
c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpmaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6c2V0Tm90
aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNl
c0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXRNaW5pbXVtVGltZUJldHdlZWVuRGF0YVJlY29yZHNS
ZW1vdmFsKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFn
ZXI6OnJlc2V0VG9Db25zaXN0ZW50U3RhdGUpOgorICAgICAgICAgICAgU3RhdGljIGZ1bmN0aW9u
cyB0byBtYW5hZ2UgdGhlIHN0YXRlIGFuZCBiZWhhdmlvciBvZiB0aGUgVUkgcHJvY2VzcycgCisg
ICAgICAgICAgICByZXNvdXJjZSBsb2FkIHN0YXRpc3RpY3Mgc3RvcmUuCisgICAgICAgICogVUlQ
cm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6Y3JlYXRlKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUpOgorICAgICAgICAgICAgQW4gZWZmZWN0IG9mIGEgbWVtYmVy
IHZhcmlhYmxlIHJlbmFtZS4gU2VlIGhlYWRlciBmaWxlIGNvbW1lbnQgYmVsb3cuCisgICAgICAg
IChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0Tm90aWZ5UGFnZXNX
aGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRh
UmVjb3Jkc1JlbW92YWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnNldE1pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92YWwpOgorICAg
ICAgICAgICAgVGhyZWUgc3RhdGljIGZ1bmN0aW9ucyBmb3IgY29udHJvbGxpbmcgdGhlIGJlaGF2
aW9yIG9mIHRoZSBzdG9yZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpyZW1vdmVEYXRhUmVjb3Jkcyk6CisgICAgICAgICAgICBDaGFuZ2VzOgorICAg
ICAgICAgICAgMS4gQ292ZXJzIGFsbCBkYXRhIHJlY29yZCB0eXBlcy4KKyAgICAgICAgICAgIDIu
IEFsbG93cyBkYXRhIHJlbW92YWwgd2hlbiBtX2xhc3RUaW1lRGF0YVJlY29yZHNXZXJlUmVtb3Zl
ZCBpcyBub3Qgc2V0LgorICAgICAgICAgICAgMy4gTW92ZXMgdGhlIGhlYXZ5IGxpZnRpbmcgdG8g
V2Vic2l0ZURhdGFTdG9yZSAoc2VlIGJlbG93KS4KKyAgICAgICAgICAgIDQuIE5vIGxvbmdlciBj
b3VudHMgcmVtb3ZlZCBkYXRhIHJlZ3Jlc3Npb25zLgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMp
OgorICAgICAgICAgICAgU2VlIG5leHQgY29tbWVudC4KKyAgICAgICAgKFdlYktpdDo6V2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzVXBkYXRlZCk6
CisgICAgICAgICAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnByb2Nlc3NTdGF0
aXN0aWNzQW5kRGF0YVJlY29yZHMoKSBpcyAKKyAgICAgICAgICAgIGJyb2tlbiBvdXQgb2YgV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzVXBkYXRl
ZAorICAgICAgICAgICAgdG8gYWxsb3cgZm9yIHN0YXRpc3RpY3MgcHJvY2Vzc2luZyB3aXRob3V0
IHByaW9yIGNsYXNzaWZpY2F0aW9uLgorICAgICAgICAgICAgVGVzdHMgbmVlZCB0byBzZXQgc3Rh
dGlzdGljcyBhbmQgYSBydW4gb2YgdGhlIGNsYXNzaWZpZXIgbWF5CisgICAgICAgICAgICByZXNl
dCB0aGUgZGF0YS4KKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpyZWdpc3RlclNoYXJlZFJlc291cmNlTG9hZE9ic2VydmVyKToKKyAgICAgICAgICAgIFNl
dHMgdGhlIG5vdGlmaWNhdGlvbiBjYWxsYmFjayB3aGljaCBjYWxscyAKKyAgICAgICAgICAgIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVj
b3JkcygpLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpj
b3JlU3RvcmUpOgorICAgICAgICAgICAgUmVuYW1lZCBtX3Jlc291cmNlU3RhdGlzdGljc1N0b3Jl
IHRvIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlIHRvCisgICAgICAgICAgICBoYXJtb25p
emUgd2l0aCBvdGhlciBuYW1pbmcuCisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dl
YnNpdGVEYXRhU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpm
ZXRjaERhdGFGb3JUb3BQcml2YXRlbHlPd25lZERvbWFpbnMpOgorICAgICAgICAgICAgVGhpcyBp
cyBub3cgd2hlcmUgbWF0Y2hpbmcgaXMgbWFkZSBiZXR3ZWVuIHByZXZhbGVudCByZXNvdXJjZXMK
KyAgICAgICAgICAgIGFuZCBkYXRhIHJlY29yZHMuIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSAK
KyAgICAgICAgICAgIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGFGb3JUb3BQcml2YXRlbHlP
d25lZERvbWFpbnMoKS4KKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cmVtb3Zl
RGF0YUZvclRvcFByaXZhdGVseU93bmVkRG9tYWlucyk6CisgICAgICAgICAgICBUaGUgZnVuY3Rp
b24gV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZW1vdmVEYXRhUmVjb3JkcygpCisg
ICAgICAgICAgICBjYWxscyB0byBnZXQgZGF0YSByZWNvcmRzIHJlbW92ZWQgaW4gYWxsIHBlcnNp
c3RlbnQgc3RvcmVzLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0
YVN0b3JlLmg6CisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Om1f
cmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
czo6c3RhdGlzdGljc0NoYW5nZWRUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYktpdDo6bV9yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmFnZSk6IERlbGV0ZWQuCisgICAgICAgICAgICBSZW5hbWVk
IG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JhZ2UgdG8gbV9yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUgCisgICAgICAgICAgICB0byBoYXJtb25pemUgd2l0aCBvdGhlciBuYW1pbmcuCisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmg6CisKIDIwMTctMDItMDggIFNpbW9uIEZy
YXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgUHV0IG5hbWVzIG9uIG1v
cmUgVUlWaWV3cyBmb3IgZWFzZSBvZiBkZWJ1Z2dpbmcKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtRWZsLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZs
LmNtYWtlCShyZXZpc2lvbiAyMTE5MzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5j
bWFrZQkod29ya2luZyBjb3B5KQpAQCAtNjIsMTAgKzYyLDEzIEBAIGxpc3QoQVBQRU5EIFdlYktp
dDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9CYWNraW5nU3RvcmUuY3BwCiAgICAgVUlQcm9jZXNz
L0RlZmF1bHRVbmRvQ29udHJvbGxlci5jcHAKICAgICBVSVByb2Nlc3MvTGVnYWN5U2Vzc2lvblN0
YXRlQ29kaW5nTm9uZS5jcHAKKyAgICBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01hbmFnZXIuY3BwCiAgICAgVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZS5jcHAKICAgICBVSVByb2Nlc3MvV2ViVGV4dENoZWNrZXIuY3BwCiAgICAgVUlQcm9jZXNzL1dl
YlRleHRDaGVja2VyQ2xpZW50LmNwcAogCisgICAgVUlQcm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01hbmFnZXIuY3BwCisKICAgICBVSVByb2Nlc3MvQVBJL0MvQ29vcmRpbmF0
ZWRHcmFwaGljcy9XS1ZpZXcuY3BwCiAKICAgICBVSVByb2Nlc3MvQVBJL0MvY2Fpcm8vV0tJY29u
RGF0YWJhc2VDYWlyby5jcHAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtl
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCShyZXZpc2lv
biAyMTE5MzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQkod29ya2luZyBj
b3B5KQpAQCAtODgsMTAgKzg4LDEzIEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAg
IFVJUHJvY2Vzcy9EZWZhdWx0VW5kb0NvbnRyb2xsZXIuY3BwCiAgICAgVUlQcm9jZXNzL0RyYXdp
bmdBcmVhUHJveHlJbXBsLmNwcAogICAgIFVJUHJvY2Vzcy9MZWdhY3lTZXNzaW9uU3RhdGVDb2Rp
bmdOb25lLmNwcAorICAgIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdl
ci5jcHAKICAgICBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAog
ICAgIFVJUHJvY2Vzcy9XZWJUZXh0Q2hlY2tlci5jcHAKICAgICBVSVByb2Nlc3MvV2ViVGV4dENo
ZWNrZXJDbGllbnQuY3BwCiAKKyAgICBVSVByb2Nlc3MvQVBJL0MvV0tSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWFuYWdlci5jcHAKKwogICAgIFVJUHJvY2Vzcy9BUEkvQy9jYWlyby9XS0ljb25EYXRh
YmFzZUNhaXJvLmNwcAogCiAgICAgVUlQcm9jZXNzL0FQSS9DL2d0ay9XS0Z1bGxTY3JlZW5DbGll
bnRHdGsuY3BwCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybU1hYy5jbWFrZQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybU1hYy5jbWFrZQkocmV2aXNpb24gMjExOTMx
KQorKysgU291cmNlL1dlYktpdDIvUGxhdGZvcm1NYWMuY21ha2UJKHdvcmtpbmcgY29weSkKQEAg
LTE1OSw2ICsxNTksNyBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nl
c3MvSGlnaFBlcmZvcm1hbmNlR3JhcGhpY3NVc2FnZVNhbXBsZXIuY3BwCiAgICAgVUlQcm9jZXNz
L1BlckFjdGl2aXR5U3RhdGVDUFVVc2FnZVNhbXBsZXIuY3BwCiAgICAgVUlQcm9jZXNzL1dlYkNv
bnRleHRNZW51TGlzdGVuZXJQcm94eS5jcHAKKyAgICBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01hbmFnZXIuY3BwCiAgICAgVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5jcHAKIAogICAgIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25T
ZXNzaW9uLmNwcApAQCAtMTcxLDYgKzE3Miw4IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNF
UwogICAgIFVJUHJvY2Vzcy9BUEkvQVBJVXNlclN0eWxlU2hlZXQuY3BwCiAgICAgVUlQcm9jZXNz
L0FQSS9BUElXZWJzaXRlRGF0YVJlY29yZC5jcHAKIAorICAgIFVJUHJvY2Vzcy9BUEkvQy9XS1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcAorCiAgICAgVUlQcm9jZXNzL0FQSS9DL21h
Yy9XS0NvbnRleHRQcml2YXRlTWFjLm1tCiAgICAgVUlQcm9jZXNzL0FQSS9DL21hYy9XS1BhZ2VQ
cml2YXRlTWFjLm1tCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1l
bnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3Jl
QXJndW1lbnRDb2RlcnMuY3BwCShyZXZpc2lvbiAyMTE5MzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIyNTIs
NiArMjI1Miw4IEBAIHZvaWQgQXJndW1lbnRDb2RlcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWMKICAg
ICAKICAgICAvLyBVc2VyIGludGVyYWN0aW9uCiAgICAgZW5jb2RlciA8PCBzdGF0aXN0aWNzLmhh
ZFVzZXJJbnRlcmFjdGlvbjsKKyAgICBlbmNvZGVyIDw8IHN0YXRpc3RpY3MubW9zdFJlY2VudFVz
ZXJJbnRlcmFjdGlvbjsKKyAgICBlbmNvZGVyIDw8IHN0YXRpc3RpY3MuZ3JhbmRmYXRoZXJlZDsK
ICAgICAKICAgICAvLyBUb3AgZnJhbWUgc3RhdHMKICAgICBlbmNvZGVyIDw8IHN0YXRpc3RpY3Mu
dG9wRnJhbWVIYXNCZWVuTmF2aWdhdGVkVG9CZWZvcmU7CkBAIC0yMjgyLDYgKzIyODQsNyBAQCB2
b2lkIEFyZ3VtZW50Q29kZXI8UmVzb3VyY2VMb2FkU3RhdGlzdGljCiAgICAgLy8gUHJldmFsZW50
IFJlc291cmNlCiAgICAgZW5jb2RlciA8PCBzdGF0aXN0aWNzLnJlZGlyZWN0ZWRUb090aGVyUHJl
dmFsZW50UmVzb3VyY2VPcmlnaW5zOwogICAgIGVuY29kZXIgPDwgc3RhdGlzdGljcy5pc1ByZXZh
bGVudFJlc291cmNlOworICAgIGVuY29kZXIgPDwgc3RhdGlzdGljcy5kYXRhUmVjb3Jkc1JlbW92
ZWQ7CiB9CiAKIGJvb2wgQXJndW1lbnRDb2RlcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPjo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIsIFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHN0
YXRpc3RpY3MpCkBAIC0yMjkyLDYgKzIyOTUsMTIgQEAgYm9vbCBBcmd1bWVudENvZGVyPFJlc291
cmNlTG9hZFN0YXRpc3RpYwogICAgIC8vIFVzZXIgaW50ZXJhY3Rpb24KICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHN0YXRpc3RpY3MuaGFkVXNlckludGVyYWN0aW9uKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGF0aXN0aWNzLm1vc3RSZWNlbnRV
c2VySW50ZXJhY3Rpb24pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHN0YXRpc3RpY3MuZ3JhbmRmYXRoZXJlZCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAKICAgICAvLyBUb3AgZnJhbWUgc3RhdHMKICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHN0YXRpc3RpY3MudG9wRnJhbWVIYXNCZWVuTmF2aWdhdGVkVG9CZWZvcmUpKQpAQCAtMjM2Miw3
ICsyMzcxLDEwIEBAIGJvb2wgQXJndW1lbnRDb2RlcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWMKICAg
ICAKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0YXRpc3RpY3MuaXNQcmV2YWxlbnRSZXNvdXJj
ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKworICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUoc3RhdGlzdGljcy5kYXRhUmVjb3Jkc1JlbW92ZWQpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL0FQ
SS9BUElPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL0FQ
SU9iamVjdC5oCShyZXZpc2lvbiAyMTE5MzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJ
L0FQSU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE1NCw2ICsxNTQsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIFZpYnJhdGlvbiwKICAgICAgICAgVmlld3BvcnRBdHRyaWJ1dGVzLAogICAgICAgICBWaXNp
dGVkTGlua1N0b3JlLAorICAgICAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlciwK
ICAgICAgICAgV2Vic2l0ZURhdGFSZWNvcmQsCiAgICAgICAgIFdlYnNpdGVEYXRhU3RvcmUsCiAg
ICAgICAgIFdlYnNpdGVQb2xpY2llcywKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkv
Yy9XS0Jhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tC
YXNlLmgJKHJldmlzaW9uIDIxMTkzMSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9X
S0Jhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEwLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogUG9y
dGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMTI3LDYgKzEyNyw3IEBAIHR5cGVk
ZWYgY29uc3Qgc3RydWN0IE9wYXF1ZVdLUGFnZVJ1bkJlZm8KIHR5cGVkZWYgY29uc3Qgc3RydWN0
IE9wYXF1ZVdLUGFnZVJ1bkphdmFTY3JpcHRBbGVydFJlc3VsdExpc3RlbmVyKiBXS1BhZ2VSdW5K
YXZhU2NyaXB0QWxlcnRSZXN1bHRMaXN0ZW5lclJlZjsKIHR5cGVkZWYgY29uc3Qgc3RydWN0IE9w
YXF1ZVdLUGFnZVJ1bkphdmFTY3JpcHRDb25maXJtUmVzdWx0TGlzdGVuZXIqIFdLUGFnZVJ1bkph
dmFTY3JpcHRDb25maXJtUmVzdWx0TGlzdGVuZXJSZWY7CiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBP
cGFxdWVXS1BhZ2VSdW5KYXZhU2NyaXB0UHJvbXB0UmVzdWx0TGlzdGVuZXIqIFdLUGFnZVJ1bkph
dmFTY3JpcHRQcm9tcHRSZXN1bHRMaXN0ZW5lclJlZjsKK3R5cGVkZWYgY29uc3Qgc3RydWN0IE9w
YXF1ZVdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIqIFdLUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01hbmFnZXJSZWY7CiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVXS1RleHRDaGVja2Vy
KiBXS1RleHRDaGVja2VyUmVmOwogdHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlV0tTZXNzaW9u
KiBXS1Nlc3Npb25SZWY7CiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVXS1Nlc3Npb25TdGF0
ZSogV0tTZXNzaW9uU3RhdGVSZWY7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UHJvY2Vzc1Byb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUHJvY2Vzc1Byb3h5LmNwcAkocmV2aXNpb24gMjExOTMxKQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMDAsNiAr
MjAwLDUzIEBAIFdlYlBhZ2VQcm94eSogV2ViUHJvY2Vzc1Byb3h5Ojp3ZWJQYWdlKHUKICAgICBy
ZXR1cm4gZ2xvYmFsUGFnZU1hcCgpLmdldChwYWdlSUQpOwogfQogCit2b2lkIFdlYlByb2Nlc3NQ
cm94eTo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JUb3BQcml2YXRlbHlPd25lZERvbWFpbnNJbkFsbFBl
cnNpc3RlbnREYXRhU3RvcmVzKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywg
VmVjdG9yPFN0cmluZz4mIHRvcFByaXZhdGVseU93bmVkRG9tYWlucywgYm9vbCBzaG91bGROb3Rp
ZnlQYWdlLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAg
c3RydWN0IENhbGxiYWNrQWdncmVnYXRvciA6IFRocmVhZFNhZmVSZWZDb3VudGVkPENhbGxiYWNr
QWdncmVnYXRvcj4geworICAgICAgICBleHBsaWNpdCBDYWxsYmFja0FnZ3JlZ2F0b3Ioc3RkOjpm
dW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25IYW5kbGVyKQorICAgICAgICAgICAgOiBjb21wbGV0
aW9uSGFuZGxlcihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkKKyAgICAgICAgeworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGFkZFBlbmRpbmdDYWxsYmFjaygpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHBlbmRpbmdDYWxsYmFja3MrKzsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgdm9pZCByZW1vdmVQZW5kaW5nQ2FsbGJhY2soKQorICAgICAgICB7CisgICAgICAg
ICAgICBBU1NFUlQocGVuZGluZ0NhbGxiYWNrcyk7CisgICAgICAgICAgICAtLXBlbmRpbmdDYWxs
YmFja3M7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhbGxJZk5lZWRlZCgpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGNhbGxJZk5lZWRlZCgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmICghcGVuZGluZ0NhbGxiYWNrcykKKyAgICAgICAgICAgICAgICBSdW5Mb29w
OjptYWluKCkuZGlzcGF0Y2goV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBwZW5kaW5nQ2FsbGJhY2tzID0gMDsKKyAgICAg
ICAgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25IYW5kbGVyOworICAgIH07CisgICAg
CisgICAgUmVmUHRyPENhbGxiYWNrQWdncmVnYXRvcj4gY2FsbGJhY2tBZ2dyZWdhdG9yID0gYWRv
cHRSZWYobmV3IENhbGxiYWNrQWdncmVnYXRvcihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkp
OworCisgICAgZm9yIChhdXRvJiBwYWdlIDogZ2xvYmFsUGFnZU1hcCgpKSB7CisgICAgICAgIGlm
IChwYWdlLnZhbHVlLT53ZWJzaXRlRGF0YVN0b3JlKCkuaXNQZXJzaXN0ZW50KCkpIHsKKyAgICAg
ICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7CisgICAgICAg
ICAgICBwYWdlLnZhbHVlLT53ZWJzaXRlRGF0YVN0b3JlKCkucmVtb3ZlRGF0YUZvclRvcFByaXZh
dGVseU93bmVkRG9tYWlucyhkYXRhVHlwZXMsIHsgfSwgdG9wUHJpdmF0ZWx5T3duZWREb21haW5z
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yLCBzaG91bGROb3RpZnlQYWdlLCBwYWdlXSgpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoc2hvdWxkTm90aWZ5UGFnZSkKKyAgICAgICAgICAgICAgICAgICAgcGFn
ZS52YWx1ZS0+cG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKCJXZWJzaXRlRGF0YURlbGV0aW9u
Rm9yVG9wUHJpdmF0ZWx5T3duZWREb21haW5zRmluaXNoZWQiLCBudWxscHRyKTsKKyAgICAgICAg
ICAgICAgICBXVEY6OlJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGlu
Z0NhbGxiYWNrKCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfQorICAgIH0KK30KKwogUmVmPFdlYlBhZ2VQcm94eT4gV2ViUHJvY2Vzc1Byb3h5OjpjcmVh
dGVXZWJQYWdlKFBhZ2VDbGllbnQmIHBhZ2VDbGllbnQsIFJlZjxBUEk6OlBhZ2VDb25maWd1cmF0
aW9uPiYmIHBhZ2VDb25maWd1cmF0aW9uKQogewogICAgIHVpbnQ2NF90IHBhZ2VJRCA9IGdlbmVy
YXRlUGFnZUlEKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1By
b3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
cm94eS5oCShyZXZpc2lvbiAyMTE5MzEpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UHJvY2Vzc1Byb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEwLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEwLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjAsNiArMTIwLDcgQEAgcHVibGlj
OgogICAgIHZvaWQgZmV0Y2hXZWJzaXRlRGF0YShXZWJDb3JlOjpTZXNzaW9uSUQsIE9wdGlvblNl
dDxXZWJzaXRlRGF0YVR5cGU+LCBGdW5jdGlvbjx2b2lkKFdlYnNpdGVEYXRhKT4gY29tcGxldGlv
bkhhbmRsZXIpOwogICAgIHZvaWQgZGVsZXRlV2Vic2l0ZURhdGEoV2ViQ29yZTo6U2Vzc2lvbklE
LCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6
dGltZV9wb2ludCBtb2RpZmllZFNpbmNlLCBGdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25IYW5k
bGVyKTsKICAgICB2b2lkIGRlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyhXZWJDb3JlOjpTZXNz
aW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6
U2VjdXJpdHlPcmlnaW5EYXRhPiYsIEZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkhhbmRsZXIp
OworICAgIHN0YXRpYyB2b2lkIGRlbGV0ZVdlYnNpdGVEYXRhRm9yVG9wUHJpdmF0ZWx5T3duZWRE
b21haW5zSW5BbGxQZXJzaXN0ZW50RGF0YVN0b3JlcyhPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBl
PiwgVmVjdG9yPFN0cmluZz4mIHRvcFByaXZhdGVseU93bmVkRG9tYWlucywgYm9vbCBzaG91bGRO
b3RpZnlQYWdlcywgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25IYW5kbGVyKTsKIAog
ICAgIHZvaWQgZW5hYmxlU3VkZGVuVGVybWluYXRpb24oKTsKICAgICB2b2lkIGRpc2FibGVTdWRk
ZW5UZXJtaW5hdGlvbigpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01hbmFnZXIuaCIKKworI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9h
ZE9ic2VydmVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9VUkwuaD4KKwordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit2b2lkIFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NNYW5hZ2VyOjpzZXRQcmV2YWxlbnRSZXNvdXJjZShTdHJpbmcgaG9zdE5hbWUsIGJv
b2wgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlKQorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5zZXRQcmV2YWxlbnRSZXNvdXJjZShVUkwoVVJM
KCksIGhvc3ROYW1lKSk7CisgICAgZWxzZQorICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5jbGVhclByZXZhbGVudFJlc291cmNlKFVSTChVUkwo
KSwgaG9zdE5hbWUpKTsKK30KKworYm9vbCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdl
cjo6aXNQcmV2YWxlbnRSZXNvdXJjZShTdHJpbmcgaG9zdE5hbWUpCit7CisgICAgcmV0dXJuIFdl
YkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWRPYnNlcnZlcigpLmlzUHJldmFsZW50
UmVzb3VyY2UoVVJMKFVSTCgpLCBob3N0TmFtZSkpOworfQorICAgIAordm9pZCBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6c2V0SGFzSGFkVXNlckludGVyYWN0aW9uKFN0cmluZyBo
b3N0TmFtZSwgYm9vbCB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUpCisgICAgICAgIFdlYkNvcmU6
OlJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWRPYnNlcnZlcigpLmxvZ1VzZXJJbnRlcmFjdGlv
bihVUkwoVVJMKCksIGhvc3ROYW1lKSk7CisgICAgZWxzZQorICAgICAgICBXZWJDb3JlOjpSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5jbGVhclVzZXJJbnRlcmFjdGlvbihV
UkwoVVJMKCksIGhvc3ROYW1lKSk7Cit9CisKK2Jvb2wgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01hbmFnZXI6Omhhc0hhZFVzZXJJbnRlcmFjdGlvbihTdHJpbmcgaG9zdE5hbWUpCit7CisgICAg
cmV0dXJuIFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWRPYnNlcnZlcigpLmhh
c0hhZFVzZXJJbnRlcmFjdGlvbihVUkwoVVJMKCksIGhvc3ROYW1lKSk7Cit9CisKK3ZvaWQgV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rp
b24oZG91YmxlIHNlY29uZHMpCit7CisgICAgV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZE9ic2VydmVyKCkuc2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihzZWNvbmRzKTsK
K30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6ZmlyZURhdGFNb2Rp
ZmljYXRpb25IYW5kbGVyKCkKK3sKKyAgICBXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
c2hhcmVkT2JzZXJ2ZXIoKS5maXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKK30KKwordm9p
ZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6c2V0Tm90aWZ5UGFnZXNXaGVuRGF0
YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVlKQoreworICAgIFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCh2
YWx1ZSk7Cit9CisKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNldFNo
b3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wgdmFsdWUp
Cit7CisgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTaG91bGRDbGFzc2lm
eVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCh2YWx1ZSk7Cit9CisKK3ZvaWQgV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNldE1pbmltdW1UaW1lQmV0d2VlZW5EYXRh
UmVjb3Jkc1JlbW92YWwoZG91YmxlIHNlY29uZHMpCit7CisgICAgV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZWVuRGF0YVJlY29yZHNSZW1vdmFsKHNl
Y29uZHMpOworfQorCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpyZXNl
dFRvQ29uc2lzdGVudFN0YXRlKCkKK3sKKyAgICBXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6c2hhcmVkT2JzZXJ2ZXIoKS5zZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKDI1OTIwMDAp
OworICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVu
RGF0YVJlY29yZHNXZXJlU2Nhbm5lZChmYWxzZSk7CisgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVt
b3ZhbCh0cnVlKTsKKyAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldE1pbmlt
dW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92YWwoNjApOworICAgIGF1dG8gc3RvcmUgPSBX
ZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5zdGF0aXN0aWNz
U3RvcmUoKTsKKyAgICBpZiAoc3RvcmUpCisgICAgICAgIHN0b3JlLT5jbGVhcigpOworfQorICAg
IAorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBUElPYmplY3QuaCIKKworI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyIDog
cHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6V2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01hbmFnZXI+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NNYW5hZ2VyPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIoKSk7CisgICAgfQor
ICAgIHN0YXRpYyB2b2lkIHNldFByZXZhbGVudFJlc291cmNlKFN0cmluZyBob3N0TmFtZSwgYm9v
bCB2YWx1ZSk7CisgICAgc3RhdGljIGJvb2wgaXNQcmV2YWxlbnRSZXNvdXJjZShTdHJpbmcgaG9z
dE5hbWUpOworICAgIHN0YXRpYyB2b2lkIHNldEhhc0hhZFVzZXJJbnRlcmFjdGlvbihTdHJpbmcg
aG9zdE5hbWUsIGJvb2wgdmFsdWUpOworICAgIHN0YXRpYyBib29sIGhhc0hhZFVzZXJJbnRlcmFj
dGlvbihTdHJpbmcgaG9zdE5hbWUpOworICAgIHN0YXRpYyB2b2lkIHNldFRpbWVUb0xpdmVVc2Vy
SW50ZXJhY3Rpb24oZG91YmxlIHNlY29uZHMpOworICAgIHN0YXRpYyB2b2lkIHNldFJlZHVjZWRU
aW1lc3RhbXBSZXNvbHV0aW9uKGRvdWJsZSBzZWNvbmRzKTsKKyAgICBzdGF0aWMgdm9pZCBmaXJl
RGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKKyAgICBzdGF0aWMgdm9pZCBzZXROb3RpZnlQYWdl
c1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wpOworICAgIHN0YXRpYyB2b2lkIHNldFNo
b3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wgdmFsdWUp
OworICAgIHN0YXRpYyB2b2lkIHNldE1pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92
YWwoZG91YmxlIHNlY29uZHMpOworICAgIHN0YXRpYyB2b2lkIHJlc2V0VG9Db25zaXN0ZW50U3Rh
dGUoKTsKKworcHJpdmF0ZToKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5jcHAJKHJldmlzaW9uIDIxMTkzMSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw5ICsyNiw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgiCiAKLSNpbmNsdWRlICJBUElXZWJzaXRlRGF0YVN0
b3JlLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUHJv
Y2Vzc1Bvb2wuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmVNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYnNpdGVE
YXRhRmV0Y2hPcHRpb24uaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YVR5cGUuaCIKQEAgLTQ1LDkg
KzQ1LDExIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IAotc3RhdGljIGNvbnN0IGF1dG8gbnVtYmVyT2ZTZWNvbmRzQmV0d2VlblJlbW92aW5nRGF0YVJl
Y29yZHMgPSA2MDsKIHN0YXRpYyBjb25zdCBhdXRvIGZlYXR1cmVWZWN0b3JMZW5ndGhUaHJlc2hv
bGQgPSAzOworc3RhdGljIGF1dG8gbWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3Zh
bCA9IDYwOwogc3RhdGljIE9wdGlvblNldDxXZWJLaXQ6OldlYnNpdGVEYXRhVHlwZT4gZGF0YVR5
cGVzVG9SZW1vdmU7CitzdGF0aWMgYm9vbCBub3RpZnlQYWdlcyA9IGZhbHNlOworc3RhdGljIGJv
b2wgc2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwgPSB0cnVl
OwogCiBSZWY8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OmNyZWF0ZShjb25zdCBTdHJpbmcmIHJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEaXJlY3RvcnkpCiB7CkBAIC01NSw3ICs1Nyw3IEBAIFJlZjxXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU+IFdlYlIKIH0KIAogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoY29uc3QgU3RyaW5nJiByZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGlyZWN0b3J5KQotICAgIDogbV9yZXNvdXJjZVN0YXRpc3RpY3NTdG9yZShSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNyZWF0ZSgpKQorICAgIDogbV9yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUoUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjcmVhdGUoKSkKICAg
ICAsIG1fc3RhdGlzdGljc1F1ZXVlKFdvcmtRdWV1ZTo6Y3JlYXRlKCJXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUgUHJvY2VzcyBEYXRhIFF1ZXVlIikpCiAgICAgLCBtX3N0b3JhZ2VQYXRo
KHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpCiB7CkBAIC02NSw2ICs2NywyMiBAQCBX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6On5XZWJSZXNvCiB7CiB9CiAKK3ZvaWQgV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jk
c1dlcmVTY2FubmVkKGJvb2wgYWx3YXlzKQoreworICAgIG5vdGlmeVBhZ2VzID0gYWx3YXlzOwor
fQorCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U2hvdWxkQ2xhc3Np
ZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCB2YWx1ZSkKK3sKKyAgICBz
aG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCA9IHZhbHVlOwor
fQorCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0TWluaW11bVRpbWVC
ZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbChkb3VibGUgc2Vjb25kcykKK3sKKyAgICBpZiAoc2Vj
b25kcyA+PSAwKQorICAgICAgICBtaW5pbXVtVGltZUJldHdlZWVuRGF0YVJlY29yZHNSZW1vdmFs
ID0gc2Vjb25kczsKK30KKwogYm9vbCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omhh
c1ByZXZhbGVudFJlc291cmNlQ2hhcmFjdGVyaXN0aWNzKGNvbnN0IFJlc291cmNlTG9hZFN0YXRp
c3RpY3MmIHJlc291cmNlU3RhdGlzdGljKQogewogICAgIGF1dG8gc3VicmVzb3VyY2VVbmRlclRv
cEZyYW1lT3JpZ2luc0NvdW50ID0gcmVzb3VyY2VTdGF0aXN0aWMuc3VicmVzb3VyY2VVbmRlclRv
cEZyYW1lT3JpZ2lucy5zaXplKCk7CkBAIC0xMTEsMTIgKzEyOSw4IEBAIHZvaWQgV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZW0KICAgICAgICAgcmV0dXJuOwogCiAgICAgZG91Ymxl
IG5vdyA9IGN1cnJlbnRUaW1lKCk7Ci0gICAgaWYgKCFtX2xhc3RUaW1lRGF0YVJlY29yZHNXZXJl
UmVtb3ZlZCkgewotICAgICAgICBtX2xhc3RUaW1lRGF0YVJlY29yZHNXZXJlUmVtb3ZlZCA9IG5v
dzsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChub3cgPCAobV9sYXN0VGltZURh
dGFSZWNvcmRzV2VyZVJlbW92ZWQgKyBudW1iZXJPZlNlY29uZHNCZXR3ZWVuUmVtb3ZpbmdEYXRh
UmVjb3JkcykpCisgICAgaWYgKG1fbGFzdFRpbWVEYXRhUmVjb3Jkc1dlcmVSZW1vdmVkCisgICAg
ICAgICYmIG5vdyA8IChtX2xhc3RUaW1lRGF0YVJlY29yZHNXZXJlUmVtb3ZlZCArIG1pbmltdW1U
aW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92YWwpKQogICAgICAgICByZXR1cm47CiAKICAgICBt
X2RhdGFSZWNvcmRzUmVtb3ZhbFBlbmRpbmcgPSB0cnVlOwpAQCAtMTI0LDU5ICsxMzgsNTIgQEAg
dm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlbQogCiAgICAgaWYgKGRhdGFU
eXBlc1RvUmVtb3ZlLmlzRW1wdHkoKSkgewogICAgICAgICBkYXRhVHlwZXNUb1JlbW92ZSB8PSBX
ZWJzaXRlRGF0YVR5cGU6OkNvb2tpZXM7Ci0gICAgICAgIGRhdGFUeXBlc1RvUmVtb3ZlIHw9IFdl
YnNpdGVEYXRhVHlwZTo6TG9jYWxTdG9yYWdlOwotICAgICAgICBkYXRhVHlwZXNUb1JlbW92ZSB8
PSBXZWJzaXRlRGF0YVR5cGU6OkluZGV4ZWREQkRhdGFiYXNlczsKICAgICAgICAgZGF0YVR5cGVz
VG9SZW1vdmUgfD0gV2Vic2l0ZURhdGFUeXBlOjpEaXNrQ2FjaGU7CiAgICAgICAgIGRhdGFUeXBl
c1RvUmVtb3ZlIHw9IFdlYnNpdGVEYXRhVHlwZTo6TWVtb3J5Q2FjaGU7CisgICAgICAgIGRhdGFU
eXBlc1RvUmVtb3ZlIHw9IFdlYnNpdGVEYXRhVHlwZTo6T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2Fj
aGU7CisgICAgICAgIGRhdGFUeXBlc1RvUmVtb3ZlIHw9IFdlYnNpdGVEYXRhVHlwZTo6U2Vzc2lv
blN0b3JhZ2U7CisgICAgICAgIGRhdGFUeXBlc1RvUmVtb3ZlIHw9IFdlYnNpdGVEYXRhVHlwZTo6
TG9jYWxTdG9yYWdlOworICAgICAgICBkYXRhVHlwZXNUb1JlbW92ZSB8PSBXZWJzaXRlRGF0YVR5
cGU6OldlYlNRTERhdGFiYXNlczsKKyAgICAgICAgZGF0YVR5cGVzVG9SZW1vdmUgfD0gV2Vic2l0
ZURhdGFUeXBlOjpJbmRleGVkREJEYXRhYmFzZXM7CisgICAgICAgIGRhdGFUeXBlc1RvUmVtb3Zl
IHw9IFdlYnNpdGVEYXRhVHlwZTo6TWVkaWFLZXlzOworICAgICAgICBkYXRhVHlwZXNUb1JlbW92
ZSB8PSBXZWJzaXRlRGF0YVR5cGU6OkhTVFNDYWNoZTsKKyAgICAgICAgZGF0YVR5cGVzVG9SZW1v
dmUgfD0gV2Vic2l0ZURhdGFUeXBlOjpTZWFyY2hGaWVsZFJlY2VudFNlYXJjaGVzOworI2lmIEVO
QUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgICAgICBkYXRhVHlwZXNUb1JlbW92ZSB8PSBX
ZWJzaXRlRGF0YVR5cGU6OlBsdWdJbkRhdGE7CisjZW5kaWYKKyNpZiBFTkFCTEUoTUVESUFfU1RS
RUFNKQorICAgICAgICBkYXRhVHlwZXNUb1JlbW92ZSB8PSBXZWJzaXRlRGF0YVR5cGU6Ok1lZGlh
RGV2aWNlSWRlbnRpZmllcjsKKyNlbmRpZgogICAgIH0KIAogICAgIC8vIFN3aXRjaCB0byB0aGUg
bWFpbiB0aHJlYWQgdG8gZ2V0IHRoZSBkZWZhdWx0IHdlYnNpdGUgZGF0YSBzdG9yZQogICAgIFJ1
bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJldmFsZW50UmVzb3VyY2VEb21haW5zID0gV1RGTW92
ZShwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMpLCB0aGlzXSAoKSBtdXRhYmxlIHsKLSAgICAgICAg
YXV0byYgd2Vic2l0ZURhdGFTdG9yZSA9IEFQSTo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERh
dGFTdG9yZSgpLT53ZWJzaXRlRGF0YVN0b3JlKCk7Ci0KLSAgICAgICAgd2Vic2l0ZURhdGFTdG9y
ZS5mZXRjaERhdGEoZGF0YVR5cGVzVG9SZW1vdmUsIHsgfSwgW3ByZXZhbGVudFJlc291cmNlRG9t
YWlucyA9IFdURk1vdmUocHJldmFsZW50UmVzb3VyY2VEb21haW5zKSwgdGhpc10oYXV0byB3ZWJz
aXRlRGF0YVJlY29yZHMpIHsKLSAgICAgICAgICAgIFZlY3RvcjxXZWJzaXRlRGF0YVJlY29yZD4g
ZGF0YVJlY29yZHM7Ci0gICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBwcmV2YWxlbnRSZXNvdXJj
ZURvbWFpbnNXaXRoRGF0YVJlY29yZHM7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIHdlYnNpdGVE
YXRhUmVjb3JkIDogd2Vic2l0ZURhdGFSZWNvcmRzKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChh
dXRvJiBwcmV2YWxlbnRSZXNvdXJjZURvbWFpbiA6IHByZXZhbGVudFJlc291cmNlRG9tYWlucykg
ewotICAgICAgICAgICAgICAgICAgICBpZiAod2Vic2l0ZURhdGFSZWNvcmQuZGlzcGxheU5hbWUu
ZW5kc1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZShwcmV2YWxlbnRSZXNvdXJjZURvbWFpbikpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGF1dG8gc3VmZml4U3RhcnQgPSB3ZWJzaXRlRGF0YVJlY29y
ZC5kaXNwbGF5TmFtZS5sZW5ndGgoKSAtIHByZXZhbGVudFJlc291cmNlRG9tYWluLmxlbmd0aCgp
OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdWZmaXhTdGFydCB8fCB3ZWJzaXRlRGF0
YVJlY29yZC5kaXNwbGF5TmFtZVtzdWZmaXhTdGFydCAtIDFdID09ICcuJykgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGFSZWNvcmRzLmFwcGVuZCh3ZWJzaXRlRGF0YVJlY29yZCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmFsZW50UmVzb3VyY2VEb21haW5zV2l0
aERhdGFSZWNvcmRzLmFwcGVuZChwcmV2YWxlbnRSZXNvdXJjZURvbWFpbik7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghZGF0YVJlY29yZHMuc2l6ZSgpKSB7
Ci0gICAgICAgICAgICAgICAgbV9kYXRhUmVjb3Jkc1JlbW92YWxQZW5kaW5nID0gZmFsc2U7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBhdXRv
JiB3ZWJzaXRlRGF0YVN0b3JlID0gQVBJOjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0
b3JlKCktPndlYnNpdGVEYXRhU3RvcmUoKTsKLSAgICAgICAgICAgIHdlYnNpdGVEYXRhU3RvcmUu
cmVtb3ZlRGF0YShkYXRhVHlwZXNUb1JlbW92ZSwgZGF0YVJlY29yZHMsIFtwcmV2YWxlbnRSZXNv
dXJjZURvbWFpbnNXaXRoRGF0YVJlY29yZHMgPSBXVEZNb3ZlKHByZXZhbGVudFJlc291cmNlRG9t
YWluc1dpdGhEYXRhUmVjb3JkcyksIHRoaXNdIHsKLSAgICAgICAgICAgICAgICB0aGlzLT5jb3Jl
U3RvcmUoKS51cGRhdGVTdGF0aXN0aWNzRm9yUmVtb3ZlZERhdGFSZWNvcmRzKHByZXZhbGVudFJl
c291cmNlRG9tYWluc1dpdGhEYXRhUmVjb3Jkcyk7Ci0gICAgICAgICAgICAgICAgbV9kYXRhUmVj
b3Jkc1JlbW92YWxQZW5kaW5nID0gZmFsc2U7Ci0gICAgICAgICAgICB9KTsKKyAgICAgICAgV2Vi
UHJvY2Vzc1Byb3h5OjpkZWxldGVXZWJzaXRlRGF0YUZvclRvcFByaXZhdGVseU93bmVkRG9tYWlu
c0luQWxsUGVyc2lzdGVudERhdGFTdG9yZXMoZGF0YVR5cGVzVG9SZW1vdmUsIHByZXZhbGVudFJl
c291cmNlRG9tYWlucywgbm90aWZ5UGFnZXMsIFt0aGlzXSgpIG11dGFibGUgeworICAgICAgICAg
ICAgbV9kYXRhUmVjb3Jkc1JlbW92YWxQZW5kaW5nID0gZmFsc2U7CiAgICAgICAgIH0pOwogICAg
IH0pOwogfQogCi12b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVzb3VyY2VM
b2FkU3RhdGlzdGljc1VwZGF0ZWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3M+JiBvcmlnaW5zKQordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OnByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMoKQogewotICAgIGNvcmVTdG9yZSgpLm1l
cmdlU3RhdGlzdGljcyhvcmlnaW5zKTsKLQotICAgIGNvcmVTdG9yZSgpLnByb2Nlc3NTdGF0aXN0
aWNzKFt0aGlzXSAoUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0aXN0aWMpIHsK
LSAgICAgICAgY2xhc3NpZnlSZXNvdXJjZShyZXNvdXJjZVN0YXRpc3RpYyk7Ci0gICAgICAgIHJl
bW92ZURhdGFSZWNvcmRzKCk7Ci0gICAgfSk7CisgICAgaWYgKHNob3VsZENsYXNzaWZ5UmVzb3Vy
Y2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKSB7CisgICAgICAgIGNvcmVTdG9yZSgpLnByb2Nl
c3NTdGF0aXN0aWNzKFt0aGlzXSAoUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0
aXN0aWMpIHsKKyAgICAgICAgICAgIGNsYXNzaWZ5UmVzb3VyY2UocmVzb3VyY2VTdGF0aXN0aWMp
OworICAgICAgICB9KTsKKyAgICB9CisgICAgcmVtb3ZlRGF0YVJlY29yZHMoKTsKICAgICAKICAg
ICBhdXRvIGVuY29kZXIgPSBjb3JlU3RvcmUoKS5jcmVhdGVFbmNvZGVyRnJvbURhdGEoKTsKICAg
ICAKICAgICB3cml0ZUVuY29kZXJUb0Rpc2soKmVuY29kZXIuZ2V0KCksICJmdWxsX2Jyb3dzaW5n
X3Nlc3Npb24iKTsKIH0KIAordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJl
c291cmNlTG9hZFN0YXRpc3RpY3NVcGRhdGVkKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzPiYgb3JpZ2lucykKK3sKKyAgICBjb3JlU3RvcmUoKS5tZXJnZVN0YXRp
c3RpY3Mob3JpZ2lucyk7CisgICAgcHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3JkcygpOwor
fQorCiB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0VuYWJsZWQoYm9vbCBlbmFibGVkKQogewogICAgIGlmIChlbmFibGVkID09IG1f
cmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQpCkBAIC0xOTIsOSArMTk5LDE1IEBAIGJvb2wg
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXMKICAgICByZXR1cm4gbV9yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRW5hYmxlZDsKIH0KIAorCiB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6cmVnaXN0ZXJTaGFyZWRSZXNvdXJjZUxvYWRPYnNlcnZlcigpCiB7Ci0gICAg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZE9ic2VydmVyKCkuc2V0U3RhdGlzdGljc1N0b3Jl
KG1fcmVzb3VyY2VTdGF0aXN0aWNzU3RvcmUuY29weVJlZigpKTsKKyAgICBSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5zZXRTdGF0aXN0aWNzU3RvcmUobV9yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUuY29weVJlZigpKTsKKyAgICBtX3Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZS0+c2V0Tm90aWZpY2F0aW9uQ2FsbGJhY2soW3RoaXNdIHsKKyAgICAgICAgaWYgKG1f
cmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLT5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIHByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMoKTsKKyAgICB9KTsK
IH0KIAogdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlYWREYXRhRnJvbURp
c2tJZk5lZWRlZCgpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCShyZXZpc2lvbiAyMTE5MzEpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDkgQEAgY2xhc3MgV2ViUHJvY2Vzc1Byb3h5
OwogY2xhc3MgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlIDogcHVibGljIElQQzo6Q29u
bmVjdGlvbjo6V29ya1F1ZXVlTWVzc2FnZVJlY2VpdmVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
UmVmPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4gY3JlYXRlKGNvbnN0IFN0cmluZyYp
OworICAgIHN0YXRpYyB2b2lkIHNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5u
ZWQoYm9vbCk7CisgICAgc3RhdGljIHZvaWQgc2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZv
cmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCk7CisgICAgc3RhdGljIHZvaWQgc2V0TWluaW11bVRp
bWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbChkb3VibGUpOwogICAgIHZpcnR1YWwgfldlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSgpOwogICAgIAogICAgIHZvaWQgc2V0UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0VuYWJsZWQoYm9vbCk7CkBAIC02NSwxNCArNjgsMTQgQEAgcHVibGljOgog
CiAgICAgdm9pZCByZWFkRGF0YUZyb21EaXNrSWZOZWVkZWQoKTsKIAotICAgIHZvaWQgbWVyZ2VT
dGF0aXN0aWNzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiYp
OwotCi0gICAgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJiBjb3JlU3RvcmUo
KSB7IHJldHVybiBtX3Jlc291cmNlU3RhdGlzdGljc1N0b3JlLmdldCgpOyB9Ci0gICAgY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJiBjb3JlU3RvcmUoKSBjb25zdCB7
IHJldHVybiBtX3Jlc291cmNlU3RhdGlzdGljc1N0b3JlLmdldCgpOyB9CisgICAgV2ViQ29yZTo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJiBjb3JlU3RvcmUoKSB7IHJldHVybiBtX3Jlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5nZXQoKTsgfQorICAgIGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSYgY29yZVN0b3JlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuZ2V0KCk7IH0KIAogcHJpdmF0ZToKICAgICBleHBsaWNp
dCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoY29uc3QgU3RyaW5nJik7CiAKKyAgICB2
b2lkIHByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMoKTsKKwogICAgIGJvb2wgaGFzUHJl
dmFsZW50UmVzb3VyY2VDaGFyYWN0ZXJpc3RpY3MoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljcyYpOwogICAgIHZvaWQgY2xhc3NpZnlSZXNvdXJjZShXZWJDb3JlOjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzJik7CiAgICAgdm9pZCByZW1vdmVEYXRhUmVjb3JkcygpOwpAQCAtODUs
NyArODgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgd3JpdGVFbmNvZGVyVG9EaXNrKFdlYkNvcmU6
OktleWVkRW5jb2RlciYsIGNvbnN0IFN0cmluZyYgbGFiZWwpIGNvbnN0OwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxXZWJDb3JlOjpLZXllZERlY29kZXI+IGNyZWF0ZURlY29kZXJGcm9tRGlzayhjb25z
dCBTdHJpbmcmIGxhYmVsKSBjb25zdDsKIAotICAgIFJlZjxXZWJDb3JlOjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU+IG1fcmVzb3VyY2VTdGF0aXN0aWNzU3RvcmU7CisgICAgUmVmPFdlYkNv
cmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4gbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU7CiAgICAgUmVmPFdURjo6V29ya1F1ZXVlPiBtX3N0YXRpc3RpY3NRdWV1ZTsKICAgICBT
dHJpbmcgbV9zdG9yYWdlUGF0aDsKICAgICBib29sIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0Vu
YWJsZWQgeyBmYWxzZSB9OwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dL
QVBJQ2FzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9X
S0FQSUNhc3QuaAkocmV2aXNpb24gMjExOTMxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9DL1dLQVBJQ2FzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xMDcsNiArMTA3
LDcgQEAgY2xhc3MgV2ViUHJvY2Vzc1Bvb2w7CiBjbGFzcyBXZWJQcm90ZWN0aW9uU3BhY2U7CiBj
bGFzcyBXZWJSZW5kZXJMYXllcjsKIGNsYXNzIFdlYlJlbmRlck9iamVjdDsKK2NsYXNzIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOwogY2xhc3MgV2ViVGV4dENoZWNrZXI7CiBjbGFz
cyBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTsKIGNsYXNzIFdlYlZpYnJhdGlvblByb3h5
OwpAQCAtMTU2LDYgKzE1Nyw3IEBAIFdLX0FERF9BUElfTUFQUElORyhXS1ByZWZlcmVuY2VzUmVm
LCBXZWIKIFdLX0FERF9BUElfTUFQUElORyhXS1Byb3RlY3Rpb25TcGFjZVJlZiwgV2ViUHJvdGVj
dGlvblNwYWNlKQogV0tfQUREX0FQSV9NQVBQSU5HKFdLUmVuZGVyTGF5ZXJSZWYsIFdlYlJlbmRl
ckxheWVyKQogV0tfQUREX0FQSV9NQVBQSU5HKFdLUmVuZGVyT2JqZWN0UmVmLCBXZWJSZW5kZXJP
YmplY3QpCitXS19BRERfQVBJX01BUFBJTkcoV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdl
clJlZiwgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIpCiBXS19BRERfQVBJX01BUFBJ
TkcoV0tTZXNzaW9uU3RhdGVSZWYsIEFQSTo6U2Vzc2lvblN0YXRlKQogV0tfQUREX0FQSV9NQVBQ
SU5HKFdLVGV4dENoZWNrZXJSZWYsIFdlYlRleHRDaGVja2VyKQogV0tfQUREX0FQSV9NQVBQSU5H
KFdLVXNlckNvbnRlbnRDb250cm9sbGVyUmVmLCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94
eSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0MvV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0tSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWFuYWdlci5oIgorCisjaW5jbHVkZSAiV0tBUElDYXN0LmgiCisjaW5jbHVkZSAiV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsK
KworV0tUeXBlSUQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlckdldFR5cGVJRCgpCit7
CisgICAgcmV0dXJuIHRvQVBJKFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpBUElU
eXBlKTsKK30KKwordm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0UHJldmFs
ZW50UmVzb3VyY2UoU3RyaW5nIGhvc3ROYW1lLCBib29sIHZhbHVlKQoreworICAgIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXRQcmV2YWxlbnRSZXNvdXJjZShob3N0TmFtZSwg
dmFsdWUpOworfQorCitib29sIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJJc1ByZXZh
bGVudFJlc291cmNlKFN0cmluZyBob3N0TmFtZSkKK3sKKyAgICByZXR1cm4gV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01hbmFnZXI6OmlzUHJldmFsZW50UmVzb3VyY2UoaG9zdE5hbWUpOworfQor
Cit2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXRIYXNIYWRVc2VySW50ZXJh
Y3Rpb24oU3RyaW5nIGhvc3ROYW1lLCBib29sIHZhbHVlKQoreworICAgIFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXRIYXNIYWRVc2VySW50ZXJhY3Rpb24oaG9zdE5hbWUsIHZh
bHVlKTsKK30KKworYm9vbCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VySXNIYXNIYWRV
c2VySW50ZXJhY3Rpb24oU3RyaW5nIGhvc3ROYW1lKQoreworICAgIHJldHVybiBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6aGFzSGFkVXNlckludGVyYWN0aW9uKGhvc3ROYW1lKTsK
K30KKwordm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0VGltZVRvTGl2ZVVz
ZXJJbnRlcmFjdGlvbihkb3VibGUgc2Vjb25kcykKK3sKKyAgICBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWFuYWdlcjo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihzZWNvbmRzKTsKK30K
Kwordm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyRmlyZURhdGFNb2RpZmljYXRp
b25IYW5kbGVyKCkKK3sKKyAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6Zmly
ZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7Cit9CisKK3ZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWFuYWdlclNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9v
bCB2YWx1ZSkKK3sKKyAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6c2V0Tm90
aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCh2YWx1ZSk7Cit9CisKK3ZvaWQgV0tS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVm
b3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wgdmFsdWUpCit7CisgICAgV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01hbmFnZXI6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJl
Y29yZHNSZW1vdmFsKHZhbHVlKTsKK30KKwordm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NN
YW5hZ2VyU2V0TWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbChkb3VibGUgc2Vj
b25kcykKK3sKKyAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6c2V0TWluaW11
bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbChzZWNvbmRzKTsKK30KKwordm9pZCBXS1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSgpCit7Cisg
ICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnJlc2V0VG9Db25zaXN0ZW50U3Rh
dGUoKTsKK30KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWFuYWdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPFdlYktpdC9XS0Jhc2UuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMi
IHsKKyNlbmRpZgorICAgIAorICAgIFdLX0VYUE9SVCBXS1R5cGVJRCBXS1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NNYW5hZ2VyR2V0VHlwZUlEKCk7CisgICAgCisgICAgV0tfRVhQT1JUIHZvaWQgV0tS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNldFByZXZhbGVudFJlc291cmNlKFN0cmluZyBo
b3N0TmFtZSwgYm9vbCB2YWx1ZSk7CisgICAgV0tfRVhQT1JUIGJvb2wgV0tSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWFuYWdlcklzUHJldmFsZW50UmVzb3VyY2UoU3RyaW5nIGhvc3ROYW1lKTsKKyAg
ICBXS19FWFBPUlQgdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0SGFzSGFk
VXNlckludGVyYWN0aW9uKFN0cmluZyBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7CisgICAgV0tfRVhQ
T1JUIGJvb2wgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcklzSGFzSGFkVXNlckludGVy
YWN0aW9uKFN0cmluZyBob3N0TmFtZSk7CisgICAgV0tfRVhQT1JUIHZvaWQgV0tSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWFuYWdlclNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oZG91YmxlIHNl
Y29uZHMpOworICAgIFdLX0VYUE9SVCB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFn
ZXJTZXRSZWR1Y2VkVGltZXN0YW1wUmVzb2x1dGlvbihkb3VibGUgc2Vjb25kcyk7CisgICAgV0tf
RVhQT1JUIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlckZpcmVEYXRhTW9kaWZp
Y2F0aW9uSGFuZGxlcigpOworICAgIFdLX0VYUE9SVCB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01hbmFnZXJTZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wg
dmFsdWUpOworICAgIFdLX0VYUE9SVCB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFn
ZXJTZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29s
IHZhbHVlKTsKKyAgICBXS19FWFBPUlQgdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5h
Z2VyU2V0TWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbChkb3VibGUgc2Vjb25k
cyk7CisgICAgV0tfRVhQT1JUIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclJl
c2V0VG9Db25zaXN0ZW50U3RhdGUoKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0
b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vic2l0ZURh
dGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAJKHJldmlzaW9uIDIxMTkzMSkKKysrIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDczLDYgKzQ3MywzNSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmZldGNoRGF0
YShPcHRpb25TCiAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5jYWxsSWZOZWVkZWQoKTsKIH0KIAor
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGFGb3JUb3BQcml2YXRlbHlPd25lZERvbWFp
bnMoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gZGF0YVR5cGVzLCBPcHRpb25TZXQ8V2Vic2l0
ZURhdGFGZXRjaE9wdGlvbj4gZmV0Y2hPcHRpb25zLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdG9w
UHJpdmF0ZWx5T3duZWREb21haW5zLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoVmVjdG9yPFdlYnNpdGVE
YXRhUmVjb3JkPik+IGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGZldGNoRGF0YShkYXRhVHlw
ZXMsIGZldGNoT3B0aW9ucywgW3RvcFByaXZhdGVseU93bmVkRG9tYWlucywgY29tcGxldGlvbkhh
bmRsZXIsIHRoaXNdKGF1dG8gZXhpc3RpbmdEYXRhUmVjb3JkcykgeworICAgICAgICBWZWN0b3I8
V2Vic2l0ZURhdGFSZWNvcmQ+IG1hdGNoaW5nRGF0YVJlY29yZHM7CisgICAgICAgIFZlY3RvcjxT
dHJpbmc+IGRvbWFpbnNXaXRoRGF0YVJlY29yZHM7CisgICAgICAgIGZvciAoYXV0byYgZGF0YVJl
Y29yZCA6IGV4aXN0aW5nRGF0YVJlY29yZHMpIHsKKyAgICAgICAgICAgIGJvb2wgZGF0YVJlY29y
ZEFkZGVkOworICAgICAgICAgICAgZm9yIChhdXRvJiBkYXRhUmVjb3JkT3JpZ2luRGF0YSA6IGRh
dGFSZWNvcmQub3JpZ2lucykgeworICAgICAgICAgICAgICAgIGRhdGFSZWNvcmRBZGRlZCA9IGZh
bHNlOworICAgICAgICAgICAgICAgIFN0cmluZyBkYXRhUmVjb3JkSG9zdCA9IGRhdGFSZWNvcmRP
cmlnaW5EYXRhLnNlY3VyaXR5T3JpZ2luKCkuZ2V0KCkuaG9zdCgpOworICAgICAgICAgICAgICAg
IGZvciAoYXV0byYgdG9wUHJpdmF0ZWx5T3duZWREb21haW4gOiB0b3BQcml2YXRlbHlPd25lZERv
bWFpbnMpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFSZWNvcmRIb3N0LmVuZHNXaXRo
SWdub3JpbmdBU0NJSUNhc2UodG9wUHJpdmF0ZWx5T3duZWREb21haW4pKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBhdXRvIHN1ZmZpeFN0YXJ0ID0gZGF0YVJlY29yZEhvc3QubGVuZ3RoKCkg
LSB0b3BQcml2YXRlbHlPd25lZERvbWFpbi5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghc3VmZml4U3RhcnQgfHwgZGF0YVJlY29yZEhvc3Rbc3VmZml4U3RhcnQgLSAxXSA9
PSAnLicpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGluZ0RhdGFSZWNvcmRz
LmFwcGVuZChkYXRhUmVjb3JkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21haW5z
V2l0aERhdGFSZWNvcmRzLmFwcGVuZCh0b3BQcml2YXRlbHlPd25lZERvbWFpbik7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YVJlY29yZEFkZGVkID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAo
ZGF0YVJlY29yZEFkZGVkKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihtYXRjaGluZ0RhdGFSZWNv
cmRzKTsKKyAgICB9KTsKK30KKyAgICAKIHN0YXRpYyBQcm9jZXNzQWNjZXNzVHlwZSBjb21wdXRl
TmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlRm9yRGF0YVJlbW92YWwoT3B0aW9uU2V0PFdlYnNpdGVE
YXRhVHlwZT4gZGF0YVR5cGVzLCBib29sIGlzTm9uUGVyc2lzdGVudFN0b3JlKQogewogICAgIFBy
b2Nlc3NBY2Nlc3NUeXBlIHByb2Nlc3NBY2Nlc3NUeXBlID0gUHJvY2Vzc0FjY2Vzc1R5cGU6Ok5v
bmU7CkBAIC05OTgsNiArMTAyNywxNSBAQCB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURh
dGEoT3B0aW9uCiAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5jYWxsSWZOZWVkZWQoKTsKIH0KIAor
dm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhRm9yVG9wUHJpdmF0ZWx5T3duZWREb21h
aW5zKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgT3B0aW9uU2V0PFdlYnNp
dGVEYXRhRmV0Y2hPcHRpb24+IGZldGNoT3B0aW9ucywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHRv
cFByaXZhdGVseU93bmVkRG9tYWlucywgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25I
YW5kbGVyKQoreworICAgIGZldGNoRGF0YUZvclRvcFByaXZhdGVseU93bmVkRG9tYWlucyhkYXRh
VHlwZXMsIGZldGNoT3B0aW9ucywgdG9wUHJpdmF0ZWx5T3duZWREb21haW5zLCBbZGF0YVR5cGVz
LCBjb21wbGV0aW9uSGFuZGxlciwgdGhpc10oYXV0byB3ZWJzaXRlRGF0YVJlY29yZHMpIHsKKyAg
ICAgICAgdGhpcy0+cmVtb3ZlRGF0YShkYXRhVHlwZXMsIHdlYnNpdGVEYXRhUmVjb3JkcywgW2Nv
bXBsZXRpb25IYW5kbGVyXSgpIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Cisg
ICAgICAgIH0pOworICAgIH0pOworfQorCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OndlYlBhZ2VX
YXNBZGRlZChXZWJQYWdlUHJveHkmIHdlYlBhZ2VQcm94eSkKIHsKICAgICBpZiAobV9zdG9yYWdl
TWFuYWdlcikKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJz
aXRlRGF0YVN0b3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAkocmV2aXNpb24gMjExOTMxKQorKysgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODQsOCArODQsMTAgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGNsb25l
U2Vzc2lvbkRhdGEoV2ViUGFnZVByb3h5JiBzb3VyY2VQYWdlLCBXZWJQYWdlUHJveHkmIG5ld1Bh
Z2UpOwogCiAgICAgdm9pZCBmZXRjaERhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIE9w
dGlvblNldDxXZWJzaXRlRGF0YUZldGNoT3B0aW9uPiwgc3RkOjpmdW5jdGlvbjx2b2lkIChWZWN0
b3I8V2Vic2l0ZURhdGFSZWNvcmQ+KT4gY29tcGxldGlvbkhhbmRsZXIpOworICAgIHZvaWQgZmV0
Y2hEYXRhRm9yVG9wUHJpdmF0ZWx5T3duZWREb21haW5zKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5
cGU+LCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4sIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiB0b3BQcml2YXRlbHlPd25lZERvbWFpbnMsIHN0ZDo6ZnVuY3Rpb248dm9pZChWZWN0b3I8
V2Vic2l0ZURhdGFSZWNvcmQ+KT4gY29tcGxldGlvbkhhbmRsZXIpOwogICAgIHZvaWQgcmVtb3Zl
RGF0YShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9j
azo6dGltZV9wb2ludCBtb2RpZmllZFNpbmNlLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGNvbXBs
ZXRpb25IYW5kbGVyKTsKICAgICB2b2lkIHJlbW92ZURhdGEoT3B0aW9uU2V0PFdlYnNpdGVEYXRh
VHlwZT4sIGNvbnN0IFZlY3RvcjxXZWJzaXRlRGF0YVJlY29yZD4mLCBzdGQ6OmZ1bmN0aW9uPHZv
aWQgKCk+IGNvbXBsZXRpb25IYW5kbGVyKTsKKyAgICB2b2lkIHJlbW92ZURhdGFGb3JUb3BQcml2
YXRlbHlPd25lZERvbWFpbnMoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIE9wdGlvblNldDxX
ZWJzaXRlRGF0YUZldGNoT3B0aW9uPiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHRvcFByaXZhdGVs
eU93bmVkRG9tYWlucywgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25IYW5kbGVyKTsK
IAogICAgIFN0b3JhZ2VNYW5hZ2VyKiBzdG9yYWdlTWFuYWdlcigpIHsgcmV0dXJuIG1fc3RvcmFn
ZU1hbmFnZXIuZ2V0KCk7IH0KIApJbmRleDogU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjExOTMxKQorKysgU291cmNlL1dl
YktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTQ2LDYgKzExNDYsMTAgQEAKIAkJNjUwMUJEMUExMkYxMjQzNDAwRTlGMjQ4IC8qIFdLQnVu
ZGxlSW5zcGVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDY1Qjg2RjE3MTJGMTFEN0IwMEI3REQ4QSAvKiBXS0J1bmRsZUluc3BlY3Rvci5jcHAg
Ki87IH07CiAJCTY1OUM1NTFFMTMwMDA2NDEwMDI1QzBDMiAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VS
ZXNvdXJjZUxvYWRDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNjU0NkE4MjkxMzAwMDE2NDAwMENFQjFDIC8qIEluamVjdGVkQnVuZGxlUGFn
ZVJlc291cmNlTG9hZENsaWVudC5jcHAgKi87IH07CiAJCTY1Qjg2RjFFMTJGMTFERTMwMEI3REQ4
QSAvKiBXS0J1bmRsZUluc3BlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNjVCODZGMTgxMkYxMUQ3QjAwQjdERDhBIC8qIFdLQnVuZGxlSW5zcGVj
dG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
NkJFOTY5OUMxRTQzQjNGRjAwOEI3NDgzIC8qIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFn
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZCRTk2
OTlCMUU0M0IzRkYwMDhCNzQ4MyAvKiBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNkJFOTY5
OUUxRTQzQjQxRDAwOEI3NDgzIC8qIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkJFOTY5OUQx
RTQzQjQxRDAwOEI3NDgzIC8qIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwICov
OyB9OworCQk2QkU5NjlBMDFFNDNCODZFMDA4Qjc0ODMgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDZCRTk2OTlGMUU0M0I4NkUwMDhCNzQ4MyAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWFuYWdlci5oICovOyB9OworCQk2QkU5NjlBMjFFNDNCOEE0MDA4Qjc0ODMgLyogV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNkJFOTY5QTExRTQzQjhBNDAwOEI3NDgzIC8qIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcCAqLzsgfTsKIAkJNkVFODQ5QzgxMzY4RDkzOTAwMzhE
NDgxIC8qIFdLSW5zcGVjdG9yUHJpdmF0ZU1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNkVFODQ5QzYxMzY4RDkyRDAwMzhENDgxIC8qIFdLSW5zcGVj
dG9yUHJpdmF0ZU1hYy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTcyOEU4NkYxMTc5NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBpY2tlck1hYy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI4RTg2RUYx
Nzk1MTg4QzAwODc4NzlFIC8qIFdlYkNvbG9yUGlja2VyTWFjLmggKi87IH07CiAJCTcyOEU4NkYy
MTc5NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBpY2tlck1hYy5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyOEU4NkYwMTc5NTE4OEMwMDg3ODc5RSAv
KiBXZWJDb2xvclBpY2tlck1hYy5tbSAqLzsgfTsKQEAgLTMzMjksNiArMzMzMywxMCBAQAogCQk2
NTQ2QTgyQTEzMDAwMTY0MDAwQ0VCMUMgLyogSW5qZWN0ZWRCdW5kbGVQYWdlUmVzb3VyY2VMb2Fk
Q2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluamVjdGVkQnVuZGxl
UGFnZVJlc291cmNlTG9hZENsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2
NUI4NkYxNzEyRjExRDdCMDBCN0REOEEgLyogV0tCdW5kbGVJbnNwZWN0b3IuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0tCdW5kbGVJbnNwZWN0b3IuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NUI4NkYxODEyRjExRDdCMDBCN0REOEEgLyogV0tC
dW5kbGVJbnNwZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tCdW5k
bGVJbnNwZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkJFOTY5OUIxRTQz
QjNGRjAwOEI3NDgzIC8qIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2QkU5Njk5RDFFNDNCNDFEMDA4Qjc0
ODMgLyogV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkJFOTY5OUYxRTQzQjg2RTAwOEI3NDgz
IC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZCRTk2OUExMUU0M0I4QTQwMDhCNzQ4MyAvKiBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZEOEE5MUE1MTFGMEVGRDEwMEREMDFGRSAvKiBjb20u
YXBwbGUuV2ViUHJvY2Vzcy5zYi5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBjb20uYXBwbGUu
V2ViUHJvY2Vzcy5zYi5pbjsgcGF0aCA9IFdlYlByb2Nlc3MvY29tLmFwcGxlLldlYlByb2Nlc3Mu
c2IuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFRTg0OUM2MTM2OEQ5MkQwMDM4
RDQ4MSAvKiBXS0luc3BlY3RvclByaXZhdGVNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gV0tJbnNwZWN0b3JQcml2YXRlTWFjLmg7IHBhdGggPSBtYWMvV0tJbnNwZWN0b3JQ
cml2YXRlTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyOEU4NkVGMTc5NTE4
OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBpY2tlck1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJDb2xvclBpY2tlck1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtNjUzNCw2ICs2NTQyLDggQEAKIAkJCQlCQzExMUIwRDExMkY1RTRGMDAzMzdCQUIgLyog
V2ViUHJvY2Vzc1Byb3h5LmNwcCAqLywKIAkJCQlCQzAzMkRDRjEwRjQzODlGMDA1OEMxNUEgLyog
V2ViUHJvY2Vzc1Byb3h5LmggKi8sCiAJCQkJQkNFRTdBQjMxMjgxNzA5NTAwOTgyN0RBIC8qIFdl
YlByb2Nlc3NQcm94eS5tZXNzYWdlcy5pbiAqLywKKwkJCQk2QkU5Njk5RjFFNDNCODZFMDA4Qjc0
ODMgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaCAqLywKKwkJCQk2QkU5NjlB
MTFFNDNCOEE0MDA4Qjc0ODMgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3Bw
ICovLAogCQkJCTdBOUNEOEMwMUM3Nzk4NDkwMEQ5RjZDNyAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmUuY3BwICovLAogCQkJCTdBOUNEOEMxMUM3Nzk4NDkwMEQ5RjZDNyAvKiBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCAqLywKIAkJCQk3QTlDRDhDMjFDNzc5QUQ2MDBE
OUY2QzcgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLm1lc3NhZ2VzLmluICovLApA
QCAtNjcyMiw2ICs2NzMyLDggQEAKIAkJCQk1MThBQ0FFOTEyQUVFNkJCMDBCMDRCODMgLyogV0tQ
cm90ZWN0aW9uU3BhY2VUeXBlcy5oICovLAogCQkJCTMzMzY3NjM4MTMwQzk5REMwMDZDOURFMiAv
KiBXS1Jlc291cmNlQ2FjaGVNYW5hZ2VyLmNwcCAqLywKIAkJCQkzMzM2NzYzOTEzMEM5OURDMDA2
QzlERTIgLyogV0tSZXNvdXJjZUNhY2hlTWFuYWdlci5oICovLAorCQkJCTZCRTk2OTlEMUU0M0I0
MUQwMDhCNzQ4MyAvKiBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcCAqLywKKwkJ
CQk2QkU5Njk5QjFFNDNCM0ZGMDA4Qjc0ODMgLyogV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFu
YWdlci5oICovLAogCQkJCTFBREU0NkIwMTk1NEVDNjEwMDBGNzk4NSAvKiBXS1Nlc3Npb25TdGF0
ZVJlZi5jcHAgKi8sCiAJCQkJMUFERTQ2QjExOTU0RUM2MTAwMEY3OTg1IC8qIFdLU2Vzc2lvblN0
YXRlUmVmLmggKi8sCiAJCQkJMzE0ODg4RkUxRDkxQjExRDAwMzc3MDQyIC8qIFdLVGV4dENoZWNr
ZXIuY3BwICovLApAQCAtODU3NCw2ICs4NTg2LDcgQEAKIAkJCQk5MzIxRDU4QTFBMzhGMTk2MDA4
MDUyQkUgLyogV0tJbW1lZGlhdGVBY3Rpb25UeXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUM4
RTI5MzkxMjc2MUU1QjAwQkM3QkQwIC8qIFdLSW5zcGVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjNDNzI1QjE5NkY2MDRFMDBBRUREMEMgLyogV0tJbnNwZWN0b3JIaWdobGlnaHRWaWV3Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQk2QkU5NjlBMDFFNDNCODZFMDA4Qjc0ODMgLyogV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1NDI5M0E0MTk1
QTQzREEwMDI3ODJDNyAvKiBXS0luc3BlY3Rvck5vZGVTZWFyY2hHZXN0dXJlUmVjb2duaXplci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNkVFODQ5QzgxMzY4RDkzOTAwMzhENDgxIC8qIFdLSW5zcGVj
dG9yUHJpdmF0ZU1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFBOUUxMEIxMzE1Q0QxODAwOUU3
MDMxIC8qIFdLS2V5VmFsdWVTdG9yYWdlTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCkBAIC04NzU4
LDYgKzg3NzEsNyBAQAogCQkJCTFBM0NDMTY3MTg5MDZBQ0YwMDFFNkVEOCAvKiBXS1dlYlZpZXcu
aCBpbiBIZWFkZXJzICovLAogCQkJCTFBREY1OTFCMTg5MDUyOEUwMDQzQzE0NSAvKiBXS1dlYlZp
ZXdDb25maWd1cmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDdBQUZENjE4Qzk1NkFGMDBB
N0FDRDQgLyogV0tXZWJWaWV3Q29uZmlndXJhdGlvbkludGVybmFsLmggaW4gSGVhZGVycyAqLywK
KwkJCQk2QkU5Njk5QzFFNDNCM0ZGMDA4Qjc0ODMgLyogV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFDMTQxNTExOEFDNDdFRTAwNkM2MDJDIC8q
IFdLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MURD
NDU5QzFFM0RCQjI4MDBCMTFGNTEgLyogTGliV2ViUlRDU29ja2V0Q2xpZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkyRDdBQUZEMzE4Qzg2NDA2MDBBN0FDRDQgLyogV0tXZWJWaWV3Q29udGVudFBy
b3ZpZGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTk5NzgsNiArOTk5Miw3IEBACiAJCQkJMzc2MDg4
MUUxNTA0MTNFOTAwRkM4MkM3IC8qIFdlYlJlbmRlck9iamVjdC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk1MTBBRkZCOTE2NTQyMDQ4MDAxQkEwNUUgLyogV2ViUmVzb3VyY2VMb2FkZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNTFGMDYwRTExNjU0MzE4NTAwRjMyODFCIC8qIFdlYlJlc291cmNl
TG9hZGVyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA2QkU5NjlBMjFFNDNCOEE0MDA4Qjc0ODMgLyogV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFGMDYwRTExNjU0
MzE4NTAwRjMyODFDIC8qIFdlYlJUQ1NvY2tldE1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk1MUYwNjBFMTE2NTQzMTg1MDBGMzI4MkMgLyogV2ViUlRDUmVzb2x2ZXJNZXNz
YWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFGMDYwRTExNjU0MzE4NTAwRjMy
ODFEIC8qIE5ldHdvcmtSVENTb2NrZXRNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC0xMDE2OCw2ICsxMDE4Myw3IEBACiAJCQkJMzc5NDg0MDgxNTBDNEI5NzAwRTUyQ0U5IC8q
IFdLUmVuZGVyTGF5ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzc2MDg4MjIxNTA0MTRGNzAw
RkM4MkM3IC8qIFdLUmVuZGVyT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMzMzY3NjNB
MTMwQzk5REMwMDZDOURFMiAvKiBXS1Jlc291cmNlQ2FjaGVNYW5hZ2VyLmNwcCBpbiBTb3VyY2Vz
ICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2QkU5Njk5RTFFNDNCNDFEMDA4
Qjc0ODMgLyogV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxQTdFMzc3ODE4RTRBNEZFMDAzRDBGRkYgLyogV0tTY3JpcHRNZXNzYWdlLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZDQjRFNTUxOEJCRTA0NDAwMEZDRkM5IC8qIFdLU2Nyb2xsVmll
dy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxQ0QxQzY2MUIzNEI5REMwMDE0MkNBNSAvKiBXS1Nl
Y3VyaXR5T3JpZ2luLm1tIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlByb2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUHJvY2Vzcy5jcHAJKHJldmlzaW9uIDIxMTkzMSkKKysrIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNjgsNyArMTY4
LDcgQEAgV2ViUHJvY2Vzczo6V2ViUHJvY2VzcygpCiAjaWYgUExBVEZPUk0oSU9TKQogICAgICwg
bV93ZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXIoKnRoaXMpCiAjZW5kaWYKLSAgICAsIG1fcmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JhZ2UoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpjcmVhdGUoKSkKKyAgICAsIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKFdlYkNv
cmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y3JlYXRlKCkpCiB7CiAgICAgLy8gSW5p
dGlhbGl6ZSBvdXIgcGxhdGZvcm0gc3RyYXRlZ2llcy4KICAgICBXZWJQbGF0Zm9ybVN0cmF0ZWdp
ZXM6OmluaXRpYWxpemUoKTsKQEAgLTE5MCw4ICsxOTAsOCBAQCBXZWJQcm9jZXNzOjpXZWJQcm9j
ZXNzKCkKIAogICAgIG1fcGx1Z0luQXV0b1N0YXJ0T3JpZ2luSGFzaGVzLmFkZChTZXNzaW9uSUQ6
OmRlZmF1bHRTZXNzaW9uSUQoKSwgSGFzaE1hcDx1bnNpZ25lZCwgZG91YmxlPigpKTsKIAotICAg
IFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWRPYnNlcnZlcigpLnNldFN0YXRpc3RpY3NTdG9y
ZShtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yYWdlLmNvcHlSZWYoKSk7Ci0gICAgbV9yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmFnZS0+c2V0Tm90aWZpY2F0aW9uQ2FsbGJhY2soW3RoaXNd
IHsKKyAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5zZXRTdGF0aXN0
aWNzU3RvcmUobV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY29weVJlZigpKTsKKyAgICBt
X3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS0+c2V0Tm90aWZpY2F0aW9uQ2FsbGJhY2soW3Ro
aXNdIHsKICAgICAgICAgaWYgKG1fc3RhdGlzdGljc0NoYW5nZWRUaW1lci5pc0FjdGl2ZSgpKQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBtX3N0YXRpc3RpY3NDaGFuZ2VkVGltZXIuc3Rh
cnRPbmVTaG90KHN0ZDo6Y2hyb25vOjpzZWNvbmRzKDUpKTsKQEAgLTEzOTUsMTAgKzEzOTUsMTAg
QEAgdm9pZCBXZWJQcm9jZXNzOjpub25WaXNpYmxlUHJvY2Vzc0NsZWFudQogCiB2b2lkIFdlYlBy
b2Nlc3M6OnN0YXRpc3RpY3NDaGFuZ2VkVGltZXJGaXJlZCgpCiB7Ci0gICAgaWYgKG1fcmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JhZ2UtPmlzRW1wdHkoKSkKKyAgICBpZiAobV9yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUtPmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcGFy
ZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVXBkYXRlZChtX3Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yYWdlLT50YWtlU3RhdGlzdGljcygpKSwgMCk7CisgICAgcGFyZW50UHJv
Y2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVXBkYXRlZChtX3Jlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS0+dGFrZVN0YXRpc3RpY3MoKSksIDApOwogfQogCiB2b2lkIFdlYlByb2Nlc3M6
OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGJvb2wgZW5hYmxlZCkKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oCShyZXZpc2lvbiAyMTE5MzEpCisrKyBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTQxNiw3ICs0MTYsNyBAQCBwcml2YXRlOgogICAgIFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tlciBt
X3dlYlNRTGl0ZURhdGFiYXNlVHJhY2tlcjsKICNlbmRpZgogCi0gICAgUmVmPFdlYkNvcmU6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4gbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmFn
ZTsKKyAgICBSZWY8V2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiBtX3Jlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTsKIAogICAgIHVuc2lnbmVkIG1fcGFnZXNNYXJraW5nTGF5
ZXJzQXNWb2xhdGlsZSB7IDAgfTsKICAgICBib29sIG1fc3VwcHJlc3NNZW1vcnlQcmVzc3VyZUhh
bmRsZXIgeyBmYWxzZSB9OwpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjExOTc2KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsNTEgQEAKKzIwMTctMDItMDkgIEpvaG4gV2lsYW5kZXIgIDx3
aWxhbmRlckBhcHBsZS5jb20+CisKKyAgICAgICAgVXBkYXRlcyB0byBSZXNvdXJjZSBMb2FkIFN0
YXRpc3RpY3M6IEdldCB0aGUgcmlnaHQgd2Vic2l0ZSBkYXRhIHN0b3JlIGFuZCBpbnRyb2R1Y2Ug
dGltZW91dCBmb3IgdXNlciBpbnRlcmFjdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY3NDc0CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yNDY4
MTgwOD4KKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI0NzAzMjg2PgorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vMzAyOTAyNzA+CisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIHRlc3QgaW5mcmFz
dHJ1Y3R1cmUgdG8gYWxsb3cgdGVzdGluZyAKKyAgICAgICAgb2YgdGhlIHZhcmlvdXMgcnVsZXMg
aW4gcGxhY2UgZm9yIGRhdGEgcmVjb3JkcyByZW1vdmFsLgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcDoKKyAgICAgICAgKFdUUjo6SW5qZWN0
ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlVG9QYWdlKToKKyAgICAgICAgICAgIENhbGxiYWNr
IG1lY2hhbmlzbSB0byB0ZWxsIHBhZ2VzIHRoYXQgYSB3ZWJzaXRlIGRhdGEgc3RvcmUKKyAgICAg
ICAgICAgIHNjYW4gaGFzIGhhcHBlbmVkLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNl
dFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OmlzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5l
cjo6c2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXVFI6OlRl
c3RSdW5uZXI6OmlzU3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChX
VFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKToK
KyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6aW5zdGFsbFN0YXRpc3RpY3NEaWRNb2RpZnlEYXRh
UmVjb3Jkc0NhbGxiYWNrKToKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c3RhdGlzdGljc0Rp
ZE1vZGlmeURhdGFSZWNvcmRzQ2FsbGJhY2spOgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpz
dGF0aXN0aWNzRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKToKKyAgICAgICAgKFdUUjo6VGVz
dFJ1bm5lcjo6c2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5u
ZWQpOgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzU2hvdWxkQ2xhc3Np
ZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwpOgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjpzZXRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3Zh
bCk6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NSZXNldFRvQ29uc2lzdGVu
dFN0YXRlKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RS
dW5uZXIuaDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNv
dXJjZSk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjppc1N0YXRpc3RpY3NQcmV2YWxl
bnRSZXNvdXJjZSk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNz
SGFzSGFkVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6Omlz
U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXVFI6OlRlc3RDb250
cm9sbGVyOjpzZXRTdGF0aXN0aWNzVGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbik6CisgICAgICAg
IChXVFI6OlRlc3RDb250cm9sbGVyOjpzdGF0aXN0aWNzRmlyZURhdGFNb2RpZmljYXRpb25IYW5k
bGVyKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnNldFN0YXRpc3RpY3NOb3RpZnlQ
YWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRy
b2xsZXI6OnNldFN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNv
cmRzUmVtb3ZhbCk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNz
TWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAgIChXVFI6OlRl
c3RDb250cm9sbGVyOjpzdGF0aXN0aWNzUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSk6CisgICAgICAg
ICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oOgorICAgICAgICAgICAgVGhlc2Ug
YXJlIGFsbCBjb25maWd1cmF0aW9uIGFuZCB0ZXN0IGZ1bmN0aW9ucy4KKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdEludm9j
YXRpb246OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUpOgor
CiAyMDE3LTAyLTA5ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAg
ICBJbXByb3ZlIFczQyBpbXBvcnRlciBjb21tYW5kIGxpbmUgb3B0aW9ucwpJbmRleDogVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDIxMTkzMSkKKysr
IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNC0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAx
NC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNTUsNiArNTUsNyBAQAogI2luY2x1ZGUgPFdlYktpdC9XS1BsdWdp
bkluZm9ybWF0aW9uLmg+CiAjaW5jbHVkZSA8V2ViS2l0L1dLUHJlZmVyZW5jZXNSZWZQcml2YXRl
Lmg+CiAjaW5jbHVkZSA8V2ViS2l0L1dLUHJvdGVjdGlvblNwYWNlLmg+CisjaW5jbHVkZSA8V2Vi
S2l0L1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaD4KICNpbmNsdWRlIDxXZWJLaXQv
V0tSZXRhaW5QdHIuaD4KICNpbmNsdWRlIDxXZWJLaXQvV0tTZWN1cml0eU9yaWdpblJlZi5oPgog
I2luY2x1ZGUgPFdlYktpdC9XS1RleHRDaGVja2VyLmg+CkBAIC0yMjA2LDYgKzIyMDcsNTUgQEAg
dm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0SWdub3Jlc1ZpZXdwb3J0UwogICAgIFdLUGFnZVNldEln
bm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzKG1fbWFpbldlYlZpZXctPnBhZ2UoKSwgaWdub3Jlc1Zp
ZXdwb3J0U2NhbGVMaW1pdHMpOwogfQogCit2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0
aWNzUHJldmFsZW50UmVzb3VyY2UoU3RyaW5nIGhvc3ROYW1lLCBib29sIHZhbHVlKQoreworICAg
IFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXRQcmV2YWxlbnRSZXNvdXJjZShob3N0
TmFtZSwgdmFsdWUpOworfQorCitib29sIFRlc3RDb250cm9sbGVyOjppc1N0YXRpc3RpY3NQcmV2
YWxlbnRSZXNvdXJjZShTdHJpbmcgaG9zdE5hbWUpCit7CisgICAgcmV0dXJuIFdLUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01hbmFnZXJJc1ByZXZhbGVudFJlc291cmNlKGhvc3ROYW1lKTsKK30KKwor
dm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbihT
dHJpbmcgaG9zdE5hbWUsIGJvb2wgdmFsdWUpCit7CisgICAgV0tSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWFuYWdlclNldEhhc0hhZFVzZXJJbnRlcmFjdGlvbihob3N0TmFtZSwgdmFsdWUpOworfQor
Citib29sIFRlc3RDb250cm9sbGVyOjppc1N0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24o
U3RyaW5nIGhvc3ROYW1lKQoreworICAgIHJldHVybiBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NN
YW5hZ2VySXNIYXNIYWRVc2VySW50ZXJhY3Rpb24oaG9zdE5hbWUpOworfQorCit2b2lkIFRlc3RD
b250cm9sbGVyOjpzZXRTdGF0aXN0aWNzVGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihkb3VibGUg
c2Vjb25kcykKK3sKKyAgICBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0VGltZVRv
TGl2ZVVzZXJJbnRlcmFjdGlvbihzZWNvbmRzKTsKK30KKwordm9pZCBUZXN0Q29udHJvbGxlcjo6
c3RhdGlzdGljc0ZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpCit7CisgICAgV0tSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWFuYWdlckZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOworfQor
ICAgIAordm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRh
dGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCB2YWx1ZSkKK3sKKyAgICBXS1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NNYW5hZ2VyU2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCh2
YWx1ZSk7Cit9CisgICAgCit2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzU2hvdWxk
Q2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCB2YWx1ZSkKK3sK
KyAgICBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0U2hvdWxkQ2xhc3NpZnlSZXNv
dXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwodmFsdWUpOworfQorCit2b2lkIFRlc3RDb250
cm9sbGVyOjpzZXRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3Zh
bChkb3VibGUgc2Vjb25kcykKK3sKKyAgICBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2Vy
U2V0TWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbChzZWNvbmRzKTsKK30KK3Zv
aWQgVGVzdENvbnRyb2xsZXI6OnN0YXRpc3RpY3NSZXNldFRvQ29uc2lzdGVudFN0YXRlKCkKK3sK
KyAgICBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyUmVzZXRUb0NvbnNpc3RlbnRTdGF0
ZSgpOworfQorICAgIAogI2lmICFQTEFURk9STShDT0NPQSkKIHZvaWQgVGVzdENvbnRyb2xsZXI6
OnBsYXRmb3JtV2lsbFJ1blRlc3QoY29uc3QgVGVzdEludm9jYXRpb24mKQogewpJbmRleDogVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAkocmV2aXNpb24gMjExOTMxKQorKysg
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNS0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNS0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMTQ4LDYgKzE0OCwxNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFNo
b3VsZERvd25sb2FkVW5kaXNwbGF5YWJsZU1JTUVUeXBlcyhib29sIHZhbHVlKSB7IG1fc2hvdWxk
RG93bmxvYWRVbmRpc3BsYXlhYmxlTUlNRVR5cGVzID0gdmFsdWU7IH0KIAorICAgIHZvaWQgc2V0
U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKFN0cmluZyBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7
CisgICAgYm9vbCBpc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShTdHJpbmcgaG9zdE5hbWUp
OworICAgIHZvaWQgc2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbihTdHJpbmcgaG9z
dE5hbWUsIGJvb2wgdmFsdWUpOworICAgIGJvb2wgaXNTdGF0aXN0aWNzSGFzSGFkVXNlckludGVy
YWN0aW9uKFN0cmluZyBob3N0TmFtZSk7CisgICAgdm9pZCBzZXRTdGF0aXN0aWNzVGltZVRvTGl2
ZVVzZXJJbnRlcmFjdGlvbihkb3VibGUgc2Vjb25kcyk7CisgICAgdm9pZCBzdGF0aXN0aWNzRmly
ZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CisgICAgdm9pZCBzZXRTdGF0aXN0aWNzTm90aWZ5
UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sKTsKKyAgICB2b2lkIHNldFN0YXRp
c3RpY3NTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29s
KTsKKyAgICB2b2lkIHNldFN0YXRpc3RpY3NNaW5pbXVtVGltZUJldHdlZWVuRGF0YVJlY29yZHNS
ZW1vdmFsKGRvdWJsZSk7CisgICAgdm9pZCBzdGF0aXN0aWNzUmVzZXRUb0NvbnNpc3RlbnRTdGF0
ZSgpOworCiBwcml2YXRlOgogICAgIFdLUmV0YWluUHRyPFdLUGFnZUNvbmZpZ3VyYXRpb25SZWY+
IGdlbmVyYXRlUGFnZUNvbmZpZ3VyYXRpb24oV0tDb250ZXh0Q29uZmlndXJhdGlvblJlZik7CiAg
ICAgV0tSZXRhaW5QdHI8V0tDb250ZXh0Q29uZmlndXJhdGlvblJlZj4gZ2VuZXJhdGVDb250ZXh0
Q29uZmlndXJhdGlvbigpIGNvbnN0OwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0
SW52b2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0
SW52b2NhdGlvbi5jcHAJKHJldmlzaW9uIDIxMTkzMSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvVGVzdEludm9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTg4Niw2ICs4ODYsODkgQEAgV0tSZXRh
aW5QdHI8V0tUeXBlUmVmPiBUZXN0SW52b2NhdGlvbjo6ZAogICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KIAorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VO
YW1lLCAiU2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlIikpIHsKKyAgICAgICAgQVNTRVJU
KFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7CisK
KyAgICAgICAgV0tEaWN0aW9uYXJ5UmVmIG1lc3NhZ2VCb2R5RGljdGlvbmFyeSA9IHN0YXRpY19j
YXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2FnZUJvZHkpOworICAgICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gaG9zdE5hbWVLZXkoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkhvc3ROYW1lIikpOworICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdmFs
dWVLZXkoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlZhbHVlIikpOwor
CisgICAgICAgIFdLU3RyaW5nUmVmIGhvc3ROYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+
KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBob3N0TmFt
ZUtleS5nZXQoKSkpOworICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxX
S0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCB2YWx1ZUtleS5nZXQoKSkpOworCisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5zZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UodG9XVEZTdHJpbmcoaG9zdE5hbWUp
LCBXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICB9CisKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwg
IklzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlIikpIHsKKyAgICAgICAgQVNTRVJUKFdLR2V0
VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKKworICAgICAgICBX
S1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9k
eSk7CisgICAgICAgIGJvb2wgaXNQcmV2YWxlbnQgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkuaXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UodG9XVEZTdHJpbmcoaG9zdE5hbWUpKTsK
KyAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQoQWRvcHRXSywgV0tCb29sZWFu
Q3JlYXRlKGlzUHJldmFsZW50KSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisg
ICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0
aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uIikpIHsKKyAgICAgICAgQVNTRVJUKFdLR2V0VHlw
ZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25hcnlHZXRUeXBlSUQoKSk7CisgICAgICAgIAor
ICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nh
c3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7CisgICAgICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBob3N0TmFtZUtleShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiSG9zdE5hbWUiKSk7CisgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB2YWx1
ZUtleShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVmFsdWUiKSk7Cisg
ICAgICAgIAorICAgICAgICBXS1N0cmluZ1JlZiBob3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3Ry
aW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwg
aG9zdE5hbWVLZXkuZ2V0KCkpKTsKKyAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGlj
X2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5
RGljdGlvbmFyeSwgdmFsdWVLZXkuZ2V0KCkpKTsKKyAgICAgICAgCisgICAgICAgIFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKHRv
V1RGU3RyaW5nKGhvc3ROYW1lKSwgV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcobWVzc2FnZU5hbWUsICJJc1N0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24iKSkg
eworICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0
VHlwZUlEKCkpOworICAgICAgICAKKyAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0
aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOworICAgICAgICBib29sIGhhc0hhZFVz
ZXJJbnRlcmFjdGlvbiA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pc1N0YXRpc3RpY3NI
YXNIYWRVc2VySW50ZXJhY3Rpb24odG9XVEZTdHJpbmcoaG9zdE5hbWUpKTsKKyAgICAgICAgV0tS
ZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQoQWRvcHRXSywgV0tCb29sZWFuQ3JlYXRlKGhhc0hh
ZFVzZXJJbnRlcmFjdGlvbikpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAK
KyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFN0
YXRpc3RpY3NUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uIikpIHsKKyAgICAgICAgQVNTRVJUKFdL
R2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RvdWJsZUdldFR5cGVJRCgpKTsKKyAgICAgICAg
V0tEb3VibGVSZWYgc2Vjb25kcyA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihtZXNzYWdlQm9k
eSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzVGlt
ZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihXS0RvdWJsZUdldFZhbHVlKHNlY29uZHMpKTsKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU3RhdGlzdGljc0ZpcmVEYXRhTW9kaWZpY2F0aW9u
SGFuZGxlciIpKSB7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zdGF0aXN0
aWNzRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIH0KKyAgICAKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNz
YWdlTmFtZSwgIlN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVk
IikpIHsKKyAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xl
YW5HZXRUeXBlSUQoKSk7CisgICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0
PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkuc2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5u
ZWQoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgfQorCisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJTdGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92
YWwiKSkgeworICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9v
bGVhbkdldFR5cGVJRCgpKTsKKyAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nh
c3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5zZXRTdGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRh
UmVjb3Jkc1JlbW92YWwoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRz
UmVtb3ZhbCIpKSB7CisgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0g
V0tEb3VibGVHZXRUeXBlSUQoKSk7CisgICAgICAgIFdLRG91YmxlUmVmIHNlY29uZHMgPSBzdGF0
aWNfY2FzdDxXS0RvdWJsZVJlZj4obWVzc2FnZUJvZHkpOworICAgICAgICBUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jk
c1JlbW92YWwoV0tEb3VibGVHZXRWYWx1ZShzZWNvbmRzKSk7CisgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIH0KKyAgICAKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyht
ZXNzYWdlTmFtZSwgIlN0YXRpc3RpY3NSZXNldFRvQ29uc2lzdGVudFN0YXRlIikpIHsKKyAgICAg
ICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnN0YXRpc3RpY3NSZXNldFRvQ29uc2lzdGVu
dFN0YXRlKCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KIAogICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBudWxscHRyOwpJbmRleDogVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAJ
KHJldmlzaW9uIDIxMTkzMSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvSW5qZWN0ZWRCdW5kbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjY2LDYgKzI2NiwxMSBA
QCB2b2lkIEluamVjdGVkQnVuZGxlOjpkaWRSZWNlaXZlTWVzc2FnZVRvCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdl
TmFtZSwgIldlYnNpdGVEYXRhRGVsZXRpb25Gb3JUb3BQcml2YXRlbHlPd25lZERvbWFpbnNGaW5p
c2hlZCIpKSB7CisgICAgICAgIG1fdGVzdFJ1bm5lci0+c3RhdGlzdGljc0RpZE1vZGlmeURhdGFS
ZWNvcmRzQ2FsbGJhY2soKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBlcnJvck1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJFcnJvciIpKTsKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
ZXJyb3JNZXNzYWdlQm9keShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
VW5rbm93biIpKTsKICAgICBXS0J1bmRsZVBhZ2VQb3N0TWVzc2FnZShwYWdlLCBlcnJvck1lc3Nh
Z2VOYW1lLmdldCgpLCBlcnJvck1lc3NhZ2VCb2R5LmdldCgpKTsKSW5kZXg6IFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAkocmV2
aXNpb24gMjExOTMxKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9U
ZXN0UnVubmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRl
ICJTdHJpbmdGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJUZXN0Q29udHJvbGxlci5oIgogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ1Rlc3RSdW5uZXJVdGlscy5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaD4KICNpbmNsdWRlIDxXZWJLaXQvV0tCdW5kbGUuaD4K
ICNpbmNsdWRlIDxXZWJLaXQvV0tCdW5kbGVCYWNrRm9yd2FyZExpc3QuaD4KICNpbmNsdWRlIDxX
ZWJLaXQvV0tCdW5kbGVGcmFtZS5oPgpAQCAtNjM1LDYgKzYzNiw3IEBAIGVudW0gewogICAgIFdp
bGxFbmRTd2lwZUNhbGxiYWNrSUQsCiAgICAgRGlkRW5kU3dpcGVDYWxsYmFja0lELAogICAgIERp
ZFJlbW92ZVN3aXBlU25hcHNob3RDYWxsYmFja0lELAorICAgIFN0YXRpc3RpY3NEaWRNb2RpZnlE
YXRhUmVjb3Jkc0NhbGxiYWNrSUQsCiAgICAgRmlyc3RVSVNjcmlwdENhbGxiYWNrSUQgPSAxMDAK
IH07CiAKQEAgLTExNTIsNiArMTE1NCwxMjggQEAgdm9pZCBUZXN0UnVubmVyOjpjYWxsRGlkUmVt
b3ZlU3dpcGVTbmFwcwogICAgIGNhbGxUZXN0UnVubmVyQ2FsbGJhY2soRGlkUmVtb3ZlU3dpcGVT
bmFwc2hvdENhbGxiYWNrSUQpOwogfQogCit2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NQ
cmV2YWxlbnRSZXNvdXJjZShKU1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSkKK3sKKyAg
ICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOworICAgIFZlY3RvcjxXS1Jl
dGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7CisKKyAgICBrZXlzLmFwcGVuZCh7IEFkb3B0V0ss
IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJIb3N0TmFtZSIpIH0pOworICAgIHZhbHVl
cy5hcHBlbmQoeyBBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhob3N0TmFtZSkg
fSk7CisgICAgCisgICAga2V5cy5hcHBlbmQoeyBBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiVmFsdWUiKSB9KTsKKyAgICB2YWx1ZXMuYXBwZW5kKHsgQWRvcHRXSywgV0tC
b29sZWFuQ3JlYXRlKHZhbHVlKSB9KTsKKyAgICAKKyAgICBWZWN0b3I8V0tTdHJpbmdSZWY+IHJh
d0tleXM7CisgICAgVmVjdG9yPFdLVHlwZVJlZj4gcmF3VmFsdWVzOworICAgIHJhd0tleXMucmVz
aXplKGtleXMuc2l6ZSgpKTsKKyAgICByYXdWYWx1ZXMucmVzaXplKHZhbHVlcy5zaXplKCkpOwor
ICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkgeworICAg
ICAgICByYXdLZXlzW2ldID0ga2V5c1tpXS5nZXQoKTsKKyAgICAgICAgcmF3VmFsdWVzW2ldID0g
dmFsdWVzW2ldLmdldCgpOworICAgIH0KKyAgICAKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNl
dFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZSIpKTsKKyAgICBXS1JldGFpblB0cjxXS0RpY3Rp
b25hcnlSZWY+IG1lc3NhZ2VCb2R5KEFkb3B0V0ssIFdLRGljdGlvbmFyeUNyZWF0ZShyYXdLZXlz
LmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKKworICAgIFdLQnVu
ZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVu
ZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7Cit9
CisKK2Jvb2wgVGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoSlNTdHJp
bmdSZWYgaG9zdE5hbWUpCit7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VO
YW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJJc1N0YXRpc3RpY3NQ
cmV2YWxlbnRSZXNvdXJjZSIpKTsKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZUJvZHkoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUpKTsKKyAg
ICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IDA7CisgICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9u
b3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+
cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRh
KTsKKyAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVm
PihyZXR1cm5EYXRhKSk7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlzdGljc0hhc0hh
ZFVzZXJJbnRlcmFjdGlvbihKU1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSkKK3sKKyAg
ICBWZWN0b3I8V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+PiBrZXlzOworICAgIFZlY3RvcjxXS1Jl
dGFpblB0cjxXS1R5cGVSZWY+PiB2YWx1ZXM7CisgICAgCisgICAga2V5cy5hcHBlbmQoeyBBZG9w
dFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSB9KTsKKyAgICB2
YWx1ZXMuYXBwZW5kKHsgQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5h
bWUpIH0pOworICAgIAorICAgIGtleXMuYXBwZW5kKHsgQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlZhbHVlIikgfSk7CisgICAgdmFsdWVzLmFwcGVuZCh7IEFkb3B0V0ss
IFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkgfSk7CisgICAgCisgICAgVmVjdG9yPFdLU3RyaW5nUmVm
PiByYXdLZXlzOworICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlczsKKyAgICByYXdLZXlz
LnJlc2l6ZShrZXlzLnNpemUoKSk7CisgICAgcmF3VmFsdWVzLnJlc2l6ZSh2YWx1ZXMuc2l6ZSgp
KTsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7CisgICAgICAgIHJhd1ZhbHVlc1tp
XSA9IHZhbHVlc1tpXS5nZXQoKTsKKyAgICB9CisgICAgCisgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJTZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uIikpOworICAgIFdLUmV0YWluUHRy
PFdLRGljdGlvbmFyeVJlZj4gbWVzc2FnZUJvZHkoQWRvcHRXSywgV0tEaWN0aW9uYXJ5Q3JlYXRl
KHJhd0tleXMuZGF0YSgpLCByYXdWYWx1ZXMuZGF0YSgpLCByYXdLZXlzLnNpemUoKSkpOworICAg
IAorICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwg
bnVsbHB0cik7Cit9CisKK2Jvb2wgVGVzdFJ1bm5lcjo6aXNTdGF0aXN0aWNzSGFzSGFkVXNlcklu
dGVyYWN0aW9uKEpTU3RyaW5nUmVmIGhvc3ROYW1lKQoreworICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiSXNTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uIikpOworICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9keShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0
cmluZyhob3N0TmFtZSkpOworICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gMDsKKyAgICBXS0J1
bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdlRm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9k
eS5nZXQoKSwgJnJldHVybkRhdGEpOworICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0
aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKTsKK30KKwordm9pZCBUZXN0UnVubmVy
OjpzZXRTdGF0aXN0aWNzVGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihkb3VibGUgc2Vjb25kcykK
K3sKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUoQWRvcHRXSywgV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NUaW1lVG9MaXZlVXNlcklu
dGVyYWN0aW9uIikpOworICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiBtZXNzYWdlQm9keShB
ZG9wdFdLLCBXS0RvdWJsZUNyZWF0ZShzZWNvbmRzKSk7CisgICAgV0tCdW5kbGVQb3N0U3luY2hy
b25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2Fn
ZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKK30KKwordm9pZCBUZXN0
UnVubmVyOjppbnN0YWxsU3RhdGlzdGljc0RpZE1vZGlmeURhdGFSZWNvcmRzQ2FsbGJhY2soSlNW
YWx1ZVJlZiBjYWxsYmFjaykKK3sKKyAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTdGF0aXN0
aWNzRGlkTW9kaWZ5RGF0YVJlY29yZHNDYWxsYmFja0lELCBjYWxsYmFjayk7Cit9CisKK3ZvaWQg
VGVzdFJ1bm5lcjo6c3RhdGlzdGljc0RpZE1vZGlmeURhdGFSZWNvcmRzQ2FsbGJhY2soKQorewor
ICAgIGNhbGxUZXN0UnVubmVyQ2FsbGJhY2soU3RhdGlzdGljc0RpZE1vZGlmeURhdGFSZWNvcmRz
Q2FsbGJhY2tJRCk7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc0ZpcmVEYXRhTW9k
aWZpY2F0aW9uSGFuZGxlcigpCit7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTdGF0aXN0aWNz
RmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyIikpOworICAgIFdLQnVuZGxlUG9zdFN5bmNocm9u
b3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCAwLCBudWxscHRyKTsKK30KKwordm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0
aWNzTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVlKQorewor
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNv
cmRzV2VyZVNjYW5uZWQiKSk7CisgICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdl
Qm9keShBZG9wdFdLLCBXS0Jvb2xlYW5DcmVhdGUodmFsdWUpKTsKKyAgICBXS0J1bmRsZVBvc3RT
eW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOworfQorCit2b2lk
IFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURh
dGFSZWNvcmRzUmVtb3ZhbChib29sIHZhbHVlKQoreworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
U3RhdGlzdGljc1Nob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFs
IikpOworICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkoQWRvcHRXSywg
V0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7CisgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNz
YWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKK30KKwordm9pZCBUZXN0UnVubmVyOjpz
ZXRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbChkb3VibGUg
c2Vjb25kcykKK3sKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUoQWRv
cHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldFN0YXRpc3RpY3NNaW5pbXVt
VGltZUJldHdlZWVuRGF0YVJlY29yZHNSZW1vdmFsIikpOworICAgIFdLUmV0YWluUHRyPFdLRG91
YmxlUmVmPiBtZXNzYWdlQm9keShBZG9wdFdLLCBXS0RvdWJsZUNyZWF0ZShzZWNvbmRzKSk7Cisg
ICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxs
cHRyKTsKK30KKyAgICAKK3ZvaWQgVGVzdFJ1bm5lcjo6c3RhdGlzdGljc1Jlc2V0VG9Db25zaXN0
ZW50U3RhdGUoKQoreworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZShB
ZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3RhdGlzdGljc1Jlc2V0VG9D
b25zaXN0ZW50U3RhdGUiKSk7CisgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDAs
IG51bGxwdHIpOworfQorCiAjaWYgUExBVEZPUk0oTUFDKQogdm9pZCBUZXN0UnVubmVyOjpjb25u
ZWN0TW9ja0dhbWVwYWQodW5zaWduZWQgaW5kZXgpCiB7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaAkocmV2aXNpb24gMjEx
OTMxKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEwLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEwLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zNDUsNiArMzQ1LDIwIEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldE1vY2tHYW1lcGFkRGV0YWlscyh1bnNpZ25lZCBpbmRleCwgSlNTdHJpbmdSZWYgZ2FtZXBh
ZElELCB1bnNpZ25lZCBheGlzQ291bnQsIHVuc2lnbmVkIGJ1dHRvbkNvdW50KTsKICAgICB2b2lk
IHNldE1vY2tHYW1lcGFkQXhpc1ZhbHVlKHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBheGlzSW5k
ZXgsIGRvdWJsZSB2YWx1ZSk7CiAgICAgdm9pZCBzZXRNb2NrR2FtZXBhZEJ1dHRvblZhbHVlKHVu
c2lnbmVkIGluZGV4LCB1bnNpZ25lZCBidXR0b25JbmRleCwgZG91YmxlIHZhbHVlKTsKKyAgICAK
KyAgICAvLyBSZXNvdXJjZSBMb2FkIFN0YXRpc3RpY3MKKyAgICB2b2lkIGluc3RhbGxTdGF0aXN0
aWNzRGlkTW9kaWZ5RGF0YVJlY29yZHNDYWxsYmFjayhKU1ZhbHVlUmVmIGNhbGxiYWNrKTsKKyAg
ICB2b2lkIHN0YXRpc3RpY3NEaWRNb2RpZnlEYXRhUmVjb3Jkc0NhbGxiYWNrKCk7CisgICAgdm9p
ZCBzdGF0aXN0aWNzRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CisgICAgdm9pZCBzZXRT
dGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFs
dWUpOworICAgIGJvb2wgaXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UoSlNTdHJpbmdSZWYg
aG9zdE5hbWUpOworICAgIHZvaWQgc2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbihK
U1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSk7CisgICAgYm9vbCBpc1N0YXRpc3RpY3NI
YXNIYWRVc2VySW50ZXJhY3Rpb24oSlNTdHJpbmdSZWYgaG9zdE5hbWUpOworICAgIHZvaWQgc2V0
U3RhdGlzdGljc1RpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oZG91YmxlIHNlY29uZHMpOworICAg
IHZvaWQgc2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQo
Ym9vbCk7CisgICAgdm9pZCBzZXRTdGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZv
cmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCk7CisgICAgdm9pZCBzZXRTdGF0aXN0aWNzTWluaW11
bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbChkb3VibGUpOworICAgIHZvaWQgc3RhdGlz
dGljc1Jlc2V0VG9Db25zaXN0ZW50U3RhdGUoKTsKIAogcHJpdmF0ZToKICAgICBUZXN0UnVubmVy
KCk7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdz
L1Rlc3RSdW5uZXIuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5pZGwJKHJldmlzaW9uIDIxMTkzMSkKKysr
IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5l
ci5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEwLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEwLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNDYsNCArMjQ2LDE3IEBAIGludGVyZmFjZSBUZXN0
UnVubmVyIHsKICAgICB2b2lkIHNldE1vY2tHYW1lcGFkQnV0dG9uVmFsdWUodW5zaWduZWQgbG9u
ZyBpbmRleCwgdW5zaWduZWQgbG9uZyBidXR0b25JbmRleCwgZG91YmxlIHZhbHVlKTsKICAgICB2
b2lkIGNvbm5lY3RNb2NrR2FtZXBhZCh1bnNpZ25lZCBsb25nIGluZGV4KTsKICAgICB2b2lkIGRp
c2Nvbm5lY3RNb2NrR2FtZXBhZCh1bnNpZ25lZCBsb25nIGluZGV4KTsKKworICAgIC8vIFJlc291
cmNlIExvYWQgU3RhdGlzdGljcworICAgIHZvaWQgaW5zdGFsbFN0YXRpc3RpY3NEaWRNb2RpZnlE
YXRhUmVjb3Jkc0NhbGxiYWNrKG9iamVjdCBjYWxsYmFjayk7CisgICAgdm9pZCBzZXRTdGF0aXN0
aWNzUHJldmFsZW50UmVzb3VyY2UoRE9NU3RyaW5nIGhvc3ROYW1lLCBib29sZWFuIHZhbHVlKTsK
KyAgICBib29sZWFuIGlzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKERPTVN0cmluZyBob3N0
TmFtZSk7CisgICAgdm9pZCBzZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKERPTVN0
cmluZyBob3N0TmFtZSwgYm9vbGVhbiB2YWx1ZSk7CisgICAgYm9vbGVhbiBpc1N0YXRpc3RpY3NI
YXNIYWRVc2VySW50ZXJhY3Rpb24oRE9NU3RyaW5nIGhvc3ROYW1lKTsKKyAgICB2b2lkIHNldFN0
YXRpc3RpY3NUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKGRvdWJsZSBzZWNvbmRzKTsKKyAgICB2
b2lkIHN0YXRpc3RpY3NGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKKyAgICB2b2lkIHNl
dFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2xlYW4g
dmFsdWUpOworICAgIHZvaWQgc2V0U3RhdGlzdGljc1Nob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVm
b3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2xlYW4gdmFsdWUpOworICAgIHZvaWQgc2V0U3RhdGlz
dGljc01pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92YWwoZG91YmxlIHNlY29uZHMp
OworICAgIHZvaWQgc3RhdGlzdGljc1Jlc2V0VG9Db25zaXN0ZW50U3RhdGUoKTsKIH07CkluZGV4
OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCShyZXZpc2lvbiAyMTE5MzEpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwyOSBAQAorMjAxNy0wMi0wOSAgSm9obiBXaWxhbmRlciAgPHdpbGFu
ZGVyQGFwcGxlLmNvbT4KKworICAgICAgICBVcGRhdGVzIHRvIFJlc291cmNlIExvYWQgU3RhdGlz
dGljczogR2V0IHRoZSByaWdodCB3ZWJzaXRlIGRhdGEgc3RvcmUgYW5kIGludHJvZHVjZSB0aW1l
b3V0IGZvciB1c2VyIGludGVyYWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjc0NzQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI0NjgxODA4
PgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjQ3MDMyODY+CisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS8zMDI5MDI3MD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFRlc3RFeHBlY3RhdGlvbnM6CisgICAgICAgICAgICBNYXJrZWQgYXMgZ2VuZXJh
bCBza2lwIChzZWUgV0syIGV4cGVjdGF0aW9ucyBiZWxvdykuCisgICAgICAgICogaHR0cC90ZXN0
cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3M6IEFkZGVkLgorICAgICAgICAqIGh0dHAv
dGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL25vbi1wcmV2YWxlbnQtcmVzb3Vy
Y2Utd2l0aC11c2VyLWludGVyYWN0aW9uLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
aHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3Mvbm9uLXByZXZhbGVudC1y
ZXNvdXJjZS13aXRoLXVzZXItaW50ZXJhY3Rpb24uaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0
cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3Mvbm9uLXByZXZhbGVudC1yZXNv
dXJjZS13aXRob3V0LXVzZXItaW50ZXJhY3Rpb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9ub24tcHJldmFs
ZW50LXJlc291cmNlLXdpdGhvdXQtdXNlci1pbnRlcmFjdGlvbi5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wcmV2YWxlbnQt
cmVzb3VyY2Utd2l0aC11c2VyLWludGVyYWN0aW9uLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcHJldmFsZW50
LXJlc291cmNlLXdpdGgtdXNlci1pbnRlcmFjdGlvbi10aW1lb3V0LWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3Mv
cHJldmFsZW50LXJlc291cmNlLXdpdGgtdXNlci1pbnRlcmFjdGlvbi10aW1lb3V0Lmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
L3ByZXZhbGVudC1yZXNvdXJjZS13aXRoLXVzZXItaW50ZXJhY3Rpb24uaHRtbDogQWRkZWQuCisg
ICAgICAgICogaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcHJldmFs
ZW50LXJlc291cmNlLXdpdGhvdXQtdXNlci1pbnRlcmFjdGlvbi1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGh0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3By
ZXZhbGVudC1yZXNvdXJjZS13aXRob3V0LXVzZXItaW50ZXJhY3Rpb24uaHRtbDogQWRkZWQuCisg
ICAgICAgICogcGxhdGZvcm0vd2syL1Rlc3RFeHBlY3RhdGlvbnM6CisgICAgICAgICAgICBNYXJr
ZWQgYXMgdmFsaWQgZm9yIFdlYktpdDIgb25seS4KKwogMjAxNy0wMi0wOCAgUnlhbiBIYWRkYWQg
IDxyeWFuaGFkZGFkQGFwcGxlLmNvbT4KIAogICAgICAgICBSZWJhc2VsaW5lIGVtb2ppIHRlc3Rz
IGZvciBpb3Mtc2ltdWxhdG9yLgpJbmRleDogTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zCShyZXZpc2lvbiAyMTE5
MzEpCisrKyBMYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zCSh3b3JraW5nIGNvcHkpCkBAIC02
NCw2ICs2NCw3IEBAIGh0dHAvdGVzdHMvcXVpY2tsb29rIFsgU2tpcCBdCiAjIFRoZXNlIHRlc3Rz
IGFyZSBXZWJLaXQyLW9ubHkKIGh0dHAvdGVzdHMvYXBwY2FjaGUvZGVjaWRlLW5hdmlnYXRpb24t
cG9saWN5LWFmdGVyLWRlbGF5Lmh0bWwgWyBTa2lwIF0KIGh0dHAvdGVzdHMvbWlzYy93aWxsLXNl
bmQtcmVxdWVzdC13aXRoLWNsaWVudC1wcm92aWRlZC1odHRwLWJvZHkuaHRtbCBbIFNraXAgXQor
aHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvIFsgU2tpcCBdCiAKICMg
T25seSBNYWMgYW5kIGlPUyBoYXZlIGFuIGltcGxlbWVudGF0aW9uIG9mIFVJU2NyaXB0Q29udHJv
bGxlcjo6ZG9Bc3luY1Rhc2soKS4KIGZhc3QvaGFybmVzcy91aXNjcmlwdGNvbnRyb2xsZXIgWyBT
a2lwIF0KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzL25vbi1wcmV2YWxlbnQtcmVzb3VyY2Utd2l0aC11c2VyLWludGVyYWN0aW9uLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcv
cmVzb3VyY2VMb2FkU3RhdGlzdGljcy9ub24tcHJldmFsZW50LXJlc291cmNlLXdpdGgtdXNlci1p
bnRlcmFjdGlvbi1leHBlY3RlZC50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3Mvbm9uLXByZXZhbGVudC1yZXNv
dXJjZS13aXRoLXVzZXItaW50ZXJhY3Rpb24tZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsOCBAQAorbWFpbiBmcmFtZSAtIGRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJh
bWUKK21haW4gZnJhbWUgLSBkaWRDb21taXRMb2FkRm9yRnJhbWUKK21haW4gZnJhbWUgLSBkaWRS
ZWNlaXZlVGl0bGU6IFRlc3RzIGZvciBOb24tUHJldmFsZW50IFJlc291cmNlIFdpdGggVXNlciBJ
bnRlcmFjdGlvbgorbWFpbiBmcmFtZSAtIGRpZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1lCitt
YWluIGZyYW1lIC0gZGlkSGFuZGxlT25sb2FkRXZlbnRzRm9yRnJhbWUKK21haW4gZnJhbWUgLSBk
aWRGaW5pc2hMb2FkRm9yRnJhbWUKK1BBU1MgQ29va2llIG5vdCBkZWxldGVkLgorCkluZGV4OiBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9ub24t
cHJldmFsZW50LXJlc291cmNlLXdpdGgtdXNlci1pbnRlcmFjdGlvbi5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
L25vbi1wcmV2YWxlbnQtcmVzb3VyY2Utd2l0aC11c2VyLWludGVyYWN0aW9uLmh0bWwJKG5vbmV4
aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0
YXRpc3RpY3Mvbm9uLXByZXZhbGVudC1yZXNvdXJjZS13aXRoLXVzZXItaW50ZXJhY3Rpb24uaHRt
bAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1s
IGxhbmc9ImVuIj4KKzxoZWFkPgorICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KKyAgICA8dGl0
bGU+VGVzdHMgZm9yIE5vbi1QcmV2YWxlbnQgUmVzb3VyY2UgV2l0aCBVc2VyIEludGVyYWN0aW9u
PC90aXRsZT4KKyAgICA8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpz
Ij48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KKyAgICBjb25zdCBob3N0VW5k
ZXJUZXN0ID0gIjEyNy4wLjAuMTo4MDAwIjsKKyAgICBjb25zdCBzdGF0aXN0aWNzVXJsID0gImh0
dHA6Ly8iICsgaG9zdFVuZGVyVGVzdCArICIvdGVtcCI7CisgICAgY29uc3Qgb3RoZXJQcmV2YWxl
bnRVcmwgPSAiaHR0cDovL2xvY2FsaG9zdDo4MDAwL3RlbXAiOworICAgIGZ1bmN0aW9uIHJ1blRl
c3RSdW5uZXJUZXN0KCkgeworICAgICAgICBpZiAoZG9jdW1lbnQuY29va2llICE9PSAiIikKKyAg
ICAgICAgICAgIHRlc3RGYWlsZWQoImRvY3VtZW50LmNvb2tpZSBub3QgZW1wdHkuIik7CisgICAg
ICAgIGNvbnN0IGNvb2tpZSA9ICJ0ZXN0Q29va2llPXRlc3RWYWx1ZSI7CisgICAgICAgIGRvY3Vt
ZW50LmNvb2tpZSA9IGNvb2tpZSArICI7IG1heC1hZ2U9MTAwOyI7CisgICAgICAgIGlmIChkb2N1
bWVudC5jb29raWUgIT09IGNvb2tpZSkKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoImRvY3VtZW50
LmNvb2tpZSBkaWQgbm90IGdldCBzZXQuIik7CisKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0
aXN0aWNzUHJldmFsZW50UmVzb3VyY2Uoc3RhdGlzdGljc1VybCwgZmFsc2UpOworICAgICAgICBp
ZiAodGVzdFJ1bm5lci5pc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShzdGF0aXN0aWNzVXJs
KSkKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIkhvc3QgZGlkIG5vdCBnZXQgc2V0IGFzIG5vbi1w
cmV2YWxlbnQgcmVzb3VyY2UuIik7CisKKyAgICAgICAgLy8gVGhpcyBpcyBkb25lIHRvIG5vdCBo
YXZlIGFuIGVtcHR5IHNldCBvZiBwcmV2YWxlbnQgcmVzb3VyY2VzLgorICAgICAgICAvLyBPdGhl
cndpc2UgZGF0YSByZWNvcmRzIGFyZSBuZXZlciBzY2FubmVkLgorICAgICAgICB0ZXN0UnVubmVy
LnNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShvdGhlclByZXZhbGVudFVybCwgdHJ1ZSk7
CisgICAgICAgIGlmICghdGVzdFJ1bm5lci5pc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShv
dGhlclByZXZhbGVudFVybCkpCisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJPdGhlciBob3N0IGRp
ZCBub3QgZ2V0IHNldCBhcyBwcmV2YWxlbnQgcmVzb3VyY2UuIik7CisKKyAgICAgICAgdGVzdFJ1
bm5lci5zZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKHN0YXRpc3RpY3NVcmwsIHRy
dWUpOworICAgICAgICBpZiAoIXRlc3RSdW5uZXIuaXNTdGF0aXN0aWNzSGFzSGFkVXNlckludGVy
YWN0aW9uKHN0YXRpc3RpY3NVcmwpKQorICAgICAgICAgICAgdGVzdEZhaWxlZCgiSG9zdCBkaWQg
bm90IGdldCBsb2dnZWQgZm9yIHVzZXIgaW50ZXJhY3Rpb24uIik7CisKKyAgICAgICAgdGVzdFJ1
bm5lci5pbnN0YWxsU3RhdGlzdGljc0RpZE1vZGlmeURhdGFSZWNvcmRzQ2FsbGJhY2soZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICBpZiAoZG9jdW1lbnQuY29va2llID09PSBjb29raWUpCisgICAg
ICAgICAgICAgICAgdGVzdFBhc3NlZCgiQ29va2llIG5vdCBkZWxldGVkLiIpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoIkNvb2tpZSBkZWxldGVkIG9yIGRv
Y3VtZW50LmNvb2tpZSBjb250YWlucyBvdGhlciBjb29raWVzOiAiICsgZG9jdW1lbnQuY29va2ll
KTsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIuc3RhdGlzdGljc1Jlc2V0VG9Db25zaXN0ZW50U3Rh
dGUoKTsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9KTsK
KyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNC
ZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoZmFsc2UpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0
YXRpc3RpY3NNaW5pbXVtVGltZUJldHdlZWVuRGF0YVJlY29yZHNSZW1vdmFsKDApOworICAgICAg
ICB0ZXN0UnVubmVyLnN0YXRpc3RpY3NGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKKyAg
ICB9CisKKyAgICBpZiAoZG9jdW1lbnQubG9jYXRpb24uaG9zdCA9PT0gaG9zdFVuZGVyVGVzdCAm
JiB3aW5kb3cudGVzdFJ1bm5lciAmJiB3aW5kb3cuaW50ZXJuYWxzKSB7CisgICAgICAgIHRlc3RS
dW5uZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICBpbnRlcm5hbHMuc2V0UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0VuYWJsZWQodHJ1ZSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGlj
c05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQodHJ1ZSk7CisgICAgICAgIHJ1
blRlc3RSdW5uZXJUZXN0KCk7CisgICAgfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Clwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9s
b2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3Mvbm9uLXByZXZhbGVudC1yZXNvdXJjZS13aXRo
b3V0LXVzZXItaW50ZXJhY3Rpb24tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL25vbi1wcmV2YWxl
bnQtcmVzb3VyY2Utd2l0aG91dC11c2VyLWludGVyYWN0aW9uLWV4cGVjdGVkLnR4dAkobm9uZXhp
c3RlbnQpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3Rh
dGlzdGljcy9ub24tcHJldmFsZW50LXJlc291cmNlLXdpdGhvdXQtdXNlci1pbnRlcmFjdGlvbi1l
eHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4IEBACittYWluIGZyYW1lIC0g
ZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRpZENvbW1pdExv
YWRGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRpZFJlY2VpdmVUaXRsZTogVGVzdHMgZm9yIE5vbi1Q
cmV2YWxlbnQgUmVzb3VyY2UgV2l0aG91dCBVc2VyIEludGVyYWN0aW9uCittYWluIGZyYW1lIC0g
ZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWUKK21haW4gZnJhbWUgLSBkaWRIYW5kbGVPbmxv
YWRFdmVudHNGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRpZEZpbmlzaExvYWRGb3JGcmFtZQorUEFT
UyBDb29raWUgbm90IGRlbGV0ZWQuCisKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9h
ZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL25vbi1wcmV2YWxlbnQtcmVzb3VyY2Utd2l0aG91
dC11c2VyLWludGVyYWN0aW9uLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3Mvbm9uLXByZXZhbGVudC1yZXNvdXJj
ZS13aXRob3V0LXVzZXItaW50ZXJhY3Rpb24uaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9ub24tcHJldmFs
ZW50LXJlc291cmNlLXdpdGhvdXQtdXNlci1pbnRlcmFjdGlvbi5odG1sCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNTYgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWwgbGFuZz0iZW4iPgorPGhl
YWQ+CisgICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiPgorICAgIDx0aXRsZT5UZXN0cyBmb3IgTm9u
LVByZXZhbGVudCBSZXNvdXJjZSBXaXRob3V0IFVzZXIgSW50ZXJhY3Rpb248L3RpdGxlPgorICAg
IDxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorICAgIGNvbnN0IGhvc3RVbmRlclRlc3QgPSAiMTI3
LjAuMC4xOjgwMDAiOworICAgIGNvbnN0IHN0YXRpc3RpY3NVcmwgPSAiaHR0cDovLyIgKyBob3N0
VW5kZXJUZXN0ICsgIi90ZW1wIjsKKyAgICBjb25zdCBvdGhlclByZXZhbGVudFVybCA9ICJodHRw
Oi8vbG9jYWxob3N0OjgwMDAvdGVtcCI7CisgICAgZnVuY3Rpb24gcnVuVGVzdFJ1bm5lclRlc3Qo
KSB7CisgICAgICAgIGlmIChkb2N1bWVudC5jb29raWUgIT09ICIiKQorICAgICAgICAgICAgdGVz
dEZhaWxlZCgiZG9jdW1lbnQuY29va2llIG5vdCBlbXB0eS4iKTsKKyAgICAgICAgY29uc3QgY29v
a2llID0gInRlc3RDb29raWU9dGVzdFZhbHVlIjsKKyAgICAgICAgZG9jdW1lbnQuY29va2llID0g
Y29va2llICsgIjsgbWF4LWFnZT0xMDA7IjsKKyAgICAgICAgaWYgKGRvY3VtZW50LmNvb2tpZSAh
PT0gY29va2llKQorICAgICAgICAgICAgdGVzdEZhaWxlZCgiZG9jdW1lbnQuY29va2llIGRpZCBu
b3QgZ2V0IHNldC4iKTsKKworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NQcmV2YWxl
bnRSZXNvdXJjZShzdGF0aXN0aWNzVXJsLCBmYWxzZSk7CisgICAgICAgIGlmICh0ZXN0UnVubmVy
LmlzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKHN0YXRpc3RpY3NVcmwpKQorICAgICAgICAg
ICAgdGVzdEZhaWxlZCgiSG9zdCBkaWQgbm90IGdldCBzZXQgYXMgbm9uLXByZXZhbGVudCByZXNv
dXJjZS4iKTsKKworICAgICAgICAvLyBUaGlzIGlzIGRvbmUgdG8gbm90IGhhdmUgYW4gZW1wdHkg
c2V0IG9mIHByZXZhbGVudCByZXNvdXJjZXMuCisgICAgICAgIC8vIE90aGVyd2lzZSBkYXRhIHJl
Y29yZHMgYXJlIG5ldmVyIHNjYW5uZWQuCisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGlj
c1ByZXZhbGVudFJlc291cmNlKG90aGVyUHJldmFsZW50VXJsLCB0cnVlKTsKKyAgICAgICAgaWYg
KCF0ZXN0UnVubmVyLmlzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKG90aGVyUHJldmFsZW50
VXJsKSkKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIk90aGVyIGhvc3QgZGlkIG5vdCBnZXQgc2V0
IGFzIHByZXZhbGVudCByZXNvdXJjZS4iKTsKKworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRp
c3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24oc3RhdGlzdGljc1VybCwgZmFsc2UpOworICAgICAg
ICBpZiAodGVzdFJ1bm5lci5pc1N0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24oc3RhdGlz
dGljc1VybCkpCisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJIb3N0IGRpZCBub3QgZ2V0IGNsZWFy
ZWQgb2YgdXNlciBpbnRlcmFjdGlvbi4iKTsKKworICAgICAgICB0ZXN0UnVubmVyLmluc3RhbGxT
dGF0aXN0aWNzRGlkTW9kaWZ5RGF0YVJlY29yZHNDYWxsYmFjayhmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgIGlmIChkb2N1bWVudC5jb29raWUgPT09IGNvb2tpZSkKKyAgICAgICAgICAgICAgICB0
ZXN0UGFzc2VkKCJDb29raWUgbm90IGRlbGV0ZWQuIik7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgdGVzdEZhaWxlZCgiQ29va2llIGRlbGV0ZWQgb3IgZG9jdW1lbnQuY29va2ll
IGNvbnRhaW5zIG90aGVyIGNvb2tpZXM6ICIgKyBkb2N1bWVudC5jb29raWUpOworICAgICAgICAg
ICAgdGVzdFJ1bm5lci5zdGF0aXN0aWNzUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSgpOworICAgICAg
ICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgICAgIH0pOworICAgICAgICB0ZXN0
UnVubmVyLnNldFN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNv
cmRzUmVtb3ZhbChmYWxzZSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc01pbmlt
dW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92YWwoMCk7CisgICAgICAgIHRlc3RSdW5uZXIu
c3RhdGlzdGljc0ZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOworICAgIH0KKworICAgIGlm
IChkb2N1bWVudC5sb2NhdGlvbi5ob3N0ID09PSBob3N0VW5kZXJUZXN0ICYmIHdpbmRvdy50ZXN0
UnVubmVyICYmIHdpbmRvdy5pbnRlcm5hbHMpIHsKKyAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50
aWxEb25lKCk7CisgICAgICAgIGludGVybmFscy5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5h
YmxlZCh0cnVlKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNX
aGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCh0cnVlKTsKKyAgICAgICAgcnVuVGVzdFJ1bm5lclRl
c3QoKTsKKyAgICB9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcy9wcmV2YWxlbnQtcmVzb3VyY2Utd2l0aC11c2VyLWludGVyYWN0aW9u
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRp
bmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wcmV2YWxlbnQtcmVzb3VyY2Utd2l0aC11c2VyLWlu
dGVyYWN0aW9uLWV4cGVjdGVkLnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wcmV2YWxlbnQtcmVzb3VyY2Ut
d2l0aC11c2VyLWludGVyYWN0aW9uLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDggQEAKK21haW4gZnJhbWUgLSBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lCitt
YWluIGZyYW1lIC0gZGlkQ29tbWl0TG9hZEZvckZyYW1lCittYWluIGZyYW1lIC0gZGlkUmVjZWl2
ZVRpdGxlOiBUZXN0cyBmb3IgUHJldmFsZW50IFJlc291cmNlIFdpdGggVXNlciBJbnRlcmFjdGlv
bgorbWFpbiBmcmFtZSAtIGRpZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1lCittYWluIGZyYW1l
IC0gZGlkSGFuZGxlT25sb2FkRXZlbnRzRm9yRnJhbWUKK21haW4gZnJhbWUgLSBkaWRGaW5pc2hM
b2FkRm9yRnJhbWUKK1BBU1MgQ29va2llIG5vdCBkZWxldGVkLgorCkluZGV4OiBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wcmV2YWxlbnQtcmVz
b3VyY2Utd2l0aC11c2VyLWludGVyYWN0aW9uLXRpbWVvdXQtZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzL3ByZXZhbGVudC1yZXNvdXJjZS13aXRoLXVzZXItaW50ZXJhY3Rpb24tdGltZW91dC1leHBl
Y3RlZC50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5n
L3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcHJldmFsZW50LXJlc291cmNlLXdpdGgtdXNlci1pbnRl
cmFjdGlvbi10aW1lb3V0LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgg
QEAKK21haW4gZnJhbWUgLSBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lCittYWluIGZy
YW1lIC0gZGlkQ29tbWl0TG9hZEZvckZyYW1lCittYWluIGZyYW1lIC0gZGlkUmVjZWl2ZVRpdGxl
OiBUZXN0cyBmb3IgUHJldmFsZW50IFJlc291cmNlIFdpdGggVXNlciBJbnRlcmFjdGlvbiBUaW1l
b3V0CittYWluIGZyYW1lIC0gZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWUKK21haW4gZnJh
bWUgLSBkaWRIYW5kbGVPbmxvYWRFdmVudHNGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRpZEZpbmlz
aExvYWRGb3JGcmFtZQorUEFTUyBDb29raWUgZGVsZXRlZC4KKwpJbmRleDogTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcHJldmFsZW50LXJlc291
cmNlLXdpdGgtdXNlci1pbnRlcmFjdGlvbi10aW1lb3V0Lmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcHJldmFs
ZW50LXJlc291cmNlLXdpdGgtdXNlci1pbnRlcmFjdGlvbi10aW1lb3V0Lmh0bWwJKG5vbmV4aXN0
ZW50KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRp
c3RpY3MvcHJldmFsZW50LXJlc291cmNlLXdpdGgtdXNlci1pbnRlcmFjdGlvbi10aW1lb3V0Lmh0
bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRt
bCBsYW5nPSJlbiI+Cis8aGVhZD4KKyAgICA8bWV0YSBjaGFyc2V0PSJVVEYtOCI+CisgICAgPHRp
dGxlPlRlc3RzIGZvciBQcmV2YWxlbnQgUmVzb3VyY2UgV2l0aCBVc2VyIEludGVyYWN0aW9uIFRp
bWVvdXQ8L3RpdGxlPgorICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorICAgIGNvbnN0IGhv
c3RVbmRlclRlc3QgPSAiMTI3LjAuMC4xOjgwMDAiOworICAgIGNvbnN0IHN0YXRpc3RpY3NVcmwg
PSAiaHR0cDovLyIgKyBob3N0VW5kZXJUZXN0ICsgIi90ZW1wIjsKKyAgICBmdW5jdGlvbiBydW5U
ZXN0UnVubmVyVGVzdCgpIHsKKyAgICAgICAgaWYgKGRvY3VtZW50LmNvb2tpZSAhPT0gIiIpCisg
ICAgICAgICAgICB0ZXN0RmFpbGVkKCJkb2N1bWVudC5jb29raWUgbm90IGVtcHR5LiIpOworICAg
ICAgICBjb25zdCBjb29raWUgPSAidGVzdENvb2tpZT10ZXN0VmFsdWUiOworICAgICAgICBkb2N1
bWVudC5jb29raWUgPSBjb29raWUgKyAiOyBtYXgtYWdlPTEwMDsiOworICAgICAgICBpZiAoZG9j
dW1lbnQuY29va2llICE9PSBjb29raWUpCisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJkb2N1bWVu
dC5jb29raWUgZGlkIG5vdCBnZXQgc2V0LiIpOworCisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3Rh
dGlzdGljc1ByZXZhbGVudFJlc291cmNlKHN0YXRpc3RpY3NVcmwsIHRydWUpOworICAgICAgICBp
ZiAoIXRlc3RSdW5uZXIuaXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2Uoc3RhdGlzdGljc1Vy
bCkpCisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJIb3N0IGRpZCBub3QgZ2V0IHNldCBhcyBwcmV2
YWxlbnQgcmVzb3VyY2UuIik7CisKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzSGFz
SGFkVXNlckludGVyYWN0aW9uKHN0YXRpc3RpY3NVcmwsIHRydWUpOworICAgICAgICBpZiAoIXRl
c3RSdW5uZXIuaXNTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKHN0YXRpc3RpY3NVcmwp
KQorICAgICAgICAgICAgdGVzdEZhaWxlZCgiSG9zdCBkaWQgbm90IGdldCBsb2dnZWQgZm9yIHVz
ZXIgaW50ZXJhY3Rpb24uIik7CisKKyAgICAgICAgdGVzdFJ1bm5lci5pbnN0YWxsU3RhdGlzdGlj
c0RpZE1vZGlmeURhdGFSZWNvcmRzQ2FsbGJhY2soZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBp
ZiAoZG9jdW1lbnQuY29va2llICE9PSAiIikKKyAgICAgICAgICAgICAgICB0ZXN0RmFpbGVkKCJD
b29raWUgbm90IGRlbGV0ZWQ6ICIgKyBkb2N1bWVudC5jb29raWUpOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIHRlc3RQYXNzZWQoIkNvb2tpZSBkZWxldGVkLiIpOworICAgICAg
ICAgICAgdGVzdFJ1bm5lci5zdGF0aXN0aWNzUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSgpOworICAg
ICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgICAgIH0pOworICAgICAgICB0
ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFS
ZWNvcmRzUmVtb3ZhbChmYWxzZSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc01p
bmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92YWwoMCk7CisgICAgICAgIHRlc3RSdW5u
ZXIuc2V0U3RhdGlzdGljc1RpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oMCk7CisgICAgICAgIHNl
dFRpbWVvdXQoInRlc3RSdW5uZXIuc3RhdGlzdGljc0ZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxl
cigpIiwgMTAwMCk7CisgICAgfQorCisgICAgaWYgKGRvY3VtZW50LmxvY2F0aW9uLmhvc3QgPT09
IGhvc3RVbmRlclRlc3QgJiYgd2luZG93LnRlc3RSdW5uZXIgJiYgd2luZG93LmludGVybmFscykg
eworICAgICAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgaW50ZXJuYWxz
LnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKHRydWUpOworICAgICAgICB0ZXN0UnVu
bmVyLnNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKHRy
dWUpOworICAgICAgICBydW5UZXN0UnVubmVyVGVzdCgpOworICAgIH0KKzwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRl
c3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3ByZXZhbGVudC1y
ZXNvdXJjZS13aXRoLXVzZXItaW50ZXJhY3Rpb24uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wcmV2YWxlbnQt
cmVzb3VyY2Utd2l0aC11c2VyLWludGVyYWN0aW9uLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcHJldmFs
ZW50LXJlc291cmNlLXdpdGgtdXNlci1pbnRlcmFjdGlvbi5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNTYgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+
CisgICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiPgorICAgIDx0aXRsZT5UZXN0cyBmb3IgUHJldmFs
ZW50IFJlc291cmNlIFdpdGggVXNlciBJbnRlcmFjdGlvbjwvdGl0bGU+CisgICAgPHNjcmlwdCBz
cmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxzY3JpcHQ+CisgICAgY29uc3QgaG9zdFVuZGVyVGVzdCA9ICIxMjcuMC4wLjE6ODAw
MCI7CisgICAgY29uc3Qgc3RhdGlzdGljc1VybCA9ICJodHRwOi8vIiArIGhvc3RVbmRlclRlc3Qg
KyAiL3RlbXAiOworICAgIGNvbnN0IG90aGVyUHJldmFsZW50VXJsID0gImh0dHA6Ly9sb2NhbGhv
c3Q6ODAwMC90ZW1wIjsKKyAgICBmdW5jdGlvbiBydW5UZXN0UnVubmVyVGVzdCgpIHsKKyAgICAg
ICAgaWYgKGRvY3VtZW50LmNvb2tpZSAhPT0gIiIpCisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJk
b2N1bWVudC5jb29raWUgbm90IGVtcHR5LiIpOworICAgICAgICBjb25zdCBjb29raWUgPSAidGVz
dENvb2tpZT10ZXN0VmFsdWUiOworICAgICAgICBkb2N1bWVudC5jb29raWUgPSBjb29raWUgKyAi
OyBtYXgtYWdlPTEwMDsiOworICAgICAgICBpZiAoZG9jdW1lbnQuY29va2llICE9PSBjb29raWUp
CisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJkb2N1bWVudC5jb29raWUgZGlkIG5vdCBnZXQgc2V0
LiIpOworCisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNl
KHN0YXRpc3RpY3NVcmwsIHRydWUpOworICAgICAgICBpZiAoIXRlc3RSdW5uZXIuaXNTdGF0aXN0
aWNzUHJldmFsZW50UmVzb3VyY2Uoc3RhdGlzdGljc1VybCkpCisgICAgICAgICAgICB0ZXN0RmFp
bGVkKCJIb3N0IGRpZCBub3QgZ2V0IHNldCBhcyBwcmV2YWxlbnQgcmVzb3VyY2UuIik7CisKKyAg
ICAgICAgLy8gVGhpcyBpcyBkb25lIHRvIG5vdCBoYXZlIGFuIGVtcHR5IHNldCBvZiBwcmV2YWxl
bnQgcmVzb3VyY2VzLgorICAgICAgICAvLyBPdGhlcndpc2UgZGF0YSByZWNvcmRzIGFyZSBuZXZl
ciBzY2FubmVkLgorICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNv
dXJjZShvdGhlclByZXZhbGVudFVybCwgdHJ1ZSk7CisgICAgICAgIGlmICghdGVzdFJ1bm5lci5p
c1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShvdGhlclByZXZhbGVudFVybCkpCisgICAgICAg
ICAgICB0ZXN0RmFpbGVkKCJPdGhlciBob3N0IGRpZCBub3QgZ2V0IHNldCBhcyBwcmV2YWxlbnQg
cmVzb3VyY2UuIik7CisKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzSGFzSGFkVXNl
ckludGVyYWN0aW9uKHN0YXRpc3RpY3NVcmwsIHRydWUpOworICAgICAgICBpZiAoIXRlc3RSdW5u
ZXIuaXNTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKHN0YXRpc3RpY3NVcmwpKQorICAg
ICAgICAgICAgdGVzdEZhaWxlZCgiSG9zdCBkaWQgbm90IGdldCBsb2dnZWQgZm9yIHVzZXIgaW50
ZXJhY3Rpb24uIik7CisKKyAgICAgICAgdGVzdFJ1bm5lci5pbnN0YWxsU3RhdGlzdGljc0RpZE1v
ZGlmeURhdGFSZWNvcmRzQ2FsbGJhY2soZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBpZiAoZG9j
dW1lbnQuY29va2llID09PSBjb29raWUpCisgICAgICAgICAgICAgICAgdGVzdFBhc3NlZCgiQ29v
a2llIG5vdCBkZWxldGVkLiIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHRl
c3RGYWlsZWQoIkNvb2tpZSBkZWxldGVkIG9yIGRvY3VtZW50LmNvb2tpZSBjb250YWlucyBvdGhl
ciBjb29raWVzOiAiICsgZG9jdW1lbnQuY29va2llKTsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIu
c3RhdGlzdGljc1Jlc2V0VG9Db25zaXN0ZW50U3RhdGUoKTsKKyAgICAgICAgICAgIHRlc3RSdW5u
ZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9KTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0
aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoZmFs
c2UpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NNaW5pbXVtVGltZUJldHdlZWVu
RGF0YVJlY29yZHNSZW1vdmFsKDApOworICAgICAgICB0ZXN0UnVubmVyLnN0YXRpc3RpY3NGaXJl
RGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKKyAgICB9CisKKyAgICBpZiAoZG9jdW1lbnQubG9j
YXRpb24uaG9zdCA9PT0gaG9zdFVuZGVyVGVzdCAmJiB3aW5kb3cudGVzdFJ1bm5lciAmJiB3aW5k
b3cuaW50ZXJuYWxzKSB7CisgICAgICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworICAg
ICAgICBpbnRlcm5hbHMuc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQodHJ1ZSk7Cisg
ICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRz
V2VyZVNjYW5uZWQodHJ1ZSk7CisgICAgICAgIHJ1blRlc3RSdW5uZXJUZXN0KCk7CisgICAgfQor
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJ
bmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3MvcHJldmFsZW50LXJlc291cmNlLXdpdGhvdXQtdXNlci1pbnRlcmFjdGlvbi1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNl
TG9hZFN0YXRpc3RpY3MvcHJldmFsZW50LXJlc291cmNlLXdpdGhvdXQtdXNlci1pbnRlcmFjdGlv
bi1leHBlY3RlZC50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9s
b2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcHJldmFsZW50LXJlc291cmNlLXdpdGhvdXQt
dXNlci1pbnRlcmFjdGlvbi1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4
IEBACittYWluIGZyYW1lIC0gZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZQorbWFpbiBm
cmFtZSAtIGRpZENvbW1pdExvYWRGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRpZFJlY2VpdmVUaXRs
ZTogVGVzdHMgZm9yIFByZXZhbGVudCBSZXNvdXJjZSBXaXRob3V0IFVzZXIgSW50ZXJhY3Rpb24K
K21haW4gZnJhbWUgLSBkaWRGaW5pc2hEb2N1bWVudExvYWRGb3JGcmFtZQorbWFpbiBmcmFtZSAt
IGRpZEhhbmRsZU9ubG9hZEV2ZW50c0ZvckZyYW1lCittYWluIGZyYW1lIC0gZGlkRmluaXNoTG9h
ZEZvckZyYW1lCitQQVNTIENvb2tpZSBkZWxldGVkLgorCkluZGV4OiBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wcmV2YWxlbnQtcmVzb3VyY2Ut
d2l0aG91dC11c2VyLWludGVyYWN0aW9uLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcHJldmFsZW50LXJlc291
cmNlLXdpdGhvdXQtdXNlci1pbnRlcmFjdGlvbi5odG1sCShub25leGlzdGVudCkKKysrIExheW91
dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3ByZXZhbGVu
dC1yZXNvdXJjZS13aXRob3V0LXVzZXItaW50ZXJhY3Rpb24uaHRtbAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQ5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFk
PgorICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KKyAgICA8dGl0bGU+VGVzdHMgZm9yIFByZXZh
bGVudCBSZXNvdXJjZSBXaXRob3V0IFVzZXIgSW50ZXJhY3Rpb248L3RpdGxlPgorICAgIDxzY3Jp
cHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+Cis8c2NyaXB0PgorICAgIGNvbnN0IGhvc3RVbmRlclRlc3QgPSAiMTI3LjAuMC4x
OjgwMDAiOworICAgIGNvbnN0IHN0YXRpc3RpY3NVcmwgPSAiaHR0cDovLyIgKyBob3N0VW5kZXJU
ZXN0ICsgIi90ZW1wIjsKKyAgICBmdW5jdGlvbiBydW5UZXN0UnVubmVyVGVzdCgpIHsKKyAgICAg
ICAgaWYgKGRvY3VtZW50LmNvb2tpZSAhPT0gIiIpCisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJk
b2N1bWVudC5jb29raWUgbm90IGVtcHR5LiIpOworICAgICAgICBjb25zdCBjb29raWUgPSAidGVz
dENvb2tpZT10ZXN0VmFsdWUiOworICAgICAgICBkb2N1bWVudC5jb29raWUgPSBjb29raWUgKyAi
OyBtYXgtYWdlPTEwMDsiOworICAgICAgICBpZiAoZG9jdW1lbnQuY29va2llICE9PSBjb29raWUp
CisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJkb2N1bWVudC5jb29raWUgZGlkIG5vdCBnZXQgc2V0
LiIpOworCisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNl
KHN0YXRpc3RpY3NVcmwsIHRydWUpOworICAgICAgICBpZiAoIXRlc3RSdW5uZXIuaXNTdGF0aXN0
aWNzUHJldmFsZW50UmVzb3VyY2Uoc3RhdGlzdGljc1VybCkpCisgICAgICAgICAgICB0ZXN0RmFp
bGVkKCJIb3N0IGRpZCBub3QgZ2V0IHNldCBhcyBwcmV2YWxlbnQgcmVzb3VyY2UuIik7CisKKyAg
ICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKHN0YXRp
c3RpY3NVcmwsIGZhbHNlKTsKKyAgICAgICAgaWYgKHRlc3RSdW5uZXIuaXNTdGF0aXN0aWNzSGFz
SGFkVXNlckludGVyYWN0aW9uKHN0YXRpc3RpY3NVcmwpKQorICAgICAgICAgICAgdGVzdEZhaWxl
ZCgiSG9zdCBkaWQgbm90IGdldCBjbGVhcmVkIG9mIHVzZXIgaW50ZXJhY3Rpb24uIik7CisKKyAg
ICAgICAgdGVzdFJ1bm5lci5pbnN0YWxsU3RhdGlzdGljc0RpZE1vZGlmeURhdGFSZWNvcmRzQ2Fs
bGJhY2soZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBpZiAoZG9jdW1lbnQuY29va2llICE9PSAi
IikKKyAgICAgICAgICAgICAgICB0ZXN0RmFpbGVkKCJDb29raWUgbm90IGRlbGV0ZWQ6ICIgKyBk
b2N1bWVudC5jb29raWUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHRlc3RQ
YXNzZWQoIkNvb2tpZSBkZWxldGVkLiIpOworICAgICAgICAgICAgdGVzdFJ1bm5lci5zdGF0aXN0
aWNzUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSgpOworICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3Rp
ZnlEb25lKCk7CisgICAgICAgIH0pOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NT
aG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChmYWxzZSk7Cisg
ICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVj
b3Jkc1JlbW92YWwoMCk7CisgICAgICAgIHRlc3RSdW5uZXIuc3RhdGlzdGljc0ZpcmVEYXRhTW9k
aWZpY2F0aW9uSGFuZGxlcigpOworICAgIH0KKworICAgIGlmIChkb2N1bWVudC5sb2NhdGlvbi5o
b3N0ID09PSBob3N0VW5kZXJUZXN0ICYmIHdpbmRvdy50ZXN0UnVubmVyICYmIHdpbmRvdy5pbnRl
cm5hbHMpIHsKKyAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgICAgIGlu
dGVybmFscy5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCh0cnVlKTsKKyAgICAgICAg
dGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nh
bm5lZCh0cnVlKTsKKyAgICAgICAgcnVuVGVzdFJ1bm5lclRlc3QoKTsKKyAgICB9Cis8L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS93azIvVGVzdEV4cGVjdGF0aW9ucwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS93azIvVGVzdEV4cGVjdGF0aW9ucwkocmV2aXNpb24gMjExOTMx
KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2syL1Rlc3RFeHBlY3RhdGlvbnMJKHdvcmtpbmcg
Y29weSkKQEAgLTY5OCw2ICs2OTgsOSBAQCBodHRwL3Rlc3RzL21pc2Mvd2lsbC1zZW5kLXJlcXVl
c3Qtd2l0aC1jCiAjIGJ1ZyAxNjIyODEKIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
ZmV0Y2gvYXBpL3JlcXVlc3QvcmVxdWVzdC1jYWNoZS1vbmx5LWlmLWNhY2hlZC5odG1sIFsgRmFp
bHVyZSBdCiAKKyMgUmVzb3VyY2UgTG9hZCBTdGF0aXN0aWNzIGFyZSBvbmx5IHN1cHBvcnRlZCBp
biBXZWJLaXQyCitodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy8gWyBQ
YXNzIF0KKwogIyMjIEVORCBPRiAoNSkgUHJvZ3Jlc3Npb25zLCBleHBlY3RlZCBzdWNjZXNzZXMg
dGhhdCBhcmUgZXhwZWN0ZWQgZmFpbHVyZXMgaW4gV2ViS2l0MS4KICMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>301246</attachid>
            <date>2017-02-10 22:27:53 -0800</date>
            <delta_ts>2017-02-10 23:36:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-167474-20170210222526.patch</filename>
            <type>text/plain</type>
            <size>124100</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMjE2NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc1IEBACisyMDE3LTAyLTEwICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFVwZGF0ZXMgdG8gUmVzb3Vy
Y2UgTG9hZCBTdGF0aXN0aWNzOiBHZXQgdGhlIHJpZ2h0IHdlYnNpdGUgZGF0YSBzdG9yZSBhbmQg
aW50cm9kdWNlIHRpbWVvdXQgZm9yIHVzZXIgaW50ZXJhY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NzQ3NAorICAgICAgICA8cmRhcjovL3By
b2JsZW0vMjQ2ODE4MDg+CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yNDcwMzI4Nj4KKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzMwMjkwMjcwPgorCisgICAgICAgIFRoaXMgcGF0Y2ggZG9lcyB0
aGUgZm9sbG93aW5nOgorICAgICAgICAxLiBHZXRzIHRoZSByaWdodCB3ZWJzaXRlIGRhdGEgc3Rv
cmUuIEFQSTo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpCisgICAgICAgICAg
ICBkb2VzIG5vdCBwcm92aWRlIHRoZSByaWdodCBkYXRhIHN0b3JlLgorICAgICAgICAyLiBJbnRy
b2R1Y2VzIHRpbWVvdXQgZm9yIHVzZXIgaW50ZXJhY3Rpb24uIEEgZG9tYWluIG5lZWRzIGludGVy
YWN0aW9uIGV2ZXJ5IDMwCisgICAgICAgICAgICBkYXlzIHRvIHN0YXkgaW4gdGhhdCBjYXRlZ29y
eS4KKyAgICAgICAgMy4gQWRkcyBncmFuZGZhdGhlcmVkIHRvIHRoZSBzdGF0aXN0aWNzIG1vZGVs
IGluIHByZXBhcmF0aW9uIGZvciBncmFuZGZhdGhlcmluZyBvZgorICAgICAgICAgICAgZXhpc3Rp
bmcgZGF0YSByZWNvcmRzLgorICAgICAgICA0LiBBZGRzIHRlc3QgaW5mcmFzdHJ1Y3R1cmUgdG8g
YWxsb3cgdGVzdGluZyBvZiB0aGUgdmFyaW91cyBydWxlcyBpbiBwbGFjZSBmb3IKKyAgICAgICAg
ICAgIGRhdGEgcmVjb3JkcyByZW1vdmFsLgorICAgICAgICA1LiBGaXhlcyB2YXJpb3VzIHNtYWxs
ZXIgYnVncyB0aGF0IHdlcmUgZm91bmQgYXMgcGFydCBvZiBzZXR0aW5nIHVwIHRoZSB0ZXN0cy4K
KyAgICAgICAgNi4gUmVncmVzc2VzIHRoZSBkYXRhIHJlY29yZHMgcmVtb3ZhbCBjb3VudGluZy4g
V2UgbmVlZCB0byBjb21lIHVwIHdpdGggYSB0aHJlYWQKKyAgICAgICAgICAgIHNhZmUgd2F5IG9m
IGdhdGhlcmluZyByZW1vdmFsIHN0YXRpc3RpY3MgZnJvbSBtb3JlIHRoYW4gb25lIGRhdGEgc3Rv
cmUgbm93CisgICAgICAgICAgICB0aGF0IHdlIHBvdGVudGlhbGx5IGludGVyYWN0IHdpdGggbXVs
dGlwbGUgc3RvcmVzLgorICAgICAgICA3LiBBZGRzIGEgZmlyc3Qgc2V0IG9mIGxheW91dCB0ZXN0
cyBmb3IgcmVzb3VyY2UgbG9hZCBzdGF0aXN0aWNzLgorCisgICAgICAgIFJldmlld2VkIGJ5IEFu
ZHkgRXN0ZXMuCisKKyAgICAgICAgVGVzdHM6IGh0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzL25vbi1wcmV2YWxlbnQtcmVzb3VyY2Utd2l0aC11c2VyLWludGVyYWN0aW9u
Lmh0bWwKKyAgICAgICAgICAgICAgIGh0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzL25vbi1wcmV2YWxlbnQtcmVzb3VyY2Utd2l0aG91dC11c2VyLWludGVyYWN0aW9uLmh0
bWwKKyAgICAgICAgICAgICAgIGh0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzL3ByZXZhbGVudC1yZXNvdXJjZS13aXRoLXVzZXItaW50ZXJhY3Rpb24tdGltZW91dC5odG1s
CisgICAgICAgICAgICAgICBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGlj
cy9wcmV2YWxlbnQtcmVzb3VyY2Utd2l0aC11c2VyLWludGVyYWN0aW9uLmh0bWwKKyAgICAgICAg
ICAgICAgIGh0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3ByZXZhbGVu
dC1yZXNvdXJjZS13aXRob3V0LXVzZXItaW50ZXJhY3Rpb24uaHRtbAorCisgICAgICAgICogZG9t
L0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp1cGRhdGVMYXN0SGFu
ZGxlZFVzZXJHZXN0dXJlVGltZXN0YW1wKToKKyAgICAgICAgICAgIFRoaXMgbm93IGNhbGxzIFJl
c291cmNlTG9hZE9ic2VydmVyOjpsb2dVc2VySW50ZXJhY3Rpb24oKSBldmVyeSB0aW1lIHNpbmNl
CisgICAgICAgICAgICB3ZSB3YW50IHRvIGtlZXAgdHJhY2sgb2YgdGhlIG1vc3QgcmVjZW50IHVz
ZXIgaW50ZXJhY3Rpb24uCisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpzdGF0aXN0aWNzU3Rv
cmUpOgorICAgICAgICAgICAgTmV3IGdldHRlciB1c2VkIGJ5IFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NNYW5hZ2VyOjpyZXNldFRvQ29uc2lzdGVudFN0YXRlKCkuCisgICAgICAgIChXZWJDb3Jl
OjpyZWR1Y2VUaW1lUmVzb2x1dGlvblRvT25lRGF5KToKKyAgICAgICAgICAgIENvbnZlbmllbmNl
IGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1Vz
ZXJJbnRlcmFjdGlvbldpdGhSZWR1Y2VkVGltZVJlc29sdXRpb24pOgorICAgICAgICAgICAgUmVk
dWNlcyB0aW1lIHJlc29sdXRpb24gZm9yIHByaXZhY3kgcmVhc29ucy4KKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmNsZWFyVXNlckludGVyYWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpoYXNIYWRVc2VySW50ZXJhY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNldFByZXZhbGVu
dFJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjppc1By
ZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVy
OjpjbGVhclByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9h
ZE9ic2VydmVyOjpzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpmaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIpOgor
ICAgICAgICAgICAgTmV3IGZ1bmN0aW9ucyB0aGF0IGFsbG93IFdlYktpdFRlc3RSdW5uZXIgdG8g
c3RhZ2UgZXhhY3QKKyAgICAgICAgICAgIHN0YXRpc3RpY3MsIGZpcmUgdGhlIGhhbmRsZXIsIGFu
ZCB0ZXN0IHRoZSBvdXRjb21lLgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZl
ci5oOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M6OmVuY29kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljczo6dG9TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljczo6bWVyZ2UpOgorICAgICAgICAgICAgU3VwcG9ydCBmb3Ig
c3RhdGlzdGljcyBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uLCBncmFuZGZhdGhlcmVkLCBhbmQK
KyAgICAgICAgICAgIGRhdGFSZWNvcmRzUmVtb3ZlZC4KKyAgICAgICAgKiBsb2FkZXIvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcy5oOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgICAgIE5ldyBmdW5j
dGlvbiB0aGF0IGFsbG93cyBXZWJLaXRUZXN0UnVubmVyIHRvIHRlc3QgCisgICAgICAgICAgICBh
Z2luZyBvdXQgb2YgdXNlciBpbnRlcmFjdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFzSGFkUmVjZW50VXNlckludGVyYWN0aW9uKToKKyAgICAg
ICAgICAgIE5vdyB0YWtlcyBpbnRvIGFjY291bnQgdGhlIHRpbWVzdGFtcCBhbmQgYWdlcworICAg
ICAgICAgICAgb3V0IHVzZXIgaW50ZXJhY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnByZXZhbGVudFJlc291cmNlRG9tYWluc1dpdGhvdXRVc2Vy
SW50ZXJhY3Rpb24pOgorICAgICAgICAgICAgTm93IG1ha2VzIHVzZSBvZiBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6Omhhc0hhZFJlY2VudFVzZXJJbnRlcmFjdGlvbigpLgorICAgICAgICAq
IGxvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaDoKKwogMjAxNy0wMi0xMCAgQ3Nh
YmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAgIEZpeCB0aGUgIUVO
QUJMRShXRUJHTCkgYnVpbGQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24g
MjExOTkzKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjM1OSwxMCArNjM1OSw4IEBAIERvY3VtZW50OjpSZWdpb25GaXhlZFBhaXIgRG9jdW1l
bnQ6OmFic28KIAogdm9pZCBEb2N1bWVudDo6dXBkYXRlTGFzdEhhbmRsZWRVc2VyR2VzdHVyZVRp
bWVzdGFtcCgpCiB7Ci0gICAgaWYgKCFtX2xhc3RIYW5kbGVkVXNlckdlc3R1cmVUaW1lc3RhbXAp
Ci0gICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWRPYnNlcnZlcigpLmxvZ1VzZXJJ
bnRlcmFjdGlvbigqdGhpcyk7Ci0KICAgICBtX2xhc3RIYW5kbGVkVXNlckdlc3R1cmVUaW1lc3Rh
bXAgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKKyAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5sb2dVc2VySW50ZXJhY3Rpb25XaXRoUmVkdWNlZFRpbWVS
ZXNvbHV0aW9uKCp0aGlzKTsKIH0KIAogdm9pZCBEb2N1bWVudDo6c3RhcnRUcmFja2luZ1N0eWxl
UmVjYWxjcygpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRP
YnNlcnZlci5jcHAJKHJldmlzaW9uIDIxMTk5MykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9S
ZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDIsMTcgKzQyLDI3IEBACiAj
aW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRl
ICJVUkwuaCIKKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAorLy8gT25lIGRheSBpbiBzZWNvbmRzLgorc3RhdGljIGF1dG8g
dGltZXN0YW1wUmVzb2x1dGlvbiA9IDg2NDAwOworCiBSZXNvdXJjZUxvYWRPYnNlcnZlciYgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZE9ic2VydmVyKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8UmVzb3VyY2VMb2FkT2JzZXJ2ZXI+IHJlc291cmNlTG9hZE9ic2VydmVyOwogICAg
IHJldHVybiByZXNvdXJjZUxvYWRPYnNlcnZlcjsKIH0KIAorUmVmUHRyPFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZT4gUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnN0YXRpc3RpY3NTdG9yZSgpCit7
CisgICAgQVNTRVJUKG1fc3RvcmUpOworICAgIHJldHVybiBtX3N0b3JlOworfQorCiB2b2lkIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzZXRTdGF0aXN0aWNzU3RvcmUoUmVmPFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZT4mJiBzdG9yZSkKIHsKICAgICBtX3N0b3JlID0gV1RGTW92ZShzdG9yZSk7
CkBAIC0yNzgsNyArMjg4LDEyIEBAIHZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1dlYlNv
Y2tldEwKICAgICAgICAgbV9zdG9yZS0+ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CiB9
CiAKLXZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBE
b2N1bWVudCYgZG9jdW1lbnQpCitzdGF0aWMgZG91YmxlIHJlZHVjZVRpbWVSZXNvbHV0aW9uVG9P
bmVEYXkoZG91YmxlIHNlY29uZHMpCit7CisgICAgcmV0dXJuIHN0ZDo6Zmxvb3Ioc2Vjb25kcyAv
IHRpbWVzdGFtcFJlc29sdXRpb24pICogdGltZXN0YW1wUmVzb2x1dGlvbjsKK30KKwordm9pZCBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nVXNlckludGVyYWN0aW9uV2l0aFJlZHVjZWRUaW1lUmVz
b2x1dGlvbihjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQpCiB7CiAgICAgQVNTRVJUKGRvY3VtZW50
LnBhZ2UoKSk7CiAKQEAgLTI4NiwxNSArMzAxLDkwIEBAIHZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OmxvZ1VzZXJJbnRlcmEKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byYgdXJsID0gZG9j
dW1lbnQudXJsKCk7Ci0KICAgICBpZiAodXJsLmlzQmxhbmtVUkwoKSB8fCB1cmwuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvJiBzdGF0aXN0aWNzID0gbV9zdG9yZS0+ZW5z
dXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihwcmltYXJ5RG9tYWluKHVybCkp
OworICAgIGRvdWJsZSBuZXdUaW1lc3RhbXAgPSByZWR1Y2VUaW1lUmVzb2x1dGlvblRvT25lRGF5
KFdURjo6Y3VycmVudFRpbWUoKSk7CisgICAgaWYgKG5ld1RpbWVzdGFtcCA9PSBzdGF0aXN0aWNz
Lm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24pCisgICAgICAgIHJldHVybjsKKwogICAgIHN0YXRp
c3RpY3MuaGFkVXNlckludGVyYWN0aW9uID0gdHJ1ZTsKKyAgICBzdGF0aXN0aWNzLm1vc3RSZWNl
bnRVc2VySW50ZXJhY3Rpb24gPSBuZXdUaW1lc3RhbXA7CiAgICAgbV9zdG9yZS0+ZmlyZURhdGFN
b2RpZmljYXRpb25IYW5kbGVyKCk7CiB9CisKK3ZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6Omxv
Z1VzZXJJbnRlcmFjdGlvbihjb25zdCBVUkwmIHVybCkKK3sKKyAgICBpZiAodXJsLmlzQmxhbmtV
UkwoKSB8fCB1cmwuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvJiBzdGF0
aXN0aWNzID0gbV9zdG9yZS0+ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFp
bihwcmltYXJ5RG9tYWluKHVybCkpOworICAgIHN0YXRpc3RpY3MuaGFkVXNlckludGVyYWN0aW9u
ID0gdHJ1ZTsKKyAgICBzdGF0aXN0aWNzLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24gPSBXVEY6
OmN1cnJlbnRUaW1lKCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmNsZWFyVXNl
ckludGVyYWN0aW9uKGNvbnN0IFVSTCYgdXJsKQoreworICAgIGlmICh1cmwuaXNCbGFua1VSTCgp
IHx8IHVybC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8mIHN0YXRpc3Rp
Y3MgPSBtX3N0b3JlLT5lbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHBy
aW1hcnlEb21haW4odXJsKSk7CisgICAgCisgICAgc3RhdGlzdGljcy5oYWRVc2VySW50ZXJhY3Rp
b24gPSBmYWxzZTsKKyAgICBzdGF0aXN0aWNzLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24gPSAw
OworfQorCitib29sIFJlc291cmNlTG9hZE9ic2VydmVyOjpoYXNIYWRVc2VySW50ZXJhY3Rpb24o
Y29uc3QgVVJMJiB1cmwpCit7CisgICAgaWYgKHVybC5pc0JsYW5rVVJMKCkgfHwgdXJsLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byYgc3RhdGlzdGljcyA9IG1f
c3RvcmUtPmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJpbWFyeURv
bWFpbih1cmwpKTsKICAgICAKKyAgICByZXR1cm4gbV9zdG9yZS0+aGFzSGFkUmVjZW50VXNlcklu
dGVyYWN0aW9uKHN0YXRpc3RpY3MpOworfQorCit2b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
ZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCkKK3sKKyAgICBpZiAodXJsLmlzQmxh
bmtVUkwoKSB8fCB1cmwuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvJiBz
dGF0aXN0aWNzID0gbV9zdG9yZS0+ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURv
bWFpbihwcmltYXJ5RG9tYWluKHVybCkpOworICAgIAorICAgIHN0YXRpc3RpY3MuaXNQcmV2YWxl
bnRSZXNvdXJjZSA9IHRydWU7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmlzUHJl
dmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJiB1cmwpCit7CisgICAgaWYgKHVybC5pc0JsYW5rVVJM
KCkgfHwgdXJsLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byYg
c3RhdGlzdGljcyA9IG1fc3RvcmUtPmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlE
b21haW4ocHJpbWFyeURvbWFpbih1cmwpKTsKKyAgICAKKyAgICByZXR1cm4gc3RhdGlzdGljcy5p
c1ByZXZhbGVudFJlc291cmNlOworfQorICAgIAordm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBVUkwmIHVybCkKK3sKKyAgICBpZiAodXJsLmlz
QmxhbmtVUkwoKSB8fCB1cmwuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRv
JiBzdGF0aXN0aWNzID0gbV9zdG9yZS0+ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFy
eURvbWFpbihwcmltYXJ5RG9tYWluKHVybCkpOworICAgIAorICAgIHN0YXRpc3RpY3MuaXNQcmV2
YWxlbnRSZXNvdXJjZSA9IGZhbHNlOworfQorCit2b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
ZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKGRvdWJsZSBzZWNvbmRzKQoreworICAgIG1fc3Rv
cmUtPnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oc2Vjb25kcyk7Cit9CisKK3ZvaWQgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OmZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpCit7CisgICAg
bV9zdG9yZS0+ZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7Cit9CisKIFN0cmluZyBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6cHJpbWFyeURvbWFpbihjb25zdCBVUkwmIHVybCkKIHsKICAgICBT
dHJpbmcgcHJpbWFyeURvbWFpbjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJj
ZUxvYWRPYnNlcnZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNv
dXJjZUxvYWRPYnNlcnZlci5oCShyZXZpc2lvbiAyMTE5OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ4LDkgKzQ4LDIy
IEBAIHB1YmxpYzoKICAgICB2b2lkIGxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBGcmFtZSYgZnJh
bWUsIGNvbnN0IEZyYW1lJiB0b3BGcmFtZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBuZXdSZXF1
ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKTsKICAgICB2b2lk
IGxvZ1N1YnJlc291cmNlTG9hZGluZyhjb25zdCBGcmFtZSosIGNvbnN0IFJlc291cmNlUmVxdWVz
dCYgbmV3UmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSk7
CiAgICAgdm9pZCBsb2dXZWJTb2NrZXRMb2FkaW5nKGNvbnN0IEZyYW1lKiwgY29uc3QgVVJMJik7
CisgICAgdm9pZCBsb2dVc2VySW50ZXJhY3Rpb25XaXRoUmVkdWNlZFRpbWVSZXNvbHV0aW9uKGNv
bnN0IERvY3VtZW50Jik7CiAKLSAgICB2b2lkIGxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBEb2N1
bWVudCYpOwotICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgbG9nVXNlckludGVyYWN0aW9u
KGNvbnN0IFVSTCYpOworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaGFzSGFkVXNlckludGVyYWN0
aW9uKGNvbnN0IFVSTCYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xlYXJVc2VySW50ZXJh
Y3Rpb24oY29uc3QgVVJMJik7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFByZXZhbGVu
dFJlc291cmNlKGNvbnN0IFVSTCYpOworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNQcmV2YWxl
bnRSZXNvdXJjZShjb25zdCBVUkwmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFyUHJl
dmFsZW50UmVzb3VyY2UoY29uc3QgVVJMJik7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNl
dFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oZG91YmxlIHNlY29uZHMpOworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0UmVkdWNlZFRpbWVzdGFtcFJlc29sdXRpb24oZG91YmxlIHNlY29uZHMp
OworCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIo
KTsKKworICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU+IHN0YXRpc3RpY3NTdG9yZSgpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U3RhdGlz
dGljc1N0b3JlKFJlZjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+JiYpOwogCiAgICAgV0VC
Q09SRV9FWFBPUlQgU3RyaW5nIHN0YXRpc3RpY3NGb3JPcmlnaW4oY29uc3QgU3RyaW5nJik7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3Mu
Y3BwCShyZXZpc2lvbiAyMTE5OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VM
b2FkU3RhdGlzdGljcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MSw2ICs1MSw4IEBAIHZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljczo6ZW5jb2RlKEtleWUKICAgICAKICAgICAvLyBVc2VyIGludGVy
YWN0aW9uCiAgICAgZW5jb2Rlci5lbmNvZGVCb29sKCJoYWRVc2VySW50ZXJhY3Rpb24iLCBoYWRV
c2VySW50ZXJhY3Rpb24pOworICAgIGVuY29kZXIuZW5jb2RlRG91YmxlKCJtb3N0UmVjZW50VXNl
ckludGVyYWN0aW9uIiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbik7CisgICAgZW5jb2Rlci5l
bmNvZGVCb29sKCJncmFuZGZhdGhlcmVkIiwgZ3JhbmRmYXRoZXJlZCk7CiAgICAgCiAgICAgLy8g
VG9wIGZyYW1lIHN0YXRzCiAgICAgZW5jb2Rlci5lbmNvZGVCb29sKCJ0b3BGcmFtZUhhc0JlZW5O
YXZpZ2F0ZWRUb0JlZm9yZSIsIHRvcEZyYW1lSGFzQmVlbk5hdmlnYXRlZFRvQmVmb3JlKTsKQEAg
LTE3Nyw3ICsxNzksMTYgQEAgYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpkZWNvZGUoS2V5
ZQogCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZVVJbnQzMigiZGF0YVJlY29yZHNSZW1vdmVkIiwg
ZGF0YVJlY29yZHNSZW1vdmVkKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCisgICAg
aWYgKHZlcnNpb24gPCAzKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICghZGVjb2Rl
ci5kZWNvZGVEb3VibGUoIm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24iLCBtb3N0UmVjZW50VXNl
ckludGVyYWN0aW9uKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkZWNvZGVy
LmRlY29kZUJvb2woImdyYW5kZmF0aGVyZWQiLCBncmFuZGZhdGhlcmVkKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTIxNCw2ICsyMjUsMTEgQEAg
U3RyaW5nIFJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnRvU3RyaW5nKAogICAgIC8vIFVzZXIgaW50
ZXJhY3Rpb24KICAgICBhcHBlbmRCb29sZWFuKGJ1aWxkZXIsICJoYWRVc2VySW50ZXJhY3Rpb24i
LCBoYWRVc2VySW50ZXJhY3Rpb24pOwogICAgIGJ1aWxkZXIuYXBwZW5kKCdcbicpOworICAgIGJ1
aWxkZXIuYXBwZW5kTGl0ZXJhbCgiICAgIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb246ICIpOwor
ICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24pOworICAg
IGJ1aWxkZXIuYXBwZW5kKCdcbicpOworICAgIGFwcGVuZEJvb2xlYW4oYnVpbGRlciwgIiAgICBn
cmFuZGZhdGhlcmVkIiwgZ3JhbmRmYXRoZXJlZCk7CisgICAgYnVpbGRlci5hcHBlbmQoJ1xuJyk7
CiAgICAgCiAgICAgLy8gVG9wIGZyYW1lIHN0YXRzCiAgICAgYXBwZW5kQm9vbGVhbihidWlsZGVy
LCAidG9wRnJhbWVIYXNCZWVuTmF2aWdhdGVkVG9CZWZvcmUiLCB0b3BGcmFtZUhhc0JlZW5OYXZp
Z2F0ZWRUb0JlZm9yZSk7CkBAIC0yOTQsNyArMzEwLDE5IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljczo6bWVyZ2UoY29uc3QKIHsKICAgICBBU1NFUlQob3RoZXIuaGlnaExldmVsRG9tYWlu
ID09IGhpZ2hMZXZlbERvbWFpbik7CiAKLSAgICBoYWRVc2VySW50ZXJhY3Rpb24gfD0gb3RoZXIu
aGFkVXNlckludGVyYWN0aW9uOworICAgIGlmICghb3RoZXIuaGFkVXNlckludGVyYWN0aW9uKSB7
CisgICAgICAgIC8vIElmIHVzZXIgaW50ZXJhY3Rpb24gaGFzIGJlZW4gcmVzZXQgZG8gc28gaGVy
ZSB0b28uCisgICAgICAgIC8vIEVsc2UsIGRvIG5vdGhpbmcuCisgICAgICAgIGlmICghb3RoZXIu
bW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbikgeworICAgICAgICAgICAgaGFkVXNlckludGVyYWN0
aW9uID0gZmFsc2U7CisgICAgICAgICAgICBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uID0gMDsK
KyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGhhZFVzZXJJbnRlcmFjdGlvbiA9IHRy
dWU7CisgICAgICAgIGlmIChtb3N0UmVjZW50VXNlckludGVyYWN0aW9uIDwgb3RoZXIubW9zdFJl
Y2VudFVzZXJJbnRlcmFjdGlvbikKKyAgICAgICAgICAgIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rp
b24gPSBvdGhlci5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uOworICAgIH0KKyAgICBncmFuZGZh
dGhlcmVkIHw9IG90aGVyLmdyYW5kZmF0aGVyZWQ7CiAgICAgCiAgICAgLy8gVG9wIGZyYW1lIHN0
YXRzCiAgICAgdG9wRnJhbWVIYXNCZWVuUmVkaXJlY3RlZFRvICs9IG90aGVyLnRvcEZyYW1lSGFz
QmVlblJlZGlyZWN0ZWRUbzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291
cmNlTG9hZFN0YXRpc3RpY3MuaAkocmV2aXNpb24gMjExOTkzKQorKysgU291cmNlL1dlYkNvcmUv
bG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDcgKzUz
LDEwIEBAIHN0cnVjdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzIHsKIAogICAgIC8vIFVzZXIgaW50
ZXJhY3Rpb24KICAgICBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiB7IGZhbHNlIH07Ci0gICAgCisg
ICAgLy8gVGltZXN0YW1wLiBEZWZhdWx0IHZhbHVlIGlzIG5lZ2F0aXZlLCAwIG1lYW5zIGl0IHdh
cyByZXNldC4KKyAgICBkb3VibGUgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiB7IC0xIH07Cisg
ICAgYm9vbCBncmFuZGZhdGhlcmVkIHsgZmFsc2UgfTsKKwogICAgIC8vIFRvcCBmcmFtZSBzdGF0
cwogICAgIHVuc2lnbmVkIHRvcEZyYW1lSGFzQmVlblJlZGlyZWN0ZWRUbyB7IDAgfTsKICAgICB1
bnNpZ25lZCB0b3BGcmFtZUhhc0JlZW5SZWRpcmVjdGVkRnJvbSB7IDAgfTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUu
Y3BwCShyZXZpc2lvbiAyMTE5OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMywxMSArMzMsMTQgQEAKICNp
bmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVy
LmgiCiAjaW5jbHVkZSAiVVJMLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5j
bHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3Rh
dGljIGNvbnN0IGF1dG8gc3RhdGlzdGljc01vZGVsVmVyc2lvbiA9IDI7CitzdGF0aWMgY29uc3Qg
YXV0byBzdGF0aXN0aWNzTW9kZWxWZXJzaW9uID0gMzsKKy8vIDMwIGRheXMgaW4gc2Vjb25kcwor
c3RhdGljIGF1dG8gdGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbiA9IDI1OTIwMDA7CiAKIFJlZjxS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
Y3JlYXRlKCkKIHsKQEAgLTE0NCwxNyArMTQ3LDQwIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpmaXJlRGEKICAgICAgICAgbV9kYXRhQWRkZWRIYW5kbGVyKCk7CiB9CiAKK3Zv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0
aW9uKGRvdWJsZSBzZWNvbmRzKQoreworICAgIGlmIChzZWNvbmRzID49IDApCisgICAgICAgIHRp
bWVUb0xpdmVVc2VySW50ZXJhY3Rpb24gPSBzZWNvbmRzOworfQorCiB2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6cHJvY2Vzc1N0YXRpc3RpY3Moc3RkOjpmdW5jdGlvbjx2b2lkKFJl
c291cmNlTG9hZFN0YXRpc3RpY3MmKT4mJiBwcm9jZXNzRnVuY3Rpb24pCiB7CiAgICAgZm9yIChh
dXRvJiByZXNvdXJjZVN0YXRpc3RpYyA6IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnZhbHVlcygp
KQogICAgICAgICBwcm9jZXNzRnVuY3Rpb24ocmVzb3VyY2VTdGF0aXN0aWMpOwogfQogCitib29s
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFzSGFkUmVjZW50VXNlckludGVyYWN0aW9u
KFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHJlc291cmNlU3RhdGlzdGljKQoreworICAgIGlmICgh
cmVzb3VyY2VTdGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAoY3VycmVudFRpbWUoKSA+IHJlc291cmNlU3RhdGlzdGljLm1vc3RSZWNl
bnRVc2VySW50ZXJhY3Rpb24gKyB0aW1lVG9MaXZlVXNlckludGVyYWN0aW9uKSB7CisgICAgICAg
IC8vIERyb3AgcHJpdmFjeSBzZW5zaXRpdmUgZGF0YSBiZWNhdXNlIHdlIG5vIGxvbmdlciBuZWVk
IGl0LgorICAgICAgICAvLyBTZXQgdGltZXN0YW1wIHRvIDAuMCBzbyB0aGF0IHN0YXRpc3RpY3Mg
bWVyZ2Ugd2lsbCBrbm93CisgICAgICAgIC8vIGl0IGhhcyBiZWVuIHJlc2V0IGFzIG9wcG9zZWQg
dG8gaXRzIGRlZmF1bHQgLTEuCisgICAgICAgIHJlc291cmNlU3RhdGlzdGljLm1vc3RSZWNlbnRV
c2VySW50ZXJhY3Rpb24gPSAwOworICAgICAgICByZXNvdXJjZVN0YXRpc3RpYy5oYWRVc2VySW50
ZXJhY3Rpb24gPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJl
dHVybiB0cnVlOworfQorCiBWZWN0b3I8U3RyaW5nPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnByZXZhbGVudFJlc291cmNlRG9tYWluc1dpdGhvdXRVc2VySW50ZXJhY3Rpb24oKQogewog
ICAgIFZlY3RvcjxTdHJpbmc+IHByZXZhbGVudFJlc291cmNlczsKICAgICBmb3IgKGF1dG8mIHJl
c291cmNlU3RhdGlzdGljIDogbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAudmFsdWVzKCkpIHsKLSAg
ICAgICAgaWYgKHJlc291cmNlU3RhdGlzdGljLmlzUHJldmFsZW50UmVzb3VyY2UgJiYgIXJlc291
cmNlU3RhdGlzdGljLmhhZFVzZXJJbnRlcmFjdGlvbikKKyAgICAgICAgaWYgKHJlc291cmNlU3Rh
dGlzdGljLmlzUHJldmFsZW50UmVzb3VyY2UgJiYgIWhhc0hhZFJlY2VudFVzZXJJbnRlcmFjdGlv
bihyZXNvdXJjZVN0YXRpc3RpYykpCiAgICAgICAgICAgICBwcmV2YWxlbnRSZXNvdXJjZXMuYXBw
ZW5kKHJlc291cmNlU3RhdGlzdGljLmhpZ2hMZXZlbERvbWFpbik7CiAgICAgfQogICAgIHJldHVy
biBwcmV2YWxlbnRSZXNvdXJjZXM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9h
ZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCShyZXZpc2lvbiAyMTE5OTMpCisrKyBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC01OSw5ICs1OSwxMSBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBzZXROb3RpZmljYXRpb25DYWxsYmFjayhzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gaGFuZGxlcik7
CiAKICAgICB2b2lkIGZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOworICAgIHZvaWQgc2V0
VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihkb3VibGUgc2Vjb25kcyk7CiAKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHByb2Nlc3NTdGF0aXN0aWNzKHN0ZDo6ZnVuY3Rpb248dm9pZChSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzJik+JiYpOwogCisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBoYXNIYWRS
ZWNlbnRVc2VySW50ZXJhY3Rpb24oUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpOwogICAgIFdFQkNP
UkVfRVhQT1JUIFZlY3RvcjxTdHJpbmc+IHByZXZhbGVudFJlc291cmNlRG9tYWluc1dpdGhvdXRV
c2VySW50ZXJhY3Rpb24oKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHVwZGF0ZVN0YXRpc3Rp
Y3NGb3JSZW1vdmVkRGF0YVJlY29yZHMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHByZXZhbGVudFJl
c291cmNlRG9tYWlucyk7CiBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMjEyMTY2
KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTMwIEBACisyMDE3LTAyLTEwICBKb2huIFdpbGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgor
CisgICAgICAgIFVwZGF0ZXMgdG8gUmVzb3VyY2UgTG9hZCBTdGF0aXN0aWNzOiBHZXQgdGhlIHJp
Z2h0IHdlYnNpdGUgZGF0YSBzdG9yZSBhbmQgaW50cm9kdWNlIHRpbWVvdXQgZm9yIHVzZXIgaW50
ZXJhY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2NzQ3NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjQ2ODE4MDg+CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS8yNDcwMzI4Nj4KKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMwMjkwMjcwPgor
CisgICAgICAgIFRoaXMgcGF0Y2ggZG9lcyB0aGUgZm9sbG93aW5nOgorICAgICAgICAxLiBHZXRz
IHRoZSByaWdodCB3ZWJzaXRlIGRhdGEgc3RvcmUuIEFQSTo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVm
YXVsdERhdGFTdG9yZSgpCisgICAgICAgICAgICBkb2VzIG5vdCBwcm92aWRlIHRoZSByaWdodCBk
YXRhIHN0b3JlLgorICAgICAgICAyLiBJbnRyb2R1Y2VzIHRpbWVvdXQgZm9yIHVzZXIgaW50ZXJh
Y3Rpb24uIEEgZG9tYWluIG5lZWRzIGludGVyYWN0aW9uIGV2ZXJ5IDMwCisgICAgICAgICAgICBk
YXlzIHRvIHN0YXkgaW4gdGhhdCBjYXRlZ29yeS4KKyAgICAgICAgMy4gQWRkcyBncmFuZGZhdGhl
cmVkIHRvIHRoZSBzdGF0aXN0aWNzIG1vZGVsIGluIHByZXBhcmF0aW9uIGZvciBncmFuZGZhdGhl
cmluZyBvZgorICAgICAgICAgICAgZXhpc3RpbmcgZGF0YSByZWNvcmRzLgorICAgICAgICA0LiBB
ZGRzIHRlc3QgaW5mcmFzdHJ1Y3R1cmUgdG8gYWxsb3cgdGVzdGluZyBvZiB0aGUgdmFyaW91cyBy
dWxlcyBpbiBwbGFjZSBmb3IKKyAgICAgICAgICAgIGRhdGEgcmVjb3JkcyByZW1vdmFsLgorICAg
ICAgICA1LiBGaXhlcyB2YXJpb3VzIHNtYWxsZXIgYnVncyB0aGF0IHdlcmUgZm91bmQgYXMgcGFy
dCBvZiBzZXR0aW5nIHVwIHRoZSB0ZXN0cy4KKyAgICAgICAgNi4gUmVncmVzc2VzIHRoZSBkYXRh
IHJlY29yZHMgcmVtb3ZhbCBjb3VudGluZy4gV2UgbmVlZCB0byBjb21lIHVwIHdpdGggYSB0aHJl
YWQKKyAgICAgICAgICAgIHNhZmUgd2F5IG9mIGdhdGhlcmluZyByZW1vdmFsIHN0YXRpc3RpY3Mg
ZnJvbSBtb3JlIHRoYW4gb25lIGRhdGEgc3RvcmUgbm93CisgICAgICAgICAgICB0aGF0IHdlIHBv
dGVudGlhbGx5IGludGVyYWN0IHdpdGggbXVsdGlwbGUgc3RvcmVzLgorICAgICAgICA3LiBBZGRz
IGEgZmlyc3Qgc2V0IG9mIGxheW91dCB0ZXN0cyBmb3IgcmVzb3VyY2UgbG9hZCBzdGF0aXN0aWNz
LgorCisgICAgICAgIFJldmlld2VkIGJ5IEFuZHkgRXN0ZXMuCisKKyAgICAgICAgKiBQbGF0Zm9y
bUVmbC5jbWFrZToKKyAgICAgICAgICAgIEFkZGVkIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWFuYWdlci5jcHAgYW5kCisgICAgICAgICAgICBVSVByb2Nlc3MvQVBJL0MvV0tS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAuCisgICAgICAgICogUGxhdGZvcm1HVEsu
Y21ha2U6CisgICAgICAgICAgICBBZGRlZCBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01hbmFnZXIuY3BwIGFuZAorICAgICAgICAgICAgVUlQcm9jZXNzL0FQSS9DL1dLUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwLgorICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtl
OgorICAgICAgICAgICAgQWRkZWQgVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NN
YW5hZ2VyLmNwcCBhbmQKKyAgICAgICAgICAgIFVJUHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcC4KKyAgICAgICAgKiBTaGFyZWQvQVBJL0FQSU9iamVjdC5o
OgorICAgICAgICAgICAgQWRkcyBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlciB0byB0
aGUgVHlwZSBlbnVtLgorICAgICAgICAqIFNoYXJlZC9BUEkvYy9XS0Jhc2UuaDoKKyAgICAgICAg
ICAgIFR5cGVkZWYgb2YgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclJlZi4KKyAgICAg
ICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKElQQzo6QXJn
dW1lbnRDb2RlcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPjo6ZW5jb2RlKToKKyAgICAgICAgKElQ
Qzo6QXJndW1lbnRDb2RlcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPjo6ZGVjb2RlKToKKyAgICAg
ICAgICAgIEFkZHMgc3VwcG9ydCBmb3Igc3RhdGlzdGljcyBtb3N0UmVjZW50VXNlckludGVyYWN0
aW9uLCBncmFuZGZhdGhlcmVkLCBhbmQKKyAgICAgICAgICAgIGRhdGFSZWNvcmRzUmVtb3ZlZC4K
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tBUElDYXN0Lmg6CisgICAgICAgICAgICBBZGRz
IEFQSSBtYXBwaW5nIGJldHdlZW4gV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclJlZiBh
bmQgCisgICAgICAgICAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHA6
IEFkZGVkLgorICAgICAgICAoV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlckdldFR5cGVJ
RCk6CisgICAgICAgIChXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0UHJldmFsZW50
UmVzb3VyY2UpOgorICAgICAgICAoV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcklzUHJl
dmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdl
clNldEhhc0hhZFVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXS1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NNYW5hZ2VySXNIYXNIYWRVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV0tSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24pOgorICAg
ICAgICAoV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlckZpcmVEYXRhTW9kaWZpY2F0aW9u
SGFuZGxlcik6CisgICAgICAgIChXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0Tm90
aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCk6CisgICAgICAgIChXS1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRh
UmVjb3Jkc1JlbW92YWwpOgorICAgICAgICAoV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdl
clNldE1pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92YWwpOgorICAgICAgICAoV0tS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclJlc2V0VG9Db25zaXN0ZW50U3RhdGUpOgorICAg
ICAgICAgICAgQVBJIGxldmVsIGJyaWRnZSB0byBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFu
YWdlciBmdW5jdGlvbnMuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01hbmFnZXIuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nl
c3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6ZGVsZXRlV2Vi
c2l0ZURhdGFGb3JUb3BQcml2YXRlbHlPd25lZERvbWFpbnNJbkFsbFBlcnNpc3RlbnREYXRhU3Rv
cmVzKToKKyAgICAgICAgICAgIEEgd2F5IHRvIGRlbGV0ZSB3ZWJzaXRlIGRhdGEgaW4gcGVyc2lz
dGVudCBzdG9yZShzKSBjb25maWd1cmVkIGJ5IHRoZSAKKyAgICAgICAgICAgIGVtYmVkZGluZyBj
bGllbnQuIEFQSTo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZSgpIGRvZXMgbm90
IAorICAgICAgICAgICAgZG8gdGhpcyB3aGljaCBjYXVzZWQgdXMgdG8gc2tpcCBzZXNzaW9uIHN0
b3JhZ2UuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6c2V0UHJl
dmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWFuYWdlcjo6aXNQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXRIYXNIYWRVc2VySW50ZXJhY3Rpb24pOgor
ICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6aGFzSGFk
VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01hbmFnZXI6OnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6ZmlyZURhdGFNb2RpZmljYXRp
b25IYW5kbGVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01h
bmFnZXI6OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6c2V0U2hvdWxkQ2xh
c3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwpOgorICAgICAgICAoV2ViS2l0
OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6c2V0TWluaW11bVRpbWVCZXR3ZWVl
bkRhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NNYW5hZ2VyOjpyZXNldFRvQ29uc2lzdGVudFN0YXRlKToKKyAgICAgICAgICAgIFN0
YXRpYyBmdW5jdGlvbnMgdG8gbWFuYWdlIHRoZSBzdGF0ZSBhbmQgYmVoYXZpb3Igb2YgdGhlIFVJ
IHByb2Nlc3MnIAorICAgICAgICAgICAgcmVzb3VyY2UgbG9hZCBzdGF0aXN0aWNzIHN0b3JlLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6
OmNyZWF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKToKKyAgICAgICAgICAgIEFuIGVmZmVj
dCBvZiBhIG1lbWJlciB2YXJpYWJsZSByZW5hbWUuIFNlZSBoZWFkZXIgZmlsZSBjb21tZW50IGJl
bG93LgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNl
dE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3Vy
Y2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZWVuRGF0YVJlY29yZHNS
ZW1vdmFsKToKKyAgICAgICAgICAgIFRocmVlIHN0YXRpYyBmdW5jdGlvbnMgZm9yIGNvbnRyb2xs
aW5nIHRoZSBiZWhhdmlvciBvZiB0aGUgc3RvcmUuCisgICAgICAgIChXZWJLaXQ6OldlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVtb3ZlRGF0YVJlY29yZHMpOgorICAgICAgICAgICAg
Q2hhbmdlczoKKyAgICAgICAgICAgIDEuIENvdmVycyBhbGwgZGF0YSByZWNvcmQgdHlwZXMuCisg
ICAgICAgICAgICAyLiBBbGxvd3MgZGF0YSByZW1vdmFsIHdoZW4gbV9sYXN0VGltZURhdGFSZWNv
cmRzV2VyZVJlbW92ZWQgaXMgbm90IHNldC4KKyAgICAgICAgICAgIDMuIE1vdmVzIHRoZSBoZWF2
eSBsaWZ0aW5nIHRvIFdlYnNpdGVEYXRhU3RvcmUgKHNlZSBiZWxvdykuCisgICAgICAgICAgICA0
LiBObyBsb25nZXIgY291bnRzIHJlbW92ZWQgZGF0YSByZWdyZXNzaW9ucy4KKyAgICAgICAgKFdl
YktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcm9jZXNzU3RhdGlzdGljc0Fu
ZERhdGFSZWNvcmRzKToKKyAgICAgICAgICAgIFNlZSBuZXh0IGNvbW1lbnQuCisgICAgICAgIChX
ZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVzb3VyY2VMb2FkU3RhdGlz
dGljc1VwZGF0ZWQpOgorICAgICAgICAgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
Ojpwcm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzKCkgaXMgCisgICAgICAgICAgICBicm9r
ZW4gb3V0IG9mIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1VwZGF0ZWQKKyAgICAgICAgICAgIHRvIGFsbG93IGZvciBzdGF0aXN0aWNzIHByb2Nl
c3Npbmcgd2l0aG91dCBwcmlvciBjbGFzc2lmaWNhdGlvbi4KKyAgICAgICAgICAgIFRlc3RzIG5l
ZWQgdG8gc2V0IHN0YXRpc3RpY3MgYW5kIGEgcnVuIG9mIHRoZSBjbGFzc2lmaWVyIG1heQorICAg
ICAgICAgICAgcmVzZXQgdGhlIGRhdGEuCisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6cmVnaXN0ZXJTaGFyZWRSZXNvdXJjZUxvYWRPYnNlcnZlcik6Cisg
ICAgICAgICAgICBTZXRzIHRoZSBub3RpZmljYXRpb24gY2FsbGJhY2sgd2hpY2ggY2FsbHMgCisg
ICAgICAgICAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnByb2Nlc3NTdGF0aXN0
aWNzQW5kRGF0YVJlY29yZHMoKS4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlLmg6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6Y29yZVN0b3JlKToKKyAgICAgICAgICAgIFJlbmFtZWQgbV9yZXNvdXJjZVN0
YXRpc3RpY3NTdG9yZSB0byBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSB0bworICAgICAg
ICAgICAgaGFybW9uaXplIHdpdGggb3RoZXIgbmFtaW5nLgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0
ZURhdGFTdG9yZTo6ZmV0Y2hEYXRhRm9yVG9wUHJpdmF0ZWx5T3duZWREb21haW5zKToKKyAgICAg
ICAgICAgIFRoaXMgaXMgbm93IHdoZXJlIG1hdGNoaW5nIGlzIG1hZGUgYmV0d2VlbiBwcmV2YWxl
bnQgcmVzb3VyY2VzCisgICAgICAgICAgICBhbmQgZGF0YSByZWNvcmRzLiBUaGlzIGZ1bmN0aW9u
IGlzIHVzZWQgYnkgCisgICAgICAgICAgICBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhRm9y
VG9wUHJpdmF0ZWx5T3duZWREb21haW5zKCkuCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRh
U3RvcmU6OnJlbW92ZURhdGFGb3JUb3BQcml2YXRlbHlPd25lZERvbWFpbnMpOgorICAgICAgICAg
ICAgVGhlIGZ1bmN0aW9uIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVtb3ZlRGF0
YVJlY29yZHMoKQorICAgICAgICAgICAgY2FsbHMgdG8gZ2V0IGRhdGEgcmVjb3JkcyByZW1vdmVk
IGluIGFsbCBwZXJzaXN0ZW50IHN0b3Jlcy4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURh
dGEvV2Vic2l0ZURhdGFTdG9yZS5oOgorICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwOgorICAgICAg
ICAoV2ViS2l0OjptX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3M6OnN0YXRpc3RpY3NDaGFuZ2VkVGltZXJGaXJlZCk6CisgICAgICAgIChX
ZWJLaXQ6Om1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JhZ2UpOiBEZWxldGVkLgorICAgICAg
ICAgICAgUmVuYW1lZCBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yYWdlIHRvIG1fcmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlIAorICAgICAgICAgICAgdG8gaGFybW9uaXplIHdpdGggb3Ro
ZXIgbmFtaW5nLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oOgorCiAyMDE3LTAy
LTEwICBBbmRyZXcgR29sZCAgPGFnb2xkQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgbWVkaWFT
dHJlYW1FbmFibGVkIHByb3BlcnR5IHRvIFdLUHJlZmVyZW5jZXMgZm9yIENvY29hLgpJbmRleDog
U291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvUGxhdGZvcm1FZmwuY21ha2UJKHJldmlzaW9uIDIxMTk5MykKKysrIFNvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtRWZsLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC02MiwxMCArNjIsMTMgQEAg
bGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL0JhY2tpbmdTdG9yZS5j
cHAKICAgICBVSVByb2Nlc3MvRGVmYXVsdFVuZG9Db250cm9sbGVyLmNwcAogICAgIFVJUHJvY2Vz
cy9MZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmdOb25lLmNwcAorICAgIFVJUHJvY2Vzcy9XZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAKICAgICBVSVByb2Nlc3MvV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlLmNwcAogICAgIFVJUHJvY2Vzcy9XZWJUZXh0Q2hlY2tlci5jcHAK
ICAgICBVSVByb2Nlc3MvV2ViVGV4dENoZWNrZXJDbGllbnQuY3BwCiAKKyAgICBVSVByb2Nlc3Mv
QVBJL0MvV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAKKwogICAgIFVJUHJvY2Vz
cy9BUEkvQy9Db29yZGluYXRlZEdyYXBoaWNzL1dLVmlldy5jcHAKIAogICAgIFVJUHJvY2Vzcy9B
UEkvQy9jYWlyby9XS0ljb25EYXRhYmFzZUNhaXJvLmNwcApJbmRleDogU291cmNlL1dlYktpdDIv
UGxhdGZvcm1HVEsuY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvUGxhdGZvcm1H
VEsuY21ha2UJKHJldmlzaW9uIDIxMTk5MykKKysrIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RL
LmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC04OCwxMCArODgsMTMgQEAgbGlzdChBUFBFTkQgV2Vi
S2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL0RlZmF1bHRVbmRvQ29udHJvbGxlci5jcHAKICAg
ICBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuY3BwCiAgICAgVUlQcm9jZXNzL0xlZ2Fj
eVNlc3Npb25TdGF0ZUNvZGluZ05vbmUuY3BwCisgICAgVUlQcm9jZXNzL1dlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcAogICAgIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmUuY3BwCiAgICAgVUlQcm9jZXNzL1dlYlRleHRDaGVja2VyLmNwcAogICAgIFVJ
UHJvY2Vzcy9XZWJUZXh0Q2hlY2tlckNsaWVudC5jcHAKIAorICAgIFVJUHJvY2Vzcy9BUEkvQy9X
S1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcAorCiAgICAgVUlQcm9jZXNzL0FQSS9D
L2NhaXJvL1dLSWNvbkRhdGFiYXNlQ2Fpcm8uY3BwCiAKICAgICBVSVByb2Nlc3MvQVBJL0MvZ3Rr
L1dLRnVsbFNjcmVlbkNsaWVudEd0ay5jcHAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
TWFjLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtTWFjLmNtYWtl
CShyZXZpc2lvbiAyMTE5OTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybU1hYy5jbWFrZQko
d29ya2luZyBjb3B5KQpAQCAtMTU5LDYgKzE1OSw3IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfU09V
UkNFUwogICAgIFVJUHJvY2Vzcy9IaWdoUGVyZm9ybWFuY2VHcmFwaGljc1VzYWdlU2FtcGxlci5j
cHAKICAgICBVSVByb2Nlc3MvUGVyQWN0aXZpdHlTdGF0ZUNQVVVzYWdlU2FtcGxlci5jcHAKICAg
ICBVSVByb2Nlc3MvV2ViQ29udGV4dE1lbnVMaXN0ZW5lclByb3h5LmNwcAorICAgIFVJUHJvY2Vz
cy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAKICAgICBVSVByb2Nlc3MvV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAogCiAgICAgVUlQcm9jZXNzL0F1dG9tYXRp
b24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCkBAIC0xNzEsNiArMTcyLDggQEAgbGlzdChBUFBF
TkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL0FQSS9BUElVc2VyU3R5bGVTaGVldC5j
cHAKICAgICBVSVByb2Nlc3MvQVBJL0FQSVdlYnNpdGVEYXRhUmVjb3JkLmNwcAogCisgICAgVUlQ
cm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwCisKICAgICBV
SVByb2Nlc3MvQVBJL0MvbWFjL1dLQ29udGV4dFByaXZhdGVNYWMubW0KICAgICBVSVByb2Nlc3Mv
QVBJL0MvbWFjL1dLUGFnZVByaXZhdGVNYWMubW0KIApJbmRleDogU291cmNlL1dlYktpdDIvU2hh
cmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAJKHJldmlzaW9uIDIxMTk5MykKKysr
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjI0Nyw2ICsyMjQ3LDggQEAgdm9pZCBBcmd1bWVudENvZGVyPFJlc291cmNl
TG9hZFN0YXRpc3RpYwogICAgIAogICAgIC8vIFVzZXIgaW50ZXJhY3Rpb24KICAgICBlbmNvZGVy
IDw8IHN0YXRpc3RpY3MuaGFkVXNlckludGVyYWN0aW9uOworICAgIGVuY29kZXIgPDwgc3RhdGlz
dGljcy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uOworICAgIGVuY29kZXIgPDwgc3RhdGlzdGlj
cy5ncmFuZGZhdGhlcmVkOwogICAgIAogICAgIC8vIFRvcCBmcmFtZSBzdGF0cwogICAgIGVuY29k
ZXIgPDwgc3RhdGlzdGljcy50b3BGcmFtZUhhc0JlZW5OYXZpZ2F0ZWRUb0JlZm9yZTsKQEAgLTIy
NzcsNiArMjI3OSw3IEBAIHZvaWQgQXJndW1lbnRDb2RlcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWMK
ICAgICAvLyBQcmV2YWxlbnQgUmVzb3VyY2UKICAgICBlbmNvZGVyIDw8IHN0YXRpc3RpY3MucmVk
aXJlY3RlZFRvT3RoZXJQcmV2YWxlbnRSZXNvdXJjZU9yaWdpbnM7CiAgICAgZW5jb2RlciA8PCBz
dGF0aXN0aWNzLmlzUHJldmFsZW50UmVzb3VyY2U7CisgICAgZW5jb2RlciA8PCBzdGF0aXN0aWNz
LmRhdGFSZWNvcmRzUmVtb3ZlZDsKIH0KIAogYm9vbCBBcmd1bWVudENvZGVyPFJlc291cmNlTG9h
ZFN0YXRpc3RpY3M+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgV2ViQ29yZTo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljcyYgc3RhdGlzdGljcykKQEAgLTIyODcsNiArMjI5MCwxMiBAQCBib29sIEFy
Z3VtZW50Q29kZXI8UmVzb3VyY2VMb2FkU3RhdGlzdGljCiAgICAgLy8gVXNlciBpbnRlcmFjdGlv
bgogICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3RhdGlzdGljcy5oYWRVc2VySW50ZXJhY3Rpb24p
KQogICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0YXRp
c3RpY3MubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbikpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3RhdGlzdGljcy5ncmFuZGZhdGhlcmVkKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8vIFRvcCBmcmFtZSBzdGF0cwogICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUoc3RhdGlzdGljcy50b3BGcmFtZUhhc0JlZW5OYXZpZ2F0ZWRUb0Jl
Zm9yZSkpCkBAIC0yMzU3LDcgKzIzNjYsMTAgQEAgYm9vbCBBcmd1bWVudENvZGVyPFJlc291cmNl
TG9hZFN0YXRpc3RpYwogICAgIAogICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3RhdGlzdGljcy5p
c1ByZXZhbGVudFJlc291cmNlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCisgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShzdGF0aXN0aWNzLmRhdGFSZWNvcmRzUmVtb3ZlZCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvQVBJL0FQSU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9BUEkvQVBJT2JqZWN0LmgJKHJldmlzaW9uIDIxMTk5MykKKysrIFNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9BUEkvQVBJT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTU0LDYgKzE1NCw3
IEBAIHB1YmxpYzoKICAgICAgICAgVmlicmF0aW9uLAogICAgICAgICBWaWV3cG9ydEF0dHJpYnV0
ZXMsCiAgICAgICAgIFZpc2l0ZWRMaW5rU3RvcmUsCisgICAgICAgIFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NNYW5hZ2VyLAogICAgICAgICBXZWJzaXRlRGF0YVJlY29yZCwKICAgICAgICAgV2Vi
c2l0ZURhdGFTdG9yZSwKICAgICAgICAgV2Vic2l0ZVBvbGljaWVzLApJbmRleDogU291cmNlL1dl
YktpdDIvU2hhcmVkL0FQSS9jL1dLQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9BUEkvYy9XS0Jhc2UuaAkocmV2aXNpb24gMjExOTkzKQorKysgU291cmNlL1dlYktp
dDIvU2hhcmVkL0FQSS9jL1dLQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxp
dHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xMjcs
NiArMTI3LDcgQEAgdHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlV0tQYWdlUnVuQmVmbwogdHlw
ZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlV0tQYWdlUnVuSmF2YVNjcmlwdEFsZXJ0UmVzdWx0TGlz
dGVuZXIqIFdLUGFnZVJ1bkphdmFTY3JpcHRBbGVydFJlc3VsdExpc3RlbmVyUmVmOwogdHlwZWRl
ZiBjb25zdCBzdHJ1Y3QgT3BhcXVlV0tQYWdlUnVuSmF2YVNjcmlwdENvbmZpcm1SZXN1bHRMaXN0
ZW5lciogV0tQYWdlUnVuSmF2YVNjcmlwdENvbmZpcm1SZXN1bHRMaXN0ZW5lclJlZjsKIHR5cGVk
ZWYgY29uc3Qgc3RydWN0IE9wYXF1ZVdLUGFnZVJ1bkphdmFTY3JpcHRQcm9tcHRSZXN1bHRMaXN0
ZW5lciogV0tQYWdlUnVuSmF2YVNjcmlwdFByb21wdFJlc3VsdExpc3RlbmVyUmVmOwordHlwZWRl
ZiBjb25zdCBzdHJ1Y3QgT3BhcXVlV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlciogV0tS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclJlZjsKIHR5cGVkZWYgY29uc3Qgc3RydWN0IE9w
YXF1ZVdLVGV4dENoZWNrZXIqIFdLVGV4dENoZWNrZXJSZWY7CiB0eXBlZGVmIGNvbnN0IHN0cnVj
dCBPcGFxdWVXS1Nlc3Npb24qIFdLU2Vzc2lvblJlZjsKIHR5cGVkZWYgY29uc3Qgc3RydWN0IE9w
YXF1ZVdLU2Vzc2lvblN0YXRlKiBXS1Nlc3Npb25TdGF0ZVJlZjsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCShyZXZpc2lvbiAyMTE5OTMpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTIwMCw2ICsyMDAsNTMgQEAgV2ViUGFnZVByb3h5KiBXZWJQcm9jZXNzUHJveHk6
OndlYlBhZ2UodQogICAgIHJldHVybiBnbG9iYWxQYWdlTWFwKCkuZ2V0KHBhZ2VJRCk7CiB9CiAK
K3ZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpkZWxldGVXZWJzaXRlRGF0YUZvclRvcFByaXZhdGVseU93
bmVkRG9tYWluc0luQWxsUGVyc2lzdGVudERhdGFTdG9yZXMoT3B0aW9uU2V0PFdlYnNpdGVEYXRh
VHlwZT4gZGF0YVR5cGVzLCBWZWN0b3I8U3RyaW5nPiYgdG9wUHJpdmF0ZWx5T3duZWREb21haW5z
LCBib29sIHNob3VsZE5vdGlmeVBhZ2UsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9u
SGFuZGxlcikKK3sKKyAgICBzdHJ1Y3QgQ2FsbGJhY2tBZ2dyZWdhdG9yIDogVGhyZWFkU2FmZVJl
ZkNvdW50ZWQ8Q2FsbGJhY2tBZ2dyZWdhdG9yPiB7CisgICAgICAgIGV4cGxpY2l0IENhbGxiYWNr
QWdncmVnYXRvcihzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkhhbmRsZXIpCisgICAg
ICAgICAgICA6IGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKQor
ICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgYWRkUGVuZGluZ0Nh
bGxiYWNrKCkKKyAgICAgICAgeworICAgICAgICAgICAgKytwZW5kaW5nQ2FsbGJhY2tzOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIHJlbW92ZVBlbmRpbmdDYWxsYmFjaygpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChwZW5kaW5nQ2FsbGJhY2tzKTsKKyAgICAgICAg
ICAgIC0tcGVuZGluZ0NhbGxiYWNrczsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgY2FsbElm
TmVlZGVkKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgY2FsbElmTmVlZGVk
KCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFwZW5kaW5nQ2FsbGJhY2tzKQorICAgICAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIHVuc2lnbmVkIHBlbmRpbmdDYWxsYmFja3MgPSAwOworICAgICAgICBzdGQ6OmZ1bmN0aW9u
PHZvaWQoKT4gY29tcGxldGlvbkhhbmRsZXI7CisgICAgfTsKKyAgICAKKyAgICBSZWZQdHI8Q2Fs
bGJhY2tBZ2dyZWdhdG9yPiBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBhZG9wdFJlZihuZXcgQ2FsbGJh
Y2tBZ2dyZWdhdG9yKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKSk7CisKKyAgICBmb3IgKGF1
dG8mIHBhZ2UgOiBnbG9iYWxQYWdlTWFwKCkpIHsKKyAgICAgICAgaWYgKCFwYWdlLnZhbHVlLT53
ZWJzaXRlRGF0YVN0b3JlKCkuaXNQZXJzaXN0ZW50KCkpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgY2FsbGJhY2tBZ2dyZWdhdG9yLT5hZGRQZW5kaW5nQ2FsbGJhY2soKTsKKyAgICAg
ICAgcGFnZS52YWx1ZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnJlbW92ZURhdGFGb3JUb3BQcml2YXRl
bHlPd25lZERvbWFpbnMoZGF0YVR5cGVzLCB7IH0sIHRvcFByaXZhdGVseU93bmVkRG9tYWlucywg
W2NhbGxiYWNrQWdncmVnYXRvciwgc2hvdWxkTm90aWZ5UGFnZSwgcGFnZV0oKSB7CisgICAgICAg
ICAgICBpZiAoc2hvdWxkTm90aWZ5UGFnZSkKKyAgICAgICAgICAgICAgICBwYWdlLnZhbHVlLT5w
b3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoIldlYnNpdGVEYXRhRGVsZXRpb25Gb3JUb3BQcml2
YXRlbHlPd25lZERvbWFpbnNGaW5pc2hlZCIsIG51bGxwdHIpOworICAgICAgICAgICAgV1RGOjpS
dW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW2NhbGxiYWNrQWdncmVnYXRvcl0geworICAgICAgICAg
ICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3ZlUGVuZGluZ0NhbGxiYWNrKCk7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfQorfQorCiBSZWY8V2ViUGFnZVByb3h5PiBX
ZWJQcm9jZXNzUHJveHk6OmNyZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCYgcGFnZUNsaWVudCwgUmVm
PEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24+JiYgcGFnZUNvbmZpZ3VyYXRpb24pCiB7CiAgICAgdWlu
dDY0X3QgcGFnZUlEID0gZ2VuZXJhdGVQYWdlSUQoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmgJKHJldmlzaW9uIDIxMTk5MykKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEy
MCw2ICsxMjAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBmZXRjaFdlYnNpdGVEYXRhKFdlYkNvcmU6
OlNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIEZ1bmN0aW9uPHZvaWQoV2Vi
c2l0ZURhdGEpPiBjb21wbGV0aW9uSGFuZGxlcik7CiAgICAgdm9pZCBkZWxldGVXZWJzaXRlRGF0
YShXZWJDb3JlOjpTZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBzdGQ6OmNo
cm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50IG1vZGlmaWVkU2luY2UsIEZ1bmN0aW9uPHZv
aWQoKT4gY29tcGxldGlvbkhhbmRsZXIpOwogICAgIHZvaWQgZGVsZXRlV2Vic2l0ZURhdGFGb3JP
cmlnaW5zKFdlYkNvcmU6OlNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIGNv
bnN0IFZlY3RvcjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+JiwgRnVuY3Rpb248dm9pZCgp
PiBjb21wbGV0aW9uSGFuZGxlcik7CisgICAgc3RhdGljIHZvaWQgZGVsZXRlV2Vic2l0ZURhdGFG
b3JUb3BQcml2YXRlbHlPd25lZERvbWFpbnNJbkFsbFBlcnNpc3RlbnREYXRhU3RvcmVzKE9wdGlv
blNldDxXZWJzaXRlRGF0YVR5cGU+LCBWZWN0b3I8U3RyaW5nPiYgdG9wUHJpdmF0ZWx5T3duZWRE
b21haW5zLCBib29sIHNob3VsZE5vdGlmeVBhZ2VzLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29t
cGxldGlvbkhhbmRsZXIpOwogCiAgICAgdm9pZCBlbmFibGVTdWRkZW5UZXJtaW5hdGlvbigpOwog
ICAgIHZvaWQgZGlzYWJsZVN1ZGRlblRlcm1pbmF0aW9uKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWFuYWdlci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oIgorCisjaW5jbHVkZSAiTG9nZ2luZy5o
IgorI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oIgorI2luY2x1ZGUg
PFdlYkNvcmUvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1VSTC5o
PgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3Zv
aWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNldFByZXZhbGVudFJlc291cmNl
KGNvbnN0IFN0cmluZyYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlKQor
ICAgICAgICBXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5z
ZXRQcmV2YWxlbnRSZXNvdXJjZShVUkwoVVJMKCksIGhvc3ROYW1lKSk7CisgICAgZWxzZQorICAg
ICAgICBXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5jbGVh
clByZXZhbGVudFJlc291cmNlKFVSTChVUkwoKSwgaG9zdE5hbWUpKTsKK30KKworYm9vbCBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6aXNQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBT
dHJpbmcmIGhvc3ROYW1lKQoreworICAgIHJldHVybiBXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5pc1ByZXZhbGVudFJlc291cmNlKFVSTChVUkwoKSwgaG9z
dE5hbWUpKTsKK30KKyAgICAKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6
OnNldEhhc0hhZFVzZXJJbnRlcmFjdGlvbihjb25zdCBTdHJpbmcmIGhvc3ROYW1lLCBib29sIHZh
bHVlKQoreworICAgIGlmICh2YWx1ZSkKKyAgICAgICAgV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZE9ic2VydmVyKCkubG9nVXNlckludGVyYWN0aW9uKFVSTChVUkwoKSwgaG9z
dE5hbWUpKTsKKyAgICBlbHNlCisgICAgICAgIFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWRPYnNlcnZlcigpLmNsZWFyVXNlckludGVyYWN0aW9uKFVSTChVUkwoKSwgaG9zdE5h
bWUpKTsKK30KKworYm9vbCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6aGFzSGFk
VXNlckludGVyYWN0aW9uKGNvbnN0IFN0cmluZyYgaG9zdE5hbWUpCit7CisgICAgcmV0dXJuIFdl
YkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWRPYnNlcnZlcigpLmhhc0hhZFVzZXJJ
bnRlcmFjdGlvbihVUkwoVVJMKCksIGhvc3ROYW1lKSk7Cit9CisKK3ZvaWQgV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01hbmFnZXI6OnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oZG91Ymxl
IHNlY29uZHMpCit7CisgICAgV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZE9i
c2VydmVyKCkuc2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihzZWNvbmRzKTsKK30KKwordm9p
ZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6ZmlyZURhdGFNb2RpZmljYXRpb25I
YW5kbGVyKCkKK3sKKyAgICBXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2Jz
ZXJ2ZXIoKS5maXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKK30KKwordm9pZCBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNX
ZXJlU2Nhbm5lZChib29sIHZhbHVlKQoreworICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCh2YWx1ZSk7Cit9
CisKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6OnNldFNob3VsZENsYXNz
aWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wgdmFsdWUpCit7CisgICAg
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNl
c0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCh2YWx1ZSk7Cit9CisKK3ZvaWQgV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01hbmFnZXI6OnNldE1pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1Jl
bW92YWwoZG91YmxlIHNlY29uZHMpCit7CisgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZWVuRGF0YVJlY29yZHNSZW1vdmFsKHNlY29uZHMpOwor
fQorCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpyZXNldFRvQ29uc2lz
dGVudFN0YXRlKCkKK3sKKyAgICBXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
T2JzZXJ2ZXIoKS5zZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKDI1OTIwMDApOworICAgIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29y
ZHNXZXJlU2Nhbm5lZChmYWxzZSk7CisgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCh0cnVl
KTsKKyAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldE1pbmltdW1UaW1lQmV0
d2VlZW5EYXRhUmVjb3Jkc1JlbW92YWwoNjApOworICAgIGF1dG8gc3RvcmUgPSBXZWJDb3JlOjpS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5zdGF0aXN0aWNzU3RvcmUoKTsK
KyAgICBpZiAoc3RvcmUpCisgICAgICAgIHN0b3JlLT5jbGVhcigpOworfQorICAgIAorfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01h
bmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJBUElPYmplY3QuaCIKKworI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK2NsYXNzIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyIDogcHVibGljIEFQ
STo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01hbmFnZXI+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NNYW5hZ2VyPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIoKSk7CisgICAgfQorICAgIHN0YXRp
YyB2b2lkIHNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFN0cmluZyYgaG9zdE5hbWUsIGJvb2wg
dmFsdWUpOworICAgIHN0YXRpYyBib29sIGlzUHJldmFsZW50UmVzb3VyY2UoY29uc3QgU3RyaW5n
JiBob3N0TmFtZSk7CisgICAgc3RhdGljIHZvaWQgc2V0SGFzSGFkVXNlckludGVyYWN0aW9uKGNv
bnN0IFN0cmluZyYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpOworICAgIHN0YXRpYyBib29sIGhhc0hh
ZFVzZXJJbnRlcmFjdGlvbihjb25zdCBTdHJpbmcmIGhvc3ROYW1lKTsKKyAgICBzdGF0aWMgdm9p
ZCBzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKGRvdWJsZSBzZWNvbmRzKTsKKyAgICBzdGF0
aWMgdm9pZCBzZXRSZWR1Y2VkVGltZXN0YW1wUmVzb2x1dGlvbihkb3VibGUgc2Vjb25kcyk7Cisg
ICAgc3RhdGljIHZvaWQgZmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CisgICAgc3RhdGlj
IHZvaWQgc2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sKTsKKyAg
ICBzdGF0aWMgdm9pZCBzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRz
UmVtb3ZhbChib29sIHZhbHVlKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRNaW5pbXVtVGltZUJldHdl
ZWVuRGF0YVJlY29yZHNSZW1vdmFsKGRvdWJsZSBzZWNvbmRzKTsKKyAgICBzdGF0aWMgdm9pZCBy
ZXNldFRvQ29uc2lzdGVudFN0YXRlKCk7CisKK3ByaXZhdGU6Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCShyZXZpc2lvbiAyMTE5OTMpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsOSArMjYsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oIgogCi0jaW5jbHVk
ZSAiQVBJV2Vic2l0ZURhdGFTdG9yZS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NNZXNzYWdlcy5o
IgogI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5
LmgiCiAjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlTWVzc2FnZXMuaCIK
ICNpbmNsdWRlICJXZWJzaXRlRGF0YUZldGNoT3B0aW9uLmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURh
dGFUeXBlLmgiCkBAIC00NSw5ICs0NSwxMSBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKLXN0YXRpYyBjb25zdCBhdXRvIG51bWJlck9mU2Vjb25kc0Jl
dHdlZW5SZW1vdmluZ0RhdGFSZWNvcmRzID0gNjA7CiBzdGF0aWMgY29uc3QgYXV0byBmZWF0dXJl
VmVjdG9yTGVuZ3RoVGhyZXNob2xkID0gMzsKK3N0YXRpYyBhdXRvIG1pbmltdW1UaW1lQmV0d2Vl
ZW5EYXRhUmVjb3Jkc1JlbW92YWwgPSA2MDsKIHN0YXRpYyBPcHRpb25TZXQ8V2ViS2l0OjpXZWJz
aXRlRGF0YVR5cGU+IGRhdGFUeXBlc1RvUmVtb3ZlOworc3RhdGljIGF1dG8gbm90aWZ5UGFnZXMg
PSBmYWxzZTsKK3N0YXRpYyBhdXRvIHNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJl
Y29yZHNSZW1vdmFsID0gdHJ1ZTsKIAogUmVmPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZT4gV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBy
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KQogewpAQCAtNTUsNyArNTcsNyBAQCBSZWY8
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiBXZWJSCiB9CiAKIFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKGNvbnN0IFN0
cmluZyYgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSkKLSAgICA6IG1fcmVzb3VyY2VT
dGF0aXN0aWNzU3RvcmUoUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjcmVhdGUoKSkKKyAg
ICA6IG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKFJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6Y3JlYXRlKCkpCiAgICAgLCBtX3N0YXRpc3RpY3NRdWV1ZShXb3JrUXVldWU6OmNyZWF0
ZSgiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlIFByb2Nlc3MgRGF0YSBRdWV1ZSIpKQog
ICAgICwgbV9zdG9yYWdlUGF0aChyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KQogewpA
QCAtNjUsNiArNjcsMjIgQEAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjp+V2ViUmVz
bwogewogfQogCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0Tm90aWZ5
UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIGFsd2F5cykKK3sKKyAgICBub3Rp
ZnlQYWdlcyA9IGFsd2F5czsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJv
b2wgdmFsdWUpCit7CisgICAgc2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jk
c1JlbW92YWwgPSB2YWx1ZTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnNldE1pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92YWwoZG91YmxlIHNlY29u
ZHMpCit7CisgICAgaWYgKHNlY29uZHMgPj0gMCkKKyAgICAgICAgbWluaW11bVRpbWVCZXR3ZWVl
bkRhdGFSZWNvcmRzUmVtb3ZhbCA9IHNlY29uZHM7Cit9CisKIGJvb2wgV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpoYXNQcmV2YWxlbnRSZXNvdXJjZUNoYXJhY3RlcmlzdGljcyhjb25z
dCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiByZXNvdXJjZVN0YXRpc3RpYykKIHsKICAgICBhdXRv
IHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnNDb3VudCA9IHJlc291cmNlU3RhdGlzdGlj
LnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMuc2l6ZSgpOwpAQCAtMTExLDEyICsxMjks
OCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVtCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGRvdWJsZSBub3cgPSBjdXJyZW50VGltZSgpOwotICAgIGlmICghbV9sYXN0
VGltZURhdGFSZWNvcmRzV2VyZVJlbW92ZWQpIHsKLSAgICAgICAgbV9sYXN0VGltZURhdGFSZWNv
cmRzV2VyZVJlbW92ZWQgPSBub3c7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAo
bm93IDwgKG1fbGFzdFRpbWVEYXRhUmVjb3Jkc1dlcmVSZW1vdmVkICsgbnVtYmVyT2ZTZWNvbmRz
QmV0d2VlblJlbW92aW5nRGF0YVJlY29yZHMpKQorICAgIGlmIChtX2xhc3RUaW1lRGF0YVJlY29y
ZHNXZXJlUmVtb3ZlZAorICAgICAgICAmJiBub3cgPCBtX2xhc3RUaW1lRGF0YVJlY29yZHNXZXJl
UmVtb3ZlZCArIG1pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92YWwpCiAgICAgICAg
IHJldHVybjsKIAogICAgIG1fZGF0YVJlY29yZHNSZW1vdmFsUGVuZGluZyA9IHRydWU7CkBAIC0x
MjQsNTkgKzEzOCw1MiBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVt
CiAKICAgICBpZiAoZGF0YVR5cGVzVG9SZW1vdmUuaXNFbXB0eSgpKSB7CiAgICAgICAgIGRhdGFU
eXBlc1RvUmVtb3ZlIHw9IFdlYnNpdGVEYXRhVHlwZTo6Q29va2llczsKLSAgICAgICAgZGF0YVR5
cGVzVG9SZW1vdmUgfD0gV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2U7Ci0gICAgICAgIGRh
dGFUeXBlc1RvUmVtb3ZlIHw9IFdlYnNpdGVEYXRhVHlwZTo6SW5kZXhlZERCRGF0YWJhc2VzOwog
ICAgICAgICBkYXRhVHlwZXNUb1JlbW92ZSB8PSBXZWJzaXRlRGF0YVR5cGU6OkRpc2tDYWNoZTsK
ICAgICAgICAgZGF0YVR5cGVzVG9SZW1vdmUgfD0gV2Vic2l0ZURhdGFUeXBlOjpNZW1vcnlDYWNo
ZTsKKyAgICAgICAgZGF0YVR5cGVzVG9SZW1vdmUgfD0gV2Vic2l0ZURhdGFUeXBlOjpPZmZsaW5l
V2ViQXBwbGljYXRpb25DYWNoZTsKKyAgICAgICAgZGF0YVR5cGVzVG9SZW1vdmUgfD0gV2Vic2l0
ZURhdGFUeXBlOjpTZXNzaW9uU3RvcmFnZTsKKyAgICAgICAgZGF0YVR5cGVzVG9SZW1vdmUgfD0g
V2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2U7CisgICAgICAgIGRhdGFUeXBlc1RvUmVtb3Zl
IHw9IFdlYnNpdGVEYXRhVHlwZTo6V2ViU1FMRGF0YWJhc2VzOworICAgICAgICBkYXRhVHlwZXNU
b1JlbW92ZSB8PSBXZWJzaXRlRGF0YVR5cGU6OkluZGV4ZWREQkRhdGFiYXNlczsKKyAgICAgICAg
ZGF0YVR5cGVzVG9SZW1vdmUgfD0gV2Vic2l0ZURhdGFUeXBlOjpNZWRpYUtleXM7CisgICAgICAg
IGRhdGFUeXBlc1RvUmVtb3ZlIHw9IFdlYnNpdGVEYXRhVHlwZTo6SFNUU0NhY2hlOworICAgICAg
ICBkYXRhVHlwZXNUb1JlbW92ZSB8PSBXZWJzaXRlRGF0YVR5cGU6OlNlYXJjaEZpZWxkUmVjZW50
U2VhcmNoZXM7CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgICAgIGRhdGFU
eXBlc1RvUmVtb3ZlIHw9IFdlYnNpdGVEYXRhVHlwZTo6UGx1Z0luRGF0YTsKKyNlbmRpZgorI2lm
IEVOQUJMRShNRURJQV9TVFJFQU0pCisgICAgICAgIGRhdGFUeXBlc1RvUmVtb3ZlIHw9IFdlYnNp
dGVEYXRhVHlwZTo6TWVkaWFEZXZpY2VJZGVudGlmaWVyOworI2VuZGlmCiAgICAgfQogCiAgICAg
Ly8gU3dpdGNoIHRvIHRoZSBtYWluIHRocmVhZCB0byBnZXQgdGhlIGRlZmF1bHQgd2Vic2l0ZSBk
YXRhIHN0b3JlCiAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcmV2YWxlbnRSZXNvdXJj
ZURvbWFpbnMgPSBXVEZNb3ZlKHByZXZhbGVudFJlc291cmNlRG9tYWlucyksIHRoaXNdICgpIG11
dGFibGUgewotICAgICAgICBhdXRvJiB3ZWJzaXRlRGF0YVN0b3JlID0gQVBJOjpXZWJzaXRlRGF0
YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPndlYnNpdGVEYXRhU3RvcmUoKTsKLQotICAgICAg
ICB3ZWJzaXRlRGF0YVN0b3JlLmZldGNoRGF0YShkYXRhVHlwZXNUb1JlbW92ZSwgeyB9LCBbcHJl
dmFsZW50UmVzb3VyY2VEb21haW5zID0gV1RGTW92ZShwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMp
LCB0aGlzXShhdXRvIHdlYnNpdGVEYXRhUmVjb3JkcykgewotICAgICAgICAgICAgVmVjdG9yPFdl
YnNpdGVEYXRhUmVjb3JkPiBkYXRhUmVjb3JkczsKLSAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+
IHByZXZhbGVudFJlc291cmNlRG9tYWluc1dpdGhEYXRhUmVjb3JkczsKLSAgICAgICAgICAgIGZv
ciAoYXV0byYgd2Vic2l0ZURhdGFSZWNvcmQgOiB3ZWJzaXRlRGF0YVJlY29yZHMpIHsKLSAgICAg
ICAgICAgICAgICBmb3IgKGF1dG8mIHByZXZhbGVudFJlc291cmNlRG9tYWluIDogcHJldmFsZW50
UmVzb3VyY2VEb21haW5zKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh3ZWJzaXRlRGF0YVJl
Y29yZC5kaXNwbGF5TmFtZS5lbmRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKHByZXZhbGVudFJlc291
cmNlRG9tYWluKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBzdWZmaXhTdGFydCA9
IHdlYnNpdGVEYXRhUmVjb3JkLmRpc3BsYXlOYW1lLmxlbmd0aCgpIC0gcHJldmFsZW50UmVzb3Vy
Y2VEb21haW4ubGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN1ZmZpeFN0
YXJ0IHx8IHdlYnNpdGVEYXRhUmVjb3JkLmRpc3BsYXlOYW1lW3N1ZmZpeFN0YXJ0IC0gMV0gPT0g
Jy4nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVJlY29yZHMuYXBwZW5kKHdl
YnNpdGVEYXRhUmVjb3JkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2YWxlbnRS
ZXNvdXJjZURvbWFpbnNXaXRoRGF0YVJlY29yZHMuYXBwZW5kKHByZXZhbGVudFJlc291cmNlRG9t
YWluKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFkYXRh
UmVjb3Jkcy5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICBtX2RhdGFSZWNvcmRzUmVtb3ZhbFBl
bmRpbmcgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGF1dG8mIHdlYnNpdGVEYXRhU3RvcmUgPSBBUEk6OldlYnNpdGVEYXRhU3Rv
cmU6OmRlZmF1bHREYXRhU3RvcmUoKS0+d2Vic2l0ZURhdGFTdG9yZSgpOwotICAgICAgICAgICAg
d2Vic2l0ZURhdGFTdG9yZS5yZW1vdmVEYXRhKGRhdGFUeXBlc1RvUmVtb3ZlLCBkYXRhUmVjb3Jk
cywgW3ByZXZhbGVudFJlc291cmNlRG9tYWluc1dpdGhEYXRhUmVjb3JkcyA9IFdURk1vdmUocHJl
dmFsZW50UmVzb3VyY2VEb21haW5zV2l0aERhdGFSZWNvcmRzKSwgdGhpc10gewotICAgICAgICAg
ICAgICAgIHRoaXMtPmNvcmVTdG9yZSgpLnVwZGF0ZVN0YXRpc3RpY3NGb3JSZW1vdmVkRGF0YVJl
Y29yZHMocHJldmFsZW50UmVzb3VyY2VEb21haW5zV2l0aERhdGFSZWNvcmRzKTsKLSAgICAgICAg
ICAgICAgICBtX2RhdGFSZWNvcmRzUmVtb3ZhbFBlbmRpbmcgPSBmYWxzZTsKLSAgICAgICAgICAg
IH0pOworICAgICAgICBXZWJQcm9jZXNzUHJveHk6OmRlbGV0ZVdlYnNpdGVEYXRhRm9yVG9wUHJp
dmF0ZWx5T3duZWREb21haW5zSW5BbGxQZXJzaXN0ZW50RGF0YVN0b3JlcyhkYXRhVHlwZXNUb1Jl
bW92ZSwgcHJldmFsZW50UmVzb3VyY2VEb21haW5zLCBub3RpZnlQYWdlcywgW3RoaXNdKCkgbXV0
YWJsZSB7CisgICAgICAgICAgICBtX2RhdGFSZWNvcmRzUmVtb3ZhbFBlbmRpbmcgPSBmYWxzZTsK
ICAgICAgICAgfSk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzVXBkYXRlZChjb25zdCBWZWN0b3I8V2ViQ29y
ZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4mIG9yaWdpbnMpCit2b2lkIFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6cHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3JkcygpCiB7Ci0g
ICAgY29yZVN0b3JlKCkubWVyZ2VTdGF0aXN0aWNzKG9yaWdpbnMpOwotCi0gICAgY29yZVN0b3Jl
KCkucHJvY2Vzc1N0YXRpc3RpY3MoW3RoaXNdIChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiByZXNv
dXJjZVN0YXRpc3RpYykgewotICAgICAgICBjbGFzc2lmeVJlc291cmNlKHJlc291cmNlU3RhdGlz
dGljKTsKLSAgICAgICAgcmVtb3ZlRGF0YVJlY29yZHMoKTsKLSAgICB9KTsKKyAgICBpZiAoc2hv
dWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwpIHsKKyAgICAgICAg
Y29yZVN0b3JlKCkucHJvY2Vzc1N0YXRpc3RpY3MoW3RoaXNdIChSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzJiByZXNvdXJjZVN0YXRpc3RpYykgeworICAgICAgICAgICAgY2xhc3NpZnlSZXNvdXJjZShy
ZXNvdXJjZVN0YXRpc3RpYyk7CisgICAgICAgIH0pOworICAgIH0KKyAgICByZW1vdmVEYXRhUmVj
b3JkcygpOwogICAgIAogICAgIGF1dG8gZW5jb2RlciA9IGNvcmVTdG9yZSgpLmNyZWF0ZUVuY29k
ZXJGcm9tRGF0YSgpOwogICAgIAogICAgIHdyaXRlRW5jb2RlclRvRGlzaygqZW5jb2Rlci5nZXQo
KSwgImZ1bGxfYnJvd3Npbmdfc2Vzc2lvbiIpOwogfQogCit2b2lkIFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1VwZGF0ZWQoY29uc3QgVmVjdG9y
PFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M+JiBvcmlnaW5zKQoreworICAgIGNvcmVT
dG9yZSgpLm1lcmdlU3RhdGlzdGljcyhvcmlnaW5zKTsKKyAgICBwcm9jZXNzU3RhdGlzdGljc0Fu
ZERhdGFSZWNvcmRzKCk7Cit9CisKIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChib29sIGVuYWJsZWQpCiB7CiAgICAg
aWYgKGVuYWJsZWQgPT0gbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCkKQEAgLTE5Miw5
ICsxOTksMTUgQEAgYm9vbCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlcwogICAg
IHJldHVybiBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkOwogfQogCisKIHZvaWQgV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZWdpc3RlclNoYXJlZFJlc291cmNlTG9hZE9i
c2VydmVyKCkKIHsKLSAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5z
ZXRTdGF0aXN0aWNzU3RvcmUobV9yZXNvdXJjZVN0YXRpc3RpY3NTdG9yZS5jb3B5UmVmKCkpOwor
ICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWRPYnNlcnZlcigpLnNldFN0YXRpc3RpY3NT
dG9yZShtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jb3B5UmVmKCkpOworICAgIG1fcmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLT5zZXROb3RpZmljYXRpb25DYWxsYmFjayhbdGhpc10g
eworICAgICAgICBpZiAobV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUtPmlzRW1wdHkoKSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgcHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVj
b3JkcygpOworICAgIH0pOwogfQogCiB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6cmVhZERhdGFGcm9tRGlza0lmTmVlZGVkKCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgJKHJl
dmlzaW9uIDIxMTk5MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsOSBAQCBjbGFz
cyBXZWJQcm9jZXNzUHJveHk7CiBjbGFzcyBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUg
OiBwdWJsaWMgSVBDOjpDb25uZWN0aW9uOjpXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIgewogcHVi
bGljOgogICAgIHN0YXRpYyBSZWY8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiBjcmVh
dGUoY29uc3QgU3RyaW5nJik7CisgICAgc3RhdGljIHZvaWQgc2V0Tm90aWZ5UGFnZXNXaGVuRGF0
YVJlY29yZHNXZXJlU2Nhbm5lZChib29sKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRTaG91bGRDbGFz
c2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sKTsKKyAgICBzdGF0aWMg
dm9pZCBzZXRNaW5pbXVtVGltZUJldHdlZWVuRGF0YVJlY29yZHNSZW1vdmFsKGRvdWJsZSk7CiAg
ICAgdmlydHVhbCB+V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKCk7CiAgICAgCiAgICAg
dm9pZCBzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChib29sKTsKQEAgLTY1LDE0ICs2
OCwxNCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlYWREYXRhRnJvbURpc2tJZk5lZWRlZCgpOwog
Ci0gICAgdm9pZCBtZXJnZVN0YXRpc3RpY3MoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3M+Jik7Ci0KLSAgICBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUmIGNvcmVTdG9yZSgpIHsgcmV0dXJuIG1fcmVzb3VyY2VTdGF0aXN0aWNzU3RvcmUuZ2V0
KCk7IH0KLSAgICBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmIGNv
cmVTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb3VyY2VTdGF0aXN0aWNzU3RvcmUuZ2V0KCk7
IH0KKyAgICBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmIGNvcmVTdG9yZSgp
IHsgcmV0dXJuIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmdldCgpOyB9CisgICAgY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJiBjb3JlU3RvcmUoKSBjb25z
dCB7IHJldHVybiBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5nZXQoKTsgfQogCiBwcml2
YXRlOgogICAgIGV4cGxpY2l0IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZShjb25zdCBT
dHJpbmcmKTsKIAorICAgIHZvaWQgcHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3JkcygpOwor
CiAgICAgYm9vbCBoYXNQcmV2YWxlbnRSZXNvdXJjZUNoYXJhY3RlcmlzdGljcyhjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7CiAgICAgdm9pZCBjbGFzc2lmeVJlc291cmNl
KFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3MmKTsKICAgICB2b2lkIHJlbW92ZURhdGFS
ZWNvcmRzKCk7CkBAIC04NSw3ICs4OCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCB3cml0ZUVuY29k
ZXJUb0Rpc2soV2ViQ29yZTo6S2V5ZWRFbmNvZGVyJiwgY29uc3QgU3RyaW5nJiBsYWJlbCkgY29u
c3Q7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OktleWVkRGVjb2Rlcj4gY3JlYXRlRGVj
b2RlckZyb21EaXNrKGNvbnN0IFN0cmluZyYgbGFiZWwpIGNvbnN0OwogCi0gICAgUmVmPFdlYkNv
cmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4gbV9yZXNvdXJjZVN0YXRpc3RpY3NTdG9y
ZTsKKyAgICBSZWY8V2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiBtX3Jlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTsKICAgICBSZWY8V1RGOjpXb3JrUXVldWU+IG1fc3RhdGlz
dGljc1F1ZXVlOwogICAgIFN0cmluZyBtX3N0b3JhZ2VQYXRoOwogICAgIGJvb2wgbV9yZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCB7IGZhbHNlIH07CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0MvV0tBUElDYXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9DL1dLQVBJQ2FzdC5oCShyZXZpc2lvbiAyMTE5OTMpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tBUElDYXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rv
cm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKQEAgLTEwNyw2ICsxMDcsNyBAQCBjbGFzcyBXZWJQcm9jZXNzUG9vbDsKIGNsYXNzIFdlYlBy
b3RlY3Rpb25TcGFjZTsKIGNsYXNzIFdlYlJlbmRlckxheWVyOwogY2xhc3MgV2ViUmVuZGVyT2Jq
ZWN0OworY2xhc3MgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI7CiBjbGFzcyBXZWJU
ZXh0Q2hlY2tlcjsKIGNsYXNzIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OwogY2xhc3Mg
V2ViVmlicmF0aW9uUHJveHk7CkBAIC0xNTYsNiArMTU3LDcgQEAgV0tfQUREX0FQSV9NQVBQSU5H
KFdLUHJlZmVyZW5jZXNSZWYsIFdlYgogV0tfQUREX0FQSV9NQVBQSU5HKFdLUHJvdGVjdGlvblNw
YWNlUmVmLCBXZWJQcm90ZWN0aW9uU3BhY2UpCiBXS19BRERfQVBJX01BUFBJTkcoV0tSZW5kZXJM
YXllclJlZiwgV2ViUmVuZGVyTGF5ZXIpCiBXS19BRERfQVBJX01BUFBJTkcoV0tSZW5kZXJPYmpl
Y3RSZWYsIFdlYlJlbmRlck9iamVjdCkKK1dLX0FERF9BUElfTUFQUElORyhXS1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NNYW5hZ2VyUmVmLCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcikK
IFdLX0FERF9BUElfTUFQUElORyhXS1Nlc3Npb25TdGF0ZVJlZiwgQVBJOjpTZXNzaW9uU3RhdGUp
CiBXS19BRERfQVBJX01BUFBJTkcoV0tUZXh0Q2hlY2tlclJlZiwgV2ViVGV4dENoZWNrZXIpCiBX
S19BRERfQVBJX01BUFBJTkcoV0tVc2VyQ29udGVudENvbnRyb2xsZXJSZWYsIFdlYlVzZXJDb250
ZW50Q29udHJvbGxlclByb3h5KQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
L1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2Vy
LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXS1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmgiCisKKyNpbmNsdWRlICJXS0FQSUNhc3QuaCIK
KyNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oIgorCit1c2luZyBu
YW1lc3BhY2UgV2ViS2l0OworCitXS1R5cGVJRCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5h
Z2VyR2V0VHlwZUlEKCkKK3sKKyAgICByZXR1cm4gdG9BUEkoV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01hbmFnZXI6OkFQSVR5cGUpOworfQorCit2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01hbmFnZXJTZXRQcmV2YWxlbnRSZXNvdXJjZShXS1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2
YWx1ZSkKK3sKKyAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6c2V0UHJldmFs
ZW50UmVzb3VyY2UodG9XVEZTdHJpbmcoaG9zdE5hbWUpLCB2YWx1ZSk7Cit9CisKK2Jvb2wgV0tS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcklzUHJldmFsZW50UmVzb3VyY2UoV0tTdHJpbmdS
ZWYgaG9zdE5hbWUpCit7CisgICAgcmV0dXJuIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5h
Z2VyOjppc1ByZXZhbGVudFJlc291cmNlKHRvV1RGU3RyaW5nKGhvc3ROYW1lKSk7Cit9CisKK3Zv
aWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNldEhhc0hhZFVzZXJJbnRlcmFjdGlv
bihXS1N0cmluZ1JlZiBob3N0TmFtZSwgYm9vbCB2YWx1ZSkKK3sKKyAgICBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWFuYWdlcjo6c2V0SGFzSGFkVXNlckludGVyYWN0aW9uKHRvV1RGU3RyaW5n
KGhvc3ROYW1lKSwgdmFsdWUpOworfQorCitib29sIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01h
bmFnZXJJc0hhc0hhZFVzZXJJbnRlcmFjdGlvbihXS1N0cmluZ1JlZiBob3N0TmFtZSkKK3sKKyAg
ICByZXR1cm4gV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXI6Omhhc0hhZFVzZXJJbnRl
cmFjdGlvbih0b1dURlN0cmluZyhob3N0TmFtZSkpOworfQorCit2b2lkIFdLUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01hbmFnZXJTZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKGRvdWJsZSBzZWNv
bmRzKQoreworICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXRUaW1lVG9M
aXZlVXNlckludGVyYWN0aW9uKHNlY29uZHMpOworfQorCit2b2lkIFdLUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01hbmFnZXJGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKQoreworICAgIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpmaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIo
KTsKK30KKwordm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0Tm90aWZ5UGFn
ZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVlKQoreworICAgIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dl
cmVTY2FubmVkKHZhbHVlKTsKK30KKwordm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5h
Z2VyU2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9v
bCB2YWx1ZSkKK3sKKyAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcjo6c2V0U2hv
dWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwodmFsdWUpOworfQor
Cit2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXRNaW5pbXVtVGltZUJldHdl
ZWVuRGF0YVJlY29yZHNSZW1vdmFsKGRvdWJsZSBzZWNvbmRzKQoreworICAgIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NNYW5hZ2VyOjpzZXRNaW5pbXVtVGltZUJldHdlZWVuRGF0YVJlY29yZHNS
ZW1vdmFsKHNlY29uZHMpOworfQorCit2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFn
ZXJSZXNldFRvQ29uc2lzdGVudFN0YXRlKCkKK3sKKyAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWFuYWdlcjo6cmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSgpOworfQpJbmRleDogU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWFuYWdlci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQy9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSA8V2ViS2l0L1dLQmFzZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisgICAgCisgICAgV0tf
RVhQT1JUIFdLVHlwZUlEIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJHZXRUeXBlSUQo
KTsKKyAgICAKKyAgICBXS19FWFBPUlQgdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5h
Z2VyU2V0UHJldmFsZW50UmVzb3VyY2UoV0tTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUp
OworICAgIFdLX0VYUE9SVCBib29sIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJJc1By
ZXZhbGVudFJlc291cmNlKFdLU3RyaW5nUmVmIGhvc3ROYW1lKTsKKyAgICBXS19FWFBPUlQgdm9p
ZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0SGFzSGFkVXNlckludGVyYWN0aW9u
KFdLU3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIHZhbHVlKTsKKyAgICBXS19FWFBPUlQgYm9vbCBX
S1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VySXNIYXNIYWRVc2VySW50ZXJhY3Rpb24oV0tT
dHJpbmdSZWYgaG9zdE5hbWUpOworICAgIFdLX0VYUE9SVCB2b2lkIFdLUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01hbmFnZXJTZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKGRvdWJsZSBzZWNvbmRz
KTsKKyAgICBXS19FWFBPUlQgdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0
UmVkdWNlZFRpbWVzdGFtcFJlc29sdXRpb24oZG91YmxlIHNlY29uZHMpOworICAgIFdLX0VYUE9S
VCB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJGaXJlRGF0YU1vZGlmaWNhdGlv
bkhhbmRsZXIoKTsKKyAgICBXS19FWFBPUlQgdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NN
YW5hZ2VyU2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVl
KTsKKyAgICBXS19FWFBPUlQgdm9pZCBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0
U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCB2YWx1
ZSk7CisgICAgV0tfRVhQT1JUIHZvaWQgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlclNl
dE1pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92YWwoZG91YmxlIHNlY29uZHMpOwor
ICAgIFdLX0VYUE9SVCB2b2lkIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJSZXNldFRv
Q29uc2lzdGVudFN0YXRlKCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dl
YnNpdGVEYXRhU3RvcmUuY3BwCShyZXZpc2lvbiAyMTE5OTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ3Myw2ICs0NzMsMzUgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpmZXRjaERhdGEoT3B0
aW9uUwogICAgIGNhbGxiYWNrQWdncmVnYXRvci0+Y2FsbElmTmVlZGVkKCk7CiB9CiAKK3ZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6ZmV0Y2hEYXRhRm9yVG9wUHJpdmF0ZWx5T3duZWREb21haW5zKE9w
dGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IGRhdGFUeXBlcywgT3B0aW9uU2V0PFdlYnNpdGVEYXRh
RmV0Y2hPcHRpb24+IGZldGNoT3B0aW9ucywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHRvcFByaXZh
dGVseU93bmVkRG9tYWlucywgc3RkOjpmdW5jdGlvbjx2b2lkKFZlY3RvcjxXZWJzaXRlRGF0YVJl
Y29yZD4pPiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBmZXRjaERhdGEoZGF0YVR5cGVzLCBm
ZXRjaE9wdGlvbnMsIFt0b3BQcml2YXRlbHlPd25lZERvbWFpbnMsIGNvbXBsZXRpb25IYW5kbGVy
LCB0aGlzXShhdXRvIGV4aXN0aW5nRGF0YVJlY29yZHMpIHsKKyAgICAgICAgVmVjdG9yPFdlYnNp
dGVEYXRhUmVjb3JkPiBtYXRjaGluZ0RhdGFSZWNvcmRzOworICAgICAgICBWZWN0b3I8U3RyaW5n
PiBkb21haW5zV2l0aERhdGFSZWNvcmRzOworICAgICAgICBmb3IgKGF1dG8mIGRhdGFSZWNvcmQg
OiBleGlzdGluZ0RhdGFSZWNvcmRzKSB7CisgICAgICAgICAgICBib29sIGRhdGFSZWNvcmRBZGRl
ZDsKKyAgICAgICAgICAgIGZvciAoYXV0byYgZGF0YVJlY29yZE9yaWdpbkRhdGEgOiBkYXRhUmVj
b3JkLm9yaWdpbnMpIHsKKyAgICAgICAgICAgICAgICBkYXRhUmVjb3JkQWRkZWQgPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICBTdHJpbmcgZGF0YVJlY29yZEhvc3QgPSBkYXRhUmVjb3JkT3JpZ2lu
RGF0YS5zZWN1cml0eU9yaWdpbigpLmdldCgpLmhvc3QoKTsKKyAgICAgICAgICAgICAgICBmb3Ig
KGF1dG8mIHRvcFByaXZhdGVseU93bmVkRG9tYWluIDogdG9wUHJpdmF0ZWx5T3duZWREb21haW5z
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhUmVjb3JkSG9zdC5lbmRzV2l0aElnbm9y
aW5nQVNDSUlDYXNlKHRvcFByaXZhdGVseU93bmVkRG9tYWluKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgYXV0byBzdWZmaXhTdGFydCA9IGRhdGFSZWNvcmRIb3N0Lmxlbmd0aCgpIC0gdG9w
UHJpdmF0ZWx5T3duZWREb21haW4ubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIXN1ZmZpeFN0YXJ0IHx8IGRhdGFSZWNvcmRIb3N0W3N1ZmZpeFN0YXJ0IC0gMV0gPT0gJy4n
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hpbmdEYXRhUmVjb3Jkcy5hcHBl
bmQoZGF0YVJlY29yZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tYWluc1dpdGhE
YXRhUmVjb3Jkcy5hcHBlbmQodG9wUHJpdmF0ZWx5T3duZWREb21haW4pOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGFSZWNvcmRBZGRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGRhdGFS
ZWNvcmRBZGRlZCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobWF0Y2hpbmdEYXRhUmVjb3Jkcyk7
CisgICAgfSk7Cit9CisgICAgCiBzdGF0aWMgUHJvY2Vzc0FjY2Vzc1R5cGUgY29tcHV0ZU5ldHdv
cmtQcm9jZXNzQWNjZXNzVHlwZUZvckRhdGFSZW1vdmFsKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5
cGU+IGRhdGFUeXBlcywgYm9vbCBpc05vblBlcnNpc3RlbnRTdG9yZSkKIHsKICAgICBQcm9jZXNz
QWNjZXNzVHlwZSBwcm9jZXNzQWNjZXNzVHlwZSA9IFByb2Nlc3NBY2Nlc3NUeXBlOjpOb25lOwpA
QCAtOTk4LDYgKzEwMjcsMTUgQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpyZW1vdmVEYXRhKE9w
dGlvbgogICAgIGNhbGxiYWNrQWdncmVnYXRvci0+Y2FsbElmTmVlZGVkKCk7CiB9CiAKK3ZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6cmVtb3ZlRGF0YUZvclRvcFByaXZhdGVseU93bmVkRG9tYWlucyhP
cHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiBkYXRhVHlwZXMsIE9wdGlvblNldDxXZWJzaXRlRGF0
YUZldGNoT3B0aW9uPiBmZXRjaE9wdGlvbnMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB0b3BQcml2
YXRlbHlPd25lZERvbWFpbnMsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uSGFuZGxl
cikKK3sKKyAgICBmZXRjaERhdGFGb3JUb3BQcml2YXRlbHlPd25lZERvbWFpbnMoZGF0YVR5cGVz
LCBmZXRjaE9wdGlvbnMsIHRvcFByaXZhdGVseU93bmVkRG9tYWlucywgW2RhdGFUeXBlcywgY29t
cGxldGlvbkhhbmRsZXIsIHRoaXNdKGF1dG8gd2Vic2l0ZURhdGFSZWNvcmRzKSB7CisgICAgICAg
IHRoaXMtPnJlbW92ZURhdGEoZGF0YVR5cGVzLCB3ZWJzaXRlRGF0YVJlY29yZHMsIFtjb21wbGV0
aW9uSGFuZGxlcl0oKSB7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAg
ICB9KTsKKyAgICB9KTsKK30KKwogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjp3ZWJQYWdlV2FzQWRk
ZWQoV2ViUGFnZVByb3h5JiB3ZWJQYWdlUHJveHkpCiB7CiAgICAgaWYgKG1fc3RvcmFnZU1hbmFn
ZXIpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURh
dGFTdG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJzaXRl
RGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgJKHJldmlzaW9uIDIxMTk5MykKKysrIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTg0LDggKzg0LDEwIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBjbG9uZVNlc3Np
b25EYXRhKFdlYlBhZ2VQcm94eSYgc291cmNlUGFnZSwgV2ViUGFnZVByb3h5JiBuZXdQYWdlKTsK
IAogICAgIHZvaWQgZmV0Y2hEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBPcHRpb25T
ZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4sIHN0ZDo6ZnVuY3Rpb248dm9pZCAoVmVjdG9yPFdl
YnNpdGVEYXRhUmVjb3JkPik+IGNvbXBsZXRpb25IYW5kbGVyKTsKKyAgICB2b2lkIGZldGNoRGF0
YUZvclRvcFByaXZhdGVseU93bmVkRG9tYWlucyhPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwg
T3B0aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hPcHRpb24+LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
dG9wUHJpdmF0ZWx5T3duZWREb21haW5zLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoVmVjdG9yPFdlYnNp
dGVEYXRhUmVjb3JkPik+IGNvbXBsZXRpb25IYW5kbGVyKTsKICAgICB2b2lkIHJlbW92ZURhdGEo
T3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRp
bWVfcG9pbnQgbW9kaWZpZWRTaW5jZSwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBjb21wbGV0aW9u
SGFuZGxlcik7CiAgICAgdm9pZCByZW1vdmVEYXRhKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+
LCBjb25zdCBWZWN0b3I8V2Vic2l0ZURhdGFSZWNvcmQ+Jiwgc3RkOjpmdW5jdGlvbjx2b2lkICgp
PiBjb21wbGV0aW9uSGFuZGxlcik7CisgICAgdm9pZCByZW1vdmVEYXRhRm9yVG9wUHJpdmF0ZWx5
T3duZWREb21haW5zKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBPcHRpb25TZXQ8V2Vic2l0
ZURhdGFGZXRjaE9wdGlvbj4sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB0b3BQcml2YXRlbHlPd25l
ZERvbWFpbnMsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uSGFuZGxlcik7CiAKICAg
ICBTdG9yYWdlTWFuYWdlciogc3RvcmFnZU1hbmFnZXIoKSB7IHJldHVybiBtX3N0b3JhZ2VNYW5h
Z2VyLmdldCgpOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIxMTk5MykKKysrIFNvdXJjZS9XZWJLaXQy
L1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTE0
Niw2ICsxMTQ2LDEwIEBACiAJCTY1MDFCRDFBMTJGMTI0MzQwMEU5RjI0OCAvKiBXS0J1bmRsZUlu
c3BlY3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA2NUI4NkYxNzEyRjExRDdCMDBCN0REOEEgLyogV0tCdW5kbGVJbnNwZWN0b3IuY3BwICovOyB9
OwogCQk2NTlDNTUxRTEzMDAwNjQxMDAyNUMwQzIgLyogSW5qZWN0ZWRCdW5kbGVQYWdlUmVzb3Vy
Y2VMb2FkQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDY1NDZBODI5MTMwMDAxNjQwMDBDRUIxQyAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VSZXNv
dXJjZUxvYWRDbGllbnQuY3BwICovOyB9OwogCQk2NUI4NkYxRTEyRjExREUzMDBCN0REOEEgLyog
V0tCdW5kbGVJbnNwZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDY1Qjg2RjE4MTJGMTFEN0IwMEI3REQ4QSAvKiBXS0J1bmRsZUluc3BlY3Rvci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTZCRTk2
OTlDMUU0M0IzRkYwMDhCNzQ4MyAvKiBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QkU5Njk5QjFF
NDNCM0ZGMDA4Qjc0ODMgLyogV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTZCRTk2OTlFMUU0
M0I0MUQwMDhCNzQ4MyAvKiBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZCRTk2OTlEMUU0M0I0
MUQwMDhCNzQ4MyAvKiBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcCAqLzsgfTsK
KwkJNkJFOTY5QTAxRTQzQjg2RTAwOEI3NDgzIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NN
YW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2
QkU5Njk5RjFFNDNCODZFMDA4Qjc0ODMgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFn
ZXIuaCAqLzsgfTsKKwkJNkJFOTY5QTIxRTQzQjhBNDAwOEI3NDgzIC8qIFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDZCRTk2OUExMUU0M0I4QTQwMDhCNzQ4MyAvKiBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWFuYWdlci5jcHAgKi87IH07CiAJCTZFRTg0OUM4MTM2OEQ5MzkwMDM4RDQ4MSAv
KiBXS0luc3BlY3RvclByaXZhdGVNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDZFRTg0OUM2MTM2OEQ5MkQwMDM4RDQ4MSAvKiBXS0luc3BlY3RvclBy
aXZhdGVNYWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk3MjhFODZGMTE3OTUxODhDMDA4Nzg3OUUgLyogV2ViQ29sb3JQaWNrZXJNYWMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyOEU4NkVGMTc5NTE4
OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBpY2tlck1hYy5oICovOyB9OwogCQk3MjhFODZGMjE3OTUx
ODhDMDA4Nzg3OUUgLyogV2ViQ29sb3JQaWNrZXJNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjhFODZGMDE3OTUxODhDMDA4Nzg3OUUgLyogV2Vi
Q29sb3JQaWNrZXJNYWMubW0gKi87IH07CkBAIC0zMzI5LDYgKzMzMzMsMTAgQEAKIAkJNjU0NkE4
MkExMzAwMDE2NDAwMENFQjFDIC8qIEluamVjdGVkQnVuZGxlUGFnZVJlc291cmNlTG9hZENsaWVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmplY3RlZEJ1bmRsZVBhZ2VS
ZXNvdXJjZUxvYWRDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjVCODZG
MTcxMkYxMUQ3QjAwQjdERDhBIC8qIFdLQnVuZGxlSW5zcGVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdLQnVuZGxlSW5zcGVjdG9yLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjVCODZGMTgxMkYxMUQ3QjAwQjdERDhBIC8qIFdLQnVuZGxl
SW5zcGVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQnVuZGxlSW5z
cGVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZCRTk2OTlCMUU0M0IzRkYw
MDhCNzQ4MyAvKiBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkJFOTY5OUQxRTQzQjQxRDAwOEI3NDgzIC8q
IFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZCRTk2OTlGMUU0M0I4NkUwMDhCNzQ4MyAvKiBX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk2QkU5NjlBMTFFNDNCOEE0MDA4Qjc0ODMgLyogV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk2RDhBOTFBNTExRjBFRkQxMDBERDAxRkUgLyogY29tLmFwcGxl
LldlYlByb2Nlc3Muc2IuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gY29tLmFwcGxlLldlYlBy
b2Nlc3Muc2IuaW47IHBhdGggPSBXZWJQcm9jZXNzL2NvbS5hcHBsZS5XZWJQcm9jZXNzLnNiLmlu
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RUU4NDlDNjEzNjhEOTJEMDAzOEQ0ODEg
LyogV0tJbnNwZWN0b3JQcml2YXRlTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IFdLSW5zcGVjdG9yUHJpdmF0ZU1hYy5oOyBwYXRoID0gbWFjL1dLSW5zcGVjdG9yUHJpdmF0
ZU1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjhFODZFRjE3OTUxODhDMDA4
Nzg3OUUgLyogV2ViQ29sb3JQaWNrZXJNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViQ29sb3JQaWNrZXJNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTY1MzQsNiArNjU0Miw4IEBACiAJCQkJQkMxMTFCMEQxMTJGNUU0RjAwMzM3QkFCIC8qIFdlYlBy
b2Nlc3NQcm94eS5jcHAgKi8sCiAJCQkJQkMwMzJEQ0YxMEY0Mzg5RjAwNThDMTVBIC8qIFdlYlBy
b2Nlc3NQcm94eS5oICovLAogCQkJCUJDRUU3QUIzMTI4MTcwOTUwMDk4MjdEQSAvKiBXZWJQcm9j
ZXNzUHJveHkubWVzc2FnZXMuaW4gKi8sCisJCQkJNkJFOTY5OUYxRTQzQjg2RTAwOEI3NDgzIC8q
IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmggKi8sCisJCQkJNkJFOTY5QTExRTQz
QjhBNDAwOEI3NDgzIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmNwcCAqLywK
IAkJCQk3QTlDRDhDMDFDNzc5ODQ5MDBEOUY2QzcgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlLmNwcCAqLywKIAkJCQk3QTlDRDhDMTFDNzc5ODQ5MDBEOUY2QzcgLyogV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlLmggKi8sCiAJCQkJN0E5Q0Q4QzIxQzc3OUFENjAwRDlGNkM3
IC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5tZXNzYWdlcy5pbiAqLywKQEAgLTY3
MjIsNiArNjczMiw4IEBACiAJCQkJNTE4QUNBRTkxMkFFRTZCQjAwQjA0QjgzIC8qIFdLUHJvdGVj
dGlvblNwYWNlVHlwZXMuaCAqLywKIAkJCQkzMzM2NzYzODEzMEM5OURDMDA2QzlERTIgLyogV0tS
ZXNvdXJjZUNhY2hlTWFuYWdlci5jcHAgKi8sCiAJCQkJMzMzNjc2MzkxMzBDOTlEQzAwNkM5REUy
IC8qIFdLUmVzb3VyY2VDYWNoZU1hbmFnZXIuaCAqLywKKwkJCQk2QkU5Njk5RDFFNDNCNDFEMDA4
Qjc0ODMgLyogV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlci5jcHAgKi8sCisJCQkJNkJF
OTY5OUIxRTQzQjNGRjAwOEI3NDgzIC8qIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIu
aCAqLywKIAkJCQkxQURFNDZCMDE5NTRFQzYxMDAwRjc5ODUgLyogV0tTZXNzaW9uU3RhdGVSZWYu
Y3BwICovLAogCQkJCTFBREU0NkIxMTk1NEVDNjEwMDBGNzk4NSAvKiBXS1Nlc3Npb25TdGF0ZVJl
Zi5oICovLAogCQkJCTMxNDg4OEZFMUQ5MUIxMUQwMDM3NzA0MiAvKiBXS1RleHRDaGVja2VyLmNw
cCAqLywKQEAgLTg1NzQsNiArODU4Niw3IEBACiAJCQkJOTMyMUQ1OEExQTM4RjE5NjAwODA1MkJF
IC8qIFdLSW1tZWRpYXRlQWN0aW9uVHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFDOEUyOTM5
MTI3NjFFNUIwMEJDN0JEMCAvKiBXS0luc3BlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYz
QzcyNUIxOTZGNjA0RTAwQUVERDBDIC8qIFdLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNkJFOTY5QTAxRTQzQjg2RTAwOEI3NDgzIC8qIFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTQyOTNBNDE5NUE0M0RB
MDAyNzgyQzcgLyogV0tJbnNwZWN0b3JOb2RlU2VhcmNoR2VzdHVyZVJlY29nbml6ZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTZFRTg0OUM4MTM2OEQ5MzkwMDM4RDQ4MSAvKiBXS0luc3BlY3RvclBy
aXZhdGVNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxQTlFMTBCMTMxNUNEMTgwMDlFNzAzMSAv
KiBXS0tleVZhbHVlU3RvcmFnZU1hbmFnZXIuaCBpbiBIZWFkZXJzICovLApAQCAtODc1OCw2ICs4
NzcxLDcgQEAKIAkJCQkxQTNDQzE2NzE4OTA2QUNGMDAxRTZFRDggLyogV0tXZWJWaWV3LmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQURGNTkxQjE4OTA1MjhFMDA0M0MxNDUgLyogV0tXZWJWaWV3Q29u
ZmlndXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ3QUFGRDYxOEM5NTZBRjAwQTdBQ0Q0
IC8qIFdLV2ViVmlld0NvbmZpZ3VyYXRpb25JbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NkJFOTY5OUMxRTQzQjNGRjAwOEI3NDgzIC8qIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFn
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQzE0MTUxMThBQzQ3RUUwMDZDNjAyQyAvKiBXS1dl
YlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDFEQzQ1OUMx
RTNEQkIyODAwQjExRjUxIC8qIExpYldlYlJUQ1NvY2tldENsaWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMkQ3QUFGRDMxOEM4NjQwNjAwQTdBQ0Q0IC8qIFdLV2ViVmlld0NvbnRlbnRQcm92aWRl
ci5oIGluIEhlYWRlcnMgKi8sCkBAIC05OTc4LDYgKzk5OTIsNyBAQAogCQkJCTM3NjA4ODFFMTUw
NDEzRTkwMEZDODJDNyAvKiBXZWJSZW5kZXJPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NTEwQUZGQjkxNjU0MjA0ODAwMUJBMDVFIC8qIFdlYlJlc291cmNlTG9hZGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTUxRjA2MEUxMTY1NDMxODUwMEYzMjgxQiAvKiBXZWJSZXNvdXJjZUxvYWRl
ck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgNkJFOTY5QTIxRTQzQjhBNDAwOEI3NDgzIC8qIFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRjA2MEUxMTY1NDMxODUw
MEYzMjgxQyAvKiBXZWJSVENTb2NrZXRNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNTFGMDYwRTExNjU0MzE4NTAwRjMyODJDIC8qIFdlYlJUQ1Jlc29sdmVyTWVzc2FnZVJl
Y2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRjA2MEUxMTY1NDMxODUwMEYzMjgxRCAv
KiBOZXR3b3JrUlRDU29ja2V0TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
MTAxNjgsNiArMTAxODMsNyBAQAogCQkJCTM3OTQ4NDA4MTUwQzRCOTcwMEU1MkNFOSAvKiBXS1Jl
bmRlckxheWVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTM3NjA4ODIyMTUwNDE0RjcwMEZDODJD
NyAvKiBXS1JlbmRlck9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMzM2NzYzQTEzMEM5
OURDMDA2QzlERTIgLyogV0tSZXNvdXJjZUNhY2hlTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNkJFOTY5OUUxRTQzQjQxRDAwOEI3NDgz
IC8qIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMUE3RTM3NzgxOEU0QTRGRTAwM0QwRkZGIC8qIFdLU2NyaXB0TWVzc2FnZS5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGQ0I0RTU1MThCQkUwNDQwMDBGQ0ZDOSAvKiBXS1Njcm9sbFZpZXcubW0g
aW4gU291cmNlcyAqLywKIAkJCQk1MUNEMUM2NjFCMzRCOURDMDAxNDJDQTUgLyogV0tTZWN1cml0
eU9yaWdpbi5tbSBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQcm9jZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlByb2Nlc3MuY3BwCShyZXZpc2lvbiAyMTE5OTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlByb2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTY4LDcgKzE2OCw3IEBA
IFdlYlByb2Nlc3M6OldlYlByb2Nlc3MoKQogI2lmIFBMQVRGT1JNKElPUykKICAgICAsIG1fd2Vi
U1FMaXRlRGF0YWJhc2VUcmFja2VyKCp0aGlzKQogI2VuZGlmCi0gICAgLCBtX3Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yYWdlKFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
Y3JlYXRlKCkpCisgICAgLCBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZShXZWJDb3JlOjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNyZWF0ZSgpKQogewogICAgIC8vIEluaXRpYWxp
emUgb3VyIHBsYXRmb3JtIHN0cmF0ZWdpZXMuCiAgICAgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpp
bml0aWFsaXplKCk7CkBAIC0xOTAsOCArMTkwLDggQEAgV2ViUHJvY2Vzczo6V2ViUHJvY2Vzcygp
CiAKICAgICBtX3BsdWdJbkF1dG9TdGFydE9yaWdpbkhhc2hlcy5hZGQoU2Vzc2lvbklEOjpkZWZh
dWx0U2Vzc2lvbklEKCksIEhhc2hNYXA8dW5zaWduZWQsIGRvdWJsZT4oKSk7CiAKLSAgICBSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkT2JzZXJ2ZXIoKS5zZXRTdGF0aXN0aWNzU3RvcmUobV9y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmFnZS5jb3B5UmVmKCkpOwotICAgIG1fcmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JhZ2UtPnNldE5vdGlmaWNhdGlvbkNhbGxiYWNrKFt0aGlzXSB7Cisg
ICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZE9ic2VydmVyKCkuc2V0U3RhdGlzdGljc1N0
b3JlKG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNvcHlSZWYoKSk7CisgICAgbV9yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUtPnNldE5vdGlmaWNhdGlvbkNhbGxiYWNrKFt0aGlzXSB7
CiAgICAgICAgIGlmIChtX3N0YXRpc3RpY3NDaGFuZ2VkVGltZXIuaXNBY3RpdmUoKSkKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgbV9zdGF0aXN0aWNzQ2hhbmdlZFRpbWVyLnN0YXJ0T25l
U2hvdChzdGQ6OmNocm9ubzo6c2Vjb25kcyg1KSk7CkBAIC0xMzkxLDEwICsxMzkxLDEwIEBAIHZv
aWQgV2ViUHJvY2Vzczo6bm9uVmlzaWJsZVByb2Nlc3NDbGVhbnUKIAogdm9pZCBXZWJQcm9jZXNz
OjpzdGF0aXN0aWNzQ2hhbmdlZFRpbWVyRmlyZWQoKQogewotICAgIGlmIChtX3Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yYWdlLT5pc0VtcHR5KCkpCisgICAgaWYgKG1fcmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlLT5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHBhcmVudFBy
b2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1VwZGF0ZWQobV9yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmFnZS0+dGFrZVN0YXRpc3RpY3MoKSksIDApOworICAgIHBhcmVudFByb2Nlc3ND
b25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1VwZGF0ZWQobV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUtPnRha2VTdGF0aXN0aWNzKCkpLCAwKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzOjpzZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChib29sIGVuYWJsZWQpCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaAkocmV2aXNpb24gMjExOTkzKQorKysgU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MTQs
NyArNDE0LDcgQEAgcHJpdmF0ZToKICAgICBXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXIgbV93ZWJT
UUxpdGVEYXRhYmFzZVRyYWNrZXI7CiAjZW5kaWYKIAotICAgIFJlZjxXZWJDb3JlOjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU+IG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JhZ2U7Cisg
ICAgUmVmPFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4gbV9yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU7CiAKICAgICB1bnNpZ25lZCBtX3BhZ2VzTWFya2luZ0xheWVyc0Fz
Vm9sYXRpbGUgeyAwIH07CiAgICAgYm9vbCBtX3N1cHByZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVy
IHsgZmFsc2UgfTsKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDIxMjE4MikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDUxIEBACisyMDE3LTAyLTEwICBKb2huIFdpbGFuZGVyICA8d2lsYW5k
ZXJAYXBwbGUuY29tPgorCisgICAgICAgIFVwZGF0ZXMgdG8gUmVzb3VyY2UgTG9hZCBTdGF0aXN0
aWNzOiBHZXQgdGhlIHJpZ2h0IHdlYnNpdGUgZGF0YSBzdG9yZSBhbmQgaW50cm9kdWNlIHRpbWVv
dXQgZm9yIHVzZXIgaW50ZXJhY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2NzQ3NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjQ2ODE4MDg+
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yNDcwMzI4Nj4KKyAgICAgICAgPHJkYXI6Ly9wcm9i
bGVtLzMwMjkwMjcwPgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyB0ZXN0IGluZnJhc3RydWN0
dXJlIHRvIGFsbG93IHRlc3RpbmcgCisgICAgICAgIG9mIHRoZSB2YXJpb3VzIHJ1bGVzIGluIHBs
YWNlIGZvciBkYXRhIHJlY29yZHMgcmVtb3ZhbC4KKworICAgICAgICBSZXZpZXdlZCBieSBBbmR5
IEVzdGVzLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5k
aW5ncy9UZXN0UnVubmVyLmlkbDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcDoKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGU6
OmRpZFJlY2VpdmVNZXNzYWdlVG9QYWdlKToKKyAgICAgICAgICAgIENhbGxiYWNrIG1lY2hhbmlz
bSB0byB0ZWxsIHBhZ2VzIHRoYXQgYSB3ZWJzaXRlIGRhdGEgc3RvcmUKKyAgICAgICAgICAgIHNj
YW4gaGFzIGhhcHBlbmVkLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvVGVzdFJ1bm5lci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldFN0YXRpc3Rp
Y3NQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OmlzU3RhdGlz
dGljc1ByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0U3Rh
dGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OmlzU3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXVFI6OlRlc3RS
dW5uZXI6OnNldFN0YXRpc3RpY3NUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKToKKyAgICAgICAg
KFdUUjo6VGVzdFJ1bm5lcjo6aW5zdGFsbFN0YXRpc3RpY3NEaWRNb2RpZnlEYXRhUmVjb3Jkc0Nh
bGxiYWNrKToKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c3RhdGlzdGljc0RpZE1vZGlmeURh
dGFSZWNvcmRzQ2FsbGJhY2spOgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzdGF0aXN0aWNz
RmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKToKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6
c2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQpOgorICAg
ICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJj
ZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwpOgorICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpz
ZXRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAg
ICAgIChXVFI6OlRlc3RSdW5uZXI6OnN0YXRpc3RpY3NSZXNldFRvQ29uc2lzdGVudFN0YXRlKToK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaDoK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdUUjo6VGVzdENvbnRyb2xsZXI6OnNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZSk6Cisg
ICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjppc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJj
ZSk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzSGFzSGFkVXNl
ckludGVyYWN0aW9uKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmlzU3RhdGlzdGlj
c0hhc0hhZFVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpz
ZXRTdGF0aXN0aWNzVGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXVFI6OlRl
c3RDb250cm9sbGVyOjpzdGF0aXN0aWNzRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKToKKyAg
ICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5E
YXRhUmVjb3Jkc1dlcmVTY2FubmVkKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnNl
dFN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3Zh
bCk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzTWluaW11bVRp
bWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9s
bGVyOjpzdGF0aXN0aWNzUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSk6CisgICAgICAgICogV2ViS2l0
VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oOgorICAgICAgICAgICAgVGhlc2UgYXJlIGFsbCBj
b25maWd1cmF0aW9uIGFuZCB0ZXN0IGZ1bmN0aW9ucy4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVu
bmVyL1Rlc3RJbnZvY2F0aW9uLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRp
ZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUpOgorCiAyMDE3LTAy
LTEwICBDYXJsb3MgQWxiZXJ0byBMb3BleiBQZXJleiAgPGNsb3BlekBpZ2FsaWEuY29tPgogCiAg
ICAgICAgIFJFR1JFU1NJT04ocjE4MjkxNikgcnVuLXBlcmYtdGVzdHMgbmV2ZXIgdGltZW91dHMK
SW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCShyZXZpc2lv
biAyMTE5OTMpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAs
IDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAsIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU1LDYgKzU1LDcgQEAKICNpbmNsdWRlIDxX
ZWJLaXQvV0tQbHVnaW5JbmZvcm1hdGlvbi5oPgogI2luY2x1ZGUgPFdlYktpdC9XS1ByZWZlcmVu
Y2VzUmVmUHJpdmF0ZS5oPgogI2luY2x1ZGUgPFdlYktpdC9XS1Byb3RlY3Rpb25TcGFjZS5oPgor
I2luY2x1ZGUgPFdlYktpdC9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyLmg+CiAjaW5j
bHVkZSA8V2ViS2l0L1dLUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8V2ViS2l0L1dLU2VjdXJpdHlP
cmlnaW5SZWYuaD4KICNpbmNsdWRlIDxXZWJLaXQvV0tUZXh0Q2hlY2tlci5oPgpAQCAtMjIwNiw2
ICsyMjA3LDU1IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnNldElnbm9yZXNWaWV3cG9ydFMKICAg
ICBXS1BhZ2VTZXRJZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0cyhtX21haW5XZWJWaWV3LT5wYWdl
KCksIGlnbm9yZXNWaWV3cG9ydFNjYWxlTGltaXRzKTsKIH0KIAordm9pZCBUZXN0Q29udHJvbGxl
cjo6c2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKFdLU3RyaW5nUmVmIGhvc3ROYW1lLCBi
b29sIHZhbHVlKQoreworICAgIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXRQcmV2
YWxlbnRSZXNvdXJjZShob3N0TmFtZSwgdmFsdWUpOworfQorCitib29sIFRlc3RDb250cm9sbGVy
Ojppc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShXS1N0cmluZ1JlZiBob3N0TmFtZSkKK3sK
KyAgICByZXR1cm4gV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlcklzUHJldmFsZW50UmVz
b3VyY2UoaG9zdE5hbWUpOworfQorCit2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNz
SGFzSGFkVXNlckludGVyYWN0aW9uKFdLU3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIHZhbHVlKQor
eworICAgIFdLUmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbmFnZXJTZXRIYXNIYWRVc2VySW50ZXJh
Y3Rpb24oaG9zdE5hbWUsIHZhbHVlKTsKK30KKworYm9vbCBUZXN0Q29udHJvbGxlcjo6aXNTdGF0
aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKFdLU3RyaW5nUmVmIGhvc3ROYW1lKQoreworICAg
IHJldHVybiBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VySXNIYXNIYWRVc2VySW50ZXJh
Y3Rpb24oaG9zdE5hbWUpOworfQorCit2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNz
VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihkb3VibGUgc2Vjb25kcykKK3sKKyAgICBXS1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihzZWNv
bmRzKTsKK30KKwordm9pZCBUZXN0Q29udHJvbGxlcjo6c3RhdGlzdGljc0ZpcmVEYXRhTW9kaWZp
Y2F0aW9uSGFuZGxlcigpCit7CisgICAgV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFuYWdlckZp
cmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOworfQorICAgIAordm9pZCBUZXN0Q29udHJvbGxl
cjo6c2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9v
bCB2YWx1ZSkKK3sKKyAgICBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0Tm90aWZ5
UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCh2YWx1ZSk7Cit9CisgICAgCit2b2lkIFRl
c3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVE
YXRhUmVjb3Jkc1JlbW92YWwoYm9vbCB2YWx1ZSkKK3sKKyAgICBXS1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NNYW5hZ2VyU2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1Jl
bW92YWwodmFsdWUpOworfQorCit2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzTWlu
aW11bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbChkb3VibGUgc2Vjb25kcykKK3sKKyAg
ICBXS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNYW5hZ2VyU2V0TWluaW11bVRpbWVCZXR3ZWVlbkRh
dGFSZWNvcmRzUmVtb3ZhbChzZWNvbmRzKTsKK30KK3ZvaWQgVGVzdENvbnRyb2xsZXI6OnN0YXRp
c3RpY3NSZXNldFRvQ29uc2lzdGVudFN0YXRlKCkKK3sKKyAgICBXS1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NNYW5hZ2VyUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSgpOworfQorICAgIAogI2lmICFQTEFU
Rk9STShDT0NPQSkKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtV2lsbFJ1blRlc3QoY29u
c3QgVGVzdEludm9jYXRpb24mKQogewpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0
Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENv
bnRyb2xsZXIuaAkocmV2aXNpb24gMjExOTkzKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCwgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQ4LDYgKzE0
OCwxNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFNob3VsZERvd25sb2FkVW5kaXNwbGF5YWJs
ZU1JTUVUeXBlcyhib29sIHZhbHVlKSB7IG1fc2hvdWxkRG93bmxvYWRVbmRpc3BsYXlhYmxlTUlN
RVR5cGVzID0gdmFsdWU7IH0KIAorICAgIHZvaWQgc2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291
cmNlKFdLU3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIHZhbHVlKTsKKyAgICBib29sIGlzU3RhdGlz
dGljc1ByZXZhbGVudFJlc291cmNlKFdLU3RyaW5nUmVmIGhvc3ROYW1lKTsKKyAgICB2b2lkIHNl
dFN0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24oV0tTdHJpbmdSZWYgaG9zdE5hbWUsIGJv
b2wgdmFsdWUpOworICAgIGJvb2wgaXNTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKFdL
U3RyaW5nUmVmIGhvc3ROYW1lKTsKKyAgICB2b2lkIHNldFN0YXRpc3RpY3NUaW1lVG9MaXZlVXNl
ckludGVyYWN0aW9uKGRvdWJsZSBzZWNvbmRzKTsKKyAgICB2b2lkIHN0YXRpc3RpY3NGaXJlRGF0
YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKKyAgICB2b2lkIHNldFN0YXRpc3RpY3NOb3RpZnlQYWdl
c1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wpOworICAgIHZvaWQgc2V0U3RhdGlzdGlj
c1Nob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wpOwor
ICAgIHZvaWQgc2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92
YWwoZG91YmxlKTsKKyAgICB2b2lkIHN0YXRpc3RpY3NSZXNldFRvQ29uc2lzdGVudFN0YXRlKCk7
CisKIHByaXZhdGU6CiAgICAgV0tSZXRhaW5QdHI8V0tQYWdlQ29uZmlndXJhdGlvblJlZj4gZ2Vu
ZXJhdGVQYWdlQ29uZmlndXJhdGlvbihXS0NvbnRleHRDb25maWd1cmF0aW9uUmVmKTsKICAgICBX
S1JldGFpblB0cjxXS0NvbnRleHRDb25maWd1cmF0aW9uUmVmPiBnZW5lcmF0ZUNvbnRleHRDb25m
aWd1cmF0aW9uKCkgY29uc3Q7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZv
Y2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZv
Y2F0aW9uLmNwcAkocmV2aXNpb24gMjExOTkzKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0SW52b2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEwLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtODg2LDYgKzg4Niw4OSBAQCBXS1JldGFpblB0
cjxXS1R5cGVSZWY+IFRlc3RJbnZvY2F0aW9uOjpkCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgfQogCisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJTZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UiKSkgeworICAgICAgICBBU1NFUlQoV0tH
ZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLRGljdGlvbmFyeUdldFR5cGVJRCgpKTsKKworICAg
ICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2FnZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8
V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9keSk7CisgICAgICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBob3N0TmFtZUtleShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiSG9zdE5hbWUiKSk7CisgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB2YWx1ZUtl
eShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVmFsdWUiKSk7CisKKyAg
ICAgICAgV0tTdHJpbmdSZWYgaG9zdE5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tE
aWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGhvc3ROYW1lS2V5
LmdldCgpKSk7CisgICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9v
bGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnks
IHZhbHVlS2V5LmdldCgpKSk7CisKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LnNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShob3N0TmFtZSwgV0tCb29sZWFuR2V0VmFs
dWUodmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJc1N0YXRpc3RpY3NQcmV2
YWxlbnRSZXNvdXJjZSIpKSB7CisgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9k
eSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7CisKKyAgICAgICAgV0tTdHJpbmdSZWYgaG9zdE5h
bWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOworICAgICAgICBib29s
IGlzUHJldmFsZW50ID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmlzU3RhdGlzdGljc1By
ZXZhbGVudFJlc291cmNlKGhvc3ROYW1lKTsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVm
PiByZXN1bHQoQWRvcHRXSywgV0tCb29sZWFuQ3JlYXRlKGlzUHJldmFsZW50KSk7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcobWVzc2FnZU5hbWUsICJTZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uIikp
IHsKKyAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RpY3Rpb25h
cnlHZXRUeXBlSUQoKSk7CisgICAgICAgIAorICAgICAgICBXS0RpY3Rpb25hcnlSZWYgbWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5ID0gc3RhdGljX2Nhc3Q8V0tEaWN0aW9uYXJ5UmVmPihtZXNzYWdlQm9k
eSk7CisgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBob3N0TmFtZUtleShBZG9wdFdL
LCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSk7CisgICAgICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiB2YWx1ZUtleShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiVmFsdWUiKSk7CisgICAgICAgIAorICAgICAgICBXS1N0cmluZ1JlZiBo
b3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9y
S2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaG9zdE5hbWVLZXkuZ2V0KCkpKTsKKyAgICAgICAg
V0tCb29sZWFuUmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25h
cnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgdmFsdWVLZXkuZ2V0KCkpKTsK
KyAgICAgICAgCisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRTdGF0aXN0
aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKGhvc3ROYW1lLCBXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1
ZSkpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIklzU3RhdGlzdGljc0hhc0hhZFVzZXJJ
bnRlcmFjdGlvbiIpKSB7CisgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkg
PT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7CisgICAgICAgIAorICAgICAgICBXS1N0cmluZ1JlZiBo
b3N0TmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7CisgICAgICAg
IGJvb2wgaGFzSGFkVXNlckludGVyYWN0aW9uID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LmlzU3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbihob3N0TmFtZSk7CisgICAgICAgIFdL
UmV0YWluUHRyPFdLVHlwZVJlZj4gcmVzdWx0KEFkb3B0V0ssIFdLQm9vbGVhbkNyZWF0ZShoYXNI
YWRVc2VySW50ZXJhY3Rpb24pKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAg
CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRT
dGF0aXN0aWNzVGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbiIpKSB7CisgICAgICAgIEFTU0VSVChX
S0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEb3VibGVHZXRUeXBlSUQoKSk7CisgICAgICAg
IFdLRG91YmxlUmVmIHNlY29uZHMgPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4obWVzc2FnZUJv
ZHkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1Rp
bWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oV0tEb3VibGVHZXRWYWx1ZShzZWNvbmRzKSk7CisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICAKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlN0YXRpc3RpY3NGaXJlRGF0YU1vZGlmaWNhdGlv
bkhhbmRsZXIiKSkgeworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc3RhdGlz
dGljc0ZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9CisgICAgCisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVz
c2FnZU5hbWUsICJTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5l
ZCIpKSB7CisgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29s
ZWFuR2V0VHlwZUlEKCkpOworICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2Fz
dDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLnNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2Fu
bmVkKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIH0KKworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1l
LCAiU3RhdGlzdGljc1Nob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1v
dmFsIikpIHsKKyAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jv
b2xlYW5HZXRUeXBlSUQoKSk7CisgICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19j
YXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkuc2V0U3RhdGlzdGljc1Nob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0
YVJlY29yZHNSZW1vdmFsKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KKworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KG1lc3NhZ2VOYW1lLCAiU2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jk
c1JlbW92YWwiKSkgeworICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09
IFdLRG91YmxlR2V0VHlwZUlEKCkpOworICAgICAgICBXS0RvdWJsZVJlZiBzZWNvbmRzID0gc3Rh
dGljX2Nhc3Q8V0tEb3VibGVSZWY+KG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLnNldFN0YXRpc3RpY3NNaW5pbXVtVGltZUJldHdlZWVuRGF0YVJlY29y
ZHNSZW1vdmFsKFdLRG91YmxlR2V0VmFsdWUoc2Vjb25kcykpOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICB9CisgICAgCisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJTdGF0aXN0aWNzUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSIpKSB7CisgICAg
ICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zdGF0aXN0aWNzUmVzZXRUb0NvbnNpc3Rl
bnRTdGF0ZSgpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CiAKICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gbnVsbHB0cjsKSW5kZXg6IFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3Bw
CShyZXZpc2lvbiAyMTE5OTMpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0luamVjdGVkQnVuZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2Niw2ICsyNjYsMTEg
QEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6ZGlkUmVjZWl2ZU1lc3NhZ2VUbwogICAgICAgICByZXR1
cm47CiAgICAgfQogCisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2Fn
ZU5hbWUsICJXZWJzaXRlRGF0YURlbGV0aW9uRm9yVG9wUHJpdmF0ZWx5T3duZWREb21haW5zRmlu
aXNoZWQiKSkgeworICAgICAgICBtX3Rlc3RSdW5uZXItPnN0YXRpc3RpY3NEaWRNb2RpZnlEYXRh
UmVjb3Jkc0NhbGxiYWNrKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gZXJyb3JNZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiRXJyb3IiKSk7CiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IGVycm9yTWVzc2FnZUJvZHkoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlVua25vd24iKSk7CiAgICAgV0tCdW5kbGVQYWdlUG9zdE1lc3NhZ2UocGFnZSwgZXJyb3JNZXNz
YWdlTmFtZS5nZXQoKSwgZXJyb3JNZXNzYWdlQm9keS5nZXQoKSk7CkluZGV4OiBUb29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAJKHJl
dmlzaW9uIDIxMTk5MykKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
VGVzdFJ1bm5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEwLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEwLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVk
ZSAiU3RyaW5nRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiVGVzdENvbnRyb2xsZXIuaCIKICNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NUZXN0UnVubmVyVXRpbHMuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL1Jlc291cmNlTG9hZE9ic2VydmVyLmg+CiAjaW5jbHVkZSA8V2ViS2l0L1dLQnVuZGxlLmg+
CiAjaW5jbHVkZSA8V2ViS2l0L1dLQnVuZGxlQmFja0ZvcndhcmRMaXN0Lmg+CiAjaW5jbHVkZSA8
V2ViS2l0L1dLQnVuZGxlRnJhbWUuaD4KQEAgLTYzNSw2ICs2MzYsNyBAQCBlbnVtIHsKICAgICBX
aWxsRW5kU3dpcGVDYWxsYmFja0lELAogICAgIERpZEVuZFN3aXBlQ2FsbGJhY2tJRCwKICAgICBE
aWRSZW1vdmVTd2lwZVNuYXBzaG90Q2FsbGJhY2tJRCwKKyAgICBTdGF0aXN0aWNzRGlkTW9kaWZ5
RGF0YVJlY29yZHNDYWxsYmFja0lELAogICAgIEZpcnN0VUlTY3JpcHRDYWxsYmFja0lEID0gMTAw
CiB9OwogCkBAIC0xMTUyLDYgKzExNTQsMTI4IEBAIHZvaWQgVGVzdFJ1bm5lcjo6Y2FsbERpZFJl
bW92ZVN3aXBlU25hcHMKICAgICBjYWxsVGVzdFJ1bm5lckNhbGxiYWNrKERpZFJlbW92ZVN3aXBl
U25hcHNob3RDYWxsYmFja0lEKTsKIH0KIAordm9pZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNz
UHJldmFsZW50UmVzb3VyY2UoSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpCit7Cisg
ICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKKyAgICBWZWN0b3I8V0tS
ZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOworCisgICAga2V5cy5hcHBlbmQoeyBBZG9wdFdL
LCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSG9zdE5hbWUiKSB9KTsKKyAgICB2YWx1
ZXMuYXBwZW5kKHsgQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcoaG9zdE5hbWUp
IH0pOworICAgIAorICAgIGtleXMuYXBwZW5kKHsgQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlZhbHVlIikgfSk7CisgICAgdmFsdWVzLmFwcGVuZCh7IEFkb3B0V0ssIFdL
Qm9vbGVhbkNyZWF0ZSh2YWx1ZSkgfSk7CisgICAgCisgICAgVmVjdG9yPFdLU3RyaW5nUmVmPiBy
YXdLZXlzOworICAgIFZlY3RvcjxXS1R5cGVSZWY+IHJhd1ZhbHVlczsKKyAgICByYXdLZXlzLnJl
c2l6ZShrZXlzLnNpemUoKSk7CisgICAgcmF3VmFsdWVzLnJlc2l6ZSh2YWx1ZXMuc2l6ZSgpKTsK
KyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgcmF3S2V5c1tpXSA9IGtleXNbaV0uZ2V0KCk7CisgICAgICAgIHJhd1ZhbHVlc1tpXSA9
IHZhbHVlc1tpXS5nZXQoKTsKKyAgICB9CisgICAgCisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJT
ZXRTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2UiKSk7CisgICAgV0tSZXRhaW5QdHI8V0tEaWN0
aW9uYXJ5UmVmPiBtZXNzYWdlQm9keShBZG9wdFdLLCBXS0RpY3Rpb25hcnlDcmVhdGUocmF3S2V5
cy5kYXRhKCksIHJhd1ZhbHVlcy5kYXRhKCksIHJhd0tleXMuc2l6ZSgpKSk7CisKKyAgICBXS0J1
bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1
bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOwor
fQorCitib29sIFRlc3RSdW5uZXI6OmlzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKEpTU3Ry
aW5nUmVmIGhvc3ROYW1lKQoreworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSXNTdGF0aXN0aWNz
UHJldmFsZW50UmVzb3VyY2UiKSk7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VCb2R5KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3ROYW1lKSk7Cisg
ICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSAwOworICAgIFdLQnVuZGxlUGFnZVBvc3RTeW5jaHJv
bm91c01lc3NhZ2VGb3JUZXN0aW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCkt
PnBhZ2UoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCAmcmV0dXJuRGF0
YSk7CisgICAgcmV0dXJuIFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJl
Zj4ocmV0dXJuRGF0YSkpOworfQorCit2b2lkIFRlc3RSdW5uZXI6OnNldFN0YXRpc3RpY3NIYXNI
YWRVc2VySW50ZXJhY3Rpb24oSlNTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpCit7Cisg
ICAgVmVjdG9yPFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPj4ga2V5czsKKyAgICBWZWN0b3I8V0tS
ZXRhaW5QdHI8V0tUeXBlUmVmPj4gdmFsdWVzOworICAgIAorICAgIGtleXMuYXBwZW5kKHsgQWRv
cHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhvc3ROYW1lIikgfSk7CisgICAg
dmFsdWVzLmFwcGVuZCh7IEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKGhvc3RO
YW1lKSB9KTsKKyAgICAKKyAgICBrZXlzLmFwcGVuZCh7IEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJWYWx1ZSIpIH0pOworICAgIHZhbHVlcy5hcHBlbmQoeyBBZG9wdFdL
LCBXS0Jvb2xlYW5DcmVhdGUodmFsdWUpIH0pOworICAgIAorICAgIFZlY3RvcjxXS1N0cmluZ1Jl
Zj4gcmF3S2V5czsKKyAgICBWZWN0b3I8V0tUeXBlUmVmPiByYXdWYWx1ZXM7CisgICAgcmF3S2V5
cy5yZXNpemUoa2V5cy5zaXplKCkpOworICAgIHJhd1ZhbHVlcy5yZXNpemUodmFsdWVzLnNpemUo
KSk7CisgICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKSB7
CisgICAgICAgIHJhd0tleXNbaV0gPSBrZXlzW2ldLmdldCgpOworICAgICAgICByYXdWYWx1ZXNb
aV0gPSB2YWx1ZXNbaV0uZ2V0KCk7CisgICAgfQorICAgIAorICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBtZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiU2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbiIpKTsKKyAgICBXS1JldGFpblB0
cjxXS0RpY3Rpb25hcnlSZWY+IG1lc3NhZ2VCb2R5KEFkb3B0V0ssIFdLRGljdGlvbmFyeUNyZWF0
ZShyYXdLZXlzLmRhdGEoKSwgcmF3VmFsdWVzLmRhdGEoKSwgcmF3S2V5cy5zaXplKCkpKTsKKyAg
ICAKKyAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCks
IG51bGxwdHIpOworfQorCitib29sIFRlc3RSdW5uZXI6OmlzU3RhdGlzdGljc0hhc0hhZFVzZXJJ
bnRlcmFjdGlvbihKU1N0cmluZ1JlZiBob3N0TmFtZSkKK3sKKyAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIklzU3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbiIpKTsKKyAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZUJvZHkoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoSlNT
dHJpbmcoaG9zdE5hbWUpKTsKKyAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IDA7CisgICAgV0tC
dW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRlc3RpbmcoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJv
ZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKKyAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoc3Rh
dGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSk7Cit9CisKK3ZvaWQgVGVzdFJ1bm5l
cjo6c2V0U3RhdGlzdGljc1RpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oZG91YmxlIHNlY29uZHMp
Cit7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzVGltZVRvTGl2ZVVzZXJJ
bnRlcmFjdGlvbiIpKTsKKyAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4gbWVzc2FnZUJvZHko
QWRvcHRXSywgV0tEb3VibGVDcmVhdGUoc2Vjb25kcykpOworICAgIFdLQnVuZGxlUG9zdFN5bmNo
cm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3Nh
Z2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7Cit9CisKK3ZvaWQgVGVz
dFJ1bm5lcjo6aW5zdGFsbFN0YXRpc3RpY3NEaWRNb2RpZnlEYXRhUmVjb3Jkc0NhbGxiYWNrKEpT
VmFsdWVSZWYgY2FsbGJhY2spCit7CisgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soU3RhdGlz
dGljc0RpZE1vZGlmeURhdGFSZWNvcmRzQ2FsbGJhY2tJRCwgY2FsbGJhY2spOworfQorCit2b2lk
IFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NEaWRNb2RpZnlEYXRhUmVjb3Jkc0NhbGxiYWNrKCkKK3sK
KyAgICBjYWxsVGVzdFJ1bm5lckNhbGxiYWNrKFN0YXRpc3RpY3NEaWRNb2RpZnlEYXRhUmVjb3Jk
c0NhbGxiYWNrSUQpOworfQorCit2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NGaXJlRGF0YU1v
ZGlmaWNhdGlvbkhhbmRsZXIoKQoreworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNz
YWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU3RhdGlzdGlj
c0ZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlciIpKTsKKyAgICBXS0J1bmRsZVBvc3RTeW5jaHJv
bm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgMCwgbnVsbHB0cik7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RhdGlz
dGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCB2YWx1ZSkKK3sK
KyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVj
b3Jkc1dlcmVTY2FubmVkIikpOworICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2Fn
ZUJvZHkoQWRvcHRXSywgV0tCb29sZWFuQ3JlYXRlKHZhbHVlKSk7CisgICAgV0tCdW5kbGVQb3N0
U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKK30KKwordm9p
ZCBUZXN0UnVubmVyOjpzZXRTdGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVE
YXRhUmVjb3Jkc1JlbW92YWwoYm9vbCB2YWx1ZSkKK3sKKyAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
IlN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3Zh
bCIpKTsKKyAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5KEFkb3B0V0ss
IFdLQm9vbGVhbkNyZWF0ZSh2YWx1ZSkpOworICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVz
c2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdl
dCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7Cit9CisKK3ZvaWQgVGVzdFJ1bm5lcjo6
c2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92YWwoZG91Ymxl
IHNlY29uZHMpCit7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFk
b3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRTdGF0aXN0aWNzTWluaW11
bVRpbWVCZXR3ZWVlbkRhdGFSZWNvcmRzUmVtb3ZhbCIpKTsKKyAgICBXS1JldGFpblB0cjxXS0Rv
dWJsZVJlZj4gbWVzc2FnZUJvZHkoQWRvcHRXSywgV0tEb3VibGVDcmVhdGUoc2Vjb25kcykpOwor
ICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVs
bHB0cik7Cit9CisgICAgCit2b2lkIFRlc3RSdW5uZXI6OnN0YXRpc3RpY3NSZXNldFRvQ29uc2lz
dGVudFN0YXRlKCkKK3sKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUo
QWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlN0YXRpc3RpY3NSZXNldFRv
Q29uc2lzdGVudFN0YXRlIikpOworICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAw
LCBudWxscHRyKTsKK30KKwogI2lmIFBMQVRGT1JNKE1BQykKIHZvaWQgVGVzdFJ1bm5lcjo6Y29u
bmVjdE1vY2tHYW1lcGFkKHVuc2lnbmVkIGluZGV4KQogewpJbmRleDogVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmgJKHJldmlzaW9uIDIx
MTk5MykKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5l
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQ1LDYgKzM0NSwyMCBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXRNb2NrR2FtZXBhZERldGFpbHModW5zaWduZWQgaW5kZXgsIEpTU3RyaW5nUmVmIGdhbWVw
YWRJRCwgdW5zaWduZWQgYXhpc0NvdW50LCB1bnNpZ25lZCBidXR0b25Db3VudCk7CiAgICAgdm9p
ZCBzZXRNb2NrR2FtZXBhZEF4aXNWYWx1ZSh1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgYXhpc0lu
ZGV4LCBkb3VibGUgdmFsdWUpOwogICAgIHZvaWQgc2V0TW9ja0dhbWVwYWRCdXR0b25WYWx1ZSh1
bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgYnV0dG9uSW5kZXgsIGRvdWJsZSB2YWx1ZSk7CisgICAg
CisgICAgLy8gUmVzb3VyY2UgTG9hZCBTdGF0aXN0aWNzCisgICAgdm9pZCBpbnN0YWxsU3RhdGlz
dGljc0RpZE1vZGlmeURhdGFSZWNvcmRzQ2FsbGJhY2soSlNWYWx1ZVJlZiBjYWxsYmFjayk7Cisg
ICAgdm9pZCBzdGF0aXN0aWNzRGlkTW9kaWZ5RGF0YVJlY29yZHNDYWxsYmFjaygpOworICAgIHZv
aWQgc3RhdGlzdGljc0ZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOworICAgIHZvaWQgc2V0
U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKEpTU3RyaW5nUmVmIGhvc3ROYW1lLCBib29sIHZh
bHVlKTsKKyAgICBib29sIGlzU3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKEpTU3RyaW5nUmVm
IGhvc3ROYW1lKTsKKyAgICB2b2lkIHNldFN0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24o
SlNTdHJpbmdSZWYgaG9zdE5hbWUsIGJvb2wgdmFsdWUpOworICAgIGJvb2wgaXNTdGF0aXN0aWNz
SGFzSGFkVXNlckludGVyYWN0aW9uKEpTU3RyaW5nUmVmIGhvc3ROYW1lKTsKKyAgICB2b2lkIHNl
dFN0YXRpc3RpY3NUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKGRvdWJsZSBzZWNvbmRzKTsKKyAg
ICB2b2lkIHNldFN0YXRpc3RpY3NOb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVk
KGJvb2wpOworICAgIHZvaWQgc2V0U3RhdGlzdGljc1Nob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVm
b3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wpOworICAgIHZvaWQgc2V0U3RhdGlzdGljc01pbmlt
dW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92YWwoZG91YmxlKTsKKyAgICB2b2lkIHN0YXRp
c3RpY3NSZXNldFRvQ29uc2lzdGVudFN0YXRlKCk7CiAKIHByaXZhdGU6CiAgICAgVGVzdFJ1bm5l
cigpOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5n
cy9UZXN0UnVubmVyLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsCShyZXZpc2lvbiAyMTE5OTMpCisr
KyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5u
ZXIuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjQ2LDQgKzI0NiwxNyBAQCBpbnRlcmZhY2UgVGVz
dFJ1bm5lciB7CiAgICAgdm9pZCBzZXRNb2NrR2FtZXBhZEJ1dHRvblZhbHVlKHVuc2lnbmVkIGxv
bmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgYnV0dG9uSW5kZXgsIGRvdWJsZSB2YWx1ZSk7CiAgICAg
dm9pZCBjb25uZWN0TW9ja0dhbWVwYWQodW5zaWduZWQgbG9uZyBpbmRleCk7CiAgICAgdm9pZCBk
aXNjb25uZWN0TW9ja0dhbWVwYWQodW5zaWduZWQgbG9uZyBpbmRleCk7CisKKyAgICAvLyBSZXNv
dXJjZSBMb2FkIFN0YXRpc3RpY3MKKyAgICB2b2lkIGluc3RhbGxTdGF0aXN0aWNzRGlkTW9kaWZ5
RGF0YVJlY29yZHNDYWxsYmFjayhvYmplY3QgY2FsbGJhY2spOworICAgIHZvaWQgc2V0U3RhdGlz
dGljc1ByZXZhbGVudFJlc291cmNlKERPTVN0cmluZyBob3N0TmFtZSwgYm9vbGVhbiB2YWx1ZSk7
CisgICAgYm9vbGVhbiBpc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShET01TdHJpbmcgaG9z
dE5hbWUpOworICAgIHZvaWQgc2V0U3RhdGlzdGljc0hhc0hhZFVzZXJJbnRlcmFjdGlvbihET01T
dHJpbmcgaG9zdE5hbWUsIGJvb2xlYW4gdmFsdWUpOworICAgIGJvb2xlYW4gaXNTdGF0aXN0aWNz
SGFzSGFkVXNlckludGVyYWN0aW9uKERPTVN0cmluZyBob3N0TmFtZSk7CisgICAgdm9pZCBzZXRT
dGF0aXN0aWNzVGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihkb3VibGUgc2Vjb25kcyk7CisgICAg
dm9pZCBzdGF0aXN0aWNzRmlyZURhdGFNb2RpZmljYXRpb25IYW5kbGVyKCk7CisgICAgdm9pZCBz
ZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sZWFu
IHZhbHVlKTsKKyAgICB2b2lkIHNldFN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJlc291cmNlc0Jl
Zm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sZWFuIHZhbHVlKTsKKyAgICB2b2lkIHNldFN0YXRp
c3RpY3NNaW5pbXVtVGltZUJldHdlZWVuRGF0YVJlY29yZHNSZW1vdmFsKGRvdWJsZSBzZWNvbmRz
KTsKKyAgICB2b2lkIHN0YXRpc3RpY3NSZXNldFRvQ29uc2lzdGVudFN0YXRlKCk7CiB9OwpJbmRl
eDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5n
ZUxvZwkocmV2aXNpb24gMjEyMTY2KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTctMDItMTAgIEpvaG4gV2lsYW5kZXIgIDx3aWxh
bmRlckBhcHBsZS5jb20+CisKKyAgICAgICAgVXBkYXRlcyB0byBSZXNvdXJjZSBMb2FkIFN0YXRp
c3RpY3M6IEdldCB0aGUgcmlnaHQgd2Vic2l0ZSBkYXRhIHN0b3JlIGFuZCBpbnRyb2R1Y2UgdGlt
ZW91dCBmb3IgdXNlciBpbnRlcmFjdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY3NDc0CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yNDY4MTgw
OD4KKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI0NzAzMjg2PgorICAgICAgICA8cmRhcjovL3By
b2JsZW0vMzAyOTAyNzA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQW5keSBFc3Rlcy4KKworICAg
ICAgICAqIFRlc3RFeHBlY3RhdGlvbnM6CisgICAgICAgICAgICBNYXJrZWQgYXMgZ2VuZXJhbCBz
a2lwIChzZWUgV0syIGV4cGVjdGF0aW9ucyBiZWxvdykuCisgICAgICAgICogaHR0cC90ZXN0cy9s
b2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3M6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVz
dHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL25vbi1wcmV2YWxlbnQtcmVzb3VyY2Ut
d2l0aC11c2VyLWludGVyYWN0aW9uLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0
cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3Mvbm9uLXByZXZhbGVudC1yZXNv
dXJjZS13aXRoLXVzZXItaW50ZXJhY3Rpb24uaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90
ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3Mvbm9uLXByZXZhbGVudC1yZXNvdXJj
ZS13aXRob3V0LXVzZXItaW50ZXJhY3Rpb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9ub24tcHJldmFsZW50
LXJlc291cmNlLXdpdGhvdXQtdXNlci1pbnRlcmFjdGlvbi5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBodHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wcmV2YWxlbnQtcmVz
b3VyY2Utd2l0aC11c2VyLWludGVyYWN0aW9uLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcHJldmFsZW50LXJl
c291cmNlLXdpdGgtdXNlci1pbnRlcmFjdGlvbi10aW1lb3V0LWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcHJl
dmFsZW50LXJlc291cmNlLXdpdGgtdXNlci1pbnRlcmFjdGlvbi10aW1lb3V0Lmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGh0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3By
ZXZhbGVudC1yZXNvdXJjZS13aXRoLXVzZXItaW50ZXJhY3Rpb24uaHRtbDogQWRkZWQuCisgICAg
ICAgICogaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcHJldmFsZW50
LXJlc291cmNlLXdpdGhvdXQtdXNlci1pbnRlcmFjdGlvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGh0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3ByZXZh
bGVudC1yZXNvdXJjZS13aXRob3V0LXVzZXItaW50ZXJhY3Rpb24uaHRtbDogQWRkZWQuCisgICAg
ICAgICogcGxhdGZvcm0vd2syL1Rlc3RFeHBlY3RhdGlvbnM6CisgICAgICAgICAgICBNYXJrZWQg
YXMgdmFsaWQgZm9yIFdlYktpdDIgb25seS4KKwogMjAxNy0wMi0xMCAgU2ltb24gRnJhc2VyICA8
c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIHN1cmUgdGhlICJpbndpbmRv
dyIgZmxhZyBwcm9wYWdhdGVzIHRvIFRpbGVkQmFja2luZ3MgZm9yIG1hc2tzIGFuZCByZWZsZWN0
aW9ucwpJbmRleDogTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zCShyZXZpc2lvbiAyMTE5OTMpCisrKyBMYXlvdXRU
ZXN0cy9UZXN0RXhwZWN0YXRpb25zCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCw3IEBAIGh0
dHAvdGVzdHMvcXVpY2tsb29rIFsgU2tpcCBdCiAjIFRoZXNlIHRlc3RzIGFyZSBXZWJLaXQyLW9u
bHkKIGh0dHAvdGVzdHMvYXBwY2FjaGUvZGVjaWRlLW5hdmlnYXRpb24tcG9saWN5LWFmdGVyLWRl
bGF5Lmh0bWwgWyBTa2lwIF0KIGh0dHAvdGVzdHMvbWlzYy93aWxsLXNlbmQtcmVxdWVzdC13aXRo
LWNsaWVudC1wcm92aWRlZC1odHRwLWJvZHkuaHRtbCBbIFNraXAgXQoraHR0cC90ZXN0cy9sb2Fk
aW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvIFsgU2tpcCBdCiAKICMgT25seSBNYWMgYW5kIGlP
UyBoYXZlIGFuIGltcGxlbWVudGF0aW9uIG9mIFVJU2NyaXB0Q29udHJvbGxlcjo6ZG9Bc3luY1Rh
c2soKS4KIGZhc3QvaGFybmVzcy91aXNjcmlwdGNvbnRyb2xsZXIgWyBTa2lwIF0KSW5kZXg6IExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL25vbi1w
cmV2YWxlbnQtcmVzb3VyY2Utd2l0aC11c2VyLWludGVyYWN0aW9uLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3Rh
dGlzdGljcy9ub24tcHJldmFsZW50LXJlc291cmNlLXdpdGgtdXNlci1pbnRlcmFjdGlvbi1leHBl
Y3RlZC50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5n
L3Jlc291cmNlTG9hZFN0YXRpc3RpY3Mvbm9uLXByZXZhbGVudC1yZXNvdXJjZS13aXRoLXVzZXIt
aW50ZXJhY3Rpb24tZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOCBAQAor
bWFpbiBmcmFtZSAtIGRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUKK21haW4gZnJhbWUg
LSBkaWRDb21taXRMb2FkRm9yRnJhbWUKK21haW4gZnJhbWUgLSBkaWRSZWNlaXZlVGl0bGU6IFRl
c3RzIGZvciBOb24tUHJldmFsZW50IFJlc291cmNlIFdpdGggVXNlciBJbnRlcmFjdGlvbgorbWFp
biBmcmFtZSAtIGRpZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1lCittYWluIGZyYW1lIC0gZGlk
SGFuZGxlT25sb2FkRXZlbnRzRm9yRnJhbWUKK21haW4gZnJhbWUgLSBkaWRGaW5pc2hMb2FkRm9y
RnJhbWUKK1BBU1MgQ29va2llIG5vdCBkZWxldGVkLgorCkluZGV4OiBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9ub24tcHJldmFsZW50LXJlc291
cmNlLXdpdGgtdXNlci1pbnRlcmFjdGlvbi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL25vbi1wcmV2YWxlbnQt
cmVzb3VyY2Utd2l0aC11c2VyLWludGVyYWN0aW9uLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3Mvbm9uLXBy
ZXZhbGVudC1yZXNvdXJjZS13aXRoLXVzZXItaW50ZXJhY3Rpb24uaHRtbAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDU2IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sIGxhbmc9ImVuIj4KKzxo
ZWFkPgorICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KKyAgICA8dGl0bGU+VGVzdHMgZm9yIE5v
bi1QcmV2YWxlbnQgUmVzb3VyY2UgV2l0aCBVc2VyIEludGVyYWN0aW9uPC90aXRsZT4KKyAgICA8
c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5PgorPHNjcmlwdD4KKyAgICBjb25zdCBob3N0VW5kZXJUZXN0ID0gIjEyNy4w
LjAuMTo4MDAwIjsKKyAgICBjb25zdCBzdGF0aXN0aWNzVXJsID0gImh0dHA6Ly8iICsgaG9zdFVu
ZGVyVGVzdCArICIvdGVtcCI7CisgICAgY29uc3Qgb3RoZXJQcmV2YWxlbnRVcmwgPSAiaHR0cDov
L2xvY2FsaG9zdDo4MDAwL3RlbXAiOworICAgIGZ1bmN0aW9uIHJ1blRlc3RSdW5uZXJUZXN0KCkg
eworICAgICAgICBpZiAoZG9jdW1lbnQuY29va2llICE9PSAiIikKKyAgICAgICAgICAgIHRlc3RG
YWlsZWQoImRvY3VtZW50LmNvb2tpZSBub3QgZW1wdHkuIik7CisgICAgICAgIGNvbnN0IGNvb2tp
ZSA9ICJ0ZXN0Q29va2llPXRlc3RWYWx1ZSI7CisgICAgICAgIGRvY3VtZW50LmNvb2tpZSA9IGNv
b2tpZSArICI7IG1heC1hZ2U9MTAwOyI7CisgICAgICAgIGlmIChkb2N1bWVudC5jb29raWUgIT09
IGNvb2tpZSkKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoImRvY3VtZW50LmNvb2tpZSBkaWQgbm90
IGdldCBzZXQuIik7CisKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzUHJldmFsZW50
UmVzb3VyY2Uoc3RhdGlzdGljc1VybCwgZmFsc2UpOworICAgICAgICBpZiAodGVzdFJ1bm5lci5p
c1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShzdGF0aXN0aWNzVXJsKSkKKyAgICAgICAgICAg
IHRlc3RGYWlsZWQoIkhvc3QgZGlkIG5vdCBnZXQgc2V0IGFzIG5vbi1wcmV2YWxlbnQgcmVzb3Vy
Y2UuIik7CisKKyAgICAgICAgLy8gVGhpcyBpcyBkb25lIHRvIG5vdCBoYXZlIGFuIGVtcHR5IHNl
dCBvZiBwcmV2YWxlbnQgcmVzb3VyY2VzLgorICAgICAgICAvLyBPdGhlcndpc2UgZGF0YSByZWNv
cmRzIGFyZSBuZXZlciBzY2FubmVkLgorICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NQ
cmV2YWxlbnRSZXNvdXJjZShvdGhlclByZXZhbGVudFVybCwgdHJ1ZSk7CisgICAgICAgIGlmICgh
dGVzdFJ1bm5lci5pc1N0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShvdGhlclByZXZhbGVudFVy
bCkpCisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJPdGhlciBob3N0IGRpZCBub3QgZ2V0IHNldCBh
cyBwcmV2YWxlbnQgcmVzb3VyY2UuIik7CisKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0
aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKHN0YXRpc3RpY3NVcmwsIHRydWUpOworICAgICAgICBp
ZiAoIXRlc3RSdW5uZXIuaXNTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKHN0YXRpc3Rp
Y3NVcmwpKQorICAgICAgICAgICAgdGVzdEZhaWxlZCgiSG9zdCBkaWQgbm90IGdldCBsb2dnZWQg
Zm9yIHVzZXIgaW50ZXJhY3Rpb24uIik7CisKKyAgICAgICAgdGVzdFJ1bm5lci5pbnN0YWxsU3Rh
dGlzdGljc0RpZE1vZGlmeURhdGFSZWNvcmRzQ2FsbGJhY2soZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgICBpZiAoZG9jdW1lbnQuY29va2llID09PSBjb29raWUpCisgICAgICAgICAgICAgICAgdGVz
dFBhc3NlZCgiQ29va2llIG5vdCBkZWxldGVkLiIpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHRlc3RGYWlsZWQoIkNvb2tpZSBkZWxldGVkIG9yIGRvY3VtZW50LmNvb2tpZSBj
b250YWlucyBvdGhlciBjb29raWVzOiAiICsgZG9jdW1lbnQuY29va2llKTsKKyAgICAgICAgICAg
IHRlc3RSdW5uZXIuc3RhdGlzdGljc1Jlc2V0VG9Db25zaXN0ZW50U3RhdGUoKTsKKyAgICAgICAg
ICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9KTsKKyAgICAgICAgdGVzdFJ1
bm5lci5zZXRTdGF0aXN0aWNzU2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jk
c1JlbW92YWwoZmFsc2UpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NNaW5pbXVt
VGltZUJldHdlZWVuRGF0YVJlY29yZHNSZW1vdmFsKDApOworICAgICAgICB0ZXN0UnVubmVyLnN0
YXRpc3RpY3NGaXJlRGF0YU1vZGlmaWNhdGlvbkhhbmRsZXIoKTsKKyAgICB9CisKKyAgICBpZiAo
ZG9jdW1lbnQubG9jYXRpb24uaG9zdCA9PT0gaG9zdFVuZGVyVGVzdCAmJiB3aW5kb3cudGVzdFJ1
bm5lciAmJiB3aW5kb3cuaW50ZXJuYWxzKSB7CisgICAgICAgIHRlc3RSdW5uZXIud2FpdFVudGls
RG9uZSgpOworICAgICAgICBpbnRlcm5hbHMuc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJs
ZWQodHJ1ZSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hl
bkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQodHJ1ZSk7CisgICAgICAgIHJ1blRlc3RSdW5uZXJUZXN0
KCk7CisgICAgfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNl
TG9hZFN0YXRpc3RpY3Mvbm9uLXByZXZhbGVudC1yZXNvdXJjZS13aXRob3V0LXVzZXItaW50ZXJh
Y3Rpb24tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMv
bG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL25vbi1wcmV2YWxlbnQtcmVzb3VyY2Utd2l0
aG91dC11c2VyLWludGVyYWN0aW9uLWV4cGVjdGVkLnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9ub24tcHJl
dmFsZW50LXJlc291cmNlLXdpdGhvdXQtdXNlci1pbnRlcmFjdGlvbi1leHBlY3RlZC50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw4IEBACittYWluIGZyYW1lIC0gZGlkU3RhcnRQcm92aXNp
b25hbExvYWRGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRpZENvbW1pdExvYWRGb3JGcmFtZQorbWFp
biBmcmFtZSAtIGRpZFJlY2VpdmVUaXRsZTogVGVzdHMgZm9yIE5vbi1QcmV2YWxlbnQgUmVzb3Vy
Y2UgV2l0aG91dCBVc2VyIEludGVyYWN0aW9uCittYWluIGZyYW1lIC0gZGlkRmluaXNoRG9jdW1l
bnRMb2FkRm9yRnJhbWUKK21haW4gZnJhbWUgLSBkaWRIYW5kbGVPbmxvYWRFdmVudHNGb3JGcmFt
ZQorbWFpbiBmcmFtZSAtIGRpZEZpbmlzaExvYWRGb3JGcmFtZQorUEFTUyBDb29raWUgbm90IGRl
bGV0ZWQuCisKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzL25vbi1wcmV2YWxlbnQtcmVzb3VyY2Utd2l0aG91dC11c2VyLWludGVyYWN0
aW9uLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jl
c291cmNlTG9hZFN0YXRpc3RpY3Mvbm9uLXByZXZhbGVudC1yZXNvdXJjZS13aXRob3V0LXVzZXIt
aW50ZXJhY3Rpb24uaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9ub24tcHJldmFsZW50LXJlc291cmNlLXdp
dGhvdXQtdXNlci1pbnRlcmFjdGlvbi5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTYg
QEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+CisgICAgPG1ldGEg
Y2hhcnNldD0iVVRGLTgiPgorICAgIDx0aXRsZT5UZXN0cyBmb3IgTm9uLVByZXZhbGVudCBSZXNv
dXJjZSBXaXRob3V0IFVzZXIgSW50ZXJhY3Rpb248L3RpdGxlPgorICAgIDxzY3JpcHQgc3JjPSIu
Li8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+
Cis8c2NyaXB0PgorICAgIGNvbnN0IGhvc3RVbmRlclRlc3QgPSAiMTI3LjAuMC4xOjgwMDAiOwor
ICAgIGNvbnN0IHN0YXRpc3RpY3NVcmwgPSAiaHR0cDovLyIgKyBob3N0VW5kZXJUZXN0ICsgIi90
ZW1wIjsKKyAgICBjb25zdCBvdGhlclByZXZhbGVudFVybCA9ICJodHRwOi8vbG9jYWxob3N0Ojgw
MDAvdGVtcCI7CisgICAgZnVuY3Rpb24gcnVuVGVzdFJ1bm5lclRlc3QoKSB7CisgICAgICAgIGlm
IChkb2N1bWVudC5jb29raWUgIT09ICIiKQorICAgICAgICAgICAgdGVzdEZhaWxlZCgiZG9jdW1l
bnQuY29va2llIG5vdCBlbXB0eS4iKTsKKyAgICAgICAgY29uc3QgY29va2llID0gInRlc3RDb29r
aWU9dGVzdFZhbHVlIjsKKyAgICAgICAgZG9jdW1lbnQuY29va2llID0gY29va2llICsgIjsgbWF4
LWFnZT0xMDA7IjsKKyAgICAgICAgaWYgKGRvY3VtZW50LmNvb2tpZSAhPT0gY29va2llKQorICAg
ICAgICAgICAgdGVzdEZhaWxlZCgiZG9jdW1lbnQuY29va2llIGRpZCBub3QgZ2V0IHNldC4iKTsK
KworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShzdGF0
aXN0aWNzVXJsLCBmYWxzZSk7CisgICAgICAgIGlmICh0ZXN0UnVubmVyLmlzU3RhdGlzdGljc1By
ZXZhbGVudFJlc291cmNlKHN0YXRpc3RpY3NVcmwpKQorICAgICAgICAgICAgdGVzdEZhaWxlZCgi
SG9zdCBkaWQgbm90IGdldCBzZXQgYXMgbm9uLXByZXZhbGVudCByZXNvdXJjZS4iKTsKKworICAg
ICAgICAvLyBUaGlzIGlzIGRvbmUgdG8gbm90IGhhdmUgYW4gZW1wdHkgc2V0IG9mIHByZXZhbGVu
dCByZXNvdXJjZXMuCisgICAgICAgIC8vIE90aGVyd2lzZSBkYXRhIHJlY29yZHMgYXJlIG5ldmVy
IHNjYW5uZWQuCisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291
cmNlKG90aGVyUHJldmFsZW50VXJsLCB0cnVlKTsKKyAgICAgICAgaWYgKCF0ZXN0UnVubmVyLmlz
U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKG90aGVyUHJldmFsZW50VXJsKSkKKyAgICAgICAg
ICAgIHRlc3RGYWlsZWQoIk90aGVyIGhvc3QgZGlkIG5vdCBnZXQgc2V0IGFzIHByZXZhbGVudCBy
ZXNvdXJjZS4iKTsKKworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NIYXNIYWRVc2Vy
SW50ZXJhY3Rpb24oc3RhdGlzdGljc1VybCwgZmFsc2UpOworICAgICAgICBpZiAodGVzdFJ1bm5l
ci5pc1N0YXRpc3RpY3NIYXNIYWRVc2VySW50ZXJhY3Rpb24oc3RhdGlzdGljc1VybCkpCisgICAg
ICAgICAgICB0ZXN0RmFpbGVkKCJIb3N0IGRpZCBub3QgZ2V0IGNsZWFyZWQgb2YgdXNlciBpbnRl
cmFjdGlvbi4iKTsKKworICAgICAgICB0ZXN0UnVubmVyLmluc3RhbGxTdGF0aXN0aWNzRGlkTW9k
aWZ5RGF0YVJlY29yZHNDYWxsYmFjayhmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGlmIChkb2N1
bWVudC5jb29raWUgPT09IGNvb2tpZSkKKyAgICAgICAgICAgICAgICB0ZXN0UGFzc2VkKCJDb29r
aWUgbm90IGRlbGV0ZWQuIik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdGVz
dEZhaWxlZCgiQ29va2llIGRlbGV0ZWQgb3IgZG9jdW1lbnQuY29va2llIGNvbnRhaW5zIG90aGVy
IGNvb2tpZXM6ICIgKyBkb2N1bWVudC5jb29raWUpOworICAgICAgICAgICAgdGVzdFJ1bm5lci5z
dGF0aXN0aWNzUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSgpOworICAgICAgICAgICAgdGVzdFJ1bm5l
ci5ub3RpZnlEb25lKCk7CisgICAgICAgIH0pOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRp
c3RpY3NTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChmYWxz
ZSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlZW5E
YXRhUmVjb3Jkc1JlbW92YWwoMCk7CisgICAgICAgIHRlc3RSdW5uZXIuc3RhdGlzdGljc0ZpcmVE
YXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpOworICAgIH0KKworICAgIGlmIChkb2N1bWVudC5sb2Nh
dGlvbi5ob3N0ID09PSBob3N0VW5kZXJUZXN0ICYmIHdpbmRvdy50ZXN0UnVubmVyICYmIHdpbmRv
dy5pbnRlcm5hbHMpIHsKKyAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAg
ICAgIGludGVybmFscy5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCh0cnVlKTsKKyAg
ICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNX
ZXJlU2Nhbm5lZCh0cnVlKTsKKyAgICAgICAgcnVuVGVzdFJ1bm5lclRlc3QoKTsKKyAgICB9Cis8
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCklu
ZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGlj
cy9wcmV2YWxlbnQtcmVzb3VyY2Utd2l0aC11c2VyLWludGVyYWN0aW9uLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2Fk
U3RhdGlzdGljcy9wcmV2YWxlbnQtcmVzb3VyY2Utd2l0aC11c2VyLWludGVyYWN0aW9uLWV4cGVj
dGVkLnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcv
cmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wcmV2YWxlbnQtcmVzb3VyY2Utd2l0aC11c2VyLWludGVy
YWN0aW9uLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDggQEAKK21haW4g
ZnJhbWUgLSBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lCittYWluIGZyYW1lIC0gZGlk
Q29tbWl0TG9hZEZvckZyYW1lCittYWluIGZyYW1lIC0gZGlkUmVjZWl2ZVRpdGxlOiBUZXN0cyBm
b3IgUHJldmFsZW50IFJlc291cmNlIFdpdGggVXNlciBJbnRlcmFjdGlvbgorbWFpbiBmcmFtZSAt
IGRpZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1lCittYWluIGZyYW1lIC0gZGlkSGFuZGxlT25s
b2FkRXZlbnRzRm9yRnJhbWUKK21haW4gZnJhbWUgLSBkaWRGaW5pc2hMb2FkRm9yRnJhbWUKK1BB
U1MgQ29va2llIG5vdCBkZWxldGVkLgorCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xv
YWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wcmV2YWxlbnQtcmVzb3VyY2Utd2l0aC11c2Vy
LWludGVyYWN0aW9uLXRpbWVvdXQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3ByZXZhbGVudC1y
ZXNvdXJjZS13aXRoLXVzZXItaW50ZXJhY3Rpb24tdGltZW91dC1leHBlY3RlZC50eHQJKG5vbmV4
aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0
YXRpc3RpY3MvcHJldmFsZW50LXJlc291cmNlLXdpdGgtdXNlci1pbnRlcmFjdGlvbi10aW1lb3V0
LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDggQEAKK21haW4gZnJhbWUg
LSBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lCittYWluIGZyYW1lIC0gZGlkQ29tbWl0
TG9hZEZvckZyYW1lCittYWluIGZyYW1lIC0gZGlkUmVjZWl2ZVRpdGxlOiBUZXN0cyBmb3IgUHJl
dmFsZW50IFJlc291cmNlIFdpdGggVXNlciBJbnRlcmFjdGlvbiBUaW1lb3V0CittYWluIGZyYW1l
IC0gZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWUKK21haW4gZnJhbWUgLSBkaWRIYW5kbGVP
bmxvYWRFdmVudHNGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRpZEZpbmlzaExvYWRGb3JGcmFtZQor
UEFTUyBDb29raWUgZGVsZXRlZC4KKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2Fk
aW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcHJldmFsZW50LXJlc291cmNlLXdpdGgtdXNlci1p
bnRlcmFjdGlvbi10aW1lb3V0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcHJldmFsZW50LXJlc291cmNlLXdp
dGgtdXNlci1pbnRlcmFjdGlvbi10aW1lb3V0Lmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcHJldmFsZW50
LXJlc291cmNlLXdpdGgtdXNlci1pbnRlcmFjdGlvbi10aW1lb3V0Lmh0bWwJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw1MCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbCBsYW5nPSJlbiI+Cis8
aGVhZD4KKyAgICA8bWV0YSBjaGFyc2V0PSJVVEYtOCI+CisgICAgPHRpdGxlPlRlc3RzIGZvciBQ
cmV2YWxlbnQgUmVzb3VyY2UgV2l0aCBVc2VyIEludGVyYWN0aW9uIFRpbWVvdXQ8L3RpdGxlPgor
ICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorICAgIGNvbnN0IGhvc3RVbmRlclRlc3QgPSAi
MTI3LjAuMC4xOjgwMDAiOworICAgIGNvbnN0IHN0YXRpc3RpY3NVcmwgPSAiaHR0cDovLyIgKyBo
b3N0VW5kZXJUZXN0ICsgIi90ZW1wIjsKKyAgICBmdW5jdGlvbiBydW5UZXN0UnVubmVyVGVzdCgp
IHsKKyAgICAgICAgaWYgKGRvY3VtZW50LmNvb2tpZSAhPT0gIiIpCisgICAgICAgICAgICB0ZXN0
RmFpbGVkKCJkb2N1bWVudC5jb29raWUgbm90IGVtcHR5LiIpOworICAgICAgICBjb25zdCBjb29r
aWUgPSAidGVzdENvb2tpZT10ZXN0VmFsdWUiOworICAgICAgICBkb2N1bWVudC5jb29raWUgPSBj
b29raWUgKyAiOyBtYXgtYWdlPTEwMDsiOworICAgICAgICBpZiAoZG9jdW1lbnQuY29va2llICE9
PSBjb29raWUpCisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJkb2N1bWVudC5jb29raWUgZGlkIG5v
dCBnZXQgc2V0LiIpOworCisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1ByZXZhbGVu
dFJlc291cmNlKHN0YXRpc3RpY3NVcmwsIHRydWUpOworICAgICAgICBpZiAoIXRlc3RSdW5uZXIu
aXNTdGF0aXN0aWNzUHJldmFsZW50UmVzb3VyY2Uoc3RhdGlzdGljc1VybCkpCisgICAgICAgICAg
ICB0ZXN0RmFpbGVkKCJIb3N0IGRpZCBub3QgZ2V0IHNldCBhcyBwcmV2YWxlbnQgcmVzb3VyY2Uu
Iik7CisKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0
aW9uKHN0YXRpc3RpY3NVcmwsIHRydWUpOworICAgICAgICBpZiAoIXRlc3RSdW5uZXIuaXNTdGF0
aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKHN0YXRpc3RpY3NVcmwpKQorICAgICAgICAgICAg
dGVzdEZhaWxlZCgiSG9zdCBkaWQgbm90IGdldCBsb2dnZWQgZm9yIHVzZXIgaW50ZXJhY3Rpb24u
Iik7CisKKyAgICAgICAgdGVzdFJ1bm5lci5pbnN0YWxsU3RhdGlzdGljc0RpZE1vZGlmeURhdGFS
ZWNvcmRzQ2FsbGJhY2soZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBpZiAoZG9jdW1lbnQuY29v
a2llICE9PSAiIikKKyAgICAgICAgICAgICAgICB0ZXN0RmFpbGVkKCJDb29raWUgbm90IGRlbGV0
ZWQ6ICIgKyBkb2N1bWVudC5jb29raWUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIHRlc3RQYXNzZWQoIkNvb2tpZSBkZWxldGVkLiIpOworICAgICAgICAgICAgdGVzdFJ1bm5l
ci5zdGF0aXN0aWNzUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSgpOworICAgICAgICAgICAgdGVzdFJ1
bm5lci5ub3RpZnlEb25lKCk7CisgICAgICAgIH0pOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0
YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChm
YWxzZSk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2Vl
ZW5EYXRhUmVjb3Jkc1JlbW92YWwoMCk7CisgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RhdGlzdGlj
c1RpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oMCk7CisgICAgICAgIHNldFRpbWVvdXQoInRlc3RS
dW5uZXIuc3RhdGlzdGljc0ZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxlcigpIiwgMTAwMCk7Cisg
ICAgfQorCisgICAgaWYgKGRvY3VtZW50LmxvY2F0aW9uLmhvc3QgPT09IGhvc3RVbmRlclRlc3Qg
JiYgd2luZG93LnRlc3RSdW5uZXIgJiYgd2luZG93LmludGVybmFscykgeworICAgICAgICB0ZXN0
UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgaW50ZXJuYWxzLnNldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NFbmFibGVkKHRydWUpOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3Rp
Y3NOb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKHRydWUpOworICAgICAgICBy
dW5UZXN0UnVubmVyVGVzdCgpOworICAgIH0KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMv
bG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3ByZXZhbGVudC1yZXNvdXJjZS13aXRoLXVz
ZXItaW50ZXJhY3Rpb24uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wcmV2YWxlbnQtcmVzb3VyY2Utd2l0aC11
c2VyLWludGVyYWN0aW9uLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcHJldmFsZW50LXJlc291cmNlLXdp
dGgtdXNlci1pbnRlcmFjdGlvbi5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTYgQEAK
KzwhRE9DVFlQRSBodG1sPgorPGh0bWwgbGFuZz0iZW4iPgorPGhlYWQ+CisgICAgPG1ldGEgY2hh
cnNldD0iVVRGLTgiPgorICAgIDx0aXRsZT5UZXN0cyBmb3IgUHJldmFsZW50IFJlc291cmNlIFdp
dGggVXNlciBJbnRlcmFjdGlvbjwvdGl0bGU+CisgICAgPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291
cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+
CisgICAgY29uc3QgaG9zdFVuZGVyVGVzdCA9ICIxMjcuMC4wLjE6ODAwMCI7CisgICAgY29uc3Qg
c3RhdGlzdGljc1VybCA9ICJodHRwOi8vIiArIGhvc3RVbmRlclRlc3QgKyAiL3RlbXAiOworICAg
IGNvbnN0IG90aGVyUHJldmFsZW50VXJsID0gImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC90ZW1wIjsK
KyAgICBmdW5jdGlvbiBydW5UZXN0UnVubmVyVGVzdCgpIHsKKyAgICAgICAgaWYgKGRvY3VtZW50
LmNvb2tpZSAhPT0gIiIpCisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJkb2N1bWVudC5jb29raWUg
bm90IGVtcHR5LiIpOworICAgICAgICBjb25zdCBjb29raWUgPSAidGVzdENvb2tpZT10ZXN0VmFs
dWUiOworICAgICAgICBkb2N1bWVudC5jb29raWUgPSBjb29raWUgKyAiOyBtYXgtYWdlPTEwMDsi
OworICAgICAgICBpZiAoZG9jdW1lbnQuY29va2llICE9PSBjb29raWUpCisgICAgICAgICAgICB0
ZXN0RmFpbGVkKCJkb2N1bWVudC5jb29raWUgZGlkIG5vdCBnZXQgc2V0LiIpOworCisgICAgICAg
IHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKHN0YXRpc3RpY3NVcmws
IHRydWUpOworICAgICAgICBpZiAoIXRlc3RSdW5uZXIuaXNTdGF0aXN0aWNzUHJldmFsZW50UmVz
b3VyY2Uoc3RhdGlzdGljc1VybCkpCisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJIb3N0IGRpZCBu
b3QgZ2V0IHNldCBhcyBwcmV2YWxlbnQgcmVzb3VyY2UuIik7CisKKyAgICAgICAgLy8gVGhpcyBp
cyBkb25lIHRvIG5vdCBoYXZlIGFuIGVtcHR5IHNldCBvZiBwcmV2YWxlbnQgcmVzb3VyY2VzLgor
ICAgICAgICAvLyBPdGhlcndpc2UgZGF0YSByZWNvcmRzIGFyZSBuZXZlciBzY2FubmVkLgorICAg
ICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NQcmV2YWxlbnRSZXNvdXJjZShvdGhlclByZXZh
bGVudFVybCwgdHJ1ZSk7CisgICAgICAgIGlmICghdGVzdFJ1bm5lci5pc1N0YXRpc3RpY3NQcmV2
YWxlbnRSZXNvdXJjZShvdGhlclByZXZhbGVudFVybCkpCisgICAgICAgICAgICB0ZXN0RmFpbGVk
KCJPdGhlciBob3N0IGRpZCBub3QgZ2V0IHNldCBhcyBwcmV2YWxlbnQgcmVzb3VyY2UuIik7CisK
KyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKHN0
YXRpc3RpY3NVcmwsIHRydWUpOworICAgICAgICBpZiAoIXRlc3RSdW5uZXIuaXNTdGF0aXN0aWNz
SGFzSGFkVXNlckludGVyYWN0aW9uKHN0YXRpc3RpY3NVcmwpKQorICAgICAgICAgICAgdGVzdEZh
aWxlZCgiSG9zdCBkaWQgbm90IGdldCBsb2dnZWQgZm9yIHVzZXIgaW50ZXJhY3Rpb24uIik7CisK
KyAgICAgICAgdGVzdFJ1bm5lci5pbnN0YWxsU3RhdGlzdGljc0RpZE1vZGlmeURhdGFSZWNvcmRz
Q2FsbGJhY2soZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBpZiAoZG9jdW1lbnQuY29va2llID09
PSBjb29raWUpCisgICAgICAgICAgICAgICAgdGVzdFBhc3NlZCgiQ29va2llIG5vdCBkZWxldGVk
LiIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoIkNvb2tp
ZSBkZWxldGVkIG9yIGRvY3VtZW50LmNvb2tpZSBjb250YWlucyBvdGhlciBjb29raWVzOiAiICsg
ZG9jdW1lbnQuY29va2llKTsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIuc3RhdGlzdGljc1Jlc2V0
VG9Db25zaXN0ZW50U3RhdGUoKTsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgp
OworICAgICAgICB9KTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRTdGF0aXN0aWNzU2hvdWxkQ2xh
c3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoZmFsc2UpOworICAgICAgICB0
ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NNaW5pbXVtVGltZUJldHdlZWVuRGF0YVJlY29yZHNSZW1v
dmFsKDApOworICAgICAgICB0ZXN0UnVubmVyLnN0YXRpc3RpY3NGaXJlRGF0YU1vZGlmaWNhdGlv
bkhhbmRsZXIoKTsKKyAgICB9CisKKyAgICBpZiAoZG9jdW1lbnQubG9jYXRpb24uaG9zdCA9PT0g
aG9zdFVuZGVyVGVzdCAmJiB3aW5kb3cudGVzdFJ1bm5lciAmJiB3aW5kb3cuaW50ZXJuYWxzKSB7
CisgICAgICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICBpbnRlcm5hbHMu
c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQodHJ1ZSk7CisgICAgICAgIHRlc3RSdW5u
ZXIuc2V0U3RhdGlzdGljc05vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQodHJ1
ZSk7CisgICAgICAgIHJ1blRlc3RSdW5uZXJUZXN0KCk7CisgICAgfQorPC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcHJldmFsZW50LXJl
c291cmNlLXdpdGhvdXQtdXNlci1pbnRlcmFjdGlvbi1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3Mv
cHJldmFsZW50LXJlc291cmNlLXdpdGhvdXQtdXNlci1pbnRlcmFjdGlvbi1leHBlY3RlZC50eHQJ
KG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2FkaW5nL3Jlc291cmNl
TG9hZFN0YXRpc3RpY3MvcHJldmFsZW50LXJlc291cmNlLXdpdGhvdXQtdXNlci1pbnRlcmFjdGlv
bi1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4IEBACittYWluIGZyYW1l
IC0gZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRpZENvbW1p
dExvYWRGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRpZFJlY2VpdmVUaXRsZTogVGVzdHMgZm9yIFBy
ZXZhbGVudCBSZXNvdXJjZSBXaXRob3V0IFVzZXIgSW50ZXJhY3Rpb24KK21haW4gZnJhbWUgLSBk
aWRGaW5pc2hEb2N1bWVudExvYWRGb3JGcmFtZQorbWFpbiBmcmFtZSAtIGRpZEhhbmRsZU9ubG9h
ZEV2ZW50c0ZvckZyYW1lCittYWluIGZyYW1lIC0gZGlkRmluaXNoTG9hZEZvckZyYW1lCitQQVNT
IENvb2tpZSBkZWxldGVkLgorCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvYWRpbmcv
cmVzb3VyY2VMb2FkU3RhdGlzdGljcy9wcmV2YWxlbnQtcmVzb3VyY2Utd2l0aG91dC11c2VyLWlu
dGVyYWN0aW9uLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2Fk
aW5nL3Jlc291cmNlTG9hZFN0YXRpc3RpY3MvcHJldmFsZW50LXJlc291cmNlLXdpdGhvdXQtdXNl
ci1pbnRlcmFjdGlvbi5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVz
dHMvbG9hZGluZy9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzL3ByZXZhbGVudC1yZXNvdXJjZS13aXRo
b3V0LXVzZXItaW50ZXJhY3Rpb24uaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBA
Cis8IURPQ1RZUEUgaHRtbD4KKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorICAgIDxtZXRhIGNo
YXJzZXQ9IlVURi04Ij4KKyAgICA8dGl0bGU+VGVzdHMgZm9yIFByZXZhbGVudCBSZXNvdXJjZSBX
aXRob3V0IFVzZXIgSW50ZXJhY3Rpb248L3RpdGxlPgorICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9y
ZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2Ny
aXB0PgorICAgIGNvbnN0IGhvc3RVbmRlclRlc3QgPSAiMTI3LjAuMC4xOjgwMDAiOworICAgIGNv
bnN0IHN0YXRpc3RpY3NVcmwgPSAiaHR0cDovLyIgKyBob3N0VW5kZXJUZXN0ICsgIi90ZW1wIjsK
KyAgICBmdW5jdGlvbiBydW5UZXN0UnVubmVyVGVzdCgpIHsKKyAgICAgICAgaWYgKGRvY3VtZW50
LmNvb2tpZSAhPT0gIiIpCisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJkb2N1bWVudC5jb29raWUg
bm90IGVtcHR5LiIpOworICAgICAgICBjb25zdCBjb29raWUgPSAidGVzdENvb2tpZT10ZXN0VmFs
dWUiOworICAgICAgICBkb2N1bWVudC5jb29raWUgPSBjb29raWUgKyAiOyBtYXgtYWdlPTEwMDsi
OworICAgICAgICBpZiAoZG9jdW1lbnQuY29va2llICE9PSBjb29raWUpCisgICAgICAgICAgICB0
ZXN0RmFpbGVkKCJkb2N1bWVudC5jb29raWUgZGlkIG5vdCBnZXQgc2V0LiIpOworCisgICAgICAg
IHRlc3RSdW5uZXIuc2V0U3RhdGlzdGljc1ByZXZhbGVudFJlc291cmNlKHN0YXRpc3RpY3NVcmws
IHRydWUpOworICAgICAgICBpZiAoIXRlc3RSdW5uZXIuaXNTdGF0aXN0aWNzUHJldmFsZW50UmVz
b3VyY2Uoc3RhdGlzdGljc1VybCkpCisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJIb3N0IGRpZCBu
b3QgZ2V0IHNldCBhcyBwcmV2YWxlbnQgcmVzb3VyY2UuIik7CisKKyAgICAgICAgdGVzdFJ1bm5l
ci5zZXRTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0aW9uKHN0YXRpc3RpY3NVcmwsIGZhbHNl
KTsKKyAgICAgICAgaWYgKHRlc3RSdW5uZXIuaXNTdGF0aXN0aWNzSGFzSGFkVXNlckludGVyYWN0
aW9uKHN0YXRpc3RpY3NVcmwpKQorICAgICAgICAgICAgdGVzdEZhaWxlZCgiSG9zdCBkaWQgbm90
IGdldCBjbGVhcmVkIG9mIHVzZXIgaW50ZXJhY3Rpb24uIik7CisKKyAgICAgICAgdGVzdFJ1bm5l
ci5pbnN0YWxsU3RhdGlzdGljc0RpZE1vZGlmeURhdGFSZWNvcmRzQ2FsbGJhY2soZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICBpZiAoZG9jdW1lbnQuY29va2llICE9PSAiIikKKyAgICAgICAgICAg
ICAgICB0ZXN0RmFpbGVkKCJDb29raWUgbm90IGRlbGV0ZWQ6ICIgKyBkb2N1bWVudC5jb29raWUp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHRlc3RQYXNzZWQoIkNvb2tpZSBk
ZWxldGVkLiIpOworICAgICAgICAgICAgdGVzdFJ1bm5lci5zdGF0aXN0aWNzUmVzZXRUb0NvbnNp
c3RlbnRTdGF0ZSgpOworICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAg
ICAgIH0pOworICAgICAgICB0ZXN0UnVubmVyLnNldFN0YXRpc3RpY3NTaG91bGRDbGFzc2lmeVJl
c291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChmYWxzZSk7CisgICAgICAgIHRlc3RSdW5u
ZXIuc2V0U3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlZW5EYXRhUmVjb3Jkc1JlbW92YWwoMCk7
CisgICAgICAgIHRlc3RSdW5uZXIuc3RhdGlzdGljc0ZpcmVEYXRhTW9kaWZpY2F0aW9uSGFuZGxl
cigpOworICAgIH0KKworICAgIGlmIChkb2N1bWVudC5sb2NhdGlvbi5ob3N0ID09PSBob3N0VW5k
ZXJUZXN0ICYmIHdpbmRvdy50ZXN0UnVubmVyICYmIHdpbmRvdy5pbnRlcm5hbHMpIHsKKyAgICAg
ICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgICAgIGludGVybmFscy5zZXRSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCh0cnVlKTsKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRT
dGF0aXN0aWNzTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCh0cnVlKTsKKyAg
ICAgICAgcnVuVGVzdFJ1bm5lclRlc3QoKTsKKyAgICB9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwv
aHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS93azIvVGVzdEV4cGVjdGF0aW9ucwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS93azIvVGVzdEV4cGVjdGF0aW9ucwkocmV2aXNpb24gMjExOTkzKQorKysgTGF5b3V0VGVz
dHMvcGxhdGZvcm0vd2syL1Rlc3RFeHBlY3RhdGlvbnMJKHdvcmtpbmcgY29weSkKQEAgLTY5OCw2
ICs2OTgsOSBAQCBodHRwL3Rlc3RzL21pc2Mvd2lsbC1zZW5kLXJlcXVlc3Qtd2l0aC1jCiAjIGJ1
ZyAxNjIyODEKIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvZmV0Y2gvYXBpL3JlcXVl
c3QvcmVxdWVzdC1jYWNoZS1vbmx5LWlmLWNhY2hlZC5odG1sIFsgRmFpbHVyZSBdCiAKKyMgUmVz
b3VyY2UgTG9hZCBTdGF0aXN0aWNzIGFyZSBvbmx5IHN1cHBvcnRlZCBpbiBXZWJLaXQyCitodHRw
L3Rlc3RzL2xvYWRpbmcvcmVzb3VyY2VMb2FkU3RhdGlzdGljcy8gWyBQYXNzIF0KKwogIyMjIEVO
RCBPRiAoNSkgUHJvZ3Jlc3Npb25zLCBleHBlY3RlZCBzdWNjZXNzZXMgdGhhdCBhcmUgZXhwZWN0
ZWQgZmFpbHVyZXMgaW4gV2ViS2l0MS4KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>