<?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>100479</bug_id>
          
          <creation_ts>2012-10-26 00:55:58 -0700</creation_ts>
          <short_desc>Have NetworkProcess manage resource load scheduling</short_desc>
          <delta_ts>2012-12-20 11:36:28 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>98537</blocked>
    
    <blocked>98539</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>abarth</cc>
    
    <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>dglazkov</cc>
    
    <cc>japhet</cc>
    
    <cc>koivisto</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>751661</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-10-26 00:55:58 -0700</bug_when>
    <thetext>Have NetworkProcess manage resource load scheduling.

Now that the LoaderStrategy can provide a custom ResourceLoadScheduler, we can use that to mask IPC to the network process which can manage all of the requests coming from any number of WebProcesses, and dispatch them back to their WebProcesses of origin when it&apos;s time.

For now the actual loading will still take place in the WebProcesses.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>751697</commentid>
    <comment_count>1</comment_count>
      <attachid>170852</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-10-26 01:52:22 -0700</bug_when>
    <thetext>Created attachment 170852
WIP patch

Theres some testing left to do on this patch, but it&apos;s close to what I will eventually submit

Submitting it now to get the EWS ball rolling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>751702</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-26 01:55:09 -0700</bug_when>
    <thetext>Attachment 170852 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/WebCore.exp.in&apos;, u&apos;Source/W...&quot; exit_code: 1
Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.h:74:  The parameter name &quot;messageID&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.h:74:  The parameter name &quot;decoder&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.h:77:  The parameter name &quot;resourceLoadIdentifier&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.h:78:  The parameter name &quot;resourceLoadIdentifier&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.h:79:  The parameter name &quot;resourceLoadIdentifier&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.h:80:  The parameter name &quot;resourceLoadIdentifier&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/NetworkProcess/NetworkResourceLoadScheduler.cpp:43:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/NetworkProcess/NetworkResourceLoadScheduler.cpp:65:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/NetworkProcess/NetworkResourceLoadScheduler.cpp:168:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebKit2/WebProcess/Network/WebResourceLoadScheduler.cpp:38:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit2/WebProcess/Network/WebResourceLoadScheduler.cpp:39:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit2/WebProcess/Network/WebResourceLoadScheduler.cpp:68:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebKit2/WebProcess/Network/WebResourceLoadScheduler.cpp:95:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/WebProcess/Network/WebResourceLoadScheduler.cpp:132:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebKit2/WebProcess/Network/WebResourceLoadScheduler.cpp:196:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/WebProcess/Network/NetworkProcessConnection.h:60:  The parameter name &quot;resourceLoadIdentifier&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/NetworkProcess/NetworkResourceLoadScheduler.h:55:  The parameter name &quot;resourceLoadIdentifier&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/WebProcess/Network/WebResourceLoadScheduler.h:31:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/loader/ResourceLoader.h:156:  The parameter name &quot;identifier&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 19 in 31 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>751704</commentid>
    <comment_count>3</comment_count>
      <attachid>170852</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-26 02:01:20 -0700</bug_when>
    <thetext>Comment on attachment 170852
WIP patch

Attachment 170852 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14552958</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752166</commentid>
    <comment_count>4</comment_count>
      <attachid>170952</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-10-26 10:35:15 -0700</bug_when>
    <thetext>Created attachment 170952
WIP #2 - Check style and mac build while I start in on changelogs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752171</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-26 10:40:23 -0700</bug_when>
    <thetext>Attachment 170952 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/WebCore.exp.in&apos;, u&apos;Source/W...&quot; exit_code: 1
Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.h:77:  The parameter name &quot;resourceLoadIdentifier&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/WebProcess/Network/WebResourceLoadScheduler.cpp:93:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/WebProcess/Network/WebResourceLoadScheduler.cpp:94:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/loader/ResourceLoader.h:156:  The parameter name &quot;identifier&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 4 in 31 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>752197</commentid>
    <comment_count>6</comment_count>
      <attachid>170963</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-10-26 11:04:00 -0700</bug_when>
    <thetext>Created attachment 170963
Patch v1

Since it&apos;s so huge, formally asking for review on this version of the patch while I continue testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752198</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-26 11:08:34 -0700</bug_when>
    <thetext>Attachment 170963 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/loader/ResourceLoader.h:156:  The parameter name &quot;identifier&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 32 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>752264</commentid>
    <comment_count>8</comment_count>
      <attachid>170963</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-26 12:07:48 -0700</bug_when>
    <thetext>Comment on attachment 170963
Patch v1

Attachment 170963 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/14606185

New failing tests:
animations/suspend-resume-animation-events.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752288</commentid>
    <comment_count>9</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-10-26 12:38:23 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 170963 [details])
&gt; Attachment 170963 [details] did not pass chromium-ews (chromium-xvfb):
&gt; Output: http://queues.webkit.org/results/14606185
&gt; 
&gt; New failing tests:
&gt; animations/suspend-resume-animation-events.html

This seems dubious as this code doesn&apos;t affect chrome or animations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752389</commentid>
    <comment_count>10</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-26 14:17:20 -0700</bug_when>
    <thetext>&gt; This seems dubious as this code doesn&apos;t affect chrome or animations.

Sorry, that test might be flaky.  It looks like another run went cleanly and your patch has a green bubble.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752501</commentid>
    <comment_count>11</comment_count>
      <attachid>170963</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-10-26 15:41:32 -0700</bug_when>
    <thetext>Comment on attachment 170963
Patch v1

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

Looks very reasonable to me.

&gt; Source/WebKit2/NetworkProcess/NetworkResourceLoadScheduler.cpp:170
&gt; +            // For named hosts - which are only http(s) hosts - we should always enforce the connection limit.
&gt; +            // For non-named hosts - everything but http(s) - we should only enforce the limit if the document
&gt; +            // isn&apos;t done parsing and we don&apos;t know all stylesheets yet.
&gt; +
&gt; +            // FIXME: How can the network process know if the document is parsing or has its stylesheets loaded?
&gt; +            // We&apos;ll need to teach it.
&gt; +            // For now we&apos;ll just always limit requests for named hosts, but we need to support the following from ResourceLoadScheduler:

I think that some of these requirements are only there for binary compatibility reasons. We might be able to have a simpler behavior with WebKit2.

&gt; Source/WebKit2/WebProcess/Network/WebResourceLoadScheduler.cpp:91
&gt; +    // We want the network process involved in scheduling data URL loads but it doesn&apos;t need to know the full (often long) URL.

Why does the network process always need to be involved?

&gt; Source/WebKit2/WebProcess/Network/WebResourceLoadScheduler.cpp:114
&gt; +    if (!WebProcess::shared().networkConnection()-&gt;connection()-&gt;sendSync(Messages::NetworkConnectionToWebProcess::AddLoadInProgress(resourceLoader-&gt;url()), Messages::NetworkConnectionToWebProcess::AddLoadInProgress::Reply(identifier), 0)) {

Ugh, sync?

&gt; Source/WebKit2/WebProcess/Network/WebResourceLoadScheduler.cpp:115
&gt; +        // FIXME: What should we do if this fails?

Perhaps FIXMEs that need to all be addressed need a special tag, like FIXME (NetworkProcess), to make it easy to search for them and see how far we are from being done.

&gt; Source/WebKit2/WebProcess/Network/WebResourceLoadScheduler.h:56
&gt; +    virtual void suspendPendingRequests();
&gt; +    virtual void resumePendingRequests();

No OVERRIDE anywhere?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752624</commentid>
    <comment_count>12</comment_count>
      <attachid>170963</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-10-26 17:58:08 -0700</bug_when>
    <thetext>Comment on attachment 170963
Patch v1

These comments are easy to address (mostly with FIXMEs), r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752678</commentid>
    <comment_count>13</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-10-26 21:48:23 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; &gt; This seems dubious as this code doesn&apos;t affect chrome or animations.
&gt; 
&gt; Sorry, that test might be flaky.  It looks like another run went cleanly and your patch has a green bubble.

Awesome.  I didn&apos;t know EWS retroactively made red bubbles green  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752690</commentid>
    <comment_count>14</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-10-26 22:46:32 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 170963 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=170963&amp;action=review
&gt; 
&gt; Looks very reasonable to me.
&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/NetworkResourceLoadScheduler.cpp:170
&gt; &gt; +            // For named hosts - which are only http(s) hosts - we should always enforce the connection limit.
&gt; &gt; +            // For non-named hosts - everything but http(s) - we should only enforce the limit if the document
&gt; &gt; +            // isn&apos;t done parsing and we don&apos;t know all stylesheets yet.
&gt; &gt; +
&gt; &gt; +            // FIXME: How can the network process know if the document is parsing or has its stylesheets loaded?
&gt; &gt; +            // We&apos;ll need to teach it.
&gt; &gt; +            // For now we&apos;ll just always limit requests for named hosts, but we need to support the following from ResourceLoadScheduler:
&gt; 
&gt; I think that some of these requirements are only there for binary compatibility reasons. We might be able to have a simpler behavior with WebKit2.

That&apos;s great news.  I&apos;ve updated the comment to reflect this.

&gt; &gt; Source/WebKit2/WebProcess/Network/WebResourceLoadScheduler.cpp:91
&gt; &gt; +    // We want the network process involved in scheduling data URL loads but it doesn&apos;t need to know the full (often long) URL.
&gt; 
&gt; Why does the network process always need to be involved?

Alexey and I discussed in person, but for posterity:  Currently, a single WebProcess limits the total number of non-http(s) loads at a time to 20.  It does so with the ResourceLoadScheduler.

So with one WebProcess we might have up to 20 of these loads.

If we leave this scheduling to each WebProcess, with 20 WebProcesses we might have up to *400* of these loads.  That&apos;s a lot of potentially large data: loads and a lot of potentially competitive disk i/o.

We might be able to relax this going forward but - for now - using the shared scheduler maintains the status quo.

&gt; &gt; Source/WebKit2/WebProcess/Network/WebResourceLoadScheduler.cpp:114
&gt; &gt; +    if (!WebProcess::shared().networkConnection()-&gt;connection()-&gt;sendSync(Messages::NetworkConnectionToWebProcess::AddLoadInProgress(resourceLoader-&gt;url()), Messages::NetworkConnectionToWebProcess::AddLoadInProgress::Reply(identifier), 0)) {
&gt; 
&gt; Ugh, sync?

For now.  It&apos;s both a conservative decision and due to the nature of needing the identifiers themselves synchronously.

I&apos;m adding a FIXME as discussed to track making the identifier requirement mean we can be async.
 
&gt; &gt; Source/WebKit2/WebProcess/Network/WebResourceLoadScheduler.cpp:115
&gt; &gt; +        // FIXME: What should we do if this fails?
&gt; 
&gt; Perhaps FIXMEs that need to all be addressed need a special tag, like FIXME (NetworkProcess), to make it easy to search for them and see how far we are from being done.

Done.

&gt; &gt; Source/WebKit2/WebProcess/Network/WebResourceLoadScheduler.h:56
&gt; &gt; +    virtual void suspendPendingRequests();
&gt; &gt; +    virtual void resumePendingRequests();
&gt; 
&gt; No OVERRIDE anywhere?

DOH!  Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752692</commentid>
    <comment_count>15</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-10-26 22:59:59 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/132721</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752851</commentid>
    <comment_count>16</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-10-27 16:36:11 -0700</bug_when>
    <thetext>Looks like this caused all the perf tests to fail:
http://build.webkit.org/builders/Apple%20Lion%20Release%20%28Perf%29/builds/6544/steps/perf-test/logs/stdio</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752942</commentid>
    <comment_count>17</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-10-28 08:50:24 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; Looks like this caused all the perf tests to fail:
&gt; http://build.webkit.org/builders/Apple%20Lion%20Release%20%28Perf%29/builds/6544/steps/perf-test/logs/stdio

I&apos;m not familiar with the perf tests.  Can someone fill me in on what the expectations are?

Without additional exploration, it&apos;s surprising to me this should&apos;ve been a change in behavior in any of our tests as none of the tests should have the network process enabled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752960</commentid>
    <comment_count>18</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-28 10:12:05 -0700</bug_when>
    <thetext>You can run them with ./Tools/Scripts/run-perf-tests.  It looks they started crashing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752969</commentid>
    <comment_count>19</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-10-28 11:29:50 -0700</bug_when>
    <thetext>I think that bug 100602 took care of those crashes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752970</commentid>
    <comment_count>20</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-10-28 11:30:20 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; You can run them with ./Tools/Scripts/run-perf-tests.  It looks they started crashing.

I wonder if it was https://bugs.webkit.org/show_bug.cgi?id=100602, then.

They seem to have gone green since http://trac.webkit.org/changeset/132744</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752971</commentid>
    <comment_count>21</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-10-28 11:30:34 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; I think that bug 100602 took care of those crashes.

Yah, that.  hehe</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792357</commentid>
    <comment_count>22</comment_count>
      <attachid>170963</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-12-16 12:31:02 -0800</bug_when>
    <thetext>Comment on attachment 170963
Patch v1

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

&gt; Source/WebKit2/WebProcess/Network/WebResourceLoadScheduler.cpp:182
&gt; +void WebResourceLoadScheduler::suspendPendingRequests()
&gt; +{
&gt; +    WebProcess::shared().networkConnection()-&gt;connection()-&gt;sendSync(Messages::NetworkConnectionToWebProcess::SuspendPendingRequests(), Messages::NetworkConnectionToWebProcess::SuspendPendingRequests::Reply(), 0);
&gt; +
&gt; +    ++m_suspendPendingRequestsCount;
&gt; +}
&gt; +
&gt; +void WebResourceLoadScheduler::resumePendingRequests()
&gt; +{
&gt; +    WebProcess::shared().networkConnection()-&gt;connection()-&gt;sendSync(Messages::NetworkConnectionToWebProcess::ResumePendingRequests(), Messages::NetworkConnectionToWebProcess::ResumePendingRequests::Reply(), 0);
&gt; +
&gt; +    ASSERT(m_suspendPendingRequestsCount);
&gt; +    --m_suspendPendingRequestsCount;
&gt; +}

Synchronous IPC here is likely to do bad things to performance. What is the plan for getting rid of it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792399</commentid>
    <comment_count>23</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-12-16 17:17:12 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; (From update of attachment 170963 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=170963&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/WebProcess/Network/WebResourceLoadScheduler.cpp:182
&gt; &gt; +void WebResourceLoadScheduler::suspendPendingRequests()
&gt; &gt; +{
&gt; &gt; +    WebProcess::shared().networkConnection()-&gt;connection()-&gt;sendSync(Messages::NetworkConnectionToWebProcess::SuspendPendingRequests(), Messages::NetworkConnectionToWebProcess::SuspendPendingRequests::Reply(), 0);
&gt; &gt; +
&gt; &gt; +    ++m_suspendPendingRequestsCount;
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +void WebResourceLoadScheduler::resumePendingRequests()
&gt; &gt; +{
&gt; &gt; +    WebProcess::shared().networkConnection()-&gt;connection()-&gt;sendSync(Messages::NetworkConnectionToWebProcess::ResumePendingRequests(), Messages::NetworkConnectionToWebProcess::ResumePendingRequests::Reply(), 0);
&gt; &gt; +
&gt; &gt; +    ASSERT(m_suspendPendingRequestsCount);
&gt; &gt; +    --m_suspendPendingRequestsCount;
&gt; &gt; +}
&gt; 
&gt; Synchronous IPC here is likely to do bad things to performance. What is the plan for getting rid of it?

Indeed, I have already seen spin dumps with this in trace.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792423</commentid>
    <comment_count>24</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-12-16 18:20:13 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; (In reply to comment #22)
&gt; &gt; (From update of attachment 170963 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=170963&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit2/WebProcess/Network/WebResourceLoadScheduler.cpp:182
&gt; &gt; &gt; +void WebResourceLoadScheduler::suspendPendingRequests()
&gt; &gt; &gt; +{
&gt; &gt; &gt; +    WebProcess::shared().networkConnection()-&gt;connection()-&gt;sendSync(Messages::NetworkConnectionToWebProcess::SuspendPendingRequests(), Messages::NetworkConnectionToWebProcess::SuspendPendingRequests::Reply(), 0);
&gt; &gt; &gt; +
&gt; &gt; &gt; +    ++m_suspendPendingRequestsCount;
&gt; &gt; &gt; +}
&gt; &gt; &gt; +
&gt; &gt; &gt; +void WebResourceLoadScheduler::resumePendingRequests()
&gt; &gt; &gt; +{
&gt; &gt; &gt; +    WebProcess::shared().networkConnection()-&gt;connection()-&gt;sendSync(Messages::NetworkConnectionToWebProcess::ResumePendingRequests(), Messages::NetworkConnectionToWebProcess::ResumePendingRequests::Reply(), 0);
&gt; &gt; &gt; +
&gt; &gt; &gt; +    ASSERT(m_suspendPendingRequestsCount);
&gt; &gt; &gt; +    --m_suspendPendingRequestsCount;
&gt; &gt; &gt; +}
&gt; &gt; 
&gt; &gt; Synchronous IPC here is likely to do bad things to performance. What is the plan for getting rid of it?
&gt; 
&gt; Indeed, I have already seen spin dumps with this in trace.


Making these synchronous was a cautious step to maintain previous behavior, as no one could really give a definitive answer about just how important these are or what the ramifications would be for them getting &quot;wrong&quot;.

The plan is either determine that they can be asynchronous with no ill effects, determine that they can be per-WebProcess, or if we have to pretend they are synchronous to come up with a shared memory solution.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792829</commentid>
    <comment_count>25</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-12-17 10:31:37 -0800</bug_when>
    <thetext>I think the suppression mechanism here exists to prevent resource loads from completing synchronously in the middle of style recalc and resulting in re-entry bugs. All loads through network process should be asynchronous so the problems shouldn&apos;t exist at all. I think these can be safely removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793014</commentid>
    <comment_count>26</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-12-17 13:56:51 -0800</bug_when>
    <thetext>(In reply to comment #25)
&gt; I think the suppression mechanism here exists to prevent resource loads from completing synchronously in the middle of style recalc and resulting in re-entry bugs. All loads through network process should be asynchronous so the problems shouldn&apos;t exist at all. I think these can be safely removed.

To be more specific, I think you mean that in the calls in WebCore should remain but in the NetworkProcess scheduler they should just be no-ops.

Correct?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793114</commentid>
    <comment_count>27</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-12-17 15:57:28 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; To be more specific, I think you mean that in the calls in WebCore should remain but in the NetworkProcess scheduler they should just be no-ops.
&gt; 
&gt; Correct?

Are there any mechanism left where a WebKit initiated network load can synchronously go to the client and allow client to synchronously call back to WebKit? If not (and I hope so considering we have an opportunity to fix our APIs here) then I suspect suspendPendingRequests/resumePendingRequests could be complete no-ops.

But getting rid of NetworkProcess side suspend would be a good first step.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793602</commentid>
    <comment_count>28</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-12-18 06:58:59 -0800</bug_when>
    <thetext>Or perhaps rather not be called.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795053</commentid>
    <comment_count>29</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-12-19 17:01:08 -0800</bug_when>
    <thetext>As part of resolving &lt;rdar://problem/12866005&gt; I&apos;ll make those changes, and will file a new bugzilla for that tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795602</commentid>
    <comment_count>30</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-12-20 11:36:28 -0800</bug_when>
    <thetext>(In reply to comment #29)
&gt; As part of resolving &lt;rdar://problem/12866005&gt; I&apos;ll make those changes, and will file a new bugzilla for that tomorrow.

https://bugs.webkit.org/show_bug.cgi?id=105550 filed for this.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170852</attachid>
            <date>2012-10-26 01:52:22 -0700</date>
            <delta_ts>2012-10-26 10:35:15 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>90094</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5leHAuaW4KaW5kZXggNTkxZGY5ZS4uNTcwMjllZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5l
eHAuaW4KQEAgLTI3MCw2ICsyNzAsNyBAQCBfX1pON1dlYkNvcmUxNFJlc291cmNlQnVmZmVyRDFF
dgogX19aTjdXZWJDb3JlMTRSZXNvdXJjZUhhbmRsZTIwZm9yY2VDb250ZW50U25pZmZpbmdFdgog
X19aTjdXZWJDb3JlMTRSZXNvdXJjZUhhbmRsZTI2c3luY2hyb25vdXNMb2FkUnVuTG9vcE1vZGVF
dgogX19aTjdXZWJDb3JlMTRSZXNvdXJjZUhhbmRsZTM1Y3JlYXRlUHJpdmF0ZUJyb3dzaW5nU3Rv
cmFnZVNlc3Npb25FUEsxMF9fQ0ZTdHJpbmcKK19fWk43V2ViQ29yZTE0UmVzb3VyY2VMb2FkZXIx
M3NldElkZW50aWZpZXJFbQogX19aTjdXZWJDb3JlMTRSZXNvdXJjZUxvYWRlcjE0Y2FuY2VsbGVk
RXJyb3JFdgogX19aTjdXZWJDb3JlMTRTY2hlbWVSZWdpc3RyeTI0cmVnaXN0ZXJVUkxTY2hlbWVB
c0xvY2FsRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMTRTY2hlbWVSZWdpc3RyeTI1cmVn
aXN0ZXJVUkxTY2hlbWVBc1NlY3VyZUVSS04zV1RGNlN0cmluZ0UKQEAgLTQ3Miw2ICs0NzMsNyBA
QCBfX1pON1dlYkNvcmUxN0pTRE9NR2xvYmFsT2JqZWN0NnNfaW5mb0UKIF9fWk43V2ViQ29yZTE3
bGFuZ3VhZ2VEaWRDaGFuZ2VFdgogX19aTjdXZWJDb3JlMTdSZWd1bGFyRXhwcmVzc2lvbkMxRVJL
TjNXVEY2U3RyaW5nRU5TMV8xOVRleHRDYXNlU2Vuc2l0aXZpdHlFCiBfX1pON1dlYkNvcmUxN1Jl
Z3VsYXJFeHByZXNzaW9uRDFFdgorX19aTjdXZWJDb3JlMTdTdWJyZXNvdXJjZUxvYWRlcjZjcmVh
dGVFUE5TXzVGcmFtZUVQTlNfMTRDYWNoZWRSZXNvdXJjZUVSS05TXzE1UmVzb3VyY2VSZXF1ZXN0
RVJLTlNfMjFSZXNvdXJjZUxvYWRlck9wdGlvbnNFCiBfX1pON1dlYkNvcmUxN1ZpZXdwb3J0QXJn
dW1lbnRzMTlkZXByZWNhdGVkVGFyZ2V0RFBJRQogX19aTjdXZWJDb3JlMTdjYWNoZURPTVN0cnVj
dHVyZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVQTjNKU0M5U3RydWN0dXJlRVBLTlMyXzlDbGFz
c0luZm9FCiBfX1pON1dlYkNvcmUxN29wZW5UZW1wb3JhcnlGaWxlRVJLTjNXVEY2U3RyaW5nRVJp
CkBAIC01NTksNiArNTYxLDcgQEAgX19aTjdXZWJDb3JlMjFCYWNrRm9yd2FyZENvbnRyb2xsZXIx
MWl0ZW1BdEluZGV4RWkKIF9fWk43V2ViQ29yZTIxTWVtb3J5UHJlc3N1cmVIYW5kbGVyN2luc3Rh
bGxFdgogX19aTjdXZWJDb3JlMjFQbGF0Zm9ybUtleWJvYXJkRXZlbnQyNGRpc2FtYmlndWF0ZUtl
eURvd25FdmVudEVOU18xM1BsYXRmb3JtRXZlbnQ0VHlwZUViCiBfX1pON1dlYkNvcmUyMVJlc291
cmNlTG9hZFNjaGVkdWxlcjE5YWRkTWFpblJlc291cmNlTG9hZEVQTlNfMTRSZXNvdXJjZUxvYWRl
ckUKK19fWk43V2ViQ29yZTIxUmVzb3VyY2VMb2FkU2NoZWR1bGVyMTlzdGFydFJlc291cmNlTG9h
ZGVyRVBOU18xNFJlc291cmNlTG9hZGVyRQogX19aTjdXZWJDb3JlMjFSZXNvdXJjZUxvYWRTY2hl
ZHVsZXIyMHNlcnZlUGVuZGluZ1JlcXVlc3RzRU5TXzIwUmVzb3VyY2VMb2FkUHJpb3JpdHlFCiBf
X1pON1dlYkNvcmUyMVJlc291cmNlTG9hZFNjaGVkdWxlcjIwc2VydmVQZW5kaW5nUmVxdWVzdHNF
UE5TMF8xNUhvc3RJbmZvcm1hdGlvbkVOU18yMFJlc291cmNlTG9hZFByaW9yaXR5RQogX19aTjdX
ZWJDb3JlMjFSZXNvdXJjZUxvYWRTY2hlZHVsZXIyMXJlc3VtZVBlbmRpbmdSZXF1ZXN0c0V2CkBA
IC01NjYsNiArNTY5LDcgQEAgX19aTjdXZWJDb3JlMjFSZXNvdXJjZUxvYWRTY2hlZHVsZXIyMnN1
c3BlbmRQZW5kaW5nUmVxdWVzdHNFdgogX19aTjdXZWJDb3JlMjFSZXNvdXJjZUxvYWRTY2hlZHVs
ZXIyM3NjaGVkdWxlU3VicmVzb3VyY2VMb2FkRVBOU181RnJhbWVFUE5TXzE0Q2FjaGVkUmVzb3Vy
Y2VFUktOU18xNVJlc291cmNlUmVxdWVzdEVOU18yMFJlc291cmNlTG9hZFByaW9yaXR5RVJLTlNf
MjFSZXNvdXJjZUxvYWRlck9wdGlvbnNFCiBfX1pON1dlYkNvcmUyMVJlc291cmNlTG9hZFNjaGVk
dWxlcjI0c2NoZWR1bGVQbHVnaW5TdHJlYW1Mb2FkRVBOU181RnJhbWVFUE5TXzMyTmV0c2NhcGVQ
bHVnSW5TdHJlYW1Mb2FkZXJDbGllbnRFUktOU18xNVJlc291cmNlUmVxdWVzdEUKIF9fWk43V2Vi
Q29yZTIxUmVzb3VyY2VMb2FkU2NoZWR1bGVyMjdjcm9zc09yaWdpblJlZGlyZWN0UmVjZWl2ZWRF
UE5TXzE0UmVzb3VyY2VMb2FkZXJFUktOU180S1VSTEUKK19fWk43V2ViQ29yZTIxUmVzb3VyY2VM
b2FkU2NoZWR1bGVyMzJub3RpZnlEaWRTY2hlZHVsZVJlc291cmNlUmVxdWVzdEVQTlNfMTRSZXNv
dXJjZUxvYWRlckUKIF9fWk43V2ViQ29yZTIxUmVzb3VyY2VMb2FkU2NoZWR1bGVyNnJlbW92ZUVQ
TlNfMTRSZXNvdXJjZUxvYWRlckUKIF9fWk43V2ViQ29yZTIxUmVzb3VyY2VMb2FkU2NoZWR1bGVy
QzJFdgogX19aTjdXZWJDb3JlMjFSZXNvdXJjZUxvYWRTY2hlZHVsZXJEMkV2CkBAIC02NDEsNiAr
NjQ1LDcgQEAgX19aTjdXZWJDb3JlMjVJbW11dGFibGVTdHlsZVByb3BlcnR5U2V0RDFFdgogX19a
TjdXZWJDb3JlMjVhZGRMYW5ndWFnZUNoYW5nZU9ic2VydmVyRVB2UEZ2UzBfRQogX19aTjdXZWJD
b3JlMjVjb21wdXRlVmlld3BvcnRBdHRyaWJ1dGVzRU5TXzE3Vmlld3BvcnRBcmd1bWVudHNFaWlp
Zk5TXzdJbnRTaXplRQogX19aTjdXZWJDb3JlMjVqc1N0cmluZ1dpdGhDYWNoZVNsb3dDYXNlRVBO
M0pTQzlFeGVjU3RhdGVFUk4zV1RGN0hhc2hNYXBJUE5TM18xMFN0cmluZ0ltcGxFTlMwXzRXZWFr
SU5TMF84SlNTdHJpbmdFRUVOUzNfN1B0ckhhc2hJUzZfRUVOUzNfMTBIYXNoVHJhaXRzSVM2X0VF
TlNDX0lTOV9FRUVFUzZfCitfX1pON1dlYkNvcmUyNk5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVy
NmNyZWF0ZUVQTlNfNUZyYW1lRVBOU18zMk5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50
RVJLTlNfMTVSZXNvdXJjZVJlcXVlc3RFCiBfX1pON1dlYkNvcmUyNlVzZXJUeXBpbmdHZXN0dXJl
SW5kaWNhdG9yMjdwcm9jZXNzaW5nVXNlclR5cGluZ0dlc3R1cmVFdgogX19aTjdXZWJDb3JlMjZV
c2VyVHlwaW5nR2VzdHVyZUluZGljYXRvcjI4Zm9jdXNlZEVsZW1lbnRBdEdlc3R1cmVTdGFydEV2
CiBfX1pON1dlYkNvcmUyNnN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzRXYKQEAgLTEyMDYsNiAr
MTIxMSw3IEBAIF9fWk5LN1dlYkNvcmUxNERvY3VtZW50TG9hZGVyMTdwYXJzZWRBcmNoaXZlRGF0
YUV2CiBfX1pOSzdXZWJDb3JlMTREb2N1bWVudExvYWRlcjE3cmVwb3J0TWVtb3J5VXNhZ2VFUE4z
V1RGMTZNZW1vcnlPYmplY3RJbmZvRQogX19aTks3V2ViQ29yZTE0RG9jdW1lbnRMb2FkZXIxOWlz
TG9hZGluZ0luQVBJU2Vuc2VFdgogX19aTks3V2ViQ29yZTE0RG9jdW1lbnRMb2FkZXIxOW9yaWdp
bmFsUmVxdWVzdENvcHlFdgorX19aTks3V2ViQ29yZTE0RG9jdW1lbnRMb2FkZXIyMWFyY2hpdmVS
ZXNvdXJjZUZvclVSTEVSS05TXzRLVVJMRQogX19aTks3V2ViQ29yZTE0RG9jdW1lbnRMb2FkZXIy
MWlzTG9hZGluZ01haW5SZXNvdXJjZUV2CiBfX1pOSzdXZWJDb3JlMTREb2N1bWVudExvYWRlcjI4
dXJsRm9ySGlzdG9yeVJlZmxlY3RzRmFpbHVyZUV2CiBfX1pOSzdXZWJDb3JlMTREb2N1bWVudExv
YWRlcjN1cmxFdgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IDIwNjk1ZDQuLmE2Y2VkZWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMDI3LDcgKzIwMjcsNyBA
QAogCQk3RUU2ODQ2QzEyRDI2RTM4MDBFNzk0MTUgLyogUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3RUU2ODQ1OTEy
RDI2RTM4MDBFNzk0MTUgLyogUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAgKi87IH07CiAJCTdFRTY4
NDZEMTJEMjZFMzgwMEU3OTQxNSAvKiBSZXNvdXJjZVJlcXVlc3QuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdFRTY4NDVBMTJEMjZFMzgwMEU3OTQxNSAv
KiBSZXNvdXJjZVJlcXVlc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk3RUU2ODQ2RTEyRDI2RTM4MDBFNzk0MTUgLyogUmVzb3VyY2VSZXF1ZXN0
Q0ZOZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0VFNjg0NUIxMkQyNkUzODAwRTc5NDE1IC8qIFJlc291cmNlUmVxdWVzdENGTmV0LmNwcCAqLzsg
fTsKLQkJN0VFNjg0NkYxMkQyNkUzODAwRTc5NDE1IC8qIFJlc291cmNlUmVxdWVzdENGTmV0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3RUU2ODQ1QzEy
RDI2RTM4MDBFNzk0MTUgLyogUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuaCAqLzsgfTsKKwkJN0VFNjg0
NkYxMkQyNkUzODAwRTc5NDE1IC8qIFJlc291cmNlUmVxdWVzdENGTmV0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3RUU2ODQ1QzEyRDI2RTM4MDBFNzk0
MTUgLyogUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk3RUU2ODQ3MDEyRDI2RTM4MDBFNzk0MTUgLyogUmVzb3Vy
Y2VSZXNwb25zZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gN0VFNjg0NUQxMkQyNkUzODAwRTc5NDE1IC8qIFJlc291cmNlUmVzcG9uc2UuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3RUU2ODQ3MTEyRDI2
RTM4MDBFNzk0MTUgLyogUmVzb3VyY2VSZXNwb25zZUNGTmV0LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdFRTY4NDVFMTJEMjZFMzgwMEU3OTQxNSAv
KiBSZXNvdXJjZVJlc3BvbnNlQ0ZOZXQuY3BwICovOyB9OwogCQk3RUU2ODQ3NTEyRDI2RTcwMDBF
Nzk0MTUgLyogUmVzb3VyY2VMb2FkZXJDRk5ldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3RUU2ODQ3NDEyRDI2RTcwMDBFNzk0MTUgLyogUmVzb3Vy
Y2VMb2FkZXJDRk5ldC5jcHAgKi87IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNv
dXJjZUxvYWRTY2hlZHVsZXIuY3BwCmluZGV4IGRmMDM0NmYuLjgyZTlhMWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCkBAIC0xNDAsMTEg
KzE0MCwxOCBAQCB2b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVMb2FkKFJlc291
cmNlTG9hZGVyKiByZXNvdXJjZUxvYWRlciwgUmVzb3VyYwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgLy8gSGFuZGxlIGFzeW5jaHJvbm91c2x5IHNvIGVhcmx5IGxvdyBwcmlvcml0eSBy
ZXF1ZXN0cyBkb24ndCBnZXQgc2NoZWR1bGVkIGJlZm9yZSBsYXRlciBoaWdoIHByaW9yaXR5IG9u
ZXMuCi0gICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRTY2hlZHVsZVJlc291cmNlUmVx
dWVzdChyZXNvdXJjZUxvYWRlci0+ZnJhbWVMb2FkZXIoKSA/IHJlc291cmNlTG9hZGVyLT5mcmFt
ZUxvYWRlcigpLT5mcmFtZSgpLT5kb2N1bWVudCgpIDogMCwgcmVzb3VyY2VMb2FkZXItPnVybCgp
KTsKKyAgICBub3RpZnlEaWRTY2hlZHVsZVJlc291cmNlUmVxdWVzdChyZXNvdXJjZUxvYWRlcik7
CisKKyAgICAvLyBIYW5kbGUgYXN5bmNocm9ub3VzbHkgc28gZWFybHkgbG93IHByaW9yaXR5IHJl
cXVlc3RzIGRvbid0CisgICAgLy8gZ2V0IHNjaGVkdWxlZCBiZWZvcmUgbGF0ZXIgaGlnaCBwcmlv
cml0eSBvbmVzLgogICAgIHNjaGVkdWxlU2VydmVQZW5kaW5nUmVxdWVzdHMoKTsKIH0KIAordm9p
ZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Om5vdGlmeURpZFNjaGVkdWxlUmVzb3VyY2VSZXF1ZXN0
KFJlc291cmNlTG9hZGVyKiBsb2FkZXIpCit7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpkaWRTY2hlZHVsZVJlc291cmNlUmVxdWVzdChsb2FkZXItPmZyYW1lTG9hZGVyKCkgPyBsb2Fk
ZXItPmZyYW1lTG9hZGVyKCktPmZyYW1lKCktPmRvY3VtZW50KCkgOiAwLCBsb2FkZXItPnVybCgp
KTsKK30KKwogdm9pZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlbW92ZShSZXNvdXJjZUxvYWRl
ciogcmVzb3VyY2VMb2FkZXIpCiB7CiAgICAgQVNTRVJUKHJlc291cmNlTG9hZGVyKTsKQEAgLTMw
Nyw0ICszMTQsMTAgQEAgYm9vbCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlv
bjo6bGltaXRSZXF1ZXN0cyhSZXNvdXJjZUxvYWRQcmlvcml0eQogICAgIHJldHVybiBtX3JlcXVl
c3RzTG9hZGluZy5zaXplKCkgPj0gKHJlc291cmNlTG9hZFNjaGVkdWxlcigpLT5pc1NlcmlhbExv
YWRpbmdFbmFibGVkKCkgPyAxIDogbV9tYXhSZXF1ZXN0c0luRmxpZ2h0KTsKIH0KIAordm9pZCBS
ZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnN0YXJ0UmVzb3VyY2VMb2FkZXIoUmVzb3VyY2VMb2FkZXIq
IGxvYWRlcikKK3sKKyAgICBBU1NFUlQobG9hZGVyKTsKKyAgICBsb2FkZXItPnN0YXJ0KCk7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNv
dXJjZUxvYWRTY2hlZHVsZXIuaAppbmRleCA1ZTVjNDljLi4yMGU1YWE3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFNjaGVkdWxlci5oCkBAIC01MCwyOSArNTAsMzMg
QEAgY2xhc3MgUmVzb3VyY2VMb2FkU2NoZWR1bGVyIHsKIHB1YmxpYzoKICAgICBmcmllbmQgUmVz
b3VyY2VMb2FkU2NoZWR1bGVyKiByZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsKIAotICAgIFBhc3NS
ZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IHNjaGVkdWxlU3VicmVzb3VyY2VMb2FkKEZyYW1lKiwg
Q2FjaGVkUmVzb3VyY2UqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBSZXNvdXJjZUxvYWRQcmlv
cml0eSwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJik7Ci0gICAgUGFzc1JlZlB0cjxOZXRz
Y2FwZVBsdWdJblN0cmVhbUxvYWRlcj4gc2NoZWR1bGVQbHVnaW5TdHJlYW1Mb2FkKEZyYW1lKiwg
TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
KTsKLSAgICB2b2lkIGFkZE1haW5SZXNvdXJjZUxvYWQoUmVzb3VyY2VMb2FkZXIqKTsKLSAgICB2
b2lkIHJlbW92ZShSZXNvdXJjZUxvYWRlciopOwotICAgIHZvaWQgY3Jvc3NPcmlnaW5SZWRpcmVj
dFJlY2VpdmVkKFJlc291cmNlTG9hZGVyKiwgY29uc3QgS1VSTCYgcmVkaXJlY3RVUkwpOworICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gc2NoZWR1bGVTdWJyZXNvdXJj
ZUxvYWQoRnJhbWUqLCBDYWNoZWRSZXNvdXJjZSosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFJl
c291cmNlTG9hZFByaW9yaXR5LCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmKTsKKyAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IHNjaGVkdWxlUGx1
Z2luU3RyZWFtTG9hZChGcmFtZSosIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50Kiwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgdmlydHVhbCB2b2lkIGFkZE1haW5SZXNvdXJj
ZUxvYWQoUmVzb3VyY2VMb2FkZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlKFJlc291cmNl
TG9hZGVyKik7CisgICAgdmlydHVhbCB2b2lkIGNyb3NzT3JpZ2luUmVkaXJlY3RSZWNlaXZlZChS
ZXNvdXJjZUxvYWRlciosIGNvbnN0IEtVUkwmIHJlZGlyZWN0VVJMKTsKICAgICAKLSAgICB2b2lk
IHNlcnZlUGVuZGluZ1JlcXVlc3RzKFJlc291cmNlTG9hZFByaW9yaXR5IG1pbmltdW1Qcmlvcml0
eSA9IFJlc291cmNlTG9hZFByaW9yaXR5VmVyeUxvdyk7Ci0gICAgYm9vbCBpc1N1c3BlbmRpbmdQ
ZW5kaW5nUmVxdWVzdHMoKSBjb25zdCB7IHJldHVybiAhIW1fc3VzcGVuZFBlbmRpbmdSZXF1ZXN0
c0NvdW50OyB9Ci0gICAgdm9pZCBzdXNwZW5kUGVuZGluZ1JlcXVlc3RzKCk7Ci0gICAgdm9pZCBy
ZXN1bWVQZW5kaW5nUmVxdWVzdHMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2VydmVQZW5kaW5nUmVx
dWVzdHMoUmVzb3VyY2VMb2FkUHJpb3JpdHkgbWluaW11bVByaW9yaXR5ID0gUmVzb3VyY2VMb2Fk
UHJpb3JpdHlWZXJ5TG93KTsKKyAgICB2aXJ0dWFsIHZvaWQgc3VzcGVuZFBlbmRpbmdSZXF1ZXN0
cygpOworICAgIHZpcnR1YWwgdm9pZCByZXN1bWVQZW5kaW5nUmVxdWVzdHMoKTsKICAgICAKICAg
ICBib29sIGlzU2VyaWFsTG9hZGluZ0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2lzU2VyaWFs
TG9hZGluZ0VuYWJsZWQ7IH0KLSAgICB2b2lkIHNldFNlcmlhbExvYWRpbmdFbmFibGVkKGJvb2wg
YikgeyBtX2lzU2VyaWFsTG9hZGluZ0VuYWJsZWQgPSBiOyB9CisgICAgdmlydHVhbCB2b2lkIHNl
dFNlcmlhbExvYWRpbmdFbmFibGVkKGJvb2wgYikgeyBtX2lzU2VyaWFsTG9hZGluZ0VuYWJsZWQg
PSBiOyB9CiAKIHByb3RlY3RlZDoKICAgICBSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsKICAgICB2
aXJ0dWFsIH5SZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsKIAorICAgIHZvaWQgc3RhcnRSZXNvdXJj
ZUxvYWRlcihSZXNvdXJjZUxvYWRlciopOworICAgIHZvaWQgbm90aWZ5RGlkU2NoZWR1bGVSZXNv
dXJjZVJlcXVlc3QoUmVzb3VyY2VMb2FkZXIqKTsKKwogcHJpdmF0ZToKICAgICB2b2lkIHNjaGVk
dWxlTG9hZChSZXNvdXJjZUxvYWRlciosIFJlc291cmNlTG9hZFByaW9yaXR5KTsKICAgICB2b2lk
IHNjaGVkdWxlU2VydmVQZW5kaW5nUmVxdWVzdHMoKTsKICAgICB2b2lkIHJlcXVlc3RUaW1lckZp
cmVkKFRpbWVyPFJlc291cmNlTG9hZFNjaGVkdWxlcj4qKTsKIAorICAgIGJvb2wgaXNTdXNwZW5k
aW5nUGVuZGluZ1JlcXVlc3RzKCkgY29uc3QgeyByZXR1cm4gISFtX3N1c3BlbmRQZW5kaW5nUmVx
dWVzdHNDb3VudDsgfQorCiAgICAgY2xhc3MgSG9zdEluZm9ybWF0aW9uIHsKICAgICAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoSG9zdEluZm9ybWF0aW9uKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiAgICAgcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291
cmNlTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5jcHAK
aW5kZXggYjEyYjQ0My4uMTU2YjYzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVy
L1Jlc291cmNlTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VM
b2FkZXIuY3BwCkBAIC01NTgsNCArNTU4LDE0IEBAIHZvaWQgUmVzb3VyY2VMb2FkZXI6OnJlcG9y
dE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0CiAg
ICAgaW5mby5hZGRNZW1iZXIobV9vcHRpb25zKTsKIH0KIAorI2lmIFBMQVRGT1JNKE1BQykKK3Zv
aWQgUmVzb3VyY2VMb2FkZXI6OnNldElkZW50aWZpZXIodW5zaWduZWQgbG9uZyBpZGVudGlmaWVy
KQoreworICAgIC8vIEZJWE1FOiBUaGlzIGlzIHRlbXBvcmFyeSB0byBhbGxvdyBXZWJLaXQgdG8g
ZGlyZWN0bHkgc2V0IHRoZSBpZGVudGlmaWVyIG9uIGEgUmVzb3VyY2VMb2FkZXIuCisgICAgLy8g
TW9yZSBwZXJtYW5lbnRseSB3ZSB3YW50IHRoZSBpZGVudGlmaWVyIHRvIGJlIHBpcGVkIHRocm91
Z2ggUmVzb3VyY2VMb2FkZXI6OmluaXQvc3RhcnQgc28KKyAgICAvLyBpdCBhbHdheXMgaGFzIGl0
LCBlc3BlY2lhbGx5IGluIHdpbGxTZW5kUmVxdWVzdC4KKyAgICBtX2lkZW50aWZpZXIgPSBpZGVu
dGlmaWVyOworfQorI2VuZGlmCisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9SZXNvdXJjZUxvYWRlci5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVy
LmgKaW5kZXggZWE4MzEyMS4uYzUwODdhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL1Jlc291cmNlTG9hZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNl
TG9hZGVyLmgKQEAgLTY2LDcgKzY2LDcgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgdm9p
ZCBzZXREZWZlcnNMb2FkaW5nKGJvb2wpOwogCi0gICAgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVy
KCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CisgICAgdWludDY0X3QgaWRlbnRpZmll
cigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQogCiAgICAgdmlydHVhbCB2b2lkIHJl
bGVhc2VSZXNvdXJjZXMoKTsKICAgICBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSgp
IGNvbnN0OwpAQCAtMTQzLDIyICsxNDMsMjkgQEAgcHVibGljOgogCiAgICAgYm9vbCByZWFjaGVk
VGVybWluYWxTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVhY2hlZFRlcm1pbmFsU3RhdGU7IH0K
IAorICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVxdWVzdDsgfQorCiAgICAgdm9pZCBzZXRTaG91bGRCdWZmZXJEYXRhKERhdGFCdWZmZXJpbmdQ
b2xpY3kpOwogCiAgICAgdmlydHVhbCB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVj
dEluZm8qKSBjb25zdDsKIAorI2lmIFBMQVRGT1JNKE1BQykKKyAgICAvLyBGSVhNRTogVGhpcyBp
cyB0ZW1wb3JhcnkgdG8gYWxsb3cgV2ViS2l0IHRvIGRpcmVjdGx5IHNldCB0aGUgaWRlbnRpZmll
ciBvbiBhIFJlc291cmNlTG9hZGVyLgorICAgIC8vIE1vcmUgcGVybWFuZW50bHkgd2Ugd2FudCB0
aGUgaWRlbnRpZmllciB0byBiZSBwaXBlZCB0aHJvdWdoIFJlc291cmNlTG9hZGVyOjppbml0L3N0
YXJ0IHNvCisgICAgLy8gaXQgYWx3YXlzIGhhcyBpdCwgZXNwZWNpYWxseSBpbiB3aWxsU2VuZFJl
cXVlc3QuCisgICAgdm9pZCBzZXRJZGVudGlmaWVyKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcik7
CisjZW5kaWYKKwogcHJvdGVjdGVkOgogICAgIFJlc291cmNlTG9hZGVyKEZyYW1lKiwgUmVzb3Vy
Y2VMb2FkZXJPcHRpb25zKTsKIAotICAgIGZyaWVuZCBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlSG9z
dDsgIC8vIGZvciBhY2Nlc3MgdG8gcmVxdWVzdCgpCiAgICAgZnJpZW5kIGNsYXNzIFJlc291cmNl
TG9hZFNjaGVkdWxlcjsgLy8gZm9yIGFjY2VzcyB0byBzdGFydCgpCi0gICAgLy8gc3RhcnQoKSBh
Y3R1YWxseSBzZW5kcyB0aGUgbG9hZCB0byB0aGUgbmV0d29yayAodW5sZXNzIHRoZSBsb2FkIGlz
IGJlaW5nIAorICAgIC8vIHN0YXJ0KCkgYWN0dWFsbHkgc2VuZHMgdGhlIGxvYWQgdG8gdGhlIG5l
dHdvcmsgKHVubGVzcyB0aGUgbG9hZCBpcyBiZWluZwogICAgIC8vIGRlZmVycmVkKSBhbmQgc2hv
dWxkIG9ubHkgYmUgY2FsbGVkIGJ5IFJlc291cmNlTG9hZFNjaGVkdWxlciBvciBzZXREZWZlcnNM
b2FkaW5nKCkuCiAgICAgdm9pZCBzdGFydCgpOwotICAgIAorCiAgICAgdm9pZCBkaWRGaW5pc2hM
b2FkaW5nT25lUGFydChkb3VibGUgZmluaXNoVGltZSk7CiAKLSAgICBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QoKSBjb25zdCB7IHJldHVybiBtX3JlcXVlc3Q7IH0KICAgICBib29sIGNh
bmNlbGxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FuY2VsbGVkOyB9CiAgICAgYm9vbCBkZWZlcnNM
b2FkaW5nKCkgY29uc3QgeyByZXR1cm4gbV9kZWZlcnNMb2FkaW5nOyB9CiAKQEAgLTE3NSw3ICsx
ODIsNyBAQCBwcml2YXRlOgogICAgIFJlc291cmNlUmVxdWVzdCBtX29yaWdpbmFsUmVxdWVzdDsg
Ly8gQmVmb3JlIHJlZGlyZWN0cy4KICAgICBSZWZQdHI8UmVzb3VyY2VCdWZmZXI+IG1fcmVzb3Vy
Y2VEYXRhOwogICAgIAotICAgIHVuc2lnbmVkIGxvbmcgbV9pZGVudGlmaWVyOworICAgIHVpbnQ2
NF90IG1faWRlbnRpZmllcjsKIAogICAgIGJvb2wgbV9yZWFjaGVkVGVybWluYWxTdGF0ZTsKICAg
ICBib29sIG1fY2FsbGVkV2lsbENhbmNlbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0Rl
cml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9EZXJpdmVkU291cmNlcy5tYWtlCmlu
ZGV4IDM1OTc2OTYuLmFmNjVlY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0Rlcml2ZWRT
b3VyY2VzLm1ha2UKKysrIGIvU291cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAt
MzYsNiArMzYsNyBAQCBWUEFUSCA9IFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvSWNvbkRh
dGFiYXNlIFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvS2V5VmFsdWVTdG9yYWdlIFwKICAg
ICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvTWVkaWFDYWNoZSBcCisgICAgJChXZWJLaXQyKS9XZWJQ
cm9jZXNzL05ldHdvcmsgXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9Ob3RpZmljYXRpb25z
IFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvUGx1Z2lucyBcCiAgICAgJChXZWJLaXQyKS9X
ZWJQcm9jZXNzL1Jlc291cmNlQ2FjaGUgXApAQCAtNTcsNiArNTgsNyBAQCBNRVNTQUdFX1JFQ0VJ
VkVSUyA9IFwKICAgICBEb3dubG9hZFByb3h5IFwKICAgICBFdmVudERpc3BhdGNoZXIgXAogICAg
IE5ldHdvcmtQcm9jZXNzIFwKKyAgICBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24gXAogICAgIE5l
dHdvcmtQcm9jZXNzUHJveHkgXAogICAgIE5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyIFwKICAgICBQ
bHVnaW5Db250cm9sbGVyUHJveHkgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvSG9zdFJlY29yZC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9I
b3N0UmVjb3JkLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWI0YTY5
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0hvc3RS
ZWNvcmQuY3BwCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkhvc3RSZWNvcmQuaCIKKworI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNp
bmNsdWRlICJOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgIk5ldHdv
cmtQcm9jZXNzLmgiCisjaW5jbHVkZSAiTmV0d29ya1JlcXVlc3QuaCIKKyNpbmNsdWRlICJOZXR3
b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworSG9zdFJlY29yZDo6SG9zdFJlY29yZChjb25zdCBTdHJp
bmcmIG5hbWUsIGludCBtYXhSZXF1ZXN0c0luRmxpZ2h0KQorICAgIDogbV9uYW1lKG5hbWUpCisg
ICAgLCBtX21heFJlcXVlc3RzSW5GbGlnaHQobWF4UmVxdWVzdHNJbkZsaWdodCkKK3sKK30KKwor
SG9zdFJlY29yZDo6fkhvc3RSZWNvcmQoKQoreworI2lmbmRlZiBOREVCVUcKKyAgICBBU1NFUlQo
bV9yZXF1ZXN0c0xvYWRpbmcuaXNFbXB0eSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIHAgPSAwOyBw
IDw9IFJlc291cmNlTG9hZFByaW9yaXR5SGlnaGVzdDsgcCsrKQorICAgICAgICBBU1NFUlQobV9y
ZXF1ZXN0c1BlbmRpbmdbcF0uaXNFbXB0eSgpKTsKKyNlbmRpZgorfQorCit2b2lkIEhvc3RSZWNv
cmQ6OnNjaGVkdWxlKFBhc3NSZWZQdHI8TmV0d29ya1JlcXVlc3Q+IHJlY29yZCwgIFJlc291cmNl
TG9hZFByaW9yaXR5IHByaW9yaXR5KQoreworICAgIG1fcmVxdWVzdHNQZW5kaW5nW3ByaW9yaXR5
XS5hcHBlbmQocmVjb3JkKTsKK30KKwordm9pZCBIb3N0UmVjb3JkOjphZGRMb2FkSW5Qcm9ncmVz
cyhSZXNvdXJjZUxvYWRJZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgbV9yZXF1ZXN0c0xv
YWRpbmcuYWRkKGlkZW50aWZpZXIpOworfQorCit2b2lkIEhvc3RSZWNvcmQ6OnJlbW92ZShSZXNv
dXJjZUxvYWRJZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgaWYgKG1fcmVxdWVzdHNMb2Fk
aW5nLmNvbnRhaW5zKGlkZW50aWZpZXIpKSB7CisgICAgICAgIG1fcmVxdWVzdHNMb2FkaW5nLnJl
bW92ZShpZGVudGlmaWVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBmb3Ig
KGludCBwcmlvcml0eSA9IFJlc291cmNlTG9hZFByaW9yaXR5SGlnaGVzdDsgcHJpb3JpdHkgPj0g
UmVzb3VyY2VMb2FkUHJpb3JpdHlMb3dlc3Q7IC0tcHJpb3JpdHkpIHsgIAorICAgICAgICBSZXF1
ZXN0UXVldWU6Oml0ZXJhdG9yIGVuZCA9IG1fcmVxdWVzdHNQZW5kaW5nW3ByaW9yaXR5XS5lbmQo
KTsKKyAgICAgICAgZm9yIChSZXF1ZXN0UXVldWU6Oml0ZXJhdG9yIGl0ID0gbV9yZXF1ZXN0c1Bl
bmRpbmdbcHJpb3JpdHldLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAg
aWYgKGl0LT5nZXQoKS0+aWRlbnRpZmllcigpID09IGlkZW50aWZpZXIpIHsKKyAgICAgICAgICAg
ICAgICBtX3JlcXVlc3RzUGVuZGluZ1twcmlvcml0eV0ucmVtb3ZlKGl0KTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wg
SG9zdFJlY29yZDo6aGFzUmVxdWVzdHMoKSBjb25zdAoreworICAgIGlmICghbV9yZXF1ZXN0c0xv
YWRpbmcuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGZvciAodW5zaWdu
ZWQgcCA9IDA7IHAgPD0gUmVzb3VyY2VMb2FkUHJpb3JpdHlIaWdoZXN0OyBwKyspIHsKKyAgICAg
ICAgaWYgKCFtX3JlcXVlc3RzUGVuZGluZ1twXS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSG9zdFJlY29y
ZDo6bGltaXRSZXF1ZXN0cyhSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSwgYm9vbCBzZXJp
YWxMb2FkaW5nRW5hYmxlZCkgY29uc3QKK3sKKyAgICBpZiAocHJpb3JpdHkgPT0gUmVzb3VyY2VM
b2FkUHJpb3JpdHlWZXJ5TG93ICYmICFtX3JlcXVlc3RzTG9hZGluZy5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIG1fcmVxdWVzdHNMb2FkaW5nLnNpemUoKSA+
PSAoc2VyaWFsTG9hZGluZ0VuYWJsZWQgPyAxIDogbV9tYXhSZXF1ZXN0c0luRmxpZ2h0KTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9Ib3N0UmVjb3JkLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9I
b3N0UmVjb3JkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE4YjA1NAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0hvc3RSZWNv
cmQuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBIb3N0UmVjb3JkX2gK
KyNkZWZpbmUgSG9zdFJlY29yZF9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVz
dC5oPgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitj
bGFzcyBOZXR3b3JrUmVxdWVzdDsKK3R5cGVkZWYgdWludDY0X3QgUmVzb3VyY2VMb2FkSWRlbnRp
ZmllcjsKKworY2xhc3MgSG9zdFJlY29yZCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSG9z
dFJlY29yZCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEhvc3RSZWNv
cmQoY29uc3QgU3RyaW5nJiBuYW1lLCBpbnQgbWF4UmVxdWVzdHNJbkZsaWdodCk7CisgICAgfkhv
c3RSZWNvcmQoKTsKKyAgICAKKyAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVy
biBtX25hbWU7IH0KKyAgICB2b2lkIHNjaGVkdWxlKFBhc3NSZWZQdHI8TmV0d29ya1JlcXVlc3Q+
LCAgV2ViQ29yZTo6UmVzb3VyY2VMb2FkUHJpb3JpdHkgPSBXZWJDb3JlOjpSZXNvdXJjZUxvYWRQ
cmlvcml0eVZlcnlMb3cpOworICAgIHZvaWQgYWRkTG9hZEluUHJvZ3Jlc3MoUmVzb3VyY2VMb2Fk
SWRlbnRpZmllcik7CisgICAgdm9pZCByZW1vdmUoUmVzb3VyY2VMb2FkSWRlbnRpZmllcik7Cisg
ICAgYm9vbCBoYXNSZXF1ZXN0cygpIGNvbnN0OworICAgIGJvb2wgbGltaXRSZXF1ZXN0cyhXZWJD
b3JlOjpSZXNvdXJjZUxvYWRQcmlvcml0eSwgYm9vbCBzZXJpYWxMb2FkaW5nRW5hYmxlZCkgY29u
c3Q7CisKKyAgICB0eXBlZGVmIERlcXVlPFJlZlB0cjxOZXR3b3JrUmVxdWVzdD4gPiBSZXF1ZXN0
UXVldWU7CisgICAgUmVxdWVzdFF1ZXVlJiByZXF1ZXN0c1BlbmRpbmcoV2ViQ29yZTo6UmVzb3Vy
Y2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkpIHsgcmV0dXJuIG1fcmVxdWVzdHNQZW5kaW5nW3ByaW9y
aXR5XTsgfQorCitwcml2YXRlOiAgICAgICAgICAgICAgICAgICAgCisgICAgUmVxdWVzdFF1ZXVl
IG1fcmVxdWVzdHNQZW5kaW5nW1dlYkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5SGlnaGVzdCAr
IDFdOworICAgIHR5cGVkZWYgSGFzaFNldDxSZXNvdXJjZUxvYWRJZGVudGlmaWVyPiBSZXF1ZXN0
SWRlbnRpZmllck1hcDsKKyAgICBSZXF1ZXN0SWRlbnRpZmllck1hcCBtX3JlcXVlc3RzTG9hZGlu
ZzsKKworICAgIGNvbnN0IFN0cmluZyBtX25hbWU7CisgICAgaW50IG1fbWF4UmVxdWVzdHNJbkZs
aWdodDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gI2lmbmRlZiBI
b3N0UmVjb3JkX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05l
dHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAppbmRleCAxZmRjZTE4Li40
OGE3MjMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCkBAIC0yOCw2ICsyOCw3IEBA
CiAKICNpbmNsdWRlICJDb25uZWN0aW9uU3RhY2suaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vz
cy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9SdW5Mb29wLmg+CiAKICNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQpAQCAtNDIsNiAr
NDMsNyBAQCBQYXNzUmVmUHRyPE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBOZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Y3JlYXRlKAogfQogCiBOZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoQ29yZUlQQzo6Q29ubmVj
dGlvbjo6SWRlbnRpZmllciBjb25uZWN0aW9uSWRlbnRpZmllcikKKyAgICA6IG1fc2VyaWFsTG9h
ZGluZ0VuYWJsZWQoZmFsc2UpCiB7CiAgICAgbV9jb25uZWN0aW9uID0gQ29yZUlQQzo6Q29ubmVj
dGlvbjo6Y3JlYXRlU2VydmVyQ29ubmVjdGlvbihjb25uZWN0aW9uSWRlbnRpZmllciwgdGhpcywg
UnVuTG9vcDo6bWFpbigpKTsKICAgICBtX2Nvbm5lY3Rpb24tPnNldE9ubHlTZW5kTWVzc2FnZXNB
c0Rpc3BhdGNoV2hlbldhaXRpbmdGb3JTeW5jUmVwbHlXaGVuUHJvY2Vzc2luZ1N1Y2hBTWVzc2Fn
ZSh0cnVlKTsKQEAgLTUxLDIyICs1MywzNiBAQCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoQ29yZUlQQzo6Q29ubmVjdGlvbgogTmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6On5OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cygpCiB7CiAgICAgQVNTRVJUKCFtX2Nvbm5lY3Rpb24pOworICAgIEFTU0VSVChtX29ic2VydmVy
cy5pc0VtcHR5KCkpOwogfQogCi12b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpk
aWRSZWNlaXZlTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBDb3JlSVBD
OjpNZXNzYWdlSUQgbWVzc2FnZUlELCBDb3JlSVBDOjpNZXNzYWdlRGVjb2RlciYgZGVjb2RlcikK
K3ZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlZ2lzdGVyT2JzZXJ2ZXIoTmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NPYnNlcnZlciogb2JzZXJ2ZXIpCiB7Ci0gICAgQ29u
bmVjdGlvblN0YWNrOjpDdXJyZW50Q29ubmVjdGlvblB1c2hlciBjdXJyZW50Q29ubmVjdGlvbihD
b25uZWN0aW9uU3RhY2s6OnNoYXJlZCgpLCBjb25uZWN0aW9uKTsKKyAgICBBU1NFUlQoIW1fb2Jz
ZXJ2ZXJzLmNvbnRhaW5zKG9ic2VydmVyKSk7CisgICAgbV9vYnNlcnZlcnMuYWRkKG9ic2VydmVy
KTsKK30KIAordm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6dW5yZWdpc3Rlck9i
c2VydmVyKE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzT2JzZXJ2ZXIqIG9ic2VydmVyKQor
eworICAgIEFTU0VSVChtX29ic2VydmVycy5jb250YWlucyhvYnNlcnZlcikpOworICAgIG1fb2Jz
ZXJ2ZXJzLnJlbW92ZShvYnNlcnZlcik7Cit9CisgICAgCit2b2lkIE5ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiBjb25u
ZWN0aW9uLCBDb3JlSVBDOjpNZXNzYWdlSUQgbWVzc2FnZUlELCBDb3JlSVBDOjpNZXNzYWdlRGVj
b2RlciYgZGVjb2RlcikKK3sKICAgICBpZiAobWVzc2FnZUlELmlzPENvcmVJUEM6Ok1lc3NhZ2VD
bGFzc05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzPigpKSB7CiAgICAgICAgIGRpZFJlY2Vp
dmVOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2UoY29ubmVjdGlvbiwgbWVzc2Fn
ZUlELCBkZWNvZGVyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQogICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogfQogCi12b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRS
ZWNlaXZlU3luY01lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29yZUlQ
Qzo6TWVzc2FnZUlEIG1lc3NhZ2VJRCwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImIGFyZ3VtZW50
cywgT3duUHRyPENvcmVJUEM6Ok1lc3NhZ2VFbmNvZGVyPiYgcmVwbHkpCit2b2lkIE5ldHdvcmtD
b25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlU3luY01lc3NhZ2UoQ29yZUlQQzo6Q29u
bmVjdGlvbiogY29ubmVjdGlvbiwgQ29yZUlQQzo6TWVzc2FnZUlEIG1lc3NhZ2VJRCwgQ29yZUlQ
Qzo6TWVzc2FnZURlY29kZXImIGRlY29kZXIsIE93blB0cjxDb3JlSVBDOjpNZXNzYWdlRW5jb2Rl
cj4mIHJlcGx5KQogeworICAgIGlmIChtZXNzYWdlSUQuaXM8Q29yZUlQQzo6TWVzc2FnZUNsYXNz
TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+KCkpIHsKKyAgICAgICAgZGlkUmVjZWl2ZVN5
bmNOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2UoY29ubmVjdGlvbiwgbWVzc2Fn
ZUlELCBkZWNvZGVyLCByZXBseSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiB9CiAKQEAgLTc3LDYgKzkzLDEzIEBAIHZvaWQgTmV0d29ya0Nvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3M6OmRpZENsb3NlKENvcmVJUEM6OkNvbm5lY3Rpb24qKQogICAgIAog
ICAgIE5ldHdvcmtQcm9jZXNzOjpzaGFyZWQoKS5yZW1vdmVOZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcyh0aGlzKTsKICAgICAKKyAgICBWZWN0b3I8TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3NPYnNlcnZlcio+IG9ic2VydmVyczsKKyAgICBjb3B5VG9WZWN0b3IobV9vYnNlcnZlcnMs
IG9ic2VydmVycyk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYnNlcnZlcnMuc2l6ZSgp
OyArK2kpCisgICAgICAgIG9ic2VydmVyc1tpXS0+Y29ubmVjdGlvblRvV2ViUHJvY2Vzc0RpZENs
b3NlKHRoaXMpOworICAgIAorICAgIC8vIEZJWE1FOiBDbGVhciBvdXQgYWxsIHBlbmRpbmcgcmVx
dWVzdHMgZm9yIHRoaXMgY29ubmVjdGlvbiBpbiB0aGUgbG9hZHNjaGVkdWxlcgorICAgIAogICAg
IG1fY29ubmVjdGlvbiA9IDA7CiB9CiAKQEAgLTg0LDkgKzEwNyw0NCBAQCB2b2lkIE5ldHdvcmtD
b25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoQ29yZUlQQzo6
Q29ubmVjdGlvbgogewogfQogCi12b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpk
aWRSZWNlaXZlTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlKENvcmVJUEM6OkNv
bm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6Ok1lc3NhZ2VEZWNvZGVyJikK
K3ZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnNjaGVkdWxlTmV0d29ya1JlcXVl
c3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCB1aW50MzJfdCByZXNvdXJjZUxvYWRQ
cmlvcml0eSwgUmVzb3VyY2VMb2FkSWRlbnRpZmllciYgcmVzb3VyY2VMb2FkSWRlbnRpZmllcikK
K3sKKyAgICByZXNvdXJjZUxvYWRJZGVudGlmaWVyID0gTmV0d29ya1Byb2Nlc3M6OnNoYXJlZCgp
Lm5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS5zY2hlZHVsZU5ldHdvcmtSZXF1ZXN0KHJl
cXVlc3QsIHN0YXRpY19jYXN0PFJlc291cmNlTG9hZFByaW9yaXR5PihyZXNvdXJjZUxvYWRQcmlv
cml0eSksIHRoaXMpOworfQorCit2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjph
ZGRMb2FkSW5Qcm9ncmVzcyhjb25zdCBXZWJDb3JlOjpLVVJMJiB1cmwsIFJlc291cmNlTG9hZElk
ZW50aWZpZXImIGlkZW50aWZpZXIpCit7CisgICAgaWRlbnRpZmllciA9IE5ldHdvcmtQcm9jZXNz
OjpzaGFyZWQoKS5uZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkuYWRkTG9hZEluUHJvZ3Jl
c3ModXJsKTsKK30KKwordm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6cmVtb3Zl
TG9hZElkZW50aWZpZXIoUmVzb3VyY2VMb2FkSWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAg
IE5ldHdvcmtQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCku
cmVtb3ZlTG9hZElkZW50aWZpZXIoaWRlbnRpZmllcik7Cit9CisKK3ZvaWQgTmV0d29ya0Nvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3M6OmNyb3NzT3JpZ2luUmVkaXJlY3RSZWNlaXZlZChSZXNvdXJjZUxv
YWRJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IEtVUkwmIHJlZGlyZWN0VVJMKQoreworICAg
IE5ldHdvcmtQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCku
Y3Jvc3NPcmlnaW5SZWRpcmVjdFJlY2VpdmVkKGlkZW50aWZpZXIsIHJlZGlyZWN0VVJMKTsKK30K
Kwordm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6c2VydmVQZW5kaW5nUmVxdWVz
dHModWludDMyX3QgcmVzb3VyY2VMb2FkUHJpb3JpdHkpCit7CisgICAgTmV0d29ya1Byb2Nlc3M6
OnNoYXJlZCgpLm5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS5zZXJ2ZVBlbmRpbmdSZXF1
ZXN0cyhzdGF0aWNfY2FzdDxSZXNvdXJjZUxvYWRQcmlvcml0eT4ocmVzb3VyY2VMb2FkUHJpb3Jp
dHkpKTsKK30KKwordm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6c3VzcGVuZFBl
bmRpbmdSZXF1ZXN0cygpCit7CisgICAgTmV0d29ya1Byb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtS
ZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS5zdXNwZW5kUGVuZGluZ1JlcXVlc3RzKCk7Cit9CisKK3Zv
aWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlc3VtZVBlbmRpbmdSZXF1ZXN0cygp
Cit7CisgICAgTmV0d29ya1Byb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtSZXNvdXJjZUxvYWRTY2hl
ZHVsZXIoKS5yZXN1bWVQZW5kaW5nUmVxdWVzdHMoKTsKK30KKwordm9pZCBOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6c2V0U2VyaWFsTG9hZGluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQog
ewotICAgIC8vIEVtcHR5IGZvciBub3cgLSBUaGVyZSBhcmUgbm8gbWVzc2FnZXMgdG8gaGFuZGxl
LgorICAgIG1fc2VyaWFsTG9hZGluZ0VuYWJsZWQgPSBlbmFibGVkOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05l
dHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCmluZGV4IDYzNTEzNjAuLjBlZGZm
YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaApAQCAtMzAsMTcgKzMwLDM2IEBACiAKICNp
bmNsdWRlICJDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3NNZXNzYWdlcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkUHJpb3JpdHku
aD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CiAKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFJlc291cmNlUmVxdWVzdDsKK30KKwogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKK2NsYXNzIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOwor
dHlwZWRlZiB1aW50NjRfdCBSZXNvdXJjZUxvYWRJZGVudGlmaWVyOworCitjbGFzcyBOZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzc09ic2VydmVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5O
ZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzc09ic2VydmVyKCkgeyB9CisgICAgdmlydHVhbCB2
b2lkIGNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NEaWRDbG9zZShOZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2VzcyopID0gMDsKK307CisKIGNsYXNzIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
IDogcHVibGljIFJlZkNvdW50ZWQ8TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+LCBDb3Jl
SVBDOjpDb25uZWN0aW9uOjpDbGllbnQgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRy
PE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBjcmVhdGUoQ29yZUlQQzo6Q29ubmVjdGlv
bjo6SWRlbnRpZmllcik7CiAgICAgdmlydHVhbCB+TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MoKTsKIAogICAgIENvcmVJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24oKSBjb25zdCB7IHJl
dHVybiBtX2Nvbm5lY3Rpb24uZ2V0KCk7IH0KKyAgICAKKyAgICB2b2lkIHJlZ2lzdGVyT2JzZXJ2
ZXIoTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NPYnNlcnZlciopOworICAgIHZvaWQgdW5y
ZWdpc3Rlck9ic2VydmVyKE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzT2JzZXJ2ZXIqKTsK
KworICAgIGJvb2wgaXNTZXJpYWxMb2FkaW5nRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vy
aWFsTG9hZGluZ0VuYWJsZWQ7IH0KIAogcHJpdmF0ZToKICAgICBOZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2VzcyhDb3JlSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyKTsKQEAgLTUyLDkgKzcx
LDIzIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVJbnZhbGlkTWVzc2Fn
ZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlEKTsKIAogICAgIC8vIE1l
c3NhZ2UgaGFuZGxlcnMuCi0gICAgdm9pZCBkaWRSZWNlaXZlTmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3NNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQs
IENvcmVJUEM6Ok1lc3NhZ2VEZWNvZGVyJik7Ci0KKyAgICB2b2lkIGRpZFJlY2VpdmVOZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJ
UEM6Ok1lc3NhZ2VJRCBtZXNzYWdlSUQsIENvcmVJUEM6Ok1lc3NhZ2VEZWNvZGVyJiBkZWNvZGVy
KTsKKyAgICB2b2lkIGRpZFJlY2VpdmVTeW5jTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NN
ZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6
Ok1lc3NhZ2VEZWNvZGVyJiwgT3duUHRyPENvcmVJUEM6Ok1lc3NhZ2VFbmNvZGVyPiYpOworICAg
IAorICAgIHZvaWQgc2NoZWR1bGVOZXR3b3JrUmVxdWVzdChjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmLCB1aW50MzJfdCByZXNvdXJjZUxvYWRQcmlvcml0eSwgUmVzb3VyY2VMb2FkSWRl
bnRpZmllciYgcmVzb3VyY2VMb2FkSWRlbnRpZmllcik7CisgICAgdm9pZCBhZGRMb2FkSW5Qcm9n
cmVzcyhjb25zdCBXZWJDb3JlOjpLVVJMJiwgUmVzb3VyY2VMb2FkSWRlbnRpZmllciYgcmVzb3Vy
Y2VMb2FkSWRlbnRpZmllcik7CisgICAgdm9pZCByZW1vdmVMb2FkSWRlbnRpZmllcihSZXNvdXJj
ZUxvYWRJZGVudGlmaWVyIHJlc291cmNlTG9hZElkZW50aWZpZXIpOworICAgIHZvaWQgY3Jvc3NP
cmlnaW5SZWRpcmVjdFJlY2VpdmVkKFJlc291cmNlTG9hZElkZW50aWZpZXIgcmVzb3VyY2VMb2Fk
SWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6S1VSTCYgcmVkaXJlY3RVUkwpOworICAgIHZvaWQg
c2VydmVQZW5kaW5nUmVxdWVzdHModWludDMyX3QgcmVzb3VyY2VMb2FkUHJpb3JpdHkpOworICAg
IHZvaWQgc3VzcGVuZFBlbmRpbmdSZXF1ZXN0cygpOworICAgIHZvaWQgcmVzdW1lUGVuZGluZ1Jl
cXVlc3RzKCk7CisgICAgdm9pZCBzZXRTZXJpYWxMb2FkaW5nRW5hYmxlZChib29sKTsKKyAgICAK
ICAgICBSZWZQdHI8Q29yZUlQQzo6Q29ubmVjdGlvbj4gbV9jb25uZWN0aW9uOworICAgIAorICAg
IEhhc2hTZXQ8TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NPYnNlcnZlcio+IG1fb2JzZXJ2
ZXJzOworICAgIAorICAgIGJvb2wgbV9zZXJpYWxMb2FkaW5nRW5hYmxlZDsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdl
cy5pbgppbmRleCBhMTA0N2M4Li41NmJkMzQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5tZXNzYWdlcy5pbgpAQCAtMjQsNiArMjQsMjAgQEAKIAogbWVzc2FnZXMgLT4gTmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgewogCisgICAgU2NoZWR1bGVOZXR3b3JrUmVxdWVz
dChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCwgdWludDMyX3QgcmVzb3VyY2VMb2Fk
UHJpb3JpdHkpIC0+ICh1aW50NjRfdCByZXNvdXJjZUxvYWRJZGVudGlmaWVyKQorICAgIEFkZExv
YWRJblByb2dyZXNzKFdlYkNvcmU6OktVUkwgdXJsKSAtPiAodWludDY0X3QgcmVzb3VyY2VMb2Fk
SWRlbnRpZmllcikKKyAgICBSZW1vdmVMb2FkSWRlbnRpZmllcih1aW50NjRfdCByZXNvdXJjZUxv
YWRJZGVudGlmaWVyKQorCisgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHdlIHdpbGwgYmUgYWJs
ZSB0byBkbyBhd2F5IHdpdGggdGhpcyBtZXNzYWdlIGFuZCBoYXZlIHRoZSBOZXR3b3JrUHJvY2Vz
cworICAgIC8vIG1hbmFnZSBpdCBpbnRlcm5hbGx5LgorICAgIGNyb3NzT3JpZ2luUmVkaXJlY3RS
ZWNlaXZlZCh1aW50NjRfdCByZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBXZWJDb3JlOjpLVVJMIHJl
ZGlyZWN0VVJMKSAtPiAoKQorICAgIAorICAgIFNlcnZlUGVuZGluZ1JlcXVlc3RzKHVpbnQzMl90
IHJlc291cmNlTG9hZFByaW9yaXR5KQorCisgICAgU3VzcGVuZFBlbmRpbmdSZXF1ZXN0cygpIC0+
ICgpCisgICAgUmVzdW1lUGVuZGluZ1JlcXVlc3RzKCkgLT4gKCkKKyAgICAKKyAgICBTZXRTZXJp
YWxMb2FkaW5nRW5hYmxlZChib29sIGVuYWJsZWQpIC0+ICgpCiB9CiAKICNlbmRpZiAvLyBFTkFC
TEUoTkVUV09SS19QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05l
dHdvcmtQcm9jZXNzLmgKaW5kZXggNTgyOGUxZi4uMDAwZWZjMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCkBAIC0yOSw2ICsyOSw3IEBACiAj
aWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKIAogI2luY2x1ZGUgIkNoaWxkUHJvY2Vzcy5oIgor
I2luY2x1ZGUgIk5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCIKICNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00OSw2ICs1MCw4IEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgcmVtb3ZlTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoTmV0d29y
a0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqKTsKIAorICAgIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hl
ZHVsZXImIG5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKSB7IHJldHVybiBtX25ldHdvcmtS
ZXNvdXJjZUxvYWRTY2hlZHVsZXI7IH0KKwogcHJpdmF0ZToKICAgICBOZXR3b3JrUHJvY2Vzcygp
OwogICAgIH5OZXR3b3JrUHJvY2VzcygpOwpAQCAtNzUsNiArNzgsNyBAQCBwcml2YXRlOgogICAg
IC8vIENvbm5lY3Rpb25zIHRvIFdlYlByb2Nlc3Nlcy4KICAgICBWZWN0b3I8UmVmUHRyPE5ldHdv
cmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiA+IG1fd2ViUHJvY2Vzc0Nvbm5lY3Rpb25zOwogCisg
ICAgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlciBtX25ldHdvcmtSZXNvdXJjZUxvYWRTY2hl
ZHVsZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXF1ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5hYzFlZWJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1JlcXVlc3QuY3BwCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTmV0d29ya1JlcXVlc3QuaCIK
KworI2luY2x1ZGUgIk5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgiCisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitOZXR3b3JrUmVxdWVzdDo6TmV0d29ya1JlcXVlc3QoY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUxvYWRJZGVudGlmaWVyIGlkZW50
aWZpZXIsIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKiBjb25uZWN0aW9uKQorICAgIDog
bV9yZXF1ZXN0KHJlcXVlc3QpCisgICAgLCBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKKyAgICAs
IG1fY29ubmVjdGlvbihjb25uZWN0aW9uKQoreworICAgIGNvbm5lY3Rpb24tPnJlZ2lzdGVyT2Jz
ZXJ2ZXIodGhpcyk7Cit9CisKK05ldHdvcmtSZXF1ZXN0Ojp+TmV0d29ya1JlcXVlc3QoKQorewor
ICAgIGlmIChtX2Nvbm5lY3Rpb24pCisgICAgICAgIG1fY29ubmVjdGlvbi0+dW5yZWdpc3Rlck9i
c2VydmVyKHRoaXMpOworfQorCit2b2lkIE5ldHdvcmtSZXF1ZXN0Ojpjb25uZWN0aW9uVG9XZWJQ
cm9jZXNzRGlkQ2xvc2UoTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqIGNvbm5lY3Rpb24p
Cit7CisgICAgQVNTRVJUX0FSRyhjb25uZWN0aW9uLCBjb25uZWN0aW9uID09IG1fY29ubmVjdGlv
bi5nZXQoKSk7CisgICAgbV9jb25uZWN0aW9uLT51bnJlZ2lzdGVyT2JzZXJ2ZXIodGhpcyk7Cisg
ICAgbV9jb25uZWN0aW9uID0gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVxdWVzdC5oIGIvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1JlcXVlc3QuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGQ1MTY3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1JlcXVlc3QuaApAQCAtMCwwICsxLDYyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBOZXR3b3JrUmVxdWVzdF9oCisjZGVmaW5lIE5ldHdvcmtS
ZXF1ZXN0X2gKKworI2luY2x1ZGUgIk5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgiCisj
aW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK3R5cGVkZWYgdWludDY0X3QgUmVzb3VyY2VMb2FkSWRlbnRpZmllcjsKKworY2xhc3MgTmV0
d29ya1JlcXVlc3QgOiBwdWJsaWMgUmVmQ291bnRlZDxOZXR3b3JrUmVxdWVzdD4sIHB1YmxpYyBO
ZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzc09ic2VydmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUmVmUHRyPE5ldHdvcmtSZXF1ZXN0PiBjcmVhdGUoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUxvYWRJZGVudGlmaWVyIGlkZW50aWZpZXIsIE5ldHdv
cmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKiBjb25uZWN0aW9uKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBOZXR3b3JrUmVxdWVzdChyZXF1ZXN0LCBpZGVudGlmaWVyLCBjb25u
ZWN0aW9uKSk7CisgICAgfQorICAgIAorICAgIH5OZXR3b3JrUmVxdWVzdCgpOworCisgICAgdm9p
ZCBjb25uZWN0aW9uVG9XZWJQcm9jZXNzRGlkQ2xvc2UoTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MqKTsKKyAgICAKKyAgICBSZXNvdXJjZUxvYWRJZGVudGlmaWVyIGlkZW50aWZpZXIoKSB7
IHJldHVybiBtX2lkZW50aWZpZXI7IH0KKyAgICAKKyAgICBOZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2VzcyogY29ubmVjdGlvblRvV2ViUHJvY2VzcygpIHsgcmV0dXJuIG1fY29ubmVjdGlvbi5n
ZXQoKTsgfQorCitwcml2YXRlOgorICAgIE5ldHdvcmtSZXF1ZXN0KGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYsIFJlc291cmNlTG9hZElkZW50aWZpZXIsIE5ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzKik7CisKKyAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgbV9yZXF1ZXN0
OworICAgIFJlc291cmNlTG9hZElkZW50aWZpZXIgbV9pZGVudGlmaWVyOworCisgICAgUmVmUHRy
PE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBtX2Nvbm5lY3Rpb247Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIE5ldHdvcmtSZXF1ZXN0X2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRTY2hl
ZHVsZXIuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNl
TG9hZFNjaGVkdWxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhl
MTdlMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05l
dHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCkBAIC0wLDAgKzEsMjAyIEBACisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlci5oIgor
CisjaW5jbHVkZSAiSG9zdFJlY29yZC5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRl
ICJOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgIk5ldHdvcmtQcm9j
ZXNzY29ubmVjdGlvbk1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiTmV0d29ya1JlcXVlc3QuaCIKKyNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNT
KQorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0
YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhSZXF1ZXN0c0luRmxpZ2h0Rm9yTm9uSFRUUFByb3RvY29s
cyA9IDIwOworc3RhdGljIHVuc2lnbmVkIG1heFJlcXVlc3RzSW5GbGlnaHRQZXJIb3N0Oworc3Rh
dGljIFJlc291cmNlTG9hZElkZW50aWZpZXIgc19jdXJyZW50UmVzb3VyY2VMb2FkSWRlbnRpZmll
cjsKKworTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6TmV0d29ya1Jlc291cmNlTG9hZFNj
aGVkdWxlcigpCisgICAgOiBtX25vbkhUVFBQcm90b2NvbEhvc3QobmV3IEhvc3RSZWNvcmQoU3Ry
aW5nKCksIG1heFJlcXVlc3RzSW5GbGlnaHRGb3JOb25IVFRQUHJvdG9jb2xzKSkKKyAgICAsIG1f
cmVxdWVzdFRpbWVyKHRoaXMsICZOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZXF1ZXN0
VGltZXJGaXJlZCkKKworeworICAgIG1heFJlcXVlc3RzSW5GbGlnaHRQZXJIb3N0ID0gcGxhdGZv
cm1Jbml0aWFsaXplTWF4aW11bUhUVFBDb25uZWN0aW9uQ291bnRQZXJIb3N0KCk7Cit9CisKK3Zv
aWQgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVTZXJ2ZVBlbmRpbmdSZXF1
ZXN0cygpCit7CisgICAgaWYgKCFtX3JlcXVlc3RUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBt
X3JlcXVlc3RUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgTmV0d29ya1Jlc291cmNl
TG9hZFNjaGVkdWxlcjo6cmVxdWVzdFRpbWVyRmlyZWQoV2ViQ29yZTo6VGltZXI8TmV0d29ya1Jl
c291cmNlTG9hZFNjaGVkdWxlcj4qKQoreworICAgIHNlcnZlUGVuZGluZ1JlcXVlc3RzKCk7Cit9
CisKK1Jlc291cmNlTG9hZElkZW50aWZpZXIgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6
c2NoZWR1bGVOZXR3b3JrUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJl
c291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5LCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cyogY29ubmVjdGlvbikKK3sgICAgCisgICAgUmVzb3VyY2VMb2FkSWRlbnRpZmllciBpZGVudGlm
aWVyID0gKytzX2N1cnJlbnRSZXNvdXJjZUxvYWRJZGVudGlmaWVyOworIAorICAgIExPRyhOZXR3
b3JrLCAiKE5ldHdvcmtQcm9jZXNzKSBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hl
ZHVsZU5ldHdvcmtSZXF1ZXN0IHJlc291cmNlICVsbHUgJyVzJyIsIGlkZW50aWZpZXIsIHJlcXVl
c3QudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICBIb3N0UmVjb3JkKiBob3N0
ID0gaG9zdEZvclVSTChyZXF1ZXN0LnVybCgpLCBDcmVhdGVJZk5vdEZvdW5kKTsKKyAgICBib29s
IGhhZFJlcXVlc3RzID0gaG9zdC0+aGFzUmVxdWVzdHMoKTsKKyAgICBob3N0LT5zY2hlZHVsZShO
ZXR3b3JrUmVxdWVzdDo6Y3JlYXRlKHJlcXVlc3QsIGlkZW50aWZpZXIsIGNvbm5lY3Rpb24pLCBw
cmlvcml0eSk7CisgICAgbV9pZGVudGlmaWVycy5hZGQoaWRlbnRpZmllciwgaG9zdCk7CisKKyAg
ICBpZiAocHJpb3JpdHkgPiBSZXNvdXJjZUxvYWRQcmlvcml0eUxvdyB8fCAhcmVxdWVzdC51cmwo
KS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkgfHwgKHByaW9yaXR5ID09IFJlc291cmNlTG9hZFBy
aW9yaXR5TG93ICYmICFoYWRSZXF1ZXN0cykpIHsKKyAgICAgICAgLy8gVHJ5IHRvIHJlcXVlc3Qg
aW1wb3J0YW50IHJlc291cmNlcyBpbW1lZGlhdGVseS4KKyAgICAgICAgc2VydmVQZW5kaW5nUmVx
dWVzdHNGb3JIb3N0KGhvc3QsIHByaW9yaXR5KTsKKyAgICAgICAgcmV0dXJuIGlkZW50aWZpZXI7
CisgICAgfQorICAgIAorICAgIC8vIEhhbmRsZSBhc3luY2hyb25vdXNseSBzbyBlYXJseSBsb3cg
cHJpb3JpdHkgcmVxdWVzdHMgZG9uJ3QgZ2V0IHNjaGVkdWxlZCBiZWZvcmUgbGF0ZXIgaGlnaCBw
cmlvcml0eSBvbmVzLgorICAgIHNjaGVkdWxlU2VydmVQZW5kaW5nUmVxdWVzdHMoKTsKKyAgICBy
ZXR1cm4gaWRlbnRpZmllcjsKK30KKworUmVzb3VyY2VMb2FkSWRlbnRpZmllciBOZXR3b3JrUmVz
b3VyY2VMb2FkU2NoZWR1bGVyOjphZGRMb2FkSW5Qcm9ncmVzcyhjb25zdCBXZWJDb3JlOjpLVVJM
JiB1cmwpCit7CisgICAgUmVzb3VyY2VMb2FkSWRlbnRpZmllciBpZGVudGlmaWVyID0gKytzX2N1
cnJlbnRSZXNvdXJjZUxvYWRJZGVudGlmaWVyOworIAorICAgIExPRyhOZXR3b3JrLCAiKE5ldHdv
cmtQcm9jZXNzKSBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjphZGRMb2FkSW5Qcm9ncmVz
cyByZXNvdXJjZSAlbGx1IHdpdGggdXJsICclcyciLCBpZGVudGlmaWVyLCB1cmwuc3RyaW5nKCku
dXRmOCgpLmRhdGEoKSk7CisKKyAgICBIb3N0UmVjb3JkKiBob3N0ID0gaG9zdEZvclVSTCh1cmws
IENyZWF0ZUlmTm90Rm91bmQpOworICAgIGhvc3QtPmFkZExvYWRJblByb2dyZXNzKGlkZW50aWZp
ZXIpOworICAgIG1faWRlbnRpZmllcnMuYWRkKGlkZW50aWZpZXIsIGhvc3QpOworICAgIAorICAg
IHJldHVybiBpZGVudGlmaWVyOworfQorCitIb3N0UmVjb3JkKiBOZXR3b3JrUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyOjpob3N0Rm9yVVJMKGNvbnN0IFdlYkNvcmU6OktVUkwmIHVybCwgQ3JlYXRlSG9z
dFBvbGljeSBjcmVhdGVIb3N0UG9saWN5KQoreworICAgIGlmICghdXJsLnByb3RvY29sSXNJbkhU
VFBGYW1pbHkoKSkKKyAgICAgICAgcmV0dXJuIG1fbm9uSFRUUFByb3RvY29sSG9zdDsKKworICAg
IG1faG9zdHMuY2hlY2tDb25zaXN0ZW5jeSgpOworICAgIFN0cmluZyBob3N0TmFtZSA9IHVybC5o
b3N0KCk7CisgICAgSG9zdFJlY29yZCogaG9zdCA9IG1faG9zdHMuZ2V0KGhvc3ROYW1lKTsKKyAg
ICBpZiAoIWhvc3QgJiYgY3JlYXRlSG9zdFBvbGljeSA9PSBDcmVhdGVJZk5vdEZvdW5kKSB7Cisg
ICAgICAgIGhvc3QgPSBuZXcgSG9zdFJlY29yZChob3N0TmFtZSwgbWF4UmVxdWVzdHNJbkZsaWdo
dFBlckhvc3QpOworICAgICAgICBtX2hvc3RzLmFkZChob3N0TmFtZSwgaG9zdCk7CisgICAgfQor
ICAgIAorICAgIHJldHVybiBob3N0OworfQorCit2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hl
ZHVsZXI6OnJlbW92ZUxvYWRJZGVudGlmaWVyKFJlc291cmNlTG9hZElkZW50aWZpZXIgaWRlbnRp
ZmllcikKK3sKKyAgICBBU1NFUlQoaWRlbnRpZmllcik7CisKKyAgICBMT0coTmV0d29yaywgIihO
ZXR3b3JrUHJvY2VzcykgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVtb3ZlTG9hZElk
ZW50aWZpZXIgcmVtb3ZpbmcgbG9hZCBpZGVudGlmaWVyICVsbHUiLCBpZGVudGlmaWVyKTsKKwor
ICAgIEhvc3RSZWNvcmQqIGhvc3QgPSBtX2lkZW50aWZpZXJzLnRha2UoaWRlbnRpZmllcik7Cisg
ICAgQVNTRVJUKGhvc3QpOworICAgIGlmIChob3N0KQorICAgICAgICBob3N0LT5yZW1vdmUoaWRl
bnRpZmllcik7CisKKyAgICBzY2hlZHVsZVNlcnZlUGVuZGluZ1JlcXVlc3RzKCk7Cit9CisKK3Zv
aWQgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6Y3Jvc3NPcmlnaW5SZWRpcmVjdFJlY2Vp
dmVkKFJlc291cmNlTG9hZElkZW50aWZpZXIgaWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6S1VS
TCYgcmVkaXJlY3RVUkwpCit7CisgICAgTE9HKE5ldHdvcmssICIoTmV0d29ya1Byb2Nlc3MpIE5l
dHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmNyb3NzT3JpZ2luUmVkaXJlY3RSZWNlaXZlZCBy
ZXNvdXJjZSAlbGx1IHJlZGlyZWN0ZWQgdG8gJyVzJyIsIGlkZW50aWZpZXIsIHJlZGlyZWN0VVJM
LnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgSG9zdFJlY29yZCogb2xkSG9zdCA9IG1f
aWRlbnRpZmllcnMuZ2V0KGlkZW50aWZpZXIpOworICAgIEhvc3RSZWNvcmQqIG5ld0hvc3QgPSBo
b3N0Rm9yVVJMKHJlZGlyZWN0VVJMLCBDcmVhdGVJZk5vdEZvdW5kKTsKKyAgICBBU1NFUlQob2xk
SG9zdCk7CisgICAgCisgICAgaWYgKG9sZEhvc3QtPm5hbWUoKSA9PSBuZXdIb3N0LT5uYW1lKCkp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBuZXdIb3N0LT5hZGRMb2FkSW5Qcm9ncmVzcyhp
ZGVudGlmaWVyKTsKKyAgICBtX2lkZW50aWZpZXJzLnNldChpZGVudGlmaWVyLCBuZXdIb3N0KTsK
KworICAgIG9sZEhvc3QtPnJlbW92ZShpZGVudGlmaWVyKTsgICAgCit9CisKK3ZvaWQgTmV0d29y
a1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMoUmVzb3VyY2VMb2Fk
UHJpb3JpdHkgbWluaW11bVByaW9yaXR5KQoreworICAgIGlmIChtX3N1c3BlbmRQZW5kaW5nUmVx
dWVzdHNDb3VudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgTE9HKE5ldHdvcmssICIoTmV0d29y
a1Byb2Nlc3MpIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNlcnZlUGVuZGluZ1JlcXVl
c3RzIFNlcnZpbmcgcmVxdWVzdHMgZm9yIHVwIHRvICVpIGhvc3RzIiwgbV9ob3N0cy5zaXplKCkp
OworCisgICAgbV9yZXF1ZXN0VGltZXIuc3RvcCgpOworICAgIAorICAgIHNlcnZlUGVuZGluZ1Jl
cXVlc3RzRm9ySG9zdChtX25vbkhUVFBQcm90b2NvbEhvc3QsIG1pbmltdW1Qcmlvcml0eSk7CisK
KyAgICBtX2hvc3RzLmNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICBWZWN0b3I8SG9zdFJlY29yZCo+
IGhvc3RzVG9TZXJ2ZTsKKyAgICBjb3B5VmFsdWVzVG9WZWN0b3IobV9ob3N0cywgaG9zdHNUb1Nl
cnZlKTsKKworICAgIHNpemVfdCBzaXplID0gaG9zdHNUb1NlcnZlLnNpemUoKTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBIb3N0UmVjb3JkKiBob3N0
ID0gaG9zdHNUb1NlcnZlW2ldOworICAgICAgICBpZiAoaG9zdC0+aGFzUmVxdWVzdHMoKSkKKyAg
ICAgICAgICAgIHNlcnZlUGVuZGluZ1JlcXVlc3RzRm9ySG9zdChob3N0LCBtaW5pbXVtUHJpb3Jp
dHkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkZWxldGUgbV9ob3N0cy50YWtlKGhvc3Qt
Pm5hbWUoKSk7CisgICAgfQorfQorCit2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6
OnNlcnZlUGVuZGluZ1JlcXVlc3RzRm9ySG9zdChIb3N0UmVjb3JkKiBob3N0LCBSZXNvdXJjZUxv
YWRQcmlvcml0eSBtaW5pbXVtUHJpb3JpdHkpCit7CisgICAgTE9HKE5ldHdvcmssICJOZXR3b3Jr
UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyBIb3N0IG5hbWU9JyVz
JyIsIGhvc3QtPm5hbWUoKS51dGY4KCkuZGF0YSgpKTsKKworICAgIGZvciAoaW50IHByaW9yaXR5
ID0gUmVzb3VyY2VMb2FkUHJpb3JpdHlIaWdoZXN0OyBwcmlvcml0eSA+PSBtaW5pbXVtUHJpb3Jp
dHk7IC0tcHJpb3JpdHkpIHsKKyAgICAgICAgSG9zdFJlY29yZDo6UmVxdWVzdFF1ZXVlJiByZXF1
ZXN0c1BlbmRpbmcgPSBob3N0LT5yZXF1ZXN0c1BlbmRpbmcoUmVzb3VyY2VMb2FkUHJpb3JpdHko
cHJpb3JpdHkpKTsKKworICAgICAgICB3aGlsZSAoIXJlcXVlc3RzUGVuZGluZy5pc0VtcHR5KCkp
IHsKKyAgICAgICAgICAgIFJlZlB0cjxOZXR3b3JrUmVxdWVzdD4gcmVxdWVzdCA9IHJlcXVlc3Rz
UGVuZGluZy5maXJzdCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUaGlzIHJlcXVl
c3QgbWlnaHQgYmUgZnJvbSBXZWJQcm9jZXNzIHdlJ3ZlIGxvc3Qgb3VyIGNvbm5lY3Rpb24gdG8u
CisgICAgICAgICAgICAvLyBJZiBzbyB3ZSBzaG91bGQganVzdCBza2lwIGl0LgorICAgICAgICAg
ICAgaWYgKCFyZXF1ZXN0LT5jb25uZWN0aW9uVG9XZWJQcm9jZXNzKCkpIHsKKyAgICAgICAgICAg
ICAgICByZXF1ZXN0c1BlbmRpbmcucmVtb3ZlRmlyc3QoKTsKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gRm9yIG5hbWVkIGhvc3RzIC0g
d2hpY2ggYXJlIG9ubHkgaHR0cChzKSBob3N0cyAtIHdlIHNob3VsZCBhbHdheXMgZW5mb3JjZSB0
aGUgY29ubmVjdGlvbiBsaW1pdC4KKyAgICAgICAgICAgIC8vIEZvciBub24tbmFtZWQgaG9zdHMg
LSBldmVyeXRoaW5nIGJ1dCBodHRwKHMpIC0gd2Ugc2hvdWxkIG9ubHkgZW5mb3JjZSB0aGUgbGlt
aXQgaWYgdGhlIGRvY3VtZW50CisgICAgICAgICAgICAvLyBpc24ndCBkb25lIHBhcnNpbmcgYW5k
IHdlIGRvbid0IGtub3cgYWxsIHN0eWxlc2hlZXRzIHlldC4KKworICAgICAgICAgICAgLy8gRklY
TUU6IEhvdyBjYW4gdGhlIG5ldHdvcmsgcHJvY2VzcyBrbm93IGlmIHRoZSBkb2N1bWVudCBpcyBw
YXJzaW5nIG9yIGhhcyBpdHMgc3R5bGVzaGVldHMgbG9hZGVkPyAgV2UnbGwgbmVlZCB0byB0ZWFj
aCBpdC4KKyAgICAgICAgICAgIC8vIEZvciBub3cgd2UnbGwganVzdCBhbHdheXMgbGltaXQgcmVx
dWVzdHMgZm9yIG5hbWVkIGhvc3RzLCBidXQgd2UgbmVlZCB0byBzdXBwb3J0IHRoZSBmb2xsb3dp
bmcgZnJvbSBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6CisgICAgICAgICAgICAvLyBib29sIHNob3Vs
ZExpbWl0UmVxdWVzdHMgPSAhaG9zdC0+bmFtZSgpLmlzTnVsbCgpIHx8IChkb2N1bWVudCAmJiAo
ZG9jdW1lbnQtPnBhcnNpbmcoKSB8fCAhZG9jdW1lbnQtPmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgp
KSk7CisKKyAgICAgICAgICAgIGJvb2wgc2hvdWxkTGltaXRSZXF1ZXN0cyA9ICFob3N0LT5uYW1l
KCkuaXNOdWxsKCk7CisgICAgICAgICAgICBpZiAoc2hvdWxkTGltaXRSZXF1ZXN0cyAmJiBob3N0
LT5saW1pdFJlcXVlc3RzKFJlc291cmNlTG9hZFByaW9yaXR5KHByaW9yaXR5KSwgcmVxdWVzdC0+
Y29ubmVjdGlvblRvV2ViUHJvY2VzcygpLT5pc1NlcmlhbExvYWRpbmdFbmFibGVkKCkpKQorICAg
ICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgcmVxdWVzdHNQZW5kaW5nLnJlbW92
ZUZpcnN0KCk7CisgICAgICAgICAgICBob3N0LT5hZGRMb2FkSW5Qcm9ncmVzcyhyZXF1ZXN0LT5p
ZGVudGlmaWVyKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICByZXF1ZXN0LT5jb25uZWN0
aW9uVG9XZWJQcm9jZXNzKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1By
b2Nlc3NDb25uZWN0aW9uOjpTdGFydFJlc291cmNlTG9hZChyZXF1ZXN0LT5pZGVudGlmaWVyKCkp
LCAwKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkU2No
ZWR1bGVyOjpzdXNwZW5kUGVuZGluZ1JlcXVlc3RzKCkKK3sKKyAgICArK21fc3VzcGVuZFBlbmRp
bmdSZXF1ZXN0c0NvdW50OworfQorCit2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6
OnJlc3VtZVBlbmRpbmdSZXF1ZXN0cygpCit7CisgICAgQVNTRVJUKG1fc3VzcGVuZFBlbmRpbmdS
ZXF1ZXN0c0NvdW50KTsKKyAgICAtLW1fc3VzcGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50OworICAg
IGlmIChtX3N1c3BlbmRQZW5kaW5nUmVxdWVzdHNDb3VudCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKCFtX2hvc3RzLmlzRW1wdHkoKSB8fCBtX25vbkhUVFBQcm90b2NvbEhvc3QtPmhhc1Jl
cXVlc3RzKCkpCisgICAgICAgIHNjaGVkdWxlU2VydmVQZW5kaW5nUmVxdWVzdHMoKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19QUk9DRVNT
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291
cmNlTG9hZFNjaGVkdWxlci5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Jlc291cmNlTG9hZFNjaGVkdWxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjE3NTg5MDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgKQEAgLTAsMCArMSw5MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcl9oCisjZGVmaW5l
IE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXJfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9SZXNv
dXJjZVJlcXVlc3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RpbWVyLmg+CisKKyNpZiBFTkFCTEUo
TkVUV09SS19QUk9DRVNTKQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgSG9zdFJlY29y
ZDsKK2NsYXNzIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOwordHlwZWRlZiB1aW50NjRf
dCBSZXNvdXJjZUxvYWRJZGVudGlmaWVyOworCitjbGFzcyBOZXR3b3JrUmVzb3VyY2VMb2FkU2No
ZWR1bGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShOZXR3b3JrUmVzb3VyY2VMb2FkU2No
ZWR1bGVyKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKK3B1YmxpYzoKKyAgICBOZXR3b3Jr
UmVzb3VyY2VMb2FkU2NoZWR1bGVyKCk7CisgICAgCisgICAgLy8gQWRkcyB0aGUgcmVxdWVzdCB0
byB0aGUgcXVldWUgZm9yIGl0cyBob3N0IGFuZCBjcmVhdGUgYSB1bmlxdWUgaWRlbnRpZmllciBm
b3IgaXQuCisgICAgUmVzb3VyY2VMb2FkSWRlbnRpZmllciBzY2hlZHVsZU5ldHdvcmtSZXF1ZXN0
KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFdlYkNvcmU6OlJlc291cmNlTG9hZFBy
aW9yaXR5LCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyopOworICAgIAorICAgIC8vIENy
ZWF0ZXMgYSB1bmlxdWUgaWRlbnRpZmllciBmb3IgYW4gYWxyZWFkeS1pbi1wcm9ncmVzcyBsb2Fk
LgorICAgIFJlc291cmNlTG9hZElkZW50aWZpZXIgYWRkTG9hZEluUHJvZ3Jlc3MoY29uc3QgV2Vi
Q29yZTo6S1VSTCYpOworCisgICAgLy8gQ2FsbGVkIGJ5IHRoZSBXZWJQcm9jZXNzIHdoZW4gYSBS
ZXNvdXJjZUxvYWRlciBpcyBiZWluZyBjbGVhbmVkIHVwLgorICAgIHZvaWQgcmVtb3ZlTG9hZElk
ZW50aWZpZXIoUmVzb3VyY2VMb2FkSWRlbnRpZmllcik7CisKKyAgICB2b2lkIGNyb3NzT3JpZ2lu
UmVkaXJlY3RSZWNlaXZlZChSZXNvdXJjZUxvYWRJZGVudGlmaWVyIHJlc291cmNlTG9hZElkZW50
aWZpZXIsIGNvbnN0IFdlYkNvcmU6OktVUkwmIHJlZGlyZWN0VVJMKTsKKyAgICB2b2lkIHNlcnZl
UGVuZGluZ1JlcXVlc3RzKFdlYkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5ID0gV2ViQ29yZTo6
UmVzb3VyY2VMb2FkUHJpb3JpdHlWZXJ5TG93KTsKKyAgICB2b2lkIHN1c3BlbmRQZW5kaW5nUmVx
dWVzdHMoKTsKKyAgICB2b2lkIHJlc3VtZVBlbmRpbmdSZXF1ZXN0cygpOworICAgIAorcHJpdmF0
ZToKKyAgICBlbnVtIENyZWF0ZUhvc3RQb2xpY3kgeworICAgICAgICBDcmVhdGVJZk5vdEZvdW5k
LAorICAgICAgICBGaW5kT25seQorICAgIH07CisgICAgCisgICAgSG9zdFJlY29yZCogaG9zdEZv
clVSTChjb25zdCBXZWJDb3JlOjpLVVJMJiwgQ3JlYXRlSG9zdFBvbGljeSA9IEZpbmRPbmx5KTsK
KyAgICAKKyAgICB2b2lkIHNjaGVkdWxlU2VydmVQZW5kaW5nUmVxdWVzdHMoKTsKKyAgICB2b2lk
IHJlcXVlc3RUaW1lckZpcmVkKFdlYkNvcmU6OlRpbWVyPE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hl
ZHVsZXI+Kik7CisKKyAgICB2b2lkIHNlcnZlUGVuZGluZ1JlcXVlc3RzRm9ySG9zdChIb3N0UmVj
b3JkKiwgV2ViQ29yZTo6UmVzb3VyY2VMb2FkUHJpb3JpdHkpOworCisgICAgdW5zaWduZWQgcGxh
dGZvcm1Jbml0aWFsaXplTWF4aW11bUhUVFBDb25uZWN0aW9uQ291bnRQZXJIb3N0KCk7CisKKyAg
ICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBIb3N0UmVjb3JkKiwgU3RyaW5nSGFzaD4gSG9zdE1h
cDsKKyAgICBIb3N0TWFwIG1faG9zdHM7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8UmVzb3VyY2VM
b2FkSWRlbnRpZmllciwgSG9zdFJlY29yZCo+IElkZW50aWZpZXJIb3N0TWFwOworICAgIElkZW50
aWZpZXJIb3N0TWFwIG1faWRlbnRpZmllcnM7CisKKyAgICBIb3N0UmVjb3JkKiBtX25vbkhUVFBQ
cm90b2NvbEhvc3Q7CisKKyAgICB1bnNpZ25lZCBtX3N1c3BlbmRQZW5kaW5nUmVxdWVzdHNDb3Vu
dDsKKyAgICBib29sIG1faXNTZXJpYWxMb2FkaW5nRW5hYmxlZDsKKworICAgIFdlYkNvcmU6OlRp
bWVyPE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI+IG1fcmVxdWVzdFRpbWVyOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19QUk9DRVNT
KQorCisjZW5kaWYgLy8gTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcl9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29ya1Jlc291cmNlTG9hZFNj
aGVkdWxlck1hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9OZXR3b3Jr
UmVzb3VyY2VMb2FkU2NoZWR1bGVyTWFjLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmE3M2QxYTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9tYWMvTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlck1hYy5tbQpAQCAtMCwwICsx
LDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJOZXR3b3Jr
UmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgiCisKKyNpbXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VSZXF1
ZXN0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdENGTmV0Lmg+CisjaW1wb3J0
IDxXZWJDb3JlL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaD4KKyNpbXBvcnQgPFdlYktpdFN5c3Rl
bUludGVyZmFjZS5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK3Vuc2lnbmVkIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnBsYXRmb3Jt
SW5pdGlhbGl6ZU1heGltdW1IVFRQQ29ubmVjdGlvbkNvdW50UGVySG9zdCgpCit7CisgICAgd2tJ
bml0aWFsaXplTWF4aW11bUhUVFBDb25uZWN0aW9uQ291bnRQZXJIb3N0ID0gV0tJbml0aWFsaXpl
TWF4aW11bUhUVFBDb25uZWN0aW9uQ291bnRQZXJIb3N0OworICAgIHdrU2V0SFRUUFBpcGVsaW5p
bmdNYXhpbXVtUHJpb3JpdHkgPSBXS1NldEhUVFBQaXBlbGluaW5nTWF4aW11bVByaW9yaXR5Owor
ICAgIHdrU2V0SFRUUFBpcGVsaW5pbmdNaW5pbXVtRmFzdExhbmVQcmlvcml0eSA9IFdLU2V0SFRU
UFBpcGVsaW5pbmdNaW5pbXVtRmFzdExhbmVQcmlvcml0eTsKKworICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBwcmVmZXJyZWRDb25uZWN0aW9uQ291bnQgPSA2OworICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCB1bmxpbWl0ZWRDb25uZWN0aW9uQ291bnQgPSAxMDAwMDsKKworICAgIC8vIEFsd2F5
cyBzZXQgdGhlIGNvbm5lY3Rpb24gY291bnQgcGVyIGhvc3QsIGV2ZW4gd2hlbiBwaXBlbGluaW5n
LgorICAgIHVuc2lnbmVkIG1heGltdW1IVFRQQ29ubmVjdGlvbkNvdW50UGVySG9zdCA9IHdrSW5p
dGlhbGl6ZU1heGltdW1IVFRQQ29ubmVjdGlvbkNvdW50UGVySG9zdChwcmVmZXJyZWRDb25uZWN0
aW9uQ291bnQpOworCisgICAgQm9vbGVhbiBrZXlFeGlzdHNBbmRIYXNWYWxpZEZvcm1hdCA9IGZh
bHNlOworICAgIEJvb2xlYW4gcHJlZlZhbHVlID0gQ0ZQcmVmZXJlbmNlc0dldEFwcEJvb2xlYW5W
YWx1ZShDRlNUUigiV2ViS2l0RW5hYmxlSFRUUFBpcGVsaW5pbmciKSwga0NGUHJlZmVyZW5jZXND
dXJyZW50QXBwbGljYXRpb24sICZrZXlFeGlzdHNBbmRIYXNWYWxpZEZvcm1hdCk7CisgICAgCisg
ICAgaWYgKGtleUV4aXN0c0FuZEhhc1ZhbGlkRm9ybWF0KQorICAgICAgICBSZXNvdXJjZVJlcXVl
c3Q6OnNldEhUVFBQaXBlbGluaW5nRW5hYmxlZChwcmVmVmFsdWUpOworCisgICAgaWYgKFJlc291
cmNlUmVxdWVzdDo6aHR0cFBpcGVsaW5pbmdFbmFibGVkKCkpIHsKKyAgICAgICAgd2tTZXRIVFRQ
UGlwZWxpbmluZ01heGltdW1Qcmlvcml0eSh0b0hUVFBQaXBlbGluaW5nUHJpb3JpdHkoUmVzb3Vy
Y2VMb2FkUHJpb3JpdHlIaWdoZXN0KSk7CisgICAgICAgIHdrU2V0SFRUUFBpcGVsaW5pbmdNaW5p
bXVtRmFzdExhbmVQcmlvcml0eSh0b0hUVFBQaXBlbGluaW5nUHJpb3JpdHkoUmVzb3VyY2VMb2Fk
UHJpb3JpdHlNZWRpdW0pKTsKKworICAgICAgICAvLyBXaGVuIHBpcGVsaW5pbmcgZG8gbm90IHJh
dGUtbGltaXQgcmVxdWVzdHMgc2VudCBmcm9tIFdlYkNvcmUgc2luY2UgQ0ZOZXR3b3JrIGhhbmRs
ZXMgdGhhdC4KKyAgICAgICAgcmV0dXJuIHVubGltaXRlZENvbm5lY3Rpb25Db3VudDsKKyAgICB9
CisKKyAgICByZXR1cm4gbWF4aW11bUhUVFBDb25uZWN0aW9uQ291bnRQZXJIb3N0OworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
L0NvcmVJUEMvTWVzc2FnZUlELmggYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL01l
c3NhZ2VJRC5oCmluZGV4IGE4OWU2NGYuLmRkM2ZjYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtL0NvcmVJUEMvTWVzc2FnZUlELmgKKysrIGIvU291cmNlL1dlYktpdDIvUGxh
dGZvcm0vQ29yZUlQQy9NZXNzYWdlSUQuaApAQCAtMTE1LDYgKzExNSw5IEBAIGVudW0gTWVzc2Fn
ZUNsYXNzIHsKICAgICAvLyBNZXNzYWdlcyBzZW50IGJ5IHRoZSB3ZWIgcHJvY2VzcyB0byB0aGUg
bmV0d29yayBwcm9jZXNzLgogICAgIE1lc3NhZ2VDbGFzc05ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLAogCisgICAgLy8gTWVzc2FnZXMgc2VudCBieSB0aGUgbmV0d29yayBwcm9jZXNzIHRv
IGEgd2ViIHByb2Nlc3MuCisgICAgTWVzc2FnZUNsYXNzTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9u
LAorICAgIAogI2lmIEVOQUJMRShTSEFSRURfV09SS0VSX1BST0NFU1MpCiAgICAgLy8gTWVzc2Fn
ZXMgc2VudCBieSB0aGUgVUkgcHJvY2VzcyB0byB0aGUgc2hhcmVkIHdvcmtlciBwcm9jZXNzLgog
ICAgIE1lc3NhZ2VDbGFzc1NoYXJlZFdvcmtlclByb2Nlc3MsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9Mb2dnaW5nLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0xv
Z2dpbmcuY3BwCmluZGV4IGRmOThlNzIuLjgxZDc0YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtL0xvZ2dpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0xv
Z2dpbmcuY3BwCkBAIC0zOCw2ICszOCw3IEBAIFdURkxvZ0NoYW5uZWwgTG9nVmlldyAgICAgICAg
ID0geyAweDAwMDAwMDA4LCAiV2ViS2l0MkxvZ0xldmVsIiwgV1RGTG9nQ2hhbm5lbE9mCiBXVEZM
b2dDaGFubmVsIExvZ0ljb25EYXRhYmFzZSA9IHsgMHgwMDAwMDAxMCwgIldlYktpdDJMb2dMZXZl
bCIsIFdURkxvZ0NoYW5uZWxPZmYgfTsKIFdURkxvZ0NoYW5uZWwgTG9nS2V5SGFuZGxpbmcgID0g
eyAweDAwMDAwMDIwLCAiV2ViS2l0MkxvZ0xldmVsIiwgV1RGTG9nQ2hhbm5lbE9mZiB9OwogV1RG
TG9nQ2hhbm5lbCBMb2dQbHVnaW5zICAgICAgPSB7IDB4MDAwMDAwNDAsICJXZWJLaXQyTG9nTGV2
ZWwiLCBXVEZMb2dDaGFubmVsT2ZmIH07CitXVEZMb2dDaGFubmVsIExvZ05ldHdvcmsgICAgICA9
IHsgMHgwMDAwMDA4MCwgIldlYktpdDJMb2dMZXZlbCIsIFdURkxvZ0NoYW5uZWxPbiB9OwogCiAj
aWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRGT1JNKFFUKSAmJiAh
UExBVEZPUk0oRUZMKQogdm9pZCBpbml0aWFsaXplTG9nQ2hhbm5lbChXVEZMb2dDaGFubmVsKiBj
aGFubmVsKQpAQCAtNzMsNiArNzQsOSBAQCBXVEZMb2dDaGFubmVsKiBnZXRDaGFubmVsRnJvbU5h
bWUoY29uc3QgU3RyaW5nJiBjaGFubmVsTmFtZSkKICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uo
Y2hhbm5lbE5hbWUsIFN0cmluZygiUGx1Z2lucyIpKSkKICAgICAgICAgcmV0dXJuICZMb2dQbHVn
aW5zOwogCisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGNoYW5uZWxOYW1lLCBTdHJpbmcoIk5l
dHdvcmsiKSkpCisgICAgICAgIHJldHVybiAmTG9nTmV0d29yazsKKwogICAgIHJldHVybiAwOwog
fQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Mb2dnaW5nLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Mb2dnaW5nLmgKaW5kZXggNjAzNjg2Zi4uY2E5OThj
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vTG9nZ2luZy5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL0xvZ2dpbmcuaApAQCAtNDQsNiArNDQsNyBAQCBleHRlcm4g
V1RGTG9nQ2hhbm5lbCBMb2dQbHVnaW5zOwogZXh0ZXJuIFdURkxvZ0NoYW5uZWwgTG9nU2Vzc2lv
blN0YXRlOwogZXh0ZXJuIFdURkxvZ0NoYW5uZWwgTG9nVGV4dElucHV0OwogZXh0ZXJuIFdURkxv
Z0NoYW5uZWwgTG9nVmlldzsKK2V4dGVybiBXVEZMb2dDaGFubmVsIExvZ05ldHdvcms7CiAKIHZv
aWQgaW5pdGlhbGl6ZUxvZ0NoYW5uZWwoV1RGTG9nQ2hhbm5lbCopOwogdm9pZCBpbml0aWFsaXpl
TG9nQ2hhbm5lbHNJZk5lY2Vzc2FyeSh2b2lkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKaW5kZXggZDFhMDEz
NS4uNDExMDY1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdvcmsv
TmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05l
dHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKQEAgLTEwMiw3ICsxMDIsNyBAQCB2b2lkIE5l
dHdvcmtQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24q
IGNvbm5lY3Rpb24sIENvcgogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZENsb3Nl
KENvcmVJUEM6OkNvbm5lY3Rpb24qKQoteworeyAgICAKICAgICAvLyBOb3RpZnkgYWxsIFdlYlBy
b2Nlc3NlcyB0aGF0IHRoZSBOZXR3b3JrUHJvY2VzcyBjcmFzaGVkLgogICAgIGNvbnN0IFZlY3Rv
cjxXZWJDb250ZXh0Kj4mIGNvbnRleHRzID0gV2ViQ29udGV4dDo6YWxsQ29udGV4dHMoKTsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvbnRleHRzLnNpemUoKTsgKytpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGQ2OWRh
M2YuLjViZmRjNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTM3Miw2ICszNzIsOSBAQAogCQk1MTI5MzVEODEyODhEMTk0MDBB
NEI2OTUgLyogV2ViQ29udGV4dE1lbnVJdGVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MTI5MzVENjEyODhEMTk0MDBBNEI2OTUgLyogV2ViQ29udGV4
dE1lbnVJdGVtLmggKi87IH07CiAJCTUxMjkzNUUzMTI4OEQ5NzgwMEE0QjY5NSAvKiBJbmplY3Rl
ZEJ1bmRsZVBhZ2VDb250ZXh0TWVudUNsaWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTI5MzVFMTEyODhEOTc4MDBBNEI2OTUgLyogSW5qZWN0
ZWRCdW5kbGVQYWdlQ29udGV4dE1lbnVDbGllbnQuY3BwICovOyB9OwogCQk1MTI5MzVFNDEyODhE
OTc4MDBBNEI2OTUgLyogSW5qZWN0ZWRCdW5kbGVQYWdlQ29udGV4dE1lbnVDbGllbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMjkzNUUyMTI4OEQ5
NzgwMEE0QjY5NSAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VDb250ZXh0TWVudUNsaWVudC5oICovOyB9
OworCQk1MTJDMDY4ODE2MzhGNjdFMDBBQkI5MTEgLyogSG9zdFJlY29yZC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTJDMDY4NjE2MzhGNjdFMDBB
QkI5MTEgLyogSG9zdFJlY29yZC5jcHAgKi87IH07CisJCTUxMkMwNjg5MTYzOEY2N0UwMEFCQjkx
MSAvKiBIb3N0UmVjb3JkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MTJDMDY4NzE2MzhGNjdFMDBBQkI5MTEgLyogSG9zdFJlY29yZC5oICovOyB9Owor
CQk1MTJDMDY5MDE2MzkwRTY5MDBBQkI5MTEgLyogTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxl
ck1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
MkMwNjhGMTYzOTBFNjkwMEFCQjkxMSAvKiBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyTWFj
Lm1tICovOyB9OwogCQk1MTJERjZEODEzOEMxODFBMDBBMjJGQzYgLyogS2V5Y2hhaW5JdGVtU2hp
bU1ldGhvZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxMkRGNkQ2MTM4QzE4MUEwMEEyMkZDNiAvKiBLZXljaGFpbkl0ZW1TaGltTWV0aG9kcy5oICov
OyB9OwogCQk1MTJERjZEOTEzOEMxODFBMDBBMjJGQzYgLyogS2V5Y2hhaW5JdGVtU2hpbU1ldGhv
ZHMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTJE
RjZENzEzOEMxODFBMDBBMjJGQzYgLyogS2V5Y2hhaW5JdGVtU2hpbU1ldGhvZHMubW0gKi87IH07
CiAJCTUxMkRGNkZFMTM4QzI1NDYwMEEyMkZDNiAvKiBTZWNLZXljaGFpbkl0ZW1SZXF1ZXN0RGF0
YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTEy
Q0E0NzEzODU4RDRCMDAzMDg2N0QgLyogU2VjS2V5Y2hhaW5JdGVtUmVxdWVzdERhdGEuY3BwICov
OyB9OwpAQCAtNDMzLDYgKzQzNiwxMiBAQAogCQk1MTc5NTU2RTE2Mjg3N0IzMDBGQTQzQjYgLyog
TmV0d29ya1Byb2Nlc3NQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTEwQ0M3RUIxNjEzOEU3MjAwRDAzRUQzIC8qIE5ldHdvcmtQcm9jZXNzUHJv
eHkuaCAqLzsgfTsKIAkJNTE3OTU1NzAxNjI4NzdDRjAwRkE0M0I2IC8qIE5ldHdvcmtQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxQThBNjEyMTYyN0YzMjUwMDBEOTBFOSAvKiBOZXR3b3JrUHJvY2Vzc0Ny
ZWF0aW9uUGFyYW1ldGVycy5jcHAgKi87IH07CiAJCTUxNzk1NTcxMTYyODc3RDIwMEZBNDNCNiAv
KiBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBOEE2MEYxNjI3RjJCRDAwMEQ5MEU5IC8qIE5l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmggKi87IH07CisJCTUxN0NGMERGMTYzQTQ0
NEMwMEMyOTUwRSAvKiBOZXR3b3JrUmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTdDRjBERDE2M0E0NDRDMDBDMjk1MEUgLyogTmV0d29y
a1JlcXVlc3QuY3BwICovOyB9OworCQk1MTdDRjBFMDE2M0E0NDRDMDBDMjk1MEUgLyogTmV0d29y
a1JlcXVlc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxN0NGMERFMTYzQTQ0NEMwMEMyOTUwRSAvKiBOZXR3b3JrUmVxdWVzdC5oICovOyB9OworCQk1
MTdDRjBFMzE2M0E0ODZDMDBDMjk1MEUgLyogTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uTWVzc2Fn
ZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxN0NGMEUxMTYzQTQ4NkMwMEMyOTUwRSAvKiBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25N
ZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OworCQk1MTdDRjBFNDE2M0E0ODZDMDBDMjk1MEUgLyog
TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxN0NGMEUyMTYzQTQ4NkMwMEMyOTUwRSAvKiBOZXR3
b3JrUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlcy5oICovOyB9OworCQk1MTgyOURBNTE2MzdDNzBD
MDAwOTUzRDYgLyogTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTgyOURBMzE2MzdDNzBDMDAwOTUz
RDYgLyogTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHAgKi87IH07CisJCTUxODI5REE2
MTYzN0M3MEMwMDA5NTNENiAvKiBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTgyOURBNDE2MzdDNzBD
MDAwOTUzRDYgLyogTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlci5oICovOyB9OwogCQk1MTgz
NDU5MjEzNDUzMkU5MDA5MkI2OTYgLyogV2ViSWNvbkRhdGFiYXNlQ2xpZW50LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxODM0NTkwMTM0NTMyRTgw
MDkyQjY5NiAvKiBXZWJJY29uRGF0YWJhc2VDbGllbnQuY3BwICovOyB9OwogCQk1MTgzNDU5MzEz
NDUzMkU5MDA5MkI2OTYgLyogV2ViSWNvbkRhdGFiYXNlQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTgzNDU5MTEzNDUzMkU4MDA5MkI2OTYg
LyogV2ViSWNvbkRhdGFiYXNlQ2xpZW50LmggKi87IH07CiAJCTUxODNCMzkyMTM3OUY3QjgwMEU4
NzU0RSAvKiBXZWJQcm9jZXNzU2hpbS5keWxpYiBpbiBDb3B5IFdlYiBQcm9jZXNzIFNoaW0gKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwMDMxRjYxMzc5Q0FDQjAwQzhERkU0
IC8qIFdlYlByb2Nlc3NTaGltLmR5bGliICovOyB9OwpAQCAtNDYxLDcgKzQ3MCw2IEBACiAJCTUx
QTlFMTI5MTMxNUVEMzUwMDlFNzAzMSAvKiBXZWJLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyTWVzc2Fn
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQTlF
MTI1MTMxNUVEMzUwMDlFNzAzMSAvKiBXZWJLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyTWVzc2FnZXMu
aCAqLzsgfTsKIAkJNTFBOUUxMkExMzE1RUQzNTAwOUU3MDMxIC8qIFdlYktleVZhbHVlU3RvcmFn
ZU1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUE5RTEyNjEzMTVFRDM1MDA5RTcwMzEgLyogV2ViS2V5
VmFsdWVTdG9yYWdlTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKIAkJNTFB
OUUxMkIxMzE1RUQzNTAwOUU3MDMxIC8qIFdlYktleVZhbHVlU3RvcmFnZU1hbmFnZXJQcm94eU1l
c3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MUE5RTEyNzEzMTVFRDM1MDA5RTcwMzEgLyogV2ViS2V5VmFsdWVTdG9yYWdlTWFuYWdlclByb3h5
TWVzc2FnZXMuaCAqLzsgfTsKLQkJNTFBQkY2NUExNjM5MkYyMDAwMTMyQTdBIC8qIFdlYlJlc291
cmNlTG9hZFNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MUFCRjY1NjE2MzkyRjE1MDAxMzJBN0EgLyogV2ViUmVzb3VyY2VMb2FkU2No
ZWR1bGVyLmNwcCAqLzsgfTsKIAkJNTFBQ0JCODIxMjdBOEJBRDAwRDIwM0I5IC8qIFdlYkNvbnRl
eHRNZW51UHJveHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxQUNCQjgxMTI3QThCQUQwMEQyMDNCOSAvKiBXZWJDb250ZXh0TWVudVByb3h5LmggKi87
IH07CiAJCTUxQUNCQkEwMTI3QThGMkMwMEQyMDNCOSAvKiBXZWJDb250ZXh0TWVudVByb3h5TWFj
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUFDQkI5
RTEyN0E4RjJDMDBEMjAzQjkgLyogV2ViQ29udGV4dE1lbnVQcm94eU1hYy5oICovOyB9OwogCQk1
MUFDQkJBMTEyN0E4RjJDMDBEMjAzQjkgLyogV2ViQ29udGV4dE1lbnVQcm94eU1hYy5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQUNCQjlGMTI3QThG
MkMwMEQyMDNCOSAvKiBXZWJDb250ZXh0TWVudVByb3h5TWFjLm1tICovOyB9OwpAQCAtNDgwLDkg
KzQ4OCwxMiBAQAogCQk1MUQxMzA1NTEzODJFQUMwMDAzNTFFREQgLyogU2VjSXRlbVJlc3BvbnNl
RGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MUQxMzA1MTEzODJFQUMwMDAzNTFFREQgLyogU2VjSXRlbVJlc3BvbnNlRGF0YS5jcHAgKi87IH07
CiAJCTUxRDEzMDU2MTM4MkVBQzAwMDM1MUVERCAvKiBTZWNJdGVtUmVzcG9uc2VEYXRhLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUQxMzA1MjEzODJF
QUMwMDAzNTFFREQgLyogU2VjSXRlbVJlc3BvbnNlRGF0YS5oICovOyB9OwogCQk1MUQxMzA1ODEz
ODJGMTA1MDAzNTFFREQgLyogV2ViUHJvY2Vzc1Byb3h5TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFEMTMwNTcxMzgyRjEwNTAwMzUxRUREIC8q
IFdlYlByb2Nlc3NQcm94eU1hYy5tbSAqLzsgfTsKKwkJNTFERDlGMjgxNjM2N0RBMjAwMTU3OEU5
IC8qIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxREQ5RjI2MTYzNjdE
QTIwMDE1NzhFOSAvKiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VSZWNlaXZl
ci5jcHAgKi87IH07CisJCTUxREQ5RjI5MTYzNjdEQTIwMDE1NzhFOSAvKiBOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MUREOUYyNzE2MzY3REEyMDAxNTc4RTkgLyogTmV0d29ya0Nvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlcy5oICovOyB9OwogCQk1MUVGQzFDRjE1MjRFNjI1MDBD
OUE5MzggLyogV0tCdW5kbGVET01XaW5kb3dFeHRlbnNpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRkEyRDU0MTUyMTExODYwMEMxQkEwQiAvKiBX
S0J1bmRsZURPTVdpbmRvd0V4dGVuc2lvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTUxRkEyRDc0MTUyMTJERjEwMEMxQkEwQiAvKiBJbmplY3Rl
ZEJ1bmRsZURPTVdpbmRvd0V4dGVuc2lvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MUZBMkQ1QzE1MjExQTUwMDBDMUJBMEIgLyogSW5qZWN0ZWRC
dW5kbGVET01XaW5kb3dFeHRlbnNpb24uY3BwICovOyB9OwogCQk1MUZBMkQ3NzE1MjEyRTI2MDBD
MUJBMEIgLyogV0tCdW5kbGVET01XaW5kb3dFeHRlbnNpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGQTJENzUxNTIxMkUxRTAwQzFCQTBCIC8q
IFdLQnVuZGxlRE9NV2luZG93RXh0ZW5zaW9uLmNwcCAqLzsgfTsKKwkJNTFGQjA4RkYxNjM5REUx
QTAwRUMzMjRBIC8qIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUFCRjY1NjE2MzkyRjE1MDAxMzJBN0Eg
LyogV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcCAqLzsgfTsKIAkJNTI3MkIyOEExNDA2OTg1
RDAwOTZBNUQwIC8qIFN0YXRpc3RpY3NEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyNzJCMjg4MTQwNjk4NUQwMDk2QTVEMCAvKiBTdGF0aXN0
aWNzRGF0YS5jcHAgKi87IH07CiAJCTUyNzJCMjhCMTQwNjk4NUQwMDk2QTVEMCAvKiBTdGF0aXN0
aWNzRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTI3MkIyODkxNDA2OTg1RDAwOTZBNUQwIC8qIFN0YXRpc3RpY3NEYXRhLmggKi87IH07CiAJCTVE
MUEyMzkxMTVFNzVCMjIwMDIzRTk4MSAvKiB3ZWJraXQyIGluIENvcHkgTWVzc2FnZSBHZW5lcmF0
aW9uIFNjcmlwdHMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUQxQTIzOEUx
NUU3NUFENTAwMjNFOTgxIC8qIHdlYmtpdDIgKi87IH07CkBAIC0xNTU1LDYgKzE1NjYsOSBAQAog
CQk1MTI5MzVENjEyODhEMTk0MDBBNEI2OTUgLyogV2ViQ29udGV4dE1lbnVJdGVtLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvbnRleHRNZW51SXRlbS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MTI5MzVFMTEyODhEOTc4MDBBNEI2OTUgLyogSW5qZWN0
ZWRCdW5kbGVQYWdlQ29udGV4dE1lbnVDbGllbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSW5qZWN0ZWRCdW5kbGVQYWdlQ29udGV4dE1lbnVDbGllbnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTI5MzVFMjEyODhEOTc4MDBBNEI2OTUgLyog
SW5qZWN0ZWRCdW5kbGVQYWdlQ29udGV4dE1lbnVDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSW5qZWN0ZWRCdW5kbGVQYWdlQ29udGV4dE1lbnVDbGllbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTEyQzA2ODYxNjM4RjY3RTAwQUJCOTExIC8qIEhv
c3RSZWNvcmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSG9zdFJl
Y29yZC5jcHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9Ib3N0UmVjb3JkLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTEyQzA2ODcxNjM4RjY3RTAwQUJCOTExIC8qIEhvc3RSZWNv
cmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSG9zdFJlY29yZC5oOyBwYXRo
ID0gTmV0d29ya1Byb2Nlc3MvSG9zdFJlY29yZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1MTJDMDY4RjE2MzkwRTY5MDBBQkI5MTEgLyogTmV0d29ya1Jlc291cmNlTG9hZFNjaGVk
dWxlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE5ldHdv
cmtSZXNvdXJjZUxvYWRTY2hlZHVsZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUxMkRGNkQ2MTM4QzE4MUEwMEEyMkZDNiAvKiBLZXljaGFpbkl0ZW1TaGltTWV0aG9kcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBLZXljaGFpbkl0ZW1TaGltTWV0aG9k
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTJERjZENzEzOEMxODFBMDBBMjJG
QzYgLyogS2V5Y2hhaW5JdGVtU2hpbU1ldGhvZHMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBLZXljaGFpbkl0ZW1TaGltTWV0aG9kcy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTEyRTM1MjAxMzBCNTUwMTAwQUJEMTlBIC8qIFdlYkFwcGxpY2F0
aW9uQ2FjaGVNYW5hZ2VyUHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXJQcm94eS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xNjAzLDYgKzE2MTcsMTIgQEAKIAkJNTE2QTRBNUIxMjBBMkNDRDAw
QzA1QjdGIC8qIFdlYkVycm9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdl
YkVycm9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxN0EzM0IzMTMwQjMwOEMw
MEY4MENCNSAvKiBXS0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTdBMzNCNDEzMEIzMDhDMDBGODBDQjUgLyogV0tB
cHBsaWNhdGlvbkNhY2hlTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXS0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTUxN0NGMEREMTYzQTQ0NEMwMEMyOTUwRSAvKiBOZXR3b3JrUmVxdWVzdC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBOZXR3b3JrUmVxdWVzdC5jcHA7IHBhdGgg
PSBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVxdWVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTUxN0NGMERFMTYzQTQ0NEMwMEMyOTUwRSAvKiBOZXR3b3JrUmVxdWVzdC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBOZXR3b3JrUmVxdWVzdC5oOyBwYXRoID0g
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1JlcXVlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNTE3Q0YwRTExNjNBNDg2QzAwQzI5NTBFIC8qIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlv
bk1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1MTdDRjBFMjE2M0E0ODZDMDBDMjk1MEUgLyogTmV0d29ya1By
b2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNTE4MjlEQTMxNjM3QzcwQzAwMDk1M0Q2IC8qIE5ldHdvcmtSZXNvdXJjZUxv
YWRTY2hlZHVsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTmV0
d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTE4MjlEQTQxNjM3QzcwQzAwMDk1M0Q2IC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVs
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTmV0d29ya1Jlc291cmNlTG9h
ZFNjaGVkdWxlci5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZFNj
aGVkdWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTgzNDU5MDEzNDUzMkU4
MDA5MkI2OTYgLyogV2ViSWNvbkRhdGFiYXNlQ2xpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkljb25EYXRhYmFzZUNsaWVudC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUxODM0NTkxMTM0NTMyRTgwMDkyQjY5NiAvKiBXZWJJY29uRGF0
YWJhc2VDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViSWNvbkRh
dGFiYXNlQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxODNCMzkzMTM3
OUY4NUMwMEU4NzU0RSAvKiBTaGltLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsg
cGF0aCA9IFNoaW0ueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjU5
LDEwICsxNjc5LDEzIEBACiAJCTUxRDEzMDUxMTM4MkVBQzAwMDM1MUVERCAvKiBTZWNJdGVtUmVz
cG9uc2VEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNlY0l0
ZW1SZXNwb25zZURhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUQxMzA1
MjEzODJFQUMwMDAzNTFFREQgLyogU2VjSXRlbVJlc3BvbnNlRGF0YS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTZWNJdGVtUmVzcG9uc2VEYXRhLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUxRDEzMDU3MTM4MkYxMDUwMDM1MUVERCAvKiBXZWJQcm9jZXNzUHJv
eHlNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJQcm9j
ZXNzUHJveHlNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxREQ5RjI2MTYz
NjdEQTIwMDE1NzhFOSAvKiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VSZWNl
aXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTUxREQ5RjI3MTYzNjdEQTIwMDE1NzhFOSAvKiBOZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzc01lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTFGQTJENTQxNTIxMTE4NjAwQzFCQTBCIC8qIFdLQnVuZGxlRE9NV2lu
ZG93RXh0ZW5zaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQnVuZGxl
RE9NV2luZG93RXh0ZW5zaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRkEy
RDVBMTUyMTFBMUUwMEMxQkEwQiAvKiBJbmplY3RlZEJ1bmRsZURPTVdpbmRvd0V4dGVuc2lvbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmplY3RlZEJ1bmRsZURPTVdpbmRv
d0V4dGVuc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUZBMkQ1QzE1MjEx
QTUwMDBDMUJBMEIgLyogSW5qZWN0ZWRCdW5kbGVET01XaW5kb3dFeHRlbnNpb24uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5qZWN0ZWRCdW5kbGVET01XaW5kb3dF
eHRlbnNpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUZBMkQ3NTE1MjEy
RTFFMDBDMUJBMEIgLyogV0tCdW5kbGVET01XaW5kb3dFeHRlbnNpb24uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0tCdW5kbGVET01XaW5kb3dFeHRlbnNpb24uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MUZCMDkwMjE2M0EzQjFDMDBFQzMyNEEg
LyogTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IE5ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbjsgcGF0aCA9IE5ldHdvcmsvTmV0d29ya1Byb2Nlc3ND
b25uZWN0aW9uLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Mjcy
QjI4ODE0MDY5ODVEMDA5NkE1RDAgLyogU3RhdGlzdGljc0RhdGEuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RhdGlzdGljc0RhdGEuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MjcyQjI4OTE0MDY5ODVEMDA5NkE1RDAgLyogU3RhdGlzdGljc0Rh
dGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RhdGlzdGljc0RhdGEuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUQxQTIzOEUxNUU3NUFENTAwMjNFOTgxIC8q
IHdlYmtpdDIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBmb2xkZXI7IHBhdGggPSB3ZWJraXQyOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
Mjk1NSw2ICsyOTc4LDcgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTUxMDVCMEQ0MTYyRjdBN0Ew
MEUyNzcwOSAvKiBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwICovLAogCQkJCTUxMDVCMEQ1
MTYyRjdBN0EwMEUyNzcwOSAvKiBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uaCAqLywKKwkJCQk1
MUZCMDkwMjE2M0EzQjFDMDBFQzMyNEEgLyogTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLm1lc3Nh
Z2VzLmluICovLAogCQkJCTUxQUJGNjU2MTYzOTJGMTUwMDEzMkE3QSAvKiBXZWJSZXNvdXJjZUxv
YWRTY2hlZHVsZXIuY3BwICovLAogCQkJCTUxQUJGNjU3MTYzOTJGMTUwMDEzMkE3QSAvKiBXZWJS
ZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCAqLywKIAkJCSk7CkBAIC0yOTY1LDYgKzI5ODksOCBAQAog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQk1MTBDQzdEQzE2MTM4RTI5
MDBEMDNFRDMgLyogbWFjICovLAorCQkJCTUxMkMwNjg2MTYzOEY2N0UwMEFCQjkxMSAvKiBIb3N0
UmVjb3JkLmNwcCAqLywKKwkJCQk1MTJDMDY4NzE2MzhGNjdFMDBBQkI5MTEgLyogSG9zdFJlY29y
ZC5oICovLAogCQkJCTUxM0ExNjQ5MTYzMEE5QkYwMDVEN0QyMiAvKiBOZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5jcHAgKi8sCiAJCQkJNTEzQTE2NEExNjMwQTlCRjAwNUQ3RDIyIC8qIE5l
dHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmggKi8sCiAJCQkJNTEzQTE2NEIxNjMwQTlCRjAw
NUQ3RDIyIC8qIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluICovLApA
QCAtMjk3Miw2ICsyOTk4LDEwIEBACiAJCQkJNTEwQ0M3RTAxNjEzOEUyOTAwRDAzRUQzIC8qIE5l
dHdvcmtQcm9jZXNzLmggKi8sCiAJCQkJNTFBOEE2MTcxNjI3RjVCQjAwMEQ5MEU5IC8qIE5ldHdv
cmtQcm9jZXNzLm1lc3NhZ2VzLmluICovLAogCQkJCTUxMENDN0UxMTYxMzhFMjkwMEQwM0VEMyAv
KiBOZXR3b3JrUHJvY2Vzc01haW4uaCAqLywKKwkJCQk1MTdDRjBERDE2M0E0NDRDMDBDMjk1MEUg
LyogTmV0d29ya1JlcXVlc3QuY3BwICovLAorCQkJCTUxN0NGMERFMTYzQTQ0NEMwMEMyOTUwRSAv
KiBOZXR3b3JrUmVxdWVzdC5oICovLAorCQkJCTUxODI5REEzMTYzN0M3MEMwMDA5NTNENiAvKiBO
ZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcCAqLywKKwkJCQk1MTgyOURBNDE2MzdDNzBD
MDAwOTUzRDYgLyogTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlci5oICovLAogCQkJKTsKIAkJ
CW5hbWUgPSBOZXR3b3JrUHJvY2VzczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0y
OTgxLDYgKzMwMTEsNyBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJNTFBOEE2MTUxNjI3RjNGOTAw
MEQ5MEU5IC8qIE5ldHdvcmtQcm9jZXNzTWFjLm1tICovLAogCQkJCTUxMENDN0REMTYxMzhFMjkw
MEQwM0VEMyAvKiBOZXR3b3JrUHJvY2Vzc01haW5NYWMubW0gKi8sCisJCQkJNTEyQzA2OEYxNjM5
MEU2OTAwQUJCOTExIC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXJNYWMubW0gKi8sCiAJ
CQkpOwogCQkJbmFtZSA9IG1hYzsKIAkJCXBhdGggPSBOZXR3b3JrUHJvY2Vzcy9tYWM7CkBAIC00
MDQ5LDYgKzQwODAsMTAgQEAKIAkJCQkxQTY0MjMwNzEyREQwOUVCMDBDQUFFMkMgLyogRHJhd2lu
Z0FyZWFQcm94eU1lc3NhZ2VzLmggKi8sCiAJCQkJMUFBNTc1RkYxNDk2QjdDMDAwQTRFRTA2IC8q
IEV2ZW50RGlzcGF0Y2hlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCiAJCQkJMUFBNTc2MDAxNDk2
QjdDMDAwQTRFRTA2IC8qIEV2ZW50RGlzcGF0Y2hlck1lc3NhZ2VzLmggKi8sCisJCQkJNTFERDlG
MjYxNjM2N0RBMjAwMTU3OEU5IC8qIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2Fn
ZVJlY2VpdmVyLmNwcCAqLywKKwkJCQk1MUREOUYyNzE2MzY3REEyMDAxNTc4RTkgLyogTmV0d29y
a0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlcy5oICovLAorCQkJCTUxN0NGMEUxMTYzQTQ4
NkMwMEMyOTUwRSAvKiBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3Bw
ICovLAorCQkJCTUxN0NGMEUyMTYzQTQ4NkMwMEMyOTUwRSAvKiBOZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb25NZXNzYWdlcy5oICovLAogCQkJCTUxQUNDOTM0MTYyODA2NDgwMDM0MjU1MCAvKiBOZXR3
b3JrUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCiAJCQkJNTFBQ0M5MzUxNjI4MDY0ODAw
MzQyNTUwIC8qIE5ldHdvcmtQcm9jZXNzTWVzc2FnZXMuaCAqLywKIAkJCQk1MTNBMTYzQTE2MzA4
OEY2MDA1RDdEMjIgLyogTmV0d29ya1Byb2Nlc3NQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8s
CkBAIC00NzQ4LDYgKzQ3ODMsMTEgQEAKIAkJCQk1MTNBMTYzRDE2MzA4OEY2MDA1RDdEMjIgLyog
TmV0d29ya1Byb2Nlc3NQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTNBMTY0
RDE2MzBBOUJGMDA1RDdEMjIgLyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTFBMTNCRUI0MTYzNUE5QzgwMEYxOUMwMyAvKiBTdHJpbmdSZWZlcmVu
Y2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTUxREQ5RjI5MTYzNjdEQTIwMDE1NzhFOSAvKiBOZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKKwkJCQk1
MTgyOURBNjE2MzdDNzBDMDAwOTUzRDYgLyogTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlci5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNTEyQzA2ODkxNjM4RjY3RTAwQUJCOTExIC8qIEhvc3RSZWNv
cmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTUxN0NGMEUwMTYzQTQ0NEMwMEMyOTUwRSAvKiBOZXR3
b3JrUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTE3Q0YwRTQxNjNBNDg2QzAwQzI5NTBF
IC8qIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJ
CSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAg
LTU2OTksNyArNTczOSwxMyBAQAogCQkJCTUxM0ExNjRDMTYzMEE5QkYwMDVEN0QyMiAvKiBOZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTgzRERF
QzE2MzBCREZDMDA4QkU1QzcgLyogTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTFBMTNCRUIzMTYzNUE5QzgwMEYxOUMwMyAvKiBTdHJpbmdSZWZlcmVuY2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTFBQkY2NUExNjM5MkYyMDAwMTMyQTdBIC8qIFdlYlJl
c291cmNlTG9hZFNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MUREOUYyODE2MzY3
REEyMDAxNTc4RTkgLyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlUmVjZWl2
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTE4MjlEQTUxNjM3QzcwQzAwMDk1M0Q2IC8qIE5l
dHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTEyQzA2
ODgxNjM4RjY3RTAwQUJCOTExIC8qIEhvc3RSZWNvcmQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
NTEyQzA2OTAxNjM5MEU2OTAwQUJCOTExIC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXJN
YWMubW0gaW4gU291cmNlcyAqLywKKwkJCQk1MUZCMDhGRjE2MzlERTFBMDBFQzMyNEEgLyogV2Vi
UmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxN0NGMERGMTYz
QTQ0NEMwMEMyOTUwRSAvKiBOZXR3b3JrUmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1
MTdDRjBFMzE2M0E0ODZDMDBDMjk1MEUgLyogTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uTWVzc2Fn
ZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmNwcApp
bmRleCBkZDlkNmNiLi43ZWE0YzlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmNwcApAQCAt
NDIsMTIgKzQyLDE4IEBAIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6fk5ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbigpCiB7CiB9CiAKLXZvaWQgTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOjpkaWRS
ZWNlaXZlTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBD
b3JlSVBDOjpNZXNzYWdlRGVjb2RlciYpCit2b2lkIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6
ZGlkUmVjZWl2ZU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29yZUlQ
Qzo6TWVzc2FnZUlEIG1lc3NhZ2VJRCwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImIGRlY29kZXIp
CiB7CisgICAgaWYgKG1lc3NhZ2VJRC5pczxDb3JlSVBDOjpNZXNzYWdlQ2xhc3NOZXR3b3JrUHJv
Y2Vzc0Nvbm5lY3Rpb24+KCkpIHsKKyAgICAgICAgZGlkUmVjZWl2ZU5ldHdvcmtQcm9jZXNzQ29u
bmVjdGlvbk1lc3NhZ2UoY29ubmVjdGlvbiwgbWVzc2FnZUlELCBkZWNvZGVyKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBOZXR3
b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVTeW5jTWVzc2FnZShDb3JlSVBDOjpDb25u
ZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpNZXNzYWdlRGVjb2RlciYsIE93
blB0cjxDb3JlSVBDOjpNZXNzYWdlRW5jb2Rlcj4mKQogeworICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkQ2xvc2UoQ29yZUlQ
Qzo6Q29ubmVjdGlvbiopCkBAIC02MCw2ICs2NiwxMCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzQ29u
bmVjdGlvbjo6ZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBD
bwogewogfQogCit2b2lkIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6c3RhcnRSZXNvdXJjZUxv
YWQoUmVzb3VyY2VMb2FkSWRlbnRpZmllciByZXNvdXJjZUxvYWRJZGVudGlmaWVyKQoreworICAg
IFdlYlByb2Nlc3M6OnNoYXJlZCgpLndlYlJlc291cmNlTG9hZFNjaGVkdWxlcigpLnN0YXJ0UmVz
b3VyY2VMb2FkKHJlc291cmNlTG9hZElkZW50aWZpZXIpOworfQogICAgIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29y
ay9OZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
TmV0d29yay9OZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uaAppbmRleCA2NWUyNTk4Li45ZDk4NmJl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1By
b2Nlc3NDb25uZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3Jr
L05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5oCkBAIC0zNCw2ICszNCw4IEBACiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogCit0eXBlZGVmIHVpbnQ2NF90IFJlc291cmNlTG9hZElkZW50aWZpZXI7CisK
IGNsYXNzIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPE5ldHdv
cmtQcm9jZXNzQ29ubmVjdGlvbj4sIENvcmVJUEM6OkNvbm5lY3Rpb246OkNsaWVudCB7CiBwdWJs
aWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uPiBjcmVh
dGUoQ29yZUlQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBjb25uZWN0aW9uSWRlbnRpZmllcikK
QEAgLTUzLDYgKzU1LDEwIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGRpZENsb3NlKENv
cmVJUEM6OkNvbm5lY3Rpb24qKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUludmFsaWRN
ZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQpOwogCisgICAg
dm9pZCBkaWRSZWNlaXZlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uTWVzc2FnZShDb3JlSVBDOjpD
b25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpNZXNzYWdlRGVjb2RlciYp
OworCisgICAgdm9pZCBzdGFydFJlc291cmNlTG9hZChSZXNvdXJjZUxvYWRJZGVudGlmaWVyIHJl
c291cmNlTG9hZElkZW50aWZpZXIpOworCiAgICAgLy8gVGhlIGNvbm5lY3Rpb24gZnJvbSB0aGUg
d2ViIHByb2Nlc3MgdG8gdGhlIG5ldHdvcmsgcHJvY2Vzcy4KICAgICBSZWZQdHI8Q29yZUlQQzo6
Q29ubmVjdGlvbj4gbV9jb25uZWN0aW9uOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4g
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0
aW9uLm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1Zjg0
MTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsv
TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMzIgQEAKKyMg
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
IworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmIEVOQUJMRShORVRXT1JL
X1BST0NFU1MpCisKK21lc3NhZ2VzIC0+IE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbiB7CisKKyAg
ICAvLyBGSVhNRTogVGhpcyBtZXNzYWdlIGlzIGZvciB0aGUgTmV0d29ya1Byb2Nlc3MgdG8gdGVs
bCB0aGUgV2ViUHJvY2VzcyB0byBzdGFydCBhIGxvYWQuCisgICAgLy8gT25jZSB0aGUgTmV0d29y
a1Byb2Nlc3MgaXMgZG9pbmcgdGhlIGxvYWRpbmcgaXRzZWxmIHRoZW4gd2Ugc2hvdWxkIHJlbW92
ZSBpdC4KKyAgICBTdGFydFJlc291cmNlTG9hZCh1aW50NjRfdCByZXNvdXJjZUxvYWRJZGVudGlm
aWVyKQorfQorCisjZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRTY2hlZHVs
ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9h
ZFNjaGVkdWxlci5jcHAKaW5kZXggMGFmNmQ0NS4uNzg3ZmMxYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZFNj
aGVkdWxlci5jcHAKQEAgLTI2LDE2ICsyNiwxNzkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCIKIAorI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKKyNpbmNsdWRlICJOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCisj
aW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiV2ViQ29yZUFy
Z3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvRG9jdW1lbnRMb2FkZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9GcmFtZUxvYWRlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2Fk
ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1N1YnJlc291cmNlTG9hZGVyLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9TdG9yYWdlQXJlYS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTmV0c2NhcGVQbHVnSW5T
dHJlYW1Mb2FkZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKICNpZiBFTkFC
TEUoTkVUV09SS19QUk9DRVNTKQogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNw
YWNlIFdlYktpdCB7CiAKK1dlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6V2ViUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyKCkKKyAgICA6IG1fc3VzcGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50KDApCit7Cit9
CisKIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6fldlYlJlc291cmNlTG9hZFNjaGVkdWxlcigp
CiB7CiB9CiAKK1Bhc3NSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IFdlYlJlc291cmNlTG9hZFNj
aGVkdWxlcjo6c2NoZWR1bGVTdWJyZXNvdXJjZUxvYWQoRnJhbWUqIGZyYW1lLCBDYWNoZWRSZXNv
dXJjZSogcmVzb3VyY2UsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VM
b2FkUHJpb3JpdHkgcHJpb3JpdHksIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYgb3B0aW9u
cykKK3sKKyAgICBSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IGxvYWRlciA9IFN1YnJlc291cmNl
TG9hZGVyOjpjcmVhdGUoZnJhbWUsIHJlc291cmNlLCByZXF1ZXN0LCBvcHRpb25zKTsKKyAgICBp
ZiAobG9hZGVyKQorICAgICAgICBzY2hlZHVsZUxvYWQobG9hZGVyLmdldCgpLCBwcmlvcml0eSk7
CisgICAgcmV0dXJuIGxvYWRlci5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8TmV0c2NhcGVQ
bHVnSW5TdHJlYW1Mb2FkZXI+IFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVQbHVn
aW5TdHJlYW1Mb2FkKEZyYW1lKiBmcmFtZSwgTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGll
bnQqIGNsaWVudCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIFBhc3NS
ZWZQdHI8TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IGxvYWRlciA9IE5ldHNjYXBlUGx1Z0lu
U3RyZWFtTG9hZGVyOjpjcmVhdGUoZnJhbWUsIGNsaWVudCwgcmVxdWVzdCk7CisgICAgaWYgKGxv
YWRlcikKKyAgICAgICAgc2NoZWR1bGVMb2FkKGxvYWRlci5nZXQoKSwgUmVzb3VyY2VMb2FkUHJp
b3JpdHlMb3cpOworICAgIHJldHVybiBsb2FkZXI7Cit9CisKK3ZvaWQgV2ViUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyOjpzY2hlZHVsZUxvYWQoUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9hZGVyLCBS
ZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSkKK3sKKyAgICBMT0coTmV0d29yaywgIihXZWJQ
cm9jZXNzKSBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlTG9hZCwgdXJsICclcycg
cHJpb3JpdHkgJWkiLCByZXNvdXJjZUxvYWRlci0+dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEo
KSwgcHJpb3JpdHkpOworCisgICAgQVNTRVJUKHJlc291cmNlTG9hZGVyKTsKKyAgICBBU1NFUlQo
cHJpb3JpdHkgIT0gUmVzb3VyY2VMb2FkUHJpb3JpdHlVbnJlc29sdmVkKTsKKyAgICBwcmlvcml0
eSA9IFJlc291cmNlTG9hZFByaW9yaXR5SGlnaGVzdDsKKworICAgIC8vIElmIHRoZXJlJ3MgYSB3
ZWIgYXJjaGl2ZSByZXNvdXJjZSBmb3IgdGhpcyBVUkwsIHdlIGRvbid0IG5lZWQgdG8gc2NoZWR1
bGUgdGhlIGxvYWQgc2luY2UgaXQgd2lsbCBuZXZlciB0b3VjaCB0aGUgbmV0d29yay4KKyAgICBp
ZiAocmVzb3VyY2VMb2FkZXItPmRvY3VtZW50TG9hZGVyKCktPmFyY2hpdmVSZXNvdXJjZUZvclVS
TChyZXNvdXJjZUxvYWRlci0+cmVxdWVzdCgpLnVybCgpKSkgeworICAgICAgICBzdGFydFJlc291
cmNlTG9hZGVyKHJlc291cmNlTG9hZGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAK
KyAgICBSZXNvdXJjZUxvYWRJZGVudGlmaWVyIGlkZW50aWZpZXI7CisgICAgCisgICAgUmVzb3Vy
Y2VSZXF1ZXN0IHJlcXVlc3QgPSByZXNvdXJjZUxvYWRlci0+cmVxdWVzdCgpOworICAgIAorICAg
IC8vIFdlIHdhbnQgdGhlIG5ldHdvcmsgcHJvY2VzcyBpbnZvbHZlZCBpbiBzY2hlZHVsaW5nIGRh
dGEgVVJMIGxvYWRzIGJ1dCBpdCBkb2Vzbid0IG5lZWQgdG8ga25vdyB0aGUgZnVsbCAob2Z0ZW4g
bG9uZykgVVJMLgorICAgIGlmIChyZXF1ZXN0LnVybCgpLnByb3RvY29sSXNEYXRhKCkpIHsKKyAg
ICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChLVVJMLCBkYXRhVVJMLCAoS1VSTCgpLCAiZGF0YToi
KSk7CisgICAgICAgICByZXF1ZXN0LnNldFVSTChkYXRhVVJMKTsKKyAgICB9CisKKyAgICBpZiAo
IVdlYlByb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+
c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpTY2hlZHVs
ZU5ldHdvcmtSZXF1ZXN0KHJlcXVlc3QsIHByaW9yaXR5KSwgTWVzc2FnZXM6Ok5ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzOjpTY2hlZHVsZU5ldHdvcmtSZXF1ZXN0OjpSZXBseShpZGVudGlm
aWVyKSwgMCkpIHsKKyAgICAgICAgLy8gRklYTUU6IFdoYXQgc2hvdWxkIHdlIGRvIGlmIHRoaXMg
ZmFpbHM/CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICBy
ZXNvdXJjZUxvYWRlci0+c2V0SWRlbnRpZmllcihpZGVudGlmaWVyKTsKKyAgICBtX3BlbmRpbmdS
ZXNvdXJjZUxvYWRlcnMuc2V0KGlkZW50aWZpZXIsIHJlc291cmNlTG9hZGVyKTsKKyAgICAKKyAg
ICBub3RpZnlEaWRTY2hlZHVsZVJlc291cmNlUmVxdWVzdChyZXNvdXJjZUxvYWRlcik7Cit9CisK
K3ZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjphZGRNYWluUmVzb3VyY2VMb2FkKFJlc291
cmNlTG9hZGVyKiByZXNvdXJjZUxvYWRlcikKK3sKKyAgICBMT0coTmV0d29yaywgIihXZWJQcm9j
ZXNzKSBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmFkZE1haW5SZXNvdXJjZUxvYWQsIHVybCAn
JXMnIiwgcmVzb3VyY2VMb2FkZXItPnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworCisg
ICAgUmVzb3VyY2VMb2FkSWRlbnRpZmllciBpZGVudGlmaWVyOworCisgICAgaWYgKCFXZWJQcm9j
ZXNzOjpzaGFyZWQoKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmRTeW5j
KE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6QWRkTG9hZEluUHJvZ3Jl
c3MocmVzb3VyY2VMb2FkZXItPnVybCgpKSwgTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOjpBZGRMb2FkSW5Qcm9ncmVzczo6UmVwbHkoaWRlbnRpZmllciksIDApKSB7Cisg
ICAgICAgIC8vIEZJWE1FOiBXaGF0IHNob3VsZCB3ZSBkbyBpZiB0aGlzIGZhaWxzPworICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICByZXNvdXJjZUxvYWRlci0+c2V0
SWRlbnRpZmllcihpZGVudGlmaWVyKTsKKyAgICAKKyAgICBtX2FjdGl2ZVJlc291cmNlTG9hZGVy
cy5zZXQoaWRlbnRpZmllciwgcmVzb3VyY2VMb2FkZXIpOworfQorCit2b2lkIFdlYlJlc291cmNl
TG9hZFNjaGVkdWxlcjo6cmVtb3ZlKFJlc291cmNlTG9hZGVyKiByZXNvdXJjZUxvYWRlcikKK3sK
KyAgICBBU1NFUlQocmVzb3VyY2VMb2FkZXIpOworICAgIExPRyhOZXR3b3JrLCAiKFdlYlByb2Nl
c3MpIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVtb3ZlLCB1cmwgJyVzJyIsIHJlc291cmNl
TG9hZGVyLT51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgIC8vIEl0J3MgcG9z
c2libGUgZm9yIGEgcmVzb3VyY2VMb2FkZXIgdG8gYmUgcmVtb3ZlZCBiZWZvcmUgaXQgZXZlciBz
dGFydGVkLAorICAgIC8vIG1lYW5pbmcgaXQgZG9lc24ndCBoYXZlIGFuIGlkZW50aWZpZXIuCisg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBtYWtlIHRoaXMgbm90IGJlIHBvc3NpYmxlLiAgV2Ugc2hv
dWxkIGNoYW5nZSB0aGUgUmVzb3VyY2VMb2FkZXIKKyAgICAvLyBjb2RlIHBhdGggc28gd2UgYWx3
YXlzIGdldCBhbiBpZGVudGlmaWVyIHRvIGl0IHdoZW4gaXQgaXMgY3JlYXRlZAorICAgIAorICAg
IFJlc291cmNlTG9hZElkZW50aWZpZXIgaWRlbnRpZmllciA9IHJlc291cmNlTG9hZGVyLT5pZGVu
dGlmaWVyKCk7CisgICAgaWYgKCFpZGVudGlmaWVyKSB7CisgICAgICAgIExPR19FUlJPUigiV2Vi
UmVzb3VyY2VMb2FkU2NoZWR1bGVyIHJlbW92aW5nIGEgUmVzb3VyY2VMb2FkZXIgdGhhdCBoYXMg
bm8gaWRlbnRpZmllci4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBXZWJQ
cm9jZXNzOjpzaGFyZWQoKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpSZW1vdmVMb2FkSWRlbnRp
ZmllcihpZGVudGlmaWVyKSwgMCk7CisgICAgCisgICAgQVNTRVJUKG1fcGVuZGluZ1Jlc291cmNl
TG9hZGVycy5jb250YWlucyhpZGVudGlmaWVyKSB8fCBtX2FjdGl2ZVJlc291cmNlTG9hZGVycy5j
b250YWlucyhpZGVudGlmaWVyKSk7CisgICAgbV9wZW5kaW5nUmVzb3VyY2VMb2FkZXJzLnJlbW92
ZShpZGVudGlmaWVyKTsKKyAgICBtX2FjdGl2ZVJlc291cmNlTG9hZGVycy5yZW1vdmUoaWRlbnRp
Zmllcik7Cit9CisKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpjcm9zc09yaWdpblJl
ZGlyZWN0UmVjZWl2ZWQoUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9hZGVyLCBjb25zdCBLVVJM
JiByZWRpcmVjdFVSTCkKK3sKKyAgICBMT0coTmV0d29yaywgIihXZWJQcm9jZXNzKSBXZWJSZXNv
dXJjZUxvYWRTY2hlZHVsZXI6OmNyb3NzT3JpZ2luUmVkaXJlY3RSZWNlaXZlZC4gRnJvbSAnJXMn
IHRvICclcyciLCByZXNvdXJjZUxvYWRlci0+dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwg
cmVkaXJlY3RVUkwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICBBU1NFUlQocmVzb3Vy
Y2VMb2FkZXIpOworICAgIEFTU0VSVChyZXNvdXJjZUxvYWRlci0+aWRlbnRpZmllcigpKTsKKwor
ICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24o
KS0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjcm9z
c09yaWdpblJlZGlyZWN0UmVjZWl2ZWQocmVzb3VyY2VMb2FkZXItPmlkZW50aWZpZXIoKSwgcmVk
aXJlY3RVUkwpLCBNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNyb3Nz
T3JpZ2luUmVkaXJlY3RSZWNlaXZlZDo6UmVwbHkoKSwgMCk7Cit9CisKK3ZvaWQgV2ViUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhSZXNvdXJjZUxvYWRQcmlvcml0
eSBtaW5pbXVtUHJpb3JpdHkpCit7CisgICAgTE9HKE5ldHdvcmssICIoV2ViUHJvY2VzcykgV2Vi
UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyIpOworICAgIAorICAg
IC8vIElmIHRoaXMgV2ViUHJvY2VzcyBoYXMgaXRzIG93biByZXF1ZXN0IHN1c3BlbnNpb24gY291
bnQgdGhlbiB3ZSBkb24ndCBldmVuCisgICAgLy8gaGF2ZSB0byBib3RoZXIgbWVzc2FnaW5nIHRo
ZSBOZXR3b3JrUHJvY2Vzcy4KKyAgICBpZiAobV9zdXNwZW5kUGVuZGluZ1JlcXVlc3RzQ291bnQp
CisgICAgICAgIHJldHVybjsKKworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtDb25u
ZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25U
b1dlYlByb2Nlc3M6OlNlcnZlUGVuZGluZ1JlcXVlc3RzKG1pbmltdW1Qcmlvcml0eSksIDApOwor
fQorCit2b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c3VzcGVuZFBlbmRpbmdSZXF1ZXN0
cygpCit7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29u
bmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3M6OlN1c3BlbmRQZW5kaW5nUmVxdWVzdHMoKSwgTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzOjpTdXNwZW5kUGVuZGluZ1JlcXVlc3RzOjpSZXBseSgpLCAwKTsKKworICAg
ICsrbV9zdXNwZW5kUGVuZGluZ1JlcXVlc3RzQ291bnQ7Cit9CisKK3ZvaWQgV2ViUmVzb3VyY2VM
b2FkU2NoZWR1bGVyOjpyZXN1bWVQZW5kaW5nUmVxdWVzdHMoKQoreworICAgIFdlYlByb2Nlc3M6
OnNoYXJlZCgpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVz
c2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpSZXN1bWVQZW5kaW5nUmVxdWVz
dHMoKSwgTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpSZXN1bWVQZW5k
aW5nUmVxdWVzdHM6OlJlcGx5KCksIDApOworCisgICAgQVNTRVJUKG1fc3VzcGVuZFBlbmRpbmdS
ZXF1ZXN0c0NvdW50KTsKKyAgICAtLW1fc3VzcGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50OworfQor
Cit2b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2V0U2VyaWFsTG9hZGluZ0VuYWJsZWQo
Ym9vbCBlbmFibGVkKQoreworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtDb25uZWN0
aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzOjpTZXRTZXJpYWxMb2FkaW5nRW5hYmxlZChlbmFibGVkKSwgTWVzc2FnZXM6
Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpTZXRTZXJpYWxMb2FkaW5nRW5hYmxlZDo6
UmVwbHkoKSwgMCk7Cit9CisKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzdGFydFJl
c291cmNlTG9hZChSZXNvdXJjZUxvYWRJZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgUmVm
UHRyPFJlc291cmNlTG9hZGVyPiBsb2FkZXIgPSBtX3BlbmRpbmdSZXNvdXJjZUxvYWRlcnMudGFr
ZShpZGVudGlmaWVyKTsKKyAgICBBU1NFUlQobG9hZGVyKTsKKyAgICAKKyAgICBMT0coTmV0d29y
aywgIihXZWJQcm9jZXNzKSBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnN0YXJ0UmVzb3VyY2VM
b2FkIHN0YXJ0aW5nIGxvYWQgZm9yICclcyciLCBsb2FkZXItPnVybCgpLnN0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOworICAgCisgICAgbV9hY3RpdmVSZXNvdXJjZUxvYWRlcnMuc2V0KGlkZW50aWZp
ZXIsIGxvYWRlcik7CisgICAgCisgICAgc3RhcnRSZXNvdXJjZUxvYWRlcihsb2FkZXIuZ2V0KCkp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIEVOQUJMRShORVRXT1JL
X1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsv
V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05l
dHdvcmsvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgKaW5kZXggZGZkOTg1Zi4uYmE2NzRmMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNl
TG9hZFNjaGVkdWxlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9X
ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaApAQCAtMjgsMTMgKzI4LDUwIEBACiAKICNpbmNsdWRl
IDxXZWJDb3JlL1Jlc291cmNlTG9hZFNjaGVkdWxlci5oPgogCisjaW5jbHVkZSA8V2ViQ29yZS9S
ZXNvdXJjZUxvYWRQcmlvcml0eS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkZXIu
aD4KKwogI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCiAKIG5hbWVzcGFjZSBXZWJLaXQgewog
CitjbGFzcyBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb247Cit0eXBlZGVmIHVpbnQ2NF90IFJlc291
cmNlTG9hZElkZW50aWZpZXI7CisKIGNsYXNzIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlciA6IHB1
YmxpYyBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXIgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgorICAgIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcigpOwogICAgIHZpcnR1YWwg
fldlYlJlc291cmNlTG9hZFNjaGVkdWxlcigpOworICAgIAorICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlcj4gc2NoZWR1bGVTdWJyZXNvdXJjZUxvYWQoV2Vi
Q29yZTo6RnJhbWUqLCBXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZSosIGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYsIFdlYkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5LCBjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZUxvYWRlck9wdGlvbnMmKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2Vi
Q29yZTo6TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IHNjaGVkdWxlUGx1Z2luU3RyZWFtTG9h
ZChXZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6Ok5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xp
ZW50KiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgCisgICAgdmlydHVh
bCB2b2lkIGFkZE1haW5SZXNvdXJjZUxvYWQoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXIqKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVtb3ZlKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyKik7CisgICAgdmly
dHVhbCB2b2lkIGNyb3NzT3JpZ2luUmVkaXJlY3RSZWNlaXZlZChXZWJDb3JlOjpSZXNvdXJjZUxv
YWRlciosIGNvbnN0IFdlYkNvcmU6OktVUkwmIHJlZGlyZWN0VVJMKTsKKyAgICAKKyAgICB2aXJ0
dWFsIHZvaWQgc2VydmVQZW5kaW5nUmVxdWVzdHMoV2ViQ29yZTo6UmVzb3VyY2VMb2FkUHJpb3Jp
dHkgbWluaW11bVByaW9yaXR5ID0gV2ViQ29yZTo6UmVzb3VyY2VMb2FkUHJpb3JpdHlWZXJ5TG93
KTsKKworICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kUGVuZGluZ1JlcXVlc3RzKCk7CisgICAgdmly
dHVhbCB2b2lkIHJlc3VtZVBlbmRpbmdSZXF1ZXN0cygpOworCisgICAgdmlydHVhbCB2b2lkIHNl
dFNlcmlhbExvYWRpbmdFbmFibGVkKGJvb2wpOworCitwcml2YXRlOgorICAgIHZvaWQgc2NoZWR1
bGVMb2FkKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyKiwgV2ViQ29yZTo6UmVzb3VyY2VMb2FkUHJp
b3JpdHkpOworCisgICAgLy8gTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uIGdldHMgdG8gdGVsbCBs
b2FkcyB0byBhY3R1YWxseSBzdGFydC4KKyAgICAvLyBGSVhNRTogT25jZSBhY3R1YWwgbG9hZGlu
ZyB0YWtlcyBwbGFjZSBpbiB0aGUgTmV0d29ya1Byb2Nlc3Mgd2Ugd29uJ3QgbmVlZCB0aGlzLgor
ICAgIGZyaWVuZCBjbGFzcyBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb247CisgICAgdm9pZCBzdGFy
dFJlc291cmNlTG9hZChSZXNvdXJjZUxvYWRJZGVudGlmaWVyKTsKKyAgICAKKyAgICB0eXBlZGVm
IEhhc2hNYXA8dW5zaWduZWQgbG9uZywgUmVmUHRyPFdlYkNvcmU6OlJlc291cmNlTG9hZGVyPiA+
IFJlc291cmNlTG9hZGVyTWFwOworICAgIFJlc291cmNlTG9hZGVyTWFwIG1fcGVuZGluZ1Jlc291
cmNlTG9hZGVyczsKKyAgICBSZXNvdXJjZUxvYWRlck1hcCBtX2FjdGl2ZVJlc291cmNlTG9hZGVy
czsKKyAgICAKKyAgICB1bnNpZ25lZCBtX3N1c3BlbmRQZW5kaW5nUmVxdWVzdHNDb3VudDsKKwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2ll
cy5jcHAKaW5kZXggODg5NjBmMy4uZjEyYjg1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJh
dGVnaWVzLmNwcApAQCAtMTA0LDE2ICsxMDQsMTggQEAgdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdp
ZXM6Om5vdGlmeUNvb2tpZXNDaGFuZ2VkKCkKIC8vIExvYWRlclN0cmF0ZWd5CiAKICNpZiBFTkFC
TEUoTkVUV09SS19QUk9DRVNTKQotCiBSZXNvdXJjZUxvYWRTY2hlZHVsZXIqIFdlYlBsYXRmb3Jt
U3RyYXRlZ2llczo6cmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkKIHsKICAgICBzdGF0aWMgUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyKiBzY2hlZHVsZXI7Ci0gICAgaWYgKCFzY2hlZHVsZXIpCi0gICAgICAg
IHNjaGVkdWxlciA9ICZXZWJQcm9jZXNzOjpzaGFyZWQoKS53ZWJSZXNvdXJjZUxvYWRTY2hlZHVs
ZXIoKTsKLSAgICAgICAgCisgICAgaWYgKCFzY2hlZHVsZXIpIHsKKyAgICAgICAgaWYgKFdlYlBy
b2Nlc3M6OnNoYXJlZCgpLnVzZXNOZXR3b3JrUHJvY2VzcygpKQorICAgICAgICAgICAgc2NoZWR1
bGVyID0gJldlYlByb2Nlc3M6OnNoYXJlZCgpLndlYlJlc291cmNlTG9hZFNjaGVkdWxlcigpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBzY2hlZHVsZXIgPSBXZWJDb3JlOjpyZXNvdXJjZUxv
YWRTY2hlZHVsZXIoKTsKKyAgICB9CisgICAgCiAgICAgcmV0dXJuIHNjaGVkdWxlcjsKIH0KLQog
I2VuZGlmCiAKIC8vIFBsdWdpblN0cmF0ZWd5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
cm9jZXNzLmNwcAppbmRleCA2MGU2MDJjLi44YzE1OGMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUHJvY2Vzcy5jcHAKQEAgLTMwNyw4ICszMDcsNyBAQCB2b2lkIFdlYlByb2Nlc3M6
OmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpCiAjZWxzZQogICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogI2VuZGlmCi0KLSAgICBSZWZQdHI8TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9u
PiBtX25ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbiA9IE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6
Y3JlYXRlKGNvbm5lY3Rpb25JZGVudGlmaWVyKTsKKyAgICBtX25ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbiA9IE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6Y3JlYXRlKGNvbm5lY3Rpb25JZGVudGlm
aWVyKTsKIH0KICNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQogCkBAIC0xMDMyLDYg
KzEwMzEsMTMgQEAgdm9pZCBXZWJQcm9jZXNzOjpwb3N0SW5qZWN0ZWRCdW5kbGVNZXNzYWdlKGNv
bnN0IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmIG1lc3NhZ2UKIH0KIAogI2lmIEVOQUJMRShORVRX
T1JLX1BST0NFU1MpCitOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24qIFdlYlByb2Nlc3M6Om5ldHdv
cmtDb25uZWN0aW9uKCkKK3sKKyAgICAvLyBGSVhNRTogSG93IGRvIHdlIGhhbmRsZSBub3QgaGF2
aW5nIHRoZSBjb25uZWN0aW9uIHdoZW4gdGhlIFdlYlByb2Nlc3MgbmVlZHMgaXQ/ICAoTmV0d29y
a1Byb2Nlc3MgY3Jhc2hlZCwgZm9yIGV4YW1wbGUpCisgICAgQVNTRVJUKG1fbmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uKTsKKyAgICByZXR1cm4gbV9uZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uZ2V0
KCk7Cit9CisKIHZvaWQgV2ViUHJvY2Vzczo6bmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uQ2xvc2Vk
KE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbiogY29ubmVjdGlvbikKIHsKICAgICBBU1NFUlQobV9u
ZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nl
c3MuaAppbmRleCA3NDY4Y2Q2Li5jMjQ4YTRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlByb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlByb2Nlc3MuaApAQCAtMjAzLDcgKzIwMyw5IEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgRU5B
QkxFKE5FVFdPUktfUFJPQ0VTUykKKyAgICBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24qIG5ldHdv
cmtDb25uZWN0aW9uKCk7CiAgICAgdm9pZCBuZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25DbG9zZWQo
TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKik7CisgICAgYm9vbCB1c2VzTmV0d29ya1Byb2Nlc3Mo
KSBjb25zdCB7IHJldHVybiBtX3VzZXNOZXR3b3JrUHJvY2VzczsgfQogICAgIFdlYlJlc291cmNl
TG9hZFNjaGVkdWxlciYgd2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkgeyByZXR1cm4gbV93ZWJS
ZXNvdXJjZUxvYWRTY2hlZHVsZXI7IH0KICNlbmRpZgogCg==
</data>
<flag name="commit-queue"
          id="184599"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170952</attachid>
            <date>2012-10-26 10:35:15 -0700</date>
            <delta_ts>2012-10-26 11:04:00 -0700</delta_ts>
            <desc>WIP #2 - Check style and mac build while I start in on changelogs</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>89798</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5leHAuaW4KaW5kZXggNTkxZGY5ZS4uNTcwMjllZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5l
eHAuaW4KQEAgLTI3MCw2ICsyNzAsNyBAQCBfX1pON1dlYkNvcmUxNFJlc291cmNlQnVmZmVyRDFF
dgogX19aTjdXZWJDb3JlMTRSZXNvdXJjZUhhbmRsZTIwZm9yY2VDb250ZW50U25pZmZpbmdFdgog
X19aTjdXZWJDb3JlMTRSZXNvdXJjZUhhbmRsZTI2c3luY2hyb25vdXNMb2FkUnVuTG9vcE1vZGVF
dgogX19aTjdXZWJDb3JlMTRSZXNvdXJjZUhhbmRsZTM1Y3JlYXRlUHJpdmF0ZUJyb3dzaW5nU3Rv
cmFnZVNlc3Npb25FUEsxMF9fQ0ZTdHJpbmcKK19fWk43V2ViQ29yZTE0UmVzb3VyY2VMb2FkZXIx
M3NldElkZW50aWZpZXJFbQogX19aTjdXZWJDb3JlMTRSZXNvdXJjZUxvYWRlcjE0Y2FuY2VsbGVk
RXJyb3JFdgogX19aTjdXZWJDb3JlMTRTY2hlbWVSZWdpc3RyeTI0cmVnaXN0ZXJVUkxTY2hlbWVB
c0xvY2FsRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMTRTY2hlbWVSZWdpc3RyeTI1cmVn
aXN0ZXJVUkxTY2hlbWVBc1NlY3VyZUVSS04zV1RGNlN0cmluZ0UKQEAgLTQ3Miw2ICs0NzMsNyBA
QCBfX1pON1dlYkNvcmUxN0pTRE9NR2xvYmFsT2JqZWN0NnNfaW5mb0UKIF9fWk43V2ViQ29yZTE3
bGFuZ3VhZ2VEaWRDaGFuZ2VFdgogX19aTjdXZWJDb3JlMTdSZWd1bGFyRXhwcmVzc2lvbkMxRVJL
TjNXVEY2U3RyaW5nRU5TMV8xOVRleHRDYXNlU2Vuc2l0aXZpdHlFCiBfX1pON1dlYkNvcmUxN1Jl
Z3VsYXJFeHByZXNzaW9uRDFFdgorX19aTjdXZWJDb3JlMTdTdWJyZXNvdXJjZUxvYWRlcjZjcmVh
dGVFUE5TXzVGcmFtZUVQTlNfMTRDYWNoZWRSZXNvdXJjZUVSS05TXzE1UmVzb3VyY2VSZXF1ZXN0
RVJLTlNfMjFSZXNvdXJjZUxvYWRlck9wdGlvbnNFCiBfX1pON1dlYkNvcmUxN1ZpZXdwb3J0QXJn
dW1lbnRzMTlkZXByZWNhdGVkVGFyZ2V0RFBJRQogX19aTjdXZWJDb3JlMTdjYWNoZURPTVN0cnVj
dHVyZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVQTjNKU0M5U3RydWN0dXJlRVBLTlMyXzlDbGFz
c0luZm9FCiBfX1pON1dlYkNvcmUxN29wZW5UZW1wb3JhcnlGaWxlRVJLTjNXVEY2U3RyaW5nRVJp
CkBAIC01NTksNiArNTYxLDcgQEAgX19aTjdXZWJDb3JlMjFCYWNrRm9yd2FyZENvbnRyb2xsZXIx
MWl0ZW1BdEluZGV4RWkKIF9fWk43V2ViQ29yZTIxTWVtb3J5UHJlc3N1cmVIYW5kbGVyN2luc3Rh
bGxFdgogX19aTjdXZWJDb3JlMjFQbGF0Zm9ybUtleWJvYXJkRXZlbnQyNGRpc2FtYmlndWF0ZUtl
eURvd25FdmVudEVOU18xM1BsYXRmb3JtRXZlbnQ0VHlwZUViCiBfX1pON1dlYkNvcmUyMVJlc291
cmNlTG9hZFNjaGVkdWxlcjE5YWRkTWFpblJlc291cmNlTG9hZEVQTlNfMTRSZXNvdXJjZUxvYWRl
ckUKK19fWk43V2ViQ29yZTIxUmVzb3VyY2VMb2FkU2NoZWR1bGVyMTlzdGFydFJlc291cmNlTG9h
ZGVyRVBOU18xNFJlc291cmNlTG9hZGVyRQogX19aTjdXZWJDb3JlMjFSZXNvdXJjZUxvYWRTY2hl
ZHVsZXIyMHNlcnZlUGVuZGluZ1JlcXVlc3RzRU5TXzIwUmVzb3VyY2VMb2FkUHJpb3JpdHlFCiBf
X1pON1dlYkNvcmUyMVJlc291cmNlTG9hZFNjaGVkdWxlcjIwc2VydmVQZW5kaW5nUmVxdWVzdHNF
UE5TMF8xNUhvc3RJbmZvcm1hdGlvbkVOU18yMFJlc291cmNlTG9hZFByaW9yaXR5RQogX19aTjdX
ZWJDb3JlMjFSZXNvdXJjZUxvYWRTY2hlZHVsZXIyMXJlc3VtZVBlbmRpbmdSZXF1ZXN0c0V2CkBA
IC01NjYsNiArNTY5LDcgQEAgX19aTjdXZWJDb3JlMjFSZXNvdXJjZUxvYWRTY2hlZHVsZXIyMnN1
c3BlbmRQZW5kaW5nUmVxdWVzdHNFdgogX19aTjdXZWJDb3JlMjFSZXNvdXJjZUxvYWRTY2hlZHVs
ZXIyM3NjaGVkdWxlU3VicmVzb3VyY2VMb2FkRVBOU181RnJhbWVFUE5TXzE0Q2FjaGVkUmVzb3Vy
Y2VFUktOU18xNVJlc291cmNlUmVxdWVzdEVOU18yMFJlc291cmNlTG9hZFByaW9yaXR5RVJLTlNf
MjFSZXNvdXJjZUxvYWRlck9wdGlvbnNFCiBfX1pON1dlYkNvcmUyMVJlc291cmNlTG9hZFNjaGVk
dWxlcjI0c2NoZWR1bGVQbHVnaW5TdHJlYW1Mb2FkRVBOU181RnJhbWVFUE5TXzMyTmV0c2NhcGVQ
bHVnSW5TdHJlYW1Mb2FkZXJDbGllbnRFUktOU18xNVJlc291cmNlUmVxdWVzdEUKIF9fWk43V2Vi
Q29yZTIxUmVzb3VyY2VMb2FkU2NoZWR1bGVyMjdjcm9zc09yaWdpblJlZGlyZWN0UmVjZWl2ZWRF
UE5TXzE0UmVzb3VyY2VMb2FkZXJFUktOU180S1VSTEUKK19fWk43V2ViQ29yZTIxUmVzb3VyY2VM
b2FkU2NoZWR1bGVyMzJub3RpZnlEaWRTY2hlZHVsZVJlc291cmNlUmVxdWVzdEVQTlNfMTRSZXNv
dXJjZUxvYWRlckUKIF9fWk43V2ViQ29yZTIxUmVzb3VyY2VMb2FkU2NoZWR1bGVyNnJlbW92ZUVQ
TlNfMTRSZXNvdXJjZUxvYWRlckUKIF9fWk43V2ViQ29yZTIxUmVzb3VyY2VMb2FkU2NoZWR1bGVy
QzJFdgogX19aTjdXZWJDb3JlMjFSZXNvdXJjZUxvYWRTY2hlZHVsZXJEMkV2CkBAIC02NDEsNiAr
NjQ1LDcgQEAgX19aTjdXZWJDb3JlMjVJbW11dGFibGVTdHlsZVByb3BlcnR5U2V0RDFFdgogX19a
TjdXZWJDb3JlMjVhZGRMYW5ndWFnZUNoYW5nZU9ic2VydmVyRVB2UEZ2UzBfRQogX19aTjdXZWJD
b3JlMjVjb21wdXRlVmlld3BvcnRBdHRyaWJ1dGVzRU5TXzE3Vmlld3BvcnRBcmd1bWVudHNFaWlp
Zk5TXzdJbnRTaXplRQogX19aTjdXZWJDb3JlMjVqc1N0cmluZ1dpdGhDYWNoZVNsb3dDYXNlRVBO
M0pTQzlFeGVjU3RhdGVFUk4zV1RGN0hhc2hNYXBJUE5TM18xMFN0cmluZ0ltcGxFTlMwXzRXZWFr
SU5TMF84SlNTdHJpbmdFRUVOUzNfN1B0ckhhc2hJUzZfRUVOUzNfMTBIYXNoVHJhaXRzSVM2X0VF
TlNDX0lTOV9FRUVFUzZfCitfX1pON1dlYkNvcmUyNk5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVy
NmNyZWF0ZUVQTlNfNUZyYW1lRVBOU18zMk5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50
RVJLTlNfMTVSZXNvdXJjZVJlcXVlc3RFCiBfX1pON1dlYkNvcmUyNlVzZXJUeXBpbmdHZXN0dXJl
SW5kaWNhdG9yMjdwcm9jZXNzaW5nVXNlclR5cGluZ0dlc3R1cmVFdgogX19aTjdXZWJDb3JlMjZV
c2VyVHlwaW5nR2VzdHVyZUluZGljYXRvcjI4Zm9jdXNlZEVsZW1lbnRBdEdlc3R1cmVTdGFydEV2
CiBfX1pON1dlYkNvcmUyNnN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzRXYKQEAgLTEyMDYsNiAr
MTIxMSw3IEBAIF9fWk5LN1dlYkNvcmUxNERvY3VtZW50TG9hZGVyMTdwYXJzZWRBcmNoaXZlRGF0
YUV2CiBfX1pOSzdXZWJDb3JlMTREb2N1bWVudExvYWRlcjE3cmVwb3J0TWVtb3J5VXNhZ2VFUE4z
V1RGMTZNZW1vcnlPYmplY3RJbmZvRQogX19aTks3V2ViQ29yZTE0RG9jdW1lbnRMb2FkZXIxOWlz
TG9hZGluZ0luQVBJU2Vuc2VFdgogX19aTks3V2ViQ29yZTE0RG9jdW1lbnRMb2FkZXIxOW9yaWdp
bmFsUmVxdWVzdENvcHlFdgorX19aTks3V2ViQ29yZTE0RG9jdW1lbnRMb2FkZXIyMWFyY2hpdmVS
ZXNvdXJjZUZvclVSTEVSS05TXzRLVVJMRQogX19aTks3V2ViQ29yZTE0RG9jdW1lbnRMb2FkZXIy
MWlzTG9hZGluZ01haW5SZXNvdXJjZUV2CiBfX1pOSzdXZWJDb3JlMTREb2N1bWVudExvYWRlcjI4
dXJsRm9ySGlzdG9yeVJlZmxlY3RzRmFpbHVyZUV2CiBfX1pOSzdXZWJDb3JlMTREb2N1bWVudExv
YWRlcjN1cmxFdgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IDIwNjk1ZDQuLmE2Y2VkZWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMDI3LDcgKzIwMjcsNyBA
QAogCQk3RUU2ODQ2QzEyRDI2RTM4MDBFNzk0MTUgLyogUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3RUU2ODQ1OTEy
RDI2RTM4MDBFNzk0MTUgLyogUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAgKi87IH07CiAJCTdFRTY4
NDZEMTJEMjZFMzgwMEU3OTQxNSAvKiBSZXNvdXJjZVJlcXVlc3QuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdFRTY4NDVBMTJEMjZFMzgwMEU3OTQxNSAv
KiBSZXNvdXJjZVJlcXVlc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk3RUU2ODQ2RTEyRDI2RTM4MDBFNzk0MTUgLyogUmVzb3VyY2VSZXF1ZXN0
Q0ZOZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0VFNjg0NUIxMkQyNkUzODAwRTc5NDE1IC8qIFJlc291cmNlUmVxdWVzdENGTmV0LmNwcCAqLzsg
fTsKLQkJN0VFNjg0NkYxMkQyNkUzODAwRTc5NDE1IC8qIFJlc291cmNlUmVxdWVzdENGTmV0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3RUU2ODQ1QzEy
RDI2RTM4MDBFNzk0MTUgLyogUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuaCAqLzsgfTsKKwkJN0VFNjg0
NkYxMkQyNkUzODAwRTc5NDE1IC8qIFJlc291cmNlUmVxdWVzdENGTmV0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3RUU2ODQ1QzEyRDI2RTM4MDBFNzk0
MTUgLyogUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk3RUU2ODQ3MDEyRDI2RTM4MDBFNzk0MTUgLyogUmVzb3Vy
Y2VSZXNwb25zZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gN0VFNjg0NUQxMkQyNkUzODAwRTc5NDE1IC8qIFJlc291cmNlUmVzcG9uc2UuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3RUU2ODQ3MTEyRDI2
RTM4MDBFNzk0MTUgLyogUmVzb3VyY2VSZXNwb25zZUNGTmV0LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdFRTY4NDVFMTJEMjZFMzgwMEU3OTQxNSAv
KiBSZXNvdXJjZVJlc3BvbnNlQ0ZOZXQuY3BwICovOyB9OwogCQk3RUU2ODQ3NTEyRDI2RTcwMDBF
Nzk0MTUgLyogUmVzb3VyY2VMb2FkZXJDRk5ldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3RUU2ODQ3NDEyRDI2RTcwMDBFNzk0MTUgLyogUmVzb3Vy
Y2VMb2FkZXJDRk5ldC5jcHAgKi87IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNv
dXJjZUxvYWRTY2hlZHVsZXIuY3BwCmluZGV4IGRmMDM0NmYuLjgyZTlhMWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCkBAIC0xNDAsMTEg
KzE0MCwxOCBAQCB2b2lkIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVMb2FkKFJlc291
cmNlTG9hZGVyKiByZXNvdXJjZUxvYWRlciwgUmVzb3VyYwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgLy8gSGFuZGxlIGFzeW5jaHJvbm91c2x5IHNvIGVhcmx5IGxvdyBwcmlvcml0eSBy
ZXF1ZXN0cyBkb24ndCBnZXQgc2NoZWR1bGVkIGJlZm9yZSBsYXRlciBoaWdoIHByaW9yaXR5IG9u
ZXMuCi0gICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRTY2hlZHVsZVJlc291cmNlUmVx
dWVzdChyZXNvdXJjZUxvYWRlci0+ZnJhbWVMb2FkZXIoKSA/IHJlc291cmNlTG9hZGVyLT5mcmFt
ZUxvYWRlcigpLT5mcmFtZSgpLT5kb2N1bWVudCgpIDogMCwgcmVzb3VyY2VMb2FkZXItPnVybCgp
KTsKKyAgICBub3RpZnlEaWRTY2hlZHVsZVJlc291cmNlUmVxdWVzdChyZXNvdXJjZUxvYWRlcik7
CisKKyAgICAvLyBIYW5kbGUgYXN5bmNocm9ub3VzbHkgc28gZWFybHkgbG93IHByaW9yaXR5IHJl
cXVlc3RzIGRvbid0CisgICAgLy8gZ2V0IHNjaGVkdWxlZCBiZWZvcmUgbGF0ZXIgaGlnaCBwcmlv
cml0eSBvbmVzLgogICAgIHNjaGVkdWxlU2VydmVQZW5kaW5nUmVxdWVzdHMoKTsKIH0KIAordm9p
ZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Om5vdGlmeURpZFNjaGVkdWxlUmVzb3VyY2VSZXF1ZXN0
KFJlc291cmNlTG9hZGVyKiBsb2FkZXIpCit7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpkaWRTY2hlZHVsZVJlc291cmNlUmVxdWVzdChsb2FkZXItPmZyYW1lTG9hZGVyKCkgPyBsb2Fk
ZXItPmZyYW1lTG9hZGVyKCktPmZyYW1lKCktPmRvY3VtZW50KCkgOiAwLCBsb2FkZXItPnVybCgp
KTsKK30KKwogdm9pZCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlbW92ZShSZXNvdXJjZUxvYWRl
ciogcmVzb3VyY2VMb2FkZXIpCiB7CiAgICAgQVNTRVJUKHJlc291cmNlTG9hZGVyKTsKQEAgLTMw
Nyw0ICszMTQsMTAgQEAgYm9vbCBSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Okhvc3RJbmZvcm1hdGlv
bjo6bGltaXRSZXF1ZXN0cyhSZXNvdXJjZUxvYWRQcmlvcml0eQogICAgIHJldHVybiBtX3JlcXVl
c3RzTG9hZGluZy5zaXplKCkgPj0gKHJlc291cmNlTG9hZFNjaGVkdWxlcigpLT5pc1NlcmlhbExv
YWRpbmdFbmFibGVkKCkgPyAxIDogbV9tYXhSZXF1ZXN0c0luRmxpZ2h0KTsKIH0KIAordm9pZCBS
ZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnN0YXJ0UmVzb3VyY2VMb2FkZXIoUmVzb3VyY2VMb2FkZXIq
IGxvYWRlcikKK3sKKyAgICBBU1NFUlQobG9hZGVyKTsKKyAgICBsb2FkZXItPnN0YXJ0KCk7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNv
dXJjZUxvYWRTY2hlZHVsZXIuaAppbmRleCA1ZTVjNDljLi4yMGU1YWE3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFNjaGVkdWxlci5oCkBAIC01MCwyOSArNTAsMzMg
QEAgY2xhc3MgUmVzb3VyY2VMb2FkU2NoZWR1bGVyIHsKIHB1YmxpYzoKICAgICBmcmllbmQgUmVz
b3VyY2VMb2FkU2NoZWR1bGVyKiByZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsKIAotICAgIFBhc3NS
ZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IHNjaGVkdWxlU3VicmVzb3VyY2VMb2FkKEZyYW1lKiwg
Q2FjaGVkUmVzb3VyY2UqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBSZXNvdXJjZUxvYWRQcmlv
cml0eSwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJik7Ci0gICAgUGFzc1JlZlB0cjxOZXRz
Y2FwZVBsdWdJblN0cmVhbUxvYWRlcj4gc2NoZWR1bGVQbHVnaW5TdHJlYW1Mb2FkKEZyYW1lKiwg
TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
KTsKLSAgICB2b2lkIGFkZE1haW5SZXNvdXJjZUxvYWQoUmVzb3VyY2VMb2FkZXIqKTsKLSAgICB2
b2lkIHJlbW92ZShSZXNvdXJjZUxvYWRlciopOwotICAgIHZvaWQgY3Jvc3NPcmlnaW5SZWRpcmVj
dFJlY2VpdmVkKFJlc291cmNlTG9hZGVyKiwgY29uc3QgS1VSTCYgcmVkaXJlY3RVUkwpOworICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gc2NoZWR1bGVTdWJyZXNvdXJj
ZUxvYWQoRnJhbWUqLCBDYWNoZWRSZXNvdXJjZSosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFJl
c291cmNlTG9hZFByaW9yaXR5LCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmKTsKKyAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IHNjaGVkdWxlUGx1
Z2luU3RyZWFtTG9hZChGcmFtZSosIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyQ2xpZW50Kiwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgdmlydHVhbCB2b2lkIGFkZE1haW5SZXNvdXJj
ZUxvYWQoUmVzb3VyY2VMb2FkZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlKFJlc291cmNl
TG9hZGVyKik7CisgICAgdmlydHVhbCB2b2lkIGNyb3NzT3JpZ2luUmVkaXJlY3RSZWNlaXZlZChS
ZXNvdXJjZUxvYWRlciosIGNvbnN0IEtVUkwmIHJlZGlyZWN0VVJMKTsKICAgICAKLSAgICB2b2lk
IHNlcnZlUGVuZGluZ1JlcXVlc3RzKFJlc291cmNlTG9hZFByaW9yaXR5IG1pbmltdW1Qcmlvcml0
eSA9IFJlc291cmNlTG9hZFByaW9yaXR5VmVyeUxvdyk7Ci0gICAgYm9vbCBpc1N1c3BlbmRpbmdQ
ZW5kaW5nUmVxdWVzdHMoKSBjb25zdCB7IHJldHVybiAhIW1fc3VzcGVuZFBlbmRpbmdSZXF1ZXN0
c0NvdW50OyB9Ci0gICAgdm9pZCBzdXNwZW5kUGVuZGluZ1JlcXVlc3RzKCk7Ci0gICAgdm9pZCBy
ZXN1bWVQZW5kaW5nUmVxdWVzdHMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2VydmVQZW5kaW5nUmVx
dWVzdHMoUmVzb3VyY2VMb2FkUHJpb3JpdHkgbWluaW11bVByaW9yaXR5ID0gUmVzb3VyY2VMb2Fk
UHJpb3JpdHlWZXJ5TG93KTsKKyAgICB2aXJ0dWFsIHZvaWQgc3VzcGVuZFBlbmRpbmdSZXF1ZXN0
cygpOworICAgIHZpcnR1YWwgdm9pZCByZXN1bWVQZW5kaW5nUmVxdWVzdHMoKTsKICAgICAKICAg
ICBib29sIGlzU2VyaWFsTG9hZGluZ0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2lzU2VyaWFs
TG9hZGluZ0VuYWJsZWQ7IH0KLSAgICB2b2lkIHNldFNlcmlhbExvYWRpbmdFbmFibGVkKGJvb2wg
YikgeyBtX2lzU2VyaWFsTG9hZGluZ0VuYWJsZWQgPSBiOyB9CisgICAgdmlydHVhbCB2b2lkIHNl
dFNlcmlhbExvYWRpbmdFbmFibGVkKGJvb2wgYikgeyBtX2lzU2VyaWFsTG9hZGluZ0VuYWJsZWQg
PSBiOyB9CiAKIHByb3RlY3RlZDoKICAgICBSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsKICAgICB2
aXJ0dWFsIH5SZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsKIAorICAgIHZvaWQgc3RhcnRSZXNvdXJj
ZUxvYWRlcihSZXNvdXJjZUxvYWRlciopOworICAgIHZvaWQgbm90aWZ5RGlkU2NoZWR1bGVSZXNv
dXJjZVJlcXVlc3QoUmVzb3VyY2VMb2FkZXIqKTsKKwogcHJpdmF0ZToKICAgICB2b2lkIHNjaGVk
dWxlTG9hZChSZXNvdXJjZUxvYWRlciosIFJlc291cmNlTG9hZFByaW9yaXR5KTsKICAgICB2b2lk
IHNjaGVkdWxlU2VydmVQZW5kaW5nUmVxdWVzdHMoKTsKICAgICB2b2lkIHJlcXVlc3RUaW1lckZp
cmVkKFRpbWVyPFJlc291cmNlTG9hZFNjaGVkdWxlcj4qKTsKIAorICAgIGJvb2wgaXNTdXNwZW5k
aW5nUGVuZGluZ1JlcXVlc3RzKCkgY29uc3QgeyByZXR1cm4gISFtX3N1c3BlbmRQZW5kaW5nUmVx
dWVzdHNDb3VudDsgfQorCiAgICAgY2xhc3MgSG9zdEluZm9ybWF0aW9uIHsKICAgICAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoSG9zdEluZm9ybWF0aW9uKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiAgICAgcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291
cmNlTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5jcHAK
aW5kZXggYjEyYjQ0My4uMTU2YjYzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVy
L1Jlc291cmNlTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VM
b2FkZXIuY3BwCkBAIC01NTgsNCArNTU4LDE0IEBAIHZvaWQgUmVzb3VyY2VMb2FkZXI6OnJlcG9y
dE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0CiAg
ICAgaW5mby5hZGRNZW1iZXIobV9vcHRpb25zKTsKIH0KIAorI2lmIFBMQVRGT1JNKE1BQykKK3Zv
aWQgUmVzb3VyY2VMb2FkZXI6OnNldElkZW50aWZpZXIodW5zaWduZWQgbG9uZyBpZGVudGlmaWVy
KQoreworICAgIC8vIEZJWE1FOiBUaGlzIGlzIHRlbXBvcmFyeSB0byBhbGxvdyBXZWJLaXQgdG8g
ZGlyZWN0bHkgc2V0IHRoZSBpZGVudGlmaWVyIG9uIGEgUmVzb3VyY2VMb2FkZXIuCisgICAgLy8g
TW9yZSBwZXJtYW5lbnRseSB3ZSB3YW50IHRoZSBpZGVudGlmaWVyIHRvIGJlIHBpcGVkIHRocm91
Z2ggUmVzb3VyY2VMb2FkZXI6OmluaXQvc3RhcnQgc28KKyAgICAvLyBpdCBhbHdheXMgaGFzIGl0
LCBlc3BlY2lhbGx5IGluIHdpbGxTZW5kUmVxdWVzdC4KKyAgICBtX2lkZW50aWZpZXIgPSBpZGVu
dGlmaWVyOworfQorI2VuZGlmCisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9SZXNvdXJjZUxvYWRlci5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVy
LmgKaW5kZXggZWE4MzEyMS4uYzUwODdhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL1Jlc291cmNlTG9hZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNl
TG9hZGVyLmgKQEAgLTY2LDcgKzY2LDcgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgdm9p
ZCBzZXREZWZlcnNMb2FkaW5nKGJvb2wpOwogCi0gICAgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVy
KCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CisgICAgdWludDY0X3QgaWRlbnRpZmll
cigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQogCiAgICAgdmlydHVhbCB2b2lkIHJl
bGVhc2VSZXNvdXJjZXMoKTsKICAgICBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSgp
IGNvbnN0OwpAQCAtMTQzLDIyICsxNDMsMjkgQEAgcHVibGljOgogCiAgICAgYm9vbCByZWFjaGVk
VGVybWluYWxTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVhY2hlZFRlcm1pbmFsU3RhdGU7IH0K
IAorICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVxdWVzdDsgfQorCiAgICAgdm9pZCBzZXRTaG91bGRCdWZmZXJEYXRhKERhdGFCdWZmZXJpbmdQ
b2xpY3kpOwogCiAgICAgdmlydHVhbCB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVj
dEluZm8qKSBjb25zdDsKIAorI2lmIFBMQVRGT1JNKE1BQykKKyAgICAvLyBGSVhNRTogVGhpcyBp
cyB0ZW1wb3JhcnkgdG8gYWxsb3cgV2ViS2l0IHRvIGRpcmVjdGx5IHNldCB0aGUgaWRlbnRpZmll
ciBvbiBhIFJlc291cmNlTG9hZGVyLgorICAgIC8vIE1vcmUgcGVybWFuZW50bHkgd2Ugd2FudCB0
aGUgaWRlbnRpZmllciB0byBiZSBwaXBlZCB0aHJvdWdoIFJlc291cmNlTG9hZGVyOjppbml0L3N0
YXJ0IHNvCisgICAgLy8gaXQgYWx3YXlzIGhhcyBpdCwgZXNwZWNpYWxseSBpbiB3aWxsU2VuZFJl
cXVlc3QuCisgICAgdm9pZCBzZXRJZGVudGlmaWVyKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcik7
CisjZW5kaWYKKwogcHJvdGVjdGVkOgogICAgIFJlc291cmNlTG9hZGVyKEZyYW1lKiwgUmVzb3Vy
Y2VMb2FkZXJPcHRpb25zKTsKIAotICAgIGZyaWVuZCBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlSG9z
dDsgIC8vIGZvciBhY2Nlc3MgdG8gcmVxdWVzdCgpCiAgICAgZnJpZW5kIGNsYXNzIFJlc291cmNl
TG9hZFNjaGVkdWxlcjsgLy8gZm9yIGFjY2VzcyB0byBzdGFydCgpCi0gICAgLy8gc3RhcnQoKSBh
Y3R1YWxseSBzZW5kcyB0aGUgbG9hZCB0byB0aGUgbmV0d29yayAodW5sZXNzIHRoZSBsb2FkIGlz
IGJlaW5nIAorICAgIC8vIHN0YXJ0KCkgYWN0dWFsbHkgc2VuZHMgdGhlIGxvYWQgdG8gdGhlIG5l
dHdvcmsgKHVubGVzcyB0aGUgbG9hZCBpcyBiZWluZwogICAgIC8vIGRlZmVycmVkKSBhbmQgc2hv
dWxkIG9ubHkgYmUgY2FsbGVkIGJ5IFJlc291cmNlTG9hZFNjaGVkdWxlciBvciBzZXREZWZlcnNM
b2FkaW5nKCkuCiAgICAgdm9pZCBzdGFydCgpOwotICAgIAorCiAgICAgdm9pZCBkaWRGaW5pc2hM
b2FkaW5nT25lUGFydChkb3VibGUgZmluaXNoVGltZSk7CiAKLSAgICBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QoKSBjb25zdCB7IHJldHVybiBtX3JlcXVlc3Q7IH0KICAgICBib29sIGNh
bmNlbGxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FuY2VsbGVkOyB9CiAgICAgYm9vbCBkZWZlcnNM
b2FkaW5nKCkgY29uc3QgeyByZXR1cm4gbV9kZWZlcnNMb2FkaW5nOyB9CiAKQEAgLTE3NSw3ICsx
ODIsNyBAQCBwcml2YXRlOgogICAgIFJlc291cmNlUmVxdWVzdCBtX29yaWdpbmFsUmVxdWVzdDsg
Ly8gQmVmb3JlIHJlZGlyZWN0cy4KICAgICBSZWZQdHI8UmVzb3VyY2VCdWZmZXI+IG1fcmVzb3Vy
Y2VEYXRhOwogICAgIAotICAgIHVuc2lnbmVkIGxvbmcgbV9pZGVudGlmaWVyOworICAgIHVpbnQ2
NF90IG1faWRlbnRpZmllcjsKIAogICAgIGJvb2wgbV9yZWFjaGVkVGVybWluYWxTdGF0ZTsKICAg
ICBib29sIG1fY2FsbGVkV2lsbENhbmNlbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0Rl
cml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9EZXJpdmVkU291cmNlcy5tYWtlCmlu
ZGV4IDM1OTc2OTYuLmFmNjVlY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0Rlcml2ZWRT
b3VyY2VzLm1ha2UKKysrIGIvU291cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAt
MzYsNiArMzYsNyBAQCBWUEFUSCA9IFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvSWNvbkRh
dGFiYXNlIFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvS2V5VmFsdWVTdG9yYWdlIFwKICAg
ICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvTWVkaWFDYWNoZSBcCisgICAgJChXZWJLaXQyKS9XZWJQ
cm9jZXNzL05ldHdvcmsgXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9Ob3RpZmljYXRpb25z
IFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvUGx1Z2lucyBcCiAgICAgJChXZWJLaXQyKS9X
ZWJQcm9jZXNzL1Jlc291cmNlQ2FjaGUgXApAQCAtNTcsNiArNTgsNyBAQCBNRVNTQUdFX1JFQ0VJ
VkVSUyA9IFwKICAgICBEb3dubG9hZFByb3h5IFwKICAgICBFdmVudERpc3BhdGNoZXIgXAogICAg
IE5ldHdvcmtQcm9jZXNzIFwKKyAgICBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24gXAogICAgIE5l
dHdvcmtQcm9jZXNzUHJveHkgXAogICAgIE5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyIFwKICAgICBQ
bHVnaW5Db250cm9sbGVyUHJveHkgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvSG9zdFJlY29yZC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9I
b3N0UmVjb3JkLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWI0YTY5
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0hvc3RS
ZWNvcmQuY3BwCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkhvc3RSZWNvcmQuaCIKKworI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNp
bmNsdWRlICJOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgIk5ldHdv
cmtQcm9jZXNzLmgiCisjaW5jbHVkZSAiTmV0d29ya1JlcXVlc3QuaCIKKyNpbmNsdWRlICJOZXR3
b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworSG9zdFJlY29yZDo6SG9zdFJlY29yZChjb25zdCBTdHJp
bmcmIG5hbWUsIGludCBtYXhSZXF1ZXN0c0luRmxpZ2h0KQorICAgIDogbV9uYW1lKG5hbWUpCisg
ICAgLCBtX21heFJlcXVlc3RzSW5GbGlnaHQobWF4UmVxdWVzdHNJbkZsaWdodCkKK3sKK30KKwor
SG9zdFJlY29yZDo6fkhvc3RSZWNvcmQoKQoreworI2lmbmRlZiBOREVCVUcKKyAgICBBU1NFUlQo
bV9yZXF1ZXN0c0xvYWRpbmcuaXNFbXB0eSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIHAgPSAwOyBw
IDw9IFJlc291cmNlTG9hZFByaW9yaXR5SGlnaGVzdDsgcCsrKQorICAgICAgICBBU1NFUlQobV9y
ZXF1ZXN0c1BlbmRpbmdbcF0uaXNFbXB0eSgpKTsKKyNlbmRpZgorfQorCit2b2lkIEhvc3RSZWNv
cmQ6OnNjaGVkdWxlKFBhc3NSZWZQdHI8TmV0d29ya1JlcXVlc3Q+IHJlY29yZCwgIFJlc291cmNl
TG9hZFByaW9yaXR5IHByaW9yaXR5KQoreworICAgIG1fcmVxdWVzdHNQZW5kaW5nW3ByaW9yaXR5
XS5hcHBlbmQocmVjb3JkKTsKK30KKwordm9pZCBIb3N0UmVjb3JkOjphZGRMb2FkSW5Qcm9ncmVz
cyhSZXNvdXJjZUxvYWRJZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgbV9yZXF1ZXN0c0xv
YWRpbmcuYWRkKGlkZW50aWZpZXIpOworfQorCit2b2lkIEhvc3RSZWNvcmQ6OnJlbW92ZShSZXNv
dXJjZUxvYWRJZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgaWYgKG1fcmVxdWVzdHNMb2Fk
aW5nLmNvbnRhaW5zKGlkZW50aWZpZXIpKSB7CisgICAgICAgIG1fcmVxdWVzdHNMb2FkaW5nLnJl
bW92ZShpZGVudGlmaWVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBmb3Ig
KGludCBwcmlvcml0eSA9IFJlc291cmNlTG9hZFByaW9yaXR5SGlnaGVzdDsgcHJpb3JpdHkgPj0g
UmVzb3VyY2VMb2FkUHJpb3JpdHlMb3dlc3Q7IC0tcHJpb3JpdHkpIHsgIAorICAgICAgICBSZXF1
ZXN0UXVldWU6Oml0ZXJhdG9yIGVuZCA9IG1fcmVxdWVzdHNQZW5kaW5nW3ByaW9yaXR5XS5lbmQo
KTsKKyAgICAgICAgZm9yIChSZXF1ZXN0UXVldWU6Oml0ZXJhdG9yIGl0ID0gbV9yZXF1ZXN0c1Bl
bmRpbmdbcHJpb3JpdHldLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAg
aWYgKGl0LT5nZXQoKS0+aWRlbnRpZmllcigpID09IGlkZW50aWZpZXIpIHsKKyAgICAgICAgICAg
ICAgICBtX3JlcXVlc3RzUGVuZGluZ1twcmlvcml0eV0ucmVtb3ZlKGl0KTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wg
SG9zdFJlY29yZDo6aGFzUmVxdWVzdHMoKSBjb25zdAoreworICAgIGlmICghbV9yZXF1ZXN0c0xv
YWRpbmcuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGZvciAodW5zaWdu
ZWQgcCA9IDA7IHAgPD0gUmVzb3VyY2VMb2FkUHJpb3JpdHlIaWdoZXN0OyBwKyspIHsKKyAgICAg
ICAgaWYgKCFtX3JlcXVlc3RzUGVuZGluZ1twXS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSG9zdFJlY29y
ZDo6bGltaXRSZXF1ZXN0cyhSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSwgYm9vbCBzZXJp
YWxMb2FkaW5nRW5hYmxlZCkgY29uc3QKK3sKKyAgICBpZiAocHJpb3JpdHkgPT0gUmVzb3VyY2VM
b2FkUHJpb3JpdHlWZXJ5TG93ICYmICFtX3JlcXVlc3RzTG9hZGluZy5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIG1fcmVxdWVzdHNMb2FkaW5nLnNpemUoKSA+
PSAoc2VyaWFsTG9hZGluZ0VuYWJsZWQgPyAxIDogbV9tYXhSZXF1ZXN0c0luRmxpZ2h0KTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9Ib3N0UmVjb3JkLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9I
b3N0UmVjb3JkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE4YjA1NAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0hvc3RSZWNv
cmQuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBIb3N0UmVjb3JkX2gK
KyNkZWZpbmUgSG9zdFJlY29yZF9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVz
dC5oPgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitj
bGFzcyBOZXR3b3JrUmVxdWVzdDsKK3R5cGVkZWYgdWludDY0X3QgUmVzb3VyY2VMb2FkSWRlbnRp
ZmllcjsKKworY2xhc3MgSG9zdFJlY29yZCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSG9z
dFJlY29yZCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEhvc3RSZWNv
cmQoY29uc3QgU3RyaW5nJiBuYW1lLCBpbnQgbWF4UmVxdWVzdHNJbkZsaWdodCk7CisgICAgfkhv
c3RSZWNvcmQoKTsKKyAgICAKKyAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVy
biBtX25hbWU7IH0KKyAgICB2b2lkIHNjaGVkdWxlKFBhc3NSZWZQdHI8TmV0d29ya1JlcXVlc3Q+
LCAgV2ViQ29yZTo6UmVzb3VyY2VMb2FkUHJpb3JpdHkgPSBXZWJDb3JlOjpSZXNvdXJjZUxvYWRQ
cmlvcml0eVZlcnlMb3cpOworICAgIHZvaWQgYWRkTG9hZEluUHJvZ3Jlc3MoUmVzb3VyY2VMb2Fk
SWRlbnRpZmllcik7CisgICAgdm9pZCByZW1vdmUoUmVzb3VyY2VMb2FkSWRlbnRpZmllcik7Cisg
ICAgYm9vbCBoYXNSZXF1ZXN0cygpIGNvbnN0OworICAgIGJvb2wgbGltaXRSZXF1ZXN0cyhXZWJD
b3JlOjpSZXNvdXJjZUxvYWRQcmlvcml0eSwgYm9vbCBzZXJpYWxMb2FkaW5nRW5hYmxlZCkgY29u
c3Q7CisKKyAgICB0eXBlZGVmIERlcXVlPFJlZlB0cjxOZXR3b3JrUmVxdWVzdD4gPiBSZXF1ZXN0
UXVldWU7CisgICAgUmVxdWVzdFF1ZXVlJiByZXF1ZXN0c1BlbmRpbmcoV2ViQ29yZTo6UmVzb3Vy
Y2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkpIHsgcmV0dXJuIG1fcmVxdWVzdHNQZW5kaW5nW3ByaW9y
aXR5XTsgfQorCitwcml2YXRlOiAgICAgICAgICAgICAgICAgICAgCisgICAgUmVxdWVzdFF1ZXVl
IG1fcmVxdWVzdHNQZW5kaW5nW1dlYkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5SGlnaGVzdCAr
IDFdOworICAgIHR5cGVkZWYgSGFzaFNldDxSZXNvdXJjZUxvYWRJZGVudGlmaWVyPiBSZXF1ZXN0
SWRlbnRpZmllck1hcDsKKyAgICBSZXF1ZXN0SWRlbnRpZmllck1hcCBtX3JlcXVlc3RzTG9hZGlu
ZzsKKworICAgIGNvbnN0IFN0cmluZyBtX25hbWU7CisgICAgaW50IG1fbWF4UmVxdWVzdHNJbkZs
aWdodDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gI2lmbmRlZiBI
b3N0UmVjb3JkX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05l
dHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAppbmRleCAxZmRjZTE4Li40
OGE3MjMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCkBAIC0yOCw2ICsyOCw3IEBA
CiAKICNpbmNsdWRlICJDb25uZWN0aW9uU3RhY2suaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vz
cy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9SdW5Mb29wLmg+CiAKICNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQpAQCAtNDIsNiAr
NDMsNyBAQCBQYXNzUmVmUHRyPE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBOZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Y3JlYXRlKAogfQogCiBOZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoQ29yZUlQQzo6Q29ubmVj
dGlvbjo6SWRlbnRpZmllciBjb25uZWN0aW9uSWRlbnRpZmllcikKKyAgICA6IG1fc2VyaWFsTG9h
ZGluZ0VuYWJsZWQoZmFsc2UpCiB7CiAgICAgbV9jb25uZWN0aW9uID0gQ29yZUlQQzo6Q29ubmVj
dGlvbjo6Y3JlYXRlU2VydmVyQ29ubmVjdGlvbihjb25uZWN0aW9uSWRlbnRpZmllciwgdGhpcywg
UnVuTG9vcDo6bWFpbigpKTsKICAgICBtX2Nvbm5lY3Rpb24tPnNldE9ubHlTZW5kTWVzc2FnZXNB
c0Rpc3BhdGNoV2hlbldhaXRpbmdGb3JTeW5jUmVwbHlXaGVuUHJvY2Vzc2luZ1N1Y2hBTWVzc2Fn
ZSh0cnVlKTsKQEAgLTUxLDIyICs1MywzNiBAQCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoQ29yZUlQQzo6Q29ubmVjdGlvbgogTmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6On5OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cygpCiB7CiAgICAgQVNTRVJUKCFtX2Nvbm5lY3Rpb24pOworICAgIEFTU0VSVChtX29ic2VydmVy
cy5pc0VtcHR5KCkpOwogfQogCi12b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpk
aWRSZWNlaXZlTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBDb3JlSVBD
OjpNZXNzYWdlSUQgbWVzc2FnZUlELCBDb3JlSVBDOjpNZXNzYWdlRGVjb2RlciYgZGVjb2RlcikK
K3ZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlZ2lzdGVyT2JzZXJ2ZXIoTmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NPYnNlcnZlciogb2JzZXJ2ZXIpCiB7Ci0gICAgQ29u
bmVjdGlvblN0YWNrOjpDdXJyZW50Q29ubmVjdGlvblB1c2hlciBjdXJyZW50Q29ubmVjdGlvbihD
b25uZWN0aW9uU3RhY2s6OnNoYXJlZCgpLCBjb25uZWN0aW9uKTsKKyAgICBBU1NFUlQoIW1fb2Jz
ZXJ2ZXJzLmNvbnRhaW5zKG9ic2VydmVyKSk7CisgICAgbV9vYnNlcnZlcnMuYWRkKG9ic2VydmVy
KTsKK30KIAordm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6dW5yZWdpc3Rlck9i
c2VydmVyKE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzT2JzZXJ2ZXIqIG9ic2VydmVyKQor
eworICAgIEFTU0VSVChtX29ic2VydmVycy5jb250YWlucyhvYnNlcnZlcikpOworICAgIG1fb2Jz
ZXJ2ZXJzLnJlbW92ZShvYnNlcnZlcik7Cit9CisgICAgCit2b2lkIE5ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiBjb25u
ZWN0aW9uLCBDb3JlSVBDOjpNZXNzYWdlSUQgbWVzc2FnZUlELCBDb3JlSVBDOjpNZXNzYWdlRGVj
b2RlciYgZGVjb2RlcikKK3sKICAgICBpZiAobWVzc2FnZUlELmlzPENvcmVJUEM6Ok1lc3NhZ2VD
bGFzc05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzPigpKSB7CiAgICAgICAgIGRpZFJlY2Vp
dmVOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2UoY29ubmVjdGlvbiwgbWVzc2Fn
ZUlELCBkZWNvZGVyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQogICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogfQogCi12b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRS
ZWNlaXZlU3luY01lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29yZUlQ
Qzo6TWVzc2FnZUlEIG1lc3NhZ2VJRCwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImIGFyZ3VtZW50
cywgT3duUHRyPENvcmVJUEM6Ok1lc3NhZ2VFbmNvZGVyPiYgcmVwbHkpCit2b2lkIE5ldHdvcmtD
b25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlU3luY01lc3NhZ2UoQ29yZUlQQzo6Q29u
bmVjdGlvbiogY29ubmVjdGlvbiwgQ29yZUlQQzo6TWVzc2FnZUlEIG1lc3NhZ2VJRCwgQ29yZUlQ
Qzo6TWVzc2FnZURlY29kZXImIGRlY29kZXIsIE93blB0cjxDb3JlSVBDOjpNZXNzYWdlRW5jb2Rl
cj4mIHJlcGx5KQogeworICAgIGlmIChtZXNzYWdlSUQuaXM8Q29yZUlQQzo6TWVzc2FnZUNsYXNz
TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+KCkpIHsKKyAgICAgICAgZGlkUmVjZWl2ZVN5
bmNOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2UoY29ubmVjdGlvbiwgbWVzc2Fn
ZUlELCBkZWNvZGVyLCByZXBseSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiB9CiAKQEAgLTc3LDYgKzkzLDEzIEBAIHZvaWQgTmV0d29ya0Nvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3M6OmRpZENsb3NlKENvcmVJUEM6OkNvbm5lY3Rpb24qKQogICAgIAog
ICAgIE5ldHdvcmtQcm9jZXNzOjpzaGFyZWQoKS5yZW1vdmVOZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcyh0aGlzKTsKICAgICAKKyAgICBWZWN0b3I8TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3NPYnNlcnZlcio+IG9ic2VydmVyczsKKyAgICBjb3B5VG9WZWN0b3IobV9vYnNlcnZlcnMs
IG9ic2VydmVycyk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYnNlcnZlcnMuc2l6ZSgp
OyArK2kpCisgICAgICAgIG9ic2VydmVyc1tpXS0+Y29ubmVjdGlvblRvV2ViUHJvY2Vzc0RpZENs
b3NlKHRoaXMpOworICAgIAorICAgIC8vIEZJWE1FOiBDbGVhciBvdXQgYWxsIHBlbmRpbmcgcmVx
dWVzdHMgZm9yIHRoaXMgY29ubmVjdGlvbiBpbiB0aGUgbG9hZHNjaGVkdWxlcgorICAgIAogICAg
IG1fY29ubmVjdGlvbiA9IDA7CiB9CiAKQEAgLTg0LDkgKzEwNyw0NCBAQCB2b2lkIE5ldHdvcmtD
b25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoQ29yZUlQQzo6
Q29ubmVjdGlvbgogewogfQogCi12b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpk
aWRSZWNlaXZlTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlKENvcmVJUEM6OkNv
bm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6Ok1lc3NhZ2VEZWNvZGVyJikK
K3ZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnNjaGVkdWxlTmV0d29ya1JlcXVl
c3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCB1aW50MzJfdCByZXNvdXJjZUxvYWRQ
cmlvcml0eSwgUmVzb3VyY2VMb2FkSWRlbnRpZmllciYgcmVzb3VyY2VMb2FkSWRlbnRpZmllcikK
K3sKKyAgICByZXNvdXJjZUxvYWRJZGVudGlmaWVyID0gTmV0d29ya1Byb2Nlc3M6OnNoYXJlZCgp
Lm5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS5zY2hlZHVsZU5ldHdvcmtSZXF1ZXN0KHJl
cXVlc3QsIHN0YXRpY19jYXN0PFJlc291cmNlTG9hZFByaW9yaXR5PihyZXNvdXJjZUxvYWRQcmlv
cml0eSksIHRoaXMpOworfQorCit2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjph
ZGRMb2FkSW5Qcm9ncmVzcyhjb25zdCBXZWJDb3JlOjpLVVJMJiB1cmwsIFJlc291cmNlTG9hZElk
ZW50aWZpZXImIGlkZW50aWZpZXIpCit7CisgICAgaWRlbnRpZmllciA9IE5ldHdvcmtQcm9jZXNz
OjpzaGFyZWQoKS5uZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkuYWRkTG9hZEluUHJvZ3Jl
c3ModXJsKTsKK30KKwordm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6cmVtb3Zl
TG9hZElkZW50aWZpZXIoUmVzb3VyY2VMb2FkSWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAg
IE5ldHdvcmtQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCku
cmVtb3ZlTG9hZElkZW50aWZpZXIoaWRlbnRpZmllcik7Cit9CisKK3ZvaWQgTmV0d29ya0Nvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3M6OmNyb3NzT3JpZ2luUmVkaXJlY3RSZWNlaXZlZChSZXNvdXJjZUxv
YWRJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IEtVUkwmIHJlZGlyZWN0VVJMKQoreworICAg
IE5ldHdvcmtQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCku
Y3Jvc3NPcmlnaW5SZWRpcmVjdFJlY2VpdmVkKGlkZW50aWZpZXIsIHJlZGlyZWN0VVJMKTsKK30K
Kwordm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6c2VydmVQZW5kaW5nUmVxdWVz
dHModWludDMyX3QgcmVzb3VyY2VMb2FkUHJpb3JpdHkpCit7CisgICAgTmV0d29ya1Byb2Nlc3M6
OnNoYXJlZCgpLm5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS5zZXJ2ZVBlbmRpbmdSZXF1
ZXN0cyhzdGF0aWNfY2FzdDxSZXNvdXJjZUxvYWRQcmlvcml0eT4ocmVzb3VyY2VMb2FkUHJpb3Jp
dHkpKTsKK30KKwordm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6c3VzcGVuZFBl
bmRpbmdSZXF1ZXN0cygpCit7CisgICAgTmV0d29ya1Byb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtS
ZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS5zdXNwZW5kUGVuZGluZ1JlcXVlc3RzKCk7Cit9CisKK3Zv
aWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlc3VtZVBlbmRpbmdSZXF1ZXN0cygp
Cit7CisgICAgTmV0d29ya1Byb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtSZXNvdXJjZUxvYWRTY2hl
ZHVsZXIoKS5yZXN1bWVQZW5kaW5nUmVxdWVzdHMoKTsKK30KKwordm9pZCBOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6c2V0U2VyaWFsTG9hZGluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQog
ewotICAgIC8vIEVtcHR5IGZvciBub3cgLSBUaGVyZSBhcmUgbm8gbWVzc2FnZXMgdG8gaGFuZGxl
LgorICAgIG1fc2VyaWFsTG9hZGluZ0VuYWJsZWQgPSBlbmFibGVkOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05l
dHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCmluZGV4IDYzNTEzNjAuLmZhMDU0
ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaApAQCAtMzAsMTcgKzMwLDM2IEBACiAKICNp
bmNsdWRlICJDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3NNZXNzYWdlcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkUHJpb3JpdHku
aD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CiAKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFJlc291cmNlUmVxdWVzdDsKK30KKwogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKK2NsYXNzIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOwor
dHlwZWRlZiB1aW50NjRfdCBSZXNvdXJjZUxvYWRJZGVudGlmaWVyOworCitjbGFzcyBOZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzc09ic2VydmVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5O
ZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzc09ic2VydmVyKCkgeyB9CisgICAgdmlydHVhbCB2
b2lkIGNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NEaWRDbG9zZShOZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2VzcyopID0gMDsKK307CisKIGNsYXNzIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
IDogcHVibGljIFJlZkNvdW50ZWQ8TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+LCBDb3Jl
SVBDOjpDb25uZWN0aW9uOjpDbGllbnQgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRy
PE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBjcmVhdGUoQ29yZUlQQzo6Q29ubmVjdGlv
bjo6SWRlbnRpZmllcik7CiAgICAgdmlydHVhbCB+TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MoKTsKIAogICAgIENvcmVJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24oKSBjb25zdCB7IHJl
dHVybiBtX2Nvbm5lY3Rpb24uZ2V0KCk7IH0KKyAgICAKKyAgICB2b2lkIHJlZ2lzdGVyT2JzZXJ2
ZXIoTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NPYnNlcnZlciopOworICAgIHZvaWQgdW5y
ZWdpc3Rlck9ic2VydmVyKE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzT2JzZXJ2ZXIqKTsK
KworICAgIGJvb2wgaXNTZXJpYWxMb2FkaW5nRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vy
aWFsTG9hZGluZ0VuYWJsZWQ7IH0KIAogcHJpdmF0ZToKICAgICBOZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2VzcyhDb3JlSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyKTsKQEAgLTUzLDggKzcy
LDIyIEBAIHByaXZhdGU6CiAKICAgICAvLyBNZXNzYWdlIGhhbmRsZXJzLgogICAgIHZvaWQgZGlk
UmVjZWl2ZU5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZShDb3JlSVBDOjpDb25u
ZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpNZXNzYWdlRGVjb2RlciYpOwot
CisgICAgdm9pZCBkaWRSZWNlaXZlU3luY05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVz
c2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpN
ZXNzYWdlRGVjb2RlciYsIE93blB0cjxDb3JlSVBDOjpNZXNzYWdlRW5jb2Rlcj4mKTsKKyAgICAK
KyAgICB2b2lkIHNjaGVkdWxlTmV0d29ya1JlcXVlc3QoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JiwgdWludDMyX3QgcmVzb3VyY2VMb2FkUHJpb3JpdHksIFJlc291cmNlTG9hZElkZW50
aWZpZXImIHJlc291cmNlTG9hZElkZW50aWZpZXIpOworICAgIHZvaWQgYWRkTG9hZEluUHJvZ3Jl
c3MoY29uc3QgV2ViQ29yZTo6S1VSTCYsIFJlc291cmNlTG9hZElkZW50aWZpZXImKTsKKyAgICB2
b2lkIHJlbW92ZUxvYWRJZGVudGlmaWVyKFJlc291cmNlTG9hZElkZW50aWZpZXIpOworICAgIHZv
aWQgY3Jvc3NPcmlnaW5SZWRpcmVjdFJlY2VpdmVkKFJlc291cmNlTG9hZElkZW50aWZpZXIsIGNv
bnN0IFdlYkNvcmU6OktVUkwmIHJlZGlyZWN0VVJMKTsKKyAgICB2b2lkIHNlcnZlUGVuZGluZ1Jl
cXVlc3RzKHVpbnQzMl90IHJlc291cmNlTG9hZFByaW9yaXR5KTsKKyAgICB2b2lkIHN1c3BlbmRQ
ZW5kaW5nUmVxdWVzdHMoKTsKKyAgICB2b2lkIHJlc3VtZVBlbmRpbmdSZXF1ZXN0cygpOworICAg
IHZvaWQgc2V0U2VyaWFsTG9hZGluZ0VuYWJsZWQoYm9vbCk7CisgICAgCiAgICAgUmVmUHRyPENv
cmVJUEM6OkNvbm5lY3Rpb24+IG1fY29ubmVjdGlvbjsKKyAgICAKKyAgICBIYXNoU2V0PE5ldHdv
cmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzT2JzZXJ2ZXIqPiBtX29ic2VydmVyczsKKyAgICAKKyAg
ICBib29sIG1fc2VyaWFsTG9hZGluZ0VuYWJsZWQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KaW5kZXggYTEw
NDdjOC4uNTZiZDM0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2Fn
ZXMuaW4KQEAgLTI0LDYgKzI0LDIwIEBACiAKIG1lc3NhZ2VzIC0+IE5ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzIHsKIAorICAgIFNjaGVkdWxlTmV0d29ya1JlcXVlc3QoV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0IHJlcXVlc3QsIHVpbnQzMl90IHJlc291cmNlTG9hZFByaW9yaXR5KSAtPiAo
dWludDY0X3QgcmVzb3VyY2VMb2FkSWRlbnRpZmllcikKKyAgICBBZGRMb2FkSW5Qcm9ncmVzcyhX
ZWJDb3JlOjpLVVJMIHVybCkgLT4gKHVpbnQ2NF90IHJlc291cmNlTG9hZElkZW50aWZpZXIpCisg
ICAgUmVtb3ZlTG9hZElkZW50aWZpZXIodWludDY0X3QgcmVzb3VyY2VMb2FkSWRlbnRpZmllcikK
KworICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB3ZSB3aWxsIGJlIGFibGUgdG8gZG8gYXdheSB3
aXRoIHRoaXMgbWVzc2FnZSBhbmQgaGF2ZSB0aGUgTmV0d29ya1Byb2Nlc3MKKyAgICAvLyBtYW5h
Z2UgaXQgaW50ZXJuYWxseS4KKyAgICBjcm9zc09yaWdpblJlZGlyZWN0UmVjZWl2ZWQodWludDY0
X3QgcmVzb3VyY2VMb2FkSWRlbnRpZmllciwgV2ViQ29yZTo6S1VSTCByZWRpcmVjdFVSTCkgLT4g
KCkKKyAgICAKKyAgICBTZXJ2ZVBlbmRpbmdSZXF1ZXN0cyh1aW50MzJfdCByZXNvdXJjZUxvYWRQ
cmlvcml0eSkKKworICAgIFN1c3BlbmRQZW5kaW5nUmVxdWVzdHMoKSAtPiAoKQorICAgIFJlc3Vt
ZVBlbmRpbmdSZXF1ZXN0cygpIC0+ICgpCisgICAgCisgICAgU2V0U2VyaWFsTG9hZGluZ0VuYWJs
ZWQoYm9vbCBlbmFibGVkKSAtPiAoKQogfQogCiAjZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfUFJP
Q0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5o
CmluZGV4IDU4MjhlMWYuLjAwMGVmYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3MuaApAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShORVRX
T1JLX1BST0NFU1MpCiAKICNpbmNsdWRlICJDaGlsZFByb2Nlc3MuaCIKKyNpbmNsdWRlICJOZXR3
b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDksNiArNTAsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IHJlbW92ZU5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKE5ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzKik7CiAKKyAgICBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyJiBuZXR3b3Jr
UmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkgeyByZXR1cm4gbV9uZXR3b3JrUmVzb3VyY2VMb2FkU2No
ZWR1bGVyOyB9CisKIHByaXZhdGU6CiAgICAgTmV0d29ya1Byb2Nlc3MoKTsKICAgICB+TmV0d29y
a1Byb2Nlc3MoKTsKQEAgLTc1LDYgKzc4LDcgQEAgcHJpdmF0ZToKICAgICAvLyBDb25uZWN0aW9u
cyB0byBXZWJQcm9jZXNzZXMuCiAgICAgVmVjdG9yPFJlZlB0cjxOZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcz4gPiBtX3dlYlByb2Nlc3NDb25uZWN0aW9uczsKIAorICAgIE5ldHdvcmtSZXNv
dXJjZUxvYWRTY2hlZHVsZXIgbV9uZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUmVxdWVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
YWMxZWViYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtSZXF1ZXN0LmNwcApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5ldHdvcmtSZXF1ZXN0LmgiCisKKyNpbmNsdWRlICJO
ZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
TmV0d29ya1JlcXVlc3Q6Ok5ldHdvcmtSZXF1ZXN0KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VMb2FkSWRlbnRpZmllciBpZGVudGlmaWVyLCBOZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2VzcyogY29ubmVjdGlvbikKKyAgICA6IG1fcmVxdWVzdChyZXF1
ZXN0KQorICAgICwgbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCisgICAgLCBtX2Nvbm5lY3Rpb24o
Y29ubmVjdGlvbikKK3sKKyAgICBjb25uZWN0aW9uLT5yZWdpc3Rlck9ic2VydmVyKHRoaXMpOwor
fQorCitOZXR3b3JrUmVxdWVzdDo6fk5ldHdvcmtSZXF1ZXN0KCkKK3sKKyAgICBpZiAobV9jb25u
ZWN0aW9uKQorICAgICAgICBtX2Nvbm5lY3Rpb24tPnVucmVnaXN0ZXJPYnNlcnZlcih0aGlzKTsK
K30KKwordm9pZCBOZXR3b3JrUmVxdWVzdDo6Y29ubmVjdGlvblRvV2ViUHJvY2Vzc0RpZENsb3Nl
KE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKiBjb25uZWN0aW9uKQoreworICAgIEFTU0VS
VF9BUkcoY29ubmVjdGlvbiwgY29ubmVjdGlvbiA9PSBtX2Nvbm5lY3Rpb24uZ2V0KCkpOworICAg
IG1fY29ubmVjdGlvbi0+dW5yZWdpc3Rlck9ic2VydmVyKHRoaXMpOworICAgIG1fY29ubmVjdGlv
biA9IDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1JlcXVlc3QuaCBiL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL05ldHdvcmtSZXF1ZXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uYzBkNTE2NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL05ldHdvcmtSZXF1ZXN0LmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgTmV0d29ya1JlcXVlc3RfaAorI2RlZmluZSBOZXR3b3JrUmVxdWVzdF9oCisKKyNp
bmNsdWRlICJOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit0eXBlZGVmIHVp
bnQ2NF90IFJlc291cmNlTG9hZElkZW50aWZpZXI7CisKK2NsYXNzIE5ldHdvcmtSZXF1ZXN0IDog
cHVibGljIFJlZkNvdW50ZWQ8TmV0d29ya1JlcXVlc3Q+LCBwdWJsaWMgTmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3NPYnNlcnZlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxOZXR3
b3JrUmVxdWVzdD4gY3JlYXRlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCwgUmVzb3VyY2VMb2FkSWRlbnRpZmllciBpZGVudGlmaWVyLCBOZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2VzcyogY29ubmVjdGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgTmV0d29ya1JlcXVlc3QocmVxdWVzdCwgaWRlbnRpZmllciwgY29ubmVjdGlvbikpOworICAg
IH0KKyAgICAKKyAgICB+TmV0d29ya1JlcXVlc3QoKTsKKworICAgIHZvaWQgY29ubmVjdGlvblRv
V2ViUHJvY2Vzc0RpZENsb3NlKE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKik7CisgICAg
CisgICAgUmVzb3VyY2VMb2FkSWRlbnRpZmllciBpZGVudGlmaWVyKCkgeyByZXR1cm4gbV9pZGVu
dGlmaWVyOyB9CisgICAgCisgICAgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqIGNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MoKSB7IHJldHVybiBtX2Nvbm5lY3Rpb24uZ2V0KCk7IH0KKworcHJp
dmF0ZToKKyAgICBOZXR3b3JrUmVxdWVzdChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
LCBSZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcyop
OworCisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IG1fcmVxdWVzdDsKKyAgICBSZXNvdXJj
ZUxvYWRJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKKworICAgIFJlZlB0cjxOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcz4gbV9jb25uZWN0aW9uOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZiAvLyBOZXR3b3JrUmVxdWVzdF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNzRkMjQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VM
b2FkU2NoZWR1bGVyLmNwcApAQCAtMCwwICsxLDIwMyBAQAorI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIk5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCIKKworI2luY2x1ZGUgIkhv
c3RSZWNvcmQuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTmV0d29ya0Nvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MuaCIKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc2Nvbm5lY3Rpb25N
ZXNzYWdlcy5oIgorI2luY2x1ZGUgIk5ldHdvcmtSZXF1ZXN0LmgiCisjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdGF0aWMgY29uc3QgdW5z
aWduZWQgbWF4UmVxdWVzdHNJbkZsaWdodEZvck5vbkhUVFBQcm90b2NvbHMgPSAyMDsKK3N0YXRp
YyB1bnNpZ25lZCBtYXhSZXF1ZXN0c0luRmxpZ2h0UGVySG9zdDsKK3N0YXRpYyBSZXNvdXJjZUxv
YWRJZGVudGlmaWVyIHNfY3VycmVudFJlc291cmNlTG9hZElkZW50aWZpZXI7CisKK05ldHdvcmtS
ZXNvdXJjZUxvYWRTY2hlZHVsZXI6Ok5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKQorICAg
IDogbV9ub25IVFRQUHJvdG9jb2xIb3N0KG5ldyBIb3N0UmVjb3JkKFN0cmluZygpLCBtYXhSZXF1
ZXN0c0luRmxpZ2h0Rm9yTm9uSFRUUFByb3RvY29scykpCisgICAgLCBtX3JlcXVlc3RUaW1lcih0
aGlzLCAmTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVxdWVzdFRpbWVyRmlyZWQpCisK
K3sKKyAgICBtYXhSZXF1ZXN0c0luRmxpZ2h0UGVySG9zdCA9IHBsYXRmb3JtSW5pdGlhbGl6ZU1h
eGltdW1IVFRQQ29ubmVjdGlvbkNvdW50UGVySG9zdCgpOworfQorCit2b2lkIE5ldHdvcmtSZXNv
dXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlU2VydmVQZW5kaW5nUmVxdWVzdHMoKQoreworICAg
IGlmICghbV9yZXF1ZXN0VGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9yZXF1ZXN0VGltZXIu
c3RhcnRPbmVTaG90KDApOworfQorCit2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6
OnJlcXVlc3RUaW1lckZpcmVkKFdlYkNvcmU6OlRpbWVyPE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hl
ZHVsZXI+KikKK3sKKyAgICBzZXJ2ZVBlbmRpbmdSZXF1ZXN0cygpOworfQorCitSZXNvdXJjZUxv
YWRJZGVudGlmaWVyIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlTmV0d29y
a1JlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUxvYWRQcmlv
cml0eSBwcmlvcml0eSwgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqIGNvbm5lY3Rpb24p
Cit7ICAgIAorICAgIFJlc291cmNlTG9hZElkZW50aWZpZXIgaWRlbnRpZmllciA9ICsrc19jdXJy
ZW50UmVzb3VyY2VMb2FkSWRlbnRpZmllcjsKKworICAgIExPRyhOZXR3b3JrLCAiKE5ldHdvcmtQ
cm9jZXNzKSBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZU5ldHdvcmtSZXF1
ZXN0IHJlc291cmNlICVsbHUgJyVzJyIsIGlkZW50aWZpZXIsIHJlcXVlc3QudXJsKCkuc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICBIb3N0UmVjb3JkKiBob3N0ID0gaG9zdEZvclVSTChy
ZXF1ZXN0LnVybCgpLCBDcmVhdGVJZk5vdEZvdW5kKTsKKyAgICBib29sIGhhZFJlcXVlc3RzID0g
aG9zdC0+aGFzUmVxdWVzdHMoKTsKKyAgICBob3N0LT5zY2hlZHVsZShOZXR3b3JrUmVxdWVzdDo6
Y3JlYXRlKHJlcXVlc3QsIGlkZW50aWZpZXIsIGNvbm5lY3Rpb24pLCBwcmlvcml0eSk7CisgICAg
bV9pZGVudGlmaWVycy5hZGQoaWRlbnRpZmllciwgaG9zdCk7CisKKyAgICBpZiAocHJpb3JpdHkg
PiBSZXNvdXJjZUxvYWRQcmlvcml0eUxvdyB8fCAhcmVxdWVzdC51cmwoKS5wcm90b2NvbElzSW5I
VFRQRmFtaWx5KCkgfHwgKHByaW9yaXR5ID09IFJlc291cmNlTG9hZFByaW9yaXR5TG93ICYmICFo
YWRSZXF1ZXN0cykpIHsKKyAgICAgICAgLy8gVHJ5IHRvIHJlcXVlc3QgaW1wb3J0YW50IHJlc291
cmNlcyBpbW1lZGlhdGVseS4KKyAgICAgICAgc2VydmVQZW5kaW5nUmVxdWVzdHNGb3JIb3N0KGhv
c3QsIHByaW9yaXR5KTsKKyAgICAgICAgcmV0dXJuIGlkZW50aWZpZXI7CisgICAgfQorICAgIAor
ICAgIC8vIEhhbmRsZSBhc3luY2hyb25vdXNseSBzbyBlYXJseSBsb3cgcHJpb3JpdHkgcmVxdWVz
dHMgZG9uJ3QgZ2V0IHNjaGVkdWxlZCBiZWZvcmUgbGF0ZXIgaGlnaCBwcmlvcml0eSBvbmVzLgor
ICAgIHNjaGVkdWxlU2VydmVQZW5kaW5nUmVxdWVzdHMoKTsKKyAgICByZXR1cm4gaWRlbnRpZmll
cjsKK30KKworUmVzb3VyY2VMb2FkSWRlbnRpZmllciBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1
bGVyOjphZGRMb2FkSW5Qcm9ncmVzcyhjb25zdCBXZWJDb3JlOjpLVVJMJiB1cmwpCit7CisgICAg
UmVzb3VyY2VMb2FkSWRlbnRpZmllciBpZGVudGlmaWVyID0gKytzX2N1cnJlbnRSZXNvdXJjZUxv
YWRJZGVudGlmaWVyOworCisgICAgTE9HKE5ldHdvcmssICIoTmV0d29ya1Byb2Nlc3MpIE5ldHdv
cmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmFkZExvYWRJblByb2dyZXNzIHJlc291cmNlICVsbHUg
d2l0aCB1cmwgJyVzJyIsIGlkZW50aWZpZXIsIHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsK
KworICAgIEhvc3RSZWNvcmQqIGhvc3QgPSBob3N0Rm9yVVJMKHVybCwgQ3JlYXRlSWZOb3RGb3Vu
ZCk7CisgICAgaG9zdC0+YWRkTG9hZEluUHJvZ3Jlc3MoaWRlbnRpZmllcik7CisgICAgbV9pZGVu
dGlmaWVycy5hZGQoaWRlbnRpZmllciwgaG9zdCk7CisgICAgCisgICAgcmV0dXJuIGlkZW50aWZp
ZXI7Cit9CisKK0hvc3RSZWNvcmQqIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Omhvc3RG
b3JVUkwoY29uc3QgV2ViQ29yZTo6S1VSTCYgdXJsLCBDcmVhdGVIb3N0UG9saWN5IGNyZWF0ZUhv
c3RQb2xpY3kpCit7CisgICAgaWYgKCF1cmwucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKQorICAg
ICAgICByZXR1cm4gbV9ub25IVFRQUHJvdG9jb2xIb3N0OworCisgICAgbV9ob3N0cy5jaGVja0Nv
bnNpc3RlbmN5KCk7CisgICAgU3RyaW5nIGhvc3ROYW1lID0gdXJsLmhvc3QoKTsKKyAgICBIb3N0
UmVjb3JkKiBob3N0ID0gbV9ob3N0cy5nZXQoaG9zdE5hbWUpOworICAgIGlmICghaG9zdCAmJiBj
cmVhdGVIb3N0UG9saWN5ID09IENyZWF0ZUlmTm90Rm91bmQpIHsKKyAgICAgICAgaG9zdCA9IG5l
dyBIb3N0UmVjb3JkKGhvc3ROYW1lLCBtYXhSZXF1ZXN0c0luRmxpZ2h0UGVySG9zdCk7CisgICAg
ICAgIG1faG9zdHMuYWRkKGhvc3ROYW1lLCBob3N0KTsKKyAgICB9CisgICAgCisgICAgcmV0dXJu
IGhvc3Q7Cit9CisKK3ZvaWQgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVtb3ZlTG9h
ZElkZW50aWZpZXIoUmVzb3VyY2VMb2FkSWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAgIEFT
U0VSVChpZGVudGlmaWVyKTsKKworICAgIExPRyhOZXR3b3JrLCAiKE5ldHdvcmtQcm9jZXNzKSBO
ZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZW1vdmVMb2FkSWRlbnRpZmllciByZW1vdmlu
ZyBsb2FkIGlkZW50aWZpZXIgJWxsdSIsIGlkZW50aWZpZXIpOworCisgICAgSG9zdFJlY29yZCog
aG9zdCA9IG1faWRlbnRpZmllcnMudGFrZShpZGVudGlmaWVyKTsKKyAgICBBU1NFUlQoaG9zdCk7
CisgICAgaWYgKGhvc3QpCisgICAgICAgIGhvc3QtPnJlbW92ZShpZGVudGlmaWVyKTsKKworICAg
IHNjaGVkdWxlU2VydmVQZW5kaW5nUmVxdWVzdHMoKTsKK30KKwordm9pZCBOZXR3b3JrUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOjpjcm9zc09yaWdpblJlZGlyZWN0UmVjZWl2ZWQoUmVzb3VyY2VMb2Fk
SWRlbnRpZmllciBpZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpLVVJMJiByZWRpcmVjdFVSTCkK
K3sKKyAgICBMT0coTmV0d29yaywgIihOZXR3b3JrUHJvY2VzcykgTmV0d29ya1Jlc291cmNlTG9h
ZFNjaGVkdWxlcjo6Y3Jvc3NPcmlnaW5SZWRpcmVjdFJlY2VpdmVkIHJlc291cmNlICVsbHUgcmVk
aXJlY3RlZCB0byAnJXMnIiwgaWRlbnRpZmllciwgcmVkaXJlY3RVUkwuc3RyaW5nKCkudXRmOCgp
LmRhdGEoKSk7CisKKyAgICBIb3N0UmVjb3JkKiBvbGRIb3N0ID0gbV9pZGVudGlmaWVycy5nZXQo
aWRlbnRpZmllcik7CisgICAgSG9zdFJlY29yZCogbmV3SG9zdCA9IGhvc3RGb3JVUkwocmVkaXJl
Y3RVUkwsIENyZWF0ZUlmTm90Rm91bmQpOworICAgIEFTU0VSVChvbGRIb3N0KTsKKyAgICAKKyAg
ICBpZiAob2xkSG9zdC0+bmFtZSgpID09IG5ld0hvc3QtPm5hbWUoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIG5ld0hvc3QtPmFkZExvYWRJblByb2dyZXNzKGlkZW50aWZpZXIpOworICAg
IG1faWRlbnRpZmllcnMuc2V0KGlkZW50aWZpZXIsIG5ld0hvc3QpOworCisgICAgb2xkSG9zdC0+
cmVtb3ZlKGlkZW50aWZpZXIpOyAgICAKK30KKwordm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkU2No
ZWR1bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhSZXNvdXJjZUxvYWRQcmlvcml0eSBtaW5pbXVt
UHJpb3JpdHkpCit7CisgICAgaWYgKG1fc3VzcGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50KQorICAg
ICAgICByZXR1cm47CisKKyAgICBMT0coTmV0d29yaywgIihOZXR3b3JrUHJvY2VzcykgTmV0d29y
a1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMgU2VydmluZyByZXF1
ZXN0cyBmb3IgdXAgdG8gJWkgaG9zdHMiLCBtX2hvc3RzLnNpemUoKSk7CisKKyAgICBtX3JlcXVl
c3RUaW1lci5zdG9wKCk7CisgICAgCisgICAgc2VydmVQZW5kaW5nUmVxdWVzdHNGb3JIb3N0KG1f
bm9uSFRUUFByb3RvY29sSG9zdCwgbWluaW11bVByaW9yaXR5KTsKKworICAgIG1faG9zdHMuY2hl
Y2tDb25zaXN0ZW5jeSgpOworICAgIFZlY3RvcjxIb3N0UmVjb3JkKj4gaG9zdHNUb1NlcnZlOwor
ICAgIGNvcHlWYWx1ZXNUb1ZlY3RvcihtX2hvc3RzLCBob3N0c1RvU2VydmUpOworCisgICAgc2l6
ZV90IHNpemUgPSBob3N0c1RvU2VydmUuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc2l6ZTsgKytpKSB7CisgICAgICAgIEhvc3RSZWNvcmQqIGhvc3QgPSBob3N0c1RvU2VydmVb
aV07CisgICAgICAgIGlmIChob3N0LT5oYXNSZXF1ZXN0cygpKQorICAgICAgICAgICAgc2VydmVQ
ZW5kaW5nUmVxdWVzdHNGb3JIb3N0KGhvc3QsIG1pbmltdW1Qcmlvcml0eSk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGRlbGV0ZSBtX2hvc3RzLnRha2UoaG9zdC0+bmFtZSgpKTsKKyAgICB9
Cit9CisKK3ZvaWQgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5nUmVx
dWVzdHNGb3JIb3N0KEhvc3RSZWNvcmQqIGhvc3QsIFJlc291cmNlTG9hZFByaW9yaXR5IG1pbmlt
dW1Qcmlvcml0eSkKK3sKKyAgICBMT0coTmV0d29yaywgIk5ldHdvcmtSZXNvdXJjZUxvYWRTY2hl
ZHVsZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzIEhvc3QgbmFtZT0nJXMnIiwgaG9zdC0+bmFtZSgp
LnV0ZjgoKS5kYXRhKCkpOworCisgICAgZm9yIChpbnQgcHJpb3JpdHkgPSBSZXNvdXJjZUxvYWRQ
cmlvcml0eUhpZ2hlc3Q7IHByaW9yaXR5ID49IG1pbmltdW1Qcmlvcml0eTsgLS1wcmlvcml0eSkg
eworICAgICAgICBIb3N0UmVjb3JkOjpSZXF1ZXN0UXVldWUmIHJlcXVlc3RzUGVuZGluZyA9IGhv
c3QtPnJlcXVlc3RzUGVuZGluZyhSZXNvdXJjZUxvYWRQcmlvcml0eShwcmlvcml0eSkpOworCisg
ICAgICAgIHdoaWxlICghcmVxdWVzdHNQZW5kaW5nLmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
UmVmUHRyPE5ldHdvcmtSZXF1ZXN0PiByZXF1ZXN0ID0gcmVxdWVzdHNQZW5kaW5nLmZpcnN0KCk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRoaXMgcmVxdWVzdCBtaWdodCBiZSBmcm9t
IFdlYlByb2Nlc3Mgd2UndmUgbG9zdCBvdXIgY29ubmVjdGlvbiB0by4KKyAgICAgICAgICAgIC8v
IElmIHNvIHdlIHNob3VsZCBqdXN0IHNraXAgaXQuCisgICAgICAgICAgICBpZiAoIXJlcXVlc3Qt
PmNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoKSkgeworICAgICAgICAgICAgICAgIHJlcXVlc3RzUGVu
ZGluZy5yZW1vdmVGaXJzdCgpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvLyBGb3IgbmFtZWQgaG9zdHMgLSB3aGljaCBhcmUgb25seSBo
dHRwKHMpIGhvc3RzIC0gd2Ugc2hvdWxkIGFsd2F5cyBlbmZvcmNlIHRoZSBjb25uZWN0aW9uIGxp
bWl0LgorICAgICAgICAgICAgLy8gRm9yIG5vbi1uYW1lZCBob3N0cyAtIGV2ZXJ5dGhpbmcgYnV0
IGh0dHAocykgLSB3ZSBzaG91bGQgb25seSBlbmZvcmNlIHRoZSBsaW1pdCBpZiB0aGUgZG9jdW1l
bnQKKyAgICAgICAgICAgIC8vIGlzbid0IGRvbmUgcGFyc2luZyBhbmQgd2UgZG9uJ3Qga25vdyBh
bGwgc3R5bGVzaGVldHMgeWV0LgorCisgICAgICAgICAgICAvLyBGSVhNRTogSG93IGNhbiB0aGUg
bmV0d29yayBwcm9jZXNzIGtub3cgaWYgdGhlIGRvY3VtZW50IGlzIHBhcnNpbmcgb3IgaGFzIGl0
cyBzdHlsZXNoZWV0cyBsb2FkZWQ/CisgICAgICAgICAgICAvLyBXZSdsbCBuZWVkIHRvIHRlYWNo
IGl0LgorICAgICAgICAgICAgLy8gRm9yIG5vdyB3ZSdsbCBqdXN0IGFsd2F5cyBsaW1pdCByZXF1
ZXN0cyBmb3IgbmFtZWQgaG9zdHMsIGJ1dCB3ZSBuZWVkIHRvIHN1cHBvcnQgdGhlIGZvbGxvd2lu
ZyBmcm9tIFJlc291cmNlTG9hZFNjaGVkdWxlcjoKKyAgICAgICAgICAgIC8vIGJvb2wgc2hvdWxk
TGltaXRSZXF1ZXN0cyA9ICFob3N0LT5uYW1lKCkuaXNOdWxsKCkgfHwgKGRvY3VtZW50ICYmIChk
b2N1bWVudC0+cGFyc2luZygpIHx8ICFkb2N1bWVudC0+aGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCkp
KTsKKworICAgICAgICAgICAgYm9vbCBzaG91bGRMaW1pdFJlcXVlc3RzID0gIWhvc3QtPm5hbWUo
KS5pc051bGwoKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRMaW1pdFJlcXVlc3RzICYmIGhvc3Qt
PmxpbWl0UmVxdWVzdHMoUmVzb3VyY2VMb2FkUHJpb3JpdHkocHJpb3JpdHkpLCByZXF1ZXN0LT5j
b25uZWN0aW9uVG9XZWJQcm9jZXNzKCktPmlzU2VyaWFsTG9hZGluZ0VuYWJsZWQoKSkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICByZXF1ZXN0c1BlbmRpbmcucmVtb3Zl
Rmlyc3QoKTsKKyAgICAgICAgICAgIGhvc3QtPmFkZExvYWRJblByb2dyZXNzKHJlcXVlc3QtPmlk
ZW50aWZpZXIoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJlcXVlc3QtPmNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MoKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzc0Nvbm5lY3Rpb246OlN0YXJ0UmVzb3VyY2VMb2FkKHJlcXVlc3QtPmlkZW50aWZpZXIoKSks
IDApOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hl
ZHVsZXI6OnN1c3BlbmRQZW5kaW5nUmVxdWVzdHMoKQoreworICAgICsrbV9zdXNwZW5kUGVuZGlu
Z1JlcXVlc3RzQ291bnQ7Cit9CisKK3ZvaWQgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6
cmVzdW1lUGVuZGluZ1JlcXVlc3RzKCkKK3sKKyAgICBBU1NFUlQobV9zdXNwZW5kUGVuZGluZ1Jl
cXVlc3RzQ291bnQpOworICAgIC0tbV9zdXNwZW5kUGVuZGluZ1JlcXVlc3RzQ291bnQ7CisgICAg
aWYgKG1fc3VzcGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50KQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAoIW1faG9zdHMuaXNFbXB0eSgpIHx8IG1fbm9uSFRUUFByb3RvY29sSG9zdC0+aGFzUmVx
dWVzdHMoKSkKKyAgICAgICAgc2NoZWR1bGVTZXJ2ZVBlbmRpbmdSZXF1ZXN0cygpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShORVRXT1JLX1BST0NFU1Mp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uYTE2YTM4OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaApAQCAtMCwwICsxLDkzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyX2gKKyNkZWZpbmUg
TmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcl9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291
cmNlUmVxdWVzdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGltZXIuaD4KKworI2lmIEVOQUJMRShO
RVRXT1JLX1BST0NFU1MpCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBIb3N0UmVjb3Jk
OworY2xhc3MgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7Cit0eXBlZGVmIHVpbnQ2NF90
IFJlc291cmNlTG9hZElkZW50aWZpZXI7CisKK2NsYXNzIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hl
ZHVsZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hl
ZHVsZXIpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKworcHVibGljOgorICAgIE5ldHdvcmtS
ZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsKKyAgICAKKyAgICAvLyBBZGRzIHRoZSByZXF1ZXN0IHRv
IHRoZSBxdWV1ZSBmb3IgaXRzIGhvc3QgYW5kIGNyZWF0ZSBhIHVuaXF1ZSBpZGVudGlmaWVyIGZv
ciBpdC4KKyAgICBSZXNvdXJjZUxvYWRJZGVudGlmaWVyIHNjaGVkdWxlTmV0d29ya1JlcXVlc3Qo
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgV2ViQ29yZTo6UmVzb3VyY2VMb2FkUHJp
b3JpdHksIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKik7CisgICAgCisgICAgLy8gQ3Jl
YXRlcyBhIHVuaXF1ZSBpZGVudGlmaWVyIGZvciBhbiBhbHJlYWR5LWluLXByb2dyZXNzIGxvYWQu
CisgICAgUmVzb3VyY2VMb2FkSWRlbnRpZmllciBhZGRMb2FkSW5Qcm9ncmVzcyhjb25zdCBXZWJD
b3JlOjpLVVJMJik7CisKKyAgICAvLyBDYWxsZWQgYnkgdGhlIFdlYlByb2Nlc3Mgd2hlbiBhIFJl
c291cmNlTG9hZGVyIGlzIGJlaW5nIGNsZWFuZWQgdXAuCisgICAgdm9pZCByZW1vdmVMb2FkSWRl
bnRpZmllcihSZXNvdXJjZUxvYWRJZGVudGlmaWVyKTsKKworICAgIHZvaWQgY3Jvc3NPcmlnaW5S
ZWRpcmVjdFJlY2VpdmVkKFJlc291cmNlTG9hZElkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OktV
UkwmIHJlZGlyZWN0VVJMKTsKKyAgICB2b2lkIHNlcnZlUGVuZGluZ1JlcXVlc3RzKFdlYkNvcmU6
OlJlc291cmNlTG9hZFByaW9yaXR5ID0gV2ViQ29yZTo6UmVzb3VyY2VMb2FkUHJpb3JpdHlWZXJ5
TG93KTsKKyAgICB2b2lkIHN1c3BlbmRQZW5kaW5nUmVxdWVzdHMoKTsKKyAgICB2b2lkIHJlc3Vt
ZVBlbmRpbmdSZXF1ZXN0cygpOworICAgIAorcHJpdmF0ZToKKyAgICBlbnVtIENyZWF0ZUhvc3RQ
b2xpY3kgeworICAgICAgICBDcmVhdGVJZk5vdEZvdW5kLAorICAgICAgICBGaW5kT25seQorICAg
IH07CisgICAgCisgICAgSG9zdFJlY29yZCogaG9zdEZvclVSTChjb25zdCBXZWJDb3JlOjpLVVJM
JiwgQ3JlYXRlSG9zdFBvbGljeSA9IEZpbmRPbmx5KTsKKyAgICAKKyAgICB2b2lkIHNjaGVkdWxl
U2VydmVQZW5kaW5nUmVxdWVzdHMoKTsKKyAgICB2b2lkIHJlcXVlc3RUaW1lckZpcmVkKFdlYkNv
cmU6OlRpbWVyPE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI+Kik7CisKKyAgICB2b2lkIHNl
cnZlUGVuZGluZ1JlcXVlc3RzRm9ySG9zdChIb3N0UmVjb3JkKiwgV2ViQ29yZTo6UmVzb3VyY2VM
b2FkUHJpb3JpdHkpOworCisgICAgdW5zaWduZWQgcGxhdGZvcm1Jbml0aWFsaXplTWF4aW11bUhU
VFBDb25uZWN0aW9uQ291bnRQZXJIb3N0KCk7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5n
LCBIb3N0UmVjb3JkKiwgU3RyaW5nSGFzaD4gSG9zdE1hcDsKKyAgICBIb3N0TWFwIG1faG9zdHM7
CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8UmVzb3VyY2VMb2FkSWRlbnRpZmllciwgSG9zdFJlY29y
ZCo+IElkZW50aWZpZXJIb3N0TWFwOworICAgIElkZW50aWZpZXJIb3N0TWFwIG1faWRlbnRpZmll
cnM7CisKKyAgICBIb3N0UmVjb3JkKiBtX25vbkhUVFBQcm90b2NvbEhvc3Q7CisKKyAgICB1bnNp
Z25lZCBtX3N1c3BlbmRQZW5kaW5nUmVxdWVzdHNDb3VudDsKKyAgICBib29sIG1faXNTZXJpYWxM
b2FkaW5nRW5hYmxlZDsKKworICAgIFdlYkNvcmU6OlRpbWVyPE5ldHdvcmtSZXNvdXJjZUxvYWRT
Y2hlZHVsZXI+IG1fcmVxdWVzdFRpbWVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQorCisjZW5kaWYgLy8gTmV0d29ya1Jl
c291cmNlTG9hZFNjaGVkdWxlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9tYWMvTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlck1hYy5tbSBiL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9OZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyTWFj
Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3M2QxYTIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29ya1Jlc291
cmNlTG9hZFNjaGVkdWxlck1hYy5tbQpAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lt
cG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgi
CisKKyNpbXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CisjaW1wb3J0IDxXZWJDb3Jl
L1Jlc291cmNlUmVxdWVzdENGTmV0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVTeXN0ZW1J
bnRlcmZhY2UuaD4KKyNpbXBvcnQgPFdlYktpdFN5c3RlbUludGVyZmFjZS5oPgorCit1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3Vuc2lnbmVkIE5ldHdv
cmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnBsYXRmb3JtSW5pdGlhbGl6ZU1heGltdW1IVFRQQ29u
bmVjdGlvbkNvdW50UGVySG9zdCgpCit7CisgICAgd2tJbml0aWFsaXplTWF4aW11bUhUVFBDb25u
ZWN0aW9uQ291bnRQZXJIb3N0ID0gV0tJbml0aWFsaXplTWF4aW11bUhUVFBDb25uZWN0aW9uQ291
bnRQZXJIb3N0OworICAgIHdrU2V0SFRUUFBpcGVsaW5pbmdNYXhpbXVtUHJpb3JpdHkgPSBXS1Nl
dEhUVFBQaXBlbGluaW5nTWF4aW11bVByaW9yaXR5OworICAgIHdrU2V0SFRUUFBpcGVsaW5pbmdN
aW5pbXVtRmFzdExhbmVQcmlvcml0eSA9IFdLU2V0SFRUUFBpcGVsaW5pbmdNaW5pbXVtRmFzdExh
bmVQcmlvcml0eTsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBwcmVmZXJyZWRDb25uZWN0
aW9uQ291bnQgPSA2OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCB1bmxpbWl0ZWRDb25uZWN0
aW9uQ291bnQgPSAxMDAwMDsKKworICAgIC8vIEFsd2F5cyBzZXQgdGhlIGNvbm5lY3Rpb24gY291
bnQgcGVyIGhvc3QsIGV2ZW4gd2hlbiBwaXBlbGluaW5nLgorICAgIHVuc2lnbmVkIG1heGltdW1I
VFRQQ29ubmVjdGlvbkNvdW50UGVySG9zdCA9IHdrSW5pdGlhbGl6ZU1heGltdW1IVFRQQ29ubmVj
dGlvbkNvdW50UGVySG9zdChwcmVmZXJyZWRDb25uZWN0aW9uQ291bnQpOworCisgICAgQm9vbGVh
biBrZXlFeGlzdHNBbmRIYXNWYWxpZEZvcm1hdCA9IGZhbHNlOworICAgIEJvb2xlYW4gcHJlZlZh
bHVlID0gQ0ZQcmVmZXJlbmNlc0dldEFwcEJvb2xlYW5WYWx1ZShDRlNUUigiV2ViS2l0RW5hYmxl
SFRUUFBpcGVsaW5pbmciKSwga0NGUHJlZmVyZW5jZXNDdXJyZW50QXBwbGljYXRpb24sICZrZXlF
eGlzdHNBbmRIYXNWYWxpZEZvcm1hdCk7CisgICAgCisgICAgaWYgKGtleUV4aXN0c0FuZEhhc1Zh
bGlkRm9ybWF0KQorICAgICAgICBSZXNvdXJjZVJlcXVlc3Q6OnNldEhUVFBQaXBlbGluaW5nRW5h
YmxlZChwcmVmVmFsdWUpOworCisgICAgaWYgKFJlc291cmNlUmVxdWVzdDo6aHR0cFBpcGVsaW5p
bmdFbmFibGVkKCkpIHsKKyAgICAgICAgd2tTZXRIVFRQUGlwZWxpbmluZ01heGltdW1Qcmlvcml0
eSh0b0hUVFBQaXBlbGluaW5nUHJpb3JpdHkoUmVzb3VyY2VMb2FkUHJpb3JpdHlIaWdoZXN0KSk7
CisgICAgICAgIHdrU2V0SFRUUFBpcGVsaW5pbmdNaW5pbXVtRmFzdExhbmVQcmlvcml0eSh0b0hU
VFBQaXBlbGluaW5nUHJpb3JpdHkoUmVzb3VyY2VMb2FkUHJpb3JpdHlNZWRpdW0pKTsKKworICAg
ICAgICAvLyBXaGVuIHBpcGVsaW5pbmcgZG8gbm90IHJhdGUtbGltaXQgcmVxdWVzdHMgc2VudCBm
cm9tIFdlYkNvcmUgc2luY2UgQ0ZOZXR3b3JrIGhhbmRsZXMgdGhhdC4KKyAgICAgICAgcmV0dXJu
IHVubGltaXRlZENvbm5lY3Rpb25Db3VudDsKKyAgICB9CisKKyAgICByZXR1cm4gbWF4aW11bUhU
VFBDb25uZWN0aW9uQ291bnRQZXJIb3N0OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvTWVzc2FnZUlELmggYi9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL01lc3NhZ2VJRC5oCmluZGV4IGE4OWU2NGYu
LmRkM2ZjYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvTWVz
c2FnZUlELmgKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9NZXNzYWdlSUQu
aApAQCAtMTE1LDYgKzExNSw5IEBAIGVudW0gTWVzc2FnZUNsYXNzIHsKICAgICAvLyBNZXNzYWdl
cyBzZW50IGJ5IHRoZSB3ZWIgcHJvY2VzcyB0byB0aGUgbmV0d29yayBwcm9jZXNzLgogICAgIE1l
c3NhZ2VDbGFzc05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLAogCisgICAgLy8gTWVzc2Fn
ZXMgc2VudCBieSB0aGUgbmV0d29yayBwcm9jZXNzIHRvIGEgd2ViIHByb2Nlc3MuCisgICAgTWVz
c2FnZUNsYXNzTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLAorICAgIAogI2lmIEVOQUJMRShTSEFS
RURfV09SS0VSX1BST0NFU1MpCiAgICAgLy8gTWVzc2FnZXMgc2VudCBieSB0aGUgVUkgcHJvY2Vz
cyB0byB0aGUgc2hhcmVkIHdvcmtlciBwcm9jZXNzLgogICAgIE1lc3NhZ2VDbGFzc1NoYXJlZFdv
cmtlclByb2Nlc3MsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Mb2dnaW5n
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0xvZ2dpbmcuY3BwCmluZGV4IGRmOThlNzIu
LjgxZDc0YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0xvZ2dpbmcuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0xvZ2dpbmcuY3BwCkBAIC0zOCw2ICszOCw3
IEBAIFdURkxvZ0NoYW5uZWwgTG9nVmlldyAgICAgICAgID0geyAweDAwMDAwMDA4LCAiV2ViS2l0
MkxvZ0xldmVsIiwgV1RGTG9nQ2hhbm5lbE9mCiBXVEZMb2dDaGFubmVsIExvZ0ljb25EYXRhYmFz
ZSA9IHsgMHgwMDAwMDAxMCwgIldlYktpdDJMb2dMZXZlbCIsIFdURkxvZ0NoYW5uZWxPZmYgfTsK
IFdURkxvZ0NoYW5uZWwgTG9nS2V5SGFuZGxpbmcgID0geyAweDAwMDAwMDIwLCAiV2ViS2l0Mkxv
Z0xldmVsIiwgV1RGTG9nQ2hhbm5lbE9mZiB9OwogV1RGTG9nQ2hhbm5lbCBMb2dQbHVnaW5zICAg
ICAgPSB7IDB4MDAwMDAwNDAsICJXZWJLaXQyTG9nTGV2ZWwiLCBXVEZMb2dDaGFubmVsT2ZmIH07
CitXVEZMb2dDaGFubmVsIExvZ05ldHdvcmsgICAgICA9IHsgMHgwMDAwMDA4MCwgIldlYktpdDJM
b2dMZXZlbCIsIFdURkxvZ0NoYW5uZWxPbiB9OwogCiAjaWYgIVBMQVRGT1JNKE1BQykgJiYgIVBM
QVRGT1JNKEdUSykgJiYgIVBMQVRGT1JNKFFUKSAmJiAhUExBVEZPUk0oRUZMKQogdm9pZCBpbml0
aWFsaXplTG9nQ2hhbm5lbChXVEZMb2dDaGFubmVsKiBjaGFubmVsKQpAQCAtNzMsNiArNzQsOSBA
QCBXVEZMb2dDaGFubmVsKiBnZXRDaGFubmVsRnJvbU5hbWUoY29uc3QgU3RyaW5nJiBjaGFubmVs
TmFtZSkKICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoY2hhbm5lbE5hbWUsIFN0cmluZygiUGx1
Z2lucyIpKSkKICAgICAgICAgcmV0dXJuICZMb2dQbHVnaW5zOwogCisgICAgaWYgKGVxdWFsSWdu
b3JpbmdDYXNlKGNoYW5uZWxOYW1lLCBTdHJpbmcoIk5ldHdvcmsiKSkpCisgICAgICAgIHJldHVy
biAmTG9nTmV0d29yazsKKwogICAgIHJldHVybiAwOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Mb2dnaW5nLmggYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bS9Mb2dnaW5nLmgKaW5kZXggNjAzNjg2Zi4uY2E5OThjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vTG9nZ2luZy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0xv
Z2dpbmcuaApAQCAtNDQsNiArNDQsNyBAQCBleHRlcm4gV1RGTG9nQ2hhbm5lbCBMb2dQbHVnaW5z
OwogZXh0ZXJuIFdURkxvZ0NoYW5uZWwgTG9nU2Vzc2lvblN0YXRlOwogZXh0ZXJuIFdURkxvZ0No
YW5uZWwgTG9nVGV4dElucHV0OwogZXh0ZXJuIFdURkxvZ0NoYW5uZWwgTG9nVmlldzsKK2V4dGVy
biBXVEZMb2dDaGFubmVsIExvZ05ldHdvcms7CiAKIHZvaWQgaW5pdGlhbGl6ZUxvZ0NoYW5uZWwo
V1RGTG9nQ2hhbm5lbCopOwogdm9pZCBpbml0aWFsaXplTG9nQ2hhbm5lbHNJZk5lY2Vzc2FyeSh2
b2lkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdv
cmtQcm9jZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdvcmsvTmV0
d29ya1Byb2Nlc3NQcm94eS5jcHAKaW5kZXggZDFhMDEzNS4uNDExMDY1ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94
eS5jcHAKQEAgLTEwMiw3ICsxMDIsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZFJl
Y2VpdmVNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIENvcgogfQogCiB2
b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZENsb3NlKENvcmVJUEM6OkNvbm5lY3Rpb24qKQot
eworeyAgICAKICAgICAvLyBOb3RpZnkgYWxsIFdlYlByb2Nlc3NlcyB0aGF0IHRoZSBOZXR3b3Jr
UHJvY2VzcyBjcmFzaGVkLgogICAgIGNvbnN0IFZlY3RvcjxXZWJDb250ZXh0Kj4mIGNvbnRleHRz
ID0gV2ViQ29udGV4dDo6YWxsQ29udGV4dHMoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGNvbnRleHRzLnNpemUoKTsgKytpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0
Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGQ2OWRhM2YuLjViZmRjNzIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM3Miw2
ICszNzIsOSBAQAogCQk1MTI5MzVEODEyODhEMTk0MDBBNEI2OTUgLyogV2ViQ29udGV4dE1lbnVJ
dGVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTI5
MzVENjEyODhEMTk0MDBBNEI2OTUgLyogV2ViQ29udGV4dE1lbnVJdGVtLmggKi87IH07CiAJCTUx
MjkzNUUzMTI4OEQ5NzgwMEE0QjY5NSAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VDb250ZXh0TWVudUNs
aWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTI5MzVFMTEyODhEOTc4MDBBNEI2OTUgLyogSW5qZWN0ZWRCdW5kbGVQYWdlQ29udGV4dE1lbnVD
bGllbnQuY3BwICovOyB9OwogCQk1MTI5MzVFNDEyODhEOTc4MDBBNEI2OTUgLyogSW5qZWN0ZWRC
dW5kbGVQYWdlQ29udGV4dE1lbnVDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxMjkzNUUyMTI4OEQ5NzgwMEE0QjY5NSAvKiBJbmplY3RlZEJ1
bmRsZVBhZ2VDb250ZXh0TWVudUNsaWVudC5oICovOyB9OworCQk1MTJDMDY4ODE2MzhGNjdFMDBB
QkI5MTEgLyogSG9zdFJlY29yZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MTJDMDY4NjE2MzhGNjdFMDBBQkI5MTEgLyogSG9zdFJlY29yZC5jcHAg
Ki87IH07CisJCTUxMkMwNjg5MTYzOEY2N0UwMEFCQjkxMSAvKiBIb3N0UmVjb3JkLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTJDMDY4NzE2MzhGNjdF
MDBBQkI5MTEgLyogSG9zdFJlY29yZC5oICovOyB9OworCQk1MTJDMDY5MDE2MzkwRTY5MDBBQkI5
MTEgLyogTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlck1hYy5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMkMwNjhGMTYzOTBFNjkwMEFCQjkxMSAv
KiBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyTWFjLm1tICovOyB9OwogCQk1MTJERjZEODEz
OEMxODFBMDBBMjJGQzYgLyogS2V5Y2hhaW5JdGVtU2hpbU1ldGhvZHMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMkRGNkQ2MTM4QzE4MUEwMEEyMkZD
NiAvKiBLZXljaGFpbkl0ZW1TaGltTWV0aG9kcy5oICovOyB9OwogCQk1MTJERjZEOTEzOEMxODFB
MDBBMjJGQzYgLyogS2V5Y2hhaW5JdGVtU2hpbU1ldGhvZHMubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTJERjZENzEzOEMxODFBMDBBMjJGQzYgLyog
S2V5Y2hhaW5JdGVtU2hpbU1ldGhvZHMubW0gKi87IH07CiAJCTUxMkRGNkZFMTM4QzI1NDYwMEEy
MkZDNiAvKiBTZWNLZXljaGFpbkl0ZW1SZXF1ZXN0RGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTEyQ0E0NzEzODU4RDRCMDAzMDg2N0QgLyog
U2VjS2V5Y2hhaW5JdGVtUmVxdWVzdERhdGEuY3BwICovOyB9OwpAQCAtNDMzLDYgKzQzNiwxMiBA
QAogCQk1MTc5NTU2RTE2Mjg3N0IzMDBGQTQzQjYgLyogTmV0d29ya1Byb2Nlc3NQcm94eS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwQ0M3RUIxNjEz
OEU3MjAwRDAzRUQzIC8qIE5ldHdvcmtQcm9jZXNzUHJveHkuaCAqLzsgfTsKIAkJNTE3OTU1NzAx
NjI4NzdDRjAwRkE0M0I2IC8qIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQThBNjEyMTYy
N0YzMjUwMDBEOTBFOSAvKiBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAgKi87
IH07CiAJCTUxNzk1NTcxMTYyODc3RDIwMEZBNDNCNiAvKiBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFBOEE2MEYxNjI3RjJCRDAwMEQ5MEU5IC8qIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzLmggKi87IH07CisJCTUxN0NGMERGMTYzQTQ0NEMwMEMyOTUwRSAvKiBOZXR3b3JrUmVx
dWVzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTdDRjBERDE2M0E0NDRDMDBDMjk1MEUgLyogTmV0d29ya1JlcXVlc3QuY3BwICovOyB9OworCQk1
MTdDRjBFMDE2M0E0NDRDMDBDMjk1MEUgLyogTmV0d29ya1JlcXVlc3QuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxN0NGMERFMTYzQTQ0NEMwMEMyOTUw
RSAvKiBOZXR3b3JrUmVxdWVzdC5oICovOyB9OworCQk1MTdDRjBFMzE2M0E0ODZDMDBDMjk1MEUg
LyogTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxN0NGMEUxMTYzQTQ4NkMwMEMy
OTUwRSAvKiBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9
OworCQk1MTdDRjBFNDE2M0E0ODZDMDBDMjk1MEUgLyogTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9u
TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxN0NGMEUyMTYzQTQ4NkMwMEMyOTUwRSAvKiBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25NZXNz
YWdlcy5oICovOyB9OworCQk1MTgyOURBNTE2MzdDNzBDMDAwOTUzRDYgLyogTmV0d29ya1Jlc291
cmNlTG9hZFNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MTgyOURBMzE2MzdDNzBDMDAwOTUzRDYgLyogTmV0d29ya1Jlc291cmNlTG9h
ZFNjaGVkdWxlci5jcHAgKi87IH07CisJCTUxODI5REE2MTYzN0M3MEMwMDA5NTNENiAvKiBOZXR3
b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MTgyOURBNDE2MzdDNzBDMDAwOTUzRDYgLyogTmV0d29ya1Jlc291
cmNlTG9hZFNjaGVkdWxlci5oICovOyB9OwogCQk1MTgzNDU5MjEzNDUzMkU5MDA5MkI2OTYgLyog
V2ViSWNvbkRhdGFiYXNlQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxODM0NTkwMTM0NTMyRTgwMDkyQjY5NiAvKiBXZWJJY29uRGF0YWJh
c2VDbGllbnQuY3BwICovOyB9OwogCQk1MTgzNDU5MzEzNDUzMkU5MDA5MkI2OTYgLyogV2ViSWNv
bkRhdGFiYXNlQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MTgzNDU5MTEzNDUzMkU4MDA5MkI2OTYgLyogV2ViSWNvbkRhdGFiYXNlQ2xpZW50
LmggKi87IH07CiAJCTUxODNCMzkyMTM3OUY3QjgwMEU4NzU0RSAvKiBXZWJQcm9jZXNzU2hpbS5k
eWxpYiBpbiBDb3B5IFdlYiBQcm9jZXNzIFNoaW0gKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTEwMDMxRjYxMzc5Q0FDQjAwQzhERkU0IC8qIFdlYlByb2Nlc3NTaGltLmR5bGli
ICovOyB9OwpAQCAtNDYxLDcgKzQ3MCw2IEBACiAJCTUxQTlFMTI5MTMxNUVEMzUwMDlFNzAzMSAv
KiBXZWJLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQTlFMTI1MTMxNUVEMzUwMDlFNzAzMSAvKiBX
ZWJLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyTWVzc2FnZXMuaCAqLzsgfTsKIAkJNTFBOUUxMkExMzE1
RUQzNTAwOUU3MDMxIC8qIFdlYktleVZhbHVlU3RvcmFnZU1hbmFnZXJQcm94eU1lc3NhZ2VSZWNl
aXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MUE5RTEyNjEzMTVFRDM1MDA5RTcwMzEgLyogV2ViS2V5VmFsdWVTdG9yYWdlTWFuYWdlclByb3h5
TWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKIAkJNTFBOUUxMkIxMzE1RUQzNTAwOUU3MDMxIC8q
IFdlYktleVZhbHVlU3RvcmFnZU1hbmFnZXJQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUE5RTEyNzEzMTVFRDM1MDA5RTcwMzEg
LyogV2ViS2V5VmFsdWVTdG9yYWdlTWFuYWdlclByb3h5TWVzc2FnZXMuaCAqLzsgfTsKLQkJNTFB
QkY2NUExNjM5MkYyMDAwMTMyQTdBIC8qIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUFCRjY1NjE2Mzky
RjE1MDAxMzJBN0EgLyogV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcCAqLzsgfTsKIAkJNTFB
Q0JCODIxMjdBOEJBRDAwRDIwM0I5IC8qIFdlYkNvbnRleHRNZW51UHJveHkuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQUNCQjgxMTI3QThCQUQwMEQy
MDNCOSAvKiBXZWJDb250ZXh0TWVudVByb3h5LmggKi87IH07CiAJCTUxQUNCQkEwMTI3QThGMkMw
MEQyMDNCOSAvKiBXZWJDb250ZXh0TWVudVByb3h5TWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUFDQkI5RTEyN0E4RjJDMDBEMjAzQjkgLyogV2Vi
Q29udGV4dE1lbnVQcm94eU1hYy5oICovOyB9OwogCQk1MUFDQkJBMTEyN0E4RjJDMDBEMjAzQjkg
LyogV2ViQ29udGV4dE1lbnVQcm94eU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxQUNCQjlGMTI3QThGMkMwMEQyMDNCOSAvKiBXZWJDb250ZXh0
TWVudVByb3h5TWFjLm1tICovOyB9OwpAQCAtNDgwLDkgKzQ4OCwxMiBAQAogCQk1MUQxMzA1NTEz
ODJFQUMwMDAzNTFFREQgLyogU2VjSXRlbVJlc3BvbnNlRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUQxMzA1MTEzODJFQUMwMDAzNTFFREQg
LyogU2VjSXRlbVJlc3BvbnNlRGF0YS5jcHAgKi87IH07CiAJCTUxRDEzMDU2MTM4MkVBQzAwMDM1
MUVERCAvKiBTZWNJdGVtUmVzcG9uc2VEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MUQxMzA1MjEzODJFQUMwMDAzNTFFREQgLyogU2VjSXRlbVJl
c3BvbnNlRGF0YS5oICovOyB9OwogCQk1MUQxMzA1ODEzODJGMTA1MDAzNTFFREQgLyogV2ViUHJv
Y2Vzc1Byb3h5TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTFEMTMwNTcxMzgyRjEwNTAwMzUxRUREIC8qIFdlYlByb2Nlc3NQcm94eU1hYy5tbSAq
LzsgfTsKKwkJNTFERDlGMjgxNjM2N0RBMjAwMTU3OEU5IC8qIE5ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxREQ5RjI2MTYzNjdEQTIwMDE1NzhFOSAvKiBOZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CisJCTUxREQ5RjI5
MTYzNjdEQTIwMDE1NzhFOSAvKiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2Vz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUREOUYy
NzE2MzY3REEyMDAxNTc4RTkgLyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdl
cy5oICovOyB9OwogCQk1MUVGQzFDRjE1MjRFNjI1MDBDOUE5MzggLyogV0tCdW5kbGVET01XaW5k
b3dFeHRlbnNpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxRkEyRDU0MTUyMTExODYwMEMxQkEwQiAvKiBXS0J1bmRsZURPTVdpbmRvd0V4dGVuc2lv
bi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUx
RkEyRDc0MTUyMTJERjEwMEMxQkEwQiAvKiBJbmplY3RlZEJ1bmRsZURPTVdpbmRvd0V4dGVuc2lv
bi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUZB
MkQ1QzE1MjExQTUwMDBDMUJBMEIgLyogSW5qZWN0ZWRCdW5kbGVET01XaW5kb3dFeHRlbnNpb24u
Y3BwICovOyB9OwogCQk1MUZBMkQ3NzE1MjEyRTI2MDBDMUJBMEIgLyogV0tCdW5kbGVET01XaW5k
b3dFeHRlbnNpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTFGQTJENzUxNTIxMkUxRTAwQzFCQTBCIC8qIFdLQnVuZGxlRE9NV2luZG93RXh0ZW5z
aW9uLmNwcCAqLzsgfTsKKwkJNTFGQjA4RkYxNjM5REUxQTAwRUMzMjRBIC8qIFdlYlJlc291cmNl
TG9hZFNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MUFCRjY1NjE2MzkyRjE1MDAxMzJBN0EgLyogV2ViUmVzb3VyY2VMb2FkU2NoZWR1
bGVyLmNwcCAqLzsgfTsKIAkJNTI3MkIyOEExNDA2OTg1RDAwOTZBNUQwIC8qIFN0YXRpc3RpY3NE
YXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUy
NzJCMjg4MTQwNjk4NUQwMDk2QTVEMCAvKiBTdGF0aXN0aWNzRGF0YS5jcHAgKi87IH07CiAJCTUy
NzJCMjhCMTQwNjk4NUQwMDk2QTVEMCAvKiBTdGF0aXN0aWNzRGF0YS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI3MkIyODkxNDA2OTg1RDAwOTZBNUQw
IC8qIFN0YXRpc3RpY3NEYXRhLmggKi87IH07CiAJCTVEMUEyMzkxMTVFNzVCMjIwMDIzRTk4MSAv
KiB3ZWJraXQyIGluIENvcHkgTWVzc2FnZSBHZW5lcmF0aW9uIFNjcmlwdHMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUQxQTIzOEUxNUU3NUFENTAwMjNFOTgxIC8qIHdlYmtp
dDIgKi87IH07CkBAIC0xNTU1LDYgKzE1NjYsOSBAQAogCQk1MTI5MzVENjEyODhEMTk0MDBBNEI2
OTUgLyogV2ViQ29udGV4dE1lbnVJdGVtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYkNvbnRleHRNZW51SXRlbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MTI5MzVFMTEyODhEOTc4MDBBNEI2OTUgLyogSW5qZWN0ZWRCdW5kbGVQYWdlQ29udGV4dE1lbnVD
bGllbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5qZWN0ZWRC
dW5kbGVQYWdlQ29udGV4dE1lbnVDbGllbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MTI5MzVFMjEyODhEOTc4MDBBNEI2OTUgLyogSW5qZWN0ZWRCdW5kbGVQYWdlQ29udGV4
dE1lbnVDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5qZWN0ZWRC
dW5kbGVQYWdlQ29udGV4dE1lbnVDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTEyQzA2ODYxNjM4RjY3RTAwQUJCOTExIC8qIEhvc3RSZWNvcmQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSG9zdFJlY29yZC5jcHA7IHBhdGggPSBOZXR3b3Jr
UHJvY2Vzcy9Ib3N0UmVjb3JkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTEy
QzA2ODcxNjM4RjY3RTAwQUJCOTExIC8qIEhvc3RSZWNvcmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gSG9zdFJlY29yZC5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvSG9zdFJl
Y29yZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTJDMDY4RjE2MzkwRTY5MDBB
QkI5MTEgLyogTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlck1hYy5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXJN
YWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMkRGNkQ2MTM4QzE4MUEwMEEy
MkZDNiAvKiBLZXljaGFpbkl0ZW1TaGltTWV0aG9kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBLZXljaGFpbkl0ZW1TaGltTWV0aG9kcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MTJERjZENzEzOEMxODFBMDBBMjJGQzYgLyogS2V5Y2hhaW5JdGVtU2hpbU1l
dGhvZHMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBLZXljaGFp
bkl0ZW1TaGltTWV0aG9kcy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEyRTM1
MjAxMzBCNTUwMTAwQUJEMTlBIC8qIFdlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHkuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViQXBwbGljYXRpb25DYWNo
ZU1hbmFnZXJQcm94eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjAzLDYg
KzE2MTcsMTIgQEAKIAkJNTE2QTRBNUIxMjBBMkNDRDAwQzA1QjdGIC8qIFdlYkVycm9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkVycm9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUxN0EzM0IzMTMwQjMwOEMwMEY4MENCNSAvKiBXS0FwcGxpY2F0aW9u
Q2FjaGVNYW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdL
QXBwbGljYXRpb25DYWNoZU1hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MTdBMzNCNDEzMEIzMDhDMDBGODBDQjUgLyogV0tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0FwcGxpY2F0aW9uQ2FjaGVNYW5h
Z2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxN0NGMEREMTYzQTQ0NEMwMEMy
OTUwRSAvKiBOZXR3b3JrUmVxdWVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBOZXR3b3JrUmVxdWVzdC5jcHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UmVxdWVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxN0NGMERFMTYzQTQ0
NEMwMEMyOTUwRSAvKiBOZXR3b3JrUmVxdWVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBOZXR3b3JrUmVxdWVzdC5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jl
cXVlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE3Q0YwRTExNjNBNDg2QzAw
QzI5NTBFIC8qIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rp
b25NZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTdD
RjBFMjE2M0E0ODZDMDBDMjk1MEUgLyogTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3NDb25uZWN0
aW9uTWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE4MjlEQTMxNjM3
QzcwQzAwMDk1M0Q2IC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxl
ci5jcHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE4MjlEQTQxNjM3QzcwQzAwMDk1
M0Q2IC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlci5oOyBwYXRoID0gTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MTgzNDU5MDEzNDUzMkU4MDA5MkI2OTYgLyogV2ViSWNvbkRhdGFi
YXNlQ2xpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYklj
b25EYXRhYmFzZUNsaWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxODM0
NTkxMTM0NTMyRTgwMDkyQjY5NiAvKiBXZWJJY29uRGF0YWJhc2VDbGllbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViSWNvbkRhdGFiYXNlQ2xpZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxODNCMzkzMTM3OUY4NUMwMEU4NzU0RSAvKiBTaGltLnhj
Y29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IFNoaW0ueGNjb25maWc7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjU5LDEwICsxNjc5LDEzIEBACiAJCTUxRDEz
MDUxMTM4MkVBQzAwMDM1MUVERCAvKiBTZWNJdGVtUmVzcG9uc2VEYXRhLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNlY0l0ZW1SZXNwb25zZURhdGEuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUQxMzA1MjEzODJFQUMwMDAzNTFFREQgLyogU2Vj
SXRlbVJlc3BvbnNlRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZWNJ
dGVtUmVzcG9uc2VEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRDEzMDU3
MTM4MkYxMDUwMDM1MUVERCAvKiBXZWJQcm9jZXNzUHJveHlNYWMubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJQcm9jZXNzUHJveHlNYWMubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxREQ5RjI2MTYzNjdEQTIwMDE1NzhFOSAvKiBOZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3Nh
Z2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxREQ5RjI3MTYz
NjdEQTIwMDE1NzhFOSAvKiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzTWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFGQTJENTQx
NTIxMTE4NjAwQzFCQTBCIC8qIFdLQnVuZGxlRE9NV2luZG93RXh0ZW5zaW9uLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQnVuZGxlRE9NV2luZG93RXh0ZW5zaW9uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRkEyRDVBMTUyMTFBMUUwMEMxQkEwQiAvKiBJ
bmplY3RlZEJ1bmRsZURPTVdpbmRvd0V4dGVuc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBJbmplY3RlZEJ1bmRsZURPTVdpbmRvd0V4dGVuc2lvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MUZBMkQ1QzE1MjExQTUwMDBDMUJBMEIgLyogSW5qZWN0ZWRC
dW5kbGVET01XaW5kb3dFeHRlbnNpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSW5qZWN0ZWRCdW5kbGVET01XaW5kb3dFeHRlbnNpb24uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MUZBMkQ3NTE1MjEyRTFFMDBDMUJBMEIgLyogV0tCdW5kbGVE
T01XaW5kb3dFeHRlbnNpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV0tCdW5kbGVET01XaW5kb3dFeHRlbnNpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1MUZCMDkwMjE2M0EzQjFDMDBFQzMyNEEgLyogTmV0d29ya1Byb2Nlc3NDb25uZWN0
aW9uLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgbmFtZSA9IE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5p
bjsgcGF0aCA9IE5ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MjcyQjI4ODE0MDY5ODVEMDA5NkE1RDAgLyog
U3RhdGlzdGljc0RhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U3RhdGlzdGljc0RhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MjcyQjI4
OTE0MDY5ODVEMDA5NkE1RDAgLyogU3RhdGlzdGljc0RhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU3RhdGlzdGljc0RhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNUQxQTIzOEUxNUU3NUFENTAwMjNFOTgxIC8qIHdlYmtpdDIgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBmb2xkZXI7IHBhdGggPSB3ZWJraXQy
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjk1NSw2ICsyOTc4LDcgQEAKIAkJCWNo
aWxkcmVuID0gKAogCQkJCTUxMDVCMEQ0MTYyRjdBN0EwMEUyNzcwOSAvKiBOZXR3b3JrUHJvY2Vz
c0Nvbm5lY3Rpb24uY3BwICovLAogCQkJCTUxMDVCMEQ1MTYyRjdBN0EwMEUyNzcwOSAvKiBOZXR3
b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uaCAqLywKKwkJCQk1MUZCMDkwMjE2M0EzQjFDMDBFQzMyNEEg
LyogTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluICovLAogCQkJCTUxQUJGNjU2
MTYzOTJGMTUwMDEzMkE3QSAvKiBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwICovLAogCQkJ
CTUxQUJGNjU3MTYzOTJGMTUwMDEzMkE3QSAvKiBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCAq
LywKIAkJCSk7CkBAIC0yOTY1LDYgKzI5ODksOCBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKIAkJCQk1MTBDQzdEQzE2MTM4RTI5MDBEMDNFRDMgLyogbWFjICovLAorCQkJ
CTUxMkMwNjg2MTYzOEY2N0UwMEFCQjkxMSAvKiBIb3N0UmVjb3JkLmNwcCAqLywKKwkJCQk1MTJD
MDY4NzE2MzhGNjdFMDBBQkI5MTEgLyogSG9zdFJlY29yZC5oICovLAogCQkJCTUxM0ExNjQ5MTYz
MEE5QkYwMDVEN0QyMiAvKiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAgKi8sCiAJ
CQkJNTEzQTE2NEExNjMwQTlCRjAwNUQ3RDIyIC8qIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzLmggKi8sCiAJCQkJNTEzQTE2NEIxNjMwQTlCRjAwNUQ3RDIyIC8qIE5ldHdvcmtDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluICovLApAQCAtMjk3Miw2ICsyOTk4LDEwIEBACiAJ
CQkJNTEwQ0M3RTAxNjEzOEUyOTAwRDAzRUQzIC8qIE5ldHdvcmtQcm9jZXNzLmggKi8sCiAJCQkJ
NTFBOEE2MTcxNjI3RjVCQjAwMEQ5MEU5IC8qIE5ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluICov
LAogCQkJCTUxMENDN0UxMTYxMzhFMjkwMEQwM0VEMyAvKiBOZXR3b3JrUHJvY2Vzc01haW4uaCAq
LywKKwkJCQk1MTdDRjBERDE2M0E0NDRDMDBDMjk1MEUgLyogTmV0d29ya1JlcXVlc3QuY3BwICov
LAorCQkJCTUxN0NGMERFMTYzQTQ0NEMwMEMyOTUwRSAvKiBOZXR3b3JrUmVxdWVzdC5oICovLAor
CQkJCTUxODI5REEzMTYzN0M3MEMwMDA5NTNENiAvKiBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1
bGVyLmNwcCAqLywKKwkJCQk1MTgyOURBNDE2MzdDNzBDMDAwOTUzRDYgLyogTmV0d29ya1Jlc291
cmNlTG9hZFNjaGVkdWxlci5oICovLAogCQkJKTsKIAkJCW5hbWUgPSBOZXR3b3JrUHJvY2VzczsK
IAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yOTgxLDYgKzMwMTEsNyBAQAogCQkJY2hp
bGRyZW4gPSAoCiAJCQkJNTFBOEE2MTUxNjI3RjNGOTAwMEQ5MEU5IC8qIE5ldHdvcmtQcm9jZXNz
TWFjLm1tICovLAogCQkJCTUxMENDN0REMTYxMzhFMjkwMEQwM0VEMyAvKiBOZXR3b3JrUHJvY2Vz
c01haW5NYWMubW0gKi8sCisJCQkJNTEyQzA2OEYxNjM5MEU2OTAwQUJCOTExIC8qIE5ldHdvcmtS
ZXNvdXJjZUxvYWRTY2hlZHVsZXJNYWMubW0gKi8sCiAJCQkpOwogCQkJbmFtZSA9IG1hYzsKIAkJ
CXBhdGggPSBOZXR3b3JrUHJvY2Vzcy9tYWM7CkBAIC00MDQ5LDYgKzQwODAsMTAgQEAKIAkJCQkx
QTY0MjMwNzEyREQwOUVCMDBDQUFFMkMgLyogRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VzLmggKi8s
CiAJCQkJMUFBNTc1RkYxNDk2QjdDMDAwQTRFRTA2IC8qIEV2ZW50RGlzcGF0Y2hlck1lc3NhZ2VS
ZWNlaXZlci5jcHAgKi8sCiAJCQkJMUFBNTc2MDAxNDk2QjdDMDAwQTRFRTA2IC8qIEV2ZW50RGlz
cGF0Y2hlck1lc3NhZ2VzLmggKi8sCisJCQkJNTFERDlGMjYxNjM2N0RBMjAwMTU3OEU5IC8qIE5l
dHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKKwkJCQk1
MUREOUYyNzE2MzY3REEyMDAxNTc4RTkgLyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NN
ZXNzYWdlcy5oICovLAorCQkJCTUxN0NGMEUxMTYzQTQ4NkMwMEMyOTUwRSAvKiBOZXR3b3JrUHJv
Y2Vzc0Nvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwICovLAorCQkJCTUxN0NGMEUyMTYzQTQ4
NkMwMEMyOTUwRSAvKiBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlcy5oICovLAogCQkJ
CTUxQUNDOTM0MTYyODA2NDgwMDM0MjU1MCAvKiBOZXR3b3JrUHJvY2Vzc01lc3NhZ2VSZWNlaXZl
ci5jcHAgKi8sCiAJCQkJNTFBQ0M5MzUxNjI4MDY0ODAwMzQyNTUwIC8qIE5ldHdvcmtQcm9jZXNz
TWVzc2FnZXMuaCAqLywKIAkJCQk1MTNBMTYzQTE2MzA4OEY2MDA1RDdEMjIgLyogTmV0d29ya1By
b2Nlc3NQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCkBAIC00NzQ4LDYgKzQ3ODMsMTEgQEAK
IAkJCQk1MTNBMTYzRDE2MzA4OEY2MDA1RDdEMjIgLyogTmV0d29ya1Byb2Nlc3NQcm94eU1lc3Nh
Z2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTNBMTY0RDE2MzBBOUJGMDA1RDdEMjIgLyogTmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMTNCRUI0
MTYzNUE5QzgwMEYxOUMwMyAvKiBTdHJpbmdSZWZlcmVuY2UuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTUxREQ5RjI5MTYzNjdEQTIwMDE1NzhFOSAvKiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
c01lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MTgyOURBNjE2MzdDNzBDMDAwOTUzRDYg
LyogTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTEy
QzA2ODkxNjM4RjY3RTAwQUJCOTExIC8qIEhvc3RSZWNvcmQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTUxN0NGMEUwMTYzQTQ0NEMwMEMyOTUwRSAvKiBOZXR3b3JrUmVxdWVzdC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNTE3Q0YwRTQxNjNBNDg2QzAwQzI5NTBFIC8qIE5ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbk1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTU2OTksNyArNTczOSwxMyBAQAogCQkJ
CTUxM0ExNjRDMTYzMEE5QkYwMDVEN0QyMiAvKiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTgzRERFQzE2MzBCREZDMDA4QkU1QzcgLyogTmV0
d29ya1Byb2Nlc3NDb25uZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMTNCRUIzMTYz
NUE5QzgwMEYxOUMwMyAvKiBTdHJpbmdSZWZlcmVuY2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJ
NTFBQkY2NUExNjM5MkYyMDAwMTMyQTdBIC8qIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk1MUREOUYyODE2MzY3REEyMDAxNTc4RTkgLyogTmV0d29ya0Nv
bm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJNTE4MjlEQTUxNjM3QzcwQzAwMDk1M0Q2IC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVs
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTEyQzA2ODgxNjM4RjY3RTAwQUJCOTExIC8qIEhv
c3RSZWNvcmQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTEyQzA2OTAxNjM5MEU2OTAwQUJCOTEx
IC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXJNYWMubW0gaW4gU291cmNlcyAqLywKKwkJ
CQk1MUZCMDhGRjE2MzlERTFBMDBFQzMyNEEgLyogV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTUxN0NGMERGMTYzQTQ0NEMwMEMyOTUwRSAvKiBOZXR3b3Jr
UmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MTdDRjBFMzE2M0E0ODZDMDBDMjk1MEUg
LyogTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL05ldHdv
cmtQcm9jZXNzQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdv
cmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmNwcAppbmRleCBkZDlkNmNiLi43ZWE0YzlmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsv
TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmNwcApAQCAtNDIsMTIgKzQyLDE4IEBAIE5ldHdvcmtQ
cm9jZXNzQ29ubmVjdGlvbjo6fk5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpCiB7CiB9CiAKLXZv
aWQgTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZShDb3JlSVBDOjpD
b25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpNZXNzYWdlRGVjb2RlciYp
Cit2b2lkIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2UoQ29yZUlQ
Qzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29yZUlQQzo6TWVzc2FnZUlEIG1lc3NhZ2VJRCwg
Q29yZUlQQzo6TWVzc2FnZURlY29kZXImIGRlY29kZXIpCiB7CisgICAgaWYgKG1lc3NhZ2VJRC5p
czxDb3JlSVBDOjpNZXNzYWdlQ2xhc3NOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24+KCkpIHsKKyAg
ICAgICAgZGlkUmVjZWl2ZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2UoY29ubmVjdGlv
biwgbWVzc2FnZUlELCBkZWNvZGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OmRp
ZFJlY2VpdmVTeW5jTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2Fn
ZUlELCBDb3JlSVBDOjpNZXNzYWdlRGVjb2RlciYsIE93blB0cjxDb3JlSVBDOjpNZXNzYWdlRW5j
b2Rlcj4mKQogeworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB2b2lkIE5ldHdvcmtQ
cm9jZXNzQ29ubmVjdGlvbjo6ZGlkQ2xvc2UoQ29yZUlQQzo6Q29ubmVjdGlvbiopCkBAIC02MCw2
ICs2NiwxMCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZUludmFs
aWRNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDbwogewogfQogCit2b2lkIE5ldHdvcmtQ
cm9jZXNzQ29ubmVjdGlvbjo6c3RhcnRSZXNvdXJjZUxvYWQoUmVzb3VyY2VMb2FkSWRlbnRpZmll
ciByZXNvdXJjZUxvYWRJZGVudGlmaWVyKQoreworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLndl
YlJlc291cmNlTG9hZFNjaGVkdWxlcigpLnN0YXJ0UmVzb3VyY2VMb2FkKHJlc291cmNlTG9hZElk
ZW50aWZpZXIpOworfQogICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rp
b24uaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0Nv
bm5lY3Rpb24uaAppbmRleCA2NWUyNTk4Li4wOWUyMTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmgKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ29ubmVjdGlv
bi5oCkBAIC0zNCw2ICszNCw4IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCit0eXBlZGVmIHVp
bnQ2NF90IFJlc291cmNlTG9hZElkZW50aWZpZXI7CisKIGNsYXNzIE5ldHdvcmtQcm9jZXNzQ29u
bmVjdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbj4sIENv
cmVJUEM6OkNvbm5lY3Rpb246OkNsaWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uPiBjcmVhdGUoQ29yZUlQQzo6Q29ubmVjdGlvbjo6
SWRlbnRpZmllciBjb25uZWN0aW9uSWRlbnRpZmllcikKQEAgLTUzLDYgKzU1LDEwIEBAIHByaXZh
dGU6CiAgICAgdmlydHVhbCB2b2lkIGRpZENsb3NlKENvcmVJUEM6OkNvbm5lY3Rpb24qKTsKICAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rp
b24qLCBDb3JlSVBDOjpNZXNzYWdlSUQpOwogCisgICAgdm9pZCBkaWRSZWNlaXZlTmV0d29ya1By
b2Nlc3NDb25uZWN0aW9uTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVz
c2FnZUlELCBDb3JlSVBDOjpNZXNzYWdlRGVjb2RlciYpOworCisgICAgdm9pZCBzdGFydFJlc291
cmNlTG9hZChSZXNvdXJjZUxvYWRJZGVudGlmaWVyKTsKKwogICAgIC8vIFRoZSBjb25uZWN0aW9u
IGZyb20gdGhlIHdlYiBwcm9jZXNzIHRvIHRoZSBuZXR3b3JrIHByb2Nlc3MuCiAgICAgUmVmUHRy
PENvcmVJUEM6OkNvbm5lY3Rpb24+IG1fY29ubmVjdGlvbjsKIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLm1l
c3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi44NWY4NDE1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgpAQCAtMCwwICsx
LDMyIEBACisjIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisj
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpZiBFTkFC
TEUoTkVUV09SS19QUk9DRVNTKQorCittZXNzYWdlcyAtPiBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rp
b24geworCisgICAgLy8gRklYTUU6IFRoaXMgbWVzc2FnZSBpcyBmb3IgdGhlIE5ldHdvcmtQcm9j
ZXNzIHRvIHRlbGwgdGhlIFdlYlByb2Nlc3MgdG8gc3RhcnQgYSBsb2FkLgorICAgIC8vIE9uY2Ug
dGhlIE5ldHdvcmtQcm9jZXNzIGlzIGRvaW5nIHRoZSBsb2FkaW5nIGl0c2VsZiB0aGVuIHdlIHNo
b3VsZCByZW1vdmUgaXQuCisgICAgU3RhcnRSZXNvdXJjZUxvYWQodWludDY0X3QgcmVzb3VyY2VM
b2FkSWRlbnRpZmllcikKK30KKworI2VuZGlmIC8vIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VM
b2FkU2NoZWR1bGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9XZWJS
ZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCmluZGV4IDBhZjZkNDUuLjIzNTgyMmUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRTY2hl
ZHVsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNv
dXJjZUxvYWRTY2hlZHVsZXIuY3BwCkBAIC0yNiwxNiArMjYsMTc4IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgiCiAKKyNpbmNsdWRl
ICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNz
YWdlcy5oIgorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUg
IldlYkNvcmVBcmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL0RvY3VtZW50TG9hZGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL05l
dHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxv
YWRlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU3VicmVzb3VyY2VMb2FkZXIuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKICNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQogCiB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK1dlYlJlc291
cmNlTG9hZFNjaGVkdWxlcjo6V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkKKyAgICA6IG1fc3Vz
cGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50KDApCit7Cit9CisKIFdlYlJlc291cmNlTG9hZFNjaGVk
dWxlcjo6fldlYlJlc291cmNlTG9hZFNjaGVkdWxlcigpCiB7CiB9CiAKK1Bhc3NSZWZQdHI8U3Vi
cmVzb3VyY2VMb2FkZXI+IFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVTdWJyZXNv
dXJjZUxvYWQoRnJhbWUqIGZyYW1lLCBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHksIGNv
bnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBSZWZQdHI8U3VicmVz
b3VyY2VMb2FkZXI+IGxvYWRlciA9IFN1YnJlc291cmNlTG9hZGVyOjpjcmVhdGUoZnJhbWUsIHJl
c291cmNlLCByZXF1ZXN0LCBvcHRpb25zKTsKKyAgICBpZiAobG9hZGVyKQorICAgICAgICBzY2hl
ZHVsZUxvYWQobG9hZGVyLmdldCgpLCBwcmlvcml0eSk7CisgICAgcmV0dXJuIGxvYWRlci5yZWxl
YXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IFdlYlJl
c291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVQbHVnaW5TdHJlYW1Mb2FkKEZyYW1lKiBmcmFt
ZSwgTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQqIGNsaWVudCwgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIFJlZlB0cjxOZXRzY2FwZVBsdWdJblN0cmVhbUxv
YWRlcj4gbG9hZGVyID0gTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI6OmNyZWF0ZShmcmFtZSwg
Y2xpZW50LCByZXF1ZXN0KTsKKyAgICBpZiAobG9hZGVyKQorICAgICAgICBzY2hlZHVsZUxvYWQo
bG9hZGVyLmdldCgpLCBSZXNvdXJjZUxvYWRQcmlvcml0eUxvdyk7CisgICAgcmV0dXJuIGxvYWRl
ci5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVs
ZUxvYWQoUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9hZGVyLCBSZXNvdXJjZUxvYWRQcmlvcml0
eSBwcmlvcml0eSkKK3sKKyAgICBMT0coTmV0d29yaywgIihXZWJQcm9jZXNzKSBXZWJSZXNvdXJj
ZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlTG9hZCwgdXJsICclcycgcHJpb3JpdHkgJWkiLCByZXNv
dXJjZUxvYWRlci0+dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgcHJpb3JpdHkpOworCisg
ICAgQVNTRVJUKHJlc291cmNlTG9hZGVyKTsKKyAgICBBU1NFUlQocHJpb3JpdHkgIT0gUmVzb3Vy
Y2VMb2FkUHJpb3JpdHlVbnJlc29sdmVkKTsKKyAgICBwcmlvcml0eSA9IFJlc291cmNlTG9hZFBy
aW9yaXR5SGlnaGVzdDsKKworICAgIC8vIElmIHRoZXJlJ3MgYSB3ZWIgYXJjaGl2ZSByZXNvdXJj
ZSBmb3IgdGhpcyBVUkwsIHdlIGRvbid0IG5lZWQgdG8gc2NoZWR1bGUgdGhlIGxvYWQgc2luY2Ug
aXQgd2lsbCBuZXZlciB0b3VjaCB0aGUgbmV0d29yay4KKyAgICBpZiAocmVzb3VyY2VMb2FkZXIt
PmRvY3VtZW50TG9hZGVyKCktPmFyY2hpdmVSZXNvdXJjZUZvclVSTChyZXNvdXJjZUxvYWRlci0+
cmVxdWVzdCgpLnVybCgpKSkgeworICAgICAgICBzdGFydFJlc291cmNlTG9hZGVyKHJlc291cmNl
TG9hZGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSZXNvdXJjZUxvYWRJ
ZGVudGlmaWVyIGlkZW50aWZpZXI7CisgICAgCisgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3Qg
PSByZXNvdXJjZUxvYWRlci0+cmVxdWVzdCgpOworICAgIAorICAgIC8vIFdlIHdhbnQgdGhlIG5l
dHdvcmsgcHJvY2VzcyBpbnZvbHZlZCBpbiBzY2hlZHVsaW5nIGRhdGEgVVJMIGxvYWRzIGJ1dCBp
dCBkb2Vzbid0IG5lZWQgdG8ga25vdyB0aGUgZnVsbCAob2Z0ZW4gbG9uZykgVVJMLgorICAgIGlm
IChyZXF1ZXN0LnVybCgpLnByb3RvY29sSXNEYXRhKCkpIHsKKyAgICAgICAgIERFRklORV9TVEFU
SUNfTE9DQUwoS1VSTCwgZGF0YVVSTCwgKEtVUkwoKSwgImRhdGE6IikpOworICAgICAgICAgcmVx
dWVzdC5zZXRVUkwoZGF0YVVSTCk7CisgICAgfQorCisgICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFy
ZWQoKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2Vz
OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6U2NoZWR1bGVOZXR3b3JrUmVxdWVzdChy
ZXF1ZXN0LCBwcmlvcml0eSksIE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6U2NoZWR1bGVOZXR3b3JrUmVxdWVzdDo6UmVwbHkoaWRlbnRpZmllciksIDApKSB7CisgICAg
ICAgIC8vIEZJWE1FOiBXaGF0IHNob3VsZCB3ZSBkbyBpZiB0aGlzIGZhaWxzPworICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgcmVzb3VyY2VMb2FkZXItPnNl
dElkZW50aWZpZXIoaWRlbnRpZmllcik7CisgICAgbV9wZW5kaW5nUmVzb3VyY2VMb2FkZXJzLnNl
dChpZGVudGlmaWVyLCByZXNvdXJjZUxvYWRlcik7CisgICAgCisgICAgbm90aWZ5RGlkU2NoZWR1
bGVSZXNvdXJjZVJlcXVlc3QocmVzb3VyY2VMb2FkZXIpOworfQorCit2b2lkIFdlYlJlc291cmNl
TG9hZFNjaGVkdWxlcjo6YWRkTWFpblJlc291cmNlTG9hZChSZXNvdXJjZUxvYWRlciogcmVzb3Vy
Y2VMb2FkZXIpCit7CisgICAgTE9HKE5ldHdvcmssICIoV2ViUHJvY2VzcykgV2ViUmVzb3VyY2VM
b2FkU2NoZWR1bGVyOjphZGRNYWluUmVzb3VyY2VMb2FkLCB1cmwgJyVzJyIsIHJlc291cmNlTG9h
ZGVyLT51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgIFJlc291cmNlTG9hZElk
ZW50aWZpZXIgaWRlbnRpZmllcjsKKworICAgIGlmICghV2ViUHJvY2Vzczo6c2hhcmVkKCkubmV0
d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29y
a0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkFkZExvYWRJblByb2dyZXNzKHJlc291cmNlTG9hZGVy
LT51cmwoKSksIE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6QWRkTG9h
ZEluUHJvZ3Jlc3M6OlJlcGx5KGlkZW50aWZpZXIpLCAwKSkgeworICAgICAgICAvLyBGSVhNRTog
V2hhdCBzaG91bGQgd2UgZG8gaWYgdGhpcyBmYWlscz8KKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgfQorCisgICAgcmVzb3VyY2VMb2FkZXItPnNldElkZW50aWZpZXIoaWRlbnRp
Zmllcik7CisgICAgCisgICAgbV9hY3RpdmVSZXNvdXJjZUxvYWRlcnMuc2V0KGlkZW50aWZpZXIs
IHJlc291cmNlTG9hZGVyKTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJl
bW92ZShSZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIpCit7CisgICAgQVNTRVJUKHJlc291
cmNlTG9hZGVyKTsKKyAgICBMT0coTmV0d29yaywgIihXZWJQcm9jZXNzKSBXZWJSZXNvdXJjZUxv
YWRTY2hlZHVsZXI6OnJlbW92ZSwgdXJsICclcyciLCByZXNvdXJjZUxvYWRlci0+dXJsKCkuc3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICAvLyBJdCdzIHBvc3NpYmxlIGZvciBhIHJlc291
cmNlTG9hZGVyIHRvIGJlIHJlbW92ZWQgYmVmb3JlIGl0IGV2ZXIgc3RhcnRlZCwKKyAgICAvLyBt
ZWFuaW5nIGl0IGRvZXNuJ3QgaGF2ZSBhbiBpZGVudGlmaWVyLgorICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgbWFrZSB0aGlzIG5vdCBiZSBwb3NzaWJsZS4KKyAgICAvLyBXZSBzaG91bGQgY2hhbmdl
IHRoZSBSZXNvdXJjZUxvYWRlciBjb2RlIHBhdGggc28gd2UgYWx3YXlzIGdldCBhbiBpZGVudGlm
aWVyIHRvIGl0IHdoZW4gaXQgaXMgY3JlYXRlZC4KKyAgICAKKyAgICBSZXNvdXJjZUxvYWRJZGVu
dGlmaWVyIGlkZW50aWZpZXIgPSByZXNvdXJjZUxvYWRlci0+aWRlbnRpZmllcigpOworICAgIGlm
ICghaWRlbnRpZmllcikgeworICAgICAgICBMT0dfRVJST1IoIldlYlJlc291cmNlTG9hZFNjaGVk
dWxlciByZW1vdmluZyBhIFJlc291cmNlTG9hZGVyIHRoYXQgaGFzIG5vIGlkZW50aWZpZXIuIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCku
bmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UmVtb3ZlTG9hZElkZW50aWZpZXIoaWRlbnRpZmllciks
IDApOworICAgIAorICAgIEFTU0VSVChtX3BlbmRpbmdSZXNvdXJjZUxvYWRlcnMuY29udGFpbnMo
aWRlbnRpZmllcikgfHwgbV9hY3RpdmVSZXNvdXJjZUxvYWRlcnMuY29udGFpbnMoaWRlbnRpZmll
cikpOworICAgIG1fcGVuZGluZ1Jlc291cmNlTG9hZGVycy5yZW1vdmUoaWRlbnRpZmllcik7Cisg
ICAgbV9hY3RpdmVSZXNvdXJjZUxvYWRlcnMucmVtb3ZlKGlkZW50aWZpZXIpOworfQorCit2b2lk
IFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6Y3Jvc3NPcmlnaW5SZWRpcmVjdFJlY2VpdmVkKFJl
c291cmNlTG9hZGVyKiByZXNvdXJjZUxvYWRlciwgY29uc3QgS1VSTCYgcmVkaXJlY3RVUkwpCit7
CisgICAgTE9HKE5ldHdvcmssICIoV2ViUHJvY2VzcykgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVy
Ojpjcm9zc09yaWdpblJlZGlyZWN0UmVjZWl2ZWQuIEZyb20gJyVzJyB0byAnJXMnIiwgcmVzb3Vy
Y2VMb2FkZXItPnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHJlZGlyZWN0VVJMLnN0cmlu
ZygpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgQVNTRVJUKHJlc291cmNlTG9hZGVyKTsKKyAgICBB
U1NFUlQocmVzb3VyY2VMb2FkZXItPmlkZW50aWZpZXIoKSk7CisKKyAgICBXZWJQcm9jZXNzOjpz
aGFyZWQoKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3Nh
Z2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Y3Jvc3NPcmlnaW5SZWRpcmVjdFJl
Y2VpdmVkKHJlc291cmNlTG9hZGVyLT5pZGVudGlmaWVyKCksIHJlZGlyZWN0VVJMKSwgTWVzc2Fn
ZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjcm9zc09yaWdpblJlZGlyZWN0UmVj
ZWl2ZWQ6OlJlcGx5KCksIDApOworfQorCit2b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6
c2VydmVQZW5kaW5nUmVxdWVzdHMoUmVzb3VyY2VMb2FkUHJpb3JpdHkgbWluaW11bVByaW9yaXR5
KQoreworICAgIExPRyhOZXR3b3JrLCAiKFdlYlByb2Nlc3MpIFdlYlJlc291cmNlTG9hZFNjaGVk
dWxlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMiKTsKKyAgICAKKyAgICAvLyBJZiB0aGlzIFdlYlBy
b2Nlc3MgaGFzIGl0cyBvd24gcmVxdWVzdCBzdXNwZW5zaW9uIGNvdW50IHRoZW4gd2UgZG9uJ3Qg
ZXZlbgorICAgIC8vIGhhdmUgdG8gYm90aGVyIG1lc3NhZ2luZyB0aGUgTmV0d29ya1Byb2Nlc3Mu
CisgICAgaWYgKG1fc3VzcGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50KQorICAgICAgICByZXR1cm47
CisKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0
aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpTZXJ2
ZVBlbmRpbmdSZXF1ZXN0cyhtaW5pbXVtUHJpb3JpdHkpLCAwKTsKK30KKwordm9pZCBXZWJSZXNv
dXJjZUxvYWRTY2hlZHVsZXI6OnN1c3BlbmRQZW5kaW5nUmVxdWVzdHMoKQoreworICAgIFdlYlBy
b2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZFN5
bmMoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpTdXNwZW5kUGVuZGlu
Z1JlcXVlc3RzKCksIE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6U3Vz
cGVuZFBlbmRpbmdSZXF1ZXN0czo6UmVwbHkoKSwgMCk7CisKKyAgICArK21fc3VzcGVuZFBlbmRp
bmdSZXF1ZXN0c0NvdW50OworfQorCit2b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVz
dW1lUGVuZGluZ1JlcXVlc3RzKCkKK3sKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3Jr
Q29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzczo6UmVzdW1lUGVuZGluZ1JlcXVlc3RzKCksIE1lc3NhZ2VzOjpO
ZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UmVzdW1lUGVuZGluZ1JlcXVlc3RzOjpSZXBs
eSgpLCAwKTsKKworICAgIEFTU0VSVChtX3N1c3BlbmRQZW5kaW5nUmVxdWVzdHNDb3VudCk7Cisg
ICAgLS1tX3N1c3BlbmRQZW5kaW5nUmVxdWVzdHNDb3VudDsKK30KKwordm9pZCBXZWJSZXNvdXJj
ZUxvYWRTY2hlZHVsZXI6OnNldFNlcmlhbExvYWRpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sK
KyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9u
KCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6U2V0
U2VyaWFsTG9hZGluZ0VuYWJsZWQoZW5hYmxlZCksIE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzczo6U2V0U2VyaWFsTG9hZGluZ0VuYWJsZWQ6OlJlcGx5KCksIDApOworfQor
Cit2b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c3RhcnRSZXNvdXJjZUxvYWQoUmVzb3Vy
Y2VMb2FkSWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAgIFJlZlB0cjxSZXNvdXJjZUxvYWRl
cj4gbG9hZGVyID0gbV9wZW5kaW5nUmVzb3VyY2VMb2FkZXJzLnRha2UoaWRlbnRpZmllcik7Cisg
ICAgQVNTRVJUKGxvYWRlcik7CisgICAgCisgICAgTE9HKE5ldHdvcmssICIoV2ViUHJvY2Vzcykg
V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzdGFydFJlc291cmNlTG9hZCBzdGFydGluZyBsb2Fk
IGZvciAnJXMnIiwgbG9hZGVyLT51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAg
IG1fYWN0aXZlUmVzb3VyY2VMb2FkZXJzLnNldChpZGVudGlmaWVyLCBsb2FkZXIpOworCisgICAg
c3RhcnRSZXNvdXJjZUxvYWRlcihsb2FkZXIuZ2V0KCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKIAogI2VuZGlmIC8vIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVy
LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkU2No
ZWR1bGVyLmgKaW5kZXggZGZkOTg1Zi4uOTVkYjUwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIu
aApAQCAtMjYsMTUgKzI2LDUxIEBACiAjaWZuZGVmIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcl9o
CiAjZGVmaW5lIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcl9oCiAKKyNpbmNsdWRlIDxXZWJDb3Jl
L1Jlc291cmNlTG9hZFByaW9yaXR5Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRT
Y2hlZHVsZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZGVyLmg+CiAKICNpZiBF
TkFCTEUoTkVUV09SS19QUk9DRVNTKQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorY2xhc3MgTmV0
d29ya1Byb2Nlc3NDb25uZWN0aW9uOwordHlwZWRlZiB1aW50NjRfdCBSZXNvdXJjZUxvYWRJZGVu
dGlmaWVyOworCiBjbGFzcyBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIgOiBwdWJsaWMgV2ViQ29y
ZTo6UmVzb3VyY2VMb2FkU2NoZWR1bGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJS
ZXNvdXJjZUxvYWRTY2hlZHVsZXIpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoK
KyAgICBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsKICAgICB2aXJ0dWFsIH5XZWJSZXNvdXJj
ZUxvYWRTY2hlZHVsZXIoKTsKKyAgICAKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6
U3VicmVzb3VyY2VMb2FkZXI+IHNjaGVkdWxlU3VicmVzb3VyY2VMb2FkKFdlYkNvcmU6OkZyYW1l
KiwgV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2UqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmLCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRQcmlvcml0eSwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VMb2FkZXJPcHRpb25zJik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6Ok5ldHNj
YXBlUGx1Z0luU3RyZWFtTG9hZGVyPiBzY2hlZHVsZVBsdWdpblN0cmVhbUxvYWQoV2ViQ29yZTo6
RnJhbWUqLCBXZWJDb3JlOjpOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlckNsaWVudCosIGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOworICAgIAorICAgIHZpcnR1YWwgdm9pZCBhZGRN
YWluUmVzb3VyY2VMb2FkKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyKik7CisgICAgdmlydHVhbCB2
b2lkIHJlbW92ZShXZWJDb3JlOjpSZXNvdXJjZUxvYWRlciopOworICAgIHZpcnR1YWwgdm9pZCBj
cm9zc09yaWdpblJlZGlyZWN0UmVjZWl2ZWQoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXIqLCBjb25z
dCBXZWJDb3JlOjpLVVJMJiByZWRpcmVjdFVSTCk7CisgICAgCisgICAgdmlydHVhbCB2b2lkIHNl
cnZlUGVuZGluZ1JlcXVlc3RzKFdlYkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5IG1pbmltdW1Q
cmlvcml0eSA9IFdlYkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5VmVyeUxvdyk7CisKKyAgICB2
aXJ0dWFsIHZvaWQgc3VzcGVuZFBlbmRpbmdSZXF1ZXN0cygpOworICAgIHZpcnR1YWwgdm9pZCBy
ZXN1bWVQZW5kaW5nUmVxdWVzdHMoKTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRTZXJpYWxMb2Fk
aW5nRW5hYmxlZChib29sKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIHNjaGVkdWxlTG9hZChXZWJD
b3JlOjpSZXNvdXJjZUxvYWRlciosIFdlYkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5KTsKKwor
ICAgIC8vIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbiBnZXRzIHRvIHRlbGwgbG9hZHMgdG8gYWN0
dWFsbHkgc3RhcnQuCisgICAgLy8gRklYTUU6IE9uY2UgYWN0dWFsIGxvYWRpbmcgdGFrZXMgcGxh
Y2UgaW4gdGhlIE5ldHdvcmtQcm9jZXNzIHdlIHdvbid0IG5lZWQgdGhpcy4KKyAgICBmcmllbmQg
Y2xhc3MgTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOworICAgIHZvaWQgc3RhcnRSZXNvdXJjZUxv
YWQoUmVzb3VyY2VMb2FkSWRlbnRpZmllcik7CisgICAgCisgICAgdHlwZWRlZiBIYXNoTWFwPHVu
c2lnbmVkIGxvbmcsIFJlZlB0cjxXZWJDb3JlOjpSZXNvdXJjZUxvYWRlcj4gPiBSZXNvdXJjZUxv
YWRlck1hcDsKKyAgICBSZXNvdXJjZUxvYWRlck1hcCBtX3BlbmRpbmdSZXNvdXJjZUxvYWRlcnM7
CisgICAgUmVzb3VyY2VMb2FkZXJNYXAgbV9hY3RpdmVSZXNvdXJjZUxvYWRlcnM7CisgICAgCisg
ICAgdW5zaWduZWQgbV9zdXNwZW5kUGVuZGluZ1JlcXVlc3RzQ291bnQ7CisKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCmluZGV4
IDg4OTYwZjMuLmYxMmI4NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAK
QEAgLTEwNCwxNiArMTA0LDE4IEBAIHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpub3RpZnlD
b29raWVzQ2hhbmdlZCgpCiAvLyBMb2FkZXJTdHJhdGVneQogCiAjaWYgRU5BQkxFKE5FVFdPUktf
UFJPQ0VTUykKLQogUmVzb3VyY2VMb2FkU2NoZWR1bGVyKiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6
OnJlc291cmNlTG9hZFNjaGVkdWxlcigpCiB7CiAgICAgc3RhdGljIFJlc291cmNlTG9hZFNjaGVk
dWxlciogc2NoZWR1bGVyOwotICAgIGlmICghc2NoZWR1bGVyKQotICAgICAgICBzY2hlZHVsZXIg
PSAmV2ViUHJvY2Vzczo6c2hhcmVkKCkud2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCk7Ci0gICAg
ICAgIAorICAgIGlmICghc2NoZWR1bGVyKSB7CisgICAgICAgIGlmIChXZWJQcm9jZXNzOjpzaGFy
ZWQoKS51c2VzTmV0d29ya1Byb2Nlc3MoKSkKKyAgICAgICAgICAgIHNjaGVkdWxlciA9ICZXZWJQ
cm9jZXNzOjpzaGFyZWQoKS53ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgc2NoZWR1bGVyID0gV2ViQ29yZTo6cmVzb3VyY2VMb2FkU2NoZWR1bGVy
KCk7CisgICAgfQorICAgIAogICAgIHJldHVybiBzY2hlZHVsZXI7CiB9Ci0KICNlbmRpZgogCiAv
LyBQbHVnaW5TdHJhdGVneQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAK
aW5kZXggNjBlNjAyYy4uOGMxNThjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBy
b2Nlc3MuY3BwCkBAIC0zMDcsOCArMzA3LDcgQEAgdm9pZCBXZWJQcm9jZXNzOjplbnN1cmVOZXR3
b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKQogI2Vsc2UKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICNlbmRpZgotCi0gICAgUmVmUHRyPE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbj4gbV9uZXR3b3Jr
UHJvY2Vzc0Nvbm5lY3Rpb24gPSBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OmNyZWF0ZShjb25u
ZWN0aW9uSWRlbnRpZmllcik7CisgICAgbV9uZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24gPSBOZXR3
b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OmNyZWF0ZShjb25uZWN0aW9uSWRlbnRpZmllcik7CiB9CiAj
ZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKIApAQCAtMTAzMiw2ICsxMDMxLDEzIEBA
IHZvaWQgV2ViUHJvY2Vzczo6cG9zdEluamVjdGVkQnVuZGxlTWVzc2FnZShjb25zdCBDb3JlSVBD
OjpEYXRhUmVmZXJlbmNlJiBtZXNzYWdlCiB9CiAKICNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNT
KQorTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKiBXZWJQcm9jZXNzOjpuZXR3b3JrQ29ubmVjdGlv
bigpCit7CisgICAgLy8gRklYTUU6IEhvdyBkbyB3ZSBoYW5kbGUgbm90IGhhdmluZyB0aGUgY29u
bmVjdGlvbiB3aGVuIHRoZSBXZWJQcm9jZXNzIG5lZWRzIGl0PyAgKE5ldHdvcmtQcm9jZXNzIGNy
YXNoZWQsIGZvciBleGFtcGxlKQorICAgIEFTU0VSVChtX25ldHdvcmtQcm9jZXNzQ29ubmVjdGlv
bik7CisgICAgcmV0dXJuIG1fbmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmdldCgpOworfQorCiB2
b2lkIFdlYlByb2Nlc3M6Om5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkNsb3NlZChOZXR3b3JrUHJv
Y2Vzc0Nvbm5lY3Rpb24qIGNvbm5lY3Rpb24pCiB7CiAgICAgQVNTRVJUKG1fbmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UHJvY2Vzcy5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgKaW5kZXgg
NzQ2OGNkNi4uYzI0OGE0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgK
QEAgLTIwMyw3ICsyMDMsOSBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIEVOQUJMRShORVRXT1JL
X1BST0NFU1MpCisgICAgTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKiBuZXR3b3JrQ29ubmVjdGlv
bigpOwogICAgIHZvaWQgbmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uQ2xvc2VkKE5ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbiopOworICAgIGJvb2wgdXNlc05ldHdvcmtQcm9jZXNzKCkgY29uc3QgeyBy
ZXR1cm4gbV91c2VzTmV0d29ya1Byb2Nlc3M7IH0KICAgICBXZWJSZXNvdXJjZUxvYWRTY2hlZHVs
ZXImIHdlYlJlc291cmNlTG9hZFNjaGVkdWxlcigpIHsgcmV0dXJuIG1fd2ViUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyOyB9CiAjZW5kaWYKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170963</attachid>
            <date>2012-10-26 11:04:00 -0700</date>
            <delta_ts>2012-12-16 12:31:02 -0800</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>99108</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmNjhmNDk4Li4wYzY0N2U4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzgg
QEAKKzIwMTItMTAtMjYgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIEhhdmUgTmV0d29ya1Byb2Nlc3MgbWFuYWdlIHJlc291cmNlIGxvYWQgc2NoZWR1bGluZy4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMDQ3OQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIERvd24gaW4g
V2ViQ29yZSB3ZSBuZWVkIHRvIHZpcnR1YWxpemUgYSBoYW5kZnVsIG9mIFJlc291cmNlTG9hZFNj
aGVkdWxlciBtZXRob2RzCisgICAgICAgIHRvIGJlIG92ZXJyaWRkZW4gYnkgV2ViS2l0J3MgaW1w
bGVtZW50YXRpb24uCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChObyBjaGFuZ2UgaW4gQ29yZSBi
ZWhhdmlvcikuCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VM
b2FkU2NoZWR1bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZFNjaGVkdWxl
cjo6c2NoZWR1bGVMb2FkKTogQ2FsbCBub3RpZnlEaWRTY2hlZHVsZVJlc291cmNlUmVxdWVzdC4K
KyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZFNjaGVkdWxlcjo6bm90aWZ5RGlkU2NoZWR1
bGVSZXNvdXJjZVJlcXVlc3QpOiBNb3ZlZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24gY2FsbAor
ICAgICAgICAgIGhlcmUgc28gZGVyaXZlZCBjbGFzc2VzIGNhbiBkbyBpdCBpbmRpcmVjdGx5Lgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzdGFydFJlc291cmNlTG9h
ZGVyKTogVG8gYWxsb3cgZGVyaXZlZCBjbGFzc2VzIHRoZSBhYmlsaXR5IHRvIGNhbGwKKyAgICAg
ICAgICBSZXNvdXJjZUxvYWRlcjo6c3RhcnQoKSB3aGljaCBvbmx5IFJlc291cmNlTG9hZFNjaGVk
dWxlciBjYW4gZG8uCisKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmg6
CisgICAgICAgIChSZXNvdXJjZUxvYWRTY2hlZHVsZXIpOiBWaXJ0dWFsIHNvbWUgY29yZSBwdWJs
aWMgbWV0aG9kcyBzbyB0aGV5IGNhbiBiZSBvdmVycmlkZGVuLgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXRTZXJpYWxMb2FkaW5nRW5hYmxlZCk6IE1ha2Ugdmly
dHVhbC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZFNjaGVkdWxlcjo6aXNTdXNwZW5k
aW5nUGVuZGluZ1JlcXVlc3RzKTogTWFrZSBwcml2YXRlIGFzIGl0J3MgaW50ZXJuYWwgb25seS4K
KworICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZXNvdXJjZUxvYWRlcjo6c2V0SWRlbnRpZmllcik6IEFkZCB0aGlzIHNldHRlciBzbyBvdXRz
aWRlIGNsaWVudHMgY2FuIG1hbnVhbGx5IGNoYW5nZSB0aGUgaWRlbnRpZmllci4KKworICAgICAg
ICAqIGxvYWRlci9SZXNvdXJjZUxvYWRlci5oOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VM
b2FkZXI6OmlkZW50aWZpZXIpOiBDaGFuZ2UgaWRlbnRpZmllciB0byBleHBsaWNpdGx5IGJlIHVp
bnQ2NF90LgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXI6OnJlcXVlc3QpOiBNYWtl
IHB1YmxpYy4KKyAgICAgICAgKFJlc291cmNlTG9hZGVyKToKKwogMjAxMi0xMC0yNSAgQnJhZHkg
RWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgQWxsb3cgTG9hZGVyU3RyYXRl
Z3kgdG8gb3ZlcnJpZGUgdGhlIFJlc291cmNlTG9hZFNjaGVkdWxlcgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5p
bgppbmRleCA1OTFkZjllLi41NzAyOWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmV4cC5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgpAQCAtMjcwLDYg
KzI3MCw3IEBAIF9fWk43V2ViQ29yZTE0UmVzb3VyY2VCdWZmZXJEMUV2CiBfX1pON1dlYkNvcmUx
NFJlc291cmNlSGFuZGxlMjBmb3JjZUNvbnRlbnRTbmlmZmluZ0V2CiBfX1pON1dlYkNvcmUxNFJl
c291cmNlSGFuZGxlMjZzeW5jaHJvbm91c0xvYWRSdW5Mb29wTW9kZUV2CiBfX1pON1dlYkNvcmUx
NFJlc291cmNlSGFuZGxlMzVjcmVhdGVQcml2YXRlQnJvd3NpbmdTdG9yYWdlU2Vzc2lvbkVQSzEw
X19DRlN0cmluZworX19aTjdXZWJDb3JlMTRSZXNvdXJjZUxvYWRlcjEzc2V0SWRlbnRpZmllckVt
CiBfX1pON1dlYkNvcmUxNFJlc291cmNlTG9hZGVyMTRjYW5jZWxsZWRFcnJvckV2CiBfX1pON1dl
YkNvcmUxNFNjaGVtZVJlZ2lzdHJ5MjRyZWdpc3RlclVSTFNjaGVtZUFzTG9jYWxFUktOM1dURjZT
dHJpbmdFCiBfX1pON1dlYkNvcmUxNFNjaGVtZVJlZ2lzdHJ5MjVyZWdpc3RlclVSTFNjaGVtZUFz
U2VjdXJlRVJLTjNXVEY2U3RyaW5nRQpAQCAtNDcyLDYgKzQ3Myw3IEBAIF9fWk43V2ViQ29yZTE3
SlNET01HbG9iYWxPYmplY3Q2c19pbmZvRQogX19aTjdXZWJDb3JlMTdsYW5ndWFnZURpZENoYW5n
ZUV2CiBfX1pON1dlYkNvcmUxN1JlZ3VsYXJFeHByZXNzaW9uQzFFUktOM1dURjZTdHJpbmdFTlMx
XzE5VGV4dENhc2VTZW5zaXRpdml0eUUKIF9fWk43V2ViQ29yZTE3UmVndWxhckV4cHJlc3Npb25E
MUV2CitfX1pON1dlYkNvcmUxN1N1YnJlc291cmNlTG9hZGVyNmNyZWF0ZUVQTlNfNUZyYW1lRVBO
U18xNENhY2hlZFJlc291cmNlRVJLTlNfMTVSZXNvdXJjZVJlcXVlc3RFUktOU18yMVJlc291cmNl
TG9hZGVyT3B0aW9uc0UKIF9fWk43V2ViQ29yZTE3Vmlld3BvcnRBcmd1bWVudHMxOWRlcHJlY2F0
ZWRUYXJnZXREUElFCiBfX1pON1dlYkNvcmUxN2NhY2hlRE9NU3RydWN0dXJlRVBOU18xN0pTRE9N
R2xvYmFsT2JqZWN0RVBOM0pTQzlTdHJ1Y3R1cmVFUEtOUzJfOUNsYXNzSW5mb0UKIF9fWk43V2Vi
Q29yZTE3b3BlblRlbXBvcmFyeUZpbGVFUktOM1dURjZTdHJpbmdFUmkKQEAgLTU1OSw2ICs1NjEs
NyBAQCBfX1pON1dlYkNvcmUyMUJhY2tGb3J3YXJkQ29udHJvbGxlcjExaXRlbUF0SW5kZXhFaQog
X19aTjdXZWJDb3JlMjFNZW1vcnlQcmVzc3VyZUhhbmRsZXI3aW5zdGFsbEV2CiBfX1pON1dlYkNv
cmUyMVBsYXRmb3JtS2V5Ym9hcmRFdmVudDI0ZGlzYW1iaWd1YXRlS2V5RG93bkV2ZW50RU5TXzEz
UGxhdGZvcm1FdmVudDRUeXBlRWIKIF9fWk43V2ViQ29yZTIxUmVzb3VyY2VMb2FkU2NoZWR1bGVy
MTlhZGRNYWluUmVzb3VyY2VMb2FkRVBOU18xNFJlc291cmNlTG9hZGVyRQorX19aTjdXZWJDb3Jl
MjFSZXNvdXJjZUxvYWRTY2hlZHVsZXIxOXN0YXJ0UmVzb3VyY2VMb2FkZXJFUE5TXzE0UmVzb3Vy
Y2VMb2FkZXJFCiBfX1pON1dlYkNvcmUyMVJlc291cmNlTG9hZFNjaGVkdWxlcjIwc2VydmVQZW5k
aW5nUmVxdWVzdHNFTlNfMjBSZXNvdXJjZUxvYWRQcmlvcml0eUUKIF9fWk43V2ViQ29yZTIxUmVz
b3VyY2VMb2FkU2NoZWR1bGVyMjBzZXJ2ZVBlbmRpbmdSZXF1ZXN0c0VQTlMwXzE1SG9zdEluZm9y
bWF0aW9uRU5TXzIwUmVzb3VyY2VMb2FkUHJpb3JpdHlFCiBfX1pON1dlYkNvcmUyMVJlc291cmNl
TG9hZFNjaGVkdWxlcjIxcmVzdW1lUGVuZGluZ1JlcXVlc3RzRXYKQEAgLTU2Niw2ICs1NjksNyBA
QCBfX1pON1dlYkNvcmUyMVJlc291cmNlTG9hZFNjaGVkdWxlcjIyc3VzcGVuZFBlbmRpbmdSZXF1
ZXN0c0V2CiBfX1pON1dlYkNvcmUyMVJlc291cmNlTG9hZFNjaGVkdWxlcjIzc2NoZWR1bGVTdWJy
ZXNvdXJjZUxvYWRFUE5TXzVGcmFtZUVQTlNfMTRDYWNoZWRSZXNvdXJjZUVSS05TXzE1UmVzb3Vy
Y2VSZXF1ZXN0RU5TXzIwUmVzb3VyY2VMb2FkUHJpb3JpdHlFUktOU18yMVJlc291cmNlTG9hZGVy
T3B0aW9uc0UKIF9fWk43V2ViQ29yZTIxUmVzb3VyY2VMb2FkU2NoZWR1bGVyMjRzY2hlZHVsZVBs
dWdpblN0cmVhbUxvYWRFUE5TXzVGcmFtZUVQTlNfMzJOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRl
ckNsaWVudEVSS05TXzE1UmVzb3VyY2VSZXF1ZXN0RQogX19aTjdXZWJDb3JlMjFSZXNvdXJjZUxv
YWRTY2hlZHVsZXIyN2Nyb3NzT3JpZ2luUmVkaXJlY3RSZWNlaXZlZEVQTlNfMTRSZXNvdXJjZUxv
YWRlckVSS05TXzRLVVJMRQorX19aTjdXZWJDb3JlMjFSZXNvdXJjZUxvYWRTY2hlZHVsZXIzMm5v
dGlmeURpZFNjaGVkdWxlUmVzb3VyY2VSZXF1ZXN0RVBOU18xNFJlc291cmNlTG9hZGVyRQogX19a
TjdXZWJDb3JlMjFSZXNvdXJjZUxvYWRTY2hlZHVsZXI2cmVtb3ZlRVBOU18xNFJlc291cmNlTG9h
ZGVyRQogX19aTjdXZWJDb3JlMjFSZXNvdXJjZUxvYWRTY2hlZHVsZXJDMkV2CiBfX1pON1dlYkNv
cmUyMVJlc291cmNlTG9hZFNjaGVkdWxlckQyRXYKQEAgLTY0MSw2ICs2NDUsNyBAQCBfX1pON1dl
YkNvcmUyNUltbXV0YWJsZVN0eWxlUHJvcGVydHlTZXREMUV2CiBfX1pON1dlYkNvcmUyNWFkZExh
bmd1YWdlQ2hhbmdlT2JzZXJ2ZXJFUHZQRnZTMF9FCiBfX1pON1dlYkNvcmUyNWNvbXB1dGVWaWV3
cG9ydEF0dHJpYnV0ZXNFTlNfMTdWaWV3cG9ydEFyZ3VtZW50c0VpaWlmTlNfN0ludFNpemVFCiBf
X1pON1dlYkNvcmUyNWpzU3RyaW5nV2l0aENhY2hlU2xvd0Nhc2VFUE4zSlNDOUV4ZWNTdGF0ZUVS
TjNXVEY3SGFzaE1hcElQTlMzXzEwU3RyaW5nSW1wbEVOUzBfNFdlYWtJTlMwXzhKU1N0cmluZ0VF
RU5TM183UHRySGFzaElTNl9FRU5TM18xMEhhc2hUcmFpdHNJUzZfRUVOU0NfSVM5X0VFRUVTNl8K
K19fWk43V2ViQ29yZTI2TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI2Y3JlYXRlRVBOU181RnJh
bWVFUE5TXzMyTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGllbnRFUktOU18xNVJlc291cmNl
UmVxdWVzdEUKIF9fWk43V2ViQ29yZTI2VXNlclR5cGluZ0dlc3R1cmVJbmRpY2F0b3IyN3Byb2Nl
c3NpbmdVc2VyVHlwaW5nR2VzdHVyZUV2CiBfX1pON1dlYkNvcmUyNlVzZXJUeXBpbmdHZXN0dXJl
SW5kaWNhdG9yMjhmb2N1c2VkRWxlbWVudEF0R2VzdHVyZVN0YXJ0RXYKIF9fWk43V2ViQ29yZTI2
c3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXNFdgpAQCAtMTIwNiw2ICsxMjExLDcgQEAgX19aTks3
V2ViQ29yZTE0RG9jdW1lbnRMb2FkZXIxN3BhcnNlZEFyY2hpdmVEYXRhRXYKIF9fWk5LN1dlYkNv
cmUxNERvY3VtZW50TG9hZGVyMTdyZXBvcnRNZW1vcnlVc2FnZUVQTjNXVEYxNk1lbW9yeU9iamVj
dEluZm9FCiBfX1pOSzdXZWJDb3JlMTREb2N1bWVudExvYWRlcjE5aXNMb2FkaW5nSW5BUElTZW5z
ZUV2CiBfX1pOSzdXZWJDb3JlMTREb2N1bWVudExvYWRlcjE5b3JpZ2luYWxSZXF1ZXN0Q29weUV2
CitfX1pOSzdXZWJDb3JlMTREb2N1bWVudExvYWRlcjIxYXJjaGl2ZVJlc291cmNlRm9yVVJMRVJL
TlNfNEtVUkxFCiBfX1pOSzdXZWJDb3JlMTREb2N1bWVudExvYWRlcjIxaXNMb2FkaW5nTWFpblJl
c291cmNlRXYKIF9fWk5LN1dlYkNvcmUxNERvY3VtZW50TG9hZGVyMjh1cmxGb3JIaXN0b3J5UmVm
bGVjdHNGYWlsdXJlRXYKIF9fWk5LN1dlYkNvcmUxNERvY3VtZW50TG9hZGVyM3VybEV2CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
MjA2OTVkNC4uYTZjZWRlYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIwMjcsNyArMjAyNyw3IEBACiAJCTdFRTY4NDZDMTJE
MjZFMzgwMEU3OTQxNSAvKiBSZXNvdXJjZUhhbmRsZUNGTmV0LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdFRTY4NDU5MTJEMjZFMzgwMEU3OTQxNSAv
KiBSZXNvdXJjZUhhbmRsZUNGTmV0LmNwcCAqLzsgfTsKIAkJN0VFNjg0NkQxMkQyNkUzODAwRTc5
NDE1IC8qIFJlc291cmNlUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0VFNjg0NUExMkQyNkUzODAwRTc5NDE1IC8qIFJlc291cmNlUmVxdWVz
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdF
RTY4NDZFMTJEMjZFMzgwMEU3OTQxNSAvKiBSZXNvdXJjZVJlcXVlc3RDRk5ldC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3RUU2ODQ1QjEyRDI2RTM4
MDBFNzk0MTUgLyogUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuY3BwICovOyB9OwotCQk3RUU2ODQ2RjEy
RDI2RTM4MDBFNzk0MTUgLyogUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdFRTY4NDVDMTJEMjZFMzgwMEU3OTQxNSAv
KiBSZXNvdXJjZVJlcXVlc3RDRk5ldC5oICovOyB9OworCQk3RUU2ODQ2RjEyRDI2RTM4MDBFNzk0
MTUgLyogUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDdFRTY4NDVDMTJEMjZFMzgwMEU3OTQxNSAvKiBSZXNvdXJjZVJl
cXVlc3RDRk5ldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTdFRTY4NDcwMTJEMjZFMzgwMEU3OTQxNSAvKiBSZXNvdXJjZVJlc3BvbnNlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3RUU2ODQ1RDEyRDI2
RTM4MDBFNzk0MTUgLyogUmVzb3VyY2VSZXNwb25zZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdFRTY4NDcxMTJEMjZFMzgwMEU3OTQxNSAvKiBS
ZXNvdXJjZVJlc3BvbnNlQ0ZOZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0VFNjg0NUUxMkQyNkUzODAwRTc5NDE1IC8qIFJlc291cmNlUmVzcG9u
c2VDRk5ldC5jcHAgKi87IH07CiAJCTdFRTY4NDc1MTJEMjZFNzAwMEU3OTQxNSAvKiBSZXNvdXJj
ZUxvYWRlckNGTmV0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDdFRTY4NDc0MTJEMjZFNzAwMEU3OTQxNSAvKiBSZXNvdXJjZUxvYWRlckNGTmV0LmNw
cCAqLzsgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRT
Y2hlZHVsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFNjaGVkdWxl
ci5jcHAKaW5kZXggZGYwMzQ2Zi4uODJlOWExYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bG9hZGVyL1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHAKQEAgLTE0MCwxMSArMTQwLDE4IEBAIHZvaWQg
UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZUxvYWQoUmVzb3VyY2VMb2FkZXIqIHJlc291
cmNlTG9hZGVyLCBSZXNvdXJjCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvLyBIYW5k
bGUgYXN5bmNocm9ub3VzbHkgc28gZWFybHkgbG93IHByaW9yaXR5IHJlcXVlc3RzIGRvbid0IGdl
dCBzY2hlZHVsZWQgYmVmb3JlIGxhdGVyIGhpZ2ggcHJpb3JpdHkgb25lcy4KLSAgICBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmRpZFNjaGVkdWxlUmVzb3VyY2VSZXF1ZXN0KHJlc291cmNlTG9h
ZGVyLT5mcmFtZUxvYWRlcigpID8gcmVzb3VyY2VMb2FkZXItPmZyYW1lTG9hZGVyKCktPmZyYW1l
KCktPmRvY3VtZW50KCkgOiAwLCByZXNvdXJjZUxvYWRlci0+dXJsKCkpOworICAgIG5vdGlmeURp
ZFNjaGVkdWxlUmVzb3VyY2VSZXF1ZXN0KHJlc291cmNlTG9hZGVyKTsKKworICAgIC8vIEhhbmRs
ZSBhc3luY2hyb25vdXNseSBzbyBlYXJseSBsb3cgcHJpb3JpdHkgcmVxdWVzdHMgZG9uJ3QKKyAg
ICAvLyBnZXQgc2NoZWR1bGVkIGJlZm9yZSBsYXRlciBoaWdoIHByaW9yaXR5IG9uZXMuCiAgICAg
c2NoZWR1bGVTZXJ2ZVBlbmRpbmdSZXF1ZXN0cygpOwogfQogCit2b2lkIFJlc291cmNlTG9hZFNj
aGVkdWxlcjo6bm90aWZ5RGlkU2NoZWR1bGVSZXNvdXJjZVJlcXVlc3QoUmVzb3VyY2VMb2FkZXIq
IGxvYWRlcikKK3sKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFNjaGVkdWxlUmVz
b3VyY2VSZXF1ZXN0KGxvYWRlci0+ZnJhbWVMb2FkZXIoKSA/IGxvYWRlci0+ZnJhbWVMb2FkZXIo
KS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKSA6IDAsIGxvYWRlci0+dXJsKCkpOworfQorCiB2b2lkIFJl
c291cmNlTG9hZFNjaGVkdWxlcjo6cmVtb3ZlKFJlc291cmNlTG9hZGVyKiByZXNvdXJjZUxvYWRl
cikKIHsKICAgICBBU1NFUlQocmVzb3VyY2VMb2FkZXIpOwpAQCAtMzA3LDQgKzMxNCwxMCBAQCBi
b29sIFJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uOjpsaW1pdFJlcXVlc3Rz
KFJlc291cmNlTG9hZFByaW9yaXR5CiAgICAgcmV0dXJuIG1fcmVxdWVzdHNMb2FkaW5nLnNpemUo
KSA+PSAocmVzb3VyY2VMb2FkU2NoZWR1bGVyKCktPmlzU2VyaWFsTG9hZGluZ0VuYWJsZWQoKSA/
IDEgOiBtX21heFJlcXVlc3RzSW5GbGlnaHQpOwogfQogCit2b2lkIFJlc291cmNlTG9hZFNjaGVk
dWxlcjo6c3RhcnRSZXNvdXJjZUxvYWRlcihSZXNvdXJjZUxvYWRlciogbG9hZGVyKQoreworICAg
IEFTU0VSVChsb2FkZXIpOworICAgIGxvYWRlci0+c3RhcnQoKTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9h
ZFNjaGVkdWxlci5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFNjaGVkdWxl
ci5oCmluZGV4IDVlNWM0OWMuLjIwZTVhYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9SZXNvdXJjZUxvYWRTY2hlZHVsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
UmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgKQEAgLTUwLDI5ICs1MCwzMyBAQCBjbGFzcyBSZXNvdXJj
ZUxvYWRTY2hlZHVsZXIgewogcHVibGljOgogICAgIGZyaWVuZCBSZXNvdXJjZUxvYWRTY2hlZHVs
ZXIqIHJlc291cmNlTG9hZFNjaGVkdWxlcigpOwogCi0gICAgUGFzc1JlZlB0cjxTdWJyZXNvdXJj
ZUxvYWRlcj4gc2NoZWR1bGVTdWJyZXNvdXJjZUxvYWQoRnJhbWUqLCBDYWNoZWRSZXNvdXJjZSos
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFJlc291cmNlTG9hZFByaW9yaXR5LCBjb25zdCBSZXNv
dXJjZUxvYWRlck9wdGlvbnMmKTsKLSAgICBQYXNzUmVmUHRyPE5ldHNjYXBlUGx1Z0luU3RyZWFt
TG9hZGVyPiBzY2hlZHVsZVBsdWdpblN0cmVhbUxvYWQoRnJhbWUqLCBOZXRzY2FwZVBsdWdJblN0
cmVhbUxvYWRlckNsaWVudCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOwotICAgIHZvaWQgYWRk
TWFpblJlc291cmNlTG9hZChSZXNvdXJjZUxvYWRlciopOwotICAgIHZvaWQgcmVtb3ZlKFJlc291
cmNlTG9hZGVyKik7Ci0gICAgdm9pZCBjcm9zc09yaWdpblJlZGlyZWN0UmVjZWl2ZWQoUmVzb3Vy
Y2VMb2FkZXIqLCBjb25zdCBLVVJMJiByZWRpcmVjdFVSTCk7CisgICAgdmlydHVhbCBQYXNzUmVm
UHRyPFN1YnJlc291cmNlTG9hZGVyPiBzY2hlZHVsZVN1YnJlc291cmNlTG9hZChGcmFtZSosIENh
Y2hlZFJlc291cmNlKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUmVzb3VyY2VMb2FkUHJpb3Jp
dHksIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcj4gc2NoZWR1bGVQbHVnaW5TdHJlYW1Mb2FkKEZy
YW1lKiwgTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQqLCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkTWFpblJlc291cmNlTG9hZChSZXNvdXJjZUxv
YWRlciopOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmUoUmVzb3VyY2VMb2FkZXIqKTsKKyAgICB2
aXJ0dWFsIHZvaWQgY3Jvc3NPcmlnaW5SZWRpcmVjdFJlY2VpdmVkKFJlc291cmNlTG9hZGVyKiwg
Y29uc3QgS1VSTCYgcmVkaXJlY3RVUkwpOwogICAgIAotICAgIHZvaWQgc2VydmVQZW5kaW5nUmVx
dWVzdHMoUmVzb3VyY2VMb2FkUHJpb3JpdHkgbWluaW11bVByaW9yaXR5ID0gUmVzb3VyY2VMb2Fk
UHJpb3JpdHlWZXJ5TG93KTsKLSAgICBib29sIGlzU3VzcGVuZGluZ1BlbmRpbmdSZXF1ZXN0cygp
IGNvbnN0IHsgcmV0dXJuICEhbV9zdXNwZW5kUGVuZGluZ1JlcXVlc3RzQ291bnQ7IH0KLSAgICB2
b2lkIHN1c3BlbmRQZW5kaW5nUmVxdWVzdHMoKTsKLSAgICB2b2lkIHJlc3VtZVBlbmRpbmdSZXF1
ZXN0cygpOworICAgIHZpcnR1YWwgdm9pZCBzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhSZXNvdXJjZUxv
YWRQcmlvcml0eSBtaW5pbXVtUHJpb3JpdHkgPSBSZXNvdXJjZUxvYWRQcmlvcml0eVZlcnlMb3cp
OworICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kUGVuZGluZ1JlcXVlc3RzKCk7CisgICAgdmlydHVh
bCB2b2lkIHJlc3VtZVBlbmRpbmdSZXF1ZXN0cygpOwogICAgIAogICAgIGJvb2wgaXNTZXJpYWxM
b2FkaW5nRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNTZXJpYWxMb2FkaW5nRW5hYmxlZDsg
fQotICAgIHZvaWQgc2V0U2VyaWFsTG9hZGluZ0VuYWJsZWQoYm9vbCBiKSB7IG1faXNTZXJpYWxM
b2FkaW5nRW5hYmxlZCA9IGI7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2VyaWFsTG9hZGluZ0Vu
YWJsZWQoYm9vbCBiKSB7IG1faXNTZXJpYWxMb2FkaW5nRW5hYmxlZCA9IGI7IH0KIAogcHJvdGVj
dGVkOgogICAgIFJlc291cmNlTG9hZFNjaGVkdWxlcigpOwogICAgIHZpcnR1YWwgflJlc291cmNl
TG9hZFNjaGVkdWxlcigpOwogCisgICAgdm9pZCBzdGFydFJlc291cmNlTG9hZGVyKFJlc291cmNl
TG9hZGVyKik7CisgICAgdm9pZCBub3RpZnlEaWRTY2hlZHVsZVJlc291cmNlUmVxdWVzdChSZXNv
dXJjZUxvYWRlciopOworCiBwcml2YXRlOgogICAgIHZvaWQgc2NoZWR1bGVMb2FkKFJlc291cmNl
TG9hZGVyKiwgUmVzb3VyY2VMb2FkUHJpb3JpdHkpOwogICAgIHZvaWQgc2NoZWR1bGVTZXJ2ZVBl
bmRpbmdSZXF1ZXN0cygpOwogICAgIHZvaWQgcmVxdWVzdFRpbWVyRmlyZWQoVGltZXI8UmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyPiopOwogCisgICAgYm9vbCBpc1N1c3BlbmRpbmdQZW5kaW5nUmVxdWVz
dHMoKSBjb25zdCB7IHJldHVybiAhIW1fc3VzcGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50OyB9CisK
ICAgICBjbGFzcyBIb3N0SW5mb3JtYXRpb24gewogICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShIb3N0SW5mb3JtYXRpb24pOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBwdWJsaWM6
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcAppbmRleCBiMTJiNDQzLi4x
NTZiNjM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5jcHAKQEAgLTU1
OCw0ICs1NTgsMTQgQEAgdm9pZCBSZXNvdXJjZUxvYWRlcjo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVt
b3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKICAgICBpbmZvLmFkZE1lbWJl
cihtX29wdGlvbnMpOwogfQogCisjaWYgUExBVEZPUk0oTUFDKQordm9pZCBSZXNvdXJjZUxvYWRl
cjo6c2V0SWRlbnRpZmllcih1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpCit7CisgICAgLy8gRklY
TUU6IFRoaXMgaXMgdGVtcG9yYXJ5IHRvIGFsbG93IFdlYktpdCB0byBkaXJlY3RseSBzZXQgdGhl
IGlkZW50aWZpZXIgb24gYSBSZXNvdXJjZUxvYWRlci4KKyAgICAvLyBNb3JlIHBlcm1hbmVudGx5
IHdlIHdhbnQgdGhlIGlkZW50aWZpZXIgdG8gYmUgcGlwZWQgdGhyb3VnaCBSZXNvdXJjZUxvYWRl
cjo6aW5pdC9zdGFydCBzbworICAgIC8vIGl0IGFsd2F5cyBoYXMgaXQsIGVzcGVjaWFsbHkgaW4g
d2lsbFNlbmRSZXF1ZXN0LgorICAgIG1faWRlbnRpZmllciA9IGlkZW50aWZpZXI7Cit9CisjZW5k
aWYKKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuaAppbmRleCBlYTgzMTIx
Li5jNTA4N2EyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2Fk
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuaApAQCAtNjYs
NyArNjYsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIHNldERlZmVyc0xvYWRp
bmcoYm9vbCk7CiAKLSAgICB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVy
biBtX2lkZW50aWZpZXI7IH0KKyAgICB1aW50NjRfdCBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1
cm4gbV9pZGVudGlmaWVyOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZVJlc291cmNlcygp
OwogICAgIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKCkgY29uc3Q7CkBAIC0xNDMs
MjIgKzE0MywyOSBAQCBwdWJsaWM6CiAKICAgICBib29sIHJlYWNoZWRUZXJtaW5hbFN0YXRlKCkg
Y29uc3QgeyByZXR1cm4gbV9yZWFjaGVkVGVybWluYWxTdGF0ZTsgfQogCisgICAgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0KCkgY29uc3QgeyByZXR1cm4gbV9yZXF1ZXN0OyB9CisKICAg
ICB2b2lkIHNldFNob3VsZEJ1ZmZlckRhdGEoRGF0YUJ1ZmZlcmluZ1BvbGljeSk7CiAKICAgICB2
aXJ0dWFsIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0Owog
CisjaWYgUExBVEZPUk0oTUFDKQorICAgIC8vIEZJWE1FOiBUaGlzIGlzIHRlbXBvcmFyeSB0byBh
bGxvdyBXZWJLaXQgdG8gZGlyZWN0bHkgc2V0IHRoZSBpZGVudGlmaWVyIG9uIGEgUmVzb3VyY2VM
b2FkZXIuCisgICAgLy8gTW9yZSBwZXJtYW5lbnRseSB3ZSB3YW50IHRoZSBpZGVudGlmaWVyIHRv
IGJlIHBpcGVkIHRocm91Z2ggUmVzb3VyY2VMb2FkZXI6OmluaXQvc3RhcnQgc28KKyAgICAvLyBp
dCBhbHdheXMgaGFzIGl0LCBlc3BlY2lhbGx5IGluIHdpbGxTZW5kUmVxdWVzdC4KKyAgICB2b2lk
IHNldElkZW50aWZpZXIodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKTsKKyNlbmRpZgorCiBwcm90
ZWN0ZWQ6CiAgICAgUmVzb3VyY2VMb2FkZXIoRnJhbWUqLCBSZXNvdXJjZUxvYWRlck9wdGlvbnMp
OwogCi0gICAgZnJpZW5kIGNsYXNzIEFwcGxpY2F0aW9uQ2FjaGVIb3N0OyAgLy8gZm9yIGFjY2Vz
cyB0byByZXF1ZXN0KCkKICAgICBmcmllbmQgY2xhc3MgUmVzb3VyY2VMb2FkU2NoZWR1bGVyOyAv
LyBmb3IgYWNjZXNzIHRvIHN0YXJ0KCkKLSAgICAvLyBzdGFydCgpIGFjdHVhbGx5IHNlbmRzIHRo
ZSBsb2FkIHRvIHRoZSBuZXR3b3JrICh1bmxlc3MgdGhlIGxvYWQgaXMgYmVpbmcgCisgICAgLy8g
c3RhcnQoKSBhY3R1YWxseSBzZW5kcyB0aGUgbG9hZCB0byB0aGUgbmV0d29yayAodW5sZXNzIHRo
ZSBsb2FkIGlzIGJlaW5nCiAgICAgLy8gZGVmZXJyZWQpIGFuZCBzaG91bGQgb25seSBiZSBjYWxs
ZWQgYnkgUmVzb3VyY2VMb2FkU2NoZWR1bGVyIG9yIHNldERlZmVyc0xvYWRpbmcoKS4KICAgICB2
b2lkIHN0YXJ0KCk7Ci0gICAgCisKICAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmdPbmVQYXJ0KGRv
dWJsZSBmaW5pc2hUaW1lKTsKIAotICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVxdWVzdDsgfQogICAgIGJvb2wgY2FuY2VsbGVkKCkgY29uc3Qg
eyByZXR1cm4gbV9jYW5jZWxsZWQ7IH0KICAgICBib29sIGRlZmVyc0xvYWRpbmcoKSBjb25zdCB7
IHJldHVybiBtX2RlZmVyc0xvYWRpbmc7IH0KIApAQCAtMTc1LDcgKzE4Miw3IEBAIHByaXZhdGU6
CiAgICAgUmVzb3VyY2VSZXF1ZXN0IG1fb3JpZ2luYWxSZXF1ZXN0OyAvLyBCZWZvcmUgcmVkaXJl
Y3RzLgogICAgIFJlZlB0cjxSZXNvdXJjZUJ1ZmZlcj4gbV9yZXNvdXJjZURhdGE7CiAgICAgCi0g
ICAgdW5zaWduZWQgbG9uZyBtX2lkZW50aWZpZXI7CisgICAgdWludDY0X3QgbV9pZGVudGlmaWVy
OwogCiAgICAgYm9vbCBtX3JlYWNoZWRUZXJtaW5hbFN0YXRlOwogICAgIGJvb2wgbV9jYWxsZWRX
aWxsQ2FuY2VsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDNkNTAxZGIuLjZhNjJhYTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxMzAgQEAKKzIwMTItMTAtMjYgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUu
Y29tPgorCisgICAgICAgIEhhdmUgTmV0d29ya1Byb2Nlc3MgbWFuYWdlIHJlc291cmNlIGxvYWQg
c2NoZWR1bGluZy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEwMDQ3OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEltcGxlbWVudCBhIFJlc291cmNlTG9hZFNjaGVkdWxlciB0aGF0IG1vZGVscyB0aGUgc2Ft
ZSBiZWhhdmlvciBhcyBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTY2hlZHVsZXIuCisgICAgICAgIAor
ICAgICAgICBUaGUgV2ViUHJvY2VzcyBzY2hlZHVsZXIgYWN0cyBhcyBhIG1hcnNoYWxsIHRvIHRo
ZSBOZXR3b3JrUHJvY2VzcyBzY2hlZHVsZXIgdmlhIENvcmVJUEMgbWVzc2FnaW5nLgorCisgICAg
ICAgIEJlc2lkZXMgTWFpblJlc291cmNlTG9hZHMgd2hpY2ggYXJlIHN0YXJ0ZWQgZGlyZWN0bHkg
aW4gdGhlIFdlYlByb2Nlc3MsIGFsbCBvdGhlciBsb2FkcyBhcmUgbm93CisgICAgICAgIHN0YXJ0
ZWQgb25seSB3aGVuIHRoZSBOZXR3b3JrUHJvY2VzcyB0ZWxscyB0aGVtIHRvIHN0YXJ0LgorCisg
ICAgICAgIEJ1aWxkLXN5c3RlbSBhbmQgbWVzc2FnaW5nIHJlbGF0ZWQgc3R1ZmY6CisgICAgICAg
ICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL01lc3Nh
Z2VJRC5oOgorICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwor
ICAgICAgICBBZGQgYSBuZXcgTmV0d29yayBsb2dnaW5nIGNoYW5uZWwuCisgICAgICAgICogUGxh
dGZvcm0vTG9nZ2luZy5jcHA6CisgICAgICAgIChXZWJLaXQ6OmdldENoYW5uZWxGcm9tTmFtZSk6
CisgICAgICAgICogUGxhdGZvcm0vTG9nZ2luZy5oOgorCisgICAgICAgIE1vZGVsbGVkIGFmdGVy
IFJlc291cmNlTG9hZFNjaGVkdWxlcjo6SG9zdEluZm9ybWF0aW9uIGJ1dCBtb3JlIHNwZWNpZmlj
YWxseSBnZWFyZWQgdG93YXJkcyB3aGF0IE5ldHdvcmtQcm9jZXNzIG5lZWRzIHRvIHRyYWNrOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0hvc3RSZWNvcmQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYktpdDo6SG9zdFJlY29yZDo6SG9zdFJlY29yZCk6CisgICAgICAgIChXZWJLaXQ6Okhvc3RS
ZWNvcmQ6On5Ib3N0UmVjb3JkKToKKyAgICAgICAgKFdlYktpdDo6SG9zdFJlY29yZDo6c2NoZWR1
bGUpOgorICAgICAgICAoV2ViS2l0OjpIb3N0UmVjb3JkOjphZGRMb2FkSW5Qcm9ncmVzcyk6Cisg
ICAgICAgIChXZWJLaXQ6Okhvc3RSZWNvcmQ6OnJlbW92ZSk6CisgICAgICAgIChXZWJLaXQ6Okhv
c3RSZWNvcmQ6Omhhc1JlcXVlc3RzKToKKyAgICAgICAgKFdlYktpdDo6SG9zdFJlY29yZDo6bGlt
aXRSZXF1ZXN0cyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvSG9zdFJlY29yZC5oOgorICAg
ICAgICAoV2ViS2l0OjpIb3N0UmVjb3JkOjpuYW1lKToKKyAgICAgICAgKFdlYktpdDo6SG9zdFJl
Y29yZDo6cmVxdWVzdHNQZW5kaW5nKToKKworICAgICAgICBHYXRld2F5IG1lc3NhZ2luZyBmcm9t
IHRoZSBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIgdG8gdGhlIE5ldHdvcmtSZXNvdXJjZUxvYWRT
Y2hlZHVsZXI6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6fk5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJl
Z2lzdGVyT2JzZXJ2ZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzczo6dW5yZWdpc3Rlck9ic2VydmVyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZFJlY2VpdmVNZXNzYWdlKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZFJlY2VpdmVTeW5jTWVzc2FnZSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRDbG9z
ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpzY2hl
ZHVsZU5ldHdvcmtSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nvbm5lY3Rpb25U
b1dlYlByb2Nlc3M6OmFkZExvYWRJblByb2dyZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlbW92ZUxvYWRJZGVudGlmaWVyKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNyb3NzT3JpZ2luUmVkaXJl
Y3RSZWNlaXZlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzOjpzdXNwZW5kUGVuZGluZ1JlcXVlc3RzKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlc3VtZVBlbmRpbmdSZXF1ZXN0
cyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpzZXRT
ZXJpYWxMb2FkaW5nRW5hYmxlZCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MuaDoKKyAgICAgICAgKE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzT2JzZXJ2ZXIpOiBBZGQgYW4gb2JzZXJ2ZXIgaW50ZXJmYWNlIHNvIGFyYml0cmFyeSBv
YmplY3RzIGNhbiBiZSBub3RpZmllZCBpZgorICAgICAgICAgIGEgTmV0d29yay0+V2ViUHJvY2Vz
cyBjb25uZWN0aW9uIGNsb3Nlcy4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nvbm5lY3Rpb25U
b1dlYlByb2Nlc3NPYnNlcnZlcjo6fk5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzT2JzZXJ2
ZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6aXNT
ZXJpYWxMb2FkaW5nRW5hYmxlZCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW46CisKKyAgICAgICAgUmVwcmVzZW50cyBh
IHJlcXVlc3QsICBSZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBhbmQgY29ubmVjdGlvbiB0aGF0IGFs
bCBjb3JyZXNwb25kIHRvIHRoZSBzYW1lIHBlbmRpbmcgTmV0d29ya0xvYWQ6CisgICAgICAgICog
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1JlcXVlc3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUmVxdWVzdDo6TmV0d29ya1JlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVx
dWVzdDo6fk5ldHdvcmtSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1JlcXVlc3Q6
OmNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NEaWRDbG9zZSk6IFVzaW5nIHRoZSBOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzc09ic2VydmVyIGludGVyZmFjZSwKKyAgICAgICAgICBpZiB0aGUgY29u
bmVjdGlvbiBjbG9zZXMgdGhlbiBjbGVhciBvdXQgdGhlIGNvbm5lY3Rpb24gcG9pbnRlciBmb3Ig
dGhpcyByZXF1ZXN0IHRoYXQgaXMgbm93IGlycmVsZXZhbnQuCisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvTmV0d29ya1JlcXVlc3QuaDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1JlcXVlc3Q6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXF1ZXN0OjppZGVudGlmaWVyKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1JlcXVlc3Q6OmNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mp
OgorCisgICAgICAgIE1hbmFnZXMgY29ubmVjdGlvbi1wZXItaG9zdCBzY2hlZHVsaW5nIHdpdGgg
dGhlIHNhbWUgc3RydWN0dXJlIGFzIFdlYkNvcmU6OlJlc291cmNlTG9hZFNjaGVkdWxpbmcgYnV0
IGFsc28gd2l0aCBJUEM6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNl
TG9hZFNjaGVkdWxlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOjpOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVTZXJ2ZVBlbmRp
bmdSZXF1ZXN0cyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVs
ZXI6OnJlcXVlc3RUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNl
TG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVOZXR3b3JrUmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmFkZExvYWRJblByb2dyZXNzKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6aG9zdEZvclVSTCk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlbW92ZUxvYWRJ
ZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxl
cjo6Y3Jvc3NPcmlnaW5SZWRpcmVjdFJlY2VpdmVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0
c0Zvckhvc3QpOiBTZXJ2ZSBhcyBtYW55IHJlcXVlc3RzIGZvciB0aGUgaG9zdCBhcyB3ZSBzaG91
bGQsCisgICAgICAgICAgc2tpcHBpbmcgdGhlIE5ldHdvcmtSZXF1ZXN0cyB3aG8gaGF2ZSBsb3N0
IHRoZWlyIGNvbm5lY3Rpb24gdG8gdGhlaXIgV2ViUHJvY2Vzcy4KKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6c3VzcGVuZFBlbmRpbmdSZXF1ZXN0cyk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlc3VtZVBlbmRp
bmdSZXF1ZXN0cyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9h
ZFNjaGVkdWxlci5oOiBBZGRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29y
a1Jlc291cmNlTG9hZFNjaGVkdWxlck1hYy5tbTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnBsYXRmb3JtSW5pdGlhbGl6ZU1heGltdW1IVFRQ
Q29ubmVjdGlvbkNvdW50UGVySG9zdCk6CisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzcy5oOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6bmV0d29ya1Jl
c291cmNlTG9hZFNjaGVkdWxlcik6IEFkZCBhIHNjaGVkdWxlciBnbG9iYWwgdG8gdGhlIE5ldHdv
cmtQcm9jZXNzLgorCisgICAgICAgIEEgdGhpbiBkZXJpdmF0aW9uIG9mIFdlYkNvcmU6OlJlc291
cmNlTG9hZFNjaGVkdWxlciwgbW9zdCBvZiB3aGF0IFdlYlJlc291cmNlTG9hZFNjaGVkdWxlciBk
b2VzIGlzIGhhbmRsZSBJUEMgdG8gdGhlIE5ldHdvcmtQcm9jZXNzOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OldlYlJlc291cmNlTG9hZFNjaGVkdWxlcik6
CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVTdWJy
ZXNvdXJjZUxvYWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6
OnNjaGVkdWxlUGx1Z2luU3RyZWFtTG9hZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNl
TG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVMb2FkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOjphZGRNYWluUmVzb3VyY2VMb2FkKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZW1vdmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJS
ZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmNyb3NzT3JpZ2luUmVkaXJlY3RSZWNlaXZlZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5nUmVxdWVz
dHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnN1c3BlbmRQ
ZW5kaW5nUmVxdWVzdHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTY2hlZHVs
ZXI6OnJlc3VtZVBlbmRpbmdSZXF1ZXN0cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNl
TG9hZFNjaGVkdWxlcjo6c2V0U2VyaWFsTG9hZGluZ0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnN0YXJ0UmVzb3VyY2VMb2FkKToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmg6CisKKyAgICAg
ICAgQWRkIHRoZSBhYmlsaXR5IGZvciB0aGUgTmV0d29ya1Byb2Nlc3MgdG8gbWVzc2FnZSBiYWNr
IHRvIHRoZSBXZWJQcm9jZXNzIHRlbGxpbmcgaXQgdG8gc3RhcnQgYSByZXNvdXJjZSBsb2FkOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uY3Bw
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVN
ZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOjpkaWRS
ZWNlaXZlU3luY01lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb246OnN0YXJ0UmVzb3VyY2VMb2FkKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL05ldHdvcmsv
TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9OZXR3b3Jr
L05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbjoKKworICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpyZXNvdXJjZUxvYWRTY2hlZHVsZXIpOiBP
bmx5IHJldHVybiB0aGUgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyIGlmIE5ldHdvcmtQcm9jZXNz
IGlzIGVuYWJsZWQuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjplbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24p
OiBBY3R1YWxseSBrZWVwIHRoZSBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24gYXJvdW5kIGluIGEg
bWVtYmVyIHZhcmlhYmxlLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpuZXR3b3JrQ29u
bmVjdGlvbik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmg6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3M6OnVzZXNOZXR3b3JrUHJvY2Vzcyk6IEV4cG9zZSB0aGlzIGZvciBw
bGF0Zm9ybSBzdHJhdGVnaWVzIHNha2UuCisKIDIwMTItMTAtMjUgIEJyYWR5IEVpZHNvbiAgPGJl
aWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIEFsbG93IExvYWRlclN0cmF0ZWd5IHRvIG92ZXJy
aWRlIHRoZSBSZXNvdXJjZUxvYWRTY2hlZHVsZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9EZXJpdmVkU291cmNlcy5tYWtl
CmluZGV4IDM1OTc2OTYuLmFmNjVlY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0Rlcml2
ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMubWFrZQpA
QCAtMzYsNiArMzYsNyBAQCBWUEFUSCA9IFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvSWNv
bkRhdGFiYXNlIFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvS2V5VmFsdWVTdG9yYWdlIFwK
ICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvTWVkaWFDYWNoZSBcCisgICAgJChXZWJLaXQyKS9X
ZWJQcm9jZXNzL05ldHdvcmsgXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9Ob3RpZmljYXRp
b25zIFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvUGx1Z2lucyBcCiAgICAgJChXZWJLaXQy
KS9XZWJQcm9jZXNzL1Jlc291cmNlQ2FjaGUgXApAQCAtNTcsNiArNTgsNyBAQCBNRVNTQUdFX1JF
Q0VJVkVSUyA9IFwKICAgICBEb3dubG9hZFByb3h5IFwKICAgICBFdmVudERpc3BhdGNoZXIgXAog
ICAgIE5ldHdvcmtQcm9jZXNzIFwKKyAgICBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24gXAogICAg
IE5ldHdvcmtQcm9jZXNzUHJveHkgXAogICAgIE5QT2JqZWN0TWVzc2FnZVJlY2VpdmVyIFwKICAg
ICBQbHVnaW5Db250cm9sbGVyUHJveHkgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvSG9zdFJlY29yZC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9Ib3N0UmVjb3JkLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWI0
YTY5MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0hv
c3RSZWNvcmQuY3BwCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkhvc3RSZWNvcmQuaCIKKworI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
KyNpbmNsdWRlICJOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgIk5l
dHdvcmtQcm9jZXNzLmgiCisjaW5jbHVkZSAiTmV0d29ya1JlcXVlc3QuaCIKKyNpbmNsdWRlICJO
ZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCituYW1lc3BhY2UgV2ViS2l0IHsKKworSG9zdFJlY29yZDo6SG9zdFJlY29yZChjb25zdCBT
dHJpbmcmIG5hbWUsIGludCBtYXhSZXF1ZXN0c0luRmxpZ2h0KQorICAgIDogbV9uYW1lKG5hbWUp
CisgICAgLCBtX21heFJlcXVlc3RzSW5GbGlnaHQobWF4UmVxdWVzdHNJbkZsaWdodCkKK3sKK30K
KworSG9zdFJlY29yZDo6fkhvc3RSZWNvcmQoKQoreworI2lmbmRlZiBOREVCVUcKKyAgICBBU1NF
UlQobV9yZXF1ZXN0c0xvYWRpbmcuaXNFbXB0eSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIHAgPSAw
OyBwIDw9IFJlc291cmNlTG9hZFByaW9yaXR5SGlnaGVzdDsgcCsrKQorICAgICAgICBBU1NFUlQo
bV9yZXF1ZXN0c1BlbmRpbmdbcF0uaXNFbXB0eSgpKTsKKyNlbmRpZgorfQorCit2b2lkIEhvc3RS
ZWNvcmQ6OnNjaGVkdWxlKFBhc3NSZWZQdHI8TmV0d29ya1JlcXVlc3Q+IHJlY29yZCwgIFJlc291
cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5KQoreworICAgIG1fcmVxdWVzdHNQZW5kaW5nW3ByaW9y
aXR5XS5hcHBlbmQocmVjb3JkKTsKK30KKwordm9pZCBIb3N0UmVjb3JkOjphZGRMb2FkSW5Qcm9n
cmVzcyhSZXNvdXJjZUxvYWRJZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgbV9yZXF1ZXN0
c0xvYWRpbmcuYWRkKGlkZW50aWZpZXIpOworfQorCit2b2lkIEhvc3RSZWNvcmQ6OnJlbW92ZShS
ZXNvdXJjZUxvYWRJZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgaWYgKG1fcmVxdWVzdHNM
b2FkaW5nLmNvbnRhaW5zKGlkZW50aWZpZXIpKSB7CisgICAgICAgIG1fcmVxdWVzdHNMb2FkaW5n
LnJlbW92ZShpZGVudGlmaWVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBm
b3IgKGludCBwcmlvcml0eSA9IFJlc291cmNlTG9hZFByaW9yaXR5SGlnaGVzdDsgcHJpb3JpdHkg
Pj0gUmVzb3VyY2VMb2FkUHJpb3JpdHlMb3dlc3Q7IC0tcHJpb3JpdHkpIHsgIAorICAgICAgICBS
ZXF1ZXN0UXVldWU6Oml0ZXJhdG9yIGVuZCA9IG1fcmVxdWVzdHNQZW5kaW5nW3ByaW9yaXR5XS5l
bmQoKTsKKyAgICAgICAgZm9yIChSZXF1ZXN0UXVldWU6Oml0ZXJhdG9yIGl0ID0gbV9yZXF1ZXN0
c1BlbmRpbmdbcHJpb3JpdHldLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAg
ICAgaWYgKGl0LT5nZXQoKS0+aWRlbnRpZmllcigpID09IGlkZW50aWZpZXIpIHsKKyAgICAgICAg
ICAgICAgICBtX3JlcXVlc3RzUGVuZGluZ1twcmlvcml0eV0ucmVtb3ZlKGl0KTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jv
b2wgSG9zdFJlY29yZDo6aGFzUmVxdWVzdHMoKSBjb25zdAoreworICAgIGlmICghbV9yZXF1ZXN0
c0xvYWRpbmcuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGZvciAodW5z
aWduZWQgcCA9IDA7IHAgPD0gUmVzb3VyY2VMb2FkUHJpb3JpdHlIaWdoZXN0OyBwKyspIHsKKyAg
ICAgICAgaWYgKCFtX3JlcXVlc3RzUGVuZGluZ1twXS5pc0VtcHR5KCkpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSG9zdFJl
Y29yZDo6bGltaXRSZXF1ZXN0cyhSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSwgYm9vbCBz
ZXJpYWxMb2FkaW5nRW5hYmxlZCkgY29uc3QKK3sKKyAgICBpZiAocHJpb3JpdHkgPT0gUmVzb3Vy
Y2VMb2FkUHJpb3JpdHlWZXJ5TG93ICYmICFtX3JlcXVlc3RzTG9hZGluZy5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIG1fcmVxdWVzdHNMb2FkaW5nLnNpemUo
KSA+PSAoc2VyaWFsTG9hZGluZ0VuYWJsZWQgPyAxIDogbV9tYXhSZXF1ZXN0c0luRmxpZ2h0KTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9Ib3N0UmVjb3JkLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9Ib3N0UmVjb3JkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE4YjA1
NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0hvc3RS
ZWNvcmQuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBIb3N0UmVjb3Jk
X2gKKyNkZWZpbmUgSG9zdFJlY29yZF9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVx
dWVzdC5oPgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitjbGFzcyBOZXR3b3JrUmVxdWVzdDsKK3R5cGVkZWYgdWludDY0X3QgUmVzb3VyY2VMb2FkSWRl
bnRpZmllcjsKKworY2xhc3MgSG9zdFJlY29yZCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
SG9zdFJlY29yZCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEhvc3RS
ZWNvcmQoY29uc3QgU3RyaW5nJiBuYW1lLCBpbnQgbWF4UmVxdWVzdHNJbkZsaWdodCk7CisgICAg
fkhvc3RSZWNvcmQoKTsKKyAgICAKKyAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJl
dHVybiBtX25hbWU7IH0KKyAgICB2b2lkIHNjaGVkdWxlKFBhc3NSZWZQdHI8TmV0d29ya1JlcXVl
c3Q+LCAgV2ViQ29yZTo6UmVzb3VyY2VMb2FkUHJpb3JpdHkgPSBXZWJDb3JlOjpSZXNvdXJjZUxv
YWRQcmlvcml0eVZlcnlMb3cpOworICAgIHZvaWQgYWRkTG9hZEluUHJvZ3Jlc3MoUmVzb3VyY2VM
b2FkSWRlbnRpZmllcik7CisgICAgdm9pZCByZW1vdmUoUmVzb3VyY2VMb2FkSWRlbnRpZmllcik7
CisgICAgYm9vbCBoYXNSZXF1ZXN0cygpIGNvbnN0OworICAgIGJvb2wgbGltaXRSZXF1ZXN0cyhX
ZWJDb3JlOjpSZXNvdXJjZUxvYWRQcmlvcml0eSwgYm9vbCBzZXJpYWxMb2FkaW5nRW5hYmxlZCkg
Y29uc3Q7CisKKyAgICB0eXBlZGVmIERlcXVlPFJlZlB0cjxOZXR3b3JrUmVxdWVzdD4gPiBSZXF1
ZXN0UXVldWU7CisgICAgUmVxdWVzdFF1ZXVlJiByZXF1ZXN0c1BlbmRpbmcoV2ViQ29yZTo6UmVz
b3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHkpIHsgcmV0dXJuIG1fcmVxdWVzdHNQZW5kaW5nW3By
aW9yaXR5XTsgfQorCitwcml2YXRlOiAgICAgICAgICAgICAgICAgICAgCisgICAgUmVxdWVzdFF1
ZXVlIG1fcmVxdWVzdHNQZW5kaW5nW1dlYkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5SGlnaGVz
dCArIDFdOworICAgIHR5cGVkZWYgSGFzaFNldDxSZXNvdXJjZUxvYWRJZGVudGlmaWVyPiBSZXF1
ZXN0SWRlbnRpZmllck1hcDsKKyAgICBSZXF1ZXN0SWRlbnRpZmllck1hcCBtX3JlcXVlc3RzTG9h
ZGluZzsKKworICAgIGNvbnN0IFN0cmluZyBtX25hbWU7CisgICAgaW50IG1fbWF4UmVxdWVzdHNJ
bkZsaWdodDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gI2lmbmRl
ZiBIb3N0UmVjb3JkX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAppbmRleCAxZmRjZTE4
Li40OGE3MjMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCkBAIC0yOCw2ICsyOCw3
IEBACiAKICNpbmNsdWRlICJDb25uZWN0aW9uU3RhY2suaCIKICNpbmNsdWRlICJOZXR3b3JrUHJv
Y2Vzcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9SdW5Mb29wLmg+CiAKICNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQpAQCAtNDIs
NiArNDMsNyBAQCBQYXNzUmVmUHRyPE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBOZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Y3JlYXRlKAogfQogCiBOZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoQ29yZUlQQzo6Q29u
bmVjdGlvbjo6SWRlbnRpZmllciBjb25uZWN0aW9uSWRlbnRpZmllcikKKyAgICA6IG1fc2VyaWFs
TG9hZGluZ0VuYWJsZWQoZmFsc2UpCiB7CiAgICAgbV9jb25uZWN0aW9uID0gQ29yZUlQQzo6Q29u
bmVjdGlvbjo6Y3JlYXRlU2VydmVyQ29ubmVjdGlvbihjb25uZWN0aW9uSWRlbnRpZmllciwgdGhp
cywgUnVuTG9vcDo6bWFpbigpKTsKICAgICBtX2Nvbm5lY3Rpb24tPnNldE9ubHlTZW5kTWVzc2Fn
ZXNBc0Rpc3BhdGNoV2hlbldhaXRpbmdGb3JTeW5jUmVwbHlXaGVuUHJvY2Vzc2luZ1N1Y2hBTWVz
c2FnZSh0cnVlKTsKQEAgLTUxLDIyICs1MywzNiBAQCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoQ29yZUlQQzo6Q29ubmVjdGlvbgog
TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6On5OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2VzcygpCiB7CiAgICAgQVNTRVJUKCFtX2Nvbm5lY3Rpb24pOworICAgIEFTU0VSVChtX29ic2Vy
dmVycy5pc0VtcHR5KCkpOwogfQogCi12b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
OjpkaWRSZWNlaXZlTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBDb3Jl
SVBDOjpNZXNzYWdlSUQgbWVzc2FnZUlELCBDb3JlSVBDOjpNZXNzYWdlRGVjb2RlciYgZGVjb2Rl
cikKK3ZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlZ2lzdGVyT2JzZXJ2ZXIo
TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NPYnNlcnZlciogb2JzZXJ2ZXIpCiB7Ci0gICAg
Q29ubmVjdGlvblN0YWNrOjpDdXJyZW50Q29ubmVjdGlvblB1c2hlciBjdXJyZW50Q29ubmVjdGlv
bihDb25uZWN0aW9uU3RhY2s6OnNoYXJlZCgpLCBjb25uZWN0aW9uKTsKKyAgICBBU1NFUlQoIW1f
b2JzZXJ2ZXJzLmNvbnRhaW5zKG9ic2VydmVyKSk7CisgICAgbV9vYnNlcnZlcnMuYWRkKG9ic2Vy
dmVyKTsKK30KIAordm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6dW5yZWdpc3Rl
ck9ic2VydmVyKE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzT2JzZXJ2ZXIqIG9ic2VydmVy
KQoreworICAgIEFTU0VSVChtX29ic2VydmVycy5jb250YWlucyhvYnNlcnZlcikpOworICAgIG1f
b2JzZXJ2ZXJzLnJlbW92ZShvYnNlcnZlcik7Cit9CisgICAgCit2b2lkIE5ldHdvcmtDb25uZWN0
aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiBj
b25uZWN0aW9uLCBDb3JlSVBDOjpNZXNzYWdlSUQgbWVzc2FnZUlELCBDb3JlSVBDOjpNZXNzYWdl
RGVjb2RlciYgZGVjb2RlcikKK3sKICAgICBpZiAobWVzc2FnZUlELmlzPENvcmVJUEM6Ok1lc3Nh
Z2VDbGFzc05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzPigpKSB7CiAgICAgICAgIGRpZFJl
Y2VpdmVOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2UoY29ubmVjdGlvbiwgbWVz
c2FnZUlELCBkZWNvZGVyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQogICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogfQogCi12b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpk
aWRSZWNlaXZlU3luY01lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29y
ZUlQQzo6TWVzc2FnZUlEIG1lc3NhZ2VJRCwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImIGFyZ3Vt
ZW50cywgT3duUHRyPENvcmVJUEM6Ok1lc3NhZ2VFbmNvZGVyPiYgcmVwbHkpCit2b2lkIE5ldHdv
cmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlU3luY01lc3NhZ2UoQ29yZUlQQzo6
Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29yZUlQQzo6TWVzc2FnZUlEIG1lc3NhZ2VJRCwgQ29y
ZUlQQzo6TWVzc2FnZURlY29kZXImIGRlY29kZXIsIE93blB0cjxDb3JlSVBDOjpNZXNzYWdlRW5j
b2Rlcj4mIHJlcGx5KQogeworICAgIGlmIChtZXNzYWdlSUQuaXM8Q29yZUlQQzo6TWVzc2FnZUNs
YXNzTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+KCkpIHsKKyAgICAgICAgZGlkUmVjZWl2
ZVN5bmNOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2UoY29ubmVjdGlvbiwgbWVz
c2FnZUlELCBkZWNvZGVyLCByZXBseSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKQEAgLTc3LDYgKzkzLDEzIEBAIHZvaWQgTmV0d29ya0Nv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZENsb3NlKENvcmVJUEM6OkNvbm5lY3Rpb24qKQogICAg
IAogICAgIE5ldHdvcmtQcm9jZXNzOjpzaGFyZWQoKS5yZW1vdmVOZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcyh0aGlzKTsKICAgICAKKyAgICBWZWN0b3I8TmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3NPYnNlcnZlcio+IG9ic2VydmVyczsKKyAgICBjb3B5VG9WZWN0b3IobV9vYnNlcnZl
cnMsIG9ic2VydmVycyk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYnNlcnZlcnMuc2l6
ZSgpOyArK2kpCisgICAgICAgIG9ic2VydmVyc1tpXS0+Y29ubmVjdGlvblRvV2ViUHJvY2Vzc0Rp
ZENsb3NlKHRoaXMpOworICAgIAorICAgIC8vIEZJWE1FOiBDbGVhciBvdXQgYWxsIHBlbmRpbmcg
cmVxdWVzdHMgZm9yIHRoaXMgY29ubmVjdGlvbiBpbiB0aGUgbG9hZHNjaGVkdWxlcgorICAgIAog
ICAgIG1fY29ubmVjdGlvbiA9IDA7CiB9CiAKQEAgLTg0LDkgKzEwNyw0NCBAQCB2b2lkIE5ldHdv
cmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoQ29yZUlQ
Qzo6Q29ubmVjdGlvbgogewogfQogCi12b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
OjpkaWRSZWNlaXZlTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlKENvcmVJUEM6
OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6Ok1lc3NhZ2VEZWNvZGVy
JikKK3ZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnNjaGVkdWxlTmV0d29ya1Jl
cXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCB1aW50MzJfdCByZXNvdXJjZUxv
YWRQcmlvcml0eSwgUmVzb3VyY2VMb2FkSWRlbnRpZmllciYgcmVzb3VyY2VMb2FkSWRlbnRpZmll
cikKK3sKKyAgICByZXNvdXJjZUxvYWRJZGVudGlmaWVyID0gTmV0d29ya1Byb2Nlc3M6OnNoYXJl
ZCgpLm5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS5zY2hlZHVsZU5ldHdvcmtSZXF1ZXN0
KHJlcXVlc3QsIHN0YXRpY19jYXN0PFJlc291cmNlTG9hZFByaW9yaXR5PihyZXNvdXJjZUxvYWRQ
cmlvcml0eSksIHRoaXMpOworfQorCit2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
OjphZGRMb2FkSW5Qcm9ncmVzcyhjb25zdCBXZWJDb3JlOjpLVVJMJiB1cmwsIFJlc291cmNlTG9h
ZElkZW50aWZpZXImIGlkZW50aWZpZXIpCit7CisgICAgaWRlbnRpZmllciA9IE5ldHdvcmtQcm9j
ZXNzOjpzaGFyZWQoKS5uZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkuYWRkTG9hZEluUHJv
Z3Jlc3ModXJsKTsKK30KKwordm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6cmVt
b3ZlTG9hZElkZW50aWZpZXIoUmVzb3VyY2VMb2FkSWRlbnRpZmllciBpZGVudGlmaWVyKQorewor
ICAgIE5ldHdvcmtQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVy
KCkucmVtb3ZlTG9hZElkZW50aWZpZXIoaWRlbnRpZmllcik7Cit9CisKK3ZvaWQgTmV0d29ya0Nv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNyb3NzT3JpZ2luUmVkaXJlY3RSZWNlaXZlZChSZXNvdXJj
ZUxvYWRJZGVudGlmaWVyIGlkZW50aWZpZXIsIGNvbnN0IEtVUkwmIHJlZGlyZWN0VVJMKQorewor
ICAgIE5ldHdvcmtQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVy
KCkuY3Jvc3NPcmlnaW5SZWRpcmVjdFJlY2VpdmVkKGlkZW50aWZpZXIsIHJlZGlyZWN0VVJMKTsK
K30KKwordm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6c2VydmVQZW5kaW5nUmVx
dWVzdHModWludDMyX3QgcmVzb3VyY2VMb2FkUHJpb3JpdHkpCit7CisgICAgTmV0d29ya1Byb2Nl
c3M6OnNoYXJlZCgpLm5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS5zZXJ2ZVBlbmRpbmdS
ZXF1ZXN0cyhzdGF0aWNfY2FzdDxSZXNvdXJjZUxvYWRQcmlvcml0eT4ocmVzb3VyY2VMb2FkUHJp
b3JpdHkpKTsKK30KKwordm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6c3VzcGVu
ZFBlbmRpbmdSZXF1ZXN0cygpCit7CisgICAgTmV0d29ya1Byb2Nlc3M6OnNoYXJlZCgpLm5ldHdv
cmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS5zdXNwZW5kUGVuZGluZ1JlcXVlc3RzKCk7Cit9CisK
K3ZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlc3VtZVBlbmRpbmdSZXF1ZXN0
cygpCit7CisgICAgTmV0d29ya1Byb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtSZXNvdXJjZUxvYWRT
Y2hlZHVsZXIoKS5yZXN1bWVQZW5kaW5nUmVxdWVzdHMoKTsKK30KKwordm9pZCBOZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzczo6c2V0U2VyaWFsTG9hZGluZ0VuYWJsZWQoYm9vbCBlbmFibGVk
KQogewotICAgIC8vIEVtcHR5IGZvciBub3cgLSBUaGVyZSBhcmUgbm8gbWVzc2FnZXMgdG8gaGFu
ZGxlLgorICAgIG1fc2VyaWFsTG9hZGluZ0VuYWJsZWQgPSBlbmFibGVkOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCmluZGV4IDYzNTEzNjAuLjdm
N2FmZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaApAQCAtMzAsMTcgKzMwLDM2IEBACiAK
ICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiTmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3NNZXNzYWdlcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkUHJpb3Jp
dHkuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CiAKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFJlc291cmNlUmVxdWVzdDsKK30KKwog
bmFtZXNwYWNlIFdlYktpdCB7CiAKK2NsYXNzIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
OwordHlwZWRlZiB1aW50NjRfdCBSZXNvdXJjZUxvYWRJZGVudGlmaWVyOworCitjbGFzcyBOZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzc09ic2VydmVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFs
IH5OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzc09ic2VydmVyKCkgeyB9CisgICAgdmlydHVh
bCB2b2lkIGNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NEaWRDbG9zZShOZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2VzcyopID0gMDsKK307CisKIGNsYXNzIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzIDogcHVibGljIFJlZkNvdW50ZWQ8TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+LCBD
b3JlSVBDOjpDb25uZWN0aW9uOjpDbGllbnQgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVm
UHRyPE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBjcmVhdGUoQ29yZUlQQzo6Q29ubmVj
dGlvbjo6SWRlbnRpZmllcik7CiAgICAgdmlydHVhbCB+TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MoKTsKIAogICAgIENvcmVJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24oKSBjb25zdCB7
IHJldHVybiBtX2Nvbm5lY3Rpb24uZ2V0KCk7IH0KKyAgICAKKyAgICB2b2lkIHJlZ2lzdGVyT2Jz
ZXJ2ZXIoTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NPYnNlcnZlciopOworICAgIHZvaWQg
dW5yZWdpc3Rlck9ic2VydmVyKE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzT2JzZXJ2ZXIq
KTsKKworICAgIGJvb2wgaXNTZXJpYWxMb2FkaW5nRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
c2VyaWFsTG9hZGluZ0VuYWJsZWQ7IH0KIAogcHJpdmF0ZToKICAgICBOZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2VzcyhDb3JlSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyKTsKQEAgLTUzLDgg
KzcyLDIyIEBAIHByaXZhdGU6CiAKICAgICAvLyBNZXNzYWdlIGhhbmRsZXJzLgogICAgIHZvaWQg
ZGlkUmVjZWl2ZU5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZShDb3JlSVBDOjpD
b25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpNZXNzYWdlRGVjb2RlciYp
OwotCisgICAgdm9pZCBkaWRSZWNlaXZlU3luY05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBD
OjpNZXNzYWdlRGVjb2RlciYsIE93blB0cjxDb3JlSVBDOjpNZXNzYWdlRW5jb2Rlcj4mKTsKKyAg
ICAKKyAgICB2b2lkIHNjaGVkdWxlTmV0d29ya1JlcXVlc3QoY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiwgdWludDMyX3QgcmVzb3VyY2VMb2FkUHJpb3JpdHksIFJlc291cmNlTG9hZElk
ZW50aWZpZXImKTsKKyAgICB2b2lkIGFkZExvYWRJblByb2dyZXNzKGNvbnN0IFdlYkNvcmU6OktV
UkwmLCBSZXNvdXJjZUxvYWRJZGVudGlmaWVyJik7CisgICAgdm9pZCByZW1vdmVMb2FkSWRlbnRp
ZmllcihSZXNvdXJjZUxvYWRJZGVudGlmaWVyKTsKKyAgICB2b2lkIGNyb3NzT3JpZ2luUmVkaXJl
Y3RSZWNlaXZlZChSZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBy
ZWRpcmVjdFVSTCk7CisgICAgdm9pZCBzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyh1aW50MzJfdCByZXNv
dXJjZUxvYWRQcmlvcml0eSk7CisgICAgdm9pZCBzdXNwZW5kUGVuZGluZ1JlcXVlc3RzKCk7Cisg
ICAgdm9pZCByZXN1bWVQZW5kaW5nUmVxdWVzdHMoKTsKKyAgICB2b2lkIHNldFNlcmlhbExvYWRp
bmdFbmFibGVkKGJvb2wpOworICAgIAogICAgIFJlZlB0cjxDb3JlSVBDOjpDb25uZWN0aW9uPiBt
X2Nvbm5lY3Rpb247CisgICAgCisgICAgSGFzaFNldDxOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzc09ic2VydmVyKj4gbV9vYnNlcnZlcnM7CisgICAgCisgICAgYm9vbCBtX3NlcmlhbExvYWRp
bmdFbmFibGVkOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5t
ZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCmluZGV4IGExMDQ3YzguLjU2YmQzNDQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCkBAIC0yNCw2ICsyNCwy
MCBAQAogCiBtZXNzYWdlcyAtPiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyB7CiAKKyAg
ICBTY2hlZHVsZU5ldHdvcmtSZXF1ZXN0KFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCByZXF1ZXN0
LCB1aW50MzJfdCByZXNvdXJjZUxvYWRQcmlvcml0eSkgLT4gKHVpbnQ2NF90IHJlc291cmNlTG9h
ZElkZW50aWZpZXIpCisgICAgQWRkTG9hZEluUHJvZ3Jlc3MoV2ViQ29yZTo6S1VSTCB1cmwpIC0+
ICh1aW50NjRfdCByZXNvdXJjZUxvYWRJZGVudGlmaWVyKQorICAgIFJlbW92ZUxvYWRJZGVudGlm
aWVyKHVpbnQ2NF90IHJlc291cmNlTG9hZElkZW50aWZpZXIpCisKKyAgICAvLyBJdCdzIHBvc3Np
YmxlIHRoYXQgd2Ugd2lsbCBiZSBhYmxlIHRvIGRvIGF3YXkgd2l0aCB0aGlzIG1lc3NhZ2UgYW5k
IGhhdmUgdGhlIE5ldHdvcmtQcm9jZXNzCisgICAgLy8gbWFuYWdlIGl0IGludGVybmFsbHkuCisg
ICAgY3Jvc3NPcmlnaW5SZWRpcmVjdFJlY2VpdmVkKHVpbnQ2NF90IHJlc291cmNlTG9hZElkZW50
aWZpZXIsIFdlYkNvcmU6OktVUkwgcmVkaXJlY3RVUkwpIC0+ICgpCisgICAgCisgICAgU2VydmVQ
ZW5kaW5nUmVxdWVzdHModWludDMyX3QgcmVzb3VyY2VMb2FkUHJpb3JpdHkpCisKKyAgICBTdXNw
ZW5kUGVuZGluZ1JlcXVlc3RzKCkgLT4gKCkKKyAgICBSZXN1bWVQZW5kaW5nUmVxdWVzdHMoKSAt
PiAoKQorICAgIAorICAgIFNldFNlcmlhbExvYWRpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkgLT4g
KCkKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oIGIvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAppbmRleCA1ODI4ZTFmLi4wMDBl
ZmMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
LmgKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQogCiAjaW5j
bHVkZSAiQ2hpbGRQcm9jZXNzLmgiCisjaW5jbHVkZSAiTmV0d29ya1Jlc291cmNlTG9hZFNjaGVk
dWxlci5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTQ5LDYgKzUwLDggQEAgcHVibGljOgogCiAgICAgdm9pZCByZW1vdmVOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2VzcyhOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyopOwogCisgICAg
TmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlciYgbmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxl
cigpIHsgcmV0dXJuIG1fbmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjsgfQorCiBwcml2YXRl
OgogICAgIE5ldHdvcmtQcm9jZXNzKCk7CiAgICAgfk5ldHdvcmtQcm9jZXNzKCk7CkBAIC03NSw2
ICs3OCw3IEBAIHByaXZhdGU6CiAgICAgLy8gQ29ubmVjdGlvbnMgdG8gV2ViUHJvY2Vzc2VzLgog
ICAgIFZlY3RvcjxSZWZQdHI8TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+ID4gbV93ZWJQ
cm9jZXNzQ29ubmVjdGlvbnM7CiAKKyAgICBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyIG1f
bmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1JlcXVl
c3QuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1JlcXVlc3QuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMWVlYmIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVxdWVzdC5jcHAK
QEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJOZXR3b3JrUmVxdWVzdC5oIgorCisjaW5jbHVkZSAiTmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK05ldHdvcmtSZXF1ZXN0OjpOZXR3
b3JrUmVxdWVzdChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291
cmNlTG9hZElkZW50aWZpZXIgaWRlbnRpZmllciwgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MqIGNvbm5lY3Rpb24pCisgICAgOiBtX3JlcXVlc3QocmVxdWVzdCkKKyAgICAsIG1faWRlbnRp
ZmllcihpZGVudGlmaWVyKQorICAgICwgbV9jb25uZWN0aW9uKGNvbm5lY3Rpb24pCit7CisgICAg
Y29ubmVjdGlvbi0+cmVnaXN0ZXJPYnNlcnZlcih0aGlzKTsKK30KKworTmV0d29ya1JlcXVlc3Q6
On5OZXR3b3JrUmVxdWVzdCgpCit7CisgICAgaWYgKG1fY29ubmVjdGlvbikKKyAgICAgICAgbV9j
b25uZWN0aW9uLT51bnJlZ2lzdGVyT2JzZXJ2ZXIodGhpcyk7Cit9CisKK3ZvaWQgTmV0d29ya1Jl
cXVlc3Q6OmNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NEaWRDbG9zZShOZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2VzcyogY29ubmVjdGlvbikKK3sKKyAgICBBU1NFUlRfQVJHKGNvbm5lY3Rpb24sIGNv
bm5lY3Rpb24gPT0gbV9jb25uZWN0aW9uLmdldCgpKTsKKyAgICBtX2Nvbm5lY3Rpb24tPnVucmVn
aXN0ZXJPYnNlcnZlcih0aGlzKTsKKyAgICBtX2Nvbm5lY3Rpb24gPSAwOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtSZXF1ZXN0LmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UmVxdWVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwZDUxNjcKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVx
dWVzdC5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE5ldHdvcmtSZXF1
ZXN0X2gKKyNkZWZpbmUgTmV0d29ya1JlcXVlc3RfaAorCisjaW5jbHVkZSAiTmV0d29ya0Nvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5o
PgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordHlwZWRlZiB1aW50NjRfdCBSZXNvdXJjZUxvYWRJ
ZGVudGlmaWVyOworCitjbGFzcyBOZXR3b3JrUmVxdWVzdCA6IHB1YmxpYyBSZWZDb3VudGVkPE5l
dHdvcmtSZXF1ZXN0PiwgcHVibGljIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzT2JzZXJ2
ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8TmV0d29ya1JlcXVlc3Q+IGNyZWF0ZShj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlTG9hZElkZW50
aWZpZXIgaWRlbnRpZmllciwgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqIGNvbm5lY3Rp
b24pCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE5ldHdvcmtSZXF1ZXN0KHJl
cXVlc3QsIGlkZW50aWZpZXIsIGNvbm5lY3Rpb24pKTsKKyAgICB9CisgICAgCisgICAgfk5ldHdv
cmtSZXF1ZXN0KCk7CisKKyAgICB2b2lkIGNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NEaWRDbG9zZShO
ZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyopOworICAgIAorICAgIFJlc291cmNlTG9hZElk
ZW50aWZpZXIgaWRlbnRpZmllcigpIHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQorICAgIAorICAg
IE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKiBjb25uZWN0aW9uVG9XZWJQcm9jZXNzKCkg
eyByZXR1cm4gbV9jb25uZWN0aW9uLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgTmV0d29ya1Jl
cXVlc3QoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgUmVzb3VyY2VMb2FkSWRlbnRp
ZmllciwgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqKTsKKworICAgIFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCBtX3JlcXVlc3Q7CisgICAgUmVzb3VyY2VMb2FkSWRlbnRpZmllciBtX2lk
ZW50aWZpZXI7CisKKyAgICBSZWZQdHI8TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+IG1f
Y29ubmVjdGlvbjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gTmV0
d29ya1JlcXVlc3RfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi45MTc0ZDI0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHAKQEAg
LTAsMCArMSwyMDMgQEAKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJOZXR3b3JrUmVz
b3VyY2VMb2FkU2NoZWR1bGVyLmgiCisKKyNpbmNsdWRlICJIb3N0UmVjb3JkLmgiCisjaW5jbHVk
ZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgi
CisjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3Njb25uZWN0aW9uTWVzc2FnZXMuaCIKKyNpbmNsdWRl
ICJOZXR3b3JrUmVxdWVzdC5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lm
IEVOQUJMRShORVRXT1JLX1BST0NFU1MpCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heFJlcXVlc3RzSW5G
bGlnaHRGb3JOb25IVFRQUHJvdG9jb2xzID0gMjA7CitzdGF0aWMgdW5zaWduZWQgbWF4UmVxdWVz
dHNJbkZsaWdodFBlckhvc3Q7CitzdGF0aWMgUmVzb3VyY2VMb2FkSWRlbnRpZmllciBzX2N1cnJl
bnRSZXNvdXJjZUxvYWRJZGVudGlmaWVyOworCitOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVy
OjpOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkKKyAgICA6IG1fbm9uSFRUUFByb3RvY29s
SG9zdChuZXcgSG9zdFJlY29yZChTdHJpbmcoKSwgbWF4UmVxdWVzdHNJbkZsaWdodEZvck5vbkhU
VFBQcm90b2NvbHMpKQorICAgICwgbV9yZXF1ZXN0VGltZXIodGhpcywgJk5ldHdvcmtSZXNvdXJj
ZUxvYWRTY2hlZHVsZXI6OnJlcXVlc3RUaW1lckZpcmVkKQorCit7CisgICAgbWF4UmVxdWVzdHNJ
bkZsaWdodFBlckhvc3QgPSBwbGF0Zm9ybUluaXRpYWxpemVNYXhpbXVtSFRUUENvbm5lY3Rpb25D
b3VudFBlckhvc3QoKTsKK30KKwordm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpz
Y2hlZHVsZVNlcnZlUGVuZGluZ1JlcXVlc3RzKCkKK3sKKyAgICBpZiAoIW1fcmVxdWVzdFRpbWVy
LmlzQWN0aXZlKCkpCisgICAgICAgIG1fcmVxdWVzdFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30K
Kwordm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZXF1ZXN0VGltZXJGaXJlZChX
ZWJDb3JlOjpUaW1lcjxOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyPiopCit7CisgICAgc2Vy
dmVQZW5kaW5nUmVxdWVzdHMoKTsKK30KKworUmVzb3VyY2VMb2FkSWRlbnRpZmllciBOZXR3b3Jr
UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZU5ldHdvcmtSZXF1ZXN0KGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHksIE5ldHdv
cmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKiBjb25uZWN0aW9uKQoreyAgICAKKyAgICBSZXNvdXJj
ZUxvYWRJZGVudGlmaWVyIGlkZW50aWZpZXIgPSArK3NfY3VycmVudFJlc291cmNlTG9hZElkZW50
aWZpZXI7CisKKyAgICBMT0coTmV0d29yaywgIihOZXR3b3JrUHJvY2VzcykgTmV0d29ya1Jlc291
cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVOZXR3b3JrUmVxdWVzdCByZXNvdXJjZSAlbGx1ICcl
cyciLCBpZGVudGlmaWVyLCByZXF1ZXN0LnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwor
CisgICAgSG9zdFJlY29yZCogaG9zdCA9IGhvc3RGb3JVUkwocmVxdWVzdC51cmwoKSwgQ3JlYXRl
SWZOb3RGb3VuZCk7CisgICAgYm9vbCBoYWRSZXF1ZXN0cyA9IGhvc3QtPmhhc1JlcXVlc3RzKCk7
CisgICAgaG9zdC0+c2NoZWR1bGUoTmV0d29ya1JlcXVlc3Q6OmNyZWF0ZShyZXF1ZXN0LCBpZGVu
dGlmaWVyLCBjb25uZWN0aW9uKSwgcHJpb3JpdHkpOworICAgIG1faWRlbnRpZmllcnMuYWRkKGlk
ZW50aWZpZXIsIGhvc3QpOworCisgICAgaWYgKHByaW9yaXR5ID4gUmVzb3VyY2VMb2FkUHJpb3Jp
dHlMb3cgfHwgIXJlcXVlc3QudXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpIHx8IChwcmlv
cml0eSA9PSBSZXNvdXJjZUxvYWRQcmlvcml0eUxvdyAmJiAhaGFkUmVxdWVzdHMpKSB7CisgICAg
ICAgIC8vIFRyeSB0byByZXF1ZXN0IGltcG9ydGFudCByZXNvdXJjZXMgaW1tZWRpYXRlbHkuCisg
ICAgICAgIHNlcnZlUGVuZGluZ1JlcXVlc3RzRm9ySG9zdChob3N0LCBwcmlvcml0eSk7CisgICAg
ICAgIHJldHVybiBpZGVudGlmaWVyOworICAgIH0KKyAgICAKKyAgICAvLyBIYW5kbGUgYXN5bmNo
cm9ub3VzbHkgc28gZWFybHkgbG93IHByaW9yaXR5IHJlcXVlc3RzIGRvbid0IGdldCBzY2hlZHVs
ZWQgYmVmb3JlIGxhdGVyIGhpZ2ggcHJpb3JpdHkgb25lcy4KKyAgICBzY2hlZHVsZVNlcnZlUGVu
ZGluZ1JlcXVlc3RzKCk7CisgICAgcmV0dXJuIGlkZW50aWZpZXI7Cit9CisKK1Jlc291cmNlTG9h
ZElkZW50aWZpZXIgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6YWRkTG9hZEluUHJvZ3Jl
c3MoY29uc3QgV2ViQ29yZTo6S1VSTCYgdXJsKQoreworICAgIFJlc291cmNlTG9hZElkZW50aWZp
ZXIgaWRlbnRpZmllciA9ICsrc19jdXJyZW50UmVzb3VyY2VMb2FkSWRlbnRpZmllcjsKKworICAg
IExPRyhOZXR3b3JrLCAiKE5ldHdvcmtQcm9jZXNzKSBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1
bGVyOjphZGRMb2FkSW5Qcm9ncmVzcyByZXNvdXJjZSAlbGx1IHdpdGggdXJsICclcyciLCBpZGVu
dGlmaWVyLCB1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICBIb3N0UmVjb3JkKiBo
b3N0ID0gaG9zdEZvclVSTCh1cmwsIENyZWF0ZUlmTm90Rm91bmQpOworICAgIGhvc3QtPmFkZExv
YWRJblByb2dyZXNzKGlkZW50aWZpZXIpOworICAgIG1faWRlbnRpZmllcnMuYWRkKGlkZW50aWZp
ZXIsIGhvc3QpOworICAgIAorICAgIHJldHVybiBpZGVudGlmaWVyOworfQorCitIb3N0UmVjb3Jk
KiBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpob3N0Rm9yVVJMKGNvbnN0IFdlYkNvcmU6
OktVUkwmIHVybCwgQ3JlYXRlSG9zdFBvbGljeSBjcmVhdGVIb3N0UG9saWN5KQoreworICAgIGlm
ICghdXJsLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkKKyAgICAgICAgcmV0dXJuIG1fbm9uSFRU
UFByb3RvY29sSG9zdDsKKworICAgIG1faG9zdHMuY2hlY2tDb25zaXN0ZW5jeSgpOworICAgIFN0
cmluZyBob3N0TmFtZSA9IHVybC5ob3N0KCk7CisgICAgSG9zdFJlY29yZCogaG9zdCA9IG1faG9z
dHMuZ2V0KGhvc3ROYW1lKTsKKyAgICBpZiAoIWhvc3QgJiYgY3JlYXRlSG9zdFBvbGljeSA9PSBD
cmVhdGVJZk5vdEZvdW5kKSB7CisgICAgICAgIGhvc3QgPSBuZXcgSG9zdFJlY29yZChob3N0TmFt
ZSwgbWF4UmVxdWVzdHNJbkZsaWdodFBlckhvc3QpOworICAgICAgICBtX2hvc3RzLmFkZChob3N0
TmFtZSwgaG9zdCk7CisgICAgfQorICAgIAorICAgIHJldHVybiBob3N0OworfQorCit2b2lkIE5l
dHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlbW92ZUxvYWRJZGVudGlmaWVyKFJlc291cmNl
TG9hZElkZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBBU1NFUlQoaWRlbnRpZmllcik7CisK
KyAgICBMT0coTmV0d29yaywgIihOZXR3b3JrUHJvY2VzcykgTmV0d29ya1Jlc291cmNlTG9hZFNj
aGVkdWxlcjo6cmVtb3ZlTG9hZElkZW50aWZpZXIgcmVtb3ZpbmcgbG9hZCBpZGVudGlmaWVyICVs
bHUiLCBpZGVudGlmaWVyKTsKKworICAgIEhvc3RSZWNvcmQqIGhvc3QgPSBtX2lkZW50aWZpZXJz
LnRha2UoaWRlbnRpZmllcik7CisgICAgQVNTRVJUKGhvc3QpOworICAgIGlmIChob3N0KQorICAg
ICAgICBob3N0LT5yZW1vdmUoaWRlbnRpZmllcik7CisKKyAgICBzY2hlZHVsZVNlcnZlUGVuZGlu
Z1JlcXVlc3RzKCk7Cit9CisKK3ZvaWQgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6Y3Jv
c3NPcmlnaW5SZWRpcmVjdFJlY2VpdmVkKFJlc291cmNlTG9hZElkZW50aWZpZXIgaWRlbnRpZmll
ciwgY29uc3QgV2ViQ29yZTo6S1VSTCYgcmVkaXJlY3RVUkwpCit7CisgICAgTE9HKE5ldHdvcmss
ICIoTmV0d29ya1Byb2Nlc3MpIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmNyb3NzT3Jp
Z2luUmVkaXJlY3RSZWNlaXZlZCByZXNvdXJjZSAlbGx1IHJlZGlyZWN0ZWQgdG8gJyVzJyIsIGlk
ZW50aWZpZXIsIHJlZGlyZWN0VVJMLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgSG9z
dFJlY29yZCogb2xkSG9zdCA9IG1faWRlbnRpZmllcnMuZ2V0KGlkZW50aWZpZXIpOworICAgIEhv
c3RSZWNvcmQqIG5ld0hvc3QgPSBob3N0Rm9yVVJMKHJlZGlyZWN0VVJMLCBDcmVhdGVJZk5vdEZv
dW5kKTsKKyAgICBBU1NFUlQob2xkSG9zdCk7CisgICAgCisgICAgaWYgKG9sZEhvc3QtPm5hbWUo
KSA9PSBuZXdIb3N0LT5uYW1lKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBuZXdIb3N0
LT5hZGRMb2FkSW5Qcm9ncmVzcyhpZGVudGlmaWVyKTsKKyAgICBtX2lkZW50aWZpZXJzLnNldChp
ZGVudGlmaWVyLCBuZXdIb3N0KTsKKworICAgIG9sZEhvc3QtPnJlbW92ZShpZGVudGlmaWVyKTsg
ICAgCit9CisKK3ZvaWQgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5n
UmVxdWVzdHMoUmVzb3VyY2VMb2FkUHJpb3JpdHkgbWluaW11bVByaW9yaXR5KQoreworICAgIGlm
IChtX3N1c3BlbmRQZW5kaW5nUmVxdWVzdHNDb3VudCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
TE9HKE5ldHdvcmssICIoTmV0d29ya1Byb2Nlc3MpIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVs
ZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzIFNlcnZpbmcgcmVxdWVzdHMgZm9yIHVwIHRvICVpIGhv
c3RzIiwgbV9ob3N0cy5zaXplKCkpOworCisgICAgbV9yZXF1ZXN0VGltZXIuc3RvcCgpOworICAg
IAorICAgIHNlcnZlUGVuZGluZ1JlcXVlc3RzRm9ySG9zdChtX25vbkhUVFBQcm90b2NvbEhvc3Qs
IG1pbmltdW1Qcmlvcml0eSk7CisKKyAgICBtX2hvc3RzLmNoZWNrQ29uc2lzdGVuY3koKTsKKyAg
ICBWZWN0b3I8SG9zdFJlY29yZCo+IGhvc3RzVG9TZXJ2ZTsKKyAgICBjb3B5VmFsdWVzVG9WZWN0
b3IobV9ob3N0cywgaG9zdHNUb1NlcnZlKTsKKworICAgIHNpemVfdCBzaXplID0gaG9zdHNUb1Nl
cnZlLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAg
ICAgICBIb3N0UmVjb3JkKiBob3N0ID0gaG9zdHNUb1NlcnZlW2ldOworICAgICAgICBpZiAoaG9z
dC0+aGFzUmVxdWVzdHMoKSkKKyAgICAgICAgICAgIHNlcnZlUGVuZGluZ1JlcXVlc3RzRm9ySG9z
dChob3N0LCBtaW5pbXVtUHJpb3JpdHkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkZWxl
dGUgbV9ob3N0cy50YWtlKGhvc3QtPm5hbWUoKSk7CisgICAgfQorfQorCit2b2lkIE5ldHdvcmtS
ZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzRm9ySG9zdChIb3N0UmVj
b3JkKiBob3N0LCBSZXNvdXJjZUxvYWRQcmlvcml0eSBtaW5pbXVtUHJpb3JpdHkpCit7CisgICAg
TE9HKE5ldHdvcmssICJOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdS
ZXF1ZXN0cyBIb3N0IG5hbWU9JyVzJyIsIGhvc3QtPm5hbWUoKS51dGY4KCkuZGF0YSgpKTsKKwor
ICAgIGZvciAoaW50IHByaW9yaXR5ID0gUmVzb3VyY2VMb2FkUHJpb3JpdHlIaWdoZXN0OyBwcmlv
cml0eSA+PSBtaW5pbXVtUHJpb3JpdHk7IC0tcHJpb3JpdHkpIHsKKyAgICAgICAgSG9zdFJlY29y
ZDo6UmVxdWVzdFF1ZXVlJiByZXF1ZXN0c1BlbmRpbmcgPSBob3N0LT5yZXF1ZXN0c1BlbmRpbmco
UmVzb3VyY2VMb2FkUHJpb3JpdHkocHJpb3JpdHkpKTsKKworICAgICAgICB3aGlsZSAoIXJlcXVl
c3RzUGVuZGluZy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIFJlZlB0cjxOZXR3b3JrUmVxdWVz
dD4gcmVxdWVzdCA9IHJlcXVlc3RzUGVuZGluZy5maXJzdCgpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICAvLyBUaGlzIHJlcXVlc3QgbWlnaHQgYmUgZnJvbSBXZWJQcm9jZXNzIHdlJ3ZlIGxv
c3Qgb3VyIGNvbm5lY3Rpb24gdG8uCisgICAgICAgICAgICAvLyBJZiBzbyB3ZSBzaG91bGQganVz
dCBza2lwIGl0LgorICAgICAgICAgICAgaWYgKCFyZXF1ZXN0LT5jb25uZWN0aW9uVG9XZWJQcm9j
ZXNzKCkpIHsKKyAgICAgICAgICAgICAgICByZXF1ZXN0c1BlbmRpbmcucmVtb3ZlRmlyc3QoKTsK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Ly8gRm9yIG5hbWVkIGhvc3RzIC0gd2hpY2ggYXJlIG9ubHkgaHR0cChzKSBob3N0cyAtIHdlIHNo
b3VsZCBhbHdheXMgZW5mb3JjZSB0aGUgY29ubmVjdGlvbiBsaW1pdC4KKyAgICAgICAgICAgIC8v
IEZvciBub24tbmFtZWQgaG9zdHMgLSBldmVyeXRoaW5nIGJ1dCBodHRwKHMpIC0gd2Ugc2hvdWxk
IG9ubHkgZW5mb3JjZSB0aGUgbGltaXQgaWYgdGhlIGRvY3VtZW50CisgICAgICAgICAgICAvLyBp
c24ndCBkb25lIHBhcnNpbmcgYW5kIHdlIGRvbid0IGtub3cgYWxsIHN0eWxlc2hlZXRzIHlldC4K
KworICAgICAgICAgICAgLy8gRklYTUU6IEhvdyBjYW4gdGhlIG5ldHdvcmsgcHJvY2VzcyBrbm93
IGlmIHRoZSBkb2N1bWVudCBpcyBwYXJzaW5nIG9yIGhhcyBpdHMgc3R5bGVzaGVldHMgbG9hZGVk
PworICAgICAgICAgICAgLy8gV2UnbGwgbmVlZCB0byB0ZWFjaCBpdC4KKyAgICAgICAgICAgIC8v
IEZvciBub3cgd2UnbGwganVzdCBhbHdheXMgbGltaXQgcmVxdWVzdHMgZm9yIG5hbWVkIGhvc3Rz
LCBidXQgd2UgbmVlZCB0byBzdXBwb3J0IHRoZSBmb2xsb3dpbmcgZnJvbSBSZXNvdXJjZUxvYWRT
Y2hlZHVsZXI6CisgICAgICAgICAgICAvLyBib29sIHNob3VsZExpbWl0UmVxdWVzdHMgPSAhaG9z
dC0+bmFtZSgpLmlzTnVsbCgpIHx8IChkb2N1bWVudCAmJiAoZG9jdW1lbnQtPnBhcnNpbmcoKSB8
fCAhZG9jdW1lbnQtPmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpKSk7CisKKyAgICAgICAgICAgIGJv
b2wgc2hvdWxkTGltaXRSZXF1ZXN0cyA9ICFob3N0LT5uYW1lKCkuaXNOdWxsKCk7CisgICAgICAg
ICAgICBpZiAoc2hvdWxkTGltaXRSZXF1ZXN0cyAmJiBob3N0LT5saW1pdFJlcXVlc3RzKFJlc291
cmNlTG9hZFByaW9yaXR5KHByaW9yaXR5KSwgcmVxdWVzdC0+Y29ubmVjdGlvblRvV2ViUHJvY2Vz
cygpLT5pc1NlcmlhbExvYWRpbmdFbmFibGVkKCkpKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICAgICAgcmVxdWVzdHNQZW5kaW5nLnJlbW92ZUZpcnN0KCk7CisgICAgICAgICAg
ICBob3N0LT5hZGRMb2FkSW5Qcm9ncmVzcyhyZXF1ZXN0LT5pZGVudGlmaWVyKCkpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICByZXF1ZXN0LT5jb25uZWN0aW9uVG9XZWJQcm9jZXNzKCktPmNv
bm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOjpTdGFy
dFJlc291cmNlTG9hZChyZXF1ZXN0LT5pZGVudGlmaWVyKCkpLCAwKTsKKyAgICAgICAgfQorICAg
IH0KK30KKwordm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzdXNwZW5kUGVuZGlu
Z1JlcXVlc3RzKCkKK3sKKyAgICArK21fc3VzcGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50OworfQor
Cit2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlc3VtZVBlbmRpbmdSZXF1ZXN0
cygpCit7CisgICAgQVNTRVJUKG1fc3VzcGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50KTsKKyAgICAt
LW1fc3VzcGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50OworICAgIGlmIChtX3N1c3BlbmRQZW5kaW5n
UmVxdWVzdHNDb3VudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2hvc3RzLmlzRW1w
dHkoKSB8fCBtX25vbkhUVFBQcm90b2NvbEhvc3QtPmhhc1JlcXVlc3RzKCkpCisgICAgICAgIHNj
aGVkdWxlU2VydmVQZW5kaW5nUmVxdWVzdHMoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlci5oIGIv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxl
ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExNmEzODgKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VM
b2FkU2NoZWR1bGVyLmgKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTmV0
d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcl9oCisjZGVmaW5lIE5ldHdvcmtSZXNvdXJjZUxvYWRT
Y2hlZHVsZXJfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1RpbWVyLmg+CisKKyNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgSG9zdFJlY29yZDsKK2NsYXNzIE5ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzOwordHlwZWRlZiB1aW50NjRfdCBSZXNvdXJjZUxvYWRJZGVudGlm
aWVyOworCitjbGFzcyBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyIHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyKTsgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CisKK3B1YmxpYzoKKyAgICBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVy
KCk7CisgICAgCisgICAgLy8gQWRkcyB0aGUgcmVxdWVzdCB0byB0aGUgcXVldWUgZm9yIGl0cyBo
b3N0IGFuZCBjcmVhdGUgYSB1bmlxdWUgaWRlbnRpZmllciBmb3IgaXQuCisgICAgUmVzb3VyY2VM
b2FkSWRlbnRpZmllciBzY2hlZHVsZU5ldHdvcmtSZXF1ZXN0KGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdCYsIFdlYkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5LCBOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2VzcyopOworICAgIAorICAgIC8vIENyZWF0ZXMgYSB1bmlxdWUgaWRlbnRp
ZmllciBmb3IgYW4gYWxyZWFkeS1pbi1wcm9ncmVzcyBsb2FkLgorICAgIFJlc291cmNlTG9hZElk
ZW50aWZpZXIgYWRkTG9hZEluUHJvZ3Jlc3MoY29uc3QgV2ViQ29yZTo6S1VSTCYpOworCisgICAg
Ly8gQ2FsbGVkIGJ5IHRoZSBXZWJQcm9jZXNzIHdoZW4gYSBSZXNvdXJjZUxvYWRlciBpcyBiZWlu
ZyBjbGVhbmVkIHVwLgorICAgIHZvaWQgcmVtb3ZlTG9hZElkZW50aWZpZXIoUmVzb3VyY2VMb2Fk
SWRlbnRpZmllcik7CisKKyAgICB2b2lkIGNyb3NzT3JpZ2luUmVkaXJlY3RSZWNlaXZlZChSZXNv
dXJjZUxvYWRJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpLVVJMJiByZWRpcmVjdFVSTCk7Cisg
ICAgdm9pZCBzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhXZWJDb3JlOjpSZXNvdXJjZUxvYWRQcmlvcml0
eSA9IFdlYkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5VmVyeUxvdyk7CisgICAgdm9pZCBzdXNw
ZW5kUGVuZGluZ1JlcXVlc3RzKCk7CisgICAgdm9pZCByZXN1bWVQZW5kaW5nUmVxdWVzdHMoKTsK
KyAgICAKK3ByaXZhdGU6CisgICAgZW51bSBDcmVhdGVIb3N0UG9saWN5IHsKKyAgICAgICAgQ3Jl
YXRlSWZOb3RGb3VuZCwKKyAgICAgICAgRmluZE9ubHkKKyAgICB9OworICAgIAorICAgIEhvc3RS
ZWNvcmQqIGhvc3RGb3JVUkwoY29uc3QgV2ViQ29yZTo6S1VSTCYsIENyZWF0ZUhvc3RQb2xpY3kg
PSBGaW5kT25seSk7CisgICAgCisgICAgdm9pZCBzY2hlZHVsZVNlcnZlUGVuZGluZ1JlcXVlc3Rz
KCk7CisgICAgdm9pZCByZXF1ZXN0VGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxOZXR3b3JrUmVz
b3VyY2VMb2FkU2NoZWR1bGVyPiopOworCisgICAgdm9pZCBzZXJ2ZVBlbmRpbmdSZXF1ZXN0c0Zv
ckhvc3QoSG9zdFJlY29yZCosIFdlYkNvcmU6OlJlc291cmNlTG9hZFByaW9yaXR5KTsKKworICAg
IHVuc2lnbmVkIHBsYXRmb3JtSW5pdGlhbGl6ZU1heGltdW1IVFRQQ29ubmVjdGlvbkNvdW50UGVy
SG9zdCgpOworCisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgSG9zdFJlY29yZCosIFN0cmlu
Z0hhc2g+IEhvc3RNYXA7CisgICAgSG9zdE1hcCBtX2hvc3RzOworCisgICAgdHlwZWRlZiBIYXNo
TWFwPFJlc291cmNlTG9hZElkZW50aWZpZXIsIEhvc3RSZWNvcmQqPiBJZGVudGlmaWVySG9zdE1h
cDsKKyAgICBJZGVudGlmaWVySG9zdE1hcCBtX2lkZW50aWZpZXJzOworCisgICAgSG9zdFJlY29y
ZCogbV9ub25IVFRQUHJvdG9jb2xIb3N0OworCisgICAgdW5zaWduZWQgbV9zdXNwZW5kUGVuZGlu
Z1JlcXVlc3RzQ291bnQ7CisgICAgYm9vbCBtX2lzU2VyaWFsTG9hZGluZ0VuYWJsZWQ7CisKKyAg
ICBXZWJDb3JlOjpUaW1lcjxOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyPiBtX3JlcXVlc3RU
aW1lcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKE5F
VFdPUktfUFJPQ0VTUykKKworI2VuZGlmIC8vIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXJf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtS
ZXNvdXJjZUxvYWRTY2hlZHVsZXJNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9tYWMvTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlck1hYy5tbQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5hNzNkMWEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXJNYWMu
bW0KQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2lt
cG9ydCAiTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlci5oIgorCisjaW1wb3J0IDxXZWJDb3Jl
L1Jlc291cmNlUmVxdWVzdC5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3RDRk5l
dC5oPgorI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmg+CisjaW1wb3J0
IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCit1bnNpZ25lZCBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1
bGVyOjpwbGF0Zm9ybUluaXRpYWxpemVNYXhpbXVtSFRUUENvbm5lY3Rpb25Db3VudFBlckhvc3Qo
KQoreworICAgIHdrSW5pdGlhbGl6ZU1heGltdW1IVFRQQ29ubmVjdGlvbkNvdW50UGVySG9zdCA9
IFdLSW5pdGlhbGl6ZU1heGltdW1IVFRQQ29ubmVjdGlvbkNvdW50UGVySG9zdDsKKyAgICB3a1Nl
dEhUVFBQaXBlbGluaW5nTWF4aW11bVByaW9yaXR5ID0gV0tTZXRIVFRQUGlwZWxpbmluZ01heGlt
dW1Qcmlvcml0eTsKKyAgICB3a1NldEhUVFBQaXBlbGluaW5nTWluaW11bUZhc3RMYW5lUHJpb3Jp
dHkgPSBXS1NldEhUVFBQaXBlbGluaW5nTWluaW11bUZhc3RMYW5lUHJpb3JpdHk7CisKKyAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgcHJlZmVycmVkQ29ubmVjdGlvbkNvdW50ID0gNjsKKyAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgdW5saW1pdGVkQ29ubmVjdGlvbkNvdW50ID0gMTAwMDA7CisK
KyAgICAvLyBBbHdheXMgc2V0IHRoZSBjb25uZWN0aW9uIGNvdW50IHBlciBob3N0LCBldmVuIHdo
ZW4gcGlwZWxpbmluZy4KKyAgICB1bnNpZ25lZCBtYXhpbXVtSFRUUENvbm5lY3Rpb25Db3VudFBl
ckhvc3QgPSB3a0luaXRpYWxpemVNYXhpbXVtSFRUUENvbm5lY3Rpb25Db3VudFBlckhvc3QocHJl
ZmVycmVkQ29ubmVjdGlvbkNvdW50KTsKKworICAgIEJvb2xlYW4ga2V5RXhpc3RzQW5kSGFzVmFs
aWRGb3JtYXQgPSBmYWxzZTsKKyAgICBCb29sZWFuIHByZWZWYWx1ZSA9IENGUHJlZmVyZW5jZXNH
ZXRBcHBCb29sZWFuVmFsdWUoQ0ZTVFIoIldlYktpdEVuYWJsZUhUVFBQaXBlbGluaW5nIiksIGtD
RlByZWZlcmVuY2VzQ3VycmVudEFwcGxpY2F0aW9uLCAma2V5RXhpc3RzQW5kSGFzVmFsaWRGb3Jt
YXQpOworICAgIAorICAgIGlmIChrZXlFeGlzdHNBbmRIYXNWYWxpZEZvcm1hdCkKKyAgICAgICAg
UmVzb3VyY2VSZXF1ZXN0OjpzZXRIVFRQUGlwZWxpbmluZ0VuYWJsZWQocHJlZlZhbHVlKTsKKwor
ICAgIGlmIChSZXNvdXJjZVJlcXVlc3Q6Omh0dHBQaXBlbGluaW5nRW5hYmxlZCgpKSB7CisgICAg
ICAgIHdrU2V0SFRUUFBpcGVsaW5pbmdNYXhpbXVtUHJpb3JpdHkodG9IVFRQUGlwZWxpbmluZ1By
aW9yaXR5KFJlc291cmNlTG9hZFByaW9yaXR5SGlnaGVzdCkpOworICAgICAgICB3a1NldEhUVFBQ
aXBlbGluaW5nTWluaW11bUZhc3RMYW5lUHJpb3JpdHkodG9IVFRQUGlwZWxpbmluZ1ByaW9yaXR5
KFJlc291cmNlTG9hZFByaW9yaXR5TWVkaXVtKSk7CisKKyAgICAgICAgLy8gV2hlbiBwaXBlbGlu
aW5nIGRvIG5vdCByYXRlLWxpbWl0IHJlcXVlc3RzIHNlbnQgZnJvbSBXZWJDb3JlIHNpbmNlIENG
TmV0d29yayBoYW5kbGVzIHRoYXQuCisgICAgICAgIHJldHVybiB1bmxpbWl0ZWRDb25uZWN0aW9u
Q291bnQ7CisgICAgfQorCisgICAgcmV0dXJuIG1heGltdW1IVFRQQ29ubmVjdGlvbkNvdW50UGVy
SG9zdDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL01lc3NhZ2VJRC5oIGIvU291cmNlL1dlYktpdDIvUGxhdGZv
cm0vQ29yZUlQQy9NZXNzYWdlSUQuaAppbmRleCBhODllNjRmLi5kZDNmY2IwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL01lc3NhZ2VJRC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvTWVzc2FnZUlELmgKQEAgLTExNSw2ICsxMTUsOSBA
QCBlbnVtIE1lc3NhZ2VDbGFzcyB7CiAgICAgLy8gTWVzc2FnZXMgc2VudCBieSB0aGUgd2ViIHBy
b2Nlc3MgdG8gdGhlIG5ldHdvcmsgcHJvY2Vzcy4KICAgICBNZXNzYWdlQ2xhc3NOZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2VzcywKIAorICAgIC8vIE1lc3NhZ2VzIHNlbnQgYnkgdGhlIG5ldHdv
cmsgcHJvY2VzcyB0byBhIHdlYiBwcm9jZXNzLgorICAgIE1lc3NhZ2VDbGFzc05ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbiwKKyAgICAKICNpZiBFTkFCTEUoU0hBUkVEX1dPUktFUl9QUk9DRVNTKQog
ICAgIC8vIE1lc3NhZ2VzIHNlbnQgYnkgdGhlIFVJIHByb2Nlc3MgdG8gdGhlIHNoYXJlZCB3b3Jr
ZXIgcHJvY2Vzcy4KICAgICBNZXNzYWdlQ2xhc3NTaGFyZWRXb3JrZXJQcm9jZXNzLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vTG9nZ2luZy5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybS9Mb2dnaW5nLmNwcAppbmRleCBkZjk4ZTcyLi42Y2QwNGI5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Mb2dnaW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybS9Mb2dnaW5nLmNwcApAQCAtMzgsNiArMzgsNyBAQCBXVEZMb2dDaGFubmVsIExv
Z1ZpZXcgICAgICAgICA9IHsgMHgwMDAwMDAwOCwgIldlYktpdDJMb2dMZXZlbCIsIFdURkxvZ0No
YW5uZWxPZgogV1RGTG9nQ2hhbm5lbCBMb2dJY29uRGF0YWJhc2UgPSB7IDB4MDAwMDAwMTAsICJX
ZWJLaXQyTG9nTGV2ZWwiLCBXVEZMb2dDaGFubmVsT2ZmIH07CiBXVEZMb2dDaGFubmVsIExvZ0tl
eUhhbmRsaW5nICA9IHsgMHgwMDAwMDAyMCwgIldlYktpdDJMb2dMZXZlbCIsIFdURkxvZ0NoYW5u
ZWxPZmYgfTsKIFdURkxvZ0NoYW5uZWwgTG9nUGx1Z2lucyAgICAgID0geyAweDAwMDAwMDQwLCAi
V2ViS2l0MkxvZ0xldmVsIiwgV1RGTG9nQ2hhbm5lbE9mZiB9OworV1RGTG9nQ2hhbm5lbCBMb2dO
ZXR3b3JrICAgICAgPSB7IDB4MDAwMDAwODAsICJXZWJLaXQyTG9nTGV2ZWwiLCBXVEZMb2dDaGFu
bmVsT2ZmIH07CiAKICNpZiAhUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oR1RLKSAmJiAhUExB
VEZPUk0oUVQpICYmICFQTEFURk9STShFRkwpCiB2b2lkIGluaXRpYWxpemVMb2dDaGFubmVsKFdU
RkxvZ0NoYW5uZWwqIGNoYW5uZWwpCkBAIC03Myw2ICs3NCw5IEBAIFdURkxvZ0NoYW5uZWwqIGdl
dENoYW5uZWxGcm9tTmFtZShjb25zdCBTdHJpbmcmIGNoYW5uZWxOYW1lKQogICAgIGlmIChlcXVh
bElnbm9yaW5nQ2FzZShjaGFubmVsTmFtZSwgU3RyaW5nKCJQbHVnaW5zIikpKQogICAgICAgICBy
ZXR1cm4gJkxvZ1BsdWdpbnM7CiAKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoY2hhbm5lbE5h
bWUsIFN0cmluZygiTmV0d29yayIpKSkKKyAgICAgICAgcmV0dXJuICZMb2dOZXR3b3JrOworCiAg
ICAgcmV0dXJuIDA7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtL0xvZ2dpbmcuaCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0xvZ2dpbmcuaAppbmRleCA2
MDM2ODZmLi5jYTk5OGMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Mb2dn
aW5nLmgKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vTG9nZ2luZy5oCkBAIC00NCw2ICs0
NCw3IEBAIGV4dGVybiBXVEZMb2dDaGFubmVsIExvZ1BsdWdpbnM7CiBleHRlcm4gV1RGTG9nQ2hh
bm5lbCBMb2dTZXNzaW9uU3RhdGU7CiBleHRlcm4gV1RGTG9nQ2hhbm5lbCBMb2dUZXh0SW5wdXQ7
CiBleHRlcm4gV1RGTG9nQ2hhbm5lbCBMb2dWaWV3OworZXh0ZXJuIFdURkxvZ0NoYW5uZWwgTG9n
TmV0d29yazsKIAogdm9pZCBpbml0aWFsaXplTG9nQ2hhbm5lbChXVEZMb2dDaGFubmVsKik7CiB2
b2lkIGluaXRpYWxpemVMb2dDaGFubmVsc0lmTmVjZXNzYXJ5KHZvaWQpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGQ2OWRhM2Yu
LjViZmRjNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKQEAgLTM3Miw2ICszNzIsOSBAQAogCQk1MTI5MzVEODEyODhEMTk0MDBBNEI2
OTUgLyogV2ViQ29udGV4dE1lbnVJdGVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MTI5MzVENjEyODhEMTk0MDBBNEI2OTUgLyogV2ViQ29udGV4dE1l
bnVJdGVtLmggKi87IH07CiAJCTUxMjkzNUUzMTI4OEQ5NzgwMEE0QjY5NSAvKiBJbmplY3RlZEJ1
bmRsZVBhZ2VDb250ZXh0TWVudUNsaWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MTI5MzVFMTEyODhEOTc4MDBBNEI2OTUgLyogSW5qZWN0ZWRC
dW5kbGVQYWdlQ29udGV4dE1lbnVDbGllbnQuY3BwICovOyB9OwogCQk1MTI5MzVFNDEyODhEOTc4
MDBBNEI2OTUgLyogSW5qZWN0ZWRCdW5kbGVQYWdlQ29udGV4dE1lbnVDbGllbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMjkzNUUyMTI4OEQ5Nzgw
MEE0QjY5NSAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VDb250ZXh0TWVudUNsaWVudC5oICovOyB9Owor
CQk1MTJDMDY4ODE2MzhGNjdFMDBBQkI5MTEgLyogSG9zdFJlY29yZC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTJDMDY4NjE2MzhGNjdFMDBBQkI5
MTEgLyogSG9zdFJlY29yZC5jcHAgKi87IH07CisJCTUxMkMwNjg5MTYzOEY2N0UwMEFCQjkxMSAv
KiBIb3N0UmVjb3JkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MTJDMDY4NzE2MzhGNjdFMDBBQkI5MTEgLyogSG9zdFJlY29yZC5oICovOyB9OworCQk1
MTJDMDY5MDE2MzkwRTY5MDBBQkI5MTEgLyogTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlck1h
Yy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMkMw
NjhGMTYzOTBFNjkwMEFCQjkxMSAvKiBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyTWFjLm1t
ICovOyB9OwogCQk1MTJERjZEODEzOEMxODFBMDBBMjJGQzYgLyogS2V5Y2hhaW5JdGVtU2hpbU1l
dGhvZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
MkRGNkQ2MTM4QzE4MUEwMEEyMkZDNiAvKiBLZXljaGFpbkl0ZW1TaGltTWV0aG9kcy5oICovOyB9
OwogCQk1MTJERjZEOTEzOEMxODFBMDBBMjJGQzYgLyogS2V5Y2hhaW5JdGVtU2hpbU1ldGhvZHMu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTJERjZE
NzEzOEMxODFBMDBBMjJGQzYgLyogS2V5Y2hhaW5JdGVtU2hpbU1ldGhvZHMubW0gKi87IH07CiAJ
CTUxMkRGNkZFMTM4QzI1NDYwMEEyMkZDNiAvKiBTZWNLZXljaGFpbkl0ZW1SZXF1ZXN0RGF0YS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTEyQ0E0
NzEzODU4RDRCMDAzMDg2N0QgLyogU2VjS2V5Y2hhaW5JdGVtUmVxdWVzdERhdGEuY3BwICovOyB9
OwpAQCAtNDMzLDYgKzQzNiwxMiBAQAogCQk1MTc5NTU2RTE2Mjg3N0IzMDBGQTQzQjYgLyogTmV0
d29ya1Byb2Nlc3NQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTEwQ0M3RUIxNjEzOEU3MjAwRDAzRUQzIC8qIE5ldHdvcmtQcm9jZXNzUHJveHku
aCAqLzsgfTsKIAkJNTE3OTU1NzAxNjI4NzdDRjAwRkE0M0I2IC8qIE5ldHdvcmtQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxQThBNjEyMTYyN0YzMjUwMDBEOTBFOSAvKiBOZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycy5jcHAgKi87IH07CiAJCTUxNzk1NTcxMTYyODc3RDIwMEZBNDNCNiAvKiBO
ZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBOEE2MEYxNjI3RjJCRDAwMEQ5MEU5IC8qIE5ldHdv
cmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmggKi87IH07CisJCTUxN0NGMERGMTYzQTQ0NEMw
MEMyOTUwRSAvKiBOZXR3b3JrUmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MTdDRjBERDE2M0E0NDRDMDBDMjk1MEUgLyogTmV0d29ya1Jl
cXVlc3QuY3BwICovOyB9OworCQk1MTdDRjBFMDE2M0E0NDRDMDBDMjk1MEUgLyogTmV0d29ya1Jl
cXVlc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
N0NGMERFMTYzQTQ0NEMwMEMyOTUwRSAvKiBOZXR3b3JrUmVxdWVzdC5oICovOyB9OworCQk1MTdD
RjBFMzE2M0E0ODZDMDBDMjk1MEUgLyogTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uTWVzc2FnZVJl
Y2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxN0NGMEUxMTYzQTQ4NkMwMEMyOTUwRSAvKiBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25NZXNz
YWdlUmVjZWl2ZXIuY3BwICovOyB9OworCQk1MTdDRjBFNDE2M0E0ODZDMDBDMjk1MEUgLyogTmV0
d29ya1Byb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxN0NGMEUyMTYzQTQ4NkMwMEMyOTUwRSAvKiBOZXR3b3Jr
UHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlcy5oICovOyB9OworCQk1MTgyOURBNTE2MzdDNzBDMDAw
OTUzRDYgLyogTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTgyOURBMzE2MzdDNzBDMDAwOTUzRDYg
LyogTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHAgKi87IH07CisJCTUxODI5REE2MTYz
N0M3MEMwMDA5NTNENiAvKiBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTgyOURBNDE2MzdDNzBDMDAw
OTUzRDYgLyogTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlci5oICovOyB9OwogCQk1MTgzNDU5
MjEzNDUzMkU5MDA5MkI2OTYgLyogV2ViSWNvbkRhdGFiYXNlQ2xpZW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxODM0NTkwMTM0NTMyRTgwMDky
QjY5NiAvKiBXZWJJY29uRGF0YWJhc2VDbGllbnQuY3BwICovOyB9OwogCQk1MTgzNDU5MzEzNDUz
MkU5MDA5MkI2OTYgLyogV2ViSWNvbkRhdGFiYXNlQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTgzNDU5MTEzNDUzMkU4MDA5MkI2OTYgLyog
V2ViSWNvbkRhdGFiYXNlQ2xpZW50LmggKi87IH07CiAJCTUxODNCMzkyMTM3OUY3QjgwMEU4NzU0
RSAvKiBXZWJQcm9jZXNzU2hpbS5keWxpYiBpbiBDb3B5IFdlYiBQcm9jZXNzIFNoaW0gKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwMDMxRjYxMzc5Q0FDQjAwQzhERkU0IC8q
IFdlYlByb2Nlc3NTaGltLmR5bGliICovOyB9OwpAQCAtNDYxLDcgKzQ3MCw2IEBACiAJCTUxQTlF
MTI5MTMxNUVEMzUwMDlFNzAzMSAvKiBXZWJLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyTWVzc2FnZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQTlFMTI1
MTMxNUVEMzUwMDlFNzAzMSAvKiBXZWJLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyTWVzc2FnZXMuaCAq
LzsgfTsKIAkJNTFBOUUxMkExMzE1RUQzNTAwOUU3MDMxIC8qIFdlYktleVZhbHVlU3RvcmFnZU1h
bmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MUE5RTEyNjEzMTVFRDM1MDA5RTcwMzEgLyogV2ViS2V5VmFs
dWVTdG9yYWdlTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKIAkJNTFBOUUx
MkIxMzE1RUQzNTAwOUU3MDMxIC8qIFdlYktleVZhbHVlU3RvcmFnZU1hbmFnZXJQcm94eU1lc3Nh
Z2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUE5
RTEyNzEzMTVFRDM1MDA5RTcwMzEgLyogV2ViS2V5VmFsdWVTdG9yYWdlTWFuYWdlclByb3h5TWVz
c2FnZXMuaCAqLzsgfTsKLQkJNTFBQkY2NUExNjM5MkYyMDAwMTMyQTdBIC8qIFdlYlJlc291cmNl
TG9hZFNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MUFCRjY1NjE2MzkyRjE1MDAxMzJBN0EgLyogV2ViUmVzb3VyY2VMb2FkU2NoZWR1
bGVyLmNwcCAqLzsgfTsKIAkJNTFBQ0JCODIxMjdBOEJBRDAwRDIwM0I5IC8qIFdlYkNvbnRleHRN
ZW51UHJveHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxQUNCQjgxMTI3QThCQUQwMEQyMDNCOSAvKiBXZWJDb250ZXh0TWVudVByb3h5LmggKi87IH07
CiAJCTUxQUNCQkEwMTI3QThGMkMwMEQyMDNCOSAvKiBXZWJDb250ZXh0TWVudVByb3h5TWFjLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUFDQkI5RTEy
N0E4RjJDMDBEMjAzQjkgLyogV2ViQ29udGV4dE1lbnVQcm94eU1hYy5oICovOyB9OwogCQk1MUFD
QkJBMTEyN0E4RjJDMDBEMjAzQjkgLyogV2ViQ29udGV4dE1lbnVQcm94eU1hYy5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQUNCQjlGMTI3QThGMkMw
MEQyMDNCOSAvKiBXZWJDb250ZXh0TWVudVByb3h5TWFjLm1tICovOyB9OwpAQCAtNDgwLDkgKzQ4
OCwxMiBAQAogCQk1MUQxMzA1NTEzODJFQUMwMDAzNTFFREQgLyogU2VjSXRlbVJlc3BvbnNlRGF0
YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUQx
MzA1MTEzODJFQUMwMDAzNTFFREQgLyogU2VjSXRlbVJlc3BvbnNlRGF0YS5jcHAgKi87IH07CiAJ
CTUxRDEzMDU2MTM4MkVBQzAwMDM1MUVERCAvKiBTZWNJdGVtUmVzcG9uc2VEYXRhLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUQxMzA1MjEzODJFQUMw
MDAzNTFFREQgLyogU2VjSXRlbVJlc3BvbnNlRGF0YS5oICovOyB9OwogCQk1MUQxMzA1ODEzODJG
MTA1MDAzNTFFREQgLyogV2ViUHJvY2Vzc1Byb3h5TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFEMTMwNTcxMzgyRjEwNTAwMzUxRUREIC8qIFdl
YlByb2Nlc3NQcm94eU1hYy5tbSAqLzsgfTsKKwkJNTFERDlGMjgxNjM2N0RBMjAwMTU3OEU5IC8q
IE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxREQ5RjI2MTYzNjdEQTIw
MDE1NzhFOSAvKiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5j
cHAgKi87IH07CisJCTUxREQ5RjI5MTYzNjdEQTIwMDE1NzhFOSAvKiBOZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzc01lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MUREOUYyNzE2MzY3REEyMDAxNTc4RTkgLyogTmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3NNZXNzYWdlcy5oICovOyB9OwogCQk1MUVGQzFDRjE1MjRFNjI1MDBDOUE5
MzggLyogV0tCdW5kbGVET01XaW5kb3dFeHRlbnNpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRkEyRDU0MTUyMTExODYwMEMxQkEwQiAvKiBXS0J1
bmRsZURPTVdpbmRvd0V4dGVuc2lvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTUxRkEyRDc0MTUyMTJERjEwMEMxQkEwQiAvKiBJbmplY3RlZEJ1
bmRsZURPTVdpbmRvd0V4dGVuc2lvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MUZBMkQ1QzE1MjExQTUwMDBDMUJBMEIgLyogSW5qZWN0ZWRCdW5k
bGVET01XaW5kb3dFeHRlbnNpb24uY3BwICovOyB9OwogCQk1MUZBMkQ3NzE1MjEyRTI2MDBDMUJB
MEIgLyogV0tCdW5kbGVET01XaW5kb3dFeHRlbnNpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGQTJENzUxNTIxMkUxRTAwQzFCQTBCIC8qIFdL
QnVuZGxlRE9NV2luZG93RXh0ZW5zaW9uLmNwcCAqLzsgfTsKKwkJNTFGQjA4RkYxNjM5REUxQTAw
RUMzMjRBIC8qIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUFCRjY1NjE2MzkyRjE1MDAxMzJBN0EgLyog
V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcCAqLzsgfTsKIAkJNTI3MkIyOEExNDA2OTg1RDAw
OTZBNUQwIC8qIFN0YXRpc3RpY3NEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUyNzJCMjg4MTQwNjk4NUQwMDk2QTVEMCAvKiBTdGF0aXN0aWNz
RGF0YS5jcHAgKi87IH07CiAJCTUyNzJCMjhCMTQwNjk4NUQwMDk2QTVEMCAvKiBTdGF0aXN0aWNz
RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI3
MkIyODkxNDA2OTg1RDAwOTZBNUQwIC8qIFN0YXRpc3RpY3NEYXRhLmggKi87IH07CiAJCTVEMUEy
MzkxMTVFNzVCMjIwMDIzRTk4MSAvKiB3ZWJraXQyIGluIENvcHkgTWVzc2FnZSBHZW5lcmF0aW9u
IFNjcmlwdHMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUQxQTIzOEUxNUU3
NUFENTAwMjNFOTgxIC8qIHdlYmtpdDIgKi87IH07CkBAIC0xNTU1LDYgKzE1NjYsOSBAQAogCQk1
MTI5MzVENjEyODhEMTk0MDBBNEI2OTUgLyogV2ViQ29udGV4dE1lbnVJdGVtLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvbnRleHRNZW51SXRlbS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MTI5MzVFMTEyODhEOTc4MDBBNEI2OTUgLyogSW5qZWN0ZWRC
dW5kbGVQYWdlQ29udGV4dE1lbnVDbGllbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW5qZWN0ZWRCdW5kbGVQYWdlQ29udGV4dE1lbnVDbGllbnQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTI5MzVFMjEyODhEOTc4MDBBNEI2OTUgLyogSW5q
ZWN0ZWRCdW5kbGVQYWdlQ29udGV4dE1lbnVDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW5qZWN0ZWRCdW5kbGVQYWdlQ29udGV4dE1lbnVDbGllbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTEyQzA2ODYxNjM4RjY3RTAwQUJCOTExIC8qIEhvc3RS
ZWNvcmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSG9zdFJlY29y
ZC5jcHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9Ib3N0UmVjb3JkLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNTEyQzA2ODcxNjM4RjY3RTAwQUJCOTExIC8qIEhvc3RSZWNvcmQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSG9zdFJlY29yZC5oOyBwYXRoID0g
TmV0d29ya1Byb2Nlc3MvSG9zdFJlY29yZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1MTJDMDY4RjE2MzkwRTY5MDBBQkI5MTEgLyogTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxl
ck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE5ldHdvcmtS
ZXNvdXJjZUxvYWRTY2hlZHVsZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUxMkRGNkQ2MTM4QzE4MUEwMEEyMkZDNiAvKiBLZXljaGFpbkl0ZW1TaGltTWV0aG9kcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBLZXljaGFpbkl0ZW1TaGltTWV0aG9kcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTJERjZENzEzOEMxODFBMDBBMjJGQzYg
LyogS2V5Y2hhaW5JdGVtU2hpbU1ldGhvZHMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBLZXljaGFpbkl0ZW1TaGltTWV0aG9kcy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTEyRTM1MjAxMzBCNTUwMTAwQUJEMTlBIC8qIFdlYkFwcGxpY2F0aW9u
Q2FjaGVNYW5hZ2VyUHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXJQcm94eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xNjAzLDYgKzE2MTcsMTIgQEAKIAkJNTE2QTRBNUIxMjBBMkNDRDAwQzA1
QjdGIC8qIFdlYkVycm9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkVy
cm9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxN0EzM0IzMTMwQjMwOEMwMEY4
MENCNSAvKiBXS0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MTdBMzNCNDEzMEIzMDhDMDBGODBDQjUgLyogV0tBcHBs
aWNhdGlvbkNhY2hlTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
S0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTUxN0NGMEREMTYzQTQ0NEMwMEMyOTUwRSAvKiBOZXR3b3JrUmVxdWVzdC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBOZXR3b3JrUmVxdWVzdC5jcHA7IHBhdGggPSBO
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVxdWVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTUxN0NGMERFMTYzQTQ0NEMwMEMyOTUwRSAvKiBOZXR3b3JrUmVxdWVzdC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBOZXR3b3JrUmVxdWVzdC5oOyBwYXRoID0gTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1JlcXVlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTE3Q0YwRTExNjNBNDg2QzAwQzI5NTBFIC8qIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbk1l
c3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBO
ZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1MTdDRjBFMjE2M0E0ODZDMDBDMjk1MEUgLyogTmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uTWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNTE4MjlEQTMxNjM3QzcwQzAwMDk1M0Q2IC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRT
Y2hlZHVsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTmV0d29y
a1Jlc291cmNlTG9hZFNjaGVkdWxlci5jcHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NTE4MjlEQTQxNjM3QzcwQzAwMDk1M0Q2IC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTmV0d29ya1Jlc291cmNlTG9hZFNj
aGVkdWxlci5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZFNjaGVk
dWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTgzNDU5MDEzNDUzMkU4MDA5
MkI2OTYgLyogV2ViSWNvbkRhdGFiYXNlQ2xpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFdlYkljb25EYXRhYmFzZUNsaWVudC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUxODM0NTkxMTM0NTMyRTgwMDkyQjY5NiAvKiBXZWJJY29uRGF0YWJh
c2VDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViSWNvbkRhdGFi
YXNlQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxODNCMzkzMTM3OUY4
NUMwMEU4NzU0RSAvKiBTaGltLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0
aCA9IFNoaW0ueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjU5LDEw
ICsxNjc5LDEzIEBACiAJCTUxRDEzMDUxMTM4MkVBQzAwMDM1MUVERCAvKiBTZWNJdGVtUmVzcG9u
c2VEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNlY0l0ZW1S
ZXNwb25zZURhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUQxMzA1MjEz
ODJFQUMwMDAzNTFFREQgLyogU2VjSXRlbVJlc3BvbnNlRGF0YS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTZWNJdGVtUmVzcG9uc2VEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUxRDEzMDU3MTM4MkYxMDUwMDM1MUVERCAvKiBXZWJQcm9jZXNzUHJveHlN
YWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJQcm9jZXNz
UHJveHlNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxREQ5RjI2MTYzNjdE
QTIwMDE1NzhFOSAvKiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VSZWNlaXZl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTUxREQ5RjI3MTYzNjdEQTIwMDE1NzhFOSAvKiBOZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzc01lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5l
dHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTFGQTJENTQxNTIxMTE4NjAwQzFCQTBCIC8qIFdLQnVuZGxlRE9NV2luZG93
RXh0ZW5zaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQnVuZGxlRE9N
V2luZG93RXh0ZW5zaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRkEyRDVB
MTUyMTFBMUUwMEMxQkEwQiAvKiBJbmplY3RlZEJ1bmRsZURPTVdpbmRvd0V4dGVuc2lvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmplY3RlZEJ1bmRsZURPTVdpbmRvd0V4
dGVuc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUZBMkQ1QzE1MjExQTUw
MDBDMUJBMEIgLyogSW5qZWN0ZWRCdW5kbGVET01XaW5kb3dFeHRlbnNpb24uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5qZWN0ZWRCdW5kbGVET01XaW5kb3dFeHRl
bnNpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUZBMkQ3NTE1MjEyRTFF
MDBDMUJBMEIgLyogV0tCdW5kbGVET01XaW5kb3dFeHRlbnNpb24uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0tCdW5kbGVET01XaW5kb3dFeHRlbnNpb24uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MUZCMDkwMjE2M0EzQjFDMDBFQzMyNEEgLyog
TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IE5ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbi5tZXNzYWdlcy5pbjsgcGF0aCA9IE5ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25u
ZWN0aW9uLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MjcyQjI4
ODE0MDY5ODVEMDA5NkE1RDAgLyogU3RhdGlzdGljc0RhdGEuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU3RhdGlzdGljc0RhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MjcyQjI4OTE0MDY5ODVEMDA5NkE1RDAgLyogU3RhdGlzdGljc0RhdGEu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RhdGlzdGljc0RhdGEuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUQxQTIzOEUxNUU3NUFENTAwMjNFOTgxIC8qIHdl
YmtpdDIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBm
b2xkZXI7IHBhdGggPSB3ZWJraXQyOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjk1
NSw2ICsyOTc4LDcgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTUxMDVCMEQ0MTYyRjdBN0EwMEUy
NzcwOSAvKiBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwICovLAogCQkJCTUxMDVCMEQ1MTYy
RjdBN0EwMEUyNzcwOSAvKiBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uaCAqLywKKwkJCQk1MUZC
MDkwMjE2M0EzQjFDMDBFQzMyNEEgLyogTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2Vz
LmluICovLAogCQkJCTUxQUJGNjU2MTYzOTJGMTUwMDEzMkE3QSAvKiBXZWJSZXNvdXJjZUxvYWRT
Y2hlZHVsZXIuY3BwICovLAogCQkJCTUxQUJGNjU3MTYzOTJGMTUwMDEzMkE3QSAvKiBXZWJSZXNv
dXJjZUxvYWRTY2hlZHVsZXIuaCAqLywKIAkJCSk7CkBAIC0yOTY1LDYgKzI5ODksOCBAQAogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQk1MTBDQzdEQzE2MTM4RTI5MDBE
MDNFRDMgLyogbWFjICovLAorCQkJCTUxMkMwNjg2MTYzOEY2N0UwMEFCQjkxMSAvKiBIb3N0UmVj
b3JkLmNwcCAqLywKKwkJCQk1MTJDMDY4NzE2MzhGNjdFMDBBQkI5MTEgLyogSG9zdFJlY29yZC5o
ICovLAogCQkJCTUxM0ExNjQ5MTYzMEE5QkYwMDVEN0QyMiAvKiBOZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5jcHAgKi8sCiAJCQkJNTEzQTE2NEExNjMwQTlCRjAwNUQ3RDIyIC8qIE5ldHdv
cmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmggKi8sCiAJCQkJNTEzQTE2NEIxNjMwQTlCRjAwNUQ3
RDIyIC8qIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluICovLApAQCAt
Mjk3Miw2ICsyOTk4LDEwIEBACiAJCQkJNTEwQ0M3RTAxNjEzOEUyOTAwRDAzRUQzIC8qIE5ldHdv
cmtQcm9jZXNzLmggKi8sCiAJCQkJNTFBOEE2MTcxNjI3RjVCQjAwMEQ5MEU5IC8qIE5ldHdvcmtQ
cm9jZXNzLm1lc3NhZ2VzLmluICovLAogCQkJCTUxMENDN0UxMTYxMzhFMjkwMEQwM0VEMyAvKiBO
ZXR3b3JrUHJvY2Vzc01haW4uaCAqLywKKwkJCQk1MTdDRjBERDE2M0E0NDRDMDBDMjk1MEUgLyog
TmV0d29ya1JlcXVlc3QuY3BwICovLAorCQkJCTUxN0NGMERFMTYzQTQ0NEMwMEMyOTUwRSAvKiBO
ZXR3b3JrUmVxdWVzdC5oICovLAorCQkJCTUxODI5REEzMTYzN0M3MEMwMDA5NTNENiAvKiBOZXR3
b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcCAqLywKKwkJCQk1MTgyOURBNDE2MzdDNzBDMDAw
OTUzRDYgLyogTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlci5oICovLAogCQkJKTsKIAkJCW5h
bWUgPSBOZXR3b3JrUHJvY2VzczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yOTgx
LDYgKzMwMTEsNyBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJNTFBOEE2MTUxNjI3RjNGOTAwMEQ5
MEU5IC8qIE5ldHdvcmtQcm9jZXNzTWFjLm1tICovLAogCQkJCTUxMENDN0REMTYxMzhFMjkwMEQw
M0VEMyAvKiBOZXR3b3JrUHJvY2Vzc01haW5NYWMubW0gKi8sCisJCQkJNTEyQzA2OEYxNjM5MEU2
OTAwQUJCOTExIC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXJNYWMubW0gKi8sCiAJCQkp
OwogCQkJbmFtZSA9IG1hYzsKIAkJCXBhdGggPSBOZXR3b3JrUHJvY2Vzcy9tYWM7CkBAIC00MDQ5
LDYgKzQwODAsMTAgQEAKIAkJCQkxQTY0MjMwNzEyREQwOUVCMDBDQUFFMkMgLyogRHJhd2luZ0Fy
ZWFQcm94eU1lc3NhZ2VzLmggKi8sCiAJCQkJMUFBNTc1RkYxNDk2QjdDMDAwQTRFRTA2IC8qIEV2
ZW50RGlzcGF0Y2hlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCiAJCQkJMUFBNTc2MDAxNDk2QjdD
MDAwQTRFRTA2IC8qIEV2ZW50RGlzcGF0Y2hlck1lc3NhZ2VzLmggKi8sCisJCQkJNTFERDlGMjYx
NjM2N0RBMjAwMTU3OEU5IC8qIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZVJl
Y2VpdmVyLmNwcCAqLywKKwkJCQk1MUREOUYyNzE2MzY3REEyMDAxNTc4RTkgLyogTmV0d29ya0Nv
bm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlcy5oICovLAorCQkJCTUxN0NGMEUxMTYzQTQ4NkMw
MEMyOTUwRSAvKiBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwICov
LAorCQkJCTUxN0NGMEUyMTYzQTQ4NkMwMEMyOTUwRSAvKiBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rp
b25NZXNzYWdlcy5oICovLAogCQkJCTUxQUNDOTM0MTYyODA2NDgwMDM0MjU1MCAvKiBOZXR3b3Jr
UHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCiAJCQkJNTFBQ0M5MzUxNjI4MDY0ODAwMzQy
NTUwIC8qIE5ldHdvcmtQcm9jZXNzTWVzc2FnZXMuaCAqLywKIAkJCQk1MTNBMTYzQTE2MzA4OEY2
MDA1RDdEMjIgLyogTmV0d29ya1Byb2Nlc3NQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCkBA
IC00NzQ4LDYgKzQ3ODMsMTEgQEAKIAkJCQk1MTNBMTYzRDE2MzA4OEY2MDA1RDdEMjIgLyogTmV0
d29ya1Byb2Nlc3NQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTNBMTY0RDE2
MzBBOUJGMDA1RDdEMjIgLyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTFBMTNCRUI0MTYzNUE5QzgwMEYxOUMwMyAvKiBTdHJpbmdSZWZlcmVuY2Uu
aCBpbiBIZWFkZXJzICovLAorCQkJCTUxREQ5RjI5MTYzNjdEQTIwMDE1NzhFOSAvKiBOZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MTgy
OURBNjE2MzdDNzBDMDAwOTUzRDYgLyogTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlci5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNTEyQzA2ODkxNjM4RjY3RTAwQUJCOTExIC8qIEhvc3RSZWNvcmQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTUxN0NGMEUwMTYzQTQ0NEMwMEMyOTUwRSAvKiBOZXR3b3Jr
UmVxdWVzdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTE3Q0YwRTQxNjNBNDg2QzAwQzI5NTBFIC8q
IE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCSk7
CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTU2
OTksNyArNTczOSwxMyBAQAogCQkJCTUxM0ExNjRDMTYzMEE5QkYwMDVEN0QyMiAvKiBOZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTgzRERFQzE2
MzBCREZDMDA4QkU1QzcgLyogTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTFBMTNCRUIzMTYzNUE5QzgwMEYxOUMwMyAvKiBTdHJpbmdSZWZlcmVuY2UuY3Bw
IGluIFNvdXJjZXMgKi8sCi0JCQkJNTFBQkY2NUExNjM5MkYyMDAwMTMyQTdBIC8qIFdlYlJlc291
cmNlTG9hZFNjaGVkdWxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MUREOUYyODE2MzY3REEy
MDAxNTc4RTkgLyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTE4MjlEQTUxNjM3QzcwQzAwMDk1M0Q2IC8qIE5ldHdv
cmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTEyQzA2ODgx
NjM4RjY3RTAwQUJCOTExIC8qIEhvc3RSZWNvcmQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTEy
QzA2OTAxNjM5MEU2OTAwQUJCOTExIC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXJNYWMu
bW0gaW4gU291cmNlcyAqLywKKwkJCQk1MUZCMDhGRjE2MzlERTFBMDBFQzMyNEEgLyogV2ViUmVz
b3VyY2VMb2FkU2NoZWR1bGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxN0NGMERGMTYzQTQ0
NEMwMEMyOTUwRSAvKiBOZXR3b3JrUmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MTdD
RjBFMzE2M0E0ODZDMDBDMjk1MEUgLyogTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uTWVzc2FnZVJl
Y2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmNwcAppbmRl
eCBkZDlkNmNiLi43ZWE0YzlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmNwcApAQCAtNDIs
MTIgKzQyLDE4IEBAIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6fk5ldHdvcmtQcm9jZXNzQ29u
bmVjdGlvbigpCiB7CiB9CiAKLXZvaWQgTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNl
aXZlTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3Jl
SVBDOjpNZXNzYWdlRGVjb2RlciYpCit2b2lkIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6ZGlk
UmVjZWl2ZU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29yZUlQQzo6
TWVzc2FnZUlEIG1lc3NhZ2VJRCwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImIGRlY29kZXIpCiB7
CisgICAgaWYgKG1lc3NhZ2VJRC5pczxDb3JlSVBDOjpNZXNzYWdlQ2xhc3NOZXR3b3JrUHJvY2Vz
c0Nvbm5lY3Rpb24+KCkpIHsKKyAgICAgICAgZGlkUmVjZWl2ZU5ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbk1lc3NhZ2UoY29ubmVjdGlvbiwgbWVzc2FnZUlELCBkZWNvZGVyKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBOZXR3b3Jr
UHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVTeW5jTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0
aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpNZXNzYWdlRGVjb2RlciYsIE93blB0
cjxDb3JlSVBDOjpNZXNzYWdlRW5jb2Rlcj4mKQogeworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkQ2xvc2UoQ29yZUlQQzo6
Q29ubmVjdGlvbiopCkBAIC02MCw2ICs2NiwxMCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbjo6ZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDbwog
ewogfQogCit2b2lkIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6c3RhcnRSZXNvdXJjZUxvYWQo
UmVzb3VyY2VMb2FkSWRlbnRpZmllciByZXNvdXJjZUxvYWRJZGVudGlmaWVyKQoreworICAgIFdl
YlByb2Nlc3M6OnNoYXJlZCgpLndlYlJlc291cmNlTG9hZFNjaGVkdWxlcigpLnN0YXJ0UmVzb3Vy
Y2VMb2FkKHJlc291cmNlTG9hZElkZW50aWZpZXIpOworfQogICAgIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9O
ZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0
d29yay9OZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uaAppbmRleCA2NWUyNTk4Li4wOWUyMTk2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL05l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5oCkBAIC0zNCw2ICszNCw4IEBACiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCit0eXBlZGVmIHVpbnQ2NF90IFJlc291cmNlTG9hZElkZW50aWZpZXI7CisKIGNs
YXNzIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPE5ldHdvcmtQ
cm9jZXNzQ29ubmVjdGlvbj4sIENvcmVJUEM6OkNvbm5lY3Rpb246OkNsaWVudCB7CiBwdWJsaWM6
CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uPiBjcmVhdGUo
Q29yZUlQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBjb25uZWN0aW9uSWRlbnRpZmllcikKQEAg
LTUzLDYgKzU1LDEwIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGRpZENsb3NlKENvcmVJ
UEM6OkNvbm5lY3Rpb24qKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUludmFsaWRNZXNz
YWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQpOwogCisgICAgdm9p
ZCBkaWRSZWNlaXZlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uTWVzc2FnZShDb3JlSVBDOjpDb25u
ZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpNZXNzYWdlRGVjb2RlciYpOwor
CisgICAgdm9pZCBzdGFydFJlc291cmNlTG9hZChSZXNvdXJjZUxvYWRJZGVudGlmaWVyKTsKKwog
ICAgIC8vIFRoZSBjb25uZWN0aW9uIGZyb20gdGhlIHdlYiBwcm9jZXNzIHRvIHRoZSBuZXR3b3Jr
IHByb2Nlc3MuCiAgICAgUmVmUHRyPENvcmVJUEM6OkNvbm5lY3Rpb24+IG1fY29ubmVjdGlvbjsK
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvTmV0d29y
a1Byb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWY4NDE1Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5t
ZXNzYWdlcy5pbgpAQCAtMCwwICsxLDMyIEBACisjIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMg
YXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKKyNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQorCittZXNzYWdlcyAtPiBO
ZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24geworCisgICAgLy8gRklYTUU6IFRoaXMgbWVzc2FnZSBp
cyBmb3IgdGhlIE5ldHdvcmtQcm9jZXNzIHRvIHRlbGwgdGhlIFdlYlByb2Nlc3MgdG8gc3RhcnQg
YSBsb2FkLgorICAgIC8vIE9uY2UgdGhlIE5ldHdvcmtQcm9jZXNzIGlzIGRvaW5nIHRoZSBsb2Fk
aW5nIGl0c2VsZiB0aGVuIHdlIHNob3VsZCByZW1vdmUgaXQuCisgICAgU3RhcnRSZXNvdXJjZUxv
YWQodWludDY0X3QgcmVzb3VyY2VMb2FkSWRlbnRpZmllcikKK30KKworI2VuZGlmIC8vIEVOQUJM
RShORVRXT1JLX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCmluZGV4IDBhZjZk
NDUuLjFlNzM2MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29y
ay9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCkBAIC0yNiwxNiArMjYs
MTc4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU2No
ZWR1bGVyLmgiCiAKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTmV0d29ya0Nvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlcy5oIgorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ29u
bmVjdGlvbi5oIgorI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUg
IldlYlByb2Nlc3MuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50TG9hZGVyLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9GcmFtZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL05ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU3VicmVzb3Vy
Y2VMb2FkZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKICNpZiBFTkFCTEUo
TkVUV09SS19QUk9DRVNTKQogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNl
IFdlYktpdCB7CiAKK1dlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6V2ViUmVzb3VyY2VMb2FkU2No
ZWR1bGVyKCkKKyAgICA6IG1fc3VzcGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50KDApCit7Cit9CisK
IFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6fldlYlJlc291cmNlTG9hZFNjaGVkdWxlcigpCiB7
CiB9CiAKK1Bhc3NSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IFdlYlJlc291cmNlTG9hZFNjaGVk
dWxlcjo6c2NoZWR1bGVTdWJyZXNvdXJjZUxvYWQoRnJhbWUqIGZyYW1lLCBDYWNoZWRSZXNvdXJj
ZSogcmVzb3VyY2UsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VMb2Fk
UHJpb3JpdHkgcHJpb3JpdHksIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYgb3B0aW9ucykK
K3sKKyAgICBSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IGxvYWRlciA9IFN1YnJlc291cmNlTG9h
ZGVyOjpjcmVhdGUoZnJhbWUsIHJlc291cmNlLCByZXF1ZXN0LCBvcHRpb25zKTsKKyAgICBpZiAo
bG9hZGVyKQorICAgICAgICBzY2hlZHVsZUxvYWQobG9hZGVyLmdldCgpLCBwcmlvcml0eSk7Cisg
ICAgcmV0dXJuIGxvYWRlci5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8TmV0c2NhcGVQbHVn
SW5TdHJlYW1Mb2FkZXI+IFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVQbHVnaW5T
dHJlYW1Mb2FkKEZyYW1lKiBmcmFtZSwgTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXJDbGllbnQq
IGNsaWVudCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIFJlZlB0cjxO
ZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcj4gbG9hZGVyID0gTmV0c2NhcGVQbHVnSW5TdHJlYW1M
b2FkZXI6OmNyZWF0ZShmcmFtZSwgY2xpZW50LCByZXF1ZXN0KTsKKyAgICBpZiAobG9hZGVyKQor
ICAgICAgICBzY2hlZHVsZUxvYWQobG9hZGVyLmdldCgpLCBSZXNvdXJjZUxvYWRQcmlvcml0eUxv
dyk7CisgICAgcmV0dXJuIGxvYWRlci5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgV2ViUmVzb3VyY2VM
b2FkU2NoZWR1bGVyOjpzY2hlZHVsZUxvYWQoUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9hZGVy
LCBSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSkKK3sKKyAgICBMT0coTmV0d29yaywgIihX
ZWJQcm9jZXNzKSBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlTG9hZCwgdXJsICcl
cycgcHJpb3JpdHkgJWkiLCByZXNvdXJjZUxvYWRlci0+dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRh
dGEoKSwgcHJpb3JpdHkpOworCisgICAgQVNTRVJUKHJlc291cmNlTG9hZGVyKTsKKyAgICBBU1NF
UlQocHJpb3JpdHkgIT0gUmVzb3VyY2VMb2FkUHJpb3JpdHlVbnJlc29sdmVkKTsKKyAgICBwcmlv
cml0eSA9IFJlc291cmNlTG9hZFByaW9yaXR5SGlnaGVzdDsKKworICAgIC8vIElmIHRoZXJlJ3Mg
YSB3ZWIgYXJjaGl2ZSByZXNvdXJjZSBmb3IgdGhpcyBVUkwsIHdlIGRvbid0IG5lZWQgdG8gc2No
ZWR1bGUgdGhlIGxvYWQgc2luY2UgaXQgd2lsbCBuZXZlciB0b3VjaCB0aGUgbmV0d29yay4KKyAg
ICBpZiAocmVzb3VyY2VMb2FkZXItPmRvY3VtZW50TG9hZGVyKCktPmFyY2hpdmVSZXNvdXJjZUZv
clVSTChyZXNvdXJjZUxvYWRlci0+cmVxdWVzdCgpLnVybCgpKSkgeworICAgICAgICBzdGFydFJl
c291cmNlTG9hZGVyKHJlc291cmNlTG9hZGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBSZXNvdXJjZUxvYWRJZGVudGlmaWVyIGlkZW50aWZpZXI7CisgICAgCisgICAgUmVz
b3VyY2VSZXF1ZXN0IHJlcXVlc3QgPSByZXNvdXJjZUxvYWRlci0+cmVxdWVzdCgpOworICAgIAor
ICAgIC8vIFdlIHdhbnQgdGhlIG5ldHdvcmsgcHJvY2VzcyBpbnZvbHZlZCBpbiBzY2hlZHVsaW5n
IGRhdGEgVVJMIGxvYWRzIGJ1dCBpdCBkb2Vzbid0IG5lZWQgdG8ga25vdyB0aGUgZnVsbCAob2Z0
ZW4gbG9uZykgVVJMLgorICAgIGlmIChyZXF1ZXN0LnVybCgpLnByb3RvY29sSXNEYXRhKCkpIHsK
KyAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChLVVJMLCBkYXRhVVJMLCAoS1VSTCgpLCAiZGF0
YToiKSk7CisgICAgICAgIHJlcXVlc3Quc2V0VVJMKGRhdGFVUkwpOworICAgIH0KKworICAgIGlm
ICghV2ViUHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigp
LT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlNjaGVk
dWxlTmV0d29ya1JlcXVlc3QocmVxdWVzdCwgcHJpb3JpdHkpLCBNZXNzYWdlczo6TmV0d29ya0Nv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlNjaGVkdWxlTmV0d29ya1JlcXVlc3Q6OlJlcGx5KGlkZW50
aWZpZXIpLCAwKSkgeworICAgICAgICAvLyBGSVhNRTogV2hhdCBzaG91bGQgd2UgZG8gaWYgdGhp
cyBmYWlscz8KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAg
IHJlc291cmNlTG9hZGVyLT5zZXRJZGVudGlmaWVyKGlkZW50aWZpZXIpOworICAgIG1fcGVuZGlu
Z1Jlc291cmNlTG9hZGVycy5zZXQoaWRlbnRpZmllciwgcmVzb3VyY2VMb2FkZXIpOworICAgIAor
ICAgIG5vdGlmeURpZFNjaGVkdWxlUmVzb3VyY2VSZXF1ZXN0KHJlc291cmNlTG9hZGVyKTsKK30K
Kwordm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmFkZE1haW5SZXNvdXJjZUxvYWQoUmVz
b3VyY2VMb2FkZXIqIHJlc291cmNlTG9hZGVyKQoreworICAgIExPRyhOZXR3b3JrLCAiKFdlYlBy
b2Nlc3MpIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6YWRkTWFpblJlc291cmNlTG9hZCwgdXJs
ICclcyciLCByZXNvdXJjZUxvYWRlci0+dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisK
KyAgICBSZXNvdXJjZUxvYWRJZGVudGlmaWVyIGlkZW50aWZpZXI7CisKKyAgICBpZiAoIVdlYlBy
b2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZFN5
bmMoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpBZGRMb2FkSW5Qcm9n
cmVzcyhyZXNvdXJjZUxvYWRlci0+dXJsKCkpLCBNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25U
b1dlYlByb2Nlc3M6OkFkZExvYWRJblByb2dyZXNzOjpSZXBseShpZGVudGlmaWVyKSwgMCkpIHsK
KyAgICAgICAgLy8gRklYTUU6IFdoYXQgc2hvdWxkIHdlIGRvIGlmIHRoaXMgZmFpbHM/CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHJlc291cmNlTG9hZGVyLT5z
ZXRJZGVudGlmaWVyKGlkZW50aWZpZXIpOworICAgIAorICAgIG1fYWN0aXZlUmVzb3VyY2VMb2Fk
ZXJzLnNldChpZGVudGlmaWVyLCByZXNvdXJjZUxvYWRlcik7Cit9CisKK3ZvaWQgV2ViUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOjpyZW1vdmUoUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9hZGVyKQor
eworICAgIEFTU0VSVChyZXNvdXJjZUxvYWRlcik7CisgICAgTE9HKE5ldHdvcmssICIoV2ViUHJv
Y2VzcykgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZW1vdmUsIHVybCAnJXMnIiwgcmVzb3Vy
Y2VMb2FkZXItPnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgLy8gSXQncyBw
b3NzaWJsZSBmb3IgYSByZXNvdXJjZUxvYWRlciB0byBiZSByZW1vdmVkIGJlZm9yZSBpdCBldmVy
IHN0YXJ0ZWQsCisgICAgLy8gbWVhbmluZyBpdCBkb2Vzbid0IGhhdmUgYW4gaWRlbnRpZmllci4K
KyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG1ha2UgdGhpcyBub3QgYmUgcG9zc2libGUuCisgICAg
Ly8gV2Ugc2hvdWxkIGNoYW5nZSB0aGUgUmVzb3VyY2VMb2FkZXIgY29kZSBwYXRoIHNvIHdlIGFs
d2F5cyBnZXQgYW4gaWRlbnRpZmllciB0byBpdCB3aGVuIGl0IGlzIGNyZWF0ZWQuCisgICAgCisg
ICAgUmVzb3VyY2VMb2FkSWRlbnRpZmllciBpZGVudGlmaWVyID0gcmVzb3VyY2VMb2FkZXItPmlk
ZW50aWZpZXIoKTsKKyAgICBpZiAoIWlkZW50aWZpZXIpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJX
ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIgcmVtb3ZpbmcgYSBSZXNvdXJjZUxvYWRlciB0aGF0IGhh
cyBubyBpZGVudGlmaWVyLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFdl
YlByb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2Vu
ZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlJlbW92ZUxvYWRJZGVu
dGlmaWVyKGlkZW50aWZpZXIpLCAwKTsKKyAgICAKKyAgICBBU1NFUlQobV9wZW5kaW5nUmVzb3Vy
Y2VMb2FkZXJzLmNvbnRhaW5zKGlkZW50aWZpZXIpIHx8IG1fYWN0aXZlUmVzb3VyY2VMb2FkZXJz
LmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKKyAgICBtX3BlbmRpbmdSZXNvdXJjZUxvYWRlcnMucmVt
b3ZlKGlkZW50aWZpZXIpOworICAgIG1fYWN0aXZlUmVzb3VyY2VMb2FkZXJzLnJlbW92ZShpZGVu
dGlmaWVyKTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OmNyb3NzT3JpZ2lu
UmVkaXJlY3RSZWNlaXZlZChSZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIsIGNvbnN0IEtV
UkwmIHJlZGlyZWN0VVJMKQoreworICAgIExPRyhOZXR3b3JrLCAiKFdlYlByb2Nlc3MpIFdlYlJl
c291cmNlTG9hZFNjaGVkdWxlcjo6Y3Jvc3NPcmlnaW5SZWRpcmVjdFJlY2VpdmVkLiBGcm9tICcl
cycgdG8gJyVzJyIsIHJlc291cmNlTG9hZGVyLT51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
LCByZWRpcmVjdFVSTC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgIEFTU0VSVChyZXNv
dXJjZUxvYWRlcik7CisgICAgQVNTRVJUKHJlc291cmNlTG9hZGVyLT5pZGVudGlmaWVyKCkpOwor
CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlv
bigpLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNy
b3NzT3JpZ2luUmVkaXJlY3RSZWNlaXZlZChyZXNvdXJjZUxvYWRlci0+aWRlbnRpZmllcigpLCBy
ZWRpcmVjdFVSTCksIE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Y3Jv
c3NPcmlnaW5SZWRpcmVjdFJlY2VpdmVkOjpSZXBseSgpLCAwKTsKK30KKwordm9pZCBXZWJSZXNv
dXJjZUxvYWRTY2hlZHVsZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKFJlc291cmNlTG9hZFByaW9y
aXR5IG1pbmltdW1Qcmlvcml0eSkKK3sKKyAgICBMT0coTmV0d29yaywgIihXZWJQcm9jZXNzKSBX
ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzIik7CisgICAgCisg
ICAgLy8gSWYgdGhpcyBXZWJQcm9jZXNzIGhhcyBpdHMgb3duIHJlcXVlc3Qgc3VzcGVuc2lvbiBj
b3VudCB0aGVuIHdlIGRvbid0IGV2ZW4KKyAgICAvLyBoYXZlIHRvIGJvdGhlciBtZXNzYWdpbmcg
dGhlIE5ldHdvcmtQcm9jZXNzLgorICAgIGlmIChtX3N1c3BlbmRQZW5kaW5nUmVxdWVzdHNDb3Vu
dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya0Nv
bm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzczo6U2VydmVQZW5kaW5nUmVxdWVzdHMobWluaW11bVByaW9yaXR5KSwgMCk7
Cit9CisKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzdXNwZW5kUGVuZGluZ1JlcXVl
c3RzKCkKK3sKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5j
b25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzczo6U3VzcGVuZFBlbmRpbmdSZXF1ZXN0cygpLCBNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M6OlN1c3BlbmRQZW5kaW5nUmVxdWVzdHM6OlJlcGx5KCksIDApOworCisg
ICAgKyttX3N1c3BlbmRQZW5kaW5nUmVxdWVzdHNDb3VudDsKK30KKwordm9pZCBXZWJSZXNvdXJj
ZUxvYWRTY2hlZHVsZXI6OnJlc3VtZVBlbmRpbmdSZXF1ZXN0cygpCit7CisgICAgV2ViUHJvY2Vz
czo6c2hhcmVkKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhN
ZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlJlc3VtZVBlbmRpbmdSZXF1
ZXN0cygpLCBNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlJlc3VtZVBl
bmRpbmdSZXF1ZXN0czo6UmVwbHkoKSwgMCk7CisKKyAgICBBU1NFUlQobV9zdXNwZW5kUGVuZGlu
Z1JlcXVlc3RzQ291bnQpOworICAgIC0tbV9zdXNwZW5kUGVuZGluZ1JlcXVlc3RzQ291bnQ7Cit9
CisKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXRTZXJpYWxMb2FkaW5nRW5hYmxl
ZChib29sIGVuYWJsZWQpCit7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya0Nvbm5l
Y3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M6OlNldFNlcmlhbExvYWRpbmdFbmFibGVkKGVuYWJsZWQpLCBNZXNzYWdl
czo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlNldFNlcmlhbExvYWRpbmdFbmFibGVk
OjpSZXBseSgpLCAwKTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnN0YXJ0
UmVzb3VyY2VMb2FkKFJlc291cmNlTG9hZElkZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBS
ZWZQdHI8UmVzb3VyY2VMb2FkZXI+IGxvYWRlciA9IG1fcGVuZGluZ1Jlc291cmNlTG9hZGVycy50
YWtlKGlkZW50aWZpZXIpOworICAgIEFTU0VSVChsb2FkZXIpOworICAgIAorICAgIExPRyhOZXR3
b3JrLCAiKFdlYlByb2Nlc3MpIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c3RhcnRSZXNvdXJj
ZUxvYWQgc3RhcnRpbmcgbG9hZCBmb3IgJyVzJyIsIGxvYWRlci0+dXJsKCkuc3RyaW5nKCkudXRm
OCgpLmRhdGEoKSk7CisKKyAgICBtX2FjdGl2ZVJlc291cmNlTG9hZGVycy5zZXQoaWRlbnRpZmll
ciwgbG9hZGVyKTsKKworICAgIHN0YXJ0UmVzb3VyY2VMb2FkZXIobG9hZGVyLmdldCgpKTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19QUk9D
RVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJl
c291cmNlTG9hZFNjaGVkdWxlci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3Jr
L1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5oCmluZGV4IGRmZDk4NWYuLjk1ZGI1MDIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRT
Y2hlZHVsZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVz
b3VyY2VMb2FkU2NoZWR1bGVyLmgKQEAgLTI2LDE1ICsyNiw1MSBAQAogI2lmbmRlZiBXZWJSZXNv
dXJjZUxvYWRTY2hlZHVsZXJfaAogI2RlZmluZSBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXJfaAog
CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRQcmlvcml0eS5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJj
ZUxvYWRlci5oPgogCiAjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKIAogbmFtZXNwYWNlIFdl
YktpdCB7CiAKK2NsYXNzIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjsKK3R5cGVkZWYgdWludDY0
X3QgUmVzb3VyY2VMb2FkSWRlbnRpZmllcjsKKwogY2xhc3MgV2ViUmVzb3VyY2VMb2FkU2NoZWR1
bGVyIDogcHVibGljIFdlYkNvcmU6OlJlc291cmNlTG9hZFNjaGVkdWxlciB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyKTsgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwdWJsaWM6CisgICAgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCk7CiAgICAg
dmlydHVhbCB+V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCk7CisgICAgCisgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPFdlYkNvcmU6OlN1YnJlc291cmNlTG9hZGVyPiBzY2hlZHVsZVN1YnJlc291cmNl
TG9hZChXZWJDb3JlOjpGcmFtZSosIFdlYkNvcmU6OkNhY2hlZFJlc291cmNlKiwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgV2ViQ29yZTo6UmVzb3VyY2VMb2FkUHJpb3JpdHksIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlTG9hZGVyT3B0aW9ucyYpOworICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcj4gc2NoZWR1bGVQbHVnaW5T
dHJlYW1Mb2FkKFdlYkNvcmU6OkZyYW1lKiwgV2ViQ29yZTo6TmV0c2NhcGVQbHVnSW5TdHJlYW1M
b2FkZXJDbGllbnQqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICAKKyAg
ICB2aXJ0dWFsIHZvaWQgYWRkTWFpblJlc291cmNlTG9hZChXZWJDb3JlOjpSZXNvdXJjZUxvYWRl
ciopOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmUoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXIqKTsK
KyAgICB2aXJ0dWFsIHZvaWQgY3Jvc3NPcmlnaW5SZWRpcmVjdFJlY2VpdmVkKFdlYkNvcmU6OlJl
c291cmNlTG9hZGVyKiwgY29uc3QgV2ViQ29yZTo6S1VSTCYgcmVkaXJlY3RVUkwpOworICAgIAor
ICAgIHZpcnR1YWwgdm9pZCBzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhXZWJDb3JlOjpSZXNvdXJjZUxv
YWRQcmlvcml0eSBtaW5pbXVtUHJpb3JpdHkgPSBXZWJDb3JlOjpSZXNvdXJjZUxvYWRQcmlvcml0
eVZlcnlMb3cpOworCisgICAgdmlydHVhbCB2b2lkIHN1c3BlbmRQZW5kaW5nUmVxdWVzdHMoKTsK
KyAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lUGVuZGluZ1JlcXVlc3RzKCk7CisKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0U2VyaWFsTG9hZGluZ0VuYWJsZWQoYm9vbCk7CisKK3ByaXZhdGU6CisgICAgdm9p
ZCBzY2hlZHVsZUxvYWQoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXIqLCBXZWJDb3JlOjpSZXNvdXJj
ZUxvYWRQcmlvcml0eSk7CisKKyAgICAvLyBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24gZ2V0cyB0
byB0ZWxsIGxvYWRzIHRvIGFjdHVhbGx5IHN0YXJ0LgorICAgIC8vIEZJWE1FOiBPbmNlIGFjdHVh
bCBsb2FkaW5nIHRha2VzIHBsYWNlIGluIHRoZSBOZXR3b3JrUHJvY2VzcyB3ZSB3b24ndCBuZWVk
IHRoaXMuCisgICAgZnJpZW5kIGNsYXNzIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjsKKyAgICB2
b2lkIHN0YXJ0UmVzb3VyY2VMb2FkKFJlc291cmNlTG9hZElkZW50aWZpZXIpOworICAgIAorICAg
IHR5cGVkZWYgSGFzaE1hcDx1bnNpZ25lZCBsb25nLCBSZWZQdHI8V2ViQ29yZTo6UmVzb3VyY2VM
b2FkZXI+ID4gUmVzb3VyY2VMb2FkZXJNYXA7CisgICAgUmVzb3VyY2VMb2FkZXJNYXAgbV9wZW5k
aW5nUmVzb3VyY2VMb2FkZXJzOworICAgIFJlc291cmNlTG9hZGVyTWFwIG1fYWN0aXZlUmVzb3Vy
Y2VMb2FkZXJzOworICAgIAorICAgIHVuc2lnbmVkIG1fc3VzcGVuZFBlbmRpbmdSZXF1ZXN0c0Nv
dW50OworCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1T
dHJhdGVnaWVzLmNwcAppbmRleCA4ODk2MGYzLi5mMTJiODUxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0
Zm9ybVN0cmF0ZWdpZXMuY3BwCkBAIC0xMDQsMTYgKzEwNCwxOCBAQCB2b2lkIFdlYlBsYXRmb3Jt
U3RyYXRlZ2llczo6bm90aWZ5Q29va2llc0NoYW5nZWQoKQogLy8gTG9hZGVyU3RyYXRlZ3kKIAog
I2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCi0KIFJlc291cmNlTG9hZFNjaGVkdWxlciogV2Vi
UGxhdGZvcm1TdHJhdGVnaWVzOjpyZXNvdXJjZUxvYWRTY2hlZHVsZXIoKQogewogICAgIHN0YXRp
YyBSZXNvdXJjZUxvYWRTY2hlZHVsZXIqIHNjaGVkdWxlcjsKLSAgICBpZiAoIXNjaGVkdWxlcikK
LSAgICAgICAgc2NoZWR1bGVyID0gJldlYlByb2Nlc3M6OnNoYXJlZCgpLndlYlJlc291cmNlTG9h
ZFNjaGVkdWxlcigpOwotICAgICAgICAKKyAgICBpZiAoIXNjaGVkdWxlcikgeworICAgICAgICBp
ZiAoV2ViUHJvY2Vzczo6c2hhcmVkKCkudXNlc05ldHdvcmtQcm9jZXNzKCkpCisgICAgICAgICAg
ICBzY2hlZHVsZXIgPSAmV2ViUHJvY2Vzczo6c2hhcmVkKCkud2ViUmVzb3VyY2VMb2FkU2NoZWR1
bGVyKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNjaGVkdWxlciA9IFdlYkNvcmU6OnJl
c291cmNlTG9hZFNjaGVkdWxlcigpOworICAgIH0KKyAgICAKICAgICByZXR1cm4gc2NoZWR1bGVy
OwogfQotCiAjZW5kaWYKIAogLy8gUGx1Z2luU3RyYXRlZ3kKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlByb2Nlc3MuY3BwCmluZGV4IDYwZTYwMmMuLjhjMTU4YzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcApAQCAtMzA3LDggKzMwNyw3IEBAIHZvaWQgV2Vi
UHJvY2Vzczo6ZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkKICNlbHNlCiAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAjZW5kaWYKLQotICAgIFJlZlB0cjxOZXR3b3JrUHJvY2Vzc0Nv
bm5lY3Rpb24+IG1fbmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uID0gTmV0d29ya1Byb2Nlc3NDb25u
ZWN0aW9uOjpjcmVhdGUoY29ubmVjdGlvbklkZW50aWZpZXIpOworICAgIG1fbmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uID0gTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOjpjcmVhdGUoY29ubmVjdGlv
bklkZW50aWZpZXIpOwogfQogI2VuZGlmIC8vIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCiAKQEAg
LTEwMzIsNiArMTAzMSwxMyBAQCB2b2lkIFdlYlByb2Nlc3M6OnBvc3RJbmplY3RlZEJ1bmRsZU1l
c3NhZ2UoY29uc3QgQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSYgbWVzc2FnZQogfQogCiAjaWYgRU5B
QkxFKE5FVFdPUktfUFJPQ0VTUykKK05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbiogV2ViUHJvY2Vz
czo6bmV0d29ya0Nvbm5lY3Rpb24oKQoreworICAgIC8vIEZJWE1FOiBIb3cgZG8gd2UgaGFuZGxl
IG5vdCBoYXZpbmcgdGhlIGNvbm5lY3Rpb24gd2hlbiB0aGUgV2ViUHJvY2VzcyBuZWVkcyBpdD8g
IChOZXR3b3JrUHJvY2VzcyBjcmFzaGVkLCBmb3IgZXhhbXBsZSkKKyAgICBBU1NFUlQobV9uZXR3
b3JrUHJvY2Vzc0Nvbm5lY3Rpb24pOworICAgIHJldHVybiBtX25ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbi5nZXQoKTsKK30KKwogdm9pZCBXZWJQcm9jZXNzOjpuZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rp
b25DbG9zZWQoTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKiBjb25uZWN0aW9uKQogewogICAgIEFT
U0VSVChtX25ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUHJvY2Vzcy5oCmluZGV4IDc0NjhjZDYuLmMyNDhhNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUHJvY2Vzcy5oCkBAIC0yMDMsNyArMjAzLDkgQEAgcHVibGljOgogI2VuZGlmCiAK
ICNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQorICAgIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlv
biogbmV0d29ya0Nvbm5lY3Rpb24oKTsKICAgICB2b2lkIG5ldHdvcmtQcm9jZXNzQ29ubmVjdGlv
bkNsb3NlZChOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24qKTsKKyAgICBib29sIHVzZXNOZXR3b3Jr
UHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlc05ldHdvcmtQcm9jZXNzOyB9CiAgICAgV2Vi
UmVzb3VyY2VMb2FkU2NoZWR1bGVyJiB3ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKSB7IHJldHVy
biBtX3dlYlJlc291cmNlTG9hZFNjaGVkdWxlcjsgfQogI2VuZGlmCiAK
</data>
<flag name="review"
          id="184733"
          type_id="1"
          status="+"
          setter="ap"
    />
    <flag name="commit-queue"
          id="184749"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>