<?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>208528</bug_id>
          
          <creation_ts>2020-03-03 12:19:15 -0800</creation_ts>
          <short_desc>UIProcess needs mechanism to specify AppBound domains</short_desc>
          <delta_ts>2020-03-09 09:15:27 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kate Cheney">katherine_cheney</reporter>
          <assigned_to name="Kate Cheney">katherine_cheney</assigned_to>
          <cc>achristensen</cc>
    
    <cc>aestes</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wilander</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1625172</commentid>
    <comment_count>0</comment_count>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-03-03 12:19:15 -0800</bug_when>
    <thetext>We should collect and store app-bound domains in the UIProcess</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625173</commentid>
    <comment_count>1</comment_count>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-03-03 12:19:53 -0800</bug_when>
    <thetext>&lt;rdar://problem/59980340&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625195</commentid>
    <comment_count>2</comment_count>
      <attachid>392316</attachid>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-03-03 13:05:08 -0800</bug_when>
    <thetext>Created attachment 392316
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625227</commentid>
    <comment_count>3</comment_count>
      <attachid>392324</attachid>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-03-03 13:50:39 -0800</bug_when>
    <thetext>Created attachment 392324
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625840</commentid>
    <comment_count>4</comment_count>
      <attachid>392324</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2020-03-04 16:38:43 -0800</bug_when>
    <thetext>Comment on attachment 392324
Patch

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

&gt; Source/WebCore/ChangeLog:3
&gt; +        UIProcess needs mechanism to specify AppBound domains

It&apos;s a little weird to refer to UIProcess without further qualifications in the WebCore change log. Not sure how this could be done better.

&gt; Source/WebCore/platform/RuntimeApplicationChecks.h:28
&gt; +#include &quot;RegistrableDomain.h&quot;

I believe this could just be forward-declared instead of included. Then you include in the implementation file instead. We try to do that to shorten build times.

&gt; Source/WebCore/platform/cocoa/RuntimeApplicationChecksCocoa.mm:78
&gt; +Vector&lt;WebCore::RegistrableDomain&gt;&amp; getAppBoundDomains()

I wonder if there&apos;s a way to make sure that callers of this function cannot change the app-bound domains.

&gt; Source/WebCore/platform/cocoa/RuntimeApplicationChecksCocoa.mm:84
&gt; +    NSArray *domains = [[NSBundle mainBundle] objectForInfoDictionaryKey:@&quot;AppBoundDomains&quot;];

Is there a guarantee that these domains will indeed be registrable domains? I don&apos;t think there even can be since the Public Suffix List which is the basis for RegistrableDomain changes and thus an array entry may be a registrable domain one day and not another, or vice versa. See comment below.

&gt; Source/WebCore/platform/cocoa/RuntimeApplicationChecksCocoa.mm:85
&gt; +    int appBoundDomainsCount = std::min(maxAppBoundDomainCount, static_cast&lt;int&gt;([domains count]));

Where does maxAppBoundDomainCount come from? It doesn&apos;t look like a constant.

&gt; Source/WebCore/platform/cocoa/RuntimeApplicationChecksCocoa.mm:88
&gt; +        appBoundDomains-&gt;append(WebCore::RegistrableDomain::uncheckedCreateFromRegistrableDomainString([domains objectAtIndex:i]));

You should use a checked constructor here by creating a URL object from the array entry and then letting RegistrableDomain figure out the registrable domain through its use of the Public Suffix List. Then you also need to check that the returned RegistrableDomain object is not empty since an array entry that does not have a registrable domain will result in an empty object.

&gt; Source/WebCore/platform/cocoa/RuntimeApplicationChecksCocoa.mm:90
&gt; +    return appBoundDomains;

I wonder if we should return a deep copy of this Vector? Otherwise other code can change its content, right? (Not 100% sure about function statics.) It goes back to my thoughts that we should make sure callers of this function cannot change the set of app-bound domains. Another way of doing it is to have a void return type and instead have the caller supply a Vector that this function fills with copies of the registrable domains.

&gt; Source/WebKit/UIProcess/WebProcessProxy.cpp:1770
&gt; +        m_appBoundDomains.uncheckedAppend(domain);

Since this is that way we&apos;re using WebCore::getAppBoundDomains(), it looks like supplying the function with the Vector that WebProcessProxy wants filled is a better pattern.

&gt; Source/WebKit/UIProcess/WebProcessProxy.h:379
&gt; +    Vector&lt;WebCore::RegistrableDomain&gt;&amp; appBoundDomains() { return m_appBoundDomains; }

First, this can be made const. Second, the same worry applies here in changing the contents of the Vector.

&gt; Tools/TestWebKitAPI/Info.plist:7
&gt; +		&lt;string&gt;testDomain1&lt;/string&gt;

You need to do full testing here. Real registrable domains, real domains with subdomains, bogus domains (such as the ones you have now), empty entries, whitespace entries, full URLs, and IP addresses. Then you need to test below max, at max, and above max number of entries.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625858</commentid>
    <comment_count>5</comment_count>
      <attachid>392324</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-03-04 17:01:28 -0800</bug_when>
    <thetext>Comment on attachment 392324
Patch

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

&gt; Source/WebCore/platform/RuntimeApplicationChecks.h:31
&gt; +static const auto maxAppBoundDomainCount = 10;

Why is this in the header and not the implementation?

&gt; Source/WebCore/platform/RuntimeApplicationChecks.h:55
&gt; +WEBCORE_EXPORT Vector&lt;WebCore::RegistrableDomain&gt;&amp; getAppBoundDomains();

This definitely does not feel like the right header to put this in. Does it even need to be in WebCore? It seems you only use it at the WebKit layer.

&gt;&gt; Source/WebCore/platform/cocoa/RuntimeApplicationChecksCocoa.mm:78
&gt;&gt; +Vector&lt;WebCore::RegistrableDomain&gt;&amp; getAppBoundDomains()
&gt; 
&gt; I wonder if there&apos;s a way to make sure that callers of this function cannot change the app-bound domains.

Return a const Vector&lt;WebCore::RegistrableDomain&gt;&amp; ?

&gt; Source/WebCore/platform/cocoa/RuntimeApplicationChecksCocoa.mm:80
&gt; +    static auto appBoundDomains = makeNeverDestroyed(Vector&lt;WebCore::RegistrableDomain&gt; { });

static const.
Also, this could be initialized with a lambda, see MIMETypeRegistry::supportedMediaMIMETypes() for an example.

&gt; Source/WebCore/platform/cocoa/RuntimeApplicationChecksCocoa.mm:87
&gt; +    for (int i = 0; i &lt; appBoundDomainsCount; i++)

++i

&gt; Source/WebKit/UIProcess/WebProcessProxy.cpp:192
&gt; +    readAppBoundDomains();

So every time we launch a WebProcess, the UIProcess will read entries from the disk on the main thread? I have some concerns:
- Does it really need to happen more than once?
- Is reading this on the main thread really suitable?

&gt; Source/WebKit/UIProcess/WebProcessProxy.cpp:1767
&gt; +    auto&amp; domains = WebCore::getAppBoundDomains();

m_appBoundDomains = WebCore::getAppBoundDomains(); ? Or am I missing something obvious?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625860</commentid>
    <comment_count>6</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2020-03-04 17:04:23 -0800</bug_when>
    <thetext>(In reply to Chris Dumez from comment #5)
&gt; &gt; I wonder if there&apos;s a way to make sure that callers of this function cannot change the app-bound domains.
&gt; 
&gt; Return a const Vector&lt;WebCore::RegistrableDomain&gt;&amp; ?

Will that guarantee that the entries in the Vector can&apos;t be changed? Sorry, I&apos;m not that familiar with the semantics of const return types. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625865</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-03-04 17:10:17 -0800</bug_when>
    <thetext>(In reply to John Wilander from comment #6)
&gt; (In reply to Chris Dumez from comment #5)
&gt; &gt; &gt; I wonder if there&apos;s a way to make sure that callers of this function cannot change the app-bound domains.
&gt; &gt; 
&gt; &gt; Return a const Vector&lt;WebCore::RegistrableDomain&gt;&amp; ?
&gt; 
&gt; Will that guarantee that the entries in the Vector can&apos;t be changed? Sorry,
&gt; I&apos;m not that familiar with the semantics of const return types. :)

Yes, because our Vector implementation is const-correct. You cannot modify a const vector or modify the entries of a const vector, unless you const_cast.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625872</commentid>
    <comment_count>8</comment_count>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-03-04 17:20:43 -0800</bug_when>
    <thetext>Thanks for the comments Chris and John!


(In reply to John Wilander from comment #4)
&gt; Comment on attachment 392324 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=392324&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:3
&gt; &gt; +        UIProcess needs mechanism to specify AppBound domains
&gt; 
&gt; It&apos;s a little weird to refer to UIProcess without further qualifications in
&gt; the WebCore change log. Not sure how this could be done better.
&gt; 

Yes, after reading these comments I think this should be moved out of WebCore.

&gt; &gt; Source/WebCore/platform/RuntimeApplicationChecks.h:28
&gt; &gt; +#include &quot;RegistrableDomain.h&quot;
&gt; 
&gt; I believe this could just be forward-declared instead of included. Then you
&gt; include in the implementation file instead. We try to do that to shorten
&gt; build times.
&gt; 

Will do!

&gt; &gt; Source/WebCore/platform/cocoa/RuntimeApplicationChecksCocoa.mm:78
&gt; &gt; +Vector&lt;WebCore::RegistrableDomain&gt;&amp; getAppBoundDomains()
&gt; 
&gt; I wonder if there&apos;s a way to make sure that callers of this function cannot
&gt; change the app-bound domains.
&gt; 
&gt; &gt; Source/WebCore/platform/cocoa/RuntimeApplicationChecksCocoa.mm:84
&gt; &gt; +    NSArray *domains = [[NSBundle mainBundle] objectForInfoDictionaryKey:@&quot;AppBoundDomains&quot;];
&gt; 
&gt; Is there a guarantee that these domains will indeed be registrable domains?
&gt; I don&apos;t think there even can be since the Public Suffix List which is the
&gt; basis for RegistrableDomain changes and thus an array entry may be a
&gt; registrable domain one day and not another, or vice versa. See comment below.
&gt; 

No guarantee of anything, I should definitely add more rigorous checks here.


&gt; &gt; Source/WebCore/platform/cocoa/RuntimeApplicationChecksCocoa.mm:88
&gt; &gt; +        appBoundDomains-&gt;append(WebCore::RegistrableDomain::uncheckedCreateFromRegistrableDomainString([domains objectAtIndex:i]));
&gt; 
&gt; You should use a checked constructor here by creating a URL object from the
&gt; array entry and then letting RegistrableDomain figure out the registrable
&gt; domain through its use of the Public Suffix List. Then you also need to
&gt; check that the returned RegistrableDomain object is not empty since an array
&gt; entry that does not have a registrable domain will result in an empty object.
&gt; 

Good point, I will refactor this.

&gt; &gt; Source/WebCore/platform/cocoa/RuntimeApplicationChecksCocoa.mm:90
&gt; &gt; +    return appBoundDomains;
&gt; 
&gt; I wonder if we should return a deep copy of this Vector? Otherwise other
&gt; code can change its content, right? (Not 100% sure about function statics.)
&gt; It goes back to my thoughts that we should make sure callers of this
&gt; function cannot change the set of app-bound domains. Another way of doing it
&gt; is to have a void return type and instead have the caller supply a Vector
&gt; that this function fills with copies of the registrable domains.
&gt; 
&gt; &gt; Source/WebKit/UIProcess/WebProcessProxy.cpp:1770
&gt; &gt; +        m_appBoundDomains.uncheckedAppend(domain);
&gt; 
&gt; Since this is that way we&apos;re using WebCore::getAppBoundDomains(), it looks
&gt; like supplying the function with the Vector that WebProcessProxy wants
&gt; filled is a better pattern.

You&apos;re right, that seems better. 


&gt; &gt; Tools/TestWebKitAPI/Info.plist:7
&gt; &gt; +		&lt;string&gt;testDomain1&lt;/string&gt;
&gt; 
&gt; You need to do full testing here. Real registrable domains, real domains
&gt; with subdomains, bogus domains (such as the ones you have now), empty
&gt; entries, whitespace entries, full URLs, and IP addresses. Then you need to
&gt; test below max, at max, and above max number of entries.

I will add some more testing!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625874</commentid>
    <comment_count>9</comment_count>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-03-04 17:24:19 -0800</bug_when>
    <thetext>(In reply to Chris Dumez from comment #5)
&gt; Comment on attachment 392324 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=392324&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/RuntimeApplicationChecks.h:31
&gt; &gt; +static const auto maxAppBoundDomainCount = 10;
&gt; 
&gt; Why is this in the header and not the implementation?
&gt; 
&gt; &gt; Source/WebCore/platform/RuntimeApplicationChecks.h:55
&gt; &gt; +WEBCORE_EXPORT Vector&lt;WebCore::RegistrableDomain&gt;&amp; getAppBoundDomains();
&gt; 
&gt; This definitely does not feel like the right header to put this in. Does it
&gt; even need to be in WebCore? It seems you only use it at the WebKit layer.
&gt; 

Okay, I&apos;ll figure out a new place in WebKit.

&gt; &gt;&gt; Source/WebCore/platform/cocoa/RuntimeApplicationChecksCocoa.mm:78
&gt; &gt;&gt; +Vector&lt;WebCore::RegistrableDomain&gt;&amp; getAppBoundDomains()
&gt; &gt; 
&gt; &gt; I wonder if there&apos;s a way to make sure that callers of this function cannot change the app-bound domains.
&gt; 
&gt; Return a const Vector&lt;WebCore::RegistrableDomain&gt;&amp; ?
&gt; 

Nice, I&apos;ll do this.

&gt; &gt; Source/WebCore/platform/cocoa/RuntimeApplicationChecksCocoa.mm:80
&gt; &gt; +    static auto appBoundDomains = makeNeverDestroyed(Vector&lt;WebCore::RegistrableDomain&gt; { });
&gt; 
&gt; static const.
&gt; Also, this could be initialized with a lambda, see
&gt; MIMETypeRegistry::supportedMediaMIMETypes() for an example.
&gt; 

Noted.

&gt; &gt; Source/WebCore/platform/cocoa/RuntimeApplicationChecksCocoa.mm:87
&gt; &gt; +    for (int i = 0; i &lt; appBoundDomainsCount; i++)
&gt; 
&gt; ++I


Noted.

&gt; &gt; Source/WebKit/UIProcess/WebProcessProxy.cpp:192
&gt; &gt; +    readAppBoundDomains();
&gt; 
&gt; So every time we launch a WebProcess, the UIProcess will read entries from
&gt; the disk on the main thread? I have some concerns:
&gt; - Does it really need to happen more than once?
&gt; - Is reading this on the main thread really suitable?
&gt; 

It should not need to happen more than once, I&apos;m not sure of an appropriate place to put it to ensure that it gets called only once though. What would you recommend?

I am not an expert in threading, what makes it suitable or unsuitable to read something on the main thread?

&gt; &gt; Source/WebKit/UIProcess/WebProcessProxy.cpp:1767
&gt; &gt; +    auto&amp; domains = WebCore::getAppBoundDomains();
&gt; 
&gt; m_appBoundDomains = WebCore::getAppBoundDomains(); ? Or am I missing
&gt; something obvious?

Good catch!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625880</commentid>
    <comment_count>10</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2020-03-04 17:36:57 -0800</bug_when>
    <thetext>(In reply to Chris Dumez from comment #7)
&gt; (In reply to John Wilander from comment #6)
&gt; &gt; (In reply to Chris Dumez from comment #5)
&gt; &gt; &gt; &gt; I wonder if there&apos;s a way to make sure that callers of this function cannot change the app-bound domains.
&gt; &gt; &gt; 
&gt; &gt; &gt; Return a const Vector&lt;WebCore::RegistrableDomain&gt;&amp; ?
&gt; &gt; 
&gt; &gt; Will that guarantee that the entries in the Vector can&apos;t be changed? Sorry,
&gt; &gt; I&apos;m not that familiar with the semantics of const return types. :)
&gt; 
&gt; Yes, because our Vector implementation is const-correct. You cannot modify a
&gt; const vector or modify the entries of a const vector, unless you const_cast.

And the caller cannot do that cast?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1626787</commentid>
    <comment_count>11</comment_count>
      <attachid>392753</attachid>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-03-06 12:20:00 -0800</bug_when>
    <thetext>Created attachment 392753
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1626808</commentid>
    <comment_count>12</comment_count>
      <attachid>392753</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2020-03-06 12:43:11 -0800</bug_when>
    <thetext>Comment on attachment 392753
Patch

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

I think this looks good, but I would suggest running it by Chris to make sure we captured all of this comments.

&gt; Source/WebKit/UIProcess/WebPageProxy.h:2265
&gt; +    void setIsNavigatingToAppBoundDomain(bool isMainFrame, const URL&amp;, NavigatingToAppBoundDomain);

Much simpler :-)

&gt; Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:448
&gt; +        NSArray *domains = [[NSBundle mainBundle] objectForInfoDictionaryKey:@&quot;AppBoundDomains&quot;];

I think we should use the key &quot;WKAppBoundDomains&quot; to be consistent with other keys in the system (e.g., SBMatchingApplicationGenres or MPSupportsExternallyPlayableContent, etc.)

&gt; Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:461
&gt; +            initializedAppBoundDomains = true;

Wouldn&apos;t it be better to do all of this work in the dispatch queue, and only dispatch the final result to the main thread? Or did Chris feel that copying the NSArray across and working in the main thread would be safer?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1626809</commentid>
    <comment_count>13</comment_count>
      <attachid>392753</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-03-06 12:43:18 -0800</bug_when>
    <thetext>Comment on attachment 392753
Patch

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

&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStore.mm:605
&gt; +    auto completionHandlerCopy = makeBlockPtr(completionHandler);

This can be done in the lambda capture.

&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStore.mm:607
&gt; +        Vector&lt;RefPtr&lt;API::Object&gt;&gt; apiDomains;

Seems like a good use case for WTF::map()

&gt; Source/WebKit/UIProcess/WebFramePolicyListenerProxy.cpp:51
&gt; +    ASSERT(isMainThread());

RunLoop::isMain() is preferred in WebKit2 code, especially in the UIProcess layer where an app could be using both WK1 and WK2 (and thus have a WebThread). isMainThread() is never correct in the UIProcess for this reason.

&gt; Source/WebKit/UIProcess/WebFramePolicyListenerProxy.h:44
&gt; +enum class ShouldExpectAppBoundDomainResult { No, Yes };

enum class ShouldExpectAppBoundDomainResult : bool { No, Yes };

&gt; Source/WebKit/UIProcess/WebPageProxy.cpp:5060
&gt; +        setIsNavigatingToAppBoundDomain(frame-&gt;isMainFrame(), navigation-&gt;currentRequest().url(), isAppBoundDomain);

What if the policyAction is Ignore? Then we won&apos;t navigate. Is it still correct to go set this IsNavigatingToAppBoundDomain flag?

&gt; Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:431
&gt; +    ASSERT(isMainThread());

RunLoop::isMain()

&gt; Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:436
&gt; +void WebsiteDataStore::beginAppBoundDomainCheck(const WebCore::RegistrableDomain domain, WebFramePolicyListenerProxy&amp; listener)

WebCore::RegistrableDomain&amp;&amp;

&gt; Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:438
&gt; +    ASSERT(RunLoop::isMain());

RunLoop::isMain()

&gt; Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:442
&gt; +    if (initializedAppBoundDomains) {

This does not look quite right. If beginAppBoundDomainCheck() gets called twice before initializedAppBoundDomains is set to true, then you&apos;ll dispatch to the background thread twice and read the file on disk twice.

&gt; Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:447
&gt; +    m_queue-&gt;dispatch([domain = domain.isolatedCopy(), listener = makeRef(listener)] () mutable {

domain = WTFMove(domain) once you switch to an rvalue reference.

&gt; Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:448
&gt; +        NSArray *domains = [[NSBundle mainBundle] objectForInfoDictionaryKey:@&quot;AppBoundDomains&quot;];

Would &apos;NSArray&lt;NSString *&gt; *domains&apos; build?

&gt; Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:449
&gt; +        RunLoop::main().dispatch([domain = domain.isolatedCopy(), listener = WTFMove(listener), domains = retainPtr(domains)] {

domain = WTFMove(domain) once you switch to an rvalue reference.

&gt; Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:452
&gt; +            for (unsigned i = 0; i &lt; appBoundDomainsCount &amp;&amp; domainsAdded &lt; maxAppBoundDomainCount; ++i) {

for (NSString *domain in domains)

&gt; Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:457
&gt; +                    domainsAdded++;

if (appBoundDomains() &gt;= maxAppBoundDomainCount)
    break;

&gt; Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:467
&gt; +void WebsiteDataStore::getAppBoundDomainsForTesting(CompletionHandler&lt;void(Vector&lt;WebCore::RegistrableDomain&gt;)&gt;&amp;&amp; completionHandler)

Vector&lt;WebCore::RegistrableDomain&gt;&amp;&amp;

&gt; Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:469
&gt; +    completionHandler(copyToVector(appBoundDomains()));

Nothing guarantees here that appBoundDomains() has been initialized.

My personal opinion is that we should start initializing the app bound domains when the first WebsiteDataStore object is constructed to avoid slowing down the very first page load.

&gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h:286
&gt; +    void beginAppBoundDomainCheck(const WebCore::RegistrableDomain, WebFramePolicyListenerProxy&amp;);

WebCore::RegistrableDomain&amp;&amp;

&gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h:287
&gt; +    void getAppBoundDomainsForTesting(CompletionHandler&lt;void(Vector&lt;WebCore::RegistrableDomain&gt;)&gt;&amp;&amp;);

Vector&lt;WebCore::RegistrableDomain&gt;&amp;&amp;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1626812</commentid>
    <comment_count>14</comment_count>
      <attachid>392753</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2020-03-06 12:46:19 -0800</bug_when>
    <thetext>Comment on attachment 392753
Patch

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

&gt;&gt; Source/WebKit/UIProcess/WebFramePolicyListenerProxy.h:44
&gt;&gt; +enum class ShouldExpectAppBoundDomainResult { No, Yes };
&gt; 
&gt; enum class ShouldExpectAppBoundDomainResult : bool { No, Yes };

I wonder why the others weren&apos;t marked this way. Would we improve memory use if we made that change?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1626813</commentid>
    <comment_count>15</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-03-06 12:48:11 -0800</bug_when>
    <thetext>(In reply to Brent Fulgham from comment #14)
&gt; Comment on attachment 392753 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=392753&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebKit/UIProcess/WebFramePolicyListenerProxy.h:44
&gt; &gt;&gt; +enum class ShouldExpectAppBoundDomainResult { No, Yes };
&gt; &gt; 
&gt; &gt; enum class ShouldExpectAppBoundDomainResult : bool { No, Yes };
&gt; 
&gt; I wonder why the others weren&apos;t marked this way. Would we improve memory use
&gt; if we made that change?

Please feel free to fix others at the same time. This is a somewhat recent pattern in WebKit so not all code has been ported yet. Yes, it can result in memory saving when stored as a data member, it also has some benefits when sent over IPC. Even if not doing any of those things, specifying an appropriate underlying type is always good practice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1626815</commentid>
    <comment_count>16</comment_count>
      <attachid>392753</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-03-06 12:51:34 -0800</bug_when>
    <thetext>Comment on attachment 392753
Patch

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

&gt;&gt;&gt; Source/WebKit/UIProcess/WebFramePolicyListenerProxy.h:44
&gt;&gt;&gt; +enum class ShouldExpectAppBoundDomainResult { No, Yes };
&gt;&gt; 
&gt;&gt; enum class ShouldExpectAppBoundDomainResult : bool { No, Yes };
&gt; 
&gt; I wonder why the others weren&apos;t marked this way. Would we improve memory use if we made that change?

We may as well set their underlying type.  It saves memory if they are stored as a member variable, but if they are only passed as parameters it doesn&apos;t effectively change anything because it still uses a whole register.

&gt;&gt; Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:442
&gt;&gt; +    if (initializedAppBoundDomains) {
&gt; 
&gt; This does not look quite right. If beginAppBoundDomainCheck() gets called twice before initializedAppBoundDomains is set to true, then you&apos;ll dispatch to the background thread twice and read the file on disk twice.

That is intentional.  We don&apos;t want to hang the main thread, and there are no bad consequences of doing it twice.  In the common case it will read the first time then immediately reply after the first time.  On rare occasion it will read more than once with no negative consequences.

&gt;&gt; Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:461
&gt;&gt; +            initializedAppBoundDomains = true;
&gt; 
&gt; Wouldn&apos;t it be better to do all of this work in the dispatch queue, and only dispatch the final result to the main thread? Or did Chris feel that copying the NSArray across and working in the main thread would be safer?

We don&apos;t want to touch appBoundDomains() on a background queue or we will get hash table corruption.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1626823</commentid>
    <comment_count>17</comment_count>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-03-06 12:57:26 -0800</bug_when>
    <thetext>(In reply to Chris Dumez from comment #13)
&gt; Comment on attachment 392753 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=392753&amp;action=review
&gt; 
&gt; What if the policyAction is Ignore? Then we won&apos;t navigate. Is it still
&gt; correct to go set this IsNavigatingToAppBoundDomain flag?
&gt; 

I think the listener will handle the ignore case, see void WebFramePolicyListenerProxy::ignore(). In this case we don&apos;t send a value, so I should add a check here for isAppBoundDomain.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1626824</commentid>
    <comment_count>18</comment_count>
      <attachid>392753</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-03-06 13:00:46 -0800</bug_when>
    <thetext>Comment on attachment 392753
Patch

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

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStore.mm:605
&gt;&gt; +    auto completionHandlerCopy = makeBlockPtr(completionHandler);
&gt; 
&gt; This can be done in the lambda capture.

This can be done in the lambda capture.

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStore.mm:607
&gt;&gt; +        Vector&lt;RefPtr&lt;API::Object&gt;&gt; apiDomains;
&gt; 
&gt; Seems like a good use case for WTF::map()

Seems like a good use case for WTF::map()

&gt;&gt; Source/WebKit/UIProcess/WebFramePolicyListenerProxy.cpp:51
&gt;&gt; +    ASSERT(isMainThread());
&gt; 
&gt; RunLoop::isMain() is preferred in WebKit2 code, especially in the UIProcess layer where an app could be using both WK1 and WK2 (and thus have a WebThread). isMainThread() is never correct in the UIProcess for this reason.

RunLoop::isMain() is preferred in WebKit2 code, especially in the UIProcess layer where an app could be using both WK1 and WK2 (and thus have a WebThread). isMainThread() is never correct in the UIProcess for this reason.

&gt;&gt;&gt;&gt;&gt; Source/WebKit/UIProcess/WebFramePolicyListenerProxy.h:44
&gt;&gt;&gt;&gt;&gt; +enum class ShouldExpectAppBoundDomainResult { No, Yes };
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; enum class ShouldExpectAppBoundDomainResult : bool { No, Yes };
&gt;&gt;&gt; 
&gt;&gt;&gt; I wonder why the others weren&apos;t marked this way. Would we improve memory use if we made that change?
&gt;&gt; 
&gt;&gt; Please feel free to fix others at the same time. This is a somewhat recent pattern in WebKit so not all code has been ported yet. Yes, it can result in memory saving when stored as a data member, it also has some benefits when sent over IPC. Even if not doing any of those things, specifying an appropriate underlying type is always good practice.
&gt; 
&gt; We may as well set their underlying type.  It saves memory if they are stored as a member variable, but if they are only passed as parameters it doesn&apos;t effectively change anything because it still uses a whole register.

enum class ShouldExpectAppBoundDomainResult : bool { No, Yes };

&gt;&gt; Source/WebKit/UIProcess/WebPageProxy.cpp:5060
&gt;&gt; +        setIsNavigatingToAppBoundDomain(frame-&gt;isMainFrame(), navigation-&gt;currentRequest().url(), isAppBoundDomain);
&gt; 
&gt; What if the policyAction is Ignore? Then we won&apos;t navigate. Is it still correct to go set this IsNavigatingToAppBoundDomain flag?

What if the policyAction is Ignore? Then we won&apos;t navigate. Is it still correct to go set this IsNavigatingToAppBoundDomain flag?

&gt;&gt; Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:431
&gt;&gt; +    ASSERT(isMainThread());
&gt; 
&gt; RunLoop::isMain()

RunLoop::isMain()

&gt;&gt; Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:436
&gt;&gt; +void WebsiteDataStore::beginAppBoundDomainCheck(const WebCore::RegistrableDomain domain, WebFramePolicyListenerProxy&amp; listener)
&gt; 
&gt; WebCore::RegistrableDomain&amp;&amp;

WebCore::RegistrableDomain&amp;&amp;

&gt;&gt; Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:438
&gt;&gt; +    ASSERT(RunLoop::isMain());
&gt; 
&gt; RunLoop::isMain()

RunLoop::isMain()

&gt;&gt;&gt; Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:442
&gt;&gt;&gt; +    if (initializedAppBoundDomains) {
&gt;&gt; 
&gt;&gt; This does not look quite right. If beginAppBoundDomainCheck() gets called twice before initializedAppBoundDomains is set to true, then you&apos;ll dispatch to the background thread twice and read the file on disk twice.
&gt; 
&gt; That is intentional.  We don&apos;t want to hang the main thread, and there are no bad consequences of doing it twice.  In the common case it will read the first time then immediately reply after the first time.  On rare occasion it will read more than once with no negative consequences.

Well there are bad consequences on power and perf to doing the same thing more than once unnecessarily. Also, my biggest concern is that you only start populating this on a low-priority thread once you&apos;ve already started navigating and it actually delays the navigation. This is not a good practice for performance. You don&apos;t want your main thread (and user visible navigation) to be waiting on a low priority background thread. As a result, I believe this code has to be refactored anyway to be done eagerly when initializing the first WebsiteDataStore.

Note that I agree we don&apos;t want to hang the main thread so I am not suggesting we lock. You can still dispatch on the background thread and then back to the main thread. However, you do NOT need to read the file more than once and populate appBoundDomains() more than once.

&gt;&gt; Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:447
&gt;&gt; +    m_queue-&gt;dispatch([domain = domain.isolatedCopy(), listener = makeRef(listener)] () mutable {
&gt; 
&gt; domain = WTFMove(domain) once you switch to an rvalue reference.

domain = WTFMove(domain) once you switch to an rvalue reference.

&gt;&gt;&gt; Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:448
&gt;&gt;&gt; +        NSArray *domains = [[NSBundle mainBundle] objectForInfoDictionaryKey:@&quot;AppBoundDomains&quot;];
&gt;&gt; 
&gt;&gt; I think we should use the key &quot;WKAppBoundDomains&quot; to be consistent with other keys in the system (e.g., SBMatchingApplicationGenres or MPSupportsExternallyPlayableContent, etc.)
&gt; 
&gt; Would &apos;NSArray&lt;NSString *&gt; *domains&apos; build?

Would &apos;NSArray&lt;NSString *&gt; *domains&apos; build?

&gt;&gt; Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:449
&gt;&gt; +        RunLoop::main().dispatch([domain = domain.isolatedCopy(), listener = WTFMove(listener), domains = retainPtr(domains)] {
&gt; 
&gt; domain = WTFMove(domain) once you switch to an rvalue reference.

domain = WTFMove(domain) once you switch to an rvalue reference.

&gt;&gt; Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:452
&gt;&gt; +            for (unsigned i = 0; i &lt; appBoundDomainsCount &amp;&amp; domainsAdded &lt; maxAppBoundDomainCount; ++i) {
&gt; 
&gt; for (NSString *domain in domains)

for (NSString *domain in domains)

&gt;&gt; Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:457
&gt;&gt; +                    domainsAdded++;
&gt; 
&gt; if (appBoundDomains() &gt;= maxAppBoundDomainCount)
&gt;     break;

if (appBoundDomains() &gt;= maxAppBoundDomainCount)
    break;

&gt;&gt; Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:467
&gt;&gt; +void WebsiteDataStore::getAppBoundDomainsForTesting(CompletionHandler&lt;void(Vector&lt;WebCore::RegistrableDomain&gt;)&gt;&amp;&amp; completionHandler)
&gt; 
&gt; Vector&lt;WebCore::RegistrableDomain&gt;&amp;&amp;

Vector&lt;WebCore::RegistrableDomain&gt;&amp;&amp;

&gt;&gt; Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:469
&gt;&gt; +    completionHandler(copyToVector(appBoundDomains()));
&gt; 
&gt; Nothing guarantees here that appBoundDomains() has been initialized.
&gt; 
&gt; My personal opinion is that we should start initializing the app bound domains when the first WebsiteDataStore object is constructed to avoid slowing down the very first page load.

Nothing guarantees here that appBoundDomains() has been initialized.

My personal opinion is that we should start initializing the app bound domains when the first WebsiteDataStore object is constructed to avoid slowing down the very first page load.

&gt;&gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h:286
&gt;&gt; +    void beginAppBoundDomainCheck(const WebCore::RegistrableDomain, WebFramePolicyListenerProxy&amp;);
&gt; 
&gt; WebCore::RegistrableDomain&amp;&amp;

WebCore::RegistrableDomain&amp;&amp;

&gt;&gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h:287
&gt;&gt; +    void getAppBoundDomainsForTesting(CompletionHandler&lt;void(Vector&lt;WebCore::RegistrableDomain&gt;)&gt;&amp;&amp;);
&gt; 
&gt; Vector&lt;WebCore::RegistrableDomain&gt;&amp;&amp;

Vector&lt;WebCore::RegistrableDomain&gt;&amp;&amp;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1626825</commentid>
    <comment_count>19</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-03-06 13:01:39 -0800</bug_when>
    <thetext>I don&apos;t know why bugzilla repeated all my comments. The part that was new is:

&gt;&gt;&gt; Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:442
&gt;&gt;&gt; +    if (initializedAppBoundDomains) {
&gt;&gt; 
&gt;&gt; This does not look quite right. If beginAppBoundDomainCheck() gets called twice before initializedAppBoundDomains is set to true, then you&apos;ll dispatch to the background thread twice and read the file on disk twice.
&gt; 
&gt; That is intentional.  We don&apos;t want to hang the main thread, and there are no bad consequences of doing it twice.  In the common case it will read the first time then immediately reply after the first time.  On rare occasion it will read more than once with no negative consequences.


Well there are bad consequences on power and perf to doing the same thing more than once unnecessarily. Also, my biggest concern is that you only start populating this on a low-priority thread once you&apos;ve already started navigating and it actually delays the navigation. This is not a good practice for performance. You don&apos;t want your main thread (and user visible navigation) to be waiting on a low priority background thread. As a result, I believe this code has to be refactored anyway to be done eagerly when initializing the first WebsiteDataStore.

Note that I agree we don&apos;t want to hang the main thread so I am not suggesting we lock. You can still dispatch on the background thread and then back to the main thread. However, you do NOT need to read the file more than once and populate appBoundDomains() more than once.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1626827</commentid>
    <comment_count>20</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-03-06 13:04:36 -0800</bug_when>
    <thetext>(In reply to Alex Christensen from comment #16)
&gt; Comment on attachment 392753 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=392753&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebKit/UIProcess/WebFramePolicyListenerProxy.h:44
&gt; &gt;&gt;&gt; +enum class ShouldExpectAppBoundDomainResult { No, Yes };
&gt; &gt;&gt; 
&gt; &gt;&gt; enum class ShouldExpectAppBoundDomainResult : bool { No, Yes };
&gt; &gt; 
&gt; &gt; I wonder why the others weren&apos;t marked this way. Would we improve memory use if we made that change?
&gt; 
&gt; We may as well set their underlying type.  It saves memory if they are
&gt; stored as a member variable, but if they are only passed as parameters it
&gt; doesn&apos;t effectively change anything because it still uses a whole register.
&gt; 
&gt; &gt;&gt; Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:442
&gt; &gt;&gt; +    if (initializedAppBoundDomains) {
&gt; &gt; 
&gt; &gt; This does not look quite right. If beginAppBoundDomainCheck() gets called twice before initializedAppBoundDomains is set to true, then you&apos;ll dispatch to the background thread twice and read the file on disk twice.
&gt; 
&gt; That is intentional.  We don&apos;t want to hang the main thread, and there are
&gt; no bad consequences of doing it twice.  In the common case it will read the
&gt; first time then immediately reply after the first time.  On rare occasion it
&gt; will read more than once with no negative consequences.
&gt; 
&gt; &gt;&gt; Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:461
&gt; &gt;&gt; +            initializedAppBoundDomains = true;
&gt; &gt; 
&gt; &gt; Wouldn&apos;t it be better to do all of this work in the dispatch queue, and only dispatch the final result to the main thread? Or did Chris feel that copying the NSArray across and working in the main thread would be safer?
&gt; 
&gt; We don&apos;t want to touch appBoundDomains() on a background queue or we will
&gt; get hash table corruption.

I think it could be done in a safe way but I do not think it matters much in practice to be doing in on the main thread. It would only be unsafe if the HashMap was queried / modifying by several threads in parallel. Since we only need to populate the HashMap on the background thread once and then we set an atomic&lt;bool&gt;. If the main thread checks this atomic&lt;bool&gt; before reading the HashMap, I do not think there would be a problem?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1626866</commentid>
    <comment_count>21</comment_count>
      <attachid>392753</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-03-06 14:11:30 -0800</bug_when>
    <thetext>Comment on attachment 392753
Patch

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

&gt; Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:441
&gt; +    static std::atomic&lt;bool&gt; initializedAppBoundDomains = false;

Note that this is only set and queried on the main thread so I do not see the need for it to be atomic, at least in this current patch iteration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1626903</commentid>
    <comment_count>22</comment_count>
      <attachid>392783</attachid>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-03-06 15:19:34 -0800</bug_when>
    <thetext>Created attachment 392783
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1626907</commentid>
    <comment_count>23</comment_count>
      <attachid>392783</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-03-06 15:22:47 -0800</bug_when>
    <thetext>Comment on attachment 392783
Patch

Clever!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1626915</commentid>
    <comment_count>24</comment_count>
      <attachid>392788</attachid>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-03-06 15:34:39 -0800</bug_when>
    <thetext>Created attachment 392788
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1626917</commentid>
    <comment_count>25</comment_count>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-03-06 15:37:31 -0800</bug_when>
    <thetext>(In reply to Alex Christensen from comment #23)
&gt; Comment on attachment 392783 [details]
&gt; Patch
&gt; 
&gt; Clever!

: )</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1626937</commentid>
    <comment_count>26</comment_count>
      <attachid>392788</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-03-06 15:56:57 -0800</bug_when>
    <thetext>Comment on attachment 392788
Patch

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

&gt; Source/WebKit/ChangeLog:11
&gt; +        the UI process whether a domain is app-bound. 

You&apos;re not really reporting it to the UIProcess, but you are reading the file from the UIProcess.

&gt; Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:71
&gt; +static std::atomic&lt;bool&gt; initializedAppBoundDomains = false;

Boolean variables in WebKit need a prefix. So maybe hasInitializedAppBoundDomains ?

&gt; Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:448
&gt; +

I would drop this empty line.

&gt; Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:456
&gt; +                URL url { URL(), domain };

Do we really need to have URLs saved on disk? This means we have to parse the URL unnecessarily just to get the host and then compute the registrable domain. Why cannot we simply store registrable domains in the plist?

&gt; Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:458
&gt; +                if (!appBoundDomain.isEmpty()) {

To avoid nesting, maybe this:
if (appBoundDomain.isEmpty())
    continue;

&gt; Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:479
&gt; +            ASSERT(initializedAppBoundDomains);

Sorry, I know I recommended this approach but there is actually a subtle bug now that I think about it more. The issue is that you&apos;re using the WebsiteDataStore&apos;s WorkQueue. Each WebsiteDataStore has its own WorkQueue so:
1. WebsiteDataStore A could have queued the task to initialize on WorkQueue WQA
2. WebsiteDataStore B then tries to read app bound domains and initializedAppBoundDomains is false, so its queue a task on WorkQueue WQB.
-&gt; Because they are 2 separate work queues, there is no serialization guarantee and you may not have initialized the domains yet by the time you get back to the main thread for reading

One way to fix this would be to use a single static WorkQueue dedicated to reading appBoundDomains.

&gt; Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:497
&gt; +        completionHandler(copyToVector(domains));

Could we return a &apos;const HashSet&lt;RegistrableDomain&gt;&amp;&apos; here? It is kind of sad right now because we go from:
HashSet&lt;RegistrableDomain&gt; -&gt; Vector&lt;RegistrableDomain&gt; -&gt; Vector&lt;RefPtr&lt;API::Object&gt;&gt; -&gt; API::Array

I like this better:
HashSet&lt;RegistrableDomain&gt; -&gt; Vector&lt;RefPtr&lt;API::Object&gt;&gt; -&gt; API::Array

&gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:121
&gt; +    initializeAppBoundDomains();

Please do this in platformInitialize() instead.

&gt; Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h:287
&gt; +    void getAppBoundDomainsForTesting(CompletionHandler&lt;void(Vector&lt;WebCore::RegistrableDomain&gt;&amp;&amp;)&gt;&amp;&amp;);

We don&apos;t use get prefix for getters in WebKit. Seems like this method should be const.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1626939</commentid>
    <comment_count>27</comment_count>
      <attachid>392788</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2020-03-06 16:01:11 -0800</bug_when>
    <thetext>Comment on attachment 392788
Patch

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

&gt;&gt; Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:71
&gt;&gt; +static std::atomic&lt;bool&gt; initializedAppBoundDomains = false;
&gt; 
&gt; Boolean variables in WebKit need a prefix. So maybe hasInitializedAppBoundDomains ?

+1

&gt;&gt; Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:456
&gt;&gt; +                URL url { URL(), domain };
&gt; 
&gt; Do we really need to have URLs saved on disk? This means we have to parse the URL unnecessarily just to get the host and then compute the registrable domain. Why cannot we simply store registrable domains in the plist?

Good point. Kate, let&apos;s just drop the URL parsing.

&gt;&gt; Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:479
&gt;&gt; +            ASSERT(initializedAppBoundDomains);
&gt; 
&gt; Sorry, I know I recommended this approach but there is actually a subtle bug now that I think about it more. The issue is that you&apos;re using the WebsiteDataStore&apos;s WorkQueue. Each WebsiteDataStore has its own WorkQueue so:
&gt; 1. WebsiteDataStore A could have queued the task to initialize on WorkQueue WQA
&gt; 2. WebsiteDataStore B then tries to read app bound domains and initializedAppBoundDomains is false, so its queue a task on WorkQueue WQB.
&gt; -&gt; Because they are 2 separate work queues, there is no serialization guarantee and you may not have initialized the domains yet by the time you get back to the main thread for reading
&gt; 
&gt; One way to fix this would be to use a single static WorkQueue dedicated to reading appBoundDomains.

Doesn&apos;t that seem like overkill for reading a maximum of 10 values out of an NSDictionary?

&gt;&gt; Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:497
&gt;&gt; +        completionHandler(copyToVector(domains));
&gt; 
&gt; Could we return a &apos;const HashSet&lt;RegistrableDomain&gt;&amp;&apos; here? It is kind of sad right now because we go from:
&gt; HashSet&lt;RegistrableDomain&gt; -&gt; Vector&lt;RegistrableDomain&gt; -&gt; Vector&lt;RefPtr&lt;API::Object&gt;&gt; -&gt; API::Array
&gt; 
&gt; I like this better:
&gt; HashSet&lt;RegistrableDomain&gt; -&gt; Vector&lt;RefPtr&lt;API::Object&gt;&gt; -&gt; API::Array

No objections from me!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1626941</commentid>
    <comment_count>28</comment_count>
      <attachid>392788</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-03-06 16:05:33 -0800</bug_when>
    <thetext>Comment on attachment 392788
Patch

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

&gt;&gt;&gt; Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:479
&gt;&gt;&gt; +            ASSERT(initializedAppBoundDomains);
&gt;&gt; 
&gt;&gt; Sorry, I know I recommended this approach but there is actually a subtle bug now that I think about it more. The issue is that you&apos;re using the WebsiteDataStore&apos;s WorkQueue. Each WebsiteDataStore has its own WorkQueue so:
&gt;&gt; 1. WebsiteDataStore A could have queued the task to initialize on WorkQueue WQA
&gt;&gt; 2. WebsiteDataStore B then tries to read app bound domains and initializedAppBoundDomains is false, so its queue a task on WorkQueue WQB.
&gt;&gt; -&gt; Because they are 2 separate work queues, there is no serialization guarantee and you may not have initialized the domains yet by the time you get back to the main thread for reading
&gt;&gt; 
&gt;&gt; One way to fix this would be to use a single static WorkQueue dedicated to reading appBoundDomains.
&gt; 
&gt; Doesn&apos;t that seem like overkill for reading a maximum of 10 values out of an NSDictionary?

The code is racy otherwise and you may end up proceeding with the loads without having your domains (which I hear is not acceptable). If you have a way to address the raciness that is not overkill, I am all hears :)
Using a separate WorkQueue from the one the WebsiteDataStore object uses is not that much work I think. We can also destroy this WorkQueue object once the reading from disk is done (and I think we should).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1626997</commentid>
    <comment_count>29</comment_count>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-03-06 17:07:54 -0800</bug_when>
    <thetext>(In reply to Brent Fulgham from comment #27)
&gt; Comment on attachment 392788 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=392788&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:456
&gt; &gt;&gt; +                URL url { URL(), domain };
&gt; &gt; 
&gt; &gt; Do we really need to have URLs saved on disk? This means we have to parse the URL unnecessarily just to get the host and then compute the registrable domain. Why cannot we simply store registrable domains in the plist?
&gt; 
&gt; Good point. Kate, let&apos;s just drop the URL parsing.

I talked to John and he re-iterated that we should keep this in to ensure the URL is valid</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1627011</commentid>
    <comment_count>30</comment_count>
      <attachid>392817</attachid>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-03-06 17:28:41 -0800</bug_when>
    <thetext>Created attachment 392817
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1627030</commentid>
    <comment_count>31</comment_count>
      <attachid>392817</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2020-03-06 17:38:38 -0800</bug_when>
    <thetext>Comment on attachment 392817
Patch

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

&gt; Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:464
&gt; +                if (!url.isValid())

Did you decide to leave this as a URL to make the code more robust against improper content in the Info.plist?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1627031</commentid>
    <comment_count>32</comment_count>
      <attachid>392817</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2020-03-06 17:39:19 -0800</bug_when>
    <thetext>Comment on attachment 392817
Patch

I think this looks good -- let&apos;s get it into a full build. We can massage more later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1627032</commentid>
    <comment_count>33</comment_count>
      <attachid>392817</attachid>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-03-06 17:39:33 -0800</bug_when>
    <thetext>Comment on attachment 392817
Patch

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

&gt;&gt; Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:464
&gt;&gt; +                if (!url.isValid())
&gt; 
&gt; Did you decide to leave this as a URL to make the code more robust against improper content in the Info.plist?

Yes, as per recommended after talking with John</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1627085</commentid>
    <comment_count>34</comment_count>
      <attachid>392817</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-03-06 18:40:59 -0800</bug_when>
    <thetext>Comment on attachment 392817
Patch

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

&gt; Source/WebKit/UIProcess/WebPageProxy.cpp:5059
&gt; +

nit: Unnecessary blank line

&gt; Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:73
&gt; +    static auto&amp; queue = WorkQueue::create(&quot;com.apple.WebKit.AppBoundDomains&quot;, WorkQueue::Type::Serial).leakRef();

This is OK for now since you are in a hurry but as I mentioned before, we may destroy the WorkQueue once we&apos;re done with the import. We should check to see if this keeps unnecessary threads around for the lifetime of the application.

&gt;&gt;&gt; Source/WebKit/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:464
&gt;&gt;&gt; +                if (!url.isValid())
&gt;&gt; 
&gt;&gt; Did you decide to leave this as a URL to make the code more robust against improper content in the Info.plist?
&gt; 
&gt; Yes, as per recommended after talking with John

It&apos;d be good to discuss John&apos;s concerns at some point and why we cannot simply call RegistrableDomain::uncheckedCreateFromHost() on strings in the plist. Then we&apos;d simply store &quot;apple.com&quot; in the plist instead of &quot;http://www.apple.com&quot;. uncheckedCreateFromHost() calls topPrivatelyControlledDomain() on the input string so even if the input is a subdomain, it would convert it to a registrable domain. I do not really understand why this does not address concerns with regards to bad input. Unnecessary parsing of URLs, then to extra their host and then call topPrivatelyControlledDomain() on the host seems really overkill.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1627106</commentid>
    <comment_count>35</comment_count>
      <attachid>392839</attachid>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-03-06 19:20:38 -0800</bug_when>
    <thetext>Created attachment 392839
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1627135</commentid>
    <comment_count>36</comment_count>
      <attachid>392839</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-03-06 20:48:55 -0800</bug_when>
    <thetext>Comment on attachment 392839
Patch

Clearing flags on attachment: 392839

Committed r258054: &lt;https://trac.webkit.org/changeset/258054&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1627136</commentid>
    <comment_count>37</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-03-06 20:48:57 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1627138</commentid>
    <comment_count>38</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-03-06 20:49:19 -0800</bug_when>
    <thetext>&lt;rdar://problem/60181376&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1627242</commentid>
    <comment_count>39</comment_count>
      <attachid>392839</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-03-07 10:52:49 -0800</bug_when>
    <thetext>Comment on attachment 392839
Patch

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

&gt; Tools/TestWebKitAPI/Info.plist:6
&gt; +	&lt;key&gt;WKAppBoundDomains&lt;/key&gt;
&gt; +	&lt;array&gt;

What about a test where the value of WKAppBoundDomains is not an array, and a test where the values of the array are not strings?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1627798</commentid>
    <comment_count>40</comment_count>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-03-09 09:15:27 -0700</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #39)
&gt; Comment on attachment 392839 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=392839&amp;action=review
&gt; 
&gt; &gt; Tools/TestWebKitAPI/Info.plist:6
&gt; &gt; +	&lt;key&gt;WKAppBoundDomains&lt;/key&gt;
&gt; &gt; +	&lt;array&gt;
&gt; 
&gt; What about a test where the value of WKAppBoundDomains is not an array, and
&gt; a test where the values of the array are not strings?

Good point. I can add a test where a value is not a string, but since this reads from the Info.plist for TestWebKitAPI, I&apos;m not sure of a good way to test a case when WKAppBoundDomains is not an array (while also keeping the case where it is).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392316</attachid>
            <date>2020-03-03 13:05:08 -0800</date>
            <delta_ts>2020-03-03 13:50:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-208528-20200303130507.patch</filename>
            <type>text/plain</type>
            <size>9546</size>
            <attacher name="Kate Cheney">katherine_cheney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU3NzgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2MxZjliYjY5NjJiOWE2
MTc5MGI0Y2ZlMGZmMjkzNmZmOTAwOTg5NC4uZmVlYWZkNzRjNjg5OWY1ZTJjMWY5NDhiMTNlMWI2
YmY3NjgyMzhmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDIwLTAzLTAzICBLYXRl
IENoZW5leSAgPGthdGhlcmluZV9jaGVuZXlAYXBwbGUuY29tPgorCisgICAgICAgIFVJUHJvY2Vz
cyBuZWVkcyBtZWNoYW5pc20gdG8gc3BlY2lmeSBBcHBCb3VuZCBkb21haW5zCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDg1MjgKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzU5OTgwMzQwPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogcGxhdGZvcm0vUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vY29jb2EvUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzQ29jb2EubW06
CisgICAgICAgIChXZWJDb3JlOjpnZXRBcHBCb3VuZERvbWFpbnMpOgorCiAyMDIwLTAzLTAzICBL
YXRlIENoZW5leSAgPGthdGhlcmluZV9jaGVuZXlAYXBwbGUuY29tPgogCiAgICAgICAgIENoZWNr
IGZvciBuYXZpZ2F0aW9uIHRvIGFwcC1ib3VuZCBkb21haW4gZHVyaW5nIHNjcmlwdCBldmFsdWF0
aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCmluZGV4IGQwNzQ5YTMzNjZkMDA1MWVjMjJmZTllMGU2MWZlZDAxMGU0NDNlYTUu
LmMzZmU1NWUwM2MyYTkwOWNhYzYxZDQwMTc5NWIwZjg1Mjk0OWMxODggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTggQEAKKzIwMjAtMDMtMDMgIEthdGUgQ2hlbmV5ICA8a2F0aGVyaW5lX2NoZW5leUBh
cHBsZS5jb20+CisKKyAgICAgICAgVUlQcm9jZXNzIG5lZWRzIG1lY2hhbmlzbSB0byBzcGVjaWZ5
IEFwcEJvdW5kIGRvbWFpbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwODUyOAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTk5ODAzNDA+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojppc0FwcEJv
dW5kRG9tYWluIGNvbnN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpyZWFkQXBwQm91bmREb21haW5z
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQcm94eTo6YXBwQm91bmREb21haW5zKToKKwogMjAyMC0wMy0wMyAgS2F0
ZSBDaGVuZXkgIDxrYXRoZXJpbmVfY2hlbmV5QGFwcGxlLmNvbT4KIAogICAgICAgICBDaGVjayBm
b3IgbmF2aWdhdGlvbiB0byBhcHAtYm91bmQgZG9tYWluIGR1cmluZyBzY3JpcHQgZXZhbHVhdGlv
bgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUnVudGltZUFwcGxpY2F0aW9u
Q2hlY2tzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9SdW50aW1lQXBwbGljYXRpb25DaGVj
a3MuaAppbmRleCBmY2QzMjBmYWVjNjNiNGZhMjQ5MGM4MjgyYTRhYTdkZTBkMGMxNjJhLi5kMTE5
YjY5NjAyNjlkZjdlM2MwODFiZWYxZTQyNjQzNDlhYzNjYzUwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9SdW50aW1lQXBwbGljYXRpb25DaGVja3MuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9SdW50aW1lQXBwbGljYXRpb25DaGVja3MuaApAQCAtMjUsOCArMjUs
MTEgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJSZWdpc3RyYWJsZURvbWFpbi5oIgog
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKK3N0YXRpYyBjb25zdCBhdXRvIG1heEFwcEJvdW5k
RG9tYWluQ291bnQgPSAxMDsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBXRUJDT1JFX0VYUE9S
VCB2b2lkIHNldFByZXNlbnRpbmdBcHBsaWNhdGlvblBJRChpbnQpOwpAQCAtNDksNiArNTIsNyBA
QCBXRUJDT1JFX0VYUE9SVCB1aW50MzJfdCBhcHBsaWNhdGlvblNES1ZlcnNpb24oKTsKIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc2V0QXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKGNvbnN0IFN0cmlu
ZyYpOwogV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcigp
OwogV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVhckFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllclRl
c3RpbmdPdmVycmlkZSgpOworV0VCQ09SRV9FWFBPUlQgVmVjdG9yPFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluPiYgZ2V0QXBwQm91bmREb21haW5zKCk7CiAKICNpZiBQTEFURk9STShNQUMpCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1J1bnRpbWVBcHBsaWNh
dGlvbkNoZWNrc0NvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUnVudGlt
ZUFwcGxpY2F0aW9uQ2hlY2tzQ29jb2EubW0KaW5kZXggNGEwNDdmMGNmMTU1Zjk3MTI4MzZkZGNh
OWJkOGVjNjNjNzc3MTIxZC4uZGU2MTJhNThmNWE1MTAyYTYwZDFmZjJkMzVkNzFmYWIzN2Q5Mjky
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUnVudGltZUFwcGxp
Y2F0aW9uQ2hlY2tzQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2Ev
UnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzQ29jb2EubW0KQEAgLTc1LDYgKzc1LDIxIEBAIHZvaWQg
Y2xlYXJBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXJUZXN0aW5nT3ZlcnJpZGUoKQogI2VuZGlm
CiB9CiAKK1ZlY3RvcjxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4mIGdldEFwcEJvdW5kRG9t
YWlucygpCit7CisgICAgc3RhdGljIGF1dG8gYXBwQm91bmREb21haW5zID0gbWFrZU5ldmVyRGVz
dHJveWVkKFZlY3RvcjxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4geyB9KTsKKyAgICBpZiAo
IWFwcEJvdW5kRG9tYWlucy0+aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gYXBwQm91bmREb21h
aW5zOworCisgICAgTlNBcnJheSAqZG9tYWlucyA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gb2Jq
ZWN0Rm9ySW5mb0RpY3Rpb25hcnlLZXk6QCJBcHBCb3VuZERvbWFpbnMiXTsKKyAgICBpbnQgYXBw
Qm91bmREb21haW5zQ291bnQgPSBzdGQ6Om1pbihtYXhBcHBCb3VuZERvbWFpbkNvdW50LCBzdGF0
aWNfY2FzdDxpbnQ+KFtkb21haW5zIGNvdW50XSkpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBhcHBCb3VuZERvbWFpbnNDb3VudDsgaSsrKQorICAgICAgICBhcHBCb3VuZERvbWFpbnMtPmFw
cGVuZChXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lz
dHJhYmxlRG9tYWluU3RyaW5nKFtkb21haW5zIG9iamVjdEF0SW5kZXg6aV0pKTsKKworICAgIHJl
dHVybiBhcHBCb3VuZERvbWFpbnM7Cit9CisKIHN0YXRpYyBPcHRpb25hbDx1aW50MzJfdD4mIGFw
cGxpY2F0aW9uU0RLVmVyc2lvbk92ZXJyaWRlKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8T3B0aW9uYWw8dWludDMyX3Q+PiB2ZXJzaW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAKaW5kZXggZjFkY2MwYjAyOGI3MDQ5YWMyZmI1YWYzNmM5YjhlMTk1ZjUz
NWU1ZS4uMmRkYjcwNDM4ZWU1NDU4ZDRiZTYyOWE0NzZjNjMwMjQ0YzdiYWNkYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC0zMDk3LDggKzMwOTcsMTEgQEAg
cHJpdmF0ZToKIAogYm9vbCBXZWJQYWdlUHJveHk6OmlzQXBwQm91bmREb21haW4oY29uc3QgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikgY29uc3QKIHsKKyAgICBpZiAoIWhhc1J1
bm5pbmdQcm9jZXNzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIFdFQl9QQUdFX1BS
T1hZX0FERElUSU9OUwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBtX3Byb2Nlc3MtPmFw
cEJvdW5kRG9tYWlucygpLmNvbnRhaW5zKGRvbWFpbik7CiB9CiAKIGJvb2wgV2ViUGFnZVByb3h5
Ojppc0FwcEJvdW5kRG9tYWluKGNvbnN0IFVSTCYgdXJsKSBjb25zdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKaW5kZXggOGI3MGQ2NDdlZTgyNmNhZGQyZDJi
ZmY3ZWRmMzg3ZjNjOGIwNGZkZi4uYzkwN2ViZGNjMWM5MmM2YWVhZTZmNmYyM2JjM2NhM2E0ZDdl
NzJiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCkBA
IC0xODgsNiArMTg4LDggQEAgV2ViUHJvY2Vzc1Byb3h5OjpXZWJQcm9jZXNzUHJveHkoV2ViUHJv
Y2Vzc1Bvb2wmIHByb2Nlc3NQb29sLCBXZWJzaXRlRGF0YVN0b3JlKgogICAgIEFTU0VSVF9VTlVT
RUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CiAKICAgICBXZWJQYXN0ZWJvYXJkUHJveHk6
OnNpbmdsZXRvbigpLmFkZFdlYlByb2Nlc3NQcm94eSgqdGhpcyk7CisKKyAgICByZWFkQXBwQm91
bmREb21haW5zKCk7CiB9CiAKIFdlYlByb2Nlc3NQcm94eTo6fldlYlByb2Nlc3NQcm94eSgpCkBA
IC0xNzU5LDYgKzE3NjEsMTUgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OmRpZENyZWF0ZUNvbnRl
eHRJbkdQVVByb2Nlc3NGb3JWaXNpYmlsaXR5UHJvcGFnYXRpb24oTGF5ZXIKIH0KICNlbmRpZgog
Cit2b2lkIFdlYlByb2Nlc3NQcm94eTo6cmVhZEFwcEJvdW5kRG9tYWlucygpCit7CisgICAgYXV0
byYgZG9tYWlucyA9IFdlYkNvcmU6OmdldEFwcEJvdW5kRG9tYWlucygpOworICAgIG1fYXBwQm91
bmREb21haW5zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZG9tYWlucy5zaXplKCkpOworICAgIGZv
ciAoYXV0byYgZG9tYWluIDogZG9tYWlucykKKyAgICAgICAgbV9hcHBCb3VuZERvbWFpbnMudW5j
aGVja2VkQXBwZW5kKGRvbWFpbik7Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICN1
bmRlZiBNRVNTQUdFX0NIRUNLCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQcm9jZXNzUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94
eS5oCmluZGV4IGU0YjcwMDRiNDVhY2JmYmFiZTRlMTUzNzI0NDc0OWUxY2EyOGEyMWIuLmMxZmFh
YWU3Nzg5MzcwMDJiOThkNjVhZDBkOTYyNTllYzA0YjFkNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oCkBAIC0zNzYsNiArMzc2LDggQEAgcHVibGljOgogICAg
IHZvaWQgZ3B1UHJvY2Vzc0NyYXNoZWQoKTsKICNlbmRpZgogCisgICAgVmVjdG9yPFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluPiYgYXBwQm91bmREb21haW5zKCkgeyByZXR1cm4gbV9hcHBCb3Vu
ZERvbWFpbnM7IH0KKwogcHJvdGVjdGVkOgogICAgIFdlYlByb2Nlc3NQcm94eShXZWJQcm9jZXNz
UG9vbCYsIFdlYnNpdGVEYXRhU3RvcmUqLCBJc1ByZXdhcm1lZCk7CiAKQEAgLTQ3Myw2ICs0NzUs
OCBAQCBwcml2YXRlOgogICAgIHZvaWQgc2VuZE1lc3NhZ2VUb1dlYkNvbnRleHRXaXRoUmVwbHko
VXNlck1lc3NhZ2UmJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChVc2VyTWVzc2FnZSYmKT4mJik7
CiAjZW5kaWYKIAorICAgIHZvaWQgcmVhZEFwcEJvdW5kRG9tYWlucygpOworCiAgICAgZW51bSBj
bGFzcyBJc1dlYWsgeyBObywgWWVzIH07CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3Mg
V2Vha09yU3Ryb25nUHRyIHsKICAgICBwdWJsaWM6CkBAIC01NjgsNiArNTcyLDggQEAgcHJpdmF0
ZToKICAgICBNZWRpYUNhcHR1cmVTYW5kYm94RXh0ZW5zaW9ucyBtX21lZGlhQ2FwdHVyZVNhbmRi
b3hFeHRlbnNpb25zIHsgU2FuZGJveEV4dGVuc2lvblR5cGU6Ok5vbmUgfTsKICNlbmRpZgogCisg
ICAgVmVjdG9yPFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiBtX2FwcEJvdW5kRG9tYWluczsK
KwogICAgIHN0cnVjdCBTZXJ2aWNlV29ya2VySW5mb3JtYXRpb24gewogICAgICAgICBXZWJQYWdl
UHJveHlJZGVudGlmaWVyIHNlcnZpY2VXb3JrZXJQYWdlUHJveHlJRDsKICAgICAgICAgV2ViQ29y
ZTo6UGFnZUlkZW50aWZpZXIgc2VydmljZVdvcmtlclBhZ2VJRDsKZGlmZiAtLWdpdCBhL1Rvb2xz
L0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBmMTZkYTNhZTZlMTc5NzBlZjdhMGFk
YTE4ODYwNGVhMTZmYzkyNzA3Li44OWMyMmM5Y2U1OWMzOTFlYzhkOTEzYzIyMmQxNmM2NTI4MzI1
MGRhIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMjAtMDMtMDMgIEthdGUgQ2hlbmV5ICA8a2F0aGVyaW5lX2NoZW5l
eUBhcHBsZS5jb20+CisKKyAgICAgICAgVUlQcm9jZXNzIG5lZWRzIG1lY2hhbmlzbSB0byBzcGVj
aWZ5IEFwcEJvdW5kIGRvbWFpbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwODUyOAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTk5ODAzNDA+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgdGVz
dCBhcHAtYm91bmQgZG9tYWlucyB0byBUZXN0V2ViS2l0QVBJIHBsaXN0LgorCisgICAgICAgICog
VGVzdFdlYktpdEFQSS9JbmZvLnBsaXN0OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvSW5BcHBCcm93c2VyUHJpdmFjeS5tbToKKyAgICAgICAgKFRFU1QpOgorCiAy
MDIwLTAzLTAzICBLYXRlIENoZW5leSAgPGthdGhlcmluZV9jaGVuZXlAYXBwbGUuY29tPgogCiAg
ICAgICAgIENoZWNrIGZvciBuYXZpZ2F0aW9uIHRvIGFwcC1ib3VuZCBkb21haW4gZHVyaW5nIHNj
cmlwdCBldmFsdWF0aW9uCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL0luZm8ucGxp
c3QgYi9Ub29scy9UZXN0V2ViS2l0QVBJL0luZm8ucGxpc3QKaW5kZXggNDIxNmI2ZDcxMzNjZjFh
ZDczN2Y4ZDYyNWM1MzJhYTkyYTFkODExOC4uNDA4ZjkyMDJlMzViZTY1YmMzMWVjYTI5ODhjOTVl
YWVlYzRmOWI3MSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9JbmZvLnBsaXN0Cisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvSW5mby5wbGlzdApAQCAtMiw2ICsyLDE0IEBACiA8IURP
Q1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8v
d3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KIDxwbGlzdCB2ZXJzaW9u
PSIxLjAiPgogPGRpY3Q+CisJPGtleT5BcHBCb3VuZERvbWFpbnM8L2tleT4KKwk8YXJyYXk+CisJ
CTxzdHJpbmc+dGVzdERvbWFpbjE8L3N0cmluZz4KKwkJPHN0cmluZz50ZXN0RG9tYWluMjwvc3Ry
aW5nPgorCQk8c3RyaW5nPnRlc3REb21haW4zPC9zdHJpbmc+CisJPC9hcnJheT4KKwk8a2V5PnRl
c3REb21haW4yPC9rZXk+CisJPHN0cmluZz50ZXN0RG9tYWluMjwvc3RyaW5nPgogCTxrZXk+Q0ZC
dW5kbGVOYW1lPC9rZXk+CiAJPHN0cmluZz4ke1BST0RVQ1RfTkFNRX08L3N0cmluZz4KIAk8a2V5
PkNGQnVuZGxlSWRlbnRpZmllcjwva2V5PgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9JbkFwcEJyb3dzZXJQcml2YWN5Lm1tIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbkFwcEJyb3dzZXJQcml2YWN5Lm1tCmluZGV4IDc5
ZTQ1MWUzNTVjMmQ4ODE1NDU1MTc5MTI0ZDcwNzExODgyNzQwODMuLjEzZWM5M2ZiMDE1OWVkMzYw
N2RmNDY3YWFlYmRiYTQ1YjAwNWQwYjggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvSW5BcHBCcm93c2VyUHJpdmFjeS5tbQorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luQXBwQnJvd3NlclByaXZhY3kubW0KQEAgLTI5
LDYgKzI5LDggQEAKICNpbXBvcnQgIlRlc3ROYXZpZ2F0aW9uRGVsZWdhdGUuaCIKICNpbXBvcnQg
IlRlc3RXS1dlYlZpZXcuaCIKICNpbXBvcnQgIldLV2ViVmlld0NvbmZpZ3VyYXRpb25FeHRyYXMu
aCIKKyNpbXBvcnQgPFdlYkNvcmUvUmVnaXN0cmFibGVEb21haW4uaD4KKyNpbXBvcnQgPFdlYkNv
cmUvUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQcmVmZXJl
bmNlc1ByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclBy
aXZhdGUuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtMTc2LDMgKzE3OCwx
NCBAQCBURVNUKFdlYktpdCwgU3dhcEJhY2tUb0FwcEJvdW5kUmVqZWN0c1VzZXJTY3JpcHQpCiB9
CiAKICNlbmRpZiAvLyBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQorCitURVNUKFdlYktpdCwgQXBw
Qm91bmREb21haW5zKQoreworICAgIHN0YXRpYyBWZWN0b3I8V2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4+IGRvbWFpbnNUb0NvbXBhcmUgeyBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjo6dW5j
aGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKCJ0ZXN0RG9tYWluMSIpLCBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxl
RG9tYWluU3RyaW5nKCJ0ZXN0RG9tYWluMiIpLCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjo6
dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKCJ0ZXN0RG9tYWluMyIp
fTsKKyAgICAKKyAgICBhdXRvJiBkb21haW5zID0gV2ViQ29yZTo6Z2V0QXBwQm91bmREb21haW5z
KCk7CisgICAgRVhQRUNUX0VRKGRvbWFpbnMuc2l6ZSgpLCBkb21haW5zVG9Db21wYXJlLnNpemUo
KSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRvbWFpbnMuc2l6ZSgpOyBpKyspCisg
ICAgICAgIEVYUEVDVF9XS19TVFJFUShkb21haW5zLmF0KGkpLnN0cmluZygpLCBkb21haW5zVG9D
b21wYXJlLmF0KGkpLnN0cmluZygpKTsKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392324</attachid>
            <date>2020-03-03 13:50:39 -0800</date>
            <delta_ts>2020-03-06 12:19:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-208528-20200303135039.patch</filename>
            <type>text/plain</type>
            <size>9575</size>
            <attacher name="Kate Cheney">katherine_cheney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU3NzgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2MxZjliYjY5NjJiOWE2
MTc5MGI0Y2ZlMGZmMjkzNmZmOTAwOTg5NC4uZmVlYWZkNzRjNjg5OWY1ZTJjMWY5NDhiMTNlMWI2
YmY3NjgyMzhmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDIwLTAzLTAzICBLYXRl
IENoZW5leSAgPGthdGhlcmluZV9jaGVuZXlAYXBwbGUuY29tPgorCisgICAgICAgIFVJUHJvY2Vz
cyBuZWVkcyBtZWNoYW5pc20gdG8gc3BlY2lmeSBBcHBCb3VuZCBkb21haW5zCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDg1MjgKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzU5OTgwMzQwPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogcGxhdGZvcm0vUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vY29jb2EvUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzQ29jb2EubW06
CisgICAgICAgIChXZWJDb3JlOjpnZXRBcHBCb3VuZERvbWFpbnMpOgorCiAyMDIwLTAzLTAzICBL
YXRlIENoZW5leSAgPGthdGhlcmluZV9jaGVuZXlAYXBwbGUuY29tPgogCiAgICAgICAgIENoZWNr
IGZvciBuYXZpZ2F0aW9uIHRvIGFwcC1ib3VuZCBkb21haW4gZHVyaW5nIHNjcmlwdCBldmFsdWF0
aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCmluZGV4IGQwNzQ5YTMzNjZkMDA1MWVjMjJmZTllMGU2MWZlZDAxMGU0NDNlYTUu
LmMzZmU1NWUwM2MyYTkwOWNhYzYxZDQwMTc5NWIwZjg1Mjk0OWMxODggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTggQEAKKzIwMjAtMDMtMDMgIEthdGUgQ2hlbmV5ICA8a2F0aGVyaW5lX2NoZW5leUBh
cHBsZS5jb20+CisKKyAgICAgICAgVUlQcm9jZXNzIG5lZWRzIG1lY2hhbmlzbSB0byBzcGVjaWZ5
IEFwcEJvdW5kIGRvbWFpbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwODUyOAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTk5ODAzNDA+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojppc0FwcEJv
dW5kRG9tYWluIGNvbnN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5OjpyZWFkQXBwQm91bmREb21haW5z
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQcm94eTo6YXBwQm91bmREb21haW5zKToKKwogMjAyMC0wMy0wMyAgS2F0
ZSBDaGVuZXkgIDxrYXRoZXJpbmVfY2hlbmV5QGFwcGxlLmNvbT4KIAogICAgICAgICBDaGVjayBm
b3IgbmF2aWdhdGlvbiB0byBhcHAtYm91bmQgZG9tYWluIGR1cmluZyBzY3JpcHQgZXZhbHVhdGlv
bgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUnVudGltZUFwcGxpY2F0aW9u
Q2hlY2tzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9SdW50aW1lQXBwbGljYXRpb25DaGVj
a3MuaAppbmRleCBmY2QzMjBmYWVjNjNiNGZhMjQ5MGM4MjgyYTRhYTdkZTBkMGMxNjJhLi5kMTE5
YjY5NjAyNjlkZjdlM2MwODFiZWYxZTQyNjQzNDlhYzNjYzUwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9SdW50aW1lQXBwbGljYXRpb25DaGVja3MuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9SdW50aW1lQXBwbGljYXRpb25DaGVja3MuaApAQCAtMjUsOCArMjUs
MTEgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJSZWdpc3RyYWJsZURvbWFpbi5oIgog
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKK3N0YXRpYyBjb25zdCBhdXRvIG1heEFwcEJvdW5k
RG9tYWluQ291bnQgPSAxMDsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBXRUJDT1JFX0VYUE9S
VCB2b2lkIHNldFByZXNlbnRpbmdBcHBsaWNhdGlvblBJRChpbnQpOwpAQCAtNDksNiArNTIsNyBA
QCBXRUJDT1JFX0VYUE9SVCB1aW50MzJfdCBhcHBsaWNhdGlvblNES1ZlcnNpb24oKTsKIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc2V0QXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKGNvbnN0IFN0cmlu
ZyYpOwogV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcigp
OwogV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVhckFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllclRl
c3RpbmdPdmVycmlkZSgpOworV0VCQ09SRV9FWFBPUlQgVmVjdG9yPFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluPiYgZ2V0QXBwQm91bmREb21haW5zKCk7CiAKICNpZiBQTEFURk9STShNQUMpCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1J1bnRpbWVBcHBsaWNh
dGlvbkNoZWNrc0NvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUnVudGlt
ZUFwcGxpY2F0aW9uQ2hlY2tzQ29jb2EubW0KaW5kZXggNGEwNDdmMGNmMTU1Zjk3MTI4MzZkZGNh
OWJkOGVjNjNjNzc3MTIxZC4uZGU2MTJhNThmNWE1MTAyYTYwZDFmZjJkMzVkNzFmYWIzN2Q5Mjky
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUnVudGltZUFwcGxp
Y2F0aW9uQ2hlY2tzQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2Ev
UnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzQ29jb2EubW0KQEAgLTc1LDYgKzc1LDIxIEBAIHZvaWQg
Y2xlYXJBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXJUZXN0aW5nT3ZlcnJpZGUoKQogI2VuZGlm
CiB9CiAKK1ZlY3RvcjxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4mIGdldEFwcEJvdW5kRG9t
YWlucygpCit7CisgICAgc3RhdGljIGF1dG8gYXBwQm91bmREb21haW5zID0gbWFrZU5ldmVyRGVz
dHJveWVkKFZlY3RvcjxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4geyB9KTsKKyAgICBpZiAo
IWFwcEJvdW5kRG9tYWlucy0+aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gYXBwQm91bmREb21h
aW5zOworCisgICAgTlNBcnJheSAqZG9tYWlucyA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gb2Jq
ZWN0Rm9ySW5mb0RpY3Rpb25hcnlLZXk6QCJBcHBCb3VuZERvbWFpbnMiXTsKKyAgICBpbnQgYXBw
Qm91bmREb21haW5zQ291bnQgPSBzdGQ6Om1pbihtYXhBcHBCb3VuZERvbWFpbkNvdW50LCBzdGF0
aWNfY2FzdDxpbnQ+KFtkb21haW5zIGNvdW50XSkpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBhcHBCb3VuZERvbWFpbnNDb3VudDsgaSsrKQorICAgICAgICBhcHBCb3VuZERvbWFpbnMtPmFw
cGVuZChXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lz
dHJhYmxlRG9tYWluU3RyaW5nKFtkb21haW5zIG9iamVjdEF0SW5kZXg6aV0pKTsKKworICAgIHJl
dHVybiBhcHBCb3VuZERvbWFpbnM7Cit9CisKIHN0YXRpYyBPcHRpb25hbDx1aW50MzJfdD4mIGFw
cGxpY2F0aW9uU0RLVmVyc2lvbk92ZXJyaWRlKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8T3B0aW9uYWw8dWludDMyX3Q+PiB2ZXJzaW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAKaW5kZXggZjFkY2MwYjAyOGI3MDQ5YWMyZmI1YWYzNmM5YjhlMTk1ZjUz
NWU1ZS4uMmRkYjcwNDM4ZWU1NDU4ZDRiZTYyOWE0NzZjNjMwMjQ0YzdiYWNkYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC0zMDk3LDggKzMwOTcsMTEgQEAg
cHJpdmF0ZToKIAogYm9vbCBXZWJQYWdlUHJveHk6OmlzQXBwQm91bmREb21haW4oY29uc3QgV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikgY29uc3QKIHsKKyAgICBpZiAoIWhhc1J1
bm5pbmdQcm9jZXNzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIFdFQl9QQUdFX1BS
T1hZX0FERElUSU9OUwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBtX3Byb2Nlc3MtPmFw
cEJvdW5kRG9tYWlucygpLmNvbnRhaW5zKGRvbWFpbik7CiB9CiAKIGJvb2wgV2ViUGFnZVByb3h5
Ojppc0FwcEJvdW5kRG9tYWluKGNvbnN0IFVSTCYgdXJsKSBjb25zdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKaW5kZXggOGI3MGQ2NDdlZTgyNmNhZGQyZDJi
ZmY3ZWRmMzg3ZjNjOGIwNGZkZi4uZjlhOTI0OTY1MDZiM2U2ZjBlMWVlZDZjZDk3NDAzMmE1NWU4
ZjI3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCkBA
IC0xODgsNiArMTg4LDggQEAgV2ViUHJvY2Vzc1Byb3h5OjpXZWJQcm9jZXNzUHJveHkoV2ViUHJv
Y2Vzc1Bvb2wmIHByb2Nlc3NQb29sLCBXZWJzaXRlRGF0YVN0b3JlKgogICAgIEFTU0VSVF9VTlVT
RUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CiAKICAgICBXZWJQYXN0ZWJvYXJkUHJveHk6
OnNpbmdsZXRvbigpLmFkZFdlYlByb2Nlc3NQcm94eSgqdGhpcyk7CisKKyAgICByZWFkQXBwQm91
bmREb21haW5zKCk7CiB9CiAKIFdlYlByb2Nlc3NQcm94eTo6fldlYlByb2Nlc3NQcm94eSgpCkBA
IC0xNzU5LDYgKzE3NjEsMTcgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OmRpZENyZWF0ZUNvbnRl
eHRJbkdQVVByb2Nlc3NGb3JWaXNpYmlsaXR5UHJvcGFnYXRpb24oTGF5ZXIKIH0KICNlbmRpZgog
Cit2b2lkIFdlYlByb2Nlc3NQcm94eTo6cmVhZEFwcEJvdW5kRG9tYWlucygpCit7CisjaWYgUExB
VEZPUk0oQ09DT0EpCisgICAgYXV0byYgZG9tYWlucyA9IFdlYkNvcmU6OmdldEFwcEJvdW5kRG9t
YWlucygpOworICAgIG1fYXBwQm91bmREb21haW5zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZG9t
YWlucy5zaXplKCkpOworICAgIGZvciAoYXV0byYgZG9tYWluIDogZG9tYWlucykKKyAgICAgICAg
bV9hcHBCb3VuZERvbWFpbnMudW5jaGVja2VkQXBwZW5kKGRvbWFpbik7CisjZW5kaWYKK30KKwor
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI3VuZGVmIE1FU1NBR0VfQ0hFQ0sKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmgKaW5kZXggZTRiNzAwNGI0NWFjYmZiYWJl
NGUxNTM3MjQ0NzQ5ZTFjYTI4YTIxYi4uYzFmYWFhZTc3ODkzNzAwMmI5OGQ2NWFkMGQ5NjI1OWVj
MDRiMWQ0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1By
b3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmgKQEAg
LTM3Niw2ICszNzYsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBncHVQcm9jZXNzQ3Jhc2hlZCgpOwog
I2VuZGlmCiAKKyAgICBWZWN0b3I8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+JiBhcHBCb3Vu
ZERvbWFpbnMoKSB7IHJldHVybiBtX2FwcEJvdW5kRG9tYWluczsgfQorCiBwcm90ZWN0ZWQ6CiAg
ICAgV2ViUHJvY2Vzc1Byb3h5KFdlYlByb2Nlc3NQb29sJiwgV2Vic2l0ZURhdGFTdG9yZSosIElz
UHJld2FybWVkKTsKIApAQCAtNDczLDYgKzQ3NSw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZW5k
TWVzc2FnZVRvV2ViQ29udGV4dFdpdGhSZXBseShVc2VyTWVzc2FnZSYmLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFVzZXJNZXNzYWdlJiYpPiYmKTsKICNlbmRpZgogCisgICAgdm9pZCByZWFkQXBw
Qm91bmREb21haW5zKCk7CisKICAgICBlbnVtIGNsYXNzIElzV2VhayB7IE5vLCBZZXMgfTsKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBXZWFrT3JTdHJvbmdQdHIgewogICAgIHB1Ymxp
YzoKQEAgLTU2OCw2ICs1NzIsOCBAQCBwcml2YXRlOgogICAgIE1lZGlhQ2FwdHVyZVNhbmRib3hF
eHRlbnNpb25zIG1fbWVkaWFDYXB0dXJlU2FuZGJveEV4dGVuc2lvbnMgeyBTYW5kYm94RXh0ZW5z
aW9uVHlwZTo6Tm9uZSB9OwogI2VuZGlmCiAKKyAgICBWZWN0b3I8V2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4+IG1fYXBwQm91bmREb21haW5zOworCiAgICAgc3RydWN0IFNlcnZpY2VXb3JrZXJJ
bmZvcm1hdGlvbiB7CiAgICAgICAgIFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgc2VydmljZVdvcmtl
clBhZ2VQcm94eUlEOwogICAgICAgICBXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBzZXJ2aWNlV29y
a2VyUGFnZUlEOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9n
CmluZGV4IGYxNmRhM2FlNmUxNzk3MGVmN2EwYWRhMTg4NjA0ZWExNmZjOTI3MDcuLjg5YzIyYzlj
ZTU5YzM5MWVjOGQ5MTNjMjIyZDE2YzY1MjgzMjUwZGEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5n
ZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAyMC0wMy0wMyAg
S2F0ZSBDaGVuZXkgIDxrYXRoZXJpbmVfY2hlbmV5QGFwcGxlLmNvbT4KKworICAgICAgICBVSVBy
b2Nlc3MgbmVlZHMgbWVjaGFuaXNtIHRvIHNwZWNpZnkgQXBwQm91bmQgZG9tYWlucworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA4NTI4CisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS81OTk4MDM0MD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGRlZCB0ZXN0IGFwcC1ib3VuZCBkb21haW5zIHRvIFRlc3RX
ZWJLaXRBUEkgcGxpc3QuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL0luZm8ucGxpc3Q6Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbkFwcEJyb3dzZXJQcml2
YWN5Lm1tOgorICAgICAgICAoVEVTVCk6CisKIDIwMjAtMDMtMDMgIEthdGUgQ2hlbmV5ICA8a2F0
aGVyaW5lX2NoZW5leUBhcHBsZS5jb20+CiAKICAgICAgICAgQ2hlY2sgZm9yIG5hdmlnYXRpb24g
dG8gYXBwLWJvdW5kIGRvbWFpbiBkdXJpbmcgc2NyaXB0IGV2YWx1YXRpb24KZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvSW5mby5wbGlzdCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvSW5m
by5wbGlzdAppbmRleCA0MjE2YjZkNzEzM2NmMWFkNzM3ZjhkNjI1YzUzMmFhOTJhMWQ4MTE4Li40
MDhmOTIwMmUzNWJlNjViYzMxZWNhMjk4OGM5NWVhZWVjNGY5YjcxIDEwMDY0NAotLS0gYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL0luZm8ucGxpc3QKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9JbmZv
LnBsaXN0CkBAIC0yLDYgKzIsMTQgQEAKIDwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxl
Ly9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlM
aXN0LTEuMC5kdGQiPgogPHBsaXN0IHZlcnNpb249IjEuMCI+CiA8ZGljdD4KKwk8a2V5PkFwcEJv
dW5kRG9tYWluczwva2V5PgorCTxhcnJheT4KKwkJPHN0cmluZz50ZXN0RG9tYWluMTwvc3RyaW5n
PgorCQk8c3RyaW5nPnRlc3REb21haW4yPC9zdHJpbmc+CisJCTxzdHJpbmc+dGVzdERvbWFpbjM8
L3N0cmluZz4KKwk8L2FycmF5PgorCTxrZXk+dGVzdERvbWFpbjI8L2tleT4KKwk8c3RyaW5nPnRl
c3REb21haW4yPC9zdHJpbmc+CiAJPGtleT5DRkJ1bmRsZU5hbWU8L2tleT4KIAk8c3RyaW5nPiR7
UFJPRFVDVF9OQU1FfTwvc3RyaW5nPgogCTxrZXk+Q0ZCdW5kbGVJZGVudGlmaWVyPC9rZXk+CmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luQXBwQnJv
d3NlclByaXZhY3kubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lu
QXBwQnJvd3NlclByaXZhY3kubW0KaW5kZXggNzllNDUxZTM1NWMyZDg4MTU0NTUxNzkxMjRkNzA3
MTE4ODI3NDA4My4uMTNlYzkzZmIwMTU5ZWQzNjA3ZGY0NjdhYWViZGJhNDViMDA1ZDBiOCAxMDA2
NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbkFwcEJyb3dz
ZXJQcml2YWN5Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
SW5BcHBCcm93c2VyUHJpdmFjeS5tbQpAQCAtMjksNiArMjksOCBAQAogI2ltcG9ydCAiVGVzdE5h
dmlnYXRpb25EZWxlZ2F0ZS5oIgogI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgogI2ltcG9ydCAi
V0tXZWJWaWV3Q29uZmlndXJhdGlvbkV4dHJhcy5oIgorI2ltcG9ydCA8V2ViQ29yZS9SZWdpc3Ry
YWJsZURvbWFpbi5oPgorI2ltcG9ydCA8V2ViQ29yZS9SdW50aW1lQXBwbGljYXRpb25DaGVja3Mu
aD4KICNpbXBvcnQgPFdlYktpdC9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2Vi
S2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oPgogI2ltcG9ydCA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CkBAIC0xNzYsMyArMTc4LDE0IEBAIFRFU1QoV2ViS2l0LCBTd2FwQmFja1Rv
QXBwQm91bmRSZWplY3RzVXNlclNjcmlwdCkKIH0KIAogI2VuZGlmIC8vIFVTRShBUFBMRV9JTlRF
Uk5BTF9TREspCisKK1RFU1QoV2ViS2l0LCBBcHBCb3VuZERvbWFpbnMpCit7CisgICAgc3RhdGlj
IFZlY3RvcjxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4gZG9tYWluc1RvQ29tcGFyZSB7IFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVE
b21haW5TdHJpbmcoInRlc3REb21haW4xIiksIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOjp1
bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoInRlc3REb21haW4yIiks
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFi
bGVEb21haW5TdHJpbmcoInRlc3REb21haW4zIil9OworICAgIAorICAgIGF1dG8mIGRvbWFpbnMg
PSBXZWJDb3JlOjpnZXRBcHBCb3VuZERvbWFpbnMoKTsKKyAgICBFWFBFQ1RfRVEoZG9tYWlucy5z
aXplKCksIGRvbWFpbnNUb0NvbXBhcmUuc2l6ZSgpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgZG9tYWlucy5zaXplKCk7IGkrKykKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKGRvbWFp
bnMuYXQoaSkuc3RyaW5nKCksIGRvbWFpbnNUb0NvbXBhcmUuYXQoaSkuc3RyaW5nKCkpOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392753</attachid>
            <date>2020-03-06 12:20:00 -0800</date>
            <delta_ts>2020-03-06 15:19:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-208528-20200306122000.patch</filename>
            <type>text/plain</type>
            <size>33808</size>
            <attacher name="Kate Cheney">katherine_cheney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU3OTk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDUzMTgzZGIyMGYzZjQ1MTY2
OWIyZGQ2MzA0ZDYyZTVmY2ZjNTEwMmEuLjgwMjkzMGZjYTU4ODU5NzI3NWQxZDk5YmU4NjQxM2Y2
MjY3NTE4YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjAgQEAKKzIwMjAtMDMtMDYgIEthdGUgQ2hl
bmV5ICA8a2F0aGVyaW5lX2NoZW5leUBhcHBsZS5jb20+CisKKyAgICAgICAgVUlQcm9jZXNzIG5l
ZWRzIG1lY2hhbmlzbSB0byBzcGVjaWZ5IEFwcEJvdW5kIGRvbWFpbnMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODUyOAorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNTk5ODAzNDA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkcyBmdW5jdGlvbmFsaXR5IHRvIHJlYWQgYXBwLWJvdW5kIGRvbWFpbnMg
ZnJvbSB0aGUgSW5mby5wbGlzdCBvbgorICAgICAgICBiYWNrZ3JvdW5kIHRocmVhZCB2aWEgdGhl
IFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eSBhbmQgcmVwb3J0IHRvCisgICAgICAgIHRoZSBV
SSBwcm9jZXNzIHdoZXRoZXIgYSBkb21haW4gaXMgYXBwLWJvdW5kLiAKKworICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tOgorICAgICAgICAoLVtXS1dl
YnNpdGVEYXRhU3RvcmUgX2dldEFwcEJvdW5kRG9tYWluczpdKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaDoKKyAgICAgICAgVGVzdCBB
UEkgY2FsbCB0byBnZXQgYXBwQm91bmREb21haW5zLgorCisgICAgICAgICogVUlQcm9jZXNzL1dl
YkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1l
UG9saWN5TGlzdGVuZXJQcm94eTo6V2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5OjpkaWRSZWNlaXZlQXBwQm91
bmREb21haW5SZXN1bHQpOgorICAgICAgICAoV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5Ojpk
aWRSZWNlaXZlU2FmZUJyb3dzaW5nUmVzdWx0cyk6CisgICAgICAgIChXZWJGcmFtZVBvbGljeUxp
c3RlbmVyUHJveHk6OnVzZSk6CisgICAgICAgIChXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHk6
OmRvd25sb2FkKToKKyAgICAgICAgKFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eTo6aWdub3Jl
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5Lmg6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eTo6Y3JlYXRlKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViRnJhbWVQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YkZyYW1lUHJveHk6OnNldFVwUG9saWN5TGlzdGVuZXJQcm94eSk6CisgICAgICAgICogVUlQcm9j
ZXNzL1dlYkZyYW1lUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cDoKKyAgICAgICAgQWRkZWQgYSBuZXcgZnVuY3Rpb24gdG8gV2ViRnJhbWVQb2xpY3lMaXN0ZW5l
clByb3h5IHRvIHdhaXQgZm9yIHRoZQorICAgICAgICBhcHAtYm91bmQgZG9tYWlucyB0byBiZSBy
ZWFkIGJlZm9yZSBjb21wbGV0aW5nIGEgbmF2aWdhdGlvbi4gRWFjaAorICAgICAgICBvdGhlciBm
dW5jdGlvbiBtdXN0IG5vdyBjaGVjayBpZiBtX2lzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4g
aGFzCisgICAgICAgIGJlZW4gc2V0IGJlZm9yZSBzZW5kaW5nIGEgZnVsbCByZXBseS4gQWxzbyBh
ZGRlZCBhbiBlbnVtIGNsYXNzCisgICAgICAgIFNob3VsZEV4cGVjdEFwcEJvdW5kRG9tYWluUmVz
dWx0IHRvIHRlbGwgdGhlIGxpc3RlbmVyIG5vdCB0byB3YWl0IGZvcgorICAgICAgICB0aGUgcmVz
dWx0cyBpbiB1bmVjZXNzYXJ5IGNhc2VzLgorCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6aXNBcHBCb3VuZERvbWFpbiBjb25zdCk6IERlbGV0ZWQKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZVByb3h5OjpzZXRJc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKToKKyAg
ICAgICAgQWZ0ZXIgdGhlIGxpc3RlbmVyIHJlc3BvbmRzIHdpdGggdGhlIHJlc3VsdHMsIHNldCB0
aGUgbmV3CisgICAgICAgIHZhbHVlIGluIFdlYlBhZ2VQcm94eS4gV2Ugbm8gbG9uZ2VyIG5lZWQg
dG8gY2hlY2sgZm9yIGlzQXBwQm91bmQKKyAgICAgICAgZG9tYWluIG5vdyB0aGF0IHdlIGhhdmUg
cmVjZWl2ZWQgdGhlIHZhbHVlLgorCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGVj
aWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5OjpkZWNpZGVQb2xpY3lGb3JSZXNwb25zZVNoYXJlZCk6CisgICAgICAgIE5vIG5lZWQgdG8g
bGlzdGVuIGZvciBhcHAtYm91bmQgZG9tYWluIHJlc3BvbnNlIGhlcmUuCisKKyAgICAgICAgKiBV
SVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRh
L0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6YXBwQm91
bmREb21haW5zKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6YmVnaW5BcHBC
b3VuZERvbWFpbkNoZWNrKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Z2V0
QXBwQm91bmREb21haW5zRm9yVGVzdGluZyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL1dlYnNpdGVEYXRhU3RvcmUuaDoKKyAgICAgICAgUmVhZCB0aGUgYXBwLWJvdW5kIGRvbWFp
biBsaXN0IG9uIHRoZSBiYWNrZ3JvdW5kIHRocmVhZCwgYW5kIG9uY2UKKyAgICAgICAgZG9uZSwg
Y2FsbCB0aGUgbGlzdGVuZXIgb24gdGhlIG1haW4gdGhyZWFkLgorCiAyMDIwLTAzLTA1ICBLYXRl
IENoZW5leSAgPGthdGhlcmluZV9jaGVuZXlAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCB3ZWIg
cGFnZSBhZGRpdGlvbnMgdG8gV2ViUGFnZVByb3h5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbQppbmRleCA4NWFhZjdk
Njc5MTE1OTRiMDY1M2UzMjNhYmNhNjNjMTI0ZjhmODhhLi4yMWVkZGE1ZWMwMDI3MmYzZmZkMjVl
MzgyYWM0OTg2MjM5ODkxNTM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0KQEAgLTYwMCw0ICs2MDAsMTcgQEAg
LSAoX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gKilfY29uZmlndXJhdGlvbgogICAg
IHJldHVybiB3cmFwcGVyKF93ZWJzaXRlRGF0YVN0b3JlLT5jb25maWd1cmF0aW9uKCkuY29weSgp
KTsKIH0KIAorLSAodm9pZClfZ2V0QXBwQm91bmREb21haW5zOih2b2lkICheKShOU0FycmF5PE5T
U3RyaW5nICo+ICopKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgYXV0byBjb21wbGV0aW9uSGFu
ZGxlckNvcHkgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpOworICAgIF93ZWJzaXRl
RGF0YVN0b3JlLT5nZXRBcHBCb3VuZERvbWFpbnNGb3JUZXN0aW5nKFtjb21wbGV0aW9uSGFuZGxl
ckNvcHldKGF1dG8gZG9tYWlucykgeworICAgICAgICBWZWN0b3I8UmVmUHRyPEFQSTo6T2JqZWN0
Pj4gYXBpRG9tYWluczsKKyAgICAgICAgYXBpRG9tYWlucy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KGRvbWFpbnMuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChhdXRvJiBkb21haW4gOiBkb21haW5zKQor
ICAgICAgICAgICAgYXBpRG9tYWlucy51bmNoZWNrZWRBcHBlbmQoQVBJOjpTdHJpbmc6OmNyZWF0
ZShkb21haW4uc3RyaW5nKCkpKTsKKworICAgICAgICBjb21wbGV0aW9uSGFuZGxlckNvcHkod3Jh
cHBlcihBUEk6OkFycmF5OjpjcmVhdGUoV1RGTW92ZShhcGlEb21haW5zKSkpKTsKKyAgICB9KTsK
K30KKwogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgKaW5kZXggOWUwZWUyYjA5MTZhZTlj
NjQ1N2RjMDk1MmExYjQwYWM4ODc3MzhhMi4uNDkxZTliZTBjODYwOTQ1ODFlMGJiNGZmNDNhMDQz
NjEyZjJkY2U1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oCkBAIC03Nyw2ICs3Nyw3IEBA
IHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBfV0tXZWJzaXRlRGF0YVN0b3JlRmV0Y2hP
cHRpb25zKSB7CiAtICh2b2lkKV9jbGVhclJlc291cmNlTG9hZFN0YXRpc3RpY3M6KHZvaWQgKF4p
KHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RC
QSksIGlvcyhXS19JT1NfVEJBKSk7CiAtICh2b2lkKV9pc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNl
VW5kZXJGaXJzdFBhcnR5OihOU1VSTCAqKWZpcnN0UGFydHlVUkwgdGhpcmRQYXJ0eTooTlNVUkwg
Kil0aGlyZFBhcnR5VVJMIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShCT09MKSljb21wbGV0
aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9T
X1RCQSkpOwogLSAodm9pZClfcHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3Jkczoodm9pZCAo
Xikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSks
IGlvcygxMy4wKSk7CistICh2b2lkKV9nZXRBcHBCb3VuZERvbWFpbnM6KHZvaWQgKF4pKE5TQXJy
YXk8TlNTdHJpbmcgKj4gKikpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNv
cyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKIAogQHByb3BlcnR5IChudWxsYWJsZSwg
bm9uYXRvbWljLCB3ZWFrKSBpZCA8X1dLV2Vic2l0ZURhdGFTdG9yZURlbGVnYXRlPiBfZGVsZWdh
dGUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CiBAcHJvcGVydHkg
KG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkpIF9XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0
aW9uICpfY29uZmlndXJhdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkuY3BwCmluZGV4IGE1ZmFmM2ZkNWU0YjVmZjJh
ZmE3ODM1ZWFmOTZhNDFlM2ZmNGFhM2IuLjNhYmIzYmIyMmZlYTZkZDZmNTYwZDg0NmZjOGIxNmQx
NmZjNDBmNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkZyYW1lUG9s
aWN5TGlzdGVuZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViRnJh
bWVQb2xpY3lMaXN0ZW5lclByb3h5LmNwcApAQCAtMzUsMzAgKzM1LDQ1IEBACiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogCi1XZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHk6OldlYkZyYW1lUG9saWN5
TGlzdGVuZXJQcm94eShSZXBseSYmIHJlcGx5LCBTaG91bGRFeHBlY3RTYWZlQnJvd3NpbmdSZXN1
bHQgZXhwZWN0KQorV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5OjpXZWJGcmFtZVBvbGljeUxp
c3RlbmVyUHJveHkoUmVwbHkmJiByZXBseSwgU2hvdWxkRXhwZWN0U2FmZUJyb3dzaW5nUmVzdWx0
IGV4cGVjdFNhZmVCcm93c2luZ1Jlc3VsdCwgU2hvdWxkRXhwZWN0QXBwQm91bmREb21haW5SZXN1
bHQgZXhwZWN0QXBwQm91bmREb21haW5SZXN1bHQpCiAgICAgOiBtX3JlcGx5KFdURk1vdmUocmVw
bHkpKQogewotICAgIGlmIChleHBlY3QgPT0gU2hvdWxkRXhwZWN0U2FmZUJyb3dzaW5nUmVzdWx0
OjpObykKKyAgICBpZiAoZXhwZWN0U2FmZUJyb3dzaW5nUmVzdWx0ID09IFNob3VsZEV4cGVjdFNh
ZmVCcm93c2luZ1Jlc3VsdDo6Tm8pCiAgICAgICAgIGRpZFJlY2VpdmVTYWZlQnJvd3NpbmdSZXN1
bHRzKHsgfSk7CisgICAgaWYgKGV4cGVjdEFwcEJvdW5kRG9tYWluUmVzdWx0ID09IFNob3VsZEV4
cGVjdEFwcEJvdW5kRG9tYWluUmVzdWx0OjpObykKKyAgICAgICAgZGlkUmVjZWl2ZUFwcEJvdW5k
RG9tYWluUmVzdWx0KHsgfSk7CiB9CiAKIFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eTo6fldl
YkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eSgpID0gZGVmYXVsdDsKIAordm9pZCBXZWJGcmFtZVBv
bGljeUxpc3RlbmVyUHJveHk6OmRpZFJlY2VpdmVBcHBCb3VuZERvbWFpblJlc3VsdChib29sIGlz
TmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4pCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKKworICAgIGF1dG8gaXNBcHBCb3VuZCA9IGlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4g
PyBOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbjo6WWVzIDogTmF2aWdhdGluZ1RvQXBwQm91bmRE
b21haW46Ok5vOworICAgIGlmIChtX3BvbGljeVJlc3VsdCAmJiBtX3NhZmVCcm93c2luZ1dhcm5p
bmcpIHsKKyAgICAgICAgaWYgKG1fcmVwbHkpCisgICAgICAgICAgICBtX3JlcGx5KFdlYkNvcmU6
OlBvbGljeUFjdGlvbjo6VXNlLCBtX3BvbGljeVJlc3VsdC0+Zmlyc3QuZ2V0KCksIG1fcG9saWN5
UmVzdWx0LT5zZWNvbmQsIFdURk1vdmUoKm1fc2FmZUJyb3dzaW5nV2FybmluZyksIGlzQXBwQm91
bmQpOworICAgIH0gZWxzZQorICAgICAgICBtX2lzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4g
PSBpc0FwcEJvdW5kOworfQorCiB2b2lkIFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eTo6ZGlk
UmVjZWl2ZVNhZmVCcm93c2luZ1Jlc3VsdHMoUmVmUHRyPFNhZmVCcm93c2luZ1dhcm5pbmc+JiYg
c2FmZUJyb3dzaW5nV2FybmluZykKIHsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAg
IEFTU0VSVCghbV9zYWZlQnJvd3NpbmdXYXJuaW5nKTsKLSAgICBpZiAobV9wb2xpY3lSZXN1bHQp
IHsKKyAgICBpZiAobV9wb2xpY3lSZXN1bHQgJiYgbV9pc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9t
YWluKSB7CiAgICAgICAgIGlmIChtX3JlcGx5KQotICAgICAgICAgICAgbV9yZXBseShXZWJDb3Jl
OjpQb2xpY3lBY3Rpb246OlVzZSwgbV9wb2xpY3lSZXN1bHQtPmZpcnN0LmdldCgpLCBtX3BvbGlj
eVJlc3VsdC0+c2Vjb25kLCBXVEZNb3ZlKHNhZmVCcm93c2luZ1dhcm5pbmcpKTsKKyAgICAgICAg
ICAgIG1fcmVwbHkoV2ViQ29yZTo6UG9saWN5QWN0aW9uOjpVc2UsIG1fcG9saWN5UmVzdWx0LT5m
aXJzdC5nZXQoKSwgbV9wb2xpY3lSZXN1bHQtPnNlY29uZCwgV1RGTW92ZShzYWZlQnJvd3NpbmdX
YXJuaW5nKSwgKm1faXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbik7CiAgICAgfSBlbHNlCiAg
ICAgICAgIG1fc2FmZUJyb3dzaW5nV2FybmluZyA9IFdURk1vdmUoc2FmZUJyb3dzaW5nV2Fybmlu
Zyk7CiB9CiAKIHZvaWQgV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5Ojp1c2UoQVBJOjpXZWJz
aXRlUG9saWNpZXMqIHBvbGljaWVzLCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50IHByb2Nl
c3NTd2FwUmVxdWVzdGVkQnlDbGllbnQpCiB7Ci0gICAgaWYgKG1fc2FmZUJyb3dzaW5nV2Fybmlu
ZykgeworICAgIGlmIChtX3NhZmVCcm93c2luZ1dhcm5pbmcgJiYgbV9pc05hdmlnYXRpbmdUb0Fw
cEJvdW5kRG9tYWluKSB7CiAgICAgICAgIGlmIChtX3JlcGx5KQotICAgICAgICAgICAgbV9yZXBs
eShXZWJDb3JlOjpQb2xpY3lBY3Rpb246OlVzZSwgcG9saWNpZXMsIHByb2Nlc3NTd2FwUmVxdWVz
dGVkQnlDbGllbnQsIFdURk1vdmUoKm1fc2FmZUJyb3dzaW5nV2FybmluZykpOworICAgICAgICAg
ICAgbV9yZXBseShXZWJDb3JlOjpQb2xpY3lBY3Rpb246OlVzZSwgcG9saWNpZXMsIHByb2Nlc3NT
d2FwUmVxdWVzdGVkQnlDbGllbnQsIFdURk1vdmUoKm1fc2FmZUJyb3dzaW5nV2FybmluZyksICpt
X2lzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4pOwogICAgIH0gZWxzZSBpZiAoIW1fcG9saWN5
UmVzdWx0KQogICAgICAgICBtX3BvbGljeVJlc3VsdCA9IHt7IHBvbGljaWVzLCBwcm9jZXNzU3dh
cFJlcXVlc3RlZEJ5Q2xpZW50IH19OwogfQpAQCAtNjYsMTMgKzgxLDEzIEBAIHZvaWQgV2ViRnJh
bWVQb2xpY3lMaXN0ZW5lclByb3h5Ojp1c2UoQVBJOjpXZWJzaXRlUG9saWNpZXMqIHBvbGljaWVz
LCBQcm9jZXNzU3dhCiB2b2lkIFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eTo6ZG93bmxvYWQo
KQogewogICAgIGlmIChtX3JlcGx5KQotICAgICAgICBtX3JlcGx5KFdlYkNvcmU6OlBvbGljeUFj
dGlvbjo6RG93bmxvYWQsIG51bGxwdHIsIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQ6Ok5v
LCB7IH0pOworICAgICAgICBtX3JlcGx5KFdlYkNvcmU6OlBvbGljeUFjdGlvbjo6RG93bmxvYWQs
IG51bGxwdHIsIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQ6Ok5vLCB7IH0sIHsgfSk7CiB9
CiAKIHZvaWQgV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5OjppZ25vcmUoKQogewogICAgIGlm
IChtX3JlcGx5KQotICAgICAgICBtX3JlcGx5KFdlYkNvcmU6OlBvbGljeUFjdGlvbjo6SWdub3Jl
LCBudWxscHRyLCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50OjpObywgeyB9KTsKKyAgICAg
ICAgbV9yZXBseShXZWJDb3JlOjpQb2xpY3lBY3Rpb246Oklnbm9yZSwgbnVsbHB0ciwgUHJvY2Vz
c1N3YXBSZXF1ZXN0ZWRCeUNsaWVudDo6Tm8sIHsgfSwgeyB9KTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJGcmFtZVBv
bGljeUxpc3RlbmVyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkZyYW1lUG9s
aWN5TGlzdGVuZXJQcm94eS5oCmluZGV4IDlhNmJlOTlkNDA3M2VlMTA4YjRjYjIwZjcyMWMxMDhm
N2MwMTg4ZTkuLmExNjM4MDgxOGQzMzFkZDgwNTFiYjEzNTc2ZTMyMWI0ZGYwYzdkYzYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94
eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkZyYW1lUG9saWN5TGlzdGVuZXJQ
cm94eS5oCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkFQSU9i
amVjdC5oIgorI2luY2x1ZGUgIlBvbGljeURlY2lzaW9uLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9G
cmFtZUxvYWRlclR5cGVzLmg+CiAjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNDAsMTQgKzQxLDE1IEBAIGNsYXNzIFNhZmVCcm93
c2luZ1dhcm5pbmc7CiAKIGVudW0gY2xhc3MgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCB7
IE5vLCBZZXMgfTsKIGVudW0gY2xhc3MgU2hvdWxkRXhwZWN0U2FmZUJyb3dzaW5nUmVzdWx0IHsg
Tm8sIFllcyB9OworZW51bSBjbGFzcyBTaG91bGRFeHBlY3RBcHBCb3VuZERvbWFpblJlc3VsdCB7
IE5vLCBZZXMgfTsKIAogY2xhc3MgV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5IDogcHVibGlj
IEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6RnJhbWVQb2xpY3lMaXN0ZW5lcj4g
ewogcHVibGljOgogCi0gICAgdXNpbmcgUmVwbHkgPSBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdl
YkNvcmU6OlBvbGljeUFjdGlvbiwgQVBJOjpXZWJzaXRlUG9saWNpZXMqLCBQcm9jZXNzU3dhcFJl
cXVlc3RlZEJ5Q2xpZW50LCBSZWZQdHI8U2FmZUJyb3dzaW5nV2FybmluZz4mJik+OwotICAgIHN0
YXRpYyBSZWY8V2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5PiBjcmVhdGUoUmVwbHkmJiByZXBs
eSwgU2hvdWxkRXhwZWN0U2FmZUJyb3dzaW5nUmVzdWx0IGV4cGVjdCkKKyAgICB1c2luZyBSZXBs
eSA9IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6UG9saWN5QWN0aW9uLCBBUEk6Oldl
YnNpdGVQb2xpY2llcyosIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIFJlZlB0cjxTYWZl
QnJvd3NpbmdXYXJuaW5nPiYmLCBOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbik+OworICAgIHN0
YXRpYyBSZWY8V2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5PiBjcmVhdGUoUmVwbHkmJiByZXBs
eSwgU2hvdWxkRXhwZWN0U2FmZUJyb3dzaW5nUmVzdWx0IGV4cGVjdFNhZmVCcm93c2luZ1Jlc3Vs
dCwgU2hvdWxkRXhwZWN0QXBwQm91bmREb21haW5SZXN1bHQgZXhwZWN0QXBwQm91bmREb21haW5S
ZXN1bHQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJGcmFtZVBvbGlj
eUxpc3RlbmVyUHJveHkoV1RGTW92ZShyZXBseSksIGV4cGVjdCkpOworICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkoV1RGTW92ZShyZXBseSks
IGV4cGVjdFNhZmVCcm93c2luZ1Jlc3VsdCwgZXhwZWN0QXBwQm91bmREb21haW5SZXN1bHQpKTsK
ICAgICB9CiAgICAgfldlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eSgpOwogCkBAIC01NiwxMiAr
NTgsMTQgQEAgcHVibGljOgogICAgIHZvaWQgaWdub3JlKCk7CiAgICAgCiAgICAgdm9pZCBkaWRS
ZWNlaXZlU2FmZUJyb3dzaW5nUmVzdWx0cyhSZWZQdHI8U2FmZUJyb3dzaW5nV2FybmluZz4mJik7
CisgICAgdm9pZCBkaWRSZWNlaXZlQXBwQm91bmREb21haW5SZXN1bHQoYm9vbCk7CiAKIHByaXZh
dGU6Ci0gICAgV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5KFJlcGx5JiYsIFNob3VsZEV4cGVj
dFNhZmVCcm93c2luZ1Jlc3VsdCk7CisgICAgV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5KFJl
cGx5JiYsIFNob3VsZEV4cGVjdFNhZmVCcm93c2luZ1Jlc3VsdCwgU2hvdWxkRXhwZWN0QXBwQm91
bmREb21haW5SZXN1bHQpOwogCiAgICAgT3B0aW9uYWw8c3RkOjpwYWlyPFJlZlB0cjxBUEk6Oldl
YnNpdGVQb2xpY2llcz4sIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQ+PiBtX3BvbGljeVJl
c3VsdDsKICAgICBPcHRpb25hbDxSZWZQdHI8U2FmZUJyb3dzaW5nV2FybmluZz4+IG1fc2FmZUJy
b3dzaW5nV2FybmluZzsKKyAgICBPcHRpb25hbDxOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbj4g
bV9pc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluOwogICAgIFJlcGx5IG1fcmVwbHk7CiB9Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJGcmFtZVByb3h5LmNwcCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkZyYW1lUHJveHkuY3BwCmluZGV4IDRkMzJmMDM1
ZjBhNDJkOWNiNmQzYzlkYmM2ZjQyMDkwYzNkYjIyMzUuLjM0NmMwODA1N2UyYjEyZjA2NWIwNDkx
MmQ4ZGYyYzg2MzJiMDk3NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YkZyYW1lUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkZyYW1lUHJv
eHkuY3BwCkBAIC0xOTMsMTQgKzE5MywxNCBAQCB2b2lkIFdlYkZyYW1lUHJveHk6OmRpZENoYW5n
ZVRpdGxlKGNvbnN0IFN0cmluZyYgdGl0bGUpCiAgICAgbV90aXRsZSA9IHRpdGxlOwogfQogCi1X
ZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkmIFdlYkZyYW1lUHJveHk6OnNldFVwUG9saWN5TGlz
dGVuZXJQcm94eShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFBvbGljeUFjdGlvbiwgQVBJOjpXZWJz
aXRlUG9saWNpZXMqLCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBSZWZQdHI8U2FmZUJy
b3dzaW5nV2FybmluZz4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIsIFNob3VsZEV4cGVjdFNhZmVC
cm93c2luZ1Jlc3VsdCBleHBlY3QpCitXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkmIFdlYkZy
YW1lUHJveHk6OnNldFVwUG9saWN5TGlzdGVuZXJQcm94eShDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFBvbGljeUFjdGlvbiwgQVBJOjpXZWJzaXRlUG9saWNpZXMqLCBQcm9jZXNzU3dhcFJlcXVlc3Rl
ZEJ5Q2xpZW50LCBSZWZQdHI8U2FmZUJyb3dzaW5nV2FybmluZz4mJiwgTmF2aWdhdGluZ1RvQXBw
Qm91bmREb21haW4pPiYmIGNvbXBsZXRpb25IYW5kbGVyLCBTaG91bGRFeHBlY3RTYWZlQnJvd3Np
bmdSZXN1bHQgZXhwZWN0U2FmZUJyb3dzaW5nUmVzdWx0LCBTaG91bGRFeHBlY3RBcHBCb3VuZERv
bWFpblJlc3VsdCBleHBlY3RBcHBCb3VuZERvbWFpblJlc3VsdCkKIHsKICAgICBpZiAobV9hY3Rp
dmVMaXN0ZW5lcikKICAgICAgICAgbV9hY3RpdmVMaXN0ZW5lci0+aWdub3JlKCk7Ci0gICAgbV9h
Y3RpdmVMaXN0ZW5lciA9IFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eTo6Y3JlYXRlKFt0aGlz
LCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildIChQb2xpY3lBY3Rpb24gYWN0aW9uLCBBUEk6OldlYnNp
dGVQb2xpY2llcyogcG9saWNpZXMsIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQgcHJvY2Vz
c1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgUmVmUHRyPFNhZmVCcm93c2luZ1dhcm5pbmc+JiYgc2Fm
ZUJyb3dzaW5nV2FybmluZykgbXV0YWJsZSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGFj
dGlvbiwgcG9saWNpZXMsIHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIFdURk1vdmUoc2Fm
ZUJyb3dzaW5nV2FybmluZykpOworICAgIG1fYWN0aXZlTGlzdGVuZXIgPSBXZWJGcmFtZVBvbGlj
eUxpc3RlbmVyUHJveHk6OmNyZWF0ZShbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoUG9s
aWN5QWN0aW9uIGFjdGlvbiwgQVBJOjpXZWJzaXRlUG9saWNpZXMqIHBvbGljaWVzLCBQcm9jZXNz
U3dhcFJlcXVlc3RlZEJ5Q2xpZW50IHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIFJlZlB0
cjxTYWZlQnJvd3NpbmdXYXJuaW5nPiYmIHNhZmVCcm93c2luZ1dhcm5pbmcsIE5hdmlnYXRpbmdU
b0FwcEJvdW5kRG9tYWluIGlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4pIG11dGFibGUgewor
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihhY3Rpb24sIHBvbGljaWVzLCBwcm9jZXNzU3dhcFJl
cXVlc3RlZEJ5Q2xpZW50LCBXVEZNb3ZlKHNhZmVCcm93c2luZ1dhcm5pbmcpLCBpc05hdmlnYXRp
bmdUb0FwcEJvdW5kRG9tYWluKTsKICAgICAgICAgbV9hY3RpdmVMaXN0ZW5lciA9IG51bGxwdHI7
Ci0gICAgfSwgZXhwZWN0KTsKKyAgICB9LCBleHBlY3RTYWZlQnJvd3NpbmdSZXN1bHQsIGV4cGVj
dEFwcEJvdW5kRG9tYWluUmVzdWx0KTsKICAgICByZXR1cm4gKm1fYWN0aXZlTGlzdGVuZXI7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkZyYW1lUHJveHkuaCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkZyYW1lUHJveHkuaAppbmRleCBiZjZkODk2ZDg3
Yjc2MjY1MTEzOGZjMjk4NGYyNTk3MTIwZDMxZjRmLi40NmZjN2ZiODU3MDk0ZGIwZjQwZmEzMGRm
Mzg2NmRlZGJhZGRjOTA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJG
cmFtZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViRnJhbWVQcm94eS5o
CkBAIC0xMjAsNyArMTIwLDcgQEAgcHVibGljOgogICAgIHZvaWQgZGlkU2FtZURvY3VtZW50TmF2
aWdhdGlvbihjb25zdCBVUkwmKTsgLy8gZWcuIGFuY2hvciBuYXZpZ2F0aW9uLCBzZXNzaW9uIHN0
YXRlIGNoYW5nZS4KICAgICB2b2lkIGRpZENoYW5nZVRpdGxlKGNvbnN0IFN0cmluZyYpOwogCi0g
ICAgV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5JiBzZXRVcFBvbGljeUxpc3RlbmVyUHJveHko
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpQb2xpY3lBY3Rpb24sIEFQSTo6V2Vic2l0
ZVBvbGljaWVzKiwgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgUmVmUHRyPFNhZmVCcm93
c2luZ1dhcm5pbmc+JiYpPiYmLCBTaG91bGRFeHBlY3RTYWZlQnJvd3NpbmdSZXN1bHQpOworICAg
IFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eSYgc2V0VXBQb2xpY3lMaXN0ZW5lclByb3h5KENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6UG9saWN5QWN0aW9uLCBBUEk6OldlYnNpdGVQ
b2xpY2llcyosIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIFJlZlB0cjxTYWZlQnJvd3Np
bmdXYXJuaW5nPiYmLCBOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbik+JiYsIFNob3VsZEV4cGVj
dFNhZmVCcm93c2luZ1Jlc3VsdCwgU2hvdWxkRXhwZWN0QXBwQm91bmREb21haW5SZXN1bHQpOwog
CiAjaWYgRU5BQkxFKENPTlRFTlRfRklMVEVSSU5HKQogICAgIHZvaWQgY29udGVudEZpbHRlckRp
ZEJsb2NrTG9hZChXZWJDb3JlOjpDb250ZW50RmlsdGVyVW5ibG9ja0hhbmRsZXIgY29udGVudEZp
bHRlclVuYmxvY2tIYW5kbGVyKSB7IG1fY29udGVudEZpbHRlclVuYmxvY2tIYW5kbGVyID0gV1RG
TW92ZShjb250ZW50RmlsdGVyVW5ibG9ja0hhbmRsZXIpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCAyODc5ZWJhOGNlNWFmNzU3YTNiMGE4MDJiMDliOTcx
ZWE1MjM2NGIwLi44ZDcwYzRhZjU4ZDEwZDViZjRlYzdjYTQzMDQwMjA2MjA5ZGVjZTkxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTI3OSw3ICsyNzksNiBA
QAogI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCiAjaW5jbHVkZSA8V2ViS2l0QWRkaXRpb25z
L1dlYlBhZ2VQcm94eUFkZGl0aW9ucy5oPgogI2Vsc2UKLSNkZWZpbmUgV0VCX1BBR0VfUFJPWFlf
QURESVRJT05TX0lTQVBQQk9VTkRET01BSU4KICNkZWZpbmUgV0VCX1BBR0VfUFJPWFlfQURESVRJ
T05TX1NFVElTTkFWSUdBVElOR1RPQVBQQk9VTkRET01BSU4KICNlbmRpZgogCkBAIC0zMDk1LDIz
ICszMDk0LDExIEBAIHByaXZhdGU6CiAgICAgUG9saWN5Q2hlY2tJZGVudGlmaWVyIG1faWRlbnRp
ZmllcjsKIH07CiAKLQotYm9vbCBXZWJQYWdlUHJveHk6OmlzQXBwQm91bmREb21haW4oY29uc3Qg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikgY29uc3QKLXsKLSAgICBXRUJfUEFH
RV9QUk9YWV9BRERJVElPTlNfSVNBUFBCT1VORERPTUFJTgotICAgIHJldHVybiB0cnVlOwotfQot
Ci1ib29sIFdlYlBhZ2VQcm94eTo6aXNBcHBCb3VuZERvbWFpbihjb25zdCBVUkwmIHVybCkgY29u
c3QKLXsKLSAgICByZXR1cm4gaXNBcHBCb3VuZERvbWFpbihSZWdpc3RyYWJsZURvbWFpbih1cmwp
KTsKLX0KLQotdm9pZCBXZWJQYWdlUHJveHk6OnNldElzTmF2aWdhdGluZ1RvQXBwQm91bmREb21h
aW4oYm9vbCBpc01haW5GcmFtZSwgY29uc3QgVVJMJiByZXF1ZXN0VVJMKQordm9pZCBXZWJQYWdl
UHJveHk6OnNldElzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4oYm9vbCBpc01haW5GcmFtZSwg
Y29uc3QgVVJMJiByZXF1ZXN0VVJMLCBOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiBpc05hdmln
YXRpbmdUb0FwcEJvdW5kRG9tYWluKQogewogICAgIGlmIChtX3ByZWZlcmVuY2VzLT5pc0luQXBw
QnJvd3NlclByaXZhY3lFbmFibGVkKCkgJiYgaXNNYWluRnJhbWUpIHsKICAgICAgICAgV0VCX1BB
R0VfUFJPWFlfQURESVRJT05TX1NFVElTTkFWSUdBVElOR1RPQVBQQk9VTkRET01BSU4KLSAgICAg
ICAgaWYgKCFpc0FwcEJvdW5kRG9tYWluKHJlcXVlc3RVUkwpKSB7CisgICAgICAgIGlmIChpc05h
dmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluID09IE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluOjpO
bykgewogICAgICAgICAgICAgbV9jb25maWd1cmF0aW9uLT5zZXRXZWJWaWV3Q2F0ZWdvcnkoV2Vi
Vmlld0NhdGVnb3J5OjpJbkFwcEJyb3dzZXIpOwogICAgICAgICAgICAgbV9pc05hdmlnYXRpbmdU
b0FwcEJvdW5kRG9tYWluID0gTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW46Ok5vOwogICAgICAg
ICAgICAgbV9oYXNOYXZpZ2F0ZWRBd2F5RnJvbUFwcEJvdW5kRG9tYWluID0gTmF2aWdhdGVkQXdh
eUZyb21BcHBCb3VuZERvbWFpbjo6WWVzOwpAQCAtNTAxMyw4ICs1MDAwLDYgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oUmVmPFdlYlByb2Nlc3NQ
cm94eT4mJiBwcm9jZXMKICAgICBpZiAobmF2aWdhdGlvbklEICYmICFmcm9tQVBJKQogICAgICAg
ICBtX3BhZ2VMb2FkU3RhdGUuY2xlYXJQZW5kaW5nQVBJUmVxdWVzdCh0cmFuc2FjdGlvbik7CiAK
LSAgICBzZXRJc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKGZyYW1lLmlzTWFpbkZyYW1lKCks
IHJlcXVlc3QudXJsKCkpOwotCiAgICAgaWYgKCFjaGVja1VSTFJlY2VpdmVkRnJvbUN1cnJlbnRP
clByZXZpb3VzV2ViUHJvY2Vzcyhwcm9jZXNzLCByZXF1ZXN0LnVybCgpKSkgewogICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKFByb2Nlc3MsICJJZ25vcmluZyByZXF1ZXN0IHRv
IGxvYWQgdGhpcyBtYWluIHJlc291cmNlIGJlY2F1c2UgaXQgaXMgb3V0c2lkZSB0aGUgc2FuZGJv
eCIpOwogICAgICAgICBzZW5kZXItPnNlbmQoUG9saWN5RGVjaXNpb24geyBzZW5kZXItPmlkZW50
aWZpZXIoKSwgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbigpLCBoYXNOYXZpZ2F0ZWRBd2F5
RnJvbUFwcEJvdW5kRG9tYWluKCksIFBvbGljeUFjdGlvbjo6SWdub3JlLCAwLCBEb3dubG9hZElE
KCksIFdURjo6bnVsbG9wdCB9KTsKQEAgLTUwNzAsNyArNTA1NSw5IEBAIHZvaWQgV2ViUGFnZVBy
b3h5OjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKFJlZjxXZWJQcm9jZXNzUHJveHk+
JiYgcHJvY2VzCiAgICAgaWYgKCFtX3ByZWZlcmVuY2VzLT5zYWZlQnJvd3NpbmdFbmFibGVkKCkp
CiAgICAgICAgIHNob3VsZEV4cGVjdFNhZmVCcm93c2luZ1Jlc3VsdCA9IFNob3VsZEV4cGVjdFNh
ZmVCcm93c2luZ1Jlc3VsdDo6Tm87CiAKLSAgICBhdXRvIGxpc3RlbmVyID0gbWFrZVJlZihmcmFt
ZS5zZXRVcFBvbGljeUxpc3RlbmVyUHJveHkoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVm
KCp0aGlzKSwgZnJhbWUgPSBtYWtlUmVmKGZyYW1lKSwgc2VuZGVyID0gV1RGTW92ZShzZW5kZXIp
LCBuYXZpZ2F0aW9uXSAoUG9saWN5QWN0aW9uIHBvbGljeUFjdGlvbiwgQVBJOjpXZWJzaXRlUG9s
aWNpZXMqIHBvbGljaWVzLCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50IHByb2Nlc3NTd2Fw
UmVxdWVzdGVkQnlDbGllbnQsIFJlZlB0cjxTYWZlQnJvd3NpbmdXYXJuaW5nPiYmIHNhZmVCcm93
c2luZ1dhcm5pbmcpIG11dGFibGUgeworICAgIGF1dG8gbGlzdGVuZXIgPSBtYWtlUmVmKGZyYW1l
LnNldFVwUG9saWN5TGlzdGVuZXJQcm94eShbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYo
KnRoaXMpLCBmcmFtZSA9IG1ha2VSZWYoZnJhbWUpLCBzZW5kZXIgPSBXVEZNb3ZlKHNlbmRlciks
IG5hdmlnYXRpb25dIChQb2xpY3lBY3Rpb24gcG9saWN5QWN0aW9uLCBBUEk6OldlYnNpdGVQb2xp
Y2llcyogcG9saWNpZXMsIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQgcHJvY2Vzc1N3YXBS
ZXF1ZXN0ZWRCeUNsaWVudCwgUmVmUHRyPFNhZmVCcm93c2luZ1dhcm5pbmc+JiYgc2FmZUJyb3dz
aW5nV2FybmluZywgTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4gaXNBcHBCb3VuZERvbWFpbikg
bXV0YWJsZSB7CisKKyAgICAgICAgc2V0SXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbihmcmFt
ZS0+aXNNYWluRnJhbWUoKSwgbmF2aWdhdGlvbi0+Y3VycmVudFJlcXVlc3QoKS51cmwoKSwgaXNB
cHBCb3VuZERvbWFpbik7CiAKICAgICAgICAgYXV0byBjb21wbGV0aW9uSGFuZGxlciA9IFt0aGlz
LCBwcm90ZWN0ZWRUaGlzID0gcHJvdGVjdGVkVGhpcy5jb3B5UmVmKCksIGZyYW1lID0gZnJhbWUu
Y29weVJlZigpLCBzZW5kZXIgPSBXVEZNb3ZlKHNlbmRlciksIG5hdmlnYXRpb24sIHByb2Nlc3NT
d2FwUmVxdWVzdGVkQnlDbGllbnQsIHBvbGljaWVzID0gbWFrZVJlZlB0cihwb2xpY2llcyldIChQ
b2xpY3lBY3Rpb24gcG9saWN5QWN0aW9uKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGlmIChmcmFt
ZS0+aXNNYWluRnJhbWUoKSkgewpAQCAtNTExOCw5ICs1MTA1LDExIEBAIHZvaWQgV2ViUGFnZVBy
b3h5OjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKFJlZjxXZWJQcm9jZXNzUHJveHk+
JiYgcHJvY2VzCiAgICAgICAgIH0KICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocG9saWN5QWN0
aW9uKTsKIAotICAgIH0sIHNob3VsZEV4cGVjdFNhZmVCcm93c2luZ1Jlc3VsdCkpOworICAgIH0s
IHNob3VsZEV4cGVjdFNhZmVCcm93c2luZ1Jlc3VsdCwgU2hvdWxkRXhwZWN0QXBwQm91bmREb21h
aW5SZXN1bHQ6OlllcykpOwogICAgIGlmIChzaG91bGRFeHBlY3RTYWZlQnJvd3NpbmdSZXN1bHQg
PT0gU2hvdWxkRXhwZWN0U2FmZUJyb3dzaW5nUmVzdWx0OjpZZXMpCiAgICAgICAgIGJlZ2luU2Fm
ZUJyb3dzaW5nQ2hlY2socmVxdWVzdC51cmwoKSwgZnJhbWUuaXNNYWluRnJhbWUoKSwgbGlzdGVu
ZXIpOworICAgIAorICAgIG1fd2Vic2l0ZURhdGFTdG9yZS0+YmVnaW5BcHBCb3VuZERvbWFpbkNo
ZWNrKFJlZ2lzdHJhYmxlRG9tYWluIHsgcmVxdWVzdC51cmwoKSB9LCBsaXN0ZW5lcik7CiAKICAg
ICBBUEk6Ok5hdmlnYXRpb24qIG1haW5GcmFtZU5hdmlnYXRpb24gPSBmcmFtZS5pc01haW5GcmFt
ZSgpID8gbmF2aWdhdGlvbi5nZXQoKSA6IG51bGxwdHI7CiAgICAgV2ViRnJhbWVQcm94eSogb3Jp
Z2luYXRpbmdGcmFtZSA9IG9yaWdpbmF0aW5nRnJhbWVJbmZvRGF0YS5mcmFtZUlEID8gcHJvY2Vz
cy0+d2ViRnJhbWUoKm9yaWdpbmF0aW5nRnJhbWVJbmZvRGF0YS5mcmFtZUlEKSA6IG51bGxwdHI7
CkBAIC01MjUxLDcgKzUyNDAsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGVjaWRlUG9saWN5Rm9y
TmV3V2luZG93QWN0aW9uKEZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBGcmFtZQogICAgIE1FU1NB
R0VfQ0hFQ0sobV9wcm9jZXNzLCBmcmFtZSk7CiAgICAgTUVTU0FHRV9DSEVDS19VUkwobV9wcm9j
ZXNzLCByZXF1ZXN0LnVybCgpKTsKIAotICAgIGF1dG8gbGlzdGVuZXIgPSBtYWtlUmVmKGZyYW1l
LT5zZXRVcFBvbGljeUxpc3RlbmVyUHJveHkoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVm
KCp0aGlzKSwgaWRlbnRpZmllciwgbGlzdGVuZXJJRCwgZnJhbWVJRF0gKFBvbGljeUFjdGlvbiBw
b2xpY3lBY3Rpb24sIEFQSTo6V2Vic2l0ZVBvbGljaWVzKiwgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRC
eUNsaWVudCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBSZWZQdHI8U2FmZUJyb3dzaW5n
V2FybmluZz4mJiBzYWZlQnJvd3NpbmdXYXJuaW5nKSBtdXRhYmxlIHsKKyAgICBhdXRvIGxpc3Rl
bmVyID0gbWFrZVJlZihmcmFtZS0+c2V0VXBQb2xpY3lMaXN0ZW5lclByb3h5KFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGlkZW50aWZpZXIsIGxpc3RlbmVySUQsIGZyYW1l
SURdIChQb2xpY3lBY3Rpb24gcG9saWN5QWN0aW9uLCBBUEk6OldlYnNpdGVQb2xpY2llcyosIFBy
b2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwg
UmVmUHRyPFNhZmVCcm93c2luZ1dhcm5pbmc+JiYgc2FmZUJyb3dzaW5nV2FybmluZywgTmF2aWdh
dGluZ1RvQXBwQm91bmREb21haW4gaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbikgbXV0YWJs
ZSB7CiAgICAgICAgIC8vIEZJWE1FOiBBc3NlcnQgdGhlIEFQSTo6V2Vic2l0ZVBvbGljaWVzKiBp
cyBudWxscHRyIGhlcmUgb25jZSBjbGllbnRzIG9mIFdLRnJhbWVQb2xpY3lMaXN0ZW5lclVzZVdp
dGhQb2xpY2llcyBnbyBhd2F5LgogICAgICAgICBSRUxFQVNFX0FTU0VSVChwcm9jZXNzU3dhcFJl
cXVlc3RlZEJ5Q2xpZW50ID09IFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQ6Ok5vKTsKICAg
ICAgICAgQVNTRVJUX1VOVVNFRChzYWZlQnJvd3NpbmdXYXJuaW5nLCAhc2FmZUJyb3dzaW5nV2Fy
bmluZyk7CkBAIC01MjYxLDcgKzUyNTAsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGVjaWRlUG9s
aWN5Rm9yTmV3V2luZG93QWN0aW9uKEZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBGcmFtZQogICAg
ICAgICB9KTsKIAogICAgICAgICByZWNlaXZlZFBvbGljeURlY2lzaW9uKHBvbGljeUFjdGlvbiwg
bnVsbHB0ciwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKHNlbmRlcikpOwotICAgIH0sIFNob3VsZEV4
cGVjdFNhZmVCcm93c2luZ1Jlc3VsdDo6Tm8pKTsKKyAgICB9LCBTaG91bGRFeHBlY3RTYWZlQnJv
d3NpbmdSZXN1bHQ6Ok5vLCBTaG91bGRFeHBlY3RBcHBCb3VuZERvbWFpblJlc3VsdDo6Tm8pKTsK
IAogICAgIGlmIChtX3BvbGljeUNsaWVudCkKICAgICAgICAgbV9wb2xpY3lDbGllbnQtPmRlY2lk
ZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbigqdGhpcywgKmZyYW1lLCBuYXZpZ2F0aW9uQWN0aW9u
RGF0YSwgcmVxdWVzdCwgZnJhbWVOYW1lLCBXVEZNb3ZlKGxpc3RlbmVyKSwgbV9wcm9jZXNzLT50
cmFuc2Zvcm1IYW5kbGVzVG9PYmplY3RzKHVzZXJEYXRhLm9iamVjdCgpKS5nZXQoKSk7CkBAIC01
Mjk3LDEwICs1Mjg2LDkgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRlY2lkZVBvbGljeUZvclJlc3Bv
bnNlU2hhcmVkKFJlZjxXZWJQcm9jZXNzUHJveHk+JiYgcHJvY2VzcywKICAgICBNRVNTQUdFX0NI
RUNLKHByb2Nlc3MsIGZyYW1lKTsKICAgICBNRVNTQUdFX0NIRUNLX1VSTChwcm9jZXNzLCByZXF1
ZXN0LnVybCgpKTsKICAgICBNRVNTQUdFX0NIRUNLX1VSTChwcm9jZXNzLCByZXNwb25zZS51cmwo
KSk7Ci0KICAgICBSZWZQdHI8QVBJOjpOYXZpZ2F0aW9uPiBuYXZpZ2F0aW9uID0gbmF2aWdhdGlv
bklEID8gbV9uYXZpZ2F0aW9uU3RhdGUtPm5hdmlnYXRpb24obmF2aWdhdGlvbklEKSA6IG51bGxw
dHI7CiAgICAgYXV0byBsaXN0ZW5lciA9IG1ha2VSZWYoZnJhbWUtPnNldFVwUG9saWN5TGlzdGVu
ZXJQcm94eShbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCB3ZWJQYWdlSUQs
IGZyYW1lSUQsIGlkZW50aWZpZXIsIGxpc3RlbmVySUQsIG5hdmlnYXRpb24gPSBXVEZNb3ZlKG5h
dmlnYXRpb24pLAotICAgICAgICBwcm9jZXNzID0gcHJvY2Vzcy5jb3B5UmVmKCldIChQb2xpY3lB
Y3Rpb24gcG9saWN5QWN0aW9uLCBBUEk6OldlYnNpdGVQb2xpY2llcyosIFByb2Nlc3NTd2FwUmVx
dWVzdGVkQnlDbGllbnQgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgUmVmUHRyPFNhZmVC
cm93c2luZ1dhcm5pbmc+JiYgc2FmZUJyb3dzaW5nV2FybmluZykgbXV0YWJsZSB7CisgICAgICAg
IHByb2Nlc3MgPSBwcm9jZXNzLmNvcHlSZWYoKV0gKFBvbGljeUFjdGlvbiBwb2xpY3lBY3Rpb24s
IEFQSTo6V2Vic2l0ZVBvbGljaWVzKiwgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCBwcm9j
ZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBSZWZQdHI8U2FmZUJyb3dzaW5nV2FybmluZz4mJiBz
YWZlQnJvd3NpbmdXYXJuaW5nLCBOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiBpc05hdmlnYXRp
bmdUb0FwcEJvdW5kRG9tYWluKSBtdXRhYmxlIHsKICAgICAgICAgLy8gRklYTUU6IEFzc2VydCB0
aGUgQVBJOjpXZWJzaXRlUG9saWNpZXMqIGlzIG51bGxwdHIgaGVyZSBvbmNlIGNsaWVudHMgb2Yg
V0tGcmFtZVBvbGljeUxpc3RlbmVyVXNlV2l0aFBvbGljaWVzIGdvIGF3YXkuCiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQgPT0gUHJvY2Vzc1N3YXBS
ZXF1ZXN0ZWRCeUNsaWVudDo6Tm8pOwogICAgICAgICBBU1NFUlRfVU5VU0VEKHNhZmVCcm93c2lu
Z1dhcm5pbmcsICFzYWZlQnJvd3NpbmdXYXJuaW5nKTsKQEAgLTUzMTAsOCArNTI5OCw3IEBAIHZv
aWQgV2ViUGFnZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JSZXNwb25zZVNoYXJlZChSZWY8V2ViUHJv
Y2Vzc1Byb3h5PiYmIHByb2Nlc3MsCiAgICAgICAgIH0pOwogICAgICAgICAKICAgICAgICAgcmVj
ZWl2ZWRQb2xpY3lEZWNpc2lvbihwb2xpY3lBY3Rpb24sIG5hdmlnYXRpb24uZ2V0KCksIFdURjo6
bnVsbG9wdCwgV1RGTW92ZShzZW5kZXIpKTsKLSAgICB9LCBTaG91bGRFeHBlY3RTYWZlQnJvd3Np
bmdSZXN1bHQ6Ok5vKSk7Ci0KKyAgICB9LCBTaG91bGRFeHBlY3RTYWZlQnJvd3NpbmdSZXN1bHQ6
Ok5vLCBTaG91bGRFeHBlY3RBcHBCb3VuZERvbWFpblJlc3VsdDo6Tm8pKTsKICAgICBpZiAobV9w
b2xpY3lDbGllbnQpCiAgICAgICAgIG1fcG9saWN5Q2xpZW50LT5kZWNpZGVQb2xpY3lGb3JSZXNw
b25zZSgqdGhpcywgKmZyYW1lLCByZXNwb25zZSwgcmVxdWVzdCwgY2FuU2hvd01JTUVUeXBlLCBX
VEZNb3ZlKGxpc3RlbmVyKSwgcHJvY2Vzcy0+dHJhbnNmb3JtSGFuZGxlc1RvT2JqZWN0cyh1c2Vy
RGF0YS5vYmplY3QoKSkuZ2V0KCkpOwogICAgIGVsc2UgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuaAppbmRleCBjNjhlNTc3MTM1ZDQ3M2IwMzIwYWJlNmQ4ZGYzYmNhOTJjZmRi
YWNjLi5iZDY5Mjg5OWQ3NjFlOGVjM2QyM2Y5MzA2YWRhYzhlZjBlNzRlNDM1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtMjI2Miw5ICsyMjYyLDcgQEAgcHJpdmF0
ZToKICAgICB2b2lkIHRyeUNsb3NlVGltZWRPdXQoKTsKICAgICB2b2lkIG1ha2VTdG9yYWdlU3Bh
Y2VSZXF1ZXN0KFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBvcmlnaW5J
ZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiBkaXNw
bGF5TmFtZSwgdWludDY0X3QgY3VycmVudFF1b3RhLCB1aW50NjRfdCBjdXJyZW50T3JpZ2luVXNh
Z2UsIHVpbnQ2NF90IGN1cnJlbnREYXRhYmFzZVVzYWdlLCB1aW50NjRfdCBleHBlY3RlZFVzYWdl
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVpbnQ2NF90KT4mJik7CiAgICAgICAgIAotICAgIGJv
b2wgaXNBcHBCb3VuZERvbWFpbihjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYpIGNv
bnN0OwotICAgIGJvb2wgaXNBcHBCb3VuZERvbWFpbihjb25zdCBVUkwmKSBjb25zdDsKLSAgICB2
b2lkIHNldElzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4oYm9vbCBpc01haW5GcmFtZSwgY29u
c3QgVVJMJik7CisgICAgdm9pZCBzZXRJc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKGJvb2wg
aXNNYWluRnJhbWUsIGNvbnN0IFVSTCYsIE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKTsKICAg
ICBOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWlu
KCkgY29uc3QgeyByZXR1cm4gbV9pc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluOyB9CiAgICAg
TmF2aWdhdGVkQXdheUZyb21BcHBCb3VuZERvbWFpbiBoYXNOYXZpZ2F0ZWRBd2F5RnJvbUFwcEJv
dW5kRG9tYWluKCkgY29uc3QgeyByZXR1cm4gbV9oYXNOYXZpZ2F0ZWRBd2F5RnJvbUFwcEJvdW5k
RG9tYWluOyB9CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tCmlu
ZGV4IGRiZDMwZDA0MzA3ZDE4MTM5NTlkOTUzYzI1NDUxN2Y3ZTkyMWQxYWEuLmVhN2I4MGJhY2Yw
NzU2Yjg1MGNjZDNiMDA2ZTQ2M2UxNDU1NjM4OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0
b3JlQ29jb2EubW0KQEAgLTI5LDYgKzI5LDcgQEAKICNpbXBvcnQgIkNvb2tpZVN0b3JhZ2VVdGls
c0NGLmgiCiAjaW1wb3J0ICJTYW5kYm94VXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJTdG9yYWdlTWFu
YWdlci5oIgorI2ltcG9ydCAiV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5LmgiCiAjaW1wb3J0
ICJXZWJQcmVmZXJlbmNlc0tleXMuaCIKICNpbXBvcnQgIldlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZS5oIgogI2ltcG9ydCAiV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaCIKQEAgLTQ0
LDYgKzQ1LDEyIEBACiAjaW1wb3J0IDx3dGYvVVJMLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9TdHJp
bmdCdWlsZGVyLmg+CiAKKyNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQorI2luY2x1ZGUgPFdl
YktpdEFkZGl0aW9ucy9XZWJzaXRlRGF0YVN0b3JlQWRkaXRpb25zLmg+CisjZWxzZQorI2RlZmlu
ZSBXRUJTSVRFX0RBVEFfU1RPUkVfQURESVRJT05TCisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCiAjaW1wb3J0IDxVSUtpdC9VSUFwcGxpY2F0aW9uLmg+CiAjaW1wb3J0IDxwYWwv
aW9zL01hbmFnZWRDb25maWd1cmF0aW9uU29mdExpbmsuaD4KQEAgLTQxOSw0ICs0MjYsNDcgQEAg
V1RGOjpTdHJpbmcgV2Vic2l0ZURhdGFTdG9yZTo6d2Vic2l0ZURhdGFEaXJlY3RvcnlGaWxlU3lz
dGVtUmVwcmVzZW50YXRpb24oY29uc3QKICAgICByZXR1cm4gdXJsLmFic29sdXRlVVJMLnBhdGgu
ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uOwogfQogCitzdGF0aWMgSGFzaFNldDxXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbj4mIGFwcEJvdW5kRG9tYWlucygpCit7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbj4+IGFwcEJvdW5kRG9tYWluczsKKyAgICByZXR1cm4gYXBwQm91bmRE
b21haW5zOworfQorCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmJlZ2luQXBwQm91bmREb21haW5D
aGVjayhjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiBkb21haW4sIFdlYkZyYW1lUG9s
aWN5TGlzdGVuZXJQcm94eSYgbGlzdGVuZXIpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFp
bigpKTsKKworICAgIHN0YXRpYyBjb25zdCBhdXRvIG1heEFwcEJvdW5kRG9tYWluQ291bnQgPSAx
MDsKKyAgICBzdGF0aWMgc3RkOjphdG9taWM8Ym9vbD4gaW5pdGlhbGl6ZWRBcHBCb3VuZERvbWFp
bnMgPSBmYWxzZTsKKyAgICBpZiAoaW5pdGlhbGl6ZWRBcHBCb3VuZERvbWFpbnMpIHsKKyAgICAg
ICAgbGlzdGVuZXIuZGlkUmVjZWl2ZUFwcEJvdW5kRG9tYWluUmVzdWx0KGFwcEJvdW5kRG9tYWlu
cygpLmNvbnRhaW5zKGRvbWFpbikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9x
dWV1ZS0+ZGlzcGF0Y2goW2RvbWFpbiA9IGRvbWFpbi5pc29sYXRlZENvcHkoKSwgbGlzdGVuZXIg
PSBtYWtlUmVmKGxpc3RlbmVyKV0gKCkgbXV0YWJsZSB7CisgICAgICAgIE5TQXJyYXkgKmRvbWFp
bnMgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIG9iamVjdEZvckluZm9EaWN0aW9uYXJ5S2V5OkAi
QXBwQm91bmREb21haW5zIl07CisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbZG9t
YWluID0gZG9tYWluLmlzb2xhdGVkQ29weSgpLCBsaXN0ZW5lciA9IFdURk1vdmUobGlzdGVuZXIp
LCBkb21haW5zID0gcmV0YWluUHRyKGRvbWFpbnMpXSB7CisgICAgICAgICAgICB1bnNpZ25lZCBh
cHBCb3VuZERvbWFpbnNDb3VudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihbZG9tYWlucyBjb3Vu
dF0pOworICAgICAgICAgICAgdW5zaWduZWQgZG9tYWluc0FkZGVkID0gMDsKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcHBCb3VuZERvbWFpbnNDb3VudCAmJiBkb21haW5z
QWRkZWQgPCBtYXhBcHBCb3VuZERvbWFpbkNvdW50OyArK2kpIHsKKyAgICAgICAgICAgICAgICBV
UkwgdXJsIHsgVVJMKCksIFtkb21haW5zIG9iamVjdEF0SW5kZXg6aV0gfTsKKyAgICAgICAgICAg
ICAgICBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiBhcHBCb3VuZERvbWFpbiB7IHVybCB9Owor
ICAgICAgICAgICAgICAgIGlmICghYXBwQm91bmREb21haW4uaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGFwcEJvdW5kRG9tYWlucygpLmFkZChhcHBCb3VuZERvbWFpbik7CisgICAg
ICAgICAgICAgICAgICAgIGRvbWFpbnNBZGRlZCsrOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIFdFQlNJVEVfREFUQV9TVE9SRV9BRERJVElPTlMKKyAgICAg
ICAgICAgIGluaXRpYWxpemVkQXBwQm91bmREb21haW5zID0gdHJ1ZTsKKyAgICAgICAgICAgIGxp
c3RlbmVyLT5kaWRSZWNlaXZlQXBwQm91bmREb21haW5SZXN1bHQoYXBwQm91bmREb21haW5zKCku
Y29udGFpbnMoZG9tYWluKSk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCit2b2lkIFdlYnNp
dGVEYXRhU3RvcmU6OmdldEFwcEJvdW5kRG9tYWluc0ZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChWZWN0b3I8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+KT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKK3sKKyAgICBjb21wbGV0aW9uSGFuZGxlcihjb3B5VG9WZWN0b3IoYXBwQm91bmRE
b21haW5zKCkpKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCmluZGV4IDU2YWYzZjk5NzYxZjQ4Yzc4YzMz
MDJhMzJkYzNhNTU0YjFlZWM4YWEuLjBkZTZhZjBhOGU3NWFiMzJiOWQ3MWFiOWQyMmMwNDY0MWMw
NzQyYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dl
YnNpdGVEYXRhU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0
YS9XZWJzaXRlRGF0YVN0b3JlLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJMb2NhbFN0
b3JhZ2VEYXRhYmFzZVRyYWNrZXIuaCIKICNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbkNyZWF0aW9u
UGFyYW1ldGVycy5oIgogI2luY2x1ZGUgIldlYkRldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNj
ZXNzQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIldlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eS5o
IgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eUlkZW50aWZpZXIuaCIKICNpbmNsdWRlICJXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YVN0b3JlQ2xp
ZW50LmgiCkBAIC0yODIsNiArMjgzLDkgQEAgcHVibGljOgogICAgIHZvaWQgaGFzQXBwQm91bmRT
ZXNzaW9uKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpIGNvbnN0OwogICAgIHZvaWQg
c2V0SW5BcHBCcm93c2VyUHJpdmFjeUVuYWJsZWQoYm9vbCBlbmFibGVkLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYpOwogCisgICAgdm9pZCBiZWdpbkFwcEJvdW5kRG9tYWluQ2hlY2soY29u
c3QgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4sIFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94
eSYpOworICAgIHZvaWQgZ2V0QXBwQm91bmREb21haW5zRm9yVGVzdGluZyhDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFZlY3RvcjxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4pPiYmKTsKKwogcHJp
dmF0ZToKICAgICB2b2lkIGZldGNoRGF0YUFuZEFwcGx5KE9wdGlvblNldDxXZWJzaXRlRGF0YVR5
cGU+LCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4sIFJlZlB0cjxXb3JrUXVldWU+
JiYsIEZ1bmN0aW9uPHZvaWQoVmVjdG9yPFdlYnNpdGVEYXRhUmVjb3JkPik+JiYgYXBwbHkpOwog
CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMzY0
NDlmMjQ1NGE2MGZkOWQ3OTMwMGRkMjJiMmZhNWE0Njk0YThjNS4uNDBhMzMyZTVjMjNlYzM0YjUz
NTliY2VkYTllYWM0ZjRhNzI5ODM5NCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBi
L1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDIwLTAzLTA2ICBLYXRlIENoZW5l
eSAgPGthdGhlcmluZV9jaGVuZXlAYXBwbGUuY29tPgorCisgICAgICAgIFVJUHJvY2VzcyBuZWVk
cyBtZWNoYW5pc20gdG8gc3BlY2lmeSBBcHBCb3VuZCBkb21haW5zCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDg1MjgKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzU5OTgwMzQwPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZGVkIHRlc3QgYXBwLWJvdW5kIGRvbWFpbnMgdG8gdGhlIHBsaXN0IGFuZCB0
ZXN0ZWQgdGhhdCB0aGUgZG9tYWlucworICAgICAgICBhcmUgcHJvcGVybHkgc3RvcmVkIGluIHRo
ZSB3ZWJzaXRlIGRhdGEgc3RvcmUgYWZ0ZXIgYSBuYXZpZ2F0aW9uLgorCisgICAgICAgICogVGVz
dFdlYktpdEFQSS9JbmZvLnBsaXN0OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvSW5BcHBCcm93c2VyUHJpdmFjeS5tbToKKyAgICAgICAgKFRFU1QpOgorCiAyMDIw
LTAzLTA2ICBMYXVybyBNb3VyYSA8bG1vdXJhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW1dQRV1b
V2ViRHJpdmVyXSBNaW5pQnJvd3NlciBzaG91bGQgcmVhY3QgdG8gY2xvc2Ugc2Vzc2lvbiBjb21t
YW5kcwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9JbmZvLnBsaXN0IGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9JbmZvLnBsaXN0CmluZGV4IDQyMTZiNmQ3MTMzY2YxYWQ3MzdmOGQ2MjVj
NTMyYWE5MmExZDgxMTguLjY3MGQwZTMzMThkNzYxYzZhNTM4Mzc1YTZmMzExZTMwOWQ4ODM0NmUg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvSW5mby5wbGlzdAorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL0luZm8ucGxpc3QKQEAgLTIsNiArMiwyNSBAQAogPCFET0NUWVBFIHBsaXN0
IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5j
b20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+CiA8cGxpc3QgdmVyc2lvbj0iMS4wIj4KIDxk
aWN0PgorCTxrZXk+QXBwQm91bmREb21haW5zPC9rZXk+CisJPGFycmF5PgorCQk8c3RyaW5nPnRl
c3REb21haW4xPC9zdHJpbmc+CisJCTxzdHJpbmc+aHR0cHM6Ly9zdWIuZG9tYWluLndlYmtpdC5v
cmcvcm9hZC90by9ub3doZXJlLzwvc3RyaW5nPgorCQk8c3RyaW5nPmh0dHBzOi8vd2Via2l0Lm9y
Zzwvc3RyaW5nPgorCQk8c3RyaW5nPmh0dHBzOi8vbG9jYWxob3N0OjgwMDA8L3N0cmluZz4KKwkJ
PHN0cmluZz5odHRwOi8vbG9jYWxob3N0L3JvYWQvdG8vbm93aGVyZS88L3N0cmluZz4KKwkJPHN0
cmluZz5maWxlOi8vL3NvbWUvZmlsZTwvc3RyaW5nPgorCQk8c3RyaW5nPjEyNy4wLjAuMTwvc3Ry
aW5nPgorCQk8c3RyaW5nPjwvc3RyaW5nPgorCQk8c3RyaW5nPiAgIDwvc3RyaW5nPgorCQk8c3Ry
aW5nPmh0dHBzOi8vc3ViLmRvbWFpbi53ZWJraXQub3JnPC9zdHJpbmc+CisJCTxzdHJpbmc+aHR0
cHM6Ly93d3cuYXBwbGUuY29tLzwvc3RyaW5nPgorCQk8c3RyaW5nPmh0dHBzOi8vd2Via2l0Lm9y
Zzwvc3RyaW5nPgorCQk8c3RyaW5nPmh0dHBzOi8vd3d3LmFwcGxlLmNvbS9pcGhvbmUvPC9zdHJp
bmc+CisJCTxzdHJpbmc+aHR0cDovL3d3dy5leGFtcGxlLmNvbS88L3N0cmluZz4KKwkJPHN0cmlu
Zz5odHRwOi8vYmFyLmNvbS88L3N0cmluZz4KKwkJPHN0cmluZz5odHRwOi8vZm9vLmNvbS88L3N0
cmluZz4KKwk8L2FycmF5PgogCTxrZXk+Q0ZCdW5kbGVOYW1lPC9rZXk+CiAJPHN0cmluZz4ke1BS
T0RVQ1RfTkFNRX08L3N0cmluZz4KIAk8a2V5PkNGQnVuZGxlSWRlbnRpZmllcjwva2V5PgpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbkFwcEJyb3dz
ZXJQcml2YWN5Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbkFw
cEJyb3dzZXJQcml2YWN5Lm1tCmluZGV4IDc5ZTQ1MWUzNTVjMmQ4ODE1NDU1MTc5MTI0ZDcwNzEx
ODgyNzQwODMuLmZhNzMxZDEzZGJiNjI0MmM3MjNiY2E0ZjdiNTM5Mzg1ZWZiNDkyOGEgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5BcHBCcm93c2Vy
UHJpdmFjeS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lu
QXBwQnJvd3NlclByaXZhY3kubW0KQEAgLTI5LDggKzI5LDExIEBACiAjaW1wb3J0ICJUZXN0TmF2
aWdhdGlvbkRlbGVnYXRlLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAjaW1wb3J0ICJX
S1dlYlZpZXdDb25maWd1cmF0aW9uRXh0cmFzLmgiCisjaW1wb3J0IDxXZWJDb3JlL1JlZ2lzdHJh
YmxlRG9tYWluLmg+CisjaW1wb3J0IDxXZWJDb3JlL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5o
PgogI2ltcG9ydCA8V2ViS2l0L1dLUHJlZmVyZW5jZXNQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJL
aXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV0tX
ZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKICNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQpAQCAtNTAsNyArNTMsNyBAQCAtICh2b2lk
KXVzZXJDb250ZW50Q29udHJvbGxlcjooV0tVc2VyQ29udGVudENvbnRyb2xsZXIgKil1c2VyQ29u
dGVudENvbnRyb2xsZXIgZAogCiBAZW5kCiAKLVRFU1QoV2ViS2l0LCBOb25BcHBCb3VuZERvbWFp
bkZhaWxlZFVzZXJTY3JpcHRzKQorVEVTVChJbkFwcEJyb3dzZXJQcml2YWN5LCBOb25BcHBCb3Vu
ZERvbWFpbkZhaWxlZFVzZXJTY3JpcHRzKQogewogICAgIGF1dG8gbWVzc2FnZUhhbmRsZXIgPSBh
ZG9wdE5TKFtbVGVzdEluQXBwQnJvd3NlclNjcmlwdE1lc3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0
XSk7CiAgICAgYXV0byB1c2VyU2NyaXB0ID0gYWRvcHROUyhbW1dLVXNlclNjcmlwdCBhbGxvY10g
aW5pdFdpdGhTb3VyY2U6dXNlclNjcmlwdFNvdXJjZSBpbmplY3Rpb25UaW1lOldLVXNlclNjcmlw
dEluamVjdGlvblRpbWVBdERvY3VtZW50U3RhcnQgZm9yTWFpbkZyYW1lT25seTpZRVNdKTsKQEAg
LTk1LDcgKzk4LDcgQEAgVEVTVChXZWJLaXQsIE5vbkFwcEJvdW5kRG9tYWluRmFpbGVkVXNlclNj
cmlwdHMpCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZpc0RvbmUpOwogfQogCi1URVNU
KFdlYktpdCwgTm9uQXBwQm91bmREb21haW5GYWlsZWRVc2VyQWdlbnRTY3JpcHRzKQorVEVTVChJ
bkFwcEJyb3dzZXJQcml2YWN5LCBOb25BcHBCb3VuZERvbWFpbkZhaWxlZFVzZXJBZ2VudFNjcmlw
dHMpCiB7CiAgICAgV0tXZWJWaWV3Q29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbiA9IFtXS1dl
YlZpZXdDb25maWd1cmF0aW9uIF90ZXN0X2NvbmZpZ3VyYXRpb25XaXRoVGVzdFBsdWdJbkNsYXNz
TmFtZTpAIldlYlByb2Nlc3NQbHVnSW5XaXRoSW50ZXJuYWxzIiBjb25maWd1cmVKU0NGb3JUZXN0
aW5nOllFU107CiAgICAgW1tjb25maWd1cmF0aW9uIHByZWZlcmVuY2VzXSBfc2V0SW5BcHBCcm93
c2VyUHJpdmFjeUVuYWJsZWQ6Tk9dOwpAQCAtMTMyLDcgKzEzNSw3IEBAIFRFU1QoV2ViS2l0LCBO
b25BcHBCb3VuZERvbWFpbkZhaWxlZFVzZXJBZ2VudFNjcmlwdHMpCiAgICAgVGVzdFdlYktpdEFQ
STo6VXRpbDo6cnVuKCZpc0RvbmUpOwogfQogCi1URVNUKFdlYktpdCwgU3dhcEJhY2tUb0FwcEJv
dW5kUmVqZWN0c1VzZXJTY3JpcHQpCitURVNUKEluQXBwQnJvd3NlclByaXZhY3ksIFN3YXBCYWNr
VG9BcHBCb3VuZFJlamVjdHNVc2VyU2NyaXB0KQogewogICAgIGF1dG8gbWVzc2FnZUhhbmRsZXIg
PSBhZG9wdE5TKFtbVGVzdEluQXBwQnJvd3NlclNjcmlwdE1lc3NhZ2VIYW5kbGVyIGFsbG9jXSBp
bml0XSk7CiAgICAgYXV0byB1c2VyU2NyaXB0ID0gYWRvcHROUyhbW1dLVXNlclNjcmlwdCBhbGxv
Y10gaW5pdFdpdGhTb3VyY2U6dXNlclNjcmlwdFNvdXJjZSBpbmplY3Rpb25UaW1lOldLVXNlclNj
cmlwdEluamVjdGlvblRpbWVBdERvY3VtZW50U3RhcnQgZm9yTWFpbkZyYW1lT25seTpZRVNdKTsK
QEAgLTE3NiwzICsxNzksMjMgQEAgVEVTVChXZWJLaXQsIFN3YXBCYWNrVG9BcHBCb3VuZFJlamVj
dHNVc2VyU2NyaXB0KQogfQogCiAjZW5kaWYgLy8gVVNFKEFQUExFX0lOVEVSTkFMX1NESykKKwor
VEVTVChJbkFwcEJyb3dzZXJQcml2YWN5LCBBcHBCb3VuZERvbWFpbnMpCit7CisgICAgYXV0byB3
ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VS
ZWN0KDAsIDAsIDgwMCwgNjAwKV0pOworICAgIE5TVVJMUmVxdWVzdCAqcmVxdWVzdCA9IFtOU1VS
TFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNv
dXJjZTpAInNpbXBsZSIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RX
ZWJLaXRBUEkucmVzb3VyY2VzIl1dOworCisgICAgLy8gV2FpdGluZyBmb3IgYSB3ZWJWaWV3IG5h
dmlnYXRpb24gZW5zdXJlcyB0aGUgQXBwIEJvdW5kIERvbWFpbnMgYXJlIHJlYWQgZnJvbSB0aGUg
cGxpc3QgYmVmb3JlIHdlIHJlcXVlc3QgdGhlbS4KKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpy
ZXF1ZXN0XTsKKyAgICBbd2ViVmlldyBfdGVzdF93YWl0Rm9yRGlkRmluaXNoTmF2aWdhdGlvbl07
CisKKyAgICBbW1dLV2Vic2l0ZURhdGFTdG9yZSBkZWZhdWx0RGF0YVN0b3JlXSBfZ2V0QXBwQm91
bmREb21haW5zOl4oTlNBcnJheTxOU1N0cmluZyAqPiAqZG9tYWlucykgeworICAgICAgICBOU0Fy
cmF5ICpkb21haW5zVG9Db21wYXJlID0gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czpAImxvY2Fs
aG9zdCIsIEAiYXBwbGUuY29tIiwgQCJiYXIuY29tIiwgQCJ3ZWJraXQub3JnIiwgQCJleGFtcGxl
LmNvbSIsIG5pbF07CisKKyAgICAgICAgaW50IGxlbmd0aCA9IFtkb21haW5zIGNvdW50XTsKKyAg
ICAgICAgRVhQRUNUX0xFKGxlbmd0aCwgMTApOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKQorICAgICAgICAgICAgRVhQRUNUX1dLX1NUUkVRKFtkb21haW5zIG9iamVj
dEF0SW5kZXg6aV0sIFtkb21haW5zVG9Db21wYXJlIG9iamVjdEF0SW5kZXg6aV0pOworICAgIH1d
OworfQorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392783</attachid>
            <date>2020-03-06 15:19:34 -0800</date>
            <delta_ts>2020-03-06 15:34:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-208528-20200306151933.patch</filename>
            <type>text/plain</type>
            <size>36711</size>
            <attacher name="Kate Cheney">katherine_cheney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU3OTk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDUzMTgzZGIyMGYzZjQ1MTY2
OWIyZGQ2MzA0ZDYyZTVmY2ZjNTEwMmEuLjgwMjkzMGZjYTU4ODU5NzI3NWQxZDk5YmU4NjQxM2Y2
MjY3NTE4YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjAgQEAKKzIwMjAtMDMtMDYgIEthdGUgQ2hl
bmV5ICA8a2F0aGVyaW5lX2NoZW5leUBhcHBsZS5jb20+CisKKyAgICAgICAgVUlQcm9jZXNzIG5l
ZWRzIG1lY2hhbmlzbSB0byBzcGVjaWZ5IEFwcEJvdW5kIGRvbWFpbnMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODUyOAorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNTk5ODAzNDA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkcyBmdW5jdGlvbmFsaXR5IHRvIHJlYWQgYXBwLWJvdW5kIGRvbWFpbnMg
ZnJvbSB0aGUgSW5mby5wbGlzdCBvbgorICAgICAgICBiYWNrZ3JvdW5kIHRocmVhZCB2aWEgdGhl
IFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eSBhbmQgcmVwb3J0IHRvCisgICAgICAgIHRoZSBV
SSBwcm9jZXNzIHdoZXRoZXIgYSBkb21haW4gaXMgYXBwLWJvdW5kLiAKKworICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tOgorICAgICAgICAoLVtXS1dl
YnNpdGVEYXRhU3RvcmUgX2dldEFwcEJvdW5kRG9tYWluczpdKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaDoKKyAgICAgICAgVGVzdCBB
UEkgY2FsbCB0byBnZXQgYXBwQm91bmREb21haW5zLgorCisgICAgICAgICogVUlQcm9jZXNzL1dl
YkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1l
UG9saWN5TGlzdGVuZXJQcm94eTo6V2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5OjpkaWRSZWNlaXZlQXBwQm91
bmREb21haW5SZXN1bHQpOgorICAgICAgICAoV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5Ojpk
aWRSZWNlaXZlU2FmZUJyb3dzaW5nUmVzdWx0cyk6CisgICAgICAgIChXZWJGcmFtZVBvbGljeUxp
c3RlbmVyUHJveHk6OnVzZSk6CisgICAgICAgIChXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHk6
OmRvd25sb2FkKToKKyAgICAgICAgKFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eTo6aWdub3Jl
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5Lmg6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eTo6Y3JlYXRlKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViRnJhbWVQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YkZyYW1lUHJveHk6OnNldFVwUG9saWN5TGlzdGVuZXJQcm94eSk6CisgICAgICAgICogVUlQcm9j
ZXNzL1dlYkZyYW1lUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cDoKKyAgICAgICAgQWRkZWQgYSBuZXcgZnVuY3Rpb24gdG8gV2ViRnJhbWVQb2xpY3lMaXN0ZW5l
clByb3h5IHRvIHdhaXQgZm9yIHRoZQorICAgICAgICBhcHAtYm91bmQgZG9tYWlucyB0byBiZSBy
ZWFkIGJlZm9yZSBjb21wbGV0aW5nIGEgbmF2aWdhdGlvbi4gRWFjaAorICAgICAgICBvdGhlciBm
dW5jdGlvbiBtdXN0IG5vdyBjaGVjayBpZiBtX2lzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4g
aGFzCisgICAgICAgIGJlZW4gc2V0IGJlZm9yZSBzZW5kaW5nIGEgZnVsbCByZXBseS4gQWxzbyBh
ZGRlZCBhbiBlbnVtIGNsYXNzCisgICAgICAgIFNob3VsZEV4cGVjdEFwcEJvdW5kRG9tYWluUmVz
dWx0IHRvIHRlbGwgdGhlIGxpc3RlbmVyIG5vdCB0byB3YWl0IGZvcgorICAgICAgICB0aGUgcmVz
dWx0cyBpbiB1bmVjZXNzYXJ5IGNhc2VzLgorCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6aXNBcHBCb3VuZERvbWFpbiBjb25zdCk6IERlbGV0ZWQKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZVByb3h5OjpzZXRJc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKToKKyAg
ICAgICAgQWZ0ZXIgdGhlIGxpc3RlbmVyIHJlc3BvbmRzIHdpdGggdGhlIHJlc3VsdHMsIHNldCB0
aGUgbmV3CisgICAgICAgIHZhbHVlIGluIFdlYlBhZ2VQcm94eS4gV2Ugbm8gbG9uZ2VyIG5lZWQg
dG8gY2hlY2sgZm9yIGlzQXBwQm91bmQKKyAgICAgICAgZG9tYWluIG5vdyB0aGF0IHdlIGhhdmUg
cmVjZWl2ZWQgdGhlIHZhbHVlLgorCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGVj
aWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5OjpkZWNpZGVQb2xpY3lGb3JSZXNwb25zZVNoYXJlZCk6CisgICAgICAgIE5vIG5lZWQgdG8g
bGlzdGVuIGZvciBhcHAtYm91bmQgZG9tYWluIHJlc3BvbnNlIGhlcmUuCisKKyAgICAgICAgKiBV
SVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRh
L0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6YXBwQm91
bmREb21haW5zKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6YmVnaW5BcHBC
b3VuZERvbWFpbkNoZWNrKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Z2V0
QXBwQm91bmREb21haW5zRm9yVGVzdGluZyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL1dlYnNpdGVEYXRhU3RvcmUuaDoKKyAgICAgICAgUmVhZCB0aGUgYXBwLWJvdW5kIGRvbWFp
biBsaXN0IG9uIHRoZSBiYWNrZ3JvdW5kIHRocmVhZCwgYW5kIG9uY2UKKyAgICAgICAgZG9uZSwg
Y2FsbCB0aGUgbGlzdGVuZXIgb24gdGhlIG1haW4gdGhyZWFkLgorCiAyMDIwLTAzLTA1ICBLYXRl
IENoZW5leSAgPGthdGhlcmluZV9jaGVuZXlAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCB3ZWIg
cGFnZSBhZGRpdGlvbnMgdG8gV2ViUGFnZVByb3h5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbQppbmRleCA4NWFhZjdk
Njc5MTE1OTRiMDY1M2UzMjNhYmNhNjNjMTI0ZjhmODhhLi43NWJkYzkxZWU5MWZlN2JmYTE0OTQy
NmRhNGNlYTcxMTMwYmQzMWYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0KQEAgLTYwMCw0ICs2MDAsMTQgQEAg
LSAoX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gKilfY29uZmlndXJhdGlvbgogICAg
IHJldHVybiB3cmFwcGVyKF93ZWJzaXRlRGF0YVN0b3JlLT5jb25maWd1cmF0aW9uKCkuY29weSgp
KTsKIH0KIAorLSAodm9pZClfZ2V0QXBwQm91bmREb21haW5zOih2b2lkICheKShOU0FycmF5PE5T
U3RyaW5nICo+ICopKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgX3dlYnNpdGVEYXRhU3RvcmUt
PmdldEFwcEJvdW5kRG9tYWluc0ZvclRlc3RpbmcoW2NvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJs
b2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byYmIGRvbWFpbnMpIHsKKyAgICAgICAgVmVj
dG9yPFJlZlB0cjxBUEk6Ok9iamVjdD4+IGFwaURvbWFpbnMgPSBXVEY6Om1hcChkb21haW5zLCBb
XShhdXRvJiBkb21haW4pIHsKKyAgICAgICAgICAgIHJldHVybiBSZWZQdHI8QVBJOjpPYmplY3Q+
KEFQSTo6U3RyaW5nOjpjcmVhdGUoV1RGTW92ZShkb21haW4uc3RyaW5nKCkpKSk7CisgICAgICAg
IH0pOworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih3cmFwcGVyKEFQSTo6QXJyYXk6OmNyZWF0
ZShXVEZNb3ZlKGFwaURvbWFpbnMpKSkpOworICAgIH0pOworfQorCiBAZW5kCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJp
dmF0ZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFT
dG9yZVByaXZhdGUuaAppbmRleCA5ZTBlZTJiMDkxNmFlOWM2NDU3ZGMwOTUyYTFiNDBhYzg4Nzcz
OGEyLi40OTFlOWJlMGM4NjA5NDU4MWUwYmI0ZmY0M2EwNDM2MTJmMmRjZTVjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJp
dmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVE
YXRhU3RvcmVQcml2YXRlLmgKQEAgLTc3LDYgKzc3LDcgQEAgdHlwZWRlZiBOU19PUFRJT05TKE5T
VUludGVnZXIsIF9XS1dlYnNpdGVEYXRhU3RvcmVGZXRjaE9wdGlvbnMpIHsKIC0gKHZvaWQpX2Ns
ZWFyUmVzb3VyY2VMb2FkU3RhdGlzdGljczoodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRs
ZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsK
IC0gKHZvaWQpX2lzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlckZpcnN0UGFydHk6KE5TVVJM
ICopZmlyc3RQYXJ0eVVSTCB0aGlyZFBhcnR5OihOU1VSTCAqKXRoaXJkUGFydHlVUkwgY29tcGxl
dGlvbkhhbmRsZXI6KHZvaWQgKF4pKEJPT0wpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJ
TEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAtICh2b2lkKV9wcm9j
ZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9uSGFu
ZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsKKy0gKHZvaWQp
X2dldEFwcEJvdW5kRG9tYWluczoodm9pZCAoXikoTlNBcnJheTxOU1N0cmluZyAqPiAqKSljb21w
bGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tf
SU9TX1RCQSkpOwogCiBAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIHdlYWspIGlkIDxf
V0tXZWJzaXRlRGF0YVN0b3JlRGVsZWdhdGU+IF9kZWxlZ2F0ZSBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKDEwLjE1KSwgaW9zKDEzLjApKTsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwg
Y29weSkgX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gKl9jb25maWd1cmF0aW9uOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViRnJhbWVQb2xpY3lMaXN0ZW5l
clByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkZyYW1lUG9saWN5TGlzdGVu
ZXJQcm94eS5jcHAKaW5kZXggYTVmYWYzZmQ1ZTRiNWZmMmFmYTc4MzVlYWY5NmE0MWUzZmY0YWEz
Yi4uY2IwNDQ0ZTdkMTgwODk4ZjY3OWQyNjc1M2M2M2MzY2VjNzZiYjc4ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHku
Y3BwCkBAIC0zNSwzMCArMzUsNDUgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVdlYkZyYW1l
UG9saWN5TGlzdGVuZXJQcm94eTo6V2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5KFJlcGx5JiYg
cmVwbHksIFNob3VsZEV4cGVjdFNhZmVCcm93c2luZ1Jlc3VsdCBleHBlY3QpCitXZWJGcmFtZVBv
bGljeUxpc3RlbmVyUHJveHk6OldlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eShSZXBseSYmIHJl
cGx5LCBTaG91bGRFeHBlY3RTYWZlQnJvd3NpbmdSZXN1bHQgZXhwZWN0U2FmZUJyb3dzaW5nUmVz
dWx0LCBTaG91bGRFeHBlY3RBcHBCb3VuZERvbWFpblJlc3VsdCBleHBlY3RBcHBCb3VuZERvbWFp
blJlc3VsdCkKICAgICA6IG1fcmVwbHkoV1RGTW92ZShyZXBseSkpCiB7Ci0gICAgaWYgKGV4cGVj
dCA9PSBTaG91bGRFeHBlY3RTYWZlQnJvd3NpbmdSZXN1bHQ6Ok5vKQorICAgIGlmIChleHBlY3RT
YWZlQnJvd3NpbmdSZXN1bHQgPT0gU2hvdWxkRXhwZWN0U2FmZUJyb3dzaW5nUmVzdWx0OjpObykK
ICAgICAgICAgZGlkUmVjZWl2ZVNhZmVCcm93c2luZ1Jlc3VsdHMoeyB9KTsKKyAgICBpZiAoZXhw
ZWN0QXBwQm91bmREb21haW5SZXN1bHQgPT0gU2hvdWxkRXhwZWN0QXBwQm91bmREb21haW5SZXN1
bHQ6Ok5vKQorICAgICAgICBkaWRSZWNlaXZlQXBwQm91bmREb21haW5SZXN1bHQoeyB9KTsKIH0K
IAogV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5Ojp+V2ViRnJhbWVQb2xpY3lMaXN0ZW5lclBy
b3h5KCkgPSBkZWZhdWx0OwogCit2b2lkIFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eTo6ZGlk
UmVjZWl2ZUFwcEJvdW5kRG9tYWluUmVzdWx0KGJvb2wgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERv
bWFpbikKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byBpc0Fw
cEJvdW5kID0gaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiA/IE5hdmlnYXRpbmdUb0FwcEJv
dW5kRG9tYWluOjpZZXMgOiBOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbjo6Tm87CisgICAgaWYg
KG1fcG9saWN5UmVzdWx0ICYmIG1fc2FmZUJyb3dzaW5nV2FybmluZykgeworICAgICAgICBpZiAo
bV9yZXBseSkKKyAgICAgICAgICAgIG1fcmVwbHkoV2ViQ29yZTo6UG9saWN5QWN0aW9uOjpVc2Us
IG1fcG9saWN5UmVzdWx0LT5maXJzdC5nZXQoKSwgbV9wb2xpY3lSZXN1bHQtPnNlY29uZCwgV1RG
TW92ZSgqbV9zYWZlQnJvd3NpbmdXYXJuaW5nKSwgaXNBcHBCb3VuZCk7CisgICAgfSBlbHNlCisg
ICAgICAgIG1faXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiA9IGlzQXBwQm91bmQ7Cit9CisK
IHZvaWQgV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5OjpkaWRSZWNlaXZlU2FmZUJyb3dzaW5n
UmVzdWx0cyhSZWZQdHI8U2FmZUJyb3dzaW5nV2FybmluZz4mJiBzYWZlQnJvd3NpbmdXYXJuaW5n
KQogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKCFtX3NhZmVCcm93
c2luZ1dhcm5pbmcpOwotICAgIGlmIChtX3BvbGljeVJlc3VsdCkgeworICAgIGlmIChtX3BvbGlj
eVJlc3VsdCAmJiBtX2lzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4pIHsKICAgICAgICAgaWYg
KG1fcmVwbHkpCi0gICAgICAgICAgICBtX3JlcGx5KFdlYkNvcmU6OlBvbGljeUFjdGlvbjo6VXNl
LCBtX3BvbGljeVJlc3VsdC0+Zmlyc3QuZ2V0KCksIG1fcG9saWN5UmVzdWx0LT5zZWNvbmQsIFdU
Rk1vdmUoc2FmZUJyb3dzaW5nV2FybmluZykpOworICAgICAgICAgICAgbV9yZXBseShXZWJDb3Jl
OjpQb2xpY3lBY3Rpb246OlVzZSwgbV9wb2xpY3lSZXN1bHQtPmZpcnN0LmdldCgpLCBtX3BvbGlj
eVJlc3VsdC0+c2Vjb25kLCBXVEZNb3ZlKHNhZmVCcm93c2luZ1dhcm5pbmcpLCAqbV9pc05hdmln
YXRpbmdUb0FwcEJvdW5kRG9tYWluKTsKICAgICB9IGVsc2UKICAgICAgICAgbV9zYWZlQnJvd3Np
bmdXYXJuaW5nID0gV1RGTW92ZShzYWZlQnJvd3NpbmdXYXJuaW5nKTsKIH0KIAogdm9pZCBXZWJG
cmFtZVBvbGljeUxpc3RlbmVyUHJveHk6OnVzZShBUEk6OldlYnNpdGVQb2xpY2llcyogcG9saWNp
ZXMsIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNs
aWVudCkKIHsKLSAgICBpZiAobV9zYWZlQnJvd3NpbmdXYXJuaW5nKSB7CisgICAgaWYgKG1fc2Fm
ZUJyb3dzaW5nV2FybmluZyAmJiBtX2lzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4pIHsKICAg
ICAgICAgaWYgKG1fcmVwbHkpCi0gICAgICAgICAgICBtX3JlcGx5KFdlYkNvcmU6OlBvbGljeUFj
dGlvbjo6VXNlLCBwb2xpY2llcywgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgV1RGTW92
ZSgqbV9zYWZlQnJvd3NpbmdXYXJuaW5nKSk7CisgICAgICAgICAgICBtX3JlcGx5KFdlYkNvcmU6
OlBvbGljeUFjdGlvbjo6VXNlLCBwb2xpY2llcywgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVu
dCwgV1RGTW92ZSgqbV9zYWZlQnJvd3NpbmdXYXJuaW5nKSwgKm1faXNOYXZpZ2F0aW5nVG9BcHBC
b3VuZERvbWFpbik7CiAgICAgfSBlbHNlIGlmICghbV9wb2xpY3lSZXN1bHQpCiAgICAgICAgIG1f
cG9saWN5UmVzdWx0ID0ge3sgcG9saWNpZXMsIHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQg
fX07CiB9CkBAIC02NiwxMyArODEsMTMgQEAgdm9pZCBXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJv
eHk6OnVzZShBUEk6OldlYnNpdGVQb2xpY2llcyogcG9saWNpZXMsIFByb2Nlc3NTd2EKIHZvaWQg
V2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5Ojpkb3dubG9hZCgpCiB7CiAgICAgaWYgKG1fcmVw
bHkpCi0gICAgICAgIG1fcmVwbHkoV2ViQ29yZTo6UG9saWN5QWN0aW9uOjpEb3dubG9hZCwgbnVs
bHB0ciwgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudDo6Tm8sIHsgfSk7CisgICAgICAgIG1f
cmVwbHkoV2ViQ29yZTo6UG9saWN5QWN0aW9uOjpEb3dubG9hZCwgbnVsbHB0ciwgUHJvY2Vzc1N3
YXBSZXF1ZXN0ZWRCeUNsaWVudDo6Tm8sIHsgfSwgeyB9KTsKIH0KIAogdm9pZCBXZWJGcmFtZVBv
bGljeUxpc3RlbmVyUHJveHk6Omlnbm9yZSgpCiB7CiAgICAgaWYgKG1fcmVwbHkpCi0gICAgICAg
IG1fcmVwbHkoV2ViQ29yZTo6UG9saWN5QWN0aW9uOjpJZ25vcmUsIG51bGxwdHIsIFByb2Nlc3NT
d2FwUmVxdWVzdGVkQnlDbGllbnQ6Ok5vLCB7IH0pOworICAgICAgICBtX3JlcGx5KFdlYkNvcmU6
OlBvbGljeUFjdGlvbjo6SWdub3JlLCBudWxscHRyLCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xp
ZW50OjpObywgeyB9LCB7IH0pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eS5o
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5LmgK
aW5kZXggOWE2YmU5OWQ0MDczZWUxMDhiNGNiMjBmNzIxYzEwOGY3YzAxODhlOS4uNWJmYWU5Zjdi
M2VkZWFmZWI2MThjNWUwYjZkNmRjYTM5ZTc4M2E5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5LmgKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5LmgKQEAgLTI2LDYgKzI2
LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCisjaW5jbHVkZSAi
UG9saWN5RGVjaXNpb24uaCIKICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVyVHlwZXMuaD4K
ICNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CkBAIC0zOCwxNiArMzksMTcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFNhZmVC
cm93c2luZ1dhcm5pbmc7CiAKLWVudW0gY2xhc3MgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVu
dCB7IE5vLCBZZXMgfTsKLWVudW0gY2xhc3MgU2hvdWxkRXhwZWN0U2FmZUJyb3dzaW5nUmVzdWx0
IHsgTm8sIFllcyB9OworZW51bSBjbGFzcyBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50IDog
Ym9vbCB7IE5vLCBZZXMgfTsKK2VudW0gY2xhc3MgU2hvdWxkRXhwZWN0U2FmZUJyb3dzaW5nUmVz
dWx0IDogYm9vbCB7IE5vLCBZZXMgfTsKK2VudW0gY2xhc3MgU2hvdWxkRXhwZWN0QXBwQm91bmRE
b21haW5SZXN1bHQgOiBib29sIHsgTm8sIFllcyB9OwogCiBjbGFzcyBXZWJGcmFtZVBvbGljeUxp
c3RlbmVyUHJveHkgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpG
cmFtZVBvbGljeUxpc3RlbmVyPiB7CiBwdWJsaWM6CiAKLSAgICB1c2luZyBSZXBseSA9IENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6UG9saWN5QWN0aW9uLCBBUEk6OldlYnNpdGVQb2xp
Y2llcyosIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIFJlZlB0cjxTYWZlQnJvd3NpbmdX
YXJuaW5nPiYmKT47Ci0gICAgc3RhdGljIFJlZjxXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHk+
IGNyZWF0ZShSZXBseSYmIHJlcGx5LCBTaG91bGRFeHBlY3RTYWZlQnJvd3NpbmdSZXN1bHQgZXhw
ZWN0KQorICAgIHVzaW5nIFJlcGx5ID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpQ
b2xpY3lBY3Rpb24sIEFQSTo6V2Vic2l0ZVBvbGljaWVzKiwgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRC
eUNsaWVudCwgUmVmUHRyPFNhZmVCcm93c2luZ1dhcm5pbmc+JiYsIE5hdmlnYXRpbmdUb0FwcEJv
dW5kRG9tYWluKT47CisgICAgc3RhdGljIFJlZjxXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHk+
IGNyZWF0ZShSZXBseSYmIHJlcGx5LCBTaG91bGRFeHBlY3RTYWZlQnJvd3NpbmdSZXN1bHQgZXhw
ZWN0U2FmZUJyb3dzaW5nUmVzdWx0LCBTaG91bGRFeHBlY3RBcHBCb3VuZERvbWFpblJlc3VsdCBl
eHBlY3RBcHBCb3VuZERvbWFpblJlc3VsdCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eShXVEZNb3ZlKHJlcGx5KSwgZXhwZWN0
KSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQ
cm94eShXVEZNb3ZlKHJlcGx5KSwgZXhwZWN0U2FmZUJyb3dzaW5nUmVzdWx0LCBleHBlY3RBcHBC
b3VuZERvbWFpblJlc3VsdCkpOwogICAgIH0KICAgICB+V2ViRnJhbWVQb2xpY3lMaXN0ZW5lclBy
b3h5KCk7CiAKQEAgLTU2LDEyICs1OCwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBpZ25vcmUoKTsK
ICAgICAKICAgICB2b2lkIGRpZFJlY2VpdmVTYWZlQnJvd3NpbmdSZXN1bHRzKFJlZlB0cjxTYWZl
QnJvd3NpbmdXYXJuaW5nPiYmKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVBcHBCb3VuZERvbWFpblJl
c3VsdChib29sKTsKIAogcHJpdmF0ZToKLSAgICBXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHko
UmVwbHkmJiwgU2hvdWxkRXhwZWN0U2FmZUJyb3dzaW5nUmVzdWx0KTsKKyAgICBXZWJGcmFtZVBv
bGljeUxpc3RlbmVyUHJveHkoUmVwbHkmJiwgU2hvdWxkRXhwZWN0U2FmZUJyb3dzaW5nUmVzdWx0
LCBTaG91bGRFeHBlY3RBcHBCb3VuZERvbWFpblJlc3VsdCk7CiAKICAgICBPcHRpb25hbDxzdGQ6
OnBhaXI8UmVmUHRyPEFQSTo6V2Vic2l0ZVBvbGljaWVzPiwgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRC
eUNsaWVudD4+IG1fcG9saWN5UmVzdWx0OwogICAgIE9wdGlvbmFsPFJlZlB0cjxTYWZlQnJvd3Np
bmdXYXJuaW5nPj4gbV9zYWZlQnJvd3NpbmdXYXJuaW5nOworICAgIE9wdGlvbmFsPE5hdmlnYXRp
bmdUb0FwcEJvdW5kRG9tYWluPiBtX2lzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW47CiAgICAg
UmVwbHkgbV9yZXBseTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYkZyYW1lUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViRnJhbWVQcm94
eS5jcHAKaW5kZXggNGQzMmYwMzVmMGE0MmQ5Y2I2ZDNjOWRiYzZmNDIwOTBjM2RiMjIzNS4uMzQ2
YzA4MDU3ZTJiMTJmMDY1YjA0OTEyZDhkZjJjODYzMmIwOTc1YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViRnJhbWVQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViRnJhbWVQcm94eS5jcHAKQEAgLTE5MywxNCArMTkzLDE0IEBAIHZvaWQgV2Vi
RnJhbWVQcm94eTo6ZGlkQ2hhbmdlVGl0bGUoY29uc3QgU3RyaW5nJiB0aXRsZSkKICAgICBtX3Rp
dGxlID0gdGl0bGU7CiB9CiAKLVdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eSYgV2ViRnJhbWVQ
cm94eTo6c2V0VXBQb2xpY3lMaXN0ZW5lclByb3h5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUG9s
aWN5QWN0aW9uLCBBUEk6OldlYnNpdGVQb2xpY2llcyosIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlD
bGllbnQsIFJlZlB0cjxTYWZlQnJvd3NpbmdXYXJuaW5nPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxl
ciwgU2hvdWxkRXhwZWN0U2FmZUJyb3dzaW5nUmVzdWx0IGV4cGVjdCkKK1dlYkZyYW1lUG9saWN5
TGlzdGVuZXJQcm94eSYgV2ViRnJhbWVQcm94eTo6c2V0VXBQb2xpY3lMaXN0ZW5lclByb3h5KENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoUG9saWN5QWN0aW9uLCBBUEk6OldlYnNpdGVQb2xpY2llcyos
IFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIFJlZlB0cjxTYWZlQnJvd3NpbmdXYXJuaW5n
PiYmLCBOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbik+JiYgY29tcGxldGlvbkhhbmRsZXIsIFNo
b3VsZEV4cGVjdFNhZmVCcm93c2luZ1Jlc3VsdCBleHBlY3RTYWZlQnJvd3NpbmdSZXN1bHQsIFNo
b3VsZEV4cGVjdEFwcEJvdW5kRG9tYWluUmVzdWx0IGV4cGVjdEFwcEJvdW5kRG9tYWluUmVzdWx0
KQogewogICAgIGlmIChtX2FjdGl2ZUxpc3RlbmVyKQogICAgICAgICBtX2FjdGl2ZUxpc3RlbmVy
LT5pZ25vcmUoKTsKLSAgICBtX2FjdGl2ZUxpc3RlbmVyID0gV2ViRnJhbWVQb2xpY3lMaXN0ZW5l
clByb3h5OjpjcmVhdGUoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKFBvbGljeUFjdGlv
biBhY3Rpb24sIEFQSTo6V2Vic2l0ZVBvbGljaWVzKiBwb2xpY2llcywgUHJvY2Vzc1N3YXBSZXF1
ZXN0ZWRCeUNsaWVudCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBSZWZQdHI8U2FmZUJy
b3dzaW5nV2FybmluZz4mJiBzYWZlQnJvd3NpbmdXYXJuaW5nKSBtdXRhYmxlIHsKLSAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoYWN0aW9uLCBwb2xpY2llcywgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRC
eUNsaWVudCwgV1RGTW92ZShzYWZlQnJvd3NpbmdXYXJuaW5nKSk7CisgICAgbV9hY3RpdmVMaXN0
ZW5lciA9IFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eTo6Y3JlYXRlKFt0aGlzLCBwcm90ZWN0
ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildIChQb2xpY3lBY3Rpb24gYWN0aW9uLCBBUEk6OldlYnNpdGVQb2xpY2ll
cyogcG9saWNpZXMsIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQgcHJvY2Vzc1N3YXBSZXF1
ZXN0ZWRCeUNsaWVudCwgUmVmUHRyPFNhZmVCcm93c2luZ1dhcm5pbmc+JiYgc2FmZUJyb3dzaW5n
V2FybmluZywgTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4gaXNOYXZpZ2F0aW5nVG9BcHBCb3Vu
ZERvbWFpbikgbXV0YWJsZSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGFjdGlvbiwgcG9s
aWNpZXMsIHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIFdURk1vdmUoc2FmZUJyb3dzaW5n
V2FybmluZyksIGlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4pOwogICAgICAgICBtX2FjdGl2
ZUxpc3RlbmVyID0gbnVsbHB0cjsKLSAgICB9LCBleHBlY3QpOworICAgIH0sIGV4cGVjdFNhZmVC
cm93c2luZ1Jlc3VsdCwgZXhwZWN0QXBwQm91bmREb21haW5SZXN1bHQpOwogICAgIHJldHVybiAq
bV9hY3RpdmVMaXN0ZW5lcjsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViRnJhbWVQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViRnJhbWVQcm94
eS5oCmluZGV4IGJmNmQ4OTZkODdiNzYyNjUxMTM4ZmMyOTg0ZjI1OTcxMjBkMzFmNGYuLjYwMWY0
MDRhMTJiYThkM2EzYjVkZDkwZTU4NmQ5YTk1NmE2M2EzY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYkZyYW1lUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJGcmFtZVByb3h5LmgKQEAgLTUzLDggKzUzLDggQEAgY2xhc3MgU2FmZUJyb3dzaW5n
V2FybmluZzsKIGNsYXNzIFdlYkNlcnRpZmljYXRlSW5mbzsKIGNsYXNzIFdlYkZyYW1lUG9saWN5
TGlzdGVuZXJQcm94eTsKIGNsYXNzIFdlYnNpdGVEYXRhU3RvcmU7Ci1lbnVtIGNsYXNzIFNob3Vs
ZEV4cGVjdFNhZmVCcm93c2luZ1Jlc3VsdDsKLWVudW0gY2xhc3MgUHJvY2Vzc1N3YXBSZXF1ZXN0
ZWRCeUNsaWVudDsKK2VudW0gY2xhc3MgU2hvdWxkRXhwZWN0U2FmZUJyb3dzaW5nUmVzdWx0IDog
Ym9vbDsKK2VudW0gY2xhc3MgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCA6IGJvb2w7CiBz
dHJ1Y3QgV2Vic2l0ZVBvbGljaWVzRGF0YTsKIAogY2xhc3MgV2ViRnJhbWVQcm94eSA6IHB1Ymxp
YyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OkZyYW1lPiB7CkBAIC0xMjAsNyAr
MTIwLDcgQEAgcHVibGljOgogICAgIHZvaWQgZGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbihjb25z
dCBVUkwmKTsgLy8gZWcuIGFuY2hvciBuYXZpZ2F0aW9uLCBzZXNzaW9uIHN0YXRlIGNoYW5nZS4K
ICAgICB2b2lkIGRpZENoYW5nZVRpdGxlKGNvbnN0IFN0cmluZyYpOwogCi0gICAgV2ViRnJhbWVQ
b2xpY3lMaXN0ZW5lclByb3h5JiBzZXRVcFBvbGljeUxpc3RlbmVyUHJveHkoQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChXZWJDb3JlOjpQb2xpY3lBY3Rpb24sIEFQSTo6V2Vic2l0ZVBvbGljaWVzKiwg
UHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgUmVmUHRyPFNhZmVCcm93c2luZ1dhcm5pbmc+
JiYpPiYmLCBTaG91bGRFeHBlY3RTYWZlQnJvd3NpbmdSZXN1bHQpOworICAgIFdlYkZyYW1lUG9s
aWN5TGlzdGVuZXJQcm94eSYgc2V0VXBQb2xpY3lMaXN0ZW5lclByb3h5KENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoV2ViQ29yZTo6UG9saWN5QWN0aW9uLCBBUEk6OldlYnNpdGVQb2xpY2llcyosIFBy
b2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIFJlZlB0cjxTYWZlQnJvd3NpbmdXYXJuaW5nPiYm
LCBOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbik+JiYsIFNob3VsZEV4cGVjdFNhZmVCcm93c2lu
Z1Jlc3VsdCwgU2hvdWxkRXhwZWN0QXBwQm91bmREb21haW5SZXN1bHQpOwogCiAjaWYgRU5BQkxF
KENPTlRFTlRfRklMVEVSSU5HKQogICAgIHZvaWQgY29udGVudEZpbHRlckRpZEJsb2NrTG9hZChX
ZWJDb3JlOjpDb250ZW50RmlsdGVyVW5ibG9ja0hhbmRsZXIgY29udGVudEZpbHRlclVuYmxvY2tI
YW5kbGVyKSB7IG1fY29udGVudEZpbHRlclVuYmxvY2tIYW5kbGVyID0gV1RGTW92ZShjb250ZW50
RmlsdGVyVW5ibG9ja0hhbmRsZXIpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcAppbmRleCAyODc5ZWJhOGNlNWFmNzU3YTNiMGE4MDJiMDliOTcxZWE1MjM2NGIwLi44
ZDI0MGIyNmQxMDQzOGM5NTA1MGI0YzhkM2JmYTkxNGY1NWIyOTUwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTI3OSw3ICsyNzksNiBAQAogI2lmIFVTRShB
UFBMRV9JTlRFUk5BTF9TREspCiAjaW5jbHVkZSA8V2ViS2l0QWRkaXRpb25zL1dlYlBhZ2VQcm94
eUFkZGl0aW9ucy5oPgogI2Vsc2UKLSNkZWZpbmUgV0VCX1BBR0VfUFJPWFlfQURESVRJT05TX0lT
QVBQQk9VTkRET01BSU4KICNkZWZpbmUgV0VCX1BBR0VfUFJPWFlfQURESVRJT05TX1NFVElTTkFW
SUdBVElOR1RPQVBQQk9VTkRET01BSU4KICNlbmRpZgogCkBAIC0zMDk1LDIzICszMDk0LDExIEBA
IHByaXZhdGU6CiAgICAgUG9saWN5Q2hlY2tJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKIH07CiAK
LQotYm9vbCBXZWJQYWdlUHJveHk6OmlzQXBwQm91bmREb21haW4oY29uc3QgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4mIGRvbWFpbikgY29uc3QKLXsKLSAgICBXRUJfUEFHRV9QUk9YWV9BRERJ
VElPTlNfSVNBUFBCT1VORERPTUFJTgotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYlBh
Z2VQcm94eTo6aXNBcHBCb3VuZERvbWFpbihjb25zdCBVUkwmIHVybCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gaXNBcHBCb3VuZERvbWFpbihSZWdpc3RyYWJsZURvbWFpbih1cmwpKTsKLX0KLQotdm9p
ZCBXZWJQYWdlUHJveHk6OnNldElzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4oYm9vbCBpc01h
aW5GcmFtZSwgY29uc3QgVVJMJiByZXF1ZXN0VVJMKQordm9pZCBXZWJQYWdlUHJveHk6OnNldElz
TmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4oYm9vbCBpc01haW5GcmFtZSwgY29uc3QgVVJMJiBy
ZXF1ZXN0VVJMLCBOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiBpc05hdmlnYXRpbmdUb0FwcEJv
dW5kRG9tYWluKQogewogICAgIGlmIChtX3ByZWZlcmVuY2VzLT5pc0luQXBwQnJvd3NlclByaXZh
Y3lFbmFibGVkKCkgJiYgaXNNYWluRnJhbWUpIHsKICAgICAgICAgV0VCX1BBR0VfUFJPWFlfQURE
SVRJT05TX1NFVElTTkFWSUdBVElOR1RPQVBQQk9VTkRET01BSU4KLSAgICAgICAgaWYgKCFpc0Fw
cEJvdW5kRG9tYWluKHJlcXVlc3RVUkwpKSB7CisgICAgICAgIGlmIChpc05hdmlnYXRpbmdUb0Fw
cEJvdW5kRG9tYWluID09IE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluOjpObykgewogICAgICAg
ICAgICAgbV9jb25maWd1cmF0aW9uLT5zZXRXZWJWaWV3Q2F0ZWdvcnkoV2ViVmlld0NhdGVnb3J5
OjpJbkFwcEJyb3dzZXIpOwogICAgICAgICAgICAgbV9pc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9t
YWluID0gTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW46Ok5vOwogICAgICAgICAgICAgbV9oYXNO
YXZpZ2F0ZWRBd2F5RnJvbUFwcEJvdW5kRG9tYWluID0gTmF2aWdhdGVkQXdheUZyb21BcHBCb3Vu
ZERvbWFpbjo6WWVzOwpAQCAtNTAxMyw4ICs1MDAwLDYgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRl
Y2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oUmVmPFdlYlByb2Nlc3NQcm94eT4mJiBwcm9j
ZXMKICAgICBpZiAobmF2aWdhdGlvbklEICYmICFmcm9tQVBJKQogICAgICAgICBtX3BhZ2VMb2Fk
U3RhdGUuY2xlYXJQZW5kaW5nQVBJUmVxdWVzdCh0cmFuc2FjdGlvbik7CiAKLSAgICBzZXRJc05h
dmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKGZyYW1lLmlzTWFpbkZyYW1lKCksIHJlcXVlc3QudXJs
KCkpOwotCiAgICAgaWYgKCFjaGVja1VSTFJlY2VpdmVkRnJvbUN1cnJlbnRPclByZXZpb3VzV2Vi
UHJvY2Vzcyhwcm9jZXNzLCByZXF1ZXN0LnVybCgpKSkgewogICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUl9JRl9BTExPV0VEKFByb2Nlc3MsICJJZ25vcmluZyByZXF1ZXN0IHRvIGxvYWQgdGhpcyBt
YWluIHJlc291cmNlIGJlY2F1c2UgaXQgaXMgb3V0c2lkZSB0aGUgc2FuZGJveCIpOwogICAgICAg
ICBzZW5kZXItPnNlbmQoUG9saWN5RGVjaXNpb24geyBzZW5kZXItPmlkZW50aWZpZXIoKSwgaXNO
YXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbigpLCBoYXNOYXZpZ2F0ZWRBd2F5RnJvbUFwcEJvdW5k
RG9tYWluKCksIFBvbGljeUFjdGlvbjo6SWdub3JlLCAwLCBEb3dubG9hZElEKCksIFdURjo6bnVs
bG9wdCB9KTsKQEAgLTUwNzAsNyArNTA1NSwxMCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGVjaWRl
UG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihSZWY8V2ViUHJvY2Vzc1Byb3h5PiYmIHByb2Nlcwog
ICAgIGlmICghbV9wcmVmZXJlbmNlcy0+c2FmZUJyb3dzaW5nRW5hYmxlZCgpKQogICAgICAgICBz
aG91bGRFeHBlY3RTYWZlQnJvd3NpbmdSZXN1bHQgPSBTaG91bGRFeHBlY3RTYWZlQnJvd3NpbmdS
ZXN1bHQ6Ok5vOwogCi0gICAgYXV0byBsaXN0ZW5lciA9IG1ha2VSZWYoZnJhbWUuc2V0VXBQb2xp
Y3lMaXN0ZW5lclByb3h5KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGZy
YW1lID0gbWFrZVJlZihmcmFtZSksIHNlbmRlciA9IFdURk1vdmUoc2VuZGVyKSwgbmF2aWdhdGlv
bl0gKFBvbGljeUFjdGlvbiBwb2xpY3lBY3Rpb24sIEFQSTo6V2Vic2l0ZVBvbGljaWVzKiBwb2xp
Y2llcywgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5
Q2xpZW50LCBSZWZQdHI8U2FmZUJyb3dzaW5nV2FybmluZz4mJiBzYWZlQnJvd3NpbmdXYXJuaW5n
KSBtdXRhYmxlIHsKKyAgICBhdXRvIGxpc3RlbmVyID0gbWFrZVJlZihmcmFtZS5zZXRVcFBvbGlj
eUxpc3RlbmVyUHJveHkoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgZnJh
bWUgPSBtYWtlUmVmKGZyYW1lKSwgc2VuZGVyID0gV1RGTW92ZShzZW5kZXIpLCBuYXZpZ2F0aW9u
XSAoUG9saWN5QWN0aW9uIHBvbGljeUFjdGlvbiwgQVBJOjpXZWJzaXRlUG9saWNpZXMqIHBvbGlj
aWVzLCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50IHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlD
bGllbnQsIFJlZlB0cjxTYWZlQnJvd3NpbmdXYXJuaW5nPiYmIHNhZmVCcm93c2luZ1dhcm5pbmcs
IE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluIGlzQXBwQm91bmREb21haW4pIG11dGFibGUgewor
CisgICAgICAgIGlmIChwb2xpY3lBY3Rpb24gIT0gUG9saWN5QWN0aW9uOjpJZ25vcmUpCisgICAg
ICAgICAgICBzZXRJc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKGZyYW1lLT5pc01haW5GcmFt
ZSgpLCBuYXZpZ2F0aW9uLT5jdXJyZW50UmVxdWVzdCgpLnVybCgpLCBpc0FwcEJvdW5kRG9tYWlu
KTsKIAogICAgICAgICBhdXRvIGNvbXBsZXRpb25IYW5kbGVyID0gW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBwcm90ZWN0ZWRUaGlzLmNvcHlSZWYoKSwgZnJhbWUgPSBmcmFtZS5jb3B5UmVmKCksIHNl
bmRlciA9IFdURk1vdmUoc2VuZGVyKSwgbmF2aWdhdGlvbiwgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRC
eUNsaWVudCwgcG9saWNpZXMgPSBtYWtlUmVmUHRyKHBvbGljaWVzKV0gKFBvbGljeUFjdGlvbiBw
b2xpY3lBY3Rpb24pIG11dGFibGUgewogICAgICAgICAgICAgaWYgKGZyYW1lLT5pc01haW5GcmFt
ZSgpKSB7CkBAIC01MTE4LDkgKzUxMDYsMTEgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRlY2lkZVBv
bGljeUZvck5hdmlnYXRpb25BY3Rpb24oUmVmPFdlYlByb2Nlc3NQcm94eT4mJiBwcm9jZXMKICAg
ICAgICAgfQogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihwb2xpY3lBY3Rpb24pOwogCi0gICAg
fSwgc2hvdWxkRXhwZWN0U2FmZUJyb3dzaW5nUmVzdWx0KSk7CisgICAgfSwgc2hvdWxkRXhwZWN0
U2FmZUJyb3dzaW5nUmVzdWx0LCBTaG91bGRFeHBlY3RBcHBCb3VuZERvbWFpblJlc3VsdDo6WWVz
KSk7CiAgICAgaWYgKHNob3VsZEV4cGVjdFNhZmVCcm93c2luZ1Jlc3VsdCA9PSBTaG91bGRFeHBl
Y3RTYWZlQnJvd3NpbmdSZXN1bHQ6OlllcykKICAgICAgICAgYmVnaW5TYWZlQnJvd3NpbmdDaGVj
ayhyZXF1ZXN0LnVybCgpLCBmcmFtZS5pc01haW5GcmFtZSgpLCBsaXN0ZW5lcik7CisgICAgCisg
ICAgbV93ZWJzaXRlRGF0YVN0b3JlLT5iZWdpbkFwcEJvdW5kRG9tYWluQ2hlY2soUmVnaXN0cmFi
bGVEb21haW4geyByZXF1ZXN0LnVybCgpIH0sIGxpc3RlbmVyKTsKIAogICAgIEFQSTo6TmF2aWdh
dGlvbiogbWFpbkZyYW1lTmF2aWdhdGlvbiA9IGZyYW1lLmlzTWFpbkZyYW1lKCkgPyBuYXZpZ2F0
aW9uLmdldCgpIDogbnVsbHB0cjsKICAgICBXZWJGcmFtZVByb3h5KiBvcmlnaW5hdGluZ0ZyYW1l
ID0gb3JpZ2luYXRpbmdGcmFtZUluZm9EYXRhLmZyYW1lSUQgPyBwcm9jZXNzLT53ZWJGcmFtZSgq
b3JpZ2luYXRpbmdGcmFtZUluZm9EYXRhLmZyYW1lSUQpIDogbnVsbHB0cjsKQEAgLTUyNTEsNyAr
NTI0MSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rp
b24oRnJhbWVJZGVudGlmaWVyIGZyYW1lSUQsIEZyYW1lCiAgICAgTUVTU0FHRV9DSEVDSyhtX3By
b2Nlc3MsIGZyYW1lKTsKICAgICBNRVNTQUdFX0NIRUNLX1VSTChtX3Byb2Nlc3MsIHJlcXVlc3Qu
dXJsKCkpOwogCi0gICAgYXV0byBsaXN0ZW5lciA9IG1ha2VSZWYoZnJhbWUtPnNldFVwUG9saWN5
TGlzdGVuZXJQcm94eShbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBpZGVu
dGlmaWVyLCBsaXN0ZW5lcklELCBmcmFtZUlEXSAoUG9saWN5QWN0aW9uIHBvbGljeUFjdGlvbiwg
QVBJOjpXZWJzaXRlUG9saWNpZXMqLCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50IHByb2Nl
c3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIFJlZlB0cjxTYWZlQnJvd3NpbmdXYXJuaW5nPiYmIHNh
ZmVCcm93c2luZ1dhcm5pbmcpIG11dGFibGUgeworICAgIGF1dG8gbGlzdGVuZXIgPSBtYWtlUmVm
KGZyYW1lLT5zZXRVcFBvbGljeUxpc3RlbmVyUHJveHkoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBt
YWtlUmVmKCp0aGlzKSwgaWRlbnRpZmllciwgbGlzdGVuZXJJRCwgZnJhbWVJRF0gKFBvbGljeUFj
dGlvbiBwb2xpY3lBY3Rpb24sIEFQSTo6V2Vic2l0ZVBvbGljaWVzKiwgUHJvY2Vzc1N3YXBSZXF1
ZXN0ZWRCeUNsaWVudCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBSZWZQdHI8U2FmZUJy
b3dzaW5nV2FybmluZz4mJiBzYWZlQnJvd3NpbmdXYXJuaW5nLCBOYXZpZ2F0aW5nVG9BcHBCb3Vu
ZERvbWFpbiBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKSBtdXRhYmxlIHsKICAgICAgICAg
Ly8gRklYTUU6IEFzc2VydCB0aGUgQVBJOjpXZWJzaXRlUG9saWNpZXMqIGlzIG51bGxwdHIgaGVy
ZSBvbmNlIGNsaWVudHMgb2YgV0tGcmFtZVBvbGljeUxpc3RlbmVyVXNlV2l0aFBvbGljaWVzIGdv
IGF3YXkuCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGll
bnQgPT0gUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudDo6Tm8pOwogICAgICAgICBBU1NFUlRf
VU5VU0VEKHNhZmVCcm93c2luZ1dhcm5pbmcsICFzYWZlQnJvd3NpbmdXYXJuaW5nKTsKQEAgLTUy
NjEsNyArNTI1MSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JOZXdXaW5k
b3dBY3Rpb24oRnJhbWVJZGVudGlmaWVyIGZyYW1lSUQsIEZyYW1lCiAgICAgICAgIH0pOwogCiAg
ICAgICAgIHJlY2VpdmVkUG9saWN5RGVjaXNpb24ocG9saWN5QWN0aW9uLCBudWxscHRyLCBXVEY6
Om51bGxvcHQsIFdURk1vdmUoc2VuZGVyKSk7Ci0gICAgfSwgU2hvdWxkRXhwZWN0U2FmZUJyb3dz
aW5nUmVzdWx0OjpObykpOworICAgIH0sIFNob3VsZEV4cGVjdFNhZmVCcm93c2luZ1Jlc3VsdDo6
Tm8sIFNob3VsZEV4cGVjdEFwcEJvdW5kRG9tYWluUmVzdWx0OjpObykpOwogCiAgICAgaWYgKG1f
cG9saWN5Q2xpZW50KQogICAgICAgICBtX3BvbGljeUNsaWVudC0+ZGVjaWRlUG9saWN5Rm9yTmV3
V2luZG93QWN0aW9uKCp0aGlzLCAqZnJhbWUsIG5hdmlnYXRpb25BY3Rpb25EYXRhLCByZXF1ZXN0
LCBmcmFtZU5hbWUsIFdURk1vdmUobGlzdGVuZXIpLCBtX3Byb2Nlc3MtPnRyYW5zZm9ybUhhbmRs
ZXNUb09iamVjdHModXNlckRhdGEub2JqZWN0KCkpLmdldCgpKTsKQEAgLTUyOTcsMTAgKzUyODcs
OSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGVjaWRlUG9saWN5Rm9yUmVzcG9uc2VTaGFyZWQoUmVm
PFdlYlByb2Nlc3NQcm94eT4mJiBwcm9jZXNzLAogICAgIE1FU1NBR0VfQ0hFQ0socHJvY2Vzcywg
ZnJhbWUpOwogICAgIE1FU1NBR0VfQ0hFQ0tfVVJMKHByb2Nlc3MsIHJlcXVlc3QudXJsKCkpOwog
ICAgIE1FU1NBR0VfQ0hFQ0tfVVJMKHByb2Nlc3MsIHJlc3BvbnNlLnVybCgpKTsKLQogICAgIFJl
ZlB0cjxBUEk6Ok5hdmlnYXRpb24+IG5hdmlnYXRpb24gPSBuYXZpZ2F0aW9uSUQgPyBtX25hdmln
YXRpb25TdGF0ZS0+bmF2aWdhdGlvbihuYXZpZ2F0aW9uSUQpIDogbnVsbHB0cjsKICAgICBhdXRv
IGxpc3RlbmVyID0gbWFrZVJlZihmcmFtZS0+c2V0VXBQb2xpY3lMaXN0ZW5lclByb3h5KFt0aGlz
LCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHdlYlBhZ2VJRCwgZnJhbWVJRCwgaWRl
bnRpZmllciwgbGlzdGVuZXJJRCwgbmF2aWdhdGlvbiA9IFdURk1vdmUobmF2aWdhdGlvbiksCi0g
ICAgICAgIHByb2Nlc3MgPSBwcm9jZXNzLmNvcHlSZWYoKV0gKFBvbGljeUFjdGlvbiBwb2xpY3lB
Y3Rpb24sIEFQSTo6V2Vic2l0ZVBvbGljaWVzKiwgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVu
dCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBSZWZQdHI8U2FmZUJyb3dzaW5nV2Fybmlu
Zz4mJiBzYWZlQnJvd3NpbmdXYXJuaW5nKSBtdXRhYmxlIHsKKyAgICAgICAgcHJvY2VzcyA9IHBy
b2Nlc3MuY29weVJlZigpXSAoUG9saWN5QWN0aW9uIHBvbGljeUFjdGlvbiwgQVBJOjpXZWJzaXRl
UG9saWNpZXMqLCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50IHByb2Nlc3NTd2FwUmVxdWVz
dGVkQnlDbGllbnQsIFJlZlB0cjxTYWZlQnJvd3NpbmdXYXJuaW5nPiYmIHNhZmVCcm93c2luZ1dh
cm5pbmcsIE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluIGlzTmF2aWdhdGluZ1RvQXBwQm91bmRE
b21haW4pIG11dGFibGUgewogICAgICAgICAvLyBGSVhNRTogQXNzZXJ0IHRoZSBBUEk6OldlYnNp
dGVQb2xpY2llcyogaXMgbnVsbHB0ciBoZXJlIG9uY2UgY2xpZW50cyBvZiBXS0ZyYW1lUG9saWN5
TGlzdGVuZXJVc2VXaXRoUG9saWNpZXMgZ28gYXdheS4KICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
cHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCA9PSBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xp
ZW50OjpObyk7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoc2FmZUJyb3dzaW5nV2FybmluZywgIXNh
ZmVCcm93c2luZ1dhcm5pbmcpOwpAQCAtNTMxMCw4ICs1Mjk5LDcgQEAgdm9pZCBXZWJQYWdlUHJv
eHk6OmRlY2lkZVBvbGljeUZvclJlc3BvbnNlU2hhcmVkKFJlZjxXZWJQcm9jZXNzUHJveHk+JiYg
cHJvY2VzcywKICAgICAgICAgfSk7CiAgICAgICAgIAogICAgICAgICByZWNlaXZlZFBvbGljeURl
Y2lzaW9uKHBvbGljeUFjdGlvbiwgbmF2aWdhdGlvbi5nZXQoKSwgV1RGOjpudWxsb3B0LCBXVEZN
b3ZlKHNlbmRlcikpOwotICAgIH0sIFNob3VsZEV4cGVjdFNhZmVCcm93c2luZ1Jlc3VsdDo6Tm8p
KTsKLQorICAgIH0sIFNob3VsZEV4cGVjdFNhZmVCcm93c2luZ1Jlc3VsdDo6Tm8sIFNob3VsZEV4
cGVjdEFwcEJvdW5kRG9tYWluUmVzdWx0OjpObykpOwogICAgIGlmIChtX3BvbGljeUNsaWVudCkK
ICAgICAgICAgbV9wb2xpY3lDbGllbnQtPmRlY2lkZVBvbGljeUZvclJlc3BvbnNlKCp0aGlzLCAq
ZnJhbWUsIHJlc3BvbnNlLCByZXF1ZXN0LCBjYW5TaG93TUlNRVR5cGUsIFdURk1vdmUobGlzdGVu
ZXIpLCBwcm9jZXNzLT50cmFuc2Zvcm1IYW5kbGVzVG9PYmplY3RzKHVzZXJEYXRhLm9iamVjdCgp
KS5nZXQoKSk7CiAgICAgZWxzZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5o
CmluZGV4IGM2OGU1NzcxMzVkNDczYjAzMjBhYmU2ZDhkZjNiY2E5MmNmZGJhY2MuLmI3NzllYjIw
MDMwYzM3OGM2MDRmZjRiMWYzNzhiYzUxOWNiYmU3ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5oCkBAIC0zNDUsNyArMzQ1LDcgQEAgc3RydWN0IFVSTFNjaGVtZVRhc2tQ
YXJhbWV0ZXJzOwogc3RydWN0IFVzZXJNZXNzYWdlOwogCiBlbnVtIGNsYXNzIE5lZ290aWF0ZWRM
ZWdhY3lUTFMgOiBib29sOwotZW51bSBjbGFzcyBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50
OworZW51bSBjbGFzcyBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50IDogYm9vbDsKIGVudW0g
Y2xhc3MgVW5kb09yUmVkbyA6IGJvb2w7CiBlbnVtIGNsYXNzIFdlYkNvbnRlbnRNb2RlIDogdWlu
dDhfdDsKIApAQCAtMjI2Miw5ICsyMjYyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHRyeUNsb3Nl
VGltZWRPdXQoKTsKICAgICB2b2lkIG1ha2VTdG9yYWdlU3BhY2VSZXF1ZXN0KFdlYkNvcmU6OkZy
YW1lSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJp
bmcmIGRhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdWludDY0X3QgY3Vy
cmVudFF1b3RhLCB1aW50NjRfdCBjdXJyZW50T3JpZ2luVXNhZ2UsIHVpbnQ2NF90IGN1cnJlbnRE
YXRhYmFzZVVzYWdlLCB1aW50NjRfdCBleHBlY3RlZFVzYWdlLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKHVpbnQ2NF90KT4mJik7CiAgICAgICAgIAotICAgIGJvb2wgaXNBcHBCb3VuZERvbWFpbihj
b25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0OwotICAgIGJvb2wgaXNBcHBC
b3VuZERvbWFpbihjb25zdCBVUkwmKSBjb25zdDsKLSAgICB2b2lkIHNldElzTmF2aWdhdGluZ1Rv
QXBwQm91bmREb21haW4oYm9vbCBpc01haW5GcmFtZSwgY29uc3QgVVJMJik7CisgICAgdm9pZCBz
ZXRJc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKGJvb2wgaXNNYWluRnJhbWUsIGNvbnN0IFVS
TCYsIE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKTsKICAgICBOYXZpZ2F0aW5nVG9BcHBCb3Vu
ZERvbWFpbiBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKCkgY29uc3QgeyByZXR1cm4gbV9p
c05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluOyB9CiAgICAgTmF2aWdhdGVkQXdheUZyb21BcHBC
b3VuZERvbWFpbiBoYXNOYXZpZ2F0ZWRBd2F5RnJvbUFwcEJvdW5kRG9tYWluKCkgY29uc3QgeyBy
ZXR1cm4gbV9oYXNOYXZpZ2F0ZWRBd2F5RnJvbUFwcEJvdW5kRG9tYWluOyB9CiAgICAgICAgIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKaW5kZXggNTE1NWJhOGI0YTAz
NjI3ZGRmNWQ1NmQzMjM3MzFlZWI3Y2MwOTBhMC4uMTA2OGY2MjU1MzgzOTljYmU4Njk2ZjhiYzAx
OGYyMDgwNDcwMmNhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJv
Y2Vzc1Bvb2wuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5o
CkBAIC0xMjMsNyArMTIzLDcgQEAgaW50IHdlYlByb2Nlc3NMYXRlbmN5UU9TKCk7CiBpbnQgd2Vi
UHJvY2Vzc1Rocm91Z2hwdXRRT1MoKTsKICNlbmRpZgogCi1lbnVtIGNsYXNzIFByb2Nlc3NTd2Fw
UmVxdWVzdGVkQnlDbGllbnQ7CitlbnVtIGNsYXNzIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGll
bnQgOiBib29sOwogCiBjbGFzcyBXZWJQcm9jZXNzUG9vbCBmaW5hbCA6IHB1YmxpYyBBUEk6Ok9i
amVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OlByb2Nlc3NQb29sPiwgcHVibGljIENhbk1ha2VX
ZWFrUHRyPFdlYlByb2Nlc3NQb29sPiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CiBw
dWJsaWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9D
b2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0KaW5kZXggZGJkMzBkMDQz
MDdkMTgxMzk1OWQ5NTNjMjU0NTE3ZjdlOTIxZDFhYS4uMTYyNTkxODVlZWIzYmUzNGY5OGIxY2Qx
OGNiM2JlZmU1MDJhMDY4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
c2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbQpA
QCAtMjksNiArMjksNyBAQAogI2ltcG9ydCAiQ29va2llU3RvcmFnZVV0aWxzQ0YuaCIKICNpbXBv
cnQgIlNhbmRib3hVdGlsaXRpZXMuaCIKICNpbXBvcnQgIlN0b3JhZ2VNYW5hZ2VyLmgiCisjaW1w
b3J0ICJXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkuaCIKICNpbXBvcnQgIldlYlByZWZlcmVu
Y2VzS2V5cy5oIgogI2ltcG9ydCAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgiCiAj
aW1wb3J0ICJXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oIgpAQCAtNDQsNiArNDUsMTIgQEAK
ICNpbXBvcnQgPHd0Zi9VUkwuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4K
IAorI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCisjaW5jbHVkZSA8V2ViS2l0QWRkaXRpb25z
L1dlYnNpdGVEYXRhU3RvcmVBZGRpdGlvbnMuaD4KKyNlbHNlCisjZGVmaW5lIFdFQlNJVEVfREFU
QV9TVE9SRV9BRERJVElPTlMKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICNp
bXBvcnQgPFVJS2l0L1VJQXBwbGljYXRpb24uaD4KICNpbXBvcnQgPHBhbC9pb3MvTWFuYWdlZENv
bmZpZ3VyYXRpb25Tb2Z0TGluay5oPgpAQCAtNjEsNiArNjgsOCBAQCBzdGF0aWMgSGFzaFNldDxX
ZWJzaXRlRGF0YVN0b3JlKj4mIGRhdGFTdG9yZXMoKQogCiBzdGF0aWMgTlNTdHJpbmcgKiBjb25z
dCBXZWJLaXROZXR3b3JrTG9hZFRocm90dGxlTGF0ZW5jeU1pbGxpc2Vjb25kc0RlZmF1bHRzS2V5
ID0gQCJXZWJLaXROZXR3b3JrTG9hZFRocm90dGxlTGF0ZW5jeU1pbGxpc2Vjb25kcyI7CiAKK3N0
YXRpYyBib29sIGluaXRpYWxpemVkQXBwQm91bmREb21haW5zID0gZmFsc2U7CisKICNpZiBFTkFC
TEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogV2ViQ29yZTo6VGhpcmRQYXJ0eUNvb2tpZUJs
b2NraW5nTW9kZSBXZWJzaXRlRGF0YVN0b3JlOjp0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2Rl
KCkgY29uc3QKIHsKQEAgLTQxOSw0ICs0MjgsNjkgQEAgV1RGOjpTdHJpbmcgV2Vic2l0ZURhdGFT
dG9yZTo6d2Vic2l0ZURhdGFEaXJlY3RvcnlGaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oY29uc3QK
ICAgICByZXR1cm4gdXJsLmFic29sdXRlVVJMLnBhdGguZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
OwogfQogCitzdGF0aWMgSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4mIGFwcEJv
dW5kRG9tYWlucygpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4+IGFw
cEJvdW5kRG9tYWluczsKKyAgICByZXR1cm4gYXBwQm91bmREb21haW5zOworfQorCit2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OmluaXRpYWxpemVBcHBCb3VuZERvbWFpbnMoKQoreworICAgIEFTU0VS
VChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAoaW5pdGlhbGl6ZWRBcHBCb3VuZERvbWFp
bnMpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBzdGF0aWMgY29uc3QgYXV0byBtYXhBcHBC
b3VuZERvbWFpbkNvdW50ID0gMTA7CisgICAgCisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW10gKCkg
bXV0YWJsZSB7CisgICAgICAgIE5TQXJyYXk8TlNTdHJpbmcgKj4gKmRvbWFpbnMgPSBbW05TQnVu
ZGxlIG1haW5CdW5kbGVdIG9iamVjdEZvckluZm9EaWN0aW9uYXJ5S2V5OkAiV0tBcHBCb3VuZERv
bWFpbnMiXTsKKyAgICAgICAgCisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbZG9t
YWlucyA9IHJldGFpblB0cihkb21haW5zKV0geworICAgICAgICAgICAgZm9yIChOU1N0cmluZyAq
ZG9tYWluIGluIGRvbWFpbnMuZ2V0KCkpIHsKKyAgICAgICAgICAgICAgICBVUkwgdXJsIHsgVVJM
KCksIGRvbWFpbiB9OworICAgICAgICAgICAgICAgIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
IGFwcEJvdW5kRG9tYWluIHsgdXJsIH07CisgICAgICAgICAgICAgICAgaWYgKCFhcHBCb3VuZERv
bWFpbi5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYXBwQm91bmREb21haW5zKCku
YWRkKGFwcEJvdW5kRG9tYWluKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFwcEJvdW5kRG9t
YWlucygpLnNpemUoKSA+PSBtYXhBcHBCb3VuZERvbWFpbkNvdW50KQorICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgV0VCU0lURV9EQVRBX1NUT1JFX0FERElUSU9OUworICAgICAgICAgICAgaW5pdGlhbGl6
ZWRBcHBCb3VuZERvbWFpbnMgPSB0cnVlOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9p
ZCBXZWJzaXRlRGF0YVN0b3JlOjplbnN1cmVBcHBCb3VuZERvbWFpbnMoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChjb25zdCBIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiYpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQoreworICAgIGlmIChpbml0aWFsaXplZEFwcEJvdW5kRG9tYWlucykg
eworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihhcHBCb3VuZERvbWFpbnMoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBtX3F1ZXVlLT5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CisgICAgICAgIFJ1
bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihhcHBCb3VuZERvbWFpbnMoKSk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCit2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OmJlZ2luQXBwQm91bmREb21haW5DaGVjayhXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiYmIGRvbWFpbiwgV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5JiBsaXN0ZW5l
cikKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgZW5zdXJlQXBwQm91
bmREb21haW5zKFtkb21haW4gPSBXVEZNb3ZlKGRvbWFpbiksIGxpc3RlbmVyID0gbWFrZVJlZihs
aXN0ZW5lcildIChhdXRvJiBkb21haW5zKSBtdXRhYmxlIHsKKyAgICAgICAgbGlzdGVuZXItPmRp
ZFJlY2VpdmVBcHBCb3VuZERvbWFpblJlc3VsdChkb21haW5zLmNvbnRhaW5zKGRvbWFpbikpOwor
ICAgIH0pOworfQorCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmdldEFwcEJvdW5kRG9tYWluc0Zv
clRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGVuc3VyZUFwcEJvdW5k
RG9tYWlucyhbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0g
KGF1dG8mIGRvbWFpbnMpIG11dGFibGUgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihjb3B5
VG9WZWN0b3IoZG9tYWlucykpOworICAgIH0pOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCmluZGV4
IDA1OGU0OWY4NzNlMzM2YzE3NGViNDI4MThmNGU1YTFmMmVjMjBjNjMuLjNjMjkwZTA3ZWJkZjVm
Yzc5M2RiNDMyMjNmZDgzMzkwYWExMTBiNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCkBAIC0xMTcsNyAr
MTE3LDkgQEAgV2Vic2l0ZURhdGFTdG9yZTo6V2Vic2l0ZURhdGFTdG9yZShSZWY8V2Vic2l0ZURh
dGFTdG9yZUNvbmZpZ3VyYXRpb24+JiYgY29uZmlndXIKICAgICBXVEY6OnNldFByb2Nlc3NQcml2
aWxlZ2VzKGFsbFByaXZpbGVnZXMoKSk7CiAgICAgbWF5YmVSZWdpc3RlcldpdGhTZXNzaW9uSURN
YXAoKTsKICAgICBwbGF0Zm9ybUluaXRpYWxpemUoKTsKLQorI2lmIFBMQVRGT1JNKENPQ09BKQor
ICAgIGluaXRpYWxpemVBcHBCb3VuZERvbWFpbnMoKTsKKyNlbmRpZgogICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAppbmRleCA1NmFmM2Y5OTc2MWY0OGM3OGMz
MzAyYTMyZGMzYTU1NGIxZWVjOGFhLi45MTc0ZjIzYjQzODg2ODE3ZjExOTBiN2FlZWM3MzQ3ODM2
NWE4MDE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9X
ZWJzaXRlRGF0YVN0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURh
dGEvV2Vic2l0ZURhdGFTdG9yZS5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiTG9jYWxT
dG9yYWdlRGF0YWJhc2VUcmFja2VyLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb25DcmVhdGlv
blBhcmFtZXRlcnMuaCIKICNpbmNsdWRlICJXZWJEZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFj
Y2Vzc0NvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHku
aCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHlJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZUNs
aWVudC5oIgpAQCAtMjgyLDcgKzI4MywxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBoYXNBcHBCb3Vu
ZFNlc3Npb24oQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJikgY29uc3Q7CiAgICAgdm9p
ZCBzZXRJbkFwcEJyb3dzZXJQcml2YWN5RW5hYmxlZChib29sIGVuYWJsZWQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJik7CiAKKyAgICB2b2lkIGJlZ2luQXBwQm91bmREb21haW5DaGVjayhX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYmLCBXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkm
KTsKKyAgICB2b2lkIGdldEFwcEJvdW5kRG9tYWluc0ZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChWZWN0b3I8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+JiYpPiYmKTsKKyAgICB2
b2lkIGVuc3VyZUFwcEJvdW5kRG9tYWlucyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEhh
c2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+Jik+JiYpOworCiBwcml2YXRlOgorICAg
IHZvaWQgaW5pdGlhbGl6ZUFwcEJvdW5kRG9tYWlucygpOwogICAgIHZvaWQgZmV0Y2hEYXRhQW5k
QXBwbHkoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIE9wdGlvblNldDxXZWJzaXRlRGF0YUZl
dGNoT3B0aW9uPiwgUmVmUHRyPFdvcmtRdWV1ZT4mJiwgRnVuY3Rpb248dm9pZChWZWN0b3I8V2Vi
c2l0ZURhdGFSZWNvcmQ+KT4mJiBhcHBseSk7CiAKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6
ZSgpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4
IDM2NDQ5ZjI0NTRhNjBmZDlkNzkzMDBkZDIyYjJmYTVhNDY5NGE4YzUuLjQwYTMzMmU1YzIzZWMz
NGI1MzU5YmNlZGE5ZWFjNGY0YTcyOTgzOTQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZwor
KysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAyMC0wMy0wNiAgS2F0ZSBD
aGVuZXkgIDxrYXRoZXJpbmVfY2hlbmV5QGFwcGxlLmNvbT4KKworICAgICAgICBVSVByb2Nlc3Mg
bmVlZHMgbWVjaGFuaXNtIHRvIHNwZWNpZnkgQXBwQm91bmQgZG9tYWlucworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA4NTI4CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS81OTk4MDM0MD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGRlZCB0ZXN0IGFwcC1ib3VuZCBkb21haW5zIHRvIHRoZSBwbGlzdCBh
bmQgdGVzdGVkIHRoYXQgdGhlIGRvbWFpbnMKKyAgICAgICAgYXJlIHByb3Blcmx5IHN0b3JlZCBp
biB0aGUgd2Vic2l0ZSBkYXRhIHN0b3JlIGFmdGVyIGEgbmF2aWdhdGlvbi4KKworICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvSW5mby5wbGlzdDoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0luQXBwQnJvd3NlclByaXZhY3kubW06CisgICAgICAgIChURVNUKToKKwog
MjAyMC0wMy0wNiAgTGF1cm8gTW91cmEgPGxtb3VyYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtX
UEVdW1dlYkRyaXZlcl0gTWluaUJyb3dzZXIgc2hvdWxkIHJlYWN0IHRvIGNsb3NlIHNlc3Npb24g
Y29tbWFuZHMKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvSW5mby5wbGlzdCBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvSW5mby5wbGlzdAppbmRleCA0MjE2YjZkNzEzM2NmMWFkNzM3Zjhk
NjI1YzUzMmFhOTJhMWQ4MTE4Li45ODYzZjMzNzJhNWZmOGRkODQyYjFlMDdjNDMxYTQ3ODViYzQ2
YmQwIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL0luZm8ucGxpc3QKKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9JbmZvLnBsaXN0CkBAIC0yLDYgKzIsMjUgQEAKIDwhRE9DVFlQRSBw
bGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBw
bGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgogPHBsaXN0IHZlcnNpb249IjEuMCI+
CiA8ZGljdD4KKwk8a2V5PldLQXBwQm91bmREb21haW5zPC9rZXk+CisJPGFycmF5PgorCQk8c3Ry
aW5nPnRlc3REb21haW4xPC9zdHJpbmc+CisJCTxzdHJpbmc+aHR0cHM6Ly9zdWIuZG9tYWluLndl
YmtpdC5vcmcvcm9hZC90by9ub3doZXJlLzwvc3RyaW5nPgorCQk8c3RyaW5nPmh0dHBzOi8vd2Vi
a2l0Lm9yZzwvc3RyaW5nPgorCQk8c3RyaW5nPmh0dHBzOi8vbG9jYWxob3N0OjgwMDA8L3N0cmlu
Zz4KKwkJPHN0cmluZz5odHRwOi8vbG9jYWxob3N0L3JvYWQvdG8vbm93aGVyZS88L3N0cmluZz4K
KwkJPHN0cmluZz5maWxlOi8vL3NvbWUvZmlsZTwvc3RyaW5nPgorCQk8c3RyaW5nPjEyNy4wLjAu
MTwvc3RyaW5nPgorCQk8c3RyaW5nPjwvc3RyaW5nPgorCQk8c3RyaW5nPiAgIDwvc3RyaW5nPgor
CQk8c3RyaW5nPmh0dHBzOi8vc3ViLmRvbWFpbi53ZWJraXQub3JnPC9zdHJpbmc+CisJCTxzdHJp
bmc+aHR0cHM6Ly93d3cuYXBwbGUuY29tLzwvc3RyaW5nPgorCQk8c3RyaW5nPmh0dHBzOi8vd2Vi
a2l0Lm9yZzwvc3RyaW5nPgorCQk8c3RyaW5nPmh0dHBzOi8vd3d3LmFwcGxlLmNvbS9pcGhvbmUv
PC9zdHJpbmc+CisJCTxzdHJpbmc+aHR0cDovL3d3dy5leGFtcGxlLmNvbS88L3N0cmluZz4KKwkJ
PHN0cmluZz5odHRwOi8vYmFyLmNvbS88L3N0cmluZz4KKwkJPHN0cmluZz5odHRwOi8vZm9vLmNv
bS88L3N0cmluZz4KKwk8L2FycmF5PgogCTxrZXk+Q0ZCdW5kbGVOYW1lPC9rZXk+CiAJPHN0cmlu
Zz4ke1BST0RVQ1RfTkFNRX08L3N0cmluZz4KIAk8a2V5PkNGQnVuZGxlSWRlbnRpZmllcjwva2V5
PgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbkFw
cEJyb3dzZXJQcml2YWN5Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9JbkFwcEJyb3dzZXJQcml2YWN5Lm1tCmluZGV4IDc5ZTQ1MWUzNTVjMmQ4ODE1NDU1MTc5MTI0
ZDcwNzExODgyNzQwODMuLjJlM2MzODhmYTU2MjBmZTY1ZDM4MjM1M2JhMmU2NmViMTY1MGYyZjYg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5BcHBC
cm93c2VyUHJpdmFjeS5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL0luQXBwQnJvd3NlclByaXZhY3kubW0KQEAgLTI5LDggKzI5LDExIEBACiAjaW1wb3J0ICJU
ZXN0TmF2aWdhdGlvbkRlbGVnYXRlLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAjaW1w
b3J0ICJXS1dlYlZpZXdDb25maWd1cmF0aW9uRXh0cmFzLmgiCisjaW1wb3J0IDxXZWJDb3JlL1Jl
Z2lzdHJhYmxlRG9tYWluLmg+CisjaW1wb3J0IDxXZWJDb3JlL1J1bnRpbWVBcHBsaWNhdGlvbkNo
ZWNrcy5oPgogI2ltcG9ydCA8V2ViS2l0L1dLUHJlZmVyZW5jZXNQcml2YXRlLmg+CiAjaW1wb3J0
IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJL
aXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKICNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQpAQCAtNTAsNyArNTMsNyBAQCAt
ICh2b2lkKXVzZXJDb250ZW50Q29udHJvbGxlcjooV0tVc2VyQ29udGVudENvbnRyb2xsZXIgKil1
c2VyQ29udGVudENvbnRyb2xsZXIgZAogCiBAZW5kCiAKLVRFU1QoV2ViS2l0LCBOb25BcHBCb3Vu
ZERvbWFpbkZhaWxlZFVzZXJTY3JpcHRzKQorVEVTVChJbkFwcEJyb3dzZXJQcml2YWN5LCBOb25B
cHBCb3VuZERvbWFpbkZhaWxlZFVzZXJTY3JpcHRzKQogewogICAgIGF1dG8gbWVzc2FnZUhhbmRs
ZXIgPSBhZG9wdE5TKFtbVGVzdEluQXBwQnJvd3NlclNjcmlwdE1lc3NhZ2VIYW5kbGVyIGFsbG9j
XSBpbml0XSk7CiAgICAgYXV0byB1c2VyU2NyaXB0ID0gYWRvcHROUyhbW1dLVXNlclNjcmlwdCBh
bGxvY10gaW5pdFdpdGhTb3VyY2U6dXNlclNjcmlwdFNvdXJjZSBpbmplY3Rpb25UaW1lOldLVXNl
clNjcmlwdEluamVjdGlvblRpbWVBdERvY3VtZW50U3RhcnQgZm9yTWFpbkZyYW1lT25seTpZRVNd
KTsKQEAgLTk1LDcgKzk4LDcgQEAgVEVTVChXZWJLaXQsIE5vbkFwcEJvdW5kRG9tYWluRmFpbGVk
VXNlclNjcmlwdHMpCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZpc0RvbmUpOwogfQog
Ci1URVNUKFdlYktpdCwgTm9uQXBwQm91bmREb21haW5GYWlsZWRVc2VyQWdlbnRTY3JpcHRzKQor
VEVTVChJbkFwcEJyb3dzZXJQcml2YWN5LCBOb25BcHBCb3VuZERvbWFpbkZhaWxlZFVzZXJBZ2Vu
dFNjcmlwdHMpCiB7CiAgICAgV0tXZWJWaWV3Q29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbiA9
IFtXS1dlYlZpZXdDb25maWd1cmF0aW9uIF90ZXN0X2NvbmZpZ3VyYXRpb25XaXRoVGVzdFBsdWdJ
bkNsYXNzTmFtZTpAIldlYlByb2Nlc3NQbHVnSW5XaXRoSW50ZXJuYWxzIiBjb25maWd1cmVKU0NG
b3JUZXN0aW5nOllFU107CiAgICAgW1tjb25maWd1cmF0aW9uIHByZWZlcmVuY2VzXSBfc2V0SW5B
cHBCcm93c2VyUHJpdmFjeUVuYWJsZWQ6Tk9dOwpAQCAtMTMyLDcgKzEzNSw3IEBAIFRFU1QoV2Vi
S2l0LCBOb25BcHBCb3VuZERvbWFpbkZhaWxlZFVzZXJBZ2VudFNjcmlwdHMpCiAgICAgVGVzdFdl
YktpdEFQSTo6VXRpbDo6cnVuKCZpc0RvbmUpOwogfQogCi1URVNUKFdlYktpdCwgU3dhcEJhY2tU
b0FwcEJvdW5kUmVqZWN0c1VzZXJTY3JpcHQpCitURVNUKEluQXBwQnJvd3NlclByaXZhY3ksIFN3
YXBCYWNrVG9BcHBCb3VuZFJlamVjdHNVc2VyU2NyaXB0KQogewogICAgIGF1dG8gbWVzc2FnZUhh
bmRsZXIgPSBhZG9wdE5TKFtbVGVzdEluQXBwQnJvd3NlclNjcmlwdE1lc3NhZ2VIYW5kbGVyIGFs
bG9jXSBpbml0XSk7CiAgICAgYXV0byB1c2VyU2NyaXB0ID0gYWRvcHROUyhbW1dLVXNlclNjcmlw
dCBhbGxvY10gaW5pdFdpdGhTb3VyY2U6dXNlclNjcmlwdFNvdXJjZSBpbmplY3Rpb25UaW1lOldL
VXNlclNjcmlwdEluamVjdGlvblRpbWVBdERvY3VtZW50U3RhcnQgZm9yTWFpbkZyYW1lT25seTpZ
RVNdKTsKQEAgLTE3NiwzICsxNzksMjIgQEAgVEVTVChXZWJLaXQsIFN3YXBCYWNrVG9BcHBCb3Vu
ZFJlamVjdHNVc2VyU2NyaXB0KQogfQogCiAjZW5kaWYgLy8gVVNFKEFQUExFX0lOVEVSTkFMX1NE
SykKKworVEVTVChJbkFwcEJyb3dzZXJQcml2YWN5LCBBcHBCb3VuZERvbWFpbnMpCit7CisgICAg
aXNEb25lID0gZmFsc2U7CisgICAgW1tXS1dlYnNpdGVEYXRhU3RvcmUgZGVmYXVsdERhdGFTdG9y
ZV0gX2dldEFwcEJvdW5kRG9tYWluczpeKE5TQXJyYXk8TlNTdHJpbmcgKj4gKmRvbWFpbnMpIHsK
KyAgICAgICAgTlNBcnJheSAqZG9tYWluc1RvQ29tcGFyZSA9IFtOU0FycmF5IGFycmF5V2l0aE9i
amVjdHM6QCJhcHBsZS5jb20iLCBAImJhci5jb20iLCBAImV4YW1wbGUuY29tIiwgQCJmb28uY29t
IiwgQCJsb2NhbGhvc3QiLCBAIndlYmtpdC5vcmciLCBuaWxdOworCisgICAgICAgIE5TQXJyYXkg
KnNvcnRlZERvbWFpbnMgPSBbZG9tYWlucyBzb3J0ZWRBcnJheVVzaW5nU2VsZWN0b3I6QHNlbGVj
dG9yKGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6KV07CisKKyAgICAgICAgaW50IGxlbmd0aCA9IFtz
b3J0ZWREb21haW5zIGNvdW50XTsKKyAgICAgICAgRVhQRUNUX0VRKGxlbmd0aCwgNik7CisgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIEVYUEVD
VF9XS19TVFJFUShbc29ydGVkRG9tYWlucyBvYmplY3RBdEluZGV4OmldLCBbZG9tYWluc1RvQ29t
cGFyZSBvYmplY3RBdEluZGV4OmldKTsKKyAgICAgICAgICAgIGlzRG9uZSA9IHRydWU7CisgICAg
ICAgIH0KKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmlzRG9uZSk7Cit9
CisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392788</attachid>
            <date>2020-03-06 15:34:39 -0800</date>
            <delta_ts>2020-03-06 17:28:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-208528-20200306153438.patch</filename>
            <type>text/plain</type>
            <size>36847</size>
            <attacher name="Kate Cheney">katherine_cheney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU3OTk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDUzMTgzZGIyMGYzZjQ1MTY2
OWIyZGQ2MzA0ZDYyZTVmY2ZjNTEwMmEuLjgwMjkzMGZjYTU4ODU5NzI3NWQxZDk5YmU4NjQxM2Y2
MjY3NTE4YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjAgQEAKKzIwMjAtMDMtMDYgIEthdGUgQ2hl
bmV5ICA8a2F0aGVyaW5lX2NoZW5leUBhcHBsZS5jb20+CisKKyAgICAgICAgVUlQcm9jZXNzIG5l
ZWRzIG1lY2hhbmlzbSB0byBzcGVjaWZ5IEFwcEJvdW5kIGRvbWFpbnMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODUyOAorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNTk5ODAzNDA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkcyBmdW5jdGlvbmFsaXR5IHRvIHJlYWQgYXBwLWJvdW5kIGRvbWFpbnMg
ZnJvbSB0aGUgSW5mby5wbGlzdCBvbgorICAgICAgICBiYWNrZ3JvdW5kIHRocmVhZCB2aWEgdGhl
IFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eSBhbmQgcmVwb3J0IHRvCisgICAgICAgIHRoZSBV
SSBwcm9jZXNzIHdoZXRoZXIgYSBkb21haW4gaXMgYXBwLWJvdW5kLiAKKworICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tOgorICAgICAgICAoLVtXS1dl
YnNpdGVEYXRhU3RvcmUgX2dldEFwcEJvdW5kRG9tYWluczpdKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaDoKKyAgICAgICAgVGVzdCBB
UEkgY2FsbCB0byBnZXQgYXBwQm91bmREb21haW5zLgorCisgICAgICAgICogVUlQcm9jZXNzL1dl
YkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1l
UG9saWN5TGlzdGVuZXJQcm94eTo6V2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5OjpkaWRSZWNlaXZlQXBwQm91
bmREb21haW5SZXN1bHQpOgorICAgICAgICAoV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5Ojpk
aWRSZWNlaXZlU2FmZUJyb3dzaW5nUmVzdWx0cyk6CisgICAgICAgIChXZWJGcmFtZVBvbGljeUxp
c3RlbmVyUHJveHk6OnVzZSk6CisgICAgICAgIChXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHk6
OmRvd25sb2FkKToKKyAgICAgICAgKFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eTo6aWdub3Jl
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5Lmg6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eTo6Y3JlYXRlKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViRnJhbWVQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YkZyYW1lUHJveHk6OnNldFVwUG9saWN5TGlzdGVuZXJQcm94eSk6CisgICAgICAgICogVUlQcm9j
ZXNzL1dlYkZyYW1lUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cDoKKyAgICAgICAgQWRkZWQgYSBuZXcgZnVuY3Rpb24gdG8gV2ViRnJhbWVQb2xpY3lMaXN0ZW5l
clByb3h5IHRvIHdhaXQgZm9yIHRoZQorICAgICAgICBhcHAtYm91bmQgZG9tYWlucyB0byBiZSBy
ZWFkIGJlZm9yZSBjb21wbGV0aW5nIGEgbmF2aWdhdGlvbi4gRWFjaAorICAgICAgICBvdGhlciBm
dW5jdGlvbiBtdXN0IG5vdyBjaGVjayBpZiBtX2lzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4g
aGFzCisgICAgICAgIGJlZW4gc2V0IGJlZm9yZSBzZW5kaW5nIGEgZnVsbCByZXBseS4gQWxzbyBh
ZGRlZCBhbiBlbnVtIGNsYXNzCisgICAgICAgIFNob3VsZEV4cGVjdEFwcEJvdW5kRG9tYWluUmVz
dWx0IHRvIHRlbGwgdGhlIGxpc3RlbmVyIG5vdCB0byB3YWl0IGZvcgorICAgICAgICB0aGUgcmVz
dWx0cyBpbiB1bmVjZXNzYXJ5IGNhc2VzLgorCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6aXNBcHBCb3VuZERvbWFpbiBjb25zdCk6IERlbGV0ZWQKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZVByb3h5OjpzZXRJc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKToKKyAg
ICAgICAgQWZ0ZXIgdGhlIGxpc3RlbmVyIHJlc3BvbmRzIHdpdGggdGhlIHJlc3VsdHMsIHNldCB0
aGUgbmV3CisgICAgICAgIHZhbHVlIGluIFdlYlBhZ2VQcm94eS4gV2Ugbm8gbG9uZ2VyIG5lZWQg
dG8gY2hlY2sgZm9yIGlzQXBwQm91bmQKKyAgICAgICAgZG9tYWluIG5vdyB0aGF0IHdlIGhhdmUg
cmVjZWl2ZWQgdGhlIHZhbHVlLgorCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGVj
aWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5OjpkZWNpZGVQb2xpY3lGb3JSZXNwb25zZVNoYXJlZCk6CisgICAgICAgIE5vIG5lZWQgdG8g
bGlzdGVuIGZvciBhcHAtYm91bmQgZG9tYWluIHJlc3BvbnNlIGhlcmUuCisKKyAgICAgICAgKiBV
SVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRh
L0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6YXBwQm91
bmREb21haW5zKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6YmVnaW5BcHBC
b3VuZERvbWFpbkNoZWNrKToKKyAgICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Z2V0
QXBwQm91bmREb21haW5zRm9yVGVzdGluZyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL1dlYnNpdGVEYXRhU3RvcmUuaDoKKyAgICAgICAgUmVhZCB0aGUgYXBwLWJvdW5kIGRvbWFp
biBsaXN0IG9uIHRoZSBiYWNrZ3JvdW5kIHRocmVhZCwgYW5kIG9uY2UKKyAgICAgICAgZG9uZSwg
Y2FsbCB0aGUgbGlzdGVuZXIgb24gdGhlIG1haW4gdGhyZWFkLgorCiAyMDIwLTAzLTA1ICBLYXRl
IENoZW5leSAgPGthdGhlcmluZV9jaGVuZXlAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCB3ZWIg
cGFnZSBhZGRpdGlvbnMgdG8gV2ViUGFnZVByb3h5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbQppbmRleCA4NWFhZjdk
Njc5MTE1OTRiMDY1M2UzMjNhYmNhNjNjMTI0ZjhmODhhLi43NWJkYzkxZWU5MWZlN2JmYTE0OTQy
NmRhNGNlYTcxMTMwYmQzMWYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0KQEAgLTYwMCw0ICs2MDAsMTQgQEAg
LSAoX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gKilfY29uZmlndXJhdGlvbgogICAg
IHJldHVybiB3cmFwcGVyKF93ZWJzaXRlRGF0YVN0b3JlLT5jb25maWd1cmF0aW9uKCkuY29weSgp
KTsKIH0KIAorLSAodm9pZClfZ2V0QXBwQm91bmREb21haW5zOih2b2lkICheKShOU0FycmF5PE5T
U3RyaW5nICo+ICopKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgX3dlYnNpdGVEYXRhU3RvcmUt
PmdldEFwcEJvdW5kRG9tYWluc0ZvclRlc3RpbmcoW2NvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJs
b2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byYmIGRvbWFpbnMpIHsKKyAgICAgICAgVmVj
dG9yPFJlZlB0cjxBUEk6Ok9iamVjdD4+IGFwaURvbWFpbnMgPSBXVEY6Om1hcChkb21haW5zLCBb
XShhdXRvJiBkb21haW4pIHsKKyAgICAgICAgICAgIHJldHVybiBSZWZQdHI8QVBJOjpPYmplY3Q+
KEFQSTo6U3RyaW5nOjpjcmVhdGUoV1RGTW92ZShkb21haW4uc3RyaW5nKCkpKSk7CisgICAgICAg
IH0pOworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih3cmFwcGVyKEFQSTo6QXJyYXk6OmNyZWF0
ZShXVEZNb3ZlKGFwaURvbWFpbnMpKSkpOworICAgIH0pOworfQorCiBAZW5kCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJp
dmF0ZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFT
dG9yZVByaXZhdGUuaAppbmRleCA5ZTBlZTJiMDkxNmFlOWM2NDU3ZGMwOTUyYTFiNDBhYzg4Nzcz
OGEyLi40OTFlOWJlMGM4NjA5NDU4MWUwYmI0ZmY0M2EwNDM2MTJmMmRjZTVjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJp
dmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVE
YXRhU3RvcmVQcml2YXRlLmgKQEAgLTc3LDYgKzc3LDcgQEAgdHlwZWRlZiBOU19PUFRJT05TKE5T
VUludGVnZXIsIF9XS1dlYnNpdGVEYXRhU3RvcmVGZXRjaE9wdGlvbnMpIHsKIC0gKHZvaWQpX2Ns
ZWFyUmVzb3VyY2VMb2FkU3RhdGlzdGljczoodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRs
ZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsK
IC0gKHZvaWQpX2lzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlckZpcnN0UGFydHk6KE5TVVJM
ICopZmlyc3RQYXJ0eVVSTCB0aGlyZFBhcnR5OihOU1VSTCAqKXRoaXJkUGFydHlVUkwgY29tcGxl
dGlvbkhhbmRsZXI6KHZvaWQgKF4pKEJPT0wpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJ
TEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAtICh2b2lkKV9wcm9j
ZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9uSGFu
ZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsKKy0gKHZvaWQp
X2dldEFwcEJvdW5kRG9tYWluczoodm9pZCAoXikoTlNBcnJheTxOU1N0cmluZyAqPiAqKSljb21w
bGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tf
SU9TX1RCQSkpOwogCiBAcHJvcGVydHkgKG51bGxhYmxlLCBub25hdG9taWMsIHdlYWspIGlkIDxf
V0tXZWJzaXRlRGF0YVN0b3JlRGVsZWdhdGU+IF9kZWxlZ2F0ZSBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKDEwLjE1KSwgaW9zKDEzLjApKTsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwg
Y29weSkgX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gKl9jb25maWd1cmF0aW9uOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViRnJhbWVQb2xpY3lMaXN0ZW5l
clByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkZyYW1lUG9saWN5TGlzdGVu
ZXJQcm94eS5jcHAKaW5kZXggYTVmYWYzZmQ1ZTRiNWZmMmFmYTc4MzVlYWY5NmE0MWUzZmY0YWEz
Yi4uY2IwNDQ0ZTdkMTgwODk4ZjY3OWQyNjc1M2M2M2MzY2VjNzZiYjc4ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHku
Y3BwCkBAIC0zNSwzMCArMzUsNDUgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVdlYkZyYW1l
UG9saWN5TGlzdGVuZXJQcm94eTo6V2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5KFJlcGx5JiYg
cmVwbHksIFNob3VsZEV4cGVjdFNhZmVCcm93c2luZ1Jlc3VsdCBleHBlY3QpCitXZWJGcmFtZVBv
bGljeUxpc3RlbmVyUHJveHk6OldlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eShSZXBseSYmIHJl
cGx5LCBTaG91bGRFeHBlY3RTYWZlQnJvd3NpbmdSZXN1bHQgZXhwZWN0U2FmZUJyb3dzaW5nUmVz
dWx0LCBTaG91bGRFeHBlY3RBcHBCb3VuZERvbWFpblJlc3VsdCBleHBlY3RBcHBCb3VuZERvbWFp
blJlc3VsdCkKICAgICA6IG1fcmVwbHkoV1RGTW92ZShyZXBseSkpCiB7Ci0gICAgaWYgKGV4cGVj
dCA9PSBTaG91bGRFeHBlY3RTYWZlQnJvd3NpbmdSZXN1bHQ6Ok5vKQorICAgIGlmIChleHBlY3RT
YWZlQnJvd3NpbmdSZXN1bHQgPT0gU2hvdWxkRXhwZWN0U2FmZUJyb3dzaW5nUmVzdWx0OjpObykK
ICAgICAgICAgZGlkUmVjZWl2ZVNhZmVCcm93c2luZ1Jlc3VsdHMoeyB9KTsKKyAgICBpZiAoZXhw
ZWN0QXBwQm91bmREb21haW5SZXN1bHQgPT0gU2hvdWxkRXhwZWN0QXBwQm91bmREb21haW5SZXN1
bHQ6Ok5vKQorICAgICAgICBkaWRSZWNlaXZlQXBwQm91bmREb21haW5SZXN1bHQoeyB9KTsKIH0K
IAogV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5Ojp+V2ViRnJhbWVQb2xpY3lMaXN0ZW5lclBy
b3h5KCkgPSBkZWZhdWx0OwogCit2b2lkIFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eTo6ZGlk
UmVjZWl2ZUFwcEJvdW5kRG9tYWluUmVzdWx0KGJvb2wgaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERv
bWFpbikKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byBpc0Fw
cEJvdW5kID0gaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiA/IE5hdmlnYXRpbmdUb0FwcEJv
dW5kRG9tYWluOjpZZXMgOiBOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbjo6Tm87CisgICAgaWYg
KG1fcG9saWN5UmVzdWx0ICYmIG1fc2FmZUJyb3dzaW5nV2FybmluZykgeworICAgICAgICBpZiAo
bV9yZXBseSkKKyAgICAgICAgICAgIG1fcmVwbHkoV2ViQ29yZTo6UG9saWN5QWN0aW9uOjpVc2Us
IG1fcG9saWN5UmVzdWx0LT5maXJzdC5nZXQoKSwgbV9wb2xpY3lSZXN1bHQtPnNlY29uZCwgV1RG
TW92ZSgqbV9zYWZlQnJvd3NpbmdXYXJuaW5nKSwgaXNBcHBCb3VuZCk7CisgICAgfSBlbHNlCisg
ICAgICAgIG1faXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiA9IGlzQXBwQm91bmQ7Cit9CisK
IHZvaWQgV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5OjpkaWRSZWNlaXZlU2FmZUJyb3dzaW5n
UmVzdWx0cyhSZWZQdHI8U2FmZUJyb3dzaW5nV2FybmluZz4mJiBzYWZlQnJvd3NpbmdXYXJuaW5n
KQogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKCFtX3NhZmVCcm93
c2luZ1dhcm5pbmcpOwotICAgIGlmIChtX3BvbGljeVJlc3VsdCkgeworICAgIGlmIChtX3BvbGlj
eVJlc3VsdCAmJiBtX2lzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4pIHsKICAgICAgICAgaWYg
KG1fcmVwbHkpCi0gICAgICAgICAgICBtX3JlcGx5KFdlYkNvcmU6OlBvbGljeUFjdGlvbjo6VXNl
LCBtX3BvbGljeVJlc3VsdC0+Zmlyc3QuZ2V0KCksIG1fcG9saWN5UmVzdWx0LT5zZWNvbmQsIFdU
Rk1vdmUoc2FmZUJyb3dzaW5nV2FybmluZykpOworICAgICAgICAgICAgbV9yZXBseShXZWJDb3Jl
OjpQb2xpY3lBY3Rpb246OlVzZSwgbV9wb2xpY3lSZXN1bHQtPmZpcnN0LmdldCgpLCBtX3BvbGlj
eVJlc3VsdC0+c2Vjb25kLCBXVEZNb3ZlKHNhZmVCcm93c2luZ1dhcm5pbmcpLCAqbV9pc05hdmln
YXRpbmdUb0FwcEJvdW5kRG9tYWluKTsKICAgICB9IGVsc2UKICAgICAgICAgbV9zYWZlQnJvd3Np
bmdXYXJuaW5nID0gV1RGTW92ZShzYWZlQnJvd3NpbmdXYXJuaW5nKTsKIH0KIAogdm9pZCBXZWJG
cmFtZVBvbGljeUxpc3RlbmVyUHJveHk6OnVzZShBUEk6OldlYnNpdGVQb2xpY2llcyogcG9saWNp
ZXMsIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNs
aWVudCkKIHsKLSAgICBpZiAobV9zYWZlQnJvd3NpbmdXYXJuaW5nKSB7CisgICAgaWYgKG1fc2Fm
ZUJyb3dzaW5nV2FybmluZyAmJiBtX2lzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4pIHsKICAg
ICAgICAgaWYgKG1fcmVwbHkpCi0gICAgICAgICAgICBtX3JlcGx5KFdlYkNvcmU6OlBvbGljeUFj
dGlvbjo6VXNlLCBwb2xpY2llcywgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgV1RGTW92
ZSgqbV9zYWZlQnJvd3NpbmdXYXJuaW5nKSk7CisgICAgICAgICAgICBtX3JlcGx5KFdlYkNvcmU6
OlBvbGljeUFjdGlvbjo6VXNlLCBwb2xpY2llcywgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVu
dCwgV1RGTW92ZSgqbV9zYWZlQnJvd3NpbmdXYXJuaW5nKSwgKm1faXNOYXZpZ2F0aW5nVG9BcHBC
b3VuZERvbWFpbik7CiAgICAgfSBlbHNlIGlmICghbV9wb2xpY3lSZXN1bHQpCiAgICAgICAgIG1f
cG9saWN5UmVzdWx0ID0ge3sgcG9saWNpZXMsIHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQg
fX07CiB9CkBAIC02NiwxMyArODEsMTMgQEAgdm9pZCBXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJv
eHk6OnVzZShBUEk6OldlYnNpdGVQb2xpY2llcyogcG9saWNpZXMsIFByb2Nlc3NTd2EKIHZvaWQg
V2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5Ojpkb3dubG9hZCgpCiB7CiAgICAgaWYgKG1fcmVw
bHkpCi0gICAgICAgIG1fcmVwbHkoV2ViQ29yZTo6UG9saWN5QWN0aW9uOjpEb3dubG9hZCwgbnVs
bHB0ciwgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudDo6Tm8sIHsgfSk7CisgICAgICAgIG1f
cmVwbHkoV2ViQ29yZTo6UG9saWN5QWN0aW9uOjpEb3dubG9hZCwgbnVsbHB0ciwgUHJvY2Vzc1N3
YXBSZXF1ZXN0ZWRCeUNsaWVudDo6Tm8sIHsgfSwgeyB9KTsKIH0KIAogdm9pZCBXZWJGcmFtZVBv
bGljeUxpc3RlbmVyUHJveHk6Omlnbm9yZSgpCiB7CiAgICAgaWYgKG1fcmVwbHkpCi0gICAgICAg
IG1fcmVwbHkoV2ViQ29yZTo6UG9saWN5QWN0aW9uOjpJZ25vcmUsIG51bGxwdHIsIFByb2Nlc3NT
d2FwUmVxdWVzdGVkQnlDbGllbnQ6Ok5vLCB7IH0pOworICAgICAgICBtX3JlcGx5KFdlYkNvcmU6
OlBvbGljeUFjdGlvbjo6SWdub3JlLCBudWxscHRyLCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xp
ZW50OjpObywgeyB9LCB7IH0pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eS5o
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5LmgK
aW5kZXggOWE2YmU5OWQ0MDczZWUxMDhiNGNiMjBmNzIxYzEwOGY3YzAxODhlOS4uNWJmYWU5Zjdi
M2VkZWFmZWI2MThjNWUwYjZkNmRjYTM5ZTc4M2E5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5LmgKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5LmgKQEAgLTI2LDYgKzI2
LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCisjaW5jbHVkZSAi
UG9saWN5RGVjaXNpb24uaCIKICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVyVHlwZXMuaD4K
ICNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CkBAIC0zOCwxNiArMzksMTcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFNhZmVC
cm93c2luZ1dhcm5pbmc7CiAKLWVudW0gY2xhc3MgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVu
dCB7IE5vLCBZZXMgfTsKLWVudW0gY2xhc3MgU2hvdWxkRXhwZWN0U2FmZUJyb3dzaW5nUmVzdWx0
IHsgTm8sIFllcyB9OworZW51bSBjbGFzcyBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50IDog
Ym9vbCB7IE5vLCBZZXMgfTsKK2VudW0gY2xhc3MgU2hvdWxkRXhwZWN0U2FmZUJyb3dzaW5nUmVz
dWx0IDogYm9vbCB7IE5vLCBZZXMgfTsKK2VudW0gY2xhc3MgU2hvdWxkRXhwZWN0QXBwQm91bmRE
b21haW5SZXN1bHQgOiBib29sIHsgTm8sIFllcyB9OwogCiBjbGFzcyBXZWJGcmFtZVBvbGljeUxp
c3RlbmVyUHJveHkgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpG
cmFtZVBvbGljeUxpc3RlbmVyPiB7CiBwdWJsaWM6CiAKLSAgICB1c2luZyBSZXBseSA9IENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6UG9saWN5QWN0aW9uLCBBUEk6OldlYnNpdGVQb2xp
Y2llcyosIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIFJlZlB0cjxTYWZlQnJvd3NpbmdX
YXJuaW5nPiYmKT47Ci0gICAgc3RhdGljIFJlZjxXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHk+
IGNyZWF0ZShSZXBseSYmIHJlcGx5LCBTaG91bGRFeHBlY3RTYWZlQnJvd3NpbmdSZXN1bHQgZXhw
ZWN0KQorICAgIHVzaW5nIFJlcGx5ID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpQ
b2xpY3lBY3Rpb24sIEFQSTo6V2Vic2l0ZVBvbGljaWVzKiwgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRC
eUNsaWVudCwgUmVmUHRyPFNhZmVCcm93c2luZ1dhcm5pbmc+JiYsIE5hdmlnYXRpbmdUb0FwcEJv
dW5kRG9tYWluKT47CisgICAgc3RhdGljIFJlZjxXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHk+
IGNyZWF0ZShSZXBseSYmIHJlcGx5LCBTaG91bGRFeHBlY3RTYWZlQnJvd3NpbmdSZXN1bHQgZXhw
ZWN0U2FmZUJyb3dzaW5nUmVzdWx0LCBTaG91bGRFeHBlY3RBcHBCb3VuZERvbWFpblJlc3VsdCBl
eHBlY3RBcHBCb3VuZERvbWFpblJlc3VsdCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eShXVEZNb3ZlKHJlcGx5KSwgZXhwZWN0
KSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQ
cm94eShXVEZNb3ZlKHJlcGx5KSwgZXhwZWN0U2FmZUJyb3dzaW5nUmVzdWx0LCBleHBlY3RBcHBC
b3VuZERvbWFpblJlc3VsdCkpOwogICAgIH0KICAgICB+V2ViRnJhbWVQb2xpY3lMaXN0ZW5lclBy
b3h5KCk7CiAKQEAgLTU2LDEyICs1OCwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBpZ25vcmUoKTsK
ICAgICAKICAgICB2b2lkIGRpZFJlY2VpdmVTYWZlQnJvd3NpbmdSZXN1bHRzKFJlZlB0cjxTYWZl
QnJvd3NpbmdXYXJuaW5nPiYmKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVBcHBCb3VuZERvbWFpblJl
c3VsdChib29sKTsKIAogcHJpdmF0ZToKLSAgICBXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHko
UmVwbHkmJiwgU2hvdWxkRXhwZWN0U2FmZUJyb3dzaW5nUmVzdWx0KTsKKyAgICBXZWJGcmFtZVBv
bGljeUxpc3RlbmVyUHJveHkoUmVwbHkmJiwgU2hvdWxkRXhwZWN0U2FmZUJyb3dzaW5nUmVzdWx0
LCBTaG91bGRFeHBlY3RBcHBCb3VuZERvbWFpblJlc3VsdCk7CiAKICAgICBPcHRpb25hbDxzdGQ6
OnBhaXI8UmVmUHRyPEFQSTo6V2Vic2l0ZVBvbGljaWVzPiwgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRC
eUNsaWVudD4+IG1fcG9saWN5UmVzdWx0OwogICAgIE9wdGlvbmFsPFJlZlB0cjxTYWZlQnJvd3Np
bmdXYXJuaW5nPj4gbV9zYWZlQnJvd3NpbmdXYXJuaW5nOworICAgIE9wdGlvbmFsPE5hdmlnYXRp
bmdUb0FwcEJvdW5kRG9tYWluPiBtX2lzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW47CiAgICAg
UmVwbHkgbV9yZXBseTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYkZyYW1lUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViRnJhbWVQcm94
eS5jcHAKaW5kZXggNGQzMmYwMzVmMGE0MmQ5Y2I2ZDNjOWRiYzZmNDIwOTBjM2RiMjIzNS4uMzQ2
YzA4MDU3ZTJiMTJmMDY1YjA0OTEyZDhkZjJjODYzMmIwOTc1YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViRnJhbWVQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViRnJhbWVQcm94eS5jcHAKQEAgLTE5MywxNCArMTkzLDE0IEBAIHZvaWQgV2Vi
RnJhbWVQcm94eTo6ZGlkQ2hhbmdlVGl0bGUoY29uc3QgU3RyaW5nJiB0aXRsZSkKICAgICBtX3Rp
dGxlID0gdGl0bGU7CiB9CiAKLVdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eSYgV2ViRnJhbWVQ
cm94eTo6c2V0VXBQb2xpY3lMaXN0ZW5lclByb3h5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUG9s
aWN5QWN0aW9uLCBBUEk6OldlYnNpdGVQb2xpY2llcyosIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlD
bGllbnQsIFJlZlB0cjxTYWZlQnJvd3NpbmdXYXJuaW5nPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxl
ciwgU2hvdWxkRXhwZWN0U2FmZUJyb3dzaW5nUmVzdWx0IGV4cGVjdCkKK1dlYkZyYW1lUG9saWN5
TGlzdGVuZXJQcm94eSYgV2ViRnJhbWVQcm94eTo6c2V0VXBQb2xpY3lMaXN0ZW5lclByb3h5KENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoUG9saWN5QWN0aW9uLCBBUEk6OldlYnNpdGVQb2xpY2llcyos
IFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIFJlZlB0cjxTYWZlQnJvd3NpbmdXYXJuaW5n
PiYmLCBOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbik+JiYgY29tcGxldGlvbkhhbmRsZXIsIFNo
b3VsZEV4cGVjdFNhZmVCcm93c2luZ1Jlc3VsdCBleHBlY3RTYWZlQnJvd3NpbmdSZXN1bHQsIFNo
b3VsZEV4cGVjdEFwcEJvdW5kRG9tYWluUmVzdWx0IGV4cGVjdEFwcEJvdW5kRG9tYWluUmVzdWx0
KQogewogICAgIGlmIChtX2FjdGl2ZUxpc3RlbmVyKQogICAgICAgICBtX2FjdGl2ZUxpc3RlbmVy
LT5pZ25vcmUoKTsKLSAgICBtX2FjdGl2ZUxpc3RlbmVyID0gV2ViRnJhbWVQb2xpY3lMaXN0ZW5l
clByb3h5OjpjcmVhdGUoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKFBvbGljeUFjdGlv
biBhY3Rpb24sIEFQSTo6V2Vic2l0ZVBvbGljaWVzKiBwb2xpY2llcywgUHJvY2Vzc1N3YXBSZXF1
ZXN0ZWRCeUNsaWVudCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBSZWZQdHI8U2FmZUJy
b3dzaW5nV2FybmluZz4mJiBzYWZlQnJvd3NpbmdXYXJuaW5nKSBtdXRhYmxlIHsKLSAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoYWN0aW9uLCBwb2xpY2llcywgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRC
eUNsaWVudCwgV1RGTW92ZShzYWZlQnJvd3NpbmdXYXJuaW5nKSk7CisgICAgbV9hY3RpdmVMaXN0
ZW5lciA9IFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eTo6Y3JlYXRlKFt0aGlzLCBwcm90ZWN0
ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildIChQb2xpY3lBY3Rpb24gYWN0aW9uLCBBUEk6OldlYnNpdGVQb2xpY2ll
cyogcG9saWNpZXMsIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQgcHJvY2Vzc1N3YXBSZXF1
ZXN0ZWRCeUNsaWVudCwgUmVmUHRyPFNhZmVCcm93c2luZ1dhcm5pbmc+JiYgc2FmZUJyb3dzaW5n
V2FybmluZywgTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4gaXNOYXZpZ2F0aW5nVG9BcHBCb3Vu
ZERvbWFpbikgbXV0YWJsZSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGFjdGlvbiwgcG9s
aWNpZXMsIHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIFdURk1vdmUoc2FmZUJyb3dzaW5n
V2FybmluZyksIGlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4pOwogICAgICAgICBtX2FjdGl2
ZUxpc3RlbmVyID0gbnVsbHB0cjsKLSAgICB9LCBleHBlY3QpOworICAgIH0sIGV4cGVjdFNhZmVC
cm93c2luZ1Jlc3VsdCwgZXhwZWN0QXBwQm91bmREb21haW5SZXN1bHQpOwogICAgIHJldHVybiAq
bV9hY3RpdmVMaXN0ZW5lcjsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViRnJhbWVQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViRnJhbWVQcm94
eS5oCmluZGV4IGJmNmQ4OTZkODdiNzYyNjUxMTM4ZmMyOTg0ZjI1OTcxMjBkMzFmNGYuLjYwMWY0
MDRhMTJiYThkM2EzYjVkZDkwZTU4NmQ5YTk1NmE2M2EzY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYkZyYW1lUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJGcmFtZVByb3h5LmgKQEAgLTUzLDggKzUzLDggQEAgY2xhc3MgU2FmZUJyb3dzaW5n
V2FybmluZzsKIGNsYXNzIFdlYkNlcnRpZmljYXRlSW5mbzsKIGNsYXNzIFdlYkZyYW1lUG9saWN5
TGlzdGVuZXJQcm94eTsKIGNsYXNzIFdlYnNpdGVEYXRhU3RvcmU7Ci1lbnVtIGNsYXNzIFNob3Vs
ZEV4cGVjdFNhZmVCcm93c2luZ1Jlc3VsdDsKLWVudW0gY2xhc3MgUHJvY2Vzc1N3YXBSZXF1ZXN0
ZWRCeUNsaWVudDsKK2VudW0gY2xhc3MgU2hvdWxkRXhwZWN0U2FmZUJyb3dzaW5nUmVzdWx0IDog
Ym9vbDsKK2VudW0gY2xhc3MgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCA6IGJvb2w7CiBz
dHJ1Y3QgV2Vic2l0ZVBvbGljaWVzRGF0YTsKIAogY2xhc3MgV2ViRnJhbWVQcm94eSA6IHB1Ymxp
YyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OkZyYW1lPiB7CkBAIC0xMjAsNyAr
MTIwLDcgQEAgcHVibGljOgogICAgIHZvaWQgZGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbihjb25z
dCBVUkwmKTsgLy8gZWcuIGFuY2hvciBuYXZpZ2F0aW9uLCBzZXNzaW9uIHN0YXRlIGNoYW5nZS4K
ICAgICB2b2lkIGRpZENoYW5nZVRpdGxlKGNvbnN0IFN0cmluZyYpOwogCi0gICAgV2ViRnJhbWVQ
b2xpY3lMaXN0ZW5lclByb3h5JiBzZXRVcFBvbGljeUxpc3RlbmVyUHJveHkoQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChXZWJDb3JlOjpQb2xpY3lBY3Rpb24sIEFQSTo6V2Vic2l0ZVBvbGljaWVzKiwg
UHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgUmVmUHRyPFNhZmVCcm93c2luZ1dhcm5pbmc+
JiYpPiYmLCBTaG91bGRFeHBlY3RTYWZlQnJvd3NpbmdSZXN1bHQpOworICAgIFdlYkZyYW1lUG9s
aWN5TGlzdGVuZXJQcm94eSYgc2V0VXBQb2xpY3lMaXN0ZW5lclByb3h5KENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoV2ViQ29yZTo6UG9saWN5QWN0aW9uLCBBUEk6OldlYnNpdGVQb2xpY2llcyosIFBy
b2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIFJlZlB0cjxTYWZlQnJvd3NpbmdXYXJuaW5nPiYm
LCBOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbik+JiYsIFNob3VsZEV4cGVjdFNhZmVCcm93c2lu
Z1Jlc3VsdCwgU2hvdWxkRXhwZWN0QXBwQm91bmREb21haW5SZXN1bHQpOwogCiAjaWYgRU5BQkxF
KENPTlRFTlRfRklMVEVSSU5HKQogICAgIHZvaWQgY29udGVudEZpbHRlckRpZEJsb2NrTG9hZChX
ZWJDb3JlOjpDb250ZW50RmlsdGVyVW5ibG9ja0hhbmRsZXIgY29udGVudEZpbHRlclVuYmxvY2tI
YW5kbGVyKSB7IG1fY29udGVudEZpbHRlclVuYmxvY2tIYW5kbGVyID0gV1RGTW92ZShjb250ZW50
RmlsdGVyVW5ibG9ja0hhbmRsZXIpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcAppbmRleCAyODc5ZWJhOGNlNWFmNzU3YTNiMGE4MDJiMDliOTcxZWE1MjM2NGIwLi44
ZDI0MGIyNmQxMDQzOGM5NTA1MGI0YzhkM2JmYTkxNGY1NWIyOTUwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTI3OSw3ICsyNzksNiBAQAogI2lmIFVTRShB
UFBMRV9JTlRFUk5BTF9TREspCiAjaW5jbHVkZSA8V2ViS2l0QWRkaXRpb25zL1dlYlBhZ2VQcm94
eUFkZGl0aW9ucy5oPgogI2Vsc2UKLSNkZWZpbmUgV0VCX1BBR0VfUFJPWFlfQURESVRJT05TX0lT
QVBQQk9VTkRET01BSU4KICNkZWZpbmUgV0VCX1BBR0VfUFJPWFlfQURESVRJT05TX1NFVElTTkFW
SUdBVElOR1RPQVBQQk9VTkRET01BSU4KICNlbmRpZgogCkBAIC0zMDk1LDIzICszMDk0LDExIEBA
IHByaXZhdGU6CiAgICAgUG9saWN5Q2hlY2tJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKIH07CiAK
LQotYm9vbCBXZWJQYWdlUHJveHk6OmlzQXBwQm91bmREb21haW4oY29uc3QgV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4mIGRvbWFpbikgY29uc3QKLXsKLSAgICBXRUJfUEFHRV9QUk9YWV9BRERJ
VElPTlNfSVNBUFBCT1VORERPTUFJTgotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYlBh
Z2VQcm94eTo6aXNBcHBCb3VuZERvbWFpbihjb25zdCBVUkwmIHVybCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gaXNBcHBCb3VuZERvbWFpbihSZWdpc3RyYWJsZURvbWFpbih1cmwpKTsKLX0KLQotdm9p
ZCBXZWJQYWdlUHJveHk6OnNldElzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4oYm9vbCBpc01h
aW5GcmFtZSwgY29uc3QgVVJMJiByZXF1ZXN0VVJMKQordm9pZCBXZWJQYWdlUHJveHk6OnNldElz
TmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4oYm9vbCBpc01haW5GcmFtZSwgY29uc3QgVVJMJiBy
ZXF1ZXN0VVJMLCBOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiBpc05hdmlnYXRpbmdUb0FwcEJv
dW5kRG9tYWluKQogewogICAgIGlmIChtX3ByZWZlcmVuY2VzLT5pc0luQXBwQnJvd3NlclByaXZh
Y3lFbmFibGVkKCkgJiYgaXNNYWluRnJhbWUpIHsKICAgICAgICAgV0VCX1BBR0VfUFJPWFlfQURE
SVRJT05TX1NFVElTTkFWSUdBVElOR1RPQVBQQk9VTkRET01BSU4KLSAgICAgICAgaWYgKCFpc0Fw
cEJvdW5kRG9tYWluKHJlcXVlc3RVUkwpKSB7CisgICAgICAgIGlmIChpc05hdmlnYXRpbmdUb0Fw
cEJvdW5kRG9tYWluID09IE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluOjpObykgewogICAgICAg
ICAgICAgbV9jb25maWd1cmF0aW9uLT5zZXRXZWJWaWV3Q2F0ZWdvcnkoV2ViVmlld0NhdGVnb3J5
OjpJbkFwcEJyb3dzZXIpOwogICAgICAgICAgICAgbV9pc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9t
YWluID0gTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW46Ok5vOwogICAgICAgICAgICAgbV9oYXNO
YXZpZ2F0ZWRBd2F5RnJvbUFwcEJvdW5kRG9tYWluID0gTmF2aWdhdGVkQXdheUZyb21BcHBCb3Vu
ZERvbWFpbjo6WWVzOwpAQCAtNTAxMyw4ICs1MDAwLDYgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRl
Y2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oUmVmPFdlYlByb2Nlc3NQcm94eT4mJiBwcm9j
ZXMKICAgICBpZiAobmF2aWdhdGlvbklEICYmICFmcm9tQVBJKQogICAgICAgICBtX3BhZ2VMb2Fk
U3RhdGUuY2xlYXJQZW5kaW5nQVBJUmVxdWVzdCh0cmFuc2FjdGlvbik7CiAKLSAgICBzZXRJc05h
dmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKGZyYW1lLmlzTWFpbkZyYW1lKCksIHJlcXVlc3QudXJs
KCkpOwotCiAgICAgaWYgKCFjaGVja1VSTFJlY2VpdmVkRnJvbUN1cnJlbnRPclByZXZpb3VzV2Vi
UHJvY2Vzcyhwcm9jZXNzLCByZXF1ZXN0LnVybCgpKSkgewogICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUl9JRl9BTExPV0VEKFByb2Nlc3MsICJJZ25vcmluZyByZXF1ZXN0IHRvIGxvYWQgdGhpcyBt
YWluIHJlc291cmNlIGJlY2F1c2UgaXQgaXMgb3V0c2lkZSB0aGUgc2FuZGJveCIpOwogICAgICAg
ICBzZW5kZXItPnNlbmQoUG9saWN5RGVjaXNpb24geyBzZW5kZXItPmlkZW50aWZpZXIoKSwgaXNO
YXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbigpLCBoYXNOYXZpZ2F0ZWRBd2F5RnJvbUFwcEJvdW5k
RG9tYWluKCksIFBvbGljeUFjdGlvbjo6SWdub3JlLCAwLCBEb3dubG9hZElEKCksIFdURjo6bnVs
bG9wdCB9KTsKQEAgLTUwNzAsNyArNTA1NSwxMCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGVjaWRl
UG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihSZWY8V2ViUHJvY2Vzc1Byb3h5PiYmIHByb2Nlcwog
ICAgIGlmICghbV9wcmVmZXJlbmNlcy0+c2FmZUJyb3dzaW5nRW5hYmxlZCgpKQogICAgICAgICBz
aG91bGRFeHBlY3RTYWZlQnJvd3NpbmdSZXN1bHQgPSBTaG91bGRFeHBlY3RTYWZlQnJvd3NpbmdS
ZXN1bHQ6Ok5vOwogCi0gICAgYXV0byBsaXN0ZW5lciA9IG1ha2VSZWYoZnJhbWUuc2V0VXBQb2xp
Y3lMaXN0ZW5lclByb3h5KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGZy
YW1lID0gbWFrZVJlZihmcmFtZSksIHNlbmRlciA9IFdURk1vdmUoc2VuZGVyKSwgbmF2aWdhdGlv
bl0gKFBvbGljeUFjdGlvbiBwb2xpY3lBY3Rpb24sIEFQSTo6V2Vic2l0ZVBvbGljaWVzKiBwb2xp
Y2llcywgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5
Q2xpZW50LCBSZWZQdHI8U2FmZUJyb3dzaW5nV2FybmluZz4mJiBzYWZlQnJvd3NpbmdXYXJuaW5n
KSBtdXRhYmxlIHsKKyAgICBhdXRvIGxpc3RlbmVyID0gbWFrZVJlZihmcmFtZS5zZXRVcFBvbGlj
eUxpc3RlbmVyUHJveHkoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgZnJh
bWUgPSBtYWtlUmVmKGZyYW1lKSwgc2VuZGVyID0gV1RGTW92ZShzZW5kZXIpLCBuYXZpZ2F0aW9u
XSAoUG9saWN5QWN0aW9uIHBvbGljeUFjdGlvbiwgQVBJOjpXZWJzaXRlUG9saWNpZXMqIHBvbGlj
aWVzLCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50IHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlD
bGllbnQsIFJlZlB0cjxTYWZlQnJvd3NpbmdXYXJuaW5nPiYmIHNhZmVCcm93c2luZ1dhcm5pbmcs
IE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluIGlzQXBwQm91bmREb21haW4pIG11dGFibGUgewor
CisgICAgICAgIGlmIChwb2xpY3lBY3Rpb24gIT0gUG9saWN5QWN0aW9uOjpJZ25vcmUpCisgICAg
ICAgICAgICBzZXRJc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKGZyYW1lLT5pc01haW5GcmFt
ZSgpLCBuYXZpZ2F0aW9uLT5jdXJyZW50UmVxdWVzdCgpLnVybCgpLCBpc0FwcEJvdW5kRG9tYWlu
KTsKIAogICAgICAgICBhdXRvIGNvbXBsZXRpb25IYW5kbGVyID0gW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBwcm90ZWN0ZWRUaGlzLmNvcHlSZWYoKSwgZnJhbWUgPSBmcmFtZS5jb3B5UmVmKCksIHNl
bmRlciA9IFdURk1vdmUoc2VuZGVyKSwgbmF2aWdhdGlvbiwgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRC
eUNsaWVudCwgcG9saWNpZXMgPSBtYWtlUmVmUHRyKHBvbGljaWVzKV0gKFBvbGljeUFjdGlvbiBw
b2xpY3lBY3Rpb24pIG11dGFibGUgewogICAgICAgICAgICAgaWYgKGZyYW1lLT5pc01haW5GcmFt
ZSgpKSB7CkBAIC01MTE4LDkgKzUxMDYsMTEgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRlY2lkZVBv
bGljeUZvck5hdmlnYXRpb25BY3Rpb24oUmVmPFdlYlByb2Nlc3NQcm94eT4mJiBwcm9jZXMKICAg
ICAgICAgfQogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihwb2xpY3lBY3Rpb24pOwogCi0gICAg
fSwgc2hvdWxkRXhwZWN0U2FmZUJyb3dzaW5nUmVzdWx0KSk7CisgICAgfSwgc2hvdWxkRXhwZWN0
U2FmZUJyb3dzaW5nUmVzdWx0LCBTaG91bGRFeHBlY3RBcHBCb3VuZERvbWFpblJlc3VsdDo6WWVz
KSk7CiAgICAgaWYgKHNob3VsZEV4cGVjdFNhZmVCcm93c2luZ1Jlc3VsdCA9PSBTaG91bGRFeHBl
Y3RTYWZlQnJvd3NpbmdSZXN1bHQ6OlllcykKICAgICAgICAgYmVnaW5TYWZlQnJvd3NpbmdDaGVj
ayhyZXF1ZXN0LnVybCgpLCBmcmFtZS5pc01haW5GcmFtZSgpLCBsaXN0ZW5lcik7CisgICAgCisg
ICAgbV93ZWJzaXRlRGF0YVN0b3JlLT5iZWdpbkFwcEJvdW5kRG9tYWluQ2hlY2soUmVnaXN0cmFi
bGVEb21haW4geyByZXF1ZXN0LnVybCgpIH0sIGxpc3RlbmVyKTsKIAogICAgIEFQSTo6TmF2aWdh
dGlvbiogbWFpbkZyYW1lTmF2aWdhdGlvbiA9IGZyYW1lLmlzTWFpbkZyYW1lKCkgPyBuYXZpZ2F0
aW9uLmdldCgpIDogbnVsbHB0cjsKICAgICBXZWJGcmFtZVByb3h5KiBvcmlnaW5hdGluZ0ZyYW1l
ID0gb3JpZ2luYXRpbmdGcmFtZUluZm9EYXRhLmZyYW1lSUQgPyBwcm9jZXNzLT53ZWJGcmFtZSgq
b3JpZ2luYXRpbmdGcmFtZUluZm9EYXRhLmZyYW1lSUQpIDogbnVsbHB0cjsKQEAgLTUyNTEsNyAr
NTI0MSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rp
b24oRnJhbWVJZGVudGlmaWVyIGZyYW1lSUQsIEZyYW1lCiAgICAgTUVTU0FHRV9DSEVDSyhtX3By
b2Nlc3MsIGZyYW1lKTsKICAgICBNRVNTQUdFX0NIRUNLX1VSTChtX3Byb2Nlc3MsIHJlcXVlc3Qu
dXJsKCkpOwogCi0gICAgYXV0byBsaXN0ZW5lciA9IG1ha2VSZWYoZnJhbWUtPnNldFVwUG9saWN5
TGlzdGVuZXJQcm94eShbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBpZGVu
dGlmaWVyLCBsaXN0ZW5lcklELCBmcmFtZUlEXSAoUG9saWN5QWN0aW9uIHBvbGljeUFjdGlvbiwg
QVBJOjpXZWJzaXRlUG9saWNpZXMqLCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50IHByb2Nl
c3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIFJlZlB0cjxTYWZlQnJvd3NpbmdXYXJuaW5nPiYmIHNh
ZmVCcm93c2luZ1dhcm5pbmcpIG11dGFibGUgeworICAgIGF1dG8gbGlzdGVuZXIgPSBtYWtlUmVm
KGZyYW1lLT5zZXRVcFBvbGljeUxpc3RlbmVyUHJveHkoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBt
YWtlUmVmKCp0aGlzKSwgaWRlbnRpZmllciwgbGlzdGVuZXJJRCwgZnJhbWVJRF0gKFBvbGljeUFj
dGlvbiBwb2xpY3lBY3Rpb24sIEFQSTo6V2Vic2l0ZVBvbGljaWVzKiwgUHJvY2Vzc1N3YXBSZXF1
ZXN0ZWRCeUNsaWVudCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBSZWZQdHI8U2FmZUJy
b3dzaW5nV2FybmluZz4mJiBzYWZlQnJvd3NpbmdXYXJuaW5nLCBOYXZpZ2F0aW5nVG9BcHBCb3Vu
ZERvbWFpbiBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKSBtdXRhYmxlIHsKICAgICAgICAg
Ly8gRklYTUU6IEFzc2VydCB0aGUgQVBJOjpXZWJzaXRlUG9saWNpZXMqIGlzIG51bGxwdHIgaGVy
ZSBvbmNlIGNsaWVudHMgb2YgV0tGcmFtZVBvbGljeUxpc3RlbmVyVXNlV2l0aFBvbGljaWVzIGdv
IGF3YXkuCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGll
bnQgPT0gUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudDo6Tm8pOwogICAgICAgICBBU1NFUlRf
VU5VU0VEKHNhZmVCcm93c2luZ1dhcm5pbmcsICFzYWZlQnJvd3NpbmdXYXJuaW5nKTsKQEAgLTUy
NjEsNyArNTI1MSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JOZXdXaW5k
b3dBY3Rpb24oRnJhbWVJZGVudGlmaWVyIGZyYW1lSUQsIEZyYW1lCiAgICAgICAgIH0pOwogCiAg
ICAgICAgIHJlY2VpdmVkUG9saWN5RGVjaXNpb24ocG9saWN5QWN0aW9uLCBudWxscHRyLCBXVEY6
Om51bGxvcHQsIFdURk1vdmUoc2VuZGVyKSk7Ci0gICAgfSwgU2hvdWxkRXhwZWN0U2FmZUJyb3dz
aW5nUmVzdWx0OjpObykpOworICAgIH0sIFNob3VsZEV4cGVjdFNhZmVCcm93c2luZ1Jlc3VsdDo6
Tm8sIFNob3VsZEV4cGVjdEFwcEJvdW5kRG9tYWluUmVzdWx0OjpObykpOwogCiAgICAgaWYgKG1f
cG9saWN5Q2xpZW50KQogICAgICAgICBtX3BvbGljeUNsaWVudC0+ZGVjaWRlUG9saWN5Rm9yTmV3
V2luZG93QWN0aW9uKCp0aGlzLCAqZnJhbWUsIG5hdmlnYXRpb25BY3Rpb25EYXRhLCByZXF1ZXN0
LCBmcmFtZU5hbWUsIFdURk1vdmUobGlzdGVuZXIpLCBtX3Byb2Nlc3MtPnRyYW5zZm9ybUhhbmRs
ZXNUb09iamVjdHModXNlckRhdGEub2JqZWN0KCkpLmdldCgpKTsKQEAgLTUyOTcsMTAgKzUyODcs
OSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGVjaWRlUG9saWN5Rm9yUmVzcG9uc2VTaGFyZWQoUmVm
PFdlYlByb2Nlc3NQcm94eT4mJiBwcm9jZXNzLAogICAgIE1FU1NBR0VfQ0hFQ0socHJvY2Vzcywg
ZnJhbWUpOwogICAgIE1FU1NBR0VfQ0hFQ0tfVVJMKHByb2Nlc3MsIHJlcXVlc3QudXJsKCkpOwog
ICAgIE1FU1NBR0VfQ0hFQ0tfVVJMKHByb2Nlc3MsIHJlc3BvbnNlLnVybCgpKTsKLQogICAgIFJl
ZlB0cjxBUEk6Ok5hdmlnYXRpb24+IG5hdmlnYXRpb24gPSBuYXZpZ2F0aW9uSUQgPyBtX25hdmln
YXRpb25TdGF0ZS0+bmF2aWdhdGlvbihuYXZpZ2F0aW9uSUQpIDogbnVsbHB0cjsKICAgICBhdXRv
IGxpc3RlbmVyID0gbWFrZVJlZihmcmFtZS0+c2V0VXBQb2xpY3lMaXN0ZW5lclByb3h5KFt0aGlz
LCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHdlYlBhZ2VJRCwgZnJhbWVJRCwgaWRl
bnRpZmllciwgbGlzdGVuZXJJRCwgbmF2aWdhdGlvbiA9IFdURk1vdmUobmF2aWdhdGlvbiksCi0g
ICAgICAgIHByb2Nlc3MgPSBwcm9jZXNzLmNvcHlSZWYoKV0gKFBvbGljeUFjdGlvbiBwb2xpY3lB
Y3Rpb24sIEFQSTo6V2Vic2l0ZVBvbGljaWVzKiwgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVu
dCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBSZWZQdHI8U2FmZUJyb3dzaW5nV2Fybmlu
Zz4mJiBzYWZlQnJvd3NpbmdXYXJuaW5nKSBtdXRhYmxlIHsKKyAgICAgICAgcHJvY2VzcyA9IHBy
b2Nlc3MuY29weVJlZigpXSAoUG9saWN5QWN0aW9uIHBvbGljeUFjdGlvbiwgQVBJOjpXZWJzaXRl
UG9saWNpZXMqLCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50IHByb2Nlc3NTd2FwUmVxdWVz
dGVkQnlDbGllbnQsIFJlZlB0cjxTYWZlQnJvd3NpbmdXYXJuaW5nPiYmIHNhZmVCcm93c2luZ1dh
cm5pbmcsIE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluIGlzTmF2aWdhdGluZ1RvQXBwQm91bmRE
b21haW4pIG11dGFibGUgewogICAgICAgICAvLyBGSVhNRTogQXNzZXJ0IHRoZSBBUEk6OldlYnNp
dGVQb2xpY2llcyogaXMgbnVsbHB0ciBoZXJlIG9uY2UgY2xpZW50cyBvZiBXS0ZyYW1lUG9saWN5
TGlzdGVuZXJVc2VXaXRoUG9saWNpZXMgZ28gYXdheS4KICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
cHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCA9PSBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xp
ZW50OjpObyk7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoc2FmZUJyb3dzaW5nV2FybmluZywgIXNh
ZmVCcm93c2luZ1dhcm5pbmcpOwpAQCAtNTMxMCw4ICs1Mjk5LDcgQEAgdm9pZCBXZWJQYWdlUHJv
eHk6OmRlY2lkZVBvbGljeUZvclJlc3BvbnNlU2hhcmVkKFJlZjxXZWJQcm9jZXNzUHJveHk+JiYg
cHJvY2VzcywKICAgICAgICAgfSk7CiAgICAgICAgIAogICAgICAgICByZWNlaXZlZFBvbGljeURl
Y2lzaW9uKHBvbGljeUFjdGlvbiwgbmF2aWdhdGlvbi5nZXQoKSwgV1RGOjpudWxsb3B0LCBXVEZN
b3ZlKHNlbmRlcikpOwotICAgIH0sIFNob3VsZEV4cGVjdFNhZmVCcm93c2luZ1Jlc3VsdDo6Tm8p
KTsKLQorICAgIH0sIFNob3VsZEV4cGVjdFNhZmVCcm93c2luZ1Jlc3VsdDo6Tm8sIFNob3VsZEV4
cGVjdEFwcEJvdW5kRG9tYWluUmVzdWx0OjpObykpOwogICAgIGlmIChtX3BvbGljeUNsaWVudCkK
ICAgICAgICAgbV9wb2xpY3lDbGllbnQtPmRlY2lkZVBvbGljeUZvclJlc3BvbnNlKCp0aGlzLCAq
ZnJhbWUsIHJlc3BvbnNlLCByZXF1ZXN0LCBjYW5TaG93TUlNRVR5cGUsIFdURk1vdmUobGlzdGVu
ZXIpLCBwcm9jZXNzLT50cmFuc2Zvcm1IYW5kbGVzVG9PYmplY3RzKHVzZXJEYXRhLm9iamVjdCgp
KS5nZXQoKSk7CiAgICAgZWxzZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5o
CmluZGV4IGM2OGU1NzcxMzVkNDczYjAzMjBhYmU2ZDhkZjNiY2E5MmNmZGJhY2MuLmI3NzllYjIw
MDMwYzM3OGM2MDRmZjRiMWYzNzhiYzUxOWNiYmU3ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5oCkBAIC0zNDUsNyArMzQ1LDcgQEAgc3RydWN0IFVSTFNjaGVtZVRhc2tQ
YXJhbWV0ZXJzOwogc3RydWN0IFVzZXJNZXNzYWdlOwogCiBlbnVtIGNsYXNzIE5lZ290aWF0ZWRM
ZWdhY3lUTFMgOiBib29sOwotZW51bSBjbGFzcyBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50
OworZW51bSBjbGFzcyBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50IDogYm9vbDsKIGVudW0g
Y2xhc3MgVW5kb09yUmVkbyA6IGJvb2w7CiBlbnVtIGNsYXNzIFdlYkNvbnRlbnRNb2RlIDogdWlu
dDhfdDsKIApAQCAtMjI2Miw5ICsyMjYyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHRyeUNsb3Nl
VGltZWRPdXQoKTsKICAgICB2b2lkIG1ha2VTdG9yYWdlU3BhY2VSZXF1ZXN0KFdlYkNvcmU6OkZy
YW1lSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJp
bmcmIGRhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdWludDY0X3QgY3Vy
cmVudFF1b3RhLCB1aW50NjRfdCBjdXJyZW50T3JpZ2luVXNhZ2UsIHVpbnQ2NF90IGN1cnJlbnRE
YXRhYmFzZVVzYWdlLCB1aW50NjRfdCBleHBlY3RlZFVzYWdlLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKHVpbnQ2NF90KT4mJik7CiAgICAgICAgIAotICAgIGJvb2wgaXNBcHBCb3VuZERvbWFpbihj
b25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0OwotICAgIGJvb2wgaXNBcHBC
b3VuZERvbWFpbihjb25zdCBVUkwmKSBjb25zdDsKLSAgICB2b2lkIHNldElzTmF2aWdhdGluZ1Rv
QXBwQm91bmREb21haW4oYm9vbCBpc01haW5GcmFtZSwgY29uc3QgVVJMJik7CisgICAgdm9pZCBz
ZXRJc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKGJvb2wgaXNNYWluRnJhbWUsIGNvbnN0IFVS
TCYsIE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKTsKICAgICBOYXZpZ2F0aW5nVG9BcHBCb3Vu
ZERvbWFpbiBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKCkgY29uc3QgeyByZXR1cm4gbV9p
c05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluOyB9CiAgICAgTmF2aWdhdGVkQXdheUZyb21BcHBC
b3VuZERvbWFpbiBoYXNOYXZpZ2F0ZWRBd2F5RnJvbUFwcEJvdW5kRG9tYWluKCkgY29uc3QgeyBy
ZXR1cm4gbV9oYXNOYXZpZ2F0ZWRBd2F5RnJvbUFwcEJvdW5kRG9tYWluOyB9CiAgICAgICAgIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKaW5kZXggNTE1NWJhOGI0YTAz
NjI3ZGRmNWQ1NmQzMjM3MzFlZWI3Y2MwOTBhMC4uMTA2OGY2MjU1MzgzOTljYmU4Njk2ZjhiYzAx
OGYyMDgwNDcwMmNhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJv
Y2Vzc1Bvb2wuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5o
CkBAIC0xMjMsNyArMTIzLDcgQEAgaW50IHdlYlByb2Nlc3NMYXRlbmN5UU9TKCk7CiBpbnQgd2Vi
UHJvY2Vzc1Rocm91Z2hwdXRRT1MoKTsKICNlbmRpZgogCi1lbnVtIGNsYXNzIFByb2Nlc3NTd2Fw
UmVxdWVzdGVkQnlDbGllbnQ7CitlbnVtIGNsYXNzIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGll
bnQgOiBib29sOwogCiBjbGFzcyBXZWJQcm9jZXNzUG9vbCBmaW5hbCA6IHB1YmxpYyBBUEk6Ok9i
amVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OlByb2Nlc3NQb29sPiwgcHVibGljIENhbk1ha2VX
ZWFrUHRyPFdlYlByb2Nlc3NQb29sPiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CiBw
dWJsaWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9D
b2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0KaW5kZXggZGJkMzBkMDQz
MDdkMTgxMzk1OWQ5NTNjMjU0NTE3ZjdlOTIxZDFhYS4uODFmNWRlYjVmMTc0YjM0N2QxZmQ5OGE1
MjZlMzUyMDMyNWFiM2I3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
c2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbQpA
QCAtMjksNiArMjksNyBAQAogI2ltcG9ydCAiQ29va2llU3RvcmFnZVV0aWxzQ0YuaCIKICNpbXBv
cnQgIlNhbmRib3hVdGlsaXRpZXMuaCIKICNpbXBvcnQgIlN0b3JhZ2VNYW5hZ2VyLmgiCisjaW1w
b3J0ICJXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkuaCIKICNpbXBvcnQgIldlYlByZWZlcmVu
Y2VzS2V5cy5oIgogI2ltcG9ydCAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgiCiAj
aW1wb3J0ICJXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycy5oIgpAQCAtNDQsNiArNDUsMTIgQEAK
ICNpbXBvcnQgPHd0Zi9VUkwuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4K
IAorI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCisjaW5jbHVkZSA8V2ViS2l0QWRkaXRpb25z
L1dlYnNpdGVEYXRhU3RvcmVBZGRpdGlvbnMuaD4KKyNlbHNlCisjZGVmaW5lIFdFQlNJVEVfREFU
QV9TVE9SRV9BRERJVElPTlMKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICNp
bXBvcnQgPFVJS2l0L1VJQXBwbGljYXRpb24uaD4KICNpbXBvcnQgPHBhbC9pb3MvTWFuYWdlZENv
bmZpZ3VyYXRpb25Tb2Z0TGluay5oPgpAQCAtNjEsNiArNjgsOCBAQCBzdGF0aWMgSGFzaFNldDxX
ZWJzaXRlRGF0YVN0b3JlKj4mIGRhdGFTdG9yZXMoKQogCiBzdGF0aWMgTlNTdHJpbmcgKiBjb25z
dCBXZWJLaXROZXR3b3JrTG9hZFRocm90dGxlTGF0ZW5jeU1pbGxpc2Vjb25kc0RlZmF1bHRzS2V5
ID0gQCJXZWJLaXROZXR3b3JrTG9hZFRocm90dGxlTGF0ZW5jeU1pbGxpc2Vjb25kcyI7CiAKK3N0
YXRpYyBzdGQ6OmF0b21pYzxib29sPiBpbml0aWFsaXplZEFwcEJvdW5kRG9tYWlucyA9IGZhbHNl
OworCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKIFdlYkNvcmU6OlRoaXJk
UGFydHlDb29raWVCbG9ja2luZ01vZGUgV2Vic2l0ZURhdGFTdG9yZTo6dGhpcmRQYXJ0eUNvb2tp
ZUJsb2NraW5nTW9kZSgpIGNvbnN0CiB7CkBAIC00MTksNCArNDI4LDc0IEBAIFdURjo6U3RyaW5n
IFdlYnNpdGVEYXRhU3RvcmU6OndlYnNpdGVEYXRhRGlyZWN0b3J5RmlsZVN5c3RlbVJlcHJlc2Vu
dGF0aW9uKGNvbnN0CiAgICAgcmV0dXJuIHVybC5hYnNvbHV0ZVVSTC5wYXRoLmZpbGVTeXN0ZW1S
ZXByZXNlbnRhdGlvbjsKIH0KIAorc3RhdGljIEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW4+JiBhcHBCb3VuZERvbWFpbnMoKQoreworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4o
KSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4+PiBhcHBCb3VuZERvbWFpbnM7CisgICAgcmV0dXJuIGFwcEJvdW5kRG9tYWluczsK
K30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppbml0aWFsaXplQXBwQm91bmREb21haW5zKCkK
K3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKGluaXRpYWxpemVk
QXBwQm91bmREb21haW5zKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgc3RhdGljIGNvbnN0
IGF1dG8gbWF4QXBwQm91bmREb21haW5Db3VudCA9IDEwOworICAgIAorICAgIG1fcXVldWUtPmRp
c3BhdGNoKFtdICgpIG11dGFibGUgeworCisgICAgICAgIGlmIChpbml0aWFsaXplZEFwcEJvdW5k
RG9tYWlucykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIE5TQXJyYXk8
TlNTdHJpbmcgKj4gKmRvbWFpbnMgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIG9iamVjdEZvcklu
Zm9EaWN0aW9uYXJ5S2V5OkAiV0tBcHBCb3VuZERvbWFpbnMiXTsKKyAgICAgICAgCisgICAgICAg
IFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbZG9tYWlucyA9IHJldGFpblB0cihkb21haW5zKV0g
eworICAgICAgICAgICAgZm9yIChOU1N0cmluZyAqZG9tYWluIGluIGRvbWFpbnMuZ2V0KCkpIHsK
KyAgICAgICAgICAgICAgICBVUkwgdXJsIHsgVVJMKCksIGRvbWFpbiB9OworICAgICAgICAgICAg
ICAgIFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluIGFwcEJvdW5kRG9tYWluIHsgdXJsIH07Cisg
ICAgICAgICAgICAgICAgaWYgKCFhcHBCb3VuZERvbWFpbi5pc0VtcHR5KCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgYXBwQm91bmREb21haW5zKCkuYWRkKGFwcEJvdW5kRG9tYWluKTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGFwcEJvdW5kRG9tYWlucygpLnNpemUoKSA+PSBtYXhBcHBCb3Vu
ZERvbWFpbkNvdW50KQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgV0VCU0lURV9EQVRBX1NUT1JFX0FE
RElUSU9OUworICAgICAgICAgICAgaW5pdGlhbGl6ZWRBcHBCb3VuZERvbWFpbnMgPSB0cnVlOwor
ICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjplbnN1cmVB
cHBCb3VuZERvbWFpbnMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBIYXNoU2V0PFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluPiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGlm
IChpbml0aWFsaXplZEFwcEJvdW5kRG9tYWlucykgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihhcHBCb3VuZERvbWFpbnMoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3F1
ZXVlLT5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0gKCkgbXV0YWJsZSB7CisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7
CisgICAgICAgICAgICBBU1NFUlQoaW5pdGlhbGl6ZWRBcHBCb3VuZERvbWFpbnMpOworICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoYXBwQm91bmREb21haW5zKCkpOworICAgICAgICB9KTsK
KyAgICB9KTsKK30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpiZWdpbkFwcEJvdW5kRG9tYWlu
Q2hlY2soV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4mJiBkb21haW4sIFdlYkZyYW1lUG9saWN5
TGlzdGVuZXJQcm94eSYgbGlzdGVuZXIpCit7CisgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigp
KTsKKworICAgIGVuc3VyZUFwcEJvdW5kRG9tYWlucyhbZG9tYWluID0gV1RGTW92ZShkb21haW4p
LCBsaXN0ZW5lciA9IG1ha2VSZWYobGlzdGVuZXIpXSAoYXV0byYgZG9tYWlucykgbXV0YWJsZSB7
CisgICAgICAgIGxpc3RlbmVyLT5kaWRSZWNlaXZlQXBwQm91bmREb21haW5SZXN1bHQoZG9tYWlu
cy5jb250YWlucyhkb21haW4pKTsKKyAgICB9KTsKK30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3Jl
OjpnZXRBcHBCb3VuZERvbWFpbnNGb3JUZXN0aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVj
dG9yPFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
K3sKKyAgICBlbnN1cmVBcHBCb3VuZERvbWFpbnMoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildIChhdXRvJiBkb21haW5zKSBtdXRhYmxlIHsKKyAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoY29weVRvVmVjdG9yKGRvbWFpbnMpKTsKKyAgICB9KTsKK30KKwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0
ZURhdGFTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJz
aXRlRGF0YVN0b3JlLmNwcAppbmRleCAwNThlNDlmODczZTMzNmMxNzRlYjQyODE4ZjRlNWExZjJl
YzIwYzYzLi4zYzI5MGUwN2ViZGY1ZmM3OTNkYjQzMjIzZmQ4MzM5MGFhMTEwYjQyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3Jl
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0
YVN0b3JlLmNwcApAQCAtMTE3LDcgKzExNyw5IEBAIFdlYnNpdGVEYXRhU3RvcmU6OldlYnNpdGVE
YXRhU3RvcmUoUmVmPFdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uPiYmIGNvbmZpZ3VyCiAg
ICAgV1RGOjpzZXRQcm9jZXNzUHJpdmlsZWdlcyhhbGxQcml2aWxlZ2VzKCkpOwogICAgIG1heWJl
UmVnaXN0ZXJXaXRoU2Vzc2lvbklETWFwKCk7CiAgICAgcGxhdGZvcm1Jbml0aWFsaXplKCk7Ci0K
KyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBpbml0aWFsaXplQXBwQm91bmREb21haW5zKCk7Cisj
ZW5kaWYKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmggYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKaW5k
ZXggNTZhZjNmOTk3NjFmNDhjNzhjMzMwMmEzMmRjM2E1NTRiMWVlYzhhYS4uOTE3NGYyM2I0Mzg4
NjgxN2YxMTkwYjdhZWVjNzM0NzgzNjVhODAxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaApAQCAtMjgsNiArMjgs
NyBAQAogI2luY2x1ZGUgIkxvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tlci5oIgogI2luY2x1ZGUg
Ik5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCiAjaW5jbHVkZSAiV2ViRGV2aWNl
T3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiV2ViRnJh
bWVQb2xpY3lMaXN0ZW5lclByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5SWRlbnRpZmll
ci5oIgogI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oIgogI2luY2x1
ZGUgIldlYnNpdGVEYXRhU3RvcmVDbGllbnQuaCIKQEAgLTI4Miw3ICsyODMsMTIgQEAgcHVibGlj
OgogICAgIHZvaWQgaGFzQXBwQm91bmRTZXNzaW9uKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9v
bCk+JiYpIGNvbnN0OwogICAgIHZvaWQgc2V0SW5BcHBCcm93c2VyUHJpdmFjeUVuYWJsZWQoYm9v
bCBlbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogCisgICAgdm9pZCBiZWdp
bkFwcEJvdW5kRG9tYWluQ2hlY2soV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4mJiwgV2ViRnJh
bWVQb2xpY3lMaXN0ZW5lclByb3h5Jik7CisgICAgdm9pZCBnZXRBcHBCb3VuZERvbWFpbnNGb3JU
ZXN0aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluPiYmKT4mJik7CisgICAgdm9pZCBlbnN1cmVBcHBCb3VuZERvbWFpbnMoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChjb25zdCBIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiYp
PiYmKTsKKwogcHJpdmF0ZToKKyAgICB2b2lkIGluaXRpYWxpemVBcHBCb3VuZERvbWFpbnMoKTsK
ICAgICB2b2lkIGZldGNoRGF0YUFuZEFwcGx5KE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+LCBP
cHRpb25TZXQ8V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4sIFJlZlB0cjxXb3JrUXVldWU+JiYsIEZ1
bmN0aW9uPHZvaWQoVmVjdG9yPFdlYnNpdGVEYXRhUmVjb3JkPik+JiYgYXBwbHkpOwogCiAgICAg
dm9pZCBwbGF0Zm9ybUluaXRpYWxpemUoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCAzNjQ0OWYyNDU0YTYwZmQ5ZDc5MzAwZGQyMmIyZmE1YTQ2
OTRhOGM1Li40MGEzMzJlNWMyM2VjMzRiNTM1OWJjZWRhOWVhYzRmNGE3Mjk4Mzk0IDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTgg
QEAKKzIwMjAtMDMtMDYgIEthdGUgQ2hlbmV5ICA8a2F0aGVyaW5lX2NoZW5leUBhcHBsZS5jb20+
CisKKyAgICAgICAgVUlQcm9jZXNzIG5lZWRzIG1lY2hhbmlzbSB0byBzcGVjaWZ5IEFwcEJvdW5k
IGRvbWFpbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwODUyOAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTk5ODAzNDA+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgdGVzdCBhcHAtYm91bmQg
ZG9tYWlucyB0byB0aGUgcGxpc3QgYW5kIHRlc3RlZCB0aGF0IHRoZSBkb21haW5zCisgICAgICAg
IGFyZSBwcm9wZXJseSBzdG9yZWQgaW4gdGhlIHdlYnNpdGUgZGF0YSBzdG9yZSBhZnRlciBhIG5h
dmlnYXRpb24uCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL0luZm8ucGxpc3Q6CisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbkFwcEJyb3dzZXJQcml2YWN5Lm1t
OgorICAgICAgICAoVEVTVCk6CisKIDIwMjAtMDMtMDYgIExhdXJvIE1vdXJhIDxsbW91cmFAaWdh
bGlhLmNvbT4KIAogICAgICAgICBbV1BFXVtXZWJEcml2ZXJdIE1pbmlCcm93c2VyIHNob3VsZCBy
ZWFjdCB0byBjbG9zZSBzZXNzaW9uIGNvbW1hbmRzCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL0luZm8ucGxpc3QgYi9Ub29scy9UZXN0V2ViS2l0QVBJL0luZm8ucGxpc3QKaW5kZXgg
NDIxNmI2ZDcxMzNjZjFhZDczN2Y4ZDYyNWM1MzJhYTkyYTFkODExOC4uOTg2M2YzMzcyYTVmZjhk
ZDg0MmIxZTA3YzQzMWE0Nzg1YmM0NmJkMCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9JbmZvLnBsaXN0CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvSW5mby5wbGlzdApAQCAtMiw2
ICsyLDI1IEBACiA8IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEu
MC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4K
IDxwbGlzdCB2ZXJzaW9uPSIxLjAiPgogPGRpY3Q+CisJPGtleT5XS0FwcEJvdW5kRG9tYWluczwv
a2V5PgorCTxhcnJheT4KKwkJPHN0cmluZz50ZXN0RG9tYWluMTwvc3RyaW5nPgorCQk8c3RyaW5n
Pmh0dHBzOi8vc3ViLmRvbWFpbi53ZWJraXQub3JnL3JvYWQvdG8vbm93aGVyZS88L3N0cmluZz4K
KwkJPHN0cmluZz5odHRwczovL3dlYmtpdC5vcmc8L3N0cmluZz4KKwkJPHN0cmluZz5odHRwczov
L2xvY2FsaG9zdDo4MDAwPC9zdHJpbmc+CisJCTxzdHJpbmc+aHR0cDovL2xvY2FsaG9zdC9yb2Fk
L3RvL25vd2hlcmUvPC9zdHJpbmc+CisJCTxzdHJpbmc+ZmlsZTovLy9zb21lL2ZpbGU8L3N0cmlu
Zz4KKwkJPHN0cmluZz4xMjcuMC4wLjE8L3N0cmluZz4KKwkJPHN0cmluZz48L3N0cmluZz4KKwkJ
PHN0cmluZz4gICA8L3N0cmluZz4KKwkJPHN0cmluZz5odHRwczovL3N1Yi5kb21haW4ud2Via2l0
Lm9yZzwvc3RyaW5nPgorCQk8c3RyaW5nPmh0dHBzOi8vd3d3LmFwcGxlLmNvbS88L3N0cmluZz4K
KwkJPHN0cmluZz5odHRwczovL3dlYmtpdC5vcmc8L3N0cmluZz4KKwkJPHN0cmluZz5odHRwczov
L3d3dy5hcHBsZS5jb20vaXBob25lLzwvc3RyaW5nPgorCQk8c3RyaW5nPmh0dHA6Ly93d3cuZXhh
bXBsZS5jb20vPC9zdHJpbmc+CisJCTxzdHJpbmc+aHR0cDovL2Jhci5jb20vPC9zdHJpbmc+CisJ
CTxzdHJpbmc+aHR0cDovL2Zvby5jb20vPC9zdHJpbmc+CisJPC9hcnJheT4KIAk8a2V5PkNGQnVu
ZGxlTmFtZTwva2V5PgogCTxzdHJpbmc+JHtQUk9EVUNUX05BTUV9PC9zdHJpbmc+CiAJPGtleT5D
RkJ1bmRsZUlkZW50aWZpZXI8L2tleT4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvSW5BcHBCcm93c2VyUHJpdmFjeS5tbSBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5BcHBCcm93c2VyUHJpdmFjeS5tbQppbmRleCA3OWU0
NTFlMzU1YzJkODgxNTQ1NTE3OTEyNGQ3MDcxMTg4Mjc0MDgzLi4yZTNjMzg4ZmE1NjIwZmU2NWQz
ODIzNTNiYTJlNjZlYjE2NTBmMmY2IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL0luQXBwQnJvd3NlclByaXZhY3kubW0KKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9JbkFwcEJyb3dzZXJQcml2YWN5Lm1tCkBAIC0yOSw4
ICsyOSwxMSBAQAogI2ltcG9ydCAiVGVzdE5hdmlnYXRpb25EZWxlZ2F0ZS5oIgogI2ltcG9ydCAi
VGVzdFdLV2ViVmlldy5oIgogI2ltcG9ydCAiV0tXZWJWaWV3Q29uZmlndXJhdGlvbkV4dHJhcy5o
IgorI2ltcG9ydCA8V2ViQ29yZS9SZWdpc3RyYWJsZURvbWFpbi5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9SdW50aW1lQXBwbGljYXRpb25DaGVja3MuaD4KICNpbXBvcnQgPFdlYktpdC9XS1ByZWZlcmVu
Y2VzUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJp
dmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaD4KICNp
bXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiAjaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NE
SykKQEAgLTUwLDcgKzUzLDcgQEAgLSAodm9pZCl1c2VyQ29udGVudENvbnRyb2xsZXI6KFdLVXNl
ckNvbnRlbnRDb250cm9sbGVyICopdXNlckNvbnRlbnRDb250cm9sbGVyIGQKIAogQGVuZAogCi1U
RVNUKFdlYktpdCwgTm9uQXBwQm91bmREb21haW5GYWlsZWRVc2VyU2NyaXB0cykKK1RFU1QoSW5B
cHBCcm93c2VyUHJpdmFjeSwgTm9uQXBwQm91bmREb21haW5GYWlsZWRVc2VyU2NyaXB0cykKIHsK
ICAgICBhdXRvIG1lc3NhZ2VIYW5kbGVyID0gYWRvcHROUyhbW1Rlc3RJbkFwcEJyb3dzZXJTY3Jp
cHRNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdF0pOwogICAgIGF1dG8gdXNlclNjcmlwdCA9IGFk
b3B0TlMoW1tXS1VzZXJTY3JpcHQgYWxsb2NdIGluaXRXaXRoU291cmNlOnVzZXJTY3JpcHRTb3Vy
Y2UgaW5qZWN0aW9uVGltZTpXS1VzZXJTY3JpcHRJbmplY3Rpb25UaW1lQXREb2N1bWVudFN0YXJ0
IGZvck1haW5GcmFtZU9ubHk6WUVTXSk7CkBAIC05NSw3ICs5OCw3IEBAIFRFU1QoV2ViS2l0LCBO
b25BcHBCb3VuZERvbWFpbkZhaWxlZFVzZXJTY3JpcHRzKQogICAgIFRlc3RXZWJLaXRBUEk6OlV0
aWw6OnJ1bigmaXNEb25lKTsKIH0KIAotVEVTVChXZWJLaXQsIE5vbkFwcEJvdW5kRG9tYWluRmFp
bGVkVXNlckFnZW50U2NyaXB0cykKK1RFU1QoSW5BcHBCcm93c2VyUHJpdmFjeSwgTm9uQXBwQm91
bmREb21haW5GYWlsZWRVc2VyQWdlbnRTY3JpcHRzKQogewogICAgIFdLV2ViVmlld0NvbmZpZ3Vy
YXRpb24gKmNvbmZpZ3VyYXRpb24gPSBbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBfdGVzdF9jb25m
aWd1cmF0aW9uV2l0aFRlc3RQbHVnSW5DbGFzc05hbWU6QCJXZWJQcm9jZXNzUGx1Z0luV2l0aElu
dGVybmFscyIgY29uZmlndXJlSlNDRm9yVGVzdGluZzpZRVNdOwogICAgIFtbY29uZmlndXJhdGlv
biBwcmVmZXJlbmNlc10gX3NldEluQXBwQnJvd3NlclByaXZhY3lFbmFibGVkOk5PXTsKQEAgLTEz
Miw3ICsxMzUsNyBAQCBURVNUKFdlYktpdCwgTm9uQXBwQm91bmREb21haW5GYWlsZWRVc2VyQWdl
bnRTY3JpcHRzKQogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmaXNEb25lKTsKIH0KIAot
VEVTVChXZWJLaXQsIFN3YXBCYWNrVG9BcHBCb3VuZFJlamVjdHNVc2VyU2NyaXB0KQorVEVTVChJ
bkFwcEJyb3dzZXJQcml2YWN5LCBTd2FwQmFja1RvQXBwQm91bmRSZWplY3RzVXNlclNjcmlwdCkK
IHsKICAgICBhdXRvIG1lc3NhZ2VIYW5kbGVyID0gYWRvcHROUyhbW1Rlc3RJbkFwcEJyb3dzZXJT
Y3JpcHRNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdF0pOwogICAgIGF1dG8gdXNlclNjcmlwdCA9
IGFkb3B0TlMoW1tXS1VzZXJTY3JpcHQgYWxsb2NdIGluaXRXaXRoU291cmNlOnVzZXJTY3JpcHRT
b3VyY2UgaW5qZWN0aW9uVGltZTpXS1VzZXJTY3JpcHRJbmplY3Rpb25UaW1lQXREb2N1bWVudFN0
YXJ0IGZvck1haW5GcmFtZU9ubHk6WUVTXSk7CkBAIC0xNzYsMyArMTc5LDIyIEBAIFRFU1QoV2Vi
S2l0LCBTd2FwQmFja1RvQXBwQm91bmRSZWplY3RzVXNlclNjcmlwdCkKIH0KIAogI2VuZGlmIC8v
IFVTRShBUFBMRV9JTlRFUk5BTF9TREspCisKK1RFU1QoSW5BcHBCcm93c2VyUHJpdmFjeSwgQXBw
Qm91bmREb21haW5zKQoreworICAgIGlzRG9uZSA9IGZhbHNlOworICAgIFtbV0tXZWJzaXRlRGF0
YVN0b3JlIGRlZmF1bHREYXRhU3RvcmVdIF9nZXRBcHBCb3VuZERvbWFpbnM6XihOU0FycmF5PE5T
U3RyaW5nICo+ICpkb21haW5zKSB7CisgICAgICAgIE5TQXJyYXkgKmRvbWFpbnNUb0NvbXBhcmUg
PSBbTlNBcnJheSBhcnJheVdpdGhPYmplY3RzOkAiYXBwbGUuY29tIiwgQCJiYXIuY29tIiwgQCJl
eGFtcGxlLmNvbSIsIEAiZm9vLmNvbSIsIEAibG9jYWxob3N0IiwgQCJ3ZWJraXQub3JnIiwgbmls
XTsKKworICAgICAgICBOU0FycmF5ICpzb3J0ZWREb21haW5zID0gW2RvbWFpbnMgc29ydGVkQXJy
YXlVc2luZ1NlbGVjdG9yOkBzZWxlY3RvcihjYXNlSW5zZW5zaXRpdmVDb21wYXJlOildOworCisg
ICAgICAgIGludCBsZW5ndGggPSBbc29ydGVkRG9tYWlucyBjb3VudF07CisgICAgICAgIEVYUEVD
VF9FUShsZW5ndGgsIDYpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsr
KSB7CisgICAgICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoW3NvcnRlZERvbWFpbnMgb2JqZWN0QXRJ
bmRleDppXSwgW2RvbWFpbnNUb0NvbXBhcmUgb2JqZWN0QXRJbmRleDppXSk7CisgICAgICAgICAg
ICBpc0RvbmUgPSB0cnVlOworICAgICAgICB9CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6cnVuKCZpc0RvbmUpOworfQorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392817</attachid>
            <date>2020-03-06 17:28:41 -0800</date>
            <delta_ts>2020-03-06 19:20:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-208528-20200306172841.patch</filename>
            <type>text/plain</type>
            <size>37086</size>
            <attacher name="Kate Cheney">katherine_cheney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU3OTk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDUzMTgzZGIyMGYzZjQ1MTY2
OWIyZGQ2MzA0ZDYyZTVmY2ZjNTEwMmEuLjQyMGFhNTMyZDgyM2UxMDMwMjJjNjk5N2EwN2M5NDM4
MDQ5NmZhNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjQgQEAKKzIwMjAtMDMtMDYgIEthdGUgQ2hl
bmV5ICA8a2F0aGVyaW5lX2NoZW5leUBhcHBsZS5jb20+CisKKyAgICAgICAgVUlQcm9jZXNzIG5l
ZWRzIG1lY2hhbmlzbSB0byBzcGVjaWZ5IEFwcEJvdW5kIGRvbWFpbnMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODUyOAorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNTk5ODAzNDA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkcyBmdW5jdGlvbmFsaXR5IHRvIHJlYWQgYXBwLWJvdW5kIGRvbWFpbnMg
ZnJvbSB0aGUgSW5mby5wbGlzdCBvbgorICAgICAgICBiYWNrZ3JvdW5kIHRocmVhZCB2aWEgdGhl
IFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eSBhbmQgcmVwb3J0CisgICAgICAgIHdoZXRoZXIg
YSBkb21haW4gaXMgYXBwLWJvdW5kLiAKKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJzaXRlRGF0YVN0b3JlLm1tOgorICAgICAgICAoLVtXS1dlYnNpdGVEYXRhU3RvcmUgX2Fw
cEJvdW5kRG9tYWluczpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0
ZURhdGFTdG9yZVByaXZhdGUuaDoKKyAgICAgICAgVGVzdCBBUEkgY2FsbCB0byBnZXQgYXBwQm91
bmREb21haW5zLgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYkZyYW1lUG9saWN5TGlzdGVuZXJQ
cm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eTo6
V2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVQ
b2xpY3lMaXN0ZW5lclByb3h5OjpkaWRSZWNlaXZlQXBwQm91bmREb21haW5SZXN1bHQpOgorICAg
ICAgICAoV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5OjpkaWRSZWNlaXZlU2FmZUJyb3dzaW5n
UmVzdWx0cyk6CisgICAgICAgIChXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHk6OnVzZSk6Cisg
ICAgICAgIChXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHk6OmRvd25sb2FkKToKKyAgICAgICAg
KFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eTo6aWdub3JlKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYkZy
YW1lUG9saWN5TGlzdGVuZXJQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
RnJhbWVQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lUHJveHk6OnNldFVwUG9s
aWN5TGlzdGVuZXJQcm94eSk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkZyYW1lUHJveHkuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgQWRkZWQgYSBu
ZXcgZnVuY3Rpb24gdG8gV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5IHRvIHdhaXQgZm9yIHRo
ZQorICAgICAgICBhcHAtYm91bmQgZG9tYWlucyB0byBiZSByZWFkIGJlZm9yZSBjb21wbGV0aW5n
IGEgbmF2aWdhdGlvbi4gRWFjaAorICAgICAgICBvdGhlciBmdW5jdGlvbiBtdXN0IG5vdyBjaGVj
ayBpZiBtX2lzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4gaGFzCisgICAgICAgIGJlZW4gc2V0
IGJlZm9yZSBzZW5kaW5nIGEgZnVsbCByZXBseS4gQWxzbyBhZGRlZCBhbiBlbnVtIGNsYXNzCisg
ICAgICAgIFNob3VsZEV4cGVjdEFwcEJvdW5kRG9tYWluUmVzdWx0IHRvIHRlbGwgdGhlIGxpc3Rl
bmVyIG5vdCB0byB3YWl0IGZvcgorICAgICAgICB0aGUgcmVzdWx0cyBpbiB1bmVjZXNzYXJ5IGNh
c2VzLgorCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6aXNBcHBCb3VuZERvbWFpbiBj
b25zdCk6IERlbGV0ZWQKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRJc05hdmln
YXRpbmdUb0FwcEJvdW5kRG9tYWluKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpk
ZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKToKKyAgICAgICAgQWZ0ZXIgdGhlIGxpc3Rl
bmVyIHJlc3BvbmRzIHdpdGggdGhlIHJlc3VsdHMsIHNldCB0aGUgbmV3CisgICAgICAgIHZhbHVl
IGluIFdlYlBhZ2VQcm94eS4gV2Ugbm8gbG9uZ2VyIG5lZWQgdG8gY2hlY2sgZm9yIGlzQXBwQm91
bmQKKyAgICAgICAgZG9tYWluIG5vdyB0aGF0IHdlIGhhdmUgcmVjZWl2ZWQgdGhlIHZhbHVlLgor
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGVjaWRlUG9saWN5Rm9yTmV3V2luZG93
QWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JS
ZXNwb25zZVNoYXJlZCk6CisgICAgICAgIE5vIG5lZWQgdG8gbGlzdGVuIGZvciBhcHAtYm91bmQg
ZG9tYWluIHJlc3BvbnNlIGhlcmUuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3Rv
cmVDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6YXBwQm91bmREb21haW5zKToKKyAgICAgICAg
KFdlYktpdDo6YXBwQm91bmREb21haW5RdWV1ZSk6CisgICAgICAgIEFkZCBhIHNlcGFyYXRlIHN0
YXRpYyBxdWV1ZSBmb3IgcmVhZGluZyBhcHAtYm91bmQgZG9tYWlucyB0byBhdm9pZAorICAgICAg
ICByYWNpbmVzcy4KKworICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpiZWdpbkFw
cEJvdW5kRG9tYWluQ2hlY2spOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpn
ZXRBcHBCb3VuZERvbWFpbnNGb3JUZXN0aW5nKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0
ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5oOgorICAgICAgICBSZWFkIHRoZSBhcHAtYm91bmQgZG9t
YWluIGxpc3Qgb24gdGhlIGJhY2tncm91bmQgdGhyZWFkLCBhbmQgb25jZQorICAgICAgICBkb25l
LCBjYWxsIHRoZSBsaXN0ZW5lciBvbiB0aGUgbWFpbiB0aHJlYWQuCisKIDIwMjAtMDMtMDUgIEth
dGUgQ2hlbmV5ICA8a2F0aGVyaW5lX2NoZW5leUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHdl
YiBwYWdlIGFkZGl0aW9ucyB0byBXZWJQYWdlUHJveHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0gYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tCmluZGV4IDg1YWFm
N2Q2NzkxMTU5NGIwNjUzZTMyM2FiY2E2M2MxMjRmOGY4OGEuLmVkMmU1ZWY2ODIxNjRhZTVkNTJj
NGEzYmZjM2QyYzhkNWQ1ODc2M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbQpAQCAtNjAwLDQgKzYwMCwxNSBA
QCAtIChfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbiAqKV9jb25maWd1cmF0aW9uCiAg
ICAgcmV0dXJuIHdyYXBwZXIoX3dlYnNpdGVEYXRhU3RvcmUtPmNvbmZpZ3VyYXRpb24oKS5jb3B5
KCkpOwogfQogCistICh2b2lkKV9hcHBCb3VuZERvbWFpbnM6KHZvaWQgKF4pKE5TQXJyYXk8TlNT
dHJpbmcgKj4gKikpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBfd2Vic2l0ZURhdGFTdG9yZS0+
YXBwQm91bmREb21haW5zRm9yVGVzdGluZyhbY29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQ
dHIoY29tcGxldGlvbkhhbmRsZXIpXShhdXRvJiBkb21haW5zKSBtdXRhYmxlIHsKKyAgICAgICAg
VmVjdG9yPFJlZlB0cjxBUEk6Ok9iamVjdD4+IGFwaURvbWFpbnM7CisgICAgICAgIGFwaURvbWFp
bnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShkb21haW5zLnNpemUoKSk7CisgICAgICAgIGZvciAo
YXV0byYgZG9tYWluIDogZG9tYWlucykKKyAgICAgICAgICAgIGFwaURvbWFpbnMudW5jaGVja2Vk
QXBwZW5kKEFQSTo6U3RyaW5nOjpjcmVhdGUoZG9tYWluLnN0cmluZygpKSk7CisgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKHdyYXBwZXIoQVBJOjpBcnJheTo6Y3JlYXRlKFdURk1vdmUoYXBpRG9t
YWlucykpKSk7CisgICAgfSk7Cit9CisKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmggYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oCmlu
ZGV4IDllMGVlMmIwOTE2YWU5YzY0NTdkYzA5NTJhMWI0MGFjODg3NzM4YTIuLmVkZGJmMzAwOTAy
YTg2MjIyMjNmNjBjNjk1YjI1YTFjNDkzMzIyMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUu
aApAQCAtNzcsNiArNzcsNyBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dLV2Vi
c2l0ZURhdGFTdG9yZUZldGNoT3B0aW9ucykgewogLSAodm9pZClfY2xlYXJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxB
QkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogLSAodm9pZClfaXNSZWdp
c3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyRmlyc3RQYXJ0eTooTlNVUkwgKilmaXJzdFBhcnR5VVJM
IHRoaXJkUGFydHk6KE5TVVJMICopdGhpcmRQYXJ0eVVSTCBjb21wbGV0aW9uSGFuZGxlcjoodm9p
ZCAoXikoQk9PTCkpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19N
QUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKIC0gKHZvaWQpX3Byb2Nlc3NTdGF0aXN0aWNzQW5k
RGF0YVJlY29yZHM6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJ
TEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOworLSAodm9pZClfYXBwQm91bmREb21haW5z
Oih2b2lkICheKShOU0FycmF5PE5TU3RyaW5nICo+ICopKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAKIEBwcm9w
ZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgd2VhaykgaWQgPF9XS1dlYnNpdGVEYXRhU3RvcmVE
ZWxlZ2F0ZT4gX2RlbGVnYXRlIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMu
MCkpOwogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5LCBjb3B5KSBfV0tXZWJzaXRlRGF0
YVN0b3JlQ29uZmlndXJhdGlvbiAqX2NvbmZpZ3VyYXRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkuY3BwIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5LmNwcAppbmRleCBh
NWZhZjNmZDVlNGI1ZmYyYWZhNzgzNWVhZjk2YTQxZTNmZjRhYTNiLi5jYjA0NDRlN2QxODA4OThm
Njc5ZDI2NzUzYzYzYzNjZWM3NmJiNzhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eS5jcHAKQEAgLTM1LDMwICszNSw0
NSBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5
OjpXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkoUmVwbHkmJiByZXBseSwgU2hvdWxkRXhwZWN0
U2FmZUJyb3dzaW5nUmVzdWx0IGV4cGVjdCkKK1dlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eTo6
V2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5KFJlcGx5JiYgcmVwbHksIFNob3VsZEV4cGVjdFNh
ZmVCcm93c2luZ1Jlc3VsdCBleHBlY3RTYWZlQnJvd3NpbmdSZXN1bHQsIFNob3VsZEV4cGVjdEFw
cEJvdW5kRG9tYWluUmVzdWx0IGV4cGVjdEFwcEJvdW5kRG9tYWluUmVzdWx0KQogICAgIDogbV9y
ZXBseShXVEZNb3ZlKHJlcGx5KSkKIHsKLSAgICBpZiAoZXhwZWN0ID09IFNob3VsZEV4cGVjdFNh
ZmVCcm93c2luZ1Jlc3VsdDo6Tm8pCisgICAgaWYgKGV4cGVjdFNhZmVCcm93c2luZ1Jlc3VsdCA9
PSBTaG91bGRFeHBlY3RTYWZlQnJvd3NpbmdSZXN1bHQ6Ok5vKQogICAgICAgICBkaWRSZWNlaXZl
U2FmZUJyb3dzaW5nUmVzdWx0cyh7IH0pOworICAgIGlmIChleHBlY3RBcHBCb3VuZERvbWFpblJl
c3VsdCA9PSBTaG91bGRFeHBlY3RBcHBCb3VuZERvbWFpblJlc3VsdDo6Tm8pCisgICAgICAgIGRp
ZFJlY2VpdmVBcHBCb3VuZERvbWFpblJlc3VsdCh7IH0pOwogfQogCiBXZWJGcmFtZVBvbGljeUxp
c3RlbmVyUHJveHk6On5XZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkoKSA9IGRlZmF1bHQ7CiAK
K3ZvaWQgV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5OjpkaWRSZWNlaXZlQXBwQm91bmREb21h
aW5SZXN1bHQoYm9vbCBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKQoreworICAgIEFTU0VS
VChSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIGlzQXBwQm91bmQgPSBpc05hdmlnYXRp
bmdUb0FwcEJvdW5kRG9tYWluID8gTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW46OlllcyA6IE5h
dmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluOjpObzsKKyAgICBpZiAobV9wb2xpY3lSZXN1bHQgJiYg
bV9zYWZlQnJvd3NpbmdXYXJuaW5nKSB7CisgICAgICAgIGlmIChtX3JlcGx5KQorICAgICAgICAg
ICAgbV9yZXBseShXZWJDb3JlOjpQb2xpY3lBY3Rpb246OlVzZSwgbV9wb2xpY3lSZXN1bHQtPmZp
cnN0LmdldCgpLCBtX3BvbGljeVJlc3VsdC0+c2Vjb25kLCBXVEZNb3ZlKCptX3NhZmVCcm93c2lu
Z1dhcm5pbmcpLCBpc0FwcEJvdW5kKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9pc05hdmlnYXRp
bmdUb0FwcEJvdW5kRG9tYWluID0gaXNBcHBCb3VuZDsKK30KKwogdm9pZCBXZWJGcmFtZVBvbGlj
eUxpc3RlbmVyUHJveHk6OmRpZFJlY2VpdmVTYWZlQnJvd3NpbmdSZXN1bHRzKFJlZlB0cjxTYWZl
QnJvd3NpbmdXYXJuaW5nPiYmIHNhZmVCcm93c2luZ1dhcm5pbmcpCiB7CisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKICAgICBBU1NFUlQoIW1fc2FmZUJyb3dzaW5nV2FybmluZyk7Ci0gICAg
aWYgKG1fcG9saWN5UmVzdWx0KSB7CisgICAgaWYgKG1fcG9saWN5UmVzdWx0ICYmIG1faXNOYXZp
Z2F0aW5nVG9BcHBCb3VuZERvbWFpbikgewogICAgICAgICBpZiAobV9yZXBseSkKLSAgICAgICAg
ICAgIG1fcmVwbHkoV2ViQ29yZTo6UG9saWN5QWN0aW9uOjpVc2UsIG1fcG9saWN5UmVzdWx0LT5m
aXJzdC5nZXQoKSwgbV9wb2xpY3lSZXN1bHQtPnNlY29uZCwgV1RGTW92ZShzYWZlQnJvd3NpbmdX
YXJuaW5nKSk7CisgICAgICAgICAgICBtX3JlcGx5KFdlYkNvcmU6OlBvbGljeUFjdGlvbjo6VXNl
LCBtX3BvbGljeVJlc3VsdC0+Zmlyc3QuZ2V0KCksIG1fcG9saWN5UmVzdWx0LT5zZWNvbmQsIFdU
Rk1vdmUoc2FmZUJyb3dzaW5nV2FybmluZyksICptX2lzTmF2aWdhdGluZ1RvQXBwQm91bmREb21h
aW4pOwogICAgIH0gZWxzZQogICAgICAgICBtX3NhZmVCcm93c2luZ1dhcm5pbmcgPSBXVEZNb3Zl
KHNhZmVCcm93c2luZ1dhcm5pbmcpOwogfQogCiB2b2lkIFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQ
cm94eTo6dXNlKEFQSTo6V2Vic2l0ZVBvbGljaWVzKiBwb2xpY2llcywgUHJvY2Vzc1N3YXBSZXF1
ZXN0ZWRCeUNsaWVudCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50KQogewotICAgIGlmICht
X3NhZmVCcm93c2luZ1dhcm5pbmcpIHsKKyAgICBpZiAobV9zYWZlQnJvd3NpbmdXYXJuaW5nICYm
IG1faXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbikgewogICAgICAgICBpZiAobV9yZXBseSkK
LSAgICAgICAgICAgIG1fcmVwbHkoV2ViQ29yZTo6UG9saWN5QWN0aW9uOjpVc2UsIHBvbGljaWVz
LCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBXVEZNb3ZlKCptX3NhZmVCcm93c2luZ1dh
cm5pbmcpKTsKKyAgICAgICAgICAgIG1fcmVwbHkoV2ViQ29yZTo6UG9saWN5QWN0aW9uOjpVc2Us
IHBvbGljaWVzLCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBXVEZNb3ZlKCptX3NhZmVC
cm93c2luZ1dhcm5pbmcpLCAqbV9pc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKTsKICAgICB9
IGVsc2UgaWYgKCFtX3BvbGljeVJlc3VsdCkKICAgICAgICAgbV9wb2xpY3lSZXN1bHQgPSB7eyBw
b2xpY2llcywgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCB9fTsKIH0KQEAgLTY2LDEzICs4
MSwxMyBAQCB2b2lkIFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eTo6dXNlKEFQSTo6V2Vic2l0
ZVBvbGljaWVzKiBwb2xpY2llcywgUHJvY2Vzc1N3YQogdm9pZCBXZWJGcmFtZVBvbGljeUxpc3Rl
bmVyUHJveHk6OmRvd25sb2FkKCkKIHsKICAgICBpZiAobV9yZXBseSkKLSAgICAgICAgbV9yZXBs
eShXZWJDb3JlOjpQb2xpY3lBY3Rpb246OkRvd25sb2FkLCBudWxscHRyLCBQcm9jZXNzU3dhcFJl
cXVlc3RlZEJ5Q2xpZW50OjpObywgeyB9KTsKKyAgICAgICAgbV9yZXBseShXZWJDb3JlOjpQb2xp
Y3lBY3Rpb246OkRvd25sb2FkLCBudWxscHRyLCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50
OjpObywgeyB9LCB7IH0pOwogfQogCiB2b2lkIFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eTo6
aWdub3JlKCkKIHsKICAgICBpZiAobV9yZXBseSkKLSAgICAgICAgbV9yZXBseShXZWJDb3JlOjpQ
b2xpY3lBY3Rpb246Oklnbm9yZSwgbnVsbHB0ciwgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVu
dDo6Tm8sIHsgfSk7CisgICAgICAgIG1fcmVwbHkoV2ViQ29yZTo6UG9saWN5QWN0aW9uOjpJZ25v
cmUsIG51bGxwdHIsIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQ6Ok5vLCB7IH0sIHsgfSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkuaAppbmRleCA5YTZiZTk5ZDQwNzNl
ZTEwOGI0Y2IyMGY3MjFjMTA4ZjdjMDE4OGU5Li41YmZhZTlmN2IzZWRlYWZlYjYxOGM1ZTBiNmQ2
ZGNhMzllNzgzYTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJGcmFt
ZVBvbGljeUxpc3RlbmVyUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJG
cmFtZVBvbGljeUxpc3RlbmVyUHJveHkuaApAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNl
CiAKICNpbmNsdWRlICJBUElPYmplY3QuaCIKKyNpbmNsdWRlICJQb2xpY3lEZWNpc2lvbi5oIgog
I2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkZXJUeXBlcy5oPgogI2luY2x1ZGUgPHd0Zi9Db21w
bGV0aW9uSGFuZGxlci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTM4LDE2ICszOSwx
NyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgU2FmZUJyb3dzaW5nV2FybmluZzsKIAot
ZW51bSBjbGFzcyBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50IHsgTm8sIFllcyB9OwotZW51
bSBjbGFzcyBTaG91bGRFeHBlY3RTYWZlQnJvd3NpbmdSZXN1bHQgeyBObywgWWVzIH07CitlbnVt
IGNsYXNzIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQgOiBib29sIHsgTm8sIFllcyB9Owor
ZW51bSBjbGFzcyBTaG91bGRFeHBlY3RTYWZlQnJvd3NpbmdSZXN1bHQgOiBib29sIHsgTm8sIFll
cyB9OworZW51bSBjbGFzcyBTaG91bGRFeHBlY3RBcHBCb3VuZERvbWFpblJlc3VsdCA6IGJvb2wg
eyBObywgWWVzIH07CiAKIGNsYXNzIFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eSA6IHB1Ymxp
YyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OkZyYW1lUG9saWN5TGlzdGVuZXI+
IHsKIHB1YmxpYzoKIAotICAgIHVzaW5nIFJlcGx5ID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZChX
ZWJDb3JlOjpQb2xpY3lBY3Rpb24sIEFQSTo6V2Vic2l0ZVBvbGljaWVzKiwgUHJvY2Vzc1N3YXBS
ZXF1ZXN0ZWRCeUNsaWVudCwgUmVmUHRyPFNhZmVCcm93c2luZ1dhcm5pbmc+JiYpPjsKLSAgICBz
dGF0aWMgUmVmPFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eT4gY3JlYXRlKFJlcGx5JiYgcmVw
bHksIFNob3VsZEV4cGVjdFNhZmVCcm93c2luZ1Jlc3VsdCBleHBlY3QpCisgICAgdXNpbmcgUmVw
bHkgPSBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OlBvbGljeUFjdGlvbiwgQVBJOjpX
ZWJzaXRlUG9saWNpZXMqLCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBSZWZQdHI8U2Fm
ZUJyb3dzaW5nV2FybmluZz4mJiwgTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4pPjsKKyAgICBz
dGF0aWMgUmVmPFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eT4gY3JlYXRlKFJlcGx5JiYgcmVw
bHksIFNob3VsZEV4cGVjdFNhZmVCcm93c2luZ1Jlc3VsdCBleHBlY3RTYWZlQnJvd3NpbmdSZXN1
bHQsIFNob3VsZEV4cGVjdEFwcEJvdW5kRG9tYWluUmVzdWx0IGV4cGVjdEFwcEJvdW5kRG9tYWlu
UmVzdWx0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViRnJhbWVQb2xp
Y3lMaXN0ZW5lclByb3h5KFdURk1vdmUocmVwbHkpLCBleHBlY3QpKTsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5KFdURk1vdmUocmVwbHkp
LCBleHBlY3RTYWZlQnJvd3NpbmdSZXN1bHQsIGV4cGVjdEFwcEJvdW5kRG9tYWluUmVzdWx0KSk7
CiAgICAgfQogICAgIH5XZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkoKTsKIApAQCAtNTYsMTIg
KzU4LDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIGlnbm9yZSgpOwogICAgIAogICAgIHZvaWQgZGlk
UmVjZWl2ZVNhZmVCcm93c2luZ1Jlc3VsdHMoUmVmUHRyPFNhZmVCcm93c2luZ1dhcm5pbmc+JiYp
OworICAgIHZvaWQgZGlkUmVjZWl2ZUFwcEJvdW5kRG9tYWluUmVzdWx0KGJvb2wpOwogCiBwcml2
YXRlOgotICAgIFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eShSZXBseSYmLCBTaG91bGRFeHBl
Y3RTYWZlQnJvd3NpbmdSZXN1bHQpOworICAgIFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eShS
ZXBseSYmLCBTaG91bGRFeHBlY3RTYWZlQnJvd3NpbmdSZXN1bHQsIFNob3VsZEV4cGVjdEFwcEJv
dW5kRG9tYWluUmVzdWx0KTsKIAogICAgIE9wdGlvbmFsPHN0ZDo6cGFpcjxSZWZQdHI8QVBJOjpX
ZWJzaXRlUG9saWNpZXM+LCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50Pj4gbV9wb2xpY3lS
ZXN1bHQ7CiAgICAgT3B0aW9uYWw8UmVmUHRyPFNhZmVCcm93c2luZ1dhcm5pbmc+PiBtX3NhZmVC
cm93c2luZ1dhcm5pbmc7CisgICAgT3B0aW9uYWw8TmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4+
IG1faXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbjsKICAgICBSZXBseSBtX3JlcGx5OwogfTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViRnJhbWVQcm94eS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJGcmFtZVByb3h5LmNwcAppbmRleCA0ZDMyZjAz
NWYwYTQyZDljYjZkM2M5ZGJjNmY0MjA5MGMzZGIyMjM1Li4zNDZjMDgwNTdlMmIxMmYwNjViMDQ5
MTJkOGRmMmM4NjMyYjA5NzVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJGcmFtZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJGcmFtZVBy
b3h5LmNwcApAQCAtMTkzLDE0ICsxOTMsMTQgQEAgdm9pZCBXZWJGcmFtZVByb3h5OjpkaWRDaGFu
Z2VUaXRsZShjb25zdCBTdHJpbmcmIHRpdGxlKQogICAgIG1fdGl0bGUgPSB0aXRsZTsKIH0KIAot
V2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5JiBXZWJGcmFtZVByb3h5OjpzZXRVcFBvbGljeUxp
c3RlbmVyUHJveHkoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChQb2xpY3lBY3Rpb24sIEFQSTo6V2Vi
c2l0ZVBvbGljaWVzKiwgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgUmVmUHRyPFNhZmVC
cm93c2luZ1dhcm5pbmc+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyLCBTaG91bGRFeHBlY3RTYWZl
QnJvd3NpbmdSZXN1bHQgZXhwZWN0KQorV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5JiBXZWJG
cmFtZVByb3h5OjpzZXRVcFBvbGljeUxpc3RlbmVyUHJveHkoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChQb2xpY3lBY3Rpb24sIEFQSTo6V2Vic2l0ZVBvbGljaWVzKiwgUHJvY2Vzc1N3YXBSZXF1ZXN0
ZWRCeUNsaWVudCwgUmVmUHRyPFNhZmVCcm93c2luZ1dhcm5pbmc+JiYsIE5hdmlnYXRpbmdUb0Fw
cEJvdW5kRG9tYWluKT4mJiBjb21wbGV0aW9uSGFuZGxlciwgU2hvdWxkRXhwZWN0U2FmZUJyb3dz
aW5nUmVzdWx0IGV4cGVjdFNhZmVCcm93c2luZ1Jlc3VsdCwgU2hvdWxkRXhwZWN0QXBwQm91bmRE
b21haW5SZXN1bHQgZXhwZWN0QXBwQm91bmREb21haW5SZXN1bHQpCiB7CiAgICAgaWYgKG1fYWN0
aXZlTGlzdGVuZXIpCiAgICAgICAgIG1fYWN0aXZlTGlzdGVuZXItPmlnbm9yZSgpOwotICAgIG1f
YWN0aXZlTGlzdGVuZXIgPSBXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHk6OmNyZWF0ZShbdGhp
cywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoUG9saWN5QWN0aW9uIGFjdGlvbiwgQVBJOjpXZWJz
aXRlUG9saWNpZXMqIHBvbGljaWVzLCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50IHByb2Nl
c3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIFJlZlB0cjxTYWZlQnJvd3NpbmdXYXJuaW5nPiYmIHNh
ZmVCcm93c2luZ1dhcm5pbmcpIG11dGFibGUgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihh
Y3Rpb24sIHBvbGljaWVzLCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBXVEZNb3ZlKHNh
ZmVCcm93c2luZ1dhcm5pbmcpKTsKKyAgICBtX2FjdGl2ZUxpc3RlbmVyID0gV2ViRnJhbWVQb2xp
Y3lMaXN0ZW5lclByb3h5OjpjcmVhdGUoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0
aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKFBv
bGljeUFjdGlvbiBhY3Rpb24sIEFQSTo6V2Vic2l0ZVBvbGljaWVzKiBwb2xpY2llcywgUHJvY2Vz
c1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBSZWZQ
dHI8U2FmZUJyb3dzaW5nV2FybmluZz4mJiBzYWZlQnJvd3NpbmdXYXJuaW5nLCBOYXZpZ2F0aW5n
VG9BcHBCb3VuZERvbWFpbiBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKSBtdXRhYmxlIHsK
KyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoYWN0aW9uLCBwb2xpY2llcywgcHJvY2Vzc1N3YXBS
ZXF1ZXN0ZWRCeUNsaWVudCwgV1RGTW92ZShzYWZlQnJvd3NpbmdXYXJuaW5nKSwgaXNOYXZpZ2F0
aW5nVG9BcHBCb3VuZERvbWFpbik7CiAgICAgICAgIG1fYWN0aXZlTGlzdGVuZXIgPSBudWxscHRy
OwotICAgIH0sIGV4cGVjdCk7CisgICAgfSwgZXhwZWN0U2FmZUJyb3dzaW5nUmVzdWx0LCBleHBl
Y3RBcHBCb3VuZERvbWFpblJlc3VsdCk7CiAgICAgcmV0dXJuICptX2FjdGl2ZUxpc3RlbmVyOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJGcmFtZVByb3h5Lmgg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJGcmFtZVByb3h5LmgKaW5kZXggYmY2ZDg5NmQ4
N2I3NjI2NTExMzhmYzI5ODRmMjU5NzEyMGQzMWY0Zi4uNjAxZjQwNGExMmJhOGQzYTNiNWRkOTBl
NTg2ZDlhOTU2YTYzYTNjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
RnJhbWVQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkZyYW1lUHJveHku
aApAQCAtNTMsOCArNTMsOCBAQCBjbGFzcyBTYWZlQnJvd3NpbmdXYXJuaW5nOwogY2xhc3MgV2Vi
Q2VydGlmaWNhdGVJbmZvOwogY2xhc3MgV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5OwogY2xh
c3MgV2Vic2l0ZURhdGFTdG9yZTsKLWVudW0gY2xhc3MgU2hvdWxkRXhwZWN0U2FmZUJyb3dzaW5n
UmVzdWx0OwotZW51bSBjbGFzcyBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50OworZW51bSBj
bGFzcyBTaG91bGRFeHBlY3RTYWZlQnJvd3NpbmdSZXN1bHQgOiBib29sOworZW51bSBjbGFzcyBQ
cm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50IDogYm9vbDsKIHN0cnVjdCBXZWJzaXRlUG9saWNp
ZXNEYXRhOwogCiBjbGFzcyBXZWJGcmFtZVByb3h5IDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxB
UEk6Ok9iamVjdDo6VHlwZTo6RnJhbWU+IHsKQEAgLTEyMCw3ICsxMjAsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBkaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uKGNvbnN0IFVSTCYpOyAvLyBlZy4gYW5j
aG9yIG5hdmlnYXRpb24sIHNlc3Npb24gc3RhdGUgY2hhbmdlLgogICAgIHZvaWQgZGlkQ2hhbmdl
VGl0bGUoY29uc3QgU3RyaW5nJik7CiAKLSAgICBXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkm
IHNldFVwUG9saWN5TGlzdGVuZXJQcm94eShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6
OlBvbGljeUFjdGlvbiwgQVBJOjpXZWJzaXRlUG9saWNpZXMqLCBQcm9jZXNzU3dhcFJlcXVlc3Rl
ZEJ5Q2xpZW50LCBSZWZQdHI8U2FmZUJyb3dzaW5nV2FybmluZz4mJik+JiYsIFNob3VsZEV4cGVj
dFNhZmVCcm93c2luZ1Jlc3VsdCk7CisgICAgV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5JiBz
ZXRVcFBvbGljeUxpc3RlbmVyUHJveHkoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpQ
b2xpY3lBY3Rpb24sIEFQSTo6V2Vic2l0ZVBvbGljaWVzKiwgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRC
eUNsaWVudCwgUmVmUHRyPFNhZmVCcm93c2luZ1dhcm5pbmc+JiYsIE5hdmlnYXRpbmdUb0FwcEJv
dW5kRG9tYWluKT4mJiwgU2hvdWxkRXhwZWN0U2FmZUJyb3dzaW5nUmVzdWx0LCBTaG91bGRFeHBl
Y3RBcHBCb3VuZERvbWFpblJlc3VsdCk7CiAKICNpZiBFTkFCTEUoQ09OVEVOVF9GSUxURVJJTkcp
CiAgICAgdm9pZCBjb250ZW50RmlsdGVyRGlkQmxvY2tMb2FkKFdlYkNvcmU6OkNvbnRlbnRGaWx0
ZXJVbmJsb2NrSGFuZGxlciBjb250ZW50RmlsdGVyVW5ibG9ja0hhbmRsZXIpIHsgbV9jb250ZW50
RmlsdGVyVW5ibG9ja0hhbmRsZXIgPSBXVEZNb3ZlKGNvbnRlbnRGaWx0ZXJVbmJsb2NrSGFuZGxl
cik7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IDI4Nzll
YmE4Y2U1YWY3NTdhM2IwYTgwMmIwOWI5NzFlYTUyMzY0YjAuLmJhNmNhNjVhYmRmNWE2NzVmZTQ3
OWNiOGU0YzM5ZGJmYjhhNDIwNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcApAQCAtMjc5LDcgKzI3OSw2IEBACiAjaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykK
ICNpbmNsdWRlIDxXZWJLaXRBZGRpdGlvbnMvV2ViUGFnZVByb3h5QWRkaXRpb25zLmg+CiAjZWxz
ZQotI2RlZmluZSBXRUJfUEFHRV9QUk9YWV9BRERJVElPTlNfSVNBUFBCT1VORERPTUFJTgogI2Rl
ZmluZSBXRUJfUEFHRV9QUk9YWV9BRERJVElPTlNfU0VUSVNOQVZJR0FUSU5HVE9BUFBCT1VORERP
TUFJTgogI2VuZGlmCiAKQEAgLTMwOTUsMjMgKzMwOTQsMTEgQEAgcHJpdmF0ZToKICAgICBQb2xp
Y3lDaGVja0lkZW50aWZpZXIgbV9pZGVudGlmaWVyOwogfTsKIAotCi1ib29sIFdlYlBhZ2VQcm94
eTo6aXNBcHBCb3VuZERvbWFpbihjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYgZG9t
YWluKSBjb25zdAotewotICAgIFdFQl9QQUdFX1BST1hZX0FERElUSU9OU19JU0FQUEJPVU5ERE9N
QUlOCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViUGFnZVByb3h5Ojppc0FwcEJvdW5k
RG9tYWluKGNvbnN0IFVSTCYgdXJsKSBjb25zdAotewotICAgIHJldHVybiBpc0FwcEJvdW5kRG9t
YWluKFJlZ2lzdHJhYmxlRG9tYWluKHVybCkpOwotfQotCi12b2lkIFdlYlBhZ2VQcm94eTo6c2V0
SXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbihib29sIGlzTWFpbkZyYW1lLCBjb25zdCBVUkwm
IHJlcXVlc3RVUkwpCit2b2lkIFdlYlBhZ2VQcm94eTo6c2V0SXNOYXZpZ2F0aW5nVG9BcHBCb3Vu
ZERvbWFpbihib29sIGlzTWFpbkZyYW1lLCBjb25zdCBVUkwmIHJlcXVlc3RVUkwsIE5hdmlnYXRp
bmdUb0FwcEJvdW5kRG9tYWluIGlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4pCiB7CiAgICAg
aWYgKG1fcHJlZmVyZW5jZXMtPmlzSW5BcHBCcm93c2VyUHJpdmFjeUVuYWJsZWQoKSAmJiBpc01h
aW5GcmFtZSkgewogICAgICAgICBXRUJfUEFHRV9QUk9YWV9BRERJVElPTlNfU0VUSVNOQVZJR0FU
SU5HVE9BUFBCT1VORERPTUFJTgotICAgICAgICBpZiAoIWlzQXBwQm91bmREb21haW4ocmVxdWVz
dFVSTCkpIHsKKyAgICAgICAgaWYgKGlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4gPT0gTmF2
aWdhdGluZ1RvQXBwQm91bmREb21haW46Ok5vKSB7CiAgICAgICAgICAgICBtX2NvbmZpZ3VyYXRp
b24tPnNldFdlYlZpZXdDYXRlZ29yeShXZWJWaWV3Q2F0ZWdvcnk6OkluQXBwQnJvd3Nlcik7CiAg
ICAgICAgICAgICBtX2lzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4gPSBOYXZpZ2F0aW5nVG9B
cHBCb3VuZERvbWFpbjo6Tm87CiAgICAgICAgICAgICBtX2hhc05hdmlnYXRlZEF3YXlGcm9tQXBw
Qm91bmREb21haW4gPSBOYXZpZ2F0ZWRBd2F5RnJvbUFwcEJvdW5kRG9tYWluOjpZZXM7CkBAIC01
MDEzLDggKzUwMDAsNiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGVjaWRlUG9saWN5Rm9yTmF2aWdh
dGlvbkFjdGlvbihSZWY8V2ViUHJvY2Vzc1Byb3h5PiYmIHByb2NlcwogICAgIGlmIChuYXZpZ2F0
aW9uSUQgJiYgIWZyb21BUEkpCiAgICAgICAgIG1fcGFnZUxvYWRTdGF0ZS5jbGVhclBlbmRpbmdB
UElSZXF1ZXN0KHRyYW5zYWN0aW9uKTsKIAotICAgIHNldElzTmF2aWdhdGluZ1RvQXBwQm91bmRE
b21haW4oZnJhbWUuaXNNYWluRnJhbWUoKSwgcmVxdWVzdC51cmwoKSk7Ci0KICAgICBpZiAoIWNo
ZWNrVVJMUmVjZWl2ZWRGcm9tQ3VycmVudE9yUHJldmlvdXNXZWJQcm9jZXNzKHByb2Nlc3MsIHJl
cXVlc3QudXJsKCkpKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQoUHJv
Y2VzcywgIklnbm9yaW5nIHJlcXVlc3QgdG8gbG9hZCB0aGlzIG1haW4gcmVzb3VyY2UgYmVjYXVz
ZSBpdCBpcyBvdXRzaWRlIHRoZSBzYW5kYm94Iik7CiAgICAgICAgIHNlbmRlci0+c2VuZChQb2xp
Y3lEZWNpc2lvbiB7IHNlbmRlci0+aWRlbnRpZmllcigpLCBpc05hdmlnYXRpbmdUb0FwcEJvdW5k
RG9tYWluKCksIGhhc05hdmlnYXRlZEF3YXlGcm9tQXBwQm91bmREb21haW4oKSwgUG9saWN5QWN0
aW9uOjpJZ25vcmUsIDAsIERvd25sb2FkSUQoKSwgV1RGOjpudWxsb3B0IH0pOwpAQCAtNTA3MCw3
ICs1MDU1LDEwIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9u
QWN0aW9uKFJlZjxXZWJQcm9jZXNzUHJveHk+JiYgcHJvY2VzCiAgICAgaWYgKCFtX3ByZWZlcmVu
Y2VzLT5zYWZlQnJvd3NpbmdFbmFibGVkKCkpCiAgICAgICAgIHNob3VsZEV4cGVjdFNhZmVCcm93
c2luZ1Jlc3VsdCA9IFNob3VsZEV4cGVjdFNhZmVCcm93c2luZ1Jlc3VsdDo6Tm87CiAKLSAgICBh
dXRvIGxpc3RlbmVyID0gbWFrZVJlZihmcmFtZS5zZXRVcFBvbGljeUxpc3RlbmVyUHJveHkoW3Ro
aXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgZnJhbWUgPSBtYWtlUmVmKGZyYW1l
KSwgc2VuZGVyID0gV1RGTW92ZShzZW5kZXIpLCBuYXZpZ2F0aW9uXSAoUG9saWN5QWN0aW9uIHBv
bGljeUFjdGlvbiwgQVBJOjpXZWJzaXRlUG9saWNpZXMqIHBvbGljaWVzLCBQcm9jZXNzU3dhcFJl
cXVlc3RlZEJ5Q2xpZW50IHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIFJlZlB0cjxTYWZl
QnJvd3NpbmdXYXJuaW5nPiYmIHNhZmVCcm93c2luZ1dhcm5pbmcpIG11dGFibGUgeworICAgIGF1
dG8gbGlzdGVuZXIgPSBtYWtlUmVmKGZyYW1lLnNldFVwUG9saWN5TGlzdGVuZXJQcm94eShbdGhp
cywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBmcmFtZSA9IG1ha2VSZWYoZnJhbWUp
LCBzZW5kZXIgPSBXVEZNb3ZlKHNlbmRlciksIG5hdmlnYXRpb25dIChQb2xpY3lBY3Rpb24gcG9s
aWN5QWN0aW9uLCBBUEk6OldlYnNpdGVQb2xpY2llcyogcG9saWNpZXMsIFByb2Nlc3NTd2FwUmVx
dWVzdGVkQnlDbGllbnQgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgUmVmUHRyPFNhZmVC
cm93c2luZ1dhcm5pbmc+JiYgc2FmZUJyb3dzaW5nV2FybmluZywgTmF2aWdhdGluZ1RvQXBwQm91
bmREb21haW4gaXNBcHBCb3VuZERvbWFpbikgbXV0YWJsZSB7CisKKyAgICAgICAgaWYgKHBvbGlj
eUFjdGlvbiAhPSBQb2xpY3lBY3Rpb246Oklnbm9yZSkKKyAgICAgICAgICAgIHNldElzTmF2aWdh
dGluZ1RvQXBwQm91bmREb21haW4oZnJhbWUtPmlzTWFpbkZyYW1lKCksIG5hdmlnYXRpb24tPmN1
cnJlbnRSZXF1ZXN0KCkudXJsKCksIGlzQXBwQm91bmREb21haW4pOwogCiAgICAgICAgIGF1dG8g
Y29tcGxldGlvbkhhbmRsZXIgPSBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IHByb3RlY3RlZFRoaXMu
Y29weVJlZigpLCBmcmFtZSA9IGZyYW1lLmNvcHlSZWYoKSwgc2VuZGVyID0gV1RGTW92ZShzZW5k
ZXIpLCBuYXZpZ2F0aW9uLCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBwb2xpY2llcyA9
IG1ha2VSZWZQdHIocG9saWNpZXMpXSAoUG9saWN5QWN0aW9uIHBvbGljeUFjdGlvbikgbXV0YWJs
ZSB7CiAgICAgICAgICAgICBpZiAoZnJhbWUtPmlzTWFpbkZyYW1lKCkpIHsKQEAgLTUxMTgsMTAg
KzUxMDYsMTIgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25B
Y3Rpb24oUmVmPFdlYlByb2Nlc3NQcm94eT4mJiBwcm9jZXMKICAgICAgICAgfQogICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihwb2xpY3lBY3Rpb24pOwogCi0gICAgfSwgc2hvdWxkRXhwZWN0U2Fm
ZUJyb3dzaW5nUmVzdWx0KSk7CisgICAgfSwgc2hvdWxkRXhwZWN0U2FmZUJyb3dzaW5nUmVzdWx0
LCBTaG91bGRFeHBlY3RBcHBCb3VuZERvbWFpblJlc3VsdDo6WWVzKSk7CiAgICAgaWYgKHNob3Vs
ZEV4cGVjdFNhZmVCcm93c2luZ1Jlc3VsdCA9PSBTaG91bGRFeHBlY3RTYWZlQnJvd3NpbmdSZXN1
bHQ6OlllcykKICAgICAgICAgYmVnaW5TYWZlQnJvd3NpbmdDaGVjayhyZXF1ZXN0LnVybCgpLCBm
cmFtZS5pc01haW5GcmFtZSgpLCBsaXN0ZW5lcik7Ci0KKyNpZiBQTEFURk9STShDT0NPQSkKKyAg
ICBtX3dlYnNpdGVEYXRhU3RvcmUtPmJlZ2luQXBwQm91bmREb21haW5DaGVjayhSZWdpc3RyYWJs
ZURvbWFpbiB7IHJlcXVlc3QudXJsKCkgfSwgbGlzdGVuZXIpOworI2VuZGlmCiAgICAgQVBJOjpO
YXZpZ2F0aW9uKiBtYWluRnJhbWVOYXZpZ2F0aW9uID0gZnJhbWUuaXNNYWluRnJhbWUoKSA/IG5h
dmlnYXRpb24uZ2V0KCkgOiBudWxscHRyOwogICAgIFdlYkZyYW1lUHJveHkqIG9yaWdpbmF0aW5n
RnJhbWUgPSBvcmlnaW5hdGluZ0ZyYW1lSW5mb0RhdGEuZnJhbWVJRCA/IHByb2Nlc3MtPndlYkZy
YW1lKCpvcmlnaW5hdGluZ0ZyYW1lSW5mb0RhdGEuZnJhbWVJRCkgOiBudWxscHRyOwogCkBAIC01
MjUxLDcgKzUyNDEsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGVjaWRlUG9saWN5Rm9yTmV3V2lu
ZG93QWN0aW9uKEZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBGcmFtZQogICAgIE1FU1NBR0VfQ0hF
Q0sobV9wcm9jZXNzLCBmcmFtZSk7CiAgICAgTUVTU0FHRV9DSEVDS19VUkwobV9wcm9jZXNzLCBy
ZXF1ZXN0LnVybCgpKTsKIAotICAgIGF1dG8gbGlzdGVuZXIgPSBtYWtlUmVmKGZyYW1lLT5zZXRV
cFBvbGljeUxpc3RlbmVyUHJveHkoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlz
KSwgaWRlbnRpZmllciwgbGlzdGVuZXJJRCwgZnJhbWVJRF0gKFBvbGljeUFjdGlvbiBwb2xpY3lB
Y3Rpb24sIEFQSTo6V2Vic2l0ZVBvbGljaWVzKiwgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVu
dCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBSZWZQdHI8U2FmZUJyb3dzaW5nV2Fybmlu
Zz4mJiBzYWZlQnJvd3NpbmdXYXJuaW5nKSBtdXRhYmxlIHsKKyAgICBhdXRvIGxpc3RlbmVyID0g
bWFrZVJlZihmcmFtZS0+c2V0VXBQb2xpY3lMaXN0ZW5lclByb3h5KFt0aGlzLCBwcm90ZWN0ZWRU
aGlzID0gbWFrZVJlZigqdGhpcyksIGlkZW50aWZpZXIsIGxpc3RlbmVySUQsIGZyYW1lSURdIChQ
b2xpY3lBY3Rpb24gcG9saWN5QWN0aW9uLCBBUEk6OldlYnNpdGVQb2xpY2llcyosIFByb2Nlc3NT
d2FwUmVxdWVzdGVkQnlDbGllbnQgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgUmVmUHRy
PFNhZmVCcm93c2luZ1dhcm5pbmc+JiYgc2FmZUJyb3dzaW5nV2FybmluZywgTmF2aWdhdGluZ1Rv
QXBwQm91bmREb21haW4gaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbikgbXV0YWJsZSB7CiAg
ICAgICAgIC8vIEZJWE1FOiBBc3NlcnQgdGhlIEFQSTo6V2Vic2l0ZVBvbGljaWVzKiBpcyBudWxs
cHRyIGhlcmUgb25jZSBjbGllbnRzIG9mIFdLRnJhbWVQb2xpY3lMaXN0ZW5lclVzZVdpdGhQb2xp
Y2llcyBnbyBhd2F5LgogICAgICAgICBSRUxFQVNFX0FTU0VSVChwcm9jZXNzU3dhcFJlcXVlc3Rl
ZEJ5Q2xpZW50ID09IFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQ6Ok5vKTsKICAgICAgICAg
QVNTRVJUX1VOVVNFRChzYWZlQnJvd3NpbmdXYXJuaW5nLCAhc2FmZUJyb3dzaW5nV2FybmluZyk7
CkBAIC01MjYxLDcgKzUyNTEsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGVjaWRlUG9saWN5Rm9y
TmV3V2luZG93QWN0aW9uKEZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBGcmFtZQogICAgICAgICB9
KTsKIAogICAgICAgICByZWNlaXZlZFBvbGljeURlY2lzaW9uKHBvbGljeUFjdGlvbiwgbnVsbHB0
ciwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKHNlbmRlcikpOwotICAgIH0sIFNob3VsZEV4cGVjdFNh
ZmVCcm93c2luZ1Jlc3VsdDo6Tm8pKTsKKyAgICB9LCBTaG91bGRFeHBlY3RTYWZlQnJvd3NpbmdS
ZXN1bHQ6Ok5vLCBTaG91bGRFeHBlY3RBcHBCb3VuZERvbWFpblJlc3VsdDo6Tm8pKTsKIAogICAg
IGlmIChtX3BvbGljeUNsaWVudCkKICAgICAgICAgbV9wb2xpY3lDbGllbnQtPmRlY2lkZVBvbGlj
eUZvck5ld1dpbmRvd0FjdGlvbigqdGhpcywgKmZyYW1lLCBuYXZpZ2F0aW9uQWN0aW9uRGF0YSwg
cmVxdWVzdCwgZnJhbWVOYW1lLCBXVEZNb3ZlKGxpc3RlbmVyKSwgbV9wcm9jZXNzLT50cmFuc2Zv
cm1IYW5kbGVzVG9PYmplY3RzKHVzZXJEYXRhLm9iamVjdCgpKS5nZXQoKSk7CkBAIC01Mjk3LDEw
ICs1Mjg3LDkgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRlY2lkZVBvbGljeUZvclJlc3BvbnNlU2hh
cmVkKFJlZjxXZWJQcm9jZXNzUHJveHk+JiYgcHJvY2VzcywKICAgICBNRVNTQUdFX0NIRUNLKHBy
b2Nlc3MsIGZyYW1lKTsKICAgICBNRVNTQUdFX0NIRUNLX1VSTChwcm9jZXNzLCByZXF1ZXN0LnVy
bCgpKTsKICAgICBNRVNTQUdFX0NIRUNLX1VSTChwcm9jZXNzLCByZXNwb25zZS51cmwoKSk7Ci0K
ICAgICBSZWZQdHI8QVBJOjpOYXZpZ2F0aW9uPiBuYXZpZ2F0aW9uID0gbmF2aWdhdGlvbklEID8g
bV9uYXZpZ2F0aW9uU3RhdGUtPm5hdmlnYXRpb24obmF2aWdhdGlvbklEKSA6IG51bGxwdHI7CiAg
ICAgYXV0byBsaXN0ZW5lciA9IG1ha2VSZWYoZnJhbWUtPnNldFVwUG9saWN5TGlzdGVuZXJQcm94
eShbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCB3ZWJQYWdlSUQsIGZyYW1l
SUQsIGlkZW50aWZpZXIsIGxpc3RlbmVySUQsIG5hdmlnYXRpb24gPSBXVEZNb3ZlKG5hdmlnYXRp
b24pLAotICAgICAgICBwcm9jZXNzID0gcHJvY2Vzcy5jb3B5UmVmKCldIChQb2xpY3lBY3Rpb24g
cG9saWN5QWN0aW9uLCBBUEk6OldlYnNpdGVQb2xpY2llcyosIFByb2Nlc3NTd2FwUmVxdWVzdGVk
QnlDbGllbnQgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgUmVmUHRyPFNhZmVCcm93c2lu
Z1dhcm5pbmc+JiYgc2FmZUJyb3dzaW5nV2FybmluZykgbXV0YWJsZSB7CisgICAgICAgIHByb2Nl
c3MgPSBwcm9jZXNzLmNvcHlSZWYoKV0gKFBvbGljeUFjdGlvbiBwb2xpY3lBY3Rpb24sIEFQSTo6
V2Vic2l0ZVBvbGljaWVzKiwgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCBwcm9jZXNzU3dh
cFJlcXVlc3RlZEJ5Q2xpZW50LCBSZWZQdHI8U2FmZUJyb3dzaW5nV2FybmluZz4mJiBzYWZlQnJv
d3NpbmdXYXJuaW5nLCBOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiBpc05hdmlnYXRpbmdUb0Fw
cEJvdW5kRG9tYWluKSBtdXRhYmxlIHsKICAgICAgICAgLy8gRklYTUU6IEFzc2VydCB0aGUgQVBJ
OjpXZWJzaXRlUG9saWNpZXMqIGlzIG51bGxwdHIgaGVyZSBvbmNlIGNsaWVudHMgb2YgV0tGcmFt
ZVBvbGljeUxpc3RlbmVyVXNlV2l0aFBvbGljaWVzIGdvIGF3YXkuCiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQgPT0gUHJvY2Vzc1N3YXBSZXF1ZXN0
ZWRCeUNsaWVudDo6Tm8pOwogICAgICAgICBBU1NFUlRfVU5VU0VEKHNhZmVCcm93c2luZ1dhcm5p
bmcsICFzYWZlQnJvd3NpbmdXYXJuaW5nKTsKQEAgLTUzMTAsOCArNTI5OSw3IEBAIHZvaWQgV2Vi
UGFnZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JSZXNwb25zZVNoYXJlZChSZWY8V2ViUHJvY2Vzc1By
b3h5PiYmIHByb2Nlc3MsCiAgICAgICAgIH0pOwogICAgICAgICAKICAgICAgICAgcmVjZWl2ZWRQ
b2xpY3lEZWNpc2lvbihwb2xpY3lBY3Rpb24sIG5hdmlnYXRpb24uZ2V0KCksIFdURjo6bnVsbG9w
dCwgV1RGTW92ZShzZW5kZXIpKTsKLSAgICB9LCBTaG91bGRFeHBlY3RTYWZlQnJvd3NpbmdSZXN1
bHQ6Ok5vKSk7Ci0KKyAgICB9LCBTaG91bGRFeHBlY3RTYWZlQnJvd3NpbmdSZXN1bHQ6Ok5vLCBT
aG91bGRFeHBlY3RBcHBCb3VuZERvbWFpblJlc3VsdDo6Tm8pKTsKICAgICBpZiAobV9wb2xpY3lD
bGllbnQpCiAgICAgICAgIG1fcG9saWN5Q2xpZW50LT5kZWNpZGVQb2xpY3lGb3JSZXNwb25zZSgq
dGhpcywgKmZyYW1lLCByZXNwb25zZSwgcmVxdWVzdCwgY2FuU2hvd01JTUVUeXBlLCBXVEZNb3Zl
KGxpc3RlbmVyKSwgcHJvY2Vzcy0+dHJhbnNmb3JtSGFuZGxlc1RvT2JqZWN0cyh1c2VyRGF0YS5v
YmplY3QoKSkuZ2V0KCkpOwogICAgIGVsc2UgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuaAppbmRleCBjNjhlNTc3MTM1ZDQ3M2IwMzIwYWJlNmQ4ZGYzYmNhOTJjZmRiYWNjLi5i
Nzc5ZWIyMDAzMGMzNzhjNjA0ZmY0YjFmMzc4YmM1MTljYmJlN2ZlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtMzQ1LDcgKzM0NSw3IEBAIHN0cnVjdCBVUkxTY2hl
bWVUYXNrUGFyYW1ldGVyczsKIHN0cnVjdCBVc2VyTWVzc2FnZTsKIAogZW51bSBjbGFzcyBOZWdv
dGlhdGVkTGVnYWN5VExTIDogYm9vbDsKLWVudW0gY2xhc3MgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRC
eUNsaWVudDsKK2VudW0gY2xhc3MgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCA6IGJvb2w7
CiBlbnVtIGNsYXNzIFVuZG9PclJlZG8gOiBib29sOwogZW51bSBjbGFzcyBXZWJDb250ZW50TW9k
ZSA6IHVpbnQ4X3Q7CiAKQEAgLTIyNjIsOSArMjI2Miw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCB0
cnlDbG9zZVRpbWVkT3V0KCk7CiAgICAgdm9pZCBtYWtlU3RvcmFnZVNwYWNlUmVxdWVzdChXZWJD
b3JlOjpGcmFtZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgY29u
c3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVpbnQ2
NF90IGN1cnJlbnRRdW90YSwgdWludDY0X3QgY3VycmVudE9yaWdpblVzYWdlLCB1aW50NjRfdCBj
dXJyZW50RGF0YWJhc2VVc2FnZSwgdWludDY0X3QgZXhwZWN0ZWRVc2FnZSwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCh1aW50NjRfdCk+JiYpOwogICAgICAgICAKLSAgICBib29sIGlzQXBwQm91bmRE
b21haW4oY29uc3QgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4mKSBjb25zdDsKLSAgICBib29s
IGlzQXBwQm91bmREb21haW4oY29uc3QgVVJMJikgY29uc3Q7Ci0gICAgdm9pZCBzZXRJc05hdmln
YXRpbmdUb0FwcEJvdW5kRG9tYWluKGJvb2wgaXNNYWluRnJhbWUsIGNvbnN0IFVSTCYpOworICAg
IHZvaWQgc2V0SXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbihib29sIGlzTWFpbkZyYW1lLCBj
b25zdCBVUkwmLCBOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbik7CiAgICAgTmF2aWdhdGluZ1Rv
QXBwQm91bmREb21haW4gaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbigpIGNvbnN0IHsgcmV0
dXJuIG1faXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbjsgfQogICAgIE5hdmlnYXRlZEF3YXlG
cm9tQXBwQm91bmREb21haW4gaGFzTmF2aWdhdGVkQXdheUZyb21BcHBCb3VuZERvbWFpbigpIGNv
bnN0IHsgcmV0dXJuIG1faGFzTmF2aWdhdGVkQXdheUZyb21BcHBCb3VuZERvbWFpbjsgfQogICAg
ICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29s
LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCmluZGV4IDUxNTVi
YThiNGEwMzYyN2RkZjVkNTZkMzIzNzMxZWViN2NjMDkwYTAuLjEwNjhmNjI1NTM4Mzk5Y2JlODY5
NmY4YmMwMThmMjA4MDQ3MDJjYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlByb2Nlc3NQb29sLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vz
c1Bvb2wuaApAQCAtMTIzLDcgKzEyMyw3IEBAIGludCB3ZWJQcm9jZXNzTGF0ZW5jeVFPUygpOwog
aW50IHdlYlByb2Nlc3NUaHJvdWdocHV0UU9TKCk7CiAjZW5kaWYKIAotZW51bSBjbGFzcyBQcm9j
ZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50OworZW51bSBjbGFzcyBQcm9jZXNzU3dhcFJlcXVlc3Rl
ZEJ5Q2xpZW50IDogYm9vbDsKIAogY2xhc3MgV2ViUHJvY2Vzc1Bvb2wgZmluYWwgOiBwdWJsaWMg
QVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpQcm9jZXNzUG9vbD4sIHB1YmxpYyBD
YW5NYWtlV2Vha1B0cjxXZWJQcm9jZXNzUG9vbD4sIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2
ZXIgewogcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0
ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tCmluZGV4IGRi
ZDMwZDA0MzA3ZDE4MTM5NTlkOTUzYzI1NDUxN2Y3ZTkyMWQxYWEuLmVjYzc3ZTNkY2NlMjMyMDU0
MzRiYjA4YWU0ZjEzMWU3ZDZjZmI0MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYnNpdGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29j
b2EubW0KQEAgLTI5LDYgKzI5LDcgQEAKICNpbXBvcnQgIkNvb2tpZVN0b3JhZ2VVdGlsc0NGLmgi
CiAjaW1wb3J0ICJTYW5kYm94VXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJTdG9yYWdlTWFuYWdlci5o
IgorI2ltcG9ydCAiV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5LmgiCiAjaW1wb3J0ICJXZWJQ
cmVmZXJlbmNlc0tleXMuaCIKICNpbXBvcnQgIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZS5oIgogI2ltcG9ydCAiV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaCIKQEAgLTQ0LDYgKzQ1
LDEyIEBACiAjaW1wb3J0IDx3dGYvVVJMLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmg+CiAKKyNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQorI2luY2x1ZGUgPFdlYktpdEFk
ZGl0aW9ucy9XZWJzaXRlRGF0YVN0b3JlQWRkaXRpb25zLmg+CisjZWxzZQorI2RlZmluZSBXRUJT
SVRFX0RBVEFfU1RPUkVfQURESVRJT05TCisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCiAjaW1wb3J0IDxVSUtpdC9VSUFwcGxpY2F0aW9uLmg+CiAjaW1wb3J0IDxwYWwvaW9zL01h
bmFnZWRDb25maWd1cmF0aW9uU29mdExpbmsuaD4KQEAgLTYxLDYgKzY4LDE0IEBAIHN0YXRpYyBI
YXNoU2V0PFdlYnNpdGVEYXRhU3RvcmUqPiYgZGF0YVN0b3JlcygpCiAKIHN0YXRpYyBOU1N0cmlu
ZyAqIGNvbnN0IFdlYktpdE5ldHdvcmtMb2FkVGhyb3R0bGVMYXRlbmN5TWlsbGlzZWNvbmRzRGVm
YXVsdHNLZXkgPSBAIldlYktpdE5ldHdvcmtMb2FkVGhyb3R0bGVMYXRlbmN5TWlsbGlzZWNvbmRz
IjsKIAorc3RhdGljIFdvcmtRdWV1ZSYgYXBwQm91bmREb21haW5RdWV1ZSgpCit7CisgICAgc3Rh
dGljIGF1dG8mIHF1ZXVlID0gV29ya1F1ZXVlOjpjcmVhdGUoImNvbS5hcHBsZS5XZWJLaXQuQXBw
Qm91bmREb21haW5zIiwgV29ya1F1ZXVlOjpUeXBlOjpTZXJpYWwpLmxlYWtSZWYoKTsKKyAgICBy
ZXR1cm4gcXVldWU7Cit9CisKK3N0YXRpYyBzdGQ6OmF0b21pYzxib29sPiBoYXNJbml0aWFsaXpl
ZEFwcEJvdW5kRG9tYWlucyA9IGZhbHNlOworCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RB
VElTVElDUykKIFdlYkNvcmU6OlRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUgV2Vic2l0ZURh
dGFTdG9yZTo6dGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSgpIGNvbnN0CiB7CkBAIC0yNDQs
NiArMjU5LDggQEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpwbGF0Zm9ybUluaXRpYWxpemUoKQog
ewogICAgIEFTU0VSVCghZGF0YVN0b3JlcygpLmNvbnRhaW5zKHRoaXMpKTsKICAgICBkYXRhU3Rv
cmVzKCkuYWRkKHRoaXMpOworCisgICAgaW5pdGlhbGl6ZUFwcEJvdW5kRG9tYWlucygpOwogfQog
CiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnBsYXRmb3JtRGVzdHJveSgpCkBAIC00MTksNCArNDM2
LDc1IEBAIFdURjo6U3RyaW5nIFdlYnNpdGVEYXRhU3RvcmU6OndlYnNpdGVEYXRhRGlyZWN0b3J5
RmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGNvbnN0CiAgICAgcmV0dXJuIHVybC5hYnNvbHV0ZVVS
TC5wYXRoLmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbjsKIH0KIAorc3RhdGljIEhhc2hTZXQ8V2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4+JiBhcHBCb3VuZERvbWFpbnMoKQoreworICAgIEFTU0VS
VChSdW5Mb29wOjppc01haW4oKSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+PiBhcHBCb3VuZERvbWFpbnM7CisgICAgcmV0dXJu
IGFwcEJvdW5kRG9tYWluczsKK30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppbml0aWFsaXpl
QXBwQm91bmREb21haW5zKCkKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisg
ICAgaWYgKGhhc0luaXRpYWxpemVkQXBwQm91bmREb21haW5zKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgc3RhdGljIGNvbnN0IGF1dG8gbWF4QXBwQm91bmREb21haW5Db3VudCA9IDEwOwor
ICAgIAorICAgIGFwcEJvdW5kRG9tYWluUXVldWUoKS5kaXNwYXRjaChbXSAoKSBtdXRhYmxlIHsK
KyAgICAgICAgaWYgKGhhc0luaXRpYWxpemVkQXBwQm91bmREb21haW5zKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAKKyAgICAgICAgTlNBcnJheTxOU1N0cmluZyAqPiAqZG9tYWlucyA9
IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gb2JqZWN0Rm9ySW5mb0RpY3Rpb25hcnlLZXk6QCJXS0Fw
cEJvdW5kRG9tYWlucyJdOworICAgICAgICAKKyAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3Bh
dGNoKFtkb21haW5zID0gcmV0YWluUHRyKGRvbWFpbnMpXSB7CisgICAgICAgICAgICBmb3IgKE5T
U3RyaW5nICpkb21haW4gaW4gZG9tYWlucy5nZXQoKSkgeworICAgICAgICAgICAgICAgIFVSTCB1
cmwgeyBVUkwoKSwgZG9tYWluIH07CisgICAgICAgICAgICAgICAgaWYgKCF1cmwuaXNWYWxpZCgp
KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbiBhcHBCb3VuZERvbWFpbiB7IHVybCB9OworICAgICAgICAgICAg
ICAgIGlmIChhcHBCb3VuZERvbWFpbi5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgIGFwcEJvdW5kRG9tYWlucygpLmFkZChhcHBCb3VuZERv
bWFpbik7CisgICAgICAgICAgICAgICAgaWYgKGFwcEJvdW5kRG9tYWlucygpLnNpemUoKSA+PSBt
YXhBcHBCb3VuZERvbWFpbkNvdW50KQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIFdFQlNJVEVfREFUQV9TVE9SRV9BRERJVElPTlMKKyAgICAg
ICAgICAgIGhhc0luaXRpYWxpemVkQXBwQm91bmREb21haW5zID0gdHJ1ZTsKKyAgICAgICAgfSk7
CisgICAgfSk7Cit9CisKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZW5zdXJlQXBwQm91bmREb21h
aW5zKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgSGFzaFNldDxXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbj4mKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgY29uc3QKK3sKKyAgICBpZiAoaGFz
SW5pdGlhbGl6ZWRBcHBCb3VuZERvbWFpbnMpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
YXBwQm91bmREb21haW5zKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXBwQm91
bmREb21haW5RdWV1ZSgpLmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRp
c3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAo
KSBtdXRhYmxlIHsKKyAgICAgICAgICAgIEFTU0VSVChoYXNJbml0aWFsaXplZEFwcEJvdW5kRG9t
YWlucyk7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihhcHBCb3VuZERvbWFpbnMoKSk7
CisgICAgICAgIH0pOworICAgIH0pOworfQorCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmJlZ2lu
QXBwQm91bmREb21haW5DaGVjayhXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYmIGRvbWFpbiwg
V2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5JiBsaXN0ZW5lcikKK3sKKyAgICBBU1NFUlQoUnVu
TG9vcDo6aXNNYWluKCkpOworCisgICAgZW5zdXJlQXBwQm91bmREb21haW5zKFtkb21haW4gPSBX
VEZNb3ZlKGRvbWFpbiksIGxpc3RlbmVyID0gbWFrZVJlZihsaXN0ZW5lcildIChhdXRvJiBkb21h
aW5zKSBtdXRhYmxlIHsKKyAgICAgICAgbGlzdGVuZXItPmRpZFJlY2VpdmVBcHBCb3VuZERvbWFp
blJlc3VsdChkb21haW5zLmNvbnRhaW5zKGRvbWFpbikpOworICAgIH0pOworfQorCit2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OmFwcEJvdW5kRG9tYWluc0ZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChjb25zdCBIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiYpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKSBjb25zdAoreworICAgIGVuc3VyZUFwcEJvdW5kRG9tYWlucyhbY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGF1dG8mIGRvbWFp
bnMpIG11dGFibGUgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihkb21haW5zKTsKKyAgICB9
KTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURh
dGEvV2Vic2l0ZURhdGFTdG9yZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURh
dGEvV2Vic2l0ZURhdGFTdG9yZS5oCmluZGV4IDU2YWYzZjk5NzYxZjQ4Yzc4YzMzMDJhMzJkYzNh
NTU0YjFlZWM4YWEuLmFmMmE5ZWNhYjczZjQzYTliNDJkNDE4YTdhNGY0NTNlY2UwNjYzMzEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRh
U3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRl
RGF0YVN0b3JlLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJMb2NhbFN0b3JhZ2VEYXRh
YmFzZVRyYWNrZXIuaCIKICNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVy
cy5oIgogI2luY2x1ZGUgIldlYkRldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzQ29udHJv
bGxlci5oIgorI2luY2x1ZGUgIldlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eS5oIgogI2luY2x1
ZGUgIldlYlBhZ2VQcm94eUlkZW50aWZpZXIuaCIKICNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YVN0b3JlQ2xpZW50LmgiCkBA
IC0yODIsNyArMjgzLDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIGhhc0FwcEJvdW5kU2Vzc2lvbihD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKSBjb25zdDsKICAgICB2b2lkIHNldEluQXBw
QnJvd3NlclByaXZhY3lFbmFibGVkKGJvb2wgZW5hYmxlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmKTsKIAorICAgIHZvaWQgYmVnaW5BcHBCb3VuZERvbWFpbkNoZWNrKFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluJiYsIFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eSYpOworICAgIHZv
aWQgYXBwQm91bmREb21haW5zRm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0
IEhhc2hTZXQ8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+Jik+JiYpIGNvbnN0OworICAgIHZv
aWQgZW5zdXJlQXBwQm91bmREb21haW5zKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgSGFz
aFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbj4mKT4mJikgY29uc3Q7CisKIHByaXZhdGU6
CisgICAgdm9pZCBpbml0aWFsaXplQXBwQm91bmREb21haW5zKCk7CiAgICAgdm9pZCBmZXRjaERh
dGFBbmRBcHBseShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgT3B0aW9uU2V0PFdlYnNpdGVE
YXRhRmV0Y2hPcHRpb24+LCBSZWZQdHI8V29ya1F1ZXVlPiYmLCBGdW5jdGlvbjx2b2lkKFZlY3Rv
cjxXZWJzaXRlRGF0YVJlY29yZD4pPiYmIGFwcGx5KTsKIAogICAgIHZvaWQgcGxhdGZvcm1Jbml0
aWFsaXplKCk7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cK
aW5kZXggMzY0NDlmMjQ1NGE2MGZkOWQ3OTMwMGRkMjJiMmZhNWE0Njk0YThjNS4uNDBhMzMyZTVj
MjNlYzM0YjUzNTliY2VkYTllYWM0ZjRhNzI5ODM5NCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdl
TG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDIwLTAzLTA2ICBL
YXRlIENoZW5leSAgPGthdGhlcmluZV9jaGVuZXlAYXBwbGUuY29tPgorCisgICAgICAgIFVJUHJv
Y2VzcyBuZWVkcyBtZWNoYW5pc20gdG8gc3BlY2lmeSBBcHBCb3VuZCBkb21haW5zCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDg1MjgKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzU5OTgwMzQwPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFkZGVkIHRlc3QgYXBwLWJvdW5kIGRvbWFpbnMgdG8gdGhlIHBs
aXN0IGFuZCB0ZXN0ZWQgdGhhdCB0aGUgZG9tYWlucworICAgICAgICBhcmUgcHJvcGVybHkgc3Rv
cmVkIGluIHRoZSB3ZWJzaXRlIGRhdGEgc3RvcmUgYWZ0ZXIgYSBuYXZpZ2F0aW9uLgorCisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9JbmZvLnBsaXN0OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvSW5BcHBCcm93c2VyUHJpdmFjeS5tbToKKyAgICAgICAgKFRFU1Qp
OgorCiAyMDIwLTAzLTA2ICBMYXVybyBNb3VyYSA8bG1vdXJhQGlnYWxpYS5jb20+CiAKICAgICAg
ICAgW1dQRV1bV2ViRHJpdmVyXSBNaW5pQnJvd3NlciBzaG91bGQgcmVhY3QgdG8gY2xvc2Ugc2Vz
c2lvbiBjb21tYW5kcwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9JbmZvLnBsaXN0
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9JbmZvLnBsaXN0CmluZGV4IDQyMTZiNmQ3MTMzY2YxYWQ3
MzdmOGQ2MjVjNTMyYWE5MmExZDgxMTguLjk4NjNmMzM3MmE1ZmY4ZGQ4NDJiMWUwN2M0MzFhNDc4
NWJjNDZiZDAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvSW5mby5wbGlzdAorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL0luZm8ucGxpc3QKQEAgLTIsNiArMiwyNSBAQAogPCFET0NU
WVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3
dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+CiA8cGxpc3QgdmVyc2lvbj0i
MS4wIj4KIDxkaWN0PgorCTxrZXk+V0tBcHBCb3VuZERvbWFpbnM8L2tleT4KKwk8YXJyYXk+CisJ
CTxzdHJpbmc+dGVzdERvbWFpbjE8L3N0cmluZz4KKwkJPHN0cmluZz5odHRwczovL3N1Yi5kb21h
aW4ud2Via2l0Lm9yZy9yb2FkL3RvL25vd2hlcmUvPC9zdHJpbmc+CisJCTxzdHJpbmc+aHR0cHM6
Ly93ZWJraXQub3JnPC9zdHJpbmc+CisJCTxzdHJpbmc+aHR0cHM6Ly9sb2NhbGhvc3Q6ODAwMDwv
c3RyaW5nPgorCQk8c3RyaW5nPmh0dHA6Ly9sb2NhbGhvc3Qvcm9hZC90by9ub3doZXJlLzwvc3Ry
aW5nPgorCQk8c3RyaW5nPmZpbGU6Ly8vc29tZS9maWxlPC9zdHJpbmc+CisJCTxzdHJpbmc+MTI3
LjAuMC4xPC9zdHJpbmc+CisJCTxzdHJpbmc+PC9zdHJpbmc+CisJCTxzdHJpbmc+ICAgPC9zdHJp
bmc+CisJCTxzdHJpbmc+aHR0cHM6Ly9zdWIuZG9tYWluLndlYmtpdC5vcmc8L3N0cmluZz4KKwkJ
PHN0cmluZz5odHRwczovL3d3dy5hcHBsZS5jb20vPC9zdHJpbmc+CisJCTxzdHJpbmc+aHR0cHM6
Ly93ZWJraXQub3JnPC9zdHJpbmc+CisJCTxzdHJpbmc+aHR0cHM6Ly93d3cuYXBwbGUuY29tL2lw
aG9uZS88L3N0cmluZz4KKwkJPHN0cmluZz5odHRwOi8vd3d3LmV4YW1wbGUuY29tLzwvc3RyaW5n
PgorCQk8c3RyaW5nPmh0dHA6Ly9iYXIuY29tLzwvc3RyaW5nPgorCQk8c3RyaW5nPmh0dHA6Ly9m
b28uY29tLzwvc3RyaW5nPgorCTwvYXJyYXk+CiAJPGtleT5DRkJ1bmRsZU5hbWU8L2tleT4KIAk8
c3RyaW5nPiR7UFJPRFVDVF9OQU1FfTwvc3RyaW5nPgogCTxrZXk+Q0ZCdW5kbGVJZGVudGlmaWVy
PC9rZXk+CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L0luQXBwQnJvd3NlclByaXZhY3kubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL0luQXBwQnJvd3NlclByaXZhY3kubW0KaW5kZXggNzllNDUxZTM1NWMyZDg4MTU0NTUx
NzkxMjRkNzA3MTE4ODI3NDA4My4uNTlkMzdiMWIyMWZiYWZkOWUxMWM2YmVjNjAzNmY4ZTY4ZDE0
ZTdjNCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9J
bkFwcEJyb3dzZXJQcml2YWN5Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvSW5BcHBCcm93c2VyUHJpdmFjeS5tbQpAQCAtMjksMTMgKzI5LDE3IEBACiAjaW1w
b3J0ICJUZXN0TmF2aWdhdGlvbkRlbGVnYXRlLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3Lmgi
CiAjaW1wb3J0ICJXS1dlYlZpZXdDb25maWd1cmF0aW9uRXh0cmFzLmgiCisjaW1wb3J0IDxXZWJD
b3JlL1JlZ2lzdHJhYmxlRG9tYWluLmg+CisjaW1wb3J0IDxXZWJDb3JlL1J1bnRpbWVBcHBsaWNh
dGlvbkNoZWNrcy5oPgogI2ltcG9ydCA8V2ViS2l0L1dLUHJlZmVyZW5jZXNQcml2YXRlLmg+CiAj
aW1wb3J0IDxXZWJLaXQvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg+CisjaW1wb3J0
IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgogI2ltcG9ydCA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CiAKK3N0YXRpYyBib29sIGlzRG9uZTsKKwogI2lmIFVTRShBUFBMRV9JTlRF
Uk5BTF9TREspCiAKLXN0YXRpYyBib29sIGlzRG9uZTsKIHN0YXRpYyBOU1N0cmluZyAqIGNvbnN0
IHVzZXJTY3JpcHRTb3VyY2UgPSBAIndpbmRvdy53a1VzZXJTY3JpcHRJbmplY3RlZCA9IHRydWUi
OwogCiBAaW50ZXJmYWNlIFRlc3RJbkFwcEJyb3dzZXJTY3JpcHRNZXNzYWdlSGFuZGxlciA6IE5T
T2JqZWN0IDxXS1NjcmlwdE1lc3NhZ2VIYW5kbGVyPgpAQCAtNTAsNyArNTQsNyBAQCAtICh2b2lk
KXVzZXJDb250ZW50Q29udHJvbGxlcjooV0tVc2VyQ29udGVudENvbnRyb2xsZXIgKil1c2VyQ29u
dGVudENvbnRyb2xsZXIgZAogCiBAZW5kCiAKLVRFU1QoV2ViS2l0LCBOb25BcHBCb3VuZERvbWFp
bkZhaWxlZFVzZXJTY3JpcHRzKQorVEVTVChJbkFwcEJyb3dzZXJQcml2YWN5LCBOb25BcHBCb3Vu
ZERvbWFpbkZhaWxlZFVzZXJTY3JpcHRzKQogewogICAgIGF1dG8gbWVzc2FnZUhhbmRsZXIgPSBh
ZG9wdE5TKFtbVGVzdEluQXBwQnJvd3NlclNjcmlwdE1lc3NhZ2VIYW5kbGVyIGFsbG9jXSBpbml0
XSk7CiAgICAgYXV0byB1c2VyU2NyaXB0ID0gYWRvcHROUyhbW1dLVXNlclNjcmlwdCBhbGxvY10g
aW5pdFdpdGhTb3VyY2U6dXNlclNjcmlwdFNvdXJjZSBpbmplY3Rpb25UaW1lOldLVXNlclNjcmlw
dEluamVjdGlvblRpbWVBdERvY3VtZW50U3RhcnQgZm9yTWFpbkZyYW1lT25seTpZRVNdKTsKQEAg
LTk1LDcgKzk5LDcgQEAgVEVTVChXZWJLaXQsIE5vbkFwcEJvdW5kRG9tYWluRmFpbGVkVXNlclNj
cmlwdHMpCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZpc0RvbmUpOwogfQogCi1URVNU
KFdlYktpdCwgTm9uQXBwQm91bmREb21haW5GYWlsZWRVc2VyQWdlbnRTY3JpcHRzKQorVEVTVChJ
bkFwcEJyb3dzZXJQcml2YWN5LCBOb25BcHBCb3VuZERvbWFpbkZhaWxlZFVzZXJBZ2VudFNjcmlw
dHMpCiB7CiAgICAgV0tXZWJWaWV3Q29uZmlndXJhdGlvbiAqY29uZmlndXJhdGlvbiA9IFtXS1dl
YlZpZXdDb25maWd1cmF0aW9uIF90ZXN0X2NvbmZpZ3VyYXRpb25XaXRoVGVzdFBsdWdJbkNsYXNz
TmFtZTpAIldlYlByb2Nlc3NQbHVnSW5XaXRoSW50ZXJuYWxzIiBjb25maWd1cmVKU0NGb3JUZXN0
aW5nOllFU107CiAgICAgW1tjb25maWd1cmF0aW9uIHByZWZlcmVuY2VzXSBfc2V0SW5BcHBCcm93
c2VyUHJpdmFjeUVuYWJsZWQ6Tk9dOwpAQCAtMTMyLDcgKzEzNiw3IEBAIFRFU1QoV2ViS2l0LCBO
b25BcHBCb3VuZERvbWFpbkZhaWxlZFVzZXJBZ2VudFNjcmlwdHMpCiAgICAgVGVzdFdlYktpdEFQ
STo6VXRpbDo6cnVuKCZpc0RvbmUpOwogfQogCi1URVNUKFdlYktpdCwgU3dhcEJhY2tUb0FwcEJv
dW5kUmVqZWN0c1VzZXJTY3JpcHQpCitURVNUKEluQXBwQnJvd3NlclByaXZhY3ksIFN3YXBCYWNr
VG9BcHBCb3VuZFJlamVjdHNVc2VyU2NyaXB0KQogewogICAgIGF1dG8gbWVzc2FnZUhhbmRsZXIg
PSBhZG9wdE5TKFtbVGVzdEluQXBwQnJvd3NlclNjcmlwdE1lc3NhZ2VIYW5kbGVyIGFsbG9jXSBp
bml0XSk7CiAgICAgYXV0byB1c2VyU2NyaXB0ID0gYWRvcHROUyhbW1dLVXNlclNjcmlwdCBhbGxv
Y10gaW5pdFdpdGhTb3VyY2U6dXNlclNjcmlwdFNvdXJjZSBpbmplY3Rpb25UaW1lOldLVXNlclNj
cmlwdEluamVjdGlvblRpbWVBdERvY3VtZW50U3RhcnQgZm9yTWFpbkZyYW1lT25seTpZRVNdKTsK
QEAgLTE3NiwzICsxODAsMjIgQEAgVEVTVChXZWJLaXQsIFN3YXBCYWNrVG9BcHBCb3VuZFJlamVj
dHNVc2VyU2NyaXB0KQogfQogCiAjZW5kaWYgLy8gVVNFKEFQUExFX0lOVEVSTkFMX1NESykKKwor
VEVTVChJbkFwcEJyb3dzZXJQcml2YWN5LCBBcHBCb3VuZERvbWFpbnMpCit7CisgICAgaXNEb25l
ID0gZmFsc2U7CisgICAgW1tXS1dlYnNpdGVEYXRhU3RvcmUgZGVmYXVsdERhdGFTdG9yZV0gX2Fw
cEJvdW5kRG9tYWluczpeKE5TQXJyYXk8TlNTdHJpbmcgKj4gKmRvbWFpbnMpIHsKKyAgICAgICAg
TlNBcnJheSAqZG9tYWluc1RvQ29tcGFyZSA9IFtOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6QCJh
cHBsZS5jb20iLCBAImJhci5jb20iLCBAImV4YW1wbGUuY29tIiwgQCJmb28uY29tIiwgQCJsb2Nh
bGhvc3QiLCBAIndlYmtpdC5vcmciLCBuaWxdOworCisgICAgICAgIE5TQXJyYXkgKnNvcnRlZERv
bWFpbnMgPSBbZG9tYWlucyBzb3J0ZWRBcnJheVVzaW5nU2VsZWN0b3I6QHNlbGVjdG9yKGNhc2VJ
bnNlbnNpdGl2ZUNvbXBhcmU6KV07CisKKyAgICAgICAgaW50IGxlbmd0aCA9IFtzb3J0ZWREb21h
aW5zIGNvdW50XTsKKyAgICAgICAgRVhQRUNUX0VRKGxlbmd0aCwgNik7CisgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCisgICAgICAgICAgICBFWFBFQ1RfV0tfU1RSRVEo
W3NvcnRlZERvbWFpbnMgb2JqZWN0QXRJbmRleDppXSwgW2RvbWFpbnNUb0NvbXBhcmUgb2JqZWN0
QXRJbmRleDppXSk7CisKKyAgICAgICAgaXNEb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0
V2ViS2l0QVBJOjpVdGlsOjpydW4oJmlzRG9uZSk7Cit9CisK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392839</attachid>
            <date>2020-03-06 19:20:38 -0800</date>
            <delta_ts>2020-03-06 20:48:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-208528-20200306192038.patch</filename>
            <type>text/plain</type>
            <size>37304</size>
            <attacher name="Kate Cheney">katherine_cheney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU3OTk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDUzMTgzZGIyMGYzZjQ1MTY2
OWIyZGQ2MzA0ZDYyZTVmY2ZjNTEwMmEuLjYxYzhjYjY3NjVkYmI0ZDRkZDAyYTBlOTU2NDQzMzY5
YmE4YWZlMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjQgQEAKKzIwMjAtMDMtMDYgIEthdGUgQ2hl
bmV5ICA8a2F0aGVyaW5lX2NoZW5leUBhcHBsZS5jb20+CisKKyAgICAgICAgVUlQcm9jZXNzIG5l
ZWRzIG1lY2hhbmlzbSB0byBzcGVjaWZ5IEFwcEJvdW5kIGRvbWFpbnMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODUyOAorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNTk5ODAzNDA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQnJlbnQgRnVsZ2hhbS4K
KworICAgICAgICBBZGRzIGZ1bmN0aW9uYWxpdHkgdG8gcmVhZCBhcHAtYm91bmQgZG9tYWlucyBm
cm9tIHRoZSBJbmZvLnBsaXN0IG9uCisgICAgICAgIGJhY2tncm91bmQgdGhyZWFkIHZpYSB0aGUg
V2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5IGFuZCByZXBvcnQKKyAgICAgICAgd2hldGhlciBh
IGRvbWFpbiBpcyBhcHAtYm91bmQuIAorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYnNpdGVEYXRhU3RvcmUubW06CisgICAgICAgICgtW1dLV2Vic2l0ZURhdGFTdG9yZSBfYXBw
Qm91bmREb21haW5zOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRl
RGF0YVN0b3JlUHJpdmF0ZS5oOgorICAgICAgICBUZXN0IEFQSSBjYWxsIHRvIGdldCBhcHBCb3Vu
ZERvbWFpbnMuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclBy
b3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5OjpX
ZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZVBv
bGljeUxpc3RlbmVyUHJveHk6OmRpZFJlY2VpdmVBcHBCb3VuZERvbWFpblJlc3VsdCk6CisgICAg
ICAgIChXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHk6OmRpZFJlY2VpdmVTYWZlQnJvd3NpbmdS
ZXN1bHRzKToKKyAgICAgICAgKFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eTo6dXNlKToKKyAg
ICAgICAgKFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eTo6ZG93bmxvYWQpOgorICAgICAgICAo
V2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5OjppZ25vcmUpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJh
bWVQb2xpY3lMaXN0ZW5lclByb3h5OjpjcmVhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJG
cmFtZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVQcm94eTo6c2V0VXBQb2xp
Y3lMaXN0ZW5lclByb3h5KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViRnJhbWVQcm94eS5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICBBZGRlZCBhIG5l
dyBmdW5jdGlvbiB0byBXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkgdG8gd2FpdCBmb3IgdGhl
CisgICAgICAgIGFwcC1ib3VuZCBkb21haW5zIHRvIGJlIHJlYWQgYmVmb3JlIGNvbXBsZXRpbmcg
YSBuYXZpZ2F0aW9uLiBFYWNoCisgICAgICAgIG90aGVyIGZ1bmN0aW9uIG11c3Qgbm93IGNoZWNr
IGlmIG1faXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiBoYXMKKyAgICAgICAgYmVlbiBzZXQg
YmVmb3JlIHNlbmRpbmcgYSBmdWxsIHJlcGx5LiBBbHNvIGFkZGVkIGFuIGVudW0gY2xhc3MKKyAg
ICAgICAgU2hvdWxkRXhwZWN0QXBwQm91bmREb21haW5SZXN1bHQgdG8gdGVsbCB0aGUgbGlzdGVu
ZXIgbm90IHRvIHdhaXQgZm9yCisgICAgICAgIHRoZSByZXN1bHRzIGluIHVuZWNlc3NhcnkgY2Fz
ZXMuCisKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojppc0FwcEJvdW5kRG9tYWluIGNv
bnN0KTogRGVsZXRlZAorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldElzTmF2aWdh
dGluZ1RvQXBwQm91bmREb21haW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRl
Y2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24pOgorICAgICAgICBBZnRlciB0aGUgbGlzdGVu
ZXIgcmVzcG9uZHMgd2l0aCB0aGUgcmVzdWx0cywgc2V0IHRoZSBuZXcKKyAgICAgICAgdmFsdWUg
aW4gV2ViUGFnZVByb3h5LiBXZSBubyBsb25nZXIgbmVlZCB0byBjaGVjayBmb3IgaXNBcHBCb3Vu
ZAorICAgICAgICBkb21haW4gbm93IHRoYXQgd2UgaGF2ZSByZWNlaXZlZCB0aGUgdmFsdWUuCisK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dB
Y3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRlY2lkZVBvbGljeUZvclJl
c3BvbnNlU2hhcmVkKToKKyAgICAgICAgTm8gbmVlZCB0byBsaXN0ZW4gZm9yIGFwcC1ib3VuZCBk
b21haW4gcmVzcG9uc2UgaGVyZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9y
ZUNvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjphcHBCb3VuZERvbWFpbnMpOgorICAgICAgICAo
V2ViS2l0OjphcHBCb3VuZERvbWFpblF1ZXVlKToKKyAgICAgICAgQWRkIGEgc2VwYXJhdGUgc3Rh
dGljIHF1ZXVlIGZvciByZWFkaW5nIGFwcC1ib3VuZCBkb21haW5zIHRvIGF2b2lkCisgICAgICAg
IHJhY2luZXNzLgorCisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmJlZ2luQXBw
Qm91bmREb21haW5DaGVjayk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6Omdl
dEFwcEJvdW5kRG9tYWluc0ZvclRlc3RpbmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRl
RGF0YS9XZWJzaXRlRGF0YVN0b3JlLmg6CisgICAgICAgIFJlYWQgdGhlIGFwcC1ib3VuZCBkb21h
aW4gbGlzdCBvbiB0aGUgYmFja2dyb3VuZCB0aHJlYWQsIGFuZCBvbmNlCisgICAgICAgIGRvbmUs
IGNhbGwgdGhlIGxpc3RlbmVyIG9uIHRoZSBtYWluIHRocmVhZC4KKwogMjAyMC0wMy0wNSAgS2F0
ZSBDaGVuZXkgIDxrYXRoZXJpbmVfY2hlbmV5QGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgd2Vi
IHBhZ2UgYWRkaXRpb25zIHRvIFdlYlBhZ2VQcm94eQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbSBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW0KaW5kZXggODVhYWY3
ZDY3OTExNTk0YjA2NTNlMzIzYWJjYTYzYzEyNGY4Zjg4YS4uZWQyZTVlZjY4MjE2NGFlNWQ1MmM0
YTNiZmMzZDJjOGQ1ZDU4NzYzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tCkBAIC02MDAsNCArNjAwLDE1IEBA
IC0gKF9XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uICopX2NvbmZpZ3VyYXRpb24KICAg
ICByZXR1cm4gd3JhcHBlcihfd2Vic2l0ZURhdGFTdG9yZS0+Y29uZmlndXJhdGlvbigpLmNvcHko
KSk7CiB9CiAKKy0gKHZvaWQpX2FwcEJvdW5kRG9tYWluczoodm9pZCAoXikoTlNBcnJheTxOU1N0
cmluZyAqPiAqKSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIF93ZWJzaXRlRGF0YVN0b3JlLT5h
cHBCb3VuZERvbWFpbnNGb3JUZXN0aW5nKFtjb21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0
cihjb21wbGV0aW9uSGFuZGxlcildKGF1dG8mIGRvbWFpbnMpIG11dGFibGUgeworICAgICAgICBW
ZWN0b3I8UmVmUHRyPEFQSTo6T2JqZWN0Pj4gYXBpRG9tYWluczsKKyAgICAgICAgYXBpRG9tYWlu
cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGRvbWFpbnMuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChh
dXRvJiBkb21haW4gOiBkb21haW5zKQorICAgICAgICAgICAgYXBpRG9tYWlucy51bmNoZWNrZWRB
cHBlbmQoQVBJOjpTdHJpbmc6OmNyZWF0ZShkb21haW4uc3RyaW5nKCkpKTsKKyAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIod3JhcHBlcihBUEk6OkFycmF5OjpjcmVhdGUoV1RGTW92ZShhcGlEb21h
aW5zKSkpKTsKKyAgICB9KTsKK30KKwogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgKaW5k
ZXggOWUwZWUyYjA5MTZhZTljNjQ1N2RjMDk1MmExYjQwYWM4ODc3MzhhMi4uZWRkYmYzMDA5MDJh
ODYyMjIyM2Y2MGM2OTViMjVhMWM0OTMzMjIyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5o
CkBAIC03Nyw2ICs3Nyw3IEBAIHR5cGVkZWYgTlNfT1BUSU9OUyhOU1VJbnRlZ2VyLCBfV0tXZWJz
aXRlRGF0YVN0b3JlRmV0Y2hPcHRpb25zKSB7CiAtICh2b2lkKV9jbGVhclJlc291cmNlTG9hZFN0
YXRpc3RpY3M6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAtICh2b2lkKV9pc1JlZ2lz
dGVyZWRBc1N1YnJlc291cmNlVW5kZXJGaXJzdFBhcnR5OihOU1VSTCAqKWZpcnN0UGFydHlVUkwg
dGhpcmRQYXJ0eTooTlNVUkwgKil0aGlyZFBhcnR5VVJMIGNvbXBsZXRpb25IYW5kbGVyOih2b2lk
ICheKShCT09MKSljb21wbGV0aW9uSGFuZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01B
Q19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogLSAodm9pZClfcHJvY2Vzc1N0YXRpc3RpY3NBbmRE
YXRhUmVjb3Jkczoodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJX0FWQUlM
QUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CistICh2b2lkKV9hcHBCb3VuZERvbWFpbnM6
KHZvaWQgKF4pKE5TQXJyYXk8TlNTdHJpbmcgKj4gKikpY29tcGxldGlvbkhhbmRsZXIgV0tfQVBJ
X0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKIAogQHByb3Bl
cnR5IChudWxsYWJsZSwgbm9uYXRvbWljLCB3ZWFrKSBpZCA8X1dLV2Vic2l0ZURhdGFTdG9yZURl
bGVnYXRlPiBfZGVsZWdhdGUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4w
KSk7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkpIF9XS1dlYnNpdGVEYXRh
U3RvcmVDb25maWd1cmF0aW9uICpfY29uZmlndXJhdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkuY3BwCmluZGV4IGE1
ZmFmM2ZkNWU0YjVmZjJhZmE3ODM1ZWFmOTZhNDFlM2ZmNGFhM2IuLmNiMDQ0NGU3ZDE4MDg5OGY2
NzlkMjY3NTNjNjNjM2NlYzc2YmI3OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5LmNwcApAQCAtMzUsMzAgKzM1LDQ1
IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1XZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHk6
OldlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eShSZXBseSYmIHJlcGx5LCBTaG91bGRFeHBlY3RT
YWZlQnJvd3NpbmdSZXN1bHQgZXhwZWN0KQorV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5OjpX
ZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkoUmVwbHkmJiByZXBseSwgU2hvdWxkRXhwZWN0U2Fm
ZUJyb3dzaW5nUmVzdWx0IGV4cGVjdFNhZmVCcm93c2luZ1Jlc3VsdCwgU2hvdWxkRXhwZWN0QXBw
Qm91bmREb21haW5SZXN1bHQgZXhwZWN0QXBwQm91bmREb21haW5SZXN1bHQpCiAgICAgOiBtX3Jl
cGx5KFdURk1vdmUocmVwbHkpKQogewotICAgIGlmIChleHBlY3QgPT0gU2hvdWxkRXhwZWN0U2Fm
ZUJyb3dzaW5nUmVzdWx0OjpObykKKyAgICBpZiAoZXhwZWN0U2FmZUJyb3dzaW5nUmVzdWx0ID09
IFNob3VsZEV4cGVjdFNhZmVCcm93c2luZ1Jlc3VsdDo6Tm8pCiAgICAgICAgIGRpZFJlY2VpdmVT
YWZlQnJvd3NpbmdSZXN1bHRzKHsgfSk7CisgICAgaWYgKGV4cGVjdEFwcEJvdW5kRG9tYWluUmVz
dWx0ID09IFNob3VsZEV4cGVjdEFwcEJvdW5kRG9tYWluUmVzdWx0OjpObykKKyAgICAgICAgZGlk
UmVjZWl2ZUFwcEJvdW5kRG9tYWluUmVzdWx0KHsgfSk7CiB9CiAKIFdlYkZyYW1lUG9saWN5TGlz
dGVuZXJQcm94eTo6fldlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eSgpID0gZGVmYXVsdDsKIAor
dm9pZCBXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHk6OmRpZFJlY2VpdmVBcHBCb3VuZERvbWFp
blJlc3VsdChib29sIGlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4pCit7CisgICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gaXNBcHBCb3VuZCA9IGlzTmF2aWdhdGlu
Z1RvQXBwQm91bmREb21haW4gPyBOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbjo6WWVzIDogTmF2
aWdhdGluZ1RvQXBwQm91bmREb21haW46Ok5vOworICAgIGlmIChtX3BvbGljeVJlc3VsdCAmJiBt
X3NhZmVCcm93c2luZ1dhcm5pbmcpIHsKKyAgICAgICAgaWYgKG1fcmVwbHkpCisgICAgICAgICAg
ICBtX3JlcGx5KFdlYkNvcmU6OlBvbGljeUFjdGlvbjo6VXNlLCBtX3BvbGljeVJlc3VsdC0+Zmly
c3QuZ2V0KCksIG1fcG9saWN5UmVzdWx0LT5zZWNvbmQsIFdURk1vdmUoKm1fc2FmZUJyb3dzaW5n
V2FybmluZyksIGlzQXBwQm91bmQpOworICAgIH0gZWxzZQorICAgICAgICBtX2lzTmF2aWdhdGlu
Z1RvQXBwQm91bmREb21haW4gPSBpc0FwcEJvdW5kOworfQorCiB2b2lkIFdlYkZyYW1lUG9saWN5
TGlzdGVuZXJQcm94eTo6ZGlkUmVjZWl2ZVNhZmVCcm93c2luZ1Jlc3VsdHMoUmVmUHRyPFNhZmVC
cm93c2luZ1dhcm5pbmc+JiYgc2FmZUJyb3dzaW5nV2FybmluZykKIHsKKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwogICAgIEFTU0VSVCghbV9zYWZlQnJvd3NpbmdXYXJuaW5nKTsKLSAgICBp
ZiAobV9wb2xpY3lSZXN1bHQpIHsKKyAgICBpZiAobV9wb2xpY3lSZXN1bHQgJiYgbV9pc05hdmln
YXRpbmdUb0FwcEJvdW5kRG9tYWluKSB7CiAgICAgICAgIGlmIChtX3JlcGx5KQotICAgICAgICAg
ICAgbV9yZXBseShXZWJDb3JlOjpQb2xpY3lBY3Rpb246OlVzZSwgbV9wb2xpY3lSZXN1bHQtPmZp
cnN0LmdldCgpLCBtX3BvbGljeVJlc3VsdC0+c2Vjb25kLCBXVEZNb3ZlKHNhZmVCcm93c2luZ1dh
cm5pbmcpKTsKKyAgICAgICAgICAgIG1fcmVwbHkoV2ViQ29yZTo6UG9saWN5QWN0aW9uOjpVc2Us
IG1fcG9saWN5UmVzdWx0LT5maXJzdC5nZXQoKSwgbV9wb2xpY3lSZXN1bHQtPnNlY29uZCwgV1RG
TW92ZShzYWZlQnJvd3NpbmdXYXJuaW5nKSwgKm1faXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFp
bik7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fc2FmZUJyb3dzaW5nV2FybmluZyA9IFdURk1vdmUo
c2FmZUJyb3dzaW5nV2FybmluZyk7CiB9CiAKIHZvaWQgV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclBy
b3h5Ojp1c2UoQVBJOjpXZWJzaXRlUG9saWNpZXMqIHBvbGljaWVzLCBQcm9jZXNzU3dhcFJlcXVl
c3RlZEJ5Q2xpZW50IHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQpCiB7Ci0gICAgaWYgKG1f
c2FmZUJyb3dzaW5nV2FybmluZykgeworICAgIGlmIChtX3NhZmVCcm93c2luZ1dhcm5pbmcgJiYg
bV9pc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKSB7CiAgICAgICAgIGlmIChtX3JlcGx5KQot
ICAgICAgICAgICAgbV9yZXBseShXZWJDb3JlOjpQb2xpY3lBY3Rpb246OlVzZSwgcG9saWNpZXMs
IHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIFdURk1vdmUoKm1fc2FmZUJyb3dzaW5nV2Fy
bmluZykpOworICAgICAgICAgICAgbV9yZXBseShXZWJDb3JlOjpQb2xpY3lBY3Rpb246OlVzZSwg
cG9saWNpZXMsIHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIFdURk1vdmUoKm1fc2FmZUJy
b3dzaW5nV2FybmluZyksICptX2lzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4pOwogICAgIH0g
ZWxzZSBpZiAoIW1fcG9saWN5UmVzdWx0KQogICAgICAgICBtX3BvbGljeVJlc3VsdCA9IHt7IHBv
bGljaWVzLCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50IH19OwogfQpAQCAtNjYsMTMgKzgx
LDEzIEBAIHZvaWQgV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5Ojp1c2UoQVBJOjpXZWJzaXRl
UG9saWNpZXMqIHBvbGljaWVzLCBQcm9jZXNzU3dhCiB2b2lkIFdlYkZyYW1lUG9saWN5TGlzdGVu
ZXJQcm94eTo6ZG93bmxvYWQoKQogewogICAgIGlmIChtX3JlcGx5KQotICAgICAgICBtX3JlcGx5
KFdlYkNvcmU6OlBvbGljeUFjdGlvbjo6RG93bmxvYWQsIG51bGxwdHIsIFByb2Nlc3NTd2FwUmVx
dWVzdGVkQnlDbGllbnQ6Ok5vLCB7IH0pOworICAgICAgICBtX3JlcGx5KFdlYkNvcmU6OlBvbGlj
eUFjdGlvbjo6RG93bmxvYWQsIG51bGxwdHIsIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQ6
Ok5vLCB7IH0sIHsgfSk7CiB9CiAKIHZvaWQgV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5Ojpp
Z25vcmUoKQogewogICAgIGlmIChtX3JlcGx5KQotICAgICAgICBtX3JlcGx5KFdlYkNvcmU6OlBv
bGljeUFjdGlvbjo6SWdub3JlLCBudWxscHRyLCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50
OjpObywgeyB9KTsKKyAgICAgICAgbV9yZXBseShXZWJDb3JlOjpQb2xpY3lBY3Rpb246Oklnbm9y
ZSwgbnVsbHB0ciwgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudDo6Tm8sIHsgfSwgeyB9KTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eS5oCmluZGV4IDlhNmJlOTlkNDA3M2Vl
MTA4YjRjYjIwZjcyMWMxMDhmN2MwMTg4ZTkuLjViZmFlOWY3YjNlZGVhZmViNjE4YzVlMGI2ZDZk
Y2EzOWU3ODNhOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkZyYW1l
UG9saWN5TGlzdGVuZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkZy
YW1lUG9saWN5TGlzdGVuZXJQcm94eS5oCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UK
IAogI2luY2x1ZGUgIkFQSU9iamVjdC5oIgorI2luY2x1ZGUgIlBvbGljeURlY2lzaW9uLmgiCiAj
aW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRlclR5cGVzLmg+CiAjaW5jbHVkZSA8d3RmL0NvbXBs
ZXRpb25IYW5kbGVyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtMzgsMTYgKzM5LDE3
IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBTYWZlQnJvd3NpbmdXYXJuaW5nOwogCi1l
bnVtIGNsYXNzIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQgeyBObywgWWVzIH07Ci1lbnVt
IGNsYXNzIFNob3VsZEV4cGVjdFNhZmVCcm93c2luZ1Jlc3VsdCB7IE5vLCBZZXMgfTsKK2VudW0g
Y2xhc3MgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCA6IGJvb2wgeyBObywgWWVzIH07Citl
bnVtIGNsYXNzIFNob3VsZEV4cGVjdFNhZmVCcm93c2luZ1Jlc3VsdCA6IGJvb2wgeyBObywgWWVz
IH07CitlbnVtIGNsYXNzIFNob3VsZEV4cGVjdEFwcEJvdW5kRG9tYWluUmVzdWx0IDogYm9vbCB7
IE5vLCBZZXMgfTsKIAogY2xhc3MgV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5IDogcHVibGlj
IEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6RnJhbWVQb2xpY3lMaXN0ZW5lcj4g
ewogcHVibGljOgogCi0gICAgdXNpbmcgUmVwbHkgPSBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdl
YkNvcmU6OlBvbGljeUFjdGlvbiwgQVBJOjpXZWJzaXRlUG9saWNpZXMqLCBQcm9jZXNzU3dhcFJl
cXVlc3RlZEJ5Q2xpZW50LCBSZWZQdHI8U2FmZUJyb3dzaW5nV2FybmluZz4mJik+OwotICAgIHN0
YXRpYyBSZWY8V2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5PiBjcmVhdGUoUmVwbHkmJiByZXBs
eSwgU2hvdWxkRXhwZWN0U2FmZUJyb3dzaW5nUmVzdWx0IGV4cGVjdCkKKyAgICB1c2luZyBSZXBs
eSA9IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6UG9saWN5QWN0aW9uLCBBUEk6Oldl
YnNpdGVQb2xpY2llcyosIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIFJlZlB0cjxTYWZl
QnJvd3NpbmdXYXJuaW5nPiYmLCBOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbik+OworICAgIHN0
YXRpYyBSZWY8V2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5PiBjcmVhdGUoUmVwbHkmJiByZXBs
eSwgU2hvdWxkRXhwZWN0U2FmZUJyb3dzaW5nUmVzdWx0IGV4cGVjdFNhZmVCcm93c2luZ1Jlc3Vs
dCwgU2hvdWxkRXhwZWN0QXBwQm91bmREb21haW5SZXN1bHQgZXhwZWN0QXBwQm91bmREb21haW5S
ZXN1bHQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJGcmFtZVBvbGlj
eUxpc3RlbmVyUHJveHkoV1RGTW92ZShyZXBseSksIGV4cGVjdCkpOworICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkoV1RGTW92ZShyZXBseSks
IGV4cGVjdFNhZmVCcm93c2luZ1Jlc3VsdCwgZXhwZWN0QXBwQm91bmREb21haW5SZXN1bHQpKTsK
ICAgICB9CiAgICAgfldlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eSgpOwogCkBAIC01NiwxMiAr
NTgsMTQgQEAgcHVibGljOgogICAgIHZvaWQgaWdub3JlKCk7CiAgICAgCiAgICAgdm9pZCBkaWRS
ZWNlaXZlU2FmZUJyb3dzaW5nUmVzdWx0cyhSZWZQdHI8U2FmZUJyb3dzaW5nV2FybmluZz4mJik7
CisgICAgdm9pZCBkaWRSZWNlaXZlQXBwQm91bmREb21haW5SZXN1bHQoYm9vbCk7CiAKIHByaXZh
dGU6Ci0gICAgV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5KFJlcGx5JiYsIFNob3VsZEV4cGVj
dFNhZmVCcm93c2luZ1Jlc3VsdCk7CisgICAgV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5KFJl
cGx5JiYsIFNob3VsZEV4cGVjdFNhZmVCcm93c2luZ1Jlc3VsdCwgU2hvdWxkRXhwZWN0QXBwQm91
bmREb21haW5SZXN1bHQpOwogCiAgICAgT3B0aW9uYWw8c3RkOjpwYWlyPFJlZlB0cjxBUEk6Oldl
YnNpdGVQb2xpY2llcz4sIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQ+PiBtX3BvbGljeVJl
c3VsdDsKICAgICBPcHRpb25hbDxSZWZQdHI8U2FmZUJyb3dzaW5nV2FybmluZz4+IG1fc2FmZUJy
b3dzaW5nV2FybmluZzsKKyAgICBPcHRpb25hbDxOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbj4g
bV9pc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluOwogICAgIFJlcGx5IG1fcmVwbHk7CiB9Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJGcmFtZVByb3h5LmNwcCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkZyYW1lUHJveHkuY3BwCmluZGV4IDRkMzJmMDM1
ZjBhNDJkOWNiNmQzYzlkYmM2ZjQyMDkwYzNkYjIyMzUuLjM0NmMwODA1N2UyYjEyZjA2NWIwNDkx
MmQ4ZGYyYzg2MzJiMDk3NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YkZyYW1lUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkZyYW1lUHJv
eHkuY3BwCkBAIC0xOTMsMTQgKzE5MywxNCBAQCB2b2lkIFdlYkZyYW1lUHJveHk6OmRpZENoYW5n
ZVRpdGxlKGNvbnN0IFN0cmluZyYgdGl0bGUpCiAgICAgbV90aXRsZSA9IHRpdGxlOwogfQogCi1X
ZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkmIFdlYkZyYW1lUHJveHk6OnNldFVwUG9saWN5TGlz
dGVuZXJQcm94eShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFBvbGljeUFjdGlvbiwgQVBJOjpXZWJz
aXRlUG9saWNpZXMqLCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBSZWZQdHI8U2FmZUJy
b3dzaW5nV2FybmluZz4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIsIFNob3VsZEV4cGVjdFNhZmVC
cm93c2luZ1Jlc3VsdCBleHBlY3QpCitXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkmIFdlYkZy
YW1lUHJveHk6OnNldFVwUG9saWN5TGlzdGVuZXJQcm94eShDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFBvbGljeUFjdGlvbiwgQVBJOjpXZWJzaXRlUG9saWNpZXMqLCBQcm9jZXNzU3dhcFJlcXVlc3Rl
ZEJ5Q2xpZW50LCBSZWZQdHI8U2FmZUJyb3dzaW5nV2FybmluZz4mJiwgTmF2aWdhdGluZ1RvQXBw
Qm91bmREb21haW4pPiYmIGNvbXBsZXRpb25IYW5kbGVyLCBTaG91bGRFeHBlY3RTYWZlQnJvd3Np
bmdSZXN1bHQgZXhwZWN0U2FmZUJyb3dzaW5nUmVzdWx0LCBTaG91bGRFeHBlY3RBcHBCb3VuZERv
bWFpblJlc3VsdCBleHBlY3RBcHBCb3VuZERvbWFpblJlc3VsdCkKIHsKICAgICBpZiAobV9hY3Rp
dmVMaXN0ZW5lcikKICAgICAgICAgbV9hY3RpdmVMaXN0ZW5lci0+aWdub3JlKCk7Ci0gICAgbV9h
Y3RpdmVMaXN0ZW5lciA9IFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eTo6Y3JlYXRlKFt0aGlz
LCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildIChQb2xpY3lBY3Rpb24gYWN0aW9uLCBBUEk6OldlYnNp
dGVQb2xpY2llcyogcG9saWNpZXMsIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQgcHJvY2Vz
c1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgUmVmUHRyPFNhZmVCcm93c2luZ1dhcm5pbmc+JiYgc2Fm
ZUJyb3dzaW5nV2FybmluZykgbXV0YWJsZSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGFj
dGlvbiwgcG9saWNpZXMsIHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIFdURk1vdmUoc2Fm
ZUJyb3dzaW5nV2FybmluZykpOworICAgIG1fYWN0aXZlTGlzdGVuZXIgPSBXZWJGcmFtZVBvbGlj
eUxpc3RlbmVyUHJveHk6OmNyZWF0ZShbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoUG9s
aWN5QWN0aW9uIGFjdGlvbiwgQVBJOjpXZWJzaXRlUG9saWNpZXMqIHBvbGljaWVzLCBQcm9jZXNz
U3dhcFJlcXVlc3RlZEJ5Q2xpZW50IHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIFJlZlB0
cjxTYWZlQnJvd3NpbmdXYXJuaW5nPiYmIHNhZmVCcm93c2luZ1dhcm5pbmcsIE5hdmlnYXRpbmdU
b0FwcEJvdW5kRG9tYWluIGlzTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4pIG11dGFibGUgewor
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihhY3Rpb24sIHBvbGljaWVzLCBwcm9jZXNzU3dhcFJl
cXVlc3RlZEJ5Q2xpZW50LCBXVEZNb3ZlKHNhZmVCcm93c2luZ1dhcm5pbmcpLCBpc05hdmlnYXRp
bmdUb0FwcEJvdW5kRG9tYWluKTsKICAgICAgICAgbV9hY3RpdmVMaXN0ZW5lciA9IG51bGxwdHI7
Ci0gICAgfSwgZXhwZWN0KTsKKyAgICB9LCBleHBlY3RTYWZlQnJvd3NpbmdSZXN1bHQsIGV4cGVj
dEFwcEJvdW5kRG9tYWluUmVzdWx0KTsKICAgICByZXR1cm4gKm1fYWN0aXZlTGlzdGVuZXI7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkZyYW1lUHJveHkuaCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYkZyYW1lUHJveHkuaAppbmRleCBiZjZkODk2ZDg3
Yjc2MjY1MTEzOGZjMjk4NGYyNTk3MTIwZDMxZjRmLi42MDFmNDA0YTEyYmE4ZDNhM2I1ZGQ5MGU1
ODZkOWE5NTZhNjNhM2NkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJG
cmFtZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViRnJhbWVQcm94eS5o
CkBAIC01Myw4ICs1Myw4IEBAIGNsYXNzIFNhZmVCcm93c2luZ1dhcm5pbmc7CiBjbGFzcyBXZWJD
ZXJ0aWZpY2F0ZUluZm87CiBjbGFzcyBXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHk7CiBjbGFz
cyBXZWJzaXRlRGF0YVN0b3JlOwotZW51bSBjbGFzcyBTaG91bGRFeHBlY3RTYWZlQnJvd3NpbmdS
ZXN1bHQ7Ci1lbnVtIGNsYXNzIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQ7CitlbnVtIGNs
YXNzIFNob3VsZEV4cGVjdFNhZmVCcm93c2luZ1Jlc3VsdCA6IGJvb2w7CitlbnVtIGNsYXNzIFBy
b2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQgOiBib29sOwogc3RydWN0IFdlYnNpdGVQb2xpY2ll
c0RhdGE7CiAKIGNsYXNzIFdlYkZyYW1lUHJveHkgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQ
STo6T2JqZWN0OjpUeXBlOjpGcmFtZT4gewpAQCAtMTIwLDcgKzEyMCw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb24oY29uc3QgVVJMJik7IC8vIGVnLiBhbmNo
b3IgbmF2aWdhdGlvbiwgc2Vzc2lvbiBzdGF0ZSBjaGFuZ2UuCiAgICAgdm9pZCBkaWRDaGFuZ2VU
aXRsZShjb25zdCBTdHJpbmcmKTsKIAotICAgIFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eSYg
c2V0VXBQb2xpY3lMaXN0ZW5lclByb3h5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6
UG9saWN5QWN0aW9uLCBBUEk6OldlYnNpdGVQb2xpY2llcyosIFByb2Nlc3NTd2FwUmVxdWVzdGVk
QnlDbGllbnQsIFJlZlB0cjxTYWZlQnJvd3NpbmdXYXJuaW5nPiYmKT4mJiwgU2hvdWxkRXhwZWN0
U2FmZUJyb3dzaW5nUmVzdWx0KTsKKyAgICBXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkmIHNl
dFVwUG9saWN5TGlzdGVuZXJQcm94eShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OlBv
bGljeUFjdGlvbiwgQVBJOjpXZWJzaXRlUG9saWNpZXMqLCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5
Q2xpZW50LCBSZWZQdHI8U2FmZUJyb3dzaW5nV2FybmluZz4mJiwgTmF2aWdhdGluZ1RvQXBwQm91
bmREb21haW4pPiYmLCBTaG91bGRFeHBlY3RTYWZlQnJvd3NpbmdSZXN1bHQsIFNob3VsZEV4cGVj
dEFwcEJvdW5kRG9tYWluUmVzdWx0KTsKIAogI2lmIEVOQUJMRShDT05URU5UX0ZJTFRFUklORykK
ICAgICB2b2lkIGNvbnRlbnRGaWx0ZXJEaWRCbG9ja0xvYWQoV2ViQ29yZTo6Q29udGVudEZpbHRl
clVuYmxvY2tIYW5kbGVyIGNvbnRlbnRGaWx0ZXJVbmJsb2NrSGFuZGxlcikgeyBtX2NvbnRlbnRG
aWx0ZXJVbmJsb2NrSGFuZGxlciA9IFdURk1vdmUoY29udGVudEZpbHRlclVuYmxvY2tIYW5kbGVy
KTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggMjg3OWVi
YThjZTVhZjc1N2EzYjBhODAyYjA5Yjk3MWVhNTIzNjRiMC4uZmZiZmM0ZmZlNGYwYTVmNTFlNDM5
ODlhYWIwMDdiYTE3MzczNDdlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuY3BwCkBAIC0yNzksNyArMjc5LDYgQEAKICNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQog
I2luY2x1ZGUgPFdlYktpdEFkZGl0aW9ucy9XZWJQYWdlUHJveHlBZGRpdGlvbnMuaD4KICNlbHNl
Ci0jZGVmaW5lIFdFQl9QQUdFX1BST1hZX0FERElUSU9OU19JU0FQUEJPVU5ERE9NQUlOCiAjZGVm
aW5lIFdFQl9QQUdFX1BST1hZX0FERElUSU9OU19TRVRJU05BVklHQVRJTkdUT0FQUEJPVU5ERE9N
QUlOCiAjZW5kaWYKIApAQCAtMzA5NSwyMyArMzA5NCwxMSBAQCBwcml2YXRlOgogICAgIFBvbGlj
eUNoZWNrSWRlbnRpZmllciBtX2lkZW50aWZpZXI7CiB9OwogCi0KLWJvb2wgV2ViUGFnZVByb3h5
Ojppc0FwcEJvdW5kRG9tYWluKGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiBkb21h
aW4pIGNvbnN0Ci17Ci0gICAgV0VCX1BBR0VfUFJPWFlfQURESVRJT05TX0lTQVBQQk9VTkRET01B
SU4KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJQYWdlUHJveHk6OmlzQXBwQm91bmRE
b21haW4oY29uc3QgVVJMJiB1cmwpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlzQXBwQm91bmREb21h
aW4oUmVnaXN0cmFibGVEb21haW4odXJsKSk7Ci19Ci0KLXZvaWQgV2ViUGFnZVByb3h5OjpzZXRJ
c05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKGJvb2wgaXNNYWluRnJhbWUsIGNvbnN0IFVSTCYg
cmVxdWVzdFVSTCkKK3ZvaWQgV2ViUGFnZVByb3h5OjpzZXRJc05hdmlnYXRpbmdUb0FwcEJvdW5k
RG9tYWluKGJvb2wgaXNNYWluRnJhbWUsIGNvbnN0IFVSTCYgcmVxdWVzdFVSTCwgTmF2aWdhdGlu
Z1RvQXBwQm91bmREb21haW4gaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbikKIHsKICAgICBp
ZiAobV9wcmVmZXJlbmNlcy0+aXNJbkFwcEJyb3dzZXJQcml2YWN5RW5hYmxlZCgpICYmIGlzTWFp
bkZyYW1lKSB7CiAgICAgICAgIFdFQl9QQUdFX1BST1hZX0FERElUSU9OU19TRVRJU05BVklHQVRJ
TkdUT0FQUEJPVU5ERE9NQUlOCi0gICAgICAgIGlmICghaXNBcHBCb3VuZERvbWFpbihyZXF1ZXN0
VVJMKSkgeworICAgICAgICBpZiAoaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiA9PSBOYXZp
Z2F0aW5nVG9BcHBCb3VuZERvbWFpbjo6Tm8pIHsKICAgICAgICAgICAgIG1fY29uZmlndXJhdGlv
bi0+c2V0V2ViVmlld0NhdGVnb3J5KFdlYlZpZXdDYXRlZ29yeTo6SW5BcHBCcm93c2VyKTsKICAg
ICAgICAgICAgIG1faXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiA9IE5hdmlnYXRpbmdUb0Fw
cEJvdW5kRG9tYWluOjpObzsKICAgICAgICAgICAgIG1faGFzTmF2aWdhdGVkQXdheUZyb21BcHBC
b3VuZERvbWFpbiA9IE5hdmlnYXRlZEF3YXlGcm9tQXBwQm91bmREb21haW46OlllczsKQEAgLTUw
MTMsOCArNTAwMCw2IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0
aW9uQWN0aW9uKFJlZjxXZWJQcm9jZXNzUHJveHk+JiYgcHJvY2VzCiAgICAgaWYgKG5hdmlnYXRp
b25JRCAmJiAhZnJvbUFQSSkKICAgICAgICAgbV9wYWdlTG9hZFN0YXRlLmNsZWFyUGVuZGluZ0FQ
SVJlcXVlc3QodHJhbnNhY3Rpb24pOwogCi0gICAgc2V0SXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERv
bWFpbihmcmFtZS5pc01haW5GcmFtZSgpLCByZXF1ZXN0LnVybCgpKTsKLQogICAgIGlmICghY2hl
Y2tVUkxSZWNlaXZlZEZyb21DdXJyZW50T3JQcmV2aW91c1dlYlByb2Nlc3MocHJvY2VzcywgcmVx
dWVzdC51cmwoKSkpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChQcm9j
ZXNzLCAiSWdub3JpbmcgcmVxdWVzdCB0byBsb2FkIHRoaXMgbWFpbiByZXNvdXJjZSBiZWNhdXNl
IGl0IGlzIG91dHNpZGUgdGhlIHNhbmRib3giKTsKICAgICAgICAgc2VuZGVyLT5zZW5kKFBvbGlj
eURlY2lzaW9uIHsgc2VuZGVyLT5pZGVudGlmaWVyKCksIGlzTmF2aWdhdGluZ1RvQXBwQm91bmRE
b21haW4oKSwgaGFzTmF2aWdhdGVkQXdheUZyb21BcHBCb3VuZERvbWFpbigpLCBQb2xpY3lBY3Rp
b246Oklnbm9yZSwgMCwgRG93bmxvYWRJRCgpLCBXVEY6Om51bGxvcHQgfSk7CkBAIC01MDcwLDcg
KzUwNTUsMTUgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25B
Y3Rpb24oUmVmPFdlYlByb2Nlc3NQcm94eT4mJiBwcm9jZXMKICAgICBpZiAoIW1fcHJlZmVyZW5j
ZXMtPnNhZmVCcm93c2luZ0VuYWJsZWQoKSkKICAgICAgICAgc2hvdWxkRXhwZWN0U2FmZUJyb3dz
aW5nUmVzdWx0ID0gU2hvdWxkRXhwZWN0U2FmZUJyb3dzaW5nUmVzdWx0OjpObzsKIAotICAgIGF1
dG8gbGlzdGVuZXIgPSBtYWtlUmVmKGZyYW1lLnNldFVwUG9saWN5TGlzdGVuZXJQcm94eShbdGhp
cywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBmcmFtZSA9IG1ha2VSZWYoZnJhbWUp
LCBzZW5kZXIgPSBXVEZNb3ZlKHNlbmRlciksIG5hdmlnYXRpb25dIChQb2xpY3lBY3Rpb24gcG9s
aWN5QWN0aW9uLCBBUEk6OldlYnNpdGVQb2xpY2llcyogcG9saWNpZXMsIFByb2Nlc3NTd2FwUmVx
dWVzdGVkQnlDbGllbnQgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgUmVmUHRyPFNhZmVC
cm93c2luZ1dhcm5pbmc+JiYgc2FmZUJyb3dzaW5nV2FybmluZykgbXV0YWJsZSB7CisgICAgU2hv
dWxkRXhwZWN0QXBwQm91bmREb21haW5SZXN1bHQgc2hvdWxkRXhwZWN0QXBwQm91bmREb21haW5S
ZXN1bHQgPSBTaG91bGRFeHBlY3RBcHBCb3VuZERvbWFpblJlc3VsdDo6Tm87CisjaWYgUExBVEZP
Uk0oQ09DT0EpCisgICAgc2hvdWxkRXhwZWN0QXBwQm91bmREb21haW5SZXN1bHQgPSBTaG91bGRF
eHBlY3RBcHBCb3VuZERvbWFpblJlc3VsdDo6WWVzOworI2VuZGlmCisgICAgCisgICAgYXV0byBs
aXN0ZW5lciA9IG1ha2VSZWYoZnJhbWUuc2V0VXBQb2xpY3lMaXN0ZW5lclByb3h5KFt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGZyYW1lID0gbWFrZVJlZihmcmFtZSksIHNl
bmRlciA9IFdURk1vdmUoc2VuZGVyKSwgbmF2aWdhdGlvbl0gKFBvbGljeUFjdGlvbiBwb2xpY3lB
Y3Rpb24sIEFQSTo6V2Vic2l0ZVBvbGljaWVzKiBwb2xpY2llcywgUHJvY2Vzc1N3YXBSZXF1ZXN0
ZWRCeUNsaWVudCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBSZWZQdHI8U2FmZUJyb3dz
aW5nV2FybmluZz4mJiBzYWZlQnJvd3NpbmdXYXJuaW5nLCBOYXZpZ2F0aW5nVG9BcHBCb3VuZERv
bWFpbiBpc0FwcEJvdW5kRG9tYWluKSBtdXRhYmxlIHsKKworICAgICAgICBpZiAocG9saWN5QWN0
aW9uICE9IFBvbGljeUFjdGlvbjo6SWdub3JlKQorICAgICAgICAgICAgc2V0SXNOYXZpZ2F0aW5n
VG9BcHBCb3VuZERvbWFpbihmcmFtZS0+aXNNYWluRnJhbWUoKSwgbmF2aWdhdGlvbi0+Y3VycmVu
dFJlcXVlc3QoKS51cmwoKSwgaXNBcHBCb3VuZERvbWFpbik7CiAKICAgICAgICAgYXV0byBjb21w
bGV0aW9uSGFuZGxlciA9IFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gcHJvdGVjdGVkVGhpcy5jb3B5
UmVmKCksIGZyYW1lID0gZnJhbWUuY29weVJlZigpLCBzZW5kZXIgPSBXVEZNb3ZlKHNlbmRlciks
IG5hdmlnYXRpb24sIHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIHBvbGljaWVzID0gbWFr
ZVJlZlB0cihwb2xpY2llcyldIChQb2xpY3lBY3Rpb24gcG9saWN5QWN0aW9uKSBtdXRhYmxlIHsK
ICAgICAgICAgICAgIGlmIChmcmFtZS0+aXNNYWluRnJhbWUoKSkgewpAQCAtNTExOCwxMCArNTEx
MSwxMiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlv
bihSZWY8V2ViUHJvY2Vzc1Byb3h5PiYmIHByb2NlcwogICAgICAgICB9CiAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKHBvbGljeUFjdGlvbik7CiAKLSAgICB9LCBzaG91bGRFeHBlY3RTYWZlQnJv
d3NpbmdSZXN1bHQpKTsKKyAgICB9LCBzaG91bGRFeHBlY3RTYWZlQnJvd3NpbmdSZXN1bHQsIHNo
b3VsZEV4cGVjdEFwcEJvdW5kRG9tYWluUmVzdWx0KSk7CiAgICAgaWYgKHNob3VsZEV4cGVjdFNh
ZmVCcm93c2luZ1Jlc3VsdCA9PSBTaG91bGRFeHBlY3RTYWZlQnJvd3NpbmdSZXN1bHQ6OlllcykK
ICAgICAgICAgYmVnaW5TYWZlQnJvd3NpbmdDaGVjayhyZXF1ZXN0LnVybCgpLCBmcmFtZS5pc01h
aW5GcmFtZSgpLCBsaXN0ZW5lcik7Ci0KKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBtX3dlYnNp
dGVEYXRhU3RvcmUtPmJlZ2luQXBwQm91bmREb21haW5DaGVjayhSZWdpc3RyYWJsZURvbWFpbiB7
IHJlcXVlc3QudXJsKCkgfSwgbGlzdGVuZXIpOworI2VuZGlmCiAgICAgQVBJOjpOYXZpZ2F0aW9u
KiBtYWluRnJhbWVOYXZpZ2F0aW9uID0gZnJhbWUuaXNNYWluRnJhbWUoKSA/IG5hdmlnYXRpb24u
Z2V0KCkgOiBudWxscHRyOwogICAgIFdlYkZyYW1lUHJveHkqIG9yaWdpbmF0aW5nRnJhbWUgPSBv
cmlnaW5hdGluZ0ZyYW1lSW5mb0RhdGEuZnJhbWVJRCA/IHByb2Nlc3MtPndlYkZyYW1lKCpvcmln
aW5hdGluZ0ZyYW1lSW5mb0RhdGEuZnJhbWVJRCkgOiBudWxscHRyOwogCkBAIC01MjUxLDcgKzUy
NDYsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9u
KEZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBGcmFtZQogICAgIE1FU1NBR0VfQ0hFQ0sobV9wcm9j
ZXNzLCBmcmFtZSk7CiAgICAgTUVTU0FHRV9DSEVDS19VUkwobV9wcm9jZXNzLCByZXF1ZXN0LnVy
bCgpKTsKIAotICAgIGF1dG8gbGlzdGVuZXIgPSBtYWtlUmVmKGZyYW1lLT5zZXRVcFBvbGljeUxp
c3RlbmVyUHJveHkoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgaWRlbnRp
ZmllciwgbGlzdGVuZXJJRCwgZnJhbWVJRF0gKFBvbGljeUFjdGlvbiBwb2xpY3lBY3Rpb24sIEFQ
STo6V2Vic2l0ZVBvbGljaWVzKiwgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCBwcm9jZXNz
U3dhcFJlcXVlc3RlZEJ5Q2xpZW50LCBSZWZQdHI8U2FmZUJyb3dzaW5nV2FybmluZz4mJiBzYWZl
QnJvd3NpbmdXYXJuaW5nKSBtdXRhYmxlIHsKKyAgICBhdXRvIGxpc3RlbmVyID0gbWFrZVJlZihm
cmFtZS0+c2V0VXBQb2xpY3lMaXN0ZW5lclByb3h5KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFr
ZVJlZigqdGhpcyksIGlkZW50aWZpZXIsIGxpc3RlbmVySUQsIGZyYW1lSURdIChQb2xpY3lBY3Rp
b24gcG9saWN5QWN0aW9uLCBBUEk6OldlYnNpdGVQb2xpY2llcyosIFByb2Nlc3NTd2FwUmVxdWVz
dGVkQnlDbGllbnQgcHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgUmVmUHRyPFNhZmVCcm93
c2luZ1dhcm5pbmc+JiYgc2FmZUJyb3dzaW5nV2FybmluZywgTmF2aWdhdGluZ1RvQXBwQm91bmRE
b21haW4gaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbikgbXV0YWJsZSB7CiAgICAgICAgIC8v
IEZJWE1FOiBBc3NlcnQgdGhlIEFQSTo6V2Vic2l0ZVBvbGljaWVzKiBpcyBudWxscHRyIGhlcmUg
b25jZSBjbGllbnRzIG9mIFdLRnJhbWVQb2xpY3lMaXN0ZW5lclVzZVdpdGhQb2xpY2llcyBnbyBh
d2F5LgogICAgICAgICBSRUxFQVNFX0FTU0VSVChwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50
ID09IFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQ6Ok5vKTsKICAgICAgICAgQVNTRVJUX1VO
VVNFRChzYWZlQnJvd3NpbmdXYXJuaW5nLCAhc2FmZUJyb3dzaW5nV2FybmluZyk7CkBAIC01MjYx
LDcgKzUyNTYsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGVjaWRlUG9saWN5Rm9yTmV3V2luZG93
QWN0aW9uKEZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBGcmFtZQogICAgICAgICB9KTsKIAogICAg
ICAgICByZWNlaXZlZFBvbGljeURlY2lzaW9uKHBvbGljeUFjdGlvbiwgbnVsbHB0ciwgV1RGOjpu
dWxsb3B0LCBXVEZNb3ZlKHNlbmRlcikpOwotICAgIH0sIFNob3VsZEV4cGVjdFNhZmVCcm93c2lu
Z1Jlc3VsdDo6Tm8pKTsKKyAgICB9LCBTaG91bGRFeHBlY3RTYWZlQnJvd3NpbmdSZXN1bHQ6Ok5v
LCBTaG91bGRFeHBlY3RBcHBCb3VuZERvbWFpblJlc3VsdDo6Tm8pKTsKIAogICAgIGlmIChtX3Bv
bGljeUNsaWVudCkKICAgICAgICAgbV9wb2xpY3lDbGllbnQtPmRlY2lkZVBvbGljeUZvck5ld1dp
bmRvd0FjdGlvbigqdGhpcywgKmZyYW1lLCBuYXZpZ2F0aW9uQWN0aW9uRGF0YSwgcmVxdWVzdCwg
ZnJhbWVOYW1lLCBXVEZNb3ZlKGxpc3RlbmVyKSwgbV9wcm9jZXNzLT50cmFuc2Zvcm1IYW5kbGVz
VG9PYmplY3RzKHVzZXJEYXRhLm9iamVjdCgpKS5nZXQoKSk7CkBAIC01Mjk3LDEwICs1MjkyLDkg
QEAgdm9pZCBXZWJQYWdlUHJveHk6OmRlY2lkZVBvbGljeUZvclJlc3BvbnNlU2hhcmVkKFJlZjxX
ZWJQcm9jZXNzUHJveHk+JiYgcHJvY2VzcywKICAgICBNRVNTQUdFX0NIRUNLKHByb2Nlc3MsIGZy
YW1lKTsKICAgICBNRVNTQUdFX0NIRUNLX1VSTChwcm9jZXNzLCByZXF1ZXN0LnVybCgpKTsKICAg
ICBNRVNTQUdFX0NIRUNLX1VSTChwcm9jZXNzLCByZXNwb25zZS51cmwoKSk7Ci0KICAgICBSZWZQ
dHI8QVBJOjpOYXZpZ2F0aW9uPiBuYXZpZ2F0aW9uID0gbmF2aWdhdGlvbklEID8gbV9uYXZpZ2F0
aW9uU3RhdGUtPm5hdmlnYXRpb24obmF2aWdhdGlvbklEKSA6IG51bGxwdHI7CiAgICAgYXV0byBs
aXN0ZW5lciA9IG1ha2VSZWYoZnJhbWUtPnNldFVwUG9saWN5TGlzdGVuZXJQcm94eShbdGhpcywg
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCB3ZWJQYWdlSUQsIGZyYW1lSUQsIGlkZW50
aWZpZXIsIGxpc3RlbmVySUQsIG5hdmlnYXRpb24gPSBXVEZNb3ZlKG5hdmlnYXRpb24pLAotICAg
ICAgICBwcm9jZXNzID0gcHJvY2Vzcy5jb3B5UmVmKCldIChQb2xpY3lBY3Rpb24gcG9saWN5QWN0
aW9uLCBBUEk6OldlYnNpdGVQb2xpY2llcyosIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQg
cHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCwgUmVmUHRyPFNhZmVCcm93c2luZ1dhcm5pbmc+
JiYgc2FmZUJyb3dzaW5nV2FybmluZykgbXV0YWJsZSB7CisgICAgICAgIHByb2Nlc3MgPSBwcm9j
ZXNzLmNvcHlSZWYoKV0gKFBvbGljeUFjdGlvbiBwb2xpY3lBY3Rpb24sIEFQSTo6V2Vic2l0ZVBv
bGljaWVzKiwgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCBwcm9jZXNzU3dhcFJlcXVlc3Rl
ZEJ5Q2xpZW50LCBSZWZQdHI8U2FmZUJyb3dzaW5nV2FybmluZz4mJiBzYWZlQnJvd3NpbmdXYXJu
aW5nLCBOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9t
YWluKSBtdXRhYmxlIHsKICAgICAgICAgLy8gRklYTUU6IEFzc2VydCB0aGUgQVBJOjpXZWJzaXRl
UG9saWNpZXMqIGlzIG51bGxwdHIgaGVyZSBvbmNlIGNsaWVudHMgb2YgV0tGcmFtZVBvbGljeUxp
c3RlbmVyVXNlV2l0aFBvbGljaWVzIGdvIGF3YXkuCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHBy
b2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQgPT0gUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVu
dDo6Tm8pOwogICAgICAgICBBU1NFUlRfVU5VU0VEKHNhZmVCcm93c2luZ1dhcm5pbmcsICFzYWZl
QnJvd3NpbmdXYXJuaW5nKTsKQEAgLTUzMTAsOCArNTMwNCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5
OjpkZWNpZGVQb2xpY3lGb3JSZXNwb25zZVNoYXJlZChSZWY8V2ViUHJvY2Vzc1Byb3h5PiYmIHBy
b2Nlc3MsCiAgICAgICAgIH0pOwogICAgICAgICAKICAgICAgICAgcmVjZWl2ZWRQb2xpY3lEZWNp
c2lvbihwb2xpY3lBY3Rpb24sIG5hdmlnYXRpb24uZ2V0KCksIFdURjo6bnVsbG9wdCwgV1RGTW92
ZShzZW5kZXIpKTsKLSAgICB9LCBTaG91bGRFeHBlY3RTYWZlQnJvd3NpbmdSZXN1bHQ6Ok5vKSk7
Ci0KKyAgICB9LCBTaG91bGRFeHBlY3RTYWZlQnJvd3NpbmdSZXN1bHQ6Ok5vLCBTaG91bGRFeHBl
Y3RBcHBCb3VuZERvbWFpblJlc3VsdDo6Tm8pKTsKICAgICBpZiAobV9wb2xpY3lDbGllbnQpCiAg
ICAgICAgIG1fcG9saWN5Q2xpZW50LT5kZWNpZGVQb2xpY3lGb3JSZXNwb25zZSgqdGhpcywgKmZy
YW1lLCByZXNwb25zZSwgcmVxdWVzdCwgY2FuU2hvd01JTUVUeXBlLCBXVEZNb3ZlKGxpc3RlbmVy
KSwgcHJvY2Vzcy0+dHJhbnNmb3JtSGFuZGxlc1RvT2JqZWN0cyh1c2VyRGF0YS5vYmplY3QoKSku
Z2V0KCkpOwogICAgIGVsc2UgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApp
bmRleCBjNjhlNTc3MTM1ZDQ3M2IwMzIwYWJlNmQ4ZGYzYmNhOTJjZmRiYWNjLi5iNzc5ZWIyMDAz
MGMzNzhjNjA0ZmY0YjFmMzc4YmM1MTljYmJlN2ZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuaApAQCAtMzQ1LDcgKzM0NSw3IEBAIHN0cnVjdCBVUkxTY2hlbWVUYXNrUGFy
YW1ldGVyczsKIHN0cnVjdCBVc2VyTWVzc2FnZTsKIAogZW51bSBjbGFzcyBOZWdvdGlhdGVkTGVn
YWN5VExTIDogYm9vbDsKLWVudW0gY2xhc3MgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudDsK
K2VudW0gY2xhc3MgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCA6IGJvb2w7CiBlbnVtIGNs
YXNzIFVuZG9PclJlZG8gOiBib29sOwogZW51bSBjbGFzcyBXZWJDb250ZW50TW9kZSA6IHVpbnQ4
X3Q7CiAKQEAgLTIyNjIsOSArMjI2Miw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCB0cnlDbG9zZVRp
bWVkT3V0KCk7CiAgICAgdm9pZCBtYWtlU3RvcmFnZVNwYWNlUmVxdWVzdChXZWJDb3JlOjpGcmFt
ZUlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgb3JpZ2luSWRlbnRpZmllciwgY29uc3QgU3RyaW5n
JiBkYXRhYmFzZU5hbWUsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVpbnQ2NF90IGN1cnJl
bnRRdW90YSwgdWludDY0X3QgY3VycmVudE9yaWdpblVzYWdlLCB1aW50NjRfdCBjdXJyZW50RGF0
YWJhc2VVc2FnZSwgdWludDY0X3QgZXhwZWN0ZWRVc2FnZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCh1aW50NjRfdCk+JiYpOwogICAgICAgICAKLSAgICBib29sIGlzQXBwQm91bmREb21haW4oY29u
c3QgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4mKSBjb25zdDsKLSAgICBib29sIGlzQXBwQm91
bmREb21haW4oY29uc3QgVVJMJikgY29uc3Q7Ci0gICAgdm9pZCBzZXRJc05hdmlnYXRpbmdUb0Fw
cEJvdW5kRG9tYWluKGJvb2wgaXNNYWluRnJhbWUsIGNvbnN0IFVSTCYpOworICAgIHZvaWQgc2V0
SXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbihib29sIGlzTWFpbkZyYW1lLCBjb25zdCBVUkwm
LCBOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbik7CiAgICAgTmF2aWdhdGluZ1RvQXBwQm91bmRE
b21haW4gaXNOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbigpIGNvbnN0IHsgcmV0dXJuIG1faXNO
YXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbjsgfQogICAgIE5hdmlnYXRlZEF3YXlGcm9tQXBwQm91
bmREb21haW4gaGFzTmF2aWdhdGVkQXdheUZyb21BcHBCb3VuZERvbWFpbigpIGNvbnN0IHsgcmV0
dXJuIG1faGFzTmF2aWdhdGVkQXdheUZyb21BcHBCb3VuZERvbWFpbjsgfQogICAgICAgICAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmggYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCmluZGV4IDUxNTViYThiNGEwMzYy
N2RkZjVkNTZkMzIzNzMxZWViN2NjMDkwYTAuLjEwNjhmNjI1NTM4Mzk5Y2JlODY5NmY4YmMwMThm
MjA4MDQ3MDJjYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nl
c3NQb29sLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaApA
QCAtMTIzLDcgKzEyMyw3IEBAIGludCB3ZWJQcm9jZXNzTGF0ZW5jeVFPUygpOwogaW50IHdlYlBy
b2Nlc3NUaHJvdWdocHV0UU9TKCk7CiAjZW5kaWYKIAotZW51bSBjbGFzcyBQcm9jZXNzU3dhcFJl
cXVlc3RlZEJ5Q2xpZW50OworZW51bSBjbGFzcyBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50
IDogYm9vbDsKIAogY2xhc3MgV2ViUHJvY2Vzc1Bvb2wgZmluYWwgOiBwdWJsaWMgQVBJOjpPYmpl
Y3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpQcm9jZXNzUG9vbD4sIHB1YmxpYyBDYW5NYWtlV2Vh
a1B0cjxXZWJQcm9jZXNzUG9vbD4sIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgewogcHVi
bGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvQ29j
b2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
c2l0ZURhdGEvQ29jb2EvV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tCmluZGV4IGRiZDMwZDA0MzA3
ZDE4MTM5NTlkOTUzYzI1NDUxN2Y3ZTkyMWQxYWEuLmVjYzc3ZTNkY2NlMjMyMDU0MzRiYjA4YWU0
ZjEzMWU3ZDZjZmI0MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNp
dGVEYXRhL0NvY29hL1dlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9Db2NvYS9XZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0KQEAg
LTI5LDYgKzI5LDcgQEAKICNpbXBvcnQgIkNvb2tpZVN0b3JhZ2VVdGlsc0NGLmgiCiAjaW1wb3J0
ICJTYW5kYm94VXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJTdG9yYWdlTWFuYWdlci5oIgorI2ltcG9y
dCAiV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5LmgiCiAjaW1wb3J0ICJXZWJQcmVmZXJlbmNl
c0tleXMuaCIKICNpbXBvcnQgIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oIgogI2lt
cG9ydCAiV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaCIKQEAgLTQ0LDYgKzQ1LDEyIEBACiAj
aW1wb3J0IDx3dGYvVVJMLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAK
KyNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQorI2luY2x1ZGUgPFdlYktpdEFkZGl0aW9ucy9X
ZWJzaXRlRGF0YVN0b3JlQWRkaXRpb25zLmg+CisjZWxzZQorI2RlZmluZSBXRUJTSVRFX0RBVEFf
U1RPUkVfQURESVRJT05TCisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAjaW1w
b3J0IDxVSUtpdC9VSUFwcGxpY2F0aW9uLmg+CiAjaW1wb3J0IDxwYWwvaW9zL01hbmFnZWRDb25m
aWd1cmF0aW9uU29mdExpbmsuaD4KQEAgLTYxLDYgKzY4LDE0IEBAIHN0YXRpYyBIYXNoU2V0PFdl
YnNpdGVEYXRhU3RvcmUqPiYgZGF0YVN0b3JlcygpCiAKIHN0YXRpYyBOU1N0cmluZyAqIGNvbnN0
IFdlYktpdE5ldHdvcmtMb2FkVGhyb3R0bGVMYXRlbmN5TWlsbGlzZWNvbmRzRGVmYXVsdHNLZXkg
PSBAIldlYktpdE5ldHdvcmtMb2FkVGhyb3R0bGVMYXRlbmN5TWlsbGlzZWNvbmRzIjsKIAorc3Rh
dGljIFdvcmtRdWV1ZSYgYXBwQm91bmREb21haW5RdWV1ZSgpCit7CisgICAgc3RhdGljIGF1dG8m
IHF1ZXVlID0gV29ya1F1ZXVlOjpjcmVhdGUoImNvbS5hcHBsZS5XZWJLaXQuQXBwQm91bmREb21h
aW5zIiwgV29ya1F1ZXVlOjpUeXBlOjpTZXJpYWwpLmxlYWtSZWYoKTsKKyAgICByZXR1cm4gcXVl
dWU7Cit9CisKK3N0YXRpYyBzdGQ6OmF0b21pYzxib29sPiBoYXNJbml0aWFsaXplZEFwcEJvdW5k
RG9tYWlucyA9IGZhbHNlOworCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykK
IFdlYkNvcmU6OlRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUgV2Vic2l0ZURhdGFTdG9yZTo6
dGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSgpIGNvbnN0CiB7CkBAIC0yNDQsNiArMjU5LDgg
QEAgdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpwbGF0Zm9ybUluaXRpYWxpemUoKQogewogICAgIEFT
U0VSVCghZGF0YVN0b3JlcygpLmNvbnRhaW5zKHRoaXMpKTsKICAgICBkYXRhU3RvcmVzKCkuYWRk
KHRoaXMpOworCisgICAgaW5pdGlhbGl6ZUFwcEJvdW5kRG9tYWlucygpOwogfQogCiB2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OnBsYXRmb3JtRGVzdHJveSgpCkBAIC00MTksNCArNDM2LDc1IEBAIFdU
Rjo6U3RyaW5nIFdlYnNpdGVEYXRhU3RvcmU6OndlYnNpdGVEYXRhRGlyZWN0b3J5RmlsZVN5c3Rl
bVJlcHJlc2VudGF0aW9uKGNvbnN0CiAgICAgcmV0dXJuIHVybC5hYnNvbHV0ZVVSTC5wYXRoLmZp
bGVTeXN0ZW1SZXByZXNlbnRhdGlvbjsKIH0KIAorc3RhdGljIEhhc2hTZXQ8V2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW4+JiBhcHBCb3VuZERvbWFpbnMoKQoreworICAgIEFTU0VSVChSdW5Mb29w
Ojppc01haW4oKSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8V2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW4+PiBhcHBCb3VuZERvbWFpbnM7CisgICAgcmV0dXJuIGFwcEJvdW5k
RG9tYWluczsKK30KKwordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjppbml0aWFsaXplQXBwQm91bmRE
b21haW5zKCkKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKGhh
c0luaXRpYWxpemVkQXBwQm91bmREb21haW5zKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
c3RhdGljIGNvbnN0IGF1dG8gbWF4QXBwQm91bmREb21haW5Db3VudCA9IDEwOworICAgIAorICAg
IGFwcEJvdW5kRG9tYWluUXVldWUoKS5kaXNwYXRjaChbXSAoKSBtdXRhYmxlIHsKKyAgICAgICAg
aWYgKGhhc0luaXRpYWxpemVkQXBwQm91bmREb21haW5zKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAKKyAgICAgICAgTlNBcnJheTxOU1N0cmluZyAqPiAqZG9tYWlucyA9IFtbTlNCdW5k
bGUgbWFpbkJ1bmRsZV0gb2JqZWN0Rm9ySW5mb0RpY3Rpb25hcnlLZXk6QCJXS0FwcEJvdW5kRG9t
YWlucyJdOworICAgICAgICAKKyAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtkb21h
aW5zID0gcmV0YWluUHRyKGRvbWFpbnMpXSB7CisgICAgICAgICAgICBmb3IgKE5TU3RyaW5nICpk
b21haW4gaW4gZG9tYWlucy5nZXQoKSkgeworICAgICAgICAgICAgICAgIFVSTCB1cmwgeyBVUkwo
KSwgZG9tYWluIH07CisgICAgICAgICAgICAgICAgaWYgKCF1cmwuaXNWYWxpZCgpKQorICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiBhcHBCb3VuZERvbWFpbiB7IHVybCB9OworICAgICAgICAgICAgICAgIGlmIChh
cHBCb3VuZERvbWFpbi5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgIGFwcEJvdW5kRG9tYWlucygpLmFkZChhcHBCb3VuZERvbWFpbik7Cisg
ICAgICAgICAgICAgICAgaWYgKGFwcEJvdW5kRG9tYWlucygpLnNpemUoKSA+PSBtYXhBcHBCb3Vu
ZERvbWFpbkNvdW50KQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIFdFQlNJVEVfREFUQV9TVE9SRV9BRERJVElPTlMKKyAgICAgICAgICAgIGhh
c0luaXRpYWxpemVkQXBwQm91bmREb21haW5zID0gdHJ1ZTsKKyAgICAgICAgfSk7CisgICAgfSk7
Cit9CisKK3ZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6ZW5zdXJlQXBwQm91bmREb21haW5zKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgSGFzaFNldDxXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
bj4mKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgY29uc3QKK3sKKyAgICBpZiAoaGFzSW5pdGlhbGl6
ZWRBcHBCb3VuZERvbWFpbnMpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoYXBwQm91bmRE
b21haW5zKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXBwQm91bmREb21haW5R
dWV1ZSgpLmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxl
IHsKKyAgICAgICAgICAgIEFTU0VSVChoYXNJbml0aWFsaXplZEFwcEJvdW5kRG9tYWlucyk7Cisg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihhcHBCb3VuZERvbWFpbnMoKSk7CisgICAgICAg
IH0pOworICAgIH0pOworfQorCit2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OmJlZ2luQXBwQm91bmRE
b21haW5DaGVjayhXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYmIGRvbWFpbiwgV2ViRnJhbWVQ
b2xpY3lMaXN0ZW5lclByb3h5JiBsaXN0ZW5lcikKK3sKKyAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOworCisgICAgZW5zdXJlQXBwQm91bmREb21haW5zKFtkb21haW4gPSBXVEZNb3ZlKGRv
bWFpbiksIGxpc3RlbmVyID0gbWFrZVJlZihsaXN0ZW5lcildIChhdXRvJiBkb21haW5zKSBtdXRh
YmxlIHsKKyAgICAgICAgbGlzdGVuZXItPmRpZFJlY2VpdmVBcHBCb3VuZERvbWFpblJlc3VsdChk
b21haW5zLmNvbnRhaW5zKGRvbWFpbikpOworICAgIH0pOworfQorCit2b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OmFwcEJvdW5kRG9tYWluc0ZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChj
b25zdCBIYXNoU2V0PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiYpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKSBjb25zdAoreworICAgIGVuc3VyZUFwcEJvdW5kRG9tYWlucyhbY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGF1dG8mIGRvbWFpbnMpIG11dGFi
bGUgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihkb21haW5zKTsKKyAgICB9KTsKK30KKwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0
ZURhdGFTdG9yZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0
ZURhdGFTdG9yZS5oCmluZGV4IDU2YWYzZjk5NzYxZjQ4Yzc4YzMzMDJhMzJkYzNhNTU0YjFlZWM4
YWEuLmFmMmE5ZWNhYjczZjQzYTliNDJkNDE4YTdhNGY0NTNlY2UwNjYzMzEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3Jl
LmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJMb2NhbFN0b3JhZ2VEYXRhYmFzZVRyYWNr
ZXIuaCIKICNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVycy5oIgogI2lu
Y2x1ZGUgIldlYkRldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzQ29udHJvbGxlci5oIgor
I2luY2x1ZGUgIldlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eS5oIgogI2luY2x1ZGUgIldlYlBh
Z2VQcm94eUlkZW50aWZpZXIuaCIKICNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YVN0b3JlQ2xpZW50LmgiCkBAIC0yODIsNyAr
MjgzLDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIGhhc0FwcEJvdW5kU2Vzc2lvbihDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGJvb2wpPiYmKSBjb25zdDsKICAgICB2b2lkIHNldEluQXBwQnJvd3NlclBy
aXZhY3lFbmFibGVkKGJvb2wgZW5hYmxlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsK
IAorICAgIHZvaWQgYmVnaW5BcHBCb3VuZERvbWFpbkNoZWNrKFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluJiYsIFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eSYpOworICAgIHZvaWQgYXBwQm91
bmREb21haW5zRm9yVGVzdGluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEhhc2hTZXQ8
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+Jik+JiYpIGNvbnN0OworICAgIHZvaWQgZW5zdXJl
QXBwQm91bmREb21haW5zKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgSGFzaFNldDxXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbj4mKT4mJikgY29uc3Q7CisKIHByaXZhdGU6CisgICAgdm9p
ZCBpbml0aWFsaXplQXBwQm91bmREb21haW5zKCk7CiAgICAgdm9pZCBmZXRjaERhdGFBbmRBcHBs
eShPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hP
cHRpb24+LCBSZWZQdHI8V29ya1F1ZXVlPiYmLCBGdW5jdGlvbjx2b2lkKFZlY3RvcjxXZWJzaXRl
RGF0YVJlY29yZD4pPiYmIGFwcGx5KTsKIAogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplKCk7
CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMzY0
NDlmMjQ1NGE2MGZkOWQ3OTMwMGRkMjJiMmZhNWE0Njk0YThjNS4uNjAyZTE1NWZmOWEzNTE1M2Q2
YTgwYzgxYmEwMTIyNTVhMDNjOTY2YyAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBi
L1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDIwLTAzLTA2ICBLYXRlIENoZW5l
eSAgPGthdGhlcmluZV9jaGVuZXlAYXBwbGUuY29tPgorCisgICAgICAgIFVJUHJvY2VzcyBuZWVk
cyBtZWNoYW5pc20gdG8gc3BlY2lmeSBBcHBCb3VuZCBkb21haW5zCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDg1MjgKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzU5OTgwMzQwPgorCisgICAgICAgIFJldmlld2VkIGJ5IEJyZW50IEZ1bGdoYW0uCisK
KyAgICAgICAgQWRkZWQgdGVzdCBhcHAtYm91bmQgZG9tYWlucyB0byB0aGUgcGxpc3QgYW5kIHRl
c3RlZCB0aGF0IHRoZSBkb21haW5zCisgICAgICAgIGFyZSBwcm9wZXJseSBzdG9yZWQgaW4gdGhl
IHdlYnNpdGUgZGF0YSBzdG9yZSBhZnRlciBhIG5hdmlnYXRpb24uCisKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL0luZm8ucGxpc3Q6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9JbkFwcEJyb3dzZXJQcml2YWN5Lm1tOgorICAgICAgICAoVEVTVCk6CisKIDIwMjAt
MDMtMDYgIExhdXJvIE1vdXJhIDxsbW91cmFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbV1BFXVtX
ZWJEcml2ZXJdIE1pbmlCcm93c2VyIHNob3VsZCByZWFjdCB0byBjbG9zZSBzZXNzaW9uIGNvbW1h
bmRzCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL0luZm8ucGxpc3QgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL0luZm8ucGxpc3QKaW5kZXggNDIxNmI2ZDcxMzNjZjFhZDczN2Y4ZDYyNWM1
MzJhYTkyYTFkODExOC4uOTg2M2YzMzcyYTVmZjhkZDg0MmIxZTA3YzQzMWE0Nzg1YmM0NmJkMCAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9JbmZvLnBsaXN0CisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvSW5mby5wbGlzdApAQCAtMiw2ICsyLDI1IEBACiA8IURPQ1RZUEUgcGxpc3Qg
UFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNv
bS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KIDxwbGlzdCB2ZXJzaW9uPSIxLjAiPgogPGRp
Y3Q+CisJPGtleT5XS0FwcEJvdW5kRG9tYWluczwva2V5PgorCTxhcnJheT4KKwkJPHN0cmluZz50
ZXN0RG9tYWluMTwvc3RyaW5nPgorCQk8c3RyaW5nPmh0dHBzOi8vc3ViLmRvbWFpbi53ZWJraXQu
b3JnL3JvYWQvdG8vbm93aGVyZS88L3N0cmluZz4KKwkJPHN0cmluZz5odHRwczovL3dlYmtpdC5v
cmc8L3N0cmluZz4KKwkJPHN0cmluZz5odHRwczovL2xvY2FsaG9zdDo4MDAwPC9zdHJpbmc+CisJ
CTxzdHJpbmc+aHR0cDovL2xvY2FsaG9zdC9yb2FkL3RvL25vd2hlcmUvPC9zdHJpbmc+CisJCTxz
dHJpbmc+ZmlsZTovLy9zb21lL2ZpbGU8L3N0cmluZz4KKwkJPHN0cmluZz4xMjcuMC4wLjE8L3N0
cmluZz4KKwkJPHN0cmluZz48L3N0cmluZz4KKwkJPHN0cmluZz4gICA8L3N0cmluZz4KKwkJPHN0
cmluZz5odHRwczovL3N1Yi5kb21haW4ud2Via2l0Lm9yZzwvc3RyaW5nPgorCQk8c3RyaW5nPmh0
dHBzOi8vd3d3LmFwcGxlLmNvbS88L3N0cmluZz4KKwkJPHN0cmluZz5odHRwczovL3dlYmtpdC5v
cmc8L3N0cmluZz4KKwkJPHN0cmluZz5odHRwczovL3d3dy5hcHBsZS5jb20vaXBob25lLzwvc3Ry
aW5nPgorCQk8c3RyaW5nPmh0dHA6Ly93d3cuZXhhbXBsZS5jb20vPC9zdHJpbmc+CisJCTxzdHJp
bmc+aHR0cDovL2Jhci5jb20vPC9zdHJpbmc+CisJCTxzdHJpbmc+aHR0cDovL2Zvby5jb20vPC9z
dHJpbmc+CisJPC9hcnJheT4KIAk8a2V5PkNGQnVuZGxlTmFtZTwva2V5PgogCTxzdHJpbmc+JHtQ
Uk9EVUNUX05BTUV9PC9zdHJpbmc+CiAJPGtleT5DRkJ1bmRsZUlkZW50aWZpZXI8L2tleT4KZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5BcHBCcm93
c2VyUHJpdmFjeS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvSW5B
cHBCcm93c2VyUHJpdmFjeS5tbQppbmRleCA3OWU0NTFlMzU1YzJkODgxNTQ1NTE3OTEyNGQ3MDcx
MTg4Mjc0MDgzLi41OWQzN2IxYjIxZmJhZmQ5ZTExYzZiZWM2MDM2ZjhlNjhkMTRlN2M0IDEwMDY0
NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0luQXBwQnJvd3Nl
clByaXZhY3kubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9J
bkFwcEJyb3dzZXJQcml2YWN5Lm1tCkBAIC0yOSwxMyArMjksMTcgQEAKICNpbXBvcnQgIlRlc3RO
YXZpZ2F0aW9uRGVsZWdhdGUuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKICNpbXBvcnQg
IldLV2ViVmlld0NvbmZpZ3VyYXRpb25FeHRyYXMuaCIKKyNpbXBvcnQgPFdlYkNvcmUvUmVnaXN0
cmFibGVEb21haW4uaD4KKyNpbXBvcnQgPFdlYkNvcmUvUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tz
Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaD4KICNpbXBvcnQgPFdl
YktpdC9XS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9X
S1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIAorc3RhdGljIGJvb2wgaXNEb25lOworCiAjaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykK
IAotc3RhdGljIGJvb2wgaXNEb25lOwogc3RhdGljIE5TU3RyaW5nICogY29uc3QgdXNlclNjcmlw
dFNvdXJjZSA9IEAid2luZG93LndrVXNlclNjcmlwdEluamVjdGVkID0gdHJ1ZSI7CiAKIEBpbnRl
cmZhY2UgVGVzdEluQXBwQnJvd3NlclNjcmlwdE1lc3NhZ2VIYW5kbGVyIDogTlNPYmplY3QgPFdL
U2NyaXB0TWVzc2FnZUhhbmRsZXI+CkBAIC01MCw3ICs1NCw3IEBAIC0gKHZvaWQpdXNlckNvbnRl
bnRDb250cm9sbGVyOihXS1VzZXJDb250ZW50Q29udHJvbGxlciAqKXVzZXJDb250ZW50Q29udHJv
bGxlciBkCiAKIEBlbmQKIAotVEVTVChXZWJLaXQsIE5vbkFwcEJvdW5kRG9tYWluRmFpbGVkVXNl
clNjcmlwdHMpCitURVNUKEluQXBwQnJvd3NlclByaXZhY3ksIE5vbkFwcEJvdW5kRG9tYWluRmFp
bGVkVXNlclNjcmlwdHMpCiB7CiAgICAgYXV0byBtZXNzYWdlSGFuZGxlciA9IGFkb3B0TlMoW1tU
ZXN0SW5BcHBCcm93c2VyU2NyaXB0TWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRdKTsKICAgICBh
dXRvIHVzZXJTY3JpcHQgPSBhZG9wdE5TKFtbV0tVc2VyU2NyaXB0IGFsbG9jXSBpbml0V2l0aFNv
dXJjZTp1c2VyU2NyaXB0U291cmNlIGluamVjdGlvblRpbWU6V0tVc2VyU2NyaXB0SW5qZWN0aW9u
VGltZUF0RG9jdW1lbnRTdGFydCBmb3JNYWluRnJhbWVPbmx5OllFU10pOwpAQCAtOTUsNyArOTks
NyBAQCBURVNUKFdlYktpdCwgTm9uQXBwQm91bmREb21haW5GYWlsZWRVc2VyU2NyaXB0cykKICAg
ICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmlzRG9uZSk7CiB9CiAKLVRFU1QoV2ViS2l0LCBO
b25BcHBCb3VuZERvbWFpbkZhaWxlZFVzZXJBZ2VudFNjcmlwdHMpCitURVNUKEluQXBwQnJvd3Nl
clByaXZhY3ksIE5vbkFwcEJvdW5kRG9tYWluRmFpbGVkVXNlckFnZW50U2NyaXB0cykKIHsKICAg
ICBXS1dlYlZpZXdDb25maWd1cmF0aW9uICpjb25maWd1cmF0aW9uID0gW1dLV2ViVmlld0NvbmZp
Z3VyYXRpb24gX3Rlc3RfY29uZmlndXJhdGlvbldpdGhUZXN0UGx1Z0luQ2xhc3NOYW1lOkAiV2Vi
UHJvY2Vzc1BsdWdJbldpdGhJbnRlcm5hbHMiIGNvbmZpZ3VyZUpTQ0ZvclRlc3Rpbmc6WUVTXTsK
ICAgICBbW2NvbmZpZ3VyYXRpb24gcHJlZmVyZW5jZXNdIF9zZXRJbkFwcEJyb3dzZXJQcml2YWN5
RW5hYmxlZDpOT107CkBAIC0xMzIsNyArMTM2LDcgQEAgVEVTVChXZWJLaXQsIE5vbkFwcEJvdW5k
RG9tYWluRmFpbGVkVXNlckFnZW50U2NyaXB0cykKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpy
dW4oJmlzRG9uZSk7CiB9CiAKLVRFU1QoV2ViS2l0LCBTd2FwQmFja1RvQXBwQm91bmRSZWplY3Rz
VXNlclNjcmlwdCkKK1RFU1QoSW5BcHBCcm93c2VyUHJpdmFjeSwgU3dhcEJhY2tUb0FwcEJvdW5k
UmVqZWN0c1VzZXJTY3JpcHQpCiB7CiAgICAgYXV0byBtZXNzYWdlSGFuZGxlciA9IGFkb3B0TlMo
W1tUZXN0SW5BcHBCcm93c2VyU2NyaXB0TWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRdKTsKICAg
ICBhdXRvIHVzZXJTY3JpcHQgPSBhZG9wdE5TKFtbV0tVc2VyU2NyaXB0IGFsbG9jXSBpbml0V2l0
aFNvdXJjZTp1c2VyU2NyaXB0U291cmNlIGluamVjdGlvblRpbWU6V0tVc2VyU2NyaXB0SW5qZWN0
aW9uVGltZUF0RG9jdW1lbnRTdGFydCBmb3JNYWluRnJhbWVPbmx5OllFU10pOwpAQCAtMTc2LDMg
KzE4MCwyMiBAQCBURVNUKFdlYktpdCwgU3dhcEJhY2tUb0FwcEJvdW5kUmVqZWN0c1VzZXJTY3Jp
cHQpCiB9CiAKICNlbmRpZiAvLyBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQorCitURVNUKEluQXBw
QnJvd3NlclByaXZhY3ksIEFwcEJvdW5kRG9tYWlucykKK3sKKyAgICBpc0RvbmUgPSBmYWxzZTsK
KyAgICBbW1dLV2Vic2l0ZURhdGFTdG9yZSBkZWZhdWx0RGF0YVN0b3JlXSBfYXBwQm91bmREb21h
aW5zOl4oTlNBcnJheTxOU1N0cmluZyAqPiAqZG9tYWlucykgeworICAgICAgICBOU0FycmF5ICpk
b21haW5zVG9Db21wYXJlID0gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czpAImFwcGxlLmNvbSIs
IEAiYmFyLmNvbSIsIEAiZXhhbXBsZS5jb20iLCBAImZvby5jb20iLCBAImxvY2FsaG9zdCIsIEAi
d2Via2l0Lm9yZyIsIG5pbF07CisKKyAgICAgICAgTlNBcnJheSAqc29ydGVkRG9tYWlucyA9IFtk
b21haW5zIHNvcnRlZEFycmF5VXNpbmdTZWxlY3RvcjpAc2VsZWN0b3IoY2FzZUluc2Vuc2l0aXZl
Q29tcGFyZTopXTsKKworICAgICAgICBpbnQgbGVuZ3RoID0gW3NvcnRlZERvbWFpbnMgY291bnRd
OworICAgICAgICBFWFBFQ1RfRVEobGVuZ3RoLCA2KTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykKKyAgICAgICAgICAgIEVYUEVDVF9XS19TVFJFUShbc29ydGVkRG9t
YWlucyBvYmplY3RBdEluZGV4OmldLCBbZG9tYWluc1RvQ29tcGFyZSBvYmplY3RBdEluZGV4Omld
KTsKKworICAgICAgICBpc0RvbmUgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6
OlV0aWw6OnJ1bigmaXNEb25lKTsKK30KKwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>