<?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>187427</bug_id>
          
          <creation_ts>2018-07-06 21:14:24 -0700</creation_ts>
          <short_desc>[Curl] Move HTTP Setup logic from CurlRequest to CurlHandle for reuse.</short_desc>
          <delta_ts>2018-07-13 16:19:29 -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>Platform</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>
          
          <blocked>172630</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Basuke Suzuki">basuke</reporter>
          <assigned_to name="Basuke Suzuki">basuke</assigned_to>
          <cc>achristensen</cc>
    
    <cc>basuke</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fujii</cc>
    
    <cc>galpeter</cc>
    
    <cc>pvollan</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1440087</commentid>
    <comment_count>0</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2018-07-06 21:14:24 -0700</bug_when>
    <thetext>Move logic to setup CurlHandle for HTTP/HTTPS communication from CurlRequest to CurlHandle. Upcoming WebSocket impementation doesn&apos;t use CurlRequest which is for regular HTTP transaction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1440587</commentid>
    <comment_count>1</comment_count>
      <attachid>344628</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2018-07-09 15:24:22 -0700</bug_when>
    <thetext>Created attachment 344628
PATCH</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1440589</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-07-09 15:27:01 -0700</bug_when>
    <thetext>Attachment 344628 did not pass style-queue:


ERROR: Source/WebCore/ChangeLog:8:  You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
Total errors found: 1 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1440590</commentid>
    <comment_count>3</comment_count>
      <attachid>344628</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2018-07-09 15:28:23 -0700</bug_when>
    <thetext>Comment on attachment 344628
PATCH

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

&gt; Source/WebCore/platform/network/curl/CurlContext.cpp:808
&gt; +        curl_easy_setopt(m_handle, CURLOPT_STDERR, log);

This is a bug fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1440595</commentid>
    <comment_count>4</comment_count>
      <attachid>344630</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2018-07-09 15:33:01 -0700</bug_when>
    <thetext>Created attachment 344630
Fix style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1440633</commentid>
    <comment_count>5</comment_count>
      <attachid>344640</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2018-07-09 16:58:48 -0700</bug_when>
    <thetext>Created attachment 344640
FIX</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1440744</commentid>
    <comment_count>6</comment_count>
      <attachid>344640</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-07-09 22:55:47 -0700</bug_when>
    <thetext>Comment on attachment 344640
FIX

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

I&apos;m not a reviewer. This is an informal review.

&gt; Source/WebCore/ChangeLog:9
&gt; +        in CurlRequest, which is only for regular HTTP/HTTPS transacction. This patch

transacction → transaction

&gt; Source/WebCore/platform/network/curl/CurlContext.h:286
&gt; +    std::optional&lt;CertificateInfo&gt; certificateInfo() const;

This returns a copy of CertificateInfo.
In general, getters return the reference of memeber variables.
Do you need to copy?
std::optional&lt;CertificateInfo&gt;&amp; certificateInfo() const;

&gt; Source/WebCore/platform/network/curl/CurlRequest.cpp:149
&gt; +        if (CurlRequestClient* client = m_client)

Do you nee this variable?
if (m_client)

&gt; Source/WebCore/platform/network/curl/CurlRequest.cpp:309
&gt; +        m_certificateInfo = *info;

This code copies CertificateInfo.
I think CurlRequest don&apos;t need to have m_certificateInfo because m_curlHandle has m_sslVerifier and m_sslVerifier has CertificateInfo.

&gt; Source/WebCore/platform/network/curl/CurlSSLVerifier.cpp:77
&gt; +    bool ok = CurlContext::singleton().sslHandle().isAllowedHTTPSCertificateHost(m_curlHandle.url().host().toString());

This callback is called in the curl thread. Is this thread-safe to access m_curlHandle.url()?

&gt; Source/WebCore/platform/network/curl/CurlSSLVerifier.cpp:79
&gt; +    bool ok = CurlContext::singleton().sslHandle().canIgnoredHTTPSCertificate(m_curlHandle.url().host().toString(), m_certificateInfo.certificateChain());

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1441260</commentid>
    <comment_count>7</comment_count>
      <attachid>344640</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2018-07-11 14:43:58 -0700</bug_when>
    <thetext>Comment on attachment 344640
FIX

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

Thanks for comment.

&gt;&gt; Source/WebCore/platform/network/curl/CurlContext.h:286
&gt;&gt; +    std::optional&lt;CertificateInfo&gt; certificateInfo() const;
&gt; 
&gt; This returns a copy of CertificateInfo.
&gt; In general, getters return the reference of memeber variables.
&gt; Do you need to copy?
&gt; std::optional&lt;CertificateInfo&gt;&amp; certificateInfo() const;

That&apos;s right. Actually as you mentioned in other bug, In the upcoming patch, CertificateInfo will be moved to ResourceError and ResourceResponse. I&apos;ll open the bug right now for that improvement and wanna keep this part as is. The main purpose of this patch is moving the logic to share with others.

&gt;&gt; Source/WebCore/platform/network/curl/CurlRequest.cpp:149
&gt;&gt; +        if (CurlRequestClient* client = m_client)
&gt; 
&gt; Do you nee this variable?
&gt; if (m_client)

This is std::atomic&lt;CurlRequestClient*&gt; so that this avoid fetching data from storage twice. I see this worth doing. https://godbolt.org/g/UNQ3A5

&gt;&gt; Source/WebCore/platform/network/curl/CurlSSLVerifier.cpp:77
&gt;&gt; +    bool ok = CurlContext::singleton().sslHandle().isAllowedHTTPSCertificateHost(m_curlHandle.url().host().toString());
&gt; 
&gt; This callback is called in the curl thread. Is this thread-safe to access m_curlHandle.url()?

It is isolatedCopied by setUrl, which runs in curl thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1441453</commentid>
    <comment_count>8</comment_count>
      <attachid>344640</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-07-12 02:45:15 -0700</bug_when>
    <thetext>Comment on attachment 344640
FIX

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

&gt;&gt;&gt; Source/WebCore/platform/network/curl/CurlRequest.cpp:149
&gt;&gt;&gt; +        if (CurlRequestClient* client = m_client)
&gt;&gt; 
&gt;&gt; Do you nee this variable?
&gt;&gt; if (m_client)
&gt; 
&gt; This is std::atomic&lt;CurlRequestClient*&gt; so that this avoid fetching data from storage twice. I see this worth doing. https://godbolt.org/g/UNQ3A5

I didn&apos;t know m_client is an atomic.
This is a bad pattern. You can&apos;t use atomic in this case.
If m_client is modified in other thread concurrently, it would be destructed after the null-check and before accessing.
As far as I read the code, m_client is set only in the main thread. You shouldn&apos;t use atomic for m_client.

&gt;&gt;&gt; Source/WebCore/platform/network/curl/CurlSSLVerifier.cpp:77
&gt;&gt;&gt; +    bool ok = CurlContext::singleton().sslHandle().isAllowedHTTPSCertificateHost(m_curlHandle.url().host().toString());
&gt;&gt; 
&gt;&gt; This callback is called in the curl thread. Is this thread-safe to access m_curlHandle.url()?
&gt; 
&gt; It is isolatedCopied by setUrl, which runs in curl thread.

It seems that CurlHandle::setUrl is called both in the main thread and the worker thread.

In the main thread
  CurlRequest::start
  → CurlRequest::setupTransfer
    → CurlHandle::setUrl

In the worker thread
  CurlRequestScheduler::executeTasks
  → lambda of CurlRequestScheduler::startTransfer
    → CurlRequest::setupTransfer
       → CurlHandle::setUrl

It is a synchronization problem if CurlHandle::m_url is written in one thread, and it is read in other thread.
URL::isolatedCopied doesn&apos;t help in this case.

But, I didn&apos;t check carefully. It might not be a problem due to synchronization piggybacking.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1441572</commentid>
    <comment_count>9</comment_count>
      <attachid>344640</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2018-07-12 10:34:55 -0700</bug_when>
    <thetext>Comment on attachment 344640
FIX

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

&gt;&gt;&gt;&gt; Source/WebCore/platform/network/curl/CurlRequest.cpp:149
&gt;&gt;&gt;&gt; +        if (CurlRequestClient* client = m_client)
&gt;&gt;&gt; 
&gt;&gt;&gt; Do you nee this variable?
&gt;&gt;&gt; if (m_client)
&gt;&gt; 
&gt;&gt; This is std::atomic&lt;CurlRequestClient*&gt; so that this avoid fetching data from storage twice. I see this worth doing. https://godbolt.org/g/UNQ3A5
&gt; 
&gt; I didn&apos;t know m_client is an atomic.
&gt; This is a bad pattern. You can&apos;t use atomic in this case.
&gt; If m_client is modified in other thread concurrently, it would be destructed after the null-check and before accessing.
&gt; As far as I read the code, m_client is set only in the main thread. You shouldn&apos;t use atomic for m_client.

This code is not for thread safety. Thread safety is guarantied by the convention. It is passed as an argument of constructor and can be invaldated vie invalidClient() method. All usage is in this callClient which is executed in main thread (thanks to runOnMainThread). All access is serialized in main thread. That&apos;s the design. I don&apos;t know why it&apos;s stored in std::::atomic. I guess that came from old implementation by changing its name and location. I agree to remove atomic at this moment. And also noticed I forgot to add main thread assertion in invalidateClient() method. Thank you.

&gt;&gt;&gt;&gt; Source/WebCore/platform/network/curl/CurlSSLVerifier.cpp:77
&gt;&gt;&gt;&gt; +    bool ok = CurlContext::singleton().sslHandle().isAllowedHTTPSCertificateHost(m_curlHandle.url().host().toString());
&gt;&gt;&gt; 
&gt;&gt;&gt; This callback is called in the curl thread. Is this thread-safe to access m_curlHandle.url()?
&gt;&gt; 
&gt;&gt; It is isolatedCopied by setUrl, which runs in curl thread.
&gt; 
&gt; It seems that CurlHandle::setUrl is called both in the main thread and the worker thread.
&gt; 
&gt; In the main thread
&gt;   CurlRequest::start
&gt;   → CurlRequest::setupTransfer
&gt;     → CurlHandle::setUrl
&gt; 
&gt; In the worker thread
&gt;   CurlRequestScheduler::executeTasks
&gt;   → lambda of CurlRequestScheduler::startTransfer
&gt;     → CurlRequest::setupTransfer
&gt;        → CurlHandle::setUrl
&gt; 
&gt; It is a synchronization problem if CurlHandle::m_url is written in one thread, and it is read in other thread.
&gt; URL::isolatedCopied doesn&apos;t help in this case.
&gt; 
&gt; But, I didn&apos;t check carefully. It might not be a problem due to synchronization piggybacking.

Right those difference happen in sync and async difference. For sync transfer, it stays in main thread. In async transfer it set in curl thread by the scheduler and used entirely in that thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1441580</commentid>
    <comment_count>10</comment_count>
      <attachid>344860</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2018-07-12 10:47:56 -0700</bug_when>
    <thetext>Created attachment 344860
FIX</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1441844</commentid>
    <comment_count>11</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-07-13 05:00:15 -0700</bug_when>
    <thetext>(In reply to Basuke Suzuki from comment #9)
&gt; Right those difference happen in sync and async difference. For sync
&gt; transfer, it stays in main thread. In async transfer it set in curl thread
&gt; by the scheduler and used entirely in that thread.

Thank you for the explanation. I get the idea.

IMO, this is badly designed. CurlContext and CurlSSLHandle, which is
actually a context even thought it&apos;s named &apos;Handle&apos;, are shared
among the main thread and the worker thread without locking mutex.

For example, CurlRequest::didReceiveHeader has a following code:

&gt; CurlContext::singleton().setProxyAuthMethod(m_response.availableProxyAuth);

This setter might be called concurrently in other thread.No mutex locked.

I think the main thread should post a sync message to the worker thread for sync requests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1441845</commentid>
    <comment_count>12</comment_count>
      <attachid>344860</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-07-13 05:15:04 -0700</bug_when>
    <thetext>Comment on attachment 344860
FIX

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

&gt; Source/WebCore/platform/network/curl/CurlContext.cpp:360
&gt; +    m_url = url.isolatedCopy();

IIUC, This isolatedCopy is not needed because CurlRequest::m_request is an isolated copy.

&gt; Source/WebCore/platform/network/curl/CurlSSLVerifier.cpp:85
&gt; +        m_curlHandle.setSslVerifyPeer(CurlHandle::VerifyPeer::Disable);

Just out of curiosity, Why is this code needed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1441889</commentid>
    <comment_count>13</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2018-07-13 10:14:38 -0700</bug_when>
    <thetext>Thanks for r+ and congrats for being a reviewer!

(In reply to Fujii Hironori from comment #12)
&gt; Comment on attachment 344860 [details]
&gt; FIX
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=344860&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/network/curl/CurlContext.cpp:360
&gt; &gt; +    m_url = url.isolatedCopy();
&gt; 
&gt; IIUC, This isolatedCopy is not needed because CurlRequest::m_request is an
&gt; isolated copy.

That&apos;s right. Our intention is CurlHandle should be isolated from other implementation detail and should hold information required to be used. Next step may be moving out url from CurlRequest.


&gt; &gt; Source/WebCore/platform/network/curl/CurlSSLVerifier.cpp:85
&gt; &gt; +        m_curlHandle.setSslVerifyPeer(CurlHandle::VerifyPeer::Disable);
&gt; 
&gt; Just out of curiosity, Why is this code needed?

It came from old code and I didn&apos;t sure the intent at this moment. While I was figuring out the mis-implementation of Curl port at this bug https://bugs.webkit.org/show_bug.cgi?id=187611, It was a left over of old implementation that raw curl handle was setup to handle redirect by itself. If redirect happens, following peer check was bypassed by setting this flag. Current Curl port handle redirect in WebCore and never reuse curl handle. So this code can be removed safely. I&apos;ll do that on the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1441897</commentid>
    <comment_count>14</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2018-07-13 10:21:51 -0700</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #11)
&gt; (In reply to Basuke Suzuki from comment #9)
&gt; &gt; Right those difference happen in sync and async difference. For sync
&gt; &gt; transfer, it stays in main thread. In async transfer it set in curl thread
&gt; &gt; by the scheduler and used entirely in that thread.
&gt; 
&gt; Thank you for the explanation. I get the idea.
&gt; 
&gt; IMO, this is badly designed. CurlContext and CurlSSLHandle, which is
&gt; actually a context even thought it&apos;s named &apos;Handle&apos;, are shared
&gt; among the main thread and the worker thread without locking mutex.
&gt; 
&gt; For example, CurlRequest::didReceiveHeader has a following code:
&gt; 
&gt; &gt; CurlContext::singleton().setProxyAuthMethod(m_response.availableProxyAuth);
&gt; 
&gt; This setter might be called concurrently in other thread.No mutex locked.
&gt; 
&gt; I think the main thread should post a sync message to the worker thread for
&gt; sync requests.

This part always makes us uncomfortable. Yes, it&apos;s very hard to design the architecture for both sync and async.

We thought about your idea, but main thread has to handle callback request while waiting the result. With ResourceHandle implementation, that&apos;s too complected than doing everything in main thread.

But we see there must be better way to make the code simpler. We will figure out the way soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1441899</commentid>
    <comment_count>15</comment_count>
      <attachid>344860</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-07-13 10:28:37 -0700</bug_when>
    <thetext>Comment on attachment 344860
FIX

Clearing flags on attachment: 344860

Committed r233803: &lt;https://trac.webkit.org/changeset/233803&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1441900</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-07-13 10:28:39 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1441901</commentid>
    <comment_count>17</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-07-13 10:29:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/42171198&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1442092</commentid>
    <comment_count>18</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-07-13 16:19:29 -0700</bug_when>
    <thetext>(In reply to Basuke Suzuki from comment #14)
&gt; We thought about your idea, but main thread has to handle callback request
&gt; while waiting the result. With ResourceHandle implementation, that&apos;s too
&gt; complected than doing everything in main thread.

You can process other (restricted) messages while waiting sync-reply.
 
&gt; But we see there must be better way to make the code simpler. We will figure
&gt; out the way soon.

Great.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>344628</attachid>
            <date>2018-07-09 15:24:22 -0700</date>
            <delta_ts>2018-07-09 15:33:01 -0700</delta_ts>
            <desc>PATCH</desc>
            <filename>187427.diff</filename>
            <type>text/plain</type>
            <size>21363</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4OTU0NTg5YTNjNC4uYjJmM2RlNGM0YzggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzOSBAQAorMjAxOC0wNy0wOSAgQmFzdWtlIFN1enVraSAgPEJhc3VrZS5TdXp1a2lAc29u
eS5jb20+CisKKyAgICAgICAgW0N1cmxdIE1vdmUgSFRUUCBTZXR1cCBsb2dpYyBmcm9tIEN1cmxS
ZXF1ZXN0IHRvIEN1cmxIYW5kbGUgZm9yIHJldXNlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg3NDI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChPT1BTISkuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q3VybEhhbmRsZTo6Q3VybEhhbmRsZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSGFuZGxl
OjplbmFibGVTU0xGb3JIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OndpbGxT
ZXR1cFNzbEN0eCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSGFuZGxlOjp3aWxsU2V0dXBTc2xD
dHhDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSGFuZGxlOjpzc2xFcnJvcnMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEhhbmRsZTo6c2V0VXJsKToKKyAgICAgICAgKFdl
YkNvcmU6OkN1cmxIYW5kbGU6OmVuYWJsZUh0dHApOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEhh
bmRsZTo6ZW5hYmxlQ29ubmVjdGlvbk9ubHkpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEhhbmRs
ZTo6Y2VydGlmaWNhdGVJbmZvIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6
OmVuYWJsZVN0ZEVycklmVXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSGFuZGxlOjppbml0
aWFsaXplKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENv
bnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OnVybCBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkN1cmxSZXF1ZXN0OjpzZXR1cFRyYW5zZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkN1
cmxSZXF1ZXN0OjpkaWRSZWNlaXZlSGVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxSZXF1
ZXN0OjpkaWRDb21wbGV0ZVRyYW5zZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxSZXF1ZXN0
OjpmaW5hbGl6ZVRyYW5zZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxSZXF1ZXN0Ojp3aWxs
U2V0dXBTc2xDdHgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3VybFJlcXVlc3Q6Ondp
bGxTZXR1cFNzbEN0eENhbGxiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ3VybFJlcXVlc3QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
Q3VybFNTTFZlcmlmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxTU0xWZXJpZmllcjo6
Q3VybFNTTFZlcmlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxTU0xWZXJpZmllcjo6dmVy
aWZ5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFNTTFZlcmlmaWVyLmg6
CisKIDIwMTgtMDctMDYgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgogCiAg
ICAgICAgIFNlbWFudGljIGNvbG9ycyBkb24ndCB1cGRhdGUgd2hlbiBhY2Nlc3NpYmlsaXR5IElu
Y3JlYXNlIENvbnRyYXN0IG1vZGUgaXMgZW5hYmxlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENvbnRleHQuY3BwCmluZGV4IDFmMGFjMjc0ZjQz
Li45NWFhYTg5ZWZhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL0N1cmxDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ3VybENvbnRleHQuY3BwCkBAIC0yOCw3ICsyOCwxMCBAQAogI2luY2x1ZGUgIkN1
cmxDb250ZXh0LmgiCiAKICNpZiBVU0UoQ1VSTCkKKyNpbmNsdWRlICJDZXJ0aWZpY2F0ZUluZm8u
aCIKICNpbmNsdWRlICJDdXJsUmVxdWVzdFNjaGVkdWxlci5oIgorI2luY2x1ZGUgIkN1cmxTU0xI
YW5kbGUuaCIKKyNpbmNsdWRlICJDdXJsU1NMVmVyaWZpZXIuaCIKICNpbmNsdWRlICJIVFRQSGVh
ZGVyTWFwLmgiCiAjaW5jbHVkZSA8TmV0d29ya0xvYWRNZXRyaWNzLmg+CiAjaW5jbHVkZSA8bXV0
ZXg+CkBAIC0yNjEsNiArMjY0LDIxIEBAIENVUkxNc2cqIEN1cmxNdWx0aUhhbmRsZTo6cmVhZElu
Zm8oaW50JiBtZXNzYWdlc0luUXVldWUpCiBDdXJsSGFuZGxlOjpDdXJsSGFuZGxlKCkKIHsKICAg
ICBtX2hhbmRsZSA9IGN1cmxfZWFzeV9pbml0KCk7CisgICAgY3VybF9lYXN5X3NldG9wdChtX2hh
bmRsZSwgQ1VSTE9QVF9FUlJPUkJVRkZFUiwgbV9lcnJvckJ1ZmZlcik7CisKKyAgICBlbmFibGVT
aGFyZUhhbmRsZSgpOworICAgIGVuYWJsZUFsbG93ZWRQcm90b2NvbHMoKTsKKyAgICBlbmFibGVB
Y2NlcHRFbmNvZGluZygpOworCisgICAgc2V0RG5zQ2FjaGVUaW1lb3V0KEN1cmxDb250ZXh0Ojpz
aW5nbGV0b24oKS5kbnNDYWNoZVRpbWVvdXQoKSk7CisgICAgc2V0Q29ubmVjdFRpbWVvdXQoQ3Vy
bENvbnRleHQ6OnNpbmdsZXRvbigpLmNvbm5lY3RUaW1lb3V0KCkpOworCisgICAgZW5hYmxlUHJv
eHlJZkV4aXN0cygpOworCisjaWZuZGVmIE5ERUJVRworICAgIGVuYWJsZVZlcmJvc2VJZlVzZWQo
KTsKKyAgICBlbmFibGVTdGRFcnJJZlVzZWQoKTsKKyNlbmRpZgogfQogCiBDdXJsSGFuZGxlOjp+
Q3VybEhhbmRsZSgpCkBAIC0yNzQsOSArMjkyLDUyIEBAIGNvbnN0IFN0cmluZyBDdXJsSGFuZGxl
OjplcnJvckRlc2NyaXB0aW9uKENVUkxjb2RlIGVycm9yQ29kZSkKICAgICByZXR1cm4gU3RyaW5n
KGN1cmxfZWFzeV9zdHJlcnJvcihlcnJvckNvZGUpKTsKIH0KIAotdm9pZCBDdXJsSGFuZGxlOjpp
bml0aWFsaXplKCkKK3ZvaWQgQ3VybEhhbmRsZTo6ZW5hYmxlU1NMRm9ySG9zdChjb25zdCBTdHJp
bmcmIGhvc3QpCiB7Ci0gICAgY3VybF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9FUlJP
UkJVRkZFUiwgbV9lcnJvckJ1ZmZlcik7CisgICAgYXV0byYgc3NsSGFuZGxlID0gQ3VybENvbnRl
eHQ6OnNpbmdsZXRvbigpLnNzbEhhbmRsZSgpOworICAgIGlmIChhdXRvIHNzbENsaWVudENlcnRp
ZmljYXRlID0gc3NsSGFuZGxlLmdldFNTTENsaWVudENlcnRpZmljYXRlKGhvc3QpKSB7CisgICAg
ICAgIHNldFNzbENlcnQoc3NsQ2xpZW50Q2VydGlmaWNhdGUtPmZpcnN0LnV0ZjgoKS5kYXRhKCkp
OworICAgICAgICBzZXRTc2xDZXJ0VHlwZSgiUDEyIik7CisgICAgICAgIHNldFNzbEtleVBhc3N3
b3JkKHNzbENsaWVudENlcnRpZmljYXRlLT5zZWNvbmQudXRmOCgpLmRhdGEoKSk7CisgICAgfQor
CisgICAgaWYgKHNzbEhhbmRsZS5zaG91bGRJZ25vcmVTU0xFcnJvcnMoKSkgeworICAgICAgICBz
ZXRTc2xWZXJpZnlQZWVyKEN1cmxIYW5kbGU6OlZlcmlmeVBlZXI6OkRpc2FibGUpOworICAgICAg
ICBzZXRTc2xWZXJpZnlIb3N0KEN1cmxIYW5kbGU6OlZlcmlmeUhvc3Q6Okxvb3NlTmFtZUNoZWNr
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBzZXRTc2xWZXJpZnlQZWVyKEN1cmxIYW5kbGU6OlZl
cmlmeVBlZXI6OkVuYWJsZSk7CisgICAgICAgIHNldFNzbFZlcmlmeUhvc3QoQ3VybEhhbmRsZTo6
VmVyaWZ5SG9zdDo6U3RyaWN0TmFtZUNoZWNrKTsKKyAgICB9CisKKyAgICBjb25zdCBhdXRvJiBj
aXBoZXJMaXN0ID0gc3NsSGFuZGxlLmdldENpcGhlckxpc3QoKTsKKyAgICBpZiAoIWNpcGhlckxp
c3QuaXNFbXB0eSgpKQorICAgICAgICBzZXRTc2xDaXBoZXJMaXN0KGNpcGhlckxpc3QudXRmOCgp
LmRhdGEoKSk7CisKKyAgICBzZXRTc2xDdHhDYWxsYmFja0Z1bmN0aW9uKHdpbGxTZXR1cFNzbEN0
eENhbGxiYWNrLCB0aGlzKTsKKworICAgIGlmIChhdXRvKiBwYXRoID0gV1RGOjpnZXRfaWY8U3Ry
aW5nPihzc2xIYW5kbGUuZ2V0Q0FDZXJ0SW5mbygpKSkKKyAgICAgICAgc2V0Q0FDZXJ0UGF0aChw
YXRoLT51dGY4KCkuZGF0YSgpKTsKK30KKworQ1VSTGNvZGUgQ3VybEhhbmRsZTo6d2lsbFNldHVw
U3NsQ3R4KHZvaWQqIHNzbEN0eCkKK3sKKyAgICBpZiAoIXNzbEN0eCkKKyAgICAgICAgcmV0dXJu
IENVUkxFX0FCT1JURURfQllfQ0FMTEJBQ0s7CisKKyAgICBpZiAoIW1fc3NsVmVyaWZpZXIpCisg
ICAgICAgIG1fc3NsVmVyaWZpZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEN1cmxTU0xWZXJpZmllcj4o
KnRoaXMsIHNzbEN0eCk7CisKKyAgICByZXR1cm4gQ1VSTEVfT0s7Cit9CisKK0NVUkxjb2RlIEN1
cmxIYW5kbGU6OndpbGxTZXR1cFNzbEN0eENhbGxiYWNrKENVUkwqLCB2b2lkKiBzc2xDdHgsIHZv
aWQqIHVzZXJEYXRhKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxDdXJsSGFuZGxlKj4odXNl
ckRhdGEpLT53aWxsU2V0dXBTc2xDdHgoc3NsQ3R4KTsKK30KKworaW50IEN1cmxIYW5kbGU6OnNz
bEVycm9ycygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3NsVmVyaWZpZXIgPyBtX3NzbFZlcmlm
aWVyLT5zc2xFcnJvcnMoKSA6IDA7CiB9CiAKIENVUkxjb2RlIEN1cmxIYW5kbGU6OnBlcmZvcm0o
KQpAQCAtMjk2LDYgKzM1Nyw4IEBAIHZvaWQgQ3VybEhhbmRsZTo6ZW5hYmxlU2hhcmVIYW5kbGUo
KQogCiB2b2lkIEN1cmxIYW5kbGU6OnNldFVybChjb25zdCBVUkwmIHVybCkKIHsKKyAgICBtX3Vy
bCA9IHVybC5pc29sYXRlZENvcHkoKTsKKwogICAgIFVSTCBjdXJsVXJsID0gdXJsOwogCiAgICAg
Ly8gUmVtb3ZlIGFueSBmcmFnbWVudCBwYXJ0LCBvdGhlcndpc2UgY3VybCB3aWxsIHNlbmQgaXQg
YXMgcGFydCBvZiB0aGUgcmVxdWVzdC4KQEAgLTMxMCw2ICszNzMsOSBAQCB2b2lkIEN1cmxIYW5k
bGU6OnNldFVybChjb25zdCBVUkwmIHVybCkKIAogICAgIC8vIHVybCBpcyBpbiBBU0NJSSBzbyBs
YXRpbjEoKSB3aWxsIG9ubHkgY29udmVydCBpdCB0byBjaGFyKiB3aXRob3V0IGNoYXJhY3RlciB0
cmFuc2xhdGlvbi4KICAgICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX1VSTCwg
Y3VybFVybC5zdHJpbmcoKS5sYXRpbjEoKS5kYXRhKCkpOworCisgICAgaWYgKHVybC5wcm90b2Nv
bElzKCJodHRwcyIpKQorICAgICAgICBlbmFibGVTU0xGb3JIb3N0KG1fdXJsLmhvc3QoKS50b1N0
cmluZygpKTsKIH0KIAogdm9pZCBDdXJsSGFuZGxlOjphcHBlbmRSZXF1ZXN0SGVhZGVycyhjb25z
dCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJzKQpAQCAtMzY3LDcgKzQzMyw3IEBAIHZvaWQgQ3VybEhh
bmRsZTo6ZW5hYmxlUmVxdWVzdEhlYWRlcnMoKQogCiB2b2lkIEN1cmxIYW5kbGU6OmVuYWJsZUh0
dHAoKQogewotICAgIGlmIChDdXJsQ29udGV4dDo6c2luZ2xldG9uKCkuaXNIdHRwMkVuYWJsZWQo
KSkgeworICAgIGlmIChtX3VybC5wcm90b2NvbElzKCJodHRwcyIpICYmIEN1cmxDb250ZXh0Ojpz
aW5nbGV0b24oKS5pc0h0dHAyRW5hYmxlZCgpKSB7CiAgICAgICAgIGN1cmxfZWFzeV9zZXRvcHQo
bV9oYW5kbGUsIENVUkxPUFRfSFRUUF9WRVJTSU9OLCBDVVJMX0hUVFBfVkVSU0lPTl8yVExTKTsK
ICAgICAgICAgY3VybF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9QSVBFV0FJVCwgMUwp
OwogICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX1NTTF9FTkFCTEVf
QUxQTiwgMUwpOwpAQCAtNTYwLDYgKzYyNiwxMSBAQCB2b2lkIEN1cmxIYW5kbGU6OnNldFNzbEN0
eENhbGxiYWNrRnVuY3Rpb24oY3VybF9zc2xfY3R4X2NhbGxiYWNrIGNhbGxiYWNrRnVuYywgdgog
ICAgIGN1cmxfZWFzeV9zZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfU1NMX0NUWF9GVU5DVElPTiwg
Y2FsbGJhY2tGdW5jKTsKIH0KIAordm9pZCBDdXJsSGFuZGxlOjplbmFibGVDb25uZWN0aW9uT25s
eSgpCit7CisgICAgY3VybF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9DT05ORUNUX09O
TFksIDFMKTsKK30KKwogc3RkOjpvcHRpb25hbDxTdHJpbmc+IEN1cmxIYW5kbGU6OmdldFByb3h5
VXJsKCkKIHsKICAgICBhdXRvJiBwcm94eSA9IEN1cmxDb250ZXh0OjpzaW5nbGV0b24oKS5wcm94
eVNldHRpbmdzKCk7CkBAIC02OTIsNiArNzYzLDE0IEBAIHN0ZDo6b3B0aW9uYWw8TmV0d29ya0xv
YWRNZXRyaWNzPiBDdXJsSGFuZGxlOjpnZXROZXR3b3JrTG9hZE1ldHJpY3MoKQogICAgIHJldHVy
biBuZXR3b3JrTG9hZE1ldHJpY3M7CiB9CiAKK3N0ZDo6b3B0aW9uYWw8Q2VydGlmaWNhdGVJbmZv
PiBDdXJsSGFuZGxlOjpjZXJ0aWZpY2F0ZUluZm8oKSBjb25zdAoreworICAgIGlmICghbV9zc2xW
ZXJpZmllcikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiBtX3Nz
bFZlcmlmaWVyLT5jZXJ0aWZpY2F0ZUluZm8oKTsKK30KKwogbG9uZyBsb25nIEN1cmxIYW5kbGU6
Om1heEN1cmxPZmZUKCkKIHsKICAgICBzdGF0aWMgY29uc3QgbG9uZyBsb25nIG1heEN1cmxPZmZU
ID0gKDFMTCA8PCAoZXhwZWN0ZWRTaXplT2ZDdXJsT2ZmVCgpICogOCAtIDEpKSAtIDE7CkBAIC03
MjUsOCArODA0LDggQEAgdm9pZCBDdXJsSGFuZGxlOjplbmFibGVWZXJib3NlSWZVc2VkKCkKIAog
dm9pZCBDdXJsSGFuZGxlOjplbmFibGVTdGRFcnJJZlVzZWQoKQogewotICAgIGlmIChDdXJsQ29u
dGV4dDo6c2luZ2xldG9uKCkuZ2V0TG9nRmlsZSgpKQotICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0
KG1faGFuZGxlLCBDVVJMT1BUX1ZFUkJPU0UsIDEpOworICAgIGlmIChhdXRvIGxvZyA9IEN1cmxD
b250ZXh0OjpzaW5nbGV0b24oKS5nZXRMb2dGaWxlKCkpCisgICAgICAgIGN1cmxfZWFzeV9zZXRv
cHQobV9oYW5kbGUsIENVUkxPUFRfU1RERVJSLCBsb2cpOwogfQogCiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0LmgKaW5kZXgg
NGZjZjliZTliZDUuLjI1YWExOGJkN2ZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENvbnRleHQuaApAQCAtMTk0LDYgKzE5NCw4IEBAIHByaXZh
dGU6CiAKIC8vIEN1cmxIYW5kbGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogCitjbGFzcyBDZXJ0aWZpY2F0ZUluZm87CitjbGFzcyBDdXJsU1NMVmVy
aWZpZXI7CiBjbGFzcyBIVFRQSGVhZGVyTWFwOwogY2xhc3MgTmV0d29ya0xvYWRNZXRyaWNzOwog
CkBAIC0yMTUsOCArMjE3LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkN1cmxIYW5kbGUoKTsK
IAogICAgIENVUkwqIGhhbmRsZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFuZGxlOyB9Ci0KLSAgICB2
b2lkIGluaXRpYWxpemUoKTsKKyAgICBjb25zdCBVUkwmIHVybCgpIGNvbnN0IHsgcmV0dXJuIG1f
dXJsOyB9CiAKICAgICBDVVJMY29kZSBwZXJmb3JtKCk7CiAgICAgQ1VSTGNvZGUgcGF1c2UoaW50
KTsKQEAgLTIyNiw2ICsyMjcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBlbmFibGVTaGFyZUhhbmRs
ZSgpOwogCiAgICAgdm9pZCBzZXRVcmwoY29uc3QgVVJMJik7CisgICAgdm9pZCBlbmFibGVTU0xG
b3JIb3N0KGNvbnN0IFN0cmluZyYpOwogCiAgICAgdm9pZCBhcHBlbmRSZXF1ZXN0SGVhZGVycyhj
b25zdCBIVFRQSGVhZGVyTWFwJik7CiAgICAgdm9pZCBhcHBlbmRSZXF1ZXN0SGVhZGVyKGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CkBAIC0yNDIsNiArMjQ0LDggQEAg
cHVibGljOgogICAgIHZvaWQgc2V0SW5GaWxlU2l6ZUxhcmdlKGN1cmxfb2ZmX3QpOwogICAgIHZv
aWQgc2V0SHR0cEN1c3RvbVJlcXVlc3QoY29uc3QgU3RyaW5nJik7CiAKKyAgICB2b2lkIGVuYWJs
ZUNvbm5lY3Rpb25Pbmx5KCk7CisKICAgICB2b2lkIGVuYWJsZUFjY2VwdEVuY29kaW5nKCk7CiAg
ICAgdm9pZCBlbmFibGVBbGxvd2VkUHJvdG9jb2xzKCk7CiAKQEAgLTI3OCw2ICsyODIsOSBAQCBw
dWJsaWM6CiAgICAgc3RkOjpvcHRpb25hbDxsb25nPiBnZXRIdHRwVmVyc2lvbigpOwogICAgIHN0
ZDo6b3B0aW9uYWw8TmV0d29ya0xvYWRNZXRyaWNzPiBnZXROZXR3b3JrTG9hZE1ldHJpY3MoKTsK
IAorICAgIGludCBzc2xFcnJvcnMoKSBjb25zdDsKKyAgICBzdGQ6Om9wdGlvbmFsPENlcnRpZmlj
YXRlSW5mbz4gY2VydGlmaWNhdGVJbmZvKCkgY29uc3Q7CisKICAgICBzdGF0aWMgbG9uZyBsb25n
IG1heEN1cmxPZmZUKCk7CiAKICNpZm5kZWYgTkRFQlVHCkBAIC0yODksMTAgKzI5NiwxNSBAQCBw
cml2YXRlOgogICAgIHZvaWQgZW5hYmxlUmVxdWVzdEhlYWRlcnMoKTsKICAgICBzdGF0aWMgaW50
IGV4cGVjdGVkU2l6ZU9mQ3VybE9mZlQoKTsKIAorICAgIHN0YXRpYyBDVVJMY29kZSB3aWxsU2V0
dXBTc2xDdHhDYWxsYmFjayhDVVJMKiwgdm9pZCogc3NsQ3R4LCB2b2lkKiB1c2VyRGF0YSk7Cisg
ICAgQ1VSTGNvZGUgd2lsbFNldHVwU3NsQ3R4KHZvaWQqIHNzbEN0eCk7CisKICAgICBDVVJMKiBt
X2hhbmRsZSB7IG51bGxwdHIgfTsKICAgICBjaGFyIG1fZXJyb3JCdWZmZXJbQ1VSTF9FUlJPUl9T
SVpFXSB7IH07CiAKKyAgICBVUkwgbV91cmw7CiAgICAgQ3VybFNMaXN0IG1fcmVxdWVzdEhlYWRl
cnM7CisgICAgc3RkOjp1bmlxdWVfcHRyPEN1cmxTU0xWZXJpZmllcj4gbV9zc2xWZXJpZmllcjsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFJlcXVlc3QuY3BwCmluZGV4IDBiZGFlOTRlN2RkLi5m
MWU3NDQ5MDYwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL0N1cmxSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ3VybFJlcXVlc3QuY3BwCkBAIC0xNDYsOSArMTQ2LDggQEAgdm9pZCBDdXJsUmVxdWVz
dDo6cmVzdW1lKCkKIHZvaWQgQ3VybFJlcXVlc3Q6OmNhbGxDbGllbnQoRnVuY3Rpb248dm9pZChD
dXJsUmVxdWVzdCYsIEN1cmxSZXF1ZXN0Q2xpZW50Jik+JiYgdGFzaykKIHsKICAgICBydW5Pbk1h
aW5UaHJlYWQoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgdGFzayA9IFdU
Rk1vdmUodGFzayldKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChDdXJsUmVxdWVzdENsaWVudCog
Y2xpZW50ID0gbV9jbGllbnQpIHsKKyAgICAgICAgaWYgKEN1cmxSZXF1ZXN0Q2xpZW50KiBjbGll
bnQgPSBtX2NsaWVudCkKICAgICAgICAgICAgIHRhc2soKnRoaXMsIG1ha2VSZWYoKmNsaWVudCkp
OwotICAgICAgICB9CiAgICAgfSk7CiB9CiAKQEAgLTE3Nyw4ICsxNzYsOCBAQCBDVVJMKiBDdXJs
UmVxdWVzdDo6c2V0dXBUcmFuc2ZlcigpCiAKICAgICBtX2N1cmxIYW5kbGUgPSBzdGQ6Om1ha2Vf
dW5pcXVlPEN1cmxIYW5kbGU+KCk7CiAKLSAgICBtX2N1cmxIYW5kbGUtPmluaXRpYWxpemUoKTsK
ICAgICBtX2N1cmxIYW5kbGUtPnNldFVybChtX3JlcXVlc3QudXJsKCkpOworCiAgICAgbV9jdXJs
SGFuZGxlLT5hcHBlbmRSZXF1ZXN0SGVhZGVycyhodHRwSGVhZGVyRmllbGRzKTsKIAogICAgIGNv
bnN0IGF1dG8mIG1ldGhvZCA9IG1fcmVxdWVzdC5odHRwTWV0aG9kKCk7CkBAIC0yMDAsNjMgKzE5
OSwxNyBAQCBDVVJMKiBDdXJsUmVxdWVzdDo6c2V0dXBUcmFuc2ZlcigpCiAgICAgICAgIG1fY3Vy
bEhhbmRsZS0+c2V0SHR0cEF1dGhVc2VyUGFzcyhtX3VzZXIsIG1fcGFzc3dvcmQpOwogICAgIH0K
IAotICAgIG1fY3VybEhhbmRsZS0+c2V0U3NsQ3R4Q2FsbGJhY2tGdW5jdGlvbih3aWxsU2V0dXBT
c2xDdHhDYWxsYmFjaywgdGhpcyk7CiAgICAgbV9jdXJsSGFuZGxlLT5zZXRIZWFkZXJDYWxsYmFj
a0Z1bmN0aW9uKGRpZFJlY2VpdmVIZWFkZXJDYWxsYmFjaywgdGhpcyk7CiAgICAgbV9jdXJsSGFu
ZGxlLT5zZXRXcml0ZUNhbGxiYWNrRnVuY3Rpb24oZGlkUmVjZWl2ZURhdGFDYWxsYmFjaywgdGhp
cyk7CiAKLSAgICBtX2N1cmxIYW5kbGUtPmVuYWJsZVNoYXJlSGFuZGxlKCk7Ci0gICAgbV9jdXJs
SGFuZGxlLT5lbmFibGVBbGxvd2VkUHJvdG9jb2xzKCk7Ci0gICAgbV9jdXJsSGFuZGxlLT5lbmFi
bGVBY2NlcHRFbmNvZGluZygpOwotCiAgICAgbV9jdXJsSGFuZGxlLT5zZXRUaW1lb3V0KFNlY29u
ZHMobV9yZXF1ZXN0LnRpbWVvdXRJbnRlcnZhbCgpKSk7Ci0gICAgbV9jdXJsSGFuZGxlLT5zZXRE
bnNDYWNoZVRpbWVvdXQoQ3VybENvbnRleHQ6OnNpbmdsZXRvbigpLmRuc0NhY2hlVGltZW91dCgp
KTsKLSAgICBtX2N1cmxIYW5kbGUtPnNldENvbm5lY3RUaW1lb3V0KEN1cmxDb250ZXh0OjpzaW5n
bGV0b24oKS5jb25uZWN0VGltZW91dCgpKTsKLQotICAgIG1fY3VybEhhbmRsZS0+ZW5hYmxlUHJv
eHlJZkV4aXN0cygpOwotCi0gICAgaWYgKHNzbEhhbmRsZS5zaG91bGRJZ25vcmVTU0xFcnJvcnMo
KSkgewotICAgICAgICBtX2N1cmxIYW5kbGUtPnNldFNzbFZlcmlmeVBlZXIoQ3VybEhhbmRsZTo6
VmVyaWZ5UGVlcjo6RGlzYWJsZSk7Ci0gICAgICAgIG1fY3VybEhhbmRsZS0+c2V0U3NsVmVyaWZ5
SG9zdChDdXJsSGFuZGxlOjpWZXJpZnlIb3N0OjpMb29zZU5hbWVDaGVjayk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgbV9jdXJsSGFuZGxlLT5zZXRTc2xWZXJpZnlQZWVyKEN1cmxIYW5kbGU6OlZl
cmlmeVBlZXI6OkVuYWJsZSk7Ci0gICAgICAgIG1fY3VybEhhbmRsZS0+c2V0U3NsVmVyaWZ5SG9z
dChDdXJsSGFuZGxlOjpWZXJpZnlIb3N0OjpTdHJpY3ROYW1lQ2hlY2spOwotICAgIH0KLQotICAg
IGF1dG8gY2lwaGVyTGlzdCA9IHNzbEhhbmRsZS5nZXRDaXBoZXJMaXN0KCk7Ci0gICAgaWYgKCFj
aXBoZXJMaXN0LmlzRW1wdHkoKSkKLSAgICAgICAgbV9jdXJsSGFuZGxlLT5zZXRTc2xDaXBoZXJM
aXN0KGNpcGhlckxpc3QudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICBhdXRvIHNzbENsaWVudENlcnRp
ZmljYXRlID0gc3NsSGFuZGxlLmdldFNTTENsaWVudENlcnRpZmljYXRlKG1fcmVxdWVzdC51cmwo
KS5ob3N0KCkudG9TdHJpbmcoKSk7Ci0gICAgaWYgKHNzbENsaWVudENlcnRpZmljYXRlKSB7Ci0g
ICAgICAgIG1fY3VybEhhbmRsZS0+c2V0U3NsQ2VydChzc2xDbGllbnRDZXJ0aWZpY2F0ZS0+Zmly
c3QudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIG1fY3VybEhhbmRsZS0+c2V0U3NsQ2VydFR5cGUo
IlAxMiIpOwotICAgICAgICBtX2N1cmxIYW5kbGUtPnNldFNzbEtleVBhc3N3b3JkKHNzbENsaWVu
dENlcnRpZmljYXRlLT5zZWNvbmQudXRmOCgpLmRhdGEoKSk7Ci0gICAgfQotCi0gICAgaWYgKGF1
dG8gcGF0aCA9IFdURjo6Z2V0X2lmPFN0cmluZz4oc3NsSGFuZGxlLmdldENBQ2VydEluZm8oKSkp
Ci0gICAgICAgIG1fY3VybEhhbmRsZS0+c2V0Q0FDZXJ0UGF0aChwYXRoLT51dGY4KCkuZGF0YSgp
KTsKIAogICAgIGlmIChtX3Nob3VsZFN1c3BlbmQpCiAgICAgICAgIHNldFJlcXVlc3RQYXVzZWQo
dHJ1ZSk7CiAKLSNpZm5kZWYgTkRFQlVHCi0gICAgbV9jdXJsSGFuZGxlLT5lbmFibGVWZXJib3Nl
SWZVc2VkKCk7Ci0gICAgbV9jdXJsSGFuZGxlLT5lbmFibGVTdGRFcnJJZlVzZWQoKTsKLSNlbmRp
ZgotCiAgICAgcmV0dXJuIG1fY3VybEhhbmRsZS0+aGFuZGxlKCk7CiB9CiAKLUNVUkxjb2RlIEN1
cmxSZXF1ZXN0Ojp3aWxsU2V0dXBTc2xDdHgodm9pZCogc3NsQ3R4KQotewotICAgIGlmICghc3Ns
Q3R4KQotICAgICAgICByZXR1cm4gQ1VSTEVfQUJPUlRFRF9CWV9DQUxMQkFDSzsKLQotICAgIGlm
ICghbV9zc2xWZXJpZmllcikKLSAgICAgICAgbV9zc2xWZXJpZmllciA9IHN0ZDo6bWFrZV91bmlx
dWU8Q3VybFNTTFZlcmlmaWVyPihtX2N1cmxIYW5kbGUuZ2V0KCksIG1fcmVxdWVzdC51cmwoKS5o
b3N0KCkudG9TdHJpbmcoKSwgc3NsQ3R4KTsKLSAgICByZXR1cm4gQ1VSTEVfT0s7Ci19Ci0KIC8v
IFRoaXMgaXMgY2FsbGVkIHRvIG9idGFpbiBIVFRQIFBPU1Qgb3IgUFVUIGRhdGEuCiAvLyBJdGVy
YXRlIHRocm91Z2ggRm9ybURhdGEgZWxlbWVudHMgYW5kIHVwbG9hZCBmaWxlcy4KIC8vIENhcmVm
dWxseSByZXNwZWN0IHRoZSBnaXZlbiBidWZmZXIgc2l6ZSBhbmQgZmlsbCB0aGUgcmVzdCBvZiB0
aGUgZGF0YSBhdCB0aGUgbmV4dCBjYWxscy4KQEAgLTM1Miw4ICszMDUsOCBAQCBzaXplX3QgQ3Vy
bFJlcXVlc3Q6OmRpZFJlY2VpdmVIZWFkZXIoU3RyaW5nJiYgaGVhZGVyKQogICAgIGlmIChtX3Jl
c3BvbnNlLmF2YWlsYWJsZVByb3h5QXV0aCkKICAgICAgICAgQ3VybENvbnRleHQ6OnNpbmdsZXRv
bigpLnNldFByb3h5QXV0aE1ldGhvZChtX3Jlc3BvbnNlLmF2YWlsYWJsZVByb3h5QXV0aCk7CiAK
LSAgICBpZiAobV9zc2xWZXJpZmllcikKLSAgICAgICAgbV9jZXJ0aWZpY2F0ZUluZm8gPSBtX3Nz
bFZlcmlmaWVyLT5jZXJ0aWZpY2F0ZUluZm8oKTsKKyAgICBpZiAoYXV0byBpbmZvID0gbV9jdXJs
SGFuZGxlLT5jZXJ0aWZpY2F0ZUluZm8oKSkKKyAgICAgICAgbV9jZXJ0aWZpY2F0ZUluZm8gPSAq
aW5mbzsKIAogICAgIGlmIChtX2VuYWJsZU11bHRpcGFydCkKICAgICAgICAgbV9tdWx0aXBhcnRI
YW5kbGUgPSBDdXJsTXVsdGlwYXJ0SGFuZGxlOjpjcmVhdGVJZk5lZWRlZCgqdGhpcywgbV9yZXNw
b25zZSk7CkBAIC00NjMsMTEgKzQxNiwxMCBAQCB2b2lkIEN1cmxSZXF1ZXN0OjpkaWRDb21wbGV0
ZVRyYW5zZmVyKENVUkxjb2RlIHJlc3VsdCkKICAgICB9IGVsc2UgewogICAgICAgICBhdXRvIHR5
cGUgPSAocmVzdWx0ID09IENVUkxFX09QRVJBVElPTl9USU1FRE9VVCAmJiBtX3JlcXVlc3QudGlt
ZW91dEludGVydmFsKCkgPiAwLjApID8gUmVzb3VyY2VFcnJvcjo6VHlwZTo6VGltZW91dCA6IFJl
c291cmNlRXJyb3I6OlR5cGU6OkdlbmVyYWw7CiAgICAgICAgIGF1dG8gcmVzb3VyY2VFcnJvciA9
IFJlc291cmNlRXJyb3I6Omh0dHBFcnJvcihyZXN1bHQsIG1fcmVxdWVzdC51cmwoKSwgdHlwZSk7
Ci0gICAgICAgIGlmIChtX3NzbFZlcmlmaWVyKSB7Ci0gICAgICAgICAgICByZXNvdXJjZUVycm9y
LnNldFNzbEVycm9ycyhtX3NzbFZlcmlmaWVyLT5zc2xFcnJvcnMoKSk7Ci0KLSAgICAgICAgICAg
IG1fY2VydGlmaWNhdGVJbmZvID0gbV9zc2xWZXJpZmllci0+Y2VydGlmaWNhdGVJbmZvKCk7Ci0g
ICAgICAgIH0KKyAgICAgICAgaWYgKGF1dG8gc3NsRXJyb3JzID0gbV9jdXJsSGFuZGxlLT5zc2xF
cnJvcnMoKSkKKyAgICAgICAgICAgIHJlc291cmNlRXJyb3Iuc2V0U3NsRXJyb3JzKHNzbEVycm9y
cyk7CisgICAgICAgIGlmIChhdXRvIGluZm8gPSBtX2N1cmxIYW5kbGUtPmNlcnRpZmljYXRlSW5m
bygpKQorICAgICAgICAgICAgbV9jZXJ0aWZpY2F0ZUluZm8gPSAqaW5mbzsKIAogICAgICAgICBm
aW5hbGl6ZVRyYW5zZmVyKCk7CiAgICAgICAgIGNhbGxDbGllbnQoW2Vycm9yID0gcmVzb3VyY2VF
cnJvci5pc29sYXRlZENvcHkoKV0oQ3VybFJlcXVlc3QmIHJlcXVlc3QsIEN1cmxSZXF1ZXN0Q2xp
ZW50JiBjbGllbnQpIHsKQEAgLTQ4Niw3ICs0MzgsNiBAQCB2b2lkIEN1cmxSZXF1ZXN0OjpmaW5h
bGl6ZVRyYW5zZmVyKCkKIHsKICAgICBjbG9zZURvd25sb2FkRmlsZSgpOwogICAgIG1fZm9ybURh
dGFTdHJlYW0uY2xlYW4oKTsKLSAgICBtX3NzbFZlcmlmaWVyID0gbnVsbHB0cjsKICAgICBtX211
bHRpcGFydEhhbmRsZSA9IG51bGxwdHI7CiAgICAgbV9jdXJsSGFuZGxlID0gbnVsbHB0cjsKIH0K
QEAgLTc0MywxMSArNjk0LDYgQEAgdm9pZCBDdXJsUmVxdWVzdDo6Y2xlYW51cERvd25sb2FkRmls
ZSgpCiAgICAgfQogfQogCi1DVVJMY29kZSBDdXJsUmVxdWVzdDo6d2lsbFNldHVwU3NsQ3R4Q2Fs
bGJhY2soQ1VSTCosIHZvaWQqIHNzbEN0eCwgdm9pZCogdXNlckRhdGEpCi17Ci0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PEN1cmxSZXF1ZXN0Kj4odXNlckRhdGEpLT53aWxsU2V0dXBTc2xDdHgoc3Ns
Q3R4KTsKLX0KLQogc2l6ZV90IEN1cmxSZXF1ZXN0Ojp3aWxsU2VuZERhdGFDYWxsYmFjayhjaGFy
KiBwdHIsIHNpemVfdCBibG9ja1NpemUsIHNpemVfdCBudW1iZXJPZkJsb2Nrcywgdm9pZCogdXNl
ckRhdGEpCiB7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEN1cmxSZXF1ZXN0Kj4odXNlckRhdGEp
LT53aWxsU2VuZERhdGEocHRyLCBibG9ja1NpemUsIG51bWJlck9mQmxvY2tzKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVxdWVzdC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxSZXF1ZXN0LmgKaW5kZXgg
NTlkODBkNzE0NzUuLmVkZTczNDMxMjEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFJlcXVlc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFJlcXVlc3QuaApAQCAtMTEzLDcgKzExMyw2IEBAIHByaXZh
dGU6CiAgICAgLy8gVHJhbnNmZXIgcHJvY2Vzc2luZyBvZiBSZXF1ZXN0IGJvZHksIFJlc3BvbnNl
IGhlYWRlci9ib2R5CiAgICAgLy8gQ2FsbGVkIGJ5IHdvcmtlciB0aHJlYWQgaW4gY2FzZSBvZiBh
c3luYywgbWFpbiB0aHJlYWQgaW4gY2FzZSBvZiBzeW5jLgogICAgIENVUkwqIHNldHVwVHJhbnNm
ZXIoKSBvdmVycmlkZTsKLSAgICBDVVJMY29kZSB3aWxsU2V0dXBTc2xDdHgodm9pZCopOwogICAg
IHNpemVfdCB3aWxsU2VuZERhdGEoY2hhciosIHNpemVfdCwgc2l6ZV90KTsKICAgICBzaXplX3Qg
ZGlkUmVjZWl2ZUhlYWRlcihTdHJpbmcmJik7CiAgICAgc2l6ZV90IGRpZFJlY2VpdmVEYXRhKFJl
ZjxTaGFyZWRCdWZmZXI+JiYpOwpAQCAtMTQ4LDcgKzE0Nyw2IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBjbGVhbnVwRG93bmxvYWRGaWxlKCk7CiAKICAgICAvLyBDYWxsYmFjayBmdW5jdGlvbnMgZm9y
IGN1cmwKLSAgICBzdGF0aWMgQ1VSTGNvZGUgd2lsbFNldHVwU3NsQ3R4Q2FsbGJhY2soQ1VSTCos
IHZvaWQqLCB2b2lkKik7CiAgICAgc3RhdGljIHNpemVfdCB3aWxsU2VuZERhdGFDYWxsYmFjayhj
aGFyKiwgc2l6ZV90LCBzaXplX3QsIHZvaWQqKTsKICAgICBzdGF0aWMgc2l6ZV90IGRpZFJlY2Vp
dmVIZWFkZXJDYWxsYmFjayhjaGFyKiwgc2l6ZV90LCBzaXplX3QsIHZvaWQqKTsKICAgICBzdGF0
aWMgc2l6ZV90IGRpZFJlY2VpdmVEYXRhQ2FsbGJhY2soY2hhciosIHNpemVfdCwgc2l6ZV90LCB2
b2lkKik7CkBAIC0xNjcsNyArMTY1LDYgQEAgcHJpdmF0ZToKIAogICAgIHN0ZDo6dW5pcXVlX3B0
cjxDdXJsSGFuZGxlPiBtX2N1cmxIYW5kbGU7CiAgICAgQ3VybEZvcm1EYXRhU3RyZWFtIG1fZm9y
bURhdGFTdHJlYW07Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEN1cmxTU0xWZXJpZmllcj4gbV9zc2xW
ZXJpZmllcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q3VybE11bHRpcGFydEhhbmRsZT4gbV9tdWx0
aXBhcnRIYW5kbGU7CiAKICAgICBDdXJsUmVzcG9uc2UgbV9yZXNwb25zZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NMVmVyaWZpZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxTU0xWZXJpZmllci5j
cHAKaW5kZXggYTQ3Y2Y4ZjE0OGUuLjdjMGFmMTEyZTY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFNTTFZlcmlmaWVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFNTTFZlcmlmaWVyLmNwcApAQCAt
MzQsMTIgKzM0LDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIFZlY3RvcjxD
ZXJ0aWZpY2F0ZUluZm86OkNlcnRpZmljYXRlPiBwZW1EYXRhRnJvbUN0eChYNTA5X1NUT1JFX0NU
WCopOworc3RhdGljIFZlY3RvcjxDZXJ0aWZpY2F0ZUluZm86OkNlcnRpZmljYXRlPiBwZW1EYXRh
RnJvbUN0eChYNTA5U3RvcmVDVFgqKTsKIHN0YXRpYyBDdXJsU1NMVmVyaWZpZXI6OlNTTENlcnRp
ZmljYXRlRmxhZ3MgY29udmVydFRvU1NMQ2VydGlmaWNhdGVGbGFncyh1bnNpZ25lZCk7CiAKLUN1
cmxTU0xWZXJpZmllcjo6Q3VybFNTTFZlcmlmaWVyKEN1cmxIYW5kbGUqIGN1cmxIYW5kbGUsIGNv
bnN0IFN0cmluZyYgaG9zdE5hbWUsIHZvaWQqIHNzbEN0eCkKK0N1cmxTU0xWZXJpZmllcjo6Q3Vy
bFNTTFZlcmlmaWVyKEN1cmxIYW5kbGUmIGN1cmxIYW5kbGUsIHZvaWQqIHNzbEN0eCkKICAgICA6
IG1fY3VybEhhbmRsZShjdXJsSGFuZGxlKQotICAgICwgbV9ob3N0TmFtZShob3N0TmFtZSkKIHsK
ICAgICBhdXRvKiBjdHggPSBzdGF0aWNfY2FzdDxTU0xfQ1RYKj4oc3NsQ3R4KTsKICAgICBjb25z
dCBhdXRvJiBzc2xIYW5kbGUgPSBDdXJsQ29udGV4dDo6c2luZ2xldG9uKCkuc3NsSGFuZGxlKCk7
CkBAIC00OCw3ICs0Nyw3IEBAIEN1cmxTU0xWZXJpZmllcjo6Q3VybFNTTFZlcmlmaWVyKEN1cmxI
YW5kbGUqIGN1cmxIYW5kbGUsIGNvbnN0IFN0cmluZyYgaG9zdE5hbWUsCiAgICAgU1NMX0NUWF9z
ZXRfdmVyaWZ5KGN0eCwgU1NMX0NUWF9nZXRfdmVyaWZ5X21vZGUoY3R4KSwgdmVyaWZ5Q2FsbGJh
Y2spOwogCiAjaWYgZGVmaW5lZChMSUJSRVNTTF9WRVJTSU9OX05VTUJFUikKLSAgICBpZiAoYXV0
byBkYXRhID0gV1RGOjpnZXRfaWY8VmVjdG9yPGNoYXI+Pihzc2xIYW5kbGUuZ2V0Q0FDZXJ0SW5m
bygpKSkKKyAgICBpZiAoYXV0byogZGF0YSA9IFdURjo6Z2V0X2lmPFZlY3RvcjxjaGFyPj4oc3Ns
SGFuZGxlLmdldENBQ2VydEluZm8oKSkpCiAgICAgICAgIFNTTF9DVFhfbG9hZF92ZXJpZnlfbWVt
KGN0eCwgc3RhdGljX2Nhc3Q8dm9pZCo+KGNvbnN0X2Nhc3Q8Y2hhcio+KGRhdGEtPmRhdGEoKSkp
LCBkYXRhLT5zaXplKCkpOwogI2VuZGlmCiAKQEAgLTYzLDEwICs2MiwxMCBAQCBDdXJsU1NMVmVy
aWZpZXI6OkN1cmxTU0xWZXJpZmllcihDdXJsSGFuZGxlKiBjdXJsSGFuZGxlLCBjb25zdCBTdHJp
bmcmIGhvc3ROYW1lLAogICAgICAgICBTU0xfQ1RYX3NldDFfY3VydmVzX2xpc3QoY3R4LCBjdXJ2
ZXNMaXN0LnV0ZjgoKS5kYXRhKCkpOwogfQogCi1ib29sIEN1cmxTU0xWZXJpZmllcjo6dmVyaWZ5
KFg1MDlfU1RPUkVfQ1RYKiBjdHgpCitib29sIEN1cmxTU0xWZXJpZmllcjo6dmVyaWZ5KFg1MDlT
dG9yZUNUWCogY3R4KQogewogICAgIC8vIHdoZXRoZXIgdGhlIHZlcmlmaWNhdGlvbiBvZiB0aGUg
Y2VydGlmaWNhdGUgaW4gcXVlc3Rpb24gd2FzIHBhc3NlZCAocHJldmVyaWZ5X29rPTEpIG9yIG5v
dCAocHJldmVyaWZ5X29rPTApCi0gICAgbV9jZXJ0aWZpY2F0ZUluZm8gPSBDZXJ0aWZpY2F0ZUlu
Zm8geyBYNTA5X1NUT1JFX0NUWF9nZXRfZXJyb3IoY3R4KSwgcGVtRGF0YUZyb21DdHgoY3R4KSB9
OworICAgIG1fY2VydGlmaWNhdGVJbmZvID0gQ2VydGlmaWNhdGVJbmZvIHsgWDUwOVN0b3JlQ1RY
X2dldF9lcnJvcihjdHgpLCBwZW1EYXRhRnJvbUN0eChjdHgpIH07CiAKICAgICBhdXRvIGVycm9y
ID0gbV9jZXJ0aWZpY2F0ZUluZm8udmVyaWZpY2F0aW9uRXJyb3IoKTsKICAgICBpZiAoIWVycm9y
KQpAQCAtNzUsMjQgKzc0LDIzIEBAIGJvb2wgQ3VybFNTTFZlcmlmaWVyOjp2ZXJpZnkoWDUwOV9T
VE9SRV9DVFgqIGN0eCkKICAgICBtX3NzbEVycm9ycyA9IHN0YXRpY19jYXN0PGludD4oY29udmVy
dFRvU1NMQ2VydGlmaWNhdGVGbGFncyhlcnJvcikpOwogCiAjaWYgUExBVEZPUk0oV0lOKQotICAg
IGJvb2wgb2sgPSBDdXJsQ29udGV4dDo6c2luZ2xldG9uKCkuc3NsSGFuZGxlKCkuaXNBbGxvd2Vk
SFRUUFNDZXJ0aWZpY2F0ZUhvc3QobV9ob3N0TmFtZSk7CisgICAgYm9vbCBvayA9IEN1cmxDb250
ZXh0OjpzaW5nbGV0b24oKS5zc2xIYW5kbGUoKS5pc0FsbG93ZWRIVFRQU0NlcnRpZmljYXRlSG9z
dChtX2N1cmxIYW5kbGUudXJsKCkuaG9zdCgpLnRvU3RyaW5nKCkpOwogI2Vsc2UKLSAgICBib29s
IG9rID0gQ3VybENvbnRleHQ6OnNpbmdsZXRvbigpLnNzbEhhbmRsZSgpLmNhbklnbm9yZWRIVFRQ
U0NlcnRpZmljYXRlKG1faG9zdE5hbWUsIG1fY2VydGlmaWNhdGVJbmZvLmNlcnRpZmljYXRlQ2hh
aW4oKSk7CisgICAgYm9vbCBvayA9IEN1cmxDb250ZXh0OjpzaW5nbGV0b24oKS5zc2xIYW5kbGUo
KS5jYW5JZ25vcmVkSFRUUFNDZXJ0aWZpY2F0ZShtX2N1cmxIYW5kbGUudXJsKCkuaG9zdCgpLnRv
U3RyaW5nKCksIG1fY2VydGlmaWNhdGVJbmZvLmNlcnRpZmljYXRlQ2hhaW4oKSk7CiAjZW5kaWYK
IAogICAgIGlmIChvaykgewogICAgICAgICAvLyBpZiB0aGUgaG9zdCBhbmQgdGhlIGNlcnRpZmlj
YXRlIGFyZSBzdG9yZWQgZm9yIHRoZSBjdXJyZW50IGhhbmRsZSB0aGF0IG1lYW5zIGlzIGVuYWJs
ZWQsCiAgICAgICAgIC8vIHNvIGRvbid0IG5lZWQgdG8gY3VybCB2ZXJpZmllcyB0aGUgYXV0aGVu
dGljaXR5IG9mIHRoZSBwZWVyJ3MgY2VydGlmaWNhdGUKLSAgICAgICAgaWYgKG1fY3VybEhhbmRs
ZSkKLSAgICAgICAgICAgIG1fY3VybEhhbmRsZS0+c2V0U3NsVmVyaWZ5UGVlcihDdXJsSGFuZGxl
OjpWZXJpZnlQZWVyOjpEaXNhYmxlKTsKKyAgICAgICAgbV9jdXJsSGFuZGxlLnNldFNzbFZlcmlm
eVBlZXIoQ3VybEhhbmRsZTo6VmVyaWZ5UGVlcjo6RGlzYWJsZSk7CiAgICAgfQogCiAgICAgcmV0
dXJuIG9rOwogfQogCi1pbnQgQ3VybFNTTFZlcmlmaWVyOjp2ZXJpZnlDYWxsYmFjayhpbnQgb2ss
IFg1MDlfU1RPUkVfQ1RYKiBjdHgpCitpbnQgQ3VybFNTTFZlcmlmaWVyOjp2ZXJpZnlDYWxsYmFj
ayhpbnQgb2ssIFg1MDlTdG9yZUNUWCogY3R4KQogewotICAgIGF1dG8gc3NsID0gc3RhdGljX2Nh
c3Q8U1NMKj4oWDUwOV9TVE9SRV9DVFhfZ2V0X2V4X2RhdGEoY3R4LCBTU0xfZ2V0X2V4X2RhdGFf
WDUwOV9TVE9SRV9DVFhfaWR4KCkpKTsKKyAgICBhdXRvIHNzbCA9IHN0YXRpY19jYXN0PFNTTCo+
KFg1MDlTdG9yZUNUWF9nZXRfZXhfZGF0YShjdHgsIFNTTF9nZXRfZXhfZGF0YV9YNTA5U3RvcmVD
VFhfaWR4KCkpKTsKICAgICBhdXRvIHNzbEN0eCA9IFNTTF9nZXRfU1NMX0NUWChzc2wpOwogICAg
IGF1dG8gdmVyaWZpZXIgPSBzdGF0aWNfY2FzdDxDdXJsU1NMVmVyaWZpZXIqPihTU0xfQ1RYX2dl
dF9hcHBfZGF0YShzc2xDdHgpKTsKIApAQCAtMTAyLDggKzEwMCw4IEBAIGludCBDdXJsU1NMVmVy
aWZpZXI6OnZlcmlmeUNhbGxiYWNrKGludCBvaywgWDUwOV9TVE9SRV9DVFgqIGN0eCkKIAogY2xh
c3MgU3RhY2tPZlg1MDkgewogcHVibGljOgotICAgIGV4cGxpY2l0IFN0YWNrT2ZYNTA5KFg1MDlf
U1RPUkVfQ1RYKiBjdHgpCi0gICAgICAgIDogbV9jZXJ0cyB7IFg1MDlfU1RPUkVfQ1RYX2dldDFf
Y2hhaW4oY3R4KSB9CisgICAgZXhwbGljaXQgU3RhY2tPZlg1MDkoWDUwOVN0b3JlQ1RYKiBjdHgp
CisgICAgICAgIDogbV9jZXJ0cyB7IFg1MDlTdG9yZUNUWF9nZXQxX2NoYWluKGN0eCkgfQogICAg
IHsKICAgICB9CiAKQEAgLTE0OSw3ICsxNDcsNyBAQCBwcml2YXRlOgogICAgIEJJTyogbV9iaW8g
eyBudWxscHRyIH07CiB9OwogCi1zdGF0aWMgVmVjdG9yPENlcnRpZmljYXRlSW5mbzo6Q2VydGlm
aWNhdGU+IHBlbURhdGFGcm9tQ3R4KFg1MDlfU1RPUkVfQ1RYKiBjdHgpCitzdGF0aWMgVmVjdG9y
PENlcnRpZmljYXRlSW5mbzo6Q2VydGlmaWNhdGU+IHBlbURhdGFGcm9tQ3R4KFg1MDlTdG9yZUNU
WCogY3R4KQogewogICAgIFZlY3RvcjxDZXJ0aWZpY2F0ZUluZm86OkNlcnRpZmljYXRlPiByZXN1
bHQ7CiAgICAgU3RhY2tPZlg1MDkgY2VydHMgeyBjdHggfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NMVmVyaWZpZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NMVmVyaWZpZXIuaAppbmRleCA0OGE2
NTQzM2Q2MC4uZDUxZTVmZDcwYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY3VybC9DdXJsU1NMVmVyaWZpZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFNTTFZlcmlmaWVyLmgKQEAgLTMxLDcgKzMxLDcgQEAKICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogc3RydWN0IHg1MDlfc3RvcmVfY3R4X3N0
OwotdHlwZWRlZiBzdHJ1Y3QgeDUwOV9zdG9yZV9jdHhfc3QgWDUwOV9TVE9SRV9DVFg7Cit0eXBl
ZGVmIHN0cnVjdCB4NTA5X3N0b3JlX2N0eF9zdCBYNTA5U3RvcmVDVFg7CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtNTAsMjEgKzUwLDIwIEBAIHB1YmxpYzoKICAgICAgICAgU1NMX0NFUlRJ
RklDQVRFX0dFTkVSSUNfRVJST1IgPSAoMSA8PCA2KSAvLyBTb21lIG90aGVyIGVycm9yIG9jY3Vy
cmVkIHZhbGlkYXRpbmcgdGhlIGNlcnRpZmljYXRlCiAgICAgfTsKIAotICAgIEN1cmxTU0xWZXJp
ZmllcihDdXJsSGFuZGxlKiwgY29uc3QgU3RyaW5nJiBob3N0TmFtZSwgdm9pZCogc3NsQ3R4KTsK
KyAgICBDdXJsU1NMVmVyaWZpZXIoQ3VybEhhbmRsZSYsIHZvaWQqIHNzbEN0eCk7CiAKICAgICBp
bnQgc3NsRXJyb3JzKCkgeyByZXR1cm4gbV9zc2xFcnJvcnM7IH0KICAgICBjb25zdCBDZXJ0aWZp
Y2F0ZUluZm8mIGNlcnRpZmljYXRlSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fY2VydGlmaWNhdGVJ
bmZvOyB9CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIGludCB2ZXJpZnlDYWxsYmFjayhpbnQsIFg1
MDlfU1RPUkVfQ1RYKik7CisgICAgc3RhdGljIGludCB2ZXJpZnlDYWxsYmFjayhpbnQsIFg1MDlT
dG9yZUNUWCopOwogCi0gICAgQ3VybEhhbmRsZSogbV9jdXJsSGFuZGxlIHsgfTsKLSAgICBTdHJp
bmcgbV9ob3N0TmFtZTsKKyAgICBDdXJsSGFuZGxlJiBtX2N1cmxIYW5kbGU7CiAKICAgICBpbnQg
bV9zc2xFcnJvcnMgeyAwIH07CiAgICAgQ2VydGlmaWNhdGVJbmZvIG1fY2VydGlmaWNhdGVJbmZv
OwogCi0gICAgYm9vbCB2ZXJpZnkoWDUwOV9TVE9SRV9DVFgqKTsKKyAgICBib29sIHZlcmlmeShY
NTA5U3RvcmVDVFgqKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>344630</attachid>
            <date>2018-07-09 15:33:01 -0700</date>
            <delta_ts>2018-07-09 16:58:48 -0700</delta_ts>
            <desc>Fix style</desc>
            <filename>187427.diff</filename>
            <type>text/plain</type>
            <size>21683</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4OTU0NTg5YTNjNC4uOGZjMDI5NGJhMWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NCBAQAorMjAxOC0wNy0wOSAgQmFzdWtlIFN1enVraSAgPEJhc3VrZS5TdXp1a2lAc29u
eS5jb20+CisKKyAgICAgICAgW0N1cmxdIE1vdmUgSFRUUCBTZXR1cCBsb2dpYyBmcm9tIEN1cmxS
ZXF1ZXN0IHRvIEN1cmxIYW5kbGUgZm9yIHJldXNlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg3NDI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQ3VybENvbnRleHQgd2lsbCBiZSB1c2VkIGJ5IFNlY3Vy
ZSBXZWJTb2NrZXQgY2xpZW50LCBidXQgSFRUUCBzZXR1cCBjb2RlIGlzCisgICAgICAgIGluIEN1
cmxSZXF1ZXN0LCB3aGljaCBpcyBvbmx5IGZvciByZWd1bGFyIEhUVFAvSFRUUFMgdHJhbnNhY2N0
aW9uLiBUaGlzIHBhdGNoCisgICAgICAgIGFsbG93cyB3c3MgY2xpZW50IHRvIHNldHVwIEN1cmxI
YW5kbGUgZm9yIEhUVFBTIGNvbW11bmljYXRpb24sIHN1Y2ggYXMgVExTLAorICAgICAgICBwcm94
eSBvciBhdXRoZW50aWNhdGlvbi4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSB0aGVy
ZSdzIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3Vy
bC9DdXJsQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSGFuZGxlOjpDdXJsSGFu
ZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OmVuYWJsZVNTTEZvckhvc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VybEhhbmRsZTo6d2lsbFNldHVwU3NsQ3R4KToKKyAgICAgICAg
KFdlYkNvcmU6OkN1cmxIYW5kbGU6OndpbGxTZXR1cFNzbEN0eENhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OkN1cmxIYW5kbGU6OnNzbEVycm9ycyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDdXJsSGFuZGxlOjpzZXRVcmwpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEhhbmRsZTo6ZW5h
YmxlSHR0cCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSGFuZGxlOjplbmFibGVDb25uZWN0aW9u
T25seSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSGFuZGxlOjpjZXJ0aWZpY2F0ZUluZm8gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEhhbmRsZTo6ZW5hYmxlU3RkRXJySWZVc2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OmluaXRpYWxpemUpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5oOgorICAgICAgICAoV2Vi
Q29yZTo6Q3VybEhhbmRsZTo6dXJsIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ3VybFJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFJlcXVlc3Q6OnNl
dHVwVHJhbnNmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFJlcXVlc3Q6OmRpZFJlY2VpdmVI
ZWFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFJlcXVlc3Q6OmRpZENvbXBsZXRlVHJhbnNm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFJlcXVlc3Q6OmZpbmFsaXplVHJhbnNmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VybFJlcXVlc3Q6OndpbGxTZXR1cFNzbEN0eCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpDdXJsUmVxdWVzdDo6d2lsbFNldHVwU3NsQ3R4Q2FsbGJhY2sp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVxdWVzdC5o
OgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NMVmVyaWZpZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VybFNTTFZlcmlmaWVyOjpDdXJsU1NMVmVyaWZpZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Q3VybFNTTFZlcmlmaWVyOjp2ZXJpZnkpOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvY3VybC9DdXJsU1NMVmVyaWZpZXIuaDoKKwogMjAxOC0wNy0wNiAgVGltb3Ro
eSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CiAKICAgICAgICAgU2VtYW50aWMgY29sb3Jz
IGRvbid0IHVwZGF0ZSB3aGVuIGFjY2Vzc2liaWxpdHkgSW5jcmVhc2UgQ29udHJhc3QgbW9kZSBp
cyBlbmFibGVkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL0N1cmxDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9DdXJsQ29udGV4dC5jcHAKaW5kZXggMWYwYWMyNzRmNDMuLjk1YWFhODllZmE5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENvbnRleHQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5j
cHAKQEAgLTI4LDcgKzI4LDEwIEBACiAjaW5jbHVkZSAiQ3VybENvbnRleHQuaCIKIAogI2lmIFVT
RShDVVJMKQorI2luY2x1ZGUgIkNlcnRpZmljYXRlSW5mby5oIgogI2luY2x1ZGUgIkN1cmxSZXF1
ZXN0U2NoZWR1bGVyLmgiCisjaW5jbHVkZSAiQ3VybFNTTEhhbmRsZS5oIgorI2luY2x1ZGUgIkN1
cmxTU0xWZXJpZmllci5oIgogI2luY2x1ZGUgIkhUVFBIZWFkZXJNYXAuaCIKICNpbmNsdWRlIDxO
ZXR3b3JrTG9hZE1ldHJpY3MuaD4KICNpbmNsdWRlIDxtdXRleD4KQEAgLTI2MSw2ICsyNjQsMjEg
QEAgQ1VSTE1zZyogQ3VybE11bHRpSGFuZGxlOjpyZWFkSW5mbyhpbnQmIG1lc3NhZ2VzSW5RdWV1
ZSkKIEN1cmxIYW5kbGU6OkN1cmxIYW5kbGUoKQogewogICAgIG1faGFuZGxlID0gY3VybF9lYXN5
X2luaXQoKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX0VSUk9SQlVG
RkVSLCBtX2Vycm9yQnVmZmVyKTsKKworICAgIGVuYWJsZVNoYXJlSGFuZGxlKCk7CisgICAgZW5h
YmxlQWxsb3dlZFByb3RvY29scygpOworICAgIGVuYWJsZUFjY2VwdEVuY29kaW5nKCk7CisKKyAg
ICBzZXREbnNDYWNoZVRpbWVvdXQoQ3VybENvbnRleHQ6OnNpbmdsZXRvbigpLmRuc0NhY2hlVGlt
ZW91dCgpKTsKKyAgICBzZXRDb25uZWN0VGltZW91dChDdXJsQ29udGV4dDo6c2luZ2xldG9uKCku
Y29ubmVjdFRpbWVvdXQoKSk7CisKKyAgICBlbmFibGVQcm94eUlmRXhpc3RzKCk7CisKKyNpZm5k
ZWYgTkRFQlVHCisgICAgZW5hYmxlVmVyYm9zZUlmVXNlZCgpOworICAgIGVuYWJsZVN0ZEVycklm
VXNlZCgpOworI2VuZGlmCiB9CiAKIEN1cmxIYW5kbGU6On5DdXJsSGFuZGxlKCkKQEAgLTI3NCw5
ICsyOTIsNTIgQEAgY29uc3QgU3RyaW5nIEN1cmxIYW5kbGU6OmVycm9yRGVzY3JpcHRpb24oQ1VS
TGNvZGUgZXJyb3JDb2RlKQogICAgIHJldHVybiBTdHJpbmcoY3VybF9lYXN5X3N0cmVycm9yKGVy
cm9yQ29kZSkpOwogfQogCi12b2lkIEN1cmxIYW5kbGU6OmluaXRpYWxpemUoKQordm9pZCBDdXJs
SGFuZGxlOjplbmFibGVTU0xGb3JIb3N0KGNvbnN0IFN0cmluZyYgaG9zdCkKIHsKLSAgICBjdXJs
X2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX0VSUk9SQlVGRkVSLCBtX2Vycm9yQnVmZmVy
KTsKKyAgICBhdXRvJiBzc2xIYW5kbGUgPSBDdXJsQ29udGV4dDo6c2luZ2xldG9uKCkuc3NsSGFu
ZGxlKCk7CisgICAgaWYgKGF1dG8gc3NsQ2xpZW50Q2VydGlmaWNhdGUgPSBzc2xIYW5kbGUuZ2V0
U1NMQ2xpZW50Q2VydGlmaWNhdGUoaG9zdCkpIHsKKyAgICAgICAgc2V0U3NsQ2VydChzc2xDbGll
bnRDZXJ0aWZpY2F0ZS0+Zmlyc3QudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHNldFNzbENlcnRU
eXBlKCJQMTIiKTsKKyAgICAgICAgc2V0U3NsS2V5UGFzc3dvcmQoc3NsQ2xpZW50Q2VydGlmaWNh
dGUtPnNlY29uZC51dGY4KCkuZGF0YSgpKTsKKyAgICB9CisKKyAgICBpZiAoc3NsSGFuZGxlLnNo
b3VsZElnbm9yZVNTTEVycm9ycygpKSB7CisgICAgICAgIHNldFNzbFZlcmlmeVBlZXIoQ3VybEhh
bmRsZTo6VmVyaWZ5UGVlcjo6RGlzYWJsZSk7CisgICAgICAgIHNldFNzbFZlcmlmeUhvc3QoQ3Vy
bEhhbmRsZTo6VmVyaWZ5SG9zdDo6TG9vc2VOYW1lQ2hlY2spOworICAgIH0gZWxzZSB7CisgICAg
ICAgIHNldFNzbFZlcmlmeVBlZXIoQ3VybEhhbmRsZTo6VmVyaWZ5UGVlcjo6RW5hYmxlKTsKKyAg
ICAgICAgc2V0U3NsVmVyaWZ5SG9zdChDdXJsSGFuZGxlOjpWZXJpZnlIb3N0OjpTdHJpY3ROYW1l
Q2hlY2spOworICAgIH0KKworICAgIGNvbnN0IGF1dG8mIGNpcGhlckxpc3QgPSBzc2xIYW5kbGUu
Z2V0Q2lwaGVyTGlzdCgpOworICAgIGlmICghY2lwaGVyTGlzdC5pc0VtcHR5KCkpCisgICAgICAg
IHNldFNzbENpcGhlckxpc3QoY2lwaGVyTGlzdC51dGY4KCkuZGF0YSgpKTsKKworICAgIHNldFNz
bEN0eENhbGxiYWNrRnVuY3Rpb24od2lsbFNldHVwU3NsQ3R4Q2FsbGJhY2ssIHRoaXMpOworCisg
ICAgaWYgKGF1dG8qIHBhdGggPSBXVEY6OmdldF9pZjxTdHJpbmc+KHNzbEhhbmRsZS5nZXRDQUNl
cnRJbmZvKCkpKQorICAgICAgICBzZXRDQUNlcnRQYXRoKHBhdGgtPnV0ZjgoKS5kYXRhKCkpOwor
fQorCitDVVJMY29kZSBDdXJsSGFuZGxlOjp3aWxsU2V0dXBTc2xDdHgodm9pZCogc3NsQ3R4KQor
eworICAgIGlmICghc3NsQ3R4KQorICAgICAgICByZXR1cm4gQ1VSTEVfQUJPUlRFRF9CWV9DQUxM
QkFDSzsKKworICAgIGlmICghbV9zc2xWZXJpZmllcikKKyAgICAgICAgbV9zc2xWZXJpZmllciA9
IHN0ZDo6bWFrZV91bmlxdWU8Q3VybFNTTFZlcmlmaWVyPigqdGhpcywgc3NsQ3R4KTsKKworICAg
IHJldHVybiBDVVJMRV9PSzsKK30KKworQ1VSTGNvZGUgQ3VybEhhbmRsZTo6d2lsbFNldHVwU3Ns
Q3R4Q2FsbGJhY2soQ1VSTCosIHZvaWQqIHNzbEN0eCwgdm9pZCogdXNlckRhdGEpCit7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEN1cmxIYW5kbGUqPih1c2VyRGF0YSktPndpbGxTZXR1cFNzbEN0
eChzc2xDdHgpOworfQorCitpbnQgQ3VybEhhbmRsZTo6c3NsRXJyb3JzKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9zc2xWZXJpZmllciA/IG1fc3NsVmVyaWZpZXItPnNzbEVycm9ycygpIDogMDsK
IH0KIAogQ1VSTGNvZGUgQ3VybEhhbmRsZTo6cGVyZm9ybSgpCkBAIC0yOTYsNiArMzU3LDggQEAg
dm9pZCBDdXJsSGFuZGxlOjplbmFibGVTaGFyZUhhbmRsZSgpCiAKIHZvaWQgQ3VybEhhbmRsZTo6
c2V0VXJsKGNvbnN0IFVSTCYgdXJsKQogeworICAgIG1fdXJsID0gdXJsLmlzb2xhdGVkQ29weSgp
OworCiAgICAgVVJMIGN1cmxVcmwgPSB1cmw7CiAKICAgICAvLyBSZW1vdmUgYW55IGZyYWdtZW50
IHBhcnQsIG90aGVyd2lzZSBjdXJsIHdpbGwgc2VuZCBpdCBhcyBwYXJ0IG9mIHRoZSByZXF1ZXN0
LgpAQCAtMzEwLDYgKzM3Myw5IEBAIHZvaWQgQ3VybEhhbmRsZTo6c2V0VXJsKGNvbnN0IFVSTCYg
dXJsKQogCiAgICAgLy8gdXJsIGlzIGluIEFTQ0lJIHNvIGxhdGluMSgpIHdpbGwgb25seSBjb252
ZXJ0IGl0IHRvIGNoYXIqIHdpdGhvdXQgY2hhcmFjdGVyIHRyYW5zbGF0aW9uLgogICAgIGN1cmxf
ZWFzeV9zZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfVVJMLCBjdXJsVXJsLnN0cmluZygpLmxhdGlu
MSgpLmRhdGEoKSk7CisKKyAgICBpZiAodXJsLnByb3RvY29sSXMoImh0dHBzIikpCisgICAgICAg
IGVuYWJsZVNTTEZvckhvc3QobV91cmwuaG9zdCgpLnRvU3RyaW5nKCkpOwogfQogCiB2b2lkIEN1
cmxIYW5kbGU6OmFwcGVuZFJlcXVlc3RIZWFkZXJzKGNvbnN0IEhUVFBIZWFkZXJNYXAmIGhlYWRl
cnMpCkBAIC0zNjcsNyArNDMzLDcgQEAgdm9pZCBDdXJsSGFuZGxlOjplbmFibGVSZXF1ZXN0SGVh
ZGVycygpCiAKIHZvaWQgQ3VybEhhbmRsZTo6ZW5hYmxlSHR0cCgpCiB7Ci0gICAgaWYgKEN1cmxD
b250ZXh0OjpzaW5nbGV0b24oKS5pc0h0dHAyRW5hYmxlZCgpKSB7CisgICAgaWYgKG1fdXJsLnBy
b3RvY29sSXMoImh0dHBzIikgJiYgQ3VybENvbnRleHQ6OnNpbmdsZXRvbigpLmlzSHR0cDJFbmFi
bGVkKCkpIHsKICAgICAgICAgY3VybF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9IVFRQ
X1ZFUlNJT04sIENVUkxfSFRUUF9WRVJTSU9OXzJUTFMpOwogICAgICAgICBjdXJsX2Vhc3lfc2V0
b3B0KG1faGFuZGxlLCBDVVJMT1BUX1BJUEVXQUlULCAxTCk7CiAgICAgICAgIGN1cmxfZWFzeV9z
ZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfU1NMX0VOQUJMRV9BTFBOLCAxTCk7CkBAIC01NjAsNiAr
NjI2LDExIEBAIHZvaWQgQ3VybEhhbmRsZTo6c2V0U3NsQ3R4Q2FsbGJhY2tGdW5jdGlvbihjdXJs
X3NzbF9jdHhfY2FsbGJhY2sgY2FsbGJhY2tGdW5jLCB2CiAgICAgY3VybF9lYXN5X3NldG9wdCht
X2hhbmRsZSwgQ1VSTE9QVF9TU0xfQ1RYX0ZVTkNUSU9OLCBjYWxsYmFja0Z1bmMpOwogfQogCit2
b2lkIEN1cmxIYW5kbGU6OmVuYWJsZUNvbm5lY3Rpb25Pbmx5KCkKK3sKKyAgICBjdXJsX2Vhc3lf
c2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX0NPTk5FQ1RfT05MWSwgMUwpOworfQorCiBzdGQ6Om9w
dGlvbmFsPFN0cmluZz4gQ3VybEhhbmRsZTo6Z2V0UHJveHlVcmwoKQogewogICAgIGF1dG8mIHBy
b3h5ID0gQ3VybENvbnRleHQ6OnNpbmdsZXRvbigpLnByb3h5U2V0dGluZ3MoKTsKQEAgLTY5Miw2
ICs3NjMsMTQgQEAgc3RkOjpvcHRpb25hbDxOZXR3b3JrTG9hZE1ldHJpY3M+IEN1cmxIYW5kbGU6
OmdldE5ldHdvcmtMb2FkTWV0cmljcygpCiAgICAgcmV0dXJuIG5ldHdvcmtMb2FkTWV0cmljczsK
IH0KIAorc3RkOjpvcHRpb25hbDxDZXJ0aWZpY2F0ZUluZm8+IEN1cmxIYW5kbGU6OmNlcnRpZmlj
YXRlSW5mbygpIGNvbnN0Cit7CisgICAgaWYgKCFtX3NzbFZlcmlmaWVyKQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIG1fc3NsVmVyaWZpZXItPmNlcnRpZmljYXRl
SW5mbygpOworfQorCiBsb25nIGxvbmcgQ3VybEhhbmRsZTo6bWF4Q3VybE9mZlQoKQogewogICAg
IHN0YXRpYyBjb25zdCBsb25nIGxvbmcgbWF4Q3VybE9mZlQgPSAoMUxMIDw8IChleHBlY3RlZFNp
emVPZkN1cmxPZmZUKCkgKiA4IC0gMSkpIC0gMTsKQEAgLTcyNSw4ICs4MDQsOCBAQCB2b2lkIEN1
cmxIYW5kbGU6OmVuYWJsZVZlcmJvc2VJZlVzZWQoKQogCiB2b2lkIEN1cmxIYW5kbGU6OmVuYWJs
ZVN0ZEVycklmVXNlZCgpCiB7Ci0gICAgaWYgKEN1cmxDb250ZXh0OjpzaW5nbGV0b24oKS5nZXRM
b2dGaWxlKCkpCi0gICAgICAgIGN1cmxfZWFzeV9zZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfVkVS
Qk9TRSwgMSk7CisgICAgaWYgKGF1dG8gbG9nID0gQ3VybENvbnRleHQ6OnNpbmdsZXRvbigpLmdl
dExvZ0ZpbGUoKSkKKyAgICAgICAgY3VybF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9T
VERFUlIsIGxvZyk7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvQ3VybENvbnRleHQuaAppbmRleCA0ZmNmOWJlOWJkNS4uMjVhYTE4YmQ3
ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJs
Q29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJs
Q29udGV4dC5oCkBAIC0xOTQsNiArMTk0LDggQEAgcHJpdmF0ZToKIAogLy8gQ3VybEhhbmRsZSAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK2NsYXNz
IENlcnRpZmljYXRlSW5mbzsKK2NsYXNzIEN1cmxTU0xWZXJpZmllcjsKIGNsYXNzIEhUVFBIZWFk
ZXJNYXA7CiBjbGFzcyBOZXR3b3JrTG9hZE1ldHJpY3M7CiAKQEAgLTIxNSw4ICsyMTcsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB+Q3VybEhhbmRsZSgpOwogCiAgICAgQ1VSTCogaGFuZGxlKCkg
Y29uc3QgeyByZXR1cm4gbV9oYW5kbGU7IH0KLQotICAgIHZvaWQgaW5pdGlhbGl6ZSgpOworICAg
IGNvbnN0IFVSTCYgdXJsKCkgY29uc3QgeyByZXR1cm4gbV91cmw7IH0KIAogICAgIENVUkxjb2Rl
IHBlcmZvcm0oKTsKICAgICBDVVJMY29kZSBwYXVzZShpbnQpOwpAQCAtMjI2LDYgKzIyNyw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIGVuYWJsZVNoYXJlSGFuZGxlKCk7CiAKICAgICB2b2lkIHNldFVy
bChjb25zdCBVUkwmKTsKKyAgICB2b2lkIGVuYWJsZVNTTEZvckhvc3QoY29uc3QgU3RyaW5nJik7
CiAKICAgICB2b2lkIGFwcGVuZFJlcXVlc3RIZWFkZXJzKGNvbnN0IEhUVFBIZWFkZXJNYXAmKTsK
ICAgICB2b2lkIGFwcGVuZFJlcXVlc3RIZWFkZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIHZhbHVlKTsKQEAgLTI0Miw2ICsyNDQsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRJ
bkZpbGVTaXplTGFyZ2UoY3VybF9vZmZfdCk7CiAgICAgdm9pZCBzZXRIdHRwQ3VzdG9tUmVxdWVz
dChjb25zdCBTdHJpbmcmKTsKIAorICAgIHZvaWQgZW5hYmxlQ29ubmVjdGlvbk9ubHkoKTsKKwog
ICAgIHZvaWQgZW5hYmxlQWNjZXB0RW5jb2RpbmcoKTsKICAgICB2b2lkIGVuYWJsZUFsbG93ZWRQ
cm90b2NvbHMoKTsKIApAQCAtMjc4LDYgKzI4Miw5IEBAIHB1YmxpYzoKICAgICBzdGQ6Om9wdGlv
bmFsPGxvbmc+IGdldEh0dHBWZXJzaW9uKCk7CiAgICAgc3RkOjpvcHRpb25hbDxOZXR3b3JrTG9h
ZE1ldHJpY3M+IGdldE5ldHdvcmtMb2FkTWV0cmljcygpOwogCisgICAgaW50IHNzbEVycm9ycygp
IGNvbnN0OworICAgIHN0ZDo6b3B0aW9uYWw8Q2VydGlmaWNhdGVJbmZvPiBjZXJ0aWZpY2F0ZUlu
Zm8oKSBjb25zdDsKKwogICAgIHN0YXRpYyBsb25nIGxvbmcgbWF4Q3VybE9mZlQoKTsKIAogI2lm
bmRlZiBOREVCVUcKQEAgLTI4OSwxMCArMjk2LDE1IEBAIHByaXZhdGU6CiAgICAgdm9pZCBlbmFi
bGVSZXF1ZXN0SGVhZGVycygpOwogICAgIHN0YXRpYyBpbnQgZXhwZWN0ZWRTaXplT2ZDdXJsT2Zm
VCgpOwogCisgICAgc3RhdGljIENVUkxjb2RlIHdpbGxTZXR1cFNzbEN0eENhbGxiYWNrKENVUkwq
LCB2b2lkKiBzc2xDdHgsIHZvaWQqIHVzZXJEYXRhKTsKKyAgICBDVVJMY29kZSB3aWxsU2V0dXBT
c2xDdHgodm9pZCogc3NsQ3R4KTsKKwogICAgIENVUkwqIG1faGFuZGxlIHsgbnVsbHB0ciB9Owog
ICAgIGNoYXIgbV9lcnJvckJ1ZmZlcltDVVJMX0VSUk9SX1NJWkVdIHsgfTsKIAorICAgIFVSTCBt
X3VybDsKICAgICBDdXJsU0xpc3QgbV9yZXF1ZXN0SGVhZGVyczsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8Q3VybFNTTFZlcmlmaWVyPiBtX3NzbFZlcmlmaWVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJs
L0N1cmxSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9D
dXJsUmVxdWVzdC5jcHAKaW5kZXggMGJkYWU5NGU3ZGQuLmYxZTc0NDkwNjAyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFJlcXVlc3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVxdWVzdC5jcHAK
QEAgLTE0Niw5ICsxNDYsOCBAQCB2b2lkIEN1cmxSZXF1ZXN0OjpyZXN1bWUoKQogdm9pZCBDdXJs
UmVxdWVzdDo6Y2FsbENsaWVudChGdW5jdGlvbjx2b2lkKEN1cmxSZXF1ZXN0JiwgQ3VybFJlcXVl
c3RDbGllbnQmKT4mJiB0YXNrKQogewogICAgIHJ1bk9uTWFpblRocmVhZChbdGhpcywgcHJvdGVj
dGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCB0YXNrID0gV1RGTW92ZSh0YXNrKV0oKSBtdXRhYmxl
IHsKLSAgICAgICAgaWYgKEN1cmxSZXF1ZXN0Q2xpZW50KiBjbGllbnQgPSBtX2NsaWVudCkgewor
ICAgICAgICBpZiAoQ3VybFJlcXVlc3RDbGllbnQqIGNsaWVudCA9IG1fY2xpZW50KQogICAgICAg
ICAgICAgdGFzaygqdGhpcywgbWFrZVJlZigqY2xpZW50KSk7Ci0gICAgICAgIH0KICAgICB9KTsK
IH0KIApAQCAtMTc3LDggKzE3Niw4IEBAIENVUkwqIEN1cmxSZXF1ZXN0OjpzZXR1cFRyYW5zZmVy
KCkKIAogICAgIG1fY3VybEhhbmRsZSA9IHN0ZDo6bWFrZV91bmlxdWU8Q3VybEhhbmRsZT4oKTsK
IAotICAgIG1fY3VybEhhbmRsZS0+aW5pdGlhbGl6ZSgpOwogICAgIG1fY3VybEhhbmRsZS0+c2V0
VXJsKG1fcmVxdWVzdC51cmwoKSk7CisKICAgICBtX2N1cmxIYW5kbGUtPmFwcGVuZFJlcXVlc3RI
ZWFkZXJzKGh0dHBIZWFkZXJGaWVsZHMpOwogCiAgICAgY29uc3QgYXV0byYgbWV0aG9kID0gbV9y
ZXF1ZXN0Lmh0dHBNZXRob2QoKTsKQEAgLTIwMCw2MyArMTk5LDE3IEBAIENVUkwqIEN1cmxSZXF1
ZXN0OjpzZXR1cFRyYW5zZmVyKCkKICAgICAgICAgbV9jdXJsSGFuZGxlLT5zZXRIdHRwQXV0aFVz
ZXJQYXNzKG1fdXNlciwgbV9wYXNzd29yZCk7CiAgICAgfQogCi0gICAgbV9jdXJsSGFuZGxlLT5z
ZXRTc2xDdHhDYWxsYmFja0Z1bmN0aW9uKHdpbGxTZXR1cFNzbEN0eENhbGxiYWNrLCB0aGlzKTsK
ICAgICBtX2N1cmxIYW5kbGUtPnNldEhlYWRlckNhbGxiYWNrRnVuY3Rpb24oZGlkUmVjZWl2ZUhl
YWRlckNhbGxiYWNrLCB0aGlzKTsKICAgICBtX2N1cmxIYW5kbGUtPnNldFdyaXRlQ2FsbGJhY2tG
dW5jdGlvbihkaWRSZWNlaXZlRGF0YUNhbGxiYWNrLCB0aGlzKTsKIAotICAgIG1fY3VybEhhbmRs
ZS0+ZW5hYmxlU2hhcmVIYW5kbGUoKTsKLSAgICBtX2N1cmxIYW5kbGUtPmVuYWJsZUFsbG93ZWRQ
cm90b2NvbHMoKTsKLSAgICBtX2N1cmxIYW5kbGUtPmVuYWJsZUFjY2VwdEVuY29kaW5nKCk7Ci0K
ICAgICBtX2N1cmxIYW5kbGUtPnNldFRpbWVvdXQoU2Vjb25kcyhtX3JlcXVlc3QudGltZW91dElu
dGVydmFsKCkpKTsKLSAgICBtX2N1cmxIYW5kbGUtPnNldERuc0NhY2hlVGltZW91dChDdXJsQ29u
dGV4dDo6c2luZ2xldG9uKCkuZG5zQ2FjaGVUaW1lb3V0KCkpOwotICAgIG1fY3VybEhhbmRsZS0+
c2V0Q29ubmVjdFRpbWVvdXQoQ3VybENvbnRleHQ6OnNpbmdsZXRvbigpLmNvbm5lY3RUaW1lb3V0
KCkpOwotCi0gICAgbV9jdXJsSGFuZGxlLT5lbmFibGVQcm94eUlmRXhpc3RzKCk7Ci0KLSAgICBp
ZiAoc3NsSGFuZGxlLnNob3VsZElnbm9yZVNTTEVycm9ycygpKSB7Ci0gICAgICAgIG1fY3VybEhh
bmRsZS0+c2V0U3NsVmVyaWZ5UGVlcihDdXJsSGFuZGxlOjpWZXJpZnlQZWVyOjpEaXNhYmxlKTsK
LSAgICAgICAgbV9jdXJsSGFuZGxlLT5zZXRTc2xWZXJpZnlIb3N0KEN1cmxIYW5kbGU6OlZlcmlm
eUhvc3Q6Okxvb3NlTmFtZUNoZWNrKTsKLSAgICB9IGVsc2UgewotICAgICAgICBtX2N1cmxIYW5k
bGUtPnNldFNzbFZlcmlmeVBlZXIoQ3VybEhhbmRsZTo6VmVyaWZ5UGVlcjo6RW5hYmxlKTsKLSAg
ICAgICAgbV9jdXJsSGFuZGxlLT5zZXRTc2xWZXJpZnlIb3N0KEN1cmxIYW5kbGU6OlZlcmlmeUhv
c3Q6OlN0cmljdE5hbWVDaGVjayk7Ci0gICAgfQotCi0gICAgYXV0byBjaXBoZXJMaXN0ID0gc3Ns
SGFuZGxlLmdldENpcGhlckxpc3QoKTsKLSAgICBpZiAoIWNpcGhlckxpc3QuaXNFbXB0eSgpKQot
ICAgICAgICBtX2N1cmxIYW5kbGUtPnNldFNzbENpcGhlckxpc3QoY2lwaGVyTGlzdC51dGY4KCku
ZGF0YSgpKTsKLQotICAgIGF1dG8gc3NsQ2xpZW50Q2VydGlmaWNhdGUgPSBzc2xIYW5kbGUuZ2V0
U1NMQ2xpZW50Q2VydGlmaWNhdGUobV9yZXF1ZXN0LnVybCgpLmhvc3QoKS50b1N0cmluZygpKTsK
LSAgICBpZiAoc3NsQ2xpZW50Q2VydGlmaWNhdGUpIHsKLSAgICAgICAgbV9jdXJsSGFuZGxlLT5z
ZXRTc2xDZXJ0KHNzbENsaWVudENlcnRpZmljYXRlLT5maXJzdC51dGY4KCkuZGF0YSgpKTsKLSAg
ICAgICAgbV9jdXJsSGFuZGxlLT5zZXRTc2xDZXJ0VHlwZSgiUDEyIik7Ci0gICAgICAgIG1fY3Vy
bEhhbmRsZS0+c2V0U3NsS2V5UGFzc3dvcmQoc3NsQ2xpZW50Q2VydGlmaWNhdGUtPnNlY29uZC51
dGY4KCkuZGF0YSgpKTsKLSAgICB9Ci0KLSAgICBpZiAoYXV0byBwYXRoID0gV1RGOjpnZXRfaWY8
U3RyaW5nPihzc2xIYW5kbGUuZ2V0Q0FDZXJ0SW5mbygpKSkKLSAgICAgICAgbV9jdXJsSGFuZGxl
LT5zZXRDQUNlcnRQYXRoKHBhdGgtPnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgaWYgKG1fc2hvdWxk
U3VzcGVuZCkKICAgICAgICAgc2V0UmVxdWVzdFBhdXNlZCh0cnVlKTsKIAotI2lmbmRlZiBOREVC
VUcKLSAgICBtX2N1cmxIYW5kbGUtPmVuYWJsZVZlcmJvc2VJZlVzZWQoKTsKLSAgICBtX2N1cmxI
YW5kbGUtPmVuYWJsZVN0ZEVycklmVXNlZCgpOwotI2VuZGlmCi0KICAgICByZXR1cm4gbV9jdXJs
SGFuZGxlLT5oYW5kbGUoKTsKIH0KIAotQ1VSTGNvZGUgQ3VybFJlcXVlc3Q6OndpbGxTZXR1cFNz
bEN0eCh2b2lkKiBzc2xDdHgpCi17Ci0gICAgaWYgKCFzc2xDdHgpCi0gICAgICAgIHJldHVybiBD
VVJMRV9BQk9SVEVEX0JZX0NBTExCQUNLOwotCi0gICAgaWYgKCFtX3NzbFZlcmlmaWVyKQotICAg
ICAgICBtX3NzbFZlcmlmaWVyID0gc3RkOjptYWtlX3VuaXF1ZTxDdXJsU1NMVmVyaWZpZXI+KG1f
Y3VybEhhbmRsZS5nZXQoKSwgbV9yZXF1ZXN0LnVybCgpLmhvc3QoKS50b1N0cmluZygpLCBzc2xD
dHgpOwotICAgIHJldHVybiBDVVJMRV9PSzsKLX0KLQogLy8gVGhpcyBpcyBjYWxsZWQgdG8gb2J0
YWluIEhUVFAgUE9TVCBvciBQVVQgZGF0YS4KIC8vIEl0ZXJhdGUgdGhyb3VnaCBGb3JtRGF0YSBl
bGVtZW50cyBhbmQgdXBsb2FkIGZpbGVzLgogLy8gQ2FyZWZ1bGx5IHJlc3BlY3QgdGhlIGdpdmVu
IGJ1ZmZlciBzaXplIGFuZCBmaWxsIHRoZSByZXN0IG9mIHRoZSBkYXRhIGF0IHRoZSBuZXh0IGNh
bGxzLgpAQCAtMzUyLDggKzMwNSw4IEBAIHNpemVfdCBDdXJsUmVxdWVzdDo6ZGlkUmVjZWl2ZUhl
YWRlcihTdHJpbmcmJiBoZWFkZXIpCiAgICAgaWYgKG1fcmVzcG9uc2UuYXZhaWxhYmxlUHJveHlB
dXRoKQogICAgICAgICBDdXJsQ29udGV4dDo6c2luZ2xldG9uKCkuc2V0UHJveHlBdXRoTWV0aG9k
KG1fcmVzcG9uc2UuYXZhaWxhYmxlUHJveHlBdXRoKTsKIAotICAgIGlmIChtX3NzbFZlcmlmaWVy
KQotICAgICAgICBtX2NlcnRpZmljYXRlSW5mbyA9IG1fc3NsVmVyaWZpZXItPmNlcnRpZmljYXRl
SW5mbygpOworICAgIGlmIChhdXRvIGluZm8gPSBtX2N1cmxIYW5kbGUtPmNlcnRpZmljYXRlSW5m
bygpKQorICAgICAgICBtX2NlcnRpZmljYXRlSW5mbyA9ICppbmZvOwogCiAgICAgaWYgKG1fZW5h
YmxlTXVsdGlwYXJ0KQogICAgICAgICBtX211bHRpcGFydEhhbmRsZSA9IEN1cmxNdWx0aXBhcnRI
YW5kbGU6OmNyZWF0ZUlmTmVlZGVkKCp0aGlzLCBtX3Jlc3BvbnNlKTsKQEAgLTQ2MywxMSArNDE2
LDEwIEBAIHZvaWQgQ3VybFJlcXVlc3Q6OmRpZENvbXBsZXRlVHJhbnNmZXIoQ1VSTGNvZGUgcmVz
dWx0KQogICAgIH0gZWxzZSB7CiAgICAgICAgIGF1dG8gdHlwZSA9IChyZXN1bHQgPT0gQ1VSTEVf
T1BFUkFUSU9OX1RJTUVET1VUICYmIG1fcmVxdWVzdC50aW1lb3V0SW50ZXJ2YWwoKSA+IDAuMCkg
PyBSZXNvdXJjZUVycm9yOjpUeXBlOjpUaW1lb3V0IDogUmVzb3VyY2VFcnJvcjo6VHlwZTo6R2Vu
ZXJhbDsKICAgICAgICAgYXV0byByZXNvdXJjZUVycm9yID0gUmVzb3VyY2VFcnJvcjo6aHR0cEVy
cm9yKHJlc3VsdCwgbV9yZXF1ZXN0LnVybCgpLCB0eXBlKTsKLSAgICAgICAgaWYgKG1fc3NsVmVy
aWZpZXIpIHsKLSAgICAgICAgICAgIHJlc291cmNlRXJyb3Iuc2V0U3NsRXJyb3JzKG1fc3NsVmVy
aWZpZXItPnNzbEVycm9ycygpKTsKLQotICAgICAgICAgICAgbV9jZXJ0aWZpY2F0ZUluZm8gPSBt
X3NzbFZlcmlmaWVyLT5jZXJ0aWZpY2F0ZUluZm8oKTsKLSAgICAgICAgfQorICAgICAgICBpZiAo
YXV0byBzc2xFcnJvcnMgPSBtX2N1cmxIYW5kbGUtPnNzbEVycm9ycygpKQorICAgICAgICAgICAg
cmVzb3VyY2VFcnJvci5zZXRTc2xFcnJvcnMoc3NsRXJyb3JzKTsKKyAgICAgICAgaWYgKGF1dG8g
aW5mbyA9IG1fY3VybEhhbmRsZS0+Y2VydGlmaWNhdGVJbmZvKCkpCisgICAgICAgICAgICBtX2Nl
cnRpZmljYXRlSW5mbyA9ICppbmZvOwogCiAgICAgICAgIGZpbmFsaXplVHJhbnNmZXIoKTsKICAg
ICAgICAgY2FsbENsaWVudChbZXJyb3IgPSByZXNvdXJjZUVycm9yLmlzb2xhdGVkQ29weSgpXShD
dXJsUmVxdWVzdCYgcmVxdWVzdCwgQ3VybFJlcXVlc3RDbGllbnQmIGNsaWVudCkgewpAQCAtNDg2
LDcgKzQzOCw2IEBAIHZvaWQgQ3VybFJlcXVlc3Q6OmZpbmFsaXplVHJhbnNmZXIoKQogewogICAg
IGNsb3NlRG93bmxvYWRGaWxlKCk7CiAgICAgbV9mb3JtRGF0YVN0cmVhbS5jbGVhbigpOwotICAg
IG1fc3NsVmVyaWZpZXIgPSBudWxscHRyOwogICAgIG1fbXVsdGlwYXJ0SGFuZGxlID0gbnVsbHB0
cjsKICAgICBtX2N1cmxIYW5kbGUgPSBudWxscHRyOwogfQpAQCAtNzQzLDExICs2OTQsNiBAQCB2
b2lkIEN1cmxSZXF1ZXN0OjpjbGVhbnVwRG93bmxvYWRGaWxlKCkKICAgICB9CiB9CiAKLUNVUkxj
b2RlIEN1cmxSZXF1ZXN0Ojp3aWxsU2V0dXBTc2xDdHhDYWxsYmFjayhDVVJMKiwgdm9pZCogc3Ns
Q3R4LCB2b2lkKiB1c2VyRGF0YSkKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q3VybFJlcXVl
c3QqPih1c2VyRGF0YSktPndpbGxTZXR1cFNzbEN0eChzc2xDdHgpOwotfQotCiBzaXplX3QgQ3Vy
bFJlcXVlc3Q6OndpbGxTZW5kRGF0YUNhbGxiYWNrKGNoYXIqIHB0ciwgc2l6ZV90IGJsb2NrU2l6
ZSwgc2l6ZV90IG51bWJlck9mQmxvY2tzLCB2b2lkKiB1c2VyRGF0YSkKIHsKICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Q3VybFJlcXVlc3QqPih1c2VyRGF0YSktPndpbGxTZW5kRGF0YShwdHIsIGJs
b2NrU2l6ZSwgbnVtYmVyT2ZCbG9ja3MpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL0N1cmxSZXF1ZXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvQ3VybFJlcXVlc3QuaAppbmRleCA1OWQ4MGQ3MTQ3NS4uZWRlNzM0MzEy
MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJs
UmVxdWVzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJs
UmVxdWVzdC5oCkBAIC0xMTMsNyArMTEzLDYgQEAgcHJpdmF0ZToKICAgICAvLyBUcmFuc2ZlciBw
cm9jZXNzaW5nIG9mIFJlcXVlc3QgYm9keSwgUmVzcG9uc2UgaGVhZGVyL2JvZHkKICAgICAvLyBD
YWxsZWQgYnkgd29ya2VyIHRocmVhZCBpbiBjYXNlIG9mIGFzeW5jLCBtYWluIHRocmVhZCBpbiBj
YXNlIG9mIHN5bmMuCiAgICAgQ1VSTCogc2V0dXBUcmFuc2ZlcigpIG92ZXJyaWRlOwotICAgIENV
Ukxjb2RlIHdpbGxTZXR1cFNzbEN0eCh2b2lkKik7CiAgICAgc2l6ZV90IHdpbGxTZW5kRGF0YShj
aGFyKiwgc2l6ZV90LCBzaXplX3QpOwogICAgIHNpemVfdCBkaWRSZWNlaXZlSGVhZGVyKFN0cmlu
ZyYmKTsKICAgICBzaXplX3QgZGlkUmVjZWl2ZURhdGEoUmVmPFNoYXJlZEJ1ZmZlcj4mJik7CkBA
IC0xNDgsNyArMTQ3LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNsZWFudXBEb3dubG9hZEZpbGUo
KTsKIAogICAgIC8vIENhbGxiYWNrIGZ1bmN0aW9ucyBmb3IgY3VybAotICAgIHN0YXRpYyBDVVJM
Y29kZSB3aWxsU2V0dXBTc2xDdHhDYWxsYmFjayhDVVJMKiwgdm9pZCosIHZvaWQqKTsKICAgICBz
dGF0aWMgc2l6ZV90IHdpbGxTZW5kRGF0YUNhbGxiYWNrKGNoYXIqLCBzaXplX3QsIHNpemVfdCwg
dm9pZCopOwogICAgIHN0YXRpYyBzaXplX3QgZGlkUmVjZWl2ZUhlYWRlckNhbGxiYWNrKGNoYXIq
LCBzaXplX3QsIHNpemVfdCwgdm9pZCopOwogICAgIHN0YXRpYyBzaXplX3QgZGlkUmVjZWl2ZURh
dGFDYWxsYmFjayhjaGFyKiwgc2l6ZV90LCBzaXplX3QsIHZvaWQqKTsKQEAgLTE2Nyw3ICsxNjUs
NiBAQCBwcml2YXRlOgogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEN1cmxIYW5kbGU+IG1fY3VybEhh
bmRsZTsKICAgICBDdXJsRm9ybURhdGFTdHJlYW0gbV9mb3JtRGF0YVN0cmVhbTsKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8Q3VybFNTTFZlcmlmaWVyPiBtX3NzbFZlcmlmaWVyOwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxDdXJsTXVsdGlwYXJ0SGFuZGxlPiBtX211bHRpcGFydEhhbmRsZTsKIAogICAgIEN1
cmxSZXNwb25zZSBtX3Jlc3BvbnNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jdXJsL0N1cmxTU0xWZXJpZmllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFNTTFZlcmlmaWVyLmNwcAppbmRleCBhNDdjZjhmMTQ4ZS4u
N2MwYWYxMTJlNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y3VybC9DdXJsU1NMVmVyaWZpZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY3VybC9DdXJsU1NMVmVyaWZpZXIuY3BwCkBAIC0zNCwxMiArMzQsMTEgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgVmVjdG9yPENlcnRpZmljYXRlSW5mbzo6Q2VydGlm
aWNhdGU+IHBlbURhdGFGcm9tQ3R4KFg1MDlfU1RPUkVfQ1RYKik7CitzdGF0aWMgVmVjdG9yPENl
cnRpZmljYXRlSW5mbzo6Q2VydGlmaWNhdGU+IHBlbURhdGFGcm9tQ3R4KFg1MDlTdG9yZUNUWCop
Owogc3RhdGljIEN1cmxTU0xWZXJpZmllcjo6U1NMQ2VydGlmaWNhdGVGbGFncyBjb252ZXJ0VG9T
U0xDZXJ0aWZpY2F0ZUZsYWdzKHVuc2lnbmVkKTsKIAotQ3VybFNTTFZlcmlmaWVyOjpDdXJsU1NM
VmVyaWZpZXIoQ3VybEhhbmRsZSogY3VybEhhbmRsZSwgY29uc3QgU3RyaW5nJiBob3N0TmFtZSwg
dm9pZCogc3NsQ3R4KQorQ3VybFNTTFZlcmlmaWVyOjpDdXJsU1NMVmVyaWZpZXIoQ3VybEhhbmRs
ZSYgY3VybEhhbmRsZSwgdm9pZCogc3NsQ3R4KQogICAgIDogbV9jdXJsSGFuZGxlKGN1cmxIYW5k
bGUpCi0gICAgLCBtX2hvc3ROYW1lKGhvc3ROYW1lKQogewogICAgIGF1dG8qIGN0eCA9IHN0YXRp
Y19jYXN0PFNTTF9DVFgqPihzc2xDdHgpOwogICAgIGNvbnN0IGF1dG8mIHNzbEhhbmRsZSA9IEN1
cmxDb250ZXh0OjpzaW5nbGV0b24oKS5zc2xIYW5kbGUoKTsKQEAgLTQ4LDcgKzQ3LDcgQEAgQ3Vy
bFNTTFZlcmlmaWVyOjpDdXJsU1NMVmVyaWZpZXIoQ3VybEhhbmRsZSogY3VybEhhbmRsZSwgY29u
c3QgU3RyaW5nJiBob3N0TmFtZSwKICAgICBTU0xfQ1RYX3NldF92ZXJpZnkoY3R4LCBTU0xfQ1RY
X2dldF92ZXJpZnlfbW9kZShjdHgpLCB2ZXJpZnlDYWxsYmFjayk7CiAKICNpZiBkZWZpbmVkKExJ
QlJFU1NMX1ZFUlNJT05fTlVNQkVSKQotICAgIGlmIChhdXRvIGRhdGEgPSBXVEY6OmdldF9pZjxW
ZWN0b3I8Y2hhcj4+KHNzbEhhbmRsZS5nZXRDQUNlcnRJbmZvKCkpKQorICAgIGlmIChhdXRvKiBk
YXRhID0gV1RGOjpnZXRfaWY8VmVjdG9yPGNoYXI+Pihzc2xIYW5kbGUuZ2V0Q0FDZXJ0SW5mbygp
KSkKICAgICAgICAgU1NMX0NUWF9sb2FkX3ZlcmlmeV9tZW0oY3R4LCBzdGF0aWNfY2FzdDx2b2lk
Kj4oY29uc3RfY2FzdDxjaGFyKj4oZGF0YS0+ZGF0YSgpKSksIGRhdGEtPnNpemUoKSk7CiAjZW5k
aWYKIApAQCAtNjMsMTAgKzYyLDEwIEBAIEN1cmxTU0xWZXJpZmllcjo6Q3VybFNTTFZlcmlmaWVy
KEN1cmxIYW5kbGUqIGN1cmxIYW5kbGUsIGNvbnN0IFN0cmluZyYgaG9zdE5hbWUsCiAgICAgICAg
IFNTTF9DVFhfc2V0MV9jdXJ2ZXNfbGlzdChjdHgsIGN1cnZlc0xpc3QudXRmOCgpLmRhdGEoKSk7
CiB9CiAKLWJvb2wgQ3VybFNTTFZlcmlmaWVyOjp2ZXJpZnkoWDUwOV9TVE9SRV9DVFgqIGN0eCkK
K2Jvb2wgQ3VybFNTTFZlcmlmaWVyOjp2ZXJpZnkoWDUwOVN0b3JlQ1RYKiBjdHgpCiB7CiAgICAg
Ly8gd2hldGhlciB0aGUgdmVyaWZpY2F0aW9uIG9mIHRoZSBjZXJ0aWZpY2F0ZSBpbiBxdWVzdGlv
biB3YXMgcGFzc2VkIChwcmV2ZXJpZnlfb2s9MSkgb3Igbm90IChwcmV2ZXJpZnlfb2s9MCkKLSAg
ICBtX2NlcnRpZmljYXRlSW5mbyA9IENlcnRpZmljYXRlSW5mbyB7IFg1MDlfU1RPUkVfQ1RYX2dl
dF9lcnJvcihjdHgpLCBwZW1EYXRhRnJvbUN0eChjdHgpIH07CisgICAgbV9jZXJ0aWZpY2F0ZUlu
Zm8gPSBDZXJ0aWZpY2F0ZUluZm8geyBYNTA5U3RvcmVDVFhfZ2V0X2Vycm9yKGN0eCksIHBlbURh
dGFGcm9tQ3R4KGN0eCkgfTsKIAogICAgIGF1dG8gZXJyb3IgPSBtX2NlcnRpZmljYXRlSW5mby52
ZXJpZmljYXRpb25FcnJvcigpOwogICAgIGlmICghZXJyb3IpCkBAIC03NSwyNCArNzQsMjMgQEAg
Ym9vbCBDdXJsU1NMVmVyaWZpZXI6OnZlcmlmeShYNTA5X1NUT1JFX0NUWCogY3R4KQogICAgIG1f
c3NsRXJyb3JzID0gc3RhdGljX2Nhc3Q8aW50Pihjb252ZXJ0VG9TU0xDZXJ0aWZpY2F0ZUZsYWdz
KGVycm9yKSk7CiAKICNpZiBQTEFURk9STShXSU4pCi0gICAgYm9vbCBvayA9IEN1cmxDb250ZXh0
OjpzaW5nbGV0b24oKS5zc2xIYW5kbGUoKS5pc0FsbG93ZWRIVFRQU0NlcnRpZmljYXRlSG9zdCht
X2hvc3ROYW1lKTsKKyAgICBib29sIG9rID0gQ3VybENvbnRleHQ6OnNpbmdsZXRvbigpLnNzbEhh
bmRsZSgpLmlzQWxsb3dlZEhUVFBTQ2VydGlmaWNhdGVIb3N0KG1fY3VybEhhbmRsZS51cmwoKS5o
b3N0KCkudG9TdHJpbmcoKSk7CiAjZWxzZQotICAgIGJvb2wgb2sgPSBDdXJsQ29udGV4dDo6c2lu
Z2xldG9uKCkuc3NsSGFuZGxlKCkuY2FuSWdub3JlZEhUVFBTQ2VydGlmaWNhdGUobV9ob3N0TmFt
ZSwgbV9jZXJ0aWZpY2F0ZUluZm8uY2VydGlmaWNhdGVDaGFpbigpKTsKKyAgICBib29sIG9rID0g
Q3VybENvbnRleHQ6OnNpbmdsZXRvbigpLnNzbEhhbmRsZSgpLmNhbklnbm9yZWRIVFRQU0NlcnRp
ZmljYXRlKG1fY3VybEhhbmRsZS51cmwoKS5ob3N0KCkudG9TdHJpbmcoKSwgbV9jZXJ0aWZpY2F0
ZUluZm8uY2VydGlmaWNhdGVDaGFpbigpKTsKICNlbmRpZgogCiAgICAgaWYgKG9rKSB7CiAgICAg
ICAgIC8vIGlmIHRoZSBob3N0IGFuZCB0aGUgY2VydGlmaWNhdGUgYXJlIHN0b3JlZCBmb3IgdGhl
IGN1cnJlbnQgaGFuZGxlIHRoYXQgbWVhbnMgaXMgZW5hYmxlZCwKICAgICAgICAgLy8gc28gZG9u
J3QgbmVlZCB0byBjdXJsIHZlcmlmaWVzIHRoZSBhdXRoZW50aWNpdHkgb2YgdGhlIHBlZXIncyBj
ZXJ0aWZpY2F0ZQotICAgICAgICBpZiAobV9jdXJsSGFuZGxlKQotICAgICAgICAgICAgbV9jdXJs
SGFuZGxlLT5zZXRTc2xWZXJpZnlQZWVyKEN1cmxIYW5kbGU6OlZlcmlmeVBlZXI6OkRpc2FibGUp
OworICAgICAgICBtX2N1cmxIYW5kbGUuc2V0U3NsVmVyaWZ5UGVlcihDdXJsSGFuZGxlOjpWZXJp
ZnlQZWVyOjpEaXNhYmxlKTsKICAgICB9CiAKICAgICByZXR1cm4gb2s7CiB9CiAKLWludCBDdXJs
U1NMVmVyaWZpZXI6OnZlcmlmeUNhbGxiYWNrKGludCBvaywgWDUwOV9TVE9SRV9DVFgqIGN0eCkK
K2ludCBDdXJsU1NMVmVyaWZpZXI6OnZlcmlmeUNhbGxiYWNrKGludCBvaywgWDUwOVN0b3JlQ1RY
KiBjdHgpCiB7Ci0gICAgYXV0byBzc2wgPSBzdGF0aWNfY2FzdDxTU0wqPihYNTA5X1NUT1JFX0NU
WF9nZXRfZXhfZGF0YShjdHgsIFNTTF9nZXRfZXhfZGF0YV9YNTA5X1NUT1JFX0NUWF9pZHgoKSkp
OworICAgIGF1dG8gc3NsID0gc3RhdGljX2Nhc3Q8U1NMKj4oWDUwOVN0b3JlQ1RYX2dldF9leF9k
YXRhKGN0eCwgU1NMX2dldF9leF9kYXRhX1g1MDlTdG9yZUNUWF9pZHgoKSkpOwogICAgIGF1dG8g
c3NsQ3R4ID0gU1NMX2dldF9TU0xfQ1RYKHNzbCk7CiAgICAgYXV0byB2ZXJpZmllciA9IHN0YXRp
Y19jYXN0PEN1cmxTU0xWZXJpZmllcio+KFNTTF9DVFhfZ2V0X2FwcF9kYXRhKHNzbEN0eCkpOwog
CkBAIC0xMDIsOCArMTAwLDggQEAgaW50IEN1cmxTU0xWZXJpZmllcjo6dmVyaWZ5Q2FsbGJhY2so
aW50IG9rLCBYNTA5X1NUT1JFX0NUWCogY3R4KQogCiBjbGFzcyBTdGFja09mWDUwOSB7CiBwdWJs
aWM6Ci0gICAgZXhwbGljaXQgU3RhY2tPZlg1MDkoWDUwOV9TVE9SRV9DVFgqIGN0eCkKLSAgICAg
ICAgOiBtX2NlcnRzIHsgWDUwOV9TVE9SRV9DVFhfZ2V0MV9jaGFpbihjdHgpIH0KKyAgICBleHBs
aWNpdCBTdGFja09mWDUwOShYNTA5U3RvcmVDVFgqIGN0eCkKKyAgICAgICAgOiBtX2NlcnRzIHsg
WDUwOVN0b3JlQ1RYX2dldDFfY2hhaW4oY3R4KSB9CiAgICAgewogICAgIH0KIApAQCAtMTQ5LDcg
KzE0Nyw3IEBAIHByaXZhdGU6CiAgICAgQklPKiBtX2JpbyB7IG51bGxwdHIgfTsKIH07CiAKLXN0
YXRpYyBWZWN0b3I8Q2VydGlmaWNhdGVJbmZvOjpDZXJ0aWZpY2F0ZT4gcGVtRGF0YUZyb21DdHgo
WDUwOV9TVE9SRV9DVFgqIGN0eCkKK3N0YXRpYyBWZWN0b3I8Q2VydGlmaWNhdGVJbmZvOjpDZXJ0
aWZpY2F0ZT4gcGVtRGF0YUZyb21DdHgoWDUwOVN0b3JlQ1RYKiBjdHgpCiB7CiAgICAgVmVjdG9y
PENlcnRpZmljYXRlSW5mbzo6Q2VydGlmaWNhdGU+IHJlc3VsdDsKICAgICBTdGFja09mWDUwOSBj
ZXJ0cyB7IGN0eCB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL0N1cmxTU0xWZXJpZmllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL0N1cmxTU0xWZXJpZmllci5oCmluZGV4IDQ4YTY1NDMzZDYwLi5kNTFlNWZkNzBhMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxTU0xW
ZXJpZmllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJs
U1NMVmVyaWZpZXIuaApAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCiBzdHJ1Y3QgeDUwOV9zdG9yZV9jdHhfc3Q7Ci10eXBlZGVmIHN0cnVjdCB4NTA5
X3N0b3JlX2N0eF9zdCBYNTA5X1NUT1JFX0NUWDsKK3R5cGVkZWYgc3RydWN0IHg1MDlfc3RvcmVf
Y3R4X3N0IFg1MDlTdG9yZUNUWDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01MCwyMSAr
NTAsMjAgQEAgcHVibGljOgogICAgICAgICBTU0xfQ0VSVElGSUNBVEVfR0VORVJJQ19FUlJPUiA9
ICgxIDw8IDYpIC8vIFNvbWUgb3RoZXIgZXJyb3Igb2NjdXJyZWQgdmFsaWRhdGluZyB0aGUgY2Vy
dGlmaWNhdGUKICAgICB9OwogCi0gICAgQ3VybFNTTFZlcmlmaWVyKEN1cmxIYW5kbGUqLCBjb25z
dCBTdHJpbmcmIGhvc3ROYW1lLCB2b2lkKiBzc2xDdHgpOworICAgIEN1cmxTU0xWZXJpZmllcihD
dXJsSGFuZGxlJiwgdm9pZCogc3NsQ3R4KTsKIAogICAgIGludCBzc2xFcnJvcnMoKSB7IHJldHVy
biBtX3NzbEVycm9yczsgfQogICAgIGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJ
bmZvKCkgY29uc3QgeyByZXR1cm4gbV9jZXJ0aWZpY2F0ZUluZm87IH0KIAogcHJpdmF0ZToKLSAg
ICBzdGF0aWMgaW50IHZlcmlmeUNhbGxiYWNrKGludCwgWDUwOV9TVE9SRV9DVFgqKTsKKyAgICBz
dGF0aWMgaW50IHZlcmlmeUNhbGxiYWNrKGludCwgWDUwOVN0b3JlQ1RYKik7CiAKLSAgICBDdXJs
SGFuZGxlKiBtX2N1cmxIYW5kbGUgeyB9OwotICAgIFN0cmluZyBtX2hvc3ROYW1lOworICAgIEN1
cmxIYW5kbGUmIG1fY3VybEhhbmRsZTsKIAogICAgIGludCBtX3NzbEVycm9ycyB7IDAgfTsKICAg
ICBDZXJ0aWZpY2F0ZUluZm8gbV9jZXJ0aWZpY2F0ZUluZm87CiAKLSAgICBib29sIHZlcmlmeShY
NTA5X1NUT1JFX0NUWCopOworICAgIGJvb2wgdmVyaWZ5KFg1MDlTdG9yZUNUWCopOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>344640</attachid>
            <date>2018-07-09 16:58:48 -0700</date>
            <delta_ts>2018-07-12 10:47:56 -0700</delta_ts>
            <desc>FIX</desc>
            <filename>187427.diff</filename>
            <type>text/plain</type>
            <size>21270</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4OTU0NTg5YTNjNC4uOGZjMDI5NGJhMWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NCBAQAorMjAxOC0wNy0wOSAgQmFzdWtlIFN1enVraSAgPEJhc3VrZS5TdXp1a2lAc29u
eS5jb20+CisKKyAgICAgICAgW0N1cmxdIE1vdmUgSFRUUCBTZXR1cCBsb2dpYyBmcm9tIEN1cmxS
ZXF1ZXN0IHRvIEN1cmxIYW5kbGUgZm9yIHJldXNlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg3NDI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQ3VybENvbnRleHQgd2lsbCBiZSB1c2VkIGJ5IFNlY3Vy
ZSBXZWJTb2NrZXQgY2xpZW50LCBidXQgSFRUUCBzZXR1cCBjb2RlIGlzCisgICAgICAgIGluIEN1
cmxSZXF1ZXN0LCB3aGljaCBpcyBvbmx5IGZvciByZWd1bGFyIEhUVFAvSFRUUFMgdHJhbnNhY2N0
aW9uLiBUaGlzIHBhdGNoCisgICAgICAgIGFsbG93cyB3c3MgY2xpZW50IHRvIHNldHVwIEN1cmxI
YW5kbGUgZm9yIEhUVFBTIGNvbW11bmljYXRpb24sIHN1Y2ggYXMgVExTLAorICAgICAgICBwcm94
eSBvciBhdXRoZW50aWNhdGlvbi4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSB0aGVy
ZSdzIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3Vy
bC9DdXJsQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSGFuZGxlOjpDdXJsSGFu
ZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OmVuYWJsZVNTTEZvckhvc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VybEhhbmRsZTo6d2lsbFNldHVwU3NsQ3R4KToKKyAgICAgICAg
KFdlYkNvcmU6OkN1cmxIYW5kbGU6OndpbGxTZXR1cFNzbEN0eENhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OkN1cmxIYW5kbGU6OnNzbEVycm9ycyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDdXJsSGFuZGxlOjpzZXRVcmwpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEhhbmRsZTo6ZW5h
YmxlSHR0cCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSGFuZGxlOjplbmFibGVDb25uZWN0aW9u
T25seSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSGFuZGxlOjpjZXJ0aWZpY2F0ZUluZm8gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEhhbmRsZTo6ZW5hYmxlU3RkRXJySWZVc2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OmluaXRpYWxpemUpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5oOgorICAgICAgICAoV2Vi
Q29yZTo6Q3VybEhhbmRsZTo6dXJsIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ3VybFJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFJlcXVlc3Q6OnNl
dHVwVHJhbnNmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFJlcXVlc3Q6OmRpZFJlY2VpdmVI
ZWFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFJlcXVlc3Q6OmRpZENvbXBsZXRlVHJhbnNm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFJlcXVlc3Q6OmZpbmFsaXplVHJhbnNmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VybFJlcXVlc3Q6OndpbGxTZXR1cFNzbEN0eCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpDdXJsUmVxdWVzdDo6d2lsbFNldHVwU3NsQ3R4Q2FsbGJhY2sp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVxdWVzdC5o
OgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NMVmVyaWZpZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VybFNTTFZlcmlmaWVyOjpDdXJsU1NMVmVyaWZpZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Q3VybFNTTFZlcmlmaWVyOjp2ZXJpZnkpOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvY3VybC9DdXJsU1NMVmVyaWZpZXIuaDoKKwogMjAxOC0wNy0wNiAgVGltb3Ro
eSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CiAKICAgICAgICAgU2VtYW50aWMgY29sb3Jz
IGRvbid0IHVwZGF0ZSB3aGVuIGFjY2Vzc2liaWxpdHkgSW5jcmVhc2UgQ29udHJhc3QgbW9kZSBp
cyBlbmFibGVkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL0N1cmxDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9DdXJsQ29udGV4dC5jcHAKaW5kZXggMWYwYWMyNzRmNDMuLjk1YWFhODllZmE5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENvbnRleHQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5j
cHAKQEAgLTI4LDcgKzI4LDEwIEBACiAjaW5jbHVkZSAiQ3VybENvbnRleHQuaCIKIAogI2lmIFVT
RShDVVJMKQorI2luY2x1ZGUgIkNlcnRpZmljYXRlSW5mby5oIgogI2luY2x1ZGUgIkN1cmxSZXF1
ZXN0U2NoZWR1bGVyLmgiCisjaW5jbHVkZSAiQ3VybFNTTEhhbmRsZS5oIgorI2luY2x1ZGUgIkN1
cmxTU0xWZXJpZmllci5oIgogI2luY2x1ZGUgIkhUVFBIZWFkZXJNYXAuaCIKICNpbmNsdWRlIDxO
ZXR3b3JrTG9hZE1ldHJpY3MuaD4KICNpbmNsdWRlIDxtdXRleD4KQEAgLTI2MSw2ICsyNjQsMjEg
QEAgQ1VSTE1zZyogQ3VybE11bHRpSGFuZGxlOjpyZWFkSW5mbyhpbnQmIG1lc3NhZ2VzSW5RdWV1
ZSkKIEN1cmxIYW5kbGU6OkN1cmxIYW5kbGUoKQogewogICAgIG1faGFuZGxlID0gY3VybF9lYXN5
X2luaXQoKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX0VSUk9SQlVG
RkVSLCBtX2Vycm9yQnVmZmVyKTsKKworICAgIGVuYWJsZVNoYXJlSGFuZGxlKCk7CisgICAgZW5h
YmxlQWxsb3dlZFByb3RvY29scygpOworICAgIGVuYWJsZUFjY2VwdEVuY29kaW5nKCk7CisKKyAg
ICBzZXREbnNDYWNoZVRpbWVvdXQoQ3VybENvbnRleHQ6OnNpbmdsZXRvbigpLmRuc0NhY2hlVGlt
ZW91dCgpKTsKKyAgICBzZXRDb25uZWN0VGltZW91dChDdXJsQ29udGV4dDo6c2luZ2xldG9uKCku
Y29ubmVjdFRpbWVvdXQoKSk7CisKKyAgICBlbmFibGVQcm94eUlmRXhpc3RzKCk7CisKKyNpZm5k
ZWYgTkRFQlVHCisgICAgZW5hYmxlVmVyYm9zZUlmVXNlZCgpOworICAgIGVuYWJsZVN0ZEVycklm
VXNlZCgpOworI2VuZGlmCiB9CiAKIEN1cmxIYW5kbGU6On5DdXJsSGFuZGxlKCkKQEAgLTI3NCw5
ICsyOTIsNTIgQEAgY29uc3QgU3RyaW5nIEN1cmxIYW5kbGU6OmVycm9yRGVzY3JpcHRpb24oQ1VS
TGNvZGUgZXJyb3JDb2RlKQogICAgIHJldHVybiBTdHJpbmcoY3VybF9lYXN5X3N0cmVycm9yKGVy
cm9yQ29kZSkpOwogfQogCi12b2lkIEN1cmxIYW5kbGU6OmluaXRpYWxpemUoKQordm9pZCBDdXJs
SGFuZGxlOjplbmFibGVTU0xGb3JIb3N0KGNvbnN0IFN0cmluZyYgaG9zdCkKIHsKLSAgICBjdXJs
X2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX0VSUk9SQlVGRkVSLCBtX2Vycm9yQnVmZmVy
KTsKKyAgICBhdXRvJiBzc2xIYW5kbGUgPSBDdXJsQ29udGV4dDo6c2luZ2xldG9uKCkuc3NsSGFu
ZGxlKCk7CisgICAgaWYgKGF1dG8gc3NsQ2xpZW50Q2VydGlmaWNhdGUgPSBzc2xIYW5kbGUuZ2V0
U1NMQ2xpZW50Q2VydGlmaWNhdGUoaG9zdCkpIHsKKyAgICAgICAgc2V0U3NsQ2VydChzc2xDbGll
bnRDZXJ0aWZpY2F0ZS0+Zmlyc3QudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHNldFNzbENlcnRU
eXBlKCJQMTIiKTsKKyAgICAgICAgc2V0U3NsS2V5UGFzc3dvcmQoc3NsQ2xpZW50Q2VydGlmaWNh
dGUtPnNlY29uZC51dGY4KCkuZGF0YSgpKTsKKyAgICB9CisKKyAgICBpZiAoc3NsSGFuZGxlLnNo
b3VsZElnbm9yZVNTTEVycm9ycygpKSB7CisgICAgICAgIHNldFNzbFZlcmlmeVBlZXIoQ3VybEhh
bmRsZTo6VmVyaWZ5UGVlcjo6RGlzYWJsZSk7CisgICAgICAgIHNldFNzbFZlcmlmeUhvc3QoQ3Vy
bEhhbmRsZTo6VmVyaWZ5SG9zdDo6TG9vc2VOYW1lQ2hlY2spOworICAgIH0gZWxzZSB7CisgICAg
ICAgIHNldFNzbFZlcmlmeVBlZXIoQ3VybEhhbmRsZTo6VmVyaWZ5UGVlcjo6RW5hYmxlKTsKKyAg
ICAgICAgc2V0U3NsVmVyaWZ5SG9zdChDdXJsSGFuZGxlOjpWZXJpZnlIb3N0OjpTdHJpY3ROYW1l
Q2hlY2spOworICAgIH0KKworICAgIGNvbnN0IGF1dG8mIGNpcGhlckxpc3QgPSBzc2xIYW5kbGUu
Z2V0Q2lwaGVyTGlzdCgpOworICAgIGlmICghY2lwaGVyTGlzdC5pc0VtcHR5KCkpCisgICAgICAg
IHNldFNzbENpcGhlckxpc3QoY2lwaGVyTGlzdC51dGY4KCkuZGF0YSgpKTsKKworICAgIHNldFNz
bEN0eENhbGxiYWNrRnVuY3Rpb24od2lsbFNldHVwU3NsQ3R4Q2FsbGJhY2ssIHRoaXMpOworCisg
ICAgaWYgKGF1dG8qIHBhdGggPSBXVEY6OmdldF9pZjxTdHJpbmc+KHNzbEhhbmRsZS5nZXRDQUNl
cnRJbmZvKCkpKQorICAgICAgICBzZXRDQUNlcnRQYXRoKHBhdGgtPnV0ZjgoKS5kYXRhKCkpOwor
fQorCitDVVJMY29kZSBDdXJsSGFuZGxlOjp3aWxsU2V0dXBTc2xDdHgodm9pZCogc3NsQ3R4KQor
eworICAgIGlmICghc3NsQ3R4KQorICAgICAgICByZXR1cm4gQ1VSTEVfQUJPUlRFRF9CWV9DQUxM
QkFDSzsKKworICAgIGlmICghbV9zc2xWZXJpZmllcikKKyAgICAgICAgbV9zc2xWZXJpZmllciA9
IHN0ZDo6bWFrZV91bmlxdWU8Q3VybFNTTFZlcmlmaWVyPigqdGhpcywgc3NsQ3R4KTsKKworICAg
IHJldHVybiBDVVJMRV9PSzsKK30KKworQ1VSTGNvZGUgQ3VybEhhbmRsZTo6d2lsbFNldHVwU3Ns
Q3R4Q2FsbGJhY2soQ1VSTCosIHZvaWQqIHNzbEN0eCwgdm9pZCogdXNlckRhdGEpCit7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEN1cmxIYW5kbGUqPih1c2VyRGF0YSktPndpbGxTZXR1cFNzbEN0
eChzc2xDdHgpOworfQorCitpbnQgQ3VybEhhbmRsZTo6c3NsRXJyb3JzKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9zc2xWZXJpZmllciA/IG1fc3NsVmVyaWZpZXItPnNzbEVycm9ycygpIDogMDsK
IH0KIAogQ1VSTGNvZGUgQ3VybEhhbmRsZTo6cGVyZm9ybSgpCkBAIC0yOTYsNiArMzU3LDggQEAg
dm9pZCBDdXJsSGFuZGxlOjplbmFibGVTaGFyZUhhbmRsZSgpCiAKIHZvaWQgQ3VybEhhbmRsZTo6
c2V0VXJsKGNvbnN0IFVSTCYgdXJsKQogeworICAgIG1fdXJsID0gdXJsLmlzb2xhdGVkQ29weSgp
OworCiAgICAgVVJMIGN1cmxVcmwgPSB1cmw7CiAKICAgICAvLyBSZW1vdmUgYW55IGZyYWdtZW50
IHBhcnQsIG90aGVyd2lzZSBjdXJsIHdpbGwgc2VuZCBpdCBhcyBwYXJ0IG9mIHRoZSByZXF1ZXN0
LgpAQCAtMzEwLDYgKzM3Myw5IEBAIHZvaWQgQ3VybEhhbmRsZTo6c2V0VXJsKGNvbnN0IFVSTCYg
dXJsKQogCiAgICAgLy8gdXJsIGlzIGluIEFTQ0lJIHNvIGxhdGluMSgpIHdpbGwgb25seSBjb252
ZXJ0IGl0IHRvIGNoYXIqIHdpdGhvdXQgY2hhcmFjdGVyIHRyYW5zbGF0aW9uLgogICAgIGN1cmxf
ZWFzeV9zZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfVVJMLCBjdXJsVXJsLnN0cmluZygpLmxhdGlu
MSgpLmRhdGEoKSk7CisKKyAgICBpZiAodXJsLnByb3RvY29sSXMoImh0dHBzIikpCisgICAgICAg
IGVuYWJsZVNTTEZvckhvc3QobV91cmwuaG9zdCgpLnRvU3RyaW5nKCkpOwogfQogCiB2b2lkIEN1
cmxIYW5kbGU6OmFwcGVuZFJlcXVlc3RIZWFkZXJzKGNvbnN0IEhUVFBIZWFkZXJNYXAmIGhlYWRl
cnMpCkBAIC0zNjcsNyArNDMzLDcgQEAgdm9pZCBDdXJsSGFuZGxlOjplbmFibGVSZXF1ZXN0SGVh
ZGVycygpCiAKIHZvaWQgQ3VybEhhbmRsZTo6ZW5hYmxlSHR0cCgpCiB7Ci0gICAgaWYgKEN1cmxD
b250ZXh0OjpzaW5nbGV0b24oKS5pc0h0dHAyRW5hYmxlZCgpKSB7CisgICAgaWYgKG1fdXJsLnBy
b3RvY29sSXMoImh0dHBzIikgJiYgQ3VybENvbnRleHQ6OnNpbmdsZXRvbigpLmlzSHR0cDJFbmFi
bGVkKCkpIHsKICAgICAgICAgY3VybF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9IVFRQ
X1ZFUlNJT04sIENVUkxfSFRUUF9WRVJTSU9OXzJUTFMpOwogICAgICAgICBjdXJsX2Vhc3lfc2V0
b3B0KG1faGFuZGxlLCBDVVJMT1BUX1BJUEVXQUlULCAxTCk7CiAgICAgICAgIGN1cmxfZWFzeV9z
ZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfU1NMX0VOQUJMRV9BTFBOLCAxTCk7CkBAIC01NjAsNiAr
NjI2LDExIEBAIHZvaWQgQ3VybEhhbmRsZTo6c2V0U3NsQ3R4Q2FsbGJhY2tGdW5jdGlvbihjdXJs
X3NzbF9jdHhfY2FsbGJhY2sgY2FsbGJhY2tGdW5jLCB2CiAgICAgY3VybF9lYXN5X3NldG9wdCht
X2hhbmRsZSwgQ1VSTE9QVF9TU0xfQ1RYX0ZVTkNUSU9OLCBjYWxsYmFja0Z1bmMpOwogfQogCit2
b2lkIEN1cmxIYW5kbGU6OmVuYWJsZUNvbm5lY3Rpb25Pbmx5KCkKK3sKKyAgICBjdXJsX2Vhc3lf
c2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX0NPTk5FQ1RfT05MWSwgMUwpOworfQorCiBzdGQ6Om9w
dGlvbmFsPFN0cmluZz4gQ3VybEhhbmRsZTo6Z2V0UHJveHlVcmwoKQogewogICAgIGF1dG8mIHBy
b3h5ID0gQ3VybENvbnRleHQ6OnNpbmdsZXRvbigpLnByb3h5U2V0dGluZ3MoKTsKQEAgLTY5Miw2
ICs3NjMsMTQgQEAgc3RkOjpvcHRpb25hbDxOZXR3b3JrTG9hZE1ldHJpY3M+IEN1cmxIYW5kbGU6
OmdldE5ldHdvcmtMb2FkTWV0cmljcygpCiAgICAgcmV0dXJuIG5ldHdvcmtMb2FkTWV0cmljczsK
IH0KIAorc3RkOjpvcHRpb25hbDxDZXJ0aWZpY2F0ZUluZm8+IEN1cmxIYW5kbGU6OmNlcnRpZmlj
YXRlSW5mbygpIGNvbnN0Cit7CisgICAgaWYgKCFtX3NzbFZlcmlmaWVyKQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIG1fc3NsVmVyaWZpZXItPmNlcnRpZmljYXRl
SW5mbygpOworfQorCiBsb25nIGxvbmcgQ3VybEhhbmRsZTo6bWF4Q3VybE9mZlQoKQogewogICAg
IHN0YXRpYyBjb25zdCBsb25nIGxvbmcgbWF4Q3VybE9mZlQgPSAoMUxMIDw8IChleHBlY3RlZFNp
emVPZkN1cmxPZmZUKCkgKiA4IC0gMSkpIC0gMTsKQEAgLTcyNSw4ICs4MDQsOCBAQCB2b2lkIEN1
cmxIYW5kbGU6OmVuYWJsZVZlcmJvc2VJZlVzZWQoKQogCiB2b2lkIEN1cmxIYW5kbGU6OmVuYWJs
ZVN0ZEVycklmVXNlZCgpCiB7Ci0gICAgaWYgKEN1cmxDb250ZXh0OjpzaW5nbGV0b24oKS5nZXRM
b2dGaWxlKCkpCi0gICAgICAgIGN1cmxfZWFzeV9zZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfVkVS
Qk9TRSwgMSk7CisgICAgaWYgKGF1dG8gbG9nID0gQ3VybENvbnRleHQ6OnNpbmdsZXRvbigpLmdl
dExvZ0ZpbGUoKSkKKyAgICAgICAgY3VybF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9T
VERFUlIsIGxvZyk7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvQ3VybENvbnRleHQuaAppbmRleCA0ZmNmOWJlOWJkNS4uMjVhYTE4YmQ3
ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJs
Q29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJs
Q29udGV4dC5oCkBAIC0xOTQsNiArMTk0LDggQEAgcHJpdmF0ZToKIAogLy8gQ3VybEhhbmRsZSAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK2NsYXNz
IENlcnRpZmljYXRlSW5mbzsKK2NsYXNzIEN1cmxTU0xWZXJpZmllcjsKIGNsYXNzIEhUVFBIZWFk
ZXJNYXA7CiBjbGFzcyBOZXR3b3JrTG9hZE1ldHJpY3M7CiAKQEAgLTIxNSw4ICsyMTcsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB+Q3VybEhhbmRsZSgpOwogCiAgICAgQ1VSTCogaGFuZGxlKCkg
Y29uc3QgeyByZXR1cm4gbV9oYW5kbGU7IH0KLQotICAgIHZvaWQgaW5pdGlhbGl6ZSgpOworICAg
IGNvbnN0IFVSTCYgdXJsKCkgY29uc3QgeyByZXR1cm4gbV91cmw7IH0KIAogICAgIENVUkxjb2Rl
IHBlcmZvcm0oKTsKICAgICBDVVJMY29kZSBwYXVzZShpbnQpOwpAQCAtMjI2LDYgKzIyNyw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIGVuYWJsZVNoYXJlSGFuZGxlKCk7CiAKICAgICB2b2lkIHNldFVy
bChjb25zdCBVUkwmKTsKKyAgICB2b2lkIGVuYWJsZVNTTEZvckhvc3QoY29uc3QgU3RyaW5nJik7
CiAKICAgICB2b2lkIGFwcGVuZFJlcXVlc3RIZWFkZXJzKGNvbnN0IEhUVFBIZWFkZXJNYXAmKTsK
ICAgICB2b2lkIGFwcGVuZFJlcXVlc3RIZWFkZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIHZhbHVlKTsKQEAgLTI0Miw2ICsyNDQsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRJ
bkZpbGVTaXplTGFyZ2UoY3VybF9vZmZfdCk7CiAgICAgdm9pZCBzZXRIdHRwQ3VzdG9tUmVxdWVz
dChjb25zdCBTdHJpbmcmKTsKIAorICAgIHZvaWQgZW5hYmxlQ29ubmVjdGlvbk9ubHkoKTsKKwog
ICAgIHZvaWQgZW5hYmxlQWNjZXB0RW5jb2RpbmcoKTsKICAgICB2b2lkIGVuYWJsZUFsbG93ZWRQ
cm90b2NvbHMoKTsKIApAQCAtMjc4LDYgKzI4Miw5IEBAIHB1YmxpYzoKICAgICBzdGQ6Om9wdGlv
bmFsPGxvbmc+IGdldEh0dHBWZXJzaW9uKCk7CiAgICAgc3RkOjpvcHRpb25hbDxOZXR3b3JrTG9h
ZE1ldHJpY3M+IGdldE5ldHdvcmtMb2FkTWV0cmljcygpOwogCisgICAgaW50IHNzbEVycm9ycygp
IGNvbnN0OworICAgIHN0ZDo6b3B0aW9uYWw8Q2VydGlmaWNhdGVJbmZvPiBjZXJ0aWZpY2F0ZUlu
Zm8oKSBjb25zdDsKKwogICAgIHN0YXRpYyBsb25nIGxvbmcgbWF4Q3VybE9mZlQoKTsKIAogI2lm
bmRlZiBOREVCVUcKQEAgLTI4OSwxMCArMjk2LDE1IEBAIHByaXZhdGU6CiAgICAgdm9pZCBlbmFi
bGVSZXF1ZXN0SGVhZGVycygpOwogICAgIHN0YXRpYyBpbnQgZXhwZWN0ZWRTaXplT2ZDdXJsT2Zm
VCgpOwogCisgICAgc3RhdGljIENVUkxjb2RlIHdpbGxTZXR1cFNzbEN0eENhbGxiYWNrKENVUkwq
LCB2b2lkKiBzc2xDdHgsIHZvaWQqIHVzZXJEYXRhKTsKKyAgICBDVVJMY29kZSB3aWxsU2V0dXBT
c2xDdHgodm9pZCogc3NsQ3R4KTsKKwogICAgIENVUkwqIG1faGFuZGxlIHsgbnVsbHB0ciB9Owog
ICAgIGNoYXIgbV9lcnJvckJ1ZmZlcltDVVJMX0VSUk9SX1NJWkVdIHsgfTsKIAorICAgIFVSTCBt
X3VybDsKICAgICBDdXJsU0xpc3QgbV9yZXF1ZXN0SGVhZGVyczsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8Q3VybFNTTFZlcmlmaWVyPiBtX3NzbFZlcmlmaWVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJs
L0N1cmxSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9D
dXJsUmVxdWVzdC5jcHAKaW5kZXggMGJkYWU5NGU3ZGQuLmYxZTc0NDkwNjAyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFJlcXVlc3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVxdWVzdC5jcHAK
QEAgLTE0Niw5ICsxNDYsOCBAQCB2b2lkIEN1cmxSZXF1ZXN0OjpyZXN1bWUoKQogdm9pZCBDdXJs
UmVxdWVzdDo6Y2FsbENsaWVudChGdW5jdGlvbjx2b2lkKEN1cmxSZXF1ZXN0JiwgQ3VybFJlcXVl
c3RDbGllbnQmKT4mJiB0YXNrKQogewogICAgIHJ1bk9uTWFpblRocmVhZChbdGhpcywgcHJvdGVj
dGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCB0YXNrID0gV1RGTW92ZSh0YXNrKV0oKSBtdXRhYmxl
IHsKLSAgICAgICAgaWYgKEN1cmxSZXF1ZXN0Q2xpZW50KiBjbGllbnQgPSBtX2NsaWVudCkgewor
ICAgICAgICBpZiAoQ3VybFJlcXVlc3RDbGllbnQqIGNsaWVudCA9IG1fY2xpZW50KQogICAgICAg
ICAgICAgdGFzaygqdGhpcywgbWFrZVJlZigqY2xpZW50KSk7Ci0gICAgICAgIH0KICAgICB9KTsK
IH0KIApAQCAtMTc3LDggKzE3Niw4IEBAIENVUkwqIEN1cmxSZXF1ZXN0OjpzZXR1cFRyYW5zZmVy
KCkKIAogICAgIG1fY3VybEhhbmRsZSA9IHN0ZDo6bWFrZV91bmlxdWU8Q3VybEhhbmRsZT4oKTsK
IAotICAgIG1fY3VybEhhbmRsZS0+aW5pdGlhbGl6ZSgpOwogICAgIG1fY3VybEhhbmRsZS0+c2V0
VXJsKG1fcmVxdWVzdC51cmwoKSk7CisKICAgICBtX2N1cmxIYW5kbGUtPmFwcGVuZFJlcXVlc3RI
ZWFkZXJzKGh0dHBIZWFkZXJGaWVsZHMpOwogCiAgICAgY29uc3QgYXV0byYgbWV0aG9kID0gbV9y
ZXF1ZXN0Lmh0dHBNZXRob2QoKTsKQEAgLTIwMCw2MyArMTk5LDE3IEBAIENVUkwqIEN1cmxSZXF1
ZXN0OjpzZXR1cFRyYW5zZmVyKCkKICAgICAgICAgbV9jdXJsSGFuZGxlLT5zZXRIdHRwQXV0aFVz
ZXJQYXNzKG1fdXNlciwgbV9wYXNzd29yZCk7CiAgICAgfQogCi0gICAgbV9jdXJsSGFuZGxlLT5z
ZXRTc2xDdHhDYWxsYmFja0Z1bmN0aW9uKHdpbGxTZXR1cFNzbEN0eENhbGxiYWNrLCB0aGlzKTsK
ICAgICBtX2N1cmxIYW5kbGUtPnNldEhlYWRlckNhbGxiYWNrRnVuY3Rpb24oZGlkUmVjZWl2ZUhl
YWRlckNhbGxiYWNrLCB0aGlzKTsKICAgICBtX2N1cmxIYW5kbGUtPnNldFdyaXRlQ2FsbGJhY2tG
dW5jdGlvbihkaWRSZWNlaXZlRGF0YUNhbGxiYWNrLCB0aGlzKTsKIAotICAgIG1fY3VybEhhbmRs
ZS0+ZW5hYmxlU2hhcmVIYW5kbGUoKTsKLSAgICBtX2N1cmxIYW5kbGUtPmVuYWJsZUFsbG93ZWRQ
cm90b2NvbHMoKTsKLSAgICBtX2N1cmxIYW5kbGUtPmVuYWJsZUFjY2VwdEVuY29kaW5nKCk7Ci0K
ICAgICBtX2N1cmxIYW5kbGUtPnNldFRpbWVvdXQoU2Vjb25kcyhtX3JlcXVlc3QudGltZW91dElu
dGVydmFsKCkpKTsKLSAgICBtX2N1cmxIYW5kbGUtPnNldERuc0NhY2hlVGltZW91dChDdXJsQ29u
dGV4dDo6c2luZ2xldG9uKCkuZG5zQ2FjaGVUaW1lb3V0KCkpOwotICAgIG1fY3VybEhhbmRsZS0+
c2V0Q29ubmVjdFRpbWVvdXQoQ3VybENvbnRleHQ6OnNpbmdsZXRvbigpLmNvbm5lY3RUaW1lb3V0
KCkpOwotCi0gICAgbV9jdXJsSGFuZGxlLT5lbmFibGVQcm94eUlmRXhpc3RzKCk7Ci0KLSAgICBp
ZiAoc3NsSGFuZGxlLnNob3VsZElnbm9yZVNTTEVycm9ycygpKSB7Ci0gICAgICAgIG1fY3VybEhh
bmRsZS0+c2V0U3NsVmVyaWZ5UGVlcihDdXJsSGFuZGxlOjpWZXJpZnlQZWVyOjpEaXNhYmxlKTsK
LSAgICAgICAgbV9jdXJsSGFuZGxlLT5zZXRTc2xWZXJpZnlIb3N0KEN1cmxIYW5kbGU6OlZlcmlm
eUhvc3Q6Okxvb3NlTmFtZUNoZWNrKTsKLSAgICB9IGVsc2UgewotICAgICAgICBtX2N1cmxIYW5k
bGUtPnNldFNzbFZlcmlmeVBlZXIoQ3VybEhhbmRsZTo6VmVyaWZ5UGVlcjo6RW5hYmxlKTsKLSAg
ICAgICAgbV9jdXJsSGFuZGxlLT5zZXRTc2xWZXJpZnlIb3N0KEN1cmxIYW5kbGU6OlZlcmlmeUhv
c3Q6OlN0cmljdE5hbWVDaGVjayk7Ci0gICAgfQotCi0gICAgYXV0byBjaXBoZXJMaXN0ID0gc3Ns
SGFuZGxlLmdldENpcGhlckxpc3QoKTsKLSAgICBpZiAoIWNpcGhlckxpc3QuaXNFbXB0eSgpKQot
ICAgICAgICBtX2N1cmxIYW5kbGUtPnNldFNzbENpcGhlckxpc3QoY2lwaGVyTGlzdC51dGY4KCku
ZGF0YSgpKTsKLQotICAgIGF1dG8gc3NsQ2xpZW50Q2VydGlmaWNhdGUgPSBzc2xIYW5kbGUuZ2V0
U1NMQ2xpZW50Q2VydGlmaWNhdGUobV9yZXF1ZXN0LnVybCgpLmhvc3QoKS50b1N0cmluZygpKTsK
LSAgICBpZiAoc3NsQ2xpZW50Q2VydGlmaWNhdGUpIHsKLSAgICAgICAgbV9jdXJsSGFuZGxlLT5z
ZXRTc2xDZXJ0KHNzbENsaWVudENlcnRpZmljYXRlLT5maXJzdC51dGY4KCkuZGF0YSgpKTsKLSAg
ICAgICAgbV9jdXJsSGFuZGxlLT5zZXRTc2xDZXJ0VHlwZSgiUDEyIik7Ci0gICAgICAgIG1fY3Vy
bEhhbmRsZS0+c2V0U3NsS2V5UGFzc3dvcmQoc3NsQ2xpZW50Q2VydGlmaWNhdGUtPnNlY29uZC51
dGY4KCkuZGF0YSgpKTsKLSAgICB9Ci0KLSAgICBpZiAoYXV0byBwYXRoID0gV1RGOjpnZXRfaWY8
U3RyaW5nPihzc2xIYW5kbGUuZ2V0Q0FDZXJ0SW5mbygpKSkKLSAgICAgICAgbV9jdXJsSGFuZGxl
LT5zZXRDQUNlcnRQYXRoKHBhdGgtPnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgaWYgKG1fc2hvdWxk
U3VzcGVuZCkKICAgICAgICAgc2V0UmVxdWVzdFBhdXNlZCh0cnVlKTsKIAotI2lmbmRlZiBOREVC
VUcKLSAgICBtX2N1cmxIYW5kbGUtPmVuYWJsZVZlcmJvc2VJZlVzZWQoKTsKLSAgICBtX2N1cmxI
YW5kbGUtPmVuYWJsZVN0ZEVycklmVXNlZCgpOwotI2VuZGlmCi0KICAgICByZXR1cm4gbV9jdXJs
SGFuZGxlLT5oYW5kbGUoKTsKIH0KIAotQ1VSTGNvZGUgQ3VybFJlcXVlc3Q6OndpbGxTZXR1cFNz
bEN0eCh2b2lkKiBzc2xDdHgpCi17Ci0gICAgaWYgKCFzc2xDdHgpCi0gICAgICAgIHJldHVybiBD
VVJMRV9BQk9SVEVEX0JZX0NBTExCQUNLOwotCi0gICAgaWYgKCFtX3NzbFZlcmlmaWVyKQotICAg
ICAgICBtX3NzbFZlcmlmaWVyID0gc3RkOjptYWtlX3VuaXF1ZTxDdXJsU1NMVmVyaWZpZXI+KG1f
Y3VybEhhbmRsZS5nZXQoKSwgbV9yZXF1ZXN0LnVybCgpLmhvc3QoKS50b1N0cmluZygpLCBzc2xD
dHgpOwotICAgIHJldHVybiBDVVJMRV9PSzsKLX0KLQogLy8gVGhpcyBpcyBjYWxsZWQgdG8gb2J0
YWluIEhUVFAgUE9TVCBvciBQVVQgZGF0YS4KIC8vIEl0ZXJhdGUgdGhyb3VnaCBGb3JtRGF0YSBl
bGVtZW50cyBhbmQgdXBsb2FkIGZpbGVzLgogLy8gQ2FyZWZ1bGx5IHJlc3BlY3QgdGhlIGdpdmVu
IGJ1ZmZlciBzaXplIGFuZCBmaWxsIHRoZSByZXN0IG9mIHRoZSBkYXRhIGF0IHRoZSBuZXh0IGNh
bGxzLgpAQCAtMzUyLDggKzMwNSw4IEBAIHNpemVfdCBDdXJsUmVxdWVzdDo6ZGlkUmVjZWl2ZUhl
YWRlcihTdHJpbmcmJiBoZWFkZXIpCiAgICAgaWYgKG1fcmVzcG9uc2UuYXZhaWxhYmxlUHJveHlB
dXRoKQogICAgICAgICBDdXJsQ29udGV4dDo6c2luZ2xldG9uKCkuc2V0UHJveHlBdXRoTWV0aG9k
KG1fcmVzcG9uc2UuYXZhaWxhYmxlUHJveHlBdXRoKTsKIAotICAgIGlmIChtX3NzbFZlcmlmaWVy
KQotICAgICAgICBtX2NlcnRpZmljYXRlSW5mbyA9IG1fc3NsVmVyaWZpZXItPmNlcnRpZmljYXRl
SW5mbygpOworICAgIGlmIChhdXRvIGluZm8gPSBtX2N1cmxIYW5kbGUtPmNlcnRpZmljYXRlSW5m
bygpKQorICAgICAgICBtX2NlcnRpZmljYXRlSW5mbyA9ICppbmZvOwogCiAgICAgaWYgKG1fZW5h
YmxlTXVsdGlwYXJ0KQogICAgICAgICBtX211bHRpcGFydEhhbmRsZSA9IEN1cmxNdWx0aXBhcnRI
YW5kbGU6OmNyZWF0ZUlmTmVlZGVkKCp0aGlzLCBtX3Jlc3BvbnNlKTsKQEAgLTQ2MywxMSArNDE2
LDEwIEBAIHZvaWQgQ3VybFJlcXVlc3Q6OmRpZENvbXBsZXRlVHJhbnNmZXIoQ1VSTGNvZGUgcmVz
dWx0KQogICAgIH0gZWxzZSB7CiAgICAgICAgIGF1dG8gdHlwZSA9IChyZXN1bHQgPT0gQ1VSTEVf
T1BFUkFUSU9OX1RJTUVET1VUICYmIG1fcmVxdWVzdC50aW1lb3V0SW50ZXJ2YWwoKSA+IDAuMCkg
PyBSZXNvdXJjZUVycm9yOjpUeXBlOjpUaW1lb3V0IDogUmVzb3VyY2VFcnJvcjo6VHlwZTo6R2Vu
ZXJhbDsKICAgICAgICAgYXV0byByZXNvdXJjZUVycm9yID0gUmVzb3VyY2VFcnJvcjo6aHR0cEVy
cm9yKHJlc3VsdCwgbV9yZXF1ZXN0LnVybCgpLCB0eXBlKTsKLSAgICAgICAgaWYgKG1fc3NsVmVy
aWZpZXIpIHsKLSAgICAgICAgICAgIHJlc291cmNlRXJyb3Iuc2V0U3NsRXJyb3JzKG1fc3NsVmVy
aWZpZXItPnNzbEVycm9ycygpKTsKLQotICAgICAgICAgICAgbV9jZXJ0aWZpY2F0ZUluZm8gPSBt
X3NzbFZlcmlmaWVyLT5jZXJ0aWZpY2F0ZUluZm8oKTsKLSAgICAgICAgfQorICAgICAgICBpZiAo
YXV0byBzc2xFcnJvcnMgPSBtX2N1cmxIYW5kbGUtPnNzbEVycm9ycygpKQorICAgICAgICAgICAg
cmVzb3VyY2VFcnJvci5zZXRTc2xFcnJvcnMoc3NsRXJyb3JzKTsKKyAgICAgICAgaWYgKGF1dG8g
aW5mbyA9IG1fY3VybEhhbmRsZS0+Y2VydGlmaWNhdGVJbmZvKCkpCisgICAgICAgICAgICBtX2Nl
cnRpZmljYXRlSW5mbyA9ICppbmZvOwogCiAgICAgICAgIGZpbmFsaXplVHJhbnNmZXIoKTsKICAg
ICAgICAgY2FsbENsaWVudChbZXJyb3IgPSByZXNvdXJjZUVycm9yLmlzb2xhdGVkQ29weSgpXShD
dXJsUmVxdWVzdCYgcmVxdWVzdCwgQ3VybFJlcXVlc3RDbGllbnQmIGNsaWVudCkgewpAQCAtNDg2
LDcgKzQzOCw2IEBAIHZvaWQgQ3VybFJlcXVlc3Q6OmZpbmFsaXplVHJhbnNmZXIoKQogewogICAg
IGNsb3NlRG93bmxvYWRGaWxlKCk7CiAgICAgbV9mb3JtRGF0YVN0cmVhbS5jbGVhbigpOwotICAg
IG1fc3NsVmVyaWZpZXIgPSBudWxscHRyOwogICAgIG1fbXVsdGlwYXJ0SGFuZGxlID0gbnVsbHB0
cjsKICAgICBtX2N1cmxIYW5kbGUgPSBudWxscHRyOwogfQpAQCAtNzQzLDExICs2OTQsNiBAQCB2
b2lkIEN1cmxSZXF1ZXN0OjpjbGVhbnVwRG93bmxvYWRGaWxlKCkKICAgICB9CiB9CiAKLUNVUkxj
b2RlIEN1cmxSZXF1ZXN0Ojp3aWxsU2V0dXBTc2xDdHhDYWxsYmFjayhDVVJMKiwgdm9pZCogc3Ns
Q3R4LCB2b2lkKiB1c2VyRGF0YSkKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q3VybFJlcXVl
c3QqPih1c2VyRGF0YSktPndpbGxTZXR1cFNzbEN0eChzc2xDdHgpOwotfQotCiBzaXplX3QgQ3Vy
bFJlcXVlc3Q6OndpbGxTZW5kRGF0YUNhbGxiYWNrKGNoYXIqIHB0ciwgc2l6ZV90IGJsb2NrU2l6
ZSwgc2l6ZV90IG51bWJlck9mQmxvY2tzLCB2b2lkKiB1c2VyRGF0YSkKIHsKICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Q3VybFJlcXVlc3QqPih1c2VyRGF0YSktPndpbGxTZW5kRGF0YShwdHIsIGJs
b2NrU2l6ZSwgbnVtYmVyT2ZCbG9ja3MpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL0N1cmxSZXF1ZXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvQ3VybFJlcXVlc3QuaAppbmRleCA1OWQ4MGQ3MTQ3NS4uZWRlNzM0MzEy
MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJs
UmVxdWVzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJs
UmVxdWVzdC5oCkBAIC0xMTMsNyArMTEzLDYgQEAgcHJpdmF0ZToKICAgICAvLyBUcmFuc2ZlciBw
cm9jZXNzaW5nIG9mIFJlcXVlc3QgYm9keSwgUmVzcG9uc2UgaGVhZGVyL2JvZHkKICAgICAvLyBD
YWxsZWQgYnkgd29ya2VyIHRocmVhZCBpbiBjYXNlIG9mIGFzeW5jLCBtYWluIHRocmVhZCBpbiBj
YXNlIG9mIHN5bmMuCiAgICAgQ1VSTCogc2V0dXBUcmFuc2ZlcigpIG92ZXJyaWRlOwotICAgIENV
Ukxjb2RlIHdpbGxTZXR1cFNzbEN0eCh2b2lkKik7CiAgICAgc2l6ZV90IHdpbGxTZW5kRGF0YShj
aGFyKiwgc2l6ZV90LCBzaXplX3QpOwogICAgIHNpemVfdCBkaWRSZWNlaXZlSGVhZGVyKFN0cmlu
ZyYmKTsKICAgICBzaXplX3QgZGlkUmVjZWl2ZURhdGEoUmVmPFNoYXJlZEJ1ZmZlcj4mJik7CkBA
IC0xNDgsNyArMTQ3LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNsZWFudXBEb3dubG9hZEZpbGUo
KTsKIAogICAgIC8vIENhbGxiYWNrIGZ1bmN0aW9ucyBmb3IgY3VybAotICAgIHN0YXRpYyBDVVJM
Y29kZSB3aWxsU2V0dXBTc2xDdHhDYWxsYmFjayhDVVJMKiwgdm9pZCosIHZvaWQqKTsKICAgICBz
dGF0aWMgc2l6ZV90IHdpbGxTZW5kRGF0YUNhbGxiYWNrKGNoYXIqLCBzaXplX3QsIHNpemVfdCwg
dm9pZCopOwogICAgIHN0YXRpYyBzaXplX3QgZGlkUmVjZWl2ZUhlYWRlckNhbGxiYWNrKGNoYXIq
LCBzaXplX3QsIHNpemVfdCwgdm9pZCopOwogICAgIHN0YXRpYyBzaXplX3QgZGlkUmVjZWl2ZURh
dGFDYWxsYmFjayhjaGFyKiwgc2l6ZV90LCBzaXplX3QsIHZvaWQqKTsKQEAgLTE2Nyw3ICsxNjUs
NiBAQCBwcml2YXRlOgogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEN1cmxIYW5kbGU+IG1fY3VybEhh
bmRsZTsKICAgICBDdXJsRm9ybURhdGFTdHJlYW0gbV9mb3JtRGF0YVN0cmVhbTsKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8Q3VybFNTTFZlcmlmaWVyPiBtX3NzbFZlcmlmaWVyOwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxDdXJsTXVsdGlwYXJ0SGFuZGxlPiBtX211bHRpcGFydEhhbmRsZTsKIAogICAgIEN1
cmxSZXNwb25zZSBtX3Jlc3BvbnNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jdXJsL0N1cmxTU0xWZXJpZmllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFNTTFZlcmlmaWVyLmNwcAppbmRleCBhNDdjZjhmMTQ4ZS4u
MjQ2Y2QxNzMwZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y3VybC9DdXJsU1NMVmVyaWZpZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY3VybC9DdXJsU1NMVmVyaWZpZXIuY3BwCkBAIC0zNCwxMiArMzQsMTEgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgVmVjdG9yPENlcnRpZmljYXRlSW5mbzo6Q2VydGlm
aWNhdGU+IHBlbURhdGFGcm9tQ3R4KFg1MDlfU1RPUkVfQ1RYKik7CitzdGF0aWMgVmVjdG9yPENl
cnRpZmljYXRlSW5mbzo6Q2VydGlmaWNhdGU+IHBlbURhdGFGcm9tQ3R4KFg1MDlTdG9yZUNUWCop
Owogc3RhdGljIEN1cmxTU0xWZXJpZmllcjo6U1NMQ2VydGlmaWNhdGVGbGFncyBjb252ZXJ0VG9T
U0xDZXJ0aWZpY2F0ZUZsYWdzKHVuc2lnbmVkKTsKIAotQ3VybFNTTFZlcmlmaWVyOjpDdXJsU1NM
VmVyaWZpZXIoQ3VybEhhbmRsZSogY3VybEhhbmRsZSwgY29uc3QgU3RyaW5nJiBob3N0TmFtZSwg
dm9pZCogc3NsQ3R4KQorQ3VybFNTTFZlcmlmaWVyOjpDdXJsU1NMVmVyaWZpZXIoQ3VybEhhbmRs
ZSYgY3VybEhhbmRsZSwgdm9pZCogc3NsQ3R4KQogICAgIDogbV9jdXJsSGFuZGxlKGN1cmxIYW5k
bGUpCi0gICAgLCBtX2hvc3ROYW1lKGhvc3ROYW1lKQogewogICAgIGF1dG8qIGN0eCA9IHN0YXRp
Y19jYXN0PFNTTF9DVFgqPihzc2xDdHgpOwogICAgIGNvbnN0IGF1dG8mIHNzbEhhbmRsZSA9IEN1
cmxDb250ZXh0OjpzaW5nbGV0b24oKS5zc2xIYW5kbGUoKTsKQEAgLTQ4LDcgKzQ3LDcgQEAgQ3Vy
bFNTTFZlcmlmaWVyOjpDdXJsU1NMVmVyaWZpZXIoQ3VybEhhbmRsZSogY3VybEhhbmRsZSwgY29u
c3QgU3RyaW5nJiBob3N0TmFtZSwKICAgICBTU0xfQ1RYX3NldF92ZXJpZnkoY3R4LCBTU0xfQ1RY
X2dldF92ZXJpZnlfbW9kZShjdHgpLCB2ZXJpZnlDYWxsYmFjayk7CiAKICNpZiBkZWZpbmVkKExJ
QlJFU1NMX1ZFUlNJT05fTlVNQkVSKQotICAgIGlmIChhdXRvIGRhdGEgPSBXVEY6OmdldF9pZjxW
ZWN0b3I8Y2hhcj4+KHNzbEhhbmRsZS5nZXRDQUNlcnRJbmZvKCkpKQorICAgIGlmIChhdXRvKiBk
YXRhID0gV1RGOjpnZXRfaWY8VmVjdG9yPGNoYXI+Pihzc2xIYW5kbGUuZ2V0Q0FDZXJ0SW5mbygp
KSkKICAgICAgICAgU1NMX0NUWF9sb2FkX3ZlcmlmeV9tZW0oY3R4LCBzdGF0aWNfY2FzdDx2b2lk
Kj4oY29uc3RfY2FzdDxjaGFyKj4oZGF0YS0+ZGF0YSgpKSksIGRhdGEtPnNpemUoKSk7CiAjZW5k
aWYKIApAQCAtNjMsNyArNjIsNyBAQCBDdXJsU1NMVmVyaWZpZXI6OkN1cmxTU0xWZXJpZmllcihD
dXJsSGFuZGxlKiBjdXJsSGFuZGxlLCBjb25zdCBTdHJpbmcmIGhvc3ROYW1lLAogICAgICAgICBT
U0xfQ1RYX3NldDFfY3VydmVzX2xpc3QoY3R4LCBjdXJ2ZXNMaXN0LnV0ZjgoKS5kYXRhKCkpOwog
fQogCi1ib29sIEN1cmxTU0xWZXJpZmllcjo6dmVyaWZ5KFg1MDlfU1RPUkVfQ1RYKiBjdHgpCiti
b29sIEN1cmxTU0xWZXJpZmllcjo6dmVyaWZ5KFg1MDlTdG9yZUNUWCogY3R4KQogewogICAgIC8v
IHdoZXRoZXIgdGhlIHZlcmlmaWNhdGlvbiBvZiB0aGUgY2VydGlmaWNhdGUgaW4gcXVlc3Rpb24g
d2FzIHBhc3NlZCAocHJldmVyaWZ5X29rPTEpIG9yIG5vdCAocHJldmVyaWZ5X29rPTApCiAgICAg
bV9jZXJ0aWZpY2F0ZUluZm8gPSBDZXJ0aWZpY2F0ZUluZm8geyBYNTA5X1NUT1JFX0NUWF9nZXRf
ZXJyb3IoY3R4KSwgcGVtRGF0YUZyb21DdHgoY3R4KSB9OwpAQCAtNzUsMjIgKzc0LDIxIEBAIGJv
b2wgQ3VybFNTTFZlcmlmaWVyOjp2ZXJpZnkoWDUwOV9TVE9SRV9DVFgqIGN0eCkKICAgICBtX3Nz
bEVycm9ycyA9IHN0YXRpY19jYXN0PGludD4oY29udmVydFRvU1NMQ2VydGlmaWNhdGVGbGFncyhl
cnJvcikpOwogCiAjaWYgUExBVEZPUk0oV0lOKQotICAgIGJvb2wgb2sgPSBDdXJsQ29udGV4dDo6
c2luZ2xldG9uKCkuc3NsSGFuZGxlKCkuaXNBbGxvd2VkSFRUUFNDZXJ0aWZpY2F0ZUhvc3QobV9o
b3N0TmFtZSk7CisgICAgYm9vbCBvayA9IEN1cmxDb250ZXh0OjpzaW5nbGV0b24oKS5zc2xIYW5k
bGUoKS5pc0FsbG93ZWRIVFRQU0NlcnRpZmljYXRlSG9zdChtX2N1cmxIYW5kbGUudXJsKCkuaG9z
dCgpLnRvU3RyaW5nKCkpOwogI2Vsc2UKLSAgICBib29sIG9rID0gQ3VybENvbnRleHQ6OnNpbmds
ZXRvbigpLnNzbEhhbmRsZSgpLmNhbklnbm9yZWRIVFRQU0NlcnRpZmljYXRlKG1faG9zdE5hbWUs
IG1fY2VydGlmaWNhdGVJbmZvLmNlcnRpZmljYXRlQ2hhaW4oKSk7CisgICAgYm9vbCBvayA9IEN1
cmxDb250ZXh0OjpzaW5nbGV0b24oKS5zc2xIYW5kbGUoKS5jYW5JZ25vcmVkSFRUUFNDZXJ0aWZp
Y2F0ZShtX2N1cmxIYW5kbGUudXJsKCkuaG9zdCgpLnRvU3RyaW5nKCksIG1fY2VydGlmaWNhdGVJ
bmZvLmNlcnRpZmljYXRlQ2hhaW4oKSk7CiAjZW5kaWYKIAogICAgIGlmIChvaykgewogICAgICAg
ICAvLyBpZiB0aGUgaG9zdCBhbmQgdGhlIGNlcnRpZmljYXRlIGFyZSBzdG9yZWQgZm9yIHRoZSBj
dXJyZW50IGhhbmRsZSB0aGF0IG1lYW5zIGlzIGVuYWJsZWQsCiAgICAgICAgIC8vIHNvIGRvbid0
IG5lZWQgdG8gY3VybCB2ZXJpZmllcyB0aGUgYXV0aGVudGljaXR5IG9mIHRoZSBwZWVyJ3MgY2Vy
dGlmaWNhdGUKLSAgICAgICAgaWYgKG1fY3VybEhhbmRsZSkKLSAgICAgICAgICAgIG1fY3VybEhh
bmRsZS0+c2V0U3NsVmVyaWZ5UGVlcihDdXJsSGFuZGxlOjpWZXJpZnlQZWVyOjpEaXNhYmxlKTsK
KyAgICAgICAgbV9jdXJsSGFuZGxlLnNldFNzbFZlcmlmeVBlZXIoQ3VybEhhbmRsZTo6VmVyaWZ5
UGVlcjo6RGlzYWJsZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIG9rOwogfQogCi1pbnQgQ3VybFNT
TFZlcmlmaWVyOjp2ZXJpZnlDYWxsYmFjayhpbnQgb2ssIFg1MDlfU1RPUkVfQ1RYKiBjdHgpCitp
bnQgQ3VybFNTTFZlcmlmaWVyOjp2ZXJpZnlDYWxsYmFjayhpbnQgb2ssIFg1MDlTdG9yZUNUWCog
Y3R4KQogewogICAgIGF1dG8gc3NsID0gc3RhdGljX2Nhc3Q8U1NMKj4oWDUwOV9TVE9SRV9DVFhf
Z2V0X2V4X2RhdGEoY3R4LCBTU0xfZ2V0X2V4X2RhdGFfWDUwOV9TVE9SRV9DVFhfaWR4KCkpKTsK
ICAgICBhdXRvIHNzbEN0eCA9IFNTTF9nZXRfU1NMX0NUWChzc2wpOwpAQCAtMTAyLDcgKzEwMCw3
IEBAIGludCBDdXJsU1NMVmVyaWZpZXI6OnZlcmlmeUNhbGxiYWNrKGludCBvaywgWDUwOV9TVE9S
RV9DVFgqIGN0eCkKIAogY2xhc3MgU3RhY2tPZlg1MDkgewogcHVibGljOgotICAgIGV4cGxpY2l0
IFN0YWNrT2ZYNTA5KFg1MDlfU1RPUkVfQ1RYKiBjdHgpCisgICAgZXhwbGljaXQgU3RhY2tPZlg1
MDkoWDUwOVN0b3JlQ1RYKiBjdHgpCiAgICAgICAgIDogbV9jZXJ0cyB7IFg1MDlfU1RPUkVfQ1RY
X2dldDFfY2hhaW4oY3R4KSB9CiAgICAgewogICAgIH0KQEAgLTE0OSw3ICsxNDcsNyBAQCBwcml2
YXRlOgogICAgIEJJTyogbV9iaW8geyBudWxscHRyIH07CiB9OwogCi1zdGF0aWMgVmVjdG9yPENl
cnRpZmljYXRlSW5mbzo6Q2VydGlmaWNhdGU+IHBlbURhdGFGcm9tQ3R4KFg1MDlfU1RPUkVfQ1RY
KiBjdHgpCitzdGF0aWMgVmVjdG9yPENlcnRpZmljYXRlSW5mbzo6Q2VydGlmaWNhdGU+IHBlbURh
dGFGcm9tQ3R4KFg1MDlTdG9yZUNUWCogY3R4KQogewogICAgIFZlY3RvcjxDZXJ0aWZpY2F0ZUlu
Zm86OkNlcnRpZmljYXRlPiByZXN1bHQ7CiAgICAgU3RhY2tPZlg1MDkgY2VydHMgeyBjdHggfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NM
VmVyaWZpZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NM
VmVyaWZpZXIuaAppbmRleCA0OGE2NTQzM2Q2MC4uZDUxZTVmZDcwYTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NMVmVyaWZpZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFNTTFZlcmlmaWVyLmgK
QEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogc3Ry
dWN0IHg1MDlfc3RvcmVfY3R4X3N0OwotdHlwZWRlZiBzdHJ1Y3QgeDUwOV9zdG9yZV9jdHhfc3Qg
WDUwOV9TVE9SRV9DVFg7Cit0eXBlZGVmIHN0cnVjdCB4NTA5X3N0b3JlX2N0eF9zdCBYNTA5U3Rv
cmVDVFg7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTAsMjEgKzUwLDIwIEBAIHB1Ymxp
YzoKICAgICAgICAgU1NMX0NFUlRJRklDQVRFX0dFTkVSSUNfRVJST1IgPSAoMSA8PCA2KSAvLyBT
b21lIG90aGVyIGVycm9yIG9jY3VycmVkIHZhbGlkYXRpbmcgdGhlIGNlcnRpZmljYXRlCiAgICAg
fTsKIAotICAgIEN1cmxTU0xWZXJpZmllcihDdXJsSGFuZGxlKiwgY29uc3QgU3RyaW5nJiBob3N0
TmFtZSwgdm9pZCogc3NsQ3R4KTsKKyAgICBDdXJsU1NMVmVyaWZpZXIoQ3VybEhhbmRsZSYsIHZv
aWQqIHNzbEN0eCk7CiAKICAgICBpbnQgc3NsRXJyb3JzKCkgeyByZXR1cm4gbV9zc2xFcnJvcnM7
IH0KICAgICBjb25zdCBDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRlSW5mbygpIGNvbnN0IHsg
cmV0dXJuIG1fY2VydGlmaWNhdGVJbmZvOyB9CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIGludCB2
ZXJpZnlDYWxsYmFjayhpbnQsIFg1MDlfU1RPUkVfQ1RYKik7CisgICAgc3RhdGljIGludCB2ZXJp
ZnlDYWxsYmFjayhpbnQsIFg1MDlTdG9yZUNUWCopOwogCi0gICAgQ3VybEhhbmRsZSogbV9jdXJs
SGFuZGxlIHsgfTsKLSAgICBTdHJpbmcgbV9ob3N0TmFtZTsKKyAgICBDdXJsSGFuZGxlJiBtX2N1
cmxIYW5kbGU7CiAKICAgICBpbnQgbV9zc2xFcnJvcnMgeyAwIH07CiAgICAgQ2VydGlmaWNhdGVJ
bmZvIG1fY2VydGlmaWNhdGVJbmZvOwogCi0gICAgYm9vbCB2ZXJpZnkoWDUwOV9TVE9SRV9DVFgq
KTsKKyAgICBib29sIHZlcmlmeShYNTA5U3RvcmVDVFgqKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>344860</attachid>
            <date>2018-07-12 10:47:56 -0700</date>
            <delta_ts>2018-07-13 10:28:37 -0700</delta_ts>
            <desc>FIX</desc>
            <filename>187427.diff</filename>
            <type>text/plain</type>
            <size>22065</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4OTU0NTg5YTNjNC4uNjNlY2ZkNTM4OTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NCBAQAorMjAxOC0wNy0wOSAgQmFzdWtlIFN1enVraSAgPEJhc3VrZS5TdXp1a2lAc29u
eS5jb20+CisKKyAgICAgICAgW0N1cmxdIE1vdmUgSFRUUCBTZXR1cCBsb2dpYyBmcm9tIEN1cmxS
ZXF1ZXN0IHRvIEN1cmxIYW5kbGUgZm9yIHJldXNlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg3NDI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQ3VybENvbnRleHQgd2lsbCBiZSB1c2VkIGJ5IFNlY3Vy
ZSBXZWJTb2NrZXQgY2xpZW50LCBidXQgSFRUUCBzZXR1cCBjb2RlIGlzCisgICAgICAgIGluIEN1
cmxSZXF1ZXN0LCB3aGljaCBpcyBvbmx5IGZvciByZWd1bGFyIEhUVFAvSFRUUFMgdHJhbnNhY3Rp
b24uIFRoaXMgcGF0Y2gKKyAgICAgICAgYWxsb3dzIHdzcyBjbGllbnQgdG8gc2V0dXAgQ3VybEhh
bmRsZSBmb3IgSFRUUFMgY29tbXVuaWNhdGlvbiwgc3VjaCBhcyBUTFMsCisgICAgICAgIHByb3h5
IG9yIGF1dGhlbnRpY2F0aW9uLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIHRoZXJl
J3Mgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJs
L0N1cmxDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OkN1cmxIYW5k
bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEhhbmRsZTo6ZW5hYmxlU1NMRm9ySG9zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDdXJsSGFuZGxlOjp3aWxsU2V0dXBTc2xDdHgpOgorICAgICAgICAo
V2ViQ29yZTo6Q3VybEhhbmRsZTo6d2lsbFNldHVwU3NsQ3R4Q2FsbGJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6Q3VybEhhbmRsZTo6c3NsRXJyb3JzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkN1cmxIYW5kbGU6OnNldFVybCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSGFuZGxlOjplbmFi
bGVIdHRwKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OmVuYWJsZUNvbm5lY3Rpb25P
bmx5KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OmNlcnRpZmljYXRlSW5mbyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSGFuZGxlOjplbmFibGVTdGRFcnJJZlVzZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VybEhhbmRsZTo6aW5pdGlhbGl6ZSk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0Lmg6CisgICAgICAgIChXZWJD
b3JlOjpDdXJsSGFuZGxlOjp1cmwgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
Y3VybC9DdXJsUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDdXJsUmVxdWVzdDo6c2V0
dXBUcmFuc2Zlcik6CisgICAgICAgIChXZWJDb3JlOjpDdXJsUmVxdWVzdDo6ZGlkUmVjZWl2ZUhl
YWRlcik6CisgICAgICAgIChXZWJDb3JlOjpDdXJsUmVxdWVzdDo6ZGlkQ29tcGxldGVUcmFuc2Zl
cik6CisgICAgICAgIChXZWJDb3JlOjpDdXJsUmVxdWVzdDo6ZmluYWxpemVUcmFuc2Zlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDdXJsUmVxdWVzdDo6d2lsbFNldHVwU3NsQ3R4KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkN1cmxSZXF1ZXN0Ojp3aWxsU2V0dXBTc2xDdHhDYWxsYmFjayk6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxSZXF1ZXN0Lmg6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxTU0xWZXJpZmllci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDdXJsU1NMVmVyaWZpZXI6OkN1cmxTU0xWZXJpZmllcik6CisgICAg
ICAgIChXZWJDb3JlOjpDdXJsU1NMVmVyaWZpZXI6OnZlcmlmeSk6CisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9jdXJsL0N1cmxTU0xWZXJpZmllci5oOgorCiAyMDE4LTA3LTA2ICBUaW1vdGh5
IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KIAogICAgICAgICBTZW1hbnRpYyBjb2xvcnMg
ZG9uJ3QgdXBkYXRlIHdoZW4gYWNjZXNzaWJpbGl0eSBJbmNyZWFzZSBDb250cmFzdCBtb2RlIGlz
IGVuYWJsZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvQ3VybENvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJs
L0N1cmxDb250ZXh0LmNwcAppbmRleCAxZjBhYzI3NGY0My4uOTVhYWE4OWVmYTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0LmNw
cApAQCAtMjgsNyArMjgsMTAgQEAKICNpbmNsdWRlICJDdXJsQ29udGV4dC5oIgogCiAjaWYgVVNF
KENVUkwpCisjaW5jbHVkZSAiQ2VydGlmaWNhdGVJbmZvLmgiCiAjaW5jbHVkZSAiQ3VybFJlcXVl
c3RTY2hlZHVsZXIuaCIKKyNpbmNsdWRlICJDdXJsU1NMSGFuZGxlLmgiCisjaW5jbHVkZSAiQ3Vy
bFNTTFZlcmlmaWVyLmgiCiAjaW5jbHVkZSAiSFRUUEhlYWRlck1hcC5oIgogI2luY2x1ZGUgPE5l
dHdvcmtMb2FkTWV0cmljcy5oPgogI2luY2x1ZGUgPG11dGV4PgpAQCAtMjYxLDYgKzI2NCwyMSBA
QCBDVVJMTXNnKiBDdXJsTXVsdGlIYW5kbGU6OnJlYWRJbmZvKGludCYgbWVzc2FnZXNJblF1ZXVl
KQogQ3VybEhhbmRsZTo6Q3VybEhhbmRsZSgpCiB7CiAgICAgbV9oYW5kbGUgPSBjdXJsX2Vhc3lf
aW5pdCgpOworICAgIGN1cmxfZWFzeV9zZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfRVJST1JCVUZG
RVIsIG1fZXJyb3JCdWZmZXIpOworCisgICAgZW5hYmxlU2hhcmVIYW5kbGUoKTsKKyAgICBlbmFi
bGVBbGxvd2VkUHJvdG9jb2xzKCk7CisgICAgZW5hYmxlQWNjZXB0RW5jb2RpbmcoKTsKKworICAg
IHNldERuc0NhY2hlVGltZW91dChDdXJsQ29udGV4dDo6c2luZ2xldG9uKCkuZG5zQ2FjaGVUaW1l
b3V0KCkpOworICAgIHNldENvbm5lY3RUaW1lb3V0KEN1cmxDb250ZXh0OjpzaW5nbGV0b24oKS5j
b25uZWN0VGltZW91dCgpKTsKKworICAgIGVuYWJsZVByb3h5SWZFeGlzdHMoKTsKKworI2lmbmRl
ZiBOREVCVUcKKyAgICBlbmFibGVWZXJib3NlSWZVc2VkKCk7CisgICAgZW5hYmxlU3RkRXJySWZV
c2VkKCk7CisjZW5kaWYKIH0KIAogQ3VybEhhbmRsZTo6fkN1cmxIYW5kbGUoKQpAQCAtMjc0LDkg
KzI5Miw1MiBAQCBjb25zdCBTdHJpbmcgQ3VybEhhbmRsZTo6ZXJyb3JEZXNjcmlwdGlvbihDVVJM
Y29kZSBlcnJvckNvZGUpCiAgICAgcmV0dXJuIFN0cmluZyhjdXJsX2Vhc3lfc3RyZXJyb3IoZXJy
b3JDb2RlKSk7CiB9CiAKLXZvaWQgQ3VybEhhbmRsZTo6aW5pdGlhbGl6ZSgpCit2b2lkIEN1cmxI
YW5kbGU6OmVuYWJsZVNTTEZvckhvc3QoY29uc3QgU3RyaW5nJiBob3N0KQogewotICAgIGN1cmxf
ZWFzeV9zZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfRVJST1JCVUZGRVIsIG1fZXJyb3JCdWZmZXIp
OworICAgIGF1dG8mIHNzbEhhbmRsZSA9IEN1cmxDb250ZXh0OjpzaW5nbGV0b24oKS5zc2xIYW5k
bGUoKTsKKyAgICBpZiAoYXV0byBzc2xDbGllbnRDZXJ0aWZpY2F0ZSA9IHNzbEhhbmRsZS5nZXRT
U0xDbGllbnRDZXJ0aWZpY2F0ZShob3N0KSkgeworICAgICAgICBzZXRTc2xDZXJ0KHNzbENsaWVu
dENlcnRpZmljYXRlLT5maXJzdC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgc2V0U3NsQ2VydFR5
cGUoIlAxMiIpOworICAgICAgICBzZXRTc2xLZXlQYXNzd29yZChzc2xDbGllbnRDZXJ0aWZpY2F0
ZS0+c2Vjb25kLnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKworICAgIGlmIChzc2xIYW5kbGUuc2hv
dWxkSWdub3JlU1NMRXJyb3JzKCkpIHsKKyAgICAgICAgc2V0U3NsVmVyaWZ5UGVlcihDdXJsSGFu
ZGxlOjpWZXJpZnlQZWVyOjpEaXNhYmxlKTsKKyAgICAgICAgc2V0U3NsVmVyaWZ5SG9zdChDdXJs
SGFuZGxlOjpWZXJpZnlIb3N0OjpMb29zZU5hbWVDaGVjayk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgc2V0U3NsVmVyaWZ5UGVlcihDdXJsSGFuZGxlOjpWZXJpZnlQZWVyOjpFbmFibGUpOworICAg
ICAgICBzZXRTc2xWZXJpZnlIb3N0KEN1cmxIYW5kbGU6OlZlcmlmeUhvc3Q6OlN0cmljdE5hbWVD
aGVjayk7CisgICAgfQorCisgICAgY29uc3QgYXV0byYgY2lwaGVyTGlzdCA9IHNzbEhhbmRsZS5n
ZXRDaXBoZXJMaXN0KCk7CisgICAgaWYgKCFjaXBoZXJMaXN0LmlzRW1wdHkoKSkKKyAgICAgICAg
c2V0U3NsQ2lwaGVyTGlzdChjaXBoZXJMaXN0LnV0ZjgoKS5kYXRhKCkpOworCisgICAgc2V0U3Ns
Q3R4Q2FsbGJhY2tGdW5jdGlvbih3aWxsU2V0dXBTc2xDdHhDYWxsYmFjaywgdGhpcyk7CisKKyAg
ICBpZiAoYXV0byogcGF0aCA9IFdURjo6Z2V0X2lmPFN0cmluZz4oc3NsSGFuZGxlLmdldENBQ2Vy
dEluZm8oKSkpCisgICAgICAgIHNldENBQ2VydFBhdGgocGF0aC0+dXRmOCgpLmRhdGEoKSk7Cit9
CisKK0NVUkxjb2RlIEN1cmxIYW5kbGU6OndpbGxTZXR1cFNzbEN0eCh2b2lkKiBzc2xDdHgpCit7
CisgICAgaWYgKCFzc2xDdHgpCisgICAgICAgIHJldHVybiBDVVJMRV9BQk9SVEVEX0JZX0NBTExC
QUNLOworCisgICAgaWYgKCFtX3NzbFZlcmlmaWVyKQorICAgICAgICBtX3NzbFZlcmlmaWVyID0g
c3RkOjptYWtlX3VuaXF1ZTxDdXJsU1NMVmVyaWZpZXI+KCp0aGlzLCBzc2xDdHgpOworCisgICAg
cmV0dXJuIENVUkxFX09LOworfQorCitDVVJMY29kZSBDdXJsSGFuZGxlOjp3aWxsU2V0dXBTc2xD
dHhDYWxsYmFjayhDVVJMKiwgdm9pZCogc3NsQ3R4LCB2b2lkKiB1c2VyRGF0YSkKK3sKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Q3VybEhhbmRsZSo+KHVzZXJEYXRhKS0+d2lsbFNldHVwU3NsQ3R4
KHNzbEN0eCk7Cit9CisKK2ludCBDdXJsSGFuZGxlOjpzc2xFcnJvcnMoKSBjb25zdAoreworICAg
IHJldHVybiBtX3NzbFZlcmlmaWVyID8gbV9zc2xWZXJpZmllci0+c3NsRXJyb3JzKCkgOiAwOwog
fQogCiBDVVJMY29kZSBDdXJsSGFuZGxlOjpwZXJmb3JtKCkKQEAgLTI5Niw2ICszNTcsOCBAQCB2
b2lkIEN1cmxIYW5kbGU6OmVuYWJsZVNoYXJlSGFuZGxlKCkKIAogdm9pZCBDdXJsSGFuZGxlOjpz
ZXRVcmwoY29uc3QgVVJMJiB1cmwpCiB7CisgICAgbV91cmwgPSB1cmwuaXNvbGF0ZWRDb3B5KCk7
CisKICAgICBVUkwgY3VybFVybCA9IHVybDsKIAogICAgIC8vIFJlbW92ZSBhbnkgZnJhZ21lbnQg
cGFydCwgb3RoZXJ3aXNlIGN1cmwgd2lsbCBzZW5kIGl0IGFzIHBhcnQgb2YgdGhlIHJlcXVlc3Qu
CkBAIC0zMTAsNiArMzczLDkgQEAgdm9pZCBDdXJsSGFuZGxlOjpzZXRVcmwoY29uc3QgVVJMJiB1
cmwpCiAKICAgICAvLyB1cmwgaXMgaW4gQVNDSUkgc28gbGF0aW4xKCkgd2lsbCBvbmx5IGNvbnZl
cnQgaXQgdG8gY2hhciogd2l0aG91dCBjaGFyYWN0ZXIgdHJhbnNsYXRpb24uCiAgICAgY3VybF9l
YXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9VUkwsIGN1cmxVcmwuc3RyaW5nKCkubGF0aW4x
KCkuZGF0YSgpKTsKKworICAgIGlmICh1cmwucHJvdG9jb2xJcygiaHR0cHMiKSkKKyAgICAgICAg
ZW5hYmxlU1NMRm9ySG9zdChtX3VybC5ob3N0KCkudG9TdHJpbmcoKSk7CiB9CiAKIHZvaWQgQ3Vy
bEhhbmRsZTo6YXBwZW5kUmVxdWVzdEhlYWRlcnMoY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVy
cykKQEAgLTM2Nyw3ICs0MzMsNyBAQCB2b2lkIEN1cmxIYW5kbGU6OmVuYWJsZVJlcXVlc3RIZWFk
ZXJzKCkKIAogdm9pZCBDdXJsSGFuZGxlOjplbmFibGVIdHRwKCkKIHsKLSAgICBpZiAoQ3VybENv
bnRleHQ6OnNpbmdsZXRvbigpLmlzSHR0cDJFbmFibGVkKCkpIHsKKyAgICBpZiAobV91cmwucHJv
dG9jb2xJcygiaHR0cHMiKSAmJiBDdXJsQ29udGV4dDo6c2luZ2xldG9uKCkuaXNIdHRwMkVuYWJs
ZWQoKSkgewogICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX0hUVFBf
VkVSU0lPTiwgQ1VSTF9IVFRQX1ZFUlNJT05fMlRMUyk7CiAgICAgICAgIGN1cmxfZWFzeV9zZXRv
cHQobV9oYW5kbGUsIENVUkxPUFRfUElQRVdBSVQsIDFMKTsKICAgICAgICAgY3VybF9lYXN5X3Nl
dG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9TU0xfRU5BQkxFX0FMUE4sIDFMKTsKQEAgLTU2MCw2ICs2
MjYsMTEgQEAgdm9pZCBDdXJsSGFuZGxlOjpzZXRTc2xDdHhDYWxsYmFja0Z1bmN0aW9uKGN1cmxf
c3NsX2N0eF9jYWxsYmFjayBjYWxsYmFja0Z1bmMsIHYKICAgICBjdXJsX2Vhc3lfc2V0b3B0KG1f
aGFuZGxlLCBDVVJMT1BUX1NTTF9DVFhfRlVOQ1RJT04sIGNhbGxiYWNrRnVuYyk7CiB9CiAKK3Zv
aWQgQ3VybEhhbmRsZTo6ZW5hYmxlQ29ubmVjdGlvbk9ubHkoKQoreworICAgIGN1cmxfZWFzeV9z
ZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfQ09OTkVDVF9PTkxZLCAxTCk7Cit9CisKIHN0ZDo6b3B0
aW9uYWw8U3RyaW5nPiBDdXJsSGFuZGxlOjpnZXRQcm94eVVybCgpCiB7CiAgICAgYXV0byYgcHJv
eHkgPSBDdXJsQ29udGV4dDo6c2luZ2xldG9uKCkucHJveHlTZXR0aW5ncygpOwpAQCAtNjkyLDYg
Kzc2MywxNCBAQCBzdGQ6Om9wdGlvbmFsPE5ldHdvcmtMb2FkTWV0cmljcz4gQ3VybEhhbmRsZTo6
Z2V0TmV0d29ya0xvYWRNZXRyaWNzKCkKICAgICByZXR1cm4gbmV0d29ya0xvYWRNZXRyaWNzOwog
fQogCitzdGQ6Om9wdGlvbmFsPENlcnRpZmljYXRlSW5mbz4gQ3VybEhhbmRsZTo6Y2VydGlmaWNh
dGVJbmZvKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fc3NsVmVyaWZpZXIpCisgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gbV9zc2xWZXJpZmllci0+Y2VydGlmaWNhdGVJ
bmZvKCk7Cit9CisKIGxvbmcgbG9uZyBDdXJsSGFuZGxlOjptYXhDdXJsT2ZmVCgpCiB7CiAgICAg
c3RhdGljIGNvbnN0IGxvbmcgbG9uZyBtYXhDdXJsT2ZmVCA9ICgxTEwgPDwgKGV4cGVjdGVkU2l6
ZU9mQ3VybE9mZlQoKSAqIDggLSAxKSkgLSAxOwpAQCAtNzI1LDggKzgwNCw4IEBAIHZvaWQgQ3Vy
bEhhbmRsZTo6ZW5hYmxlVmVyYm9zZUlmVXNlZCgpCiAKIHZvaWQgQ3VybEhhbmRsZTo6ZW5hYmxl
U3RkRXJySWZVc2VkKCkKIHsKLSAgICBpZiAoQ3VybENvbnRleHQ6OnNpbmdsZXRvbigpLmdldExv
Z0ZpbGUoKSkKLSAgICAgICAgY3VybF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9WRVJC
T1NFLCAxKTsKKyAgICBpZiAoYXV0byBsb2cgPSBDdXJsQ29udGV4dDo6c2luZ2xldG9uKCkuZ2V0
TG9nRmlsZSgpKQorICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX1NU
REVSUiwgbG9nKTsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5oCmluZGV4IDRmY2Y5YmU5YmQ1Li4yNWFhMThiZDdm
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxD
b250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxD
b250ZXh0LmgKQEAgLTE5NCw2ICsxOTQsOCBAQCBwcml2YXRlOgogCiAvLyBDdXJsSGFuZGxlIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorY2xhc3Mg
Q2VydGlmaWNhdGVJbmZvOworY2xhc3MgQ3VybFNTTFZlcmlmaWVyOwogY2xhc3MgSFRUUEhlYWRl
ck1hcDsKIGNsYXNzIE5ldHdvcmtMb2FkTWV0cmljczsKIApAQCAtMjE1LDggKzIxNyw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIH5DdXJsSGFuZGxlKCk7CiAKICAgICBDVVJMKiBoYW5kbGUoKSBj
b25zdCB7IHJldHVybiBtX2hhbmRsZTsgfQotCi0gICAgdm9pZCBpbml0aWFsaXplKCk7CisgICAg
Y29uc3QgVVJMJiB1cmwoKSBjb25zdCB7IHJldHVybiBtX3VybDsgfQogCiAgICAgQ1VSTGNvZGUg
cGVyZm9ybSgpOwogICAgIENVUkxjb2RlIHBhdXNlKGludCk7CkBAIC0yMjYsNiArMjI3LDcgQEAg
cHVibGljOgogICAgIHZvaWQgZW5hYmxlU2hhcmVIYW5kbGUoKTsKIAogICAgIHZvaWQgc2V0VXJs
KGNvbnN0IFVSTCYpOworICAgIHZvaWQgZW5hYmxlU1NMRm9ySG9zdChjb25zdCBTdHJpbmcmKTsK
IAogICAgIHZvaWQgYXBwZW5kUmVxdWVzdEhlYWRlcnMoY29uc3QgSFRUUEhlYWRlck1hcCYpOwog
ICAgIHZvaWQgYXBwZW5kUmVxdWVzdEhlYWRlcihjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0
cmluZyYgdmFsdWUpOwpAQCAtMjQyLDYgKzI0NCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldElu
RmlsZVNpemVMYXJnZShjdXJsX29mZl90KTsKICAgICB2b2lkIHNldEh0dHBDdXN0b21SZXF1ZXN0
KGNvbnN0IFN0cmluZyYpOwogCisgICAgdm9pZCBlbmFibGVDb25uZWN0aW9uT25seSgpOworCiAg
ICAgdm9pZCBlbmFibGVBY2NlcHRFbmNvZGluZygpOwogICAgIHZvaWQgZW5hYmxlQWxsb3dlZFBy
b3RvY29scygpOwogCkBAIC0yNzgsNiArMjgyLDkgQEAgcHVibGljOgogICAgIHN0ZDo6b3B0aW9u
YWw8bG9uZz4gZ2V0SHR0cFZlcnNpb24oKTsKICAgICBzdGQ6Om9wdGlvbmFsPE5ldHdvcmtMb2Fk
TWV0cmljcz4gZ2V0TmV0d29ya0xvYWRNZXRyaWNzKCk7CiAKKyAgICBpbnQgc3NsRXJyb3JzKCkg
Y29uc3Q7CisgICAgc3RkOjpvcHRpb25hbDxDZXJ0aWZpY2F0ZUluZm8+IGNlcnRpZmljYXRlSW5m
bygpIGNvbnN0OworCiAgICAgc3RhdGljIGxvbmcgbG9uZyBtYXhDdXJsT2ZmVCgpOwogCiAjaWZu
ZGVmIE5ERUJVRwpAQCAtMjg5LDEwICsyOTYsMTUgQEAgcHJpdmF0ZToKICAgICB2b2lkIGVuYWJs
ZVJlcXVlc3RIZWFkZXJzKCk7CiAgICAgc3RhdGljIGludCBleHBlY3RlZFNpemVPZkN1cmxPZmZU
KCk7CiAKKyAgICBzdGF0aWMgQ1VSTGNvZGUgd2lsbFNldHVwU3NsQ3R4Q2FsbGJhY2soQ1VSTCos
IHZvaWQqIHNzbEN0eCwgdm9pZCogdXNlckRhdGEpOworICAgIENVUkxjb2RlIHdpbGxTZXR1cFNz
bEN0eCh2b2lkKiBzc2xDdHgpOworCiAgICAgQ1VSTCogbV9oYW5kbGUgeyBudWxscHRyIH07CiAg
ICAgY2hhciBtX2Vycm9yQnVmZmVyW0NVUkxfRVJST1JfU0laRV0geyB9OwogCisgICAgVVJMIG1f
dXJsOwogICAgIEN1cmxTTGlzdCBtX3JlcXVlc3RIZWFkZXJzOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxDdXJsU1NMVmVyaWZpZXI+IG1fc3NsVmVyaWZpZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
Q3VybFJlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1
cmxSZXF1ZXN0LmNwcAppbmRleCAwYmRhZTk0ZTdkZC4uZmFiMTM4ZmZkY2EgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVxdWVzdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxSZXF1ZXN0LmNwcApA
QCAtNTAsNiArNTAsMTMgQEAgQ3VybFJlcXVlc3Q6OkN1cmxSZXF1ZXN0KGNvbnN0IFJlc291cmNl
UmVxdWVzdCZyZXF1ZXN0LCBDdXJsUmVxdWVzdENsaWVudCogY2xpZW4KICAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwogfQogCit2b2lkIEN1cmxSZXF1ZXN0OjppbnZhbGlkYXRlQ2xpZW50KCkK
K3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgbV9jbGllbnQgPSBudWxscHRy
OworfQorCiB2b2lkIEN1cmxSZXF1ZXN0OjpzZXRVc2VyUGFzcyhjb25zdCBTdHJpbmcmIHVzZXIs
IGNvbnN0IFN0cmluZyYgcGFzc3dvcmQpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
QEAgLTE0Niw5ICsxNTMsOCBAQCB2b2lkIEN1cmxSZXF1ZXN0OjpyZXN1bWUoKQogdm9pZCBDdXJs
UmVxdWVzdDo6Y2FsbENsaWVudChGdW5jdGlvbjx2b2lkKEN1cmxSZXF1ZXN0JiwgQ3VybFJlcXVl
c3RDbGllbnQmKT4mJiB0YXNrKQogewogICAgIHJ1bk9uTWFpblRocmVhZChbdGhpcywgcHJvdGVj
dGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCB0YXNrID0gV1RGTW92ZSh0YXNrKV0oKSBtdXRhYmxl
IHsKLSAgICAgICAgaWYgKEN1cmxSZXF1ZXN0Q2xpZW50KiBjbGllbnQgPSBtX2NsaWVudCkgewot
ICAgICAgICAgICAgdGFzaygqdGhpcywgbWFrZVJlZigqY2xpZW50KSk7Ci0gICAgICAgIH0KKyAg
ICAgICAgaWYgKG1fY2xpZW50KQorICAgICAgICAgICAgdGFzaygqdGhpcywgbWFrZVJlZigqbV9j
bGllbnQpKTsKICAgICB9KTsKIH0KIApAQCAtMTc3LDggKzE4Myw4IEBAIENVUkwqIEN1cmxSZXF1
ZXN0OjpzZXR1cFRyYW5zZmVyKCkKIAogICAgIG1fY3VybEhhbmRsZSA9IHN0ZDo6bWFrZV91bmlx
dWU8Q3VybEhhbmRsZT4oKTsKIAotICAgIG1fY3VybEhhbmRsZS0+aW5pdGlhbGl6ZSgpOwogICAg
IG1fY3VybEhhbmRsZS0+c2V0VXJsKG1fcmVxdWVzdC51cmwoKSk7CisKICAgICBtX2N1cmxIYW5k
bGUtPmFwcGVuZFJlcXVlc3RIZWFkZXJzKGh0dHBIZWFkZXJGaWVsZHMpOwogCiAgICAgY29uc3Qg
YXV0byYgbWV0aG9kID0gbV9yZXF1ZXN0Lmh0dHBNZXRob2QoKTsKQEAgLTIwMCw2MyArMjA2LDE3
IEBAIENVUkwqIEN1cmxSZXF1ZXN0OjpzZXR1cFRyYW5zZmVyKCkKICAgICAgICAgbV9jdXJsSGFu
ZGxlLT5zZXRIdHRwQXV0aFVzZXJQYXNzKG1fdXNlciwgbV9wYXNzd29yZCk7CiAgICAgfQogCi0g
ICAgbV9jdXJsSGFuZGxlLT5zZXRTc2xDdHhDYWxsYmFja0Z1bmN0aW9uKHdpbGxTZXR1cFNzbEN0
eENhbGxiYWNrLCB0aGlzKTsKICAgICBtX2N1cmxIYW5kbGUtPnNldEhlYWRlckNhbGxiYWNrRnVu
Y3Rpb24oZGlkUmVjZWl2ZUhlYWRlckNhbGxiYWNrLCB0aGlzKTsKICAgICBtX2N1cmxIYW5kbGUt
PnNldFdyaXRlQ2FsbGJhY2tGdW5jdGlvbihkaWRSZWNlaXZlRGF0YUNhbGxiYWNrLCB0aGlzKTsK
IAotICAgIG1fY3VybEhhbmRsZS0+ZW5hYmxlU2hhcmVIYW5kbGUoKTsKLSAgICBtX2N1cmxIYW5k
bGUtPmVuYWJsZUFsbG93ZWRQcm90b2NvbHMoKTsKLSAgICBtX2N1cmxIYW5kbGUtPmVuYWJsZUFj
Y2VwdEVuY29kaW5nKCk7Ci0KICAgICBtX2N1cmxIYW5kbGUtPnNldFRpbWVvdXQoU2Vjb25kcyht
X3JlcXVlc3QudGltZW91dEludGVydmFsKCkpKTsKLSAgICBtX2N1cmxIYW5kbGUtPnNldERuc0Nh
Y2hlVGltZW91dChDdXJsQ29udGV4dDo6c2luZ2xldG9uKCkuZG5zQ2FjaGVUaW1lb3V0KCkpOwot
ICAgIG1fY3VybEhhbmRsZS0+c2V0Q29ubmVjdFRpbWVvdXQoQ3VybENvbnRleHQ6OnNpbmdsZXRv
bigpLmNvbm5lY3RUaW1lb3V0KCkpOwotCi0gICAgbV9jdXJsSGFuZGxlLT5lbmFibGVQcm94eUlm
RXhpc3RzKCk7Ci0KLSAgICBpZiAoc3NsSGFuZGxlLnNob3VsZElnbm9yZVNTTEVycm9ycygpKSB7
Ci0gICAgICAgIG1fY3VybEhhbmRsZS0+c2V0U3NsVmVyaWZ5UGVlcihDdXJsSGFuZGxlOjpWZXJp
ZnlQZWVyOjpEaXNhYmxlKTsKLSAgICAgICAgbV9jdXJsSGFuZGxlLT5zZXRTc2xWZXJpZnlIb3N0
KEN1cmxIYW5kbGU6OlZlcmlmeUhvc3Q6Okxvb3NlTmFtZUNoZWNrKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBtX2N1cmxIYW5kbGUtPnNldFNzbFZlcmlmeVBlZXIoQ3VybEhhbmRsZTo6VmVyaWZ5
UGVlcjo6RW5hYmxlKTsKLSAgICAgICAgbV9jdXJsSGFuZGxlLT5zZXRTc2xWZXJpZnlIb3N0KEN1
cmxIYW5kbGU6OlZlcmlmeUhvc3Q6OlN0cmljdE5hbWVDaGVjayk7Ci0gICAgfQotCi0gICAgYXV0
byBjaXBoZXJMaXN0ID0gc3NsSGFuZGxlLmdldENpcGhlckxpc3QoKTsKLSAgICBpZiAoIWNpcGhl
ckxpc3QuaXNFbXB0eSgpKQotICAgICAgICBtX2N1cmxIYW5kbGUtPnNldFNzbENpcGhlckxpc3Qo
Y2lwaGVyTGlzdC51dGY4KCkuZGF0YSgpKTsKLQotICAgIGF1dG8gc3NsQ2xpZW50Q2VydGlmaWNh
dGUgPSBzc2xIYW5kbGUuZ2V0U1NMQ2xpZW50Q2VydGlmaWNhdGUobV9yZXF1ZXN0LnVybCgpLmhv
c3QoKS50b1N0cmluZygpKTsKLSAgICBpZiAoc3NsQ2xpZW50Q2VydGlmaWNhdGUpIHsKLSAgICAg
ICAgbV9jdXJsSGFuZGxlLT5zZXRTc2xDZXJ0KHNzbENsaWVudENlcnRpZmljYXRlLT5maXJzdC51
dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgbV9jdXJsSGFuZGxlLT5zZXRTc2xDZXJ0VHlwZSgiUDEy
Iik7Ci0gICAgICAgIG1fY3VybEhhbmRsZS0+c2V0U3NsS2V5UGFzc3dvcmQoc3NsQ2xpZW50Q2Vy
dGlmaWNhdGUtPnNlY29uZC51dGY4KCkuZGF0YSgpKTsKLSAgICB9Ci0KLSAgICBpZiAoYXV0byBw
YXRoID0gV1RGOjpnZXRfaWY8U3RyaW5nPihzc2xIYW5kbGUuZ2V0Q0FDZXJ0SW5mbygpKSkKLSAg
ICAgICAgbV9jdXJsSGFuZGxlLT5zZXRDQUNlcnRQYXRoKHBhdGgtPnV0ZjgoKS5kYXRhKCkpOwog
CiAgICAgaWYgKG1fc2hvdWxkU3VzcGVuZCkKICAgICAgICAgc2V0UmVxdWVzdFBhdXNlZCh0cnVl
KTsKIAotI2lmbmRlZiBOREVCVUcKLSAgICBtX2N1cmxIYW5kbGUtPmVuYWJsZVZlcmJvc2VJZlVz
ZWQoKTsKLSAgICBtX2N1cmxIYW5kbGUtPmVuYWJsZVN0ZEVycklmVXNlZCgpOwotI2VuZGlmCi0K
ICAgICByZXR1cm4gbV9jdXJsSGFuZGxlLT5oYW5kbGUoKTsKIH0KIAotQ1VSTGNvZGUgQ3VybFJl
cXVlc3Q6OndpbGxTZXR1cFNzbEN0eCh2b2lkKiBzc2xDdHgpCi17Ci0gICAgaWYgKCFzc2xDdHgp
Ci0gICAgICAgIHJldHVybiBDVVJMRV9BQk9SVEVEX0JZX0NBTExCQUNLOwotCi0gICAgaWYgKCFt
X3NzbFZlcmlmaWVyKQotICAgICAgICBtX3NzbFZlcmlmaWVyID0gc3RkOjptYWtlX3VuaXF1ZTxD
dXJsU1NMVmVyaWZpZXI+KG1fY3VybEhhbmRsZS5nZXQoKSwgbV9yZXF1ZXN0LnVybCgpLmhvc3Qo
KS50b1N0cmluZygpLCBzc2xDdHgpOwotICAgIHJldHVybiBDVVJMRV9PSzsKLX0KLQogLy8gVGhp
cyBpcyBjYWxsZWQgdG8gb2J0YWluIEhUVFAgUE9TVCBvciBQVVQgZGF0YS4KIC8vIEl0ZXJhdGUg
dGhyb3VnaCBGb3JtRGF0YSBlbGVtZW50cyBhbmQgdXBsb2FkIGZpbGVzLgogLy8gQ2FyZWZ1bGx5
IHJlc3BlY3QgdGhlIGdpdmVuIGJ1ZmZlciBzaXplIGFuZCBmaWxsIHRoZSByZXN0IG9mIHRoZSBk
YXRhIGF0IHRoZSBuZXh0IGNhbGxzLgpAQCAtMzUyLDggKzMxMiw4IEBAIHNpemVfdCBDdXJsUmVx
dWVzdDo6ZGlkUmVjZWl2ZUhlYWRlcihTdHJpbmcmJiBoZWFkZXIpCiAgICAgaWYgKG1fcmVzcG9u
c2UuYXZhaWxhYmxlUHJveHlBdXRoKQogICAgICAgICBDdXJsQ29udGV4dDo6c2luZ2xldG9uKCku
c2V0UHJveHlBdXRoTWV0aG9kKG1fcmVzcG9uc2UuYXZhaWxhYmxlUHJveHlBdXRoKTsKIAotICAg
IGlmIChtX3NzbFZlcmlmaWVyKQotICAgICAgICBtX2NlcnRpZmljYXRlSW5mbyA9IG1fc3NsVmVy
aWZpZXItPmNlcnRpZmljYXRlSW5mbygpOworICAgIGlmIChhdXRvIGluZm8gPSBtX2N1cmxIYW5k
bGUtPmNlcnRpZmljYXRlSW5mbygpKQorICAgICAgICBtX2NlcnRpZmljYXRlSW5mbyA9ICppbmZv
OwogCiAgICAgaWYgKG1fZW5hYmxlTXVsdGlwYXJ0KQogICAgICAgICBtX211bHRpcGFydEhhbmRs
ZSA9IEN1cmxNdWx0aXBhcnRIYW5kbGU6OmNyZWF0ZUlmTmVlZGVkKCp0aGlzLCBtX3Jlc3BvbnNl
KTsKQEAgLTQ2MywxMSArNDIzLDEwIEBAIHZvaWQgQ3VybFJlcXVlc3Q6OmRpZENvbXBsZXRlVHJh
bnNmZXIoQ1VSTGNvZGUgcmVzdWx0KQogICAgIH0gZWxzZSB7CiAgICAgICAgIGF1dG8gdHlwZSA9
IChyZXN1bHQgPT0gQ1VSTEVfT1BFUkFUSU9OX1RJTUVET1VUICYmIG1fcmVxdWVzdC50aW1lb3V0
SW50ZXJ2YWwoKSA+IDAuMCkgPyBSZXNvdXJjZUVycm9yOjpUeXBlOjpUaW1lb3V0IDogUmVzb3Vy
Y2VFcnJvcjo6VHlwZTo6R2VuZXJhbDsKICAgICAgICAgYXV0byByZXNvdXJjZUVycm9yID0gUmVz
b3VyY2VFcnJvcjo6aHR0cEVycm9yKHJlc3VsdCwgbV9yZXF1ZXN0LnVybCgpLCB0eXBlKTsKLSAg
ICAgICAgaWYgKG1fc3NsVmVyaWZpZXIpIHsKLSAgICAgICAgICAgIHJlc291cmNlRXJyb3Iuc2V0
U3NsRXJyb3JzKG1fc3NsVmVyaWZpZXItPnNzbEVycm9ycygpKTsKLQotICAgICAgICAgICAgbV9j
ZXJ0aWZpY2F0ZUluZm8gPSBtX3NzbFZlcmlmaWVyLT5jZXJ0aWZpY2F0ZUluZm8oKTsKLSAgICAg
ICAgfQorICAgICAgICBpZiAoYXV0byBzc2xFcnJvcnMgPSBtX2N1cmxIYW5kbGUtPnNzbEVycm9y
cygpKQorICAgICAgICAgICAgcmVzb3VyY2VFcnJvci5zZXRTc2xFcnJvcnMoc3NsRXJyb3JzKTsK
KyAgICAgICAgaWYgKGF1dG8gaW5mbyA9IG1fY3VybEhhbmRsZS0+Y2VydGlmaWNhdGVJbmZvKCkp
CisgICAgICAgICAgICBtX2NlcnRpZmljYXRlSW5mbyA9ICppbmZvOwogCiAgICAgICAgIGZpbmFs
aXplVHJhbnNmZXIoKTsKICAgICAgICAgY2FsbENsaWVudChbZXJyb3IgPSByZXNvdXJjZUVycm9y
Lmlzb2xhdGVkQ29weSgpXShDdXJsUmVxdWVzdCYgcmVxdWVzdCwgQ3VybFJlcXVlc3RDbGllbnQm
IGNsaWVudCkgewpAQCAtNDg2LDcgKzQ0NSw2IEBAIHZvaWQgQ3VybFJlcXVlc3Q6OmZpbmFsaXpl
VHJhbnNmZXIoKQogewogICAgIGNsb3NlRG93bmxvYWRGaWxlKCk7CiAgICAgbV9mb3JtRGF0YVN0
cmVhbS5jbGVhbigpOwotICAgIG1fc3NsVmVyaWZpZXIgPSBudWxscHRyOwogICAgIG1fbXVsdGlw
YXJ0SGFuZGxlID0gbnVsbHB0cjsKICAgICBtX2N1cmxIYW5kbGUgPSBudWxscHRyOwogfQpAQCAt
NzQzLDExICs3MDEsNiBAQCB2b2lkIEN1cmxSZXF1ZXN0OjpjbGVhbnVwRG93bmxvYWRGaWxlKCkK
ICAgICB9CiB9CiAKLUNVUkxjb2RlIEN1cmxSZXF1ZXN0Ojp3aWxsU2V0dXBTc2xDdHhDYWxsYmFj
ayhDVVJMKiwgdm9pZCogc3NsQ3R4LCB2b2lkKiB1c2VyRGF0YSkKLXsKLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Q3VybFJlcXVlc3QqPih1c2VyRGF0YSktPndpbGxTZXR1cFNzbEN0eChzc2xDdHgp
OwotfQotCiBzaXplX3QgQ3VybFJlcXVlc3Q6OndpbGxTZW5kRGF0YUNhbGxiYWNrKGNoYXIqIHB0
ciwgc2l6ZV90IGJsb2NrU2l6ZSwgc2l6ZV90IG51bWJlck9mQmxvY2tzLCB2b2lkKiB1c2VyRGF0
YSkKIHsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q3VybFJlcXVlc3QqPih1c2VyRGF0YSktPndp
bGxTZW5kRGF0YShwdHIsIGJsb2NrU2l6ZSwgbnVtYmVyT2ZCbG9ja3MpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxSZXF1ZXN0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFJlcXVlc3QuaAppbmRleCA1OWQ4
MGQ3MTQ3NS4uNWQxNDQ1NTY2YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY3VybC9DdXJsUmVxdWVzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY3VybC9DdXJsUmVxdWVzdC5oCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKIAog
ICAgIHZpcnR1YWwgfkN1cmxSZXF1ZXN0KCkgPSBkZWZhdWx0OwogCi0gICAgdm9pZCBpbnZhbGlk
YXRlQ2xpZW50KCkgeyBtX2NsaWVudCA9IG51bGxwdHI7ICB9CisgICAgdm9pZCBpbnZhbGlkYXRl
Q2xpZW50KCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRVc2VyUGFzcyhjb25zdCBTdHJp
bmcmLCBjb25zdCBTdHJpbmcmKTsKIAogICAgIHZvaWQgc3RhcnQoYm9vbCBpc1N5bmNSZXF1ZXN0
ID0gZmFsc2UpOwpAQCAtMTEzLDcgKzExMyw2IEBAIHByaXZhdGU6CiAgICAgLy8gVHJhbnNmZXIg
cHJvY2Vzc2luZyBvZiBSZXF1ZXN0IGJvZHksIFJlc3BvbnNlIGhlYWRlci9ib2R5CiAgICAgLy8g
Q2FsbGVkIGJ5IHdvcmtlciB0aHJlYWQgaW4gY2FzZSBvZiBhc3luYywgbWFpbiB0aHJlYWQgaW4g
Y2FzZSBvZiBzeW5jLgogICAgIENVUkwqIHNldHVwVHJhbnNmZXIoKSBvdmVycmlkZTsKLSAgICBD
VVJMY29kZSB3aWxsU2V0dXBTc2xDdHgodm9pZCopOwogICAgIHNpemVfdCB3aWxsU2VuZERhdGEo
Y2hhciosIHNpemVfdCwgc2l6ZV90KTsKICAgICBzaXplX3QgZGlkUmVjZWl2ZUhlYWRlcihTdHJp
bmcmJik7CiAgICAgc2l6ZV90IGRpZFJlY2VpdmVEYXRhKFJlZjxTaGFyZWRCdWZmZXI+JiYpOwpA
QCAtMTQ4LDEzICsxNDcsMTIgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNsZWFudXBEb3dubG9hZEZp
bGUoKTsKIAogICAgIC8vIENhbGxiYWNrIGZ1bmN0aW9ucyBmb3IgY3VybAotICAgIHN0YXRpYyBD
VVJMY29kZSB3aWxsU2V0dXBTc2xDdHhDYWxsYmFjayhDVVJMKiwgdm9pZCosIHZvaWQqKTsKICAg
ICBzdGF0aWMgc2l6ZV90IHdpbGxTZW5kRGF0YUNhbGxiYWNrKGNoYXIqLCBzaXplX3QsIHNpemVf
dCwgdm9pZCopOwogICAgIHN0YXRpYyBzaXplX3QgZGlkUmVjZWl2ZUhlYWRlckNhbGxiYWNrKGNo
YXIqLCBzaXplX3QsIHNpemVfdCwgdm9pZCopOwogICAgIHN0YXRpYyBzaXplX3QgZGlkUmVjZWl2
ZURhdGFDYWxsYmFjayhjaGFyKiwgc2l6ZV90LCBzaXplX3QsIHZvaWQqKTsKIAogCi0gICAgc3Rk
OjphdG9taWM8Q3VybFJlcXVlc3RDbGllbnQqPiBtX2NsaWVudCB7IH07CisgICAgQ3VybFJlcXVl
c3RDbGllbnQqIG1fY2xpZW50IHsgfTsKICAgICBib29sIG1faXNTeW5jUmVxdWVzdCB7IGZhbHNl
IH07CiAgICAgYm9vbCBtX2NhbmNlbGxlZCB7IGZhbHNlIH07CiAKQEAgLTE2Nyw3ICsxNjUsNiBA
QCBwcml2YXRlOgogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEN1cmxIYW5kbGU+IG1fY3VybEhhbmRs
ZTsKICAgICBDdXJsRm9ybURhdGFTdHJlYW0gbV9mb3JtRGF0YVN0cmVhbTsKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8Q3VybFNTTFZlcmlmaWVyPiBtX3NzbFZlcmlmaWVyOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxDdXJsTXVsdGlwYXJ0SGFuZGxlPiBtX211bHRpcGFydEhhbmRsZTsKIAogICAgIEN1cmxS
ZXNwb25zZSBtX3Jlc3BvbnNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jdXJsL0N1cmxTU0xWZXJpZmllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvQ3VybFNTTFZlcmlmaWVyLmNwcAppbmRleCBhNDdjZjhmMTQ4ZS4uMjQ2
Y2QxNzMwZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9DdXJsU1NMVmVyaWZpZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3VybC9DdXJsU1NMVmVyaWZpZXIuY3BwCkBAIC0zNCwxMiArMzQsMTEgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1zdGF0aWMgVmVjdG9yPENlcnRpZmljYXRlSW5mbzo6Q2VydGlmaWNh
dGU+IHBlbURhdGFGcm9tQ3R4KFg1MDlfU1RPUkVfQ1RYKik7CitzdGF0aWMgVmVjdG9yPENlcnRp
ZmljYXRlSW5mbzo6Q2VydGlmaWNhdGU+IHBlbURhdGFGcm9tQ3R4KFg1MDlTdG9yZUNUWCopOwog
c3RhdGljIEN1cmxTU0xWZXJpZmllcjo6U1NMQ2VydGlmaWNhdGVGbGFncyBjb252ZXJ0VG9TU0xD
ZXJ0aWZpY2F0ZUZsYWdzKHVuc2lnbmVkKTsKIAotQ3VybFNTTFZlcmlmaWVyOjpDdXJsU1NMVmVy
aWZpZXIoQ3VybEhhbmRsZSogY3VybEhhbmRsZSwgY29uc3QgU3RyaW5nJiBob3N0TmFtZSwgdm9p
ZCogc3NsQ3R4KQorQ3VybFNTTFZlcmlmaWVyOjpDdXJsU1NMVmVyaWZpZXIoQ3VybEhhbmRsZSYg
Y3VybEhhbmRsZSwgdm9pZCogc3NsQ3R4KQogICAgIDogbV9jdXJsSGFuZGxlKGN1cmxIYW5kbGUp
Ci0gICAgLCBtX2hvc3ROYW1lKGhvc3ROYW1lKQogewogICAgIGF1dG8qIGN0eCA9IHN0YXRpY19j
YXN0PFNTTF9DVFgqPihzc2xDdHgpOwogICAgIGNvbnN0IGF1dG8mIHNzbEhhbmRsZSA9IEN1cmxD
b250ZXh0OjpzaW5nbGV0b24oKS5zc2xIYW5kbGUoKTsKQEAgLTQ4LDcgKzQ3LDcgQEAgQ3VybFNT
TFZlcmlmaWVyOjpDdXJsU1NMVmVyaWZpZXIoQ3VybEhhbmRsZSogY3VybEhhbmRsZSwgY29uc3Qg
U3RyaW5nJiBob3N0TmFtZSwKICAgICBTU0xfQ1RYX3NldF92ZXJpZnkoY3R4LCBTU0xfQ1RYX2dl
dF92ZXJpZnlfbW9kZShjdHgpLCB2ZXJpZnlDYWxsYmFjayk7CiAKICNpZiBkZWZpbmVkKExJQlJF
U1NMX1ZFUlNJT05fTlVNQkVSKQotICAgIGlmIChhdXRvIGRhdGEgPSBXVEY6OmdldF9pZjxWZWN0
b3I8Y2hhcj4+KHNzbEhhbmRsZS5nZXRDQUNlcnRJbmZvKCkpKQorICAgIGlmIChhdXRvKiBkYXRh
ID0gV1RGOjpnZXRfaWY8VmVjdG9yPGNoYXI+Pihzc2xIYW5kbGUuZ2V0Q0FDZXJ0SW5mbygpKSkK
ICAgICAgICAgU1NMX0NUWF9sb2FkX3ZlcmlmeV9tZW0oY3R4LCBzdGF0aWNfY2FzdDx2b2lkKj4o
Y29uc3RfY2FzdDxjaGFyKj4oZGF0YS0+ZGF0YSgpKSksIGRhdGEtPnNpemUoKSk7CiAjZW5kaWYK
IApAQCAtNjMsNyArNjIsNyBAQCBDdXJsU1NMVmVyaWZpZXI6OkN1cmxTU0xWZXJpZmllcihDdXJs
SGFuZGxlKiBjdXJsSGFuZGxlLCBjb25zdCBTdHJpbmcmIGhvc3ROYW1lLAogICAgICAgICBTU0xf
Q1RYX3NldDFfY3VydmVzX2xpc3QoY3R4LCBjdXJ2ZXNMaXN0LnV0ZjgoKS5kYXRhKCkpOwogfQog
Ci1ib29sIEN1cmxTU0xWZXJpZmllcjo6dmVyaWZ5KFg1MDlfU1RPUkVfQ1RYKiBjdHgpCitib29s
IEN1cmxTU0xWZXJpZmllcjo6dmVyaWZ5KFg1MDlTdG9yZUNUWCogY3R4KQogewogICAgIC8vIHdo
ZXRoZXIgdGhlIHZlcmlmaWNhdGlvbiBvZiB0aGUgY2VydGlmaWNhdGUgaW4gcXVlc3Rpb24gd2Fz
IHBhc3NlZCAocHJldmVyaWZ5X29rPTEpIG9yIG5vdCAocHJldmVyaWZ5X29rPTApCiAgICAgbV9j
ZXJ0aWZpY2F0ZUluZm8gPSBDZXJ0aWZpY2F0ZUluZm8geyBYNTA5X1NUT1JFX0NUWF9nZXRfZXJy
b3IoY3R4KSwgcGVtRGF0YUZyb21DdHgoY3R4KSB9OwpAQCAtNzUsMjIgKzc0LDIxIEBAIGJvb2wg
Q3VybFNTTFZlcmlmaWVyOjp2ZXJpZnkoWDUwOV9TVE9SRV9DVFgqIGN0eCkKICAgICBtX3NzbEVy
cm9ycyA9IHN0YXRpY19jYXN0PGludD4oY29udmVydFRvU1NMQ2VydGlmaWNhdGVGbGFncyhlcnJv
cikpOwogCiAjaWYgUExBVEZPUk0oV0lOKQotICAgIGJvb2wgb2sgPSBDdXJsQ29udGV4dDo6c2lu
Z2xldG9uKCkuc3NsSGFuZGxlKCkuaXNBbGxvd2VkSFRUUFNDZXJ0aWZpY2F0ZUhvc3QobV9ob3N0
TmFtZSk7CisgICAgYm9vbCBvayA9IEN1cmxDb250ZXh0OjpzaW5nbGV0b24oKS5zc2xIYW5kbGUo
KS5pc0FsbG93ZWRIVFRQU0NlcnRpZmljYXRlSG9zdChtX2N1cmxIYW5kbGUudXJsKCkuaG9zdCgp
LnRvU3RyaW5nKCkpOwogI2Vsc2UKLSAgICBib29sIG9rID0gQ3VybENvbnRleHQ6OnNpbmdsZXRv
bigpLnNzbEhhbmRsZSgpLmNhbklnbm9yZWRIVFRQU0NlcnRpZmljYXRlKG1faG9zdE5hbWUsIG1f
Y2VydGlmaWNhdGVJbmZvLmNlcnRpZmljYXRlQ2hhaW4oKSk7CisgICAgYm9vbCBvayA9IEN1cmxD
b250ZXh0OjpzaW5nbGV0b24oKS5zc2xIYW5kbGUoKS5jYW5JZ25vcmVkSFRUUFNDZXJ0aWZpY2F0
ZShtX2N1cmxIYW5kbGUudXJsKCkuaG9zdCgpLnRvU3RyaW5nKCksIG1fY2VydGlmaWNhdGVJbmZv
LmNlcnRpZmljYXRlQ2hhaW4oKSk7CiAjZW5kaWYKIAogICAgIGlmIChvaykgewogICAgICAgICAv
LyBpZiB0aGUgaG9zdCBhbmQgdGhlIGNlcnRpZmljYXRlIGFyZSBzdG9yZWQgZm9yIHRoZSBjdXJy
ZW50IGhhbmRsZSB0aGF0IG1lYW5zIGlzIGVuYWJsZWQsCiAgICAgICAgIC8vIHNvIGRvbid0IG5l
ZWQgdG8gY3VybCB2ZXJpZmllcyB0aGUgYXV0aGVudGljaXR5IG9mIHRoZSBwZWVyJ3MgY2VydGlm
aWNhdGUKLSAgICAgICAgaWYgKG1fY3VybEhhbmRsZSkKLSAgICAgICAgICAgIG1fY3VybEhhbmRs
ZS0+c2V0U3NsVmVyaWZ5UGVlcihDdXJsSGFuZGxlOjpWZXJpZnlQZWVyOjpEaXNhYmxlKTsKKyAg
ICAgICAgbV9jdXJsSGFuZGxlLnNldFNzbFZlcmlmeVBlZXIoQ3VybEhhbmRsZTo6VmVyaWZ5UGVl
cjo6RGlzYWJsZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIG9rOwogfQogCi1pbnQgQ3VybFNTTFZl
cmlmaWVyOjp2ZXJpZnlDYWxsYmFjayhpbnQgb2ssIFg1MDlfU1RPUkVfQ1RYKiBjdHgpCitpbnQg
Q3VybFNTTFZlcmlmaWVyOjp2ZXJpZnlDYWxsYmFjayhpbnQgb2ssIFg1MDlTdG9yZUNUWCogY3R4
KQogewogICAgIGF1dG8gc3NsID0gc3RhdGljX2Nhc3Q8U1NMKj4oWDUwOV9TVE9SRV9DVFhfZ2V0
X2V4X2RhdGEoY3R4LCBTU0xfZ2V0X2V4X2RhdGFfWDUwOV9TVE9SRV9DVFhfaWR4KCkpKTsKICAg
ICBhdXRvIHNzbEN0eCA9IFNTTF9nZXRfU1NMX0NUWChzc2wpOwpAQCAtMTAyLDcgKzEwMCw3IEBA
IGludCBDdXJsU1NMVmVyaWZpZXI6OnZlcmlmeUNhbGxiYWNrKGludCBvaywgWDUwOV9TVE9SRV9D
VFgqIGN0eCkKIAogY2xhc3MgU3RhY2tPZlg1MDkgewogcHVibGljOgotICAgIGV4cGxpY2l0IFN0
YWNrT2ZYNTA5KFg1MDlfU1RPUkVfQ1RYKiBjdHgpCisgICAgZXhwbGljaXQgU3RhY2tPZlg1MDko
WDUwOVN0b3JlQ1RYKiBjdHgpCiAgICAgICAgIDogbV9jZXJ0cyB7IFg1MDlfU1RPUkVfQ1RYX2dl
dDFfY2hhaW4oY3R4KSB9CiAgICAgewogICAgIH0KQEAgLTE0OSw3ICsxNDcsNyBAQCBwcml2YXRl
OgogICAgIEJJTyogbV9iaW8geyBudWxscHRyIH07CiB9OwogCi1zdGF0aWMgVmVjdG9yPENlcnRp
ZmljYXRlSW5mbzo6Q2VydGlmaWNhdGU+IHBlbURhdGFGcm9tQ3R4KFg1MDlfU1RPUkVfQ1RYKiBj
dHgpCitzdGF0aWMgVmVjdG9yPENlcnRpZmljYXRlSW5mbzo6Q2VydGlmaWNhdGU+IHBlbURhdGFG
cm9tQ3R4KFg1MDlTdG9yZUNUWCogY3R4KQogewogICAgIFZlY3RvcjxDZXJ0aWZpY2F0ZUluZm86
OkNlcnRpZmljYXRlPiByZXN1bHQ7CiAgICAgU3RhY2tPZlg1MDkgY2VydHMgeyBjdHggfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NMVmVy
aWZpZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NMVmVy
aWZpZXIuaAppbmRleCA0OGE2NTQzM2Q2MC4uZDUxZTVmZDcwYTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NMVmVyaWZpZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFNTTFZlcmlmaWVyLmgKQEAg
LTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogc3RydWN0
IHg1MDlfc3RvcmVfY3R4X3N0OwotdHlwZWRlZiBzdHJ1Y3QgeDUwOV9zdG9yZV9jdHhfc3QgWDUw
OV9TVE9SRV9DVFg7Cit0eXBlZGVmIHN0cnVjdCB4NTA5X3N0b3JlX2N0eF9zdCBYNTA5U3RvcmVD
VFg7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTAsMjEgKzUwLDIwIEBAIHB1YmxpYzoK
ICAgICAgICAgU1NMX0NFUlRJRklDQVRFX0dFTkVSSUNfRVJST1IgPSAoMSA8PCA2KSAvLyBTb21l
IG90aGVyIGVycm9yIG9jY3VycmVkIHZhbGlkYXRpbmcgdGhlIGNlcnRpZmljYXRlCiAgICAgfTsK
IAotICAgIEN1cmxTU0xWZXJpZmllcihDdXJsSGFuZGxlKiwgY29uc3QgU3RyaW5nJiBob3N0TmFt
ZSwgdm9pZCogc3NsQ3R4KTsKKyAgICBDdXJsU1NMVmVyaWZpZXIoQ3VybEhhbmRsZSYsIHZvaWQq
IHNzbEN0eCk7CiAKICAgICBpbnQgc3NsRXJyb3JzKCkgeyByZXR1cm4gbV9zc2xFcnJvcnM7IH0K
ICAgICBjb25zdCBDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmljYXRlSW5mbygpIGNvbnN0IHsgcmV0
dXJuIG1fY2VydGlmaWNhdGVJbmZvOyB9CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIGludCB2ZXJp
ZnlDYWxsYmFjayhpbnQsIFg1MDlfU1RPUkVfQ1RYKik7CisgICAgc3RhdGljIGludCB2ZXJpZnlD
YWxsYmFjayhpbnQsIFg1MDlTdG9yZUNUWCopOwogCi0gICAgQ3VybEhhbmRsZSogbV9jdXJsSGFu
ZGxlIHsgfTsKLSAgICBTdHJpbmcgbV9ob3N0TmFtZTsKKyAgICBDdXJsSGFuZGxlJiBtX2N1cmxI
YW5kbGU7CiAKICAgICBpbnQgbV9zc2xFcnJvcnMgeyAwIH07CiAgICAgQ2VydGlmaWNhdGVJbmZv
IG1fY2VydGlmaWNhdGVJbmZvOwogCi0gICAgYm9vbCB2ZXJpZnkoWDUwOV9TVE9SRV9DVFgqKTsK
KyAgICBib29sIHZlcmlmeShYNTA5U3RvcmVDVFgqKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUK
</data>

          </attachment>
      

    </bug>

</bugzilla>