<?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>44722</bug_id>
          
          <creation_ts>2010-08-26 14:55:58 -0700</creation_ts>
          <short_desc>Add support for &quot;downloadToFile&quot; to ResourceRequest and ResourceResponse</short_desc>
          <delta_ts>2016-05-18 21:25:33 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>XML</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></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>44721</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Nordman">michaeln</reporter>
          <assigned_to name="Michael Nordman">michaeln</assigned_to>
          <cc>abarth</cc>
    
    <cc>achristensen</cc>
    
    <cc>ap</cc>
    
    <cc>beidson</cc>
    
    <cc>bfulgham</cc>
    
    <cc>dglazkov</cc>
    
    <cc>ericu</cc>
    
    <cc>fishd</cc>
    
    <cc>jarred</cc>
    
    <cc>jianli</cc>
    
    <cc>kinuko</cc>
    
    <cc>mjs</cc>
    
    <cc>syoichi</cc>
    
    <cc>tzik</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>270136</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-08-26 14:55:58 -0700</bug_when>
    <thetext>The intent is to use that capability to implement XHR.responseBlob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270145</commentid>
    <comment_count>1</comment_count>
      <attachid>65625</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-08-26 15:09:23 -0700</bug_when>
    <thetext>Created attachment 65625
downloadToFile

not ready for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270160</commentid>
    <comment_count>2</comment_count>
      <attachid>65631</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-08-26 15:34:36 -0700</bug_when>
    <thetext>Created attachment 65631
downloadToFile

ChangeLog comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270190</commentid>
    <comment_count>3</comment_count>
      <attachid>65631</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-08-26 16:05:00 -0700</bug_when>
    <thetext>Comment on attachment 65631
downloadToFile

r? to get some feedback on the approach

* Still noodling about how to manage the lifetime of the downloaded file.
* Haven&apos;t yet looked at baking this into platform/ResourceHandle.cpp

Need to see how the blob infrastructure plays out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270214</commentid>
    <comment_count>4</comment_count>
      <attachid>65631</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-08-26 16:55:47 -0700</bug_when>
    <thetext>Comment on attachment 65631
downloadToFile

WebCore/platform/network/ResourceRequestBase.cpp:49
 +  #if ENABLE(XHR_RESPONSE_BLOB)

i recommend not conditionalizing this code.  it is useful infrastructure
that can be used independently of XHR_RESPONSE_BLOB.  it is also quite
lightweight, so there isn&apos;t much cost to having it in webkit builds that
do not enable XHR_RESPONSE_BLOB.  i think the benefits of cleaner code
are worth it.  same goes for ResourceResponseBase and the affected 
Chromium WebKit API files.  come to think of it, perhaps this entire
patch can have the ENABLE flag excluded.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270289</commentid>
    <comment_count>5</comment_count>
      <attachid>65667</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-08-26 20:20:10 -0700</bug_when>
    <thetext>Created attachment 65667
downloadToFile

removed conditional compilation guards</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273605</commentid>
    <comment_count>6</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-09-02 15:18:49 -0700</bug_when>
    <thetext>I think i&apos;m far enough along with the related work to feel like getting this into review and into the code base now... can somebody take a look?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276021</commentid>
    <comment_count>7</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-09-08 13:19:00 -0700</bug_when>
    <thetext>ping</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276025</commentid>
    <comment_count>8</comment_count>
      <attachid>65667</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-09-08 13:25:31 -0700</bug_when>
    <thetext>Comment on attachment 65667
downloadToFile

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

&gt; WebCore/ChangeLog:13
&gt; +
shouldn&apos;t there also be a change to ResourceHandleClient to similarly add a didReceiveFileData method?

&gt; WebCore/platform/network/ResourceResponseBase.h:114
&gt; +    // TBD: How is the lifetime of this file is managed?
nit: &quot;file is managed&quot; -&gt; &quot;file managed&quot;

TBD -&gt; FIXME</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276093</commentid>
    <comment_count>9</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-09-08 14:54:32 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; shouldn&apos;t there also be a change to ResourceHandleClient to similarly add a didReceiveFileData method?

I guess it would be a good idea if something should actually call into this new method :)

&gt; nit: &quot;file is managed&quot; -&gt; &quot;file managed&quot;
&gt; 
&gt; TBD -&gt; FIXME

Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276105</commentid>
    <comment_count>10</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-09-08 15:16:47 -0700</bug_when>
    <thetext>Hey... looks like when this option is enabled in chrome, DataReceived msgs don&apos;t get sent to the renderer... we&apos;ll have to add FileDataReceived msgs for to get the progress events to work right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276187</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-09-08 17:01:51 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Hey... looks like when this option is enabled in chrome, DataReceived msgs don&apos;t get sent to the renderer... we&apos;ll have to add FileDataReceived msgs for to get the progress events to work right.

Yeah, that makes sense.  WebURLLoaderClient already has a didDownloadData method that should get called though.  If that matches up to a ResourceHandleClient method, then we should be set.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276204</commentid>
    <comment_count>12</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-09-08 17:29:28 -0700</bug_when>
    <thetext>
&gt; Yeah, that makes sense.  WebURLLoaderClient already has a didDownloadData
&gt; method that should get called though.  If that matches up to a
&gt; ResourceHandleClient method, then we should be set.

I&apos;ll check... but i think that&apos;s probably backed by DataReceived msgs and won&apos;t actually get called in the downloadAsFile case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290049</commentid>
    <comment_count>13</comment_count>
      <attachid>69878</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-10-05 19:58:49 -0700</bug_when>
    <thetext>Created attachment 69878
downloadAsBlob</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290064</commentid>
    <comment_count>14</comment_count>
      <attachid>69881</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-10-05 20:31:04 -0700</bug_when>
    <thetext>Created attachment 69881
downloadAsBlob

There is no common code implementation for actually constructing a blob out of the response data in the async case, but there is a comment about how to go about doing so in platform/ResourceHandle.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290066</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-05 20:33:35 -0700</bug_when>
    <thetext>Attachment 69881 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit/chromium/src/WebURLRequest.cpp:296:  Could not find a newline character at the end of the file.  [whitespace/ending_newline] [5]
WebKit/chromium/src/WebURLRequestPrivate.h:53:  Could not find a newline character at the end of the file.  [whitespace/ending_newline] [5]
WebCore/platform/network/ResourceHandle.cpp:214:  One space before end of line comments  [whitespace/comments] [5]
WebCore/loader/DocumentThreadableLoader.cpp:389:  One line control clauses should not use braces.  [whitespace/braces] [4]
WebKit/chromium/src/ResourceHandle.cpp:421:  Could not find a newline character at the end of the file.  [whitespace/ending_newline] [5]
WebKit/chromium/src/WebURLResponsePrivate.h:53:  Could not find a newline character at the end of the file.  [whitespace/ending_newline] [5]
WebCore/loader/FrameLoader.cpp:2774:  Should have a space between // and comment  [whitespace/comments] [4]
WebKit/chromium/src/WebURLResponse.cpp:396:  Could not find a newline character at the end of the file.  [whitespace/ending_newline] [5]
Total errors found: 8 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>290071</commentid>
    <comment_count>16</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-10-05 20:43:28 -0700</bug_when>
    <thetext>Attachment 69881 did not build on qt:
Build output: http://queues.webkit.org/results/4180093</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290074</commentid>
    <comment_count>17</comment_count>
      <attachid>69882</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-10-05 20:47:47 -0700</bug_when>
    <thetext>Created attachment 69882
downloadAsBlob

Fixed the style issues.

Also if it&apos;s easier to see what&apos;s going on in a side-by-side fashion, you can look here too...
  webcore - http://codereview.chromium.org/3404026/show
  webkit - http://codereview.chromium.org/3404025/show
... the patch for review in bugzilla is only slightly modified from those.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290081</commentid>
    <comment_count>18</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-10-05 20:59:32 -0700</bug_when>
    <thetext>Attachment 69882 did not build on qt:
Build output: http://queues.webkit.org/results/4202088</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290585</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-06 14:40:02 -0700</bug_when>
    <thetext>Attachment 69882 did not build on chromium:
Build output: http://queues.webkit.org/results/4216121</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290653</commentid>
    <comment_count>20</comment_count>
      <attachid>70005</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-10-06 16:28:02 -0700</bug_when>
    <thetext>Created attachment 70005
downloadAsBlob

fix some build issues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290665</commentid>
    <comment_count>21</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-10-06 16:39:21 -0700</bug_when>
    <thetext>Attachment 70005 did not build on qt:
Build output: http://queues.webkit.org/results/4147110</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290696</commentid>
    <comment_count>22</comment_count>
      <attachid>70005</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-06 17:02:16 -0700</bug_when>
    <thetext>Comment on attachment 70005
downloadAsBlob

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

We need tests for this code.

&gt; WebCore/loader/DocumentThreadableLoader.cpp:236
&gt; +    // Ignore response body of preflight requests.

We can skip this comment.

&gt; WebCore/loader/DocumentThreadableLoader.cpp:273
&gt; +    if (m_actualRequest) {
&gt; +        ASSERT(!m_sameOriginRequest);
&gt; +        ASSERT(m_options.crossOriginRequestPolicy == UseAccessControl);
&gt; +        preflightSuccess();
&gt; +    } else

Prefer early return.

&gt; WebCore/loader/DocumentThreadableLoader.cpp:367
&gt; +            dataAsBlob = m_document-&gt;frame()-&gt;loader()-&gt;loadResourceSynchronouslyAsBlob(request, storedCredentials, error, response, identifier);
&gt; +        else
&gt; +            identifier = m_document-&gt;frame()-&gt;loader()-&gt;loadResourceSynchronously(request, storedCredentials, error, response, data);

Should these methods assert that request.downloadAsBlob is set to the right thing?

&gt; WebCore/loader/DocumentThreadableLoader.cpp:388
&gt; +       didFinishLoadingBlob(identifier, dataAsBlob.release());

bad indent.  prefer early return.

&gt; WebCore/loader/FrameLoader.cpp:2740
&gt;  unsigned long FrameLoader::loadResourceSynchronously(const ResourceRequest&amp; request, StoredCredentials storedCredentials, ResourceError&amp; error, ResourceResponse&amp; response, Vector&lt;char&gt;&amp; data)

This method shouldn&apos;t be on FrameLoader, but that&apos;s not your fault.

&gt; WebCore/loader/FrameLoader.cpp:2742
&gt; +    ASSERT(!request.downloadAsBlob());

Ah, I see it does.

&gt; WebCore/loader/FrameLoader.cpp:2744
&gt; +    unsigned long identifier = prepareSyncReqeust(request, error, actualRequest);

prepareSyncReqeust =&gt; prepareSyncRequest

&gt; WebCore/loader/FrameLoader.cpp:2761
&gt; +PassRefPtr&lt;Blob&gt; FrameLoader::loadResourceSynchronouslyAsBlob(const ResourceRequest&amp; request, StoredCredentials storedCredentials, ResourceError&amp; error, ResourceResponse&amp; response, unsigned long&amp; identifier)

These two methods duplicate a lot of code.  Is it possible to share more?  Perhaps pass which ResourceHandle static method to use as a template parameter?

&gt; WebCore/loader/ResourceLoader.cpp:286
&gt; +void ResourceLoader::didFinishLoadingBlob(double finishTime, PassRefPtr&lt;Blob&gt;)

It seems strange to use a PassRefPtr and then to ignore the argument.  Did you mean to pass a Blob* ?

&gt; WebCore/loader/ResourceLoader.cpp:439
&gt; +void ResourceLoader::didReceiveDataCommon(bool isBlobData, const char* data, int length, int lengthReceived)

Can we use an enum instead of isBlobData ?  The call sites are hard to read.

&gt; WebCore/loader/ResourceLoader.h:83
&gt; +        virtual void didReceiveBlobData(int) { }

Please don&apos;t declare virtual functions inline.

&gt; WebCore/loader/ResourceLoader.h:106
&gt; +        virtual void didFinishLoadingBlob(ResourceHandle*, double /*finishTime*/, PassRefPtr&lt;Blob&gt;);

There&apos;s not reason to comment out the formal parameter name.

&gt; WebCore/loader/SubresourceLoader.cpp:195
&gt; +void SubresourceLoader::didFinishLoadingCommon(bool asBlob, double finishTime, PassRefPtr&lt;Blob&gt; blob)

Same comment w.r.t. enum here.  Also, please use the same variable names for consistency.

&gt; WebCore/loader/SubresourceLoader.cpp:206
&gt; +            m_client-&gt;didFinishLoadingBlob(this, blob);

I&apos;m confused.  Does didFinishLoadingBlob take a PassRefPtr?  If so, won&apos;t blob be null below?

&gt; WebCore/loader/WorkerThreadableLoader.cpp:235
&gt; +        createCallbackTask(&amp;workerContextDidFinishLoadingBlob, m_workerClientWrapper, identifier, blob-&gt;url(), blob-&gt;type(), blob-&gt;size()),
&gt; +        m_taskMode);

We don&apos;t usually put in this kind of line break.

&gt; WebCore/loader/WorkerThreadableLoader.h:137
&gt; +            // Only to be used on the main thread.

This comment doesn&apos;t match the one above.  Is that an intentional difference?

&gt; WebCore/platform/network/ResourceHandle.cpp:196
&gt; +PassRefPtr&lt;Blob&gt; ResourceHandle::loadResourceSynchronouslyAsBlob(
&gt; +                                               NetworkingContext* context,
&gt; +                                               const ResourceRequest&amp; request,
&gt; +                                               StoredCredentials storedCredentials,
&gt; +                                               ResourceError&amp; error,
&gt; +                                               ResourceResponse&amp; response)

This all goes on one line.  Yes, it&apos;s ugly.

&gt; WebCore/platform/network/ResourceHandle.cpp:214
&gt; +        blobData-&gt;appendData(CString(data.data(), data.size())); // FIXME: Don&apos;t copy the data.

Woah, that&apos;s a big memcpy.  This change is already huge, but please follow up and fix this!!!

&gt; WebCore/platform/network/ResourceRequestBase.h:228
&gt; +        bool m_downloadAsBlob;

There&apos;s a general problem that we can&apos;t add members to ResourceRequestBase that can&apos;t be represented in an NSURLRequest (or something like that).  I&apos;m not sure if this issue has been resolved.  We should check with some Apple folks.

&gt; WebCore/platform/network/chromium/ResourceRequest.h:87
&gt; +        // If true, the response body will be provided as a file.

Remove this comment.

&gt; WebCore/platform/network/chromium/ResourceRequest.h:89
&gt; +        bool downloadToFile() const { return downloadAsBlob(); }
&gt; +        void setDownloadToFile(bool download) { setDownloadAsBlob(download); }

Why are we switching names from &quot;AsBlob&quot; to &quot;ToFile&quot; ?

&gt; WebCore/platform/network/chromium/ResourceResponse.cpp:40
&gt; +    m_downloadFilePath  = path;

extra space before =

&gt; WebCore/xml/XMLHttpRequest.cpp:1041
&gt; +void XMLHttpRequest::didReceiveDataCommon(bool isBlobData, const char* data, int len)

isBlobData =&gt; enum
len =&gt; length

&gt; WebCore/xml/XMLHttpRequest.cpp:1069
&gt; +        if (len == -1) 
&gt; +            len = strlen(data);

wow, that&apos;s terrible.  I had no idea this was here.

&gt; WebKit/chromium/src/ResourceHandle.cpp:89
&gt; +    static PassRefPtr&lt;Blob&gt; loadResourceSynchronously(NetworkingContext* context,
&gt; +                                                      const ResourceRequest&amp; request,
&gt; +                                                      StoredCredentials storedCredentials,
&gt; +                                                      ResourceError&amp; error,
&gt; +                                                      ResourceResponse&amp; response,
&gt; +                                                      Vector&lt;char&gt;* data);

one line

&gt; WebKit/chromium/src/ResourceHandle.cpp:247
&gt; +String ResourceHandleInternal::determineContentType(const ResourceResponse&amp; response)
&gt; +{
&gt; +    if (response.isHTTP())
&gt; +        return extractMIMETypeFromMediaType(response.httpHeaderField(&quot;Content-Type&quot;));
&gt; +    return response.mimeType();
&gt; +}

Why is this implemented here instead of as a member of ResourceResponse?

&gt; WebKit/chromium/src/ResourceHandle.cpp:255
&gt; +PassRefPtr&lt;Blob&gt; ResourceHandleInternal::loadResourceSynchronously(NetworkingContext* context,
&gt; +                                                                   const ResourceRequest&amp; request,
&gt; +                                                                   StoredCredentials storedCredentials,
&gt; +                                                                   ResourceError&amp; error,
&gt; +                                                                   ResourceResponse&amp; response,
&gt; +                                                                   Vector&lt;char&gt;* data)

one line.

&gt; WebKit/chromium/src/ResourceHandle.cpp:266
&gt; +    long long lengthOut = 7777;

7777?

&gt; WebKit/chromium/src/ResourceHandle.cpp:268
&gt; +    // TODO(michaeln): Some way to get the lengthOut in the asFile case.

TODO(michaeln) =&gt; FIXME</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290703</commentid>
    <comment_count>23</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-10-06 17:08:10 -0700</bug_when>
    <thetext>Thnx for looking!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290724</commentid>
    <comment_count>24</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-10-06 17:42:26 -0700</bug_when>
    <thetext>Just replying to particular comments, no new patch yet, I&apos;m looking at the QT build (??).


&gt; &gt; WebCore/loader/FrameLoader.cpp:2761
&gt; &gt; +PassRefPtr&lt;Blob&gt; FrameLoader::loadResourceSynchronouslyAsBlob(const ResourceRequest&amp; request, StoredCredentials storedCredentials, 
&gt; 
&gt; These two methods duplicate a lot of code.  Is it possible to share more?  Perhaps pass which
&gt; ResourceHandle static method to use as a template parameter?

I tried to factor out the common parts into prepareSyncReqeust [sic]. I&apos;ll look into getting greater reuse.


&gt; &gt; WebCore/loader/ResourceLoader.cpp:286
&gt; &gt; +void ResourceLoader::didFinishLoadingBlob(double finishTime, PassRefPtr&lt;Blob&gt;)
&gt; 
&gt; It seems strange to use a PassRefPtr and then to ignore the argument.  Did you mean to pass a Blob* ?

The only reason I&apos;m using a PassRefPtr is that I thought webcore didn&apos;t like passing raw ptrs around. Switching to raw ptrs would be fine by me, nothing hidden and unexpected going on under the covers!


&gt; &gt; WebCore/loader/SubresourceLoader.cpp:206
&gt; &gt; +            m_client-&gt;didFinishLoadingBlob(this, blob);
&gt; 
&gt; I&apos;m confused.  Does didFinishLoadingBlob take a PassRefPtr?  If so, won&apos;t blob be null below?

Speaking of hidden unexpected side affects, I think its me thats confused. If i switch to raw ptrs this would work, or I&apos;ll have to allocate a RefPtr&lt;T&gt; on the stack in this method to satisfy both &apos;finish&apos; calls with non empty PassRefPtrs. 


&gt; &gt; WebCore/loader/WorkerThreadableLoader.h:137
&gt; &gt; +            // Only to be used on the main thread.
&gt; 
&gt; This comment doesn&apos;t match the one above.  Is that an intentional difference?

No secret meanings. There are several similar comments phrased differently, this phrasing matches at least one of them. I&apos;ll make them all match.
&gt; We need tests for this code.

This won&apos;t function in any port just yet. Is there any precedence to adding layout tests that aren&apos;t run yet? Any convention for how to do so? Maybe by naming them, foo_test.html.notyet?


&gt; &gt; WebCore/platform/network/ResourceHandle.cpp:196
&gt; &gt; +PassRefPtr&lt;Blob&gt; ResourceHandle::loadResourceSynchronouslyAsBlob(
&gt; &gt; +                                               NetworkingContext* context,
&gt; &gt; +                                               const ResourceRequest&amp; request,
&gt; &gt; +                                               StoredCredentials storedCredentials,
&gt; &gt; +                                               ResourceError&amp; error,
&gt; &gt; +                                               ResourceResponse&amp; response)
&gt; 
&gt; This all goes on one line.  Yes, it&apos;s ugly.

Is there such a thing as too long of a line? I&apos;ve said in jest, &quot;no line of code ever written is too long for webkit&quot;... but really :)

&gt; &gt; WebCore/platform/network/ResourceHandle.cpp:214
&gt; &gt; +        blobData-&gt;appendData(CString(data.data(), data.size())); // FIXME: Don&apos;t copy the data.
&gt; 
&gt; Woah, that&apos;s a big memcpy.  This change is already huge, but please follow up and fix this!!!

I know. That class has no good way to pass ownership of Vector full of data just yet. I think Jian is working on that.

&gt; &gt; WebCore/platform/network/ResourceRequestBase.h:228
&gt; &gt; +        bool m_downloadAsBlob;
&gt; 
&gt; There&apos;s a general problem that we can&apos;t add members to ResourceRequestBase that can&apos;t be represented in an NSURLRequest (or something like that).  I&apos;m not sure if this issue has been resolved.  We should check with some Apple folks.

Hmmmm, that would be bad? I&apos;ll cc ap.

&gt; &gt; WebCore/platform/network/chromium/ResourceRequest.h:89
&gt; &gt; +        bool downloadToFile() const { return downloadAsBlob(); }
&gt; &gt; +        void setDownloadToFile(bool download) { setDownloadAsBlob(download); }
&gt; 
&gt; Why are we switching names from &quot;AsBlob&quot; to &quot;ToFile&quot; ?

For chrome, I&apos;m implementing this in terms of it&apos;s &quot;downloadToFile&quot; capability (for now).


&gt; &gt; WebKit/chromium/src/ResourceHandle.cpp:247
&gt; &gt; +String ResourceHandleInternal::determineContentType(const ResourceResponse&amp; response)
&gt; &gt; +{
&gt; &gt; +    if (response.isHTTP())
&gt; &gt; +        return extractMIMETypeFromMediaType(response.httpHeaderField(&quot;Content-Type&quot;));
&gt; &gt; +    return response.mimeType();
&gt; &gt; +}
&gt; 
&gt; Why is this implemented here instead of as a member of ResourceResponse?

Good idea, I&apos;ll make a method on ResourceResponseBase for this.

&gt; &gt; WebKit/chromium/src/ResourceHandle.cpp:266
&gt; &gt; +    long long lengthOut = 7777;
&gt; 
&gt; 7777?

No special significance other than it&apos;s not evil :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290726</commentid>
    <comment_count>25</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-10-06 17:44:53 -0700</bug_when>
    <thetext>ap, can you take a look at the question directed to &quot;Apple folks&quot; in the previous comment?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290728</commentid>
    <comment_count>26</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-06 17:50:05 -0700</bug_when>
    <thetext>&gt; &gt; &gt; WebCore/loader/ResourceLoader.cpp:286
&gt; &gt; &gt; +void ResourceLoader::didFinishLoadingBlob(double finishTime, PassRefPtr&lt;Blob&gt;)
&gt; &gt; 
&gt; &gt; It seems strange to use a PassRefPtr and then to ignore the argument.  Did you mean to pass a Blob* ?
&gt; 
&gt; The only reason I&apos;m using a PassRefPtr is that I thought webcore didn&apos;t like passing raw ptrs around. Switching to raw ptrs would be fine by me, nothing hidden and unexpected going on under the covers!

Oh, raw pointers are fine.  PassRefPtr is used when passing ownership of a RefCounted object.  If you haven&apos;t read this document, you might enjoy reading it:

http://webkit.org/coding/RefPtr.html

&gt; &gt; &gt; WebCore/loader/WorkerThreadableLoader.h:137
&gt; &gt; &gt; +            // Only to be used on the main thread.
&gt; &gt; 
&gt; &gt; This comment doesn&apos;t match the one above.  Is that an intentional difference?
&gt; 
&gt; No secret meanings. There are several similar comments phrased differently, this phrasing matches at least one of them. I&apos;ll make them all match.

Great.  That will make our lives easier in the future.

&gt; &gt; We need tests for this code.
&gt; 
&gt; This won&apos;t function in any port just yet. Is there any precedence to adding layout tests that aren&apos;t run yet? Any convention for how to do so? Maybe by naming them, foo_test.html.notyet?

Ideally, we land things in testable chunks.  Why doesn&apos;t this work in the Mac port?  It looks like ResourceHandle deals with creating the blob in that case.

&gt; &gt; &gt; WebCore/platform/network/ResourceHandle.cpp:196
&gt; &gt; &gt; +PassRefPtr&lt;Blob&gt; ResourceHandle::loadResourceSynchronouslyAsBlob(
&gt; &gt; &gt; +                                               NetworkingContext* context,
&gt; &gt; &gt; +                                               const ResourceRequest&amp; request,
&gt; &gt; &gt; +                                               StoredCredentials storedCredentials,
&gt; &gt; &gt; +                                               ResourceError&amp; error,
&gt; &gt; &gt; +                                               ResourceResponse&amp; response)
&gt; &gt; 
&gt; &gt; This all goes on one line.  Yes, it&apos;s ugly.
&gt; 
&gt; Is there such a thing as too long of a line? I&apos;ve said in jest, &quot;no line of code ever written is too long for webkit&quot;... but really :)

:)

It&apos;s rare that we&apos;ll break function declarations over lines.  We&apos;ll break if-conditionals if the condition gets complicated.

&gt; &gt; &gt; WebCore/platform/network/ResourceHandle.cpp:214
&gt; &gt; &gt; +        blobData-&gt;appendData(CString(data.data(), data.size())); // FIXME: Don&apos;t copy the data.
&gt; &gt; 
&gt; &gt; Woah, that&apos;s a big memcpy.  This change is already huge, but please follow up and fix this!!!
&gt; 
&gt; I know. That class has no good way to pass ownership of Vector full of data just yet. I think Jian is working on that.

This is an example of technical debt.  We prefer not to incur these debts because its hard to get folks to pay them off.  If we land this patch, we should feel obligated to fix it soon.

&gt; &gt; &gt; WebCore/platform/network/chromium/ResourceRequest.h:89
&gt; &gt; &gt; +        bool downloadToFile() const { return downloadAsBlob(); }
&gt; &gt; &gt; +        void setDownloadToFile(bool download) { setDownloadAsBlob(download); }
&gt; &gt; 
&gt; &gt; Why are we switching names from &quot;AsBlob&quot; to &quot;ToFile&quot; ?
&gt; 
&gt; For chrome, I&apos;m implementing this in terms of it&apos;s &quot;downloadToFile&quot; capability (for now).

I&apos;m not sure what that means.

&gt; &gt; &gt; WebKit/chromium/src/ResourceHandle.cpp:266
&gt; &gt; &gt; +    long long lengthOut = 7777;
&gt; &gt; 
&gt; &gt; 7777?
&gt; 
&gt; No special significance other than it&apos;s not evil :)

I don&apos;t follow.  Would zero or uninitialized be better?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290791</commentid>
    <comment_count>27</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-10-06 21:48:04 -0700</bug_when>
    <thetext>&gt; Oh, raw pointers are fine.  PassRefPtr is used when passing ownership of a RefCounted object.  If you haven&apos;t read this document, you might enjoy reading it:
&gt; 
&gt; http://webkit.org/coding/RefPtr.html

Great, i&apos;ll switch to raw ptrs for this.

&gt; &gt; This won&apos;t function in any port just yet. Is there any precedence to adding layout tests that aren&apos;t run yet? Any convention for how to do so? Maybe by naming them, foo_test.html.notyet?
&gt; 
&gt; Ideally, we land things in testable chunks.  Why doesn&apos;t this work in the Mac port?  It looks like ResourceHandle deals with creating the blob in that case.

See comment #14. It&apos;s not handled in the async case, see the FIXME comment in network/ResourceHandle::create(). I should probably remove the loadResourceSynchronouslyAsBlob method body and replace it with a &quot;FIXME: Implement me&quot; for this plumbing oriented patch. And then provide impls for the sync and async cases together along with tests in a seperate patch.

&gt; This is an example of technical debt.  We prefer not to incur these debts because its hard to get folks to pay them off.  If we land this patch, we should feel obligated to fix it soon.

I hear you. I&apos;ve been calling for &quot;please don&apos;t copy the blob data&quot; in all patches that i can see. There&apos;s no way to pass ownership of a vector to the CString instance in the BlobData. CString is probably not the best choice for BlobData, but that&apos;s how it is right now, and this patch really isn&apos;t about fixing that. I think fixing that is on Jian&apos;s radar, he has a patch out for review that&apos;s a step in the right direction.

&gt; &gt; No special significance other than it&apos;s not evil :)
&gt; 
&gt; I don&apos;t follow.  Would zero or uninitialized be better?

Zero is fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290811</commentid>
    <comment_count>28</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-06 22:39:18 -0700</bug_when>
    <thetext>&gt; &gt; This is an example of technical debt.  We prefer not to incur these debts because its hard to get folks to pay them off.  If we land this patch, we should feel obligated to fix it soon.
&gt; 
&gt; I hear you. I&apos;ve been calling for &quot;please don&apos;t copy the blob data&quot; in all patches that i can see. There&apos;s no way to pass ownership of a vector to the CString instance in the BlobData. CString is probably not the best choice for BlobData, but that&apos;s how it is right now, and this patch really isn&apos;t about fixing that. I think fixing that is on Jian&apos;s radar, he has a patch out for review that&apos;s a step in the right direction.

That doesn&apos;t sound like an offer to pay the debt.  Maybe we should wait for that work to complete before landing this part of the patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290829</commentid>
    <comment_count>29</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-10-06 23:32:02 -0700</bug_when>
    <thetext>&gt; There&apos;s a general problem that we can&apos;t add members to ResourceRequestBase that can&apos;t be represented in an NSURLRequest (or something like that).  I&apos;m not sure if this issue has been resolved.

I think that Chromium developers were adding members to it regardless, which is only OK as long as no one is ever going to enable the features they add, or doesn&apos;t care whether they work correctly.

Why is downloading being added to ResourceHandle? I think that this is wrong. It seems that a lot of functionality was added to ResourceHandle not because it was a good idea, but because this used to be the only approachable part of the loader system. With recent developments, it is already no longer approachable or maintainable. This needs to stop, and to be undone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291081</commentid>
    <comment_count>30</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-07 10:02:53 -0700</bug_when>
    <thetext>&gt; I think that Chromium developers were adding members to it regardless, which is only OK as long as no one is ever going to enable the features they add, or doesn&apos;t care whether they work correctly.

Presumably they both want to enable the features and they care whether they work correctly.  That leads me to conclude that it&apos;s not ok.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291225</commentid>
    <comment_count>31</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-10-07 13:35:11 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; &gt; &gt; This is an example of technical debt.  We prefer not to incur these debts because its hard to get folks to pay them off.  If we land this patch, we should feel obligated to fix it soon.
&gt; &gt; 
&gt; &gt; I hear you. I&apos;ve been calling for &quot;please don&apos;t copy the blob data&quot; in all patches that i can see. There&apos;s no way to pass ownership of a vector to the CString instance in the BlobData. CString is probably not the best choice for BlobData, but that&apos;s how it is right now, and this patch really isn&apos;t about fixing that. I think fixing that is on Jian&apos;s radar, he has a patch out for review that&apos;s a step in the right direction.
&gt; 
&gt; That doesn&apos;t sound like an offer to pay the debt.  Maybe we should wait for that work to complete before landing this part of the patch?

There is a patch out for review that pays this debt.
https://bugs.webkit.org/show_bug.cgi?id=45909
Notice the new BlobDataItem ctor that takes a PassOwnPtr&lt;Vector&lt;char&gt; &gt;.

I&apos;ll remove the impl of this sync method body for now and follow up with a later patch that
* makes use of that ctor
* provides a common code impl for the sync and async cases


(In reply to comment #29)
&gt; &gt; There&apos;s a general problem that we can&apos;t add members to ResourceRequestBase that can&apos;t be represented in an NSURLRequest (or something like that).  I&apos;m not sure if this issue has been resolved.
&gt; 
&gt; I think that Chromium developers were adding members to it regardless, which is only OK as long as no one is ever going to enable the features they add, or doesn&apos;t care whether they work correctly.
&gt; 
&gt; Why is downloading being added to ResourceHandle? I think that this is wrong. It seems that a lot of functionality was added to ResourceHandle not because it was a good idea, but because this used to be the only approachable part of the loader system. With recent developments, it is already no longer approachable or maintainable. This needs to stop, and to be undone.

ap, this is the first i&apos;ve heard of this constraint. What is the issue with adding data members to ResourceRequestBase that can&apos;t be represented in an NSURLRequest? Afaict the the value of that data member set in XHR makes to ResourceHandle::start() just fine?

I&apos;m adding this capability to ResourceHandle because its a good place for it in the stack. This is in support of XHR.asBlob/.responseBlob. Conduct a regular XHR, only access the result as a blob. XHR uses ResourceHandle to do the downloading in the usual case, the only difference is we want the response in the form of an opaque handle. Defining this capability as this level makes significant optimizations possible, one example, a blob backed by data managed in the browser&apos;s HTTP cache.


(In reply to comment #30)
&gt; &gt; I think that Chromium developers were adding members to it regardless, which is only OK as long as no one is ever going to enable the features they add, or doesn&apos;t care whether they work correctly.
&gt; 
&gt; Presumably they both want to enable the features and they care whether they work correctly.  That leads me to conclude that it&apos;s not ok.  :)

What is the correctness issue? What is the source of the constraint that fields can&apos;t be added to ResourceRequestBase?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291237</commentid>
    <comment_count>32</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-07 14:01:47 -0700</bug_when>
    <thetext>&gt; &gt; That doesn&apos;t sound like an offer to pay the debt.  Maybe we should wait for that work to complete before landing this part of the patch?
&gt; 
&gt; There is a patch out for review that pays this debt.
&gt; https://bugs.webkit.org/show_bug.cgi?id=45909
&gt; Notice the new BlobDataItem ctor that takes a PassOwnPtr&lt;Vector&lt;char&gt; &gt;.
&gt; 
&gt; I&apos;ll remove the impl of this sync method body for now and follow up with a later patch that
&gt; * makes use of that ctor
&gt; * provides a common code impl for the sync and async cases

Great.

&gt; &gt; &gt; I think that Chromium developers were adding members to it regardless, which is only OK as long as no one is ever going to enable the features they add, or doesn&apos;t care whether they work correctly.
&gt; &gt; 
&gt; &gt; Presumably they both want to enable the features and they care whether they work correctly.  That leads me to conclude that it&apos;s not ok.  :)
&gt; 
&gt; What is the correctness issue? What is the source of the constraint that fields can&apos;t be added to ResourceRequestBase?

My understanding is that the Mac port converts ResourceHandles into NSURLRequests, bounces them around for a while, then converts them back to ResourceHandles.  The semantics for a bunch of the client APIs is that &quot;we hand you a ResourceHandle object and you give us back a completely different object than we&apos;ll then use.&quot;

I&apos;m not sure whether all the bouncing around is contained within WebKit or whether the Mac port hands these NSURLRequests off to the embedder.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291244</commentid>
    <comment_count>33</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-10-07 14:06:51 -0700</bug_when>
    <thetext>&gt; I&apos;m not sure whether all the bouncing around is contained within WebKit or whether the Mac port hands these NSURLRequests off to the embedder.

They are sent to the embedder. I don&apos;t think that we overwrite NSURLRequests inside WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291247</commentid>
    <comment_count>34</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-10-07 14:11:11 -0700</bug_when>
    <thetext>&gt; I&apos;m adding this capability to ResourceHandle because its a good place for it in the stack. This is in support of XHR.asBlob/.responseBlob.

This was discussed on webkit-dev a few weeks ago. I&apos;m saying that blob support shouldn&apos;t be in ResourceHandle either. See &lt;http://www.mail-archive.com/webkit-dev@lists.webkit.org/msg12820.html&gt; - we didn&apos;t reach agreement then, and without such agreement, I think that it&apos;s unadvisable to put more responsibilities upon ResourceHandle.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291259</commentid>
    <comment_count>35</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-07 14:26:03 -0700</bug_when>
    <thetext>(In reply to comment #34)
&gt; &gt; I&apos;m adding this capability to ResourceHandle because its a good place for it in the stack. This is in support of XHR.asBlob/.responseBlob.
&gt; 
&gt; This was discussed on webkit-dev a few weeks ago. I&apos;m saying that blob support shouldn&apos;t be in ResourceHandle either. See &lt;http://www.mail-archive.com/webkit-dev@lists.webkit.org/msg12820.html&gt; - we didn&apos;t reach agreement then, and without such agreement, I think that it&apos;s unadvisable to put more responsibilities upon ResourceHandle.

This patch is about something different than that thread.  That thread was about resolving blob URLs.  This patch is about requesting normal URL (like http URLs), but asking for the data to be returned in the form of a blob.

There seem to be two choices for how to do this:

1) Every API that wants to expose data as a blob (in this case XMLHttpRequest) first requests that data as bytes and then stuffs those bytes into a blob.

2) We add the ability for the network stack to return responses as blobs and plumb the blob responses back through the loading system.

In principle, we could restructure the loading system to always return responses as blob, since a blob is strictly more general than a sequence of bytes, but given that most callers want a sequence of bytes, that might not be the best path forward.

The advantage of (2) is that when you&apos;re requesting something that&apos;s already on disk (e.g., in the HTTP cache), you don&apos;t have to actually read the bytes off disk until later.  In some cases, you can avoid ever reading the bytes off disk if, for example, the web site shoves the blob into a persistent storage API that accepts blobs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291413</commentid>
    <comment_count>36</comment_count>
      <attachid>70195</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-10-07 19:49:29 -0700</bug_when>
    <thetext>Created attachment 70195
downloadAsBlob

New patch that addresses adam&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291414</commentid>
    <comment_count>37</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-07 19:51:35 -0700</bug_when>
    <thetext>Attachment 70195 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/platform/network/ResourceHandle.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 34 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>291420</commentid>
    <comment_count>38</comment_count>
      <attachid>70198</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-10-07 20:12:02 -0700</bug_when>
    <thetext>Created attachment 70198
downloadAsBlob

fix include order</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291423</commentid>
    <comment_count>39</comment_count>
      <attachid>70198</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-10-07 20:19:30 -0700</bug_when>
    <thetext>Comment on attachment 70198
downloadAsBlob

r- per comment 34.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291427</commentid>
    <comment_count>40</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-07 20:37:37 -0700</bug_when>
    <thetext>&gt; r- per comment 34.

Did you have thoughts re: comment 35?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291434</commentid>
    <comment_count>41</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-10-07 21:25:20 -0700</bug_when>
    <thetext>OK. I wasn&apos;t sure if this bug was a good place for such discussion, but I don&apos;t really have a better suggestion for the place. We already tried webkit-dev.

I&apos;d say that the webkit-dev discussion was more general, even though it started from discussing the code for requesting blob URLs. At least my comments from it all apply - I prefer to have a class that encapsulates platform specific loader libraries, giving them compatible behavior with respect to buffering, authentication and other aspects that are not specific to the Web. Whether it&apos;s called ResourceHandle or something else is not important - but as of a few months ago, ResourceHandle was pretty much such a class. It&apos;s hard enough to get that working, we don&apos;t need any extras to make it harder.

This is similar to how we divided a generic stream implementation and WebSockets code.

Now, we clearly need a layer on top of that for resource loading, standardizing the supported schemes (e.g. data: may or may not be supported by underlying libraries). Such a layer could know more about WebCore internals, possibly even about the blob scheme. Or maybe blob goes even further.

As far as output format is concerned, the existing stream interface seems the most natural for a loading class. It should be easy to write an adaptor converting it into a blob, saving it to a file etc. It doesn&apos;t seem like every caller would need to know much about blobs to use such an adaptor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291435</commentid>
    <comment_count>42</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-10-07 21:26:28 -0700</bug_when>
    <thetext>As a separate note, discussion in the bug seems to expect the reader to know the relationship between downloadAsBlob and downloadAsFile. I don&apos;t know how they are related.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291438</commentid>
    <comment_count>43</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-07 21:35:23 -0700</bug_when>
    <thetext>(In reply to comment #42)
&gt; As a separate note, discussion in the bug seems to expect the reader to know the relationship between downloadAsBlob and downloadAsFile. I don&apos;t know how they are related.

This appears to be specific to the Chromium WebKit API and likely something that will need to be corrected at the API level.

(In reply to comment #41)
&gt; As far as output format is concerned, the existing stream interface seems the most natural for a loading class. It should be easy to write an adaptor converting it into a blob, saving it to a file etc. It doesn&apos;t seem like every caller would need to know much about blobs to use such an adaptor.

That precludes optimizations that avoid actually reading the bytes off disk because the bytes are forced to flow through this class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291738</commentid>
    <comment_count>44</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-10-08 10:15:38 -0700</bug_when>
    <thetext>&gt; That precludes optimizations that avoid actually reading the bytes off disk because the bytes are forced to flow through this class.

Well, the bytes are in memory when loaded from network, and they are in memory when someone uses them. There don&apos;t seem to be a lot of operations that can be performed without touching memory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291752</commentid>
    <comment_count>45</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-08 10:33:04 -0700</bug_when>
    <thetext>(In reply to comment #44)
&gt; &gt; That precludes optimizations that avoid actually reading the bytes off disk because the bytes are forced to flow through this class.
&gt; 
&gt; Well, the bytes are in memory when loaded from network, and they are in memory when someone uses them. There don&apos;t seem to be a lot of operations that can be performed without touching memory.

They&apos;re not necessarily in memory if the resource already resides in the disk cache, for example.  Also, in a multiprocess architecture, the bytes might reside in memory in one process but not in another.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291757</commentid>
    <comment_count>46</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-10-08 10:45:23 -0700</bug_when>
    <thetext>&gt; They&apos;re not necessarily in memory if the resource already resides in the disk cache, for example.

Well, but if they are being loaded from the disk cache, that&apos;s presumably for a purpose, and that usually means that they need to be loaded to memory.

&gt; Also, in a multiprocess architecture, the bytes might reside in memory in one process but not in another.

Yes, a multi-process implementation that does loading in a different process clearly needs a better split line than ResourceHandle. Passing a file handle may make sense there.

Trying to avoid larger refactoring by overloading the purpose of ResourceHandle is the root of many disputes that we have.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291769</commentid>
    <comment_count>47</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-08 11:18:53 -0700</bug_when>
    <thetext>(In reply to comment #46)
&gt; &gt; They&apos;re not necessarily in memory if the resource already resides in the disk cache, for example.
&gt; 
&gt; Well, but if they are being loaded from the disk cache, that&apos;s presumably for a purpose, and that usually means that they need to be loaded to memory.

Not necessarily.  For example, suppose the web site wants to stick the blob in FileSystem.

&gt; &gt; Also, in a multiprocess architecture, the bytes might reside in memory in one process but not in another.
&gt; 
&gt; Yes, a multi-process implementation that does loading in a different process clearly needs a better split line than ResourceHandle. Passing a file handle may make sense there.

I&apos;m not sure I understand.  A blob is the web platform equivalent of a file handle.  I agree that it makes sense to ask the network stack for a handle to the resource as opposed to the resource itself, which is what this patch lets you do.

&gt; Trying to avoid larger refactoring by overloading the purpose of ResourceHandle is the root of many disputes that we have.

We = ?

What larger refactoring did you have in mind?  The advantage of retrieving a blob from the network stack is that you get a handle to the resource instead of the resource itself.  That seems very much in line with what ResourceHandle is all about.

As I wrote above, it would actually make sense for resource handle to always return a blob.  Currently, however, most clients would just immediately dereference the blob and grab the bytes.  In ports with network stacks that don&apos;t understand blobs, that would result in two extra copies (in and out of the blob), which seems undesirable.

Given these constraints, having an option for ResourceHandle to return a handle to the resource in the form of a blob seems to make the most sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291823</commentid>
    <comment_count>48</comment_count>
      <attachid>70198</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-10-08 12:59:46 -0700</bug_when>
    <thetext>Comment on attachment 70198
downloadAsBlob

Resetting r? to get the try bots to run.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291850</commentid>
    <comment_count>49</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2010-10-08 14:07:01 -0700</bug_when>
    <thetext>(In reply to comment #47)
&gt; 
&gt; What larger refactoring did you have in mind?  The advantage of retrieving a blob from the network stack is that you get a handle to the resource instead of the resource itself.  That seems very much in line with what ResourceHandle is all about.
&gt; 
&gt; As I wrote above, it would actually make sense for resource handle to always return a blob.  Currently, however, most clients would just immediately dereference the blob and grab the bytes.  In ports with network stacks that don&apos;t understand blobs, that would result in two extra copies (in and out of the blob), which seems undesirable.
&gt; 
&gt; Given these constraints, having an option for ResourceHandle to return a handle to the resource in the form of a blob seems to make the most sense.

The class &quot;Blob&quot; is a class that is part of the Web platform API, to the point of having its own IDL file. ResourceHandle is supposed to be ignorant of the details of DOM APIs. Making ResourceHandle use Blob directly is a layering violation. If there needs to be a lower-level concept of &quot;file handle&quot; that can live at the Platform layer, that is fine, but making code in the platform/ directory depend on Blob breaks the intended layering.

BlobResourceHandle is also a layering violation for the same reason, one that I have objected to and would have r-&apos;d if I had seen it before it landed. I do not think we should go further in this direction.

I agree with Alexey that there should be separate classes that perform the roles of &quot;wrapping the underlying network library to make the interface uniform&quot; and &quot;do everything needed for resource loading in the browser context, including features that are not part of the network library&quot;. It used to be the intent that these classes are ResouceHandle and ResourceLoader respectively.

We seem to be increasingly moving towards a place where there is *no* clear separatation of responsibilities between ResourceLoader and ResourceHandle. If ResourceHandle manipulates DOM objects, then what possible standard could you use to decide what functionality should go in ResourceHandle instead of ResourceLoader?

It seems the root of this trend is the fact that it&apos;s easier for Chromium to proxy things cross-process exclusively at the ResourceHandle layer, therefore functionality gets pushed there that is not solely about abstracting the platform network library. But the result of that is that platform-specific code that is all about wrapping the network library is mixed in a fairly arbitrary way with cross-platform functionality that could be on top of the low-level interface.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291853</commentid>
    <comment_count>50</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-08 14:17:58 -0700</bug_when>
    <thetext>I agree that using a FileHandle abstraction in platform is a better design.  I also agree that BlobResourceHandle is not the right design.

IMHO, we could probably change ResourceHandle to always return a FileHandle without incurring a performance penalty for network libraries that always sequences of bytes.  We&apos;d just have to teach FileHandle how to deal with external memory.

That would make ResourceHandle&apos;s job to translate from a Resource (i.e., a URL) to its representation (i.e., a sequence of bytes).  In the same way ResourceHandle is an indirect reference to a Resource.  FileHandle is an indirect reference to a sequence of bytes.  You can either get the bytes directly (like ResourceHandle gives you today) or deal with the handle.  If you keep things as a handle, you might be able to avoid ever need to materialize the bytes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291862</commentid>
    <comment_count>51</comment_count>
      <attachid>70287</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-10-08 14:30:54 -0700</bug_when>
    <thetext>Created attachment 70287
downloadAsBlob

New patch that allows the additional ResourceRequestBase data member to survivce the lossy call out to the embedder via willSendRequest(). Seems like a bug in the WebKit layer that this kind of loss occurs.

I&apos;m not looking to put this here simply as a matter of convenience. This particular functionality seems to belong here for all the reasons Adam has articulated.

About the dependency on class Blob, which happens to have script bindings as well as being a primitive object. I think this is a minor issue. When working up this patch, I had in mind that Blob was actually defined in the platform layer (ooops). It is a rather primitive class.
* Perhaps it should be moved.
* In time, the Blob infrastructe could be refactored such that there is a BlobInternal vs Blob (scriptable) with the &apos;internal&apos; class being defined in the platform layer.

About the &apos;adapter&apos; being simple (ap&apos;s comments). Yes I have in mind to build support for such an adpater into ResourceHandle.cpp directly. It&apos;s a simple ResourceHandleClientWrapper.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291866</commentid>
    <comment_count>52</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2010-10-08 14:33:37 -0700</bug_when>
    <thetext>(In reply to comment #50)
&gt; I agree that using a FileHandle abstraction in platform is a better design.  I also agree that BlobResourceHandle is not the right design.
&gt; 
&gt; IMHO, we could probably change ResourceHandle to always return a FileHandle without incurring a performance penalty for network libraries that always sequences of bytes.  We&apos;d just have to teach FileHandle how to deal with external memory.
&gt; 
&gt; That would make ResourceHandle&apos;s job to translate from a Resource (i.e., a URL) to its representation (i.e., a sequence of bytes).  In the same way ResourceHandle is an indirect reference to a Resource.  FileHandle is an indirect reference to a sequence of bytes.  You can either get the bytes directly (like ResourceHandle gives you today) or deal with the handle.  If you keep things as a handle, you might be able to avoid ever need to materialize the bytes.

That sounds like a plausible design. Though thinking about it, I am not sure FileHandle is the right name, if in some cases it may represent bytes in memory rather than an actual file on disk.

It also seems to me that clients tend to know up front if they will want immediate access to the data (as currently provided by the ResourceHandle API) or if it&apos;s sufficient to have a handle that allows potentially-async access to the data (as in the Blob case). Not sure we can make both convenient and efficient with the same API for both use cases - clients may have to state their intent and get data in different forms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291870</commentid>
    <comment_count>53</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2010-10-08 14:36:10 -0700</bug_when>
    <thetext>(In reply to comment #51)
&gt; Created an attachment (id=70287) [details]
&gt; downloadAsBlob
&gt; 
&gt; New patch that allows the additional ResourceRequestBase data member to survivce the lossy call out to the embedder via willSendRequest(). Seems like a bug in the WebKit layer that this kind of loss occurs.
&gt; 
&gt; I&apos;m not looking to put this here simply as a matter of convenience. This particular functionality seems to belong here for all the reasons Adam has articulated.
&gt; 
&gt; About the dependency on class Blob, which happens to have script bindings as well as being a primitive object. I think this is a minor issue. When working up this patch, I had in mind that Blob was actually defined in the platform layer (ooops). It is a rather primitive class.
&gt; * Perhaps it should be moved.
&gt; * In time, the Blob infrastructe could be refactored such that there is a BlobInternal vs Blob (scriptable) with the &apos;internal&apos; class being defined in the platform layer.
&gt; 

I don&apos;t think it&apos;s a minor issue. It is a significant layering violation, and compounds a trend towards more of this kind of layering violation in the ResourceHandle class. It seems that Adam and Alexey agree, as of their latest comments, that ResourceHandle depending on Blob is not the best design. I think you should address this point of review feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291875</commentid>
    <comment_count>54</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-08 14:38:36 -0700</bug_when>
    <thetext>&gt; That sounds like a plausible design. Though thinking about it, I am not sure FileHandle is the right name, if in some cases it may represent bytes in memory rather than an actual file on disk.

Indeed.  Perhaps ResourceRepresentationHandle would be the pedantically correct name w.r.t. the web architecture.

&gt; It also seems to me that clients tend to know up front if they will want immediate access to the data (as currently provided by the ResourceHandle API) or if it&apos;s sufficient to have a handle that allows potentially-async access to the data (as in the Blob case). Not sure we can make both convenient and efficient with the same API for both use cases - clients may have to state their intent and get data in different forms.

The approach Micheal has in his patch is that the client says upfront which they&apos;d prefer, and they get back a different type of object depending on what the asked for.  Another approach is a flag on the ResourceRequest that hints whether the client wants synchronous access.  The client would then get back the same type of object, but it would optimize performance in one case or the other depending on the hint.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291885</commentid>
    <comment_count>55</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-10-08 14:49:49 -0700</bug_when>
    <thetext>(In reply to comment #53)
&gt; I don&apos;t think it&apos;s a minor issue. It is a significant layering violation, and compounds a trend towards more of this kind of layering violation in the ResourceHandle class. It seems that Adam and Alexey agree, as of their latest comments, that ResourceHandle depending on Blob is not the best design. I think you should address this point of review feedback.

I think we&apos;re all saying something similar. Replace my use of &quot;BlobInternal&quot; with adam&apos;s use of &quot;FileHandle&quot; in what i said.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291886</commentid>
    <comment_count>56</comment_count>
      <attachid>70287</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-08 14:53:33 -0700</bug_when>
    <thetext>Comment on attachment 70287
downloadAsBlob

Maciej is saying he&apos;d prefer the patch not to incur a technical debt that needs to be paid off later.  Instead, we should land the dependencies in the proper order so that each patch is correctly layered / architected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291908</commentid>
    <comment_count>57</comment_count>
      <attachid>70301</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-10-08 15:31:23 -0700</bug_when>
    <thetext>Created attachment 70301
downloadAsBlob

synced and merged, i just want to see the try bot results</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291913</commentid>
    <comment_count>58</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-10-08 15:38:06 -0700</bug_when>
    <thetext>(In reply to comment #32)
&gt; &gt; &gt; That doesn&apos;t sound like an offer to pay the debt.  Maybe we should wait for that work to complete before landing this part of the patch?
&gt; &gt; 
&gt; &gt; There is a patch out for review that pays this debt.
&gt; &gt; https://bugs.webkit.org/show_bug.cgi?id=45909
&gt; &gt; Notice the new BlobDataItem ctor that takes a PassOwnPtr&lt;Vector&lt;char&gt; &gt;.
&gt; &gt; 
&gt; &gt; I&apos;ll remove the impl of this sync method body for now and follow up with a later patch that
&gt; &gt; * makes use of that ctor
&gt; &gt; * provides a common code impl for the sync and async cases
&gt; 
&gt; Great.

Oh... i had linked to the wrong patch.
https://bugs.webkit.org/show_bug.cgi?id=46543</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291985</commentid>
    <comment_count>59</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-10-08 17:44:59 -0700</bug_when>
    <thetext>So... what i&apos;m hearing in this thread is that.

* we agree in principle that ResourceHandle should have a means of providing an opaque handle to the response data

* the caller should have a means of expressing they would like the response in that form

* that opaque handle can be handed off to a blob

So i&apos;ll count that as progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291997</commentid>
    <comment_count>60</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-08 18:15:36 -0700</bug_when>
    <thetext>Attachment 70301 did not build on chromium:
Build output: http://queues.webkit.org/results/4283004</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292347</commentid>
    <comment_count>61</comment_count>
      <attachid>70301</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-10-10 12:28:28 -0700</bug_when>
    <thetext>Comment on attachment 70301
downloadAsBlob

R- per the discussion above.  We&apos;ll need some sort of platform-layer abstraction for a handle to a resource representation before landing this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293781</commentid>
    <comment_count>62</comment_count>
      <attachid>65667</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-10-13 15:52:02 -0700</bug_when>
    <thetext>Comment on attachment 65667
downloadToFile

Cleared Darin Fisher&apos;s review+ from obsolete attachment 65667 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516257</commentid>
    <comment_count>63</comment_count>
    <who name="Jarred Nicholls">jarred</who>
    <bug_when>2011-12-06 14:32:39 -0800</bug_when>
    <thetext>Any updates to this?  I&apos;m volunteering...</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65625</attachid>
            <date>2010-08-26 15:09:23 -0700</date>
            <delta_ts>2010-08-26 15:34:36 -0700</delta_ts>
            <desc>downloadToFile</desc>
            <filename>downloadToFile.1.txt</filename>
            <type>text/plain</type>
            <size>21725</size>
            <attacher name="Michael Nordman">michaeln</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjEzOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDQgQEAKKzIwMTAtMDgtMjYgIE1pY2hhZWwgTm9yZG1hbiAgPG1pY2hhZWxuQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTmVlZCBhIHNob3J0IGRlc2NyaXB0aW9uIGFuZCBidWcgVVJMIChPT1BTISkKKworICAgICAg
ICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAgICAqIGxvYWRlci9Eb2N1bWVudFRocmVh
ZGFibGVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9h
ZGVyOjpkaWRSZWNlaXZlRmlsZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJl
YWRhYmxlTG9hZGVyOjpsb2FkUmVxdWVzdCk6CisgICAgICAgICogbG9hZGVyL0RvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlci5oOgorICAgICAgICAqIGxvYWRlci9TdWJyZXNvdXJjZUxvYWRlckNsaWVu
dC5oOgorICAgICAgICAoV2ViQ29yZTo6U3VicmVzb3VyY2VMb2FkZXJDbGllbnQ6OmRpZFJlY2Vp
dmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlN1YnJlc291cmNlTG9hZGVyQ2xpZW50OjpkaWRS
ZWNlaXZlRmlsZURhdGEpOgorICAgICAgICAqIGxvYWRlci9UaHJlYWRhYmxlTG9hZGVyQ2xpZW50
Lmg6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlTG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZl
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlTG9hZGVyQ2xpZW50OjpkaWRGYWls
UmVkaXJlY3RDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlTG9hZGVyQ2xpZW50
OjpkaWRSZWNlaXZlRmlsZURhdGEpOgorICAgICAgICAqIGxvYWRlci9UaHJlYWRhYmxlTG9hZGVy
Q2xpZW50V3JhcHBlci5oOgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFkYWJsZUxvYWRlckNsaWVu
dFdyYXBwZXI6OmRpZFJlY2VpdmVGaWxlRGF0YSk6CisgICAgICAgICogbG9hZGVyL1dvcmtlclRo
cmVhZGFibGVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d29ya2VyQ29udGV4dERpZFJl
Y2VpdmVGaWxlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlTG9hZGVy
OjpNYWluVGhyZWFkQnJpZGdlOjpkaWRSZWNlaXZlRmlsZURhdGEpOgorICAgICAgICAqIGxvYWRl
ci9Xb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZVJlcXVlc3RCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dEJhc2U6OmFkb3B0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OmNv
cHlEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmVxdWFsSWdub3JpbmdIZWFkZXJGaWVsZHMpOgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6ZG93bmxvYWRUb0ZpbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6c2V0RG93bmxvYWRUb0ZpbGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZSk6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6YWRvcHQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OmNvcHlEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpkb3dubG9hZEZpbGVQYXRoKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpzZXREb3dubG9hZEZpbGVQYXRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjpjb21wYXJlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmg6CisKIDIwMTAtMDgtMjYgIFNh
bSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBB
ZGxlci4KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNw
cAkocmV2aXNpb24gNjYxMzkpCisrKyBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVM
b2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjgsNiArMjI4LDIwIEBAIHZvaWQgRG9jdW1l
bnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRSZWNlaXYKICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZURh
dGEoZGF0YSwgbGVuZ3RoUmVjZWl2ZWQpOwogfQogCisjaWYgRU5BQkxFKFhIUl9SRVNQT05TRV9C
TE9CKQordm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZFJlY2VpdmVGaWxlRGF0YShT
dWJyZXNvdXJjZUxvYWRlciogbG9hZGVyLCBpbnQgbGVuZ3RoUmVjZWl2ZWQpCit7CisgICAgQVNT
RVJUKG1fY2xpZW50KTsKKyAgICBBU1NFUlRfVU5VU0VEKGxvYWRlciwgbG9hZGVyID09IG1fbG9h
ZGVyKTsKKworICAgIC8vIElnbm9yZSByZXNwb25zZSBib2R5IG9mIHByZWZsaWdodCByZXF1ZXN0
cy4KKyAgICBpZiAobV9hY3R1YWxSZXF1ZXN0KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2Ns
aWVudC0+ZGlkUmVjZWl2ZUZpbGVEYXRhKGxlbmd0aFJlY2VpdmVkKTsKK30KKyNlbmRpZgorCiB2
b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyhTdWJyZXNvdXJj
ZUxvYWRlciogbG9hZGVyKQogewogICAgIEFTU0VSVChsb2FkZXIgPT0gbV9sb2FkZXIpOwpAQCAt
MzUwLDkgKzM2NCwxNSBAQCB2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlcXVl
CiAKICAgICBkaWRSZWNlaXZlUmVzcG9uc2UoMCwgcmVzcG9uc2UpOwogCi0gICAgY29uc3QgY2hh
ciogYnl0ZXMgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZGF0YS5kYXRhKCkpOwotICAgIGlu
dCBsZW4gPSBzdGF0aWNfY2FzdDxpbnQ+KGRhdGEuc2l6ZSgpKTsKLSAgICBkaWRSZWNlaXZlRGF0
YSgwLCBieXRlcywgbGVuKTsKKyNpZiBFTkFCTEUoWEhSX1JFU1BPTlNFX0JMT0IpCisgICAgaWYg
KCFyZXF1ZXN0LmRvd25sb2FkVG9GaWxlKCkpIHsKKyNlbmRpZgorICAgICAgICBjb25zdCBjaGFy
KiBieXRlcyA9IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihkYXRhLmRhdGEoKSk7CisgICAgICAg
IGludCBsZW4gPSBzdGF0aWNfY2FzdDxpbnQ+KGRhdGEuc2l6ZSgpKTsKKyAgICAgICAgZGlkUmVj
ZWl2ZURhdGEoMCwgYnl0ZXMsIGxlbik7CisjaWYgRU5BQkxFKFhIUl9SRVNQT05TRV9CTE9CKQor
ICAgIH0KKyNlbmRpZgogCiAgICAgZGlkRmluaXNoTG9hZGluZyhpZGVudGlmaWVyKTsKIH0KSW5k
ZXg6IFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oCShyZXZpc2lvbiA2
NjEzOSkKKysrIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Niw2ICs3Niw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
dmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgY2hh
ciosIGludCBsZW5ndGhSZWNlaXZlZCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hM
b2FkaW5nKFN1YnJlc291cmNlTG9hZGVyKik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGYWls
KFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpOworI2lmIEVOQUJMRShY
SFJfUkVTUE9OU0VfQkxPQikKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVGaWxlRGF0
YShTdWJyZXNvdXJjZUxvYWRlciosIGludCAvKmxlbmd0aFJlY2VpdmVkKi8pOworI2VuZGlmCiAK
ICAgICAgICAgdmlydHVhbCBib29sIGdldFNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKFN1YnJl
c291cmNlTG9hZGVyKiwgYm9vbCYgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UpOwogICAgICAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFN1YnJlc291
cmNlTG9hZGVyKiwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKSW5kZXg6IFdlYkNv
cmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXJDbGllbnQuaAkocmV2aXNpb24gNjYxMzkpCisrKyBX
ZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NiwxMSArNDYsMTQgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YShT
dWJyZXNvdXJjZUxvYWRlciosIHVuc2lnbmVkIGxvbmcgbG9uZyAvKmJ5dGVzU2VudCovLCB1bnNp
Z25lZCBsb25nIGxvbmcgLyp0b3RhbEJ5dGVzVG9CZVNlbnQqLykgeyB9CiAKICAgICB2aXJ0dWFs
IHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShTdWJyZXNv
dXJjZUxvYWRlciosIGNvbnN0IGNoYXIqLCBpbnQgLypsZW5ndGhSZWNlaXZlZCovKSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBj
aGFyKiwgaW50IC8qbGVuZ3RoUmVjZWl2ZWQqLykgeyB9IC8vIE5vdCBjYWxsZWQgaWYgcmVxdWVz
dC5kb3dubG9hZFRvRmlsZSBpcyBzZXQuCiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVDYWNo
ZWRNZXRhZGF0YShTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IGNoYXIqLCBpbnQgLypsZW5ndGhS
ZWNlaXZlZCovKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhTdWJyZXNv
dXJjZUxvYWRlciopIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKFN1YnJlc291cmNlTG9h
ZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpIHsgfQotICAgIAorI2lmIEVOQUJMRShYSFJfUkVT
UE9OU0VfQkxPQikKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUZpbGVEYXRhKFN1YnJlc291
cmNlTG9hZGVyKiwgaW50IC8qbGVuZ3RoUmVjZWl2ZWQqLykgeyB9IC8vIE9ubHkgY2FsbGVkIGlm
IHJlcXVlc3QuZG93bmxvYWRUb0ZpbGUgaXMgc2V0LgorI2VuZGlmCisKICAgICB2aXJ0dWFsIGJv
b2wgZ2V0U2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoU3VicmVzb3VyY2VMb2FkZXIqLCBib29s
JiAvKnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKi8pIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
dmlydHVhbCB2b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShTdWJyZXNvdXJj
ZUxvYWRlciosIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikgeyB9CiAgICAgdmlydHVh
bCB2b2lkIHJlY2VpdmVkQ2FuY2VsbGF0aW9uKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UmKSB7IH0KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1RocmVhZGFi
bGVMb2FkZXJDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxl
TG9hZGVyQ2xpZW50LmgJKHJldmlzaW9uIDY2MTM5KQorKysgV2ViQ29yZS9sb2FkZXIvVGhyZWFk
YWJsZUxvYWRlckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMiArNDEsMTQgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkU2VuZERhdGEodW5zaWdu
ZWQgbG9uZyBsb25nIC8qYnl0ZXNTZW50Ki8sIHVuc2lnbmVkIGxvbmcgbG9uZyAvKnRvdGFsQnl0
ZXNUb0JlU2VudCovKSB7IH0KIAogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3Bv
bnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSB7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIGRp
ZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqLCBpbnQgLypsZW5ndGhSZWNlaXZlZCovKSB7IH0KKyAg
ICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqLCBpbnQgLypsZW5n
dGhSZWNlaXZlZCovKSB7IH0gLy8gTm90IGNhbGxlZCB3aGVuIHJlcXVlc3QuZG93bmxvYWRUb0Zp
bGUKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9uZyAv
KmlkZW50aWZpZXIqLykgeyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKGNvbnN0IFJl
c291cmNlRXJyb3ImKSB7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWxSZWRpcmVjdENo
ZWNrKCkgeyB9Ci0KICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlv
bkNhbmNlbGxhdGlvbihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgeyB9CisjaWYgRU5BQkxFKFhI
Ul9SRVNQT05TRV9CTE9CKQorICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUZpbGVEYXRh
KGludCAvKiBsZW5ndGhSZWNlaXZlZCovKSB7IH0gLy8gT25seSBjYWxsZWQgZm9yIHJlcXVlc3Qu
ZG93bmxvYWRUb0ZpbGUKKyNlbmRpZgogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFs
IH5UaHJlYWRhYmxlTG9hZGVyQ2xpZW50KCkgeyB9CkluZGV4OiBXZWJDb3JlL2xvYWRlci9UaHJl
YWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVy
L1RocmVhZGFibGVMb2FkZXJDbGllbnRXcmFwcGVyLmgJKHJldmlzaW9uIDY2MTM5KQorKysgV2Vi
Q29yZS9sb2FkZXIvVGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNzQsNiArNzQsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgICAg
IG1fY2xpZW50LT5kaWRSZWNlaXZlRGF0YShkYXRhLCBsZW5ndGhSZWNlaXZlZCk7CiAgICAgICAg
IH0KIAorI2lmIEVOQUJMRShYSFJfUkVTUE9OU0VfQkxPQikKKyAgICAgICAgdm9pZCBkaWRSZWNl
aXZlRmlsZURhdGEoaW50IGxlbmd0aFJlY2VpdmVkKQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAobV9jbGllbnQpCisgICAgICAgICAgICAgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVGaWxlRGF0
YShsZW5ndGhSZWNlaXZlZCk7CisgICAgICAgIH0KKyNlbmRpZgorCiAgICAgICAgIHZvaWQgZGlk
RmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIG1fZG9uZSA9IHRydWU7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9Xb3JrZXJUaHJlYWRh
YmxlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9Xb3JrZXJUaHJlYWRh
YmxlTG9hZGVyLmNwcAkocmV2aXNpb24gNjYxMzkpCisrKyBXZWJDb3JlL2xvYWRlci9Xb3JrZXJU
aHJlYWRhYmxlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkxLDYgKzE5MSwxNCBAQCBz
dGF0aWMgdm9pZCB3b3JrZXJDb250ZXh0RGlkUmVjZWl2ZURhdGEoCiAgICAgd29ya2VyQ2xpZW50
V3JhcHBlci0+ZGlkUmVjZWl2ZURhdGEodmVjdG9yRGF0YS0+ZGF0YSgpLCB2ZWN0b3JEYXRhLT5z
aXplKCkpOwogfQogCisjaWYgRU5BQkxFKFhIUl9SRVNQT05TRV9CTE9CKQorc3RhdGljIHZvaWQg
d29ya2VyQ29udGV4dERpZFJlY2VpdmVGaWxlRGF0YShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBSZWZQdHI8VGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXI+IHdvcmtlckNsaWVu
dFdyYXBwZXIsIGludCBsZW5ndGhSZWNlaXZlZCkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGNvbnRl
eHQsIGNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKTsKKyAgICB3b3JrZXJDbGllbnRXcmFwcGVy
LT5kaWRSZWNlaXZlRmlsZURhdGEobGVuZ3RoUmVjZWl2ZWQpOworfQorI2VuZGlmCisKIHZvaWQg
V29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEJyaWRnZTo6ZGlkUmVjZWl2ZURhdGEo
Y29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aFJlY2VpdmVkKQogewogICAgIE93blB0cjxWZWN0
b3I8Y2hhcj4gPiB2ZWN0b3IgPSBhZG9wdFB0cihuZXcgVmVjdG9yPGNoYXI+KGxlbmd0aFJlY2Vp
dmVkKSk7IC8vIG5lZWRzIHRvIGJlIGFuIE93blB0ciBmb3IgdXNhZ2Ugd2l0aCBjcmVhdGVDYWxs
YmFja1Rhc2suCkBAIC0xOTgsNiArMjA2LDEzIEBAIHZvaWQgV29ya2VyVGhyZWFkYWJsZUxvYWRl
cjo6TWFpblRocmVhZEIKICAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2Vy
Q29udGV4dChjcmVhdGVDYWxsYmFja1Rhc2soJndvcmtlckNvbnRleHREaWRSZWNlaXZlRGF0YSwg
bV93b3JrZXJDbGllbnRXcmFwcGVyLCB2ZWN0b3IucmVsZWFzZSgpKSwgbV90YXNrTW9kZSk7CiB9
CiAKKyNpZiBFTkFCTEUoWEhSX1JFU1BPTlNFX0JMT0IpCit2b2lkIFdvcmtlclRocmVhZGFibGVM
b2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2U6OmRpZFJlY2VpdmVGaWxlRGF0YShpbnQgbGVuZ3RoUmVj
ZWl2ZWQpCit7CisgICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckNvbnRl
eHQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZ3b3JrZXJDb250ZXh0RGlkUmVjZWl2ZUZpbGVEYXRhLCBt
X3dvcmtlckNsaWVudFdyYXBwZXIsIGxlbmd0aFJlY2VpdmVkKSwgbV90YXNrTW9kZSk7Cit9Cisj
ZW5kaWYKKwogc3RhdGljIHZvaWQgd29ya2VyQ29udGV4dERpZEZpbmlzaExvYWRpbmcoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUmVmUHRyPFRocmVhZGFibGVMb2FkZXJDbGllbnRX
cmFwcGVyPiB3b3JrZXJDbGllbnRXcmFwcGVyLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpCiB7
CiAgICAgQVNTRVJUX1VOVVNFRChjb250ZXh0LCBjb250ZXh0LT5pc1dvcmtlckNvbnRleHQoKSk7
CkluZGV4OiBXZWJDb3JlL2xvYWRlci9Xb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9sb2FkZXIvV29ya2VyVGhyZWFkYWJsZUxvYWRlci5oCShyZXZpc2lvbiA2
NjEzOSkKKysrIFdlYkNvcmUvbG9hZGVyL1dvcmtlclRocmVhZGFibGVMb2FkZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE4LDYgKzExOCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
ICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKICAgICAgICAg
ICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsUmVkaXJlY3RDaGVjaygpOwogICAgICAgICAgICAgdmly
dHVhbCB2b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNhbmNlbGxhdGlvbihjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJik7CisjaWYgRU5BQkxFKFhIUl9SRVNQT05TRV9CTE9CKQorICAgICAgICAg
ICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVGaWxlRGF0YShpbnQgbGVuZ3RoUmVjZWl2ZWQpOwor
I2VuZGlmCiAKICAgICAgICAgICAgIC8vIE9ubHkgdG8gYmUgdXNlZCBvbiB0aGUgbWFpbiB0aHJl
YWQuCiAgICAgICAgICAgICBSZWZQdHI8VGhyZWFkYWJsZUxvYWRlcj4gbV9tYWluVGhyZWFkTG9h
ZGVyOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVl
c3RCYXNlLmNwcAkocmV2aXNpb24gNjYxMzkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDkgQEAg
UGFzc093blB0cjxSZXNvdXJjZVJlcXVlc3Q+IFJlc291cmNlUmVxdQogICAgIHJlcXVlc3QtPnNl
dEZpcnN0UGFydHlGb3JDb29raWVzKGRhdGEtPm1fZmlyc3RQYXJ0eUZvckNvb2tpZXMpOwogICAg
IHJlcXVlc3QtPnNldEhUVFBNZXRob2QoZGF0YS0+bV9odHRwTWV0aG9kKTsKICAgICByZXF1ZXN0
LT5zZXRUYXJnZXRUeXBlKGRhdGEtPm1fdGFyZ2V0VHlwZSk7CisjaWYgRU5BQkxFKFhIUl9SRVNQ
T05TRV9CTE9CKQorICAgIHJlcXVlc3QtPnNldERvd25sb2FkVG9GaWxlKGRhdGEtPm1fZG93bmxv
YWRUb0ZpbGUpOworI2VuZGlmCiAKICAgICByZXF1ZXN0LT51cGRhdGVSZXNvdXJjZVJlcXVlc3Qo
KTsKICAgICByZXF1ZXN0LT5tX2h0dHBIZWFkZXJGaWVsZHMuYWRvcHQoZGF0YS0+bV9odHRwSGVh
ZGVycy5yZWxlYXNlKCkpOwpAQCAtNzgsNiArODEsOSBAQCBQYXNzT3duUHRyPENyb3NzVGhyZWFk
UmVzb3VyY2VSZXF1ZXN0RGF0CiAgICAgZGF0YS0+bV9odHRwTWV0aG9kID0gaHR0cE1ldGhvZCgp
LmNyb3NzVGhyZWFkU3RyaW5nKCk7CiAgICAgZGF0YS0+bV9odHRwSGVhZGVycyA9IGh0dHBIZWFk
ZXJGaWVsZHMoKS5jb3B5RGF0YSgpOwogICAgIGRhdGEtPm1fdGFyZ2V0VHlwZSA9IG1fdGFyZ2V0
VHlwZTsKKyNpZiBFTkFCTEUoWEhSX1JFU1BPTlNFX0JMT0IpCisgICAgZGF0YS0+bV9kb3dubG9h
ZFRvRmlsZSA9IG1fZG93bmxvYWRUb0ZpbGU7CisjZW5kaWYKIAogICAgIGRhdGEtPm1fcmVzcG9u
c2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShtX3Jlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5
LnNpemUoKSk7CiAgICAgc2l6ZV90IGVuY29kaW5nQXJyYXlTaXplID0gbV9yZXNwb25zZUNvbnRl
bnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheS5zaXplKCk7CkBAIC0zNDAsNyArMzQ2
LDEyIEBAIGJvb2wgZXF1YWxJZ25vcmluZ0hlYWRlckZpZWxkcyhjb25zdCBSZXMKICAgICAKICAg
ICBpZiAoYS5hbGxvd0Nvb2tpZXMoKSAhPSBiLmFsbG93Q29va2llcygpKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgCisKKyNpZiBFTkFCTEUoWEhSX1JFU1BPTlNFX0JMT0IpCisgICAgaWYg
KGEuZG93bmxvYWRUb0ZpbGUoKSAhPSBiLmRvd25sb2FkVG9GaWxlKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyNlbmRpZgorCiAgICAgRm9ybURhdGEqIGZvcm1EYXRhQSA9IGEuaHR0cEJvZHko
KTsKICAgICBGb3JtRGF0YSogZm9ybURhdGFCID0gYi5odHRwQm9keSgpOwogICAgIApJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCShyZXZp
c2lvbiA2NjEzOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RC
YXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw2ICsxNDAsMTIgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICBUYXJnZXRUeXBlIHRhcmdldFR5cGUoKSBjb25zdCB7IHJldHVybiBtX3Rh
cmdldFR5cGU7IH0KICAgICAgICAgdm9pZCBzZXRUYXJnZXRUeXBlKFRhcmdldFR5cGUgdHlwZSkg
eyBtX3RhcmdldFR5cGUgPSB0eXBlOyB9CiAKKyNpZiBFTkFCTEUoWEhSX1JFU1BPTlNFX0JMT0Ip
CisgICAgICAgIC8vIElmIHRydWUsIHRoZSByZXNwb25zZSBib2R5IHdpbGwgYmUgZG93bmxvYWRl
ZCB0byBhIGZpbGUgbWFuYWdlZCBieSB0aGUgbmV0d29yayBsYXllci4KKyAgICAgICAgLy8gU2Vl
IFJlc291cmNlUmVzcG9uc2VCYXNlOjpkb3dubG9hZGVkRmlsZVBhdGguCisgICAgICAgIGJvb2wg
ZG93bmxvYWRUb0ZpbGUoKSBjb25zdCB7IHJldHVybiBtX2Rvd25sb2FkVG9GaWxlOyB9CisgICAg
ICAgIHZvaWQgc2V0RG93bmxvYWRUb0ZpbGUoYm9vbCBkb3dubG9hZCkgeyBtX2Rvd25sb2FkVG9G
aWxlID0gZG93bmxvYWQ7IH0KKyNlbmRpZgogICAgIHByb3RlY3RlZDoKICAgICAgICAgLy8gVXNl
ZCB3aGVuIFJlc291cmNlUmVxdWVzdCBpcyBpbml0aWFsaXplZCBmcm9tIGEgcGxhdGZvcm0gcmVw
cmVzZW50YXRpb24gb2YgdGhlIHJlcXVlc3QKICAgICAgICAgUmVzb3VyY2VSZXF1ZXN0QmFzZSgp
CkBAIC0xNDgsNiArMTU0LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgLCBt
X3JlcG9ydFVwbG9hZFByb2dyZXNzKGZhbHNlKQogICAgICAgICAgICAgLCBtX3JlcG9ydExvYWRU
aW1pbmcoZmFsc2UpCiAgICAgICAgICAgICAsIG1fdGFyZ2V0VHlwZShUYXJnZXRJc1N1YnJlc291
cmNlKQorI2lmIEVOQUJMRShYSFJfUkVTUE9OU0VfQkxPQikKKyAgICAgICAgICAgICwgbV9kb3du
bG9hZFRvRmlsZShmYWxzZSkKKyNlbmRpZgogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtMTYy
LDYgKzE3MSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgICwgbV9yZXBvcnRV
cGxvYWRQcm9ncmVzcyhmYWxzZSkKICAgICAgICAgICAgICwgbV9yZXBvcnRMb2FkVGltaW5nKGZh
bHNlKQogICAgICAgICAgICAgLCBtX3RhcmdldFR5cGUoVGFyZ2V0SXNTdWJyZXNvdXJjZSkKKyNp
ZiBFTkFCTEUoWEhSX1JFU1BPTlNFX0JMT0IpCisgICAgICAgICAgICAsIG1fZG93bmxvYWRUb0Zp
bGUoZmFsc2UpCisjZW5kaWYKICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTE4Myw2ICsxOTUs
OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgbV9yZXBvcnRVcGxvYWRQcm9n
cmVzczsKICAgICAgICAgYm9vbCBtX3JlcG9ydExvYWRUaW1pbmc7CiAgICAgICAgIFRhcmdldFR5
cGUgbV90YXJnZXRUeXBlOworI2lmIEVOQUJMRShYSFJfUkVTUE9OU0VfQkxPQikKKyAgICAgICAg
Ym9vbCBtX2Rvd25sb2FkVG9GaWxlOworI2VuZGlmCiAKICAgICBwcml2YXRlOgogICAgICAgICBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIGFzUmVzb3VyY2VSZXF1ZXN0KCkgY29uc3Q7CkBAIC0yMDYs
NiArMjIxLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBSZWZQdHI8Rm9ybURhdGE+
IG1faHR0cEJvZHk7CiAgICAgICAgIGJvb2wgbV9hbGxvd0Nvb2tpZXM7CiAgICAgICAgIFJlc291
cmNlUmVxdWVzdEJhc2U6OlRhcmdldFR5cGUgbV90YXJnZXRUeXBlOworI2lmIEVOQUJMRShYSFJf
UkVTUE9OU0VfQkxPQikKKyAgICAgICAgYm9vbCBtX2Rvd25sb2FkVG9GaWxlOworI2VuZGlmCiAg
ICAgfTsKICAgICAKICAgICB1bnNpZ25lZCBpbml0aWFsaXplTWF4aW11bUhUVFBDb25uZWN0aW9u
Q291bnRQZXJIb3N0KCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VS
ZXNwb25zZUJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZVJlc3BvbnNlQmFzZS5jcHAJKHJldmlzaW9uIDY2MTM5KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA3LDYgKzEwNyw5IEBAIFBhc3NPd25QdHI8UmVzb3VyY2VSZXNwb25zZT4gUmVzb3VyY2VSZXMK
ICAgICByZXNwb25zZS0+bV9odHRwSGVhZGVyRmllbGRzLmFkb3B0KGRhdGEtPm1faHR0cEhlYWRl
cnMucmVsZWFzZSgpKTsKICAgICByZXNwb25zZS0+c2V0TGFzdE1vZGlmaWVkRGF0ZShkYXRhLT5t
X2xhc3RNb2RpZmllZERhdGUpOwogICAgIHJlc3BvbnNlLT5zZXRSZXNvdXJjZUxvYWRUaW1pbmco
ZGF0YS0+bV9yZXNvdXJjZUxvYWRUaW1pbmcucmVsZWFzZSgpKTsKKyNpZiBFTkFCTEUoWEhSX1JF
U1BPTlNFX0JMT0IpCisgICAgcmVzcG9uc2UtPnNldERvd25sb2FkRmlsZVBhdGgoZGF0YS0+bV9k
b3dubG9hZEZpbGVQYXRoKTsKKyNlbmRpZgogCiAgICAgcmV0dXJuIHJlc3BvbnNlLnJlbGVhc2Uo
KTsKIH0KQEAgLTEyNSw2ICsxMjgsOSBAQCBQYXNzT3duUHRyPENyb3NzVGhyZWFkUmVzb3VyY2VS
ZXNwb25zZURhCiAgICAgZGF0YS0+bV9sYXN0TW9kaWZpZWREYXRlID0gbGFzdE1vZGlmaWVkRGF0
ZSgpOwogICAgIGlmIChtX3Jlc291cmNlTG9hZFRpbWluZykKICAgICAgICAgZGF0YS0+bV9yZXNv
dXJjZUxvYWRUaW1pbmcgPSBtX3Jlc291cmNlTG9hZFRpbWluZy0+ZGVlcENvcHkoKTsKKyNpZiBF
TkFCTEUoWEhSX1JFU1BPTlNFX0JMT0IpCisgICAgZGF0YS0+bV9kb3dubG9hZEZpbGVQYXRoID0g
ZG93bmxvYWRGaWxlUGF0aCgpLmNyb3NzVGhyZWFkU3RyaW5nKCk7CisjZW5kaWYKICAgICByZXR1
cm4gZGF0YS5yZWxlYXNlKCk7CiB9CiAKQEAgLTUxNSw2ICs1MjEsMjIgQEAgdm9pZCBSZXNvdXJj
ZVJlc3BvbnNlQmFzZTo6c2V0UmVzb3VyY2VMbwogICAgIG1fcmVzb3VyY2VMb2FkVGltaW5nID0g
cmVzb3VyY2VMb2FkVGltaW5nOwogfQogCisjaWYgRU5BQkxFKFhIUl9SRVNQT05TRV9CTE9CKQor
Y29uc3QgU3RyaW5nJiBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6ZG93bmxvYWRGaWxlUGF0aCgpIGNv
bnN0Cit7CisgICAgbGF6eUluaXQoKTsKKworICAgIHJldHVybiBtX2Rvd25sb2FkRmlsZVBhdGg7
Cit9CisKK3ZvaWQgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnNldERvd25sb2FkRmlsZVBhdGgoY29u
c3QgU3RyaW5nJiBwYXRoKQoreworICAgIGxhenlJbml0KCk7CisKKyAgICBtX2Rvd25sb2FkRmls
ZVBhdGggID0gcGF0aDsKK30KKyNlbmRpZgorCiB2b2lkIFJlc291cmNlUmVzcG9uc2VCYXNlOjps
YXp5SW5pdCgpIGNvbnN0CiB7CiAgICAgY29uc3RfY2FzdDxSZXNvdXJjZVJlc3BvbnNlKj4oc3Rh
dGljX2Nhc3Q8Y29uc3QgUmVzb3VyY2VSZXNwb25zZSo+KHRoaXMpKS0+cGxhdGZvcm1MYXp5SW5p
dCgpOwpAQCAtNTQ0LDYgKzU2NiwxMCBAQCBib29sIFJlc291cmNlUmVzcG9uc2VCYXNlOjpjb21w
YXJlKGNvbnN0CiAgICAgICAgIHJldHVybiBSZXNvdXJjZVJlc3BvbnNlOjpwbGF0Zm9ybUNvbXBh
cmUoYSwgYik7CiAgICAgaWYgKGEucmVzb3VyY2VMb2FkVGltaW5nKCkgIT0gYi5yZXNvdXJjZUxv
YWRUaW1pbmcoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworI2lmIEVOQUJMRShYSFJfUkVTUE9O
U0VfQkxPQikKKyAgICBpZiAoYS5kb3dubG9hZEZpbGVQYXRoKCkgIT0gYi5kb3dubG9hZEZpbGVQ
YXRoKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgogICAgIHJldHVybiBSZXNvdXJj
ZVJlc3BvbnNlOjpwbGF0Zm9ybUNvbXBhcmUoYSwgYik7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5oCShyZXZpc2lvbiA2NjEz
OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDksNiArMTA5LDE0IEBAIHB1YmxpYzoKICAgICBSZXNvdXJjZUxv
YWRUaW1pbmcqIHJlc291cmNlTG9hZFRpbWluZygpIGNvbnN0OwogICAgIHZvaWQgc2V0UmVzb3Vy
Y2VMb2FkVGltaW5nKFBhc3NSZWZQdHI8UmVzb3VyY2VMb2FkVGltaW5nPik7CiAKKyNpZiBFTkFC
TEUoWEhSX1JFU1BPTlNFX0JMT0IpCisgICAgLy8gVGhpcyBpbmRpY2F0ZXMgdGhlIGxvY2F0aW9u
IG9mIGEgZG93bmxvYWRlZCByZXNwb25zZSBpZiB0aGUKKyAgICAvLyBSZXNvdXJjZVJlcXVlc3Qg
aGFkIHRoZSBkb3dubG9hZFRvRmlsZSBmbGFnIHNldCB0byB0cnVlLgorICAgIC8vIFRCRDogSG93
IGlzIHRoZSBsaWZldGltZSBvZiB0aGlzIGZpbGUgaXMgbWFuYWdlZD8KKyAgICBjb25zdCBTdHJp
bmcmIGRvd25sb2FkRmlsZVBhdGgoKSBjb25zdDsKKyAgICB2b2lkIHNldERvd25sb2FkRmlsZVBh
dGgoY29uc3QgU3RyaW5nJiBwYXRoKTsKKyNlbmRpZgorCiAgICAgLy8gVGhlIFJlc291cmNlUmVz
cG9uc2Ugc3ViY2xhc3MgbWF5ICJzaGFkb3ciIHRoaXMgbWV0aG9kIHRvIHByb3ZpZGUgcGxhdGZv
cm0tc3BlY2lmaWMgbWVtb3J5IHVzYWdlIGluZm9ybWF0aW9uCiAgICAgdW5zaWduZWQgbWVtb3J5
VXNhZ2UoKSBjb25zdAogICAgIHsKQEAgLTE0Myw2ICsxNTEsOSBAQCBwcm90ZWN0ZWQ6CiAgICAg
dW5zaWduZWQgbV9jb25uZWN0aW9uSUQ7CiAgICAgYm9vbCBtX2Nvbm5lY3Rpb25SZXVzZWQgOiAx
OwogICAgIFJlZlB0cjxSZXNvdXJjZUxvYWRUaW1pbmc+IG1fcmVzb3VyY2VMb2FkVGltaW5nOwor
I2lmIEVOQUJMRShYSFJfUkVTUE9OU0VfQkxPQikKKyAgICBTdHJpbmcgbV9kb3dubG9hZEZpbGVQ
YXRoOworI2VuZGlmCiAKICAgICBib29sIG1faXNOdWxsIDogMTsKICAgICAKQEAgLTE4MCw2ICsx
OTEsOSBAQCBzdHJ1Y3QgQ3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0YSA6CiAgICAgT3du
UHRyPENyb3NzVGhyZWFkSFRUUEhlYWRlck1hcERhdGE+IG1faHR0cEhlYWRlcnM7CiAgICAgdGlt
ZV90IG1fbGFzdE1vZGlmaWVkRGF0ZTsKICAgICBSZWZQdHI8UmVzb3VyY2VMb2FkVGltaW5nPiBt
X3Jlc291cmNlTG9hZFRpbWluZzsKKyNpZiBFTkFCTEUoWEhSX1JFU1BPTlNFX0JMT0IpCisgICAg
U3RyaW5nIG1fZG93bmxvYWRGaWxlUGF0aDsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA2NjEzOSkKKysrIFdlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMSBAQAorMjAxMC0wOC0y
NiAgTWljaGFlbCBOb3JkbWFuICA8bWljaGFlbG5AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZWVkIGEgc2hvcnQgZGVzY3JpcHRp
b24gYW5kIGJ1ZyBVUkwgKE9PUFMhKQorCisgICAgICAgICogc3JjL1dlYlVSTFJlcXVlc3QuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXF1ZXN0UHJpdmF0ZUltcGw6OldlYlVSTFJlcXVl
c3RQcml2YXRlSW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlcXVlc3Q6OmRvd25sb2Fk
VG9GaWxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVxdWVzdDo6c2V0RG93bmxvYWRUb0Zp
bGUpOgorICAgICAgICAqIHNyYy9XZWJVUkxSZXF1ZXN0UHJpdmF0ZS5oOgorICAgICAgICAoV2Vi
S2l0OjpXZWJVUkxSZXF1ZXN0UHJpdmF0ZTo6V2ViVVJMUmVxdWVzdFByaXZhdGUpOgorICAgICAg
ICAqIHNyYy9XZWJVUkxSZXNwb25zZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlc3Bv
bnNlUHJpdmF0ZUltcGw6OldlYlVSTFJlc3BvbnNlUHJpdmF0ZUltcGwpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJVUkxSZXNwb25zZTo6ZG93bmxvYWRGaWxlUGF0aCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlVSTFJlc3BvbnNlOjpzZXREb3dubG9hZEZpbGVQYXRoKToKKyAgICAgICAgKiBzcmMvV2Vi
VVJMUmVzcG9uc2VQcml2YXRlLmg6CisKIDIwMTAtMDgtMjYgIFJ5b3N1a2UgTml3YSAgPHJuaXdh
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBX
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlVSTFJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVxdWVzdC5jcHAJKHJldmlzaW9uIDY2MTM5KQorKysgV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXF1ZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYs
NyArNTYsNiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBtX3Jlc291cmNlUmVxdWVzdCA9ICZt
X3Jlc291cmNlUmVxdWVzdEFsbG9jYXRpb247CiAgICAgICAgIG1fYWxsb3dTdG9yZWRDcmVkZW50
aWFscyA9IHAtPm1fYWxsb3dTdG9yZWRDcmVkZW50aWFsczsKLSAgICAgICAgbV9kb3dubG9hZFRv
RmlsZSA9IHAtPm1fZG93bmxvYWRUb0ZpbGU7CiAgICAgfQogCiAgICAgdmlydHVhbCB2b2lkIGRp
c3Bvc2UoKSB7IGRlbGV0ZSB0aGlzOyB9CkBAIC0yNDksMTIgKzI0OCwxOCBAQCB2b2lkIFdlYlVS
TFJlcXVlc3Q6OnNldEFwcENhY2hlSG9zdElEKGluCiAKIGJvb2wgV2ViVVJMUmVxdWVzdDo6ZG93
bmxvYWRUb0ZpbGUoKSBjb25zdAogewotICAgIHJldHVybiBtX3ByaXZhdGUtPm1fZG93bmxvYWRU
b0ZpbGU7CisjaWYgRU5BQkxFKFhIUl9SRVNQT05TRV9CTE9CKQorICAgIHJldHVybiBtX3ByaXZh
dGUtPm1fcmVzb3VyY2VSZXF1ZXN0LT5kb3dubG9hZFRvRmlsZSgpOworI2Vsc2UKKyAgICByZXR1
cm4gZmFsc2U7CisjZW5kaWYKIH0KIAogdm9pZCBXZWJVUkxSZXF1ZXN0OjpzZXREb3dubG9hZFRv
RmlsZShib29sIGRvd25sb2FkVG9GaWxlKQogewotICAgIG1fcHJpdmF0ZS0+bV9kb3dubG9hZFRv
RmlsZSA9IGRvd25sb2FkVG9GaWxlOworI2lmIEVOQUJMRShYSFJfUkVTUE9OU0VfQkxPQikKKyAg
ICBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXF1ZXN0LT5zZXREb3dubG9hZFRvRmlsZShkb3dubG9h
ZFRvRmlsZSk7CisjZW5kaWYKIH0KIAogUmVzb3VyY2VSZXF1ZXN0JiBXZWJVUkxSZXF1ZXN0Ojp0
b011dGFibGVSZXNvdXJjZVJlcXVlc3QoKQpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJV
UkxSZXF1ZXN0UHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
VVJMUmVxdWVzdFByaXZhdGUuaAkocmV2aXNpb24gNjYxMzkpCisrKyBXZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlVSTFJlcXVlc3RQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDE3ICszOSwx
MyBAQCBjbGFzcyBXZWJVUkxSZXF1ZXN0UHJpdmF0ZSB7CiBwdWJsaWM6CiAgICAgV2ViVVJMUmVx
dWVzdFByaXZhdGUoKQogICAgICAgICA6IG1fcmVzb3VyY2VSZXF1ZXN0KDApCi0gICAgICAgICwg
bV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzKHRydWUpCi0gICAgICAgICwgbV9kb3dubG9hZFRvRmls
ZShmYWxzZSkgeyB9CisgICAgICAgICwgbV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzKHRydWUpIHsg
fQogCiAgICAgLy8gQ2FsbGVkIGJ5IFdlYlVSTFJlcXVlc3Qgd2hlbiBpdCBubyBsb25nZXIgbmVl
ZHMgdGhpcyBvYmplY3QuCiAgICAgdmlydHVhbCB2b2lkIGRpc3Bvc2UoKSA9IDA7CiAKICAgICBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QqIG1fcmVzb3VyY2VSZXF1ZXN0OwogICAgIGJvb2wgbV9h
bGxvd1N0b3JlZENyZWRlbnRpYWxzOwotCi0gICAgLy8gRklYTUU6IE1vdmUgdGhpcyB0byBSZXNv
dXJjZVJlcXVlc3Qgb25jZSB3ZSBoYXZlIGFuIGludGVybmFsIGNvbnN1bWVyLgotICAgIGJvb2wg
bV9kb3dubG9hZFRvRmlsZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXNwb25zZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJVUkxSZXNwb25zZS5jcHAJKHJldmlzaW9uIDY2MTM5KQorKysgV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXNwb25zZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5
LDcgKzU5LDYgQEAgcHVibGljOgogICAgICAgICA6IG1fcmVzb3VyY2VSZXNwb25zZUFsbG9jYXRp
b24oKnAtPm1fcmVzb3VyY2VSZXNwb25zZSkKICAgICB7CiAgICAgICAgIG1fcmVzb3VyY2VSZXNw
b25zZSA9ICZtX3Jlc291cmNlUmVzcG9uc2VBbGxvY2F0aW9uOwotICAgICAgICBtX2Rvd25sb2Fk
RmlsZVBhdGggPSBwLT5tX2Rvd25sb2FkRmlsZVBhdGg7CiAgICAgfQogCiAgICAgdmlydHVhbCB2
b2lkIGRpc3Bvc2UoKSB7IGRlbGV0ZSB0aGlzOyB9CkBAIC0zNjUsMTIgKzM2NCwxOCBAQCB2b2lk
IFdlYlVSTFJlc3BvbnNlOjpzZXRJc011bHRpcGFydFBheWxvCiAKIFdlYlN0cmluZyBXZWJVUkxS
ZXNwb25zZTo6ZG93bmxvYWRGaWxlUGF0aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcHJpdmF0
ZS0+bV9kb3dubG9hZEZpbGVQYXRoOworI2lmIEVOQUJMRShYSFJfUkVTUE9OU0VfQkxPQikKKyAg
ICByZXR1cm4gbV9wcml2YXRlLT5tX3Jlc291cmNlUmVzcG9uc2UtPmRvd25sb2FkRmlsZVBhdGgo
KTsKKyNlbHNlCisgICAgcmV0dXJuIFdlYlN0cmluZygpOworI2VuZGlmCiB9CiAKIHZvaWQgV2Vi
VVJMUmVzcG9uc2U6OnNldERvd25sb2FkRmlsZVBhdGgoY29uc3QgV2ViU3RyaW5nJiBkb3dubG9h
ZEZpbGVQYXRoKQogewotICAgIG1fcHJpdmF0ZS0+bV9kb3dubG9hZEZpbGVQYXRoID0gZG93bmxv
YWRGaWxlUGF0aDsKKyNpZiBFTkFCTEUoWEhSX1JFU1BPTlNFX0JMT0IpCisgICAgbV9wcml2YXRl
LT5tX3Jlc291cmNlUmVzcG9uc2UtPnNldERvd25sb2FkRmlsZVBhdGgoZG93bmxvYWRGaWxlUGF0
aCk7CisjZW5kaWYKIH0KIAogdm9pZCBXZWJVUkxSZXNwb25zZTo6YXNzaWduKFdlYlVSTFJlc3Bv
bnNlUHJpdmF0ZSogcCkKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVzcG9uc2VQ
cml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXNwb25z
ZVByaXZhdGUuaAkocmV2aXNpb24gNjYxMzkpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlVS
TFJlc3BvbnNlUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw5ICs0NSw2IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgZGlzcG9zZSgpID0gMDsKIAogICAgIFdlYkNvcmU6OlJlc291
cmNlUmVzcG9uc2UqIG1fcmVzb3VyY2VSZXNwb25zZTsKLQotICAgIC8vIEZJWE1FOiBNb3ZlIHRo
aXMgdG8gUmVzb3VyY2VSZXNwb25zZSBvbmNlIHdlIGhhdmUgYW4gaW50ZXJuYWwgY29uc3VtZXIu
Ci0gICAgV2ViU3RyaW5nIG1fZG93bmxvYWRGaWxlUGF0aDsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65631</attachid>
            <date>2010-08-26 15:34:36 -0700</date>
            <delta_ts>2010-08-26 20:20:10 -0700</delta_ts>
            <desc>downloadToFile</desc>
            <filename>downloadToFile.2.txt</filename>
            <type>text/plain</type>
            <size>22879</size>
            <attacher name="Michael Nordman">michaeln</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjEzOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTAgQEAKKzIwMTAtMDgtMjYgIE1pY2hhZWwgTm9yZG1hbiAgPG1pY2hhZWxuQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkIHN1cHBvcnQgZm9yICJkb3dubG9hZFRvRmlsZSIgdG8gUmVzb3VyY2VSZXF1ZXN0QmFz
ZSBhbmQgUmVzb3VyY2VSZXNwb25zZUJhc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQ0NzIyCisgICAgICAgIC0gQWRkcyBhIFJlc291cmNlUmVxdWVz
dEJhc2UubV9kb3dubG9hZFRvRmlsZSBib29sIGRhdGEgbWVtYmVyIHdpdGggYSBnZXR0ZXIgYW5k
IHNldHRlci4KKyAgICAgICAgLSBBZGRzIGEgUmVzb3VyY2VSZXNwb25zZUJhc2UubV9kb3dubG9h
ZEZpbGVQYXRoIFN0cmluZyBkYXRhIG1lbWJlciB3aXRoIGEgZ2V0dGVyIGFuZCBzZXR0ZXIuCisg
ICAgICAgIC0gQWRkcyBhIGRpZFJlY2VpdmVGaWxlRGF0YSgpIG1ldGhvZCB0byByZXBvcnQgcHJv
Z3Jlc3Mgd2l0aG91dCByZXBvcnRpbmcgdGhlIGRhdGEgZm9yCisgICAgICAgICAgc3VjaCByZXF1
ZXN0cyBpbiBTdWJyZXNvdXJjZUxvYWRlckNsaWVudCBhbmQgVGhyZWFkYWJsZUxvYWRlckNsaWVu
dC4KKyAgICAgICAgLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlciwg
V29ya2VyVGhyZWFkYWJsZUxvYWRlciwgYW5kCisgICAgICAgICAgVGhyZWFkYWJsZUxvYWRlckNs
aWVudFdyYXBwZXIgdG8gcGx1bWIgdGhlIGRpZFJlY2VpdmVGaWxlRGF0YSgpIGNhbGxzIGFyb3Vu
ZC4KKworICAgICAgICBObyBuZXcgY29udGVudCBhY2Nlc3NpYmxlIGZ1bmN0aW9uYWxpdHksIG5v
IG5ldyB0ZXN0cy4KKworICAgICAgICAqIGxvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRSZWNl
aXZlRmlsZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVy
Ojpsb2FkUmVxdWVzdCk6IERvbid0IGNhbGwgZGlkUmVjZWl2ZURhdGEgZm9yIGRvd25sb2FkVG9G
aWxlIHJlcXVlc3RzLgorICAgICAgICAqIGxvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIu
aDoKKyAgICAgICAgKiBsb2FkZXIvU3VicmVzb3VyY2VMb2FkZXJDbGllbnQuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlN1YnJlc291cmNlTG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlRGF0YSk6IEFkZGVk
IGEgY29tbWVudCBhYm91dCBub3QgYmVpbmcgY2FsbGVkIGZvciBkb3dubG9hZFRvRmlsZSByZXF1
ZXN0cy4KKyAgICAgICAgKFdlYkNvcmU6OlN1YnJlc291cmNlTG9hZGVyQ2xpZW50OjpkaWRSZWNl
aXZlRmlsZURhdGEpOgorICAgICAgICAqIGxvYWRlci9UaHJlYWRhYmxlTG9hZGVyQ2xpZW50Lmg6
CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlTG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlRGF0
YSk6IEFkZGVkIGEgY29tbWVudCBhYm91dCBub3QgYmVpbmcgY2FsbGVkIGZvciBkb3dubG9hZFRv
RmlsZSByZXF1ZXN0cy4KKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZGFibGVMb2FkZXJDbGllbnQ6
OmRpZFJlY2VpdmVGaWxlRGF0YSk6CisgICAgICAgICogbG9hZGVyL1RocmVhZGFibGVMb2FkZXJD
bGllbnRXcmFwcGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlTG9hZGVyQ2xpZW50
V3JhcHBlcjo6ZGlkUmVjZWl2ZUZpbGVEYXRhKToKKyAgICAgICAgKiBsb2FkZXIvV29ya2VyVGhy
ZWFkYWJsZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3b3JrZXJDb250ZXh0RGlkUmVj
ZWl2ZUZpbGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVMb2FkZXI6
Ok1haW5UaHJlYWRCcmlkZ2U6OmRpZFJlY2VpdmVGaWxlRGF0YSk6CisgICAgICAgICogbG9hZGVy
L1dvcmtlclRocmVhZGFibGVMb2FkZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jl
c291cmNlUmVxdWVzdEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
QmFzZTo6YWRvcHQpOiBDb3B5IG1fZG93bmxvYWRUb0ZpbGUuCisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3RCYXNlOjpjb3B5RGF0YSk6IENvcHkgbV9kb3dubG9hZFRvRmlsZS4KKyAg
ICAgICAgKFdlYkNvcmU6OmVxdWFsSWdub3JpbmdIZWFkZXJGaWVsZHMpOiBDb21wYXJlIG1fZG93
bmxvYWRUb0ZpbGUuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RC
YXNlLmg6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpkb3dubG9hZFRv
RmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpzZXREb3dubG9h
ZFRvRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpSZXNvdXJj
ZVJlcXVlc3RCYXNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9u
c2VCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjphZG9w
dCk6IENvcHkgbV9kb3dubG9hZGVkRmlsZVBhdGguCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZVJlc3BvbnNlQmFzZTo6Y29weURhdGEpOiBDb3B5IG1fZG93bmxvYWRlZEZpbGVQYXRoLgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OmRvd25sb2FkRmlsZVBhdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OnNldERvd25sb2FkRmlsZVBh
dGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OmNvbXBhcmUpOiBD
b21wYXJlIG1fZG93bmxvYWRlZEZpbGVQYXRoLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VSZXNwb25zZUJhc2UuaDoKKwogMjAxMC0wOC0yNiAgU2FtIFdlaW5pZyAgPHNhbUB3
ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2Vi
Q29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwCShyZXZpc2lvbiA2NjEz
OSkKKysrIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIyOCw2ICsyMjgsMjAgQEAgdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2Fk
ZXI6OmRpZFJlY2VpdgogICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlRGF0YShkYXRhLCBsZW5ndGhS
ZWNlaXZlZCk7CiB9CiAKKyNpZiBFTkFCTEUoWEhSX1JFU1BPTlNFX0JMT0IpCit2b2lkIERvY3Vt
ZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkUmVjZWl2ZUZpbGVEYXRhKFN1YnJlc291cmNlTG9hZGVy
KiBsb2FkZXIsIGludCBsZW5ndGhSZWNlaXZlZCkKK3sKKyAgICBBU1NFUlQobV9jbGllbnQpOwor
ICAgIEFTU0VSVF9VTlVTRUQobG9hZGVyLCBsb2FkZXIgPT0gbV9sb2FkZXIpOworCisgICAgLy8g
SWdub3JlIHJlc3BvbnNlIGJvZHkgb2YgcHJlZmxpZ2h0IHJlcXVlc3RzLgorICAgIGlmIChtX2Fj
dHVhbFJlcXVlc3QpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY2xpZW50LT5kaWRSZWNlaXZl
RmlsZURhdGEobGVuZ3RoUmVjZWl2ZWQpOworfQorI2VuZGlmCisKIHZvaWQgRG9jdW1lbnRUaHJl
YWRhYmxlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIp
CiB7CiAgICAgQVNTRVJUKGxvYWRlciA9PSBtX2xvYWRlcik7CkBAIC0zNTAsOSArMzY0LDE1IEBA
IHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVxdWUKIAogICAgIGRpZFJlY2Vp
dmVSZXNwb25zZSgwLCByZXNwb25zZSk7CiAKLSAgICBjb25zdCBjaGFyKiBieXRlcyA9IHN0YXRp
Y19jYXN0PGNvbnN0IGNoYXIqPihkYXRhLmRhdGEoKSk7Ci0gICAgaW50IGxlbiA9IHN0YXRpY19j
YXN0PGludD4oZGF0YS5zaXplKCkpOwotICAgIGRpZFJlY2VpdmVEYXRhKDAsIGJ5dGVzLCBsZW4p
OworI2lmIEVOQUJMRShYSFJfUkVTUE9OU0VfQkxPQikKKyAgICBpZiAoIXJlcXVlc3QuZG93bmxv
YWRUb0ZpbGUoKSkgeworI2VuZGlmCisgICAgICAgIGNvbnN0IGNoYXIqIGJ5dGVzID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEuZGF0YSgpKTsKKyAgICAgICAgaW50IGxlbiA9IHN0YXRp
Y19jYXN0PGludD4oZGF0YS5zaXplKCkpOworICAgICAgICBkaWRSZWNlaXZlRGF0YSgwLCBieXRl
cywgbGVuKTsKKyNpZiBFTkFCTEUoWEhSX1JFU1BPTlNFX0JMT0IpCisgICAgfQorI2VuZGlmCiAK
ICAgICBkaWRGaW5pc2hMb2FkaW5nKGlkZW50aWZpZXIpOwogfQpJbmRleDogV2ViQ29yZS9sb2Fk
ZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2Fk
ZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmgJKHJldmlzaW9uIDY2MTM5KQorKysgV2ViQ29y
ZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2
LDYgKzc2LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlk
UmVjZWl2ZURhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBjaGFyKiwgaW50IGxlbmd0aFJl
Y2VpdmVkKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoU3VicmVzb3Vy
Y2VMb2FkZXIqKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoU3VicmVzb3VyY2VMb2Fk
ZXIqLCBjb25zdCBSZXNvdXJjZUVycm9yJik7CisjaWYgRU5BQkxFKFhIUl9SRVNQT05TRV9CTE9C
KQorICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUZpbGVEYXRhKFN1YnJlc291cmNlTG9h
ZGVyKiwgaW50IC8qbGVuZ3RoUmVjZWl2ZWQqLyk7CisjZW5kaWYKIAogICAgICAgICB2aXJ0dWFs
IGJvb2wgZ2V0U2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoU3VicmVzb3VyY2VMb2FkZXIqLCBi
b29sJiBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBk
aWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25z
dCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvU3VicmVz
b3VyY2VMb2FkZXJDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9TdWJyZXNv
dXJjZUxvYWRlckNsaWVudC5oCShyZXZpc2lvbiA2NjEzOSkKKysrIFdlYkNvcmUvbG9hZGVyL1N1
YnJlc291cmNlTG9hZGVyQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDExICs0NiwxNCBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZFNlbmREYXRhKFN1YnJlc291cmNlTG9hZGVy
KiwgdW5zaWduZWQgbG9uZyBsb25nIC8qYnl0ZXNTZW50Ki8sIHVuc2lnbmVkIGxvbmcgbG9uZyAv
KnRvdGFsQnl0ZXNUb0JlU2VudCovKSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZl
UmVzcG9uc2UoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgeyB9
Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFN1YnJlc291cmNlTG9hZGVyKiwgY29u
c3QgY2hhciosIGludCAvKmxlbmd0aFJlY2VpdmVkKi8pIHsgfQorICAgIHZpcnR1YWwgdm9pZCBk
aWRSZWNlaXZlRGF0YShTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IGNoYXIqLCBpbnQgLypsZW5n
dGhSZWNlaXZlZCovKSB7IH0gLy8gTm90IGNhbGxlZCBpZiByZXF1ZXN0LmRvd25sb2FkVG9GaWxl
IGlzIHNldC4KICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKFN1YnJl
c291cmNlTG9hZGVyKiwgY29uc3QgY2hhciosIGludCAvKmxlbmd0aFJlY2VpdmVkKi8pIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKFN1YnJlc291cmNlTG9hZGVyKikgeyB9
CiAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBSZXNv
dXJjZUVycm9yJikgeyB9Ci0gICAgCisjaWYgRU5BQkxFKFhIUl9SRVNQT05TRV9CTE9CKQorICAg
IHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRmlsZURhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCBpbnQg
LypsZW5ndGhSZWNlaXZlZCovKSB7IH0gLy8gT25seSBjYWxsZWQgaWYgcmVxdWVzdC5kb3dubG9h
ZFRvRmlsZSBpcyBzZXQuCisjZW5kaWYKKwogICAgIHZpcnR1YWwgYm9vbCBnZXRTaG91bGRVc2VD
cmVkZW50aWFsU3RvcmFnZShTdWJyZXNvdXJjZUxvYWRlciosIGJvb2wmIC8qc2hvdWxkVXNlQ3Jl
ZGVudGlhbFN0b3JhZ2UqLykgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlk
UmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3Qg
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRD
YW5jZWxsYXRpb24oU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSYpIHsgfQpJbmRleDogV2ViQ29yZS9sb2FkZXIvVGhyZWFkYWJsZUxvYWRlckNsaWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1RocmVhZGFibGVMb2FkZXJDbGllbnQuaAko
cmV2aXNpb24gNjYxMzkpCisrKyBXZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxlTG9hZGVyQ2xpZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDEyICs0MSwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25nIGxvbmcgLypi
eXRlc1NlbnQqLywgdW5zaWduZWQgbG9uZyBsb25nIC8qdG90YWxCeXRlc1RvQmVTZW50Ki8pIHsg
fQogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYpIHsgfQotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoY29u
c3QgY2hhciosIGludCAvKmxlbmd0aFJlY2VpdmVkKi8pIHsgfQorICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciosIGludCAvKmxlbmd0aFJlY2VpdmVkKi8pIHsg
fSAvLyBOb3QgY2FsbGVkIHdoZW4gcmVxdWVzdC5kb3dubG9hZFRvRmlsZQogICAgICAgICB2aXJ0
dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nIC8qaWRlbnRpZmllciovKSB7
IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpIHsg
fQogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbFJlZGlyZWN0Q2hlY2soKSB7IH0KLQogICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2FuY2VsbGF0aW9uKGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmKSB7IH0KKyNpZiBFTkFCTEUoWEhSX1JFU1BPTlNFX0JMT0Ip
CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRmlsZURhdGEoaW50IC8qIGxlbmd0aFJl
Y2VpdmVkKi8pIHsgfSAvLyBPbmx5IGNhbGxlZCBmb3IgcmVxdWVzdC5kb3dubG9hZFRvRmlsZQor
I2VuZGlmCiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwgflRocmVhZGFibGVMb2Fk
ZXJDbGllbnQoKSB7IH0KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1RocmVhZGFibGVMb2FkZXJDbGll
bnRXcmFwcGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvVGhyZWFkYWJsZUxvYWRl
ckNsaWVudFdyYXBwZXIuaAkocmV2aXNpb24gNjYxMzkpCisrKyBXZWJDb3JlL2xvYWRlci9UaHJl
YWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3NCwx
NCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAgICAgbV9jbGllbnQtPmRpZFJl
Y2VpdmVEYXRhKGRhdGEsIGxlbmd0aFJlY2VpdmVkKTsKICAgICAgICAgfQogCisjaWYgRU5BQkxF
KFhIUl9SRVNQT05TRV9CTE9CKQorICAgICAgICB2b2lkIGRpZFJlY2VpdmVGaWxlRGF0YShpbnQg
bGVuZ3RoUmVjZWl2ZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX2NsaWVudCkKKyAg
ICAgICAgICAgICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZUZpbGVEYXRhKGxlbmd0aFJlY2VpdmVk
KTsKKyAgICAgICAgfQorI2VuZGlmCisKICAgICAgICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKHVu
c2lnbmVkIGxvbmcgaWRlbnRpZmllcikKICAgICAgICAgewogICAgICAgICAgICAgbV9kb25lID0g
dHJ1ZTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1dvcmtlclRocmVhZGFibGVMb2FkZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1dvcmtlclRocmVhZGFibGVMb2FkZXIuY3BwCShy
ZXZpc2lvbiA2NjEzOSkKKysrIFdlYkNvcmUvbG9hZGVyL1dvcmtlclRocmVhZGFibGVMb2FkZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsNiArMTkxLDE0IEBAIHN0YXRpYyB2b2lkIHdvcmtl
ckNvbnRleHREaWRSZWNlaXZlRGF0YSgKICAgICB3b3JrZXJDbGllbnRXcmFwcGVyLT5kaWRSZWNl
aXZlRGF0YSh2ZWN0b3JEYXRhLT5kYXRhKCksIHZlY3RvckRhdGEtPnNpemUoKSk7CiB9CiAKKyNp
ZiBFTkFCTEUoWEhSX1JFU1BPTlNFX0JMT0IpCitzdGF0aWMgdm9pZCB3b3JrZXJDb250ZXh0RGlk
UmVjZWl2ZUZpbGVEYXRhKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFJlZlB0cjxU
aHJlYWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBlcj4gd29ya2VyQ2xpZW50V3JhcHBlciwgaW50IGxl
bmd0aFJlY2VpdmVkKQoreworICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwgY29udGV4dC0+aXNX
b3JrZXJDb250ZXh0KCkpOworICAgIHdvcmtlckNsaWVudFdyYXBwZXItPmRpZFJlY2VpdmVGaWxl
RGF0YShsZW5ndGhSZWNlaXZlZCk7Cit9CisjZW5kaWYKKwogdm9pZCBXb3JrZXJUaHJlYWRhYmxl
TG9hZGVyOjpNYWluVGhyZWFkQnJpZGdlOjpkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBkYXRh
LCBpbnQgbGVuZ3RoUmVjZWl2ZWQpCiB7CiAgICAgT3duUHRyPFZlY3RvcjxjaGFyPiA+IHZlY3Rv
ciA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8Y2hhcj4obGVuZ3RoUmVjZWl2ZWQpKTsgLy8gbmVlZHMg
dG8gYmUgYW4gT3duUHRyIGZvciB1c2FnZSB3aXRoIGNyZWF0ZUNhbGxiYWNrVGFzay4KQEAgLTE5
OCw2ICsyMDYsMTMgQEAgdm9pZCBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQgog
ICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KGNyZWF0ZUNh
bGxiYWNrVGFzaygmd29ya2VyQ29udGV4dERpZFJlY2VpdmVEYXRhLCBtX3dvcmtlckNsaWVudFdy
YXBwZXIsIHZlY3Rvci5yZWxlYXNlKCkpLCBtX3Rhc2tNb2RlKTsKIH0KIAorI2lmIEVOQUJMRShY
SFJfUkVTUE9OU0VfQkxPQikKK3ZvaWQgV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6TWFpblRocmVh
ZEJyaWRnZTo6ZGlkUmVjZWl2ZUZpbGVEYXRhKGludCBsZW5ndGhSZWNlaXZlZCkKK3sKKyAgICBt
X2xvYWRlclByb3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyQ29udGV4dChjcmVhdGVDYWxsYmFj
a1Rhc2soJndvcmtlckNvbnRleHREaWRSZWNlaXZlRmlsZURhdGEsIG1fd29ya2VyQ2xpZW50V3Jh
cHBlciwgbGVuZ3RoUmVjZWl2ZWQpLCBtX3Rhc2tNb2RlKTsKK30KKyNlbmRpZgorCiBzdGF0aWMg
dm9pZCB3b3JrZXJDb250ZXh0RGlkRmluaXNoTG9hZGluZyhTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBSZWZQdHI8VGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXI+IHdvcmtlckNs
aWVudFdyYXBwZXIsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikKIHsKICAgICBBU1NFUlRfVU5V
U0VEKGNvbnRleHQsIGNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKTsKSW5kZXg6IFdlYkNvcmUv
bG9hZGVyL1dvcmtlclRocmVhZGFibGVMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xv
YWRlci9Xb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmgJKHJldmlzaW9uIDY2MTM5KQorKysgV2ViQ29y
ZS9sb2FkZXIvV29ya2VyVGhyZWFkYWJsZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgs
NiArMTE4LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgdmlydHVhbCB2b2lk
IGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpOwogICAgICAgICAgICAgdmlydHVhbCB2b2lk
IGRpZEZhaWxSZWRpcmVjdENoZWNrKCk7CiAgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVj
ZWl2ZUF1dGhlbnRpY2F0aW9uQ2FuY2VsbGF0aW9uKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsK
KyNpZiBFTkFCTEUoWEhSX1JFU1BPTlNFX0JMT0IpCisgICAgICAgICAgICB2aXJ0dWFsIHZvaWQg
ZGlkUmVjZWl2ZUZpbGVEYXRhKGludCBsZW5ndGhSZWNlaXZlZCk7CisjZW5kaWYKIAogICAgICAg
ICAgICAgLy8gT25seSB0byBiZSB1c2VkIG9uIHRoZSBtYWluIHRocmVhZC4KICAgICAgICAgICAg
IFJlZlB0cjxUaHJlYWRhYmxlTG9hZGVyPiBtX21haW5UaHJlYWRMb2FkZXI7CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCShyZXZp
c2lvbiA2NjEzOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RC
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsOSBAQCBQYXNzT3duUHRyPFJlc291
cmNlUmVxdWVzdD4gUmVzb3VyY2VSZXF1CiAgICAgcmVxdWVzdC0+c2V0Rmlyc3RQYXJ0eUZvckNv
b2tpZXMoZGF0YS0+bV9maXJzdFBhcnR5Rm9yQ29va2llcyk7CiAgICAgcmVxdWVzdC0+c2V0SFRU
UE1ldGhvZChkYXRhLT5tX2h0dHBNZXRob2QpOwogICAgIHJlcXVlc3QtPnNldFRhcmdldFR5cGUo
ZGF0YS0+bV90YXJnZXRUeXBlKTsKKyNpZiBFTkFCTEUoWEhSX1JFU1BPTlNFX0JMT0IpCisgICAg
cmVxdWVzdC0+c2V0RG93bmxvYWRUb0ZpbGUoZGF0YS0+bV9kb3dubG9hZFRvRmlsZSk7CisjZW5k
aWYKIAogICAgIHJlcXVlc3QtPnVwZGF0ZVJlc291cmNlUmVxdWVzdCgpOwogICAgIHJlcXVlc3Qt
Pm1faHR0cEhlYWRlckZpZWxkcy5hZG9wdChkYXRhLT5tX2h0dHBIZWFkZXJzLnJlbGVhc2UoKSk7
CkBAIC03OCw2ICs4MSw5IEBAIFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlcXVlc3RE
YXQKICAgICBkYXRhLT5tX2h0dHBNZXRob2QgPSBodHRwTWV0aG9kKCkuY3Jvc3NUaHJlYWRTdHJp
bmcoKTsKICAgICBkYXRhLT5tX2h0dHBIZWFkZXJzID0gaHR0cEhlYWRlckZpZWxkcygpLmNvcHlE
YXRhKCk7CiAgICAgZGF0YS0+bV90YXJnZXRUeXBlID0gbV90YXJnZXRUeXBlOworI2lmIEVOQUJM
RShYSFJfUkVTUE9OU0VfQkxPQikKKyAgICBkYXRhLT5tX2Rvd25sb2FkVG9GaWxlID0gbV9kb3du
bG9hZFRvRmlsZTsKKyNlbmRpZgogCiAgICAgZGF0YS0+bV9yZXNwb25zZUNvbnRlbnREaXNwb3Np
dGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fcmVzcG9u
c2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkuc2l6ZSgpKTsKICAgICBz
aXplX3QgZW5jb2RpbmdBcnJheVNpemUgPSBtX3Jlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5j
b2RpbmdGYWxsYmFja0FycmF5LnNpemUoKTsKQEAgLTM0MCw3ICszNDYsMTIgQEAgYm9vbCBlcXVh
bElnbm9yaW5nSGVhZGVyRmllbGRzKGNvbnN0IFJlcwogICAgIAogICAgIGlmIChhLmFsbG93Q29v
a2llcygpICE9IGIuYWxsb3dDb29raWVzKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAK
KworI2lmIEVOQUJMRShYSFJfUkVTUE9OU0VfQkxPQikKKyAgICBpZiAoYS5kb3dubG9hZFRvRmls
ZSgpICE9IGIuZG93bmxvYWRUb0ZpbGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlm
CisKICAgICBGb3JtRGF0YSogZm9ybURhdGFBID0gYS5odHRwQm9keSgpOwogICAgIEZvcm1EYXRh
KiBmb3JtRGF0YUIgPSBiLmh0dHBCb2R5KCk7CiAgICAgCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmgJKHJldmlzaW9uIDY2MTM5KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMTQwLDYgKzE0MCwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFRh
cmdldFR5cGUgdGFyZ2V0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0VHlwZTsgfQogICAg
ICAgICB2b2lkIHNldFRhcmdldFR5cGUoVGFyZ2V0VHlwZSB0eXBlKSB7IG1fdGFyZ2V0VHlwZSA9
IHR5cGU7IH0KIAorI2lmIEVOQUJMRShYSFJfUkVTUE9OU0VfQkxPQikKKyAgICAgICAgLy8gSWYg
dHJ1ZSwgdGhlIHJlc3BvbnNlIGJvZHkgd2lsbCBiZSBkb3dubG9hZGVkIHRvIGEgZmlsZSBtYW5h
Z2VkIGJ5IHRoZSBuZXR3b3JrIGxheWVyLgorICAgICAgICAvLyBTZWUgUmVzb3VyY2VSZXNwb25z
ZUJhc2U6OmRvd25sb2FkZWRGaWxlUGF0aC4KKyAgICAgICAgYm9vbCBkb3dubG9hZFRvRmlsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fZG93bmxvYWRUb0ZpbGU7IH0KKyAgICAgICAgdm9pZCBzZXREb3du
bG9hZFRvRmlsZShib29sIGRvd25sb2FkKSB7IG1fZG93bmxvYWRUb0ZpbGUgPSBkb3dubG9hZDsg
fQorI2VuZGlmCiAgICAgcHJvdGVjdGVkOgogICAgICAgICAvLyBVc2VkIHdoZW4gUmVzb3VyY2VS
ZXF1ZXN0IGlzIGluaXRpYWxpemVkIGZyb20gYSBwbGF0Zm9ybSByZXByZXNlbnRhdGlvbiBvZiB0
aGUgcmVxdWVzdAogICAgICAgICBSZXNvdXJjZVJlcXVlc3RCYXNlKCkKQEAgLTE0OCw2ICsxNTQs
OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAsIG1fcmVwb3J0VXBsb2FkUHJv
Z3Jlc3MoZmFsc2UpCiAgICAgICAgICAgICAsIG1fcmVwb3J0TG9hZFRpbWluZyhmYWxzZSkKICAg
ICAgICAgICAgICwgbV90YXJnZXRUeXBlKFRhcmdldElzU3VicmVzb3VyY2UpCisjaWYgRU5BQkxF
KFhIUl9SRVNQT05TRV9CTE9CKQorICAgICAgICAgICAgLCBtX2Rvd25sb2FkVG9GaWxlKGZhbHNl
KQorI2VuZGlmCiAgICAgICAgIHsKICAgICAgICAgfQogCkBAIC0xNjIsNiArMTcxLDkgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgLCBtX3JlcG9ydFVwbG9hZFByb2dyZXNzKGZh
bHNlKQogICAgICAgICAgICAgLCBtX3JlcG9ydExvYWRUaW1pbmcoZmFsc2UpCiAgICAgICAgICAg
ICAsIG1fdGFyZ2V0VHlwZShUYXJnZXRJc1N1YnJlc291cmNlKQorI2lmIEVOQUJMRShYSFJfUkVT
UE9OU0VfQkxPQikKKyAgICAgICAgICAgICwgbV9kb3dubG9hZFRvRmlsZShmYWxzZSkKKyNlbmRp
ZgogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtMTgzLDYgKzE5NSw5IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX3JlcG9ydFVwbG9hZFByb2dyZXNzOwogICAgICAgICBi
b29sIG1fcmVwb3J0TG9hZFRpbWluZzsKICAgICAgICAgVGFyZ2V0VHlwZSBtX3RhcmdldFR5cGU7
CisjaWYgRU5BQkxFKFhIUl9SRVNQT05TRV9CTE9CKQorICAgICAgICBib29sIG1fZG93bmxvYWRU
b0ZpbGU7CisjZW5kaWYKIAogICAgIHByaXZhdGU6CiAgICAgICAgIGNvbnN0IFJlc291cmNlUmVx
dWVzdCYgYXNSZXNvdXJjZVJlcXVlc3QoKSBjb25zdDsKQEAgLTIwNiw2ICsyMjEsOSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFJlZlB0cjxGb3JtRGF0YT4gbV9odHRwQm9keTsKICAg
ICAgICAgYm9vbCBtX2FsbG93Q29va2llczsKICAgICAgICAgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6
VGFyZ2V0VHlwZSBtX3RhcmdldFR5cGU7CisjaWYgRU5BQkxFKFhIUl9SRVNQT05TRV9CTE9CKQor
ICAgICAgICBib29sIG1fZG93bmxvYWRUb0ZpbGU7CisjZW5kaWYKICAgICB9OwogICAgIAogICAg
IHVuc2lnbmVkIGluaXRpYWxpemVNYXhpbXVtSFRUUENvbm5lY3Rpb25Db3VudFBlckhvc3QoKTsK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VC
YXNlLmNwcAkocmV2aXNpb24gNjYxMzkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVz
b3VyY2VSZXNwb25zZUJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsNiArMTA3LDkgQEAg
UGFzc093blB0cjxSZXNvdXJjZVJlc3BvbnNlPiBSZXNvdXJjZVJlcwogICAgIHJlc3BvbnNlLT5t
X2h0dHBIZWFkZXJGaWVsZHMuYWRvcHQoZGF0YS0+bV9odHRwSGVhZGVycy5yZWxlYXNlKCkpOwog
ICAgIHJlc3BvbnNlLT5zZXRMYXN0TW9kaWZpZWREYXRlKGRhdGEtPm1fbGFzdE1vZGlmaWVkRGF0
ZSk7CiAgICAgcmVzcG9uc2UtPnNldFJlc291cmNlTG9hZFRpbWluZyhkYXRhLT5tX3Jlc291cmNl
TG9hZFRpbWluZy5yZWxlYXNlKCkpOworI2lmIEVOQUJMRShYSFJfUkVTUE9OU0VfQkxPQikKKyAg
ICByZXNwb25zZS0+c2V0RG93bmxvYWRGaWxlUGF0aChkYXRhLT5tX2Rvd25sb2FkRmlsZVBhdGgp
OworI2VuZGlmCiAKICAgICByZXR1cm4gcmVzcG9uc2UucmVsZWFzZSgpOwogfQpAQCAtMTI1LDYg
KzEyOCw5IEBAIFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGEKICAgICBk
YXRhLT5tX2xhc3RNb2RpZmllZERhdGUgPSBsYXN0TW9kaWZpZWREYXRlKCk7CiAgICAgaWYgKG1f
cmVzb3VyY2VMb2FkVGltaW5nKQogICAgICAgICBkYXRhLT5tX3Jlc291cmNlTG9hZFRpbWluZyA9
IG1fcmVzb3VyY2VMb2FkVGltaW5nLT5kZWVwQ29weSgpOworI2lmIEVOQUJMRShYSFJfUkVTUE9O
U0VfQkxPQikKKyAgICBkYXRhLT5tX2Rvd25sb2FkRmlsZVBhdGggPSBkb3dubG9hZEZpbGVQYXRo
KCkuY3Jvc3NUaHJlYWRTdHJpbmcoKTsKKyNlbmRpZgogICAgIHJldHVybiBkYXRhLnJlbGVhc2Uo
KTsKIH0KIApAQCAtNTE1LDYgKzUyMSwyMiBAQCB2b2lkIFJlc291cmNlUmVzcG9uc2VCYXNlOjpz
ZXRSZXNvdXJjZUxvCiAgICAgbV9yZXNvdXJjZUxvYWRUaW1pbmcgPSByZXNvdXJjZUxvYWRUaW1p
bmc7CiB9CiAKKyNpZiBFTkFCTEUoWEhSX1JFU1BPTlNFX0JMT0IpCitjb25zdCBTdHJpbmcmIFJl
c291cmNlUmVzcG9uc2VCYXNlOjpkb3dubG9hZEZpbGVQYXRoKCkgY29uc3QKK3sKKyAgICBsYXp5
SW5pdCgpOworCisgICAgcmV0dXJuIG1fZG93bmxvYWRGaWxlUGF0aDsKK30KKwordm9pZCBSZXNv
dXJjZVJlc3BvbnNlQmFzZTo6c2V0RG93bmxvYWRGaWxlUGF0aChjb25zdCBTdHJpbmcmIHBhdGgp
Cit7CisgICAgbGF6eUluaXQoKTsKKworICAgIG1fZG93bmxvYWRGaWxlUGF0aCAgPSBwYXRoOwor
fQorI2VuZGlmCisKIHZvaWQgUmVzb3VyY2VSZXNwb25zZUJhc2U6OmxhenlJbml0KCkgY29uc3QK
IHsKICAgICBjb25zdF9jYXN0PFJlc291cmNlUmVzcG9uc2UqPihzdGF0aWNfY2FzdDxjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlKj4odGhpcykpLT5wbGF0Zm9ybUxhenlJbml0KCk7CkBAIC01NDQsNiAr
NTY2LDEwIEBAIGJvb2wgUmVzb3VyY2VSZXNwb25zZUJhc2U6OmNvbXBhcmUoY29uc3QKICAgICAg
ICAgcmV0dXJuIFJlc291cmNlUmVzcG9uc2U6OnBsYXRmb3JtQ29tcGFyZShhLCBiKTsKICAgICBp
ZiAoYS5yZXNvdXJjZUxvYWRUaW1pbmcoKSAhPSBiLnJlc291cmNlTG9hZFRpbWluZygpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CisjaWYgRU5BQkxFKFhIUl9SRVNQT05TRV9CTE9CKQorICAgIGlm
IChhLmRvd25sb2FkRmlsZVBhdGgoKSAhPSBiLmRvd25sb2FkRmlsZVBhdGgoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworI2VuZGlmCiAgICAgcmV0dXJuIFJlc291cmNlUmVzcG9uc2U6OnBsYXRm
b3JtQ29tcGFyZShhLCBiKTsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jl
c291cmNlUmVzcG9uc2VCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmgJKHJldmlzaW9uIDY2MTM5KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEwOSw2ICsxMDksMTQgQEAgcHVibGljOgogICAgIFJlc291cmNlTG9hZFRpbWluZyogcmVzb3Vy
Y2VMb2FkVGltaW5nKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRSZXNvdXJjZUxvYWRUaW1pbmcoUGFz
c1JlZlB0cjxSZXNvdXJjZUxvYWRUaW1pbmc+KTsKIAorI2lmIEVOQUJMRShYSFJfUkVTUE9OU0Vf
QkxPQikKKyAgICAvLyBUaGlzIGluZGljYXRlcyB0aGUgbG9jYXRpb24gb2YgYSBkb3dubG9hZGVk
IHJlc3BvbnNlIGlmIHRoZQorICAgIC8vIFJlc291cmNlUmVxdWVzdCBoYWQgdGhlIGRvd25sb2Fk
VG9GaWxlIGZsYWcgc2V0IHRvIHRydWUuCisgICAgLy8gVEJEOiBIb3cgaXMgdGhlIGxpZmV0aW1l
IG9mIHRoaXMgZmlsZSBpcyBtYW5hZ2VkPworICAgIGNvbnN0IFN0cmluZyYgZG93bmxvYWRGaWxl
UGF0aCgpIGNvbnN0OworICAgIHZvaWQgc2V0RG93bmxvYWRGaWxlUGF0aChjb25zdCBTdHJpbmcm
IHBhdGgpOworI2VuZGlmCisKICAgICAvLyBUaGUgUmVzb3VyY2VSZXNwb25zZSBzdWJjbGFzcyBt
YXkgInNoYWRvdyIgdGhpcyBtZXRob2QgdG8gcHJvdmlkZSBwbGF0Zm9ybS1zcGVjaWZpYyBtZW1v
cnkgdXNhZ2UgaW5mb3JtYXRpb24KICAgICB1bnNpZ25lZCBtZW1vcnlVc2FnZSgpIGNvbnN0CiAg
ICAgewpAQCAtMTQzLDYgKzE1MSw5IEBAIHByb3RlY3RlZDoKICAgICB1bnNpZ25lZCBtX2Nvbm5l
Y3Rpb25JRDsKICAgICBib29sIG1fY29ubmVjdGlvblJldXNlZCA6IDE7CiAgICAgUmVmUHRyPFJl
c291cmNlTG9hZFRpbWluZz4gbV9yZXNvdXJjZUxvYWRUaW1pbmc7CisjaWYgRU5BQkxFKFhIUl9S
RVNQT05TRV9CTE9CKQorICAgIFN0cmluZyBtX2Rvd25sb2FkRmlsZVBhdGg7CisjZW5kaWYKIAog
ICAgIGJvb2wgbV9pc051bGwgOiAxOwogICAgIApAQCAtMTgwLDYgKzE5MSw5IEBAIHN0cnVjdCBD
cm9zc1RocmVhZFJlc291cmNlUmVzcG9uc2VEYXRhIDoKICAgICBPd25QdHI8Q3Jvc3NUaHJlYWRI
VFRQSGVhZGVyTWFwRGF0YT4gbV9odHRwSGVhZGVyczsKICAgICB0aW1lX3QgbV9sYXN0TW9kaWZp
ZWREYXRlOwogICAgIFJlZlB0cjxSZXNvdXJjZUxvYWRUaW1pbmc+IG1fcmVzb3VyY2VMb2FkVGlt
aW5nOworI2lmIEVOQUJMRShYSFJfUkVTUE9OU0VfQkxPQikKKyAgICBTdHJpbmcgbV9kb3dubG9h
ZEZpbGVQYXRoOworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBX
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cJKHJldmlzaW9uIDY2MTM5KQorKysgV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDEwLTA4LTI2ICBNaWNoYWVsIE5vcmRt
YW4gIDxtaWNoYWVsbkBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciAiZG93bmxvYWRUb0ZpbGUiIHRvIFJl
c291cmNlUmVxdWVzdEJhc2UgYW5kIFJlc291cmNlUmVzcG9uc2VCYXNlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDcyMgorICAgICAgICAtIE1vdmVk
IHN0b3JhZ2UgZm9yIHRoZXNlIGRhdGEgbWVtYmVycyBmcm9tIG91ciBXZWJLaXRBUEkgY2xhc3Nl
cworICAgICAgICAgIHRvIHRoZSBXZWJDb3JlIGNsYXNzZXMuCisKKyAgICAgICAgKiBzcmMvV2Vi
VVJMUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlcXVlc3RQcml2YXRlSW1w
bDo6V2ViVVJMUmVxdWVzdFByaXZhdGVJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVx
dWVzdDo6ZG93bmxvYWRUb0ZpbGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXF1ZXN0Ojpz
ZXREb3dubG9hZFRvRmlsZSk6CisgICAgICAgICogc3JjL1dlYlVSTFJlcXVlc3RQcml2YXRlLmg6
CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlcXVlc3RQcml2YXRlOjpXZWJVUkxSZXF1ZXN0UHJp
dmF0ZSk6CisgICAgICAgICogc3JjL1dlYlVSTFJlc3BvbnNlLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViVVJMUmVzcG9uc2VQcml2YXRlSW1wbDo6V2ViVVJMUmVzcG9uc2VQcml2YXRlSW1wbCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlc3BvbnNlOjpkb3dubG9hZEZpbGVQYXRoKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVVJMUmVzcG9uc2U6OnNldERvd25sb2FkRmlsZVBhdGgpOgorICAg
ICAgICAqIHNyYy9XZWJVUkxSZXNwb25zZVByaXZhdGUuaDoKKwogMjAxMC0wOC0yNiAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNl
aWRlbC4KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVxdWVzdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXF1ZXN0LmNwcAkocmV2aXNpb24g
NjYxMzkpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlVSTFJlcXVlc3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01Niw3ICs1Niw2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1fcmVzb3Vy
Y2VSZXF1ZXN0ID0gJm1fcmVzb3VyY2VSZXF1ZXN0QWxsb2NhdGlvbjsKICAgICAgICAgbV9hbGxv
d1N0b3JlZENyZWRlbnRpYWxzID0gcC0+bV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzOwotICAgICAg
ICBtX2Rvd25sb2FkVG9GaWxlID0gcC0+bV9kb3dubG9hZFRvRmlsZTsKICAgICB9CiAKICAgICB2
aXJ0dWFsIHZvaWQgZGlzcG9zZSgpIHsgZGVsZXRlIHRoaXM7IH0KQEAgLTI0OSwxMiArMjQ4LDE4
IEBAIHZvaWQgV2ViVVJMUmVxdWVzdDo6c2V0QXBwQ2FjaGVIb3N0SUQoaW4KIAogYm9vbCBXZWJV
UkxSZXF1ZXN0Ojpkb3dubG9hZFRvRmlsZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcHJpdmF0
ZS0+bV9kb3dubG9hZFRvRmlsZTsKKyNpZiBFTkFCTEUoWEhSX1JFU1BPTlNFX0JMT0IpCisgICAg
cmV0dXJuIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlcXVlc3QtPmRvd25sb2FkVG9GaWxlKCk7Cisj
ZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgogfQogCiB2b2lkIFdlYlVSTFJlcXVlc3Q6
OnNldERvd25sb2FkVG9GaWxlKGJvb2wgZG93bmxvYWRUb0ZpbGUpCiB7Ci0gICAgbV9wcml2YXRl
LT5tX2Rvd25sb2FkVG9GaWxlID0gZG93bmxvYWRUb0ZpbGU7CisjaWYgRU5BQkxFKFhIUl9SRVNQ
T05TRV9CTE9CKQorICAgIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlcXVlc3QtPnNldERvd25sb2Fk
VG9GaWxlKGRvd25sb2FkVG9GaWxlKTsKKyNlbmRpZgogfQogCiBSZXNvdXJjZVJlcXVlc3QmIFdl
YlVSTFJlcXVlc3Q6OnRvTXV0YWJsZVJlc291cmNlUmVxdWVzdCgpCkluZGV4OiBXZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlVSTFJlcXVlc3RQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJVUkxSZXF1ZXN0UHJpdmF0ZS5oCShyZXZpc2lvbiA2NjEzOSkKKysrIFdl
YktpdC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVxdWVzdFByaXZhdGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMzksMTcgKzM5LDEzIEBAIGNsYXNzIFdlYlVSTFJlcXVlc3RQcml2YXRlIHsKIHB1YmxpYzoK
ICAgICBXZWJVUkxSZXF1ZXN0UHJpdmF0ZSgpCiAgICAgICAgIDogbV9yZXNvdXJjZVJlcXVlc3Qo
MCkKLSAgICAgICAgLCBtX2FsbG93U3RvcmVkQ3JlZGVudGlhbHModHJ1ZSkKLSAgICAgICAgLCBt
X2Rvd25sb2FkVG9GaWxlKGZhbHNlKSB7IH0KKyAgICAgICAgLCBtX2FsbG93U3RvcmVkQ3JlZGVu
dGlhbHModHJ1ZSkgeyB9CiAKICAgICAvLyBDYWxsZWQgYnkgV2ViVVJMUmVxdWVzdCB3aGVuIGl0
IG5vIGxvbmdlciBuZWVkcyB0aGlzIG9iamVjdC4KICAgICB2aXJ0dWFsIHZvaWQgZGlzcG9zZSgp
ID0gMDsKIAogICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCogbV9yZXNvdXJjZVJlcXVlc3Q7
CiAgICAgYm9vbCBtX2FsbG93U3RvcmVkQ3JlZGVudGlhbHM7Ci0KLSAgICAvLyBGSVhNRTogTW92
ZSB0aGlzIHRvIFJlc291cmNlUmVxdWVzdCBvbmNlIHdlIGhhdmUgYW4gaW50ZXJuYWwgY29uc3Vt
ZXIuCi0gICAgYm9vbCBtX2Rvd25sb2FkVG9GaWxlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlVSTFJlc3BvbnNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlVSTFJlc3BvbnNlLmNwcAkocmV2aXNpb24g
NjYxMzkpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlVSTFJlc3BvbnNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTksNyArNTksNiBAQCBwdWJsaWM6CiAgICAgICAgIDogbV9yZXNvdXJjZVJl
c3BvbnNlQWxsb2NhdGlvbigqcC0+bV9yZXNvdXJjZVJlc3BvbnNlKQogICAgIHsKICAgICAgICAg
bV9yZXNvdXJjZVJlc3BvbnNlID0gJm1fcmVzb3VyY2VSZXNwb25zZUFsbG9jYXRpb247Ci0gICAg
ICAgIG1fZG93bmxvYWRGaWxlUGF0aCA9IHAtPm1fZG93bmxvYWRGaWxlUGF0aDsKICAgICB9CiAK
ICAgICB2aXJ0dWFsIHZvaWQgZGlzcG9zZSgpIHsgZGVsZXRlIHRoaXM7IH0KQEAgLTM2NSwxMiAr
MzY0LDE4IEBAIHZvaWQgV2ViVVJMUmVzcG9uc2U6OnNldElzTXVsdGlwYXJ0UGF5bG8KIAogV2Vi
U3RyaW5nIFdlYlVSTFJlc3BvbnNlOjpkb3dubG9hZEZpbGVQYXRoKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gbV9wcml2YXRlLT5tX2Rvd25sb2FkRmlsZVBhdGg7CisjaWYgRU5BQkxFKFhIUl9SRVNQ
T05TRV9CTE9CKQorICAgIHJldHVybiBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZS0+ZG93
bmxvYWRGaWxlUGF0aCgpOworI2Vsc2UKKyAgICByZXR1cm4gV2ViU3RyaW5nKCk7CisjZW5kaWYK
IH0KIAogdm9pZCBXZWJVUkxSZXNwb25zZTo6c2V0RG93bmxvYWRGaWxlUGF0aChjb25zdCBXZWJT
dHJpbmcmIGRvd25sb2FkRmlsZVBhdGgpCiB7Ci0gICAgbV9wcml2YXRlLT5tX2Rvd25sb2FkRmls
ZVBhdGggPSBkb3dubG9hZEZpbGVQYXRoOworI2lmIEVOQUJMRShYSFJfUkVTUE9OU0VfQkxPQikK
KyAgICBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZS0+c2V0RG93bmxvYWRGaWxlUGF0aChk
b3dubG9hZEZpbGVQYXRoKTsKKyNlbmRpZgogfQogCiB2b2lkIFdlYlVSTFJlc3BvbnNlOjphc3Np
Z24oV2ViVVJMUmVzcG9uc2VQcml2YXRlKiBwKQpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJVUkxSZXNwb25zZVByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlVSTFJlc3BvbnNlUHJpdmF0ZS5oCShyZXZpc2lvbiA2NjEzOSkKKysrIFdlYktpdC9jaHJv
bWl1bS9zcmMvV2ViVVJMUmVzcG9uc2VQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDkg
KzQ1LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaXNwb3NlKCkgPSAwOwogCiAgICAg
V2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSogbV9yZXNvdXJjZVJlc3BvbnNlOwotCi0gICAgLy8g
RklYTUU6IE1vdmUgdGhpcyB0byBSZXNvdXJjZVJlc3BvbnNlIG9uY2Ugd2UgaGF2ZSBhbiBpbnRl
cm5hbCBjb25zdW1lci4KLSAgICBXZWJTdHJpbmcgbV9kb3dubG9hZEZpbGVQYXRoOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65667</attachid>
            <date>2010-08-26 20:20:10 -0700</date>
            <delta_ts>2010-10-13 15:52:02 -0700</delta_ts>
            <desc>downloadToFile</desc>
            <filename>downloadToFile.3.txt</filename>
            <type>text/plain</type>
            <size>21640</size>
            <attacher name="Michael Nordman">michaeln</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjEzOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTAgQEAKKzIwMTAtMDgtMjYgIE1pY2hhZWwgTm9yZG1hbiAgPG1pY2hhZWxuQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkIHN1cHBvcnQgZm9yICJkb3dubG9hZFRvRmlsZSIgdG8gUmVzb3VyY2VSZXF1ZXN0QmFz
ZSBhbmQgUmVzb3VyY2VSZXNwb25zZUJhc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQ0NzIyCisgICAgICAgIC0gQWRkcyBhIFJlc291cmNlUmVxdWVz
dEJhc2UubV9kb3dubG9hZFRvRmlsZSBib29sIGRhdGEgbWVtYmVyIHdpdGggYSBnZXR0ZXIgYW5k
IHNldHRlci4KKyAgICAgICAgLSBBZGRzIGEgUmVzb3VyY2VSZXNwb25zZUJhc2UubV9kb3dubG9h
ZEZpbGVQYXRoIFN0cmluZyBkYXRhIG1lbWJlciB3aXRoIGEgZ2V0dGVyIGFuZCBzZXR0ZXIuCisg
ICAgICAgIC0gQWRkcyBhIGRpZFJlY2VpdmVGaWxlRGF0YSgpIG1ldGhvZCB0byByZXBvcnQgcHJv
Z3Jlc3Mgd2l0aG91dCByZXBvcnRpbmcgdGhlIGRhdGEgZm9yCisgICAgICAgICAgc3VjaCByZXF1
ZXN0cyBpbiBTdWJyZXNvdXJjZUxvYWRlckNsaWVudCBhbmQgVGhyZWFkYWJsZUxvYWRlckNsaWVu
dC4KKyAgICAgICAgLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlciwg
V29ya2VyVGhyZWFkYWJsZUxvYWRlciwgYW5kCisgICAgICAgICAgVGhyZWFkYWJsZUxvYWRlckNs
aWVudFdyYXBwZXIgdG8gcGx1bWIgdGhlIGRpZFJlY2VpdmVGaWxlRGF0YSgpIGNhbGxzIGFyb3Vu
ZC4KKworICAgICAgICBObyBuZXcgY29udGVudCBhY2Nlc3NpYmxlIGZ1bmN0aW9uYWxpdHksIG5v
IG5ldyB0ZXN0cy4KKworICAgICAgICAqIGxvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRSZWNl
aXZlRmlsZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVy
Ojpsb2FkUmVxdWVzdCk6IERvbid0IGNhbGwgZGlkUmVjZWl2ZURhdGEgZm9yIGRvd25sb2FkVG9G
aWxlIHJlcXVlc3RzLgorICAgICAgICAqIGxvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIu
aDoKKyAgICAgICAgKiBsb2FkZXIvU3VicmVzb3VyY2VMb2FkZXJDbGllbnQuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlN1YnJlc291cmNlTG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlRGF0YSk6IEFkZGVk
IGEgY29tbWVudCBhYm91dCBub3QgYmVpbmcgY2FsbGVkIGZvciBkb3dubG9hZFRvRmlsZSByZXF1
ZXN0cy4KKyAgICAgICAgKFdlYkNvcmU6OlN1YnJlc291cmNlTG9hZGVyQ2xpZW50OjpkaWRSZWNl
aXZlRmlsZURhdGEpOgorICAgICAgICAqIGxvYWRlci9UaHJlYWRhYmxlTG9hZGVyQ2xpZW50Lmg6
CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlTG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlRGF0
YSk6IEFkZGVkIGEgY29tbWVudCBhYm91dCBub3QgYmVpbmcgY2FsbGVkIGZvciBkb3dubG9hZFRv
RmlsZSByZXF1ZXN0cy4KKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZGFibGVMb2FkZXJDbGllbnQ6
OmRpZFJlY2VpdmVGaWxlRGF0YSk6CisgICAgICAgICogbG9hZGVyL1RocmVhZGFibGVMb2FkZXJD
bGllbnRXcmFwcGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlTG9hZGVyQ2xpZW50
V3JhcHBlcjo6ZGlkUmVjZWl2ZUZpbGVEYXRhKToKKyAgICAgICAgKiBsb2FkZXIvV29ya2VyVGhy
ZWFkYWJsZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3b3JrZXJDb250ZXh0RGlkUmVj
ZWl2ZUZpbGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVMb2FkZXI6
Ok1haW5UaHJlYWRCcmlkZ2U6OmRpZFJlY2VpdmVGaWxlRGF0YSk6CisgICAgICAgICogbG9hZGVy
L1dvcmtlclRocmVhZGFibGVMb2FkZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jl
c291cmNlUmVxdWVzdEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
QmFzZTo6YWRvcHQpOiBDb3B5IG1fZG93bmxvYWRUb0ZpbGUuCisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3RCYXNlOjpjb3B5RGF0YSk6IENvcHkgbV9kb3dubG9hZFRvRmlsZS4KKyAg
ICAgICAgKFdlYkNvcmU6OmVxdWFsSWdub3JpbmdIZWFkZXJGaWVsZHMpOiBDb21wYXJlIG1fZG93
bmxvYWRUb0ZpbGUuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RC
YXNlLmg6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpkb3dubG9hZFRv
RmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpzZXREb3dubG9h
ZFRvRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpSZXNvdXJj
ZVJlcXVlc3RCYXNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9u
c2VCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2VCYXNlOjphZG9w
dCk6IENvcHkgbV9kb3dubG9hZGVkRmlsZVBhdGguCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZVJlc3BvbnNlQmFzZTo6Y29weURhdGEpOiBDb3B5IG1fZG93bmxvYWRlZEZpbGVQYXRoLgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OmRvd25sb2FkRmlsZVBhdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OnNldERvd25sb2FkRmlsZVBh
dGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6OmNvbXBhcmUpOiBD
b21wYXJlIG1fZG93bmxvYWRlZEZpbGVQYXRoLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VSZXNwb25zZUJhc2UuaDoKKwogMjAxMC0wOC0yNiAgU2FtIFdlaW5pZyAgPHNhbUB3
ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2Vi
Q29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwCShyZXZpc2lvbiA2NjEz
OSkKKysrIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIyOCw2ICsyMjgsMTggQEAgdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2Fk
ZXI6OmRpZFJlY2VpdgogICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlRGF0YShkYXRhLCBsZW5ndGhS
ZWNlaXZlZCk7CiB9CiAKK3ZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRSZWNlaXZl
RmlsZURhdGEoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgaW50IGxlbmd0aFJlY2VpdmVkKQor
eworICAgIEFTU0VSVChtX2NsaWVudCk7CisgICAgQVNTRVJUX1VOVVNFRChsb2FkZXIsIGxvYWRl
ciA9PSBtX2xvYWRlcik7CisKKyAgICAvLyBJZ25vcmUgcmVzcG9uc2UgYm9keSBvZiBwcmVmbGln
aHQgcmVxdWVzdHMuCisgICAgaWYgKG1fYWN0dWFsUmVxdWVzdCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVGaWxlRGF0YShsZW5ndGhSZWNlaXZlZCk7Cit9CisK
IHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKFN1YnJlc291
cmNlTG9hZGVyKiBsb2FkZXIpCiB7CiAgICAgQVNTRVJUKGxvYWRlciA9PSBtX2xvYWRlcik7CkBA
IC0zNTAsOSArMzYyLDExIEBAIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVx
dWUKIAogICAgIGRpZFJlY2VpdmVSZXNwb25zZSgwLCByZXNwb25zZSk7CiAKLSAgICBjb25zdCBj
aGFyKiBieXRlcyA9IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihkYXRhLmRhdGEoKSk7Ci0gICAg
aW50IGxlbiA9IHN0YXRpY19jYXN0PGludD4oZGF0YS5zaXplKCkpOwotICAgIGRpZFJlY2VpdmVE
YXRhKDAsIGJ5dGVzLCBsZW4pOworICAgIGlmICghcmVxdWVzdC5kb3dubG9hZFRvRmlsZSgpKSB7
CisgICAgICAgIGNvbnN0IGNoYXIqIGJ5dGVzID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGRh
dGEuZGF0YSgpKTsKKyAgICAgICAgaW50IGxlbiA9IHN0YXRpY19jYXN0PGludD4oZGF0YS5zaXpl
KCkpOworICAgICAgICBkaWRSZWNlaXZlRGF0YSgwLCBieXRlcywgbGVuKTsKKyAgICB9CiAKICAg
ICBkaWRGaW5pc2hMb2FkaW5nKGlkZW50aWZpZXIpOwogfQpJbmRleDogV2ViQ29yZS9sb2FkZXIv
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIv
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmgJKHJldmlzaW9uIDY2MTM5KQorKysgV2ViQ29yZS9s
b2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDYg
Kzc0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRS
ZWNlaXZlUmVzcG9uc2UoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNl
Jik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShTdWJyZXNvdXJjZUxvYWRl
ciosIGNvbnN0IGNoYXIqLCBpbnQgbGVuZ3RoUmVjZWl2ZWQpOworICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVjZWl2ZUZpbGVEYXRhKFN1YnJlc291cmNlTG9hZGVyKiwgaW50IC8qbGVuZ3RoUmVj
ZWl2ZWQqLyk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKFN1YnJlc291
cmNlTG9hZGVyKik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKFN1YnJlc291cmNlTG9h
ZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpOwogCkluZGV4OiBXZWJDb3JlL2xvYWRlci9TdWJy
ZXNvdXJjZUxvYWRlckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1N1YnJl
c291cmNlTG9hZGVyQ2xpZW50LmgJKHJldmlzaW9uIDY2MTM5KQorKysgV2ViQ29yZS9sb2FkZXIv
U3VicmVzb3VyY2VMb2FkZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTEgKzQ2LDEy
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkU2VuZERhdGEoU3VicmVzb3VyY2VMb2Fk
ZXIqLCB1bnNpZ25lZCBsb25nIGxvbmcgLypieXRlc1NlbnQqLywgdW5zaWduZWQgbG9uZyBsb25n
IC8qdG90YWxCeXRlc1RvQmVTZW50Ki8pIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2Vp
dmVSZXNwb25zZShTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSB7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCBj
b25zdCBjaGFyKiwgaW50IC8qbGVuZ3RoUmVjZWl2ZWQqLykgeyB9CisgICAgdmlydHVhbCB2b2lk
IGRpZFJlY2VpdmVEYXRhKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgY2hhciosIGludCAvKmxl
bmd0aFJlY2VpdmVkKi8pIHsgfSAvLyBOb3QgY2FsbGVkIGlmIHJlcXVlc3QuZG93bmxvYWRUb0Zp
bGUgaXMgc2V0LgorICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRmlsZURhdGEoU3VicmVzb3Vy
Y2VMb2FkZXIqLCBpbnQgLypsZW5ndGhSZWNlaXZlZCovKSB7IH0gLy8gT25seSBjYWxsZWQgaWYg
cmVxdWVzdC5kb3dubG9hZFRvRmlsZSBpcyBzZXQuCiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2Vp
dmVDYWNoZWRNZXRhZGF0YShTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IGNoYXIqLCBpbnQgLyps
ZW5ndGhSZWNlaXZlZCovKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhT
dWJyZXNvdXJjZUxvYWRlciopIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKFN1YnJlc291
cmNlTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpIHsgfQotICAgIAorCiAgICAgdmlydHVh
bCBib29sIGdldFNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKFN1YnJlc291cmNlTG9hZGVyKiwg
Ym9vbCYgLypzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSovKSB7IHJldHVybiBmYWxzZTsgfQog
ICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoU3VicmVz
b3VyY2VMb2FkZXIqLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpIHsgfQogICAgIHZp
cnR1YWwgdm9pZCByZWNlaXZlZENhbmNlbGxhdGlvbihTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0
IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikgeyB9CkluZGV4OiBXZWJDb3JlL2xvYWRlci9UaHJl
YWRhYmxlTG9hZGVyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvVGhyZWFk
YWJsZUxvYWRlckNsaWVudC5oCShyZXZpc2lvbiA2NjEzOSkKKysrIFdlYkNvcmUvbG9hZGVyL1Ro
cmVhZGFibGVMb2FkZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTEgKzQxLDExIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFNlbmREYXRhKHVu
c2lnbmVkIGxvbmcgbG9uZyAvKmJ5dGVzU2VudCovLCB1bnNpZ25lZCBsb25nIGxvbmcgLyp0b3Rh
bEJ5dGVzVG9CZVNlbnQqLykgeyB9CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVS
ZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgeyB9Ci0gICAgICAgIHZpcnR1YWwgdm9p
ZCBkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiwgaW50IC8qbGVuZ3RoUmVjZWl2ZWQqLykgeyB9
CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiwgaW50IC8q
bGVuZ3RoUmVjZWl2ZWQqLykgeyB9IC8vIE5vdCBjYWxsZWQgd2hlbiByZXF1ZXN0LmRvd25sb2Fk
VG9GaWxlCisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRmlsZURhdGEoaW50IC8qIGxl
bmd0aFJlY2VpdmVkKi8pIHsgfSAvLyBPbmx5IGNhbGxlZCBmb3IgcmVxdWVzdC5kb3dubG9hZFRv
RmlsZQogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25n
IC8qaWRlbnRpZmllciovKSB7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoY29uc3Qg
UmVzb3VyY2VFcnJvciYpIHsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbFJlZGlyZWN0
Q2hlY2soKSB7IH0KLQogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0
aW9uQ2FuY2VsbGF0aW9uKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSB7IH0KIAogICAgIHByb3Rl
Y3RlZDoKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1RocmVhZGFibGVMb2FkZXJDbGllbnRXcmFwcGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvVGhyZWFkYWJsZUxvYWRlckNsaWVudFdy
YXBwZXIuaAkocmV2aXNpb24gNjYxMzkpCisrKyBXZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxlTG9h
ZGVyQ2xpZW50V3JhcHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3NCwxMiBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVEYXRh
KGRhdGEsIGxlbmd0aFJlY2VpdmVkKTsKICAgICAgICAgfQogCisgICAgICAgIHZvaWQgZGlkUmVj
ZWl2ZUZpbGVEYXRhKGludCBsZW5ndGhSZWNlaXZlZCkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKG1fY2xpZW50KQorICAgICAgICAgICAgICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlRmlsZURh
dGEobGVuZ3RoUmVjZWl2ZWQpOworICAgICAgICB9CisKICAgICAgICAgdm9pZCBkaWRGaW5pc2hM
b2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikKICAgICAgICAgewogICAgICAgICAgICAg
bV9kb25lID0gdHJ1ZTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1dvcmtlclRocmVhZGFibGVMb2Fk
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1dvcmtlclRocmVhZGFibGVMb2Fk
ZXIuY3BwCShyZXZpc2lvbiA2NjEzOSkKKysrIFdlYkNvcmUvbG9hZGVyL1dvcmtlclRocmVhZGFi
bGVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsNiArMTkxLDEyIEBAIHN0YXRpYyB2
b2lkIHdvcmtlckNvbnRleHREaWRSZWNlaXZlRGF0YSgKICAgICB3b3JrZXJDbGllbnRXcmFwcGVy
LT5kaWRSZWNlaXZlRGF0YSh2ZWN0b3JEYXRhLT5kYXRhKCksIHZlY3RvckRhdGEtPnNpemUoKSk7
CiB9CiAKK3N0YXRpYyB2b2lkIHdvcmtlckNvbnRleHREaWRSZWNlaXZlRmlsZURhdGEoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUmVmUHRyPFRocmVhZGFibGVMb2FkZXJDbGllbnRX
cmFwcGVyPiB3b3JrZXJDbGllbnRXcmFwcGVyLCBpbnQgbGVuZ3RoUmVjZWl2ZWQpCit7CisgICAg
QVNTRVJUX1VOVVNFRChjb250ZXh0LCBjb250ZXh0LT5pc1dvcmtlckNvbnRleHQoKSk7CisgICAg
d29ya2VyQ2xpZW50V3JhcHBlci0+ZGlkUmVjZWl2ZUZpbGVEYXRhKGxlbmd0aFJlY2VpdmVkKTsK
K30KKwogdm9pZCBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQnJpZGdlOjpkaWRS
ZWNlaXZlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoUmVjZWl2ZWQpCiB7CiAgICAg
T3duUHRyPFZlY3RvcjxjaGFyPiA+IHZlY3RvciA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8Y2hhcj4o
bGVuZ3RoUmVjZWl2ZWQpKTsgLy8gbmVlZHMgdG8gYmUgYW4gT3duUHRyIGZvciB1c2FnZSB3aXRo
IGNyZWF0ZUNhbGxiYWNrVGFzay4KQEAgLTE5OCw2ICsyMDQsMTEgQEAgdm9pZCBXb3JrZXJUaHJl
YWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQgogICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tGb3JN
b2RlVG9Xb3JrZXJDb250ZXh0KGNyZWF0ZUNhbGxiYWNrVGFzaygmd29ya2VyQ29udGV4dERpZFJl
Y2VpdmVEYXRhLCBtX3dvcmtlckNsaWVudFdyYXBwZXIsIHZlY3Rvci5yZWxlYXNlKCkpLCBtX3Rh
c2tNb2RlKTsKIH0KIAordm9pZCBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQnJp
ZGdlOjpkaWRSZWNlaXZlRmlsZURhdGEoaW50IGxlbmd0aFJlY2VpdmVkKQoreworICAgIG1fbG9h
ZGVyUHJveHkucG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KGNyZWF0ZUNhbGxiYWNrVGFz
aygmd29ya2VyQ29udGV4dERpZFJlY2VpdmVGaWxlRGF0YSwgbV93b3JrZXJDbGllbnRXcmFwcGVy
LCBsZW5ndGhSZWNlaXZlZCksIG1fdGFza01vZGUpOworfQorCiBzdGF0aWMgdm9pZCB3b3JrZXJD
b250ZXh0RGlkRmluaXNoTG9hZGluZyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBS
ZWZQdHI8VGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXI+IHdvcmtlckNsaWVudFdyYXBwZXIs
IHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikKIHsKICAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQs
IGNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1dvcmtl
clRocmVhZGFibGVMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9Xb3JrZXJU
aHJlYWRhYmxlTG9hZGVyLmgJKHJldmlzaW9uIDY2MTM5KQorKysgV2ViQ29yZS9sb2FkZXIvV29y
a2VyVGhyZWFkYWJsZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNiArMTE0LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFNlbmREYXRh
KHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5
dGVzVG9CZVNlbnQpOwogICAgICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25z
ZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CiAgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZGlk
UmVjZWl2ZURhdGEoY29uc3QgY2hhciosIGludCBsZW5ndGhSZWNlaXZlZCk7CisgICAgICAgICAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUZpbGVEYXRhKGludCBsZW5ndGhSZWNlaXZlZCk7CiAg
ICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nIGlk
ZW50aWZpZXIpOwogICAgICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3Vy
Y2VFcnJvciYpOwogICAgICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWxSZWRpcmVjdENoZWNr
KCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVz
dEJhc2UuY3BwCShyZXZpc2lvbiA2NjEzOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZVJlcXVlc3RCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQCBQ
YXNzT3duUHRyPFJlc291cmNlUmVxdWVzdD4gUmVzb3VyY2VSZXF1CiAgICAgcmVxdWVzdC0+c2V0
Rmlyc3RQYXJ0eUZvckNvb2tpZXMoZGF0YS0+bV9maXJzdFBhcnR5Rm9yQ29va2llcyk7CiAgICAg
cmVxdWVzdC0+c2V0SFRUUE1ldGhvZChkYXRhLT5tX2h0dHBNZXRob2QpOwogICAgIHJlcXVlc3Qt
PnNldFRhcmdldFR5cGUoZGF0YS0+bV90YXJnZXRUeXBlKTsKKyAgICByZXF1ZXN0LT5zZXREb3du
bG9hZFRvRmlsZShkYXRhLT5tX2Rvd25sb2FkVG9GaWxlKTsKIAogICAgIHJlcXVlc3QtPnVwZGF0
ZVJlc291cmNlUmVxdWVzdCgpOwogICAgIHJlcXVlc3QtPm1faHR0cEhlYWRlckZpZWxkcy5hZG9w
dChkYXRhLT5tX2h0dHBIZWFkZXJzLnJlbGVhc2UoKSk7CkBAIC03OCw2ICs3OSw3IEBAIFBhc3NP
d25QdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlcXVlc3REYXQKICAgICBkYXRhLT5tX2h0dHBNZXRo
b2QgPSBodHRwTWV0aG9kKCkuY3Jvc3NUaHJlYWRTdHJpbmcoKTsKICAgICBkYXRhLT5tX2h0dHBI
ZWFkZXJzID0gaHR0cEhlYWRlckZpZWxkcygpLmNvcHlEYXRhKCk7CiAgICAgZGF0YS0+bV90YXJn
ZXRUeXBlID0gbV90YXJnZXRUeXBlOworICAgIGRhdGEtPm1fZG93bmxvYWRUb0ZpbGUgPSBtX2Rv
d25sb2FkVG9GaWxlOwogCiAgICAgZGF0YS0+bV9yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVu
Y29kaW5nRmFsbGJhY2tBcnJheS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fcmVzcG9uc2VDb250
ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkuc2l6ZSgpKTsKICAgICBzaXplX3Qg
ZW5jb2RpbmdBcnJheVNpemUgPSBtX3Jlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdG
YWxsYmFja0FycmF5LnNpemUoKTsKQEAgLTM0MCw3ICszNDIsMTAgQEAgYm9vbCBlcXVhbElnbm9y
aW5nSGVhZGVyRmllbGRzKGNvbnN0IFJlcwogICAgIAogICAgIGlmIChhLmFsbG93Q29va2llcygp
ICE9IGIuYWxsb3dDb29raWVzKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKworICAg
IGlmIChhLmRvd25sb2FkVG9GaWxlKCkgIT0gYi5kb3dubG9hZFRvRmlsZSgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKICAgICBGb3JtRGF0YSogZm9ybURhdGFBID0gYS5odHRwQm9keSgpOwog
ICAgIEZvcm1EYXRhKiBmb3JtRGF0YUIgPSBiLmh0dHBCb2R5KCk7CiAgICAgCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmgJKHJldmlzaW9u
IDY2MTM5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMTQwLDYgKzE0MCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIFRhcmdldFR5cGUgdGFyZ2V0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0
VHlwZTsgfQogICAgICAgICB2b2lkIHNldFRhcmdldFR5cGUoVGFyZ2V0VHlwZSB0eXBlKSB7IG1f
dGFyZ2V0VHlwZSA9IHR5cGU7IH0KIAorICAgICAgICAvLyBJZiB0cnVlLCB0aGUgcmVzcG9uc2Ug
Ym9keSB3aWxsIGJlIGRvd25sb2FkZWQgdG8gYSBmaWxlIG1hbmFnZWQgYnkgdGhlIG5ldHdvcmsg
bGF5ZXIuCisgICAgICAgIC8vIFNlZSBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6ZG93bmxvYWRlZEZp
bGVQYXRoLgorICAgICAgICBib29sIGRvd25sb2FkVG9GaWxlKCkgY29uc3QgeyByZXR1cm4gbV9k
b3dubG9hZFRvRmlsZTsgfQorICAgICAgICB2b2lkIHNldERvd25sb2FkVG9GaWxlKGJvb2wgZG93
bmxvYWQpIHsgbV9kb3dubG9hZFRvRmlsZSA9IGRvd25sb2FkOyB9CisKICAgICBwcm90ZWN0ZWQ6
CiAgICAgICAgIC8vIFVzZWQgd2hlbiBSZXNvdXJjZVJlcXVlc3QgaXMgaW5pdGlhbGl6ZWQgZnJv
bSBhIHBsYXRmb3JtIHJlcHJlc2VudGF0aW9uIG9mIHRoZSByZXF1ZXN0CiAgICAgICAgIFJlc291
cmNlUmVxdWVzdEJhc2UoKQpAQCAtMTQ4LDYgKzE1Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgICAgICwgbV9yZXBvcnRVcGxvYWRQcm9ncmVzcyhmYWxzZSkKICAgICAgICAgICAg
ICwgbV9yZXBvcnRMb2FkVGltaW5nKGZhbHNlKQogICAgICAgICAgICAgLCBtX3RhcmdldFR5cGUo
VGFyZ2V0SXNTdWJyZXNvdXJjZSkKKyAgICAgICAgICAgICwgbV9kb3dubG9hZFRvRmlsZShmYWxz
ZSkKICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTE2Miw2ICsxNjgsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgICAgICAsIG1fcmVwb3J0VXBsb2FkUHJvZ3Jlc3MoZmFsc2UpCiAg
ICAgICAgICAgICAsIG1fcmVwb3J0TG9hZFRpbWluZyhmYWxzZSkKICAgICAgICAgICAgICwgbV90
YXJnZXRUeXBlKFRhcmdldElzU3VicmVzb3VyY2UpCisgICAgICAgICAgICAsIG1fZG93bmxvYWRU
b0ZpbGUoZmFsc2UpCiAgICAgICAgIHsKICAgICAgICAgfQogCkBAIC0xODMsNiArMTkwLDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIG1fcmVwb3J0VXBsb2FkUHJvZ3Jlc3M7
CiAgICAgICAgIGJvb2wgbV9yZXBvcnRMb2FkVGltaW5nOwogICAgICAgICBUYXJnZXRUeXBlIG1f
dGFyZ2V0VHlwZTsKKyAgICAgICAgYm9vbCBtX2Rvd25sb2FkVG9GaWxlOwogCiAgICAgcHJpdmF0
ZToKICAgICAgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBhc1Jlc291cmNlUmVxdWVzdCgpIGNv
bnN0OwpAQCAtMjA2LDYgKzIxNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUmVm
UHRyPEZvcm1EYXRhPiBtX2h0dHBCb2R5OwogICAgICAgICBib29sIG1fYWxsb3dDb29raWVzOwog
ICAgICAgICBSZXNvdXJjZVJlcXVlc3RCYXNlOjpUYXJnZXRUeXBlIG1fdGFyZ2V0VHlwZTsKKyAg
ICAgICAgYm9vbCBtX2Rvd25sb2FkVG9GaWxlOwogICAgIH07CiAgICAgCiAgICAgdW5zaWduZWQg
aW5pdGlhbGl6ZU1heGltdW1IVFRQQ29ubmVjdGlvbkNvdW50UGVySG9zdCgpOwpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwCShy
ZXZpc2lvbiA2NjEzOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3Bv
bnNlQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw2ICsxMDcsNyBAQCBQYXNzT3duUHRy
PFJlc291cmNlUmVzcG9uc2U+IFJlc291cmNlUmVzCiAgICAgcmVzcG9uc2UtPm1faHR0cEhlYWRl
ckZpZWxkcy5hZG9wdChkYXRhLT5tX2h0dHBIZWFkZXJzLnJlbGVhc2UoKSk7CiAgICAgcmVzcG9u
c2UtPnNldExhc3RNb2RpZmllZERhdGUoZGF0YS0+bV9sYXN0TW9kaWZpZWREYXRlKTsKICAgICBy
ZXNwb25zZS0+c2V0UmVzb3VyY2VMb2FkVGltaW5nKGRhdGEtPm1fcmVzb3VyY2VMb2FkVGltaW5n
LnJlbGVhc2UoKSk7CisgICAgcmVzcG9uc2UtPnNldERvd25sb2FkRmlsZVBhdGgoZGF0YS0+bV9k
b3dubG9hZEZpbGVQYXRoKTsKIAogICAgIHJldHVybiByZXNwb25zZS5yZWxlYXNlKCk7CiB9CkBA
IC0xMjUsNiArMTI2LDcgQEAgUGFzc093blB0cjxDcm9zc1RocmVhZFJlc291cmNlUmVzcG9uc2VE
YQogICAgIGRhdGEtPm1fbGFzdE1vZGlmaWVkRGF0ZSA9IGxhc3RNb2RpZmllZERhdGUoKTsKICAg
ICBpZiAobV9yZXNvdXJjZUxvYWRUaW1pbmcpCiAgICAgICAgIGRhdGEtPm1fcmVzb3VyY2VMb2Fk
VGltaW5nID0gbV9yZXNvdXJjZUxvYWRUaW1pbmctPmRlZXBDb3B5KCk7CisgICAgZGF0YS0+bV9k
b3dubG9hZEZpbGVQYXRoID0gZG93bmxvYWRGaWxlUGF0aCgpLmNyb3NzVGhyZWFkU3RyaW5nKCk7
CiAgICAgcmV0dXJuIGRhdGEucmVsZWFzZSgpOwogfQogCkBAIC01MTUsNiArNTE3LDIwIEBAIHZv
aWQgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnNldFJlc291cmNlTG8KICAgICBtX3Jlc291cmNlTG9h
ZFRpbWluZyA9IHJlc291cmNlTG9hZFRpbWluZzsKIH0KIAorY29uc3QgU3RyaW5nJiBSZXNvdXJj
ZVJlc3BvbnNlQmFzZTo6ZG93bmxvYWRGaWxlUGF0aCgpIGNvbnN0Cit7CisgICAgbGF6eUluaXQo
KTsKKworICAgIHJldHVybiBtX2Rvd25sb2FkRmlsZVBhdGg7Cit9CisKK3ZvaWQgUmVzb3VyY2VS
ZXNwb25zZUJhc2U6OnNldERvd25sb2FkRmlsZVBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKQorewor
ICAgIGxhenlJbml0KCk7CisKKyAgICBtX2Rvd25sb2FkRmlsZVBhdGggID0gcGF0aDsKK30KKwog
dm9pZCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6bGF6eUluaXQoKSBjb25zdAogewogICAgIGNvbnN0
X2Nhc3Q8UmVzb3VyY2VSZXNwb25zZSo+KHN0YXRpY19jYXN0PGNvbnN0IFJlc291cmNlUmVzcG9u
c2UqPih0aGlzKSktPnBsYXRmb3JtTGF6eUluaXQoKTsKQEAgLTU0NCw2ICs1NjAsOCBAQCBib29s
IFJlc291cmNlUmVzcG9uc2VCYXNlOjpjb21wYXJlKGNvbnN0CiAgICAgICAgIHJldHVybiBSZXNv
dXJjZVJlc3BvbnNlOjpwbGF0Zm9ybUNvbXBhcmUoYSwgYik7CiAgICAgaWYgKGEucmVzb3VyY2VM
b2FkVGltaW5nKCkgIT0gYi5yZXNvdXJjZUxvYWRUaW1pbmcoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmIChhLmRvd25sb2FkRmlsZVBhdGgoKSAhPSBiLmRvd25sb2FkRmlsZVBhdGgo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBSZXNvdXJjZVJlc3BvbnNlOjpw
bGF0Zm9ybUNvbXBhcmUoYSwgYik7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5oCShyZXZpc2lvbiA2NjEzOSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDksNiArMTA5LDEyIEBAIHB1YmxpYzoKICAgICBSZXNvdXJjZUxvYWRUaW1pbmcqIHJl
c291cmNlTG9hZFRpbWluZygpIGNvbnN0OwogICAgIHZvaWQgc2V0UmVzb3VyY2VMb2FkVGltaW5n
KFBhc3NSZWZQdHI8UmVzb3VyY2VMb2FkVGltaW5nPik7CiAKKyAgICAvLyBUaGlzIGluZGljYXRl
cyB0aGUgbG9jYXRpb24gb2YgYSBkb3dubG9hZGVkIHJlc3BvbnNlIGlmIHRoZQorICAgIC8vIFJl
c291cmNlUmVxdWVzdCBoYWQgdGhlIGRvd25sb2FkVG9GaWxlIGZsYWcgc2V0IHRvIHRydWUuCisg
ICAgLy8gVEJEOiBIb3cgaXMgdGhlIGxpZmV0aW1lIG9mIHRoaXMgZmlsZSBpcyBtYW5hZ2VkPwor
ICAgIGNvbnN0IFN0cmluZyYgZG93bmxvYWRGaWxlUGF0aCgpIGNvbnN0OworICAgIHZvaWQgc2V0
RG93bmxvYWRGaWxlUGF0aChjb25zdCBTdHJpbmcmIHBhdGgpOworCiAgICAgLy8gVGhlIFJlc291
cmNlUmVzcG9uc2Ugc3ViY2xhc3MgbWF5ICJzaGFkb3ciIHRoaXMgbWV0aG9kIHRvIHByb3ZpZGUg
cGxhdGZvcm0tc3BlY2lmaWMgbWVtb3J5IHVzYWdlIGluZm9ybWF0aW9uCiAgICAgdW5zaWduZWQg
bWVtb3J5VXNhZ2UoKSBjb25zdAogICAgIHsKQEAgLTE0Myw2ICsxNDksNyBAQCBwcm90ZWN0ZWQ6
CiAgICAgdW5zaWduZWQgbV9jb25uZWN0aW9uSUQ7CiAgICAgYm9vbCBtX2Nvbm5lY3Rpb25SZXVz
ZWQgOiAxOwogICAgIFJlZlB0cjxSZXNvdXJjZUxvYWRUaW1pbmc+IG1fcmVzb3VyY2VMb2FkVGlt
aW5nOworICAgIFN0cmluZyBtX2Rvd25sb2FkRmlsZVBhdGg7CiAKICAgICBib29sIG1faXNOdWxs
IDogMTsKICAgICAKQEAgLTE4MCw2ICsxODcsNyBAQCBzdHJ1Y3QgQ3Jvc3NUaHJlYWRSZXNvdXJj
ZVJlc3BvbnNlRGF0YSA6CiAgICAgT3duUHRyPENyb3NzVGhyZWFkSFRUUEhlYWRlck1hcERhdGE+
IG1faHR0cEhlYWRlcnM7CiAgICAgdGltZV90IG1fbGFzdE1vZGlmaWVkRGF0ZTsKICAgICBSZWZQ
dHI8UmVzb3VyY2VMb2FkVGltaW5nPiBtX3Jlc291cmNlTG9hZFRpbWluZzsKKyAgICBTdHJpbmcg
bV9kb3dubG9hZEZpbGVQYXRoOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCShyZXZpc2lvbiA2NjEzOSkKKysrIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNCBAQAorMjAxMC0wOC0yNiAgTWljaGFlbCBOb3Jk
bWFuICA8bWljaGFlbG5AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgImRvd25sb2FkVG9GaWxlIiB0byBS
ZXNvdXJjZVJlcXVlc3RCYXNlIGFuZCBSZXNvdXJjZVJlc3BvbnNlQmFzZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ3MjIKKyAgICAgICAgLSBNb3Zl
ZCBzdG9yYWdlIGZvciB0aGVzZSBkYXRhIG1lbWJlcnMgZnJvbSBvdXIgV2ViS2l0QVBJIGNsYXNz
ZXMKKyAgICAgICAgICB0byB0aGUgV2ViQ29yZSBjbGFzc2VzLgorCisgICAgICAgICogc3JjL1dl
YlVSTFJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXF1ZXN0UHJpdmF0ZUlt
cGw6OldlYlVSTFJlcXVlc3RQcml2YXRlSW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJl
cXVlc3Q6OmRvd25sb2FkVG9GaWxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVxdWVzdDo6
c2V0RG93bmxvYWRUb0ZpbGUpOgorICAgICAgICAqIHNyYy9XZWJVUkxSZXF1ZXN0UHJpdmF0ZS5o
OgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXF1ZXN0UHJpdmF0ZTo6V2ViVVJMUmVxdWVzdFBy
aXZhdGUpOgorICAgICAgICAqIHNyYy9XZWJVUkxSZXNwb25zZS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYlVSTFJlc3BvbnNlUHJpdmF0ZUltcGw6OldlYlVSTFJlc3BvbnNlUHJpdmF0ZUltcGwp
OgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXNwb25zZTo6ZG93bmxvYWRGaWxlUGF0aCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlVSTFJlc3BvbnNlOjpzZXREb3dubG9hZEZpbGVQYXRoKToKKyAg
ICAgICAgKiBzcmMvV2ViVVJMUmVzcG9uc2VQcml2YXRlLmg6CisKIDIwMTAtMDgtMjYgIFJ5b3N1
a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBT
ZWlkZWwuCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlVSTFJlcXVlc3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVxdWVzdC5jcHAJKHJldmlzaW9u
IDY2MTM5KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXF1ZXN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTYsNyArNTYsNiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBtX3Jlc291
cmNlUmVxdWVzdCA9ICZtX3Jlc291cmNlUmVxdWVzdEFsbG9jYXRpb247CiAgICAgICAgIG1fYWxs
b3dTdG9yZWRDcmVkZW50aWFscyA9IHAtPm1fYWxsb3dTdG9yZWRDcmVkZW50aWFsczsKLSAgICAg
ICAgbV9kb3dubG9hZFRvRmlsZSA9IHAtPm1fZG93bmxvYWRUb0ZpbGU7CiAgICAgfQogCiAgICAg
dmlydHVhbCB2b2lkIGRpc3Bvc2UoKSB7IGRlbGV0ZSB0aGlzOyB9CkBAIC0yNDksMTIgKzI0OCwx
MiBAQCB2b2lkIFdlYlVSTFJlcXVlc3Q6OnNldEFwcENhY2hlSG9zdElEKGluCiAKIGJvb2wgV2Vi
VVJMUmVxdWVzdDo6ZG93bmxvYWRUb0ZpbGUoKSBjb25zdAogewotICAgIHJldHVybiBtX3ByaXZh
dGUtPm1fZG93bmxvYWRUb0ZpbGU7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJl
cXVlc3QtPmRvd25sb2FkVG9GaWxlKCk7CiB9CiAKIHZvaWQgV2ViVVJMUmVxdWVzdDo6c2V0RG93
bmxvYWRUb0ZpbGUoYm9vbCBkb3dubG9hZFRvRmlsZSkKIHsKLSAgICBtX3ByaXZhdGUtPm1fZG93
bmxvYWRUb0ZpbGUgPSBkb3dubG9hZFRvRmlsZTsKKyAgICBtX3ByaXZhdGUtPm1fcmVzb3VyY2VS
ZXF1ZXN0LT5zZXREb3dubG9hZFRvRmlsZShkb3dubG9hZFRvRmlsZSk7CiB9CiAKIFJlc291cmNl
UmVxdWVzdCYgV2ViVVJMUmVxdWVzdDo6dG9NdXRhYmxlUmVzb3VyY2VSZXF1ZXN0KCkKSW5kZXg6
IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVxdWVzdFByaXZhdGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlVSTFJlcXVlc3RQcml2YXRlLmgJKHJldmlzaW9uIDY2
MTM5KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXF1ZXN0UHJpdmF0ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOSwxNyArMzksMTMgQEAgY2xhc3MgV2ViVVJMUmVxdWVzdFByaXZhdGUg
ewogcHVibGljOgogICAgIFdlYlVSTFJlcXVlc3RQcml2YXRlKCkKICAgICAgICAgOiBtX3Jlc291
cmNlUmVxdWVzdCgwKQotICAgICAgICAsIG1fYWxsb3dTdG9yZWRDcmVkZW50aWFscyh0cnVlKQot
ICAgICAgICAsIG1fZG93bmxvYWRUb0ZpbGUoZmFsc2UpIHsgfQorICAgICAgICAsIG1fYWxsb3dT
dG9yZWRDcmVkZW50aWFscyh0cnVlKSB7IH0KIAogICAgIC8vIENhbGxlZCBieSBXZWJVUkxSZXF1
ZXN0IHdoZW4gaXQgbm8gbG9uZ2VyIG5lZWRzIHRoaXMgb2JqZWN0LgogICAgIHZpcnR1YWwgdm9p
ZCBkaXNwb3NlKCkgPSAwOwogCiAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0KiBtX3Jlc291
cmNlUmVxdWVzdDsKICAgICBib29sIG1fYWxsb3dTdG9yZWRDcmVkZW50aWFsczsKLQotICAgIC8v
IEZJWE1FOiBNb3ZlIHRoaXMgdG8gUmVzb3VyY2VSZXF1ZXN0IG9uY2Ugd2UgaGF2ZSBhbiBpbnRl
cm5hbCBjb25zdW1lci4KLSAgICBib29sIG1fZG93bmxvYWRUb0ZpbGU7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVzcG9uc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVzcG9uc2UuY3Bw
CShyZXZpc2lvbiA2NjEzOSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVzcG9uc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw2IEBAIHB1YmxpYzoKICAgICAgICAgOiBt
X3Jlc291cmNlUmVzcG9uc2VBbGxvY2F0aW9uKCpwLT5tX3Jlc291cmNlUmVzcG9uc2UpCiAgICAg
ewogICAgICAgICBtX3Jlc291cmNlUmVzcG9uc2UgPSAmbV9yZXNvdXJjZVJlc3BvbnNlQWxsb2Nh
dGlvbjsKLSAgICAgICAgbV9kb3dubG9hZEZpbGVQYXRoID0gcC0+bV9kb3dubG9hZEZpbGVQYXRo
OwogICAgIH0KIAogICAgIHZpcnR1YWwgdm9pZCBkaXNwb3NlKCkgeyBkZWxldGUgdGhpczsgfQpA
QCAtMzY1LDEyICszNjQsMTIgQEAgdm9pZCBXZWJVUkxSZXNwb25zZTo6c2V0SXNNdWx0aXBhcnRQ
YXlsbwogCiBXZWJTdHJpbmcgV2ViVVJMUmVzcG9uc2U6OmRvd25sb2FkRmlsZVBhdGgoKSBjb25z
dAogewotICAgIHJldHVybiBtX3ByaXZhdGUtPm1fZG93bmxvYWRGaWxlUGF0aDsKKyAgICByZXR1
cm4gbV9wcml2YXRlLT5tX3Jlc291cmNlUmVzcG9uc2UtPmRvd25sb2FkRmlsZVBhdGgoKTsKIH0K
IAogdm9pZCBXZWJVUkxSZXNwb25zZTo6c2V0RG93bmxvYWRGaWxlUGF0aChjb25zdCBXZWJTdHJp
bmcmIGRvd25sb2FkRmlsZVBhdGgpCiB7Ci0gICAgbV9wcml2YXRlLT5tX2Rvd25sb2FkRmlsZVBh
dGggPSBkb3dubG9hZEZpbGVQYXRoOworICAgIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNl
LT5zZXREb3dubG9hZEZpbGVQYXRoKGRvd25sb2FkRmlsZVBhdGgpOwogfQogCiB2b2lkIFdlYlVS
TFJlc3BvbnNlOjphc3NpZ24oV2ViVVJMUmVzcG9uc2VQcml2YXRlKiBwKQpJbmRleDogV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJVUkxSZXNwb25zZVByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlVSTFJlc3BvbnNlUHJpdmF0ZS5oCShyZXZpc2lvbiA2NjEzOSkK
KysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVzcG9uc2VQcml2YXRlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ1LDkgKzQ1LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaXNwb3Nl
KCkgPSAwOwogCiAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSogbV9yZXNvdXJjZVJlc3Bv
bnNlOwotCi0gICAgLy8gRklYTUU6IE1vdmUgdGhpcyB0byBSZXNvdXJjZVJlc3BvbnNlIG9uY2Ug
d2UgaGF2ZSBhbiBpbnRlcm5hbCBjb25zdW1lci4KLSAgICBXZWJTdHJpbmcgbV9kb3dubG9hZEZp
bGVQYXRoOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69878</attachid>
            <date>2010-10-05 19:58:49 -0700</date>
            <delta_ts>2010-10-05 20:31:04 -0700</delta_ts>
            <desc>downloadAsBlob</desc>
            <filename>downloadAsBlob.txt</filename>
            <type>text/plain</type>
            <size>62365</size>
            <attacher name="Michael Nordman">michaeln</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTE2NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTA1IEBACisyMDEwLTEwLTA1ICBNaWNoYWVsIE5vcmRtYW4gIDxtaWNoYWVsbkBn
b29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZCBzdXBwb3J0IGZvciBnZXR0aW5nIHRoZSByZXN1bHQgb2YgYSByZXNvdXJjZSByZXF1
ZXN0IGFzIGEgYmxvYiwKKyAgICAgICAgYW5kIHVzZSB0aGF0IGNhcGFiaWxpdHkgaW4gc3VwcG9y
dCBvZiBYbWxIdHRwUmVxdWVzdC5yZXNwb25zZUJsb2IuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDcyMgorICAgICAgICAqIFJlc291cmNlSGFuZGxl
IGtub3dzIGhvdyB0byBkZWxpdmVyIGEgcmVzcG9uc2UgYXMgYSBibG9iLiBUbyBhc2sgaXQgdG8g
ZG8gc28sCisgICAgICAgICAgY2FsbCByZXF1ZXN0LnNldERvd25sb2FkQXNCbG9iKHRydWUpIHBy
aW9yIHRvIHN0YXJ0aW5nIGFuIGFzeW5jIFJlc291cmNlSGFuZGxlLAorICAgICAgICAgIG9yIGNh
bGwgbG9hZFJlc291cmNlU3luY2hyb25vdXNseUFzQmxvYigpIGZvciB0aGUgc3luYyBjYXNlLgor
ICAgICAgICAqIFJlc291cmNlSGFuZGxlQ2xpZW50IGhhcyBuZXcgaW50ZXJmYWNlcyBmb3IgdXNl
IGluIHRoZSBhc3luYyBjYXNlLgorICAgICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVC
bG9iRGF0YShSZXNvdXJjZUhhbmRsZSosIGludCk7ICAvLyBubyBkYXRhIHB0ciBpcyBwcm92aWRl
ZAorICAgICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmdCbG9iKFJlc291cmNl
SGFuZGxlKiwgZG91YmxlIC8qZmluaXNoVGltZSovLCBQYXNzUmVmUHRyPEJsb2I+KTsKKyAgICAg
ICAgKiBUaHJlYWRhYmxlTG9hZGVyIGFsc28ga25vd3MgaG93IHRvIGRlbGl2ZXIgYSByZXNwb25z
ZSBhcyBhIGJsb2I7IGFuZAorICAgICAgICAgIHNpbWlsYXJseSwgdGhlIFRocmVhZGFibGVMb2Fk
ZXJDbGllbnQgaGFzICBncm93biB0d28gbmV3IGNhbGxiYWNrIG1ldGhvZHMuCisgICAgICAgICog
RnJhbWVMb2FkZXIgaGFzIGFsc28gZ3Jvd24gYSBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5QXNC
bG9iKCkgbWV0aG9kLgorICAgICAgICAqIFhtbEh0dHBSZXF1ZXN0IGlzIGEgVGhyZWFkYWJsZUxv
YWRlckNsaWVudCB3aGljaCB1c2VzIHJlcXVlc3Quc2V0RG93bmxvYWRBc0Jsb2IoKSBhbmQKKyAg
ICAgICAgICByZWNlaXZlcyB0aGUgcmVzdWx0IGluIGRpZEZpbmlzaExvYWRpbmdCbG9iKCkuCisg
ICAgICAgICogVGhlcmUncyBhIGZhaXIgYW1vdW50IG9mIG1lY2hhbmljYWwgcGx1bWJpbmcgdGhy
b3VnaG91dCAidGhlIGxvYWRlciIgdG8gZ2V0IHRoZSBjbGllbnQKKyAgICAgICAgICBtZXRob2Qg
Y2FsbHMgZnJvbSB0aGUgcmVzb3VyY2UgaGFuZGxlIGFsbCB0aGUgd2F5IHRocnUgdG8gdGhlIHRo
cmVhZGFibGUgbG9hZGVyIGNsaWVudC4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgZmVh
dHVyZSBpc24ndCBmdW5jdGlvbmFsIHlldCBpbiBhbnkgcG9ydC4KKworICAgICAgICAqIGxvYWRl
ci9Eb2N1bWVudExvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6
c3Vic3RpdHV0ZVJlc291cmNlRGVsaXZlcnlUaW1lckZpcmVkKToKKyAgICAgICAgKiBsb2FkZXIv
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
VGhyZWFkYWJsZUxvYWRlcjo6ZGlkUmVjZWl2ZUJsb2JEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZ0Jsb2IpOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVxdWVzdCk6CisgICAg
ICAgICogbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oOgorICAgICAgICAqIGxvYWRl
ci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZFJl
c291cmNlU3luY2hyb25vdXNseSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9h
ZFJlc291cmNlU3luY2hyb25vdXNseUFzQmxvYik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxv
YWRlcjo6cHJlcGFyZVN5bmNSZXFldXN0KToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIu
aDoKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmdCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nT25lUGFydCk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUxvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUJsb2JEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YUNvbW1vbik6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUxvYWRlcjo6Y3JlYXRlQXN5bmNGaWxlU3RyZWFtKToKKyAgICAgICAgKiBsb2FkZXIvUmVz
b3VyY2VMb2FkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyOjpkaWRSZWNl
aXZlQmxvYkRhdGEpOgorICAgICAgICAqIGxvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUJsb2JEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OlN1YnJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OlN1YnJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nQmxv
Yik6CisgICAgICAgIChXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGlu
Z0NvbW1vbik6CisgICAgICAgICogbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmg6CisgICAgICAg
ICogbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyQ2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpT
dWJyZXNvdXJjZUxvYWRlckNsaWVudDo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6U3VicmVzb3VyY2VMb2FkZXJDbGllbnQ6OmRpZFJlY2VpdmVCbG9iRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlckNsaWVudDo6ZGlkRmluaXNoTG9hZGluZ0Jsb2Ip
OgorICAgICAgICAqIGxvYWRlci9UaHJlYWRhYmxlTG9hZGVyQ2xpZW50Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpUaHJlYWRhYmxlTG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpUaHJlYWRhYmxlTG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlQmxvYkRhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6VGhyZWFkYWJsZUxvYWRlckNsaWVudDo6ZGlkRmluaXNoTG9hZGlu
Z0Jsb2IpOgorICAgICAgICAqIGxvYWRlci9UaHJlYWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBlci5o
OgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXI6OmRpZFJl
Y2VpdmVCbG9iRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlTG9hZGVyQ2xpZW50
V3JhcHBlcjo6ZGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxl
TG9hZGVyQ2xpZW50V3JhcHBlcjo6ZGlkRmluaXNoTG9hZGluZ0Jsb2IpOgorICAgICAgICAqIGxv
YWRlci9Xb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ondvcmtl
ckNvbnRleHREaWRSZWNlaXZlQmxvYkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhy
ZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEJyaWRnZTo6ZGlkUmVjZWl2ZUJsb2JEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2U6
OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6d29ya2VyQ29udGV4dERpZEZp
bmlzaExvYWRpbmdCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVMb2Fk
ZXI6Ok1haW5UaHJlYWRCcmlkZ2U6OmRpZEZpbmlzaExvYWRpbmdCbG9iKToKKyAgICAgICAgKiBs
b2FkZXIvV29ya2VyVGhyZWFkYWJsZUxvYWRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VIYW5kbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6
OmNhY2hlTWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmxvYWRS
ZXNvdXJjZVN5bmNocm9ub3VzbHlBc0Jsb2IpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VIYW5kbGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFu
ZGxlQ2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUNsaWVudDo6ZGlk
UmVjZWl2ZUJsb2JEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ2xpZW50
OjpkaWRGaW5pc2hMb2FkaW5nQmxvYik6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNv
dXJjZVJlcXVlc3RCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJh
c2U6OmFkb3B0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OmNvcHlE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmVxdWFsSWdub3JpbmdIZWFkZXJGaWVsZHMpOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6ZG93bmxvYWRBc0Jsb2IpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6c2V0RG93bmxvYWRBc0Jsb2IpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlcXVlc3QuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6ZG93bmxvYWRUb0ZpbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0OjpzZXREb3dubG9hZFRvRmlsZSk6CisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlc3BvbnNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2U6OmRvd25sb2FkRmlsZVBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZTo6c2V0RG93bmxvYWRGaWxlUGF0aCk6CisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlc3BvbnNlLmg6CisgICAg
ICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBS
ZXF1ZXN0OjpjcmVhdGVSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0
OjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0Ojpk
aWRGaW5pc2hMb2FkaW5nQmxvYik6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6
ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmRpZFJl
Y2VpdmVCbG9iRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6ZGlkUmVj
ZWl2ZURhdGFDb21tb24pOgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5oOgorCiAyMDEw
LTEwLTA1ICBWaWN0b3JpYSBLaXJzdCAgPHZya0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEphbWVzIFJvYmluc29uLgpJbmRleDogV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2Fk
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAko
cmV2aXNpb24gNjkxNDEpCisrKyBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU2Miw3ICs1NjIsOCBAQCB2b2lkIERvY3VtZW50TG9hZGVyOjpzdWJz
dGl0dXRlUmVzb3VyY2VECiAgICAgICAgIAogICAgICAgICBpZiAocmVzb3VyY2UpIHsKICAgICAg
ICAgICAgIFNoYXJlZEJ1ZmZlciogZGF0YSA9IHJlc291cmNlLT5kYXRhKCk7Ci0gICAgICAgIAor
CisgICAgICAgICAgICAvLyBUT0RPKG1pY2hhZWxuKTogZG93bmxvYWRBc0Jsb2IsIHdyYXAgYSBi
bG9iIGFyb3VuZCB0aGUgZGF0YQogICAgICAgICAgICAgbG9hZGVyLT5kaWRSZWNlaXZlUmVzcG9u
c2UocmVzb3VyY2UtPnJlc3BvbnNlKCkpOwogICAgICAgICAgICAgbG9hZGVyLT5kaWRSZWNlaXZl
RGF0YShkYXRhLT5kYXRhKCksIGRhdGEtPnNpemUoKSwgZGF0YS0+c2l6ZSgpLCB0cnVlKTsKICAg
ICAgICAgICAgIGxvYWRlci0+ZGlkRmluaXNoTG9hZGluZygwKTsKSW5kZXg6IFdlYkNvcmUvbG9h
ZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9s
b2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAkocmV2aXNpb24gNjkxNDEpCisrKyBX
ZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMjgsNiArMjI4LDE4IEBAIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRS
ZWNlaXYKICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZURhdGEoZGF0YSwgbGVuZ3RoUmVjZWl2ZWQp
OwogfQogCit2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkUmVjZWl2ZUJsb2JEYXRh
KFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIGludCBsZW5ndGhSZWNlaXZlZCkKK3sKKyAgICBB
U1NFUlQobV9jbGllbnQpOworICAgIEFTU0VSVF9VTlVTRUQobG9hZGVyLCBsb2FkZXIgPT0gbV9s
b2FkZXIpOworCisgICAgLy8gSWdub3JlIHJlc3BvbnNlIGJvZHkgb2YgcHJlZmxpZ2h0IHJlcXVl
c3RzLgorICAgIGlmIChtX2FjdHVhbFJlcXVlc3QpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
Y2xpZW50LT5kaWRSZWNlaXZlQmxvYkRhdGEobGVuZ3RoUmVjZWl2ZWQpOworfQorCiB2b2lkIERv
Y3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyhTdWJyZXNvdXJjZUxvYWRl
ciogbG9hZGVyKQogewogICAgIEFTU0VSVChsb2FkZXIgPT0gbV9sb2FkZXIpOwpAQCAtMjM1LDYg
KzI0NywxMyBAQCB2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkRmluaXNoCiAgICAg
ZGlkRmluaXNoTG9hZGluZyhsb2FkZXItPmlkZW50aWZpZXIoKSk7CiB9CiAKK3ZvaWQgRG9jdW1l
bnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nQmxvYihTdWJyZXNvdXJjZUxvYWRl
ciogbG9hZGVyLCBQYXNzUmVmUHRyPEJsb2I+IGJsb2IpCit7CisgICAgQVNTRVJUKGxvYWRlciA9
PSBtX2xvYWRlcik7CisgICAgQVNTRVJUKG1fY2xpZW50KTsKKyAgICBkaWRGaW5pc2hMb2FkaW5n
QmxvYihsb2FkZXItPmlkZW50aWZpZXIoKSwgYmxvYik7Cit9CisKIHZvaWQgRG9jdW1lbnRUaHJl
YWRhYmxlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikK
IHsKICAgICBpZiAobV9hY3R1YWxSZXF1ZXN0KSB7CkBAIC0yNDUsNiArMjY0LDE2IEBAIHZvaWQg
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRGaW5pc2gKICAgICAgICAgbV9jbGllbnQtPmRp
ZEZpbmlzaExvYWRpbmcoaWRlbnRpZmllcik7CiB9CiAKK3ZvaWQgRG9jdW1lbnRUaHJlYWRhYmxl
TG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nQmxvYih1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIFBh
c3NSZWZQdHI8QmxvYj4gYmxvYikKK3sKKyAgICBpZiAobV9hY3R1YWxSZXF1ZXN0KSB7CisgICAg
ICAgIEFTU0VSVCghbV9zYW1lT3JpZ2luUmVxdWVzdCk7CisgICAgICAgIEFTU0VSVChtX29wdGlv
bnMuY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5ID09IFVzZUFjY2Vzc0NvbnRyb2wpOworICAgICAg
ICBwcmVmbGlnaHRTdWNjZXNzKCk7CisgICAgfSBlbHNlCisgICAgICAgIG1fY2xpZW50LT5kaWRG
aW5pc2hMb2FkaW5nQmxvYihpZGVudGlmaWVyLCBibG9iKTsKK30KKwogdm9pZCBEb2N1bWVudFRo
cmVhZGFibGVMb2FkZXI6OmRpZEZhaWwoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgY29uc3Qg
UmVzb3VyY2VFcnJvciYgZXJyb3IpCiB7CiAgICAgQVNTRVJUKG1fY2xpZW50KTsKQEAgLTMyNywx
MSArMzU2LDE2IEBAIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVxdWUKICAg
ICBTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscyA9IG1fb3B0aW9ucy5hbGxvd0Ny
ZWRlbnRpYWxzID8gQWxsb3dTdG9yZWRDcmVkZW50aWFscyA6IERvTm90QWxsb3dTdG9yZWRDcmVk
ZW50aWFsczsKIAogICAgIFZlY3RvcjxjaGFyPiBkYXRhOworICAgIFJlZlB0cjxCbG9iPiBkYXRh
QXNCbG9iOwogICAgIFJlc291cmNlRXJyb3IgZXJyb3I7CiAgICAgUmVzb3VyY2VSZXNwb25zZSBy
ZXNwb25zZTsKICAgICB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIgPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPHVuc2lnbmVkIGxvbmc+OjptYXgoKTsKLSAgICBpZiAobV9kb2N1bWVudC0+ZnJhbWUoKSkK
LSAgICAgICAgaWRlbnRpZmllciA9IG1fZG9jdW1lbnQtPmZyYW1lKCktPmxvYWRlcigpLT5sb2Fk
UmVzb3VyY2VTeW5jaHJvbm91c2x5KHJlcXVlc3QsIHN0b3JlZENyZWRlbnRpYWxzLCBlcnJvciwg
cmVzcG9uc2UsIGRhdGEpOworICAgIGlmIChtX2RvY3VtZW50LT5mcmFtZSgpKSB7CisgICAgICAg
IGlmIChyZXF1ZXN0LmRvd25sb2FkQXNCbG9iKCkpCisgICAgICAgICAgICBkYXRhQXNCbG9iID0g
bV9kb2N1bWVudC0+ZnJhbWUoKS0+bG9hZGVyKCktPmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHlB
c0Jsb2IocmVxdWVzdCwgc3RvcmVkQ3JlZGVudGlhbHMsIGVycm9yLCByZXNwb25zZSwgaWRlbnRp
Zmllcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlkZW50aWZpZXIgPSBtX2RvY3VtZW50
LT5mcmFtZSgpLT5sb2FkZXIoKS0+bG9hZFJlc291cmNlU3luY2hyb25vdXNseShyZXF1ZXN0LCBz
dG9yZWRDcmVkZW50aWFscywgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKKyAgICB9CiAKICAgICAv
LyBObyBleGNlcHRpb24gZm9yIGZpbGU6Ly8vIHJlc291cmNlcywgc2VlIDxyZGFyOi8vcHJvYmxl
bS80OTYyMjk4Pi4KICAgICAvLyBBbHNvLCBpZiB3ZSBoYXZlIGFuIEhUVFAgcmVzcG9uc2UsIHRo
ZW4gaXQgd2Fzbid0IGEgbmV0d29yayBlcnJvciBpbiBmYWN0LgpAQCAtMzUwLDExICszODQsMTUg
QEAgdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXF1ZQogCiAgICAgZGlkUmVj
ZWl2ZVJlc3BvbnNlKDAsIHJlc3BvbnNlKTsKIAotICAgIGNvbnN0IGNoYXIqIGJ5dGVzID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEuZGF0YSgpKTsKLSAgICBpbnQgbGVuID0gc3RhdGlj
X2Nhc3Q8aW50PihkYXRhLnNpemUoKSk7Ci0gICAgZGlkUmVjZWl2ZURhdGEoMCwgYnl0ZXMsIGxl
bik7CisgICAgaWYgKHJlcXVlc3QuZG93bmxvYWRBc0Jsb2IoKSkgeworICAgICAgIGRpZEZpbmlz
aExvYWRpbmdCbG9iKGlkZW50aWZpZXIsIGRhdGFBc0Jsb2IucmVsZWFzZSgpKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBjb25zdCBjaGFyKiBieXRlcyA9IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIq
PihkYXRhLmRhdGEoKSk7CisgICAgICAgIGludCBsZW4gPSBzdGF0aWNfY2FzdDxpbnQ+KGRhdGEu
c2l6ZSgpKTsKKyAgICAgICAgZGlkUmVjZWl2ZURhdGEoMCwgYnl0ZXMsIGxlbik7CisgICAgICAg
IGRpZEZpbmlzaExvYWRpbmcoaWRlbnRpZmllcik7CisgICAgfQogCi0gICAgZGlkRmluaXNoTG9h
ZGluZyhpZGVudGlmaWVyKTsKIH0KIAogYm9vbCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6Omlz
QWxsb3dlZFJlZGlyZWN0KGNvbnN0IEtVUkwmIHVybCkKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0Rv
Y3VtZW50VGhyZWFkYWJsZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0Rv
Y3VtZW50VGhyZWFkYWJsZUxvYWRlci5oCShyZXZpc2lvbiA2OTE0MSkKKysrIFdlYkNvcmUvbG9h
ZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3
NCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVj
ZWl2ZVJlc3BvbnNlKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYp
OwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoU3VicmVzb3VyY2VMb2FkZXIq
LCBjb25zdCBjaGFyKiwgaW50IGxlbmd0aFJlY2VpdmVkKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IGRpZFJlY2VpdmVCbG9iRGF0YShTdWJyZXNvdXJjZUxvYWRlciosIGludCAvKmxlbmd0aFJlY2Vp
dmVkKi8pOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhTdWJyZXNvdXJj
ZUxvYWRlciopOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZ0Jsb2IoU3Vi
cmVzb3VyY2VMb2FkZXIqLCBQYXNzUmVmUHRyPEJsb2I+KTsKICAgICAgICAgdmlydHVhbCB2b2lk
IGRpZEZhaWwoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBSZXNvdXJjZUVycm9yJik7CiAKICAg
ICAgICAgdmlydHVhbCBib29sIGdldFNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKFN1YnJlc291
cmNlTG9hZGVyKiwgYm9vbCYgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UpOwpAQCAtODIsNiAr
ODQsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCByZWNlaXZl
ZENhbmNlbGxhdGlvbihTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlJik7CiAKICAgICAgICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcg
aWRlbnRpZmllcik7CisgICAgICAgIHZvaWQgZGlkRmluaXNoTG9hZGluZ0Jsb2IodW5zaWduZWQg
bG9uZyBpZGVudGlmaWVyLCBQYXNzUmVmUHRyPEJsb2I+KTsKKwogICAgICAgICB2b2lkIG1ha2VT
aW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0KTsKICAgICAgICAgdm9pZCBtYWtlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0V2l0aFByZWZs
aWdodChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpOwogICAgICAgICB2b2lkIHByZWZs
aWdodFN1Y2Nlc3MoKTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDY5MTQx
KQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NzM5LDYgKzI3MzksNDkgQEAgdm9pZCBGcmFtZUxvYWRlcjo6bG9hZFBvc3RSZXF1ZXN0KGNvbnN0
CiAKIHVuc2lnbmVkIGxvbmcgRnJhbWVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHko
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRD
cmVkZW50aWFscywgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3Bv
bnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEpCiB7CisgICAgQVNTRVJUKCFyZXF1ZXN0LmRvd25sb2Fk
QXNCbG9iKCkpOworICAgIFJlc291cmNlUmVxdWVzdCBhY3R1YWxSZXF1ZXN0OworICAgIHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllciA9IHByZXBhcmVTeW5jUmVxZXVzdChyZXF1ZXN0LCBzdG9yZWRD
cmVkZW50aWFscywgZXJyb3IsIGFjdHVhbFJlcXVlc3QpOworICAgIGlmIChlcnJvci5pc051bGwo
KSkgeworICAgICAgICBBU1NFUlQoIWFjdHVhbFJlcXVlc3QuaXNOdWxsKCkpOworICAgICAgICAK
KyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorICAgICAgICBpZiAoIWRvY3Vt
ZW50TG9hZGVyKCktPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPm1heWJlTG9hZFN5bmNocm9ub3Vz
bHkoYWN0dWFsUmVxdWVzdCwgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKSkgeworI2VuZGlmCisgICAg
ICAgICAgICBSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShuZXR3b3Jr
aW5nQ29udGV4dCgpLCBhY3R1YWxSZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFscywgZXJyb3IsIHJl
c3BvbnNlLCBkYXRhKTsKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorICAg
ICAgICAgICAgZG9jdW1lbnRMb2FkZXIoKS0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+bWF5YmVM
b2FkRmFsbGJhY2tTeW5jaHJvbm91c2x5KGFjdHVhbFJlcXVlc3QsIGVycm9yLCByZXNwb25zZSwg
ZGF0YSk7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKyAgICBub3RpZmllcigpLT5zZW5kUmVt
YWluaW5nRGVsZWdhdGVNZXNzYWdlcyhtX2RvY3VtZW50TG9hZGVyLmdldCgpLCBpZGVudGlmaWVy
LCByZXNwb25zZSwgZGF0YS5zaXplKCksIGVycm9yKTsKKyAgICByZXR1cm4gaWRlbnRpZmllcjsK
K30KKworUGFzc1JlZlB0cjxCbG9iPiBGcmFtZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25v
dXNseUFzQmxvYihjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRp
YWxzIHN0b3JlZENyZWRlbnRpYWxzLCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNw
b25zZSYgcmVzcG9uc2UsIHVuc2lnbmVkIGxvbmcmIGlkZW50aWZpZXIpCit7CisgICAgQVNTRVJU
KHJlcXVlc3QuZG93bmxvYWRBc0Jsb2IoKSk7CisgICAgUmVzb3VyY2VSZXF1ZXN0IGFjdHVhbFJl
cXVlc3Q7CisgICAgaWRlbnRpZmllciA9IHByZXBhcmVTeW5jUmVxZXVzdChyZXF1ZXN0LCBzdG9y
ZWRDcmVkZW50aWFscywgZXJyb3IsIGFjdHVhbFJlcXVlc3QpOworICAgIFJlZlB0cjxCbG9iPiBk
YXRhQXNCbG9iOworICAgIGlmIChlcnJvci5pc051bGwoKSkgeworICAgICAgICBBU1NFUlQoIWFj
dHVhbFJlcXVlc3QuaXNOdWxsKCkpOworICAgICAgICAKKyNpZiAwIC8vIEVOQUJMRShPRkZMSU5F
X1dFQl9BUFBMSUNBVElPTlMpIC8vIEZJWE1FOiBzdXBwb3J0IGZvciBhcHBjYWNoZWQgcmVzb3Vy
Y2VzCisgICAgICAgIGlmICghZG9jdW1lbnRMb2FkZXIoKS0+YXBwbGljYXRpb25DYWNoZUhvc3Qo
KS0+bWF5YmVMb2FkU3luY2hyb25vdXNseShhY3R1YWxSZXF1ZXN0LCBlcnJvciwgcmVzcG9uc2Us
IGRhdGEpKSB7CisjZW5kaWYKKyAgICAgICAgICAgIGRhdGFBc0Jsb2IgPSBSZXNvdXJjZUhhbmRs
ZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseUFzQmxvYihuZXR3b3JraW5nQ29udGV4dCgpLCBh
Y3R1YWxSZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFscywgZXJyb3IsIHJlc3BvbnNlKTsKKyNpZiAw
IC8vRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyAgICAgICAgICAgIGRvY3VtZW50
TG9hZGVyKCktPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPm1heWJlTG9hZEZhbGxiYWNrU3luY2hy
b25vdXNseShhY3R1YWxSZXF1ZXN0LCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOworICAgICAgICB9
CisjZW5kaWYKKyAgICB9CisgICAgbm90aWZpZXIoKS0+c2VuZFJlbWFpbmluZ0RlbGVnYXRlTWVz
c2FnZXMobV9kb2N1bWVudExvYWRlci5nZXQoKSwgaWRlbnRpZmllciwgcmVzcG9uc2UsIGRhdGFB
c0Jsb2IgPyBkYXRhQXNCbG9iLT5zaXplKCkgOiAwLCBlcnJvcik7CisgICAgcmV0dXJuIGRhdGFB
c0Jsb2I7Cit9CisKK3Vuc2lnbmVkIGxvbmcgRnJhbWVMb2FkZXI6OnByZXBhcmVTeW5jUmVxZXVz
dChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzIHN0b3Jl
ZENyZWRlbnRpYWxzLCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXF1ZXN0JiBhY3R1
YWxSZXF1ZXN0KQorewogICAgIFN0cmluZyByZWZlcnJlciA9IG1fb3V0Z29pbmdSZWZlcnJlcjsK
ICAgICBpZiAoU2VjdXJpdHlPcmlnaW46OnNob3VsZEhpZGVSZWZlcnJlcihyZXF1ZXN0LnVybCgp
LCByZWZlcnJlcikpCiAgICAgICAgIHJlZmVycmVyID0gU3RyaW5nKCk7CkBAIC0yNzUzLDI3ICsy
Nzk2LDEyIEBAIHVuc2lnbmVkIGxvbmcgRnJhbWVMb2FkZXI6OmxvYWRSZXNvdXJjZVMKICAgICBp
ZiAoUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKSkKICAgICAgICAgaW5pdGlhbFJlcXVlc3Qu
c2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMocGFnZS0+bWFpbkZyYW1lKCktPmxvYWRlcigpLT5kb2N1
bWVudExvYWRlcigpLT5yZXF1ZXN0KCkudXJsKCkpOwogICAgIGluaXRpYWxSZXF1ZXN0LnNldEhU
VFBVc2VyQWdlbnQoY2xpZW50KCktPnVzZXJBZ2VudChyZXF1ZXN0LnVybCgpKSk7Ci0gICAgCisK
ICAgICBhZGRFeHRyYUZpZWxkc1RvU3VicmVzb3VyY2VSZXF1ZXN0KGluaXRpYWxSZXF1ZXN0KTsK
IAogICAgIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciA9IDA7ICAgIAotICAgIFJlc291cmNlUmVx
dWVzdCBuZXdSZXF1ZXN0KGluaXRpYWxSZXF1ZXN0KTsKLSAgICByZXF1ZXN0RnJvbURlbGVnYXRl
KG5ld1JlcXVlc3QsIGlkZW50aWZpZXIsIGVycm9yKTsKLQotICAgIGlmIChlcnJvci5pc051bGwo
KSkgewotICAgICAgICBBU1NFUlQoIW5ld1JlcXVlc3QuaXNOdWxsKCkpOwotICAgICAgICAKLSNp
ZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQotICAgICAgICBpZiAoIWRvY3VtZW50
TG9hZGVyKCktPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPm1heWJlTG9hZFN5bmNocm9ub3VzbHko
bmV3UmVxdWVzdCwgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKSkgewotI2VuZGlmCi0gICAgICAgICAg
ICBSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShuZXR3b3JraW5nQ29u
dGV4dCgpLCBuZXdSZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFscywgZXJyb3IsIHJlc3BvbnNlLCBk
YXRhKTsKLSNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQotICAgICAgICAgICAg
ZG9jdW1lbnRMb2FkZXIoKS0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+bWF5YmVMb2FkRmFsbGJh
Y2tTeW5jaHJvbm91c2x5KG5ld1JlcXVlc3QsIGVycm9yLCByZXNwb25zZSwgZGF0YSk7Ci0gICAg
ICAgIH0KLSNlbmRpZgotICAgIH0KLQotICAgIG5vdGlmaWVyKCktPnNlbmRSZW1haW5pbmdEZWxl
Z2F0ZU1lc3NhZ2VzKG1fZG9jdW1lbnRMb2FkZXIuZ2V0KCksIGlkZW50aWZpZXIsIHJlc3BvbnNl
LCBkYXRhLnNpemUoKSwgZXJyb3IpOworICAgIGFjdHVhbFJlcXVlc3QgPSBpbml0aWFsUmVxdWVz
dDsKKyAgICByZXF1ZXN0RnJvbURlbGVnYXRlKGFjdHVhbFJlcXVlc3QsIGlkZW50aWZpZXIsIGVy
cm9yKTsKICAgICByZXR1cm4gaWRlbnRpZmllcjsKIH0KIApJbmRleDogV2ViQ29yZS9sb2FkZXIv
RnJhbWVMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5o
CShyZXZpc2lvbiA2OTE0MSkKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBB
cmNoaXZlOwogY2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVuZ2U7CitjbGFzcyBCbG9iOwogY2xh
c3MgQ2FjaGVkRnJhbWVCYXNlOwogY2xhc3MgQ2FjaGVkUGFnZTsKIGNsYXNzIENhY2hlZFJlc291
cmNlOwpAQCAtMTIzLDYgKzEyNCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCByZXBvcnRM
b2NhbExvYWRGYWlsZWQoRnJhbWUqLCBjb25zdCBTdHJpbmcmIHVybCk7CiAKICAgICB1bnNpZ25l
ZCBsb25nIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jiwg
U3RvcmVkQ3JlZGVudGlhbHMsIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVj
dG9yPGNoYXI+JiBkYXRhKTsKKyAgICBQYXNzUmVmUHRyPEJsb2I+IGxvYWRSZXNvdXJjZVN5bmNo
cm9ub3VzbHlBc0Jsb2IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHMs
IFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgdW5zaWduZWQgbG9uZyYpOworICAg
IHVuc2lnbmVkIGxvbmcgcHJlcGFyZVN5bmNSZXFldXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYs
IFN0b3JlZENyZWRlbnRpYWxzLCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXF1ZXN0JiBhY3R1
YWxSZXF1ZXN0KTsKIAogICAgIGJvb2wgY2FuSGFuZGxlUmVxdWVzdChjb25zdCBSZXNvdXJjZVJl
cXVlc3QmKTsKIApJbmRleDogV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gNjkx
NDEpCisrKyBXZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI3OSwxOCArMjc5LDIxIEBAIHZvaWQgUmVzb3VyY2VMb2FkZXI6OndpbGxTdG9wQnVmZmVy
aW5nRGEKIAogdm9pZCBSZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyhkb3VibGUgZmlu
aXNoVGltZSkKIHsKLSAgICAvLyBJZiBsb2FkIGhhcyBiZWVuIGNhbmNlbGxlZCBhZnRlciBmaW5p
c2hpbmcgKHdoaWNoIGNvdWxkIGhhcHBlbiB3aXRoIGEgCi0gICAgLy8gSmF2YVNjcmlwdCB0aGF0
IGNoYW5nZXMgdGhlIHdpbmRvdyBsb2NhdGlvbiksIGRvIG5vdGhpbmcuCi0gICAgaWYgKG1fY2Fu
Y2VsbGVkKQotICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKCFtX3JlYWNoZWRUZXJtaW5hbFN0
YXRlKTsKKyAgICBkaWRGaW5pc2hMb2FkaW5nT25lUGFydChmaW5pc2hUaW1lKTsKKyAgICByZWxl
YXNlUmVzb3VyY2VzKCk7Cit9CiAKK3ZvaWQgUmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRp
bmdCbG9iKGRvdWJsZSBmaW5pc2hUaW1lLCBQYXNzUmVmUHRyPEJsb2I+KQoreworICAgIC8vIEZJ
WE1FOiBtdWx0aXBhcnQgYW5kIGFzQmxvYj8KICAgICBkaWRGaW5pc2hMb2FkaW5nT25lUGFydChm
aW5pc2hUaW1lKTsKICAgICByZWxlYXNlUmVzb3VyY2VzKCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VM
b2FkZXI6OmRpZEZpbmlzaExvYWRpbmdPbmVQYXJ0KGRvdWJsZSBmaW5pc2hUaW1lKQogeworICAg
IC8vIElmIGxvYWQgaGFzIGJlZW4gY2FuY2VsbGVkIGFmdGVyIGZpbmlzaGluZyAod2hpY2ggY291
bGQgaGFwcGVuIHdpdGggYSAKKyAgICAvLyBKYXZhU2NyaXB0IHRoYXQgY2hhbmdlcyB0aGUgd2lu
ZG93IGxvY2F0aW9uKSwgZG8gbm90aGluZy4KICAgICBpZiAobV9jYW5jZWxsZWQpCiAgICAgICAg
IHJldHVybjsKICAgICBBU1NFUlQoIW1fcmVhY2hlZFRlcm1pbmFsU3RhdGUpOwpAQCAtMzkxLDYg
KzM5NCw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkZXI6OndpbGxTZW5kUmVxdWVzdChSZXMKICAgICBp
ZiAoZG9jdW1lbnRMb2FkZXIoKS0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+bWF5YmVMb2FkRmFs
bGJhY2tGb3JSZWRpcmVjdCh0aGlzLCByZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKSkKICAgICAg
ICAgcmV0dXJuOwogI2VuZGlmCisgICAgQVNTRVJUKHJlcXVlc3QuZG93bmxvYWRBc0Jsb2IoKSA9
PSBtX3JlcXVlc3QuZG93bmxvYWRBc0Jsb2IoKSk7CiAgICAgd2lsbFNlbmRSZXF1ZXN0KHJlcXVl
c3QsIHJlZGlyZWN0UmVzcG9uc2UpOwogfQogCkBAIC00MjQsNiArNDI4LDE2IEBAIHZvaWQgUmVz
b3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZSgKIAogdm9pZCBSZXNvdXJjZUxvYWRlcjo6
ZGlkUmVjZWl2ZURhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVu
Z3RoLCBpbnQgbGVuZ3RoUmVjZWl2ZWQpCiB7CisgICAgZGlkUmVjZWl2ZURhdGFDb21tb24oZmFs
c2UsIGRhdGEsIGxlbmd0aCwgbGVuZ3RoUmVjZWl2ZWQpOworfQorCit2b2lkIFJlc291cmNlTG9h
ZGVyOjpkaWRSZWNlaXZlQmxvYkRhdGEoUmVzb3VyY2VIYW5kbGUqLCBpbnQgbGVuZ3RoKQorewor
ICAgIGRpZFJlY2VpdmVEYXRhQ29tbW9uKHRydWUsIDAsIGxlbmd0aCwgMCk7Cit9CisKK3ZvaWQg
UmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVEYXRhQ29tbW9uKGJvb2wgaXNCbG9iRGF0YSwgY29u
c3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCwgaW50IGxlbmd0aFJlY2VpdmVkKQorewogI2lmIEVO
QUJMRShJTlNQRUNUT1IpCiAgICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6Omluc3RhbmNl
Q291bnQoKSkgewogICAgICAgICBJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50
ID0gKG1fZnJhbWUgJiYgbV9mcmFtZS0+cGFnZSgpKSA/IG1fZnJhbWUtPnBhZ2UoKS0+aW5zcGVj
dG9yVGltZWxpbmVBZ2VudCgpIDogMDsKQEAgLTQzMSw3ICs0NDUsMTAgQEAgdm9pZCBSZXNvdXJj
ZUxvYWRlcjo6ZGlkUmVjZWl2ZURhdGEoUmVzbwogICAgICAgICAgICAgdGltZWxpbmVBZ2VudC0+
d2lsbFJlY2VpdmVSZXNvdXJjZURhdGEoaWRlbnRpZmllcigpKTsKICAgICB9CiAjZW5kaWYKLSAg
ICBkaWRSZWNlaXZlRGF0YShkYXRhLCBsZW5ndGgsIGxlbmd0aFJlY2VpdmVkLCBmYWxzZSk7Cisg
ICAgaWYgKCFpc0Jsb2JEYXRhKQorICAgICAgICBkaWRSZWNlaXZlRGF0YShkYXRhLCBsZW5ndGgs
IGxlbmd0aFJlY2VpdmVkLCBmYWxzZSk7CisgICAgZWxzZQorICAgICAgICBkaWRSZWNlaXZlQmxv
YkRhdGEobGVuZ3RoKTsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIGlmIChJbnNwZWN0b3JU
aW1lbGluZUFnZW50OjppbnN0YW5jZUNvdW50KCkpIHsKICAgICAgICAgSW5zcGVjdG9yVGltZWxp
bmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IChtX2ZyYW1lICYmIG1fZnJhbWUtPnBhZ2UoKSkgPyBt
X2ZyYW1lLT5wYWdlKCktPmluc3BlY3RvclRpbWVsaW5lQWdlbnQoKSA6IDA7CkBAIC00NDYsNiAr
NDYzLDExIEBAIHZvaWQgUmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcoUmUKICAgICBk
aWRGaW5pc2hMb2FkaW5nKGZpbmlzaFRpbWUpOwogfQogCit2b2lkIFJlc291cmNlTG9hZGVyOjpk
aWRGaW5pc2hMb2FkaW5nQmxvYihSZXNvdXJjZUhhbmRsZSosIGRvdWJsZSBmaW5pc2hUaW1lLCBQ
YXNzUmVmUHRyPEJsb2I+IGJsb2IpCit7CisgICAgZGlkRmluaXNoTG9hZGluZ0Jsb2IoZmluaXNo
VGltZSwgYmxvYik7Cit9CisKIHZvaWQgUmVzb3VyY2VMb2FkZXI6OmRpZEZhaWwoUmVzb3VyY2VI
YW5kbGUqLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIHsKICNpZiBFTkFCTEUoT0ZGTElO
RV9XRUJfQVBQTElDQVRJT05TKQpAQCAtNTE3LDYgKzUzOSw4IEBAIHZvaWQgUmVzb3VyY2VMb2Fk
ZXI6OndpbGxDYWNoZVJlc3BvbnNlKFIKICNpZiBFTkFCTEUoQkxPQikKIEFzeW5jRmlsZVN0cmVh
bSogUmVzb3VyY2VMb2FkZXI6OmNyZWF0ZUFzeW5jRmlsZVN0cmVhbShGaWxlU3RyZWFtQ2xpZW50
KiBjbGllbnQpCiB7CisgICAgLy8gRklYTUU6IERlY291cGxlIHRoZSBGaWxlVGhyZWFkIGZyb20g
U2NyaXB0RXhlY3V0aW9uQ29udGV4dHMgYW5kIHJlbW92ZSB0aGlzIG1ldGhvZCBmcm9tIFJlc291
cmNlSGFuZGxlQ2xpZW50LAorICAgIC8vIGNhbGxlcnMgc2hvdWUgYmUgYWJsZSB0byBjcmVhdGUg
YSBGaWxlU3RyZWFtUHJveHkgaW5kZXBlbmRlbnQgb2YgYSBjb250ZXh0LgogICAgIC8vIEl0IGlz
IE9LIHRvIHNpbXBseSByZXR1cm4gYSBwb2ludGVyIHNpbmNlIEZpbGVTdHJlYW1Qcm94eTo6Y3Jl
YXRlIGFkZHMgYW4gZXh0cmEgcmVmLgogICAgIHJldHVybiBGaWxlU3RyZWFtUHJveHk6OmNyZWF0
ZShtX2ZyYW1lLT5kb2N1bWVudCgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIGNsaWVudCku
Z2V0KCk7CiB9CkluZGV4OiBXZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmgJKHJldmlzaW9uIDY5MTQxKQor
KysgV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtODAs
OSArODAsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlk
U2VuZERhdGEodW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25n
IHRvdGFsQnl0ZXNUb0JlU2VudCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVz
cG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlk
UmVjZWl2ZURhdGEoY29uc3QgY2hhciosIGludCwgbG9uZyBsb25nIGxlbmd0aFJlY2VpdmVkLCBi
b29sIGFsbEF0T25jZSk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQmxvYkRhdGEo
aW50KSB7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YShj
b25zdCBjaGFyKiwgaW50KSB7IH0KICAgICAgICAgdm9pZCB3aWxsU3RvcEJ1ZmZlcmluZ0RhdGEo
Y29uc3QgY2hhciosIGludCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5n
KGRvdWJsZSBmaW5pc2hUaW1lKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRp
bmdCbG9iKGRvdWJsZSBmaW5pc2hUaW1lLCBQYXNzUmVmUHRyPEJsb2I+KTsKICAgICAgICAgdmly
dHVhbCB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpOwogCiAgICAgICAgIHZpcnR1
YWwgYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSgpOwpAQCAtOTgsOCArMTAwLDEwIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFNlbmREYXRhKFJl
c291cmNlSGFuZGxlKiwgdW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9u
ZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNl
aXZlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0
IGNoYXIqLCBpbnQsIGludCBsZW5ndGhSZWNlaXZlZCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBk
aWRSZWNlaXZlQmxvYkRhdGEoUmVzb3VyY2VIYW5kbGUqLCBpbnQpOwogICAgICAgICB2aXJ0dWFs
IHZvaWQgZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKFJlc291cmNlSGFuZGxlKiwgY29uc3QgY2hh
ciogZGF0YSwgaW50IGxlbmd0aCkgeyBkaWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEoZGF0YSwgbGVu
Z3RoKTsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhSZXNvdXJjZUhh
bmRsZSosIGRvdWJsZSBmaW5pc2hUaW1lKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlz
aExvYWRpbmdCbG9iKFJlc291cmNlSGFuZGxlKiwgZG91YmxlIC8qZmluaXNoVGltZSovLCBQYXNz
UmVmUHRyPEJsb2I+KTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoUmVzb3VyY2VIYW5k
bGUqLCBjb25zdCBSZXNvdXJjZUVycm9yJik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCB3YXNCbG9j
a2VkKFJlc291cmNlSGFuZGxlKik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBjYW5ub3RTaG93VVJM
KFJlc291cmNlSGFuZGxlKik7CkBAIC0xNDEsNiArMTQ1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBib29sIHJlYWNoZWRUZXJtaW5hbFN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9y
ZWFjaGVkVGVybWluYWxTdGF0ZTsgfQogICAgICAgICBib29sIGNhbmNlbGxlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fY2FuY2VsbGVkOyB9CiAgICAgICAgIGJvb2wgZGVmZXJzTG9hZGluZygpIGNvbnN0
IHsgcmV0dXJuIG1fZGVmZXJzTG9hZGluZzsgfQorICAgICAgICB2b2lkIGRpZFJlY2VpdmVEYXRh
Q29tbW9uKGJvb2wgaXNCbG9iRGF0YSwgY29uc3QgY2hhciosIGludCwgaW50IGxlbmd0aFJlY2Vp
dmVkKTsKIAogICAgICAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IG1faGFuZGxlOwogICAgICAg
ICBSZWZQdHI8RnJhbWU+IG1fZnJhbWU7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJj
ZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2Fk
ZXIuY3BwCShyZXZpc2lvbiA2OTE0MSkKKysrIFdlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9h
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU4LDYgKzE1OCwyMCBAQCB2b2lkIFN1YnJlc291
cmNlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YShjCiAgICAgICAgIG1fY2xpZW50LT5kaWRSZWNlaXZl
RGF0YSh0aGlzLCBkYXRhLCBsZW5ndGgpOwogfQogCit2b2lkIFN1YnJlc291cmNlTG9hZGVyOjpk
aWRSZWNlaXZlQmxvYkRhdGEoaW50IGxlbmd0aCkKK3sKKyAgICAvLyBSZWZlcmVuY2UgdGhlIG9i
amVjdCBpbiB0aGlzIG1ldGhvZCBzaW5jZSB0aGUgYWRkaXRpb25hbCBwcm9jZXNzaW5nIGNhbiBk
bworICAgIC8vIGFueXRoaW5nIGluY2x1ZGluZyByZW1vdmluZyB0aGUgbGFzdCByZWZlcmVuY2Ug
dG8gdGhpcyBvYmplY3Q7IG9uZSBleGFtcGxlIG9mIHRoaXMgaXMgMzI2NjIxNi4KKyAgICBSZWZQ
dHI8U3VicmVzb3VyY2VMb2FkZXI+IHByb3RlY3QodGhpcyk7CisKKyAgICBSZXNvdXJjZUxvYWRl
cjo6ZGlkUmVjZWl2ZUJsb2JEYXRhKGxlbmd0aCk7CisKKyAgICAvLyBBIHN1YnJlc291cmNlIGxv
YWRlciBkb2VzIG5vdCBsb2FkIG11bHRpcGFydCBzZWN0aW9ucyBwcm9ncmVzc2l2ZWx5LgorICAg
IC8vIFNvIGRvbid0IGRlbGl2ZXIgYW55IGRhdGEgdG8gdGhlIGxvYWRlciB5ZXQuCisgICAgaWYg
KCFtX2xvYWRpbmdNdWx0aXBhcnRDb250ZW50ICYmIG1fY2xpZW50KQorICAgICAgICBtX2NsaWVu
dC0+ZGlkUmVjZWl2ZUJsb2JEYXRhKHRoaXMsIGxlbmd0aCk7Cit9CisKIHZvaWQgU3VicmVzb3Vy
Y2VMb2FkZXI6OmRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQg
bGVuZ3RoKQogewogICAgIC8vIFJlZmVyZW5jZSB0aGUgb2JqZWN0IGluIHRoaXMgbWV0aG9kIHNp
bmNlIHRoZSBhZGRpdGlvbmFsIHByb2Nlc3NpbmcgY2FuIGRvCkBAIC0xNzAsNiArMTg0LDE2IEBA
IHZvaWQgU3VicmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVDYWNoZWQKIAogdm9pZCBTdWJyZXNv
dXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyhkb3VibGUgZmluaXNoVGltZSkKIHsKKyAgICBk
aWRGaW5pc2hMb2FkaW5nQ29tbW9uKGZhbHNlLCBmaW5pc2hUaW1lLCAwKTsKK30KKwordm9pZCBT
dWJyZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZ0Jsb2IoZG91YmxlIGZpbmlzaFRpbWUs
IFBhc3NSZWZQdHI8QmxvYj4gYmxvYikKK3sKKyAgICBkaWRGaW5pc2hMb2FkaW5nQ29tbW9uKHRy
dWUsIGZpbmlzaFRpbWUsIGJsb2IpOworfQorCit2b2lkIFN1YnJlc291cmNlTG9hZGVyOjpkaWRG
aW5pc2hMb2FkaW5nQ29tbW9uKGJvb2wgYXNCbG9iLCBkb3VibGUgZmluaXNoVGltZSwgUGFzc1Jl
ZlB0cjxCbG9iPiBibG9iKQorewogICAgIGlmIChjYW5jZWxsZWQoKSkKICAgICAgICAgcmV0dXJu
OwogICAgIEFTU0VSVCghcmVhY2hlZFRlcm1pbmFsU3RhdGUoKSk7CkBAIC0xNzgsMTQgKzIwMiwy
MCBAQCB2b2lkIFN1YnJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nCiAgICAgUmVmUHRy
PFN1YnJlc291cmNlTG9hZGVyPiBwcm90ZWN0KHRoaXMpOwogCiAgICAgaWYgKG1fY2xpZW50KQot
ICAgICAgICBtX2NsaWVudC0+ZGlkRmluaXNoTG9hZGluZyh0aGlzKTsKLSAgICAKKyAgICAgICAg
aWYgKGFzQmxvYikKKyAgICAgICAgICAgIG1fY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nQmxvYih0
aGlzLCBibG9iKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9jbGllbnQtPmRpZEZpbmlz
aExvYWRpbmcodGhpcyk7CisKICAgICBtX2hhbmRsZSA9IDA7CiAKICAgICBpZiAoY2FuY2VsbGVk
KCkpCiAgICAgICAgIHJldHVybjsKICAgICBtX2RvY3VtZW50TG9hZGVyLT5yZW1vdmVTdWJyZXNv
dXJjZUxvYWRlcih0aGlzKTsKLSAgICBSZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyhm
aW5pc2hUaW1lKTsKKyAgICBpZiAoYXNCbG9iKQorICAgICAgICBSZXNvdXJjZUxvYWRlcjo6ZGlk
RmluaXNoTG9hZGluZ0Jsb2IoZmluaXNoVGltZSwgYmxvYik7CisgICAgZWxzZQorICAgICAgICBS
ZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyhmaW5pc2hUaW1lKTsKIH0KIAogdm9pZCBT
dWJyZXNvdXJjZUxvYWRlcjo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKSW5k
ZXg6IFdlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuaAkocmV2aXNpb24gNjkxNDEpCisrKyBXZWJD
b3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxNCAr
NTEsMTggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkU2Vu
ZERhdGEodW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRv
dGFsQnl0ZXNUb0JlU2VudCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9u
c2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVj
ZWl2ZURhdGEoY29uc3QgY2hhciosIGludCwgbG9uZyBsb25nIGxlbmd0aFJlY2VpdmVkLCBib29s
IGFsbEF0T25jZSk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQmxvYkRhdGEoaW50
KTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YShjb25zdCBj
aGFyKiwgaW50KTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoZG91Ymxl
IGZpbmlzaFRpbWUpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZ0Jsb2Io
ZG91YmxlIGZpbmlzaFRpbWUsIFBhc3NSZWZQdHI8QmxvYj4pOwogICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBz
aG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSgpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVj
ZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
Jik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCByZWNlaXZlZENhbmNlbGxhdGlvbihjb25zdCBBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSYpOyAgICAgICAgCiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRD
YW5jZWwoY29uc3QgUmVzb3VyY2VFcnJvciYpOwogCisgICAgICAgIHZvaWQgZGlkRmluaXNoTG9h
ZGluZ0NvbW1vbihib29sIGFzQmxvYiwgZG91YmxlIGZpbmlzaFRpbWUsIFBhc3NSZWZQdHI8Qmxv
Yj4pOworCiAgICAgICAgIFN1YnJlc291cmNlTG9hZGVyQ2xpZW50KiBtX2NsaWVudDsKICAgICAg
ICAgYm9vbCBtX2xvYWRpbmdNdWx0aXBhcnRDb250ZW50OwogICAgIH07CkluZGV4OiBXZWJDb3Jl
L2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
bG9hZGVyL1N1YnJlc291cmNlTG9hZGVyQ2xpZW50LmgJKHJldmlzaW9uIDY5MTQxKQorKysgV2Vi
Q29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MjksNiArMjksOSBAQAogI2lmbmRlZiBTdWJyZXNvdXJjZUxvYWRlckNsaWVudF9oCiAjZGVmaW5l
IFN1YnJlc291cmNlTG9hZGVyQ2xpZW50X2gKIAorI2luY2x1ZGUgIkJsb2IuaCIKKyNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlOwpAQCAtNDYsMTEgKzQ5LDEzIEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgZGlkU2VuZERhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGxv
bmcgLypieXRlc1NlbnQqLywgdW5zaWduZWQgbG9uZyBsb25nIC8qdG90YWxCeXRlc1RvQmVTZW50
Ki8pIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShTdWJyZXNvdXJj
ZUxvYWRlciosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
ZGlkUmVjZWl2ZURhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBjaGFyKiwgaW50IC8qbGVu
Z3RoUmVjZWl2ZWQqLykgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFN1YnJl
c291cmNlTG9hZGVyKiwgY29uc3QgY2hhciosIGludCAvKmxlbmd0aFJlY2VpdmVkKi8pIHsgfSAv
LyBOb3QgY2FsbGVkIGlmIHJlcXVlc3QuZG93bmxvYWRBc0Jsb2IgaXMgc2V0LgorICAgIHZpcnR1
YWwgdm9pZCBkaWRSZWNlaXZlQmxvYkRhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCBpbnQgLypsZW5n
dGhSZWNlaXZlZCovKSB7IH0gLy8gT25seSBjYWxsZWQgaWYgcmVxdWVzdC5kb3dubG9hZEFzQmxv
YiBpcyBzZXQuCiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YShTdWJy
ZXNvdXJjZUxvYWRlciosIGNvbnN0IGNoYXIqLCBpbnQgLypsZW5ndGhSZWNlaXZlZCovKSB7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhTdWJyZXNvdXJjZUxvYWRlciopIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nQmxvYihTdWJyZXNvdXJjZUxvYWRl
ciosIFBhc3NSZWZQdHI8QmxvYj4pIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKFN1YnJl
c291cmNlTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpIHsgfQotICAgIAorCiAgICAgdmly
dHVhbCBib29sIGdldFNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKFN1YnJlc291cmNlTG9hZGVy
KiwgYm9vbCYgLypzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSovKSB7IHJldHVybiBmYWxzZTsg
fQogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoU3Vi
cmVzb3VyY2VMb2FkZXIqLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpIHsgfQogICAg
IHZpcnR1YWwgdm9pZCByZWNlaXZlZENhbmNlbGxhdGlvbihTdWJyZXNvdXJjZUxvYWRlciosIGNv
bnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikgeyB9CkluZGV4OiBXZWJDb3JlL2xvYWRlci9U
aHJlYWRhYmxlTG9hZGVyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvVGhy
ZWFkYWJsZUxvYWRlckNsaWVudC5oCShyZXZpc2lvbiA2OTE0MSkKKysrIFdlYkNvcmUvbG9hZGVy
L1RocmVhZGFibGVMb2FkZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsOSBA
QAogI2lmbmRlZiBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50X2gKICNkZWZpbmUgVGhyZWFkYWJsZUxv
YWRlckNsaWVudF9oCiAKKyNpbmNsdWRlICJCbG9iLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgUmVzb3VyY2VFcnJvcjsK
QEAgLTQxLDggKzQ0LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2
b2lkIGRpZFNlbmREYXRhKHVuc2lnbmVkIGxvbmcgbG9uZyAvKmJ5dGVzU2VudCovLCB1bnNpZ25l
ZCBsb25nIGxvbmcgLyp0b3RhbEJ5dGVzVG9CZVNlbnQqLykgeyB9CiAKICAgICAgICAgdmlydHVh
bCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgeyB9Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiwgaW50IC8qbGVu
Z3RoUmVjZWl2ZWQqLykgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShj
b25zdCBjaGFyKiwgaW50IC8qbGVuZ3RoUmVjZWl2ZWQqLykgeyB9IC8vIE5vdCBjYWxsZWQgd2hl
biByZXF1ZXN0LmRvd25sb2FkQXNCbG9iIGlzIHNldC4KKyAgICAgICAgdmlydHVhbCB2b2lkIGRp
ZFJlY2VpdmVCbG9iRGF0YShpbnQgLyogbGVuZ3RoUmVjZWl2ZWQqLykgeyB9IC8vIE9ubHkgY2Fs
bGVkIGZvciByZXF1ZXN0LmRvd25sb2FkQXNCbG9iCiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRG
aW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcgLyppZGVudGlmaWVyKi8pIHsgfQorICAgICAgICB2
aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZ0Jsb2IodW5zaWduZWQgbG9uZyAvKmlkZW50aWZp
ZXIqLywgUGFzc1JlZlB0cjxCbG9iPikgeyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGYWls
KGNvbnN0IFJlc291cmNlRXJyb3ImKSB7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWxS
ZWRpcmVjdENoZWNrKCkgeyB9CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1RocmVhZGFibGVMb2Fk
ZXJDbGllbnRXcmFwcGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvVGhyZWFkYWJs
ZUxvYWRlckNsaWVudFdyYXBwZXIuaAkocmV2aXNpb24gNjkxNDEpCisrKyBXZWJDb3JlL2xvYWRl
ci9UaHJlYWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw2
ICs3NCwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAgICAgbV9jbGllbnQt
PmRpZFJlY2VpdmVEYXRhKGRhdGEsIGxlbmd0aFJlY2VpdmVkKTsKICAgICAgICAgfQogCisgICAg
ICAgIHZvaWQgZGlkUmVjZWl2ZUJsb2JEYXRhKGludCBsZW5ndGhSZWNlaXZlZCkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKG1fY2xpZW50KQorICAgICAgICAgICAgICAgIG1fY2xpZW50LT5k
aWRSZWNlaXZlQmxvYkRhdGEobGVuZ3RoUmVjZWl2ZWQpOworICAgICAgICB9CisKICAgICAgICAg
dm9pZCBkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikKICAgICAgICAg
ewogICAgICAgICAgICAgbV9kb25lID0gdHJ1ZTsKQEAgLTgxLDYgKzg3LDEzIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgICAgICAgICBtX2NsaWVudC0+ZGlkRmluaXNoTG9hZGluZyhp
ZGVudGlmaWVyKTsKICAgICAgICAgfQogCisgICAgICAgIHZvaWQgZGlkRmluaXNoTG9hZGluZ0Js
b2IodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBQYXNzUmVmUHRyPEJsb2I+IGJsb2IpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG1fZG9uZSA9IHRydWU7CisgICAgICAgICAgICBpZiAobV9jbGll
bnQpCisgICAgICAgICAgICAgICAgbV9jbGllbnQtPmRpZEZpbmlzaExvYWRpbmdCbG9iKGlkZW50
aWZpZXIsIGJsb2IpOworICAgICAgICB9CisKICAgICAgICAgdm9pZCBkaWRGYWlsKGNvbnN0IFJl
c291cmNlRXJyb3ImIGVycm9yKQogICAgICAgICB7CiAgICAgICAgICAgICBtX2RvbmUgPSB0cnVl
OwpJbmRleDogV2ViQ29yZS9sb2FkZXIvV29ya2VyVGhyZWFkYWJsZUxvYWRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvV29ya2VyVGhyZWFkYWJsZUxvYWRlci5jcHAJKHJldmlz
aW9uIDY5MTQxKQorKysgV2ViQ29yZS9sb2FkZXIvV29ya2VyVGhyZWFkYWJsZUxvYWRlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE5MSw2ICsxOTEsMTIgQEAgc3RhdGljIHZvaWQgd29ya2VyQ29u
dGV4dERpZFJlY2VpdmVEYXRhKAogICAgIHdvcmtlckNsaWVudFdyYXBwZXItPmRpZFJlY2VpdmVE
YXRhKHZlY3RvckRhdGEtPmRhdGEoKSwgdmVjdG9yRGF0YS0+c2l6ZSgpKTsKIH0KIAorc3RhdGlj
IHZvaWQgd29ya2VyQ29udGV4dERpZFJlY2VpdmVCbG9iRGF0YShTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBSZWZQdHI8VGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXI+IHdvcmtl
ckNsaWVudFdyYXBwZXIsIGludCBsZW5ndGhSZWNlaXZlZCkKK3sKKyAgICBBU1NFUlRfVU5VU0VE
KGNvbnRleHQsIGNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKTsKKyAgICB3b3JrZXJDbGllbnRX
cmFwcGVyLT5kaWRSZWNlaXZlQmxvYkRhdGEobGVuZ3RoUmVjZWl2ZWQpOworfQorCiB2b2lkIFdv
cmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2U6OmRpZFJlY2VpdmVEYXRhKGNv
bnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGhSZWNlaXZlZCkKIHsKICAgICBPd25QdHI8VmVjdG9y
PGNoYXI+ID4gdmVjdG9yID0gYWRvcHRQdHIobmV3IFZlY3RvcjxjaGFyPihsZW5ndGhSZWNlaXZl
ZCkpOyAvLyBuZWVkcyB0byBiZSBhbiBPd25QdHIgZm9yIHVzYWdlIHdpdGggY3JlYXRlQ2FsbGJh
Y2tUYXNrLgpAQCAtMTk4LDYgKzIwNCwxMSBAQCB2b2lkIFdvcmtlclRocmVhZGFibGVMb2FkZXI6
Ok1haW5UaHJlYWRCCiAgICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckNv
bnRleHQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZ3b3JrZXJDb250ZXh0RGlkUmVjZWl2ZURhdGEsIG1f
d29ya2VyQ2xpZW50V3JhcHBlciwgdmVjdG9yLnJlbGVhc2UoKSksIG1fdGFza01vZGUpOwogfQog
Cit2b2lkIFdvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2U6OmRpZFJlY2Vp
dmVCbG9iRGF0YShpbnQgbGVuZ3RoUmVjZWl2ZWQpCit7CisgICAgbV9sb2FkZXJQcm94eS5wb3N0
VGFza0Zvck1vZGVUb1dvcmtlckNvbnRleHQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZ3b3JrZXJDb250
ZXh0RGlkUmVjZWl2ZUJsb2JEYXRhLCBtX3dvcmtlckNsaWVudFdyYXBwZXIsIGxlbmd0aFJlY2Vp
dmVkKSwgbV90YXNrTW9kZSk7Cit9CisKIHN0YXRpYyB2b2lkIHdvcmtlckNvbnRleHREaWRGaW5p
c2hMb2FkaW5nKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFJlZlB0cjxUaHJlYWRh
YmxlTG9hZGVyQ2xpZW50V3JhcHBlcj4gd29ya2VyQ2xpZW50V3JhcHBlciwgdW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyKQogewogICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwgY29udGV4dC0+aXNX
b3JrZXJDb250ZXh0KCkpOwpAQCAtMjA5LDYgKzIyMCwyMSBAQCB2b2lkIFdvcmtlclRocmVhZGFi
bGVMb2FkZXI6Ok1haW5UaHJlYWRCCiAgICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza0Zvck1vZGVU
b1dvcmtlckNvbnRleHQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZ3b3JrZXJDb250ZXh0RGlkRmluaXNo
TG9hZGluZywgbV93b3JrZXJDbGllbnRXcmFwcGVyLCBpZGVudGlmaWVyKSwgbV90YXNrTW9kZSk7
CiB9CiAKK3N0YXRpYyB2b2lkIHdvcmtlckNvbnRleHREaWRGaW5pc2hMb2FkaW5nQmxvYihTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBSZWZQdHI8VGhyZWFkYWJsZUxvYWRlckNsaWVu
dFdyYXBwZXI+IHdvcmtlckNsaWVudFdyYXBwZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBLVVJMIGJsb2JJ
RCwgU3RyaW5nIHR5cGUsIGxvbmcgbG9uZyBzaXplKQoreworICAgIEFTU0VSVF9VTlVTRUQoY29u
dGV4dCwgY29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpOworICAgIHdvcmtlckNsaWVudFdyYXBw
ZXItPmRpZEZpbmlzaExvYWRpbmdCbG9iKGlkZW50aWZpZXIsIEJsb2I6OmNyZWF0ZShibG9iSUQs
IHR5cGUsIHNpemUpKTsKK30KKwordm9pZCBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhy
ZWFkQnJpZGdlOjpkaWRGaW5pc2hMb2FkaW5nQmxvYih1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIs
IFBhc3NSZWZQdHI8QmxvYj4gYmxvYikKK3sKKyAgICBtX2Rvd25sb2FkZWRCbG9iID0gYmxvYjsK
KyAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyQ29udGV4dCgKKyAgICAg
ICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZ3b3JrZXJDb250ZXh0RGlkRmluaXNoTG9hZGluZ0Jsb2Is
IG1fd29ya2VyQ2xpZW50V3JhcHBlciwgaWRlbnRpZmllciwgYmxvYi0+dXJsKCksIGJsb2ItPnR5
cGUoKSwgYmxvYi0+c2l6ZSgpKSwKKyAgICAgICAgbV90YXNrTW9kZSk7Cit9CisKIHN0YXRpYyB2
b2lkIHdvcmtlckNvbnRleHREaWRGYWlsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IFJlZlB0cjxUaHJlYWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBlcj4gd29ya2VyQ2xpZW50V3JhcHBl
ciwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChjb250
ZXh0LCBjb250ZXh0LT5pc1dvcmtlckNvbnRleHQoKSk7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9X
b3JrZXJUaHJlYWRhYmxlTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvV29y
a2VyVGhyZWFkYWJsZUxvYWRlci5oCShyZXZpc2lvbiA2OTE0MSkKKysrIFdlYkNvcmUvbG9hZGVy
L1dvcmtlclRocmVhZGFibGVMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDcgKzExNCw5
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5k
RGF0YSh1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90
YWxCeXRlc1RvQmVTZW50KTsKICAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVz
cG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogICAgICAgICAgICAgdmlydHVhbCB2b2lk
IGRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqLCBpbnQgbGVuZ3RoUmVjZWl2ZWQpOworICAgICAg
ICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVCbG9iRGF0YShpbnQgbGVuZ3RoUmVjZWl2ZWQp
OwogICAgICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyKTsKKyAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5n
QmxvYih1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIFBhc3NSZWZQdHI8QmxvYj4pOwogICAgICAg
ICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpOwogICAgICAg
ICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWxSZWRpcmVjdENoZWNrKCk7CiAgICAgICAgICAgICB2
aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2FuY2VsbGF0aW9uKGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmKTsKQEAgLTEzMSw2ICsxMzMsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKICAgICAgICAgICAgIC8vIEZvciB1c2Ugb24gdGhlIG1haW4gdGhyZWFkLgogICAgICAgICAg
ICAgU3RyaW5nIG1fdGFza01vZGU7CisKKyAgICAgICAgICAgIC8vIE9ubHkgdG8gYmUgdXNlZCBv
biB0aGUgbWFpbiB0aHJlYWQuCisgICAgICAgICAgICBSZWZQdHI8QmxvYj4gbV9kb3dubG9hZGVk
QmxvYjsKICAgICAgICAgfTsKIAogICAgICAgICBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyKFdvcmtl
ckNvbnRleHQqLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiwgY29uc3QgU3RyaW5nJiB0YXNrTW9k
ZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMm
KTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcAko
cmV2aXNpb24gNjkxNDEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5k
bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJCbG9i
UmVnaXN0cnkuaCIKICNpbmNsdWRlICJETlMuaCIKKyNpbmNsdWRlICJIVFRQUGFyc2Vycy5oIgog
I2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUNsaWVudC5oIgog
I2luY2x1ZGUgIlRpbWVyLmgiCkBAIC0xODUsNCArMTg2LDMyIEBAIHZvaWQgUmVzb3VyY2VIYW5k
bGU6OmNhY2hlTWV0YWRhdGEoY29uc3QKICAgICAvLyBPcHRpb25hbGx5IGltcGxlbWVudGVkIGJ5
IHBsYXRmb3JtLgogfQogCisvLyBzdGF0aWMKK1Bhc3NSZWZQdHI8QmxvYj4gUmVzb3VyY2VIYW5k
bGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHlBc0Jsb2IoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZUVycm9yJiBl
cnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVz
b3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgQVNTRVJUKHJlcXVlc3QuZG93bmxvYWRB
c0Jsb2IoKSk7CisKKyAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKKyAgICBsb2FkUmVzb3VyY2VTeW5j
aHJvbm91c2x5KGNvbnRleHQsIHJlcXVlc3QsIHN0b3JlZENyZWRlbnRpYWxzLCBlcnJvciwgcmVz
cG9uc2UsIGRhdGEpOworICAgIGlmICghZXJyb3IuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiAw
OworCisgICAgU3RyaW5nIGNvbnRlbnRUeXBlOworICAgIGlmIChyZXNwb25zZS5pc0hUVFAoKSkK
KyAgICAgICAgY29udGVudFR5cGUgPSBleHRyYWN0TUlNRVR5cGVGcm9tTWVkaWFUeXBlKHJlc3Bv
bnNlLmh0dHBIZWFkZXJGaWVsZCgiQ29udGVudC1UeXBlIikpOworICAgIGVsc2UKKyAgICAgICAg
Y29udGVudFR5cGUgPSByZXNwb25zZS5taW1lVHlwZSgpOworCisgICAgT3duUHRyPEJsb2JEYXRh
PiBibG9iRGF0YSA9IEJsb2JEYXRhOjpjcmVhdGUoKTsKKyAgICBibG9iRGF0YS0+c2V0Q29udGVu
dFR5cGUoY29udGVudFR5cGUpOworICAgIGlmICghZGF0YS5pc0VtcHR5KCkpCisgICAgICAgIGJs
b2JEYXRhLT5hcHBlbmREYXRhKENTdHJpbmcoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKSk7ICAv
LyBGSVhNRTogRG9uJ3QgY29weSB0aGUgZGF0YS4KKyAgICByZXR1cm4gQmxvYjo6Y3JlYXRlKGJs
b2JEYXRhLnJlbGVhc2UoKSwgZGF0YS5zaXplKCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAkocmV2
aXNpb24gNjkxNDEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUu
aAkod29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQsNyBAQCB0eXBlZGVmIHN0cnVjdCBPcGFxdWVD
RkhUVFBDb29raWVTdG9yYWdlCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlOworY2xhc3MgQmxvYjsKIGNsYXNzIENyZWRlbnRpYWw7CiBjbGFzcyBG
b3JtRGF0YTsKIGNsYXNzIEZyYW1lOwpAQCAtOTcsNiArOTgsNyBAQCBjbGFzcyBSZXNvdXJjZUhh
bmRsZSA6IHB1YmxpYyBSZWZDb3VudGVkCiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8
UmVzb3VyY2VIYW5kbGU+IGNyZWF0ZShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYsIFJlc291cmNlSGFuZGxlQ2xpZW50KiwgYm9vbCBkZWZlcnNMb2FkaW5nLCBib29s
IHNob3VsZENvbnRlbnRTbmlmZik7CiAgICAgc3RhdGljIHZvaWQgbG9hZFJlc291cmNlU3luY2hy
b25vdXNseShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFN0b3Jl
ZENyZWRlbnRpYWxzLCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3Rvcjxj
aGFyPiYgZGF0YSk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYj4gbG9hZFJlc291cmNlU3lu
Y2hyb25vdXNseUFzQmxvYihOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVxdWVz
dCYsIFN0b3JlZENyZWRlbnRpYWxzLCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYp
OwogCiAgICAgc3RhdGljIHZvaWQgcHJlcGFyZUZvclVSTChjb25zdCBLVVJMJik7CiAgICAgc3Rh
dGljIGJvb2wgd2lsbExvYWRGcm9tQ2FjaGUoUmVzb3VyY2VSZXF1ZXN0JiwgRnJhbWUqKTsKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUNsaWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUNsaWVudC5o
CShyZXZpc2lvbiA2OTE0MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhh
bmRsZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw5IEBACiAjaWZuZGVmIFJl
c291cmNlSGFuZGxlQ2xpZW50X2gKICNkZWZpbmUgUmVzb3VyY2VIYW5kbGVDbGllbnRfaAogCisj
aW5jbHVkZSAiQmxvYi5oIgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CiAKQEAgLTcyLDggKzc0LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlSGFuZGxl
KiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpIHsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlk
UmVjZWl2ZURhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiwgaW50LCBpbnQgLypsZW5n
dGhSZWNlaXZlZCovKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVCbG9iRGF0
YShSZXNvdXJjZUhhbmRsZSosIGludCkgeyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNl
aXZlQ2FjaGVkTWV0YWRhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiwgaW50KSB7IH0K
ICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoUmVzb3VyY2VIYW5kbGUqLCBk
b3VibGUgLypmaW5pc2hUaW1lKi8pIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNo
TG9hZGluZ0Jsb2IoUmVzb3VyY2VIYW5kbGUqLCBkb3VibGUgLypmaW5pc2hUaW1lKi8sIFBhc3NS
ZWZQdHI8QmxvYj4pIHsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChSZXNvdXJjZUhh
bmRsZSosIGNvbnN0IFJlc291cmNlRXJyb3ImKSB7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIHdh
c0Jsb2NrZWQoUmVzb3VyY2VIYW5kbGUqKSB7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGNhbm5v
dFNob3dVUkwoUmVzb3VyY2VIYW5kbGUqKSB7IH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAJKHJldmlzaW9uIDY5MTQxKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Niw2ICs0Niw3IEBAIFBhc3NPd25QdHI8UmVzb3VyY2VSZXF1ZXN0PiBSZXNv
dXJjZVJlcXUKICAgICByZXF1ZXN0LT5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhkYXRhLT5tX2Zp
cnN0UGFydHlGb3JDb29raWVzKTsKICAgICByZXF1ZXN0LT5zZXRIVFRQTWV0aG9kKGRhdGEtPm1f
aHR0cE1ldGhvZCk7CiAgICAgcmVxdWVzdC0+c2V0VGFyZ2V0VHlwZShkYXRhLT5tX3RhcmdldFR5
cGUpOworICAgIHJlcXVlc3QtPnNldERvd25sb2FkQXNCbG9iKGRhdGEtPm1fZG93bmxvYWRBc0Js
b2IpOwogCiAgICAgcmVxdWVzdC0+dXBkYXRlUmVzb3VyY2VSZXF1ZXN0KCk7CiAgICAgcmVxdWVz
dC0+bV9odHRwSGVhZGVyRmllbGRzLmFkb3B0KGRhdGEtPm1faHR0cEhlYWRlcnMucmVsZWFzZSgp
KTsKQEAgLTc5LDYgKzgwLDcgQEAgUGFzc093blB0cjxDcm9zc1RocmVhZFJlc291cmNlUmVxdWVz
dERhdAogICAgIGRhdGEtPm1faHR0cE1ldGhvZCA9IGh0dHBNZXRob2QoKS5jcm9zc1RocmVhZFN0
cmluZygpOwogICAgIGRhdGEtPm1faHR0cEhlYWRlcnMgPSBodHRwSGVhZGVyRmllbGRzKCkuY29w
eURhdGEoKTsKICAgICBkYXRhLT5tX3RhcmdldFR5cGUgPSBtX3RhcmdldFR5cGU7CisgICAgZGF0
YS0+bV9kb3dubG9hZEFzQmxvYiA9IG1fZG93bmxvYWRBc0Jsb2I7CiAKICAgICBkYXRhLT5tX3Jl
c3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5LnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkobV9yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tB
cnJheS5zaXplKCkpOwogICAgIHNpemVfdCBlbmNvZGluZ0FycmF5U2l6ZSA9IG1fcmVzcG9uc2VD
b250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkuc2l6ZSgpOwpAQCAtMzQxLDcg
KzM0MywxMCBAQCBib29sIGVxdWFsSWdub3JpbmdIZWFkZXJGaWVsZHMoY29uc3QgUmVzCiAgICAg
CiAgICAgaWYgKGEuYWxsb3dDb29raWVzKCkgIT0gYi5hbGxvd0Nvb2tpZXMoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIAorCisgICAgaWYgKGEuZG93bmxvYWRBc0Jsb2IoKSAhPSBiLmRv
d25sb2FkQXNCbG9iKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIEZvcm1EYXRhKiBm
b3JtRGF0YUEgPSBhLmh0dHBCb2R5KCk7CiAgICAgRm9ybURhdGEqIGZvcm1EYXRhQiA9IGIuaHR0
cEJvZHkoKTsKICAgICAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJl
cXVlc3RCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlUmVxdWVzdEJhc2UuaAkocmV2aXNpb24gNjkxNDEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsNiArMTQ0
LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgVGFyZ2V0VHlwZSB0YXJnZXRUeXBl
KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRUeXBlOyB9CiAgICAgICAgIHZvaWQgc2V0VGFyZ2V0
VHlwZShUYXJnZXRUeXBlIHR5cGUpIHsgbV90YXJnZXRUeXBlID0gdHlwZTsgfQogCisgICAgICAg
IC8vIElmIHRydWUsIHRoZSByZXNwb25zZSBib2R5IHdpbGwgYmUgcHJvdmlkZWQgYXMgYSBibG9i
LgorICAgICAgICBib29sIGRvd25sb2FkQXNCbG9iKCkgY29uc3QgeyByZXR1cm4gbV9kb3dubG9h
ZEFzQmxvYjsgfQorICAgICAgICB2b2lkIHNldERvd25sb2FkQXNCbG9iKGJvb2wgZG93bmxvYWQp
IHsgbV9kb3dubG9hZEFzQmxvYiA9IGRvd25sb2FkOyB9CisKICAgICAgICAgc3RhdGljIGJvb2wg
Y29tcGFyZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsK
IAogICAgIHByb3RlY3RlZDoKQEAgLTE1NSw2ICsxNTksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgICAgICAsIG1fcmVwb3J0TG9hZFRpbWluZyhmYWxzZSkKICAgICAgICAgICAgICwg
bV9yZXBvcnRSYXdIZWFkZXJzKGZhbHNlKQogICAgICAgICAgICAgLCBtX3RhcmdldFR5cGUoVGFy
Z2V0SXNTdWJyZXNvdXJjZSkKKyAgICAgICAgICAgICwgbV9kb3dubG9hZEFzQmxvYihmYWxzZSkK
ICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTE3MCw2ICsxNzUsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgICAgICAsIG1fcmVwb3J0TG9hZFRpbWluZyhmYWxzZSkKICAgICAgICAg
ICAgICwgbV9yZXBvcnRSYXdIZWFkZXJzKGZhbHNlKQogICAgICAgICAgICAgLCBtX3RhcmdldFR5
cGUoVGFyZ2V0SXNTdWJyZXNvdXJjZSkKKyAgICAgICAgICAgICwgbV9kb3dubG9hZEFzQmxvYihm
YWxzZSkKICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTE5NSw2ICsyMDEsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgbV9yZXBvcnRMb2FkVGltaW5nOwogICAgICAgICBi
b29sIG1fcmVwb3J0UmF3SGVhZGVyczsKICAgICAgICAgVGFyZ2V0VHlwZSBtX3RhcmdldFR5cGU7
CisgICAgICAgIGJvb2wgbV9kb3dubG9hZEFzQmxvYjsKIAogICAgIHByaXZhdGU6CiAgICAgICAg
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYgYXNSZXNvdXJjZVJlcXVlc3QoKSBjb25zdDsKQEAgLTIx
OCw2ICsyMjUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFJlZlB0cjxGb3JtRGF0
YT4gbV9odHRwQm9keTsKICAgICAgICAgYm9vbCBtX2FsbG93Q29va2llczsKICAgICAgICAgUmVz
b3VyY2VSZXF1ZXN0QmFzZTo6VGFyZ2V0VHlwZSBtX3RhcmdldFR5cGU7CisgICAgICAgIGJvb2wg
bV9kb3dubG9hZEFzQmxvYjsKICAgICB9OwogICAgIAogICAgIHVuc2lnbmVkIGluaXRpYWxpemVN
YXhpbXVtSFRUUENvbm5lY3Rpb25Db3VudFBlckhvc3QoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlcXVlc3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vUmVzb3VyY2VSZXF1ZXN0LmgJKHJldmlzaW9u
IDY5MTQxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL1Jlc291cmNlUmVx
dWVzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIGludCBhcHBDYWNoZUhvc3RJRCgpIGNvbnN0IHsgcmV0dXJuIG1fYXBwQ2Fj
aGVIb3N0SUQ7IH0KICAgICAgICAgdm9pZCBzZXRBcHBDYWNoZUhvc3RJRChpbnQgaWQpIHsgbV9h
cHBDYWNoZUhvc3RJRCA9IGlkOyB9CiAKKyAgICAgICAgLy8gSWYgdHJ1ZSwgdGhlIHJlc3BvbnNl
IGJvZHkgd2lsbCBiZSBwcm92aWRlZCBhcyBhIGZpbGUuCisgICAgICAgIGJvb2wgZG93bmxvYWRU
b0ZpbGUoKSBjb25zdCB7IHJldHVybiBkb3dubG9hZEFzQmxvYigpOyB9CisgICAgICAgIHZvaWQg
c2V0RG93bmxvYWRUb0ZpbGUoYm9vbCBkb3dubG9hZCkgeyBzZXREb3dubG9hZEFzQmxvYihkb3du
bG9hZCk7IH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBSZXNvdXJjZVJl
cXVlc3RCYXNlOwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vUmVz
b3VyY2VSZXNwb25zZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2Nocm9taXVtL1Jlc291cmNlUmVzcG9uc2UuY3BwCShyZXZpc2lvbiA2OTE0MSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlc3BvbnNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsNiArMjgsMTggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjb25z
dCBTdHJpbmcmIFJlc291cmNlUmVzcG9uc2U6OmRvd25sb2FkRmlsZVBhdGgoKSBjb25zdAorewor
ICAgIGxhenlJbml0KCk7CisgICAgcmV0dXJuIG1fZG93bmxvYWRGaWxlUGF0aDsKK30KKwordm9p
ZCBSZXNvdXJjZVJlc3BvbnNlOjpzZXREb3dubG9hZEZpbGVQYXRoKGNvbnN0IFN0cmluZyYgcGF0
aCkKK3sKKyAgICBsYXp5SW5pdCgpOworICAgIG1fZG93bmxvYWRGaWxlUGF0aCAgPSBwYXRoOwor
fQorCiBQYXNzT3duUHRyPENyb3NzVGhyZWFkUmVzb3VyY2VSZXNwb25zZURhdGE+IFJlc291cmNl
UmVzcG9uc2U6OmRvUGxhdGZvcm1Db3B5RGF0YShQYXNzT3duUHRyPENyb3NzVGhyZWFkUmVzb3Vy
Y2VSZXNwb25zZURhdGE+IGRhdGEpIGNvbnN0CiB7CiAgICAgZGF0YS0+bV9hcHBDYWNoZUlEID0g
bV9hcHBDYWNoZUlEOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL1Jl
c291cmNlUmVzcG9uc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y2hyb21pdW0vUmVzb3VyY2VSZXNwb25zZS5oCShyZXZpc2lvbiA2OTE0MSkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlc3BvbnNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTk2LDYgKzk2LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgZG91Ymxl
IHJlc3BvbnNlVGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzcG9uc2VUaW1lOyB9CiAgICAgICAg
IHZvaWQgc2V0UmVzcG9uc2VUaW1lKGRvdWJsZSByZXNwb25zZVRpbWUpIHsgbV9yZXNwb25zZVRp
bWUgPSByZXNwb25zZVRpbWU7IH0KIAorICAgICAgICAvLyBJbmRpY2F0ZXMgdGhlIGxvY2F0aW9u
IG9mIGEgZG93bmxvYWRlZCByZXNwb25zZSBpZiB0aGUKKyAgICAgICAgLy8gUmVzb3VyY2VSZXF1
ZXN0IGhhZCB0aGUgZG93bmxvYWRUb0ZpbGUvQmxvYiBmbGFnIHNldCB0byB0cnVlLgorICAgICAg
ICAvLyBUaGUgZmlsZSB3aWxsIHJlbWFpbiB2YWxpZCB1bnRpbCB0aGUgUmVzb3VyY2VIYW5kbGUg
dXNlZAorICAgICAgICAvLyB0byByZXRyaWV2ZSB0aGlzIGZpbGUgaGFzIGJlZW4gZGVsZXRlZC4K
KyAgICAgICAgY29uc3QgU3RyaW5nJiBkb3dubG9hZEZpbGVQYXRoKCkgY29uc3Q7CisgICAgICAg
IHZvaWQgc2V0RG93bmxvYWRGaWxlUGF0aChjb25zdCBTdHJpbmcmIHBhdGgpOworCiAgICAgcHJp
dmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIFJlc291cmNlUmVzcG9uc2VCYXNlOwogCkBAIC0x
NDMsNiArMTUwLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBUaGUgdGltZSBh
dCB3aGljaCB0aGUgcmVzcG9uc2UgaGVhZGVycyB3ZXJlIHJlY2VpdmVkLiAgRm9yIGNhY2hlZAog
ICAgICAgICAvLyByZXNwb25zZXMsIHRoaXMgdGltZSBjb3VsZCBiZSAiZmFyIiBpbiB0aGUgcGFz
dC4KICAgICAgICAgZG91YmxlIG1fcmVzcG9uc2VUaW1lOworCisgICAgICAgIC8vIFRoZSByZXN1
bHRpbmcgZG93bmxvYWRlZCBmaWxlIHBhdGggaW4gdGhlIHJlcXVlc3QuZG93bmxvYWRUb0ZpbGUg
Y2FzZS4KKyAgICAgICAgU3RyaW5nIG1fZG93bmxvYWRGaWxlUGF0aDsKICAgICB9OwogCiAgICAg
c3RydWN0IENyb3NzVGhyZWFkUmVzb3VyY2VSZXNwb25zZURhdGEgOiBwdWJsaWMgQ3Jvc3NUaHJl
YWRSZXNvdXJjZVJlc3BvbnNlRGF0YUJhc2UgewpAQCAtMTU1LDYgKzE2NSw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX3dhc0FsdGVybmF0ZVByb3RvY29sQXZhaWxhYmxl
OwogICAgICAgICBib29sIG1fd2FzRmV0Y2hlZFZpYVByb3h5OwogICAgICAgICBkb3VibGUgbV9y
ZXNwb25zZVRpbWU7CisgICAgICAgIFN0cmluZyBtX2Rvd25sb2FkRmlsZVBhdGg7CiAgICAgfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVl
c3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkocmV2
aXNpb24gNjkxNDEpCisrKyBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU5Myw2ICs1OTMsMTAgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6Y3JlYXRlUmVx
dWVzdChFeGNlcAogICAgIGlmIChtX3JlcXVlc3RIZWFkZXJzLnNpemUoKSA+IDApCiAgICAgICAg
IHJlcXVlc3QuYWRkSFRUUEhlYWRlckZpZWxkcyhtX3JlcXVlc3RIZWFkZXJzKTsKIAorI2lmIEVO
QUJMRShYSFJfUkVTUE9OU0VfQkxPQikKKyAgICByZXF1ZXN0LnNldERvd25sb2FkQXNCbG9iKG1f
YXNCbG9iKTsKKyNlbmRpZgorCiAgICAgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMgb3B0aW9uczsK
ICAgICBvcHRpb25zLnNlbmRMb2FkQ2FsbGJhY2tzID0gdHJ1ZTsKICAgICBvcHRpb25zLnNuaWZm
Q29udGVudCA9IGZhbHNlOwpAQCAtOTYyLDEwICs5NjYsNiBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0
OjpkaWRGaW5pc2hMb2FkaW5nKHVuCiAgICAgaWYgKG1fZGVjb2RlcikKICAgICAgICAgbV9yZXNw
b25zZVRleHQgKz0gbV9kZWNvZGVyLT5mbHVzaCgpOwogCi0jaWYgRU5BQkxFKFhIUl9SRVNQT05T
RV9CTE9CKQotICAgIC8vIEZJWE1FOiBTZXQgbV9yZXNwb25zZUJsb2IgdG8gc29tZXRoaW5nIGhl
cmUgaW4gdGhlIG1fYXNCbG9iIGNhc2UuCi0jZW5kaWYKLQogI2lmIEVOQUJMRShJTlNQRUNUT1Ip
CiAgICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvciA9IHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpKQogICAgICAgICBpbnNwZWN0b3ItPnJl
c291cmNlUmV0cmlldmVkQnlYTUxIdHRwUmVxdWVzdChpZGVudGlmaWVyLCBtX3Jlc3BvbnNlVGV4
dCwgbV91cmwsIG1fbGFzdFNlbmRVUkwsIG1fbGFzdFNlbmRMaW5lTnVtYmVyKTsKQEAgLTk4MSw2
ICs5ODEsMTcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlkRmluaXNoTG9hZGluZyh1bgogICAg
ICAgICBkcm9wUHJvdGVjdGlvbigpOwogfQogCit2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRGaW5p
c2hMb2FkaW5nQmxvYih1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIFBhc3NSZWZQdHI8QmxvYj4g
YmxvYikKK3sKKyNpZiBFTkFCTEUoWEhSX1JFU1BPTlNFX0JMT0IpCisgICAgaWYgKCFtX2Vycm9y
KQorICAgICAgICBtX3Jlc3BvbnNlQmxvYiA9IGJsb2I7CisgICAgZGlkRmluaXNoTG9hZGluZyhp
ZGVudGlmaWVyKTsgIC8vIEZJWE1FOiBjbGVhbnVwCisjZWxzZQorICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworI2VuZGlmCit9CisKIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpZFNlbmREYXRhKHVu
c2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVz
VG9CZVNlbnQpCiB7CiAgICAgaWYgKCFtX3VwbG9hZCkKQEAgLTEwMTEsMTMgKzEwMjIsMjkgQEAg
dm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlkUmVjZWl2ZUF1dGhlbnRpYwogCiB2b2lkIFhNTEh0dHBS
ZXF1ZXN0OjpkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuKQogeworICAg
IGRpZFJlY2VpdmVEYXRhQ29tbW9uKGZhbHNlLCBkYXRhLCBsZW4pOworfQorCit2b2lkIFhNTEh0
dHBSZXF1ZXN0OjpkaWRSZWNlaXZlQmxvYkRhdGEoaW50IGxlbikKK3sKKyNpZiBFTkFCTEUoWEhS
X1JFU1BPTlNFX0JMT0IpCisgICAgQVNTRVJUKGxlbiA+PSAwKTsKKyAgICBkaWRSZWNlaXZlRGF0
YUNvbW1vbih0cnVlLCAwLCBsZW4pOworI2Vsc2UKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyNlbmRpZgorfQorCit2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRSZWNlaXZlRGF0YUNvbW1vbihi
b29sIGlzQmxvYkRhdGEsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW4pCit7CiAgICAgaWYgKG1f
ZXJyb3IpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX3N0YXRlIDwgSEVBREVSU19SRUNF
SVZFRCkKICAgICAgICAgY2hhbmdlU3RhdGUoSEVBREVSU19SRUNFSVZFRCk7CiAKLSAgICBpZiAo
IW1fZGVjb2RlcikgeworICAgIGlmIChkYXRhICYmICFtX2RlY29kZXIpIHsKKyAgICAgICAgQVNT
RVJUKCFpc0Jsb2JEYXRhKTsKICAgICAgICAgaWYgKCFtX3Jlc3BvbnNlRW5jb2RpbmcuaXNFbXB0
eSgpKQogICAgICAgICAgICAgbV9kZWNvZGVyID0gVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRl
KCJ0ZXh0L3BsYWluIiwgbV9yZXNwb25zZUVuY29kaW5nKTsKICAgICAgICAgLy8gYWxsb3cgVGV4
dFJlc291cmNlRGVjb2RlciB0byBsb29rIGluc2lkZSB0aGUgbV9yZXNwb25zZSBpZiBpdCdzIFhN
TCBvciBIVE1MCkBAIC0xMDMxLDEzICsxMDU4LDE1IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRp
ZFJlY2VpdmVEYXRhKGNvbnMKICAgICAgICAgICAgIG1fZGVjb2RlciA9IFRleHRSZXNvdXJjZURl
Y29kZXI6OmNyZWF0ZSgidGV4dC9wbGFpbiIsICJVVEYtOCIpOwogICAgIH0KIAotICAgIGlmICgh
bGVuKQotICAgICAgICByZXR1cm47CisgICAgaWYgKCFpc0Jsb2JEYXRhKSB7CisgICAgICAgIGlm
ICghbGVuKQorICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGxlbiA9PSAtMSkKLSAgICAg
ICAgbGVuID0gc3RybGVuKGRhdGEpOworICAgICAgICBpZiAobGVuID09IC0xKSAKKyAgICAgICAg
ICAgIGxlbiA9IHN0cmxlbihkYXRhKTsKIAotICAgIG1fcmVzcG9uc2VUZXh0ICs9IG1fZGVjb2Rl
ci0+ZGVjb2RlKGRhdGEsIGxlbik7CisgICAgICAgIG1fcmVzcG9uc2VUZXh0ICs9IG1fZGVjb2Rl
ci0+ZGVjb2RlKGRhdGEsIGxlbik7CisgICAgfQogCiAgICAgaWYgKCFtX2Vycm9yKSB7CiAgICAg
ICAgIGxvbmcgbG9uZyBleHBlY3RlZExlbmd0aCA9IG1fcmVzcG9uc2UuZXhwZWN0ZWRDb250ZW50
TGVuZ3RoKCk7CkluZGV4OiBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmgJKHJldmlzaW9uIDY5MTQxKQorKysgV2Vi
Q29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDExICsxMjcs
MTUgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgZGlkU2VuZERhdGEodW5zaWduZWQgbG9u
ZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCk7
CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJik7CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRhdGEs
IGludCBsZW5ndGhSZWNlaXZlZCk7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVCbG9iRGF0
YShpbnQgbGVuZ3RoUmVjZWl2ZWQpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5n
KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcik7CisgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExv
YWRpbmdCbG9iKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgUGFzc1JlZlB0cjxCbG9iPiBibG9i
KTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJik7CiAgICAg
dmlydHVhbCB2b2lkIGRpZEZhaWxSZWRpcmVjdENoZWNrKCk7CiAgICAgdmlydHVhbCB2b2lkIGRp
ZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNhbmNlbGxhdGlvbihjb25zdCBSZXNvdXJjZVJlc3BvbnNl
Jik7CiAKKyAgICB2b2lkIGRpZFJlY2VpdmVEYXRhQ29tbW9uKGJvb2wgaXNCbG9iRGF0YSwgY29u
c3QgY2hhciogZGF0YSwgaW50IGxlbmd0aFJlY2VpdmVkKTsKKwogICAgIFN0cmluZyByZXNwb25z
ZU1JTUVUeXBlKCkgY29uc3Q7CiAgICAgYm9vbCByZXNwb25zZUlzWE1MKCkgY29uc3Q7CiAKSW5k
ZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNjkxNjYpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTAtMTAtMDUgIE1pY2hhZWwg
Tm9yZG1hbiAgPG1pY2hhZWxuQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGdldHRpbmcgdGhlIHJlc3Vs
dCBvZiBhIHJlc291cmNlIHJlcXVlc3QgYXMgYSBibG9iLgorICAgICAgICBJbiBDaHJvbWUsIHRo
aXMgZmVhdHVyZSBpcyBpbXBsZW1lbnRlZCBpbiB0ZXJtcyBvZiB0aGUgJ2Rvd25sb2FkVG9GaWxl
JworICAgICAgICBmZWF0dXJlIG9mIHRoZSBuZXR3b3JrIHN0YWNrLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ3MjIKKworICAgICAgICAqIHNyYy9S
ZXNvdXJjZUhhbmRsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUludGVy
bmFsOjpSZXNvdXJjZUhhbmRsZUludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
SGFuZGxlSW50ZXJuYWw6OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUhhbmRsZUludGVybmFsOjpkaWREb3dubG9hZERhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6ZGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUludGVybmFsOjpkZXRlcm1pbmVDb250ZW50VHlwZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUludGVybmFsOjpsb2FkUmVzb3VyY2VTeW5j
aHJvbm91c2x5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3Vy
Y2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpsb2Fk
UmVzb3VyY2VTeW5jaHJvbm91c2x5QXNCbG9iKToKKyAgICAgICAgKiBzcmMvV2ViVVJMUmVxdWVz
dC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlcXVlc3RQcml2YXRlSW1wbDo6V2ViVVJM
UmVxdWVzdFByaXZhdGVJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVxdWVzdDo6ZG93
bmxvYWRUb0ZpbGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXF1ZXN0OjpzZXREb3dubG9h
ZFRvRmlsZSk6CisgICAgICAgICogc3JjL1dlYlVSTFJlcXVlc3RQcml2YXRlLmg6CisgICAgICAg
IChXZWJLaXQ6OldlYlVSTFJlcXVlc3RQcml2YXRlOjpXZWJVUkxSZXF1ZXN0UHJpdmF0ZSk6Cisg
ICAgICAgICogc3JjL1dlYlVSTFJlc3BvbnNlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVVJM
UmVzcG9uc2VQcml2YXRlSW1wbDo6V2ViVVJMUmVzcG9uc2VQcml2YXRlSW1wbCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlVSTFJlc3BvbnNlOjpkb3dubG9hZEZpbGVQYXRoKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVVJMUmVzcG9uc2U6OnNldERvd25sb2FkRmlsZVBhdGgpOgorICAgICAgICAqIHNy
Yy9XZWJVUkxSZXNwb25zZVByaXZhdGUuaDoKKwogMjAxMC0wOS0yOSAgQWxwaGEgTGFtICA8aGNs
YW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEphbWVzIFJvYmluc29uLgpJ
bmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9SZXNvdXJjZUhhbmRsZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L2Nocm9taXVtL3NyYy9SZXNvdXJjZUhhbmRsZS5jcHAJKHJldmlzaW9uIDY5MTQx
KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9SZXNvdXJjZUhhbmRsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgogCiAjaW5j
bHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKKyNpbmNsdWRlICJIVFRQUGFyc2Vycy5oIgogI2luY2x1
ZGUgIlJlc291cmNlSGFuZGxlQ2xpZW50LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0Lmgi
CiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCkBAIC01OSw2ICs2MCw3IEBAIHB1YmxpYzoKICAg
ICAgICAgLCBtX293bmVyKDApCiAgICAgICAgICwgbV9jbGllbnQoY2xpZW50KQogICAgICAgICAs
IG1fc3RhdGUoQ29ubmVjdGlvblN0YXRlTmV3KQorICAgICAgICAsIG1fZG93bmxvYWRlZEZpbGVM
ZW5ndGgoMCkKICAgICB7CiAgICAgfQogCkBAIC03MywxMCArNzUsMTkgQEAgcHVibGljOgogICAg
ICAgICBXZWJVUkxMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25l
ZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVj
ZWl2ZVJlc3BvbnNlKFdlYlVSTExvYWRlciosIGNvbnN0IFdlYlVSTFJlc3BvbnNlJik7CiAgICAg
dmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFdlYlVSTExvYWRlciosIGNvbnN0IGNoYXIqIGRh
dGEsIGludCBkYXRhTGVuZ3RoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRG93bmxvYWREYXRhKFdl
YlVSTExvYWRlciosIGludCBkYXRhTGVuZ3RoKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2
ZUNhY2hlZE1ldGFkYXRhKFdlYlVSTExvYWRlciosIGNvbnN0IGNoYXIqIGRhdGEsIGludCBkYXRh
TGVuZ3RoKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhXZWJVUkxMb2FkZXIq
LCBkb3VibGUgZmluaXNoVGltZSk7CiAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoV2ViVVJMTG9h
ZGVyKiwgY29uc3QgV2ViVVJMRXJyb3ImKTsKIAorICAgIHN0YXRpYyBTdHJpbmcgZGV0ZXJtaW5l
Q29udGVudFR5cGUoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEJsb2I+IGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqIGNv
bnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdG9yZWRDcmVkZW50aWFscyBzdG9y
ZWRDcmVkZW50aWFscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFJlc291cmNlRXJyb3ImIGVycm9yLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9u
c2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBWZWN0b3I8Y2hhcj4qIGRhdGEpOworCiAgICAgZW51bSBDb25uZWN0aW9uU3RhdGUgewogICAg
ICAgICBDb25uZWN0aW9uU3RhdGVOZXcsCiAgICAgICAgIENvbm5lY3Rpb25TdGF0ZVN0YXJ0ZWQs
CkBAIC05MSw2ICsxMDIsOSBAQCBwdWJsaWM6CiAgICAgUmVzb3VyY2VIYW5kbGUqIG1fb3duZXI7
CiAgICAgUmVzb3VyY2VIYW5kbGVDbGllbnQqIG1fY2xpZW50OwogICAgIE93blB0cjxXZWJVUkxM
b2FkZXI+IG1fbG9hZGVyOworICAgIFN0cmluZyBtX2Rvd25sb2FkZWRGaWxlUGF0aDsKKyAgICBT
dHJpbmcgbV9kb3dubG9hZGVkRmlsZUNvbnRlbnRUeXBlOworICAgIGxvbmcgbG9uZyBtX2Rvd25s
b2FkZWRGaWxlTGVuZ3RoOwogCiAgICAgLy8gVXNlZCBmb3Igc2FuaXR5IGNoZWNraW5nIHRvIG1h
a2Ugc3VyZSB3ZSBkb24ndCBleHBlcmllbmNlIGlsbGVnYWwgc3RhdGUKICAgICAvLyB0cmFuc2l0
aW9ucy4KQEAgLTE1Niw2ICsxNzAsMTAgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZUludGVybmFsOjpk
aWRSZWNlaXZlUgogICAgIGlmICghaXNNdWx0aXBhcnQgJiYgIWlzVmFsaWRTdGF0ZVRyYW5zaXRp
b24pCiAgICAgICAgIENSQVNIKCk7CiAgICAgbV9zdGF0ZSA9IENvbm5lY3Rpb25TdGF0ZVJlY2Vp
dmVkUmVzcG9uc2U7CisgICAgaWYgKG1fcmVxdWVzdC5kb3dubG9hZFRvRmlsZSgpKSB7CisgICAg
ICAgIG1fZG93bmxvYWRlZEZpbGVQYXRoID0gcmVzcG9uc2UudG9SZXNvdXJjZVJlc3BvbnNlKCku
ZG93bmxvYWRGaWxlUGF0aCgpOworICAgICAgICBtX2Rvd25sb2FkZWRGaWxlQ29udGVudFR5cGUg
PSBkZXRlcm1pbmVDb250ZW50VHlwZShyZXNwb25zZS50b1Jlc291cmNlUmVzcG9uc2UoKSk7Cisg
ICAgfQogICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UobV9vd25lciwgcmVzcG9uc2Uu
dG9SZXNvdXJjZVJlc3BvbnNlKCkpOwogfQogCkBAIC0xNzMsNiArMTkxLDE3IEBAIHZvaWQgUmVz
b3VyY2VIYW5kbGVJbnRlcm5hbDo6ZGlkUmVjZWl2ZUQKICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2
ZURhdGEobV9vd25lciwgZGF0YSwgZGF0YUxlbmd0aCwgZGF0YUxlbmd0aCk7CiB9CiAKK3ZvaWQg
UmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6ZGlkRG93bmxvYWREYXRhKFdlYlVSTExvYWRlciosIGlu
dCBkYXRhTGVuZ3RoKQoreworICAgIEFTU0VSVChtX2NsaWVudCk7CisgICAgQVNTRVJUKG1fcmVx
dWVzdC5kb3dubG9hZFRvRmlsZSgpKTsKKyAgICBpZiAobV9zdGF0ZSAhPSBDb25uZWN0aW9uU3Rh
dGVSZWNlaXZlZFJlc3BvbnNlICYmIG1fc3RhdGUgIT0gQ29ubmVjdGlvblN0YXRlUmVjZWl2aW5n
RGF0YSkKKyAgICAgICAgQ1JBU0goKTsKKyAgICBtX3N0YXRlID0gQ29ubmVjdGlvblN0YXRlUmVj
ZWl2aW5nRGF0YTsKKyAgICBtX2Rvd25sb2FkZWRGaWxlTGVuZ3RoICs9IGRhdGFMZW5ndGg7Cisg
ICAgbV9jbGllbnQtPmRpZFJlY2VpdmVCbG9iRGF0YShtX293bmVyLCBkYXRhTGVuZ3RoKTsKK30K
Kwogdm9pZCBSZXNvdXJjZUhhbmRsZUludGVybmFsOjpkaWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEo
V2ViVVJMTG9hZGVyKiwgY29uc3QgY2hhciogZGF0YSwgaW50IGRhdGFMZW5ndGgpCiB7CiAgICAg
QVNTRVJUKG1fY2xpZW50KTsKQEAgLTE4OCw3ICsyMTcsMTggQEAgdm9pZCBSZXNvdXJjZUhhbmRs
ZUludGVybmFsOjpkaWRGaW5pc2hMbwogICAgIGlmIChtX3N0YXRlICE9IENvbm5lY3Rpb25TdGF0
ZVJlY2VpdmVkUmVzcG9uc2UgJiYgbV9zdGF0ZSAhPSBDb25uZWN0aW9uU3RhdGVSZWNlaXZpbmdE
YXRhKQogICAgICAgICBDUkFTSCgpOwogICAgIG1fc3RhdGUgPSBDb25uZWN0aW9uU3RhdGVGaW5p
c2hlZExvYWRpbmc7Ci0gICAgbV9jbGllbnQtPmRpZEZpbmlzaExvYWRpbmcobV9vd25lciwgZmlu
aXNoVGltZSk7CisgICAgaWYgKG1fcmVxdWVzdC5kb3dubG9hZEFzQmxvYigpKSB7CisgICAgICAg
IEFTU0VSVChtX3JlcXVlc3QuZG93bmxvYWRUb0ZpbGUoKSk7IC8vIFRvRmlsZSBhbmQgQXNCbG9i
IGFyZSBvbmUgYW5kIHRoZSBzYW1lIGZvciBub3cuCisgICAgICAgIFJlZlB0cjxCbG9iPiBkYXRh
QXNCbG9iOworICAgICAgICBpZiAoIW1fZG93bmxvYWRlZEZpbGVQYXRoLmlzRW1wdHkoKSkgewor
ICAgICAgICAgICAgT3duUHRyPEJsb2JEYXRhPiBibG9iRGF0YSA9IEJsb2JEYXRhOjpjcmVhdGUo
KTsKKyAgICAgICAgICAgIGJsb2JEYXRhLT5zZXRDb250ZW50VHlwZShtX2Rvd25sb2FkZWRGaWxl
Q29udGVudFR5cGUpOworICAgICAgICAgICAgYmxvYkRhdGEtPmFwcGVuZEZpbGUobV9kb3dubG9h
ZGVkRmlsZVBhdGgpOworICAgICAgICAgICAgZGF0YUFzQmxvYiA9IEJsb2I6OmNyZWF0ZShibG9i
RGF0YS5yZWxlYXNlKCksIG1fZG93bmxvYWRlZEZpbGVMZW5ndGgpOworICAgICAgICB9CisgICAg
ICAgIG1fY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nQmxvYihtX293bmVyLCBmaW5pc2hUaW1lLCBk
YXRhQXNCbG9iKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9jbGllbnQtPmRpZEZpbmlzaExvYWRp
bmcobV9vd25lciwgZmluaXNoVGltZSk7CiB9CiAKIHZvaWQgUmVzb3VyY2VIYW5kbGVJbnRlcm5h
bDo6ZGlkRmFpbChXZWJVUkxMb2FkZXIqLCBjb25zdCBXZWJVUkxFcnJvciYgZXJyb3IpCkBAIC0x
OTgsNiArMjM4LDUxIEBAIHZvaWQgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6ZGlkRmFpbChXZWIK
ICAgICBtX2NsaWVudC0+ZGlkRmFpbChtX293bmVyLCBlcnJvcik7CiB9CiAKKy8vIHN0YXRpYwor
U3RyaW5nIFJlc291cmNlSGFuZGxlSW50ZXJuYWw6OmRldGVybWluZUNvbnRlbnRUeXBlKGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIGlmIChyZXNwb25zZS5pc0hUVFAo
KSkKKyAgICAgICAgcmV0dXJuIGV4dHJhY3RNSU1FVHlwZUZyb21NZWRpYVR5cGUocmVzcG9uc2Uu
aHR0cEhlYWRlckZpZWxkKCJDb250ZW50LVR5cGUiKSk7CisgICAgcmV0dXJuIHJlc3BvbnNlLm1p
bWVUeXBlKCk7Cit9CisKKy8vIHN0YXRpYworUGFzc1JlZlB0cjxCbG9iPiBSZXNvdXJjZUhhbmRs
ZUludGVybmFsOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBj
b250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNv
dXJjZUVycm9yJiBlcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBWZWN0b3I8Y2hhcj4qIGRhdGEpCit7CisgICAgT3duUHRyPFdlYlVSTExvYWRl
cj4gbG9hZGVyKHdlYktpdENsaWVudCgpLT5jcmVhdGVVUkxMb2FkZXIoKSk7CisgICAgQVNTRVJU
KGxvYWRlci5nZXQoKSk7CisKKyAgICBXcmFwcGVkUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3RJbihy
ZXF1ZXN0KTsKKyAgICByZXF1ZXN0SW4uc2V0QWxsb3dTdG9yZWRDcmVkZW50aWFscyhzdG9yZWRD
cmVkZW50aWFscyA9PSBBbGxvd1N0b3JlZENyZWRlbnRpYWxzKTsKKyAgICBXcmFwcGVkUmVzb3Vy
Y2VSZXNwb25zZSByZXNwb25zZU91dChyZXNwb25zZSk7CisgICAgV2ViVVJMRXJyb3IgZXJyb3JP
dXQ7CisgICAgV2ViRGF0YSBkYXRhT3V0OworICAgIFJlZlB0cjxCbG9iPiBkYXRhQXNCbG9iOwor
ICAgIGxvbmcgbG9uZyBsZW5ndGhPdXQgPSA3Nzc3OworCisgICAgLy8gVE9ETyhtaWNoYWVsbik6
IFNvbWUgd2F5IHRvIGdldCB0aGUgbGVuZ3RoT3V0IGluIHRoZSBhc0ZpbGUgY2FzZS4KKyAgICBs
b2FkZXItPmxvYWRTeW5jaHJvbm91c2x5KHJlcXVlc3RJbiwgcmVzcG9uc2VPdXQsIGVycm9yT3V0
LCBkYXRhT3V0KTsKKworICAgIGVycm9yID0gZXJyb3JPdXQ7CisgICAgaWYgKCFyZXF1ZXN0LmRv
d25sb2FkQXNCbG9iKCkpIHsKKyAgICAgICAgQVNTRVJUKGRhdGEpOworICAgICAgICBkYXRhLT5j
bGVhcigpOworICAgICAgICBkYXRhLT5hcHBlbmQoZGF0YU91dC5kYXRhKCksIGRhdGFPdXQuc2l6
ZSgpKTsKKyAgICB9IGVsc2UgaWYgKCFyZXNwb25zZS5kb3dubG9hZEZpbGVQYXRoKCkuaXNFbXB0
eSgpKSB7CisgICAgICAgIE93blB0cjxCbG9iRGF0YT4gYmxvYkRhdGEgPSBCbG9iRGF0YTo6Y3Jl
YXRlKCk7CisgICAgICAgIGJsb2JEYXRhLT5zZXRDb250ZW50VHlwZShkZXRlcm1pbmVDb250ZW50
VHlwZShyZXNwb25zZSkpOworICAgICAgICBibG9iRGF0YS0+YXBwZW5kRmlsZShyZXNwb25zZS5k
b3dubG9hZEZpbGVQYXRoKCkpOworICAgICAgICBkYXRhQXNCbG9iID0gQmxvYjo6Y3JlYXRlKGJs
b2JEYXRhLnJlbGVhc2UoKSwgbGVuZ3RoT3V0KTsKKyAgICB9CisgICAgcmV0dXJuIGRhdGFBc0Js
b2I7Cit9CisKKwogLy8gUmVzb3VyY2VIYW5kbGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBSZXNvdXJjZUhhbmRsZTo6UmVz
b3VyY2VIYW5kbGUoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LApAQCAtMjk1LDIwICsz
ODAsMjAgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hybwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZVJlc3BvbnNl
JiByZXNwb25zZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVmVjdG9yPGNoYXI+JiBkYXRhKQogewotICAgIE93blB0cjxXZWJVUkxMb2FkZXI+IGxvYWRl
cih3ZWJLaXRDbGllbnQoKS0+Y3JlYXRlVVJMTG9hZGVyKCkpOwotICAgIEFTU0VSVChsb2FkZXIu
Z2V0KCkpOwotCi0gICAgV3JhcHBlZFJlc291cmNlUmVxdWVzdCByZXF1ZXN0SW4ocmVxdWVzdCk7
Ci0gICAgcmVxdWVzdEluLnNldEFsbG93U3RvcmVkQ3JlZGVudGlhbHMoc3RvcmVkQ3JlZGVudGlh
bHMgPT0gQWxsb3dTdG9yZWRDcmVkZW50aWFscyk7Ci0gICAgV3JhcHBlZFJlc291cmNlUmVzcG9u
c2UgcmVzcG9uc2VPdXQocmVzcG9uc2UpOwotICAgIFdlYlVSTEVycm9yIGVycm9yT3V0OwotICAg
IFdlYkRhdGEgZGF0YU91dDsKLQotICAgIGxvYWRlci0+bG9hZFN5bmNocm9ub3VzbHkocmVxdWVz
dEluLCByZXNwb25zZU91dCwgZXJyb3JPdXQsIGRhdGFPdXQpOworICAgIEFTU0VSVCghcmVxdWVz
dC5kb3dubG9hZEFzQmxvYigpKTsKKyAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsOjpsb2FkUmVz
b3VyY2VTeW5jaHJvbm91c2x5KGNvbnRleHQsIHJlcXVlc3QsIHN0b3JlZENyZWRlbnRpYWxzLCBl
cnJvciwgcmVzcG9uc2UsICZkYXRhKTsKK30KIAotICAgIGVycm9yID0gZXJyb3JPdXQ7Ci0gICAg
ZGF0YS5jbGVhcigpOwotICAgIGRhdGEuYXBwZW5kKGRhdGFPdXQuZGF0YSgpLCBkYXRhT3V0LnNp
emUoKSk7CisvLyBzdGF0aWMKK1Bhc3NSZWZQdHI8QmxvYj4gUmVzb3VyY2VIYW5kbGU6OmxvYWRS
ZXNvdXJjZVN5bmNocm9ub3VzbHlBc0Jsb2IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZUVycm9yJiBlcnJvciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VSZXNw
b25zZSYgcmVzcG9uc2UpCit7CisgICAgQVNTRVJUKHJlcXVlc3QuZG93bmxvYWRBc0Jsb2IoKSk7
CisgICAgcmV0dXJuIFJlc291cmNlSGFuZGxlSW50ZXJuYWw6OmxvYWRSZXNvdXJjZVN5bmNocm9u
b3VzbHkoY29udGV4dCwgcmVxdWVzdCwgc3RvcmVkQ3JlZGVudGlhbHMsIGVycm9yLCByZXNwb25z
ZSwgMCk7CiB9CiAKIC8vIHN0YXRpYwpAQCAtMzMzLDQgKzQxOCw0IEBAIHZvaWQgUmVzb3VyY2VI
YW5kbGU6OmNhY2hlTWV0YWRhdGEoY29uc3QKICAgICBDaHJvbWl1bUJyaWRnZTo6Y2FjaGVNZXRh
ZGF0YShyZXNwb25zZS51cmwoKSwgcmVzcG9uc2UucmVzcG9uc2VUaW1lKCksIGRhdGEpOwogfQog
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXF1
ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlVSTFJlcXVlc3Qu
Y3BwCShyZXZpc2lvbiA2OTE0MSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVxdWVz
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDYgQEAgcHVibGljOgogICAgIHsKICAg
ICAgICAgbV9yZXNvdXJjZVJlcXVlc3QgPSAmbV9yZXNvdXJjZVJlcXVlc3RBbGxvY2F0aW9uOwog
ICAgICAgICBtX2FsbG93U3RvcmVkQ3JlZGVudGlhbHMgPSBwLT5tX2FsbG93U3RvcmVkQ3JlZGVu
dGlhbHM7Ci0gICAgICAgIG1fZG93bmxvYWRUb0ZpbGUgPSBwLT5tX2Rvd25sb2FkVG9GaWxlOwog
ICAgIH0KIAogICAgIHZpcnR1YWwgdm9pZCBkaXNwb3NlKCkgeyBkZWxldGUgdGhpczsgfQpAQCAt
MjU5LDEyICsyNTgsMTIgQEAgdm9pZCBXZWJVUkxSZXF1ZXN0OjpzZXRBcHBDYWNoZUhvc3RJRChp
bgogCiBib29sIFdlYlVSTFJlcXVlc3Q6OmRvd25sb2FkVG9GaWxlKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gbV9wcml2YXRlLT5tX2Rvd25sb2FkVG9GaWxlOworICAgIHJldHVybiBtX3ByaXZhdGUt
Pm1fcmVzb3VyY2VSZXF1ZXN0LT5kb3dubG9hZFRvRmlsZSgpOwogfQogCiB2b2lkIFdlYlVSTFJl
cXVlc3Q6OnNldERvd25sb2FkVG9GaWxlKGJvb2wgZG93bmxvYWRUb0ZpbGUpCiB7Ci0gICAgbV9w
cml2YXRlLT5tX2Rvd25sb2FkVG9GaWxlID0gZG93bmxvYWRUb0ZpbGU7CisgICAgbV9wcml2YXRl
LT5tX3Jlc291cmNlUmVxdWVzdC0+c2V0RG93bmxvYWRUb0ZpbGUoZG93bmxvYWRUb0ZpbGUpOwog
fQogCiBSZXNvdXJjZVJlcXVlc3QmIFdlYlVSTFJlcXVlc3Q6OnRvTXV0YWJsZVJlc291cmNlUmVx
dWVzdCgpCkBAIC0yOTQsNCArMjkzLDQgQEAgdm9pZCBXZWJVUkxSZXF1ZXN0Ojphc3NpZ24oV2Vi
VVJMUmVxdWVzdAogICAgIG1fcHJpdmF0ZSA9IHA7CiB9CiAKLX0gLy8gbmFtZXNwYWNlIFdlYktp
dAorfSAvLyBuYW1lc3BhY2UgV2ViS2l0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRl
eDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXF1ZXN0UHJpdmF0ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVxdWVzdFByaXZhdGUuaAkocmV2aXNpb24g
NjkxNDEpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlVSTFJlcXVlc3RQcml2YXRlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM5LDE5ICszOSwxNSBAQCBjbGFzcyBXZWJVUkxSZXF1ZXN0UHJpdmF0
ZSB7CiBwdWJsaWM6CiAgICAgV2ViVVJMUmVxdWVzdFByaXZhdGUoKQogICAgICAgICA6IG1fcmVz
b3VyY2VSZXF1ZXN0KDApCi0gICAgICAgICwgbV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzKHRydWUp
Ci0gICAgICAgICwgbV9kb3dubG9hZFRvRmlsZShmYWxzZSkgeyB9CisgICAgICAgICwgbV9hbGxv
d1N0b3JlZENyZWRlbnRpYWxzKHRydWUpIHsgfQogCiAgICAgLy8gQ2FsbGVkIGJ5IFdlYlVSTFJl
cXVlc3Qgd2hlbiBpdCBubyBsb25nZXIgbmVlZHMgdGhpcyBvYmplY3QuCiAgICAgdmlydHVhbCB2
b2lkIGRpc3Bvc2UoKSA9IDA7CiAKICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QqIG1fcmVz
b3VyY2VSZXF1ZXN0OwogICAgIGJvb2wgbV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzOwotCi0gICAg
Ly8gRklYTUU6IE1vdmUgdGhpcyB0byBSZXNvdXJjZVJlcXVlc3Qgb25jZSB3ZSBoYXZlIGFuIGlu
dGVybmFsIGNvbnN1bWVyLgotICAgIGJvb2wgbV9kb3dubG9hZFRvRmlsZTsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdAogCi0jZW5kaWYKKyNlbmRpZgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IGZpbGUKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVzcG9uc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVzcG9uc2UuY3BwCShyZXZpc2lv
biA2OTE0MSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVzcG9uc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01OSw3ICs1OSw2IEBAIHB1YmxpYzoKICAgICAgICAgOiBtX3Jlc291cmNl
UmVzcG9uc2VBbGxvY2F0aW9uKCpwLT5tX3Jlc291cmNlUmVzcG9uc2UpCiAgICAgewogICAgICAg
ICBtX3Jlc291cmNlUmVzcG9uc2UgPSAmbV9yZXNvdXJjZVJlc3BvbnNlQWxsb2NhdGlvbjsKLSAg
ICAgICAgbV9kb3dubG9hZEZpbGVQYXRoID0gcC0+bV9kb3dubG9hZEZpbGVQYXRoOwogICAgIH0K
IAogICAgIHZpcnR1YWwgdm9pZCBkaXNwb3NlKCkgeyBkZWxldGUgdGhpczsgfQpAQCAtMzc1LDEy
ICszNzQsMTIgQEAgdm9pZCBXZWJVUkxSZXNwb25zZTo6c2V0SXNNdWx0aXBhcnRQYXlsbwogCiBX
ZWJTdHJpbmcgV2ViVVJMUmVzcG9uc2U6OmRvd25sb2FkRmlsZVBhdGgoKSBjb25zdAogewotICAg
IHJldHVybiBtX3ByaXZhdGUtPm1fZG93bmxvYWRGaWxlUGF0aDsKKyAgICByZXR1cm4gbV9wcml2
YXRlLT5tX3Jlc291cmNlUmVzcG9uc2UtPmRvd25sb2FkRmlsZVBhdGgoKTsKIH0KIAogdm9pZCBX
ZWJVUkxSZXNwb25zZTo6c2V0RG93bmxvYWRGaWxlUGF0aChjb25zdCBXZWJTdHJpbmcmIGRvd25s
b2FkRmlsZVBhdGgpCiB7Ci0gICAgbV9wcml2YXRlLT5tX2Rvd25sb2FkRmlsZVBhdGggPSBkb3du
bG9hZEZpbGVQYXRoOworICAgIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNlLT5zZXREb3du
bG9hZEZpbGVQYXRoKGRvd25sb2FkRmlsZVBhdGgpOwogfQogCiB2b2lkIFdlYlVSTFJlc3BvbnNl
Ojphc3NpZ24oV2ViVVJMUmVzcG9uc2VQcml2YXRlKiBwKQpAQCAtMzk0LDQgKzM5Myw0IEBAIHZv
aWQgV2ViVVJMUmVzcG9uc2U6OmFzc2lnbihXZWJVUkxSZXNwb24KICAgICBtX3ByaXZhdGUgPSBw
OwogfQogCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKK30gLy8gbmFtZXNwYWNlIFdlYktpdApcIE5v
IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVVJM
UmVzcG9uc2VQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJV
UkxSZXNwb25zZVByaXZhdGUuaAkocmV2aXNpb24gNjkxNDEpCisrKyBXZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlVSTFJlc3BvbnNlUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMSArNDYs
OCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpc3Bvc2UoKSA9IDA7CiAKICAgICBXZWJD
b3JlOjpSZXNvdXJjZVJlc3BvbnNlKiBtX3Jlc291cmNlUmVzcG9uc2U7Ci0KLSAgICAvLyBGSVhN
RTogTW92ZSB0aGlzIHRvIFJlc291cmNlUmVzcG9uc2Ugb25jZSB3ZSBoYXZlIGFuIGludGVybmFs
IGNvbnN1bWVyLgotICAgIFdlYlN0cmluZyBtX2Rvd25sb2FkRmlsZVBhdGg7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKIAotI2VuZGlmCisjZW5kaWYKXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBmaWxlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69881</attachid>
            <date>2010-10-05 20:31:04 -0700</date>
            <delta_ts>2010-10-05 20:47:47 -0700</delta_ts>
            <desc>downloadAsBlob</desc>
            <filename>downloadAsBlob2.txt</filename>
            <type>text/plain</type>
            <size>63666</size>
            <attacher name="Michael Nordman">michaeln</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTE2NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTA1IEBACisyMDEwLTEwLTA1ICBNaWNoYWVsIE5vcmRtYW4gIDxtaWNoYWVsbkBn
b29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZCBzdXBwb3J0IGZvciBnZXR0aW5nIHRoZSByZXN1bHQgb2YgYSByZXNvdXJjZSByZXF1
ZXN0IGFzIGEgYmxvYiwKKyAgICAgICAgYW5kIHVzZSB0aGF0IGNhcGFiaWxpdHkgaW4gc3VwcG9y
dCBvZiBYbWxIdHRwUmVxdWVzdC5yZXNwb25zZUJsb2IuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDcyMgorICAgICAgICAqIFJlc291cmNlSGFuZGxl
IGtub3dzIGhvdyB0byBkZWxpdmVyIGEgcmVzcG9uc2UgYXMgYSBibG9iLiBUbyBhc2sgaXQgdG8g
ZG8gc28sCisgICAgICAgICAgY2FsbCByZXF1ZXN0LnNldERvd25sb2FkQXNCbG9iKHRydWUpIHBy
aW9yIHRvIHN0YXJ0aW5nIGFuIGFzeW5jIFJlc291cmNlSGFuZGxlLAorICAgICAgICAgIG9yIGNh
bGwgbG9hZFJlc291cmNlU3luY2hyb25vdXNseUFzQmxvYigpIGZvciB0aGUgc3luYyBjYXNlLgor
ICAgICAgICAqIFJlc291cmNlSGFuZGxlQ2xpZW50IGhhcyBuZXcgaW50ZXJmYWNlcyBmb3IgdXNl
IGluIHRoZSBhc3luYyBjYXNlLgorICAgICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVC
bG9iRGF0YShSZXNvdXJjZUhhbmRsZSosIGludCk7ICAvLyBubyBkYXRhIHB0ciBpcyBwcm92aWRl
ZAorICAgICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmdCbG9iKFJlc291cmNl
SGFuZGxlKiwgZG91YmxlIC8qZmluaXNoVGltZSovLCBQYXNzUmVmUHRyPEJsb2I+KTsKKyAgICAg
ICAgKiBUaHJlYWRhYmxlTG9hZGVyIGFsc28ga25vd3MgaG93IHRvIGRlbGl2ZXIgYSByZXNwb25z
ZSBhcyBhIGJsb2I7IGFuZAorICAgICAgICAgIHNpbWlsYXJseSwgdGhlIFRocmVhZGFibGVMb2Fk
ZXJDbGllbnQgaGFzICBncm93biB0d28gbmV3IGNhbGxiYWNrIG1ldGhvZHMuCisgICAgICAgICog
RnJhbWVMb2FkZXIgaGFzIGFsc28gZ3Jvd24gYSBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5QXNC
bG9iKCkgbWV0aG9kLgorICAgICAgICAqIFhtbEh0dHBSZXF1ZXN0IGlzIGEgVGhyZWFkYWJsZUxv
YWRlckNsaWVudCB3aGljaCB1c2VzIHJlcXVlc3Quc2V0RG93bmxvYWRBc0Jsb2IoKSBhbmQKKyAg
ICAgICAgICByZWNlaXZlcyB0aGUgcmVzdWx0IGluIGRpZEZpbmlzaExvYWRpbmdCbG9iKCkuCisg
ICAgICAgICogVGhlcmUncyBhIGZhaXIgYW1vdW50IG9mIG1lY2hhbmljYWwgcGx1bWJpbmcgdGhy
b3VnaG91dCAidGhlIGxvYWRlciIgdG8gZ2V0IHRoZSBjbGllbnQKKyAgICAgICAgICBtZXRob2Qg
Y2FsbHMgZnJvbSB0aGUgcmVzb3VyY2UgaGFuZGxlIGFsbCB0aGUgd2F5IHRocnUgdG8gdGhlIHRo
cmVhZGFibGUgbG9hZGVyIGNsaWVudC4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgZmVh
dHVyZSBpc24ndCBmdW5jdGlvbmFsIHlldCBpbiBhbnkgcG9ydC4KKworICAgICAgICAqIGxvYWRl
ci9Eb2N1bWVudExvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6
c3Vic3RpdHV0ZVJlc291cmNlRGVsaXZlcnlUaW1lckZpcmVkKToKKyAgICAgICAgKiBsb2FkZXIv
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
VGhyZWFkYWJsZUxvYWRlcjo6ZGlkUmVjZWl2ZUJsb2JEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZ0Jsb2IpOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVxdWVzdCk6CisgICAg
ICAgICogbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oOgorICAgICAgICAqIGxvYWRl
ci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZFJl
c291cmNlU3luY2hyb25vdXNseSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9h
ZFJlc291cmNlU3luY2hyb25vdXNseUFzQmxvYik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxv
YWRlcjo6cHJlcGFyZVN5bmNSZXFldXN0KToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIu
aDoKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmdCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nT25lUGFydCk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUxvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUJsb2JEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YUNvbW1vbik6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUxvYWRlcjo6Y3JlYXRlQXN5bmNGaWxlU3RyZWFtKToKKyAgICAgICAgKiBsb2FkZXIvUmVz
b3VyY2VMb2FkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyOjpkaWRSZWNl
aXZlQmxvYkRhdGEpOgorICAgICAgICAqIGxvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUJsb2JEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OlN1YnJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OlN1YnJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nQmxv
Yik6CisgICAgICAgIChXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGlu
Z0NvbW1vbik6CisgICAgICAgICogbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmg6CisgICAgICAg
ICogbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyQ2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpT
dWJyZXNvdXJjZUxvYWRlckNsaWVudDo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6U3VicmVzb3VyY2VMb2FkZXJDbGllbnQ6OmRpZFJlY2VpdmVCbG9iRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlckNsaWVudDo6ZGlkRmluaXNoTG9hZGluZ0Jsb2Ip
OgorICAgICAgICAqIGxvYWRlci9UaHJlYWRhYmxlTG9hZGVyQ2xpZW50Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpUaHJlYWRhYmxlTG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpUaHJlYWRhYmxlTG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlQmxvYkRhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6VGhyZWFkYWJsZUxvYWRlckNsaWVudDo6ZGlkRmluaXNoTG9hZGlu
Z0Jsb2IpOgorICAgICAgICAqIGxvYWRlci9UaHJlYWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBlci5o
OgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXI6OmRpZFJl
Y2VpdmVCbG9iRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlTG9hZGVyQ2xpZW50
V3JhcHBlcjo6ZGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxl
TG9hZGVyQ2xpZW50V3JhcHBlcjo6ZGlkRmluaXNoTG9hZGluZ0Jsb2IpOgorICAgICAgICAqIGxv
YWRlci9Xb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ondvcmtl
ckNvbnRleHREaWRSZWNlaXZlQmxvYkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhy
ZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEJyaWRnZTo6ZGlkUmVjZWl2ZUJsb2JEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2U6
OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6d29ya2VyQ29udGV4dERpZEZp
bmlzaExvYWRpbmdCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVMb2Fk
ZXI6Ok1haW5UaHJlYWRCcmlkZ2U6OmRpZEZpbmlzaExvYWRpbmdCbG9iKToKKyAgICAgICAgKiBs
b2FkZXIvV29ya2VyVGhyZWFkYWJsZUxvYWRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VIYW5kbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6
OmNhY2hlTWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmxvYWRS
ZXNvdXJjZVN5bmNocm9ub3VzbHlBc0Jsb2IpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VIYW5kbGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFu
ZGxlQ2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUNsaWVudDo6ZGlk
UmVjZWl2ZUJsb2JEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ2xpZW50
OjpkaWRGaW5pc2hMb2FkaW5nQmxvYik6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNv
dXJjZVJlcXVlc3RCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJh
c2U6OmFkb3B0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OmNvcHlE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmVxdWFsSWdub3JpbmdIZWFkZXJGaWVsZHMpOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6ZG93bmxvYWRBc0Jsb2IpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6c2V0RG93bmxvYWRBc0Jsb2IpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlcXVlc3QuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6ZG93bmxvYWRUb0ZpbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0OjpzZXREb3dubG9hZFRvRmlsZSk6CisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlc3BvbnNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2U6OmRvd25sb2FkRmlsZVBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZTo6c2V0RG93bmxvYWRGaWxlUGF0aCk6CisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlc3BvbnNlLmg6CisgICAg
ICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBS
ZXF1ZXN0OjpjcmVhdGVSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0
OjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0Ojpk
aWRGaW5pc2hMb2FkaW5nQmxvYik6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6
ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmRpZFJl
Y2VpdmVCbG9iRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6ZGlkUmVj
ZWl2ZURhdGFDb21tb24pOgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5oOgorCiAyMDEw
LTEwLTA1ICBWaWN0b3JpYSBLaXJzdCAgPHZya0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEphbWVzIFJvYmluc29uLgpJbmRleDogV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2Fk
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAko
cmV2aXNpb24gNjkxNDEpCisrKyBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU2Miw3ICs1NjIsOCBAQCB2b2lkIERvY3VtZW50TG9hZGVyOjpzdWJz
dGl0dXRlUmVzb3VyY2VECiAgICAgICAgIAogICAgICAgICBpZiAocmVzb3VyY2UpIHsKICAgICAg
ICAgICAgIFNoYXJlZEJ1ZmZlciogZGF0YSA9IHJlc291cmNlLT5kYXRhKCk7Ci0gICAgICAgIAor
CisgICAgICAgICAgICAvLyBGSVhNRTogV3JhcCBhIGJsb2IgYXJvdW5kIHRoZSBkYXRhIGluIHRo
ZSBkb3dubG9hZEFzQmxvYiBjYXNlLgogICAgICAgICAgICAgbG9hZGVyLT5kaWRSZWNlaXZlUmVz
cG9uc2UocmVzb3VyY2UtPnJlc3BvbnNlKCkpOwogICAgICAgICAgICAgbG9hZGVyLT5kaWRSZWNl
aXZlRGF0YShkYXRhLT5kYXRhKCksIGRhdGEtPnNpemUoKSwgZGF0YS0+c2l6ZSgpLCB0cnVlKTsK
ICAgICAgICAgICAgIGxvYWRlci0+ZGlkRmluaXNoTG9hZGluZygwKTsKSW5kZXg6IFdlYkNvcmUv
bG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAkocmV2aXNpb24gNjkxNDEpCisr
KyBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMjgsNiArMjI4LDE4IEBAIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpk
aWRSZWNlaXYKICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZURhdGEoZGF0YSwgbGVuZ3RoUmVjZWl2
ZWQpOwogfQogCit2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkUmVjZWl2ZUJsb2JE
YXRhKFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIGludCBsZW5ndGhSZWNlaXZlZCkKK3sKKyAg
ICBBU1NFUlQobV9jbGllbnQpOworICAgIEFTU0VSVF9VTlVTRUQobG9hZGVyLCBsb2FkZXIgPT0g
bV9sb2FkZXIpOworCisgICAgLy8gSWdub3JlIHJlc3BvbnNlIGJvZHkgb2YgcHJlZmxpZ2h0IHJl
cXVlc3RzLgorICAgIGlmIChtX2FjdHVhbFJlcXVlc3QpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fY2xpZW50LT5kaWRSZWNlaXZlQmxvYkRhdGEobGVuZ3RoUmVjZWl2ZWQpOworfQorCiB2b2lk
IERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyhTdWJyZXNvdXJjZUxv
YWRlciogbG9hZGVyKQogewogICAgIEFTU0VSVChsb2FkZXIgPT0gbV9sb2FkZXIpOwpAQCAtMjM1
LDYgKzI0NywxMyBAQCB2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkRmluaXNoCiAg
ICAgZGlkRmluaXNoTG9hZGluZyhsb2FkZXItPmlkZW50aWZpZXIoKSk7CiB9CiAKK3ZvaWQgRG9j
dW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nQmxvYihTdWJyZXNvdXJjZUxv
YWRlciogbG9hZGVyLCBQYXNzUmVmUHRyPEJsb2I+IGJsb2IpCit7CisgICAgQVNTRVJUKGxvYWRl
ciA9PSBtX2xvYWRlcik7CisgICAgQVNTRVJUKG1fY2xpZW50KTsKKyAgICBkaWRGaW5pc2hMb2Fk
aW5nQmxvYihsb2FkZXItPmlkZW50aWZpZXIoKSwgYmxvYik7Cit9CisKIHZvaWQgRG9jdW1lbnRU
aHJlYWRhYmxlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmll
cikKIHsKICAgICBpZiAobV9hY3R1YWxSZXF1ZXN0KSB7CkBAIC0yNDUsNiArMjY0LDE2IEBAIHZv
aWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRGaW5pc2gKICAgICAgICAgbV9jbGllbnQt
PmRpZEZpbmlzaExvYWRpbmcoaWRlbnRpZmllcik7CiB9CiAKK3ZvaWQgRG9jdW1lbnRUaHJlYWRh
YmxlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nQmxvYih1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIs
IFBhc3NSZWZQdHI8QmxvYj4gYmxvYikKK3sKKyAgICBpZiAobV9hY3R1YWxSZXF1ZXN0KSB7Cisg
ICAgICAgIEFTU0VSVCghbV9zYW1lT3JpZ2luUmVxdWVzdCk7CisgICAgICAgIEFTU0VSVChtX29w
dGlvbnMuY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5ID09IFVzZUFjY2Vzc0NvbnRyb2wpOworICAg
ICAgICBwcmVmbGlnaHRTdWNjZXNzKCk7CisgICAgfSBlbHNlCisgICAgICAgIG1fY2xpZW50LT5k
aWRGaW5pc2hMb2FkaW5nQmxvYihpZGVudGlmaWVyLCBibG9iKTsKK30KKwogdm9pZCBEb2N1bWVu
dFRocmVhZGFibGVMb2FkZXI6OmRpZEZhaWwoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgY29u
c3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiB7CiAgICAgQVNTRVJUKG1fY2xpZW50KTsKQEAgLTMy
NywxMSArMzU2LDE2IEBAIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVxdWUK
ICAgICBTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscyA9IG1fb3B0aW9ucy5hbGxv
d0NyZWRlbnRpYWxzID8gQWxsb3dTdG9yZWRDcmVkZW50aWFscyA6IERvTm90QWxsb3dTdG9yZWRD
cmVkZW50aWFsczsKIAogICAgIFZlY3RvcjxjaGFyPiBkYXRhOworICAgIFJlZlB0cjxCbG9iPiBk
YXRhQXNCbG9iOwogICAgIFJlc291cmNlRXJyb3IgZXJyb3I7CiAgICAgUmVzb3VyY2VSZXNwb25z
ZSByZXNwb25zZTsKICAgICB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIgPSBzdGQ6Om51bWVyaWNf
bGltaXRzPHVuc2lnbmVkIGxvbmc+OjptYXgoKTsKLSAgICBpZiAobV9kb2N1bWVudC0+ZnJhbWUo
KSkKLSAgICAgICAgaWRlbnRpZmllciA9IG1fZG9jdW1lbnQtPmZyYW1lKCktPmxvYWRlcigpLT5s
b2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KHJlcXVlc3QsIHN0b3JlZENyZWRlbnRpYWxzLCBlcnJv
ciwgcmVzcG9uc2UsIGRhdGEpOworICAgIGlmIChtX2RvY3VtZW50LT5mcmFtZSgpKSB7CisgICAg
ICAgIGlmIChyZXF1ZXN0LmRvd25sb2FkQXNCbG9iKCkpCisgICAgICAgICAgICBkYXRhQXNCbG9i
ID0gbV9kb2N1bWVudC0+ZnJhbWUoKS0+bG9hZGVyKCktPmxvYWRSZXNvdXJjZVN5bmNocm9ub3Vz
bHlBc0Jsb2IocmVxdWVzdCwgc3RvcmVkQ3JlZGVudGlhbHMsIGVycm9yLCByZXNwb25zZSwgaWRl
bnRpZmllcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlkZW50aWZpZXIgPSBtX2RvY3Vt
ZW50LT5mcmFtZSgpLT5sb2FkZXIoKS0+bG9hZFJlc291cmNlU3luY2hyb25vdXNseShyZXF1ZXN0
LCBzdG9yZWRDcmVkZW50aWFscywgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKKyAgICB9CiAKICAg
ICAvLyBObyBleGNlcHRpb24gZm9yIGZpbGU6Ly8vIHJlc291cmNlcywgc2VlIDxyZGFyOi8vcHJv
YmxlbS80OTYyMjk4Pi4KICAgICAvLyBBbHNvLCBpZiB3ZSBoYXZlIGFuIEhUVFAgcmVzcG9uc2Us
IHRoZW4gaXQgd2Fzbid0IGEgbmV0d29yayBlcnJvciBpbiBmYWN0LgpAQCAtMzUwLDExICszODQs
MTUgQEAgdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXF1ZQogCiAgICAgZGlk
UmVjZWl2ZVJlc3BvbnNlKDAsIHJlc3BvbnNlKTsKIAotICAgIGNvbnN0IGNoYXIqIGJ5dGVzID0g
c3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEuZGF0YSgpKTsKLSAgICBpbnQgbGVuID0gc3Rh
dGljX2Nhc3Q8aW50PihkYXRhLnNpemUoKSk7Ci0gICAgZGlkUmVjZWl2ZURhdGEoMCwgYnl0ZXMs
IGxlbik7CisgICAgaWYgKHJlcXVlc3QuZG93bmxvYWRBc0Jsb2IoKSkgeworICAgICAgIGRpZEZp
bmlzaExvYWRpbmdCbG9iKGlkZW50aWZpZXIsIGRhdGFBc0Jsb2IucmVsZWFzZSgpKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBjb25zdCBjaGFyKiBieXRlcyA9IHN0YXRpY19jYXN0PGNvbnN0IGNo
YXIqPihkYXRhLmRhdGEoKSk7CisgICAgICAgIGludCBsZW4gPSBzdGF0aWNfY2FzdDxpbnQ+KGRh
dGEuc2l6ZSgpKTsKKyAgICAgICAgZGlkUmVjZWl2ZURhdGEoMCwgYnl0ZXMsIGxlbik7CisgICAg
ICAgIGRpZEZpbmlzaExvYWRpbmcoaWRlbnRpZmllcik7CisgICAgfQogCi0gICAgZGlkRmluaXNo
TG9hZGluZyhpZGVudGlmaWVyKTsKIH0KIAogYm9vbCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6
OmlzQWxsb3dlZFJlZGlyZWN0KGNvbnN0IEtVUkwmIHVybCkKSW5kZXg6IFdlYkNvcmUvbG9hZGVy
L0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVy
L0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oCShyZXZpc2lvbiA2OTE0MSkKKysrIFdlYkNvcmUv
bG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3
ICs3NCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlk
UmVjZWl2ZVJlc3BvbnNlKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoU3VicmVzb3VyY2VMb2Fk
ZXIqLCBjb25zdCBjaGFyKiwgaW50IGxlbmd0aFJlY2VpdmVkKTsKKyAgICAgICAgdmlydHVhbCB2
b2lkIGRpZFJlY2VpdmVCbG9iRGF0YShTdWJyZXNvdXJjZUxvYWRlciosIGludCAvKmxlbmd0aFJl
Y2VpdmVkKi8pOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhTdWJyZXNv
dXJjZUxvYWRlciopOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZ0Jsb2Io
U3VicmVzb3VyY2VMb2FkZXIqLCBQYXNzUmVmUHRyPEJsb2I+KTsKICAgICAgICAgdmlydHVhbCB2
b2lkIGRpZEZhaWwoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBSZXNvdXJjZUVycm9yJik7CiAK
ICAgICAgICAgdmlydHVhbCBib29sIGdldFNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKFN1YnJl
c291cmNlTG9hZGVyKiwgYm9vbCYgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UpOwpAQCAtODIs
NiArODQsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCByZWNl
aXZlZENhbmNlbGxhdGlvbihTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlJik7CiAKICAgICAgICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxv
bmcgaWRlbnRpZmllcik7CisgICAgICAgIHZvaWQgZGlkRmluaXNoTG9hZGluZ0Jsb2IodW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyLCBQYXNzUmVmUHRyPEJsb2I+KTsKKwogICAgICAgICB2b2lkIG1h
a2VTaW1wbGVDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0KTsKICAgICAgICAgdm9pZCBtYWtlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0V2l0aFBy
ZWZsaWdodChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpOwogICAgICAgICB2b2lkIHBy
ZWZsaWdodFN1Y2Nlc3MoKTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDY5
MTQxKQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNzM5LDYgKzI3MzksNDkgQEAgdm9pZCBGcmFtZUxvYWRlcjo6bG9hZFBvc3RSZXF1ZXN0KGNv
bnN0CiAKIHVuc2lnbmVkIGxvbmcgRnJhbWVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3Vz
bHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFscyBzdG9y
ZWRDcmVkZW50aWFscywgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJl
c3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEpCiB7CisgICAgQVNTRVJUKCFyZXF1ZXN0LmRvd25s
b2FkQXNCbG9iKCkpOworICAgIFJlc291cmNlUmVxdWVzdCBhY3R1YWxSZXF1ZXN0OworICAgIHVu
c2lnbmVkIGxvbmcgaWRlbnRpZmllciA9IHByZXBhcmVTeW5jUmVxZXVzdChyZXF1ZXN0LCBzdG9y
ZWRDcmVkZW50aWFscywgZXJyb3IsIGFjdHVhbFJlcXVlc3QpOworICAgIGlmIChlcnJvci5pc051
bGwoKSkgeworICAgICAgICBBU1NFUlQoIWFjdHVhbFJlcXVlc3QuaXNOdWxsKCkpOworICAgICAg
ICAKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorICAgICAgICBpZiAoIWRv
Y3VtZW50TG9hZGVyKCktPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPm1heWJlTG9hZFN5bmNocm9u
b3VzbHkoYWN0dWFsUmVxdWVzdCwgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKSkgeworI2VuZGlmCisg
ICAgICAgICAgICBSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShuZXR3
b3JraW5nQ29udGV4dCgpLCBhY3R1YWxSZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFscywgZXJyb3Is
IHJlc3BvbnNlLCBkYXRhKTsKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQor
ICAgICAgICAgICAgZG9jdW1lbnRMb2FkZXIoKS0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+bWF5
YmVMb2FkRmFsbGJhY2tTeW5jaHJvbm91c2x5KGFjdHVhbFJlcXVlc3QsIGVycm9yLCByZXNwb25z
ZSwgZGF0YSk7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKyAgICBub3RpZmllcigpLT5zZW5k
UmVtYWluaW5nRGVsZWdhdGVNZXNzYWdlcyhtX2RvY3VtZW50TG9hZGVyLmdldCgpLCBpZGVudGlm
aWVyLCByZXNwb25zZSwgZGF0YS5zaXplKCksIGVycm9yKTsKKyAgICByZXR1cm4gaWRlbnRpZmll
cjsKK30KKworUGFzc1JlZlB0cjxCbG9iPiBGcmFtZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hy
b25vdXNseUFzQmxvYihjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRl
bnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzLCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VS
ZXNwb25zZSYgcmVzcG9uc2UsIHVuc2lnbmVkIGxvbmcmIGlkZW50aWZpZXIpCit7CisgICAgQVNT
RVJUKHJlcXVlc3QuZG93bmxvYWRBc0Jsb2IoKSk7CisgICAgUmVzb3VyY2VSZXF1ZXN0IGFjdHVh
bFJlcXVlc3Q7CisgICAgaWRlbnRpZmllciA9IHByZXBhcmVTeW5jUmVxZXVzdChyZXF1ZXN0LCBz
dG9yZWRDcmVkZW50aWFscywgZXJyb3IsIGFjdHVhbFJlcXVlc3QpOworICAgIFJlZlB0cjxCbG9i
PiBkYXRhQXNCbG9iOworICAgIGlmIChlcnJvci5pc051bGwoKSkgeworICAgICAgICBBU1NFUlQo
IWFjdHVhbFJlcXVlc3QuaXNOdWxsKCkpOworICAgICAgICAKKyNpZiAwIC8vIEVOQUJMRShPRkZM
SU5FX1dFQl9BUFBMSUNBVElPTlMpIC8vIEZJWE1FOiBzdXBwb3J0IGZvciBhcHBjYWNoZWQgcmVz
b3VyY2VzCisgICAgICAgIGlmICghZG9jdW1lbnRMb2FkZXIoKS0+YXBwbGljYXRpb25DYWNoZUhv
c3QoKS0+bWF5YmVMb2FkU3luY2hyb25vdXNseShhY3R1YWxSZXF1ZXN0LCBlcnJvciwgcmVzcG9u
c2UsIGRhdGEpKSB7CisjZW5kaWYKKyAgICAgICAgICAgIGRhdGFBc0Jsb2IgPSBSZXNvdXJjZUhh
bmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseUFzQmxvYihuZXR3b3JraW5nQ29udGV4dCgp
LCBhY3R1YWxSZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFscywgZXJyb3IsIHJlc3BvbnNlKTsKKyNp
ZiAwIC8vRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyAgICAgICAgICAgIGRvY3Vt
ZW50TG9hZGVyKCktPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPm1heWJlTG9hZEZhbGxiYWNrU3lu
Y2hyb25vdXNseShhY3R1YWxSZXF1ZXN0LCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOworICAgICAg
ICB9CisjZW5kaWYKKyAgICB9CisgICAgbm90aWZpZXIoKS0+c2VuZFJlbWFpbmluZ0RlbGVnYXRl
TWVzc2FnZXMobV9kb2N1bWVudExvYWRlci5nZXQoKSwgaWRlbnRpZmllciwgcmVzcG9uc2UsIGRh
dGFBc0Jsb2IgPyBkYXRhQXNCbG9iLT5zaXplKCkgOiAwLCBlcnJvcik7CisgICAgcmV0dXJuIGRh
dGFBc0Jsb2I7Cit9CisKK3Vuc2lnbmVkIGxvbmcgRnJhbWVMb2FkZXI6OnByZXBhcmVTeW5jUmVx
ZXVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzIHN0
b3JlZENyZWRlbnRpYWxzLCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXF1ZXN0JiBh
Y3R1YWxSZXF1ZXN0KQorewogICAgIFN0cmluZyByZWZlcnJlciA9IG1fb3V0Z29pbmdSZWZlcnJl
cjsKICAgICBpZiAoU2VjdXJpdHlPcmlnaW46OnNob3VsZEhpZGVSZWZlcnJlcihyZXF1ZXN0LnVy
bCgpLCByZWZlcnJlcikpCiAgICAgICAgIHJlZmVycmVyID0gU3RyaW5nKCk7CkBAIC0yNzUzLDI3
ICsyNzk2LDEyIEBAIHVuc2lnbmVkIGxvbmcgRnJhbWVMb2FkZXI6OmxvYWRSZXNvdXJjZVMKICAg
ICBpZiAoUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKSkKICAgICAgICAgaW5pdGlhbFJlcXVl
c3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMocGFnZS0+bWFpbkZyYW1lKCktPmxvYWRlcigpLT5k
b2N1bWVudExvYWRlcigpLT5yZXF1ZXN0KCkudXJsKCkpOwogICAgIGluaXRpYWxSZXF1ZXN0LnNl
dEhUVFBVc2VyQWdlbnQoY2xpZW50KCktPnVzZXJBZ2VudChyZXF1ZXN0LnVybCgpKSk7Ci0gICAg
CisKICAgICBhZGRFeHRyYUZpZWxkc1RvU3VicmVzb3VyY2VSZXF1ZXN0KGluaXRpYWxSZXF1ZXN0
KTsKIAogICAgIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciA9IDA7ICAgIAotICAgIFJlc291cmNl
UmVxdWVzdCBuZXdSZXF1ZXN0KGluaXRpYWxSZXF1ZXN0KTsKLSAgICByZXF1ZXN0RnJvbURlbGVn
YXRlKG5ld1JlcXVlc3QsIGlkZW50aWZpZXIsIGVycm9yKTsKLQotICAgIGlmIChlcnJvci5pc051
bGwoKSkgewotICAgICAgICBBU1NFUlQoIW5ld1JlcXVlc3QuaXNOdWxsKCkpOwotICAgICAgICAK
LSNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQotICAgICAgICBpZiAoIWRvY3Vt
ZW50TG9hZGVyKCktPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPm1heWJlTG9hZFN5bmNocm9ub3Vz
bHkobmV3UmVxdWVzdCwgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKSkgewotI2VuZGlmCi0gICAgICAg
ICAgICBSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShuZXR3b3JraW5n
Q29udGV4dCgpLCBuZXdSZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFscywgZXJyb3IsIHJlc3BvbnNl
LCBkYXRhKTsKLSNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQotICAgICAgICAg
ICAgZG9jdW1lbnRMb2FkZXIoKS0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+bWF5YmVMb2FkRmFs
bGJhY2tTeW5jaHJvbm91c2x5KG5ld1JlcXVlc3QsIGVycm9yLCByZXNwb25zZSwgZGF0YSk7Ci0g
ICAgICAgIH0KLSNlbmRpZgotICAgIH0KLQotICAgIG5vdGlmaWVyKCktPnNlbmRSZW1haW5pbmdE
ZWxlZ2F0ZU1lc3NhZ2VzKG1fZG9jdW1lbnRMb2FkZXIuZ2V0KCksIGlkZW50aWZpZXIsIHJlc3Bv
bnNlLCBkYXRhLnNpemUoKSwgZXJyb3IpOworICAgIGFjdHVhbFJlcXVlc3QgPSBpbml0aWFsUmVx
dWVzdDsKKyAgICByZXF1ZXN0RnJvbURlbGVnYXRlKGFjdHVhbFJlcXVlc3QsIGlkZW50aWZpZXIs
IGVycm9yKTsKICAgICByZXR1cm4gaWRlbnRpZmllcjsKIH0KIApJbmRleDogV2ViQ29yZS9sb2Fk
ZXIvRnJhbWVMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRl
ci5oCShyZXZpc2lvbiA2OTE0MSkKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBBcmNoaXZlOwogY2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVuZ2U7CitjbGFzcyBCbG9iOwog
Y2xhc3MgQ2FjaGVkRnJhbWVCYXNlOwogY2xhc3MgQ2FjaGVkUGFnZTsKIGNsYXNzIENhY2hlZFJl
c291cmNlOwpAQCAtMTIzLDYgKzEyNCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCByZXBv
cnRMb2NhbExvYWRGYWlsZWQoRnJhbWUqLCBjb25zdCBTdHJpbmcmIHVybCk7CiAKICAgICB1bnNp
Z25lZCBsb25nIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiwgU3RvcmVkQ3JlZGVudGlhbHMsIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwg
VmVjdG9yPGNoYXI+JiBkYXRhKTsKKyAgICBQYXNzUmVmUHRyPEJsb2I+IGxvYWRSZXNvdXJjZVN5
bmNocm9ub3VzbHlBc0Jsb2IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlh
bHMsIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgdW5zaWduZWQgbG9uZyYpOwog
CiAgICAgYm9vbCBjYW5IYW5kbGVSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOwogCkBA
IC00MzEsNiArNDMzLDggQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgdXBkYXRlU2FuZGJveEZsYWdz
KCk7CiAKKyAgICB1bnNpZ25lZCBsb25nIHByZXBhcmVTeW5jUmVxZXVzdChjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmLCBTdG9yZWRDcmVkZW50aWFscywgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVx
dWVzdCYgYWN0dWFsUmVxdWVzdCk7CisKICAgICBGcmFtZSogbV9mcmFtZTsKICAgICBGcmFtZUxv
YWRlckNsaWVudCogbV9jbGllbnQ7CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9h
ZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5jcHAJ
KHJldmlzaW9uIDY5MTQxKQorKysgV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNzksMTggKzI3OSwyMSBAQCB2b2lkIFJlc291cmNlTG9hZGVyOjp3
aWxsU3RvcEJ1ZmZlcmluZ0RhCiAKIHZvaWQgUmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRp
bmcoZG91YmxlIGZpbmlzaFRpbWUpCiB7Ci0gICAgLy8gSWYgbG9hZCBoYXMgYmVlbiBjYW5jZWxs
ZWQgYWZ0ZXIgZmluaXNoaW5nICh3aGljaCBjb3VsZCBoYXBwZW4gd2l0aCBhIAotICAgIC8vIEph
dmFTY3JpcHQgdGhhdCBjaGFuZ2VzIHRoZSB3aW5kb3cgbG9jYXRpb24pLCBkbyBub3RoaW5nLgot
ICAgIGlmIChtX2NhbmNlbGxlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVCghbV9yZWFj
aGVkVGVybWluYWxTdGF0ZSk7CisgICAgZGlkRmluaXNoTG9hZGluZ09uZVBhcnQoZmluaXNoVGlt
ZSk7CisgICAgcmVsZWFzZVJlc291cmNlcygpOworfQogCit2b2lkIFJlc291cmNlTG9hZGVyOjpk
aWRGaW5pc2hMb2FkaW5nQmxvYihkb3VibGUgZmluaXNoVGltZSwgUGFzc1JlZlB0cjxCbG9iPikK
K3sKKyAgICAvLyBGSVhNRTogV2hhdCBhYm91dCBtdWx0aXBhcnQgYW5kIGRvd25sb2FkQXNCbG9i
PwogICAgIGRpZEZpbmlzaExvYWRpbmdPbmVQYXJ0KGZpbmlzaFRpbWUpOwogICAgIHJlbGVhc2VS
ZXNvdXJjZXMoKTsKIH0KIAogdm9pZCBSZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZ09u
ZVBhcnQoZG91YmxlIGZpbmlzaFRpbWUpCiB7CisgICAgLy8gSWYgbG9hZCBoYXMgYmVlbiBjYW5j
ZWxsZWQgYWZ0ZXIgZmluaXNoaW5nICh3aGljaCBjb3VsZCBoYXBwZW4gd2l0aCBhIAorICAgIC8v
IEphdmFTY3JpcHQgdGhhdCBjaGFuZ2VzIHRoZSB3aW5kb3cgbG9jYXRpb24pLCBkbyBub3RoaW5n
LgogICAgIGlmIChtX2NhbmNlbGxlZCkKICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVCghbV9y
ZWFjaGVkVGVybWluYWxTdGF0ZSk7CkBAIC0zOTEsNiArMzk0LDcgQEAgdm9pZCBSZXNvdXJjZUxv
YWRlcjo6d2lsbFNlbmRSZXF1ZXN0KFJlcwogICAgIGlmIChkb2N1bWVudExvYWRlcigpLT5hcHBs
aWNhdGlvbkNhY2hlSG9zdCgpLT5tYXliZUxvYWRGYWxsYmFja0ZvclJlZGlyZWN0KHRoaXMsIHJl
cXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpKQogICAgICAgICByZXR1cm47CiAjZW5kaWYKKyAgICBB
U1NFUlQocmVxdWVzdC5kb3dubG9hZEFzQmxvYigpID09IG1fcmVxdWVzdC5kb3dubG9hZEFzQmxv
YigpKTsKICAgICB3aWxsU2VuZFJlcXVlc3QocmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7CiB9
CiAKQEAgLTQyNCw2ICs0MjgsMTYgQEAgdm9pZCBSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZVJl
c3BvbnNlKAogCiB2b2lkIFJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YShSZXNvdXJjZUhh
bmRsZSosIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgsIGludCBsZW5ndGhSZWNlaXZlZCkK
IHsKKyAgICBkaWRSZWNlaXZlRGF0YUNvbW1vbihmYWxzZSwgZGF0YSwgbGVuZ3RoLCBsZW5ndGhS
ZWNlaXZlZCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVCbG9iRGF0YShS
ZXNvdXJjZUhhbmRsZSosIGludCBsZW5ndGgpCit7CisgICAgZGlkUmVjZWl2ZURhdGFDb21tb24o
dHJ1ZSwgMCwgbGVuZ3RoLCAwKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2
ZURhdGFDb21tb24oYm9vbCBpc0Jsb2JEYXRhLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3Ro
LCBpbnQgbGVuZ3RoUmVjZWl2ZWQpCit7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICBpZiAo
SW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6aW5zdGFuY2VDb3VudCgpKSB7CiAgICAgICAgIEluc3Bl
Y3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSAobV9mcmFtZSAmJiBtX2ZyYW1lLT5w
YWdlKCkpID8gbV9mcmFtZS0+cGFnZSgpLT5pbnNwZWN0b3JUaW1lbGluZUFnZW50KCkgOiAwOwpA
QCAtNDMxLDcgKzQ0NSwxMCBAQCB2b2lkIFJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YShS
ZXNvCiAgICAgICAgICAgICB0aW1lbGluZUFnZW50LT53aWxsUmVjZWl2ZVJlc291cmNlRGF0YShp
ZGVudGlmaWVyKCkpOwogICAgIH0KICNlbmRpZgotICAgIGRpZFJlY2VpdmVEYXRhKGRhdGEsIGxl
bmd0aCwgbGVuZ3RoUmVjZWl2ZWQsIGZhbHNlKTsKKyAgICBpZiAoIWlzQmxvYkRhdGEpCisgICAg
ICAgIGRpZFJlY2VpdmVEYXRhKGRhdGEsIGxlbmd0aCwgbGVuZ3RoUmVjZWl2ZWQsIGZhbHNlKTsK
KyAgICBlbHNlCisgICAgICAgIGRpZFJlY2VpdmVCbG9iRGF0YShsZW5ndGgpOwogI2lmIEVOQUJM
RShJTlNQRUNUT1IpCiAgICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6Omluc3RhbmNlQ291
bnQoKSkgewogICAgICAgICBJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0g
KG1fZnJhbWUgJiYgbV9mcmFtZS0+cGFnZSgpKSA/IG1fZnJhbWUtPnBhZ2UoKS0+aW5zcGVjdG9y
VGltZWxpbmVBZ2VudCgpIDogMDsKQEAgLTQ0Niw2ICs0NjMsMTEgQEAgdm9pZCBSZXNvdXJjZUxv
YWRlcjo6ZGlkRmluaXNoTG9hZGluZyhSZQogICAgIGRpZEZpbmlzaExvYWRpbmcoZmluaXNoVGlt
ZSk7CiB9CiAKK3ZvaWQgUmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmdCbG9iKFJlc291
cmNlSGFuZGxlKiwgZG91YmxlIGZpbmlzaFRpbWUsIFBhc3NSZWZQdHI8QmxvYj4gYmxvYikKK3sK
KyAgICBkaWRGaW5pc2hMb2FkaW5nQmxvYihmaW5pc2hUaW1lLCBibG9iKTsKK30KKwogdm9pZCBS
ZXNvdXJjZUxvYWRlcjo6ZGlkRmFpbChSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlRXJy
b3ImIGVycm9yKQogewogI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCkBAIC01
MTcsNiArNTM5LDggQEAgdm9pZCBSZXNvdXJjZUxvYWRlcjo6d2lsbENhY2hlUmVzcG9uc2UoUgog
I2lmIEVOQUJMRShCTE9CKQogQXN5bmNGaWxlU3RyZWFtKiBSZXNvdXJjZUxvYWRlcjo6Y3JlYXRl
QXN5bmNGaWxlU3RyZWFtKEZpbGVTdHJlYW1DbGllbnQqIGNsaWVudCkKIHsKKyAgICAvLyBGSVhN
RTogRGVjb3VwbGUgdGhlIEZpbGVUaHJlYWQgZnJvbSBTY3JpcHRFeGVjdXRpb25Db250ZXh0cyBh
bmQgcmVtb3ZlIHRoaXMgbWV0aG9kIGZyb20gUmVzb3VyY2VIYW5kbGVDbGllbnQsCisgICAgLy8g
Y2FsbGVycyBzaG91ZSBiZSBhYmxlIHRvIGNyZWF0ZSBhIEZpbGVTdHJlYW1Qcm94eSBpbmRlcGVu
ZGVudCBvZiBhIGNvbnRleHQuCiAgICAgLy8gSXQgaXMgT0sgdG8gc2ltcGx5IHJldHVybiBhIHBv
aW50ZXIgc2luY2UgRmlsZVN0cmVhbVByb3h5OjpjcmVhdGUgYWRkcyBhbiBleHRyYSByZWYuCiAg
ICAgcmV0dXJuIEZpbGVTdHJlYW1Qcm94eTo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCktPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgY2xpZW50KS5nZXQoKTsKIH0KSW5kZXg6IFdlYkNvcmUv
bG9hZGVyL1Jlc291cmNlTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvUmVz
b3VyY2VMb2FkZXIuaAkocmV2aXNpb24gNjkxNDEpCisrKyBXZWJDb3JlL2xvYWRlci9SZXNvdXJj
ZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC04MCw5ICs4MCwxMSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25nIGxv
bmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KTsKICAg
ICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiwg
aW50LCBsb25nIGxvbmcgbGVuZ3RoUmVjZWl2ZWQsIGJvb2wgYWxsQXRPbmNlKTsKKyAgICAgICAg
dmlydHVhbCB2b2lkIGRpZFJlY2VpdmVCbG9iRGF0YShpbnQpIHsgfQogICAgICAgICB2aXJ0dWFs
IHZvaWQgZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKGNvbnN0IGNoYXIqLCBpbnQpIHsgfQogICAg
ICAgICB2b2lkIHdpbGxTdG9wQnVmZmVyaW5nRGF0YShjb25zdCBjaGFyKiwgaW50KTsKICAgICAg
ICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoZG91YmxlIGZpbmlzaFRpbWUpOworICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZ0Jsb2IoZG91YmxlIGZpbmlzaFRpbWUs
IFBhc3NSZWZQdHI8QmxvYj4pOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChjb25zdCBS
ZXNvdXJjZUVycm9yJik7CiAKICAgICAgICAgdmlydHVhbCBib29sIHNob3VsZFVzZUNyZWRlbnRp
YWxTdG9yYWdlKCk7CkBAIC05OCw4ICsxMDAsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGlkU2VuZERhdGEoUmVzb3VyY2VIYW5kbGUqLCB1bnNpZ25lZCBs
b25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50
KTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZUhhbmRs
ZSosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJl
Y2VpdmVEYXRhKFJlc291cmNlSGFuZGxlKiwgY29uc3QgY2hhciosIGludCwgaW50IGxlbmd0aFJl
Y2VpdmVkKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVCbG9iRGF0YShSZXNvdXJj
ZUhhbmRsZSosIGludCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQ2FjaGVkTWV0
YWRhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKSB7IGRp
ZFJlY2VpdmVDYWNoZWRNZXRhZGF0YShkYXRhLCBsZW5ndGgpOyB9CiAgICAgICAgIHZpcnR1YWwg
dm9pZCBkaWRGaW5pc2hMb2FkaW5nKFJlc291cmNlSGFuZGxlKiwgZG91YmxlIGZpbmlzaFRpbWUp
OworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZ0Jsb2IoUmVzb3VyY2VIYW5k
bGUqLCBkb3VibGUgLypmaW5pc2hUaW1lKi8sIFBhc3NSZWZQdHI8QmxvYj4pOwogICAgICAgICB2
aXJ0dWFsIHZvaWQgZGlkRmFpbChSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlRXJyb3Im
KTsKICAgICAgICAgdmlydHVhbCB2b2lkIHdhc0Jsb2NrZWQoUmVzb3VyY2VIYW5kbGUqKTsKICAg
ICAgICAgdmlydHVhbCB2b2lkIGNhbm5vdFNob3dVUkwoUmVzb3VyY2VIYW5kbGUqKTsKQEAgLTE0
MSw2ICsxNDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgcmVhY2hlZFRl
cm1pbmFsU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3JlYWNoZWRUZXJtaW5hbFN0YXRlOyB9CiAg
ICAgICAgIGJvb2wgY2FuY2VsbGVkKCkgY29uc3QgeyByZXR1cm4gbV9jYW5jZWxsZWQ7IH0KICAg
ICAgICAgYm9vbCBkZWZlcnNMb2FkaW5nKCkgY29uc3QgeyByZXR1cm4gbV9kZWZlcnNMb2FkaW5n
OyB9CisgICAgICAgIHZvaWQgZGlkUmVjZWl2ZURhdGFDb21tb24oYm9vbCBpc0Jsb2JEYXRhLCBj
b25zdCBjaGFyKiwgaW50LCBpbnQgbGVuZ3RoUmVjZWl2ZWQpOwogCiAgICAgICAgIFJlZlB0cjxS
ZXNvdXJjZUhhbmRsZT4gbV9oYW5kbGU7CiAgICAgICAgIFJlZlB0cjxGcmFtZT4gbV9mcmFtZTsK
SW5kZXg6IFdlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHAJKHJldmlzaW9uIDY5MTQxKQor
KysgV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTgsNiArMTU4LDIwIEBAIHZvaWQgU3VicmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVEYXRh
KGMKICAgICAgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVEYXRhKHRoaXMsIGRhdGEsIGxlbmd0aCk7
CiB9CiAKK3ZvaWQgU3VicmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVCbG9iRGF0YShpbnQgbGVu
Z3RoKQoreworICAgIC8vIFJlZmVyZW5jZSB0aGUgb2JqZWN0IGluIHRoaXMgbWV0aG9kIHNpbmNl
IHRoZSBhZGRpdGlvbmFsIHByb2Nlc3NpbmcgY2FuIGRvCisgICAgLy8gYW55dGhpbmcgaW5jbHVk
aW5nIHJlbW92aW5nIHRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGlzIG9iamVjdDsgb25lIGV4YW1w
bGUgb2YgdGhpcyBpcyAzMjY2MjE2LgorICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gcHJv
dGVjdCh0aGlzKTsKKworICAgIFJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlQmxvYkRhdGEobGVu
Z3RoKTsKKworICAgIC8vIEEgc3VicmVzb3VyY2UgbG9hZGVyIGRvZXMgbm90IGxvYWQgbXVsdGlw
YXJ0IHNlY3Rpb25zIHByb2dyZXNzaXZlbHkuCisgICAgLy8gU28gZG9uJ3QgZGVsaXZlciBhbnkg
ZGF0YSB0byB0aGUgbG9hZGVyIHlldC4KKyAgICBpZiAoIW1fbG9hZGluZ011bHRpcGFydENvbnRl
bnQgJiYgbV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlQmxvYkRhdGEodGhp
cywgbGVuZ3RoKTsKK30KKwogdm9pZCBTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUNhY2hl
ZE1ldGFkYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCiB7CiAgICAgLy8gUmVmZXJl
bmNlIHRoZSBvYmplY3QgaW4gdGhpcyBtZXRob2Qgc2luY2UgdGhlIGFkZGl0aW9uYWwgcHJvY2Vz
c2luZyBjYW4gZG8KQEAgLTE3MCw2ICsxODQsMTYgQEAgdm9pZCBTdWJyZXNvdXJjZUxvYWRlcjo6
ZGlkUmVjZWl2ZUNhY2hlZAogCiB2b2lkIFN1YnJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2Fk
aW5nKGRvdWJsZSBmaW5pc2hUaW1lKQogeworICAgIGRpZEZpbmlzaExvYWRpbmdDb21tb24oZmFs
c2UsIGZpbmlzaFRpbWUsIDApOworfQorCit2b2lkIFN1YnJlc291cmNlTG9hZGVyOjpkaWRGaW5p
c2hMb2FkaW5nQmxvYihkb3VibGUgZmluaXNoVGltZSwgUGFzc1JlZlB0cjxCbG9iPiBibG9iKQor
eworICAgIGRpZEZpbmlzaExvYWRpbmdDb21tb24odHJ1ZSwgZmluaXNoVGltZSwgYmxvYik7Cit9
CisKK3ZvaWQgU3VicmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmdDb21tb24oYm9vbCBh
c0Jsb2IsIGRvdWJsZSBmaW5pc2hUaW1lLCBQYXNzUmVmUHRyPEJsb2I+IGJsb2IpCit7CiAgICAg
aWYgKGNhbmNlbGxlZCgpKQogICAgICAgICByZXR1cm47CiAgICAgQVNTRVJUKCFyZWFjaGVkVGVy
bWluYWxTdGF0ZSgpKTsKQEAgLTE3OCwxNCArMjAyLDIwIEBAIHZvaWQgU3VicmVzb3VyY2VMb2Fk
ZXI6OmRpZEZpbmlzaExvYWRpbmcKICAgICBSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IHByb3Rl
Y3QodGhpcyk7CiAKICAgICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1fY2xpZW50LT5kaWRGaW5p
c2hMb2FkaW5nKHRoaXMpOwotICAgIAorICAgICAgICBpZiAoYXNCbG9iKQorICAgICAgICAgICAg
bV9jbGllbnQtPmRpZEZpbmlzaExvYWRpbmdCbG9iKHRoaXMsIGJsb2IpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBtX2NsaWVudC0+ZGlkRmluaXNoTG9hZGluZyh0aGlzKTsKKwogICAgIG1f
aGFuZGxlID0gMDsKIAogICAgIGlmIChjYW5jZWxsZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAg
IG1fZG9jdW1lbnRMb2FkZXItPnJlbW92ZVN1YnJlc291cmNlTG9hZGVyKHRoaXMpOwotICAgIFJl
c291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKGZpbmlzaFRpbWUpOworICAgIGlmIChhc0Js
b2IpCisgICAgICAgIFJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nQmxvYihmaW5pc2hU
aW1lLCBibG9iKTsKKyAgICBlbHNlCisgICAgICAgIFJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hM
b2FkaW5nKGZpbmlzaFRpbWUpOwogfQogCiB2b2lkIFN1YnJlc291cmNlTG9hZGVyOjpkaWRGYWls
KGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQpJbmRleDogV2ViQ29yZS9sb2FkZXIvU3VicmVz
b3VyY2VMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxv
YWRlci5oCShyZXZpc2lvbiA2OTE0MSkKKysrIFdlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9h
ZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDE0ICs1MSwxOCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25nIGxvbmcg
Ynl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KTsKICAgICAg
ICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNl
Jik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiwgaW50
LCBsb25nIGxvbmcgbGVuZ3RoUmVjZWl2ZWQsIGJvb2wgYWxsQXRPbmNlKTsKKyAgICAgICAgdmly
dHVhbCB2b2lkIGRpZFJlY2VpdmVCbG9iRGF0YShpbnQpOwogICAgICAgICB2aXJ0dWFsIHZvaWQg
ZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKGNvbnN0IGNoYXIqLCBpbnQpOwogICAgICAgICB2aXJ0
dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhkb3VibGUgZmluaXNoVGltZSk7CisgICAgICAgIHZp
cnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nQmxvYihkb3VibGUgZmluaXNoVGltZSwgUGFzc1Jl
ZlB0cjxCbG9iPik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKGNvbnN0IFJlc291cmNl
RXJyb3ImKTsKICAgICAgICAgdmlydHVhbCBib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdl
KCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKICAgICAgICAgdmlydHVhbCB2b2lk
IHJlY2VpdmVkQ2FuY2VsbGF0aW9uKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7ICAg
ICAgICAKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZENhbmNlbChjb25zdCBSZXNvdXJjZUVycm9y
Jik7CiAKKyAgICAgICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nQ29tbW9uKGJvb2wgYXNCbG9iLCBk
b3VibGUgZmluaXNoVGltZSwgUGFzc1JlZlB0cjxCbG9iPik7CisKICAgICAgICAgU3VicmVzb3Vy
Y2VMb2FkZXJDbGllbnQqIG1fY2xpZW50OwogICAgICAgICBib29sIG1fbG9hZGluZ011bHRpcGFy
dENvbnRlbnQ7CiAgICAgfTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVy
Q2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXJD
bGllbnQuaAkocmV2aXNpb24gNjkxNDEpCisrKyBXZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxv
YWRlckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw5IEBACiAjaWZuZGVmIFN1
YnJlc291cmNlTG9hZGVyQ2xpZW50X2gKICNkZWZpbmUgU3VicmVzb3VyY2VMb2FkZXJDbGllbnRf
aAogCisjaW5jbHVkZSAiQmxvYi5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVuZ2U7CkBAIC00
NiwxMSArNDksMTMgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YShTdWJy
ZXNvdXJjZUxvYWRlciosIHVuc2lnbmVkIGxvbmcgbG9uZyAvKmJ5dGVzU2VudCovLCB1bnNpZ25l
ZCBsb25nIGxvbmcgLyp0b3RhbEJ5dGVzVG9CZVNlbnQqLykgeyB9CiAKICAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShTdWJyZXNvdXJj
ZUxvYWRlciosIGNvbnN0IGNoYXIqLCBpbnQgLypsZW5ndGhSZWNlaXZlZCovKSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBjaGFy
KiwgaW50IC8qbGVuZ3RoUmVjZWl2ZWQqLykgeyB9IC8vIE5vdCBjYWxsZWQgaWYgcmVxdWVzdC5k
b3dubG9hZEFzQmxvYiBpcyBzZXQuCisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVCbG9iRGF0
YShTdWJyZXNvdXJjZUxvYWRlciosIGludCAvKmxlbmd0aFJlY2VpdmVkKi8pIHsgfSAvLyBPbmx5
IGNhbGxlZCBpZiByZXF1ZXN0LmRvd25sb2FkQXNCbG9iIGlzIHNldC4KICAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgY2hh
ciosIGludCAvKmxlbmd0aFJlY2VpdmVkKi8pIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5p
c2hMb2FkaW5nKFN1YnJlc291cmNlTG9hZGVyKikgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZEZp
bmlzaExvYWRpbmdCbG9iKFN1YnJlc291cmNlTG9hZGVyKiwgUGFzc1JlZlB0cjxCbG9iPikgeyB9
CiAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBSZXNv
dXJjZUVycm9yJikgeyB9Ci0gICAgCisKICAgICB2aXJ0dWFsIGJvb2wgZ2V0U2hvdWxkVXNlQ3Jl
ZGVudGlhbFN0b3JhZ2UoU3VicmVzb3VyY2VMb2FkZXIqLCBib29sJiAvKnNob3VsZFVzZUNyZWRl
bnRpYWxTdG9yYWdlKi8pIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2b2lkIGRpZFJl
Y2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHJlY2VpdmVkQ2Fu
Y2VsbGF0aW9uKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UmKSB7IH0KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1RocmVhZGFibGVMb2FkZXJDbGllbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxlTG9hZGVyQ2xpZW50LmgJKHJl
dmlzaW9uIDY5MTQxKQorKysgV2ViQ29yZS9sb2FkZXIvVGhyZWFkYWJsZUxvYWRlckNsaWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw5IEBACiAjaWZuZGVmIFRocmVhZGFibGVMb2Fk
ZXJDbGllbnRfaAogI2RlZmluZSBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50X2gKIAorI2luY2x1ZGUg
IkJsb2IuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKICAgICBjbGFzcyBSZXNvdXJjZUVycm9yOwpAQCAtNDEsOCArNDQsMTAgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkU2VuZERhdGEodW5zaWduZWQg
bG9uZyBsb25nIC8qYnl0ZXNTZW50Ki8sIHVuc2lnbmVkIGxvbmcgbG9uZyAvKnRvdGFsQnl0ZXNU
b0JlU2VudCovKSB7IH0KIAogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNl
KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSB7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJl
Y2VpdmVEYXRhKGNvbnN0IGNoYXIqLCBpbnQgLypsZW5ndGhSZWNlaXZlZCovKSB7IH0KKyAgICAg
ICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqLCBpbnQgLypsZW5ndGhS
ZWNlaXZlZCovKSB7IH0gLy8gTm90IGNhbGxlZCB3aGVuIHJlcXVlc3QuZG93bmxvYWRBc0Jsb2Ig
aXMgc2V0LgorICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUJsb2JEYXRhKGludCAvKiBs
ZW5ndGhSZWNlaXZlZCovKSB7IH0gLy8gT25seSBjYWxsZWQgZm9yIHJlcXVlc3QuZG93bmxvYWRB
c0Jsb2IKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9u
ZyAvKmlkZW50aWZpZXIqLykgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2Fk
aW5nQmxvYih1bnNpZ25lZCBsb25nIC8qaWRlbnRpZmllciovLCBQYXNzUmVmUHRyPEJsb2I+KSB7
IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpIHsg
fQogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbFJlZGlyZWN0Q2hlY2soKSB7IH0KIApJbmRl
eDogV2ViQ29yZS9sb2FkZXIvVGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBlci5oCShy
ZXZpc2lvbiA2OTE0MSkKKysrIFdlYkNvcmUvbG9hZGVyL1RocmVhZGFibGVMb2FkZXJDbGllbnRX
cmFwcGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDYgKzc0LDEyIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgICAgICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZURhdGEoZGF0YSwgbGVu
Z3RoUmVjZWl2ZWQpOwogICAgICAgICB9CiAKKyAgICAgICAgdm9pZCBkaWRSZWNlaXZlQmxvYkRh
dGEoaW50IGxlbmd0aFJlY2VpdmVkKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV9jbGll
bnQpCisgICAgICAgICAgICAgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVCbG9iRGF0YShsZW5ndGhS
ZWNlaXZlZCk7CisgICAgICAgIH0KKwogICAgICAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmcodW5z
aWduZWQgbG9uZyBpZGVudGlmaWVyKQogICAgICAgICB7CiAgICAgICAgICAgICBtX2RvbmUgPSB0
cnVlOwpAQCAtODEsNiArODcsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAg
ICAgIG1fY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKGlkZW50aWZpZXIpOwogICAgICAgICB9CiAK
KyAgICAgICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nQmxvYih1bnNpZ25lZCBsb25nIGlkZW50aWZp
ZXIsIFBhc3NSZWZQdHI8QmxvYj4gYmxvYikKKyAgICAgICAgeworICAgICAgICAgICAgbV9kb25l
ID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgICAgICAgICBtX2Ns
aWVudC0+ZGlkRmluaXNoTG9hZGluZ0Jsb2IoaWRlbnRpZmllciwgYmxvYik7CisgICAgICAgIH0K
KwogICAgICAgICB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIG1fZG9uZSA9IHRydWU7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9X
b3JrZXJUaHJlYWRhYmxlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9X
b3JrZXJUaHJlYWRhYmxlTG9hZGVyLmNwcAkocmV2aXNpb24gNjkxNDEpCisrKyBXZWJDb3JlL2xv
YWRlci9Xb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkxLDYg
KzE5MSwxMiBAQCBzdGF0aWMgdm9pZCB3b3JrZXJDb250ZXh0RGlkUmVjZWl2ZURhdGEoCiAgICAg
d29ya2VyQ2xpZW50V3JhcHBlci0+ZGlkUmVjZWl2ZURhdGEodmVjdG9yRGF0YS0+ZGF0YSgpLCB2
ZWN0b3JEYXRhLT5zaXplKCkpOwogfQogCitzdGF0aWMgdm9pZCB3b3JrZXJDb250ZXh0RGlkUmVj
ZWl2ZUJsb2JEYXRhKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFJlZlB0cjxUaHJl
YWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBlcj4gd29ya2VyQ2xpZW50V3JhcHBlciwgaW50IGxlbmd0
aFJlY2VpdmVkKQoreworICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwgY29udGV4dC0+aXNXb3Jr
ZXJDb250ZXh0KCkpOworICAgIHdvcmtlckNsaWVudFdyYXBwZXItPmRpZFJlY2VpdmVCbG9iRGF0
YShsZW5ndGhSZWNlaXZlZCk7Cit9CisKIHZvaWQgV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6TWFp
blRocmVhZEJyaWRnZTo6ZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0
aFJlY2VpdmVkKQogewogICAgIE93blB0cjxWZWN0b3I8Y2hhcj4gPiB2ZWN0b3IgPSBhZG9wdFB0
cihuZXcgVmVjdG9yPGNoYXI+KGxlbmd0aFJlY2VpdmVkKSk7IC8vIG5lZWRzIHRvIGJlIGFuIE93
blB0ciBmb3IgdXNhZ2Ugd2l0aCBjcmVhdGVDYWxsYmFja1Rhc2suCkBAIC0xOTgsNiArMjA0LDEx
IEBAIHZvaWQgV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEIKICAgICBtX2xvYWRl
clByb3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyQ29udGV4dChjcmVhdGVDYWxsYmFja1Rhc2so
JndvcmtlckNvbnRleHREaWRSZWNlaXZlRGF0YSwgbV93b3JrZXJDbGllbnRXcmFwcGVyLCB2ZWN0
b3IucmVsZWFzZSgpKSwgbV90YXNrTW9kZSk7CiB9CiAKK3ZvaWQgV29ya2VyVGhyZWFkYWJsZUxv
YWRlcjo6TWFpblRocmVhZEJyaWRnZTo6ZGlkUmVjZWl2ZUJsb2JEYXRhKGludCBsZW5ndGhSZWNl
aXZlZCkKK3sKKyAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyQ29udGV4
dChjcmVhdGVDYWxsYmFja1Rhc2soJndvcmtlckNvbnRleHREaWRSZWNlaXZlQmxvYkRhdGEsIG1f
d29ya2VyQ2xpZW50V3JhcHBlciwgbGVuZ3RoUmVjZWl2ZWQpLCBtX3Rhc2tNb2RlKTsKK30KKwog
c3RhdGljIHZvaWQgd29ya2VyQ29udGV4dERpZEZpbmlzaExvYWRpbmcoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgUmVmUHRyPFRocmVhZGFibGVMb2FkZXJDbGllbnRXcmFwcGVyPiB3
b3JrZXJDbGllbnRXcmFwcGVyLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpCiB7CiAgICAgQVNT
RVJUX1VOVVNFRChjb250ZXh0LCBjb250ZXh0LT5pc1dvcmtlckNvbnRleHQoKSk7CkBAIC0yMDks
NiArMjIwLDIxIEBAIHZvaWQgV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEIKICAg
ICBtX2xvYWRlclByb3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyQ29udGV4dChjcmVhdGVDYWxs
YmFja1Rhc2soJndvcmtlckNvbnRleHREaWRGaW5pc2hMb2FkaW5nLCBtX3dvcmtlckNsaWVudFdy
YXBwZXIsIGlkZW50aWZpZXIpLCBtX3Rhc2tNb2RlKTsKIH0KIAorc3RhdGljIHZvaWQgd29ya2Vy
Q29udGV4dERpZEZpbmlzaExvYWRpbmdCbG9iKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIFJlZlB0cjxUaHJlYWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBlcj4gd29ya2VyQ2xpZW50V3Jh
cHBlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBsb25nIGlkZW50aWZpZXIsIEtVUkwgYmxvYklELCBTdHJpbmcgdHlwZSwgbG9uZyBsb25n
IHNpemUpCit7CisgICAgQVNTRVJUX1VOVVNFRChjb250ZXh0LCBjb250ZXh0LT5pc1dvcmtlckNv
bnRleHQoKSk7CisgICAgd29ya2VyQ2xpZW50V3JhcHBlci0+ZGlkRmluaXNoTG9hZGluZ0Jsb2Io
aWRlbnRpZmllciwgQmxvYjo6Y3JlYXRlKGJsb2JJRCwgdHlwZSwgc2l6ZSkpOworfQorCit2b2lk
IFdvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2U6OmRpZEZpbmlzaExvYWRp
bmdCbG9iKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgUGFzc1JlZlB0cjxCbG9iPiBibG9iKQor
eworICAgIG1fZG93bmxvYWRlZEJsb2IgPSBibG9iOworICAgIG1fbG9hZGVyUHJveHkucG9zdFRh
c2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KAorICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJndv
cmtlckNvbnRleHREaWRGaW5pc2hMb2FkaW5nQmxvYiwgbV93b3JrZXJDbGllbnRXcmFwcGVyLCBp
ZGVudGlmaWVyLCBibG9iLT51cmwoKSwgYmxvYi0+dHlwZSgpLCBibG9iLT5zaXplKCkpLAorICAg
ICAgICBtX3Rhc2tNb2RlKTsKK30KKwogc3RhdGljIHZvaWQgd29ya2VyQ29udGV4dERpZEZhaWwo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUmVmUHRyPFRocmVhZGFibGVMb2FkZXJD
bGllbnRXcmFwcGVyPiB3b3JrZXJDbGllbnRXcmFwcGVyLCBjb25zdCBSZXNvdXJjZUVycm9yJiBl
cnJvcikKIHsKICAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQsIGNvbnRleHQtPmlzV29ya2VyQ29u
dGV4dCgpKTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1dvcmtlclRocmVhZGFibGVMb2FkZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9Xb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmgJKHJl
dmlzaW9uIDY5MTQxKQorKysgV2ViQ29yZS9sb2FkZXIvV29ya2VyVGhyZWFkYWJsZUxvYWRlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNyArMTE0LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFNlbmREYXRhKHVuc2lnbmVkIGxvbmcgbG9uZyBi
eXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpOwogICAgICAg
ICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJik7CiAgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hh
ciosIGludCBsZW5ndGhSZWNlaXZlZCk7CisgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVj
ZWl2ZUJsb2JEYXRhKGludCBsZW5ndGhSZWNlaXZlZCk7CiAgICAgICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpOworICAgICAgICAg
ICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmdCbG9iKHVuc2lnbmVkIGxvbmcgaWRlbnRp
ZmllciwgUGFzc1JlZlB0cjxCbG9iPik7CiAgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFp
bChjb25zdCBSZXNvdXJjZUVycm9yJik7CiAgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFp
bFJlZGlyZWN0Q2hlY2soKTsKICAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQXV0
aGVudGljYXRpb25DYW5jZWxsYXRpb24oY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwpAQCAtMTMx
LDYgKzEzMyw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICAgICAgLy8gRm9yIHVz
ZSBvbiB0aGUgbWFpbiB0aHJlYWQuCiAgICAgICAgICAgICBTdHJpbmcgbV90YXNrTW9kZTsKKwor
ICAgICAgICAgICAgLy8gT25seSB0byBiZSB1c2VkIG9uIHRoZSBtYWluIHRocmVhZC4KKyAgICAg
ICAgICAgIFJlZlB0cjxCbG9iPiBtX2Rvd25sb2FkZWRCbG9iOwogICAgICAgICB9OwogCiAgICAg
ICAgIFdvcmtlclRocmVhZGFibGVMb2FkZXIoV29ya2VyQ29udGV4dCosIFRocmVhZGFibGVMb2Fk
ZXJDbGllbnQqLCBjb25zdCBTdHJpbmcmIHRhc2tNb2RlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
LCBjb25zdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyYpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCShyZXZpc2lvbiA2OTE0MSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkJsb2JSZWdpc3RyeS5oIgogI2luY2x1ZGUgIkRO
Uy5oIgorI2luY2x1ZGUgIkhUVFBQYXJzZXJzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2lu
Y2x1ZGUgIlJlc291cmNlSGFuZGxlQ2xpZW50LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKQEAgLTU0
LDYgKzU1LDcgQEAgUmVzb3VyY2VIYW5kbGU6OlJlc291cmNlSGFuZGxlKGNvbnN0IFJlcwogCiBQ
YXNzUmVmUHRyPFJlc291cmNlSGFuZGxlPiBSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlKE5ldHdvcmtp
bmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291
cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQsIGJvb2wgZGVmZXJzTG9hZGluZywgYm9vbCBzaG91bGRD
b250ZW50U25pZmYpCiB7CisgICAgQVNTRVJUKCFyZXF1ZXN0LmRvd25sb2FkQXNCbG9iKCkpOyAv
LyBGSVhNRTogSGFuZGxlIHRoaXMgY2FzZSB3aXRoIGEgUmVzb3VyY2VIYW5kbGVDbGllbnQgaW1w
bGVtZW50YXRpb24gdGhhdCBicmlkZ2VzIHRoZSBnYXAuCiAjaWYgRU5BQkxFKEJMT0IpCiAgICAg
aWYgKHJlcXVlc3QudXJsKCkucHJvdG9jb2xJcygiYmxvYiIpKSB7CiAgICAgICAgIFBhc3NSZWZQ
dHI8UmVzb3VyY2VIYW5kbGU+IGhhbmRsZSA9IGJsb2JSZWdpc3RyeSgpLmNyZWF0ZVJlc291cmNl
SGFuZGxlKHJlcXVlc3QsIGNsaWVudCk7CkBAIC0xODUsNCArMTg3LDMyIEBAIHZvaWQgUmVzb3Vy
Y2VIYW5kbGU6OmNhY2hlTWV0YWRhdGEoY29uc3QKICAgICAvLyBPcHRpb25hbGx5IGltcGxlbWVu
dGVkIGJ5IHBsYXRmb3JtLgogfQogCisvLyBzdGF0aWMKK1Bhc3NSZWZQdHI8QmxvYj4gUmVzb3Vy
Y2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHlBc0Jsb2IoCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHdvcmtpbmdDb250ZXh0KiBjb250
ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZUVy
cm9yJiBlcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgQVNTRVJUKHJlcXVlc3QuZG93
bmxvYWRBc0Jsb2IoKSk7CisKKyAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKKyAgICBsb2FkUmVzb3Vy
Y2VTeW5jaHJvbm91c2x5KGNvbnRleHQsIHJlcXVlc3QsIHN0b3JlZENyZWRlbnRpYWxzLCBlcnJv
ciwgcmVzcG9uc2UsIGRhdGEpOworICAgIGlmICghZXJyb3IuaXNOdWxsKCkpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgU3RyaW5nIGNvbnRlbnRUeXBlOworICAgIGlmIChyZXNwb25zZS5pc0hU
VFAoKSkKKyAgICAgICAgY29udGVudFR5cGUgPSBleHRyYWN0TUlNRVR5cGVGcm9tTWVkaWFUeXBl
KHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZCgiQ29udGVudC1UeXBlIikpOworICAgIGVsc2UKKyAg
ICAgICAgY29udGVudFR5cGUgPSByZXNwb25zZS5taW1lVHlwZSgpOworCisgICAgT3duUHRyPEJs
b2JEYXRhPiBibG9iRGF0YSA9IEJsb2JEYXRhOjpjcmVhdGUoKTsKKyAgICBibG9iRGF0YS0+c2V0
Q29udGVudFR5cGUoY29udGVudFR5cGUpOworICAgIGlmICghZGF0YS5pc0VtcHR5KCkpCisgICAg
ICAgIGJsb2JEYXRhLT5hcHBlbmREYXRhKENTdHJpbmcoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgp
KSk7ICAvLyBGSVhNRTogRG9uJ3QgY29weSB0aGUgZGF0YS4KKyAgICByZXR1cm4gQmxvYjo6Y3Jl
YXRlKGJsb2JEYXRhLnJlbGVhc2UoKSwgZGF0YS5zaXplKCkpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUu
aAkocmV2aXNpb24gNjkxNDEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VI
YW5kbGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQsNyBAQCB0eXBlZGVmIHN0cnVjdCBP
cGFxdWVDRkhUVFBDb29raWVTdG9yYWdlCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOworY2xhc3MgQmxvYjsKIGNsYXNzIENyZWRlbnRpYWw7CiBj
bGFzcyBGb3JtRGF0YTsKIGNsYXNzIEZyYW1lOwpAQCAtOTcsNiArOTgsNyBAQCBjbGFzcyBSZXNv
dXJjZUhhbmRsZSA6IHB1YmxpYyBSZWZDb3VudGVkCiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGNyZWF0ZShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYsIFJlc291cmNlSGFuZGxlQ2xpZW50KiwgYm9vbCBkZWZlcnNMb2FkaW5n
LCBib29sIHNob3VsZENvbnRlbnRTbmlmZik7CiAgICAgc3RhdGljIHZvaWQgbG9hZFJlc291cmNl
U3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYs
IFN0b3JlZENyZWRlbnRpYWxzLCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZl
Y3RvcjxjaGFyPiYgZGF0YSk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYj4gbG9hZFJlc291
cmNlU3luY2hyb25vdXNseUFzQmxvYihOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYsIFN0b3JlZENyZWRlbnRpYWxzLCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNw
b25zZSYpOwogCiAgICAgc3RhdGljIHZvaWQgcHJlcGFyZUZvclVSTChjb25zdCBLVVJMJik7CiAg
ICAgc3RhdGljIGJvb2wgd2lsbExvYWRGcm9tQ2FjaGUoUmVzb3VyY2VSZXF1ZXN0JiwgRnJhbWUq
KTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUNsaWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUNs
aWVudC5oCShyZXZpc2lvbiA2OTE0MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNv
dXJjZUhhbmRsZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw5IEBACiAjaWZu
ZGVmIFJlc291cmNlSGFuZGxlQ2xpZW50X2gKICNkZWZpbmUgUmVzb3VyY2VIYW5kbGVDbGllbnRf
aAogCisjaW5jbHVkZSAiQmxvYi5oIgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKQEAgLTcyLDggKzc0LDEwIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291cmNl
SGFuZGxlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpIHsgfQogICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVjZWl2ZURhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiwgaW50LCBpbnQg
LypsZW5ndGhSZWNlaXZlZCovKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVC
bG9iRGF0YShSZXNvdXJjZUhhbmRsZSosIGludCkgeyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBk
aWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiwgaW50
KSB7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoUmVzb3VyY2VIYW5k
bGUqLCBkb3VibGUgLypmaW5pc2hUaW1lKi8pIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZGlk
RmluaXNoTG9hZGluZ0Jsb2IoUmVzb3VyY2VIYW5kbGUqLCBkb3VibGUgLypmaW5pc2hUaW1lKi8s
IFBhc3NSZWZQdHI8QmxvYj4pIHsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChSZXNv
dXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlRXJyb3ImKSB7IH0KICAgICAgICAgdmlydHVhbCB2
b2lkIHdhc0Jsb2NrZWQoUmVzb3VyY2VIYW5kbGUqKSB7IH0KICAgICAgICAgdmlydHVhbCB2b2lk
IGNhbm5vdFNob3dVUkwoUmVzb3VyY2VIYW5kbGUqKSB7IH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAJKHJldmlzaW9uIDY5MTQx
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBAIFBhc3NPd25QdHI8UmVzb3VyY2VSZXF1ZXN0
PiBSZXNvdXJjZVJlcXUKICAgICByZXF1ZXN0LT5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhkYXRh
LT5tX2ZpcnN0UGFydHlGb3JDb29raWVzKTsKICAgICByZXF1ZXN0LT5zZXRIVFRQTWV0aG9kKGRh
dGEtPm1faHR0cE1ldGhvZCk7CiAgICAgcmVxdWVzdC0+c2V0VGFyZ2V0VHlwZShkYXRhLT5tX3Rh
cmdldFR5cGUpOworICAgIHJlcXVlc3QtPnNldERvd25sb2FkQXNCbG9iKGRhdGEtPm1fZG93bmxv
YWRBc0Jsb2IpOwogCiAgICAgcmVxdWVzdC0+dXBkYXRlUmVzb3VyY2VSZXF1ZXN0KCk7CiAgICAg
cmVxdWVzdC0+bV9odHRwSGVhZGVyRmllbGRzLmFkb3B0KGRhdGEtPm1faHR0cEhlYWRlcnMucmVs
ZWFzZSgpKTsKQEAgLTc5LDYgKzgwLDcgQEAgUGFzc093blB0cjxDcm9zc1RocmVhZFJlc291cmNl
UmVxdWVzdERhdAogICAgIGRhdGEtPm1faHR0cE1ldGhvZCA9IGh0dHBNZXRob2QoKS5jcm9zc1Ro
cmVhZFN0cmluZygpOwogICAgIGRhdGEtPm1faHR0cEhlYWRlcnMgPSBodHRwSGVhZGVyRmllbGRz
KCkuY29weURhdGEoKTsKICAgICBkYXRhLT5tX3RhcmdldFR5cGUgPSBtX3RhcmdldFR5cGU7Cisg
ICAgZGF0YS0+bV9kb3dubG9hZEFzQmxvYiA9IG1fZG93bmxvYWRBc0Jsb2I7CiAKICAgICBkYXRh
LT5tX3Jlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5LnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkobV9yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFs
bGJhY2tBcnJheS5zaXplKCkpOwogICAgIHNpemVfdCBlbmNvZGluZ0FycmF5U2l6ZSA9IG1fcmVz
cG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkuc2l6ZSgpOwpAQCAt
MzQxLDcgKzM0MywxMCBAQCBib29sIGVxdWFsSWdub3JpbmdIZWFkZXJGaWVsZHMoY29uc3QgUmVz
CiAgICAgCiAgICAgaWYgKGEuYWxsb3dDb29raWVzKCkgIT0gYi5hbGxvd0Nvb2tpZXMoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCisgICAgaWYgKGEuZG93bmxvYWRBc0Jsb2IoKSAh
PSBiLmRvd25sb2FkQXNCbG9iKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIEZvcm1E
YXRhKiBmb3JtRGF0YUEgPSBhLmh0dHBCb2R5KCk7CiAgICAgRm9ybURhdGEqIGZvcm1EYXRhQiA9
IGIuaHR0cEJvZHkoKTsKICAgICAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNv
dXJjZVJlcXVlc3RCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlUmVxdWVzdEJhc2UuaAkocmV2aXNpb24gNjkxNDEpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQs
NiArMTQ0LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgVGFyZ2V0VHlwZSB0YXJn
ZXRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRUeXBlOyB9CiAgICAgICAgIHZvaWQgc2V0
VGFyZ2V0VHlwZShUYXJnZXRUeXBlIHR5cGUpIHsgbV90YXJnZXRUeXBlID0gdHlwZTsgfQogCisg
ICAgICAgIC8vIElmIHRydWUsIHRoZSByZXNwb25zZSBib2R5IHdpbGwgYmUgcHJvdmlkZWQgYXMg
YSBibG9iLgorICAgICAgICBib29sIGRvd25sb2FkQXNCbG9iKCkgY29uc3QgeyByZXR1cm4gbV9k
b3dubG9hZEFzQmxvYjsgfQorICAgICAgICB2b2lkIHNldERvd25sb2FkQXNCbG9iKGJvb2wgZG93
bmxvYWQpIHsgbV9kb3dubG9hZEFzQmxvYiA9IGRvd25sb2FkOyB9CisKICAgICAgICAgc3RhdGlj
IGJvb2wgY29tcGFyZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmKTsKIAogICAgIHByb3RlY3RlZDoKQEAgLTE1NSw2ICsxNTksNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgICAgICAsIG1fcmVwb3J0TG9hZFRpbWluZyhmYWxzZSkKICAgICAgICAg
ICAgICwgbV9yZXBvcnRSYXdIZWFkZXJzKGZhbHNlKQogICAgICAgICAgICAgLCBtX3RhcmdldFR5
cGUoVGFyZ2V0SXNTdWJyZXNvdXJjZSkKKyAgICAgICAgICAgICwgbV9kb3dubG9hZEFzQmxvYihm
YWxzZSkKICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTE3MCw2ICsxNzUsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAsIG1fcmVwb3J0TG9hZFRpbWluZyhmYWxzZSkKICAg
ICAgICAgICAgICwgbV9yZXBvcnRSYXdIZWFkZXJzKGZhbHNlKQogICAgICAgICAgICAgLCBtX3Rh
cmdldFR5cGUoVGFyZ2V0SXNTdWJyZXNvdXJjZSkKKyAgICAgICAgICAgICwgbV9kb3dubG9hZEFz
QmxvYihmYWxzZSkKICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTE5NSw2ICsyMDEsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgbV9yZXBvcnRMb2FkVGltaW5nOwogICAg
ICAgICBib29sIG1fcmVwb3J0UmF3SGVhZGVyczsKICAgICAgICAgVGFyZ2V0VHlwZSBtX3Rhcmdl
dFR5cGU7CisgICAgICAgIGJvb2wgbV9kb3dubG9hZEFzQmxvYjsKIAogICAgIHByaXZhdGU6CiAg
ICAgICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgYXNSZXNvdXJjZVJlcXVlc3QoKSBjb25zdDsK
QEAgLTIxOCw2ICsyMjUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFJlZlB0cjxG
b3JtRGF0YT4gbV9odHRwQm9keTsKICAgICAgICAgYm9vbCBtX2FsbG93Q29va2llczsKICAgICAg
ICAgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6VGFyZ2V0VHlwZSBtX3RhcmdldFR5cGU7CisgICAgICAg
IGJvb2wgbV9kb3dubG9hZEFzQmxvYjsKICAgICB9OwogICAgIAogICAgIHVuc2lnbmVkIGluaXRp
YWxpemVNYXhpbXVtSFRUUENvbm5lY3Rpb25Db3VudFBlckhvc3QoKTsKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlcXVlc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vUmVzb3VyY2VSZXF1ZXN0LmgJKHJl
dmlzaW9uIDY5MTQxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL1Jlc291
cmNlUmVxdWVzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCwxMCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIGludCBhcHBDYWNoZUhvc3RJRCgpIGNvbnN0IHsgcmV0dXJuIG1f
YXBwQ2FjaGVIb3N0SUQ7IH0KICAgICAgICAgdm9pZCBzZXRBcHBDYWNoZUhvc3RJRChpbnQgaWQp
IHsgbV9hcHBDYWNoZUhvc3RJRCA9IGlkOyB9CiAKKyAgICAgICAgLy8gSWYgdHJ1ZSwgdGhlIHJl
c3BvbnNlIGJvZHkgd2lsbCBiZSBwcm92aWRlZCBhcyBhIGZpbGUuCisgICAgICAgIGJvb2wgZG93
bmxvYWRUb0ZpbGUoKSBjb25zdCB7IHJldHVybiBkb3dubG9hZEFzQmxvYigpOyB9CisgICAgICAg
IHZvaWQgc2V0RG93bmxvYWRUb0ZpbGUoYm9vbCBkb3dubG9hZCkgeyBzZXREb3dubG9hZEFzQmxv
Yihkb3dubG9hZCk7IH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBSZXNv
dXJjZVJlcXVlc3RCYXNlOwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21p
dW0vUmVzb3VyY2VSZXNwb25zZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2Nocm9taXVtL1Jlc291cmNlUmVzcG9uc2UuY3BwCShyZXZpc2lvbiA2OTE0MSkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlc3BvbnNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsMTggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Citjb25zdCBTdHJpbmcmIFJlc291cmNlUmVzcG9uc2U6OmRvd25sb2FkRmlsZVBhdGgoKSBjb25z
dAoreworICAgIGxhenlJbml0KCk7CisgICAgcmV0dXJuIG1fZG93bmxvYWRGaWxlUGF0aDsKK30K
Kwordm9pZCBSZXNvdXJjZVJlc3BvbnNlOjpzZXREb3dubG9hZEZpbGVQYXRoKGNvbnN0IFN0cmlu
ZyYgcGF0aCkKK3sKKyAgICBsYXp5SW5pdCgpOworICAgIG1fZG93bmxvYWRGaWxlUGF0aCAgPSBw
YXRoOworfQorCiBQYXNzT3duUHRyPENyb3NzVGhyZWFkUmVzb3VyY2VSZXNwb25zZURhdGE+IFJl
c291cmNlUmVzcG9uc2U6OmRvUGxhdGZvcm1Db3B5RGF0YShQYXNzT3duUHRyPENyb3NzVGhyZWFk
UmVzb3VyY2VSZXNwb25zZURhdGE+IGRhdGEpIGNvbnN0CiB7CiAgICAgZGF0YS0+bV9hcHBDYWNo
ZUlEID0gbV9hcHBDYWNoZUlEOwpAQCAtMzksNiArNTEsNyBAQCBQYXNzT3duUHRyPENyb3NzVGhy
ZWFkUmVzb3VyY2VSZXNwb25zZURhCiAgICAgZGF0YS0+bV93YXNBbHRlcm5hdGVQcm90b2NvbEF2
YWlsYWJsZSA9IG1fd2FzQWx0ZXJuYXRlUHJvdG9jb2xBdmFpbGFibGU7CiAgICAgZGF0YS0+bV93
YXNGZXRjaGVkVmlhUHJveHkgPSBtX3dhc0ZldGNoZWRWaWFQcm94eTsKICAgICBkYXRhLT5tX3Jl
c3BvbnNlVGltZSA9IG1fcmVzcG9uc2VUaW1lOworICAgIGRhdGEtPm1fZG93bmxvYWRGaWxlUGF0
aCA9IG1fZG93bmxvYWRGaWxlUGF0aDsKICAgICByZXR1cm4gZGF0YTsKIH0KIApAQCAtNTMsNiAr
NjYsNyBAQCB2b2lkIFJlc291cmNlUmVzcG9uc2U6OmRvUGxhdGZvcm1BZG9wdChQCiAgICAgbV93
YXNBbHRlcm5hdGVQcm90b2NvbEF2YWlsYWJsZSA9IGRhdGEtPm1fd2FzQWx0ZXJuYXRlUHJvdG9j
b2xBdmFpbGFibGU7CiAgICAgbV93YXNGZXRjaGVkVmlhUHJveHkgPSBkYXRhLT5tX3dhc0ZldGNo
ZWRWaWFQcm94eTsKICAgICBtX3Jlc3BvbnNlVGltZSA9IGRhdGEtPm1fcmVzcG9uc2VUaW1lOwor
ICAgIG1fZG93bmxvYWRGaWxlUGF0aCA9IGRhdGEtPm1fZG93bmxvYWRGaWxlUGF0aDsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2No
cm9taXVtL1Jlc291cmNlUmVzcG9uc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY2hyb21pdW0vUmVzb3VyY2VSZXNwb25zZS5oCShyZXZpc2lvbiA2OTE0MSkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlc3BvbnNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTk2LDYgKzk2LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgZG91YmxlIHJlc3BvbnNlVGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzcG9uc2VUaW1lOyB9
CiAgICAgICAgIHZvaWQgc2V0UmVzcG9uc2VUaW1lKGRvdWJsZSByZXNwb25zZVRpbWUpIHsgbV9y
ZXNwb25zZVRpbWUgPSByZXNwb25zZVRpbWU7IH0KIAorICAgICAgICAvLyBJbmRpY2F0ZXMgdGhl
IGxvY2F0aW9uIG9mIGEgZG93bmxvYWRlZCByZXNwb25zZSBpZiB0aGUKKyAgICAgICAgLy8gUmVz
b3VyY2VSZXF1ZXN0IGhhZCB0aGUgZG93bmxvYWRUb0ZpbGUvQmxvYiBmbGFnIHNldCB0byB0cnVl
LgorICAgICAgICAvLyBUaGUgZmlsZSB3aWxsIHJlbWFpbiB2YWxpZCB1bnRpbCB0aGUgUmVzb3Vy
Y2VIYW5kbGUgdXNlZAorICAgICAgICAvLyB0byByZXRyaWV2ZSB0aGlzIGZpbGUgaGFzIGJlZW4g
ZGVsZXRlZC4KKyAgICAgICAgY29uc3QgU3RyaW5nJiBkb3dubG9hZEZpbGVQYXRoKCkgY29uc3Q7
CisgICAgICAgIHZvaWQgc2V0RG93bmxvYWRGaWxlUGF0aChjb25zdCBTdHJpbmcmIHBhdGgpOwor
CiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIFJlc291cmNlUmVzcG9uc2VCYXNl
OwogCkBAIC0xNDMsNiArMTUwLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBU
aGUgdGltZSBhdCB3aGljaCB0aGUgcmVzcG9uc2UgaGVhZGVycyB3ZXJlIHJlY2VpdmVkLiAgRm9y
IGNhY2hlZAogICAgICAgICAvLyByZXNwb25zZXMsIHRoaXMgdGltZSBjb3VsZCBiZSAiZmFyIiBp
biB0aGUgcGFzdC4KICAgICAgICAgZG91YmxlIG1fcmVzcG9uc2VUaW1lOworCisgICAgICAgIC8v
IFRoZSByZXN1bHRpbmcgZG93bmxvYWRlZCBmaWxlIHBhdGggaW4gdGhlIHJlcXVlc3QuZG93bmxv
YWRUb0ZpbGUgY2FzZS4KKyAgICAgICAgU3RyaW5nIG1fZG93bmxvYWRGaWxlUGF0aDsKICAgICB9
OwogCiAgICAgc3RydWN0IENyb3NzVGhyZWFkUmVzb3VyY2VSZXNwb25zZURhdGEgOiBwdWJsaWMg
Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0YUJhc2UgewpAQCAtMTU1LDYgKzE2NSw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX3dhc0FsdGVybmF0ZVByb3RvY29s
QXZhaWxhYmxlOwogICAgICAgICBib29sIG1fd2FzRmV0Y2hlZFZpYVByb3h5OwogICAgICAgICBk
b3VibGUgbV9yZXNwb25zZVRpbWU7CisgICAgICAgIFN0cmluZyBtX2Rvd25sb2FkRmlsZVBhdGg7
CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS94bWwvWE1M
SHR0cFJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0
LmNwcAkocmV2aXNpb24gNjkxNDEpCisrKyBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU5Myw2ICs1OTMsMTAgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6
Y3JlYXRlUmVxdWVzdChFeGNlcAogICAgIGlmIChtX3JlcXVlc3RIZWFkZXJzLnNpemUoKSA+IDAp
CiAgICAgICAgIHJlcXVlc3QuYWRkSFRUUEhlYWRlckZpZWxkcyhtX3JlcXVlc3RIZWFkZXJzKTsK
IAorI2lmIEVOQUJMRShYSFJfUkVTUE9OU0VfQkxPQikKKyAgICByZXF1ZXN0LnNldERvd25sb2Fk
QXNCbG9iKG1fYXNCbG9iKTsKKyNlbmRpZgorCiAgICAgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMg
b3B0aW9uczsKICAgICBvcHRpb25zLnNlbmRMb2FkQ2FsbGJhY2tzID0gdHJ1ZTsKICAgICBvcHRp
b25zLnNuaWZmQ29udGVudCA9IGZhbHNlOwpAQCAtOTYyLDEwICs5NjYsNiBAQCB2b2lkIFhNTEh0
dHBSZXF1ZXN0OjpkaWRGaW5pc2hMb2FkaW5nKHVuCiAgICAgaWYgKG1fZGVjb2RlcikKICAgICAg
ICAgbV9yZXNwb25zZVRleHQgKz0gbV9kZWNvZGVyLT5mbHVzaCgpOwogCi0jaWYgRU5BQkxFKFhI
Ul9SRVNQT05TRV9CTE9CKQotICAgIC8vIEZJWE1FOiBTZXQgbV9yZXNwb25zZUJsb2IgdG8gc29t
ZXRoaW5nIGhlcmUgaW4gdGhlIG1fYXNCbG9iIGNhc2UuCi0jZW5kaWYKLQogI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCiAgICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvciA9IHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpKQogICAgICAgICBpbnNw
ZWN0b3ItPnJlc291cmNlUmV0cmlldmVkQnlYTUxIdHRwUmVxdWVzdChpZGVudGlmaWVyLCBtX3Jl
c3BvbnNlVGV4dCwgbV91cmwsIG1fbGFzdFNlbmRVUkwsIG1fbGFzdFNlbmRMaW5lTnVtYmVyKTsK
QEAgLTk4MSw2ICs5ODEsMTcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlkRmluaXNoTG9hZGlu
Zyh1bgogICAgICAgICBkcm9wUHJvdGVjdGlvbigpOwogfQogCit2b2lkIFhNTEh0dHBSZXF1ZXN0
OjpkaWRGaW5pc2hMb2FkaW5nQmxvYih1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIFBhc3NSZWZQ
dHI8QmxvYj4gYmxvYikKK3sKKyNpZiBFTkFCTEUoWEhSX1JFU1BPTlNFX0JMT0IpCisgICAgaWYg
KCFtX2Vycm9yKQorICAgICAgICBtX3Jlc3BvbnNlQmxvYiA9IGJsb2I7CisgICAgZGlkRmluaXNo
TG9hZGluZyhpZGVudGlmaWVyKTsKKyNlbHNlCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisj
ZW5kaWYKK30KKwogdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlkU2VuZERhdGEodW5zaWduZWQgbG9u
ZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkK
IHsKICAgICBpZiAoIW1fdXBsb2FkKQpAQCAtMTAxMSwxMyArMTAyMiwyOSBAQCB2b2lkIFhNTEh0
dHBSZXF1ZXN0OjpkaWRSZWNlaXZlQXV0aGVudGljCiAKIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRp
ZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW4pCiB7CisgICAgZGlkUmVjZWl2
ZURhdGFDb21tb24oZmFsc2UsIGRhdGEsIGxlbik7Cit9CisKK3ZvaWQgWE1MSHR0cFJlcXVlc3Q6
OmRpZFJlY2VpdmVCbG9iRGF0YShpbnQgbGVuKQoreworI2lmIEVOQUJMRShYSFJfUkVTUE9OU0Vf
QkxPQikKKyAgICBBU1NFUlQobGVuID49IDApOworICAgIGRpZFJlY2VpdmVEYXRhQ29tbW9uKHRy
dWUsIDAsIGxlbik7CisjZWxzZQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCit9
CisKK3ZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpZFJlY2VpdmVEYXRhQ29tbW9uKGJvb2wgaXNCbG9i
RGF0YSwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbikKK3sKICAgICBpZiAobV9lcnJvcikKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fc3RhdGUgPCBIRUFERVJTX1JFQ0VJVkVEKQogICAg
ICAgICBjaGFuZ2VTdGF0ZShIRUFERVJTX1JFQ0VJVkVEKTsKIAotICAgIGlmICghbV9kZWNvZGVy
KSB7CisgICAgaWYgKGRhdGEgJiYgIW1fZGVjb2RlcikgeworICAgICAgICBBU1NFUlQoIWlzQmxv
YkRhdGEpOwogICAgICAgICBpZiAoIW1fcmVzcG9uc2VFbmNvZGluZy5pc0VtcHR5KCkpCiAgICAg
ICAgICAgICBtX2RlY29kZXIgPSBUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUoInRleHQvcGxh
aW4iLCBtX3Jlc3BvbnNlRW5jb2RpbmcpOwogICAgICAgICAvLyBhbGxvdyBUZXh0UmVzb3VyY2VE
ZWNvZGVyIHRvIGxvb2sgaW5zaWRlIHRoZSBtX3Jlc3BvbnNlIGlmIGl0J3MgWE1MIG9yIEhUTUwK
QEAgLTEwMzEsMTMgKzEwNTgsMTUgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlkUmVjZWl2ZURh
dGEoY29ucwogICAgICAgICAgICAgbV9kZWNvZGVyID0gVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3Jl
YXRlKCJ0ZXh0L3BsYWluIiwgIlVURi04Iik7CiAgICAgfQogCi0gICAgaWYgKCFsZW4pCi0gICAg
ICAgIHJldHVybjsKKyAgICBpZiAoIWlzQmxvYkRhdGEpIHsKKyAgICAgICAgaWYgKCFsZW4pCisg
ICAgICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobGVuID09IC0xKQotICAgICAgICBsZW4gPSBz
dHJsZW4oZGF0YSk7CisgICAgICAgIGlmIChsZW4gPT0gLTEpIAorICAgICAgICAgICAgbGVuID0g
c3RybGVuKGRhdGEpOwogCi0gICAgbV9yZXNwb25zZVRleHQgKz0gbV9kZWNvZGVyLT5kZWNvZGUo
ZGF0YSwgbGVuKTsKKyAgICAgICAgbV9yZXNwb25zZVRleHQgKz0gbV9kZWNvZGVyLT5kZWNvZGUo
ZGF0YSwgbGVuKTsKKyAgICB9CiAKICAgICBpZiAoIW1fZXJyb3IpIHsKICAgICAgICAgbG9uZyBs
b25nIGV4cGVjdGVkTGVuZ3RoID0gbV9yZXNwb25zZS5leHBlY3RlZENvbnRlbnRMZW5ndGgoKTsK
SW5kZXg6IFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS94bWwvWE1MSHR0cFJlcXVlc3QuaAkocmV2aXNpb24gNjkxNDEpCisrKyBXZWJDb3JlL3htbC9Y
TUxIdHRwUmVxdWVzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsMTEgKzEyNywxNSBAQCBwcml2
YXRlOgogICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25nIGxvbmcgYnl0
ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KTsKICAgICB2aXJ0
dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKICAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0
aFJlY2VpdmVkKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUJsb2JEYXRhKGludCBsZW5n
dGhSZWNlaXZlZCk7CiAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQg
bG9uZyBpZGVudGlmaWVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZ0Jsb2Io
dW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBQYXNzUmVmUHRyPEJsb2I+IGJsb2IpOwogICAgIHZp
cnR1YWwgdm9pZCBkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKICAgICB2aXJ0dWFsIHZv
aWQgZGlkRmFpbFJlZGlyZWN0Q2hlY2soKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUF1
dGhlbnRpY2F0aW9uQ2FuY2VsbGF0aW9uKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKIAorICAg
IHZvaWQgZGlkUmVjZWl2ZURhdGFDb21tb24oYm9vbCBpc0Jsb2JEYXRhLCBjb25zdCBjaGFyKiBk
YXRhLCBpbnQgbGVuZ3RoUmVjZWl2ZWQpOworCiAgICAgU3RyaW5nIHJlc3BvbnNlTUlNRVR5cGUo
KSBjb25zdDsKICAgICBib29sIHJlc3BvbnNlSXNYTUwoKSBjb25zdDsKIApJbmRleDogV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCShyZXZpc2lvbiA2OTE2NikKKysrIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwzMyBAQAorMjAxMC0xMC0wNSAgTWljaGFlbCBOb3JkbWFuICA8
bWljaGFlbG5AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgZ2V0dGluZyB0aGUgcmVzdWx0IG9mIGEgcmVz
b3VyY2UgcmVxdWVzdCBhcyBhIGJsb2IuCisgICAgICAgIEluIENocm9tZSwgdGhpcyBmZWF0dXJl
IGlzIGltcGxlbWVudGVkIGluIHRlcm1zIG9mIHRoZSAnZG93bmxvYWRUb0ZpbGUnCisgICAgICAg
IGZlYXR1cmUgb2YgdGhlIG5ldHdvcmsgc3RhY2suCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDcyMgorCisgICAgICAgICogc3JjL1Jlc291cmNlSGFu
ZGxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlSW50ZXJuYWw6OlJlc291
cmNlSGFuZGxlSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVJbnRl
cm5hbDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFu
ZGxlSW50ZXJuYWw6OmRpZERvd25sb2FkRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZUludGVybmFsOjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlSGFuZGxlSW50ZXJuYWw6OmRldGVybWluZUNvbnRlbnRUeXBlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlSGFuZGxlSW50ZXJuYWw6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkp
OgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9u
b3VzbHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5
bmNocm9ub3VzbHlBc0Jsb2IpOgorICAgICAgICAqIHNyYy9XZWJVUkxSZXF1ZXN0LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViVVJMUmVxdWVzdFByaXZhdGVJbXBsOjpXZWJVUkxSZXF1ZXN0UHJp
dmF0ZUltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXF1ZXN0Ojpkb3dubG9hZFRvRmls
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlcXVlc3Q6OnNldERvd25sb2FkVG9GaWxlKToK
KyAgICAgICAgKiBzcmMvV2ViVVJMUmVxdWVzdFByaXZhdGUuaDoKKyAgICAgICAgKFdlYktpdDo6
V2ViVVJMUmVxdWVzdFByaXZhdGU6OldlYlVSTFJlcXVlc3RQcml2YXRlKToKKyAgICAgICAgKiBz
cmMvV2ViVVJMUmVzcG9uc2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXNwb25zZVBy
aXZhdGVJbXBsOjpXZWJVUkxSZXNwb25zZVByaXZhdGVJbXBsKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVVJMUmVzcG9uc2U6OmRvd25sb2FkRmlsZVBhdGgpOgorICAgICAgICAoV2ViS2l0OjpXZWJV
UkxSZXNwb25zZTo6c2V0RG93bmxvYWRGaWxlUGF0aCk6CisgICAgICAgICogc3JjL1dlYlVSTFJl
c3BvbnNlUHJpdmF0ZS5oOgorCiAyMDEwLTA5LTI5ICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSmFtZXMgUm9iaW5zb24uCkluZGV4OiBXZWJL
aXQvY2hyb21pdW0vc3JjL1Jlc291cmNlSGFuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
Y2hyb21pdW0vc3JjL1Jlc291cmNlSGFuZGxlLmNwcAkocmV2aXNpb24gNjkxNDEpCisrKyBXZWJL
aXQvY2hyb21pdW0vc3JjL1Jlc291cmNlSGFuZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIs
NiArMzIsNyBAQAogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAKICNpbmNsdWRlICJDaHJv
bWl1bUJyaWRnZS5oIgorI2luY2x1ZGUgIkhUVFBQYXJzZXJzLmgiCiAjaW5jbHVkZSAiUmVzb3Vy
Y2VIYW5kbGVDbGllbnQuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRl
ICJTaGFyZWRCdWZmZXIuaCIKQEAgLTU5LDYgKzYwLDcgQEAgcHVibGljOgogICAgICAgICAsIG1f
b3duZXIoMCkKICAgICAgICAgLCBtX2NsaWVudChjbGllbnQpCiAgICAgICAgICwgbV9zdGF0ZShD
b25uZWN0aW9uU3RhdGVOZXcpCisgICAgICAgICwgbV9kb3dubG9hZGVkRmlsZUxlbmd0aCgwKQog
ICAgIHsKICAgICB9CiAKQEAgLTczLDEwICs3NSwxOSBAQCBwdWJsaWM6CiAgICAgICAgIFdlYlVS
TExvYWRlciosIHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9u
ZyB0b3RhbEJ5dGVzVG9CZVNlbnQpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9u
c2UoV2ViVVJMTG9hZGVyKiwgY29uc3QgV2ViVVJMUmVzcG9uc2UmKTsKICAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVjZWl2ZURhdGEoV2ViVVJMTG9hZGVyKiwgY29uc3QgY2hhciogZGF0YSwgaW50IGRh
dGFMZW5ndGgpOworICAgIHZpcnR1YWwgdm9pZCBkaWREb3dubG9hZERhdGEoV2ViVVJMTG9hZGVy
KiwgaW50IGRhdGFMZW5ndGgpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQ2FjaGVkTWV0
YWRhdGEoV2ViVVJMTG9hZGVyKiwgY29uc3QgY2hhciogZGF0YSwgaW50IGRhdGFMZW5ndGgpOwog
ICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKFdlYlVSTExvYWRlciosIGRvdWJsZSBm
aW5pc2hUaW1lKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChXZWJVUkxMb2FkZXIqLCBjb25z
dCBXZWJVUkxFcnJvciYpOwogCisgICAgc3RhdGljIFN0cmluZyBkZXRlcm1pbmVDb250ZW50VHlw
ZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYj4g
bG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRp
YWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUmVzb3VyY2VFcnJvciYgZXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3Rvcjxj
aGFyPiogZGF0YSk7CisKICAgICBlbnVtIENvbm5lY3Rpb25TdGF0ZSB7CiAgICAgICAgIENvbm5l
Y3Rpb25TdGF0ZU5ldywKICAgICAgICAgQ29ubmVjdGlvblN0YXRlU3RhcnRlZCwKQEAgLTkxLDYg
KzEwMiw5IEBAIHB1YmxpYzoKICAgICBSZXNvdXJjZUhhbmRsZSogbV9vd25lcjsKICAgICBSZXNv
dXJjZUhhbmRsZUNsaWVudCogbV9jbGllbnQ7CiAgICAgT3duUHRyPFdlYlVSTExvYWRlcj4gbV9s
b2FkZXI7CisgICAgU3RyaW5nIG1fZG93bmxvYWRlZEZpbGVQYXRoOworICAgIFN0cmluZyBtX2Rv
d25sb2FkZWRGaWxlQ29udGVudFR5cGU7CisgICAgbG9uZyBsb25nIG1fZG93bmxvYWRlZEZpbGVM
ZW5ndGg7CiAKICAgICAvLyBVc2VkIGZvciBzYW5pdHkgY2hlY2tpbmcgdG8gbWFrZSBzdXJlIHdl
IGRvbid0IGV4cGVyaWVuY2UgaWxsZWdhbCBzdGF0ZQogICAgIC8vIHRyYW5zaXRpb25zLgpAQCAt
MTU2LDYgKzE3MCwxMCBAQCB2b2lkIFJlc291cmNlSGFuZGxlSW50ZXJuYWw6OmRpZFJlY2VpdmVS
CiAgICAgaWYgKCFpc011bHRpcGFydCAmJiAhaXNWYWxpZFN0YXRlVHJhbnNpdGlvbikKICAgICAg
ICAgQ1JBU0goKTsKICAgICBtX3N0YXRlID0gQ29ubmVjdGlvblN0YXRlUmVjZWl2ZWRSZXNwb25z
ZTsKKyAgICBpZiAobV9yZXF1ZXN0LmRvd25sb2FkVG9GaWxlKCkpIHsKKyAgICAgICAgbV9kb3du
bG9hZGVkRmlsZVBhdGggPSByZXNwb25zZS50b1Jlc291cmNlUmVzcG9uc2UoKS5kb3dubG9hZEZp
bGVQYXRoKCk7CisgICAgICAgIG1fZG93bmxvYWRlZEZpbGVDb250ZW50VHlwZSA9IGRldGVybWlu
ZUNvbnRlbnRUeXBlKHJlc3BvbnNlLnRvUmVzb3VyY2VSZXNwb25zZSgpKTsKKyAgICB9CiAgICAg
bV9jbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZShtX293bmVyLCByZXNwb25zZS50b1Jlc291cmNl
UmVzcG9uc2UoKSk7CiB9CiAKQEAgLTE3Myw2ICsxOTEsMTcgQEAgdm9pZCBSZXNvdXJjZUhhbmRs
ZUludGVybmFsOjpkaWRSZWNlaXZlRAogICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlRGF0YShtX293
bmVyLCBkYXRhLCBkYXRhTGVuZ3RoLCBkYXRhTGVuZ3RoKTsKIH0KIAordm9pZCBSZXNvdXJjZUhh
bmRsZUludGVybmFsOjpkaWREb3dubG9hZERhdGEoV2ViVVJMTG9hZGVyKiwgaW50IGRhdGFMZW5n
dGgpCit7CisgICAgQVNTRVJUKG1fY2xpZW50KTsKKyAgICBBU1NFUlQobV9yZXF1ZXN0LmRvd25s
b2FkVG9GaWxlKCkpOworICAgIGlmIChtX3N0YXRlICE9IENvbm5lY3Rpb25TdGF0ZVJlY2VpdmVk
UmVzcG9uc2UgJiYgbV9zdGF0ZSAhPSBDb25uZWN0aW9uU3RhdGVSZWNlaXZpbmdEYXRhKQorICAg
ICAgICBDUkFTSCgpOworICAgIG1fc3RhdGUgPSBDb25uZWN0aW9uU3RhdGVSZWNlaXZpbmdEYXRh
OworICAgIG1fZG93bmxvYWRlZEZpbGVMZW5ndGggKz0gZGF0YUxlbmd0aDsKKyAgICBtX2NsaWVu
dC0+ZGlkUmVjZWl2ZUJsb2JEYXRhKG1fb3duZXIsIGRhdGFMZW5ndGgpOworfQorCiB2b2lkIFJl
c291cmNlSGFuZGxlSW50ZXJuYWw6OmRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YShXZWJVUkxMb2Fk
ZXIqLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgZGF0YUxlbmd0aCkKIHsKICAgICBBU1NFUlQobV9j
bGllbnQpOwpAQCAtMTg4LDcgKzIxNywxOCBAQCB2b2lkIFJlc291cmNlSGFuZGxlSW50ZXJuYWw6
OmRpZEZpbmlzaExvCiAgICAgaWYgKG1fc3RhdGUgIT0gQ29ubmVjdGlvblN0YXRlUmVjZWl2ZWRS
ZXNwb25zZSAmJiBtX3N0YXRlICE9IENvbm5lY3Rpb25TdGF0ZVJlY2VpdmluZ0RhdGEpCiAgICAg
ICAgIENSQVNIKCk7CiAgICAgbV9zdGF0ZSA9IENvbm5lY3Rpb25TdGF0ZUZpbmlzaGVkTG9hZGlu
ZzsKLSAgICBtX2NsaWVudC0+ZGlkRmluaXNoTG9hZGluZyhtX293bmVyLCBmaW5pc2hUaW1lKTsK
KyAgICBpZiAobV9yZXF1ZXN0LmRvd25sb2FkQXNCbG9iKCkpIHsKKyAgICAgICAgQVNTRVJUKG1f
cmVxdWVzdC5kb3dubG9hZFRvRmlsZSgpKTsgLy8gVG9GaWxlIGFuZCBBc0Jsb2IgYXJlIG9uZSBh
bmQgdGhlIHNhbWUgZm9yIG5vdy4KKyAgICAgICAgUmVmUHRyPEJsb2I+IGRhdGFBc0Jsb2I7Cisg
ICAgICAgIGlmICghbV9kb3dubG9hZGVkRmlsZVBhdGguaXNFbXB0eSgpKSB7CisgICAgICAgICAg
ICBPd25QdHI8QmxvYkRhdGE+IGJsb2JEYXRhID0gQmxvYkRhdGE6OmNyZWF0ZSgpOworICAgICAg
ICAgICAgYmxvYkRhdGEtPnNldENvbnRlbnRUeXBlKG1fZG93bmxvYWRlZEZpbGVDb250ZW50VHlw
ZSk7CisgICAgICAgICAgICBibG9iRGF0YS0+YXBwZW5kRmlsZShtX2Rvd25sb2FkZWRGaWxlUGF0
aCk7CisgICAgICAgICAgICBkYXRhQXNCbG9iID0gQmxvYjo6Y3JlYXRlKGJsb2JEYXRhLnJlbGVh
c2UoKSwgbV9kb3dubG9hZGVkRmlsZUxlbmd0aCk7CisgICAgICAgIH0KKyAgICAgICAgbV9jbGll
bnQtPmRpZEZpbmlzaExvYWRpbmdCbG9iKG1fb3duZXIsIGZpbmlzaFRpbWUsIGRhdGFBc0Jsb2Ip
OworICAgIH0gZWxzZQorICAgICAgICBtX2NsaWVudC0+ZGlkRmluaXNoTG9hZGluZyhtX293bmVy
LCBmaW5pc2hUaW1lKTsKIH0KIAogdm9pZCBSZXNvdXJjZUhhbmRsZUludGVybmFsOjpkaWRGYWls
KFdlYlVSTExvYWRlciosIGNvbnN0IFdlYlVSTEVycm9yJiBlcnJvcikKQEAgLTE5OCw2ICsyMzgs
NTEgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZUludGVybmFsOjpkaWRGYWlsKFdlYgogICAgIG1fY2xp
ZW50LT5kaWRGYWlsKG1fb3duZXIsIGVycm9yKTsKIH0KIAorLy8gc3RhdGljCitTdHJpbmcgUmVz
b3VyY2VIYW5kbGVJbnRlcm5hbDo6ZGV0ZXJtaW5lQ29udGVudFR5cGUoY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgaWYgKHJlc3BvbnNlLmlzSFRUUCgpKQorICAgICAg
ICByZXR1cm4gZXh0cmFjdE1JTUVUeXBlRnJvbU1lZGlhVHlwZShyZXNwb25zZS5odHRwSGVhZGVy
RmllbGQoIkNvbnRlbnQtVHlwZSIpKTsKKyAgICByZXR1cm4gcmVzcG9uc2UubWltZVR5cGUoKTsK
K30KKworLy8gc3RhdGljCitQYXNzUmVmUHRyPEJsb2I+IFJlc291cmNlSGFuZGxlSW50ZXJuYWw6
OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0b3Jl
ZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlRXJyb3Im
IGVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFZlY3RvcjxjaGFyPiogZGF0YSkKK3sKKyAgICBPd25QdHI8V2ViVVJMTG9hZGVyPiBsb2FkZXIo
d2ViS2l0Q2xpZW50KCktPmNyZWF0ZVVSTExvYWRlcigpKTsKKyAgICBBU1NFUlQobG9hZGVyLmdl
dCgpKTsKKworICAgIFdyYXBwZWRSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdEluKHJlcXVlc3QpOwor
ICAgIHJlcXVlc3RJbi5zZXRBbGxvd1N0b3JlZENyZWRlbnRpYWxzKHN0b3JlZENyZWRlbnRpYWxz
ID09IEFsbG93U3RvcmVkQ3JlZGVudGlhbHMpOworICAgIFdyYXBwZWRSZXNvdXJjZVJlc3BvbnNl
IHJlc3BvbnNlT3V0KHJlc3BvbnNlKTsKKyAgICBXZWJVUkxFcnJvciBlcnJvck91dDsKKyAgICBX
ZWJEYXRhIGRhdGFPdXQ7CisgICAgUmVmUHRyPEJsb2I+IGRhdGFBc0Jsb2I7CisgICAgbG9uZyBs
b25nIGxlbmd0aE91dCA9IDc3Nzc7CisKKyAgICAvLyBUT0RPKG1pY2hhZWxuKTogU29tZSB3YXkg
dG8gZ2V0IHRoZSBsZW5ndGhPdXQgaW4gdGhlIGFzRmlsZSBjYXNlLgorICAgIGxvYWRlci0+bG9h
ZFN5bmNocm9ub3VzbHkocmVxdWVzdEluLCByZXNwb25zZU91dCwgZXJyb3JPdXQsIGRhdGFPdXQp
OworCisgICAgZXJyb3IgPSBlcnJvck91dDsKKyAgICBpZiAoIXJlcXVlc3QuZG93bmxvYWRBc0Js
b2IoKSkgeworICAgICAgICBBU1NFUlQoZGF0YSk7CisgICAgICAgIGRhdGEtPmNsZWFyKCk7Cisg
ICAgICAgIGRhdGEtPmFwcGVuZChkYXRhT3V0LmRhdGEoKSwgZGF0YU91dC5zaXplKCkpOworICAg
IH0gZWxzZSBpZiAoIXJlc3BvbnNlLmRvd25sb2FkRmlsZVBhdGgoKS5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgT3duUHRyPEJsb2JEYXRhPiBibG9iRGF0YSA9IEJsb2JEYXRhOjpjcmVhdGUoKTsKKyAg
ICAgICAgYmxvYkRhdGEtPnNldENvbnRlbnRUeXBlKGRldGVybWluZUNvbnRlbnRUeXBlKHJlc3Bv
bnNlKSk7CisgICAgICAgIGJsb2JEYXRhLT5hcHBlbmRGaWxlKHJlc3BvbnNlLmRvd25sb2FkRmls
ZVBhdGgoKSk7CisgICAgICAgIGRhdGFBc0Jsb2IgPSBCbG9iOjpjcmVhdGUoYmxvYkRhdGEucmVs
ZWFzZSgpLCBsZW5ndGhPdXQpOworICAgIH0KKyAgICByZXR1cm4gZGF0YUFzQmxvYjsKK30KKwor
CiAvLyBSZXNvdXJjZUhhbmRsZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFJlc291cmNlSGFuZGxlOjpSZXNvdXJjZUhhbmRs
ZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsCkBAIC0yOTUsMjAgKzM4MCwyMCBAQCB2
b2lkIFJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VTeW5jaHJvCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8
Y2hhcj4mIGRhdGEpCiB7Ci0gICAgT3duUHRyPFdlYlVSTExvYWRlcj4gbG9hZGVyKHdlYktpdENs
aWVudCgpLT5jcmVhdGVVUkxMb2FkZXIoKSk7Ci0gICAgQVNTRVJUKGxvYWRlci5nZXQoKSk7Ci0K
LSAgICBXcmFwcGVkUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3RJbihyZXF1ZXN0KTsKLSAgICByZXF1
ZXN0SW4uc2V0QWxsb3dTdG9yZWRDcmVkZW50aWFscyhzdG9yZWRDcmVkZW50aWFscyA9PSBBbGxv
d1N0b3JlZENyZWRlbnRpYWxzKTsKLSAgICBXcmFwcGVkUmVzb3VyY2VSZXNwb25zZSByZXNwb25z
ZU91dChyZXNwb25zZSk7Ci0gICAgV2ViVVJMRXJyb3IgZXJyb3JPdXQ7Ci0gICAgV2ViRGF0YSBk
YXRhT3V0OwotCi0gICAgbG9hZGVyLT5sb2FkU3luY2hyb25vdXNseShyZXF1ZXN0SW4sIHJlc3Bv
bnNlT3V0LCBlcnJvck91dCwgZGF0YU91dCk7CisgICAgQVNTRVJUKCFyZXF1ZXN0LmRvd25sb2Fk
QXNCbG9iKCkpOworICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWw6OmxvYWRSZXNvdXJjZVN5bmNo
cm9ub3VzbHkoY29udGV4dCwgcmVxdWVzdCwgc3RvcmVkQ3JlZGVudGlhbHMsIGVycm9yLCByZXNw
b25zZSwgJmRhdGEpOworfQogCi0gICAgZXJyb3IgPSBlcnJvck91dDsKLSAgICBkYXRhLmNsZWFy
KCk7Ci0gICAgZGF0YS5hcHBlbmQoZGF0YU91dC5kYXRhKCksIGRhdGFPdXQuc2l6ZSgpKTsKKy8v
IHN0YXRpYworUGFzc1JlZlB0cjxCbG9iPiBSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3lu
Y2hyb25vdXNseUFzQmxvYigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RvcmVk
Q3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlRXJyb3ImIGVycm9yLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZVJlc3BvbnNlJiByZXNw
b25zZSkKK3sKKyAgICBBU1NFUlQocmVxdWVzdC5kb3dubG9hZEFzQmxvYigpKTsKKyAgICByZXR1
cm4gUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShjb250
ZXh0LCByZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFscywgZXJyb3IsIHJlc3BvbnNlLCAwKTsKIH0K
IAogLy8gc3RhdGljCkBAIC0zMzMsNCArNDE4LDQgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6Y2Fj
aGVNZXRhZGF0YShjb25zdAogICAgIENocm9taXVtQnJpZGdlOjpjYWNoZU1ldGFkYXRhKHJlc3Bv
bnNlLnVybCgpLCByZXNwb25zZS5yZXNwb25zZVRpbWUoKSwgZGF0YSk7CiB9CiAKLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBmaWxlCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlVSTFJlcXVlc3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVxdWVzdC5jcHAJKHJldmlz
aW9uIDY5MTQxKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXF1ZXN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBtX3Jl
c291cmNlUmVxdWVzdCA9ICZtX3Jlc291cmNlUmVxdWVzdEFsbG9jYXRpb247CiAgICAgICAgIG1f
YWxsb3dTdG9yZWRDcmVkZW50aWFscyA9IHAtPm1fYWxsb3dTdG9yZWRDcmVkZW50aWFsczsKLSAg
ICAgICAgbV9kb3dubG9hZFRvRmlsZSA9IHAtPm1fZG93bmxvYWRUb0ZpbGU7CiAgICAgfQogCiAg
ICAgdmlydHVhbCB2b2lkIGRpc3Bvc2UoKSB7IGRlbGV0ZSB0aGlzOyB9CkBAIC0yNTksMTIgKzI1
OCwxMiBAQCB2b2lkIFdlYlVSTFJlcXVlc3Q6OnNldEFwcENhY2hlSG9zdElEKGluCiAKIGJvb2wg
V2ViVVJMUmVxdWVzdDo6ZG93bmxvYWRUb0ZpbGUoKSBjb25zdAogewotICAgIHJldHVybiBtX3By
aXZhdGUtPm1fZG93bmxvYWRUb0ZpbGU7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9yZXNvdXJj
ZVJlcXVlc3QtPmRvd25sb2FkVG9GaWxlKCk7CiB9CiAKIHZvaWQgV2ViVVJMUmVxdWVzdDo6c2V0
RG93bmxvYWRUb0ZpbGUoYm9vbCBkb3dubG9hZFRvRmlsZSkKIHsKLSAgICBtX3ByaXZhdGUtPm1f
ZG93bmxvYWRUb0ZpbGUgPSBkb3dubG9hZFRvRmlsZTsKKyAgICBtX3ByaXZhdGUtPm1fcmVzb3Vy
Y2VSZXF1ZXN0LT5zZXREb3dubG9hZFRvRmlsZShkb3dubG9hZFRvRmlsZSk7CiB9CiAKIFJlc291
cmNlUmVxdWVzdCYgV2ViVVJMUmVxdWVzdDo6dG9NdXRhYmxlUmVzb3VyY2VSZXF1ZXN0KCkKQEAg
LTI5NCw0ICsyOTMsNCBAQCB2b2lkIFdlYlVSTFJlcXVlc3Q6OmFzc2lnbihXZWJVUkxSZXF1ZXN0
CiAgICAgbV9wcml2YXRlID0gcDsKIH0KIAotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBXZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlVSTFJlcXVlc3RQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJVUkxSZXF1ZXN0UHJpdmF0ZS5oCShyZXZpc2lvbiA2OTE0MSkKKysr
IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVxdWVzdFByaXZhdGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzksMTkgKzM5LDE1IEBAIGNsYXNzIFdlYlVSTFJlcXVlc3RQcml2YXRlIHsKIHB1Ymxp
YzoKICAgICBXZWJVUkxSZXF1ZXN0UHJpdmF0ZSgpCiAgICAgICAgIDogbV9yZXNvdXJjZVJlcXVl
c3QoMCkKLSAgICAgICAgLCBtX2FsbG93U3RvcmVkQ3JlZGVudGlhbHModHJ1ZSkKLSAgICAgICAg
LCBtX2Rvd25sb2FkVG9GaWxlKGZhbHNlKSB7IH0KKyAgICAgICAgLCBtX2FsbG93U3RvcmVkQ3Jl
ZGVudGlhbHModHJ1ZSkgeyB9CiAKICAgICAvLyBDYWxsZWQgYnkgV2ViVVJMUmVxdWVzdCB3aGVu
IGl0IG5vIGxvbmdlciBuZWVkcyB0aGlzIG9iamVjdC4KICAgICB2aXJ0dWFsIHZvaWQgZGlzcG9z
ZSgpID0gMDsKIAogICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCogbV9yZXNvdXJjZVJlcXVl
c3Q7CiAgICAgYm9vbCBtX2FsbG93U3RvcmVkQ3JlZGVudGlhbHM7Ci0KLSAgICAvLyBGSVhNRTog
TW92ZSB0aGlzIHRvIFJlc291cmNlUmVxdWVzdCBvbmNlIHdlIGhhdmUgYW4gaW50ZXJuYWwgY29u
c3VtZXIuCi0gICAgYm9vbCBtX2Rvd25sb2FkVG9GaWxlOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CiAKLSNlbmRpZgorI2VuZGlmClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRl
eDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXNwb25zZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXNwb25zZS5jcHAJKHJldmlzaW9uIDY5MTQxKQor
KysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXNwb25zZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU5LDcgKzU5LDYgQEAgcHVibGljOgogICAgICAgICA6IG1fcmVzb3VyY2VSZXNwb25zZUFs
bG9jYXRpb24oKnAtPm1fcmVzb3VyY2VSZXNwb25zZSkKICAgICB7CiAgICAgICAgIG1fcmVzb3Vy
Y2VSZXNwb25zZSA9ICZtX3Jlc291cmNlUmVzcG9uc2VBbGxvY2F0aW9uOwotICAgICAgICBtX2Rv
d25sb2FkRmlsZVBhdGggPSBwLT5tX2Rvd25sb2FkRmlsZVBhdGg7CiAgICAgfQogCiAgICAgdmly
dHVhbCB2b2lkIGRpc3Bvc2UoKSB7IGRlbGV0ZSB0aGlzOyB9CkBAIC0zNzUsMTIgKzM3NCwxMiBA
QCB2b2lkIFdlYlVSTFJlc3BvbnNlOjpzZXRJc011bHRpcGFydFBheWxvCiAKIFdlYlN0cmluZyBX
ZWJVUkxSZXNwb25zZTo6ZG93bmxvYWRGaWxlUGF0aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1f
cHJpdmF0ZS0+bV9kb3dubG9hZEZpbGVQYXRoOworICAgIHJldHVybiBtX3ByaXZhdGUtPm1fcmVz
b3VyY2VSZXNwb25zZS0+ZG93bmxvYWRGaWxlUGF0aCgpOwogfQogCiB2b2lkIFdlYlVSTFJlc3Bv
bnNlOjpzZXREb3dubG9hZEZpbGVQYXRoKGNvbnN0IFdlYlN0cmluZyYgZG93bmxvYWRGaWxlUGF0
aCkKIHsKLSAgICBtX3ByaXZhdGUtPm1fZG93bmxvYWRGaWxlUGF0aCA9IGRvd25sb2FkRmlsZVBh
dGg7CisgICAgbV9wcml2YXRlLT5tX3Jlc291cmNlUmVzcG9uc2UtPnNldERvd25sb2FkRmlsZVBh
dGgoZG93bmxvYWRGaWxlUGF0aCk7CiB9CiAKIHZvaWQgV2ViVVJMUmVzcG9uc2U6OmFzc2lnbihX
ZWJVUkxSZXNwb25zZVByaXZhdGUqIHApCkBAIC0zOTQsNCArMzkzLDQgQEAgdm9pZCBXZWJVUkxS
ZXNwb25zZTo6YXNzaWduKFdlYlVSTFJlc3BvbgogICAgIG1fcHJpdmF0ZSA9IHA7CiB9CiAKLX0g
Ly8gbmFtZXNwYWNlIFdlYktpdAorfSAvLyBuYW1lc3BhY2UgV2ViS2l0ClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgZmlsZQpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXNwb25zZVBy
aXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlVSTFJlc3BvbnNl
UHJpdmF0ZS5oCShyZXZpc2lvbiA2OTE0MSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVVJM
UmVzcG9uc2VQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDExICs0Niw4IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgZGlzcG9zZSgpID0gMDsKIAogICAgIFdlYkNvcmU6OlJlc291
cmNlUmVzcG9uc2UqIG1fcmVzb3VyY2VSZXNwb25zZTsKLQotICAgIC8vIEZJWE1FOiBNb3ZlIHRo
aXMgdG8gUmVzb3VyY2VSZXNwb25zZSBvbmNlIHdlIGhhdmUgYW4gaW50ZXJuYWwgY29uc3VtZXIu
Ci0gICAgV2ViU3RyaW5nIG1fZG93bmxvYWRGaWxlUGF0aDsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdAogCi0jZW5kaWYKKyNlbmRpZgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69882</attachid>
            <date>2010-10-05 20:47:47 -0700</date>
            <delta_ts>2010-10-06 16:28:02 -0700</delta_ts>
            <desc>downloadAsBlob</desc>
            <filename>downloadAsBlob3.txt</filename>
            <type>text/plain</type>
            <size>62970</size>
            <attacher name="Michael Nordman">michaeln</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTE2NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTA1IEBACisyMDEwLTEwLTA1ICBNaWNoYWVsIE5vcmRtYW4gIDxtaWNoYWVsbkBn
b29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZCBzdXBwb3J0IGZvciBnZXR0aW5nIHRoZSByZXN1bHQgb2YgYSByZXNvdXJjZSByZXF1
ZXN0IGFzIGEgYmxvYiwKKyAgICAgICAgYW5kIHVzZSB0aGF0IGNhcGFiaWxpdHkgaW4gc3VwcG9y
dCBvZiBYbWxIdHRwUmVxdWVzdC5yZXNwb25zZUJsb2IuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDcyMgorICAgICAgICAqIFJlc291cmNlSGFuZGxl
IGtub3dzIGhvdyB0byBkZWxpdmVyIGEgcmVzcG9uc2UgYXMgYSBibG9iLiBUbyBhc2sgaXQgdG8g
ZG8gc28sCisgICAgICAgICAgY2FsbCByZXF1ZXN0LnNldERvd25sb2FkQXNCbG9iKHRydWUpIHBy
aW9yIHRvIHN0YXJ0aW5nIGFuIGFzeW5jIFJlc291cmNlSGFuZGxlLAorICAgICAgICAgIG9yIGNh
bGwgbG9hZFJlc291cmNlU3luY2hyb25vdXNseUFzQmxvYigpIGZvciB0aGUgc3luYyBjYXNlLgor
ICAgICAgICAqIFJlc291cmNlSGFuZGxlQ2xpZW50IGhhcyBuZXcgaW50ZXJmYWNlcyBmb3IgdXNl
IGluIHRoZSBhc3luYyBjYXNlLgorICAgICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVC
bG9iRGF0YShSZXNvdXJjZUhhbmRsZSosIGludCk7ICAvLyBubyBkYXRhIHB0ciBpcyBwcm92aWRl
ZAorICAgICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmdCbG9iKFJlc291cmNl
SGFuZGxlKiwgZG91YmxlIC8qZmluaXNoVGltZSovLCBQYXNzUmVmUHRyPEJsb2I+KTsKKyAgICAg
ICAgKiBUaHJlYWRhYmxlTG9hZGVyIGFsc28ga25vd3MgaG93IHRvIGRlbGl2ZXIgYSByZXNwb25z
ZSBhcyBhIGJsb2I7IGFuZAorICAgICAgICAgIHNpbWlsYXJseSwgdGhlIFRocmVhZGFibGVMb2Fk
ZXJDbGllbnQgaGFzICBncm93biB0d28gbmV3IGNhbGxiYWNrIG1ldGhvZHMuCisgICAgICAgICog
RnJhbWVMb2FkZXIgaGFzIGFsc28gZ3Jvd24gYSBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5QXNC
bG9iKCkgbWV0aG9kLgorICAgICAgICAqIFhtbEh0dHBSZXF1ZXN0IGlzIGEgVGhyZWFkYWJsZUxv
YWRlckNsaWVudCB3aGljaCB1c2VzIHJlcXVlc3Quc2V0RG93bmxvYWRBc0Jsb2IoKSBhbmQKKyAg
ICAgICAgICByZWNlaXZlcyB0aGUgcmVzdWx0IGluIGRpZEZpbmlzaExvYWRpbmdCbG9iKCkuCisg
ICAgICAgICogVGhlcmUncyBhIGZhaXIgYW1vdW50IG9mIG1lY2hhbmljYWwgcGx1bWJpbmcgdGhy
b3VnaG91dCAidGhlIGxvYWRlciIgdG8gZ2V0IHRoZSBjbGllbnQKKyAgICAgICAgICBtZXRob2Qg
Y2FsbHMgZnJvbSB0aGUgcmVzb3VyY2UgaGFuZGxlIGFsbCB0aGUgd2F5IHRocnUgdG8gdGhlIHRo
cmVhZGFibGUgbG9hZGVyIGNsaWVudC4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgZmVh
dHVyZSBpc24ndCBmdW5jdGlvbmFsIHlldCBpbiBhbnkgcG9ydC4KKworICAgICAgICAqIGxvYWRl
ci9Eb2N1bWVudExvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6
c3Vic3RpdHV0ZVJlc291cmNlRGVsaXZlcnlUaW1lckZpcmVkKToKKyAgICAgICAgKiBsb2FkZXIv
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
VGhyZWFkYWJsZUxvYWRlcjo6ZGlkUmVjZWl2ZUJsb2JEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZ0Jsb2IpOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVxdWVzdCk6CisgICAg
ICAgICogbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oOgorICAgICAgICAqIGxvYWRl
ci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZFJl
c291cmNlU3luY2hyb25vdXNseSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9h
ZFJlc291cmNlU3luY2hyb25vdXNseUFzQmxvYik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxv
YWRlcjo6cHJlcGFyZVN5bmNSZXFldXN0KToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIu
aDoKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmdCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nT25lUGFydCk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUxvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUJsb2JEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YUNvbW1vbik6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUxvYWRlcjo6Y3JlYXRlQXN5bmNGaWxlU3RyZWFtKToKKyAgICAgICAgKiBsb2FkZXIvUmVz
b3VyY2VMb2FkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyOjpkaWRSZWNl
aXZlQmxvYkRhdGEpOgorICAgICAgICAqIGxvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUJsb2JEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OlN1YnJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OlN1YnJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nQmxv
Yik6CisgICAgICAgIChXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGlu
Z0NvbW1vbik6CisgICAgICAgICogbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmg6CisgICAgICAg
ICogbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyQ2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpT
dWJyZXNvdXJjZUxvYWRlckNsaWVudDo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6U3VicmVzb3VyY2VMb2FkZXJDbGllbnQ6OmRpZFJlY2VpdmVCbG9iRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlckNsaWVudDo6ZGlkRmluaXNoTG9hZGluZ0Jsb2Ip
OgorICAgICAgICAqIGxvYWRlci9UaHJlYWRhYmxlTG9hZGVyQ2xpZW50Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpUaHJlYWRhYmxlTG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpUaHJlYWRhYmxlTG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlQmxvYkRhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6VGhyZWFkYWJsZUxvYWRlckNsaWVudDo6ZGlkRmluaXNoTG9hZGlu
Z0Jsb2IpOgorICAgICAgICAqIGxvYWRlci9UaHJlYWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBlci5o
OgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXI6OmRpZFJl
Y2VpdmVCbG9iRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlTG9hZGVyQ2xpZW50
V3JhcHBlcjo6ZGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxl
TG9hZGVyQ2xpZW50V3JhcHBlcjo6ZGlkRmluaXNoTG9hZGluZ0Jsb2IpOgorICAgICAgICAqIGxv
YWRlci9Xb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ondvcmtl
ckNvbnRleHREaWRSZWNlaXZlQmxvYkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhy
ZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEJyaWRnZTo6ZGlkUmVjZWl2ZUJsb2JEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2U6
OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6d29ya2VyQ29udGV4dERpZEZp
bmlzaExvYWRpbmdCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVMb2Fk
ZXI6Ok1haW5UaHJlYWRCcmlkZ2U6OmRpZEZpbmlzaExvYWRpbmdCbG9iKToKKyAgICAgICAgKiBs
b2FkZXIvV29ya2VyVGhyZWFkYWJsZUxvYWRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VIYW5kbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6
OmNhY2hlTWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmxvYWRS
ZXNvdXJjZVN5bmNocm9ub3VzbHlBc0Jsb2IpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VIYW5kbGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFu
ZGxlQ2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUNsaWVudDo6ZGlk
UmVjZWl2ZUJsb2JEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ2xpZW50
OjpkaWRGaW5pc2hMb2FkaW5nQmxvYik6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNv
dXJjZVJlcXVlc3RCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJh
c2U6OmFkb3B0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OmNvcHlE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmVxdWFsSWdub3JpbmdIZWFkZXJGaWVsZHMpOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6ZG93bmxvYWRBc0Jsb2IpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6c2V0RG93bmxvYWRBc0Jsb2IpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlcXVlc3QuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6ZG93bmxvYWRUb0ZpbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0OjpzZXREb3dubG9hZFRvRmlsZSk6CisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlc3BvbnNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2U6OmRvd25sb2FkRmlsZVBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZTo6c2V0RG93bmxvYWRGaWxlUGF0aCk6CisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlc3BvbnNlLmg6CisgICAg
ICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBS
ZXF1ZXN0OjpjcmVhdGVSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0
OjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0Ojpk
aWRGaW5pc2hMb2FkaW5nQmxvYik6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6
ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmRpZFJl
Y2VpdmVCbG9iRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6ZGlkUmVj
ZWl2ZURhdGFDb21tb24pOgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5oOgorCiAyMDEw
LTEwLTA1ICBWaWN0b3JpYSBLaXJzdCAgPHZya0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEphbWVzIFJvYmluc29uLgpJbmRleDogV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2Fk
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAko
cmV2aXNpb24gNjkxNDEpCisrKyBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU2Miw3ICs1NjIsOCBAQCB2b2lkIERvY3VtZW50TG9hZGVyOjpzdWJz
dGl0dXRlUmVzb3VyY2VECiAgICAgICAgIAogICAgICAgICBpZiAocmVzb3VyY2UpIHsKICAgICAg
ICAgICAgIFNoYXJlZEJ1ZmZlciogZGF0YSA9IHJlc291cmNlLT5kYXRhKCk7Ci0gICAgICAgIAor
CisgICAgICAgICAgICAvLyBGSVhNRTogV3JhcCBhIGJsb2IgYXJvdW5kIHRoZSBkYXRhIGluIHRo
ZSBkb3dubG9hZEFzQmxvYiBjYXNlLgogICAgICAgICAgICAgbG9hZGVyLT5kaWRSZWNlaXZlUmVz
cG9uc2UocmVzb3VyY2UtPnJlc3BvbnNlKCkpOwogICAgICAgICAgICAgbG9hZGVyLT5kaWRSZWNl
aXZlRGF0YShkYXRhLT5kYXRhKCksIGRhdGEtPnNpemUoKSwgZGF0YS0+c2l6ZSgpLCB0cnVlKTsK
ICAgICAgICAgICAgIGxvYWRlci0+ZGlkRmluaXNoTG9hZGluZygwKTsKSW5kZXg6IFdlYkNvcmUv
bG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAkocmV2aXNpb24gNjkxNDEpCisr
KyBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMjgsNiArMjI4LDE4IEBAIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpk
aWRSZWNlaXYKICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZURhdGEoZGF0YSwgbGVuZ3RoUmVjZWl2
ZWQpOwogfQogCit2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkUmVjZWl2ZUJsb2JE
YXRhKFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIGludCBsZW5ndGhSZWNlaXZlZCkKK3sKKyAg
ICBBU1NFUlQobV9jbGllbnQpOworICAgIEFTU0VSVF9VTlVTRUQobG9hZGVyLCBsb2FkZXIgPT0g
bV9sb2FkZXIpOworCisgICAgLy8gSWdub3JlIHJlc3BvbnNlIGJvZHkgb2YgcHJlZmxpZ2h0IHJl
cXVlc3RzLgorICAgIGlmIChtX2FjdHVhbFJlcXVlc3QpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fY2xpZW50LT5kaWRSZWNlaXZlQmxvYkRhdGEobGVuZ3RoUmVjZWl2ZWQpOworfQorCiB2b2lk
IERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyhTdWJyZXNvdXJjZUxv
YWRlciogbG9hZGVyKQogewogICAgIEFTU0VSVChsb2FkZXIgPT0gbV9sb2FkZXIpOwpAQCAtMjM1
LDYgKzI0NywxMyBAQCB2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkRmluaXNoCiAg
ICAgZGlkRmluaXNoTG9hZGluZyhsb2FkZXItPmlkZW50aWZpZXIoKSk7CiB9CiAKK3ZvaWQgRG9j
dW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nQmxvYihTdWJyZXNvdXJjZUxv
YWRlciogbG9hZGVyLCBQYXNzUmVmUHRyPEJsb2I+IGJsb2IpCit7CisgICAgQVNTRVJUKGxvYWRl
ciA9PSBtX2xvYWRlcik7CisgICAgQVNTRVJUKG1fY2xpZW50KTsKKyAgICBkaWRGaW5pc2hMb2Fk
aW5nQmxvYihsb2FkZXItPmlkZW50aWZpZXIoKSwgYmxvYik7Cit9CisKIHZvaWQgRG9jdW1lbnRU
aHJlYWRhYmxlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmll
cikKIHsKICAgICBpZiAobV9hY3R1YWxSZXF1ZXN0KSB7CkBAIC0yNDUsNiArMjY0LDE2IEBAIHZv
aWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRGaW5pc2gKICAgICAgICAgbV9jbGllbnQt
PmRpZEZpbmlzaExvYWRpbmcoaWRlbnRpZmllcik7CiB9CiAKK3ZvaWQgRG9jdW1lbnRUaHJlYWRh
YmxlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nQmxvYih1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIs
IFBhc3NSZWZQdHI8QmxvYj4gYmxvYikKK3sKKyAgICBpZiAobV9hY3R1YWxSZXF1ZXN0KSB7Cisg
ICAgICAgIEFTU0VSVCghbV9zYW1lT3JpZ2luUmVxdWVzdCk7CisgICAgICAgIEFTU0VSVChtX29w
dGlvbnMuY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5ID09IFVzZUFjY2Vzc0NvbnRyb2wpOworICAg
ICAgICBwcmVmbGlnaHRTdWNjZXNzKCk7CisgICAgfSBlbHNlCisgICAgICAgIG1fY2xpZW50LT5k
aWRGaW5pc2hMb2FkaW5nQmxvYihpZGVudGlmaWVyLCBibG9iKTsKK30KKwogdm9pZCBEb2N1bWVu
dFRocmVhZGFibGVMb2FkZXI6OmRpZEZhaWwoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgY29u
c3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiB7CiAgICAgQVNTRVJUKG1fY2xpZW50KTsKQEAgLTMy
NywxMSArMzU2LDE2IEBAIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVxdWUK
ICAgICBTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscyA9IG1fb3B0aW9ucy5hbGxv
d0NyZWRlbnRpYWxzID8gQWxsb3dTdG9yZWRDcmVkZW50aWFscyA6IERvTm90QWxsb3dTdG9yZWRD
cmVkZW50aWFsczsKIAogICAgIFZlY3RvcjxjaGFyPiBkYXRhOworICAgIFJlZlB0cjxCbG9iPiBk
YXRhQXNCbG9iOwogICAgIFJlc291cmNlRXJyb3IgZXJyb3I7CiAgICAgUmVzb3VyY2VSZXNwb25z
ZSByZXNwb25zZTsKICAgICB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIgPSBzdGQ6Om51bWVyaWNf
bGltaXRzPHVuc2lnbmVkIGxvbmc+OjptYXgoKTsKLSAgICBpZiAobV9kb2N1bWVudC0+ZnJhbWUo
KSkKLSAgICAgICAgaWRlbnRpZmllciA9IG1fZG9jdW1lbnQtPmZyYW1lKCktPmxvYWRlcigpLT5s
b2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KHJlcXVlc3QsIHN0b3JlZENyZWRlbnRpYWxzLCBlcnJv
ciwgcmVzcG9uc2UsIGRhdGEpOworICAgIGlmIChtX2RvY3VtZW50LT5mcmFtZSgpKSB7CisgICAg
ICAgIGlmIChyZXF1ZXN0LmRvd25sb2FkQXNCbG9iKCkpCisgICAgICAgICAgICBkYXRhQXNCbG9i
ID0gbV9kb2N1bWVudC0+ZnJhbWUoKS0+bG9hZGVyKCktPmxvYWRSZXNvdXJjZVN5bmNocm9ub3Vz
bHlBc0Jsb2IocmVxdWVzdCwgc3RvcmVkQ3JlZGVudGlhbHMsIGVycm9yLCByZXNwb25zZSwgaWRl
bnRpZmllcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlkZW50aWZpZXIgPSBtX2RvY3Vt
ZW50LT5mcmFtZSgpLT5sb2FkZXIoKS0+bG9hZFJlc291cmNlU3luY2hyb25vdXNseShyZXF1ZXN0
LCBzdG9yZWRDcmVkZW50aWFscywgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKKyAgICB9CiAKICAg
ICAvLyBObyBleGNlcHRpb24gZm9yIGZpbGU6Ly8vIHJlc291cmNlcywgc2VlIDxyZGFyOi8vcHJv
YmxlbS80OTYyMjk4Pi4KICAgICAvLyBBbHNvLCBpZiB3ZSBoYXZlIGFuIEhUVFAgcmVzcG9uc2Us
IHRoZW4gaXQgd2Fzbid0IGEgbmV0d29yayBlcnJvciBpbiBmYWN0LgpAQCAtMzUwLDExICszODQs
MTUgQEAgdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXF1ZQogCiAgICAgZGlk
UmVjZWl2ZVJlc3BvbnNlKDAsIHJlc3BvbnNlKTsKIAotICAgIGNvbnN0IGNoYXIqIGJ5dGVzID0g
c3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEuZGF0YSgpKTsKLSAgICBpbnQgbGVuID0gc3Rh
dGljX2Nhc3Q8aW50PihkYXRhLnNpemUoKSk7Ci0gICAgZGlkUmVjZWl2ZURhdGEoMCwgYnl0ZXMs
IGxlbik7CisgICAgaWYgKHJlcXVlc3QuZG93bmxvYWRBc0Jsb2IoKSkKKyAgICAgICBkaWRGaW5p
c2hMb2FkaW5nQmxvYihpZGVudGlmaWVyLCBkYXRhQXNCbG9iLnJlbGVhc2UoKSk7CisgICAgZWxz
ZSB7CisgICAgICAgIGNvbnN0IGNoYXIqIGJ5dGVzID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+
KGRhdGEuZGF0YSgpKTsKKyAgICAgICAgaW50IGxlbiA9IHN0YXRpY19jYXN0PGludD4oZGF0YS5z
aXplKCkpOworICAgICAgICBkaWRSZWNlaXZlRGF0YSgwLCBieXRlcywgbGVuKTsKKyAgICAgICAg
ZGlkRmluaXNoTG9hZGluZyhpZGVudGlmaWVyKTsKKyAgICB9CiAKLSAgICBkaWRGaW5pc2hMb2Fk
aW5nKGlkZW50aWZpZXIpOwogfQogCiBib29sIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6aXNB
bGxvd2VkUmVkaXJlY3QoY29uc3QgS1VSTCYgdXJsKQpJbmRleDogV2ViQ29yZS9sb2FkZXIvRG9j
dW1lbnRUaHJlYWRhYmxlTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRG9j
dW1lbnRUaHJlYWRhYmxlTG9hZGVyLmgJKHJldmlzaW9uIDY5MTQxKQorKysgV2ViQ29yZS9sb2Fk
ZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0
LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNl
aXZlUmVzcG9uc2UoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShTdWJyZXNvdXJjZUxvYWRlcios
IGNvbnN0IGNoYXIqLCBpbnQgbGVuZ3RoUmVjZWl2ZWQpOworICAgICAgICB2aXJ0dWFsIHZvaWQg
ZGlkUmVjZWl2ZUJsb2JEYXRhKFN1YnJlc291cmNlTG9hZGVyKiwgaW50IC8qbGVuZ3RoUmVjZWl2
ZWQqLyk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKFN1YnJlc291cmNl
TG9hZGVyKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nQmxvYihTdWJy
ZXNvdXJjZUxvYWRlciosIFBhc3NSZWZQdHI8QmxvYj4pOwogICAgICAgICB2aXJ0dWFsIHZvaWQg
ZGlkRmFpbChTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IFJlc291cmNlRXJyb3ImKTsKIAogICAg
ICAgICB2aXJ0dWFsIGJvb2wgZ2V0U2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoU3VicmVzb3Vy
Y2VMb2FkZXIqLCBib29sJiBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSk7CkBAIC04Miw2ICs4
NCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIHJlY2VpdmVk
Q2FuY2VsbGF0aW9uKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UmKTsKIAogICAgICAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9uZyBp
ZGVudGlmaWVyKTsKKyAgICAgICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nQmxvYih1bnNpZ25lZCBs
b25nIGlkZW50aWZpZXIsIFBhc3NSZWZQdHI8QmxvYj4pOworCiAgICAgICAgIHZvaWQgbWFrZVNp
bXBsZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QpOwogICAgICAgICB2b2lkIG1ha2VDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3RXaXRoUHJlZmxp
Z2h0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCk7CiAgICAgICAgIHZvaWQgcHJlZmxp
Z2h0U3VjY2VzcygpOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gNjkxNDEp
CisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3
MzksNiArMjczOSw0OSBAQCB2b2lkIEZyYW1lTG9hZGVyOjpsb2FkUG9zdFJlcXVlc3QoY29uc3QK
IAogdW5zaWduZWQgbG9uZyBGcmFtZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENy
ZWRlbnRpYWxzLCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9u
c2UsIFZlY3RvcjxjaGFyPiYgZGF0YSkKIHsKKyAgICBBU1NFUlQoIXJlcXVlc3QuZG93bmxvYWRB
c0Jsb2IoKSk7CisgICAgUmVzb3VyY2VSZXF1ZXN0IGFjdHVhbFJlcXVlc3Q7CisgICAgdW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyID0gcHJlcGFyZVN5bmNSZXFldXN0KHJlcXVlc3QsIHN0b3JlZENy
ZWRlbnRpYWxzLCBlcnJvciwgYWN0dWFsUmVxdWVzdCk7CisgICAgaWYgKGVycm9yLmlzTnVsbCgp
KSB7CisgICAgICAgIEFTU0VSVCghYWN0dWFsUmVxdWVzdC5pc051bGwoKSk7CisgICAgICAgIAor
I2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisgICAgICAgIGlmICghZG9jdW1l
bnRMb2FkZXIoKS0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+bWF5YmVMb2FkU3luY2hyb25vdXNs
eShhY3R1YWxSZXF1ZXN0LCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpKSB7CisjZW5kaWYKKyAgICAg
ICAgICAgIFJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KG5ldHdvcmtp
bmdDb250ZXh0KCksIGFjdHVhbFJlcXVlc3QsIHN0b3JlZENyZWRlbnRpYWxzLCBlcnJvciwgcmVz
cG9uc2UsIGRhdGEpOworI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisgICAg
ICAgICAgICBkb2N1bWVudExvYWRlcigpLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5tYXliZUxv
YWRGYWxsYmFja1N5bmNocm9ub3VzbHkoYWN0dWFsUmVxdWVzdCwgZXJyb3IsIHJlc3BvbnNlLCBk
YXRhKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorICAgIG5vdGlmaWVyKCktPnNlbmRSZW1h
aW5pbmdEZWxlZ2F0ZU1lc3NhZ2VzKG1fZG9jdW1lbnRMb2FkZXIuZ2V0KCksIGlkZW50aWZpZXIs
IHJlc3BvbnNlLCBkYXRhLnNpemUoKSwgZXJyb3IpOworICAgIHJldHVybiBpZGVudGlmaWVyOwor
fQorCitQYXNzUmVmUHRyPEJsb2I+IEZyYW1lTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91
c2x5QXNCbG9iKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlh
bHMgc3RvcmVkQ3JlZGVudGlhbHMsIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3Bv
bnNlJiByZXNwb25zZSwgdW5zaWduZWQgbG9uZyYgaWRlbnRpZmllcikKK3sKKyAgICBBU1NFUlQo
cmVxdWVzdC5kb3dubG9hZEFzQmxvYigpKTsKKyAgICBSZXNvdXJjZVJlcXVlc3QgYWN0dWFsUmVx
dWVzdDsKKyAgICBpZGVudGlmaWVyID0gcHJlcGFyZVN5bmNSZXFldXN0KHJlcXVlc3QsIHN0b3Jl
ZENyZWRlbnRpYWxzLCBlcnJvciwgYWN0dWFsUmVxdWVzdCk7CisgICAgUmVmUHRyPEJsb2I+IGRh
dGFBc0Jsb2I7CisgICAgaWYgKGVycm9yLmlzTnVsbCgpKSB7CisgICAgICAgIEFTU0VSVCghYWN0
dWFsUmVxdWVzdC5pc051bGwoKSk7CisgICAgICAgIAorI2lmIDAgLy8gRklYTUU6IFN1cHBvcnQg
Zm9yIGFwcGNhY2hlZCByZXNvdXJjZXMuCisgICAgICAgIGlmICghZG9jdW1lbnRMb2FkZXIoKS0+
YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+bWF5YmVMb2FkU3luY2hyb25vdXNseShhY3R1YWxSZXF1
ZXN0LCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpKSB7CisjZW5kaWYKKyAgICAgICAgICAgIGRhdGFB
c0Jsb2IgPSBSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseUFzQmxvYihu
ZXR3b3JraW5nQ29udGV4dCgpLCBhY3R1YWxSZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFscywgZXJy
b3IsIHJlc3BvbnNlKTsKKyNpZiAwIC8vIEZJWE1FOiBEaXR0by4KKyAgICAgICAgICAgIGRvY3Vt
ZW50TG9hZGVyKCktPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPm1heWJlTG9hZEZhbGxiYWNrU3lu
Y2hyb25vdXNseShhY3R1YWxSZXF1ZXN0LCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOworICAgICAg
ICB9CisjZW5kaWYKKyAgICB9CisgICAgbm90aWZpZXIoKS0+c2VuZFJlbWFpbmluZ0RlbGVnYXRl
TWVzc2FnZXMobV9kb2N1bWVudExvYWRlci5nZXQoKSwgaWRlbnRpZmllciwgcmVzcG9uc2UsIGRh
dGFBc0Jsb2IgPyBkYXRhQXNCbG9iLT5zaXplKCkgOiAwLCBlcnJvcik7CisgICAgcmV0dXJuIGRh
dGFBc0Jsb2I7Cit9CisKK3Vuc2lnbmVkIGxvbmcgRnJhbWVMb2FkZXI6OnByZXBhcmVTeW5jUmVx
ZXVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzIHN0
b3JlZENyZWRlbnRpYWxzLCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXF1ZXN0JiBh
Y3R1YWxSZXF1ZXN0KQorewogICAgIFN0cmluZyByZWZlcnJlciA9IG1fb3V0Z29pbmdSZWZlcnJl
cjsKICAgICBpZiAoU2VjdXJpdHlPcmlnaW46OnNob3VsZEhpZGVSZWZlcnJlcihyZXF1ZXN0LnVy
bCgpLCByZWZlcnJlcikpCiAgICAgICAgIHJlZmVycmVyID0gU3RyaW5nKCk7CkBAIC0yNzUzLDI3
ICsyNzk2LDEyIEBAIHVuc2lnbmVkIGxvbmcgRnJhbWVMb2FkZXI6OmxvYWRSZXNvdXJjZVMKICAg
ICBpZiAoUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKSkKICAgICAgICAgaW5pdGlhbFJlcXVl
c3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMocGFnZS0+bWFpbkZyYW1lKCktPmxvYWRlcigpLT5k
b2N1bWVudExvYWRlcigpLT5yZXF1ZXN0KCkudXJsKCkpOwogICAgIGluaXRpYWxSZXF1ZXN0LnNl
dEhUVFBVc2VyQWdlbnQoY2xpZW50KCktPnVzZXJBZ2VudChyZXF1ZXN0LnVybCgpKSk7Ci0gICAg
CisKICAgICBhZGRFeHRyYUZpZWxkc1RvU3VicmVzb3VyY2VSZXF1ZXN0KGluaXRpYWxSZXF1ZXN0
KTsKIAogICAgIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciA9IDA7ICAgIAotICAgIFJlc291cmNl
UmVxdWVzdCBuZXdSZXF1ZXN0KGluaXRpYWxSZXF1ZXN0KTsKLSAgICByZXF1ZXN0RnJvbURlbGVn
YXRlKG5ld1JlcXVlc3QsIGlkZW50aWZpZXIsIGVycm9yKTsKLQotICAgIGlmIChlcnJvci5pc051
bGwoKSkgewotICAgICAgICBBU1NFUlQoIW5ld1JlcXVlc3QuaXNOdWxsKCkpOwotICAgICAgICAK
LSNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQotICAgICAgICBpZiAoIWRvY3Vt
ZW50TG9hZGVyKCktPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPm1heWJlTG9hZFN5bmNocm9ub3Vz
bHkobmV3UmVxdWVzdCwgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKSkgewotI2VuZGlmCi0gICAgICAg
ICAgICBSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShuZXR3b3JraW5n
Q29udGV4dCgpLCBuZXdSZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFscywgZXJyb3IsIHJlc3BvbnNl
LCBkYXRhKTsKLSNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQotICAgICAgICAg
ICAgZG9jdW1lbnRMb2FkZXIoKS0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+bWF5YmVMb2FkRmFs
bGJhY2tTeW5jaHJvbm91c2x5KG5ld1JlcXVlc3QsIGVycm9yLCByZXNwb25zZSwgZGF0YSk7Ci0g
ICAgICAgIH0KLSNlbmRpZgotICAgIH0KLQotICAgIG5vdGlmaWVyKCktPnNlbmRSZW1haW5pbmdE
ZWxlZ2F0ZU1lc3NhZ2VzKG1fZG9jdW1lbnRMb2FkZXIuZ2V0KCksIGlkZW50aWZpZXIsIHJlc3Bv
bnNlLCBkYXRhLnNpemUoKSwgZXJyb3IpOworICAgIGFjdHVhbFJlcXVlc3QgPSBpbml0aWFsUmVx
dWVzdDsKKyAgICByZXF1ZXN0RnJvbURlbGVnYXRlKGFjdHVhbFJlcXVlc3QsIGlkZW50aWZpZXIs
IGVycm9yKTsKICAgICByZXR1cm4gaWRlbnRpZmllcjsKIH0KIApJbmRleDogV2ViQ29yZS9sb2Fk
ZXIvRnJhbWVMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRl
ci5oCShyZXZpc2lvbiA2OTE0MSkKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBBcmNoaXZlOwogY2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVuZ2U7CitjbGFzcyBCbG9iOwog
Y2xhc3MgQ2FjaGVkRnJhbWVCYXNlOwogY2xhc3MgQ2FjaGVkUGFnZTsKIGNsYXNzIENhY2hlZFJl
c291cmNlOwpAQCAtMTIzLDYgKzEyNCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCByZXBv
cnRMb2NhbExvYWRGYWlsZWQoRnJhbWUqLCBjb25zdCBTdHJpbmcmIHVybCk7CiAKICAgICB1bnNp
Z25lZCBsb25nIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiwgU3RvcmVkQ3JlZGVudGlhbHMsIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwg
VmVjdG9yPGNoYXI+JiBkYXRhKTsKKyAgICBQYXNzUmVmUHRyPEJsb2I+IGxvYWRSZXNvdXJjZVN5
bmNocm9ub3VzbHlBc0Jsb2IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlh
bHMsIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgdW5zaWduZWQgbG9uZyYpOwog
CiAgICAgYm9vbCBjYW5IYW5kbGVSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOwogCkBA
IC00MzEsNiArNDMzLDggQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgdXBkYXRlU2FuZGJveEZsYWdz
KCk7CiAKKyAgICB1bnNpZ25lZCBsb25nIHByZXBhcmVTeW5jUmVxZXVzdChjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmLCBTdG9yZWRDcmVkZW50aWFscywgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVx
dWVzdCYgYWN0dWFsUmVxdWVzdCk7CisKICAgICBGcmFtZSogbV9mcmFtZTsKICAgICBGcmFtZUxv
YWRlckNsaWVudCogbV9jbGllbnQ7CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9h
ZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5jcHAJ
KHJldmlzaW9uIDY5MTQxKQorKysgV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNzksMTggKzI3OSwyMSBAQCB2b2lkIFJlc291cmNlTG9hZGVyOjp3
aWxsU3RvcEJ1ZmZlcmluZ0RhCiAKIHZvaWQgUmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRp
bmcoZG91YmxlIGZpbmlzaFRpbWUpCiB7Ci0gICAgLy8gSWYgbG9hZCBoYXMgYmVlbiBjYW5jZWxs
ZWQgYWZ0ZXIgZmluaXNoaW5nICh3aGljaCBjb3VsZCBoYXBwZW4gd2l0aCBhIAotICAgIC8vIEph
dmFTY3JpcHQgdGhhdCBjaGFuZ2VzIHRoZSB3aW5kb3cgbG9jYXRpb24pLCBkbyBub3RoaW5nLgot
ICAgIGlmIChtX2NhbmNlbGxlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVCghbV9yZWFj
aGVkVGVybWluYWxTdGF0ZSk7CisgICAgZGlkRmluaXNoTG9hZGluZ09uZVBhcnQoZmluaXNoVGlt
ZSk7CisgICAgcmVsZWFzZVJlc291cmNlcygpOworfQogCit2b2lkIFJlc291cmNlTG9hZGVyOjpk
aWRGaW5pc2hMb2FkaW5nQmxvYihkb3VibGUgZmluaXNoVGltZSwgUGFzc1JlZlB0cjxCbG9iPikK
K3sKKyAgICAvLyBGSVhNRTogV2hhdCBhYm91dCBtdWx0aXBhcnQgYW5kIGRvd25sb2FkQXNCbG9i
PwogICAgIGRpZEZpbmlzaExvYWRpbmdPbmVQYXJ0KGZpbmlzaFRpbWUpOwogICAgIHJlbGVhc2VS
ZXNvdXJjZXMoKTsKIH0KIAogdm9pZCBSZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZ09u
ZVBhcnQoZG91YmxlIGZpbmlzaFRpbWUpCiB7CisgICAgLy8gSWYgbG9hZCBoYXMgYmVlbiBjYW5j
ZWxsZWQgYWZ0ZXIgZmluaXNoaW5nICh3aGljaCBjb3VsZCBoYXBwZW4gd2l0aCBhIAorICAgIC8v
IEphdmFTY3JpcHQgdGhhdCBjaGFuZ2VzIHRoZSB3aW5kb3cgbG9jYXRpb24pLCBkbyBub3RoaW5n
LgogICAgIGlmIChtX2NhbmNlbGxlZCkKICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVCghbV9y
ZWFjaGVkVGVybWluYWxTdGF0ZSk7CkBAIC0zOTEsNiArMzk0LDcgQEAgdm9pZCBSZXNvdXJjZUxv
YWRlcjo6d2lsbFNlbmRSZXF1ZXN0KFJlcwogICAgIGlmIChkb2N1bWVudExvYWRlcigpLT5hcHBs
aWNhdGlvbkNhY2hlSG9zdCgpLT5tYXliZUxvYWRGYWxsYmFja0ZvclJlZGlyZWN0KHRoaXMsIHJl
cXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpKQogICAgICAgICByZXR1cm47CiAjZW5kaWYKKyAgICBB
U1NFUlQocmVxdWVzdC5kb3dubG9hZEFzQmxvYigpID09IG1fcmVxdWVzdC5kb3dubG9hZEFzQmxv
YigpKTsKICAgICB3aWxsU2VuZFJlcXVlc3QocmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7CiB9
CiAKQEAgLTQyNCw2ICs0MjgsMTYgQEAgdm9pZCBSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZVJl
c3BvbnNlKAogCiB2b2lkIFJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YShSZXNvdXJjZUhh
bmRsZSosIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgsIGludCBsZW5ndGhSZWNlaXZlZCkK
IHsKKyAgICBkaWRSZWNlaXZlRGF0YUNvbW1vbihmYWxzZSwgZGF0YSwgbGVuZ3RoLCBsZW5ndGhS
ZWNlaXZlZCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVCbG9iRGF0YShS
ZXNvdXJjZUhhbmRsZSosIGludCBsZW5ndGgpCit7CisgICAgZGlkUmVjZWl2ZURhdGFDb21tb24o
dHJ1ZSwgMCwgbGVuZ3RoLCAwKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2
ZURhdGFDb21tb24oYm9vbCBpc0Jsb2JEYXRhLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3Ro
LCBpbnQgbGVuZ3RoUmVjZWl2ZWQpCit7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICBpZiAo
SW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6aW5zdGFuY2VDb3VudCgpKSB7CiAgICAgICAgIEluc3Bl
Y3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSAobV9mcmFtZSAmJiBtX2ZyYW1lLT5w
YWdlKCkpID8gbV9mcmFtZS0+cGFnZSgpLT5pbnNwZWN0b3JUaW1lbGluZUFnZW50KCkgOiAwOwpA
QCAtNDMxLDcgKzQ0NSwxMCBAQCB2b2lkIFJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YShS
ZXNvCiAgICAgICAgICAgICB0aW1lbGluZUFnZW50LT53aWxsUmVjZWl2ZVJlc291cmNlRGF0YShp
ZGVudGlmaWVyKCkpOwogICAgIH0KICNlbmRpZgotICAgIGRpZFJlY2VpdmVEYXRhKGRhdGEsIGxl
bmd0aCwgbGVuZ3RoUmVjZWl2ZWQsIGZhbHNlKTsKKyAgICBpZiAoIWlzQmxvYkRhdGEpCisgICAg
ICAgIGRpZFJlY2VpdmVEYXRhKGRhdGEsIGxlbmd0aCwgbGVuZ3RoUmVjZWl2ZWQsIGZhbHNlKTsK
KyAgICBlbHNlCisgICAgICAgIGRpZFJlY2VpdmVCbG9iRGF0YShsZW5ndGgpOwogI2lmIEVOQUJM
RShJTlNQRUNUT1IpCiAgICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6Omluc3RhbmNlQ291
bnQoKSkgewogICAgICAgICBJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0g
KG1fZnJhbWUgJiYgbV9mcmFtZS0+cGFnZSgpKSA/IG1fZnJhbWUtPnBhZ2UoKS0+aW5zcGVjdG9y
VGltZWxpbmVBZ2VudCgpIDogMDsKQEAgLTQ0Niw2ICs0NjMsMTEgQEAgdm9pZCBSZXNvdXJjZUxv
YWRlcjo6ZGlkRmluaXNoTG9hZGluZyhSZQogICAgIGRpZEZpbmlzaExvYWRpbmcoZmluaXNoVGlt
ZSk7CiB9CiAKK3ZvaWQgUmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmdCbG9iKFJlc291
cmNlSGFuZGxlKiwgZG91YmxlIGZpbmlzaFRpbWUsIFBhc3NSZWZQdHI8QmxvYj4gYmxvYikKK3sK
KyAgICBkaWRGaW5pc2hMb2FkaW5nQmxvYihmaW5pc2hUaW1lLCBibG9iKTsKK30KKwogdm9pZCBS
ZXNvdXJjZUxvYWRlcjo6ZGlkRmFpbChSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlRXJy
b3ImIGVycm9yKQogewogI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCkBAIC01
MTcsNiArNTM5LDggQEAgdm9pZCBSZXNvdXJjZUxvYWRlcjo6d2lsbENhY2hlUmVzcG9uc2UoUgog
I2lmIEVOQUJMRShCTE9CKQogQXN5bmNGaWxlU3RyZWFtKiBSZXNvdXJjZUxvYWRlcjo6Y3JlYXRl
QXN5bmNGaWxlU3RyZWFtKEZpbGVTdHJlYW1DbGllbnQqIGNsaWVudCkKIHsKKyAgICAvLyBGSVhN
RTogRGVjb3VwbGUgdGhlIEZpbGVUaHJlYWQgZnJvbSBTY3JpcHRFeGVjdXRpb25Db250ZXh0cyBh
bmQgcmVtb3ZlIHRoaXMgbWV0aG9kIGZyb20gUmVzb3VyY2VIYW5kbGVDbGllbnQsCisgICAgLy8g
Y2FsbGVycyBzaG91ZSBiZSBhYmxlIHRvIGNyZWF0ZSBhIEZpbGVTdHJlYW1Qcm94eSBpbmRlcGVu
ZGVudCBvZiBhIGNvbnRleHQuCiAgICAgLy8gSXQgaXMgT0sgdG8gc2ltcGx5IHJldHVybiBhIHBv
aW50ZXIgc2luY2UgRmlsZVN0cmVhbVByb3h5OjpjcmVhdGUgYWRkcyBhbiBleHRyYSByZWYuCiAg
ICAgcmV0dXJuIEZpbGVTdHJlYW1Qcm94eTo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCktPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgY2xpZW50KS5nZXQoKTsKIH0KSW5kZXg6IFdlYkNvcmUv
bG9hZGVyL1Jlc291cmNlTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvUmVz
b3VyY2VMb2FkZXIuaAkocmV2aXNpb24gNjkxNDEpCisrKyBXZWJDb3JlL2xvYWRlci9SZXNvdXJj
ZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC04MCw5ICs4MCwxMSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25nIGxv
bmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KTsKICAg
ICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiwg
aW50LCBsb25nIGxvbmcgbGVuZ3RoUmVjZWl2ZWQsIGJvb2wgYWxsQXRPbmNlKTsKKyAgICAgICAg
dmlydHVhbCB2b2lkIGRpZFJlY2VpdmVCbG9iRGF0YShpbnQpIHsgfQogICAgICAgICB2aXJ0dWFs
IHZvaWQgZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKGNvbnN0IGNoYXIqLCBpbnQpIHsgfQogICAg
ICAgICB2b2lkIHdpbGxTdG9wQnVmZmVyaW5nRGF0YShjb25zdCBjaGFyKiwgaW50KTsKICAgICAg
ICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoZG91YmxlIGZpbmlzaFRpbWUpOworICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZ0Jsb2IoZG91YmxlIGZpbmlzaFRpbWUs
IFBhc3NSZWZQdHI8QmxvYj4pOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChjb25zdCBS
ZXNvdXJjZUVycm9yJik7CiAKICAgICAgICAgdmlydHVhbCBib29sIHNob3VsZFVzZUNyZWRlbnRp
YWxTdG9yYWdlKCk7CkBAIC05OCw4ICsxMDAsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGlkU2VuZERhdGEoUmVzb3VyY2VIYW5kbGUqLCB1bnNpZ25lZCBs
b25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50
KTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZUhhbmRs
ZSosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJl
Y2VpdmVEYXRhKFJlc291cmNlSGFuZGxlKiwgY29uc3QgY2hhciosIGludCwgaW50IGxlbmd0aFJl
Y2VpdmVkKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVCbG9iRGF0YShSZXNvdXJj
ZUhhbmRsZSosIGludCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQ2FjaGVkTWV0
YWRhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKSB7IGRp
ZFJlY2VpdmVDYWNoZWRNZXRhZGF0YShkYXRhLCBsZW5ndGgpOyB9CiAgICAgICAgIHZpcnR1YWwg
dm9pZCBkaWRGaW5pc2hMb2FkaW5nKFJlc291cmNlSGFuZGxlKiwgZG91YmxlIGZpbmlzaFRpbWUp
OworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZ0Jsb2IoUmVzb3VyY2VIYW5k
bGUqLCBkb3VibGUgLypmaW5pc2hUaW1lKi8sIFBhc3NSZWZQdHI8QmxvYj4pOwogICAgICAgICB2
aXJ0dWFsIHZvaWQgZGlkRmFpbChSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlRXJyb3Im
KTsKICAgICAgICAgdmlydHVhbCB2b2lkIHdhc0Jsb2NrZWQoUmVzb3VyY2VIYW5kbGUqKTsKICAg
ICAgICAgdmlydHVhbCB2b2lkIGNhbm5vdFNob3dVUkwoUmVzb3VyY2VIYW5kbGUqKTsKQEAgLTE0
MSw2ICsxNDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgcmVhY2hlZFRl
cm1pbmFsU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3JlYWNoZWRUZXJtaW5hbFN0YXRlOyB9CiAg
ICAgICAgIGJvb2wgY2FuY2VsbGVkKCkgY29uc3QgeyByZXR1cm4gbV9jYW5jZWxsZWQ7IH0KICAg
ICAgICAgYm9vbCBkZWZlcnNMb2FkaW5nKCkgY29uc3QgeyByZXR1cm4gbV9kZWZlcnNMb2FkaW5n
OyB9CisgICAgICAgIHZvaWQgZGlkUmVjZWl2ZURhdGFDb21tb24oYm9vbCBpc0Jsb2JEYXRhLCBj
b25zdCBjaGFyKiwgaW50LCBpbnQgbGVuZ3RoUmVjZWl2ZWQpOwogCiAgICAgICAgIFJlZlB0cjxS
ZXNvdXJjZUhhbmRsZT4gbV9oYW5kbGU7CiAgICAgICAgIFJlZlB0cjxGcmFtZT4gbV9mcmFtZTsK
SW5kZXg6IFdlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHAJKHJldmlzaW9uIDY5MTQxKQor
KysgV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTgsNiArMTU4LDIwIEBAIHZvaWQgU3VicmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVEYXRh
KGMKICAgICAgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVEYXRhKHRoaXMsIGRhdGEsIGxlbmd0aCk7
CiB9CiAKK3ZvaWQgU3VicmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVCbG9iRGF0YShpbnQgbGVu
Z3RoKQoreworICAgIC8vIFJlZmVyZW5jZSB0aGUgb2JqZWN0IGluIHRoaXMgbWV0aG9kIHNpbmNl
IHRoZSBhZGRpdGlvbmFsIHByb2Nlc3NpbmcgY2FuIGRvCisgICAgLy8gYW55dGhpbmcgaW5jbHVk
aW5nIHJlbW92aW5nIHRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGlzIG9iamVjdDsgb25lIGV4YW1w
bGUgb2YgdGhpcyBpcyAzMjY2MjE2LgorICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gcHJv
dGVjdCh0aGlzKTsKKworICAgIFJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlQmxvYkRhdGEobGVu
Z3RoKTsKKworICAgIC8vIEEgc3VicmVzb3VyY2UgbG9hZGVyIGRvZXMgbm90IGxvYWQgbXVsdGlw
YXJ0IHNlY3Rpb25zIHByb2dyZXNzaXZlbHkuCisgICAgLy8gU28gZG9uJ3QgZGVsaXZlciBhbnkg
ZGF0YSB0byB0aGUgbG9hZGVyIHlldC4KKyAgICBpZiAoIW1fbG9hZGluZ011bHRpcGFydENvbnRl
bnQgJiYgbV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlQmxvYkRhdGEodGhp
cywgbGVuZ3RoKTsKK30KKwogdm9pZCBTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUNhY2hl
ZE1ldGFkYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCiB7CiAgICAgLy8gUmVmZXJl
bmNlIHRoZSBvYmplY3QgaW4gdGhpcyBtZXRob2Qgc2luY2UgdGhlIGFkZGl0aW9uYWwgcHJvY2Vz
c2luZyBjYW4gZG8KQEAgLTE3MCw2ICsxODQsMTYgQEAgdm9pZCBTdWJyZXNvdXJjZUxvYWRlcjo6
ZGlkUmVjZWl2ZUNhY2hlZAogCiB2b2lkIFN1YnJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2Fk
aW5nKGRvdWJsZSBmaW5pc2hUaW1lKQogeworICAgIGRpZEZpbmlzaExvYWRpbmdDb21tb24oZmFs
c2UsIGZpbmlzaFRpbWUsIDApOworfQorCit2b2lkIFN1YnJlc291cmNlTG9hZGVyOjpkaWRGaW5p
c2hMb2FkaW5nQmxvYihkb3VibGUgZmluaXNoVGltZSwgUGFzc1JlZlB0cjxCbG9iPiBibG9iKQor
eworICAgIGRpZEZpbmlzaExvYWRpbmdDb21tb24odHJ1ZSwgZmluaXNoVGltZSwgYmxvYik7Cit9
CisKK3ZvaWQgU3VicmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmdDb21tb24oYm9vbCBh
c0Jsb2IsIGRvdWJsZSBmaW5pc2hUaW1lLCBQYXNzUmVmUHRyPEJsb2I+IGJsb2IpCit7CiAgICAg
aWYgKGNhbmNlbGxlZCgpKQogICAgICAgICByZXR1cm47CiAgICAgQVNTRVJUKCFyZWFjaGVkVGVy
bWluYWxTdGF0ZSgpKTsKQEAgLTE3OCwxNCArMjAyLDIwIEBAIHZvaWQgU3VicmVzb3VyY2VMb2Fk
ZXI6OmRpZEZpbmlzaExvYWRpbmcKICAgICBSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IHByb3Rl
Y3QodGhpcyk7CiAKICAgICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1fY2xpZW50LT5kaWRGaW5p
c2hMb2FkaW5nKHRoaXMpOwotICAgIAorICAgICAgICBpZiAoYXNCbG9iKQorICAgICAgICAgICAg
bV9jbGllbnQtPmRpZEZpbmlzaExvYWRpbmdCbG9iKHRoaXMsIGJsb2IpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBtX2NsaWVudC0+ZGlkRmluaXNoTG9hZGluZyh0aGlzKTsKKwogICAgIG1f
aGFuZGxlID0gMDsKIAogICAgIGlmIChjYW5jZWxsZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAg
IG1fZG9jdW1lbnRMb2FkZXItPnJlbW92ZVN1YnJlc291cmNlTG9hZGVyKHRoaXMpOwotICAgIFJl
c291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKGZpbmlzaFRpbWUpOworICAgIGlmIChhc0Js
b2IpCisgICAgICAgIFJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nQmxvYihmaW5pc2hU
aW1lLCBibG9iKTsKKyAgICBlbHNlCisgICAgICAgIFJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hM
b2FkaW5nKGZpbmlzaFRpbWUpOwogfQogCiB2b2lkIFN1YnJlc291cmNlTG9hZGVyOjpkaWRGYWls
KGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQpJbmRleDogV2ViQ29yZS9sb2FkZXIvU3VicmVz
b3VyY2VMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxv
YWRlci5oCShyZXZpc2lvbiA2OTE0MSkKKysrIFdlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9h
ZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDE0ICs1MSwxOCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25nIGxvbmcg
Ynl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KTsKICAgICAg
ICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNl
Jik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiwgaW50
LCBsb25nIGxvbmcgbGVuZ3RoUmVjZWl2ZWQsIGJvb2wgYWxsQXRPbmNlKTsKKyAgICAgICAgdmly
dHVhbCB2b2lkIGRpZFJlY2VpdmVCbG9iRGF0YShpbnQpOwogICAgICAgICB2aXJ0dWFsIHZvaWQg
ZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKGNvbnN0IGNoYXIqLCBpbnQpOwogICAgICAgICB2aXJ0
dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhkb3VibGUgZmluaXNoVGltZSk7CisgICAgICAgIHZp
cnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nQmxvYihkb3VibGUgZmluaXNoVGltZSwgUGFzc1Jl
ZlB0cjxCbG9iPik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKGNvbnN0IFJlc291cmNl
RXJyb3ImKTsKICAgICAgICAgdmlydHVhbCBib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdl
KCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKICAgICAgICAgdmlydHVhbCB2b2lk
IHJlY2VpdmVkQ2FuY2VsbGF0aW9uKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7ICAg
ICAgICAKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZENhbmNlbChjb25zdCBSZXNvdXJjZUVycm9y
Jik7CiAKKyAgICAgICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nQ29tbW9uKGJvb2wgYXNCbG9iLCBk
b3VibGUgZmluaXNoVGltZSwgUGFzc1JlZlB0cjxCbG9iPik7CisKICAgICAgICAgU3VicmVzb3Vy
Y2VMb2FkZXJDbGllbnQqIG1fY2xpZW50OwogICAgICAgICBib29sIG1fbG9hZGluZ011bHRpcGFy
dENvbnRlbnQ7CiAgICAgfTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVy
Q2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXJD
bGllbnQuaAkocmV2aXNpb24gNjkxNDEpCisrKyBXZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxv
YWRlckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw5IEBACiAjaWZuZGVmIFN1
YnJlc291cmNlTG9hZGVyQ2xpZW50X2gKICNkZWZpbmUgU3VicmVzb3VyY2VMb2FkZXJDbGllbnRf
aAogCisjaW5jbHVkZSAiQmxvYi5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVuZ2U7CkBAIC00
NiwxMSArNDksMTMgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YShTdWJy
ZXNvdXJjZUxvYWRlciosIHVuc2lnbmVkIGxvbmcgbG9uZyAvKmJ5dGVzU2VudCovLCB1bnNpZ25l
ZCBsb25nIGxvbmcgLyp0b3RhbEJ5dGVzVG9CZVNlbnQqLykgeyB9CiAKICAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShTdWJyZXNvdXJj
ZUxvYWRlciosIGNvbnN0IGNoYXIqLCBpbnQgLypsZW5ndGhSZWNlaXZlZCovKSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBjaGFy
KiwgaW50IC8qbGVuZ3RoUmVjZWl2ZWQqLykgeyB9IC8vIE5vdCBjYWxsZWQgaWYgcmVxdWVzdC5k
b3dubG9hZEFzQmxvYiBpcyBzZXQuCisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVCbG9iRGF0
YShTdWJyZXNvdXJjZUxvYWRlciosIGludCAvKmxlbmd0aFJlY2VpdmVkKi8pIHsgfSAvLyBPbmx5
IGNhbGxlZCBpZiByZXF1ZXN0LmRvd25sb2FkQXNCbG9iIGlzIHNldC4KICAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgY2hh
ciosIGludCAvKmxlbmd0aFJlY2VpdmVkKi8pIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5p
c2hMb2FkaW5nKFN1YnJlc291cmNlTG9hZGVyKikgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZEZp
bmlzaExvYWRpbmdCbG9iKFN1YnJlc291cmNlTG9hZGVyKiwgUGFzc1JlZlB0cjxCbG9iPikgeyB9
CiAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBSZXNv
dXJjZUVycm9yJikgeyB9Ci0gICAgCisKICAgICB2aXJ0dWFsIGJvb2wgZ2V0U2hvdWxkVXNlQ3Jl
ZGVudGlhbFN0b3JhZ2UoU3VicmVzb3VyY2VMb2FkZXIqLCBib29sJiAvKnNob3VsZFVzZUNyZWRl
bnRpYWxTdG9yYWdlKi8pIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2b2lkIGRpZFJl
Y2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHJlY2VpdmVkQ2Fu
Y2VsbGF0aW9uKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UmKSB7IH0KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1RocmVhZGFibGVMb2FkZXJDbGllbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxlTG9hZGVyQ2xpZW50LmgJKHJl
dmlzaW9uIDY5MTQxKQorKysgV2ViQ29yZS9sb2FkZXIvVGhyZWFkYWJsZUxvYWRlckNsaWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw5IEBACiAjaWZuZGVmIFRocmVhZGFibGVMb2Fk
ZXJDbGllbnRfaAogI2RlZmluZSBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50X2gKIAorI2luY2x1ZGUg
IkJsb2IuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKICAgICBjbGFzcyBSZXNvdXJjZUVycm9yOwpAQCAtNDEsOCArNDQsMTAgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkU2VuZERhdGEodW5zaWduZWQg
bG9uZyBsb25nIC8qYnl0ZXNTZW50Ki8sIHVuc2lnbmVkIGxvbmcgbG9uZyAvKnRvdGFsQnl0ZXNU
b0JlU2VudCovKSB7IH0KIAogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNl
KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSB7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJl
Y2VpdmVEYXRhKGNvbnN0IGNoYXIqLCBpbnQgLypsZW5ndGhSZWNlaXZlZCovKSB7IH0KKyAgICAg
ICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqLCBpbnQgLypsZW5ndGhS
ZWNlaXZlZCovKSB7IH0gLy8gTm90IGNhbGxlZCB3aGVuIHJlcXVlc3QuZG93bmxvYWRBc0Jsb2Ig
aXMgc2V0LgorICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUJsb2JEYXRhKGludCAvKiBs
ZW5ndGhSZWNlaXZlZCovKSB7IH0gLy8gT25seSBjYWxsZWQgZm9yIHJlcXVlc3QuZG93bmxvYWRB
c0Jsb2IKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9u
ZyAvKmlkZW50aWZpZXIqLykgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2Fk
aW5nQmxvYih1bnNpZ25lZCBsb25nIC8qaWRlbnRpZmllciovLCBQYXNzUmVmUHRyPEJsb2I+KSB7
IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpIHsg
fQogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbFJlZGlyZWN0Q2hlY2soKSB7IH0KIApJbmRl
eDogV2ViQ29yZS9sb2FkZXIvVGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBlci5oCShy
ZXZpc2lvbiA2OTE0MSkKKysrIFdlYkNvcmUvbG9hZGVyL1RocmVhZGFibGVMb2FkZXJDbGllbnRX
cmFwcGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDYgKzc0LDEyIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgICAgICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZURhdGEoZGF0YSwgbGVu
Z3RoUmVjZWl2ZWQpOwogICAgICAgICB9CiAKKyAgICAgICAgdm9pZCBkaWRSZWNlaXZlQmxvYkRh
dGEoaW50IGxlbmd0aFJlY2VpdmVkKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV9jbGll
bnQpCisgICAgICAgICAgICAgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVCbG9iRGF0YShsZW5ndGhS
ZWNlaXZlZCk7CisgICAgICAgIH0KKwogICAgICAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmcodW5z
aWduZWQgbG9uZyBpZGVudGlmaWVyKQogICAgICAgICB7CiAgICAgICAgICAgICBtX2RvbmUgPSB0
cnVlOwpAQCAtODEsNiArODcsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAg
ICAgIG1fY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKGlkZW50aWZpZXIpOwogICAgICAgICB9CiAK
KyAgICAgICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nQmxvYih1bnNpZ25lZCBsb25nIGlkZW50aWZp
ZXIsIFBhc3NSZWZQdHI8QmxvYj4gYmxvYikKKyAgICAgICAgeworICAgICAgICAgICAgbV9kb25l
ID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgICAgICAgICBtX2Ns
aWVudC0+ZGlkRmluaXNoTG9hZGluZ0Jsb2IoaWRlbnRpZmllciwgYmxvYik7CisgICAgICAgIH0K
KwogICAgICAgICB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIG1fZG9uZSA9IHRydWU7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9X
b3JrZXJUaHJlYWRhYmxlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9X
b3JrZXJUaHJlYWRhYmxlTG9hZGVyLmNwcAkocmV2aXNpb24gNjkxNDEpCisrKyBXZWJDb3JlL2xv
YWRlci9Xb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkxLDYg
KzE5MSwxMiBAQCBzdGF0aWMgdm9pZCB3b3JrZXJDb250ZXh0RGlkUmVjZWl2ZURhdGEoCiAgICAg
d29ya2VyQ2xpZW50V3JhcHBlci0+ZGlkUmVjZWl2ZURhdGEodmVjdG9yRGF0YS0+ZGF0YSgpLCB2
ZWN0b3JEYXRhLT5zaXplKCkpOwogfQogCitzdGF0aWMgdm9pZCB3b3JrZXJDb250ZXh0RGlkUmVj
ZWl2ZUJsb2JEYXRhKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFJlZlB0cjxUaHJl
YWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBlcj4gd29ya2VyQ2xpZW50V3JhcHBlciwgaW50IGxlbmd0
aFJlY2VpdmVkKQoreworICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwgY29udGV4dC0+aXNXb3Jr
ZXJDb250ZXh0KCkpOworICAgIHdvcmtlckNsaWVudFdyYXBwZXItPmRpZFJlY2VpdmVCbG9iRGF0
YShsZW5ndGhSZWNlaXZlZCk7Cit9CisKIHZvaWQgV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6TWFp
blRocmVhZEJyaWRnZTo6ZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0
aFJlY2VpdmVkKQogewogICAgIE93blB0cjxWZWN0b3I8Y2hhcj4gPiB2ZWN0b3IgPSBhZG9wdFB0
cihuZXcgVmVjdG9yPGNoYXI+KGxlbmd0aFJlY2VpdmVkKSk7IC8vIG5lZWRzIHRvIGJlIGFuIE93
blB0ciBmb3IgdXNhZ2Ugd2l0aCBjcmVhdGVDYWxsYmFja1Rhc2suCkBAIC0xOTgsNiArMjA0LDEx
IEBAIHZvaWQgV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEIKICAgICBtX2xvYWRl
clByb3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyQ29udGV4dChjcmVhdGVDYWxsYmFja1Rhc2so
JndvcmtlckNvbnRleHREaWRSZWNlaXZlRGF0YSwgbV93b3JrZXJDbGllbnRXcmFwcGVyLCB2ZWN0
b3IucmVsZWFzZSgpKSwgbV90YXNrTW9kZSk7CiB9CiAKK3ZvaWQgV29ya2VyVGhyZWFkYWJsZUxv
YWRlcjo6TWFpblRocmVhZEJyaWRnZTo6ZGlkUmVjZWl2ZUJsb2JEYXRhKGludCBsZW5ndGhSZWNl
aXZlZCkKK3sKKyAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyQ29udGV4
dChjcmVhdGVDYWxsYmFja1Rhc2soJndvcmtlckNvbnRleHREaWRSZWNlaXZlQmxvYkRhdGEsIG1f
d29ya2VyQ2xpZW50V3JhcHBlciwgbGVuZ3RoUmVjZWl2ZWQpLCBtX3Rhc2tNb2RlKTsKK30KKwog
c3RhdGljIHZvaWQgd29ya2VyQ29udGV4dERpZEZpbmlzaExvYWRpbmcoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgUmVmUHRyPFRocmVhZGFibGVMb2FkZXJDbGllbnRXcmFwcGVyPiB3
b3JrZXJDbGllbnRXcmFwcGVyLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpCiB7CiAgICAgQVNT
RVJUX1VOVVNFRChjb250ZXh0LCBjb250ZXh0LT5pc1dvcmtlckNvbnRleHQoKSk7CkBAIC0yMDks
NiArMjIwLDIxIEBAIHZvaWQgV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEIKICAg
ICBtX2xvYWRlclByb3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyQ29udGV4dChjcmVhdGVDYWxs
YmFja1Rhc2soJndvcmtlckNvbnRleHREaWRGaW5pc2hMb2FkaW5nLCBtX3dvcmtlckNsaWVudFdy
YXBwZXIsIGlkZW50aWZpZXIpLCBtX3Rhc2tNb2RlKTsKIH0KIAorc3RhdGljIHZvaWQgd29ya2Vy
Q29udGV4dERpZEZpbmlzaExvYWRpbmdCbG9iKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIFJlZlB0cjxUaHJlYWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBlcj4gd29ya2VyQ2xpZW50V3Jh
cHBlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBsb25nIGlkZW50aWZpZXIsIEtVUkwgYmxvYklELCBTdHJpbmcgdHlwZSwgbG9uZyBsb25n
IHNpemUpCit7CisgICAgQVNTRVJUX1VOVVNFRChjb250ZXh0LCBjb250ZXh0LT5pc1dvcmtlckNv
bnRleHQoKSk7CisgICAgd29ya2VyQ2xpZW50V3JhcHBlci0+ZGlkRmluaXNoTG9hZGluZ0Jsb2Io
aWRlbnRpZmllciwgQmxvYjo6Y3JlYXRlKGJsb2JJRCwgdHlwZSwgc2l6ZSkpOworfQorCit2b2lk
IFdvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2U6OmRpZEZpbmlzaExvYWRp
bmdCbG9iKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgUGFzc1JlZlB0cjxCbG9iPiBibG9iKQor
eworICAgIG1fZG93bmxvYWRlZEJsb2IgPSBibG9iOworICAgIG1fbG9hZGVyUHJveHkucG9zdFRh
c2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KAorICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJndv
cmtlckNvbnRleHREaWRGaW5pc2hMb2FkaW5nQmxvYiwgbV93b3JrZXJDbGllbnRXcmFwcGVyLCBp
ZGVudGlmaWVyLCBibG9iLT51cmwoKSwgYmxvYi0+dHlwZSgpLCBibG9iLT5zaXplKCkpLAorICAg
ICAgICBtX3Rhc2tNb2RlKTsKK30KKwogc3RhdGljIHZvaWQgd29ya2VyQ29udGV4dERpZEZhaWwo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUmVmUHRyPFRocmVhZGFibGVMb2FkZXJD
bGllbnRXcmFwcGVyPiB3b3JrZXJDbGllbnRXcmFwcGVyLCBjb25zdCBSZXNvdXJjZUVycm9yJiBl
cnJvcikKIHsKICAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQsIGNvbnRleHQtPmlzV29ya2VyQ29u
dGV4dCgpKTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1dvcmtlclRocmVhZGFibGVMb2FkZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9Xb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmgJKHJl
dmlzaW9uIDY5MTQxKQorKysgV2ViQ29yZS9sb2FkZXIvV29ya2VyVGhyZWFkYWJsZUxvYWRlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNyArMTE0LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFNlbmREYXRhKHVuc2lnbmVkIGxvbmcgbG9uZyBi
eXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpOwogICAgICAg
ICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJik7CiAgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hh
ciosIGludCBsZW5ndGhSZWNlaXZlZCk7CisgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVj
ZWl2ZUJsb2JEYXRhKGludCBsZW5ndGhSZWNlaXZlZCk7CiAgICAgICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpOworICAgICAgICAg
ICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmdCbG9iKHVuc2lnbmVkIGxvbmcgaWRlbnRp
ZmllciwgUGFzc1JlZlB0cjxCbG9iPik7CiAgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFp
bChjb25zdCBSZXNvdXJjZUVycm9yJik7CiAgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFp
bFJlZGlyZWN0Q2hlY2soKTsKICAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQXV0
aGVudGljYXRpb25DYW5jZWxsYXRpb24oY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwpAQCAtMTMx
LDYgKzEzMyw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICAgICAgLy8gRm9yIHVz
ZSBvbiB0aGUgbWFpbiB0aHJlYWQuCiAgICAgICAgICAgICBTdHJpbmcgbV90YXNrTW9kZTsKKwor
ICAgICAgICAgICAgLy8gT25seSB0byBiZSB1c2VkIG9uIHRoZSBtYWluIHRocmVhZC4KKyAgICAg
ICAgICAgIFJlZlB0cjxCbG9iPiBtX2Rvd25sb2FkZWRCbG9iOwogICAgICAgICB9OwogCiAgICAg
ICAgIFdvcmtlclRocmVhZGFibGVMb2FkZXIoV29ya2VyQ29udGV4dCosIFRocmVhZGFibGVMb2Fk
ZXJDbGllbnQqLCBjb25zdCBTdHJpbmcmIHRhc2tNb2RlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
LCBjb25zdCBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyYpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCShyZXZpc2lvbiA2OTE0MSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkJsb2JSZWdpc3RyeS5oIgogI2luY2x1ZGUgIkRO
Uy5oIgorI2luY2x1ZGUgIkhUVFBQYXJzZXJzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2lu
Y2x1ZGUgIlJlc291cmNlSGFuZGxlQ2xpZW50LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKQEAgLTU0
LDYgKzU1LDcgQEAgUmVzb3VyY2VIYW5kbGU6OlJlc291cmNlSGFuZGxlKGNvbnN0IFJlcwogCiBQ
YXNzUmVmUHRyPFJlc291cmNlSGFuZGxlPiBSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlKE5ldHdvcmtp
bmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291
cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQsIGJvb2wgZGVmZXJzTG9hZGluZywgYm9vbCBzaG91bGRD
b250ZW50U25pZmYpCiB7CisgICAgQVNTRVJUKCFyZXF1ZXN0LmRvd25sb2FkQXNCbG9iKCkpOyAv
LyBGSVhNRTogSGFuZGxlIHRoaXMgY2FzZSB3aXRoIGEgUmVzb3VyY2VIYW5kbGVDbGllbnQgaW1w
bGVtZW50YXRpb24gdGhhdCBicmlkZ2VzIHRoZSBnYXAuCiAjaWYgRU5BQkxFKEJMT0IpCiAgICAg
aWYgKHJlcXVlc3QudXJsKCkucHJvdG9jb2xJcygiYmxvYiIpKSB7CiAgICAgICAgIFBhc3NSZWZQ
dHI8UmVzb3VyY2VIYW5kbGU+IGhhbmRsZSA9IGJsb2JSZWdpc3RyeSgpLmNyZWF0ZVJlc291cmNl
SGFuZGxlKHJlcXVlc3QsIGNsaWVudCk7CkBAIC0xODUsNCArMTg3LDMyIEBAIHZvaWQgUmVzb3Vy
Y2VIYW5kbGU6OmNhY2hlTWV0YWRhdGEoY29uc3QKICAgICAvLyBPcHRpb25hbGx5IGltcGxlbWVu
dGVkIGJ5IHBsYXRmb3JtLgogfQogCisvLyBzdGF0aWMKK1Bhc3NSZWZQdHI8QmxvYj4gUmVzb3Vy
Y2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHlBc0Jsb2IoCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHdvcmtpbmdDb250ZXh0KiBjb250
ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZUVy
cm9yJiBlcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgQVNTRVJUKHJlcXVlc3QuZG93
bmxvYWRBc0Jsb2IoKSk7CisKKyAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKKyAgICBsb2FkUmVzb3Vy
Y2VTeW5jaHJvbm91c2x5KGNvbnRleHQsIHJlcXVlc3QsIHN0b3JlZENyZWRlbnRpYWxzLCBlcnJv
ciwgcmVzcG9uc2UsIGRhdGEpOworICAgIGlmICghZXJyb3IuaXNOdWxsKCkpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgU3RyaW5nIGNvbnRlbnRUeXBlOworICAgIGlmIChyZXNwb25zZS5pc0hU
VFAoKSkKKyAgICAgICAgY29udGVudFR5cGUgPSBleHRyYWN0TUlNRVR5cGVGcm9tTWVkaWFUeXBl
KHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZCgiQ29udGVudC1UeXBlIikpOworICAgIGVsc2UKKyAg
ICAgICAgY29udGVudFR5cGUgPSByZXNwb25zZS5taW1lVHlwZSgpOworCisgICAgT3duUHRyPEJs
b2JEYXRhPiBibG9iRGF0YSA9IEJsb2JEYXRhOjpjcmVhdGUoKTsKKyAgICBibG9iRGF0YS0+c2V0
Q29udGVudFR5cGUoY29udGVudFR5cGUpOworICAgIGlmICghZGF0YS5pc0VtcHR5KCkpCisgICAg
ICAgIGJsb2JEYXRhLT5hcHBlbmREYXRhKENTdHJpbmcoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgp
KSk7IC8vIEZJWE1FOiBEb24ndCBjb3B5IHRoZSBkYXRhLgorICAgIHJldHVybiBCbG9iOjpjcmVh
dGUoYmxvYkRhdGEucmVsZWFzZSgpLCBkYXRhLnNpemUoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5o
CShyZXZpc2lvbiA2OTE0MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhh
bmRsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3NCw3IEBAIHR5cGVkZWYgc3RydWN0IE9w
YXF1ZUNGSFRUUENvb2tpZVN0b3JhZ2UKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQXV0
aGVudGljYXRpb25DaGFsbGVuZ2U7CitjbGFzcyBCbG9iOwogY2xhc3MgQ3JlZGVudGlhbDsKIGNs
YXNzIEZvcm1EYXRhOwogY2xhc3MgRnJhbWU7CkBAIC05Nyw2ICs5OCw3IEBAIGNsYXNzIFJlc291
cmNlSGFuZGxlIDogcHVibGljIFJlZkNvdW50ZWQKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxSZXNvdXJjZUhhbmRsZT4gY3JlYXRlKE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiwgUmVzb3VyY2VIYW5kbGVDbGllbnQqLCBib29sIGRlZmVyc0xvYWRpbmcs
IGJvb2wgc2hvdWxkQ29udGVudFNuaWZmKTsKICAgICBzdGF0aWMgdm9pZCBsb2FkUmVzb3VyY2VT
eW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jiwg
U3RvcmVkQ3JlZGVudGlhbHMsIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVj
dG9yPGNoYXI+JiBkYXRhKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iPiBsb2FkUmVzb3Vy
Y2VTeW5jaHJvbm91c2x5QXNCbG9iKE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHMsIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3Bv
bnNlJik7CiAKICAgICBzdGF0aWMgdm9pZCBwcmVwYXJlRm9yVVJMKGNvbnN0IEtVUkwmKTsKICAg
ICBzdGF0aWMgYm9vbCB3aWxsTG9hZEZyb21DYWNoZShSZXNvdXJjZVJlcXVlc3QmLCBGcmFtZSop
OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlQ2xpZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlQ2xp
ZW50LmgJKHJldmlzaW9uIDY5MTQxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlSGFuZGxlQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDkgQEAKICNpZm5k
ZWYgUmVzb3VyY2VIYW5kbGVDbGllbnRfaAogI2RlZmluZSBSZXNvdXJjZUhhbmRsZUNsaWVudF9o
CiAKKyNpbmNsdWRlICJCbG9iLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIApAQCAtNzIsOCArNzQsMTAgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VI
YW5kbGUqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgeyB9CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBkaWRSZWNlaXZlRGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqLCBpbnQsIGludCAv
Kmxlbmd0aFJlY2VpdmVkKi8pIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUJs
b2JEYXRhKFJlc291cmNlSGFuZGxlKiwgaW50KSB7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGRp
ZFJlY2VpdmVDYWNoZWRNZXRhZGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqLCBpbnQp
IHsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhSZXNvdXJjZUhhbmRs
ZSosIGRvdWJsZSAvKmZpbmlzaFRpbWUqLykgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRG
aW5pc2hMb2FkaW5nQmxvYihSZXNvdXJjZUhhbmRsZSosIGRvdWJsZSAvKmZpbmlzaFRpbWUqLywg
UGFzc1JlZlB0cjxCbG9iPikgeyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKFJlc291
cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpIHsgfQogICAgICAgICB2aXJ0dWFsIHZv
aWQgd2FzQmxvY2tlZChSZXNvdXJjZUhhbmRsZSopIHsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQg
Y2Fubm90U2hvd1VSTChSZXNvdXJjZUhhbmRsZSopIHsgfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcAkocmV2aXNpb24gNjkxNDEp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAgUGFzc093blB0cjxSZXNvdXJjZVJlcXVlc3Q+
IFJlc291cmNlUmVxdQogICAgIHJlcXVlc3QtPnNldEZpcnN0UGFydHlGb3JDb29raWVzKGRhdGEt
Pm1fZmlyc3RQYXJ0eUZvckNvb2tpZXMpOwogICAgIHJlcXVlc3QtPnNldEhUVFBNZXRob2QoZGF0
YS0+bV9odHRwTWV0aG9kKTsKICAgICByZXF1ZXN0LT5zZXRUYXJnZXRUeXBlKGRhdGEtPm1fdGFy
Z2V0VHlwZSk7CisgICAgcmVxdWVzdC0+c2V0RG93bmxvYWRBc0Jsb2IoZGF0YS0+bV9kb3dubG9h
ZEFzQmxvYik7CiAKICAgICByZXF1ZXN0LT51cGRhdGVSZXNvdXJjZVJlcXVlc3QoKTsKICAgICBy
ZXF1ZXN0LT5tX2h0dHBIZWFkZXJGaWVsZHMuYWRvcHQoZGF0YS0+bV9odHRwSGVhZGVycy5yZWxl
YXNlKCkpOwpAQCAtNzksNiArODAsNyBAQCBQYXNzT3duUHRyPENyb3NzVGhyZWFkUmVzb3VyY2VS
ZXF1ZXN0RGF0CiAgICAgZGF0YS0+bV9odHRwTWV0aG9kID0gaHR0cE1ldGhvZCgpLmNyb3NzVGhy
ZWFkU3RyaW5nKCk7CiAgICAgZGF0YS0+bV9odHRwSGVhZGVycyA9IGh0dHBIZWFkZXJGaWVsZHMo
KS5jb3B5RGF0YSgpOwogICAgIGRhdGEtPm1fdGFyZ2V0VHlwZSA9IG1fdGFyZ2V0VHlwZTsKKyAg
ICBkYXRhLT5tX2Rvd25sb2FkQXNCbG9iID0gbV9kb3dubG9hZEFzQmxvYjsKIAogICAgIGRhdGEt
Pm1fcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShtX3Jlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxs
YmFja0FycmF5LnNpemUoKSk7CiAgICAgc2l6ZV90IGVuY29kaW5nQXJyYXlTaXplID0gbV9yZXNw
b25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheS5zaXplKCk7CkBAIC0z
NDEsNyArMzQzLDEwIEBAIGJvb2wgZXF1YWxJZ25vcmluZ0hlYWRlckZpZWxkcyhjb25zdCBSZXMK
ICAgICAKICAgICBpZiAoYS5hbGxvd0Nvb2tpZXMoKSAhPSBiLmFsbG93Q29va2llcygpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKKyAgICBpZiAoYS5kb3dubG9hZEFzQmxvYigpICE9
IGIuZG93bmxvYWRBc0Jsb2IoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgRm9ybURh
dGEqIGZvcm1EYXRhQSA9IGEuaHR0cEJvZHkoKTsKICAgICBGb3JtRGF0YSogZm9ybURhdGFCID0g
Yi5odHRwQm9keSgpOwogICAgIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlUmVxdWVzdEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VSZXF1ZXN0QmFzZS5oCShyZXZpc2lvbiA2OTE0MSkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NCw2
ICsxNDQsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBUYXJnZXRUeXBlIHRhcmdl
dFR5cGUoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldFR5cGU7IH0KICAgICAgICAgdm9pZCBzZXRU
YXJnZXRUeXBlKFRhcmdldFR5cGUgdHlwZSkgeyBtX3RhcmdldFR5cGUgPSB0eXBlOyB9CiAKKyAg
ICAgICAgLy8gSWYgdHJ1ZSwgdGhlIHJlc3BvbnNlIGJvZHkgd2lsbCBiZSBwcm92aWRlZCBhcyBh
IGJsb2IuCisgICAgICAgIGJvb2wgZG93bmxvYWRBc0Jsb2IoKSBjb25zdCB7IHJldHVybiBtX2Rv
d25sb2FkQXNCbG9iOyB9CisgICAgICAgIHZvaWQgc2V0RG93bmxvYWRBc0Jsb2IoYm9vbCBkb3du
bG9hZCkgeyBtX2Rvd25sb2FkQXNCbG9iID0gZG93bmxvYWQ7IH0KKwogICAgICAgICBzdGF0aWMg
Ym9vbCBjb21wYXJlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVxdWVz
dCYpOwogCiAgICAgcHJvdGVjdGVkOgpAQCAtMTU1LDYgKzE1OSw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgICAgICwgbV9yZXBvcnRMb2FkVGltaW5nKGZhbHNlKQogICAgICAgICAg
ICAgLCBtX3JlcG9ydFJhd0hlYWRlcnMoZmFsc2UpCiAgICAgICAgICAgICAsIG1fdGFyZ2V0VHlw
ZShUYXJnZXRJc1N1YnJlc291cmNlKQorICAgICAgICAgICAgLCBtX2Rvd25sb2FkQXNCbG9iKGZh
bHNlKQogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtMTcwLDYgKzE3NSw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgICAgICwgbV9yZXBvcnRMb2FkVGltaW5nKGZhbHNlKQogICAg
ICAgICAgICAgLCBtX3JlcG9ydFJhd0hlYWRlcnMoZmFsc2UpCiAgICAgICAgICAgICAsIG1fdGFy
Z2V0VHlwZShUYXJnZXRJc1N1YnJlc291cmNlKQorICAgICAgICAgICAgLCBtX2Rvd25sb2FkQXNC
bG9iKGZhbHNlKQogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtMTk1LDYgKzIwMSw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX3JlcG9ydExvYWRUaW1pbmc7CiAgICAg
ICAgIGJvb2wgbV9yZXBvcnRSYXdIZWFkZXJzOwogICAgICAgICBUYXJnZXRUeXBlIG1fdGFyZ2V0
VHlwZTsKKyAgICAgICAgYm9vbCBtX2Rvd25sb2FkQXNCbG9iOwogCiAgICAgcHJpdmF0ZToKICAg
ICAgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBhc1Jlc291cmNlUmVxdWVzdCgpIGNvbnN0OwpA
QCAtMjE4LDYgKzIyNSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUmVmUHRyPEZv
cm1EYXRhPiBtX2h0dHBCb2R5OwogICAgICAgICBib29sIG1fYWxsb3dDb29raWVzOwogICAgICAg
ICBSZXNvdXJjZVJlcXVlc3RCYXNlOjpUYXJnZXRUeXBlIG1fdGFyZ2V0VHlwZTsKKyAgICAgICAg
Ym9vbCBtX2Rvd25sb2FkQXNCbG9iOwogICAgIH07CiAgICAgCiAgICAgdW5zaWduZWQgaW5pdGlh
bGl6ZU1heGltdW1IVFRQQ29ubmVjdGlvbkNvdW50UGVySG9zdCgpOwpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL1Jlc291cmNlUmVxdWVzdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlcXVlc3QuaAkocmV2
aXNpb24gNjkxNDEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vUmVzb3Vy
Y2VSZXF1ZXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTg0LDYgKzg0LDEwIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgaW50IGFwcENhY2hlSG9zdElEKCkgY29uc3QgeyByZXR1cm4gbV9h
cHBDYWNoZUhvc3RJRDsgfQogICAgICAgICB2b2lkIHNldEFwcENhY2hlSG9zdElEKGludCBpZCkg
eyBtX2FwcENhY2hlSG9zdElEID0gaWQ7IH0KIAorICAgICAgICAvLyBJZiB0cnVlLCB0aGUgcmVz
cG9uc2UgYm9keSB3aWxsIGJlIHByb3ZpZGVkIGFzIGEgZmlsZS4KKyAgICAgICAgYm9vbCBkb3du
bG9hZFRvRmlsZSgpIGNvbnN0IHsgcmV0dXJuIGRvd25sb2FkQXNCbG9iKCk7IH0KKyAgICAgICAg
dm9pZCBzZXREb3dubG9hZFRvRmlsZShib29sIGRvd25sb2FkKSB7IHNldERvd25sb2FkQXNCbG9i
KGRvd25sb2FkKTsgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIFJlc291
cmNlUmVxdWVzdEJhc2U7CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1
bS9SZXNvdXJjZVJlc3BvbnNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY2hyb21pdW0vUmVzb3VyY2VSZXNwb25zZS5jcHAJKHJldmlzaW9uIDY5MTQxKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL1Jlc291cmNlUmVzcG9uc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCwxOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
K2NvbnN0IFN0cmluZyYgUmVzb3VyY2VSZXNwb25zZTo6ZG93bmxvYWRGaWxlUGF0aCgpIGNvbnN0
Cit7CisgICAgbGF6eUluaXQoKTsKKyAgICByZXR1cm4gbV9kb3dubG9hZEZpbGVQYXRoOworfQor
Cit2b2lkIFJlc291cmNlUmVzcG9uc2U6OnNldERvd25sb2FkRmlsZVBhdGgoY29uc3QgU3RyaW5n
JiBwYXRoKQoreworICAgIGxhenlJbml0KCk7CisgICAgbV9kb3dubG9hZEZpbGVQYXRoICA9IHBh
dGg7Cit9CisKIFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0YT4gUmVz
b3VyY2VSZXNwb25zZTo6ZG9QbGF0Zm9ybUNvcHlEYXRhKFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRS
ZXNvdXJjZVJlc3BvbnNlRGF0YT4gZGF0YSkgY29uc3QKIHsKICAgICBkYXRhLT5tX2FwcENhY2hl
SUQgPSBtX2FwcENhY2hlSUQ7CkBAIC0zOSw2ICs1MSw3IEBAIFBhc3NPd25QdHI8Q3Jvc3NUaHJl
YWRSZXNvdXJjZVJlc3BvbnNlRGEKICAgICBkYXRhLT5tX3dhc0FsdGVybmF0ZVByb3RvY29sQXZh
aWxhYmxlID0gbV93YXNBbHRlcm5hdGVQcm90b2NvbEF2YWlsYWJsZTsKICAgICBkYXRhLT5tX3dh
c0ZldGNoZWRWaWFQcm94eSA9IG1fd2FzRmV0Y2hlZFZpYVByb3h5OwogICAgIGRhdGEtPm1fcmVz
cG9uc2VUaW1lID0gbV9yZXNwb25zZVRpbWU7CisgICAgZGF0YS0+bV9kb3dubG9hZEZpbGVQYXRo
ID0gbV9kb3dubG9hZEZpbGVQYXRoOwogICAgIHJldHVybiBkYXRhOwogfQogCkBAIC01Myw2ICs2
Niw3IEBAIHZvaWQgUmVzb3VyY2VSZXNwb25zZTo6ZG9QbGF0Zm9ybUFkb3B0KFAKICAgICBtX3dh
c0FsdGVybmF0ZVByb3RvY29sQXZhaWxhYmxlID0gZGF0YS0+bV93YXNBbHRlcm5hdGVQcm90b2Nv
bEF2YWlsYWJsZTsKICAgICBtX3dhc0ZldGNoZWRWaWFQcm94eSA9IGRhdGEtPm1fd2FzRmV0Y2hl
ZFZpYVByb3h5OwogICAgIG1fcmVzcG9uc2VUaW1lID0gZGF0YS0+bV9yZXNwb25zZVRpbWU7Cisg
ICAgbV9kb3dubG9hZEZpbGVQYXRoID0gZGF0YS0+bV9kb3dubG9hZEZpbGVQYXRoOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hy
b21pdW0vUmVzb3VyY2VSZXNwb25zZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlc3BvbnNlLmgJKHJldmlzaW9uIDY5MTQxKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL1Jlc291cmNlUmVzcG9uc2UuaAkod29y
a2luZyBjb3B5KQpAQCAtOTYsNiArOTYsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICBkb3VibGUgcmVzcG9uc2VUaW1lKCkgY29uc3QgeyByZXR1cm4gbV9yZXNwb25zZVRpbWU7IH0K
ICAgICAgICAgdm9pZCBzZXRSZXNwb25zZVRpbWUoZG91YmxlIHJlc3BvbnNlVGltZSkgeyBtX3Jl
c3BvbnNlVGltZSA9IHJlc3BvbnNlVGltZTsgfQogCisgICAgICAgIC8vIEluZGljYXRlcyB0aGUg
bG9jYXRpb24gb2YgYSBkb3dubG9hZGVkIHJlc3BvbnNlIGlmIHRoZQorICAgICAgICAvLyBSZXNv
dXJjZVJlcXVlc3QgaGFkIHRoZSBkb3dubG9hZFRvRmlsZS9CbG9iIGZsYWcgc2V0IHRvIHRydWUu
CisgICAgICAgIC8vIFRoZSBmaWxlIHdpbGwgcmVtYWluIHZhbGlkIHVudGlsIHRoZSBSZXNvdXJj
ZUhhbmRsZSB1c2VkCisgICAgICAgIC8vIHRvIHJldHJpZXZlIHRoaXMgZmlsZSBoYXMgYmVlbiBk
ZWxldGVkLgorICAgICAgICBjb25zdCBTdHJpbmcmIGRvd25sb2FkRmlsZVBhdGgoKSBjb25zdDsK
KyAgICAgICAgdm9pZCBzZXREb3dubG9hZEZpbGVQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCk7CisK
ICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgUmVzb3VyY2VSZXNwb25zZUJhc2U7
CiAKQEAgLTE0Myw2ICsxNTAsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIFRo
ZSB0aW1lIGF0IHdoaWNoIHRoZSByZXNwb25zZSBoZWFkZXJzIHdlcmUgcmVjZWl2ZWQuICBGb3Ig
Y2FjaGVkCiAgICAgICAgIC8vIHJlc3BvbnNlcywgdGhpcyB0aW1lIGNvdWxkIGJlICJmYXIiIGlu
IHRoZSBwYXN0LgogICAgICAgICBkb3VibGUgbV9yZXNwb25zZVRpbWU7CisKKyAgICAgICAgLy8g
VGhlIHJlc3VsdGluZyBkb3dubG9hZGVkIGZpbGUgcGF0aCBpbiB0aGUgcmVxdWVzdC5kb3dubG9h
ZFRvRmlsZSBjYXNlLgorICAgICAgICBTdHJpbmcgbV9kb3dubG9hZEZpbGVQYXRoOwogICAgIH07
CiAKICAgICBzdHJ1Y3QgQ3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0YSA6IHB1YmxpYyBD
cm9zc1RocmVhZFJlc291cmNlUmVzcG9uc2VEYXRhQmFzZSB7CkBAIC0xNTUsNiArMTY1LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIG1fd2FzQWx0ZXJuYXRlUHJvdG9jb2xB
dmFpbGFibGU7CiAgICAgICAgIGJvb2wgbV93YXNGZXRjaGVkVmlhUHJveHk7CiAgICAgICAgIGRv
dWJsZSBtX3Jlc3BvbnNlVGltZTsKKyAgICAgICAgU3RyaW5nIG1fZG93bmxvYWRGaWxlUGF0aDsK
ICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3htbC9YTUxI
dHRwUmVxdWVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3Qu
Y3BwCShyZXZpc2lvbiA2OTE0MSkKKysrIFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTkzLDYgKzU5MywxMCBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0Ojpj
cmVhdGVSZXF1ZXN0KEV4Y2VwCiAgICAgaWYgKG1fcmVxdWVzdEhlYWRlcnMuc2l6ZSgpID4gMCkK
ICAgICAgICAgcmVxdWVzdC5hZGRIVFRQSGVhZGVyRmllbGRzKG1fcmVxdWVzdEhlYWRlcnMpOwog
CisjaWYgRU5BQkxFKFhIUl9SRVNQT05TRV9CTE9CKQorICAgIHJlcXVlc3Quc2V0RG93bmxvYWRB
c0Jsb2IobV9hc0Jsb2IpOworI2VuZGlmCisKICAgICBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyBv
cHRpb25zOwogICAgIG9wdGlvbnMuc2VuZExvYWRDYWxsYmFja3MgPSB0cnVlOwogICAgIG9wdGlv
bnMuc25pZmZDb250ZW50ID0gZmFsc2U7CkBAIC05NjIsMTAgKzk2Niw2IEBAIHZvaWQgWE1MSHR0
cFJlcXVlc3Q6OmRpZEZpbmlzaExvYWRpbmcodW4KICAgICBpZiAobV9kZWNvZGVyKQogICAgICAg
ICBtX3Jlc3BvbnNlVGV4dCArPSBtX2RlY29kZXItPmZsdXNoKCk7CiAKLSNpZiBFTkFCTEUoWEhS
X1JFU1BPTlNFX0JMT0IpCi0gICAgLy8gRklYTUU6IFNldCBtX3Jlc3BvbnNlQmxvYiB0byBzb21l
dGhpbmcgaGVyZSBpbiB0aGUgbV9hc0Jsb2IgY2FzZS4KLSNlbmRpZgotCiAjaWYgRU5BQkxFKElO
U1BFQ1RPUikKICAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yID0gc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkpCiAgICAgICAgIGluc3Bl
Y3Rvci0+cmVzb3VyY2VSZXRyaWV2ZWRCeVhNTEh0dHBSZXF1ZXN0KGlkZW50aWZpZXIsIG1fcmVz
cG9uc2VUZXh0LCBtX3VybCwgbV9sYXN0U2VuZFVSTCwgbV9sYXN0U2VuZExpbmVOdW1iZXIpOwpA
QCAtOTgxLDYgKzk4MSwxNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRGaW5pc2hMb2FkaW5n
KHVuCiAgICAgICAgIGRyb3BQcm90ZWN0aW9uKCk7CiB9CiAKK3ZvaWQgWE1MSHR0cFJlcXVlc3Q6
OmRpZEZpbmlzaExvYWRpbmdCbG9iKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgUGFzc1JlZlB0
cjxCbG9iPiBibG9iKQoreworI2lmIEVOQUJMRShYSFJfUkVTUE9OU0VfQkxPQikKKyAgICBpZiAo
IW1fZXJyb3IpCisgICAgICAgIG1fcmVzcG9uc2VCbG9iID0gYmxvYjsKKyAgICBkaWRGaW5pc2hM
b2FkaW5nKGlkZW50aWZpZXIpOworI2Vsc2UKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNl
bmRpZgorfQorCiB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25n
IGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KQog
ewogICAgIGlmICghbV91cGxvYWQpCkBAIC0xMDExLDEzICsxMDIyLDI5IEBAIHZvaWQgWE1MSHR0
cFJlcXVlc3Q6OmRpZFJlY2VpdmVBdXRoZW50aWMKIAogdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlk
UmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbikKIHsKKyAgICBkaWRSZWNlaXZl
RGF0YUNvbW1vbihmYWxzZSwgZGF0YSwgbGVuKTsKK30KKwordm9pZCBYTUxIdHRwUmVxdWVzdDo6
ZGlkUmVjZWl2ZUJsb2JEYXRhKGludCBsZW4pCit7CisjaWYgRU5BQkxFKFhIUl9SRVNQT05TRV9C
TE9CKQorICAgIEFTU0VSVChsZW4gPj0gMCk7CisgICAgZGlkUmVjZWl2ZURhdGFDb21tb24odHJ1
ZSwgMCwgbGVuKTsKKyNlbHNlCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKK30K
Kwordm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlkUmVjZWl2ZURhdGFDb21tb24oYm9vbCBpc0Jsb2JE
YXRhLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuKQorewogICAgIGlmIChtX2Vycm9yKQogICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAobV9zdGF0ZSA8IEhFQURFUlNfUkVDRUlWRUQpCiAgICAg
ICAgIGNoYW5nZVN0YXRlKEhFQURFUlNfUkVDRUlWRUQpOwogCi0gICAgaWYgKCFtX2RlY29kZXIp
IHsKKyAgICBpZiAoZGF0YSAmJiAhbV9kZWNvZGVyKSB7CisgICAgICAgIEFTU0VSVCghaXNCbG9i
RGF0YSk7CiAgICAgICAgIGlmICghbV9yZXNwb25zZUVuY29kaW5nLmlzRW1wdHkoKSkKICAgICAg
ICAgICAgIG1fZGVjb2RlciA9IFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZSgidGV4dC9wbGFp
biIsIG1fcmVzcG9uc2VFbmNvZGluZyk7CiAgICAgICAgIC8vIGFsbG93IFRleHRSZXNvdXJjZURl
Y29kZXIgdG8gbG9vayBpbnNpZGUgdGhlIG1fcmVzcG9uc2UgaWYgaXQncyBYTUwgb3IgSFRNTApA
QCAtMTAzMSwxMyArMTA1OCwxNSBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRSZWNlaXZlRGF0
YShjb25zCiAgICAgICAgICAgICBtX2RlY29kZXIgPSBUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVh
dGUoInRleHQvcGxhaW4iLCAiVVRGLTgiKTsKICAgICB9CiAKLSAgICBpZiAoIWxlbikKLSAgICAg
ICAgcmV0dXJuOworICAgIGlmICghaXNCbG9iRGF0YSkgeworICAgICAgICBpZiAoIWxlbikKKyAg
ICAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChsZW4gPT0gLTEpCi0gICAgICAgIGxlbiA9IHN0
cmxlbihkYXRhKTsKKyAgICAgICAgaWYgKGxlbiA9PSAtMSkgCisgICAgICAgICAgICBsZW4gPSBz
dHJsZW4oZGF0YSk7CiAKLSAgICBtX3Jlc3BvbnNlVGV4dCArPSBtX2RlY29kZXItPmRlY29kZShk
YXRhLCBsZW4pOworICAgICAgICBtX3Jlc3BvbnNlVGV4dCArPSBtX2RlY29kZXItPmRlY29kZShk
YXRhLCBsZW4pOworICAgIH0KIAogICAgIGlmICghbV9lcnJvcikgewogICAgICAgICBsb25nIGxv
bmcgZXhwZWN0ZWRMZW5ndGggPSBtX3Jlc3BvbnNlLmV4cGVjdGVkQ29udGVudExlbmd0aCgpOwpJ
bmRleDogV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3htbC9YTUxIdHRwUmVxdWVzdC5oCShyZXZpc2lvbiA2OTE0MSkKKysrIFdlYkNvcmUveG1sL1hN
TEh0dHBSZXF1ZXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNywxMSArMTI3LDE1IEBAIHByaXZh
dGU6CiAgICAgdmlydHVhbCB2b2lkIGRpZFNlbmREYXRhKHVuc2lnbmVkIGxvbmcgbG9uZyBieXRl
c1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpOwogICAgIHZpcnR1
YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogICAg
IHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3Ro
UmVjZWl2ZWQpOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQmxvYkRhdGEoaW50IGxlbmd0
aFJlY2VpdmVkKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBs
b25nIGlkZW50aWZpZXIpOworICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nQmxvYih1
bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIFBhc3NSZWZQdHI8QmxvYj4gYmxvYik7CiAgICAgdmly
dHVhbCB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpOwogICAgIHZpcnR1YWwgdm9p
ZCBkaWRGYWlsUmVkaXJlY3RDaGVjaygpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQXV0
aGVudGljYXRpb25DYW5jZWxsYXRpb24oY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogCisgICAg
dm9pZCBkaWRSZWNlaXZlRGF0YUNvbW1vbihib29sIGlzQmxvYkRhdGEsIGNvbnN0IGNoYXIqIGRh
dGEsIGludCBsZW5ndGhSZWNlaXZlZCk7CisKICAgICBTdHJpbmcgcmVzcG9uc2VNSU1FVHlwZSgp
IGNvbnN0OwogICAgIGJvb2wgcmVzcG9uc2VJc1hNTCgpIGNvbnN0OwogCkluZGV4OiBXZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDY5MTY2KQorKysgV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBACisyMDEwLTEwLTA1ICBNaWNoYWVsIE5vcmRtYW4gIDxt
aWNoYWVsbkBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBnZXR0aW5nIHRoZSByZXN1bHQgb2YgYSByZXNv
dXJjZSByZXF1ZXN0IGFzIGEgYmxvYi4KKyAgICAgICAgSW4gQ2hyb21lLCB0aGlzIGZlYXR1cmUg
aXMgaW1wbGVtZW50ZWQgaW4gdGVybXMgb2YgdGhlICdkb3dubG9hZFRvRmlsZScKKyAgICAgICAg
ZmVhdHVyZSBvZiB0aGUgbmV0d29yayBzdGFjay4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0NzIyCisKKyAgICAgICAgKiBzcmMvUmVzb3VyY2VIYW5k
bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6UmVzb3Vy
Y2VIYW5kbGVJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUludGVy
bmFsOjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5k
bGVJbnRlcm5hbDo6ZGlkRG93bmxvYWREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
SGFuZGxlSW50ZXJuYWw6OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VIYW5kbGVJbnRlcm5hbDo6ZGV0ZXJtaW5lQ29udGVudFR5cGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25v
dXNseSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3lu
Y2hyb25vdXNseUFzQmxvYik6CisgICAgICAgICogc3JjL1dlYlVSTFJlcXVlc3QuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJVUkxSZXF1ZXN0UHJpdmF0ZUltcGw6OldlYlVSTFJlcXVlc3RQcml2
YXRlSW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlcXVlc3Q6OmRvd25sb2FkVG9GaWxl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVxdWVzdDo6c2V0RG93bmxvYWRUb0ZpbGUpOgor
ICAgICAgICAqIHNyYy9XZWJVUkxSZXF1ZXN0UHJpdmF0ZS5oOgorICAgICAgICAoV2ViS2l0OjpX
ZWJVUkxSZXF1ZXN0UHJpdmF0ZTo6V2ViVVJMUmVxdWVzdFByaXZhdGUpOgorICAgICAgICAqIHNy
Yy9XZWJVUkxSZXNwb25zZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlc3BvbnNlUHJp
dmF0ZUltcGw6OldlYlVSTFJlc3BvbnNlUHJpdmF0ZUltcGwpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJVUkxSZXNwb25zZTo6ZG93bmxvYWRGaWxlUGF0aCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVS
TFJlc3BvbnNlOjpzZXREb3dubG9hZEZpbGVQYXRoKToKKyAgICAgICAgKiBzcmMvV2ViVVJMUmVz
cG9uc2VQcml2YXRlLmg6CisKIDIwMTAtMDktMjkgIEFscGhhIExhbSAgPGhjbGFtQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBKYW1lcyBSb2JpbnNvbi4KSW5kZXg6IFdlYktp
dC9jaHJvbWl1bS9zcmMvUmVzb3VyY2VIYW5kbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9j
aHJvbWl1bS9zcmMvUmVzb3VyY2VIYW5kbGUuY3BwCShyZXZpc2lvbiA2OTE0MSkKKysrIFdlYktp
dC9jaHJvbWl1bS9zcmMvUmVzb3VyY2VIYW5kbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2
ICszMiw3IEBACiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKIAogI2luY2x1ZGUgIkNocm9t
aXVtQnJpZGdlLmgiCisjaW5jbHVkZSAiSFRUUFBhcnNlcnMuaCIKICNpbmNsdWRlICJSZXNvdXJj
ZUhhbmRsZUNsaWVudC5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgogI2luY2x1ZGUg
IlNoYXJlZEJ1ZmZlci5oIgpAQCAtNTksNiArNjAsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9v
d25lcigwKQogICAgICAgICAsIG1fY2xpZW50KGNsaWVudCkKICAgICAgICAgLCBtX3N0YXRlKENv
bm5lY3Rpb25TdGF0ZU5ldykKKyAgICAgICAgLCBtX2Rvd25sb2FkZWRGaWxlTGVuZ3RoKDApCiAg
ICAgewogICAgIH0KIApAQCAtNzMsMTAgKzc1LDE5IEBAIHB1YmxpYzoKICAgICAgICAgV2ViVVJM
TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25n
IHRvdGFsQnl0ZXNUb0JlU2VudCk7CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25z
ZShXZWJVUkxMb2FkZXIqLCBjb25zdCBXZWJVUkxSZXNwb25zZSYpOwogICAgIHZpcnR1YWwgdm9p
ZCBkaWRSZWNlaXZlRGF0YShXZWJVUkxMb2FkZXIqLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgZGF0
YUxlbmd0aCk7CisgICAgdmlydHVhbCB2b2lkIGRpZERvd25sb2FkRGF0YShXZWJVUkxMb2FkZXIq
LCBpbnQgZGF0YUxlbmd0aCk7CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVDYWNoZWRNZXRh
ZGF0YShXZWJVUkxMb2FkZXIqLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgZGF0YUxlbmd0aCk7CiAg
ICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoV2ViVVJMTG9hZGVyKiwgZG91YmxlIGZp
bmlzaFRpbWUpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKFdlYlVSTExvYWRlciosIGNvbnN0
IFdlYlVSTEVycm9yJik7CiAKKyAgICBzdGF0aWMgU3RyaW5nIGRldGVybWluZUNvbnRlbnRUeXBl
KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iPiBs
b2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgU3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlh
bHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBSZXNvdXJjZUVycm9yJiBlcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPGNo
YXI+KiBkYXRhKTsKKwogICAgIGVudW0gQ29ubmVjdGlvblN0YXRlIHsKICAgICAgICAgQ29ubmVj
dGlvblN0YXRlTmV3LAogICAgICAgICBDb25uZWN0aW9uU3RhdGVTdGFydGVkLApAQCAtOTEsNiAr
MTAyLDkgQEAgcHVibGljOgogICAgIFJlc291cmNlSGFuZGxlKiBtX293bmVyOwogICAgIFJlc291
cmNlSGFuZGxlQ2xpZW50KiBtX2NsaWVudDsKICAgICBPd25QdHI8V2ViVVJMTG9hZGVyPiBtX2xv
YWRlcjsKKyAgICBTdHJpbmcgbV9kb3dubG9hZGVkRmlsZVBhdGg7CisgICAgU3RyaW5nIG1fZG93
bmxvYWRlZEZpbGVDb250ZW50VHlwZTsKKyAgICBsb25nIGxvbmcgbV9kb3dubG9hZGVkRmlsZUxl
bmd0aDsKIAogICAgIC8vIFVzZWQgZm9yIHNhbml0eSBjaGVja2luZyB0byBtYWtlIHN1cmUgd2Ug
ZG9uJ3QgZXhwZXJpZW5jZSBpbGxlZ2FsIHN0YXRlCiAgICAgLy8gdHJhbnNpdGlvbnMuCkBAIC0x
NTYsNiArMTcwLDEwIEBAIHZvaWQgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6ZGlkUmVjZWl2ZVIK
ICAgICBpZiAoIWlzTXVsdGlwYXJ0ICYmICFpc1ZhbGlkU3RhdGVUcmFuc2l0aW9uKQogICAgICAg
ICBDUkFTSCgpOwogICAgIG1fc3RhdGUgPSBDb25uZWN0aW9uU3RhdGVSZWNlaXZlZFJlc3BvbnNl
OworICAgIGlmIChtX3JlcXVlc3QuZG93bmxvYWRUb0ZpbGUoKSkgeworICAgICAgICBtX2Rvd25s
b2FkZWRGaWxlUGF0aCA9IHJlc3BvbnNlLnRvUmVzb3VyY2VSZXNwb25zZSgpLmRvd25sb2FkRmls
ZVBhdGgoKTsKKyAgICAgICAgbV9kb3dubG9hZGVkRmlsZUNvbnRlbnRUeXBlID0gZGV0ZXJtaW5l
Q29udGVudFR5cGUocmVzcG9uc2UudG9SZXNvdXJjZVJlc3BvbnNlKCkpOworICAgIH0KICAgICBt
X2NsaWVudC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKG1fb3duZXIsIHJlc3BvbnNlLnRvUmVzb3VyY2VS
ZXNwb25zZSgpKTsKIH0KIApAQCAtMTczLDYgKzE5MSwxNyBAQCB2b2lkIFJlc291cmNlSGFuZGxl
SW50ZXJuYWw6OmRpZFJlY2VpdmVECiAgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVEYXRhKG1fb3du
ZXIsIGRhdGEsIGRhdGFMZW5ndGgsIGRhdGFMZW5ndGgpOwogfQogCit2b2lkIFJlc291cmNlSGFu
ZGxlSW50ZXJuYWw6OmRpZERvd25sb2FkRGF0YShXZWJVUkxMb2FkZXIqLCBpbnQgZGF0YUxlbmd0
aCkKK3sKKyAgICBBU1NFUlQobV9jbGllbnQpOworICAgIEFTU0VSVChtX3JlcXVlc3QuZG93bmxv
YWRUb0ZpbGUoKSk7CisgICAgaWYgKG1fc3RhdGUgIT0gQ29ubmVjdGlvblN0YXRlUmVjZWl2ZWRS
ZXNwb25zZSAmJiBtX3N0YXRlICE9IENvbm5lY3Rpb25TdGF0ZVJlY2VpdmluZ0RhdGEpCisgICAg
ICAgIENSQVNIKCk7CisgICAgbV9zdGF0ZSA9IENvbm5lY3Rpb25TdGF0ZVJlY2VpdmluZ0RhdGE7
CisgICAgbV9kb3dubG9hZGVkRmlsZUxlbmd0aCArPSBkYXRhTGVuZ3RoOworICAgIG1fY2xpZW50
LT5kaWRSZWNlaXZlQmxvYkRhdGEobV9vd25lciwgZGF0YUxlbmd0aCk7Cit9CisKIHZvaWQgUmVz
b3VyY2VIYW5kbGVJbnRlcm5hbDo6ZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKFdlYlVSTExvYWRl
ciosIGNvbnN0IGNoYXIqIGRhdGEsIGludCBkYXRhTGVuZ3RoKQogewogICAgIEFTU0VSVChtX2Ns
aWVudCk7CkBAIC0xODgsNyArMjE3LDE4IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6
ZGlkRmluaXNoTG8KICAgICBpZiAobV9zdGF0ZSAhPSBDb25uZWN0aW9uU3RhdGVSZWNlaXZlZFJl
c3BvbnNlICYmIG1fc3RhdGUgIT0gQ29ubmVjdGlvblN0YXRlUmVjZWl2aW5nRGF0YSkKICAgICAg
ICAgQ1JBU0goKTsKICAgICBtX3N0YXRlID0gQ29ubmVjdGlvblN0YXRlRmluaXNoZWRMb2FkaW5n
OwotICAgIG1fY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKG1fb3duZXIsIGZpbmlzaFRpbWUpOwor
ICAgIGlmIChtX3JlcXVlc3QuZG93bmxvYWRBc0Jsb2IoKSkgeworICAgICAgICBBU1NFUlQobV9y
ZXF1ZXN0LmRvd25sb2FkVG9GaWxlKCkpOyAvLyBUb0ZpbGUgYW5kIEFzQmxvYiBhcmUgb25lIGFu
ZCB0aGUgc2FtZSBmb3Igbm93LgorICAgICAgICBSZWZQdHI8QmxvYj4gZGF0YUFzQmxvYjsKKyAg
ICAgICAgaWYgKCFtX2Rvd25sb2FkZWRGaWxlUGF0aC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
IE93blB0cjxCbG9iRGF0YT4gYmxvYkRhdGEgPSBCbG9iRGF0YTo6Y3JlYXRlKCk7CisgICAgICAg
ICAgICBibG9iRGF0YS0+c2V0Q29udGVudFR5cGUobV9kb3dubG9hZGVkRmlsZUNvbnRlbnRUeXBl
KTsKKyAgICAgICAgICAgIGJsb2JEYXRhLT5hcHBlbmRGaWxlKG1fZG93bmxvYWRlZEZpbGVQYXRo
KTsKKyAgICAgICAgICAgIGRhdGFBc0Jsb2IgPSBCbG9iOjpjcmVhdGUoYmxvYkRhdGEucmVsZWFz
ZSgpLCBtX2Rvd25sb2FkZWRGaWxlTGVuZ3RoKTsKKyAgICAgICAgfQorICAgICAgICBtX2NsaWVu
dC0+ZGlkRmluaXNoTG9hZGluZ0Jsb2IobV9vd25lciwgZmluaXNoVGltZSwgZGF0YUFzQmxvYik7
CisgICAgfSBlbHNlCisgICAgICAgIG1fY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKG1fb3duZXIs
IGZpbmlzaFRpbWUpOwogfQogCiB2b2lkIFJlc291cmNlSGFuZGxlSW50ZXJuYWw6OmRpZEZhaWwo
V2ViVVJMTG9hZGVyKiwgY29uc3QgV2ViVVJMRXJyb3ImIGVycm9yKQpAQCAtMTk4LDYgKzIzOCw1
MSBAQCB2b2lkIFJlc291cmNlSGFuZGxlSW50ZXJuYWw6OmRpZEZhaWwoV2ViCiAgICAgbV9jbGll
bnQtPmRpZEZhaWwobV9vd25lciwgZXJyb3IpOwogfQogCisvLyBzdGF0aWMKK1N0cmluZyBSZXNv
dXJjZUhhbmRsZUludGVybmFsOjpkZXRlcm1pbmVDb250ZW50VHlwZShjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBpZiAocmVzcG9uc2UuaXNIVFRQKCkpCisgICAgICAg
IHJldHVybiBleHRyYWN0TUlNRVR5cGVGcm9tTWVkaWFUeXBlKHJlc3BvbnNlLmh0dHBIZWFkZXJG
aWVsZCgiQ29udGVudC1UeXBlIikpOworICAgIHJldHVybiByZXNwb25zZS5taW1lVHlwZSgpOwor
fQorCisvLyBzdGF0aWMKK1Bhc3NSZWZQdHI8QmxvYj4gUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6
bG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RvcmVk
Q3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VFcnJvciYg
ZXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VmVjdG9yPGNoYXI+KiBkYXRhKQoreworICAgIE93blB0cjxXZWJVUkxMb2FkZXI+IGxvYWRlcih3
ZWJLaXRDbGllbnQoKS0+Y3JlYXRlVVJMTG9hZGVyKCkpOworICAgIEFTU0VSVChsb2FkZXIuZ2V0
KCkpOworCisgICAgV3JhcHBlZFJlc291cmNlUmVxdWVzdCByZXF1ZXN0SW4ocmVxdWVzdCk7Cisg
ICAgcmVxdWVzdEluLnNldEFsbG93U3RvcmVkQ3JlZGVudGlhbHMoc3RvcmVkQ3JlZGVudGlhbHMg
PT0gQWxsb3dTdG9yZWRDcmVkZW50aWFscyk7CisgICAgV3JhcHBlZFJlc291cmNlUmVzcG9uc2Ug
cmVzcG9uc2VPdXQocmVzcG9uc2UpOworICAgIFdlYlVSTEVycm9yIGVycm9yT3V0OworICAgIFdl
YkRhdGEgZGF0YU91dDsKKyAgICBSZWZQdHI8QmxvYj4gZGF0YUFzQmxvYjsKKyAgICBsb25nIGxv
bmcgbGVuZ3RoT3V0ID0gNzc3NzsKKworICAgIC8vIFRPRE8obWljaGFlbG4pOiBTb21lIHdheSB0
byBnZXQgdGhlIGxlbmd0aE91dCBpbiB0aGUgYXNGaWxlIGNhc2UuCisgICAgbG9hZGVyLT5sb2Fk
U3luY2hyb25vdXNseShyZXF1ZXN0SW4sIHJlc3BvbnNlT3V0LCBlcnJvck91dCwgZGF0YU91dCk7
CisKKyAgICBlcnJvciA9IGVycm9yT3V0OworICAgIGlmICghcmVxdWVzdC5kb3dubG9hZEFzQmxv
YigpKSB7CisgICAgICAgIEFTU0VSVChkYXRhKTsKKyAgICAgICAgZGF0YS0+Y2xlYXIoKTsKKyAg
ICAgICAgZGF0YS0+YXBwZW5kKGRhdGFPdXQuZGF0YSgpLCBkYXRhT3V0LnNpemUoKSk7CisgICAg
fSBlbHNlIGlmICghcmVzcG9uc2UuZG93bmxvYWRGaWxlUGF0aCgpLmlzRW1wdHkoKSkgeworICAg
ICAgICBPd25QdHI8QmxvYkRhdGE+IGJsb2JEYXRhID0gQmxvYkRhdGE6OmNyZWF0ZSgpOworICAg
ICAgICBibG9iRGF0YS0+c2V0Q29udGVudFR5cGUoZGV0ZXJtaW5lQ29udGVudFR5cGUocmVzcG9u
c2UpKTsKKyAgICAgICAgYmxvYkRhdGEtPmFwcGVuZEZpbGUocmVzcG9uc2UuZG93bmxvYWRGaWxl
UGF0aCgpKTsKKyAgICAgICAgZGF0YUFzQmxvYiA9IEJsb2I6OmNyZWF0ZShibG9iRGF0YS5yZWxl
YXNlKCksIGxlbmd0aE91dCk7CisgICAgfQorICAgIHJldHVybiBkYXRhQXNCbG9iOworfQorCisK
IC8vIFJlc291cmNlSGFuZGxlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogUmVzb3VyY2VIYW5kbGU6OlJlc291cmNlSGFuZGxl
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwKQEAgLTI5NSwyMCArMzgwLDIwIEBAIHZv
aWQgUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm8KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2Us
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3Rvcjxj
aGFyPiYgZGF0YSkKIHsKLSAgICBPd25QdHI8V2ViVVJMTG9hZGVyPiBsb2FkZXIod2ViS2l0Q2xp
ZW50KCktPmNyZWF0ZVVSTExvYWRlcigpKTsKLSAgICBBU1NFUlQobG9hZGVyLmdldCgpKTsKLQot
ICAgIFdyYXBwZWRSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdEluKHJlcXVlc3QpOwotICAgIHJlcXVl
c3RJbi5zZXRBbGxvd1N0b3JlZENyZWRlbnRpYWxzKHN0b3JlZENyZWRlbnRpYWxzID09IEFsbG93
U3RvcmVkQ3JlZGVudGlhbHMpOwotICAgIFdyYXBwZWRSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNl
T3V0KHJlc3BvbnNlKTsKLSAgICBXZWJVUkxFcnJvciBlcnJvck91dDsKLSAgICBXZWJEYXRhIGRh
dGFPdXQ7Ci0KLSAgICBsb2FkZXItPmxvYWRTeW5jaHJvbm91c2x5KHJlcXVlc3RJbiwgcmVzcG9u
c2VPdXQsIGVycm9yT3V0LCBkYXRhT3V0KTsKKyAgICBBU1NFUlQoIXJlcXVlc3QuZG93bmxvYWRB
c0Jsb2IoKSk7CisgICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6bG9hZFJlc291cmNlU3luY2hy
b25vdXNseShjb250ZXh0LCByZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFscywgZXJyb3IsIHJlc3Bv
bnNlLCAmZGF0YSk7Cit9CiAKLSAgICBlcnJvciA9IGVycm9yT3V0OwotICAgIGRhdGEuY2xlYXIo
KTsKLSAgICBkYXRhLmFwcGVuZChkYXRhT3V0LmRhdGEoKSwgZGF0YU91dC5zaXplKCkpOworLy8g
c3RhdGljCitQYXNzUmVmUHRyPEJsb2I+IFJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VTeW5j
aHJvbm91c2x5QXNCbG9iKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdG9yZWRD
cmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VFcnJvciYgZXJyb3IsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlUmVzcG9uc2UmIHJlc3Bv
bnNlKQoreworICAgIEFTU0VSVChyZXF1ZXN0LmRvd25sb2FkQXNCbG9iKCkpOworICAgIHJldHVy
biBSZXNvdXJjZUhhbmRsZUludGVybmFsOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KGNvbnRl
eHQsIHJlcXVlc3QsIHN0b3JlZENyZWRlbnRpYWxzLCBlcnJvciwgcmVzcG9uc2UsIDApOwogfQog
CiAvLyBzdGF0aWMKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVxdWVzdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXF1ZXN0LmNwcAkocmV2
aXNpb24gNjkxNDEpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlVSTFJlcXVlc3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1f
cmVzb3VyY2VSZXF1ZXN0ID0gJm1fcmVzb3VyY2VSZXF1ZXN0QWxsb2NhdGlvbjsKICAgICAgICAg
bV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzID0gcC0+bV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzOwot
ICAgICAgICBtX2Rvd25sb2FkVG9GaWxlID0gcC0+bV9kb3dubG9hZFRvRmlsZTsKICAgICB9CiAK
ICAgICB2aXJ0dWFsIHZvaWQgZGlzcG9zZSgpIHsgZGVsZXRlIHRoaXM7IH0KQEAgLTI1OSwxMiAr
MjU4LDEyIEBAIHZvaWQgV2ViVVJMUmVxdWVzdDo6c2V0QXBwQ2FjaGVIb3N0SUQoaW4KIAogYm9v
bCBXZWJVUkxSZXF1ZXN0Ojpkb3dubG9hZFRvRmlsZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1f
cHJpdmF0ZS0+bV9kb3dubG9hZFRvRmlsZTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5tX3Jlc291
cmNlUmVxdWVzdC0+ZG93bmxvYWRUb0ZpbGUoKTsKIH0KIAogdm9pZCBXZWJVUkxSZXF1ZXN0Ojpz
ZXREb3dubG9hZFRvRmlsZShib29sIGRvd25sb2FkVG9GaWxlKQogewotICAgIG1fcHJpdmF0ZS0+
bV9kb3dubG9hZFRvRmlsZSA9IGRvd25sb2FkVG9GaWxlOworICAgIG1fcHJpdmF0ZS0+bV9yZXNv
dXJjZVJlcXVlc3QtPnNldERvd25sb2FkVG9GaWxlKGRvd25sb2FkVG9GaWxlKTsKIH0KIAogUmVz
b3VyY2VSZXF1ZXN0JiBXZWJVUkxSZXF1ZXN0Ojp0b011dGFibGVSZXNvdXJjZVJlcXVlc3QoKQpJ
bmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXF1ZXN0UHJpdmF0ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVxdWVzdFByaXZhdGUuaAkocmV2aXNp
b24gNjkxNDEpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlVSTFJlcXVlc3RQcml2YXRlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM5LDE3ICszOSwxMyBAQCBjbGFzcyBXZWJVUkxSZXF1ZXN0UHJp
dmF0ZSB7CiBwdWJsaWM6CiAgICAgV2ViVVJMUmVxdWVzdFByaXZhdGUoKQogICAgICAgICA6IG1f
cmVzb3VyY2VSZXF1ZXN0KDApCi0gICAgICAgICwgbV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzKHRy
dWUpCi0gICAgICAgICwgbV9kb3dubG9hZFRvRmlsZShmYWxzZSkgeyB9CisgICAgICAgICwgbV9h
bGxvd1N0b3JlZENyZWRlbnRpYWxzKHRydWUpIHsgfQogCiAgICAgLy8gQ2FsbGVkIGJ5IFdlYlVS
TFJlcXVlc3Qgd2hlbiBpdCBubyBsb25nZXIgbmVlZHMgdGhpcyBvYmplY3QuCiAgICAgdmlydHVh
bCB2b2lkIGRpc3Bvc2UoKSA9IDA7CiAKICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QqIG1f
cmVzb3VyY2VSZXF1ZXN0OwogICAgIGJvb2wgbV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzOwotCi0g
ICAgLy8gRklYTUU6IE1vdmUgdGhpcyB0byBSZXNvdXJjZVJlcXVlc3Qgb25jZSB3ZSBoYXZlIGFu
IGludGVybmFsIGNvbnN1bWVyLgotICAgIGJvb2wgbV9kb3dubG9hZFRvRmlsZTsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXNw
b25zZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXNwb25z
ZS5jcHAJKHJldmlzaW9uIDY5MTQxKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXNw
b25zZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDYgQEAgcHVibGljOgogICAgICAg
ICA6IG1fcmVzb3VyY2VSZXNwb25zZUFsbG9jYXRpb24oKnAtPm1fcmVzb3VyY2VSZXNwb25zZSkK
ICAgICB7CiAgICAgICAgIG1fcmVzb3VyY2VSZXNwb25zZSA9ICZtX3Jlc291cmNlUmVzcG9uc2VB
bGxvY2F0aW9uOwotICAgICAgICBtX2Rvd25sb2FkRmlsZVBhdGggPSBwLT5tX2Rvd25sb2FkRmls
ZVBhdGg7CiAgICAgfQogCiAgICAgdmlydHVhbCB2b2lkIGRpc3Bvc2UoKSB7IGRlbGV0ZSB0aGlz
OyB9CkBAIC0zNzUsMTIgKzM3NCwxMiBAQCB2b2lkIFdlYlVSTFJlc3BvbnNlOjpzZXRJc011bHRp
cGFydFBheWxvCiAKIFdlYlN0cmluZyBXZWJVUkxSZXNwb25zZTo6ZG93bmxvYWRGaWxlUGF0aCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9kb3dubG9hZEZpbGVQYXRoOworICAg
IHJldHVybiBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZS0+ZG93bmxvYWRGaWxlUGF0aCgp
OwogfQogCiB2b2lkIFdlYlVSTFJlc3BvbnNlOjpzZXREb3dubG9hZEZpbGVQYXRoKGNvbnN0IFdl
YlN0cmluZyYgZG93bmxvYWRGaWxlUGF0aCkKIHsKLSAgICBtX3ByaXZhdGUtPm1fZG93bmxvYWRG
aWxlUGF0aCA9IGRvd25sb2FkRmlsZVBhdGg7CisgICAgbV9wcml2YXRlLT5tX3Jlc291cmNlUmVz
cG9uc2UtPnNldERvd25sb2FkRmlsZVBhdGgoZG93bmxvYWRGaWxlUGF0aCk7CiB9CiAKIHZvaWQg
V2ViVVJMUmVzcG9uc2U6OmFzc2lnbihXZWJVUkxSZXNwb25zZVByaXZhdGUqIHApCkluZGV4OiBX
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlVSTFJlc3BvbnNlUHJpdmF0ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVzcG9uc2VQcml2YXRlLmgJKHJldmlzaW9uIDY5
MTQxKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXNwb25zZVByaXZhdGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNDYsOSArNDYsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRp
c3Bvc2UoKSA9IDA7CiAKICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlKiBtX3Jlc291cmNl
UmVzcG9uc2U7Ci0KLSAgICAvLyBGSVhNRTogTW92ZSB0aGlzIHRvIFJlc291cmNlUmVzcG9uc2Ug
b25jZSB3ZSBoYXZlIGFuIGludGVybmFsIGNvbnN1bWVyLgotICAgIFdlYlN0cmluZyBtX2Rvd25s
b2FkRmlsZVBhdGg7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70005</attachid>
            <date>2010-10-06 16:28:02 -0700</date>
            <delta_ts>2010-10-07 19:49:29 -0700</delta_ts>
            <desc>downloadAsBlob</desc>
            <filename>downloadAsBlob4.txt</filename>
            <type>text/plain</type>
            <size>65757</size>
            <attacher name="Michael Nordman">michaeln</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTI0MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTA1IEBACisyMDEwLTEwLTA1ICBNaWNoYWVsIE5vcmRtYW4gIDxtaWNoYWVsbkBn
b29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZCBzdXBwb3J0IGZvciBnZXR0aW5nIHRoZSByZXN1bHQgb2YgYSByZXNvdXJjZSByZXF1
ZXN0IGFzIGEgYmxvYiwKKyAgICAgICAgYW5kIHVzZSB0aGF0IGNhcGFiaWxpdHkgaW4gc3VwcG9y
dCBvZiBYbWxIdHRwUmVxdWVzdC5yZXNwb25zZUJsb2IuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDcyMgorICAgICAgICAqIFJlc291cmNlSGFuZGxl
IGtub3dzIGhvdyB0byBkZWxpdmVyIGEgcmVzcG9uc2UgYXMgYSBibG9iLiBUbyBhc2sgaXQgdG8g
ZG8gc28sCisgICAgICAgICAgY2FsbCByZXF1ZXN0LnNldERvd25sb2FkQXNCbG9iKHRydWUpIHBy
aW9yIHRvIHN0YXJ0aW5nIGFuIGFzeW5jIFJlc291cmNlSGFuZGxlLAorICAgICAgICAgIG9yIGNh
bGwgbG9hZFJlc291cmNlU3luY2hyb25vdXNseUFzQmxvYigpIGZvciB0aGUgc3luYyBjYXNlLgor
ICAgICAgICAqIFJlc291cmNlSGFuZGxlQ2xpZW50IGhhcyBuZXcgaW50ZXJmYWNlcyBmb3IgdXNl
IGluIHRoZSBhc3luYyBjYXNlLgorICAgICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVC
bG9iRGF0YShSZXNvdXJjZUhhbmRsZSosIGludCk7ICAvLyBubyBkYXRhIHB0ciBpcyBwcm92aWRl
ZAorICAgICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmdCbG9iKFJlc291cmNl
SGFuZGxlKiwgZG91YmxlIC8qZmluaXNoVGltZSovLCBQYXNzUmVmUHRyPEJsb2I+KTsKKyAgICAg
ICAgKiBUaHJlYWRhYmxlTG9hZGVyIGFsc28ga25vd3MgaG93IHRvIGRlbGl2ZXIgYSByZXNwb25z
ZSBhcyBhIGJsb2I7IGFuZAorICAgICAgICAgIHNpbWlsYXJseSwgdGhlIFRocmVhZGFibGVMb2Fk
ZXJDbGllbnQgaGFzICBncm93biB0d28gbmV3IGNhbGxiYWNrIG1ldGhvZHMuCisgICAgICAgICog
RnJhbWVMb2FkZXIgaGFzIGFsc28gZ3Jvd24gYSBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5QXNC
bG9iKCkgbWV0aG9kLgorICAgICAgICAqIFhtbEh0dHBSZXF1ZXN0IGlzIGEgVGhyZWFkYWJsZUxv
YWRlckNsaWVudCB3aGljaCB1c2VzIHJlcXVlc3Quc2V0RG93bmxvYWRBc0Jsb2IoKSBhbmQKKyAg
ICAgICAgICByZWNlaXZlcyB0aGUgcmVzdWx0IGluIGRpZEZpbmlzaExvYWRpbmdCbG9iKCkuCisg
ICAgICAgICogVGhlcmUncyBhIGZhaXIgYW1vdW50IG9mIG1lY2hhbmljYWwgcGx1bWJpbmcgdGhy
b3VnaG91dCAidGhlIGxvYWRlciIgdG8gZ2V0IHRoZSBjbGllbnQKKyAgICAgICAgICBtZXRob2Qg
Y2FsbHMgZnJvbSB0aGUgcmVzb3VyY2UgaGFuZGxlIGFsbCB0aGUgd2F5IHRocnUgdG8gdGhlIHRo
cmVhZGFibGUgbG9hZGVyIGNsaWVudC4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgZmVh
dHVyZSBpc24ndCBmdW5jdGlvbmFsIHlldCBpbiBhbnkgcG9ydC4KKworICAgICAgICAqIGxvYWRl
ci9Eb2N1bWVudExvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6
c3Vic3RpdHV0ZVJlc291cmNlRGVsaXZlcnlUaW1lckZpcmVkKToKKyAgICAgICAgKiBsb2FkZXIv
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
VGhyZWFkYWJsZUxvYWRlcjo6ZGlkUmVjZWl2ZUJsb2JEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZ0Jsb2IpOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVxdWVzdCk6CisgICAg
ICAgICogbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oOgorICAgICAgICAqIGxvYWRl
ci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZFJl
c291cmNlU3luY2hyb25vdXNseSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9h
ZFJlc291cmNlU3luY2hyb25vdXNseUFzQmxvYik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxv
YWRlcjo6cHJlcGFyZVN5bmNSZXFldXN0KToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIu
aDoKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmdCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nT25lUGFydCk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUxvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUJsb2JEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YUNvbW1vbik6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUxvYWRlcjo6Y3JlYXRlQXN5bmNGaWxlU3RyZWFtKToKKyAgICAgICAgKiBsb2FkZXIvUmVz
b3VyY2VMb2FkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyOjpkaWRSZWNl
aXZlQmxvYkRhdGEpOgorICAgICAgICAqIGxvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUJsb2JEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OlN1YnJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OlN1YnJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nQmxv
Yik6CisgICAgICAgIChXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGlu
Z0NvbW1vbik6CisgICAgICAgICogbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmg6CisgICAgICAg
ICogbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyQ2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpT
dWJyZXNvdXJjZUxvYWRlckNsaWVudDo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6U3VicmVzb3VyY2VMb2FkZXJDbGllbnQ6OmRpZFJlY2VpdmVCbG9iRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlckNsaWVudDo6ZGlkRmluaXNoTG9hZGluZ0Jsb2Ip
OgorICAgICAgICAqIGxvYWRlci9UaHJlYWRhYmxlTG9hZGVyQ2xpZW50Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpUaHJlYWRhYmxlTG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpUaHJlYWRhYmxlTG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlQmxvYkRhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6VGhyZWFkYWJsZUxvYWRlckNsaWVudDo6ZGlkRmluaXNoTG9hZGlu
Z0Jsb2IpOgorICAgICAgICAqIGxvYWRlci9UaHJlYWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBlci5o
OgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXI6OmRpZFJl
Y2VpdmVCbG9iRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlTG9hZGVyQ2xpZW50
V3JhcHBlcjo6ZGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxl
TG9hZGVyQ2xpZW50V3JhcHBlcjo6ZGlkRmluaXNoTG9hZGluZ0Jsb2IpOgorICAgICAgICAqIGxv
YWRlci9Xb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ondvcmtl
ckNvbnRleHREaWRSZWNlaXZlQmxvYkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhy
ZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEJyaWRnZTo6ZGlkUmVjZWl2ZUJsb2JEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2U6
OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6d29ya2VyQ29udGV4dERpZEZp
bmlzaExvYWRpbmdCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVMb2Fk
ZXI6Ok1haW5UaHJlYWRCcmlkZ2U6OmRpZEZpbmlzaExvYWRpbmdCbG9iKToKKyAgICAgICAgKiBs
b2FkZXIvV29ya2VyVGhyZWFkYWJsZUxvYWRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VIYW5kbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6
OmNhY2hlTWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmxvYWRS
ZXNvdXJjZVN5bmNocm9ub3VzbHlBc0Jsb2IpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VIYW5kbGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFu
ZGxlQ2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUNsaWVudDo6ZGlk
UmVjZWl2ZUJsb2JEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ2xpZW50
OjpkaWRGaW5pc2hMb2FkaW5nQmxvYik6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNv
dXJjZVJlcXVlc3RCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJh
c2U6OmFkb3B0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OmNvcHlE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmVxdWFsSWdub3JpbmdIZWFkZXJGaWVsZHMpOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6ZG93bmxvYWRBc0Jsb2IpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6c2V0RG93bmxvYWRBc0Jsb2IpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlcXVlc3QuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6ZG93bmxvYWRUb0ZpbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0OjpzZXREb3dubG9hZFRvRmlsZSk6CisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlc3BvbnNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2U6OmRvd25sb2FkRmlsZVBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZTo6c2V0RG93bmxvYWRGaWxlUGF0aCk6CisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlc3BvbnNlLmg6CisgICAg
ICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBS
ZXF1ZXN0OjpjcmVhdGVSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0
OjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0Ojpk
aWRGaW5pc2hMb2FkaW5nQmxvYik6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6
ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmRpZFJl
Y2VpdmVCbG9iRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6ZGlkUmVj
ZWl2ZURhdGFDb21tb24pOgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5oOgorCiAyMDEw
LTEwLTA2ICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBEYW4gQmVybnN0ZWluLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDY5MjQwKQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTc0NSw3ICs3NDUsNyBAQAogCQky
RUQ2MDlCQzExNDVCMDcxMDBDODY4NEUgLyogRE9NRm9ybURhdGEuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVENjA5QkExMTQ1QjA3MTAwQzg2ODRF
IC8qIERPTUZvcm1EYXRhLmNwcCAqLzsgfTsKIAkJMkVENjA5QkQxMTQ1QjA3MTAwQzg2ODRFIC8q
IERPTUZvcm1EYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyRUQ2MDlCQjExNDVCMDcxMDBDODY4NEUgLyogRE9NRm9ybURhdGEuaCAqLzsgfTsKIAkJ
MkVERUYxRjMxMjFCMEVGQzAwNzI2REIyIC8qIEJsb2JEYXRhLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFREVGMUVEMTIxQjBFRkMwMDcyNkRCMiAv
KiBCbG9iRGF0YS5jcHAgKi87IH07Ci0JCTJFREVGMUY0MTIxQjBFRkMwMDcyNkRCMiAvKiBCbG9i
RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVE
RUYxRUUxMjFCMEVGQzAwNzI2REIyIC8qIEJsb2JEYXRhLmggKi87IH07CisJCTJFREVGMUY0MTIx
QjBFRkMwMDcyNkRCMiAvKiBCbG9iRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMkVERUYxRUUxMjFCMEVGQzAwNzI2REIyIC8qIEJsb2JEYXRhLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkVERUYx
RjUxMjFCMEVGQzAwNzI2REIyIC8qIEJsb2JSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVERUYxRUYxMjFCMEVGQzAwNzI2REIyIC8qIEJs
b2JSZWdpc3RyeS5oICovOyB9OwogCQkyRURFRjFGNjEyMUIwRUZDMDA3MjZEQjIgLyogQmxvYlJl
Z2lzdHJ5SW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyRURFRjFGMDEyMUIwRUZDMDA3MjZEQjIgLyogQmxvYlJlZ2lzdHJ5SW1wbC5jcHAgKi87
IH07CiAJCTJFREVGMUY3MTIxQjBFRkMwMDcyNkRCMiAvKiBCbG9iUmVnaXN0cnlJbXBsLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRURFRjFGMTEyMUIw
RUZDMDA3MjZEQjIgLyogQmxvYlJlZ2lzdHJ5SW1wbC5oICovOyB9OwpAQCAtMjg2NCw3ICsyODY0
LDcgQEAKIAkJOTczRTMyNTcxMDg4M0I3QzAwNUJDNDkzIC8qIFJlc291cmNlTG9hZE5vdGlmaWVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzNFMzI1
NTEwODgzQjdDMDA1QkM0OTMgLyogUmVzb3VyY2VMb2FkTm90aWZpZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5NzZENkM3NzEyMkI4QTNEMDAx
RkQxRjcgLyogQXN5bmNGaWxlV3JpdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5NzZENkM1ODEyMkI4QTNEMDAxRkQxRjcgLyogQXN5bmNGaWxlV3Jp
dGVyLmggKi87IH07CiAJCTk3NkQ2Qzc4MTIyQjhBM0QwMDFGRDFGNyAvKiBCbG9iLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3NkQ2QzU5MTIyQjhB
M0QwMDFGRDFGNyAvKiBCbG9iLmNwcCAqLzsgfTsKLQkJOTc2RDZDNzkxMjJCOEEzRDAwMUZEMUY3
IC8qIEJsb2IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDk3NkQ2QzVBMTIyQjhBM0QwMDFGRDFGNyAvKiBCbG9iLmggKi87IH07CisJCTk3NkQ2Qzc5MTIy
QjhBM0QwMDFGRDFGNyAvKiBCbG9iLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5NzZENkM1QTEyMkI4QTNEMDAxRkQxRjcgLyogQmxvYi5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTk3NkQ2QzdCMTIyQjhB
M0QwMDFGRDFGNyAvKiBCbG9iQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5NzZENkM1QzEyMkI4QTNEMDAxRkQxRjcgLyogQmxvYkJ1aWxk
ZXIuY3BwICovOyB9OwogCQk5NzZENkM3QzEyMkI4QTNEMDAxRkQxRjcgLyogQmxvYkJ1aWxkZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3NkQ2QzVE
MTIyQjhBM0QwMDFGRDFGNyAvKiBCbG9iQnVpbGRlci5oICovOyB9OwogCQk5NzZENkM3RTEyMkI4
QTNEMDAxRkQxRjcgLyogQmxvYlVSTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5NzZENkM1RjEyMkI4QTNEMDAxRkQxRjcgLyogQmxvYlVSTC5jcHAg
Ki87IH07CkluZGV4OiBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCShyZXZpc2lvbiA2OTI0MCkK
KysrIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTYyLDcgKzU2Miw4IEBAIHZvaWQgRG9jdW1lbnRMb2FkZXI6OnN1YnN0aXR1dGVSZXNvdXJjZUQK
ICAgICAgICAgCiAgICAgICAgIGlmIChyZXNvdXJjZSkgewogICAgICAgICAgICAgU2hhcmVkQnVm
ZmVyKiBkYXRhID0gcmVzb3VyY2UtPmRhdGEoKTsKLSAgICAgICAgCisKKyAgICAgICAgICAgIC8v
IEZJWE1FOiBXcmFwIGEgYmxvYiBhcm91bmQgdGhlIGRhdGEgaW4gdGhlIGRvd25sb2FkQXNCbG9i
IGNhc2UuCiAgICAgICAgICAgICBsb2FkZXItPmRpZFJlY2VpdmVSZXNwb25zZShyZXNvdXJjZS0+
cmVzcG9uc2UoKSk7CiAgICAgICAgICAgICBsb2FkZXItPmRpZFJlY2VpdmVEYXRhKGRhdGEtPmRh
dGEoKSwgZGF0YS0+c2l6ZSgpLCBkYXRhLT5zaXplKCksIHRydWUpOwogICAgICAgICAgICAgbG9h
ZGVyLT5kaWRGaW5pc2hMb2FkaW5nKDApOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRU
aHJlYWRhYmxlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9Eb2N1bWVu
dFRocmVhZGFibGVMb2FkZXIuY3BwCShyZXZpc2lvbiA2OTI0MCkKKysrIFdlYkNvcmUvbG9hZGVy
L0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyOCw2ICsy
MjgsMTggQEAgdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZFJlY2VpdgogICAgIG1f
Y2xpZW50LT5kaWRSZWNlaXZlRGF0YShkYXRhLCBsZW5ndGhSZWNlaXZlZCk7CiB9CiAKK3ZvaWQg
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRSZWNlaXZlQmxvYkRhdGEoU3VicmVzb3VyY2VM
b2FkZXIqIGxvYWRlciwgaW50IGxlbmd0aFJlY2VpdmVkKQoreworICAgIEFTU0VSVChtX2NsaWVu
dCk7CisgICAgQVNTRVJUX1VOVVNFRChsb2FkZXIsIGxvYWRlciA9PSBtX2xvYWRlcik7CisKKyAg
ICAvLyBJZ25vcmUgcmVzcG9uc2UgYm9keSBvZiBwcmVmbGlnaHQgcmVxdWVzdHMuCisgICAgaWYg
KG1fYWN0dWFsUmVxdWVzdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jbGllbnQtPmRpZFJl
Y2VpdmVCbG9iRGF0YShsZW5ndGhSZWNlaXZlZCk7Cit9CisKIHZvaWQgRG9jdW1lbnRUaHJlYWRh
YmxlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIpCiB7
CiAgICAgQVNTRVJUKGxvYWRlciA9PSBtX2xvYWRlcik7CkBAIC0yMzUsNiArMjQ3LDEzIEBAIHZv
aWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRGaW5pc2gKICAgICBkaWRGaW5pc2hMb2Fk
aW5nKGxvYWRlci0+aWRlbnRpZmllcigpKTsKIH0KIAordm9pZCBEb2N1bWVudFRocmVhZGFibGVM
b2FkZXI6OmRpZEZpbmlzaExvYWRpbmdCbG9iKFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIFBh
c3NSZWZQdHI8QmxvYj4gYmxvYikKK3sKKyAgICBBU1NFUlQobG9hZGVyID09IG1fbG9hZGVyKTsK
KyAgICBBU1NFUlQobV9jbGllbnQpOworICAgIGRpZEZpbmlzaExvYWRpbmdCbG9iKGxvYWRlci0+
aWRlbnRpZmllcigpLCBibG9iKTsKK30KKwogdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6
OmRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKQogewogICAgIGlmICht
X2FjdHVhbFJlcXVlc3QpIHsKQEAgLTI0NSw2ICsyNjQsMTYgQEAgdm9pZCBEb2N1bWVudFRocmVh
ZGFibGVMb2FkZXI6OmRpZEZpbmlzaAogICAgICAgICBtX2NsaWVudC0+ZGlkRmluaXNoTG9hZGlu
ZyhpZGVudGlmaWVyKTsKIH0KIAordm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZEZp
bmlzaExvYWRpbmdCbG9iKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgUGFzc1JlZlB0cjxCbG9i
PiBibG9iKQoreworICAgIGlmIChtX2FjdHVhbFJlcXVlc3QpIHsKKyAgICAgICAgQVNTRVJUKCFt
X3NhbWVPcmlnaW5SZXF1ZXN0KTsKKyAgICAgICAgQVNTRVJUKG1fb3B0aW9ucy5jcm9zc09yaWdp
blJlcXVlc3RQb2xpY3kgPT0gVXNlQWNjZXNzQ29udHJvbCk7CisgICAgICAgIHByZWZsaWdodFN1
Y2Nlc3MoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9jbGllbnQtPmRpZEZpbmlzaExvYWRpbmdC
bG9iKGlkZW50aWZpZXIsIGJsb2IpOworfQorCiB2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRl
cjo6ZGlkRmFpbChTdWJyZXNvdXJjZUxvYWRlciogbG9hZGVyLCBjb25zdCBSZXNvdXJjZUVycm9y
JiBlcnJvcikKIHsKICAgICBBU1NFUlQobV9jbGllbnQpOwpAQCAtMzI3LDExICszNTYsMTYgQEAg
dm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXF1ZQogICAgIFN0b3JlZENyZWRl
bnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzID0gbV9vcHRpb25zLmFsbG93Q3JlZGVudGlhbHMgPyBB
bGxvd1N0b3JlZENyZWRlbnRpYWxzIDogRG9Ob3RBbGxvd1N0b3JlZENyZWRlbnRpYWxzOwogCiAg
ICAgVmVjdG9yPGNoYXI+IGRhdGE7CisgICAgUmVmUHRyPEJsb2I+IGRhdGFBc0Jsb2I7CiAgICAg
UmVzb3VyY2VFcnJvciBlcnJvcjsKICAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOwogICAg
IHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQg
bG9uZz46Om1heCgpOwotICAgIGlmIChtX2RvY3VtZW50LT5mcmFtZSgpKQotICAgICAgICBpZGVu
dGlmaWVyID0gbV9kb2N1bWVudC0+ZnJhbWUoKS0+bG9hZGVyKCktPmxvYWRSZXNvdXJjZVN5bmNo
cm9ub3VzbHkocmVxdWVzdCwgc3RvcmVkQ3JlZGVudGlhbHMsIGVycm9yLCByZXNwb25zZSwgZGF0
YSk7CisgICAgaWYgKG1fZG9jdW1lbnQtPmZyYW1lKCkpIHsKKyAgICAgICAgaWYgKHJlcXVlc3Qu
ZG93bmxvYWRBc0Jsb2IoKSkKKyAgICAgICAgICAgIGRhdGFBc0Jsb2IgPSBtX2RvY3VtZW50LT5m
cmFtZSgpLT5sb2FkZXIoKS0+bG9hZFJlc291cmNlU3luY2hyb25vdXNseUFzQmxvYihyZXF1ZXN0
LCBzdG9yZWRDcmVkZW50aWFscywgZXJyb3IsIHJlc3BvbnNlLCBpZGVudGlmaWVyKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgaWRlbnRpZmllciA9IG1fZG9jdW1lbnQtPmZyYW1lKCktPmxv
YWRlcigpLT5sb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KHJlcXVlc3QsIHN0b3JlZENyZWRlbnRp
YWxzLCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOworICAgIH0KIAogICAgIC8vIE5vIGV4Y2VwdGlv
biBmb3IgZmlsZTovLy8gcmVzb3VyY2VzLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzQ5NjIyOTg+Lgog
ICAgIC8vIEFsc28sIGlmIHdlIGhhdmUgYW4gSFRUUCByZXNwb25zZSwgdGhlbiBpdCB3YXNuJ3Qg
YSBuZXR3b3JrIGVycm9yIGluIGZhY3QuCkBAIC0zNTAsMTEgKzM4NCwxNSBAQCB2b2lkIERvY3Vt
ZW50VGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlcXVlCiAKICAgICBkaWRSZWNlaXZlUmVzcG9uc2Uo
MCwgcmVzcG9uc2UpOwogCi0gICAgY29uc3QgY2hhciogYnl0ZXMgPSBzdGF0aWNfY2FzdDxjb25z
dCBjaGFyKj4oZGF0YS5kYXRhKCkpOwotICAgIGludCBsZW4gPSBzdGF0aWNfY2FzdDxpbnQ+KGRh
dGEuc2l6ZSgpKTsKLSAgICBkaWRSZWNlaXZlRGF0YSgwLCBieXRlcywgbGVuKTsKKyAgICBpZiAo
cmVxdWVzdC5kb3dubG9hZEFzQmxvYigpKQorICAgICAgIGRpZEZpbmlzaExvYWRpbmdCbG9iKGlk
ZW50aWZpZXIsIGRhdGFBc0Jsb2IucmVsZWFzZSgpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgY29u
c3QgY2hhciogYnl0ZXMgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZGF0YS5kYXRhKCkpOwor
ICAgICAgICBpbnQgbGVuID0gc3RhdGljX2Nhc3Q8aW50PihkYXRhLnNpemUoKSk7CisgICAgICAg
IGRpZFJlY2VpdmVEYXRhKDAsIGJ5dGVzLCBsZW4pOworICAgICAgICBkaWRGaW5pc2hMb2FkaW5n
KGlkZW50aWZpZXIpOworICAgIH0KIAotICAgIGRpZEZpbmlzaExvYWRpbmcoaWRlbnRpZmllcik7
CiB9CiAKIGJvb2wgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjppc0FsbG93ZWRSZWRpcmVjdChj
b25zdCBLVVJMJiB1cmwpCkluZGV4OiBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVM
b2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVM
b2FkZXIuaAkocmV2aXNpb24gNjkyNDApCisrKyBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVh
ZGFibGVMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzQsNyArNzQsOSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShTdWJy
ZXNvdXJjZUxvYWRlciosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKICAgICAgICAgdmlydHVh
bCB2b2lkIGRpZFJlY2VpdmVEYXRhKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgY2hhciosIGlu
dCBsZW5ndGhSZWNlaXZlZCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQmxvYkRh
dGEoU3VicmVzb3VyY2VMb2FkZXIqLCBpbnQgLypsZW5ndGhSZWNlaXZlZCovKTsKICAgICAgICAg
dmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoU3VicmVzb3VyY2VMb2FkZXIqKTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmdCbG9iKFN1YnJlc291cmNlTG9hZGVyKiwg
UGFzc1JlZlB0cjxCbG9iPik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKFN1YnJlc291
cmNlTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpOwogCiAgICAgICAgIHZpcnR1YWwgYm9v
bCBnZXRTaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShTdWJyZXNvdXJjZUxvYWRlciosIGJvb2wm
IHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKTsKQEAgLTgyLDYgKzg0LDggQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRDYW5jZWxsYXRpb24oU3Vi
cmVzb3VyY2VMb2FkZXIqLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOwogCiAgICAg
ICAgIHZvaWQgZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpOworICAg
ICAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmdCbG9iKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwg
UGFzc1JlZlB0cjxCbG9iPik7CisKICAgICAgICAgdm9pZCBtYWtlU2ltcGxlQ3Jvc3NPcmlnaW5B
Y2Nlc3NSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCk7CiAgICAgICAgIHZv
aWQgbWFrZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdFdpdGhQcmVmbGlnaHQoY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0KTsKICAgICAgICAgdm9pZCBwcmVmbGlnaHRTdWNjZXNzKCk7Cklu
ZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCShyZXZpc2lvbiA2OTI0MCkKKysrIFdlYkNvcmUvbG9h
ZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjczOSw2ICsyNzM5LDUwIEBA
IHZvaWQgRnJhbWVMb2FkZXI6OmxvYWRQb3N0UmVxdWVzdChjb25zdCAKIAogdW5zaWduZWQgbG9u
ZyBGcmFtZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzLCBSZXNv
dXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFy
PiYgZGF0YSkKIHsKKyAgICBBU1NFUlQoIXJlcXVlc3QuZG93bmxvYWRBc0Jsb2IoKSk7CisgICAg
UmVzb3VyY2VSZXF1ZXN0IGFjdHVhbFJlcXVlc3Q7CisgICAgdW5zaWduZWQgbG9uZyBpZGVudGlm
aWVyID0gcHJlcGFyZVN5bmNSZXFldXN0KHJlcXVlc3QsIGVycm9yLCBhY3R1YWxSZXF1ZXN0KTsK
KyAgICBpZiAoZXJyb3IuaXNOdWxsKCkpIHsKKyAgICAgICAgQVNTRVJUKCFhY3R1YWxSZXF1ZXN0
LmlzTnVsbCgpKTsKKyAgICAgICAgCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9O
UykKKyAgICAgICAgaWYgKCFkb2N1bWVudExvYWRlcigpLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgp
LT5tYXliZUxvYWRTeW5jaHJvbm91c2x5KGFjdHVhbFJlcXVlc3QsIGVycm9yLCByZXNwb25zZSwg
ZGF0YSkpIHsKKyNlbmRpZgorICAgICAgICAgICAgUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJj
ZVN5bmNocm9ub3VzbHkobmV0d29ya2luZ0NvbnRleHQoKSwgYWN0dWFsUmVxdWVzdCwgc3RvcmVk
Q3JlZGVudGlhbHMsIGVycm9yLCByZXNwb25zZSwgZGF0YSk7CisjaWYgRU5BQkxFKE9GRkxJTkVf
V0VCX0FQUExJQ0FUSU9OUykKKyAgICAgICAgICAgIGRvY3VtZW50TG9hZGVyKCktPmFwcGxpY2F0
aW9uQ2FjaGVIb3N0KCktPm1heWJlTG9hZEZhbGxiYWNrU3luY2hyb25vdXNseShhY3R1YWxSZXF1
ZXN0LCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOworICAgICAgICB9CisjZW5kaWYKKyAgICB9Cisg
ICAgbm90aWZpZXIoKS0+c2VuZFJlbWFpbmluZ0RlbGVnYXRlTWVzc2FnZXMobV9kb2N1bWVudExv
YWRlci5nZXQoKSwgaWRlbnRpZmllciwgcmVzcG9uc2UsIGRhdGEuc2l6ZSgpLCBlcnJvcik7Cisg
ICAgcmV0dXJuIGlkZW50aWZpZXI7Cit9CisKK1Bhc3NSZWZQdHI8QmxvYj4gRnJhbWVMb2FkZXI6
OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHlBc0Jsb2IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscywgUmVzb3VyY2VFcnJv
ciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCB1bnNpZ25lZCBsb25nJiBpZGVu
dGlmaWVyKQoreworICAgIEFTU0VSVChyZXF1ZXN0LmRvd25sb2FkQXNCbG9iKCkpOworICAgIFJl
c291cmNlUmVxdWVzdCBhY3R1YWxSZXF1ZXN0OworICAgIGlkZW50aWZpZXIgPSBwcmVwYXJlU3lu
Y1JlcWV1c3QocmVxdWVzdCwgZXJyb3IsIGFjdHVhbFJlcXVlc3QpOworICAgIFJlZlB0cjxCbG9i
PiBkYXRhQXNCbG9iOworICAgIGlmIChlcnJvci5pc051bGwoKSkgeworICAgICAgICBBU1NFUlQo
IWFjdHVhbFJlcXVlc3QuaXNOdWxsKCkpOworICAgICAgICAKKyNpZiAwIC8vIEZJWE1FOiBTdXBw
b3J0IGZvciBhcHBjYWNoZWQgcmVzb3VyY2VzLgorICAgICAgICBpZiAoIWRvY3VtZW50TG9hZGVy
KCktPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPm1heWJlTG9hZFN5bmNocm9ub3VzbHkoYWN0dWFs
UmVxdWVzdCwgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKSkgeworI2VuZGlmCisgICAgICAgICAgICBk
YXRhQXNCbG9iID0gUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHlBc0Js
b2IobmV0d29ya2luZ0NvbnRleHQoKSwgYWN0dWFsUmVxdWVzdCwgc3RvcmVkQ3JlZGVudGlhbHMs
IGVycm9yLCByZXNwb25zZSk7CisjaWYgMCAvLyBGSVhNRTogRGl0dG8uCisgICAgICAgICAgICBk
b2N1bWVudExvYWRlcigpLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5tYXliZUxvYWRGYWxsYmFj
a1N5bmNocm9ub3VzbHkoYWN0dWFsUmVxdWVzdCwgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKKyAg
ICAgICAgfQorI2VuZGlmCisgICAgfQorICAgIGludCBub3RpZnlMZW5ndGggPSBkYXRhQXNCbG9i
ID8gc3RhdGljX2Nhc3Q8aW50PihzdGQ6Om1pbihkYXRhQXNCbG9iLT5zaXplKCksIHN0YXRpY19j
YXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oSU5UX01BWCkpKSA6IDA7CisgICAgbm90aWZpZXIoKS0+
c2VuZFJlbWFpbmluZ0RlbGVnYXRlTWVzc2FnZXMobV9kb2N1bWVudExvYWRlci5nZXQoKSwgaWRl
bnRpZmllciwgcmVzcG9uc2UsIG5vdGlmeUxlbmd0aCwgZXJyb3IpOworICAgIHJldHVybiBkYXRh
QXNCbG9iOworfQorCit1bnNpZ25lZCBsb25nIEZyYW1lTG9hZGVyOjpwcmVwYXJlU3luY1JlcWV1
c3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUVycm9yJiBlcnJvciwg
UmVzb3VyY2VSZXF1ZXN0JiBhY3R1YWxSZXF1ZXN0KQorewogICAgIFN0cmluZyByZWZlcnJlciA9
IG1fb3V0Z29pbmdSZWZlcnJlcjsKICAgICBpZiAoU2VjdXJpdHlPcmlnaW46OnNob3VsZEhpZGVS
ZWZlcnJlcihyZXF1ZXN0LnVybCgpLCByZWZlcnJlcikpCiAgICAgICAgIHJlZmVycmVyID0gU3Ry
aW5nKCk7CkBAIC0yNzUzLDI3ICsyNzk3LDEyIEBAIHVuc2lnbmVkIGxvbmcgRnJhbWVMb2FkZXI6
OmxvYWRSZXNvdXJjZVMKICAgICBpZiAoUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKSkKICAg
ICAgICAgaW5pdGlhbFJlcXVlc3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMocGFnZS0+bWFpbkZy
YW1lKCktPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5yZXF1ZXN0KCkudXJsKCkpOwogICAg
IGluaXRpYWxSZXF1ZXN0LnNldEhUVFBVc2VyQWdlbnQoY2xpZW50KCktPnVzZXJBZ2VudChyZXF1
ZXN0LnVybCgpKSk7Ci0gICAgCisKICAgICBhZGRFeHRyYUZpZWxkc1RvU3VicmVzb3VyY2VSZXF1
ZXN0KGluaXRpYWxSZXF1ZXN0KTsKIAogICAgIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciA9IDA7
ICAgIAotICAgIFJlc291cmNlUmVxdWVzdCBuZXdSZXF1ZXN0KGluaXRpYWxSZXF1ZXN0KTsKLSAg
ICByZXF1ZXN0RnJvbURlbGVnYXRlKG5ld1JlcXVlc3QsIGlkZW50aWZpZXIsIGVycm9yKTsKLQot
ICAgIGlmIChlcnJvci5pc051bGwoKSkgewotICAgICAgICBBU1NFUlQoIW5ld1JlcXVlc3QuaXNO
dWxsKCkpOwotICAgICAgICAKLSNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQot
ICAgICAgICBpZiAoIWRvY3VtZW50TG9hZGVyKCktPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPm1h
eWJlTG9hZFN5bmNocm9ub3VzbHkobmV3UmVxdWVzdCwgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKSkg
ewotI2VuZGlmCi0gICAgICAgICAgICBSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hy
b25vdXNseShuZXR3b3JraW5nQ29udGV4dCgpLCBuZXdSZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFs
cywgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKLSNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElD
QVRJT05TKQotICAgICAgICAgICAgZG9jdW1lbnRMb2FkZXIoKS0+YXBwbGljYXRpb25DYWNoZUhv
c3QoKS0+bWF5YmVMb2FkRmFsbGJhY2tTeW5jaHJvbm91c2x5KG5ld1JlcXVlc3QsIGVycm9yLCBy
ZXNwb25zZSwgZGF0YSk7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgIH0KLQotICAgIG5vdGlmaWVy
KCktPnNlbmRSZW1haW5pbmdEZWxlZ2F0ZU1lc3NhZ2VzKG1fZG9jdW1lbnRMb2FkZXIuZ2V0KCks
IGlkZW50aWZpZXIsIHJlc3BvbnNlLCBkYXRhLnNpemUoKSwgZXJyb3IpOworICAgIGFjdHVhbFJl
cXVlc3QgPSBpbml0aWFsUmVxdWVzdDsKKyAgICByZXF1ZXN0RnJvbURlbGVnYXRlKGFjdHVhbFJl
cXVlc3QsIGlkZW50aWZpZXIsIGVycm9yKTsKICAgICByZXR1cm4gaWRlbnRpZmllcjsKIH0KIApJ
bmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2xvYWRlci9GcmFtZUxvYWRlci5oCShyZXZpc2lvbiA2OTI0MCkKKysrIFdlYkNvcmUvbG9hZGVy
L0ZyYW1lTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBBcmNoaXZlOwogY2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVu
Z2U7CitjbGFzcyBCbG9iOwogY2xhc3MgQ2FjaGVkRnJhbWVCYXNlOwogY2xhc3MgQ2FjaGVkUGFn
ZTsKIGNsYXNzIENhY2hlZFJlc291cmNlOwpAQCAtMTIzLDYgKzEyNCw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgdm9pZCByZXBvcnRMb2NhbExvYWRGYWlsZWQoRnJhbWUqLCBjb25zdCBTdHJpbmcm
IHVybCk7CiAKICAgICB1bnNpZ25lZCBsb25nIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHMsIFJlc291cmNlRXJyb3ImLCBS
ZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRhKTsKKyAgICBQYXNzUmVmUHRyPEJs
b2I+IGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHlBc0Jsb2IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiwgU3RvcmVkQ3JlZGVudGlhbHMsIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwg
dW5zaWduZWQgbG9uZyYpOwogCiAgICAgYm9vbCBjYW5IYW5kbGVSZXF1ZXN0KGNvbnN0IFJlc291
cmNlUmVxdWVzdCYpOwogCkBAIC00MzEsNiArNDMzLDggQEAgcHJpdmF0ZToKIAogICAgIHZvaWQg
dXBkYXRlU2FuZGJveEZsYWdzKCk7CiAKKyAgICB1bnNpZ25lZCBsb25nIHByZXBhcmVTeW5jUmVx
ZXVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXF1
ZXN0JiBhY3R1YWxSZXF1ZXN0KTsKKwogICAgIEZyYW1lKiBtX2ZyYW1lOwogICAgIEZyYW1lTG9h
ZGVyQ2xpZW50KiBtX2NsaWVudDsKIApJbmRleDogV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2Fk
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcAko
cmV2aXNpb24gNjkyNDApCisrKyBXZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI3OSwxOCArMjc5LDIxIEBAIHZvaWQgUmVzb3VyY2VMb2FkZXI6Ondp
bGxTdG9wQnVmZmVyaW5nRGEKIAogdm9pZCBSZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGlu
Zyhkb3VibGUgZmluaXNoVGltZSkKIHsKLSAgICAvLyBJZiBsb2FkIGhhcyBiZWVuIGNhbmNlbGxl
ZCBhZnRlciBmaW5pc2hpbmcgKHdoaWNoIGNvdWxkIGhhcHBlbiB3aXRoIGEgCi0gICAgLy8gSmF2
YVNjcmlwdCB0aGF0IGNoYW5nZXMgdGhlIHdpbmRvdyBsb2NhdGlvbiksIGRvIG5vdGhpbmcuCi0g
ICAgaWYgKG1fY2FuY2VsbGVkKQotICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKCFtX3JlYWNo
ZWRUZXJtaW5hbFN0YXRlKTsKKyAgICBkaWRGaW5pc2hMb2FkaW5nT25lUGFydChmaW5pc2hUaW1l
KTsKKyAgICByZWxlYXNlUmVzb3VyY2VzKCk7Cit9CiAKK3ZvaWQgUmVzb3VyY2VMb2FkZXI6OmRp
ZEZpbmlzaExvYWRpbmdCbG9iKGRvdWJsZSBmaW5pc2hUaW1lLCBQYXNzUmVmUHRyPEJsb2I+KQor
eworICAgIC8vIEZJWE1FOiBXaGF0IGFib3V0IG11bHRpcGFydCBhbmQgZG93bmxvYWRBc0Jsb2I/
CiAgICAgZGlkRmluaXNoTG9hZGluZ09uZVBhcnQoZmluaXNoVGltZSk7CiAgICAgcmVsZWFzZVJl
c291cmNlcygpOwogfQogCiB2b2lkIFJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nT25l
UGFydChkb3VibGUgZmluaXNoVGltZSkKIHsKKyAgICAvLyBJZiBsb2FkIGhhcyBiZWVuIGNhbmNl
bGxlZCBhZnRlciBmaW5pc2hpbmcgKHdoaWNoIGNvdWxkIGhhcHBlbiB3aXRoIGEgCisgICAgLy8g
SmF2YVNjcmlwdCB0aGF0IGNoYW5nZXMgdGhlIHdpbmRvdyBsb2NhdGlvbiksIGRvIG5vdGhpbmcu
CiAgICAgaWYgKG1fY2FuY2VsbGVkKQogICAgICAgICByZXR1cm47CiAgICAgQVNTRVJUKCFtX3Jl
YWNoZWRUZXJtaW5hbFN0YXRlKTsKQEAgLTM5MSw2ICszOTQsNyBAQCB2b2lkIFJlc291cmNlTG9h
ZGVyOjp3aWxsU2VuZFJlcXVlc3QoUmVzCiAgICAgaWYgKGRvY3VtZW50TG9hZGVyKCktPmFwcGxp
Y2F0aW9uQ2FjaGVIb3N0KCktPm1heWJlTG9hZEZhbGxiYWNrRm9yUmVkaXJlY3QodGhpcywgcmVx
dWVzdCwgcmVkaXJlY3RSZXNwb25zZSkpCiAgICAgICAgIHJldHVybjsKICNlbmRpZgorICAgIEFT
U0VSVChyZXF1ZXN0LmRvd25sb2FkQXNCbG9iKCkgPT0gbV9yZXF1ZXN0LmRvd25sb2FkQXNCbG9i
KCkpOwogICAgIHdpbGxTZW5kUmVxdWVzdChyZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKTsKIH0K
IApAQCAtNDI0LDYgKzQyOCwxNiBAQCB2b2lkIFJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmVz
cG9uc2UoCiAKIHZvaWQgUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVEYXRhKFJlc291cmNlSGFu
ZGxlKiwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCwgaW50IGxlbmd0aFJlY2VpdmVkKQog
eworICAgIGRpZFJlY2VpdmVEYXRhQ29tbW9uKGZhbHNlLCBkYXRhLCBsZW5ndGgsIGxlbmd0aFJl
Y2VpdmVkKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUJsb2JEYXRhKFJl
c291cmNlSGFuZGxlKiwgaW50IGxlbmd0aCkKK3sKKyAgICBkaWRSZWNlaXZlRGF0YUNvbW1vbih0
cnVlLCAwLCBsZW5ndGgsIDApOworfQorCit2b2lkIFJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZl
RGF0YUNvbW1vbihib29sIGlzQmxvYkRhdGEsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgs
IGludCBsZW5ndGhSZWNlaXZlZCkKK3sKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIGlmIChJ
bnNwZWN0b3JUaW1lbGluZUFnZW50OjppbnN0YW5jZUNvdW50KCkpIHsKICAgICAgICAgSW5zcGVj
dG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IChtX2ZyYW1lICYmIG1fZnJhbWUtPnBh
Z2UoKSkgPyBtX2ZyYW1lLT5wYWdlKCktPmluc3BlY3RvclRpbWVsaW5lQWdlbnQoKSA6IDA7CkBA
IC00MzEsNyArNDQ1LDEwIEBAIHZvaWQgUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVEYXRhKFJl
c28KICAgICAgICAgICAgIHRpbWVsaW5lQWdlbnQtPndpbGxSZWNlaXZlUmVzb3VyY2VEYXRhKGlk
ZW50aWZpZXIoKSk7CiAgICAgfQogI2VuZGlmCi0gICAgZGlkUmVjZWl2ZURhdGEoZGF0YSwgbGVu
Z3RoLCBsZW5ndGhSZWNlaXZlZCwgZmFsc2UpOworICAgIGlmICghaXNCbG9iRGF0YSkKKyAgICAg
ICAgZGlkUmVjZWl2ZURhdGEoZGF0YSwgbGVuZ3RoLCBsZW5ndGhSZWNlaXZlZCwgZmFsc2UpOwor
ICAgIGVsc2UKKyAgICAgICAgZGlkUmVjZWl2ZUJsb2JEYXRhKGxlbmd0aCk7CiAjaWYgRU5BQkxF
KElOU1BFQ1RPUikKICAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6aW5zdGFuY2VDb3Vu
dCgpKSB7CiAgICAgICAgIEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSAo
bV9mcmFtZSAmJiBtX2ZyYW1lLT5wYWdlKCkpID8gbV9mcmFtZS0+cGFnZSgpLT5pbnNwZWN0b3JU
aW1lbGluZUFnZW50KCkgOiAwOwpAQCAtNDQ2LDYgKzQ2MywxMSBAQCB2b2lkIFJlc291cmNlTG9h
ZGVyOjpkaWRGaW5pc2hMb2FkaW5nKFJlCiAgICAgZGlkRmluaXNoTG9hZGluZyhmaW5pc2hUaW1l
KTsKIH0KIAordm9pZCBSZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZ0Jsb2IoUmVzb3Vy
Y2VIYW5kbGUqLCBkb3VibGUgZmluaXNoVGltZSwgUGFzc1JlZlB0cjxCbG9iPiBibG9iKQorewor
ICAgIGRpZEZpbmlzaExvYWRpbmdCbG9iKGZpbmlzaFRpbWUsIGJsb2IpOworfQorCiB2b2lkIFJl
c291cmNlTG9hZGVyOjpkaWRGYWlsKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VFcnJv
ciYgZXJyb3IpCiB7CiAjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKQEAgLTUx
Nyw2ICs1MzksOCBAQCB2b2lkIFJlc291cmNlTG9hZGVyOjp3aWxsQ2FjaGVSZXNwb25zZShSCiAj
aWYgRU5BQkxFKEJMT0IpCiBBc3luY0ZpbGVTdHJlYW0qIFJlc291cmNlTG9hZGVyOjpjcmVhdGVB
c3luY0ZpbGVTdHJlYW0oRmlsZVN0cmVhbUNsaWVudCogY2xpZW50KQogeworICAgIC8vIEZJWE1F
OiBEZWNvdXBsZSB0aGUgRmlsZVRocmVhZCBmcm9tIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRzIGFu
ZCByZW1vdmUgdGhpcyBtZXRob2QgZnJvbSBSZXNvdXJjZUhhbmRsZUNsaWVudCwKKyAgICAvLyBj
YWxsZXJzIHNob3VlIGJlIGFibGUgdG8gY3JlYXRlIGEgRmlsZVN0cmVhbVByb3h5IGluZGVwZW5k
ZW50IG9mIGEgY29udGV4dC4KICAgICAvLyBJdCBpcyBPSyB0byBzaW1wbHkgcmV0dXJuIGEgcG9p
bnRlciBzaW5jZSBGaWxlU3RyZWFtUHJveHk6OmNyZWF0ZSBhZGRzIGFuIGV4dHJhIHJlZi4KICAg
ICByZXR1cm4gRmlsZVN0cmVhbVByb3h5OjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpLCBjbGllbnQpLmdldCgpOwogfQpJbmRleDogV2ViQ29yZS9s
b2FkZXIvUmVzb3VyY2VMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9SZXNv
dXJjZUxvYWRlci5oCShyZXZpc2lvbiA2OTI0MCkKKysrIFdlYkNvcmUvbG9hZGVyL1Jlc291cmNl
TG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDkgKzgwLDExIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFNlbmREYXRhKHVuc2lnbmVkIGxvbmcgbG9u
ZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpOwogICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqLCBp
bnQsIGxvbmcgbG9uZyBsZW5ndGhSZWNlaXZlZCwgYm9vbCBhbGxBdE9uY2UpOworICAgICAgICB2
aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUJsb2JEYXRhKGludCkgeyB9CiAgICAgICAgIHZpcnR1YWwg
dm9pZCBkaWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEoY29uc3QgY2hhciosIGludCkgeyB9CiAgICAg
ICAgIHZvaWQgd2lsbFN0b3BCdWZmZXJpbmdEYXRhKGNvbnN0IGNoYXIqLCBpbnQpOwogICAgICAg
ICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhkb3VibGUgZmluaXNoVGltZSk7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nQmxvYihkb3VibGUgZmluaXNoVGltZSwg
UGFzc1JlZlB0cjxCbG9iPik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKGNvbnN0IFJl
c291cmNlRXJyb3ImKTsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlh
bFN0b3JhZ2UoKTsKQEAgLTk4LDggKzEwMCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YShSZXNvdXJjZUhhbmRsZSosIHVuc2lnbmVkIGxv
bmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQp
OwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlSGFuZGxl
KiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVj
ZWl2ZURhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiwgaW50LCBpbnQgbGVuZ3RoUmVj
ZWl2ZWQpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUJsb2JEYXRhKFJlc291cmNl
SGFuZGxlKiwgaW50KTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVDYWNoZWRNZXRh
ZGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpIHsgZGlk
UmVjZWl2ZUNhY2hlZE1ldGFkYXRhKGRhdGEsIGxlbmd0aCk7IH0KICAgICAgICAgdmlydHVhbCB2
b2lkIGRpZEZpbmlzaExvYWRpbmcoUmVzb3VyY2VIYW5kbGUqLCBkb3VibGUgZmluaXNoVGltZSk7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nQmxvYihSZXNvdXJjZUhhbmRs
ZSosIGRvdWJsZSAvKmZpbmlzaFRpbWUqLywgUGFzc1JlZlB0cjxCbG9iPik7CiAgICAgICAgIHZp
cnR1YWwgdm9pZCBkaWRGYWlsKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VFcnJvciYp
OwogICAgICAgICB2aXJ0dWFsIHZvaWQgd2FzQmxvY2tlZChSZXNvdXJjZUhhbmRsZSopOwogICAg
ICAgICB2aXJ0dWFsIHZvaWQgY2Fubm90U2hvd1VSTChSZXNvdXJjZUhhbmRsZSopOwpAQCAtMTQx
LDYgKzE0NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCByZWFjaGVkVGVy
bWluYWxTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVhY2hlZFRlcm1pbmFsU3RhdGU7IH0KICAg
ICAgICAgYm9vbCBjYW5jZWxsZWQoKSBjb25zdCB7IHJldHVybiBtX2NhbmNlbGxlZDsgfQogICAg
ICAgICBib29sIGRlZmVyc0xvYWRpbmcoKSBjb25zdCB7IHJldHVybiBtX2RlZmVyc0xvYWRpbmc7
IH0KKyAgICAgICAgdm9pZCBkaWRSZWNlaXZlRGF0YUNvbW1vbihib29sIGlzQmxvYkRhdGEsIGNv
bnN0IGNoYXIqLCBpbnQsIGludCBsZW5ndGhSZWNlaXZlZCk7CiAKICAgICAgICAgUmVmUHRyPFJl
c291cmNlSGFuZGxlPiBtX2hhbmRsZTsKICAgICAgICAgUmVmUHRyPEZyYW1lPiBtX2ZyYW1lOwpJ
bmRleDogV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gNjkyNDApCisr
KyBXZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE1OCw2ICsxNTgsMjAgQEAgdm9pZCBTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZURhdGEo
YwogICAgICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZURhdGEodGhpcywgZGF0YSwgbGVuZ3RoKTsK
IH0KIAordm9pZCBTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUJsb2JEYXRhKGludCBsZW5n
dGgpCit7CisgICAgLy8gUmVmZXJlbmNlIHRoZSBvYmplY3QgaW4gdGhpcyBtZXRob2Qgc2luY2Ug
dGhlIGFkZGl0aW9uYWwgcHJvY2Vzc2luZyBjYW4gZG8KKyAgICAvLyBhbnl0aGluZyBpbmNsdWRp
bmcgcmVtb3ZpbmcgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoaXMgb2JqZWN0OyBvbmUgZXhhbXBs
ZSBvZiB0aGlzIGlzIDMyNjYyMTYuCisgICAgUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBwcm90
ZWN0KHRoaXMpOworCisgICAgUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVCbG9iRGF0YShsZW5n
dGgpOworCisgICAgLy8gQSBzdWJyZXNvdXJjZSBsb2FkZXIgZG9lcyBub3QgbG9hZCBtdWx0aXBh
cnQgc2VjdGlvbnMgcHJvZ3Jlc3NpdmVseS4KKyAgICAvLyBTbyBkb24ndCBkZWxpdmVyIGFueSBk
YXRhIHRvIHRoZSBsb2FkZXIgeWV0LgorICAgIGlmICghbV9sb2FkaW5nTXVsdGlwYXJ0Q29udGVu
dCAmJiBtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVCbG9iRGF0YSh0aGlz
LCBsZW5ndGgpOworfQorCiB2b2lkIFN1YnJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlQ2FjaGVk
TWV0YWRhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKIHsKICAgICAvLyBSZWZlcmVu
Y2UgdGhlIG9iamVjdCBpbiB0aGlzIG1ldGhvZCBzaW5jZSB0aGUgYWRkaXRpb25hbCBwcm9jZXNz
aW5nIGNhbiBkbwpAQCAtMTcwLDYgKzE4NCwxNiBAQCB2b2lkIFN1YnJlc291cmNlTG9hZGVyOjpk
aWRSZWNlaXZlQ2FjaGVkCiAKIHZvaWQgU3VicmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRp
bmcoZG91YmxlIGZpbmlzaFRpbWUpCiB7CisgICAgZGlkRmluaXNoTG9hZGluZ0NvbW1vbihmYWxz
ZSwgZmluaXNoVGltZSwgMCk7Cit9CisKK3ZvaWQgU3VicmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlz
aExvYWRpbmdCbG9iKGRvdWJsZSBmaW5pc2hUaW1lLCBQYXNzUmVmUHRyPEJsb2I+IGJsb2IpCit7
CisgICAgZGlkRmluaXNoTG9hZGluZ0NvbW1vbih0cnVlLCBmaW5pc2hUaW1lLCBibG9iKTsKK30K
Kwordm9pZCBTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZ0NvbW1vbihib29sIGFz
QmxvYiwgZG91YmxlIGZpbmlzaFRpbWUsIFBhc3NSZWZQdHI8QmxvYj4gYmxvYikKK3sKICAgICBp
ZiAoY2FuY2VsbGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQoIXJlYWNoZWRUZXJt
aW5hbFN0YXRlKCkpOwpAQCAtMTc4LDE0ICsyMDIsMjAgQEAgdm9pZCBTdWJyZXNvdXJjZUxvYWRl
cjo6ZGlkRmluaXNoTG9hZGluZwogICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gcHJvdGVj
dCh0aGlzKTsKIAogICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgbV9jbGllbnQtPmRpZEZpbmlz
aExvYWRpbmcodGhpcyk7Ci0gICAgCisgICAgICAgIGlmIChhc0Jsb2IpCisgICAgICAgICAgICBt
X2NsaWVudC0+ZGlkRmluaXNoTG9hZGluZ0Jsb2IodGhpcywgYmxvYik7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIG1fY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKHRoaXMpOworCiAgICAgbV9o
YW5kbGUgPSAwOwogCiAgICAgaWYgKGNhbmNlbGxlZCgpKQogICAgICAgICByZXR1cm47CiAgICAg
bV9kb2N1bWVudExvYWRlci0+cmVtb3ZlU3VicmVzb3VyY2VMb2FkZXIodGhpcyk7Ci0gICAgUmVz
b3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcoZmluaXNoVGltZSk7CisgICAgaWYgKGFzQmxv
YikKKyAgICAgICAgUmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmdCbG9iKGZpbmlzaFRp
bWUsIGJsb2IpOworICAgIGVsc2UKKyAgICAgICAgUmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExv
YWRpbmcoZmluaXNoVGltZSk7CiB9CiAKIHZvaWQgU3VicmVzb3VyY2VMb2FkZXI6OmRpZEZhaWwo
Y29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCkluZGV4OiBXZWJDb3JlL2xvYWRlci9TdWJyZXNv
dXJjZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9h
ZGVyLmgJKHJldmlzaW9uIDY5MjQwKQorKysgV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2Fk
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTQgKzUxLDE4IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFNlbmREYXRhKHVuc2lnbmVkIGxvbmcgbG9uZyBi
eXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpOwogICAgICAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
KTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqLCBpbnQs
IGxvbmcgbG9uZyBsZW5ndGhSZWNlaXZlZCwgYm9vbCBhbGxBdE9uY2UpOworICAgICAgICB2aXJ0
dWFsIHZvaWQgZGlkUmVjZWl2ZUJsb2JEYXRhKGludCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBk
aWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEoY29uc3QgY2hhciosIGludCk7CiAgICAgICAgIHZpcnR1
YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKGRvdWJsZSBmaW5pc2hUaW1lKTsKKyAgICAgICAgdmly
dHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmdCbG9iKGRvdWJsZSBmaW5pc2hUaW1lLCBQYXNzUmVm
UHRyPEJsb2I+KTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VF
cnJvciYpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2Uo
KTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOwogICAgICAgICB2aXJ0dWFsIHZvaWQg
cmVjZWl2ZWRDYW5jZWxsYXRpb24oY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsgICAg
ICAgIAogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkQ2FuY2VsKGNvbnN0IFJlc291cmNlRXJyb3Im
KTsKIAorICAgICAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmdDb21tb24oYm9vbCBhc0Jsb2IsIGRv
dWJsZSBmaW5pc2hUaW1lLCBQYXNzUmVmUHRyPEJsb2I+KTsKKwogICAgICAgICBTdWJyZXNvdXJj
ZUxvYWRlckNsaWVudCogbV9jbGllbnQ7CiAgICAgICAgIGJvb2wgbV9sb2FkaW5nTXVsdGlwYXJ0
Q29udGVudDsKICAgICB9OwpJbmRleDogV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXJD
bGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlckNs
aWVudC5oCShyZXZpc2lvbiA2OTI0MCkKKysrIFdlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9h
ZGVyQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDkgQEAKICNpZm5kZWYgU3Vi
cmVzb3VyY2VMb2FkZXJDbGllbnRfaAogI2RlZmluZSBTdWJyZXNvdXJjZUxvYWRlckNsaWVudF9o
CiAKKyNpbmNsdWRlICJCbG9iLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKwogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKQEAgLTQ2
LDExICs0OSwxMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZFNlbmREYXRhKFN1YnJl
c291cmNlTG9hZGVyKiwgdW5zaWduZWQgbG9uZyBsb25nIC8qYnl0ZXNTZW50Ki8sIHVuc2lnbmVk
IGxvbmcgbG9uZyAvKnRvdGFsQnl0ZXNUb0JlU2VudCovKSB7IH0KIAogICAgIHZpcnR1YWwgdm9p
ZCBkaWRSZWNlaXZlUmVzcG9uc2UoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFN1YnJlc291cmNl
TG9hZGVyKiwgY29uc3QgY2hhciosIGludCAvKmxlbmd0aFJlY2VpdmVkKi8pIHsgfQorICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IGNoYXIq
LCBpbnQgLypsZW5ndGhSZWNlaXZlZCovKSB7IH0gLy8gTm90IGNhbGxlZCBpZiByZXF1ZXN0LmRv
d25sb2FkQXNCbG9iIGlzIHNldC4KKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUJsb2JEYXRh
KFN1YnJlc291cmNlTG9hZGVyKiwgaW50IC8qbGVuZ3RoUmVjZWl2ZWQqLykgeyB9IC8vIE9ubHkg
Y2FsbGVkIGlmIHJlcXVlc3QuZG93bmxvYWRBc0Jsb2IgaXMgc2V0LgogICAgIHZpcnR1YWwgdm9p
ZCBkaWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBjaGFy
KiwgaW50IC8qbGVuZ3RoUmVjZWl2ZWQqLykgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlz
aExvYWRpbmcoU3VicmVzb3VyY2VMb2FkZXIqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmlu
aXNoTG9hZGluZ0Jsb2IoU3VicmVzb3VyY2VMb2FkZXIqLCBQYXNzUmVmUHRyPEJsb2I+KSB7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IFJlc291
cmNlRXJyb3ImKSB7IH0KLSAgICAKKwogICAgIHZpcnR1YWwgYm9vbCBnZXRTaG91bGRVc2VDcmVk
ZW50aWFsU3RvcmFnZShTdWJyZXNvdXJjZUxvYWRlciosIGJvb2wmIC8qc2hvdWxkVXNlQ3JlZGVu
dGlhbFN0b3JhZ2UqLykgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVj
ZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRDYW5j
ZWxsYXRpb24oU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSYpIHsgfQpJbmRleDogV2ViQ29yZS9sb2FkZXIvVGhyZWFkYWJsZUxvYWRlckNsaWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1RocmVhZGFibGVMb2FkZXJDbGllbnQuaAkocmV2
aXNpb24gNjkyNDApCisrKyBXZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxlTG9hZGVyQ2xpZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDkgQEAKICNpZm5kZWYgVGhyZWFkYWJsZUxvYWRl
ckNsaWVudF9oCiAjZGVmaW5lIFRocmVhZGFibGVMb2FkZXJDbGllbnRfaAogCisjaW5jbHVkZSAi
QmxvYi5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogICAgIGNsYXNzIFJlc291cmNlRXJyb3I7CkBAIC00MSw4ICs0NCwxMCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YSh1bnNpZ25lZCBs
b25nIGxvbmcgLypieXRlc1NlbnQqLywgdW5zaWduZWQgbG9uZyBsb25nIC8qdG90YWxCeXRlc1Rv
QmVTZW50Ki8pIHsgfQogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2Uo
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYpIHsgfQotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVj
ZWl2ZURhdGEoY29uc3QgY2hhciosIGludCAvKmxlbmd0aFJlY2VpdmVkKi8pIHsgfQorICAgICAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciosIGludCAvKmxlbmd0aFJl
Y2VpdmVkKi8pIHsgfSAvLyBOb3QgY2FsbGVkIHdoZW4gcmVxdWVzdC5kb3dubG9hZEFzQmxvYiBp
cyBzZXQuCisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQmxvYkRhdGEoaW50IC8qIGxl
bmd0aFJlY2VpdmVkKi8pIHsgfSAvLyBPbmx5IGNhbGxlZCBmb3IgcmVxdWVzdC5kb3dubG9hZEFz
QmxvYgogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25n
IC8qaWRlbnRpZmllciovKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRp
bmdCbG9iKHVuc2lnbmVkIGxvbmcgLyppZGVudGlmaWVyKi8sIFBhc3NSZWZQdHI8QmxvYj4pIHsg
fQogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJikgeyB9
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsUmVkaXJlY3RDaGVjaygpIHsgfQogCkluZGV4
OiBXZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1RocmVhZGFibGVMb2FkZXJDbGllbnRXcmFwcGVyLmgJKHJl
dmlzaW9uIDY5MjQwKQorKysgV2ViQ29yZS9sb2FkZXIvVGhyZWFkYWJsZUxvYWRlckNsaWVudFdy
YXBwZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQsMTIgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICAgICAgICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlRGF0YShkYXRhLCBsZW5n
dGhSZWNlaXZlZCk7CiAgICAgICAgIH0KIAorICAgICAgICB2b2lkIGRpZFJlY2VpdmVCbG9iRGF0
YShpbnQgbGVuZ3RoUmVjZWl2ZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX2NsaWVu
dCkKKyAgICAgICAgICAgICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZUJsb2JEYXRhKGxlbmd0aFJl
Y2VpdmVkKTsKKyAgICAgICAgfQorCiAgICAgICAgIHZvaWQgZGlkRmluaXNoTG9hZGluZyh1bnNp
Z25lZCBsb25nIGlkZW50aWZpZXIpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1fZG9uZSA9IHRy
dWU7CkBAIC04MSw2ICs4NywxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAg
ICAgbV9jbGllbnQtPmRpZEZpbmlzaExvYWRpbmcoaWRlbnRpZmllcik7CiAgICAgICAgIH0KIAor
ICAgICAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmdCbG9iKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmll
ciwgUGFzc1JlZlB0cjxCbG9iPiBibG9iKQorICAgICAgICB7CisgICAgICAgICAgICBtX2RvbmUg
PSB0cnVlOworICAgICAgICAgICAgaWYgKG1fY2xpZW50KQorICAgICAgICAgICAgICAgIG1fY2xp
ZW50LT5kaWRGaW5pc2hMb2FkaW5nQmxvYihpZGVudGlmaWVyLCBibG9iKTsKKyAgICAgICAgfQor
CiAgICAgICAgIHZvaWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKICAgICAg
ICAgewogICAgICAgICAgICAgbV9kb25lID0gdHJ1ZTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1dv
cmtlclRocmVhZGFibGVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1dv
cmtlclRocmVhZGFibGVMb2FkZXIuY3BwCShyZXZpc2lvbiA2OTI0MCkKKysrIFdlYkNvcmUvbG9h
ZGVyL1dvcmtlclRocmVhZGFibGVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsNiAr
MTkxLDEyIEBAIHN0YXRpYyB2b2lkIHdvcmtlckNvbnRleHREaWRSZWNlaXZlRGF0YSgKICAgICB3
b3JrZXJDbGllbnRXcmFwcGVyLT5kaWRSZWNlaXZlRGF0YSh2ZWN0b3JEYXRhLT5kYXRhKCksIHZl
Y3RvckRhdGEtPnNpemUoKSk7CiB9CiAKK3N0YXRpYyB2b2lkIHdvcmtlckNvbnRleHREaWRSZWNl
aXZlQmxvYkRhdGEoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUmVmUHRyPFRocmVh
ZGFibGVMb2FkZXJDbGllbnRXcmFwcGVyPiB3b3JrZXJDbGllbnRXcmFwcGVyLCBpbnQgbGVuZ3Ro
UmVjZWl2ZWQpCit7CisgICAgQVNTRVJUX1VOVVNFRChjb250ZXh0LCBjb250ZXh0LT5pc1dvcmtl
ckNvbnRleHQoKSk7CisgICAgd29ya2VyQ2xpZW50V3JhcHBlci0+ZGlkUmVjZWl2ZUJsb2JEYXRh
KGxlbmd0aFJlY2VpdmVkKTsKK30KKwogdm9pZCBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWlu
VGhyZWFkQnJpZGdlOjpkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3Ro
UmVjZWl2ZWQpCiB7CiAgICAgT3duUHRyPFZlY3RvcjxjaGFyPiA+IHZlY3RvciA9IGFkb3B0UHRy
KG5ldyBWZWN0b3I8Y2hhcj4obGVuZ3RoUmVjZWl2ZWQpKTsgLy8gbmVlZHMgdG8gYmUgYW4gT3du
UHRyIGZvciB1c2FnZSB3aXRoIGNyZWF0ZUNhbGxiYWNrVGFzay4KQEAgLTE5OCw2ICsyMDQsMTEg
QEAgdm9pZCBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQgogICAgIG1fbG9hZGVy
UHJveHkucG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KGNyZWF0ZUNhbGxiYWNrVGFzaygm
d29ya2VyQ29udGV4dERpZFJlY2VpdmVEYXRhLCBtX3dvcmtlckNsaWVudFdyYXBwZXIsIHZlY3Rv
ci5yZWxlYXNlKCkpLCBtX3Rhc2tNb2RlKTsKIH0KIAordm9pZCBXb3JrZXJUaHJlYWRhYmxlTG9h
ZGVyOjpNYWluVGhyZWFkQnJpZGdlOjpkaWRSZWNlaXZlQmxvYkRhdGEoaW50IGxlbmd0aFJlY2Vp
dmVkKQoreworICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0
KGNyZWF0ZUNhbGxiYWNrVGFzaygmd29ya2VyQ29udGV4dERpZFJlY2VpdmVCbG9iRGF0YSwgbV93
b3JrZXJDbGllbnRXcmFwcGVyLCBsZW5ndGhSZWNlaXZlZCksIG1fdGFza01vZGUpOworfQorCiBz
dGF0aWMgdm9pZCB3b3JrZXJDb250ZXh0RGlkRmluaXNoTG9hZGluZyhTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCBSZWZQdHI8VGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXI+IHdv
cmtlckNsaWVudFdyYXBwZXIsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikKIHsKICAgICBBU1NF
UlRfVU5VU0VEKGNvbnRleHQsIGNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKTsKQEAgLTIwOSw2
ICsyMjAsMjEgQEAgdm9pZCBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQgogICAg
IG1fbG9hZGVyUHJveHkucG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KGNyZWF0ZUNhbGxi
YWNrVGFzaygmd29ya2VyQ29udGV4dERpZEZpbmlzaExvYWRpbmcsIG1fd29ya2VyQ2xpZW50V3Jh
cHBlciwgaWRlbnRpZmllciksIG1fdGFza01vZGUpOwogfQogCitzdGF0aWMgdm9pZCB3b3JrZXJD
b250ZXh0RGlkRmluaXNoTG9hZGluZ0Jsb2IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgUmVmUHRyPFRocmVhZGFibGVMb2FkZXJDbGllbnRXcmFwcGVyPiB3b3JrZXJDbGllbnRXcmFw
cGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllciwgS1VSTCBibG9iSUQsIFN0cmluZyB0eXBlLCBsb25nIGxvbmcg
c2l6ZSkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQsIGNvbnRleHQtPmlzV29ya2VyQ29u
dGV4dCgpKTsKKyAgICB3b3JrZXJDbGllbnRXcmFwcGVyLT5kaWRGaW5pc2hMb2FkaW5nQmxvYihp
ZGVudGlmaWVyLCBCbG9iOjpjcmVhdGUoYmxvYklELCB0eXBlLCBzaXplKSk7Cit9CisKK3ZvaWQg
V29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEJyaWRnZTo6ZGlkRmluaXNoTG9hZGlu
Z0Jsb2IodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBQYXNzUmVmUHRyPEJsb2I+IGJsb2IpCit7
CisgICAgbV9kb3dubG9hZGVkQmxvYiA9IGJsb2I7CisgICAgbV9sb2FkZXJQcm94eS5wb3N0VGFz
a0Zvck1vZGVUb1dvcmtlckNvbnRleHQoCisgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmd29y
a2VyQ29udGV4dERpZEZpbmlzaExvYWRpbmdCbG9iLCBtX3dvcmtlckNsaWVudFdyYXBwZXIsIGlk
ZW50aWZpZXIsIGJsb2ItPnVybCgpLCBibG9iLT50eXBlKCksIGJsb2ItPnNpemUoKSksCisgICAg
ICAgIG1fdGFza01vZGUpOworfQorCiBzdGF0aWMgdm9pZCB3b3JrZXJDb250ZXh0RGlkRmFpbChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBSZWZQdHI8VGhyZWFkYWJsZUxvYWRlckNs
aWVudFdyYXBwZXI+IHdvcmtlckNsaWVudFdyYXBwZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImIGVy
cm9yKQogewogICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwgY29udGV4dC0+aXNXb3JrZXJDb250
ZXh0KCkpOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvV29ya2VyVGhyZWFkYWJsZUxvYWRlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1dvcmtlclRocmVhZGFibGVMb2FkZXIuaAkocmV2
aXNpb24gNjkyNDApCisrKyBXZWJDb3JlL2xvYWRlci9Xb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTExNCw3ICsxMTQsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkU2VuZERhdGEodW5zaWduZWQgbG9uZyBsb25nIGJ5
dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCk7CiAgICAgICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmKTsKICAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFy
KiwgaW50IGxlbmd0aFJlY2VpdmVkKTsKKyAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNl
aXZlQmxvYkRhdGEoaW50IGxlbmd0aFJlY2VpdmVkKTsKICAgICAgICAgICAgIHZpcnR1YWwgdm9p
ZCBkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcik7CisgICAgICAgICAg
ICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZ0Jsb2IodW5zaWduZWQgbG9uZyBpZGVudGlm
aWVyLCBQYXNzUmVmUHRyPEJsb2I+KTsKICAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGYWls
KGNvbnN0IFJlc291cmNlRXJyb3ImKTsKICAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGYWls
UmVkaXJlY3RDaGVjaygpOwogICAgICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVBdXRo
ZW50aWNhdGlvbkNhbmNlbGxhdGlvbihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CkBAIC0xMzEs
NiArMTMzLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgICAgICAvLyBGb3IgdXNl
IG9uIHRoZSBtYWluIHRocmVhZC4KICAgICAgICAgICAgIFN0cmluZyBtX3Rhc2tNb2RlOworCisg
ICAgICAgICAgICAvLyBPbmx5IHRvIGJlIHVzZWQgb24gdGhlIG1haW4gdGhyZWFkLgorICAgICAg
ICAgICAgUmVmUHRyPEJsb2I+IG1fZG93bmxvYWRlZEJsb2I7CiAgICAgICAgIH07CiAKICAgICAg
ICAgV29ya2VyVGhyZWFkYWJsZUxvYWRlcihXb3JrZXJDb250ZXh0KiwgVGhyZWFkYWJsZUxvYWRl
ckNsaWVudCosIGNvbnN0IFN0cmluZyYgdGFza01vZGUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYs
IGNvbnN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25zJik7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAJKHJldmlzaW9uIDY5MjQwKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiQmxvYlJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiRE5T
LmgiCisjaW5jbHVkZSAiSFRUUFBhcnNlcnMuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5j
bHVkZSAiUmVzb3VyY2VIYW5kbGVDbGllbnQuaCIKICNpbmNsdWRlICJUaW1lci5oIgpAQCAtNTQs
NiArNTUsNyBAQCBSZXNvdXJjZUhhbmRsZTo6UmVzb3VyY2VIYW5kbGUoY29uc3QgUmVzCiAKIFBh
c3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IFJlc291cmNlSGFuZGxlOjpjcmVhdGUoTmV0d29ya2lu
Z0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3Vy
Y2VIYW5kbGVDbGllbnQqIGNsaWVudCwgYm9vbCBkZWZlcnNMb2FkaW5nLCBib29sIHNob3VsZENv
bnRlbnRTbmlmZikKIHsKKyAgICBBU1NFUlQoIXJlcXVlc3QuZG93bmxvYWRBc0Jsb2IoKSk7IC8v
IEZJWE1FOiBIYW5kbGUgdGhpcyBjYXNlIHdpdGggYSBSZXNvdXJjZUhhbmRsZUNsaWVudCBpbXBs
ZW1lbnRhdGlvbiB0aGF0IGJyaWRnZXMgdGhlIGdhcC4KICNpZiBFTkFCTEUoQkxPQikKICAgICBp
ZiAocmVxdWVzdC51cmwoKS5wcm90b2NvbElzKCJibG9iIikpIHsKICAgICAgICAgUGFzc1JlZlB0
cjxSZXNvdXJjZUhhbmRsZT4gaGFuZGxlID0gYmxvYlJlZ2lzdHJ5KCkuY3JlYXRlUmVzb3VyY2VI
YW5kbGUocmVxdWVzdCwgY2xpZW50KTsKQEAgLTE4NSw0ICsxODcsMzIgQEAgdm9pZCBSZXNvdXJj
ZUhhbmRsZTo6Y2FjaGVNZXRhZGF0YShjb25zdAogICAgIC8vIE9wdGlvbmFsbHkgaW1wbGVtZW50
ZWQgYnkgcGxhdGZvcm0uCiB9CiAKKy8vIHN0YXRpYworUGFzc1JlZlB0cjxCbG9iPiBSZXNvdXJj
ZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseUFzQmxvYigKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0d29ya2luZ0NvbnRleHQqIGNvbnRl
eHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlRXJy
b3ImIGVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBBU1NFUlQocmVxdWVzdC5kb3du
bG9hZEFzQmxvYigpKTsKKworICAgIFZlY3RvcjxjaGFyPiBkYXRhOworICAgIGxvYWRSZXNvdXJj
ZVN5bmNocm9ub3VzbHkoY29udGV4dCwgcmVxdWVzdCwgc3RvcmVkQ3JlZGVudGlhbHMsIGVycm9y
LCByZXNwb25zZSwgZGF0YSk7CisgICAgaWYgKCFlcnJvci5pc051bGwoKSkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBTdHJpbmcgY29udGVudFR5cGU7CisgICAgaWYgKHJlc3BvbnNlLmlzSFRU
UCgpKQorICAgICAgICBjb250ZW50VHlwZSA9IGV4dHJhY3RNSU1FVHlwZUZyb21NZWRpYVR5cGUo
cmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKCJDb250ZW50LVR5cGUiKSk7CisgICAgZWxzZQorICAg
ICAgICBjb250ZW50VHlwZSA9IHJlc3BvbnNlLm1pbWVUeXBlKCk7CisKKyAgICBPd25QdHI8Qmxv
YkRhdGE+IGJsb2JEYXRhID0gQmxvYkRhdGE6OmNyZWF0ZSgpOworICAgIGJsb2JEYXRhLT5zZXRD
b250ZW50VHlwZShjb250ZW50VHlwZSk7CisgICAgaWYgKCFkYXRhLmlzRW1wdHkoKSkKKyAgICAg
ICAgYmxvYkRhdGEtPmFwcGVuZERhdGEoQ1N0cmluZyhkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkp
KTsgLy8gRklYTUU6IERvbid0IGNvcHkgdGhlIGRhdGEuCisgICAgcmV0dXJuIEJsb2I6OmNyZWF0
ZShibG9iRGF0YS5yZWxlYXNlKCksIGRhdGEuc2l6ZSgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgJ
KHJldmlzaW9uIDY5MjQwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFu
ZGxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDYgKzc0LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgT3Bh
cXVlQ0ZIVFRQQ29va2llU3RvcmFnZQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZTsKK2NsYXNzIEJsb2I7CiBjbGFzcyBDcmVkZW50aWFsOwogY2xh
c3MgRm9ybURhdGE7CiBjbGFzcyBGcmFtZTsKQEAgLTk3LDYgKzk4LDcgQEAgY2xhc3MgUmVzb3Vy
Y2VIYW5kbGUgOiBwdWJsaWMgUmVmQ291bnRlZAogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFJlc291cmNlSGFuZGxlPiBjcmVhdGUoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmLCBSZXNvdXJjZUhhbmRsZUNsaWVudCosIGJvb2wgZGVmZXJzTG9hZGluZywg
Ym9vbCBzaG91bGRDb250ZW50U25pZmYpOwogICAgIHN0YXRpYyB2b2lkIGxvYWRSZXNvdXJjZVN5
bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBT
dG9yZWRDcmVkZW50aWFscywgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0
b3I8Y2hhcj4mIGRhdGEpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2I+IGxvYWRSZXNvdXJj
ZVN5bmNocm9ub3VzbHlBc0Jsb2IoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmLCBTdG9yZWRDcmVkZW50aWFscywgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9u
c2UmKTsKIAogICAgIHN0YXRpYyB2b2lkIHByZXBhcmVGb3JVUkwoY29uc3QgS1VSTCYpOwogICAg
IHN0YXRpYyBib29sIHdpbGxMb2FkRnJvbUNhY2hlKFJlc291cmNlUmVxdWVzdCYsIEZyYW1lKik7
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVDbGllbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVDbGll
bnQuaAkocmV2aXNpb24gNjkyNDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3Vy
Y2VIYW5kbGVDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsOSBAQAogI2lmbmRl
ZiBSZXNvdXJjZUhhbmRsZUNsaWVudF9oCiAjZGVmaW5lIFJlc291cmNlSGFuZGxlQ2xpZW50X2gK
IAorI2luY2x1ZGUgIkJsb2IuaCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgogCkBAIC03Miw4ICs3NCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZUhh
bmRsZSosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSB7IH0KICAgICAgICAgdmlydHVhbCB2b2lk
IGRpZFJlY2VpdmVEYXRhKFJlc291cmNlSGFuZGxlKiwgY29uc3QgY2hhciosIGludCwgaW50IC8q
bGVuZ3RoUmVjZWl2ZWQqLykgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQmxv
YkRhdGEoUmVzb3VyY2VIYW5kbGUqLCBpbnQpIHsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlk
UmVjZWl2ZUNhY2hlZE1ldGFkYXRhKFJlc291cmNlSGFuZGxlKiwgY29uc3QgY2hhciosIGludCkg
eyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKFJlc291cmNlSGFuZGxl
KiwgZG91YmxlIC8qZmluaXNoVGltZSovKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZp
bmlzaExvYWRpbmdCbG9iKFJlc291cmNlSGFuZGxlKiwgZG91YmxlIC8qZmluaXNoVGltZSovLCBQ
YXNzUmVmUHRyPEJsb2I+KSB7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoUmVzb3Vy
Y2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZUVycm9yJikgeyB9CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCB3YXNCbG9ja2VkKFJlc291cmNlSGFuZGxlKikgeyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBj
YW5ub3RTaG93VVJMKFJlc291cmNlSGFuZGxlKikgeyB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCShyZXZpc2lvbiA2OTI0MCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQCBQYXNzT3duUHRyPFJlc291cmNlUmVxdWVzdD4g
UmVzb3VyY2VSZXF1CiAgICAgcmVxdWVzdC0+c2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMoZGF0YS0+
bV9maXJzdFBhcnR5Rm9yQ29va2llcyk7CiAgICAgcmVxdWVzdC0+c2V0SFRUUE1ldGhvZChkYXRh
LT5tX2h0dHBNZXRob2QpOwogICAgIHJlcXVlc3QtPnNldFRhcmdldFR5cGUoZGF0YS0+bV90YXJn
ZXRUeXBlKTsKKyAgICByZXF1ZXN0LT5zZXREb3dubG9hZEFzQmxvYihkYXRhLT5tX2Rvd25sb2Fk
QXNCbG9iKTsKIAogICAgIHJlcXVlc3QtPnVwZGF0ZVJlc291cmNlUmVxdWVzdCgpOwogICAgIHJl
cXVlc3QtPm1faHR0cEhlYWRlckZpZWxkcy5hZG9wdChkYXRhLT5tX2h0dHBIZWFkZXJzLnJlbGVh
c2UoKSk7CkBAIC03OSw2ICs4MCw3IEBAIFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJl
cXVlc3REYXQKICAgICBkYXRhLT5tX2h0dHBNZXRob2QgPSBodHRwTWV0aG9kKCkuY3Jvc3NUaHJl
YWRTdHJpbmcoKTsKICAgICBkYXRhLT5tX2h0dHBIZWFkZXJzID0gaHR0cEhlYWRlckZpZWxkcygp
LmNvcHlEYXRhKCk7CiAgICAgZGF0YS0+bV90YXJnZXRUeXBlID0gbV90YXJnZXRUeXBlOworICAg
IGRhdGEtPm1fZG93bmxvYWRBc0Jsb2IgPSBtX2Rvd25sb2FkQXNCbG9iOwogCiAgICAgZGF0YS0+
bV9yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheS5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KG1fcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxi
YWNrQXJyYXkuc2l6ZSgpKTsKICAgICBzaXplX3QgZW5jb2RpbmdBcnJheVNpemUgPSBtX3Jlc3Bv
bnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5LnNpemUoKTsKQEAgLTM0
MSw3ICszNDMsMTAgQEAgYm9vbCBlcXVhbElnbm9yaW5nSGVhZGVyRmllbGRzKGNvbnN0IFJlcwog
ICAgIAogICAgIGlmIChhLmFsbG93Q29va2llcygpICE9IGIuYWxsb3dDb29raWVzKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAKKworICAgIGlmIChhLmRvd25sb2FkQXNCbG9iKCkgIT0g
Yi5kb3dubG9hZEFzQmxvYigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBGb3JtRGF0
YSogZm9ybURhdGFBID0gYS5odHRwQm9keSgpOwogICAgIEZvcm1EYXRhKiBmb3JtRGF0YUIgPSBi
Lmh0dHBCb2R5KCk7CiAgICAgCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3Vy
Y2VSZXF1ZXN0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZVJlcXVlc3RCYXNlLmgJKHJldmlzaW9uIDY5MjQwKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDYg
KzE0NCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFRhcmdldFR5cGUgdGFyZ2V0
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0VHlwZTsgfQogICAgICAgICB2b2lkIHNldFRh
cmdldFR5cGUoVGFyZ2V0VHlwZSB0eXBlKSB7IG1fdGFyZ2V0VHlwZSA9IHR5cGU7IH0KIAorICAg
ICAgICAvLyBJZiB0cnVlLCB0aGUgcmVzcG9uc2UgYm9keSB3aWxsIGJlIHByb3ZpZGVkIGFzIGEg
YmxvYi4KKyAgICAgICAgYm9vbCBkb3dubG9hZEFzQmxvYigpIGNvbnN0IHsgcmV0dXJuIG1fZG93
bmxvYWRBc0Jsb2I7IH0KKyAgICAgICAgdm9pZCBzZXREb3dubG9hZEFzQmxvYihib29sIGRvd25s
b2FkKSB7IG1fZG93bmxvYWRBc0Jsb2IgPSBkb3dubG9hZDsgfQorCiAgICAgICAgIHN0YXRpYyBi
b29sIGNvbXBhcmUoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
Jik7CiAKICAgICBwcm90ZWN0ZWQ6CkBAIC0xNTUsNiArMTU5LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICAgICAgLCBtX3JlcG9ydExvYWRUaW1pbmcoZmFsc2UpCiAgICAgICAgICAg
ICAsIG1fcmVwb3J0UmF3SGVhZGVycyhmYWxzZSkKICAgICAgICAgICAgICwgbV90YXJnZXRUeXBl
KFRhcmdldElzU3VicmVzb3VyY2UpCisgICAgICAgICAgICAsIG1fZG93bmxvYWRBc0Jsb2IoZmFs
c2UpCiAgICAgICAgIHsKICAgICAgICAgfQogCkBAIC0xNzAsNiArMTc1LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICAgICAgLCBtX3JlcG9ydExvYWRUaW1pbmcoZmFsc2UpCiAgICAg
ICAgICAgICAsIG1fcmVwb3J0UmF3SGVhZGVycyhmYWxzZSkKICAgICAgICAgICAgICwgbV90YXJn
ZXRUeXBlKFRhcmdldElzU3VicmVzb3VyY2UpCisgICAgICAgICAgICAsIG1fZG93bmxvYWRBc0Js
b2IoZmFsc2UpCiAgICAgICAgIHsKICAgICAgICAgfQogCkBAIC0xOTUsNiArMjAxLDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIG1fcmVwb3J0TG9hZFRpbWluZzsKICAgICAg
ICAgYm9vbCBtX3JlcG9ydFJhd0hlYWRlcnM7CiAgICAgICAgIFRhcmdldFR5cGUgbV90YXJnZXRU
eXBlOworICAgICAgICBib29sIG1fZG93bmxvYWRBc0Jsb2I7CiAKICAgICBwcml2YXRlOgogICAg
ICAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIGFzUmVzb3VyY2VSZXF1ZXN0KCkgY29uc3Q7CkBA
IC0yMTgsNiArMjI1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBSZWZQdHI8Rm9y
bURhdGE+IG1faHR0cEJvZHk7CiAgICAgICAgIGJvb2wgbV9hbGxvd0Nvb2tpZXM7CiAgICAgICAg
IFJlc291cmNlUmVxdWVzdEJhc2U6OlRhcmdldFR5cGUgbV90YXJnZXRUeXBlOworICAgICAgICBi
b29sIG1fZG93bmxvYWRBc0Jsb2I7CiAgICAgfTsKICAgICAKICAgICB1bnNpZ25lZCBpbml0aWFs
aXplTWF4aW11bUhUVFBDb25uZWN0aW9uQ291bnRQZXJIb3N0KCk7CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY2hyb21pdW0vUmVzb3VyY2VSZXF1ZXN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL1Jlc291cmNlUmVxdWVzdC5oCShyZXZp
c2lvbiA2OTI0MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNvdXJj
ZVJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtODQsNiArODQsMTAgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICBpbnQgYXBwQ2FjaGVIb3N0SUQoKSBjb25zdCB7IHJldHVybiBtX2Fw
cENhY2hlSG9zdElEOyB9CiAgICAgICAgIHZvaWQgc2V0QXBwQ2FjaGVIb3N0SUQoaW50IGlkKSB7
IG1fYXBwQ2FjaGVIb3N0SUQgPSBpZDsgfQogCisgICAgICAgIC8vIElmIHRydWUsIHRoZSByZXNw
b25zZSBib2R5IHdpbGwgYmUgcHJvdmlkZWQgYXMgYSBmaWxlLgorICAgICAgICBib29sIGRvd25s
b2FkVG9GaWxlKCkgY29uc3QgeyByZXR1cm4gZG93bmxvYWRBc0Jsb2IoKTsgfQorICAgICAgICB2
b2lkIHNldERvd25sb2FkVG9GaWxlKGJvb2wgZG93bmxvYWQpIHsgc2V0RG93bmxvYWRBc0Jsb2Io
ZG93bmxvYWQpOyB9CisKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgUmVzb3Vy
Y2VSZXF1ZXN0QmFzZTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVt
L1Jlc291cmNlUmVzcG9uc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlc3BvbnNlLmNwcAkocmV2aXNpb24gNjkyNDApCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vUmVzb3VyY2VSZXNwb25zZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDE4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAor
Y29uc3QgU3RyaW5nJiBSZXNvdXJjZVJlc3BvbnNlOjpkb3dubG9hZEZpbGVQYXRoKCkgY29uc3QK
K3sKKyAgICBsYXp5SW5pdCgpOworICAgIHJldHVybiBtX2Rvd25sb2FkRmlsZVBhdGg7Cit9CisK
K3ZvaWQgUmVzb3VyY2VSZXNwb25zZTo6c2V0RG93bmxvYWRGaWxlUGF0aChjb25zdCBTdHJpbmcm
IHBhdGgpCit7CisgICAgbGF6eUluaXQoKTsKKyAgICBtX2Rvd25sb2FkRmlsZVBhdGggID0gcGF0
aDsKK30KKwogUGFzc093blB0cjxDcm9zc1RocmVhZFJlc291cmNlUmVzcG9uc2VEYXRhPiBSZXNv
dXJjZVJlc3BvbnNlOjpkb1BsYXRmb3JtQ29weURhdGEoUGFzc093blB0cjxDcm9zc1RocmVhZFJl
c291cmNlUmVzcG9uc2VEYXRhPiBkYXRhKSBjb25zdAogewogICAgIGRhdGEtPm1fYXBwQ2FjaGVJ
RCA9IG1fYXBwQ2FjaGVJRDsKQEAgLTM5LDYgKzUxLDcgQEAgUGFzc093blB0cjxDcm9zc1RocmVh
ZFJlc291cmNlUmVzcG9uc2VEYQogICAgIGRhdGEtPm1fd2FzQWx0ZXJuYXRlUHJvdG9jb2xBdmFp
bGFibGUgPSBtX3dhc0FsdGVybmF0ZVByb3RvY29sQXZhaWxhYmxlOwogICAgIGRhdGEtPm1fd2Fz
RmV0Y2hlZFZpYVByb3h5ID0gbV93YXNGZXRjaGVkVmlhUHJveHk7CiAgICAgZGF0YS0+bV9yZXNw
b25zZVRpbWUgPSBtX3Jlc3BvbnNlVGltZTsKKyAgICBkYXRhLT5tX2Rvd25sb2FkRmlsZVBhdGgg
PSBtX2Rvd25sb2FkRmlsZVBhdGg7CiAgICAgcmV0dXJuIGRhdGE7CiB9CiAKQEAgLTUzLDYgKzY2
LDcgQEAgdm9pZCBSZXNvdXJjZVJlc3BvbnNlOjpkb1BsYXRmb3JtQWRvcHQoUAogICAgIG1fd2Fz
QWx0ZXJuYXRlUHJvdG9jb2xBdmFpbGFibGUgPSBkYXRhLT5tX3dhc0FsdGVybmF0ZVByb3RvY29s
QXZhaWxhYmxlOwogICAgIG1fd2FzRmV0Y2hlZFZpYVByb3h5ID0gZGF0YS0+bV93YXNGZXRjaGVk
VmlhUHJveHk7CiAgICAgbV9yZXNwb25zZVRpbWUgPSBkYXRhLT5tX3Jlc3BvbnNlVGltZTsKKyAg
ICBtX2Rvd25sb2FkRmlsZVBhdGggPSBkYXRhLT5tX2Rvd25sb2FkRmlsZVBhdGg7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJv
bWl1bS9SZXNvdXJjZVJlc3BvbnNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2Nocm9taXVtL1Jlc291cmNlUmVzcG9uc2UuaAkocmV2aXNpb24gNjkyNDApCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vUmVzb3VyY2VSZXNwb25zZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05Niw2ICs5NiwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IGRvdWJsZSByZXNwb25zZVRpbWUoKSBjb25zdCB7IHJldHVybiBtX3Jlc3BvbnNlVGltZTsgfQog
ICAgICAgICB2b2lkIHNldFJlc3BvbnNlVGltZShkb3VibGUgcmVzcG9uc2VUaW1lKSB7IG1fcmVz
cG9uc2VUaW1lID0gcmVzcG9uc2VUaW1lOyB9CiAKKyAgICAgICAgLy8gSW5kaWNhdGVzIHRoZSBs
b2NhdGlvbiBvZiBhIGRvd25sb2FkZWQgcmVzcG9uc2UgaWYgdGhlCisgICAgICAgIC8vIFJlc291
cmNlUmVxdWVzdCBoYWQgdGhlIGRvd25sb2FkVG9GaWxlL0Jsb2IgZmxhZyBzZXQgdG8gdHJ1ZS4K
KyAgICAgICAgLy8gVGhlIGZpbGUgd2lsbCByZW1haW4gdmFsaWQgdW50aWwgdGhlIFJlc291cmNl
SGFuZGxlIHVzZWQKKyAgICAgICAgLy8gdG8gcmV0cmlldmUgdGhpcyBmaWxlIGhhcyBiZWVuIGRl
bGV0ZWQuCisgICAgICAgIGNvbnN0IFN0cmluZyYgZG93bmxvYWRGaWxlUGF0aCgpIGNvbnN0Owor
ICAgICAgICB2b2lkIHNldERvd25sb2FkRmlsZVBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKTsKKwog
ICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlQmFzZTsK
IApAQCAtMTQzLDYgKzE1MCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gVGhl
IHRpbWUgYXQgd2hpY2ggdGhlIHJlc3BvbnNlIGhlYWRlcnMgd2VyZSByZWNlaXZlZC4gIEZvciBj
YWNoZWQKICAgICAgICAgLy8gcmVzcG9uc2VzLCB0aGlzIHRpbWUgY291bGQgYmUgImZhciIgaW4g
dGhlIHBhc3QuCiAgICAgICAgIGRvdWJsZSBtX3Jlc3BvbnNlVGltZTsKKworICAgICAgICAvLyBU
aGUgcmVzdWx0aW5nIGRvd25sb2FkZWQgZmlsZSBwYXRoIGluIHRoZSByZXF1ZXN0LmRvd25sb2Fk
VG9GaWxlIGNhc2UuCisgICAgICAgIFN0cmluZyBtX2Rvd25sb2FkRmlsZVBhdGg7CiAgICAgfTsK
IAogICAgIHN0cnVjdCBDcm9zc1RocmVhZFJlc291cmNlUmVzcG9uc2VEYXRhIDogcHVibGljIENy
b3NzVGhyZWFkUmVzb3VyY2VSZXNwb25zZURhdGFCYXNlIHsKQEAgLTE1NSw2ICsxNjUsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgbV93YXNBbHRlcm5hdGVQcm90b2NvbEF2
YWlsYWJsZTsKICAgICAgICAgYm9vbCBtX3dhc0ZldGNoZWRWaWFQcm94eTsKICAgICAgICAgZG91
YmxlIG1fcmVzcG9uc2VUaW1lOworICAgICAgICBTdHJpbmcgbV9kb3dubG9hZEZpbGVQYXRoOwog
ICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUveG1sL1hNTEh0
dHBSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5j
cHAJKHJldmlzaW9uIDY5MjQwKQorKysgV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01OTMsNiArNTkzLDEwIEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmNy
ZWF0ZVJlcXVlc3QoRXhjZXAKICAgICBpZiAobV9yZXF1ZXN0SGVhZGVycy5zaXplKCkgPiAwKQog
ICAgICAgICByZXF1ZXN0LmFkZEhUVFBIZWFkZXJGaWVsZHMobV9yZXF1ZXN0SGVhZGVycyk7CiAK
KyNpZiBFTkFCTEUoWEhSX1JFU1BPTlNFX0JMT0IpCisgICAgcmVxdWVzdC5zZXREb3dubG9hZEFz
QmxvYihtX2FzQmxvYik7CisjZW5kaWYKKwogICAgIFRocmVhZGFibGVMb2FkZXJPcHRpb25zIG9w
dGlvbnM7CiAgICAgb3B0aW9ucy5zZW5kTG9hZENhbGxiYWNrcyA9IHRydWU7CiAgICAgb3B0aW9u
cy5zbmlmZkNvbnRlbnQgPSBmYWxzZTsKQEAgLTk2MiwxMCArOTY2LDYgQEAgdm9pZCBYTUxIdHRw
UmVxdWVzdDo6ZGlkRmluaXNoTG9hZGluZyh1bgogICAgIGlmIChtX2RlY29kZXIpCiAgICAgICAg
IG1fcmVzcG9uc2VUZXh0ICs9IG1fZGVjb2Rlci0+Zmx1c2goKTsKIAotI2lmIEVOQUJMRShYSFJf
UkVTUE9OU0VfQkxPQikKLSAgICAvLyBGSVhNRTogU2V0IG1fcmVzcG9uc2VCbG9iIHRvIHNvbWV0
aGluZyBoZXJlIGluIHRoZSBtX2FzQmxvYiBjYXNlLgotI2VuZGlmCi0KICNpZiBFTkFCTEUoSU5T
UEVDVE9SKQogICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3IgPSBzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKSkKICAgICAgICAgaW5zcGVj
dG9yLT5yZXNvdXJjZVJldHJpZXZlZEJ5WE1MSHR0cFJlcXVlc3QoaWRlbnRpZmllciwgbV9yZXNw
b25zZVRleHQsIG1fdXJsLCBtX2xhc3RTZW5kVVJMLCBtX2xhc3RTZW5kTGluZU51bWJlcik7CkBA
IC05ODEsNiArOTgxLDE5IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpZEZpbmlzaExvYWRpbmco
dW4KICAgICAgICAgZHJvcFByb3RlY3Rpb24oKTsKIH0KIAordm9pZCBYTUxIdHRwUmVxdWVzdDo6
ZGlkRmluaXNoTG9hZGluZ0Jsb2IodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBQYXNzUmVmUHRy
PEJsb2I+IGJsb2IpCit7CisjaWYgRU5BQkxFKFhIUl9SRVNQT05TRV9CTE9CKQorICAgIGlmICgh
bV9lcnJvcikKKyAgICAgICAgbV9yZXNwb25zZUJsb2IgPSBibG9iOworICAgIGRpZEZpbmlzaExv
YWRpbmcoaWRlbnRpZmllcik7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShpZGVudGlmaWVyKTsK
KyAgICBVTlVTRURfUEFSQU0oYmxvYik7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5k
aWYKK30KKwogdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlkU2VuZERhdGEodW5zaWduZWQgbG9uZyBs
b25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkKIHsK
ICAgICBpZiAoIW1fdXBsb2FkKQpAQCAtMTAxMSwxMyArMTAyNCwzMCBAQCB2b2lkIFhNTEh0dHBS
ZXF1ZXN0OjpkaWRSZWNlaXZlQXV0aGVudGljCiAKIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpZFJl
Y2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW4pCiB7CisgICAgZGlkUmVjZWl2ZURh
dGFDb21tb24oZmFsc2UsIGRhdGEsIGxlbik7Cit9CisKK3ZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRp
ZFJlY2VpdmVCbG9iRGF0YShpbnQgbGVuKQoreworI2lmIEVOQUJMRShYSFJfUkVTUE9OU0VfQkxP
QikKKyAgICBBU1NFUlQobGVuID49IDApOworICAgIGRpZFJlY2VpdmVEYXRhQ29tbW9uKHRydWUs
IDAsIGxlbik7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShsZW4pOworICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworI2VuZGlmCit9CisKK3ZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpZFJlY2VpdmVE
YXRhQ29tbW9uKGJvb2wgaXNCbG9iRGF0YSwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbikKK3sK
ICAgICBpZiAobV9lcnJvcikKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fc3RhdGUgPCBI
RUFERVJTX1JFQ0VJVkVEKQogICAgICAgICBjaGFuZ2VTdGF0ZShIRUFERVJTX1JFQ0VJVkVEKTsK
IAotICAgIGlmICghbV9kZWNvZGVyKSB7CisgICAgaWYgKGRhdGEgJiYgIW1fZGVjb2Rlcikgewor
ICAgICAgICBBU1NFUlQoIWlzQmxvYkRhdGEpOwogICAgICAgICBpZiAoIW1fcmVzcG9uc2VFbmNv
ZGluZy5pc0VtcHR5KCkpCiAgICAgICAgICAgICBtX2RlY29kZXIgPSBUZXh0UmVzb3VyY2VEZWNv
ZGVyOjpjcmVhdGUoInRleHQvcGxhaW4iLCBtX3Jlc3BvbnNlRW5jb2RpbmcpOwogICAgICAgICAv
LyBhbGxvdyBUZXh0UmVzb3VyY2VEZWNvZGVyIHRvIGxvb2sgaW5zaWRlIHRoZSBtX3Jlc3BvbnNl
IGlmIGl0J3MgWE1MIG9yIEhUTUwKQEAgLTEwMzEsMTMgKzEwNjEsMTUgQEAgdm9pZCBYTUxIdHRw
UmVxdWVzdDo6ZGlkUmVjZWl2ZURhdGEoY29ucwogICAgICAgICAgICAgbV9kZWNvZGVyID0gVGV4
dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKCJ0ZXh0L3BsYWluIiwgIlVURi04Iik7CiAgICAgfQog
Ci0gICAgaWYgKCFsZW4pCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoIWlzQmxvYkRhdGEpIHsK
KyAgICAgICAgaWYgKCFsZW4pCisgICAgICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobGVuID09
IC0xKQotICAgICAgICBsZW4gPSBzdHJsZW4oZGF0YSk7CisgICAgICAgIGlmIChsZW4gPT0gLTEp
IAorICAgICAgICAgICAgbGVuID0gc3RybGVuKGRhdGEpOwogCi0gICAgbV9yZXNwb25zZVRleHQg
Kz0gbV9kZWNvZGVyLT5kZWNvZGUoZGF0YSwgbGVuKTsKKyAgICAgICAgbV9yZXNwb25zZVRleHQg
Kz0gbV9kZWNvZGVyLT5kZWNvZGUoZGF0YSwgbGVuKTsKKyAgICB9CiAKICAgICBpZiAoIW1fZXJy
b3IpIHsKICAgICAgICAgbG9uZyBsb25nIGV4cGVjdGVkTGVuZ3RoID0gbV9yZXNwb25zZS5leHBl
Y3RlZENvbnRlbnRMZW5ndGgoKTsKSW5kZXg6IFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaAkocmV2aXNpb24gNjky
NDApCisrKyBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjcsMTEgKzEyNywxNSBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YSh1
bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRl
c1RvQmVTZW50KTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoY29uc3Qg
Y2hhciogZGF0YSwgaW50IGxlbmd0aFJlY2VpdmVkKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVj
ZWl2ZUJsb2JEYXRhKGludCBsZW5ndGhSZWNlaXZlZCk7CiAgICAgdmlydHVhbCB2b2lkIGRpZEZp
bmlzaExvYWRpbmcodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGlkRmluaXNoTG9hZGluZ0Jsb2IodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBQYXNzUmVmUHRy
PEJsb2I+IGJsb2IpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJy
b3ImKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbFJlZGlyZWN0Q2hlY2soKTsKICAgICB2aXJ0
dWFsIHZvaWQgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2FuY2VsbGF0aW9uKGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmKTsKIAorICAgIHZvaWQgZGlkUmVjZWl2ZURhdGFDb21tb24oYm9vbCBpc0Js
b2JEYXRhLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoUmVjZWl2ZWQpOworCiAgICAgU3Ry
aW5nIHJlc3BvbnNlTUlNRVR5cGUoKSBjb25zdDsKICAgICBib29sIHJlc3BvbnNlSXNYTUwoKSBj
b25zdDsKIApJbmRleDogV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA2OTI0MCkKKysrIFdlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMyBAQAorMjAxMC0xMC0w
NSAgTWljaGFlbCBOb3JkbWFuICA8bWljaGFlbG5AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgZ2V0dGlu
ZyB0aGUgcmVzdWx0IG9mIGEgcmVzb3VyY2UgcmVxdWVzdCBhcyBhIGJsb2IuCisgICAgICAgIElu
IENocm9tZSwgdGhpcyBmZWF0dXJlIGlzIGltcGxlbWVudGVkIGluIHRlcm1zIG9mIHRoZSAnZG93
bmxvYWRUb0ZpbGUnCisgICAgICAgIGZlYXR1cmUgb2YgdGhlIG5ldHdvcmsgc3RhY2suCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDcyMgorCisgICAg
ICAgICogc3JjL1Jlc291cmNlSGFuZGxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
SGFuZGxlSW50ZXJuYWw6OlJlc291cmNlSGFuZGxlSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlSGFuZGxlSW50ZXJuYWw6OmRpZERvd25sb2FkRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUludGVybmFsOjpkaWRGaW5pc2hMb2FkaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlSW50ZXJuYWw6OmRldGVybWluZUNvbnRl
bnRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlSW50ZXJuYWw6OmxvYWRS
ZXNvdXJjZVN5bmNocm9ub3VzbHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6
OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VI
YW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHlBc0Jsb2IpOgorICAgICAgICAqIHNyYy9X
ZWJVUkxSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVxdWVzdFByaXZhdGVJ
bXBsOjpXZWJVUkxSZXF1ZXN0UHJpdmF0ZUltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxS
ZXF1ZXN0Ojpkb3dubG9hZFRvRmlsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlcXVlc3Q6
OnNldERvd25sb2FkVG9GaWxlKToKKyAgICAgICAgKiBzcmMvV2ViVVJMUmVxdWVzdFByaXZhdGUu
aDoKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVxdWVzdFByaXZhdGU6OldlYlVSTFJlcXVlc3RQ
cml2YXRlKToKKyAgICAgICAgKiBzcmMvV2ViVVJMUmVzcG9uc2UuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJVUkxSZXNwb25zZVByaXZhdGVJbXBsOjpXZWJVUkxSZXNwb25zZVByaXZhdGVJbXBs
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVzcG9uc2U6OmRvd25sb2FkRmlsZVBhdGgpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXNwb25zZTo6c2V0RG93bmxvYWRGaWxlUGF0aCk6Cisg
ICAgICAgICogc3JjL1dlYlVSTFJlc3BvbnNlUHJpdmF0ZS5oOgorCiAyMDEwLTEwLTA1ICBKZXJl
bXkgT3Jsb3cgIDxqb3Jsb3dAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5h
dGUgQ2hhcGluLgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9SZXNvdXJjZUhhbmRsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9SZXNvdXJjZUhhbmRsZS5jcHAJKHJl
dmlzaW9uIDY5MjQwKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9SZXNvdXJjZUhhbmRsZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRs
ZS5oIgogCiAjaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKKyNpbmNsdWRlICJIVFRQUGFyc2Vy
cy5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlQ2xpZW50LmgiCiAjaW5jbHVkZSAiUmVzb3Vy
Y2VSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCkBAIC01OCw2ICs1OSw3IEBA
IHB1YmxpYzoKICAgICAgICAgOiBtX3JlcXVlc3QocmVxdWVzdCkKICAgICAgICAgLCBtX293bmVy
KDApCiAgICAgICAgICwgbV9jbGllbnQoY2xpZW50KQorICAgICAgICAsIG1fZG93bmxvYWRlZEZp
bGVMZW5ndGgoMCkKICAgICAgICAgLCBtX3N0YXRlKENvbm5lY3Rpb25TdGF0ZU5ldykKICAgICB7
CiAgICAgfQpAQCAtNzMsMTAgKzc1LDE5IEBAIHB1YmxpYzoKICAgICAgICAgV2ViVVJMTG9hZGVy
KiwgdW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFs
Qnl0ZXNUb0JlU2VudCk7CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShXZWJV
UkxMb2FkZXIqLCBjb25zdCBXZWJVUkxSZXNwb25zZSYpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRS
ZWNlaXZlRGF0YShXZWJVUkxMb2FkZXIqLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgZGF0YUxlbmd0
aCk7CisgICAgdmlydHVhbCB2b2lkIGRpZERvd25sb2FkRGF0YShXZWJVUkxMb2FkZXIqLCBpbnQg
ZGF0YUxlbmd0aCk7CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YShX
ZWJVUkxMb2FkZXIqLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgZGF0YUxlbmd0aCk7CiAgICAgdmly
dHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoV2ViVVJMTG9hZGVyKiwgZG91YmxlIGZpbmlzaFRp
bWUpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKFdlYlVSTExvYWRlciosIGNvbnN0IFdlYlVS
TEVycm9yJik7CiAKKyAgICBzdGF0aWMgU3RyaW5nIGRldGVybWluZUNvbnRlbnRUeXBlKGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iPiBsb2FkUmVz
b3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNv
dXJjZUVycm9yJiBlcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPGNoYXI+KiBk
YXRhKTsKKwogICAgIGVudW0gQ29ubmVjdGlvblN0YXRlIHsKICAgICAgICAgQ29ubmVjdGlvblN0
YXRlTmV3LAogICAgICAgICBDb25uZWN0aW9uU3RhdGVTdGFydGVkLApAQCAtOTEsNiArMTAyLDkg
QEAgcHVibGljOgogICAgIFJlc291cmNlSGFuZGxlKiBtX293bmVyOwogICAgIFJlc291cmNlSGFu
ZGxlQ2xpZW50KiBtX2NsaWVudDsKICAgICBPd25QdHI8V2ViVVJMTG9hZGVyPiBtX2xvYWRlcjsK
KyAgICBTdHJpbmcgbV9kb3dubG9hZGVkRmlsZVBhdGg7CisgICAgU3RyaW5nIG1fZG93bmxvYWRl
ZEZpbGVDb250ZW50VHlwZTsKKyAgICBsb25nIGxvbmcgbV9kb3dubG9hZGVkRmlsZUxlbmd0aDsK
IAogICAgIC8vIFVzZWQgZm9yIHNhbml0eSBjaGVja2luZyB0byBtYWtlIHN1cmUgd2UgZG9uJ3Qg
ZXhwZXJpZW5jZSBpbGxlZ2FsIHN0YXRlCiAgICAgLy8gdHJhbnNpdGlvbnMuCkBAIC0xNTYsNiAr
MTcwLDEwIEBAIHZvaWQgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6ZGlkUmVjZWl2ZVIKICAgICBp
ZiAoIWlzTXVsdGlwYXJ0ICYmICFpc1ZhbGlkU3RhdGVUcmFuc2l0aW9uKQogICAgICAgICBDUkFT
SCgpOwogICAgIG1fc3RhdGUgPSBDb25uZWN0aW9uU3RhdGVSZWNlaXZlZFJlc3BvbnNlOworICAg
IGlmIChtX3JlcXVlc3QuZG93bmxvYWRUb0ZpbGUoKSkgeworICAgICAgICBtX2Rvd25sb2FkZWRG
aWxlUGF0aCA9IHJlc3BvbnNlLnRvUmVzb3VyY2VSZXNwb25zZSgpLmRvd25sb2FkRmlsZVBhdGgo
KTsKKyAgICAgICAgbV9kb3dubG9hZGVkRmlsZUNvbnRlbnRUeXBlID0gZGV0ZXJtaW5lQ29udGVu
dFR5cGUocmVzcG9uc2UudG9SZXNvdXJjZVJlc3BvbnNlKCkpOworICAgIH0KICAgICBtX2NsaWVu
dC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKG1fb3duZXIsIHJlc3BvbnNlLnRvUmVzb3VyY2VSZXNwb25z
ZSgpKTsKIH0KIApAQCAtMTczLDYgKzE5MSwxNyBAQCB2b2lkIFJlc291cmNlSGFuZGxlSW50ZXJu
YWw6OmRpZFJlY2VpdmVECiAgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVEYXRhKG1fb3duZXIsIGRh
dGEsIGRhdGFMZW5ndGgsIGRhdGFMZW5ndGgpOwogfQogCit2b2lkIFJlc291cmNlSGFuZGxlSW50
ZXJuYWw6OmRpZERvd25sb2FkRGF0YShXZWJVUkxMb2FkZXIqLCBpbnQgZGF0YUxlbmd0aCkKK3sK
KyAgICBBU1NFUlQobV9jbGllbnQpOworICAgIEFTU0VSVChtX3JlcXVlc3QuZG93bmxvYWRUb0Zp
bGUoKSk7CisgICAgaWYgKG1fc3RhdGUgIT0gQ29ubmVjdGlvblN0YXRlUmVjZWl2ZWRSZXNwb25z
ZSAmJiBtX3N0YXRlICE9IENvbm5lY3Rpb25TdGF0ZVJlY2VpdmluZ0RhdGEpCisgICAgICAgIENS
QVNIKCk7CisgICAgbV9zdGF0ZSA9IENvbm5lY3Rpb25TdGF0ZVJlY2VpdmluZ0RhdGE7CisgICAg
bV9kb3dubG9hZGVkRmlsZUxlbmd0aCArPSBkYXRhTGVuZ3RoOworICAgIG1fY2xpZW50LT5kaWRS
ZWNlaXZlQmxvYkRhdGEobV9vd25lciwgZGF0YUxlbmd0aCk7Cit9CisKIHZvaWQgUmVzb3VyY2VI
YW5kbGVJbnRlcm5hbDo6ZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKFdlYlVSTExvYWRlciosIGNv
bnN0IGNoYXIqIGRhdGEsIGludCBkYXRhTGVuZ3RoKQogewogICAgIEFTU0VSVChtX2NsaWVudCk7
CkBAIC0xODgsNyArMjE3LDE4IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6ZGlkRmlu
aXNoTG8KICAgICBpZiAobV9zdGF0ZSAhPSBDb25uZWN0aW9uU3RhdGVSZWNlaXZlZFJlc3BvbnNl
ICYmIG1fc3RhdGUgIT0gQ29ubmVjdGlvblN0YXRlUmVjZWl2aW5nRGF0YSkKICAgICAgICAgQ1JB
U0goKTsKICAgICBtX3N0YXRlID0gQ29ubmVjdGlvblN0YXRlRmluaXNoZWRMb2FkaW5nOwotICAg
IG1fY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKG1fb3duZXIsIGZpbmlzaFRpbWUpOworICAgIGlm
IChtX3JlcXVlc3QuZG93bmxvYWRBc0Jsb2IoKSkgeworICAgICAgICBBU1NFUlQobV9yZXF1ZXN0
LmRvd25sb2FkVG9GaWxlKCkpOyAvLyBUb0ZpbGUgYW5kIEFzQmxvYiBhcmUgb25lIGFuZCB0aGUg
c2FtZSBmb3Igbm93LgorICAgICAgICBSZWZQdHI8QmxvYj4gZGF0YUFzQmxvYjsKKyAgICAgICAg
aWYgKCFtX2Rvd25sb2FkZWRGaWxlUGF0aC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIE93blB0
cjxCbG9iRGF0YT4gYmxvYkRhdGEgPSBCbG9iRGF0YTo6Y3JlYXRlKCk7CisgICAgICAgICAgICBi
bG9iRGF0YS0+c2V0Q29udGVudFR5cGUobV9kb3dubG9hZGVkRmlsZUNvbnRlbnRUeXBlKTsKKyAg
ICAgICAgICAgIGJsb2JEYXRhLT5hcHBlbmRGaWxlKG1fZG93bmxvYWRlZEZpbGVQYXRoKTsKKyAg
ICAgICAgICAgIGRhdGFBc0Jsb2IgPSBCbG9iOjpjcmVhdGUoYmxvYkRhdGEucmVsZWFzZSgpLCBt
X2Rvd25sb2FkZWRGaWxlTGVuZ3RoKTsKKyAgICAgICAgfQorICAgICAgICBtX2NsaWVudC0+ZGlk
RmluaXNoTG9hZGluZ0Jsb2IobV9vd25lciwgZmluaXNoVGltZSwgZGF0YUFzQmxvYik7CisgICAg
fSBlbHNlCisgICAgICAgIG1fY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKG1fb3duZXIsIGZpbmlz
aFRpbWUpOwogfQogCiB2b2lkIFJlc291cmNlSGFuZGxlSW50ZXJuYWw6OmRpZEZhaWwoV2ViVVJM
TG9hZGVyKiwgY29uc3QgV2ViVVJMRXJyb3ImIGVycm9yKQpAQCAtMTk4LDYgKzIzOCw1MSBAQCB2
b2lkIFJlc291cmNlSGFuZGxlSW50ZXJuYWw6OmRpZEZhaWwoV2ViCiAgICAgbV9jbGllbnQtPmRp
ZEZhaWwobV9vd25lciwgZXJyb3IpOwogfQogCisvLyBzdGF0aWMKK1N0cmluZyBSZXNvdXJjZUhh
bmRsZUludGVybmFsOjpkZXRlcm1pbmVDb250ZW50VHlwZShjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JiByZXNwb25zZSkKK3sKKyAgICBpZiAocmVzcG9uc2UuaXNIVFRQKCkpCisgICAgICAgIHJldHVy
biBleHRyYWN0TUlNRVR5cGVGcm9tTWVkaWFUeXBlKHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZCgi
Q29udGVudC1UeXBlIikpOworICAgIHJldHVybiByZXNwb25zZS5taW1lVHlwZSgpOworfQorCisv
LyBzdGF0aWMKK1Bhc3NSZWZQdHI8QmxvYj4gUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6bG9hZFJl
c291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RvcmVkQ3JlZGVu
dGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VFcnJvciYgZXJyb3Is
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9y
PGNoYXI+KiBkYXRhKQoreworICAgIE93blB0cjxXZWJVUkxMb2FkZXI+IGxvYWRlcih3ZWJLaXRD
bGllbnQoKS0+Y3JlYXRlVVJMTG9hZGVyKCkpOworICAgIEFTU0VSVChsb2FkZXIuZ2V0KCkpOwor
CisgICAgV3JhcHBlZFJlc291cmNlUmVxdWVzdCByZXF1ZXN0SW4ocmVxdWVzdCk7CisgICAgcmVx
dWVzdEluLnNldEFsbG93U3RvcmVkQ3JlZGVudGlhbHMoc3RvcmVkQ3JlZGVudGlhbHMgPT0gQWxs
b3dTdG9yZWRDcmVkZW50aWFscyk7CisgICAgV3JhcHBlZFJlc291cmNlUmVzcG9uc2UgcmVzcG9u
c2VPdXQocmVzcG9uc2UpOworICAgIFdlYlVSTEVycm9yIGVycm9yT3V0OworICAgIFdlYkRhdGEg
ZGF0YU91dDsKKyAgICBSZWZQdHI8QmxvYj4gZGF0YUFzQmxvYjsKKyAgICBsb25nIGxvbmcgbGVu
Z3RoT3V0ID0gNzc3NzsKKworICAgIC8vIFRPRE8obWljaGFlbG4pOiBTb21lIHdheSB0byBnZXQg
dGhlIGxlbmd0aE91dCBpbiB0aGUgYXNGaWxlIGNhc2UuCisgICAgbG9hZGVyLT5sb2FkU3luY2hy
b25vdXNseShyZXF1ZXN0SW4sIHJlc3BvbnNlT3V0LCBlcnJvck91dCwgZGF0YU91dCk7CisKKyAg
ICBlcnJvciA9IGVycm9yT3V0OworICAgIGlmICghcmVxdWVzdC5kb3dubG9hZEFzQmxvYigpKSB7
CisgICAgICAgIEFTU0VSVChkYXRhKTsKKyAgICAgICAgZGF0YS0+Y2xlYXIoKTsKKyAgICAgICAg
ZGF0YS0+YXBwZW5kKGRhdGFPdXQuZGF0YSgpLCBkYXRhT3V0LnNpemUoKSk7CisgICAgfSBlbHNl
IGlmICghcmVzcG9uc2UuZG93bmxvYWRGaWxlUGF0aCgpLmlzRW1wdHkoKSkgeworICAgICAgICBP
d25QdHI8QmxvYkRhdGE+IGJsb2JEYXRhID0gQmxvYkRhdGE6OmNyZWF0ZSgpOworICAgICAgICBi
bG9iRGF0YS0+c2V0Q29udGVudFR5cGUoZGV0ZXJtaW5lQ29udGVudFR5cGUocmVzcG9uc2UpKTsK
KyAgICAgICAgYmxvYkRhdGEtPmFwcGVuZEZpbGUocmVzcG9uc2UuZG93bmxvYWRGaWxlUGF0aCgp
KTsKKyAgICAgICAgZGF0YUFzQmxvYiA9IEJsb2I6OmNyZWF0ZShibG9iRGF0YS5yZWxlYXNlKCks
IGxlbmd0aE91dCk7CisgICAgfQorICAgIHJldHVybiBkYXRhQXNCbG9iOworfQorCisKIC8vIFJl
c291cmNlSGFuZGxlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIAogUmVzb3VyY2VIYW5kbGU6OlJlc291cmNlSGFuZGxlKGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwKQEAgLTI5NSwyMCArMzgwLDIwIEBAIHZvaWQgUmVz
b3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm8KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiYg
ZGF0YSkKIHsKLSAgICBPd25QdHI8V2ViVVJMTG9hZGVyPiBsb2FkZXIod2ViS2l0Q2xpZW50KCkt
PmNyZWF0ZVVSTExvYWRlcigpKTsKLSAgICBBU1NFUlQobG9hZGVyLmdldCgpKTsKLQotICAgIFdy
YXBwZWRSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdEluKHJlcXVlc3QpOwotICAgIHJlcXVlc3RJbi5z
ZXRBbGxvd1N0b3JlZENyZWRlbnRpYWxzKHN0b3JlZENyZWRlbnRpYWxzID09IEFsbG93U3RvcmVk
Q3JlZGVudGlhbHMpOwotICAgIFdyYXBwZWRSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlT3V0KHJl
c3BvbnNlKTsKLSAgICBXZWJVUkxFcnJvciBlcnJvck91dDsKLSAgICBXZWJEYXRhIGRhdGFPdXQ7
Ci0KLSAgICBsb2FkZXItPmxvYWRTeW5jaHJvbm91c2x5KHJlcXVlc3RJbiwgcmVzcG9uc2VPdXQs
IGVycm9yT3V0LCBkYXRhT3V0KTsKKyAgICBBU1NFUlQoIXJlcXVlc3QuZG93bmxvYWRBc0Jsb2Io
KSk7CisgICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6bG9hZFJlc291cmNlU3luY2hyb25vdXNs
eShjb250ZXh0LCByZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFscywgZXJyb3IsIHJlc3BvbnNlLCAm
ZGF0YSk7Cit9CiAKLSAgICBlcnJvciA9IGVycm9yT3V0OwotICAgIGRhdGEuY2xlYXIoKTsKLSAg
ICBkYXRhLmFwcGVuZChkYXRhT3V0LmRhdGEoKSwgZGF0YU91dC5zaXplKCkpOworLy8gc3RhdGlj
CitQYXNzUmVmUHRyPEJsb2I+IFJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91
c2x5QXNCbG9iKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdG9yZWRDcmVkZW50
aWFscyBzdG9yZWRDcmVkZW50aWFscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUmVzb3VyY2VFcnJvciYgZXJyb3IsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQor
eworICAgIEFTU0VSVChyZXF1ZXN0LmRvd25sb2FkQXNCbG9iKCkpOworICAgIHJldHVybiBSZXNv
dXJjZUhhbmRsZUludGVybmFsOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KGNvbnRleHQsIHJl
cXVlc3QsIHN0b3JlZENyZWRlbnRpYWxzLCBlcnJvciwgcmVzcG9uc2UsIDApOwogfQogCiAvLyBz
dGF0aWMKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVxdWVzdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXF1ZXN0LmNwcAkocmV2aXNpb24g
NjkyNDApCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlVSTFJlcXVlc3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01Niw3ICs1Niw2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1fcmVzb3Vy
Y2VSZXF1ZXN0ID0gJm1fcmVzb3VyY2VSZXF1ZXN0QWxsb2NhdGlvbjsKICAgICAgICAgbV9hbGxv
d1N0b3JlZENyZWRlbnRpYWxzID0gcC0+bV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzOwotICAgICAg
ICBtX2Rvd25sb2FkVG9GaWxlID0gcC0+bV9kb3dubG9hZFRvRmlsZTsKICAgICB9CiAKICAgICB2
aXJ0dWFsIHZvaWQgZGlzcG9zZSgpIHsgZGVsZXRlIHRoaXM7IH0KQEAgLTI1OSwxMiArMjU4LDEy
IEBAIHZvaWQgV2ViVVJMUmVxdWVzdDo6c2V0QXBwQ2FjaGVIb3N0SUQoaW4KIAogYm9vbCBXZWJV
UkxSZXF1ZXN0Ojpkb3dubG9hZFRvRmlsZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcHJpdmF0
ZS0+bV9kb3dubG9hZFRvRmlsZTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5tX3Jlc291cmNlUmVx
dWVzdC0+ZG93bmxvYWRUb0ZpbGUoKTsKIH0KIAogdm9pZCBXZWJVUkxSZXF1ZXN0OjpzZXREb3du
bG9hZFRvRmlsZShib29sIGRvd25sb2FkVG9GaWxlKQogewotICAgIG1fcHJpdmF0ZS0+bV9kb3du
bG9hZFRvRmlsZSA9IGRvd25sb2FkVG9GaWxlOworICAgIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJl
cXVlc3QtPnNldERvd25sb2FkVG9GaWxlKGRvd25sb2FkVG9GaWxlKTsKIH0KIAogUmVzb3VyY2VS
ZXF1ZXN0JiBXZWJVUkxSZXF1ZXN0Ojp0b011dGFibGVSZXNvdXJjZVJlcXVlc3QoKQpJbmRleDog
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXF1ZXN0UHJpdmF0ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVxdWVzdFByaXZhdGUuaAkocmV2aXNpb24gNjky
NDApCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlVSTFJlcXVlc3RQcml2YXRlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM5LDE3ICszOSwxMyBAQCBjbGFzcyBXZWJVUkxSZXF1ZXN0UHJpdmF0ZSB7
CiBwdWJsaWM6CiAgICAgV2ViVVJMUmVxdWVzdFByaXZhdGUoKQogICAgICAgICA6IG1fcmVzb3Vy
Y2VSZXF1ZXN0KDApCi0gICAgICAgICwgbV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzKHRydWUpCi0g
ICAgICAgICwgbV9kb3dubG9hZFRvRmlsZShmYWxzZSkgeyB9CisgICAgICAgICwgbV9hbGxvd1N0
b3JlZENyZWRlbnRpYWxzKHRydWUpIHsgfQogCiAgICAgLy8gQ2FsbGVkIGJ5IFdlYlVSTFJlcXVl
c3Qgd2hlbiBpdCBubyBsb25nZXIgbmVlZHMgdGhpcyBvYmplY3QuCiAgICAgdmlydHVhbCB2b2lk
IGRpc3Bvc2UoKSA9IDA7CiAKICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QqIG1fcmVzb3Vy
Y2VSZXF1ZXN0OwogICAgIGJvb2wgbV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzOwotCi0gICAgLy8g
RklYTUU6IE1vdmUgdGhpcyB0byBSZXNvdXJjZVJlcXVlc3Qgb25jZSB3ZSBoYXZlIGFuIGludGVy
bmFsIGNvbnN1bWVyLgotICAgIGJvb2wgbV9kb3dubG9hZFRvRmlsZTsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXNwb25zZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXNwb25zZS5jcHAJ
KHJldmlzaW9uIDY5MjQwKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXNwb25zZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDYgQEAgcHVibGljOgogICAgICAgICA6IG1f
cmVzb3VyY2VSZXNwb25zZUFsbG9jYXRpb24oKnAtPm1fcmVzb3VyY2VSZXNwb25zZSkKICAgICB7
CiAgICAgICAgIG1fcmVzb3VyY2VSZXNwb25zZSA9ICZtX3Jlc291cmNlUmVzcG9uc2VBbGxvY2F0
aW9uOwotICAgICAgICBtX2Rvd25sb2FkRmlsZVBhdGggPSBwLT5tX2Rvd25sb2FkRmlsZVBhdGg7
CiAgICAgfQogCiAgICAgdmlydHVhbCB2b2lkIGRpc3Bvc2UoKSB7IGRlbGV0ZSB0aGlzOyB9CkBA
IC0zNzUsMTIgKzM3NCwxMiBAQCB2b2lkIFdlYlVSTFJlc3BvbnNlOjpzZXRJc011bHRpcGFydFBh
eWxvCiAKIFdlYlN0cmluZyBXZWJVUkxSZXNwb25zZTo6ZG93bmxvYWRGaWxlUGF0aCgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9kb3dubG9hZEZpbGVQYXRoOworICAgIHJldHVy
biBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZS0+ZG93bmxvYWRGaWxlUGF0aCgpOwogfQog
CiB2b2lkIFdlYlVSTFJlc3BvbnNlOjpzZXREb3dubG9hZEZpbGVQYXRoKGNvbnN0IFdlYlN0cmlu
ZyYgZG93bmxvYWRGaWxlUGF0aCkKIHsKLSAgICBtX3ByaXZhdGUtPm1fZG93bmxvYWRGaWxlUGF0
aCA9IGRvd25sb2FkRmlsZVBhdGg7CisgICAgbV9wcml2YXRlLT5tX3Jlc291cmNlUmVzcG9uc2Ut
PnNldERvd25sb2FkRmlsZVBhdGgoZG93bmxvYWRGaWxlUGF0aCk7CiB9CiAKIHZvaWQgV2ViVVJM
UmVzcG9uc2U6OmFzc2lnbihXZWJVUkxSZXNwb25zZVByaXZhdGUqIHApCkluZGV4OiBXZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlVSTFJlc3BvbnNlUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVzcG9uc2VQcml2YXRlLmgJKHJldmlzaW9uIDY5MjQwKQor
KysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXNwb25zZVByaXZhdGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNDYsOSArNDYsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpc3Bvc2Uo
KSA9IDA7CiAKICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlKiBtX3Jlc291cmNlUmVzcG9u
c2U7Ci0KLSAgICAvLyBGSVhNRTogTW92ZSB0aGlzIHRvIFJlc291cmNlUmVzcG9uc2Ugb25jZSB3
ZSBoYXZlIGFuIGludGVybmFsIGNvbnN1bWVyLgotICAgIFdlYlN0cmluZyBtX2Rvd25sb2FkRmls
ZVBhdGg7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>
<flag name="review"
          id="59782"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70195</attachid>
            <date>2010-10-07 19:49:29 -0700</date>
            <delta_ts>2010-10-07 20:12:02 -0700</delta_ts>
            <desc>downloadAsBlob</desc>
            <filename>downloadAsBlob6.txt</filename>
            <type>text/plain</type>
            <size>67979</size>
            <attacher name="Michael Nordman">michaeln</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTM2NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTA1IEBACisyMDEwLTEwLTA1ICBNaWNoYWVsIE5vcmRtYW4gIDxtaWNoYWVsbkBn
b29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZCBzdXBwb3J0IGZvciBnZXR0aW5nIHRoZSByZXN1bHQgb2YgYSByZXNvdXJjZSByZXF1
ZXN0IGFzIGEgYmxvYiwKKyAgICAgICAgYW5kIHVzZSB0aGF0IGNhcGFiaWxpdHkgaW4gc3VwcG9y
dCBvZiBYbWxIdHRwUmVxdWVzdC5yZXNwb25zZUJsb2IuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDcyMgorICAgICAgICAqIFJlc291cmNlSGFuZGxl
IGtub3dzIGhvdyB0byBkZWxpdmVyIGEgcmVzcG9uc2UgYXMgYSBibG9iLiBUbyBhc2sgaXQgdG8g
ZG8gc28sCisgICAgICAgICAgY2FsbCByZXF1ZXN0LnNldERvd25sb2FkQXNCbG9iKHRydWUpIHBy
aW9yIHRvIHN0YXJ0aW5nIGFuIGFzeW5jIFJlc291cmNlSGFuZGxlLAorICAgICAgICAgIG9yIGNh
bGwgbG9hZFJlc291cmNlU3luY2hyb25vdXNseUFzQmxvYigpIGZvciB0aGUgc3luYyBjYXNlLgor
ICAgICAgICAqIFJlc291cmNlSGFuZGxlQ2xpZW50IGhhcyBuZXcgaW50ZXJmYWNlcyBmb3IgdXNl
IGluIHRoZSBhc3luYyBjYXNlLgorICAgICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVC
bG9iRGF0YShSZXNvdXJjZUhhbmRsZSosIGludCk7ICAvLyBubyBkYXRhIHB0ciBpcyBwcm92aWRl
ZAorICAgICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmdCbG9iKFJlc291cmNl
SGFuZGxlKiwgZG91YmxlIC8qZmluaXNoVGltZSovLCBQYXNzUmVmUHRyPEJsb2I+KTsKKyAgICAg
ICAgKiBUaHJlYWRhYmxlTG9hZGVyIGFsc28ga25vd3MgaG93IHRvIGRlbGl2ZXIgYSByZXNwb25z
ZSBhcyBhIGJsb2I7IGFuZAorICAgICAgICAgIHNpbWlsYXJseSwgdGhlIFRocmVhZGFibGVMb2Fk
ZXJDbGllbnQgaGFzICBncm93biB0d28gbmV3IGNhbGxiYWNrIG1ldGhvZHMuCisgICAgICAgICog
RnJhbWVMb2FkZXIgaGFzIGFsc28gZ3Jvd24gYSBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5QXNC
bG9iKCkgbWV0aG9kLgorICAgICAgICAqIFhtbEh0dHBSZXF1ZXN0IGlzIGEgVGhyZWFkYWJsZUxv
YWRlckNsaWVudCB3aGljaCB1c2VzIHJlcXVlc3Quc2V0RG93bmxvYWRBc0Jsb2IoKSBhbmQKKyAg
ICAgICAgICByZWNlaXZlcyB0aGUgcmVzdWx0IGluIGRpZEZpbmlzaExvYWRpbmdCbG9iKCkuCisg
ICAgICAgICogVGhlcmUncyBhIGZhaXIgYW1vdW50IG9mIG1lY2hhbmljYWwgcGx1bWJpbmcgdGhy
b3VnaG91dCAidGhlIGxvYWRlciIgdG8gZ2V0IHRoZSBjbGllbnQKKyAgICAgICAgICBtZXRob2Qg
Y2FsbHMgZnJvbSB0aGUgcmVzb3VyY2UgaGFuZGxlIGFsbCB0aGUgd2F5IHRocnUgdG8gdGhlIHRo
cmVhZGFibGUgbG9hZGVyIGNsaWVudC4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgZmVh
dHVyZSBpc24ndCBmdW5jdGlvbmFsIHlldCBpbiBhbnkgcG9ydC4KKworICAgICAgICAqIGxvYWRl
ci9Eb2N1bWVudExvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6
c3Vic3RpdHV0ZVJlc291cmNlRGVsaXZlcnlUaW1lckZpcmVkKToKKyAgICAgICAgKiBsb2FkZXIv
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
VGhyZWFkYWJsZUxvYWRlcjo6ZGlkUmVjZWl2ZUJsb2JEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZ0Jsb2IpOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVxdWVzdCk6CisgICAg
ICAgICogbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oOgorICAgICAgICAqIGxvYWRl
ci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZFJl
c291cmNlU3luY2hyb25vdXNseSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9h
ZFJlc291cmNlU3luY2hyb25vdXNseUFzQmxvYik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxv
YWRlcjo6cHJlcGFyZVN5bmNSZXFldXN0KToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIu
aDoKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmdCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nT25lUGFydCk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUxvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUJsb2JEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YUNvbW1vbik6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUxvYWRlcjo6Y3JlYXRlQXN5bmNGaWxlU3RyZWFtKToKKyAgICAgICAgKiBsb2FkZXIvUmVz
b3VyY2VMb2FkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyOjpkaWRSZWNl
aXZlQmxvYkRhdGEpOgorICAgICAgICAqIGxvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUJsb2JEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OlN1YnJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OlN1YnJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nQmxv
Yik6CisgICAgICAgIChXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGlu
Z0NvbW1vbik6CisgICAgICAgICogbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmg6CisgICAgICAg
ICogbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyQ2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpT
dWJyZXNvdXJjZUxvYWRlckNsaWVudDo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6U3VicmVzb3VyY2VMb2FkZXJDbGllbnQ6OmRpZFJlY2VpdmVCbG9iRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlckNsaWVudDo6ZGlkRmluaXNoTG9hZGluZ0Jsb2Ip
OgorICAgICAgICAqIGxvYWRlci9UaHJlYWRhYmxlTG9hZGVyQ2xpZW50Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpUaHJlYWRhYmxlTG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpUaHJlYWRhYmxlTG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlQmxvYkRhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6VGhyZWFkYWJsZUxvYWRlckNsaWVudDo6ZGlkRmluaXNoTG9hZGlu
Z0Jsb2IpOgorICAgICAgICAqIGxvYWRlci9UaHJlYWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBlci5o
OgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXI6OmRpZFJl
Y2VpdmVCbG9iRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlTG9hZGVyQ2xpZW50
V3JhcHBlcjo6ZGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxl
TG9hZGVyQ2xpZW50V3JhcHBlcjo6ZGlkRmluaXNoTG9hZGluZ0Jsb2IpOgorICAgICAgICAqIGxv
YWRlci9Xb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ondvcmtl
ckNvbnRleHREaWRSZWNlaXZlQmxvYkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhy
ZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEJyaWRnZTo6ZGlkUmVjZWl2ZUJsb2JEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2U6
OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6d29ya2VyQ29udGV4dERpZEZp
bmlzaExvYWRpbmdCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVMb2Fk
ZXI6Ok1haW5UaHJlYWRCcmlkZ2U6OmRpZEZpbmlzaExvYWRpbmdCbG9iKToKKyAgICAgICAgKiBs
b2FkZXIvV29ya2VyVGhyZWFkYWJsZUxvYWRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VIYW5kbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6
OmNhY2hlTWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmxvYWRS
ZXNvdXJjZVN5bmNocm9ub3VzbHlBc0Jsb2IpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VIYW5kbGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFu
ZGxlQ2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUNsaWVudDo6ZGlk
UmVjZWl2ZUJsb2JEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ2xpZW50
OjpkaWRGaW5pc2hMb2FkaW5nQmxvYik6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNv
dXJjZVJlcXVlc3RCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJh
c2U6OmFkb3B0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OmNvcHlE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmVxdWFsSWdub3JpbmdIZWFkZXJGaWVsZHMpOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6ZG93bmxvYWRBc0Jsb2IpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6c2V0RG93bmxvYWRBc0Jsb2IpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlcXVlc3QuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6ZG93bmxvYWRUb0ZpbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0OjpzZXREb3dubG9hZFRvRmlsZSk6CisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlc3BvbnNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2U6OmRvd25sb2FkRmlsZVBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZTo6c2V0RG93bmxvYWRGaWxlUGF0aCk6CisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlc3BvbnNlLmg6CisgICAg
ICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBS
ZXF1ZXN0OjpjcmVhdGVSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0
OjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0Ojpk
aWRGaW5pc2hMb2FkaW5nQmxvYik6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6
ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmRpZFJl
Y2VpdmVCbG9iRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6ZGlkUmVj
ZWl2ZURhdGFDb21tb24pOgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5oOgorCiAyMDEw
LTEwLTA3ICBDcmlzIE5lY2thciAgPGNkbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovY29weUZvcndh
cmRpbmdIZWFkZXJzLmNtZAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL2Nv
cHlGb3J3YXJkaW5nSGVhZGVycy5jbWQJKHJldmlzaW9uIDY5MzY2KQorKysgV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9jb3B5Rm9yd2FyZGluZ0hlYWRlcnMuY21kCSh3b3JraW5nIGNvcHkpCkBAIC0x
OSw2ICsxOSw3IEBAIHhjb3B5IC95IC9kICIlUHJvamVjdERpciUuLlxjb25maWcuaCIgIiUKIHhj
b3B5IC95IC9kICIlV2ViS2l0T3V0cHV0RGlyJVxvYmpcV2ViQ29yZVxEZXJpdmVkU291cmNlc1wq
LmgiICIlV2ViS2l0T3V0cHV0RGlyJVxpbmNsdWRlXFdlYkNvcmUiCiB4Y29weSAveSAvZCAiJVBy
b2plY3REaXIlLi5cYWNjZXNzaWJpbGl0eVwqLmgiICIlV2ViS2l0T3V0cHV0RGlyJVxpbmNsdWRl
XFdlYkNvcmUiCiB4Y29weSAveSAvZCAiJVByb2plY3REaXIlLi5cYWNjZXNzaWJpbGl0eVx3aW5c
Ki5oIiAiJVdlYktpdE91dHB1dERpciVcaW5jbHVkZVxXZWJDb3JlIgoreGNvcHkgL3kgL2QgIiVQ
cm9qZWN0RGlyJS4uXGZpbGVhcGlcKi5oIiAiJVdlYktpdE91dHB1dERpciVcaW5jbHVkZVxXZWJD
b3JlIgogeGNvcHkgL3kgL2QgIiVQcm9qZWN0RGlyJS4uXGluc3BlY3RvclwqLmgiICIlV2ViS2l0
T3V0cHV0RGlyJVxpbmNsdWRlXFdlYkNvcmUiCiB4Y29weSAveSAvZCAiJVByb2plY3REaXIlLi5c
bG9hZGVyXCouaCIgIiVXZWJLaXRPdXRwdXREaXIlXGluY2x1ZGVcV2ViQ29yZSIKIHhjb3B5IC95
IC9kICIlUHJvamVjdERpciUuLlxsb2FkZXJcYXBwY2FjaGVcKi5oIiAiJVdlYktpdE91dHB1dERp
ciVcaW5jbHVkZVxXZWJDb3JlIgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDY5MzY2KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTc0NSw3ICs3NDUsNyBAQAogCQky
RUQ2MDlCQzExNDVCMDcxMDBDODY4NEUgLyogRE9NRm9ybURhdGEuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVENjA5QkExMTQ1QjA3MTAwQzg2ODRF
IC8qIERPTUZvcm1EYXRhLmNwcCAqLzsgfTsKIAkJMkVENjA5QkQxMTQ1QjA3MTAwQzg2ODRFIC8q
IERPTUZvcm1EYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyRUQ2MDlCQjExNDVCMDcxMDBDODY4NEUgLyogRE9NRm9ybURhdGEuaCAqLzsgfTsKIAkJ
MkVERUYxRjMxMjFCMEVGQzAwNzI2REIyIC8qIEJsb2JEYXRhLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFREVGMUVEMTIxQjBFRkMwMDcyNkRCMiAv
KiBCbG9iRGF0YS5jcHAgKi87IH07Ci0JCTJFREVGMUY0MTIxQjBFRkMwMDcyNkRCMiAvKiBCbG9i
RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVE
RUYxRUUxMjFCMEVGQzAwNzI2REIyIC8qIEJsb2JEYXRhLmggKi87IH07CisJCTJFREVGMUY0MTIx
QjBFRkMwMDcyNkRCMiAvKiBCbG9iRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMkVERUYxRUUxMjFCMEVGQzAwNzI2REIyIC8qIEJsb2JEYXRhLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkVERUYx
RjUxMjFCMEVGQzAwNzI2REIyIC8qIEJsb2JSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVERUYxRUYxMjFCMEVGQzAwNzI2REIyIC8qIEJs
b2JSZWdpc3RyeS5oICovOyB9OwogCQkyRURFRjFGNjEyMUIwRUZDMDA3MjZEQjIgLyogQmxvYlJl
Z2lzdHJ5SW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyRURFRjFGMDEyMUIwRUZDMDA3MjZEQjIgLyogQmxvYlJlZ2lzdHJ5SW1wbC5jcHAgKi87
IH07CiAJCTJFREVGMUY3MTIxQjBFRkMwMDcyNkRCMiAvKiBCbG9iUmVnaXN0cnlJbXBsLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRURFRjFGMTEyMUIw
RUZDMDA3MjZEQjIgLyogQmxvYlJlZ2lzdHJ5SW1wbC5oICovOyB9OwpAQCAtMjg2OSw3ICsyODY5
LDcgQEAKIAkJOTczRTMyNTcxMDg4M0I3QzAwNUJDNDkzIC8qIFJlc291cmNlTG9hZE5vdGlmaWVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzNFMzI1
NTEwODgzQjdDMDA1QkM0OTMgLyogUmVzb3VyY2VMb2FkTm90aWZpZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5NzZENkM3NzEyMkI4QTNEMDAx
RkQxRjcgLyogQXN5bmNGaWxlV3JpdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5NzZENkM1ODEyMkI4QTNEMDAxRkQxRjcgLyogQXN5bmNGaWxlV3Jp
dGVyLmggKi87IH07CiAJCTk3NkQ2Qzc4MTIyQjhBM0QwMDFGRDFGNyAvKiBCbG9iLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3NkQ2QzU5MTIyQjhB
M0QwMDFGRDFGNyAvKiBCbG9iLmNwcCAqLzsgfTsKLQkJOTc2RDZDNzkxMjJCOEEzRDAwMUZEMUY3
IC8qIEJsb2IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDk3NkQ2QzVBMTIyQjhBM0QwMDFGRDFGNyAvKiBCbG9iLmggKi87IH07CisJCTk3NkQ2Qzc5MTIy
QjhBM0QwMDFGRDFGNyAvKiBCbG9iLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5NzZENkM1QTEyMkI4QTNEMDAxRkQxRjcgLyogQmxvYi5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTk3NkQ2QzdCMTIyQjhB
M0QwMDFGRDFGNyAvKiBCbG9iQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5NzZENkM1QzEyMkI4QTNEMDAxRkQxRjcgLyogQmxvYkJ1aWxk
ZXIuY3BwICovOyB9OwogCQk5NzZENkM3QzEyMkI4QTNEMDAxRkQxRjcgLyogQmxvYkJ1aWxkZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3NkQ2QzVE
MTIyQjhBM0QwMDFGRDFGNyAvKiBCbG9iQnVpbGRlci5oICovOyB9OwogCQk5NzZENkM3RTEyMkI4
QTNEMDAxRkQxRjcgLyogQmxvYlVSTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5NzZENkM1RjEyMkI4QTNEMDAxRkQxRjcgLyogQmxvYlVSTC5jcHAg
Ki87IH07CkBAIC0yMTE1MCw3ICsyMTE1MCw2IEBACiAJCQlpc2EgPSBQQlhQcm9qZWN0OwogCQkJ
YnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDE0OUMyODQzMDg5MDJCMTEwMDhBOUVGQyAvKiBCdWls
ZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgIldlYkNvcmUiICovOwogCQkJY29t
cGF0aWJpbGl0eVZlcnNpb24gPSAiWGNvZGUgMi40IjsKLQkJCWRldmVsb3BtZW50UmVnaW9uID0g
RW5nbGlzaDsKIAkJCWhhc1NjYW5uZWRGb3JFbmNvZGluZ3MgPSAxOwogCQkJa25vd25SZWdpb25z
ID0gKAogCQkJCUVuZ2xpc2gsCkluZGV4OiBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCShyZXZp
c2lvbiA2OTM2NikKKysrIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTYyLDcgKzU2Miw4IEBAIHZvaWQgRG9jdW1lbnRMb2FkZXI6OnN1YnN0aXR1
dGVSZXNvdXJjZUQKICAgICAgICAgCiAgICAgICAgIGlmIChyZXNvdXJjZSkgewogICAgICAgICAg
ICAgU2hhcmVkQnVmZmVyKiBkYXRhID0gcmVzb3VyY2UtPmRhdGEoKTsKLSAgICAgICAgCisKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBXcmFwIGEgYmxvYiBhcm91bmQgdGhlIGRhdGEgaW4gdGhlIGRv
d25sb2FkQXNCbG9iIGNhc2UuCiAgICAgICAgICAgICBsb2FkZXItPmRpZFJlY2VpdmVSZXNwb25z
ZShyZXNvdXJjZS0+cmVzcG9uc2UoKSk7CiAgICAgICAgICAgICBsb2FkZXItPmRpZFJlY2VpdmVE
YXRhKGRhdGEtPmRhdGEoKSwgZGF0YS0+c2l6ZSgpLCBkYXRhLT5zaXplKCksIHRydWUpOwogICAg
ICAgICAgICAgbG9hZGVyLT5kaWRGaW5pc2hMb2FkaW5nKDApOwpJbmRleDogV2ViQ29yZS9sb2Fk
ZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xv
YWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwCShyZXZpc2lvbiA2OTM2NikKKysrIFdl
YkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIyOCw2ICsyMjgsMTcgQEAgdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZFJl
Y2VpdgogICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlRGF0YShkYXRhLCBsZW5ndGhSZWNlaXZlZCk7
CiB9CiAKK3ZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRSZWNlaXZlQmxvYkRhdGEo
U3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgaW50IGxlbmd0aFJlY2VpdmVkKQoreworICAgIEFT
U0VSVChtX2NsaWVudCk7CisgICAgQVNTRVJUX1VOVVNFRChsb2FkZXIsIGxvYWRlciA9PSBtX2xv
YWRlcik7CisKKyAgICBpZiAobV9hY3R1YWxSZXF1ZXN0KQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX2NsaWVudC0+ZGlkUmVjZWl2ZUJsb2JEYXRhKGxlbmd0aFJlY2VpdmVkKTsKK30KKwogdm9p
ZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcoU3VicmVzb3VyY2VM
b2FkZXIqIGxvYWRlcikKIHsKICAgICBBU1NFUlQobG9hZGVyID09IG1fbG9hZGVyKTsKQEAgLTIz
NSwxNCArMjQ2LDMzIEBAIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRGaW5pc2gK
ICAgICBkaWRGaW5pc2hMb2FkaW5nKGxvYWRlci0+aWRlbnRpZmllcigpKTsKIH0KIAordm9pZCBE
b2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmdCbG9iKFN1YnJlc291cmNl
TG9hZGVyKiBsb2FkZXIsIEJsb2IqIGJsb2IpCit7CisgICAgQVNTRVJUKGxvYWRlciA9PSBtX2xv
YWRlcik7CisgICAgQVNTRVJUKG1fY2xpZW50KTsKKyAgICBkaWRGaW5pc2hMb2FkaW5nQmxvYihs
b2FkZXItPmlkZW50aWZpZXIoKSwgYmxvYik7Cit9CisKIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxl
TG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikKIHsKICAg
ICBpZiAobV9hY3R1YWxSZXF1ZXN0KSB7CiAgICAgICAgIEFTU0VSVCghbV9zYW1lT3JpZ2luUmVx
dWVzdCk7CiAgICAgICAgIEFTU0VSVChtX29wdGlvbnMuY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5
ID09IFVzZUFjY2Vzc0NvbnRyb2wpOwogICAgICAgICBwcmVmbGlnaHRTdWNjZXNzKCk7Ci0gICAg
fSBlbHNlCi0gICAgICAgIG1fY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKGlkZW50aWZpZXIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKGlk
ZW50aWZpZXIpOworfQorCit2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkRmluaXNo
TG9hZGluZ0Jsb2IodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBCbG9iKiBibG9iKQoreworICAg
IGlmIChtX2FjdHVhbFJlcXVlc3QpIHsKKyAgICAgICAgQVNTRVJUKCFtX3NhbWVPcmlnaW5SZXF1
ZXN0KTsKKyAgICAgICAgQVNTRVJUKG1fb3B0aW9ucy5jcm9zc09yaWdpblJlcXVlc3RQb2xpY3kg
PT0gVXNlQWNjZXNzQ29udHJvbCk7CisgICAgICAgIHByZWZsaWdodFN1Y2Nlc3MoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBtX2NsaWVudC0+ZGlkRmluaXNoTG9hZGluZ0Jsb2IoaWRl
bnRpZmllciwgYmxvYik7CiB9CiAKIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRG
YWlsKFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9y
KQpAQCAtMzI3LDExICszNTcsMTYgQEAgdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6Omxv
YWRSZXF1ZQogICAgIFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzID0gbV9vcHRp
b25zLmFsbG93Q3JlZGVudGlhbHMgPyBBbGxvd1N0b3JlZENyZWRlbnRpYWxzIDogRG9Ob3RBbGxv
d1N0b3JlZENyZWRlbnRpYWxzOwogCiAgICAgVmVjdG9yPGNoYXI+IGRhdGE7CisgICAgUmVmUHRy
PEJsb2I+IGRhdGFBc0Jsb2I7CiAgICAgUmVzb3VyY2VFcnJvciBlcnJvcjsKICAgICBSZXNvdXJj
ZVJlc3BvbnNlIHJlc3BvbnNlOwogICAgIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciA9IHN0ZDo6
bnVtZXJpY19saW1pdHM8dW5zaWduZWQgbG9uZz46Om1heCgpOwotICAgIGlmIChtX2RvY3VtZW50
LT5mcmFtZSgpKQotICAgICAgICBpZGVudGlmaWVyID0gbV9kb2N1bWVudC0+ZnJhbWUoKS0+bG9h
ZGVyKCktPmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkocmVxdWVzdCwgc3RvcmVkQ3JlZGVudGlh
bHMsIGVycm9yLCByZXNwb25zZSwgZGF0YSk7CisgICAgaWYgKG1fZG9jdW1lbnQtPmZyYW1lKCkp
IHsKKyAgICAgICAgaWYgKHJlcXVlc3QuZG93bmxvYWRBc0Jsb2IoKSkKKyAgICAgICAgICAgIGRh
dGFBc0Jsb2IgPSBtX2RvY3VtZW50LT5mcmFtZSgpLT5sb2FkZXIoKS0+bG9hZFJlc291cmNlU3lu
Y2hyb25vdXNseUFzQmxvYihyZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFscywgZXJyb3IsIHJlc3Bv
bnNlLCBpZGVudGlmaWVyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaWRlbnRpZmllciA9
IG1fZG9jdW1lbnQtPmZyYW1lKCktPmxvYWRlcigpLT5sb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5
KHJlcXVlc3QsIHN0b3JlZENyZWRlbnRpYWxzLCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOworICAg
IH0KIAogICAgIC8vIE5vIGV4Y2VwdGlvbiBmb3IgZmlsZTovLy8gcmVzb3VyY2VzLCBzZWUgPHJk
YXI6Ly9wcm9ibGVtLzQ5NjIyOTg+LgogICAgIC8vIEFsc28sIGlmIHdlIGhhdmUgYW4gSFRUUCBy
ZXNwb25zZSwgdGhlbiBpdCB3YXNuJ3QgYSBuZXR3b3JrIGVycm9yIGluIGZhY3QuCkBAIC0zNTAs
MTAgKzM4NSwxNCBAQCB2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlcXVlCiAK
ICAgICBkaWRSZWNlaXZlUmVzcG9uc2UoMCwgcmVzcG9uc2UpOwogCi0gICAgY29uc3QgY2hhciog
Ynl0ZXMgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZGF0YS5kYXRhKCkpOwotICAgIGludCBs
ZW4gPSBzdGF0aWNfY2FzdDxpbnQ+KGRhdGEuc2l6ZSgpKTsKLSAgICBkaWRSZWNlaXZlRGF0YSgw
LCBieXRlcywgbGVuKTsKKyAgICBpZiAocmVxdWVzdC5kb3dubG9hZEFzQmxvYigpKSB7CisgICAg
ICAgIGRpZEZpbmlzaExvYWRpbmdCbG9iKGlkZW50aWZpZXIsIGRhdGFBc0Jsb2IuZ2V0KCkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQogCisgICAgY29uc3QgY2hhciogYnl0ZXMgPSBzdGF0aWNf
Y2FzdDxjb25zdCBjaGFyKj4oZGF0YS5kYXRhKCkpOworICAgIGludCBsZW5ndGggPSBzdGF0aWNf
Y2FzdDxpbnQ+KGRhdGEuc2l6ZSgpKTsKKyAgICBkaWRSZWNlaXZlRGF0YSgwLCBieXRlcywgbGVu
Z3RoKTsKICAgICBkaWRGaW5pc2hMb2FkaW5nKGlkZW50aWZpZXIpOwogfQogCkluZGV4OiBXZWJD
b3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaAkocmV2aXNpb24gNjkzNjYpCisr
KyBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNzQsNyArNzQsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdmlydHVh
bCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFN1YnJl
c291cmNlTG9hZGVyKiwgY29uc3QgY2hhciosIGludCBsZW5ndGhSZWNlaXZlZCk7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQmxvYkRhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCBpbnQg
LypsZW5ndGhSZWNlaXZlZCovKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRp
bmcoU3VicmVzb3VyY2VMb2FkZXIqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExv
YWRpbmdCbG9iKFN1YnJlc291cmNlTG9hZGVyKiwgQmxvYiopOwogICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlkRmFpbChTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IFJlc291cmNlRXJyb3ImKTsKIAog
ICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0U2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoU3VicmVz
b3VyY2VMb2FkZXIqLCBib29sJiBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSk7CkBAIC04Miw2
ICs4NCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIHJlY2Vp
dmVkQ2FuY2VsbGF0aW9uKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UmKTsKIAogICAgICAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyKTsKKyAgICAgICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nQmxvYih1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIsIEJsb2IqKTsKKwogICAgICAgICB2b2lkIG1ha2VTaW1wbGVDcm9z
c09yaWdpbkFjY2Vzc1JlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KTsKICAg
ICAgICAgdm9pZCBtYWtlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0V2l0aFByZWZsaWdodChjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpOwogICAgICAgICB2b2lkIHByZWZsaWdodFN1Y2Nl
c3MoKTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDY5MzY2KQorKysgV2Vi
Q29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzM5LDYgKzI3
MzksNTAgQEAgdm9pZCBGcmFtZUxvYWRlcjo6bG9hZFBvc3RSZXF1ZXN0KGNvbnN0IAogCiB1bnNp
Z25lZCBsb25nIEZyYW1lTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlh
bHMsIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVj
dG9yPGNoYXI+JiBkYXRhKQogeworICAgIEFTU0VSVCghcmVxdWVzdC5kb3dubG9hZEFzQmxvYigp
KTsKKyAgICBSZXNvdXJjZVJlcXVlc3QgYWN0dWFsUmVxdWVzdDsKKyAgICB1bnNpZ25lZCBsb25n
IGlkZW50aWZpZXIgPSBwcmVwYXJlU3luY1JlcXVlc3QocmVxdWVzdCwgZXJyb3IsIGFjdHVhbFJl
cXVlc3QpOworICAgIGlmIChlcnJvci5pc051bGwoKSkgeworICAgICAgICBBU1NFUlQoIWFjdHVh
bFJlcXVlc3QuaXNOdWxsKCkpOworICAgICAgICAKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQ
TElDQVRJT05TKQorICAgICAgICBpZiAoIWRvY3VtZW50TG9hZGVyKCktPmFwcGxpY2F0aW9uQ2Fj
aGVIb3N0KCktPm1heWJlTG9hZFN5bmNocm9ub3VzbHkoYWN0dWFsUmVxdWVzdCwgZXJyb3IsIHJl
c3BvbnNlLCBkYXRhKSkgeworI2VuZGlmCisgICAgICAgICAgICBSZXNvdXJjZUhhbmRsZTo6bG9h
ZFJlc291cmNlU3luY2hyb25vdXNseShuZXR3b3JraW5nQ29udGV4dCgpLCBhY3R1YWxSZXF1ZXN0
LCBzdG9yZWRDcmVkZW50aWFscywgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKKyNpZiBFTkFCTEUo
T0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorICAgICAgICAgICAgZG9jdW1lbnRMb2FkZXIoKS0+
YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+bWF5YmVMb2FkRmFsbGJhY2tTeW5jaHJvbm91c2x5KGFj
dHVhbFJlcXVlc3QsIGVycm9yLCByZXNwb25zZSwgZGF0YSk7CisgICAgICAgIH0KKyNlbmRpZgor
ICAgIH0KKyAgICBub3RpZmllcigpLT5zZW5kUmVtYWluaW5nRGVsZWdhdGVNZXNzYWdlcyhtX2Rv
Y3VtZW50TG9hZGVyLmdldCgpLCBpZGVudGlmaWVyLCByZXNwb25zZSwgZGF0YS5zaXplKCksIGVy
cm9yKTsKKyAgICByZXR1cm4gaWRlbnRpZmllcjsKK30KKworUGFzc1JlZlB0cjxCbG9iPiBGcmFt
ZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseUFzQmxvYihjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzLCBSZXNv
dXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIHVuc2lnbmVkIGxv
bmcmIGlkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKHJlcXVlc3QuZG93bmxvYWRBc0Jsb2IoKSk7
CisgICAgUmVzb3VyY2VSZXF1ZXN0IGFjdHVhbFJlcXVlc3Q7CisgICAgaWRlbnRpZmllciA9IHBy
ZXBhcmVTeW5jUmVxdWVzdChyZXF1ZXN0LCBlcnJvciwgYWN0dWFsUmVxdWVzdCk7CisgICAgUmVm
UHRyPEJsb2I+IGRhdGFBc0Jsb2I7CisgICAgaWYgKGVycm9yLmlzTnVsbCgpKSB7CisgICAgICAg
IEFTU0VSVCghYWN0dWFsUmVxdWVzdC5pc051bGwoKSk7CisgICAgICAgIAorI2lmIDAgLy8gRklY
TUU6IFN1cHBvcnQgZm9yIGFwcGNhY2hlZCByZXNvdXJjZXMuCisgICAgICAgIGlmICghZG9jdW1l
bnRMb2FkZXIoKS0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+bWF5YmVMb2FkU3luY2hyb25vdXNs
eShhY3R1YWxSZXF1ZXN0LCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpKSB7CisjZW5kaWYKKyAgICAg
ICAgICAgIGRhdGFBc0Jsb2IgPSBSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25v
dXNseUFzQmxvYihuZXR3b3JraW5nQ29udGV4dCgpLCBhY3R1YWxSZXF1ZXN0LCBzdG9yZWRDcmVk
ZW50aWFscywgZXJyb3IsIHJlc3BvbnNlKTsKKyNpZiAwIC8vIEZJWE1FOiBEaXR0by4KKyAgICAg
ICAgICAgIGRvY3VtZW50TG9hZGVyKCktPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPm1heWJlTG9h
ZEZhbGxiYWNrU3luY2hyb25vdXNseShhY3R1YWxSZXF1ZXN0LCBlcnJvciwgcmVzcG9uc2UsIGRh
dGEpOworICAgICAgICB9CisjZW5kaWYKKyAgICB9CisgICAgaW50IG5vdGlmeUxlbmd0aCA9IGRh
dGFBc0Jsb2IgPyBzdGF0aWNfY2FzdDxpbnQ+KHN0ZDo6bWluKGRhdGFBc0Jsb2ItPnNpemUoKSwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihJTlRfTUFYKSkpIDogMDsKKyAgICBub3Rp
ZmllcigpLT5zZW5kUmVtYWluaW5nRGVsZWdhdGVNZXNzYWdlcyhtX2RvY3VtZW50TG9hZGVyLmdl
dCgpLCBpZGVudGlmaWVyLCByZXNwb25zZSwgbm90aWZ5TGVuZ3RoLCBlcnJvcik7CisgICAgcmV0
dXJuIGRhdGFBc0Jsb2I7Cit9CisKK3Vuc2lnbmVkIGxvbmcgRnJhbWVMb2FkZXI6OnByZXBhcmVT
eW5jUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlRXJyb3Im
IGVycm9yLCBSZXNvdXJjZVJlcXVlc3QmIGFjdHVhbFJlcXVlc3QpCit7CiAgICAgU3RyaW5nIHJl
ZmVycmVyID0gbV9vdXRnb2luZ1JlZmVycmVyOwogICAgIGlmIChTZWN1cml0eU9yaWdpbjo6c2hv
dWxkSGlkZVJlZmVycmVyKHJlcXVlc3QudXJsKCksIHJlZmVycmVyKSkKICAgICAgICAgcmVmZXJy
ZXIgPSBTdHJpbmcoKTsKQEAgLTI3NTMsMjcgKzI3OTcsMTIgQEAgdW5zaWduZWQgbG9uZyBGcmFt
ZUxvYWRlcjo6bG9hZFJlc291cmNlUwogICAgIGlmIChQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFn
ZSgpKQogICAgICAgICBpbml0aWFsUmVxdWVzdC5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhwYWdl
LT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnJlcXVlc3QoKS51cmwo
KSk7CiAgICAgaW5pdGlhbFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2VudChjbGllbnQoKS0+dXNlckFn
ZW50KHJlcXVlc3QudXJsKCkpKTsKLSAgICAKKwogICAgIGFkZEV4dHJhRmllbGRzVG9TdWJyZXNv
dXJjZVJlcXVlc3QoaW5pdGlhbFJlcXVlc3QpOwogCiAgICAgdW5zaWduZWQgbG9uZyBpZGVudGlm
aWVyID0gMDsgICAgCi0gICAgUmVzb3VyY2VSZXF1ZXN0IG5ld1JlcXVlc3QoaW5pdGlhbFJlcXVl
c3QpOwotICAgIHJlcXVlc3RGcm9tRGVsZWdhdGUobmV3UmVxdWVzdCwgaWRlbnRpZmllciwgZXJy
b3IpOwotCi0gICAgaWYgKGVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgIEFTU0VSVCghbmV3UmVx
dWVzdC5pc051bGwoKSk7Ci0gICAgICAgIAotI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNB
VElPTlMpCi0gICAgICAgIGlmICghZG9jdW1lbnRMb2FkZXIoKS0+YXBwbGljYXRpb25DYWNoZUhv
c3QoKS0+bWF5YmVMb2FkU3luY2hyb25vdXNseShuZXdSZXF1ZXN0LCBlcnJvciwgcmVzcG9uc2Us
IGRhdGEpKSB7Ci0jZW5kaWYKLSAgICAgICAgICAgIFJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3Vy
Y2VTeW5jaHJvbm91c2x5KG5ldHdvcmtpbmdDb250ZXh0KCksIG5ld1JlcXVlc3QsIHN0b3JlZENy
ZWRlbnRpYWxzLCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOwotI2lmIEVOQUJMRShPRkZMSU5FX1dF
Ql9BUFBMSUNBVElPTlMpCi0gICAgICAgICAgICBkb2N1bWVudExvYWRlcigpLT5hcHBsaWNhdGlv
bkNhY2hlSG9zdCgpLT5tYXliZUxvYWRGYWxsYmFja1N5bmNocm9ub3VzbHkobmV3UmVxdWVzdCwg
ZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgfQotCi0gICAg
bm90aWZpZXIoKS0+c2VuZFJlbWFpbmluZ0RlbGVnYXRlTWVzc2FnZXMobV9kb2N1bWVudExvYWRl
ci5nZXQoKSwgaWRlbnRpZmllciwgcmVzcG9uc2UsIGRhdGEuc2l6ZSgpLCBlcnJvcik7CisgICAg
YWN0dWFsUmVxdWVzdCA9IGluaXRpYWxSZXF1ZXN0OworICAgIHJlcXVlc3RGcm9tRGVsZWdhdGUo
YWN0dWFsUmVxdWVzdCwgaWRlbnRpZmllciwgZXJyb3IpOwogICAgIHJldHVybiBpZGVudGlmaWVy
OwogfQogCkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHJldmlzaW9uIDY5MzY2KQorKysgV2ViQ29y
ZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEFyY2hpdmU7CiBjbGFzcyBBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZTsKK2NsYXNzIEJsb2I7CiBjbGFzcyBDYWNoZWRGcmFtZUJhc2U7CiBjbGFzcyBD
YWNoZWRQYWdlOwogY2xhc3MgQ2FjaGVkUmVzb3VyY2U7CkBAIC0xMjMsNiArMTI0LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyB2b2lkIHJlcG9ydExvY2FsTG9hZEZhaWxlZChGcmFtZSosIGNvbnN0
IFN0cmluZyYgdXJsKTsKIAogICAgIHVuc2lnbmVkIGxvbmcgbG9hZFJlc291cmNlU3luY2hyb25v
dXNseShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTdG9yZWRDcmVkZW50aWFscywgUmVzb3VyY2VF
cnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEpOworICAgIFBhc3NS
ZWZQdHI8QmxvYj4gbG9hZFJlc291cmNlU3luY2hyb25vdXNseUFzQmxvYihjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmLCBTdG9yZWRDcmVkZW50aWFscywgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVz
cG9uc2UmLCB1bnNpZ25lZCBsb25nJik7CiAKICAgICBib29sIGNhbkhhbmRsZVJlcXVlc3QoY29u
c3QgUmVzb3VyY2VSZXF1ZXN0Jik7CiAKQEAgLTQzMSw2ICs0MzMsOCBAQCBwcml2YXRlOgogCiAg
ICAgdm9pZCB1cGRhdGVTYW5kYm94RmxhZ3MoKTsKIAorICAgIHVuc2lnbmVkIGxvbmcgcHJlcGFy
ZVN5bmNSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFJlc291cmNlRXJyb3ImLCBSZXNv
dXJjZVJlcXVlc3QmIGFjdHVhbFJlcXVlc3QpOworCiAgICAgRnJhbWUqIG1fZnJhbWU7CiAgICAg
RnJhbWVMb2FkZXJDbGllbnQqIG1fY2xpZW50OwogCkluZGV4OiBXZWJDb3JlL2xvYWRlci9SZXNv
dXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2Fk
ZXIuY3BwCShyZXZpc2lvbiA2OTM2NikKKysrIFdlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc4LDE4ICsyNzgsMjEgQEAgdm9pZCBSZXNvdXJjZUxv
YWRlcjo6d2lsbFN0b3BCdWZmZXJpbmdEYQogCiB2b2lkIFJlc291cmNlTG9hZGVyOjpkaWRGaW5p
c2hMb2FkaW5nKGRvdWJsZSBmaW5pc2hUaW1lKQogewotICAgIC8vIElmIGxvYWQgaGFzIGJlZW4g
Y2FuY2VsbGVkIGFmdGVyIGZpbmlzaGluZyAod2hpY2ggY291bGQgaGFwcGVuIHdpdGggYSAKLSAg
ICAvLyBKYXZhU2NyaXB0IHRoYXQgY2hhbmdlcyB0aGUgd2luZG93IGxvY2F0aW9uKSwgZG8gbm90
aGluZy4KLSAgICBpZiAobV9jYW5jZWxsZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQo
IW1fcmVhY2hlZFRlcm1pbmFsU3RhdGUpOworICAgIGRpZEZpbmlzaExvYWRpbmdPbmVQYXJ0KGZp
bmlzaFRpbWUpOworICAgIHJlbGVhc2VSZXNvdXJjZXMoKTsKK30KIAordm9pZCBSZXNvdXJjZUxv
YWRlcjo6ZGlkRmluaXNoTG9hZGluZ0Jsb2IoZG91YmxlIGZpbmlzaFRpbWUsIEJsb2IqKQorewor
ICAgIC8vIEZJWE1FOiBXaGF0IGFib3V0IG11bHRpcGFydCBhbmQgZG93bmxvYWRBc0Jsb2I/CiAg
ICAgZGlkRmluaXNoTG9hZGluZ09uZVBhcnQoZmluaXNoVGltZSk7CiAgICAgcmVsZWFzZVJlc291
cmNlcygpOwogfQogCiB2b2lkIFJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nT25lUGFy
dChkb3VibGUgZmluaXNoVGltZSkKIHsKKyAgICAvLyBJZiBsb2FkIGhhcyBiZWVuIGNhbmNlbGxl
ZCBhZnRlciBmaW5pc2hpbmcgKHdoaWNoIGNvdWxkIGhhcHBlbiB3aXRoIGEgCisgICAgLy8gSmF2
YVNjcmlwdCB0aGF0IGNoYW5nZXMgdGhlIHdpbmRvdyBsb2NhdGlvbiksIGRvIG5vdGhpbmcuCiAg
ICAgaWYgKG1fY2FuY2VsbGVkKQogICAgICAgICByZXR1cm47CiAgICAgQVNTRVJUKCFtX3JlYWNo
ZWRUZXJtaW5hbFN0YXRlKTsKQEAgLTM5MCw2ICszOTMsNyBAQCB2b2lkIFJlc291cmNlTG9hZGVy
Ojp3aWxsU2VuZFJlcXVlc3QoUmVzCiAgICAgaWYgKGRvY3VtZW50TG9hZGVyKCktPmFwcGxpY2F0
aW9uQ2FjaGVIb3N0KCktPm1heWJlTG9hZEZhbGxiYWNrRm9yUmVkaXJlY3QodGhpcywgcmVxdWVz
dCwgcmVkaXJlY3RSZXNwb25zZSkpCiAgICAgICAgIHJldHVybjsKICNlbmRpZgorICAgIEFTU0VS
VChyZXF1ZXN0LmRvd25sb2FkQXNCbG9iKCkgPT0gbV9yZXF1ZXN0LmRvd25sb2FkQXNCbG9iKCkp
OwogICAgIHdpbGxTZW5kUmVxdWVzdChyZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKTsKIH0KIApA
QCAtNDExLDggKzQxNSwyMSBAQCB2b2lkIFJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9u
c2UoCiAKIHZvaWQgUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVEYXRhKFJlc291cmNlSGFuZGxl
KiwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCwgaW50IGxlbmd0aFJlY2VpdmVkKQogewor
ICAgIGRpZFJlY2VpdmVEYXRhQ29tbW9uKFJlc3BvbnNlQXNEYXRhLCBkYXRhLCBsZW5ndGgsIGxl
bmd0aFJlY2VpdmVkKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUJsb2JE
YXRhKFJlc291cmNlSGFuZGxlKiwgaW50IGxlbmd0aCkKK3sKKyAgICBkaWRSZWNlaXZlRGF0YUNv
bW1vbihSZXNwb25zZUFzQmxvYiwgMCwgbGVuZ3RoLCAwKTsKK30KKwordm9pZCBSZXNvdXJjZUxv
YWRlcjo6ZGlkUmVjZWl2ZURhdGFDb21tb24oUmVzcG9uc2VBc01vZGUgcmVzcG9uc2VBcywgY29u
c3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCwgaW50IGxlbmd0aFJlY2VpdmVkKQorewogICAgIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OndpbGxSZWNlaXZlUmVzb3VyY2VEYXRhKG1fZnJhbWUuZ2V0KCksIGlkZW50aWZpZXIo
KSk7Ci0gICAgZGlkUmVjZWl2ZURhdGEoZGF0YSwgbGVuZ3RoLCBsZW5ndGhSZWNlaXZlZCwgZmFs
c2UpOworICAgIGlmIChyZXNwb25zZUFzID09IFJlc3BvbnNlQXNEYXRhKQorICAgICAgICBkaWRS
ZWNlaXZlRGF0YShkYXRhLCBsZW5ndGgsIGxlbmd0aFJlY2VpdmVkLCBmYWxzZSk7CisgICAgZWxz
ZQorICAgICAgICBkaWRSZWNlaXZlQmxvYkRhdGEobGVuZ3RoKTsKICAgICBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmRpZFJlY2VpdmVSZXNvdXJjZURhdGEobV9mcmFtZS5nZXQoKSwgY29va2ll
KTsKIH0KIApAQCAtNDIxLDYgKzQzOCwxMSBAQCB2b2lkIFJlc291cmNlTG9hZGVyOjpkaWRGaW5p
c2hMb2FkaW5nKFJlCiAgICAgZGlkRmluaXNoTG9hZGluZyhmaW5pc2hUaW1lKTsKIH0KIAordm9p
ZCBSZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZ0Jsb2IoUmVzb3VyY2VIYW5kbGUqLCBk
b3VibGUgZmluaXNoVGltZSwgQmxvYiogYmxvYikKK3sKKyAgICBkaWRGaW5pc2hMb2FkaW5nQmxv
YihmaW5pc2hUaW1lLCBibG9iKTsKK30KKwogdm9pZCBSZXNvdXJjZUxvYWRlcjo6ZGlkRmFpbChS
ZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQogewogI2lmIEVOQUJM
RShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCkBAIC00OTIsNiArNTE0LDggQEAgdm9pZCBSZXNv
dXJjZUxvYWRlcjo6d2lsbENhY2hlUmVzcG9uc2UoUgogI2lmIEVOQUJMRShCTE9CKQogQXN5bmNG
aWxlU3RyZWFtKiBSZXNvdXJjZUxvYWRlcjo6Y3JlYXRlQXN5bmNGaWxlU3RyZWFtKEZpbGVTdHJl
YW1DbGllbnQqIGNsaWVudCkKIHsKKyAgICAvLyBGSVhNRTogRGVjb3VwbGUgdGhlIEZpbGVUaHJl
YWQgZnJvbSBTY3JpcHRFeGVjdXRpb25Db250ZXh0cyBhbmQgcmVtb3ZlIHRoaXMgbWV0aG9kIGZy
b20gUmVzb3VyY2VIYW5kbGVDbGllbnQsCisgICAgLy8gY2FsbGVycyBzaG91ZSBiZSBhYmxlIHRv
IGNyZWF0ZSBhIEZpbGVTdHJlYW1Qcm94eSBpbmRlcGVuZGVudCBvZiBhIGNvbnRleHQuCiAgICAg
Ly8gSXQgaXMgT0sgdG8gc2ltcGx5IHJldHVybiBhIHBvaW50ZXIgc2luY2UgRmlsZVN0cmVhbVBy
b3h5OjpjcmVhdGUgYWRkcyBhbiBleHRyYSByZWYuCiAgICAgcmV0dXJuIEZpbGVTdHJlYW1Qcm94
eTo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwg
Y2xpZW50KS5nZXQoKTsKIH0KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuaAkocmV2aXNpb24g
NjkzNjYpCisrKyBXZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC04MCw5ICs4MCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwg
dm9pZCBkaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBs
b25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJl
Y2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CiAgICAgICAgIHZpcnR1YWwg
dm9pZCBkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiwgaW50LCBsb25nIGxvbmcgbGVuZ3RoUmVj
ZWl2ZWQsIGJvb2wgYWxsQXRPbmNlKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVC
bG9iRGF0YShpbnQpIHsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUNhY2hlZE1l
dGFkYXRhKGNvbnN0IGNoYXIqLCBpbnQpIHsgfQogICAgICAgICB2b2lkIHdpbGxTdG9wQnVmZmVy
aW5nRGF0YShjb25zdCBjaGFyKiwgaW50KTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlz
aExvYWRpbmcoZG91YmxlIGZpbmlzaFRpbWUpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmlu
aXNoTG9hZGluZ0Jsb2IoZG91YmxlIGZpbmlzaFRpbWUsIEJsb2IqKTsKICAgICAgICAgdmlydHVh
bCB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpOwogCiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSgpOwpAQCAtOTgsOCArMTAwLDEwIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFNlbmREYXRhKFJlc291
cmNlSGFuZGxlKiwgdW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBs
b25nIHRvdGFsQnl0ZXNUb0JlU2VudCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZl
UmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNo
YXIqLCBpbnQsIGludCBsZW5ndGhSZWNlaXZlZCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRS
ZWNlaXZlQmxvYkRhdGEoUmVzb3VyY2VIYW5kbGUqLCBpbnQpOwogICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKFJlc291cmNlSGFuZGxlKiwgY29uc3QgY2hhciog
ZGF0YSwgaW50IGxlbmd0aCkgeyBkaWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEoZGF0YSwgbGVuZ3Ro
KTsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhSZXNvdXJjZUhhbmRs
ZSosIGRvdWJsZSBmaW5pc2hUaW1lKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExv
YWRpbmdCbG9iKFJlc291cmNlSGFuZGxlKiwgZG91YmxlIGZpbmlzaFRpbWUsIEJsb2IqKTsKICAg
ICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJj
ZUVycm9yJik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCB3YXNCbG9ja2VkKFJlc291cmNlSGFuZGxl
Kik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBjYW5ub3RTaG93VVJMKFJlc291cmNlSGFuZGxlKik7
CkBAIC0xMjgsNiArMTMyLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBz
ZXRTaG91bGRCdWZmZXJEYXRhKGJvb2wgc2hvdWxkQnVmZmVyRGF0YSk7CiAKICAgICBwcm90ZWN0
ZWQ6CisgICAgICAgIGVudW0gUmVzcG9uc2VBc01vZGUgIHsKKyAgICAgICAgICAgIFJlc3BvbnNl
QXNEYXRhLAorICAgICAgICAgICAgUmVzcG9uc2VBc0Jsb2IKKyAgICAgICAgfTsKKwogICAgICAg
ICBSZXNvdXJjZUxvYWRlcihGcmFtZSosIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcywg
Ym9vbCBzaG91bGRDb250ZW50U25pZmYpOwogCiAjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJ
Q0FUSU9OUykKQEAgLTE0MSw2ICsxNTAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IGJvb2wgcmVhY2hlZFRlcm1pbmFsU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3JlYWNoZWRUZXJt
aW5hbFN0YXRlOyB9CiAgICAgICAgIGJvb2wgY2FuY2VsbGVkKCkgY29uc3QgeyByZXR1cm4gbV9j
YW5jZWxsZWQ7IH0KICAgICAgICAgYm9vbCBkZWZlcnNMb2FkaW5nKCkgY29uc3QgeyByZXR1cm4g
bV9kZWZlcnNMb2FkaW5nOyB9CisgICAgICAgIHZvaWQgZGlkUmVjZWl2ZURhdGFDb21tb24oUmVz
cG9uc2VBc01vZGUsIGNvbnN0IGNoYXIqLCBpbnQsIGludCBsZW5ndGhSZWNlaXZlZCk7CiAKICAg
ICAgICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBtX2hhbmRsZTsKICAgICAgICAgUmVmUHRyPEZy
YW1lPiBtX2ZyYW1lOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmNwcAkocmV2
aXNpb24gNjkzNjYpCisrKyBXZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE1OCw2ICsxNTgsMjAgQEAgdm9pZCBTdWJyZXNvdXJjZUxvYWRlcjo6
ZGlkUmVjZWl2ZURhdGEoYwogICAgICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZURhdGEodGhpcywg
ZGF0YSwgbGVuZ3RoKTsKIH0KIAordm9pZCBTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUJs
b2JEYXRhKGludCBsZW5ndGgpCit7CisgICAgLy8gUmVmZXJlbmNlIHRoZSBvYmplY3QgaW4gdGhp
cyBtZXRob2Qgc2luY2UgdGhlIGFkZGl0aW9uYWwgcHJvY2Vzc2luZyBjYW4gZG8KKyAgICAvLyBh
bnl0aGluZyBpbmNsdWRpbmcgcmVtb3ZpbmcgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoaXMgb2Jq
ZWN0OyBvbmUgZXhhbXBsZSBvZiB0aGlzIGlzIDMyNjYyMTYuCisgICAgUmVmUHRyPFN1YnJlc291
cmNlTG9hZGVyPiBwcm90ZWN0KHRoaXMpOworCisgICAgUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2Vp
dmVCbG9iRGF0YShsZW5ndGgpOworCisgICAgLy8gQSBzdWJyZXNvdXJjZSBsb2FkZXIgZG9lcyBu
b3QgbG9hZCBtdWx0aXBhcnQgc2VjdGlvbnMgcHJvZ3Jlc3NpdmVseS4KKyAgICAvLyBTbyBkb24n
dCBkZWxpdmVyIGFueSBkYXRhIHRvIHRoZSBsb2FkZXIgeWV0LgorICAgIGlmICghbV9sb2FkaW5n
TXVsdGlwYXJ0Q29udGVudCAmJiBtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmRpZFJlY2Vp
dmVCbG9iRGF0YSh0aGlzLCBsZW5ndGgpOworfQorCiB2b2lkIFN1YnJlc291cmNlTG9hZGVyOjpk
aWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKIHsK
ICAgICAvLyBSZWZlcmVuY2UgdGhlIG9iamVjdCBpbiB0aGlzIG1ldGhvZCBzaW5jZSB0aGUgYWRk
aXRpb25hbCBwcm9jZXNzaW5nIGNhbiBkbwpAQCAtMTcwLDYgKzE4NCwxNiBAQCB2b2lkIFN1YnJl
c291cmNlTG9hZGVyOjpkaWRSZWNlaXZlQ2FjaGVkCiAKIHZvaWQgU3VicmVzb3VyY2VMb2FkZXI6
OmRpZEZpbmlzaExvYWRpbmcoZG91YmxlIGZpbmlzaFRpbWUpCiB7CisgICAgZGlkRmluaXNoTG9h
ZGluZ0NvbW1vbihSZXNwb25zZUFzRGF0YSwgZmluaXNoVGltZSwgMCk7Cit9CisKK3ZvaWQgU3Vi
cmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmdCbG9iKGRvdWJsZSBmaW5pc2hUaW1lLCBC
bG9iKiBibG9iKQoreworICAgIGRpZEZpbmlzaExvYWRpbmdDb21tb24oUmVzcG9uc2VBc0Jsb2Is
IGZpbmlzaFRpbWUsIGJsb2IpOworfQorCit2b2lkIFN1YnJlc291cmNlTG9hZGVyOjpkaWRGaW5p
c2hMb2FkaW5nQ29tbW9uKFJlc3BvbnNlQXNNb2RlIHJlc3BvbnNlQXMsIGRvdWJsZSBmaW5pc2hU
aW1lLCBCbG9iKiBibG9iKQorewogICAgIGlmIChjYW5jZWxsZWQoKSkKICAgICAgICAgcmV0dXJu
OwogICAgIEFTU0VSVCghcmVhY2hlZFRlcm1pbmFsU3RhdGUoKSk7CkBAIC0xNzgsMTQgKzIwMiwy
MCBAQCB2b2lkIFN1YnJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nCiAgICAgUmVmUHRy
PFN1YnJlc291cmNlTG9hZGVyPiBwcm90ZWN0KHRoaXMpOwogCiAgICAgaWYgKG1fY2xpZW50KQot
ICAgICAgICBtX2NsaWVudC0+ZGlkRmluaXNoTG9hZGluZyh0aGlzKTsKLSAgICAKKyAgICAgICAg
aWYgKHJlc3BvbnNlQXMgPT0gUmVzcG9uc2VBc0Jsb2IpCisgICAgICAgICAgICBtX2NsaWVudC0+
ZGlkRmluaXNoTG9hZGluZ0Jsb2IodGhpcywgYmxvYik7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIG1fY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKHRoaXMpOworCiAgICAgbV9oYW5kbGUgPSAw
OwogCiAgICAgaWYgKGNhbmNlbGxlZCgpKQogICAgICAgICByZXR1cm47CiAgICAgbV9kb2N1bWVu
dExvYWRlci0+cmVtb3ZlU3VicmVzb3VyY2VMb2FkZXIodGhpcyk7Ci0gICAgUmVzb3VyY2VMb2Fk
ZXI6OmRpZEZpbmlzaExvYWRpbmcoZmluaXNoVGltZSk7CisgICAgaWYgKHJlc3BvbnNlQXMgPT0g
UmVzcG9uc2VBc0Jsb2IpCisgICAgICAgIFJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5n
QmxvYihmaW5pc2hUaW1lLCBibG9iKTsKKyAgICBlbHNlCisgICAgICAgIFJlc291cmNlTG9hZGVy
OjpkaWRGaW5pc2hMb2FkaW5nKGZpbmlzaFRpbWUpOwogfQogCiB2b2lkIFN1YnJlc291cmNlTG9h
ZGVyOjpkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQpJbmRleDogV2ViQ29yZS9s
b2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9T
dWJyZXNvdXJjZUxvYWRlci5oCShyZXZpc2lvbiA2OTM2NikKKysrIFdlYkNvcmUvbG9hZGVyL1N1
YnJlc291cmNlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDE0ICs1MSwxOCBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YSh1bnNpZ25l
ZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVT
ZW50KTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShjb25z
dCBjaGFyKiwgaW50LCBsb25nIGxvbmcgbGVuZ3RoUmVjZWl2ZWQsIGJvb2wgYWxsQXRPbmNlKTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVCbG9iRGF0YShpbnQpOwogICAgICAgICB2
aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKGNvbnN0IGNoYXIqLCBpbnQpOwog
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhkb3VibGUgZmluaXNoVGltZSk7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nQmxvYihkb3VibGUgZmluaXNo
VGltZSwgQmxvYiopOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChjb25zdCBSZXNvdXJj
ZUVycm9yJik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFn
ZSgpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCByZWNlaXZlZENhbmNlbGxhdGlvbihjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOyAg
ICAgICAgCiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRDYW5jZWwoY29uc3QgUmVzb3VyY2VFcnJv
ciYpOwogCisgICAgICAgIHZvaWQgZGlkRmluaXNoTG9hZGluZ0NvbW1vbihSZXNwb25zZUFzTW9k
ZSwgZG91YmxlIGZpbmlzaFRpbWUsIEJsb2IqKTsKKwogICAgICAgICBTdWJyZXNvdXJjZUxvYWRl
ckNsaWVudCogbV9jbGllbnQ7CiAgICAgICAgIGJvb2wgbV9sb2FkaW5nTXVsdGlwYXJ0Q29udGVu
dDsKICAgICB9OwpJbmRleDogV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXJDbGllbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlckNsaWVudC5o
CShyZXZpc2lvbiA2OTM2NikKKysrIFdlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyQ2xp
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDkgQEAKICNpZm5kZWYgU3VicmVzb3Vy
Y2VMb2FkZXJDbGllbnRfaAogI2RlZmluZSBTdWJyZXNvdXJjZUxvYWRlckNsaWVudF9oCiAKKyNp
bmNsdWRlICJCbG9iLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKwogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKQEAgLTQ2LDExICs0
OSwxMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZFNlbmREYXRhKFN1YnJlc291cmNl
TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBsb25nIC8qYnl0ZXNTZW50Ki8sIHVuc2lnbmVkIGxvbmcg
bG9uZyAvKnRvdGFsQnl0ZXNUb0JlU2VudCovKSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBkaWRS
ZWNlaXZlUmVzcG9uc2UoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFN1YnJlc291cmNlTG9hZGVy
KiwgY29uc3QgY2hhciosIGludCAvKmxlbmd0aFJlY2VpdmVkKi8pIHsgfQorICAgIHZpcnR1YWwg
dm9pZCBkaWRSZWNlaXZlRGF0YShTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IGNoYXIqLCBpbnQg
LypsZW5ndGhSZWNlaXZlZCovKSB7IH0gLy8gTm90IGNhbGxlZCBpZiByZXF1ZXN0LmRvd25sb2Fk
QXNCbG9iIGlzIHNldC4KKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUJsb2JEYXRhKFN1YnJl
c291cmNlTG9hZGVyKiwgaW50IC8qbGVuZ3RoUmVjZWl2ZWQqLykgeyB9IC8vIE9ubHkgY2FsbGVk
IGlmIHJlcXVlc3QuZG93bmxvYWRBc0Jsb2IgaXMgc2V0LgogICAgIHZpcnR1YWwgdm9pZCBkaWRS
ZWNlaXZlQ2FjaGVkTWV0YWRhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBjaGFyKiwgaW50
IC8qbGVuZ3RoUmVjZWl2ZWQqLykgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRp
bmcoU3VicmVzb3VyY2VMb2FkZXIqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9h
ZGluZ0Jsb2IoU3VicmVzb3VyY2VMb2FkZXIqLCBCbG9iKikgeyB9CiAgICAgdmlydHVhbCB2b2lk
IGRpZEZhaWwoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBSZXNvdXJjZUVycm9yJikgeyB9Ci0g
ICAgCisKICAgICB2aXJ0dWFsIGJvb2wgZ2V0U2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoU3Vi
cmVzb3VyY2VMb2FkZXIqLCBib29sJiAvKnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKi8pIHsg
cmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZShTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlJikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHJlY2VpdmVkQ2FuY2VsbGF0aW9uKFN1YnJlc291
cmNlTG9hZGVyKiwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKSB7IH0KSW5kZXg6IFdl
YkNvcmUvbG9hZGVyL1RocmVhZGFibGVMb2FkZXJDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2xvYWRlci9UaHJlYWRhYmxlTG9hZGVyQ2xpZW50LmgJKHJldmlzaW9uIDY5MzY2KQorKysg
V2ViQ29yZS9sb2FkZXIvVGhyZWFkYWJsZUxvYWRlckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSw2ICszMSw5IEBACiAjaWZuZGVmIFRocmVhZGFibGVMb2FkZXJDbGllbnRfaAogI2RlZmlu
ZSBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50X2gKIAorI2luY2x1ZGUgIkJsb2IuaCIKKyNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBS
ZXNvdXJjZUVycm9yOwpAQCAtNDEsOCArNDQsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGlkU2VuZERhdGEodW5zaWduZWQgbG9uZyBsb25nIC8qYnl0ZXNT
ZW50Ki8sIHVuc2lnbmVkIGxvbmcgbG9uZyAvKnRvdGFsQnl0ZXNUb0JlU2VudCovKSB7IH0KIAog
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmKSB7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKGNvbnN0IGNo
YXIqLCBpbnQgLypsZW5ndGhSZWNlaXZlZCovKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGRp
ZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqLCBpbnQgLypsZW5ndGhSZWNlaXZlZCovKSB7IH0gLy8g
Tm90IGNhbGxlZCB3aGVuIHJlcXVlc3QuZG93bmxvYWRBc0Jsb2IgaXMgc2V0LgorICAgICAgICB2
aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUJsb2JEYXRhKGludCAvKmxlbmd0aFJlY2VpdmVkKi8pIHsg
fSAvLyBPbmx5IGNhbGxlZCBmb3IgcmVxdWVzdC5kb3dubG9hZEFzQmxvYgogICAgICAgICB2aXJ0
dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nIC8qaWRlbnRpZmllciovKSB7
IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmdCbG9iKHVuc2lnbmVkIGxv
bmcgLyppZGVudGlmaWVyKi8sIEJsb2IqKSB7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZh
aWwoY29uc3QgUmVzb3VyY2VFcnJvciYpIHsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFp
bFJlZGlyZWN0Q2hlY2soKSB7IH0KIApJbmRleDogV2ViQ29yZS9sb2FkZXIvVGhyZWFkYWJsZUxv
YWRlckNsaWVudFdyYXBwZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9UaHJlYWRh
YmxlTG9hZGVyQ2xpZW50V3JhcHBlci5oCShyZXZpc2lvbiA2OTM2NikKKysrIFdlYkNvcmUvbG9h
ZGVyL1RocmVhZGFibGVMb2FkZXJDbGllbnRXcmFwcGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0
LDYgKzc0LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgICAgICBtX2NsaWVu
dC0+ZGlkUmVjZWl2ZURhdGEoZGF0YSwgbGVuZ3RoUmVjZWl2ZWQpOwogICAgICAgICB9CiAKKyAg
ICAgICAgdm9pZCBkaWRSZWNlaXZlQmxvYkRhdGEoaW50IGxlbmd0aFJlY2VpdmVkKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAobV9jbGllbnQpCisgICAgICAgICAgICAgICAgbV9jbGllbnQt
PmRpZFJlY2VpdmVCbG9iRGF0YShsZW5ndGhSZWNlaXZlZCk7CisgICAgICAgIH0KKwogICAgICAg
ICB2b2lkIGRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKQogICAgICAg
ICB7CiAgICAgICAgICAgICBtX2RvbmUgPSB0cnVlOwpAQCAtODEsNiArODcsMTMgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICAgICAgICAgIG1fY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5n
KGlkZW50aWZpZXIpOwogICAgICAgICB9CiAKKyAgICAgICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5n
QmxvYih1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIEJsb2IqIGJsb2IpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1fZG9uZSA9IHRydWU7CisgICAgICAgICAgICBpZiAobV9jbGllbnQpCisgICAg
ICAgICAgICAgICAgbV9jbGllbnQtPmRpZEZpbmlzaExvYWRpbmdCbG9iKGlkZW50aWZpZXIsIGJs
b2IpOworICAgICAgICB9CisKICAgICAgICAgdm9pZCBkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJy
b3ImIGVycm9yKQogICAgICAgICB7CiAgICAgICAgICAgICBtX2RvbmUgPSB0cnVlOwpJbmRleDog
V2ViQ29yZS9sb2FkZXIvV29ya2VyVGhyZWFkYWJsZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9sb2FkZXIvV29ya2VyVGhyZWFkYWJsZUxvYWRlci5jcHAJKHJldmlzaW9uIDY5MzY2
KQorKysgV2ViQ29yZS9sb2FkZXIvV29ya2VyVGhyZWFkYWJsZUxvYWRlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE5MSw2ICsxOTEsMTIgQEAgc3RhdGljIHZvaWQgd29ya2VyQ29udGV4dERpZFJl
Y2VpdmVEYXRhKAogICAgIHdvcmtlckNsaWVudFdyYXBwZXItPmRpZFJlY2VpdmVEYXRhKHZlY3Rv
ckRhdGEtPmRhdGEoKSwgdmVjdG9yRGF0YS0+c2l6ZSgpKTsKIH0KIAorc3RhdGljIHZvaWQgd29y
a2VyQ29udGV4dERpZFJlY2VpdmVCbG9iRGF0YShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBSZWZQdHI8VGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXI+IHdvcmtlckNsaWVudFdy
YXBwZXIsIGludCBsZW5ndGhSZWNlaXZlZCkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQs
IGNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKTsKKyAgICB3b3JrZXJDbGllbnRXcmFwcGVyLT5k
aWRSZWNlaXZlQmxvYkRhdGEobGVuZ3RoUmVjZWl2ZWQpOworfQorCiB2b2lkIFdvcmtlclRocmVh
ZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2U6OmRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIq
IGRhdGEsIGludCBsZW5ndGhSZWNlaXZlZCkKIHsKICAgICBPd25QdHI8VmVjdG9yPGNoYXI+ID4g
dmVjdG9yID0gYWRvcHRQdHIobmV3IFZlY3RvcjxjaGFyPihsZW5ndGhSZWNlaXZlZCkpOyAvLyBu
ZWVkcyB0byBiZSBhbiBPd25QdHIgZm9yIHVzYWdlIHdpdGggY3JlYXRlQ2FsbGJhY2tUYXNrLgpA
QCAtMTk4LDYgKzIwNCwxMSBAQCB2b2lkIFdvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJl
YWRCCiAgICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckNvbnRleHQoY3Jl
YXRlQ2FsbGJhY2tUYXNrKCZ3b3JrZXJDb250ZXh0RGlkUmVjZWl2ZURhdGEsIG1fd29ya2VyQ2xp
ZW50V3JhcHBlciwgdmVjdG9yLnJlbGVhc2UoKSksIG1fdGFza01vZGUpOwogfQogCit2b2lkIFdv
cmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2U6OmRpZFJlY2VpdmVCbG9iRGF0
YShpbnQgbGVuZ3RoUmVjZWl2ZWQpCit7CisgICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza0Zvck1v
ZGVUb1dvcmtlckNvbnRleHQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZ3b3JrZXJDb250ZXh0RGlkUmVj
ZWl2ZUJsb2JEYXRhLCBtX3dvcmtlckNsaWVudFdyYXBwZXIsIGxlbmd0aFJlY2VpdmVkKSwgbV90
YXNrTW9kZSk7Cit9CisKIHN0YXRpYyB2b2lkIHdvcmtlckNvbnRleHREaWRGaW5pc2hMb2FkaW5n
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFJlZlB0cjxUaHJlYWRhYmxlTG9hZGVy
Q2xpZW50V3JhcHBlcj4gd29ya2VyQ2xpZW50V3JhcHBlciwgdW5zaWduZWQgbG9uZyBpZGVudGlm
aWVyKQogewogICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwgY29udGV4dC0+aXNXb3JrZXJDb250
ZXh0KCkpOwpAQCAtMjA5LDYgKzIyMCwyMCBAQCB2b2lkIFdvcmtlclRocmVhZGFibGVMb2FkZXI6
Ok1haW5UaHJlYWRCCiAgICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckNv
bnRleHQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZ3b3JrZXJDb250ZXh0RGlkRmluaXNoTG9hZGluZywg
bV93b3JrZXJDbGllbnRXcmFwcGVyLCBpZGVudGlmaWVyKSwgbV90YXNrTW9kZSk7CiB9CiAKK3N0
YXRpYyB2b2lkIHdvcmtlckNvbnRleHREaWRGaW5pc2hMb2FkaW5nQmxvYihTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBSZWZQdHI8VGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXI+
IHdvcmtlckNsaWVudFdyYXBwZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBLVVJMIGJsb2JJRCwgU3RyaW5n
IHR5cGUsIGxvbmcgbG9uZyBzaXplKQoreworICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwgY29u
dGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpOworICAgIFJlZlB0cjxCbG9iPiBibG9iID0gQmxvYjo6
Y3JlYXRlKGJsb2JJRCwgdHlwZSwgc2l6ZSk7CisgICAgd29ya2VyQ2xpZW50V3JhcHBlci0+ZGlk
RmluaXNoTG9hZGluZ0Jsb2IoaWRlbnRpZmllciwgYmxvYi5nZXQoKSk7Cit9CisKK3ZvaWQgV29y
a2VyVGhyZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEJyaWRnZTo6ZGlkRmluaXNoTG9hZGluZ0Js
b2IodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBCbG9iKiBibG9iKQoreworICAgIG1fZG93bmxv
YWRlZEJsb2IgPSBibG9iOworICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tGb3JNb2RlVG9Xb3Jr
ZXJDb250ZXh0KGNyZWF0ZUNhbGxiYWNrVGFzaygmd29ya2VyQ29udGV4dERpZEZpbmlzaExvYWRp
bmdCbG9iLCBtX3dvcmtlckNsaWVudFdyYXBwZXIsIGlkZW50aWZpZXIsIGJsb2ItPnVybCgpLCBi
bG9iLT50eXBlKCksIGJsb2ItPnNpemUoKSksIG1fdGFza01vZGUpOworfQorCiBzdGF0aWMgdm9p
ZCB3b3JrZXJDb250ZXh0RGlkRmFpbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBS
ZWZQdHI8VGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXI+IHdvcmtlckNsaWVudFdyYXBwZXIs
IGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQogewogICAgIEFTU0VSVF9VTlVTRUQoY29udGV4
dCwgY29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvV29y
a2VyVGhyZWFkYWJsZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1dvcmtl
clRocmVhZGFibGVMb2FkZXIuaAkocmV2aXNpb24gNjkzNjYpCisrKyBXZWJDb3JlL2xvYWRlci9X
b3JrZXJUaHJlYWRhYmxlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNCwxMiArMTE0LDE0
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5k
RGF0YSh1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90
YWxCeXRlc1RvQmVTZW50KTsKICAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVz
cG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogICAgICAgICAgICAgdmlydHVhbCB2b2lk
IGRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqLCBpbnQgbGVuZ3RoUmVjZWl2ZWQpOworICAgICAg
ICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVCbG9iRGF0YShpbnQgbGVuZ3RoUmVjZWl2ZWQp
OwogICAgICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyKTsKKyAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5n
QmxvYih1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIEJsb2IqKTsKICAgICAgICAgICAgIHZpcnR1
YWwgdm9pZCBkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKICAgICAgICAgICAgIHZpcnR1
YWwgdm9pZCBkaWRGYWlsUmVkaXJlY3RDaGVjaygpOwogICAgICAgICAgICAgdmlydHVhbCB2b2lk
IGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNhbmNlbGxhdGlvbihjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJik7CiAKLSAgICAgICAgICAgIC8vIE9ubHkgdG8gYmUgdXNlZCBvbiB0aGUgbWFpbiB0aHJl
YWQuCisgICAgICAgICAgICAvLyBGb3IgdXNlIG9uIG1haW4gdGhyZWFkLgogICAgICAgICAgICAg
UmVmUHRyPFRocmVhZGFibGVMb2FkZXI+IG1fbWFpblRocmVhZExvYWRlcjsKIAogICAgICAgICAg
ICAgLy8gVGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXIgaXMgdG8gYmUgdXNlZCBvbiB0aGUg
d29ya2VyIGNvbnRleHQgdGhyZWFkLgpAQCAtMTMxLDYgKzEzMyw5IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogICAgICAgICAgICAgLy8gRm9yIHVzZSBvbiB0aGUgbWFpbiB0aHJlYWQuCiAgICAg
ICAgICAgICBTdHJpbmcgbV90YXNrTW9kZTsKKworICAgICAgICAgICAgLy8gRm9yIHVzZSBvbiB0
aGUgbWFpbiB0aHJlYWQuCisgICAgICAgICAgICBSZWZQdHI8QmxvYj4gbV9kb3dubG9hZGVkQmxv
YjsKICAgICAgICAgfTsKIAogICAgICAgICBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyKFdvcmtlckNv
bnRleHQqLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiwgY29uc3QgU3RyaW5nJiB0YXNrTW9kZSwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMmKTsK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcAkocmV2
aXNpb24gNjkzNjYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw4ICsyNywxMCBAQAogI2luY2x1ZGUgIlJlc291cmNl
SGFuZGxlLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oIgogCisjaW5jbHVk
ZSAiQmxvYi5oIgogI2luY2x1ZGUgIkJsb2JSZWdpc3RyeS5oIgogI2luY2x1ZGUgIkROUy5oIgor
I2luY2x1ZGUgIkhUVFBQYXJzZXJzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUg
IlJlc291cmNlSGFuZGxlQ2xpZW50LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKQEAgLTU0LDYgKzU2
LDcgQEAgUmVzb3VyY2VIYW5kbGU6OlJlc291cmNlSGFuZGxlKGNvbnN0IFJlcwogCiBQYXNzUmVm
UHRyPFJlc291cmNlSGFuZGxlPiBSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlKE5ldHdvcmtpbmdDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlSGFu
ZGxlQ2xpZW50KiBjbGllbnQsIGJvb2wgZGVmZXJzTG9hZGluZywgYm9vbCBzaG91bGRDb250ZW50
U25pZmYpCiB7CisgICAgQVNTRVJUKCFyZXF1ZXN0LmRvd25sb2FkQXNCbG9iKCkpOyAvLyBGSVhN
RTogUHJvdmlkZSBhbiBhc3luY2hyb25vdXMgaW1wbGVtZW50YXRpb24gdGhhdCByZXR1cm5zIGEg
YmxvYiwgcG9zc2libHkgYSBSZXNvdXJjZUhhbmRsZUNsaWVudFdyYXBwZXIuCiAjaWYgRU5BQkxF
KEJMT0IpCiAgICAgaWYgKHJlcXVlc3QudXJsKCkucHJvdG9jb2xJcygiYmxvYiIpKSB7CiAgICAg
ICAgIFBhc3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGhhbmRsZSA9IGJsb2JSZWdpc3RyeSgpLmNy
ZWF0ZVJlc291cmNlSGFuZGxlKHJlcXVlc3QsIGNsaWVudCk7CkBAIC0xODUsNCArMTg4LDEyIEBA
IHZvaWQgUmVzb3VyY2VIYW5kbGU6OmNhY2hlTWV0YWRhdGEoY29uc3QKICAgICAvLyBPcHRpb25h
bGx5IGltcGxlbWVudGVkIGJ5IHBsYXRmb3JtLgogfQogCisvLyBzdGF0aWMKK1Bhc3NSZWZQdHI8
QmxvYj4gUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHlBc0Jsb2IoTmV0
d29ya2luZ0NvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENy
ZWRlbnRpYWxzLCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYpCit7CisgICAgQVNT
RVJUX1VOVVNFRChyZXF1ZXN0LCByZXF1ZXN0LmRvd25sb2FkQXNCbG9iKCkpOworICAgIC8vIEZJ
WE1FOiBQcm92aWRlIGEgc3luY2hyb25vdXMgaW1wbGVtZW50YXRpb24gdGhhdCByZXR1cm5zIGEg
YmxvYi4KKyAgICByZXR1cm4gMDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgJKHJldmlzaW9uIDY5MzY2
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTc0LDYgKzc0LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgT3BhcXVlQ0ZIVFRQQ29va2ll
U3RvcmFnZQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZTsKK2NsYXNzIEJsb2I7CiBjbGFzcyBDcmVkZW50aWFsOwogY2xhc3MgRm9ybURhdGE7CiBj
bGFzcyBGcmFtZTsKQEAgLTk3LDYgKzk4LDcgQEAgY2xhc3MgUmVzb3VyY2VIYW5kbGUgOiBwdWJs
aWMgUmVmQ291bnRlZAogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlc291cmNlSGFu
ZGxlPiBjcmVhdGUoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBS
ZXNvdXJjZUhhbmRsZUNsaWVudCosIGJvb2wgZGVmZXJzTG9hZGluZywgYm9vbCBzaG91bGRDb250
ZW50U25pZmYpOwogICAgIHN0YXRpYyB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0
d29ya2luZ0NvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTdG9yZWRDcmVkZW50aWFs
cywgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEp
OworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2I+IGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHlB
c0Jsb2IoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTdG9yZWRD
cmVkZW50aWFscywgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmKTsKIAogICAgIHN0
YXRpYyB2b2lkIHByZXBhcmVGb3JVUkwoY29uc3QgS1VSTCYpOwogICAgIHN0YXRpYyBib29sIHdp
bGxMb2FkRnJvbUNhY2hlKFJlc291cmNlUmVxdWVzdCYsIEZyYW1lKik7CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVDbGllbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVDbGllbnQuaAkocmV2aXNpb24g
NjkzNjYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVDbGllbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBSZXNvdXJjZUhhbmRs
ZUNsaWVudF9oCiAKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgogCkBAIC00Niw2ICs0Nyw3IEBAIGNsYXNzIE5TQ2FjaGVkVVJMUmVzcG9uc2U7
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBBc3luY0ZpbGVTdHJlYW07CisgICAg
Y2xhc3MgQmxvYjsKICAgICBjbGFzcyBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKICAgICBjbGFz
cyBDcmVkZW50aWFsOwogICAgIGNsYXNzIEZpbGVTdHJlYW1DbGllbnQ7CkBAIC03Miw4ICs3NCwx
MCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2Vp
dmVSZXNwb25zZShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSB7IH0K
ICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFJlc291cmNlSGFuZGxlKiwgY29u
c3QgY2hhciosIGludCwgaW50IC8qbGVuZ3RoUmVjZWl2ZWQqLykgeyB9CisgICAgICAgIHZpcnR1
YWwgdm9pZCBkaWRSZWNlaXZlQmxvYkRhdGEoUmVzb3VyY2VIYW5kbGUqLCBpbnQpIHsgfQogICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKFJlc291cmNlSGFuZGxl
KiwgY29uc3QgY2hhciosIGludCkgeyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hM
b2FkaW5nKFJlc291cmNlSGFuZGxlKiwgZG91YmxlIC8qZmluaXNoVGltZSovKSB7IH0KKyAgICAg
ICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmdCbG9iKFJlc291cmNlSGFuZGxlKiwgZG91
YmxlIC8qZmluaXNoVGltZSovLCBCbG9iKikgeyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRG
YWlsKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpIHsgfQogICAgICAgICB2
aXJ0dWFsIHZvaWQgd2FzQmxvY2tlZChSZXNvdXJjZUhhbmRsZSopIHsgfQogICAgICAgICB2aXJ0
dWFsIHZvaWQgY2Fubm90U2hvd1VSTChSZXNvdXJjZUhhbmRsZSopIHsgfQpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcAkocmV2aXNp
b24gNjkzNjYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAgUGFzc093blB0cjxSZXNvdXJj
ZVJlcXVlc3Q+IFJlc291cmNlUmVxdQogICAgIHJlcXVlc3QtPnNldEZpcnN0UGFydHlGb3JDb29r
aWVzKGRhdGEtPm1fZmlyc3RQYXJ0eUZvckNvb2tpZXMpOwogICAgIHJlcXVlc3QtPnNldEhUVFBN
ZXRob2QoZGF0YS0+bV9odHRwTWV0aG9kKTsKICAgICByZXF1ZXN0LT5zZXRUYXJnZXRUeXBlKGRh
dGEtPm1fdGFyZ2V0VHlwZSk7CisgICAgcmVxdWVzdC0+c2V0RG93bmxvYWRBc0Jsb2IoZGF0YS0+
bV9kb3dubG9hZEFzQmxvYik7CiAKICAgICByZXF1ZXN0LT51cGRhdGVSZXNvdXJjZVJlcXVlc3Qo
KTsKICAgICByZXF1ZXN0LT5tX2h0dHBIZWFkZXJGaWVsZHMuYWRvcHQoZGF0YS0+bV9odHRwSGVh
ZGVycy5yZWxlYXNlKCkpOwpAQCAtNzksNiArODAsNyBAQCBQYXNzT3duUHRyPENyb3NzVGhyZWFk
UmVzb3VyY2VSZXF1ZXN0RGF0CiAgICAgZGF0YS0+bV9odHRwTWV0aG9kID0gaHR0cE1ldGhvZCgp
LmNyb3NzVGhyZWFkU3RyaW5nKCk7CiAgICAgZGF0YS0+bV9odHRwSGVhZGVycyA9IGh0dHBIZWFk
ZXJGaWVsZHMoKS5jb3B5RGF0YSgpOwogICAgIGRhdGEtPm1fdGFyZ2V0VHlwZSA9IG1fdGFyZ2V0
VHlwZTsKKyAgICBkYXRhLT5tX2Rvd25sb2FkQXNCbG9iID0gbV9kb3dubG9hZEFzQmxvYjsKIAog
ICAgIGRhdGEtPm1fcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJy
YXkucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX3Jlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5j
b2RpbmdGYWxsYmFja0FycmF5LnNpemUoKSk7CiAgICAgc2l6ZV90IGVuY29kaW5nQXJyYXlTaXpl
ID0gbV9yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheS5zaXpl
KCk7CkBAIC0zNDEsNyArMzQzLDEwIEBAIGJvb2wgZXF1YWxJZ25vcmluZ0hlYWRlckZpZWxkcyhj
b25zdCBSZXMKICAgICAKICAgICBpZiAoYS5hbGxvd0Nvb2tpZXMoKSAhPSBiLmFsbG93Q29va2ll
cygpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKKyAgICBpZiAoYS5kb3dubG9hZEFz
QmxvYigpICE9IGIuZG93bmxvYWRBc0Jsb2IoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAg
ICAgRm9ybURhdGEqIGZvcm1EYXRhQSA9IGEuaHR0cEJvZHkoKTsKICAgICBGb3JtRGF0YSogZm9y
bURhdGFCID0gYi5odHRwQm9keSgpOwogICAgIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCShyZXZpc2lvbiA2OTM2NikKKysrIFdlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE0NCw2ICsxNDQsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBUYXJnZXRU
eXBlIHRhcmdldFR5cGUoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldFR5cGU7IH0KICAgICAgICAg
dm9pZCBzZXRUYXJnZXRUeXBlKFRhcmdldFR5cGUgdHlwZSkgeyBtX3RhcmdldFR5cGUgPSB0eXBl
OyB9CiAKKyAgICAgICAgLy8gSWYgdHJ1ZSwgdGhlIHJlc3BvbnNlIGJvZHkgd2lsbCBiZSBwcm92
aWRlZCBhcyBhIGJsb2IuCisgICAgICAgIGJvb2wgZG93bmxvYWRBc0Jsb2IoKSBjb25zdCB7IHJl
dHVybiBtX2Rvd25sb2FkQXNCbG9iOyB9CisgICAgICAgIHZvaWQgc2V0RG93bmxvYWRBc0Jsb2Io
Ym9vbCBkb3dubG9hZCkgeyBtX2Rvd25sb2FkQXNCbG9iID0gZG93bmxvYWQ7IH0KKwogICAgICAg
ICBzdGF0aWMgYm9vbCBjb21wYXJlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYpOwogCiAgICAgcHJvdGVjdGVkOgpAQCAtMTU1LDYgKzE1OSw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgICwgbV9yZXBvcnRMb2FkVGltaW5nKGZhbHNlKQog
ICAgICAgICAgICAgLCBtX3JlcG9ydFJhd0hlYWRlcnMoZmFsc2UpCiAgICAgICAgICAgICAsIG1f
dGFyZ2V0VHlwZShUYXJnZXRJc1N1YnJlc291cmNlKQorICAgICAgICAgICAgLCBtX2Rvd25sb2Fk
QXNCbG9iKGZhbHNlKQogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtMTcwLDYgKzE3NSw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgICwgbV9yZXBvcnRMb2FkVGltaW5nKGZh
bHNlKQogICAgICAgICAgICAgLCBtX3JlcG9ydFJhd0hlYWRlcnMoZmFsc2UpCiAgICAgICAgICAg
ICAsIG1fdGFyZ2V0VHlwZShUYXJnZXRJc1N1YnJlc291cmNlKQorICAgICAgICAgICAgLCBtX2Rv
d25sb2FkQXNCbG9iKGZhbHNlKQogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtMTk1LDYgKzIw
MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX3JlcG9ydExvYWRUaW1p
bmc7CiAgICAgICAgIGJvb2wgbV9yZXBvcnRSYXdIZWFkZXJzOwogICAgICAgICBUYXJnZXRUeXBl
IG1fdGFyZ2V0VHlwZTsKKyAgICAgICAgYm9vbCBtX2Rvd25sb2FkQXNCbG9iOwogCiAgICAgcHJp
dmF0ZToKICAgICAgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBhc1Jlc291cmNlUmVxdWVzdCgp
IGNvbnN0OwpAQCAtMjE4LDYgKzIyNSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
UmVmUHRyPEZvcm1EYXRhPiBtX2h0dHBCb2R5OwogICAgICAgICBib29sIG1fYWxsb3dDb29raWVz
OwogICAgICAgICBSZXNvdXJjZVJlcXVlc3RCYXNlOjpUYXJnZXRUeXBlIG1fdGFyZ2V0VHlwZTsK
KyAgICAgICAgYm9vbCBtX2Rvd25sb2FkQXNCbG9iOwogICAgIH07CiAgICAgCiAgICAgdW5zaWdu
ZWQgaW5pdGlhbGl6ZU1heGltdW1IVFRQQ29ubmVjdGlvbkNvdW50UGVySG9zdCgpOwpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuY3Bw
CShyZXZpc2lvbiA2OTM2NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJl
c3BvbnNlQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Miw2ICsxNzIsMTMgQEAgdm9pZCBS
ZXNvdXJjZVJlc3BvbnNlQmFzZTo6c2V0TWltZVR5cGUoYwogICAgIG1fbWltZVR5cGUgPSBtaW1l
VHlwZTsgCiB9CiAKK1N0cmluZyBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6ZXh0cmFjdE1pbWVUeXBl
KCkgY29uc3QKK3sKKyAgICBpZiAoaXNIVFRQKCkpCisgICAgICAgIHJldHVybiBleHRyYWN0TUlN
RVR5cGVGcm9tTWVkaWFUeXBlKGh0dHBIZWFkZXJGaWVsZCgiQ29udGVudC1UeXBlIikpOworICAg
IHJldHVybiBtaW1lVHlwZSgpOworfQorCiBsb25nIGxvbmcgUmVzb3VyY2VSZXNwb25zZUJhc2U6
OmV4cGVjdGVkQ29udGVudExlbmd0aCgpIGNvbnN0IAogewogICAgIGxhenlJbml0KCk7CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuaAko
cmV2aXNpb24gNjkzNjYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNw
b25zZUJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsNyBAQCBwdWJsaWM6CiAKICAg
ICBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRNaW1lVHlwZShj
b25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKKyAgICBTdHJpbmcgZXh0cmFjdE1pbWVUeXBlKCkgY29u
c3Q7CiAKICAgICBsb25nIGxvbmcgZXhwZWN0ZWRDb250ZW50TGVuZ3RoKCkgY29uc3Q7CiAgICAg
dm9pZCBzZXRFeHBlY3RlZENvbnRlbnRMZW5ndGgobG9uZyBsb25nIGV4cGVjdGVkQ29udGVudExl
bmd0aCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vUmVzb3VyY2VS
ZXF1ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVt
L1Jlc291cmNlUmVxdWVzdC5oCShyZXZpc2lvbiA2OTM2NikKKysrIFdlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtODQs
NiArODQsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBpbnQgYXBwQ2FjaGVIb3N0
SUQoKSBjb25zdCB7IHJldHVybiBtX2FwcENhY2hlSG9zdElEOyB9CiAgICAgICAgIHZvaWQgc2V0
QXBwQ2FjaGVIb3N0SUQoaW50IGlkKSB7IG1fYXBwQ2FjaGVIb3N0SUQgPSBpZDsgfQogCisgICAg
ICAgIC8vIElmIHRydWUsIHRoZSByZXNwb25zZSBib2R5IHdpbGwgYmUgcHJvdmlkZWQgYXMgYSBm
aWxlLgorICAgICAgICBib29sIGRvd25sb2FkVG9GaWxlKCkgY29uc3QgeyByZXR1cm4gZG93bmxv
YWRBc0Jsb2IoKTsgfQorICAgICAgICB2b2lkIHNldERvd25sb2FkVG9GaWxlKGJvb2wgZG93bmxv
YWQpIHsgc2V0RG93bmxvYWRBc0Jsb2IoZG93bmxvYWQpOyB9CisKICAgICBwcml2YXRlOgogICAg
ICAgICBmcmllbmQgY2xhc3MgUmVzb3VyY2VSZXF1ZXN0QmFzZTsKIApJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL1Jlc291cmNlUmVzcG9uc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlc3BvbnNlLmNw
cAkocmV2aXNpb24gNjkzNjYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0v
UmVzb3VyY2VSZXNwb25zZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDE4IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY29uc3QgU3RyaW5nJiBSZXNvdXJjZVJlc3BvbnNlOjpk
b3dubG9hZEZpbGVQYXRoKCkgY29uc3QKK3sKKyAgICBsYXp5SW5pdCgpOworICAgIHJldHVybiBt
X2Rvd25sb2FkRmlsZVBhdGg7Cit9CisKK3ZvaWQgUmVzb3VyY2VSZXNwb25zZTo6c2V0RG93bmxv
YWRGaWxlUGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgbGF6eUluaXQoKTsKKyAgICBt
X2Rvd25sb2FkRmlsZVBhdGggID0gcGF0aDsKK30KKwogUGFzc093blB0cjxDcm9zc1RocmVhZFJl
c291cmNlUmVzcG9uc2VEYXRhPiBSZXNvdXJjZVJlc3BvbnNlOjpkb1BsYXRmb3JtQ29weURhdGEo
UGFzc093blB0cjxDcm9zc1RocmVhZFJlc291cmNlUmVzcG9uc2VEYXRhPiBkYXRhKSBjb25zdAog
ewogICAgIGRhdGEtPm1fYXBwQ2FjaGVJRCA9IG1fYXBwQ2FjaGVJRDsKQEAgLTM5LDYgKzUxLDcg
QEAgUGFzc093blB0cjxDcm9zc1RocmVhZFJlc291cmNlUmVzcG9uc2VEYQogICAgIGRhdGEtPm1f
d2FzQWx0ZXJuYXRlUHJvdG9jb2xBdmFpbGFibGUgPSBtX3dhc0FsdGVybmF0ZVByb3RvY29sQXZh
aWxhYmxlOwogICAgIGRhdGEtPm1fd2FzRmV0Y2hlZFZpYVByb3h5ID0gbV93YXNGZXRjaGVkVmlh
UHJveHk7CiAgICAgZGF0YS0+bV9yZXNwb25zZVRpbWUgPSBtX3Jlc3BvbnNlVGltZTsKKyAgICBk
YXRhLT5tX2Rvd25sb2FkRmlsZVBhdGggPSBtX2Rvd25sb2FkRmlsZVBhdGg7CiAgICAgcmV0dXJu
IGRhdGE7CiB9CiAKQEAgLTUzLDYgKzY2LDcgQEAgdm9pZCBSZXNvdXJjZVJlc3BvbnNlOjpkb1Bs
YXRmb3JtQWRvcHQoUAogICAgIG1fd2FzQWx0ZXJuYXRlUHJvdG9jb2xBdmFpbGFibGUgPSBkYXRh
LT5tX3dhc0FsdGVybmF0ZVByb3RvY29sQXZhaWxhYmxlOwogICAgIG1fd2FzRmV0Y2hlZFZpYVBy
b3h5ID0gZGF0YS0+bV93YXNGZXRjaGVkVmlhUHJveHk7CiAgICAgbV9yZXNwb25zZVRpbWUgPSBk
YXRhLT5tX3Jlc3BvbnNlVGltZTsKKyAgICBtX2Rvd25sb2FkRmlsZVBhdGggPSBkYXRhLT5tX2Rv
d25sb2FkRmlsZVBhdGg7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlc3BvbnNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL1Jlc291cmNlUmVzcG9uc2Uu
aAkocmV2aXNpb24gNjkzNjYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0v
UmVzb3VyY2VSZXNwb25zZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05Niw2ICs5NiwxMyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGRvdWJsZSByZXNwb25zZVRpbWUoKSBjb25zdCB7IHJl
dHVybiBtX3Jlc3BvbnNlVGltZTsgfQogICAgICAgICB2b2lkIHNldFJlc3BvbnNlVGltZShkb3Vi
bGUgcmVzcG9uc2VUaW1lKSB7IG1fcmVzcG9uc2VUaW1lID0gcmVzcG9uc2VUaW1lOyB9CiAKKyAg
ICAgICAgLy8gSW5kaWNhdGVzIHRoZSBsb2NhdGlvbiBvZiBhIGRvd25sb2FkZWQgcmVzcG9uc2Ug
aWYgdGhlCisgICAgICAgIC8vIFJlc291cmNlUmVxdWVzdCBoYWQgdGhlIGRvd25sb2FkVG9GaWxl
L0Jsb2IgZmxhZyBzZXQgdG8gdHJ1ZS4KKyAgICAgICAgLy8gVGhlIGZpbGUgd2lsbCByZW1haW4g
dmFsaWQgdW50aWwgdGhlIFJlc291cmNlSGFuZGxlIHVzZWQKKyAgICAgICAgLy8gdG8gcmV0cmll
dmUgdGhpcyBmaWxlIGhhcyBiZWVuIGRlbGV0ZWQuCisgICAgICAgIGNvbnN0IFN0cmluZyYgZG93
bmxvYWRGaWxlUGF0aCgpIGNvbnN0OworICAgICAgICB2b2lkIHNldERvd25sb2FkRmlsZVBhdGgo
Y29uc3QgU3RyaW5nJiBwYXRoKTsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFz
cyBSZXNvdXJjZVJlc3BvbnNlQmFzZTsKIApAQCAtMTQzLDYgKzE1MCw5IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgLy8gVGhlIHRpbWUgYXQgd2hpY2ggdGhlIHJlc3BvbnNlIGhlYWRl
cnMgd2VyZSByZWNlaXZlZC4gIEZvciBjYWNoZWQKICAgICAgICAgLy8gcmVzcG9uc2VzLCB0aGlz
IHRpbWUgY291bGQgYmUgImZhciIgaW4gdGhlIHBhc3QuCiAgICAgICAgIGRvdWJsZSBtX3Jlc3Bv
bnNlVGltZTsKKworICAgICAgICAvLyBUaGUgcmVzdWx0aW5nIGRvd25sb2FkZWQgZmlsZSBwYXRo
IGluIHRoZSByZXF1ZXN0LmRvd25sb2FkVG9GaWxlIGNhc2UuCisgICAgICAgIFN0cmluZyBtX2Rv
d25sb2FkRmlsZVBhdGg7CiAgICAgfTsKIAogICAgIHN0cnVjdCBDcm9zc1RocmVhZFJlc291cmNl
UmVzcG9uc2VEYXRhIDogcHVibGljIENyb3NzVGhyZWFkUmVzb3VyY2VSZXNwb25zZURhdGFCYXNl
IHsKQEAgLTE1NSw2ICsxNjUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wg
bV93YXNBbHRlcm5hdGVQcm90b2NvbEF2YWlsYWJsZTsKICAgICAgICAgYm9vbCBtX3dhc0ZldGNo
ZWRWaWFQcm94eTsKICAgICAgICAgZG91YmxlIG1fcmVzcG9uc2VUaW1lOworICAgICAgICBTdHJp
bmcgbV9kb3dubG9hZEZpbGVQYXRoOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAJKHJldmlzaW9uIDY5MzY2KQorKysgV2ViQ29yZS94
bWwvWE1MSHR0cFJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NzUsNiArNTc1LDEwIEBA
IHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmNyZWF0ZVJlcXVlc3QoRXhjZXAKICAgICBpZiAobV9yZXF1
ZXN0SGVhZGVycy5zaXplKCkgPiAwKQogICAgICAgICByZXF1ZXN0LmFkZEhUVFBIZWFkZXJGaWVs
ZHMobV9yZXF1ZXN0SGVhZGVycyk7CiAKKyNpZiBFTkFCTEUoWEhSX1JFU1BPTlNFX0JMT0IpCisg
ICAgcmVxdWVzdC5zZXREb3dubG9hZEFzQmxvYihtX2FzQmxvYik7CisjZW5kaWYKKwogICAgIFRo
cmVhZGFibGVMb2FkZXJPcHRpb25zIG9wdGlvbnM7CiAgICAgb3B0aW9ucy5zZW5kTG9hZENhbGxi
YWNrcyA9IHRydWU7CiAgICAgb3B0aW9ucy5zbmlmZkNvbnRlbnQgPSBmYWxzZTsKQEAgLTg1NCwx
NSArODU4LDEwIEBAIFN0cmluZyBYTUxIdHRwUmVxdWVzdDo6Z2V0UmVzcG9uc2VIZWFkZXIKIFN0
cmluZyBYTUxIdHRwUmVxdWVzdDo6cmVzcG9uc2VNSU1FVHlwZSgpIGNvbnN0CiB7CiAgICAgU3Ry
aW5nIG1pbWVUeXBlID0gZXh0cmFjdE1JTUVUeXBlRnJvbU1lZGlhVHlwZShtX21pbWVUeXBlT3Zl
cnJpZGUpOwotICAgIGlmIChtaW1lVHlwZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgaWYgKG1fcmVz
cG9uc2UuaXNIVFRQKCkpCi0gICAgICAgICAgICBtaW1lVHlwZSA9IGV4dHJhY3RNSU1FVHlwZUZy
b21NZWRpYVR5cGUobV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGQoIkNvbnRlbnQtVHlwZSIpKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgbWltZVR5cGUgPSBtX3Jlc3BvbnNlLm1pbWVUeXBl
KCk7Ci0gICAgfQorICAgIGlmIChtaW1lVHlwZS5pc0VtcHR5KCkpCisgICAgICAgIG1pbWVUeXBl
ID0gbV9yZXNwb25zZS5leHRyYWN0TWltZVR5cGUoKTsKICAgICBpZiAobWltZVR5cGUuaXNFbXB0
eSgpKQogICAgICAgICBtaW1lVHlwZSA9ICJ0ZXh0L3htbCI7Ci0KICAgICByZXR1cm4gbWltZVR5
cGU7CiB9CiAKQEAgLTk0NCwxMCArOTQzLDYgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlkRmlu
aXNoTG9hZGluZyh1bgogICAgIGlmIChtX2RlY29kZXIpCiAgICAgICAgIG1fcmVzcG9uc2VUZXh0
ICs9IG1fZGVjb2Rlci0+Zmx1c2goKTsKIAotI2lmIEVOQUJMRShYSFJfUkVTUE9OU0VfQkxPQikK
LSAgICAvLyBGSVhNRTogU2V0IG1fcmVzcG9uc2VCbG9iIHRvIHNvbWV0aGluZyBoZXJlIGluIHRo
ZSBtX2FzQmxvYiBjYXNlLgotI2VuZGlmCi0KICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIGlm
IChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3IgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0
KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKSkKICAgICAgICAgaW5zcGVjdG9yLT5yZXNvdXJjZVJl
dHJpZXZlZEJ5WE1MSHR0cFJlcXVlc3QoaWRlbnRpZmllciwgbV9yZXNwb25zZVRleHQsIG1fdXJs
LCBtX2xhc3RTZW5kVVJMLCBtX2xhc3RTZW5kTGluZU51bWJlcik7CkBAIC05NjMsNiArOTU4LDE5
IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpZEZpbmlzaExvYWRpbmcodW4KICAgICAgICAgZHJv
cFByb3RlY3Rpb24oKTsKIH0KIAordm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlkRmluaXNoTG9hZGlu
Z0Jsb2IodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBCbG9iKiBibG9iKQoreworI2lmIEVOQUJM
RShYSFJfUkVTUE9OU0VfQkxPQikKKyAgICBpZiAoIW1fZXJyb3IpCisgICAgICAgIG1fcmVzcG9u
c2VCbG9iID0gYmxvYjsKKyAgICBkaWRGaW5pc2hMb2FkaW5nKGlkZW50aWZpZXIpOworI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0oaWRlbnRpZmllcik7CisgICAgVU5VU0VEX1BBUkFNKGJsb2IpOwor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCit9CisKIHZvaWQgWE1MSHR0cFJlcXVl
c3Q6OmRpZFNlbmREYXRhKHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxv
bmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpCiB7CiAgICAgaWYgKCFtX3VwbG9hZCkKQEAgLTk5
MSw3ICs5OTksMjMgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlkUmVjZWl2ZUF1dGhlbnRpYwog
ICAgIG1fcmVzcG9uc2UgPSBmYWlsdXJlUmVzcG9uc2U7CiB9CiAKLXZvaWQgWE1MSHR0cFJlcXVl
c3Q6OmRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW4pCit2b2lkIFhNTEh0
dHBSZXF1ZXN0OjpkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQor
eworICAgIGRpZFJlY2VpdmVEYXRhQ29tbW9uKFJlc3BvbnNlQXNEYXRhLCBkYXRhLCBsZW5ndGgp
OworfQorCit2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRSZWNlaXZlQmxvYkRhdGEoaW50IGxlbmd0
aCkKK3sKKyNpZiBFTkFCTEUoWEhSX1JFU1BPTlNFX0JMT0IpCisgICAgQVNTRVJUKGxlbmd0aCA+
PSAwKTsKKyAgICBkaWRSZWNlaXZlRGF0YUNvbW1vbihSZXNwb25zZUFzQmxvYiwgMCwgbGVuZ3Ro
KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGxlbmd0aCk7CisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisjZW5kaWYKK30KKwordm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlkUmVjZWl2ZURhdGFD
b21tb24oUmVzcG9uc2VBc01vZGUgcmVzcG9uc2VBcywgY29uc3QgY2hhciogZGF0YSwgaW50IGxl
bmd0aCkKIHsKICAgICBpZiAobV9lcnJvcikKICAgICAgICAgcmV0dXJuOwpAQCAtOTk5LDcgKzEw
MjMsOCBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRSZWNlaXZlRGF0YShjb25zCiAgICAgaWYg
KG1fc3RhdGUgPCBIRUFERVJTX1JFQ0VJVkVEKQogICAgICAgICBjaGFuZ2VTdGF0ZShIRUFERVJT
X1JFQ0VJVkVEKTsKIAotICAgIGlmICghbV9kZWNvZGVyKSB7CisgICAgaWYgKGRhdGEgJiYgIW1f
ZGVjb2RlcikgeworICAgICAgICBBU1NFUlQocmVzcG9uc2VBcyA9PSBSZXNwb25zZUFzRGF0YSk7
CiAgICAgICAgIGlmICghbV9yZXNwb25zZUVuY29kaW5nLmlzRW1wdHkoKSkKICAgICAgICAgICAg
IG1fZGVjb2RlciA9IFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZSgidGV4dC9wbGFpbiIsIG1f
cmVzcG9uc2VFbmNvZGluZyk7CiAgICAgICAgIC8vIGFsbG93IFRleHRSZXNvdXJjZURlY29kZXIg
dG8gbG9vayBpbnNpZGUgdGhlIG1fcmVzcG9uc2UgaWYgaXQncyBYTUwgb3IgSFRNTApAQCAtMTAx
MywxNyArMTAzOCwxOSBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRSZWNlaXZlRGF0YShjb25z
CiAgICAgICAgICAgICBtX2RlY29kZXIgPSBUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUoInRl
eHQvcGxhaW4iLCAiVVRGLTgiKTsKICAgICB9CiAKLSAgICBpZiAoIWxlbikKLSAgICAgICAgcmV0
dXJuOworICAgIGlmIChyZXNwb25zZUFzID09IFJlc3BvbnNlQXNEYXRhKSB7CisgICAgICAgIGlm
ICghbGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGxlbiA9PSAtMSkKLSAg
ICAgICAgbGVuID0gc3RybGVuKGRhdGEpOworICAgICAgICBpZiAobGVuZ3RoID09IC0xKSAKKyAg
ICAgICAgICAgIGxlbmd0aCA9IHN0cmxlbihkYXRhKTsKIAotICAgIG1fcmVzcG9uc2VUZXh0ICs9
IG1fZGVjb2Rlci0+ZGVjb2RlKGRhdGEsIGxlbik7CisgICAgICAgIG1fcmVzcG9uc2VUZXh0ICs9
IG1fZGVjb2Rlci0+ZGVjb2RlKGRhdGEsIGxlbmd0aCk7CisgICAgfQogCiAgICAgaWYgKCFtX2Vy
cm9yKSB7CiAgICAgICAgIGxvbmcgbG9uZyBleHBlY3RlZExlbmd0aCA9IG1fcmVzcG9uc2UuZXhw
ZWN0ZWRDb250ZW50TGVuZ3RoKCk7Ci0gICAgICAgIG1fcmVjZWl2ZWRMZW5ndGggKz0gbGVuOwor
ICAgICAgICBtX3JlY2VpdmVkTGVuZ3RoICs9IGxlbmd0aDsKIAogICAgICAgICBpZiAobV9hc3lu
YykgewogICAgICAgICAgICAgYm9vbCBsZW5ndGhDb21wdXRhYmxlID0gZXhwZWN0ZWRMZW5ndGgg
JiYgbV9yZWNlaXZlZExlbmd0aCA8PSBleHBlY3RlZExlbmd0aDsKSW5kZXg6IFdlYkNvcmUveG1s
L1hNTEh0dHBSZXF1ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVl
c3QuaAkocmV2aXNpb24gNjkzNjYpCisrKyBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTEsNiArMTExLDExIEBAIHB1YmxpYzoKICAgICB1c2luZyBSZWZD
b3VudGVkPFhNTEh0dHBSZXF1ZXN0Pjo6ZGVyZWY7CiAKIHByaXZhdGU6CisgICAgZW51bSBSZXNw
b25zZUFzTW9kZSAgeworICAgICAgICBSZXNwb25zZUFzRGF0YSwKKyAgICAgICAgUmVzcG9uc2VB
c0Jsb2IKKyAgICB9OworCiAgICAgWE1MSHR0cFJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCopOwogCiAgICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgeyByZWYoKTsgfQpAQCAt
MTI3LDExICsxMzIsMTUgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgZGlkU2VuZERhdGEo
dW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0
ZXNUb0JlU2VudCk7CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJik7CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKGNvbnN0
IGNoYXIqIGRhdGEsIGludCBsZW5ndGhSZWNlaXZlZCk7CisgICAgdmlydHVhbCB2b2lkIGRpZFJl
Y2VpdmVCbG9iRGF0YShpbnQgbGVuZ3RoUmVjZWl2ZWQpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRG
aW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcik7CisgICAgdmlydHVhbCB2b2lk
IGRpZEZpbmlzaExvYWRpbmdCbG9iKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgQmxvYiopOwog
ICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKICAgICB2aXJ0
dWFsIHZvaWQgZGlkRmFpbFJlZGlyZWN0Q2hlY2soKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVj
ZWl2ZUF1dGhlbnRpY2F0aW9uQ2FuY2VsbGF0aW9uKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsK
IAorICAgIHZvaWQgZGlkUmVjZWl2ZURhdGFDb21tb24oUmVzcG9uc2VBc01vZGUsIGNvbnN0IGNo
YXIqLCBpbnQgbGVuZ3RoUmVjZWl2ZWQpOworCiAgICAgU3RyaW5nIHJlc3BvbnNlTUlNRVR5cGUo
KSBjb25zdDsKICAgICBib29sIHJlc3BvbnNlSXNYTUwoKSBjb25zdDsKIApJbmRleDogV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCShyZXZpc2lvbiA2OTM2NikKKysrIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwzMyBAQAorMjAxMC0xMC0wNSAgTWljaGFlbCBOb3JkbWFuICA8
bWljaGFlbG5AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgZ2V0dGluZyB0aGUgcmVzdWx0IG9mIGEgcmVz
b3VyY2UgcmVxdWVzdCBhcyBhIGJsb2IuCisgICAgICAgIEluIENocm9tZSwgdGhpcyBmZWF0dXJl
IGlzIGltcGxlbWVudGVkIGluIHRlcm1zIG9mIHRoZSAnZG93bmxvYWRUb0ZpbGUnCisgICAgICAg
IGZlYXR1cmUgb2YgdGhlIG5ldHdvcmsgc3RhY2suCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDcyMgorCisgICAgICAgICogc3JjL1Jlc291cmNlSGFu
ZGxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlSW50ZXJuYWw6OlJlc291
cmNlSGFuZGxlSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVJbnRl
cm5hbDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFu
ZGxlSW50ZXJuYWw6OmRpZERvd25sb2FkRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZUludGVybmFsOjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlSGFuZGxlSW50ZXJuYWw6OmRldGVybWluZUNvbnRlbnRUeXBlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlSGFuZGxlSW50ZXJuYWw6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkp
OgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9u
b3VzbHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5
bmNocm9ub3VzbHlBc0Jsb2IpOgorICAgICAgICAqIHNyYy9XZWJVUkxSZXF1ZXN0LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViVVJMUmVxdWVzdFByaXZhdGVJbXBsOjpXZWJVUkxSZXF1ZXN0UHJp
dmF0ZUltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXF1ZXN0Ojpkb3dubG9hZFRvRmls
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlcXVlc3Q6OnNldERvd25sb2FkVG9GaWxlKToK
KyAgICAgICAgKiBzcmMvV2ViVVJMUmVxdWVzdFByaXZhdGUuaDoKKyAgICAgICAgKFdlYktpdDo6
V2ViVVJMUmVxdWVzdFByaXZhdGU6OldlYlVSTFJlcXVlc3RQcml2YXRlKToKKyAgICAgICAgKiBz
cmMvV2ViVVJMUmVzcG9uc2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXNwb25zZVBy
aXZhdGVJbXBsOjpXZWJVUkxSZXNwb25zZVByaXZhdGVJbXBsKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVVJMUmVzcG9uc2U6OmRvd25sb2FkRmlsZVBhdGgpOgorICAgICAgICAoV2ViS2l0OjpXZWJV
UkxSZXNwb25zZTo6c2V0RG93bmxvYWRGaWxlUGF0aCk6CisgICAgICAgICogc3JjL1dlYlVSTFJl
c3BvbnNlUHJpdmF0ZS5oOgorCiAyMDEwLTEwLTA3ICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVG9ueSBDaGFuZy4KSW5kZXg6IFdlYktpdC9jaHJv
bWl1bS9zcmMvUmVzb3VyY2VIYW5kbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1
bS9zcmMvUmVzb3VyY2VIYW5kbGUuY3BwCShyZXZpc2lvbiA2OTM2NikKKysrIFdlYktpdC9jaHJv
bWl1bS9zcmMvUmVzb3VyY2VIYW5kbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKIAor
I2luY2x1ZGUgIkJsb2IuaCIKICNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgogI2luY2x1ZGUg
IlJlc291cmNlSGFuZGxlQ2xpZW50LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCkBA
IC01OCw2ICs1OSw3IEBAIHB1YmxpYzoKICAgICAgICAgOiBtX3JlcXVlc3QocmVxdWVzdCkKICAg
ICAgICAgLCBtX293bmVyKDApCiAgICAgICAgICwgbV9jbGllbnQoY2xpZW50KQorICAgICAgICAs
IG1fZG93bmxvYWRlZEZpbGVMZW5ndGgoMCkKICAgICAgICAgLCBtX3N0YXRlKENvbm5lY3Rpb25T
dGF0ZU5ldykKICAgICB7CiAgICAgfQpAQCAtNzMsMTAgKzc1LDE0IEBAIHB1YmxpYzoKICAgICAg
ICAgV2ViVVJMTG9hZGVyKiwgdW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQg
bG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCk7CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2Vp
dmVSZXNwb25zZShXZWJVUkxMb2FkZXIqLCBjb25zdCBXZWJVUkxSZXNwb25zZSYpOwogICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShXZWJVUkxMb2FkZXIqLCBjb25zdCBjaGFyKiBkYXRh
LCBpbnQgZGF0YUxlbmd0aCk7CisgICAgdmlydHVhbCB2b2lkIGRpZERvd25sb2FkRGF0YShXZWJV
UkxMb2FkZXIqLCBpbnQgZGF0YUxlbmd0aCk7CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVD
YWNoZWRNZXRhZGF0YShXZWJVUkxMb2FkZXIqLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgZGF0YUxl
bmd0aCk7CiAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoV2ViVVJMTG9hZGVyKiwg
ZG91YmxlIGZpbmlzaFRpbWUpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKFdlYlVSTExvYWRl
ciosIGNvbnN0IFdlYlVSTEVycm9yJik7CiAKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iPiBs
b2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KAorICAgICAgICBOZXR3b3JraW5nQ29udGV4dCosICBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTdG9yZWRDcmVkZW50aWFscywgUmVzb3VyY2VFcnJvciYs
IFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4qKTsKKwogICAgIGVudW0gQ29ubmVjdGlv
blN0YXRlIHsKICAgICAgICAgQ29ubmVjdGlvblN0YXRlTmV3LAogICAgICAgICBDb25uZWN0aW9u
U3RhdGVTdGFydGVkLApAQCAtOTEsNiArOTcsOSBAQCBwdWJsaWM6CiAgICAgUmVzb3VyY2VIYW5k
bGUqIG1fb3duZXI7CiAgICAgUmVzb3VyY2VIYW5kbGVDbGllbnQqIG1fY2xpZW50OwogICAgIE93
blB0cjxXZWJVUkxMb2FkZXI+IG1fbG9hZGVyOworICAgIFN0cmluZyBtX2Rvd25sb2FkZWRGaWxl
UGF0aDsKKyAgICBTdHJpbmcgbV9kb3dubG9hZGVkRmlsZUNvbnRlbnRUeXBlOworICAgIGxvbmcg
bG9uZyBtX2Rvd25sb2FkZWRGaWxlTGVuZ3RoOwogCiAgICAgLy8gVXNlZCBmb3Igc2FuaXR5IGNo
ZWNraW5nIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBleHBlcmllbmNlIGlsbGVnYWwgc3RhdGUKICAg
ICAvLyB0cmFuc2l0aW9ucy4KQEAgLTE1Niw2ICsxNjUsMTAgQEAgdm9pZCBSZXNvdXJjZUhhbmRs
ZUludGVybmFsOjpkaWRSZWNlaXZlUgogICAgIGlmICghaXNNdWx0aXBhcnQgJiYgIWlzVmFsaWRT
dGF0ZVRyYW5zaXRpb24pCiAgICAgICAgIENSQVNIKCk7CiAgICAgbV9zdGF0ZSA9IENvbm5lY3Rp
b25TdGF0ZVJlY2VpdmVkUmVzcG9uc2U7CisgICAgaWYgKG1fcmVxdWVzdC5kb3dubG9hZFRvRmls
ZSgpKSB7CisgICAgICAgIG1fZG93bmxvYWRlZEZpbGVQYXRoID0gcmVzcG9uc2UudG9SZXNvdXJj
ZVJlc3BvbnNlKCkuZG93bmxvYWRGaWxlUGF0aCgpOworICAgICAgICBtX2Rvd25sb2FkZWRGaWxl
Q29udGVudFR5cGUgPSByZXNwb25zZS50b1Jlc291cmNlUmVzcG9uc2UoKS5leHRyYWN0TWltZVR5
cGUoKTsKKyAgICB9CiAgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZShtX293bmVyLCBy
ZXNwb25zZS50b1Jlc291cmNlUmVzcG9uc2UoKSk7CiB9CiAKQEAgLTE3Myw2ICsxODYsMTcgQEAg
dm9pZCBSZXNvdXJjZUhhbmRsZUludGVybmFsOjpkaWRSZWNlaXZlRAogICAgIG1fY2xpZW50LT5k
aWRSZWNlaXZlRGF0YShtX293bmVyLCBkYXRhLCBkYXRhTGVuZ3RoLCBkYXRhTGVuZ3RoKTsKIH0K
IAordm9pZCBSZXNvdXJjZUhhbmRsZUludGVybmFsOjpkaWREb3dubG9hZERhdGEoV2ViVVJMTG9h
ZGVyKiwgaW50IGRhdGFMZW5ndGgpCit7CisgICAgQVNTRVJUKG1fY2xpZW50KTsKKyAgICBBU1NF
UlQobV9yZXF1ZXN0LmRvd25sb2FkVG9GaWxlKCkpOworICAgIGlmIChtX3N0YXRlICE9IENvbm5l
Y3Rpb25TdGF0ZVJlY2VpdmVkUmVzcG9uc2UgJiYgbV9zdGF0ZSAhPSBDb25uZWN0aW9uU3RhdGVS
ZWNlaXZpbmdEYXRhKQorICAgICAgICBDUkFTSCgpOworICAgIG1fc3RhdGUgPSBDb25uZWN0aW9u
U3RhdGVSZWNlaXZpbmdEYXRhOworICAgIG1fZG93bmxvYWRlZEZpbGVMZW5ndGggKz0gZGF0YUxl
bmd0aDsKKyAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZUJsb2JEYXRhKG1fb3duZXIsIGRhdGFMZW5n
dGgpOworfQorCiB2b2lkIFJlc291cmNlSGFuZGxlSW50ZXJuYWw6OmRpZFJlY2VpdmVDYWNoZWRN
ZXRhZGF0YShXZWJVUkxMb2FkZXIqLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgZGF0YUxlbmd0aCkK
IHsKICAgICBBU1NFUlQobV9jbGllbnQpOwpAQCAtMTg4LDcgKzIxMiwxOCBAQCB2b2lkIFJlc291
cmNlSGFuZGxlSW50ZXJuYWw6OmRpZEZpbmlzaExvCiAgICAgaWYgKG1fc3RhdGUgIT0gQ29ubmVj
dGlvblN0YXRlUmVjZWl2ZWRSZXNwb25zZSAmJiBtX3N0YXRlICE9IENvbm5lY3Rpb25TdGF0ZVJl
Y2VpdmluZ0RhdGEpCiAgICAgICAgIENSQVNIKCk7CiAgICAgbV9zdGF0ZSA9IENvbm5lY3Rpb25T
dGF0ZUZpbmlzaGVkTG9hZGluZzsKLSAgICBtX2NsaWVudC0+ZGlkRmluaXNoTG9hZGluZyhtX293
bmVyLCBmaW5pc2hUaW1lKTsKKyAgICBpZiAobV9yZXF1ZXN0LmRvd25sb2FkQXNCbG9iKCkpIHsK
KyAgICAgICAgQVNTRVJUKG1fcmVxdWVzdC5kb3dubG9hZFRvRmlsZSgpKTsgLy8gVG9GaWxlIGFu
ZCBBc0Jsb2IgYXJlIG9uZSBhbmQgdGhlIHNhbWUgZm9yIG5vdy4KKyAgICAgICAgUmVmUHRyPEJs
b2I+IGRhdGFBc0Jsb2I7CisgICAgICAgIGlmICghbV9kb3dubG9hZGVkRmlsZVBhdGguaXNFbXB0
eSgpKSB7CisgICAgICAgICAgICBPd25QdHI8QmxvYkRhdGE+IGJsb2JEYXRhID0gQmxvYkRhdGE6
OmNyZWF0ZSgpOworICAgICAgICAgICAgYmxvYkRhdGEtPnNldENvbnRlbnRUeXBlKG1fZG93bmxv
YWRlZEZpbGVDb250ZW50VHlwZSk7CisgICAgICAgICAgICBibG9iRGF0YS0+YXBwZW5kRmlsZSht
X2Rvd25sb2FkZWRGaWxlUGF0aCk7CisgICAgICAgICAgICBkYXRhQXNCbG9iID0gQmxvYjo6Y3Jl
YXRlKGJsb2JEYXRhLnJlbGVhc2UoKSwgbV9kb3dubG9hZGVkRmlsZUxlbmd0aCk7CisgICAgICAg
IH0KKyAgICAgICAgbV9jbGllbnQtPmRpZEZpbmlzaExvYWRpbmdCbG9iKG1fb3duZXIsIGZpbmlz
aFRpbWUsIGRhdGFBc0Jsb2IuZ2V0KCkpOworICAgIH0gZWxzZQorICAgICAgICBtX2NsaWVudC0+
ZGlkRmluaXNoTG9hZGluZyhtX293bmVyLCBmaW5pc2hUaW1lKTsKIH0KIAogdm9pZCBSZXNvdXJj
ZUhhbmRsZUludGVybmFsOjpkaWRGYWlsKFdlYlVSTExvYWRlciosIGNvbnN0IFdlYlVSTEVycm9y
JiBlcnJvcikKQEAgLTE5OCw2ICsyMzMsMzkgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZUludGVybmFs
OjpkaWRGYWlsKFdlYgogICAgIG1fY2xpZW50LT5kaWRGYWlsKG1fb3duZXIsIGVycm9yKTsKIH0K
IAorLy8gc3RhdGljCitQYXNzUmVmUHRyPEJsb2I+IFJlc291cmNlSGFuZGxlSW50ZXJuYWw6Omxv
YWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoCisgICAgTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVk
Q3JlZGVudGlhbHMsIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNw
b25zZSwgVmVjdG9yPGNoYXI+KiBkYXRhKQoreworICAgIE93blB0cjxXZWJVUkxMb2FkZXI+IGxv
YWRlcih3ZWJLaXRDbGllbnQoKS0+Y3JlYXRlVVJMTG9hZGVyKCkpOworICAgIEFTU0VSVChsb2Fk
ZXIuZ2V0KCkpOworCisgICAgV3JhcHBlZFJlc291cmNlUmVxdWVzdCByZXF1ZXN0SW4ocmVxdWVz
dCk7CisgICAgcmVxdWVzdEluLnNldEFsbG93U3RvcmVkQ3JlZGVudGlhbHMoc3RvcmVkQ3JlZGVu
dGlhbHMgPT0gQWxsb3dTdG9yZWRDcmVkZW50aWFscyk7CisgICAgV3JhcHBlZFJlc291cmNlUmVz
cG9uc2UgcmVzcG9uc2VPdXQocmVzcG9uc2UpOworICAgIFdlYlVSTEVycm9yIGVycm9yT3V0Owor
ICAgIFdlYkRhdGEgZGF0YU91dDsKKyAgICBSZWZQdHI8QmxvYj4gZGF0YUFzQmxvYjsKKyAgICBs
b25nIGxvbmcgbGVuZ3RoT3V0ID0gMDsKKworICAgIC8vIEZJWE1FOiBOZWVkIGEgd2F5IHRvIGdl
dCB0aGUgbGVuZ3RoT3V0IGluIHRoZSBhc0ZpbGUgY2FzZS4KKyAgICBsb2FkZXItPmxvYWRTeW5j
aHJvbm91c2x5KHJlcXVlc3RJbiwgcmVzcG9uc2VPdXQsIGVycm9yT3V0LCBkYXRhT3V0KTsKKwor
ICAgIGVycm9yID0gZXJyb3JPdXQ7CisgICAgaWYgKCFyZXF1ZXN0LmRvd25sb2FkQXNCbG9iKCkp
IHsKKyAgICAgICAgQVNTRVJUKGRhdGEpOworICAgICAgICBkYXRhLT5jbGVhcigpOworICAgICAg
ICBkYXRhLT5hcHBlbmQoZGF0YU91dC5kYXRhKCksIGRhdGFPdXQuc2l6ZSgpKTsKKyAgICB9IGVs
c2UgaWYgKCFyZXNwb25zZS5kb3dubG9hZEZpbGVQYXRoKCkuaXNFbXB0eSgpKSB7CisgICAgICAg
IE93blB0cjxCbG9iRGF0YT4gYmxvYkRhdGEgPSBCbG9iRGF0YTo6Y3JlYXRlKCk7CisgICAgICAg
IGJsb2JEYXRhLT5zZXRDb250ZW50VHlwZShyZXNwb25zZS5leHRyYWN0TWltZVR5cGUoKSkpOwor
ICAgICAgICBibG9iRGF0YS0+YXBwZW5kRmlsZShyZXNwb25zZS5kb3dubG9hZEZpbGVQYXRoKCkp
OworICAgICAgICBkYXRhQXNCbG9iID0gQmxvYjo6Y3JlYXRlKGJsb2JEYXRhLnJlbGVhc2UoKSwg
bGVuZ3RoT3V0KTsKKyAgICB9CisgICAgcmV0dXJuIGRhdGFBc0Jsb2I7Cit9CisKKwogLy8gUmVz
b3VyY2VIYW5kbGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogCiBSZXNvdXJjZUhhbmRsZTo6UmVzb3VyY2VIYW5kbGUoY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LApAQCAtMjk1LDIwICszNjMsMjAgQEAgdm9pZCBSZXNv
dXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hybwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPGNoYXI+JiBk
YXRhKQogewotICAgIE93blB0cjxXZWJVUkxMb2FkZXI+IGxvYWRlcih3ZWJLaXRDbGllbnQoKS0+
Y3JlYXRlVVJMTG9hZGVyKCkpOwotICAgIEFTU0VSVChsb2FkZXIuZ2V0KCkpOwotCi0gICAgV3Jh
cHBlZFJlc291cmNlUmVxdWVzdCByZXF1ZXN0SW4ocmVxdWVzdCk7Ci0gICAgcmVxdWVzdEluLnNl
dEFsbG93U3RvcmVkQ3JlZGVudGlhbHMoc3RvcmVkQ3JlZGVudGlhbHMgPT0gQWxsb3dTdG9yZWRD
cmVkZW50aWFscyk7Ci0gICAgV3JhcHBlZFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2VPdXQocmVz
cG9uc2UpOwotICAgIFdlYlVSTEVycm9yIGVycm9yT3V0OwotICAgIFdlYkRhdGEgZGF0YU91dDsK
LQotICAgIGxvYWRlci0+bG9hZFN5bmNocm9ub3VzbHkocmVxdWVzdEluLCByZXNwb25zZU91dCwg
ZXJyb3JPdXQsIGRhdGFPdXQpOworICAgIEFTU0VSVCghcmVxdWVzdC5kb3dubG9hZEFzQmxvYigp
KTsKKyAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5
KGNvbnRleHQsIHJlcXVlc3QsIHN0b3JlZENyZWRlbnRpYWxzLCBlcnJvciwgcmVzcG9uc2UsICZk
YXRhKTsKK30KIAotICAgIGVycm9yID0gZXJyb3JPdXQ7Ci0gICAgZGF0YS5jbGVhcigpOwotICAg
IGRhdGEuYXBwZW5kKGRhdGFPdXQuZGF0YSgpLCBkYXRhT3V0LnNpemUoKSk7CisvLyBzdGF0aWMK
K1Bhc3NSZWZQdHI8QmxvYj4gUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3Vz
bHlBc0Jsb2IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0b3JlZENyZWRlbnRp
YWxzIHN0b3JlZENyZWRlbnRpYWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBSZXNvdXJjZUVycm9yJiBlcnJvciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7
CisgICAgQVNTRVJUKHJlcXVlc3QuZG93bmxvYWRBc0Jsb2IoKSk7CisgICAgcmV0dXJuIFJlc291
cmNlSGFuZGxlSW50ZXJuYWw6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoY29udGV4dCwgcmVx
dWVzdCwgc3RvcmVkQ3JlZGVudGlhbHMsIGVycm9yLCByZXNwb25zZSwgMCk7CiB9CiAKIC8vIHN0
YXRpYwpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXF1ZXN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlVSTFJlcXVlc3QuY3BwCShyZXZpc2lvbiA2
OTM2NikKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVxdWVzdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU2LDcgKzU2LDYgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgbV9yZXNvdXJj
ZVJlcXVlc3QgPSAmbV9yZXNvdXJjZVJlcXVlc3RBbGxvY2F0aW9uOwogICAgICAgICBtX2FsbG93
U3RvcmVkQ3JlZGVudGlhbHMgPSBwLT5tX2FsbG93U3RvcmVkQ3JlZGVudGlhbHM7Ci0gICAgICAg
IG1fZG93bmxvYWRUb0ZpbGUgPSBwLT5tX2Rvd25sb2FkVG9GaWxlOwogICAgIH0KIAogICAgIHZp
cnR1YWwgdm9pZCBkaXNwb3NlKCkgeyBkZWxldGUgdGhpczsgfQpAQCAtMjU5LDEyICsyNTgsMTIg
QEAgdm9pZCBXZWJVUkxSZXF1ZXN0OjpzZXRBcHBDYWNoZUhvc3RJRChpbgogCiBib29sIFdlYlVS
TFJlcXVlc3Q6OmRvd25sb2FkVG9GaWxlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9wcml2YXRl
LT5tX2Rvd25sb2FkVG9GaWxlOworICAgIHJldHVybiBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXF1
ZXN0LT5kb3dubG9hZFRvRmlsZSgpOwogfQogCiB2b2lkIFdlYlVSTFJlcXVlc3Q6OnNldERvd25s
b2FkVG9GaWxlKGJvb2wgZG93bmxvYWRUb0ZpbGUpCiB7Ci0gICAgbV9wcml2YXRlLT5tX2Rvd25s
b2FkVG9GaWxlID0gZG93bmxvYWRUb0ZpbGU7CisgICAgbV9wcml2YXRlLT5tX3Jlc291cmNlUmVx
dWVzdC0+c2V0RG93bmxvYWRUb0ZpbGUoZG93bmxvYWRUb0ZpbGUpOwogfQogCiBSZXNvdXJjZVJl
cXVlc3QmIFdlYlVSTFJlcXVlc3Q6OnRvTXV0YWJsZVJlc291cmNlUmVxdWVzdCgpCkluZGV4OiBX
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlVSTFJlcXVlc3RQcml2YXRlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXF1ZXN0UHJpdmF0ZS5oCShyZXZpc2lvbiA2OTM2
NikKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVxdWVzdFByaXZhdGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzksMTcgKzM5LDEzIEBAIGNsYXNzIFdlYlVSTFJlcXVlc3RQcml2YXRlIHsK
IHB1YmxpYzoKICAgICBXZWJVUkxSZXF1ZXN0UHJpdmF0ZSgpCiAgICAgICAgIDogbV9yZXNvdXJj
ZVJlcXVlc3QoMCkKLSAgICAgICAgLCBtX2FsbG93U3RvcmVkQ3JlZGVudGlhbHModHJ1ZSkKLSAg
ICAgICAgLCBtX2Rvd25sb2FkVG9GaWxlKGZhbHNlKSB7IH0KKyAgICAgICAgLCBtX2FsbG93U3Rv
cmVkQ3JlZGVudGlhbHModHJ1ZSkgeyB9CiAKICAgICAvLyBDYWxsZWQgYnkgV2ViVVJMUmVxdWVz
dCB3aGVuIGl0IG5vIGxvbmdlciBuZWVkcyB0aGlzIG9iamVjdC4KICAgICB2aXJ0dWFsIHZvaWQg
ZGlzcG9zZSgpID0gMDsKIAogICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCogbV9yZXNvdXJj
ZVJlcXVlc3Q7CiAgICAgYm9vbCBtX2FsbG93U3RvcmVkQ3JlZGVudGlhbHM7Ci0KLSAgICAvLyBG
SVhNRTogTW92ZSB0aGlzIHRvIFJlc291cmNlUmVxdWVzdCBvbmNlIHdlIGhhdmUgYW4gaW50ZXJu
YWwgY29uc3VtZXIuCi0gICAgYm9vbCBtX2Rvd25sb2FkVG9GaWxlOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlVSTFJlc3BvbnNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlVSTFJlc3BvbnNlLmNwcAko
cmV2aXNpb24gNjkzNjYpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlVSTFJlc3BvbnNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNiBAQCBwdWJsaWM6CiAgICAgICAgIDogbV9y
ZXNvdXJjZVJlc3BvbnNlQWxsb2NhdGlvbigqcC0+bV9yZXNvdXJjZVJlc3BvbnNlKQogICAgIHsK
ICAgICAgICAgbV9yZXNvdXJjZVJlc3BvbnNlID0gJm1fcmVzb3VyY2VSZXNwb25zZUFsbG9jYXRp
b247Ci0gICAgICAgIG1fZG93bmxvYWRGaWxlUGF0aCA9IHAtPm1fZG93bmxvYWRGaWxlUGF0aDsK
ICAgICB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlzcG9zZSgpIHsgZGVsZXRlIHRoaXM7IH0KQEAg
LTM3NSwxMiArMzc0LDEyIEBAIHZvaWQgV2ViVVJMUmVzcG9uc2U6OnNldElzTXVsdGlwYXJ0UGF5
bG8KIAogV2ViU3RyaW5nIFdlYlVSTFJlc3BvbnNlOjpkb3dubG9hZEZpbGVQYXRoKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5tX2Rvd25sb2FkRmlsZVBhdGg7CisgICAgcmV0dXJu
IG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNlLT5kb3dubG9hZEZpbGVQYXRoKCk7CiB9CiAK
IHZvaWQgV2ViVVJMUmVzcG9uc2U6OnNldERvd25sb2FkRmlsZVBhdGgoY29uc3QgV2ViU3RyaW5n
JiBkb3dubG9hZEZpbGVQYXRoKQogewotICAgIG1fcHJpdmF0ZS0+bV9kb3dubG9hZEZpbGVQYXRo
ID0gZG93bmxvYWRGaWxlUGF0aDsKKyAgICBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZS0+
c2V0RG93bmxvYWRGaWxlUGF0aChkb3dubG9hZEZpbGVQYXRoKTsKIH0KIAogdm9pZCBXZWJVUkxS
ZXNwb25zZTo6YXNzaWduKFdlYlVSTFJlc3BvbnNlUHJpdmF0ZSogcCkKSW5kZXg6IFdlYktpdC9j
aHJvbWl1bS9zcmMvV2ViVVJMUmVzcG9uc2VQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJVUkxSZXNwb25zZVByaXZhdGUuaAkocmV2aXNpb24gNjkzNjYpCisr
KyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlVSTFJlc3BvbnNlUHJpdmF0ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Niw5ICs0Niw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlzcG9zZSgp
ID0gMDsKIAogICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UqIG1fcmVzb3VyY2VSZXNwb25z
ZTsKLQotICAgIC8vIEZJWE1FOiBNb3ZlIHRoaXMgdG8gUmVzb3VyY2VSZXNwb25zZSBvbmNlIHdl
IGhhdmUgYW4gaW50ZXJuYWwgY29uc3VtZXIuCi0gICAgV2ViU3RyaW5nIG1fZG93bmxvYWRGaWxl
UGF0aDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70198</attachid>
            <date>2010-10-07 20:12:02 -0700</date>
            <delta_ts>2010-10-08 14:30:54 -0700</delta_ts>
            <desc>downloadAsBlob</desc>
            <filename>downloadAsBlob7.txt</filename>
            <type>text/plain</type>
            <size>67995</size>
            <attacher name="Michael Nordman">michaeln</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTM2NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTA1IEBACisyMDEwLTEwLTA1ICBNaWNoYWVsIE5vcmRtYW4gIDxtaWNoYWVsbkBn
b29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZCBzdXBwb3J0IGZvciBnZXR0aW5nIHRoZSByZXN1bHQgb2YgYSByZXNvdXJjZSByZXF1
ZXN0IGFzIGEgYmxvYiwKKyAgICAgICAgYW5kIHVzZSB0aGF0IGNhcGFiaWxpdHkgaW4gc3VwcG9y
dCBvZiBYbWxIdHRwUmVxdWVzdC5yZXNwb25zZUJsb2IuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDcyMgorICAgICAgICAqIFJlc291cmNlSGFuZGxl
IGtub3dzIGhvdyB0byBkZWxpdmVyIGEgcmVzcG9uc2UgYXMgYSBibG9iLiBUbyBhc2sgaXQgdG8g
ZG8gc28sCisgICAgICAgICAgY2FsbCByZXF1ZXN0LnNldERvd25sb2FkQXNCbG9iKHRydWUpIHBy
aW9yIHRvIHN0YXJ0aW5nIGFuIGFzeW5jIFJlc291cmNlSGFuZGxlLAorICAgICAgICAgIG9yIGNh
bGwgbG9hZFJlc291cmNlU3luY2hyb25vdXNseUFzQmxvYigpIGZvciB0aGUgc3luYyBjYXNlLgor
ICAgICAgICAqIFJlc291cmNlSGFuZGxlQ2xpZW50IGhhcyBuZXcgaW50ZXJmYWNlcyBmb3IgdXNl
IGluIHRoZSBhc3luYyBjYXNlLgorICAgICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVC
bG9iRGF0YShSZXNvdXJjZUhhbmRsZSosIGludCk7ICAvLyBubyBkYXRhIHB0ciBpcyBwcm92aWRl
ZAorICAgICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmdCbG9iKFJlc291cmNl
SGFuZGxlKiwgZG91YmxlIC8qZmluaXNoVGltZSovLCBQYXNzUmVmUHRyPEJsb2I+KTsKKyAgICAg
ICAgKiBUaHJlYWRhYmxlTG9hZGVyIGFsc28ga25vd3MgaG93IHRvIGRlbGl2ZXIgYSByZXNwb25z
ZSBhcyBhIGJsb2I7IGFuZAorICAgICAgICAgIHNpbWlsYXJseSwgdGhlIFRocmVhZGFibGVMb2Fk
ZXJDbGllbnQgaGFzICBncm93biB0d28gbmV3IGNhbGxiYWNrIG1ldGhvZHMuCisgICAgICAgICog
RnJhbWVMb2FkZXIgaGFzIGFsc28gZ3Jvd24gYSBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5QXNC
bG9iKCkgbWV0aG9kLgorICAgICAgICAqIFhtbEh0dHBSZXF1ZXN0IGlzIGEgVGhyZWFkYWJsZUxv
YWRlckNsaWVudCB3aGljaCB1c2VzIHJlcXVlc3Quc2V0RG93bmxvYWRBc0Jsb2IoKSBhbmQKKyAg
ICAgICAgICByZWNlaXZlcyB0aGUgcmVzdWx0IGluIGRpZEZpbmlzaExvYWRpbmdCbG9iKCkuCisg
ICAgICAgICogVGhlcmUncyBhIGZhaXIgYW1vdW50IG9mIG1lY2hhbmljYWwgcGx1bWJpbmcgdGhy
b3VnaG91dCAidGhlIGxvYWRlciIgdG8gZ2V0IHRoZSBjbGllbnQKKyAgICAgICAgICBtZXRob2Qg
Y2FsbHMgZnJvbSB0aGUgcmVzb3VyY2UgaGFuZGxlIGFsbCB0aGUgd2F5IHRocnUgdG8gdGhlIHRo
cmVhZGFibGUgbG9hZGVyIGNsaWVudC4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgZmVh
dHVyZSBpc24ndCBmdW5jdGlvbmFsIHlldCBpbiBhbnkgcG9ydC4KKworICAgICAgICAqIGxvYWRl
ci9Eb2N1bWVudExvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6
c3Vic3RpdHV0ZVJlc291cmNlRGVsaXZlcnlUaW1lckZpcmVkKToKKyAgICAgICAgKiBsb2FkZXIv
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
VGhyZWFkYWJsZUxvYWRlcjo6ZGlkUmVjZWl2ZUJsb2JEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZ0Jsb2IpOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVxdWVzdCk6CisgICAg
ICAgICogbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oOgorICAgICAgICAqIGxvYWRl
ci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZFJl
c291cmNlU3luY2hyb25vdXNseSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9h
ZFJlc291cmNlU3luY2hyb25vdXNseUFzQmxvYik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxv
YWRlcjo6cHJlcGFyZVN5bmNSZXFldXN0KToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIu
aDoKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmdCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nT25lUGFydCk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUxvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUJsb2JEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YUNvbW1vbik6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUxvYWRlcjo6Y3JlYXRlQXN5bmNGaWxlU3RyZWFtKToKKyAgICAgICAgKiBsb2FkZXIvUmVz
b3VyY2VMb2FkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyOjpkaWRSZWNl
aXZlQmxvYkRhdGEpOgorICAgICAgICAqIGxvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUJsb2JEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OlN1YnJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OlN1YnJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nQmxv
Yik6CisgICAgICAgIChXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGlu
Z0NvbW1vbik6CisgICAgICAgICogbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmg6CisgICAgICAg
ICogbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyQ2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpT
dWJyZXNvdXJjZUxvYWRlckNsaWVudDo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6U3VicmVzb3VyY2VMb2FkZXJDbGllbnQ6OmRpZFJlY2VpdmVCbG9iRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlckNsaWVudDo6ZGlkRmluaXNoTG9hZGluZ0Jsb2Ip
OgorICAgICAgICAqIGxvYWRlci9UaHJlYWRhYmxlTG9hZGVyQ2xpZW50Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpUaHJlYWRhYmxlTG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpUaHJlYWRhYmxlTG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlQmxvYkRhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6VGhyZWFkYWJsZUxvYWRlckNsaWVudDo6ZGlkRmluaXNoTG9hZGlu
Z0Jsb2IpOgorICAgICAgICAqIGxvYWRlci9UaHJlYWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBlci5o
OgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXI6OmRpZFJl
Y2VpdmVCbG9iRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlTG9hZGVyQ2xpZW50
V3JhcHBlcjo6ZGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxl
TG9hZGVyQ2xpZW50V3JhcHBlcjo6ZGlkRmluaXNoTG9hZGluZ0Jsb2IpOgorICAgICAgICAqIGxv
YWRlci9Xb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ondvcmtl
ckNvbnRleHREaWRSZWNlaXZlQmxvYkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhy
ZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEJyaWRnZTo6ZGlkUmVjZWl2ZUJsb2JEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2U6
OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6d29ya2VyQ29udGV4dERpZEZp
bmlzaExvYWRpbmdCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVMb2Fk
ZXI6Ok1haW5UaHJlYWRCcmlkZ2U6OmRpZEZpbmlzaExvYWRpbmdCbG9iKToKKyAgICAgICAgKiBs
b2FkZXIvV29ya2VyVGhyZWFkYWJsZUxvYWRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VIYW5kbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6
OmNhY2hlTWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmxvYWRS
ZXNvdXJjZVN5bmNocm9ub3VzbHlBc0Jsb2IpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VIYW5kbGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFu
ZGxlQ2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUNsaWVudDo6ZGlk
UmVjZWl2ZUJsb2JEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ2xpZW50
OjpkaWRGaW5pc2hMb2FkaW5nQmxvYik6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNv
dXJjZVJlcXVlc3RCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJh
c2U6OmFkb3B0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OmNvcHlE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmVxdWFsSWdub3JpbmdIZWFkZXJGaWVsZHMpOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6ZG93bmxvYWRBc0Jsb2IpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6c2V0RG93bmxvYWRBc0Jsb2IpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlcXVlc3QuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6ZG93bmxvYWRUb0ZpbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0OjpzZXREb3dubG9hZFRvRmlsZSk6CisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlc3BvbnNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2U6OmRvd25sb2FkRmlsZVBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZTo6c2V0RG93bmxvYWRGaWxlUGF0aCk6CisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlc3BvbnNlLmg6CisgICAg
ICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBS
ZXF1ZXN0OjpjcmVhdGVSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0
OjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0Ojpk
aWRGaW5pc2hMb2FkaW5nQmxvYik6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6
ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmRpZFJl
Y2VpdmVCbG9iRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6ZGlkUmVj
ZWl2ZURhdGFDb21tb24pOgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5oOgorCiAyMDEw
LTEwLTA3ICBDcmlzIE5lY2thciAgPGNkbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovY29weUZvcndh
cmRpbmdIZWFkZXJzLmNtZAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL2Nv
cHlGb3J3YXJkaW5nSGVhZGVycy5jbWQJKHJldmlzaW9uIDY5MzY2KQorKysgV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9jb3B5Rm9yd2FyZGluZ0hlYWRlcnMuY21kCSh3b3JraW5nIGNvcHkpCkBAIC0x
OSw2ICsxOSw3IEBAIHhjb3B5IC95IC9kICIlUHJvamVjdERpciUuLlxjb25maWcuaCIgIiUKIHhj
b3B5IC95IC9kICIlV2ViS2l0T3V0cHV0RGlyJVxvYmpcV2ViQ29yZVxEZXJpdmVkU291cmNlc1wq
LmgiICIlV2ViS2l0T3V0cHV0RGlyJVxpbmNsdWRlXFdlYkNvcmUiCiB4Y29weSAveSAvZCAiJVBy
b2plY3REaXIlLi5cYWNjZXNzaWJpbGl0eVwqLmgiICIlV2ViS2l0T3V0cHV0RGlyJVxpbmNsdWRl
XFdlYkNvcmUiCiB4Y29weSAveSAvZCAiJVByb2plY3REaXIlLi5cYWNjZXNzaWJpbGl0eVx3aW5c
Ki5oIiAiJVdlYktpdE91dHB1dERpciVcaW5jbHVkZVxXZWJDb3JlIgoreGNvcHkgL3kgL2QgIiVQ
cm9qZWN0RGlyJS4uXGZpbGVhcGlcKi5oIiAiJVdlYktpdE91dHB1dERpciVcaW5jbHVkZVxXZWJD
b3JlIgogeGNvcHkgL3kgL2QgIiVQcm9qZWN0RGlyJS4uXGluc3BlY3RvclwqLmgiICIlV2ViS2l0
T3V0cHV0RGlyJVxpbmNsdWRlXFdlYkNvcmUiCiB4Y29weSAveSAvZCAiJVByb2plY3REaXIlLi5c
bG9hZGVyXCouaCIgIiVXZWJLaXRPdXRwdXREaXIlXGluY2x1ZGVcV2ViQ29yZSIKIHhjb3B5IC95
IC9kICIlUHJvamVjdERpciUuLlxsb2FkZXJcYXBwY2FjaGVcKi5oIiAiJVdlYktpdE91dHB1dERp
ciVcaW5jbHVkZVxXZWJDb3JlIgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDY5MzY2KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTc0NSw3ICs3NDUsNyBAQAogCQky
RUQ2MDlCQzExNDVCMDcxMDBDODY4NEUgLyogRE9NRm9ybURhdGEuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVENjA5QkExMTQ1QjA3MTAwQzg2ODRF
IC8qIERPTUZvcm1EYXRhLmNwcCAqLzsgfTsKIAkJMkVENjA5QkQxMTQ1QjA3MTAwQzg2ODRFIC8q
IERPTUZvcm1EYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyRUQ2MDlCQjExNDVCMDcxMDBDODY4NEUgLyogRE9NRm9ybURhdGEuaCAqLzsgfTsKIAkJ
MkVERUYxRjMxMjFCMEVGQzAwNzI2REIyIC8qIEJsb2JEYXRhLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFREVGMUVEMTIxQjBFRkMwMDcyNkRCMiAv
KiBCbG9iRGF0YS5jcHAgKi87IH07Ci0JCTJFREVGMUY0MTIxQjBFRkMwMDcyNkRCMiAvKiBCbG9i
RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVE
RUYxRUUxMjFCMEVGQzAwNzI2REIyIC8qIEJsb2JEYXRhLmggKi87IH07CisJCTJFREVGMUY0MTIx
QjBFRkMwMDcyNkRCMiAvKiBCbG9iRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMkVERUYxRUUxMjFCMEVGQzAwNzI2REIyIC8qIEJsb2JEYXRhLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkVERUYx
RjUxMjFCMEVGQzAwNzI2REIyIC8qIEJsb2JSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVERUYxRUYxMjFCMEVGQzAwNzI2REIyIC8qIEJs
b2JSZWdpc3RyeS5oICovOyB9OwogCQkyRURFRjFGNjEyMUIwRUZDMDA3MjZEQjIgLyogQmxvYlJl
Z2lzdHJ5SW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyRURFRjFGMDEyMUIwRUZDMDA3MjZEQjIgLyogQmxvYlJlZ2lzdHJ5SW1wbC5jcHAgKi87
IH07CiAJCTJFREVGMUY3MTIxQjBFRkMwMDcyNkRCMiAvKiBCbG9iUmVnaXN0cnlJbXBsLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRURFRjFGMTEyMUIw
RUZDMDA3MjZEQjIgLyogQmxvYlJlZ2lzdHJ5SW1wbC5oICovOyB9OwpAQCAtMjg2OSw3ICsyODY5
LDcgQEAKIAkJOTczRTMyNTcxMDg4M0I3QzAwNUJDNDkzIC8qIFJlc291cmNlTG9hZE5vdGlmaWVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzNFMzI1
NTEwODgzQjdDMDA1QkM0OTMgLyogUmVzb3VyY2VMb2FkTm90aWZpZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5NzZENkM3NzEyMkI4QTNEMDAx
RkQxRjcgLyogQXN5bmNGaWxlV3JpdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5NzZENkM1ODEyMkI4QTNEMDAxRkQxRjcgLyogQXN5bmNGaWxlV3Jp
dGVyLmggKi87IH07CiAJCTk3NkQ2Qzc4MTIyQjhBM0QwMDFGRDFGNyAvKiBCbG9iLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3NkQ2QzU5MTIyQjhB
M0QwMDFGRDFGNyAvKiBCbG9iLmNwcCAqLzsgfTsKLQkJOTc2RDZDNzkxMjJCOEEzRDAwMUZEMUY3
IC8qIEJsb2IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDk3NkQ2QzVBMTIyQjhBM0QwMDFGRDFGNyAvKiBCbG9iLmggKi87IH07CisJCTk3NkQ2Qzc5MTIy
QjhBM0QwMDFGRDFGNyAvKiBCbG9iLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5NzZENkM1QTEyMkI4QTNEMDAxRkQxRjcgLyogQmxvYi5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTk3NkQ2QzdCMTIyQjhB
M0QwMDFGRDFGNyAvKiBCbG9iQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5NzZENkM1QzEyMkI4QTNEMDAxRkQxRjcgLyogQmxvYkJ1aWxk
ZXIuY3BwICovOyB9OwogCQk5NzZENkM3QzEyMkI4QTNEMDAxRkQxRjcgLyogQmxvYkJ1aWxkZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3NkQ2QzVE
MTIyQjhBM0QwMDFGRDFGNyAvKiBCbG9iQnVpbGRlci5oICovOyB9OwogCQk5NzZENkM3RTEyMkI4
QTNEMDAxRkQxRjcgLyogQmxvYlVSTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5NzZENkM1RjEyMkI4QTNEMDAxRkQxRjcgLyogQmxvYlVSTC5jcHAg
Ki87IH07CkBAIC0yMTE1MCw3ICsyMTE1MCw2IEBACiAJCQlpc2EgPSBQQlhQcm9qZWN0OwogCQkJ
YnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDE0OUMyODQzMDg5MDJCMTEwMDhBOUVGQyAvKiBCdWls
ZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgIldlYkNvcmUiICovOwogCQkJY29t
cGF0aWJpbGl0eVZlcnNpb24gPSAiWGNvZGUgMi40IjsKLQkJCWRldmVsb3BtZW50UmVnaW9uID0g
RW5nbGlzaDsKIAkJCWhhc1NjYW5uZWRGb3JFbmNvZGluZ3MgPSAxOwogCQkJa25vd25SZWdpb25z
ID0gKAogCQkJCUVuZ2xpc2gsCkluZGV4OiBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCShyZXZp
c2lvbiA2OTM2NikKKysrIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTYyLDcgKzU2Miw4IEBAIHZvaWQgRG9jdW1lbnRMb2FkZXI6OnN1YnN0aXR1
dGVSZXNvdXJjZUQKICAgICAgICAgCiAgICAgICAgIGlmIChyZXNvdXJjZSkgewogICAgICAgICAg
ICAgU2hhcmVkQnVmZmVyKiBkYXRhID0gcmVzb3VyY2UtPmRhdGEoKTsKLSAgICAgICAgCisKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBXcmFwIGEgYmxvYiBhcm91bmQgdGhlIGRhdGEgaW4gdGhlIGRv
d25sb2FkQXNCbG9iIGNhc2UuCiAgICAgICAgICAgICBsb2FkZXItPmRpZFJlY2VpdmVSZXNwb25z
ZShyZXNvdXJjZS0+cmVzcG9uc2UoKSk7CiAgICAgICAgICAgICBsb2FkZXItPmRpZFJlY2VpdmVE
YXRhKGRhdGEtPmRhdGEoKSwgZGF0YS0+c2l6ZSgpLCBkYXRhLT5zaXplKCksIHRydWUpOwogICAg
ICAgICAgICAgbG9hZGVyLT5kaWRGaW5pc2hMb2FkaW5nKDApOwpJbmRleDogV2ViQ29yZS9sb2Fk
ZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xv
YWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwCShyZXZpc2lvbiA2OTM2NikKKysrIFdl
YkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIyOCw2ICsyMjgsMTcgQEAgdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZFJl
Y2VpdgogICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlRGF0YShkYXRhLCBsZW5ndGhSZWNlaXZlZCk7
CiB9CiAKK3ZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRSZWNlaXZlQmxvYkRhdGEo
U3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgaW50IGxlbmd0aFJlY2VpdmVkKQoreworICAgIEFT
U0VSVChtX2NsaWVudCk7CisgICAgQVNTRVJUX1VOVVNFRChsb2FkZXIsIGxvYWRlciA9PSBtX2xv
YWRlcik7CisKKyAgICBpZiAobV9hY3R1YWxSZXF1ZXN0KQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX2NsaWVudC0+ZGlkUmVjZWl2ZUJsb2JEYXRhKGxlbmd0aFJlY2VpdmVkKTsKK30KKwogdm9p
ZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcoU3VicmVzb3VyY2VM
b2FkZXIqIGxvYWRlcikKIHsKICAgICBBU1NFUlQobG9hZGVyID09IG1fbG9hZGVyKTsKQEAgLTIz
NSwxNCArMjQ2LDMzIEBAIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRGaW5pc2gK
ICAgICBkaWRGaW5pc2hMb2FkaW5nKGxvYWRlci0+aWRlbnRpZmllcigpKTsKIH0KIAordm9pZCBE
b2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmdCbG9iKFN1YnJlc291cmNl
TG9hZGVyKiBsb2FkZXIsIEJsb2IqIGJsb2IpCit7CisgICAgQVNTRVJUKGxvYWRlciA9PSBtX2xv
YWRlcik7CisgICAgQVNTRVJUKG1fY2xpZW50KTsKKyAgICBkaWRGaW5pc2hMb2FkaW5nQmxvYihs
b2FkZXItPmlkZW50aWZpZXIoKSwgYmxvYik7Cit9CisKIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxl
TG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikKIHsKICAg
ICBpZiAobV9hY3R1YWxSZXF1ZXN0KSB7CiAgICAgICAgIEFTU0VSVCghbV9zYW1lT3JpZ2luUmVx
dWVzdCk7CiAgICAgICAgIEFTU0VSVChtX29wdGlvbnMuY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5
ID09IFVzZUFjY2Vzc0NvbnRyb2wpOwogICAgICAgICBwcmVmbGlnaHRTdWNjZXNzKCk7Ci0gICAg
fSBlbHNlCi0gICAgICAgIG1fY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKGlkZW50aWZpZXIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKGlk
ZW50aWZpZXIpOworfQorCit2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkRmluaXNo
TG9hZGluZ0Jsb2IodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBCbG9iKiBibG9iKQoreworICAg
IGlmIChtX2FjdHVhbFJlcXVlc3QpIHsKKyAgICAgICAgQVNTRVJUKCFtX3NhbWVPcmlnaW5SZXF1
ZXN0KTsKKyAgICAgICAgQVNTRVJUKG1fb3B0aW9ucy5jcm9zc09yaWdpblJlcXVlc3RQb2xpY3kg
PT0gVXNlQWNjZXNzQ29udHJvbCk7CisgICAgICAgIHByZWZsaWdodFN1Y2Nlc3MoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBtX2NsaWVudC0+ZGlkRmluaXNoTG9hZGluZ0Jsb2IoaWRl
bnRpZmllciwgYmxvYik7CiB9CiAKIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRG
YWlsKFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9y
KQpAQCAtMzI3LDExICszNTcsMTYgQEAgdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6Omxv
YWRSZXF1ZQogICAgIFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzID0gbV9vcHRp
b25zLmFsbG93Q3JlZGVudGlhbHMgPyBBbGxvd1N0b3JlZENyZWRlbnRpYWxzIDogRG9Ob3RBbGxv
d1N0b3JlZENyZWRlbnRpYWxzOwogCiAgICAgVmVjdG9yPGNoYXI+IGRhdGE7CisgICAgUmVmUHRy
PEJsb2I+IGRhdGFBc0Jsb2I7CiAgICAgUmVzb3VyY2VFcnJvciBlcnJvcjsKICAgICBSZXNvdXJj
ZVJlc3BvbnNlIHJlc3BvbnNlOwogICAgIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciA9IHN0ZDo6
bnVtZXJpY19saW1pdHM8dW5zaWduZWQgbG9uZz46Om1heCgpOwotICAgIGlmIChtX2RvY3VtZW50
LT5mcmFtZSgpKQotICAgICAgICBpZGVudGlmaWVyID0gbV9kb2N1bWVudC0+ZnJhbWUoKS0+bG9h
ZGVyKCktPmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkocmVxdWVzdCwgc3RvcmVkQ3JlZGVudGlh
bHMsIGVycm9yLCByZXNwb25zZSwgZGF0YSk7CisgICAgaWYgKG1fZG9jdW1lbnQtPmZyYW1lKCkp
IHsKKyAgICAgICAgaWYgKHJlcXVlc3QuZG93bmxvYWRBc0Jsb2IoKSkKKyAgICAgICAgICAgIGRh
dGFBc0Jsb2IgPSBtX2RvY3VtZW50LT5mcmFtZSgpLT5sb2FkZXIoKS0+bG9hZFJlc291cmNlU3lu
Y2hyb25vdXNseUFzQmxvYihyZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFscywgZXJyb3IsIHJlc3Bv
bnNlLCBpZGVudGlmaWVyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaWRlbnRpZmllciA9
IG1fZG9jdW1lbnQtPmZyYW1lKCktPmxvYWRlcigpLT5sb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5
KHJlcXVlc3QsIHN0b3JlZENyZWRlbnRpYWxzLCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOworICAg
IH0KIAogICAgIC8vIE5vIGV4Y2VwdGlvbiBmb3IgZmlsZTovLy8gcmVzb3VyY2VzLCBzZWUgPHJk
YXI6Ly9wcm9ibGVtLzQ5NjIyOTg+LgogICAgIC8vIEFsc28sIGlmIHdlIGhhdmUgYW4gSFRUUCBy
ZXNwb25zZSwgdGhlbiBpdCB3YXNuJ3QgYSBuZXR3b3JrIGVycm9yIGluIGZhY3QuCkBAIC0zNTAs
MTAgKzM4NSwxNCBAQCB2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlcXVlCiAK
ICAgICBkaWRSZWNlaXZlUmVzcG9uc2UoMCwgcmVzcG9uc2UpOwogCi0gICAgY29uc3QgY2hhciog
Ynl0ZXMgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZGF0YS5kYXRhKCkpOwotICAgIGludCBs
ZW4gPSBzdGF0aWNfY2FzdDxpbnQ+KGRhdGEuc2l6ZSgpKTsKLSAgICBkaWRSZWNlaXZlRGF0YSgw
LCBieXRlcywgbGVuKTsKKyAgICBpZiAocmVxdWVzdC5kb3dubG9hZEFzQmxvYigpKSB7CisgICAg
ICAgIGRpZEZpbmlzaExvYWRpbmdCbG9iKGlkZW50aWZpZXIsIGRhdGFBc0Jsb2IuZ2V0KCkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQogCisgICAgY29uc3QgY2hhciogYnl0ZXMgPSBzdGF0aWNf
Y2FzdDxjb25zdCBjaGFyKj4oZGF0YS5kYXRhKCkpOworICAgIGludCBsZW5ndGggPSBzdGF0aWNf
Y2FzdDxpbnQ+KGRhdGEuc2l6ZSgpKTsKKyAgICBkaWRSZWNlaXZlRGF0YSgwLCBieXRlcywgbGVu
Z3RoKTsKICAgICBkaWRGaW5pc2hMb2FkaW5nKGlkZW50aWZpZXIpOwogfQogCkluZGV4OiBXZWJD
b3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaAkocmV2aXNpb24gNjkzNjYpCisr
KyBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNzQsNyArNzQsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdmlydHVh
bCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFN1YnJl
c291cmNlTG9hZGVyKiwgY29uc3QgY2hhciosIGludCBsZW5ndGhSZWNlaXZlZCk7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQmxvYkRhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCBpbnQg
LypsZW5ndGhSZWNlaXZlZCovKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRp
bmcoU3VicmVzb3VyY2VMb2FkZXIqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExv
YWRpbmdCbG9iKFN1YnJlc291cmNlTG9hZGVyKiwgQmxvYiopOwogICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlkRmFpbChTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IFJlc291cmNlRXJyb3ImKTsKIAog
ICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0U2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoU3VicmVz
b3VyY2VMb2FkZXIqLCBib29sJiBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSk7CkBAIC04Miw2
ICs4NCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIHJlY2Vp
dmVkQ2FuY2VsbGF0aW9uKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UmKTsKIAogICAgICAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyKTsKKyAgICAgICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nQmxvYih1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIsIEJsb2IqKTsKKwogICAgICAgICB2b2lkIG1ha2VTaW1wbGVDcm9z
c09yaWdpbkFjY2Vzc1JlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KTsKICAg
ICAgICAgdm9pZCBtYWtlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0V2l0aFByZWZsaWdodChjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpOwogICAgICAgICB2b2lkIHByZWZsaWdodFN1Y2Nl
c3MoKTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDY5MzY2KQorKysgV2Vi
Q29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzM5LDYgKzI3
MzksNTAgQEAgdm9pZCBGcmFtZUxvYWRlcjo6bG9hZFBvc3RSZXF1ZXN0KGNvbnN0IAogCiB1bnNp
Z25lZCBsb25nIEZyYW1lTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlh
bHMsIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVj
dG9yPGNoYXI+JiBkYXRhKQogeworICAgIEFTU0VSVCghcmVxdWVzdC5kb3dubG9hZEFzQmxvYigp
KTsKKyAgICBSZXNvdXJjZVJlcXVlc3QgYWN0dWFsUmVxdWVzdDsKKyAgICB1bnNpZ25lZCBsb25n
IGlkZW50aWZpZXIgPSBwcmVwYXJlU3luY1JlcXVlc3QocmVxdWVzdCwgZXJyb3IsIGFjdHVhbFJl
cXVlc3QpOworICAgIGlmIChlcnJvci5pc051bGwoKSkgeworICAgICAgICBBU1NFUlQoIWFjdHVh
bFJlcXVlc3QuaXNOdWxsKCkpOworICAgICAgICAKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQ
TElDQVRJT05TKQorICAgICAgICBpZiAoIWRvY3VtZW50TG9hZGVyKCktPmFwcGxpY2F0aW9uQ2Fj
aGVIb3N0KCktPm1heWJlTG9hZFN5bmNocm9ub3VzbHkoYWN0dWFsUmVxdWVzdCwgZXJyb3IsIHJl
c3BvbnNlLCBkYXRhKSkgeworI2VuZGlmCisgICAgICAgICAgICBSZXNvdXJjZUhhbmRsZTo6bG9h
ZFJlc291cmNlU3luY2hyb25vdXNseShuZXR3b3JraW5nQ29udGV4dCgpLCBhY3R1YWxSZXF1ZXN0
LCBzdG9yZWRDcmVkZW50aWFscywgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKKyNpZiBFTkFCTEUo
T0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorICAgICAgICAgICAgZG9jdW1lbnRMb2FkZXIoKS0+
YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+bWF5YmVMb2FkRmFsbGJhY2tTeW5jaHJvbm91c2x5KGFj
dHVhbFJlcXVlc3QsIGVycm9yLCByZXNwb25zZSwgZGF0YSk7CisgICAgICAgIH0KKyNlbmRpZgor
ICAgIH0KKyAgICBub3RpZmllcigpLT5zZW5kUmVtYWluaW5nRGVsZWdhdGVNZXNzYWdlcyhtX2Rv
Y3VtZW50TG9hZGVyLmdldCgpLCBpZGVudGlmaWVyLCByZXNwb25zZSwgZGF0YS5zaXplKCksIGVy
cm9yKTsKKyAgICByZXR1cm4gaWRlbnRpZmllcjsKK30KKworUGFzc1JlZlB0cjxCbG9iPiBGcmFt
ZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseUFzQmxvYihjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzLCBSZXNv
dXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIHVuc2lnbmVkIGxv
bmcmIGlkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKHJlcXVlc3QuZG93bmxvYWRBc0Jsb2IoKSk7
CisgICAgUmVzb3VyY2VSZXF1ZXN0IGFjdHVhbFJlcXVlc3Q7CisgICAgaWRlbnRpZmllciA9IHBy
ZXBhcmVTeW5jUmVxdWVzdChyZXF1ZXN0LCBlcnJvciwgYWN0dWFsUmVxdWVzdCk7CisgICAgUmVm
UHRyPEJsb2I+IGRhdGFBc0Jsb2I7CisgICAgaWYgKGVycm9yLmlzTnVsbCgpKSB7CisgICAgICAg
IEFTU0VSVCghYWN0dWFsUmVxdWVzdC5pc051bGwoKSk7CisgICAgICAgIAorI2lmIDAgLy8gRklY
TUU6IFN1cHBvcnQgZm9yIGFwcGNhY2hlZCByZXNvdXJjZXMuCisgICAgICAgIGlmICghZG9jdW1l
bnRMb2FkZXIoKS0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+bWF5YmVMb2FkU3luY2hyb25vdXNs
eShhY3R1YWxSZXF1ZXN0LCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpKSB7CisjZW5kaWYKKyAgICAg
ICAgICAgIGRhdGFBc0Jsb2IgPSBSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25v
dXNseUFzQmxvYihuZXR3b3JraW5nQ29udGV4dCgpLCBhY3R1YWxSZXF1ZXN0LCBzdG9yZWRDcmVk
ZW50aWFscywgZXJyb3IsIHJlc3BvbnNlKTsKKyNpZiAwIC8vIEZJWE1FOiBEaXR0by4KKyAgICAg
ICAgICAgIGRvY3VtZW50TG9hZGVyKCktPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPm1heWJlTG9h
ZEZhbGxiYWNrU3luY2hyb25vdXNseShhY3R1YWxSZXF1ZXN0LCBlcnJvciwgcmVzcG9uc2UsIGRh
dGEpOworICAgICAgICB9CisjZW5kaWYKKyAgICB9CisgICAgaW50IG5vdGlmeUxlbmd0aCA9IGRh
dGFBc0Jsb2IgPyBzdGF0aWNfY2FzdDxpbnQ+KHN0ZDo6bWluKGRhdGFBc0Jsb2ItPnNpemUoKSwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihJTlRfTUFYKSkpIDogMDsKKyAgICBub3Rp
ZmllcigpLT5zZW5kUmVtYWluaW5nRGVsZWdhdGVNZXNzYWdlcyhtX2RvY3VtZW50TG9hZGVyLmdl
dCgpLCBpZGVudGlmaWVyLCByZXNwb25zZSwgbm90aWZ5TGVuZ3RoLCBlcnJvcik7CisgICAgcmV0
dXJuIGRhdGFBc0Jsb2I7Cit9CisKK3Vuc2lnbmVkIGxvbmcgRnJhbWVMb2FkZXI6OnByZXBhcmVT
eW5jUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlRXJyb3Im
IGVycm9yLCBSZXNvdXJjZVJlcXVlc3QmIGFjdHVhbFJlcXVlc3QpCit7CiAgICAgU3RyaW5nIHJl
ZmVycmVyID0gbV9vdXRnb2luZ1JlZmVycmVyOwogICAgIGlmIChTZWN1cml0eU9yaWdpbjo6c2hv
dWxkSGlkZVJlZmVycmVyKHJlcXVlc3QudXJsKCksIHJlZmVycmVyKSkKICAgICAgICAgcmVmZXJy
ZXIgPSBTdHJpbmcoKTsKQEAgLTI3NTMsMjcgKzI3OTcsMTIgQEAgdW5zaWduZWQgbG9uZyBGcmFt
ZUxvYWRlcjo6bG9hZFJlc291cmNlUwogICAgIGlmIChQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFn
ZSgpKQogICAgICAgICBpbml0aWFsUmVxdWVzdC5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhwYWdl
LT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnJlcXVlc3QoKS51cmwo
KSk7CiAgICAgaW5pdGlhbFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2VudChjbGllbnQoKS0+dXNlckFn
ZW50KHJlcXVlc3QudXJsKCkpKTsKLSAgICAKKwogICAgIGFkZEV4dHJhRmllbGRzVG9TdWJyZXNv
dXJjZVJlcXVlc3QoaW5pdGlhbFJlcXVlc3QpOwogCiAgICAgdW5zaWduZWQgbG9uZyBpZGVudGlm
aWVyID0gMDsgICAgCi0gICAgUmVzb3VyY2VSZXF1ZXN0IG5ld1JlcXVlc3QoaW5pdGlhbFJlcXVl
c3QpOwotICAgIHJlcXVlc3RGcm9tRGVsZWdhdGUobmV3UmVxdWVzdCwgaWRlbnRpZmllciwgZXJy
b3IpOwotCi0gICAgaWYgKGVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgIEFTU0VSVCghbmV3UmVx
dWVzdC5pc051bGwoKSk7Ci0gICAgICAgIAotI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNB
VElPTlMpCi0gICAgICAgIGlmICghZG9jdW1lbnRMb2FkZXIoKS0+YXBwbGljYXRpb25DYWNoZUhv
c3QoKS0+bWF5YmVMb2FkU3luY2hyb25vdXNseShuZXdSZXF1ZXN0LCBlcnJvciwgcmVzcG9uc2Us
IGRhdGEpKSB7Ci0jZW5kaWYKLSAgICAgICAgICAgIFJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3Vy
Y2VTeW5jaHJvbm91c2x5KG5ldHdvcmtpbmdDb250ZXh0KCksIG5ld1JlcXVlc3QsIHN0b3JlZENy
ZWRlbnRpYWxzLCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOwotI2lmIEVOQUJMRShPRkZMSU5FX1dF
Ql9BUFBMSUNBVElPTlMpCi0gICAgICAgICAgICBkb2N1bWVudExvYWRlcigpLT5hcHBsaWNhdGlv
bkNhY2hlSG9zdCgpLT5tYXliZUxvYWRGYWxsYmFja1N5bmNocm9ub3VzbHkobmV3UmVxdWVzdCwg
ZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgfQotCi0gICAg
bm90aWZpZXIoKS0+c2VuZFJlbWFpbmluZ0RlbGVnYXRlTWVzc2FnZXMobV9kb2N1bWVudExvYWRl
ci5nZXQoKSwgaWRlbnRpZmllciwgcmVzcG9uc2UsIGRhdGEuc2l6ZSgpLCBlcnJvcik7CisgICAg
YWN0dWFsUmVxdWVzdCA9IGluaXRpYWxSZXF1ZXN0OworICAgIHJlcXVlc3RGcm9tRGVsZWdhdGUo
YWN0dWFsUmVxdWVzdCwgaWRlbnRpZmllciwgZXJyb3IpOwogICAgIHJldHVybiBpZGVudGlmaWVy
OwogfQogCkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHJldmlzaW9uIDY5MzY2KQorKysgV2ViQ29y
ZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEFyY2hpdmU7CiBjbGFzcyBBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZTsKK2NsYXNzIEJsb2I7CiBjbGFzcyBDYWNoZWRGcmFtZUJhc2U7CiBjbGFzcyBD
YWNoZWRQYWdlOwogY2xhc3MgQ2FjaGVkUmVzb3VyY2U7CkBAIC0xMjMsNiArMTI0LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyB2b2lkIHJlcG9ydExvY2FsTG9hZEZhaWxlZChGcmFtZSosIGNvbnN0
IFN0cmluZyYgdXJsKTsKIAogICAgIHVuc2lnbmVkIGxvbmcgbG9hZFJlc291cmNlU3luY2hyb25v
dXNseShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTdG9yZWRDcmVkZW50aWFscywgUmVzb3VyY2VF
cnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEpOworICAgIFBhc3NS
ZWZQdHI8QmxvYj4gbG9hZFJlc291cmNlU3luY2hyb25vdXNseUFzQmxvYihjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmLCBTdG9yZWRDcmVkZW50aWFscywgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVz
cG9uc2UmLCB1bnNpZ25lZCBsb25nJik7CiAKICAgICBib29sIGNhbkhhbmRsZVJlcXVlc3QoY29u
c3QgUmVzb3VyY2VSZXF1ZXN0Jik7CiAKQEAgLTQzMSw2ICs0MzMsOCBAQCBwcml2YXRlOgogCiAg
ICAgdm9pZCB1cGRhdGVTYW5kYm94RmxhZ3MoKTsKIAorICAgIHVuc2lnbmVkIGxvbmcgcHJlcGFy
ZVN5bmNSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFJlc291cmNlRXJyb3ImLCBSZXNv
dXJjZVJlcXVlc3QmIGFjdHVhbFJlcXVlc3QpOworCiAgICAgRnJhbWUqIG1fZnJhbWU7CiAgICAg
RnJhbWVMb2FkZXJDbGllbnQqIG1fY2xpZW50OwogCkluZGV4OiBXZWJDb3JlL2xvYWRlci9SZXNv
dXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2Fk
ZXIuY3BwCShyZXZpc2lvbiA2OTM2NikKKysrIFdlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc4LDE4ICsyNzgsMjEgQEAgdm9pZCBSZXNvdXJjZUxv
YWRlcjo6d2lsbFN0b3BCdWZmZXJpbmdEYQogCiB2b2lkIFJlc291cmNlTG9hZGVyOjpkaWRGaW5p
c2hMb2FkaW5nKGRvdWJsZSBmaW5pc2hUaW1lKQogewotICAgIC8vIElmIGxvYWQgaGFzIGJlZW4g
Y2FuY2VsbGVkIGFmdGVyIGZpbmlzaGluZyAod2hpY2ggY291bGQgaGFwcGVuIHdpdGggYSAKLSAg
ICAvLyBKYXZhU2NyaXB0IHRoYXQgY2hhbmdlcyB0aGUgd2luZG93IGxvY2F0aW9uKSwgZG8gbm90
aGluZy4KLSAgICBpZiAobV9jYW5jZWxsZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQo
IW1fcmVhY2hlZFRlcm1pbmFsU3RhdGUpOworICAgIGRpZEZpbmlzaExvYWRpbmdPbmVQYXJ0KGZp
bmlzaFRpbWUpOworICAgIHJlbGVhc2VSZXNvdXJjZXMoKTsKK30KIAordm9pZCBSZXNvdXJjZUxv
YWRlcjo6ZGlkRmluaXNoTG9hZGluZ0Jsb2IoZG91YmxlIGZpbmlzaFRpbWUsIEJsb2IqKQorewor
ICAgIC8vIEZJWE1FOiBXaGF0IGFib3V0IG11bHRpcGFydCBhbmQgZG93bmxvYWRBc0Jsb2I/CiAg
ICAgZGlkRmluaXNoTG9hZGluZ09uZVBhcnQoZmluaXNoVGltZSk7CiAgICAgcmVsZWFzZVJlc291
cmNlcygpOwogfQogCiB2b2lkIFJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nT25lUGFy
dChkb3VibGUgZmluaXNoVGltZSkKIHsKKyAgICAvLyBJZiBsb2FkIGhhcyBiZWVuIGNhbmNlbGxl
ZCBhZnRlciBmaW5pc2hpbmcgKHdoaWNoIGNvdWxkIGhhcHBlbiB3aXRoIGEgCisgICAgLy8gSmF2
YVNjcmlwdCB0aGF0IGNoYW5nZXMgdGhlIHdpbmRvdyBsb2NhdGlvbiksIGRvIG5vdGhpbmcuCiAg
ICAgaWYgKG1fY2FuY2VsbGVkKQogICAgICAgICByZXR1cm47CiAgICAgQVNTRVJUKCFtX3JlYWNo
ZWRUZXJtaW5hbFN0YXRlKTsKQEAgLTM5MCw2ICszOTMsNyBAQCB2b2lkIFJlc291cmNlTG9hZGVy
Ojp3aWxsU2VuZFJlcXVlc3QoUmVzCiAgICAgaWYgKGRvY3VtZW50TG9hZGVyKCktPmFwcGxpY2F0
aW9uQ2FjaGVIb3N0KCktPm1heWJlTG9hZEZhbGxiYWNrRm9yUmVkaXJlY3QodGhpcywgcmVxdWVz
dCwgcmVkaXJlY3RSZXNwb25zZSkpCiAgICAgICAgIHJldHVybjsKICNlbmRpZgorICAgIEFTU0VS
VChyZXF1ZXN0LmRvd25sb2FkQXNCbG9iKCkgPT0gbV9yZXF1ZXN0LmRvd25sb2FkQXNCbG9iKCkp
OwogICAgIHdpbGxTZW5kUmVxdWVzdChyZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKTsKIH0KIApA
QCAtNDExLDggKzQxNSwyMSBAQCB2b2lkIFJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9u
c2UoCiAKIHZvaWQgUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVEYXRhKFJlc291cmNlSGFuZGxl
KiwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCwgaW50IGxlbmd0aFJlY2VpdmVkKQogewor
ICAgIGRpZFJlY2VpdmVEYXRhQ29tbW9uKFJlc3BvbnNlQXNEYXRhLCBkYXRhLCBsZW5ndGgsIGxl
bmd0aFJlY2VpdmVkKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUJsb2JE
YXRhKFJlc291cmNlSGFuZGxlKiwgaW50IGxlbmd0aCkKK3sKKyAgICBkaWRSZWNlaXZlRGF0YUNv
bW1vbihSZXNwb25zZUFzQmxvYiwgMCwgbGVuZ3RoLCAwKTsKK30KKwordm9pZCBSZXNvdXJjZUxv
YWRlcjo6ZGlkUmVjZWl2ZURhdGFDb21tb24oUmVzcG9uc2VBc01vZGUgcmVzcG9uc2VBcywgY29u
c3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCwgaW50IGxlbmd0aFJlY2VpdmVkKQorewogICAgIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OndpbGxSZWNlaXZlUmVzb3VyY2VEYXRhKG1fZnJhbWUuZ2V0KCksIGlkZW50aWZpZXIo
KSk7Ci0gICAgZGlkUmVjZWl2ZURhdGEoZGF0YSwgbGVuZ3RoLCBsZW5ndGhSZWNlaXZlZCwgZmFs
c2UpOworICAgIGlmIChyZXNwb25zZUFzID09IFJlc3BvbnNlQXNEYXRhKQorICAgICAgICBkaWRS
ZWNlaXZlRGF0YShkYXRhLCBsZW5ndGgsIGxlbmd0aFJlY2VpdmVkLCBmYWxzZSk7CisgICAgZWxz
ZQorICAgICAgICBkaWRSZWNlaXZlQmxvYkRhdGEobGVuZ3RoKTsKICAgICBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmRpZFJlY2VpdmVSZXNvdXJjZURhdGEobV9mcmFtZS5nZXQoKSwgY29va2ll
KTsKIH0KIApAQCAtNDIxLDYgKzQzOCwxMSBAQCB2b2lkIFJlc291cmNlTG9hZGVyOjpkaWRGaW5p
c2hMb2FkaW5nKFJlCiAgICAgZGlkRmluaXNoTG9hZGluZyhmaW5pc2hUaW1lKTsKIH0KIAordm9p
ZCBSZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZ0Jsb2IoUmVzb3VyY2VIYW5kbGUqLCBk
b3VibGUgZmluaXNoVGltZSwgQmxvYiogYmxvYikKK3sKKyAgICBkaWRGaW5pc2hMb2FkaW5nQmxv
YihmaW5pc2hUaW1lLCBibG9iKTsKK30KKwogdm9pZCBSZXNvdXJjZUxvYWRlcjo6ZGlkRmFpbChS
ZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQogewogI2lmIEVOQUJM
RShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCkBAIC00OTIsNiArNTE0LDggQEAgdm9pZCBSZXNv
dXJjZUxvYWRlcjo6d2lsbENhY2hlUmVzcG9uc2UoUgogI2lmIEVOQUJMRShCTE9CKQogQXN5bmNG
aWxlU3RyZWFtKiBSZXNvdXJjZUxvYWRlcjo6Y3JlYXRlQXN5bmNGaWxlU3RyZWFtKEZpbGVTdHJl
YW1DbGllbnQqIGNsaWVudCkKIHsKKyAgICAvLyBGSVhNRTogRGVjb3VwbGUgdGhlIEZpbGVUaHJl
YWQgZnJvbSBTY3JpcHRFeGVjdXRpb25Db250ZXh0cyBhbmQgcmVtb3ZlIHRoaXMgbWV0aG9kIGZy
b20gUmVzb3VyY2VIYW5kbGVDbGllbnQsCisgICAgLy8gY2FsbGVycyBzaG91ZSBiZSBhYmxlIHRv
IGNyZWF0ZSBhIEZpbGVTdHJlYW1Qcm94eSBpbmRlcGVuZGVudCBvZiBhIGNvbnRleHQuCiAgICAg
Ly8gSXQgaXMgT0sgdG8gc2ltcGx5IHJldHVybiBhIHBvaW50ZXIgc2luY2UgRmlsZVN0cmVhbVBy
b3h5OjpjcmVhdGUgYWRkcyBhbiBleHRyYSByZWYuCiAgICAgcmV0dXJuIEZpbGVTdHJlYW1Qcm94
eTo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwg
Y2xpZW50KS5nZXQoKTsKIH0KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuaAkocmV2aXNpb24g
NjkzNjYpCisrKyBXZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC04MCw5ICs4MCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwg
dm9pZCBkaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBs
b25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJl
Y2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CiAgICAgICAgIHZpcnR1YWwg
dm9pZCBkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiwgaW50LCBsb25nIGxvbmcgbGVuZ3RoUmVj
ZWl2ZWQsIGJvb2wgYWxsQXRPbmNlKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVC
bG9iRGF0YShpbnQpIHsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUNhY2hlZE1l
dGFkYXRhKGNvbnN0IGNoYXIqLCBpbnQpIHsgfQogICAgICAgICB2b2lkIHdpbGxTdG9wQnVmZmVy
aW5nRGF0YShjb25zdCBjaGFyKiwgaW50KTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlz
aExvYWRpbmcoZG91YmxlIGZpbmlzaFRpbWUpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmlu
aXNoTG9hZGluZ0Jsb2IoZG91YmxlIGZpbmlzaFRpbWUsIEJsb2IqKTsKICAgICAgICAgdmlydHVh
bCB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpOwogCiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSgpOwpAQCAtOTgsOCArMTAwLDEwIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFNlbmREYXRhKFJlc291
cmNlSGFuZGxlKiwgdW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBs
b25nIHRvdGFsQnl0ZXNUb0JlU2VudCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZl
UmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNo
YXIqLCBpbnQsIGludCBsZW5ndGhSZWNlaXZlZCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRS
ZWNlaXZlQmxvYkRhdGEoUmVzb3VyY2VIYW5kbGUqLCBpbnQpOwogICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKFJlc291cmNlSGFuZGxlKiwgY29uc3QgY2hhciog
ZGF0YSwgaW50IGxlbmd0aCkgeyBkaWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEoZGF0YSwgbGVuZ3Ro
KTsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhSZXNvdXJjZUhhbmRs
ZSosIGRvdWJsZSBmaW5pc2hUaW1lKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExv
YWRpbmdCbG9iKFJlc291cmNlSGFuZGxlKiwgZG91YmxlIGZpbmlzaFRpbWUsIEJsb2IqKTsKICAg
ICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJj
ZUVycm9yJik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCB3YXNCbG9ja2VkKFJlc291cmNlSGFuZGxl
Kik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBjYW5ub3RTaG93VVJMKFJlc291cmNlSGFuZGxlKik7
CkBAIC0xMjgsNiArMTMyLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBz
ZXRTaG91bGRCdWZmZXJEYXRhKGJvb2wgc2hvdWxkQnVmZmVyRGF0YSk7CiAKICAgICBwcm90ZWN0
ZWQ6CisgICAgICAgIGVudW0gUmVzcG9uc2VBc01vZGUgIHsKKyAgICAgICAgICAgIFJlc3BvbnNl
QXNEYXRhLAorICAgICAgICAgICAgUmVzcG9uc2VBc0Jsb2IKKyAgICAgICAgfTsKKwogICAgICAg
ICBSZXNvdXJjZUxvYWRlcihGcmFtZSosIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcywg
Ym9vbCBzaG91bGRDb250ZW50U25pZmYpOwogCiAjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJ
Q0FUSU9OUykKQEAgLTE0MSw2ICsxNTAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IGJvb2wgcmVhY2hlZFRlcm1pbmFsU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3JlYWNoZWRUZXJt
aW5hbFN0YXRlOyB9CiAgICAgICAgIGJvb2wgY2FuY2VsbGVkKCkgY29uc3QgeyByZXR1cm4gbV9j
YW5jZWxsZWQ7IH0KICAgICAgICAgYm9vbCBkZWZlcnNMb2FkaW5nKCkgY29uc3QgeyByZXR1cm4g
bV9kZWZlcnNMb2FkaW5nOyB9CisgICAgICAgIHZvaWQgZGlkUmVjZWl2ZURhdGFDb21tb24oUmVz
cG9uc2VBc01vZGUsIGNvbnN0IGNoYXIqLCBpbnQsIGludCBsZW5ndGhSZWNlaXZlZCk7CiAKICAg
ICAgICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBtX2hhbmRsZTsKICAgICAgICAgUmVmUHRyPEZy
YW1lPiBtX2ZyYW1lOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmNwcAkocmV2
aXNpb24gNjkzNjYpCisrKyBXZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE1OCw2ICsxNTgsMjAgQEAgdm9pZCBTdWJyZXNvdXJjZUxvYWRlcjo6
ZGlkUmVjZWl2ZURhdGEoYwogICAgICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZURhdGEodGhpcywg
ZGF0YSwgbGVuZ3RoKTsKIH0KIAordm9pZCBTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUJs
b2JEYXRhKGludCBsZW5ndGgpCit7CisgICAgLy8gUmVmZXJlbmNlIHRoZSBvYmplY3QgaW4gdGhp
cyBtZXRob2Qgc2luY2UgdGhlIGFkZGl0aW9uYWwgcHJvY2Vzc2luZyBjYW4gZG8KKyAgICAvLyBh
bnl0aGluZyBpbmNsdWRpbmcgcmVtb3ZpbmcgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoaXMgb2Jq
ZWN0OyBvbmUgZXhhbXBsZSBvZiB0aGlzIGlzIDMyNjYyMTYuCisgICAgUmVmUHRyPFN1YnJlc291
cmNlTG9hZGVyPiBwcm90ZWN0KHRoaXMpOworCisgICAgUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2Vp
dmVCbG9iRGF0YShsZW5ndGgpOworCisgICAgLy8gQSBzdWJyZXNvdXJjZSBsb2FkZXIgZG9lcyBu
b3QgbG9hZCBtdWx0aXBhcnQgc2VjdGlvbnMgcHJvZ3Jlc3NpdmVseS4KKyAgICAvLyBTbyBkb24n
dCBkZWxpdmVyIGFueSBkYXRhIHRvIHRoZSBsb2FkZXIgeWV0LgorICAgIGlmICghbV9sb2FkaW5n
TXVsdGlwYXJ0Q29udGVudCAmJiBtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmRpZFJlY2Vp
dmVCbG9iRGF0YSh0aGlzLCBsZW5ndGgpOworfQorCiB2b2lkIFN1YnJlc291cmNlTG9hZGVyOjpk
aWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKIHsK
ICAgICAvLyBSZWZlcmVuY2UgdGhlIG9iamVjdCBpbiB0aGlzIG1ldGhvZCBzaW5jZSB0aGUgYWRk
aXRpb25hbCBwcm9jZXNzaW5nIGNhbiBkbwpAQCAtMTcwLDYgKzE4NCwxNiBAQCB2b2lkIFN1YnJl
c291cmNlTG9hZGVyOjpkaWRSZWNlaXZlQ2FjaGVkCiAKIHZvaWQgU3VicmVzb3VyY2VMb2FkZXI6
OmRpZEZpbmlzaExvYWRpbmcoZG91YmxlIGZpbmlzaFRpbWUpCiB7CisgICAgZGlkRmluaXNoTG9h
ZGluZ0NvbW1vbihSZXNwb25zZUFzRGF0YSwgZmluaXNoVGltZSwgMCk7Cit9CisKK3ZvaWQgU3Vi
cmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmdCbG9iKGRvdWJsZSBmaW5pc2hUaW1lLCBC
bG9iKiBibG9iKQoreworICAgIGRpZEZpbmlzaExvYWRpbmdDb21tb24oUmVzcG9uc2VBc0Jsb2Is
IGZpbmlzaFRpbWUsIGJsb2IpOworfQorCit2b2lkIFN1YnJlc291cmNlTG9hZGVyOjpkaWRGaW5p
c2hMb2FkaW5nQ29tbW9uKFJlc3BvbnNlQXNNb2RlIHJlc3BvbnNlQXMsIGRvdWJsZSBmaW5pc2hU
aW1lLCBCbG9iKiBibG9iKQorewogICAgIGlmIChjYW5jZWxsZWQoKSkKICAgICAgICAgcmV0dXJu
OwogICAgIEFTU0VSVCghcmVhY2hlZFRlcm1pbmFsU3RhdGUoKSk7CkBAIC0xNzgsMTQgKzIwMiwy
MCBAQCB2b2lkIFN1YnJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nCiAgICAgUmVmUHRy
PFN1YnJlc291cmNlTG9hZGVyPiBwcm90ZWN0KHRoaXMpOwogCiAgICAgaWYgKG1fY2xpZW50KQot
ICAgICAgICBtX2NsaWVudC0+ZGlkRmluaXNoTG9hZGluZyh0aGlzKTsKLSAgICAKKyAgICAgICAg
aWYgKHJlc3BvbnNlQXMgPT0gUmVzcG9uc2VBc0Jsb2IpCisgICAgICAgICAgICBtX2NsaWVudC0+
ZGlkRmluaXNoTG9hZGluZ0Jsb2IodGhpcywgYmxvYik7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIG1fY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKHRoaXMpOworCiAgICAgbV9oYW5kbGUgPSAw
OwogCiAgICAgaWYgKGNhbmNlbGxlZCgpKQogICAgICAgICByZXR1cm47CiAgICAgbV9kb2N1bWVu
dExvYWRlci0+cmVtb3ZlU3VicmVzb3VyY2VMb2FkZXIodGhpcyk7Ci0gICAgUmVzb3VyY2VMb2Fk
ZXI6OmRpZEZpbmlzaExvYWRpbmcoZmluaXNoVGltZSk7CisgICAgaWYgKHJlc3BvbnNlQXMgPT0g
UmVzcG9uc2VBc0Jsb2IpCisgICAgICAgIFJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5n
QmxvYihmaW5pc2hUaW1lLCBibG9iKTsKKyAgICBlbHNlCisgICAgICAgIFJlc291cmNlTG9hZGVy
OjpkaWRGaW5pc2hMb2FkaW5nKGZpbmlzaFRpbWUpOwogfQogCiB2b2lkIFN1YnJlc291cmNlTG9h
ZGVyOjpkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQpJbmRleDogV2ViQ29yZS9s
b2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9T
dWJyZXNvdXJjZUxvYWRlci5oCShyZXZpc2lvbiA2OTM2NikKKysrIFdlYkNvcmUvbG9hZGVyL1N1
YnJlc291cmNlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDE0ICs1MSwxOCBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YSh1bnNpZ25l
ZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVT
ZW50KTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShjb25z
dCBjaGFyKiwgaW50LCBsb25nIGxvbmcgbGVuZ3RoUmVjZWl2ZWQsIGJvb2wgYWxsQXRPbmNlKTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVCbG9iRGF0YShpbnQpOwogICAgICAgICB2
aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKGNvbnN0IGNoYXIqLCBpbnQpOwog
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhkb3VibGUgZmluaXNoVGltZSk7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nQmxvYihkb3VibGUgZmluaXNo
VGltZSwgQmxvYiopOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChjb25zdCBSZXNvdXJj
ZUVycm9yJik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFn
ZSgpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCByZWNlaXZlZENhbmNlbGxhdGlvbihjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOyAg
ICAgICAgCiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRDYW5jZWwoY29uc3QgUmVzb3VyY2VFcnJv
ciYpOwogCisgICAgICAgIHZvaWQgZGlkRmluaXNoTG9hZGluZ0NvbW1vbihSZXNwb25zZUFzTW9k
ZSwgZG91YmxlIGZpbmlzaFRpbWUsIEJsb2IqKTsKKwogICAgICAgICBTdWJyZXNvdXJjZUxvYWRl
ckNsaWVudCogbV9jbGllbnQ7CiAgICAgICAgIGJvb2wgbV9sb2FkaW5nTXVsdGlwYXJ0Q29udGVu
dDsKICAgICB9OwpJbmRleDogV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXJDbGllbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlckNsaWVudC5o
CShyZXZpc2lvbiA2OTM2NikKKysrIFdlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyQ2xp
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDkgQEAKICNpZm5kZWYgU3VicmVzb3Vy
Y2VMb2FkZXJDbGllbnRfaAogI2RlZmluZSBTdWJyZXNvdXJjZUxvYWRlckNsaWVudF9oCiAKKyNp
bmNsdWRlICJCbG9iLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKwogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKQEAgLTQ2LDExICs0
OSwxMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZFNlbmREYXRhKFN1YnJlc291cmNl
TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBsb25nIC8qYnl0ZXNTZW50Ki8sIHVuc2lnbmVkIGxvbmcg
bG9uZyAvKnRvdGFsQnl0ZXNUb0JlU2VudCovKSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBkaWRS
ZWNlaXZlUmVzcG9uc2UoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFN1YnJlc291cmNlTG9hZGVy
KiwgY29uc3QgY2hhciosIGludCAvKmxlbmd0aFJlY2VpdmVkKi8pIHsgfQorICAgIHZpcnR1YWwg
dm9pZCBkaWRSZWNlaXZlRGF0YShTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IGNoYXIqLCBpbnQg
LypsZW5ndGhSZWNlaXZlZCovKSB7IH0gLy8gTm90IGNhbGxlZCBpZiByZXF1ZXN0LmRvd25sb2Fk
QXNCbG9iIGlzIHNldC4KKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUJsb2JEYXRhKFN1YnJl
c291cmNlTG9hZGVyKiwgaW50IC8qbGVuZ3RoUmVjZWl2ZWQqLykgeyB9IC8vIE9ubHkgY2FsbGVk
IGlmIHJlcXVlc3QuZG93bmxvYWRBc0Jsb2IgaXMgc2V0LgogICAgIHZpcnR1YWwgdm9pZCBkaWRS
ZWNlaXZlQ2FjaGVkTWV0YWRhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBjaGFyKiwgaW50
IC8qbGVuZ3RoUmVjZWl2ZWQqLykgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRp
bmcoU3VicmVzb3VyY2VMb2FkZXIqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9h
ZGluZ0Jsb2IoU3VicmVzb3VyY2VMb2FkZXIqLCBCbG9iKikgeyB9CiAgICAgdmlydHVhbCB2b2lk
IGRpZEZhaWwoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBSZXNvdXJjZUVycm9yJikgeyB9Ci0g
ICAgCisKICAgICB2aXJ0dWFsIGJvb2wgZ2V0U2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoU3Vi
cmVzb3VyY2VMb2FkZXIqLCBib29sJiAvKnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKi8pIHsg
cmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZShTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlJikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHJlY2VpdmVkQ2FuY2VsbGF0aW9uKFN1YnJlc291
cmNlTG9hZGVyKiwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKSB7IH0KSW5kZXg6IFdl
YkNvcmUvbG9hZGVyL1RocmVhZGFibGVMb2FkZXJDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2xvYWRlci9UaHJlYWRhYmxlTG9hZGVyQ2xpZW50LmgJKHJldmlzaW9uIDY5MzY2KQorKysg
V2ViQ29yZS9sb2FkZXIvVGhyZWFkYWJsZUxvYWRlckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSw2ICszMSw5IEBACiAjaWZuZGVmIFRocmVhZGFibGVMb2FkZXJDbGllbnRfaAogI2RlZmlu
ZSBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50X2gKIAorI2luY2x1ZGUgIkJsb2IuaCIKKyNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBS
ZXNvdXJjZUVycm9yOwpAQCAtNDEsOCArNDQsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGlkU2VuZERhdGEodW5zaWduZWQgbG9uZyBsb25nIC8qYnl0ZXNT
ZW50Ki8sIHVuc2lnbmVkIGxvbmcgbG9uZyAvKnRvdGFsQnl0ZXNUb0JlU2VudCovKSB7IH0KIAog
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmKSB7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKGNvbnN0IGNo
YXIqLCBpbnQgLypsZW5ndGhSZWNlaXZlZCovKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGRp
ZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqLCBpbnQgLypsZW5ndGhSZWNlaXZlZCovKSB7IH0gLy8g
Tm90IGNhbGxlZCB3aGVuIHJlcXVlc3QuZG93bmxvYWRBc0Jsb2IgaXMgc2V0LgorICAgICAgICB2
aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUJsb2JEYXRhKGludCAvKmxlbmd0aFJlY2VpdmVkKi8pIHsg
fSAvLyBPbmx5IGNhbGxlZCBmb3IgcmVxdWVzdC5kb3dubG9hZEFzQmxvYgogICAgICAgICB2aXJ0
dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nIC8qaWRlbnRpZmllciovKSB7
IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmdCbG9iKHVuc2lnbmVkIGxv
bmcgLyppZGVudGlmaWVyKi8sIEJsb2IqKSB7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZh
aWwoY29uc3QgUmVzb3VyY2VFcnJvciYpIHsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFp
bFJlZGlyZWN0Q2hlY2soKSB7IH0KIApJbmRleDogV2ViQ29yZS9sb2FkZXIvVGhyZWFkYWJsZUxv
YWRlckNsaWVudFdyYXBwZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9UaHJlYWRh
YmxlTG9hZGVyQ2xpZW50V3JhcHBlci5oCShyZXZpc2lvbiA2OTM2NikKKysrIFdlYkNvcmUvbG9h
ZGVyL1RocmVhZGFibGVMb2FkZXJDbGllbnRXcmFwcGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0
LDYgKzc0LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgICAgICBtX2NsaWVu
dC0+ZGlkUmVjZWl2ZURhdGEoZGF0YSwgbGVuZ3RoUmVjZWl2ZWQpOwogICAgICAgICB9CiAKKyAg
ICAgICAgdm9pZCBkaWRSZWNlaXZlQmxvYkRhdGEoaW50IGxlbmd0aFJlY2VpdmVkKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAobV9jbGllbnQpCisgICAgICAgICAgICAgICAgbV9jbGllbnQt
PmRpZFJlY2VpdmVCbG9iRGF0YShsZW5ndGhSZWNlaXZlZCk7CisgICAgICAgIH0KKwogICAgICAg
ICB2b2lkIGRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKQogICAgICAg
ICB7CiAgICAgICAgICAgICBtX2RvbmUgPSB0cnVlOwpAQCAtODEsNiArODcsMTMgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICAgICAgICAgIG1fY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5n
KGlkZW50aWZpZXIpOwogICAgICAgICB9CiAKKyAgICAgICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5n
QmxvYih1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIEJsb2IqIGJsb2IpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1fZG9uZSA9IHRydWU7CisgICAgICAgICAgICBpZiAobV9jbGllbnQpCisgICAg
ICAgICAgICAgICAgbV9jbGllbnQtPmRpZEZpbmlzaExvYWRpbmdCbG9iKGlkZW50aWZpZXIsIGJs
b2IpOworICAgICAgICB9CisKICAgICAgICAgdm9pZCBkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJy
b3ImIGVycm9yKQogICAgICAgICB7CiAgICAgICAgICAgICBtX2RvbmUgPSB0cnVlOwpJbmRleDog
V2ViQ29yZS9sb2FkZXIvV29ya2VyVGhyZWFkYWJsZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9sb2FkZXIvV29ya2VyVGhyZWFkYWJsZUxvYWRlci5jcHAJKHJldmlzaW9uIDY5MzY2
KQorKysgV2ViQ29yZS9sb2FkZXIvV29ya2VyVGhyZWFkYWJsZUxvYWRlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE5MSw2ICsxOTEsMTIgQEAgc3RhdGljIHZvaWQgd29ya2VyQ29udGV4dERpZFJl
Y2VpdmVEYXRhKAogICAgIHdvcmtlckNsaWVudFdyYXBwZXItPmRpZFJlY2VpdmVEYXRhKHZlY3Rv
ckRhdGEtPmRhdGEoKSwgdmVjdG9yRGF0YS0+c2l6ZSgpKTsKIH0KIAorc3RhdGljIHZvaWQgd29y
a2VyQ29udGV4dERpZFJlY2VpdmVCbG9iRGF0YShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBSZWZQdHI8VGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXI+IHdvcmtlckNsaWVudFdy
YXBwZXIsIGludCBsZW5ndGhSZWNlaXZlZCkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQs
IGNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKTsKKyAgICB3b3JrZXJDbGllbnRXcmFwcGVyLT5k
aWRSZWNlaXZlQmxvYkRhdGEobGVuZ3RoUmVjZWl2ZWQpOworfQorCiB2b2lkIFdvcmtlclRocmVh
ZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2U6OmRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIq
IGRhdGEsIGludCBsZW5ndGhSZWNlaXZlZCkKIHsKICAgICBPd25QdHI8VmVjdG9yPGNoYXI+ID4g
dmVjdG9yID0gYWRvcHRQdHIobmV3IFZlY3RvcjxjaGFyPihsZW5ndGhSZWNlaXZlZCkpOyAvLyBu
ZWVkcyB0byBiZSBhbiBPd25QdHIgZm9yIHVzYWdlIHdpdGggY3JlYXRlQ2FsbGJhY2tUYXNrLgpA
QCAtMTk4LDYgKzIwNCwxMSBAQCB2b2lkIFdvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJl
YWRCCiAgICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckNvbnRleHQoY3Jl
YXRlQ2FsbGJhY2tUYXNrKCZ3b3JrZXJDb250ZXh0RGlkUmVjZWl2ZURhdGEsIG1fd29ya2VyQ2xp
ZW50V3JhcHBlciwgdmVjdG9yLnJlbGVhc2UoKSksIG1fdGFza01vZGUpOwogfQogCit2b2lkIFdv
cmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2U6OmRpZFJlY2VpdmVCbG9iRGF0
YShpbnQgbGVuZ3RoUmVjZWl2ZWQpCit7CisgICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza0Zvck1v
ZGVUb1dvcmtlckNvbnRleHQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZ3b3JrZXJDb250ZXh0RGlkUmVj
ZWl2ZUJsb2JEYXRhLCBtX3dvcmtlckNsaWVudFdyYXBwZXIsIGxlbmd0aFJlY2VpdmVkKSwgbV90
YXNrTW9kZSk7Cit9CisKIHN0YXRpYyB2b2lkIHdvcmtlckNvbnRleHREaWRGaW5pc2hMb2FkaW5n
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFJlZlB0cjxUaHJlYWRhYmxlTG9hZGVy
Q2xpZW50V3JhcHBlcj4gd29ya2VyQ2xpZW50V3JhcHBlciwgdW5zaWduZWQgbG9uZyBpZGVudGlm
aWVyKQogewogICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwgY29udGV4dC0+aXNXb3JrZXJDb250
ZXh0KCkpOwpAQCAtMjA5LDYgKzIyMCwyMCBAQCB2b2lkIFdvcmtlclRocmVhZGFibGVMb2FkZXI6
Ok1haW5UaHJlYWRCCiAgICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckNv
bnRleHQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZ3b3JrZXJDb250ZXh0RGlkRmluaXNoTG9hZGluZywg
bV93b3JrZXJDbGllbnRXcmFwcGVyLCBpZGVudGlmaWVyKSwgbV90YXNrTW9kZSk7CiB9CiAKK3N0
YXRpYyB2b2lkIHdvcmtlckNvbnRleHREaWRGaW5pc2hMb2FkaW5nQmxvYihTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBSZWZQdHI8VGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXI+
IHdvcmtlckNsaWVudFdyYXBwZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBLVVJMIGJsb2JJRCwgU3RyaW5n
IHR5cGUsIGxvbmcgbG9uZyBzaXplKQoreworICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwgY29u
dGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpOworICAgIFJlZlB0cjxCbG9iPiBibG9iID0gQmxvYjo6
Y3JlYXRlKGJsb2JJRCwgdHlwZSwgc2l6ZSk7CisgICAgd29ya2VyQ2xpZW50V3JhcHBlci0+ZGlk
RmluaXNoTG9hZGluZ0Jsb2IoaWRlbnRpZmllciwgYmxvYi5nZXQoKSk7Cit9CisKK3ZvaWQgV29y
a2VyVGhyZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEJyaWRnZTo6ZGlkRmluaXNoTG9hZGluZ0Js
b2IodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBCbG9iKiBibG9iKQoreworICAgIG1fZG93bmxv
YWRlZEJsb2IgPSBibG9iOworICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tGb3JNb2RlVG9Xb3Jr
ZXJDb250ZXh0KGNyZWF0ZUNhbGxiYWNrVGFzaygmd29ya2VyQ29udGV4dERpZEZpbmlzaExvYWRp
bmdCbG9iLCBtX3dvcmtlckNsaWVudFdyYXBwZXIsIGlkZW50aWZpZXIsIGJsb2ItPnVybCgpLCBi
bG9iLT50eXBlKCksIGJsb2ItPnNpemUoKSksIG1fdGFza01vZGUpOworfQorCiBzdGF0aWMgdm9p
ZCB3b3JrZXJDb250ZXh0RGlkRmFpbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBS
ZWZQdHI8VGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXI+IHdvcmtlckNsaWVudFdyYXBwZXIs
IGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQogewogICAgIEFTU0VSVF9VTlVTRUQoY29udGV4
dCwgY29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvV29y
a2VyVGhyZWFkYWJsZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1dvcmtl
clRocmVhZGFibGVMb2FkZXIuaAkocmV2aXNpb24gNjkzNjYpCisrKyBXZWJDb3JlL2xvYWRlci9X
b3JrZXJUaHJlYWRhYmxlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNCwxMiArMTE0LDE0
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5k
RGF0YSh1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90
YWxCeXRlc1RvQmVTZW50KTsKICAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVz
cG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogICAgICAgICAgICAgdmlydHVhbCB2b2lk
IGRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqLCBpbnQgbGVuZ3RoUmVjZWl2ZWQpOworICAgICAg
ICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVCbG9iRGF0YShpbnQgbGVuZ3RoUmVjZWl2ZWQp
OwogICAgICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyKTsKKyAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5n
QmxvYih1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIEJsb2IqKTsKICAgICAgICAgICAgIHZpcnR1
YWwgdm9pZCBkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKICAgICAgICAgICAgIHZpcnR1
YWwgdm9pZCBkaWRGYWlsUmVkaXJlY3RDaGVjaygpOwogICAgICAgICAgICAgdmlydHVhbCB2b2lk
IGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNhbmNlbGxhdGlvbihjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJik7CiAKLSAgICAgICAgICAgIC8vIE9ubHkgdG8gYmUgdXNlZCBvbiB0aGUgbWFpbiB0aHJl
YWQuCisgICAgICAgICAgICAvLyBGb3IgdXNlIG9uIG1haW4gdGhyZWFkLgogICAgICAgICAgICAg
UmVmUHRyPFRocmVhZGFibGVMb2FkZXI+IG1fbWFpblRocmVhZExvYWRlcjsKIAogICAgICAgICAg
ICAgLy8gVGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXIgaXMgdG8gYmUgdXNlZCBvbiB0aGUg
d29ya2VyIGNvbnRleHQgdGhyZWFkLgpAQCAtMTMxLDYgKzEzMyw5IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogICAgICAgICAgICAgLy8gRm9yIHVzZSBvbiB0aGUgbWFpbiB0aHJlYWQuCiAgICAg
ICAgICAgICBTdHJpbmcgbV90YXNrTW9kZTsKKworICAgICAgICAgICAgLy8gRm9yIHVzZSBvbiB0
aGUgbWFpbiB0aHJlYWQuCisgICAgICAgICAgICBSZWZQdHI8QmxvYj4gbV9kb3dubG9hZGVkQmxv
YjsKICAgICAgICAgfTsKIAogICAgICAgICBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyKFdvcmtlckNv
bnRleHQqLCBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50KiwgY29uc3QgU3RyaW5nJiB0YXNrTW9kZSwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMmKTsK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcAkocmV2
aXNpb24gNjkzNjYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMiArMjUsMTQgQEAKIAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VIYW5k
bGVJbnRlcm5hbC5oIgogCisjaW5jbHVkZSAiQmxvYi5oIgogI2luY2x1ZGUgIkJsb2JSZWdpc3Ry
eS5oIgogI2luY2x1ZGUgIkROUy5oIgorI2luY2x1ZGUgIkhUVFBQYXJzZXJzLmgiCiAjaW5jbHVk
ZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlQ2xpZW50LmgiCisjaW5jbHVk
ZSAiUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVk
ZSA8YWxnb3JpdGhtPgogCkBAIC01NCw2ICs1Niw3IEBAIFJlc291cmNlSGFuZGxlOjpSZXNvdXJj
ZUhhbmRsZShjb25zdCBSZXMKIAogUGFzc1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gUmVzb3VyY2VI
YW5kbGU6OmNyZWF0ZShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50LCBib29sIGRlZmVy
c0xvYWRpbmcsIGJvb2wgc2hvdWxkQ29udGVudFNuaWZmKQogeworICAgIEFTU0VSVCghcmVxdWVz
dC5kb3dubG9hZEFzQmxvYigpKTsgLy8gRklYTUU6IFByb3ZpZGUgYW4gYXN5bmNocm9ub3VzIGlt
cGxlbWVudGF0aW9uIHRoYXQgcmV0dXJucyBhIGJsb2IsIHBvc3NpYmx5IGEgUmVzb3VyY2VIYW5k
bGVDbGllbnRXcmFwcGVyLgogI2lmIEVOQUJMRShCTE9CKQogICAgIGlmIChyZXF1ZXN0LnVybCgp
LnByb3RvY29sSXMoImJsb2IiKSkgewogICAgICAgICBQYXNzUmVmUHRyPFJlc291cmNlSGFuZGxl
PiBoYW5kbGUgPSBibG9iUmVnaXN0cnkoKS5jcmVhdGVSZXNvdXJjZUhhbmRsZShyZXF1ZXN0LCBj
bGllbnQpOwpAQCAtMTg1LDQgKzE4OCwxMiBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpjYWNoZU1l
dGFkYXRhKGNvbnN0CiAgICAgLy8gT3B0aW9uYWxseSBpbXBsZW1lbnRlZCBieSBwbGF0Zm9ybS4K
IH0KIAorLy8gc3RhdGljCitQYXNzUmVmUHRyPEJsb2I+IFJlc291cmNlSGFuZGxlOjpsb2FkUmVz
b3VyY2VTeW5jaHJvbm91c2x5QXNCbG9iKE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFscywgUmVzb3VyY2VFcnJvciYsIFJl
c291cmNlUmVzcG9uc2UmKQoreworICAgIEFTU0VSVF9VTlVTRUQocmVxdWVzdCwgcmVxdWVzdC5k
b3dubG9hZEFzQmxvYigpKTsKKyAgICAvLyBGSVhNRTogUHJvdmlkZSBhIHN5bmNocm9ub3VzIGlt
cGxlbWVudGF0aW9uIHRoYXQgcmV0dXJucyBhIGJsb2IuCisgICAgcmV0dXJuIDA7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNv
dXJjZUhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNv
dXJjZUhhbmRsZS5oCShyZXZpc2lvbiA2OTM2NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9SZXNvdXJjZUhhbmRsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3NCw3IEBAIHR5cGVk
ZWYgc3RydWN0IE9wYXF1ZUNGSFRUUENvb2tpZVN0b3JhZ2UKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVuZ2U7CitjbGFzcyBCbG9iOwogY2xhc3MgQ3Jl
ZGVudGlhbDsKIGNsYXNzIEZvcm1EYXRhOwogY2xhc3MgRnJhbWU7CkBAIC05Nyw2ICs5OCw3IEBA
IGNsYXNzIFJlc291cmNlSGFuZGxlIDogcHVibGljIFJlZkNvdW50ZWQKIHB1YmxpYzoKICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gY3JlYXRlKE5ldHdvcmtpbmdDb250ZXh0
KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUmVzb3VyY2VIYW5kbGVDbGllbnQqLCBib29sIGRl
ZmVyc0xvYWRpbmcsIGJvb2wgc2hvdWxkQ29udGVudFNuaWZmKTsKICAgICBzdGF0aWMgdm9pZCBs
b2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHMsIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJl
c3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRhKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9i
PiBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5QXNCbG9iKE5ldHdvcmtpbmdDb250ZXh0KiwgY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHMsIFJlc291cmNlRXJyb3ImLCBS
ZXNvdXJjZVJlc3BvbnNlJik7CiAKICAgICBzdGF0aWMgdm9pZCBwcmVwYXJlRm9yVVJMKGNvbnN0
IEtVUkwmKTsKICAgICBzdGF0aWMgYm9vbCB3aWxsTG9hZEZyb21DYWNoZShSZXNvdXJjZVJlcXVl
c3QmLCBGcmFtZSopOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFu
ZGxlQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlSGFuZGxlQ2xpZW50LmgJKHJldmlzaW9uIDY5MzY2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL1Jlc291cmNlSGFuZGxlQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3
LDcgQEAKICNkZWZpbmUgUmVzb3VyY2VIYW5kbGVDbGllbnRfaAogCiAjaW5jbHVkZSA8d3RmL0N1
cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIApAQCAtNDYsNiArNDcsNyBA
QCBjbGFzcyBOU0NhY2hlZFVSTFJlc3BvbnNlOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
Y2xhc3MgQXN5bmNGaWxlU3RyZWFtOworICAgIGNsYXNzIEJsb2I7CiAgICAgY2xhc3MgQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2U7CiAgICAgY2xhc3MgQ3JlZGVudGlhbDsKICAgICBjbGFzcyBGaWxl
U3RyZWFtQ2xpZW50OwpAQCAtNzIsOCArNzQsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUqLCBj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJikgeyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNl
aXZlRGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqLCBpbnQsIGludCAvKmxlbmd0aFJl
Y2VpdmVkKi8pIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUJsb2JEYXRhKFJl
c291cmNlSGFuZGxlKiwgaW50KSB7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVD
YWNoZWRNZXRhZGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqLCBpbnQpIHsgfQogICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhSZXNvdXJjZUhhbmRsZSosIGRvdWJs
ZSAvKmZpbmlzaFRpbWUqLykgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2Fk
aW5nQmxvYihSZXNvdXJjZUhhbmRsZSosIGRvdWJsZSAvKmZpbmlzaFRpbWUqLywgQmxvYiopIHsg
fQogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJl
c291cmNlRXJyb3ImKSB7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIHdhc0Jsb2NrZWQoUmVzb3Vy
Y2VIYW5kbGUqKSB7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGNhbm5vdFNob3dVUkwoUmVzb3Vy
Y2VIYW5kbGUqKSB7IH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJl
cXVlc3RCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVz
b3VyY2VSZXF1ZXN0QmFzZS5jcHAJKHJldmlzaW9uIDY5MzY2KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2
ICs0Niw3IEBAIFBhc3NPd25QdHI8UmVzb3VyY2VSZXF1ZXN0PiBSZXNvdXJjZVJlcXUKICAgICBy
ZXF1ZXN0LT5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhkYXRhLT5tX2ZpcnN0UGFydHlGb3JDb29r
aWVzKTsKICAgICByZXF1ZXN0LT5zZXRIVFRQTWV0aG9kKGRhdGEtPm1faHR0cE1ldGhvZCk7CiAg
ICAgcmVxdWVzdC0+c2V0VGFyZ2V0VHlwZShkYXRhLT5tX3RhcmdldFR5cGUpOworICAgIHJlcXVl
c3QtPnNldERvd25sb2FkQXNCbG9iKGRhdGEtPm1fZG93bmxvYWRBc0Jsb2IpOwogCiAgICAgcmVx
dWVzdC0+dXBkYXRlUmVzb3VyY2VSZXF1ZXN0KCk7CiAgICAgcmVxdWVzdC0+bV9odHRwSGVhZGVy
RmllbGRzLmFkb3B0KGRhdGEtPm1faHR0cEhlYWRlcnMucmVsZWFzZSgpKTsKQEAgLTc5LDYgKzgw
LDcgQEAgUGFzc093blB0cjxDcm9zc1RocmVhZFJlc291cmNlUmVxdWVzdERhdAogICAgIGRhdGEt
Pm1faHR0cE1ldGhvZCA9IGh0dHBNZXRob2QoKS5jcm9zc1RocmVhZFN0cmluZygpOwogICAgIGRh
dGEtPm1faHR0cEhlYWRlcnMgPSBodHRwSGVhZGVyRmllbGRzKCkuY29weURhdGEoKTsKICAgICBk
YXRhLT5tX3RhcmdldFR5cGUgPSBtX3RhcmdldFR5cGU7CisgICAgZGF0YS0+bV9kb3dubG9hZEFz
QmxvYiA9IG1fZG93bmxvYWRBc0Jsb2I7CiAKICAgICBkYXRhLT5tX3Jlc3BvbnNlQ29udGVudERp
c3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9y
ZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheS5zaXplKCkpOwog
ICAgIHNpemVfdCBlbmNvZGluZ0FycmF5U2l6ZSA9IG1fcmVzcG9uc2VDb250ZW50RGlzcG9zaXRp
b25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkuc2l6ZSgpOwpAQCAtMzQxLDcgKzM0MywxMCBAQCBib29s
IGVxdWFsSWdub3JpbmdIZWFkZXJGaWVsZHMoY29uc3QgUmVzCiAgICAgCiAgICAgaWYgKGEuYWxs
b3dDb29raWVzKCkgIT0gYi5hbGxvd0Nvb2tpZXMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIAorCisgICAgaWYgKGEuZG93bmxvYWRBc0Jsb2IoKSAhPSBiLmRvd25sb2FkQXNCbG9iKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIEZvcm1EYXRhKiBmb3JtRGF0YUEgPSBhLmh0
dHBCb2R5KCk7CiAgICAgRm9ybURhdGEqIGZvcm1EYXRhQiA9IGIuaHR0cEJvZHkoKTsKICAgICAK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2Uu
aAkocmV2aXNpb24gNjkzNjYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VS
ZXF1ZXN0QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsNiArMTQ0LDEwIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgVGFyZ2V0VHlwZSB0YXJnZXRUeXBlKCkgY29uc3QgeyByZXR1
cm4gbV90YXJnZXRUeXBlOyB9CiAgICAgICAgIHZvaWQgc2V0VGFyZ2V0VHlwZShUYXJnZXRUeXBl
IHR5cGUpIHsgbV90YXJnZXRUeXBlID0gdHlwZTsgfQogCisgICAgICAgIC8vIElmIHRydWUsIHRo
ZSByZXNwb25zZSBib2R5IHdpbGwgYmUgcHJvdmlkZWQgYXMgYSBibG9iLgorICAgICAgICBib29s
IGRvd25sb2FkQXNCbG9iKCkgY29uc3QgeyByZXR1cm4gbV9kb3dubG9hZEFzQmxvYjsgfQorICAg
ICAgICB2b2lkIHNldERvd25sb2FkQXNCbG9iKGJvb2wgZG93bmxvYWQpIHsgbV9kb3dubG9hZEFz
QmxvYiA9IGRvd25sb2FkOyB9CisKICAgICAgICAgc3RhdGljIGJvb2wgY29tcGFyZShjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKIAogICAgIHByb3RlY3Rl
ZDoKQEAgLTE1NSw2ICsxNTksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAs
IG1fcmVwb3J0TG9hZFRpbWluZyhmYWxzZSkKICAgICAgICAgICAgICwgbV9yZXBvcnRSYXdIZWFk
ZXJzKGZhbHNlKQogICAgICAgICAgICAgLCBtX3RhcmdldFR5cGUoVGFyZ2V0SXNTdWJyZXNvdXJj
ZSkKKyAgICAgICAgICAgICwgbV9kb3dubG9hZEFzQmxvYihmYWxzZSkKICAgICAgICAgewogICAg
ICAgICB9CiAKQEAgLTE3MCw2ICsxNzUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
ICAgICAsIG1fcmVwb3J0TG9hZFRpbWluZyhmYWxzZSkKICAgICAgICAgICAgICwgbV9yZXBvcnRS
YXdIZWFkZXJzKGZhbHNlKQogICAgICAgICAgICAgLCBtX3RhcmdldFR5cGUoVGFyZ2V0SXNTdWJy
ZXNvdXJjZSkKKyAgICAgICAgICAgICwgbV9kb3dubG9hZEFzQmxvYihmYWxzZSkKICAgICAgICAg
ewogICAgICAgICB9CiAKQEAgLTE5NSw2ICsyMDEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIGJvb2wgbV9yZXBvcnRMb2FkVGltaW5nOwogICAgICAgICBib29sIG1fcmVwb3J0UmF3
SGVhZGVyczsKICAgICAgICAgVGFyZ2V0VHlwZSBtX3RhcmdldFR5cGU7CisgICAgICAgIGJvb2wg
bV9kb3dubG9hZEFzQmxvYjsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgYXNSZXNvdXJjZVJlcXVlc3QoKSBjb25zdDsKQEAgLTIxOCw2ICsyMjUsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFJlZlB0cjxGb3JtRGF0YT4gbV9odHRwQm9keTsK
ICAgICAgICAgYm9vbCBtX2FsbG93Q29va2llczsKICAgICAgICAgUmVzb3VyY2VSZXF1ZXN0QmFz
ZTo6VGFyZ2V0VHlwZSBtX3RhcmdldFR5cGU7CisgICAgICAgIGJvb2wgbV9kb3dubG9hZEFzQmxv
YjsKICAgICB9OwogICAgIAogICAgIHVuc2lnbmVkIGluaXRpYWxpemVNYXhpbXVtSFRUUENvbm5l
Y3Rpb25Db3VudFBlckhvc3QoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNv
dXJjZVJlc3BvbnNlQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmNwcAkocmV2aXNpb24gNjkzNjYpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNzIsNiArMTcyLDEzIEBAIHZvaWQgUmVzb3VyY2VSZXNwb25zZUJhc2U6OnNldE1pbWVU
eXBlKGMKICAgICBtX21pbWVUeXBlID0gbWltZVR5cGU7IAogfQogCitTdHJpbmcgUmVzb3VyY2VS
ZXNwb25zZUJhc2U6OmV4dHJhY3RNaW1lVHlwZSgpIGNvbnN0Cit7CisgICAgaWYgKGlzSFRUUCgp
KQorICAgICAgICByZXR1cm4gZXh0cmFjdE1JTUVUeXBlRnJvbU1lZGlhVHlwZShodHRwSGVhZGVy
RmllbGQoIkNvbnRlbnQtVHlwZSIpKTsKKyAgICByZXR1cm4gbWltZVR5cGUoKTsKK30KKwogbG9u
ZyBsb25nIFJlc291cmNlUmVzcG9uc2VCYXNlOjpleHBlY3RlZENvbnRlbnRMZW5ndGgoKSBjb25z
dCAKIHsKICAgICBsYXp5SW5pdCgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jl
c291cmNlUmVzcG9uc2VCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmgJKHJldmlzaW9uIDY5MzY2KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTU2LDYgKzU2LDcgQEAgcHVibGljOgogCiAgICAgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSgpIGNv
bnN0OwogICAgIHZvaWQgc2V0TWltZVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CisgICAg
U3RyaW5nIGV4dHJhY3RNaW1lVHlwZSgpIGNvbnN0OwogCiAgICAgbG9uZyBsb25nIGV4cGVjdGVk
Q29udGVudExlbmd0aCgpIGNvbnN0OwogICAgIHZvaWQgc2V0RXhwZWN0ZWRDb250ZW50TGVuZ3Ro
KGxvbmcgbG9uZyBleHBlY3RlZENvbnRlbnRMZW5ndGgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2Nocm9taXVtL1Jlc291cmNlUmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlcXVlc3QuaAkocmV2aXNpb24g
NjkzNjYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vUmVzb3VyY2VSZXF1
ZXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTg0LDYgKzg0LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBpbnQgYXBwQ2FjaGVIb3N0SUQoKSBjb25zdCB7IHJldHVybiBtX2FwcENhY2hl
SG9zdElEOyB9CiAgICAgICAgIHZvaWQgc2V0QXBwQ2FjaGVIb3N0SUQoaW50IGlkKSB7IG1fYXBw
Q2FjaGVIb3N0SUQgPSBpZDsgfQogCisgICAgICAgIGJvb2wgZG93bmxvYWRUb0ZpbGUoKSBjb25z
dCB7IHJldHVybiBkb3dubG9hZEFzQmxvYigpOyB9CisgICAgICAgIHZvaWQgc2V0RG93bmxvYWRU
b0ZpbGUoYm9vbCBkb3dubG9hZCkgeyBzZXREb3dubG9hZEFzQmxvYihkb3dubG9hZCk7IH0KKwog
ICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBSZXNvdXJjZVJlcXVlc3RCYXNlOwog
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vUmVzb3VyY2VSZXNwb25z
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL1Jl
c291cmNlUmVzcG9uc2UuY3BwCShyZXZpc2lvbiA2OTM2NikKKysrIFdlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlc3BvbnNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjgsNiArMjgsMTggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjb25zdCBTdHJpbmcmIFJl
c291cmNlUmVzcG9uc2U6OmRvd25sb2FkRmlsZVBhdGgoKSBjb25zdAoreworICAgIGxhenlJbml0
KCk7CisgICAgcmV0dXJuIG1fZG93bmxvYWRGaWxlUGF0aDsKK30KKwordm9pZCBSZXNvdXJjZVJl
c3BvbnNlOjpzZXREb3dubG9hZEZpbGVQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBs
YXp5SW5pdCgpOworICAgIG1fZG93bmxvYWRGaWxlUGF0aCA9IHBhdGg7Cit9CisKIFBhc3NPd25Q
dHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0YT4gUmVzb3VyY2VSZXNwb25zZTo6ZG9Q
bGF0Zm9ybUNvcHlEYXRhKFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0
YT4gZGF0YSkgY29uc3QKIHsKICAgICBkYXRhLT5tX2FwcENhY2hlSUQgPSBtX2FwcENhY2hlSUQ7
CkBAIC0zOSw2ICs1MSw3IEBAIFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNl
RGEKICAgICBkYXRhLT5tX3dhc0FsdGVybmF0ZVByb3RvY29sQXZhaWxhYmxlID0gbV93YXNBbHRl
cm5hdGVQcm90b2NvbEF2YWlsYWJsZTsKICAgICBkYXRhLT5tX3dhc0ZldGNoZWRWaWFQcm94eSA9
IG1fd2FzRmV0Y2hlZFZpYVByb3h5OwogICAgIGRhdGEtPm1fcmVzcG9uc2VUaW1lID0gbV9yZXNw
b25zZVRpbWU7CisgICAgZGF0YS0+bV9kb3dubG9hZEZpbGVQYXRoID0gbV9kb3dubG9hZEZpbGVQ
YXRoOwogICAgIHJldHVybiBkYXRhOwogfQogCkBAIC01Myw2ICs2Niw3IEBAIHZvaWQgUmVzb3Vy
Y2VSZXNwb25zZTo6ZG9QbGF0Zm9ybUFkb3B0KFAKICAgICBtX3dhc0FsdGVybmF0ZVByb3RvY29s
QXZhaWxhYmxlID0gZGF0YS0+bV93YXNBbHRlcm5hdGVQcm90b2NvbEF2YWlsYWJsZTsKICAgICBt
X3dhc0ZldGNoZWRWaWFQcm94eSA9IGRhdGEtPm1fd2FzRmV0Y2hlZFZpYVByb3h5OwogICAgIG1f
cmVzcG9uc2VUaW1lID0gZGF0YS0+bV9yZXNwb25zZVRpbWU7CisgICAgbV9kb3dubG9hZEZpbGVQ
YXRoID0gZGF0YS0+bV9kb3dubG9hZEZpbGVQYXRoOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vUmVzb3VyY2VSZXNw
b25zZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9S
ZXNvdXJjZVJlc3BvbnNlLmgJKHJldmlzaW9uIDY5MzY2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2Nocm9taXVtL1Jlc291cmNlUmVzcG9uc2UuaAkod29ya2luZyBjb3B5KQpAQCAtOTYs
NiArOTYsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBkb3VibGUgcmVzcG9uc2VU
aW1lKCkgY29uc3QgeyByZXR1cm4gbV9yZXNwb25zZVRpbWU7IH0KICAgICAgICAgdm9pZCBzZXRS
ZXNwb25zZVRpbWUoZG91YmxlIHJlc3BvbnNlVGltZSkgeyBtX3Jlc3BvbnNlVGltZSA9IHJlc3Bv
bnNlVGltZTsgfQogCisgICAgICAgIC8vIEluZGljYXRlcyB0aGUgbG9jYXRpb24gb2YgYSBkb3du
bG9hZGVkIHJlc3BvbnNlIGlmIHRoZQorICAgICAgICAvLyBSZXNvdXJjZVJlcXVlc3QgaGFkIHRo
ZSBkb3dubG9hZFRvRmlsZS9CbG9iIGZsYWcgc2V0IHRvIHRydWUuCisgICAgICAgIC8vIFRoZSBm
aWxlIHdpbGwgcmVtYWluIHZhbGlkIHVudGlsIHRoZSBSZXNvdXJjZUhhbmRsZSB1c2VkCisgICAg
ICAgIC8vIHRvIHJldHJpZXZlIHRoaXMgZmlsZSBoYXMgYmVlbiBkZWxldGVkLgorICAgICAgICBj
b25zdCBTdHJpbmcmIGRvd25sb2FkRmlsZVBhdGgoKSBjb25zdDsKKyAgICAgICAgdm9pZCBzZXRE
b3dubG9hZEZpbGVQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCk7CisKICAgICBwcml2YXRlOgogICAg
ICAgICBmcmllbmQgY2xhc3MgUmVzb3VyY2VSZXNwb25zZUJhc2U7CiAKQEAgLTE0Myw2ICsxNTAs
OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIFRoZSB0aW1lIGF0IHdoaWNoIHRo
ZSByZXNwb25zZSBoZWFkZXJzIHdlcmUgcmVjZWl2ZWQuICBGb3IgY2FjaGVkCiAgICAgICAgIC8v
IHJlc3BvbnNlcywgdGhpcyB0aW1lIGNvdWxkIGJlICJmYXIiIGluIHRoZSBwYXN0LgogICAgICAg
ICBkb3VibGUgbV9yZXNwb25zZVRpbWU7CisKKyAgICAgICAgLy8gVGhlIHJlc3VsdGluZyBkb3du
bG9hZGVkIGZpbGUgcGF0aCBpbiB0aGUgcmVxdWVzdC5kb3dubG9hZFRvRmlsZSBjYXNlLgorICAg
ICAgICBTdHJpbmcgbV9kb3dubG9hZEZpbGVQYXRoOwogICAgIH07CiAKICAgICBzdHJ1Y3QgQ3Jv
c3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0YSA6IHB1YmxpYyBDcm9zc1RocmVhZFJlc291cmNl
UmVzcG9uc2VEYXRhQmFzZSB7CkBAIC0xNTUsNiArMTY1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBib29sIG1fd2FzQWx0ZXJuYXRlUHJvdG9jb2xBdmFpbGFibGU7CiAgICAgICAg
IGJvb2wgbV93YXNGZXRjaGVkVmlhUHJveHk7CiAgICAgICAgIGRvdWJsZSBtX3Jlc3BvbnNlVGlt
ZTsKKyAgICAgICAgU3RyaW5nIG1fZG93bmxvYWRGaWxlUGF0aDsKICAgICB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCShyZXZpc2lvbiA2OTM2
NikKKysrIFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTc1LDYgKzU3NSwxMCBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpjcmVhdGVSZXF1ZXN0KEV4Y2Vw
CiAgICAgaWYgKG1fcmVxdWVzdEhlYWRlcnMuc2l6ZSgpID4gMCkKICAgICAgICAgcmVxdWVzdC5h
ZGRIVFRQSGVhZGVyRmllbGRzKG1fcmVxdWVzdEhlYWRlcnMpOwogCisjaWYgRU5BQkxFKFhIUl9S
RVNQT05TRV9CTE9CKQorICAgIHJlcXVlc3Quc2V0RG93bmxvYWRBc0Jsb2IobV9hc0Jsb2IpOwor
I2VuZGlmCisKICAgICBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyBvcHRpb25zOwogICAgIG9wdGlv
bnMuc2VuZExvYWRDYWxsYmFja3MgPSB0cnVlOwogICAgIG9wdGlvbnMuc25pZmZDb250ZW50ID0g
ZmFsc2U7CkBAIC04NTQsMTUgKzg1OCwxMCBAQCBTdHJpbmcgWE1MSHR0cFJlcXVlc3Q6OmdldFJl
c3BvbnNlSGVhZGVyCiBTdHJpbmcgWE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlTUlNRVR5cGUoKSBj
b25zdAogewogICAgIFN0cmluZyBtaW1lVHlwZSA9IGV4dHJhY3RNSU1FVHlwZUZyb21NZWRpYVR5
cGUobV9taW1lVHlwZU92ZXJyaWRlKTsKLSAgICBpZiAobWltZVR5cGUuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIGlmIChtX3Jlc3BvbnNlLmlzSFRUUCgpKQotICAgICAgICAgICAgbWltZVR5cGUgPSBl
eHRyYWN0TUlNRVR5cGVGcm9tTWVkaWFUeXBlKG1fcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKCJD
b250ZW50LVR5cGUiKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1pbWVUeXBlID0gbV9y
ZXNwb25zZS5taW1lVHlwZSgpOwotICAgIH0KKyAgICBpZiAobWltZVR5cGUuaXNFbXB0eSgpKQor
ICAgICAgICBtaW1lVHlwZSA9IG1fcmVzcG9uc2UuZXh0cmFjdE1pbWVUeXBlKCk7CiAgICAgaWYg
KG1pbWVUeXBlLmlzRW1wdHkoKSkKICAgICAgICAgbWltZVR5cGUgPSAidGV4dC94bWwiOwotCiAg
ICAgcmV0dXJuIG1pbWVUeXBlOwogfQogCkBAIC05NDQsMTAgKzk0Myw2IEBAIHZvaWQgWE1MSHR0
cFJlcXVlc3Q6OmRpZEZpbmlzaExvYWRpbmcodW4KICAgICBpZiAobV9kZWNvZGVyKQogICAgICAg
ICBtX3Jlc3BvbnNlVGV4dCArPSBtX2RlY29kZXItPmZsdXNoKCk7CiAKLSNpZiBFTkFCTEUoWEhS
X1JFU1BPTlNFX0JMT0IpCi0gICAgLy8gRklYTUU6IFNldCBtX3Jlc3BvbnNlQmxvYiB0byBzb21l
dGhpbmcgaGVyZSBpbiB0aGUgbV9hc0Jsb2IgY2FzZS4KLSNlbmRpZgotCiAjaWYgRU5BQkxFKElO
U1BFQ1RPUikKICAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yID0gc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkpCiAgICAgICAgIGluc3Bl
Y3Rvci0+cmVzb3VyY2VSZXRyaWV2ZWRCeVhNTEh0dHBSZXF1ZXN0KGlkZW50aWZpZXIsIG1fcmVz
cG9uc2VUZXh0LCBtX3VybCwgbV9sYXN0U2VuZFVSTCwgbV9sYXN0U2VuZExpbmVOdW1iZXIpOwpA
QCAtOTYzLDYgKzk1OCwxOSBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRGaW5pc2hMb2FkaW5n
KHVuCiAgICAgICAgIGRyb3BQcm90ZWN0aW9uKCk7CiB9CiAKK3ZvaWQgWE1MSHR0cFJlcXVlc3Q6
OmRpZEZpbmlzaExvYWRpbmdCbG9iKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgQmxvYiogYmxv
YikKK3sKKyNpZiBFTkFCTEUoWEhSX1JFU1BPTlNFX0JMT0IpCisgICAgaWYgKCFtX2Vycm9yKQor
ICAgICAgICBtX3Jlc3BvbnNlQmxvYiA9IGJsb2I7CisgICAgZGlkRmluaXNoTG9hZGluZyhpZGVu
dGlmaWVyKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGlkZW50aWZpZXIpOworICAgIFVOVVNF
RF9QQVJBTShibG9iKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorfQorCiB2
b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRTZW5kRGF0YSh1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNT
ZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KQogewogICAgIGlmICgh
bV91cGxvYWQpCkBAIC05OTEsNyArOTk5LDIzIEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpZFJl
Y2VpdmVBdXRoZW50aWMKICAgICBtX3Jlc3BvbnNlID0gZmFpbHVyZVJlc3BvbnNlOwogfQogCi12
b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQg
bGVuKQordm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0
YSwgaW50IGxlbmd0aCkKK3sKKyAgICBkaWRSZWNlaXZlRGF0YUNvbW1vbihSZXNwb25zZUFzRGF0
YSwgZGF0YSwgbGVuZ3RoKTsKK30KKwordm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlkUmVjZWl2ZUJs
b2JEYXRhKGludCBsZW5ndGgpCit7CisjaWYgRU5BQkxFKFhIUl9SRVNQT05TRV9CTE9CKQorICAg
IEFTU0VSVChsZW5ndGggPj0gMCk7CisgICAgZGlkUmVjZWl2ZURhdGFDb21tb24oUmVzcG9uc2VB
c0Jsb2IsIDAsIGxlbmd0aCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShsZW5ndGgpOworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCit9CisKK3ZvaWQgWE1MSHR0cFJlcXVlc3Q6
OmRpZFJlY2VpdmVEYXRhQ29tbW9uKFJlc3BvbnNlQXNNb2RlIHJlc3BvbnNlQXMsIGNvbnN0IGNo
YXIqIGRhdGEsIGludCBsZW5ndGgpCiB7CiAgICAgaWYgKG1fZXJyb3IpCiAgICAgICAgIHJldHVy
bjsKQEAgLTk5OSw3ICsxMDIzLDggQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlkUmVjZWl2ZURh
dGEoY29ucwogICAgIGlmIChtX3N0YXRlIDwgSEVBREVSU19SRUNFSVZFRCkKICAgICAgICAgY2hh
bmdlU3RhdGUoSEVBREVSU19SRUNFSVZFRCk7CiAKLSAgICBpZiAoIW1fZGVjb2RlcikgeworICAg
IGlmIChkYXRhICYmICFtX2RlY29kZXIpIHsKKyAgICAgICAgQVNTRVJUKHJlc3BvbnNlQXMgPT0g
UmVzcG9uc2VBc0RhdGEpOwogICAgICAgICBpZiAoIW1fcmVzcG9uc2VFbmNvZGluZy5pc0VtcHR5
KCkpCiAgICAgICAgICAgICBtX2RlY29kZXIgPSBUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUo
InRleHQvcGxhaW4iLCBtX3Jlc3BvbnNlRW5jb2RpbmcpOwogICAgICAgICAvLyBhbGxvdyBUZXh0
UmVzb3VyY2VEZWNvZGVyIHRvIGxvb2sgaW5zaWRlIHRoZSBtX3Jlc3BvbnNlIGlmIGl0J3MgWE1M
IG9yIEhUTUwKQEAgLTEwMTMsMTcgKzEwMzgsMTkgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlk
UmVjZWl2ZURhdGEoY29ucwogICAgICAgICAgICAgbV9kZWNvZGVyID0gVGV4dFJlc291cmNlRGVj
b2Rlcjo6Y3JlYXRlKCJ0ZXh0L3BsYWluIiwgIlVURi04Iik7CiAgICAgfQogCi0gICAgaWYgKCFs
ZW4pCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAocmVzcG9uc2VBcyA9PSBSZXNwb25zZUFzRGF0
YSkgeworICAgICAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybjsKIAotICAgIGlm
IChsZW4gPT0gLTEpCi0gICAgICAgIGxlbiA9IHN0cmxlbihkYXRhKTsKKyAgICAgICAgaWYgKGxl
bmd0aCA9PSAtMSkgCisgICAgICAgICAgICBsZW5ndGggPSBzdHJsZW4oZGF0YSk7CiAKLSAgICBt
X3Jlc3BvbnNlVGV4dCArPSBtX2RlY29kZXItPmRlY29kZShkYXRhLCBsZW4pOworICAgICAgICBt
X3Jlc3BvbnNlVGV4dCArPSBtX2RlY29kZXItPmRlY29kZShkYXRhLCBsZW5ndGgpOworICAgIH0K
IAogICAgIGlmICghbV9lcnJvcikgewogICAgICAgICBsb25nIGxvbmcgZXhwZWN0ZWRMZW5ndGgg
PSBtX3Jlc3BvbnNlLmV4cGVjdGVkQ29udGVudExlbmd0aCgpOwotICAgICAgICBtX3JlY2VpdmVk
TGVuZ3RoICs9IGxlbjsKKyAgICAgICAgbV9yZWNlaXZlZExlbmd0aCArPSBsZW5ndGg7CiAKICAg
ICAgICAgaWYgKG1fYXN5bmMpIHsKICAgICAgICAgICAgIGJvb2wgbGVuZ3RoQ29tcHV0YWJsZSA9
IGV4cGVjdGVkTGVuZ3RoICYmIG1fcmVjZWl2ZWRMZW5ndGggPD0gZXhwZWN0ZWRMZW5ndGg7Cklu
ZGV4OiBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
eG1sL1hNTEh0dHBSZXF1ZXN0LmgJKHJldmlzaW9uIDY5MzY2KQorKysgV2ViQ29yZS94bWwvWE1M
SHR0cFJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTExLDYgKzExMSwxMSBAQCBwdWJsaWM6
CiAgICAgdXNpbmcgUmVmQ291bnRlZDxYTUxIdHRwUmVxdWVzdD46OmRlcmVmOwogCiBwcml2YXRl
OgorICAgIGVudW0gUmVzcG9uc2VBc01vZGUgIHsKKyAgICAgICAgUmVzcG9uc2VBc0RhdGEsCisg
ICAgICAgIFJlc3BvbnNlQXNCbG9iCisgICAgfTsKKwogICAgIFhNTEh0dHBSZXF1ZXN0KFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqKTsKIAogICAgIHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgp
IHsgcmVmKCk7IH0KQEAgLTEyNywxMSArMTMyLDE1IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2
b2lkIGRpZFNlbmREYXRhKHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxv
bmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZl
UmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRS
ZWNlaXZlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoUmVjZWl2ZWQpOworICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWNlaXZlQmxvYkRhdGEoaW50IGxlbmd0aFJlY2VpdmVkKTsKICAgICB2
aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpOwor
ICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nQmxvYih1bnNpZ25lZCBsb25nIGlkZW50
aWZpZXIsIEJsb2IqKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVy
cm9yJik7CiAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWxSZWRpcmVjdENoZWNrKCk7CiAgICAgdmly
dHVhbCB2b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNhbmNlbGxhdGlvbihjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJik7CiAKKyAgICB2b2lkIGRpZFJlY2VpdmVEYXRhQ29tbW9uKFJlc3BvbnNl
QXNNb2RlLCBjb25zdCBjaGFyKiwgaW50IGxlbmd0aFJlY2VpdmVkKTsKKwogICAgIFN0cmluZyBy
ZXNwb25zZU1JTUVUeXBlKCkgY29uc3Q7CiAgICAgYm9vbCByZXNwb25zZUlzWE1MKCkgY29uc3Q7
CiAKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNjkzNjYpCisrKyBXZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTAtMTAtMDUgIE1p
Y2hhZWwgTm9yZG1hbiAgPG1pY2hhZWxuQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGdldHRpbmcgdGhl
IHJlc3VsdCBvZiBhIHJlc291cmNlIHJlcXVlc3QgYXMgYSBibG9iLgorICAgICAgICBJbiBDaHJv
bWUsIHRoaXMgZmVhdHVyZSBpcyBpbXBsZW1lbnRlZCBpbiB0ZXJtcyBvZiB0aGUgJ2Rvd25sb2Fk
VG9GaWxlJworICAgICAgICBmZWF0dXJlIG9mIHRoZSBuZXR3b3JrIHN0YWNrLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ3MjIKKworICAgICAgICAq
IHNyYy9SZXNvdXJjZUhhbmRsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRs
ZUludGVybmFsOjpSZXNvdXJjZUhhbmRsZUludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlSGFuZGxlSW50ZXJuYWw6OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUhhbmRsZUludGVybmFsOjpkaWREb3dubG9hZERhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6ZGlkRmluaXNoTG9hZGluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUludGVybmFsOjpkZXRlcm1pbmVDb250ZW50VHlw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUludGVybmFsOjpsb2FkUmVzb3Vy
Y2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpsb2Fk
UmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxl
Ojpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5QXNCbG9iKToKKyAgICAgICAgKiBzcmMvV2ViVVJM
UmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlcXVlc3RQcml2YXRlSW1wbDo6
V2ViVVJMUmVxdWVzdFByaXZhdGVJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVxdWVz
dDo6ZG93bmxvYWRUb0ZpbGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXF1ZXN0OjpzZXRE
b3dubG9hZFRvRmlsZSk6CisgICAgICAgICogc3JjL1dlYlVSTFJlcXVlc3RQcml2YXRlLmg6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlVSTFJlcXVlc3RQcml2YXRlOjpXZWJVUkxSZXF1ZXN0UHJpdmF0
ZSk6CisgICAgICAgICogc3JjL1dlYlVSTFJlc3BvbnNlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViVVJMUmVzcG9uc2VQcml2YXRlSW1wbDo6V2ViVVJMUmVzcG9uc2VQcml2YXRlSW1wbCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlVSTFJlc3BvbnNlOjpkb3dubG9hZEZpbGVQYXRoKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVVJMUmVzcG9uc2U6OnNldERvd25sb2FkRmlsZVBhdGgpOgorICAgICAg
ICAqIHNyYy9XZWJVUkxSZXNwb25zZVByaXZhdGUuaDoKKwogMjAxMC0xMC0wNyAgWmhlbnlhbyBN
byAgPHptb0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRvbnkgQ2hhbmcuCklu
ZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1Jlc291cmNlSGFuZGxlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvY2hyb21pdW0vc3JjL1Jlc291cmNlSGFuZGxlLmNwcAkocmV2aXNpb24gNjkzNjYp
CisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1Jlc291cmNlSGFuZGxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlc291
cmNlSGFuZGxlLmgiCiAKKyNpbmNsdWRlICJCbG9iLmgiCiAjaW5jbHVkZSAiQ2hyb21pdW1Ccmlk
Z2UuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUNsaWVudC5oIgogI2luY2x1ZGUgIlJlc291
cmNlUmVxdWVzdC5oIgpAQCAtNTgsNiArNTksNyBAQCBwdWJsaWM6CiAgICAgICAgIDogbV9yZXF1
ZXN0KHJlcXVlc3QpCiAgICAgICAgICwgbV9vd25lcigwKQogICAgICAgICAsIG1fY2xpZW50KGNs
aWVudCkKKyAgICAgICAgLCBtX2Rvd25sb2FkZWRGaWxlTGVuZ3RoKDApCiAgICAgICAgICwgbV9z
dGF0ZShDb25uZWN0aW9uU3RhdGVOZXcpCiAgICAgewogICAgIH0KQEAgLTczLDEwICs3NSwxNCBA
QCBwdWJsaWM6CiAgICAgICAgIFdlYlVSTExvYWRlciosIHVuc2lnbmVkIGxvbmcgbG9uZyBieXRl
c1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpOwogICAgIHZpcnR1
YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoV2ViVVJMTG9hZGVyKiwgY29uc3QgV2ViVVJMUmVz
cG9uc2UmKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoV2ViVVJMTG9hZGVyKiwg
Y29uc3QgY2hhciogZGF0YSwgaW50IGRhdGFMZW5ndGgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRE
b3dubG9hZERhdGEoV2ViVVJMTG9hZGVyKiwgaW50IGRhdGFMZW5ndGgpOwogICAgIHZpcnR1YWwg
dm9pZCBkaWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEoV2ViVVJMTG9hZGVyKiwgY29uc3QgY2hhciog
ZGF0YSwgaW50IGRhdGFMZW5ndGgpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5n
KFdlYlVSTExvYWRlciosIGRvdWJsZSBmaW5pc2hUaW1lKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlk
RmFpbChXZWJVUkxMb2FkZXIqLCBjb25zdCBXZWJVUkxFcnJvciYpOwogCisgICAgc3RhdGljIFBh
c3NSZWZQdHI8QmxvYj4gbG9hZFJlc291cmNlU3luY2hyb25vdXNseSgKKyAgICAgICAgTmV0d29y
a2luZ0NvbnRleHQqLCAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHMs
IFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+Kik7CisKICAg
ICBlbnVtIENvbm5lY3Rpb25TdGF0ZSB7CiAgICAgICAgIENvbm5lY3Rpb25TdGF0ZU5ldywKICAg
ICAgICAgQ29ubmVjdGlvblN0YXRlU3RhcnRlZCwKQEAgLTkxLDYgKzk3LDkgQEAgcHVibGljOgog
ICAgIFJlc291cmNlSGFuZGxlKiBtX293bmVyOwogICAgIFJlc291cmNlSGFuZGxlQ2xpZW50KiBt
X2NsaWVudDsKICAgICBPd25QdHI8V2ViVVJMTG9hZGVyPiBtX2xvYWRlcjsKKyAgICBTdHJpbmcg
bV9kb3dubG9hZGVkRmlsZVBhdGg7CisgICAgU3RyaW5nIG1fZG93bmxvYWRlZEZpbGVDb250ZW50
VHlwZTsKKyAgICBsb25nIGxvbmcgbV9kb3dubG9hZGVkRmlsZUxlbmd0aDsKIAogICAgIC8vIFVz
ZWQgZm9yIHNhbml0eSBjaGVja2luZyB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgZXhwZXJpZW5jZSBp
bGxlZ2FsIHN0YXRlCiAgICAgLy8gdHJhbnNpdGlvbnMuCkBAIC0xNTYsNiArMTY1LDEwIEBAIHZv
aWQgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6ZGlkUmVjZWl2ZVIKICAgICBpZiAoIWlzTXVsdGlw
YXJ0ICYmICFpc1ZhbGlkU3RhdGVUcmFuc2l0aW9uKQogICAgICAgICBDUkFTSCgpOwogICAgIG1f
c3RhdGUgPSBDb25uZWN0aW9uU3RhdGVSZWNlaXZlZFJlc3BvbnNlOworICAgIGlmIChtX3JlcXVl
c3QuZG93bmxvYWRUb0ZpbGUoKSkgeworICAgICAgICBtX2Rvd25sb2FkZWRGaWxlUGF0aCA9IHJl
c3BvbnNlLnRvUmVzb3VyY2VSZXNwb25zZSgpLmRvd25sb2FkRmlsZVBhdGgoKTsKKyAgICAgICAg
bV9kb3dubG9hZGVkRmlsZUNvbnRlbnRUeXBlID0gcmVzcG9uc2UudG9SZXNvdXJjZVJlc3BvbnNl
KCkuZXh0cmFjdE1pbWVUeXBlKCk7CisgICAgfQogICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlUmVz
cG9uc2UobV9vd25lciwgcmVzcG9uc2UudG9SZXNvdXJjZVJlc3BvbnNlKCkpOwogfQogCkBAIC0x
NzMsNiArMTg2LDE3IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6ZGlkUmVjZWl2ZUQK
ICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZURhdGEobV9vd25lciwgZGF0YSwgZGF0YUxlbmd0aCwg
ZGF0YUxlbmd0aCk7CiB9CiAKK3ZvaWQgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6ZGlkRG93bmxv
YWREYXRhKFdlYlVSTExvYWRlciosIGludCBkYXRhTGVuZ3RoKQoreworICAgIEFTU0VSVChtX2Ns
aWVudCk7CisgICAgQVNTRVJUKG1fcmVxdWVzdC5kb3dubG9hZFRvRmlsZSgpKTsKKyAgICBpZiAo
bV9zdGF0ZSAhPSBDb25uZWN0aW9uU3RhdGVSZWNlaXZlZFJlc3BvbnNlICYmIG1fc3RhdGUgIT0g
Q29ubmVjdGlvblN0YXRlUmVjZWl2aW5nRGF0YSkKKyAgICAgICAgQ1JBU0goKTsKKyAgICBtX3N0
YXRlID0gQ29ubmVjdGlvblN0YXRlUmVjZWl2aW5nRGF0YTsKKyAgICBtX2Rvd25sb2FkZWRGaWxl
TGVuZ3RoICs9IGRhdGFMZW5ndGg7CisgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVCbG9iRGF0YSht
X293bmVyLCBkYXRhTGVuZ3RoKTsKK30KKwogdm9pZCBSZXNvdXJjZUhhbmRsZUludGVybmFsOjpk
aWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEoV2ViVVJMTG9hZGVyKiwgY29uc3QgY2hhciogZGF0YSwg
aW50IGRhdGFMZW5ndGgpCiB7CiAgICAgQVNTRVJUKG1fY2xpZW50KTsKQEAgLTE4OCw3ICsyMTIs
MTggQEAgdm9pZCBSZXNvdXJjZUhhbmRsZUludGVybmFsOjpkaWRGaW5pc2hMbwogICAgIGlmICht
X3N0YXRlICE9IENvbm5lY3Rpb25TdGF0ZVJlY2VpdmVkUmVzcG9uc2UgJiYgbV9zdGF0ZSAhPSBD
b25uZWN0aW9uU3RhdGVSZWNlaXZpbmdEYXRhKQogICAgICAgICBDUkFTSCgpOwogICAgIG1fc3Rh
dGUgPSBDb25uZWN0aW9uU3RhdGVGaW5pc2hlZExvYWRpbmc7Ci0gICAgbV9jbGllbnQtPmRpZEZp
bmlzaExvYWRpbmcobV9vd25lciwgZmluaXNoVGltZSk7CisgICAgaWYgKG1fcmVxdWVzdC5kb3du
bG9hZEFzQmxvYigpKSB7CisgICAgICAgIEFTU0VSVChtX3JlcXVlc3QuZG93bmxvYWRUb0ZpbGUo
KSk7IC8vIFRvRmlsZSBhbmQgQXNCbG9iIGFyZSBvbmUgYW5kIHRoZSBzYW1lIGZvciBub3cuCisg
ICAgICAgIFJlZlB0cjxCbG9iPiBkYXRhQXNCbG9iOworICAgICAgICBpZiAoIW1fZG93bmxvYWRl
ZEZpbGVQYXRoLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgT3duUHRyPEJsb2JEYXRhPiBibG9i
RGF0YSA9IEJsb2JEYXRhOjpjcmVhdGUoKTsKKyAgICAgICAgICAgIGJsb2JEYXRhLT5zZXRDb250
ZW50VHlwZShtX2Rvd25sb2FkZWRGaWxlQ29udGVudFR5cGUpOworICAgICAgICAgICAgYmxvYkRh
dGEtPmFwcGVuZEZpbGUobV9kb3dubG9hZGVkRmlsZVBhdGgpOworICAgICAgICAgICAgZGF0YUFz
QmxvYiA9IEJsb2I6OmNyZWF0ZShibG9iRGF0YS5yZWxlYXNlKCksIG1fZG93bmxvYWRlZEZpbGVM
ZW5ndGgpOworICAgICAgICB9CisgICAgICAgIG1fY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nQmxv
YihtX293bmVyLCBmaW5pc2hUaW1lLCBkYXRhQXNCbG9iLmdldCgpKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgbV9jbGllbnQtPmRpZEZpbmlzaExvYWRpbmcobV9vd25lciwgZmluaXNoVGltZSk7CiB9
CiAKIHZvaWQgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6ZGlkRmFpbChXZWJVUkxMb2FkZXIqLCBj
b25zdCBXZWJVUkxFcnJvciYgZXJyb3IpCkBAIC0xOTgsNiArMjMzLDM5IEBAIHZvaWQgUmVzb3Vy
Y2VIYW5kbGVJbnRlcm5hbDo6ZGlkRmFpbChXZWIKICAgICBtX2NsaWVudC0+ZGlkRmFpbChtX293
bmVyLCBlcnJvcik7CiB9CiAKKy8vIHN0YXRpYworUGFzc1JlZlB0cjxCbG9iPiBSZXNvdXJjZUhh
bmRsZUludGVybmFsOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KAorICAgIE5ldHdvcmtpbmdD
b250ZXh0KiBjb250ZXh0LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENy
ZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzLCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3Vy
Y2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiogZGF0YSkKK3sKKyAgICBPd25QdHI8
V2ViVVJMTG9hZGVyPiBsb2FkZXIod2ViS2l0Q2xpZW50KCktPmNyZWF0ZVVSTExvYWRlcigpKTsK
KyAgICBBU1NFUlQobG9hZGVyLmdldCgpKTsKKworICAgIFdyYXBwZWRSZXNvdXJjZVJlcXVlc3Qg
cmVxdWVzdEluKHJlcXVlc3QpOworICAgIHJlcXVlc3RJbi5zZXRBbGxvd1N0b3JlZENyZWRlbnRp
YWxzKHN0b3JlZENyZWRlbnRpYWxzID09IEFsbG93U3RvcmVkQ3JlZGVudGlhbHMpOworICAgIFdy
YXBwZWRSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlT3V0KHJlc3BvbnNlKTsKKyAgICBXZWJVUkxF
cnJvciBlcnJvck91dDsKKyAgICBXZWJEYXRhIGRhdGFPdXQ7CisgICAgUmVmUHRyPEJsb2I+IGRh
dGFBc0Jsb2I7CisgICAgbG9uZyBsb25nIGxlbmd0aE91dCA9IDA7CisKKyAgICAvLyBGSVhNRTog
TmVlZCBhIHdheSB0byBnZXQgdGhlIGxlbmd0aE91dCBpbiB0aGUgYXNGaWxlIGNhc2UuCisgICAg
bG9hZGVyLT5sb2FkU3luY2hyb25vdXNseShyZXF1ZXN0SW4sIHJlc3BvbnNlT3V0LCBlcnJvck91
dCwgZGF0YU91dCk7CisKKyAgICBlcnJvciA9IGVycm9yT3V0OworICAgIGlmICghcmVxdWVzdC5k
b3dubG9hZEFzQmxvYigpKSB7CisgICAgICAgIEFTU0VSVChkYXRhKTsKKyAgICAgICAgZGF0YS0+
Y2xlYXIoKTsKKyAgICAgICAgZGF0YS0+YXBwZW5kKGRhdGFPdXQuZGF0YSgpLCBkYXRhT3V0LnNp
emUoKSk7CisgICAgfSBlbHNlIGlmICghcmVzcG9uc2UuZG93bmxvYWRGaWxlUGF0aCgpLmlzRW1w
dHkoKSkgeworICAgICAgICBPd25QdHI8QmxvYkRhdGE+IGJsb2JEYXRhID0gQmxvYkRhdGE6OmNy
ZWF0ZSgpOworICAgICAgICBibG9iRGF0YS0+c2V0Q29udGVudFR5cGUocmVzcG9uc2UuZXh0cmFj
dE1pbWVUeXBlKCkpKTsKKyAgICAgICAgYmxvYkRhdGEtPmFwcGVuZEZpbGUocmVzcG9uc2UuZG93
bmxvYWRGaWxlUGF0aCgpKTsKKyAgICAgICAgZGF0YUFzQmxvYiA9IEJsb2I6OmNyZWF0ZShibG9i
RGF0YS5yZWxlYXNlKCksIGxlbmd0aE91dCk7CisgICAgfQorICAgIHJldHVybiBkYXRhQXNCbG9i
OworfQorCisKIC8vIFJlc291cmNlSGFuZGxlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogUmVzb3VyY2VIYW5kbGU6OlJlc291
cmNlSGFuZGxlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwKQEAgLTI5NSwyMCArMzYz
LDIwIEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm8KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VSZXNwb25zZSYg
cmVzcG9uc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFZlY3RvcjxjaGFyPiYgZGF0YSkKIHsKLSAgICBPd25QdHI8V2ViVVJMTG9hZGVyPiBsb2FkZXIo
d2ViS2l0Q2xpZW50KCktPmNyZWF0ZVVSTExvYWRlcigpKTsKLSAgICBBU1NFUlQobG9hZGVyLmdl
dCgpKTsKLQotICAgIFdyYXBwZWRSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdEluKHJlcXVlc3QpOwot
ICAgIHJlcXVlc3RJbi5zZXRBbGxvd1N0b3JlZENyZWRlbnRpYWxzKHN0b3JlZENyZWRlbnRpYWxz
ID09IEFsbG93U3RvcmVkQ3JlZGVudGlhbHMpOwotICAgIFdyYXBwZWRSZXNvdXJjZVJlc3BvbnNl
IHJlc3BvbnNlT3V0KHJlc3BvbnNlKTsKLSAgICBXZWJVUkxFcnJvciBlcnJvck91dDsKLSAgICBX
ZWJEYXRhIGRhdGFPdXQ7Ci0KLSAgICBsb2FkZXItPmxvYWRTeW5jaHJvbm91c2x5KHJlcXVlc3RJ
biwgcmVzcG9uc2VPdXQsIGVycm9yT3V0LCBkYXRhT3V0KTsKKyAgICBBU1NFUlQoIXJlcXVlc3Qu
ZG93bmxvYWRBc0Jsb2IoKSk7CisgICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6bG9hZFJlc291
cmNlU3luY2hyb25vdXNseShjb250ZXh0LCByZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFscywgZXJy
b3IsIHJlc3BvbnNlLCAmZGF0YSk7Cit9CiAKLSAgICBlcnJvciA9IGVycm9yT3V0OwotICAgIGRh
dGEuY2xlYXIoKTsKLSAgICBkYXRhLmFwcGVuZChkYXRhT3V0LmRhdGEoKSwgZGF0YU91dC5zaXpl
KCkpOworLy8gc3RhdGljCitQYXNzUmVmUHRyPEJsb2I+IFJlc291cmNlSGFuZGxlOjpsb2FkUmVz
b3VyY2VTeW5jaHJvbm91c2x5QXNCbG9iKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VFcnJvciYgZXJyb3IsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlKQoreworICAgIEFTU0VSVChyZXF1ZXN0LmRvd25sb2FkQXNCbG9iKCkpOwor
ICAgIHJldHVybiBSZXNvdXJjZUhhbmRsZUludGVybmFsOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91
c2x5KGNvbnRleHQsIHJlcXVlc3QsIHN0b3JlZENyZWRlbnRpYWxzLCBlcnJvciwgcmVzcG9uc2Us
IDApOwogfQogCiAvLyBzdGF0aWMKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVx
dWVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXF1ZXN0
LmNwcAkocmV2aXNpb24gNjkzNjYpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlVSTFJlcXVl
c3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw2IEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIG1fcmVzb3VyY2VSZXF1ZXN0ID0gJm1fcmVzb3VyY2VSZXF1ZXN0QWxsb2NhdGlvbjsK
ICAgICAgICAgbV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzID0gcC0+bV9hbGxvd1N0b3JlZENyZWRl
bnRpYWxzOwotICAgICAgICBtX2Rvd25sb2FkVG9GaWxlID0gcC0+bV9kb3dubG9hZFRvRmlsZTsK
ICAgICB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlzcG9zZSgpIHsgZGVsZXRlIHRoaXM7IH0KQEAg
LTI1OSwxMiArMjU4LDEyIEBAIHZvaWQgV2ViVVJMUmVxdWVzdDo6c2V0QXBwQ2FjaGVIb3N0SUQo
aW4KIAogYm9vbCBXZWJVUkxSZXF1ZXN0Ojpkb3dubG9hZFRvRmlsZSgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG1fcHJpdmF0ZS0+bV9kb3dubG9hZFRvRmlsZTsKKyAgICByZXR1cm4gbV9wcml2YXRl
LT5tX3Jlc291cmNlUmVxdWVzdC0+ZG93bmxvYWRUb0ZpbGUoKTsKIH0KIAogdm9pZCBXZWJVUkxS
ZXF1ZXN0OjpzZXREb3dubG9hZFRvRmlsZShib29sIGRvd25sb2FkVG9GaWxlKQogewotICAgIG1f
cHJpdmF0ZS0+bV9kb3dubG9hZFRvRmlsZSA9IGRvd25sb2FkVG9GaWxlOworICAgIG1fcHJpdmF0
ZS0+bV9yZXNvdXJjZVJlcXVlc3QtPnNldERvd25sb2FkVG9GaWxlKGRvd25sb2FkVG9GaWxlKTsK
IH0KIAogUmVzb3VyY2VSZXF1ZXN0JiBXZWJVUkxSZXF1ZXN0Ojp0b011dGFibGVSZXNvdXJjZVJl
cXVlc3QoKQpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXF1ZXN0UHJpdmF0ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVxdWVzdFByaXZhdGUu
aAkocmV2aXNpb24gNjkzNjYpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlVSTFJlcXVlc3RQ
cml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDE3ICszOSwxMyBAQCBjbGFzcyBXZWJVUkxS
ZXF1ZXN0UHJpdmF0ZSB7CiBwdWJsaWM6CiAgICAgV2ViVVJMUmVxdWVzdFByaXZhdGUoKQogICAg
ICAgICA6IG1fcmVzb3VyY2VSZXF1ZXN0KDApCi0gICAgICAgICwgbV9hbGxvd1N0b3JlZENyZWRl
bnRpYWxzKHRydWUpCi0gICAgICAgICwgbV9kb3dubG9hZFRvRmlsZShmYWxzZSkgeyB9CisgICAg
ICAgICwgbV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzKHRydWUpIHsgfQogCiAgICAgLy8gQ2FsbGVk
IGJ5IFdlYlVSTFJlcXVlc3Qgd2hlbiBpdCBubyBsb25nZXIgbmVlZHMgdGhpcyBvYmplY3QuCiAg
ICAgdmlydHVhbCB2b2lkIGRpc3Bvc2UoKSA9IDA7CiAKICAgICBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QqIG1fcmVzb3VyY2VSZXF1ZXN0OwogICAgIGJvb2wgbV9hbGxvd1N0b3JlZENyZWRlbnRp
YWxzOwotCi0gICAgLy8gRklYTUU6IE1vdmUgdGhpcyB0byBSZXNvdXJjZVJlcXVlc3Qgb25jZSB3
ZSBoYXZlIGFuIGludGVybmFsIGNvbnN1bWVyLgotICAgIGJvb2wgbV9kb3dubG9hZFRvRmlsZTsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJVUkxSZXNwb25zZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJV
UkxSZXNwb25zZS5jcHAJKHJldmlzaW9uIDY5MzY2KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJVUkxSZXNwb25zZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDYgQEAgcHVibGlj
OgogICAgICAgICA6IG1fcmVzb3VyY2VSZXNwb25zZUFsbG9jYXRpb24oKnAtPm1fcmVzb3VyY2VS
ZXNwb25zZSkKICAgICB7CiAgICAgICAgIG1fcmVzb3VyY2VSZXNwb25zZSA9ICZtX3Jlc291cmNl
UmVzcG9uc2VBbGxvY2F0aW9uOwotICAgICAgICBtX2Rvd25sb2FkRmlsZVBhdGggPSBwLT5tX2Rv
d25sb2FkRmlsZVBhdGg7CiAgICAgfQogCiAgICAgdmlydHVhbCB2b2lkIGRpc3Bvc2UoKSB7IGRl
bGV0ZSB0aGlzOyB9CkBAIC0zNzUsMTIgKzM3NCwxMiBAQCB2b2lkIFdlYlVSTFJlc3BvbnNlOjpz
ZXRJc011bHRpcGFydFBheWxvCiAKIFdlYlN0cmluZyBXZWJVUkxSZXNwb25zZTo6ZG93bmxvYWRG
aWxlUGF0aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9kb3dubG9hZEZpbGVQ
YXRoOworICAgIHJldHVybiBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZS0+ZG93bmxvYWRG
aWxlUGF0aCgpOwogfQogCiB2b2lkIFdlYlVSTFJlc3BvbnNlOjpzZXREb3dubG9hZEZpbGVQYXRo
KGNvbnN0IFdlYlN0cmluZyYgZG93bmxvYWRGaWxlUGF0aCkKIHsKLSAgICBtX3ByaXZhdGUtPm1f
ZG93bmxvYWRGaWxlUGF0aCA9IGRvd25sb2FkRmlsZVBhdGg7CisgICAgbV9wcml2YXRlLT5tX3Jl
c291cmNlUmVzcG9uc2UtPnNldERvd25sb2FkRmlsZVBhdGgoZG93bmxvYWRGaWxlUGF0aCk7CiB9
CiAKIHZvaWQgV2ViVVJMUmVzcG9uc2U6OmFzc2lnbihXZWJVUkxSZXNwb25zZVByaXZhdGUqIHAp
CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlVSTFJlc3BvbnNlUHJpdmF0ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVzcG9uc2VQcml2YXRlLmgJKHJl
dmlzaW9uIDY5MzY2KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXNwb25zZVByaXZh
dGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsOSArNDYsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIGRpc3Bvc2UoKSA9IDA7CiAKICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlKiBt
X3Jlc291cmNlUmVzcG9uc2U7Ci0KLSAgICAvLyBGSVhNRTogTW92ZSB0aGlzIHRvIFJlc291cmNl
UmVzcG9uc2Ugb25jZSB3ZSBoYXZlIGFuIGludGVybmFsIGNvbnN1bWVyLgotICAgIFdlYlN0cmlu
ZyBtX2Rvd25sb2FkRmlsZVBhdGg7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70287</attachid>
            <date>2010-10-08 14:30:54 -0700</date>
            <delta_ts>2010-10-08 15:31:23 -0700</delta_ts>
            <desc>downloadAsBlob</desc>
            <filename>downloadAsBlob8.txt</filename>
            <type>text/plain</type>
            <size>68428</size>
            <attacher name="Michael Nordman">michaeln</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTM2NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTA1IEBACisyMDEwLTEwLTA1ICBNaWNoYWVsIE5vcmRtYW4gIDxtaWNoYWVsbkBn
b29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZCBzdXBwb3J0IGZvciBnZXR0aW5nIHRoZSByZXN1bHQgb2YgYSByZXNvdXJjZSByZXF1
ZXN0IGFzIGEgYmxvYiwKKyAgICAgICAgYW5kIHVzZSB0aGF0IGNhcGFiaWxpdHkgaW4gc3VwcG9y
dCBvZiBYbWxIdHRwUmVxdWVzdC5yZXNwb25zZUJsb2IuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDcyMgorICAgICAgICAqIFJlc291cmNlSGFuZGxl
IGtub3dzIGhvdyB0byBkZWxpdmVyIGEgcmVzcG9uc2UgYXMgYSBibG9iLiBUbyBhc2sgaXQgdG8g
ZG8gc28sCisgICAgICAgICAgY2FsbCByZXF1ZXN0LnNldERvd25sb2FkQXNCbG9iKHRydWUpIHBy
aW9yIHRvIHN0YXJ0aW5nIGFuIGFzeW5jIFJlc291cmNlSGFuZGxlLAorICAgICAgICAgIG9yIGNh
bGwgbG9hZFJlc291cmNlU3luY2hyb25vdXNseUFzQmxvYigpIGZvciB0aGUgc3luYyBjYXNlLgor
ICAgICAgICAqIFJlc291cmNlSGFuZGxlQ2xpZW50IGhhcyBuZXcgaW50ZXJmYWNlcyBmb3IgdXNl
IGluIHRoZSBhc3luYyBjYXNlLgorICAgICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVC
bG9iRGF0YShSZXNvdXJjZUhhbmRsZSosIGludCk7ICAvLyBubyBkYXRhIHB0ciBpcyBwcm92aWRl
ZAorICAgICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmdCbG9iKFJlc291cmNl
SGFuZGxlKiwgZG91YmxlIC8qZmluaXNoVGltZSovLCBQYXNzUmVmUHRyPEJsb2I+KTsKKyAgICAg
ICAgKiBUaHJlYWRhYmxlTG9hZGVyIGFsc28ga25vd3MgaG93IHRvIGRlbGl2ZXIgYSByZXNwb25z
ZSBhcyBhIGJsb2I7IGFuZAorICAgICAgICAgIHNpbWlsYXJseSwgdGhlIFRocmVhZGFibGVMb2Fk
ZXJDbGllbnQgaGFzICBncm93biB0d28gbmV3IGNhbGxiYWNrIG1ldGhvZHMuCisgICAgICAgICog
RnJhbWVMb2FkZXIgaGFzIGFsc28gZ3Jvd24gYSBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5QXNC
bG9iKCkgbWV0aG9kLgorICAgICAgICAqIFhtbEh0dHBSZXF1ZXN0IGlzIGEgVGhyZWFkYWJsZUxv
YWRlckNsaWVudCB3aGljaCB1c2VzIHJlcXVlc3Quc2V0RG93bmxvYWRBc0Jsb2IoKSBhbmQKKyAg
ICAgICAgICByZWNlaXZlcyB0aGUgcmVzdWx0IGluIGRpZEZpbmlzaExvYWRpbmdCbG9iKCkuCisg
ICAgICAgICogVGhlcmUncyBhIGZhaXIgYW1vdW50IG9mIG1lY2hhbmljYWwgcGx1bWJpbmcgdGhy
b3VnaG91dCAidGhlIGxvYWRlciIgdG8gZ2V0IHRoZSBjbGllbnQKKyAgICAgICAgICBtZXRob2Qg
Y2FsbHMgZnJvbSB0aGUgcmVzb3VyY2UgaGFuZGxlIGFsbCB0aGUgd2F5IHRocnUgdG8gdGhlIHRo
cmVhZGFibGUgbG9hZGVyIGNsaWVudC4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgZmVh
dHVyZSBpc24ndCBmdW5jdGlvbmFsIHlldCBpbiBhbnkgcG9ydC4KKworICAgICAgICAqIGxvYWRl
ci9Eb2N1bWVudExvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6
c3Vic3RpdHV0ZVJlc291cmNlRGVsaXZlcnlUaW1lckZpcmVkKToKKyAgICAgICAgKiBsb2FkZXIv
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
VGhyZWFkYWJsZUxvYWRlcjo6ZGlkUmVjZWl2ZUJsb2JEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZ0Jsb2IpOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVxdWVzdCk6CisgICAg
ICAgICogbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oOgorICAgICAgICAqIGxvYWRl
ci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZFJl
c291cmNlU3luY2hyb25vdXNseSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9h
ZFJlc291cmNlU3luY2hyb25vdXNseUFzQmxvYik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxv
YWRlcjo6cHJlcGFyZVN5bmNSZXFldXN0KToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIu
aDoKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmdCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nT25lUGFydCk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUxvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUJsb2JEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YUNvbW1vbik6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUxvYWRlcjo6Y3JlYXRlQXN5bmNGaWxlU3RyZWFtKToKKyAgICAgICAgKiBsb2FkZXIvUmVz
b3VyY2VMb2FkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyOjpkaWRSZWNl
aXZlQmxvYkRhdGEpOgorICAgICAgICAqIGxvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUJsb2JEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OlN1YnJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OlN1YnJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nQmxv
Yik6CisgICAgICAgIChXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGlu
Z0NvbW1vbik6CisgICAgICAgICogbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmg6CisgICAgICAg
ICogbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyQ2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpT
dWJyZXNvdXJjZUxvYWRlckNsaWVudDo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6U3VicmVzb3VyY2VMb2FkZXJDbGllbnQ6OmRpZFJlY2VpdmVCbG9iRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlckNsaWVudDo6ZGlkRmluaXNoTG9hZGluZ0Jsb2Ip
OgorICAgICAgICAqIGxvYWRlci9UaHJlYWRhYmxlTG9hZGVyQ2xpZW50Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpUaHJlYWRhYmxlTG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpUaHJlYWRhYmxlTG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlQmxvYkRhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6VGhyZWFkYWJsZUxvYWRlckNsaWVudDo6ZGlkRmluaXNoTG9hZGlu
Z0Jsb2IpOgorICAgICAgICAqIGxvYWRlci9UaHJlYWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBlci5o
OgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXI6OmRpZFJl
Y2VpdmVCbG9iRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlTG9hZGVyQ2xpZW50
V3JhcHBlcjo6ZGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxl
TG9hZGVyQ2xpZW50V3JhcHBlcjo6ZGlkRmluaXNoTG9hZGluZ0Jsb2IpOgorICAgICAgICAqIGxv
YWRlci9Xb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ondvcmtl
ckNvbnRleHREaWRSZWNlaXZlQmxvYkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhy
ZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEJyaWRnZTo6ZGlkUmVjZWl2ZUJsb2JEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2U6
OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6d29ya2VyQ29udGV4dERpZEZp
bmlzaExvYWRpbmdCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVMb2Fk
ZXI6Ok1haW5UaHJlYWRCcmlkZ2U6OmRpZEZpbmlzaExvYWRpbmdCbG9iKToKKyAgICAgICAgKiBs
b2FkZXIvV29ya2VyVGhyZWFkYWJsZUxvYWRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VIYW5kbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6
OmNhY2hlTWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmxvYWRS
ZXNvdXJjZVN5bmNocm9ub3VzbHlBc0Jsb2IpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VIYW5kbGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFu
ZGxlQ2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUNsaWVudDo6ZGlk
UmVjZWl2ZUJsb2JEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ2xpZW50
OjpkaWRGaW5pc2hMb2FkaW5nQmxvYik6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNv
dXJjZVJlcXVlc3RCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJh
c2U6OmFkb3B0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OmNvcHlE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmVxdWFsSWdub3JpbmdIZWFkZXJGaWVsZHMpOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6ZG93bmxvYWRBc0Jsb2IpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6c2V0RG93bmxvYWRBc0Jsb2IpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlcXVlc3QuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6ZG93bmxvYWRUb0ZpbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0OjpzZXREb3dubG9hZFRvRmlsZSk6CisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlc3BvbnNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2U6OmRvd25sb2FkRmlsZVBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZTo6c2V0RG93bmxvYWRGaWxlUGF0aCk6CisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlc3BvbnNlLmg6CisgICAg
ICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBS
ZXF1ZXN0OjpjcmVhdGVSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0
OjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0Ojpk
aWRGaW5pc2hMb2FkaW5nQmxvYik6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6
ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmRpZFJl
Y2VpdmVCbG9iRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6ZGlkUmVj
ZWl2ZURhdGFDb21tb24pOgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5oOgorCiAyMDEw
LTEwLTA3ICBDcmlzIE5lY2thciAgPGNkbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovY29weUZvcndh
cmRpbmdIZWFkZXJzLmNtZAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL2Nv
cHlGb3J3YXJkaW5nSGVhZGVycy5jbWQJKHJldmlzaW9uIDY5MzY2KQorKysgV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9jb3B5Rm9yd2FyZGluZ0hlYWRlcnMuY21kCSh3b3JraW5nIGNvcHkpCkBAIC0x
OSw2ICsxOSw3IEBAIHhjb3B5IC95IC9kICIlUHJvamVjdERpciUuLlxjb25maWcuaCIgIiUKIHhj
b3B5IC95IC9kICIlV2ViS2l0T3V0cHV0RGlyJVxvYmpcV2ViQ29yZVxEZXJpdmVkU291cmNlc1wq
LmgiICIlV2ViS2l0T3V0cHV0RGlyJVxpbmNsdWRlXFdlYkNvcmUiCiB4Y29weSAveSAvZCAiJVBy
b2plY3REaXIlLi5cYWNjZXNzaWJpbGl0eVwqLmgiICIlV2ViS2l0T3V0cHV0RGlyJVxpbmNsdWRl
XFdlYkNvcmUiCiB4Y29weSAveSAvZCAiJVByb2plY3REaXIlLi5cYWNjZXNzaWJpbGl0eVx3aW5c
Ki5oIiAiJVdlYktpdE91dHB1dERpciVcaW5jbHVkZVxXZWJDb3JlIgoreGNvcHkgL3kgL2QgIiVQ
cm9qZWN0RGlyJS4uXGZpbGVhcGlcKi5oIiAiJVdlYktpdE91dHB1dERpciVcaW5jbHVkZVxXZWJD
b3JlIgogeGNvcHkgL3kgL2QgIiVQcm9qZWN0RGlyJS4uXGluc3BlY3RvclwqLmgiICIlV2ViS2l0
T3V0cHV0RGlyJVxpbmNsdWRlXFdlYkNvcmUiCiB4Y29weSAveSAvZCAiJVByb2plY3REaXIlLi5c
bG9hZGVyXCouaCIgIiVXZWJLaXRPdXRwdXREaXIlXGluY2x1ZGVcV2ViQ29yZSIKIHhjb3B5IC95
IC9kICIlUHJvamVjdERpciUuLlxsb2FkZXJcYXBwY2FjaGVcKi5oIiAiJVdlYktpdE91dHB1dERp
ciVcaW5jbHVkZVxXZWJDb3JlIgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDY5MzY2KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTc0NSw3ICs3NDUsNyBAQAogCQky
RUQ2MDlCQzExNDVCMDcxMDBDODY4NEUgLyogRE9NRm9ybURhdGEuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVENjA5QkExMTQ1QjA3MTAwQzg2ODRF
IC8qIERPTUZvcm1EYXRhLmNwcCAqLzsgfTsKIAkJMkVENjA5QkQxMTQ1QjA3MTAwQzg2ODRFIC8q
IERPTUZvcm1EYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyRUQ2MDlCQjExNDVCMDcxMDBDODY4NEUgLyogRE9NRm9ybURhdGEuaCAqLzsgfTsKIAkJ
MkVERUYxRjMxMjFCMEVGQzAwNzI2REIyIC8qIEJsb2JEYXRhLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFREVGMUVEMTIxQjBFRkMwMDcyNkRCMiAv
KiBCbG9iRGF0YS5jcHAgKi87IH07Ci0JCTJFREVGMUY0MTIxQjBFRkMwMDcyNkRCMiAvKiBCbG9i
RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVE
RUYxRUUxMjFCMEVGQzAwNzI2REIyIC8qIEJsb2JEYXRhLmggKi87IH07CisJCTJFREVGMUY0MTIx
QjBFRkMwMDcyNkRCMiAvKiBCbG9iRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMkVERUYxRUUxMjFCMEVGQzAwNzI2REIyIC8qIEJsb2JEYXRhLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkVERUYx
RjUxMjFCMEVGQzAwNzI2REIyIC8qIEJsb2JSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVERUYxRUYxMjFCMEVGQzAwNzI2REIyIC8qIEJs
b2JSZWdpc3RyeS5oICovOyB9OwogCQkyRURFRjFGNjEyMUIwRUZDMDA3MjZEQjIgLyogQmxvYlJl
Z2lzdHJ5SW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyRURFRjFGMDEyMUIwRUZDMDA3MjZEQjIgLyogQmxvYlJlZ2lzdHJ5SW1wbC5jcHAgKi87
IH07CiAJCTJFREVGMUY3MTIxQjBFRkMwMDcyNkRCMiAvKiBCbG9iUmVnaXN0cnlJbXBsLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRURFRjFGMTEyMUIw
RUZDMDA3MjZEQjIgLyogQmxvYlJlZ2lzdHJ5SW1wbC5oICovOyB9OwpAQCAtMjg2OSw3ICsyODY5
LDcgQEAKIAkJOTczRTMyNTcxMDg4M0I3QzAwNUJDNDkzIC8qIFJlc291cmNlTG9hZE5vdGlmaWVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzNFMzI1
NTEwODgzQjdDMDA1QkM0OTMgLyogUmVzb3VyY2VMb2FkTm90aWZpZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5NzZENkM3NzEyMkI4QTNEMDAx
RkQxRjcgLyogQXN5bmNGaWxlV3JpdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5NzZENkM1ODEyMkI4QTNEMDAxRkQxRjcgLyogQXN5bmNGaWxlV3Jp
dGVyLmggKi87IH07CiAJCTk3NkQ2Qzc4MTIyQjhBM0QwMDFGRDFGNyAvKiBCbG9iLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3NkQ2QzU5MTIyQjhB
M0QwMDFGRDFGNyAvKiBCbG9iLmNwcCAqLzsgfTsKLQkJOTc2RDZDNzkxMjJCOEEzRDAwMUZEMUY3
IC8qIEJsb2IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDk3NkQ2QzVBMTIyQjhBM0QwMDFGRDFGNyAvKiBCbG9iLmggKi87IH07CisJCTk3NkQ2Qzc5MTIy
QjhBM0QwMDFGRDFGNyAvKiBCbG9iLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5NzZENkM1QTEyMkI4QTNEMDAxRkQxRjcgLyogQmxvYi5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTk3NkQ2QzdCMTIyQjhB
M0QwMDFGRDFGNyAvKiBCbG9iQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5NzZENkM1QzEyMkI4QTNEMDAxRkQxRjcgLyogQmxvYkJ1aWxk
ZXIuY3BwICovOyB9OwogCQk5NzZENkM3QzEyMkI4QTNEMDAxRkQxRjcgLyogQmxvYkJ1aWxkZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3NkQ2QzVE
MTIyQjhBM0QwMDFGRDFGNyAvKiBCbG9iQnVpbGRlci5oICovOyB9OwogCQk5NzZENkM3RTEyMkI4
QTNEMDAxRkQxRjcgLyogQmxvYlVSTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5NzZENkM1RjEyMkI4QTNEMDAxRkQxRjcgLyogQmxvYlVSTC5jcHAg
Ki87IH07CkBAIC0yMTE1MCw3ICsyMTE1MCw2IEBACiAJCQlpc2EgPSBQQlhQcm9qZWN0OwogCQkJ
YnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDE0OUMyODQzMDg5MDJCMTEwMDhBOUVGQyAvKiBCdWls
ZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgIldlYkNvcmUiICovOwogCQkJY29t
cGF0aWJpbGl0eVZlcnNpb24gPSAiWGNvZGUgMi40IjsKLQkJCWRldmVsb3BtZW50UmVnaW9uID0g
RW5nbGlzaDsKIAkJCWhhc1NjYW5uZWRGb3JFbmNvZGluZ3MgPSAxOwogCQkJa25vd25SZWdpb25z
ID0gKAogCQkJCUVuZ2xpc2gsCkluZGV4OiBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCShyZXZp
c2lvbiA2OTM2NikKKysrIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTYyLDcgKzU2Miw4IEBAIHZvaWQgRG9jdW1lbnRMb2FkZXI6OnN1YnN0aXR1
dGVSZXNvdXJjZUQKICAgICAgICAgCiAgICAgICAgIGlmIChyZXNvdXJjZSkgewogICAgICAgICAg
ICAgU2hhcmVkQnVmZmVyKiBkYXRhID0gcmVzb3VyY2UtPmRhdGEoKTsKLSAgICAgICAgCisKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBXcmFwIGEgYmxvYiBhcm91bmQgdGhlIGRhdGEgaW4gdGhlIGRv
d25sb2FkQXNCbG9iIGNhc2UuCiAgICAgICAgICAgICBsb2FkZXItPmRpZFJlY2VpdmVSZXNwb25z
ZShyZXNvdXJjZS0+cmVzcG9uc2UoKSk7CiAgICAgICAgICAgICBsb2FkZXItPmRpZFJlY2VpdmVE
YXRhKGRhdGEtPmRhdGEoKSwgZGF0YS0+c2l6ZSgpLCBkYXRhLT5zaXplKCksIHRydWUpOwogICAg
ICAgICAgICAgbG9hZGVyLT5kaWRGaW5pc2hMb2FkaW5nKDApOwpJbmRleDogV2ViQ29yZS9sb2Fk
ZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xv
YWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwCShyZXZpc2lvbiA2OTM2NikKKysrIFdl
YkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIyOCw2ICsyMjgsMTcgQEAgdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZFJl
Y2VpdgogICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlRGF0YShkYXRhLCBsZW5ndGhSZWNlaXZlZCk7
CiB9CiAKK3ZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRSZWNlaXZlQmxvYkRhdGEo
U3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgaW50IGxlbmd0aFJlY2VpdmVkKQoreworICAgIEFT
U0VSVChtX2NsaWVudCk7CisgICAgQVNTRVJUX1VOVVNFRChsb2FkZXIsIGxvYWRlciA9PSBtX2xv
YWRlcik7CisKKyAgICBpZiAobV9hY3R1YWxSZXF1ZXN0KQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX2NsaWVudC0+ZGlkUmVjZWl2ZUJsb2JEYXRhKGxlbmd0aFJlY2VpdmVkKTsKK30KKwogdm9p
ZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcoU3VicmVzb3VyY2VM
b2FkZXIqIGxvYWRlcikKIHsKICAgICBBU1NFUlQobG9hZGVyID09IG1fbG9hZGVyKTsKQEAgLTIz
NSwxNCArMjQ2LDMzIEBAIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRGaW5pc2gK
ICAgICBkaWRGaW5pc2hMb2FkaW5nKGxvYWRlci0+aWRlbnRpZmllcigpKTsKIH0KIAordm9pZCBE
b2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmdCbG9iKFN1YnJlc291cmNl
TG9hZGVyKiBsb2FkZXIsIEJsb2IqIGJsb2IpCit7CisgICAgQVNTRVJUKGxvYWRlciA9PSBtX2xv
YWRlcik7CisgICAgQVNTRVJUKG1fY2xpZW50KTsKKyAgICBkaWRGaW5pc2hMb2FkaW5nQmxvYihs
b2FkZXItPmlkZW50aWZpZXIoKSwgYmxvYik7Cit9CisKIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxl
TG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikKIHsKICAg
ICBpZiAobV9hY3R1YWxSZXF1ZXN0KSB7CiAgICAgICAgIEFTU0VSVCghbV9zYW1lT3JpZ2luUmVx
dWVzdCk7CiAgICAgICAgIEFTU0VSVChtX29wdGlvbnMuY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5
ID09IFVzZUFjY2Vzc0NvbnRyb2wpOwogICAgICAgICBwcmVmbGlnaHRTdWNjZXNzKCk7Ci0gICAg
fSBlbHNlCi0gICAgICAgIG1fY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKGlkZW50aWZpZXIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKGlk
ZW50aWZpZXIpOworfQorCit2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkRmluaXNo
TG9hZGluZ0Jsb2IodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBCbG9iKiBibG9iKQoreworICAg
IGlmIChtX2FjdHVhbFJlcXVlc3QpIHsKKyAgICAgICAgQVNTRVJUKCFtX3NhbWVPcmlnaW5SZXF1
ZXN0KTsKKyAgICAgICAgQVNTRVJUKG1fb3B0aW9ucy5jcm9zc09yaWdpblJlcXVlc3RQb2xpY3kg
PT0gVXNlQWNjZXNzQ29udHJvbCk7CisgICAgICAgIHByZWZsaWdodFN1Y2Nlc3MoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBtX2NsaWVudC0+ZGlkRmluaXNoTG9hZGluZ0Jsb2IoaWRl
bnRpZmllciwgYmxvYik7CiB9CiAKIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRG
YWlsKFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9y
KQpAQCAtMzI3LDExICszNTcsMTYgQEAgdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6Omxv
YWRSZXF1ZQogICAgIFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzID0gbV9vcHRp
b25zLmFsbG93Q3JlZGVudGlhbHMgPyBBbGxvd1N0b3JlZENyZWRlbnRpYWxzIDogRG9Ob3RBbGxv
d1N0b3JlZENyZWRlbnRpYWxzOwogCiAgICAgVmVjdG9yPGNoYXI+IGRhdGE7CisgICAgUmVmUHRy
PEJsb2I+IGRhdGFBc0Jsb2I7CiAgICAgUmVzb3VyY2VFcnJvciBlcnJvcjsKICAgICBSZXNvdXJj
ZVJlc3BvbnNlIHJlc3BvbnNlOwogICAgIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciA9IHN0ZDo6
bnVtZXJpY19saW1pdHM8dW5zaWduZWQgbG9uZz46Om1heCgpOwotICAgIGlmIChtX2RvY3VtZW50
LT5mcmFtZSgpKQotICAgICAgICBpZGVudGlmaWVyID0gbV9kb2N1bWVudC0+ZnJhbWUoKS0+bG9h
ZGVyKCktPmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkocmVxdWVzdCwgc3RvcmVkQ3JlZGVudGlh
bHMsIGVycm9yLCByZXNwb25zZSwgZGF0YSk7CisgICAgaWYgKG1fZG9jdW1lbnQtPmZyYW1lKCkp
IHsKKyAgICAgICAgaWYgKHJlcXVlc3QuZG93bmxvYWRBc0Jsb2IoKSkKKyAgICAgICAgICAgIGRh
dGFBc0Jsb2IgPSBtX2RvY3VtZW50LT5mcmFtZSgpLT5sb2FkZXIoKS0+bG9hZFJlc291cmNlU3lu
Y2hyb25vdXNseUFzQmxvYihyZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFscywgZXJyb3IsIHJlc3Bv
bnNlLCBpZGVudGlmaWVyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaWRlbnRpZmllciA9
IG1fZG9jdW1lbnQtPmZyYW1lKCktPmxvYWRlcigpLT5sb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5
KHJlcXVlc3QsIHN0b3JlZENyZWRlbnRpYWxzLCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOworICAg
IH0KIAogICAgIC8vIE5vIGV4Y2VwdGlvbiBmb3IgZmlsZTovLy8gcmVzb3VyY2VzLCBzZWUgPHJk
YXI6Ly9wcm9ibGVtLzQ5NjIyOTg+LgogICAgIC8vIEFsc28sIGlmIHdlIGhhdmUgYW4gSFRUUCBy
ZXNwb25zZSwgdGhlbiBpdCB3YXNuJ3QgYSBuZXR3b3JrIGVycm9yIGluIGZhY3QuCkBAIC0zNTAs
MTAgKzM4NSwxNCBAQCB2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlcXVlCiAK
ICAgICBkaWRSZWNlaXZlUmVzcG9uc2UoMCwgcmVzcG9uc2UpOwogCi0gICAgY29uc3QgY2hhciog
Ynl0ZXMgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZGF0YS5kYXRhKCkpOwotICAgIGludCBs
ZW4gPSBzdGF0aWNfY2FzdDxpbnQ+KGRhdGEuc2l6ZSgpKTsKLSAgICBkaWRSZWNlaXZlRGF0YSgw
LCBieXRlcywgbGVuKTsKKyAgICBpZiAocmVxdWVzdC5kb3dubG9hZEFzQmxvYigpKSB7CisgICAg
ICAgIGRpZEZpbmlzaExvYWRpbmdCbG9iKGlkZW50aWZpZXIsIGRhdGFBc0Jsb2IuZ2V0KCkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQogCisgICAgY29uc3QgY2hhciogYnl0ZXMgPSBzdGF0aWNf
Y2FzdDxjb25zdCBjaGFyKj4oZGF0YS5kYXRhKCkpOworICAgIGludCBsZW5ndGggPSBzdGF0aWNf
Y2FzdDxpbnQ+KGRhdGEuc2l6ZSgpKTsKKyAgICBkaWRSZWNlaXZlRGF0YSgwLCBieXRlcywgbGVu
Z3RoKTsKICAgICBkaWRGaW5pc2hMb2FkaW5nKGlkZW50aWZpZXIpOwogfQogCkluZGV4OiBXZWJD
b3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaAkocmV2aXNpb24gNjkzNjYpCisr
KyBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNzQsNyArNzQsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdmlydHVh
bCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFN1YnJl
c291cmNlTG9hZGVyKiwgY29uc3QgY2hhciosIGludCBsZW5ndGhSZWNlaXZlZCk7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQmxvYkRhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCBpbnQg
LypsZW5ndGhSZWNlaXZlZCovKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRp
bmcoU3VicmVzb3VyY2VMb2FkZXIqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExv
YWRpbmdCbG9iKFN1YnJlc291cmNlTG9hZGVyKiwgQmxvYiopOwogICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlkRmFpbChTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IFJlc291cmNlRXJyb3ImKTsKIAog
ICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0U2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoU3VicmVz
b3VyY2VMb2FkZXIqLCBib29sJiBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSk7CkBAIC04Miw2
ICs4NCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIHJlY2Vp
dmVkQ2FuY2VsbGF0aW9uKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UmKTsKIAogICAgICAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyKTsKKyAgICAgICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nQmxvYih1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIsIEJsb2IqKTsKKwogICAgICAgICB2b2lkIG1ha2VTaW1wbGVDcm9z
c09yaWdpbkFjY2Vzc1JlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KTsKICAg
ICAgICAgdm9pZCBtYWtlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0V2l0aFByZWZsaWdodChjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpOwogICAgICAgICB2b2lkIHByZWZsaWdodFN1Y2Nl
c3MoKTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDY5MzY2KQorKysgV2Vi
Q29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzM5LDYgKzI3
MzksNTAgQEAgdm9pZCBGcmFtZUxvYWRlcjo6bG9hZFBvc3RSZXF1ZXN0KGNvbnN0IAogCiB1bnNp
Z25lZCBsb25nIEZyYW1lTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlh
bHMsIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVj
dG9yPGNoYXI+JiBkYXRhKQogeworICAgIEFTU0VSVCghcmVxdWVzdC5kb3dubG9hZEFzQmxvYigp
KTsKKyAgICBSZXNvdXJjZVJlcXVlc3QgYWN0dWFsUmVxdWVzdDsKKyAgICB1bnNpZ25lZCBsb25n
IGlkZW50aWZpZXIgPSBwcmVwYXJlU3luY1JlcXVlc3QocmVxdWVzdCwgZXJyb3IsIGFjdHVhbFJl
cXVlc3QpOworICAgIGlmIChlcnJvci5pc051bGwoKSkgeworICAgICAgICBBU1NFUlQoIWFjdHVh
bFJlcXVlc3QuaXNOdWxsKCkpOworICAgICAgICAKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQ
TElDQVRJT05TKQorICAgICAgICBpZiAoIWRvY3VtZW50TG9hZGVyKCktPmFwcGxpY2F0aW9uQ2Fj
aGVIb3N0KCktPm1heWJlTG9hZFN5bmNocm9ub3VzbHkoYWN0dWFsUmVxdWVzdCwgZXJyb3IsIHJl
c3BvbnNlLCBkYXRhKSkgeworI2VuZGlmCisgICAgICAgICAgICBSZXNvdXJjZUhhbmRsZTo6bG9h
ZFJlc291cmNlU3luY2hyb25vdXNseShuZXR3b3JraW5nQ29udGV4dCgpLCBhY3R1YWxSZXF1ZXN0
LCBzdG9yZWRDcmVkZW50aWFscywgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKKyNpZiBFTkFCTEUo
T0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorICAgICAgICAgICAgZG9jdW1lbnRMb2FkZXIoKS0+
YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+bWF5YmVMb2FkRmFsbGJhY2tTeW5jaHJvbm91c2x5KGFj
dHVhbFJlcXVlc3QsIGVycm9yLCByZXNwb25zZSwgZGF0YSk7CisgICAgICAgIH0KKyNlbmRpZgor
ICAgIH0KKyAgICBub3RpZmllcigpLT5zZW5kUmVtYWluaW5nRGVsZWdhdGVNZXNzYWdlcyhtX2Rv
Y3VtZW50TG9hZGVyLmdldCgpLCBpZGVudGlmaWVyLCByZXNwb25zZSwgZGF0YS5zaXplKCksIGVy
cm9yKTsKKyAgICByZXR1cm4gaWRlbnRpZmllcjsKK30KKworUGFzc1JlZlB0cjxCbG9iPiBGcmFt
ZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseUFzQmxvYihjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzLCBSZXNv
dXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIHVuc2lnbmVkIGxv
bmcmIGlkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKHJlcXVlc3QuZG93bmxvYWRBc0Jsb2IoKSk7
CisgICAgUmVzb3VyY2VSZXF1ZXN0IGFjdHVhbFJlcXVlc3Q7CisgICAgaWRlbnRpZmllciA9IHBy
ZXBhcmVTeW5jUmVxdWVzdChyZXF1ZXN0LCBlcnJvciwgYWN0dWFsUmVxdWVzdCk7CisgICAgUmVm
UHRyPEJsb2I+IGRhdGFBc0Jsb2I7CisgICAgaWYgKGVycm9yLmlzTnVsbCgpKSB7CisgICAgICAg
IEFTU0VSVCghYWN0dWFsUmVxdWVzdC5pc051bGwoKSk7CisgICAgICAgIAorI2lmIDAgLy8gRklY
TUU6IFN1cHBvcnQgZm9yIGFwcGNhY2hlZCByZXNvdXJjZXMuCisgICAgICAgIGlmICghZG9jdW1l
bnRMb2FkZXIoKS0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+bWF5YmVMb2FkU3luY2hyb25vdXNs
eShhY3R1YWxSZXF1ZXN0LCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpKSB7CisjZW5kaWYKKyAgICAg
ICAgICAgIGRhdGFBc0Jsb2IgPSBSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25v
dXNseUFzQmxvYihuZXR3b3JraW5nQ29udGV4dCgpLCBhY3R1YWxSZXF1ZXN0LCBzdG9yZWRDcmVk
ZW50aWFscywgZXJyb3IsIHJlc3BvbnNlKTsKKyNpZiAwIC8vIEZJWE1FOiBEaXR0by4KKyAgICAg
ICAgICAgIGRvY3VtZW50TG9hZGVyKCktPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPm1heWJlTG9h
ZEZhbGxiYWNrU3luY2hyb25vdXNseShhY3R1YWxSZXF1ZXN0LCBlcnJvciwgcmVzcG9uc2UsIGRh
dGEpOworICAgICAgICB9CisjZW5kaWYKKyAgICB9CisgICAgaW50IG5vdGlmeUxlbmd0aCA9IGRh
dGFBc0Jsb2IgPyBzdGF0aWNfY2FzdDxpbnQ+KHN0ZDo6bWluKGRhdGFBc0Jsb2ItPnNpemUoKSwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihJTlRfTUFYKSkpIDogMDsKKyAgICBub3Rp
ZmllcigpLT5zZW5kUmVtYWluaW5nRGVsZWdhdGVNZXNzYWdlcyhtX2RvY3VtZW50TG9hZGVyLmdl
dCgpLCBpZGVudGlmaWVyLCByZXNwb25zZSwgbm90aWZ5TGVuZ3RoLCBlcnJvcik7CisgICAgcmV0
dXJuIGRhdGFBc0Jsb2I7Cit9CisKK3Vuc2lnbmVkIGxvbmcgRnJhbWVMb2FkZXI6OnByZXBhcmVT
eW5jUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlRXJyb3Im
IGVycm9yLCBSZXNvdXJjZVJlcXVlc3QmIGFjdHVhbFJlcXVlc3QpCit7CiAgICAgU3RyaW5nIHJl
ZmVycmVyID0gbV9vdXRnb2luZ1JlZmVycmVyOwogICAgIGlmIChTZWN1cml0eU9yaWdpbjo6c2hv
dWxkSGlkZVJlZmVycmVyKHJlcXVlc3QudXJsKCksIHJlZmVycmVyKSkKICAgICAgICAgcmVmZXJy
ZXIgPSBTdHJpbmcoKTsKQEAgLTI3NTMsMjcgKzI3OTcsMTIgQEAgdW5zaWduZWQgbG9uZyBGcmFt
ZUxvYWRlcjo6bG9hZFJlc291cmNlUwogICAgIGlmIChQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFn
ZSgpKQogICAgICAgICBpbml0aWFsUmVxdWVzdC5zZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhwYWdl
LT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnJlcXVlc3QoKS51cmwo
KSk7CiAgICAgaW5pdGlhbFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2VudChjbGllbnQoKS0+dXNlckFn
ZW50KHJlcXVlc3QudXJsKCkpKTsKLSAgICAKKwogICAgIGFkZEV4dHJhRmllbGRzVG9TdWJyZXNv
dXJjZVJlcXVlc3QoaW5pdGlhbFJlcXVlc3QpOwogCiAgICAgdW5zaWduZWQgbG9uZyBpZGVudGlm
aWVyID0gMDsgICAgCi0gICAgUmVzb3VyY2VSZXF1ZXN0IG5ld1JlcXVlc3QoaW5pdGlhbFJlcXVl
c3QpOwotICAgIHJlcXVlc3RGcm9tRGVsZWdhdGUobmV3UmVxdWVzdCwgaWRlbnRpZmllciwgZXJy
b3IpOwotCi0gICAgaWYgKGVycm9yLmlzTnVsbCgpKSB7Ci0gICAgICAgIEFTU0VSVCghbmV3UmVx
dWVzdC5pc051bGwoKSk7Ci0gICAgICAgIAotI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNB
VElPTlMpCi0gICAgICAgIGlmICghZG9jdW1lbnRMb2FkZXIoKS0+YXBwbGljYXRpb25DYWNoZUhv
c3QoKS0+bWF5YmVMb2FkU3luY2hyb25vdXNseShuZXdSZXF1ZXN0LCBlcnJvciwgcmVzcG9uc2Us
IGRhdGEpKSB7Ci0jZW5kaWYKLSAgICAgICAgICAgIFJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3Vy
Y2VTeW5jaHJvbm91c2x5KG5ldHdvcmtpbmdDb250ZXh0KCksIG5ld1JlcXVlc3QsIHN0b3JlZENy
ZWRlbnRpYWxzLCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOwotI2lmIEVOQUJMRShPRkZMSU5FX1dF
Ql9BUFBMSUNBVElPTlMpCi0gICAgICAgICAgICBkb2N1bWVudExvYWRlcigpLT5hcHBsaWNhdGlv
bkNhY2hlSG9zdCgpLT5tYXliZUxvYWRGYWxsYmFja1N5bmNocm9ub3VzbHkobmV3UmVxdWVzdCwg
ZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgfQotCi0gICAg
bm90aWZpZXIoKS0+c2VuZFJlbWFpbmluZ0RlbGVnYXRlTWVzc2FnZXMobV9kb2N1bWVudExvYWRl
ci5nZXQoKSwgaWRlbnRpZmllciwgcmVzcG9uc2UsIGRhdGEuc2l6ZSgpLCBlcnJvcik7CisgICAg
YWN0dWFsUmVxdWVzdCA9IGluaXRpYWxSZXF1ZXN0OworICAgIHJlcXVlc3RGcm9tRGVsZWdhdGUo
YWN0dWFsUmVxdWVzdCwgaWRlbnRpZmllciwgZXJyb3IpOwogICAgIHJldHVybiBpZGVudGlmaWVy
OwogfQogCkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHJldmlzaW9uIDY5MzY2KQorKysgV2ViQ29y
ZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEFyY2hpdmU7CiBjbGFzcyBBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZTsKK2NsYXNzIEJsb2I7CiBjbGFzcyBDYWNoZWRGcmFtZUJhc2U7CiBjbGFzcyBD
YWNoZWRQYWdlOwogY2xhc3MgQ2FjaGVkUmVzb3VyY2U7CkBAIC0xMjMsNiArMTI0LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyB2b2lkIHJlcG9ydExvY2FsTG9hZEZhaWxlZChGcmFtZSosIGNvbnN0
IFN0cmluZyYgdXJsKTsKIAogICAgIHVuc2lnbmVkIGxvbmcgbG9hZFJlc291cmNlU3luY2hyb25v
dXNseShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTdG9yZWRDcmVkZW50aWFscywgUmVzb3VyY2VF
cnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEpOworICAgIFBhc3NS
ZWZQdHI8QmxvYj4gbG9hZFJlc291cmNlU3luY2hyb25vdXNseUFzQmxvYihjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmLCBTdG9yZWRDcmVkZW50aWFscywgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVz
cG9uc2UmLCB1bnNpZ25lZCBsb25nJik7CiAKICAgICBib29sIGNhbkhhbmRsZVJlcXVlc3QoY29u
c3QgUmVzb3VyY2VSZXF1ZXN0Jik7CiAKQEAgLTQzMSw2ICs0MzMsOCBAQCBwcml2YXRlOgogCiAg
ICAgdm9pZCB1cGRhdGVTYW5kYm94RmxhZ3MoKTsKIAorICAgIHVuc2lnbmVkIGxvbmcgcHJlcGFy
ZVN5bmNSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFJlc291cmNlRXJyb3ImLCBSZXNv
dXJjZVJlcXVlc3QmIGFjdHVhbFJlcXVlc3QpOworCiAgICAgRnJhbWUqIG1fZnJhbWU7CiAgICAg
RnJhbWVMb2FkZXJDbGllbnQqIG1fY2xpZW50OwogCkluZGV4OiBXZWJDb3JlL2xvYWRlci9SZXNv
dXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2Fk
ZXIuY3BwCShyZXZpc2lvbiA2OTM2NikKKysrIFdlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIwLDkgKzIyMCwxMCBAQCB2b2lkIFJlc291cmNlTG9h
ZGVyOjp3aWxsU2VuZFJlcXVlc3QoUmVzCiAgICAgICAgICAgICBmcmFtZUxvYWRlcigpLT5ub3Rp
ZmllcigpLT5hc3NpZ25JZGVudGlmaWVyVG9Jbml0aWFsUmVxdWVzdChtX2lkZW50aWZpZXIsIGRv
Y3VtZW50TG9hZGVyKCksIHJlcXVlc3QpOwogICAgICAgICB9CiAKKyAgICAgICAgYm9vbCBzYXZl
RG93bmxvYWRBc0Jsb2IgPSByZXF1ZXN0LmRvd25sb2FkQXNCbG9iKCk7CiAgICAgICAgIGZyYW1l
TG9hZGVyKCktPm5vdGlmaWVyKCktPndpbGxTZW5kUmVxdWVzdCh0aGlzLCByZXF1ZXN0LCByZWRp
cmVjdFJlc3BvbnNlKTsKKyAgICAgICAgcmVxdWVzdC5zZXREb3dubG9hZEFzQmxvYihzYXZlRG93
bmxvYWRBc0Jsb2IpOwogICAgIH0KLQogICAgIG1fcmVxdWVzdCA9IHJlcXVlc3Q7CiB9CiAKQEAg
LTI3OCwxOCArMjc5LDIxIEBAIHZvaWQgUmVzb3VyY2VMb2FkZXI6OndpbGxTdG9wQnVmZmVyaW5n
RGEKIAogdm9pZCBSZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyhkb3VibGUgZmluaXNo
VGltZSkKIHsKLSAgICAvLyBJZiBsb2FkIGhhcyBiZWVuIGNhbmNlbGxlZCBhZnRlciBmaW5pc2hp
bmcgKHdoaWNoIGNvdWxkIGhhcHBlbiB3aXRoIGEgCi0gICAgLy8gSmF2YVNjcmlwdCB0aGF0IGNo
YW5nZXMgdGhlIHdpbmRvdyBsb2NhdGlvbiksIGRvIG5vdGhpbmcuCi0gICAgaWYgKG1fY2FuY2Vs
bGVkKQotICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKCFtX3JlYWNoZWRUZXJtaW5hbFN0YXRl
KTsKKyAgICBkaWRGaW5pc2hMb2FkaW5nT25lUGFydChmaW5pc2hUaW1lKTsKKyAgICByZWxlYXNl
UmVzb3VyY2VzKCk7Cit9CiAKK3ZvaWQgUmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmdC
bG9iKGRvdWJsZSBmaW5pc2hUaW1lLCBCbG9iKikKK3sKKyAgICAvLyBGSVhNRTogV2hhdCBhYm91
dCBtdWx0aXBhcnQgYW5kIGRvd25sb2FkQXNCbG9iPwogICAgIGRpZEZpbmlzaExvYWRpbmdPbmVQ
YXJ0KGZpbmlzaFRpbWUpOwogICAgIHJlbGVhc2VSZXNvdXJjZXMoKTsKIH0KIAogdm9pZCBSZXNv
dXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZ09uZVBhcnQoZG91YmxlIGZpbmlzaFRpbWUpCiB7
CisgICAgLy8gSWYgbG9hZCBoYXMgYmVlbiBjYW5jZWxsZWQgYWZ0ZXIgZmluaXNoaW5nICh3aGlj
aCBjb3VsZCBoYXBwZW4gd2l0aCBhIAorICAgIC8vIEphdmFTY3JpcHQgdGhhdCBjaGFuZ2VzIHRo
ZSB3aW5kb3cgbG9jYXRpb24pLCBkbyBub3RoaW5nLgogICAgIGlmIChtX2NhbmNlbGxlZCkKICAg
ICAgICAgcmV0dXJuOwogICAgIEFTU0VSVCghbV9yZWFjaGVkVGVybWluYWxTdGF0ZSk7CkBAIC0z
OTAsNiArMzk0LDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0KFJlcwog
ICAgIGlmIChkb2N1bWVudExvYWRlcigpLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5tYXliZUxv
YWRGYWxsYmFja0ZvclJlZGlyZWN0KHRoaXMsIHJlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpKQog
ICAgICAgICByZXR1cm47CiAjZW5kaWYKKyAgICBBU1NFUlQocmVxdWVzdC5kb3dubG9hZEFzQmxv
YigpID09IG1fcmVxdWVzdC5kb3dubG9hZEFzQmxvYigpKTsKICAgICB3aWxsU2VuZFJlcXVlc3Qo
cmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7CiB9CiAKQEAgLTQxMSw4ICs0MTYsMjEgQEAgdm9p
ZCBSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKAogCiB2b2lkIFJlc291cmNlTG9h
ZGVyOjpkaWRSZWNlaXZlRGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqIGRhdGEsIGlu
dCBsZW5ndGgsIGludCBsZW5ndGhSZWNlaXZlZCkKIHsKKyAgICBkaWRSZWNlaXZlRGF0YUNvbW1v
bihSZXNwb25zZUFzRGF0YSwgZGF0YSwgbGVuZ3RoLCBsZW5ndGhSZWNlaXZlZCk7Cit9CisKK3Zv
aWQgUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVCbG9iRGF0YShSZXNvdXJjZUhhbmRsZSosIGlu
dCBsZW5ndGgpCit7CisgICAgZGlkUmVjZWl2ZURhdGFDb21tb24oUmVzcG9uc2VBc0Jsb2IsIDAs
IGxlbmd0aCwgMCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVEYXRhQ29t
bW9uKFJlc3BvbnNlQXNNb2RlIHJlc3BvbnNlQXMsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5n
dGgsIGludCBsZW5ndGhSZWNlaXZlZCkKK3sKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25D
b29raWUgY29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsUmVjZWl2ZVJlc291
cmNlRGF0YShtX2ZyYW1lLmdldCgpLCBpZGVudGlmaWVyKCkpOwotICAgIGRpZFJlY2VpdmVEYXRh
KGRhdGEsIGxlbmd0aCwgbGVuZ3RoUmVjZWl2ZWQsIGZhbHNlKTsKKyAgICBpZiAocmVzcG9uc2VB
cyA9PSBSZXNwb25zZUFzRGF0YSkKKyAgICAgICAgZGlkUmVjZWl2ZURhdGEoZGF0YSwgbGVuZ3Ro
LCBsZW5ndGhSZWNlaXZlZCwgZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAgZGlkUmVjZWl2ZUJs
b2JEYXRhKGxlbmd0aCk7CiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSZWNlaXZl
UmVzb3VyY2VEYXRhKG1fZnJhbWUuZ2V0KCksIGNvb2tpZSk7CiB9CiAKQEAgLTQyMSw2ICs0Mzks
MTEgQEAgdm9pZCBSZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyhSZQogICAgIGRpZEZp
bmlzaExvYWRpbmcoZmluaXNoVGltZSk7CiB9CiAKK3ZvaWQgUmVzb3VyY2VMb2FkZXI6OmRpZEZp
bmlzaExvYWRpbmdCbG9iKFJlc291cmNlSGFuZGxlKiwgZG91YmxlIGZpbmlzaFRpbWUsIEJsb2Iq
IGJsb2IpCit7CisgICAgZGlkRmluaXNoTG9hZGluZ0Jsb2IoZmluaXNoVGltZSwgYmxvYik7Cit9
CisKIHZvaWQgUmVzb3VyY2VMb2FkZXI6OmRpZEZhaWwoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBS
ZXNvdXJjZUVycm9yJiBlcnJvcikKIHsKICNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJ
T05TKQpAQCAtNDkyLDYgKzUxNSw4IEBAIHZvaWQgUmVzb3VyY2VMb2FkZXI6OndpbGxDYWNoZVJl
c3BvbnNlKFIKICNpZiBFTkFCTEUoQkxPQikKIEFzeW5jRmlsZVN0cmVhbSogUmVzb3VyY2VMb2Fk
ZXI6OmNyZWF0ZUFzeW5jRmlsZVN0cmVhbShGaWxlU3RyZWFtQ2xpZW50KiBjbGllbnQpCiB7Cisg
ICAgLy8gRklYTUU6IERlY291cGxlIHRoZSBGaWxlVGhyZWFkIGZyb20gU2NyaXB0RXhlY3V0aW9u
Q29udGV4dHMgYW5kIHJlbW92ZSB0aGlzIG1ldGhvZCBmcm9tIFJlc291cmNlSGFuZGxlQ2xpZW50
LAorICAgIC8vIGNhbGxlcnMgc2hvdWUgYmUgYWJsZSB0byBjcmVhdGUgYSBGaWxlU3RyZWFtUHJv
eHkgaW5kZXBlbmRlbnQgb2YgYSBjb250ZXh0LgogICAgIC8vIEl0IGlzIE9LIHRvIHNpbXBseSBy
ZXR1cm4gYSBwb2ludGVyIHNpbmNlIEZpbGVTdHJlYW1Qcm94eTo6Y3JlYXRlIGFkZHMgYW4gZXh0
cmEgcmVmLgogICAgIHJldHVybiBGaWxlU3RyZWFtUHJveHk6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1
bWVudCgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIGNsaWVudCkuZ2V0KCk7CiB9CkluZGV4
OiBXZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
bG9hZGVyL1Jlc291cmNlTG9hZGVyLmgJKHJldmlzaW9uIDY5MzY2KQorKysgV2ViQ29yZS9sb2Fk
ZXIvUmVzb3VyY2VMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtODAsOSArODAsMTEgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkU2VuZERhdGEodW5zaWdu
ZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0Jl
U2VudCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoY29u
c3QgY2hhciosIGludCwgbG9uZyBsb25nIGxlbmd0aFJlY2VpdmVkLCBib29sIGFsbEF0T25jZSk7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQmxvYkRhdGEoaW50KSB7IH0KICAgICAg
ICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YShjb25zdCBjaGFyKiwgaW50
KSB7IH0KICAgICAgICAgdm9pZCB3aWxsU3RvcEJ1ZmZlcmluZ0RhdGEoY29uc3QgY2hhciosIGlu
dCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKGRvdWJsZSBmaW5pc2hU
aW1lKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmdCbG9iKGRvdWJsZSBm
aW5pc2hUaW1lLCBCbG9iKik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKGNvbnN0IFJl
c291cmNlRXJyb3ImKTsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlh
bFN0b3JhZ2UoKTsKQEAgLTk4LDggKzEwMCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YShSZXNvdXJjZUhhbmRsZSosIHVuc2lnbmVkIGxv
bmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQp
OwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlSGFuZGxl
KiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVj
ZWl2ZURhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiwgaW50LCBpbnQgbGVuZ3RoUmVj
ZWl2ZWQpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUJsb2JEYXRhKFJlc291cmNl
SGFuZGxlKiwgaW50KTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVDYWNoZWRNZXRh
ZGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpIHsgZGlk
UmVjZWl2ZUNhY2hlZE1ldGFkYXRhKGRhdGEsIGxlbmd0aCk7IH0KICAgICAgICAgdmlydHVhbCB2
b2lkIGRpZEZpbmlzaExvYWRpbmcoUmVzb3VyY2VIYW5kbGUqLCBkb3VibGUgZmluaXNoVGltZSk7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nQmxvYihSZXNvdXJjZUhhbmRs
ZSosIGRvdWJsZSBmaW5pc2hUaW1lLCBCbG9iKik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRG
YWlsKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpOwogICAgICAgICB2aXJ0
dWFsIHZvaWQgd2FzQmxvY2tlZChSZXNvdXJjZUhhbmRsZSopOwogICAgICAgICB2aXJ0dWFsIHZv
aWQgY2Fubm90U2hvd1VSTChSZXNvdXJjZUhhbmRsZSopOwpAQCAtMTI4LDYgKzEzMiwxMSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc2V0U2hvdWxkQnVmZmVyRGF0YShib29s
IHNob3VsZEJ1ZmZlckRhdGEpOwogCiAgICAgcHJvdGVjdGVkOgorICAgICAgICBlbnVtIFJlc3Bv
bnNlQXNNb2RlICB7CisgICAgICAgICAgICBSZXNwb25zZUFzRGF0YSwKKyAgICAgICAgICAgIFJl
c3BvbnNlQXNCbG9iCisgICAgICAgIH07CisKICAgICAgICAgUmVzb3VyY2VMb2FkZXIoRnJhbWUq
LCBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MsIGJvb2wgc2hvdWxkQ29udGVudFNuaWZm
KTsKIAogI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCkBAIC0xNDEsNiArMTUw
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIHJlYWNoZWRUZXJtaW5hbFN0
YXRlKCkgY29uc3QgeyByZXR1cm4gbV9yZWFjaGVkVGVybWluYWxTdGF0ZTsgfQogICAgICAgICBi
b29sIGNhbmNlbGxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FuY2VsbGVkOyB9CiAgICAgICAgIGJv
b2wgZGVmZXJzTG9hZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fZGVmZXJzTG9hZGluZzsgfQorICAg
ICAgICB2b2lkIGRpZFJlY2VpdmVEYXRhQ29tbW9uKFJlc3BvbnNlQXNNb2RlLCBjb25zdCBjaGFy
KiwgaW50LCBpbnQgbGVuZ3RoUmVjZWl2ZWQpOwogCiAgICAgICAgIFJlZlB0cjxSZXNvdXJjZUhh
bmRsZT4gbV9oYW5kbGU7CiAgICAgICAgIFJlZlB0cjxGcmFtZT4gbV9mcmFtZTsKSW5kZXg6IFdl
YkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHAJKHJldmlzaW9uIDY5MzY2KQorKysgV2ViQ29y
ZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsNiAr
MTU4LDIwIEBAIHZvaWQgU3VicmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVEYXRhKGMKICAgICAg
ICAgbV9jbGllbnQtPmRpZFJlY2VpdmVEYXRhKHRoaXMsIGRhdGEsIGxlbmd0aCk7CiB9CiAKK3Zv
aWQgU3VicmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVCbG9iRGF0YShpbnQgbGVuZ3RoKQorewor
ICAgIC8vIFJlZmVyZW5jZSB0aGUgb2JqZWN0IGluIHRoaXMgbWV0aG9kIHNpbmNlIHRoZSBhZGRp
dGlvbmFsIHByb2Nlc3NpbmcgY2FuIGRvCisgICAgLy8gYW55dGhpbmcgaW5jbHVkaW5nIHJlbW92
aW5nIHRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGlzIG9iamVjdDsgb25lIGV4YW1wbGUgb2YgdGhp
cyBpcyAzMjY2MjE2LgorICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gcHJvdGVjdCh0aGlz
KTsKKworICAgIFJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlQmxvYkRhdGEobGVuZ3RoKTsKKwor
ICAgIC8vIEEgc3VicmVzb3VyY2UgbG9hZGVyIGRvZXMgbm90IGxvYWQgbXVsdGlwYXJ0IHNlY3Rp
b25zIHByb2dyZXNzaXZlbHkuCisgICAgLy8gU28gZG9uJ3QgZGVsaXZlciBhbnkgZGF0YSB0byB0
aGUgbG9hZGVyIHlldC4KKyAgICBpZiAoIW1fbG9hZGluZ011bHRpcGFydENvbnRlbnQgJiYgbV9j
bGllbnQpCisgICAgICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlQmxvYkRhdGEodGhpcywgbGVuZ3Ro
KTsKK30KKwogdm9pZCBTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRh
KGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCiB7CiAgICAgLy8gUmVmZXJlbmNlIHRoZSBv
YmplY3QgaW4gdGhpcyBtZXRob2Qgc2luY2UgdGhlIGFkZGl0aW9uYWwgcHJvY2Vzc2luZyBjYW4g
ZG8KQEAgLTE3MCw2ICsxODQsMTYgQEAgdm9pZCBTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2
ZUNhY2hlZAogCiB2b2lkIFN1YnJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKGRvdWJs
ZSBmaW5pc2hUaW1lKQogeworICAgIGRpZEZpbmlzaExvYWRpbmdDb21tb24oUmVzcG9uc2VBc0Rh
dGEsIGZpbmlzaFRpbWUsIDApOworfQorCit2b2lkIFN1YnJlc291cmNlTG9hZGVyOjpkaWRGaW5p
c2hMb2FkaW5nQmxvYihkb3VibGUgZmluaXNoVGltZSwgQmxvYiogYmxvYikKK3sKKyAgICBkaWRG
aW5pc2hMb2FkaW5nQ29tbW9uKFJlc3BvbnNlQXNCbG9iLCBmaW5pc2hUaW1lLCBibG9iKTsKK30K
Kwordm9pZCBTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZ0NvbW1vbihSZXNwb25z
ZUFzTW9kZSByZXNwb25zZUFzLCBkb3VibGUgZmluaXNoVGltZSwgQmxvYiogYmxvYikKK3sKICAg
ICBpZiAoY2FuY2VsbGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQoIXJlYWNoZWRU
ZXJtaW5hbFN0YXRlKCkpOwpAQCAtMTc4LDE0ICsyMDIsMjAgQEAgdm9pZCBTdWJyZXNvdXJjZUxv
YWRlcjo6ZGlkRmluaXNoTG9hZGluZwogICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gcHJv
dGVjdCh0aGlzKTsKIAogICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgbV9jbGllbnQtPmRpZEZp
bmlzaExvYWRpbmcodGhpcyk7Ci0gICAgCisgICAgICAgIGlmIChyZXNwb25zZUFzID09IFJlc3Bv
bnNlQXNCbG9iKQorICAgICAgICAgICAgbV9jbGllbnQtPmRpZEZpbmlzaExvYWRpbmdCbG9iKHRo
aXMsIGJsb2IpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2NsaWVudC0+ZGlkRmluaXNo
TG9hZGluZyh0aGlzKTsKKwogICAgIG1faGFuZGxlID0gMDsKIAogICAgIGlmIChjYW5jZWxsZWQo
KSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fZG9jdW1lbnRMb2FkZXItPnJlbW92ZVN1YnJlc291
cmNlTG9hZGVyKHRoaXMpOwotICAgIFJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKGZp
bmlzaFRpbWUpOworICAgIGlmIChyZXNwb25zZUFzID09IFJlc3BvbnNlQXNCbG9iKQorICAgICAg
ICBSZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZ0Jsb2IoZmluaXNoVGltZSwgYmxvYik7
CisgICAgZWxzZQorICAgICAgICBSZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyhmaW5p
c2hUaW1lKTsKIH0KIAogdm9pZCBTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkRmFpbChjb25zdCBSZXNv
dXJjZUVycm9yJiBlcnJvcikKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuaAkocmV2
aXNpb24gNjkzNjYpCisrKyBXZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MSwxNCArNTEsMTggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICB2aXJ0dWFsIHZvaWQgZGlkU2VuZERhdGEodW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwg
dW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCk7CiAgICAgICAgIHZpcnR1YWwg
dm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogICAgICAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciosIGludCwgbG9uZyBsb25n
IGxlbmd0aFJlY2VpdmVkLCBib29sIGFsbEF0T25jZSk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBk
aWRSZWNlaXZlQmxvYkRhdGEoaW50KTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVD
YWNoZWRNZXRhZGF0YShjb25zdCBjaGFyKiwgaW50KTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRp
ZEZpbmlzaExvYWRpbmcoZG91YmxlIGZpbmlzaFRpbWUpOworICAgICAgICB2aXJ0dWFsIHZvaWQg
ZGlkRmluaXNoTG9hZGluZ0Jsb2IoZG91YmxlIGZpbmlzaFRpbWUsIEJsb2IqKTsKICAgICAgICAg
dmlydHVhbCB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpOwogICAgICAgICB2aXJ0
dWFsIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoKTsKICAgICAgICAgdmlydHVhbCB2
b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZSYpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRDYW5jZWxsYXRpb24o
Y29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsgICAgICAgIAogICAgICAgICB2aXJ0dWFs
IHZvaWQgZGlkQ2FuY2VsKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKIAorICAgICAgICB2b2lkIGRp
ZEZpbmlzaExvYWRpbmdDb21tb24oUmVzcG9uc2VBc01vZGUsIGRvdWJsZSBmaW5pc2hUaW1lLCBC
bG9iKik7CisKICAgICAgICAgU3VicmVzb3VyY2VMb2FkZXJDbGllbnQqIG1fY2xpZW50OwogICAg
ICAgICBib29sIG1fbG9hZGluZ011bHRpcGFydENvbnRlbnQ7CiAgICAgfTsKSW5kZXg6IFdlYkNv
cmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXJDbGllbnQuaAkocmV2aXNpb24gNjkzNjYpCisrKyBX
ZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSw2ICsyOSw5IEBACiAjaWZuZGVmIFN1YnJlc291cmNlTG9hZGVyQ2xpZW50X2gKICNkZWZp
bmUgU3VicmVzb3VyY2VMb2FkZXJDbGllbnRfaAogCisjaW5jbHVkZSAiQmxvYi5oIgorI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQXV0
aGVudGljYXRpb25DaGFsbGVuZ2U7CkBAIC00NiwxMSArNDksMTMgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBkaWRTZW5kRGF0YShTdWJyZXNvdXJjZUxvYWRlciosIHVuc2lnbmVkIGxvbmcg
bG9uZyAvKmJ5dGVzU2VudCovLCB1bnNpZ25lZCBsb25nIGxvbmcgLyp0b3RhbEJ5dGVzVG9CZVNl
bnQqLykgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFN1YnJlc291
cmNlTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpIHsgfQotICAgIHZpcnR1YWwgdm9p
ZCBkaWRSZWNlaXZlRGF0YShTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IGNoYXIqLCBpbnQgLyps
ZW5ndGhSZWNlaXZlZCovKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoU3Vi
cmVzb3VyY2VMb2FkZXIqLCBjb25zdCBjaGFyKiwgaW50IC8qbGVuZ3RoUmVjZWl2ZWQqLykgeyB9
IC8vIE5vdCBjYWxsZWQgaWYgcmVxdWVzdC5kb3dubG9hZEFzQmxvYiBpcyBzZXQuCisgICAgdmly
dHVhbCB2b2lkIGRpZFJlY2VpdmVCbG9iRGF0YShTdWJyZXNvdXJjZUxvYWRlciosIGludCAvKmxl
bmd0aFJlY2VpdmVkKi8pIHsgfSAvLyBPbmx5IGNhbGxlZCBpZiByZXF1ZXN0LmRvd25sb2FkQXNC
bG9iIGlzIHNldC4KICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKFN1
YnJlc291cmNlTG9hZGVyKiwgY29uc3QgY2hhciosIGludCAvKmxlbmd0aFJlY2VpdmVkKi8pIHsg
fQogICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKFN1YnJlc291cmNlTG9hZGVyKikg
eyB9CisgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmdCbG9iKFN1YnJlc291cmNlTG9h
ZGVyKiwgQmxvYiopIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKFN1YnJlc291cmNlTG9h
ZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpIHsgfQotICAgIAorCiAgICAgdmlydHVhbCBib29s
IGdldFNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKFN1YnJlc291cmNlTG9hZGVyKiwgYm9vbCYg
LypzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSovKSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoU3VicmVzb3VyY2VM
b2FkZXIqLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpIHsgfQogICAgIHZpcnR1YWwg
dm9pZCByZWNlaXZlZENhbmNlbGxhdGlvbihTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlJikgeyB9CkluZGV4OiBXZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxl
TG9hZGVyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvVGhyZWFkYWJsZUxv
YWRlckNsaWVudC5oCShyZXZpc2lvbiA2OTM2NikKKysrIFdlYkNvcmUvbG9hZGVyL1RocmVhZGFi
bGVMb2FkZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsOSBAQAogI2lmbmRl
ZiBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50X2gKICNkZWZpbmUgVGhyZWFkYWJsZUxvYWRlckNsaWVu
dF9oCiAKKyNpbmNsdWRlICJCbG9iLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKwog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgUmVzb3VyY2VFcnJvcjsKQEAgLTQxLDgg
KzQ0LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFNl
bmREYXRhKHVuc2lnbmVkIGxvbmcgbG9uZyAvKmJ5dGVzU2VudCovLCB1bnNpZ25lZCBsb25nIGxv
bmcgLyp0b3RhbEJ5dGVzVG9CZVNlbnQqLykgeyB9CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGRp
ZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgeyB9Ci0gICAgICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiwgaW50IC8qbGVuZ3RoUmVjZWl2
ZWQqLykgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFy
KiwgaW50IC8qbGVuZ3RoUmVjZWl2ZWQqLykgeyB9IC8vIE5vdCBjYWxsZWQgd2hlbiByZXF1ZXN0
LmRvd25sb2FkQXNCbG9iIGlzIHNldC4KKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVC
bG9iRGF0YShpbnQgLypsZW5ndGhSZWNlaXZlZCovKSB7IH0gLy8gT25seSBjYWxsZWQgZm9yIHJl
cXVlc3QuZG93bmxvYWRBc0Jsb2IKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRp
bmcodW5zaWduZWQgbG9uZyAvKmlkZW50aWZpZXIqLykgeyB9CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBkaWRGaW5pc2hMb2FkaW5nQmxvYih1bnNpZ25lZCBsb25nIC8qaWRlbnRpZmllciovLCBCbG9i
KikgeyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3Im
KSB7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWxSZWRpcmVjdENoZWNrKCkgeyB9CiAK
SW5kZXg6IFdlYkNvcmUvbG9hZGVyL1RocmVhZGFibGVMb2FkZXJDbGllbnRXcmFwcGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvVGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXIu
aAkocmV2aXNpb24gNjkzNjYpCisrKyBXZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxlTG9hZGVyQ2xp
ZW50V3JhcHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3NCwxMiBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgICAgICAgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVEYXRhKGRhdGEs
IGxlbmd0aFJlY2VpdmVkKTsKICAgICAgICAgfQogCisgICAgICAgIHZvaWQgZGlkUmVjZWl2ZUJs
b2JEYXRhKGludCBsZW5ndGhSZWNlaXZlZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1f
Y2xpZW50KQorICAgICAgICAgICAgICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlQmxvYkRhdGEobGVu
Z3RoUmVjZWl2ZWQpOworICAgICAgICB9CisKICAgICAgICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5n
KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikKICAgICAgICAgewogICAgICAgICAgICAgbV9kb25l
ID0gdHJ1ZTsKQEAgLTgxLDYgKzg3LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
ICAgICAgICBtX2NsaWVudC0+ZGlkRmluaXNoTG9hZGluZyhpZGVudGlmaWVyKTsKICAgICAgICAg
fQogCisgICAgICAgIHZvaWQgZGlkRmluaXNoTG9hZGluZ0Jsb2IodW5zaWduZWQgbG9uZyBpZGVu
dGlmaWVyLCBCbG9iKiBibG9iKQorICAgICAgICB7CisgICAgICAgICAgICBtX2RvbmUgPSB0cnVl
OworICAgICAgICAgICAgaWYgKG1fY2xpZW50KQorICAgICAgICAgICAgICAgIG1fY2xpZW50LT5k
aWRGaW5pc2hMb2FkaW5nQmxvYihpZGVudGlmaWVyLCBibG9iKTsKKyAgICAgICAgfQorCiAgICAg
ICAgIHZvaWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKICAgICAgICAgewog
ICAgICAgICAgICAgbV9kb25lID0gdHJ1ZTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1dvcmtlclRo
cmVhZGFibGVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1dvcmtlclRo
cmVhZGFibGVMb2FkZXIuY3BwCShyZXZpc2lvbiA2OTM2NikKKysrIFdlYkNvcmUvbG9hZGVyL1dv
cmtlclRocmVhZGFibGVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsNiArMTkxLDEy
IEBAIHN0YXRpYyB2b2lkIHdvcmtlckNvbnRleHREaWRSZWNlaXZlRGF0YSgKICAgICB3b3JrZXJD
bGllbnRXcmFwcGVyLT5kaWRSZWNlaXZlRGF0YSh2ZWN0b3JEYXRhLT5kYXRhKCksIHZlY3RvckRh
dGEtPnNpemUoKSk7CiB9CiAKK3N0YXRpYyB2b2lkIHdvcmtlckNvbnRleHREaWRSZWNlaXZlQmxv
YkRhdGEoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUmVmUHRyPFRocmVhZGFibGVM
b2FkZXJDbGllbnRXcmFwcGVyPiB3b3JrZXJDbGllbnRXcmFwcGVyLCBpbnQgbGVuZ3RoUmVjZWl2
ZWQpCit7CisgICAgQVNTRVJUX1VOVVNFRChjb250ZXh0LCBjb250ZXh0LT5pc1dvcmtlckNvbnRl
eHQoKSk7CisgICAgd29ya2VyQ2xpZW50V3JhcHBlci0+ZGlkUmVjZWl2ZUJsb2JEYXRhKGxlbmd0
aFJlY2VpdmVkKTsKK30KKwogdm9pZCBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFk
QnJpZGdlOjpkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoUmVjZWl2
ZWQpCiB7CiAgICAgT3duUHRyPFZlY3RvcjxjaGFyPiA+IHZlY3RvciA9IGFkb3B0UHRyKG5ldyBW
ZWN0b3I8Y2hhcj4obGVuZ3RoUmVjZWl2ZWQpKTsgLy8gbmVlZHMgdG8gYmUgYW4gT3duUHRyIGZv
ciB1c2FnZSB3aXRoIGNyZWF0ZUNhbGxiYWNrVGFzay4KQEAgLTE5OCw2ICsyMDQsMTEgQEAgdm9p
ZCBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQgogICAgIG1fbG9hZGVyUHJveHku
cG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KGNyZWF0ZUNhbGxiYWNrVGFzaygmd29ya2Vy
Q29udGV4dERpZFJlY2VpdmVEYXRhLCBtX3dvcmtlckNsaWVudFdyYXBwZXIsIHZlY3Rvci5yZWxl
YXNlKCkpLCBtX3Rhc2tNb2RlKTsKIH0KIAordm9pZCBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpN
YWluVGhyZWFkQnJpZGdlOjpkaWRSZWNlaXZlQmxvYkRhdGEoaW50IGxlbmd0aFJlY2VpdmVkKQor
eworICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KGNyZWF0
ZUNhbGxiYWNrVGFzaygmd29ya2VyQ29udGV4dERpZFJlY2VpdmVCbG9iRGF0YSwgbV93b3JrZXJD
bGllbnRXcmFwcGVyLCBsZW5ndGhSZWNlaXZlZCksIG1fdGFza01vZGUpOworfQorCiBzdGF0aWMg
dm9pZCB3b3JrZXJDb250ZXh0RGlkRmluaXNoTG9hZGluZyhTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBSZWZQdHI8VGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXI+IHdvcmtlckNs
aWVudFdyYXBwZXIsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikKIHsKICAgICBBU1NFUlRfVU5V
U0VEKGNvbnRleHQsIGNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKTsKQEAgLTIwOSw2ICsyMjAs
MjAgQEAgdm9pZCBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQgogICAgIG1fbG9h
ZGVyUHJveHkucG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KGNyZWF0ZUNhbGxiYWNrVGFz
aygmd29ya2VyQ29udGV4dERpZEZpbmlzaExvYWRpbmcsIG1fd29ya2VyQ2xpZW50V3JhcHBlciwg
aWRlbnRpZmllciksIG1fdGFza01vZGUpOwogfQogCitzdGF0aWMgdm9pZCB3b3JrZXJDb250ZXh0
RGlkRmluaXNoTG9hZGluZ0Jsb2IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUmVm
UHRyPFRocmVhZGFibGVMb2FkZXJDbGllbnRXcmFwcGVyPiB3b3JrZXJDbGllbnRXcmFwcGVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxv
bmcgaWRlbnRpZmllciwgS1VSTCBibG9iSUQsIFN0cmluZyB0eXBlLCBsb25nIGxvbmcgc2l6ZSkK
K3sKKyAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQsIGNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgp
KTsKKyAgICBSZWZQdHI8QmxvYj4gYmxvYiA9IEJsb2I6OmNyZWF0ZShibG9iSUQsIHR5cGUsIHNp
emUpOworICAgIHdvcmtlckNsaWVudFdyYXBwZXItPmRpZEZpbmlzaExvYWRpbmdCbG9iKGlkZW50
aWZpZXIsIGJsb2IuZ2V0KCkpOworfQorCit2b2lkIFdvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1h
aW5UaHJlYWRCcmlkZ2U6OmRpZEZpbmlzaExvYWRpbmdCbG9iKHVuc2lnbmVkIGxvbmcgaWRlbnRp
ZmllciwgQmxvYiogYmxvYikKK3sKKyAgICBtX2Rvd25sb2FkZWRCbG9iID0gYmxvYjsKKyAgICBt
X2xvYWRlclByb3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyQ29udGV4dChjcmVhdGVDYWxsYmFj
a1Rhc2soJndvcmtlckNvbnRleHREaWRGaW5pc2hMb2FkaW5nQmxvYiwgbV93b3JrZXJDbGllbnRX
cmFwcGVyLCBpZGVudGlmaWVyLCBibG9iLT51cmwoKSwgYmxvYi0+dHlwZSgpLCBibG9iLT5zaXpl
KCkpLCBtX3Rhc2tNb2RlKTsKK30KKwogc3RhdGljIHZvaWQgd29ya2VyQ29udGV4dERpZEZhaWwo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUmVmUHRyPFRocmVhZGFibGVMb2FkZXJD
bGllbnRXcmFwcGVyPiB3b3JrZXJDbGllbnRXcmFwcGVyLCBjb25zdCBSZXNvdXJjZUVycm9yJiBl
cnJvcikKIHsKICAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQsIGNvbnRleHQtPmlzV29ya2VyQ29u
dGV4dCgpKTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1dvcmtlclRocmVhZGFibGVMb2FkZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9Xb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmgJKHJl
dmlzaW9uIDY5MzY2KQorKysgV2ViQ29yZS9sb2FkZXIvV29ya2VyVGhyZWFkYWJsZUxvYWRlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsMTIgKzExNCwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkU2VuZERhdGEodW5zaWduZWQgbG9uZyBsb25n
IGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCk7CiAgICAg
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmKTsKICAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShjb25zdCBj
aGFyKiwgaW50IGxlbmd0aFJlY2VpdmVkKTsKKyAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRS
ZWNlaXZlQmxvYkRhdGEoaW50IGxlbmd0aFJlY2VpdmVkKTsKICAgICAgICAgICAgIHZpcnR1YWwg
dm9pZCBkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcik7CisgICAgICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZ0Jsb2IodW5zaWduZWQgbG9uZyBpZGVu
dGlmaWVyLCBCbG9iKik7CiAgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChjb25zdCBS
ZXNvdXJjZUVycm9yJik7CiAgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbFJlZGlyZWN0
Q2hlY2soKTsKICAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRp
b25DYW5jZWxsYXRpb24oY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogCi0gICAgICAgICAgICAv
LyBPbmx5IHRvIGJlIHVzZWQgb24gdGhlIG1haW4gdGhyZWFkLgorICAgICAgICAgICAgLy8gRm9y
IHVzZSBvbiBtYWluIHRocmVhZC4KICAgICAgICAgICAgIFJlZlB0cjxUaHJlYWRhYmxlTG9hZGVy
PiBtX21haW5UaHJlYWRMb2FkZXI7CiAKICAgICAgICAgICAgIC8vIFRocmVhZGFibGVMb2FkZXJD
bGllbnRXcmFwcGVyIGlzIHRvIGJlIHVzZWQgb24gdGhlIHdvcmtlciBjb250ZXh0IHRocmVhZC4K
QEAgLTEzMSw2ICsxMzMsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgICAgIC8v
IEZvciB1c2Ugb24gdGhlIG1haW4gdGhyZWFkLgogICAgICAgICAgICAgU3RyaW5nIG1fdGFza01v
ZGU7CisKKyAgICAgICAgICAgIC8vIEZvciB1c2Ugb24gdGhlIG1haW4gdGhyZWFkLgorICAgICAg
ICAgICAgUmVmUHRyPEJsb2I+IG1fZG93bmxvYWRlZEJsb2I7CiAgICAgICAgIH07CiAKICAgICAg
ICAgV29ya2VyVGhyZWFkYWJsZUxvYWRlcihXb3JrZXJDb250ZXh0KiwgVGhyZWFkYWJsZUxvYWRl
ckNsaWVudCosIGNvbnN0IFN0cmluZyYgdGFza01vZGUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYs
IGNvbnN0IFRocmVhZGFibGVMb2FkZXJPcHRpb25zJik7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAJKHJldmlzaW9uIDY5MzY2KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjUsMTIgKzI1LDE0IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZXNvdXJj
ZUhhbmRsZS5oIgotI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlSW50ZXJuYWwuaCIKIAorI2luY2x1
ZGUgIkJsb2IuaCIKICNpbmNsdWRlICJCbG9iUmVnaXN0cnkuaCIKICNpbmNsdWRlICJETlMuaCIK
KyNpbmNsdWRlICJIVFRQUGFyc2Vycy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRl
ICJSZXNvdXJjZUhhbmRsZUNsaWVudC5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlSW50ZXJu
YWwuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KIApAQCAtNTQs
NiArNTYsNyBAQCBSZXNvdXJjZUhhbmRsZTo6UmVzb3VyY2VIYW5kbGUoY29uc3QgUmVzCiAKIFBh
c3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IFJlc291cmNlSGFuZGxlOjpjcmVhdGUoTmV0d29ya2lu
Z0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3Vy
Y2VIYW5kbGVDbGllbnQqIGNsaWVudCwgYm9vbCBkZWZlcnNMb2FkaW5nLCBib29sIHNob3VsZENv
bnRlbnRTbmlmZikKIHsKKyAgICBBU1NFUlQoIXJlcXVlc3QuZG93bmxvYWRBc0Jsb2IoKSk7IC8v
IEZJWE1FOiBQcm92aWRlIGFuIGFzeW5jaHJvbm91cyBpbXBsZW1lbnRhdGlvbiB0aGF0IHJldHVy
bnMgYSBibG9iLCBwb3NzaWJseSBhIFJlc291cmNlSGFuZGxlQ2xpZW50V3JhcHBlci4KICNpZiBF
TkFCTEUoQkxPQikKICAgICBpZiAocmVxdWVzdC51cmwoKS5wcm90b2NvbElzKCJibG9iIikpIHsK
ICAgICAgICAgUGFzc1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gaGFuZGxlID0gYmxvYlJlZ2lzdHJ5
KCkuY3JlYXRlUmVzb3VyY2VIYW5kbGUocmVxdWVzdCwgY2xpZW50KTsKQEAgLTE4NSw0ICsxODgs
MTIgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6Y2FjaGVNZXRhZGF0YShjb25zdAogICAgIC8vIE9w
dGlvbmFsbHkgaW1wbGVtZW50ZWQgYnkgcGxhdGZvcm0uCiB9CiAKKy8vIHN0YXRpYworUGFzc1Jl
ZlB0cjxCbG9iPiBSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseUFzQmxv
YihOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3Rv
cmVkQ3JlZGVudGlhbHMsIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJikKK3sKKyAg
ICBBU1NFUlRfVU5VU0VEKHJlcXVlc3QsIHJlcXVlc3QuZG93bmxvYWRBc0Jsb2IoKSk7CisgICAg
Ly8gRklYTUU6IFByb3ZpZGUgYSBzeW5jaHJvbm91cyBpbXBsZW1lbnRhdGlvbiB0aGF0IHJldHVy
bnMgYSBibG9iLgorICAgIHJldHVybiAwOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAkocmV2aXNpb24g
NjkzNjYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNzQsNiArNzQsNyBAQCB0eXBlZGVmIHN0cnVjdCBPcGFxdWVDRkhUVFBD
b29raWVTdG9yYWdlCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlOworY2xhc3MgQmxvYjsKIGNsYXNzIENyZWRlbnRpYWw7CiBjbGFzcyBGb3JtRGF0
YTsKIGNsYXNzIEZyYW1lOwpAQCAtOTcsNiArOTgsNyBAQCBjbGFzcyBSZXNvdXJjZUhhbmRsZSA6
IHB1YmxpYyBSZWZDb3VudGVkCiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVzb3Vy
Y2VIYW5kbGU+IGNyZWF0ZShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVxdWVz
dCYsIFJlc291cmNlSGFuZGxlQ2xpZW50KiwgYm9vbCBkZWZlcnNMb2FkaW5nLCBib29sIHNob3Vs
ZENvbnRlbnRTbmlmZik7CiAgICAgc3RhdGljIHZvaWQgbG9hZFJlc291cmNlU3luY2hyb25vdXNs
eShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFN0b3JlZENyZWRl
bnRpYWxzLCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYg
ZGF0YSk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYj4gbG9hZFJlc291cmNlU3luY2hyb25v
dXNseUFzQmxvYihOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFN0
b3JlZENyZWRlbnRpYWxzLCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYpOwogCiAg
ICAgc3RhdGljIHZvaWQgcHJlcGFyZUZvclVSTChjb25zdCBLVVJMJik7CiAgICAgc3RhdGljIGJv
b2wgd2lsbExvYWRGcm9tQ2FjaGUoUmVzb3VyY2VSZXF1ZXN0JiwgRnJhbWUqKTsKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUNsaWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUNsaWVudC5oCShyZXZp
c2lvbiA2OTM2NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUNs
aWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIFJlc291cmNl
SGFuZGxlQ2xpZW50X2gKIAogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CiAKQEAgLTQ2LDYgKzQ3LDcgQEAgY2xhc3MgTlNDYWNoZWRVUkxSZXNw
b25zZTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEFzeW5jRmlsZVN0cmVhbTsK
KyAgICBjbGFzcyBCbG9iOwogICAgIGNsYXNzIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOwogICAg
IGNsYXNzIENyZWRlbnRpYWw7CiAgICAgY2xhc3MgRmlsZVN0cmVhbUNsaWVudDsKQEAgLTcyLDgg
Kzc0LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlk
UmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYp
IHsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoUmVzb3VyY2VIYW5kbGUq
LCBjb25zdCBjaGFyKiwgaW50LCBpbnQgLypsZW5ndGhSZWNlaXZlZCovKSB7IH0KKyAgICAgICAg
dmlydHVhbCB2b2lkIGRpZFJlY2VpdmVCbG9iRGF0YShSZXNvdXJjZUhhbmRsZSosIGludCkgeyB9
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEoUmVzb3VyY2VI
YW5kbGUqLCBjb25zdCBjaGFyKiwgaW50KSB7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZp
bmlzaExvYWRpbmcoUmVzb3VyY2VIYW5kbGUqLCBkb3VibGUgLypmaW5pc2hUaW1lKi8pIHsgfQor
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZ0Jsb2IoUmVzb3VyY2VIYW5kbGUq
LCBkb3VibGUgLypmaW5pc2hUaW1lKi8sIEJsb2IqKSB7IH0KICAgICAgICAgdmlydHVhbCB2b2lk
IGRpZEZhaWwoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZUVycm9yJikgeyB9CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCB3YXNCbG9ja2VkKFJlc291cmNlSGFuZGxlKikgeyB9CiAgICAgICAg
IHZpcnR1YWwgdm9pZCBjYW5ub3RTaG93VVJMKFJlc291cmNlSGFuZGxlKikgeyB9CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCShy
ZXZpc2lvbiA2OTM2NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVl
c3RCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQCBQYXNzT3duUHRyPFJl
c291cmNlUmVxdWVzdD4gUmVzb3VyY2VSZXF1CiAgICAgcmVxdWVzdC0+c2V0Rmlyc3RQYXJ0eUZv
ckNvb2tpZXMoZGF0YS0+bV9maXJzdFBhcnR5Rm9yQ29va2llcyk7CiAgICAgcmVxdWVzdC0+c2V0
SFRUUE1ldGhvZChkYXRhLT5tX2h0dHBNZXRob2QpOwogICAgIHJlcXVlc3QtPnNldFRhcmdldFR5
cGUoZGF0YS0+bV90YXJnZXRUeXBlKTsKKyAgICByZXF1ZXN0LT5zZXREb3dubG9hZEFzQmxvYihk
YXRhLT5tX2Rvd25sb2FkQXNCbG9iKTsKIAogICAgIHJlcXVlc3QtPnVwZGF0ZVJlc291cmNlUmVx
dWVzdCgpOwogICAgIHJlcXVlc3QtPm1faHR0cEhlYWRlckZpZWxkcy5hZG9wdChkYXRhLT5tX2h0
dHBIZWFkZXJzLnJlbGVhc2UoKSk7CkBAIC03OSw2ICs4MCw3IEBAIFBhc3NPd25QdHI8Q3Jvc3NU
aHJlYWRSZXNvdXJjZVJlcXVlc3REYXQKICAgICBkYXRhLT5tX2h0dHBNZXRob2QgPSBodHRwTWV0
aG9kKCkuY3Jvc3NUaHJlYWRTdHJpbmcoKTsKICAgICBkYXRhLT5tX2h0dHBIZWFkZXJzID0gaHR0
cEhlYWRlckZpZWxkcygpLmNvcHlEYXRhKCk7CiAgICAgZGF0YS0+bV90YXJnZXRUeXBlID0gbV90
YXJnZXRUeXBlOworICAgIGRhdGEtPm1fZG93bmxvYWRBc0Jsb2IgPSBtX2Rvd25sb2FkQXNCbG9i
OwogCiAgICAgZGF0YS0+bV9yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJh
Y2tBcnJheS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fcmVzcG9uc2VDb250ZW50RGlzcG9zaXRp
b25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkuc2l6ZSgpKTsKICAgICBzaXplX3QgZW5jb2RpbmdBcnJh
eVNpemUgPSBtX3Jlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5
LnNpemUoKTsKQEAgLTM0MSw3ICszNDMsMTAgQEAgYm9vbCBlcXVhbElnbm9yaW5nSGVhZGVyRmll
bGRzKGNvbnN0IFJlcwogICAgIAogICAgIGlmIChhLmFsbG93Q29va2llcygpICE9IGIuYWxsb3dD
b29raWVzKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKworICAgIGlmIChhLmRvd25s
b2FkQXNCbG9iKCkgIT0gYi5kb3dubG9hZEFzQmxvYigpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKICAgICBGb3JtRGF0YSogZm9ybURhdGFBID0gYS5odHRwQm9keSgpOwogICAgIEZvcm1EYXRh
KiBmb3JtRGF0YUIgPSBiLmh0dHBCb2R5KCk7CiAgICAgCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmgJKHJldmlzaW9uIDY5MzY2KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMTQ0LDYgKzE0NCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFRh
cmdldFR5cGUgdGFyZ2V0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0VHlwZTsgfQogICAg
ICAgICB2b2lkIHNldFRhcmdldFR5cGUoVGFyZ2V0VHlwZSB0eXBlKSB7IG1fdGFyZ2V0VHlwZSA9
IHR5cGU7IH0KIAorICAgICAgICAvLyBJZiB0cnVlLCB0aGUgcmVzcG9uc2UgYm9keSB3aWxsIGJl
IHByb3ZpZGVkIGFzIGEgYmxvYi4KKyAgICAgICAgYm9vbCBkb3dubG9hZEFzQmxvYigpIGNvbnN0
IHsgcmV0dXJuIG1fZG93bmxvYWRBc0Jsb2I7IH0KKyAgICAgICAgdm9pZCBzZXREb3dubG9hZEFz
QmxvYihib29sIGRvd25sb2FkKSB7IG1fZG93bmxvYWRBc0Jsb2IgPSBkb3dubG9hZDsgfQorCiAg
ICAgICAgIHN0YXRpYyBib29sIGNvbXBhcmUoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0Jik7CiAKICAgICBwcm90ZWN0ZWQ6CkBAIC0xNTUsNiArMTU5LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgLCBtX3JlcG9ydExvYWRUaW1pbmcoZmFs
c2UpCiAgICAgICAgICAgICAsIG1fcmVwb3J0UmF3SGVhZGVycyhmYWxzZSkKICAgICAgICAgICAg
ICwgbV90YXJnZXRUeXBlKFRhcmdldElzU3VicmVzb3VyY2UpCisgICAgICAgICAgICAsIG1fZG93
bmxvYWRBc0Jsb2IoZmFsc2UpCiAgICAgICAgIHsKICAgICAgICAgfQogCkBAIC0xNzAsNiArMTc1
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgLCBtX3JlcG9ydExvYWRUaW1p
bmcoZmFsc2UpCiAgICAgICAgICAgICAsIG1fcmVwb3J0UmF3SGVhZGVycyhmYWxzZSkKICAgICAg
ICAgICAgICwgbV90YXJnZXRUeXBlKFRhcmdldElzU3VicmVzb3VyY2UpCisgICAgICAgICAgICAs
IG1fZG93bmxvYWRBc0Jsb2IoZmFsc2UpCiAgICAgICAgIHsKICAgICAgICAgfQogCkBAIC0xOTUs
NiArMjAxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIG1fcmVwb3J0TG9h
ZFRpbWluZzsKICAgICAgICAgYm9vbCBtX3JlcG9ydFJhd0hlYWRlcnM7CiAgICAgICAgIFRhcmdl
dFR5cGUgbV90YXJnZXRUeXBlOworICAgICAgICBib29sIG1fZG93bmxvYWRBc0Jsb2I7CiAKICAg
ICBwcml2YXRlOgogICAgICAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIGFzUmVzb3VyY2VSZXF1
ZXN0KCkgY29uc3Q7CkBAIC0yMTgsNiArMjI1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICBSZWZQdHI8Rm9ybURhdGE+IG1faHR0cEJvZHk7CiAgICAgICAgIGJvb2wgbV9hbGxvd0Nv
b2tpZXM7CiAgICAgICAgIFJlc291cmNlUmVxdWVzdEJhc2U6OlRhcmdldFR5cGUgbV90YXJnZXRU
eXBlOworICAgICAgICBib29sIG1fZG93bmxvYWRBc0Jsb2I7CiAgICAgfTsKICAgICAKICAgICB1
bnNpZ25lZCBpbml0aWFsaXplTWF4aW11bUhUVFBDb25uZWN0aW9uQ291bnRQZXJIb3N0KCk7Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFz
ZS5jcHAJKHJldmlzaW9uIDY5MzY2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlUmVzcG9uc2VCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcyLDYgKzE3MiwxMyBAQCB2
b2lkIFJlc291cmNlUmVzcG9uc2VCYXNlOjpzZXRNaW1lVHlwZShjCiAgICAgbV9taW1lVHlwZSA9
IG1pbWVUeXBlOyAKIH0KIAorU3RyaW5nIFJlc291cmNlUmVzcG9uc2VCYXNlOjpleHRyYWN0TWlt
ZVR5cGUoKSBjb25zdAoreworICAgIGlmIChpc0hUVFAoKSkKKyAgICAgICAgcmV0dXJuIGV4dHJh
Y3RNSU1FVHlwZUZyb21NZWRpYVR5cGUoaHR0cEhlYWRlckZpZWxkKCJDb250ZW50LVR5cGUiKSk7
CisgICAgcmV0dXJuIG1pbWVUeXBlKCk7Cit9CisKIGxvbmcgbG9uZyBSZXNvdXJjZVJlc3BvbnNl
QmFzZTo6ZXhwZWN0ZWRDb250ZW50TGVuZ3RoKCkgY29uc3QgCiB7CiAgICAgbGF6eUluaXQoKTsK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFz
ZS5oCShyZXZpc2lvbiA2OTM2NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJj
ZVJlc3BvbnNlQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1Niw3IEBAIHB1YmxpYzoK
IAogICAgIGNvbnN0IFN0cmluZyYgbWltZVR5cGUoKSBjb25zdDsKICAgICB2b2lkIHNldE1pbWVU
eXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworICAgIFN0cmluZyBleHRyYWN0TWltZVR5cGUo
KSBjb25zdDsKIAogICAgIGxvbmcgbG9uZyBleHBlY3RlZENvbnRlbnRMZW5ndGgoKSBjb25zdDsK
ICAgICB2b2lkIHNldEV4cGVjdGVkQ29udGVudExlbmd0aChsb25nIGxvbmcgZXhwZWN0ZWRDb250
ZW50TGVuZ3RoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNv
dXJjZVJlcXVlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hy
b21pdW0vUmVzb3VyY2VSZXF1ZXN0LmgJKHJldmlzaW9uIDY5MzY2KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2Nocm9taXVtL1Jlc291cmNlUmVxdWVzdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC04NCw2ICs4NCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgaW50IGFwcENhY2hl
SG9zdElEKCkgY29uc3QgeyByZXR1cm4gbV9hcHBDYWNoZUhvc3RJRDsgfQogICAgICAgICB2b2lk
IHNldEFwcENhY2hlSG9zdElEKGludCBpZCkgeyBtX2FwcENhY2hlSG9zdElEID0gaWQ7IH0KIAor
ICAgICAgICBib29sIGRvd25sb2FkVG9GaWxlKCkgY29uc3QgeyByZXR1cm4gZG93bmxvYWRBc0Js
b2IoKTsgfQorICAgICAgICB2b2lkIHNldERvd25sb2FkVG9GaWxlKGJvb2wgZG93bmxvYWQpIHsg
c2V0RG93bmxvYWRBc0Jsb2IoZG93bmxvYWQpOyB9CisKICAgICBwcml2YXRlOgogICAgICAgICBm
cmllbmQgY2xhc3MgUmVzb3VyY2VSZXF1ZXN0QmFzZTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2Nocm9taXVtL1Jlc291cmNlUmVzcG9uc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlc3BvbnNlLmNwcAkocmV2
aXNpb24gNjkzNjYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vUmVzb3Vy
Y2VSZXNwb25zZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDE4IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorY29uc3QgU3RyaW5nJiBSZXNvdXJjZVJlc3BvbnNlOjpkb3dubG9h
ZEZpbGVQYXRoKCkgY29uc3QKK3sKKyAgICBsYXp5SW5pdCgpOworICAgIHJldHVybiBtX2Rvd25s
b2FkRmlsZVBhdGg7Cit9CisKK3ZvaWQgUmVzb3VyY2VSZXNwb25zZTo6c2V0RG93bmxvYWRGaWxl
UGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgbGF6eUluaXQoKTsKKyAgICBtX2Rvd25s
b2FkRmlsZVBhdGggPSBwYXRoOworfQorCiBQYXNzT3duUHRyPENyb3NzVGhyZWFkUmVzb3VyY2VS
ZXNwb25zZURhdGE+IFJlc291cmNlUmVzcG9uc2U6OmRvUGxhdGZvcm1Db3B5RGF0YShQYXNzT3du
UHRyPENyb3NzVGhyZWFkUmVzb3VyY2VSZXNwb25zZURhdGE+IGRhdGEpIGNvbnN0CiB7CiAgICAg
ZGF0YS0+bV9hcHBDYWNoZUlEID0gbV9hcHBDYWNoZUlEOwpAQCAtMzksNiArNTEsNyBAQCBQYXNz
T3duUHRyPENyb3NzVGhyZWFkUmVzb3VyY2VSZXNwb25zZURhCiAgICAgZGF0YS0+bV93YXNBbHRl
cm5hdGVQcm90b2NvbEF2YWlsYWJsZSA9IG1fd2FzQWx0ZXJuYXRlUHJvdG9jb2xBdmFpbGFibGU7
CiAgICAgZGF0YS0+bV93YXNGZXRjaGVkVmlhUHJveHkgPSBtX3dhc0ZldGNoZWRWaWFQcm94eTsK
ICAgICBkYXRhLT5tX3Jlc3BvbnNlVGltZSA9IG1fcmVzcG9uc2VUaW1lOworICAgIGRhdGEtPm1f
ZG93bmxvYWRGaWxlUGF0aCA9IG1fZG93bmxvYWRGaWxlUGF0aDsKICAgICByZXR1cm4gZGF0YTsK
IH0KIApAQCAtNTMsNiArNjYsNyBAQCB2b2lkIFJlc291cmNlUmVzcG9uc2U6OmRvUGxhdGZvcm1B
ZG9wdChQCiAgICAgbV93YXNBbHRlcm5hdGVQcm90b2NvbEF2YWlsYWJsZSA9IGRhdGEtPm1fd2Fz
QWx0ZXJuYXRlUHJvdG9jb2xBdmFpbGFibGU7CiAgICAgbV93YXNGZXRjaGVkVmlhUHJveHkgPSBk
YXRhLT5tX3dhc0ZldGNoZWRWaWFQcm94eTsKICAgICBtX3Jlc3BvbnNlVGltZSA9IGRhdGEtPm1f
cmVzcG9uc2VUaW1lOworICAgIG1fZG93bmxvYWRGaWxlUGF0aCA9IGRhdGEtPm1fZG93bmxvYWRG
aWxlUGF0aDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2Nocm9taXVtL1Jlc291cmNlUmVzcG9uc2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vUmVzb3VyY2VSZXNwb25zZS5oCShyZXZp
c2lvbiA2OTM2NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNvdXJj
ZVJlc3BvbnNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTk2LDYgKzk2LDEzIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgZG91YmxlIHJlc3BvbnNlVGltZSgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVzcG9uc2VUaW1lOyB9CiAgICAgICAgIHZvaWQgc2V0UmVzcG9uc2VUaW1lKGRvdWJsZSByZXNw
b25zZVRpbWUpIHsgbV9yZXNwb25zZVRpbWUgPSByZXNwb25zZVRpbWU7IH0KIAorICAgICAgICAv
LyBJbmRpY2F0ZXMgdGhlIGxvY2F0aW9uIG9mIGEgZG93bmxvYWRlZCByZXNwb25zZSBpZiB0aGUK
KyAgICAgICAgLy8gUmVzb3VyY2VSZXF1ZXN0IGhhZCB0aGUgZG93bmxvYWRUb0ZpbGUvQmxvYiBm
bGFnIHNldCB0byB0cnVlLgorICAgICAgICAvLyBUaGUgZmlsZSB3aWxsIHJlbWFpbiB2YWxpZCB1
bnRpbCB0aGUgUmVzb3VyY2VIYW5kbGUgdXNlZAorICAgICAgICAvLyB0byByZXRyaWV2ZSB0aGlz
IGZpbGUgaGFzIGJlZW4gZGVsZXRlZC4KKyAgICAgICAgY29uc3QgU3RyaW5nJiBkb3dubG9hZEZp
bGVQYXRoKCkgY29uc3Q7CisgICAgICAgIHZvaWQgc2V0RG93bmxvYWRGaWxlUGF0aChjb25zdCBT
dHJpbmcmIHBhdGgpOworCiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIFJlc291
cmNlUmVzcG9uc2VCYXNlOwogCkBAIC0xNDMsNiArMTUwLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICAvLyBUaGUgdGltZSBhdCB3aGljaCB0aGUgcmVzcG9uc2UgaGVhZGVycyB3ZXJl
IHJlY2VpdmVkLiAgRm9yIGNhY2hlZAogICAgICAgICAvLyByZXNwb25zZXMsIHRoaXMgdGltZSBj
b3VsZCBiZSAiZmFyIiBpbiB0aGUgcGFzdC4KICAgICAgICAgZG91YmxlIG1fcmVzcG9uc2VUaW1l
OworCisgICAgICAgIC8vIFRoZSByZXN1bHRpbmcgZG93bmxvYWRlZCBmaWxlIHBhdGggaW4gdGhl
IHJlcXVlc3QuZG93bmxvYWRUb0ZpbGUgY2FzZS4KKyAgICAgICAgU3RyaW5nIG1fZG93bmxvYWRG
aWxlUGF0aDsKICAgICB9OwogCiAgICAgc3RydWN0IENyb3NzVGhyZWFkUmVzb3VyY2VSZXNwb25z
ZURhdGEgOiBwdWJsaWMgQ3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0YUJhc2UgewpAQCAt
MTU1LDYgKzE2NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX3dhc0Fs
dGVybmF0ZVByb3RvY29sQXZhaWxhYmxlOwogICAgICAgICBib29sIG1fd2FzRmV0Y2hlZFZpYVBy
b3h5OwogICAgICAgICBkb3VibGUgbV9yZXNwb25zZVRpbWU7CisgICAgICAgIFN0cmluZyBtX2Rv
d25sb2FkRmlsZVBhdGg7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
V2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1s
L1hNTEh0dHBSZXF1ZXN0LmNwcAkocmV2aXNpb24gNjkzNjYpCisrKyBXZWJDb3JlL3htbC9YTUxI
dHRwUmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3NSw2ICs1NzUsMTAgQEAgdm9pZCBY
TUxIdHRwUmVxdWVzdDo6Y3JlYXRlUmVxdWVzdChFeGNlcAogICAgIGlmIChtX3JlcXVlc3RIZWFk
ZXJzLnNpemUoKSA+IDApCiAgICAgICAgIHJlcXVlc3QuYWRkSFRUUEhlYWRlckZpZWxkcyhtX3Jl
cXVlc3RIZWFkZXJzKTsKIAorI2lmIEVOQUJMRShYSFJfUkVTUE9OU0VfQkxPQikKKyAgICByZXF1
ZXN0LnNldERvd25sb2FkQXNCbG9iKG1fYXNCbG9iKTsKKyNlbmRpZgorCiAgICAgVGhyZWFkYWJs
ZUxvYWRlck9wdGlvbnMgb3B0aW9uczsKICAgICBvcHRpb25zLnNlbmRMb2FkQ2FsbGJhY2tzID0g
dHJ1ZTsKICAgICBvcHRpb25zLnNuaWZmQ29udGVudCA9IGZhbHNlOwpAQCAtODU0LDE1ICs4NTgs
MTAgQEAgU3RyaW5nIFhNTEh0dHBSZXF1ZXN0OjpnZXRSZXNwb25zZUhlYWRlcgogU3RyaW5nIFhN
TEh0dHBSZXF1ZXN0OjpyZXNwb25zZU1JTUVUeXBlKCkgY29uc3QKIHsKICAgICBTdHJpbmcgbWlt
ZVR5cGUgPSBleHRyYWN0TUlNRVR5cGVGcm9tTWVkaWFUeXBlKG1fbWltZVR5cGVPdmVycmlkZSk7
Ci0gICAgaWYgKG1pbWVUeXBlLmlzRW1wdHkoKSkgewotICAgICAgICBpZiAobV9yZXNwb25zZS5p
c0hUVFAoKSkKLSAgICAgICAgICAgIG1pbWVUeXBlID0gZXh0cmFjdE1JTUVUeXBlRnJvbU1lZGlh
VHlwZShtX3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZCgiQ29udGVudC1UeXBlIikpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBtaW1lVHlwZSA9IG1fcmVzcG9uc2UubWltZVR5cGUoKTsKLSAg
ICB9CisgICAgaWYgKG1pbWVUeXBlLmlzRW1wdHkoKSkKKyAgICAgICAgbWltZVR5cGUgPSBtX3Jl
c3BvbnNlLmV4dHJhY3RNaW1lVHlwZSgpOwogICAgIGlmIChtaW1lVHlwZS5pc0VtcHR5KCkpCiAg
ICAgICAgIG1pbWVUeXBlID0gInRleHQveG1sIjsKLQogICAgIHJldHVybiBtaW1lVHlwZTsKIH0K
IApAQCAtOTQ0LDEwICs5NDMsNiBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRGaW5pc2hMb2Fk
aW5nKHVuCiAgICAgaWYgKG1fZGVjb2RlcikKICAgICAgICAgbV9yZXNwb25zZVRleHQgKz0gbV9k
ZWNvZGVyLT5mbHVzaCgpOwogCi0jaWYgRU5BQkxFKFhIUl9SRVNQT05TRV9CTE9CKQotICAgIC8v
IEZJWE1FOiBTZXQgbV9yZXNwb25zZUJsb2IgdG8gc29tZXRoaW5nIGhlcmUgaW4gdGhlIG1fYXNC
bG9iIGNhc2UuCi0jZW5kaWYKLQogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgaWYgKEluc3Bl
Y3RvckNvbnRyb2xsZXIqIGluc3BlY3RvciA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aW5z
cGVjdG9yQ29udHJvbGxlcigpKQogICAgICAgICBpbnNwZWN0b3ItPnJlc291cmNlUmV0cmlldmVk
QnlYTUxIdHRwUmVxdWVzdChpZGVudGlmaWVyLCBtX3Jlc3BvbnNlVGV4dCwgbV91cmwsIG1fbGFz
dFNlbmRVUkwsIG1fbGFzdFNlbmRMaW5lTnVtYmVyKTsKQEAgLTk2Myw2ICs5NTgsMTkgQEAgdm9p
ZCBYTUxIdHRwUmVxdWVzdDo6ZGlkRmluaXNoTG9hZGluZyh1bgogICAgICAgICBkcm9wUHJvdGVj
dGlvbigpOwogfQogCit2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRGaW5pc2hMb2FkaW5nQmxvYih1
bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIEJsb2IqIGJsb2IpCit7CisjaWYgRU5BQkxFKFhIUl9S
RVNQT05TRV9CTE9CKQorICAgIGlmICghbV9lcnJvcikKKyAgICAgICAgbV9yZXNwb25zZUJsb2Ig
PSBibG9iOworICAgIGRpZEZpbmlzaExvYWRpbmcoaWRlbnRpZmllcik7CisjZWxzZQorICAgIFVO
VVNFRF9QQVJBTShpZGVudGlmaWVyKTsKKyAgICBVTlVTRURfUEFSQU0oYmxvYik7CisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKK30KKwogdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlk
U2VuZERhdGEodW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25n
IHRvdGFsQnl0ZXNUb0JlU2VudCkKIHsKICAgICBpZiAoIW1fdXBsb2FkKQpAQCAtOTkxLDcgKzk5
OSwyMyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRSZWNlaXZlQXV0aGVudGljCiAgICAgbV9y
ZXNwb25zZSA9IGZhaWx1cmVSZXNwb25zZTsKIH0KIAotdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlk
UmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbikKK3ZvaWQgWE1MSHR0cFJlcXVl
c3Q6OmRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCit7CisgICAg
ZGlkUmVjZWl2ZURhdGFDb21tb24oUmVzcG9uc2VBc0RhdGEsIGRhdGEsIGxlbmd0aCk7Cit9CisK
K3ZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpZFJlY2VpdmVCbG9iRGF0YShpbnQgbGVuZ3RoKQorewor
I2lmIEVOQUJMRShYSFJfUkVTUE9OU0VfQkxPQikKKyAgICBBU1NFUlQobGVuZ3RoID49IDApOwor
ICAgIGRpZFJlY2VpdmVEYXRhQ29tbW9uKFJlc3BvbnNlQXNCbG9iLCAwLCBsZW5ndGgpOworI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0obGVuZ3RoKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyNlbmRpZgorfQorCit2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRSZWNlaXZlRGF0YUNvbW1vbihS
ZXNwb25zZUFzTW9kZSByZXNwb25zZUFzLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQog
ewogICAgIGlmIChtX2Vycm9yKQogICAgICAgICByZXR1cm47CkBAIC05OTksNyArMTAyMyw4IEBA
IHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpZFJlY2VpdmVEYXRhKGNvbnMKICAgICBpZiAobV9zdGF0
ZSA8IEhFQURFUlNfUkVDRUlWRUQpCiAgICAgICAgIGNoYW5nZVN0YXRlKEhFQURFUlNfUkVDRUlW
RUQpOwogCi0gICAgaWYgKCFtX2RlY29kZXIpIHsKKyAgICBpZiAoZGF0YSAmJiAhbV9kZWNvZGVy
KSB7CisgICAgICAgIEFTU0VSVChyZXNwb25zZUFzID09IFJlc3BvbnNlQXNEYXRhKTsKICAgICAg
ICAgaWYgKCFtX3Jlc3BvbnNlRW5jb2RpbmcuaXNFbXB0eSgpKQogICAgICAgICAgICAgbV9kZWNv
ZGVyID0gVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKCJ0ZXh0L3BsYWluIiwgbV9yZXNwb25z
ZUVuY29kaW5nKTsKICAgICAgICAgLy8gYWxsb3cgVGV4dFJlc291cmNlRGVjb2RlciB0byBsb29r
IGluc2lkZSB0aGUgbV9yZXNwb25zZSBpZiBpdCdzIFhNTCBvciBIVE1MCkBAIC0xMDEzLDE3ICsx
MDM4LDE5IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpZFJlY2VpdmVEYXRhKGNvbnMKICAgICAg
ICAgICAgIG1fZGVjb2RlciA9IFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZSgidGV4dC9wbGFp
biIsICJVVEYtOCIpOwogICAgIH0KIAotICAgIGlmICghbGVuKQotICAgICAgICByZXR1cm47Cisg
ICAgaWYgKHJlc3BvbnNlQXMgPT0gUmVzcG9uc2VBc0RhdGEpIHsKKyAgICAgICAgaWYgKCFsZW5n
dGgpCisgICAgICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobGVuID09IC0xKQotICAgICAgICBs
ZW4gPSBzdHJsZW4oZGF0YSk7CisgICAgICAgIGlmIChsZW5ndGggPT0gLTEpIAorICAgICAgICAg
ICAgbGVuZ3RoID0gc3RybGVuKGRhdGEpOwogCi0gICAgbV9yZXNwb25zZVRleHQgKz0gbV9kZWNv
ZGVyLT5kZWNvZGUoZGF0YSwgbGVuKTsKKyAgICAgICAgbV9yZXNwb25zZVRleHQgKz0gbV9kZWNv
ZGVyLT5kZWNvZGUoZGF0YSwgbGVuZ3RoKTsKKyAgICB9CiAKICAgICBpZiAoIW1fZXJyb3IpIHsK
ICAgICAgICAgbG9uZyBsb25nIGV4cGVjdGVkTGVuZ3RoID0gbV9yZXNwb25zZS5leHBlY3RlZENv
bnRlbnRMZW5ndGgoKTsKLSAgICAgICAgbV9yZWNlaXZlZExlbmd0aCArPSBsZW47CisgICAgICAg
IG1fcmVjZWl2ZWRMZW5ndGggKz0gbGVuZ3RoOwogCiAgICAgICAgIGlmIChtX2FzeW5jKSB7CiAg
ICAgICAgICAgICBib29sIGxlbmd0aENvbXB1dGFibGUgPSBleHBlY3RlZExlbmd0aCAmJiBtX3Jl
Y2VpdmVkTGVuZ3RoIDw9IGV4cGVjdGVkTGVuZ3RoOwpJbmRleDogV2ViQ29yZS94bWwvWE1MSHR0
cFJlcXVlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5oCShy
ZXZpc2lvbiA2OTM2NikKKysrIFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTExMSw2ICsxMTEsMTEgQEAgcHVibGljOgogICAgIHVzaW5nIFJlZkNvdW50ZWQ8
WE1MSHR0cFJlcXVlc3Q+OjpkZXJlZjsKIAogcHJpdmF0ZToKKyAgICBlbnVtIFJlc3BvbnNlQXNN
b2RlICB7CisgICAgICAgIFJlc3BvbnNlQXNEYXRhLAorICAgICAgICBSZXNwb25zZUFzQmxvYgor
ICAgIH07CisKICAgICBYTUxIdHRwUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJlZigpOyB9CkBAIC0xMjcsMTEg
KzEzMiwxNSBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YSh1bnNpZ25l
ZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVT
ZW50KTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciog
ZGF0YSwgaW50IGxlbmd0aFJlY2VpdmVkKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUJs
b2JEYXRhKGludCBsZW5ndGhSZWNlaXZlZCk7CiAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExv
YWRpbmcodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmlu
aXNoTG9hZGluZ0Jsb2IodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBCbG9iKik7CiAgICAgdmly
dHVhbCB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpOwogICAgIHZpcnR1YWwgdm9p
ZCBkaWRGYWlsUmVkaXJlY3RDaGVjaygpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQXV0
aGVudGljYXRpb25DYW5jZWxsYXRpb24oY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogCisgICAg
dm9pZCBkaWRSZWNlaXZlRGF0YUNvbW1vbihSZXNwb25zZUFzTW9kZSwgY29uc3QgY2hhciosIGlu
dCBsZW5ndGhSZWNlaXZlZCk7CisKICAgICBTdHJpbmcgcmVzcG9uc2VNSU1FVHlwZSgpIGNvbnN0
OwogICAgIGJvb2wgcmVzcG9uc2VJc1hNTCgpIGNvbnN0OwogCkluZGV4OiBXZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDY5MzY2KQorKysgV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDMzIEBACisyMDEwLTEwLTA1ICBNaWNoYWVsIE5vcmRtYW4gIDxtaWNoYWVs
bkBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEFkZCBzdXBwb3J0IGZvciBnZXR0aW5nIHRoZSByZXN1bHQgb2YgYSByZXNvdXJjZSBy
ZXF1ZXN0IGFzIGEgYmxvYi4KKyAgICAgICAgSW4gQ2hyb21lLCB0aGlzIGZlYXR1cmUgaXMgaW1w
bGVtZW50ZWQgaW4gdGVybXMgb2YgdGhlICdkb3dubG9hZFRvRmlsZScKKyAgICAgICAgZmVhdHVy
ZSBvZiB0aGUgbmV0d29yayBzdGFjay4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQ0NzIyCisKKyAgICAgICAgKiBzcmMvUmVzb3VyY2VIYW5kbGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6UmVzb3VyY2VIYW5k
bGVJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUludGVybmFsOjpk
aWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVJbnRl
cm5hbDo6ZGlkRG93bmxvYWREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxl
SW50ZXJuYWw6OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VI
YW5kbGVJbnRlcm5hbDo6ZGV0ZXJtaW5lQ29udGVudFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25v
dXNseUFzQmxvYik6CisgICAgICAgICogc3JjL1dlYlVSTFJlcXVlc3QuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJVUkxSZXF1ZXN0UHJpdmF0ZUltcGw6OldlYlVSTFJlcXVlc3RQcml2YXRlSW1w
bCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlcXVlc3Q6OmRvd25sb2FkVG9GaWxlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVVJMUmVxdWVzdDo6c2V0RG93bmxvYWRUb0ZpbGUpOgorICAgICAg
ICAqIHNyYy9XZWJVUkxSZXF1ZXN0UHJpdmF0ZS5oOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxS
ZXF1ZXN0UHJpdmF0ZTo6V2ViVVJMUmVxdWVzdFByaXZhdGUpOgorICAgICAgICAqIHNyYy9XZWJV
UkxSZXNwb25zZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlc3BvbnNlUHJpdmF0ZUlt
cGw6OldlYlVSTFJlc3BvbnNlUHJpdmF0ZUltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxS
ZXNwb25zZTo6ZG93bmxvYWRGaWxlUGF0aCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlc3Bv
bnNlOjpzZXREb3dubG9hZEZpbGVQYXRoKToKKyAgICAgICAgKiBzcmMvV2ViVVJMUmVzcG9uc2VQ
cml2YXRlLmg6CisKIDIwMTAtMTAtMDcgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBUb255IENoYW5nLgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3Ny
Yy9SZXNvdXJjZUhhbmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9S
ZXNvdXJjZUhhbmRsZS5jcHAJKHJldmlzaW9uIDY5MzY2KQorKysgV2ViS2l0L2Nocm9taXVtL3Ny
Yy9SZXNvdXJjZUhhbmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgogCisjaW5jbHVk
ZSAiQmxvYi5oIgogI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCiAjaW5jbHVkZSAiUmVzb3Vy
Y2VIYW5kbGVDbGllbnQuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKQEAgLTU4LDYg
KzU5LDcgQEAgcHVibGljOgogICAgICAgICA6IG1fcmVxdWVzdChyZXF1ZXN0KQogICAgICAgICAs
IG1fb3duZXIoMCkKICAgICAgICAgLCBtX2NsaWVudChjbGllbnQpCisgICAgICAgICwgbV9kb3du
bG9hZGVkRmlsZUxlbmd0aCgwKQogICAgICAgICAsIG1fc3RhdGUoQ29ubmVjdGlvblN0YXRlTmV3
KQogICAgIHsKICAgICB9CkBAIC03MywxMCArNzUsMTQgQEAgcHVibGljOgogICAgICAgICBXZWJV
UkxMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxv
bmcgdG90YWxCeXRlc1RvQmVTZW50KTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3Bv
bnNlKFdlYlVSTExvYWRlciosIGNvbnN0IFdlYlVSTFJlc3BvbnNlJik7CiAgICAgdmlydHVhbCB2
b2lkIGRpZFJlY2VpdmVEYXRhKFdlYlVSTExvYWRlciosIGNvbnN0IGNoYXIqIGRhdGEsIGludCBk
YXRhTGVuZ3RoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRG93bmxvYWREYXRhKFdlYlVSTExvYWRl
ciosIGludCBkYXRhTGVuZ3RoKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUNhY2hlZE1l
dGFkYXRhKFdlYlVSTExvYWRlciosIGNvbnN0IGNoYXIqIGRhdGEsIGludCBkYXRhTGVuZ3RoKTsK
ICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhXZWJVUkxMb2FkZXIqLCBkb3VibGUg
ZmluaXNoVGltZSk7CiAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoV2ViVVJMTG9hZGVyKiwgY29u
c3QgV2ViVVJMRXJyb3ImKTsKIAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2I+IGxvYWRSZXNv
dXJjZVN5bmNocm9ub3VzbHkoCisgICAgICAgIE5ldHdvcmtpbmdDb250ZXh0KiwgIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYsIFN0b3JlZENyZWRlbnRpYWxzLCBSZXNvdXJjZUVycm9yJiwgUmVzb3Vy
Y2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiopOworCiAgICAgZW51bSBDb25uZWN0aW9uU3RhdGUg
ewogICAgICAgICBDb25uZWN0aW9uU3RhdGVOZXcsCiAgICAgICAgIENvbm5lY3Rpb25TdGF0ZVN0
YXJ0ZWQsCkBAIC05MSw2ICs5Nyw5IEBAIHB1YmxpYzoKICAgICBSZXNvdXJjZUhhbmRsZSogbV9v
d25lcjsKICAgICBSZXNvdXJjZUhhbmRsZUNsaWVudCogbV9jbGllbnQ7CiAgICAgT3duUHRyPFdl
YlVSTExvYWRlcj4gbV9sb2FkZXI7CisgICAgU3RyaW5nIG1fZG93bmxvYWRlZEZpbGVQYXRoOwor
ICAgIFN0cmluZyBtX2Rvd25sb2FkZWRGaWxlQ29udGVudFR5cGU7CisgICAgbG9uZyBsb25nIG1f
ZG93bmxvYWRlZEZpbGVMZW5ndGg7CiAKICAgICAvLyBVc2VkIGZvciBzYW5pdHkgY2hlY2tpbmcg
dG8gbWFrZSBzdXJlIHdlIGRvbid0IGV4cGVyaWVuY2UgaWxsZWdhbCBzdGF0ZQogICAgIC8vIHRy
YW5zaXRpb25zLgpAQCAtMTU2LDYgKzE2NSwxMCBAQCB2b2lkIFJlc291cmNlSGFuZGxlSW50ZXJu
YWw6OmRpZFJlY2VpdmVSCiAgICAgaWYgKCFpc011bHRpcGFydCAmJiAhaXNWYWxpZFN0YXRlVHJh
bnNpdGlvbikKICAgICAgICAgQ1JBU0goKTsKICAgICBtX3N0YXRlID0gQ29ubmVjdGlvblN0YXRl
UmVjZWl2ZWRSZXNwb25zZTsKKyAgICBpZiAobV9yZXF1ZXN0LmRvd25sb2FkVG9GaWxlKCkpIHsK
KyAgICAgICAgbV9kb3dubG9hZGVkRmlsZVBhdGggPSByZXNwb25zZS50b1Jlc291cmNlUmVzcG9u
c2UoKS5kb3dubG9hZEZpbGVQYXRoKCk7CisgICAgICAgIG1fZG93bmxvYWRlZEZpbGVDb250ZW50
VHlwZSA9IHJlc3BvbnNlLnRvUmVzb3VyY2VSZXNwb25zZSgpLmV4dHJhY3RNaW1lVHlwZSgpOwor
ICAgIH0KICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKG1fb3duZXIsIHJlc3BvbnNl
LnRvUmVzb3VyY2VSZXNwb25zZSgpKTsKIH0KIApAQCAtMTczLDYgKzE4NiwxNyBAQCB2b2lkIFJl
c291cmNlSGFuZGxlSW50ZXJuYWw6OmRpZFJlY2VpdmVECiAgICAgbV9jbGllbnQtPmRpZFJlY2Vp
dmVEYXRhKG1fb3duZXIsIGRhdGEsIGRhdGFMZW5ndGgsIGRhdGFMZW5ndGgpOwogfQogCit2b2lk
IFJlc291cmNlSGFuZGxlSW50ZXJuYWw6OmRpZERvd25sb2FkRGF0YShXZWJVUkxMb2FkZXIqLCBp
bnQgZGF0YUxlbmd0aCkKK3sKKyAgICBBU1NFUlQobV9jbGllbnQpOworICAgIEFTU0VSVChtX3Jl
cXVlc3QuZG93bmxvYWRUb0ZpbGUoKSk7CisgICAgaWYgKG1fc3RhdGUgIT0gQ29ubmVjdGlvblN0
YXRlUmVjZWl2ZWRSZXNwb25zZSAmJiBtX3N0YXRlICE9IENvbm5lY3Rpb25TdGF0ZVJlY2Vpdmlu
Z0RhdGEpCisgICAgICAgIENSQVNIKCk7CisgICAgbV9zdGF0ZSA9IENvbm5lY3Rpb25TdGF0ZVJl
Y2VpdmluZ0RhdGE7CisgICAgbV9kb3dubG9hZGVkRmlsZUxlbmd0aCArPSBkYXRhTGVuZ3RoOwor
ICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlQmxvYkRhdGEobV9vd25lciwgZGF0YUxlbmd0aCk7Cit9
CisKIHZvaWQgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6ZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRh
KFdlYlVSTExvYWRlciosIGNvbnN0IGNoYXIqIGRhdGEsIGludCBkYXRhTGVuZ3RoKQogewogICAg
IEFTU0VSVChtX2NsaWVudCk7CkBAIC0xODgsNyArMjEyLDE4IEBAIHZvaWQgUmVzb3VyY2VIYW5k
bGVJbnRlcm5hbDo6ZGlkRmluaXNoTG8KICAgICBpZiAobV9zdGF0ZSAhPSBDb25uZWN0aW9uU3Rh
dGVSZWNlaXZlZFJlc3BvbnNlICYmIG1fc3RhdGUgIT0gQ29ubmVjdGlvblN0YXRlUmVjZWl2aW5n
RGF0YSkKICAgICAgICAgQ1JBU0goKTsKICAgICBtX3N0YXRlID0gQ29ubmVjdGlvblN0YXRlRmlu
aXNoZWRMb2FkaW5nOwotICAgIG1fY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKG1fb3duZXIsIGZp
bmlzaFRpbWUpOworICAgIGlmIChtX3JlcXVlc3QuZG93bmxvYWRBc0Jsb2IoKSkgeworICAgICAg
ICBBU1NFUlQobV9yZXF1ZXN0LmRvd25sb2FkVG9GaWxlKCkpOyAvLyBUb0ZpbGUgYW5kIEFzQmxv
YiBhcmUgb25lIGFuZCB0aGUgc2FtZSBmb3Igbm93LgorICAgICAgICBSZWZQdHI8QmxvYj4gZGF0
YUFzQmxvYjsKKyAgICAgICAgaWYgKCFtX2Rvd25sb2FkZWRGaWxlUGF0aC5pc0VtcHR5KCkpIHsK
KyAgICAgICAgICAgIE93blB0cjxCbG9iRGF0YT4gYmxvYkRhdGEgPSBCbG9iRGF0YTo6Y3JlYXRl
KCk7CisgICAgICAgICAgICBibG9iRGF0YS0+c2V0Q29udGVudFR5cGUobV9kb3dubG9hZGVkRmls
ZUNvbnRlbnRUeXBlKTsKKyAgICAgICAgICAgIGJsb2JEYXRhLT5hcHBlbmRGaWxlKG1fZG93bmxv
YWRlZEZpbGVQYXRoKTsKKyAgICAgICAgICAgIGRhdGFBc0Jsb2IgPSBCbG9iOjpjcmVhdGUoYmxv
YkRhdGEucmVsZWFzZSgpLCBtX2Rvd25sb2FkZWRGaWxlTGVuZ3RoKTsKKyAgICAgICAgfQorICAg
ICAgICBtX2NsaWVudC0+ZGlkRmluaXNoTG9hZGluZ0Jsb2IobV9vd25lciwgZmluaXNoVGltZSwg
ZGF0YUFzQmxvYi5nZXQoKSk7CisgICAgfSBlbHNlCisgICAgICAgIG1fY2xpZW50LT5kaWRGaW5p
c2hMb2FkaW5nKG1fb3duZXIsIGZpbmlzaFRpbWUpOwogfQogCiB2b2lkIFJlc291cmNlSGFuZGxl
SW50ZXJuYWw6OmRpZEZhaWwoV2ViVVJMTG9hZGVyKiwgY29uc3QgV2ViVVJMRXJyb3ImIGVycm9y
KQpAQCAtMTk4LDYgKzIzMywzOSBAQCB2b2lkIFJlc291cmNlSGFuZGxlSW50ZXJuYWw6OmRpZEZh
aWwoV2ViCiAgICAgbV9jbGllbnQtPmRpZEZhaWwobV9vd25lciwgZXJyb3IpOwogfQogCisvLyBz
dGF0aWMKK1Bhc3NSZWZQdHI8QmxvYj4gUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6bG9hZFJlc291
cmNlU3luY2hyb25vdXNseSgKKyAgICBOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50
aWFscywgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBW
ZWN0b3I8Y2hhcj4qIGRhdGEpCit7CisgICAgT3duUHRyPFdlYlVSTExvYWRlcj4gbG9hZGVyKHdl
YktpdENsaWVudCgpLT5jcmVhdGVVUkxMb2FkZXIoKSk7CisgICAgQVNTRVJUKGxvYWRlci5nZXQo
KSk7CisKKyAgICBXcmFwcGVkUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3RJbihyZXF1ZXN0KTsKKyAg
ICByZXF1ZXN0SW4uc2V0QWxsb3dTdG9yZWRDcmVkZW50aWFscyhzdG9yZWRDcmVkZW50aWFscyA9
PSBBbGxvd1N0b3JlZENyZWRlbnRpYWxzKTsKKyAgICBXcmFwcGVkUmVzb3VyY2VSZXNwb25zZSBy
ZXNwb25zZU91dChyZXNwb25zZSk7CisgICAgV2ViVVJMRXJyb3IgZXJyb3JPdXQ7CisgICAgV2Vi
RGF0YSBkYXRhT3V0OworICAgIFJlZlB0cjxCbG9iPiBkYXRhQXNCbG9iOworICAgIGxvbmcgbG9u
ZyBsZW5ndGhPdXQgPSAwOworCisgICAgLy8gRklYTUU6IE5lZWQgYSB3YXkgdG8gZ2V0IHRoZSBs
ZW5ndGhPdXQgaW4gdGhlIGFzRmlsZSBjYXNlLgorICAgIGxvYWRlci0+bG9hZFN5bmNocm9ub3Vz
bHkocmVxdWVzdEluLCByZXNwb25zZU91dCwgZXJyb3JPdXQsIGRhdGFPdXQpOworCisgICAgZXJy
b3IgPSBlcnJvck91dDsKKyAgICBpZiAoIXJlcXVlc3QuZG93bmxvYWRBc0Jsb2IoKSkgeworICAg
ICAgICBBU1NFUlQoZGF0YSk7CisgICAgICAgIGRhdGEtPmNsZWFyKCk7CisgICAgICAgIGRhdGEt
PmFwcGVuZChkYXRhT3V0LmRhdGEoKSwgZGF0YU91dC5zaXplKCkpOworICAgIH0gZWxzZSBpZiAo
IXJlc3BvbnNlLmRvd25sb2FkRmlsZVBhdGgoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgT3duUHRy
PEJsb2JEYXRhPiBibG9iRGF0YSA9IEJsb2JEYXRhOjpjcmVhdGUoKTsKKyAgICAgICAgYmxvYkRh
dGEtPnNldENvbnRlbnRUeXBlKHJlc3BvbnNlLmV4dHJhY3RNaW1lVHlwZSgpKSk7CisgICAgICAg
IGJsb2JEYXRhLT5hcHBlbmRGaWxlKHJlc3BvbnNlLmRvd25sb2FkRmlsZVBhdGgoKSk7CisgICAg
ICAgIGRhdGFBc0Jsb2IgPSBCbG9iOjpjcmVhdGUoYmxvYkRhdGEucmVsZWFzZSgpLCBsZW5ndGhP
dXQpOworICAgIH0KKyAgICByZXR1cm4gZGF0YUFzQmxvYjsKK30KKworCiAvLyBSZXNvdXJjZUhh
bmRsZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKIFJlc291cmNlSGFuZGxlOjpSZXNvdXJjZUhhbmRsZShjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QsCkBAIC0yOTUsMjAgKzM2MywyMCBAQCB2b2lkIFJlc291cmNlSGFu
ZGxlOjpsb2FkUmVzb3VyY2VTeW5jaHJvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4mIGRhdGEpCiB7
Ci0gICAgT3duUHRyPFdlYlVSTExvYWRlcj4gbG9hZGVyKHdlYktpdENsaWVudCgpLT5jcmVhdGVV
UkxMb2FkZXIoKSk7Ci0gICAgQVNTRVJUKGxvYWRlci5nZXQoKSk7Ci0KLSAgICBXcmFwcGVkUmVz
b3VyY2VSZXF1ZXN0IHJlcXVlc3RJbihyZXF1ZXN0KTsKLSAgICByZXF1ZXN0SW4uc2V0QWxsb3dT
dG9yZWRDcmVkZW50aWFscyhzdG9yZWRDcmVkZW50aWFscyA9PSBBbGxvd1N0b3JlZENyZWRlbnRp
YWxzKTsKLSAgICBXcmFwcGVkUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZU91dChyZXNwb25zZSk7
Ci0gICAgV2ViVVJMRXJyb3IgZXJyb3JPdXQ7Ci0gICAgV2ViRGF0YSBkYXRhT3V0OwotCi0gICAg
bG9hZGVyLT5sb2FkU3luY2hyb25vdXNseShyZXF1ZXN0SW4sIHJlc3BvbnNlT3V0LCBlcnJvck91
dCwgZGF0YU91dCk7CisgICAgQVNTRVJUKCFyZXF1ZXN0LmRvd25sb2FkQXNCbG9iKCkpOworICAg
IFJlc291cmNlSGFuZGxlSW50ZXJuYWw6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoY29udGV4
dCwgcmVxdWVzdCwgc3RvcmVkQ3JlZGVudGlhbHMsIGVycm9yLCByZXNwb25zZSwgJmRhdGEpOwor
fQogCi0gICAgZXJyb3IgPSBlcnJvck91dDsKLSAgICBkYXRhLmNsZWFyKCk7Ci0gICAgZGF0YS5h
cHBlbmQoZGF0YU91dC5kYXRhKCksIGRhdGFPdXQuc2l6ZSgpKTsKKy8vIHN0YXRpYworUGFzc1Jl
ZlB0cjxCbG9iPiBSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseUFzQmxv
YigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0d29y
a2luZ0NvbnRleHQqIGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RvcmVkQ3JlZGVudGlhbHMgc3Rv
cmVkQ3JlZGVudGlhbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFJlc291cmNlRXJyb3ImIGVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBB
U1NFUlQocmVxdWVzdC5kb3dubG9hZEFzQmxvYigpKTsKKyAgICByZXR1cm4gUmVzb3VyY2VIYW5k
bGVJbnRlcm5hbDo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShjb250ZXh0LCByZXF1ZXN0LCBz
dG9yZWRDcmVkZW50aWFscywgZXJyb3IsIHJlc3BvbnNlLCAwKTsKIH0KIAogLy8gc3RhdGljCklu
ZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlVSTFJlcXVlc3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVxdWVzdC5jcHAJKHJldmlzaW9uIDY5MzY2KQor
KysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXF1ZXN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTYsNyArNTYsNiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBtX3Jlc291cmNlUmVxdWVz
dCA9ICZtX3Jlc291cmNlUmVxdWVzdEFsbG9jYXRpb247CiAgICAgICAgIG1fYWxsb3dTdG9yZWRD
cmVkZW50aWFscyA9IHAtPm1fYWxsb3dTdG9yZWRDcmVkZW50aWFsczsKLSAgICAgICAgbV9kb3du
bG9hZFRvRmlsZSA9IHAtPm1fZG93bmxvYWRUb0ZpbGU7CiAgICAgfQogCiAgICAgdmlydHVhbCB2
b2lkIGRpc3Bvc2UoKSB7IGRlbGV0ZSB0aGlzOyB9CkBAIC0yNTksMTIgKzI1OCwxMiBAQCB2b2lk
IFdlYlVSTFJlcXVlc3Q6OnNldEFwcENhY2hlSG9zdElEKGluCiAKIGJvb2wgV2ViVVJMUmVxdWVz
dDo6ZG93bmxvYWRUb0ZpbGUoKSBjb25zdAogewotICAgIHJldHVybiBtX3ByaXZhdGUtPm1fZG93
bmxvYWRUb0ZpbGU7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlcXVlc3QtPmRv
d25sb2FkVG9GaWxlKCk7CiB9CiAKIHZvaWQgV2ViVVJMUmVxdWVzdDo6c2V0RG93bmxvYWRUb0Zp
bGUoYm9vbCBkb3dubG9hZFRvRmlsZSkKIHsKLSAgICBtX3ByaXZhdGUtPm1fZG93bmxvYWRUb0Zp
bGUgPSBkb3dubG9hZFRvRmlsZTsKKyAgICBtX3ByaXZhdGUtPm1fcmVzb3VyY2VSZXF1ZXN0LT5z
ZXREb3dubG9hZFRvRmlsZShkb3dubG9hZFRvRmlsZSk7CiB9CiAKIFJlc291cmNlUmVxdWVzdCYg
V2ViVVJMUmVxdWVzdDo6dG9NdXRhYmxlUmVzb3VyY2VSZXF1ZXN0KCkKSW5kZXg6IFdlYktpdC9j
aHJvbWl1bS9zcmMvV2ViVVJMUmVxdWVzdFByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlVSTFJlcXVlc3RQcml2YXRlLmgJKHJldmlzaW9uIDY5MzY2KQorKysg
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXF1ZXN0UHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSwxNyArMzksMTMgQEAgY2xhc3MgV2ViVVJMUmVxdWVzdFByaXZhdGUgewogcHVibGlj
OgogICAgIFdlYlVSTFJlcXVlc3RQcml2YXRlKCkKICAgICAgICAgOiBtX3Jlc291cmNlUmVxdWVz
dCgwKQotICAgICAgICAsIG1fYWxsb3dTdG9yZWRDcmVkZW50aWFscyh0cnVlKQotICAgICAgICAs
IG1fZG93bmxvYWRUb0ZpbGUoZmFsc2UpIHsgfQorICAgICAgICAsIG1fYWxsb3dTdG9yZWRDcmVk
ZW50aWFscyh0cnVlKSB7IH0KIAogICAgIC8vIENhbGxlZCBieSBXZWJVUkxSZXF1ZXN0IHdoZW4g
aXQgbm8gbG9uZ2VyIG5lZWRzIHRoaXMgb2JqZWN0LgogICAgIHZpcnR1YWwgdm9pZCBkaXNwb3Nl
KCkgPSAwOwogCiAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0KiBtX3Jlc291cmNlUmVxdWVz
dDsKICAgICBib29sIG1fYWxsb3dTdG9yZWRDcmVkZW50aWFsczsKLQotICAgIC8vIEZJWE1FOiBN
b3ZlIHRoaXMgdG8gUmVzb3VyY2VSZXF1ZXN0IG9uY2Ugd2UgaGF2ZSBhbiBpbnRlcm5hbCBjb25z
dW1lci4KLSAgICBib29sIG1fZG93bmxvYWRUb0ZpbGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVzcG9uc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVzcG9uc2UuY3BwCShyZXZpc2lv
biA2OTM2NikKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVzcG9uc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01OSw3ICs1OSw2IEBAIHB1YmxpYzoKICAgICAgICAgOiBtX3Jlc291cmNl
UmVzcG9uc2VBbGxvY2F0aW9uKCpwLT5tX3Jlc291cmNlUmVzcG9uc2UpCiAgICAgewogICAgICAg
ICBtX3Jlc291cmNlUmVzcG9uc2UgPSAmbV9yZXNvdXJjZVJlc3BvbnNlQWxsb2NhdGlvbjsKLSAg
ICAgICAgbV9kb3dubG9hZEZpbGVQYXRoID0gcC0+bV9kb3dubG9hZEZpbGVQYXRoOwogICAgIH0K
IAogICAgIHZpcnR1YWwgdm9pZCBkaXNwb3NlKCkgeyBkZWxldGUgdGhpczsgfQpAQCAtMzc1LDEy
ICszNzQsMTIgQEAgdm9pZCBXZWJVUkxSZXNwb25zZTo6c2V0SXNNdWx0aXBhcnRQYXlsbwogCiBX
ZWJTdHJpbmcgV2ViVVJMUmVzcG9uc2U6OmRvd25sb2FkRmlsZVBhdGgoKSBjb25zdAogewotICAg
IHJldHVybiBtX3ByaXZhdGUtPm1fZG93bmxvYWRGaWxlUGF0aDsKKyAgICByZXR1cm4gbV9wcml2
YXRlLT5tX3Jlc291cmNlUmVzcG9uc2UtPmRvd25sb2FkRmlsZVBhdGgoKTsKIH0KIAogdm9pZCBX
ZWJVUkxSZXNwb25zZTo6c2V0RG93bmxvYWRGaWxlUGF0aChjb25zdCBXZWJTdHJpbmcmIGRvd25s
b2FkRmlsZVBhdGgpCiB7Ci0gICAgbV9wcml2YXRlLT5tX2Rvd25sb2FkRmlsZVBhdGggPSBkb3du
bG9hZEZpbGVQYXRoOworICAgIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlc3BvbnNlLT5zZXREb3du
bG9hZEZpbGVQYXRoKGRvd25sb2FkRmlsZVBhdGgpOwogfQogCiB2b2lkIFdlYlVSTFJlc3BvbnNl
Ojphc3NpZ24oV2ViVVJMUmVzcG9uc2VQcml2YXRlKiBwKQpJbmRleDogV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJVUkxSZXNwb25zZVByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlVSTFJlc3BvbnNlUHJpdmF0ZS5oCShyZXZpc2lvbiA2OTM2NikKKysrIFdlYktp
dC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVzcG9uc2VQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ2LDkgKzQ2LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaXNwb3NlKCkgPSAwOwog
CiAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSogbV9yZXNvdXJjZVJlc3BvbnNlOwotCi0g
ICAgLy8gRklYTUU6IE1vdmUgdGhpcyB0byBSZXNvdXJjZVJlc3BvbnNlIG9uY2Ugd2UgaGF2ZSBh
biBpbnRlcm5hbCBjb25zdW1lci4KLSAgICBXZWJTdHJpbmcgbV9kb3dubG9hZEZpbGVQYXRoOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>
<flag name="review"
          id="60107"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70301</attachid>
            <date>2010-10-08 15:31:23 -0700</date>
            <delta_ts>2010-10-10 12:28:28 -0700</delta_ts>
            <desc>downloadAsBlob</desc>
            <filename>downloadAsBlob9.txt</filename>
            <type>text/plain</type>
            <size>68430</size>
            <attacher name="Michael Nordman">michaeln</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTQyMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTA1IEBACisyMDEwLTEwLTA1ICBNaWNoYWVsIE5vcmRtYW4gIDxtaWNoYWVsbkBn
b29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZCBzdXBwb3J0IGZvciBnZXR0aW5nIHRoZSByZXN1bHQgb2YgYSByZXNvdXJjZSByZXF1
ZXN0IGFzIGEgYmxvYiwKKyAgICAgICAgYW5kIHVzZSB0aGF0IGNhcGFiaWxpdHkgaW4gc3VwcG9y
dCBvZiBYbWxIdHRwUmVxdWVzdC5yZXNwb25zZUJsb2IuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDcyMgorICAgICAgICAqIFJlc291cmNlSGFuZGxl
IGtub3dzIGhvdyB0byBkZWxpdmVyIGEgcmVzcG9uc2UgYXMgYSBibG9iLiBUbyBhc2sgaXQgdG8g
ZG8gc28sCisgICAgICAgICAgY2FsbCByZXF1ZXN0LnNldERvd25sb2FkQXNCbG9iKHRydWUpIHBy
aW9yIHRvIHN0YXJ0aW5nIGFuIGFzeW5jIFJlc291cmNlSGFuZGxlLAorICAgICAgICAgIG9yIGNh
bGwgbG9hZFJlc291cmNlU3luY2hyb25vdXNseUFzQmxvYigpIGZvciB0aGUgc3luYyBjYXNlLgor
ICAgICAgICAqIFJlc291cmNlSGFuZGxlQ2xpZW50IGhhcyBuZXcgaW50ZXJmYWNlcyBmb3IgdXNl
IGluIHRoZSBhc3luYyBjYXNlLgorICAgICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVC
bG9iRGF0YShSZXNvdXJjZUhhbmRsZSosIGludCk7ICAvLyBubyBkYXRhIHB0ciBpcyBwcm92aWRl
ZAorICAgICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmdCbG9iKFJlc291cmNl
SGFuZGxlKiwgZG91YmxlIC8qZmluaXNoVGltZSovLCBQYXNzUmVmUHRyPEJsb2I+KTsKKyAgICAg
ICAgKiBUaHJlYWRhYmxlTG9hZGVyIGFsc28ga25vd3MgaG93IHRvIGRlbGl2ZXIgYSByZXNwb25z
ZSBhcyBhIGJsb2I7IGFuZAorICAgICAgICAgIHNpbWlsYXJseSwgdGhlIFRocmVhZGFibGVMb2Fk
ZXJDbGllbnQgaGFzICBncm93biB0d28gbmV3IGNhbGxiYWNrIG1ldGhvZHMuCisgICAgICAgICog
RnJhbWVMb2FkZXIgaGFzIGFsc28gZ3Jvd24gYSBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5QXNC
bG9iKCkgbWV0aG9kLgorICAgICAgICAqIFhtbEh0dHBSZXF1ZXN0IGlzIGEgVGhyZWFkYWJsZUxv
YWRlckNsaWVudCB3aGljaCB1c2VzIHJlcXVlc3Quc2V0RG93bmxvYWRBc0Jsb2IoKSBhbmQKKyAg
ICAgICAgICByZWNlaXZlcyB0aGUgcmVzdWx0IGluIGRpZEZpbmlzaExvYWRpbmdCbG9iKCkuCisg
ICAgICAgICogVGhlcmUncyBhIGZhaXIgYW1vdW50IG9mIG1lY2hhbmljYWwgcGx1bWJpbmcgdGhy
b3VnaG91dCAidGhlIGxvYWRlciIgdG8gZ2V0IHRoZSBjbGllbnQKKyAgICAgICAgICBtZXRob2Qg
Y2FsbHMgZnJvbSB0aGUgcmVzb3VyY2UgaGFuZGxlIGFsbCB0aGUgd2F5IHRocnUgdG8gdGhlIHRo
cmVhZGFibGUgbG9hZGVyIGNsaWVudC4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgZmVh
dHVyZSBpc24ndCBmdW5jdGlvbmFsIHlldCBpbiBhbnkgcG9ydC4KKworICAgICAgICAqIGxvYWRl
ci9Eb2N1bWVudExvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudExvYWRlcjo6
c3Vic3RpdHV0ZVJlc291cmNlRGVsaXZlcnlUaW1lckZpcmVkKToKKyAgICAgICAgKiBsb2FkZXIv
RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
VGhyZWFkYWJsZUxvYWRlcjo6ZGlkUmVjZWl2ZUJsb2JEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZ0Jsb2IpOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVxdWVzdCk6CisgICAg
ICAgICogbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oOgorICAgICAgICAqIGxvYWRl
ci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZFJl
c291cmNlU3luY2hyb25vdXNseSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9h
ZFJlc291cmNlU3luY2hyb25vdXNseUFzQmxvYik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxv
YWRlcjo6cHJlcGFyZVN5bmNSZXFldXN0KToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIu
aDoKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmdCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nT25lUGFydCk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUxvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUJsb2JEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YUNvbW1vbik6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUxvYWRlcjo6Y3JlYXRlQXN5bmNGaWxlU3RyZWFtKToKKyAgICAgICAgKiBsb2FkZXIvUmVz
b3VyY2VMb2FkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyOjpkaWRSZWNl
aXZlQmxvYkRhdGEpOgorICAgICAgICAqIGxvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUJsb2JEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OlN1YnJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OlN1YnJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nQmxv
Yik6CisgICAgICAgIChXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGlu
Z0NvbW1vbik6CisgICAgICAgICogbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmg6CisgICAgICAg
ICogbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyQ2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpT
dWJyZXNvdXJjZUxvYWRlckNsaWVudDo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6U3VicmVzb3VyY2VMb2FkZXJDbGllbnQ6OmRpZFJlY2VpdmVCbG9iRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlckNsaWVudDo6ZGlkRmluaXNoTG9hZGluZ0Jsb2Ip
OgorICAgICAgICAqIGxvYWRlci9UaHJlYWRhYmxlTG9hZGVyQ2xpZW50Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpUaHJlYWRhYmxlTG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpUaHJlYWRhYmxlTG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlQmxvYkRhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6VGhyZWFkYWJsZUxvYWRlckNsaWVudDo6ZGlkRmluaXNoTG9hZGlu
Z0Jsb2IpOgorICAgICAgICAqIGxvYWRlci9UaHJlYWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBlci5o
OgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXI6OmRpZFJl
Y2VpdmVCbG9iRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlTG9hZGVyQ2xpZW50
V3JhcHBlcjo6ZGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxl
TG9hZGVyQ2xpZW50V3JhcHBlcjo6ZGlkRmluaXNoTG9hZGluZ0Jsb2IpOgorICAgICAgICAqIGxv
YWRlci9Xb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ondvcmtl
ckNvbnRleHREaWRSZWNlaXZlQmxvYkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhy
ZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEJyaWRnZTo6ZGlkUmVjZWl2ZUJsb2JEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2U6
OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6d29ya2VyQ29udGV4dERpZEZp
bmlzaExvYWRpbmdCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVMb2Fk
ZXI6Ok1haW5UaHJlYWRCcmlkZ2U6OmRpZEZpbmlzaExvYWRpbmdCbG9iKToKKyAgICAgICAgKiBs
b2FkZXIvV29ya2VyVGhyZWFkYWJsZUxvYWRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VIYW5kbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6
OmNhY2hlTWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmxvYWRS
ZXNvdXJjZVN5bmNocm9ub3VzbHlBc0Jsb2IpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VIYW5kbGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFu
ZGxlQ2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUNsaWVudDo6ZGlk
UmVjZWl2ZUJsb2JEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ2xpZW50
OjpkaWRGaW5pc2hMb2FkaW5nQmxvYik6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNv
dXJjZVJlcXVlc3RCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJh
c2U6OmFkb3B0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OmNvcHlE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmVxdWFsSWdub3JpbmdIZWFkZXJGaWVsZHMpOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6ZG93bmxvYWRBc0Jsb2IpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6c2V0RG93bmxvYWRBc0Jsb2IpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlcXVlc3QuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6ZG93bmxvYWRUb0ZpbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0OjpzZXREb3dubG9hZFRvRmlsZSk6CisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlc3BvbnNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2U6OmRvd25sb2FkRmlsZVBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZTo6c2V0RG93bmxvYWRGaWxlUGF0aCk6CisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlc3BvbnNlLmg6CisgICAg
ICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBS
ZXF1ZXN0OjpjcmVhdGVSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0
OjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0Ojpk
aWRGaW5pc2hMb2FkaW5nQmxvYik6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6
ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmRpZFJl
Y2VpdmVCbG9iRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6ZGlkUmVj
ZWl2ZURhdGFDb21tb24pOgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5oOgorCiAyMDEw
LTEwLTA4ICBBbmRyZWkgUG9wZXNjdSAgPGFuZHJlaXBAZ29vZ2xlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBKZXJlbXkgT3Jsb3cuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL2Nv
cHlGb3J3YXJkaW5nSGVhZGVycy5jbWQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9jb3B5Rm9yd2FyZGluZ0hlYWRlcnMuY21kCShyZXZpc2lvbiA2OTQyMikKKysrIFdlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovY29weUZvcndhcmRpbmdIZWFkZXJzLmNtZAkod29ya2luZyBjb3B5
KQpAQCAtMTksNiArMTksNyBAQCB4Y29weSAveSAvZCAiJVByb2plY3REaXIlLi5cY29uZmlnLmgi
ICIlCiB4Y29weSAveSAvZCAiJVdlYktpdE91dHB1dERpciVcb2JqXFdlYkNvcmVcRGVyaXZlZFNv
dXJjZXNcKi5oIiAiJVdlYktpdE91dHB1dERpciVcaW5jbHVkZVxXZWJDb3JlIgogeGNvcHkgL3kg
L2QgIiVQcm9qZWN0RGlyJS4uXGFjY2Vzc2liaWxpdHlcKi5oIiAiJVdlYktpdE91dHB1dERpciVc
aW5jbHVkZVxXZWJDb3JlIgogeGNvcHkgL3kgL2QgIiVQcm9qZWN0RGlyJS4uXGFjY2Vzc2liaWxp
dHlcd2luXCouaCIgIiVXZWJLaXRPdXRwdXREaXIlXGluY2x1ZGVcV2ViQ29yZSIKK3hjb3B5IC95
IC9kICIlUHJvamVjdERpciUuLlxmaWxlYXBpXCouaCIgIiVXZWJLaXRPdXRwdXREaXIlXGluY2x1
ZGVcV2ViQ29yZSIKIHhjb3B5IC95IC9kICIlUHJvamVjdERpciUuLlxpbnNwZWN0b3JcKi5oIiAi
JVdlYktpdE91dHB1dERpciVcaW5jbHVkZVxXZWJDb3JlIgogeGNvcHkgL3kgL2QgIiVQcm9qZWN0
RGlyJS4uXGxvYWRlclwqLmgiICIlV2ViS2l0T3V0cHV0RGlyJVxpbmNsdWRlXFdlYkNvcmUiCiB4
Y29weSAveSAvZCAiJVByb2plY3REaXIlLi5cbG9hZGVyXGFwcGNhY2hlXCouaCIgIiVXZWJLaXRP
dXRwdXREaXIlXGluY2x1ZGVcV2ViQ29yZSIKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA2OTQyMikKKysrIFdlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03NDUsNyArNzQ1LDcg
QEAKIAkJMkVENjA5QkMxMTQ1QjA3MTAwQzg2ODRFIC8qIERPTUZvcm1EYXRhLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFRDYwOUJBMTE0NUIwNzEw
MEM4Njg0RSAvKiBET01Gb3JtRGF0YS5jcHAgKi87IH07CiAJCTJFRDYwOUJEMTE0NUIwNzEwMEM4
Njg0RSAvKiBET01Gb3JtRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkVENjA5QkIxMTQ1QjA3MTAwQzg2ODRFIC8qIERPTUZvcm1EYXRhLmggKi87
IH07CiAJCTJFREVGMUYzMTIxQjBFRkMwMDcyNkRCMiAvKiBCbG9iRGF0YS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRURFRjFFRDEyMUIwRUZDMDA3
MjZEQjIgLyogQmxvYkRhdGEuY3BwICovOyB9OwotCQkyRURFRjFGNDEyMUIwRUZDMDA3MjZEQjIg
LyogQmxvYkRhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJFREVGMUVFMTIxQjBFRkMwMDcyNkRCMiAvKiBCbG9iRGF0YS5oICovOyB9OworCQkyRURF
RjFGNDEyMUIwRUZDMDA3MjZEQjIgLyogQmxvYkRhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFREVGMUVFMTIxQjBFRkMwMDcyNkRCMiAvKiBCbG9i
RGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTJFREVGMUY1MTIxQjBFRkMwMDcyNkRCMiAvKiBCbG9iUmVnaXN0cnkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFREVGMUVGMTIxQjBFRkMwMDcyNkRC
MiAvKiBCbG9iUmVnaXN0cnkuaCAqLzsgfTsKIAkJMkVERUYxRjYxMjFCMEVGQzAwNzI2REIyIC8q
IEJsb2JSZWdpc3RyeUltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkVERUYxRjAxMjFCMEVGQzAwNzI2REIyIC8qIEJsb2JSZWdpc3RyeUltcGwu
Y3BwICovOyB9OwogCQkyRURFRjFGNzEyMUIwRUZDMDA3MjZEQjIgLyogQmxvYlJlZ2lzdHJ5SW1w
bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVERUYx
RjExMjFCMEVGQzAwNzI2REIyIC8qIEJsb2JSZWdpc3RyeUltcGwuaCAqLzsgfTsKQEAgLTI4Njks
NyArMjg2OSw3IEBACiAJCTk3M0UzMjU3MTA4ODNCN0MwMDVCQzQ5MyAvKiBSZXNvdXJjZUxvYWRO
b3RpZmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTczRTMyNTUxMDg4M0I3QzAwNUJDNDkzIC8qIFJlc291cmNlTG9hZE5vdGlmaWVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTc2RDZDNzcxMjJC
OEEzRDAwMUZEMUY3IC8qIEFzeW5jRmlsZVdyaXRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTc2RDZDNTgxMjJCOEEzRDAwMUZEMUY3IC8qIEFzeW5j
RmlsZVdyaXRlci5oICovOyB9OwogCQk5NzZENkM3ODEyMkI4QTNEMDAxRkQxRjcgLyogQmxvYi5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzZENkM1
OTEyMkI4QTNEMDAxRkQxRjcgLyogQmxvYi5jcHAgKi87IH07Ci0JCTk3NkQ2Qzc5MTIyQjhBM0Qw
MDFGRDFGNyAvKiBCbG9iLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5NzZENkM1QTEyMkI4QTNEMDAxRkQxRjcgLyogQmxvYi5oICovOyB9OworCQk5NzZE
NkM3OTEyMkI4QTNEMDAxRkQxRjcgLyogQmxvYi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTc2RDZDNUExMjJCOEEzRDAwMUZEMUY3IC8qIEJsb2IuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5NzZENkM3
QjEyMkI4QTNEMDAxRkQxRjcgLyogQmxvYkJ1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTc2RDZDNUMxMjJCOEEzRDAwMUZEMUY3IC8qIEJs
b2JCdWlsZGVyLmNwcCAqLzsgfTsKIAkJOTc2RDZDN0MxMjJCOEEzRDAwMUZEMUY3IC8qIEJsb2JC
dWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
NzZENkM1RDEyMkI4QTNEMDAxRkQxRjcgLyogQmxvYkJ1aWxkZXIuaCAqLzsgfTsKIAkJOTc2RDZD
N0UxMjJCOEEzRDAwMUZEMUY3IC8qIEJsb2JVUkwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTc2RDZDNUYxMjJCOEEzRDAwMUZEMUY3IC8qIEJsb2JV
UkwuY3BwICovOyB9OwpAQCAtMjExNTAsNyArMjExNTAsNiBAQAogCQkJaXNhID0gUEJYUHJvamVj
dDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAxNDlDMjg0MzA4OTAyQjExMDA4QTlFRkMg
LyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJXZWJDb3JlIiAqLzsK
IAkJCWNvbXBhdGliaWxpdHlWZXJzaW9uID0gIlhjb2RlIDIuNCI7Ci0JCQlkZXZlbG9wbWVudFJl
Z2lvbiA9IEVuZ2xpc2g7CiAJCQloYXNTY2FubmVkRm9yRW5jb2RpbmdzID0gMTsKIAkJCWtub3du
UmVnaW9ucyA9ICgKIAkJCQlFbmdsaXNoLApJbmRleDogV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRM
b2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNw
cAkocmV2aXNpb24gNjk0MjIpCisrKyBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU2Miw3ICs1NjIsOCBAQCB2b2lkIERvY3VtZW50TG9hZGVyOjpz
dWJzdGl0dXRlUmVzb3VyY2VECiAgICAgICAgIAogICAgICAgICBpZiAocmVzb3VyY2UpIHsKICAg
ICAgICAgICAgIFNoYXJlZEJ1ZmZlciogZGF0YSA9IHJlc291cmNlLT5kYXRhKCk7Ci0gICAgICAg
IAorCisgICAgICAgICAgICAvLyBGSVhNRTogV3JhcCBhIGJsb2IgYXJvdW5kIHRoZSBkYXRhIGlu
IHRoZSBkb3dubG9hZEFzQmxvYiBjYXNlLgogICAgICAgICAgICAgbG9hZGVyLT5kaWRSZWNlaXZl
UmVzcG9uc2UocmVzb3VyY2UtPnJlc3BvbnNlKCkpOwogICAgICAgICAgICAgbG9hZGVyLT5kaWRS
ZWNlaXZlRGF0YShkYXRhLT5kYXRhKCksIGRhdGEtPnNpemUoKSwgZGF0YS0+c2l6ZSgpLCB0cnVl
KTsKICAgICAgICAgICAgIGxvYWRlci0+ZGlkRmluaXNoTG9hZGluZygwKTsKSW5kZXg6IFdlYkNv
cmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAkocmV2aXNpb24gNjk0MjIp
CisrKyBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMjgsNiArMjI4LDE3IEBAIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVy
OjpkaWRSZWNlaXYKICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZURhdGEoZGF0YSwgbGVuZ3RoUmVj
ZWl2ZWQpOwogfQogCit2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlkUmVjZWl2ZUJs
b2JEYXRhKFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIGludCBsZW5ndGhSZWNlaXZlZCkKK3sK
KyAgICBBU1NFUlQobV9jbGllbnQpOworICAgIEFTU0VSVF9VTlVTRUQobG9hZGVyLCBsb2FkZXIg
PT0gbV9sb2FkZXIpOworCisgICAgaWYgKG1fYWN0dWFsUmVxdWVzdCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVCbG9iRGF0YShsZW5ndGhSZWNlaXZlZCk7Cit9
CisKIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKFN1YnJl
c291cmNlTG9hZGVyKiBsb2FkZXIpCiB7CiAgICAgQVNTRVJUKGxvYWRlciA9PSBtX2xvYWRlcik7
CkBAIC0yMzUsMTQgKzI0NiwzMyBAQCB2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6ZGlk
RmluaXNoCiAgICAgZGlkRmluaXNoTG9hZGluZyhsb2FkZXItPmlkZW50aWZpZXIoKSk7CiB9CiAK
K3ZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nQmxvYihTdWJy
ZXNvdXJjZUxvYWRlciogbG9hZGVyLCBCbG9iKiBibG9iKQoreworICAgIEFTU0VSVChsb2FkZXIg
PT0gbV9sb2FkZXIpOworICAgIEFTU0VSVChtX2NsaWVudCk7CisgICAgZGlkRmluaXNoTG9hZGlu
Z0Jsb2IobG9hZGVyLT5pZGVudGlmaWVyKCksIGJsb2IpOworfQorCiB2b2lkIERvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIp
CiB7CiAgICAgaWYgKG1fYWN0dWFsUmVxdWVzdCkgewogICAgICAgICBBU1NFUlQoIW1fc2FtZU9y
aWdpblJlcXVlc3QpOwogICAgICAgICBBU1NFUlQobV9vcHRpb25zLmNyb3NzT3JpZ2luUmVxdWVz
dFBvbGljeSA9PSBVc2VBY2Nlc3NDb250cm9sKTsKICAgICAgICAgcHJlZmxpZ2h0U3VjY2Vzcygp
OwotICAgIH0gZWxzZQotICAgICAgICBtX2NsaWVudC0+ZGlkRmluaXNoTG9hZGluZyhpZGVudGlm
aWVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2NsaWVudC0+ZGlkRmluaXNoTG9h
ZGluZyhpZGVudGlmaWVyKTsKK30KKwordm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRp
ZEZpbmlzaExvYWRpbmdCbG9iKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgQmxvYiogYmxvYikK
K3sKKyAgICBpZiAobV9hY3R1YWxSZXF1ZXN0KSB7CisgICAgICAgIEFTU0VSVCghbV9zYW1lT3Jp
Z2luUmVxdWVzdCk7CisgICAgICAgIEFTU0VSVChtX29wdGlvbnMuY3Jvc3NPcmlnaW5SZXF1ZXN0
UG9saWN5ID09IFVzZUFjY2Vzc0NvbnRyb2wpOworICAgICAgICBwcmVmbGlnaHRTdWNjZXNzKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9jbGllbnQtPmRpZEZpbmlzaExvYWRpbmdC
bG9iKGlkZW50aWZpZXIsIGJsb2IpOwogfQogCiB2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRl
cjo6ZGlkRmFpbChTdWJyZXNvdXJjZUxvYWRlciogbG9hZGVyLCBjb25zdCBSZXNvdXJjZUVycm9y
JiBlcnJvcikKQEAgLTMyNywxMSArMzU3LDE2IEBAIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9h
ZGVyOjpsb2FkUmVxdWUKICAgICBTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscyA9
IG1fb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzID8gQWxsb3dTdG9yZWRDcmVkZW50aWFscyA6IERv
Tm90QWxsb3dTdG9yZWRDcmVkZW50aWFsczsKIAogICAgIFZlY3RvcjxjaGFyPiBkYXRhOworICAg
IFJlZlB0cjxCbG9iPiBkYXRhQXNCbG9iOwogICAgIFJlc291cmNlRXJyb3IgZXJyb3I7CiAgICAg
UmVzb3VyY2VSZXNwb25zZSByZXNwb25zZTsKICAgICB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIg
PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmc+OjptYXgoKTsKLSAgICBpZiAobV9k
b2N1bWVudC0+ZnJhbWUoKSkKLSAgICAgICAgaWRlbnRpZmllciA9IG1fZG9jdW1lbnQtPmZyYW1l
KCktPmxvYWRlcigpLT5sb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KHJlcXVlc3QsIHN0b3JlZENy
ZWRlbnRpYWxzLCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOworICAgIGlmIChtX2RvY3VtZW50LT5m
cmFtZSgpKSB7CisgICAgICAgIGlmIChyZXF1ZXN0LmRvd25sb2FkQXNCbG9iKCkpCisgICAgICAg
ICAgICBkYXRhQXNCbG9iID0gbV9kb2N1bWVudC0+ZnJhbWUoKS0+bG9hZGVyKCktPmxvYWRSZXNv
dXJjZVN5bmNocm9ub3VzbHlBc0Jsb2IocmVxdWVzdCwgc3RvcmVkQ3JlZGVudGlhbHMsIGVycm9y
LCByZXNwb25zZSwgaWRlbnRpZmllcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlkZW50
aWZpZXIgPSBtX2RvY3VtZW50LT5mcmFtZSgpLT5sb2FkZXIoKS0+bG9hZFJlc291cmNlU3luY2hy
b25vdXNseShyZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFscywgZXJyb3IsIHJlc3BvbnNlLCBkYXRh
KTsKKyAgICB9CiAKICAgICAvLyBObyBleGNlcHRpb24gZm9yIGZpbGU6Ly8vIHJlc291cmNlcywg
c2VlIDxyZGFyOi8vcHJvYmxlbS80OTYyMjk4Pi4KICAgICAvLyBBbHNvLCBpZiB3ZSBoYXZlIGFu
IEhUVFAgcmVzcG9uc2UsIHRoZW4gaXQgd2Fzbid0IGEgbmV0d29yayBlcnJvciBpbiBmYWN0LgpA
QCAtMzUwLDEwICszODUsMTQgQEAgdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmxvYWRS
ZXF1ZQogCiAgICAgZGlkUmVjZWl2ZVJlc3BvbnNlKDAsIHJlc3BvbnNlKTsKIAotICAgIGNvbnN0
IGNoYXIqIGJ5dGVzID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEuZGF0YSgpKTsKLSAg
ICBpbnQgbGVuID0gc3RhdGljX2Nhc3Q8aW50PihkYXRhLnNpemUoKSk7Ci0gICAgZGlkUmVjZWl2
ZURhdGEoMCwgYnl0ZXMsIGxlbik7CisgICAgaWYgKHJlcXVlc3QuZG93bmxvYWRBc0Jsb2IoKSkg
eworICAgICAgICBkaWRGaW5pc2hMb2FkaW5nQmxvYihpZGVudGlmaWVyLCBkYXRhQXNCbG9iLmdl
dCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAorICAgIGNvbnN0IGNoYXIqIGJ5dGVzID0g
c3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEuZGF0YSgpKTsKKyAgICBpbnQgbGVuZ3RoID0g
c3RhdGljX2Nhc3Q8aW50PihkYXRhLnNpemUoKSk7CisgICAgZGlkUmVjZWl2ZURhdGEoMCwgYnl0
ZXMsIGxlbmd0aCk7CiAgICAgZGlkRmluaXNoTG9hZGluZyhpZGVudGlmaWVyKTsKIH0KIApJbmRl
eDogV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmgJKHJldmlzaW9uIDY5
NDIyKQorKysgV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTc0LDcgKzc0LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAg
IHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0
YShTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IGNoYXIqLCBpbnQgbGVuZ3RoUmVjZWl2ZWQpOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUJsb2JEYXRhKFN1YnJlc291cmNlTG9hZGVy
KiwgaW50IC8qbGVuZ3RoUmVjZWl2ZWQqLyk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5p
c2hMb2FkaW5nKFN1YnJlc291cmNlTG9hZGVyKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRG
aW5pc2hMb2FkaW5nQmxvYihTdWJyZXNvdXJjZUxvYWRlciosIEJsb2IqKTsKICAgICAgICAgdmly
dHVhbCB2b2lkIGRpZEZhaWwoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBSZXNvdXJjZUVycm9y
Jik7CiAKICAgICAgICAgdmlydHVhbCBib29sIGdldFNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdl
KFN1YnJlc291cmNlTG9hZGVyKiwgYm9vbCYgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UpOwpA
QCAtODIsNiArODQsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCByZWNlaXZlZENhbmNlbGxhdGlvbihTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlJik7CiAKICAgICAgICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllcik7CisgICAgICAgIHZvaWQgZGlkRmluaXNoTG9hZGluZ0Jsb2Io
dW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBCbG9iKik7CisKICAgICAgICAgdm9pZCBtYWtlU2lt
cGxlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCk7CiAgICAgICAgIHZvaWQgbWFrZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdFdpdGhQcmVmbGln
aHQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KTsKICAgICAgICAgdm9pZCBwcmVmbGln
aHRTdWNjZXNzKCk7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCShyZXZpc2lvbiA2OTQyMikK
KysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcz
OSw2ICsyNzM5LDUwIEBAIHZvaWQgRnJhbWVMb2FkZXI6OmxvYWRQb3N0UmVxdWVzdChjb25zdCAK
IAogdW5zaWduZWQgbG9uZyBGcmFtZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENy
ZWRlbnRpYWxzLCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9u
c2UsIFZlY3RvcjxjaGFyPiYgZGF0YSkKIHsKKyAgICBBU1NFUlQoIXJlcXVlc3QuZG93bmxvYWRB
c0Jsb2IoKSk7CisgICAgUmVzb3VyY2VSZXF1ZXN0IGFjdHVhbFJlcXVlc3Q7CisgICAgdW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyID0gcHJlcGFyZVN5bmNSZXF1ZXN0KHJlcXVlc3QsIGVycm9yLCBh
Y3R1YWxSZXF1ZXN0KTsKKyAgICBpZiAoZXJyb3IuaXNOdWxsKCkpIHsKKyAgICAgICAgQVNTRVJU
KCFhY3R1YWxSZXF1ZXN0LmlzTnVsbCgpKTsKKyAgICAgICAgCisjaWYgRU5BQkxFKE9GRkxJTkVf
V0VCX0FQUExJQ0FUSU9OUykKKyAgICAgICAgaWYgKCFkb2N1bWVudExvYWRlcigpLT5hcHBsaWNh
dGlvbkNhY2hlSG9zdCgpLT5tYXliZUxvYWRTeW5jaHJvbm91c2x5KGFjdHVhbFJlcXVlc3QsIGVy
cm9yLCByZXNwb25zZSwgZGF0YSkpIHsKKyNlbmRpZgorICAgICAgICAgICAgUmVzb3VyY2VIYW5k
bGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkobmV0d29ya2luZ0NvbnRleHQoKSwgYWN0dWFs
UmVxdWVzdCwgc3RvcmVkQ3JlZGVudGlhbHMsIGVycm9yLCByZXNwb25zZSwgZGF0YSk7CisjaWYg
RU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyAgICAgICAgICAgIGRvY3VtZW50TG9h
ZGVyKCktPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPm1heWJlTG9hZEZhbGxiYWNrU3luY2hyb25v
dXNseShhY3R1YWxSZXF1ZXN0LCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOworICAgICAgICB9Cisj
ZW5kaWYKKyAgICB9CisgICAgbm90aWZpZXIoKS0+c2VuZFJlbWFpbmluZ0RlbGVnYXRlTWVzc2Fn
ZXMobV9kb2N1bWVudExvYWRlci5nZXQoKSwgaWRlbnRpZmllciwgcmVzcG9uc2UsIGRhdGEuc2l6
ZSgpLCBlcnJvcik7CisgICAgcmV0dXJuIGlkZW50aWZpZXI7Cit9CisKK1Bhc3NSZWZQdHI8Qmxv
Yj4gRnJhbWVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHlBc0Jsb2IoY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9yZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFs
cywgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCB1bnNp
Z25lZCBsb25nJiBpZGVudGlmaWVyKQoreworICAgIEFTU0VSVChyZXF1ZXN0LmRvd25sb2FkQXNC
bG9iKCkpOworICAgIFJlc291cmNlUmVxdWVzdCBhY3R1YWxSZXF1ZXN0OworICAgIGlkZW50aWZp
ZXIgPSBwcmVwYXJlU3luY1JlcXVlc3QocmVxdWVzdCwgZXJyb3IsIGFjdHVhbFJlcXVlc3QpOwor
ICAgIFJlZlB0cjxCbG9iPiBkYXRhQXNCbG9iOworICAgIGlmIChlcnJvci5pc051bGwoKSkgewor
ICAgICAgICBBU1NFUlQoIWFjdHVhbFJlcXVlc3QuaXNOdWxsKCkpOworICAgICAgICAKKyNpZiAw
IC8vIEZJWE1FOiBTdXBwb3J0IGZvciBhcHBjYWNoZWQgcmVzb3VyY2VzLgorICAgICAgICBpZiAo
IWRvY3VtZW50TG9hZGVyKCktPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPm1heWJlTG9hZFN5bmNo
cm9ub3VzbHkoYWN0dWFsUmVxdWVzdCwgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKSkgeworI2VuZGlm
CisgICAgICAgICAgICBkYXRhQXNCbG9iID0gUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5
bmNocm9ub3VzbHlBc0Jsb2IobmV0d29ya2luZ0NvbnRleHQoKSwgYWN0dWFsUmVxdWVzdCwgc3Rv
cmVkQ3JlZGVudGlhbHMsIGVycm9yLCByZXNwb25zZSk7CisjaWYgMCAvLyBGSVhNRTogRGl0dG8u
CisgICAgICAgICAgICBkb2N1bWVudExvYWRlcigpLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5t
YXliZUxvYWRGYWxsYmFja1N5bmNocm9ub3VzbHkoYWN0dWFsUmVxdWVzdCwgZXJyb3IsIHJlc3Bv
bnNlLCBkYXRhKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorICAgIGludCBub3RpZnlMZW5n
dGggPSBkYXRhQXNCbG9iID8gc3RhdGljX2Nhc3Q8aW50PihzdGQ6Om1pbihkYXRhQXNCbG9iLT5z
aXplKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oSU5UX01BWCkpKSA6IDA7Cisg
ICAgbm90aWZpZXIoKS0+c2VuZFJlbWFpbmluZ0RlbGVnYXRlTWVzc2FnZXMobV9kb2N1bWVudExv
YWRlci5nZXQoKSwgaWRlbnRpZmllciwgcmVzcG9uc2UsIG5vdGlmeUxlbmd0aCwgZXJyb3IpOwor
ICAgIHJldHVybiBkYXRhQXNCbG9iOworfQorCit1bnNpZ25lZCBsb25nIEZyYW1lTG9hZGVyOjpw
cmVwYXJlU3luY1JlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJj
ZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXF1ZXN0JiBhY3R1YWxSZXF1ZXN0KQorewogICAgIFN0
cmluZyByZWZlcnJlciA9IG1fb3V0Z29pbmdSZWZlcnJlcjsKICAgICBpZiAoU2VjdXJpdHlPcmln
aW46OnNob3VsZEhpZGVSZWZlcnJlcihyZXF1ZXN0LnVybCgpLCByZWZlcnJlcikpCiAgICAgICAg
IHJlZmVycmVyID0gU3RyaW5nKCk7CkBAIC0yNzUzLDI3ICsyNzk3LDEyIEBAIHVuc2lnbmVkIGxv
bmcgRnJhbWVMb2FkZXI6OmxvYWRSZXNvdXJjZVMKICAgICBpZiAoUGFnZSogcGFnZSA9IG1fZnJh
bWUtPnBhZ2UoKSkKICAgICAgICAgaW5pdGlhbFJlcXVlc3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tp
ZXMocGFnZS0+bWFpbkZyYW1lKCktPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5yZXF1ZXN0
KCkudXJsKCkpOwogICAgIGluaXRpYWxSZXF1ZXN0LnNldEhUVFBVc2VyQWdlbnQoY2xpZW50KCkt
PnVzZXJBZ2VudChyZXF1ZXN0LnVybCgpKSk7Ci0gICAgCisKICAgICBhZGRFeHRyYUZpZWxkc1Rv
U3VicmVzb3VyY2VSZXF1ZXN0KGluaXRpYWxSZXF1ZXN0KTsKIAogICAgIHVuc2lnbmVkIGxvbmcg
aWRlbnRpZmllciA9IDA7ICAgIAotICAgIFJlc291cmNlUmVxdWVzdCBuZXdSZXF1ZXN0KGluaXRp
YWxSZXF1ZXN0KTsKLSAgICByZXF1ZXN0RnJvbURlbGVnYXRlKG5ld1JlcXVlc3QsIGlkZW50aWZp
ZXIsIGVycm9yKTsKLQotICAgIGlmIChlcnJvci5pc051bGwoKSkgewotICAgICAgICBBU1NFUlQo
IW5ld1JlcXVlc3QuaXNOdWxsKCkpOwotICAgICAgICAKLSNpZiBFTkFCTEUoT0ZGTElORV9XRUJf
QVBQTElDQVRJT05TKQotICAgICAgICBpZiAoIWRvY3VtZW50TG9hZGVyKCktPmFwcGxpY2F0aW9u
Q2FjaGVIb3N0KCktPm1heWJlTG9hZFN5bmNocm9ub3VzbHkobmV3UmVxdWVzdCwgZXJyb3IsIHJl
c3BvbnNlLCBkYXRhKSkgewotI2VuZGlmCi0gICAgICAgICAgICBSZXNvdXJjZUhhbmRsZTo6bG9h
ZFJlc291cmNlU3luY2hyb25vdXNseShuZXR3b3JraW5nQ29udGV4dCgpLCBuZXdSZXF1ZXN0LCBz
dG9yZWRDcmVkZW50aWFscywgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKLSNpZiBFTkFCTEUoT0ZG
TElORV9XRUJfQVBQTElDQVRJT05TKQotICAgICAgICAgICAgZG9jdW1lbnRMb2FkZXIoKS0+YXBw
bGljYXRpb25DYWNoZUhvc3QoKS0+bWF5YmVMb2FkRmFsbGJhY2tTeW5jaHJvbm91c2x5KG5ld1Jl
cXVlc3QsIGVycm9yLCByZXNwb25zZSwgZGF0YSk7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgIH0K
LQotICAgIG5vdGlmaWVyKCktPnNlbmRSZW1haW5pbmdEZWxlZ2F0ZU1lc3NhZ2VzKG1fZG9jdW1l
bnRMb2FkZXIuZ2V0KCksIGlkZW50aWZpZXIsIHJlc3BvbnNlLCBkYXRhLnNpemUoKSwgZXJyb3Ip
OworICAgIGFjdHVhbFJlcXVlc3QgPSBpbml0aWFsUmVxdWVzdDsKKyAgICByZXF1ZXN0RnJvbURl
bGVnYXRlKGFjdHVhbFJlcXVlc3QsIGlkZW50aWZpZXIsIGVycm9yKTsKICAgICByZXR1cm4gaWRl
bnRpZmllcjsKIH0KIApJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCShyZXZpc2lvbiA2OTQyMikKKysr
IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUw
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBcmNoaXZlOwogY2xhc3MgQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2U7CitjbGFzcyBCbG9iOwogY2xhc3MgQ2FjaGVkRnJhbWVCYXNlOwog
Y2xhc3MgQ2FjaGVkUGFnZTsKIGNsYXNzIENhY2hlZFJlc291cmNlOwpAQCAtMTIzLDYgKzEyNCw3
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCByZXBvcnRMb2NhbExvYWRGYWlsZWQoRnJhbWUq
LCBjb25zdCBTdHJpbmcmIHVybCk7CiAKICAgICB1bnNpZ25lZCBsb25nIGxvYWRSZXNvdXJjZVN5
bmNocm9ub3VzbHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHMsIFJl
c291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRhKTsKKyAg
ICBQYXNzUmVmUHRyPEJsb2I+IGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHlBc0Jsb2IoY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHMsIFJlc291cmNlRXJyb3ImLCBSZXNv
dXJjZVJlc3BvbnNlJiwgdW5zaWduZWQgbG9uZyYpOwogCiAgICAgYm9vbCBjYW5IYW5kbGVSZXF1
ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOwogCkBAIC00MzEsNiArNDMzLDggQEAgcHJpdmF0
ZToKIAogICAgIHZvaWQgdXBkYXRlU2FuZGJveEZsYWdzKCk7CiAKKyAgICB1bnNpZ25lZCBsb25n
IHByZXBhcmVTeW5jUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBSZXNvdXJjZUVycm9y
JiwgUmVzb3VyY2VSZXF1ZXN0JiBhY3R1YWxSZXF1ZXN0KTsKKwogICAgIEZyYW1lKiBtX2ZyYW1l
OwogICAgIEZyYW1lTG9hZGVyQ2xpZW50KiBtX2NsaWVudDsKIApJbmRleDogV2ViQ29yZS9sb2Fk
ZXIvUmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1Jlc291
cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gNjk0MjIpCisrKyBXZWJDb3JlL2xvYWRlci9SZXNvdXJj
ZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMCw5ICsyMjAsMTAgQEAgdm9pZCBSZXNv
dXJjZUxvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0KFJlcwogICAgICAgICAgICAgZnJhbWVMb2FkZXIo
KS0+bm90aWZpZXIoKS0+YXNzaWduSWRlbnRpZmllclRvSW5pdGlhbFJlcXVlc3QobV9pZGVudGlm
aWVyLCBkb2N1bWVudExvYWRlcigpLCByZXF1ZXN0KTsKICAgICAgICAgfQogCisgICAgICAgIGJv
b2wgc2F2ZURvd25sb2FkQXNCbG9iID0gcmVxdWVzdC5kb3dubG9hZEFzQmxvYigpOwogICAgICAg
ICBmcmFtZUxvYWRlcigpLT5ub3RpZmllcigpLT53aWxsU2VuZFJlcXVlc3QodGhpcywgcmVxdWVz
dCwgcmVkaXJlY3RSZXNwb25zZSk7CisgICAgICAgIHJlcXVlc3Quc2V0RG93bmxvYWRBc0Jsb2Io
c2F2ZURvd25sb2FkQXNCbG9iKTsKICAgICB9Ci0KICAgICBtX3JlcXVlc3QgPSByZXF1ZXN0Owog
fQogCkBAIC0yNzgsMTggKzI3OSwyMSBAQCB2b2lkIFJlc291cmNlTG9hZGVyOjp3aWxsU3RvcEJ1
ZmZlcmluZ0RhCiAKIHZvaWQgUmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcoZG91Ymxl
IGZpbmlzaFRpbWUpCiB7Ci0gICAgLy8gSWYgbG9hZCBoYXMgYmVlbiBjYW5jZWxsZWQgYWZ0ZXIg
ZmluaXNoaW5nICh3aGljaCBjb3VsZCBoYXBwZW4gd2l0aCBhIAotICAgIC8vIEphdmFTY3JpcHQg
dGhhdCBjaGFuZ2VzIHRoZSB3aW5kb3cgbG9jYXRpb24pLCBkbyBub3RoaW5nLgotICAgIGlmICht
X2NhbmNlbGxlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVCghbV9yZWFjaGVkVGVybWlu
YWxTdGF0ZSk7CisgICAgZGlkRmluaXNoTG9hZGluZ09uZVBhcnQoZmluaXNoVGltZSk7CisgICAg
cmVsZWFzZVJlc291cmNlcygpOworfQogCit2b2lkIFJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hM
b2FkaW5nQmxvYihkb3VibGUgZmluaXNoVGltZSwgQmxvYiopCit7CisgICAgLy8gRklYTUU6IFdo
YXQgYWJvdXQgbXVsdGlwYXJ0IGFuZCBkb3dubG9hZEFzQmxvYj8KICAgICBkaWRGaW5pc2hMb2Fk
aW5nT25lUGFydChmaW5pc2hUaW1lKTsKICAgICByZWxlYXNlUmVzb3VyY2VzKCk7CiB9CiAKIHZv
aWQgUmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmdPbmVQYXJ0KGRvdWJsZSBmaW5pc2hU
aW1lKQogeworICAgIC8vIElmIGxvYWQgaGFzIGJlZW4gY2FuY2VsbGVkIGFmdGVyIGZpbmlzaGlu
ZyAod2hpY2ggY291bGQgaGFwcGVuIHdpdGggYSAKKyAgICAvLyBKYXZhU2NyaXB0IHRoYXQgY2hh
bmdlcyB0aGUgd2luZG93IGxvY2F0aW9uKSwgZG8gbm90aGluZy4KICAgICBpZiAobV9jYW5jZWxs
ZWQpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQoIW1fcmVhY2hlZFRlcm1pbmFsU3RhdGUp
OwpAQCAtMzkwLDYgKzM5NCw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkZXI6OndpbGxTZW5kUmVxdWVz
dChSZXMKICAgICBpZiAoZG9jdW1lbnRMb2FkZXIoKS0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS0+
bWF5YmVMb2FkRmFsbGJhY2tGb3JSZWRpcmVjdCh0aGlzLCByZXF1ZXN0LCByZWRpcmVjdFJlc3Bv
bnNlKSkKICAgICAgICAgcmV0dXJuOwogI2VuZGlmCisgICAgQVNTRVJUKHJlcXVlc3QuZG93bmxv
YWRBc0Jsb2IoKSA9PSBtX3JlcXVlc3QuZG93bmxvYWRBc0Jsb2IoKSk7CiAgICAgd2lsbFNlbmRS
ZXF1ZXN0KHJlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpOwogfQogCkBAIC00MTEsOCArNDE2LDIx
IEBAIHZvaWQgUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZSgKIAogdm9pZCBSZXNv
dXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZURhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiBk
YXRhLCBpbnQgbGVuZ3RoLCBpbnQgbGVuZ3RoUmVjZWl2ZWQpCiB7CisgICAgZGlkUmVjZWl2ZURh
dGFDb21tb24oUmVzcG9uc2VBc0RhdGEsIGRhdGEsIGxlbmd0aCwgbGVuZ3RoUmVjZWl2ZWQpOwor
fQorCit2b2lkIFJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlQmxvYkRhdGEoUmVzb3VyY2VIYW5k
bGUqLCBpbnQgbGVuZ3RoKQoreworICAgIGRpZFJlY2VpdmVEYXRhQ29tbW9uKFJlc3BvbnNlQXNC
bG9iLCAwLCBsZW5ndGgsIDApOworfQorCit2b2lkIFJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZl
RGF0YUNvbW1vbihSZXNwb25zZUFzTW9kZSByZXNwb25zZUFzLCBjb25zdCBjaGFyKiBkYXRhLCBp
bnQgbGVuZ3RoLCBpbnQgbGVuZ3RoUmVjZWl2ZWQpCit7CiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uQ29va2llIGNvb2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFJlY2Vp
dmVSZXNvdXJjZURhdGEobV9mcmFtZS5nZXQoKSwgaWRlbnRpZmllcigpKTsKLSAgICBkaWRSZWNl
aXZlRGF0YShkYXRhLCBsZW5ndGgsIGxlbmd0aFJlY2VpdmVkLCBmYWxzZSk7CisgICAgaWYgKHJl
c3BvbnNlQXMgPT0gUmVzcG9uc2VBc0RhdGEpCisgICAgICAgIGRpZFJlY2VpdmVEYXRhKGRhdGEs
IGxlbmd0aCwgbGVuZ3RoUmVjZWl2ZWQsIGZhbHNlKTsKKyAgICBlbHNlCisgICAgICAgIGRpZFJl
Y2VpdmVCbG9iRGF0YShsZW5ndGgpOwogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlk
UmVjZWl2ZVJlc291cmNlRGF0YShjb29raWUpOwogfQogCkBAIC00MjEsNiArNDM5LDExIEBAIHZv
aWQgUmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcoUmUKICAgICBkaWRGaW5pc2hMb2Fk
aW5nKGZpbmlzaFRpbWUpOwogfQogCit2b2lkIFJlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2Fk
aW5nQmxvYihSZXNvdXJjZUhhbmRsZSosIGRvdWJsZSBmaW5pc2hUaW1lLCBCbG9iKiBibG9iKQor
eworICAgIGRpZEZpbmlzaExvYWRpbmdCbG9iKGZpbmlzaFRpbWUsIGJsb2IpOworfQorCiB2b2lk
IFJlc291cmNlTG9hZGVyOjpkaWRGYWlsKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VF
cnJvciYgZXJyb3IpCiB7CiAjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKQEAg
LTQ5Miw2ICs1MTUsOCBAQCB2b2lkIFJlc291cmNlTG9hZGVyOjp3aWxsQ2FjaGVSZXNwb25zZShS
CiAjaWYgRU5BQkxFKEJMT0IpCiBBc3luY0ZpbGVTdHJlYW0qIFJlc291cmNlTG9hZGVyOjpjcmVh
dGVBc3luY0ZpbGVTdHJlYW0oRmlsZVN0cmVhbUNsaWVudCogY2xpZW50KQogeworICAgIC8vIEZJ
WE1FOiBEZWNvdXBsZSB0aGUgRmlsZVRocmVhZCBmcm9tIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRz
IGFuZCByZW1vdmUgdGhpcyBtZXRob2QgZnJvbSBSZXNvdXJjZUhhbmRsZUNsaWVudCwKKyAgICAv
LyBjYWxsZXJzIHNob3VlIGJlIGFibGUgdG8gY3JlYXRlIGEgRmlsZVN0cmVhbVByb3h5IGluZGVw
ZW5kZW50IG9mIGEgY29udGV4dC4KICAgICAvLyBJdCBpcyBPSyB0byBzaW1wbHkgcmV0dXJuIGEg
cG9pbnRlciBzaW5jZSBGaWxlU3RyZWFtUHJveHk6OmNyZWF0ZSBhZGRzIGFuIGV4dHJhIHJlZi4K
ICAgICByZXR1cm4gRmlsZVN0cmVhbVByb3h5OjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKS0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBjbGllbnQpLmdldCgpOwogfQpJbmRleDogV2ViQ29y
ZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9S
ZXNvdXJjZUxvYWRlci5oCShyZXZpc2lvbiA2OTQyMikKKysrIFdlYkNvcmUvbG9hZGVyL1Jlc291
cmNlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDkgKzgwLDExIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFNlbmREYXRhKHVuc2lnbmVkIGxvbmcg
bG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpOwog
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIq
LCBpbnQsIGxvbmcgbG9uZyBsZW5ndGhSZWNlaXZlZCwgYm9vbCBhbGxBdE9uY2UpOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUJsb2JEYXRhKGludCkgeyB9CiAgICAgICAgIHZpcnR1
YWwgdm9pZCBkaWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEoY29uc3QgY2hhciosIGludCkgeyB9CiAg
ICAgICAgIHZvaWQgd2lsbFN0b3BCdWZmZXJpbmdEYXRhKGNvbnN0IGNoYXIqLCBpbnQpOwogICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhkb3VibGUgZmluaXNoVGltZSk7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nQmxvYihkb3VibGUgZmluaXNoVGlt
ZSwgQmxvYiopOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVy
cm9yJik7CiAKICAgICAgICAgdmlydHVhbCBib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdl
KCk7CkBAIC05OCw4ICsxMDAsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0
dWFsIHZvaWQgZGlkU2VuZERhdGEoUmVzb3VyY2VIYW5kbGUqLCB1bnNpZ25lZCBsb25nIGxvbmcg
Ynl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50KTsKICAgICAg
ICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZUhhbmRsZSosIGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRh
KFJlc291cmNlSGFuZGxlKiwgY29uc3QgY2hhciosIGludCwgaW50IGxlbmd0aFJlY2VpdmVkKTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVCbG9iRGF0YShSZXNvdXJjZUhhbmRsZSos
IGludCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEoUmVz
b3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKSB7IGRpZFJlY2VpdmVD
YWNoZWRNZXRhZGF0YShkYXRhLCBsZW5ndGgpOyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRG
aW5pc2hMb2FkaW5nKFJlc291cmNlSGFuZGxlKiwgZG91YmxlIGZpbmlzaFRpbWUpOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZ0Jsb2IoUmVzb3VyY2VIYW5kbGUqLCBkb3Vi
bGUgZmluaXNoVGltZSwgQmxvYiopOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChSZXNv
dXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlRXJyb3ImKTsKICAgICAgICAgdmlydHVhbCB2b2lk
IHdhc0Jsb2NrZWQoUmVzb3VyY2VIYW5kbGUqKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGNhbm5v
dFNob3dVUkwoUmVzb3VyY2VIYW5kbGUqKTsKQEAgLTEyOCw2ICsxMzIsMTEgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB2b2lkIHNldFNob3VsZEJ1ZmZlckRhdGEoYm9vbCBzaG91bGRC
dWZmZXJEYXRhKTsKIAogICAgIHByb3RlY3RlZDoKKyAgICAgICAgZW51bSBSZXNwb25zZUFzTW9k
ZSAgeworICAgICAgICAgICAgUmVzcG9uc2VBc0RhdGEsCisgICAgICAgICAgICBSZXNwb25zZUFz
QmxvYgorICAgICAgICB9OworCiAgICAgICAgIFJlc291cmNlTG9hZGVyKEZyYW1lKiwgYm9vbCBz
ZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzLCBib29sIHNob3VsZENvbnRlbnRTbmlmZik7CiAKICNp
ZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQpAQCAtMTQxLDYgKzE1MCw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCByZWFjaGVkVGVybWluYWxTdGF0ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVhY2hlZFRlcm1pbmFsU3RhdGU7IH0KICAgICAgICAgYm9vbCBjYW5j
ZWxsZWQoKSBjb25zdCB7IHJldHVybiBtX2NhbmNlbGxlZDsgfQogICAgICAgICBib29sIGRlZmVy
c0xvYWRpbmcoKSBjb25zdCB7IHJldHVybiBtX2RlZmVyc0xvYWRpbmc7IH0KKyAgICAgICAgdm9p
ZCBkaWRSZWNlaXZlRGF0YUNvbW1vbihSZXNwb25zZUFzTW9kZSwgY29uc3QgY2hhciosIGludCwg
aW50IGxlbmd0aFJlY2VpdmVkKTsKIAogICAgICAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IG1f
aGFuZGxlOwogICAgICAgICBSZWZQdHI8RnJhbWU+IG1fZnJhbWU7CkluZGV4OiBXZWJDb3JlL2xv
YWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIv
U3VicmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiA2OTQyMikKKysrIFdlYkNvcmUvbG9hZGVy
L1N1YnJlc291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU4LDYgKzE1OCwyMCBA
QCB2b2lkIFN1YnJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YShjCiAgICAgICAgIG1fY2xp
ZW50LT5kaWRSZWNlaXZlRGF0YSh0aGlzLCBkYXRhLCBsZW5ndGgpOwogfQogCit2b2lkIFN1YnJl
c291cmNlTG9hZGVyOjpkaWRSZWNlaXZlQmxvYkRhdGEoaW50IGxlbmd0aCkKK3sKKyAgICAvLyBS
ZWZlcmVuY2UgdGhlIG9iamVjdCBpbiB0aGlzIG1ldGhvZCBzaW5jZSB0aGUgYWRkaXRpb25hbCBw
cm9jZXNzaW5nIGNhbiBkbworICAgIC8vIGFueXRoaW5nIGluY2x1ZGluZyByZW1vdmluZyB0aGUg
bGFzdCByZWZlcmVuY2UgdG8gdGhpcyBvYmplY3Q7IG9uZSBleGFtcGxlIG9mIHRoaXMgaXMgMzI2
NjIxNi4KKyAgICBSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IHByb3RlY3QodGhpcyk7CisKKyAg
ICBSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUJsb2JEYXRhKGxlbmd0aCk7CisKKyAgICAvLyBB
IHN1YnJlc291cmNlIGxvYWRlciBkb2VzIG5vdCBsb2FkIG11bHRpcGFydCBzZWN0aW9ucyBwcm9n
cmVzc2l2ZWx5LgorICAgIC8vIFNvIGRvbid0IGRlbGl2ZXIgYW55IGRhdGEgdG8gdGhlIGxvYWRl
ciB5ZXQuCisgICAgaWYgKCFtX2xvYWRpbmdNdWx0aXBhcnRDb250ZW50ICYmIG1fY2xpZW50KQor
ICAgICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZUJsb2JEYXRhKHRoaXMsIGxlbmd0aCk7Cit9CisK
IHZvaWQgU3VicmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YShjb25zdCBj
aGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQogewogICAgIC8vIFJlZmVyZW5jZSB0aGUgb2JqZWN0IGlu
IHRoaXMgbWV0aG9kIHNpbmNlIHRoZSBhZGRpdGlvbmFsIHByb2Nlc3NpbmcgY2FuIGRvCkBAIC0x
NzAsNiArMTg0LDE2IEBAIHZvaWQgU3VicmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVDYWNoZWQK
IAogdm9pZCBTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyhkb3VibGUgZmluaXNo
VGltZSkKIHsKKyAgICBkaWRGaW5pc2hMb2FkaW5nQ29tbW9uKFJlc3BvbnNlQXNEYXRhLCBmaW5p
c2hUaW1lLCAwKTsKK30KKwordm9pZCBTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGlu
Z0Jsb2IoZG91YmxlIGZpbmlzaFRpbWUsIEJsb2IqIGJsb2IpCit7CisgICAgZGlkRmluaXNoTG9h
ZGluZ0NvbW1vbihSZXNwb25zZUFzQmxvYiwgZmluaXNoVGltZSwgYmxvYik7Cit9CisKK3ZvaWQg
U3VicmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmdDb21tb24oUmVzcG9uc2VBc01vZGUg
cmVzcG9uc2VBcywgZG91YmxlIGZpbmlzaFRpbWUsIEJsb2IqIGJsb2IpCit7CiAgICAgaWYgKGNh
bmNlbGxlZCgpKQogICAgICAgICByZXR1cm47CiAgICAgQVNTRVJUKCFyZWFjaGVkVGVybWluYWxT
dGF0ZSgpKTsKQEAgLTE3OCwxNCArMjAyLDIwIEBAIHZvaWQgU3VicmVzb3VyY2VMb2FkZXI6OmRp
ZEZpbmlzaExvYWRpbmcKICAgICBSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IHByb3RlY3QodGhp
cyk7CiAKICAgICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1fY2xpZW50LT5kaWRGaW5pc2hMb2Fk
aW5nKHRoaXMpOwotICAgIAorICAgICAgICBpZiAocmVzcG9uc2VBcyA9PSBSZXNwb25zZUFzQmxv
YikKKyAgICAgICAgICAgIG1fY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nQmxvYih0aGlzLCBibG9i
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9jbGllbnQtPmRpZEZpbmlzaExvYWRpbmco
dGhpcyk7CisKICAgICBtX2hhbmRsZSA9IDA7CiAKICAgICBpZiAoY2FuY2VsbGVkKCkpCiAgICAg
ICAgIHJldHVybjsKICAgICBtX2RvY3VtZW50TG9hZGVyLT5yZW1vdmVTdWJyZXNvdXJjZUxvYWRl
cih0aGlzKTsKLSAgICBSZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyhmaW5pc2hUaW1l
KTsKKyAgICBpZiAocmVzcG9uc2VBcyA9PSBSZXNwb25zZUFzQmxvYikKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmdCbG9iKGZpbmlzaFRpbWUsIGJsb2IpOworICAgIGVs
c2UKKyAgICAgICAgUmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcoZmluaXNoVGltZSk7
CiB9CiAKIHZvaWQgU3VicmVzb3VyY2VMb2FkZXI6OmRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJv
ciYgZXJyb3IpCkluZGV4OiBXZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmgJKHJldmlzaW9uIDY5
NDIyKQorKysgV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNTEsMTQgKzUxLDE4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVh
bCB2b2lkIGRpZFNlbmREYXRhKHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVk
IGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlk
UmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKICAgICAgICAgdmlydHVh
bCB2b2lkIGRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqLCBpbnQsIGxvbmcgbG9uZyBsZW5ndGhS
ZWNlaXZlZCwgYm9vbCBhbGxBdE9uY2UpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2
ZUJsb2JEYXRhKGludCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQ2FjaGVkTWV0
YWRhdGEoY29uc3QgY2hhciosIGludCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hM
b2FkaW5nKGRvdWJsZSBmaW5pc2hUaW1lKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlz
aExvYWRpbmdCbG9iKGRvdWJsZSBmaW5pc2hUaW1lLCBCbG9iKik7CiAgICAgICAgIHZpcnR1YWwg
dm9pZCBkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKICAgICAgICAgdmlydHVhbCBib29s
IHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRS
ZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UmKTsKICAgICAgICAgdmlydHVhbCB2b2lkIHJlY2VpdmVkQ2FuY2VsbGF0aW9uKGNvbnN0IEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7ICAgICAgICAKICAgICAgICAgdmlydHVhbCB2b2lkIGRp
ZENhbmNlbChjb25zdCBSZXNvdXJjZUVycm9yJik7CiAKKyAgICAgICAgdm9pZCBkaWRGaW5pc2hM
b2FkaW5nQ29tbW9uKFJlc3BvbnNlQXNNb2RlLCBkb3VibGUgZmluaXNoVGltZSwgQmxvYiopOwor
CiAgICAgICAgIFN1YnJlc291cmNlTG9hZGVyQ2xpZW50KiBtX2NsaWVudDsKICAgICAgICAgYm9v
bCBtX2xvYWRpbmdNdWx0aXBhcnRDb250ZW50OwogICAgIH07CkluZGV4OiBXZWJDb3JlL2xvYWRl
ci9TdWJyZXNvdXJjZUxvYWRlckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVy
L1N1YnJlc291cmNlTG9hZGVyQ2xpZW50LmgJKHJldmlzaW9uIDY5NDIyKQorKysgV2ViQ29yZS9s
b2FkZXIvU3VicmVzb3VyY2VMb2FkZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiAr
MjksOSBAQAogI2lmbmRlZiBTdWJyZXNvdXJjZUxvYWRlckNsaWVudF9oCiAjZGVmaW5lIFN1YnJl
c291cmNlTG9hZGVyQ2xpZW50X2gKIAorI2luY2x1ZGUgIkJsb2IuaCIKKyNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlOwpAQCAtNDYsMTEgKzQ5LDEzIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgZGlkU2VuZERhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGxvbmcgLypi
eXRlc1NlbnQqLywgdW5zaWduZWQgbG9uZyBsb25nIC8qdG90YWxCeXRlc1RvQmVTZW50Ki8pIHsg
fQogCiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShTdWJyZXNvdXJjZUxvYWRl
ciosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVj
ZWl2ZURhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBjaGFyKiwgaW50IC8qbGVuZ3RoUmVj
ZWl2ZWQqLykgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFN1YnJlc291cmNl
TG9hZGVyKiwgY29uc3QgY2hhciosIGludCAvKmxlbmd0aFJlY2VpdmVkKi8pIHsgfSAvLyBOb3Qg
Y2FsbGVkIGlmIHJlcXVlc3QuZG93bmxvYWRBc0Jsb2IgaXMgc2V0LgorICAgIHZpcnR1YWwgdm9p
ZCBkaWRSZWNlaXZlQmxvYkRhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCBpbnQgLypsZW5ndGhSZWNl
aXZlZCovKSB7IH0gLy8gT25seSBjYWxsZWQgaWYgcmVxdWVzdC5kb3dubG9hZEFzQmxvYiBpcyBz
ZXQuCiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YShTdWJyZXNvdXJj
ZUxvYWRlciosIGNvbnN0IGNoYXIqLCBpbnQgLypsZW5ndGhSZWNlaXZlZCovKSB7IH0KICAgICB2
aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhTdWJyZXNvdXJjZUxvYWRlciopIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nQmxvYihTdWJyZXNvdXJjZUxvYWRlciosIEJs
b2IqKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChTdWJyZXNvdXJjZUxvYWRlciosIGNv
bnN0IFJlc291cmNlRXJyb3ImKSB7IH0KLSAgICAKKwogICAgIHZpcnR1YWwgYm9vbCBnZXRTaG91
bGRVc2VDcmVkZW50aWFsU3RvcmFnZShTdWJyZXNvdXJjZUxvYWRlciosIGJvb2wmIC8qc2hvdWxk
VXNlQ3JlZGVudGlhbFN0b3JhZ2UqLykgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFN1YnJlc291cmNlTG9hZGVyKiwg
Y29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgcmVj
ZWl2ZWRDYW5jZWxsYXRpb24oU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZSYpIHsgfQpJbmRleDogV2ViQ29yZS9sb2FkZXIvVGhyZWFkYWJsZUxvYWRlckNs
aWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL1RocmVhZGFibGVMb2FkZXJDbGll
bnQuaAkocmV2aXNpb24gNjk0MjIpCisrKyBXZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxlTG9hZGVy
Q2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDkgQEAKICNpZm5kZWYgVGhyZWFk
YWJsZUxvYWRlckNsaWVudF9oCiAjZGVmaW5lIFRocmVhZGFibGVMb2FkZXJDbGllbnRfaAogCisj
aW5jbHVkZSAiQmxvYi5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIFJlc291cmNlRXJyb3I7CkBAIC00MSw4ICs0NCwxMCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YSh1
bnNpZ25lZCBsb25nIGxvbmcgLypieXRlc1NlbnQqLywgdW5zaWduZWQgbG9uZyBsb25nIC8qdG90
YWxCeXRlc1RvQmVTZW50Ki8pIHsgfQogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZl
UmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpIHsgfQotICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciosIGludCAvKmxlbmd0aFJlY2VpdmVkKi8pIHsg
fQorICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciosIGludCAv
Kmxlbmd0aFJlY2VpdmVkKi8pIHsgfSAvLyBOb3QgY2FsbGVkIHdoZW4gcmVxdWVzdC5kb3dubG9h
ZEFzQmxvYiBpcyBzZXQuCisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQmxvYkRhdGEo
aW50IC8qbGVuZ3RoUmVjZWl2ZWQqLykgeyB9IC8vIE9ubHkgY2FsbGVkIGZvciByZXF1ZXN0LmRv
d25sb2FkQXNCbG9iCiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKHVuc2ln
bmVkIGxvbmcgLyppZGVudGlmaWVyKi8pIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmlu
aXNoTG9hZGluZ0Jsb2IodW5zaWduZWQgbG9uZyAvKmlkZW50aWZpZXIqLywgQmxvYiopIHsgfQog
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJikgeyB9CiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsUmVkaXJlY3RDaGVjaygpIHsgfQogCkluZGV4OiBX
ZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvbG9hZGVyL1RocmVhZGFibGVMb2FkZXJDbGllbnRXcmFwcGVyLmgJKHJldmlz
aW9uIDY5NDIyKQorKysgV2ViQ29yZS9sb2FkZXIvVGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBw
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICAgICAgICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlRGF0YShkYXRhLCBsZW5ndGhS
ZWNlaXZlZCk7CiAgICAgICAgIH0KIAorICAgICAgICB2b2lkIGRpZFJlY2VpdmVCbG9iRGF0YShp
bnQgbGVuZ3RoUmVjZWl2ZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX2NsaWVudCkK
KyAgICAgICAgICAgICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZUJsb2JEYXRhKGxlbmd0aFJlY2Vp
dmVkKTsKKyAgICAgICAgfQorCiAgICAgICAgIHZvaWQgZGlkRmluaXNoTG9hZGluZyh1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1fZG9uZSA9IHRydWU7
CkBAIC04MSw2ICs4NywxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAgICAg
bV9jbGllbnQtPmRpZEZpbmlzaExvYWRpbmcoaWRlbnRpZmllcik7CiAgICAgICAgIH0KIAorICAg
ICAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmdCbG9iKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwg
QmxvYiogYmxvYikKKyAgICAgICAgeworICAgICAgICAgICAgbV9kb25lID0gdHJ1ZTsKKyAgICAg
ICAgICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgICAgICAgICBtX2NsaWVudC0+ZGlkRmluaXNo
TG9hZGluZ0Jsb2IoaWRlbnRpZmllciwgYmxvYik7CisgICAgICAgIH0KKwogICAgICAgICB2b2lk
IGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIG1fZG9uZSA9IHRydWU7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9Xb3JrZXJUaHJlYWRhYmxl
TG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9Xb3JrZXJUaHJlYWRhYmxl
TG9hZGVyLmNwcAkocmV2aXNpb24gNjk0MjIpCisrKyBXZWJDb3JlL2xvYWRlci9Xb3JrZXJUaHJl
YWRhYmxlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkxLDYgKzE5MSwxMiBAQCBzdGF0
aWMgdm9pZCB3b3JrZXJDb250ZXh0RGlkUmVjZWl2ZURhdGEoCiAgICAgd29ya2VyQ2xpZW50V3Jh
cHBlci0+ZGlkUmVjZWl2ZURhdGEodmVjdG9yRGF0YS0+ZGF0YSgpLCB2ZWN0b3JEYXRhLT5zaXpl
KCkpOwogfQogCitzdGF0aWMgdm9pZCB3b3JrZXJDb250ZXh0RGlkUmVjZWl2ZUJsb2JEYXRhKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFJlZlB0cjxUaHJlYWRhYmxlTG9hZGVyQ2xp
ZW50V3JhcHBlcj4gd29ya2VyQ2xpZW50V3JhcHBlciwgaW50IGxlbmd0aFJlY2VpdmVkKQorewor
ICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwgY29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpOwor
ICAgIHdvcmtlckNsaWVudFdyYXBwZXItPmRpZFJlY2VpdmVCbG9iRGF0YShsZW5ndGhSZWNlaXZl
ZCk7Cit9CisKIHZvaWQgV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEJyaWRnZTo6
ZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aFJlY2VpdmVkKQogewog
ICAgIE93blB0cjxWZWN0b3I8Y2hhcj4gPiB2ZWN0b3IgPSBhZG9wdFB0cihuZXcgVmVjdG9yPGNo
YXI+KGxlbmd0aFJlY2VpdmVkKSk7IC8vIG5lZWRzIHRvIGJlIGFuIE93blB0ciBmb3IgdXNhZ2Ug
d2l0aCBjcmVhdGVDYWxsYmFja1Rhc2suCkBAIC0xOTgsNiArMjA0LDExIEBAIHZvaWQgV29ya2Vy
VGhyZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEIKICAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNr
Rm9yTW9kZVRvV29ya2VyQ29udGV4dChjcmVhdGVDYWxsYmFja1Rhc2soJndvcmtlckNvbnRleHRE
aWRSZWNlaXZlRGF0YSwgbV93b3JrZXJDbGllbnRXcmFwcGVyLCB2ZWN0b3IucmVsZWFzZSgpKSwg
bV90YXNrTW9kZSk7CiB9CiAKK3ZvaWQgV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6TWFpblRocmVh
ZEJyaWRnZTo6ZGlkUmVjZWl2ZUJsb2JEYXRhKGludCBsZW5ndGhSZWNlaXZlZCkKK3sKKyAgICBt
X2xvYWRlclByb3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyQ29udGV4dChjcmVhdGVDYWxsYmFj
a1Rhc2soJndvcmtlckNvbnRleHREaWRSZWNlaXZlQmxvYkRhdGEsIG1fd29ya2VyQ2xpZW50V3Jh
cHBlciwgbGVuZ3RoUmVjZWl2ZWQpLCBtX3Rhc2tNb2RlKTsKK30KKwogc3RhdGljIHZvaWQgd29y
a2VyQ29udGV4dERpZEZpbmlzaExvYWRpbmcoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgUmVmUHRyPFRocmVhZGFibGVMb2FkZXJDbGllbnRXcmFwcGVyPiB3b3JrZXJDbGllbnRXcmFw
cGVyLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChjb250
ZXh0LCBjb250ZXh0LT5pc1dvcmtlckNvbnRleHQoKSk7CkBAIC0yMDksNiArMjIwLDIwIEBAIHZv
aWQgV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEIKICAgICBtX2xvYWRlclByb3h5
LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyQ29udGV4dChjcmVhdGVDYWxsYmFja1Rhc2soJndvcmtl
ckNvbnRleHREaWRGaW5pc2hMb2FkaW5nLCBtX3dvcmtlckNsaWVudFdyYXBwZXIsIGlkZW50aWZp
ZXIpLCBtX3Rhc2tNb2RlKTsKIH0KIAorc3RhdGljIHZvaWQgd29ya2VyQ29udGV4dERpZEZpbmlz
aExvYWRpbmdCbG9iKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFJlZlB0cjxUaHJl
YWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBlcj4gd29ya2VyQ2xpZW50V3JhcHBlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGlkZW50
aWZpZXIsIEtVUkwgYmxvYklELCBTdHJpbmcgdHlwZSwgbG9uZyBsb25nIHNpemUpCit7CisgICAg
QVNTRVJUX1VOVVNFRChjb250ZXh0LCBjb250ZXh0LT5pc1dvcmtlckNvbnRleHQoKSk7CisgICAg
UmVmUHRyPEJsb2I+IGJsb2IgPSBCbG9iOjpjcmVhdGUoYmxvYklELCB0eXBlLCBzaXplKTsKKyAg
ICB3b3JrZXJDbGllbnRXcmFwcGVyLT5kaWRGaW5pc2hMb2FkaW5nQmxvYihpZGVudGlmaWVyLCBi
bG9iLmdldCgpKTsKK30KKwordm9pZCBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFk
QnJpZGdlOjpkaWRGaW5pc2hMb2FkaW5nQmxvYih1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIEJs
b2IqIGJsb2IpCit7CisgICAgbV9kb3dubG9hZGVkQmxvYiA9IGJsb2I7CisgICAgbV9sb2FkZXJQ
cm94eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckNvbnRleHQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZ3
b3JrZXJDb250ZXh0RGlkRmluaXNoTG9hZGluZ0Jsb2IsIG1fd29ya2VyQ2xpZW50V3JhcHBlciwg
aWRlbnRpZmllciwgYmxvYi0+dXJsKCksIGJsb2ItPnR5cGUoKSwgYmxvYi0+c2l6ZSgpKSwgbV90
YXNrTW9kZSk7Cit9CisKIHN0YXRpYyB2b2lkIHdvcmtlckNvbnRleHREaWRGYWlsKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFJlZlB0cjxUaHJlYWRhYmxlTG9hZGVyQ2xpZW50V3Jh
cHBlcj4gd29ya2VyQ2xpZW50V3JhcHBlciwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiB7
CiAgICAgQVNTRVJUX1VOVVNFRChjb250ZXh0LCBjb250ZXh0LT5pc1dvcmtlckNvbnRleHQoKSk7
CkluZGV4OiBXZWJDb3JlL2xvYWRlci9Xb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9sb2FkZXIvV29ya2VyVGhyZWFkYWJsZUxvYWRlci5oCShyZXZpc2lvbiA2
OTQyMikKKysrIFdlYkNvcmUvbG9hZGVyL1dvcmtlclRocmVhZGFibGVMb2FkZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE0LDEyICsxMTQsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICAgICAgdmlydHVhbCB2b2lkIGRpZFNlbmREYXRhKHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1Nl
bnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpOwogICAgICAgICAgICAg
dmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7
CiAgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciosIGlu
dCBsZW5ndGhSZWNlaXZlZCk7CisgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUJs
b2JEYXRhKGludCBsZW5ndGhSZWNlaXZlZCk7CiAgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZGlk
RmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpOworICAgICAgICAgICAgdmly
dHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmdCbG9iKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwg
QmxvYiopOwogICAgICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VF
cnJvciYpOwogICAgICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWxSZWRpcmVjdENoZWNrKCk7
CiAgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2FuY2Vs
bGF0aW9uKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKIAotICAgICAgICAgICAgLy8gT25seSB0
byBiZSB1c2VkIG9uIHRoZSBtYWluIHRocmVhZC4KKyAgICAgICAgICAgIC8vIEZvciB1c2Ugb24g
bWFpbiB0aHJlYWQuCiAgICAgICAgICAgICBSZWZQdHI8VGhyZWFkYWJsZUxvYWRlcj4gbV9tYWlu
VGhyZWFkTG9hZGVyOwogCiAgICAgICAgICAgICAvLyBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50V3Jh
cHBlciBpcyB0byBiZSB1c2VkIG9uIHRoZSB3b3JrZXIgY29udGV4dCB0aHJlYWQuCkBAIC0xMzEs
NiArMTMzLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgICAgICAvLyBGb3IgdXNl
IG9uIHRoZSBtYWluIHRocmVhZC4KICAgICAgICAgICAgIFN0cmluZyBtX3Rhc2tNb2RlOworCisg
ICAgICAgICAgICAvLyBGb3IgdXNlIG9uIHRoZSBtYWluIHRocmVhZC4KKyAgICAgICAgICAgIFJl
ZlB0cjxCbG9iPiBtX2Rvd25sb2FkZWRCbG9iOwogICAgICAgICB9OwogCiAgICAgICAgIFdvcmtl
clRocmVhZGFibGVMb2FkZXIoV29ya2VyQ29udGV4dCosIFRocmVhZGFibGVMb2FkZXJDbGllbnQq
LCBjb25zdCBTdHJpbmcmIHRhc2tNb2RlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBU
aHJlYWRhYmxlTG9hZGVyT3B0aW9ucyYpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlSGFuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VIYW5kbGUuY3BwCShyZXZpc2lvbiA2OTQyMikKKysrIFdlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDEyICsy
NSwxNCBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUu
aCIKLSNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUludGVybmFsLmgiCiAKKyNpbmNsdWRlICJCbG9i
LmgiCiAjaW5jbHVkZSAiQmxvYlJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiRE5TLmgiCisjaW5jbHVk
ZSAiSFRUUFBhcnNlcnMuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUmVzb3Vy
Y2VIYW5kbGVDbGllbnQuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUludGVybmFsLmgiCiAj
aW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAKQEAgLTU0LDYgKzU2LDcg
QEAgUmVzb3VyY2VIYW5kbGU6OlJlc291cmNlSGFuZGxlKGNvbnN0IFJlcwogCiBQYXNzUmVmUHRy
PFJlc291cmNlSGFuZGxlPiBSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlKE5ldHdvcmtpbmdDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlSGFuZGxl
Q2xpZW50KiBjbGllbnQsIGJvb2wgZGVmZXJzTG9hZGluZywgYm9vbCBzaG91bGRDb250ZW50U25p
ZmYpCiB7CisgICAgQVNTRVJUKCFyZXF1ZXN0LmRvd25sb2FkQXNCbG9iKCkpOyAvLyBGSVhNRTog
UHJvdmlkZSBhbiBhc3luY2hyb25vdXMgaW1wbGVtZW50YXRpb24gdGhhdCByZXR1cm5zIGEgYmxv
YiwgcG9zc2libHkgYSBSZXNvdXJjZUhhbmRsZUNsaWVudFdyYXBwZXIuCiAjaWYgRU5BQkxFKEJM
T0IpCiAgICAgaWYgKHJlcXVlc3QudXJsKCkucHJvdG9jb2xJcygiYmxvYiIpKSB7CiAgICAgICAg
IFBhc3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGhhbmRsZSA9IGJsb2JSZWdpc3RyeSgpLmNyZWF0
ZVJlc291cmNlSGFuZGxlKHJlcXVlc3QsIGNsaWVudCk7CkBAIC0xODUsNCArMTg4LDEyIEBAIHZv
aWQgUmVzb3VyY2VIYW5kbGU6OmNhY2hlTWV0YWRhdGEoY29uc3QKICAgICAvLyBPcHRpb25hbGx5
IGltcGxlbWVudGVkIGJ5IHBsYXRmb3JtLgogfQogCisvLyBzdGF0aWMKK1Bhc3NSZWZQdHI8Qmxv
Yj4gUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHlBc0Jsb2IoTmV0d29y
a2luZ0NvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRl
bnRpYWxzLCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYpCit7CisgICAgQVNTRVJU
X1VOVVNFRChyZXF1ZXN0LCByZXF1ZXN0LmRvd25sb2FkQXNCbG9iKCkpOworICAgIC8vIEZJWE1F
OiBQcm92aWRlIGEgc3luY2hyb25vdXMgaW1wbGVtZW50YXRpb24gdGhhdCByZXR1cm5zIGEgYmxv
Yi4KKyAgICByZXR1cm4gMDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgJKHJldmlzaW9uIDY5NDIyKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTc0LDYgKzc0LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgT3BhcXVlQ0ZIVFRQQ29va2llU3Rv
cmFnZQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZTsKK2NsYXNzIEJsb2I7CiBjbGFzcyBDcmVkZW50aWFsOwogY2xhc3MgRm9ybURhdGE7CiBjbGFz
cyBGcmFtZTsKQEAgLTk3LDYgKzk4LDcgQEAgY2xhc3MgUmVzb3VyY2VIYW5kbGUgOiBwdWJsaWMg
UmVmQ291bnRlZAogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlc291cmNlSGFuZGxl
PiBjcmVhdGUoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBSZXNv
dXJjZUhhbmRsZUNsaWVudCosIGJvb2wgZGVmZXJzTG9hZGluZywgYm9vbCBzaG91bGRDb250ZW50
U25pZmYpOwogICAgIHN0YXRpYyB2b2lkIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29y
a2luZ0NvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTdG9yZWRDcmVkZW50aWFscywg
UmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEpOwor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2I+IGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHlBc0Js
b2IoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTdG9yZWRDcmVk
ZW50aWFscywgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmKTsKIAogICAgIHN0YXRp
YyB2b2lkIHByZXBhcmVGb3JVUkwoY29uc3QgS1VSTCYpOwogICAgIHN0YXRpYyBib29sIHdpbGxM
b2FkRnJvbUNhY2hlKFJlc291cmNlUmVxdWVzdCYsIEZyYW1lKik7CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVDbGllbnQuaAkocmV2aXNpb24gNjk0
MjIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVDbGllbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBSZXNvdXJjZUhhbmRsZUNs
aWVudF9oCiAKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgogCkBAIC00Niw2ICs0Nyw3IEBAIGNsYXNzIE5TQ2FjaGVkVVJMUmVzcG9uc2U7CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBBc3luY0ZpbGVTdHJlYW07CisgICAgY2xh
c3MgQmxvYjsKICAgICBjbGFzcyBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKICAgICBjbGFzcyBD
cmVkZW50aWFsOwogICAgIGNsYXNzIEZpbGVTdHJlYW1DbGllbnQ7CkBAIC03Miw4ICs3NCwxMCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVS
ZXNwb25zZShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKSB7IH0KICAg
ICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFJlc291cmNlSGFuZGxlKiwgY29uc3Qg
Y2hhciosIGludCwgaW50IC8qbGVuZ3RoUmVjZWl2ZWQqLykgeyB9CisgICAgICAgIHZpcnR1YWwg
dm9pZCBkaWRSZWNlaXZlQmxvYkRhdGEoUmVzb3VyY2VIYW5kbGUqLCBpbnQpIHsgfQogICAgICAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKFJlc291cmNlSGFuZGxlKiwg
Y29uc3QgY2hhciosIGludCkgeyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2Fk
aW5nKFJlc291cmNlSGFuZGxlKiwgZG91YmxlIC8qZmluaXNoVGltZSovKSB7IH0KKyAgICAgICAg
dmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmdCbG9iKFJlc291cmNlSGFuZGxlKiwgZG91Ymxl
IC8qZmluaXNoVGltZSovLCBCbG9iKikgeyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGYWls
KFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpIHsgfQogICAgICAgICB2aXJ0
dWFsIHZvaWQgd2FzQmxvY2tlZChSZXNvdXJjZUhhbmRsZSopIHsgfQogICAgICAgICB2aXJ0dWFs
IHZvaWQgY2Fubm90U2hvd1VSTChSZXNvdXJjZUhhbmRsZSopIHsgfQpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcAkocmV2aXNpb24g
Njk0MjIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAgUGFzc093blB0cjxSZXNvdXJjZVJl
cXVlc3Q+IFJlc291cmNlUmVxdQogICAgIHJlcXVlc3QtPnNldEZpcnN0UGFydHlGb3JDb29raWVz
KGRhdGEtPm1fZmlyc3RQYXJ0eUZvckNvb2tpZXMpOwogICAgIHJlcXVlc3QtPnNldEhUVFBNZXRo
b2QoZGF0YS0+bV9odHRwTWV0aG9kKTsKICAgICByZXF1ZXN0LT5zZXRUYXJnZXRUeXBlKGRhdGEt
Pm1fdGFyZ2V0VHlwZSk7CisgICAgcmVxdWVzdC0+c2V0RG93bmxvYWRBc0Jsb2IoZGF0YS0+bV9k
b3dubG9hZEFzQmxvYik7CiAKICAgICByZXF1ZXN0LT51cGRhdGVSZXNvdXJjZVJlcXVlc3QoKTsK
ICAgICByZXF1ZXN0LT5tX2h0dHBIZWFkZXJGaWVsZHMuYWRvcHQoZGF0YS0+bV9odHRwSGVhZGVy
cy5yZWxlYXNlKCkpOwpAQCAtNzksNiArODAsNyBAQCBQYXNzT3duUHRyPENyb3NzVGhyZWFkUmVz
b3VyY2VSZXF1ZXN0RGF0CiAgICAgZGF0YS0+bV9odHRwTWV0aG9kID0gaHR0cE1ldGhvZCgpLmNy
b3NzVGhyZWFkU3RyaW5nKCk7CiAgICAgZGF0YS0+bV9odHRwSGVhZGVycyA9IGh0dHBIZWFkZXJG
aWVsZHMoKS5jb3B5RGF0YSgpOwogICAgIGRhdGEtPm1fdGFyZ2V0VHlwZSA9IG1fdGFyZ2V0VHlw
ZTsKKyAgICBkYXRhLT5tX2Rvd25sb2FkQXNCbG9iID0gbV9kb3dubG9hZEFzQmxvYjsKIAogICAg
IGRhdGEtPm1fcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXku
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX3Jlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2Rp
bmdGYWxsYmFja0FycmF5LnNpemUoKSk7CiAgICAgc2l6ZV90IGVuY29kaW5nQXJyYXlTaXplID0g
bV9yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheS5zaXplKCk7
CkBAIC0zNDEsNyArMzQzLDEwIEBAIGJvb2wgZXF1YWxJZ25vcmluZ0hlYWRlckZpZWxkcyhjb25z
dCBSZXMKICAgICAKICAgICBpZiAoYS5hbGxvd0Nvb2tpZXMoKSAhPSBiLmFsbG93Q29va2llcygp
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKKyAgICBpZiAoYS5kb3dubG9hZEFzQmxv
YigpICE9IGIuZG93bmxvYWRBc0Jsb2IoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAg
Rm9ybURhdGEqIGZvcm1EYXRhQSA9IGEuaHR0cEJvZHkoKTsKICAgICBGb3JtRGF0YSogZm9ybURh
dGFCID0gYi5odHRwQm9keSgpOwogICAgIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlUmVxdWVzdEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5oCShyZXZpc2lvbiA2OTQyMikKKysrIFdlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE0NCw2ICsxNDQsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBUYXJnZXRUeXBl
IHRhcmdldFR5cGUoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldFR5cGU7IH0KICAgICAgICAgdm9p
ZCBzZXRUYXJnZXRUeXBlKFRhcmdldFR5cGUgdHlwZSkgeyBtX3RhcmdldFR5cGUgPSB0eXBlOyB9
CiAKKyAgICAgICAgLy8gSWYgdHJ1ZSwgdGhlIHJlc3BvbnNlIGJvZHkgd2lsbCBiZSBwcm92aWRl
ZCBhcyBhIGJsb2IuCisgICAgICAgIGJvb2wgZG93bmxvYWRBc0Jsb2IoKSBjb25zdCB7IHJldHVy
biBtX2Rvd25sb2FkQXNCbG9iOyB9CisgICAgICAgIHZvaWQgc2V0RG93bmxvYWRBc0Jsb2IoYm9v
bCBkb3dubG9hZCkgeyBtX2Rvd25sb2FkQXNCbG9iID0gZG93bmxvYWQ7IH0KKwogICAgICAgICBz
dGF0aWMgYm9vbCBjb21wYXJlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYpOwogCiAgICAgcHJvdGVjdGVkOgpAQCAtMTU1LDYgKzE1OSw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgICAgICwgbV9yZXBvcnRMb2FkVGltaW5nKGZhbHNlKQogICAg
ICAgICAgICAgLCBtX3JlcG9ydFJhd0hlYWRlcnMoZmFsc2UpCiAgICAgICAgICAgICAsIG1fdGFy
Z2V0VHlwZShUYXJnZXRJc1N1YnJlc291cmNlKQorICAgICAgICAgICAgLCBtX2Rvd25sb2FkQXNC
bG9iKGZhbHNlKQogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtMTcwLDYgKzE3NSw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgICwgbV9yZXBvcnRMb2FkVGltaW5nKGZhbHNl
KQogICAgICAgICAgICAgLCBtX3JlcG9ydFJhd0hlYWRlcnMoZmFsc2UpCiAgICAgICAgICAgICAs
IG1fdGFyZ2V0VHlwZShUYXJnZXRJc1N1YnJlc291cmNlKQorICAgICAgICAgICAgLCBtX2Rvd25s
b2FkQXNCbG9iKGZhbHNlKQogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtMTk1LDYgKzIwMSw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX3JlcG9ydExvYWRUaW1pbmc7
CiAgICAgICAgIGJvb2wgbV9yZXBvcnRSYXdIZWFkZXJzOwogICAgICAgICBUYXJnZXRUeXBlIG1f
dGFyZ2V0VHlwZTsKKyAgICAgICAgYm9vbCBtX2Rvd25sb2FkQXNCbG9iOwogCiAgICAgcHJpdmF0
ZToKICAgICAgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBhc1Jlc291cmNlUmVxdWVzdCgpIGNv
bnN0OwpAQCAtMjE4LDYgKzIyNSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUmVm
UHRyPEZvcm1EYXRhPiBtX2h0dHBCb2R5OwogICAgICAgICBib29sIG1fYWxsb3dDb29raWVzOwog
ICAgICAgICBSZXNvdXJjZVJlcXVlc3RCYXNlOjpUYXJnZXRUeXBlIG1fdGFyZ2V0VHlwZTsKKyAg
ICAgICAgYm9vbCBtX2Rvd25sb2FkQXNCbG9iOwogICAgIH07CiAgICAgCiAgICAgdW5zaWduZWQg
aW5pdGlhbGl6ZU1heGltdW1IVFRQQ29ubmVjdGlvbkNvdW50UGVySG9zdCgpOwpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwCShy
ZXZpc2lvbiA2OTQyMikKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3Bv
bnNlQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Miw2ICsxNzIsMTMgQEAgdm9pZCBSZXNv
dXJjZVJlc3BvbnNlQmFzZTo6c2V0TWltZVR5cGUoYwogICAgIG1fbWltZVR5cGUgPSBtaW1lVHlw
ZTsgCiB9CiAKK1N0cmluZyBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6ZXh0cmFjdE1pbWVUeXBlKCkg
Y29uc3QKK3sKKyAgICBpZiAoaXNIVFRQKCkpCisgICAgICAgIHJldHVybiBleHRyYWN0TUlNRVR5
cGVGcm9tTWVkaWFUeXBlKGh0dHBIZWFkZXJGaWVsZCgiQ29udGVudC1UeXBlIikpOworICAgIHJl
dHVybiBtaW1lVHlwZSgpOworfQorCiBsb25nIGxvbmcgUmVzb3VyY2VSZXNwb25zZUJhc2U6OmV4
cGVjdGVkQ29udGVudExlbmd0aCgpIGNvbnN0IAogewogICAgIGxhenlJbml0KCk7CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuaAkocmV2
aXNpb24gNjk0MjIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25z
ZUJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsNyBAQCBwdWJsaWM6CiAKICAgICBj
b25zdCBTdHJpbmcmIG1pbWVUeXBlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRNaW1lVHlwZShjb25z
dCBTdHJpbmcmIG1pbWVUeXBlKTsKKyAgICBTdHJpbmcgZXh0cmFjdE1pbWVUeXBlKCkgY29uc3Q7
CiAKICAgICBsb25nIGxvbmcgZXhwZWN0ZWRDb250ZW50TGVuZ3RoKCkgY29uc3Q7CiAgICAgdm9p
ZCBzZXRFeHBlY3RlZENvbnRlbnRMZW5ndGgobG9uZyBsb25nIGV4cGVjdGVkQ29udGVudExlbmd0
aCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vUmVzb3VyY2VSZXF1
ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL1Jl
c291cmNlUmVxdWVzdC5oCShyZXZpc2lvbiA2OTQyMikKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtODQsNiAr
ODQsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGludCBhcHBDYWNoZUhvc3RJRCgp
IGNvbnN0IHsgcmV0dXJuIG1fYXBwQ2FjaGVIb3N0SUQ7IH0KICAgICAgICAgdm9pZCBzZXRBcHBD
YWNoZUhvc3RJRChpbnQgaWQpIHsgbV9hcHBDYWNoZUhvc3RJRCA9IGlkOyB9CiAKKyAgICAgICAg
Ym9vbCBkb3dubG9hZFRvRmlsZSgpIGNvbnN0IHsgcmV0dXJuIGRvd25sb2FkQXNCbG9iKCk7IH0K
KyAgICAgICAgdm9pZCBzZXREb3dubG9hZFRvRmlsZShib29sIGRvd25sb2FkKSB7IHNldERvd25s
b2FkQXNCbG9iKGRvd25sb2FkKTsgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNs
YXNzIFJlc291cmNlUmVxdWVzdEJhc2U7CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jaHJvbWl1bS9SZXNvdXJjZVJlc3BvbnNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY2hyb21pdW0vUmVzb3VyY2VSZXNwb25zZS5jcHAJKHJldmlzaW9uIDY5
NDIyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL1Jlc291cmNlUmVzcG9u
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCwxOCBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKK2NvbnN0IFN0cmluZyYgUmVzb3VyY2VSZXNwb25zZTo6ZG93bmxvYWRGaWxlUGF0
aCgpIGNvbnN0Cit7CisgICAgbGF6eUluaXQoKTsKKyAgICByZXR1cm4gbV9kb3dubG9hZEZpbGVQ
YXRoOworfQorCit2b2lkIFJlc291cmNlUmVzcG9uc2U6OnNldERvd25sb2FkRmlsZVBhdGgoY29u
c3QgU3RyaW5nJiBwYXRoKQoreworICAgIGxhenlJbml0KCk7CisgICAgbV9kb3dubG9hZEZpbGVQ
YXRoID0gcGF0aDsKK30KKwogUGFzc093blB0cjxDcm9zc1RocmVhZFJlc291cmNlUmVzcG9uc2VE
YXRhPiBSZXNvdXJjZVJlc3BvbnNlOjpkb1BsYXRmb3JtQ29weURhdGEoUGFzc093blB0cjxDcm9z
c1RocmVhZFJlc291cmNlUmVzcG9uc2VEYXRhPiBkYXRhKSBjb25zdAogewogICAgIGRhdGEtPm1f
YXBwQ2FjaGVJRCA9IG1fYXBwQ2FjaGVJRDsKQEAgLTM5LDYgKzUxLDcgQEAgUGFzc093blB0cjxD
cm9zc1RocmVhZFJlc291cmNlUmVzcG9uc2VEYQogICAgIGRhdGEtPm1fd2FzQWx0ZXJuYXRlUHJv
dG9jb2xBdmFpbGFibGUgPSBtX3dhc0FsdGVybmF0ZVByb3RvY29sQXZhaWxhYmxlOwogICAgIGRh
dGEtPm1fd2FzRmV0Y2hlZFZpYVByb3h5ID0gbV93YXNGZXRjaGVkVmlhUHJveHk7CiAgICAgZGF0
YS0+bV9yZXNwb25zZVRpbWUgPSBtX3Jlc3BvbnNlVGltZTsKKyAgICBkYXRhLT5tX2Rvd25sb2Fk
RmlsZVBhdGggPSBtX2Rvd25sb2FkRmlsZVBhdGg7CiAgICAgcmV0dXJuIGRhdGE7CiB9CiAKQEAg
LTUzLDYgKzY2LDcgQEAgdm9pZCBSZXNvdXJjZVJlc3BvbnNlOjpkb1BsYXRmb3JtQWRvcHQoUAog
ICAgIG1fd2FzQWx0ZXJuYXRlUHJvdG9jb2xBdmFpbGFibGUgPSBkYXRhLT5tX3dhc0FsdGVybmF0
ZVByb3RvY29sQXZhaWxhYmxlOwogICAgIG1fd2FzRmV0Y2hlZFZpYVByb3h5ID0gZGF0YS0+bV93
YXNGZXRjaGVkVmlhUHJveHk7CiAgICAgbV9yZXNwb25zZVRpbWUgPSBkYXRhLT5tX3Jlc3BvbnNl
VGltZTsKKyAgICBtX2Rvd25sb2FkRmlsZVBhdGggPSBkYXRhLT5tX2Rvd25sb2FkRmlsZVBhdGg7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jaHJvbWl1bS9SZXNvdXJjZVJlc3BvbnNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL1Jlc291cmNlUmVzcG9uc2UuaAkocmV2aXNpb24gNjk0
MjIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vUmVzb3VyY2VSZXNwb25z
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05Niw2ICs5NiwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIGRvdWJsZSByZXNwb25zZVRpbWUoKSBjb25zdCB7IHJldHVybiBtX3Jlc3BvbnNl
VGltZTsgfQogICAgICAgICB2b2lkIHNldFJlc3BvbnNlVGltZShkb3VibGUgcmVzcG9uc2VUaW1l
KSB7IG1fcmVzcG9uc2VUaW1lID0gcmVzcG9uc2VUaW1lOyB9CiAKKyAgICAgICAgLy8gSW5kaWNh
dGVzIHRoZSBsb2NhdGlvbiBvZiBhIGRvd25sb2FkZWQgcmVzcG9uc2UgaWYgdGhlCisgICAgICAg
IC8vIFJlc291cmNlUmVxdWVzdCBoYWQgdGhlIGRvd25sb2FkVG9GaWxlL0Jsb2IgZmxhZyBzZXQg
dG8gdHJ1ZS4KKyAgICAgICAgLy8gVGhlIGZpbGUgd2lsbCByZW1haW4gdmFsaWQgdW50aWwgdGhl
IFJlc291cmNlSGFuZGxlIHVzZWQKKyAgICAgICAgLy8gdG8gcmV0cmlldmUgdGhpcyBmaWxlIGhh
cyBiZWVuIGRlbGV0ZWQuCisgICAgICAgIGNvbnN0IFN0cmluZyYgZG93bmxvYWRGaWxlUGF0aCgp
IGNvbnN0OworICAgICAgICB2b2lkIHNldERvd25sb2FkRmlsZVBhdGgoY29uc3QgU3RyaW5nJiBw
YXRoKTsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBSZXNvdXJjZVJlc3Bv
bnNlQmFzZTsKIApAQCAtMTQzLDYgKzE1MCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgLy8gVGhlIHRpbWUgYXQgd2hpY2ggdGhlIHJlc3BvbnNlIGhlYWRlcnMgd2VyZSByZWNlaXZl
ZC4gIEZvciBjYWNoZWQKICAgICAgICAgLy8gcmVzcG9uc2VzLCB0aGlzIHRpbWUgY291bGQgYmUg
ImZhciIgaW4gdGhlIHBhc3QuCiAgICAgICAgIGRvdWJsZSBtX3Jlc3BvbnNlVGltZTsKKworICAg
ICAgICAvLyBUaGUgcmVzdWx0aW5nIGRvd25sb2FkZWQgZmlsZSBwYXRoIGluIHRoZSByZXF1ZXN0
LmRvd25sb2FkVG9GaWxlIGNhc2UuCisgICAgICAgIFN0cmluZyBtX2Rvd25sb2FkRmlsZVBhdGg7
CiAgICAgfTsKIAogICAgIHN0cnVjdCBDcm9zc1RocmVhZFJlc291cmNlUmVzcG9uc2VEYXRhIDog
cHVibGljIENyb3NzVGhyZWFkUmVzb3VyY2VSZXNwb25zZURhdGFCYXNlIHsKQEAgLTE1NSw2ICsx
NjUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgbV93YXNBbHRlcm5hdGVQ
cm90b2NvbEF2YWlsYWJsZTsKICAgICAgICAgYm9vbCBtX3dhc0ZldGNoZWRWaWFQcm94eTsKICAg
ICAgICAgZG91YmxlIG1fcmVzcG9uc2VUaW1lOworICAgICAgICBTdHJpbmcgbV9kb3dubG9hZEZp
bGVQYXRoOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUv
eG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YTUxIdHRw
UmVxdWVzdC5jcHAJKHJldmlzaW9uIDY5NDIyKQorKysgV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVl
c3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NzUsNiArNTc1LDEwIEBAIHZvaWQgWE1MSHR0cFJl
cXVlc3Q6OmNyZWF0ZVJlcXVlc3QoRXhjZXAKICAgICBpZiAobV9yZXF1ZXN0SGVhZGVycy5zaXpl
KCkgPiAwKQogICAgICAgICByZXF1ZXN0LmFkZEhUVFBIZWFkZXJGaWVsZHMobV9yZXF1ZXN0SGVh
ZGVycyk7CiAKKyNpZiBFTkFCTEUoWEhSX1JFU1BPTlNFX0JMT0IpCisgICAgcmVxdWVzdC5zZXRE
b3dubG9hZEFzQmxvYihtX2FzQmxvYik7CisjZW5kaWYKKwogICAgIFRocmVhZGFibGVMb2FkZXJP
cHRpb25zIG9wdGlvbnM7CiAgICAgb3B0aW9ucy5zZW5kTG9hZENhbGxiYWNrcyA9IHRydWU7CiAg
ICAgb3B0aW9ucy5zbmlmZkNvbnRlbnQgPSBmYWxzZTsKQEAgLTg1NCwxNSArODU4LDEwIEBAIFN0
cmluZyBYTUxIdHRwUmVxdWVzdDo6Z2V0UmVzcG9uc2VIZWFkZXIKIFN0cmluZyBYTUxIdHRwUmVx
dWVzdDo6cmVzcG9uc2VNSU1FVHlwZSgpIGNvbnN0CiB7CiAgICAgU3RyaW5nIG1pbWVUeXBlID0g
ZXh0cmFjdE1JTUVUeXBlRnJvbU1lZGlhVHlwZShtX21pbWVUeXBlT3ZlcnJpZGUpOwotICAgIGlm
IChtaW1lVHlwZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgaWYgKG1fcmVzcG9uc2UuaXNIVFRQKCkp
Ci0gICAgICAgICAgICBtaW1lVHlwZSA9IGV4dHJhY3RNSU1FVHlwZUZyb21NZWRpYVR5cGUobV9y
ZXNwb25zZS5odHRwSGVhZGVyRmllbGQoIkNvbnRlbnQtVHlwZSIpKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgbWltZVR5cGUgPSBtX3Jlc3BvbnNlLm1pbWVUeXBlKCk7Ci0gICAgfQorICAg
IGlmIChtaW1lVHlwZS5pc0VtcHR5KCkpCisgICAgICAgIG1pbWVUeXBlID0gbV9yZXNwb25zZS5l
eHRyYWN0TWltZVR5cGUoKTsKICAgICBpZiAobWltZVR5cGUuaXNFbXB0eSgpKQogICAgICAgICBt
aW1lVHlwZSA9ICJ0ZXh0L3htbCI7Ci0KICAgICByZXR1cm4gbWltZVR5cGU7CiB9CiAKQEAgLTk0
NCwxMCArOTQzLDYgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlkRmluaXNoTG9hZGluZyh1bgog
ICAgIGlmIChtX2RlY29kZXIpCiAgICAgICAgIG1fcmVzcG9uc2VUZXh0ICs9IG1fZGVjb2Rlci0+
Zmx1c2goKTsKIAotI2lmIEVOQUJMRShYSFJfUkVTUE9OU0VfQkxPQikKLSAgICAvLyBGSVhNRTog
U2V0IG1fcmVzcG9uc2VCbG9iIHRvIHNvbWV0aGluZyBoZXJlIGluIHRoZSBtX2FzQmxvYiBjYXNl
LgotI2VuZGlmCi0KICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIGlmIChJbnNwZWN0b3JDb250
cm9sbGVyKiBpbnNwZWN0b3IgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmluc3BlY3RvckNv
bnRyb2xsZXIoKSkKICAgICAgICAgaW5zcGVjdG9yLT5yZXNvdXJjZVJldHJpZXZlZEJ5WE1MSHR0
cFJlcXVlc3QoaWRlbnRpZmllciwgbV9yZXNwb25zZVRleHQsIG1fdXJsLCBtX2xhc3RTZW5kVVJM
LCBtX2xhc3RTZW5kTGluZU51bWJlcik7CkBAIC05NjMsNiArOTU4LDE5IEBAIHZvaWQgWE1MSHR0
cFJlcXVlc3Q6OmRpZEZpbmlzaExvYWRpbmcodW4KICAgICAgICAgZHJvcFByb3RlY3Rpb24oKTsK
IH0KIAordm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlkRmluaXNoTG9hZGluZ0Jsb2IodW5zaWduZWQg
bG9uZyBpZGVudGlmaWVyLCBCbG9iKiBibG9iKQoreworI2lmIEVOQUJMRShYSFJfUkVTUE9OU0Vf
QkxPQikKKyAgICBpZiAoIW1fZXJyb3IpCisgICAgICAgIG1fcmVzcG9uc2VCbG9iID0gYmxvYjsK
KyAgICBkaWRGaW5pc2hMb2FkaW5nKGlkZW50aWZpZXIpOworI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0oaWRlbnRpZmllcik7CisgICAgVU5VU0VEX1BBUkFNKGJsb2IpOworICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworI2VuZGlmCit9CisKIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpZFNlbmREYXRh
KHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5
dGVzVG9CZVNlbnQpCiB7CiAgICAgaWYgKCFtX3VwbG9hZCkKQEAgLTk5MSw3ICs5OTksMjMgQEAg
dm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlkUmVjZWl2ZUF1dGhlbnRpYwogICAgIG1fcmVzcG9uc2Ug
PSBmYWlsdXJlUmVzcG9uc2U7CiB9CiAKLXZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpZFJlY2VpdmVE
YXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW4pCit2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRS
ZWNlaXZlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQoreworICAgIGRpZFJlY2Vp
dmVEYXRhQ29tbW9uKFJlc3BvbnNlQXNEYXRhLCBkYXRhLCBsZW5ndGgpOworfQorCit2b2lkIFhN
TEh0dHBSZXF1ZXN0OjpkaWRSZWNlaXZlQmxvYkRhdGEoaW50IGxlbmd0aCkKK3sKKyNpZiBFTkFC
TEUoWEhSX1JFU1BPTlNFX0JMT0IpCisgICAgQVNTRVJUKGxlbmd0aCA+PSAwKTsKKyAgICBkaWRS
ZWNlaXZlRGF0YUNvbW1vbihSZXNwb25zZUFzQmxvYiwgMCwgbGVuZ3RoKTsKKyNlbHNlCisgICAg
VU5VU0VEX1BBUkFNKGxlbmd0aCk7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYK
K30KKwordm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlkUmVjZWl2ZURhdGFDb21tb24oUmVzcG9uc2VB
c01vZGUgcmVzcG9uc2VBcywgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKIHsKICAgICBp
ZiAobV9lcnJvcikKICAgICAgICAgcmV0dXJuOwpAQCAtOTk5LDcgKzEwMjMsOCBAQCB2b2lkIFhN
TEh0dHBSZXF1ZXN0OjpkaWRSZWNlaXZlRGF0YShjb25zCiAgICAgaWYgKG1fc3RhdGUgPCBIRUFE
RVJTX1JFQ0VJVkVEKQogICAgICAgICBjaGFuZ2VTdGF0ZShIRUFERVJTX1JFQ0VJVkVEKTsKIAot
ICAgIGlmICghbV9kZWNvZGVyKSB7CisgICAgaWYgKGRhdGEgJiYgIW1fZGVjb2RlcikgeworICAg
ICAgICBBU1NFUlQocmVzcG9uc2VBcyA9PSBSZXNwb25zZUFzRGF0YSk7CiAgICAgICAgIGlmICgh
bV9yZXNwb25zZUVuY29kaW5nLmlzRW1wdHkoKSkKICAgICAgICAgICAgIG1fZGVjb2RlciA9IFRl
eHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZSgidGV4dC9wbGFpbiIsIG1fcmVzcG9uc2VFbmNvZGlu
Zyk7CiAgICAgICAgIC8vIGFsbG93IFRleHRSZXNvdXJjZURlY29kZXIgdG8gbG9vayBpbnNpZGUg
dGhlIG1fcmVzcG9uc2UgaWYgaXQncyBYTUwgb3IgSFRNTApAQCAtMTAxMywxNyArMTAzOCwxOSBA
QCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRSZWNlaXZlRGF0YShjb25zCiAgICAgICAgICAgICBt
X2RlY29kZXIgPSBUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUoInRleHQvcGxhaW4iLCAiVVRG
LTgiKTsKICAgICB9CiAKLSAgICBpZiAoIWxlbikKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChy
ZXNwb25zZUFzID09IFJlc3BvbnNlQXNEYXRhKSB7CisgICAgICAgIGlmICghbGVuZ3RoKQorICAg
ICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGxlbiA9PSAtMSkKLSAgICAgICAgbGVuID0gc3Ry
bGVuKGRhdGEpOworICAgICAgICBpZiAobGVuZ3RoID09IC0xKSAKKyAgICAgICAgICAgIGxlbmd0
aCA9IHN0cmxlbihkYXRhKTsKIAotICAgIG1fcmVzcG9uc2VUZXh0ICs9IG1fZGVjb2Rlci0+ZGVj
b2RlKGRhdGEsIGxlbik7CisgICAgICAgIG1fcmVzcG9uc2VUZXh0ICs9IG1fZGVjb2Rlci0+ZGVj
b2RlKGRhdGEsIGxlbmd0aCk7CisgICAgfQogCiAgICAgaWYgKCFtX2Vycm9yKSB7CiAgICAgICAg
IGxvbmcgbG9uZyBleHBlY3RlZExlbmd0aCA9IG1fcmVzcG9uc2UuZXhwZWN0ZWRDb250ZW50TGVu
Z3RoKCk7Ci0gICAgICAgIG1fcmVjZWl2ZWRMZW5ndGggKz0gbGVuOworICAgICAgICBtX3JlY2Vp
dmVkTGVuZ3RoICs9IGxlbmd0aDsKIAogICAgICAgICBpZiAobV9hc3luYykgewogICAgICAgICAg
ICAgYm9vbCBsZW5ndGhDb21wdXRhYmxlID0gZXhwZWN0ZWRMZW5ndGggJiYgbV9yZWNlaXZlZExl
bmd0aCA8PSBleHBlY3RlZExlbmd0aDsKSW5kZXg6IFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaAkocmV2aXNpb24g
Njk0MjIpCisrKyBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTEsNiArMTExLDExIEBAIHB1YmxpYzoKICAgICB1c2luZyBSZWZDb3VudGVkPFhNTEh0dHBS
ZXF1ZXN0Pjo6ZGVyZWY7CiAKIHByaXZhdGU6CisgICAgZW51bSBSZXNwb25zZUFzTW9kZSAgewor
ICAgICAgICBSZXNwb25zZUFzRGF0YSwKKyAgICAgICAgUmVzcG9uc2VBc0Jsb2IKKyAgICB9Owor
CiAgICAgWE1MSHR0cFJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogCiAgICAgdmly
dHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgeyByZWYoKTsgfQpAQCAtMTI3LDExICsxMzIsMTUg
QEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgZGlkU2VuZERhdGEodW5zaWduZWQgbG9uZyBs
b25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCk7CiAg
ICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNl
Jik7CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGlu
dCBsZW5ndGhSZWNlaXZlZCk7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVCbG9iRGF0YShp
bnQgbGVuZ3RoUmVjZWl2ZWQpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKHVu
c2lnbmVkIGxvbmcgaWRlbnRpZmllcik7CisgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRp
bmdCbG9iKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgQmxvYiopOwogICAgIHZpcnR1YWwgdm9p
ZCBkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFp
bFJlZGlyZWN0Q2hlY2soKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0
aW9uQ2FuY2VsbGF0aW9uKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKIAorICAgIHZvaWQgZGlk
UmVjZWl2ZURhdGFDb21tb24oUmVzcG9uc2VBc01vZGUsIGNvbnN0IGNoYXIqLCBpbnQgbGVuZ3Ro
UmVjZWl2ZWQpOworCiAgICAgU3RyaW5nIHJlc3BvbnNlTUlNRVR5cGUoKSBjb25zdDsKICAgICBi
b29sIHJlc3BvbnNlSXNYTUwoKSBjb25zdDsKIApJbmRleDogV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA2
OTQyMikKKysrIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwzMyBAQAorMjAxMC0xMC0wNSAgTWljaGFlbCBOb3JkbWFuICA8bWljaGFlbG5AZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgc3VwcG9ydCBmb3IgZ2V0dGluZyB0aGUgcmVzdWx0IG9mIGEgcmVzb3VyY2UgcmVxdWVzdCBh
cyBhIGJsb2IuCisgICAgICAgIEluIENocm9tZSwgdGhpcyBmZWF0dXJlIGlzIGltcGxlbWVudGVk
IGluIHRlcm1zIG9mIHRoZSAnZG93bmxvYWRUb0ZpbGUnCisgICAgICAgIGZlYXR1cmUgb2YgdGhl
IG5ldHdvcmsgc3RhY2suCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00NDcyMgorCisgICAgICAgICogc3JjL1Jlc291cmNlSGFuZGxlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlSW50ZXJuYWw6OlJlc291cmNlSGFuZGxlSW50ZXJu
YWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6ZGlkUmVjZWl2
ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlSW50ZXJuYWw6OmRp
ZERvd25sb2FkRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUludGVybmFs
OjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlSW50
ZXJuYWw6OmRldGVybWluZUNvbnRlbnRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
SGFuZGxlSW50ZXJuYWw6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHlBc0Js
b2IpOgorICAgICAgICAqIHNyYy9XZWJVUkxSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViVVJMUmVxdWVzdFByaXZhdGVJbXBsOjpXZWJVUkxSZXF1ZXN0UHJpdmF0ZUltcGwpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJVUkxSZXF1ZXN0Ojpkb3dubG9hZFRvRmlsZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlVSTFJlcXVlc3Q6OnNldERvd25sb2FkVG9GaWxlKToKKyAgICAgICAgKiBzcmMv
V2ViVVJMUmVxdWVzdFByaXZhdGUuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVxdWVzdFBy
aXZhdGU6OldlYlVSTFJlcXVlc3RQcml2YXRlKToKKyAgICAgICAgKiBzcmMvV2ViVVJMUmVzcG9u
c2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXNwb25zZVByaXZhdGVJbXBsOjpXZWJV
UkxSZXNwb25zZVByaXZhdGVJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVzcG9uc2U6
OmRvd25sb2FkRmlsZVBhdGgpOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXNwb25zZTo6c2V0
RG93bmxvYWRGaWxlUGF0aCk6CisgICAgICAgICogc3JjL1dlYlVSTFJlc3BvbnNlUHJpdmF0ZS5o
OgorCiAyMDEwLTEwLTA4ICBBbmRyZWkgUG9wZXNjdSAgPGFuZHJlaXBAZ29vZ2xlLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBKZXJlbXkgT3Jsb3cuCkluZGV4OiBXZWJLaXQvY2hyb21pdW0v
c3JjL1Jlc291cmNlSGFuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3Jj
L1Jlc291cmNlSGFuZGxlLmNwcAkocmV2aXNpb24gNjk0MjIpCisrKyBXZWJLaXQvY2hyb21pdW0v
c3JjL1Jlc291cmNlSGFuZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAKKyNpbmNs
dWRlICJCbG9iLmgiCiAjaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKICNpbmNsdWRlICJSZXNv
dXJjZUhhbmRsZUNsaWVudC5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgpAQCAtNTgs
NiArNTksNyBAQCBwdWJsaWM6CiAgICAgICAgIDogbV9yZXF1ZXN0KHJlcXVlc3QpCiAgICAgICAg
ICwgbV9vd25lcigwKQogICAgICAgICAsIG1fY2xpZW50KGNsaWVudCkKKyAgICAgICAgLCBtX2Rv
d25sb2FkZWRGaWxlTGVuZ3RoKDApCiAgICAgICAgICwgbV9zdGF0ZShDb25uZWN0aW9uU3RhdGVO
ZXcpCiAgICAgewogICAgIH0KQEAgLTczLDEwICs3NSwxNCBAQCBwdWJsaWM6CiAgICAgICAgIFdl
YlVSTExvYWRlciosIHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcg
bG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVz
cG9uc2UoV2ViVVJMTG9hZGVyKiwgY29uc3QgV2ViVVJMUmVzcG9uc2UmKTsKICAgICB2aXJ0dWFs
IHZvaWQgZGlkUmVjZWl2ZURhdGEoV2ViVVJMTG9hZGVyKiwgY29uc3QgY2hhciogZGF0YSwgaW50
IGRhdGFMZW5ndGgpOworICAgIHZpcnR1YWwgdm9pZCBkaWREb3dubG9hZERhdGEoV2ViVVJMTG9h
ZGVyKiwgaW50IGRhdGFMZW5ndGgpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQ2FjaGVk
TWV0YWRhdGEoV2ViVVJMTG9hZGVyKiwgY29uc3QgY2hhciogZGF0YSwgaW50IGRhdGFMZW5ndGgp
OwogICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKFdlYlVSTExvYWRlciosIGRvdWJs
ZSBmaW5pc2hUaW1lKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChXZWJVUkxMb2FkZXIqLCBj
b25zdCBXZWJVUkxFcnJvciYpOwogCisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYj4gbG9hZFJl
c291cmNlU3luY2hyb25vdXNseSgKKyAgICAgICAgTmV0d29ya2luZ0NvbnRleHQqLCAgY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiwgU3RvcmVkQ3JlZGVudGlhbHMsIFJlc291cmNlRXJyb3ImLCBSZXNv
dXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+Kik7CisKICAgICBlbnVtIENvbm5lY3Rpb25TdGF0
ZSB7CiAgICAgICAgIENvbm5lY3Rpb25TdGF0ZU5ldywKICAgICAgICAgQ29ubmVjdGlvblN0YXRl
U3RhcnRlZCwKQEAgLTkxLDYgKzk3LDkgQEAgcHVibGljOgogICAgIFJlc291cmNlSGFuZGxlKiBt
X293bmVyOwogICAgIFJlc291cmNlSGFuZGxlQ2xpZW50KiBtX2NsaWVudDsKICAgICBPd25QdHI8
V2ViVVJMTG9hZGVyPiBtX2xvYWRlcjsKKyAgICBTdHJpbmcgbV9kb3dubG9hZGVkRmlsZVBhdGg7
CisgICAgU3RyaW5nIG1fZG93bmxvYWRlZEZpbGVDb250ZW50VHlwZTsKKyAgICBsb25nIGxvbmcg
bV9kb3dubG9hZGVkRmlsZUxlbmd0aDsKIAogICAgIC8vIFVzZWQgZm9yIHNhbml0eSBjaGVja2lu
ZyB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgZXhwZXJpZW5jZSBpbGxlZ2FsIHN0YXRlCiAgICAgLy8g
dHJhbnNpdGlvbnMuCkBAIC0xNTYsNiArMTY1LDEwIEBAIHZvaWQgUmVzb3VyY2VIYW5kbGVJbnRl
cm5hbDo6ZGlkUmVjZWl2ZVIKICAgICBpZiAoIWlzTXVsdGlwYXJ0ICYmICFpc1ZhbGlkU3RhdGVU
cmFuc2l0aW9uKQogICAgICAgICBDUkFTSCgpOwogICAgIG1fc3RhdGUgPSBDb25uZWN0aW9uU3Rh
dGVSZWNlaXZlZFJlc3BvbnNlOworICAgIGlmIChtX3JlcXVlc3QuZG93bmxvYWRUb0ZpbGUoKSkg
eworICAgICAgICBtX2Rvd25sb2FkZWRGaWxlUGF0aCA9IHJlc3BvbnNlLnRvUmVzb3VyY2VSZXNw
b25zZSgpLmRvd25sb2FkRmlsZVBhdGgoKTsKKyAgICAgICAgbV9kb3dubG9hZGVkRmlsZUNvbnRl
bnRUeXBlID0gcmVzcG9uc2UudG9SZXNvdXJjZVJlc3BvbnNlKCkuZXh0cmFjdE1pbWVUeXBlKCk7
CisgICAgfQogICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UobV9vd25lciwgcmVzcG9u
c2UudG9SZXNvdXJjZVJlc3BvbnNlKCkpOwogfQogCkBAIC0xNzMsNiArMTg2LDE3IEBAIHZvaWQg
UmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6ZGlkUmVjZWl2ZUQKICAgICBtX2NsaWVudC0+ZGlkUmVj
ZWl2ZURhdGEobV9vd25lciwgZGF0YSwgZGF0YUxlbmd0aCwgZGF0YUxlbmd0aCk7CiB9CiAKK3Zv
aWQgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6ZGlkRG93bmxvYWREYXRhKFdlYlVSTExvYWRlcios
IGludCBkYXRhTGVuZ3RoKQoreworICAgIEFTU0VSVChtX2NsaWVudCk7CisgICAgQVNTRVJUKG1f
cmVxdWVzdC5kb3dubG9hZFRvRmlsZSgpKTsKKyAgICBpZiAobV9zdGF0ZSAhPSBDb25uZWN0aW9u
U3RhdGVSZWNlaXZlZFJlc3BvbnNlICYmIG1fc3RhdGUgIT0gQ29ubmVjdGlvblN0YXRlUmVjZWl2
aW5nRGF0YSkKKyAgICAgICAgQ1JBU0goKTsKKyAgICBtX3N0YXRlID0gQ29ubmVjdGlvblN0YXRl
UmVjZWl2aW5nRGF0YTsKKyAgICBtX2Rvd25sb2FkZWRGaWxlTGVuZ3RoICs9IGRhdGFMZW5ndGg7
CisgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVCbG9iRGF0YShtX293bmVyLCBkYXRhTGVuZ3RoKTsK
K30KKwogdm9pZCBSZXNvdXJjZUhhbmRsZUludGVybmFsOjpkaWRSZWNlaXZlQ2FjaGVkTWV0YWRh
dGEoV2ViVVJMTG9hZGVyKiwgY29uc3QgY2hhciogZGF0YSwgaW50IGRhdGFMZW5ndGgpCiB7CiAg
ICAgQVNTRVJUKG1fY2xpZW50KTsKQEAgLTE4OCw3ICsyMTIsMTggQEAgdm9pZCBSZXNvdXJjZUhh
bmRsZUludGVybmFsOjpkaWRGaW5pc2hMbwogICAgIGlmIChtX3N0YXRlICE9IENvbm5lY3Rpb25T
dGF0ZVJlY2VpdmVkUmVzcG9uc2UgJiYgbV9zdGF0ZSAhPSBDb25uZWN0aW9uU3RhdGVSZWNlaXZp
bmdEYXRhKQogICAgICAgICBDUkFTSCgpOwogICAgIG1fc3RhdGUgPSBDb25uZWN0aW9uU3RhdGVG
aW5pc2hlZExvYWRpbmc7Ci0gICAgbV9jbGllbnQtPmRpZEZpbmlzaExvYWRpbmcobV9vd25lciwg
ZmluaXNoVGltZSk7CisgICAgaWYgKG1fcmVxdWVzdC5kb3dubG9hZEFzQmxvYigpKSB7CisgICAg
ICAgIEFTU0VSVChtX3JlcXVlc3QuZG93bmxvYWRUb0ZpbGUoKSk7IC8vIFRvRmlsZSBhbmQgQXNC
bG9iIGFyZSBvbmUgYW5kIHRoZSBzYW1lIGZvciBub3cuCisgICAgICAgIFJlZlB0cjxCbG9iPiBk
YXRhQXNCbG9iOworICAgICAgICBpZiAoIW1fZG93bmxvYWRlZEZpbGVQYXRoLmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgT3duUHRyPEJsb2JEYXRhPiBibG9iRGF0YSA9IEJsb2JEYXRhOjpjcmVh
dGUoKTsKKyAgICAgICAgICAgIGJsb2JEYXRhLT5zZXRDb250ZW50VHlwZShtX2Rvd25sb2FkZWRG
aWxlQ29udGVudFR5cGUpOworICAgICAgICAgICAgYmxvYkRhdGEtPmFwcGVuZEZpbGUobV9kb3du
bG9hZGVkRmlsZVBhdGgpOworICAgICAgICAgICAgZGF0YUFzQmxvYiA9IEJsb2I6OmNyZWF0ZShi
bG9iRGF0YS5yZWxlYXNlKCksIG1fZG93bmxvYWRlZEZpbGVMZW5ndGgpOworICAgICAgICB9Cisg
ICAgICAgIG1fY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nQmxvYihtX293bmVyLCBmaW5pc2hUaW1l
LCBkYXRhQXNCbG9iLmdldCgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9jbGllbnQtPmRpZEZp
bmlzaExvYWRpbmcobV9vd25lciwgZmluaXNoVGltZSk7CiB9CiAKIHZvaWQgUmVzb3VyY2VIYW5k
bGVJbnRlcm5hbDo6ZGlkRmFpbChXZWJVUkxMb2FkZXIqLCBjb25zdCBXZWJVUkxFcnJvciYgZXJy
b3IpCkBAIC0xOTgsNiArMjMzLDM5IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6ZGlk
RmFpbChXZWIKICAgICBtX2NsaWVudC0+ZGlkRmFpbChtX293bmVyLCBlcnJvcik7CiB9CiAKKy8v
IHN0YXRpYworUGFzc1JlZlB0cjxCbG9iPiBSZXNvdXJjZUhhbmRsZUludGVybmFsOjpsb2FkUmVz
b3VyY2VTeW5jaHJvbm91c2x5KAorICAgIE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3JlZENyZWRlbnRpYWxzIHN0b3JlZENyZWRl
bnRpYWxzLCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2Us
IFZlY3RvcjxjaGFyPiogZGF0YSkKK3sKKyAgICBPd25QdHI8V2ViVVJMTG9hZGVyPiBsb2FkZXIo
d2ViS2l0Q2xpZW50KCktPmNyZWF0ZVVSTExvYWRlcigpKTsKKyAgICBBU1NFUlQobG9hZGVyLmdl
dCgpKTsKKworICAgIFdyYXBwZWRSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdEluKHJlcXVlc3QpOwor
ICAgIHJlcXVlc3RJbi5zZXRBbGxvd1N0b3JlZENyZWRlbnRpYWxzKHN0b3JlZENyZWRlbnRpYWxz
ID09IEFsbG93U3RvcmVkQ3JlZGVudGlhbHMpOworICAgIFdyYXBwZWRSZXNvdXJjZVJlc3BvbnNl
IHJlc3BvbnNlT3V0KHJlc3BvbnNlKTsKKyAgICBXZWJVUkxFcnJvciBlcnJvck91dDsKKyAgICBX
ZWJEYXRhIGRhdGFPdXQ7CisgICAgUmVmUHRyPEJsb2I+IGRhdGFBc0Jsb2I7CisgICAgbG9uZyBs
b25nIGxlbmd0aE91dCA9IDA7CisKKyAgICAvLyBGSVhNRTogTmVlZCBhIHdheSB0byBnZXQgdGhl
IGxlbmd0aE91dCBpbiB0aGUgYXNGaWxlIGNhc2UuCisgICAgbG9hZGVyLT5sb2FkU3luY2hyb25v
dXNseShyZXF1ZXN0SW4sIHJlc3BvbnNlT3V0LCBlcnJvck91dCwgZGF0YU91dCk7CisKKyAgICBl
cnJvciA9IGVycm9yT3V0OworICAgIGlmICghcmVxdWVzdC5kb3dubG9hZEFzQmxvYigpKSB7Cisg
ICAgICAgIEFTU0VSVChkYXRhKTsKKyAgICAgICAgZGF0YS0+Y2xlYXIoKTsKKyAgICAgICAgZGF0
YS0+YXBwZW5kKGRhdGFPdXQuZGF0YSgpLCBkYXRhT3V0LnNpemUoKSk7CisgICAgfSBlbHNlIGlm
ICghcmVzcG9uc2UuZG93bmxvYWRGaWxlUGF0aCgpLmlzRW1wdHkoKSkgeworICAgICAgICBPd25Q
dHI8QmxvYkRhdGE+IGJsb2JEYXRhID0gQmxvYkRhdGE6OmNyZWF0ZSgpOworICAgICAgICBibG9i
RGF0YS0+c2V0Q29udGVudFR5cGUocmVzcG9uc2UuZXh0cmFjdE1pbWVUeXBlKCkpKTsKKyAgICAg
ICAgYmxvYkRhdGEtPmFwcGVuZEZpbGUocmVzcG9uc2UuZG93bmxvYWRGaWxlUGF0aCgpKTsKKyAg
ICAgICAgZGF0YUFzQmxvYiA9IEJsb2I6OmNyZWF0ZShibG9iRGF0YS5yZWxlYXNlKCksIGxlbmd0
aE91dCk7CisgICAgfQorICAgIHJldHVybiBkYXRhQXNCbG9iOworfQorCisKIC8vIFJlc291cmNl
SGFuZGxlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAogUmVzb3VyY2VIYW5kbGU6OlJlc291cmNlSGFuZGxlKGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCwKQEAgLTI5NSwyMCArMzYzLDIwIEBAIHZvaWQgUmVzb3VyY2VI
YW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiYgZGF0YSkK
IHsKLSAgICBPd25QdHI8V2ViVVJMTG9hZGVyPiBsb2FkZXIod2ViS2l0Q2xpZW50KCktPmNyZWF0
ZVVSTExvYWRlcigpKTsKLSAgICBBU1NFUlQobG9hZGVyLmdldCgpKTsKLQotICAgIFdyYXBwZWRS
ZXNvdXJjZVJlcXVlc3QgcmVxdWVzdEluKHJlcXVlc3QpOwotICAgIHJlcXVlc3RJbi5zZXRBbGxv
d1N0b3JlZENyZWRlbnRpYWxzKHN0b3JlZENyZWRlbnRpYWxzID09IEFsbG93U3RvcmVkQ3JlZGVu
dGlhbHMpOwotICAgIFdyYXBwZWRSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlT3V0KHJlc3BvbnNl
KTsKLSAgICBXZWJVUkxFcnJvciBlcnJvck91dDsKLSAgICBXZWJEYXRhIGRhdGFPdXQ7Ci0KLSAg
ICBsb2FkZXItPmxvYWRTeW5jaHJvbm91c2x5KHJlcXVlc3RJbiwgcmVzcG9uc2VPdXQsIGVycm9y
T3V0LCBkYXRhT3V0KTsKKyAgICBBU1NFUlQoIXJlcXVlc3QuZG93bmxvYWRBc0Jsb2IoKSk7Cisg
ICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShjb250
ZXh0LCByZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFscywgZXJyb3IsIHJlc3BvbnNlLCAmZGF0YSk7
Cit9CiAKLSAgICBlcnJvciA9IGVycm9yT3V0OwotICAgIGRhdGEuY2xlYXIoKTsKLSAgICBkYXRh
LmFwcGVuZChkYXRhT3V0LmRhdGEoKSwgZGF0YU91dC5zaXplKCkpOworLy8gc3RhdGljCitQYXNz
UmVmUHRyPEJsb2I+IFJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5QXNC
bG9iKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXR3
b3JraW5nQ29udGV4dCogY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdG9yZWRDcmVkZW50aWFscyBz
dG9yZWRDcmVkZW50aWFscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUmVzb3VyY2VFcnJvciYgZXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAg
IEFTU0VSVChyZXF1ZXN0LmRvd25sb2FkQXNCbG9iKCkpOworICAgIHJldHVybiBSZXNvdXJjZUhh
bmRsZUludGVybmFsOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KGNvbnRleHQsIHJlcXVlc3Qs
IHN0b3JlZENyZWRlbnRpYWxzLCBlcnJvciwgcmVzcG9uc2UsIDApOwogfQogCiAvLyBzdGF0aWMK
SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVxdWVzdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXF1ZXN0LmNwcAkocmV2aXNpb24gNjk0MjIp
CisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlVSTFJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01Niw3ICs1Niw2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1fcmVzb3VyY2VSZXF1
ZXN0ID0gJm1fcmVzb3VyY2VSZXF1ZXN0QWxsb2NhdGlvbjsKICAgICAgICAgbV9hbGxvd1N0b3Jl
ZENyZWRlbnRpYWxzID0gcC0+bV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzOwotICAgICAgICBtX2Rv
d25sb2FkVG9GaWxlID0gcC0+bV9kb3dubG9hZFRvRmlsZTsKICAgICB9CiAKICAgICB2aXJ0dWFs
IHZvaWQgZGlzcG9zZSgpIHsgZGVsZXRlIHRoaXM7IH0KQEAgLTI1OSwxMiArMjU4LDEyIEBAIHZv
aWQgV2ViVVJMUmVxdWVzdDo6c2V0QXBwQ2FjaGVIb3N0SUQoaW4KIAogYm9vbCBXZWJVUkxSZXF1
ZXN0Ojpkb3dubG9hZFRvRmlsZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9k
b3dubG9hZFRvRmlsZTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5tX3Jlc291cmNlUmVxdWVzdC0+
ZG93bmxvYWRUb0ZpbGUoKTsKIH0KIAogdm9pZCBXZWJVUkxSZXF1ZXN0OjpzZXREb3dubG9hZFRv
RmlsZShib29sIGRvd25sb2FkVG9GaWxlKQogewotICAgIG1fcHJpdmF0ZS0+bV9kb3dubG9hZFRv
RmlsZSA9IGRvd25sb2FkVG9GaWxlOworICAgIG1fcHJpdmF0ZS0+bV9yZXNvdXJjZVJlcXVlc3Qt
PnNldERvd25sb2FkVG9GaWxlKGRvd25sb2FkVG9GaWxlKTsKIH0KIAogUmVzb3VyY2VSZXF1ZXN0
JiBXZWJVUkxSZXF1ZXN0Ojp0b011dGFibGVSZXNvdXJjZVJlcXVlc3QoKQpJbmRleDogV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJVUkxSZXF1ZXN0UHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9jaHJvbWl1bS9zcmMvV2ViVVJMUmVxdWVzdFByaXZhdGUuaAkocmV2aXNpb24gNjk0MjIpCisr
KyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlVSTFJlcXVlc3RQcml2YXRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM5LDE3ICszOSwxMyBAQCBjbGFzcyBXZWJVUkxSZXF1ZXN0UHJpdmF0ZSB7CiBwdWJs
aWM6CiAgICAgV2ViVVJMUmVxdWVzdFByaXZhdGUoKQogICAgICAgICA6IG1fcmVzb3VyY2VSZXF1
ZXN0KDApCi0gICAgICAgICwgbV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzKHRydWUpCi0gICAgICAg
ICwgbV9kb3dubG9hZFRvRmlsZShmYWxzZSkgeyB9CisgICAgICAgICwgbV9hbGxvd1N0b3JlZENy
ZWRlbnRpYWxzKHRydWUpIHsgfQogCiAgICAgLy8gQ2FsbGVkIGJ5IFdlYlVSTFJlcXVlc3Qgd2hl
biBpdCBubyBsb25nZXIgbmVlZHMgdGhpcyBvYmplY3QuCiAgICAgdmlydHVhbCB2b2lkIGRpc3Bv
c2UoKSA9IDA7CiAKICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QqIG1fcmVzb3VyY2VSZXF1
ZXN0OwogICAgIGJvb2wgbV9hbGxvd1N0b3JlZENyZWRlbnRpYWxzOwotCi0gICAgLy8gRklYTUU6
IE1vdmUgdGhpcyB0byBSZXNvdXJjZVJlcXVlc3Qgb25jZSB3ZSBoYXZlIGFuIGludGVybmFsIGNv
bnN1bWVyLgotICAgIGJvb2wgbV9kb3dubG9hZFRvRmlsZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXNwb25zZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXNwb25zZS5jcHAJKHJldmlz
aW9uIDY5NDIyKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXNwb25zZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDYgQEAgcHVibGljOgogICAgICAgICA6IG1fcmVzb3Vy
Y2VSZXNwb25zZUFsbG9jYXRpb24oKnAtPm1fcmVzb3VyY2VSZXNwb25zZSkKICAgICB7CiAgICAg
ICAgIG1fcmVzb3VyY2VSZXNwb25zZSA9ICZtX3Jlc291cmNlUmVzcG9uc2VBbGxvY2F0aW9uOwot
ICAgICAgICBtX2Rvd25sb2FkRmlsZVBhdGggPSBwLT5tX2Rvd25sb2FkRmlsZVBhdGg7CiAgICAg
fQogCiAgICAgdmlydHVhbCB2b2lkIGRpc3Bvc2UoKSB7IGRlbGV0ZSB0aGlzOyB9CkBAIC0zNzUs
MTIgKzM3NCwxMiBAQCB2b2lkIFdlYlVSTFJlc3BvbnNlOjpzZXRJc011bHRpcGFydFBheWxvCiAK
IFdlYlN0cmluZyBXZWJVUkxSZXNwb25zZTo6ZG93bmxvYWRGaWxlUGF0aCgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIG1fcHJpdmF0ZS0+bV9kb3dubG9hZEZpbGVQYXRoOworICAgIHJldHVybiBtX3By
aXZhdGUtPm1fcmVzb3VyY2VSZXNwb25zZS0+ZG93bmxvYWRGaWxlUGF0aCgpOwogfQogCiB2b2lk
IFdlYlVSTFJlc3BvbnNlOjpzZXREb3dubG9hZEZpbGVQYXRoKGNvbnN0IFdlYlN0cmluZyYgZG93
bmxvYWRGaWxlUGF0aCkKIHsKLSAgICBtX3ByaXZhdGUtPm1fZG93bmxvYWRGaWxlUGF0aCA9IGRv
d25sb2FkRmlsZVBhdGg7CisgICAgbV9wcml2YXRlLT5tX3Jlc291cmNlUmVzcG9uc2UtPnNldERv
d25sb2FkRmlsZVBhdGgoZG93bmxvYWRGaWxlUGF0aCk7CiB9CiAKIHZvaWQgV2ViVVJMUmVzcG9u
c2U6OmFzc2lnbihXZWJVUkxSZXNwb25zZVByaXZhdGUqIHApCkluZGV4OiBXZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlVSTFJlc3BvbnNlUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJv
bWl1bS9zcmMvV2ViVVJMUmVzcG9uc2VQcml2YXRlLmgJKHJldmlzaW9uIDY5NDIyKQorKysgV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJVUkxSZXNwb25zZVByaXZhdGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNDYsOSArNDYsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpc3Bvc2UoKSA9IDA7
CiAKICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlKiBtX3Jlc291cmNlUmVzcG9uc2U7Ci0K
LSAgICAvLyBGSVhNRTogTW92ZSB0aGlzIHRvIFJlc291cmNlUmVzcG9uc2Ugb25jZSB3ZSBoYXZl
IGFuIGludGVybmFsIGNvbnN1bWVyLgotICAgIFdlYlN0cmluZyBtX2Rvd25sb2FkRmlsZVBhdGg7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>
<flag name="review"
          id="60122"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>