<?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>163597</bug_id>
          
          <creation_ts>2016-10-18 08:44:43 -0700</creation_ts>
          <short_desc>[SOUP] Add NetworkSession implementation and switch to use it</short_desc>
          <delta_ts>2016-10-19 23:45:20 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk, Soup</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>163588</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>achristensen</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>commit-queue</cc>
    
    <cc>krollin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1241447</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-10-18 08:44:43 -0700</bug_when>
    <thetext>Basically move the ResourceHandle implementation to the network process, but modernized, cleaned up, and adapted to the NetworkSession model.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241451</commentid>
    <comment_count>1</comment_count>
      <attachid>291949</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-10-18 08:57:36 -0700</bug_when>
    <thetext>Created attachment 291949
Patch

This is a first patch, but it should be feature complete and hopefully mature enough (tests pass fine here). There&apos;s still some duplicated code that could be moved to common code, but I don&apos;t want to deal with Xcode in this patch, so it could be done in a follow up. The patch won&apos;t apply anyway, because it depends on bug #163588.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241502</commentid>
    <comment_count>2</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-10-18 10:59:31 -0700</bug_when>
    <thetext>!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241504</commentid>
    <comment_count>3</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-10-18 11:02:39 -0700</bug_when>
    <thetext>If you don&apos;t want to deal with Xcode, you could upload a patch that doesn&apos;t build on Mac or a patch with empty files and I can come clean it up and make it work on Mac.  I&apos;m really excited about this and will do what I can to help.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241507</commentid>
    <comment_count>4</comment_count>
      <attachid>291949</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-10-18 11:04:55 -0700</bug_when>
    <thetext>Comment on attachment 291949
Patch

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

&gt; Source/WebKit2/NetworkProcess/NetworkDataTask.h:147
&gt; +    bool isDownload() const { return !!m_pendingDownloadID.downloadID(); }

Could we call this isPendingDownload?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241849</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-10-18 23:04:56 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; If you don&apos;t want to deal with Xcode, you could upload a patch that doesn&apos;t
&gt; build on Mac or a patch with empty files and I can come clean it up and make
&gt; it work on Mac.  I&apos;m really excited about this and will do what I can to
&gt; help.

Well, I said I don&apos;t want, but the fact is that I can&apos;t, because I don&apos;t have a Mac, and I really don&apos;t know how to manually edit XCode files. This patch is big enough, and it&apos;s a first implementation, my plan was to move the common code in a follow up patch. However, after talking to Keith Rollin by email, I plan to switch to a subclass model instead, so the common code would be in the base abstract class. I prefer to do that refactoring over an already working code base, so it&apos;s not only a matter of dealing with XCode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241850</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-10-18 23:07:29 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 291949 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=291949&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/NetworkDataTask.h:147
&gt; &gt; +    bool isDownload() const { return !!m_pendingDownloadID.downloadID(); }
&gt; 
&gt; Could we call this isPendingDownload?

That&apos;s only true for Cocoa, in soup we don&apos;t have a download task, it&apos;s the same data task that becomes a download, so after the task is converted into a download it&apos;s no longer pending.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241901</commentid>
    <comment_count>7</comment_count>
      <attachid>292064</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-10-19 06:50:19 -0700</bug_when>
    <thetext>Created attachment 292064
Rebased patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241904</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-19 06:52:24 -0700</bug_when>
    <thetext>Attachment 292064 did not pass style-queue:


ERROR: Source/WebKit2/config.h:0:  Use #pragma once header guard.  [build/header_guard] [5]
Total errors found: 1 in 17 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>1241905</commentid>
    <comment_count>9</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-10-19 06:56:24 -0700</bug_when>
    <thetext>hmm, I&apos;m using g_output_stream_write_all_async() for downloads which is too new, I&apos;ll have to use my own for older versions of glib.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241934</commentid>
    <comment_count>10</comment_count>
      <attachid>292071</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-10-19 09:11:41 -0700</bug_when>
    <thetext>Created attachment 292071
Try to fix the builds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241936</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-19 09:12:45 -0700</bug_when>
    <thetext>Attachment 292071 did not pass style-queue:


ERROR: Source/WebKit2/config.h:0:  Use #pragma once header guard.  [build/header_guard] [5]
Total errors found: 1 in 17 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>1241944</commentid>
    <comment_count>12</comment_count>
      <attachid>292073</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-10-19 09:39:45 -0700</bug_when>
    <thetext>Created attachment 292073
Try to fix the build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241945</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-19 09:40:49 -0700</bug_when>
    <thetext>Attachment 292073 did not pass style-queue:


ERROR: Source/WebKit2/config.h:0:  Use #pragma once header guard.  [build/header_guard] [5]
Total errors found: 1 in 19 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>1241969</commentid>
    <comment_count>14</comment_count>
      <attachid>292081</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-10-19 10:24:36 -0700</bug_when>
    <thetext>Created attachment 292081
Try to fix the builds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241972</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-19 10:27:52 -0700</bug_when>
    <thetext>Attachment 292081 did not pass style-queue:


ERROR: Source/WebKit2/config.h:0:  Use #pragma once header guard.  [build/header_guard] [5]
Total errors found: 1 in 21 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>1242130</commentid>
    <comment_count>16</comment_count>
      <attachid>292081</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-10-19 14:53:58 -0700</bug_when>
    <thetext>Comment on attachment 292081
Try to fix the builds

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

r=me

&gt; Source/WebKit2/NetworkProcess/Downloads/Download.h:50
&gt; +#if USE(NETWORK_SESSION)

Let&apos;s just put this into the #if USE(NETWORK_SESSION) right above it.

&gt; Source/WebKit2/NetworkProcess/Downloads/Download.h:55
&gt; +class NetworkDataTask;

Let&apos;s put this below.  Forward declaring an unused class doesn&apos;t cause problems.

&gt; Source/WebKit2/NetworkProcess/Downloads/Download.h:59
&gt; +#else
&gt; +typedef void* PlatformDownloadTaskRef;

Let&apos;s not start defining things for a hypothetical third implementation.  If someone wants to make another implementation, they can define what they want.

&gt; Source/WebKit2/NetworkProcess/Downloads/Download.h:148
&gt;  #else
&gt; +    PlatformDownloadTaskRef m_download;

Let&apos;s remove this.  It will need to be some kind of smart pointer anyways.

&gt; Source/WebKit2/NetworkProcess/NetworkLoad.cpp:274
&gt; +    if (m_task &amp;&amp; m_task-&gt;isDownload())

isPendingDownload

&gt; Source/WebKit2/NetworkProcess/soup/NetworkDataTaskSoup.cpp:52
&gt; +    , m_session(&amp;session)

It looks like we could make m_session a Ref.

&gt; Source/WebKit2/NetworkProcess/soup/NetworkDataTaskSoup.cpp:144
&gt; +    url.setQuery(String());
&gt; +    url.removeFragmentIdentifier();

I think these are unnecessary

&gt; Source/WebKit2/NetworkProcess/soup/NetworkSessionSoup.cpp:37
&gt; +Ref&lt;NetworkSession&gt; NetworkSession::create(Type type, SessionID sessionID, CustomProtocolManager*)

Maybe in a followup patch, and definitely an existing problem from my implementation, but it seems like type and sessionID contain redundant information.  Type could be removed.

&gt; Source/WebKit2/config.h:78
&gt; -#if (PLATFORM(MAC) &amp;&amp; __MAC_OS_X_VERSION_MIN_REQUIRED &gt;= 101200) || (PLATFORM(IOS) &amp;&amp; __IPHONE_OS_VERSION_MIN_REQUIRED &gt;= 100000)
&gt; +#if (PLATFORM(MAC) &amp;&amp; __MAC_OS_X_VERSION_MIN_REQUIRED &gt;= 101200) || (PLATFORM(IOS) &amp;&amp; __IPHONE_OS_VERSION_MIN_REQUIRED &gt;= 100000) || USE(SOUP)

I haven&apos;t tested this on linux.  If you want, you could land this as a separate change so if it needs to be reverted then it&apos;s easier to revert a one line change than all this code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1242131</commentid>
    <comment_count>17</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-10-19 14:54:34 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #4)
&gt; &gt; Comment on attachment 291949 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=291949&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit2/NetworkProcess/NetworkDataTask.h:147
&gt; &gt; &gt; +    bool isDownload() const { return !!m_pendingDownloadID.downloadID(); }
&gt; &gt; 
&gt; &gt; Could we call this isPendingDownload?
&gt; 
&gt; That&apos;s only true for Cocoa, in soup we don&apos;t have a download task, it&apos;s the
&gt; same data task that becomes a download, so after the task is converted into
&gt; a download it&apos;s no longer pending.
Oh, I missed this.  Fine with me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1242268</commentid>
    <comment_count>18</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-10-19 22:55:59 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; Comment on attachment 292081 [details]
&gt; Try to fix the builds
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=292081&amp;action=review
&gt; 
&gt; r=me

Thanks!

&gt; &gt; Source/WebKit2/NetworkProcess/Downloads/Download.h:50
&gt; &gt; +#if USE(NETWORK_SESSION)
&gt; 
&gt; Let&apos;s just put this into the #if USE(NETWORK_SESSION) right above it.

Ok, reordered to follow the same logic than the #ifdefs block in the members declarations.

&gt; &gt; Source/WebKit2/NetworkProcess/Downloads/Download.h:55
&gt; &gt; +class NetworkDataTask;
&gt; 
&gt; Let&apos;s put this below.  Forward declaring an unused class doesn&apos;t cause
&gt; problems.

It&apos;s not here to be inside a platform ifdef, but because I need it for the PlatformDownloadTaskRef definition.

&gt; &gt; Source/WebKit2/NetworkProcess/Downloads/Download.h:59
&gt; &gt; +#else
&gt; &gt; +typedef void* PlatformDownloadTaskRef;
&gt; 
&gt; Let&apos;s not start defining things for a hypothetical third implementation.  If
&gt; someone wants to make another implementation, they can define what they want.

Agree, better fail the build than crash.

&gt; &gt; Source/WebKit2/NetworkProcess/Downloads/Download.h:148
&gt; &gt;  #else
&gt; &gt; +    PlatformDownloadTaskRef m_download;
&gt; 
&gt; Let&apos;s remove this.  It will need to be some kind of smart pointer anyways.

Yes.

&gt; &gt; Source/WebKit2/NetworkProcess/NetworkLoad.cpp:274
&gt; &gt; +    if (m_task &amp;&amp; m_task-&gt;isDownload())
&gt; 
&gt; isPendingDownload
&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/soup/NetworkDataTaskSoup.cpp:52
&gt; &gt; +    , m_session(&amp;session)
&gt; 
&gt; It looks like we could make m_session a Ref.

Indeed. Same for the Cocoa implementation. Actually this is part of the code that could be made common, so I&apos;ll change this as part of the follow up refactoring to also update NetworkDataTaskCocoa.

&gt; &gt; Source/WebKit2/NetworkProcess/soup/NetworkDataTaskSoup.cpp:144
&gt; &gt; +    url.setQuery(String());
&gt; &gt; +    url.removeFragmentIdentifier();
&gt; 
&gt; I think these are unnecessary

You are right, the path doesn&apos;t include the fragment identifier nor the query, so lastPathComponent() will never include them.

&gt; &gt; Source/WebKit2/NetworkProcess/soup/NetworkSessionSoup.cpp:37
&gt; &gt; +Ref&lt;NetworkSession&gt; NetworkSession::create(Type type, SessionID sessionID, CustomProtocolManager*)
&gt; 
&gt; Maybe in a followup patch, and definitely an existing problem from my
&gt; implementation, but it seems like type and sessionID contain redundant
&gt; information.  Type could be removed.

I&apos;ll take it into account when refactoring it.

&gt; &gt; Source/WebKit2/config.h:78
&gt; &gt; -#if (PLATFORM(MAC) &amp;&amp; __MAC_OS_X_VERSION_MIN_REQUIRED &gt;= 101200) || (PLATFORM(IOS) &amp;&amp; __IPHONE_OS_VERSION_MIN_REQUIRED &gt;= 100000)
&gt; &gt; +#if (PLATFORM(MAC) &amp;&amp; __MAC_OS_X_VERSION_MIN_REQUIRED &gt;= 101200) || (PLATFORM(IOS) &amp;&amp; __IPHONE_OS_VERSION_MIN_REQUIRED &gt;= 100000) || USE(SOUP)
&gt; 
&gt; I haven&apos;t tested this on linux.  If you want, you could land this as a
&gt; separate change so if it needs to be reverted then it&apos;s easier to revert a
&gt; one line change than all this code.

I removed the non network session code and assumed it to be enabled unconditionally when USE(SOUP) to simplify the code. I&apos;ll check the bots after landing this to roll it out asap if needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1242269</commentid>
    <comment_count>19</comment_count>
      <attachid>292152</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-10-19 23:00:08 -0700</bug_when>
    <thetext>Created attachment 292152
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1242277</commentid>
    <comment_count>20</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-10-19 23:45:20 -0700</bug_when>
    <thetext>Committed r207586: &lt;http://trac.webkit.org/changeset/207586&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291949</attachid>
            <date>2016-10-18 08:57:36 -0700</date>
            <delta_ts>2016-10-19 06:50:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-soup-network-session.diff</filename>
            <type>text/plain</type>
            <size>81911</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktp
dDIvQ01ha2VMaXN0cy50eHQKaW5kZXggOWI0MzNkZS4uMWFjMTA2YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0
cy50eHQKQEAgLTIxNyw2ICsyMTcsNyBAQCBzZXQoV2ViS2l0Ml9TT1VSQ0VTCiAgICAgTmV0d29y
a1Byb2Nlc3MvRG93bmxvYWRzL0Jsb2JEb3dubG9hZENsaWVudC5jcHAKICAgICBOZXR3b3JrUHJv
Y2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuY3BwCiAgICAgTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRz
L0Rvd25sb2FkTWFuYWdlci5jcHAKKyAgICBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvUGVuZGlu
Z0Rvd25sb2FkLmNwcAogCiAgICAgUGxhdGZvcm0vTG9nZ2luZy5jcHAKICAgICBQbGF0Zm9ybS9N
b2R1bGUuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggY2I0OTlkZC4uMTgxNjNjMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAt
MSw1ICsxLDExOSBAQAogMjAxNi0xMC0xOCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lh
QGlnYWxpYS5jb20+CiAKKyAgICAgICAgW1NPVVBdIEFkZCBOZXR3b3JrU2Vzc2lvbiBpbXBsZW1l
bnRhdGlvbiBhbmQgc3dpdGNoIHRvIHVzZSBpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNTk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQmFzaWNhbGx5IG1vdmUgdGhlIFJlc291cmNlSGFuZGxlIGlt
cGxlbWVudGF0aW9uIHRvIHRoZSBuZXR3b3JrIHByb2Nlc3MsIGJ1dCBtb2Rlcm5pemVkLCBjbGVh
bmVkIHVwLCBhbmQgYWRhcHRlZAorICAgICAgICB0byB0aGUgTmV0d29ya1Nlc3Npb24gbW9kZWwu
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDogQWRkIG5ldyBmaWxlcyB0byBjb21waWxhdGlv
bi4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpEb3dubG9hZDo6RG93bmxvYWQpOiBVc2UgdGhlIHNhbWUgY29kZSBmb3Ig
YWxsIHBvcnRzIHVzaW5nIE5ldHdvcmtTZXNzaW9uIGFuZCBhZGQgbWlzc2luZworICAgICAgICBp
bml0aWFsaXphdGlvbiBvZiBtX3Nlc3Npb25JRC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9E
b3dubG9hZHMvRG93bmxvYWQuaDoKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWQ6OkRvd25sb2Fk
KTogRGVmaW5lIFBsYXRmb3JtRG93bmxvYWRUYXNrUmVmIG9uIGV2ZXJ5IHBsYXRmb3JtIHRvIG1h
a2UgdGhlIGNvbnN0cnVjdG9yIGNvbW1vbiB0bworICAgICAgICBhbGwgcG9ydHMgdXNpbmcgTmV0
d29ya1Nlc3Npb24uCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL3NvdXAvRG93
bmxvYWRTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWQ6OmNhbmNlbE5ldHdvcmtM
b2FkKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWQ6OnBsYXRmb3JtRGlkRmluaXNoKToKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suaDoKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0RhdGFUYXNrOjpwZW5kaW5nRG93bmxvYWRJRCk6IE1ha2UgY29uc3QuCisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6cGVuZGluZ0Rvd25sb2FkKTogRGl0dG8uCisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6cGVuZGluZ0Rvd25sb2FkTG9jYXRpb24p
OiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjppc0Rvd25sb2FkKTog
SGVscGVyIHRvIGNoZWNrIGlmIHRoZSB0YXNrIGlzIGEgZG93bmxvYWQuCisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrTG9h
ZDo6ZGlkUmVjZWl2ZVJlc3BvbnNlTmV0d29ya1Nlc3Npb24pOiBVc2UgTmV0d29ya0RhdGFUYXNr
Ojppc0Rvd25sb2FkKCkuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6TmV0d29ya1Byb2Nlc3MpOiBO
ZXR3b3JrU2Vzc2lvbjo6c2V0Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyKCkgaXMgQ29jb2Egb25seS4K
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oOgorICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW06CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtTZXNzaW9uOjpuZXR3b3JrU3RvcmFnZVNlc3Npb24pOiBNYWtlIGNvbnN0Lgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6Ok5ldHdvcmtEYXRhVGFzayk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6fk5ldHdvcmtEYXRhVGFzayk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6c2NoZWR1bGVGYWlsdXJlKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpmYWlsdXJlVGltZXJGaXJlZCk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6c3VnZ2VzdGVkRmlsZW5hbWUpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OnNldFN1Z2dlc3RlZEZpbGVuYW1lKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpzZXRQZW5kaW5nRG93bmxvYWRMb2NhdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6YWxsb3dzU3BlY2lmaWNIVFRQU0NlcnRp
ZmljYXRlRm9ySG9zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6Y3JlYXRl
UmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6Y2xlYXJSZXF1ZXN0
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpyZXN1bWUpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OnN1c3BlbmQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrRGF0YVRhc2s6OmNhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6
aW52YWxpZGF0ZUFuZENhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6
c3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OnRpbWVvdXRGaXJlZCk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6c3RhcnRUaW1lb3V0KToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpzdG9wVGltZW91dCk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtEYXRhVGFzazo6c2VuZFJlcXVlc3RDYWxsYmFjayk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtEYXRhVGFzazo6ZGlkU2VuZFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrRGF0YVRhc2s6OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtEYXRhVGFzazo6dGxzRXJyb3JzQ2hhbmdlZENhbGxiYWNrKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0RhdGFUYXNrOjp0bHNFcnJvcnNDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0RhdGFUYXNrOjphcHBseUF1dGhlbnRpY2F0aW9uVG9SZXF1ZXN0KToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjphdXRoZW50aWNhdGVDYWxsYmFjayk6CisgICAgICAg
IChXZWJLaXQ6OmlzQXV0aGVudGljYXRpb25GYWlsdXJlU3RhdHVzQ29kZSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6YXV0aGVudGljYXRlKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0RhdGFUYXNrOjpjb250aW51ZUF1dGhlbnRpY2F0ZSk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtEYXRhVGFzazo6c2tpcElucHV0U3RyZWFtRm9yUmVkaXJlY3Rpb25DYWxsYmFjayk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6c2tpcElucHV0U3RyZWFtRm9yUmVk
aXJlY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OmRpZEZpbmlzaFNr
aXBJbnB1dFN0cmVhbUZvclJlZGlyZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6c2hvdWxkUmVk
aXJlY3RBc0dFVCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6c2hvdWxkU3Rh
cnRIVFRQUmVkaXJlY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OmNv
bnRpbnVlSFRUUFJlZGlyZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNr
OjpyZWFkQ2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OnJlYWQp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OmRpZFJlYWQpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OmRpZEZpbmlzaFJlYWQpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrRGF0YVRhc2s6OnJlcXVlc3ROZXh0UGFydENhbGxiYWNrKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0RhdGFUYXNrOjpyZXF1ZXN0TmV4dFBhcnQpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrRGF0YVRhc2s6OmRpZFJlcXVlc3ROZXh0UGFydCk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtEYXRhVGFzazo6ZGlkRmluaXNoUmVxdWVzdE5leHRQYXJ0KToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0RhdGFUYXNrOjpnb3RIZWFkZXJzQ2FsbGJhY2spOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrRGF0YVRhc2s6OmRpZEdldEhlYWRlcnMpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrRGF0YVRhc2s6Ondyb3RlQm9keURhdGFDYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtEYXRhVGFzazo6ZGlkV3JpdGVCb2R5RGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtEYXRhVGFzazo6ZG93bmxvYWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRh
c2s6OndyaXRlRG93bmxvYWRDYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRh
VGFzazo6d3JpdGVEb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6
ZGlkV3JpdGVEb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6ZGlk
RmluaXNoRG93bmxvYWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OmRpZEZh
aWxEb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6Y2xlYW5Eb3du
bG9hZEZpbGVzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpkaWRGYWlsKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpuZXR3b3JrRXZlbnRDYWxsYmFjayk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6bmV0d29ya0V2ZW50KToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpzdGFydGluZ0NhbGxiYWNrKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpyZXF1ZXN0U3RhcnRlZENhbGxiYWNrKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpkaWRTdGFydFJlcXVlc3QpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OnJlc3RhcnRlZENhbGxiYWNrKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0RhdGFUYXNrOjpkaWRSZXN0YXJ0KToKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtTZXNzaW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbjo6ZGVm
YXVsdFNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbjo6bmV0d29ya1N0
b3JhZ2VTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246Ok5ldHdvcmtT
ZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246On5OZXR3b3JrU2Vzc2lv
bik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjpzb3VwU2Vzc2lvbik6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjppbnZhbGlkYXRlQW5kQ2FuY2VsKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246OmNsZWFyQ3JlZGVudGlhbHMpOgorICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL3NvdXAvUmVtb3RlTmV0d29ya2luZ0NvbnRleHRTb3VwLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVByaXZhdGVCcm93
c2luZ1Nlc3Npb24pOiBBZGQgaW1wbGVtZW50YXRpb24gbWF0Y2hpbmcKKyAgICAgICAgV2ViRnJh
bWVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbigpLgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6c3RvcmFnZVNlc3Npb24pOiBE
byBub3QgYWx3YXlzIHJldHVybiB0aGUgZGVmYXVsdCBzZXNzaW9uIGlmIHRoZSBnaXZlbiBvbmUg
aXMKKyAgICAgICAgaW4gdGhlIGdsb2JhbCBtYXAuCisgICAgICAgICogUGxhdGZvcm1FZmwuY21h
a2U6IEFkIG5ldyBmaWxlcyB0byBjb21waWxhdGlvbi4KKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5j
bWFrZTogRGl0dG8uCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9zb3VwL1dl
YkZyYW1lTmV0d29ya2luZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZU5l
dHdvcmtpbmdDb250ZXh0OjplbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKTogQWxzbyBjcmVh
dGUgYSBOZXR3b3JrU2Vzc2lvbi4KKyAgICAgICAgKiBjb25maWcuaDogRW5hYmxlIE5ldHdvcmtT
ZXNzaW9uIHVuY29uZGl0aW9uYWxseSBmb3IgU291cCBiYXNlZCBwb3J0cy4KKworMjAxNi0xMC0x
OCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKICAgICAgICAg
TmV0d29ya1Nlc3Npb246IHVwZGF0ZWRSZXF1ZXN0IHBhcmFtZXRlciBvZiBOZXR3b3JrUHJvY2Vz
czo6ZmluZFBlbmRpbmdEb3dubG9hZExvY2F0aW9uIGlzIHVudXNlZCBzaW5jZSByMjA2OTg4CiAg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjM1ODgKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25s
b2FkLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZC5jcHAKaW5kZXggOWJlMjJlZi4uNjQ5NDhlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuY3BwCkBAIC0zMyw2ICszMyw3IEBA
CiAjaW5jbHVkZSAiRG93bmxvYWRNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiRG93bmxvYWRQcm94eU1l
c3NhZ2VzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk5ldHdvcmtEYXRhVGFz
ay5oIgogI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKICNpbmNsdWRlICJXZWJDb3JlQXJn
dW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CkBAIC00
MywxMSArNDQsMTIgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJL
aXQgewogCi0jaWYgVVNFKE5FVFdPUktfU0VTU0lPTikgJiYgUExBVEZPUk0oQ09DT0EpCi1Eb3du
bG9hZDo6RG93bmxvYWQoRG93bmxvYWRNYW5hZ2VyJiBkb3dubG9hZE1hbmFnZXIsIERvd25sb2Fk
SUQgZG93bmxvYWRJRCwgTlNVUkxTZXNzaW9uRG93bmxvYWRUYXNrKiBkb3dubG9hZCwgY29uc3Qg
V2ViQ29yZTo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkTmFt
ZSkKKyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQorRG93bmxvYWQ6OkRvd25sb2FkKERvd25sb2Fk
TWFuYWdlciYgZG93bmxvYWRNYW5hZ2VyLCBEb3dubG9hZElEIGRvd25sb2FkSUQsIFBsYXRmb3Jt
RG93bmxvYWRUYXNrUmVmIGRvd25sb2FkLCBjb25zdCBXZWJDb3JlOjpTZXNzaW9uSUQmIHNlc3Np
b25JRCwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWROYW1lKQogICAgIDogbV9kb3dubG9hZE1hbmFn
ZXIoZG93bmxvYWRNYW5hZ2VyKQogICAgICwgbV9kb3dubG9hZElEKGRvd25sb2FkSUQpCiAgICAg
LCBtX2Rvd25sb2FkKGRvd25sb2FkKQorICAgICwgbV9zZXNzaW9uSUQoc2Vzc2lvbklEKQogICAg
ICwgbV9zdWdnZXN0ZWROYW1lKHN1Z2dlc3RlZE5hbWUpCiB7CiAgICAgQVNTRVJUKG1fZG93bmxv
YWRJRC5kb3dubG9hZElEKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9Eb3dubG9hZHMvRG93bmxvYWQuaAppbmRleCA3OTg5ZjdlLi5mZGM1ODMwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuaApAQCAt
NDcsNiArNDcsMTkgQEAgT0JKQ19DTEFTUyBXS0Rvd25sb2FkQXNEZWxlZ2F0ZTsKICNlbmRpZgog
I2VuZGlmCiAKKyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQorI2lmIFBMQVRGT1JNKENPQ09BKQor
dHlwZWRlZiBpZDxOU1VSTFNlc3Npb25Eb3dubG9hZFRhc2s+IFBsYXRmb3JtRG93bmxvYWRUYXNr
UmVmOworI2VsaWYgVVNFKFNPVVApCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIE5ldHdvcmtE
YXRhVGFzazsKK30KK3R5cGVkZWYgV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2sqIFBsYXRmb3JtRG93
bmxvYWRUYXNrUmVmOworI2Vsc2UKK3R5cGVkZWYgdm9pZCogUGxhdGZvcm1Eb3dubG9hZFRhc2tS
ZWY7CisjZW5kaWYKKyNlbmRpZgorCiBuYW1lc3BhY2UgSVBDIHsKIGNsYXNzIERhdGFSZWZlcmVu
Y2U7CiB9CkBAIC02OCw4ICs4MSw4IEBAIGNsYXNzIFdlYlBhZ2U7CiBjbGFzcyBEb3dubG9hZCA6
IHB1YmxpYyBJUEM6Ok1lc3NhZ2VTZW5kZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERv
d25sb2FkKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0jaWYgVVNFKE5FVFdP
UktfU0VTU0lPTikgJiYgUExBVEZPUk0oQ09DT0EpCi0gICAgRG93bmxvYWQoRG93bmxvYWRNYW5h
Z2VyJiwgRG93bmxvYWRJRCwgTlNVUkxTZXNzaW9uRG93bmxvYWRUYXNrKiwgY29uc3QgV2ViQ29y
ZTo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUg
PSB7IH0pOworI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisgICAgRG93bmxvYWQoRG93bmxvYWRN
YW5hZ2VyJiwgRG93bmxvYWRJRCwgUGxhdGZvcm1Eb3dubG9hZFRhc2tSZWYsIGNvbnN0IFdlYkNv
cmU6OlNlc3Npb25JRCYgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1l
ID0geyB9KTsKICNlbmRpZgogICAgIERvd25sb2FkKERvd25sb2FkTWFuYWdlciYsIERvd25sb2Fk
SUQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN0cmluZyYgc3VnZ2Vz
dGVkRmlsZW5hbWUgPSB7IH0pOwogCkBAIC0xMjYsMTUgKzEzOSwyMSBAQCBwcml2YXRlOgogCiAg
ICAgUmVmUHRyPFNhbmRib3hFeHRlbnNpb24+IG1fc2FuZGJveEV4dGVuc2lvbjsKIAotI2lmIFBM
QVRGT1JNKENPQ09BKQogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisjaWYgUExBVEZPUk0oQ09D
T0EpCiAgICAgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbkRvd25sb2FkVGFzaz4gbV9kb3dubG9hZDsK
LSAgICBXZWJDb3JlOjpTZXNzaW9uSUQgbV9zZXNzaW9uSUQ7CisjZWxpZiBVU0UoU09VUCkKKyAg
ICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrPiBtX2Rvd25sb2FkOwogI2Vsc2UKKyAgICBQbGF0Zm9y
bURvd25sb2FkVGFza1JlZiBtX2Rvd25sb2FkOworI2VuZGlmCisgICAgV2ViQ29yZTo6U2Vzc2lv
bklEIG1fc2Vzc2lvbklEOworI2Vsc2UgLy8gVVNFKE5FVFdPUktfU0VTU0lPTikKKyNpZiBQTEFU
Rk9STShDT0NPQSkKICAgICBSZXRhaW5QdHI8TlNVUkxEb3dubG9hZD4gbV9uc1VSTERvd25sb2Fk
OwogICAgIFJldGFpblB0cjxXS0Rvd25sb2FkQXNEZWxlZ2F0ZT4gbV9kZWxlZ2F0ZTsKICNlbmRp
ZgotI2VuZGlmCisjZW5kaWYgLy8gVVNFKE5FVFdPUktfU0VTU0lPTikKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDbGllbnQ+IG1fZG93bmxvYWRDbGllbnQ7CiAg
ICAgUmVmUHRyPFdlYkNvcmU6OlJlc291cmNlSGFuZGxlPiBtX3Jlc291cmNlSGFuZGxlOwogICAg
IFN0cmluZyBtX3N1Z2dlc3RlZE5hbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9Eb3dubG9hZHMvc291cC9Eb3dubG9hZFNvdXAuY3BwIGIvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL3NvdXAvRG93bmxvYWRTb3VwLmNwcAppbmRleCA2
ODA3OTE3Li44MmU4YzVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9Eb3dubG9hZHMvc291cC9Eb3dubG9hZFNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9zb3VwL0Rvd25sb2FkU291cC5jcHAKQEAgLTI4LDIwNCAr
MjgsMTMgQEAKICNpbmNsdWRlICJEb3dubG9hZC5oIgogCiAjaW5jbHVkZSAiRGF0YVJlZmVyZW5j
ZS5oIgotI2luY2x1ZGUgIkRvd25sb2FkU291cEVycm9ycy5oIgorI2luY2x1ZGUgIk5ldHdvcmtE
YXRhVGFzay5oIgogI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaD4KLSNpbmNsdWRlIDxnaW8vZ2lvLmg+
Ci0jaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KLSNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KLQotI2lmIFBMQVRGT1JNKEdUSykKLSNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5o
PgotI2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAotY2xhc3MgRG93bmxvYWRDbGllbnQgZmluYWwgOiBwdWJsaWMgUmVzb3VyY2VIYW5kbGVD
bGllbnQgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERvd25sb2FkQ2xpZW50KTsKLXB1Ymxp
YzoKLSAgICBEb3dubG9hZENsaWVudChEb3dubG9hZCYgZG93bmxvYWQpCi0gICAgICAgIDogbV9k
b3dubG9hZChkb3dubG9hZCkKLSAgICAgICAgLCBtX2hhbmRsZVJlc3BvbnNlTGF0ZXIoUnVuTG9v
cDo6bWFpbigpLCB0aGlzLCAmRG93bmxvYWRDbGllbnQ6OmhhbmRsZVJlc3BvbnNlKQotICAgICAg
ICAsIG1fYWxsb3dPdmVyd3JpdGUoZmFsc2UpCi0gICAgewotICAgIH0KLQotICAgIH5Eb3dubG9h
ZENsaWVudCgpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgZGVsZXRlRmlsZXNJZk5lZWRlZCgp
Ci0gICAgewotICAgICAgICBpZiAobV9kZXN0aW5hdGlvbkZpbGUpCi0gICAgICAgICAgICBnX2Zp
bGVfZGVsZXRlKG1fZGVzdGluYXRpb25GaWxlLmdldCgpLCBudWxscHRyLCBudWxscHRyKTsKLQot
ICAgICAgICBpZiAobV9pbnRlcm1lZGlhdGVGaWxlKSB7Ci0gICAgICAgICAgICBBU1NFUlQobV9k
ZXN0aW5hdGlvbkZpbGUpOwotICAgICAgICAgICAgZ19maWxlX2RlbGV0ZShtX2ludGVybWVkaWF0
ZUZpbGUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
dm9pZCBkb3dubG9hZEZhaWxlZChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKLSAgICB7Ci0g
ICAgICAgIGRlbGV0ZUZpbGVzSWZOZWVkZWQoKTsKLSAgICAgICAgbV9kb3dubG9hZC5kaWRGYWls
KGVycm9yLCBJUEM6OkRhdGFSZWZlcmVuY2UoKSk7Ci0gICAgfQotCi0gICAgdm9pZCBkaWRSZWNl
aXZlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUqLCBSZXNvdXJjZVJlc3BvbnNlJiYgcmVzcG9uc2Up
IG92ZXJyaWRlCi0gICAgewotICAgICAgICBtX3Jlc3BvbnNlID0gV1RGTW92ZShyZXNwb25zZSk7
Ci0gICAgICAgIG1fZG93bmxvYWQuZGlkUmVjZWl2ZVJlc3BvbnNlKG1fcmVzcG9uc2UpOwotCi0g
ICAgICAgIGlmIChtX3Jlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgPj0gNDAwKSB7Ci0gICAgICAg
ICAgICBkb3dubG9hZEZhaWxlZChwbGF0Zm9ybURvd25sb2FkTmV0d29ya0Vycm9yKG1fcmVzcG9u
c2UuaHR0cFN0YXR1c0NvZGUoKSwgbV9yZXNwb25zZS51cmwoKSwgbV9yZXNwb25zZS5odHRwU3Rh
dHVzVGV4dCgpKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBT
dHJpbmcgc3VnZ2VzdGVkRmlsZW5hbWUgPSBtX3Jlc3BvbnNlLnN1Z2dlc3RlZEZpbGVuYW1lKCk7
Ci0gICAgICAgIGlmIChzdWdnZXN0ZWRGaWxlbmFtZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAg
IFVSTCB1cmwgPSBtX3Jlc3BvbnNlLnVybCgpOwotICAgICAgICAgICAgdXJsLnNldFF1ZXJ5KFN0
cmluZygpKTsKLSAgICAgICAgICAgIHVybC5yZW1vdmVGcmFnbWVudElkZW50aWZpZXIoKTsKLSAg
ICAgICAgICAgIHN1Z2dlc3RlZEZpbGVuYW1lID0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKHVy
bC5sYXN0UGF0aENvbXBvbmVudCgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZyBkZXN0
aW5hdGlvblVSSSA9IG1fZG93bmxvYWQuZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmls
ZW5hbWUoc3VnZ2VzdGVkRmlsZW5hbWUsIG1fYWxsb3dPdmVyd3JpdGUpOwotICAgICAgICBpZiAo
ZGVzdGluYXRpb25VUkkuaXNFbXB0eSgpKSB7Ci0jaWYgUExBVEZPUk0oR1RLKQotICAgICAgICAg
ICAgR1VuaXF1ZVB0cjxjaGFyPiBidWZmZXIoZ19zdHJkdXBfcHJpbnRmKF8oIkNhbm5vdCBkZXRl
cm1pbmUgZGVzdGluYXRpb24gVVJJIGZvciBkb3dubG9hZCB3aXRoIHN1Z2dlc3RlZCBmaWxlbmFt
ZSAlcyIpLCBzdWdnZXN0ZWRGaWxlbmFtZS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgICAgICAgICBT
dHJpbmcgZXJyb3JNZXNzYWdlID0gU3RyaW5nOjpmcm9tVVRGOChidWZmZXIuZ2V0KCkpOwotI2Vs
c2UKLSAgICAgICAgICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBtYWtlU3RyaW5nKCJDYW5ub3Qg
ZGV0ZXJtaW5lIGRlc3RpbmF0aW9uIFVSSSBmb3IgZG93bmxvYWQgd2l0aCBzdWdnZXN0ZWQgZmls
ZW5hbWUgIiwgc3VnZ2VzdGVkRmlsZW5hbWUpOwotI2VuZGlmCi0gICAgICAgICAgICBkb3dubG9h
ZEZhaWxlZChwbGF0Zm9ybURvd25sb2FkRGVzdGluYXRpb25FcnJvcihtX3Jlc3BvbnNlLCBlcnJv
ck1lc3NhZ2UpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIG1f
ZGVzdGluYXRpb25GaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3VyaShkZXN0aW5hdGlv
blVSSS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgICAgIEdSZWZQdHI8R0ZpbGVPdXRwdXRTdHJlYW0+
IG91dHB1dFN0cmVhbTsKLSAgICAgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOwotICAg
ICAgICBpZiAobV9hbGxvd092ZXJ3cml0ZSkKLSAgICAgICAgICAgIG91dHB1dFN0cmVhbSA9IGFk
b3B0R1JlZihnX2ZpbGVfcmVwbGFjZShtX2Rlc3RpbmF0aW9uRmlsZS5nZXQoKSwgbnVsbHB0ciwg
RkFMU0UsIEdfRklMRV9DUkVBVEVfTk9ORSwgbnVsbHB0ciwgJmVycm9yLm91dFB0cigpKSk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIG91dHB1dFN0cmVhbSA9IGFkb3B0R1JlZihnX2ZpbGVf
Y3JlYXRlKG1fZGVzdGluYXRpb25GaWxlLmdldCgpLCBHX0ZJTEVfQ1JFQVRFX05PTkUsIG51bGxw
dHIsICZlcnJvci5vdXRQdHIoKSkpOwotICAgICAgICBpZiAoIW91dHB1dFN0cmVhbSkgewotICAg
ICAgICAgICAgbV9kZXN0aW5hdGlvbkZpbGUuY2xlYXIoKTsKLSAgICAgICAgICAgIGRvd25sb2Fk
RmFpbGVkKHBsYXRmb3JtRG93bmxvYWREZXN0aW5hdGlvbkVycm9yKG1fcmVzcG9uc2UsIGVycm9y
LT5tZXNzYWdlKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBT
dHJpbmcgaW50ZXJtZWRpYXRlVVJJID0gZGVzdGluYXRpb25VUkkgKyAiLndrZG93bmxvYWQiOwot
ICAgICAgICBtX2ludGVybWVkaWF0ZUZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfdXJp
KGludGVybWVkaWF0ZVVSSS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgICAgIG1fb3V0cHV0U3RyZWFt
ID0gYWRvcHRHUmVmKGdfZmlsZV9yZXBsYWNlKG1faW50ZXJtZWRpYXRlRmlsZS5nZXQoKSwgMCwg
VFJVRSwgR19GSUxFX0NSRUFURV9OT05FLCAwLCAmZXJyb3Iub3V0UHRyKCkpKTsKLSAgICAgICAg
aWYgKCFtX291dHB1dFN0cmVhbSkgewotICAgICAgICAgICAgZG93bmxvYWRGYWlsZWQocGxhdGZv
cm1Eb3dubG9hZERlc3RpbmF0aW9uRXJyb3IobV9yZXNwb25zZSwgZXJyb3ItPm1lc3NhZ2UpKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIG1fZG93bmxvYWQuZGlk
Q3JlYXRlRGVzdGluYXRpb24oZGVzdGluYXRpb25VUkkpOwotICAgIH0KLQotICAgIHZvaWQgZGlk
UmVjZWl2ZURhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBs
ZW5ndGgsIGludCAvKmVuY29kZWREYXRhTGVuZ3RoKi8pIG92ZXJyaWRlCi0gICAgewotICAgICAg
ICBpZiAobV9oYW5kbGVSZXNwb25zZUxhdGVyLmlzQWN0aXZlKCkpIHsKLSAgICAgICAgICAgIG1f
aGFuZGxlUmVzcG9uc2VMYXRlci5zdG9wKCk7Ci0gICAgICAgICAgICBoYW5kbGVSZXNwb25zZSgp
OwotICAgICAgICB9Ci0KLSAgICAgICAgZ3NpemUgYnl0ZXNXcml0dGVuOwotICAgICAgICBHVW5p
cXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgICAgIGdfb3V0cHV0X3N0cmVhbV93cml0ZV9h
bGwoR19PVVRQVVRfU1RSRUFNKG1fb3V0cHV0U3RyZWFtLmdldCgpKSwgZGF0YSwgbGVuZ3RoLCAm
Ynl0ZXNXcml0dGVuLCAwLCAmZXJyb3Iub3V0UHRyKCkpOwotICAgICAgICBpZiAoZXJyb3IpIHsK
LSAgICAgICAgICAgIGRvd25sb2FkRmFpbGVkKHBsYXRmb3JtRG93bmxvYWREZXN0aW5hdGlvbkVy
cm9yKG1fcmVzcG9uc2UsIGVycm9yLT5tZXNzYWdlKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgbV9kb3dubG9hZC5kaWRSZWNlaXZlRGF0YShieXRlc1dyaXR0ZW4p
OwotICAgIH0KLQotICAgIHZvaWQgZGlkRmluaXNoTG9hZGluZyhSZXNvdXJjZUhhbmRsZSosIGRv
dWJsZSkgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIG1fb3V0cHV0U3RyZWFtID0gbnVsbHB0cjsK
LQotICAgICAgICBBU1NFUlQobV9kZXN0aW5hdGlvbkZpbGUpOwotICAgICAgICBBU1NFUlQobV9p
bnRlcm1lZGlhdGVGaWxlKTsKLSAgICAgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOwot
ICAgICAgICBpZiAoIWdfZmlsZV9tb3ZlKG1faW50ZXJtZWRpYXRlRmlsZS5nZXQoKSwgbV9kZXN0
aW5hdGlvbkZpbGUuZ2V0KCksIEdfRklMRV9DT1BZX09WRVJXUklURSwgbnVsbHB0ciwgbnVsbHB0
ciwgbnVsbHB0ciwgJmVycm9yLm91dFB0cigpKSkgewotICAgICAgICAgICAgZG93bmxvYWRGYWls
ZWQocGxhdGZvcm1Eb3dubG9hZERlc3RpbmF0aW9uRXJyb3IobV9yZXNwb25zZSwgZXJyb3ItPm1l
c3NhZ2UpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIEdSZWZQ
dHI8R0ZpbGVJbmZvPiBpbmZvID0gYWRvcHRHUmVmKGdfZmlsZV9pbmZvX25ldygpKTsKLSAgICAg
ICAgQ1N0cmluZyB1cmkgPSBtX3Jlc3BvbnNlLnVybCgpLnN0cmluZygpLnV0ZjgoKTsKLSAgICAg
ICAgZ19maWxlX2luZm9fc2V0X2F0dHJpYnV0ZV9zdHJpbmcoaW5mby5nZXQoKSwgIm1ldGFkYXRh
Ojpkb3dubG9hZC11cmkiLCB1cmkuZGF0YSgpKTsKLSAgICAgICAgZ19maWxlX2luZm9fc2V0X2F0
dHJpYnV0ZV9zdHJpbmcoaW5mby5nZXQoKSwgInhhdHRyOjp4ZGcub3JpZ2luLnVybCIsIHVyaS5k
YXRhKCkpOwotICAgICAgICBnX2ZpbGVfc2V0X2F0dHJpYnV0ZXNfYXN5bmMobV9kZXN0aW5hdGlv
bkZpbGUuZ2V0KCksIGluZm8uZ2V0KCksIEdfRklMRV9RVUVSWV9JTkZPX05PTkUsIEdfUFJJT1JJ
VFlfREVGQVVMVCwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0cik7Ci0KLSAgICAgICAgbV9kb3du
bG9hZC5kaWRGaW5pc2goKTsKLSAgICB9Ci0KLSAgICB2b2lkIGRpZEZhaWwoUmVzb3VyY2VIYW5k
bGUqLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAg
IGRvd25sb2FkRmFpbGVkKHBsYXRmb3JtRG93bmxvYWROZXR3b3JrRXJyb3IoZXJyb3IuZXJyb3JD
b2RlKCksIGVycm9yLmZhaWxpbmdVUkwoKSwgZXJyb3IubG9jYWxpemVkRGVzY3JpcHRpb24oKSkp
OwotICAgIH0KLQotICAgIHZvaWQgY2FuY2VsKFJlc291cmNlSGFuZGxlKiBoYW5kbGUpCi0gICAg
ewotICAgICAgICBoYW5kbGUtPmNhbmNlbCgpOwotICAgICAgICBkZWxldGVGaWxlc0lmTmVlZGVk
KCk7Ci0gICAgICAgIG1fZG93bmxvYWQuZGlkQ2FuY2VsKElQQzo6RGF0YVJlZmVyZW5jZSgpKTsK
LSAgICB9Ci0KLSAgICB2b2lkIGhhbmRsZVJlc3BvbnNlKCkKLSAgICB7Ci0gICAgICAgIGRpZFJl
Y2VpdmVSZXNwb25zZShudWxscHRyLCBXVEZNb3ZlKG1fZGVsYXllZFJlc3BvbnNlKSk7Ci0gICAg
fQotCi0gICAgdm9pZCBoYW5kbGVSZXNwb25zZUxhdGVyKGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
IHJlc3BvbnNlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fcmVzcG9uc2UuaXNOdWxsKCkpOwot
ICAgICAgICBBU1NFUlQoIW1faGFuZGxlUmVzcG9uc2VMYXRlci5pc0FjdGl2ZSgpKTsKLQotICAg
ICAgICBtX2RlbGF5ZWRSZXNwb25zZSA9IHJlc3BvbnNlOwotCi0gICAgICAgIC8vIENhbGwgZGlk
UmVjZWl2ZVJlc3BvbnNlIGluIGFuIGlkbGUgdG8gbWFrZSBzdXJlIHRoZSBkb3dubG9hZCBpcyBh
ZGRlZAotICAgICAgICAvLyB0byB0aGUgRG93bmxvYWRNYW5hZ2VyIGRvd25sb2FkcyBtYXAuCi0g
ICAgICAgIG1faGFuZGxlUmVzcG9uc2VMYXRlci5zdGFydE9uZVNob3QoMCk7Ci0gICAgfQotCi0g
ICAgRG93bmxvYWQmIG1fZG93bmxvYWQ7Ci0gICAgR1JlZlB0cjxHRmlsZU91dHB1dFN0cmVhbT4g
bV9vdXRwdXRTdHJlYW07Ci0gICAgUmVzb3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNlOwotICAgIEdS
ZWZQdHI8R0ZpbGU+IG1fZGVzdGluYXRpb25GaWxlOwotICAgIEdSZWZQdHI8R0ZpbGU+IG1faW50
ZXJtZWRpYXRlRmlsZTsKLSAgICBSZXNvdXJjZVJlc3BvbnNlIG1fZGVsYXllZFJlc3BvbnNlOwot
ICAgIFJ1bkxvb3A6OlRpbWVyPERvd25sb2FkQ2xpZW50PiBtX2hhbmRsZVJlc3BvbnNlTGF0ZXI7
Ci0gICAgYm9vbCBtX2FsbG93T3ZlcndyaXRlOwotfTsKLQotdm9pZCBEb3dubG9hZDo6c3RhcnRO
ZXR3b3JrTG9hZCgpCi17Ci0gICAgQVNTRVJUKCFtX2Rvd25sb2FkQ2xpZW50KTsKLSAgICBBU1NF
UlQoIW1fcmVzb3VyY2VIYW5kbGUpOwotICAgIG1fZG93bmxvYWRDbGllbnQgPSBzdGQ6Om1ha2Vf
dW5pcXVlPERvd25sb2FkQ2xpZW50PigqdGhpcyk7Ci0gICAgbV9yZXNvdXJjZUhhbmRsZSA9IFJl
c291cmNlSGFuZGxlOjpjcmVhdGUoMCwgbV9yZXF1ZXN0LCBtX2Rvd25sb2FkQ2xpZW50LmdldCgp
LCBmYWxzZSwgdHJ1ZSk7Ci0gICAgZGlkU3RhcnQoKTsKLX0KLQotdm9pZCBEb3dubG9hZDo6c3Rh
cnROZXR3b3JrTG9hZFdpdGhIYW5kbGUoUmVzb3VyY2VIYW5kbGUqIHJlc291cmNlSGFuZGxlLCBj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKLXsKLSAgICBBU1NFUlQoIW1fZG93bmxv
YWRDbGllbnQpOwotICAgIEFTU0VSVCghbV9yZXNvdXJjZUhhbmRsZSk7Ci0gICAgbV9kb3dubG9h
ZENsaWVudCA9IHN0ZDo6bWFrZV91bmlxdWU8RG93bmxvYWRDbGllbnQ+KCp0aGlzKTsKLSAgICBt
X3Jlc291cmNlSGFuZGxlID0gcmVzb3VyY2VIYW5kbGUtPnJlbGVhc2VGb3JEb3dubG9hZChtX2Rv
d25sb2FkQ2xpZW50LmdldCgpKTsKLSAgICBkaWRTdGFydCgpOwotICAgIHN0YXRpY19jYXN0PERv
d25sb2FkQ2xpZW50Kj4obV9kb3dubG9hZENsaWVudC5nZXQoKSktPmhhbmRsZVJlc3BvbnNlTGF0
ZXIocmVzcG9uc2UpOwotfQotCiB2b2lkIERvd25sb2FkOjpyZXN1bWUoY29uc3QgSVBDOjpEYXRh
UmVmZXJlbmNlJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
JikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpAQCAtMjMzLDE0ICs0Miw4IEBAIHZvaWQgRG93
bmxvYWQ6OnJlc3VtZShjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmLCBjb25zdCBTdHJpbmcmLCBj
b25zdCBTYW5kYm94RXh0CiAKIHZvaWQgRG93bmxvYWQ6OmNhbmNlbE5ldHdvcmtMb2FkKCkKIHsK
LSAgICBpZiAoIW1fcmVzb3VyY2VIYW5kbGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIENh
bmNlbGxpbmcgdGhlIGRvd25sb2FkIHdpbGwgZGVsZXRlIGl0IGFuZCBwbGF0Zm9ybUludmFsaWRh
dGUoKSB3aWxsIGJlIGNhbGxlZCBieSB0aGUgZGVzdHJ1Y3Rvci4KLSAgICAvLyBTbywgd2UgbmVl
ZCB0byBzZXQgbV9yZXNvdXJjZUhhbmRsZSB0byBudWxscHRyIGJlZm9yZSBhY3R1YWxseSBjYW5j
ZWxsaW5nIHRoZSBkb3dubG9hZCB0byBtYWtlIHN1cmUKLSAgICAvLyBpdCB3b24ndCBiZSBjYW5j
ZWxsZWQgYWdhaW4gYnkgcGxhdGZvcm1JbnZhbGlkYXRlLiBTZWUgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzY1MC4KLSAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+
IHJlc291cmNlSGFuZGxlID0gbV9yZXNvdXJjZUhhbmRsZS5yZWxlYXNlKCk7Ci0gICAgc3RhdGlj
X2Nhc3Q8RG93bmxvYWRDbGllbnQqPihtX2Rvd25sb2FkQ2xpZW50LmdldCgpKS0+Y2FuY2VsKHJl
c291cmNlSGFuZGxlLmdldCgpKTsKKyAgICBtX2Rvd25sb2FkLT5jYW5jZWwoKTsKKyAgICBkaWRD
YW5jZWwoeyB9KTsKIH0KIAogdm9pZCBEb3dubG9hZDo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKQEAg
LTI0OSw3ICs1Miw2IEBAIHZvaWQgRG93bmxvYWQ6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCiAKIHZv
aWQgRG93bmxvYWQ6OnBsYXRmb3JtRGlkRmluaXNoKCkKIHsKLSAgICBtX3Jlc291cmNlSGFuZGxl
ID0gbnVsbHB0cjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suaCBiL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5oCmluZGV4IDMyNDJjN2UuLjg4NmM3
MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRh
VGFzay5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFz
ay5oCkBAIC0yMyw5ICsyMywxMSBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgogICovCiAKLSNpZm5kZWYgTmV0d29ya0RhdGFUYXNrX2gKLSNkZWZpbmUgTmV0d29ya0RhdGFU
YXNrX2gKKyNwcmFnbWEgb25jZQogCisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKworI2luY2x1
ZGUgIkRvd25sb2FkSUQuaCIKICNpbmNsdWRlICJTYW5kYm94RXh0ZW5zaW9uLmgiCiAjaW5jbHVk
ZSA8V2ViQ29yZS9DcmVkZW50aWFsLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRlclR5
cGVzLmg+CkBAIC00MSw2ICs0MywxMyBAQAogT0JKQ19DTEFTUyBOU1VSTFNlc3Npb25EYXRhVGFz
azsKICNlbmRpZgogCisjaWYgVVNFKFNPVVApCisjaW5jbHVkZSA8V2ViQ29yZS9Qcm90ZWN0aW9u
U3BhY2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVzcG9uc2UuaD4KKyNpbmNsdWRl
IDx3dGYvUnVuTG9vcC5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KKyNlbmRpZgor
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKIGNs
YXNzIENyZWRlbnRpYWw7CkBAIC0xMDUsMTkgKzExNCwyMyBAQCBwdWJsaWM6CiAgICAgdHlwZWRl
ZiB1aW50NjRfdCBUYXNrSWRlbnRpZmllcjsKICAgICAKICAgICB+TmV0d29ya0RhdGFUYXNrKCk7
Ci0gICAgCisKKyNpZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lkIGRpZFNlbmREYXRhKHVpbnQ2
NF90IHRvdGFsQnl0ZXNTZW50LCB1aW50NjRfdCB0b3RhbEJ5dGVzRXhwZWN0ZWRUb1NlbmQpOwog
ICAgIHZvaWQgZGlkUmVjZWl2ZUNoYWxsZW5nZShjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZSYsIENoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVyJiYpOwogICAgIHZvaWQgZGlk
Q29tcGxldGVXaXRoRXJyb3IoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpOwogICAgIHZv
aWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmJiwgUmVzcG9u
c2VDb21wbGV0aW9uSGFuZGxlciYmKTsKICAgICB2b2lkIGRpZFJlY2VpdmVEYXRhKFJlZjxXZWJD
b3JlOjpTaGFyZWRCdWZmZXI+JiYpOwogICAgIHZvaWQgZGlkQmVjb21lRG93bmxvYWQoKTsKLSAg
ICAKKworICAgIHZvaWQgd2lsbFBlcmZvcm1IVFRQUmVkaXJlY3Rpb24oV2ViQ29yZTo6UmVzb3Vy
Y2VSZXNwb25zZSYmLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiwgUmVkaXJlY3RDb21wbGV0
aW9uSGFuZGxlciYmKTsKKyAgICB2b2lkIHRyYW5zZmVyU2FuZGJveEV4dGVuc2lvblRvRG93bmxv
YWQoRG93bmxvYWQmKTsKKyNlbmRpZgogICAgIE5ldHdvcmtEYXRhVGFza0NsaWVudCogY2xpZW50
KCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQ7IH0KICAgICB2b2lkIGNsZWFyQ2xpZW50KCkgeyBt
X2NsaWVudCA9IG51bGxwdHI7IH0KICAgICAKLSAgICBEb3dubG9hZElEIHBlbmRpbmdEb3dubG9h
ZElEKCkgeyByZXR1cm4gbV9wZW5kaW5nRG93bmxvYWRJRDsgfQotICAgIFBlbmRpbmdEb3dubG9h
ZCogcGVuZGluZ0Rvd25sb2FkKCkgeyByZXR1cm4gbV9wZW5kaW5nRG93bmxvYWQ7IH0KKyAgICBE
b3dubG9hZElEIHBlbmRpbmdEb3dubG9hZElEKCkgY29uc3QgeyByZXR1cm4gbV9wZW5kaW5nRG93
bmxvYWRJRDsgfQorICAgIFBlbmRpbmdEb3dubG9hZCogcGVuZGluZ0Rvd25sb2FkKCkgY29uc3Qg
eyByZXR1cm4gbV9wZW5kaW5nRG93bmxvYWQ7IH0KICAgICB2b2lkIHNldFBlbmRpbmdEb3dubG9h
ZElEKERvd25sb2FkSUQgZG93bmxvYWRJRCkKICAgICB7CiAgICAgICAgIEFTU0VSVCghbV9wZW5k
aW5nRG93bmxvYWRJRC5kb3dubG9hZElEKCkpOwpAQCAtMTMwLDE5ICsxNDMsNzMgQEAgcHVibGlj
OgogICAgICAgICBtX3BlbmRpbmdEb3dubG9hZCA9ICZwZW5kaW5nRG93bmxvYWQ7CiAgICAgfQog
ICAgIHZvaWQgc2V0UGVuZGluZ0Rvd25sb2FkTG9jYXRpb24oY29uc3QgU3RyaW5nJiBmaWxlbmFt
ZSwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiwgYm9vbCBhbGxvd092ZXJ3cml0ZSk7
Ci0gICAgY29uc3QgU3RyaW5nJiBwZW5kaW5nRG93bmxvYWRMb2NhdGlvbigpIHsgcmV0dXJuIG1f
cGVuZGluZ0Rvd25sb2FkTG9jYXRpb247IH0KKyAgICBjb25zdCBTdHJpbmcmIHBlbmRpbmdEb3du
bG9hZExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wZW5kaW5nRG93bmxvYWRMb2NhdGlvbjsg
fQorICAgIGJvb2wgaXNEb3dubG9hZCgpIGNvbnN0IHsgcmV0dXJuICEhbV9wZW5kaW5nRG93bmxv
YWRJRC5kb3dubG9hZElEKCk7IH0KIAogICAgIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYgZmlyc3RSZXF1ZXN0KCkgY29uc3QgeyByZXR1cm4gbV9maXJzdFJlcXVlc3Q7IH0KICAgICBT
dHJpbmcgc3VnZ2VzdGVkRmlsZW5hbWUoKTsKICAgICB2b2lkIHNldFN1Z2dlc3RlZEZpbGVuYW1l
KGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQgd2lsbFBlcmZvcm1IVFRQUmVkaXJlY3Rpb24oV2Vi
Q29yZTo6UmVzb3VyY2VSZXNwb25zZSYmLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiwgUmVk
aXJlY3RDb21wbGV0aW9uSGFuZGxlciYmKTsKLSAgICB2b2lkIHRyYW5zZmVyU2FuZGJveEV4dGVu
c2lvblRvRG93bmxvYWQoRG93bmxvYWQmKTsKICAgICBib29sIGFsbG93c1NwZWNpZmljSFRUUFND
ZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2Um
KTsKICAgICAKIHByaXZhdGU6CiAgICAgTmV0d29ya0RhdGFUYXNrKE5ldHdvcmtTZXNzaW9uJiwg
TmV0d29ya0RhdGFUYXNrQ2xpZW50JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jiwg
V2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHMsIFdlYkNvcmU6OkNvbnRlbnRTbmlmZmluZ1BvbGlj
eSwgYm9vbCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KTsKIAogICAg
IGJvb2wgdHJ5UGFzc3dvcmRCYXNlZEF1dGhlbnRpY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlJiwgY29uc3QgQ2hhbGxlbmdlQ29tcGxldGlvbkhhbmRsZXImKTsK
KworI2lmIFVTRShTT1VQKQorICAgIHZvaWQgdGltZW91dEZpcmVkKCk7CisgICAgdm9pZCBzdGFy
dFRpbWVvdXQoKTsKKyAgICB2b2lkIHN0b3BUaW1lb3V0KCk7CisgICAgdm9pZCBpbnZhbGlkYXRl
QW5kQ2FuY2VsKCk7CisgICAgdm9pZCBjcmVhdGVSZXF1ZXN0KGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdCYpOworICAgIHZvaWQgY2xlYXJSZXF1ZXN0KCk7CisgICAgc3RhdGljIHZvaWQg
c2VuZFJlcXVlc3RDYWxsYmFjayhTb3VwUmVxdWVzdCosIEdBc3luY1Jlc3VsdCosIE5ldHdvcmtE
YXRhVGFzayopOworICAgIHZvaWQgZGlkU2VuZFJlcXVlc3QoR1JlZlB0cjxHSW5wdXRTdHJlYW0+
JiYpOworICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKCk7CisgICAgc3RhdGljIHZvaWQgdGxz
RXJyb3JzQ2hhbmdlZENhbGxiYWNrKFNvdXBNZXNzYWdlKiwgR1BhcmFtU3BlYyosIE5ldHdvcmtE
YXRhVGFzayopOworICAgIHZvaWQgdGxzRXJyb3JzQ2hhbmdlZCgpOworICAgIHZvaWQgYXBwbHlB
dXRoZW50aWNhdGlvblRvUmVxdWVzdChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICBz
dGF0aWMgdm9pZCBhdXRoZW50aWNhdGVDYWxsYmFjayhTb3VwU2Vzc2lvbiosIFNvdXBNZXNzYWdl
KiwgU291cEF1dGgqLCBnYm9vbGVhbiByZXRyeWluZywgTmV0d29ya0RhdGFUYXNrKik7CisgICAg
dm9pZCBhdXRoZW50aWNhdGUoV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmJik7Cisg
ICAgdm9pZCBjb250aW51ZUF1dGhlbnRpY2F0ZShXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSYmKTsKKyAgICBzdGF0aWMgdm9pZCBza2lwSW5wdXRTdHJlYW1Gb3JSZWRpcmVjdGlvbkNh
bGxiYWNrKEdJbnB1dFN0cmVhbSosIEdBc3luY1Jlc3VsdCosIE5ldHdvcmtEYXRhVGFzayopOwor
ICAgIHZvaWQgc2tpcElucHV0U3RyZWFtRm9yUmVkaXJlY3Rpb24oKTsKKyAgICB2b2lkIGRpZEZp
bmlzaFNraXBJbnB1dFN0cmVhbUZvclJlZGlyZWN0aW9uKCk7CisgICAgYm9vbCBzaG91bGRTdGFy
dEhUVFBSZWRpcmVjdGlvbigpOworICAgIHZvaWQgY29udGludWVIVFRQUmVkaXJlY3Rpb24oKTsK
KyAgICBzdGF0aWMgdm9pZCByZWFkQ2FsbGJhY2soR0lucHV0U3RyZWFtKiwgR0FzeW5jUmVzdWx0
KiwgTmV0d29ya0RhdGFUYXNrKik7CisgICAgdm9pZCByZWFkKCk7CisgICAgdm9pZCBkaWRSZWFk
KGdzc2l6ZSBieXRlc1JlYWQpOworICAgIHZvaWQgZGlkRmluaXNoUmVhZCgpOworICAgIHN0YXRp
YyB2b2lkIHJlcXVlc3ROZXh0UGFydENhbGxiYWNrKFNvdXBNdWx0aXBhcnRJbnB1dFN0cmVhbSos
IEdBc3luY1Jlc3VsdCosIE5ldHdvcmtEYXRhVGFzayopOworICAgIHZvaWQgcmVxdWVzdE5leHRQ
YXJ0KCk7CisgICAgdm9pZCBkaWRSZXF1ZXN0TmV4dFBhcnQoR1JlZlB0cjxHSW5wdXRTdHJlYW0+
JiYpOworICAgIHZvaWQgZGlkRmluaXNoUmVxdWVzdE5leHRQYXJ0KCk7CisgICAgc3RhdGljIHZv
aWQgZ290SGVhZGVyc0NhbGxiYWNrKFNvdXBNZXNzYWdlKiwgTmV0d29ya0RhdGFUYXNrKik7Cisg
ICAgdm9pZCBkaWRHZXRIZWFkZXJzKCk7CisgICAgc3RhdGljIHZvaWQgd3JvdGVCb2R5RGF0YUNh
bGxiYWNrKFNvdXBNZXNzYWdlKiwgU291cEJ1ZmZlciosIE5ldHdvcmtEYXRhVGFzayopOworICAg
IHZvaWQgZGlkV3JpdGVCb2R5RGF0YSh1aW50NjRfdCBieXRlc1NlbnQpOworICAgIHZvaWQgZG93
bmxvYWQoKTsKKyAgICBzdGF0aWMgdm9pZCB3cml0ZURvd25sb2FkQ2FsbGJhY2soR091dHB1dFN0
cmVhbSosIEdBc3luY1Jlc3VsdCosIE5ldHdvcmtEYXRhVGFzayopOworICAgIHZvaWQgd3JpdGVE
b3dubG9hZCgpOworICAgIHZvaWQgZGlkV3JpdGVEb3dubG9hZChnc2l6ZSBieXRlc1dyaXR0ZW4p
OworICAgIHZvaWQgZGlkRmFpbERvd25sb2FkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3Im
KTsKKyAgICB2b2lkIGRpZEZpbmlzaERvd25sb2FkKCk7CisgICAgdm9pZCBjbGVhbkRvd25sb2Fk
RmlsZXMoKTsKKyAgICB2b2lkIGRpZEZhaWwoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYp
OworI2lmIEVOQUJMRShXRUJfVElNSU5HKQorICAgIHN0YXRpYyB2b2lkIG5ldHdvcmtFdmVudENh
bGxiYWNrKFNvdXBNZXNzYWdlKiwgR1NvY2tldENsaWVudEV2ZW50LCBHSU9TdHJlYW0qLCBOZXR3
b3JrRGF0YVRhc2sqKTsKKyAgICB2b2lkIG5ldHdvcmtFdmVudChHU29ja2V0Q2xpZW50RXZlbnQp
OworI2lmIFNPVVBfQ0hFQ0tfVkVSU0lPTigyLCA0OSwgOTEpCisgICAgc3RhdGljIHZvaWQgc3Rh
cnRpbmdDYWxsYmFjayhTb3VwTWVzc2FnZSosIE5ldHdvcmtEYXRhVGFzayopOworI2Vsc2UKKyAg
ICBzdGF0aWMgdm9pZCByZXF1ZXN0U3RhcnRlZENhbGxiYWNrKFNvdXBTZXNzaW9uKiwgU291cE1l
c3NhZ2UqLCBTb3VwU29ja2V0KiwgTmV0d29ya0RhdGFUYXNrKik7CisjZW5kaWYKKyAgICB2b2lk
IGRpZFN0YXJ0UmVxdWVzdCgpOworICAgIHN0YXRpYyB2b2lkIHJlc3RhcnRlZENhbGxiYWNrKFNv
dXBNZXNzYWdlKiwgTmV0d29ya0RhdGFUYXNrKik7CisgICAgdm9pZCBkaWRSZXN0YXJ0KCk7Cisj
ZW5kaWYKKyNlbmRpZgogICAgIAogICAgIGVudW0gRmFpbHVyZVR5cGUgewogICAgICAgICBOb0Zh
aWx1cmUsCkBAIC0xNzIsNiArMjM5LDMwIEBAIHByaXZhdGU6CiAjaWYgUExBVEZPUk0oQ09DT0Ep
CiAgICAgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbkRhdGFUYXNrPiBtX3Rhc2s7CiAjZW5kaWYKKyNp
ZiBVU0UoU09VUCkKKyAgICBTdGF0ZSBtX3N0YXRlIHsgU3RhdGU6OlN1c3BlbmRlZCB9OworICAg
IFdlYkNvcmU6OkNvbnRlbnRTbmlmZmluZ1BvbGljeSBtX3Nob3VsZENvbnRlbnRTbmlmZjsKKyAg
ICBHUmVmUHRyPFNvdXBSZXF1ZXN0PiBtX3NvdXBSZXF1ZXN0OworICAgIEdSZWZQdHI8U291cE1l
c3NhZ2U+IG1fc291cE1lc3NhZ2U7CisgICAgR1JlZlB0cjxHSW5wdXRTdHJlYW0+IG1faW5wdXRT
dHJlYW07CisgICAgR1JlZlB0cjxTb3VwTXVsdGlwYXJ0SW5wdXRTdHJlYW0+IG1fbXVsdGlwYXJ0
SW5wdXRTdHJlYW07CisgICAgR1JlZlB0cjxHQ2FuY2VsbGFibGU+IG1fY2FuY2VsbGFibGU7Cisg
ICAgR1JlZlB0cjxHQXN5bmNSZXN1bHQ+IG1fcGVuZGluZ1Jlc3VsdDsKKyAgICBXZWJDb3JlOjpQ
cm90ZWN0aW9uU3BhY2UgbV9wcm90ZWN0aW9uU3BhY2VGb3JQZXJzaXN0ZW50U3RvcmFnZTsKKyAg
ICBXZWJDb3JlOjpDcmVkZW50aWFsIG1fY3JlZGVudGlhbEZvclBlcnNpc3RlbnRTdG9yYWdlOwor
ICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsKKyAgICBWZWN0b3I8Y2hh
cj4gbV9yZWFkQnVmZmVyOworICAgIHVuc2lnbmVkIG1fcmVkaXJlY3RDb3VudCB7IDAgfTsKKyAg
ICB1aW50NjRfdCBtX2JvZHlEYXRhVG90YWxCeXRlc1NlbnQgeyAwIH07CisgICAgR1JlZlB0cjxH
RmlsZT4gbV9kb3dubG9hZERlc3RpbmF0aW9uRmlsZTsKKyAgICBHUmVmUHRyPEdGaWxlPiBtX2Rv
d25sb2FkSW50ZXJtZWRpYXRlRmlsZTsKKyAgICBHUmVmUHRyPEdPdXRwdXRTdHJlYW0+IG1fZG93
bmxvYWRPdXRwdXRTdHJlYW07CisgICAgYm9vbCBtX2FsbG93T3ZlcndyaXRlRG93bmxvYWQgeyBm
YWxzZSB9OworI2lmIEVOQUJMRShXRUJfVElNSU5HKQorICAgIGRvdWJsZSBtX3N0YXJ0VGltZSB7
IDAgfTsKKyNlbmRpZgorICAgIFJ1bkxvb3A6OlRpbWVyPE5ldHdvcmtEYXRhVGFzaz4gbV90aW1l
b3V0U291cmNlOworI2VuZGlmCiAgICAgU3RyaW5nIG1fc3VnZ2VzdGVkRmlsZW5hbWU7CiB9Owog
CkBAIC0xODEsNCArMjcyLDQgQEAgV2ViQ29yZTo6Q3JlZGVudGlhbCBzZXJ2ZXJUcnVzdENyZWRl
bnRpYWwoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UKICAgICAKIH0KIAot
I2VuZGlmCisjZW5kaWYgLy8gVVNFKE5FVFdPUktfU0VTU0lPTikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmNwcAppbmRleCBiYjI5OWY2Li44ZmQ0YWNkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuY3BwCkBAIC0y
NzEsNyArMjcxLDcgQEAgdm9pZCBOZXR3b3JrTG9hZDo6Y29tcGxldGVBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZShDaGFsbGVuZ2VDb21wbGV0aW9uSGFuZGxlciYmIGMKIHZvaWQgTmV0d29ya0xvYWQ6
OmRpZFJlY2VpdmVSZXNwb25zZU5ldHdvcmtTZXNzaW9uKFJlc291cmNlUmVzcG9uc2UmJiByZXNw
b25zZSwgUmVzcG9uc2VDb21wbGV0aW9uSGFuZGxlciYmIGNvbXBsZXRpb25IYW5kbGVyKQogewog
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKG1fdGFzayAmJiBtX3Rhc2stPnBl
bmRpbmdEb3dubG9hZElEKCkuZG93bmxvYWRJRCgpKQorICAgIGlmIChtX3Rhc2sgJiYgbV90YXNr
LT5pc0Rvd25sb2FkKCkpCiAgICAgICAgIE5ldHdvcmtQcm9jZXNzOjpzaW5nbGV0b24oKS5maW5k
UGVuZGluZ0Rvd25sb2FkTG9jYXRpb24oKm1fdGFzay5nZXQoKSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlciksIHJlc3BvbnNlKTsKICAgICBlbHNlIGlmIChzaGFyZWREaWRSZWNlaXZlUmVzcG9u
c2UoV1RGTW92ZShyZXNwb25zZSkpID09IE5ldHdvcmtMb2FkQ2xpZW50OjpTaG91bGRDb250aW51
ZURpZFJlY2VpdmVSZXNwb25zZTo6WWVzKQogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihQb2xp
Y3lVc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MuY3BwCmluZGV4IDNiMzk1ZDYuLmRiYzczZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTEwMCw3ICsxMDAsNyBAQCBOZXR3
b3JrUHJvY2Vzczo6TmV0d29ya1Byb2Nlc3MoKQogICAgIGFkZFN1cHBsZW1lbnQ8QXV0aGVudGlj
YXRpb25NYW5hZ2VyPigpOwogICAgIGFkZFN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlcj4oKTsK
ICAgICBhZGRTdXBwbGVtZW50PEN1c3RvbVByb3RvY29sTWFuYWdlcj4oKTsKLSNpZiBVU0UoTkVU
V09SS19TRVNTSU9OKQorI2lmIFVTRShORVRXT1JLX1NFU1NJT04pICYmIFBMQVRGT1JNKENPQ09B
KQogICAgIE5ldHdvcmtTZXNzaW9uOjpzZXRDdXN0b21Qcm90b2NvbE1hbmFnZXIoc3VwcGxlbWVu
dDxDdXN0b21Qcm90b2NvbE1hbmFnZXI+KCkpOwogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oIGIvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uaAppbmRleCBhODQwZjFkLi4yOTk3MzY5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lv
bi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmgK
QEAgLTM1LDkgKzM1LDE0IEBAIE9CSkNfQ0xBU1MgV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlOwog
I2luY2x1ZGUgIk5ldHdvcmtEYXRhVGFzay5oIgogI2luY2x1ZGUgPFdlYkNvcmUvU2Vzc2lvbklE
Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgog
I2luY2x1ZGUgPHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCisjaWYg
VVNFKFNPVVApCit0eXBlZGVmIHN0cnVjdCBfU291cFNlc3Npb24gU291cFNlc3Npb247CisjZW5k
aWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOwog
fQpAQCAtNjIsOSArNjcsMTMgQEAgcHVibGljOgogCiAgICAgV2ViQ29yZTo6U2Vzc2lvbklEIHNl
c3Npb25JRCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vzc2lvbklEOyB9CiAKKyNpZiBVU0UoU09VUCkK
KyAgICBTb3VwU2Vzc2lvbiogc291cFNlc3Npb24oKSBjb25zdDsKKyNlbmRpZgorCisjaWYgUExB
VEZPUk0oQ09DT0EpCiAgICAgLy8gTXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueSBOZXR3b3JrU2Vz
c2lvbiBoYXMgYmVlbiBjcmVhdGVkLgogICAgIHN0YXRpYyB2b2lkIHNldEN1c3RvbVByb3RvY29s
TWFuYWdlcihDdXN0b21Qcm90b2NvbE1hbmFnZXIqKTsKLSNpZiBQTEFURk9STShDT0NPQSkKICAg
ICBzdGF0aWMgdm9pZCBzZXRTb3VyY2VBcHBsaWNhdGlvbkF1ZGl0VG9rZW5EYXRhKFJldGFpblB0
cjxDRkRhdGFSZWY+JiYpOwogICAgIHN0YXRpYyB2b2lkIHNldFNvdXJjZUFwcGxpY2F0aW9uQnVu
ZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmKTsKICAgICBzdGF0aWMgdm9pZCBzZXRTb3VyY2VB
cHBsaWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJik7CkBAIC03NCwyOCAr
ODMsMzEgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICB2b2lkIGNsZWFyQ3JlZGVudGlhbHMoKTsK
LQorI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIE5ldHdvcmtEYXRhVGFzayogZGF0YVRhc2tGb3JJ
ZGVudGlmaWVyKE5ldHdvcmtEYXRhVGFzazo6VGFza0lkZW50aWZpZXIsIFdlYkNvcmU6OlN0b3Jl
ZENyZWRlbnRpYWxzKTsKIAogICAgIHZvaWQgYWRkRG93bmxvYWRJRChOZXR3b3JrRGF0YVRhc2s6
OlRhc2tJZGVudGlmaWVyLCBEb3dubG9hZElEKTsKICAgICBEb3dubG9hZElEIGRvd25sb2FkSUQo
TmV0d29ya0RhdGFUYXNrOjpUYXNrSWRlbnRpZmllcik7CiAgICAgRG93bmxvYWRJRCB0YWtlRG93
bmxvYWRJRChOZXR3b3JrRGF0YVRhc2s6OlRhc2tJZGVudGlmaWVyKTsKLSAgICAKKyNlbmRpZgor
CiBwcml2YXRlOgogICAgIE5ldHdvcmtTZXNzaW9uKFR5cGUsIFdlYkNvcmU6OlNlc3Npb25JRCwg
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyKik7Ci0gICAgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNz
aW9uJiBuZXR3b3JrU3RvcmFnZVNlc3Npb24oKTsKKyAgICBXZWJDb3JlOjpOZXR3b3JrU3RvcmFn
ZVNlc3Npb24mIG5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpIGNvbnN0OwogCiAgICAgV2ViQ29yZTo6
U2Vzc2lvbklEIG1fc2Vzc2lvbklEOwogCisjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgSGFzaE1h
cDxOZXR3b3JrRGF0YVRhc2s6OlRhc2tJZGVudGlmaWVyLCBOZXR3b3JrRGF0YVRhc2sqPiBtX2Rh
dGFUYXNrTWFwV2l0aENyZWRlbnRpYWxzOwogICAgIEhhc2hNYXA8TmV0d29ya0RhdGFUYXNrOjpU
YXNrSWRlbnRpZmllciwgTmV0d29ya0RhdGFUYXNrKj4gbV9kYXRhVGFza01hcFdpdGhvdXRDcmVk
ZW50aWFsczsKICAgICBIYXNoTWFwPE5ldHdvcmtEYXRhVGFzazo6VGFza0lkZW50aWZpZXIsIERv
d25sb2FkSUQ+IG1fZG93bmxvYWRNYXA7CiAKLSNpZiBQTEFURk9STShDT0NPQSkKICAgICBSZXRh
aW5QdHI8TlNVUkxTZXNzaW9uPiBtX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2U7CiAgICAg
UmV0YWluUHRyPFdLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZT4gbV9zZXNzaW9uV2l0aENyZWRlbnRp
YWxTdG9yYWdlRGVsZWdhdGU7CiAgICAgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbj4gbV9zZXNzaW9u
V2l0aG91dENyZWRlbnRpYWxTdG9yYWdlOwogICAgIFJldGFpblB0cjxXS05ldHdvcmtTZXNzaW9u
RGVsZWdhdGU+IG1fc2Vzc2lvbldpdGhvdXRDcmVkZW50aWFsU3RvcmFnZURlbGVnYXRlOworI2Vs
aWYgVVNFKFNPVVApCisgICAgSGFzaFNldDxOZXR3b3JrRGF0YVRhc2sqPiBtX2RhdGFUYXNrU2V0
OwogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1tIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbQppbmRleCBjZWRmYzM5Li5jNzVjNzJm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3Jr
U2Vzc2lvbkNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29h
L05ldHdvcmtTZXNzaW9uQ29jb2EubW0KQEAgLTQ3NSw3ICs0NzUsNyBAQCB2b2lkIE5ldHdvcmtT
ZXNzaW9uOjppbnZhbGlkYXRlQW5kQ2FuY2VsKCkKIH0KIAogCi1XZWJDb3JlOjpOZXR3b3JrU3Rv
cmFnZVNlc3Npb24mIE5ldHdvcmtTZXNzaW9uOjpuZXR3b3JrU3RvcmFnZVNlc3Npb24oKQorV2Vi
Q29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBOZXR3b3JrU2Vzc2lvbjo6bmV0d29ya1N0b3Jh
Z2VTZXNzaW9uKCkgY29uc3QKIHsKICAgICBhdXRvKiBzdG9yYWdlU2Vzc2lvbiA9IFdlYkNvcmU6
Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c3RvcmFnZVNlc3Npb24obV9zZXNzaW9uSUQpOwogICAg
IFJFTEVBU0VfQVNTRVJUKHN0b3JhZ2VTZXNzaW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5YTdhY2YKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAu
Y3BwCkBAIC0wLDAgKzEsMTEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBJZ2FsaWEg
Uy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTmV0d29ya0Rh
dGFUYXNrLmgiCisKKyNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiRG93bmxv
YWQuaCIKKyNpbmNsdWRlICJEb3dubG9hZFNvdXBFcnJvcnMuaCIKKyNpbmNsdWRlICJOZXR3b3Jr
TG9hZC5oIgorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzLmgiCisjaW5jbHVkZSAiTmV0d29ya1Nl
c3Npb24uaCIKKyNpbmNsdWRlICJXZWJFcnJvcnMuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0F1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9IVFRQUGFyc2Vycy5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9TaGFyZWRCdWZmZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NvdXBOZXR3b3JrU2Vzc2lv
bi5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIGNvbnN0IHNpemVfdCBnRGVmYXVs
dFJlYWRCdWZmZXJTaXplID0gODE5MjsKKworTmV0d29ya0RhdGFUYXNrOjpOZXR3b3JrRGF0YVRh
c2soTmV0d29ya1Nlc3Npb24mIHNlc3Npb24sIE5ldHdvcmtEYXRhVGFza0NsaWVudCYgY2xpZW50
LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3RXaXRoQ3JlZGVudGlhbHMsIFN0b3JlZENy
ZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzLCBDb250ZW50U25pZmZpbmdQb2xpY3kgc2hvdWxk
Q29udGVudFNuaWZmLCBib29sIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJl
Y3QpCisgICAgOiBtX2ZhaWx1cmVUaW1lcigqdGhpcywgJk5ldHdvcmtEYXRhVGFzazo6ZmFpbHVy
ZVRpbWVyRmlyZWQpCisgICAgLCBtX3Nlc3Npb24oJnNlc3Npb24pCisgICAgLCBtX2NsaWVudCgm
Y2xpZW50KQorICAgICwgbV9zdG9yZWRDcmVkZW50aWFscyhzdG9yZWRDcmVkZW50aWFscykKKyAg
ICAsIG1fbGFzdEhUVFBNZXRob2QocmVxdWVzdFdpdGhDcmVkZW50aWFscy5odHRwTWV0aG9kKCkp
CisgICAgLCBtX2ZpcnN0UmVxdWVzdChyZXF1ZXN0V2l0aENyZWRlbnRpYWxzKQorICAgICwgbV9z
aG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KHNob3VsZENsZWFyUmVmZXJy
ZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpCisgICAgLCBtX3Nob3VsZENvbnRlbnRTbmlmZihzaG91
bGRDb250ZW50U25pZmYpCisgICAgLCBtX3RpbWVvdXRTb3VyY2UoUnVuTG9vcDo6bWFpbigpLCB0
aGlzLCAmTmV0d29ya0RhdGFUYXNrOjp0aW1lb3V0RmlyZWQpCit7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKworICAgIG1fc2Vzc2lvbi0+bV9kYXRhVGFza1NldC5hZGQodGhpcyk7CisK
KyAgICBpZiAoIXJlcXVlc3RXaXRoQ3JlZGVudGlhbHMudXJsKCkuaXNWYWxpZCgpKSB7CisgICAg
ICAgIHNjaGVkdWxlRmFpbHVyZShJbnZhbGlkVVJMRmFpbHVyZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoIXBvcnRBbGxvd2VkKHJlcXVlc3RXaXRoQ3JlZGVudGlhbHMudXJs
KCkpKSB7CisgICAgICAgIHNjaGVkdWxlRmFpbHVyZShCbG9ja2VkRmFpbHVyZSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIHJlcXVlc3QgPSByZXF1ZXN0V2l0aENyZWRlbnRp
YWxzOworICAgIGlmIChyZXF1ZXN0LnVybCgpLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkgewor
I2lmIEVOQUJMRShXRUJfVElNSU5HKQorICAgICAgICBtX3N0YXJ0VGltZSA9IG1vbm90b25pY2Fs
bHlJbmNyZWFzaW5nVGltZU1TKCk7CisjZW5kaWYKKyAgICAgICAgYXV0byB1cmwgPSByZXF1ZXN0
LnVybCgpOworICAgICAgICBpZiAobV9zdG9yZWRDcmVkZW50aWFscyA9PSBBbGxvd1N0b3JlZENy
ZWRlbnRpYWxzKSB7CisgICAgICAgICAgICBtX3VzZXIgPSB1cmwudXNlcigpOworICAgICAgICAg
ICAgbV9wYXNzd29yZCA9IHVybC5wYXNzKCk7CisgICAgICAgICAgICByZXF1ZXN0LnJlbW92ZUNy
ZWRlbnRpYWxzKCk7CisKKyAgICAgICAgICAgIGlmIChtX3VzZXIuaXNFbXB0eSgpICYmIG1fcGFz
c3dvcmQuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIG1faW5pdGlhbENyZWRlbnRpYWwgPSBt
X3Nlc3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpLmNyZWRlbnRpYWxTdG9yYWdlKCkuZ2V0
KHJlcXVlc3QudXJsKCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc2Vz
c2lvbi0+bmV0d29ya1N0b3JhZ2VTZXNzaW9uKCkuY3JlZGVudGlhbFN0b3JhZ2UoKS5zZXQoQ3Jl
ZGVudGlhbChtX3VzZXIsIG1fcGFzc3dvcmQsIENyZWRlbnRpYWxQZXJzaXN0ZW5jZU5vbmUpLCBy
ZXF1ZXN0LnVybCgpKTsKKyAgICAgICAgfQorICAgICAgICBhcHBseUF1dGhlbnRpY2F0aW9uVG9S
ZXF1ZXN0KHJlcXVlc3QpOworICAgIH0KKyAgICBjcmVhdGVSZXF1ZXN0KHJlcXVlc3QpOworfQor
CitOZXR3b3JrRGF0YVRhc2s6On5OZXR3b3JrRGF0YVRhc2soKQoreworICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKCFtX2NsaWVudCk7CisgICAgY2xlYXJSZXF1ZXN0KCk7
CisgICAgbV9zZXNzaW9uLT5tX2RhdGFUYXNrU2V0LnJlbW92ZSh0aGlzKTsKK30KKwordm9pZCBO
ZXR3b3JrRGF0YVRhc2s6OnNjaGVkdWxlRmFpbHVyZShGYWlsdXJlVHlwZSB0eXBlKQoreworICAg
IEFTU0VSVCh0eXBlICE9IE5vRmFpbHVyZSk7CisgICAgbV9zY2hlZHVsZWRGYWlsdXJlVHlwZSA9
IHR5cGU7CisgICAgbV9mYWlsdXJlVGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCit2b2lkIE5l
dHdvcmtEYXRhVGFzazo6ZmFpbHVyZVRpbWVyRmlyZWQoKQoreworICAgIFJlZlB0cjxOZXR3b3Jr
RGF0YVRhc2s+IHByb3RlY3RlZFRoaXModGhpcyk7CisKKyAgICBzd2l0Y2ggKG1fc2NoZWR1bGVk
RmFpbHVyZVR5cGUpIHsKKyAgICBjYXNlIEJsb2NrZWRGYWlsdXJlOgorICAgICAgICBtX3NjaGVk
dWxlZEZhaWx1cmVUeXBlID0gTm9GYWlsdXJlOworICAgICAgICBpZiAobV9jbGllbnQpCisgICAg
ICAgICAgICBtX2NsaWVudC0+d2FzQmxvY2tlZCgpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBJbnZhbGlkVVJMRmFpbHVyZToKKyAgICAgICAgbV9zY2hlZHVsZWRGYWlsdXJlVHlwZSA9IE5v
RmFpbHVyZTsKKyAgICAgICAgaWYgKG1fY2xpZW50KQorICAgICAgICAgICAgbV9jbGllbnQtPmNh
bm5vdFNob3dVUkwoKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTm9GYWlsdXJlOgorICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitTdHJpbmcgTmV0d29ya0RhdGFUYXNrOjpzdWdnZXN0
ZWRGaWxlbmFtZSgpCit7CisgICAgaWYgKCFtX3N1Z2dlc3RlZEZpbGVuYW1lLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIG1fc3VnZ2VzdGVkRmlsZW5hbWU7CisKKyAgICBTdHJpbmcgc3VnZ2Vz
dGVkRmlsZW5hbWUgPSBtX3Jlc3BvbnNlLnN1Z2dlc3RlZEZpbGVuYW1lKCk7CisgICAgaWYgKCFz
dWdnZXN0ZWRGaWxlbmFtZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBzdWdnZXN0ZWRGaWxl
bmFtZTsKKworICAgIFVSTCB1cmwgPSBtX3Jlc3BvbnNlLnVybCgpOworICAgIHVybC5zZXRRdWVy
eShTdHJpbmcoKSk7CisgICAgdXJsLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOworICAgIHJl
dHVybiBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXModXJsLmxhc3RQYXRoQ29tcG9uZW50KCkpOwor
fQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6c2V0U3VnZ2VzdGVkRmlsZW5hbWUoY29uc3QgU3Ry
aW5nJiBzdWdnZXN0ZWROYW1lKQoreworICAgIG1fc3VnZ2VzdGVkRmlsZW5hbWUgPSBzdWdnZXN0
ZWROYW1lOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6c2V0UGVuZGluZ0Rvd25sb2FkTG9j
YXRpb24oY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFu
ZGxlJiwgYm9vbCBhbGxvd092ZXJ3cml0ZSkKK3sKKyAgICBtX3BlbmRpbmdEb3dubG9hZExvY2F0
aW9uID0gZmlsZW5hbWU7CisgICAgbV9hbGxvd092ZXJ3cml0ZURvd25sb2FkID0gYWxsb3dPdmVy
d3JpdGU7Cit9CisKK2Jvb2wgTmV0d29ya0RhdGFUYXNrOjphbGxvd3NTcGVjaWZpY0hUVFBTQ2Vy
dGlmaWNhdGVGb3JIb3N0KGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikKK3sKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpjcmVhdGVSZXF1ZXN0KGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBHVW5pcXVlUHRyPFNvdXBVUkk+
IHNvdXBVUkkgPSByZXF1ZXN0LmNyZWF0ZVNvdXBVUkkoKTsKKyAgICBpZiAoIXNvdXBVUkkpIHsK
KyAgICAgICAgc2NoZWR1bGVGYWlsdXJlKEludmFsaWRVUkxGYWlsdXJlKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIEdSZWZQdHI8U291cFJlcXVlc3Q+IHNvdXBSZXF1ZXN0ID0gYWRv
cHRHUmVmKHNvdXBfc2Vzc2lvbl9yZXF1ZXN0X3VyaShtX3Nlc3Npb24tPnNvdXBTZXNzaW9uKCks
IHNvdXBVUkkuZ2V0KCksIG51bGxwdHIpKTsKKyAgICBpZiAoIXNvdXBSZXF1ZXN0KSB7CisgICAg
ICAgIHNjaGVkdWxlRmFpbHVyZShJbnZhbGlkVVJMRmFpbHVyZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICByZXF1ZXN0LnVwZGF0ZVNvdXBSZXF1ZXN0KHNvdXBSZXF1ZXN0LmdldCgp
KTsKKworICAgIGlmICghcmVxdWVzdC51cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpIHsK
KyAgICAgICAgbV9zb3VwUmVxdWVzdCA9IFdURk1vdmUoc291cFJlcXVlc3QpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgLy8gSFRUUCByZXF1ZXN0LgorICAgIEdSZWZQdHI8U291cE1l
c3NhZ2U+IHNvdXBNZXNzYWdlID0gYWRvcHRHUmVmKHNvdXBfcmVxdWVzdF9odHRwX2dldF9tZXNz
YWdlKFNPVVBfUkVRVUVTVF9IVFRQKHNvdXBSZXF1ZXN0LmdldCgpKSkpOworICAgIGlmICghc291
cE1lc3NhZ2UpIHsKKyAgICAgICAgc2NoZWR1bGVGYWlsdXJlKEludmFsaWRVUkxGYWlsdXJlKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHJlcXVlc3QudXBkYXRlU291cE1lc3NhZ2Uo
c291cE1lc3NhZ2UuZ2V0KCkpOworICAgIGlmIChtX3Nob3VsZENvbnRlbnRTbmlmZiA9PSBEb05v
dFNuaWZmQ29udGVudCkKKyAgICAgICAgc291cF9tZXNzYWdlX2Rpc2FibGVfZmVhdHVyZShzb3Vw
TWVzc2FnZS5nZXQoKSwgU09VUF9UWVBFX0NPTlRFTlRfU05JRkZFUik7CisgICAgaWYgKG1fdXNl
ci5pc0VtcHR5KCkgJiYgbV9wYXNzd29yZC5pc0VtcHR5KCkgJiYgbV9zdG9yZWRDcmVkZW50aWFs
cyA9PSBEb05vdEFsbG93U3RvcmVkQ3JlZGVudGlhbHMpIHsKKyAgICAgICAgLy8gSW4gY2FzZSBj
cmVkZW50aWFsIGlzIG5vdCBhdmFpbGFibGUgYW5kIGNyZWRlbnRpYWwgc3RvcmFnZSBzaG91bGQg
bm90IHRvIGJlIHVzZWQsCisgICAgICAgIC8vIGRpc2FibGUgYXV0aGVudGljYXRpb24gbWFuYWdl
ciBzbyB0aGF0IGNyZWRlbnRpYWxzIHN0b3JlZCBpbiBsaWJzb3VwIGFyZSBub3QgdXNlZC4KKyAg
ICAgICAgc291cF9tZXNzYWdlX2Rpc2FibGVfZmVhdHVyZShzb3VwTWVzc2FnZS5nZXQoKSwgU09V
UF9UWVBFX0FVVEhfTUFOQUdFUik7CisgICAgfQorCisgICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUg
YW4gQWNjZXB0IGhlYWRlciBmb3Igc3VicmVzb3VyY2VzOyBzb21lIHNpdGVzIHdhbnQgdGhpcyB0
byBzZXJ2ZSBzb21lIG9mIHRoZWlyIHN1YnJlc291cmNlcy4KKyAgICBpZiAoIXNvdXBfbWVzc2Fn
ZV9oZWFkZXJzX2dldF9vbmUoc291cE1lc3NhZ2UtPnJlcXVlc3RfaGVhZGVycywgIkFjY2VwdCIp
KQorICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQoc291cE1lc3NhZ2UtPnJlcXVl
c3RfaGVhZGVycywgIkFjY2VwdCIsICIqLyoiKTsKKworICAgIC8vIEluIHRoZSBjYXNlIG9mIFhI
UiAuc2VuZCgpIGFuZCAuc2VuZCgiIikgZXhwbGljaXRseSB0ZWxsIGxpYnNvdXAgdG8gc2VuZCBh
IHplcm8gY29udGVudC1sZW5naHQgaGVhZGVyCisgICAgLy8gZm9yIGNvbnNpc3RlbmN5IHdpdGgg
b3RoZXIgVUEgaW1wbGVtZW50YXRpb25zIGxpa2UgRmlyZWZveC4gSXQncyBkb25lIGluIHRoZSBi
YWNrZW5kIGhlcmUgaW5zdGVhZCBvZgorICAgIC8vIGluIFhIUiBjb2RlIHNpbmNlIGluIFhIUiBD
T1JTIGNoZWNraW5nIHByZXZlbnRzIHVzIGZyb20gdGhpcyBraW5kIG9mIGxhdGUgaGVhZGVyIG1h
bmlwdWxhdGlvbi4KKyAgICBpZiAoKHNvdXBNZXNzYWdlLT5tZXRob2QgPT0gU09VUF9NRVRIT0Rf
UE9TVCB8fCBzb3VwTWVzc2FnZS0+bWV0aG9kID09IFNPVVBfTUVUSE9EX1BVVCkgJiYgIXNvdXBN
ZXNzYWdlLT5yZXF1ZXN0X2JvZHktPmxlbmd0aCkKKyAgICAgICAgc291cF9tZXNzYWdlX2hlYWRl
cnNfc2V0X2NvbnRlbnRfbGVuZ3RoKHNvdXBNZXNzYWdlLT5yZXF1ZXN0X2hlYWRlcnMsIDApOwor
CisgICAgdW5zaWduZWQgZmxhZ3MgPSBTT1VQX01FU1NBR0VfTk9fUkVESVJFQ1Q7CisgICAgc291
cF9tZXNzYWdlX3NldF9mbGFncyhzb3VwTWVzc2FnZS5nZXQoKSwgc3RhdGljX2Nhc3Q8U291cE1l
c3NhZ2VGbGFncz4oc291cF9tZXNzYWdlX2dldF9mbGFncyhzb3VwTWVzc2FnZS5nZXQoKSkgfCBm
bGFncykpOworCisjaWYgU09VUF9DSEVDS19WRVJTSU9OKDIsIDQzLCAxKQorICAgIHNvdXBfbWVz
c2FnZV9zZXRfcHJpb3JpdHkoc291cE1lc3NhZ2UuZ2V0KCksIHRvU291cE1lc3NhZ2VQcmlvcml0
eShyZXF1ZXN0LnByaW9yaXR5KCkpKTsKKyNlbmRpZgorCisgICAgbV9zb3VwUmVxdWVzdCA9IFdU
Rk1vdmUoc291cFJlcXVlc3QpOworICAgIG1fc291cE1lc3NhZ2UgPSBXVEZNb3ZlKHNvdXBNZXNz
YWdlKTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9zb3VwTWVzc2FnZS5nZXQoKSwgIm5vdGlm
eTo6dGxzLWVycm9ycyIsIEdfQ0FMTEJBQ0sodGxzRXJyb3JzQ2hhbmdlZENhbGxiYWNrKSwgdGhp
cyk7CisgICAgZ19zaWduYWxfY29ubmVjdChtX3NvdXBNZXNzYWdlLmdldCgpLCAiZ290LWhlYWRl
cnMiLCBHX0NBTExCQUNLKGdvdEhlYWRlcnNDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFs
X2Nvbm5lY3QobV9zb3VwTWVzc2FnZS5nZXQoKSwgIndyb3RlLWJvZHktZGF0YSIsIEdfQ0FMTEJB
Q0sod3JvdGVCb2R5RGF0YUNhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdCht
X3Nlc3Npb24tPnNvdXBTZXNzaW9uKCksICJhdXRoZW50aWNhdGUiLCAgR19DQUxMQkFDSyhhdXRo
ZW50aWNhdGVDYWxsYmFjayksIHRoaXMpOworI2lmIEVOQUJMRShXRUJfVElNSU5HKQorICAgIGdf
c2lnbmFsX2Nvbm5lY3QobV9zb3VwTWVzc2FnZS5nZXQoKSwgIm5ldHdvcmstZXZlbnQiLCBHX0NB
TExCQUNLKG5ldHdvcmtFdmVudENhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVj
dChtX3NvdXBNZXNzYWdlLmdldCgpLCAicmVzdGFydGVkIiwgR19DQUxMQkFDSyhyZXN0YXJ0ZWRD
YWxsYmFjayksIHRoaXMpOworI2lmIFNPVVBfQ0hFQ0tfVkVSU0lPTigyLCA0OSwgOTEpCisgICAg
Z19zaWduYWxfY29ubmVjdChtX3NvdXBNZXNzYWdlLmdldCgpLCAic3RhcnRpbmciLCBHX0NBTExC
QUNLKHN0YXJ0aW5nQ2FsbGJhY2spLCB0aGlzKTsKKyNlbHNlCisgICAgZ19zaWduYWxfY29ubmVj
dChtX3Nlc3Npb24tPnNvdXBTZXNzaW9uKCksICJyZXF1ZXN0LXN0YXJ0ZWQiLCBHX0NBTExCQUNL
KHJlcXVlc3RTdGFydGVkQ2FsbGJhY2spLCB0aGlzKTsKKyNlbmRpZgorI2VuZGlmCit9CisKK3Zv
aWQgTmV0d29ya0RhdGFUYXNrOjpjbGVhclJlcXVlc3QoKQoreworICAgIGlmIChtX3N0YXRlID09
IFN0YXRlOjpDb21wbGV0ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc3RhdGUgPSBTdGF0
ZTo6Q29tcGxldGVkOworCisgICAgc3RvcFRpbWVvdXQoKTsKKyAgICBtX3BlbmRpbmdSZXN1bHQg
PSBudWxscHRyOworICAgIG1fc291cFJlcXVlc3QgPSBudWxscHRyOworICAgIG1faW5wdXRTdHJl
YW0gPSBudWxscHRyOworICAgIG1fbXVsdGlwYXJ0SW5wdXRTdHJlYW0gPSBudWxscHRyOworICAg
IG1fZG93bmxvYWRPdXRwdXRTdHJlYW0gPSBudWxscHRyOworICAgIGdfY2FuY2VsbGFibGVfY2Fu
Y2VsKG1fY2FuY2VsbGFibGUuZ2V0KCkpOworICAgIG1fY2FuY2VsbGFibGUgPSBudWxscHRyOwor
ICAgIGlmIChtX3NvdXBNZXNzYWdlKSB7CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nv
bm5lY3RfbWF0Y2hlZChtX3NvdXBNZXNzYWdlLmdldCgpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAw
LCAwLCBudWxscHRyLCBudWxscHRyLCB0aGlzKTsKKyAgICAgICAgc291cF9zZXNzaW9uX2NhbmNl
bF9tZXNzYWdlKG1fc2Vzc2lvbi0+c291cFNlc3Npb24oKSwgbV9zb3VwTWVzc2FnZS5nZXQoKSwg
U09VUF9TVEFUVVNfQ0FOQ0VMTEVEKTsKKyAgICAgICAgbV9zb3VwTWVzc2FnZSA9IG51bGxwdHI7
CisgICAgfQorICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3Nlc3Np
b24tPnNvdXBTZXNzaW9uKCksIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIG51bGxwdHIsIG51
bGxwdHIsIHRoaXMpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6cmVzdW1lKCkKK3sKKyAg
ICBBU1NFUlQobV9zdGF0ZSAhPSBTdGF0ZTo6UnVubmluZyk7CisgICAgaWYgKG1fc3RhdGUgPT0g
U3RhdGU6OkNhbmNlbGluZyB8fCBtX3N0YXRlID09IFN0YXRlOjpDb21wbGV0ZWQpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fc3RhdGUgPSBTdGF0ZTo6UnVubmluZzsKKworICAgIGlmIChtX3Nj
aGVkdWxlZEZhaWx1cmVUeXBlICE9IE5vRmFpbHVyZSkgeworICAgICAgICBBU1NFUlQobV9mYWls
dXJlVGltZXIuaXNBY3RpdmUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzdGFy
dFRpbWVvdXQoKTsKKworICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2s+IHByb3RlY3RlZFRoaXMo
dGhpcyk7CisgICAgaWYgKG1fc291cFJlcXVlc3QgJiYgIW1fY2FuY2VsbGFibGUpIHsKKyAgICAg
ICAgbV9jYW5jZWxsYWJsZSA9IGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKTsKKyAgICAg
ICAgc291cF9yZXF1ZXN0X3NlbmRfYXN5bmMobV9zb3VwUmVxdWVzdC5nZXQoKSwgbV9jYW5jZWxs
YWJsZS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihzZW5kUmVx
dWVzdENhbGxiYWNrKSwgcHJvdGVjdGVkVGhpcy5sZWFrUmVmKCkpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKG1fcGVuZGluZ1Jlc3VsdCkgeworICAgICAgICBHUmVmUHRyPEdB
c3luY1Jlc3VsdD4gcGVuZGluZ1Jlc3VsdCA9IFdURk1vdmUobV9wZW5kaW5nUmVzdWx0KTsKKyAg
ICAgICAgaWYgKG1faW5wdXRTdHJlYW0pCisgICAgICAgICAgICByZWFkQ2FsbGJhY2sobV9pbnB1
dFN0cmVhbS5nZXQoKSwgcGVuZGluZ1Jlc3VsdC5nZXQoKSwgcHJvdGVjdGVkVGhpcy5sZWFrUmVm
KCkpOworICAgICAgICBlbHNlIGlmIChtX211bHRpcGFydElucHV0U3RyZWFtKQorICAgICAgICAg
ICAgcmVxdWVzdE5leHRQYXJ0Q2FsbGJhY2sobV9tdWx0aXBhcnRJbnB1dFN0cmVhbS5nZXQoKSwg
cGVuZGluZ1Jlc3VsdC5nZXQoKSwgcHJvdGVjdGVkVGhpcy5sZWFrUmVmKCkpOworICAgICAgICBl
bHNlIGlmIChtX3NvdXBSZXF1ZXN0KQorICAgICAgICAgICAgc2VuZFJlcXVlc3RDYWxsYmFjayht
X3NvdXBSZXF1ZXN0LmdldCgpLCBwZW5kaW5nUmVzdWx0LmdldCgpLCBwcm90ZWN0ZWRUaGlzLmxl
YWtSZWYoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIH0KK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2s6OnN1c3BlbmQoKQoreworICAgIEFT
U0VSVChtX3N0YXRlICE9IFN0YXRlOjpTdXNwZW5kZWQpOworICAgIGlmIChtX3N0YXRlID09IFN0
YXRlOjpDYW5jZWxpbmcgfHwgbV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGxldGVkKQorICAgICAgICBy
ZXR1cm47CisgICAgbV9zdGF0ZSA9IFN0YXRlOjpTdXNwZW5kZWQ7CisKKyAgICBzdG9wVGltZW91
dCgpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6Y2FuY2VsKCkKK3sKKyAgICBpZiAobV9z
dGF0ZSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9zdGF0ZSA9IFN0YXRlOjpDYW5jZWxpbmc7CisKKyAg
ICBpZiAobV9zb3VwTWVzc2FnZSkKKyAgICAgICAgc291cF9zZXNzaW9uX2NhbmNlbF9tZXNzYWdl
KG1fc2Vzc2lvbi0+c291cFNlc3Npb24oKSwgbV9zb3VwTWVzc2FnZS5nZXQoKSwgU09VUF9TVEFU
VVNfQ0FOQ0VMTEVEKTsKKworICAgIGdfY2FuY2VsbGFibGVfY2FuY2VsKG1fY2FuY2VsbGFibGUu
Z2V0KCkpOworCisgICAgaWYgKGlzRG93bmxvYWQoKSkKKyAgICAgICAgY2xlYW5Eb3dubG9hZEZp
bGVzKCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjppbnZhbGlkYXRlQW5kQ2FuY2VsKCkK
K3sKKyAgICBjYW5jZWwoKTsKKyAgICBjbGVhclJlcXVlc3QoKTsKK30KKworTmV0d29ya0RhdGFU
YXNrOjpTdGF0ZSBOZXR3b3JrRGF0YVRhc2s6OnN0YXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9zdGF0ZTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2s6OnRpbWVvdXRGaXJlZCgpCit7Cisg
ICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCBtX3N0YXRlID09IFN0YXRlOjpD
b21wbGV0ZWQgfHwgIW1fY2xpZW50KSB7CisgICAgICAgIGNsZWFyUmVxdWVzdCgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4gcHJvdGVjdGVk
VGhpcyh0aGlzKTsKKyAgICBpbnZhbGlkYXRlQW5kQ2FuY2VsKCk7CisgICAgbV9jbGllbnQtPmRp
ZENvbXBsZXRlV2l0aEVycm9yKFJlc291cmNlRXJyb3I6OnRpbWVvdXRFcnJvcihtX2ZpcnN0UmVx
dWVzdC51cmwoKSkpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6c3RhcnRUaW1lb3V0KCkK
K3sKKyAgICBpZiAobV9maXJzdFJlcXVlc3QudGltZW91dEludGVydmFsKCkgPiAwKQorICAgICAg
ICBtX3RpbWVvdXRTb3VyY2Uuc3RhcnRPbmVTaG90KG1fZmlyc3RSZXF1ZXN0LnRpbWVvdXRJbnRl
cnZhbCgpKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2s6OnN0b3BUaW1lb3V0KCkKK3sKKyAg
ICBtX3RpbWVvdXRTb3VyY2Uuc3RvcCgpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6c2Vu
ZFJlcXVlc3RDYWxsYmFjayhTb3VwUmVxdWVzdCogc291cFJlcXVlc3QsIEdBc3luY1Jlc3VsdCog
cmVzdWx0LCBOZXR3b3JrRGF0YVRhc2sqIHRhc2spCit7CisgICAgUmVmUHRyPE5ldHdvcmtEYXRh
VGFzaz4gcHJvdGVjdGVkVGhpcyA9IGFkb3B0UmVmKHRhc2spOworICAgIGlmICh0YXNrLT5zdGF0
ZSgpID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgdGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q29tcGxl
dGVkIHx8ICF0YXNrLT5tX2NsaWVudCkgeworICAgICAgICB0YXNrLT5jbGVhclJlcXVlc3QoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBU1NFUlQoc291cFJlcXVlc3QgPT0gdGFzay0+
bV9zb3VwUmVxdWVzdC5nZXQoKSk7CisKKyAgICBpZiAodGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6
U3VzcGVuZGVkKSB7CisgICAgICAgIEFTU0VSVCghdGFzay0+bV9wZW5kaW5nUmVzdWx0KTsKKyAg
ICAgICAgdGFzay0+bV9wZW5kaW5nUmVzdWx0ID0gcmVzdWx0OworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOworICAgIEdSZWZQdHI8R0lu
cHV0U3RyZWFtPiBpbnB1dFN0cmVhbSA9IGFkb3B0R1JlZihzb3VwX3JlcXVlc3Rfc2VuZF9maW5p
c2goc291cFJlcXVlc3QsIHJlc3VsdCwgJmVycm9yLm91dFB0cigpKSk7CisgICAgaWYgKGVycm9y
KQorICAgICAgICB0YXNrLT5kaWRGYWlsKFJlc291cmNlRXJyb3I6Omh0dHBFcnJvcih0YXNrLT5t
X3NvdXBNZXNzYWdlLmdldCgpLCBlcnJvci5nZXQoKSwgc291cFJlcXVlc3QpKTsKKyAgICBlbHNl
CisgICAgICAgIHRhc2stPmRpZFNlbmRSZXF1ZXN0KFdURk1vdmUoaW5wdXRTdHJlYW0pKTsKK30K
Kwordm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZFNlbmRSZXF1ZXN0KEdSZWZQdHI8R0lucHV0U3Ry
ZWFtPiYmIGlucHV0U3RyZWFtKQoreworICAgIGlmIChtX3NvdXBNZXNzYWdlKSB7CisgICAgICAg
IGlmIChtX3Nob3VsZENvbnRlbnRTbmlmZiA9PSBTbmlmZkNvbnRlbnQgJiYgbV9zb3VwTWVzc2Fn
ZS0+c3RhdHVzX2NvZGUgIT0gU09VUF9TVEFUVVNfTk9UX01PRElGSUVEKQorICAgICAgICAgICAg
bV9yZXNwb25zZS5zZXRTbmlmZmVkQ29udGVudFR5cGUoc291cF9yZXF1ZXN0X2dldF9jb250ZW50
X3R5cGUobV9zb3VwUmVxdWVzdC5nZXQoKSkpOworICAgICAgICBtX3Jlc3BvbnNlLnVwZGF0ZUZy
b21Tb3VwTWVzc2FnZShtX3NvdXBNZXNzYWdlLmdldCgpKTsKKworICAgICAgICBpZiAoc2hvdWxk
U3RhcnRIVFRQUmVkaXJlY3Rpb24oKSkgeworICAgICAgICAgICAgbV9pbnB1dFN0cmVhbSA9IFdU
Rk1vdmUoaW5wdXRTdHJlYW0pOworICAgICAgICAgICAgc2tpcElucHV0U3RyZWFtRm9yUmVkaXJl
Y3Rpb24oKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICht
X3Jlc3BvbnNlLmlzTXVsdGlwYXJ0KCkpCisgICAgICAgICAgICBtX211bHRpcGFydElucHV0U3Ry
ZWFtID0gYWRvcHRHUmVmKHNvdXBfbXVsdGlwYXJ0X2lucHV0X3N0cmVhbV9uZXcobV9zb3VwTWVz
c2FnZS5nZXQoKSwgaW5wdXRTdHJlYW0uZ2V0KCkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgbV9pbnB1dFN0cmVhbSA9IFdURk1vdmUoaW5wdXRTdHJlYW0pOworCisjaWYgRU5BQkxFKFdF
Ql9USU1JTkcpCisgICAgICAgIG1fcmVzcG9uc2UubmV0d29ya0xvYWRUaW1pbmcoKS5yZXNwb25z
ZVN0YXJ0ID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lTVMoKSAtIG1fc3RhcnRUaW1lOwor
I2VuZGlmCisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9yZXNwb25zZS5zZXRVUkwobV9maXJzdFJl
cXVlc3QudXJsKCkpOworICAgICAgICBjb25zdCBnY2hhciogY29udGVudFR5cGUgPSBzb3VwX3Jl
cXVlc3RfZ2V0X2NvbnRlbnRfdHlwZShtX3NvdXBSZXF1ZXN0LmdldCgpKTsKKyAgICAgICAgbV9y
ZXNwb25zZS5zZXRNaW1lVHlwZShleHRyYWN0TUlNRVR5cGVGcm9tTWVkaWFUeXBlKGNvbnRlbnRU
eXBlKSk7CisgICAgICAgIG1fcmVzcG9uc2Uuc2V0VGV4dEVuY29kaW5nTmFtZShleHRyYWN0Q2hh
cnNldEZyb21NZWRpYVR5cGUoY29udGVudFR5cGUpKTsKKyAgICAgICAgbV9yZXNwb25zZS5zZXRF
eHBlY3RlZENvbnRlbnRMZW5ndGgoc291cF9yZXF1ZXN0X2dldF9jb250ZW50X2xlbmd0aChtX3Nv
dXBSZXF1ZXN0LmdldCgpKSk7CisKKyAgICAgICAgbV9pbnB1dFN0cmVhbSA9IFdURk1vdmUoaW5w
dXRTdHJlYW0pOworICAgIH0KKworICAgIGRpZFJlY2VpdmVSZXNwb25zZSgpOworfQorCit2b2lk
IE5ldHdvcmtEYXRhVGFzazo6ZGlkUmVjZWl2ZVJlc3BvbnNlKCkKK3sKKyAgICBBU1NFUlQoIW1f
cmVzcG9uc2UuaXNOdWxsKCkpOworCisgICAgYXV0byByZXNwb25zZSA9IFJlc291cmNlUmVzcG9u
c2UobV9yZXNwb25zZSk7CisgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZU5ldHdvcmtT
ZXNzaW9uKFdURk1vdmUocmVzcG9uc2UpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYo
KnRoaXMpXShQb2xpY3lBY3Rpb24gcG9saWN5QWN0aW9uKSB7CisgICAgICAgIGlmIChtX3N0YXRl
ID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgbV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGxldGVkKSB7Cisg
ICAgICAgICAgICBjbGVhclJlcXVlc3QoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIHN3aXRjaCAocG9saWN5QWN0aW9uKSB7CisgICAgICAgIGNhc2UgUG9saWN5
QWN0aW9uOjpQb2xpY3lVc2U6CisgICAgICAgICAgICBpZiAobV9pbnB1dFN0cmVhbSkKKyAgICAg
ICAgICAgICAgICByZWFkKCk7CisgICAgICAgICAgICBlbHNlIGlmIChtX211bHRpcGFydElucHV0
U3RyZWFtKQorICAgICAgICAgICAgICAgIHJlcXVlc3ROZXh0UGFydCgpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBQb2xpY3lBY3Rpb246OlBvbGljeUlnbm9yZToKKyAgICAg
ICAgICAgIGNsZWFyUmVxdWVzdCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
UG9saWN5QWN0aW9uOjpQb2xpY3lEb3dubG9hZDoKKyAgICAgICAgICAgIGRvd25sb2FkKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0pOworfQorCit2b2lkIE5ldHdvcmtE
YXRhVGFzazo6dGxzRXJyb3JzQ2hhbmdlZENhbGxiYWNrKFNvdXBNZXNzYWdlKiBzb3VwTWVzc2Fn
ZSwgR1BhcmFtU3BlYyosIE5ldHdvcmtEYXRhVGFzayogdGFzaykKK3sKKyAgICBpZiAodGFzay0+
c3RhdGUoKSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNv
bXBsZXRlZCB8fCAhdGFzay0+bV9jbGllbnQpIHsKKyAgICAgICAgdGFzay0+Y2xlYXJSZXF1ZXN0
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQoc291cE1lc3NhZ2UgPT0g
dGFzay0+bV9zb3VwTWVzc2FnZS5nZXQoKSk7CisgICAgdGFzay0+dGxzRXJyb3JzQ2hhbmdlZCgp
OworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6dGxzRXJyb3JzQ2hhbmdlZCgpCit7CisgICAg
QVNTRVJUKG1fc291cFJlcXVlc3QpOworICAgIFNvdXBOZXR3b3JrU2Vzc2lvbjo6Y2hlY2tUTFNF
cnJvcnMobV9zb3VwUmVxdWVzdC5nZXQoKSwgbV9zb3VwTWVzc2FnZS5nZXQoKSwgW3RoaXNdIChj
b25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikgeworICAgICAgICBpZiAoZXJyb3IuaXNOdWxsKCkp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4g
cHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICAgICAgaW52YWxpZGF0ZUFuZENhbmNlbCgpOworICAg
ICAgICBtX2NsaWVudC0+ZGlkQ29tcGxldGVXaXRoRXJyb3IoZXJyb3IpOworICAgIH0pOworfQor
Cit2b2lkIE5ldHdvcmtEYXRhVGFzazo6YXBwbHlBdXRoZW50aWNhdGlvblRvUmVxdWVzdChSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgLy8gV2UgYWx3YXlzIHB1dCB0aGUgY3JlZGVu
dGlhbHMgaW50byB0aGUgVVJMLiBJbiB0aGUgQ29jYSBwb3J0IEhUVFAgZmFtaWx5IGNyZWRlbnRp
YWxzIGFyZSBhcHBsaWVkIGluCisgICAgLy8gdGhlIGRpZFJlY2VpdmVDaGFsbGVuZ2UgY2FsbGJh
Y2ssIGJ1dCBsaWJzb3VwIHJlcXVpcmVzIHVzIHRvIHVzZSB0aGlzIG1ldGhvZCB0byBvdmVycmlk
ZQorICAgIC8vIGFueSBwcmV2aW91c2x5IHJlbWVtYmVyZWQgY3JlZGVudGlhbHMuIEl0IGhhcyBp
dHMgb3duIHBlci1zZXNzaW9uIGNyZWRlbnRpYWwgc3RvcmFnZS4KKyAgICBhdXRvIHVybCA9IHJl
cXVlc3QudXJsKCk7CisgICAgaWYgKCFtX2luaXRpYWxDcmVkZW50aWFsLmlzRW1wdHkoKSkgewor
ICAgICAgICB1cmwuc2V0VXNlcihtX2luaXRpYWxDcmVkZW50aWFsLnVzZXIoKSk7CisgICAgICAg
IHVybC5zZXRQYXNzKG1faW5pdGlhbENyZWRlbnRpYWwucGFzc3dvcmQoKSk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgdXJsLnNldFVzZXIobV91c2VyKTsKKyAgICAgICAgdXJsLnNldFBhc3MobV9w
YXNzd29yZCk7CisgICAgfQorCisgICAgbV91c2VyID0gU3RyaW5nKCk7CisgICAgbV9wYXNzd29y
ZCA9IFN0cmluZygpOworCisgICAgcmVxdWVzdC5zZXRVUkwodXJsKTsKK30KKwordm9pZCBOZXR3
b3JrRGF0YVRhc2s6OmF1dGhlbnRpY2F0ZUNhbGxiYWNrKFNvdXBTZXNzaW9uKiBzZXNzaW9uLCBT
b3VwTWVzc2FnZSogc291cE1lc3NhZ2UsIFNvdXBBdXRoKiBzb3VwQXV0aCwgZ2Jvb2xlYW4gcmV0
cnlpbmcsIE5ldHdvcmtEYXRhVGFzayogdGFzaykKK3sKKyAgICBBU1NFUlQoc2Vzc2lvbiA9PSB0
YXNrLT5tX3Nlc3Npb24tPnNvdXBTZXNzaW9uKCkpOworICAgIGlmIChzb3VwTWVzc2FnZSAhPSB0
YXNrLT5tX3NvdXBNZXNzYWdlLmdldCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAodGFz
ay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6
OkNvbXBsZXRlZCB8fCAhdGFzay0+bV9jbGllbnQpIHsKKyAgICAgICAgdGFzay0+Y2xlYXJSZXF1
ZXN0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB0YXNrLT5hdXRoZW50aWNhdGUo
QXV0aGVudGljYXRpb25DaGFsbGVuZ2Uoc291cE1lc3NhZ2UsIHNvdXBBdXRoLCByZXRyeWluZykp
OworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNBdXRoZW50aWNhdGlvbkZhaWx1cmVTdGF0dXND
b2RlKGludCBodHRwU3RhdHVzQ29kZSkKK3sKKyAgICByZXR1cm4gaHR0cFN0YXR1c0NvZGUgPT0g
U09VUF9TVEFUVVNfUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQgfHwgaHR0cFN0YXR1c0Nv
ZGUgPT0gU09VUF9TVEFUVVNfVU5BVVRIT1JJWkVEOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFz
azo6YXV0aGVudGljYXRlKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiYgY2hhbGxlbmdlKQorewor
ICAgIEFTU0VSVChtX3NvdXBNZXNzYWdlKTsKKyAgICBpZiAobV9zdG9yZWRDcmVkZW50aWFscyA9
PSBBbGxvd1N0b3JlZENyZWRlbnRpYWxzKSB7CisgICAgICAgIGlmICghbV9pbml0aWFsQ3JlZGVu
dGlhbC5pc0VtcHR5KCkgfHwgY2hhbGxlbmdlLnByZXZpb3VzRmFpbHVyZUNvdW50KCkpIHsKKyAg
ICAgICAgICAgIC8vIFRoZSBzdG9yZWQgY3JlZGVudGlhbCB3YXNuJ3QgYWNjZXB0ZWQsIHN0b3Ag
dXNpbmcgaXQuIFRoZXJlIGlzIGEgcmFjZSBjb25kaXRpb24KKyAgICAgICAgICAgIC8vIGhlcmUs
IHNpbmNlIGEgZGlmZmVyZW50IGNyZWRlbnRpYWwgbWlnaHQgaGF2ZSBhbHJlYWR5IGJlZW4gc3Rv
cmVkIGJ5IGFub3RoZXIKKyAgICAgICAgICAgIC8vIE5ldHdvcmtEYXRhVGFzaywgYnV0IHRoZSBv
YnNlcnZhYmxlIGVmZmVjdCBzaG91bGQgYmUgdmVyeSBtaW5vciwgaWYgYW55LgorICAgICAgICAg
ICAgbV9zZXNzaW9uLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKS5jcmVkZW50aWFsU3RvcmFnZSgp
LnJlbW92ZShjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCkpOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKCFjaGFsbGVuZ2UucHJldmlvdXNGYWlsdXJlQ291bnQoKSkgeworICAgICAgICAgICAg
YXV0byBjcmVkZW50aWFsID0gbV9zZXNzaW9uLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKS5jcmVk
ZW50aWFsU3RvcmFnZSgpLmdldChjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCkpOworICAgICAg
ICAgICAgaWYgKCFjcmVkZW50aWFsLmlzRW1wdHkoKSAmJiBjcmVkZW50aWFsICE9IG1faW5pdGlh
bENyZWRlbnRpYWwpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoY3JlZGVudGlhbC5wZXJzaXN0
ZW5jZSgpID09IENyZWRlbnRpYWxQZXJzaXN0ZW5jZU5vbmUpOworCisgICAgICAgICAgICAgICAg
aWYgKGlzQXV0aGVudGljYXRpb25GYWlsdXJlU3RhdHVzQ29kZShjaGFsbGVuZ2UuZmFpbHVyZVJl
c3BvbnNlKCkuaHR0cFN0YXR1c0NvZGUoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gU3Rv
cmUgdGhlIGNyZWRlbnRpYWwgYmFjaywgcG9zc2libHkgYWRkaW5nIGl0IGFzIGEgZGVmYXVsdCBm
b3IgdGhpcyBkaXJlY3RvcnkuCisgICAgICAgICAgICAgICAgICAgIG1fc2Vzc2lvbi0+bmV0d29y
a1N0b3JhZ2VTZXNzaW9uKCkuY3JlZGVudGlhbFN0b3JhZ2UoKS5zZXQoY3JlZGVudGlhbCwgY2hh
bGxlbmdlLnByb3RlY3Rpb25TcGFjZSgpLCBjaGFsbGVuZ2UuZmFpbHVyZVJlc3BvbnNlKCkudXJs
KCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzb3VwX2F1dGhfYXV0aGVu
dGljYXRlKGNoYWxsZW5nZS5zb3VwQXV0aCgpLCBjcmVkZW50aWFsLnVzZXIoKS51dGY4KCkuZGF0
YSgpLCBjcmVkZW50aWFsLnBhc3N3b3JkKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgc291cF9z
ZXNzaW9uX3BhdXNlX21lc3NhZ2UobV9zZXNzaW9uLT5zb3VwU2Vzc2lvbigpLCBtX3NvdXBNZXNz
YWdlLmdldCgpKTsKKworICAgIC8vIFdlIGNvdWxkIGFsc28gZG8gdGhpcyBiZWZvcmUgd2UgZXZl
biBzdGFydCB0aGUgcmVxdWVzdCwgYnV0IHRoYXQgd291bGQgYmUgYXQgdGhlIGV4cGVuc2UKKyAg
ICAvLyBvZiBhbGwgcmVxdWVzdCBsYXRlbmN5LCB2ZXJzdXMgYSBvbmUtdGltZSBsYXRlbmN5IGZv
ciB0aGUgc21hbGwgc3Vic2V0IG9mIHJlcXVlc3RzIHRoYXQKKyAgICAvLyB1c2UgSFRUUCBhdXRo
ZW50aWNhdGlvbi4gSW4gdGhlIGVuZCwgdGhpcyBkb2Vzbid0IG1hdHRlciBtdWNoLCBiZWNhdXNl
IHBlcnNpc3RlbnQgY3JlZGVudGlhbHMKKyAgICAvLyB3aWxsIGJlY29tZSBzZXNzaW9uIGNyZWRl
bnRpYWxzIGFmdGVyIHRoZSBmaXJzdCB1c2UuCisgICAgaWYgKG1fc3RvcmVkQ3JlZGVudGlhbHMg
PT0gQWxsb3dTdG9yZWRDcmVkZW50aWFscykgeworICAgICAgICBhdXRvIHByb3RlY3Rpb25TcGFj
ZSA9IGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKTsKKyAgICAgICAgbV9zZXNzaW9uLT5uZXR3
b3JrU3RvcmFnZVNlc3Npb24oKS5nZXRDcmVkZW50aWFsRnJvbVBlcnNpc3RlbnRTdG9yYWdlKHBy
b3RlY3Rpb25TcGFjZSwKKyAgICAgICAgICAgIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJl
ZigqdGhpcyksIGF1dGhDaGFsbGVuZ2UgPSBXVEZNb3ZlKGNoYWxsZW5nZSldIChDcmVkZW50aWFs
JiYgY3JlZGVudGlhbCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgaWYgKG1fc3RhdGUgPT0g
U3RhdGU6OkNhbmNlbGluZyB8fCBtX3N0YXRlID09IFN0YXRlOjpDb21wbGV0ZWQgfHwgIW1fY2xp
ZW50KSB7CisgICAgICAgICAgICAgICAgICAgIGNsZWFyUmVxdWVzdCgpOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYXV0
aENoYWxsZW5nZS5zZXRQcm9wb3NlZENyZWRlbnRpYWwoV1RGTW92ZShjcmVkZW50aWFsKSk7Cisg
ICAgICAgICAgICAgICAgY29udGludWVBdXRoZW50aWNhdGUoV1RGTW92ZShhdXRoQ2hhbGxlbmdl
KSk7CisgICAgICAgIH0pOworICAgIH0gZWxzZQorICAgICAgICBjb250aW51ZUF1dGhlbnRpY2F0
ZShXVEZNb3ZlKGNoYWxsZW5nZSkpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6Y29udGlu
dWVBdXRoZW50aWNhdGUoQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmJiBjaGFsbGVuZ2UpCit7Cisg
ICAgbV9jbGllbnQtPmRpZFJlY2VpdmVDaGFsbGVuZ2UoY2hhbGxlbmdlLCBbdGhpcywgcHJvdGVj
dGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjaGFsbGVuZ2VdKEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlRGlzcG9zaXRpb24gZGlzcG9zaXRpb24sIGNvbnN0IENyZWRlbnRpYWwmIGNyZWRlbnRpYWwp
IHsKKyAgICAgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCBtX3N0YXRlID09
IFN0YXRlOjpDb21wbGV0ZWQpIHsKKyAgICAgICAgICAgIGNsZWFyUmVxdWVzdCgpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGRpc3Bvc2l0aW9uID09IEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb246OkNhbmNlbCkgeworICAgICAgICAgICAg
Y2FuY2VsKCk7CisgICAgICAgICAgICBkaWRGYWlsKGNhbmNlbGxlZEVycm9yKG1fc291cFJlcXVl
c3QuZ2V0KCkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChkaXNwb3NpdGlvbiA9PSBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uOjpVc2VD
cmVkZW50aWFsICYmICFjcmVkZW50aWFsLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgaWYgKG1f
c3RvcmVkQ3JlZGVudGlhbHMgPT0gQWxsb3dTdG9yZWRDcmVkZW50aWFscykgeworICAgICAgICAg
ICAgICAgIC8vIEV2ZW50dWFsbHkgd2Ugd2lsbCBtYW5hZ2UgcGVyLXNlc3Npb24gY3JlZGVudGlh
bHMgb25seSBpbnRlcm5hbGx5IG9yIHVzZSBzb21lIG5ld2x5LWV4cG9zZWQgQVBJIGZyb20gbGli
c291cCwKKyAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIG9uY2Ugd2UgYXV0aGVudGljYXRlIHZp
YSBsaWJzb3VwLCB0aGVyZSBpcyBubyB3YXkgdG8gaWdub3JlIGl0IGZvciBhIHBhcnRpY3VsYXIg
cmVxdWVzdC4gUmlnaHQgbm93LAorICAgICAgICAgICAgICAgIC8vIHdlIHBsYWNlIHRoZSBjcmVk
ZW50aWFscyBpbiB0aGUgc3RvcmUgZXZlbiB0aG91Z2ggbGlic291cCB3aWxsIG5ldmVyIGZpcmUg
dGhlIGF1dGhlbnRpY2F0ZSBzaWduYWwgYWdhaW4gZm9yCisgICAgICAgICAgICAgICAgLy8gdGhp
cyBwcm90ZWN0aW9uIHNwYWNlLgorICAgICAgICAgICAgICAgIGlmIChjcmVkZW50aWFsLnBlcnNp
c3RlbmNlKCkgPT0gQ3JlZGVudGlhbFBlcnNpc3RlbmNlRm9yU2Vzc2lvbiB8fCBjcmVkZW50aWFs
LnBlcnNpc3RlbmNlKCkgPT0gQ3JlZGVudGlhbFBlcnNpc3RlbmNlUGVybWFuZW50KQorICAgICAg
ICAgICAgICAgICAgICBtX3Nlc3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpLmNyZWRlbnRp
YWxTdG9yYWdlKCkuc2V0KGNyZWRlbnRpYWwsIGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKSwg
Y2hhbGxlbmdlLmZhaWx1cmVSZXNwb25zZSgpLnVybCgpKTsKKworICAgICAgICAgICAgICAgIGlm
IChjcmVkZW50aWFsLnBlcnNpc3RlbmNlKCkgPT0gQ3JlZGVudGlhbFBlcnNpc3RlbmNlUGVybWFu
ZW50KSB7CisgICAgICAgICAgICAgICAgICAgIG1fcHJvdGVjdGlvblNwYWNlRm9yUGVyc2lzdGVu
dFN0b3JhZ2UgPSBjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCk7CisgICAgICAgICAgICAgICAg
ICAgIG1fY3JlZGVudGlhbEZvclBlcnNpc3RlbnRTdG9yYWdlID0gY3JlZGVudGlhbDsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNvdXBfYXV0aF9hdXRo
ZW50aWNhdGUoY2hhbGxlbmdlLnNvdXBBdXRoKCksIGNyZWRlbnRpYWwudXNlcigpLnV0ZjgoKS5k
YXRhKCksIGNyZWRlbnRpYWwucGFzc3dvcmQoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgfQor
CisgICAgICAgIHNvdXBfc2Vzc2lvbl91bnBhdXNlX21lc3NhZ2UobV9zZXNzaW9uLT5zb3VwU2Vz
c2lvbigpLCBtX3NvdXBNZXNzYWdlLmdldCgpKTsKKyAgICB9KTsKK30KKwordm9pZCBOZXR3b3Jr
RGF0YVRhc2s6OnNraXBJbnB1dFN0cmVhbUZvclJlZGlyZWN0aW9uQ2FsbGJhY2soR0lucHV0U3Ry
ZWFtKiBpbnB1dFN0cmVhbSwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIE5ldHdvcmtEYXRhVGFzayog
dGFzaykKK3sKKyAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrPiBwcm90ZWN0ZWRUaGlzID0gYWRv
cHRSZWYodGFzayk7CisgICAgaWYgKHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNhbmNlbGluZyB8
fCB0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDb21wbGV0ZWQgfHwgIXRhc2stPm1fY2xpZW50KSB7
CisgICAgICAgIHRhc2stPmNsZWFyUmVxdWVzdCgpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIEFTU0VSVChpbnB1dFN0cmVhbSA9PSB0YXNrLT5tX2lucHV0U3RyZWFtLmdldCgpKTsKKwor
ICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBnc3NpemUgYnl0ZXNTa2lwcGVk
ID0gZ19pbnB1dF9zdHJlYW1fc2tpcF9maW5pc2goaW5wdXRTdHJlYW0sIHJlc3VsdCwgJmVycm9y
Lm91dFB0cigpKTsKKyAgICBpZiAoZXJyb3IpCisgICAgICAgIHRhc2stPmRpZEZhaWwoUmVzb3Vy
Y2VFcnJvcjo6Z2VuZXJpY0dFcnJvcihlcnJvci5nZXQoKSwgdGFzay0+bV9zb3VwUmVxdWVzdC5n
ZXQoKSkpOworICAgIGVsc2UgaWYgKGJ5dGVzU2tpcHBlZCA+IDApCisgICAgICAgIHRhc2stPnNr
aXBJbnB1dFN0cmVhbUZvclJlZGlyZWN0aW9uKCk7CisgICAgZWxzZQorICAgICAgICB0YXNrLT5k
aWRGaW5pc2hTa2lwSW5wdXRTdHJlYW1Gb3JSZWRpcmVjdGlvbigpOworfQorCit2b2lkIE5ldHdv
cmtEYXRhVGFzazo6c2tpcElucHV0U3RyZWFtRm9yUmVkaXJlY3Rpb24oKQoreworICAgIEFTU0VS
VChtX2lucHV0U3RyZWFtKTsKKyAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrPiBwcm90ZWN0ZWRU
aGlzKHRoaXMpOworICAgIGdfaW5wdXRfc3RyZWFtX3NraXBfYXN5bmMobV9pbnB1dFN0cmVhbS5n
ZXQoKSwgZ0RlZmF1bHRSZWFkQnVmZmVyU2l6ZSwgR19QUklPUklUWV9ERUZBVUxULCBtX2NhbmNl
bGxhYmxlLmdldCgpLAorICAgICAgICByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJh
Y2s+KHNraXBJbnB1dFN0cmVhbUZvclJlZGlyZWN0aW9uQ2FsbGJhY2spLCBwcm90ZWN0ZWRUaGlz
LmxlYWtSZWYoKSk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRGaW5pc2hTa2lwSW5w
dXRTdHJlYW1Gb3JSZWRpcmVjdGlvbigpCit7CisgICAgZ19pbnB1dF9zdHJlYW1fY2xvc2UobV9p
bnB1dFN0cmVhbS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgY29udGludWVIVFRQUmVk
aXJlY3Rpb24oKTsKK30KKworc3RhdGljIGJvb2wgc2hvdWxkUmVkaXJlY3RBc0dFVChTb3VwTWVz
c2FnZSogbWVzc2FnZSwgYm9vbCBjcm9zc09yaWdpbikKK3sKKyAgICBpZiAobWVzc2FnZS0+bWV0
aG9kID09IFNPVVBfTUVUSE9EX0dFVCB8fCBtZXNzYWdlLT5tZXRob2QgPT0gU09VUF9NRVRIT0Rf
SEVBRCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNoIChtZXNzYWdlLT5zdGF0
dXNfY29kZSkgeworICAgIGNhc2UgU09VUF9TVEFUVVNfU0VFX09USEVSOgorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBjYXNlIFNPVVBfU1RBVFVTX0ZPVU5EOgorICAgIGNhc2UgU09VUF9TVEFU
VVNfTU9WRURfUEVSTUFORU5UTFk6CisgICAgICAgIGlmIChtZXNzYWdlLT5tZXRob2QgPT0gU09V
UF9NRVRIT0RfUE9TVCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBpZiAoY3Jvc3NPcmlnaW4gJiYgbWVzc2FnZS0+bWV0aG9kID09IFNPVVBf
TUVUSE9EX0RFTEVURSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgTmV0d29ya0RhdGFUYXNrOjpzaG91bGRTdGFydEhUVFBSZWRpcmVjdGlvbigp
Cit7CisgICAgQVNTRVJUKG1fc291cE1lc3NhZ2UpOworICAgIEFTU0VSVCghbV9yZXNwb25zZS5p
c051bGwoKSk7CisKKyAgICBhdXRvIHN0YXR1cyA9IG1fcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUo
KTsKKyAgICBpZiAoIVNPVVBfU1RBVFVTX0lTX1JFRElSRUNUSU9OKHN0YXR1cykpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIC8vIFNvbWUgM3h4IHN0YXR1cyBjb2RlcyBhcmVuJ3QgYWN0
dWFsbHkgcmVkaXJlY3RzLgorICAgIGlmIChzdGF0dXMgPT0gMzAwIHx8IHN0YXR1cyA9PSAzMDQg
fHwgc3RhdHVzID09IDMwNSB8fCBzdGF0dXMgPT0gMzA2KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAobV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6Okxv
Y2F0aW9uKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0
cnVlOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6Y29udGludWVIVFRQUmVkaXJlY3Rpb24o
KQoreworICAgIEFTU0VSVChtX3NvdXBNZXNzYWdlKTsKKyAgICBBU1NFUlQoIW1fcmVzcG9uc2Uu
aXNOdWxsKCkpOworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heFJlZGlyZWN0cyA9IDIw
OworICAgIGlmIChtX3JlZGlyZWN0Q291bnQrKyA+IG1heFJlZGlyZWN0cykgeworICAgICAgICBk
aWRGYWlsKFJlc291cmNlRXJyb3I6OnRyYW5zcG9ydEVycm9yKG1fc291cFJlcXVlc3QuZ2V0KCks
IFNPVVBfU1RBVFVTX1RPT19NQU5ZX1JFRElSRUNUUywgIlRvbyBtYW55IHJlZGlyZWN0cyIpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0ID0g
bV9maXJzdFJlcXVlc3Q7CisgICAgcmVxdWVzdC5zZXRVUkwoVVJMKG1fcmVzcG9uc2UudXJsKCks
IG1fcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpMb2NhdGlvbikpKTsK
KyAgICByZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVzKHJlcXVlc3QudXJsKCkpOworCisg
ICAgLy8gU2hvdWxkIG5vdCBzZXQgUmVmZXJlciBhZnRlciBhIHJlZGlyZWN0IGZyb20gYSBzZWN1
cmUgcmVzb3VyY2UgdG8gbm9uLXNlY3VyZSBvbmUuCisgICAgaWYgKG1fc2hvdWxkQ2xlYXJSZWZl
cnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCAmJiAhcmVxdWVzdC51cmwoKS5wcm90b2NvbElzKCJo
dHRwcyIpICYmIHByb3RvY29sSXMocmVxdWVzdC5odHRwUmVmZXJyZXIoKSwgImh0dHBzIikpCisg
ICAgICAgIHJlcXVlc3QuY2xlYXJIVFRQUmVmZXJyZXIoKTsKKworICAgIGJvb2wgaXNDcm9zc09y
aWdpbiA9ICFwcm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwobV9maXJzdFJlcXVlc3QudXJsKCks
IHJlcXVlc3QudXJsKCkpOworICAgIGlmICghZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
cmVxdWVzdC5odHRwTWV0aG9kKCksICJHRVQiKSkgeworICAgICAgICAvLyBDaGFuZ2UgbmV3UmVx
dWVzdCBtZXRob2QgdG8gR0VUIGlmIGNoYW5nZSB3YXMgbWFkZSBkdXJpbmcgYSBwcmV2aW91cyBy
ZWRpcmVjdGlvbiBvciBpZiBjdXJyZW50IHJlZGlyZWN0aW9uIHNheXMgc28uCisgICAgICAgIGlm
IChtX3NvdXBNZXNzYWdlLT5tZXRob2QgPT0gU09VUF9NRVRIT0RfR0VUIHx8ICFyZXF1ZXN0LnVy
bCgpLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSB8fCBzaG91bGRSZWRpcmVjdEFzR0VUKG1fc291
cE1lc3NhZ2UuZ2V0KCksIGlzQ3Jvc3NPcmlnaW4pKSB7CisgICAgICAgICAgICByZXF1ZXN0LnNl
dEhUVFBNZXRob2QoIkdFVCIpOworICAgICAgICAgICAgcmVxdWVzdC5zZXRIVFRQQm9keShudWxs
cHRyKTsKKyAgICAgICAgICAgIHJlcXVlc3QuY2xlYXJIVFRQQ29udGVudFR5cGUoKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGNvbnN0IGF1dG8mIHVybCA9IHJlcXVlc3QudXJsKCk7CisgICAg
bV91c2VyID0gdXJsLnVzZXIoKTsKKyAgICBtX3Bhc3N3b3JkID0gdXJsLnBhc3MoKTsKKyAgICBt
X2xhc3RIVFRQTWV0aG9kID0gcmVxdWVzdC5odHRwTWV0aG9kKCk7CisgICAgcmVxdWVzdC5yZW1v
dmVDcmVkZW50aWFscygpOworCisgICAgaWYgKGlzQ3Jvc3NPcmlnaW4pIHsKKyAgICAgICAgLy8g
VGhlIG5ldHdvcmsgbGF5ZXIgbWlnaHQgY2Fycnkgb3ZlciBzb21lIGhlYWRlcnMgZnJvbSB0aGUg
b3JpZ2luYWwgcmVxdWVzdCB0aGF0CisgICAgICAgIC8vIHdlIHdhbnQgdG8gc3RyaXAgaGVyZSBi
ZWNhdXNlIHRoZSByZWRpcmVjdCBpcyBjcm9zcy1vcmlnaW4uCisgICAgICAgIHJlcXVlc3QuY2xl
YXJIVFRQQXV0aG9yaXphdGlvbigpOworICAgICAgICByZXF1ZXN0LmNsZWFySFRUUE9yaWdpbigp
OworICAgIH0gZWxzZSBpZiAodXJsLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSAmJiBtX3N0b3Jl
ZENyZWRlbnRpYWxzID09IEFsbG93U3RvcmVkQ3JlZGVudGlhbHMpIHsKKyAgICAgICAgaWYgKG1f
dXNlci5pc0VtcHR5KCkgJiYgbV9wYXNzd29yZC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGF1
dG8gY3JlZGVudGlhbCA9IG1fc2Vzc2lvbi0+bmV0d29ya1N0b3JhZ2VTZXNzaW9uKCkuY3JlZGVu
dGlhbFN0b3JhZ2UoKS5nZXQocmVxdWVzdC51cmwoKSk7CisgICAgICAgICAgICBpZiAoIWNyZWRl
bnRpYWwuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIG1faW5pdGlhbENyZWRlbnRpYWwgPSBj
cmVkZW50aWFsOworICAgICAgICB9CisgICAgfQorCisgICAgY2xlYXJSZXF1ZXN0KCk7CisKKyAg
ICBhdXRvIHJlc3BvbnNlID0gUmVzb3VyY2VSZXNwb25zZShtX3Jlc3BvbnNlKTsKKyAgICBtX2Ns
aWVudC0+d2lsbFBlcmZvcm1IVFRQUmVkaXJlY3Rpb24oV1RGTW92ZShyZXNwb25zZSksIFdURk1v
dmUocmVxdWVzdCksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGlzQ3Jv
c3NPcmlnaW5dKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgbmV3UmVxdWVzdCkgeworICAgICAgICBp
ZiAobmV3UmVxdWVzdC5pc051bGwoKSB8fCBtX3N0YXRlID09IFN0YXRlOjpDYW5jZWxpbmcpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYXV0byByZXF1ZXN0ID0gbmV3UmVxdWVzdDsK
KyAgICAgICAgaWYgKHJlcXVlc3QudXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKSB7Cisj
aWYgRU5BQkxFKFdFQl9USU1JTkcpCisgICAgICAgICAgICBpZiAoaXNDcm9zc09yaWdpbikKKyAg
ICAgICAgICAgICAgICBtX3N0YXJ0VGltZSA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZU1T
KCk7CisjZW5kaWYKKyAgICAgICAgICAgIGFwcGx5QXV0aGVudGljYXRpb25Ub1JlcXVlc3QocmVx
dWVzdCk7CisgICAgICAgIH0KKyAgICAgICAgY3JlYXRlUmVxdWVzdChyZXF1ZXN0KTsKKyAgICAg
ICAgaWYgKG1fc291cFJlcXVlc3QgJiYgbV9zdGF0ZSAhPSBTdGF0ZTo6U3VzcGVuZGVkKSB7Cisg
ICAgICAgICAgICBtX3N0YXRlID0gU3RhdGU6OlN1c3BlbmRlZDsKKyAgICAgICAgICAgIHJlc3Vt
ZSgpOworICAgICAgICB9CisgICAgfSk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpyZWFk
Q2FsbGJhY2soR0lucHV0U3RyZWFtKiBpbnB1dFN0cmVhbSwgR0FzeW5jUmVzdWx0KiByZXN1bHQs
IE5ldHdvcmtEYXRhVGFzayogdGFzaykKK3sKKyAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrPiBw
cm90ZWN0ZWRUaGlzID0gYWRvcHRSZWYodGFzayk7CisgICAgaWYgKHRhc2stPnN0YXRlKCkgPT0g
U3RhdGU6OkNhbmNlbGluZyB8fCB0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDb21wbGV0ZWQgfHwg
KCF0YXNrLT5tX2NsaWVudCAmJiAhdGFzay0+aXNEb3dubG9hZCgpKSkgeworICAgICAgICB0YXNr
LT5jbGVhclJlcXVlc3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBU1NFUlQoaW5w
dXRTdHJlYW0gPT0gdGFzay0+bV9pbnB1dFN0cmVhbS5nZXQoKSk7CisKKyAgICBpZiAodGFzay0+
c3RhdGUoKSA9PSBTdGF0ZTo6U3VzcGVuZGVkKSB7CisgICAgICAgIEFTU0VSVCghdGFzay0+bV9w
ZW5kaW5nUmVzdWx0KTsKKyAgICAgICAgdGFzay0+bV9wZW5kaW5nUmVzdWx0ID0gcmVzdWx0Owor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9y
OworICAgIGdzc2l6ZSBieXRlc1JlYWQgPSBnX2lucHV0X3N0cmVhbV9yZWFkX2ZpbmlzaChpbnB1
dFN0cmVhbSwgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGlmIChlcnJvcikKKyAgICAg
ICAgdGFzay0+ZGlkRmFpbChSZXNvdXJjZUVycm9yOjpnZW5lcmljR0Vycm9yKGVycm9yLmdldCgp
LCB0YXNrLT5tX3NvdXBSZXF1ZXN0LmdldCgpKSk7CisgICAgZWxzZSBpZiAoYnl0ZXNSZWFkID4g
MCkKKyAgICAgICAgdGFzay0+ZGlkUmVhZChieXRlc1JlYWQpOworICAgIGVsc2UKKyAgICAgICAg
dGFzay0+ZGlkRmluaXNoUmVhZCgpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6cmVhZCgp
Cit7CisgICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAg
ICBBU1NFUlQobV9pbnB1dFN0cmVhbSk7CisgICAgbV9yZWFkQnVmZmVyLmdyb3coZ0RlZmF1bHRS
ZWFkQnVmZmVyU2l6ZSk7CisgICAgZ19pbnB1dF9zdHJlYW1fcmVhZF9hc3luYyhtX2lucHV0U3Ry
ZWFtLmdldCgpLCBtX3JlYWRCdWZmZXIuZGF0YSgpLCBtX3JlYWRCdWZmZXIuc2l6ZSgpLCBHX1BS
SU9SSVRZX0RFRkFVTFQsIG1fY2FuY2VsbGFibGUuZ2V0KCksCisgICAgICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4ocmVhZENhbGxiYWNrKSwgcHJvdGVjdGVkVGhpcy5s
ZWFrUmVmKCkpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlkUmVhZChnc3NpemUgYnl0
ZXNSZWFkKQoreworICAgIG1fcmVhZEJ1ZmZlci5zaHJpbmsoYnl0ZXNSZWFkKTsKKyAgICBpZiAo
bV9kb3dubG9hZE91dHB1dFN0cmVhbSkgeworICAgICAgICBBU1NFUlQoaXNEb3dubG9hZCgpKTsK
KyAgICAgICAgd3JpdGVEb3dubG9hZCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVCht
X2NsaWVudCk7CisgICAgICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlRGF0YShTaGFyZWRCdWZmZXI6
OmFkb3B0VmVjdG9yKG1fcmVhZEJ1ZmZlcikpOworICAgICAgICByZWFkKCk7CisgICAgfQorfQor
Cit2b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlkRmluaXNoUmVhZCgpCit7CisgICAgQVNTRVJUKG1f
aW5wdXRTdHJlYW0pOworICAgIGdfaW5wdXRfc3RyZWFtX2Nsb3NlKG1faW5wdXRTdHJlYW0uZ2V0
KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIG1faW5wdXRTdHJlYW0gPSBudWxscHRyOworICAg
IGlmIChtX211bHRpcGFydElucHV0U3RyZWFtKSB7CisgICAgICAgIHJlcXVlc3ROZXh0UGFydCgp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fZG93bmxvYWRPdXRwdXRTdHJl
YW0pIHsKKyAgICAgICAgZGlkRmluaXNoRG93bmxvYWQoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGNsZWFyUmVxdWVzdCgpOworICAgIEFTU0VSVChtX2NsaWVudCk7CisgICAgbV9j
bGllbnQtPmRpZENvbXBsZXRlV2l0aEVycm9yKHsgfSk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFU
YXNrOjpyZXF1ZXN0TmV4dFBhcnRDYWxsYmFjayhTb3VwTXVsdGlwYXJ0SW5wdXRTdHJlYW0qIG11
bHRpcGFydElucHV0U3RyZWFtLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgTmV0d29ya0RhdGFUYXNr
KiB0YXNrKQoreworICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2s+IHByb3RlY3RlZFRoaXMgPSBh
ZG9wdFJlZih0YXNrKTsKKyAgICBpZiAodGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q2FuY2VsaW5n
IHx8IHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNvbXBsZXRlZCB8fCAhdGFzay0+bV9jbGllbnQp
IHsKKyAgICAgICAgdGFzay0+Y2xlYXJSZXF1ZXN0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgQVNTRVJUKG11bHRpcGFydElucHV0U3RyZWFtID09IHRhc2stPm1fbXVsdGlwYXJ0SW5w
dXRTdHJlYW0uZ2V0KCkpOworCisgICAgaWYgKHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OlN1c3Bl
bmRlZCkgeworICAgICAgICBBU1NFUlQoIXRhc2stPm1fcGVuZGluZ1Jlc3VsdCk7CisgICAgICAg
IHRhc2stPm1fcGVuZGluZ1Jlc3VsdCA9IHJlc3VsdDsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBHUmVmUHRyPEdJbnB1dFN0
cmVhbT4gaW5wdXRTdHJlYW0gPSBhZG9wdEdSZWYoc291cF9tdWx0aXBhcnRfaW5wdXRfc3RyZWFt
X25leHRfcGFydF9maW5pc2gobXVsdGlwYXJ0SW5wdXRTdHJlYW0sIHJlc3VsdCwgJmVycm9yLm91
dFB0cigpKSk7CisgICAgaWYgKGVycm9yKQorICAgICAgICB0YXNrLT5kaWRGYWlsKFJlc291cmNl
RXJyb3I6Omh0dHBFcnJvcih0YXNrLT5tX3NvdXBNZXNzYWdlLmdldCgpLCBlcnJvci5nZXQoKSwg
dGFzay0+bV9zb3VwUmVxdWVzdC5nZXQoKSkpOworICAgIGVsc2UgaWYgKGlucHV0U3RyZWFtKQor
ICAgICAgICB0YXNrLT5kaWRSZXF1ZXN0TmV4dFBhcnQoV1RGTW92ZShpbnB1dFN0cmVhbSkpOwor
ICAgIGVsc2UKKyAgICAgICAgdGFzay0+ZGlkRmluaXNoUmVxdWVzdE5leHRQYXJ0KCk7Cit9CisK
K3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpyZXF1ZXN0TmV4dFBhcnQoKQoreworICAgIFJlZlB0cjxO
ZXR3b3JrRGF0YVRhc2s+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgQVNTRVJUKG1fbXVsdGlw
YXJ0SW5wdXRTdHJlYW0pOworICAgIEFTU0VSVCghbV9pbnB1dFN0cmVhbSk7CisgICAgc291cF9t
dWx0aXBhcnRfaW5wdXRfc3RyZWFtX25leHRfcGFydF9hc3luYyhtX211bHRpcGFydElucHV0U3Ry
ZWFtLmdldCgpLCBHX1BSSU9SSVRZX0RFRkFVTFQsIG1fY2FuY2VsbGFibGUuZ2V0KCksCisgICAg
ICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4ocmVxdWVzdE5leHRQYXJ0
Q2FsbGJhY2spLCBwcm90ZWN0ZWRUaGlzLmxlYWtSZWYoKSk7Cit9CisKK3ZvaWQgTmV0d29ya0Rh
dGFUYXNrOjpkaWRSZXF1ZXN0TmV4dFBhcnQoR1JlZlB0cjxHSW5wdXRTdHJlYW0+JiYgaW5wdXRT
dHJlYW0pCit7CisgICAgQVNTRVJUKCFtX2lucHV0U3RyZWFtKTsKKyAgICBtX2lucHV0U3RyZWFt
ID0gV1RGTW92ZShpbnB1dFN0cmVhbSk7CisgICAgbV9yZXNwb25zZSA9IFJlc291cmNlUmVzcG9u
c2UoKTsKKyAgICBtX3Jlc3BvbnNlLnNldFVSTChtX2ZpcnN0UmVxdWVzdC51cmwoKSk7CisgICAg
bV9yZXNwb25zZS51cGRhdGVGcm9tU291cE1lc3NhZ2VIZWFkZXJzKHNvdXBfbXVsdGlwYXJ0X2lu
cHV0X3N0cmVhbV9nZXRfaGVhZGVycyhtX211bHRpcGFydElucHV0U3RyZWFtLmdldCgpKSk7Cisg
ICAgZGlkUmVjZWl2ZVJlc3BvbnNlKCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRG
aW5pc2hSZXF1ZXN0TmV4dFBhcnQoKQoreworICAgIEFTU0VSVCghbV9pbnB1dFN0cmVhbSk7Cisg
ICAgQVNTRVJUKG1fbXVsdGlwYXJ0SW5wdXRTdHJlYW0pOworICAgIGdfaW5wdXRfc3RyZWFtX2Ns
b3NlKEdfSU5QVVRfU1RSRUFNKG1fbXVsdGlwYXJ0SW5wdXRTdHJlYW0uZ2V0KCkpLCBudWxscHRy
LCBudWxscHRyKTsKKyAgICBjbGVhclJlcXVlc3QoKTsKKyAgICBtX2NsaWVudC0+ZGlkQ29tcGxl
dGVXaXRoRXJyb3IoeyB9KTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2s6OmdvdEhlYWRlcnND
YWxsYmFjayhTb3VwTWVzc2FnZSogc291cE1lc3NhZ2UsIE5ldHdvcmtEYXRhVGFzayogdGFzaykK
K3sKKyAgICBpZiAodGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IHRhc2stPnN0
YXRlKCkgPT0gU3RhdGU6OkNvbXBsZXRlZCB8fCAhdGFzay0+bV9jbGllbnQpIHsKKyAgICAgICAg
dGFzay0+Y2xlYXJSZXF1ZXN0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQVNTRVJU
KHRhc2stPm1fc291cE1lc3NhZ2UuZ2V0KCkgPT0gc291cE1lc3NhZ2UpOworICAgIHRhc2stPmRp
ZEdldEhlYWRlcnMoKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZEdldEhlYWRlcnMo
KQoreworICAgIC8vIFdlIGFyZSBhIGJpdCBtb3JlIGNvbnNlcnZhdGl2ZSB3aXRoIHRoZSBwZXJz
aXN0ZW50IGNyZWRlbnRpYWwgc3RvcmFnZSB0aGFuIHRoZSBzZXNzaW9uIHN0b3JlLAorICAgIC8v
IHNpbmNlIHdlIGFyZSB3YWl0aW5nIHVudGlsIHdlIGtub3cgdGhhdCB0aGlzIGF1dGhlbnRpY2F0
aW9uIHN1Y2NlZWRlZCBiZWZvcmUgYWN0dWFsbHkgc3RvcmluZy4KKyAgICAvLyBUaGlzIGlzIGJl
Y2F1c2Ugd2Ugd2FudCB0byBhdm9pZCBoaXR0aW5nIHRoZSBkaXNrIHR3aWNlIChvbmNlIHRvIGFk
ZCBhbmQgb25jZSB0byByZW1vdmUpIGZvcgorICAgIC8vIGluY29ycmVjdCBjcmVkZW50aWFscyBv
ciBwb2xsdXRpbmcgdGhlIGtleWNoYWluIHdpdGggaW52YWxpZCBjcmVkZW50aWFscy4KKyAgICBp
ZiAoIWlzQXV0aGVudGljYXRpb25GYWlsdXJlU3RhdHVzQ29kZShtX3NvdXBNZXNzYWdlLT5zdGF0
dXNfY29kZSkgJiYgbV9zb3VwTWVzc2FnZS0+c3RhdHVzX2NvZGUgPCA1MDApIHsKKyAgICAgICAg
bV9zZXNzaW9uLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKS5zYXZlQ3JlZGVudGlhbFRvUGVyc2lz
dGVudFN0b3JhZ2UobV9wcm90ZWN0aW9uU3BhY2VGb3JQZXJzaXN0ZW50U3RvcmFnZSwgbV9jcmVk
ZW50aWFsRm9yUGVyc2lzdGVudFN0b3JhZ2UpOworICAgICAgICBtX3Byb3RlY3Rpb25TcGFjZUZv
clBlcnNpc3RlbnRTdG9yYWdlID0gUHJvdGVjdGlvblNwYWNlKCk7CisgICAgICAgIG1fY3JlZGVu
dGlhbEZvclBlcnNpc3RlbnRTdG9yYWdlID0gQ3JlZGVudGlhbCgpOworICAgIH0KK30KKwordm9p
ZCBOZXR3b3JrRGF0YVRhc2s6Ondyb3RlQm9keURhdGFDYWxsYmFjayhTb3VwTWVzc2FnZSogc291
cE1lc3NhZ2UsIFNvdXBCdWZmZXIqIGJ1ZmZlciwgTmV0d29ya0RhdGFUYXNrKiB0YXNrKQorewor
ICAgIGlmICh0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgdGFzay0+c3RhdGUo
KSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICF0YXNrLT5tX2NsaWVudCkgeworICAgICAgICB0YXNr
LT5jbGVhclJlcXVlc3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBU1NFUlQodGFz
ay0+bV9zb3VwTWVzc2FnZS5nZXQoKSA9PSBzb3VwTWVzc2FnZSk7CisgICAgdGFzay0+ZGlkV3Jp
dGVCb2R5RGF0YShidWZmZXItPmxlbmd0aCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpk
aWRXcml0ZUJvZHlEYXRhKHVpbnQ2NF90IGJ5dGVzU2VudCkKK3sKKyAgICBSZWZQdHI8TmV0d29y
a0RhdGFUYXNrPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIG1fYm9keURhdGFUb3RhbEJ5dGVz
U2VudCArPSBieXRlc1NlbnQ7CisgICAgbV9jbGllbnQtPmRpZFNlbmREYXRhKG1fYm9keURhdGFU
b3RhbEJ5dGVzU2VudCwgbV9zb3VwTWVzc2FnZS0+cmVxdWVzdF9ib2R5LT5sZW5ndGgpOworfQor
Cit2b2lkIE5ldHdvcmtEYXRhVGFzazo6ZG93bmxvYWQoKQoreworICAgIEFTU0VSVChpc0Rvd25s
b2FkKCkpOworICAgIEFTU0VSVChtX3BlbmRpbmdEb3dubG9hZExvY2F0aW9uKTsKKyAgICBBU1NF
UlQoIW1fcmVzcG9uc2UuaXNOdWxsKCkpOworCisgICAgaWYgKG1fcmVzcG9uc2UuaHR0cFN0YXR1
c0NvZGUoKSA+PSA0MDApIHsKKyAgICAgICAgZGlkRmFpbERvd25sb2FkKHBsYXRmb3JtRG93bmxv
YWROZXR3b3JrRXJyb3IobV9yZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpLCBtX3Jlc3BvbnNlLnVy
bCgpLCBtX3Jlc3BvbnNlLmh0dHBTdGF0dXNUZXh0KCkpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIG1fZG93bmxvYWREZXN0aW5hdGlvbkZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25l
d19mb3JfdXJpKG1fcGVuZGluZ0Rvd25sb2FkTG9jYXRpb24udXRmOCgpLmRhdGEoKSkpOworICAg
IEdSZWZQdHI8R0ZpbGVPdXRwdXRTdHJlYW0+IG91dHB1dFN0cmVhbTsKKyAgICBHVW5pcXVlT3V0
UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgaWYgKG1fYWxsb3dPdmVyd3JpdGVEb3dubG9hZCkKKyAg
ICAgICAgb3V0cHV0U3RyZWFtID0gYWRvcHRHUmVmKGdfZmlsZV9yZXBsYWNlKG1fZG93bmxvYWRE
ZXN0aW5hdGlvbkZpbGUuZ2V0KCksIG51bGxwdHIsIEZBTFNFLCBHX0ZJTEVfQ1JFQVRFX05PTkUs
IG51bGxwdHIsICZlcnJvci5vdXRQdHIoKSkpOworICAgIGVsc2UKKyAgICAgICAgb3V0cHV0U3Ry
ZWFtID0gYWRvcHRHUmVmKGdfZmlsZV9jcmVhdGUobV9kb3dubG9hZERlc3RpbmF0aW9uRmlsZS5n
ZXQoKSwgR19GSUxFX0NSRUFURV9OT05FLCBudWxscHRyLCAmZXJyb3Iub3V0UHRyKCkpKTsKKyAg
ICBpZiAoIW91dHB1dFN0cmVhbSkgeworICAgICAgICBkaWRGYWlsRG93bmxvYWQocGxhdGZvcm1E
b3dubG9hZERlc3RpbmF0aW9uRXJyb3IobV9yZXNwb25zZSwgZXJyb3ItPm1lc3NhZ2UpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFN0cmluZyBpbnRlcm1lZGlhdGVVUkkgPSBtX3Bl
bmRpbmdEb3dubG9hZExvY2F0aW9uICsgIi53a2Rvd25sb2FkIjsKKyAgICBtX2Rvd25sb2FkSW50
ZXJtZWRpYXRlRmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl91cmkoaW50ZXJtZWRpYXRl
VVJJLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICBvdXRwdXRTdHJlYW0gPSBhZG9wdEdSZWYoZ19maWxl
X3JlcGxhY2UobV9kb3dubG9hZEludGVybWVkaWF0ZUZpbGUuZ2V0KCksIDAsIFRSVUUsIEdfRklM
RV9DUkVBVEVfTk9ORSwgMCwgJmVycm9yLm91dFB0cigpKSk7CisgICAgaWYgKCFvdXRwdXRTdHJl
YW0pIHsKKyAgICAgICAgZGlkRmFpbERvd25sb2FkKHBsYXRmb3JtRG93bmxvYWREZXN0aW5hdGlv
bkVycm9yKG1fcmVzcG9uc2UsIGVycm9yLT5tZXNzYWdlKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgbV9kb3dubG9hZE91dHB1dFN0cmVhbSA9IGFkb3B0R1JlZihHX09VVFBVVF9TVFJF
QU0ob3V0cHV0U3RyZWFtLmxlYWtSZWYoKSkpOworCisgICAgYXV0byYgZG93bmxvYWRNYW5hZ2Vy
ID0gTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLmRvd25sb2FkTWFuYWdlcigpOworICAgIGF1
dG8gZG93bmxvYWQgPSBzdGQ6Om1ha2VfdW5pcXVlPERvd25sb2FkPihkb3dubG9hZE1hbmFnZXIs
IG1fcGVuZGluZ0Rvd25sb2FkSUQsIHRoaXMsIG1fc2Vzc2lvbi0+c2Vzc2lvbklEKCksIHN1Z2dl
c3RlZEZpbGVuYW1lKCkpOworICAgIGF1dG8qIGRvd25sb2FkUHRyID0gZG93bmxvYWQuZ2V0KCk7
CisgICAgZG93bmxvYWRNYW5hZ2VyLmRhdGFUYXNrQmVjYW1lRG93bmxvYWRUYXNrKG1fcGVuZGlu
Z0Rvd25sb2FkSUQsIFdURk1vdmUoZG93bmxvYWQpKTsKKyAgICBkb3dubG9hZFB0ci0+ZGlkQ3Jl
YXRlRGVzdGluYXRpb24obV9wZW5kaW5nRG93bmxvYWRMb2NhdGlvbik7CisKKyAgICBBU1NFUlQo
bV9jbGllbnQpOworICAgIG1fY2xpZW50LT5kaWRCZWNvbWVEb3dubG9hZCgpOworCisgICAgcmVh
ZCgpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6d3JpdGVEb3dubG9hZENhbGxiYWNrKEdP
dXRwdXRTdHJlYW0qIG91dHB1dFN0cmVhbSwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIE5ldHdvcmtE
YXRhVGFzayogdGFzaykKK3sKKyAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrPiBwcm90ZWN0ZWRU
aGlzID0gYWRvcHRSZWYodGFzayk7CisgICAgaWYgKHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNh
bmNlbGluZyB8fCB0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDb21wbGV0ZWQgfHwgIXRhc2stPmlz
RG93bmxvYWQoKSkgeworICAgICAgICB0YXNrLT5jbGVhclJlcXVlc3QoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBBU1NFUlQob3V0cHV0U3RyZWFtID09IHRhc2stPm1fZG93bmxvYWRP
dXRwdXRTdHJlYW0uZ2V0KCkpOworCisgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOwor
ICAgIGdzaXplIGJ5dGVzV3JpdHRlbjsKKyAgICBnX291dHB1dF9zdHJlYW1fd3JpdGVfYWxsX2Zp
bmlzaChvdXRwdXRTdHJlYW0sIHJlc3VsdCwgJmJ5dGVzV3JpdHRlbiwgJmVycm9yLm91dFB0cigp
KTsKKyAgICBpZiAoZXJyb3IpCisgICAgICAgIHRhc2stPmRpZEZhaWxEb3dubG9hZChwbGF0Zm9y
bURvd25sb2FkRGVzdGluYXRpb25FcnJvcih0YXNrLT5tX3Jlc3BvbnNlLCBlcnJvci0+bWVzc2Fn
ZSkpOworICAgIGVsc2UKKyAgICAgICAgdGFzay0+ZGlkV3JpdGVEb3dubG9hZChieXRlc1dyaXR0
ZW4pOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6d3JpdGVEb3dubG9hZCgpCit7CisgICAg
UmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBnX291dHB1
dF9zdHJlYW1fd3JpdGVfYWxsX2FzeW5jKG1fZG93bmxvYWRPdXRwdXRTdHJlYW0uZ2V0KCksIG1f
cmVhZEJ1ZmZlci5kYXRhKCksIG1fcmVhZEJ1ZmZlci5zaXplKCksIEdfUFJJT1JJVFlfREVGQVVM
VCwgbV9jYW5jZWxsYWJsZS5nZXQoKSwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNS
ZWFkeUNhbGxiYWNrPih3cml0ZURvd25sb2FkQ2FsbGJhY2spLCBwcm90ZWN0ZWRUaGlzLmxlYWtS
ZWYoKSk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRXcml0ZURvd25sb2FkKGdzaXpl
IGJ5dGVzV3JpdHRlbikKK3sKKyAgICBBU1NFUlQoYnl0ZXNXcml0dGVuID09IG1fcmVhZEJ1ZmZl
ci5zaXplKCkpOworICAgIGF1dG8qIGRvd25sb2FkID0gTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRv
bigpLmRvd25sb2FkTWFuYWdlcigpLmRvd25sb2FkKG1fcGVuZGluZ0Rvd25sb2FkSUQpOworICAg
IEFTU0VSVChkb3dubG9hZCk7CisgICAgZG93bmxvYWQtPmRpZFJlY2VpdmVEYXRhKGJ5dGVzV3Jp
dHRlbik7CisgICAgcmVhZCgpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlkRmluaXNo
RG93bmxvYWQoKQoreworICAgIEFTU0VSVCghbV9yZXNwb25zZS5pc051bGwoKSk7CisgICAgQVNT
RVJUKG1fZG93bmxvYWRPdXRwdXRTdHJlYW0pOworICAgIGdfb3V0cHV0X3N0cmVhbV9jbG9zZSht
X2Rvd25sb2FkT3V0cHV0U3RyZWFtLmdldCgpLCBudWxscHRyLCBudWxscHRyKTsKKyAgICBtX2Rv
d25sb2FkT3V0cHV0U3RyZWFtID0gbnVsbHB0cjsKKworICAgIEFTU0VSVChtX2Rvd25sb2FkRGVz
dGluYXRpb25GaWxlKTsKKyAgICBBU1NFUlQobV9kb3dubG9hZEludGVybWVkaWF0ZUZpbGUpOwor
ICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBpZiAoIWdfZmlsZV9tb3ZlKG1f
ZG93bmxvYWRJbnRlcm1lZGlhdGVGaWxlLmdldCgpLCBtX2Rvd25sb2FkRGVzdGluYXRpb25GaWxl
LmdldCgpLCBHX0ZJTEVfQ09QWV9PVkVSV1JJVEUsIG1fY2FuY2VsbGFibGUuZ2V0KCksIG51bGxw
dHIsIG51bGxwdHIsICZlcnJvci5vdXRQdHIoKSkpIHsKKyAgICAgICAgZGlkRmFpbERvd25sb2Fk
KHBsYXRmb3JtRG93bmxvYWREZXN0aW5hdGlvbkVycm9yKG1fcmVzcG9uc2UsIGVycm9yLT5tZXNz
YWdlKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBHUmVmUHRyPEdGaWxlSW5mbz4g
aW5mbyA9IGFkb3B0R1JlZihnX2ZpbGVfaW5mb19uZXcoKSk7CisgICAgQ1N0cmluZyB1cmkgPSBt
X3Jlc3BvbnNlLnVybCgpLnN0cmluZygpLnV0ZjgoKTsKKyAgICBnX2ZpbGVfaW5mb19zZXRfYXR0
cmlidXRlX3N0cmluZyhpbmZvLmdldCgpLCAibWV0YWRhdGE6OmRvd25sb2FkLXVyaSIsIHVyaS5k
YXRhKCkpOworICAgIGdfZmlsZV9pbmZvX3NldF9hdHRyaWJ1dGVfc3RyaW5nKGluZm8uZ2V0KCks
ICJ4YXR0cjo6eGRnLm9yaWdpbi51cmwiLCB1cmkuZGF0YSgpKTsKKyAgICBnX2ZpbGVfc2V0X2F0
dHJpYnV0ZXNfYXN5bmMobV9kb3dubG9hZERlc3RpbmF0aW9uRmlsZS5nZXQoKSwgaW5mby5nZXQo
KSwgR19GSUxFX1FVRVJZX0lORk9fTk9ORSwgR19QUklPUklUWV9ERUZBVUxULCBudWxscHRyLCBu
dWxscHRyLCBudWxscHRyKTsKKworICAgIGNsZWFyUmVxdWVzdCgpOworICAgIGF1dG8qIGRvd25s
b2FkID0gTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLmRvd25sb2FkTWFuYWdlcigpLmRvd25s
b2FkKG1fcGVuZGluZ0Rvd25sb2FkSUQpOworICAgIEFTU0VSVChkb3dubG9hZCk7CisgICAgZG93
bmxvYWQtPmRpZEZpbmlzaCgpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlkRmFpbERv
d25sb2FkKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQoreworICAgIGNsZWFyUmVxdWVzdCgp
OworICAgIGNsZWFuRG93bmxvYWRGaWxlcygpOworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAg
bV9jbGllbnQtPmRpZENvbXBsZXRlV2l0aEVycm9yKGVycm9yKTsKKyAgICBlbHNlIHsKKyAgICAg
ICAgYXV0byogZG93bmxvYWQgPSBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuZG93bmxvYWRN
YW5hZ2VyKCkuZG93bmxvYWQobV9wZW5kaW5nRG93bmxvYWRJRCk7CisgICAgICAgIEFTU0VSVChk
b3dubG9hZCk7CisgICAgICAgIGRvd25sb2FkLT5kaWRGYWlsKGVycm9yLCBJUEM6OkRhdGFSZWZl
cmVuY2UoKSk7CisgICAgfQorfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6Y2xlYW5Eb3dubG9h
ZEZpbGVzKCkKK3sKKyAgICBpZiAobV9kb3dubG9hZERlc3RpbmF0aW9uRmlsZSkgeworICAgICAg
ICBnX2ZpbGVfZGVsZXRlKG1fZG93bmxvYWREZXN0aW5hdGlvbkZpbGUuZ2V0KCksIG51bGxwdHIs
IG51bGxwdHIpOworICAgICAgICBtX2Rvd25sb2FkRGVzdGluYXRpb25GaWxlID0gbnVsbHB0cjsK
KyAgICB9CisgICAgaWYgKG1fZG93bmxvYWRJbnRlcm1lZGlhdGVGaWxlKSB7CisgICAgICAgIGdf
ZmlsZV9kZWxldGUobV9kb3dubG9hZEludGVybWVkaWF0ZUZpbGUuZ2V0KCksIG51bGxwdHIsIG51
bGxwdHIpOworICAgICAgICBtX2Rvd25sb2FkSW50ZXJtZWRpYXRlRmlsZSA9IG51bGxwdHI7Cisg
ICAgfQorfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVy
cm9yJiBlcnJvcikKK3sKKyAgICBpZiAoaXNEb3dubG9hZCgpKSB7CisgICAgICAgIGRpZEZhaWxE
b3dubG9hZChwbGF0Zm9ybURvd25sb2FkTmV0d29ya0Vycm9yKGVycm9yLmVycm9yQ29kZSgpLCBl
cnJvci5mYWlsaW5nVVJMKCksIGVycm9yLmxvY2FsaXplZERlc2NyaXB0aW9uKCkpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGNsZWFyUmVxdWVzdCgpOworICAgIEFTU0VSVChtX2Ns
aWVudCk7CisgICAgbV9jbGllbnQtPmRpZENvbXBsZXRlV2l0aEVycm9yKGVycm9yKTsKK30KKwor
I2lmIEVOQUJMRShXRUJfVElNSU5HKQordm9pZCBOZXR3b3JrRGF0YVRhc2s6Om5ldHdvcmtFdmVu
dENhbGxiYWNrKFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSwgR1NvY2tldENsaWVudEV2ZW50IGV2
ZW50LCBHSU9TdHJlYW0qLCBOZXR3b3JrRGF0YVRhc2sqIHRhc2spCit7CisgICAgaWYgKHRhc2st
PnN0YXRlKCkgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCB0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpD
b21wbGV0ZWQgfHwgIXRhc2stPm1fY2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NF
UlQodGFzay0+bV9zb3VwTWVzc2FnZS5nZXQoKSA9PSBzb3VwTWVzc2FnZSk7CisgICAgdGFzay0+
bmV0d29ya0V2ZW50KGV2ZW50KTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2s6Om5ldHdvcmtF
dmVudChHU29ja2V0Q2xpZW50RXZlbnQgZXZlbnQpCit7CisgICAgZG91YmxlIGRlbHRhVGltZSA9
IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZU1TKCkgLSBtX3N0YXJ0VGltZTsKKyAgICBhdXRv
JiBsb2FkVGltaW5nID0gbV9yZXNwb25zZS5uZXR3b3JrTG9hZFRpbWluZygpOworICAgIHN3aXRj
aCAoZXZlbnQpIHsKKyAgICBjYXNlIEdfU09DS0VUX0NMSUVOVF9SRVNPTFZJTkc6CisgICAgICAg
IGxvYWRUaW1pbmcuZG9tYWluTG9va3VwU3RhcnQgPSBkZWx0YVRpbWU7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgR19TT0NLRVRfQ0xJRU5UX1JFU09MVkVEOgorICAgICAgICBsb2FkVGltaW5n
LmRvbWFpbkxvb2t1cEVuZCA9IGRlbHRhVGltZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBH
X1NPQ0tFVF9DTElFTlRfQ09OTkVDVElORzoKKyAgICAgICAgbG9hZFRpbWluZy5jb25uZWN0U3Rh
cnQgPSBkZWx0YVRpbWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR19TT0NLRVRfQ0xJRU5U
X0NPTk5FQ1RFRDoKKyAgICAgICAgLy8gV2ViIFRpbWluZyBjb25zaWRlcnMgdGhhdCBjb25uZWN0
aW9uIHRpbWUgaW52b2x2ZXMgZG5zLCBwcm94eSAmIFRMUyBuZWdvdGlhdGlvbi4uLgorICAgICAg
ICAvLyBzbyB3ZSBiZXR0ZXIgcGljayBHX1NPQ0tFVF9DTElFTlRfQ09NUExFVEUgZm9yIGNvbm5l
Y3RFbmQKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHX1NPQ0tFVF9DTElFTlRfUFJPWFlfTkVH
T1RJQVRJTkc6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR19TT0NLRVRfQ0xJRU5UX1BST1hZ
X05FR09USUFURUQ6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR19TT0NLRVRfQ0xJRU5UX1RM
U19IQU5EU0hBS0lORzoKKyAgICAgICAgbG9hZFRpbWluZy5zZWN1cmVDb25uZWN0aW9uU3RhcnQg
PSBkZWx0YVRpbWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR19TT0NLRVRfQ0xJRU5UX1RM
U19IQU5EU0hBS0VEOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdfU09DS0VUX0NMSUVOVF9D
T01QTEVURToKKyAgICAgICAgbG9hZFRpbWluZy5jb25uZWN0RW5kID0gZGVsdGFUaW1lOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCisjaWYgU09VUF9DSEVDS19WRVJTSU9OKDIsIDQ5
LCA5MSkKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpzdGFydGluZ0NhbGxiYWNrKFNvdXBNZXNzYWdl
KiBzb3VwTWVzc2FnZSwgTmV0d29ya0RhdGFUYXNrKiB0YXNrKQoreworICAgIGlmICh0YXNrLT5z
dGF0ZSgpID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgdGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q29t
cGxldGVkIHx8ICF0YXNrLT5tX2NsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJU
KHRhc2stPm1fc291cE1lc3NhZ2UuZ2V0KCkgPT0gc291cE1lc3NhZ2UpOworICAgIHRhc2stPmRp
ZFN0YXJ0UmVxdWVzdCgpOworfQorI2Vsc2UKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpyZXF1ZXN0
U3RhcnRlZENhbGxiYWNrKFNvdXBTZXNzaW9uKiBzZXNzaW9uLCBTb3VwTWVzc2FnZSogc291cE1l
c3NhZ2UsIFNvdXBTb2NrZXQqLCBOZXR3b3JrRGF0YVRhc2sqIHRhc2spCit7CisgICAgQVNTRVJU
KHNlc3Npb24gPT0gdGFzay0+bV9zZXNzaW9uLT5zb3VwU2Vzc2lvbigpKTsKKyAgICBpZiAoc291
cE1lc3NhZ2UgIT0gdGFzay0+bV9zb3VwTWVzc2FnZS5nZXQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCB0YXNrLT5zdGF0
ZSgpID09IFN0YXRlOjpDb21wbGV0ZWQgfHwgIXRhc2stPm1fY2xpZW50KQorICAgICAgICByZXR1
cm47CisKKyAgICB0YXNrLT5kaWRTdGFydFJlcXVlc3QoKTsKK30KKyNlbmRpZgorCit2b2lkIE5l
dHdvcmtEYXRhVGFzazo6ZGlkU3RhcnRSZXF1ZXN0KCkKK3sKKyAgICBtX3Jlc3BvbnNlLm5ldHdv
cmtMb2FkVGltaW5nKCkucmVxdWVzdFN0YXJ0ID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1l
TVMoKSAtIG1fc3RhcnRUaW1lOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6cmVzdGFydGVk
Q2FsbGJhY2soU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlLCBOZXR3b3JrRGF0YVRhc2sqIHRhc2sp
Cit7CisgICAgLy8gQ2FsbGVkIGVhY2ggdGltZSB0aGUgbWVzc2FnZSBpcyBnb2luZyB0byBiZSBz
ZW50IGFnYWluIGV4Y2VwdCB0aGUgZmlyc3QgdGltZS4KKyAgICAvLyBUaGlzIGhhcHBlbnMgd2hl
biBsaWJzb3VwIGhhbmRsZXMgSFRUUCBhdXRoZW50aWNhdGlvbi4KKyAgICBpZiAodGFzay0+c3Rh
dGUoKSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNvbXBs
ZXRlZCB8fCAhdGFzay0+bV9jbGllbnQpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVCh0
YXNrLT5tX3NvdXBNZXNzYWdlLmdldCgpID09IHNvdXBNZXNzYWdlKTsKKyAgICB0YXNrLT5kaWRS
ZXN0YXJ0KCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRSZXN0YXJ0KCkKK3sKKyAg
ICBtX3N0YXJ0VGltZSA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZU1TKCk7Cit9CisjZW5k
aWYgLy8gRU5BQkxFKFdFQl9USU1JTkcpCisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9u
U291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNz
aW9uU291cC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRjMmM3Nwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0
d29ya1Nlc3Npb25Tb3VwLmNwcApAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE2IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJOZXR3b3JrU2Vzc2lvbi5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFn
ZVNlc3Npb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NvdXBOZXR3b3JrU2Vzc2lvbi5oPgorI2lu
Y2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworUmVmPE5ldHdvcmtTZXNzaW9uPiBOZXR3b3JrU2Vzc2lvbjo6
Y3JlYXRlKFR5cGUgdHlwZSwgU2Vzc2lvbklEIHNlc3Npb25JRCwgQ3VzdG9tUHJvdG9jb2xNYW5h
Z2VyKikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrU2Vzc2lvbih0eXBlLCBz
ZXNzaW9uSUQsIG51bGxwdHIpKTsKK30KKworTmV0d29ya1Nlc3Npb24mIE5ldHdvcmtTZXNzaW9u
OjpkZWZhdWx0U2Vzc2lvbigpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBz
dGF0aWMgTmV0d29ya1Nlc3Npb24qIHNlc3Npb24gPSAmTmV0d29ya1Nlc3Npb246OmNyZWF0ZShO
ZXR3b3JrU2Vzc2lvbjo6VHlwZTo6Tm9ybWFsLCBTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQo
KSwgbnVsbHB0cikubGVha1JlZigpOworICAgIHJldHVybiAqc2Vzc2lvbjsKK30KKworTmV0d29y
a1N0b3JhZ2VTZXNzaW9uJiBOZXR3b3JrU2Vzc2lvbjo6bmV0d29ya1N0b3JhZ2VTZXNzaW9uKCkg
Y29uc3QKK3sKKyAgICBhdXRvKiBzdG9yYWdlU2Vzc2lvbiA9IE5ldHdvcmtTdG9yYWdlU2Vzc2lv
bjo6c3RvcmFnZVNlc3Npb24obV9zZXNzaW9uSUQpOworICAgIFJFTEVBU0VfQVNTRVJUKHN0b3Jh
Z2VTZXNzaW9uKTsKKyAgICByZXR1cm4gKnN0b3JhZ2VTZXNzaW9uOworfQorCitOZXR3b3JrU2Vz
c2lvbjo6TmV0d29ya1Nlc3Npb24oVHlwZSB0eXBlLCBTZXNzaW9uSUQgc2Vzc2lvbklELCBDdXN0
b21Qcm90b2NvbE1hbmFnZXIqKQorICAgIDogbV9zZXNzaW9uSUQoc2Vzc2lvbklEKQoreworfQor
CitOZXR3b3JrU2Vzc2lvbjo6fk5ldHdvcmtTZXNzaW9uKCkKK3sKK30KKworU291cFNlc3Npb24q
IE5ldHdvcmtTZXNzaW9uOjpzb3VwU2Vzc2lvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG5ldHdv
cmtTdG9yYWdlU2Vzc2lvbigpLnNvdXBOZXR3b3JrU2Vzc2lvbigpLnNvdXBTZXNzaW9uKCk7Cit9
CisKK3ZvaWQgTmV0d29ya1Nlc3Npb246OmludmFsaWRhdGVBbmRDYW5jZWwoKQoreworICAgIGZv
ciAoYXV0byogdGFzayA6IG1fZGF0YVRhc2tTZXQpCisgICAgICAgIHRhc2stPmludmFsaWRhdGVB
bmRDYW5jZWwoKTsKK30KKwordm9pZCBOZXR3b3JrU2Vzc2lvbjo6Y2xlYXJDcmVkZW50aWFscygp
Cit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3Mvc291cC9SZW1vdGVOZXR3b3JraW5nQ29udGV4dFNvdXAuY3BwIGIv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9SZW1vdGVOZXR3b3JraW5nQ29udGV4
dFNvdXAuY3BwCmluZGV4IDZhZWNiN2YuLjhmYjY0ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvUmVtb3RlTmV0d29ya2luZ0NvbnRleHRTb3VwLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL1JlbW90ZU5ldHdvcmtpbmdD
b250ZXh0U291cC5jcHAKQEAgLTI4LDYgKzI4LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJSZW1vdGVOZXR3b3JraW5nQ29udGV4dC5oIgogCisjaW5jbHVkZSAiTmV0d29ya1Nl
c3Npb24uaCIKKyNpbmNsdWRlICJTZXNzaW9uVHJhY2tlci5oIgogI2luY2x1ZGUgPFdlYkNvcmUv
TmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRl
ZC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VIYW5kbGUuaD4KQEAgLTQ1LDEzICs0Nywy
MSBAQCBib29sIFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0Ojppc1ZhbGlkKCkgY29uc3QKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlUHJp
dmF0ZUJyb3dzaW5nU2Vzc2lvbihTZXNzaW9uSUQpCit2b2lkIFJlbW90ZU5ldHdvcmtpbmdDb250
ZXh0OjplbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKFNlc3Npb25JRCBzZXNzaW9uSUQpCiB7
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBBU1NFUlQoc2Vzc2lvbklELmlzRXBoZW1lcmFs
KCkpOworCisgICAgaWYgKE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c3RvcmFnZVNlc3Npb24oc2Vz
c2lvbklEKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpl
bnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKHNlc3Npb25JRCwgU3RyaW5nOjpudW1iZXIoc2Vz
c2lvbklELnNlc3Npb25JRCgpKSk7CisgICAgU2Vzc2lvblRyYWNrZXI6OnNldFNlc3Npb24oc2Vz
c2lvbklELCBOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKE5ldHdvcmtTZXNzaW9uOjpUeXBlOjpFcGhl
bWVyYWwsIHNlc3Npb25JRCwgbnVsbHB0cikpOwogfQogCiBOZXR3b3JrU3RvcmFnZVNlc3Npb24m
IFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0OjpzdG9yYWdlU2Vzc2lvbigpIGNvbnN0CiB7CisgICAg
aWYgKGF1dG8gc2Vzc2lvbiA9IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6c3RvcmFnZVNlc3Npb24o
bV9zZXNzaW9uSUQpKQorICAgICAgICByZXR1cm4gKnNlc3Npb247CiAgICAgcmV0dXJuIE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbjo6ZGVmYXVsdFN0b3JhZ2VTZXNzaW9uKCk7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxh
dGZvcm1FZmwuY21ha2UKaW5kZXggZjEyNTk1MS4uYmFiZjJhNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1F
ZmwuY21ha2UKQEAgLTE0LDcgKzE0LDkgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAK
ICAgICBOZXR3b3JrUHJvY2Vzcy9lZmwvTmV0d29ya1Byb2Nlc3NNYWluRWZsLmNwcAogCisgICAg
TmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmNwcAogICAgIE5ldHdvcmtQ
cm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAorICAgIE5ldHdvcmtQcm9jZXNzL3Nv
dXAvTmV0d29ya1Nlc3Npb25Tb3VwLmNwcAogICAgIE5ldHdvcmtQcm9jZXNzL3NvdXAvUmVtb3Rl
TmV0d29ya2luZ0NvbnRleHRTb3VwLmNwcAogCiAgICAgUGxhdGZvcm0vSVBDL3VuaXgvQXR0YWNo
bWVudFVuaXguY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFr
ZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IGJlZWEwMGUuLjZmYmRh
MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC0zOSw4ICszOSwxMCBAQCBsaXN0KEFQ
UEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVEYXRhU291cC5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0No
YW5uZWxTb3VwLmNwcAogCisgICAgTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tT
b3VwLmNwcAogICAgIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NNYWluU291cC5j
cHAKICAgICBOZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAKKyAgICBO
ZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5jcHAKICAgICBOZXR3b3JrUHJv
Y2Vzcy9zb3VwL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0U291cC5jcHAKIAogICAgIFBsYXRmb3Jt
L0lQQy9nbGliL0dTb2NrZXRNb25pdG9yLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9zb3VwL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQu
Y3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9zb3VwL1dlYkZy
YW1lTmV0d29ya2luZ0NvbnRleHQuY3BwCmluZGV4IDIwMWQ0YTguLjJmOTg3MWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvc291cC9XZWJGcmFt
ZU5ldHdvcmtpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L3NvdXAvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5jcHAKQEAgLTI3LDYg
KzI3LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJGcmFtZU5ldHdvcmtp
bmdDb250ZXh0LmgiCiAKKyNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5oIgogI2luY2x1ZGUgIlNl
c3Npb25UcmFja2VyLmgiCiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKICNpbmNsdWRlICJXZWJQYWdl
LmgiCkBAIC00MywxMSArNDQsMTMgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiB2b2lkIFdlYkZyYW1l
TmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oU2Vzc2lvbklE
IHNlc3Npb25JRCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChz
ZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSk7CiAKICAgICBpZiAoTmV0d29ya1N0b3JhZ2VTZXNzaW9u
OjpzdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpKQogICAgICAgICByZXR1cm47CiAKICAgICBOZXR3
b3JrU3RvcmFnZVNlc3Npb246OmVuc3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oc2Vzc2lvbklE
LCBTdHJpbmc6Om51bWJlcihzZXNzaW9uSUQuc2Vzc2lvbklEKCkpKTsKKyAgICBTZXNzaW9uVHJh
Y2tlcjo6c2V0U2Vzc2lvbihzZXNzaW9uSUQsIE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUoTmV0d29y
a1Nlc3Npb246OlR5cGU6OkVwaGVtZXJhbCwgc2Vzc2lvbklELCBudWxscHRyKSk7CiB9CiAKIHZv
aWQgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6c2V0Q29va2llQWNjZXB0UG9saWN5Rm9yQWxs
Q29udGV4dHMoSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9jb25maWcuaCBiL1NvdXJjZS9XZWJLaXQyL2NvbmZpZy5oCmluZGV4IDFkOTFm
YmQuLmE5N2RkNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL2NvbmZpZy5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL2NvbmZpZy5oCkBAIC03NSw3ICs3NSw3IEBACiAjZW5kaWYKICNlbmRpZgog
Ci0jaWYgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+
PSAxMDEyMDApIHx8IChQTEFURk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JF
UVVJUkVEID49IDEwMDAwMCkKKyNpZiAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJ
T05fTUlOX1JFUVVJUkVEID49IDEwMTIwMCkgfHwgKFBMQVRGT1JNKElPUykgJiYgX19JUEhPTkVf
T1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAwMDAwKSB8fCBVU0UoU09VUCkKICNpZm5kZWYg
VVNFX05FVFdPUktfU0VTU0lPTgogI2RlZmluZSBVU0VfTkVUV09SS19TRVNTSU9OIDEKICNlbmRp
Zgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292064</attachid>
            <date>2016-10-19 06:50:19 -0700</date>
            <delta_ts>2016-10-19 09:11:41 -0700</delta_ts>
            <desc>Rebased patch</desc>
            <filename>wk2-network-session-soup.diff</filename>
            <type>text/plain</type>
            <size>81853</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktp
dDIvQ01ha2VMaXN0cy50eHQKaW5kZXggOWI0MzNkZS4uMWFjMTA2YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0
cy50eHQKQEAgLTIxNyw2ICsyMTcsNyBAQCBzZXQoV2ViS2l0Ml9TT1VSQ0VTCiAgICAgTmV0d29y
a1Byb2Nlc3MvRG93bmxvYWRzL0Jsb2JEb3dubG9hZENsaWVudC5jcHAKICAgICBOZXR3b3JrUHJv
Y2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuY3BwCiAgICAgTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRz
L0Rvd25sb2FkTWFuYWdlci5jcHAKKyAgICBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvUGVuZGlu
Z0Rvd25sb2FkLmNwcAogCiAgICAgUGxhdGZvcm0vTG9nZ2luZy5jcHAKICAgICBQbGF0Zm9ybS9N
b2R1bGUuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMDU4Yzc1NC4uNTQwZmVhZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDExNyBAQAorMjAxNi0xMC0xOCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lh
QGlnYWxpYS5jb20+CisKKyAgICAgICAgW1NPVVBdIEFkZCBOZXR3b3JrU2Vzc2lvbiBpbXBsZW1l
bnRhdGlvbiBhbmQgc3dpdGNoIHRvIHVzZSBpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNTk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQmFzaWNhbGx5IG1vdmUgdGhlIFJlc291cmNlSGFuZGxlIGlt
cGxlbWVudGF0aW9uIHRvIHRoZSBuZXR3b3JrIHByb2Nlc3MsIGJ1dCBtb2Rlcm5pemVkLCBjbGVh
bmVkIHVwLCBhbmQgYWRhcHRlZAorICAgICAgICB0byB0aGUgTmV0d29ya1Nlc3Npb24gbW9kZWwu
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDogQWRkIG5ldyBmaWxlcyB0byBjb21waWxhdGlv
bi4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpEb3dubG9hZDo6RG93bmxvYWQpOiBVc2UgdGhlIHNhbWUgY29kZSBmb3Ig
YWxsIHBvcnRzIHVzaW5nIE5ldHdvcmtTZXNzaW9uIGFuZCBhZGQgbWlzc2luZworICAgICAgICBp
bml0aWFsaXphdGlvbiBvZiBtX3Nlc3Npb25JRC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9E
b3dubG9hZHMvRG93bmxvYWQuaDoKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWQ6OkRvd25sb2Fk
KTogRGVmaW5lIFBsYXRmb3JtRG93bmxvYWRUYXNrUmVmIG9uIGV2ZXJ5IHBsYXRmb3JtIHRvIG1h
a2UgdGhlIGNvbnN0cnVjdG9yIGNvbW1vbiB0bworICAgICAgICBhbGwgcG9ydHMgdXNpbmcgTmV0
d29ya1Nlc3Npb24uCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL3NvdXAvRG93
bmxvYWRTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWQ6OmNhbmNlbE5ldHdvcmtM
b2FkKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWQ6OnBsYXRmb3JtRGlkRmluaXNoKToKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suaDoKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0RhdGFUYXNrOjpwZW5kaW5nRG93bmxvYWRJRCk6IE1ha2UgY29uc3QuCisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6cGVuZGluZ0Rvd25sb2FkKTogRGl0dG8uCisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6cGVuZGluZ0Rvd25sb2FkTG9jYXRpb24p
OiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjppc0Rvd25sb2FkKTog
SGVscGVyIHRvIGNoZWNrIGlmIHRoZSB0YXNrIGlzIGEgZG93bmxvYWQuCisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrTG9h
ZDo6ZGlkUmVjZWl2ZVJlc3BvbnNlTmV0d29ya1Nlc3Npb24pOiBVc2UgTmV0d29ya0RhdGFUYXNr
Ojppc0Rvd25sb2FkKCkuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6TmV0d29ya1Byb2Nlc3MpOiBO
ZXR3b3JrU2Vzc2lvbjo6c2V0Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyKCkgaXMgQ29jb2Egb25seS4K
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oOgorICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW06CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtTZXNzaW9uOjpuZXR3b3JrU3RvcmFnZVNlc3Npb24pOiBNYWtlIGNvbnN0Lgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6Ok5ldHdvcmtEYXRhVGFzayk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6fk5ldHdvcmtEYXRhVGFzayk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6c2NoZWR1bGVGYWlsdXJlKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpmYWlsdXJlVGltZXJGaXJlZCk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6c3VnZ2VzdGVkRmlsZW5hbWUpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OnNldFN1Z2dlc3RlZEZpbGVuYW1lKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpzZXRQZW5kaW5nRG93bmxvYWRMb2NhdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6YWxsb3dzU3BlY2lmaWNIVFRQU0NlcnRp
ZmljYXRlRm9ySG9zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6Y3JlYXRl
UmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6Y2xlYXJSZXF1ZXN0
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpyZXN1bWUpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OnN1c3BlbmQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrRGF0YVRhc2s6OmNhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6
aW52YWxpZGF0ZUFuZENhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6
c3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OnRpbWVvdXRGaXJlZCk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6c3RhcnRUaW1lb3V0KToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpzdG9wVGltZW91dCk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtEYXRhVGFzazo6c2VuZFJlcXVlc3RDYWxsYmFjayk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtEYXRhVGFzazo6ZGlkU2VuZFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrRGF0YVRhc2s6OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtEYXRhVGFzazo6dGxzRXJyb3JzQ2hhbmdlZENhbGxiYWNrKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0RhdGFUYXNrOjp0bHNFcnJvcnNDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0RhdGFUYXNrOjphcHBseUF1dGhlbnRpY2F0aW9uVG9SZXF1ZXN0KToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjphdXRoZW50aWNhdGVDYWxsYmFjayk6CisgICAgICAg
IChXZWJLaXQ6OmlzQXV0aGVudGljYXRpb25GYWlsdXJlU3RhdHVzQ29kZSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6YXV0aGVudGljYXRlKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0RhdGFUYXNrOjpjb250aW51ZUF1dGhlbnRpY2F0ZSk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtEYXRhVGFzazo6c2tpcElucHV0U3RyZWFtRm9yUmVkaXJlY3Rpb25DYWxsYmFjayk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6c2tpcElucHV0U3RyZWFtRm9yUmVk
aXJlY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OmRpZEZpbmlzaFNr
aXBJbnB1dFN0cmVhbUZvclJlZGlyZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6c2hvdWxkUmVk
aXJlY3RBc0dFVCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6c2hvdWxkU3Rh
cnRIVFRQUmVkaXJlY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OmNv
bnRpbnVlSFRUUFJlZGlyZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNr
OjpyZWFkQ2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OnJlYWQp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OmRpZFJlYWQpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OmRpZEZpbmlzaFJlYWQpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrRGF0YVRhc2s6OnJlcXVlc3ROZXh0UGFydENhbGxiYWNrKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0RhdGFUYXNrOjpyZXF1ZXN0TmV4dFBhcnQpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrRGF0YVRhc2s6OmRpZFJlcXVlc3ROZXh0UGFydCk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtEYXRhVGFzazo6ZGlkRmluaXNoUmVxdWVzdE5leHRQYXJ0KToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0RhdGFUYXNrOjpnb3RIZWFkZXJzQ2FsbGJhY2spOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrRGF0YVRhc2s6OmRpZEdldEhlYWRlcnMpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrRGF0YVRhc2s6Ondyb3RlQm9keURhdGFDYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtEYXRhVGFzazo6ZGlkV3JpdGVCb2R5RGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtEYXRhVGFzazo6ZG93bmxvYWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRh
c2s6OndyaXRlRG93bmxvYWRDYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRh
VGFzazo6d3JpdGVEb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6
ZGlkV3JpdGVEb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6ZGlk
RmluaXNoRG93bmxvYWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OmRpZEZh
aWxEb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6Y2xlYW5Eb3du
bG9hZEZpbGVzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpkaWRGYWlsKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpuZXR3b3JrRXZlbnRDYWxsYmFjayk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6bmV0d29ya0V2ZW50KToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpzdGFydGluZ0NhbGxiYWNrKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpyZXF1ZXN0U3RhcnRlZENhbGxiYWNrKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpkaWRTdGFydFJlcXVlc3QpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OnJlc3RhcnRlZENhbGxiYWNrKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0RhdGFUYXNrOjpkaWRSZXN0YXJ0KToKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtTZXNzaW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbjo6ZGVm
YXVsdFNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbjo6bmV0d29ya1N0
b3JhZ2VTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246Ok5ldHdvcmtT
ZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246On5OZXR3b3JrU2Vzc2lv
bik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjpzb3VwU2Vzc2lvbik6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjppbnZhbGlkYXRlQW5kQ2FuY2VsKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246OmNsZWFyQ3JlZGVudGlhbHMpOgorICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL3NvdXAvUmVtb3RlTmV0d29ya2luZ0NvbnRleHRTb3VwLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVByaXZhdGVCcm93
c2luZ1Nlc3Npb24pOiBBZGQgaW1wbGVtZW50YXRpb24gbWF0Y2hpbmcKKyAgICAgICAgV2ViRnJh
bWVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbigpLgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6c3RvcmFnZVNlc3Npb24pOiBE
byBub3QgYWx3YXlzIHJldHVybiB0aGUgZGVmYXVsdCBzZXNzaW9uIGlmIHRoZSBnaXZlbiBvbmUg
aXMKKyAgICAgICAgaW4gdGhlIGdsb2JhbCBtYXAuCisgICAgICAgICogUGxhdGZvcm1FZmwuY21h
a2U6IEFkIG5ldyBmaWxlcyB0byBjb21waWxhdGlvbi4KKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5j
bWFrZTogRGl0dG8uCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9zb3VwL1dl
YkZyYW1lTmV0d29ya2luZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZU5l
dHdvcmtpbmdDb250ZXh0OjplbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKTogQWxzbyBjcmVh
dGUgYSBOZXR3b3JrU2Vzc2lvbi4KKyAgICAgICAgKiBjb25maWcuaDogRW5hYmxlIE5ldHdvcmtT
ZXNzaW9uIHVuY29uZGl0aW9uYWxseSBmb3IgU291cCBiYXNlZCBwb3J0cy4KKwogMjAxNi0xMC0x
OSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAg
TmV0d29ya1Nlc3Npb246IHVwZGF0ZWRSZXF1ZXN0IHBhcmFtZXRlciBvZiBOZXR3b3JrUHJvY2Vz
czo6ZmluZFBlbmRpbmdEb3dubG9hZExvY2F0aW9uIGlzIHVudXNlZCBzaW5jZSByMjA2OTg4CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxv
YWQuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2Fk
LmNwcAppbmRleCA5YmUyMmVmLi42NDk0OGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5jcHAKQEAgLTMzLDYgKzMzLDcgQEAK
ICNpbmNsdWRlICJEb3dubG9hZE1hbmFnZXIuaCIKICNpbmNsdWRlICJEb3dubG9hZFByb3h5TWVz
c2FnZXMuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNr
LmgiCiAjaW5jbHVkZSAiU2FuZGJveEV4dGVuc2lvbi5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1
bWVudENvZGVycy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KQEAgLTQz
LDExICs0NCwxMiBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktp
dCB7CiAKLSNpZiBVU0UoTkVUV09SS19TRVNTSU9OKSAmJiBQTEFURk9STShDT0NPQSkKLURvd25s
b2FkOjpEb3dubG9hZChEb3dubG9hZE1hbmFnZXImIGRvd25sb2FkTWFuYWdlciwgRG93bmxvYWRJ
RCBkb3dubG9hZElELCBOU1VSTFNlc3Npb25Eb3dubG9hZFRhc2sqIGRvd25sb2FkLCBjb25zdCBX
ZWJDb3JlOjpTZXNzaW9uSUQmIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWROYW1l
KQorI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCitEb3dubG9hZDo6RG93bmxvYWQoRG93bmxvYWRN
YW5hZ2VyJiBkb3dubG9hZE1hbmFnZXIsIERvd25sb2FkSUQgZG93bmxvYWRJRCwgUGxhdGZvcm1E
b3dubG9hZFRhc2tSZWYgZG93bmxvYWQsIGNvbnN0IFdlYkNvcmU6OlNlc3Npb25JRCYgc2Vzc2lv
bklELCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZE5hbWUpCiAgICAgOiBtX2Rvd25sb2FkTWFuYWdl
cihkb3dubG9hZE1hbmFnZXIpCiAgICAgLCBtX2Rvd25sb2FkSUQoZG93bmxvYWRJRCkKICAgICAs
IG1fZG93bmxvYWQoZG93bmxvYWQpCisgICAgLCBtX3Nlc3Npb25JRChzZXNzaW9uSUQpCiAgICAg
LCBtX3N1Z2dlc3RlZE5hbWUoc3VnZ2VzdGVkTmFtZSkKIHsKICAgICBBU1NFUlQobV9kb3dubG9h
ZElELmRvd25sb2FkSUQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L0Rvd25sb2Fkcy9Eb3dubG9hZC5oCmluZGV4IDc5ODlmN2UuLmZkYzU4MzAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5oCkBAIC00
Nyw2ICs0NywxOSBAQCBPQkpDX0NMQVNTIFdLRG93bmxvYWRBc0RlbGVnYXRlOwogI2VuZGlmCiAj
ZW5kaWYKIAorI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisjaWYgUExBVEZPUk0oQ09DT0EpCit0
eXBlZGVmIGlkPE5TVVJMU2Vzc2lvbkRvd25sb2FkVGFzaz4gUGxhdGZvcm1Eb3dubG9hZFRhc2tS
ZWY7CisjZWxpZiBVU0UoU09VUCkKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgTmV0d29ya0Rh
dGFUYXNrOworfQordHlwZWRlZiBXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzayogUGxhdGZvcm1Eb3du
bG9hZFRhc2tSZWY7CisjZWxzZQordHlwZWRlZiB2b2lkKiBQbGF0Zm9ybURvd25sb2FkVGFza1Jl
ZjsKKyNlbmRpZgorI2VuZGlmCisKIG5hbWVzcGFjZSBJUEMgewogY2xhc3MgRGF0YVJlZmVyZW5j
ZTsKIH0KQEAgLTY4LDggKzgxLDggQEAgY2xhc3MgV2ViUGFnZTsKIGNsYXNzIERvd25sb2FkIDog
cHVibGljIElQQzo6TWVzc2FnZVNlbmRlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRG93
bmxvYWQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSNpZiBVU0UoTkVUV09S
S19TRVNTSU9OKSAmJiBQTEFURk9STShDT0NPQSkKLSAgICBEb3dubG9hZChEb3dubG9hZE1hbmFn
ZXImLCBEb3dubG9hZElELCBOU1VSTFNlc3Npb25Eb3dubG9hZFRhc2sqLCBjb25zdCBXZWJDb3Jl
OjpTZXNzaW9uSUQmIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSA9
IHsgfSk7CisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKyAgICBEb3dubG9hZChEb3dubG9hZE1h
bmFnZXImLCBEb3dubG9hZElELCBQbGF0Zm9ybURvd25sb2FkVGFza1JlZiwgY29uc3QgV2ViQ29y
ZTo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUg
PSB7IH0pOwogI2VuZGlmCiAgICAgRG93bmxvYWQoRG93bmxvYWRNYW5hZ2VyJiwgRG93bmxvYWRJ
RCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgU3RyaW5nJiBzdWdnZXN0
ZWRGaWxlbmFtZSA9IHsgfSk7CiAKQEAgLTEyNiwxNSArMTM5LDIxIEBAIHByaXZhdGU6CiAKICAg
ICBSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4gbV9zYW5kYm94RXh0ZW5zaW9uOwogCi0jaWYgUExB
VEZPUk0oQ09DT0EpCiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKyNpZiBQTEFURk9STShDT0NP
QSkKICAgICBSZXRhaW5QdHI8TlNVUkxTZXNzaW9uRG93bmxvYWRUYXNrPiBtX2Rvd25sb2FkOwot
ICAgIFdlYkNvcmU6OlNlc3Npb25JRCBtX3Nlc3Npb25JRDsKKyNlbGlmIFVTRShTT1VQKQorICAg
IFJlZlB0cjxOZXR3b3JrRGF0YVRhc2s+IG1fZG93bmxvYWQ7CiAjZWxzZQorICAgIFBsYXRmb3Jt
RG93bmxvYWRUYXNrUmVmIG1fZG93bmxvYWQ7CisjZW5kaWYKKyAgICBXZWJDb3JlOjpTZXNzaW9u
SUQgbV9zZXNzaW9uSUQ7CisjZWxzZSAvLyBVU0UoTkVUV09SS19TRVNTSU9OKQorI2lmIFBMQVRG
T1JNKENPQ09BKQogICAgIFJldGFpblB0cjxOU1VSTERvd25sb2FkPiBtX25zVVJMRG93bmxvYWQ7
CiAgICAgUmV0YWluUHRyPFdLRG93bmxvYWRBc0RlbGVnYXRlPiBtX2RlbGVnYXRlOwogI2VuZGlm
Ci0jZW5kaWYKKyNlbmRpZiAvLyBVU0UoTkVUV09SS19TRVNTSU9OKQogICAgIHN0ZDo6dW5pcXVl
X3B0cjxXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUNsaWVudD4gbV9kb3dubG9hZENsaWVudDsKICAg
ICBSZWZQdHI8V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU+IG1fcmVzb3VyY2VIYW5kbGU7CiAgICAg
U3RyaW5nIG1fc3VnZ2VzdGVkTmFtZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL0Rvd25sb2Fkcy9zb3VwL0Rvd25sb2FkU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvc291cC9Eb3dubG9hZFNvdXAuY3BwCmluZGV4IDY4
MDc5MTcuLjgyZThjNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L0Rvd25sb2Fkcy9zb3VwL0Rvd25sb2FkU291cC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvRG93bmxvYWRzL3NvdXAvRG93bmxvYWRTb3VwLmNwcApAQCAtMjgsMjA0ICsy
OCwxMyBAQAogI2luY2x1ZGUgIkRvd25sb2FkLmgiCiAKICNpbmNsdWRlICJEYXRhUmVmZXJlbmNl
LmgiCi0jaW5jbHVkZSAiRG93bmxvYWRTb3VwRXJyb3JzLmgiCisjaW5jbHVkZSAiTmV0d29ya0Rh
dGFUYXNrLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oPgotI2luY2x1ZGUgPGdpby9naW8uaD4K
LSNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4K
LSNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgotCi0jaWYgUExBVEZPUk0oR1RLKQotI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+
Ci0jZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewogCi1jbGFzcyBEb3dubG9hZENsaWVudCBmaW5hbCA6IHB1YmxpYyBSZXNvdXJjZUhhbmRsZUNs
aWVudCB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRG93bmxvYWRDbGllbnQpOwotcHVibGlj
OgotICAgIERvd25sb2FkQ2xpZW50KERvd25sb2FkJiBkb3dubG9hZCkKLSAgICAgICAgOiBtX2Rv
d25sb2FkKGRvd25sb2FkKQotICAgICAgICAsIG1faGFuZGxlUmVzcG9uc2VMYXRlcihSdW5Mb29w
OjptYWluKCksIHRoaXMsICZEb3dubG9hZENsaWVudDo6aGFuZGxlUmVzcG9uc2UpCi0gICAgICAg
ICwgbV9hbGxvd092ZXJ3cml0ZShmYWxzZSkKLSAgICB7Ci0gICAgfQotCi0gICAgfkRvd25sb2Fk
Q2xpZW50KCkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBkZWxldGVGaWxlc0lmTmVlZGVkKCkK
LSAgICB7Ci0gICAgICAgIGlmIChtX2Rlc3RpbmF0aW9uRmlsZSkKLSAgICAgICAgICAgIGdfZmls
ZV9kZWxldGUobV9kZXN0aW5hdGlvbkZpbGUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOwotCi0g
ICAgICAgIGlmIChtX2ludGVybWVkaWF0ZUZpbGUpIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2Rl
c3RpbmF0aW9uRmlsZSk7Ci0gICAgICAgICAgICBnX2ZpbGVfZGVsZXRlKG1faW50ZXJtZWRpYXRl
RmlsZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2
b2lkIGRvd25sb2FkRmFpbGVkKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQotICAgIHsKLSAg
ICAgICAgZGVsZXRlRmlsZXNJZk5lZWRlZCgpOwotICAgICAgICBtX2Rvd25sb2FkLmRpZEZhaWwo
ZXJyb3IsIElQQzo6RGF0YVJlZmVyZW5jZSgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGRpZFJlY2Vp
dmVSZXNwb25zZShSZXNvdXJjZUhhbmRsZSosIFJlc291cmNlUmVzcG9uc2UmJiByZXNwb25zZSkg
b3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIG1fcmVzcG9uc2UgPSBXVEZNb3ZlKHJlc3BvbnNlKTsK
LSAgICAgICAgbV9kb3dubG9hZC5kaWRSZWNlaXZlUmVzcG9uc2UobV9yZXNwb25zZSk7Ci0KLSAg
ICAgICAgaWYgKG1fcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSA+PSA0MDApIHsKLSAgICAgICAg
ICAgIGRvd25sb2FkRmFpbGVkKHBsYXRmb3JtRG93bmxvYWROZXR3b3JrRXJyb3IobV9yZXNwb25z
ZS5odHRwU3RhdHVzQ29kZSgpLCBtX3Jlc3BvbnNlLnVybCgpLCBtX3Jlc3BvbnNlLmh0dHBTdGF0
dXNUZXh0KCkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIFN0
cmluZyBzdWdnZXN0ZWRGaWxlbmFtZSA9IG1fcmVzcG9uc2Uuc3VnZ2VzdGVkRmlsZW5hbWUoKTsK
LSAgICAgICAgaWYgKHN1Z2dlc3RlZEZpbGVuYW1lLmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
VVJMIHVybCA9IG1fcmVzcG9uc2UudXJsKCk7Ci0gICAgICAgICAgICB1cmwuc2V0UXVlcnkoU3Ry
aW5nKCkpOwotICAgICAgICAgICAgdXJsLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOwotICAg
ICAgICAgICAgc3VnZ2VzdGVkRmlsZW5hbWUgPSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXModXJs
Lmxhc3RQYXRoQ29tcG9uZW50KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nIGRlc3Rp
bmF0aW9uVVJJID0gbV9kb3dubG9hZC5kZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxl
bmFtZShzdWdnZXN0ZWRGaWxlbmFtZSwgbV9hbGxvd092ZXJ3cml0ZSk7Ci0gICAgICAgIGlmIChk
ZXN0aW5hdGlvblVSSS5pc0VtcHR5KCkpIHsKLSNpZiBQTEFURk9STShHVEspCi0gICAgICAgICAg
ICBHVW5pcXVlUHRyPGNoYXI+IGJ1ZmZlcihnX3N0cmR1cF9wcmludGYoXygiQ2Fubm90IGRldGVy
bWluZSBkZXN0aW5hdGlvbiBVUkkgZm9yIGRvd25sb2FkIHdpdGggc3VnZ2VzdGVkIGZpbGVuYW1l
ICVzIiksIHN1Z2dlc3RlZEZpbGVuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICAgICAgICAgIFN0
cmluZyBlcnJvck1lc3NhZ2UgPSBTdHJpbmc6OmZyb21VVEY4KGJ1ZmZlci5nZXQoKSk7Ci0jZWxz
ZQotICAgICAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcoIkNhbm5vdCBk
ZXRlcm1pbmUgZGVzdGluYXRpb24gVVJJIGZvciBkb3dubG9hZCB3aXRoIHN1Z2dlc3RlZCBmaWxl
bmFtZSAiLCBzdWdnZXN0ZWRGaWxlbmFtZSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGRvd25sb2Fk
RmFpbGVkKHBsYXRmb3JtRG93bmxvYWREZXN0aW5hdGlvbkVycm9yKG1fcmVzcG9uc2UsIGVycm9y
TWVzc2FnZSkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9k
ZXN0aW5hdGlvbkZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfdXJpKGRlc3RpbmF0aW9u
VVJJLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICAgICAgR1JlZlB0cjxHRmlsZU91dHB1dFN0cmVhbT4g
b3V0cHV0U3RyZWFtOwotICAgICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAg
ICAgIGlmIChtX2FsbG93T3ZlcndyaXRlKQotICAgICAgICAgICAgb3V0cHV0U3RyZWFtID0gYWRv
cHRHUmVmKGdfZmlsZV9yZXBsYWNlKG1fZGVzdGluYXRpb25GaWxlLmdldCgpLCBudWxscHRyLCBG
QUxTRSwgR19GSUxFX0NSRUFURV9OT05FLCBudWxscHRyLCAmZXJyb3Iub3V0UHRyKCkpKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgb3V0cHV0U3RyZWFtID0gYWRvcHRHUmVmKGdfZmlsZV9j
cmVhdGUobV9kZXN0aW5hdGlvbkZpbGUuZ2V0KCksIEdfRklMRV9DUkVBVEVfTk9ORSwgbnVsbHB0
ciwgJmVycm9yLm91dFB0cigpKSk7Ci0gICAgICAgIGlmICghb3V0cHV0U3RyZWFtKSB7Ci0gICAg
ICAgICAgICBtX2Rlc3RpbmF0aW9uRmlsZS5jbGVhcigpOwotICAgICAgICAgICAgZG93bmxvYWRG
YWlsZWQocGxhdGZvcm1Eb3dubG9hZERlc3RpbmF0aW9uRXJyb3IobV9yZXNwb25zZSwgZXJyb3It
Pm1lc3NhZ2UpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIFN0
cmluZyBpbnRlcm1lZGlhdGVVUkkgPSBkZXN0aW5hdGlvblVSSSArICIud2tkb3dubG9hZCI7Ci0g
ICAgICAgIG1faW50ZXJtZWRpYXRlRmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl91cmko
aW50ZXJtZWRpYXRlVVJJLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICAgICAgbV9vdXRwdXRTdHJlYW0g
PSBhZG9wdEdSZWYoZ19maWxlX3JlcGxhY2UobV9pbnRlcm1lZGlhdGVGaWxlLmdldCgpLCAwLCBU
UlVFLCBHX0ZJTEVfQ1JFQVRFX05PTkUsIDAsICZlcnJvci5vdXRQdHIoKSkpOwotICAgICAgICBp
ZiAoIW1fb3V0cHV0U3RyZWFtKSB7Ci0gICAgICAgICAgICBkb3dubG9hZEZhaWxlZChwbGF0Zm9y
bURvd25sb2FkRGVzdGluYXRpb25FcnJvcihtX3Jlc3BvbnNlLCBlcnJvci0+bWVzc2FnZSkpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9kb3dubG9hZC5kaWRD
cmVhdGVEZXN0aW5hdGlvbihkZXN0aW5hdGlvblVSSSk7Ci0gICAgfQotCi0gICAgdm9pZCBkaWRS
ZWNlaXZlRGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxl
bmd0aCwgaW50IC8qZW5jb2RlZERhdGFMZW5ndGgqLykgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAg
IGlmIChtX2hhbmRsZVJlc3BvbnNlTGF0ZXIuaXNBY3RpdmUoKSkgewotICAgICAgICAgICAgbV9o
YW5kbGVSZXNwb25zZUxhdGVyLnN0b3AoKTsKLSAgICAgICAgICAgIGhhbmRsZVJlc3BvbnNlKCk7
Ci0gICAgICAgIH0KLQotICAgICAgICBnc2l6ZSBieXRlc1dyaXR0ZW47Ci0gICAgICAgIEdVbmlx
dWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKLSAgICAgICAgZ19vdXRwdXRfc3RyZWFtX3dyaXRlX2Fs
bChHX09VVFBVVF9TVFJFQU0obV9vdXRwdXRTdHJlYW0uZ2V0KCkpLCBkYXRhLCBsZW5ndGgsICZi
eXRlc1dyaXR0ZW4sIDAsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgICAgIGlmIChlcnJvcikgewot
ICAgICAgICAgICAgZG93bmxvYWRGYWlsZWQocGxhdGZvcm1Eb3dubG9hZERlc3RpbmF0aW9uRXJy
b3IobV9yZXNwb25zZSwgZXJyb3ItPm1lc3NhZ2UpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICBtX2Rvd25sb2FkLmRpZFJlY2VpdmVEYXRhKGJ5dGVzV3JpdHRlbik7
Ci0gICAgfQotCi0gICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKFJlc291cmNlSGFuZGxlKiwgZG91
YmxlKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgbV9vdXRwdXRTdHJlYW0gPSBudWxscHRyOwot
Ci0gICAgICAgIEFTU0VSVChtX2Rlc3RpbmF0aW9uRmlsZSk7Ci0gICAgICAgIEFTU0VSVChtX2lu
dGVybWVkaWF0ZUZpbGUpOwotICAgICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7Ci0g
ICAgICAgIGlmICghZ19maWxlX21vdmUobV9pbnRlcm1lZGlhdGVGaWxlLmdldCgpLCBtX2Rlc3Rp
bmF0aW9uRmlsZS5nZXQoKSwgR19GSUxFX0NPUFlfT1ZFUldSSVRFLCBudWxscHRyLCBudWxscHRy
LCBudWxscHRyLCAmZXJyb3Iub3V0UHRyKCkpKSB7Ci0gICAgICAgICAgICBkb3dubG9hZEZhaWxl
ZChwbGF0Zm9ybURvd25sb2FkRGVzdGluYXRpb25FcnJvcihtX3Jlc3BvbnNlLCBlcnJvci0+bWVz
c2FnZSkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgR1JlZlB0
cjxHRmlsZUluZm8+IGluZm8gPSBhZG9wdEdSZWYoZ19maWxlX2luZm9fbmV3KCkpOwotICAgICAg
ICBDU3RyaW5nIHVyaSA9IG1fcmVzcG9uc2UudXJsKCkuc3RyaW5nKCkudXRmOCgpOwotICAgICAg
ICBnX2ZpbGVfaW5mb19zZXRfYXR0cmlidXRlX3N0cmluZyhpbmZvLmdldCgpLCAibWV0YWRhdGE6
OmRvd25sb2FkLXVyaSIsIHVyaS5kYXRhKCkpOwotICAgICAgICBnX2ZpbGVfaW5mb19zZXRfYXR0
cmlidXRlX3N0cmluZyhpbmZvLmdldCgpLCAieGF0dHI6OnhkZy5vcmlnaW4udXJsIiwgdXJpLmRh
dGEoKSk7Ci0gICAgICAgIGdfZmlsZV9zZXRfYXR0cmlidXRlc19hc3luYyhtX2Rlc3RpbmF0aW9u
RmlsZS5nZXQoKSwgaW5mby5nZXQoKSwgR19GSUxFX1FVRVJZX0lORk9fTk9ORSwgR19QUklPUklU
WV9ERUZBVUxULCBudWxscHRyLCBudWxscHRyLCBudWxscHRyKTsKLQotICAgICAgICBtX2Rvd25s
b2FkLmRpZEZpbmlzaCgpOwotICAgIH0KLQotICAgIHZvaWQgZGlkRmFpbChSZXNvdXJjZUhhbmRs
ZSosIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAg
ZG93bmxvYWRGYWlsZWQocGxhdGZvcm1Eb3dubG9hZE5ldHdvcmtFcnJvcihlcnJvci5lcnJvckNv
ZGUoKSwgZXJyb3IuZmFpbGluZ1VSTCgpLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpKSk7
Ci0gICAgfQotCi0gICAgdm9pZCBjYW5jZWwoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKLSAgICB7
Ci0gICAgICAgIGhhbmRsZS0+Y2FuY2VsKCk7Ci0gICAgICAgIGRlbGV0ZUZpbGVzSWZOZWVkZWQo
KTsKLSAgICAgICAgbV9kb3dubG9hZC5kaWRDYW5jZWwoSVBDOjpEYXRhUmVmZXJlbmNlKCkpOwot
ICAgIH0KLQotICAgIHZvaWQgaGFuZGxlUmVzcG9uc2UoKQotICAgIHsKLSAgICAgICAgZGlkUmVj
ZWl2ZVJlc3BvbnNlKG51bGxwdHIsIFdURk1vdmUobV9kZWxheWVkUmVzcG9uc2UpKTsKLSAgICB9
Ci0KLSAgICB2b2lkIGhhbmRsZVJlc3BvbnNlTGF0ZXIoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYg
cmVzcG9uc2UpCi0gICAgewotICAgICAgICBBU1NFUlQobV9yZXNwb25zZS5pc051bGwoKSk7Ci0g
ICAgICAgIEFTU0VSVCghbV9oYW5kbGVSZXNwb25zZUxhdGVyLmlzQWN0aXZlKCkpOwotCi0gICAg
ICAgIG1fZGVsYXllZFJlc3BvbnNlID0gcmVzcG9uc2U7Ci0KLSAgICAgICAgLy8gQ2FsbCBkaWRS
ZWNlaXZlUmVzcG9uc2UgaW4gYW4gaWRsZSB0byBtYWtlIHN1cmUgdGhlIGRvd25sb2FkIGlzIGFk
ZGVkCi0gICAgICAgIC8vIHRvIHRoZSBEb3dubG9hZE1hbmFnZXIgZG93bmxvYWRzIG1hcC4KLSAg
ICAgICAgbV9oYW5kbGVSZXNwb25zZUxhdGVyLnN0YXJ0T25lU2hvdCgwKTsKLSAgICB9Ci0KLSAg
ICBEb3dubG9hZCYgbV9kb3dubG9hZDsKLSAgICBHUmVmUHRyPEdGaWxlT3V0cHV0U3RyZWFtPiBt
X291dHB1dFN0cmVhbTsKLSAgICBSZXNvdXJjZVJlc3BvbnNlIG1fcmVzcG9uc2U7Ci0gICAgR1Jl
ZlB0cjxHRmlsZT4gbV9kZXN0aW5hdGlvbkZpbGU7Ci0gICAgR1JlZlB0cjxHRmlsZT4gbV9pbnRl
cm1lZGlhdGVGaWxlOwotICAgIFJlc291cmNlUmVzcG9uc2UgbV9kZWxheWVkUmVzcG9uc2U7Ci0g
ICAgUnVuTG9vcDo6VGltZXI8RG93bmxvYWRDbGllbnQ+IG1faGFuZGxlUmVzcG9uc2VMYXRlcjsK
LSAgICBib29sIG1fYWxsb3dPdmVyd3JpdGU7Ci19OwotCi12b2lkIERvd25sb2FkOjpzdGFydE5l
dHdvcmtMb2FkKCkKLXsKLSAgICBBU1NFUlQoIW1fZG93bmxvYWRDbGllbnQpOwotICAgIEFTU0VS
VCghbV9yZXNvdXJjZUhhbmRsZSk7Ci0gICAgbV9kb3dubG9hZENsaWVudCA9IHN0ZDo6bWFrZV91
bmlxdWU8RG93bmxvYWRDbGllbnQ+KCp0aGlzKTsKLSAgICBtX3Jlc291cmNlSGFuZGxlID0gUmVz
b3VyY2VIYW5kbGU6OmNyZWF0ZSgwLCBtX3JlcXVlc3QsIG1fZG93bmxvYWRDbGllbnQuZ2V0KCks
IGZhbHNlLCB0cnVlKTsKLSAgICBkaWRTdGFydCgpOwotfQotCi12b2lkIERvd25sb2FkOjpzdGFy
dE5ldHdvcmtMb2FkV2l0aEhhbmRsZShSZXNvdXJjZUhhbmRsZSogcmVzb3VyY2VIYW5kbGUsIGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQotewotICAgIEFTU0VSVCghbV9kb3dubG9h
ZENsaWVudCk7Ci0gICAgQVNTRVJUKCFtX3Jlc291cmNlSGFuZGxlKTsKLSAgICBtX2Rvd25sb2Fk
Q2xpZW50ID0gc3RkOjptYWtlX3VuaXF1ZTxEb3dubG9hZENsaWVudD4oKnRoaXMpOwotICAgIG1f
cmVzb3VyY2VIYW5kbGUgPSByZXNvdXJjZUhhbmRsZS0+cmVsZWFzZUZvckRvd25sb2FkKG1fZG93
bmxvYWRDbGllbnQuZ2V0KCkpOwotICAgIGRpZFN0YXJ0KCk7Ci0gICAgc3RhdGljX2Nhc3Q8RG93
bmxvYWRDbGllbnQqPihtX2Rvd25sb2FkQ2xpZW50LmdldCgpKS0+aGFuZGxlUmVzcG9uc2VMYXRl
cihyZXNwb25zZSk7Ci19Ci0KIHZvaWQgRG93bmxvYWQ6OnJlc3VtZShjb25zdCBJUEM6OkRhdGFS
ZWZlcmVuY2UmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUm
KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CkBAIC0yMzMsMTQgKzQyLDggQEAgdm9pZCBEb3du
bG9hZDo6cmVzdW1lKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYsIGNvbnN0IFN0cmluZyYsIGNv
bnN0IFNhbmRib3hFeHQKIAogdm9pZCBEb3dubG9hZDo6Y2FuY2VsTmV0d29ya0xvYWQoKQogewot
ICAgIGlmICghbV9yZXNvdXJjZUhhbmRsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQ2Fu
Y2VsbGluZyB0aGUgZG93bmxvYWQgd2lsbCBkZWxldGUgaXQgYW5kIHBsYXRmb3JtSW52YWxpZGF0
ZSgpIHdpbGwgYmUgY2FsbGVkIGJ5IHRoZSBkZXN0cnVjdG9yLgotICAgIC8vIFNvLCB3ZSBuZWVk
IHRvIHNldCBtX3Jlc291cmNlSGFuZGxlIHRvIG51bGxwdHIgYmVmb3JlIGFjdHVhbGx5IGNhbmNl
bGxpbmcgdGhlIGRvd25sb2FkIHRvIG1ha2Ugc3VyZQotICAgIC8vIGl0IHdvbid0IGJlIGNhbmNl
bGxlZCBhZ2FpbiBieSBwbGF0Zm9ybUludmFsaWRhdGUuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3NjUwLgotICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4g
cmVzb3VyY2VIYW5kbGUgPSBtX3Jlc291cmNlSGFuZGxlLnJlbGVhc2UoKTsKLSAgICBzdGF0aWNf
Y2FzdDxEb3dubG9hZENsaWVudCo+KG1fZG93bmxvYWRDbGllbnQuZ2V0KCkpLT5jYW5jZWwocmVz
b3VyY2VIYW5kbGUuZ2V0KCkpOworICAgIG1fZG93bmxvYWQtPmNhbmNlbCgpOworICAgIGRpZENh
bmNlbCh7IH0pOwogfQogCiB2b2lkIERvd25sb2FkOjpwbGF0Zm9ybUludmFsaWRhdGUoKQpAQCAt
MjQ5LDcgKzUyLDYgQEAgdm9pZCBEb3dubG9hZDo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKIAogdm9p
ZCBEb3dubG9hZDo6cGxhdGZvcm1EaWRGaW5pc2goKQogewotICAgIG1fcmVzb3VyY2VIYW5kbGUg
PSBudWxscHRyOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5oIGIvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmgKaW5kZXggMzI0MmM3ZS4uODg2Yzcw
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFU
YXNrLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNr
LmgKQEAgLTIzLDkgKzIzLDExIEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAgKi8KIAotI2lmbmRlZiBOZXR3b3JrRGF0YVRhc2tfaAotI2RlZmluZSBOZXR3b3JrRGF0YVRh
c2tfaAorI3ByYWdtYSBvbmNlCiAKKyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQorCisjaW5jbHVk
ZSAiRG93bmxvYWRJRC5oIgogI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKICNpbmNsdWRl
IDxXZWJDb3JlL0NyZWRlbnRpYWwuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVyVHlw
ZXMuaD4KQEAgLTQxLDYgKzQzLDEzIEBACiBPQkpDX0NMQVNTIE5TVVJMU2Vzc2lvbkRhdGFUYXNr
OwogI2VuZGlmCiAKKyNpZiBVU0UoU09VUCkKKyNpbmNsdWRlIDxXZWJDb3JlL1Byb3RlY3Rpb25T
cGFjZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXNwb25zZS5oPgorI2luY2x1ZGUg
PHd0Zi9SdW5Mb29wLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorI2VuZGlmCisK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOwogY2xh
c3MgQ3JlZGVudGlhbDsKQEAgLTEwNSwxOSArMTE0LDIzIEBAIHB1YmxpYzoKICAgICB0eXBlZGVm
IHVpbnQ2NF90IFRhc2tJZGVudGlmaWVyOwogICAgIAogICAgIH5OZXR3b3JrRGF0YVRhc2soKTsK
LSAgICAKKworI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHZvaWQgZGlkU2VuZERhdGEodWludDY0
X3QgdG90YWxCeXRlc1NlbnQsIHVpbnQ2NF90IHRvdGFsQnl0ZXNFeHBlY3RlZFRvU2VuZCk7CiAg
ICAgdm9pZCBkaWRSZWNlaXZlQ2hhbGxlbmdlKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlJiwgQ2hhbGxlbmdlQ29tcGxldGlvbkhhbmRsZXImJik7CiAgICAgdm9pZCBkaWRD
b21wbGV0ZVdpdGhFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJik7CiAgICAgdm9p
ZCBkaWRSZWNlaXZlUmVzcG9uc2UoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYmLCBSZXNwb25z
ZUNvbXBsZXRpb25IYW5kbGVyJiYpOwogICAgIHZvaWQgZGlkUmVjZWl2ZURhdGEoUmVmPFdlYkNv
cmU6OlNoYXJlZEJ1ZmZlcj4mJik7CiAgICAgdm9pZCBkaWRCZWNvbWVEb3dubG9hZCgpOwotICAg
IAorCisgICAgdm9pZCB3aWxsUGVyZm9ybUhUVFBSZWRpcmVjdGlvbihXZWJDb3JlOjpSZXNvdXJj
ZVJlc3BvbnNlJiYsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmLCBSZWRpcmVjdENvbXBsZXRp
b25IYW5kbGVyJiYpOworICAgIHZvaWQgdHJhbnNmZXJTYW5kYm94RXh0ZW5zaW9uVG9Eb3dubG9h
ZChEb3dubG9hZCYpOworI2VuZGlmCiAgICAgTmV0d29ya0RhdGFUYXNrQ2xpZW50KiBjbGllbnQo
KSBjb25zdCB7IHJldHVybiBtX2NsaWVudDsgfQogICAgIHZvaWQgY2xlYXJDbGllbnQoKSB7IG1f
Y2xpZW50ID0gbnVsbHB0cjsgfQogICAgIAotICAgIERvd25sb2FkSUQgcGVuZGluZ0Rvd25sb2Fk
SUQoKSB7IHJldHVybiBtX3BlbmRpbmdEb3dubG9hZElEOyB9Ci0gICAgUGVuZGluZ0Rvd25sb2Fk
KiBwZW5kaW5nRG93bmxvYWQoKSB7IHJldHVybiBtX3BlbmRpbmdEb3dubG9hZDsgfQorICAgIERv
d25sb2FkSUQgcGVuZGluZ0Rvd25sb2FkSUQoKSBjb25zdCB7IHJldHVybiBtX3BlbmRpbmdEb3du
bG9hZElEOyB9CisgICAgUGVuZGluZ0Rvd25sb2FkKiBwZW5kaW5nRG93bmxvYWQoKSBjb25zdCB7
IHJldHVybiBtX3BlbmRpbmdEb3dubG9hZDsgfQogICAgIHZvaWQgc2V0UGVuZGluZ0Rvd25sb2Fk
SUQoRG93bmxvYWRJRCBkb3dubG9hZElEKQogICAgIHsKICAgICAgICAgQVNTRVJUKCFtX3BlbmRp
bmdEb3dubG9hZElELmRvd25sb2FkSUQoKSk7CkBAIC0xMzAsMTkgKzE0Myw3MyBAQCBwdWJsaWM6
CiAgICAgICAgIG1fcGVuZGluZ0Rvd25sb2FkID0gJnBlbmRpbmdEb3dubG9hZDsKICAgICB9CiAg
ICAgdm9pZCBzZXRQZW5kaW5nRG93bmxvYWRMb2NhdGlvbihjb25zdCBTdHJpbmcmIGZpbGVuYW1l
LCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmLCBib29sIGFsbG93T3ZlcndyaXRlKTsK
LSAgICBjb25zdCBTdHJpbmcmIHBlbmRpbmdEb3dubG9hZExvY2F0aW9uKCkgeyByZXR1cm4gbV9w
ZW5kaW5nRG93bmxvYWRMb2NhdGlvbjsgfQorICAgIGNvbnN0IFN0cmluZyYgcGVuZGluZ0Rvd25s
b2FkTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3BlbmRpbmdEb3dubG9hZExvY2F0aW9uOyB9
CisgICAgYm9vbCBpc0Rvd25sb2FkKCkgY29uc3QgeyByZXR1cm4gISFtX3BlbmRpbmdEb3dubG9h
ZElELmRvd25sb2FkSUQoKTsgfQogCiAgICAgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
JiBmaXJzdFJlcXVlc3QoKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0UmVxdWVzdDsgfQogICAgIFN0
cmluZyBzdWdnZXN0ZWRGaWxlbmFtZSgpOwogICAgIHZvaWQgc2V0U3VnZ2VzdGVkRmlsZW5hbWUo
Y29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCB3aWxsUGVyZm9ybUhUVFBSZWRpcmVjdGlvbihXZWJD
b3JlOjpSZXNvdXJjZVJlc3BvbnNlJiYsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmLCBSZWRp
cmVjdENvbXBsZXRpb25IYW5kbGVyJiYpOwotICAgIHZvaWQgdHJhbnNmZXJTYW5kYm94RXh0ZW5z
aW9uVG9Eb3dubG9hZChEb3dubG9hZCYpOwogICAgIGJvb2wgYWxsb3dzU3BlY2lmaWNIVFRQU0Nl
cnRpZmljYXRlRm9ySG9zdChjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYp
OwogICAgIAogcHJpdmF0ZToKICAgICBOZXR3b3JrRGF0YVRhc2soTmV0d29ya1Nlc3Npb24mLCBO
ZXR3b3JrRGF0YVRhc2tDbGllbnQmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBX
ZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFscywgV2ViQ29yZTo6Q29udGVudFNuaWZmaW5nUG9saWN5
LCBib29sIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpOwogCiAgICAg
Ym9vbCB0cnlQYXNzd29yZEJhc2VkQXV0aGVudGljYXRpb24oY29uc3QgV2ViQ29yZTo6QXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UmLCBjb25zdCBDaGFsbGVuZ2VDb21wbGV0aW9uSGFuZGxlciYpOwor
CisjaWYgVVNFKFNPVVApCisgICAgdm9pZCB0aW1lb3V0RmlyZWQoKTsKKyAgICB2b2lkIHN0YXJ0
VGltZW91dCgpOworICAgIHZvaWQgc3RvcFRpbWVvdXQoKTsKKyAgICB2b2lkIGludmFsaWRhdGVB
bmRDYW5jZWwoKTsKKyAgICB2b2lkIGNyZWF0ZVJlcXVlc3QoY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0Jik7CisgICAgdm9pZCBjbGVhclJlcXVlc3QoKTsKKyAgICBzdGF0aWMgdm9pZCBz
ZW5kUmVxdWVzdENhbGxiYWNrKFNvdXBSZXF1ZXN0KiwgR0FzeW5jUmVzdWx0KiwgTmV0d29ya0Rh
dGFUYXNrKik7CisgICAgdm9pZCBkaWRTZW5kUmVxdWVzdChHUmVmUHRyPEdJbnB1dFN0cmVhbT4m
Jik7CisgICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoKTsKKyAgICBzdGF0aWMgdm9pZCB0bHNF
cnJvcnNDaGFuZ2VkQ2FsbGJhY2soU291cE1lc3NhZ2UqLCBHUGFyYW1TcGVjKiwgTmV0d29ya0Rh
dGFUYXNrKik7CisgICAgdm9pZCB0bHNFcnJvcnNDaGFuZ2VkKCk7CisgICAgdm9pZCBhcHBseUF1
dGhlbnRpY2F0aW9uVG9SZXF1ZXN0KFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOworICAgIHN0
YXRpYyB2b2lkIGF1dGhlbnRpY2F0ZUNhbGxiYWNrKFNvdXBTZXNzaW9uKiwgU291cE1lc3NhZ2Uq
LCBTb3VwQXV0aCosIGdib29sZWFuIHJldHJ5aW5nLCBOZXR3b3JrRGF0YVRhc2sqKTsKKyAgICB2
b2lkIGF1dGhlbnRpY2F0ZShXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYmKTsKKyAg
ICB2b2lkIGNvbnRpbnVlQXV0aGVudGljYXRlKFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlJiYpOworICAgIHN0YXRpYyB2b2lkIHNraXBJbnB1dFN0cmVhbUZvclJlZGlyZWN0aW9uQ2Fs
bGJhY2soR0lucHV0U3RyZWFtKiwgR0FzeW5jUmVzdWx0KiwgTmV0d29ya0RhdGFUYXNrKik7Cisg
ICAgdm9pZCBza2lwSW5wdXRTdHJlYW1Gb3JSZWRpcmVjdGlvbigpOworICAgIHZvaWQgZGlkRmlu
aXNoU2tpcElucHV0U3RyZWFtRm9yUmVkaXJlY3Rpb24oKTsKKyAgICBib29sIHNob3VsZFN0YXJ0
SFRUUFJlZGlyZWN0aW9uKCk7CisgICAgdm9pZCBjb250aW51ZUhUVFBSZWRpcmVjdGlvbigpOwor
ICAgIHN0YXRpYyB2b2lkIHJlYWRDYWxsYmFjayhHSW5wdXRTdHJlYW0qLCBHQXN5bmNSZXN1bHQq
LCBOZXR3b3JrRGF0YVRhc2sqKTsKKyAgICB2b2lkIHJlYWQoKTsKKyAgICB2b2lkIGRpZFJlYWQo
Z3NzaXplIGJ5dGVzUmVhZCk7CisgICAgdm9pZCBkaWRGaW5pc2hSZWFkKCk7CisgICAgc3RhdGlj
IHZvaWQgcmVxdWVzdE5leHRQYXJ0Q2FsbGJhY2soU291cE11bHRpcGFydElucHV0U3RyZWFtKiwg
R0FzeW5jUmVzdWx0KiwgTmV0d29ya0RhdGFUYXNrKik7CisgICAgdm9pZCByZXF1ZXN0TmV4dFBh
cnQoKTsKKyAgICB2b2lkIGRpZFJlcXVlc3ROZXh0UGFydChHUmVmUHRyPEdJbnB1dFN0cmVhbT4m
Jik7CisgICAgdm9pZCBkaWRGaW5pc2hSZXF1ZXN0TmV4dFBhcnQoKTsKKyAgICBzdGF0aWMgdm9p
ZCBnb3RIZWFkZXJzQ2FsbGJhY2soU291cE1lc3NhZ2UqLCBOZXR3b3JrRGF0YVRhc2sqKTsKKyAg
ICB2b2lkIGRpZEdldEhlYWRlcnMoKTsKKyAgICBzdGF0aWMgdm9pZCB3cm90ZUJvZHlEYXRhQ2Fs
bGJhY2soU291cE1lc3NhZ2UqLCBTb3VwQnVmZmVyKiwgTmV0d29ya0RhdGFUYXNrKik7CisgICAg
dm9pZCBkaWRXcml0ZUJvZHlEYXRhKHVpbnQ2NF90IGJ5dGVzU2VudCk7CisgICAgdm9pZCBkb3du
bG9hZCgpOworICAgIHN0YXRpYyB2b2lkIHdyaXRlRG93bmxvYWRDYWxsYmFjayhHT3V0cHV0U3Ry
ZWFtKiwgR0FzeW5jUmVzdWx0KiwgTmV0d29ya0RhdGFUYXNrKik7CisgICAgdm9pZCB3cml0ZURv
d25sb2FkKCk7CisgICAgdm9pZCBkaWRXcml0ZURvd25sb2FkKGdzaXplIGJ5dGVzV3JpdHRlbik7
CisgICAgdm9pZCBkaWRGYWlsRG93bmxvYWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYp
OworICAgIHZvaWQgZGlkRmluaXNoRG93bmxvYWQoKTsKKyAgICB2b2lkIGNsZWFuRG93bmxvYWRG
aWxlcygpOworICAgIHZvaWQgZGlkRmFpbChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJik7
CisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCisgICAgc3RhdGljIHZvaWQgbmV0d29ya0V2ZW50Q2Fs
bGJhY2soU291cE1lc3NhZ2UqLCBHU29ja2V0Q2xpZW50RXZlbnQsIEdJT1N0cmVhbSosIE5ldHdv
cmtEYXRhVGFzayopOworICAgIHZvaWQgbmV0d29ya0V2ZW50KEdTb2NrZXRDbGllbnRFdmVudCk7
CisjaWYgU09VUF9DSEVDS19WRVJTSU9OKDIsIDQ5LCA5MSkKKyAgICBzdGF0aWMgdm9pZCBzdGFy
dGluZ0NhbGxiYWNrKFNvdXBNZXNzYWdlKiwgTmV0d29ya0RhdGFUYXNrKik7CisjZWxzZQorICAg
IHN0YXRpYyB2b2lkIHJlcXVlc3RTdGFydGVkQ2FsbGJhY2soU291cFNlc3Npb24qLCBTb3VwTWVz
c2FnZSosIFNvdXBTb2NrZXQqLCBOZXR3b3JrRGF0YVRhc2sqKTsKKyNlbmRpZgorICAgIHZvaWQg
ZGlkU3RhcnRSZXF1ZXN0KCk7CisgICAgc3RhdGljIHZvaWQgcmVzdGFydGVkQ2FsbGJhY2soU291
cE1lc3NhZ2UqLCBOZXR3b3JrRGF0YVRhc2sqKTsKKyAgICB2b2lkIGRpZFJlc3RhcnQoKTsKKyNl
bmRpZgorI2VuZGlmCiAgICAgCiAgICAgZW51bSBGYWlsdXJlVHlwZSB7CiAgICAgICAgIE5vRmFp
bHVyZSwKQEAgLTE3Miw2ICsyMzksMzAgQEAgcHJpdmF0ZToKICNpZiBQTEFURk9STShDT0NPQSkK
ICAgICBSZXRhaW5QdHI8TlNVUkxTZXNzaW9uRGF0YVRhc2s+IG1fdGFzazsKICNlbmRpZgorI2lm
IFVTRShTT1VQKQorICAgIFN0YXRlIG1fc3RhdGUgeyBTdGF0ZTo6U3VzcGVuZGVkIH07CisgICAg
V2ViQ29yZTo6Q29udGVudFNuaWZmaW5nUG9saWN5IG1fc2hvdWxkQ29udGVudFNuaWZmOworICAg
IEdSZWZQdHI8U291cFJlcXVlc3Q+IG1fc291cFJlcXVlc3Q7CisgICAgR1JlZlB0cjxTb3VwTWVz
c2FnZT4gbV9zb3VwTWVzc2FnZTsKKyAgICBHUmVmUHRyPEdJbnB1dFN0cmVhbT4gbV9pbnB1dFN0
cmVhbTsKKyAgICBHUmVmUHRyPFNvdXBNdWx0aXBhcnRJbnB1dFN0cmVhbT4gbV9tdWx0aXBhcnRJ
bnB1dFN0cmVhbTsKKyAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gbV9jYW5jZWxsYWJsZTsKKyAg
ICBHUmVmUHRyPEdBc3luY1Jlc3VsdD4gbV9wZW5kaW5nUmVzdWx0OworICAgIFdlYkNvcmU6OlBy
b3RlY3Rpb25TcGFjZSBtX3Byb3RlY3Rpb25TcGFjZUZvclBlcnNpc3RlbnRTdG9yYWdlOworICAg
IFdlYkNvcmU6OkNyZWRlbnRpYWwgbV9jcmVkZW50aWFsRm9yUGVyc2lzdGVudFN0b3JhZ2U7Cisg
ICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNlOworICAgIFZlY3RvcjxjaGFy
PiBtX3JlYWRCdWZmZXI7CisgICAgdW5zaWduZWQgbV9yZWRpcmVjdENvdW50IHsgMCB9OworICAg
IHVpbnQ2NF90IG1fYm9keURhdGFUb3RhbEJ5dGVzU2VudCB7IDAgfTsKKyAgICBHUmVmUHRyPEdG
aWxlPiBtX2Rvd25sb2FkRGVzdGluYXRpb25GaWxlOworICAgIEdSZWZQdHI8R0ZpbGU+IG1fZG93
bmxvYWRJbnRlcm1lZGlhdGVGaWxlOworICAgIEdSZWZQdHI8R091dHB1dFN0cmVhbT4gbV9kb3du
bG9hZE91dHB1dFN0cmVhbTsKKyAgICBib29sIG1fYWxsb3dPdmVyd3JpdGVEb3dubG9hZCB7IGZh
bHNlIH07CisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCisgICAgZG91YmxlIG1fc3RhcnRUaW1lIHsg
MCB9OworI2VuZGlmCisgICAgUnVuTG9vcDo6VGltZXI8TmV0d29ya0RhdGFUYXNrPiBtX3RpbWVv
dXRTb3VyY2U7CisjZW5kaWYKICAgICBTdHJpbmcgbV9zdWdnZXN0ZWRGaWxlbmFtZTsKIH07CiAK
QEAgLTE4MSw0ICsyNzIsNCBAQCBXZWJDb3JlOjpDcmVkZW50aWFsIHNlcnZlclRydXN0Q3JlZGVu
dGlhbChjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZQogICAgIAogfQogCi0j
ZW5kaWYKKyNlbmRpZiAvLyBVU0UoTkVUV09SS19TRVNTSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuY3BwIGIvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuY3BwCmluZGV4IGJiMjk5ZjYuLjhmZDRhY2QgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHAKQEAgLTI3
MSw3ICsyNzEsNyBAQCB2b2lkIE5ldHdvcmtMb2FkOjpjb21wbGV0ZUF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlKENoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVyJiYgYwogdm9pZCBOZXR3b3JrTG9hZDo6
ZGlkUmVjZWl2ZVJlc3BvbnNlTmV0d29ya1Nlc3Npb24oUmVzb3VyY2VSZXNwb25zZSYmIHJlc3Bv
bnNlLCBSZXNwb25zZUNvbXBsZXRpb25IYW5kbGVyJiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAobV90YXNrICYmIG1fdGFzay0+cGVu
ZGluZ0Rvd25sb2FkSUQoKS5kb3dubG9hZElEKCkpCisgICAgaWYgKG1fdGFzayAmJiBtX3Rhc2st
PmlzRG93bmxvYWQoKSkKICAgICAgICAgTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLmZpbmRQ
ZW5kaW5nRG93bmxvYWRMb2NhdGlvbigqbV90YXNrLmdldCgpLCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSwgcmVzcG9uc2UpOwogICAgIGVsc2UgaWYgKHNoYXJlZERpZFJlY2VpdmVSZXNwb25z
ZShXVEZNb3ZlKHJlc3BvbnNlKSkgPT0gTmV0d29ya0xvYWRDbGllbnQ6OlNob3VsZENvbnRpbnVl
RGlkUmVjZWl2ZVJlc3BvbnNlOjpZZXMpCiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFBvbGlj
eVVzZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
cy5jcHAKaW5kZXggM2IzOTVkNi4uZGJjNzNkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAtMTAwLDcgKzEwMCw3IEBAIE5ldHdv
cmtQcm9jZXNzOjpOZXR3b3JrUHJvY2VzcygpCiAgICAgYWRkU3VwcGxlbWVudDxBdXRoZW50aWNh
dGlvbk1hbmFnZXI+KCk7CiAgICAgYWRkU3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyPigpOwog
ICAgIGFkZFN1cHBsZW1lbnQ8Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyPigpOwotI2lmIFVTRShORVRX
T1JLX1NFU1NJT04pCisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikgJiYgUExBVEZPUk0oQ09DT0Ep
CiAgICAgTmV0d29ya1Nlc3Npb246OnNldEN1c3RvbVByb3RvY29sTWFuYWdlcihzdXBwbGVtZW50
PEN1c3RvbVByb3RvY29sTWFuYWdlcj4oKSk7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmggYi9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oCmluZGV4IGE4NDBmMWQuLjI5OTczNjkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9u
LmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uaApA
QCAtMzUsOSArMzUsMTQgQEAgT0JKQ19DTEFTUyBXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGU7CiAj
aW5jbHVkZSAiTmV0d29ya0RhdGFUYXNrLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9TZXNzaW9uSUQu
aD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAj
aW5jbHVkZSA8d3RmL1JlZi5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKKyNpZiBV
U0UoU09VUCkKK3R5cGVkZWYgc3RydWN0IF9Tb3VwU2Vzc2lvbiBTb3VwU2Vzc2lvbjsKKyNlbmRp
ZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBOZXR3b3JrU3RvcmFnZVNlc3Npb247CiB9
CkBAIC02Miw5ICs2NywxMyBAQCBwdWJsaWM6CiAKICAgICBXZWJDb3JlOjpTZXNzaW9uSUQgc2Vz
c2lvbklEKCkgY29uc3QgeyByZXR1cm4gbV9zZXNzaW9uSUQ7IH0KIAorI2lmIFVTRShTT1VQKQor
ICAgIFNvdXBTZXNzaW9uKiBzb3VwU2Vzc2lvbigpIGNvbnN0OworI2VuZGlmCisKKyNpZiBQTEFU
Rk9STShDT0NPQSkKICAgICAvLyBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgYW55IE5ldHdvcmtTZXNz
aW9uIGhhcyBiZWVuIGNyZWF0ZWQuCiAgICAgc3RhdGljIHZvaWQgc2V0Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyKEN1c3RvbVByb3RvY29sTWFuYWdlciopOwotI2lmIFBMQVRGT1JNKENPQ09BKQogICAg
IHN0YXRpYyB2b2lkIHNldFNvdXJjZUFwcGxpY2F0aW9uQXVkaXRUb2tlbkRhdGEoUmV0YWluUHRy
PENGRGF0YVJlZj4mJik7CiAgICAgc3RhdGljIHZvaWQgc2V0U291cmNlQXBwbGljYXRpb25CdW5k
bGVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYpOwogICAgIHN0YXRpYyB2b2lkIHNldFNvdXJjZUFw
cGxpY2F0aW9uU2Vjb25kYXJ5SWRlbnRpZmllcihjb25zdCBTdHJpbmcmKTsKQEAgLTc0LDI4ICs4
MywzMSBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIHZvaWQgY2xlYXJDcmVkZW50aWFscygpOwot
CisjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgTmV0d29ya0RhdGFUYXNrKiBkYXRhVGFza0Zvcklk
ZW50aWZpZXIoTmV0d29ya0RhdGFUYXNrOjpUYXNrSWRlbnRpZmllciwgV2ViQ29yZTo6U3RvcmVk
Q3JlZGVudGlhbHMpOwogCiAgICAgdm9pZCBhZGREb3dubG9hZElEKE5ldHdvcmtEYXRhVGFzazo6
VGFza0lkZW50aWZpZXIsIERvd25sb2FkSUQpOwogICAgIERvd25sb2FkSUQgZG93bmxvYWRJRChO
ZXR3b3JrRGF0YVRhc2s6OlRhc2tJZGVudGlmaWVyKTsKICAgICBEb3dubG9hZElEIHRha2VEb3du
bG9hZElEKE5ldHdvcmtEYXRhVGFzazo6VGFza0lkZW50aWZpZXIpOwotICAgIAorI2VuZGlmCisK
IHByaXZhdGU6CiAgICAgTmV0d29ya1Nlc3Npb24oVHlwZSwgV2ViQ29yZTo6U2Vzc2lvbklELCBD
dXN0b21Qcm90b2NvbE1hbmFnZXIqKTsKLSAgICBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Np
b24mIG5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpOworICAgIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdl
U2Vzc2lvbiYgbmV0d29ya1N0b3JhZ2VTZXNzaW9uKCkgY29uc3Q7CiAKICAgICBXZWJDb3JlOjpT
ZXNzaW9uSUQgbV9zZXNzaW9uSUQ7CiAKKyNpZiBQTEFURk9STShDT0NPQSkKICAgICBIYXNoTWFw
PE5ldHdvcmtEYXRhVGFzazo6VGFza0lkZW50aWZpZXIsIE5ldHdvcmtEYXRhVGFzayo+IG1fZGF0
YVRhc2tNYXBXaXRoQ3JlZGVudGlhbHM7CiAgICAgSGFzaE1hcDxOZXR3b3JrRGF0YVRhc2s6OlRh
c2tJZGVudGlmaWVyLCBOZXR3b3JrRGF0YVRhc2sqPiBtX2RhdGFUYXNrTWFwV2l0aG91dENyZWRl
bnRpYWxzOwogICAgIEhhc2hNYXA8TmV0d29ya0RhdGFUYXNrOjpUYXNrSWRlbnRpZmllciwgRG93
bmxvYWRJRD4gbV9kb3dubG9hZE1hcDsKIAotI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIFJldGFp
blB0cjxOU1VSTFNlc3Npb24+IG1fc2Vzc2lvbldpdGhDcmVkZW50aWFsU3RvcmFnZTsKICAgICBS
ZXRhaW5QdHI8V0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlPiBtX3Nlc3Npb25XaXRoQ3JlZGVudGlh
bFN0b3JhZ2VEZWxlZ2F0ZTsKICAgICBSZXRhaW5QdHI8TlNVUkxTZXNzaW9uPiBtX3Nlc3Npb25X
aXRob3V0Q3JlZGVudGlhbFN0b3JhZ2U7CiAgICAgUmV0YWluUHRyPFdLTmV0d29ya1Nlc3Npb25E
ZWxlZ2F0ZT4gbV9zZXNzaW9uV2l0aG91dENyZWRlbnRpYWxTdG9yYWdlRGVsZWdhdGU7CisjZWxp
ZiBVU0UoU09VUCkKKyAgICBIYXNoU2V0PE5ldHdvcmtEYXRhVGFzayo+IG1fZGF0YVRhc2tTZXQ7
CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1tCmluZGV4IGNlZGZjMzkuLmM3NWM3MmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtT
ZXNzaW9uQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2Ev
TmV0d29ya1Nlc3Npb25Db2NvYS5tbQpAQCAtNDc1LDcgKzQ3NSw3IEBAIHZvaWQgTmV0d29ya1Nl
c3Npb246OmludmFsaWRhdGVBbmRDYW5jZWwoKQogfQogCiAKLVdlYkNvcmU6Ok5ldHdvcmtTdG9y
YWdlU2Vzc2lvbiYgTmV0d29ya1Nlc3Npb246Om5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpCitXZWJD
b3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mIE5ldHdvcmtTZXNzaW9uOjpuZXR3b3JrU3RvcmFn
ZVNlc3Npb24oKSBjb25zdAogewogICAgIGF1dG8qIHN0b3JhZ2VTZXNzaW9uID0gV2ViQ29yZTo6
TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzdG9yYWdlU2Vzc2lvbihtX3Nlc3Npb25JRCk7CiAgICAg
UkVMRUFTRV9BU1NFUlQoc3RvcmFnZVNlc3Npb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTlhN2FjZgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5j
cHAKQEAgLTAsMCArMSwxMTI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBT
LkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJOZXR3b3JrRGF0
YVRhc2suaCIKKworI2luY2x1ZGUgIkRhdGFSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJEb3dubG9h
ZC5oIgorI2luY2x1ZGUgIkRvd25sb2FkU291cEVycm9ycy5oIgorI2luY2x1ZGUgIk5ldHdvcmtM
b2FkLmgiCisjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3MuaCIKKyNpbmNsdWRlICJOZXR3b3JrU2Vz
c2lvbi5oIgorI2luY2x1ZGUgIldlYkVycm9ycy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hUVFBQYXJzZXJzLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL1NoYXJlZEJ1ZmZlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU291cE5ldHdvcmtTZXNzaW9u
Lmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdGF0aWMgY29uc3Qgc2l6ZV90IGdEZWZhdWx0
UmVhZEJ1ZmZlclNpemUgPSA4MTkyOworCitOZXR3b3JrRGF0YVRhc2s6Ok5ldHdvcmtEYXRhVGFz
ayhOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwgTmV0d29ya0RhdGFUYXNrQ2xpZW50JiBjbGllbnQs
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdFdpdGhDcmVkZW50aWFscywgU3RvcmVkQ3Jl
ZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsIENvbnRlbnRTbmlmZmluZ1BvbGljeSBzaG91bGRD
b250ZW50U25pZmYsIGJvb2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVj
dCkKKyAgICA6IG1fZmFpbHVyZVRpbWVyKCp0aGlzLCAmTmV0d29ya0RhdGFUYXNrOjpmYWlsdXJl
VGltZXJGaXJlZCkKKyAgICAsIG1fc2Vzc2lvbigmc2Vzc2lvbikKKyAgICAsIG1fY2xpZW50KCZj
bGllbnQpCisgICAgLCBtX3N0b3JlZENyZWRlbnRpYWxzKHN0b3JlZENyZWRlbnRpYWxzKQorICAg
ICwgbV9sYXN0SFRUUE1ldGhvZChyZXF1ZXN0V2l0aENyZWRlbnRpYWxzLmh0dHBNZXRob2QoKSkK
KyAgICAsIG1fZmlyc3RSZXF1ZXN0KHJlcXVlc3RXaXRoQ3JlZGVudGlhbHMpCisgICAgLCBtX3No
b3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3Qoc2hvdWxkQ2xlYXJSZWZlcnJl
ck9uSFRUUFNUb0hUVFBSZWRpcmVjdCkKKyAgICAsIG1fc2hvdWxkQ29udGVudFNuaWZmKHNob3Vs
ZENvbnRlbnRTbmlmZikKKyAgICAsIG1fdGltZW91dFNvdXJjZShSdW5Mb29wOjptYWluKCksIHRo
aXMsICZOZXR3b3JrRGF0YVRhc2s6OnRpbWVvdXRGaXJlZCkKK3sKKyAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOworCisgICAgbV9zZXNzaW9uLT5tX2RhdGFUYXNrU2V0LmFkZCh0aGlzKTsKKwor
ICAgIGlmICghcmVxdWVzdFdpdGhDcmVkZW50aWFscy51cmwoKS5pc1ZhbGlkKCkpIHsKKyAgICAg
ICAgc2NoZWR1bGVGYWlsdXJlKEludmFsaWRVUkxGYWlsdXJlKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmICghcG9ydEFsbG93ZWQocmVxdWVzdFdpdGhDcmVkZW50aWFscy51cmwo
KSkpIHsKKyAgICAgICAgc2NoZWR1bGVGYWlsdXJlKEJsb2NrZWRGYWlsdXJlKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGF1dG8gcmVxdWVzdCA9IHJlcXVlc3RXaXRoQ3JlZGVudGlh
bHM7CisgICAgaWYgKHJlcXVlc3QudXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKSB7Cisj
aWYgRU5BQkxFKFdFQl9USU1JTkcpCisgICAgICAgIG1fc3RhcnRUaW1lID0gbW9ub3RvbmljYWxs
eUluY3JlYXNpbmdUaW1lTVMoKTsKKyNlbmRpZgorICAgICAgICBhdXRvIHVybCA9IHJlcXVlc3Qu
dXJsKCk7CisgICAgICAgIGlmIChtX3N0b3JlZENyZWRlbnRpYWxzID09IEFsbG93U3RvcmVkQ3Jl
ZGVudGlhbHMpIHsKKyAgICAgICAgICAgIG1fdXNlciA9IHVybC51c2VyKCk7CisgICAgICAgICAg
ICBtX3Bhc3N3b3JkID0gdXJsLnBhc3MoKTsKKyAgICAgICAgICAgIHJlcXVlc3QucmVtb3ZlQ3Jl
ZGVudGlhbHMoKTsKKworICAgICAgICAgICAgaWYgKG1fdXNlci5pc0VtcHR5KCkgJiYgbV9wYXNz
d29yZC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgbV9pbml0aWFsQ3JlZGVudGlhbCA9IG1f
c2Vzc2lvbi0+bmV0d29ya1N0b3JhZ2VTZXNzaW9uKCkuY3JlZGVudGlhbFN0b3JhZ2UoKS5nZXQo
cmVxdWVzdC51cmwoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9zZXNz
aW9uLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKS5jcmVkZW50aWFsU3RvcmFnZSgpLnNldChDcmVk
ZW50aWFsKG1fdXNlciwgbV9wYXNzd29yZCwgQ3JlZGVudGlhbFBlcnNpc3RlbmNlTm9uZSksIHJl
cXVlc3QudXJsKCkpOworICAgICAgICB9CisgICAgICAgIGFwcGx5QXV0aGVudGljYXRpb25Ub1Jl
cXVlc3QocmVxdWVzdCk7CisgICAgfQorICAgIGNyZWF0ZVJlcXVlc3QocmVxdWVzdCk7Cit9CisK
K05ldHdvcmtEYXRhVGFzazo6fk5ldHdvcmtEYXRhVGFzaygpCit7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKyAgICBBU1NFUlQoIW1fY2xpZW50KTsKKyAgICBjbGVhclJlcXVlc3QoKTsK
KyAgICBtX3Nlc3Npb24tPm1fZGF0YVRhc2tTZXQucmVtb3ZlKHRoaXMpOworfQorCit2b2lkIE5l
dHdvcmtEYXRhVGFzazo6c2NoZWR1bGVGYWlsdXJlKEZhaWx1cmVUeXBlIHR5cGUpCit7CisgICAg
QVNTRVJUKHR5cGUgIT0gTm9GYWlsdXJlKTsKKyAgICBtX3NjaGVkdWxlZEZhaWx1cmVUeXBlID0g
dHlwZTsKKyAgICBtX2ZhaWx1cmVUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgTmV0
d29ya0RhdGFUYXNrOjpmYWlsdXJlVGltZXJGaXJlZCgpCit7CisgICAgUmVmUHRyPE5ldHdvcmtE
YXRhVGFzaz4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKworICAgIHN3aXRjaCAobV9zY2hlZHVsZWRG
YWlsdXJlVHlwZSkgeworICAgIGNhc2UgQmxvY2tlZEZhaWx1cmU6CisgICAgICAgIG1fc2NoZWR1
bGVkRmFpbHVyZVR5cGUgPSBOb0ZhaWx1cmU7CisgICAgICAgIGlmIChtX2NsaWVudCkKKyAgICAg
ICAgICAgIG1fY2xpZW50LT53YXNCbG9ja2VkKCk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEludmFsaWRVUkxGYWlsdXJlOgorICAgICAgICBtX3NjaGVkdWxlZEZhaWx1cmVUeXBlID0gTm9G
YWlsdXJlOworICAgICAgICBpZiAobV9jbGllbnQpCisgICAgICAgICAgICBtX2NsaWVudC0+Y2Fu
bm90U2hvd1VSTCgpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBOb0ZhaWx1cmU6CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK1N0cmluZyBOZXR3b3JrRGF0YVRhc2s6OnN1Z2dlc3Rl
ZEZpbGVuYW1lKCkKK3sKKyAgICBpZiAoIW1fc3VnZ2VzdGVkRmlsZW5hbWUuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4gbV9zdWdnZXN0ZWRGaWxlbmFtZTsKKworICAgIFN0cmluZyBzdWdnZXN0
ZWRGaWxlbmFtZSA9IG1fcmVzcG9uc2Uuc3VnZ2VzdGVkRmlsZW5hbWUoKTsKKyAgICBpZiAoIXN1
Z2dlc3RlZEZpbGVuYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHN1Z2dlc3RlZEZpbGVu
YW1lOworCisgICAgVVJMIHVybCA9IG1fcmVzcG9uc2UudXJsKCk7CisgICAgdXJsLnNldFF1ZXJ5
KFN0cmluZygpKTsKKyAgICB1cmwucmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVyKCk7CisgICAgcmV0
dXJuIGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyh1cmwubGFzdFBhdGhDb21wb25lbnQoKSk7Cit9
CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpzZXRTdWdnZXN0ZWRGaWxlbmFtZShjb25zdCBTdHJp
bmcmIHN1Z2dlc3RlZE5hbWUpCit7CisgICAgbV9zdWdnZXN0ZWRGaWxlbmFtZSA9IHN1Z2dlc3Rl
ZE5hbWU7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpzZXRQZW5kaW5nRG93bmxvYWRMb2Nh
dGlvbihjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5k
bGUmLCBib29sIGFsbG93T3ZlcndyaXRlKQoreworICAgIG1fcGVuZGluZ0Rvd25sb2FkTG9jYXRp
b24gPSBmaWxlbmFtZTsKKyAgICBtX2FsbG93T3ZlcndyaXRlRG93bmxvYWQgPSBhbGxvd092ZXJ3
cml0ZTsKK30KKworYm9vbCBOZXR3b3JrRGF0YVRhc2s6OmFsbG93c1NwZWNpZmljSFRUUFNDZXJ0
aWZpY2F0ZUZvckhvc3QoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKQoreworICAgIHJl
dHVybiBmYWxzZTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2s6OmNyZWF0ZVJlcXVlc3QoY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIEdVbmlxdWVQdHI8U291cFVSST4g
c291cFVSSSA9IHJlcXVlc3QuY3JlYXRlU291cFVSSSgpOworICAgIGlmICghc291cFVSSSkgewor
ICAgICAgICBzY2hlZHVsZUZhaWx1cmUoSW52YWxpZFVSTEZhaWx1cmUpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgR1JlZlB0cjxTb3VwUmVxdWVzdD4gc291cFJlcXVlc3QgPSBhZG9w
dEdSZWYoc291cF9zZXNzaW9uX3JlcXVlc3RfdXJpKG1fc2Vzc2lvbi0+c291cFNlc3Npb24oKSwg
c291cFVSSS5nZXQoKSwgbnVsbHB0cikpOworICAgIGlmICghc291cFJlcXVlc3QpIHsKKyAgICAg
ICAgc2NoZWR1bGVGYWlsdXJlKEludmFsaWRVUkxGYWlsdXJlKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIHJlcXVlc3QudXBkYXRlU291cFJlcXVlc3Qoc291cFJlcXVlc3QuZ2V0KCkp
OworCisgICAgaWYgKCFyZXF1ZXN0LnVybCgpLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkgewor
ICAgICAgICBtX3NvdXBSZXF1ZXN0ID0gV1RGTW92ZShzb3VwUmVxdWVzdCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICAvLyBIVFRQIHJlcXVlc3QuCisgICAgR1JlZlB0cjxTb3VwTWVz
c2FnZT4gc291cE1lc3NhZ2UgPSBhZG9wdEdSZWYoc291cF9yZXF1ZXN0X2h0dHBfZ2V0X21lc3Nh
Z2UoU09VUF9SRVFVRVNUX0hUVFAoc291cFJlcXVlc3QuZ2V0KCkpKSk7CisgICAgaWYgKCFzb3Vw
TWVzc2FnZSkgeworICAgICAgICBzY2hlZHVsZUZhaWx1cmUoSW52YWxpZFVSTEZhaWx1cmUpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcmVxdWVzdC51cGRhdGVTb3VwTWVzc2FnZShz
b3VwTWVzc2FnZS5nZXQoKSk7CisgICAgaWYgKG1fc2hvdWxkQ29udGVudFNuaWZmID09IERvTm90
U25pZmZDb250ZW50KQorICAgICAgICBzb3VwX21lc3NhZ2VfZGlzYWJsZV9mZWF0dXJlKHNvdXBN
ZXNzYWdlLmdldCgpLCBTT1VQX1RZUEVfQ09OVEVOVF9TTklGRkVSKTsKKyAgICBpZiAobV91c2Vy
LmlzRW1wdHkoKSAmJiBtX3Bhc3N3b3JkLmlzRW1wdHkoKSAmJiBtX3N0b3JlZENyZWRlbnRpYWxz
ID09IERvTm90QWxsb3dTdG9yZWRDcmVkZW50aWFscykgeworICAgICAgICAvLyBJbiBjYXNlIGNy
ZWRlbnRpYWwgaXMgbm90IGF2YWlsYWJsZSBhbmQgY3JlZGVudGlhbCBzdG9yYWdlIHNob3VsZCBu
b3QgdG8gYmUgdXNlZCwKKyAgICAgICAgLy8gZGlzYWJsZSBhdXRoZW50aWNhdGlvbiBtYW5hZ2Vy
IHNvIHRoYXQgY3JlZGVudGlhbHMgc3RvcmVkIGluIGxpYnNvdXAgYXJlIG5vdCB1c2VkLgorICAg
ICAgICBzb3VwX21lc3NhZ2VfZGlzYWJsZV9mZWF0dXJlKHNvdXBNZXNzYWdlLmdldCgpLCBTT1VQ
X1RZUEVfQVVUSF9NQU5BR0VSKTsKKyAgICB9CisKKyAgICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBh
biBBY2NlcHQgaGVhZGVyIGZvciBzdWJyZXNvdXJjZXM7IHNvbWUgc2l0ZXMgd2FudCB0aGlzIHRv
IHNlcnZlIHNvbWUgb2YgdGhlaXIgc3VicmVzb3VyY2VzLgorICAgIGlmICghc291cF9tZXNzYWdl
X2hlYWRlcnNfZ2V0X29uZShzb3VwTWVzc2FnZS0+cmVxdWVzdF9oZWFkZXJzLCAiQWNjZXB0Iikp
CisgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChzb3VwTWVzc2FnZS0+cmVxdWVz
dF9oZWFkZXJzLCAiQWNjZXB0IiwgIiovKiIpOworCisgICAgLy8gSW4gdGhlIGNhc2Ugb2YgWEhS
IC5zZW5kKCkgYW5kIC5zZW5kKCIiKSBleHBsaWNpdGx5IHRlbGwgbGlic291cCB0byBzZW5kIGEg
emVybyBjb250ZW50LWxlbmdodCBoZWFkZXIKKyAgICAvLyBmb3IgY29uc2lzdGVuY3kgd2l0aCBv
dGhlciBVQSBpbXBsZW1lbnRhdGlvbnMgbGlrZSBGaXJlZm94LiBJdCdzIGRvbmUgaW4gdGhlIGJh
Y2tlbmQgaGVyZSBpbnN0ZWFkIG9mCisgICAgLy8gaW4gWEhSIGNvZGUgc2luY2UgaW4gWEhSIENP
UlMgY2hlY2tpbmcgcHJldmVudHMgdXMgZnJvbSB0aGlzIGtpbmQgb2YgbGF0ZSBoZWFkZXIgbWFu
aXB1bGF0aW9uLgorICAgIGlmICgoc291cE1lc3NhZ2UtPm1ldGhvZCA9PSBTT1VQX01FVEhPRF9Q
T1NUIHx8IHNvdXBNZXNzYWdlLT5tZXRob2QgPT0gU09VUF9NRVRIT0RfUFVUKSAmJiAhc291cE1l
c3NhZ2UtPnJlcXVlc3RfYm9keS0+bGVuZ3RoKQorICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVy
c19zZXRfY29udGVudF9sZW5ndGgoc291cE1lc3NhZ2UtPnJlcXVlc3RfaGVhZGVycywgMCk7CisK
KyAgICB1bnNpZ25lZCBmbGFncyA9IFNPVVBfTUVTU0FHRV9OT19SRURJUkVDVDsKKyAgICBzb3Vw
X21lc3NhZ2Vfc2V0X2ZsYWdzKHNvdXBNZXNzYWdlLmdldCgpLCBzdGF0aWNfY2FzdDxTb3VwTWVz
c2FnZUZsYWdzPihzb3VwX21lc3NhZ2VfZ2V0X2ZsYWdzKHNvdXBNZXNzYWdlLmdldCgpKSB8IGZs
YWdzKSk7CisKKyNpZiBTT1VQX0NIRUNLX1ZFUlNJT04oMiwgNDMsIDEpCisgICAgc291cF9tZXNz
YWdlX3NldF9wcmlvcml0eShzb3VwTWVzc2FnZS5nZXQoKSwgdG9Tb3VwTWVzc2FnZVByaW9yaXR5
KHJlcXVlc3QucHJpb3JpdHkoKSkpOworI2VuZGlmCisKKyAgICBtX3NvdXBSZXF1ZXN0ID0gV1RG
TW92ZShzb3VwUmVxdWVzdCk7CisgICAgbV9zb3VwTWVzc2FnZSA9IFdURk1vdmUoc291cE1lc3Nh
Z2UpOworCisgICAgZ19zaWduYWxfY29ubmVjdChtX3NvdXBNZXNzYWdlLmdldCgpLCAibm90aWZ5
Ojp0bHMtZXJyb3JzIiwgR19DQUxMQkFDSyh0bHNFcnJvcnNDaGFuZ2VkQ2FsbGJhY2spLCB0aGlz
KTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fc291cE1lc3NhZ2UuZ2V0KCksICJnb3QtaGVhZGVy
cyIsIEdfQ0FMTEJBQ0soZ290SGVhZGVyc0NhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxf
Y29ubmVjdChtX3NvdXBNZXNzYWdlLmdldCgpLCAid3JvdGUtYm9keS1kYXRhIiwgR19DQUxMQkFD
Syh3cm90ZUJvZHlEYXRhQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1f
c2Vzc2lvbi0+c291cFNlc3Npb24oKSwgImF1dGhlbnRpY2F0ZSIsICBHX0NBTExCQUNLKGF1dGhl
bnRpY2F0ZUNhbGxiYWNrKSwgdGhpcyk7CisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCisgICAgZ19z
aWduYWxfY29ubmVjdChtX3NvdXBNZXNzYWdlLmdldCgpLCAibmV0d29yay1ldmVudCIsIEdfQ0FM
TEJBQ0sobmV0d29ya0V2ZW50Q2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0
KG1fc291cE1lc3NhZ2UuZ2V0KCksICJyZXN0YXJ0ZWQiLCBHX0NBTExCQUNLKHJlc3RhcnRlZENh
bGxiYWNrKSwgdGhpcyk7CisjaWYgU09VUF9DSEVDS19WRVJTSU9OKDIsIDQ5LCA5MSkKKyAgICBn
X3NpZ25hbF9jb25uZWN0KG1fc291cE1lc3NhZ2UuZ2V0KCksICJzdGFydGluZyIsIEdfQ0FMTEJB
Q0soc3RhcnRpbmdDYWxsYmFjayksIHRoaXMpOworI2Vsc2UKKyAgICBnX3NpZ25hbF9jb25uZWN0
KG1fc2Vzc2lvbi0+c291cFNlc3Npb24oKSwgInJlcXVlc3Qtc3RhcnRlZCIsIEdfQ0FMTEJBQ0so
cmVxdWVzdFN0YXJ0ZWRDYWxsYmFjayksIHRoaXMpOworI2VuZGlmCisjZW5kaWYKK30KKwordm9p
ZCBOZXR3b3JrRGF0YVRhc2s6OmNsZWFyUmVxdWVzdCgpCit7CisgICAgaWYgKG1fc3RhdGUgPT0g
U3RhdGU6OkNvbXBsZXRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zdGF0ZSA9IFN0YXRl
OjpDb21wbGV0ZWQ7CisKKyAgICBzdG9wVGltZW91dCgpOworICAgIG1fcGVuZGluZ1Jlc3VsdCA9
IG51bGxwdHI7CisgICAgbV9zb3VwUmVxdWVzdCA9IG51bGxwdHI7CisgICAgbV9pbnB1dFN0cmVh
bSA9IG51bGxwdHI7CisgICAgbV9tdWx0aXBhcnRJbnB1dFN0cmVhbSA9IG51bGxwdHI7CisgICAg
bV9kb3dubG9hZE91dHB1dFN0cmVhbSA9IG51bGxwdHI7CisgICAgZ19jYW5jZWxsYWJsZV9jYW5j
ZWwobV9jYW5jZWxsYWJsZS5nZXQoKSk7CisgICAgbV9jYW5jZWxsYWJsZSA9IG51bGxwdHI7Cisg
ICAgaWYgKG1fc291cE1lc3NhZ2UpIHsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29u
bmVjdF9tYXRjaGVkKG1fc291cE1lc3NhZ2UuZ2V0KCksIEdfU0lHTkFMX01BVENIX0RBVEEsIDAs
IDAsIG51bGxwdHIsIG51bGxwdHIsIHRoaXMpOworICAgICAgICBzb3VwX3Nlc3Npb25fY2FuY2Vs
X21lc3NhZ2UobV9zZXNzaW9uLT5zb3VwU2Vzc2lvbigpLCBtX3NvdXBNZXNzYWdlLmdldCgpLCBT
T1VQX1NUQVRVU19DQU5DRUxMRUQpOworICAgICAgICBtX3NvdXBNZXNzYWdlID0gbnVsbHB0cjsK
KyAgICB9CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fc2Vzc2lv
bi0+c291cFNlc3Npb24oKSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgbnVsbHB0ciwgbnVs
bHB0ciwgdGhpcyk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpyZXN1bWUoKQoreworICAg
IEFTU0VSVChtX3N0YXRlICE9IFN0YXRlOjpSdW5uaW5nKTsKKyAgICBpZiAobV9zdGF0ZSA9PSBT
dGF0ZTo6Q2FuY2VsaW5nIHx8IG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9zdGF0ZSA9IFN0YXRlOjpSdW5uaW5nOworCisgICAgaWYgKG1fc2No
ZWR1bGVkRmFpbHVyZVR5cGUgIT0gTm9GYWlsdXJlKSB7CisgICAgICAgIEFTU0VSVChtX2ZhaWx1
cmVUaW1lci5pc0FjdGl2ZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN0YXJ0
VGltZW91dCgpOworCisgICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4gcHJvdGVjdGVkVGhpcyh0
aGlzKTsKKyAgICBpZiAobV9zb3VwUmVxdWVzdCAmJiAhbV9jYW5jZWxsYWJsZSkgeworICAgICAg
ICBtX2NhbmNlbGxhYmxlID0gYWRvcHRHUmVmKGdfY2FuY2VsbGFibGVfbmV3KCkpOworICAgICAg
ICBzb3VwX3JlcXVlc3Rfc2VuZF9hc3luYyhtX3NvdXBSZXF1ZXN0LmdldCgpLCBtX2NhbmNlbGxh
YmxlLmdldCgpLCByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KHNlbmRSZXF1
ZXN0Q2FsbGJhY2spLCBwcm90ZWN0ZWRUaGlzLmxlYWtSZWYoKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAobV9wZW5kaW5nUmVzdWx0KSB7CisgICAgICAgIEdSZWZQdHI8R0Fz
eW5jUmVzdWx0PiBwZW5kaW5nUmVzdWx0ID0gV1RGTW92ZShtX3BlbmRpbmdSZXN1bHQpOworICAg
ICAgICBpZiAobV9pbnB1dFN0cmVhbSkKKyAgICAgICAgICAgIHJlYWRDYWxsYmFjayhtX2lucHV0
U3RyZWFtLmdldCgpLCBwZW5kaW5nUmVzdWx0LmdldCgpLCBwcm90ZWN0ZWRUaGlzLmxlYWtSZWYo
KSk7CisgICAgICAgIGVsc2UgaWYgKG1fbXVsdGlwYXJ0SW5wdXRTdHJlYW0pCisgICAgICAgICAg
ICByZXF1ZXN0TmV4dFBhcnRDYWxsYmFjayhtX211bHRpcGFydElucHV0U3RyZWFtLmdldCgpLCBw
ZW5kaW5nUmVzdWx0LmdldCgpLCBwcm90ZWN0ZWRUaGlzLmxlYWtSZWYoKSk7CisgICAgICAgIGVs
c2UgaWYgKG1fc291cFJlcXVlc3QpCisgICAgICAgICAgICBzZW5kUmVxdWVzdENhbGxiYWNrKG1f
c291cFJlcXVlc3QuZ2V0KCksIHBlbmRpbmdSZXN1bHQuZ2V0KCksIHByb3RlY3RlZFRoaXMubGVh
a1JlZigpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgfQorfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6c3VzcGVuZCgpCit7CisgICAgQVNT
RVJUKG1fc3RhdGUgIT0gU3RhdGU6OlN1c3BlbmRlZCk7CisgICAgaWYgKG1fc3RhdGUgPT0gU3Rh
dGU6OkNhbmNlbGluZyB8fCBtX3N0YXRlID09IFN0YXRlOjpDb21wbGV0ZWQpCisgICAgICAgIHJl
dHVybjsKKyAgICBtX3N0YXRlID0gU3RhdGU6OlN1c3BlbmRlZDsKKworICAgIHN0b3BUaW1lb3V0
KCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpjYW5jZWwoKQoreworICAgIGlmIChtX3N0
YXRlID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgbV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGxldGVkKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX3N0YXRlID0gU3RhdGU6OkNhbmNlbGluZzsKKworICAg
IGlmIChtX3NvdXBNZXNzYWdlKQorICAgICAgICBzb3VwX3Nlc3Npb25fY2FuY2VsX21lc3NhZ2Uo
bV9zZXNzaW9uLT5zb3VwU2Vzc2lvbigpLCBtX3NvdXBNZXNzYWdlLmdldCgpLCBTT1VQX1NUQVRV
U19DQU5DRUxMRUQpOworCisgICAgZ19jYW5jZWxsYWJsZV9jYW5jZWwobV9jYW5jZWxsYWJsZS5n
ZXQoKSk7CisKKyAgICBpZiAoaXNEb3dubG9hZCgpKQorICAgICAgICBjbGVhbkRvd25sb2FkRmls
ZXMoKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2s6OmludmFsaWRhdGVBbmRDYW5jZWwoKQor
eworICAgIGNhbmNlbCgpOworICAgIGNsZWFyUmVxdWVzdCgpOworfQorCitOZXR3b3JrRGF0YVRh
c2s6OlN0YXRlIE5ldHdvcmtEYXRhVGFzazo6c3RhdGUoKSBjb25zdAoreworICAgIHJldHVybiBt
X3N0YXRlOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6dGltZW91dEZpcmVkKCkKK3sKKyAg
ICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IG1fc3RhdGUgPT0gU3RhdGU6OkNv
bXBsZXRlZCB8fCAhbV9jbGllbnQpIHsKKyAgICAgICAgY2xlYXJSZXF1ZXN0KCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrPiBwcm90ZWN0ZWRU
aGlzKHRoaXMpOworICAgIGludmFsaWRhdGVBbmRDYW5jZWwoKTsKKyAgICBtX2NsaWVudC0+ZGlk
Q29tcGxldGVXaXRoRXJyb3IoUmVzb3VyY2VFcnJvcjo6dGltZW91dEVycm9yKG1fZmlyc3RSZXF1
ZXN0LnVybCgpKSk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpzdGFydFRpbWVvdXQoKQor
eworICAgIGlmIChtX2ZpcnN0UmVxdWVzdC50aW1lb3V0SW50ZXJ2YWwoKSA+IDApCisgICAgICAg
IG1fdGltZW91dFNvdXJjZS5zdGFydE9uZVNob3QobV9maXJzdFJlcXVlc3QudGltZW91dEludGVy
dmFsKCkpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6c3RvcFRpbWVvdXQoKQoreworICAg
IG1fdGltZW91dFNvdXJjZS5zdG9wKCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpzZW5k
UmVxdWVzdENhbGxiYWNrKFNvdXBSZXF1ZXN0KiBzb3VwUmVxdWVzdCwgR0FzeW5jUmVzdWx0KiBy
ZXN1bHQsIE5ldHdvcmtEYXRhVGFzayogdGFzaykKK3sKKyAgICBSZWZQdHI8TmV0d29ya0RhdGFU
YXNrPiBwcm90ZWN0ZWRUaGlzID0gYWRvcHRSZWYodGFzayk7CisgICAgaWYgKHRhc2stPnN0YXRl
KCkgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCB0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDb21wbGV0
ZWQgfHwgIXRhc2stPm1fY2xpZW50KSB7CisgICAgICAgIHRhc2stPmNsZWFyUmVxdWVzdCgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFTU0VSVChzb3VwUmVxdWVzdCA9PSB0YXNrLT5t
X3NvdXBSZXF1ZXN0LmdldCgpKTsKKworICAgIGlmICh0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpT
dXNwZW5kZWQpIHsKKyAgICAgICAgQVNTRVJUKCF0YXNrLT5tX3BlbmRpbmdSZXN1bHQpOworICAg
ICAgICB0YXNrLT5tX3BlbmRpbmdSZXN1bHQgPSByZXN1bHQ7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgR1JlZlB0cjxHSW5w
dXRTdHJlYW0+IGlucHV0U3RyZWFtID0gYWRvcHRHUmVmKHNvdXBfcmVxdWVzdF9zZW5kX2Zpbmlz
aChzb3VwUmVxdWVzdCwgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpKTsKKyAgICBpZiAoZXJyb3Ip
CisgICAgICAgIHRhc2stPmRpZEZhaWwoUmVzb3VyY2VFcnJvcjo6aHR0cEVycm9yKHRhc2stPm1f
c291cE1lc3NhZ2UuZ2V0KCksIGVycm9yLmdldCgpLCBzb3VwUmVxdWVzdCkpOworICAgIGVsc2UK
KyAgICAgICAgdGFzay0+ZGlkU2VuZFJlcXVlc3QoV1RGTW92ZShpbnB1dFN0cmVhbSkpOworfQor
Cit2b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlkU2VuZFJlcXVlc3QoR1JlZlB0cjxHSW5wdXRTdHJl
YW0+JiYgaW5wdXRTdHJlYW0pCit7CisgICAgaWYgKG1fc291cE1lc3NhZ2UpIHsKKyAgICAgICAg
aWYgKG1fc2hvdWxkQ29udGVudFNuaWZmID09IFNuaWZmQ29udGVudCAmJiBtX3NvdXBNZXNzYWdl
LT5zdGF0dXNfY29kZSAhPSBTT1VQX1NUQVRVU19OT1RfTU9ESUZJRUQpCisgICAgICAgICAgICBt
X3Jlc3BvbnNlLnNldFNuaWZmZWRDb250ZW50VHlwZShzb3VwX3JlcXVlc3RfZ2V0X2NvbnRlbnRf
dHlwZShtX3NvdXBSZXF1ZXN0LmdldCgpKSk7CisgICAgICAgIG1fcmVzcG9uc2UudXBkYXRlRnJv
bVNvdXBNZXNzYWdlKG1fc291cE1lc3NhZ2UuZ2V0KCkpOworCisgICAgICAgIGlmIChzaG91bGRT
dGFydEhUVFBSZWRpcmVjdGlvbigpKSB7CisgICAgICAgICAgICBtX2lucHV0U3RyZWFtID0gV1RG
TW92ZShpbnB1dFN0cmVhbSk7CisgICAgICAgICAgICBza2lwSW5wdXRTdHJlYW1Gb3JSZWRpcmVj
dGlvbigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1f
cmVzcG9uc2UuaXNNdWx0aXBhcnQoKSkKKyAgICAgICAgICAgIG1fbXVsdGlwYXJ0SW5wdXRTdHJl
YW0gPSBhZG9wdEdSZWYoc291cF9tdWx0aXBhcnRfaW5wdXRfc3RyZWFtX25ldyhtX3NvdXBNZXNz
YWdlLmdldCgpLCBpbnB1dFN0cmVhbS5nZXQoKSkpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBtX2lucHV0U3RyZWFtID0gV1RGTW92ZShpbnB1dFN0cmVhbSk7CisKKyNpZiBFTkFCTEUoV0VC
X1RJTUlORykKKyAgICAgICAgbV9yZXNwb25zZS5uZXR3b3JrTG9hZFRpbWluZygpLnJlc3BvbnNl
U3RhcnQgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWVNUygpIC0gbV9zdGFydFRpbWU7Cisj
ZW5kaWYKKyAgICB9IGVsc2UgeworICAgICAgICBtX3Jlc3BvbnNlLnNldFVSTChtX2ZpcnN0UmVx
dWVzdC51cmwoKSk7CisgICAgICAgIGNvbnN0IGdjaGFyKiBjb250ZW50VHlwZSA9IHNvdXBfcmVx
dWVzdF9nZXRfY29udGVudF90eXBlKG1fc291cFJlcXVlc3QuZ2V0KCkpOworICAgICAgICBtX3Jl
c3BvbnNlLnNldE1pbWVUeXBlKGV4dHJhY3RNSU1FVHlwZUZyb21NZWRpYVR5cGUoY29udGVudFR5
cGUpKTsKKyAgICAgICAgbV9yZXNwb25zZS5zZXRUZXh0RW5jb2RpbmdOYW1lKGV4dHJhY3RDaGFy
c2V0RnJvbU1lZGlhVHlwZShjb250ZW50VHlwZSkpOworICAgICAgICBtX3Jlc3BvbnNlLnNldEV4
cGVjdGVkQ29udGVudExlbmd0aChzb3VwX3JlcXVlc3RfZ2V0X2NvbnRlbnRfbGVuZ3RoKG1fc291
cFJlcXVlc3QuZ2V0KCkpKTsKKworICAgICAgICBtX2lucHV0U3RyZWFtID0gV1RGTW92ZShpbnB1
dFN0cmVhbSk7CisgICAgfQorCisgICAgZGlkUmVjZWl2ZVJlc3BvbnNlKCk7Cit9CisKK3ZvaWQg
TmV0d29ya0RhdGFUYXNrOjpkaWRSZWNlaXZlUmVzcG9uc2UoKQoreworICAgIEFTU0VSVCghbV9y
ZXNwb25zZS5pc051bGwoKSk7CisKKyAgICBhdXRvIHJlc3BvbnNlID0gUmVzb3VyY2VSZXNwb25z
ZShtX3Jlc3BvbnNlKTsKKyAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZVJlc3BvbnNlTmV0d29ya1Nl
c3Npb24oV1RGTW92ZShyZXNwb25zZSksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigq
dGhpcyldKFBvbGljeUFjdGlvbiBwb2xpY3lBY3Rpb24pIHsKKyAgICAgICAgaWYgKG1fc3RhdGUg
PT0gU3RhdGU6OkNhbmNlbGluZyB8fCBtX3N0YXRlID09IFN0YXRlOjpDb21wbGV0ZWQpIHsKKyAg
ICAgICAgICAgIGNsZWFyUmVxdWVzdCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgc3dpdGNoIChwb2xpY3lBY3Rpb24pIHsKKyAgICAgICAgY2FzZSBQb2xpY3lB
Y3Rpb246OlBvbGljeVVzZToKKyAgICAgICAgICAgIGlmIChtX2lucHV0U3RyZWFtKQorICAgICAg
ICAgICAgICAgIHJlYWQoKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG1fbXVsdGlwYXJ0SW5wdXRT
dHJlYW0pCisgICAgICAgICAgICAgICAgcmVxdWVzdE5leHRQYXJ0KCk7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFBvbGljeUFjdGlvbjo6UG9saWN5SWdub3JlOgorICAgICAg
ICAgICAgY2xlYXJSZXF1ZXN0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQ
b2xpY3lBY3Rpb246OlBvbGljeURvd25sb2FkOgorICAgICAgICAgICAgZG93bmxvYWQoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSk7Cit9CisKK3ZvaWQgTmV0d29ya0Rh
dGFUYXNrOjp0bHNFcnJvcnNDaGFuZ2VkQ2FsbGJhY2soU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdl
LCBHUGFyYW1TcGVjKiwgTmV0d29ya0RhdGFUYXNrKiB0YXNrKQoreworICAgIGlmICh0YXNrLT5z
dGF0ZSgpID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgdGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q29t
cGxldGVkIHx8ICF0YXNrLT5tX2NsaWVudCkgeworICAgICAgICB0YXNrLT5jbGVhclJlcXVlc3Qo
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVChzb3VwTWVzc2FnZSA9PSB0
YXNrLT5tX3NvdXBNZXNzYWdlLmdldCgpKTsKKyAgICB0YXNrLT50bHNFcnJvcnNDaGFuZ2VkKCk7
Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjp0bHNFcnJvcnNDaGFuZ2VkKCkKK3sKKyAgICBB
U1NFUlQobV9zb3VwUmVxdWVzdCk7CisgICAgU291cE5ldHdvcmtTZXNzaW9uOjpjaGVja1RMU0Vy
cm9ycyhtX3NvdXBSZXF1ZXN0LmdldCgpLCBtX3NvdXBNZXNzYWdlLmdldCgpLCBbdGhpc10gKGNv
bnN0IFJlc291cmNlRXJyb3ImIGVycm9yKSB7CisgICAgICAgIGlmIChlcnJvci5pc051bGwoKSkK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrPiBw
cm90ZWN0ZWRUaGlzKHRoaXMpOworICAgICAgICBpbnZhbGlkYXRlQW5kQ2FuY2VsKCk7CisgICAg
ICAgIG1fY2xpZW50LT5kaWRDb21wbGV0ZVdpdGhFcnJvcihlcnJvcik7CisgICAgfSk7Cit9CisK
K3ZvaWQgTmV0d29ya0RhdGFUYXNrOjphcHBseUF1dGhlbnRpY2F0aW9uVG9SZXF1ZXN0KFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICAvLyBXZSBhbHdheXMgcHV0IHRoZSBjcmVkZW50
aWFscyBpbnRvIHRoZSBVUkwuIEluIHRoZSBDb2NhIHBvcnQgSFRUUCBmYW1pbHkgY3JlZGVudGlh
bHMgYXJlIGFwcGxpZWQgaW4KKyAgICAvLyB0aGUgZGlkUmVjZWl2ZUNoYWxsZW5nZSBjYWxsYmFj
aywgYnV0IGxpYnNvdXAgcmVxdWlyZXMgdXMgdG8gdXNlIHRoaXMgbWV0aG9kIHRvIG92ZXJyaWRl
CisgICAgLy8gYW55IHByZXZpb3VzbHkgcmVtZW1iZXJlZCBjcmVkZW50aWFscy4gSXQgaGFzIGl0
cyBvd24gcGVyLXNlc3Npb24gY3JlZGVudGlhbCBzdG9yYWdlLgorICAgIGF1dG8gdXJsID0gcmVx
dWVzdC51cmwoKTsKKyAgICBpZiAoIW1faW5pdGlhbENyZWRlbnRpYWwuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIHVybC5zZXRVc2VyKG1faW5pdGlhbENyZWRlbnRpYWwudXNlcigpKTsKKyAgICAgICAg
dXJsLnNldFBhc3MobV9pbml0aWFsQ3JlZGVudGlhbC5wYXNzd29yZCgpKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICB1cmwuc2V0VXNlcihtX3VzZXIpOworICAgICAgICB1cmwuc2V0UGFzcyhtX3Bh
c3N3b3JkKTsKKyAgICB9CisKKyAgICBtX3VzZXIgPSBTdHJpbmcoKTsKKyAgICBtX3Bhc3N3b3Jk
ID0gU3RyaW5nKCk7CisKKyAgICByZXF1ZXN0LnNldFVSTCh1cmwpOworfQorCit2b2lkIE5ldHdv
cmtEYXRhVGFzazo6YXV0aGVudGljYXRlQ2FsbGJhY2soU291cFNlc3Npb24qIHNlc3Npb24sIFNv
dXBNZXNzYWdlKiBzb3VwTWVzc2FnZSwgU291cEF1dGgqIHNvdXBBdXRoLCBnYm9vbGVhbiByZXRy
eWluZywgTmV0d29ya0RhdGFUYXNrKiB0YXNrKQoreworICAgIEFTU0VSVChzZXNzaW9uID09IHRh
c2stPm1fc2Vzc2lvbi0+c291cFNlc3Npb24oKSk7CisgICAgaWYgKHNvdXBNZXNzYWdlICE9IHRh
c2stPm1fc291cE1lc3NhZ2UuZ2V0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICh0YXNr
LT5zdGF0ZSgpID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgdGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6
Q29tcGxldGVkIHx8ICF0YXNrLT5tX2NsaWVudCkgeworICAgICAgICB0YXNrLT5jbGVhclJlcXVl
c3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHRhc2stPmF1dGhlbnRpY2F0ZShB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZShzb3VwTWVzc2FnZSwgc291cEF1dGgsIHJldHJ5aW5nKSk7
Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0F1dGhlbnRpY2F0aW9uRmFpbHVyZVN0YXR1c0Nv
ZGUoaW50IGh0dHBTdGF0dXNDb2RlKQoreworICAgIHJldHVybiBodHRwU3RhdHVzQ29kZSA9PSBT
T1VQX1NUQVRVU19QUk9YWV9BVVRIRU5USUNBVElPTl9SRVFVSVJFRCB8fCBodHRwU3RhdHVzQ29k
ZSA9PSBTT1VQX1NUQVRVU19VTkFVVEhPUklaRUQ7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNr
OjphdXRoZW50aWNhdGUoQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmJiBjaGFsbGVuZ2UpCit7Cisg
ICAgQVNTRVJUKG1fc291cE1lc3NhZ2UpOworICAgIGlmIChtX3N0b3JlZENyZWRlbnRpYWxzID09
IEFsbG93U3RvcmVkQ3JlZGVudGlhbHMpIHsKKyAgICAgICAgaWYgKCFtX2luaXRpYWxDcmVkZW50
aWFsLmlzRW1wdHkoKSB8fCBjaGFsbGVuZ2UucHJldmlvdXNGYWlsdXJlQ291bnQoKSkgeworICAg
ICAgICAgICAgLy8gVGhlIHN0b3JlZCBjcmVkZW50aWFsIHdhc24ndCBhY2NlcHRlZCwgc3RvcCB1
c2luZyBpdC4gVGhlcmUgaXMgYSByYWNlIGNvbmRpdGlvbgorICAgICAgICAgICAgLy8gaGVyZSwg
c2luY2UgYSBkaWZmZXJlbnQgY3JlZGVudGlhbCBtaWdodCBoYXZlIGFscmVhZHkgYmVlbiBzdG9y
ZWQgYnkgYW5vdGhlcgorICAgICAgICAgICAgLy8gTmV0d29ya0RhdGFUYXNrLCBidXQgdGhlIG9i
c2VydmFibGUgZWZmZWN0IHNob3VsZCBiZSB2ZXJ5IG1pbm9yLCBpZiBhbnkuCisgICAgICAgICAg
ICBtX3Nlc3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpLmNyZWRlbnRpYWxTdG9yYWdlKCku
cmVtb3ZlKGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKSk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoIWNoYWxsZW5nZS5wcmV2aW91c0ZhaWx1cmVDb3VudCgpKSB7CisgICAgICAgICAgICBh
dXRvIGNyZWRlbnRpYWwgPSBtX3Nlc3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpLmNyZWRl
bnRpYWxTdG9yYWdlKCkuZ2V0KGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKSk7CisgICAgICAg
ICAgICBpZiAoIWNyZWRlbnRpYWwuaXNFbXB0eSgpICYmIGNyZWRlbnRpYWwgIT0gbV9pbml0aWFs
Q3JlZGVudGlhbCkgeworICAgICAgICAgICAgICAgIEFTU0VSVChjcmVkZW50aWFsLnBlcnNpc3Rl
bmNlKCkgPT0gQ3JlZGVudGlhbFBlcnNpc3RlbmNlTm9uZSk7CisKKyAgICAgICAgICAgICAgICBp
ZiAoaXNBdXRoZW50aWNhdGlvbkZhaWx1cmVTdGF0dXNDb2RlKGNoYWxsZW5nZS5mYWlsdXJlUmVz
cG9uc2UoKS5odHRwU3RhdHVzQ29kZSgpKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBTdG9y
ZSB0aGUgY3JlZGVudGlhbCBiYWNrLCBwb3NzaWJseSBhZGRpbmcgaXQgYXMgYSBkZWZhdWx0IGZv
ciB0aGlzIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgbV9zZXNzaW9uLT5uZXR3b3Jr
U3RvcmFnZVNlc3Npb24oKS5jcmVkZW50aWFsU3RvcmFnZSgpLnNldChjcmVkZW50aWFsLCBjaGFs
bGVuZ2UucHJvdGVjdGlvblNwYWNlKCksIGNoYWxsZW5nZS5mYWlsdXJlUmVzcG9uc2UoKS51cmwo
KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNvdXBfYXV0aF9hdXRoZW50
aWNhdGUoY2hhbGxlbmdlLnNvdXBBdXRoKCksIGNyZWRlbnRpYWwudXNlcigpLnV0ZjgoKS5kYXRh
KCksIGNyZWRlbnRpYWwucGFzc3dvcmQoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzb3VwX3Nl
c3Npb25fcGF1c2VfbWVzc2FnZShtX3Nlc3Npb24tPnNvdXBTZXNzaW9uKCksIG1fc291cE1lc3Nh
Z2UuZ2V0KCkpOworCisgICAgLy8gV2UgY291bGQgYWxzbyBkbyB0aGlzIGJlZm9yZSB3ZSBldmVu
IHN0YXJ0IHRoZSByZXF1ZXN0LCBidXQgdGhhdCB3b3VsZCBiZSBhdCB0aGUgZXhwZW5zZQorICAg
IC8vIG9mIGFsbCByZXF1ZXN0IGxhdGVuY3ksIHZlcnN1cyBhIG9uZS10aW1lIGxhdGVuY3kgZm9y
IHRoZSBzbWFsbCBzdWJzZXQgb2YgcmVxdWVzdHMgdGhhdAorICAgIC8vIHVzZSBIVFRQIGF1dGhl
bnRpY2F0aW9uLiBJbiB0aGUgZW5kLCB0aGlzIGRvZXNuJ3QgbWF0dGVyIG11Y2gsIGJlY2F1c2Ug
cGVyc2lzdGVudCBjcmVkZW50aWFscworICAgIC8vIHdpbGwgYmVjb21lIHNlc3Npb24gY3JlZGVu
dGlhbHMgYWZ0ZXIgdGhlIGZpcnN0IHVzZS4KKyAgICBpZiAobV9zdG9yZWRDcmVkZW50aWFscyA9
PSBBbGxvd1N0b3JlZENyZWRlbnRpYWxzKSB7CisgICAgICAgIGF1dG8gcHJvdGVjdGlvblNwYWNl
ID0gY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZSgpOworICAgICAgICBtX3Nlc3Npb24tPm5ldHdv
cmtTdG9yYWdlU2Vzc2lvbigpLmdldENyZWRlbnRpYWxGcm9tUGVyc2lzdGVudFN0b3JhZ2UocHJv
dGVjdGlvblNwYWNlLAorICAgICAgICAgICAgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVm
KCp0aGlzKSwgYXV0aENoYWxsZW5nZSA9IFdURk1vdmUoY2hhbGxlbmdlKV0gKENyZWRlbnRpYWwm
JiBjcmVkZW50aWFsKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBpZiAobV9zdGF0ZSA9PSBT
dGF0ZTo6Q2FuY2VsaW5nIHx8IG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZCB8fCAhbV9jbGll
bnQpIHsKKyAgICAgICAgICAgICAgICAgICAgY2xlYXJSZXF1ZXN0KCk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBhdXRo
Q2hhbGxlbmdlLnNldFByb3Bvc2VkQ3JlZGVudGlhbChXVEZNb3ZlKGNyZWRlbnRpYWwpKTsKKyAg
ICAgICAgICAgICAgICBjb250aW51ZUF1dGhlbnRpY2F0ZShXVEZNb3ZlKGF1dGhDaGFsbGVuZ2Up
KTsKKyAgICAgICAgfSk7CisgICAgfSBlbHNlCisgICAgICAgIGNvbnRpbnVlQXV0aGVudGljYXRl
KFdURk1vdmUoY2hhbGxlbmdlKSk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpjb250aW51
ZUF1dGhlbnRpY2F0ZShBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYmIGNoYWxsZW5nZSkKK3sKKyAg
ICBtX2NsaWVudC0+ZGlkUmVjZWl2ZUNoYWxsZW5nZShjaGFsbGVuZ2UsIFt0aGlzLCBwcm90ZWN0
ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNoYWxsZW5nZV0oQXV0aGVudGljYXRpb25DaGFsbGVu
Z2VEaXNwb3NpdGlvbiBkaXNwb3NpdGlvbiwgY29uc3QgQ3JlZGVudGlhbCYgY3JlZGVudGlhbCkg
eworICAgICAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IG1fc3RhdGUgPT0g
U3RhdGU6OkNvbXBsZXRlZCkgeworICAgICAgICAgICAgY2xlYXJSZXF1ZXN0KCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoZGlzcG9zaXRpb24gPT0gQXV0
aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbjo6Q2FuY2VsKSB7CisgICAgICAgICAgICBj
YW5jZWwoKTsKKyAgICAgICAgICAgIGRpZEZhaWwoY2FuY2VsbGVkRXJyb3IobV9zb3VwUmVxdWVz
dC5nZXQoKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KGRpc3Bvc2l0aW9uID09IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb246OlVzZUNy
ZWRlbnRpYWwgJiYgIWNyZWRlbnRpYWwuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBpZiAobV9z
dG9yZWRDcmVkZW50aWFscyA9PSBBbGxvd1N0b3JlZENyZWRlbnRpYWxzKSB7CisgICAgICAgICAg
ICAgICAgLy8gRXZlbnR1YWxseSB3ZSB3aWxsIG1hbmFnZSBwZXItc2Vzc2lvbiBjcmVkZW50aWFs
cyBvbmx5IGludGVybmFsbHkgb3IgdXNlIHNvbWUgbmV3bHktZXhwb3NlZCBBUEkgZnJvbSBsaWJz
b3VwLAorICAgICAgICAgICAgICAgIC8vIGJlY2F1c2Ugb25jZSB3ZSBhdXRoZW50aWNhdGUgdmlh
IGxpYnNvdXAsIHRoZXJlIGlzIG5vIHdheSB0byBpZ25vcmUgaXQgZm9yIGEgcGFydGljdWxhciBy
ZXF1ZXN0LiBSaWdodCBub3csCisgICAgICAgICAgICAgICAgLy8gd2UgcGxhY2UgdGhlIGNyZWRl
bnRpYWxzIGluIHRoZSBzdG9yZSBldmVuIHRob3VnaCBsaWJzb3VwIHdpbGwgbmV2ZXIgZmlyZSB0
aGUgYXV0aGVudGljYXRlIHNpZ25hbCBhZ2FpbiBmb3IKKyAgICAgICAgICAgICAgICAvLyB0aGlz
IHByb3RlY3Rpb24gc3BhY2UuCisgICAgICAgICAgICAgICAgaWYgKGNyZWRlbnRpYWwucGVyc2lz
dGVuY2UoKSA9PSBDcmVkZW50aWFsUGVyc2lzdGVuY2VGb3JTZXNzaW9uIHx8IGNyZWRlbnRpYWwu
cGVyc2lzdGVuY2UoKSA9PSBDcmVkZW50aWFsUGVyc2lzdGVuY2VQZXJtYW5lbnQpCisgICAgICAg
ICAgICAgICAgICAgIG1fc2Vzc2lvbi0+bmV0d29ya1N0b3JhZ2VTZXNzaW9uKCkuY3JlZGVudGlh
bFN0b3JhZ2UoKS5zZXQoY3JlZGVudGlhbCwgY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZSgpLCBj
aGFsbGVuZ2UuZmFpbHVyZVJlc3BvbnNlKCkudXJsKCkpOworCisgICAgICAgICAgICAgICAgaWYg
KGNyZWRlbnRpYWwucGVyc2lzdGVuY2UoKSA9PSBDcmVkZW50aWFsUGVyc2lzdGVuY2VQZXJtYW5l
bnQpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9wcm90ZWN0aW9uU3BhY2VGb3JQZXJzaXN0ZW50
U3RvcmFnZSA9IGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKTsKKyAgICAgICAgICAgICAgICAg
ICAgbV9jcmVkZW50aWFsRm9yUGVyc2lzdGVudFN0b3JhZ2UgPSBjcmVkZW50aWFsOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc291cF9hdXRoX2F1dGhl
bnRpY2F0ZShjaGFsbGVuZ2Uuc291cEF1dGgoKSwgY3JlZGVudGlhbC51c2VyKCkudXRmOCgpLmRh
dGEoKSwgY3JlZGVudGlhbC5wYXNzd29yZCgpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICB9CisK
KyAgICAgICAgc291cF9zZXNzaW9uX3VucGF1c2VfbWVzc2FnZShtX3Nlc3Npb24tPnNvdXBTZXNz
aW9uKCksIG1fc291cE1lc3NhZ2UuZ2V0KCkpOworICAgIH0pOworfQorCit2b2lkIE5ldHdvcmtE
YXRhVGFzazo6c2tpcElucHV0U3RyZWFtRm9yUmVkaXJlY3Rpb25DYWxsYmFjayhHSW5wdXRTdHJl
YW0qIGlucHV0U3RyZWFtLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgTmV0d29ya0RhdGFUYXNrKiB0
YXNrKQoreworICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2s+IHByb3RlY3RlZFRoaXMgPSBhZG9w
dFJlZih0YXNrKTsKKyAgICBpZiAodGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8
IHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNvbXBsZXRlZCB8fCAhdGFzay0+bV9jbGllbnQpIHsK
KyAgICAgICAgdGFzay0+Y2xlYXJSZXF1ZXN0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgQVNTRVJUKGlucHV0U3RyZWFtID09IHRhc2stPm1faW5wdXRTdHJlYW0uZ2V0KCkpOworCisg
ICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOworICAgIGdzc2l6ZSBieXRlc1NraXBwZWQg
PSBnX2lucHV0X3N0cmVhbV9za2lwX2ZpbmlzaChpbnB1dFN0cmVhbSwgcmVzdWx0LCAmZXJyb3Iu
b3V0UHRyKCkpOworICAgIGlmIChlcnJvcikKKyAgICAgICAgdGFzay0+ZGlkRmFpbChSZXNvdXJj
ZUVycm9yOjpnZW5lcmljR0Vycm9yKGVycm9yLmdldCgpLCB0YXNrLT5tX3NvdXBSZXF1ZXN0Lmdl
dCgpKSk7CisgICAgZWxzZSBpZiAoYnl0ZXNTa2lwcGVkID4gMCkKKyAgICAgICAgdGFzay0+c2tp
cElucHV0U3RyZWFtRm9yUmVkaXJlY3Rpb24oKTsKKyAgICBlbHNlCisgICAgICAgIHRhc2stPmRp
ZEZpbmlzaFNraXBJbnB1dFN0cmVhbUZvclJlZGlyZWN0aW9uKCk7Cit9CisKK3ZvaWQgTmV0d29y
a0RhdGFUYXNrOjpza2lwSW5wdXRTdHJlYW1Gb3JSZWRpcmVjdGlvbigpCit7CisgICAgQVNTRVJU
KG1faW5wdXRTdHJlYW0pOworICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2s+IHByb3RlY3RlZFRo
aXModGhpcyk7CisgICAgZ19pbnB1dF9zdHJlYW1fc2tpcF9hc3luYyhtX2lucHV0U3RyZWFtLmdl
dCgpLCBnRGVmYXVsdFJlYWRCdWZmZXJTaXplLCBHX1BSSU9SSVRZX0RFRkFVTFQsIG1fY2FuY2Vs
bGFibGUuZ2V0KCksCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFj
az4oc2tpcElucHV0U3RyZWFtRm9yUmVkaXJlY3Rpb25DYWxsYmFjayksIHByb3RlY3RlZFRoaXMu
bGVha1JlZigpKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZEZpbmlzaFNraXBJbnB1
dFN0cmVhbUZvclJlZGlyZWN0aW9uKCkKK3sKKyAgICBnX2lucHV0X3N0cmVhbV9jbG9zZShtX2lu
cHV0U3RyZWFtLmdldCgpLCBudWxscHRyLCBudWxscHRyKTsKKyAgICBjb250aW51ZUhUVFBSZWRp
cmVjdGlvbigpOworfQorCitzdGF0aWMgYm9vbCBzaG91bGRSZWRpcmVjdEFzR0VUKFNvdXBNZXNz
YWdlKiBtZXNzYWdlLCBib29sIGNyb3NzT3JpZ2luKQoreworICAgIGlmIChtZXNzYWdlLT5tZXRo
b2QgPT0gU09VUF9NRVRIT0RfR0VUIHx8IG1lc3NhZ2UtPm1ldGhvZCA9PSBTT1VQX01FVEhPRF9I
RUFEKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKG1lc3NhZ2UtPnN0YXR1
c19jb2RlKSB7CisgICAgY2FzZSBTT1VQX1NUQVRVU19TRUVfT1RIRVI6CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIGNhc2UgU09VUF9TVEFUVVNfRk9VTkQ6CisgICAgY2FzZSBTT1VQX1NUQVRV
U19NT1ZFRF9QRVJNQU5FTlRMWToKKyAgICAgICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCA9PSBTT1VQ
X01FVEhPRF9QT1NUKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGlmIChjcm9zc09yaWdpbiAmJiBtZXNzYWdlLT5tZXRob2QgPT0gU09VUF9N
RVRIT0RfREVMRVRFKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsK
K30KKworYm9vbCBOZXR3b3JrRGF0YVRhc2s6OnNob3VsZFN0YXJ0SFRUUFJlZGlyZWN0aW9uKCkK
K3sKKyAgICBBU1NFUlQobV9zb3VwTWVzc2FnZSk7CisgICAgQVNTRVJUKCFtX3Jlc3BvbnNlLmlz
TnVsbCgpKTsKKworICAgIGF1dG8gc3RhdHVzID0gbV9yZXNwb25zZS5odHRwU3RhdHVzQ29kZSgp
OworICAgIGlmICghU09VUF9TVEFUVVNfSVNfUkVESVJFQ1RJT04oc3RhdHVzKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgLy8gU29tZSAzeHggc3RhdHVzIGNvZGVzIGFyZW4ndCBhY3R1
YWxseSByZWRpcmVjdHMuCisgICAgaWYgKHN0YXR1cyA9PSAzMDAgfHwgc3RhdHVzID09IDMwNCB8
fCBzdGF0dXMgPT0gMzA1IHx8IHN0YXR1cyA9PSAzMDYpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGlmIChtX3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6TG9j
YXRpb24pLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpjb250aW51ZUhUVFBSZWRpcmVjdGlvbigp
Cit7CisgICAgQVNTRVJUKG1fc291cE1lc3NhZ2UpOworICAgIEFTU0VSVCghbV9yZXNwb25zZS5p
c051bGwoKSk7CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4UmVkaXJlY3RzID0gMjA7
CisgICAgaWYgKG1fcmVkaXJlY3RDb3VudCsrID4gbWF4UmVkaXJlY3RzKSB7CisgICAgICAgIGRp
ZEZhaWwoUmVzb3VyY2VFcnJvcjo6dHJhbnNwb3J0RXJyb3IobV9zb3VwUmVxdWVzdC5nZXQoKSwg
U09VUF9TVEFUVVNfVE9PX01BTllfUkVESVJFQ1RTLCAiVG9vIG1hbnkgcmVkaXJlY3RzIikpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QgPSBt
X2ZpcnN0UmVxdWVzdDsKKyAgICByZXF1ZXN0LnNldFVSTChVUkwobV9yZXNwb25zZS51cmwoKSwg
bV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkxvY2F0aW9uKSkpOwor
ICAgIHJlcXVlc3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMocmVxdWVzdC51cmwoKSk7CisKKyAg
ICAvLyBTaG91bGQgbm90IHNldCBSZWZlcmVyIGFmdGVyIGEgcmVkaXJlY3QgZnJvbSBhIHNlY3Vy
ZSByZXNvdXJjZSB0byBub24tc2VjdXJlIG9uZS4KKyAgICBpZiAobV9zaG91bGRDbGVhclJlZmVy
cmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0ICYmICFyZXF1ZXN0LnVybCgpLnByb3RvY29sSXMoImh0
dHBzIikgJiYgcHJvdG9jb2xJcyhyZXF1ZXN0Lmh0dHBSZWZlcnJlcigpLCAiaHR0cHMiKSkKKyAg
ICAgICAgcmVxdWVzdC5jbGVhckhUVFBSZWZlcnJlcigpOworCisgICAgYm9vbCBpc0Nyb3NzT3Jp
Z2luID0gIXByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVhbChtX2ZpcnN0UmVxdWVzdC51cmwoKSwg
cmVxdWVzdC51cmwoKSk7CisgICAgaWYgKCFlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShy
ZXF1ZXN0Lmh0dHBNZXRob2QoKSwgIkdFVCIpKSB7CisgICAgICAgIC8vIENoYW5nZSBuZXdSZXF1
ZXN0IG1ldGhvZCB0byBHRVQgaWYgY2hhbmdlIHdhcyBtYWRlIGR1cmluZyBhIHByZXZpb3VzIHJl
ZGlyZWN0aW9uIG9yIGlmIGN1cnJlbnQgcmVkaXJlY3Rpb24gc2F5cyBzby4KKyAgICAgICAgaWYg
KG1fc291cE1lc3NhZ2UtPm1ldGhvZCA9PSBTT1VQX01FVEhPRF9HRVQgfHwgIXJlcXVlc3QudXJs
KCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpIHx8IHNob3VsZFJlZGlyZWN0QXNHRVQobV9zb3Vw
TWVzc2FnZS5nZXQoKSwgaXNDcm9zc09yaWdpbikpIHsKKyAgICAgICAgICAgIHJlcXVlc3Quc2V0
SFRUUE1ldGhvZCgiR0VUIik7CisgICAgICAgICAgICByZXF1ZXN0LnNldEhUVFBCb2R5KG51bGxw
dHIpOworICAgICAgICAgICAgcmVxdWVzdC5jbGVhckhUVFBDb250ZW50VHlwZSgpOworICAgICAg
ICB9CisgICAgfQorCisgICAgY29uc3QgYXV0byYgdXJsID0gcmVxdWVzdC51cmwoKTsKKyAgICBt
X3VzZXIgPSB1cmwudXNlcigpOworICAgIG1fcGFzc3dvcmQgPSB1cmwucGFzcygpOworICAgIG1f
bGFzdEhUVFBNZXRob2QgPSByZXF1ZXN0Lmh0dHBNZXRob2QoKTsKKyAgICByZXF1ZXN0LnJlbW92
ZUNyZWRlbnRpYWxzKCk7CisKKyAgICBpZiAoaXNDcm9zc09yaWdpbikgeworICAgICAgICAvLyBU
aGUgbmV0d29yayBsYXllciBtaWdodCBjYXJyeSBvdmVyIHNvbWUgaGVhZGVycyBmcm9tIHRoZSBv
cmlnaW5hbCByZXF1ZXN0IHRoYXQKKyAgICAgICAgLy8gd2Ugd2FudCB0byBzdHJpcCBoZXJlIGJl
Y2F1c2UgdGhlIHJlZGlyZWN0IGlzIGNyb3NzLW9yaWdpbi4KKyAgICAgICAgcmVxdWVzdC5jbGVh
ckhUVFBBdXRob3JpemF0aW9uKCk7CisgICAgICAgIHJlcXVlc3QuY2xlYXJIVFRQT3JpZ2luKCk7
CisgICAgfSBlbHNlIGlmICh1cmwucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpICYmIG1fc3RvcmVk
Q3JlZGVudGlhbHMgPT0gQWxsb3dTdG9yZWRDcmVkZW50aWFscykgeworICAgICAgICBpZiAobV91
c2VyLmlzRW1wdHkoKSAmJiBtX3Bhc3N3b3JkLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgYXV0
byBjcmVkZW50aWFsID0gbV9zZXNzaW9uLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKS5jcmVkZW50
aWFsU3RvcmFnZSgpLmdldChyZXF1ZXN0LnVybCgpKTsKKyAgICAgICAgICAgIGlmICghY3JlZGVu
dGlhbC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgbV9pbml0aWFsQ3JlZGVudGlhbCA9IGNy
ZWRlbnRpYWw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbGVhclJlcXVlc3QoKTsKKworICAg
IGF1dG8gcmVzcG9uc2UgPSBSZXNvdXJjZVJlc3BvbnNlKG1fcmVzcG9uc2UpOworICAgIG1fY2xp
ZW50LT53aWxsUGVyZm9ybUhUVFBSZWRpcmVjdGlvbihXVEZNb3ZlKHJlc3BvbnNlKSwgV1RGTW92
ZShyZXF1ZXN0KSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgaXNDcm9z
c09yaWdpbl0oY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBuZXdSZXF1ZXN0KSB7CisgICAgICAgIGlm
IChuZXdSZXF1ZXN0LmlzTnVsbCgpIHx8IG1fc3RhdGUgPT0gU3RhdGU6OkNhbmNlbGluZykKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBhdXRvIHJlcXVlc3QgPSBuZXdSZXF1ZXN0Owor
ICAgICAgICBpZiAocmVxdWVzdC51cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpIHsKKyNp
ZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICAgICAgICAgIGlmIChpc0Nyb3NzT3JpZ2luKQorICAg
ICAgICAgICAgICAgIG1fc3RhcnRUaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lTVMo
KTsKKyNlbmRpZgorICAgICAgICAgICAgYXBwbHlBdXRoZW50aWNhdGlvblRvUmVxdWVzdChyZXF1
ZXN0KTsKKyAgICAgICAgfQorICAgICAgICBjcmVhdGVSZXF1ZXN0KHJlcXVlc3QpOworICAgICAg
ICBpZiAobV9zb3VwUmVxdWVzdCAmJiBtX3N0YXRlICE9IFN0YXRlOjpTdXNwZW5kZWQpIHsKKyAg
ICAgICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6U3VzcGVuZGVkOworICAgICAgICAgICAgcmVzdW1l
KCk7CisgICAgICAgIH0KKyAgICB9KTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2s6OnJlYWRD
YWxsYmFjayhHSW5wdXRTdHJlYW0qIGlucHV0U3RyZWFtLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwg
TmV0d29ya0RhdGFUYXNrKiB0YXNrKQoreworICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2s+IHBy
b3RlY3RlZFRoaXMgPSBhZG9wdFJlZih0YXNrKTsKKyAgICBpZiAodGFzay0+c3RhdGUoKSA9PSBT
dGF0ZTo6Q2FuY2VsaW5nIHx8IHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNvbXBsZXRlZCB8fCAo
IXRhc2stPm1fY2xpZW50ICYmICF0YXNrLT5pc0Rvd25sb2FkKCkpKSB7CisgICAgICAgIHRhc2st
PmNsZWFyUmVxdWVzdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFTU0VSVChpbnB1
dFN0cmVhbSA9PSB0YXNrLT5tX2lucHV0U3RyZWFtLmdldCgpKTsKKworICAgIGlmICh0YXNrLT5z
dGF0ZSgpID09IFN0YXRlOjpTdXNwZW5kZWQpIHsKKyAgICAgICAgQVNTRVJUKCF0YXNrLT5tX3Bl
bmRpbmdSZXN1bHQpOworICAgICAgICB0YXNrLT5tX3BlbmRpbmdSZXN1bHQgPSByZXN1bHQ7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7
CisgICAgZ3NzaXplIGJ5dGVzUmVhZCA9IGdfaW5wdXRfc3RyZWFtX3JlYWRfZmluaXNoKGlucHV0
U3RyZWFtLCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSk7CisgICAgaWYgKGVycm9yKQorICAgICAg
ICB0YXNrLT5kaWRGYWlsKFJlc291cmNlRXJyb3I6OmdlbmVyaWNHRXJyb3IoZXJyb3IuZ2V0KCks
IHRhc2stPm1fc291cFJlcXVlc3QuZ2V0KCkpKTsKKyAgICBlbHNlIGlmIChieXRlc1JlYWQgPiAw
KQorICAgICAgICB0YXNrLT5kaWRSZWFkKGJ5dGVzUmVhZCk7CisgICAgZWxzZQorICAgICAgICB0
YXNrLT5kaWRGaW5pc2hSZWFkKCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpyZWFkKCkK
K3sKKyAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAg
IEFTU0VSVChtX2lucHV0U3RyZWFtKTsKKyAgICBtX3JlYWRCdWZmZXIuZ3JvdyhnRGVmYXVsdFJl
YWRCdWZmZXJTaXplKTsKKyAgICBnX2lucHV0X3N0cmVhbV9yZWFkX2FzeW5jKG1faW5wdXRTdHJl
YW0uZ2V0KCksIG1fcmVhZEJ1ZmZlci5kYXRhKCksIG1fcmVhZEJ1ZmZlci5zaXplKCksIEdfUFJJ
T1JJVFlfREVGQVVMVCwgbV9jYW5jZWxsYWJsZS5nZXQoKSwKKyAgICAgICAgcmVpbnRlcnByZXRf
Y2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihyZWFkQ2FsbGJhY2spLCBwcm90ZWN0ZWRUaGlzLmxl
YWtSZWYoKSk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRSZWFkKGdzc2l6ZSBieXRl
c1JlYWQpCit7CisgICAgbV9yZWFkQnVmZmVyLnNocmluayhieXRlc1JlYWQpOworICAgIGlmICht
X2Rvd25sb2FkT3V0cHV0U3RyZWFtKSB7CisgICAgICAgIEFTU0VSVChpc0Rvd25sb2FkKCkpOwor
ICAgICAgICB3cml0ZURvd25sb2FkKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKG1f
Y2xpZW50KTsKKyAgICAgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVEYXRhKFNoYXJlZEJ1ZmZlcjo6
YWRvcHRWZWN0b3IobV9yZWFkQnVmZmVyKSk7CisgICAgICAgIHJlYWQoKTsKKyAgICB9Cit9CisK
K3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRGaW5pc2hSZWFkKCkKK3sKKyAgICBBU1NFUlQobV9p
bnB1dFN0cmVhbSk7CisgICAgZ19pbnB1dF9zdHJlYW1fY2xvc2UobV9pbnB1dFN0cmVhbS5nZXQo
KSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgbV9pbnB1dFN0cmVhbSA9IG51bGxwdHI7CisgICAg
aWYgKG1fbXVsdGlwYXJ0SW5wdXRTdHJlYW0pIHsKKyAgICAgICAgcmVxdWVzdE5leHRQYXJ0KCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9kb3dubG9hZE91dHB1dFN0cmVh
bSkgeworICAgICAgICBkaWRGaW5pc2hEb3dubG9hZCgpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgY2xlYXJSZXF1ZXN0KCk7CisgICAgQVNTRVJUKG1fY2xpZW50KTsKKyAgICBtX2Ns
aWVudC0+ZGlkQ29tcGxldGVXaXRoRXJyb3IoeyB9KTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRh
c2s6OnJlcXVlc3ROZXh0UGFydENhbGxiYWNrKFNvdXBNdWx0aXBhcnRJbnB1dFN0cmVhbSogbXVs
dGlwYXJ0SW5wdXRTdHJlYW0sIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBOZXR3b3JrRGF0YVRhc2sq
IHRhc2spCit7CisgICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4gcHJvdGVjdGVkVGhpcyA9IGFk
b3B0UmVmKHRhc2spOworICAgIGlmICh0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDYW5jZWxpbmcg
fHwgdGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICF0YXNrLT5tX2NsaWVudCkg
eworICAgICAgICB0YXNrLT5jbGVhclJlcXVlc3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBBU1NFUlQobXVsdGlwYXJ0SW5wdXRTdHJlYW0gPT0gdGFzay0+bV9tdWx0aXBhcnRJbnB1
dFN0cmVhbS5nZXQoKSk7CisKKyAgICBpZiAodGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6U3VzcGVu
ZGVkKSB7CisgICAgICAgIEFTU0VSVCghdGFzay0+bV9wZW5kaW5nUmVzdWx0KTsKKyAgICAgICAg
dGFzay0+bV9wZW5kaW5nUmVzdWx0ID0gcmVzdWx0OworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOworICAgIEdSZWZQdHI8R0lucHV0U3Ry
ZWFtPiBpbnB1dFN0cmVhbSA9IGFkb3B0R1JlZihzb3VwX211bHRpcGFydF9pbnB1dF9zdHJlYW1f
bmV4dF9wYXJ0X2ZpbmlzaChtdWx0aXBhcnRJbnB1dFN0cmVhbSwgcmVzdWx0LCAmZXJyb3Iub3V0
UHRyKCkpKTsKKyAgICBpZiAoZXJyb3IpCisgICAgICAgIHRhc2stPmRpZEZhaWwoUmVzb3VyY2VF
cnJvcjo6aHR0cEVycm9yKHRhc2stPm1fc291cE1lc3NhZ2UuZ2V0KCksIGVycm9yLmdldCgpLCB0
YXNrLT5tX3NvdXBSZXF1ZXN0LmdldCgpKSk7CisgICAgZWxzZSBpZiAoaW5wdXRTdHJlYW0pCisg
ICAgICAgIHRhc2stPmRpZFJlcXVlc3ROZXh0UGFydChXVEZNb3ZlKGlucHV0U3RyZWFtKSk7Cisg
ICAgZWxzZQorICAgICAgICB0YXNrLT5kaWRGaW5pc2hSZXF1ZXN0TmV4dFBhcnQoKTsKK30KKwor
dm9pZCBOZXR3b3JrRGF0YVRhc2s6OnJlcXVlc3ROZXh0UGFydCgpCit7CisgICAgUmVmUHRyPE5l
dHdvcmtEYXRhVGFzaz4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBBU1NFUlQobV9tdWx0aXBh
cnRJbnB1dFN0cmVhbSk7CisgICAgQVNTRVJUKCFtX2lucHV0U3RyZWFtKTsKKyAgICBzb3VwX211
bHRpcGFydF9pbnB1dF9zdHJlYW1fbmV4dF9wYXJ0X2FzeW5jKG1fbXVsdGlwYXJ0SW5wdXRTdHJl
YW0uZ2V0KCksIEdfUFJJT1JJVFlfREVGQVVMVCwgbV9jYW5jZWxsYWJsZS5nZXQoKSwKKyAgICAg
ICAgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihyZXF1ZXN0TmV4dFBhcnRD
YWxsYmFjayksIHByb3RlY3RlZFRoaXMubGVha1JlZigpKTsKK30KKwordm9pZCBOZXR3b3JrRGF0
YVRhc2s6OmRpZFJlcXVlc3ROZXh0UGFydChHUmVmUHRyPEdJbnB1dFN0cmVhbT4mJiBpbnB1dFN0
cmVhbSkKK3sKKyAgICBBU1NFUlQoIW1faW5wdXRTdHJlYW0pOworICAgIG1faW5wdXRTdHJlYW0g
PSBXVEZNb3ZlKGlucHV0U3RyZWFtKTsKKyAgICBtX3Jlc3BvbnNlID0gUmVzb3VyY2VSZXNwb25z
ZSgpOworICAgIG1fcmVzcG9uc2Uuc2V0VVJMKG1fZmlyc3RSZXF1ZXN0LnVybCgpKTsKKyAgICBt
X3Jlc3BvbnNlLnVwZGF0ZUZyb21Tb3VwTWVzc2FnZUhlYWRlcnMoc291cF9tdWx0aXBhcnRfaW5w
dXRfc3RyZWFtX2dldF9oZWFkZXJzKG1fbXVsdGlwYXJ0SW5wdXRTdHJlYW0uZ2V0KCkpKTsKKyAg
ICBkaWRSZWNlaXZlUmVzcG9uc2UoKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZEZp
bmlzaFJlcXVlc3ROZXh0UGFydCgpCit7CisgICAgQVNTRVJUKCFtX2lucHV0U3RyZWFtKTsKKyAg
ICBBU1NFUlQobV9tdWx0aXBhcnRJbnB1dFN0cmVhbSk7CisgICAgZ19pbnB1dF9zdHJlYW1fY2xv
c2UoR19JTlBVVF9TVFJFQU0obV9tdWx0aXBhcnRJbnB1dFN0cmVhbS5nZXQoKSksIG51bGxwdHIs
IG51bGxwdHIpOworICAgIGNsZWFyUmVxdWVzdCgpOworICAgIG1fY2xpZW50LT5kaWRDb21wbGV0
ZVdpdGhFcnJvcih7IH0pOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6Z290SGVhZGVyc0Nh
bGxiYWNrKFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSwgTmV0d29ya0RhdGFUYXNrKiB0YXNrKQor
eworICAgIGlmICh0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgdGFzay0+c3Rh
dGUoKSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICF0YXNrLT5tX2NsaWVudCkgeworICAgICAgICB0
YXNrLT5jbGVhclJlcXVlc3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBU1NFUlQo
dGFzay0+bV9zb3VwTWVzc2FnZS5nZXQoKSA9PSBzb3VwTWVzc2FnZSk7CisgICAgdGFzay0+ZGlk
R2V0SGVhZGVycygpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlkR2V0SGVhZGVycygp
Cit7CisgICAgLy8gV2UgYXJlIGEgYml0IG1vcmUgY29uc2VydmF0aXZlIHdpdGggdGhlIHBlcnNp
c3RlbnQgY3JlZGVudGlhbCBzdG9yYWdlIHRoYW4gdGhlIHNlc3Npb24gc3RvcmUsCisgICAgLy8g
c2luY2Ugd2UgYXJlIHdhaXRpbmcgdW50aWwgd2Uga25vdyB0aGF0IHRoaXMgYXV0aGVudGljYXRp
b24gc3VjY2VlZGVkIGJlZm9yZSBhY3R1YWxseSBzdG9yaW5nLgorICAgIC8vIFRoaXMgaXMgYmVj
YXVzZSB3ZSB3YW50IHRvIGF2b2lkIGhpdHRpbmcgdGhlIGRpc2sgdHdpY2UgKG9uY2UgdG8gYWRk
IGFuZCBvbmNlIHRvIHJlbW92ZSkgZm9yCisgICAgLy8gaW5jb3JyZWN0IGNyZWRlbnRpYWxzIG9y
IHBvbGx1dGluZyB0aGUga2V5Y2hhaW4gd2l0aCBpbnZhbGlkIGNyZWRlbnRpYWxzLgorICAgIGlm
ICghaXNBdXRoZW50aWNhdGlvbkZhaWx1cmVTdGF0dXNDb2RlKG1fc291cE1lc3NhZ2UtPnN0YXR1
c19jb2RlKSAmJiBtX3NvdXBNZXNzYWdlLT5zdGF0dXNfY29kZSA8IDUwMCkgeworICAgICAgICBt
X3Nlc3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpLnNhdmVDcmVkZW50aWFsVG9QZXJzaXN0
ZW50U3RvcmFnZShtX3Byb3RlY3Rpb25TcGFjZUZvclBlcnNpc3RlbnRTdG9yYWdlLCBtX2NyZWRl
bnRpYWxGb3JQZXJzaXN0ZW50U3RvcmFnZSk7CisgICAgICAgIG1fcHJvdGVjdGlvblNwYWNlRm9y
UGVyc2lzdGVudFN0b3JhZ2UgPSBQcm90ZWN0aW9uU3BhY2UoKTsKKyAgICAgICAgbV9jcmVkZW50
aWFsRm9yUGVyc2lzdGVudFN0b3JhZ2UgPSBDcmVkZW50aWFsKCk7CisgICAgfQorfQorCit2b2lk
IE5ldHdvcmtEYXRhVGFzazo6d3JvdGVCb2R5RGF0YUNhbGxiYWNrKFNvdXBNZXNzYWdlKiBzb3Vw
TWVzc2FnZSwgU291cEJ1ZmZlciogYnVmZmVyLCBOZXR3b3JrRGF0YVRhc2sqIHRhc2spCit7Cisg
ICAgaWYgKHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCB0YXNrLT5zdGF0ZSgp
ID09IFN0YXRlOjpDb21wbGV0ZWQgfHwgIXRhc2stPm1fY2xpZW50KSB7CisgICAgICAgIHRhc2st
PmNsZWFyUmVxdWVzdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFTU0VSVCh0YXNr
LT5tX3NvdXBNZXNzYWdlLmdldCgpID09IHNvdXBNZXNzYWdlKTsKKyAgICB0YXNrLT5kaWRXcml0
ZUJvZHlEYXRhKGJ1ZmZlci0+bGVuZ3RoKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRp
ZFdyaXRlQm9keURhdGEodWludDY0X3QgYnl0ZXNTZW50KQoreworICAgIFJlZlB0cjxOZXR3b3Jr
RGF0YVRhc2s+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgbV9ib2R5RGF0YVRvdGFsQnl0ZXNT
ZW50ICs9IGJ5dGVzU2VudDsKKyAgICBtX2NsaWVudC0+ZGlkU2VuZERhdGEobV9ib2R5RGF0YVRv
dGFsQnl0ZXNTZW50LCBtX3NvdXBNZXNzYWdlLT5yZXF1ZXN0X2JvZHktPmxlbmd0aCk7Cit9CisK
K3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpkb3dubG9hZCgpCit7CisgICAgQVNTRVJUKGlzRG93bmxv
YWQoKSk7CisgICAgQVNTRVJUKG1fcGVuZGluZ0Rvd25sb2FkTG9jYXRpb24pOworICAgIEFTU0VS
VCghbV9yZXNwb25zZS5pc051bGwoKSk7CisKKyAgICBpZiAobV9yZXNwb25zZS5odHRwU3RhdHVz
Q29kZSgpID49IDQwMCkgeworICAgICAgICBkaWRGYWlsRG93bmxvYWQocGxhdGZvcm1Eb3dubG9h
ZE5ldHdvcmtFcnJvcihtX3Jlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCksIG1fcmVzcG9uc2UudXJs
KCksIG1fcmVzcG9uc2UuaHR0cFN0YXR1c1RleHQoKSkpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgbV9kb3dubG9hZERlc3RpbmF0aW9uRmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3
X2Zvcl91cmkobV9wZW5kaW5nRG93bmxvYWRMb2NhdGlvbi51dGY4KCkuZGF0YSgpKSk7CisgICAg
R1JlZlB0cjxHRmlsZU91dHB1dFN0cmVhbT4gb3V0cHV0U3RyZWFtOworICAgIEdVbmlxdWVPdXRQ
dHI8R0Vycm9yPiBlcnJvcjsKKyAgICBpZiAobV9hbGxvd092ZXJ3cml0ZURvd25sb2FkKQorICAg
ICAgICBvdXRwdXRTdHJlYW0gPSBhZG9wdEdSZWYoZ19maWxlX3JlcGxhY2UobV9kb3dubG9hZERl
c3RpbmF0aW9uRmlsZS5nZXQoKSwgbnVsbHB0ciwgRkFMU0UsIEdfRklMRV9DUkVBVEVfTk9ORSwg
bnVsbHB0ciwgJmVycm9yLm91dFB0cigpKSk7CisgICAgZWxzZQorICAgICAgICBvdXRwdXRTdHJl
YW0gPSBhZG9wdEdSZWYoZ19maWxlX2NyZWF0ZShtX2Rvd25sb2FkRGVzdGluYXRpb25GaWxlLmdl
dCgpLCBHX0ZJTEVfQ1JFQVRFX05PTkUsIG51bGxwdHIsICZlcnJvci5vdXRQdHIoKSkpOworICAg
IGlmICghb3V0cHV0U3RyZWFtKSB7CisgICAgICAgIGRpZEZhaWxEb3dubG9hZChwbGF0Zm9ybURv
d25sb2FkRGVzdGluYXRpb25FcnJvcihtX3Jlc3BvbnNlLCBlcnJvci0+bWVzc2FnZSkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgU3RyaW5nIGludGVybWVkaWF0ZVVSSSA9IG1fcGVu
ZGluZ0Rvd25sb2FkTG9jYXRpb24gKyAiLndrZG93bmxvYWQiOworICAgIG1fZG93bmxvYWRJbnRl
cm1lZGlhdGVGaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3VyaShpbnRlcm1lZGlhdGVV
UkkudXRmOCgpLmRhdGEoKSkpOworICAgIG91dHB1dFN0cmVhbSA9IGFkb3B0R1JlZihnX2ZpbGVf
cmVwbGFjZShtX2Rvd25sb2FkSW50ZXJtZWRpYXRlRmlsZS5nZXQoKSwgMCwgVFJVRSwgR19GSUxF
X0NSRUFURV9OT05FLCAwLCAmZXJyb3Iub3V0UHRyKCkpKTsKKyAgICBpZiAoIW91dHB1dFN0cmVh
bSkgeworICAgICAgICBkaWRGYWlsRG93bmxvYWQocGxhdGZvcm1Eb3dubG9hZERlc3RpbmF0aW9u
RXJyb3IobV9yZXNwb25zZSwgZXJyb3ItPm1lc3NhZ2UpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBtX2Rvd25sb2FkT3V0cHV0U3RyZWFtID0gYWRvcHRHUmVmKEdfT1VUUFVUX1NUUkVB
TShvdXRwdXRTdHJlYW0ubGVha1JlZigpKSk7CisKKyAgICBhdXRvJiBkb3dubG9hZE1hbmFnZXIg
PSBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuZG93bmxvYWRNYW5hZ2VyKCk7CisgICAgYXV0
byBkb3dubG9hZCA9IHN0ZDo6bWFrZV91bmlxdWU8RG93bmxvYWQ+KGRvd25sb2FkTWFuYWdlciwg
bV9wZW5kaW5nRG93bmxvYWRJRCwgdGhpcywgbV9zZXNzaW9uLT5zZXNzaW9uSUQoKSwgc3VnZ2Vz
dGVkRmlsZW5hbWUoKSk7CisgICAgYXV0byogZG93bmxvYWRQdHIgPSBkb3dubG9hZC5nZXQoKTsK
KyAgICBkb3dubG9hZE1hbmFnZXIuZGF0YVRhc2tCZWNhbWVEb3dubG9hZFRhc2sobV9wZW5kaW5n
RG93bmxvYWRJRCwgV1RGTW92ZShkb3dubG9hZCkpOworICAgIGRvd25sb2FkUHRyLT5kaWRDcmVh
dGVEZXN0aW5hdGlvbihtX3BlbmRpbmdEb3dubG9hZExvY2F0aW9uKTsKKworICAgIEFTU0VSVCht
X2NsaWVudCk7CisgICAgbV9jbGllbnQtPmRpZEJlY29tZURvd25sb2FkKCk7CisKKyAgICByZWFk
KCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjp3cml0ZURvd25sb2FkQ2FsbGJhY2soR091
dHB1dFN0cmVhbSogb3V0cHV0U3RyZWFtLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgTmV0d29ya0Rh
dGFUYXNrKiB0YXNrKQoreworICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2s+IHByb3RlY3RlZFRo
aXMgPSBhZG9wdFJlZih0YXNrKTsKKyAgICBpZiAodGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q2Fu
Y2VsaW5nIHx8IHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNvbXBsZXRlZCB8fCAhdGFzay0+aXNE
b3dubG9hZCgpKSB7CisgICAgICAgIHRhc2stPmNsZWFyUmVxdWVzdCgpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIEFTU0VSVChvdXRwdXRTdHJlYW0gPT0gdGFzay0+bV9kb3dubG9hZE91
dHB1dFN0cmVhbS5nZXQoKSk7CisKKyAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7Cisg
ICAgZ3NpemUgYnl0ZXNXcml0dGVuOworICAgIGdfb3V0cHV0X3N0cmVhbV93cml0ZV9hbGxfZmlu
aXNoKG91dHB1dFN0cmVhbSwgcmVzdWx0LCAmYnl0ZXNXcml0dGVuLCAmZXJyb3Iub3V0UHRyKCkp
OworICAgIGlmIChlcnJvcikKKyAgICAgICAgdGFzay0+ZGlkRmFpbERvd25sb2FkKHBsYXRmb3Jt
RG93bmxvYWREZXN0aW5hdGlvbkVycm9yKHRhc2stPm1fcmVzcG9uc2UsIGVycm9yLT5tZXNzYWdl
KSk7CisgICAgZWxzZQorICAgICAgICB0YXNrLT5kaWRXcml0ZURvd25sb2FkKGJ5dGVzV3JpdHRl
bik7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjp3cml0ZURvd25sb2FkKCkKK3sKKyAgICBS
ZWZQdHI8TmV0d29ya0RhdGFUYXNrPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIGdfb3V0cHV0
X3N0cmVhbV93cml0ZV9hbGxfYXN5bmMobV9kb3dubG9hZE91dHB1dFN0cmVhbS5nZXQoKSwgbV9y
ZWFkQnVmZmVyLmRhdGEoKSwgbV9yZWFkQnVmZmVyLnNpemUoKSwgR19QUklPUklUWV9ERUZBVUxU
LCBtX2NhbmNlbGxhYmxlLmdldCgpLAorICAgICAgICByZWludGVycHJldF9jYXN0PEdBc3luY1Jl
YWR5Q2FsbGJhY2s+KHdyaXRlRG93bmxvYWRDYWxsYmFjayksIHByb3RlY3RlZFRoaXMubGVha1Jl
ZigpKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZFdyaXRlRG93bmxvYWQoZ3NpemUg
Ynl0ZXNXcml0dGVuKQoreworICAgIEFTU0VSVChieXRlc1dyaXR0ZW4gPT0gbV9yZWFkQnVmZmVy
LnNpemUoKSk7CisgICAgYXV0byogZG93bmxvYWQgPSBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9u
KCkuZG93bmxvYWRNYW5hZ2VyKCkuZG93bmxvYWQobV9wZW5kaW5nRG93bmxvYWRJRCk7CisgICAg
QVNTRVJUKGRvd25sb2FkKTsKKyAgICBkb3dubG9hZC0+ZGlkUmVjZWl2ZURhdGEoYnl0ZXNXcml0
dGVuKTsKKyAgICByZWFkKCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRGaW5pc2hE
b3dubG9hZCgpCit7CisgICAgQVNTRVJUKCFtX3Jlc3BvbnNlLmlzTnVsbCgpKTsKKyAgICBBU1NF
UlQobV9kb3dubG9hZE91dHB1dFN0cmVhbSk7CisgICAgZ19vdXRwdXRfc3RyZWFtX2Nsb3NlKG1f
ZG93bmxvYWRPdXRwdXRTdHJlYW0uZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAgIG1fZG93
bmxvYWRPdXRwdXRTdHJlYW0gPSBudWxscHRyOworCisgICAgQVNTRVJUKG1fZG93bmxvYWREZXN0
aW5hdGlvbkZpbGUpOworICAgIEFTU0VSVChtX2Rvd25sb2FkSW50ZXJtZWRpYXRlRmlsZSk7Cisg
ICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOworICAgIGlmICghZ19maWxlX21vdmUobV9k
b3dubG9hZEludGVybWVkaWF0ZUZpbGUuZ2V0KCksIG1fZG93bmxvYWREZXN0aW5hdGlvbkZpbGUu
Z2V0KCksIEdfRklMRV9DT1BZX09WRVJXUklURSwgbV9jYW5jZWxsYWJsZS5nZXQoKSwgbnVsbHB0
ciwgbnVsbHB0ciwgJmVycm9yLm91dFB0cigpKSkgeworICAgICAgICBkaWRGYWlsRG93bmxvYWQo
cGxhdGZvcm1Eb3dubG9hZERlc3RpbmF0aW9uRXJyb3IobV9yZXNwb25zZSwgZXJyb3ItPm1lc3Nh
Z2UpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEdSZWZQdHI8R0ZpbGVJbmZvPiBp
bmZvID0gYWRvcHRHUmVmKGdfZmlsZV9pbmZvX25ldygpKTsKKyAgICBDU3RyaW5nIHVyaSA9IG1f
cmVzcG9uc2UudXJsKCkuc3RyaW5nKCkudXRmOCgpOworICAgIGdfZmlsZV9pbmZvX3NldF9hdHRy
aWJ1dGVfc3RyaW5nKGluZm8uZ2V0KCksICJtZXRhZGF0YTo6ZG93bmxvYWQtdXJpIiwgdXJpLmRh
dGEoKSk7CisgICAgZ19maWxlX2luZm9fc2V0X2F0dHJpYnV0ZV9zdHJpbmcoaW5mby5nZXQoKSwg
InhhdHRyOjp4ZGcub3JpZ2luLnVybCIsIHVyaS5kYXRhKCkpOworICAgIGdfZmlsZV9zZXRfYXR0
cmlidXRlc19hc3luYyhtX2Rvd25sb2FkRGVzdGluYXRpb25GaWxlLmdldCgpLCBpbmZvLmdldCgp
LCBHX0ZJTEVfUVVFUllfSU5GT19OT05FLCBHX1BSSU9SSVRZX0RFRkFVTFQsIG51bGxwdHIsIG51
bGxwdHIsIG51bGxwdHIpOworCisgICAgY2xlYXJSZXF1ZXN0KCk7CisgICAgYXV0byogZG93bmxv
YWQgPSBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuZG93bmxvYWRNYW5hZ2VyKCkuZG93bmxv
YWQobV9wZW5kaW5nRG93bmxvYWRJRCk7CisgICAgQVNTRVJUKGRvd25sb2FkKTsKKyAgICBkb3du
bG9hZC0+ZGlkRmluaXNoKCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRGYWlsRG93
bmxvYWQoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit7CisgICAgY2xlYXJSZXF1ZXN0KCk7
CisgICAgY2xlYW5Eb3dubG9hZEZpbGVzKCk7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBt
X2NsaWVudC0+ZGlkQ29tcGxldGVXaXRoRXJyb3IoZXJyb3IpOworICAgIGVsc2UgeworICAgICAg
ICBhdXRvKiBkb3dubG9hZCA9IE5ldHdvcmtQcm9jZXNzOjpzaW5nbGV0b24oKS5kb3dubG9hZE1h
bmFnZXIoKS5kb3dubG9hZChtX3BlbmRpbmdEb3dubG9hZElEKTsKKyAgICAgICAgQVNTRVJUKGRv
d25sb2FkKTsKKyAgICAgICAgZG93bmxvYWQtPmRpZEZhaWwoZXJyb3IsIElQQzo6RGF0YVJlZmVy
ZW5jZSgpKTsKKyAgICB9Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpjbGVhbkRvd25sb2Fk
RmlsZXMoKQoreworICAgIGlmIChtX2Rvd25sb2FkRGVzdGluYXRpb25GaWxlKSB7CisgICAgICAg
IGdfZmlsZV9kZWxldGUobV9kb3dubG9hZERlc3RpbmF0aW9uRmlsZS5nZXQoKSwgbnVsbHB0ciwg
bnVsbHB0cik7CisgICAgICAgIG1fZG93bmxvYWREZXN0aW5hdGlvbkZpbGUgPSBudWxscHRyOwor
ICAgIH0KKyAgICBpZiAobV9kb3dubG9hZEludGVybWVkaWF0ZUZpbGUpIHsKKyAgICAgICAgZ19m
aWxlX2RlbGV0ZShtX2Rvd25sb2FkSW50ZXJtZWRpYXRlRmlsZS5nZXQoKSwgbnVsbHB0ciwgbnVs
bHB0cik7CisgICAgICAgIG1fZG93bmxvYWRJbnRlcm1lZGlhdGVGaWxlID0gbnVsbHB0cjsKKyAg
ICB9Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJy
b3ImIGVycm9yKQoreworICAgIGlmIChpc0Rvd25sb2FkKCkpIHsKKyAgICAgICAgZGlkRmFpbERv
d25sb2FkKHBsYXRmb3JtRG93bmxvYWROZXR3b3JrRXJyb3IoZXJyb3IuZXJyb3JDb2RlKCksIGVy
cm9yLmZhaWxpbmdVUkwoKSwgZXJyb3IubG9jYWxpemVkRGVzY3JpcHRpb24oKSkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgY2xlYXJSZXF1ZXN0KCk7CisgICAgQVNTRVJUKG1fY2xp
ZW50KTsKKyAgICBtX2NsaWVudC0+ZGlkQ29tcGxldGVXaXRoRXJyb3IoZXJyb3IpOworfQorCisj
aWYgRU5BQkxFKFdFQl9USU1JTkcpCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6bmV0d29ya0V2ZW50
Q2FsbGJhY2soU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlLCBHU29ja2V0Q2xpZW50RXZlbnQgZXZl
bnQsIEdJT1N0cmVhbSosIE5ldHdvcmtEYXRhVGFzayogdGFzaykKK3sKKyAgICBpZiAodGFzay0+
c3RhdGUoKSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNv
bXBsZXRlZCB8fCAhdGFzay0+bV9jbGllbnQpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VS
VCh0YXNrLT5tX3NvdXBNZXNzYWdlLmdldCgpID09IHNvdXBNZXNzYWdlKTsKKyAgICB0YXNrLT5u
ZXR3b3JrRXZlbnQoZXZlbnQpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6bmV0d29ya0V2
ZW50KEdTb2NrZXRDbGllbnRFdmVudCBldmVudCkKK3sKKyAgICBkb3VibGUgZGVsdGFUaW1lID0g
bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lTVMoKSAtIG1fc3RhcnRUaW1lOworICAgIGF1dG8m
IGxvYWRUaW1pbmcgPSBtX3Jlc3BvbnNlLm5ldHdvcmtMb2FkVGltaW5nKCk7CisgICAgc3dpdGNo
IChldmVudCkgeworICAgIGNhc2UgR19TT0NLRVRfQ0xJRU5UX1JFU09MVklORzoKKyAgICAgICAg
bG9hZFRpbWluZy5kb21haW5Mb29rdXBTdGFydCA9IGRlbHRhVGltZTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBHX1NPQ0tFVF9DTElFTlRfUkVTT0xWRUQ6CisgICAgICAgIGxvYWRUaW1pbmcu
ZG9tYWluTG9va3VwRW5kID0gZGVsdGFUaW1lOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdf
U09DS0VUX0NMSUVOVF9DT05ORUNUSU5HOgorICAgICAgICBsb2FkVGltaW5nLmNvbm5lY3RTdGFy
dCA9IGRlbHRhVGltZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHX1NPQ0tFVF9DTElFTlRf
Q09OTkVDVEVEOgorICAgICAgICAvLyBXZWIgVGltaW5nIGNvbnNpZGVycyB0aGF0IGNvbm5lY3Rp
b24gdGltZSBpbnZvbHZlcyBkbnMsIHByb3h5ICYgVExTIG5lZ290aWF0aW9uLi4uCisgICAgICAg
IC8vIHNvIHdlIGJldHRlciBwaWNrIEdfU09DS0VUX0NMSUVOVF9DT01QTEVURSBmb3IgY29ubmVj
dEVuZAorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdfU09DS0VUX0NMSUVOVF9QUk9YWV9ORUdP
VElBVElORzoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHX1NPQ0tFVF9DTElFTlRfUFJPWFlf
TkVHT1RJQVRFRDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHX1NPQ0tFVF9DTElFTlRfVExT
X0hBTkRTSEFLSU5HOgorICAgICAgICBsb2FkVGltaW5nLnNlY3VyZUNvbm5lY3Rpb25TdGFydCA9
IGRlbHRhVGltZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHX1NPQ0tFVF9DTElFTlRfVExT
X0hBTkRTSEFLRUQ6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR19TT0NLRVRfQ0xJRU5UX0NP
TVBMRVRFOgorICAgICAgICBsb2FkVGltaW5nLmNvbm5lY3RFbmQgPSBkZWx0YVRpbWU7CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICBicmVhazsKKyAgICB9Cit9CisKKyNpZiBTT1VQX0NIRUNLX1ZFUlNJT04oMiwgNDks
IDkxKQordm9pZCBOZXR3b3JrRGF0YVRhc2s6OnN0YXJ0aW5nQ2FsbGJhY2soU291cE1lc3NhZ2Uq
IHNvdXBNZXNzYWdlLCBOZXR3b3JrRGF0YVRhc2sqIHRhc2spCit7CisgICAgaWYgKHRhc2stPnN0
YXRlKCkgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCB0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDb21w
bGV0ZWQgfHwgIXRhc2stPm1fY2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQo
dGFzay0+bV9zb3VwTWVzc2FnZS5nZXQoKSA9PSBzb3VwTWVzc2FnZSk7CisgICAgdGFzay0+ZGlk
U3RhcnRSZXF1ZXN0KCk7Cit9CisjZWxzZQordm9pZCBOZXR3b3JrRGF0YVRhc2s6OnJlcXVlc3RT
dGFydGVkQ2FsbGJhY2soU291cFNlc3Npb24qIHNlc3Npb24sIFNvdXBNZXNzYWdlKiBzb3VwTWVz
c2FnZSwgU291cFNvY2tldCosIE5ldHdvcmtEYXRhVGFzayogdGFzaykKK3sKKyAgICBBU1NFUlQo
c2Vzc2lvbiA9PSB0YXNrLT5tX3Nlc3Npb24tPnNvdXBTZXNzaW9uKCkpOworICAgIGlmIChzb3Vw
TWVzc2FnZSAhPSB0YXNrLT5tX3NvdXBNZXNzYWdlLmdldCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAodGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IHRhc2stPnN0YXRl
KCkgPT0gU3RhdGU6OkNvbXBsZXRlZCB8fCAhdGFzay0+bV9jbGllbnQpCisgICAgICAgIHJldHVy
bjsKKworICAgIHRhc2stPmRpZFN0YXJ0UmVxdWVzdCgpOworfQorI2VuZGlmCisKK3ZvaWQgTmV0
d29ya0RhdGFUYXNrOjpkaWRTdGFydFJlcXVlc3QoKQoreworICAgIG1fcmVzcG9uc2UubmV0d29y
a0xvYWRUaW1pbmcoKS5yZXF1ZXN0U3RhcnQgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWVN
UygpIC0gbV9zdGFydFRpbWU7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpyZXN0YXJ0ZWRD
YWxsYmFjayhTb3VwTWVzc2FnZSogc291cE1lc3NhZ2UsIE5ldHdvcmtEYXRhVGFzayogdGFzaykK
K3sKKyAgICAvLyBDYWxsZWQgZWFjaCB0aW1lIHRoZSBtZXNzYWdlIGlzIGdvaW5nIHRvIGJlIHNl
bnQgYWdhaW4gZXhjZXB0IHRoZSBmaXJzdCB0aW1lLgorICAgIC8vIFRoaXMgaGFwcGVucyB3aGVu
IGxpYnNvdXAgaGFuZGxlcyBIVFRQIGF1dGhlbnRpY2F0aW9uLgorICAgIGlmICh0YXNrLT5zdGF0
ZSgpID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgdGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q29tcGxl
dGVkIHx8ICF0YXNrLT5tX2NsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKHRh
c2stPm1fc291cE1lc3NhZ2UuZ2V0KCkgPT0gc291cE1lc3NhZ2UpOworICAgIHRhc2stPmRpZFJl
c3RhcnQoKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZFJlc3RhcnQoKQoreworICAg
IG1fc3RhcnRUaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lTVMoKTsKK30KKyNlbmRp
ZiAvLyBFTkFCTEUoV0VCX1RJTUlORykKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25T
b3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Np
b25Tb3VwLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGMyYzc3Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3
b3JrU2Vzc2lvblNvdXAuY3BwCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIk5ldHdvcmtTZXNzaW9uLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9yYWdl
U2Vzc2lvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU291cE5ldHdvcmtTZXNzaW9uLmg+CisjaW5j
bHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitSZWY8TmV0d29ya1Nlc3Npb24+IE5ldHdvcmtTZXNzaW9uOjpj
cmVhdGUoVHlwZSB0eXBlLCBTZXNzaW9uSUQgc2Vzc2lvbklELCBDdXN0b21Qcm90b2NvbE1hbmFn
ZXIqKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtTZXNzaW9uKHR5cGUsIHNl
c3Npb25JRCwgbnVsbHB0cikpOworfQorCitOZXR3b3JrU2Vzc2lvbiYgTmV0d29ya1Nlc3Npb246
OmRlZmF1bHRTZXNzaW9uKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIHN0
YXRpYyBOZXR3b3JrU2Vzc2lvbiogc2Vzc2lvbiA9ICZOZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKE5l
dHdvcmtTZXNzaW9uOjpUeXBlOjpOb3JtYWwsIFNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgp
LCBudWxscHRyKS5sZWFrUmVmKCk7CisgICAgcmV0dXJuICpzZXNzaW9uOworfQorCitOZXR3b3Jr
U3RvcmFnZVNlc3Npb24mIE5ldHdvcmtTZXNzaW9uOjpuZXR3b3JrU3RvcmFnZVNlc3Npb24oKSBj
b25zdAoreworICAgIGF1dG8qIHN0b3JhZ2VTZXNzaW9uID0gTmV0d29ya1N0b3JhZ2VTZXNzaW9u
OjpzdG9yYWdlU2Vzc2lvbihtX3Nlc3Npb25JRCk7CisgICAgUkVMRUFTRV9BU1NFUlQoc3RvcmFn
ZVNlc3Npb24pOworICAgIHJldHVybiAqc3RvcmFnZVNlc3Npb247Cit9CisKK05ldHdvcmtTZXNz
aW9uOjpOZXR3b3JrU2Vzc2lvbihUeXBlIHR5cGUsIFNlc3Npb25JRCBzZXNzaW9uSUQsIEN1c3Rv
bVByb3RvY29sTWFuYWdlciopCisgICAgOiBtX3Nlc3Npb25JRChzZXNzaW9uSUQpCit7Cit9CisK
K05ldHdvcmtTZXNzaW9uOjp+TmV0d29ya1Nlc3Npb24oKQoreworfQorCitTb3VwU2Vzc2lvbiog
TmV0d29ya1Nlc3Npb246OnNvdXBTZXNzaW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbmV0d29y
a1N0b3JhZ2VTZXNzaW9uKCkuc291cE5ldHdvcmtTZXNzaW9uKCkuc291cFNlc3Npb24oKTsKK30K
Kwordm9pZCBOZXR3b3JrU2Vzc2lvbjo6aW52YWxpZGF0ZUFuZENhbmNlbCgpCit7CisgICAgZm9y
IChhdXRvKiB0YXNrIDogbV9kYXRhVGFza1NldCkKKyAgICAgICAgdGFzay0+aW52YWxpZGF0ZUFu
ZENhbmNlbCgpOworfQorCit2b2lkIE5ldHdvcmtTZXNzaW9uOjpjbGVhckNyZWRlbnRpYWxzKCkK
K3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0U291cC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0
U291cC5jcHAKaW5kZXggNmFlY2I3Zi4uOGZiNjRmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3Mvc291cC9SZW1vdGVOZXR3b3JraW5nQ29udGV4dFNvdXAuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvUmVtb3RlTmV0d29ya2luZ0Nv
bnRleHRTb3VwLmNwcApAQCAtMjgsNiArMjgsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlJlbW90ZU5ldHdvcmtpbmdDb250ZXh0LmgiCiAKKyNpbmNsdWRlICJOZXR3b3JrU2Vz
c2lvbi5oIgorI2luY2x1ZGUgIlNlc3Npb25UcmFja2VyLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9O
ZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVk
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUhhbmRsZS5oPgpAQCAtNDUsMTMgKzQ3LDIx
IEBAIGJvb2wgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmlzVmFsaWQoKSBjb25zdAogICAgIHJl
dHVybiB0cnVlOwogfQogCi12b2lkIFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVQcml2
YXRlQnJvd3NpbmdTZXNzaW9uKFNlc3Npb25JRCkKK3ZvaWQgUmVtb3RlTmV0d29ya2luZ0NvbnRl
eHQ6OmVuc3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oU2Vzc2lvbklEIHNlc3Npb25JRCkKIHsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIEFTU0VSVChzZXNzaW9uSUQuaXNFcGhlbWVyYWwo
KSk7CisKKyAgICBpZiAoTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzdG9yYWdlU2Vzc2lvbihzZXNz
aW9uSUQpKQorICAgICAgICByZXR1cm47CisKKyAgICBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmVu
c3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oc2Vzc2lvbklELCBTdHJpbmc6Om51bWJlcihzZXNz
aW9uSUQuc2Vzc2lvbklEKCkpKTsKKyAgICBTZXNzaW9uVHJhY2tlcjo6c2V0U2Vzc2lvbihzZXNz
aW9uSUQsIE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUoTmV0d29ya1Nlc3Npb246OlR5cGU6OkVwaGVt
ZXJhbCwgc2Vzc2lvbklELCBudWxscHRyKSk7CiB9CiAKIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYg
UmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OnN0b3JhZ2VTZXNzaW9uKCkgY29uc3QKIHsKKyAgICBp
ZiAoYXV0byBzZXNzaW9uID0gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzdG9yYWdlU2Vzc2lvbiht
X3Nlc3Npb25JRCkpCisgICAgICAgIHJldHVybiAqc2Vzc2lvbjsKICAgICByZXR1cm4gTmV0d29y
a1N0b3JhZ2VTZXNzaW9uOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybUVmbC5jbWFrZQppbmRleCBmMTI1OTUxLi5iYWJmMmE3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVm
bC5jbWFrZQpAQCAtMTQsNyArMTQsOSBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKIAog
ICAgIE5ldHdvcmtQcm9jZXNzL2VmbC9OZXR3b3JrUHJvY2Vzc01haW5FZmwuY3BwCiAKKyAgICBO
ZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAuY3BwCiAgICAgTmV0d29ya1By
b2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwCisgICAgTmV0d29ya1Byb2Nlc3Mvc291
cC9OZXR3b3JrU2Vzc2lvblNvdXAuY3BwCiAgICAgTmV0d29ya1Byb2Nlc3Mvc291cC9SZW1vdGVO
ZXR3b3JraW5nQ29udGV4dFNvdXAuY3BwCiAKICAgICBQbGF0Zm9ybS9JUEMvdW5peC9BdHRhY2ht
ZW50VW5peC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtl
IGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggYmVlYTAwZS4uNmZiZGEy
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvU291
cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTM5LDggKzM5LDEwIEBAIGxpc3QoQVBQ
RU5EIFdlYktpdDJfU09VUkNFUwogICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZURhdGFTb3VwLmNwcAogICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUlPQ2hh
bm5lbFNvdXAuY3BwCiAKKyAgICBOZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtEYXRhVGFza1Nv
dXAuY3BwCiAgICAgTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc01haW5Tb3VwLmNw
cAogICAgIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAorICAgIE5l
dHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25Tb3VwLmNwcAogICAgIE5ldHdvcmtQcm9j
ZXNzL3NvdXAvUmVtb3RlTmV0d29ya2luZ0NvbnRleHRTb3VwLmNwcAogCiAgICAgUGxhdGZvcm0v
SVBDL2dsaWIvR1NvY2tldE1vbml0b3IuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3NvdXAvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3NvdXAvV2ViRnJh
bWVOZXR3b3JraW5nQ29udGV4dC5jcHAKaW5kZXggMjAxZDRhOC4uMmY5ODcxYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9zb3VwL1dlYkZyYW1l
TmV0d29ya2luZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvc291cC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmNwcApAQCAtMjcsNiAr
MjcsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYkZyYW1lTmV0d29ya2lu
Z0NvbnRleHQuaCIKIAorI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uLmgiCiAjaW5jbHVkZSAiU2Vz
c2lvblRyYWNrZXIuaCIKICNpbmNsdWRlICJXZWJGcmFtZS5oIgogI2luY2x1ZGUgIldlYlBhZ2Uu
aCIKQEAgLTQzLDExICs0NCwxMyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIHZvaWQgV2ViRnJhbWVO
ZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbihTZXNzaW9uSUQg
c2Vzc2lvbklEKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKHNl
c3Npb25JRC5pc0VwaGVtZXJhbCgpKTsKIAogICAgIGlmIChOZXR3b3JrU3RvcmFnZVNlc3Npb246
OnN0b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbjo6ZW5zdXJlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbihzZXNzaW9uSUQs
IFN0cmluZzo6bnVtYmVyKHNlc3Npb25JRC5zZXNzaW9uSUQoKSkpOworICAgIFNlc3Npb25UcmFj
a2VyOjpzZXRTZXNzaW9uKHNlc3Npb25JRCwgTmV0d29ya1Nlc3Npb246OmNyZWF0ZShOZXR3b3Jr
U2Vzc2lvbjo6VHlwZTo6RXBoZW1lcmFsLCBzZXNzaW9uSUQsIG51bGxwdHIpKTsKIH0KIAogdm9p
ZCBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjpzZXRDb29raWVBY2NlcHRQb2xpY3lGb3JBbGxD
b250ZXh0cyhIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL2NvbmZpZy5oIGIvU291cmNlL1dlYktpdDIvY29uZmlnLmgKaW5kZXggMWQ5MWZi
ZC4uYTk3ZGQ0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvY29uZmlnLmgKKysrIGIvU291
cmNlL1dlYktpdDIvY29uZmlnLmgKQEAgLTc1LDcgKzc1LDcgQEAKICNlbmRpZgogI2VuZGlmCiAK
LSNpZiAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49
IDEwMTIwMCkgfHwgKFBMQVRGT1JNKElPUykgJiYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVR
VUlSRUQgPj0gMTAwMDAwKQorI2lmIChQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lP
Tl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAwKSB8fCAoUExBVEZPUk0oSU9TKSAmJiBfX0lQSE9ORV9P
U19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDAwMDApIHx8IFVTRShTT1VQKQogI2lmbmRlZiBV
U0VfTkVUV09SS19TRVNTSU9OCiAjZGVmaW5lIFVTRV9ORVRXT1JLX1NFU1NJT04gMQogI2VuZGlm
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292071</attachid>
            <date>2016-10-19 09:11:41 -0700</date>
            <delta_ts>2016-10-19 09:39:45 -0700</delta_ts>
            <desc>Try to fix the builds</desc>
            <filename>wk2-network-session-soup.diff</filename>
            <type>text/plain</type>
            <size>83467</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktp
dDIvQ01ha2VMaXN0cy50eHQKaW5kZXggOWI0MzNkZS4uMWFjMTA2YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0
cy50eHQKQEAgLTIxNyw2ICsyMTcsNyBAQCBzZXQoV2ViS2l0Ml9TT1VSQ0VTCiAgICAgTmV0d29y
a1Byb2Nlc3MvRG93bmxvYWRzL0Jsb2JEb3dubG9hZENsaWVudC5jcHAKICAgICBOZXR3b3JrUHJv
Y2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuY3BwCiAgICAgTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRz
L0Rvd25sb2FkTWFuYWdlci5jcHAKKyAgICBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvUGVuZGlu
Z0Rvd25sb2FkLmNwcAogCiAgICAgUGxhdGZvcm0vTG9nZ2luZy5jcHAKICAgICBQbGF0Zm9ybS9N
b2R1bGUuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMDU4Yzc1NC4uNTQwZmVhZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDExNyBAQAorMjAxNi0xMC0xOCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lh
QGlnYWxpYS5jb20+CisKKyAgICAgICAgW1NPVVBdIEFkZCBOZXR3b3JrU2Vzc2lvbiBpbXBsZW1l
bnRhdGlvbiBhbmQgc3dpdGNoIHRvIHVzZSBpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNTk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQmFzaWNhbGx5IG1vdmUgdGhlIFJlc291cmNlSGFuZGxlIGlt
cGxlbWVudGF0aW9uIHRvIHRoZSBuZXR3b3JrIHByb2Nlc3MsIGJ1dCBtb2Rlcm5pemVkLCBjbGVh
bmVkIHVwLCBhbmQgYWRhcHRlZAorICAgICAgICB0byB0aGUgTmV0d29ya1Nlc3Npb24gbW9kZWwu
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDogQWRkIG5ldyBmaWxlcyB0byBjb21waWxhdGlv
bi4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpEb3dubG9hZDo6RG93bmxvYWQpOiBVc2UgdGhlIHNhbWUgY29kZSBmb3Ig
YWxsIHBvcnRzIHVzaW5nIE5ldHdvcmtTZXNzaW9uIGFuZCBhZGQgbWlzc2luZworICAgICAgICBp
bml0aWFsaXphdGlvbiBvZiBtX3Nlc3Npb25JRC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9E
b3dubG9hZHMvRG93bmxvYWQuaDoKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWQ6OkRvd25sb2Fk
KTogRGVmaW5lIFBsYXRmb3JtRG93bmxvYWRUYXNrUmVmIG9uIGV2ZXJ5IHBsYXRmb3JtIHRvIG1h
a2UgdGhlIGNvbnN0cnVjdG9yIGNvbW1vbiB0bworICAgICAgICBhbGwgcG9ydHMgdXNpbmcgTmV0
d29ya1Nlc3Npb24uCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL3NvdXAvRG93
bmxvYWRTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWQ6OmNhbmNlbE5ldHdvcmtM
b2FkKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWQ6OnBsYXRmb3JtRGlkRmluaXNoKToKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suaDoKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0RhdGFUYXNrOjpwZW5kaW5nRG93bmxvYWRJRCk6IE1ha2UgY29uc3QuCisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6cGVuZGluZ0Rvd25sb2FkKTogRGl0dG8uCisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6cGVuZGluZ0Rvd25sb2FkTG9jYXRpb24p
OiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjppc0Rvd25sb2FkKTog
SGVscGVyIHRvIGNoZWNrIGlmIHRoZSB0YXNrIGlzIGEgZG93bmxvYWQuCisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrTG9h
ZDo6ZGlkUmVjZWl2ZVJlc3BvbnNlTmV0d29ya1Nlc3Npb24pOiBVc2UgTmV0d29ya0RhdGFUYXNr
Ojppc0Rvd25sb2FkKCkuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6TmV0d29ya1Byb2Nlc3MpOiBO
ZXR3b3JrU2Vzc2lvbjo6c2V0Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyKCkgaXMgQ29jb2Egb25seS4K
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oOgorICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW06CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtTZXNzaW9uOjpuZXR3b3JrU3RvcmFnZVNlc3Npb24pOiBNYWtlIGNvbnN0Lgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6Ok5ldHdvcmtEYXRhVGFzayk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6fk5ldHdvcmtEYXRhVGFzayk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6c2NoZWR1bGVGYWlsdXJlKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpmYWlsdXJlVGltZXJGaXJlZCk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6c3VnZ2VzdGVkRmlsZW5hbWUpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OnNldFN1Z2dlc3RlZEZpbGVuYW1lKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpzZXRQZW5kaW5nRG93bmxvYWRMb2NhdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6YWxsb3dzU3BlY2lmaWNIVFRQU0NlcnRp
ZmljYXRlRm9ySG9zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6Y3JlYXRl
UmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6Y2xlYXJSZXF1ZXN0
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpyZXN1bWUpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OnN1c3BlbmQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrRGF0YVRhc2s6OmNhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6
aW52YWxpZGF0ZUFuZENhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6
c3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OnRpbWVvdXRGaXJlZCk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6c3RhcnRUaW1lb3V0KToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpzdG9wVGltZW91dCk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtEYXRhVGFzazo6c2VuZFJlcXVlc3RDYWxsYmFjayk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtEYXRhVGFzazo6ZGlkU2VuZFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrRGF0YVRhc2s6OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtEYXRhVGFzazo6dGxzRXJyb3JzQ2hhbmdlZENhbGxiYWNrKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0RhdGFUYXNrOjp0bHNFcnJvcnNDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0RhdGFUYXNrOjphcHBseUF1dGhlbnRpY2F0aW9uVG9SZXF1ZXN0KToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjphdXRoZW50aWNhdGVDYWxsYmFjayk6CisgICAgICAg
IChXZWJLaXQ6OmlzQXV0aGVudGljYXRpb25GYWlsdXJlU3RhdHVzQ29kZSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6YXV0aGVudGljYXRlKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0RhdGFUYXNrOjpjb250aW51ZUF1dGhlbnRpY2F0ZSk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtEYXRhVGFzazo6c2tpcElucHV0U3RyZWFtRm9yUmVkaXJlY3Rpb25DYWxsYmFjayk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6c2tpcElucHV0U3RyZWFtRm9yUmVk
aXJlY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OmRpZEZpbmlzaFNr
aXBJbnB1dFN0cmVhbUZvclJlZGlyZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6c2hvdWxkUmVk
aXJlY3RBc0dFVCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6c2hvdWxkU3Rh
cnRIVFRQUmVkaXJlY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OmNv
bnRpbnVlSFRUUFJlZGlyZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNr
OjpyZWFkQ2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OnJlYWQp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OmRpZFJlYWQpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OmRpZEZpbmlzaFJlYWQpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrRGF0YVRhc2s6OnJlcXVlc3ROZXh0UGFydENhbGxiYWNrKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0RhdGFUYXNrOjpyZXF1ZXN0TmV4dFBhcnQpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrRGF0YVRhc2s6OmRpZFJlcXVlc3ROZXh0UGFydCk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtEYXRhVGFzazo6ZGlkRmluaXNoUmVxdWVzdE5leHRQYXJ0KToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0RhdGFUYXNrOjpnb3RIZWFkZXJzQ2FsbGJhY2spOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrRGF0YVRhc2s6OmRpZEdldEhlYWRlcnMpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrRGF0YVRhc2s6Ondyb3RlQm9keURhdGFDYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtEYXRhVGFzazo6ZGlkV3JpdGVCb2R5RGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtEYXRhVGFzazo6ZG93bmxvYWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRh
c2s6OndyaXRlRG93bmxvYWRDYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRh
VGFzazo6d3JpdGVEb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6
ZGlkV3JpdGVEb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6ZGlk
RmluaXNoRG93bmxvYWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OmRpZEZh
aWxEb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6Y2xlYW5Eb3du
bG9hZEZpbGVzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpkaWRGYWlsKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpuZXR3b3JrRXZlbnRDYWxsYmFjayk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6bmV0d29ya0V2ZW50KToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpzdGFydGluZ0NhbGxiYWNrKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpyZXF1ZXN0U3RhcnRlZENhbGxiYWNrKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpkaWRTdGFydFJlcXVlc3QpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OnJlc3RhcnRlZENhbGxiYWNrKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0RhdGFUYXNrOjpkaWRSZXN0YXJ0KToKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtTZXNzaW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbjo6ZGVm
YXVsdFNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbjo6bmV0d29ya1N0
b3JhZ2VTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246Ok5ldHdvcmtT
ZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246On5OZXR3b3JrU2Vzc2lv
bik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjpzb3VwU2Vzc2lvbik6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjppbnZhbGlkYXRlQW5kQ2FuY2VsKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246OmNsZWFyQ3JlZGVudGlhbHMpOgorICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL3NvdXAvUmVtb3RlTmV0d29ya2luZ0NvbnRleHRTb3VwLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVByaXZhdGVCcm93
c2luZ1Nlc3Npb24pOiBBZGQgaW1wbGVtZW50YXRpb24gbWF0Y2hpbmcKKyAgICAgICAgV2ViRnJh
bWVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbigpLgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6c3RvcmFnZVNlc3Npb24pOiBE
byBub3QgYWx3YXlzIHJldHVybiB0aGUgZGVmYXVsdCBzZXNzaW9uIGlmIHRoZSBnaXZlbiBvbmUg
aXMKKyAgICAgICAgaW4gdGhlIGdsb2JhbCBtYXAuCisgICAgICAgICogUGxhdGZvcm1FZmwuY21h
a2U6IEFkIG5ldyBmaWxlcyB0byBjb21waWxhdGlvbi4KKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5j
bWFrZTogRGl0dG8uCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9zb3VwL1dl
YkZyYW1lTmV0d29ya2luZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZU5l
dHdvcmtpbmdDb250ZXh0OjplbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKTogQWxzbyBjcmVh
dGUgYSBOZXR3b3JrU2Vzc2lvbi4KKyAgICAgICAgKiBjb25maWcuaDogRW5hYmxlIE5ldHdvcmtT
ZXNzaW9uIHVuY29uZGl0aW9uYWxseSBmb3IgU291cCBiYXNlZCBwb3J0cy4KKwogMjAxNi0xMC0x
OSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAg
TmV0d29ya1Nlc3Npb246IHVwZGF0ZWRSZXF1ZXN0IHBhcmFtZXRlciBvZiBOZXR3b3JrUHJvY2Vz
czo6ZmluZFBlbmRpbmdEb3dubG9hZExvY2F0aW9uIGlzIHVudXNlZCBzaW5jZSByMjA2OTg4CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxv
YWQuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2Fk
LmNwcAppbmRleCA5YmUyMmVmLi42NDk0OGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5jcHAKQEAgLTMzLDYgKzMzLDcgQEAK
ICNpbmNsdWRlICJEb3dubG9hZE1hbmFnZXIuaCIKICNpbmNsdWRlICJEb3dubG9hZFByb3h5TWVz
c2FnZXMuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNr
LmgiCiAjaW5jbHVkZSAiU2FuZGJveEV4dGVuc2lvbi5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1
bWVudENvZGVycy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KQEAgLTQz
LDExICs0NCwxMiBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktp
dCB7CiAKLSNpZiBVU0UoTkVUV09SS19TRVNTSU9OKSAmJiBQTEFURk9STShDT0NPQSkKLURvd25s
b2FkOjpEb3dubG9hZChEb3dubG9hZE1hbmFnZXImIGRvd25sb2FkTWFuYWdlciwgRG93bmxvYWRJ
RCBkb3dubG9hZElELCBOU1VSTFNlc3Npb25Eb3dubG9hZFRhc2sqIGRvd25sb2FkLCBjb25zdCBX
ZWJDb3JlOjpTZXNzaW9uSUQmIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWROYW1l
KQorI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCitEb3dubG9hZDo6RG93bmxvYWQoRG93bmxvYWRN
YW5hZ2VyJiBkb3dubG9hZE1hbmFnZXIsIERvd25sb2FkSUQgZG93bmxvYWRJRCwgUGxhdGZvcm1E
b3dubG9hZFRhc2tSZWYgZG93bmxvYWQsIGNvbnN0IFdlYkNvcmU6OlNlc3Npb25JRCYgc2Vzc2lv
bklELCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZE5hbWUpCiAgICAgOiBtX2Rvd25sb2FkTWFuYWdl
cihkb3dubG9hZE1hbmFnZXIpCiAgICAgLCBtX2Rvd25sb2FkSUQoZG93bmxvYWRJRCkKICAgICAs
IG1fZG93bmxvYWQoZG93bmxvYWQpCisgICAgLCBtX3Nlc3Npb25JRChzZXNzaW9uSUQpCiAgICAg
LCBtX3N1Z2dlc3RlZE5hbWUoc3VnZ2VzdGVkTmFtZSkKIHsKICAgICBBU1NFUlQobV9kb3dubG9h
ZElELmRvd25sb2FkSUQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L0Rvd25sb2Fkcy9Eb3dubG9hZC5oCmluZGV4IDc5ODlmN2UuLmZkYzU4MzAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5oCkBAIC00
Nyw2ICs0NywxOSBAQCBPQkpDX0NMQVNTIFdLRG93bmxvYWRBc0RlbGVnYXRlOwogI2VuZGlmCiAj
ZW5kaWYKIAorI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisjaWYgUExBVEZPUk0oQ09DT0EpCit0
eXBlZGVmIGlkPE5TVVJMU2Vzc2lvbkRvd25sb2FkVGFzaz4gUGxhdGZvcm1Eb3dubG9hZFRhc2tS
ZWY7CisjZWxpZiBVU0UoU09VUCkKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgTmV0d29ya0Rh
dGFUYXNrOworfQordHlwZWRlZiBXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzayogUGxhdGZvcm1Eb3du
bG9hZFRhc2tSZWY7CisjZWxzZQordHlwZWRlZiB2b2lkKiBQbGF0Zm9ybURvd25sb2FkVGFza1Jl
ZjsKKyNlbmRpZgorI2VuZGlmCisKIG5hbWVzcGFjZSBJUEMgewogY2xhc3MgRGF0YVJlZmVyZW5j
ZTsKIH0KQEAgLTY4LDggKzgxLDggQEAgY2xhc3MgV2ViUGFnZTsKIGNsYXNzIERvd25sb2FkIDog
cHVibGljIElQQzo6TWVzc2FnZVNlbmRlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRG93
bmxvYWQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSNpZiBVU0UoTkVUV09S
S19TRVNTSU9OKSAmJiBQTEFURk9STShDT0NPQSkKLSAgICBEb3dubG9hZChEb3dubG9hZE1hbmFn
ZXImLCBEb3dubG9hZElELCBOU1VSTFNlc3Npb25Eb3dubG9hZFRhc2sqLCBjb25zdCBXZWJDb3Jl
OjpTZXNzaW9uSUQmIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSA9
IHsgfSk7CisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKyAgICBEb3dubG9hZChEb3dubG9hZE1h
bmFnZXImLCBEb3dubG9hZElELCBQbGF0Zm9ybURvd25sb2FkVGFza1JlZiwgY29uc3QgV2ViQ29y
ZTo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUg
PSB7IH0pOwogI2VuZGlmCiAgICAgRG93bmxvYWQoRG93bmxvYWRNYW5hZ2VyJiwgRG93bmxvYWRJ
RCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgU3RyaW5nJiBzdWdnZXN0
ZWRGaWxlbmFtZSA9IHsgfSk7CiAKQEAgLTEyNiwxNSArMTM5LDIxIEBAIHByaXZhdGU6CiAKICAg
ICBSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4gbV9zYW5kYm94RXh0ZW5zaW9uOwogCi0jaWYgUExB
VEZPUk0oQ09DT0EpCiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKyNpZiBQTEFURk9STShDT0NP
QSkKICAgICBSZXRhaW5QdHI8TlNVUkxTZXNzaW9uRG93bmxvYWRUYXNrPiBtX2Rvd25sb2FkOwot
ICAgIFdlYkNvcmU6OlNlc3Npb25JRCBtX3Nlc3Npb25JRDsKKyNlbGlmIFVTRShTT1VQKQorICAg
IFJlZlB0cjxOZXR3b3JrRGF0YVRhc2s+IG1fZG93bmxvYWQ7CiAjZWxzZQorICAgIFBsYXRmb3Jt
RG93bmxvYWRUYXNrUmVmIG1fZG93bmxvYWQ7CisjZW5kaWYKKyAgICBXZWJDb3JlOjpTZXNzaW9u
SUQgbV9zZXNzaW9uSUQ7CisjZWxzZSAvLyBVU0UoTkVUV09SS19TRVNTSU9OKQorI2lmIFBMQVRG
T1JNKENPQ09BKQogICAgIFJldGFpblB0cjxOU1VSTERvd25sb2FkPiBtX25zVVJMRG93bmxvYWQ7
CiAgICAgUmV0YWluUHRyPFdLRG93bmxvYWRBc0RlbGVnYXRlPiBtX2RlbGVnYXRlOwogI2VuZGlm
Ci0jZW5kaWYKKyNlbmRpZiAvLyBVU0UoTkVUV09SS19TRVNTSU9OKQogICAgIHN0ZDo6dW5pcXVl
X3B0cjxXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUNsaWVudD4gbV9kb3dubG9hZENsaWVudDsKICAg
ICBSZWZQdHI8V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU+IG1fcmVzb3VyY2VIYW5kbGU7CiAgICAg
U3RyaW5nIG1fc3VnZ2VzdGVkTmFtZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL0Rvd25sb2Fkcy9zb3VwL0Rvd25sb2FkU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvc291cC9Eb3dubG9hZFNvdXAuY3BwCmluZGV4IDY4
MDc5MTcuLjgyZThjNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L0Rvd25sb2Fkcy9zb3VwL0Rvd25sb2FkU291cC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvRG93bmxvYWRzL3NvdXAvRG93bmxvYWRTb3VwLmNwcApAQCAtMjgsMjA0ICsy
OCwxMyBAQAogI2luY2x1ZGUgIkRvd25sb2FkLmgiCiAKICNpbmNsdWRlICJEYXRhUmVmZXJlbmNl
LmgiCi0jaW5jbHVkZSAiRG93bmxvYWRTb3VwRXJyb3JzLmgiCisjaW5jbHVkZSAiTmV0d29ya0Rh
dGFUYXNrLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oPgotI2luY2x1ZGUgPGdpby9naW8uaD4K
LSNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4K
LSNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgotCi0jaWYgUExBVEZPUk0oR1RLKQotI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+
Ci0jZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewogCi1jbGFzcyBEb3dubG9hZENsaWVudCBmaW5hbCA6IHB1YmxpYyBSZXNvdXJjZUhhbmRsZUNs
aWVudCB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRG93bmxvYWRDbGllbnQpOwotcHVibGlj
OgotICAgIERvd25sb2FkQ2xpZW50KERvd25sb2FkJiBkb3dubG9hZCkKLSAgICAgICAgOiBtX2Rv
d25sb2FkKGRvd25sb2FkKQotICAgICAgICAsIG1faGFuZGxlUmVzcG9uc2VMYXRlcihSdW5Mb29w
OjptYWluKCksIHRoaXMsICZEb3dubG9hZENsaWVudDo6aGFuZGxlUmVzcG9uc2UpCi0gICAgICAg
ICwgbV9hbGxvd092ZXJ3cml0ZShmYWxzZSkKLSAgICB7Ci0gICAgfQotCi0gICAgfkRvd25sb2Fk
Q2xpZW50KCkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBkZWxldGVGaWxlc0lmTmVlZGVkKCkK
LSAgICB7Ci0gICAgICAgIGlmIChtX2Rlc3RpbmF0aW9uRmlsZSkKLSAgICAgICAgICAgIGdfZmls
ZV9kZWxldGUobV9kZXN0aW5hdGlvbkZpbGUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOwotCi0g
ICAgICAgIGlmIChtX2ludGVybWVkaWF0ZUZpbGUpIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2Rl
c3RpbmF0aW9uRmlsZSk7Ci0gICAgICAgICAgICBnX2ZpbGVfZGVsZXRlKG1faW50ZXJtZWRpYXRl
RmlsZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2
b2lkIGRvd25sb2FkRmFpbGVkKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQotICAgIHsKLSAg
ICAgICAgZGVsZXRlRmlsZXNJZk5lZWRlZCgpOwotICAgICAgICBtX2Rvd25sb2FkLmRpZEZhaWwo
ZXJyb3IsIElQQzo6RGF0YVJlZmVyZW5jZSgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGRpZFJlY2Vp
dmVSZXNwb25zZShSZXNvdXJjZUhhbmRsZSosIFJlc291cmNlUmVzcG9uc2UmJiByZXNwb25zZSkg
b3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIG1fcmVzcG9uc2UgPSBXVEZNb3ZlKHJlc3BvbnNlKTsK
LSAgICAgICAgbV9kb3dubG9hZC5kaWRSZWNlaXZlUmVzcG9uc2UobV9yZXNwb25zZSk7Ci0KLSAg
ICAgICAgaWYgKG1fcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSA+PSA0MDApIHsKLSAgICAgICAg
ICAgIGRvd25sb2FkRmFpbGVkKHBsYXRmb3JtRG93bmxvYWROZXR3b3JrRXJyb3IobV9yZXNwb25z
ZS5odHRwU3RhdHVzQ29kZSgpLCBtX3Jlc3BvbnNlLnVybCgpLCBtX3Jlc3BvbnNlLmh0dHBTdGF0
dXNUZXh0KCkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIFN0
cmluZyBzdWdnZXN0ZWRGaWxlbmFtZSA9IG1fcmVzcG9uc2Uuc3VnZ2VzdGVkRmlsZW5hbWUoKTsK
LSAgICAgICAgaWYgKHN1Z2dlc3RlZEZpbGVuYW1lLmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
VVJMIHVybCA9IG1fcmVzcG9uc2UudXJsKCk7Ci0gICAgICAgICAgICB1cmwuc2V0UXVlcnkoU3Ry
aW5nKCkpOwotICAgICAgICAgICAgdXJsLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOwotICAg
ICAgICAgICAgc3VnZ2VzdGVkRmlsZW5hbWUgPSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXModXJs
Lmxhc3RQYXRoQ29tcG9uZW50KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nIGRlc3Rp
bmF0aW9uVVJJID0gbV9kb3dubG9hZC5kZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxl
bmFtZShzdWdnZXN0ZWRGaWxlbmFtZSwgbV9hbGxvd092ZXJ3cml0ZSk7Ci0gICAgICAgIGlmIChk
ZXN0aW5hdGlvblVSSS5pc0VtcHR5KCkpIHsKLSNpZiBQTEFURk9STShHVEspCi0gICAgICAgICAg
ICBHVW5pcXVlUHRyPGNoYXI+IGJ1ZmZlcihnX3N0cmR1cF9wcmludGYoXygiQ2Fubm90IGRldGVy
bWluZSBkZXN0aW5hdGlvbiBVUkkgZm9yIGRvd25sb2FkIHdpdGggc3VnZ2VzdGVkIGZpbGVuYW1l
ICVzIiksIHN1Z2dlc3RlZEZpbGVuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICAgICAgICAgIFN0
cmluZyBlcnJvck1lc3NhZ2UgPSBTdHJpbmc6OmZyb21VVEY4KGJ1ZmZlci5nZXQoKSk7Ci0jZWxz
ZQotICAgICAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcoIkNhbm5vdCBk
ZXRlcm1pbmUgZGVzdGluYXRpb24gVVJJIGZvciBkb3dubG9hZCB3aXRoIHN1Z2dlc3RlZCBmaWxl
bmFtZSAiLCBzdWdnZXN0ZWRGaWxlbmFtZSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGRvd25sb2Fk
RmFpbGVkKHBsYXRmb3JtRG93bmxvYWREZXN0aW5hdGlvbkVycm9yKG1fcmVzcG9uc2UsIGVycm9y
TWVzc2FnZSkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9k
ZXN0aW5hdGlvbkZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfdXJpKGRlc3RpbmF0aW9u
VVJJLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICAgICAgR1JlZlB0cjxHRmlsZU91dHB1dFN0cmVhbT4g
b3V0cHV0U3RyZWFtOwotICAgICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAg
ICAgIGlmIChtX2FsbG93T3ZlcndyaXRlKQotICAgICAgICAgICAgb3V0cHV0U3RyZWFtID0gYWRv
cHRHUmVmKGdfZmlsZV9yZXBsYWNlKG1fZGVzdGluYXRpb25GaWxlLmdldCgpLCBudWxscHRyLCBG
QUxTRSwgR19GSUxFX0NSRUFURV9OT05FLCBudWxscHRyLCAmZXJyb3Iub3V0UHRyKCkpKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgb3V0cHV0U3RyZWFtID0gYWRvcHRHUmVmKGdfZmlsZV9j
cmVhdGUobV9kZXN0aW5hdGlvbkZpbGUuZ2V0KCksIEdfRklMRV9DUkVBVEVfTk9ORSwgbnVsbHB0
ciwgJmVycm9yLm91dFB0cigpKSk7Ci0gICAgICAgIGlmICghb3V0cHV0U3RyZWFtKSB7Ci0gICAg
ICAgICAgICBtX2Rlc3RpbmF0aW9uRmlsZS5jbGVhcigpOwotICAgICAgICAgICAgZG93bmxvYWRG
YWlsZWQocGxhdGZvcm1Eb3dubG9hZERlc3RpbmF0aW9uRXJyb3IobV9yZXNwb25zZSwgZXJyb3It
Pm1lc3NhZ2UpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIFN0
cmluZyBpbnRlcm1lZGlhdGVVUkkgPSBkZXN0aW5hdGlvblVSSSArICIud2tkb3dubG9hZCI7Ci0g
ICAgICAgIG1faW50ZXJtZWRpYXRlRmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl91cmko
aW50ZXJtZWRpYXRlVVJJLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICAgICAgbV9vdXRwdXRTdHJlYW0g
PSBhZG9wdEdSZWYoZ19maWxlX3JlcGxhY2UobV9pbnRlcm1lZGlhdGVGaWxlLmdldCgpLCAwLCBU
UlVFLCBHX0ZJTEVfQ1JFQVRFX05PTkUsIDAsICZlcnJvci5vdXRQdHIoKSkpOwotICAgICAgICBp
ZiAoIW1fb3V0cHV0U3RyZWFtKSB7Ci0gICAgICAgICAgICBkb3dubG9hZEZhaWxlZChwbGF0Zm9y
bURvd25sb2FkRGVzdGluYXRpb25FcnJvcihtX3Jlc3BvbnNlLCBlcnJvci0+bWVzc2FnZSkpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9kb3dubG9hZC5kaWRD
cmVhdGVEZXN0aW5hdGlvbihkZXN0aW5hdGlvblVSSSk7Ci0gICAgfQotCi0gICAgdm9pZCBkaWRS
ZWNlaXZlRGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxl
bmd0aCwgaW50IC8qZW5jb2RlZERhdGFMZW5ndGgqLykgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAg
IGlmIChtX2hhbmRsZVJlc3BvbnNlTGF0ZXIuaXNBY3RpdmUoKSkgewotICAgICAgICAgICAgbV9o
YW5kbGVSZXNwb25zZUxhdGVyLnN0b3AoKTsKLSAgICAgICAgICAgIGhhbmRsZVJlc3BvbnNlKCk7
Ci0gICAgICAgIH0KLQotICAgICAgICBnc2l6ZSBieXRlc1dyaXR0ZW47Ci0gICAgICAgIEdVbmlx
dWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKLSAgICAgICAgZ19vdXRwdXRfc3RyZWFtX3dyaXRlX2Fs
bChHX09VVFBVVF9TVFJFQU0obV9vdXRwdXRTdHJlYW0uZ2V0KCkpLCBkYXRhLCBsZW5ndGgsICZi
eXRlc1dyaXR0ZW4sIDAsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgICAgIGlmIChlcnJvcikgewot
ICAgICAgICAgICAgZG93bmxvYWRGYWlsZWQocGxhdGZvcm1Eb3dubG9hZERlc3RpbmF0aW9uRXJy
b3IobV9yZXNwb25zZSwgZXJyb3ItPm1lc3NhZ2UpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICBtX2Rvd25sb2FkLmRpZFJlY2VpdmVEYXRhKGJ5dGVzV3JpdHRlbik7
Ci0gICAgfQotCi0gICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKFJlc291cmNlSGFuZGxlKiwgZG91
YmxlKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgbV9vdXRwdXRTdHJlYW0gPSBudWxscHRyOwot
Ci0gICAgICAgIEFTU0VSVChtX2Rlc3RpbmF0aW9uRmlsZSk7Ci0gICAgICAgIEFTU0VSVChtX2lu
dGVybWVkaWF0ZUZpbGUpOwotICAgICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7Ci0g
ICAgICAgIGlmICghZ19maWxlX21vdmUobV9pbnRlcm1lZGlhdGVGaWxlLmdldCgpLCBtX2Rlc3Rp
bmF0aW9uRmlsZS5nZXQoKSwgR19GSUxFX0NPUFlfT1ZFUldSSVRFLCBudWxscHRyLCBudWxscHRy
LCBudWxscHRyLCAmZXJyb3Iub3V0UHRyKCkpKSB7Ci0gICAgICAgICAgICBkb3dubG9hZEZhaWxl
ZChwbGF0Zm9ybURvd25sb2FkRGVzdGluYXRpb25FcnJvcihtX3Jlc3BvbnNlLCBlcnJvci0+bWVz
c2FnZSkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgR1JlZlB0
cjxHRmlsZUluZm8+IGluZm8gPSBhZG9wdEdSZWYoZ19maWxlX2luZm9fbmV3KCkpOwotICAgICAg
ICBDU3RyaW5nIHVyaSA9IG1fcmVzcG9uc2UudXJsKCkuc3RyaW5nKCkudXRmOCgpOwotICAgICAg
ICBnX2ZpbGVfaW5mb19zZXRfYXR0cmlidXRlX3N0cmluZyhpbmZvLmdldCgpLCAibWV0YWRhdGE6
OmRvd25sb2FkLXVyaSIsIHVyaS5kYXRhKCkpOwotICAgICAgICBnX2ZpbGVfaW5mb19zZXRfYXR0
cmlidXRlX3N0cmluZyhpbmZvLmdldCgpLCAieGF0dHI6OnhkZy5vcmlnaW4udXJsIiwgdXJpLmRh
dGEoKSk7Ci0gICAgICAgIGdfZmlsZV9zZXRfYXR0cmlidXRlc19hc3luYyhtX2Rlc3RpbmF0aW9u
RmlsZS5nZXQoKSwgaW5mby5nZXQoKSwgR19GSUxFX1FVRVJZX0lORk9fTk9ORSwgR19QUklPUklU
WV9ERUZBVUxULCBudWxscHRyLCBudWxscHRyLCBudWxscHRyKTsKLQotICAgICAgICBtX2Rvd25s
b2FkLmRpZEZpbmlzaCgpOwotICAgIH0KLQotICAgIHZvaWQgZGlkRmFpbChSZXNvdXJjZUhhbmRs
ZSosIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAg
ZG93bmxvYWRGYWlsZWQocGxhdGZvcm1Eb3dubG9hZE5ldHdvcmtFcnJvcihlcnJvci5lcnJvckNv
ZGUoKSwgZXJyb3IuZmFpbGluZ1VSTCgpLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpKSk7
Ci0gICAgfQotCi0gICAgdm9pZCBjYW5jZWwoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKLSAgICB7
Ci0gICAgICAgIGhhbmRsZS0+Y2FuY2VsKCk7Ci0gICAgICAgIGRlbGV0ZUZpbGVzSWZOZWVkZWQo
KTsKLSAgICAgICAgbV9kb3dubG9hZC5kaWRDYW5jZWwoSVBDOjpEYXRhUmVmZXJlbmNlKCkpOwot
ICAgIH0KLQotICAgIHZvaWQgaGFuZGxlUmVzcG9uc2UoKQotICAgIHsKLSAgICAgICAgZGlkUmVj
ZWl2ZVJlc3BvbnNlKG51bGxwdHIsIFdURk1vdmUobV9kZWxheWVkUmVzcG9uc2UpKTsKLSAgICB9
Ci0KLSAgICB2b2lkIGhhbmRsZVJlc3BvbnNlTGF0ZXIoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYg
cmVzcG9uc2UpCi0gICAgewotICAgICAgICBBU1NFUlQobV9yZXNwb25zZS5pc051bGwoKSk7Ci0g
ICAgICAgIEFTU0VSVCghbV9oYW5kbGVSZXNwb25zZUxhdGVyLmlzQWN0aXZlKCkpOwotCi0gICAg
ICAgIG1fZGVsYXllZFJlc3BvbnNlID0gcmVzcG9uc2U7Ci0KLSAgICAgICAgLy8gQ2FsbCBkaWRS
ZWNlaXZlUmVzcG9uc2UgaW4gYW4gaWRsZSB0byBtYWtlIHN1cmUgdGhlIGRvd25sb2FkIGlzIGFk
ZGVkCi0gICAgICAgIC8vIHRvIHRoZSBEb3dubG9hZE1hbmFnZXIgZG93bmxvYWRzIG1hcC4KLSAg
ICAgICAgbV9oYW5kbGVSZXNwb25zZUxhdGVyLnN0YXJ0T25lU2hvdCgwKTsKLSAgICB9Ci0KLSAg
ICBEb3dubG9hZCYgbV9kb3dubG9hZDsKLSAgICBHUmVmUHRyPEdGaWxlT3V0cHV0U3RyZWFtPiBt
X291dHB1dFN0cmVhbTsKLSAgICBSZXNvdXJjZVJlc3BvbnNlIG1fcmVzcG9uc2U7Ci0gICAgR1Jl
ZlB0cjxHRmlsZT4gbV9kZXN0aW5hdGlvbkZpbGU7Ci0gICAgR1JlZlB0cjxHRmlsZT4gbV9pbnRl
cm1lZGlhdGVGaWxlOwotICAgIFJlc291cmNlUmVzcG9uc2UgbV9kZWxheWVkUmVzcG9uc2U7Ci0g
ICAgUnVuTG9vcDo6VGltZXI8RG93bmxvYWRDbGllbnQ+IG1faGFuZGxlUmVzcG9uc2VMYXRlcjsK
LSAgICBib29sIG1fYWxsb3dPdmVyd3JpdGU7Ci19OwotCi12b2lkIERvd25sb2FkOjpzdGFydE5l
dHdvcmtMb2FkKCkKLXsKLSAgICBBU1NFUlQoIW1fZG93bmxvYWRDbGllbnQpOwotICAgIEFTU0VS
VCghbV9yZXNvdXJjZUhhbmRsZSk7Ci0gICAgbV9kb3dubG9hZENsaWVudCA9IHN0ZDo6bWFrZV91
bmlxdWU8RG93bmxvYWRDbGllbnQ+KCp0aGlzKTsKLSAgICBtX3Jlc291cmNlSGFuZGxlID0gUmVz
b3VyY2VIYW5kbGU6OmNyZWF0ZSgwLCBtX3JlcXVlc3QsIG1fZG93bmxvYWRDbGllbnQuZ2V0KCks
IGZhbHNlLCB0cnVlKTsKLSAgICBkaWRTdGFydCgpOwotfQotCi12b2lkIERvd25sb2FkOjpzdGFy
dE5ldHdvcmtMb2FkV2l0aEhhbmRsZShSZXNvdXJjZUhhbmRsZSogcmVzb3VyY2VIYW5kbGUsIGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQotewotICAgIEFTU0VSVCghbV9kb3dubG9h
ZENsaWVudCk7Ci0gICAgQVNTRVJUKCFtX3Jlc291cmNlSGFuZGxlKTsKLSAgICBtX2Rvd25sb2Fk
Q2xpZW50ID0gc3RkOjptYWtlX3VuaXF1ZTxEb3dubG9hZENsaWVudD4oKnRoaXMpOwotICAgIG1f
cmVzb3VyY2VIYW5kbGUgPSByZXNvdXJjZUhhbmRsZS0+cmVsZWFzZUZvckRvd25sb2FkKG1fZG93
bmxvYWRDbGllbnQuZ2V0KCkpOwotICAgIGRpZFN0YXJ0KCk7Ci0gICAgc3RhdGljX2Nhc3Q8RG93
bmxvYWRDbGllbnQqPihtX2Rvd25sb2FkQ2xpZW50LmdldCgpKS0+aGFuZGxlUmVzcG9uc2VMYXRl
cihyZXNwb25zZSk7Ci19Ci0KIHZvaWQgRG93bmxvYWQ6OnJlc3VtZShjb25zdCBJUEM6OkRhdGFS
ZWZlcmVuY2UmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUm
KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CkBAIC0yMzMsMTQgKzQyLDggQEAgdm9pZCBEb3du
bG9hZDo6cmVzdW1lKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYsIGNvbnN0IFN0cmluZyYsIGNv
bnN0IFNhbmRib3hFeHQKIAogdm9pZCBEb3dubG9hZDo6Y2FuY2VsTmV0d29ya0xvYWQoKQogewot
ICAgIGlmICghbV9yZXNvdXJjZUhhbmRsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQ2Fu
Y2VsbGluZyB0aGUgZG93bmxvYWQgd2lsbCBkZWxldGUgaXQgYW5kIHBsYXRmb3JtSW52YWxpZGF0
ZSgpIHdpbGwgYmUgY2FsbGVkIGJ5IHRoZSBkZXN0cnVjdG9yLgotICAgIC8vIFNvLCB3ZSBuZWVk
IHRvIHNldCBtX3Jlc291cmNlSGFuZGxlIHRvIG51bGxwdHIgYmVmb3JlIGFjdHVhbGx5IGNhbmNl
bGxpbmcgdGhlIGRvd25sb2FkIHRvIG1ha2Ugc3VyZQotICAgIC8vIGl0IHdvbid0IGJlIGNhbmNl
bGxlZCBhZ2FpbiBieSBwbGF0Zm9ybUludmFsaWRhdGUuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3NjUwLgotICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4g
cmVzb3VyY2VIYW5kbGUgPSBtX3Jlc291cmNlSGFuZGxlLnJlbGVhc2UoKTsKLSAgICBzdGF0aWNf
Y2FzdDxEb3dubG9hZENsaWVudCo+KG1fZG93bmxvYWRDbGllbnQuZ2V0KCkpLT5jYW5jZWwocmVz
b3VyY2VIYW5kbGUuZ2V0KCkpOworICAgIG1fZG93bmxvYWQtPmNhbmNlbCgpOworICAgIGRpZENh
bmNlbCh7IH0pOwogfQogCiB2b2lkIERvd25sb2FkOjpwbGF0Zm9ybUludmFsaWRhdGUoKQpAQCAt
MjQ5LDcgKzUyLDYgQEAgdm9pZCBEb3dubG9hZDo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKIAogdm9p
ZCBEb3dubG9hZDo6cGxhdGZvcm1EaWRGaW5pc2goKQogewotICAgIG1fcmVzb3VyY2VIYW5kbGUg
PSBudWxscHRyOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5oIGIvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmgKaW5kZXggMzI0MmM3ZS4uODg2Yzcw
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFU
YXNrLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNr
LmgKQEAgLTIzLDkgKzIzLDExIEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAgKi8KIAotI2lmbmRlZiBOZXR3b3JrRGF0YVRhc2tfaAotI2RlZmluZSBOZXR3b3JrRGF0YVRh
c2tfaAorI3ByYWdtYSBvbmNlCiAKKyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQorCisjaW5jbHVk
ZSAiRG93bmxvYWRJRC5oIgogI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKICNpbmNsdWRl
IDxXZWJDb3JlL0NyZWRlbnRpYWwuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVyVHlw
ZXMuaD4KQEAgLTQxLDYgKzQzLDEzIEBACiBPQkpDX0NMQVNTIE5TVVJMU2Vzc2lvbkRhdGFUYXNr
OwogI2VuZGlmCiAKKyNpZiBVU0UoU09VUCkKKyNpbmNsdWRlIDxXZWJDb3JlL1Byb3RlY3Rpb25T
cGFjZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXNwb25zZS5oPgorI2luY2x1ZGUg
PHd0Zi9SdW5Mb29wLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorI2VuZGlmCisK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOwogY2xh
c3MgQ3JlZGVudGlhbDsKQEAgLTEwNSwxOSArMTE0LDIzIEBAIHB1YmxpYzoKICAgICB0eXBlZGVm
IHVpbnQ2NF90IFRhc2tJZGVudGlmaWVyOwogICAgIAogICAgIH5OZXR3b3JrRGF0YVRhc2soKTsK
LSAgICAKKworI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHZvaWQgZGlkU2VuZERhdGEodWludDY0
X3QgdG90YWxCeXRlc1NlbnQsIHVpbnQ2NF90IHRvdGFsQnl0ZXNFeHBlY3RlZFRvU2VuZCk7CiAg
ICAgdm9pZCBkaWRSZWNlaXZlQ2hhbGxlbmdlKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlJiwgQ2hhbGxlbmdlQ29tcGxldGlvbkhhbmRsZXImJik7CiAgICAgdm9pZCBkaWRD
b21wbGV0ZVdpdGhFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJik7CiAgICAgdm9p
ZCBkaWRSZWNlaXZlUmVzcG9uc2UoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYmLCBSZXNwb25z
ZUNvbXBsZXRpb25IYW5kbGVyJiYpOwogICAgIHZvaWQgZGlkUmVjZWl2ZURhdGEoUmVmPFdlYkNv
cmU6OlNoYXJlZEJ1ZmZlcj4mJik7CiAgICAgdm9pZCBkaWRCZWNvbWVEb3dubG9hZCgpOwotICAg
IAorCisgICAgdm9pZCB3aWxsUGVyZm9ybUhUVFBSZWRpcmVjdGlvbihXZWJDb3JlOjpSZXNvdXJj
ZVJlc3BvbnNlJiYsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmLCBSZWRpcmVjdENvbXBsZXRp
b25IYW5kbGVyJiYpOworICAgIHZvaWQgdHJhbnNmZXJTYW5kYm94RXh0ZW5zaW9uVG9Eb3dubG9h
ZChEb3dubG9hZCYpOworI2VuZGlmCiAgICAgTmV0d29ya0RhdGFUYXNrQ2xpZW50KiBjbGllbnQo
KSBjb25zdCB7IHJldHVybiBtX2NsaWVudDsgfQogICAgIHZvaWQgY2xlYXJDbGllbnQoKSB7IG1f
Y2xpZW50ID0gbnVsbHB0cjsgfQogICAgIAotICAgIERvd25sb2FkSUQgcGVuZGluZ0Rvd25sb2Fk
SUQoKSB7IHJldHVybiBtX3BlbmRpbmdEb3dubG9hZElEOyB9Ci0gICAgUGVuZGluZ0Rvd25sb2Fk
KiBwZW5kaW5nRG93bmxvYWQoKSB7IHJldHVybiBtX3BlbmRpbmdEb3dubG9hZDsgfQorICAgIERv
d25sb2FkSUQgcGVuZGluZ0Rvd25sb2FkSUQoKSBjb25zdCB7IHJldHVybiBtX3BlbmRpbmdEb3du
bG9hZElEOyB9CisgICAgUGVuZGluZ0Rvd25sb2FkKiBwZW5kaW5nRG93bmxvYWQoKSBjb25zdCB7
IHJldHVybiBtX3BlbmRpbmdEb3dubG9hZDsgfQogICAgIHZvaWQgc2V0UGVuZGluZ0Rvd25sb2Fk
SUQoRG93bmxvYWRJRCBkb3dubG9hZElEKQogICAgIHsKICAgICAgICAgQVNTRVJUKCFtX3BlbmRp
bmdEb3dubG9hZElELmRvd25sb2FkSUQoKSk7CkBAIC0xMzAsMTkgKzE0Myw3MyBAQCBwdWJsaWM6
CiAgICAgICAgIG1fcGVuZGluZ0Rvd25sb2FkID0gJnBlbmRpbmdEb3dubG9hZDsKICAgICB9CiAg
ICAgdm9pZCBzZXRQZW5kaW5nRG93bmxvYWRMb2NhdGlvbihjb25zdCBTdHJpbmcmIGZpbGVuYW1l
LCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmLCBib29sIGFsbG93T3ZlcndyaXRlKTsK
LSAgICBjb25zdCBTdHJpbmcmIHBlbmRpbmdEb3dubG9hZExvY2F0aW9uKCkgeyByZXR1cm4gbV9w
ZW5kaW5nRG93bmxvYWRMb2NhdGlvbjsgfQorICAgIGNvbnN0IFN0cmluZyYgcGVuZGluZ0Rvd25s
b2FkTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3BlbmRpbmdEb3dubG9hZExvY2F0aW9uOyB9
CisgICAgYm9vbCBpc0Rvd25sb2FkKCkgY29uc3QgeyByZXR1cm4gISFtX3BlbmRpbmdEb3dubG9h
ZElELmRvd25sb2FkSUQoKTsgfQogCiAgICAgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
JiBmaXJzdFJlcXVlc3QoKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0UmVxdWVzdDsgfQogICAgIFN0
cmluZyBzdWdnZXN0ZWRGaWxlbmFtZSgpOwogICAgIHZvaWQgc2V0U3VnZ2VzdGVkRmlsZW5hbWUo
Y29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCB3aWxsUGVyZm9ybUhUVFBSZWRpcmVjdGlvbihXZWJD
b3JlOjpSZXNvdXJjZVJlc3BvbnNlJiYsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmLCBSZWRp
cmVjdENvbXBsZXRpb25IYW5kbGVyJiYpOwotICAgIHZvaWQgdHJhbnNmZXJTYW5kYm94RXh0ZW5z
aW9uVG9Eb3dubG9hZChEb3dubG9hZCYpOwogICAgIGJvb2wgYWxsb3dzU3BlY2lmaWNIVFRQU0Nl
cnRpZmljYXRlRm9ySG9zdChjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYp
OwogICAgIAogcHJpdmF0ZToKICAgICBOZXR3b3JrRGF0YVRhc2soTmV0d29ya1Nlc3Npb24mLCBO
ZXR3b3JrRGF0YVRhc2tDbGllbnQmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBX
ZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFscywgV2ViQ29yZTo6Q29udGVudFNuaWZmaW5nUG9saWN5
LCBib29sIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpOwogCiAgICAg
Ym9vbCB0cnlQYXNzd29yZEJhc2VkQXV0aGVudGljYXRpb24oY29uc3QgV2ViQ29yZTo6QXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UmLCBjb25zdCBDaGFsbGVuZ2VDb21wbGV0aW9uSGFuZGxlciYpOwor
CisjaWYgVVNFKFNPVVApCisgICAgdm9pZCB0aW1lb3V0RmlyZWQoKTsKKyAgICB2b2lkIHN0YXJ0
VGltZW91dCgpOworICAgIHZvaWQgc3RvcFRpbWVvdXQoKTsKKyAgICB2b2lkIGludmFsaWRhdGVB
bmRDYW5jZWwoKTsKKyAgICB2b2lkIGNyZWF0ZVJlcXVlc3QoY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0Jik7CisgICAgdm9pZCBjbGVhclJlcXVlc3QoKTsKKyAgICBzdGF0aWMgdm9pZCBz
ZW5kUmVxdWVzdENhbGxiYWNrKFNvdXBSZXF1ZXN0KiwgR0FzeW5jUmVzdWx0KiwgTmV0d29ya0Rh
dGFUYXNrKik7CisgICAgdm9pZCBkaWRTZW5kUmVxdWVzdChHUmVmUHRyPEdJbnB1dFN0cmVhbT4m
Jik7CisgICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoKTsKKyAgICBzdGF0aWMgdm9pZCB0bHNF
cnJvcnNDaGFuZ2VkQ2FsbGJhY2soU291cE1lc3NhZ2UqLCBHUGFyYW1TcGVjKiwgTmV0d29ya0Rh
dGFUYXNrKik7CisgICAgdm9pZCB0bHNFcnJvcnNDaGFuZ2VkKCk7CisgICAgdm9pZCBhcHBseUF1
dGhlbnRpY2F0aW9uVG9SZXF1ZXN0KFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOworICAgIHN0
YXRpYyB2b2lkIGF1dGhlbnRpY2F0ZUNhbGxiYWNrKFNvdXBTZXNzaW9uKiwgU291cE1lc3NhZ2Uq
LCBTb3VwQXV0aCosIGdib29sZWFuIHJldHJ5aW5nLCBOZXR3b3JrRGF0YVRhc2sqKTsKKyAgICB2
b2lkIGF1dGhlbnRpY2F0ZShXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYmKTsKKyAg
ICB2b2lkIGNvbnRpbnVlQXV0aGVudGljYXRlKFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlJiYpOworICAgIHN0YXRpYyB2b2lkIHNraXBJbnB1dFN0cmVhbUZvclJlZGlyZWN0aW9uQ2Fs
bGJhY2soR0lucHV0U3RyZWFtKiwgR0FzeW5jUmVzdWx0KiwgTmV0d29ya0RhdGFUYXNrKik7Cisg
ICAgdm9pZCBza2lwSW5wdXRTdHJlYW1Gb3JSZWRpcmVjdGlvbigpOworICAgIHZvaWQgZGlkRmlu
aXNoU2tpcElucHV0U3RyZWFtRm9yUmVkaXJlY3Rpb24oKTsKKyAgICBib29sIHNob3VsZFN0YXJ0
SFRUUFJlZGlyZWN0aW9uKCk7CisgICAgdm9pZCBjb250aW51ZUhUVFBSZWRpcmVjdGlvbigpOwor
ICAgIHN0YXRpYyB2b2lkIHJlYWRDYWxsYmFjayhHSW5wdXRTdHJlYW0qLCBHQXN5bmNSZXN1bHQq
LCBOZXR3b3JrRGF0YVRhc2sqKTsKKyAgICB2b2lkIHJlYWQoKTsKKyAgICB2b2lkIGRpZFJlYWQo
Z3NzaXplIGJ5dGVzUmVhZCk7CisgICAgdm9pZCBkaWRGaW5pc2hSZWFkKCk7CisgICAgc3RhdGlj
IHZvaWQgcmVxdWVzdE5leHRQYXJ0Q2FsbGJhY2soU291cE11bHRpcGFydElucHV0U3RyZWFtKiwg
R0FzeW5jUmVzdWx0KiwgTmV0d29ya0RhdGFUYXNrKik7CisgICAgdm9pZCByZXF1ZXN0TmV4dFBh
cnQoKTsKKyAgICB2b2lkIGRpZFJlcXVlc3ROZXh0UGFydChHUmVmUHRyPEdJbnB1dFN0cmVhbT4m
Jik7CisgICAgdm9pZCBkaWRGaW5pc2hSZXF1ZXN0TmV4dFBhcnQoKTsKKyAgICBzdGF0aWMgdm9p
ZCBnb3RIZWFkZXJzQ2FsbGJhY2soU291cE1lc3NhZ2UqLCBOZXR3b3JrRGF0YVRhc2sqKTsKKyAg
ICB2b2lkIGRpZEdldEhlYWRlcnMoKTsKKyAgICBzdGF0aWMgdm9pZCB3cm90ZUJvZHlEYXRhQ2Fs
bGJhY2soU291cE1lc3NhZ2UqLCBTb3VwQnVmZmVyKiwgTmV0d29ya0RhdGFUYXNrKik7CisgICAg
dm9pZCBkaWRXcml0ZUJvZHlEYXRhKHVpbnQ2NF90IGJ5dGVzU2VudCk7CisgICAgdm9pZCBkb3du
bG9hZCgpOworICAgIHN0YXRpYyB2b2lkIHdyaXRlRG93bmxvYWRDYWxsYmFjayhHT3V0cHV0U3Ry
ZWFtKiwgR0FzeW5jUmVzdWx0KiwgTmV0d29ya0RhdGFUYXNrKik7CisgICAgdm9pZCB3cml0ZURv
d25sb2FkKCk7CisgICAgdm9pZCBkaWRXcml0ZURvd25sb2FkKGdzaXplIGJ5dGVzV3JpdHRlbik7
CisgICAgdm9pZCBkaWRGYWlsRG93bmxvYWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYp
OworICAgIHZvaWQgZGlkRmluaXNoRG93bmxvYWQoKTsKKyAgICB2b2lkIGNsZWFuRG93bmxvYWRG
aWxlcygpOworICAgIHZvaWQgZGlkRmFpbChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJik7
CisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCisgICAgc3RhdGljIHZvaWQgbmV0d29ya0V2ZW50Q2Fs
bGJhY2soU291cE1lc3NhZ2UqLCBHU29ja2V0Q2xpZW50RXZlbnQsIEdJT1N0cmVhbSosIE5ldHdv
cmtEYXRhVGFzayopOworICAgIHZvaWQgbmV0d29ya0V2ZW50KEdTb2NrZXRDbGllbnRFdmVudCk7
CisjaWYgU09VUF9DSEVDS19WRVJTSU9OKDIsIDQ5LCA5MSkKKyAgICBzdGF0aWMgdm9pZCBzdGFy
dGluZ0NhbGxiYWNrKFNvdXBNZXNzYWdlKiwgTmV0d29ya0RhdGFUYXNrKik7CisjZWxzZQorICAg
IHN0YXRpYyB2b2lkIHJlcXVlc3RTdGFydGVkQ2FsbGJhY2soU291cFNlc3Npb24qLCBTb3VwTWVz
c2FnZSosIFNvdXBTb2NrZXQqLCBOZXR3b3JrRGF0YVRhc2sqKTsKKyNlbmRpZgorICAgIHZvaWQg
ZGlkU3RhcnRSZXF1ZXN0KCk7CisgICAgc3RhdGljIHZvaWQgcmVzdGFydGVkQ2FsbGJhY2soU291
cE1lc3NhZ2UqLCBOZXR3b3JrRGF0YVRhc2sqKTsKKyAgICB2b2lkIGRpZFJlc3RhcnQoKTsKKyNl
bmRpZgorI2VuZGlmCiAgICAgCiAgICAgZW51bSBGYWlsdXJlVHlwZSB7CiAgICAgICAgIE5vRmFp
bHVyZSwKQEAgLTE3Miw2ICsyMzksMzAgQEAgcHJpdmF0ZToKICNpZiBQTEFURk9STShDT0NPQSkK
ICAgICBSZXRhaW5QdHI8TlNVUkxTZXNzaW9uRGF0YVRhc2s+IG1fdGFzazsKICNlbmRpZgorI2lm
IFVTRShTT1VQKQorICAgIFN0YXRlIG1fc3RhdGUgeyBTdGF0ZTo6U3VzcGVuZGVkIH07CisgICAg
V2ViQ29yZTo6Q29udGVudFNuaWZmaW5nUG9saWN5IG1fc2hvdWxkQ29udGVudFNuaWZmOworICAg
IEdSZWZQdHI8U291cFJlcXVlc3Q+IG1fc291cFJlcXVlc3Q7CisgICAgR1JlZlB0cjxTb3VwTWVz
c2FnZT4gbV9zb3VwTWVzc2FnZTsKKyAgICBHUmVmUHRyPEdJbnB1dFN0cmVhbT4gbV9pbnB1dFN0
cmVhbTsKKyAgICBHUmVmUHRyPFNvdXBNdWx0aXBhcnRJbnB1dFN0cmVhbT4gbV9tdWx0aXBhcnRJ
bnB1dFN0cmVhbTsKKyAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gbV9jYW5jZWxsYWJsZTsKKyAg
ICBHUmVmUHRyPEdBc3luY1Jlc3VsdD4gbV9wZW5kaW5nUmVzdWx0OworICAgIFdlYkNvcmU6OlBy
b3RlY3Rpb25TcGFjZSBtX3Byb3RlY3Rpb25TcGFjZUZvclBlcnNpc3RlbnRTdG9yYWdlOworICAg
IFdlYkNvcmU6OkNyZWRlbnRpYWwgbV9jcmVkZW50aWFsRm9yUGVyc2lzdGVudFN0b3JhZ2U7Cisg
ICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNlOworICAgIFZlY3RvcjxjaGFy
PiBtX3JlYWRCdWZmZXI7CisgICAgdW5zaWduZWQgbV9yZWRpcmVjdENvdW50IHsgMCB9OworICAg
IHVpbnQ2NF90IG1fYm9keURhdGFUb3RhbEJ5dGVzU2VudCB7IDAgfTsKKyAgICBHUmVmUHRyPEdG
aWxlPiBtX2Rvd25sb2FkRGVzdGluYXRpb25GaWxlOworICAgIEdSZWZQdHI8R0ZpbGU+IG1fZG93
bmxvYWRJbnRlcm1lZGlhdGVGaWxlOworICAgIEdSZWZQdHI8R091dHB1dFN0cmVhbT4gbV9kb3du
bG9hZE91dHB1dFN0cmVhbTsKKyAgICBib29sIG1fYWxsb3dPdmVyd3JpdGVEb3dubG9hZCB7IGZh
bHNlIH07CisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCisgICAgZG91YmxlIG1fc3RhcnRUaW1lIHsg
MCB9OworI2VuZGlmCisgICAgUnVuTG9vcDo6VGltZXI8TmV0d29ya0RhdGFUYXNrPiBtX3RpbWVv
dXRTb3VyY2U7CisjZW5kaWYKICAgICBTdHJpbmcgbV9zdWdnZXN0ZWRGaWxlbmFtZTsKIH07CiAK
QEAgLTE4MSw0ICsyNzIsNCBAQCBXZWJDb3JlOjpDcmVkZW50aWFsIHNlcnZlclRydXN0Q3JlZGVu
dGlhbChjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZQogICAgIAogfQogCi0j
ZW5kaWYKKyNlbmRpZiAvLyBVU0UoTkVUV09SS19TRVNTSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuY3BwIGIvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuY3BwCmluZGV4IGJiMjk5ZjYuLjhmZDRhY2QgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHAKQEAgLTI3
MSw3ICsyNzEsNyBAQCB2b2lkIE5ldHdvcmtMb2FkOjpjb21wbGV0ZUF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlKENoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVyJiYgYwogdm9pZCBOZXR3b3JrTG9hZDo6
ZGlkUmVjZWl2ZVJlc3BvbnNlTmV0d29ya1Nlc3Npb24oUmVzb3VyY2VSZXNwb25zZSYmIHJlc3Bv
bnNlLCBSZXNwb25zZUNvbXBsZXRpb25IYW5kbGVyJiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAobV90YXNrICYmIG1fdGFzay0+cGVu
ZGluZ0Rvd25sb2FkSUQoKS5kb3dubG9hZElEKCkpCisgICAgaWYgKG1fdGFzayAmJiBtX3Rhc2st
PmlzRG93bmxvYWQoKSkKICAgICAgICAgTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLmZpbmRQ
ZW5kaW5nRG93bmxvYWRMb2NhdGlvbigqbV90YXNrLmdldCgpLCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSwgcmVzcG9uc2UpOwogICAgIGVsc2UgaWYgKHNoYXJlZERpZFJlY2VpdmVSZXNwb25z
ZShXVEZNb3ZlKHJlc3BvbnNlKSkgPT0gTmV0d29ya0xvYWRDbGllbnQ6OlNob3VsZENvbnRpbnVl
RGlkUmVjZWl2ZVJlc3BvbnNlOjpZZXMpCiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFBvbGlj
eVVzZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
cy5jcHAKaW5kZXggM2IzOTVkNi4uZGJjNzNkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAtMTAwLDcgKzEwMCw3IEBAIE5ldHdv
cmtQcm9jZXNzOjpOZXR3b3JrUHJvY2VzcygpCiAgICAgYWRkU3VwcGxlbWVudDxBdXRoZW50aWNh
dGlvbk1hbmFnZXI+KCk7CiAgICAgYWRkU3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyPigpOwog
ICAgIGFkZFN1cHBsZW1lbnQ8Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyPigpOwotI2lmIFVTRShORVRX
T1JLX1NFU1NJT04pCisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikgJiYgUExBVEZPUk0oQ09DT0Ep
CiAgICAgTmV0d29ya1Nlc3Npb246OnNldEN1c3RvbVByb3RvY29sTWFuYWdlcihzdXBwbGVtZW50
PEN1c3RvbVByb3RvY29sTWFuYWdlcj4oKSk7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmggYi9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oCmluZGV4IGE4NDBmMWQuLmIwODgyZjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9u
LmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uaApA
QCAtMjUsNiArMjUsOCBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2lmIFVTRShORVRXT1JLX1NFU1NJ
T04pCisKICNpZiBQTEFURk9STShDT0NPQSkKIE9CSkNfQ0xBU1MgTlNVUkxTZXNzaW9uOwogT0JK
Q19DTEFTUyBOU09wZXJhdGlvblF1ZXVlOwpAQCAtMzUsOSArMzcsMTQgQEAgT0JKQ19DTEFTUyBX
S05ldHdvcmtTZXNzaW9uRGVsZWdhdGU7CiAjaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNrLmgiCiAj
aW5jbHVkZSA8V2ViQ29yZS9TZXNzaW9uSUQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgor
I2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZi5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CiAKKyNpZiBVU0UoU09VUCkKK3R5cGVkZWYgc3RydWN0IF9Tb3Vw
U2Vzc2lvbiBTb3VwU2Vzc2lvbjsKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFz
cyBOZXR3b3JrU3RvcmFnZVNlc3Npb247CiB9CkBAIC02Miw5ICs2OSwxMyBAQCBwdWJsaWM6CiAK
ICAgICBXZWJDb3JlOjpTZXNzaW9uSUQgc2Vzc2lvbklEKCkgY29uc3QgeyByZXR1cm4gbV9zZXNz
aW9uSUQ7IH0KIAorI2lmIFVTRShTT1VQKQorICAgIFNvdXBTZXNzaW9uKiBzb3VwU2Vzc2lvbigp
IGNvbnN0OworI2VuZGlmCisKKyNpZiBQTEFURk9STShDT0NPQSkKICAgICAvLyBNdXN0IGJlIGNh
bGxlZCBiZWZvcmUgYW55IE5ldHdvcmtTZXNzaW9uIGhhcyBiZWVuIGNyZWF0ZWQuCiAgICAgc3Rh
dGljIHZvaWQgc2V0Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyKEN1c3RvbVByb3RvY29sTWFuYWdlciop
OwotI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHN0YXRpYyB2b2lkIHNldFNvdXJjZUFwcGxpY2F0
aW9uQXVkaXRUb2tlbkRhdGEoUmV0YWluUHRyPENGRGF0YVJlZj4mJik7CiAgICAgc3RhdGljIHZv
aWQgc2V0U291cmNlQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYpOwog
ICAgIHN0YXRpYyB2b2lkIHNldFNvdXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5SWRlbnRpZmllcihj
b25zdCBTdHJpbmcmKTsKQEAgLTc0LDI5ICs4NSwzNCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAg
IHZvaWQgY2xlYXJDcmVkZW50aWFscygpOwotCisjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgTmV0
d29ya0RhdGFUYXNrKiBkYXRhVGFza0ZvcklkZW50aWZpZXIoTmV0d29ya0RhdGFUYXNrOjpUYXNr
SWRlbnRpZmllciwgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHMpOwogCiAgICAgdm9pZCBhZGRE
b3dubG9hZElEKE5ldHdvcmtEYXRhVGFzazo6VGFza0lkZW50aWZpZXIsIERvd25sb2FkSUQpOwog
ICAgIERvd25sb2FkSUQgZG93bmxvYWRJRChOZXR3b3JrRGF0YVRhc2s6OlRhc2tJZGVudGlmaWVy
KTsKICAgICBEb3dubG9hZElEIHRha2VEb3dubG9hZElEKE5ldHdvcmtEYXRhVGFzazo6VGFza0lk
ZW50aWZpZXIpOwotICAgIAorI2VuZGlmCisKIHByaXZhdGU6CiAgICAgTmV0d29ya1Nlc3Npb24o
VHlwZSwgV2ViQ29yZTo6U2Vzc2lvbklELCBDdXN0b21Qcm90b2NvbE1hbmFnZXIqKTsKLSAgICBX
ZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mIG5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpOwor
ICAgIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgbmV0d29ya1N0b3JhZ2VTZXNzaW9u
KCkgY29uc3Q7CiAKICAgICBXZWJDb3JlOjpTZXNzaW9uSUQgbV9zZXNzaW9uSUQ7CiAKKyNpZiBQ
TEFURk9STShDT0NPQSkKICAgICBIYXNoTWFwPE5ldHdvcmtEYXRhVGFzazo6VGFza0lkZW50aWZp
ZXIsIE5ldHdvcmtEYXRhVGFzayo+IG1fZGF0YVRhc2tNYXBXaXRoQ3JlZGVudGlhbHM7CiAgICAg
SGFzaE1hcDxOZXR3b3JrRGF0YVRhc2s6OlRhc2tJZGVudGlmaWVyLCBOZXR3b3JrRGF0YVRhc2sq
PiBtX2RhdGFUYXNrTWFwV2l0aG91dENyZWRlbnRpYWxzOwogICAgIEhhc2hNYXA8TmV0d29ya0Rh
dGFUYXNrOjpUYXNrSWRlbnRpZmllciwgRG93bmxvYWRJRD4gbV9kb3dubG9hZE1hcDsKIAotI2lm
IFBMQVRGT1JNKENPQ09BKQogICAgIFJldGFpblB0cjxOU1VSTFNlc3Npb24+IG1fc2Vzc2lvbldp
dGhDcmVkZW50aWFsU3RvcmFnZTsKICAgICBSZXRhaW5QdHI8V0tOZXR3b3JrU2Vzc2lvbkRlbGVn
YXRlPiBtX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2VEZWxlZ2F0ZTsKICAgICBSZXRhaW5Q
dHI8TlNVUkxTZXNzaW9uPiBtX3Nlc3Npb25XaXRob3V0Q3JlZGVudGlhbFN0b3JhZ2U7CiAgICAg
UmV0YWluUHRyPFdLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZT4gbV9zZXNzaW9uV2l0aG91dENyZWRl
bnRpYWxTdG9yYWdlRGVsZWdhdGU7CisjZWxpZiBVU0UoU09VUCkKKyAgICBIYXNoU2V0PE5ldHdv
cmtEYXRhVGFzayo+IG1fZGF0YVRhc2tTZXQ7CiAjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLy8gVVNFKE5FVFdPUktfU0VTU0lPTikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW0g
Yi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29h
Lm1tCmluZGV4IGNlZGZjMzkuLmM3NWM3MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW0KKysrIGIvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbQpAQCAtNDc1
LDcgKzQ3NSw3IEBAIHZvaWQgTmV0d29ya1Nlc3Npb246OmludmFsaWRhdGVBbmRDYW5jZWwoKQog
fQogCiAKLVdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgTmV0d29ya1Nlc3Npb246Om5l
dHdvcmtTdG9yYWdlU2Vzc2lvbigpCitXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mIE5l
dHdvcmtTZXNzaW9uOjpuZXR3b3JrU3RvcmFnZVNlc3Npb24oKSBjb25zdAogewogICAgIGF1dG8q
IHN0b3JhZ2VTZXNzaW9uID0gV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzdG9yYWdl
U2Vzc2lvbihtX3Nlc3Npb25JRCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoc3RvcmFnZVNlc3Npb24p
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3Jr
RGF0YVRhc2tTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0
d29ya0RhdGFUYXNrU291cC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
OTcyNGJhMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5jcHAKQEAgLTAsMCArMSwxMTU1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJOZXR3b3JrRGF0YVRhc2suaCIKKworI2luY2x1ZGUgIkRhdGFSZWZl
cmVuY2UuaCIKKyNpbmNsdWRlICJEb3dubG9hZC5oIgorI2luY2x1ZGUgIkRvd25sb2FkU291cEVy
cm9ycy5oIgorI2luY2x1ZGUgIk5ldHdvcmtMb2FkLmgiCisjaW5jbHVkZSAiTmV0d29ya1Byb2Nl
c3MuaCIKKyNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5oIgorI2luY2x1ZGUgIldlYkVycm9ycy5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0hUVFBQYXJzZXJzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFn
ZVNlc3Npb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvU291cE5ldHdvcmtTZXNzaW9uLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQu
aD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitz
dGF0aWMgY29uc3Qgc2l6ZV90IGdEZWZhdWx0UmVhZEJ1ZmZlclNpemUgPSA4MTkyOworCitOZXR3
b3JrRGF0YVRhc2s6Ok5ldHdvcmtEYXRhVGFzayhOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwgTmV0
d29ya0RhdGFUYXNrQ2xpZW50JiBjbGllbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dFdpdGhDcmVkZW50aWFscywgU3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsIENv
bnRlbnRTbmlmZmluZ1BvbGljeSBzaG91bGRDb250ZW50U25pZmYsIGJvb2wgc2hvdWxkQ2xlYXJS
ZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCkKKyAgICA6IG1fZmFpbHVyZVRpbWVyKCp0aGlz
LCAmTmV0d29ya0RhdGFUYXNrOjpmYWlsdXJlVGltZXJGaXJlZCkKKyAgICAsIG1fc2Vzc2lvbigm
c2Vzc2lvbikKKyAgICAsIG1fY2xpZW50KCZjbGllbnQpCisgICAgLCBtX3N0b3JlZENyZWRlbnRp
YWxzKHN0b3JlZENyZWRlbnRpYWxzKQorICAgICwgbV9sYXN0SFRUUE1ldGhvZChyZXF1ZXN0V2l0
aENyZWRlbnRpYWxzLmh0dHBNZXRob2QoKSkKKyAgICAsIG1fZmlyc3RSZXF1ZXN0KHJlcXVlc3RX
aXRoQ3JlZGVudGlhbHMpCisgICAgLCBtX3Nob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQ
UmVkaXJlY3Qoc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCkKKyAgICAs
IG1fc2hvdWxkQ29udGVudFNuaWZmKHNob3VsZENvbnRlbnRTbmlmZikKKyAgICAsIG1fdGltZW91
dFNvdXJjZShSdW5Mb29wOjptYWluKCksIHRoaXMsICZOZXR3b3JrRGF0YVRhc2s6OnRpbWVvdXRG
aXJlZCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgbV9zZXNzaW9uLT5t
X2RhdGFUYXNrU2V0LmFkZCh0aGlzKTsKKworICAgIGlmICghcmVxdWVzdFdpdGhDcmVkZW50aWFs
cy51cmwoKS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgc2NoZWR1bGVGYWlsdXJlKEludmFsaWRVUkxG
YWlsdXJlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghcG9ydEFsbG93ZWQo
cmVxdWVzdFdpdGhDcmVkZW50aWFscy51cmwoKSkpIHsKKyAgICAgICAgc2NoZWR1bGVGYWlsdXJl
KEJsb2NrZWRGYWlsdXJlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gcmVx
dWVzdCA9IHJlcXVlc3RXaXRoQ3JlZGVudGlhbHM7CisgICAgaWYgKHJlcXVlc3QudXJsKCkucHJv
dG9jb2xJc0luSFRUUEZhbWlseSgpKSB7CisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCisgICAgICAg
IG1fc3RhcnRUaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lTVMoKTsKKyNlbmRpZgor
ICAgICAgICBhdXRvIHVybCA9IHJlcXVlc3QudXJsKCk7CisgICAgICAgIGlmIChtX3N0b3JlZENy
ZWRlbnRpYWxzID09IEFsbG93U3RvcmVkQ3JlZGVudGlhbHMpIHsKKyAgICAgICAgICAgIG1fdXNl
ciA9IHVybC51c2VyKCk7CisgICAgICAgICAgICBtX3Bhc3N3b3JkID0gdXJsLnBhc3MoKTsKKyAg
ICAgICAgICAgIHJlcXVlc3QucmVtb3ZlQ3JlZGVudGlhbHMoKTsKKworICAgICAgICAgICAgaWYg
KG1fdXNlci5pc0VtcHR5KCkgJiYgbV9wYXNzd29yZC5pc0VtcHR5KCkpCisgICAgICAgICAgICAg
ICAgbV9pbml0aWFsQ3JlZGVudGlhbCA9IG1fc2Vzc2lvbi0+bmV0d29ya1N0b3JhZ2VTZXNzaW9u
KCkuY3JlZGVudGlhbFN0b3JhZ2UoKS5nZXQocmVxdWVzdC51cmwoKSk7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgbV9zZXNzaW9uLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKS5j
cmVkZW50aWFsU3RvcmFnZSgpLnNldChDcmVkZW50aWFsKG1fdXNlciwgbV9wYXNzd29yZCwgQ3Jl
ZGVudGlhbFBlcnNpc3RlbmNlTm9uZSksIHJlcXVlc3QudXJsKCkpOworICAgICAgICB9CisgICAg
ICAgIGFwcGx5QXV0aGVudGljYXRpb25Ub1JlcXVlc3QocmVxdWVzdCk7CisgICAgfQorICAgIGNy
ZWF0ZVJlcXVlc3QocmVxdWVzdCk7Cit9CisKK05ldHdvcmtEYXRhVGFzazo6fk5ldHdvcmtEYXRh
VGFzaygpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoIW1fY2xp
ZW50KTsKKyAgICBjbGVhclJlcXVlc3QoKTsKKyAgICBtX3Nlc3Npb24tPm1fZGF0YVRhc2tTZXQu
cmVtb3ZlKHRoaXMpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6c2NoZWR1bGVGYWlsdXJl
KEZhaWx1cmVUeXBlIHR5cGUpCit7CisgICAgQVNTRVJUKHR5cGUgIT0gTm9GYWlsdXJlKTsKKyAg
ICBtX3NjaGVkdWxlZEZhaWx1cmVUeXBlID0gdHlwZTsKKyAgICBtX2ZhaWx1cmVUaW1lci5zdGFy
dE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpmYWlsdXJlVGltZXJGaXJl
ZCgpCit7CisgICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4gcHJvdGVjdGVkVGhpcyh0aGlzKTsK
KworICAgIHN3aXRjaCAobV9zY2hlZHVsZWRGYWlsdXJlVHlwZSkgeworICAgIGNhc2UgQmxvY2tl
ZEZhaWx1cmU6CisgICAgICAgIG1fc2NoZWR1bGVkRmFpbHVyZVR5cGUgPSBOb0ZhaWx1cmU7Cisg
ICAgICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgICAgIG1fY2xpZW50LT53YXNCbG9ja2VkKCk7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEludmFsaWRVUkxGYWlsdXJlOgorICAgICAgICBt
X3NjaGVkdWxlZEZhaWx1cmVUeXBlID0gTm9GYWlsdXJlOworICAgICAgICBpZiAobV9jbGllbnQp
CisgICAgICAgICAgICBtX2NsaWVudC0+Y2Fubm90U2hvd1VSTCgpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBOb0ZhaWx1cmU6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK1N0cmlu
ZyBOZXR3b3JrRGF0YVRhc2s6OnN1Z2dlc3RlZEZpbGVuYW1lKCkKK3sKKyAgICBpZiAoIW1fc3Vn
Z2VzdGVkRmlsZW5hbWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbV9zdWdnZXN0ZWRGaWxl
bmFtZTsKKworICAgIFN0cmluZyBzdWdnZXN0ZWRGaWxlbmFtZSA9IG1fcmVzcG9uc2Uuc3VnZ2Vz
dGVkRmlsZW5hbWUoKTsKKyAgICBpZiAoIXN1Z2dlc3RlZEZpbGVuYW1lLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuIHN1Z2dlc3RlZEZpbGVuYW1lOworCisgICAgVVJMIHVybCA9IG1fcmVzcG9u
c2UudXJsKCk7CisgICAgdXJsLnNldFF1ZXJ5KFN0cmluZygpKTsKKyAgICB1cmwucmVtb3ZlRnJh
Z21lbnRJZGVudGlmaWVyKCk7CisgICAgcmV0dXJuIGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyh1
cmwubGFzdFBhdGhDb21wb25lbnQoKSk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpzZXRT
dWdnZXN0ZWRGaWxlbmFtZShjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZE5hbWUpCit7CisgICAgbV9z
dWdnZXN0ZWRGaWxlbmFtZSA9IHN1Z2dlc3RlZE5hbWU7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFU
YXNrOjpzZXRQZW5kaW5nRG93bmxvYWRMb2NhdGlvbihjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBj
b25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmLCBib29sIGFsbG93T3ZlcndyaXRlKQorewor
ICAgIG1fcGVuZGluZ0Rvd25sb2FkTG9jYXRpb24gPSBmaWxlbmFtZTsKKyAgICBtX2FsbG93T3Zl
cndyaXRlRG93bmxvYWQgPSBhbGxvd092ZXJ3cml0ZTsKK30KKworYm9vbCBOZXR3b3JrRGF0YVRh
c2s6OmFsbG93c1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UmKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBOZXR3b3Jr
RGF0YVRhc2s6OmNyZWF0ZVJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQor
eworICAgIEdVbmlxdWVQdHI8U291cFVSST4gc291cFVSSSA9IHJlcXVlc3QuY3JlYXRlU291cFVS
SSgpOworICAgIGlmICghc291cFVSSSkgeworICAgICAgICBzY2hlZHVsZUZhaWx1cmUoSW52YWxp
ZFVSTEZhaWx1cmUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgR1JlZlB0cjxTb3Vw
UmVxdWVzdD4gc291cFJlcXVlc3QgPSBhZG9wdEdSZWYoc291cF9zZXNzaW9uX3JlcXVlc3RfdXJp
KG1fc2Vzc2lvbi0+c291cFNlc3Npb24oKSwgc291cFVSSS5nZXQoKSwgbnVsbHB0cikpOworICAg
IGlmICghc291cFJlcXVlc3QpIHsKKyAgICAgICAgc2NoZWR1bGVGYWlsdXJlKEludmFsaWRVUkxG
YWlsdXJlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHJlcXVlc3QudXBkYXRlU291
cFJlcXVlc3Qoc291cFJlcXVlc3QuZ2V0KCkpOworCisgICAgaWYgKCFyZXF1ZXN0LnVybCgpLnBy
b3RvY29sSXNJbkhUVFBGYW1pbHkoKSkgeworICAgICAgICBtX3NvdXBSZXF1ZXN0ID0gV1RGTW92
ZShzb3VwUmVxdWVzdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBIVFRQIHJl
cXVlc3QuCisgICAgR1JlZlB0cjxTb3VwTWVzc2FnZT4gc291cE1lc3NhZ2UgPSBhZG9wdEdSZWYo
c291cF9yZXF1ZXN0X2h0dHBfZ2V0X21lc3NhZ2UoU09VUF9SRVFVRVNUX0hUVFAoc291cFJlcXVl
c3QuZ2V0KCkpKSk7CisgICAgaWYgKCFzb3VwTWVzc2FnZSkgeworICAgICAgICBzY2hlZHVsZUZh
aWx1cmUoSW52YWxpZFVSTEZhaWx1cmUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
cmVxdWVzdC51cGRhdGVTb3VwTWVzc2FnZShzb3VwTWVzc2FnZS5nZXQoKSk7CisgICAgaWYgKG1f
c2hvdWxkQ29udGVudFNuaWZmID09IERvTm90U25pZmZDb250ZW50KQorICAgICAgICBzb3VwX21l
c3NhZ2VfZGlzYWJsZV9mZWF0dXJlKHNvdXBNZXNzYWdlLmdldCgpLCBTT1VQX1RZUEVfQ09OVEVO
VF9TTklGRkVSKTsKKyAgICBpZiAobV91c2VyLmlzRW1wdHkoKSAmJiBtX3Bhc3N3b3JkLmlzRW1w
dHkoKSAmJiBtX3N0b3JlZENyZWRlbnRpYWxzID09IERvTm90QWxsb3dTdG9yZWRDcmVkZW50aWFs
cykgeworICAgICAgICAvLyBJbiBjYXNlIGNyZWRlbnRpYWwgaXMgbm90IGF2YWlsYWJsZSBhbmQg
Y3JlZGVudGlhbCBzdG9yYWdlIHNob3VsZCBub3QgdG8gYmUgdXNlZCwKKyAgICAgICAgLy8gZGlz
YWJsZSBhdXRoZW50aWNhdGlvbiBtYW5hZ2VyIHNvIHRoYXQgY3JlZGVudGlhbHMgc3RvcmVkIGlu
IGxpYnNvdXAgYXJlIG5vdCB1c2VkLgorICAgICAgICBzb3VwX21lc3NhZ2VfZGlzYWJsZV9mZWF0
dXJlKHNvdXBNZXNzYWdlLmdldCgpLCBTT1VQX1RZUEVfQVVUSF9NQU5BR0VSKTsKKyAgICB9CisK
KyAgICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBhbiBBY2NlcHQgaGVhZGVyIGZvciBzdWJyZXNvdXJj
ZXM7IHNvbWUgc2l0ZXMgd2FudCB0aGlzIHRvIHNlcnZlIHNvbWUgb2YgdGhlaXIgc3VicmVzb3Vy
Y2VzLgorICAgIGlmICghc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X29uZShzb3VwTWVzc2FnZS0+
cmVxdWVzdF9oZWFkZXJzLCAiQWNjZXB0IikpCisgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJz
X2FwcGVuZChzb3VwTWVzc2FnZS0+cmVxdWVzdF9oZWFkZXJzLCAiQWNjZXB0IiwgIiovKiIpOwor
CisgICAgLy8gSW4gdGhlIGNhc2Ugb2YgWEhSIC5zZW5kKCkgYW5kIC5zZW5kKCIiKSBleHBsaWNp
dGx5IHRlbGwgbGlic291cCB0byBzZW5kIGEgemVybyBjb250ZW50LWxlbmdodCBoZWFkZXIKKyAg
ICAvLyBmb3IgY29uc2lzdGVuY3kgd2l0aCBvdGhlciBVQSBpbXBsZW1lbnRhdGlvbnMgbGlrZSBG
aXJlZm94LiBJdCdzIGRvbmUgaW4gdGhlIGJhY2tlbmQgaGVyZSBpbnN0ZWFkIG9mCisgICAgLy8g
aW4gWEhSIGNvZGUgc2luY2UgaW4gWEhSIENPUlMgY2hlY2tpbmcgcHJldmVudHMgdXMgZnJvbSB0
aGlzIGtpbmQgb2YgbGF0ZSBoZWFkZXIgbWFuaXB1bGF0aW9uLgorICAgIGlmICgoc291cE1lc3Nh
Z2UtPm1ldGhvZCA9PSBTT1VQX01FVEhPRF9QT1NUIHx8IHNvdXBNZXNzYWdlLT5tZXRob2QgPT0g
U09VUF9NRVRIT0RfUFVUKSAmJiAhc291cE1lc3NhZ2UtPnJlcXVlc3RfYm9keS0+bGVuZ3RoKQor
ICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19zZXRfY29udGVudF9sZW5ndGgoc291cE1lc3Nh
Z2UtPnJlcXVlc3RfaGVhZGVycywgMCk7CisKKyAgICB1bnNpZ25lZCBmbGFncyA9IFNPVVBfTUVT
U0FHRV9OT19SRURJUkVDVDsKKyAgICBzb3VwX21lc3NhZ2Vfc2V0X2ZsYWdzKHNvdXBNZXNzYWdl
LmdldCgpLCBzdGF0aWNfY2FzdDxTb3VwTWVzc2FnZUZsYWdzPihzb3VwX21lc3NhZ2VfZ2V0X2Zs
YWdzKHNvdXBNZXNzYWdlLmdldCgpKSB8IGZsYWdzKSk7CisKKyNpZiBTT1VQX0NIRUNLX1ZFUlNJ
T04oMiwgNDMsIDEpCisgICAgc291cF9tZXNzYWdlX3NldF9wcmlvcml0eShzb3VwTWVzc2FnZS5n
ZXQoKSwgdG9Tb3VwTWVzc2FnZVByaW9yaXR5KHJlcXVlc3QucHJpb3JpdHkoKSkpOworI2VuZGlm
CisKKyAgICBtX3NvdXBSZXF1ZXN0ID0gV1RGTW92ZShzb3VwUmVxdWVzdCk7CisgICAgbV9zb3Vw
TWVzc2FnZSA9IFdURk1vdmUoc291cE1lc3NhZ2UpOworCisgICAgZ19zaWduYWxfY29ubmVjdCht
X3NvdXBNZXNzYWdlLmdldCgpLCAibm90aWZ5Ojp0bHMtZXJyb3JzIiwgR19DQUxMQkFDSyh0bHNF
cnJvcnNDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fc291
cE1lc3NhZ2UuZ2V0KCksICJnb3QtaGVhZGVycyIsIEdfQ0FMTEJBQ0soZ290SGVhZGVyc0NhbGxi
YWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdChtX3NvdXBNZXNzYWdlLmdldCgpLCAi
d3JvdGUtYm9keS1kYXRhIiwgR19DQUxMQkFDSyh3cm90ZUJvZHlEYXRhQ2FsbGJhY2spLCB0aGlz
KTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fc2Vzc2lvbi0+c291cFNlc3Npb24oKSwgImF1dGhl
bnRpY2F0ZSIsICBHX0NBTExCQUNLKGF1dGhlbnRpY2F0ZUNhbGxiYWNrKSwgdGhpcyk7CisjaWYg
RU5BQkxFKFdFQl9USU1JTkcpCisgICAgZ19zaWduYWxfY29ubmVjdChtX3NvdXBNZXNzYWdlLmdl
dCgpLCAibmV0d29yay1ldmVudCIsIEdfQ0FMTEJBQ0sobmV0d29ya0V2ZW50Q2FsbGJhY2spLCB0
aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fc291cE1lc3NhZ2UuZ2V0KCksICJyZXN0YXJ0
ZWQiLCBHX0NBTExCQUNLKHJlc3RhcnRlZENhbGxiYWNrKSwgdGhpcyk7CisjaWYgU09VUF9DSEVD
S19WRVJTSU9OKDIsIDQ5LCA5MSkKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fc291cE1lc3NhZ2Uu
Z2V0KCksICJzdGFydGluZyIsIEdfQ0FMTEJBQ0soc3RhcnRpbmdDYWxsYmFjayksIHRoaXMpOwor
I2Vsc2UKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fc2Vzc2lvbi0+c291cFNlc3Npb24oKSwgInJl
cXVlc3Qtc3RhcnRlZCIsIEdfQ0FMTEJBQ0socmVxdWVzdFN0YXJ0ZWRDYWxsYmFjayksIHRoaXMp
OworI2VuZGlmCisjZW5kaWYKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2s6OmNsZWFyUmVxdWVz
dCgpCit7CisgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9zdGF0ZSA9IFN0YXRlOjpDb21wbGV0ZWQ7CisKKyAgICBzdG9wVGltZW91
dCgpOworICAgIG1fcGVuZGluZ1Jlc3VsdCA9IG51bGxwdHI7CisgICAgbV9zb3VwUmVxdWVzdCA9
IG51bGxwdHI7CisgICAgbV9pbnB1dFN0cmVhbSA9IG51bGxwdHI7CisgICAgbV9tdWx0aXBhcnRJ
bnB1dFN0cmVhbSA9IG51bGxwdHI7CisgICAgbV9kb3dubG9hZE91dHB1dFN0cmVhbSA9IG51bGxw
dHI7CisgICAgZ19jYW5jZWxsYWJsZV9jYW5jZWwobV9jYW5jZWxsYWJsZS5nZXQoKSk7CisgICAg
bV9jYW5jZWxsYWJsZSA9IG51bGxwdHI7CisgICAgaWYgKG1fc291cE1lc3NhZ2UpIHsKKyAgICAg
ICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fc291cE1lc3NhZ2UuZ2V0
KCksIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIG51bGxwdHIsIG51bGxwdHIsIHRoaXMpOwor
ICAgICAgICBzb3VwX3Nlc3Npb25fY2FuY2VsX21lc3NhZ2UobV9zZXNzaW9uLT5zb3VwU2Vzc2lv
bigpLCBtX3NvdXBNZXNzYWdlLmdldCgpLCBTT1VQX1NUQVRVU19DQU5DRUxMRUQpOworICAgICAg
ICBtX3NvdXBNZXNzYWdlID0gbnVsbHB0cjsKKyAgICB9CisgICAgZ19zaWduYWxfaGFuZGxlcnNf
ZGlzY29ubmVjdF9tYXRjaGVkKG1fc2Vzc2lvbi0+c291cFNlc3Npb24oKSwgR19TSUdOQUxfTUFU
Q0hfREFUQSwgMCwgMCwgbnVsbHB0ciwgbnVsbHB0ciwgdGhpcyk7Cit9CisKK3ZvaWQgTmV0d29y
a0RhdGFUYXNrOjpyZXN1bWUoKQoreworICAgIEFTU0VSVChtX3N0YXRlICE9IFN0YXRlOjpSdW5u
aW5nKTsKKyAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IG1fc3RhdGUgPT0g
U3RhdGU6OkNvbXBsZXRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zdGF0ZSA9IFN0YXRl
OjpSdW5uaW5nOworCisgICAgaWYgKG1fc2NoZWR1bGVkRmFpbHVyZVR5cGUgIT0gTm9GYWlsdXJl
KSB7CisgICAgICAgIEFTU0VSVChtX2ZhaWx1cmVUaW1lci5pc0FjdGl2ZSgpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIHN0YXJ0VGltZW91dCgpOworCisgICAgUmVmUHRyPE5ldHdv
cmtEYXRhVGFzaz4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBpZiAobV9zb3VwUmVxdWVzdCAm
JiAhbV9jYW5jZWxsYWJsZSkgeworICAgICAgICBtX2NhbmNlbGxhYmxlID0gYWRvcHRHUmVmKGdf
Y2FuY2VsbGFibGVfbmV3KCkpOworICAgICAgICBzb3VwX3JlcXVlc3Rfc2VuZF9hc3luYyhtX3Nv
dXBSZXF1ZXN0LmdldCgpLCBtX2NhbmNlbGxhYmxlLmdldCgpLCByZWludGVycHJldF9jYXN0PEdB
c3luY1JlYWR5Q2FsbGJhY2s+KHNlbmRSZXF1ZXN0Q2FsbGJhY2spLCBwcm90ZWN0ZWRUaGlzLmxl
YWtSZWYoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9wZW5kaW5nUmVz
dWx0KSB7CisgICAgICAgIEdSZWZQdHI8R0FzeW5jUmVzdWx0PiBwZW5kaW5nUmVzdWx0ID0gV1RG
TW92ZShtX3BlbmRpbmdSZXN1bHQpOworICAgICAgICBpZiAobV9pbnB1dFN0cmVhbSkKKyAgICAg
ICAgICAgIHJlYWRDYWxsYmFjayhtX2lucHV0U3RyZWFtLmdldCgpLCBwZW5kaW5nUmVzdWx0Lmdl
dCgpLCBwcm90ZWN0ZWRUaGlzLmxlYWtSZWYoKSk7CisgICAgICAgIGVsc2UgaWYgKG1fbXVsdGlw
YXJ0SW5wdXRTdHJlYW0pCisgICAgICAgICAgICByZXF1ZXN0TmV4dFBhcnRDYWxsYmFjayhtX211
bHRpcGFydElucHV0U3RyZWFtLmdldCgpLCBwZW5kaW5nUmVzdWx0LmdldCgpLCBwcm90ZWN0ZWRU
aGlzLmxlYWtSZWYoKSk7CisgICAgICAgIGVsc2UgaWYgKG1fc291cFJlcXVlc3QpCisgICAgICAg
ICAgICBzZW5kUmVxdWVzdENhbGxiYWNrKG1fc291cFJlcXVlc3QuZ2V0KCksIHBlbmRpbmdSZXN1
bHQuZ2V0KCksIHByb3RlY3RlZFRoaXMubGVha1JlZigpKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIE5ldHdvcmtEYXRh
VGFzazo6c3VzcGVuZCgpCit7CisgICAgQVNTRVJUKG1fc3RhdGUgIT0gU3RhdGU6OlN1c3BlbmRl
ZCk7CisgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCBtX3N0YXRlID09IFN0
YXRlOjpDb21wbGV0ZWQpCisgICAgICAgIHJldHVybjsKKyAgICBtX3N0YXRlID0gU3RhdGU6OlN1
c3BlbmRlZDsKKworICAgIHN0b3BUaW1lb3V0KCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNr
OjpjYW5jZWwoKQoreworICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgbV9z
dGF0ZSA9PSBTdGF0ZTo6Q29tcGxldGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N0YXRl
ID0gU3RhdGU6OkNhbmNlbGluZzsKKworICAgIGlmIChtX3NvdXBNZXNzYWdlKQorICAgICAgICBz
b3VwX3Nlc3Npb25fY2FuY2VsX21lc3NhZ2UobV9zZXNzaW9uLT5zb3VwU2Vzc2lvbigpLCBtX3Nv
dXBNZXNzYWdlLmdldCgpLCBTT1VQX1NUQVRVU19DQU5DRUxMRUQpOworCisgICAgZ19jYW5jZWxs
YWJsZV9jYW5jZWwobV9jYW5jZWxsYWJsZS5nZXQoKSk7CisKKyAgICBpZiAoaXNEb3dubG9hZCgp
KQorICAgICAgICBjbGVhbkRvd25sb2FkRmlsZXMoKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRh
c2s6OmludmFsaWRhdGVBbmRDYW5jZWwoKQoreworICAgIGNhbmNlbCgpOworICAgIGNsZWFyUmVx
dWVzdCgpOworfQorCitOZXR3b3JrRGF0YVRhc2s6OlN0YXRlIE5ldHdvcmtEYXRhVGFzazo6c3Rh
dGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3N0YXRlOworfQorCit2b2lkIE5ldHdvcmtEYXRh
VGFzazo6dGltZW91dEZpcmVkKCkKK3sKKyAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2FuY2Vs
aW5nIHx8IG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZCB8fCAhbV9jbGllbnQpIHsKKyAgICAg
ICAgY2xlYXJSZXF1ZXN0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8
TmV0d29ya0RhdGFUYXNrPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIGludmFsaWRhdGVBbmRD
YW5jZWwoKTsKKyAgICBtX2NsaWVudC0+ZGlkQ29tcGxldGVXaXRoRXJyb3IoUmVzb3VyY2VFcnJv
cjo6dGltZW91dEVycm9yKG1fZmlyc3RSZXF1ZXN0LnVybCgpKSk7Cit9CisKK3ZvaWQgTmV0d29y
a0RhdGFUYXNrOjpzdGFydFRpbWVvdXQoKQoreworICAgIGlmIChtX2ZpcnN0UmVxdWVzdC50aW1l
b3V0SW50ZXJ2YWwoKSA+IDApCisgICAgICAgIG1fdGltZW91dFNvdXJjZS5zdGFydE9uZVNob3Qo
bV9maXJzdFJlcXVlc3QudGltZW91dEludGVydmFsKCkpOworfQorCit2b2lkIE5ldHdvcmtEYXRh
VGFzazo6c3RvcFRpbWVvdXQoKQoreworICAgIG1fdGltZW91dFNvdXJjZS5zdG9wKCk7Cit9CisK
K3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpzZW5kUmVxdWVzdENhbGxiYWNrKFNvdXBSZXF1ZXN0KiBz
b3VwUmVxdWVzdCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIE5ldHdvcmtEYXRhVGFzayogdGFzaykK
K3sKKyAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrPiBwcm90ZWN0ZWRUaGlzID0gYWRvcHRSZWYo
dGFzayk7CisgICAgaWYgKHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCB0YXNr
LT5zdGF0ZSgpID09IFN0YXRlOjpDb21wbGV0ZWQgfHwgIXRhc2stPm1fY2xpZW50KSB7CisgICAg
ICAgIHRhc2stPmNsZWFyUmVxdWVzdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFT
U0VSVChzb3VwUmVxdWVzdCA9PSB0YXNrLT5tX3NvdXBSZXF1ZXN0LmdldCgpKTsKKworICAgIGlm
ICh0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpTdXNwZW5kZWQpIHsKKyAgICAgICAgQVNTRVJUKCF0
YXNrLT5tX3BlbmRpbmdSZXN1bHQpOworICAgICAgICB0YXNrLT5tX3BlbmRpbmdSZXN1bHQgPSBy
ZXN1bHQ7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBHVW5pcXVlT3V0UHRyPEdFcnJv
cj4gZXJyb3I7CisgICAgR1JlZlB0cjxHSW5wdXRTdHJlYW0+IGlucHV0U3RyZWFtID0gYWRvcHRH
UmVmKHNvdXBfcmVxdWVzdF9zZW5kX2ZpbmlzaChzb3VwUmVxdWVzdCwgcmVzdWx0LCAmZXJyb3Iu
b3V0UHRyKCkpKTsKKyAgICBpZiAoZXJyb3IpCisgICAgICAgIHRhc2stPmRpZEZhaWwoUmVzb3Vy
Y2VFcnJvcjo6aHR0cEVycm9yKHRhc2stPm1fc291cE1lc3NhZ2UuZ2V0KCksIGVycm9yLmdldCgp
LCBzb3VwUmVxdWVzdCkpOworICAgIGVsc2UKKyAgICAgICAgdGFzay0+ZGlkU2VuZFJlcXVlc3Qo
V1RGTW92ZShpbnB1dFN0cmVhbSkpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlkU2Vu
ZFJlcXVlc3QoR1JlZlB0cjxHSW5wdXRTdHJlYW0+JiYgaW5wdXRTdHJlYW0pCit7CisgICAgaWYg
KG1fc291cE1lc3NhZ2UpIHsKKyAgICAgICAgaWYgKG1fc2hvdWxkQ29udGVudFNuaWZmID09IFNu
aWZmQ29udGVudCAmJiBtX3NvdXBNZXNzYWdlLT5zdGF0dXNfY29kZSAhPSBTT1VQX1NUQVRVU19O
T1RfTU9ESUZJRUQpCisgICAgICAgICAgICBtX3Jlc3BvbnNlLnNldFNuaWZmZWRDb250ZW50VHlw
ZShzb3VwX3JlcXVlc3RfZ2V0X2NvbnRlbnRfdHlwZShtX3NvdXBSZXF1ZXN0LmdldCgpKSk7Cisg
ICAgICAgIG1fcmVzcG9uc2UudXBkYXRlRnJvbVNvdXBNZXNzYWdlKG1fc291cE1lc3NhZ2UuZ2V0
KCkpOworCisgICAgICAgIGlmIChzaG91bGRTdGFydEhUVFBSZWRpcmVjdGlvbigpKSB7CisgICAg
ICAgICAgICBtX2lucHV0U3RyZWFtID0gV1RGTW92ZShpbnB1dFN0cmVhbSk7CisgICAgICAgICAg
ICBza2lwSW5wdXRTdHJlYW1Gb3JSZWRpcmVjdGlvbigpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fcmVzcG9uc2UuaXNNdWx0aXBhcnQoKSkKKyAgICAg
ICAgICAgIG1fbXVsdGlwYXJ0SW5wdXRTdHJlYW0gPSBhZG9wdEdSZWYoc291cF9tdWx0aXBhcnRf
aW5wdXRfc3RyZWFtX25ldyhtX3NvdXBNZXNzYWdlLmdldCgpLCBpbnB1dFN0cmVhbS5nZXQoKSkp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2lucHV0U3RyZWFtID0gV1RGTW92ZShpbnB1
dFN0cmVhbSk7CisKKyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICAgICAgbV9yZXNwb25zZS5u
ZXR3b3JrTG9hZFRpbWluZygpLnJlc3BvbnNlU3RhcnQgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2lu
Z1RpbWVNUygpIC0gbV9zdGFydFRpbWU7CisjZW5kaWYKKyAgICB9IGVsc2UgeworICAgICAgICBt
X3Jlc3BvbnNlLnNldFVSTChtX2ZpcnN0UmVxdWVzdC51cmwoKSk7CisgICAgICAgIGNvbnN0IGdj
aGFyKiBjb250ZW50VHlwZSA9IHNvdXBfcmVxdWVzdF9nZXRfY29udGVudF90eXBlKG1fc291cFJl
cXVlc3QuZ2V0KCkpOworICAgICAgICBtX3Jlc3BvbnNlLnNldE1pbWVUeXBlKGV4dHJhY3RNSU1F
VHlwZUZyb21NZWRpYVR5cGUoY29udGVudFR5cGUpKTsKKyAgICAgICAgbV9yZXNwb25zZS5zZXRU
ZXh0RW5jb2RpbmdOYW1lKGV4dHJhY3RDaGFyc2V0RnJvbU1lZGlhVHlwZShjb250ZW50VHlwZSkp
OworICAgICAgICBtX3Jlc3BvbnNlLnNldEV4cGVjdGVkQ29udGVudExlbmd0aChzb3VwX3JlcXVl
c3RfZ2V0X2NvbnRlbnRfbGVuZ3RoKG1fc291cFJlcXVlc3QuZ2V0KCkpKTsKKworICAgICAgICBt
X2lucHV0U3RyZWFtID0gV1RGTW92ZShpbnB1dFN0cmVhbSk7CisgICAgfQorCisgICAgZGlkUmVj
ZWl2ZVJlc3BvbnNlKCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRSZWNlaXZlUmVz
cG9uc2UoKQoreworICAgIEFTU0VSVCghbV9yZXNwb25zZS5pc051bGwoKSk7CisKKyAgICBhdXRv
IHJlc3BvbnNlID0gUmVzb3VyY2VSZXNwb25zZShtX3Jlc3BvbnNlKTsKKyAgICBtX2NsaWVudC0+
ZGlkUmVjZWl2ZVJlc3BvbnNlTmV0d29ya1Nlc3Npb24oV1RGTW92ZShyZXNwb25zZSksIFt0aGlz
LCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldKFBvbGljeUFjdGlvbiBwb2xpY3lBY3Rp
b24pIHsKKyAgICAgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCBtX3N0YXRl
ID09IFN0YXRlOjpDb21wbGV0ZWQpIHsKKyAgICAgICAgICAgIGNsZWFyUmVxdWVzdCgpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChwb2xpY3lBY3Rp
b24pIHsKKyAgICAgICAgY2FzZSBQb2xpY3lBY3Rpb246OlBvbGljeVVzZToKKyAgICAgICAgICAg
IGlmIChtX2lucHV0U3RyZWFtKQorICAgICAgICAgICAgICAgIHJlYWQoKTsKKyAgICAgICAgICAg
IGVsc2UgaWYgKG1fbXVsdGlwYXJ0SW5wdXRTdHJlYW0pCisgICAgICAgICAgICAgICAgcmVxdWVz
dE5leHRQYXJ0KCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBvbGljeUFj
dGlvbjo6UG9saWN5SWdub3JlOgorICAgICAgICAgICAgY2xlYXJSZXF1ZXN0KCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQb2xpY3lBY3Rpb246OlBvbGljeURvd25sb2FkOgor
ICAgICAgICAgICAgZG93bmxvYWQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgfSk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjp0bHNFcnJvcnNDaGFuZ2VkQ2FsbGJh
Y2soU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlLCBHUGFyYW1TcGVjKiwgTmV0d29ya0RhdGFUYXNr
KiB0YXNrKQoreworICAgIGlmICh0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDYW5jZWxpbmcgfHwg
dGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICF0YXNrLT5tX2NsaWVudCkgewor
ICAgICAgICB0YXNrLT5jbGVhclJlcXVlc3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIEFTU0VSVChzb3VwTWVzc2FnZSA9PSB0YXNrLT5tX3NvdXBNZXNzYWdlLmdldCgpKTsKKyAg
ICB0YXNrLT50bHNFcnJvcnNDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjp0
bHNFcnJvcnNDaGFuZ2VkKCkKK3sKKyAgICBBU1NFUlQobV9zb3VwUmVxdWVzdCk7CisgICAgU291
cE5ldHdvcmtTZXNzaW9uOjpjaGVja1RMU0Vycm9ycyhtX3NvdXBSZXF1ZXN0LmdldCgpLCBtX3Nv
dXBNZXNzYWdlLmdldCgpLCBbdGhpc10gKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKSB7Cisg
ICAgICAgIGlmIChlcnJvci5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgICAgICBp
bnZhbGlkYXRlQW5kQ2FuY2VsKCk7CisgICAgICAgIG1fY2xpZW50LT5kaWRDb21wbGV0ZVdpdGhF
cnJvcihlcnJvcik7CisgICAgfSk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjphcHBseUF1
dGhlbnRpY2F0aW9uVG9SZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICAv
LyBXZSBhbHdheXMgcHV0IHRoZSBjcmVkZW50aWFscyBpbnRvIHRoZSBVUkwuIEluIHRoZSBDb2Nh
IHBvcnQgSFRUUCBmYW1pbHkgY3JlZGVudGlhbHMgYXJlIGFwcGxpZWQgaW4KKyAgICAvLyB0aGUg
ZGlkUmVjZWl2ZUNoYWxsZW5nZSBjYWxsYmFjaywgYnV0IGxpYnNvdXAgcmVxdWlyZXMgdXMgdG8g
dXNlIHRoaXMgbWV0aG9kIHRvIG92ZXJyaWRlCisgICAgLy8gYW55IHByZXZpb3VzbHkgcmVtZW1i
ZXJlZCBjcmVkZW50aWFscy4gSXQgaGFzIGl0cyBvd24gcGVyLXNlc3Npb24gY3JlZGVudGlhbCBz
dG9yYWdlLgorICAgIGF1dG8gdXJsID0gcmVxdWVzdC51cmwoKTsKKyAgICBpZiAoIW1faW5pdGlh
bENyZWRlbnRpYWwuaXNFbXB0eSgpKSB7CisgICAgICAgIHVybC5zZXRVc2VyKG1faW5pdGlhbENy
ZWRlbnRpYWwudXNlcigpKTsKKyAgICAgICAgdXJsLnNldFBhc3MobV9pbml0aWFsQ3JlZGVudGlh
bC5wYXNzd29yZCgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICB1cmwuc2V0VXNlcihtX3VzZXIp
OworICAgICAgICB1cmwuc2V0UGFzcyhtX3Bhc3N3b3JkKTsKKyAgICB9CisKKyAgICBtX3VzZXIg
PSBTdHJpbmcoKTsKKyAgICBtX3Bhc3N3b3JkID0gU3RyaW5nKCk7CisKKyAgICByZXF1ZXN0LnNl
dFVSTCh1cmwpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6YXV0aGVudGljYXRlQ2FsbGJh
Y2soU291cFNlc3Npb24qIHNlc3Npb24sIFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSwgU291cEF1
dGgqIHNvdXBBdXRoLCBnYm9vbGVhbiByZXRyeWluZywgTmV0d29ya0RhdGFUYXNrKiB0YXNrKQor
eworICAgIEFTU0VSVChzZXNzaW9uID09IHRhc2stPm1fc2Vzc2lvbi0+c291cFNlc3Npb24oKSk7
CisgICAgaWYgKHNvdXBNZXNzYWdlICE9IHRhc2stPm1fc291cE1lc3NhZ2UuZ2V0KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmICh0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDYW5jZWxpbmcg
fHwgdGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICF0YXNrLT5tX2NsaWVudCkg
eworICAgICAgICB0YXNrLT5jbGVhclJlcXVlc3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIHRhc2stPmF1dGhlbnRpY2F0ZShBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShzb3VwTWVz
c2FnZSwgc291cEF1dGgsIHJldHJ5aW5nKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0F1
dGhlbnRpY2F0aW9uRmFpbHVyZVN0YXR1c0NvZGUoaW50IGh0dHBTdGF0dXNDb2RlKQoreworICAg
IHJldHVybiBodHRwU3RhdHVzQ29kZSA9PSBTT1VQX1NUQVRVU19QUk9YWV9BVVRIRU5USUNBVElP
Tl9SRVFVSVJFRCB8fCBodHRwU3RhdHVzQ29kZSA9PSBTT1VQX1NUQVRVU19VTkFVVEhPUklaRUQ7
Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjphdXRoZW50aWNhdGUoQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UmJiBjaGFsbGVuZ2UpCit7CisgICAgQVNTRVJUKG1fc291cE1lc3NhZ2UpOworICAg
IGlmIChtX3N0b3JlZENyZWRlbnRpYWxzID09IEFsbG93U3RvcmVkQ3JlZGVudGlhbHMpIHsKKyAg
ICAgICAgaWYgKCFtX2luaXRpYWxDcmVkZW50aWFsLmlzRW1wdHkoKSB8fCBjaGFsbGVuZ2UucHJl
dmlvdXNGYWlsdXJlQ291bnQoKSkgeworICAgICAgICAgICAgLy8gVGhlIHN0b3JlZCBjcmVkZW50
aWFsIHdhc24ndCBhY2NlcHRlZCwgc3RvcCB1c2luZyBpdC4gVGhlcmUgaXMgYSByYWNlIGNvbmRp
dGlvbgorICAgICAgICAgICAgLy8gaGVyZSwgc2luY2UgYSBkaWZmZXJlbnQgY3JlZGVudGlhbCBt
aWdodCBoYXZlIGFscmVhZHkgYmVlbiBzdG9yZWQgYnkgYW5vdGhlcgorICAgICAgICAgICAgLy8g
TmV0d29ya0RhdGFUYXNrLCBidXQgdGhlIG9ic2VydmFibGUgZWZmZWN0IHNob3VsZCBiZSB2ZXJ5
IG1pbm9yLCBpZiBhbnkuCisgICAgICAgICAgICBtX3Nlc3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vz
c2lvbigpLmNyZWRlbnRpYWxTdG9yYWdlKCkucmVtb3ZlKGNoYWxsZW5nZS5wcm90ZWN0aW9uU3Bh
Y2UoKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWNoYWxsZW5nZS5wcmV2aW91c0ZhaWx1
cmVDb3VudCgpKSB7CisgICAgICAgICAgICBhdXRvIGNyZWRlbnRpYWwgPSBtX3Nlc3Npb24tPm5l
dHdvcmtTdG9yYWdlU2Vzc2lvbigpLmNyZWRlbnRpYWxTdG9yYWdlKCkuZ2V0KGNoYWxsZW5nZS5w
cm90ZWN0aW9uU3BhY2UoKSk7CisgICAgICAgICAgICBpZiAoIWNyZWRlbnRpYWwuaXNFbXB0eSgp
ICYmIGNyZWRlbnRpYWwgIT0gbV9pbml0aWFsQ3JlZGVudGlhbCkgeworICAgICAgICAgICAgICAg
IEFTU0VSVChjcmVkZW50aWFsLnBlcnNpc3RlbmNlKCkgPT0gQ3JlZGVudGlhbFBlcnNpc3RlbmNl
Tm9uZSk7CisKKyAgICAgICAgICAgICAgICBpZiAoaXNBdXRoZW50aWNhdGlvbkZhaWx1cmVTdGF0
dXNDb2RlKGNoYWxsZW5nZS5mYWlsdXJlUmVzcG9uc2UoKS5odHRwU3RhdHVzQ29kZSgpKSkgewor
ICAgICAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgY3JlZGVudGlhbCBiYWNrLCBwb3NzaWJs
eSBhZGRpbmcgaXQgYXMgYSBkZWZhdWx0IGZvciB0aGlzIGRpcmVjdG9yeS4KKyAgICAgICAgICAg
ICAgICAgICAgbV9zZXNzaW9uLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKS5jcmVkZW50aWFsU3Rv
cmFnZSgpLnNldChjcmVkZW50aWFsLCBjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCksIGNoYWxs
ZW5nZS5mYWlsdXJlUmVzcG9uc2UoKS51cmwoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIHNvdXBfYXV0aF9hdXRoZW50aWNhdGUoY2hhbGxlbmdlLnNvdXBBdXRoKCksIGNy
ZWRlbnRpYWwudXNlcigpLnV0ZjgoKS5kYXRhKCksIGNyZWRlbnRpYWwucGFzc3dvcmQoKS51dGY4
KCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBzb3VwX3Nlc3Npb25fcGF1c2VfbWVzc2FnZShtX3Nlc3Npb24t
PnNvdXBTZXNzaW9uKCksIG1fc291cE1lc3NhZ2UuZ2V0KCkpOworCisgICAgLy8gV2UgY291bGQg
YWxzbyBkbyB0aGlzIGJlZm9yZSB3ZSBldmVuIHN0YXJ0IHRoZSByZXF1ZXN0LCBidXQgdGhhdCB3
b3VsZCBiZSBhdCB0aGUgZXhwZW5zZQorICAgIC8vIG9mIGFsbCByZXF1ZXN0IGxhdGVuY3ksIHZl
cnN1cyBhIG9uZS10aW1lIGxhdGVuY3kgZm9yIHRoZSBzbWFsbCBzdWJzZXQgb2YgcmVxdWVzdHMg
dGhhdAorICAgIC8vIHVzZSBIVFRQIGF1dGhlbnRpY2F0aW9uLiBJbiB0aGUgZW5kLCB0aGlzIGRv
ZXNuJ3QgbWF0dGVyIG11Y2gsIGJlY2F1c2UgcGVyc2lzdGVudCBjcmVkZW50aWFscworICAgIC8v
IHdpbGwgYmVjb21lIHNlc3Npb24gY3JlZGVudGlhbHMgYWZ0ZXIgdGhlIGZpcnN0IHVzZS4KKyAg
ICBpZiAobV9zdG9yZWRDcmVkZW50aWFscyA9PSBBbGxvd1N0b3JlZENyZWRlbnRpYWxzKSB7Cisg
ICAgICAgIGF1dG8gcHJvdGVjdGlvblNwYWNlID0gY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZSgp
OworICAgICAgICBtX3Nlc3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpLmdldENyZWRlbnRp
YWxGcm9tUGVyc2lzdGVudFN0b3JhZ2UocHJvdGVjdGlvblNwYWNlLAorICAgICAgICAgICAgW3Ro
aXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgYXV0aENoYWxsZW5nZSA9IFdURk1v
dmUoY2hhbGxlbmdlKV0gKENyZWRlbnRpYWwmJiBjcmVkZW50aWFsKSBtdXRhYmxlIHsKKyAgICAg
ICAgICAgICAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IG1fc3RhdGUgPT0g
U3RhdGU6OkNvbXBsZXRlZCB8fCAhbV9jbGllbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgY2xl
YXJSZXF1ZXN0KCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICBhdXRoQ2hhbGxlbmdlLnNldFByb3Bvc2VkQ3JlZGVudGlh
bChXVEZNb3ZlKGNyZWRlbnRpYWwpKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZUF1dGhlbnRp
Y2F0ZShXVEZNb3ZlKGF1dGhDaGFsbGVuZ2UpKTsKKyAgICAgICAgfSk7CisgICAgfSBlbHNlCisg
ICAgICAgIGNvbnRpbnVlQXV0aGVudGljYXRlKFdURk1vdmUoY2hhbGxlbmdlKSk7Cit9CisKK3Zv
aWQgTmV0d29ya0RhdGFUYXNrOjpjb250aW51ZUF1dGhlbnRpY2F0ZShBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSYmIGNoYWxsZW5nZSkKK3sKKyAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZUNoYWxsZW5n
ZShjaGFsbGVuZ2UsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNoYWxs
ZW5nZV0oQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbiBkaXNwb3NpdGlvbiwgY29u
c3QgQ3JlZGVudGlhbCYgY3JlZGVudGlhbCkgeworICAgICAgICBpZiAobV9zdGF0ZSA9PSBTdGF0
ZTo6Q2FuY2VsaW5nIHx8IG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZCkgeworICAgICAgICAg
ICAgY2xlYXJSZXF1ZXN0KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoZGlzcG9zaXRpb24gPT0gQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlv
bjo6Q2FuY2VsKSB7CisgICAgICAgICAgICBjYW5jZWwoKTsKKyAgICAgICAgICAgIGRpZEZhaWwo
Y2FuY2VsbGVkRXJyb3IobV9zb3VwUmVxdWVzdC5nZXQoKSkpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGRpc3Bvc2l0aW9uID09IEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlRGlzcG9zaXRpb246OlVzZUNyZWRlbnRpYWwgJiYgIWNyZWRlbnRpYWwuaXNFbXB0
eSgpKSB7CisgICAgICAgICAgICBpZiAobV9zdG9yZWRDcmVkZW50aWFscyA9PSBBbGxvd1N0b3Jl
ZENyZWRlbnRpYWxzKSB7CisgICAgICAgICAgICAgICAgLy8gRXZlbnR1YWxseSB3ZSB3aWxsIG1h
bmFnZSBwZXItc2Vzc2lvbiBjcmVkZW50aWFscyBvbmx5IGludGVybmFsbHkgb3IgdXNlIHNvbWUg
bmV3bHktZXhwb3NlZCBBUEkgZnJvbSBsaWJzb3VwLAorICAgICAgICAgICAgICAgIC8vIGJlY2F1
c2Ugb25jZSB3ZSBhdXRoZW50aWNhdGUgdmlhIGxpYnNvdXAsIHRoZXJlIGlzIG5vIHdheSB0byBp
Z25vcmUgaXQgZm9yIGEgcGFydGljdWxhciByZXF1ZXN0LiBSaWdodCBub3csCisgICAgICAgICAg
ICAgICAgLy8gd2UgcGxhY2UgdGhlIGNyZWRlbnRpYWxzIGluIHRoZSBzdG9yZSBldmVuIHRob3Vn
aCBsaWJzb3VwIHdpbGwgbmV2ZXIgZmlyZSB0aGUgYXV0aGVudGljYXRlIHNpZ25hbCBhZ2FpbiBm
b3IKKyAgICAgICAgICAgICAgICAvLyB0aGlzIHByb3RlY3Rpb24gc3BhY2UuCisgICAgICAgICAg
ICAgICAgaWYgKGNyZWRlbnRpYWwucGVyc2lzdGVuY2UoKSA9PSBDcmVkZW50aWFsUGVyc2lzdGVu
Y2VGb3JTZXNzaW9uIHx8IGNyZWRlbnRpYWwucGVyc2lzdGVuY2UoKSA9PSBDcmVkZW50aWFsUGVy
c2lzdGVuY2VQZXJtYW5lbnQpCisgICAgICAgICAgICAgICAgICAgIG1fc2Vzc2lvbi0+bmV0d29y
a1N0b3JhZ2VTZXNzaW9uKCkuY3JlZGVudGlhbFN0b3JhZ2UoKS5zZXQoY3JlZGVudGlhbCwgY2hh
bGxlbmdlLnByb3RlY3Rpb25TcGFjZSgpLCBjaGFsbGVuZ2UuZmFpbHVyZVJlc3BvbnNlKCkudXJs
KCkpOworCisgICAgICAgICAgICAgICAgaWYgKGNyZWRlbnRpYWwucGVyc2lzdGVuY2UoKSA9PSBD
cmVkZW50aWFsUGVyc2lzdGVuY2VQZXJtYW5lbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9w
cm90ZWN0aW9uU3BhY2VGb3JQZXJzaXN0ZW50U3RvcmFnZSA9IGNoYWxsZW5nZS5wcm90ZWN0aW9u
U3BhY2UoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9jcmVkZW50aWFsRm9yUGVyc2lzdGVudFN0
b3JhZ2UgPSBjcmVkZW50aWFsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgc291cF9hdXRoX2F1dGhlbnRpY2F0ZShjaGFsbGVuZ2Uuc291cEF1dGgoKSwg
Y3JlZGVudGlhbC51c2VyKCkudXRmOCgpLmRhdGEoKSwgY3JlZGVudGlhbC5wYXNzd29yZCgpLnV0
ZjgoKS5kYXRhKCkpOworICAgICAgICB9CisKKyAgICAgICAgc291cF9zZXNzaW9uX3VucGF1c2Vf
bWVzc2FnZShtX3Nlc3Npb24tPnNvdXBTZXNzaW9uKCksIG1fc291cE1lc3NhZ2UuZ2V0KCkpOwor
ICAgIH0pOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6c2tpcElucHV0U3RyZWFtRm9yUmVk
aXJlY3Rpb25DYWxsYmFjayhHSW5wdXRTdHJlYW0qIGlucHV0U3RyZWFtLCBHQXN5bmNSZXN1bHQq
IHJlc3VsdCwgTmV0d29ya0RhdGFUYXNrKiB0YXNrKQoreworICAgIFJlZlB0cjxOZXR3b3JrRGF0
YVRhc2s+IHByb3RlY3RlZFRoaXMgPSBhZG9wdFJlZih0YXNrKTsKKyAgICBpZiAodGFzay0+c3Rh
dGUoKSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNvbXBs
ZXRlZCB8fCAhdGFzay0+bV9jbGllbnQpIHsKKyAgICAgICAgdGFzay0+Y2xlYXJSZXF1ZXN0KCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQVNTRVJUKGlucHV0U3RyZWFtID09IHRhc2st
Pm1faW5wdXRTdHJlYW0uZ2V0KCkpOworCisgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9y
OworICAgIGdzc2l6ZSBieXRlc1NraXBwZWQgPSBnX2lucHV0X3N0cmVhbV9za2lwX2ZpbmlzaChp
bnB1dFN0cmVhbSwgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGlmIChlcnJvcikKKyAg
ICAgICAgdGFzay0+ZGlkRmFpbChSZXNvdXJjZUVycm9yOjpnZW5lcmljR0Vycm9yKGVycm9yLmdl
dCgpLCB0YXNrLT5tX3NvdXBSZXF1ZXN0LmdldCgpKSk7CisgICAgZWxzZSBpZiAoYnl0ZXNTa2lw
cGVkID4gMCkKKyAgICAgICAgdGFzay0+c2tpcElucHV0U3RyZWFtRm9yUmVkaXJlY3Rpb24oKTsK
KyAgICBlbHNlCisgICAgICAgIHRhc2stPmRpZEZpbmlzaFNraXBJbnB1dFN0cmVhbUZvclJlZGly
ZWN0aW9uKCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpza2lwSW5wdXRTdHJlYW1Gb3JS
ZWRpcmVjdGlvbigpCit7CisgICAgQVNTRVJUKG1faW5wdXRTdHJlYW0pOworICAgIFJlZlB0cjxO
ZXR3b3JrRGF0YVRhc2s+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgZ19pbnB1dF9zdHJlYW1f
c2tpcF9hc3luYyhtX2lucHV0U3RyZWFtLmdldCgpLCBnRGVmYXVsdFJlYWRCdWZmZXJTaXplLCBH
X1BSSU9SSVRZX0RFRkFVTFQsIG1fY2FuY2VsbGFibGUuZ2V0KCksCisgICAgICAgIHJlaW50ZXJw
cmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4oc2tpcElucHV0U3RyZWFtRm9yUmVkaXJlY3Rp
b25DYWxsYmFjayksIHByb3RlY3RlZFRoaXMubGVha1JlZigpKTsKK30KKwordm9pZCBOZXR3b3Jr
RGF0YVRhc2s6OmRpZEZpbmlzaFNraXBJbnB1dFN0cmVhbUZvclJlZGlyZWN0aW9uKCkKK3sKKyAg
ICBnX2lucHV0X3N0cmVhbV9jbG9zZShtX2lucHV0U3RyZWFtLmdldCgpLCBudWxscHRyLCBudWxs
cHRyKTsKKyAgICBjb250aW51ZUhUVFBSZWRpcmVjdGlvbigpOworfQorCitzdGF0aWMgYm9vbCBz
aG91bGRSZWRpcmVjdEFzR0VUKFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBib29sIGNyb3NzT3JpZ2lu
KQoreworICAgIGlmIChtZXNzYWdlLT5tZXRob2QgPT0gU09VUF9NRVRIT0RfR0VUIHx8IG1lc3Nh
Z2UtPm1ldGhvZCA9PSBTT1VQX01FVEhPRF9IRUFEKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBzd2l0Y2ggKG1lc3NhZ2UtPnN0YXR1c19jb2RlKSB7CisgICAgY2FzZSBTT1VQX1NUQVRV
U19TRUVfT1RIRVI6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgU09VUF9TVEFUVVNf
Rk9VTkQ6CisgICAgY2FzZSBTT1VQX1NUQVRVU19NT1ZFRF9QRVJNQU5FTlRMWToKKyAgICAgICAg
aWYgKG1lc3NhZ2UtPm1ldGhvZCA9PSBTT1VQX01FVEhPRF9QT1NUKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChjcm9zc09yaWdpbiAm
JiBtZXNzYWdlLT5tZXRob2QgPT0gU09VUF9NRVRIT0RfREVMRVRFKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBOZXR3b3JrRGF0YVRhc2s6OnNo
b3VsZFN0YXJ0SFRUUFJlZGlyZWN0aW9uKCkKK3sKKyAgICBBU1NFUlQobV9zb3VwTWVzc2FnZSk7
CisgICAgQVNTRVJUKCFtX3Jlc3BvbnNlLmlzTnVsbCgpKTsKKworICAgIGF1dG8gc3RhdHVzID0g
bV9yZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpOworICAgIGlmICghU09VUF9TVEFUVVNfSVNfUkVE
SVJFQ1RJT04oc3RhdHVzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gU29tZSAz
eHggc3RhdHVzIGNvZGVzIGFyZW4ndCBhY3R1YWxseSByZWRpcmVjdHMuCisgICAgaWYgKHN0YXR1
cyA9PSAzMDAgfHwgc3RhdHVzID09IDMwNCB8fCBzdGF0dXMgPT0gMzA1IHx8IHN0YXR1cyA9PSAz
MDYpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX3Jlc3BvbnNlLmh0dHBIZWFk
ZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6TG9jYXRpb24pLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNr
Ojpjb250aW51ZUhUVFBSZWRpcmVjdGlvbigpCit7CisgICAgQVNTRVJUKG1fc291cE1lc3NhZ2Up
OworICAgIEFTU0VSVCghbV9yZXNwb25zZS5pc051bGwoKSk7CisKKyAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgbWF4UmVkaXJlY3RzID0gMjA7CisgICAgaWYgKG1fcmVkaXJlY3RDb3VudCsrID4g
bWF4UmVkaXJlY3RzKSB7CisgICAgICAgIGRpZEZhaWwoUmVzb3VyY2VFcnJvcjo6dHJhbnNwb3J0
RXJyb3IobV9zb3VwUmVxdWVzdC5nZXQoKSwgU09VUF9TVEFUVVNfVE9PX01BTllfUkVESVJFQ1RT
LCAiVG9vIG1hbnkgcmVkaXJlY3RzIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QgPSBtX2ZpcnN0UmVxdWVzdDsKKyAgICByZXF1ZXN0LnNl
dFVSTChVUkwobV9yZXNwb25zZS51cmwoKSwgbV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGQoSFRU
UEhlYWRlck5hbWU6OkxvY2F0aW9uKSkpOworICAgIHJlcXVlc3Quc2V0Rmlyc3RQYXJ0eUZvckNv
b2tpZXMocmVxdWVzdC51cmwoKSk7CisKKyAgICAvLyBTaG91bGQgbm90IHNldCBSZWZlcmVyIGFm
dGVyIGEgcmVkaXJlY3QgZnJvbSBhIHNlY3VyZSByZXNvdXJjZSB0byBub24tc2VjdXJlIG9uZS4K
KyAgICBpZiAobV9zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0ICYmICFy
ZXF1ZXN0LnVybCgpLnByb3RvY29sSXMoImh0dHBzIikgJiYgcHJvdG9jb2xJcyhyZXF1ZXN0Lmh0
dHBSZWZlcnJlcigpLCAiaHR0cHMiKSkKKyAgICAgICAgcmVxdWVzdC5jbGVhckhUVFBSZWZlcnJl
cigpOworCisgICAgYm9vbCBpc0Nyb3NzT3JpZ2luID0gIXByb3RvY29sSG9zdEFuZFBvcnRBcmVF
cXVhbChtX2ZpcnN0UmVxdWVzdC51cmwoKSwgcmVxdWVzdC51cmwoKSk7CisgICAgaWYgKCFlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShyZXF1ZXN0Lmh0dHBNZXRob2QoKSwgIkdFVCIpKSB7
CisgICAgICAgIC8vIENoYW5nZSBuZXdSZXF1ZXN0IG1ldGhvZCB0byBHRVQgaWYgY2hhbmdlIHdh
cyBtYWRlIGR1cmluZyBhIHByZXZpb3VzIHJlZGlyZWN0aW9uIG9yIGlmIGN1cnJlbnQgcmVkaXJl
Y3Rpb24gc2F5cyBzby4KKyAgICAgICAgaWYgKG1fc291cE1lc3NhZ2UtPm1ldGhvZCA9PSBTT1VQ
X01FVEhPRF9HRVQgfHwgIXJlcXVlc3QudXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpIHx8
IHNob3VsZFJlZGlyZWN0QXNHRVQobV9zb3VwTWVzc2FnZS5nZXQoKSwgaXNDcm9zc09yaWdpbikp
IHsKKyAgICAgICAgICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhvZCgiR0VUIik7CisgICAgICAgICAg
ICByZXF1ZXN0LnNldEhUVFBCb2R5KG51bGxwdHIpOworICAgICAgICAgICAgcmVxdWVzdC5jbGVh
ckhUVFBDb250ZW50VHlwZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgY29uc3QgYXV0byYg
dXJsID0gcmVxdWVzdC51cmwoKTsKKyAgICBtX3VzZXIgPSB1cmwudXNlcigpOworICAgIG1fcGFz
c3dvcmQgPSB1cmwucGFzcygpOworICAgIG1fbGFzdEhUVFBNZXRob2QgPSByZXF1ZXN0Lmh0dHBN
ZXRob2QoKTsKKyAgICByZXF1ZXN0LnJlbW92ZUNyZWRlbnRpYWxzKCk7CisKKyAgICBpZiAoaXND
cm9zc09yaWdpbikgeworICAgICAgICAvLyBUaGUgbmV0d29yayBsYXllciBtaWdodCBjYXJyeSBv
dmVyIHNvbWUgaGVhZGVycyBmcm9tIHRoZSBvcmlnaW5hbCByZXF1ZXN0IHRoYXQKKyAgICAgICAg
Ly8gd2Ugd2FudCB0byBzdHJpcCBoZXJlIGJlY2F1c2UgdGhlIHJlZGlyZWN0IGlzIGNyb3NzLW9y
aWdpbi4KKyAgICAgICAgcmVxdWVzdC5jbGVhckhUVFBBdXRob3JpemF0aW9uKCk7CisgICAgICAg
IHJlcXVlc3QuY2xlYXJIVFRQT3JpZ2luKCk7CisgICAgfSBlbHNlIGlmICh1cmwucHJvdG9jb2xJ
c0luSFRUUEZhbWlseSgpICYmIG1fc3RvcmVkQ3JlZGVudGlhbHMgPT0gQWxsb3dTdG9yZWRDcmVk
ZW50aWFscykgeworICAgICAgICBpZiAobV91c2VyLmlzRW1wdHkoKSAmJiBtX3Bhc3N3b3JkLmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgYXV0byBjcmVkZW50aWFsID0gbV9zZXNzaW9uLT5uZXR3
b3JrU3RvcmFnZVNlc3Npb24oKS5jcmVkZW50aWFsU3RvcmFnZSgpLmdldChyZXF1ZXN0LnVybCgp
KTsKKyAgICAgICAgICAgIGlmICghY3JlZGVudGlhbC5pc0VtcHR5KCkpCisgICAgICAgICAgICAg
ICAgbV9pbml0aWFsQ3JlZGVudGlhbCA9IGNyZWRlbnRpYWw7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBjbGVhclJlcXVlc3QoKTsKKworICAgIGF1dG8gcmVzcG9uc2UgPSBSZXNvdXJjZVJlc3Bv
bnNlKG1fcmVzcG9uc2UpOworICAgIG1fY2xpZW50LT53aWxsUGVyZm9ybUhUVFBSZWRpcmVjdGlv
bihXVEZNb3ZlKHJlc3BvbnNlKSwgV1RGTW92ZShyZXF1ZXN0KSwgW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBtYWtlUmVmKCp0aGlzKSwgaXNDcm9zc09yaWdpbl0oY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiBuZXdSZXF1ZXN0KSB7CisgICAgICAgIGlmIChuZXdSZXF1ZXN0LmlzTnVsbCgpIHx8IG1fc3Rh
dGUgPT0gU3RhdGU6OkNhbmNlbGluZykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBh
dXRvIHJlcXVlc3QgPSBuZXdSZXF1ZXN0OworICAgICAgICBpZiAocmVxdWVzdC51cmwoKS5wcm90
b2NvbElzSW5IVFRQRmFtaWx5KCkpIHsKKyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICAgICAg
ICAgIGlmIChpc0Nyb3NzT3JpZ2luKQorICAgICAgICAgICAgICAgIG1fc3RhcnRUaW1lID0gbW9u
b3RvbmljYWxseUluY3JlYXNpbmdUaW1lTVMoKTsKKyNlbmRpZgorICAgICAgICAgICAgYXBwbHlB
dXRoZW50aWNhdGlvblRvUmVxdWVzdChyZXF1ZXN0KTsKKyAgICAgICAgfQorICAgICAgICBjcmVh
dGVSZXF1ZXN0KHJlcXVlc3QpOworICAgICAgICBpZiAobV9zb3VwUmVxdWVzdCAmJiBtX3N0YXRl
ICE9IFN0YXRlOjpTdXNwZW5kZWQpIHsKKyAgICAgICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6U3Vz
cGVuZGVkOworICAgICAgICAgICAgcmVzdW1lKCk7CisgICAgICAgIH0KKyAgICB9KTsKK30KKwor
dm9pZCBOZXR3b3JrRGF0YVRhc2s6OnJlYWRDYWxsYmFjayhHSW5wdXRTdHJlYW0qIGlucHV0U3Ry
ZWFtLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgTmV0d29ya0RhdGFUYXNrKiB0YXNrKQoreworICAg
IFJlZlB0cjxOZXR3b3JrRGF0YVRhc2s+IHByb3RlY3RlZFRoaXMgPSBhZG9wdFJlZih0YXNrKTsK
KyAgICBpZiAodGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IHRhc2stPnN0YXRl
KCkgPT0gU3RhdGU6OkNvbXBsZXRlZCB8fCAoIXRhc2stPm1fY2xpZW50ICYmICF0YXNrLT5pc0Rv
d25sb2FkKCkpKSB7CisgICAgICAgIHRhc2stPmNsZWFyUmVxdWVzdCgpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIEFTU0VSVChpbnB1dFN0cmVhbSA9PSB0YXNrLT5tX2lucHV0U3RyZWFt
LmdldCgpKTsKKworICAgIGlmICh0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpTdXNwZW5kZWQpIHsK
KyAgICAgICAgQVNTRVJUKCF0YXNrLT5tX3BlbmRpbmdSZXN1bHQpOworICAgICAgICB0YXNrLT5t
X3BlbmRpbmdSZXN1bHQgPSByZXN1bHQ7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBH
VW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgZ3NzaXplIGJ5dGVzUmVhZCA9IGdfaW5w
dXRfc3RyZWFtX3JlYWRfZmluaXNoKGlucHV0U3RyZWFtLCByZXN1bHQsICZlcnJvci5vdXRQdHIo
KSk7CisgICAgaWYgKGVycm9yKQorICAgICAgICB0YXNrLT5kaWRGYWlsKFJlc291cmNlRXJyb3I6
OmdlbmVyaWNHRXJyb3IoZXJyb3IuZ2V0KCksIHRhc2stPm1fc291cFJlcXVlc3QuZ2V0KCkpKTsK
KyAgICBlbHNlIGlmIChieXRlc1JlYWQgPiAwKQorICAgICAgICB0YXNrLT5kaWRSZWFkKGJ5dGVz
UmVhZCk7CisgICAgZWxzZQorICAgICAgICB0YXNrLT5kaWRGaW5pc2hSZWFkKCk7Cit9CisKK3Zv
aWQgTmV0d29ya0RhdGFUYXNrOjpyZWFkKCkKK3sKKyAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNr
PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIEFTU0VSVChtX2lucHV0U3RyZWFtKTsKKyAgICBt
X3JlYWRCdWZmZXIuZ3JvdyhnRGVmYXVsdFJlYWRCdWZmZXJTaXplKTsKKyAgICBnX2lucHV0X3N0
cmVhbV9yZWFkX2FzeW5jKG1faW5wdXRTdHJlYW0uZ2V0KCksIG1fcmVhZEJ1ZmZlci5kYXRhKCks
IG1fcmVhZEJ1ZmZlci5zaXplKCksIEdfUFJJT1JJVFlfREVGQVVMVCwgbV9jYW5jZWxsYWJsZS5n
ZXQoKSwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihyZWFk
Q2FsbGJhY2spLCBwcm90ZWN0ZWRUaGlzLmxlYWtSZWYoKSk7Cit9CisKK3ZvaWQgTmV0d29ya0Rh
dGFUYXNrOjpkaWRSZWFkKGdzc2l6ZSBieXRlc1JlYWQpCit7CisgICAgbV9yZWFkQnVmZmVyLnNo
cmluayhieXRlc1JlYWQpOworICAgIGlmIChtX2Rvd25sb2FkT3V0cHV0U3RyZWFtKSB7CisgICAg
ICAgIEFTU0VSVChpc0Rvd25sb2FkKCkpOworICAgICAgICB3cml0ZURvd25sb2FkKCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKG1fY2xpZW50KTsKKyAgICAgICAgbV9jbGllbnQtPmRp
ZFJlY2VpdmVEYXRhKFNoYXJlZEJ1ZmZlcjo6YWRvcHRWZWN0b3IobV9yZWFkQnVmZmVyKSk7Cisg
ICAgICAgIHJlYWQoKTsKKyAgICB9Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRGaW5p
c2hSZWFkKCkKK3sKKyAgICBBU1NFUlQobV9pbnB1dFN0cmVhbSk7CisgICAgZ19pbnB1dF9zdHJl
YW1fY2xvc2UobV9pbnB1dFN0cmVhbS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgbV9p
bnB1dFN0cmVhbSA9IG51bGxwdHI7CisgICAgaWYgKG1fbXVsdGlwYXJ0SW5wdXRTdHJlYW0pIHsK
KyAgICAgICAgcmVxdWVzdE5leHRQYXJ0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAobV9kb3dubG9hZE91dHB1dFN0cmVhbSkgeworICAgICAgICBkaWRGaW5pc2hEb3dubG9h
ZCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2xlYXJSZXF1ZXN0KCk7CisgICAg
QVNTRVJUKG1fY2xpZW50KTsKKyAgICBtX2NsaWVudC0+ZGlkQ29tcGxldGVXaXRoRXJyb3IoeyB9
KTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2s6OnJlcXVlc3ROZXh0UGFydENhbGxiYWNrKFNv
dXBNdWx0aXBhcnRJbnB1dFN0cmVhbSogbXVsdGlwYXJ0SW5wdXRTdHJlYW0sIEdBc3luY1Jlc3Vs
dCogcmVzdWx0LCBOZXR3b3JrRGF0YVRhc2sqIHRhc2spCit7CisgICAgUmVmUHRyPE5ldHdvcmtE
YXRhVGFzaz4gcHJvdGVjdGVkVGhpcyA9IGFkb3B0UmVmKHRhc2spOworICAgIGlmICh0YXNrLT5z
dGF0ZSgpID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgdGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q29t
cGxldGVkIHx8ICF0YXNrLT5tX2NsaWVudCkgeworICAgICAgICB0YXNrLT5jbGVhclJlcXVlc3Qo
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBU1NFUlQobXVsdGlwYXJ0SW5wdXRTdHJl
YW0gPT0gdGFzay0+bV9tdWx0aXBhcnRJbnB1dFN0cmVhbS5nZXQoKSk7CisKKyAgICBpZiAodGFz
ay0+c3RhdGUoKSA9PSBTdGF0ZTo6U3VzcGVuZGVkKSB7CisgICAgICAgIEFTU0VSVCghdGFzay0+
bV9wZW5kaW5nUmVzdWx0KTsKKyAgICAgICAgdGFzay0+bV9wZW5kaW5nUmVzdWx0ID0gcmVzdWx0
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVy
cm9yOworICAgIEdSZWZQdHI8R0lucHV0U3RyZWFtPiBpbnB1dFN0cmVhbSA9IGFkb3B0R1JlZihz
b3VwX211bHRpcGFydF9pbnB1dF9zdHJlYW1fbmV4dF9wYXJ0X2ZpbmlzaChtdWx0aXBhcnRJbnB1
dFN0cmVhbSwgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpKTsKKyAgICBpZiAoZXJyb3IpCisgICAg
ICAgIHRhc2stPmRpZEZhaWwoUmVzb3VyY2VFcnJvcjo6aHR0cEVycm9yKHRhc2stPm1fc291cE1l
c3NhZ2UuZ2V0KCksIGVycm9yLmdldCgpLCB0YXNrLT5tX3NvdXBSZXF1ZXN0LmdldCgpKSk7Cisg
ICAgZWxzZSBpZiAoaW5wdXRTdHJlYW0pCisgICAgICAgIHRhc2stPmRpZFJlcXVlc3ROZXh0UGFy
dChXVEZNb3ZlKGlucHV0U3RyZWFtKSk7CisgICAgZWxzZQorICAgICAgICB0YXNrLT5kaWRGaW5p
c2hSZXF1ZXN0TmV4dFBhcnQoKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2s6OnJlcXVlc3RO
ZXh0UGFydCgpCit7CisgICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4gcHJvdGVjdGVkVGhpcyh0
aGlzKTsKKyAgICBBU1NFUlQobV9tdWx0aXBhcnRJbnB1dFN0cmVhbSk7CisgICAgQVNTRVJUKCFt
X2lucHV0U3RyZWFtKTsKKyAgICBzb3VwX211bHRpcGFydF9pbnB1dF9zdHJlYW1fbmV4dF9wYXJ0
X2FzeW5jKG1fbXVsdGlwYXJ0SW5wdXRTdHJlYW0uZ2V0KCksIEdfUFJJT1JJVFlfREVGQVVMVCwg
bV9jYW5jZWxsYWJsZS5nZXQoKSwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFk
eUNhbGxiYWNrPihyZXF1ZXN0TmV4dFBhcnRDYWxsYmFjayksIHByb3RlY3RlZFRoaXMubGVha1Jl
ZigpKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZFJlcXVlc3ROZXh0UGFydChHUmVm
UHRyPEdJbnB1dFN0cmVhbT4mJiBpbnB1dFN0cmVhbSkKK3sKKyAgICBBU1NFUlQoIW1faW5wdXRT
dHJlYW0pOworICAgIG1faW5wdXRTdHJlYW0gPSBXVEZNb3ZlKGlucHV0U3RyZWFtKTsKKyAgICBt
X3Jlc3BvbnNlID0gUmVzb3VyY2VSZXNwb25zZSgpOworICAgIG1fcmVzcG9uc2Uuc2V0VVJMKG1f
Zmlyc3RSZXF1ZXN0LnVybCgpKTsKKyAgICBtX3Jlc3BvbnNlLnVwZGF0ZUZyb21Tb3VwTWVzc2Fn
ZUhlYWRlcnMoc291cF9tdWx0aXBhcnRfaW5wdXRfc3RyZWFtX2dldF9oZWFkZXJzKG1fbXVsdGlw
YXJ0SW5wdXRTdHJlYW0uZ2V0KCkpKTsKKyAgICBkaWRSZWNlaXZlUmVzcG9uc2UoKTsKK30KKwor
dm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZEZpbmlzaFJlcXVlc3ROZXh0UGFydCgpCit7CisgICAg
QVNTRVJUKCFtX2lucHV0U3RyZWFtKTsKKyAgICBBU1NFUlQobV9tdWx0aXBhcnRJbnB1dFN0cmVh
bSk7CisgICAgZ19pbnB1dF9zdHJlYW1fY2xvc2UoR19JTlBVVF9TVFJFQU0obV9tdWx0aXBhcnRJ
bnB1dFN0cmVhbS5nZXQoKSksIG51bGxwdHIsIG51bGxwdHIpOworICAgIGNsZWFyUmVxdWVzdCgp
OworICAgIG1fY2xpZW50LT5kaWRDb21wbGV0ZVdpdGhFcnJvcih7IH0pOworfQorCit2b2lkIE5l
dHdvcmtEYXRhVGFzazo6Z290SGVhZGVyc0NhbGxiYWNrKFNvdXBNZXNzYWdlKiBzb3VwTWVzc2Fn
ZSwgTmV0d29ya0RhdGFUYXNrKiB0YXNrKQoreworICAgIGlmICh0YXNrLT5zdGF0ZSgpID09IFN0
YXRlOjpDYW5jZWxpbmcgfHwgdGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICF0
YXNrLT5tX2NsaWVudCkgeworICAgICAgICB0YXNrLT5jbGVhclJlcXVlc3QoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBBU1NFUlQodGFzay0+bV9zb3VwTWVzc2FnZS5nZXQoKSA9PSBz
b3VwTWVzc2FnZSk7CisgICAgdGFzay0+ZGlkR2V0SGVhZGVycygpOworfQorCit2b2lkIE5ldHdv
cmtEYXRhVGFzazo6ZGlkR2V0SGVhZGVycygpCit7CisgICAgLy8gV2UgYXJlIGEgYml0IG1vcmUg
Y29uc2VydmF0aXZlIHdpdGggdGhlIHBlcnNpc3RlbnQgY3JlZGVudGlhbCBzdG9yYWdlIHRoYW4g
dGhlIHNlc3Npb24gc3RvcmUsCisgICAgLy8gc2luY2Ugd2UgYXJlIHdhaXRpbmcgdW50aWwgd2Ug
a25vdyB0aGF0IHRoaXMgYXV0aGVudGljYXRpb24gc3VjY2VlZGVkIGJlZm9yZSBhY3R1YWxseSBz
dG9yaW5nLgorICAgIC8vIFRoaXMgaXMgYmVjYXVzZSB3ZSB3YW50IHRvIGF2b2lkIGhpdHRpbmcg
dGhlIGRpc2sgdHdpY2UgKG9uY2UgdG8gYWRkIGFuZCBvbmNlIHRvIHJlbW92ZSkgZm9yCisgICAg
Ly8gaW5jb3JyZWN0IGNyZWRlbnRpYWxzIG9yIHBvbGx1dGluZyB0aGUga2V5Y2hhaW4gd2l0aCBp
bnZhbGlkIGNyZWRlbnRpYWxzLgorICAgIGlmICghaXNBdXRoZW50aWNhdGlvbkZhaWx1cmVTdGF0
dXNDb2RlKG1fc291cE1lc3NhZ2UtPnN0YXR1c19jb2RlKSAmJiBtX3NvdXBNZXNzYWdlLT5zdGF0
dXNfY29kZSA8IDUwMCkgeworICAgICAgICBtX3Nlc3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lv
bigpLnNhdmVDcmVkZW50aWFsVG9QZXJzaXN0ZW50U3RvcmFnZShtX3Byb3RlY3Rpb25TcGFjZUZv
clBlcnNpc3RlbnRTdG9yYWdlLCBtX2NyZWRlbnRpYWxGb3JQZXJzaXN0ZW50U3RvcmFnZSk7Cisg
ICAgICAgIG1fcHJvdGVjdGlvblNwYWNlRm9yUGVyc2lzdGVudFN0b3JhZ2UgPSBQcm90ZWN0aW9u
U3BhY2UoKTsKKyAgICAgICAgbV9jcmVkZW50aWFsRm9yUGVyc2lzdGVudFN0b3JhZ2UgPSBDcmVk
ZW50aWFsKCk7CisgICAgfQorfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6d3JvdGVCb2R5RGF0
YUNhbGxiYWNrKFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSwgU291cEJ1ZmZlciogYnVmZmVyLCBO
ZXR3b3JrRGF0YVRhc2sqIHRhc2spCit7CisgICAgaWYgKHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6
OkNhbmNlbGluZyB8fCB0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDb21wbGV0ZWQgfHwgIXRhc2st
Pm1fY2xpZW50KSB7CisgICAgICAgIHRhc2stPmNsZWFyUmVxdWVzdCgpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIEFTU0VSVCh0YXNrLT5tX3NvdXBNZXNzYWdlLmdldCgpID09IHNvdXBN
ZXNzYWdlKTsKKyAgICB0YXNrLT5kaWRXcml0ZUJvZHlEYXRhKGJ1ZmZlci0+bGVuZ3RoKTsKK30K
Kwordm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZFdyaXRlQm9keURhdGEodWludDY0X3QgYnl0ZXNT
ZW50KQoreworICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2s+IHByb3RlY3RlZFRoaXModGhpcyk7
CisgICAgbV9ib2R5RGF0YVRvdGFsQnl0ZXNTZW50ICs9IGJ5dGVzU2VudDsKKyAgICBtX2NsaWVu
dC0+ZGlkU2VuZERhdGEobV9ib2R5RGF0YVRvdGFsQnl0ZXNTZW50LCBtX3NvdXBNZXNzYWdlLT5y
ZXF1ZXN0X2JvZHktPmxlbmd0aCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpkb3dubG9h
ZCgpCit7CisgICAgQVNTRVJUKGlzRG93bmxvYWQoKSk7CisgICAgQVNTRVJUKG1fcGVuZGluZ0Rv
d25sb2FkTG9jYXRpb24pOworICAgIEFTU0VSVCghbV9yZXNwb25zZS5pc051bGwoKSk7CisKKyAg
ICBpZiAobV9yZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpID49IDQwMCkgeworICAgICAgICBkaWRG
YWlsRG93bmxvYWQocGxhdGZvcm1Eb3dubG9hZE5ldHdvcmtFcnJvcihtX3Jlc3BvbnNlLmh0dHBT
dGF0dXNDb2RlKCksIG1fcmVzcG9uc2UudXJsKCksIG1fcmVzcG9uc2UuaHR0cFN0YXR1c1RleHQo
KSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9kb3dubG9hZERlc3RpbmF0aW9u
RmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl91cmkobV9wZW5kaW5nRG93bmxvYWRMb2Nh
dGlvbi51dGY4KCkuZGF0YSgpKSk7CisgICAgR1JlZlB0cjxHRmlsZU91dHB1dFN0cmVhbT4gb3V0
cHV0U3RyZWFtOworICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBpZiAobV9h
bGxvd092ZXJ3cml0ZURvd25sb2FkKQorICAgICAgICBvdXRwdXRTdHJlYW0gPSBhZG9wdEdSZWYo
Z19maWxlX3JlcGxhY2UobV9kb3dubG9hZERlc3RpbmF0aW9uRmlsZS5nZXQoKSwgbnVsbHB0ciwg
RkFMU0UsIEdfRklMRV9DUkVBVEVfTk9ORSwgbnVsbHB0ciwgJmVycm9yLm91dFB0cigpKSk7Cisg
ICAgZWxzZQorICAgICAgICBvdXRwdXRTdHJlYW0gPSBhZG9wdEdSZWYoZ19maWxlX2NyZWF0ZSht
X2Rvd25sb2FkRGVzdGluYXRpb25GaWxlLmdldCgpLCBHX0ZJTEVfQ1JFQVRFX05PTkUsIG51bGxw
dHIsICZlcnJvci5vdXRQdHIoKSkpOworICAgIGlmICghb3V0cHV0U3RyZWFtKSB7CisgICAgICAg
IGRpZEZhaWxEb3dubG9hZChwbGF0Zm9ybURvd25sb2FkRGVzdGluYXRpb25FcnJvcihtX3Jlc3Bv
bnNlLCBlcnJvci0+bWVzc2FnZSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgU3Ry
aW5nIGludGVybWVkaWF0ZVVSSSA9IG1fcGVuZGluZ0Rvd25sb2FkTG9jYXRpb24gKyAiLndrZG93
bmxvYWQiOworICAgIG1fZG93bmxvYWRJbnRlcm1lZGlhdGVGaWxlID0gYWRvcHRHUmVmKGdfZmls
ZV9uZXdfZm9yX3VyaShpbnRlcm1lZGlhdGVVUkkudXRmOCgpLmRhdGEoKSkpOworICAgIG91dHB1
dFN0cmVhbSA9IGFkb3B0R1JlZihnX2ZpbGVfcmVwbGFjZShtX2Rvd25sb2FkSW50ZXJtZWRpYXRl
RmlsZS5nZXQoKSwgMCwgVFJVRSwgR19GSUxFX0NSRUFURV9OT05FLCAwLCAmZXJyb3Iub3V0UHRy
KCkpKTsKKyAgICBpZiAoIW91dHB1dFN0cmVhbSkgeworICAgICAgICBkaWRGYWlsRG93bmxvYWQo
cGxhdGZvcm1Eb3dubG9hZERlc3RpbmF0aW9uRXJyb3IobV9yZXNwb25zZSwgZXJyb3ItPm1lc3Nh
Z2UpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2Rvd25sb2FkT3V0cHV0U3RyZWFt
ID0gYWRvcHRHUmVmKEdfT1VUUFVUX1NUUkVBTShvdXRwdXRTdHJlYW0ubGVha1JlZigpKSk7CisK
KyAgICBhdXRvJiBkb3dubG9hZE1hbmFnZXIgPSBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCku
ZG93bmxvYWRNYW5hZ2VyKCk7CisgICAgYXV0byBkb3dubG9hZCA9IHN0ZDo6bWFrZV91bmlxdWU8
RG93bmxvYWQ+KGRvd25sb2FkTWFuYWdlciwgbV9wZW5kaW5nRG93bmxvYWRJRCwgdGhpcywgbV9z
ZXNzaW9uLT5zZXNzaW9uSUQoKSwgc3VnZ2VzdGVkRmlsZW5hbWUoKSk7CisgICAgYXV0byogZG93
bmxvYWRQdHIgPSBkb3dubG9hZC5nZXQoKTsKKyAgICBkb3dubG9hZE1hbmFnZXIuZGF0YVRhc2tC
ZWNhbWVEb3dubG9hZFRhc2sobV9wZW5kaW5nRG93bmxvYWRJRCwgV1RGTW92ZShkb3dubG9hZCkp
OworICAgIGRvd25sb2FkUHRyLT5kaWRDcmVhdGVEZXN0aW5hdGlvbihtX3BlbmRpbmdEb3dubG9h
ZExvY2F0aW9uKTsKKworICAgIEFTU0VSVChtX2NsaWVudCk7CisgICAgbV9jbGllbnQtPmRpZEJl
Y29tZURvd25sb2FkKCk7CisKKyAgICByZWFkKCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNr
Ojp3cml0ZURvd25sb2FkQ2FsbGJhY2soR091dHB1dFN0cmVhbSogb3V0cHV0U3RyZWFtLCBHQXN5
bmNSZXN1bHQqIHJlc3VsdCwgTmV0d29ya0RhdGFUYXNrKiB0YXNrKQoreworICAgIFJlZlB0cjxO
ZXR3b3JrRGF0YVRhc2s+IHByb3RlY3RlZFRoaXMgPSBhZG9wdFJlZih0YXNrKTsKKyAgICBpZiAo
dGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IHRhc2stPnN0YXRlKCkgPT0gU3Rh
dGU6OkNvbXBsZXRlZCB8fCAhdGFzay0+aXNEb3dubG9hZCgpKSB7CisgICAgICAgIHRhc2stPmNs
ZWFyUmVxdWVzdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFTU0VSVChvdXRwdXRT
dHJlYW0gPT0gdGFzay0+bV9kb3dubG9hZE91dHB1dFN0cmVhbS5nZXQoKSk7CisKKyAgICBHVW5p
cXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgZ3NpemUgYnl0ZXNXcml0dGVuOworI2lmIEdM
SUJfQ0hFQ0tfVkVSU0lPTigyLCA0NCwgMCkKKyAgICBnX291dHB1dF9zdHJlYW1fd3JpdGVfYWxs
X2ZpbmlzaChvdXRwdXRTdHJlYW0sIHJlc3VsdCwgJmJ5dGVzV3JpdHRlbiwgJmVycm9yLm91dFB0
cigpKTsKKyNlbHNlCisgICAgZ3NzaXplIHdyaXRlVGFza1Jlc3VsdCA9IGdfdGFza19wcm9wYWdh
dGVfaW50KEdfVEFTSyhyZXN1bHQpLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGlmICh3cml0ZVRh
c2tSZXN1bHQgIT0gLTEpCisgICAgICAgIGJ5dGVzV3JpdHRlbiA9IHdyaXRlVGFza1Jlc3VsdDsK
KyNlbmRpZgorICAgIGlmIChlcnJvcikKKyAgICAgICAgdGFzay0+ZGlkRmFpbERvd25sb2FkKHBs
YXRmb3JtRG93bmxvYWREZXN0aW5hdGlvbkVycm9yKHRhc2stPm1fcmVzcG9uc2UsIGVycm9yLT5t
ZXNzYWdlKSk7CisgICAgZWxzZQorICAgICAgICB0YXNrLT5kaWRXcml0ZURvd25sb2FkKGJ5dGVz
V3JpdHRlbik7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjp3cml0ZURvd25sb2FkKCkKK3sK
KyAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworI2lmIEdM
SUJfQ0hFQ0tfVkVSU0lPTigyLCA0NCwgMCkKKyAgICBnX291dHB1dF9zdHJlYW1fd3JpdGVfYWxs
X2FzeW5jKG1fZG93bmxvYWRPdXRwdXRTdHJlYW0uZ2V0KCksIG1fcmVhZEJ1ZmZlci5kYXRhKCks
IG1fcmVhZEJ1ZmZlci5zaXplKCksIEdfUFJJT1JJVFlfREVGQVVMVCwgbV9jYW5jZWxsYWJsZS5n
ZXQoKSwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPih3cml0
ZURvd25sb2FkQ2FsbGJhY2spLCBwcm90ZWN0ZWRUaGlzLmxlYWtSZWYoKSk7CisjZWxzZQorICAg
IEdSZWZQdHI8R1Rhc2s+IHdyaXRlVGFzayA9IGFkb3B0R1JlZihnX3Rhc2tfbmV3KG1fZG93bmxv
YWRPdXRwdXRTdHJlYW0uZ2V0KCksIG1fY2FuY2VsbGFibGUuZ2V0KCksCisgICAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4od3JpdGVEb3dubG9hZENhbGxiYWNrKSwg
cHJvdGVjdGVkVGhpcy5sZWFrUmVmKCkpKTsKKyAgICBnX3Rhc2tfc2V0X3Rhc2tfZGF0YSh3cml0
ZVRhc2suZ2V0KCksIHRoaXMsIG51bGxwdHIpOworICAgIGdfdGFza19ydW5faW5fdGhyZWFkKHdy
aXRlVGFzay5nZXQoKSwgW10oR1Rhc2sqIHdyaXRlVGFzaywgZ3BvaW50ZXIgc291cmNlLCBncG9p
bnRlciB1c2VyRGF0YSwgR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSkgeworICAgICAgICBhdXRv
KiB0YXNrID0gc3RhdGljX2Nhc3Q8TmV0d29ya0RhdGFUYXNrKj4odXNlckRhdGEpOworICAgICAg
ICBHT3V0cHV0U3RyZWFtKiBvdXRwdXRTdHJlYW0gPSBHX09VVFBVVF9TVFJFQU0oc291cmNlKTsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQodGFzay0+bV9kb3dubG9hZE91dHB1dFN0cmVhbS5nZXQo
KSA9PSBvdXRwdXRTdHJlYW0pOworICAgICAgICBSRUxFQVNFX0FTU0VSVCh0YXNrLT5tX2NhbmNl
bGxhYmxlLmdldCgpID09IGNhbmNlbGxhYmxlKTsKKyAgICAgICAgR0Vycm9yKiBlcnJvciA9IG51
bGxwdHI7CisgICAgICAgIGlmIChnX2NhbmNlbGxhYmxlX3NldF9lcnJvcl9pZl9jYW5jZWxsZWQo
Y2FuY2VsbGFibGUsICZlcnJvcikpIHsKKyAgICAgICAgICAgIGdfdGFza19yZXR1cm5fZXJyb3Io
d3JpdGVUYXNrLCBlcnJvcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBnc2l6ZSBieXRlc1dyaXR0ZW47CisgICAgICAgIGlmIChnX291dHB1dF9zdHJlYW1fd3Jp
dGVfYWxsKG91dHB1dFN0cmVhbSwgdGFzay0+bV9yZWFkQnVmZmVyLmRhdGEoKSwgdGFzay0+bV9y
ZWFkQnVmZmVyLnNpemUoKSwgJmJ5dGVzV3JpdHRlbiwgY2FuY2VsbGFibGUsICZlcnJvcikpCisg
ICAgICAgICAgICBnX3Rhc2tfcmV0dXJuX2ludCh3cml0ZVRhc2ssIGJ5dGVzV3JpdHRlbik7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdfdGFza19yZXR1cm5fZXJyb3Iod3JpdGVUYXNrLCBl
cnJvcik7CisgICAgfSk7CisjZW5kaWYKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZFdy
aXRlRG93bmxvYWQoZ3NpemUgYnl0ZXNXcml0dGVuKQoreworICAgIEFTU0VSVChieXRlc1dyaXR0
ZW4gPT0gbV9yZWFkQnVmZmVyLnNpemUoKSk7CisgICAgYXV0byogZG93bmxvYWQgPSBOZXR3b3Jr
UHJvY2Vzczo6c2luZ2xldG9uKCkuZG93bmxvYWRNYW5hZ2VyKCkuZG93bmxvYWQobV9wZW5kaW5n
RG93bmxvYWRJRCk7CisgICAgQVNTRVJUKGRvd25sb2FkKTsKKyAgICBkb3dubG9hZC0+ZGlkUmVj
ZWl2ZURhdGEoYnl0ZXNXcml0dGVuKTsKKyAgICByZWFkKCk7Cit9CisKK3ZvaWQgTmV0d29ya0Rh
dGFUYXNrOjpkaWRGaW5pc2hEb3dubG9hZCgpCit7CisgICAgQVNTRVJUKCFtX3Jlc3BvbnNlLmlz
TnVsbCgpKTsKKyAgICBBU1NFUlQobV9kb3dubG9hZE91dHB1dFN0cmVhbSk7CisgICAgZ19vdXRw
dXRfc3RyZWFtX2Nsb3NlKG1fZG93bmxvYWRPdXRwdXRTdHJlYW0uZ2V0KCksIG51bGxwdHIsIG51
bGxwdHIpOworICAgIG1fZG93bmxvYWRPdXRwdXRTdHJlYW0gPSBudWxscHRyOworCisgICAgQVNT
RVJUKG1fZG93bmxvYWREZXN0aW5hdGlvbkZpbGUpOworICAgIEFTU0VSVChtX2Rvd25sb2FkSW50
ZXJtZWRpYXRlRmlsZSk7CisgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOworICAgIGlm
ICghZ19maWxlX21vdmUobV9kb3dubG9hZEludGVybWVkaWF0ZUZpbGUuZ2V0KCksIG1fZG93bmxv
YWREZXN0aW5hdGlvbkZpbGUuZ2V0KCksIEdfRklMRV9DT1BZX09WRVJXUklURSwgbV9jYW5jZWxs
YWJsZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0ciwgJmVycm9yLm91dFB0cigpKSkgeworICAgICAg
ICBkaWRGYWlsRG93bmxvYWQocGxhdGZvcm1Eb3dubG9hZERlc3RpbmF0aW9uRXJyb3IobV9yZXNw
b25zZSwgZXJyb3ItPm1lc3NhZ2UpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEdS
ZWZQdHI8R0ZpbGVJbmZvPiBpbmZvID0gYWRvcHRHUmVmKGdfZmlsZV9pbmZvX25ldygpKTsKKyAg
ICBDU3RyaW5nIHVyaSA9IG1fcmVzcG9uc2UudXJsKCkuc3RyaW5nKCkudXRmOCgpOworICAgIGdf
ZmlsZV9pbmZvX3NldF9hdHRyaWJ1dGVfc3RyaW5nKGluZm8uZ2V0KCksICJtZXRhZGF0YTo6ZG93
bmxvYWQtdXJpIiwgdXJpLmRhdGEoKSk7CisgICAgZ19maWxlX2luZm9fc2V0X2F0dHJpYnV0ZV9z
dHJpbmcoaW5mby5nZXQoKSwgInhhdHRyOjp4ZGcub3JpZ2luLnVybCIsIHVyaS5kYXRhKCkpOwor
ICAgIGdfZmlsZV9zZXRfYXR0cmlidXRlc19hc3luYyhtX2Rvd25sb2FkRGVzdGluYXRpb25GaWxl
LmdldCgpLCBpbmZvLmdldCgpLCBHX0ZJTEVfUVVFUllfSU5GT19OT05FLCBHX1BSSU9SSVRZX0RF
RkFVTFQsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIpOworCisgICAgY2xlYXJSZXF1ZXN0KCk7
CisgICAgYXV0byogZG93bmxvYWQgPSBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuZG93bmxv
YWRNYW5hZ2VyKCkuZG93bmxvYWQobV9wZW5kaW5nRG93bmxvYWRJRCk7CisgICAgQVNTRVJUKGRv
d25sb2FkKTsKKyAgICBkb3dubG9hZC0+ZGlkRmluaXNoKCk7Cit9CisKK3ZvaWQgTmV0d29ya0Rh
dGFUYXNrOjpkaWRGYWlsRG93bmxvYWQoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit7Cisg
ICAgY2xlYXJSZXF1ZXN0KCk7CisgICAgY2xlYW5Eb3dubG9hZEZpbGVzKCk7CisgICAgaWYgKG1f
Y2xpZW50KQorICAgICAgICBtX2NsaWVudC0+ZGlkQ29tcGxldGVXaXRoRXJyb3IoZXJyb3IpOwor
ICAgIGVsc2UgeworICAgICAgICBhdXRvKiBkb3dubG9hZCA9IE5ldHdvcmtQcm9jZXNzOjpzaW5n
bGV0b24oKS5kb3dubG9hZE1hbmFnZXIoKS5kb3dubG9hZChtX3BlbmRpbmdEb3dubG9hZElEKTsK
KyAgICAgICAgQVNTRVJUKGRvd25sb2FkKTsKKyAgICAgICAgZG93bmxvYWQtPmRpZEZhaWwoZXJy
b3IsIElQQzo6RGF0YVJlZmVyZW5jZSgpKTsKKyAgICB9Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFU
YXNrOjpjbGVhbkRvd25sb2FkRmlsZXMoKQoreworICAgIGlmIChtX2Rvd25sb2FkRGVzdGluYXRp
b25GaWxlKSB7CisgICAgICAgIGdfZmlsZV9kZWxldGUobV9kb3dubG9hZERlc3RpbmF0aW9uRmls
ZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgIG1fZG93bmxvYWREZXN0aW5hdGlv
bkZpbGUgPSBudWxscHRyOworICAgIH0KKyAgICBpZiAobV9kb3dubG9hZEludGVybWVkaWF0ZUZp
bGUpIHsKKyAgICAgICAgZ19maWxlX2RlbGV0ZShtX2Rvd25sb2FkSW50ZXJtZWRpYXRlRmlsZS5n
ZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgIG1fZG93bmxvYWRJbnRlcm1lZGlhdGVG
aWxlID0gbnVsbHB0cjsKKyAgICB9Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRGYWls
KGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQoreworICAgIGlmIChpc0Rvd25sb2FkKCkpIHsK
KyAgICAgICAgZGlkRmFpbERvd25sb2FkKHBsYXRmb3JtRG93bmxvYWROZXR3b3JrRXJyb3IoZXJy
b3IuZXJyb3JDb2RlKCksIGVycm9yLmZhaWxpbmdVUkwoKSwgZXJyb3IubG9jYWxpemVkRGVzY3Jp
cHRpb24oKSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2xlYXJSZXF1ZXN0KCk7
CisgICAgQVNTRVJUKG1fY2xpZW50KTsKKyAgICBtX2NsaWVudC0+ZGlkQ29tcGxldGVXaXRoRXJy
b3IoZXJyb3IpOworfQorCisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCit2b2lkIE5ldHdvcmtEYXRh
VGFzazo6bmV0d29ya0V2ZW50Q2FsbGJhY2soU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlLCBHU29j
a2V0Q2xpZW50RXZlbnQgZXZlbnQsIEdJT1N0cmVhbSosIE5ldHdvcmtEYXRhVGFzayogdGFzaykK
K3sKKyAgICBpZiAodGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IHRhc2stPnN0
YXRlKCkgPT0gU3RhdGU6OkNvbXBsZXRlZCB8fCAhdGFzay0+bV9jbGllbnQpCisgICAgICAgIHJl
dHVybjsKKworICAgIEFTU0VSVCh0YXNrLT5tX3NvdXBNZXNzYWdlLmdldCgpID09IHNvdXBNZXNz
YWdlKTsKKyAgICB0YXNrLT5uZXR3b3JrRXZlbnQoZXZlbnQpOworfQorCit2b2lkIE5ldHdvcmtE
YXRhVGFzazo6bmV0d29ya0V2ZW50KEdTb2NrZXRDbGllbnRFdmVudCBldmVudCkKK3sKKyAgICBk
b3VibGUgZGVsdGFUaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lTVMoKSAtIG1fc3Rh
cnRUaW1lOworICAgIGF1dG8mIGxvYWRUaW1pbmcgPSBtX3Jlc3BvbnNlLm5ldHdvcmtMb2FkVGlt
aW5nKCk7CisgICAgc3dpdGNoIChldmVudCkgeworICAgIGNhc2UgR19TT0NLRVRfQ0xJRU5UX1JF
U09MVklORzoKKyAgICAgICAgbG9hZFRpbWluZy5kb21haW5Mb29rdXBTdGFydCA9IGRlbHRhVGlt
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHX1NPQ0tFVF9DTElFTlRfUkVTT0xWRUQ6Cisg
ICAgICAgIGxvYWRUaW1pbmcuZG9tYWluTG9va3VwRW5kID0gZGVsdGFUaW1lOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEdfU09DS0VUX0NMSUVOVF9DT05ORUNUSU5HOgorICAgICAgICBsb2Fk
VGltaW5nLmNvbm5lY3RTdGFydCA9IGRlbHRhVGltZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBHX1NPQ0tFVF9DTElFTlRfQ09OTkVDVEVEOgorICAgICAgICAvLyBXZWIgVGltaW5nIGNvbnNp
ZGVycyB0aGF0IGNvbm5lY3Rpb24gdGltZSBpbnZvbHZlcyBkbnMsIHByb3h5ICYgVExTIG5lZ290
aWF0aW9uLi4uCisgICAgICAgIC8vIHNvIHdlIGJldHRlciBwaWNrIEdfU09DS0VUX0NMSUVOVF9D
T01QTEVURSBmb3IgY29ubmVjdEVuZAorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdfU09DS0VU
X0NMSUVOVF9QUk9YWV9ORUdPVElBVElORzoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHX1NP
Q0tFVF9DTElFTlRfUFJPWFlfTkVHT1RJQVRFRDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBH
X1NPQ0tFVF9DTElFTlRfVExTX0hBTkRTSEFLSU5HOgorICAgICAgICBsb2FkVGltaW5nLnNlY3Vy
ZUNvbm5lY3Rpb25TdGFydCA9IGRlbHRhVGltZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBH
X1NPQ0tFVF9DTElFTlRfVExTX0hBTkRTSEFLRUQ6CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
R19TT0NLRVRfQ0xJRU5UX0NPTVBMRVRFOgorICAgICAgICBsb2FkVGltaW5nLmNvbm5lY3RFbmQg
PSBkZWx0YVRpbWU7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKKyNpZiBTT1VQX0NI
RUNLX1ZFUlNJT04oMiwgNDksIDkxKQordm9pZCBOZXR3b3JrRGF0YVRhc2s6OnN0YXJ0aW5nQ2Fs
bGJhY2soU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlLCBOZXR3b3JrRGF0YVRhc2sqIHRhc2spCit7
CisgICAgaWYgKHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCB0YXNrLT5zdGF0
ZSgpID09IFN0YXRlOjpDb21wbGV0ZWQgfHwgIXRhc2stPm1fY2xpZW50KQorICAgICAgICByZXR1
cm47CisKKyAgICBBU1NFUlQodGFzay0+bV9zb3VwTWVzc2FnZS5nZXQoKSA9PSBzb3VwTWVzc2Fn
ZSk7CisgICAgdGFzay0+ZGlkU3RhcnRSZXF1ZXN0KCk7Cit9CisjZWxzZQordm9pZCBOZXR3b3Jr
RGF0YVRhc2s6OnJlcXVlc3RTdGFydGVkQ2FsbGJhY2soU291cFNlc3Npb24qIHNlc3Npb24sIFNv
dXBNZXNzYWdlKiBzb3VwTWVzc2FnZSwgU291cFNvY2tldCosIE5ldHdvcmtEYXRhVGFzayogdGFz
aykKK3sKKyAgICBBU1NFUlQoc2Vzc2lvbiA9PSB0YXNrLT5tX3Nlc3Npb24tPnNvdXBTZXNzaW9u
KCkpOworICAgIGlmIChzb3VwTWVzc2FnZSAhPSB0YXNrLT5tX3NvdXBNZXNzYWdlLmdldCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAodGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q2FuY2Vs
aW5nIHx8IHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNvbXBsZXRlZCB8fCAhdGFzay0+bV9jbGll
bnQpCisgICAgICAgIHJldHVybjsKKworICAgIHRhc2stPmRpZFN0YXJ0UmVxdWVzdCgpOworfQor
I2VuZGlmCisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRTdGFydFJlcXVlc3QoKQoreworICAg
IG1fcmVzcG9uc2UubmV0d29ya0xvYWRUaW1pbmcoKS5yZXF1ZXN0U3RhcnQgPSBtb25vdG9uaWNh
bGx5SW5jcmVhc2luZ1RpbWVNUygpIC0gbV9zdGFydFRpbWU7Cit9CisKK3ZvaWQgTmV0d29ya0Rh
dGFUYXNrOjpyZXN0YXJ0ZWRDYWxsYmFjayhTb3VwTWVzc2FnZSogc291cE1lc3NhZ2UsIE5ldHdv
cmtEYXRhVGFzayogdGFzaykKK3sKKyAgICAvLyBDYWxsZWQgZWFjaCB0aW1lIHRoZSBtZXNzYWdl
IGlzIGdvaW5nIHRvIGJlIHNlbnQgYWdhaW4gZXhjZXB0IHRoZSBmaXJzdCB0aW1lLgorICAgIC8v
IFRoaXMgaGFwcGVucyB3aGVuIGxpYnNvdXAgaGFuZGxlcyBIVFRQIGF1dGhlbnRpY2F0aW9uLgor
ICAgIGlmICh0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgdGFzay0+c3RhdGUo
KSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICF0YXNrLT5tX2NsaWVudCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgQVNTRVJUKHRhc2stPm1fc291cE1lc3NhZ2UuZ2V0KCkgPT0gc291cE1lc3NhZ2Up
OworICAgIHRhc2stPmRpZFJlc3RhcnQoKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRp
ZFJlc3RhcnQoKQoreworICAgIG1fc3RhcnRUaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdU
aW1lTVMoKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1RJTUlORykKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3Nv
dXAvTmV0d29ya1Nlc3Npb25Tb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L3NvdXAvTmV0d29ya1Nlc3Npb25Tb3VwLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4zNGMyYzc3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vzc2lvblNvdXAuY3BwCkBAIC0wLDAgKzEsODAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uLmgiCisKKyNpbmNsdWRlIDxXZWJD
b3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU291cE5ldHdv
cmtTZXNzaW9uLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKwordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitSZWY8TmV0d29ya1Nlc3Npb24+
IE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUoVHlwZSB0eXBlLCBTZXNzaW9uSUQgc2Vzc2lvbklELCBD
dXN0b21Qcm90b2NvbE1hbmFnZXIqKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdv
cmtTZXNzaW9uKHR5cGUsIHNlc3Npb25JRCwgbnVsbHB0cikpOworfQorCitOZXR3b3JrU2Vzc2lv
biYgTmV0d29ya1Nlc3Npb246OmRlZmF1bHRTZXNzaW9uKCkKK3sKKyAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOworICAgIHN0YXRpYyBOZXR3b3JrU2Vzc2lvbiogc2Vzc2lvbiA9ICZOZXR3b3Jr
U2Vzc2lvbjo6Y3JlYXRlKE5ldHdvcmtTZXNzaW9uOjpUeXBlOjpOb3JtYWwsIFNlc3Npb25JRDo6
ZGVmYXVsdFNlc3Npb25JRCgpLCBudWxscHRyKS5sZWFrUmVmKCk7CisgICAgcmV0dXJuICpzZXNz
aW9uOworfQorCitOZXR3b3JrU3RvcmFnZVNlc3Npb24mIE5ldHdvcmtTZXNzaW9uOjpuZXR3b3Jr
U3RvcmFnZVNlc3Npb24oKSBjb25zdAoreworICAgIGF1dG8qIHN0b3JhZ2VTZXNzaW9uID0gTmV0
d29ya1N0b3JhZ2VTZXNzaW9uOjpzdG9yYWdlU2Vzc2lvbihtX3Nlc3Npb25JRCk7CisgICAgUkVM
RUFTRV9BU1NFUlQoc3RvcmFnZVNlc3Npb24pOworICAgIHJldHVybiAqc3RvcmFnZVNlc3Npb247
Cit9CisKK05ldHdvcmtTZXNzaW9uOjpOZXR3b3JrU2Vzc2lvbihUeXBlIHR5cGUsIFNlc3Npb25J
RCBzZXNzaW9uSUQsIEN1c3RvbVByb3RvY29sTWFuYWdlciopCisgICAgOiBtX3Nlc3Npb25JRChz
ZXNzaW9uSUQpCit7Cit9CisKK05ldHdvcmtTZXNzaW9uOjp+TmV0d29ya1Nlc3Npb24oKQorewor
fQorCitTb3VwU2Vzc2lvbiogTmV0d29ya1Nlc3Npb246OnNvdXBTZXNzaW9uKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbmV0d29ya1N0b3JhZ2VTZXNzaW9uKCkuc291cE5ldHdvcmtTZXNzaW9uKCku
c291cFNlc3Npb24oKTsKK30KKwordm9pZCBOZXR3b3JrU2Vzc2lvbjo6aW52YWxpZGF0ZUFuZENh
bmNlbCgpCit7CisgICAgZm9yIChhdXRvKiB0YXNrIDogbV9kYXRhVGFza1NldCkKKyAgICAgICAg
dGFzay0+aW52YWxpZGF0ZUFuZENhbmNlbCgpOworfQorCit2b2lkIE5ldHdvcmtTZXNzaW9uOjpj
bGVhckNyZWRlbnRpYWxzKCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL1JlbW90ZU5ldHdvcmtpbmdD
b250ZXh0U291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL1JlbW90
ZU5ldHdvcmtpbmdDb250ZXh0U291cC5jcHAKaW5kZXggNmFlY2I3Zi4uOGZiNjRmYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9SZW1vdGVOZXR3b3JraW5n
Q29udGV4dFNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAv
UmVtb3RlTmV0d29ya2luZ0NvbnRleHRTb3VwLmNwcApAQCAtMjgsNiArMjgsOCBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlbW90ZU5ldHdvcmtpbmdDb250ZXh0LmgiCiAKKyNp
bmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5oIgorI2luY2x1ZGUgIlNlc3Npb25UcmFja2VyLmgiCiAj
aW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KICNpbmNsdWRlIDxXZWJD
b3JlL05vdEltcGxlbWVudGVkLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUhhbmRsZS5o
PgpAQCAtNDUsMTMgKzQ3LDIxIEBAIGJvb2wgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmlzVmFs
aWQoKSBjb25zdAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFJlbW90ZU5ldHdvcmtpbmdD
b250ZXh0OjplbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKFNlc3Npb25JRCkKK3ZvaWQgUmVt
b3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oU2Vzc2lv
bklEIHNlc3Npb25JRCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIEFTU0VSVChzZXNz
aW9uSUQuaXNFcGhlbWVyYWwoKSk7CisKKyAgICBpZiAoTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpz
dG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpKQorICAgICAgICByZXR1cm47CisKKyAgICBOZXR3b3Jr
U3RvcmFnZVNlc3Npb246OmVuc3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oc2Vzc2lvbklELCBT
dHJpbmc6Om51bWJlcihzZXNzaW9uSUQuc2Vzc2lvbklEKCkpKTsKKyAgICBTZXNzaW9uVHJhY2tl
cjo6c2V0U2Vzc2lvbihzZXNzaW9uSUQsIE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUoTmV0d29ya1Nl
c3Npb246OlR5cGU6OkVwaGVtZXJhbCwgc2Vzc2lvbklELCBudWxscHRyKSk7CiB9CiAKIE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbiYgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OnN0b3JhZ2VTZXNzaW9u
KCkgY29uc3QKIHsKKyAgICBpZiAoYXV0byBzZXNzaW9uID0gTmV0d29ya1N0b3JhZ2VTZXNzaW9u
OjpzdG9yYWdlU2Vzc2lvbihtX3Nlc3Npb25JRCkpCisgICAgICAgIHJldHVybiAqc2Vzc2lvbjsK
ICAgICByZXR1cm4gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24o
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UgYi9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCBmMTI1OTUxLi5iYWJmMmE3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtMTQsNyArMTQsOSBAQCBsaXN0KEFQUEVORCBX
ZWJLaXQyX1NPVVJDRVMKIAogICAgIE5ldHdvcmtQcm9jZXNzL2VmbC9OZXR3b3JrUHJvY2Vzc01h
aW5FZmwuY3BwCiAKKyAgICBOZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAu
Y3BwCiAgICAgTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwCisgICAg
TmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vzc2lvblNvdXAuY3BwCiAgICAgTmV0d29ya1By
b2Nlc3Mvc291cC9SZW1vdGVOZXR3b3JraW5nQ29udGV4dFNvdXAuY3BwCiAKICAgICBQbGF0Zm9y
bS9JUEMvdW5peC9BdHRhY2htZW50VW5peC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKaW5k
ZXggYmVlYTAwZS4uNmZiZGEyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1H
VEsuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTM5LDgg
KzM5LDEwIEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIE5ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZURhdGFTb3VwLmNwcAogICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZUlPQ2hhbm5lbFNvdXAuY3BwCiAKKyAgICBOZXR3b3JrUHJvY2Vzcy9zb3Vw
L05ldHdvcmtEYXRhVGFza1NvdXAuY3BwCiAgICAgTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3Jr
UHJvY2Vzc01haW5Tb3VwLmNwcAogICAgIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nl
c3NTb3VwLmNwcAorICAgIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25Tb3VwLmNw
cAogICAgIE5ldHdvcmtQcm9jZXNzL3NvdXAvUmVtb3RlTmV0d29ya2luZ0NvbnRleHRTb3VwLmNw
cAogCiAgICAgUGxhdGZvcm0vSVBDL2dsaWIvR1NvY2tldE1vbml0b3IuY3BwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3NvdXAvV2ViRnJhbWVO
ZXR3b3JraW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L3NvdXAvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5jcHAKaW5kZXggMjAxZDRhOC4u
MmY5ODcxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9zb3VwL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvc291cC9XZWJGcmFtZU5ldHdvcmtpbmdDb250
ZXh0LmNwcApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IldlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCIKIAorI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9u
LmgiCiAjaW5jbHVkZSAiU2Vzc2lvblRyYWNrZXIuaCIKICNpbmNsdWRlICJXZWJGcmFtZS5oIgog
I2luY2x1ZGUgIldlYlBhZ2UuaCIKQEAgLTQzLDExICs0NCwxMyBAQCBuYW1lc3BhY2UgV2ViS2l0
IHsKIHZvaWQgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlUHJpdmF0ZUJyb3dzaW5n
U2Vzc2lvbihTZXNzaW9uSUQgc2Vzc2lvbklEKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CisgICAgQVNTRVJUKHNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKTsKIAogICAgIGlmIChOZXR3
b3JrU3RvcmFnZVNlc3Npb246OnN0b3JhZ2VTZXNzaW9uKHNlc3Npb25JRCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZW5zdXJlUHJpdmF0ZUJyb3dzaW5n
U2Vzc2lvbihzZXNzaW9uSUQsIFN0cmluZzo6bnVtYmVyKHNlc3Npb25JRC5zZXNzaW9uSUQoKSkp
OworICAgIFNlc3Npb25UcmFja2VyOjpzZXRTZXNzaW9uKHNlc3Npb25JRCwgTmV0d29ya1Nlc3Np
b246OmNyZWF0ZShOZXR3b3JrU2Vzc2lvbjo6VHlwZTo6RXBoZW1lcmFsLCBzZXNzaW9uSUQsIG51
bGxwdHIpKTsKIH0KIAogdm9pZCBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjpzZXRDb29raWVB
Y2NlcHRQb2xpY3lGb3JBbGxDb250ZXh0cyhIVFRQQ29va2llQWNjZXB0UG9saWN5IHBvbGljeSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL2NvbmZpZy5oIGIvU291cmNlL1dlYktpdDIvY29u
ZmlnLmgKaW5kZXggMWQ5MWZiZC4uYTk3ZGQ0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
Y29uZmlnLmgKKysrIGIvU291cmNlL1dlYktpdDIvY29uZmlnLmgKQEAgLTc1LDcgKzc1LDcgQEAK
ICNlbmRpZgogI2VuZGlmCiAKLSNpZiAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJ
T05fTUlOX1JFUVVJUkVEID49IDEwMTIwMCkgfHwgKFBMQVRGT1JNKElPUykgJiYgX19JUEhPTkVf
T1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAwMDAwKQorI2lmIChQTEFURk9STShNQUMpICYm
IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAwKSB8fCAoUExBVEZPUk0o
SU9TKSAmJiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDAwMDApIHx8IFVT
RShTT1VQKQogI2lmbmRlZiBVU0VfTkVUV09SS19TRVNTSU9OCiAjZGVmaW5lIFVTRV9ORVRXT1JL
X1NFU1NJT04gMQogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292073</attachid>
            <date>2016-10-19 09:39:45 -0700</date>
            <delta_ts>2016-10-19 10:24:36 -0700</delta_ts>
            <desc>Try to fix the build</desc>
            <filename>wk2-network-session-soup.diff</filename>
            <type>text/plain</type>
            <size>85920</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktp
dDIvQ01ha2VMaXN0cy50eHQKaW5kZXggOWI0MzNkZS4uMWFjMTA2YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0
cy50eHQKQEAgLTIxNyw2ICsyMTcsNyBAQCBzZXQoV2ViS2l0Ml9TT1VSQ0VTCiAgICAgTmV0d29y
a1Byb2Nlc3MvRG93bmxvYWRzL0Jsb2JEb3dubG9hZENsaWVudC5jcHAKICAgICBOZXR3b3JrUHJv
Y2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuY3BwCiAgICAgTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRz
L0Rvd25sb2FkTWFuYWdlci5jcHAKKyAgICBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvUGVuZGlu
Z0Rvd25sb2FkLmNwcAogCiAgICAgUGxhdGZvcm0vTG9nZ2luZy5jcHAKICAgICBQbGF0Zm9ybS9N
b2R1bGUuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMDU4Yzc1NC4uNTQwZmVhZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDExNyBAQAorMjAxNi0xMC0xOCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lh
QGlnYWxpYS5jb20+CisKKyAgICAgICAgW1NPVVBdIEFkZCBOZXR3b3JrU2Vzc2lvbiBpbXBsZW1l
bnRhdGlvbiBhbmQgc3dpdGNoIHRvIHVzZSBpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNTk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQmFzaWNhbGx5IG1vdmUgdGhlIFJlc291cmNlSGFuZGxlIGlt
cGxlbWVudGF0aW9uIHRvIHRoZSBuZXR3b3JrIHByb2Nlc3MsIGJ1dCBtb2Rlcm5pemVkLCBjbGVh
bmVkIHVwLCBhbmQgYWRhcHRlZAorICAgICAgICB0byB0aGUgTmV0d29ya1Nlc3Npb24gbW9kZWwu
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDogQWRkIG5ldyBmaWxlcyB0byBjb21waWxhdGlv
bi4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpEb3dubG9hZDo6RG93bmxvYWQpOiBVc2UgdGhlIHNhbWUgY29kZSBmb3Ig
YWxsIHBvcnRzIHVzaW5nIE5ldHdvcmtTZXNzaW9uIGFuZCBhZGQgbWlzc2luZworICAgICAgICBp
bml0aWFsaXphdGlvbiBvZiBtX3Nlc3Npb25JRC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9E
b3dubG9hZHMvRG93bmxvYWQuaDoKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWQ6OkRvd25sb2Fk
KTogRGVmaW5lIFBsYXRmb3JtRG93bmxvYWRUYXNrUmVmIG9uIGV2ZXJ5IHBsYXRmb3JtIHRvIG1h
a2UgdGhlIGNvbnN0cnVjdG9yIGNvbW1vbiB0bworICAgICAgICBhbGwgcG9ydHMgdXNpbmcgTmV0
d29ya1Nlc3Npb24uCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL3NvdXAvRG93
bmxvYWRTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWQ6OmNhbmNlbE5ldHdvcmtM
b2FkKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWQ6OnBsYXRmb3JtRGlkRmluaXNoKToKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suaDoKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0RhdGFUYXNrOjpwZW5kaW5nRG93bmxvYWRJRCk6IE1ha2UgY29uc3QuCisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6cGVuZGluZ0Rvd25sb2FkKTogRGl0dG8uCisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6cGVuZGluZ0Rvd25sb2FkTG9jYXRpb24p
OiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjppc0Rvd25sb2FkKTog
SGVscGVyIHRvIGNoZWNrIGlmIHRoZSB0YXNrIGlzIGEgZG93bmxvYWQuCisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrTG9h
ZDo6ZGlkUmVjZWl2ZVJlc3BvbnNlTmV0d29ya1Nlc3Npb24pOiBVc2UgTmV0d29ya0RhdGFUYXNr
Ojppc0Rvd25sb2FkKCkuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6TmV0d29ya1Byb2Nlc3MpOiBO
ZXR3b3JrU2Vzc2lvbjo6c2V0Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyKCkgaXMgQ29jb2Egb25seS4K
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oOgorICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW06CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtTZXNzaW9uOjpuZXR3b3JrU3RvcmFnZVNlc3Npb24pOiBNYWtlIGNvbnN0Lgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6Ok5ldHdvcmtEYXRhVGFzayk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6fk5ldHdvcmtEYXRhVGFzayk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6c2NoZWR1bGVGYWlsdXJlKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpmYWlsdXJlVGltZXJGaXJlZCk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6c3VnZ2VzdGVkRmlsZW5hbWUpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OnNldFN1Z2dlc3RlZEZpbGVuYW1lKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpzZXRQZW5kaW5nRG93bmxvYWRMb2NhdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6YWxsb3dzU3BlY2lmaWNIVFRQU0NlcnRp
ZmljYXRlRm9ySG9zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6Y3JlYXRl
UmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6Y2xlYXJSZXF1ZXN0
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpyZXN1bWUpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OnN1c3BlbmQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrRGF0YVRhc2s6OmNhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6
aW52YWxpZGF0ZUFuZENhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6
c3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OnRpbWVvdXRGaXJlZCk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6c3RhcnRUaW1lb3V0KToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpzdG9wVGltZW91dCk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtEYXRhVGFzazo6c2VuZFJlcXVlc3RDYWxsYmFjayk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtEYXRhVGFzazo6ZGlkU2VuZFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrRGF0YVRhc2s6OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtEYXRhVGFzazo6dGxzRXJyb3JzQ2hhbmdlZENhbGxiYWNrKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0RhdGFUYXNrOjp0bHNFcnJvcnNDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0RhdGFUYXNrOjphcHBseUF1dGhlbnRpY2F0aW9uVG9SZXF1ZXN0KToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjphdXRoZW50aWNhdGVDYWxsYmFjayk6CisgICAgICAg
IChXZWJLaXQ6OmlzQXV0aGVudGljYXRpb25GYWlsdXJlU3RhdHVzQ29kZSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6YXV0aGVudGljYXRlKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0RhdGFUYXNrOjpjb250aW51ZUF1dGhlbnRpY2F0ZSk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtEYXRhVGFzazo6c2tpcElucHV0U3RyZWFtRm9yUmVkaXJlY3Rpb25DYWxsYmFjayk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6c2tpcElucHV0U3RyZWFtRm9yUmVk
aXJlY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OmRpZEZpbmlzaFNr
aXBJbnB1dFN0cmVhbUZvclJlZGlyZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6c2hvdWxkUmVk
aXJlY3RBc0dFVCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6c2hvdWxkU3Rh
cnRIVFRQUmVkaXJlY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OmNv
bnRpbnVlSFRUUFJlZGlyZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNr
OjpyZWFkQ2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OnJlYWQp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OmRpZFJlYWQpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OmRpZEZpbmlzaFJlYWQpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrRGF0YVRhc2s6OnJlcXVlc3ROZXh0UGFydENhbGxiYWNrKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0RhdGFUYXNrOjpyZXF1ZXN0TmV4dFBhcnQpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrRGF0YVRhc2s6OmRpZFJlcXVlc3ROZXh0UGFydCk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtEYXRhVGFzazo6ZGlkRmluaXNoUmVxdWVzdE5leHRQYXJ0KToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0RhdGFUYXNrOjpnb3RIZWFkZXJzQ2FsbGJhY2spOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrRGF0YVRhc2s6OmRpZEdldEhlYWRlcnMpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrRGF0YVRhc2s6Ondyb3RlQm9keURhdGFDYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtEYXRhVGFzazo6ZGlkV3JpdGVCb2R5RGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtEYXRhVGFzazo6ZG93bmxvYWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRh
c2s6OndyaXRlRG93bmxvYWRDYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRh
VGFzazo6d3JpdGVEb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6
ZGlkV3JpdGVEb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6ZGlk
RmluaXNoRG93bmxvYWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OmRpZEZh
aWxEb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6Y2xlYW5Eb3du
bG9hZEZpbGVzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpkaWRGYWlsKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpuZXR3b3JrRXZlbnRDYWxsYmFjayk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6bmV0d29ya0V2ZW50KToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpzdGFydGluZ0NhbGxiYWNrKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpyZXF1ZXN0U3RhcnRlZENhbGxiYWNrKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpkaWRTdGFydFJlcXVlc3QpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OnJlc3RhcnRlZENhbGxiYWNrKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0RhdGFUYXNrOjpkaWRSZXN0YXJ0KToKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtTZXNzaW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbjo6ZGVm
YXVsdFNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbjo6bmV0d29ya1N0
b3JhZ2VTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246Ok5ldHdvcmtT
ZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246On5OZXR3b3JrU2Vzc2lv
bik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjpzb3VwU2Vzc2lvbik6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjppbnZhbGlkYXRlQW5kQ2FuY2VsKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246OmNsZWFyQ3JlZGVudGlhbHMpOgorICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL3NvdXAvUmVtb3RlTmV0d29ya2luZ0NvbnRleHRTb3VwLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVByaXZhdGVCcm93
c2luZ1Nlc3Npb24pOiBBZGQgaW1wbGVtZW50YXRpb24gbWF0Y2hpbmcKKyAgICAgICAgV2ViRnJh
bWVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbigpLgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6c3RvcmFnZVNlc3Npb24pOiBE
byBub3QgYWx3YXlzIHJldHVybiB0aGUgZGVmYXVsdCBzZXNzaW9uIGlmIHRoZSBnaXZlbiBvbmUg
aXMKKyAgICAgICAgaW4gdGhlIGdsb2JhbCBtYXAuCisgICAgICAgICogUGxhdGZvcm1FZmwuY21h
a2U6IEFkIG5ldyBmaWxlcyB0byBjb21waWxhdGlvbi4KKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5j
bWFrZTogRGl0dG8uCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9zb3VwL1dl
YkZyYW1lTmV0d29ya2luZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZU5l
dHdvcmtpbmdDb250ZXh0OjplbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKTogQWxzbyBjcmVh
dGUgYSBOZXR3b3JrU2Vzc2lvbi4KKyAgICAgICAgKiBjb25maWcuaDogRW5hYmxlIE5ldHdvcmtT
ZXNzaW9uIHVuY29uZGl0aW9uYWxseSBmb3IgU291cCBiYXNlZCBwb3J0cy4KKwogMjAxNi0xMC0x
OSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAg
TmV0d29ya1Nlc3Npb246IHVwZGF0ZWRSZXF1ZXN0IHBhcmFtZXRlciBvZiBOZXR3b3JrUHJvY2Vz
czo6ZmluZFBlbmRpbmdEb3dubG9hZExvY2F0aW9uIGlzIHVudXNlZCBzaW5jZSByMjA2OTg4CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxv
YWQuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2Fk
LmNwcAppbmRleCA5YmUyMmVmLi42NDk0OGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5jcHAKQEAgLTMzLDYgKzMzLDcgQEAK
ICNpbmNsdWRlICJEb3dubG9hZE1hbmFnZXIuaCIKICNpbmNsdWRlICJEb3dubG9hZFByb3h5TWVz
c2FnZXMuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNr
LmgiCiAjaW5jbHVkZSAiU2FuZGJveEV4dGVuc2lvbi5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1
bWVudENvZGVycy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KQEAgLTQz
LDExICs0NCwxMiBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktp
dCB7CiAKLSNpZiBVU0UoTkVUV09SS19TRVNTSU9OKSAmJiBQTEFURk9STShDT0NPQSkKLURvd25s
b2FkOjpEb3dubG9hZChEb3dubG9hZE1hbmFnZXImIGRvd25sb2FkTWFuYWdlciwgRG93bmxvYWRJ
RCBkb3dubG9hZElELCBOU1VSTFNlc3Npb25Eb3dubG9hZFRhc2sqIGRvd25sb2FkLCBjb25zdCBX
ZWJDb3JlOjpTZXNzaW9uSUQmIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWROYW1l
KQorI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCitEb3dubG9hZDo6RG93bmxvYWQoRG93bmxvYWRN
YW5hZ2VyJiBkb3dubG9hZE1hbmFnZXIsIERvd25sb2FkSUQgZG93bmxvYWRJRCwgUGxhdGZvcm1E
b3dubG9hZFRhc2tSZWYgZG93bmxvYWQsIGNvbnN0IFdlYkNvcmU6OlNlc3Npb25JRCYgc2Vzc2lv
bklELCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZE5hbWUpCiAgICAgOiBtX2Rvd25sb2FkTWFuYWdl
cihkb3dubG9hZE1hbmFnZXIpCiAgICAgLCBtX2Rvd25sb2FkSUQoZG93bmxvYWRJRCkKICAgICAs
IG1fZG93bmxvYWQoZG93bmxvYWQpCisgICAgLCBtX3Nlc3Npb25JRChzZXNzaW9uSUQpCiAgICAg
LCBtX3N1Z2dlc3RlZE5hbWUoc3VnZ2VzdGVkTmFtZSkKIHsKICAgICBBU1NFUlQobV9kb3dubG9h
ZElELmRvd25sb2FkSUQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L0Rvd25sb2Fkcy9Eb3dubG9hZC5oCmluZGV4IDc5ODlmN2UuLmZkYzU4MzAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5oCkBAIC00
Nyw2ICs0NywxOSBAQCBPQkpDX0NMQVNTIFdLRG93bmxvYWRBc0RlbGVnYXRlOwogI2VuZGlmCiAj
ZW5kaWYKIAorI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisjaWYgUExBVEZPUk0oQ09DT0EpCit0
eXBlZGVmIGlkPE5TVVJMU2Vzc2lvbkRvd25sb2FkVGFzaz4gUGxhdGZvcm1Eb3dubG9hZFRhc2tS
ZWY7CisjZWxpZiBVU0UoU09VUCkKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgTmV0d29ya0Rh
dGFUYXNrOworfQordHlwZWRlZiBXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzayogUGxhdGZvcm1Eb3du
bG9hZFRhc2tSZWY7CisjZWxzZQordHlwZWRlZiB2b2lkKiBQbGF0Zm9ybURvd25sb2FkVGFza1Jl
ZjsKKyNlbmRpZgorI2VuZGlmCisKIG5hbWVzcGFjZSBJUEMgewogY2xhc3MgRGF0YVJlZmVyZW5j
ZTsKIH0KQEAgLTY4LDggKzgxLDggQEAgY2xhc3MgV2ViUGFnZTsKIGNsYXNzIERvd25sb2FkIDog
cHVibGljIElQQzo6TWVzc2FnZVNlbmRlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRG93
bmxvYWQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSNpZiBVU0UoTkVUV09S
S19TRVNTSU9OKSAmJiBQTEFURk9STShDT0NPQSkKLSAgICBEb3dubG9hZChEb3dubG9hZE1hbmFn
ZXImLCBEb3dubG9hZElELCBOU1VSTFNlc3Npb25Eb3dubG9hZFRhc2sqLCBjb25zdCBXZWJDb3Jl
OjpTZXNzaW9uSUQmIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSA9
IHsgfSk7CisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKyAgICBEb3dubG9hZChEb3dubG9hZE1h
bmFnZXImLCBEb3dubG9hZElELCBQbGF0Zm9ybURvd25sb2FkVGFza1JlZiwgY29uc3QgV2ViQ29y
ZTo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUg
PSB7IH0pOwogI2VuZGlmCiAgICAgRG93bmxvYWQoRG93bmxvYWRNYW5hZ2VyJiwgRG93bmxvYWRJ
RCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgU3RyaW5nJiBzdWdnZXN0
ZWRGaWxlbmFtZSA9IHsgfSk7CiAKQEAgLTEyNiwxNSArMTM5LDIxIEBAIHByaXZhdGU6CiAKICAg
ICBSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4gbV9zYW5kYm94RXh0ZW5zaW9uOwogCi0jaWYgUExB
VEZPUk0oQ09DT0EpCiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKyNpZiBQTEFURk9STShDT0NP
QSkKICAgICBSZXRhaW5QdHI8TlNVUkxTZXNzaW9uRG93bmxvYWRUYXNrPiBtX2Rvd25sb2FkOwot
ICAgIFdlYkNvcmU6OlNlc3Npb25JRCBtX3Nlc3Npb25JRDsKKyNlbGlmIFVTRShTT1VQKQorICAg
IFJlZlB0cjxOZXR3b3JrRGF0YVRhc2s+IG1fZG93bmxvYWQ7CiAjZWxzZQorICAgIFBsYXRmb3Jt
RG93bmxvYWRUYXNrUmVmIG1fZG93bmxvYWQ7CisjZW5kaWYKKyAgICBXZWJDb3JlOjpTZXNzaW9u
SUQgbV9zZXNzaW9uSUQ7CisjZWxzZSAvLyBVU0UoTkVUV09SS19TRVNTSU9OKQorI2lmIFBMQVRG
T1JNKENPQ09BKQogICAgIFJldGFpblB0cjxOU1VSTERvd25sb2FkPiBtX25zVVJMRG93bmxvYWQ7
CiAgICAgUmV0YWluUHRyPFdLRG93bmxvYWRBc0RlbGVnYXRlPiBtX2RlbGVnYXRlOwogI2VuZGlm
Ci0jZW5kaWYKKyNlbmRpZiAvLyBVU0UoTkVUV09SS19TRVNTSU9OKQogICAgIHN0ZDo6dW5pcXVl
X3B0cjxXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUNsaWVudD4gbV9kb3dubG9hZENsaWVudDsKICAg
ICBSZWZQdHI8V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU+IG1fcmVzb3VyY2VIYW5kbGU7CiAgICAg
U3RyaW5nIG1fc3VnZ2VzdGVkTmFtZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL0Rvd25sb2Fkcy9zb3VwL0Rvd25sb2FkU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvc291cC9Eb3dubG9hZFNvdXAuY3BwCmluZGV4IDY4
MDc5MTcuLjgyZThjNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L0Rvd25sb2Fkcy9zb3VwL0Rvd25sb2FkU291cC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvRG93bmxvYWRzL3NvdXAvRG93bmxvYWRTb3VwLmNwcApAQCAtMjgsMjA0ICsy
OCwxMyBAQAogI2luY2x1ZGUgIkRvd25sb2FkLmgiCiAKICNpbmNsdWRlICJEYXRhUmVmZXJlbmNl
LmgiCi0jaW5jbHVkZSAiRG93bmxvYWRTb3VwRXJyb3JzLmgiCisjaW5jbHVkZSAiTmV0d29ya0Rh
dGFUYXNrLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oPgotI2luY2x1ZGUgPGdpby9naW8uaD4K
LSNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4K
LSNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgotCi0jaWYgUExBVEZPUk0oR1RLKQotI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+
Ci0jZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewogCi1jbGFzcyBEb3dubG9hZENsaWVudCBmaW5hbCA6IHB1YmxpYyBSZXNvdXJjZUhhbmRsZUNs
aWVudCB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRG93bmxvYWRDbGllbnQpOwotcHVibGlj
OgotICAgIERvd25sb2FkQ2xpZW50KERvd25sb2FkJiBkb3dubG9hZCkKLSAgICAgICAgOiBtX2Rv
d25sb2FkKGRvd25sb2FkKQotICAgICAgICAsIG1faGFuZGxlUmVzcG9uc2VMYXRlcihSdW5Mb29w
OjptYWluKCksIHRoaXMsICZEb3dubG9hZENsaWVudDo6aGFuZGxlUmVzcG9uc2UpCi0gICAgICAg
ICwgbV9hbGxvd092ZXJ3cml0ZShmYWxzZSkKLSAgICB7Ci0gICAgfQotCi0gICAgfkRvd25sb2Fk
Q2xpZW50KCkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBkZWxldGVGaWxlc0lmTmVlZGVkKCkK
LSAgICB7Ci0gICAgICAgIGlmIChtX2Rlc3RpbmF0aW9uRmlsZSkKLSAgICAgICAgICAgIGdfZmls
ZV9kZWxldGUobV9kZXN0aW5hdGlvbkZpbGUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOwotCi0g
ICAgICAgIGlmIChtX2ludGVybWVkaWF0ZUZpbGUpIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2Rl
c3RpbmF0aW9uRmlsZSk7Ci0gICAgICAgICAgICBnX2ZpbGVfZGVsZXRlKG1faW50ZXJtZWRpYXRl
RmlsZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2
b2lkIGRvd25sb2FkRmFpbGVkKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQotICAgIHsKLSAg
ICAgICAgZGVsZXRlRmlsZXNJZk5lZWRlZCgpOwotICAgICAgICBtX2Rvd25sb2FkLmRpZEZhaWwo
ZXJyb3IsIElQQzo6RGF0YVJlZmVyZW5jZSgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGRpZFJlY2Vp
dmVSZXNwb25zZShSZXNvdXJjZUhhbmRsZSosIFJlc291cmNlUmVzcG9uc2UmJiByZXNwb25zZSkg
b3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIG1fcmVzcG9uc2UgPSBXVEZNb3ZlKHJlc3BvbnNlKTsK
LSAgICAgICAgbV9kb3dubG9hZC5kaWRSZWNlaXZlUmVzcG9uc2UobV9yZXNwb25zZSk7Ci0KLSAg
ICAgICAgaWYgKG1fcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSA+PSA0MDApIHsKLSAgICAgICAg
ICAgIGRvd25sb2FkRmFpbGVkKHBsYXRmb3JtRG93bmxvYWROZXR3b3JrRXJyb3IobV9yZXNwb25z
ZS5odHRwU3RhdHVzQ29kZSgpLCBtX3Jlc3BvbnNlLnVybCgpLCBtX3Jlc3BvbnNlLmh0dHBTdGF0
dXNUZXh0KCkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIFN0
cmluZyBzdWdnZXN0ZWRGaWxlbmFtZSA9IG1fcmVzcG9uc2Uuc3VnZ2VzdGVkRmlsZW5hbWUoKTsK
LSAgICAgICAgaWYgKHN1Z2dlc3RlZEZpbGVuYW1lLmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
VVJMIHVybCA9IG1fcmVzcG9uc2UudXJsKCk7Ci0gICAgICAgICAgICB1cmwuc2V0UXVlcnkoU3Ry
aW5nKCkpOwotICAgICAgICAgICAgdXJsLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOwotICAg
ICAgICAgICAgc3VnZ2VzdGVkRmlsZW5hbWUgPSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXModXJs
Lmxhc3RQYXRoQ29tcG9uZW50KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nIGRlc3Rp
bmF0aW9uVVJJID0gbV9kb3dubG9hZC5kZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxl
bmFtZShzdWdnZXN0ZWRGaWxlbmFtZSwgbV9hbGxvd092ZXJ3cml0ZSk7Ci0gICAgICAgIGlmIChk
ZXN0aW5hdGlvblVSSS5pc0VtcHR5KCkpIHsKLSNpZiBQTEFURk9STShHVEspCi0gICAgICAgICAg
ICBHVW5pcXVlUHRyPGNoYXI+IGJ1ZmZlcihnX3N0cmR1cF9wcmludGYoXygiQ2Fubm90IGRldGVy
bWluZSBkZXN0aW5hdGlvbiBVUkkgZm9yIGRvd25sb2FkIHdpdGggc3VnZ2VzdGVkIGZpbGVuYW1l
ICVzIiksIHN1Z2dlc3RlZEZpbGVuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICAgICAgICAgIFN0
cmluZyBlcnJvck1lc3NhZ2UgPSBTdHJpbmc6OmZyb21VVEY4KGJ1ZmZlci5nZXQoKSk7Ci0jZWxz
ZQotICAgICAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcoIkNhbm5vdCBk
ZXRlcm1pbmUgZGVzdGluYXRpb24gVVJJIGZvciBkb3dubG9hZCB3aXRoIHN1Z2dlc3RlZCBmaWxl
bmFtZSAiLCBzdWdnZXN0ZWRGaWxlbmFtZSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGRvd25sb2Fk
RmFpbGVkKHBsYXRmb3JtRG93bmxvYWREZXN0aW5hdGlvbkVycm9yKG1fcmVzcG9uc2UsIGVycm9y
TWVzc2FnZSkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9k
ZXN0aW5hdGlvbkZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfdXJpKGRlc3RpbmF0aW9u
VVJJLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICAgICAgR1JlZlB0cjxHRmlsZU91dHB1dFN0cmVhbT4g
b3V0cHV0U3RyZWFtOwotICAgICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAg
ICAgIGlmIChtX2FsbG93T3ZlcndyaXRlKQotICAgICAgICAgICAgb3V0cHV0U3RyZWFtID0gYWRv
cHRHUmVmKGdfZmlsZV9yZXBsYWNlKG1fZGVzdGluYXRpb25GaWxlLmdldCgpLCBudWxscHRyLCBG
QUxTRSwgR19GSUxFX0NSRUFURV9OT05FLCBudWxscHRyLCAmZXJyb3Iub3V0UHRyKCkpKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgb3V0cHV0U3RyZWFtID0gYWRvcHRHUmVmKGdfZmlsZV9j
cmVhdGUobV9kZXN0aW5hdGlvbkZpbGUuZ2V0KCksIEdfRklMRV9DUkVBVEVfTk9ORSwgbnVsbHB0
ciwgJmVycm9yLm91dFB0cigpKSk7Ci0gICAgICAgIGlmICghb3V0cHV0U3RyZWFtKSB7Ci0gICAg
ICAgICAgICBtX2Rlc3RpbmF0aW9uRmlsZS5jbGVhcigpOwotICAgICAgICAgICAgZG93bmxvYWRG
YWlsZWQocGxhdGZvcm1Eb3dubG9hZERlc3RpbmF0aW9uRXJyb3IobV9yZXNwb25zZSwgZXJyb3It
Pm1lc3NhZ2UpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIFN0
cmluZyBpbnRlcm1lZGlhdGVVUkkgPSBkZXN0aW5hdGlvblVSSSArICIud2tkb3dubG9hZCI7Ci0g
ICAgICAgIG1faW50ZXJtZWRpYXRlRmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl91cmko
aW50ZXJtZWRpYXRlVVJJLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICAgICAgbV9vdXRwdXRTdHJlYW0g
PSBhZG9wdEdSZWYoZ19maWxlX3JlcGxhY2UobV9pbnRlcm1lZGlhdGVGaWxlLmdldCgpLCAwLCBU
UlVFLCBHX0ZJTEVfQ1JFQVRFX05PTkUsIDAsICZlcnJvci5vdXRQdHIoKSkpOwotICAgICAgICBp
ZiAoIW1fb3V0cHV0U3RyZWFtKSB7Ci0gICAgICAgICAgICBkb3dubG9hZEZhaWxlZChwbGF0Zm9y
bURvd25sb2FkRGVzdGluYXRpb25FcnJvcihtX3Jlc3BvbnNlLCBlcnJvci0+bWVzc2FnZSkpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9kb3dubG9hZC5kaWRD
cmVhdGVEZXN0aW5hdGlvbihkZXN0aW5hdGlvblVSSSk7Ci0gICAgfQotCi0gICAgdm9pZCBkaWRS
ZWNlaXZlRGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxl
bmd0aCwgaW50IC8qZW5jb2RlZERhdGFMZW5ndGgqLykgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAg
IGlmIChtX2hhbmRsZVJlc3BvbnNlTGF0ZXIuaXNBY3RpdmUoKSkgewotICAgICAgICAgICAgbV9o
YW5kbGVSZXNwb25zZUxhdGVyLnN0b3AoKTsKLSAgICAgICAgICAgIGhhbmRsZVJlc3BvbnNlKCk7
Ci0gICAgICAgIH0KLQotICAgICAgICBnc2l6ZSBieXRlc1dyaXR0ZW47Ci0gICAgICAgIEdVbmlx
dWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKLSAgICAgICAgZ19vdXRwdXRfc3RyZWFtX3dyaXRlX2Fs
bChHX09VVFBVVF9TVFJFQU0obV9vdXRwdXRTdHJlYW0uZ2V0KCkpLCBkYXRhLCBsZW5ndGgsICZi
eXRlc1dyaXR0ZW4sIDAsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgICAgIGlmIChlcnJvcikgewot
ICAgICAgICAgICAgZG93bmxvYWRGYWlsZWQocGxhdGZvcm1Eb3dubG9hZERlc3RpbmF0aW9uRXJy
b3IobV9yZXNwb25zZSwgZXJyb3ItPm1lc3NhZ2UpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICBtX2Rvd25sb2FkLmRpZFJlY2VpdmVEYXRhKGJ5dGVzV3JpdHRlbik7
Ci0gICAgfQotCi0gICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKFJlc291cmNlSGFuZGxlKiwgZG91
YmxlKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgbV9vdXRwdXRTdHJlYW0gPSBudWxscHRyOwot
Ci0gICAgICAgIEFTU0VSVChtX2Rlc3RpbmF0aW9uRmlsZSk7Ci0gICAgICAgIEFTU0VSVChtX2lu
dGVybWVkaWF0ZUZpbGUpOwotICAgICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7Ci0g
ICAgICAgIGlmICghZ19maWxlX21vdmUobV9pbnRlcm1lZGlhdGVGaWxlLmdldCgpLCBtX2Rlc3Rp
bmF0aW9uRmlsZS5nZXQoKSwgR19GSUxFX0NPUFlfT1ZFUldSSVRFLCBudWxscHRyLCBudWxscHRy
LCBudWxscHRyLCAmZXJyb3Iub3V0UHRyKCkpKSB7Ci0gICAgICAgICAgICBkb3dubG9hZEZhaWxl
ZChwbGF0Zm9ybURvd25sb2FkRGVzdGluYXRpb25FcnJvcihtX3Jlc3BvbnNlLCBlcnJvci0+bWVz
c2FnZSkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgR1JlZlB0
cjxHRmlsZUluZm8+IGluZm8gPSBhZG9wdEdSZWYoZ19maWxlX2luZm9fbmV3KCkpOwotICAgICAg
ICBDU3RyaW5nIHVyaSA9IG1fcmVzcG9uc2UudXJsKCkuc3RyaW5nKCkudXRmOCgpOwotICAgICAg
ICBnX2ZpbGVfaW5mb19zZXRfYXR0cmlidXRlX3N0cmluZyhpbmZvLmdldCgpLCAibWV0YWRhdGE6
OmRvd25sb2FkLXVyaSIsIHVyaS5kYXRhKCkpOwotICAgICAgICBnX2ZpbGVfaW5mb19zZXRfYXR0
cmlidXRlX3N0cmluZyhpbmZvLmdldCgpLCAieGF0dHI6OnhkZy5vcmlnaW4udXJsIiwgdXJpLmRh
dGEoKSk7Ci0gICAgICAgIGdfZmlsZV9zZXRfYXR0cmlidXRlc19hc3luYyhtX2Rlc3RpbmF0aW9u
RmlsZS5nZXQoKSwgaW5mby5nZXQoKSwgR19GSUxFX1FVRVJZX0lORk9fTk9ORSwgR19QUklPUklU
WV9ERUZBVUxULCBudWxscHRyLCBudWxscHRyLCBudWxscHRyKTsKLQotICAgICAgICBtX2Rvd25s
b2FkLmRpZEZpbmlzaCgpOwotICAgIH0KLQotICAgIHZvaWQgZGlkRmFpbChSZXNvdXJjZUhhbmRs
ZSosIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAg
ZG93bmxvYWRGYWlsZWQocGxhdGZvcm1Eb3dubG9hZE5ldHdvcmtFcnJvcihlcnJvci5lcnJvckNv
ZGUoKSwgZXJyb3IuZmFpbGluZ1VSTCgpLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpKSk7
Ci0gICAgfQotCi0gICAgdm9pZCBjYW5jZWwoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKLSAgICB7
Ci0gICAgICAgIGhhbmRsZS0+Y2FuY2VsKCk7Ci0gICAgICAgIGRlbGV0ZUZpbGVzSWZOZWVkZWQo
KTsKLSAgICAgICAgbV9kb3dubG9hZC5kaWRDYW5jZWwoSVBDOjpEYXRhUmVmZXJlbmNlKCkpOwot
ICAgIH0KLQotICAgIHZvaWQgaGFuZGxlUmVzcG9uc2UoKQotICAgIHsKLSAgICAgICAgZGlkUmVj
ZWl2ZVJlc3BvbnNlKG51bGxwdHIsIFdURk1vdmUobV9kZWxheWVkUmVzcG9uc2UpKTsKLSAgICB9
Ci0KLSAgICB2b2lkIGhhbmRsZVJlc3BvbnNlTGF0ZXIoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYg
cmVzcG9uc2UpCi0gICAgewotICAgICAgICBBU1NFUlQobV9yZXNwb25zZS5pc051bGwoKSk7Ci0g
ICAgICAgIEFTU0VSVCghbV9oYW5kbGVSZXNwb25zZUxhdGVyLmlzQWN0aXZlKCkpOwotCi0gICAg
ICAgIG1fZGVsYXllZFJlc3BvbnNlID0gcmVzcG9uc2U7Ci0KLSAgICAgICAgLy8gQ2FsbCBkaWRS
ZWNlaXZlUmVzcG9uc2UgaW4gYW4gaWRsZSB0byBtYWtlIHN1cmUgdGhlIGRvd25sb2FkIGlzIGFk
ZGVkCi0gICAgICAgIC8vIHRvIHRoZSBEb3dubG9hZE1hbmFnZXIgZG93bmxvYWRzIG1hcC4KLSAg
ICAgICAgbV9oYW5kbGVSZXNwb25zZUxhdGVyLnN0YXJ0T25lU2hvdCgwKTsKLSAgICB9Ci0KLSAg
ICBEb3dubG9hZCYgbV9kb3dubG9hZDsKLSAgICBHUmVmUHRyPEdGaWxlT3V0cHV0U3RyZWFtPiBt
X291dHB1dFN0cmVhbTsKLSAgICBSZXNvdXJjZVJlc3BvbnNlIG1fcmVzcG9uc2U7Ci0gICAgR1Jl
ZlB0cjxHRmlsZT4gbV9kZXN0aW5hdGlvbkZpbGU7Ci0gICAgR1JlZlB0cjxHRmlsZT4gbV9pbnRl
cm1lZGlhdGVGaWxlOwotICAgIFJlc291cmNlUmVzcG9uc2UgbV9kZWxheWVkUmVzcG9uc2U7Ci0g
ICAgUnVuTG9vcDo6VGltZXI8RG93bmxvYWRDbGllbnQ+IG1faGFuZGxlUmVzcG9uc2VMYXRlcjsK
LSAgICBib29sIG1fYWxsb3dPdmVyd3JpdGU7Ci19OwotCi12b2lkIERvd25sb2FkOjpzdGFydE5l
dHdvcmtMb2FkKCkKLXsKLSAgICBBU1NFUlQoIW1fZG93bmxvYWRDbGllbnQpOwotICAgIEFTU0VS
VCghbV9yZXNvdXJjZUhhbmRsZSk7Ci0gICAgbV9kb3dubG9hZENsaWVudCA9IHN0ZDo6bWFrZV91
bmlxdWU8RG93bmxvYWRDbGllbnQ+KCp0aGlzKTsKLSAgICBtX3Jlc291cmNlSGFuZGxlID0gUmVz
b3VyY2VIYW5kbGU6OmNyZWF0ZSgwLCBtX3JlcXVlc3QsIG1fZG93bmxvYWRDbGllbnQuZ2V0KCks
IGZhbHNlLCB0cnVlKTsKLSAgICBkaWRTdGFydCgpOwotfQotCi12b2lkIERvd25sb2FkOjpzdGFy
dE5ldHdvcmtMb2FkV2l0aEhhbmRsZShSZXNvdXJjZUhhbmRsZSogcmVzb3VyY2VIYW5kbGUsIGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQotewotICAgIEFTU0VSVCghbV9kb3dubG9h
ZENsaWVudCk7Ci0gICAgQVNTRVJUKCFtX3Jlc291cmNlSGFuZGxlKTsKLSAgICBtX2Rvd25sb2Fk
Q2xpZW50ID0gc3RkOjptYWtlX3VuaXF1ZTxEb3dubG9hZENsaWVudD4oKnRoaXMpOwotICAgIG1f
cmVzb3VyY2VIYW5kbGUgPSByZXNvdXJjZUhhbmRsZS0+cmVsZWFzZUZvckRvd25sb2FkKG1fZG93
bmxvYWRDbGllbnQuZ2V0KCkpOwotICAgIGRpZFN0YXJ0KCk7Ci0gICAgc3RhdGljX2Nhc3Q8RG93
bmxvYWRDbGllbnQqPihtX2Rvd25sb2FkQ2xpZW50LmdldCgpKS0+aGFuZGxlUmVzcG9uc2VMYXRl
cihyZXNwb25zZSk7Ci19Ci0KIHZvaWQgRG93bmxvYWQ6OnJlc3VtZShjb25zdCBJUEM6OkRhdGFS
ZWZlcmVuY2UmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUm
KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CkBAIC0yMzMsMTQgKzQyLDggQEAgdm9pZCBEb3du
bG9hZDo6cmVzdW1lKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYsIGNvbnN0IFN0cmluZyYsIGNv
bnN0IFNhbmRib3hFeHQKIAogdm9pZCBEb3dubG9hZDo6Y2FuY2VsTmV0d29ya0xvYWQoKQogewot
ICAgIGlmICghbV9yZXNvdXJjZUhhbmRsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQ2Fu
Y2VsbGluZyB0aGUgZG93bmxvYWQgd2lsbCBkZWxldGUgaXQgYW5kIHBsYXRmb3JtSW52YWxpZGF0
ZSgpIHdpbGwgYmUgY2FsbGVkIGJ5IHRoZSBkZXN0cnVjdG9yLgotICAgIC8vIFNvLCB3ZSBuZWVk
IHRvIHNldCBtX3Jlc291cmNlSGFuZGxlIHRvIG51bGxwdHIgYmVmb3JlIGFjdHVhbGx5IGNhbmNl
bGxpbmcgdGhlIGRvd25sb2FkIHRvIG1ha2Ugc3VyZQotICAgIC8vIGl0IHdvbid0IGJlIGNhbmNl
bGxlZCBhZ2FpbiBieSBwbGF0Zm9ybUludmFsaWRhdGUuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3NjUwLgotICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4g
cmVzb3VyY2VIYW5kbGUgPSBtX3Jlc291cmNlSGFuZGxlLnJlbGVhc2UoKTsKLSAgICBzdGF0aWNf
Y2FzdDxEb3dubG9hZENsaWVudCo+KG1fZG93bmxvYWRDbGllbnQuZ2V0KCkpLT5jYW5jZWwocmVz
b3VyY2VIYW5kbGUuZ2V0KCkpOworICAgIG1fZG93bmxvYWQtPmNhbmNlbCgpOworICAgIGRpZENh
bmNlbCh7IH0pOwogfQogCiB2b2lkIERvd25sb2FkOjpwbGF0Zm9ybUludmFsaWRhdGUoKQpAQCAt
MjQ5LDcgKzUyLDYgQEAgdm9pZCBEb3dubG9hZDo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKIAogdm9p
ZCBEb3dubG9hZDo6cGxhdGZvcm1EaWRGaW5pc2goKQogewotICAgIG1fcmVzb3VyY2VIYW5kbGUg
PSBudWxscHRyOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5oIGIvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmgKaW5kZXggMzI0MmM3ZS4uNDU2NjI4
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFU
YXNrLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNr
LmgKQEAgLTIzLDkgKzIzLDEyIEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAgKi8KIAotI2lmbmRlZiBOZXR3b3JrRGF0YVRhc2tfaAotI2RlZmluZSBOZXR3b3JrRGF0YVRh
c2tfaAorI3ByYWdtYSBvbmNlCiAKKyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQorCisjaW5jbHVk
ZSAiQXV0aGVudGljYXRpb25NYW5hZ2VyLmgiCisjaW5jbHVkZSAiRG93bmxvYWRJRC5oIgogI2lu
Y2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NyZWRlbnRpYWwu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVyVHlwZXMuaD4KQEAgLTQxLDYgKzQ0LDEz
IEBACiBPQkpDX0NMQVNTIE5TVVJMU2Vzc2lvbkRhdGFUYXNrOwogI2VuZGlmCiAKKyNpZiBVU0Uo
U09VUCkKKyNpbmNsdWRlIDxXZWJDb3JlL1Byb3RlY3Rpb25TcGFjZS5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvUmVzb3VyY2VSZXNwb25zZS5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisjaW5j
bHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IGNsYXNzIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOwogY2xhc3MgQ3JlZGVudGlhbDsKQEAgLTU2
LDE1ICs2Niw3IEBAIGNsYXNzIERvd25sb2FkOwogY2xhc3MgTmV0d29ya1Nlc3Npb247CiBjbGFz
cyBQZW5kaW5nRG93bmxvYWQ7CiAKLWVudW0gY2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVuZ2VE
aXNwb3NpdGlvbiB7Ci0gICAgVXNlQ3JlZGVudGlhbCwKLSAgICBQZXJmb3JtRGVmYXVsdEhhbmRs
aW5nLAotICAgIENhbmNlbCwKLSAgICBSZWplY3RQcm90ZWN0aW9uU3BhY2UKLX07Ci0gICAgCiB0
eXBlZGVmIEZ1bmN0aW9uPHZvaWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik+IFJl
ZGlyZWN0Q29tcGxldGlvbkhhbmRsZXI7Ci10eXBlZGVmIEZ1bmN0aW9uPHZvaWQoQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYpPiBD
aGFsbGVuZ2VDb21wbGV0aW9uSGFuZGxlcjsKIHR5cGVkZWYgRnVuY3Rpb248dm9pZChXZWJDb3Jl
OjpQb2xpY3lBY3Rpb24pPiBSZXNwb25zZUNvbXBsZXRpb25IYW5kbGVyOwogCiBjbGFzcyBOZXR3
b3JrRGF0YVRhc2tDbGllbnQgewpAQCAtMTA1LDE5ICsxMDcsMjMgQEAgcHVibGljOgogICAgIHR5
cGVkZWYgdWludDY0X3QgVGFza0lkZW50aWZpZXI7CiAgICAgCiAgICAgfk5ldHdvcmtEYXRhVGFz
aygpOwotICAgIAorCisjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCBkaWRTZW5kRGF0YSh1
aW50NjRfdCB0b3RhbEJ5dGVzU2VudCwgdWludDY0X3QgdG90YWxCeXRlc0V4cGVjdGVkVG9TZW5k
KTsKICAgICB2b2lkIGRpZFJlY2VpdmVDaGFsbGVuZ2UoY29uc3QgV2ViQ29yZTo6QXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UmLCBDaGFsbGVuZ2VDb21wbGV0aW9uSGFuZGxlciYmKTsKICAgICB2b2lk
IGRpZENvbXBsZXRlV2l0aEVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKTsKICAg
ICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiYsIFJl
c3BvbnNlQ29tcGxldGlvbkhhbmRsZXImJik7CiAgICAgdm9pZCBkaWRSZWNlaXZlRGF0YShSZWY8
V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmKTsKICAgICB2b2lkIGRpZEJlY29tZURvd25sb2FkKCk7
Ci0gICAgCisKKyAgICB2b2lkIHdpbGxQZXJmb3JtSFRUUFJlZGlyZWN0aW9uKFdlYkNvcmU6OlJl
c291cmNlUmVzcG9uc2UmJiwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYsIFJlZGlyZWN0Q29t
cGxldGlvbkhhbmRsZXImJik7CisgICAgdm9pZCB0cmFuc2ZlclNhbmRib3hFeHRlbnNpb25Ub0Rv
d25sb2FkKERvd25sb2FkJik7CisjZW5kaWYKICAgICBOZXR3b3JrRGF0YVRhc2tDbGllbnQqIGNs
aWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50OyB9CiAgICAgdm9pZCBjbGVhckNsaWVudCgp
IHsgbV9jbGllbnQgPSBudWxscHRyOyB9CiAgICAgCi0gICAgRG93bmxvYWRJRCBwZW5kaW5nRG93
bmxvYWRJRCgpIHsgcmV0dXJuIG1fcGVuZGluZ0Rvd25sb2FkSUQ7IH0KLSAgICBQZW5kaW5nRG93
bmxvYWQqIHBlbmRpbmdEb3dubG9hZCgpIHsgcmV0dXJuIG1fcGVuZGluZ0Rvd25sb2FkOyB9Cisg
ICAgRG93bmxvYWRJRCBwZW5kaW5nRG93bmxvYWRJRCgpIGNvbnN0IHsgcmV0dXJuIG1fcGVuZGlu
Z0Rvd25sb2FkSUQ7IH0KKyAgICBQZW5kaW5nRG93bmxvYWQqIHBlbmRpbmdEb3dubG9hZCgpIGNv
bnN0IHsgcmV0dXJuIG1fcGVuZGluZ0Rvd25sb2FkOyB9CiAgICAgdm9pZCBzZXRQZW5kaW5nRG93
bmxvYWRJRChEb3dubG9hZElEIGRvd25sb2FkSUQpCiAgICAgewogICAgICAgICBBU1NFUlQoIW1f
cGVuZGluZ0Rvd25sb2FkSUQuZG93bmxvYWRJRCgpKTsKQEAgLTEzMCwxOSArMTM2LDczIEBAIHB1
YmxpYzoKICAgICAgICAgbV9wZW5kaW5nRG93bmxvYWQgPSAmcGVuZGluZ0Rvd25sb2FkOwogICAg
IH0KICAgICB2b2lkIHNldFBlbmRpbmdEb3dubG9hZExvY2F0aW9uKGNvbnN0IFN0cmluZyYgZmls
ZW5hbWUsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYsIGJvb2wgYWxsb3dPdmVyd3Jp
dGUpOwotICAgIGNvbnN0IFN0cmluZyYgcGVuZGluZ0Rvd25sb2FkTG9jYXRpb24oKSB7IHJldHVy
biBtX3BlbmRpbmdEb3dubG9hZExvY2F0aW9uOyB9CisgICAgY29uc3QgU3RyaW5nJiBwZW5kaW5n
RG93bmxvYWRMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcGVuZGluZ0Rvd25sb2FkTG9jYXRp
b247IH0KKyAgICBib29sIGlzRG93bmxvYWQoKSBjb25zdCB7IHJldHVybiAhIW1fcGVuZGluZ0Rv
d25sb2FkSUQuZG93bmxvYWRJRCgpOyB9CiAKICAgICBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmIGZpcnN0UmVxdWVzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3RSZXF1ZXN0OyB9CiAg
ICAgU3RyaW5nIHN1Z2dlc3RlZEZpbGVuYW1lKCk7CiAgICAgdm9pZCBzZXRTdWdnZXN0ZWRGaWxl
bmFtZShjb25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIHdpbGxQZXJmb3JtSFRUUFJlZGlyZWN0aW9u
KFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmJiwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYs
IFJlZGlyZWN0Q29tcGxldGlvbkhhbmRsZXImJik7Ci0gICAgdm9pZCB0cmFuc2ZlclNhbmRib3hF
eHRlbnNpb25Ub0Rvd25sb2FkKERvd25sb2FkJik7CiAgICAgYm9vbCBhbGxvd3NTcGVjaWZpY0hU
VFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlJik7CiAgICAgCiBwcml2YXRlOgogICAgIE5ldHdvcmtEYXRhVGFzayhOZXR3b3JrU2Vzc2lv
biYsIE5ldHdvcmtEYXRhVGFza0NsaWVudCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzLCBXZWJDb3JlOjpDb250ZW50U25pZmZpbmdQ
b2xpY3ksIGJvb2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCk7CiAK
ICAgICBib29sIHRyeVBhc3N3b3JkQmFzZWRBdXRoZW50aWNhdGlvbihjb25zdCBXZWJDb3JlOjpB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSYsIGNvbnN0IENoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVy
Jik7CisKKyNpZiBVU0UoU09VUCkKKyAgICB2b2lkIHRpbWVvdXRGaXJlZCgpOworICAgIHZvaWQg
c3RhcnRUaW1lb3V0KCk7CisgICAgdm9pZCBzdG9wVGltZW91dCgpOworICAgIHZvaWQgaW52YWxp
ZGF0ZUFuZENhbmNlbCgpOworICAgIHZvaWQgY3JlYXRlUmVxdWVzdChjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmKTsKKyAgICB2b2lkIGNsZWFyUmVxdWVzdCgpOworICAgIHN0YXRpYyB2
b2lkIHNlbmRSZXF1ZXN0Q2FsbGJhY2soU291cFJlcXVlc3QqLCBHQXN5bmNSZXN1bHQqLCBOZXR3
b3JrRGF0YVRhc2sqKTsKKyAgICB2b2lkIGRpZFNlbmRSZXF1ZXN0KEdSZWZQdHI8R0lucHV0U3Ry
ZWFtPiYmKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZSgpOworICAgIHN0YXRpYyB2b2lk
IHRsc0Vycm9yc0NoYW5nZWRDYWxsYmFjayhTb3VwTWVzc2FnZSosIEdQYXJhbVNwZWMqLCBOZXR3
b3JrRGF0YVRhc2sqKTsKKyAgICB2b2lkIHRsc0Vycm9yc0NoYW5nZWQoKTsKKyAgICB2b2lkIGFw
cGx5QXV0aGVudGljYXRpb25Ub1JlcXVlc3QoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7Cisg
ICAgc3RhdGljIHZvaWQgYXV0aGVudGljYXRlQ2FsbGJhY2soU291cFNlc3Npb24qLCBTb3VwTWVz
c2FnZSosIFNvdXBBdXRoKiwgZ2Jvb2xlYW4gcmV0cnlpbmcsIE5ldHdvcmtEYXRhVGFzayopOwor
ICAgIHZvaWQgYXV0aGVudGljYXRlKFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiYp
OworICAgIHZvaWQgY29udGludWVBdXRoZW50aWNhdGUoV2ViQ29yZTo6QXV0aGVudGljYXRpb25D
aGFsbGVuZ2UmJik7CisgICAgc3RhdGljIHZvaWQgc2tpcElucHV0U3RyZWFtRm9yUmVkaXJlY3Rp
b25DYWxsYmFjayhHSW5wdXRTdHJlYW0qLCBHQXN5bmNSZXN1bHQqLCBOZXR3b3JrRGF0YVRhc2sq
KTsKKyAgICB2b2lkIHNraXBJbnB1dFN0cmVhbUZvclJlZGlyZWN0aW9uKCk7CisgICAgdm9pZCBk
aWRGaW5pc2hTa2lwSW5wdXRTdHJlYW1Gb3JSZWRpcmVjdGlvbigpOworICAgIGJvb2wgc2hvdWxk
U3RhcnRIVFRQUmVkaXJlY3Rpb24oKTsKKyAgICB2b2lkIGNvbnRpbnVlSFRUUFJlZGlyZWN0aW9u
KCk7CisgICAgc3RhdGljIHZvaWQgcmVhZENhbGxiYWNrKEdJbnB1dFN0cmVhbSosIEdBc3luY1Jl
c3VsdCosIE5ldHdvcmtEYXRhVGFzayopOworICAgIHZvaWQgcmVhZCgpOworICAgIHZvaWQgZGlk
UmVhZChnc3NpemUgYnl0ZXNSZWFkKTsKKyAgICB2b2lkIGRpZEZpbmlzaFJlYWQoKTsKKyAgICBz
dGF0aWMgdm9pZCByZXF1ZXN0TmV4dFBhcnRDYWxsYmFjayhTb3VwTXVsdGlwYXJ0SW5wdXRTdHJl
YW0qLCBHQXN5bmNSZXN1bHQqLCBOZXR3b3JrRGF0YVRhc2sqKTsKKyAgICB2b2lkIHJlcXVlc3RO
ZXh0UGFydCgpOworICAgIHZvaWQgZGlkUmVxdWVzdE5leHRQYXJ0KEdSZWZQdHI8R0lucHV0U3Ry
ZWFtPiYmKTsKKyAgICB2b2lkIGRpZEZpbmlzaFJlcXVlc3ROZXh0UGFydCgpOworICAgIHN0YXRp
YyB2b2lkIGdvdEhlYWRlcnNDYWxsYmFjayhTb3VwTWVzc2FnZSosIE5ldHdvcmtEYXRhVGFzayop
OworICAgIHZvaWQgZGlkR2V0SGVhZGVycygpOworICAgIHN0YXRpYyB2b2lkIHdyb3RlQm9keURh
dGFDYWxsYmFjayhTb3VwTWVzc2FnZSosIFNvdXBCdWZmZXIqLCBOZXR3b3JrRGF0YVRhc2sqKTsK
KyAgICB2b2lkIGRpZFdyaXRlQm9keURhdGEodWludDY0X3QgYnl0ZXNTZW50KTsKKyAgICB2b2lk
IGRvd25sb2FkKCk7CisgICAgc3RhdGljIHZvaWQgd3JpdGVEb3dubG9hZENhbGxiYWNrKEdPdXRw
dXRTdHJlYW0qLCBHQXN5bmNSZXN1bHQqLCBOZXR3b3JrRGF0YVRhc2sqKTsKKyAgICB2b2lkIHdy
aXRlRG93bmxvYWQoKTsKKyAgICB2b2lkIGRpZFdyaXRlRG93bmxvYWQoZ3NpemUgYnl0ZXNXcml0
dGVuKTsKKyAgICB2b2lkIGRpZEZhaWxEb3dubG9hZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVy
cm9yJik7CisgICAgdm9pZCBkaWRGaW5pc2hEb3dubG9hZCgpOworICAgIHZvaWQgY2xlYW5Eb3du
bG9hZEZpbGVzKCk7CisgICAgdm9pZCBkaWRGYWlsKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJy
b3ImKTsKKyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICBzdGF0aWMgdm9pZCBuZXR3b3JrRXZl
bnRDYWxsYmFjayhTb3VwTWVzc2FnZSosIEdTb2NrZXRDbGllbnRFdmVudCwgR0lPU3RyZWFtKiwg
TmV0d29ya0RhdGFUYXNrKik7CisgICAgdm9pZCBuZXR3b3JrRXZlbnQoR1NvY2tldENsaWVudEV2
ZW50KTsKKyNpZiBTT1VQX0NIRUNLX1ZFUlNJT04oMiwgNDksIDkxKQorICAgIHN0YXRpYyB2b2lk
IHN0YXJ0aW5nQ2FsbGJhY2soU291cE1lc3NhZ2UqLCBOZXR3b3JrRGF0YVRhc2sqKTsKKyNlbHNl
CisgICAgc3RhdGljIHZvaWQgcmVxdWVzdFN0YXJ0ZWRDYWxsYmFjayhTb3VwU2Vzc2lvbiosIFNv
dXBNZXNzYWdlKiwgU291cFNvY2tldCosIE5ldHdvcmtEYXRhVGFzayopOworI2VuZGlmCisgICAg
dm9pZCBkaWRTdGFydFJlcXVlc3QoKTsKKyAgICBzdGF0aWMgdm9pZCByZXN0YXJ0ZWRDYWxsYmFj
ayhTb3VwTWVzc2FnZSosIE5ldHdvcmtEYXRhVGFzayopOworICAgIHZvaWQgZGlkUmVzdGFydCgp
OworI2VuZGlmCisjZW5kaWYKICAgICAKICAgICBlbnVtIEZhaWx1cmVUeXBlIHsKICAgICAgICAg
Tm9GYWlsdXJlLApAQCAtMTcyLDYgKzIzMiwzMCBAQCBwcml2YXRlOgogI2lmIFBMQVRGT1JNKENP
Q09BKQogICAgIFJldGFpblB0cjxOU1VSTFNlc3Npb25EYXRhVGFzaz4gbV90YXNrOwogI2VuZGlm
CisjaWYgVVNFKFNPVVApCisgICAgU3RhdGUgbV9zdGF0ZSB7IFN0YXRlOjpTdXNwZW5kZWQgfTsK
KyAgICBXZWJDb3JlOjpDb250ZW50U25pZmZpbmdQb2xpY3kgbV9zaG91bGRDb250ZW50U25pZmY7
CisgICAgR1JlZlB0cjxTb3VwUmVxdWVzdD4gbV9zb3VwUmVxdWVzdDsKKyAgICBHUmVmUHRyPFNv
dXBNZXNzYWdlPiBtX3NvdXBNZXNzYWdlOworICAgIEdSZWZQdHI8R0lucHV0U3RyZWFtPiBtX2lu
cHV0U3RyZWFtOworICAgIEdSZWZQdHI8U291cE11bHRpcGFydElucHV0U3RyZWFtPiBtX211bHRp
cGFydElucHV0U3RyZWFtOworICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBtX2NhbmNlbGxhYmxl
OworICAgIEdSZWZQdHI8R0FzeW5jUmVzdWx0PiBtX3BlbmRpbmdSZXN1bHQ7CisgICAgV2ViQ29y
ZTo6UHJvdGVjdGlvblNwYWNlIG1fcHJvdGVjdGlvblNwYWNlRm9yUGVyc2lzdGVudFN0b3JhZ2U7
CisgICAgV2ViQ29yZTo6Q3JlZGVudGlhbCBtX2NyZWRlbnRpYWxGb3JQZXJzaXN0ZW50U3RvcmFn
ZTsKKyAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIG1fcmVzcG9uc2U7CisgICAgVmVjdG9y
PGNoYXI+IG1fcmVhZEJ1ZmZlcjsKKyAgICB1bnNpZ25lZCBtX3JlZGlyZWN0Q291bnQgeyAwIH07
CisgICAgdWludDY0X3QgbV9ib2R5RGF0YVRvdGFsQnl0ZXNTZW50IHsgMCB9OworICAgIEdSZWZQ
dHI8R0ZpbGU+IG1fZG93bmxvYWREZXN0aW5hdGlvbkZpbGU7CisgICAgR1JlZlB0cjxHRmlsZT4g
bV9kb3dubG9hZEludGVybWVkaWF0ZUZpbGU7CisgICAgR1JlZlB0cjxHT3V0cHV0U3RyZWFtPiBt
X2Rvd25sb2FkT3V0cHV0U3RyZWFtOworICAgIGJvb2wgbV9hbGxvd092ZXJ3cml0ZURvd25sb2Fk
IHsgZmFsc2UgfTsKKyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICBkb3VibGUgbV9zdGFydFRp
bWUgeyAwIH07CisjZW5kaWYKKyAgICBSdW5Mb29wOjpUaW1lcjxOZXR3b3JrRGF0YVRhc2s+IG1f
dGltZW91dFNvdXJjZTsKKyNlbmRpZgogICAgIFN0cmluZyBtX3N1Z2dlc3RlZEZpbGVuYW1lOwog
fTsKIApAQCAtMTgxLDQgKzI2NSw0IEBAIFdlYkNvcmU6OkNyZWRlbnRpYWwgc2VydmVyVHJ1c3RD
cmVkZW50aWFsKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlCiAgICAgCiB9
CiAKLSNlbmRpZgorI2VuZGlmIC8vIFVTRShORVRXT1JLX1NFU1NJT04pCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHAKaW5kZXggYmIyOTlmNi4uOGZkNGFj
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmNwcApA
QCAtMjcxLDcgKzI3MSw3IEBAIHZvaWQgTmV0d29ya0xvYWQ6OmNvbXBsZXRlQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UoQ2hhbGxlbmdlQ29tcGxldGlvbkhhbmRsZXImJiBjCiB2b2lkIE5ldHdvcmtM
b2FkOjpkaWRSZWNlaXZlUmVzcG9uc2VOZXR3b3JrU2Vzc2lvbihSZXNvdXJjZVJlc3BvbnNlJiYg
cmVzcG9uc2UsIFJlc3BvbnNlQ29tcGxldGlvbkhhbmRsZXImJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGlmIChtX3Rhc2sgJiYgbV90YXNr
LT5wZW5kaW5nRG93bmxvYWRJRCgpLmRvd25sb2FkSUQoKSkKKyAgICBpZiAobV90YXNrICYmIG1f
dGFzay0+aXNEb3dubG9hZCgpKQogICAgICAgICBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCku
ZmluZFBlbmRpbmdEb3dubG9hZExvY2F0aW9uKCptX3Rhc2suZ2V0KCksIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpLCByZXNwb25zZSk7CiAgICAgZWxzZSBpZiAoc2hhcmVkRGlkUmVjZWl2ZVJl
c3BvbnNlKFdURk1vdmUocmVzcG9uc2UpKSA9PSBOZXR3b3JrTG9hZENsaWVudDo6U2hvdWxkQ29u
dGludWVEaWRSZWNlaXZlUmVzcG9uc2U6OlllcykKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
UG9saWN5VXNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05l
dHdvcmtQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLmNwcAppbmRleCAzYjM5NWQ2Li42ZWYxNzQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCkBAIC0zOSw2ICszOSw3IEBACiAj
aW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NQbGF0Zm9ybVN0cmF0ZWdpZXMuaCIKICNpbmNsdWRlICJO
ZXR3b3JrUHJvY2Vzc1Byb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJOZXR3b3JrUmVzb3VyY2VM
b2FkZXIuaCIKKyNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5oIgogI2luY2x1ZGUgIlJlbW90ZU5l
dHdvcmtpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiU2Vzc2lvblRyYWNrZXIuaCIKICNpbmNsdWRl
ICJTdGF0aXN0aWNzRGF0YS5oIgpAQCAtMTAwLDcgKzEwMSw3IEBAIE5ldHdvcmtQcm9jZXNzOjpO
ZXR3b3JrUHJvY2VzcygpCiAgICAgYWRkU3VwcGxlbWVudDxBdXRoZW50aWNhdGlvbk1hbmFnZXI+
KCk7CiAgICAgYWRkU3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyPigpOwogICAgIGFkZFN1cHBs
ZW1lbnQ8Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyPigpOwotI2lmIFVTRShORVRXT1JLX1NFU1NJT04p
CisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikgJiYgUExBVEZPUk0oQ09DT0EpCiAgICAgTmV0d29y
a1Nlc3Npb246OnNldEN1c3RvbVByb3RvY29sTWFuYWdlcihzdXBwbGVtZW50PEN1c3RvbVByb3Rv
Y29sTWFuYWdlcj4oKSk7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrU2Vzc2lvbi5oCmluZGV4IGE4NDBmMWQuLmIwODgyZjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmgKKysrIGIvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uaApAQCAtMjUsNiArMjUs
OCBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisKICNpZiBQ
TEFURk9STShDT0NPQSkKIE9CSkNfQ0xBU1MgTlNVUkxTZXNzaW9uOwogT0JKQ19DTEFTUyBOU09w
ZXJhdGlvblF1ZXVlOwpAQCAtMzUsOSArMzcsMTQgQEAgT0JKQ19DTEFTUyBXS05ldHdvcmtTZXNz
aW9uRGVsZWdhdGU7CiAjaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNrLmgiCiAjaW5jbHVkZSA8V2Vi
Q29yZS9TZXNzaW9uSUQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0
Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZi5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CiAKKyNpZiBVU0UoU09VUCkKK3R5cGVkZWYgc3RydWN0IF9Tb3VwU2Vzc2lvbiBTb3Vw
U2Vzc2lvbjsKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBOZXR3b3JrU3Rv
cmFnZVNlc3Npb247CiB9CkBAIC02Miw5ICs2OSwxMyBAQCBwdWJsaWM6CiAKICAgICBXZWJDb3Jl
OjpTZXNzaW9uSUQgc2Vzc2lvbklEKCkgY29uc3QgeyByZXR1cm4gbV9zZXNzaW9uSUQ7IH0KIAor
I2lmIFVTRShTT1VQKQorICAgIFNvdXBTZXNzaW9uKiBzb3VwU2Vzc2lvbigpIGNvbnN0OworI2Vu
ZGlmCisKKyNpZiBQTEFURk9STShDT0NPQSkKICAgICAvLyBNdXN0IGJlIGNhbGxlZCBiZWZvcmUg
YW55IE5ldHdvcmtTZXNzaW9uIGhhcyBiZWVuIGNyZWF0ZWQuCiAgICAgc3RhdGljIHZvaWQgc2V0
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyKEN1c3RvbVByb3RvY29sTWFuYWdlciopOwotI2lmIFBMQVRG
T1JNKENPQ09BKQogICAgIHN0YXRpYyB2b2lkIHNldFNvdXJjZUFwcGxpY2F0aW9uQXVkaXRUb2tl
bkRhdGEoUmV0YWluUHRyPENGRGF0YVJlZj4mJik7CiAgICAgc3RhdGljIHZvaWQgc2V0U291cmNl
QXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYpOwogICAgIHN0YXRpYyB2
b2lkIHNldFNvdXJjZUFwcGxpY2F0aW9uU2Vjb25kYXJ5SWRlbnRpZmllcihjb25zdCBTdHJpbmcm
KTsKQEAgLTc0LDI5ICs4NSwzNCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIHZvaWQgY2xlYXJD
cmVkZW50aWFscygpOwotCisjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgTmV0d29ya0RhdGFUYXNr
KiBkYXRhVGFza0ZvcklkZW50aWZpZXIoTmV0d29ya0RhdGFUYXNrOjpUYXNrSWRlbnRpZmllciwg
V2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHMpOwogCiAgICAgdm9pZCBhZGREb3dubG9hZElEKE5l
dHdvcmtEYXRhVGFzazo6VGFza0lkZW50aWZpZXIsIERvd25sb2FkSUQpOwogICAgIERvd25sb2Fk
SUQgZG93bmxvYWRJRChOZXR3b3JrRGF0YVRhc2s6OlRhc2tJZGVudGlmaWVyKTsKICAgICBEb3du
bG9hZElEIHRha2VEb3dubG9hZElEKE5ldHdvcmtEYXRhVGFzazo6VGFza0lkZW50aWZpZXIpOwot
ICAgIAorI2VuZGlmCisKIHByaXZhdGU6CiAgICAgTmV0d29ya1Nlc3Npb24oVHlwZSwgV2ViQ29y
ZTo6U2Vzc2lvbklELCBDdXN0b21Qcm90b2NvbE1hbmFnZXIqKTsKLSAgICBXZWJDb3JlOjpOZXR3
b3JrU3RvcmFnZVNlc3Npb24mIG5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpOworICAgIFdlYkNvcmU6
Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgbmV0d29ya1N0b3JhZ2VTZXNzaW9uKCkgY29uc3Q7CiAK
ICAgICBXZWJDb3JlOjpTZXNzaW9uSUQgbV9zZXNzaW9uSUQ7CiAKKyNpZiBQTEFURk9STShDT0NP
QSkKICAgICBIYXNoTWFwPE5ldHdvcmtEYXRhVGFzazo6VGFza0lkZW50aWZpZXIsIE5ldHdvcmtE
YXRhVGFzayo+IG1fZGF0YVRhc2tNYXBXaXRoQ3JlZGVudGlhbHM7CiAgICAgSGFzaE1hcDxOZXR3
b3JrRGF0YVRhc2s6OlRhc2tJZGVudGlmaWVyLCBOZXR3b3JrRGF0YVRhc2sqPiBtX2RhdGFUYXNr
TWFwV2l0aG91dENyZWRlbnRpYWxzOwogICAgIEhhc2hNYXA8TmV0d29ya0RhdGFUYXNrOjpUYXNr
SWRlbnRpZmllciwgRG93bmxvYWRJRD4gbV9kb3dubG9hZE1hcDsKIAotI2lmIFBMQVRGT1JNKENP
Q09BKQogICAgIFJldGFpblB0cjxOU1VSTFNlc3Npb24+IG1fc2Vzc2lvbldpdGhDcmVkZW50aWFs
U3RvcmFnZTsKICAgICBSZXRhaW5QdHI8V0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlPiBtX3Nlc3Np
b25XaXRoQ3JlZGVudGlhbFN0b3JhZ2VEZWxlZ2F0ZTsKICAgICBSZXRhaW5QdHI8TlNVUkxTZXNz
aW9uPiBtX3Nlc3Npb25XaXRob3V0Q3JlZGVudGlhbFN0b3JhZ2U7CiAgICAgUmV0YWluUHRyPFdL
TmV0d29ya1Nlc3Npb25EZWxlZ2F0ZT4gbV9zZXNzaW9uV2l0aG91dENyZWRlbnRpYWxTdG9yYWdl
RGVsZWdhdGU7CisjZWxpZiBVU0UoU09VUCkKKyAgICBIYXNoU2V0PE5ldHdvcmtEYXRhVGFzayo+
IG1fZGF0YVRhc2tTZXQ7CiAjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gVVNFKE5FVFdPUktfU0VTU0lPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW0gYi9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1tCmluZGV4IGNl
ZGZjMzkuLmM3NWM3MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbQpAQCAtNDc1LDcgKzQ3NSw3IEBA
IHZvaWQgTmV0d29ya1Nlc3Npb246OmludmFsaWRhdGVBbmRDYW5jZWwoKQogfQogCiAKLVdlYkNv
cmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgTmV0d29ya1Nlc3Npb246Om5ldHdvcmtTdG9yYWdl
U2Vzc2lvbigpCitXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24mIE5ldHdvcmtTZXNzaW9u
OjpuZXR3b3JrU3RvcmFnZVNlc3Npb24oKSBjb25zdAogewogICAgIGF1dG8qIHN0b3JhZ2VTZXNz
aW9uID0gV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzdG9yYWdlU2Vzc2lvbihtX3Nl
c3Npb25JRCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoc3RvcmFnZVNlc3Npb24pOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3Vw
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNr
U291cC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTcyNGJhMAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29y
a0RhdGFUYXNrU291cC5jcHAKQEAgLTAsMCArMSwxMTU1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE2IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJOZXR3b3JrRGF0YVRhc2suaCIKKworI2luY2x1ZGUgIkRhdGFSZWZlcmVuY2UuaCIKKyNp
bmNsdWRlICJEb3dubG9hZC5oIgorI2luY2x1ZGUgIkRvd25sb2FkU291cEVycm9ycy5oIgorI2lu
Y2x1ZGUgIk5ldHdvcmtMb2FkLmgiCisjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3MuaCIKKyNpbmNs
dWRlICJOZXR3b3JrU2Vzc2lvbi5oIgorI2luY2x1ZGUgIldlYkVycm9ycy5oIgorI2luY2x1ZGUg
PFdlYkNvcmUvQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0hU
VFBQYXJzZXJzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU291
cE5ldHdvcmtTZXNzaW9uLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKwordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdGF0aWMgY29uc3Qg
c2l6ZV90IGdEZWZhdWx0UmVhZEJ1ZmZlclNpemUgPSA4MTkyOworCitOZXR3b3JrRGF0YVRhc2s6
Ok5ldHdvcmtEYXRhVGFzayhOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwgTmV0d29ya0RhdGFUYXNr
Q2xpZW50JiBjbGllbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdFdpdGhDcmVkZW50
aWFscywgU3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsIENvbnRlbnRTbmlmZmlu
Z1BvbGljeSBzaG91bGRDb250ZW50U25pZmYsIGJvb2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRU
UFNUb0hUVFBSZWRpcmVjdCkKKyAgICA6IG1fZmFpbHVyZVRpbWVyKCp0aGlzLCAmTmV0d29ya0Rh
dGFUYXNrOjpmYWlsdXJlVGltZXJGaXJlZCkKKyAgICAsIG1fc2Vzc2lvbigmc2Vzc2lvbikKKyAg
ICAsIG1fY2xpZW50KCZjbGllbnQpCisgICAgLCBtX3N0b3JlZENyZWRlbnRpYWxzKHN0b3JlZENy
ZWRlbnRpYWxzKQorICAgICwgbV9sYXN0SFRUUE1ldGhvZChyZXF1ZXN0V2l0aENyZWRlbnRpYWxz
Lmh0dHBNZXRob2QoKSkKKyAgICAsIG1fZmlyc3RSZXF1ZXN0KHJlcXVlc3RXaXRoQ3JlZGVudGlh
bHMpCisgICAgLCBtX3Nob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3Qoc2hv
dWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCkKKyAgICAsIG1fc2hvdWxkQ29u
dGVudFNuaWZmKHNob3VsZENvbnRlbnRTbmlmZikKKyAgICAsIG1fdGltZW91dFNvdXJjZShSdW5M
b29wOjptYWluKCksIHRoaXMsICZOZXR3b3JrRGF0YVRhc2s6OnRpbWVvdXRGaXJlZCkKK3sKKyAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgbV9zZXNzaW9uLT5tX2RhdGFUYXNrU2V0
LmFkZCh0aGlzKTsKKworICAgIGlmICghcmVxdWVzdFdpdGhDcmVkZW50aWFscy51cmwoKS5pc1Zh
bGlkKCkpIHsKKyAgICAgICAgc2NoZWR1bGVGYWlsdXJlKEludmFsaWRVUkxGYWlsdXJlKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghcG9ydEFsbG93ZWQocmVxdWVzdFdpdGhD
cmVkZW50aWFscy51cmwoKSkpIHsKKyAgICAgICAgc2NoZWR1bGVGYWlsdXJlKEJsb2NrZWRGYWls
dXJlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gcmVxdWVzdCA9IHJlcXVl
c3RXaXRoQ3JlZGVudGlhbHM7CisgICAgaWYgKHJlcXVlc3QudXJsKCkucHJvdG9jb2xJc0luSFRU
UEZhbWlseSgpKSB7CisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCisgICAgICAgIG1fc3RhcnRUaW1l
ID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lTVMoKTsKKyNlbmRpZgorICAgICAgICBhdXRv
IHVybCA9IHJlcXVlc3QudXJsKCk7CisgICAgICAgIGlmIChtX3N0b3JlZENyZWRlbnRpYWxzID09
IEFsbG93U3RvcmVkQ3JlZGVudGlhbHMpIHsKKyAgICAgICAgICAgIG1fdXNlciA9IHVybC51c2Vy
KCk7CisgICAgICAgICAgICBtX3Bhc3N3b3JkID0gdXJsLnBhc3MoKTsKKyAgICAgICAgICAgIHJl
cXVlc3QucmVtb3ZlQ3JlZGVudGlhbHMoKTsKKworICAgICAgICAgICAgaWYgKG1fdXNlci5pc0Vt
cHR5KCkgJiYgbV9wYXNzd29yZC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgbV9pbml0aWFs
Q3JlZGVudGlhbCA9IG1fc2Vzc2lvbi0+bmV0d29ya1N0b3JhZ2VTZXNzaW9uKCkuY3JlZGVudGlh
bFN0b3JhZ2UoKS5nZXQocmVxdWVzdC51cmwoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgbV9zZXNzaW9uLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKS5jcmVkZW50aWFsU3Rv
cmFnZSgpLnNldChDcmVkZW50aWFsKG1fdXNlciwgbV9wYXNzd29yZCwgQ3JlZGVudGlhbFBlcnNp
c3RlbmNlTm9uZSksIHJlcXVlc3QudXJsKCkpOworICAgICAgICB9CisgICAgICAgIGFwcGx5QXV0
aGVudGljYXRpb25Ub1JlcXVlc3QocmVxdWVzdCk7CisgICAgfQorICAgIGNyZWF0ZVJlcXVlc3Qo
cmVxdWVzdCk7Cit9CisKK05ldHdvcmtEYXRhVGFzazo6fk5ldHdvcmtEYXRhVGFzaygpCit7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoIW1fY2xpZW50KTsKKyAgICBj
bGVhclJlcXVlc3QoKTsKKyAgICBtX3Nlc3Npb24tPm1fZGF0YVRhc2tTZXQucmVtb3ZlKHRoaXMp
OworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6c2NoZWR1bGVGYWlsdXJlKEZhaWx1cmVUeXBl
IHR5cGUpCit7CisgICAgQVNTRVJUKHR5cGUgIT0gTm9GYWlsdXJlKTsKKyAgICBtX3NjaGVkdWxl
ZEZhaWx1cmVUeXBlID0gdHlwZTsKKyAgICBtX2ZhaWx1cmVUaW1lci5zdGFydE9uZVNob3QoMCk7
Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpmYWlsdXJlVGltZXJGaXJlZCgpCit7CisgICAg
UmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKworICAgIHN3aXRj
aCAobV9zY2hlZHVsZWRGYWlsdXJlVHlwZSkgeworICAgIGNhc2UgQmxvY2tlZEZhaWx1cmU6Cisg
ICAgICAgIG1fc2NoZWR1bGVkRmFpbHVyZVR5cGUgPSBOb0ZhaWx1cmU7CisgICAgICAgIGlmICht
X2NsaWVudCkKKyAgICAgICAgICAgIG1fY2xpZW50LT53YXNCbG9ja2VkKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIEludmFsaWRVUkxGYWlsdXJlOgorICAgICAgICBtX3NjaGVkdWxlZEZh
aWx1cmVUeXBlID0gTm9GYWlsdXJlOworICAgICAgICBpZiAobV9jbGllbnQpCisgICAgICAgICAg
ICBtX2NsaWVudC0+Y2Fubm90U2hvd1VSTCgpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBO
b0ZhaWx1cmU6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK1N0cmluZyBOZXR3b3JrRGF0
YVRhc2s6OnN1Z2dlc3RlZEZpbGVuYW1lKCkKK3sKKyAgICBpZiAoIW1fc3VnZ2VzdGVkRmlsZW5h
bWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbV9zdWdnZXN0ZWRGaWxlbmFtZTsKKworICAg
IFN0cmluZyBzdWdnZXN0ZWRGaWxlbmFtZSA9IG1fcmVzcG9uc2Uuc3VnZ2VzdGVkRmlsZW5hbWUo
KTsKKyAgICBpZiAoIXN1Z2dlc3RlZEZpbGVuYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IHN1Z2dlc3RlZEZpbGVuYW1lOworCisgICAgVVJMIHVybCA9IG1fcmVzcG9uc2UudXJsKCk7Cisg
ICAgdXJsLnNldFF1ZXJ5KFN0cmluZygpKTsKKyAgICB1cmwucmVtb3ZlRnJhZ21lbnRJZGVudGlm
aWVyKCk7CisgICAgcmV0dXJuIGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyh1cmwubGFzdFBhdGhD
b21wb25lbnQoKSk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpzZXRTdWdnZXN0ZWRGaWxl
bmFtZShjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZE5hbWUpCit7CisgICAgbV9zdWdnZXN0ZWRGaWxl
bmFtZSA9IHN1Z2dlc3RlZE5hbWU7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpzZXRQZW5k
aW5nRG93bmxvYWRMb2NhdGlvbihjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTYW5kYm94
RXh0ZW5zaW9uOjpIYW5kbGUmLCBib29sIGFsbG93T3ZlcndyaXRlKQoreworICAgIG1fcGVuZGlu
Z0Rvd25sb2FkTG9jYXRpb24gPSBmaWxlbmFtZTsKKyAgICBtX2FsbG93T3ZlcndyaXRlRG93bmxv
YWQgPSBhbGxvd092ZXJ3cml0ZTsKK30KKworYm9vbCBOZXR3b3JrRGF0YVRhc2s6OmFsbG93c1Nw
ZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UmKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2s6OmNy
ZWF0ZVJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIEdVbmlx
dWVQdHI8U291cFVSST4gc291cFVSSSA9IHJlcXVlc3QuY3JlYXRlU291cFVSSSgpOworICAgIGlm
ICghc291cFVSSSkgeworICAgICAgICBzY2hlZHVsZUZhaWx1cmUoSW52YWxpZFVSTEZhaWx1cmUp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgR1JlZlB0cjxTb3VwUmVxdWVzdD4gc291
cFJlcXVlc3QgPSBhZG9wdEdSZWYoc291cF9zZXNzaW9uX3JlcXVlc3RfdXJpKG1fc2Vzc2lvbi0+
c291cFNlc3Npb24oKSwgc291cFVSSS5nZXQoKSwgbnVsbHB0cikpOworICAgIGlmICghc291cFJl
cXVlc3QpIHsKKyAgICAgICAgc2NoZWR1bGVGYWlsdXJlKEludmFsaWRVUkxGYWlsdXJlKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHJlcXVlc3QudXBkYXRlU291cFJlcXVlc3Qoc291
cFJlcXVlc3QuZ2V0KCkpOworCisgICAgaWYgKCFyZXF1ZXN0LnVybCgpLnByb3RvY29sSXNJbkhU
VFBGYW1pbHkoKSkgeworICAgICAgICBtX3NvdXBSZXF1ZXN0ID0gV1RGTW92ZShzb3VwUmVxdWVz
dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBIVFRQIHJlcXVlc3QuCisgICAg
R1JlZlB0cjxTb3VwTWVzc2FnZT4gc291cE1lc3NhZ2UgPSBhZG9wdEdSZWYoc291cF9yZXF1ZXN0
X2h0dHBfZ2V0X21lc3NhZ2UoU09VUF9SRVFVRVNUX0hUVFAoc291cFJlcXVlc3QuZ2V0KCkpKSk7
CisgICAgaWYgKCFzb3VwTWVzc2FnZSkgeworICAgICAgICBzY2hlZHVsZUZhaWx1cmUoSW52YWxp
ZFVSTEZhaWx1cmUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcmVxdWVzdC51cGRh
dGVTb3VwTWVzc2FnZShzb3VwTWVzc2FnZS5nZXQoKSk7CisgICAgaWYgKG1fc2hvdWxkQ29udGVu
dFNuaWZmID09IERvTm90U25pZmZDb250ZW50KQorICAgICAgICBzb3VwX21lc3NhZ2VfZGlzYWJs
ZV9mZWF0dXJlKHNvdXBNZXNzYWdlLmdldCgpLCBTT1VQX1RZUEVfQ09OVEVOVF9TTklGRkVSKTsK
KyAgICBpZiAobV91c2VyLmlzRW1wdHkoKSAmJiBtX3Bhc3N3b3JkLmlzRW1wdHkoKSAmJiBtX3N0
b3JlZENyZWRlbnRpYWxzID09IERvTm90QWxsb3dTdG9yZWRDcmVkZW50aWFscykgeworICAgICAg
ICAvLyBJbiBjYXNlIGNyZWRlbnRpYWwgaXMgbm90IGF2YWlsYWJsZSBhbmQgY3JlZGVudGlhbCBz
dG9yYWdlIHNob3VsZCBub3QgdG8gYmUgdXNlZCwKKyAgICAgICAgLy8gZGlzYWJsZSBhdXRoZW50
aWNhdGlvbiBtYW5hZ2VyIHNvIHRoYXQgY3JlZGVudGlhbHMgc3RvcmVkIGluIGxpYnNvdXAgYXJl
IG5vdCB1c2VkLgorICAgICAgICBzb3VwX21lc3NhZ2VfZGlzYWJsZV9mZWF0dXJlKHNvdXBNZXNz
YWdlLmdldCgpLCBTT1VQX1RZUEVfQVVUSF9NQU5BR0VSKTsKKyAgICB9CisKKyAgICAvLyBNYWtl
IHN1cmUgd2UgaGF2ZSBhbiBBY2NlcHQgaGVhZGVyIGZvciBzdWJyZXNvdXJjZXM7IHNvbWUgc2l0
ZXMgd2FudCB0aGlzIHRvIHNlcnZlIHNvbWUgb2YgdGhlaXIgc3VicmVzb3VyY2VzLgorICAgIGlm
ICghc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X29uZShzb3VwTWVzc2FnZS0+cmVxdWVzdF9oZWFk
ZXJzLCAiQWNjZXB0IikpCisgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChzb3Vw
TWVzc2FnZS0+cmVxdWVzdF9oZWFkZXJzLCAiQWNjZXB0IiwgIiovKiIpOworCisgICAgLy8gSW4g
dGhlIGNhc2Ugb2YgWEhSIC5zZW5kKCkgYW5kIC5zZW5kKCIiKSBleHBsaWNpdGx5IHRlbGwgbGli
c291cCB0byBzZW5kIGEgemVybyBjb250ZW50LWxlbmdodCBoZWFkZXIKKyAgICAvLyBmb3IgY29u
c2lzdGVuY3kgd2l0aCBvdGhlciBVQSBpbXBsZW1lbnRhdGlvbnMgbGlrZSBGaXJlZm94LiBJdCdz
IGRvbmUgaW4gdGhlIGJhY2tlbmQgaGVyZSBpbnN0ZWFkIG9mCisgICAgLy8gaW4gWEhSIGNvZGUg
c2luY2UgaW4gWEhSIENPUlMgY2hlY2tpbmcgcHJldmVudHMgdXMgZnJvbSB0aGlzIGtpbmQgb2Yg
bGF0ZSBoZWFkZXIgbWFuaXB1bGF0aW9uLgorICAgIGlmICgoc291cE1lc3NhZ2UtPm1ldGhvZCA9
PSBTT1VQX01FVEhPRF9QT1NUIHx8IHNvdXBNZXNzYWdlLT5tZXRob2QgPT0gU09VUF9NRVRIT0Rf
UFVUKSAmJiAhc291cE1lc3NhZ2UtPnJlcXVlc3RfYm9keS0+bGVuZ3RoKQorICAgICAgICBzb3Vw
X21lc3NhZ2VfaGVhZGVyc19zZXRfY29udGVudF9sZW5ndGgoc291cE1lc3NhZ2UtPnJlcXVlc3Rf
aGVhZGVycywgMCk7CisKKyAgICB1bnNpZ25lZCBmbGFncyA9IFNPVVBfTUVTU0FHRV9OT19SRURJ
UkVDVDsKKyAgICBzb3VwX21lc3NhZ2Vfc2V0X2ZsYWdzKHNvdXBNZXNzYWdlLmdldCgpLCBzdGF0
aWNfY2FzdDxTb3VwTWVzc2FnZUZsYWdzPihzb3VwX21lc3NhZ2VfZ2V0X2ZsYWdzKHNvdXBNZXNz
YWdlLmdldCgpKSB8IGZsYWdzKSk7CisKKyNpZiBTT1VQX0NIRUNLX1ZFUlNJT04oMiwgNDMsIDEp
CisgICAgc291cF9tZXNzYWdlX3NldF9wcmlvcml0eShzb3VwTWVzc2FnZS5nZXQoKSwgdG9Tb3Vw
TWVzc2FnZVByaW9yaXR5KHJlcXVlc3QucHJpb3JpdHkoKSkpOworI2VuZGlmCisKKyAgICBtX3Nv
dXBSZXF1ZXN0ID0gV1RGTW92ZShzb3VwUmVxdWVzdCk7CisgICAgbV9zb3VwTWVzc2FnZSA9IFdU
Rk1vdmUoc291cE1lc3NhZ2UpOworCisgICAgZ19zaWduYWxfY29ubmVjdChtX3NvdXBNZXNzYWdl
LmdldCgpLCAibm90aWZ5Ojp0bHMtZXJyb3JzIiwgR19DQUxMQkFDSyh0bHNFcnJvcnNDaGFuZ2Vk
Q2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fc291cE1lc3NhZ2UuZ2V0
KCksICJnb3QtaGVhZGVycyIsIEdfQ0FMTEJBQ0soZ290SGVhZGVyc0NhbGxiYWNrKSwgdGhpcyk7
CisgICAgZ19zaWduYWxfY29ubmVjdChtX3NvdXBNZXNzYWdlLmdldCgpLCAid3JvdGUtYm9keS1k
YXRhIiwgR19DQUxMQkFDSyh3cm90ZUJvZHlEYXRhQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3Np
Z25hbF9jb25uZWN0KG1fc2Vzc2lvbi0+c291cFNlc3Npb24oKSwgImF1dGhlbnRpY2F0ZSIsICBH
X0NBTExCQUNLKGF1dGhlbnRpY2F0ZUNhbGxiYWNrKSwgdGhpcyk7CisjaWYgRU5BQkxFKFdFQl9U
SU1JTkcpCisgICAgZ19zaWduYWxfY29ubmVjdChtX3NvdXBNZXNzYWdlLmdldCgpLCAibmV0d29y
ay1ldmVudCIsIEdfQ0FMTEJBQ0sobmV0d29ya0V2ZW50Q2FsbGJhY2spLCB0aGlzKTsKKyAgICBn
X3NpZ25hbF9jb25uZWN0KG1fc291cE1lc3NhZ2UuZ2V0KCksICJyZXN0YXJ0ZWQiLCBHX0NBTExC
QUNLKHJlc3RhcnRlZENhbGxiYWNrKSwgdGhpcyk7CisjaWYgU09VUF9DSEVDS19WRVJTSU9OKDIs
IDQ5LCA5MSkKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fc291cE1lc3NhZ2UuZ2V0KCksICJzdGFy
dGluZyIsIEdfQ0FMTEJBQ0soc3RhcnRpbmdDYWxsYmFjayksIHRoaXMpOworI2Vsc2UKKyAgICBn
X3NpZ25hbF9jb25uZWN0KG1fc2Vzc2lvbi0+c291cFNlc3Npb24oKSwgInJlcXVlc3Qtc3RhcnRl
ZCIsIEdfQ0FMTEJBQ0socmVxdWVzdFN0YXJ0ZWRDYWxsYmFjayksIHRoaXMpOworI2VuZGlmCisj
ZW5kaWYKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2s6OmNsZWFyUmVxdWVzdCgpCit7CisgICAg
aWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9zdGF0ZSA9IFN0YXRlOjpDb21wbGV0ZWQ7CisKKyAgICBzdG9wVGltZW91dCgpOworICAgIG1f
cGVuZGluZ1Jlc3VsdCA9IG51bGxwdHI7CisgICAgbV9zb3VwUmVxdWVzdCA9IG51bGxwdHI7Cisg
ICAgbV9pbnB1dFN0cmVhbSA9IG51bGxwdHI7CisgICAgbV9tdWx0aXBhcnRJbnB1dFN0cmVhbSA9
IG51bGxwdHI7CisgICAgbV9kb3dubG9hZE91dHB1dFN0cmVhbSA9IG51bGxwdHI7CisgICAgZ19j
YW5jZWxsYWJsZV9jYW5jZWwobV9jYW5jZWxsYWJsZS5nZXQoKSk7CisgICAgbV9jYW5jZWxsYWJs
ZSA9IG51bGxwdHI7CisgICAgaWYgKG1fc291cE1lc3NhZ2UpIHsKKyAgICAgICAgZ19zaWduYWxf
aGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fc291cE1lc3NhZ2UuZ2V0KCksIEdfU0lHTkFM
X01BVENIX0RBVEEsIDAsIDAsIG51bGxwdHIsIG51bGxwdHIsIHRoaXMpOworICAgICAgICBzb3Vw
X3Nlc3Npb25fY2FuY2VsX21lc3NhZ2UobV9zZXNzaW9uLT5zb3VwU2Vzc2lvbigpLCBtX3NvdXBN
ZXNzYWdlLmdldCgpLCBTT1VQX1NUQVRVU19DQU5DRUxMRUQpOworICAgICAgICBtX3NvdXBNZXNz
YWdlID0gbnVsbHB0cjsKKyAgICB9CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9t
YXRjaGVkKG1fc2Vzc2lvbi0+c291cFNlc3Npb24oKSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwg
MCwgbnVsbHB0ciwgbnVsbHB0ciwgdGhpcyk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpy
ZXN1bWUoKQoreworICAgIEFTU0VSVChtX3N0YXRlICE9IFN0YXRlOjpSdW5uaW5nKTsKKyAgICBp
ZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBs
ZXRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zdGF0ZSA9IFN0YXRlOjpSdW5uaW5nOwor
CisgICAgaWYgKG1fc2NoZWR1bGVkRmFpbHVyZVR5cGUgIT0gTm9GYWlsdXJlKSB7CisgICAgICAg
IEFTU0VSVChtX2ZhaWx1cmVUaW1lci5pc0FjdGl2ZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIHN0YXJ0VGltZW91dCgpOworCisgICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4g
cHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBpZiAobV9zb3VwUmVxdWVzdCAmJiAhbV9jYW5jZWxs
YWJsZSkgeworICAgICAgICBtX2NhbmNlbGxhYmxlID0gYWRvcHRHUmVmKGdfY2FuY2VsbGFibGVf
bmV3KCkpOworICAgICAgICBzb3VwX3JlcXVlc3Rfc2VuZF9hc3luYyhtX3NvdXBSZXF1ZXN0Lmdl
dCgpLCBtX2NhbmNlbGxhYmxlLmdldCgpLCByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2Fs
bGJhY2s+KHNlbmRSZXF1ZXN0Q2FsbGJhY2spLCBwcm90ZWN0ZWRUaGlzLmxlYWtSZWYoKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9wZW5kaW5nUmVzdWx0KSB7CisgICAg
ICAgIEdSZWZQdHI8R0FzeW5jUmVzdWx0PiBwZW5kaW5nUmVzdWx0ID0gV1RGTW92ZShtX3BlbmRp
bmdSZXN1bHQpOworICAgICAgICBpZiAobV9pbnB1dFN0cmVhbSkKKyAgICAgICAgICAgIHJlYWRD
YWxsYmFjayhtX2lucHV0U3RyZWFtLmdldCgpLCBwZW5kaW5nUmVzdWx0LmdldCgpLCBwcm90ZWN0
ZWRUaGlzLmxlYWtSZWYoKSk7CisgICAgICAgIGVsc2UgaWYgKG1fbXVsdGlwYXJ0SW5wdXRTdHJl
YW0pCisgICAgICAgICAgICByZXF1ZXN0TmV4dFBhcnRDYWxsYmFjayhtX211bHRpcGFydElucHV0
U3RyZWFtLmdldCgpLCBwZW5kaW5nUmVzdWx0LmdldCgpLCBwcm90ZWN0ZWRUaGlzLmxlYWtSZWYo
KSk7CisgICAgICAgIGVsc2UgaWYgKG1fc291cFJlcXVlc3QpCisgICAgICAgICAgICBzZW5kUmVx
dWVzdENhbGxiYWNrKG1fc291cFJlcXVlc3QuZ2V0KCksIHBlbmRpbmdSZXN1bHQuZ2V0KCksIHBy
b3RlY3RlZFRoaXMubGVha1JlZigpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6c3VzcGVu
ZCgpCit7CisgICAgQVNTRVJUKG1fc3RhdGUgIT0gU3RhdGU6OlN1c3BlbmRlZCk7CisgICAgaWYg
KG1fc3RhdGUgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCBtX3N0YXRlID09IFN0YXRlOjpDb21wbGV0
ZWQpCisgICAgICAgIHJldHVybjsKKyAgICBtX3N0YXRlID0gU3RhdGU6OlN1c3BlbmRlZDsKKwor
ICAgIHN0b3BUaW1lb3V0KCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpjYW5jZWwoKQor
eworICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgbV9zdGF0ZSA9PSBTdGF0
ZTo6Q29tcGxldGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N0YXRlID0gU3RhdGU6OkNh
bmNlbGluZzsKKworICAgIGlmIChtX3NvdXBNZXNzYWdlKQorICAgICAgICBzb3VwX3Nlc3Npb25f
Y2FuY2VsX21lc3NhZ2UobV9zZXNzaW9uLT5zb3VwU2Vzc2lvbigpLCBtX3NvdXBNZXNzYWdlLmdl
dCgpLCBTT1VQX1NUQVRVU19DQU5DRUxMRUQpOworCisgICAgZ19jYW5jZWxsYWJsZV9jYW5jZWwo
bV9jYW5jZWxsYWJsZS5nZXQoKSk7CisKKyAgICBpZiAoaXNEb3dubG9hZCgpKQorICAgICAgICBj
bGVhbkRvd25sb2FkRmlsZXMoKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2s6OmludmFsaWRh
dGVBbmRDYW5jZWwoKQoreworICAgIGNhbmNlbCgpOworICAgIGNsZWFyUmVxdWVzdCgpOworfQor
CitOZXR3b3JrRGF0YVRhc2s6OlN0YXRlIE5ldHdvcmtEYXRhVGFzazo6c3RhdGUoKSBjb25zdAor
eworICAgIHJldHVybiBtX3N0YXRlOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6dGltZW91
dEZpcmVkKCkKK3sKKyAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IG1fc3Rh
dGUgPT0gU3RhdGU6OkNvbXBsZXRlZCB8fCAhbV9jbGllbnQpIHsKKyAgICAgICAgY2xlYXJSZXF1
ZXN0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8TmV0d29ya0RhdGFU
YXNrPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIGludmFsaWRhdGVBbmRDYW5jZWwoKTsKKyAg
ICBtX2NsaWVudC0+ZGlkQ29tcGxldGVXaXRoRXJyb3IoUmVzb3VyY2VFcnJvcjo6dGltZW91dEVy
cm9yKG1fZmlyc3RSZXF1ZXN0LnVybCgpKSk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpz
dGFydFRpbWVvdXQoKQoreworICAgIGlmIChtX2ZpcnN0UmVxdWVzdC50aW1lb3V0SW50ZXJ2YWwo
KSA+IDApCisgICAgICAgIG1fdGltZW91dFNvdXJjZS5zdGFydE9uZVNob3QobV9maXJzdFJlcXVl
c3QudGltZW91dEludGVydmFsKCkpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6c3RvcFRp
bWVvdXQoKQoreworICAgIG1fdGltZW91dFNvdXJjZS5zdG9wKCk7Cit9CisKK3ZvaWQgTmV0d29y
a0RhdGFUYXNrOjpzZW5kUmVxdWVzdENhbGxiYWNrKFNvdXBSZXF1ZXN0KiBzb3VwUmVxdWVzdCwg
R0FzeW5jUmVzdWx0KiByZXN1bHQsIE5ldHdvcmtEYXRhVGFzayogdGFzaykKK3sKKyAgICBSZWZQ
dHI8TmV0d29ya0RhdGFUYXNrPiBwcm90ZWN0ZWRUaGlzID0gYWRvcHRSZWYodGFzayk7CisgICAg
aWYgKHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCB0YXNrLT5zdGF0ZSgpID09
IFN0YXRlOjpDb21wbGV0ZWQgfHwgIXRhc2stPm1fY2xpZW50KSB7CisgICAgICAgIHRhc2stPmNs
ZWFyUmVxdWVzdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFTU0VSVChzb3VwUmVx
dWVzdCA9PSB0YXNrLT5tX3NvdXBSZXF1ZXN0LmdldCgpKTsKKworICAgIGlmICh0YXNrLT5zdGF0
ZSgpID09IFN0YXRlOjpTdXNwZW5kZWQpIHsKKyAgICAgICAgQVNTRVJUKCF0YXNrLT5tX3BlbmRp
bmdSZXN1bHQpOworICAgICAgICB0YXNrLT5tX3BlbmRpbmdSZXN1bHQgPSByZXN1bHQ7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7Cisg
ICAgR1JlZlB0cjxHSW5wdXRTdHJlYW0+IGlucHV0U3RyZWFtID0gYWRvcHRHUmVmKHNvdXBfcmVx
dWVzdF9zZW5kX2ZpbmlzaChzb3VwUmVxdWVzdCwgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpKTsK
KyAgICBpZiAoZXJyb3IpCisgICAgICAgIHRhc2stPmRpZEZhaWwoUmVzb3VyY2VFcnJvcjo6aHR0
cEVycm9yKHRhc2stPm1fc291cE1lc3NhZ2UuZ2V0KCksIGVycm9yLmdldCgpLCBzb3VwUmVxdWVz
dCkpOworICAgIGVsc2UKKyAgICAgICAgdGFzay0+ZGlkU2VuZFJlcXVlc3QoV1RGTW92ZShpbnB1
dFN0cmVhbSkpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlkU2VuZFJlcXVlc3QoR1Jl
ZlB0cjxHSW5wdXRTdHJlYW0+JiYgaW5wdXRTdHJlYW0pCit7CisgICAgaWYgKG1fc291cE1lc3Nh
Z2UpIHsKKyAgICAgICAgaWYgKG1fc2hvdWxkQ29udGVudFNuaWZmID09IFNuaWZmQ29udGVudCAm
JiBtX3NvdXBNZXNzYWdlLT5zdGF0dXNfY29kZSAhPSBTT1VQX1NUQVRVU19OT1RfTU9ESUZJRUQp
CisgICAgICAgICAgICBtX3Jlc3BvbnNlLnNldFNuaWZmZWRDb250ZW50VHlwZShzb3VwX3JlcXVl
c3RfZ2V0X2NvbnRlbnRfdHlwZShtX3NvdXBSZXF1ZXN0LmdldCgpKSk7CisgICAgICAgIG1fcmVz
cG9uc2UudXBkYXRlRnJvbVNvdXBNZXNzYWdlKG1fc291cE1lc3NhZ2UuZ2V0KCkpOworCisgICAg
ICAgIGlmIChzaG91bGRTdGFydEhUVFBSZWRpcmVjdGlvbigpKSB7CisgICAgICAgICAgICBtX2lu
cHV0U3RyZWFtID0gV1RGTW92ZShpbnB1dFN0cmVhbSk7CisgICAgICAgICAgICBza2lwSW5wdXRT
dHJlYW1Gb3JSZWRpcmVjdGlvbigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKG1fcmVzcG9uc2UuaXNNdWx0aXBhcnQoKSkKKyAgICAgICAgICAgIG1fbXVs
dGlwYXJ0SW5wdXRTdHJlYW0gPSBhZG9wdEdSZWYoc291cF9tdWx0aXBhcnRfaW5wdXRfc3RyZWFt
X25ldyhtX3NvdXBNZXNzYWdlLmdldCgpLCBpbnB1dFN0cmVhbS5nZXQoKSkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBtX2lucHV0U3RyZWFtID0gV1RGTW92ZShpbnB1dFN0cmVhbSk7CisK
KyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICAgICAgbV9yZXNwb25zZS5uZXR3b3JrTG9hZFRp
bWluZygpLnJlc3BvbnNlU3RhcnQgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWVNUygpIC0g
bV9zdGFydFRpbWU7CisjZW5kaWYKKyAgICB9IGVsc2UgeworICAgICAgICBtX3Jlc3BvbnNlLnNl
dFVSTChtX2ZpcnN0UmVxdWVzdC51cmwoKSk7CisgICAgICAgIGNvbnN0IGdjaGFyKiBjb250ZW50
VHlwZSA9IHNvdXBfcmVxdWVzdF9nZXRfY29udGVudF90eXBlKG1fc291cFJlcXVlc3QuZ2V0KCkp
OworICAgICAgICBtX3Jlc3BvbnNlLnNldE1pbWVUeXBlKGV4dHJhY3RNSU1FVHlwZUZyb21NZWRp
YVR5cGUoY29udGVudFR5cGUpKTsKKyAgICAgICAgbV9yZXNwb25zZS5zZXRUZXh0RW5jb2RpbmdO
YW1lKGV4dHJhY3RDaGFyc2V0RnJvbU1lZGlhVHlwZShjb250ZW50VHlwZSkpOworICAgICAgICBt
X3Jlc3BvbnNlLnNldEV4cGVjdGVkQ29udGVudExlbmd0aChzb3VwX3JlcXVlc3RfZ2V0X2NvbnRl
bnRfbGVuZ3RoKG1fc291cFJlcXVlc3QuZ2V0KCkpKTsKKworICAgICAgICBtX2lucHV0U3RyZWFt
ID0gV1RGTW92ZShpbnB1dFN0cmVhbSk7CisgICAgfQorCisgICAgZGlkUmVjZWl2ZVJlc3BvbnNl
KCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRSZWNlaXZlUmVzcG9uc2UoKQorewor
ICAgIEFTU0VSVCghbV9yZXNwb25zZS5pc051bGwoKSk7CisKKyAgICBhdXRvIHJlc3BvbnNlID0g
UmVzb3VyY2VSZXNwb25zZShtX3Jlc3BvbnNlKTsKKyAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZVJl
c3BvbnNlTmV0d29ya1Nlc3Npb24oV1RGTW92ZShyZXNwb25zZSksIFt0aGlzLCBwcm90ZWN0ZWRU
aGlzID0gbWFrZVJlZigqdGhpcyldKFBvbGljeUFjdGlvbiBwb2xpY3lBY3Rpb24pIHsKKyAgICAg
ICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCBtX3N0YXRlID09IFN0YXRlOjpD
b21wbGV0ZWQpIHsKKyAgICAgICAgICAgIGNsZWFyUmVxdWVzdCgpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChwb2xpY3lBY3Rpb24pIHsKKyAgICAg
ICAgY2FzZSBQb2xpY3lBY3Rpb246OlBvbGljeVVzZToKKyAgICAgICAgICAgIGlmIChtX2lucHV0
U3RyZWFtKQorICAgICAgICAgICAgICAgIHJlYWQoKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG1f
bXVsdGlwYXJ0SW5wdXRTdHJlYW0pCisgICAgICAgICAgICAgICAgcmVxdWVzdE5leHRQYXJ0KCk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBvbGljeUFjdGlvbjo6UG9saWN5
SWdub3JlOgorICAgICAgICAgICAgY2xlYXJSZXF1ZXN0KCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBQb2xpY3lBY3Rpb246OlBvbGljeURvd25sb2FkOgorICAgICAgICAgICAg
ZG93bmxvYWQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSk7Cit9CisK
K3ZvaWQgTmV0d29ya0RhdGFUYXNrOjp0bHNFcnJvcnNDaGFuZ2VkQ2FsbGJhY2soU291cE1lc3Nh
Z2UqIHNvdXBNZXNzYWdlLCBHUGFyYW1TcGVjKiwgTmV0d29ya0RhdGFUYXNrKiB0YXNrKQorewor
ICAgIGlmICh0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgdGFzay0+c3RhdGUo
KSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICF0YXNrLT5tX2NsaWVudCkgeworICAgICAgICB0YXNr
LT5jbGVhclJlcXVlc3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVChz
b3VwTWVzc2FnZSA9PSB0YXNrLT5tX3NvdXBNZXNzYWdlLmdldCgpKTsKKyAgICB0YXNrLT50bHNF
cnJvcnNDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjp0bHNFcnJvcnNDaGFu
Z2VkKCkKK3sKKyAgICBBU1NFUlQobV9zb3VwUmVxdWVzdCk7CisgICAgU291cE5ldHdvcmtTZXNz
aW9uOjpjaGVja1RMU0Vycm9ycyhtX3NvdXBSZXF1ZXN0LmdldCgpLCBtX3NvdXBNZXNzYWdlLmdl
dCgpLCBbdGhpc10gKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKSB7CisgICAgICAgIGlmIChl
cnJvci5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBSZWZQdHI8TmV0
d29ya0RhdGFUYXNrPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgICAgICBpbnZhbGlkYXRlQW5k
Q2FuY2VsKCk7CisgICAgICAgIG1fY2xpZW50LT5kaWRDb21wbGV0ZVdpdGhFcnJvcihlcnJvcik7
CisgICAgfSk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjphcHBseUF1dGhlbnRpY2F0aW9u
VG9SZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICAvLyBXZSBhbHdheXMg
cHV0IHRoZSBjcmVkZW50aWFscyBpbnRvIHRoZSBVUkwuIEluIHRoZSBDb2NhIHBvcnQgSFRUUCBm
YW1pbHkgY3JlZGVudGlhbHMgYXJlIGFwcGxpZWQgaW4KKyAgICAvLyB0aGUgZGlkUmVjZWl2ZUNo
YWxsZW5nZSBjYWxsYmFjaywgYnV0IGxpYnNvdXAgcmVxdWlyZXMgdXMgdG8gdXNlIHRoaXMgbWV0
aG9kIHRvIG92ZXJyaWRlCisgICAgLy8gYW55IHByZXZpb3VzbHkgcmVtZW1iZXJlZCBjcmVkZW50
aWFscy4gSXQgaGFzIGl0cyBvd24gcGVyLXNlc3Npb24gY3JlZGVudGlhbCBzdG9yYWdlLgorICAg
IGF1dG8gdXJsID0gcmVxdWVzdC51cmwoKTsKKyAgICBpZiAoIW1faW5pdGlhbENyZWRlbnRpYWwu
aXNFbXB0eSgpKSB7CisgICAgICAgIHVybC5zZXRVc2VyKG1faW5pdGlhbENyZWRlbnRpYWwudXNl
cigpKTsKKyAgICAgICAgdXJsLnNldFBhc3MobV9pbml0aWFsQ3JlZGVudGlhbC5wYXNzd29yZCgp
KTsKKyAgICB9IGVsc2UgeworICAgICAgICB1cmwuc2V0VXNlcihtX3VzZXIpOworICAgICAgICB1
cmwuc2V0UGFzcyhtX3Bhc3N3b3JkKTsKKyAgICB9CisKKyAgICBtX3VzZXIgPSBTdHJpbmcoKTsK
KyAgICBtX3Bhc3N3b3JkID0gU3RyaW5nKCk7CisKKyAgICByZXF1ZXN0LnNldFVSTCh1cmwpOwor
fQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6YXV0aGVudGljYXRlQ2FsbGJhY2soU291cFNlc3Np
b24qIHNlc3Npb24sIFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSwgU291cEF1dGgqIHNvdXBBdXRo
LCBnYm9vbGVhbiByZXRyeWluZywgTmV0d29ya0RhdGFUYXNrKiB0YXNrKQoreworICAgIEFTU0VS
VChzZXNzaW9uID09IHRhc2stPm1fc2Vzc2lvbi0+c291cFNlc3Npb24oKSk7CisgICAgaWYgKHNv
dXBNZXNzYWdlICE9IHRhc2stPm1fc291cE1lc3NhZ2UuZ2V0KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmICh0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgdGFzay0+c3Rh
dGUoKSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICF0YXNrLT5tX2NsaWVudCkgeworICAgICAgICB0
YXNrLT5jbGVhclJlcXVlc3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHRhc2st
PmF1dGhlbnRpY2F0ZShBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShzb3VwTWVzc2FnZSwgc291cEF1
dGgsIHJldHJ5aW5nKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0F1dGhlbnRpY2F0aW9u
RmFpbHVyZVN0YXR1c0NvZGUoaW50IGh0dHBTdGF0dXNDb2RlKQoreworICAgIHJldHVybiBodHRw
U3RhdHVzQ29kZSA9PSBTT1VQX1NUQVRVU19QUk9YWV9BVVRIRU5USUNBVElPTl9SRVFVSVJFRCB8
fCBodHRwU3RhdHVzQ29kZSA9PSBTT1VQX1NUQVRVU19VTkFVVEhPUklaRUQ7Cit9CisKK3ZvaWQg
TmV0d29ya0RhdGFUYXNrOjphdXRoZW50aWNhdGUoQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmJiBj
aGFsbGVuZ2UpCit7CisgICAgQVNTRVJUKG1fc291cE1lc3NhZ2UpOworICAgIGlmIChtX3N0b3Jl
ZENyZWRlbnRpYWxzID09IEFsbG93U3RvcmVkQ3JlZGVudGlhbHMpIHsKKyAgICAgICAgaWYgKCFt
X2luaXRpYWxDcmVkZW50aWFsLmlzRW1wdHkoKSB8fCBjaGFsbGVuZ2UucHJldmlvdXNGYWlsdXJl
Q291bnQoKSkgeworICAgICAgICAgICAgLy8gVGhlIHN0b3JlZCBjcmVkZW50aWFsIHdhc24ndCBh
Y2NlcHRlZCwgc3RvcCB1c2luZyBpdC4gVGhlcmUgaXMgYSByYWNlIGNvbmRpdGlvbgorICAgICAg
ICAgICAgLy8gaGVyZSwgc2luY2UgYSBkaWZmZXJlbnQgY3JlZGVudGlhbCBtaWdodCBoYXZlIGFs
cmVhZHkgYmVlbiBzdG9yZWQgYnkgYW5vdGhlcgorICAgICAgICAgICAgLy8gTmV0d29ya0RhdGFU
YXNrLCBidXQgdGhlIG9ic2VydmFibGUgZWZmZWN0IHNob3VsZCBiZSB2ZXJ5IG1pbm9yLCBpZiBh
bnkuCisgICAgICAgICAgICBtX3Nlc3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpLmNyZWRl
bnRpYWxTdG9yYWdlKCkucmVtb3ZlKGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKSk7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoIWNoYWxsZW5nZS5wcmV2aW91c0ZhaWx1cmVDb3VudCgpKSB7
CisgICAgICAgICAgICBhdXRvIGNyZWRlbnRpYWwgPSBtX3Nlc3Npb24tPm5ldHdvcmtTdG9yYWdl
U2Vzc2lvbigpLmNyZWRlbnRpYWxTdG9yYWdlKCkuZ2V0KGNoYWxsZW5nZS5wcm90ZWN0aW9uU3Bh
Y2UoKSk7CisgICAgICAgICAgICBpZiAoIWNyZWRlbnRpYWwuaXNFbXB0eSgpICYmIGNyZWRlbnRp
YWwgIT0gbV9pbml0aWFsQ3JlZGVudGlhbCkgeworICAgICAgICAgICAgICAgIEFTU0VSVChjcmVk
ZW50aWFsLnBlcnNpc3RlbmNlKCkgPT0gQ3JlZGVudGlhbFBlcnNpc3RlbmNlTm9uZSk7CisKKyAg
ICAgICAgICAgICAgICBpZiAoaXNBdXRoZW50aWNhdGlvbkZhaWx1cmVTdGF0dXNDb2RlKGNoYWxs
ZW5nZS5mYWlsdXJlUmVzcG9uc2UoKS5odHRwU3RhdHVzQ29kZSgpKSkgeworICAgICAgICAgICAg
ICAgICAgICAvLyBTdG9yZSB0aGUgY3JlZGVudGlhbCBiYWNrLCBwb3NzaWJseSBhZGRpbmcgaXQg
YXMgYSBkZWZhdWx0IGZvciB0aGlzIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgbV9z
ZXNzaW9uLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKS5jcmVkZW50aWFsU3RvcmFnZSgpLnNldChj
cmVkZW50aWFsLCBjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCksIGNoYWxsZW5nZS5mYWlsdXJl
UmVzcG9uc2UoKS51cmwoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNv
dXBfYXV0aF9hdXRoZW50aWNhdGUoY2hhbGxlbmdlLnNvdXBBdXRoKCksIGNyZWRlbnRpYWwudXNl
cigpLnV0ZjgoKS5kYXRhKCksIGNyZWRlbnRpYWwucGFzc3dvcmQoKS51dGY4KCkuZGF0YSgpKTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBzb3VwX3Nlc3Npb25fcGF1c2VfbWVzc2FnZShtX3Nlc3Npb24tPnNvdXBTZXNzaW9u
KCksIG1fc291cE1lc3NhZ2UuZ2V0KCkpOworCisgICAgLy8gV2UgY291bGQgYWxzbyBkbyB0aGlz
IGJlZm9yZSB3ZSBldmVuIHN0YXJ0IHRoZSByZXF1ZXN0LCBidXQgdGhhdCB3b3VsZCBiZSBhdCB0
aGUgZXhwZW5zZQorICAgIC8vIG9mIGFsbCByZXF1ZXN0IGxhdGVuY3ksIHZlcnN1cyBhIG9uZS10
aW1lIGxhdGVuY3kgZm9yIHRoZSBzbWFsbCBzdWJzZXQgb2YgcmVxdWVzdHMgdGhhdAorICAgIC8v
IHVzZSBIVFRQIGF1dGhlbnRpY2F0aW9uLiBJbiB0aGUgZW5kLCB0aGlzIGRvZXNuJ3QgbWF0dGVy
IG11Y2gsIGJlY2F1c2UgcGVyc2lzdGVudCBjcmVkZW50aWFscworICAgIC8vIHdpbGwgYmVjb21l
IHNlc3Npb24gY3JlZGVudGlhbHMgYWZ0ZXIgdGhlIGZpcnN0IHVzZS4KKyAgICBpZiAobV9zdG9y
ZWRDcmVkZW50aWFscyA9PSBBbGxvd1N0b3JlZENyZWRlbnRpYWxzKSB7CisgICAgICAgIGF1dG8g
cHJvdGVjdGlvblNwYWNlID0gY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZSgpOworICAgICAgICBt
X3Nlc3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpLmdldENyZWRlbnRpYWxGcm9tUGVyc2lz
dGVudFN0b3JhZ2UocHJvdGVjdGlvblNwYWNlLAorICAgICAgICAgICAgW3RoaXMsIHByb3RlY3Rl
ZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgYXV0aENoYWxsZW5nZSA9IFdURk1vdmUoY2hhbGxlbmdl
KV0gKENyZWRlbnRpYWwmJiBjcmVkZW50aWFsKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBp
ZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBs
ZXRlZCB8fCAhbV9jbGllbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgY2xlYXJSZXF1ZXN0KCk7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICBhdXRoQ2hhbGxlbmdlLnNldFByb3Bvc2VkQ3JlZGVudGlhbChXVEZNb3ZlKGNy
ZWRlbnRpYWwpKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZUF1dGhlbnRpY2F0ZShXVEZNb3Zl
KGF1dGhDaGFsbGVuZ2UpKTsKKyAgICAgICAgfSk7CisgICAgfSBlbHNlCisgICAgICAgIGNvbnRp
bnVlQXV0aGVudGljYXRlKFdURk1vdmUoY2hhbGxlbmdlKSk7Cit9CisKK3ZvaWQgTmV0d29ya0Rh
dGFUYXNrOjpjb250aW51ZUF1dGhlbnRpY2F0ZShBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYmIGNo
YWxsZW5nZSkKK3sKKyAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZUNoYWxsZW5nZShjaGFsbGVuZ2Us
IFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNoYWxsZW5nZV0oQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbiBkaXNwb3NpdGlvbiwgY29uc3QgQ3JlZGVudGlh
bCYgY3JlZGVudGlhbCkgeworICAgICAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2FuY2VsaW5n
IHx8IG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZCkgeworICAgICAgICAgICAgY2xlYXJSZXF1
ZXN0KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoZGlz
cG9zaXRpb24gPT0gQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbjo6Q2FuY2VsKSB7
CisgICAgICAgICAgICBjYW5jZWwoKTsKKyAgICAgICAgICAgIGRpZEZhaWwoY2FuY2VsbGVkRXJy
b3IobV9zb3VwUmVxdWVzdC5nZXQoKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGRpc3Bvc2l0aW9uID09IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlz
cG9zaXRpb246OlVzZUNyZWRlbnRpYWwgJiYgIWNyZWRlbnRpYWwuaXNFbXB0eSgpKSB7CisgICAg
ICAgICAgICBpZiAobV9zdG9yZWRDcmVkZW50aWFscyA9PSBBbGxvd1N0b3JlZENyZWRlbnRpYWxz
KSB7CisgICAgICAgICAgICAgICAgLy8gRXZlbnR1YWxseSB3ZSB3aWxsIG1hbmFnZSBwZXItc2Vz
c2lvbiBjcmVkZW50aWFscyBvbmx5IGludGVybmFsbHkgb3IgdXNlIHNvbWUgbmV3bHktZXhwb3Nl
ZCBBUEkgZnJvbSBsaWJzb3VwLAorICAgICAgICAgICAgICAgIC8vIGJlY2F1c2Ugb25jZSB3ZSBh
dXRoZW50aWNhdGUgdmlhIGxpYnNvdXAsIHRoZXJlIGlzIG5vIHdheSB0byBpZ25vcmUgaXQgZm9y
IGEgcGFydGljdWxhciByZXF1ZXN0LiBSaWdodCBub3csCisgICAgICAgICAgICAgICAgLy8gd2Ug
cGxhY2UgdGhlIGNyZWRlbnRpYWxzIGluIHRoZSBzdG9yZSBldmVuIHRob3VnaCBsaWJzb3VwIHdp
bGwgbmV2ZXIgZmlyZSB0aGUgYXV0aGVudGljYXRlIHNpZ25hbCBhZ2FpbiBmb3IKKyAgICAgICAg
ICAgICAgICAvLyB0aGlzIHByb3RlY3Rpb24gc3BhY2UuCisgICAgICAgICAgICAgICAgaWYgKGNy
ZWRlbnRpYWwucGVyc2lzdGVuY2UoKSA9PSBDcmVkZW50aWFsUGVyc2lzdGVuY2VGb3JTZXNzaW9u
IHx8IGNyZWRlbnRpYWwucGVyc2lzdGVuY2UoKSA9PSBDcmVkZW50aWFsUGVyc2lzdGVuY2VQZXJt
YW5lbnQpCisgICAgICAgICAgICAgICAgICAgIG1fc2Vzc2lvbi0+bmV0d29ya1N0b3JhZ2VTZXNz
aW9uKCkuY3JlZGVudGlhbFN0b3JhZ2UoKS5zZXQoY3JlZGVudGlhbCwgY2hhbGxlbmdlLnByb3Rl
Y3Rpb25TcGFjZSgpLCBjaGFsbGVuZ2UuZmFpbHVyZVJlc3BvbnNlKCkudXJsKCkpOworCisgICAg
ICAgICAgICAgICAgaWYgKGNyZWRlbnRpYWwucGVyc2lzdGVuY2UoKSA9PSBDcmVkZW50aWFsUGVy
c2lzdGVuY2VQZXJtYW5lbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9wcm90ZWN0aW9uU3Bh
Y2VGb3JQZXJzaXN0ZW50U3RvcmFnZSA9IGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKTsKKyAg
ICAgICAgICAgICAgICAgICAgbV9jcmVkZW50aWFsRm9yUGVyc2lzdGVudFN0b3JhZ2UgPSBjcmVk
ZW50aWFsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
c291cF9hdXRoX2F1dGhlbnRpY2F0ZShjaGFsbGVuZ2Uuc291cEF1dGgoKSwgY3JlZGVudGlhbC51
c2VyKCkudXRmOCgpLmRhdGEoKSwgY3JlZGVudGlhbC5wYXNzd29yZCgpLnV0ZjgoKS5kYXRhKCkp
OworICAgICAgICB9CisKKyAgICAgICAgc291cF9zZXNzaW9uX3VucGF1c2VfbWVzc2FnZShtX3Nl
c3Npb24tPnNvdXBTZXNzaW9uKCksIG1fc291cE1lc3NhZ2UuZ2V0KCkpOworICAgIH0pOworfQor
Cit2b2lkIE5ldHdvcmtEYXRhVGFzazo6c2tpcElucHV0U3RyZWFtRm9yUmVkaXJlY3Rpb25DYWxs
YmFjayhHSW5wdXRTdHJlYW0qIGlucHV0U3RyZWFtLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgTmV0
d29ya0RhdGFUYXNrKiB0YXNrKQoreworICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2s+IHByb3Rl
Y3RlZFRoaXMgPSBhZG9wdFJlZih0YXNrKTsKKyAgICBpZiAodGFzay0+c3RhdGUoKSA9PSBTdGF0
ZTo6Q2FuY2VsaW5nIHx8IHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNvbXBsZXRlZCB8fCAhdGFz
ay0+bV9jbGllbnQpIHsKKyAgICAgICAgdGFzay0+Y2xlYXJSZXF1ZXN0KCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgQVNTRVJUKGlucHV0U3RyZWFtID09IHRhc2stPm1faW5wdXRTdHJl
YW0uZ2V0KCkpOworCisgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOworICAgIGdzc2l6
ZSBieXRlc1NraXBwZWQgPSBnX2lucHV0X3N0cmVhbV9za2lwX2ZpbmlzaChpbnB1dFN0cmVhbSwg
cmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGlmIChlcnJvcikKKyAgICAgICAgdGFzay0+
ZGlkRmFpbChSZXNvdXJjZUVycm9yOjpnZW5lcmljR0Vycm9yKGVycm9yLmdldCgpLCB0YXNrLT5t
X3NvdXBSZXF1ZXN0LmdldCgpKSk7CisgICAgZWxzZSBpZiAoYnl0ZXNTa2lwcGVkID4gMCkKKyAg
ICAgICAgdGFzay0+c2tpcElucHV0U3RyZWFtRm9yUmVkaXJlY3Rpb24oKTsKKyAgICBlbHNlCisg
ICAgICAgIHRhc2stPmRpZEZpbmlzaFNraXBJbnB1dFN0cmVhbUZvclJlZGlyZWN0aW9uKCk7Cit9
CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpza2lwSW5wdXRTdHJlYW1Gb3JSZWRpcmVjdGlvbigp
Cit7CisgICAgQVNTRVJUKG1faW5wdXRTdHJlYW0pOworICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRh
c2s+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgZ19pbnB1dF9zdHJlYW1fc2tpcF9hc3luYyht
X2lucHV0U3RyZWFtLmdldCgpLCBnRGVmYXVsdFJlYWRCdWZmZXJTaXplLCBHX1BSSU9SSVRZX0RF
RkFVTFQsIG1fY2FuY2VsbGFibGUuZ2V0KCksCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0Fz
eW5jUmVhZHlDYWxsYmFjaz4oc2tpcElucHV0U3RyZWFtRm9yUmVkaXJlY3Rpb25DYWxsYmFjayks
IHByb3RlY3RlZFRoaXMubGVha1JlZigpKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRp
ZEZpbmlzaFNraXBJbnB1dFN0cmVhbUZvclJlZGlyZWN0aW9uKCkKK3sKKyAgICBnX2lucHV0X3N0
cmVhbV9jbG9zZShtX2lucHV0U3RyZWFtLmdldCgpLCBudWxscHRyLCBudWxscHRyKTsKKyAgICBj
b250aW51ZUhUVFBSZWRpcmVjdGlvbigpOworfQorCitzdGF0aWMgYm9vbCBzaG91bGRSZWRpcmVj
dEFzR0VUKFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBib29sIGNyb3NzT3JpZ2luKQoreworICAgIGlm
IChtZXNzYWdlLT5tZXRob2QgPT0gU09VUF9NRVRIT0RfR0VUIHx8IG1lc3NhZ2UtPm1ldGhvZCA9
PSBTT1VQX01FVEhPRF9IRUFEKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2gg
KG1lc3NhZ2UtPnN0YXR1c19jb2RlKSB7CisgICAgY2FzZSBTT1VQX1NUQVRVU19TRUVfT1RIRVI6
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgU09VUF9TVEFUVVNfRk9VTkQ6CisgICAg
Y2FzZSBTT1VQX1NUQVRVU19NT1ZFRF9QRVJNQU5FTlRMWToKKyAgICAgICAgaWYgKG1lc3NhZ2Ut
Pm1ldGhvZCA9PSBTT1VQX01FVEhPRF9QT1NUKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChjcm9zc09yaWdpbiAmJiBtZXNzYWdlLT5t
ZXRob2QgPT0gU09VUF9NRVRIT0RfREVMRVRFKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBOZXR3b3JrRGF0YVRhc2s6OnNob3VsZFN0YXJ0SFRU
UFJlZGlyZWN0aW9uKCkKK3sKKyAgICBBU1NFUlQobV9zb3VwTWVzc2FnZSk7CisgICAgQVNTRVJU
KCFtX3Jlc3BvbnNlLmlzTnVsbCgpKTsKKworICAgIGF1dG8gc3RhdHVzID0gbV9yZXNwb25zZS5o
dHRwU3RhdHVzQ29kZSgpOworICAgIGlmICghU09VUF9TVEFUVVNfSVNfUkVESVJFQ1RJT04oc3Rh
dHVzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gU29tZSAzeHggc3RhdHVzIGNv
ZGVzIGFyZW4ndCBhY3R1YWxseSByZWRpcmVjdHMuCisgICAgaWYgKHN0YXR1cyA9PSAzMDAgfHwg
c3RhdHVzID09IDMwNCB8fCBzdGF0dXMgPT0gMzA1IHx8IHN0YXR1cyA9PSAzMDYpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChIVFRQ
SGVhZGVyTmFtZTo6TG9jYXRpb24pLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpjb250aW51ZUhU
VFBSZWRpcmVjdGlvbigpCit7CisgICAgQVNTRVJUKG1fc291cE1lc3NhZ2UpOworICAgIEFTU0VS
VCghbV9yZXNwb25zZS5pc051bGwoKSk7CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4
UmVkaXJlY3RzID0gMjA7CisgICAgaWYgKG1fcmVkaXJlY3RDb3VudCsrID4gbWF4UmVkaXJlY3Rz
KSB7CisgICAgICAgIGRpZEZhaWwoUmVzb3VyY2VFcnJvcjo6dHJhbnNwb3J0RXJyb3IobV9zb3Vw
UmVxdWVzdC5nZXQoKSwgU09VUF9TVEFUVVNfVE9PX01BTllfUkVESVJFQ1RTLCAiVG9vIG1hbnkg
cmVkaXJlY3RzIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVzb3VyY2VSZXF1
ZXN0IHJlcXVlc3QgPSBtX2ZpcnN0UmVxdWVzdDsKKyAgICByZXF1ZXN0LnNldFVSTChVUkwobV9y
ZXNwb25zZS51cmwoKSwgbV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6
OkxvY2F0aW9uKSkpOworICAgIHJlcXVlc3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMocmVxdWVz
dC51cmwoKSk7CisKKyAgICAvLyBTaG91bGQgbm90IHNldCBSZWZlcmVyIGFmdGVyIGEgcmVkaXJl
Y3QgZnJvbSBhIHNlY3VyZSByZXNvdXJjZSB0byBub24tc2VjdXJlIG9uZS4KKyAgICBpZiAobV9z
aG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0ICYmICFyZXF1ZXN0LnVybCgp
LnByb3RvY29sSXMoImh0dHBzIikgJiYgcHJvdG9jb2xJcyhyZXF1ZXN0Lmh0dHBSZWZlcnJlcigp
LCAiaHR0cHMiKSkKKyAgICAgICAgcmVxdWVzdC5jbGVhckhUVFBSZWZlcnJlcigpOworCisgICAg
Ym9vbCBpc0Nyb3NzT3JpZ2luID0gIXByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVhbChtX2ZpcnN0
UmVxdWVzdC51cmwoKSwgcmVxdWVzdC51cmwoKSk7CisgICAgaWYgKCFlcXVhbExldHRlcnNJZ25v
cmluZ0FTQ0lJQ2FzZShyZXF1ZXN0Lmh0dHBNZXRob2QoKSwgIkdFVCIpKSB7CisgICAgICAgIC8v
IENoYW5nZSBuZXdSZXF1ZXN0IG1ldGhvZCB0byBHRVQgaWYgY2hhbmdlIHdhcyBtYWRlIGR1cmlu
ZyBhIHByZXZpb3VzIHJlZGlyZWN0aW9uIG9yIGlmIGN1cnJlbnQgcmVkaXJlY3Rpb24gc2F5cyBz
by4KKyAgICAgICAgaWYgKG1fc291cE1lc3NhZ2UtPm1ldGhvZCA9PSBTT1VQX01FVEhPRF9HRVQg
fHwgIXJlcXVlc3QudXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpIHx8IHNob3VsZFJlZGly
ZWN0QXNHRVQobV9zb3VwTWVzc2FnZS5nZXQoKSwgaXNDcm9zc09yaWdpbikpIHsKKyAgICAgICAg
ICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhvZCgiR0VUIik7CisgICAgICAgICAgICByZXF1ZXN0LnNl
dEhUVFBCb2R5KG51bGxwdHIpOworICAgICAgICAgICAgcmVxdWVzdC5jbGVhckhUVFBDb250ZW50
VHlwZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgY29uc3QgYXV0byYgdXJsID0gcmVxdWVz
dC51cmwoKTsKKyAgICBtX3VzZXIgPSB1cmwudXNlcigpOworICAgIG1fcGFzc3dvcmQgPSB1cmwu
cGFzcygpOworICAgIG1fbGFzdEhUVFBNZXRob2QgPSByZXF1ZXN0Lmh0dHBNZXRob2QoKTsKKyAg
ICByZXF1ZXN0LnJlbW92ZUNyZWRlbnRpYWxzKCk7CisKKyAgICBpZiAoaXNDcm9zc09yaWdpbikg
eworICAgICAgICAvLyBUaGUgbmV0d29yayBsYXllciBtaWdodCBjYXJyeSBvdmVyIHNvbWUgaGVh
ZGVycyBmcm9tIHRoZSBvcmlnaW5hbCByZXF1ZXN0IHRoYXQKKyAgICAgICAgLy8gd2Ugd2FudCB0
byBzdHJpcCBoZXJlIGJlY2F1c2UgdGhlIHJlZGlyZWN0IGlzIGNyb3NzLW9yaWdpbi4KKyAgICAg
ICAgcmVxdWVzdC5jbGVhckhUVFBBdXRob3JpemF0aW9uKCk7CisgICAgICAgIHJlcXVlc3QuY2xl
YXJIVFRQT3JpZ2luKCk7CisgICAgfSBlbHNlIGlmICh1cmwucHJvdG9jb2xJc0luSFRUUEZhbWls
eSgpICYmIG1fc3RvcmVkQ3JlZGVudGlhbHMgPT0gQWxsb3dTdG9yZWRDcmVkZW50aWFscykgewor
ICAgICAgICBpZiAobV91c2VyLmlzRW1wdHkoKSAmJiBtX3Bhc3N3b3JkLmlzRW1wdHkoKSkgewor
ICAgICAgICAgICAgYXV0byBjcmVkZW50aWFsID0gbV9zZXNzaW9uLT5uZXR3b3JrU3RvcmFnZVNl
c3Npb24oKS5jcmVkZW50aWFsU3RvcmFnZSgpLmdldChyZXF1ZXN0LnVybCgpKTsKKyAgICAgICAg
ICAgIGlmICghY3JlZGVudGlhbC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgbV9pbml0aWFs
Q3JlZGVudGlhbCA9IGNyZWRlbnRpYWw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbGVhclJl
cXVlc3QoKTsKKworICAgIGF1dG8gcmVzcG9uc2UgPSBSZXNvdXJjZVJlc3BvbnNlKG1fcmVzcG9u
c2UpOworICAgIG1fY2xpZW50LT53aWxsUGVyZm9ybUhUVFBSZWRpcmVjdGlvbihXVEZNb3ZlKHJl
c3BvbnNlKSwgV1RGTW92ZShyZXF1ZXN0KSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVm
KCp0aGlzKSwgaXNDcm9zc09yaWdpbl0oY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBuZXdSZXF1ZXN0
KSB7CisgICAgICAgIGlmIChuZXdSZXF1ZXN0LmlzTnVsbCgpIHx8IG1fc3RhdGUgPT0gU3RhdGU6
OkNhbmNlbGluZykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBhdXRvIHJlcXVlc3Qg
PSBuZXdSZXF1ZXN0OworICAgICAgICBpZiAocmVxdWVzdC51cmwoKS5wcm90b2NvbElzSW5IVFRQ
RmFtaWx5KCkpIHsKKyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICAgICAgICAgIGlmIChpc0Ny
b3NzT3JpZ2luKQorICAgICAgICAgICAgICAgIG1fc3RhcnRUaW1lID0gbW9ub3RvbmljYWxseUlu
Y3JlYXNpbmdUaW1lTVMoKTsKKyNlbmRpZgorICAgICAgICAgICAgYXBwbHlBdXRoZW50aWNhdGlv
blRvUmVxdWVzdChyZXF1ZXN0KTsKKyAgICAgICAgfQorICAgICAgICBjcmVhdGVSZXF1ZXN0KHJl
cXVlc3QpOworICAgICAgICBpZiAobV9zb3VwUmVxdWVzdCAmJiBtX3N0YXRlICE9IFN0YXRlOjpT
dXNwZW5kZWQpIHsKKyAgICAgICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6U3VzcGVuZGVkOworICAg
ICAgICAgICAgcmVzdW1lKCk7CisgICAgICAgIH0KKyAgICB9KTsKK30KKwordm9pZCBOZXR3b3Jr
RGF0YVRhc2s6OnJlYWRDYWxsYmFjayhHSW5wdXRTdHJlYW0qIGlucHV0U3RyZWFtLCBHQXN5bmNS
ZXN1bHQqIHJlc3VsdCwgTmV0d29ya0RhdGFUYXNrKiB0YXNrKQoreworICAgIFJlZlB0cjxOZXR3
b3JrRGF0YVRhc2s+IHByb3RlY3RlZFRoaXMgPSBhZG9wdFJlZih0YXNrKTsKKyAgICBpZiAodGFz
ay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6
OkNvbXBsZXRlZCB8fCAoIXRhc2stPm1fY2xpZW50ICYmICF0YXNrLT5pc0Rvd25sb2FkKCkpKSB7
CisgICAgICAgIHRhc2stPmNsZWFyUmVxdWVzdCgpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIEFTU0VSVChpbnB1dFN0cmVhbSA9PSB0YXNrLT5tX2lucHV0U3RyZWFtLmdldCgpKTsKKwor
ICAgIGlmICh0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpTdXNwZW5kZWQpIHsKKyAgICAgICAgQVNT
RVJUKCF0YXNrLT5tX3BlbmRpbmdSZXN1bHQpOworICAgICAgICB0YXNrLT5tX3BlbmRpbmdSZXN1
bHQgPSByZXN1bHQ7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBHVW5pcXVlT3V0UHRy
PEdFcnJvcj4gZXJyb3I7CisgICAgZ3NzaXplIGJ5dGVzUmVhZCA9IGdfaW5wdXRfc3RyZWFtX3Jl
YWRfZmluaXNoKGlucHV0U3RyZWFtLCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSk7CisgICAgaWYg
KGVycm9yKQorICAgICAgICB0YXNrLT5kaWRGYWlsKFJlc291cmNlRXJyb3I6OmdlbmVyaWNHRXJy
b3IoZXJyb3IuZ2V0KCksIHRhc2stPm1fc291cFJlcXVlc3QuZ2V0KCkpKTsKKyAgICBlbHNlIGlm
IChieXRlc1JlYWQgPiAwKQorICAgICAgICB0YXNrLT5kaWRSZWFkKGJ5dGVzUmVhZCk7CisgICAg
ZWxzZQorICAgICAgICB0YXNrLT5kaWRGaW5pc2hSZWFkKCk7Cit9CisKK3ZvaWQgTmV0d29ya0Rh
dGFUYXNrOjpyZWFkKCkKK3sKKyAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrPiBwcm90ZWN0ZWRU
aGlzKHRoaXMpOworICAgIEFTU0VSVChtX2lucHV0U3RyZWFtKTsKKyAgICBtX3JlYWRCdWZmZXIu
Z3JvdyhnRGVmYXVsdFJlYWRCdWZmZXJTaXplKTsKKyAgICBnX2lucHV0X3N0cmVhbV9yZWFkX2Fz
eW5jKG1faW5wdXRTdHJlYW0uZ2V0KCksIG1fcmVhZEJ1ZmZlci5kYXRhKCksIG1fcmVhZEJ1ZmZl
ci5zaXplKCksIEdfUFJJT1JJVFlfREVGQVVMVCwgbV9jYW5jZWxsYWJsZS5nZXQoKSwKKyAgICAg
ICAgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihyZWFkQ2FsbGJhY2spLCBw
cm90ZWN0ZWRUaGlzLmxlYWtSZWYoKSk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRS
ZWFkKGdzc2l6ZSBieXRlc1JlYWQpCit7CisgICAgbV9yZWFkQnVmZmVyLnNocmluayhieXRlc1Jl
YWQpOworICAgIGlmIChtX2Rvd25sb2FkT3V0cHV0U3RyZWFtKSB7CisgICAgICAgIEFTU0VSVChp
c0Rvd25sb2FkKCkpOworICAgICAgICB3cml0ZURvd25sb2FkKCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgQVNTRVJUKG1fY2xpZW50KTsKKyAgICAgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVEYXRh
KFNoYXJlZEJ1ZmZlcjo6YWRvcHRWZWN0b3IobV9yZWFkQnVmZmVyKSk7CisgICAgICAgIHJlYWQo
KTsKKyAgICB9Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRGaW5pc2hSZWFkKCkKK3sK
KyAgICBBU1NFUlQobV9pbnB1dFN0cmVhbSk7CisgICAgZ19pbnB1dF9zdHJlYW1fY2xvc2UobV9p
bnB1dFN0cmVhbS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgbV9pbnB1dFN0cmVhbSA9
IG51bGxwdHI7CisgICAgaWYgKG1fbXVsdGlwYXJ0SW5wdXRTdHJlYW0pIHsKKyAgICAgICAgcmVx
dWVzdE5leHRQYXJ0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9kb3du
bG9hZE91dHB1dFN0cmVhbSkgeworICAgICAgICBkaWRGaW5pc2hEb3dubG9hZCgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgY2xlYXJSZXF1ZXN0KCk7CisgICAgQVNTRVJUKG1fY2xp
ZW50KTsKKyAgICBtX2NsaWVudC0+ZGlkQ29tcGxldGVXaXRoRXJyb3IoeyB9KTsKK30KKwordm9p
ZCBOZXR3b3JrRGF0YVRhc2s6OnJlcXVlc3ROZXh0UGFydENhbGxiYWNrKFNvdXBNdWx0aXBhcnRJ
bnB1dFN0cmVhbSogbXVsdGlwYXJ0SW5wdXRTdHJlYW0sIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBO
ZXR3b3JrRGF0YVRhc2sqIHRhc2spCit7CisgICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4gcHJv
dGVjdGVkVGhpcyA9IGFkb3B0UmVmKHRhc2spOworICAgIGlmICh0YXNrLT5zdGF0ZSgpID09IFN0
YXRlOjpDYW5jZWxpbmcgfHwgdGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICF0
YXNrLT5tX2NsaWVudCkgeworICAgICAgICB0YXNrLT5jbGVhclJlcXVlc3QoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBBU1NFUlQobXVsdGlwYXJ0SW5wdXRTdHJlYW0gPT0gdGFzay0+
bV9tdWx0aXBhcnRJbnB1dFN0cmVhbS5nZXQoKSk7CisKKyAgICBpZiAodGFzay0+c3RhdGUoKSA9
PSBTdGF0ZTo6U3VzcGVuZGVkKSB7CisgICAgICAgIEFTU0VSVCghdGFzay0+bV9wZW5kaW5nUmVz
dWx0KTsKKyAgICAgICAgdGFzay0+bV9wZW5kaW5nUmVzdWx0ID0gcmVzdWx0OworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOworICAgIEdS
ZWZQdHI8R0lucHV0U3RyZWFtPiBpbnB1dFN0cmVhbSA9IGFkb3B0R1JlZihzb3VwX211bHRpcGFy
dF9pbnB1dF9zdHJlYW1fbmV4dF9wYXJ0X2ZpbmlzaChtdWx0aXBhcnRJbnB1dFN0cmVhbSwgcmVz
dWx0LCAmZXJyb3Iub3V0UHRyKCkpKTsKKyAgICBpZiAoZXJyb3IpCisgICAgICAgIHRhc2stPmRp
ZEZhaWwoUmVzb3VyY2VFcnJvcjo6aHR0cEVycm9yKHRhc2stPm1fc291cE1lc3NhZ2UuZ2V0KCks
IGVycm9yLmdldCgpLCB0YXNrLT5tX3NvdXBSZXF1ZXN0LmdldCgpKSk7CisgICAgZWxzZSBpZiAo
aW5wdXRTdHJlYW0pCisgICAgICAgIHRhc2stPmRpZFJlcXVlc3ROZXh0UGFydChXVEZNb3ZlKGlu
cHV0U3RyZWFtKSk7CisgICAgZWxzZQorICAgICAgICB0YXNrLT5kaWRGaW5pc2hSZXF1ZXN0TmV4
dFBhcnQoKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2s6OnJlcXVlc3ROZXh0UGFydCgpCit7
CisgICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBB
U1NFUlQobV9tdWx0aXBhcnRJbnB1dFN0cmVhbSk7CisgICAgQVNTRVJUKCFtX2lucHV0U3RyZWFt
KTsKKyAgICBzb3VwX211bHRpcGFydF9pbnB1dF9zdHJlYW1fbmV4dF9wYXJ0X2FzeW5jKG1fbXVs
dGlwYXJ0SW5wdXRTdHJlYW0uZ2V0KCksIEdfUFJJT1JJVFlfREVGQVVMVCwgbV9jYW5jZWxsYWJs
ZS5nZXQoKSwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihy
ZXF1ZXN0TmV4dFBhcnRDYWxsYmFjayksIHByb3RlY3RlZFRoaXMubGVha1JlZigpKTsKK30KKwor
dm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZFJlcXVlc3ROZXh0UGFydChHUmVmUHRyPEdJbnB1dFN0
cmVhbT4mJiBpbnB1dFN0cmVhbSkKK3sKKyAgICBBU1NFUlQoIW1faW5wdXRTdHJlYW0pOworICAg
IG1faW5wdXRTdHJlYW0gPSBXVEZNb3ZlKGlucHV0U3RyZWFtKTsKKyAgICBtX3Jlc3BvbnNlID0g
UmVzb3VyY2VSZXNwb25zZSgpOworICAgIG1fcmVzcG9uc2Uuc2V0VVJMKG1fZmlyc3RSZXF1ZXN0
LnVybCgpKTsKKyAgICBtX3Jlc3BvbnNlLnVwZGF0ZUZyb21Tb3VwTWVzc2FnZUhlYWRlcnMoc291
cF9tdWx0aXBhcnRfaW5wdXRfc3RyZWFtX2dldF9oZWFkZXJzKG1fbXVsdGlwYXJ0SW5wdXRTdHJl
YW0uZ2V0KCkpKTsKKyAgICBkaWRSZWNlaXZlUmVzcG9uc2UoKTsKK30KKwordm9pZCBOZXR3b3Jr
RGF0YVRhc2s6OmRpZEZpbmlzaFJlcXVlc3ROZXh0UGFydCgpCit7CisgICAgQVNTRVJUKCFtX2lu
cHV0U3RyZWFtKTsKKyAgICBBU1NFUlQobV9tdWx0aXBhcnRJbnB1dFN0cmVhbSk7CisgICAgZ19p
bnB1dF9zdHJlYW1fY2xvc2UoR19JTlBVVF9TVFJFQU0obV9tdWx0aXBhcnRJbnB1dFN0cmVhbS5n
ZXQoKSksIG51bGxwdHIsIG51bGxwdHIpOworICAgIGNsZWFyUmVxdWVzdCgpOworICAgIG1fY2xp
ZW50LT5kaWRDb21wbGV0ZVdpdGhFcnJvcih7IH0pOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFz
azo6Z290SGVhZGVyc0NhbGxiYWNrKFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSwgTmV0d29ya0Rh
dGFUYXNrKiB0YXNrKQoreworICAgIGlmICh0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDYW5jZWxp
bmcgfHwgdGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICF0YXNrLT5tX2NsaWVu
dCkgeworICAgICAgICB0YXNrLT5jbGVhclJlcXVlc3QoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBBU1NFUlQodGFzay0+bV9zb3VwTWVzc2FnZS5nZXQoKSA9PSBzb3VwTWVzc2FnZSk7
CisgICAgdGFzay0+ZGlkR2V0SGVhZGVycygpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6
ZGlkR2V0SGVhZGVycygpCit7CisgICAgLy8gV2UgYXJlIGEgYml0IG1vcmUgY29uc2VydmF0aXZl
IHdpdGggdGhlIHBlcnNpc3RlbnQgY3JlZGVudGlhbCBzdG9yYWdlIHRoYW4gdGhlIHNlc3Npb24g
c3RvcmUsCisgICAgLy8gc2luY2Ugd2UgYXJlIHdhaXRpbmcgdW50aWwgd2Uga25vdyB0aGF0IHRo
aXMgYXV0aGVudGljYXRpb24gc3VjY2VlZGVkIGJlZm9yZSBhY3R1YWxseSBzdG9yaW5nLgorICAg
IC8vIFRoaXMgaXMgYmVjYXVzZSB3ZSB3YW50IHRvIGF2b2lkIGhpdHRpbmcgdGhlIGRpc2sgdHdp
Y2UgKG9uY2UgdG8gYWRkIGFuZCBvbmNlIHRvIHJlbW92ZSkgZm9yCisgICAgLy8gaW5jb3JyZWN0
IGNyZWRlbnRpYWxzIG9yIHBvbGx1dGluZyB0aGUga2V5Y2hhaW4gd2l0aCBpbnZhbGlkIGNyZWRl
bnRpYWxzLgorICAgIGlmICghaXNBdXRoZW50aWNhdGlvbkZhaWx1cmVTdGF0dXNDb2RlKG1fc291
cE1lc3NhZ2UtPnN0YXR1c19jb2RlKSAmJiBtX3NvdXBNZXNzYWdlLT5zdGF0dXNfY29kZSA8IDUw
MCkgeworICAgICAgICBtX3Nlc3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpLnNhdmVDcmVk
ZW50aWFsVG9QZXJzaXN0ZW50U3RvcmFnZShtX3Byb3RlY3Rpb25TcGFjZUZvclBlcnNpc3RlbnRT
dG9yYWdlLCBtX2NyZWRlbnRpYWxGb3JQZXJzaXN0ZW50U3RvcmFnZSk7CisgICAgICAgIG1fcHJv
dGVjdGlvblNwYWNlRm9yUGVyc2lzdGVudFN0b3JhZ2UgPSBQcm90ZWN0aW9uU3BhY2UoKTsKKyAg
ICAgICAgbV9jcmVkZW50aWFsRm9yUGVyc2lzdGVudFN0b3JhZ2UgPSBDcmVkZW50aWFsKCk7Cisg
ICAgfQorfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6d3JvdGVCb2R5RGF0YUNhbGxiYWNrKFNv
dXBNZXNzYWdlKiBzb3VwTWVzc2FnZSwgU291cEJ1ZmZlciogYnVmZmVyLCBOZXR3b3JrRGF0YVRh
c2sqIHRhc2spCit7CisgICAgaWYgKHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNhbmNlbGluZyB8
fCB0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDb21wbGV0ZWQgfHwgIXRhc2stPm1fY2xpZW50KSB7
CisgICAgICAgIHRhc2stPmNsZWFyUmVxdWVzdCgpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIEFTU0VSVCh0YXNrLT5tX3NvdXBNZXNzYWdlLmdldCgpID09IHNvdXBNZXNzYWdlKTsKKyAg
ICB0YXNrLT5kaWRXcml0ZUJvZHlEYXRhKGJ1ZmZlci0+bGVuZ3RoKTsKK30KKwordm9pZCBOZXR3
b3JrRGF0YVRhc2s6OmRpZFdyaXRlQm9keURhdGEodWludDY0X3QgYnl0ZXNTZW50KQoreworICAg
IFJlZlB0cjxOZXR3b3JrRGF0YVRhc2s+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgbV9ib2R5
RGF0YVRvdGFsQnl0ZXNTZW50ICs9IGJ5dGVzU2VudDsKKyAgICBtX2NsaWVudC0+ZGlkU2VuZERh
dGEobV9ib2R5RGF0YVRvdGFsQnl0ZXNTZW50LCBtX3NvdXBNZXNzYWdlLT5yZXF1ZXN0X2JvZHkt
Pmxlbmd0aCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpkb3dubG9hZCgpCit7CisgICAg
QVNTRVJUKGlzRG93bmxvYWQoKSk7CisgICAgQVNTRVJUKG1fcGVuZGluZ0Rvd25sb2FkTG9jYXRp
b24pOworICAgIEFTU0VSVCghbV9yZXNwb25zZS5pc051bGwoKSk7CisKKyAgICBpZiAobV9yZXNw
b25zZS5odHRwU3RhdHVzQ29kZSgpID49IDQwMCkgeworICAgICAgICBkaWRGYWlsRG93bmxvYWQo
cGxhdGZvcm1Eb3dubG9hZE5ldHdvcmtFcnJvcihtX3Jlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCks
IG1fcmVzcG9uc2UudXJsKCksIG1fcmVzcG9uc2UuaHR0cFN0YXR1c1RleHQoKSkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgbV9kb3dubG9hZERlc3RpbmF0aW9uRmlsZSA9IGFkb3B0
R1JlZihnX2ZpbGVfbmV3X2Zvcl91cmkobV9wZW5kaW5nRG93bmxvYWRMb2NhdGlvbi51dGY4KCku
ZGF0YSgpKSk7CisgICAgR1JlZlB0cjxHRmlsZU91dHB1dFN0cmVhbT4gb3V0cHV0U3RyZWFtOwor
ICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBpZiAobV9hbGxvd092ZXJ3cml0
ZURvd25sb2FkKQorICAgICAgICBvdXRwdXRTdHJlYW0gPSBhZG9wdEdSZWYoZ19maWxlX3JlcGxh
Y2UobV9kb3dubG9hZERlc3RpbmF0aW9uRmlsZS5nZXQoKSwgbnVsbHB0ciwgRkFMU0UsIEdfRklM
RV9DUkVBVEVfTk9ORSwgbnVsbHB0ciwgJmVycm9yLm91dFB0cigpKSk7CisgICAgZWxzZQorICAg
ICAgICBvdXRwdXRTdHJlYW0gPSBhZG9wdEdSZWYoZ19maWxlX2NyZWF0ZShtX2Rvd25sb2FkRGVz
dGluYXRpb25GaWxlLmdldCgpLCBHX0ZJTEVfQ1JFQVRFX05PTkUsIG51bGxwdHIsICZlcnJvci5v
dXRQdHIoKSkpOworICAgIGlmICghb3V0cHV0U3RyZWFtKSB7CisgICAgICAgIGRpZEZhaWxEb3du
bG9hZChwbGF0Zm9ybURvd25sb2FkRGVzdGluYXRpb25FcnJvcihtX3Jlc3BvbnNlLCBlcnJvci0+
bWVzc2FnZSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgU3RyaW5nIGludGVybWVk
aWF0ZVVSSSA9IG1fcGVuZGluZ0Rvd25sb2FkTG9jYXRpb24gKyAiLndrZG93bmxvYWQiOworICAg
IG1fZG93bmxvYWRJbnRlcm1lZGlhdGVGaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3Vy
aShpbnRlcm1lZGlhdGVVUkkudXRmOCgpLmRhdGEoKSkpOworICAgIG91dHB1dFN0cmVhbSA9IGFk
b3B0R1JlZihnX2ZpbGVfcmVwbGFjZShtX2Rvd25sb2FkSW50ZXJtZWRpYXRlRmlsZS5nZXQoKSwg
MCwgVFJVRSwgR19GSUxFX0NSRUFURV9OT05FLCAwLCAmZXJyb3Iub3V0UHRyKCkpKTsKKyAgICBp
ZiAoIW91dHB1dFN0cmVhbSkgeworICAgICAgICBkaWRGYWlsRG93bmxvYWQocGxhdGZvcm1Eb3du
bG9hZERlc3RpbmF0aW9uRXJyb3IobV9yZXNwb25zZSwgZXJyb3ItPm1lc3NhZ2UpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBtX2Rvd25sb2FkT3V0cHV0U3RyZWFtID0gYWRvcHRHUmVm
KEdfT1VUUFVUX1NUUkVBTShvdXRwdXRTdHJlYW0ubGVha1JlZigpKSk7CisKKyAgICBhdXRvJiBk
b3dubG9hZE1hbmFnZXIgPSBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuZG93bmxvYWRNYW5h
Z2VyKCk7CisgICAgYXV0byBkb3dubG9hZCA9IHN0ZDo6bWFrZV91bmlxdWU8RG93bmxvYWQ+KGRv
d25sb2FkTWFuYWdlciwgbV9wZW5kaW5nRG93bmxvYWRJRCwgdGhpcywgbV9zZXNzaW9uLT5zZXNz
aW9uSUQoKSwgc3VnZ2VzdGVkRmlsZW5hbWUoKSk7CisgICAgYXV0byogZG93bmxvYWRQdHIgPSBk
b3dubG9hZC5nZXQoKTsKKyAgICBkb3dubG9hZE1hbmFnZXIuZGF0YVRhc2tCZWNhbWVEb3dubG9h
ZFRhc2sobV9wZW5kaW5nRG93bmxvYWRJRCwgV1RGTW92ZShkb3dubG9hZCkpOworICAgIGRvd25s
b2FkUHRyLT5kaWRDcmVhdGVEZXN0aW5hdGlvbihtX3BlbmRpbmdEb3dubG9hZExvY2F0aW9uKTsK
KworICAgIEFTU0VSVChtX2NsaWVudCk7CisgICAgbV9jbGllbnQtPmRpZEJlY29tZURvd25sb2Fk
KCk7CisKKyAgICByZWFkKCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjp3cml0ZURvd25s
b2FkQ2FsbGJhY2soR091dHB1dFN0cmVhbSogb3V0cHV0U3RyZWFtLCBHQXN5bmNSZXN1bHQqIHJl
c3VsdCwgTmV0d29ya0RhdGFUYXNrKiB0YXNrKQoreworICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRh
c2s+IHByb3RlY3RlZFRoaXMgPSBhZG9wdFJlZih0YXNrKTsKKyAgICBpZiAodGFzay0+c3RhdGUo
KSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNvbXBsZXRl
ZCB8fCAhdGFzay0+aXNEb3dubG9hZCgpKSB7CisgICAgICAgIHRhc2stPmNsZWFyUmVxdWVzdCgp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFTU0VSVChvdXRwdXRTdHJlYW0gPT0gdGFz
ay0+bV9kb3dubG9hZE91dHB1dFN0cmVhbS5nZXQoKSk7CisKKyAgICBHVW5pcXVlT3V0UHRyPEdF
cnJvcj4gZXJyb3I7CisgICAgZ3NpemUgYnl0ZXNXcml0dGVuOworI2lmIEdMSUJfQ0hFQ0tfVkVS
U0lPTigyLCA0NCwgMCkKKyAgICBnX291dHB1dF9zdHJlYW1fd3JpdGVfYWxsX2ZpbmlzaChvdXRw
dXRTdHJlYW0sIHJlc3VsdCwgJmJ5dGVzV3JpdHRlbiwgJmVycm9yLm91dFB0cigpKTsKKyNlbHNl
CisgICAgZ3NzaXplIHdyaXRlVGFza1Jlc3VsdCA9IGdfdGFza19wcm9wYWdhdGVfaW50KEdfVEFT
SyhyZXN1bHQpLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGlmICh3cml0ZVRhc2tSZXN1bHQgIT0g
LTEpCisgICAgICAgIGJ5dGVzV3JpdHRlbiA9IHdyaXRlVGFza1Jlc3VsdDsKKyNlbmRpZgorICAg
IGlmIChlcnJvcikKKyAgICAgICAgdGFzay0+ZGlkRmFpbERvd25sb2FkKHBsYXRmb3JtRG93bmxv
YWREZXN0aW5hdGlvbkVycm9yKHRhc2stPm1fcmVzcG9uc2UsIGVycm9yLT5tZXNzYWdlKSk7Cisg
ICAgZWxzZQorICAgICAgICB0YXNrLT5kaWRXcml0ZURvd25sb2FkKGJ5dGVzV3JpdHRlbik7Cit9
CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjp3cml0ZURvd25sb2FkKCkKK3sKKyAgICBSZWZQdHI8
TmV0d29ya0RhdGFUYXNrPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworI2lmIEdMSUJfQ0hFQ0tfVkVS
U0lPTigyLCA0NCwgMCkKKyAgICBnX291dHB1dF9zdHJlYW1fd3JpdGVfYWxsX2FzeW5jKG1fZG93
bmxvYWRPdXRwdXRTdHJlYW0uZ2V0KCksIG1fcmVhZEJ1ZmZlci5kYXRhKCksIG1fcmVhZEJ1ZmZl
ci5zaXplKCksIEdfUFJJT1JJVFlfREVGQVVMVCwgbV9jYW5jZWxsYWJsZS5nZXQoKSwKKyAgICAg
ICAgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPih3cml0ZURvd25sb2FkQ2Fs
bGJhY2spLCBwcm90ZWN0ZWRUaGlzLmxlYWtSZWYoKSk7CisjZWxzZQorICAgIEdSZWZQdHI8R1Rh
c2s+IHdyaXRlVGFzayA9IGFkb3B0R1JlZihnX3Rhc2tfbmV3KG1fZG93bmxvYWRPdXRwdXRTdHJl
YW0uZ2V0KCksIG1fY2FuY2VsbGFibGUuZ2V0KCksCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8
R0FzeW5jUmVhZHlDYWxsYmFjaz4od3JpdGVEb3dubG9hZENhbGxiYWNrKSwgcHJvdGVjdGVkVGhp
cy5sZWFrUmVmKCkpKTsKKyAgICBnX3Rhc2tfc2V0X3Rhc2tfZGF0YSh3cml0ZVRhc2suZ2V0KCks
IHRoaXMsIG51bGxwdHIpOworICAgIGdfdGFza19ydW5faW5fdGhyZWFkKHdyaXRlVGFzay5nZXQo
KSwgW10oR1Rhc2sqIHdyaXRlVGFzaywgZ3BvaW50ZXIgc291cmNlLCBncG9pbnRlciB1c2VyRGF0
YSwgR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSkgeworICAgICAgICBhdXRvKiB0YXNrID0gc3Rh
dGljX2Nhc3Q8TmV0d29ya0RhdGFUYXNrKj4odXNlckRhdGEpOworICAgICAgICBHT3V0cHV0U3Ry
ZWFtKiBvdXRwdXRTdHJlYW0gPSBHX09VVFBVVF9TVFJFQU0oc291cmNlKTsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQodGFzay0+bV9kb3dubG9hZE91dHB1dFN0cmVhbS5nZXQoKSA9PSBvdXRwdXRT
dHJlYW0pOworICAgICAgICBSRUxFQVNFX0FTU0VSVCh0YXNrLT5tX2NhbmNlbGxhYmxlLmdldCgp
ID09IGNhbmNlbGxhYmxlKTsKKyAgICAgICAgR0Vycm9yKiBlcnJvciA9IG51bGxwdHI7CisgICAg
ICAgIGlmIChnX2NhbmNlbGxhYmxlX3NldF9lcnJvcl9pZl9jYW5jZWxsZWQoY2FuY2VsbGFibGUs
ICZlcnJvcikpIHsKKyAgICAgICAgICAgIGdfdGFza19yZXR1cm5fZXJyb3Iod3JpdGVUYXNrLCBl
cnJvcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBnc2l6ZSBi
eXRlc1dyaXR0ZW47CisgICAgICAgIGlmIChnX291dHB1dF9zdHJlYW1fd3JpdGVfYWxsKG91dHB1
dFN0cmVhbSwgdGFzay0+bV9yZWFkQnVmZmVyLmRhdGEoKSwgdGFzay0+bV9yZWFkQnVmZmVyLnNp
emUoKSwgJmJ5dGVzV3JpdHRlbiwgY2FuY2VsbGFibGUsICZlcnJvcikpCisgICAgICAgICAgICBn
X3Rhc2tfcmV0dXJuX2ludCh3cml0ZVRhc2ssIGJ5dGVzV3JpdHRlbik7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGdfdGFza19yZXR1cm5fZXJyb3Iod3JpdGVUYXNrLCBlcnJvcik7CisgICAg
fSk7CisjZW5kaWYKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZFdyaXRlRG93bmxvYWQo
Z3NpemUgYnl0ZXNXcml0dGVuKQoreworICAgIEFTU0VSVChieXRlc1dyaXR0ZW4gPT0gbV9yZWFk
QnVmZmVyLnNpemUoKSk7CisgICAgYXV0byogZG93bmxvYWQgPSBOZXR3b3JrUHJvY2Vzczo6c2lu
Z2xldG9uKCkuZG93bmxvYWRNYW5hZ2VyKCkuZG93bmxvYWQobV9wZW5kaW5nRG93bmxvYWRJRCk7
CisgICAgQVNTRVJUKGRvd25sb2FkKTsKKyAgICBkb3dubG9hZC0+ZGlkUmVjZWl2ZURhdGEoYnl0
ZXNXcml0dGVuKTsKKyAgICByZWFkKCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRG
aW5pc2hEb3dubG9hZCgpCit7CisgICAgQVNTRVJUKCFtX3Jlc3BvbnNlLmlzTnVsbCgpKTsKKyAg
ICBBU1NFUlQobV9kb3dubG9hZE91dHB1dFN0cmVhbSk7CisgICAgZ19vdXRwdXRfc3RyZWFtX2Ns
b3NlKG1fZG93bmxvYWRPdXRwdXRTdHJlYW0uZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOworICAg
IG1fZG93bmxvYWRPdXRwdXRTdHJlYW0gPSBudWxscHRyOworCisgICAgQVNTRVJUKG1fZG93bmxv
YWREZXN0aW5hdGlvbkZpbGUpOworICAgIEFTU0VSVChtX2Rvd25sb2FkSW50ZXJtZWRpYXRlRmls
ZSk7CisgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOworICAgIGlmICghZ19maWxlX21v
dmUobV9kb3dubG9hZEludGVybWVkaWF0ZUZpbGUuZ2V0KCksIG1fZG93bmxvYWREZXN0aW5hdGlv
bkZpbGUuZ2V0KCksIEdfRklMRV9DT1BZX09WRVJXUklURSwgbV9jYW5jZWxsYWJsZS5nZXQoKSwg
bnVsbHB0ciwgbnVsbHB0ciwgJmVycm9yLm91dFB0cigpKSkgeworICAgICAgICBkaWRGYWlsRG93
bmxvYWQocGxhdGZvcm1Eb3dubG9hZERlc3RpbmF0aW9uRXJyb3IobV9yZXNwb25zZSwgZXJyb3It
Pm1lc3NhZ2UpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEdSZWZQdHI8R0ZpbGVJ
bmZvPiBpbmZvID0gYWRvcHRHUmVmKGdfZmlsZV9pbmZvX25ldygpKTsKKyAgICBDU3RyaW5nIHVy
aSA9IG1fcmVzcG9uc2UudXJsKCkuc3RyaW5nKCkudXRmOCgpOworICAgIGdfZmlsZV9pbmZvX3Nl
dF9hdHRyaWJ1dGVfc3RyaW5nKGluZm8uZ2V0KCksICJtZXRhZGF0YTo6ZG93bmxvYWQtdXJpIiwg
dXJpLmRhdGEoKSk7CisgICAgZ19maWxlX2luZm9fc2V0X2F0dHJpYnV0ZV9zdHJpbmcoaW5mby5n
ZXQoKSwgInhhdHRyOjp4ZGcub3JpZ2luLnVybCIsIHVyaS5kYXRhKCkpOworICAgIGdfZmlsZV9z
ZXRfYXR0cmlidXRlc19hc3luYyhtX2Rvd25sb2FkRGVzdGluYXRpb25GaWxlLmdldCgpLCBpbmZv
LmdldCgpLCBHX0ZJTEVfUVVFUllfSU5GT19OT05FLCBHX1BSSU9SSVRZX0RFRkFVTFQsIG51bGxw
dHIsIG51bGxwdHIsIG51bGxwdHIpOworCisgICAgY2xlYXJSZXF1ZXN0KCk7CisgICAgYXV0byog
ZG93bmxvYWQgPSBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuZG93bmxvYWRNYW5hZ2VyKCku
ZG93bmxvYWQobV9wZW5kaW5nRG93bmxvYWRJRCk7CisgICAgQVNTRVJUKGRvd25sb2FkKTsKKyAg
ICBkb3dubG9hZC0+ZGlkRmluaXNoKCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRG
YWlsRG93bmxvYWQoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit7CisgICAgY2xlYXJSZXF1
ZXN0KCk7CisgICAgY2xlYW5Eb3dubG9hZEZpbGVzKCk7CisgICAgaWYgKG1fY2xpZW50KQorICAg
ICAgICBtX2NsaWVudC0+ZGlkQ29tcGxldGVXaXRoRXJyb3IoZXJyb3IpOworICAgIGVsc2Ugewor
ICAgICAgICBhdXRvKiBkb3dubG9hZCA9IE5ldHdvcmtQcm9jZXNzOjpzaW5nbGV0b24oKS5kb3du
bG9hZE1hbmFnZXIoKS5kb3dubG9hZChtX3BlbmRpbmdEb3dubG9hZElEKTsKKyAgICAgICAgQVNT
RVJUKGRvd25sb2FkKTsKKyAgICAgICAgZG93bmxvYWQtPmRpZEZhaWwoZXJyb3IsIElQQzo6RGF0
YVJlZmVyZW5jZSgpKTsKKyAgICB9Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpjbGVhbkRv
d25sb2FkRmlsZXMoKQoreworICAgIGlmIChtX2Rvd25sb2FkRGVzdGluYXRpb25GaWxlKSB7Cisg
ICAgICAgIGdfZmlsZV9kZWxldGUobV9kb3dubG9hZERlc3RpbmF0aW9uRmlsZS5nZXQoKSwgbnVs
bHB0ciwgbnVsbHB0cik7CisgICAgICAgIG1fZG93bmxvYWREZXN0aW5hdGlvbkZpbGUgPSBudWxs
cHRyOworICAgIH0KKyAgICBpZiAobV9kb3dubG9hZEludGVybWVkaWF0ZUZpbGUpIHsKKyAgICAg
ICAgZ19maWxlX2RlbGV0ZShtX2Rvd25sb2FkSW50ZXJtZWRpYXRlRmlsZS5nZXQoKSwgbnVsbHB0
ciwgbnVsbHB0cik7CisgICAgICAgIG1fZG93bmxvYWRJbnRlcm1lZGlhdGVGaWxlID0gbnVsbHB0
cjsKKyAgICB9Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRGYWlsKGNvbnN0IFJlc291
cmNlRXJyb3ImIGVycm9yKQoreworICAgIGlmIChpc0Rvd25sb2FkKCkpIHsKKyAgICAgICAgZGlk
RmFpbERvd25sb2FkKHBsYXRmb3JtRG93bmxvYWROZXR3b3JrRXJyb3IoZXJyb3IuZXJyb3JDb2Rl
KCksIGVycm9yLmZhaWxpbmdVUkwoKSwgZXJyb3IubG9jYWxpemVkRGVzY3JpcHRpb24oKSkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2xlYXJSZXF1ZXN0KCk7CisgICAgQVNTRVJU
KG1fY2xpZW50KTsKKyAgICBtX2NsaWVudC0+ZGlkQ29tcGxldGVXaXRoRXJyb3IoZXJyb3IpOwor
fQorCisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6bmV0d29y
a0V2ZW50Q2FsbGJhY2soU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlLCBHU29ja2V0Q2xpZW50RXZl
bnQgZXZlbnQsIEdJT1N0cmVhbSosIE5ldHdvcmtEYXRhVGFzayogdGFzaykKK3sKKyAgICBpZiAo
dGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IHRhc2stPnN0YXRlKCkgPT0gU3Rh
dGU6OkNvbXBsZXRlZCB8fCAhdGFzay0+bV9jbGllbnQpCisgICAgICAgIHJldHVybjsKKworICAg
IEFTU0VSVCh0YXNrLT5tX3NvdXBNZXNzYWdlLmdldCgpID09IHNvdXBNZXNzYWdlKTsKKyAgICB0
YXNrLT5uZXR3b3JrRXZlbnQoZXZlbnQpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6bmV0
d29ya0V2ZW50KEdTb2NrZXRDbGllbnRFdmVudCBldmVudCkKK3sKKyAgICBkb3VibGUgZGVsdGFU
aW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lTVMoKSAtIG1fc3RhcnRUaW1lOworICAg
IGF1dG8mIGxvYWRUaW1pbmcgPSBtX3Jlc3BvbnNlLm5ldHdvcmtMb2FkVGltaW5nKCk7CisgICAg
c3dpdGNoIChldmVudCkgeworICAgIGNhc2UgR19TT0NLRVRfQ0xJRU5UX1JFU09MVklORzoKKyAg
ICAgICAgbG9hZFRpbWluZy5kb21haW5Mb29rdXBTdGFydCA9IGRlbHRhVGltZTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBHX1NPQ0tFVF9DTElFTlRfUkVTT0xWRUQ6CisgICAgICAgIGxvYWRU
aW1pbmcuZG9tYWluTG9va3VwRW5kID0gZGVsdGFUaW1lOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEdfU09DS0VUX0NMSUVOVF9DT05ORUNUSU5HOgorICAgICAgICBsb2FkVGltaW5nLmNvbm5l
Y3RTdGFydCA9IGRlbHRhVGltZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHX1NPQ0tFVF9D
TElFTlRfQ09OTkVDVEVEOgorICAgICAgICAvLyBXZWIgVGltaW5nIGNvbnNpZGVycyB0aGF0IGNv
bm5lY3Rpb24gdGltZSBpbnZvbHZlcyBkbnMsIHByb3h5ICYgVExTIG5lZ290aWF0aW9uLi4uCisg
ICAgICAgIC8vIHNvIHdlIGJldHRlciBwaWNrIEdfU09DS0VUX0NMSUVOVF9DT01QTEVURSBmb3Ig
Y29ubmVjdEVuZAorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdfU09DS0VUX0NMSUVOVF9QUk9Y
WV9ORUdPVElBVElORzoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHX1NPQ0tFVF9DTElFTlRf
UFJPWFlfTkVHT1RJQVRFRDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHX1NPQ0tFVF9DTElF
TlRfVExTX0hBTkRTSEFLSU5HOgorICAgICAgICBsb2FkVGltaW5nLnNlY3VyZUNvbm5lY3Rpb25T
dGFydCA9IGRlbHRhVGltZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHX1NPQ0tFVF9DTElF
TlRfVExTX0hBTkRTSEFLRUQ6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR19TT0NLRVRfQ0xJ
RU5UX0NPTVBMRVRFOgorICAgICAgICBsb2FkVGltaW5nLmNvbm5lY3RFbmQgPSBkZWx0YVRpbWU7
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKKyNpZiBTT1VQX0NIRUNLX1ZFUlNJT04o
MiwgNDksIDkxKQordm9pZCBOZXR3b3JrRGF0YVRhc2s6OnN0YXJ0aW5nQ2FsbGJhY2soU291cE1l
c3NhZ2UqIHNvdXBNZXNzYWdlLCBOZXR3b3JrRGF0YVRhc2sqIHRhc2spCit7CisgICAgaWYgKHRh
c2stPnN0YXRlKCkgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCB0YXNrLT5zdGF0ZSgpID09IFN0YXRl
OjpDb21wbGV0ZWQgfHwgIXRhc2stPm1fY2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBB
U1NFUlQodGFzay0+bV9zb3VwTWVzc2FnZS5nZXQoKSA9PSBzb3VwTWVzc2FnZSk7CisgICAgdGFz
ay0+ZGlkU3RhcnRSZXF1ZXN0KCk7Cit9CisjZWxzZQordm9pZCBOZXR3b3JrRGF0YVRhc2s6OnJl
cXVlc3RTdGFydGVkQ2FsbGJhY2soU291cFNlc3Npb24qIHNlc3Npb24sIFNvdXBNZXNzYWdlKiBz
b3VwTWVzc2FnZSwgU291cFNvY2tldCosIE5ldHdvcmtEYXRhVGFzayogdGFzaykKK3sKKyAgICBB
U1NFUlQoc2Vzc2lvbiA9PSB0YXNrLT5tX3Nlc3Npb24tPnNvdXBTZXNzaW9uKCkpOworICAgIGlm
IChzb3VwTWVzc2FnZSAhPSB0YXNrLT5tX3NvdXBNZXNzYWdlLmdldCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAodGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IHRhc2st
PnN0YXRlKCkgPT0gU3RhdGU6OkNvbXBsZXRlZCB8fCAhdGFzay0+bV9jbGllbnQpCisgICAgICAg
IHJldHVybjsKKworICAgIHRhc2stPmRpZFN0YXJ0UmVxdWVzdCgpOworfQorI2VuZGlmCisKK3Zv
aWQgTmV0d29ya0RhdGFUYXNrOjpkaWRTdGFydFJlcXVlc3QoKQoreworICAgIG1fcmVzcG9uc2Uu
bmV0d29ya0xvYWRUaW1pbmcoKS5yZXF1ZXN0U3RhcnQgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2lu
Z1RpbWVNUygpIC0gbV9zdGFydFRpbWU7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpyZXN0
YXJ0ZWRDYWxsYmFjayhTb3VwTWVzc2FnZSogc291cE1lc3NhZ2UsIE5ldHdvcmtEYXRhVGFzayog
dGFzaykKK3sKKyAgICAvLyBDYWxsZWQgZWFjaCB0aW1lIHRoZSBtZXNzYWdlIGlzIGdvaW5nIHRv
IGJlIHNlbnQgYWdhaW4gZXhjZXB0IHRoZSBmaXJzdCB0aW1lLgorICAgIC8vIFRoaXMgaGFwcGVu
cyB3aGVuIGxpYnNvdXAgaGFuZGxlcyBIVFRQIGF1dGhlbnRpY2F0aW9uLgorICAgIGlmICh0YXNr
LT5zdGF0ZSgpID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgdGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6
Q29tcGxldGVkIHx8ICF0YXNrLT5tX2NsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNT
RVJUKHRhc2stPm1fc291cE1lc3NhZ2UuZ2V0KCkgPT0gc291cE1lc3NhZ2UpOworICAgIHRhc2st
PmRpZFJlc3RhcnQoKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZFJlc3RhcnQoKQor
eworICAgIG1fc3RhcnRUaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lTVMoKTsKK30K
KyNlbmRpZiAvLyBFTkFCTEUoV0VCX1RJTUlORykKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nl
c3Npb25Tb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29y
a1Nlc3Npb25Tb3VwLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGMy
Yzc3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291
cC9OZXR3b3JrU2Vzc2lvblNvdXAuY3BwCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtT
dG9yYWdlU2Vzc2lvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU291cE5ldHdvcmtTZXNzaW9uLmg+
CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitSZWY8TmV0d29ya1Nlc3Npb24+IE5ldHdvcmtTZXNz
aW9uOjpjcmVhdGUoVHlwZSB0eXBlLCBTZXNzaW9uSUQgc2Vzc2lvbklELCBDdXN0b21Qcm90b2Nv
bE1hbmFnZXIqKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtTZXNzaW9uKHR5
cGUsIHNlc3Npb25JRCwgbnVsbHB0cikpOworfQorCitOZXR3b3JrU2Vzc2lvbiYgTmV0d29ya1Nl
c3Npb246OmRlZmF1bHRTZXNzaW9uKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
ICAgIHN0YXRpYyBOZXR3b3JrU2Vzc2lvbiogc2Vzc2lvbiA9ICZOZXR3b3JrU2Vzc2lvbjo6Y3Jl
YXRlKE5ldHdvcmtTZXNzaW9uOjpUeXBlOjpOb3JtYWwsIFNlc3Npb25JRDo6ZGVmYXVsdFNlc3Np
b25JRCgpLCBudWxscHRyKS5sZWFrUmVmKCk7CisgICAgcmV0dXJuICpzZXNzaW9uOworfQorCitO
ZXR3b3JrU3RvcmFnZVNlc3Npb24mIE5ldHdvcmtTZXNzaW9uOjpuZXR3b3JrU3RvcmFnZVNlc3Np
b24oKSBjb25zdAoreworICAgIGF1dG8qIHN0b3JhZ2VTZXNzaW9uID0gTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uOjpzdG9yYWdlU2Vzc2lvbihtX3Nlc3Npb25JRCk7CisgICAgUkVMRUFTRV9BU1NFUlQo
c3RvcmFnZVNlc3Npb24pOworICAgIHJldHVybiAqc3RvcmFnZVNlc3Npb247Cit9CisKK05ldHdv
cmtTZXNzaW9uOjpOZXR3b3JrU2Vzc2lvbihUeXBlIHR5cGUsIFNlc3Npb25JRCBzZXNzaW9uSUQs
IEN1c3RvbVByb3RvY29sTWFuYWdlciopCisgICAgOiBtX3Nlc3Npb25JRChzZXNzaW9uSUQpCit7
Cit9CisKK05ldHdvcmtTZXNzaW9uOjp+TmV0d29ya1Nlc3Npb24oKQoreworfQorCitTb3VwU2Vz
c2lvbiogTmV0d29ya1Nlc3Npb246OnNvdXBTZXNzaW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bmV0d29ya1N0b3JhZ2VTZXNzaW9uKCkuc291cE5ldHdvcmtTZXNzaW9uKCkuc291cFNlc3Npb24o
KTsKK30KKwordm9pZCBOZXR3b3JrU2Vzc2lvbjo6aW52YWxpZGF0ZUFuZENhbmNlbCgpCit7Cisg
ICAgZm9yIChhdXRvKiB0YXNrIDogbV9kYXRhVGFza1NldCkKKyAgICAgICAgdGFzay0+aW52YWxp
ZGF0ZUFuZENhbmNlbCgpOworfQorCit2b2lkIE5ldHdvcmtTZXNzaW9uOjpjbGVhckNyZWRlbnRp
YWxzKCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0U291cC5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL1JlbW90ZU5ldHdvcmtpbmdD
b250ZXh0U291cC5jcHAKaW5kZXggNmFlY2I3Zi4uOGZiNjRmYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9SZW1vdGVOZXR3b3JraW5nQ29udGV4dFNvdXAu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvUmVtb3RlTmV0d29y
a2luZ0NvbnRleHRTb3VwLmNwcApAQCAtMjgsNiArMjgsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlJlbW90ZU5ldHdvcmtpbmdDb250ZXh0LmgiCiAKKyNpbmNsdWRlICJOZXR3
b3JrU2Vzc2lvbi5oIgorI2luY2x1ZGUgIlNlc3Npb25UcmFja2VyLmgiCiAjaW5jbHVkZSA8V2Vi
Q29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxl
bWVudGVkLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUhhbmRsZS5oPgpAQCAtNDUsMTMg
KzQ3LDIxIEBAIGJvb2wgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmlzVmFsaWQoKSBjb25zdAog
ICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1
cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKFNlc3Npb25JRCkKK3ZvaWQgUmVtb3RlTmV0d29ya2lu
Z0NvbnRleHQ6OmVuc3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oU2Vzc2lvbklEIHNlc3Npb25J
RCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIEFTU0VSVChzZXNzaW9uSUQuaXNFcGhl
bWVyYWwoKSk7CisKKyAgICBpZiAoTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzdG9yYWdlU2Vzc2lv
bihzZXNzaW9uSUQpKQorICAgICAgICByZXR1cm47CisKKyAgICBOZXR3b3JrU3RvcmFnZVNlc3Np
b246OmVuc3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oc2Vzc2lvbklELCBTdHJpbmc6Om51bWJl
cihzZXNzaW9uSUQuc2Vzc2lvbklEKCkpKTsKKyAgICBTZXNzaW9uVHJhY2tlcjo6c2V0U2Vzc2lv
bihzZXNzaW9uSUQsIE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUoTmV0d29ya1Nlc3Npb246OlR5cGU6
OkVwaGVtZXJhbCwgc2Vzc2lvbklELCBudWxscHRyKSk7CiB9CiAKIE5ldHdvcmtTdG9yYWdlU2Vz
c2lvbiYgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OnN0b3JhZ2VTZXNzaW9uKCkgY29uc3QKIHsK
KyAgICBpZiAoYXV0byBzZXNzaW9uID0gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzdG9yYWdlU2Vz
c2lvbihtX3Nlc3Npb25JRCkpCisgICAgICAgIHJldHVybiAqc2Vzc2lvbjsKICAgICByZXR1cm4g
TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCBmMTI1OTUxLi5iYWJmMmE3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybUVmbC5jbWFrZQpAQCAtMTQsNyArMTQsOSBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJD
RVMKIAogICAgIE5ldHdvcmtQcm9jZXNzL2VmbC9OZXR3b3JrUHJvY2Vzc01haW5FZmwuY3BwCiAK
KyAgICBOZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAuY3BwCiAgICAgTmV0
d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwCisgICAgTmV0d29ya1Byb2Nl
c3Mvc291cC9OZXR3b3JrU2Vzc2lvblNvdXAuY3BwCiAgICAgTmV0d29ya1Byb2Nlc3Mvc291cC9S
ZW1vdGVOZXR3b3JraW5nQ29udGV4dFNvdXAuY3BwCiAKICAgICBQbGF0Zm9ybS9JUEMvdW5peC9B
dHRhY2htZW50VW5peC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RL
LmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggYmVlYTAwZS4u
NmZiZGEyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKKysr
IGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTM5LDggKzM5LDEwIEBAIGxp
c3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZURhdGFTb3VwLmNwcAogICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZUlPQ2hhbm5lbFNvdXAuY3BwCiAKKyAgICBOZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtEYXRh
VGFza1NvdXAuY3BwCiAgICAgTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc01haW5T
b3VwLmNwcAogICAgIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAor
ICAgIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25Tb3VwLmNwcAogICAgIE5ldHdv
cmtQcm9jZXNzL3NvdXAvUmVtb3RlTmV0d29ya2luZ0NvbnRleHRTb3VwLmNwcAogCiAgICAgUGxh
dGZvcm0vSVBDL2dsaWIvR1NvY2tldE1vbml0b3IuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRpb25NYW5hZ2VyLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRpb25NYW5hZ2VyLmgK
aW5kZXggN2ZjMTYxNC4uNjM3MmNkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVk
L0F1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0aW9uTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9BdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdGlvbk1hbmFnZXIuaApAQCAtMjgs
MTAgKzI4LDEwIEBACiAKICNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKICNpbmNsdWRlICJO
ZXR3b3JrUHJvY2Vzc1N1cHBsZW1lbnQuaCIKLSNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5oIgog
I2luY2x1ZGUgIldlYlByb2Nlc3NTdXBwbGVtZW50LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9BdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZS5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVk
ZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtNDgsNiArNDgsMTQgQEAgY2xhc3MgRG93bmxvYWRJRDsKIGNsYXNzIFBl
bmRpbmdEb3dubG9hZDsKIGNsYXNzIFdlYkZyYW1lOwogCitlbnVtIGNsYXNzIEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb24geworICAgIFVzZUNyZWRlbnRpYWwsCisgICAgUGVyZm9y
bURlZmF1bHRIYW5kbGluZywKKyAgICBDYW5jZWwsCisgICAgUmVqZWN0UHJvdGVjdGlvblNwYWNl
Cit9OwordHlwZWRlZiBGdW5jdGlvbjx2b2lkKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9z
aXRpb24sIGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmKT4gQ2hhbGxlbmdlQ29tcGxldGlvbkhh
bmRsZXI7CisKIGNsYXNzIEF1dGhlbnRpY2F0aW9uTWFuYWdlciA6IHB1YmxpYyBXZWJQcm9jZXNz
U3VwcGxlbWVudCwgcHVibGljIE5ldHdvcmtQcm9jZXNzU3VwcGxlbWVudCwgcHVibGljIElQQzo6
TWVzc2FnZVJlY2VpdmVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBdXRoZW50aWNhdGlv
bk1hbmFnZXIpOwogcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9zb3VwL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuY3BwIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9zb3VwL1dlYkZyYW1lTmV0d29y
a2luZ0NvbnRleHQuY3BwCmluZGV4IDIwMWQ0YTguLjJmOTg3MWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvc291cC9XZWJGcmFtZU5ldHdvcmtp
bmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L3NvdXAvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5jcHAKQEAgLTI3LDYgKzI3LDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0
LmgiCiAKKyNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5oIgogI2luY2x1ZGUgIlNlc3Npb25UcmFj
a2VyLmgiCiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCkBAIC00
MywxMSArNDQsMTMgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiB2b2lkIFdlYkZyYW1lTmV0d29ya2lu
Z0NvbnRleHQ6OmVuc3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oU2Vzc2lvbklEIHNlc3Npb25J
RCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChzZXNzaW9uSUQu
aXNFcGhlbWVyYWwoKSk7CiAKICAgICBpZiAoTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzdG9yYWdl
U2Vzc2lvbihzZXNzaW9uSUQpKQogICAgICAgICByZXR1cm47CiAKICAgICBOZXR3b3JrU3RvcmFn
ZVNlc3Npb246OmVuc3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oc2Vzc2lvbklELCBTdHJpbmc6
Om51bWJlcihzZXNzaW9uSUQuc2Vzc2lvbklEKCkpKTsKKyAgICBTZXNzaW9uVHJhY2tlcjo6c2V0
U2Vzc2lvbihzZXNzaW9uSUQsIE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUoTmV0d29ya1Nlc3Npb246
OlR5cGU6OkVwaGVtZXJhbCwgc2Vzc2lvbklELCBudWxscHRyKSk7CiB9CiAKIHZvaWQgV2ViRnJh
bWVOZXR3b3JraW5nQ29udGV4dDo6c2V0Q29va2llQWNjZXB0UG9saWN5Rm9yQWxsQ29udGV4dHMo
SFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQcm9jZXNzLmNwcAppbmRleCA4M2Q5Y2UzLi5lMWZlM2VmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJMb2dn
aW5nLmgiCiAjaW5jbHVkZSAiTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlcy5o
IgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIk5ldHdv
cmtTZXNzaW9uLmgiCiAjaW5jbHVkZSAiUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyLmgi
CiAjaW5jbHVkZSAiU2Vzc2lvblRyYWNrZXIuaCIKICNpbmNsdWRlICJTdGF0aXN0aWNzRGF0YS5o
IgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvY29uZmlnLmggYi9Tb3VyY2UvV2ViS2l0Mi9j
b25maWcuaAppbmRleCAxZDkxZmJkLi5hOTdkZDRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9jb25maWcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9jb25maWcuaApAQCAtNzUsNyArNzUsNyBA
QAogI2VuZGlmCiAjZW5kaWYKIAotI2lmIChQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVS
U0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAwKSB8fCAoUExBVEZPUk0oSU9TKSAmJiBfX0lQSE9O
RV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDAwMDApCisjaWYgKFBMQVRGT1JNKE1BQykg
JiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEyMDApIHx8IChQTEFURk9S
TShJT1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMDAwMCkgfHwg
VVNFKFNPVVApCiAjaWZuZGVmIFVTRV9ORVRXT1JLX1NFU1NJT04KICNkZWZpbmUgVVNFX05FVFdP
UktfU0VTU0lPTiAxCiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292081</attachid>
            <date>2016-10-19 10:24:36 -0700</date>
            <delta_ts>2016-10-19 23:00:08 -0700</delta_ts>
            <desc>Try to fix the builds</desc>
            <filename>wk2-network-session-soup.diff</filename>
            <type>text/plain</type>
            <size>86955</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktp
dDIvQ01ha2VMaXN0cy50eHQKaW5kZXggOWI0MzNkZS4uMWFjMTA2YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0
cy50eHQKQEAgLTIxNyw2ICsyMTcsNyBAQCBzZXQoV2ViS2l0Ml9TT1VSQ0VTCiAgICAgTmV0d29y
a1Byb2Nlc3MvRG93bmxvYWRzL0Jsb2JEb3dubG9hZENsaWVudC5jcHAKICAgICBOZXR3b3JrUHJv
Y2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuY3BwCiAgICAgTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRz
L0Rvd25sb2FkTWFuYWdlci5jcHAKKyAgICBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvUGVuZGlu
Z0Rvd25sb2FkLmNwcAogCiAgICAgUGxhdGZvcm0vTG9nZ2luZy5jcHAKICAgICBQbGF0Zm9ybS9N
b2R1bGUuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMDU4Yzc1NC4uNTQwZmVhZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDExNyBAQAorMjAxNi0xMC0xOCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lh
QGlnYWxpYS5jb20+CisKKyAgICAgICAgW1NPVVBdIEFkZCBOZXR3b3JrU2Vzc2lvbiBpbXBsZW1l
bnRhdGlvbiBhbmQgc3dpdGNoIHRvIHVzZSBpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNTk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQmFzaWNhbGx5IG1vdmUgdGhlIFJlc291cmNlSGFuZGxlIGlt
cGxlbWVudGF0aW9uIHRvIHRoZSBuZXR3b3JrIHByb2Nlc3MsIGJ1dCBtb2Rlcm5pemVkLCBjbGVh
bmVkIHVwLCBhbmQgYWRhcHRlZAorICAgICAgICB0byB0aGUgTmV0d29ya1Nlc3Npb24gbW9kZWwu
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDogQWRkIG5ldyBmaWxlcyB0byBjb21waWxhdGlv
bi4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpEb3dubG9hZDo6RG93bmxvYWQpOiBVc2UgdGhlIHNhbWUgY29kZSBmb3Ig
YWxsIHBvcnRzIHVzaW5nIE5ldHdvcmtTZXNzaW9uIGFuZCBhZGQgbWlzc2luZworICAgICAgICBp
bml0aWFsaXphdGlvbiBvZiBtX3Nlc3Npb25JRC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9E
b3dubG9hZHMvRG93bmxvYWQuaDoKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWQ6OkRvd25sb2Fk
KTogRGVmaW5lIFBsYXRmb3JtRG93bmxvYWRUYXNrUmVmIG9uIGV2ZXJ5IHBsYXRmb3JtIHRvIG1h
a2UgdGhlIGNvbnN0cnVjdG9yIGNvbW1vbiB0bworICAgICAgICBhbGwgcG9ydHMgdXNpbmcgTmV0
d29ya1Nlc3Npb24uCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL3NvdXAvRG93
bmxvYWRTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWQ6OmNhbmNlbE5ldHdvcmtM
b2FkKToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWQ6OnBsYXRmb3JtRGlkRmluaXNoKToKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suaDoKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0RhdGFUYXNrOjpwZW5kaW5nRG93bmxvYWRJRCk6IE1ha2UgY29uc3QuCisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6cGVuZGluZ0Rvd25sb2FkKTogRGl0dG8uCisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6cGVuZGluZ0Rvd25sb2FkTG9jYXRpb24p
OiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjppc0Rvd25sb2FkKTog
SGVscGVyIHRvIGNoZWNrIGlmIHRoZSB0YXNrIGlzIGEgZG93bmxvYWQuCisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrTG9h
ZDo6ZGlkUmVjZWl2ZVJlc3BvbnNlTmV0d29ya1Nlc3Npb24pOiBVc2UgTmV0d29ya0RhdGFUYXNr
Ojppc0Rvd25sb2FkKCkuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6TmV0d29ya1Byb2Nlc3MpOiBO
ZXR3b3JrU2Vzc2lvbjo6c2V0Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyKCkgaXMgQ29jb2Egb25seS4K
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oOgorICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW06CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtTZXNzaW9uOjpuZXR3b3JrU3RvcmFnZVNlc3Npb24pOiBNYWtlIGNvbnN0Lgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6Ok5ldHdvcmtEYXRhVGFzayk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6fk5ldHdvcmtEYXRhVGFzayk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6c2NoZWR1bGVGYWlsdXJlKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpmYWlsdXJlVGltZXJGaXJlZCk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6c3VnZ2VzdGVkRmlsZW5hbWUpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OnNldFN1Z2dlc3RlZEZpbGVuYW1lKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpzZXRQZW5kaW5nRG93bmxvYWRMb2NhdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6YWxsb3dzU3BlY2lmaWNIVFRQU0NlcnRp
ZmljYXRlRm9ySG9zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6Y3JlYXRl
UmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6Y2xlYXJSZXF1ZXN0
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpyZXN1bWUpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OnN1c3BlbmQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrRGF0YVRhc2s6OmNhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6
aW52YWxpZGF0ZUFuZENhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6
c3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OnRpbWVvdXRGaXJlZCk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6c3RhcnRUaW1lb3V0KToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpzdG9wVGltZW91dCk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtEYXRhVGFzazo6c2VuZFJlcXVlc3RDYWxsYmFjayk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtEYXRhVGFzazo6ZGlkU2VuZFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrRGF0YVRhc2s6OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtEYXRhVGFzazo6dGxzRXJyb3JzQ2hhbmdlZENhbGxiYWNrKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0RhdGFUYXNrOjp0bHNFcnJvcnNDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0RhdGFUYXNrOjphcHBseUF1dGhlbnRpY2F0aW9uVG9SZXF1ZXN0KToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjphdXRoZW50aWNhdGVDYWxsYmFjayk6CisgICAgICAg
IChXZWJLaXQ6OmlzQXV0aGVudGljYXRpb25GYWlsdXJlU3RhdHVzQ29kZSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6YXV0aGVudGljYXRlKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0RhdGFUYXNrOjpjb250aW51ZUF1dGhlbnRpY2F0ZSk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtEYXRhVGFzazo6c2tpcElucHV0U3RyZWFtRm9yUmVkaXJlY3Rpb25DYWxsYmFjayk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6c2tpcElucHV0U3RyZWFtRm9yUmVk
aXJlY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OmRpZEZpbmlzaFNr
aXBJbnB1dFN0cmVhbUZvclJlZGlyZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6c2hvdWxkUmVk
aXJlY3RBc0dFVCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6c2hvdWxkU3Rh
cnRIVFRQUmVkaXJlY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OmNv
bnRpbnVlSFRUUFJlZGlyZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNr
OjpyZWFkQ2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OnJlYWQp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OmRpZFJlYWQpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OmRpZEZpbmlzaFJlYWQpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrRGF0YVRhc2s6OnJlcXVlc3ROZXh0UGFydENhbGxiYWNrKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0RhdGFUYXNrOjpyZXF1ZXN0TmV4dFBhcnQpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrRGF0YVRhc2s6OmRpZFJlcXVlc3ROZXh0UGFydCk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtEYXRhVGFzazo6ZGlkRmluaXNoUmVxdWVzdE5leHRQYXJ0KToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0RhdGFUYXNrOjpnb3RIZWFkZXJzQ2FsbGJhY2spOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrRGF0YVRhc2s6OmRpZEdldEhlYWRlcnMpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrRGF0YVRhc2s6Ondyb3RlQm9keURhdGFDYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtEYXRhVGFzazo6ZGlkV3JpdGVCb2R5RGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtEYXRhVGFzazo6ZG93bmxvYWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRh
c2s6OndyaXRlRG93bmxvYWRDYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRh
VGFzazo6d3JpdGVEb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6
ZGlkV3JpdGVEb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6ZGlk
RmluaXNoRG93bmxvYWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OmRpZEZh
aWxEb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6Y2xlYW5Eb3du
bG9hZEZpbGVzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpkaWRGYWlsKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpuZXR3b3JrRXZlbnRDYWxsYmFjayk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6bmV0d29ya0V2ZW50KToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpzdGFydGluZ0NhbGxiYWNrKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpyZXF1ZXN0U3RhcnRlZENhbGxiYWNrKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpkaWRTdGFydFJlcXVlc3QpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OnJlc3RhcnRlZENhbGxiYWNrKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0RhdGFUYXNrOjpkaWRSZXN0YXJ0KToKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtTZXNzaW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbjo6ZGVm
YXVsdFNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbjo6bmV0d29ya1N0
b3JhZ2VTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246Ok5ldHdvcmtT
ZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246On5OZXR3b3JrU2Vzc2lv
bik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjpzb3VwU2Vzc2lvbik6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjppbnZhbGlkYXRlQW5kQ2FuY2VsKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246OmNsZWFyQ3JlZGVudGlhbHMpOgorICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL3NvdXAvUmVtb3RlTmV0d29ya2luZ0NvbnRleHRTb3VwLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVByaXZhdGVCcm93
c2luZ1Nlc3Npb24pOiBBZGQgaW1wbGVtZW50YXRpb24gbWF0Y2hpbmcKKyAgICAgICAgV2ViRnJh
bWVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbigpLgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6c3RvcmFnZVNlc3Npb24pOiBE
byBub3QgYWx3YXlzIHJldHVybiB0aGUgZGVmYXVsdCBzZXNzaW9uIGlmIHRoZSBnaXZlbiBvbmUg
aXMKKyAgICAgICAgaW4gdGhlIGdsb2JhbCBtYXAuCisgICAgICAgICogUGxhdGZvcm1FZmwuY21h
a2U6IEFkIG5ldyBmaWxlcyB0byBjb21waWxhdGlvbi4KKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5j
bWFrZTogRGl0dG8uCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9zb3VwL1dl
YkZyYW1lTmV0d29ya2luZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZU5l
dHdvcmtpbmdDb250ZXh0OjplbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKTogQWxzbyBjcmVh
dGUgYSBOZXR3b3JrU2Vzc2lvbi4KKyAgICAgICAgKiBjb25maWcuaDogRW5hYmxlIE5ldHdvcmtT
ZXNzaW9uIHVuY29uZGl0aW9uYWxseSBmb3IgU291cCBiYXNlZCBwb3J0cy4KKwogMjAxNi0xMC0x
OSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAg
TmV0d29ya1Nlc3Npb246IHVwZGF0ZWRSZXF1ZXN0IHBhcmFtZXRlciBvZiBOZXR3b3JrUHJvY2Vz
czo6ZmluZFBlbmRpbmdEb3dubG9hZExvY2F0aW9uIGlzIHVudXNlZCBzaW5jZSByMjA2OTg4CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxv
YWQuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2Fk
LmNwcAppbmRleCA5YmUyMmVmLi42NDk0OGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5jcHAKQEAgLTMzLDYgKzMzLDcgQEAK
ICNpbmNsdWRlICJEb3dubG9hZE1hbmFnZXIuaCIKICNpbmNsdWRlICJEb3dubG9hZFByb3h5TWVz
c2FnZXMuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNr
LmgiCiAjaW5jbHVkZSAiU2FuZGJveEV4dGVuc2lvbi5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1
bWVudENvZGVycy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KQEAgLTQz
LDExICs0NCwxMiBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktp
dCB7CiAKLSNpZiBVU0UoTkVUV09SS19TRVNTSU9OKSAmJiBQTEFURk9STShDT0NPQSkKLURvd25s
b2FkOjpEb3dubG9hZChEb3dubG9hZE1hbmFnZXImIGRvd25sb2FkTWFuYWdlciwgRG93bmxvYWRJ
RCBkb3dubG9hZElELCBOU1VSTFNlc3Npb25Eb3dubG9hZFRhc2sqIGRvd25sb2FkLCBjb25zdCBX
ZWJDb3JlOjpTZXNzaW9uSUQmIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWROYW1l
KQorI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCitEb3dubG9hZDo6RG93bmxvYWQoRG93bmxvYWRN
YW5hZ2VyJiBkb3dubG9hZE1hbmFnZXIsIERvd25sb2FkSUQgZG93bmxvYWRJRCwgUGxhdGZvcm1E
b3dubG9hZFRhc2tSZWYgZG93bmxvYWQsIGNvbnN0IFdlYkNvcmU6OlNlc3Npb25JRCYgc2Vzc2lv
bklELCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZE5hbWUpCiAgICAgOiBtX2Rvd25sb2FkTWFuYWdl
cihkb3dubG9hZE1hbmFnZXIpCiAgICAgLCBtX2Rvd25sb2FkSUQoZG93bmxvYWRJRCkKICAgICAs
IG1fZG93bmxvYWQoZG93bmxvYWQpCisgICAgLCBtX3Nlc3Npb25JRChzZXNzaW9uSUQpCiAgICAg
LCBtX3N1Z2dlc3RlZE5hbWUoc3VnZ2VzdGVkTmFtZSkKIHsKICAgICBBU1NFUlQobV9kb3dubG9h
ZElELmRvd25sb2FkSUQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L0Rvd25sb2Fkcy9Eb3dubG9hZC5oCmluZGV4IDc5ODlmN2UuLmY3YzQyOTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5oCkBAIC00
Nyw2ICs0NywxOSBAQCBPQkpDX0NMQVNTIFdLRG93bmxvYWRBc0RlbGVnYXRlOwogI2VuZGlmCiAj
ZW5kaWYKIAorI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisjaWYgUExBVEZPUk0oQ09DT0EpCit0
eXBlZGVmIE5TVVJMU2Vzc2lvbkRvd25sb2FkVGFzayogUGxhdGZvcm1Eb3dubG9hZFRhc2tSZWY7
CisjZWxpZiBVU0UoU09VUCkKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgTmV0d29ya0RhdGFU
YXNrOworfQordHlwZWRlZiBXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzayogUGxhdGZvcm1Eb3dubG9h
ZFRhc2tSZWY7CisjZWxzZQordHlwZWRlZiB2b2lkKiBQbGF0Zm9ybURvd25sb2FkVGFza1JlZjsK
KyNlbmRpZgorI2VuZGlmCisKIG5hbWVzcGFjZSBJUEMgewogY2xhc3MgRGF0YVJlZmVyZW5jZTsK
IH0KQEAgLTY4LDggKzgxLDggQEAgY2xhc3MgV2ViUGFnZTsKIGNsYXNzIERvd25sb2FkIDogcHVi
bGljIElQQzo6TWVzc2FnZVNlbmRlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRG93bmxv
YWQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSNpZiBVU0UoTkVUV09SS19T
RVNTSU9OKSAmJiBQTEFURk9STShDT0NPQSkKLSAgICBEb3dubG9hZChEb3dubG9hZE1hbmFnZXIm
LCBEb3dubG9hZElELCBOU1VSTFNlc3Npb25Eb3dubG9hZFRhc2sqLCBjb25zdCBXZWJDb3JlOjpT
ZXNzaW9uSUQmIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSA9IHsg
fSk7CisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKyAgICBEb3dubG9hZChEb3dubG9hZE1hbmFn
ZXImLCBEb3dubG9hZElELCBQbGF0Zm9ybURvd25sb2FkVGFza1JlZiwgY29uc3QgV2ViQ29yZTo6
U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUgPSB7
IH0pOwogI2VuZGlmCiAgICAgRG93bmxvYWQoRG93bmxvYWRNYW5hZ2VyJiwgRG93bmxvYWRJRCwg
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRG
aWxlbmFtZSA9IHsgfSk7CiAKQEAgLTEyNiwxNSArMTM5LDIxIEBAIHByaXZhdGU6CiAKICAgICBS
ZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4gbV9zYW5kYm94RXh0ZW5zaW9uOwogCi0jaWYgUExBVEZP
Uk0oQ09DT0EpCiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKyNpZiBQTEFURk9STShDT0NPQSkK
ICAgICBSZXRhaW5QdHI8TlNVUkxTZXNzaW9uRG93bmxvYWRUYXNrPiBtX2Rvd25sb2FkOwotICAg
IFdlYkNvcmU6OlNlc3Npb25JRCBtX3Nlc3Npb25JRDsKKyNlbGlmIFVTRShTT1VQKQorICAgIFJl
ZlB0cjxOZXR3b3JrRGF0YVRhc2s+IG1fZG93bmxvYWQ7CiAjZWxzZQorICAgIFBsYXRmb3JtRG93
bmxvYWRUYXNrUmVmIG1fZG93bmxvYWQ7CisjZW5kaWYKKyAgICBXZWJDb3JlOjpTZXNzaW9uSUQg
bV9zZXNzaW9uSUQ7CisjZWxzZSAvLyBVU0UoTkVUV09SS19TRVNTSU9OKQorI2lmIFBMQVRGT1JN
KENPQ09BKQogICAgIFJldGFpblB0cjxOU1VSTERvd25sb2FkPiBtX25zVVJMRG93bmxvYWQ7CiAg
ICAgUmV0YWluUHRyPFdLRG93bmxvYWRBc0RlbGVnYXRlPiBtX2RlbGVnYXRlOwogI2VuZGlmCi0j
ZW5kaWYKKyNlbmRpZiAvLyBVU0UoTkVUV09SS19TRVNTSU9OKQogICAgIHN0ZDo6dW5pcXVlX3B0
cjxXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUNsaWVudD4gbV9kb3dubG9hZENsaWVudDsKICAgICBS
ZWZQdHI8V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU+IG1fcmVzb3VyY2VIYW5kbGU7CiAgICAgU3Ry
aW5nIG1fc3VnZ2VzdGVkTmFtZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL0Rvd25sb2Fkcy9zb3VwL0Rvd25sb2FkU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvc291cC9Eb3dubG9hZFNvdXAuY3BwCmluZGV4IDY4MDc5
MTcuLjgyZThjNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rv
d25sb2Fkcy9zb3VwL0Rvd25sb2FkU291cC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvRG93bmxvYWRzL3NvdXAvRG93bmxvYWRTb3VwLmNwcApAQCAtMjgsMjA0ICsyOCwx
MyBAQAogI2luY2x1ZGUgIkRvd25sb2FkLmgiCiAKICNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgi
Ci0jaW5jbHVkZSAiRG93bmxvYWRTb3VwRXJyb3JzLmgiCisjaW5jbHVkZSAiTmV0d29ya0RhdGFU
YXNrLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oPgotI2luY2x1ZGUgPGdpby9naW8uaD4KLSNp
bmNsdWRlIDx3dGYvUnVuTG9vcC5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KLSNp
bmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgotCi0jaWYgUExBVEZPUk0oR1RLKQotI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+Ci0j
ZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewog
Ci1jbGFzcyBEb3dubG9hZENsaWVudCBmaW5hbCA6IHB1YmxpYyBSZXNvdXJjZUhhbmRsZUNsaWVu
dCB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRG93bmxvYWRDbGllbnQpOwotcHVibGljOgot
ICAgIERvd25sb2FkQ2xpZW50KERvd25sb2FkJiBkb3dubG9hZCkKLSAgICAgICAgOiBtX2Rvd25s
b2FkKGRvd25sb2FkKQotICAgICAgICAsIG1faGFuZGxlUmVzcG9uc2VMYXRlcihSdW5Mb29wOjpt
YWluKCksIHRoaXMsICZEb3dubG9hZENsaWVudDo6aGFuZGxlUmVzcG9uc2UpCi0gICAgICAgICwg
bV9hbGxvd092ZXJ3cml0ZShmYWxzZSkKLSAgICB7Ci0gICAgfQotCi0gICAgfkRvd25sb2FkQ2xp
ZW50KCkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBkZWxldGVGaWxlc0lmTmVlZGVkKCkKLSAg
ICB7Ci0gICAgICAgIGlmIChtX2Rlc3RpbmF0aW9uRmlsZSkKLSAgICAgICAgICAgIGdfZmlsZV9k
ZWxldGUobV9kZXN0aW5hdGlvbkZpbGUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOwotCi0gICAg
ICAgIGlmIChtX2ludGVybWVkaWF0ZUZpbGUpIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2Rlc3Rp
bmF0aW9uRmlsZSk7Ci0gICAgICAgICAgICBnX2ZpbGVfZGVsZXRlKG1faW50ZXJtZWRpYXRlRmls
ZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2b2lk
IGRvd25sb2FkRmFpbGVkKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQotICAgIHsKLSAgICAg
ICAgZGVsZXRlRmlsZXNJZk5lZWRlZCgpOwotICAgICAgICBtX2Rvd25sb2FkLmRpZEZhaWwoZXJy
b3IsIElQQzo6RGF0YVJlZmVyZW5jZSgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGRpZFJlY2VpdmVS
ZXNwb25zZShSZXNvdXJjZUhhbmRsZSosIFJlc291cmNlUmVzcG9uc2UmJiByZXNwb25zZSkgb3Zl
cnJpZGUKLSAgICB7Ci0gICAgICAgIG1fcmVzcG9uc2UgPSBXVEZNb3ZlKHJlc3BvbnNlKTsKLSAg
ICAgICAgbV9kb3dubG9hZC5kaWRSZWNlaXZlUmVzcG9uc2UobV9yZXNwb25zZSk7Ci0KLSAgICAg
ICAgaWYgKG1fcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSA+PSA0MDApIHsKLSAgICAgICAgICAg
IGRvd25sb2FkRmFpbGVkKHBsYXRmb3JtRG93bmxvYWROZXR3b3JrRXJyb3IobV9yZXNwb25zZS5o
dHRwU3RhdHVzQ29kZSgpLCBtX3Jlc3BvbnNlLnVybCgpLCBtX3Jlc3BvbnNlLmh0dHBTdGF0dXNU
ZXh0KCkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmlu
ZyBzdWdnZXN0ZWRGaWxlbmFtZSA9IG1fcmVzcG9uc2Uuc3VnZ2VzdGVkRmlsZW5hbWUoKTsKLSAg
ICAgICAgaWYgKHN1Z2dlc3RlZEZpbGVuYW1lLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgVVJM
IHVybCA9IG1fcmVzcG9uc2UudXJsKCk7Ci0gICAgICAgICAgICB1cmwuc2V0UXVlcnkoU3RyaW5n
KCkpOwotICAgICAgICAgICAgdXJsLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOwotICAgICAg
ICAgICAgc3VnZ2VzdGVkRmlsZW5hbWUgPSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXModXJsLmxh
c3RQYXRoQ29tcG9uZW50KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nIGRlc3RpbmF0
aW9uVVJJID0gbV9kb3dubG9hZC5kZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFt
ZShzdWdnZXN0ZWRGaWxlbmFtZSwgbV9hbGxvd092ZXJ3cml0ZSk7Ci0gICAgICAgIGlmIChkZXN0
aW5hdGlvblVSSS5pc0VtcHR5KCkpIHsKLSNpZiBQTEFURk9STShHVEspCi0gICAgICAgICAgICBH
VW5pcXVlUHRyPGNoYXI+IGJ1ZmZlcihnX3N0cmR1cF9wcmludGYoXygiQ2Fubm90IGRldGVybWlu
ZSBkZXN0aW5hdGlvbiBVUkkgZm9yIGRvd25sb2FkIHdpdGggc3VnZ2VzdGVkIGZpbGVuYW1lICVz
IiksIHN1Z2dlc3RlZEZpbGVuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICAgICAgICAgIFN0cmlu
ZyBlcnJvck1lc3NhZ2UgPSBTdHJpbmc6OmZyb21VVEY4KGJ1ZmZlci5nZXQoKSk7Ci0jZWxzZQot
ICAgICAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcoIkNhbm5vdCBkZXRl
cm1pbmUgZGVzdGluYXRpb24gVVJJIGZvciBkb3dubG9hZCB3aXRoIHN1Z2dlc3RlZCBmaWxlbmFt
ZSAiLCBzdWdnZXN0ZWRGaWxlbmFtZSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGRvd25sb2FkRmFp
bGVkKHBsYXRmb3JtRG93bmxvYWREZXN0aW5hdGlvbkVycm9yKG1fcmVzcG9uc2UsIGVycm9yTWVz
c2FnZSkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9kZXN0
aW5hdGlvbkZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfdXJpKGRlc3RpbmF0aW9uVVJJ
LnV0ZjgoKS5kYXRhKCkpKTsKLSAgICAgICAgR1JlZlB0cjxHRmlsZU91dHB1dFN0cmVhbT4gb3V0
cHV0U3RyZWFtOwotICAgICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgICAg
IGlmIChtX2FsbG93T3ZlcndyaXRlKQotICAgICAgICAgICAgb3V0cHV0U3RyZWFtID0gYWRvcHRH
UmVmKGdfZmlsZV9yZXBsYWNlKG1fZGVzdGluYXRpb25GaWxlLmdldCgpLCBudWxscHRyLCBGQUxT
RSwgR19GSUxFX0NSRUFURV9OT05FLCBudWxscHRyLCAmZXJyb3Iub3V0UHRyKCkpKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgb3V0cHV0U3RyZWFtID0gYWRvcHRHUmVmKGdfZmlsZV9jcmVh
dGUobV9kZXN0aW5hdGlvbkZpbGUuZ2V0KCksIEdfRklMRV9DUkVBVEVfTk9ORSwgbnVsbHB0ciwg
JmVycm9yLm91dFB0cigpKSk7Ci0gICAgICAgIGlmICghb3V0cHV0U3RyZWFtKSB7Ci0gICAgICAg
ICAgICBtX2Rlc3RpbmF0aW9uRmlsZS5jbGVhcigpOwotICAgICAgICAgICAgZG93bmxvYWRGYWls
ZWQocGxhdGZvcm1Eb3dubG9hZERlc3RpbmF0aW9uRXJyb3IobV9yZXNwb25zZSwgZXJyb3ItPm1l
c3NhZ2UpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmlu
ZyBpbnRlcm1lZGlhdGVVUkkgPSBkZXN0aW5hdGlvblVSSSArICIud2tkb3dubG9hZCI7Ci0gICAg
ICAgIG1faW50ZXJtZWRpYXRlRmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl91cmkoaW50
ZXJtZWRpYXRlVVJJLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICAgICAgbV9vdXRwdXRTdHJlYW0gPSBh
ZG9wdEdSZWYoZ19maWxlX3JlcGxhY2UobV9pbnRlcm1lZGlhdGVGaWxlLmdldCgpLCAwLCBUUlVF
LCBHX0ZJTEVfQ1JFQVRFX05PTkUsIDAsICZlcnJvci5vdXRQdHIoKSkpOwotICAgICAgICBpZiAo
IW1fb3V0cHV0U3RyZWFtKSB7Ci0gICAgICAgICAgICBkb3dubG9hZEZhaWxlZChwbGF0Zm9ybURv
d25sb2FkRGVzdGluYXRpb25FcnJvcihtX3Jlc3BvbnNlLCBlcnJvci0+bWVzc2FnZSkpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9kb3dubG9hZC5kaWRDcmVh
dGVEZXN0aW5hdGlvbihkZXN0aW5hdGlvblVSSSk7Ci0gICAgfQotCi0gICAgdm9pZCBkaWRSZWNl
aXZlRGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0
aCwgaW50IC8qZW5jb2RlZERhdGFMZW5ndGgqLykgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIGlm
IChtX2hhbmRsZVJlc3BvbnNlTGF0ZXIuaXNBY3RpdmUoKSkgewotICAgICAgICAgICAgbV9oYW5k
bGVSZXNwb25zZUxhdGVyLnN0b3AoKTsKLSAgICAgICAgICAgIGhhbmRsZVJlc3BvbnNlKCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBnc2l6ZSBieXRlc1dyaXR0ZW47Ci0gICAgICAgIEdVbmlxdWVP
dXRQdHI8R0Vycm9yPiBlcnJvcjsKLSAgICAgICAgZ19vdXRwdXRfc3RyZWFtX3dyaXRlX2FsbChH
X09VVFBVVF9TVFJFQU0obV9vdXRwdXRTdHJlYW0uZ2V0KCkpLCBkYXRhLCBsZW5ndGgsICZieXRl
c1dyaXR0ZW4sIDAsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgICAgIGlmIChlcnJvcikgewotICAg
ICAgICAgICAgZG93bmxvYWRGYWlsZWQocGxhdGZvcm1Eb3dubG9hZERlc3RpbmF0aW9uRXJyb3Io
bV9yZXNwb25zZSwgZXJyb3ItPm1lc3NhZ2UpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICBtX2Rvd25sb2FkLmRpZFJlY2VpdmVEYXRhKGJ5dGVzV3JpdHRlbik7Ci0g
ICAgfQotCi0gICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKFJlc291cmNlSGFuZGxlKiwgZG91Ymxl
KSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgbV9vdXRwdXRTdHJlYW0gPSBudWxscHRyOwotCi0g
ICAgICAgIEFTU0VSVChtX2Rlc3RpbmF0aW9uRmlsZSk7Ci0gICAgICAgIEFTU0VSVChtX2ludGVy
bWVkaWF0ZUZpbGUpOwotICAgICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAg
ICAgIGlmICghZ19maWxlX21vdmUobV9pbnRlcm1lZGlhdGVGaWxlLmdldCgpLCBtX2Rlc3RpbmF0
aW9uRmlsZS5nZXQoKSwgR19GSUxFX0NPUFlfT1ZFUldSSVRFLCBudWxscHRyLCBudWxscHRyLCBu
dWxscHRyLCAmZXJyb3Iub3V0UHRyKCkpKSB7Ci0gICAgICAgICAgICBkb3dubG9hZEZhaWxlZChw
bGF0Zm9ybURvd25sb2FkRGVzdGluYXRpb25FcnJvcihtX3Jlc3BvbnNlLCBlcnJvci0+bWVzc2Fn
ZSkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgR1JlZlB0cjxH
RmlsZUluZm8+IGluZm8gPSBhZG9wdEdSZWYoZ19maWxlX2luZm9fbmV3KCkpOwotICAgICAgICBD
U3RyaW5nIHVyaSA9IG1fcmVzcG9uc2UudXJsKCkuc3RyaW5nKCkudXRmOCgpOwotICAgICAgICBn
X2ZpbGVfaW5mb19zZXRfYXR0cmlidXRlX3N0cmluZyhpbmZvLmdldCgpLCAibWV0YWRhdGE6OmRv
d25sb2FkLXVyaSIsIHVyaS5kYXRhKCkpOwotICAgICAgICBnX2ZpbGVfaW5mb19zZXRfYXR0cmli
dXRlX3N0cmluZyhpbmZvLmdldCgpLCAieGF0dHI6OnhkZy5vcmlnaW4udXJsIiwgdXJpLmRhdGEo
KSk7Ci0gICAgICAgIGdfZmlsZV9zZXRfYXR0cmlidXRlc19hc3luYyhtX2Rlc3RpbmF0aW9uRmls
ZS5nZXQoKSwgaW5mby5nZXQoKSwgR19GSUxFX1FVRVJZX0lORk9fTk9ORSwgR19QUklPUklUWV9E
RUZBVUxULCBudWxscHRyLCBudWxscHRyLCBudWxscHRyKTsKLQotICAgICAgICBtX2Rvd25sb2Fk
LmRpZEZpbmlzaCgpOwotICAgIH0KLQotICAgIHZvaWQgZGlkRmFpbChSZXNvdXJjZUhhbmRsZSos
IGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgZG93
bmxvYWRGYWlsZWQocGxhdGZvcm1Eb3dubG9hZE5ldHdvcmtFcnJvcihlcnJvci5lcnJvckNvZGUo
KSwgZXJyb3IuZmFpbGluZ1VSTCgpLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpKSk7Ci0g
ICAgfQotCi0gICAgdm9pZCBjYW5jZWwoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKLSAgICB7Ci0g
ICAgICAgIGhhbmRsZS0+Y2FuY2VsKCk7Ci0gICAgICAgIGRlbGV0ZUZpbGVzSWZOZWVkZWQoKTsK
LSAgICAgICAgbV9kb3dubG9hZC5kaWRDYW5jZWwoSVBDOjpEYXRhUmVmZXJlbmNlKCkpOwotICAg
IH0KLQotICAgIHZvaWQgaGFuZGxlUmVzcG9uc2UoKQotICAgIHsKLSAgICAgICAgZGlkUmVjZWl2
ZVJlc3BvbnNlKG51bGxwdHIsIFdURk1vdmUobV9kZWxheWVkUmVzcG9uc2UpKTsKLSAgICB9Ci0K
LSAgICB2b2lkIGhhbmRsZVJlc3BvbnNlTGF0ZXIoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVz
cG9uc2UpCi0gICAgewotICAgICAgICBBU1NFUlQobV9yZXNwb25zZS5pc051bGwoKSk7Ci0gICAg
ICAgIEFTU0VSVCghbV9oYW5kbGVSZXNwb25zZUxhdGVyLmlzQWN0aXZlKCkpOwotCi0gICAgICAg
IG1fZGVsYXllZFJlc3BvbnNlID0gcmVzcG9uc2U7Ci0KLSAgICAgICAgLy8gQ2FsbCBkaWRSZWNl
aXZlUmVzcG9uc2UgaW4gYW4gaWRsZSB0byBtYWtlIHN1cmUgdGhlIGRvd25sb2FkIGlzIGFkZGVk
Ci0gICAgICAgIC8vIHRvIHRoZSBEb3dubG9hZE1hbmFnZXIgZG93bmxvYWRzIG1hcC4KLSAgICAg
ICAgbV9oYW5kbGVSZXNwb25zZUxhdGVyLnN0YXJ0T25lU2hvdCgwKTsKLSAgICB9Ci0KLSAgICBE
b3dubG9hZCYgbV9kb3dubG9hZDsKLSAgICBHUmVmUHRyPEdGaWxlT3V0cHV0U3RyZWFtPiBtX291
dHB1dFN0cmVhbTsKLSAgICBSZXNvdXJjZVJlc3BvbnNlIG1fcmVzcG9uc2U7Ci0gICAgR1JlZlB0
cjxHRmlsZT4gbV9kZXN0aW5hdGlvbkZpbGU7Ci0gICAgR1JlZlB0cjxHRmlsZT4gbV9pbnRlcm1l
ZGlhdGVGaWxlOwotICAgIFJlc291cmNlUmVzcG9uc2UgbV9kZWxheWVkUmVzcG9uc2U7Ci0gICAg
UnVuTG9vcDo6VGltZXI8RG93bmxvYWRDbGllbnQ+IG1faGFuZGxlUmVzcG9uc2VMYXRlcjsKLSAg
ICBib29sIG1fYWxsb3dPdmVyd3JpdGU7Ci19OwotCi12b2lkIERvd25sb2FkOjpzdGFydE5ldHdv
cmtMb2FkKCkKLXsKLSAgICBBU1NFUlQoIW1fZG93bmxvYWRDbGllbnQpOwotICAgIEFTU0VSVCgh
bV9yZXNvdXJjZUhhbmRsZSk7Ci0gICAgbV9kb3dubG9hZENsaWVudCA9IHN0ZDo6bWFrZV91bmlx
dWU8RG93bmxvYWRDbGllbnQ+KCp0aGlzKTsKLSAgICBtX3Jlc291cmNlSGFuZGxlID0gUmVzb3Vy
Y2VIYW5kbGU6OmNyZWF0ZSgwLCBtX3JlcXVlc3QsIG1fZG93bmxvYWRDbGllbnQuZ2V0KCksIGZh
bHNlLCB0cnVlKTsKLSAgICBkaWRTdGFydCgpOwotfQotCi12b2lkIERvd25sb2FkOjpzdGFydE5l
dHdvcmtMb2FkV2l0aEhhbmRsZShSZXNvdXJjZUhhbmRsZSogcmVzb3VyY2VIYW5kbGUsIGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQotewotICAgIEFTU0VSVCghbV9kb3dubG9hZENs
aWVudCk7Ci0gICAgQVNTRVJUKCFtX3Jlc291cmNlSGFuZGxlKTsKLSAgICBtX2Rvd25sb2FkQ2xp
ZW50ID0gc3RkOjptYWtlX3VuaXF1ZTxEb3dubG9hZENsaWVudD4oKnRoaXMpOwotICAgIG1fcmVz
b3VyY2VIYW5kbGUgPSByZXNvdXJjZUhhbmRsZS0+cmVsZWFzZUZvckRvd25sb2FkKG1fZG93bmxv
YWRDbGllbnQuZ2V0KCkpOwotICAgIGRpZFN0YXJ0KCk7Ci0gICAgc3RhdGljX2Nhc3Q8RG93bmxv
YWRDbGllbnQqPihtX2Rvd25sb2FkQ2xpZW50LmdldCgpKS0+aGFuZGxlUmVzcG9uc2VMYXRlcihy
ZXNwb25zZSk7Ci19Ci0KIHZvaWQgRG93bmxvYWQ6OnJlc3VtZShjb25zdCBJUEM6OkRhdGFSZWZl
cmVuY2UmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmKQog
ewogICAgIG5vdEltcGxlbWVudGVkKCk7CkBAIC0yMzMsMTQgKzQyLDggQEAgdm9pZCBEb3dubG9h
ZDo6cmVzdW1lKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYsIGNvbnN0IFN0cmluZyYsIGNvbnN0
IFNhbmRib3hFeHQKIAogdm9pZCBEb3dubG9hZDo6Y2FuY2VsTmV0d29ya0xvYWQoKQogewotICAg
IGlmICghbV9yZXNvdXJjZUhhbmRsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQ2FuY2Vs
bGluZyB0aGUgZG93bmxvYWQgd2lsbCBkZWxldGUgaXQgYW5kIHBsYXRmb3JtSW52YWxpZGF0ZSgp
IHdpbGwgYmUgY2FsbGVkIGJ5IHRoZSBkZXN0cnVjdG9yLgotICAgIC8vIFNvLCB3ZSBuZWVkIHRv
IHNldCBtX3Jlc291cmNlSGFuZGxlIHRvIG51bGxwdHIgYmVmb3JlIGFjdHVhbGx5IGNhbmNlbGxp
bmcgdGhlIGRvd25sb2FkIHRvIG1ha2Ugc3VyZQotICAgIC8vIGl0IHdvbid0IGJlIGNhbmNlbGxl
ZCBhZ2FpbiBieSBwbGF0Zm9ybUludmFsaWRhdGUuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTI3NjUwLgotICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gcmVz
b3VyY2VIYW5kbGUgPSBtX3Jlc291cmNlSGFuZGxlLnJlbGVhc2UoKTsKLSAgICBzdGF0aWNfY2Fz
dDxEb3dubG9hZENsaWVudCo+KG1fZG93bmxvYWRDbGllbnQuZ2V0KCkpLT5jYW5jZWwocmVzb3Vy
Y2VIYW5kbGUuZ2V0KCkpOworICAgIG1fZG93bmxvYWQtPmNhbmNlbCgpOworICAgIGRpZENhbmNl
bCh7IH0pOwogfQogCiB2b2lkIERvd25sb2FkOjpwbGF0Zm9ybUludmFsaWRhdGUoKQpAQCAtMjQ5
LDcgKzUyLDYgQEAgdm9pZCBEb3dubG9hZDo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKIAogdm9pZCBE
b3dubG9hZDo6cGxhdGZvcm1EaWRGaW5pc2goKQogewotICAgIG1fcmVzb3VyY2VIYW5kbGUgPSBu
dWxscHRyOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5oIGIvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmgKaW5kZXggMzI0MmM3ZS4uYjYyNzU4YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNr
LmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0RhdGFUYXNrLmgK
QEAgLTIzLDkgKzIzLDExIEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAg
Ki8KIAotI2lmbmRlZiBOZXR3b3JrRGF0YVRhc2tfaAotI2RlZmluZSBOZXR3b3JrRGF0YVRhc2tf
aAorI3ByYWdtYSBvbmNlCiAKKyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQorCisjaW5jbHVkZSAi
RG93bmxvYWRJRC5oIgogI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKICNpbmNsdWRlIDxX
ZWJDb3JlL0NyZWRlbnRpYWwuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVyVHlwZXMu
aD4KQEAgLTQxLDYgKzQzLDEzIEBACiBPQkpDX0NMQVNTIE5TVVJMU2Vzc2lvbkRhdGFUYXNrOwog
I2VuZGlmCiAKKyNpZiBVU0UoU09VUCkKKyNpbmNsdWRlIDxXZWJDb3JlL1Byb3RlY3Rpb25TcGFj
ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXNwb25zZS5oPgorI2luY2x1ZGUgPHd0
Zi9SdW5Mb29wLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorI2VuZGlmCisKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOwogY2xhc3Mg
Q3JlZGVudGlhbDsKQEAgLTU1LDE0ICs2NCw4IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3Mg
RG93bmxvYWQ7CiBjbGFzcyBOZXR3b3JrU2Vzc2lvbjsKIGNsYXNzIFBlbmRpbmdEb3dubG9hZDsK
K2VudW0gY2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbjsKIAotZW51bSBj
bGFzcyBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uIHsKLSAgICBVc2VDcmVkZW50
aWFsLAotICAgIFBlcmZvcm1EZWZhdWx0SGFuZGxpbmcsCi0gICAgQ2FuY2VsLAotICAgIFJlamVj
dFByb3RlY3Rpb25TcGFjZQotfTsKLSAgICAKIHR5cGVkZWYgRnVuY3Rpb248dm9pZChjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKT4gUmVkaXJlY3RDb21wbGV0aW9uSGFuZGxlcjsKIHR5
cGVkZWYgRnVuY3Rpb248dm9pZChBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uLCBj
b25zdCBXZWJDb3JlOjpDcmVkZW50aWFsJik+IENoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVyOwog
dHlwZWRlZiBGdW5jdGlvbjx2b2lkKFdlYkNvcmU6OlBvbGljeUFjdGlvbik+IFJlc3BvbnNlQ29t
cGxldGlvbkhhbmRsZXI7CkBAIC0xMDUsMTkgKzEwOCwyMyBAQCBwdWJsaWM6CiAgICAgdHlwZWRl
ZiB1aW50NjRfdCBUYXNrSWRlbnRpZmllcjsKICAgICAKICAgICB+TmV0d29ya0RhdGFUYXNrKCk7
Ci0gICAgCisKKyNpZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lkIGRpZFNlbmREYXRhKHVpbnQ2
NF90IHRvdGFsQnl0ZXNTZW50LCB1aW50NjRfdCB0b3RhbEJ5dGVzRXhwZWN0ZWRUb1NlbmQpOwog
ICAgIHZvaWQgZGlkUmVjZWl2ZUNoYWxsZW5nZShjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZSYsIENoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVyJiYpOwogICAgIHZvaWQgZGlk
Q29tcGxldGVXaXRoRXJyb3IoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpOwogICAgIHZv
aWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmJiwgUmVzcG9u
c2VDb21wbGV0aW9uSGFuZGxlciYmKTsKICAgICB2b2lkIGRpZFJlY2VpdmVEYXRhKFJlZjxXZWJD
b3JlOjpTaGFyZWRCdWZmZXI+JiYpOwogICAgIHZvaWQgZGlkQmVjb21lRG93bmxvYWQoKTsKLSAg
ICAKKworICAgIHZvaWQgd2lsbFBlcmZvcm1IVFRQUmVkaXJlY3Rpb24oV2ViQ29yZTo6UmVzb3Vy
Y2VSZXNwb25zZSYmLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiwgUmVkaXJlY3RDb21wbGV0
aW9uSGFuZGxlciYmKTsKKyAgICB2b2lkIHRyYW5zZmVyU2FuZGJveEV4dGVuc2lvblRvRG93bmxv
YWQoRG93bmxvYWQmKTsKKyNlbmRpZgogICAgIE5ldHdvcmtEYXRhVGFza0NsaWVudCogY2xpZW50
KCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQ7IH0KICAgICB2b2lkIGNsZWFyQ2xpZW50KCkgeyBt
X2NsaWVudCA9IG51bGxwdHI7IH0KICAgICAKLSAgICBEb3dubG9hZElEIHBlbmRpbmdEb3dubG9h
ZElEKCkgeyByZXR1cm4gbV9wZW5kaW5nRG93bmxvYWRJRDsgfQotICAgIFBlbmRpbmdEb3dubG9h
ZCogcGVuZGluZ0Rvd25sb2FkKCkgeyByZXR1cm4gbV9wZW5kaW5nRG93bmxvYWQ7IH0KKyAgICBE
b3dubG9hZElEIHBlbmRpbmdEb3dubG9hZElEKCkgY29uc3QgeyByZXR1cm4gbV9wZW5kaW5nRG93
bmxvYWRJRDsgfQorICAgIFBlbmRpbmdEb3dubG9hZCogcGVuZGluZ0Rvd25sb2FkKCkgY29uc3Qg
eyByZXR1cm4gbV9wZW5kaW5nRG93bmxvYWQ7IH0KICAgICB2b2lkIHNldFBlbmRpbmdEb3dubG9h
ZElEKERvd25sb2FkSUQgZG93bmxvYWRJRCkKICAgICB7CiAgICAgICAgIEFTU0VSVCghbV9wZW5k
aW5nRG93bmxvYWRJRC5kb3dubG9hZElEKCkpOwpAQCAtMTMwLDE5ICsxMzcsNzMgQEAgcHVibGlj
OgogICAgICAgICBtX3BlbmRpbmdEb3dubG9hZCA9ICZwZW5kaW5nRG93bmxvYWQ7CiAgICAgfQog
ICAgIHZvaWQgc2V0UGVuZGluZ0Rvd25sb2FkTG9jYXRpb24oY29uc3QgU3RyaW5nJiBmaWxlbmFt
ZSwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiwgYm9vbCBhbGxvd092ZXJ3cml0ZSk7
Ci0gICAgY29uc3QgU3RyaW5nJiBwZW5kaW5nRG93bmxvYWRMb2NhdGlvbigpIHsgcmV0dXJuIG1f
cGVuZGluZ0Rvd25sb2FkTG9jYXRpb247IH0KKyAgICBjb25zdCBTdHJpbmcmIHBlbmRpbmdEb3du
bG9hZExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wZW5kaW5nRG93bmxvYWRMb2NhdGlvbjsg
fQorICAgIGJvb2wgaXNEb3dubG9hZCgpIGNvbnN0IHsgcmV0dXJuICEhbV9wZW5kaW5nRG93bmxv
YWRJRC5kb3dubG9hZElEKCk7IH0KIAogICAgIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYgZmlyc3RSZXF1ZXN0KCkgY29uc3QgeyByZXR1cm4gbV9maXJzdFJlcXVlc3Q7IH0KICAgICBT
dHJpbmcgc3VnZ2VzdGVkRmlsZW5hbWUoKTsKICAgICB2b2lkIHNldFN1Z2dlc3RlZEZpbGVuYW1l
KGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQgd2lsbFBlcmZvcm1IVFRQUmVkaXJlY3Rpb24oV2Vi
Q29yZTo6UmVzb3VyY2VSZXNwb25zZSYmLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiwgUmVk
aXJlY3RDb21wbGV0aW9uSGFuZGxlciYmKTsKLSAgICB2b2lkIHRyYW5zZmVyU2FuZGJveEV4dGVu
c2lvblRvRG93bmxvYWQoRG93bmxvYWQmKTsKICAgICBib29sIGFsbG93c1NwZWNpZmljSFRUUFND
ZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2Um
KTsKICAgICAKIHByaXZhdGU6CiAgICAgTmV0d29ya0RhdGFUYXNrKE5ldHdvcmtTZXNzaW9uJiwg
TmV0d29ya0RhdGFUYXNrQ2xpZW50JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jiwg
V2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHMsIFdlYkNvcmU6OkNvbnRlbnRTbmlmZmluZ1BvbGlj
eSwgYm9vbCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KTsKIAogICAg
IGJvb2wgdHJ5UGFzc3dvcmRCYXNlZEF1dGhlbnRpY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlJiwgY29uc3QgQ2hhbGxlbmdlQ29tcGxldGlvbkhhbmRsZXImKTsK
KworI2lmIFVTRShTT1VQKQorICAgIHZvaWQgdGltZW91dEZpcmVkKCk7CisgICAgdm9pZCBzdGFy
dFRpbWVvdXQoKTsKKyAgICB2b2lkIHN0b3BUaW1lb3V0KCk7CisgICAgdm9pZCBpbnZhbGlkYXRl
QW5kQ2FuY2VsKCk7CisgICAgdm9pZCBjcmVhdGVSZXF1ZXN0KGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdCYpOworICAgIHZvaWQgY2xlYXJSZXF1ZXN0KCk7CisgICAgc3RhdGljIHZvaWQg
c2VuZFJlcXVlc3RDYWxsYmFjayhTb3VwUmVxdWVzdCosIEdBc3luY1Jlc3VsdCosIE5ldHdvcmtE
YXRhVGFzayopOworICAgIHZvaWQgZGlkU2VuZFJlcXVlc3QoR1JlZlB0cjxHSW5wdXRTdHJlYW0+
JiYpOworICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKCk7CisgICAgc3RhdGljIHZvaWQgdGxz
RXJyb3JzQ2hhbmdlZENhbGxiYWNrKFNvdXBNZXNzYWdlKiwgR1BhcmFtU3BlYyosIE5ldHdvcmtE
YXRhVGFzayopOworICAgIHZvaWQgdGxzRXJyb3JzQ2hhbmdlZCgpOworICAgIHZvaWQgYXBwbHlB
dXRoZW50aWNhdGlvblRvUmVxdWVzdChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICBz
dGF0aWMgdm9pZCBhdXRoZW50aWNhdGVDYWxsYmFjayhTb3VwU2Vzc2lvbiosIFNvdXBNZXNzYWdl
KiwgU291cEF1dGgqLCBnYm9vbGVhbiByZXRyeWluZywgTmV0d29ya0RhdGFUYXNrKik7CisgICAg
dm9pZCBhdXRoZW50aWNhdGUoV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmJik7Cisg
ICAgdm9pZCBjb250aW51ZUF1dGhlbnRpY2F0ZShXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSYmKTsKKyAgICBzdGF0aWMgdm9pZCBza2lwSW5wdXRTdHJlYW1Gb3JSZWRpcmVjdGlvbkNh
bGxiYWNrKEdJbnB1dFN0cmVhbSosIEdBc3luY1Jlc3VsdCosIE5ldHdvcmtEYXRhVGFzayopOwor
ICAgIHZvaWQgc2tpcElucHV0U3RyZWFtRm9yUmVkaXJlY3Rpb24oKTsKKyAgICB2b2lkIGRpZEZp
bmlzaFNraXBJbnB1dFN0cmVhbUZvclJlZGlyZWN0aW9uKCk7CisgICAgYm9vbCBzaG91bGRTdGFy
dEhUVFBSZWRpcmVjdGlvbigpOworICAgIHZvaWQgY29udGludWVIVFRQUmVkaXJlY3Rpb24oKTsK
KyAgICBzdGF0aWMgdm9pZCByZWFkQ2FsbGJhY2soR0lucHV0U3RyZWFtKiwgR0FzeW5jUmVzdWx0
KiwgTmV0d29ya0RhdGFUYXNrKik7CisgICAgdm9pZCByZWFkKCk7CisgICAgdm9pZCBkaWRSZWFk
KGdzc2l6ZSBieXRlc1JlYWQpOworICAgIHZvaWQgZGlkRmluaXNoUmVhZCgpOworICAgIHN0YXRp
YyB2b2lkIHJlcXVlc3ROZXh0UGFydENhbGxiYWNrKFNvdXBNdWx0aXBhcnRJbnB1dFN0cmVhbSos
IEdBc3luY1Jlc3VsdCosIE5ldHdvcmtEYXRhVGFzayopOworICAgIHZvaWQgcmVxdWVzdE5leHRQ
YXJ0KCk7CisgICAgdm9pZCBkaWRSZXF1ZXN0TmV4dFBhcnQoR1JlZlB0cjxHSW5wdXRTdHJlYW0+
JiYpOworICAgIHZvaWQgZGlkRmluaXNoUmVxdWVzdE5leHRQYXJ0KCk7CisgICAgc3RhdGljIHZv
aWQgZ290SGVhZGVyc0NhbGxiYWNrKFNvdXBNZXNzYWdlKiwgTmV0d29ya0RhdGFUYXNrKik7Cisg
ICAgdm9pZCBkaWRHZXRIZWFkZXJzKCk7CisgICAgc3RhdGljIHZvaWQgd3JvdGVCb2R5RGF0YUNh
bGxiYWNrKFNvdXBNZXNzYWdlKiwgU291cEJ1ZmZlciosIE5ldHdvcmtEYXRhVGFzayopOworICAg
IHZvaWQgZGlkV3JpdGVCb2R5RGF0YSh1aW50NjRfdCBieXRlc1NlbnQpOworICAgIHZvaWQgZG93
bmxvYWQoKTsKKyAgICBzdGF0aWMgdm9pZCB3cml0ZURvd25sb2FkQ2FsbGJhY2soR091dHB1dFN0
cmVhbSosIEdBc3luY1Jlc3VsdCosIE5ldHdvcmtEYXRhVGFzayopOworICAgIHZvaWQgd3JpdGVE
b3dubG9hZCgpOworICAgIHZvaWQgZGlkV3JpdGVEb3dubG9hZChnc2l6ZSBieXRlc1dyaXR0ZW4p
OworICAgIHZvaWQgZGlkRmFpbERvd25sb2FkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3Im
KTsKKyAgICB2b2lkIGRpZEZpbmlzaERvd25sb2FkKCk7CisgICAgdm9pZCBjbGVhbkRvd25sb2Fk
RmlsZXMoKTsKKyAgICB2b2lkIGRpZEZhaWwoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYp
OworI2lmIEVOQUJMRShXRUJfVElNSU5HKQorICAgIHN0YXRpYyB2b2lkIG5ldHdvcmtFdmVudENh
bGxiYWNrKFNvdXBNZXNzYWdlKiwgR1NvY2tldENsaWVudEV2ZW50LCBHSU9TdHJlYW0qLCBOZXR3
b3JrRGF0YVRhc2sqKTsKKyAgICB2b2lkIG5ldHdvcmtFdmVudChHU29ja2V0Q2xpZW50RXZlbnQp
OworI2lmIFNPVVBfQ0hFQ0tfVkVSU0lPTigyLCA0OSwgOTEpCisgICAgc3RhdGljIHZvaWQgc3Rh
cnRpbmdDYWxsYmFjayhTb3VwTWVzc2FnZSosIE5ldHdvcmtEYXRhVGFzayopOworI2Vsc2UKKyAg
ICBzdGF0aWMgdm9pZCByZXF1ZXN0U3RhcnRlZENhbGxiYWNrKFNvdXBTZXNzaW9uKiwgU291cE1l
c3NhZ2UqLCBTb3VwU29ja2V0KiwgTmV0d29ya0RhdGFUYXNrKik7CisjZW5kaWYKKyAgICB2b2lk
IGRpZFN0YXJ0UmVxdWVzdCgpOworICAgIHN0YXRpYyB2b2lkIHJlc3RhcnRlZENhbGxiYWNrKFNv
dXBNZXNzYWdlKiwgTmV0d29ya0RhdGFUYXNrKik7CisgICAgdm9pZCBkaWRSZXN0YXJ0KCk7Cisj
ZW5kaWYKKyNlbmRpZgogICAgIAogICAgIGVudW0gRmFpbHVyZVR5cGUgewogICAgICAgICBOb0Zh
aWx1cmUsCkBAIC0xNzIsNiArMjMzLDMwIEBAIHByaXZhdGU6CiAjaWYgUExBVEZPUk0oQ09DT0Ep
CiAgICAgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbkRhdGFUYXNrPiBtX3Rhc2s7CiAjZW5kaWYKKyNp
ZiBVU0UoU09VUCkKKyAgICBTdGF0ZSBtX3N0YXRlIHsgU3RhdGU6OlN1c3BlbmRlZCB9OworICAg
IFdlYkNvcmU6OkNvbnRlbnRTbmlmZmluZ1BvbGljeSBtX3Nob3VsZENvbnRlbnRTbmlmZjsKKyAg
ICBHUmVmUHRyPFNvdXBSZXF1ZXN0PiBtX3NvdXBSZXF1ZXN0OworICAgIEdSZWZQdHI8U291cE1l
c3NhZ2U+IG1fc291cE1lc3NhZ2U7CisgICAgR1JlZlB0cjxHSW5wdXRTdHJlYW0+IG1faW5wdXRT
dHJlYW07CisgICAgR1JlZlB0cjxTb3VwTXVsdGlwYXJ0SW5wdXRTdHJlYW0+IG1fbXVsdGlwYXJ0
SW5wdXRTdHJlYW07CisgICAgR1JlZlB0cjxHQ2FuY2VsbGFibGU+IG1fY2FuY2VsbGFibGU7Cisg
ICAgR1JlZlB0cjxHQXN5bmNSZXN1bHQ+IG1fcGVuZGluZ1Jlc3VsdDsKKyAgICBXZWJDb3JlOjpQ
cm90ZWN0aW9uU3BhY2UgbV9wcm90ZWN0aW9uU3BhY2VGb3JQZXJzaXN0ZW50U3RvcmFnZTsKKyAg
ICBXZWJDb3JlOjpDcmVkZW50aWFsIG1fY3JlZGVudGlhbEZvclBlcnNpc3RlbnRTdG9yYWdlOwor
ICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsKKyAgICBWZWN0b3I8Y2hh
cj4gbV9yZWFkQnVmZmVyOworICAgIHVuc2lnbmVkIG1fcmVkaXJlY3RDb3VudCB7IDAgfTsKKyAg
ICB1aW50NjRfdCBtX2JvZHlEYXRhVG90YWxCeXRlc1NlbnQgeyAwIH07CisgICAgR1JlZlB0cjxH
RmlsZT4gbV9kb3dubG9hZERlc3RpbmF0aW9uRmlsZTsKKyAgICBHUmVmUHRyPEdGaWxlPiBtX2Rv
d25sb2FkSW50ZXJtZWRpYXRlRmlsZTsKKyAgICBHUmVmUHRyPEdPdXRwdXRTdHJlYW0+IG1fZG93
bmxvYWRPdXRwdXRTdHJlYW07CisgICAgYm9vbCBtX2FsbG93T3ZlcndyaXRlRG93bmxvYWQgeyBm
YWxzZSB9OworI2lmIEVOQUJMRShXRUJfVElNSU5HKQorICAgIGRvdWJsZSBtX3N0YXJ0VGltZSB7
IDAgfTsKKyNlbmRpZgorICAgIFJ1bkxvb3A6OlRpbWVyPE5ldHdvcmtEYXRhVGFzaz4gbV90aW1l
b3V0U291cmNlOworI2VuZGlmCiAgICAgU3RyaW5nIG1fc3VnZ2VzdGVkRmlsZW5hbWU7CiB9Owog
CkBAIC0xODEsNCArMjY2LDQgQEAgV2ViQ29yZTo6Q3JlZGVudGlhbCBzZXJ2ZXJUcnVzdENyZWRl
bnRpYWwoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UKICAgICAKIH0KIAot
I2VuZGlmCisjZW5kaWYgLy8gVVNFKE5FVFdPUktfU0VTU0lPTikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmNwcAppbmRleCBiYjI5OWY2Li44ZmQ0YWNkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuY3BwCkBAIC0y
NzEsNyArMjcxLDcgQEAgdm9pZCBOZXR3b3JrTG9hZDo6Y29tcGxldGVBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZShDaGFsbGVuZ2VDb21wbGV0aW9uSGFuZGxlciYmIGMKIHZvaWQgTmV0d29ya0xvYWQ6
OmRpZFJlY2VpdmVSZXNwb25zZU5ldHdvcmtTZXNzaW9uKFJlc291cmNlUmVzcG9uc2UmJiByZXNw
b25zZSwgUmVzcG9uc2VDb21wbGV0aW9uSGFuZGxlciYmIGNvbXBsZXRpb25IYW5kbGVyKQogewog
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKG1fdGFzayAmJiBtX3Rhc2stPnBl
bmRpbmdEb3dubG9hZElEKCkuZG93bmxvYWRJRCgpKQorICAgIGlmIChtX3Rhc2sgJiYgbV90YXNr
LT5pc0Rvd25sb2FkKCkpCiAgICAgICAgIE5ldHdvcmtQcm9jZXNzOjpzaW5nbGV0b24oKS5maW5k
UGVuZGluZ0Rvd25sb2FkTG9jYXRpb24oKm1fdGFzay5nZXQoKSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlciksIHJlc3BvbnNlKTsKICAgICBlbHNlIGlmIChzaGFyZWREaWRSZWNlaXZlUmVzcG9u
c2UoV1RGTW92ZShyZXNwb25zZSkpID09IE5ldHdvcmtMb2FkQ2xpZW50OjpTaG91bGRDb250aW51
ZURpZFJlY2VpdmVSZXNwb25zZTo6WWVzKQogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihQb2xp
Y3lVc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MuY3BwCmluZGV4IDNiMzk1ZDYuLjZlZjE3NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNs
dWRlICJOZXR3b3JrUHJvY2Vzc1BsYXRmb3JtU3RyYXRlZ2llcy5oIgogI2luY2x1ZGUgIk5ldHdv
cmtQcm9jZXNzUHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIk5ldHdvcmtSZXNvdXJjZUxvYWRl
ci5oIgorI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uLmgiCiAjaW5jbHVkZSAiUmVtb3RlTmV0d29y
a2luZ0NvbnRleHQuaCIKICNpbmNsdWRlICJTZXNzaW9uVHJhY2tlci5oIgogI2luY2x1ZGUgIlN0
YXRpc3RpY3NEYXRhLmgiCkBAIC0xMDAsNyArMTAxLDcgQEAgTmV0d29ya1Byb2Nlc3M6Ok5ldHdv
cmtQcm9jZXNzKCkKICAgICBhZGRTdXBwbGVtZW50PEF1dGhlbnRpY2F0aW9uTWFuYWdlcj4oKTsK
ICAgICBhZGRTdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXI+KCk7CiAgICAgYWRkU3VwcGxlbWVu
dDxDdXN0b21Qcm90b2NvbE1hbmFnZXI+KCk7Ci0jaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKyNp
ZiBVU0UoTkVUV09SS19TRVNTSU9OKSAmJiBQTEFURk9STShDT0NPQSkKICAgICBOZXR3b3JrU2Vz
c2lvbjo6c2V0Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyKHN1cHBsZW1lbnQ8Q3VzdG9tUHJvdG9jb2xN
YW5hZ2VyPigpKTsKICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtTZXNzaW9uLmgKaW5kZXggYTg0MGYxZC4uYjA4ODJmMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oCkBAIC0yNSw2ICsyNSw4IEBA
CiAKICNwcmFnbWEgb25jZQogCisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKwogI2lmIFBMQVRG
T1JNKENPQ09BKQogT0JKQ19DTEFTUyBOU1VSTFNlc3Npb247CiBPQkpDX0NMQVNTIE5TT3BlcmF0
aW9uUXVldWU7CkBAIC0zNSw5ICszNywxNCBAQCBPQkpDX0NMQVNTIFdLTmV0d29ya1Nlc3Npb25E
ZWxlZ2F0ZTsKICNpbmNsdWRlICJOZXR3b3JrRGF0YVRhc2suaCIKICNpbmNsdWRlIDxXZWJDb3Jl
L1Nlc3Npb25JRC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KIAorI2lmIFVTRShTT1VQKQordHlwZWRlZiBzdHJ1Y3QgX1NvdXBTZXNzaW9uIFNvdXBTZXNz
aW9uOworI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIE5ldHdvcmtTdG9yYWdl
U2Vzc2lvbjsKIH0KQEAgLTYyLDkgKzY5LDEzIEBAIHB1YmxpYzoKIAogICAgIFdlYkNvcmU6OlNl
c3Npb25JRCBzZXNzaW9uSUQoKSBjb25zdCB7IHJldHVybiBtX3Nlc3Npb25JRDsgfQogCisjaWYg
VVNFKFNPVVApCisgICAgU291cFNlc3Npb24qIHNvdXBTZXNzaW9uKCkgY29uc3Q7CisjZW5kaWYK
KworI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIC8vIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBhbnkg
TmV0d29ya1Nlc3Npb24gaGFzIGJlZW4gY3JlYXRlZC4KICAgICBzdGF0aWMgdm9pZCBzZXRDdXN0
b21Qcm90b2NvbE1hbmFnZXIoQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyKik7Ci0jaWYgUExBVEZPUk0o
Q09DT0EpCiAgICAgc3RhdGljIHZvaWQgc2V0U291cmNlQXBwbGljYXRpb25BdWRpdFRva2VuRGF0
YShSZXRhaW5QdHI8Q0ZEYXRhUmVmPiYmKTsKICAgICBzdGF0aWMgdm9pZCBzZXRTb3VyY2VBcHBs
aWNhdGlvbkJ1bmRsZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJik7CiAgICAgc3RhdGljIHZvaWQg
c2V0U291cmNlQXBwbGljYXRpb25TZWNvbmRhcnlJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYpOwpA
QCAtNzQsMjkgKzg1LDM0IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgdm9pZCBjbGVhckNyZWRl
bnRpYWxzKCk7Ci0KKyNpZiBQTEFURk9STShDT0NPQSkKICAgICBOZXR3b3JrRGF0YVRhc2sqIGRh
dGFUYXNrRm9ySWRlbnRpZmllcihOZXR3b3JrRGF0YVRhc2s6OlRhc2tJZGVudGlmaWVyLCBXZWJD
b3JlOjpTdG9yZWRDcmVkZW50aWFscyk7CiAKICAgICB2b2lkIGFkZERvd25sb2FkSUQoTmV0d29y
a0RhdGFUYXNrOjpUYXNrSWRlbnRpZmllciwgRG93bmxvYWRJRCk7CiAgICAgRG93bmxvYWRJRCBk
b3dubG9hZElEKE5ldHdvcmtEYXRhVGFzazo6VGFza0lkZW50aWZpZXIpOwogICAgIERvd25sb2Fk
SUQgdGFrZURvd25sb2FkSUQoTmV0d29ya0RhdGFUYXNrOjpUYXNrSWRlbnRpZmllcik7Ci0gICAg
CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBOZXR3b3JrU2Vzc2lvbihUeXBlLCBXZWJDb3JlOjpT
ZXNzaW9uSUQsIEN1c3RvbVByb3RvY29sTWFuYWdlciopOwotICAgIFdlYkNvcmU6Ok5ldHdvcmtT
dG9yYWdlU2Vzc2lvbiYgbmV0d29ya1N0b3JhZ2VTZXNzaW9uKCk7CisgICAgV2ViQ29yZTo6TmV0
d29ya1N0b3JhZ2VTZXNzaW9uJiBuZXR3b3JrU3RvcmFnZVNlc3Npb24oKSBjb25zdDsKIAogICAg
IFdlYkNvcmU6OlNlc3Npb25JRCBtX3Nlc3Npb25JRDsKIAorI2lmIFBMQVRGT1JNKENPQ09BKQog
ICAgIEhhc2hNYXA8TmV0d29ya0RhdGFUYXNrOjpUYXNrSWRlbnRpZmllciwgTmV0d29ya0RhdGFU
YXNrKj4gbV9kYXRhVGFza01hcFdpdGhDcmVkZW50aWFsczsKICAgICBIYXNoTWFwPE5ldHdvcmtE
YXRhVGFzazo6VGFza0lkZW50aWZpZXIsIE5ldHdvcmtEYXRhVGFzayo+IG1fZGF0YVRhc2tNYXBX
aXRob3V0Q3JlZGVudGlhbHM7CiAgICAgSGFzaE1hcDxOZXR3b3JrRGF0YVRhc2s6OlRhc2tJZGVu
dGlmaWVyLCBEb3dubG9hZElEPiBtX2Rvd25sb2FkTWFwOwogCi0jaWYgUExBVEZPUk0oQ09DT0Ep
CiAgICAgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbj4gbV9zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9y
YWdlOwogICAgIFJldGFpblB0cjxXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGU+IG1fc2Vzc2lvbldp
dGhDcmVkZW50aWFsU3RvcmFnZURlbGVnYXRlOwogICAgIFJldGFpblB0cjxOU1VSTFNlc3Npb24+
IG1fc2Vzc2lvbldpdGhvdXRDcmVkZW50aWFsU3RvcmFnZTsKICAgICBSZXRhaW5QdHI8V0tOZXR3
b3JrU2Vzc2lvbkRlbGVnYXRlPiBtX3Nlc3Npb25XaXRob3V0Q3JlZGVudGlhbFN0b3JhZ2VEZWxl
Z2F0ZTsKKyNlbGlmIFVTRShTT1VQKQorICAgIEhhc2hTZXQ8TmV0d29ya0RhdGFUYXNrKj4gbV9k
YXRhVGFza1NldDsKICNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvLyBVU0UoTkVUV09SS19TRVNTSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvUGluZ0xvYWQuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL1Bp
bmdMb2FkLmgKaW5kZXggN2E3YTNhZC4uNWYzZGEzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvUGluZ0xvYWQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9QaW5nTG9hZC5oCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFBpbmdMb2FkX2gK
ICNkZWZpbmUgUGluZ0xvYWRfaAogCisjaW5jbHVkZSAiQXV0aGVudGljYXRpb25NYW5hZ2VyLmgi
CiAjaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNrLmgiCiAjaW5jbHVkZSAiU2Vzc2lvblRyYWNrZXIu
aCIKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0
d29ya0RhdGFUYXNrQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2Nv
YS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbQppbmRleCA5NDUwOTg2Li42MmNiMGQ3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tD
b2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3Jr
RGF0YVRhc2tDb2NvYS5tbQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgVVNFKE5FVFdPUktfU0VT
U0lPTikKIAorI2ltcG9ydCAiQXV0aGVudGljYXRpb25NYW5hZ2VyLmgiCiAjaW1wb3J0ICJEb3du
bG9hZC5oIgogI2ltcG9ydCAiRG93bmxvYWRQcm94eU1lc3NhZ2VzLmgiCiAjaW1wb3J0ICJMb2dn
aW5nLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9O
ZXR3b3JrU2Vzc2lvbkNvY29hLm1tIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29j
b2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbQppbmRleCBjZWRmYzM5Li4wMWYyYTM5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNv
Y29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtT
ZXNzaW9uQ29jb2EubW0KQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIFVTRShORVRXT1JLX1NFU1NJ
T04pCiAKKyNpbXBvcnQgIkF1dGhlbnRpY2F0aW9uTWFuYWdlci5oIgogI2ltcG9ydCAiQ3VzdG9t
UHJvdG9jb2xNYW5hZ2VyLmgiCiAjaW1wb3J0ICJEYXRhUmVmZXJlbmNlLmgiCiAjaW1wb3J0ICJE
b3dubG9hZC5oIgpAQCAtNDc1LDcgKzQ3Niw3IEBAIHZvaWQgTmV0d29ya1Nlc3Npb246OmludmFs
aWRhdGVBbmRDYW5jZWwoKQogfQogCiAKLVdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYg
TmV0d29ya1Nlc3Npb246Om5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpCitXZWJDb3JlOjpOZXR3b3Jr
U3RvcmFnZVNlc3Npb24mIE5ldHdvcmtTZXNzaW9uOjpuZXR3b3JrU3RvcmFnZVNlc3Npb24oKSBj
b25zdAogewogICAgIGF1dG8qIHN0b3JhZ2VTZXNzaW9uID0gV2ViQ29yZTo6TmV0d29ya1N0b3Jh
Z2VTZXNzaW9uOjpzdG9yYWdlU2Vzc2lvbihtX3Nlc3Npb25JRCk7CiAgICAgUkVMRUFTRV9BU1NF
UlQoc3RvcmFnZVNlc3Npb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uYzgxMTYxNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5jcHAKQEAgLTAsMCAr
MSwxMTU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJOZXR3b3JrRGF0YVRhc2suaCIKKwor
I2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uTWFuYWdlci5oIgorI2luY2x1ZGUgIkRhdGFSZWZlcmVu
Y2UuaCIKKyNpbmNsdWRlICJEb3dubG9hZC5oIgorI2luY2x1ZGUgIkRvd25sb2FkU291cEVycm9y
cy5oIgorI2luY2x1ZGUgIk5ldHdvcmtMb2FkLmgiCisjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3Mu
aCIKKyNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5oIgorI2luY2x1ZGUgIldlYkVycm9ycy5oIgor
I2luY2x1ZGUgPFdlYkNvcmUvQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0hUVFBQYXJzZXJzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNl
c3Npb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvU291cE5ldHdvcmtTZXNzaW9uLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4K
KwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdGF0
aWMgY29uc3Qgc2l6ZV90IGdEZWZhdWx0UmVhZEJ1ZmZlclNpemUgPSA4MTkyOworCitOZXR3b3Jr
RGF0YVRhc2s6Ok5ldHdvcmtEYXRhVGFzayhOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwgTmV0d29y
a0RhdGFUYXNrQ2xpZW50JiBjbGllbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdFdp
dGhDcmVkZW50aWFscywgU3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsIENvbnRl
bnRTbmlmZmluZ1BvbGljeSBzaG91bGRDb250ZW50U25pZmYsIGJvb2wgc2hvdWxkQ2xlYXJSZWZl
cnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCkKKyAgICA6IG1fZmFpbHVyZVRpbWVyKCp0aGlzLCAm
TmV0d29ya0RhdGFUYXNrOjpmYWlsdXJlVGltZXJGaXJlZCkKKyAgICAsIG1fc2Vzc2lvbigmc2Vz
c2lvbikKKyAgICAsIG1fY2xpZW50KCZjbGllbnQpCisgICAgLCBtX3N0b3JlZENyZWRlbnRpYWxz
KHN0b3JlZENyZWRlbnRpYWxzKQorICAgICwgbV9sYXN0SFRUUE1ldGhvZChyZXF1ZXN0V2l0aENy
ZWRlbnRpYWxzLmh0dHBNZXRob2QoKSkKKyAgICAsIG1fZmlyc3RSZXF1ZXN0KHJlcXVlc3RXaXRo
Q3JlZGVudGlhbHMpCisgICAgLCBtX3Nob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVk
aXJlY3Qoc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCkKKyAgICAsIG1f
c2hvdWxkQ29udGVudFNuaWZmKHNob3VsZENvbnRlbnRTbmlmZikKKyAgICAsIG1fdGltZW91dFNv
dXJjZShSdW5Mb29wOjptYWluKCksIHRoaXMsICZOZXR3b3JrRGF0YVRhc2s6OnRpbWVvdXRGaXJl
ZCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgbV9zZXNzaW9uLT5tX2Rh
dGFUYXNrU2V0LmFkZCh0aGlzKTsKKworICAgIGlmICghcmVxdWVzdFdpdGhDcmVkZW50aWFscy51
cmwoKS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgc2NoZWR1bGVGYWlsdXJlKEludmFsaWRVUkxGYWls
dXJlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghcG9ydEFsbG93ZWQocmVx
dWVzdFdpdGhDcmVkZW50aWFscy51cmwoKSkpIHsKKyAgICAgICAgc2NoZWR1bGVGYWlsdXJlKEJs
b2NrZWRGYWlsdXJlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gcmVxdWVz
dCA9IHJlcXVlc3RXaXRoQ3JlZGVudGlhbHM7CisgICAgaWYgKHJlcXVlc3QudXJsKCkucHJvdG9j
b2xJc0luSFRUUEZhbWlseSgpKSB7CisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCisgICAgICAgIG1f
c3RhcnRUaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lTVMoKTsKKyNlbmRpZgorICAg
ICAgICBhdXRvIHVybCA9IHJlcXVlc3QudXJsKCk7CisgICAgICAgIGlmIChtX3N0b3JlZENyZWRl
bnRpYWxzID09IEFsbG93U3RvcmVkQ3JlZGVudGlhbHMpIHsKKyAgICAgICAgICAgIG1fdXNlciA9
IHVybC51c2VyKCk7CisgICAgICAgICAgICBtX3Bhc3N3b3JkID0gdXJsLnBhc3MoKTsKKyAgICAg
ICAgICAgIHJlcXVlc3QucmVtb3ZlQ3JlZGVudGlhbHMoKTsKKworICAgICAgICAgICAgaWYgKG1f
dXNlci5pc0VtcHR5KCkgJiYgbV9wYXNzd29yZC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAg
bV9pbml0aWFsQ3JlZGVudGlhbCA9IG1fc2Vzc2lvbi0+bmV0d29ya1N0b3JhZ2VTZXNzaW9uKCku
Y3JlZGVudGlhbFN0b3JhZ2UoKS5nZXQocmVxdWVzdC51cmwoKSk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgbV9zZXNzaW9uLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKS5jcmVk
ZW50aWFsU3RvcmFnZSgpLnNldChDcmVkZW50aWFsKG1fdXNlciwgbV9wYXNzd29yZCwgQ3JlZGVu
dGlhbFBlcnNpc3RlbmNlTm9uZSksIHJlcXVlc3QudXJsKCkpOworICAgICAgICB9CisgICAgICAg
IGFwcGx5QXV0aGVudGljYXRpb25Ub1JlcXVlc3QocmVxdWVzdCk7CisgICAgfQorICAgIGNyZWF0
ZVJlcXVlc3QocmVxdWVzdCk7Cit9CisKK05ldHdvcmtEYXRhVGFzazo6fk5ldHdvcmtEYXRhVGFz
aygpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoIW1fY2xpZW50
KTsKKyAgICBjbGVhclJlcXVlc3QoKTsKKyAgICBtX3Nlc3Npb24tPm1fZGF0YVRhc2tTZXQucmVt
b3ZlKHRoaXMpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6c2NoZWR1bGVGYWlsdXJlKEZh
aWx1cmVUeXBlIHR5cGUpCit7CisgICAgQVNTRVJUKHR5cGUgIT0gTm9GYWlsdXJlKTsKKyAgICBt
X3NjaGVkdWxlZEZhaWx1cmVUeXBlID0gdHlwZTsKKyAgICBtX2ZhaWx1cmVUaW1lci5zdGFydE9u
ZVNob3QoMCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpmYWlsdXJlVGltZXJGaXJlZCgp
Cit7CisgICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKwor
ICAgIHN3aXRjaCAobV9zY2hlZHVsZWRGYWlsdXJlVHlwZSkgeworICAgIGNhc2UgQmxvY2tlZEZh
aWx1cmU6CisgICAgICAgIG1fc2NoZWR1bGVkRmFpbHVyZVR5cGUgPSBOb0ZhaWx1cmU7CisgICAg
ICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgICAgIG1fY2xpZW50LT53YXNCbG9ja2VkKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIEludmFsaWRVUkxGYWlsdXJlOgorICAgICAgICBtX3Nj
aGVkdWxlZEZhaWx1cmVUeXBlID0gTm9GYWlsdXJlOworICAgICAgICBpZiAobV9jbGllbnQpCisg
ICAgICAgICAgICBtX2NsaWVudC0+Y2Fubm90U2hvd1VSTCgpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBOb0ZhaWx1cmU6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK1N0cmluZyBO
ZXR3b3JrRGF0YVRhc2s6OnN1Z2dlc3RlZEZpbGVuYW1lKCkKK3sKKyAgICBpZiAoIW1fc3VnZ2Vz
dGVkRmlsZW5hbWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbV9zdWdnZXN0ZWRGaWxlbmFt
ZTsKKworICAgIFN0cmluZyBzdWdnZXN0ZWRGaWxlbmFtZSA9IG1fcmVzcG9uc2Uuc3VnZ2VzdGVk
RmlsZW5hbWUoKTsKKyAgICBpZiAoIXN1Z2dlc3RlZEZpbGVuYW1lLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIHN1Z2dlc3RlZEZpbGVuYW1lOworCisgICAgVVJMIHVybCA9IG1fcmVzcG9uc2Uu
dXJsKCk7CisgICAgdXJsLnNldFF1ZXJ5KFN0cmluZygpKTsKKyAgICB1cmwucmVtb3ZlRnJhZ21l
bnRJZGVudGlmaWVyKCk7CisgICAgcmV0dXJuIGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyh1cmwu
bGFzdFBhdGhDb21wb25lbnQoKSk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpzZXRTdWdn
ZXN0ZWRGaWxlbmFtZShjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZE5hbWUpCit7CisgICAgbV9zdWdn
ZXN0ZWRGaWxlbmFtZSA9IHN1Z2dlc3RlZE5hbWU7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNr
OjpzZXRQZW5kaW5nRG93bmxvYWRMb2NhdGlvbihjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25z
dCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmLCBib29sIGFsbG93T3ZlcndyaXRlKQoreworICAg
IG1fcGVuZGluZ0Rvd25sb2FkTG9jYXRpb24gPSBmaWxlbmFtZTsKKyAgICBtX2FsbG93T3Zlcndy
aXRlRG93bmxvYWQgPSBhbGxvd092ZXJ3cml0ZTsKK30KKworYm9vbCBOZXR3b3JrRGF0YVRhc2s6
OmFsbG93c1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UmKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBOZXR3b3JrRGF0
YVRhc2s6OmNyZWF0ZVJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQorewor
ICAgIEdVbmlxdWVQdHI8U291cFVSST4gc291cFVSSSA9IHJlcXVlc3QuY3JlYXRlU291cFVSSSgp
OworICAgIGlmICghc291cFVSSSkgeworICAgICAgICBzY2hlZHVsZUZhaWx1cmUoSW52YWxpZFVS
TEZhaWx1cmUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgR1JlZlB0cjxTb3VwUmVx
dWVzdD4gc291cFJlcXVlc3QgPSBhZG9wdEdSZWYoc291cF9zZXNzaW9uX3JlcXVlc3RfdXJpKG1f
c2Vzc2lvbi0+c291cFNlc3Npb24oKSwgc291cFVSSS5nZXQoKSwgbnVsbHB0cikpOworICAgIGlm
ICghc291cFJlcXVlc3QpIHsKKyAgICAgICAgc2NoZWR1bGVGYWlsdXJlKEludmFsaWRVUkxGYWls
dXJlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHJlcXVlc3QudXBkYXRlU291cFJl
cXVlc3Qoc291cFJlcXVlc3QuZ2V0KCkpOworCisgICAgaWYgKCFyZXF1ZXN0LnVybCgpLnByb3Rv
Y29sSXNJbkhUVFBGYW1pbHkoKSkgeworICAgICAgICBtX3NvdXBSZXF1ZXN0ID0gV1RGTW92ZShz
b3VwUmVxdWVzdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBIVFRQIHJlcXVl
c3QuCisgICAgR1JlZlB0cjxTb3VwTWVzc2FnZT4gc291cE1lc3NhZ2UgPSBhZG9wdEdSZWYoc291
cF9yZXF1ZXN0X2h0dHBfZ2V0X21lc3NhZ2UoU09VUF9SRVFVRVNUX0hUVFAoc291cFJlcXVlc3Qu
Z2V0KCkpKSk7CisgICAgaWYgKCFzb3VwTWVzc2FnZSkgeworICAgICAgICBzY2hlZHVsZUZhaWx1
cmUoSW52YWxpZFVSTEZhaWx1cmUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcmVx
dWVzdC51cGRhdGVTb3VwTWVzc2FnZShzb3VwTWVzc2FnZS5nZXQoKSk7CisgICAgaWYgKG1fc2hv
dWxkQ29udGVudFNuaWZmID09IERvTm90U25pZmZDb250ZW50KQorICAgICAgICBzb3VwX21lc3Nh
Z2VfZGlzYWJsZV9mZWF0dXJlKHNvdXBNZXNzYWdlLmdldCgpLCBTT1VQX1RZUEVfQ09OVEVOVF9T
TklGRkVSKTsKKyAgICBpZiAobV91c2VyLmlzRW1wdHkoKSAmJiBtX3Bhc3N3b3JkLmlzRW1wdHko
KSAmJiBtX3N0b3JlZENyZWRlbnRpYWxzID09IERvTm90QWxsb3dTdG9yZWRDcmVkZW50aWFscykg
eworICAgICAgICAvLyBJbiBjYXNlIGNyZWRlbnRpYWwgaXMgbm90IGF2YWlsYWJsZSBhbmQgY3Jl
ZGVudGlhbCBzdG9yYWdlIHNob3VsZCBub3QgdG8gYmUgdXNlZCwKKyAgICAgICAgLy8gZGlzYWJs
ZSBhdXRoZW50aWNhdGlvbiBtYW5hZ2VyIHNvIHRoYXQgY3JlZGVudGlhbHMgc3RvcmVkIGluIGxp
YnNvdXAgYXJlIG5vdCB1c2VkLgorICAgICAgICBzb3VwX21lc3NhZ2VfZGlzYWJsZV9mZWF0dXJl
KHNvdXBNZXNzYWdlLmdldCgpLCBTT1VQX1RZUEVfQVVUSF9NQU5BR0VSKTsKKyAgICB9CisKKyAg
ICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBhbiBBY2NlcHQgaGVhZGVyIGZvciBzdWJyZXNvdXJjZXM7
IHNvbWUgc2l0ZXMgd2FudCB0aGlzIHRvIHNlcnZlIHNvbWUgb2YgdGhlaXIgc3VicmVzb3VyY2Vz
LgorICAgIGlmICghc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X29uZShzb3VwTWVzc2FnZS0+cmVx
dWVzdF9oZWFkZXJzLCAiQWNjZXB0IikpCisgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2Fw
cGVuZChzb3VwTWVzc2FnZS0+cmVxdWVzdF9oZWFkZXJzLCAiQWNjZXB0IiwgIiovKiIpOworCisg
ICAgLy8gSW4gdGhlIGNhc2Ugb2YgWEhSIC5zZW5kKCkgYW5kIC5zZW5kKCIiKSBleHBsaWNpdGx5
IHRlbGwgbGlic291cCB0byBzZW5kIGEgemVybyBjb250ZW50LWxlbmdodCBoZWFkZXIKKyAgICAv
LyBmb3IgY29uc2lzdGVuY3kgd2l0aCBvdGhlciBVQSBpbXBsZW1lbnRhdGlvbnMgbGlrZSBGaXJl
Zm94LiBJdCdzIGRvbmUgaW4gdGhlIGJhY2tlbmQgaGVyZSBpbnN0ZWFkIG9mCisgICAgLy8gaW4g
WEhSIGNvZGUgc2luY2UgaW4gWEhSIENPUlMgY2hlY2tpbmcgcHJldmVudHMgdXMgZnJvbSB0aGlz
IGtpbmQgb2YgbGF0ZSBoZWFkZXIgbWFuaXB1bGF0aW9uLgorICAgIGlmICgoc291cE1lc3NhZ2Ut
Pm1ldGhvZCA9PSBTT1VQX01FVEhPRF9QT1NUIHx8IHNvdXBNZXNzYWdlLT5tZXRob2QgPT0gU09V
UF9NRVRIT0RfUFVUKSAmJiAhc291cE1lc3NhZ2UtPnJlcXVlc3RfYm9keS0+bGVuZ3RoKQorICAg
ICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19zZXRfY29udGVudF9sZW5ndGgoc291cE1lc3NhZ2Ut
PnJlcXVlc3RfaGVhZGVycywgMCk7CisKKyAgICB1bnNpZ25lZCBmbGFncyA9IFNPVVBfTUVTU0FH
RV9OT19SRURJUkVDVDsKKyAgICBzb3VwX21lc3NhZ2Vfc2V0X2ZsYWdzKHNvdXBNZXNzYWdlLmdl
dCgpLCBzdGF0aWNfY2FzdDxTb3VwTWVzc2FnZUZsYWdzPihzb3VwX21lc3NhZ2VfZ2V0X2ZsYWdz
KHNvdXBNZXNzYWdlLmdldCgpKSB8IGZsYWdzKSk7CisKKyNpZiBTT1VQX0NIRUNLX1ZFUlNJT04o
MiwgNDMsIDEpCisgICAgc291cF9tZXNzYWdlX3NldF9wcmlvcml0eShzb3VwTWVzc2FnZS5nZXQo
KSwgdG9Tb3VwTWVzc2FnZVByaW9yaXR5KHJlcXVlc3QucHJpb3JpdHkoKSkpOworI2VuZGlmCisK
KyAgICBtX3NvdXBSZXF1ZXN0ID0gV1RGTW92ZShzb3VwUmVxdWVzdCk7CisgICAgbV9zb3VwTWVz
c2FnZSA9IFdURk1vdmUoc291cE1lc3NhZ2UpOworCisgICAgZ19zaWduYWxfY29ubmVjdChtX3Nv
dXBNZXNzYWdlLmdldCgpLCAibm90aWZ5Ojp0bHMtZXJyb3JzIiwgR19DQUxMQkFDSyh0bHNFcnJv
cnNDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fc291cE1l
c3NhZ2UuZ2V0KCksICJnb3QtaGVhZGVycyIsIEdfQ0FMTEJBQ0soZ290SGVhZGVyc0NhbGxiYWNr
KSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdChtX3NvdXBNZXNzYWdlLmdldCgpLCAid3Jv
dGUtYm9keS1kYXRhIiwgR19DQUxMQkFDSyh3cm90ZUJvZHlEYXRhQ2FsbGJhY2spLCB0aGlzKTsK
KyAgICBnX3NpZ25hbF9jb25uZWN0KG1fc2Vzc2lvbi0+c291cFNlc3Npb24oKSwgImF1dGhlbnRp
Y2F0ZSIsICBHX0NBTExCQUNLKGF1dGhlbnRpY2F0ZUNhbGxiYWNrKSwgdGhpcyk7CisjaWYgRU5B
QkxFKFdFQl9USU1JTkcpCisgICAgZ19zaWduYWxfY29ubmVjdChtX3NvdXBNZXNzYWdlLmdldCgp
LCAibmV0d29yay1ldmVudCIsIEdfQ0FMTEJBQ0sobmV0d29ya0V2ZW50Q2FsbGJhY2spLCB0aGlz
KTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fc291cE1lc3NhZ2UuZ2V0KCksICJyZXN0YXJ0ZWQi
LCBHX0NBTExCQUNLKHJlc3RhcnRlZENhbGxiYWNrKSwgdGhpcyk7CisjaWYgU09VUF9DSEVDS19W
RVJTSU9OKDIsIDQ5LCA5MSkKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fc291cE1lc3NhZ2UuZ2V0
KCksICJzdGFydGluZyIsIEdfQ0FMTEJBQ0soc3RhcnRpbmdDYWxsYmFjayksIHRoaXMpOworI2Vs
c2UKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fc2Vzc2lvbi0+c291cFNlc3Npb24oKSwgInJlcXVl
c3Qtc3RhcnRlZCIsIEdfQ0FMTEJBQ0socmVxdWVzdFN0YXJ0ZWRDYWxsYmFjayksIHRoaXMpOwor
I2VuZGlmCisjZW5kaWYKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2s6OmNsZWFyUmVxdWVzdCgp
Cit7CisgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV9zdGF0ZSA9IFN0YXRlOjpDb21wbGV0ZWQ7CisKKyAgICBzdG9wVGltZW91dCgp
OworICAgIG1fcGVuZGluZ1Jlc3VsdCA9IG51bGxwdHI7CisgICAgbV9zb3VwUmVxdWVzdCA9IG51
bGxwdHI7CisgICAgbV9pbnB1dFN0cmVhbSA9IG51bGxwdHI7CisgICAgbV9tdWx0aXBhcnRJbnB1
dFN0cmVhbSA9IG51bGxwdHI7CisgICAgbV9kb3dubG9hZE91dHB1dFN0cmVhbSA9IG51bGxwdHI7
CisgICAgZ19jYW5jZWxsYWJsZV9jYW5jZWwobV9jYW5jZWxsYWJsZS5nZXQoKSk7CisgICAgbV9j
YW5jZWxsYWJsZSA9IG51bGxwdHI7CisgICAgaWYgKG1fc291cE1lc3NhZ2UpIHsKKyAgICAgICAg
Z19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fc291cE1lc3NhZ2UuZ2V0KCks
IEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIG51bGxwdHIsIG51bGxwdHIsIHRoaXMpOworICAg
ICAgICBzb3VwX3Nlc3Npb25fY2FuY2VsX21lc3NhZ2UobV9zZXNzaW9uLT5zb3VwU2Vzc2lvbigp
LCBtX3NvdXBNZXNzYWdlLmdldCgpLCBTT1VQX1NUQVRVU19DQU5DRUxMRUQpOworICAgICAgICBt
X3NvdXBNZXNzYWdlID0gbnVsbHB0cjsKKyAgICB9CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlz
Y29ubmVjdF9tYXRjaGVkKG1fc2Vzc2lvbi0+c291cFNlc3Npb24oKSwgR19TSUdOQUxfTUFUQ0hf
REFUQSwgMCwgMCwgbnVsbHB0ciwgbnVsbHB0ciwgdGhpcyk7Cit9CisKK3ZvaWQgTmV0d29ya0Rh
dGFUYXNrOjpyZXN1bWUoKQoreworICAgIEFTU0VSVChtX3N0YXRlICE9IFN0YXRlOjpSdW5uaW5n
KTsKKyAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IG1fc3RhdGUgPT0gU3Rh
dGU6OkNvbXBsZXRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zdGF0ZSA9IFN0YXRlOjpS
dW5uaW5nOworCisgICAgaWYgKG1fc2NoZWR1bGVkRmFpbHVyZVR5cGUgIT0gTm9GYWlsdXJlKSB7
CisgICAgICAgIEFTU0VSVChtX2ZhaWx1cmVUaW1lci5pc0FjdGl2ZSgpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIHN0YXJ0VGltZW91dCgpOworCisgICAgUmVmUHRyPE5ldHdvcmtE
YXRhVGFzaz4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBpZiAobV9zb3VwUmVxdWVzdCAmJiAh
bV9jYW5jZWxsYWJsZSkgeworICAgICAgICBtX2NhbmNlbGxhYmxlID0gYWRvcHRHUmVmKGdfY2Fu
Y2VsbGFibGVfbmV3KCkpOworICAgICAgICBzb3VwX3JlcXVlc3Rfc2VuZF9hc3luYyhtX3NvdXBS
ZXF1ZXN0LmdldCgpLCBtX2NhbmNlbGxhYmxlLmdldCgpLCByZWludGVycHJldF9jYXN0PEdBc3lu
Y1JlYWR5Q2FsbGJhY2s+KHNlbmRSZXF1ZXN0Q2FsbGJhY2spLCBwcm90ZWN0ZWRUaGlzLmxlYWtS
ZWYoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9wZW5kaW5nUmVzdWx0
KSB7CisgICAgICAgIEdSZWZQdHI8R0FzeW5jUmVzdWx0PiBwZW5kaW5nUmVzdWx0ID0gV1RGTW92
ZShtX3BlbmRpbmdSZXN1bHQpOworICAgICAgICBpZiAobV9pbnB1dFN0cmVhbSkKKyAgICAgICAg
ICAgIHJlYWRDYWxsYmFjayhtX2lucHV0U3RyZWFtLmdldCgpLCBwZW5kaW5nUmVzdWx0LmdldCgp
LCBwcm90ZWN0ZWRUaGlzLmxlYWtSZWYoKSk7CisgICAgICAgIGVsc2UgaWYgKG1fbXVsdGlwYXJ0
SW5wdXRTdHJlYW0pCisgICAgICAgICAgICByZXF1ZXN0TmV4dFBhcnRDYWxsYmFjayhtX211bHRp
cGFydElucHV0U3RyZWFtLmdldCgpLCBwZW5kaW5nUmVzdWx0LmdldCgpLCBwcm90ZWN0ZWRUaGlz
LmxlYWtSZWYoKSk7CisgICAgICAgIGVsc2UgaWYgKG1fc291cFJlcXVlc3QpCisgICAgICAgICAg
ICBzZW5kUmVxdWVzdENhbGxiYWNrKG1fc291cFJlcXVlc3QuZ2V0KCksIHBlbmRpbmdSZXN1bHQu
Z2V0KCksIHByb3RlY3RlZFRoaXMubGVha1JlZigpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIE5ldHdvcmtEYXRhVGFz
azo6c3VzcGVuZCgpCit7CisgICAgQVNTRVJUKG1fc3RhdGUgIT0gU3RhdGU6OlN1c3BlbmRlZCk7
CisgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCBtX3N0YXRlID09IFN0YXRl
OjpDb21wbGV0ZWQpCisgICAgICAgIHJldHVybjsKKyAgICBtX3N0YXRlID0gU3RhdGU6OlN1c3Bl
bmRlZDsKKworICAgIHN0b3BUaW1lb3V0KCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpj
YW5jZWwoKQoreworICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgbV9zdGF0
ZSA9PSBTdGF0ZTo6Q29tcGxldGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N0YXRlID0g
U3RhdGU6OkNhbmNlbGluZzsKKworICAgIGlmIChtX3NvdXBNZXNzYWdlKQorICAgICAgICBzb3Vw
X3Nlc3Npb25fY2FuY2VsX21lc3NhZ2UobV9zZXNzaW9uLT5zb3VwU2Vzc2lvbigpLCBtX3NvdXBN
ZXNzYWdlLmdldCgpLCBTT1VQX1NUQVRVU19DQU5DRUxMRUQpOworCisgICAgZ19jYW5jZWxsYWJs
ZV9jYW5jZWwobV9jYW5jZWxsYWJsZS5nZXQoKSk7CisKKyAgICBpZiAoaXNEb3dubG9hZCgpKQor
ICAgICAgICBjbGVhbkRvd25sb2FkRmlsZXMoKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2s6
OmludmFsaWRhdGVBbmRDYW5jZWwoKQoreworICAgIGNhbmNlbCgpOworICAgIGNsZWFyUmVxdWVz
dCgpOworfQorCitOZXR3b3JrRGF0YVRhc2s6OlN0YXRlIE5ldHdvcmtEYXRhVGFzazo6c3RhdGUo
KSBjb25zdAoreworICAgIHJldHVybiBtX3N0YXRlOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFz
azo6dGltZW91dEZpcmVkKCkKK3sKKyAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2FuY2VsaW5n
IHx8IG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZCB8fCAhbV9jbGllbnQpIHsKKyAgICAgICAg
Y2xlYXJSZXF1ZXN0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8TmV0
d29ya0RhdGFUYXNrPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIGludmFsaWRhdGVBbmRDYW5j
ZWwoKTsKKyAgICBtX2NsaWVudC0+ZGlkQ29tcGxldGVXaXRoRXJyb3IoUmVzb3VyY2VFcnJvcjo6
dGltZW91dEVycm9yKG1fZmlyc3RSZXF1ZXN0LnVybCgpKSk7Cit9CisKK3ZvaWQgTmV0d29ya0Rh
dGFUYXNrOjpzdGFydFRpbWVvdXQoKQoreworICAgIGlmIChtX2ZpcnN0UmVxdWVzdC50aW1lb3V0
SW50ZXJ2YWwoKSA+IDApCisgICAgICAgIG1fdGltZW91dFNvdXJjZS5zdGFydE9uZVNob3QobV9m
aXJzdFJlcXVlc3QudGltZW91dEludGVydmFsKCkpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFz
azo6c3RvcFRpbWVvdXQoKQoreworICAgIG1fdGltZW91dFNvdXJjZS5zdG9wKCk7Cit9CisKK3Zv
aWQgTmV0d29ya0RhdGFUYXNrOjpzZW5kUmVxdWVzdENhbGxiYWNrKFNvdXBSZXF1ZXN0KiBzb3Vw
UmVxdWVzdCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIE5ldHdvcmtEYXRhVGFzayogdGFzaykKK3sK
KyAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrPiBwcm90ZWN0ZWRUaGlzID0gYWRvcHRSZWYodGFz
ayk7CisgICAgaWYgKHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCB0YXNrLT5z
dGF0ZSgpID09IFN0YXRlOjpDb21wbGV0ZWQgfHwgIXRhc2stPm1fY2xpZW50KSB7CisgICAgICAg
IHRhc2stPmNsZWFyUmVxdWVzdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFTU0VS
VChzb3VwUmVxdWVzdCA9PSB0YXNrLT5tX3NvdXBSZXF1ZXN0LmdldCgpKTsKKworICAgIGlmICh0
YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpTdXNwZW5kZWQpIHsKKyAgICAgICAgQVNTRVJUKCF0YXNr
LT5tX3BlbmRpbmdSZXN1bHQpOworICAgICAgICB0YXNrLT5tX3BlbmRpbmdSZXN1bHQgPSByZXN1
bHQ7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4g
ZXJyb3I7CisgICAgR1JlZlB0cjxHSW5wdXRTdHJlYW0+IGlucHV0U3RyZWFtID0gYWRvcHRHUmVm
KHNvdXBfcmVxdWVzdF9zZW5kX2ZpbmlzaChzb3VwUmVxdWVzdCwgcmVzdWx0LCAmZXJyb3Iub3V0
UHRyKCkpKTsKKyAgICBpZiAoZXJyb3IpCisgICAgICAgIHRhc2stPmRpZEZhaWwoUmVzb3VyY2VF
cnJvcjo6aHR0cEVycm9yKHRhc2stPm1fc291cE1lc3NhZ2UuZ2V0KCksIGVycm9yLmdldCgpLCBz
b3VwUmVxdWVzdCkpOworICAgIGVsc2UKKyAgICAgICAgdGFzay0+ZGlkU2VuZFJlcXVlc3QoV1RG
TW92ZShpbnB1dFN0cmVhbSkpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6ZGlkU2VuZFJl
cXVlc3QoR1JlZlB0cjxHSW5wdXRTdHJlYW0+JiYgaW5wdXRTdHJlYW0pCit7CisgICAgaWYgKG1f
c291cE1lc3NhZ2UpIHsKKyAgICAgICAgaWYgKG1fc2hvdWxkQ29udGVudFNuaWZmID09IFNuaWZm
Q29udGVudCAmJiBtX3NvdXBNZXNzYWdlLT5zdGF0dXNfY29kZSAhPSBTT1VQX1NUQVRVU19OT1Rf
TU9ESUZJRUQpCisgICAgICAgICAgICBtX3Jlc3BvbnNlLnNldFNuaWZmZWRDb250ZW50VHlwZShz
b3VwX3JlcXVlc3RfZ2V0X2NvbnRlbnRfdHlwZShtX3NvdXBSZXF1ZXN0LmdldCgpKSk7CisgICAg
ICAgIG1fcmVzcG9uc2UudXBkYXRlRnJvbVNvdXBNZXNzYWdlKG1fc291cE1lc3NhZ2UuZ2V0KCkp
OworCisgICAgICAgIGlmIChzaG91bGRTdGFydEhUVFBSZWRpcmVjdGlvbigpKSB7CisgICAgICAg
ICAgICBtX2lucHV0U3RyZWFtID0gV1RGTW92ZShpbnB1dFN0cmVhbSk7CisgICAgICAgICAgICBz
a2lwSW5wdXRTdHJlYW1Gb3JSZWRpcmVjdGlvbigpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKG1fcmVzcG9uc2UuaXNNdWx0aXBhcnQoKSkKKyAgICAgICAg
ICAgIG1fbXVsdGlwYXJ0SW5wdXRTdHJlYW0gPSBhZG9wdEdSZWYoc291cF9tdWx0aXBhcnRfaW5w
dXRfc3RyZWFtX25ldyhtX3NvdXBNZXNzYWdlLmdldCgpLCBpbnB1dFN0cmVhbS5nZXQoKSkpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2lucHV0U3RyZWFtID0gV1RGTW92ZShpbnB1dFN0
cmVhbSk7CisKKyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICAgICAgbV9yZXNwb25zZS5uZXR3
b3JrTG9hZFRpbWluZygpLnJlc3BvbnNlU3RhcnQgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1Rp
bWVNUygpIC0gbV9zdGFydFRpbWU7CisjZW5kaWYKKyAgICB9IGVsc2UgeworICAgICAgICBtX3Jl
c3BvbnNlLnNldFVSTChtX2ZpcnN0UmVxdWVzdC51cmwoKSk7CisgICAgICAgIGNvbnN0IGdjaGFy
KiBjb250ZW50VHlwZSA9IHNvdXBfcmVxdWVzdF9nZXRfY29udGVudF90eXBlKG1fc291cFJlcXVl
c3QuZ2V0KCkpOworICAgICAgICBtX3Jlc3BvbnNlLnNldE1pbWVUeXBlKGV4dHJhY3RNSU1FVHlw
ZUZyb21NZWRpYVR5cGUoY29udGVudFR5cGUpKTsKKyAgICAgICAgbV9yZXNwb25zZS5zZXRUZXh0
RW5jb2RpbmdOYW1lKGV4dHJhY3RDaGFyc2V0RnJvbU1lZGlhVHlwZShjb250ZW50VHlwZSkpOwor
ICAgICAgICBtX3Jlc3BvbnNlLnNldEV4cGVjdGVkQ29udGVudExlbmd0aChzb3VwX3JlcXVlc3Rf
Z2V0X2NvbnRlbnRfbGVuZ3RoKG1fc291cFJlcXVlc3QuZ2V0KCkpKTsKKworICAgICAgICBtX2lu
cHV0U3RyZWFtID0gV1RGTW92ZShpbnB1dFN0cmVhbSk7CisgICAgfQorCisgICAgZGlkUmVjZWl2
ZVJlc3BvbnNlKCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRSZWNlaXZlUmVzcG9u
c2UoKQoreworICAgIEFTU0VSVCghbV9yZXNwb25zZS5pc051bGwoKSk7CisKKyAgICBhdXRvIHJl
c3BvbnNlID0gUmVzb3VyY2VSZXNwb25zZShtX3Jlc3BvbnNlKTsKKyAgICBtX2NsaWVudC0+ZGlk
UmVjZWl2ZVJlc3BvbnNlTmV0d29ya1Nlc3Npb24oV1RGTW92ZShyZXNwb25zZSksIFt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldKFBvbGljeUFjdGlvbiBwb2xpY3lBY3Rpb24p
IHsKKyAgICAgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCBtX3N0YXRlID09
IFN0YXRlOjpDb21wbGV0ZWQpIHsKKyAgICAgICAgICAgIGNsZWFyUmVxdWVzdCgpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChwb2xpY3lBY3Rpb24p
IHsKKyAgICAgICAgY2FzZSBQb2xpY3lBY3Rpb246OlBvbGljeVVzZToKKyAgICAgICAgICAgIGlm
IChtX2lucHV0U3RyZWFtKQorICAgICAgICAgICAgICAgIHJlYWQoKTsKKyAgICAgICAgICAgIGVs
c2UgaWYgKG1fbXVsdGlwYXJ0SW5wdXRTdHJlYW0pCisgICAgICAgICAgICAgICAgcmVxdWVzdE5l
eHRQYXJ0KCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBvbGljeUFjdGlv
bjo6UG9saWN5SWdub3JlOgorICAgICAgICAgICAgY2xlYXJSZXF1ZXN0KCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBQb2xpY3lBY3Rpb246OlBvbGljeURvd25sb2FkOgorICAg
ICAgICAgICAgZG93bmxvYWQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
fSk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjp0bHNFcnJvcnNDaGFuZ2VkQ2FsbGJhY2so
U291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlLCBHUGFyYW1TcGVjKiwgTmV0d29ya0RhdGFUYXNrKiB0
YXNrKQoreworICAgIGlmICh0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgdGFz
ay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICF0YXNrLT5tX2NsaWVudCkgeworICAg
ICAgICB0YXNrLT5jbGVhclJlcXVlc3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IEFTU0VSVChzb3VwTWVzc2FnZSA9PSB0YXNrLT5tX3NvdXBNZXNzYWdlLmdldCgpKTsKKyAgICB0
YXNrLT50bHNFcnJvcnNDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjp0bHNF
cnJvcnNDaGFuZ2VkKCkKK3sKKyAgICBBU1NFUlQobV9zb3VwUmVxdWVzdCk7CisgICAgU291cE5l
dHdvcmtTZXNzaW9uOjpjaGVja1RMU0Vycm9ycyhtX3NvdXBSZXF1ZXN0LmdldCgpLCBtX3NvdXBN
ZXNzYWdlLmdldCgpLCBbdGhpc10gKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKSB7CisgICAg
ICAgIGlmIChlcnJvci5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBS
ZWZQdHI8TmV0d29ya0RhdGFUYXNrPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgICAgICBpbnZh
bGlkYXRlQW5kQ2FuY2VsKCk7CisgICAgICAgIG1fY2xpZW50LT5kaWRDb21wbGV0ZVdpdGhFcnJv
cihlcnJvcik7CisgICAgfSk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjphcHBseUF1dGhl
bnRpY2F0aW9uVG9SZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICAvLyBX
ZSBhbHdheXMgcHV0IHRoZSBjcmVkZW50aWFscyBpbnRvIHRoZSBVUkwuIEluIHRoZSBDb2NhIHBv
cnQgSFRUUCBmYW1pbHkgY3JlZGVudGlhbHMgYXJlIGFwcGxpZWQgaW4KKyAgICAvLyB0aGUgZGlk
UmVjZWl2ZUNoYWxsZW5nZSBjYWxsYmFjaywgYnV0IGxpYnNvdXAgcmVxdWlyZXMgdXMgdG8gdXNl
IHRoaXMgbWV0aG9kIHRvIG92ZXJyaWRlCisgICAgLy8gYW55IHByZXZpb3VzbHkgcmVtZW1iZXJl
ZCBjcmVkZW50aWFscy4gSXQgaGFzIGl0cyBvd24gcGVyLXNlc3Npb24gY3JlZGVudGlhbCBzdG9y
YWdlLgorICAgIGF1dG8gdXJsID0gcmVxdWVzdC51cmwoKTsKKyAgICBpZiAoIW1faW5pdGlhbENy
ZWRlbnRpYWwuaXNFbXB0eSgpKSB7CisgICAgICAgIHVybC5zZXRVc2VyKG1faW5pdGlhbENyZWRl
bnRpYWwudXNlcigpKTsKKyAgICAgICAgdXJsLnNldFBhc3MobV9pbml0aWFsQ3JlZGVudGlhbC5w
YXNzd29yZCgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICB1cmwuc2V0VXNlcihtX3VzZXIpOwor
ICAgICAgICB1cmwuc2V0UGFzcyhtX3Bhc3N3b3JkKTsKKyAgICB9CisKKyAgICBtX3VzZXIgPSBT
dHJpbmcoKTsKKyAgICBtX3Bhc3N3b3JkID0gU3RyaW5nKCk7CisKKyAgICByZXF1ZXN0LnNldFVS
TCh1cmwpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6YXV0aGVudGljYXRlQ2FsbGJhY2so
U291cFNlc3Npb24qIHNlc3Npb24sIFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSwgU291cEF1dGgq
IHNvdXBBdXRoLCBnYm9vbGVhbiByZXRyeWluZywgTmV0d29ya0RhdGFUYXNrKiB0YXNrKQorewor
ICAgIEFTU0VSVChzZXNzaW9uID09IHRhc2stPm1fc2Vzc2lvbi0+c291cFNlc3Npb24oKSk7Cisg
ICAgaWYgKHNvdXBNZXNzYWdlICE9IHRhc2stPm1fc291cE1lc3NhZ2UuZ2V0KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmICh0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDYW5jZWxpbmcgfHwg
dGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICF0YXNrLT5tX2NsaWVudCkgewor
ICAgICAgICB0YXNrLT5jbGVhclJlcXVlc3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIHRhc2stPmF1dGhlbnRpY2F0ZShBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShzb3VwTWVzc2Fn
ZSwgc291cEF1dGgsIHJldHJ5aW5nKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0F1dGhl
bnRpY2F0aW9uRmFpbHVyZVN0YXR1c0NvZGUoaW50IGh0dHBTdGF0dXNDb2RlKQoreworICAgIHJl
dHVybiBodHRwU3RhdHVzQ29kZSA9PSBTT1VQX1NUQVRVU19QUk9YWV9BVVRIRU5USUNBVElPTl9S
RVFVSVJFRCB8fCBodHRwU3RhdHVzQ29kZSA9PSBTT1VQX1NUQVRVU19VTkFVVEhPUklaRUQ7Cit9
CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjphdXRoZW50aWNhdGUoQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UmJiBjaGFsbGVuZ2UpCit7CisgICAgQVNTRVJUKG1fc291cE1lc3NhZ2UpOworICAgIGlm
IChtX3N0b3JlZENyZWRlbnRpYWxzID09IEFsbG93U3RvcmVkQ3JlZGVudGlhbHMpIHsKKyAgICAg
ICAgaWYgKCFtX2luaXRpYWxDcmVkZW50aWFsLmlzRW1wdHkoKSB8fCBjaGFsbGVuZ2UucHJldmlv
dXNGYWlsdXJlQ291bnQoKSkgeworICAgICAgICAgICAgLy8gVGhlIHN0b3JlZCBjcmVkZW50aWFs
IHdhc24ndCBhY2NlcHRlZCwgc3RvcCB1c2luZyBpdC4gVGhlcmUgaXMgYSByYWNlIGNvbmRpdGlv
bgorICAgICAgICAgICAgLy8gaGVyZSwgc2luY2UgYSBkaWZmZXJlbnQgY3JlZGVudGlhbCBtaWdo
dCBoYXZlIGFscmVhZHkgYmVlbiBzdG9yZWQgYnkgYW5vdGhlcgorICAgICAgICAgICAgLy8gTmV0
d29ya0RhdGFUYXNrLCBidXQgdGhlIG9ic2VydmFibGUgZWZmZWN0IHNob3VsZCBiZSB2ZXJ5IG1p
bm9yLCBpZiBhbnkuCisgICAgICAgICAgICBtX3Nlc3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lv
bigpLmNyZWRlbnRpYWxTdG9yYWdlKCkucmVtb3ZlKGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2Uo
KSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWNoYWxsZW5nZS5wcmV2aW91c0ZhaWx1cmVD
b3VudCgpKSB7CisgICAgICAgICAgICBhdXRvIGNyZWRlbnRpYWwgPSBtX3Nlc3Npb24tPm5ldHdv
cmtTdG9yYWdlU2Vzc2lvbigpLmNyZWRlbnRpYWxTdG9yYWdlKCkuZ2V0KGNoYWxsZW5nZS5wcm90
ZWN0aW9uU3BhY2UoKSk7CisgICAgICAgICAgICBpZiAoIWNyZWRlbnRpYWwuaXNFbXB0eSgpICYm
IGNyZWRlbnRpYWwgIT0gbV9pbml0aWFsQ3JlZGVudGlhbCkgeworICAgICAgICAgICAgICAgIEFT
U0VSVChjcmVkZW50aWFsLnBlcnNpc3RlbmNlKCkgPT0gQ3JlZGVudGlhbFBlcnNpc3RlbmNlTm9u
ZSk7CisKKyAgICAgICAgICAgICAgICBpZiAoaXNBdXRoZW50aWNhdGlvbkZhaWx1cmVTdGF0dXND
b2RlKGNoYWxsZW5nZS5mYWlsdXJlUmVzcG9uc2UoKS5odHRwU3RhdHVzQ29kZSgpKSkgeworICAg
ICAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgY3JlZGVudGlhbCBiYWNrLCBwb3NzaWJseSBh
ZGRpbmcgaXQgYXMgYSBkZWZhdWx0IGZvciB0aGlzIGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAg
ICAgICAgbV9zZXNzaW9uLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKS5jcmVkZW50aWFsU3RvcmFn
ZSgpLnNldChjcmVkZW50aWFsLCBjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCksIGNoYWxsZW5n
ZS5mYWlsdXJlUmVzcG9uc2UoKS51cmwoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIHNvdXBfYXV0aF9hdXRoZW50aWNhdGUoY2hhbGxlbmdlLnNvdXBBdXRoKCksIGNyZWRl
bnRpYWwudXNlcigpLnV0ZjgoKS5kYXRhKCksIGNyZWRlbnRpYWwucGFzc3dvcmQoKS51dGY4KCku
ZGF0YSgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBzb3VwX3Nlc3Npb25fcGF1c2VfbWVzc2FnZShtX3Nlc3Npb24tPnNv
dXBTZXNzaW9uKCksIG1fc291cE1lc3NhZ2UuZ2V0KCkpOworCisgICAgLy8gV2UgY291bGQgYWxz
byBkbyB0aGlzIGJlZm9yZSB3ZSBldmVuIHN0YXJ0IHRoZSByZXF1ZXN0LCBidXQgdGhhdCB3b3Vs
ZCBiZSBhdCB0aGUgZXhwZW5zZQorICAgIC8vIG9mIGFsbCByZXF1ZXN0IGxhdGVuY3ksIHZlcnN1
cyBhIG9uZS10aW1lIGxhdGVuY3kgZm9yIHRoZSBzbWFsbCBzdWJzZXQgb2YgcmVxdWVzdHMgdGhh
dAorICAgIC8vIHVzZSBIVFRQIGF1dGhlbnRpY2F0aW9uLiBJbiB0aGUgZW5kLCB0aGlzIGRvZXNu
J3QgbWF0dGVyIG11Y2gsIGJlY2F1c2UgcGVyc2lzdGVudCBjcmVkZW50aWFscworICAgIC8vIHdp
bGwgYmVjb21lIHNlc3Npb24gY3JlZGVudGlhbHMgYWZ0ZXIgdGhlIGZpcnN0IHVzZS4KKyAgICBp
ZiAobV9zdG9yZWRDcmVkZW50aWFscyA9PSBBbGxvd1N0b3JlZENyZWRlbnRpYWxzKSB7CisgICAg
ICAgIGF1dG8gcHJvdGVjdGlvblNwYWNlID0gY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZSgpOwor
ICAgICAgICBtX3Nlc3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpLmdldENyZWRlbnRpYWxG
cm9tUGVyc2lzdGVudFN0b3JhZ2UocHJvdGVjdGlvblNwYWNlLAorICAgICAgICAgICAgW3RoaXMs
IHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgYXV0aENoYWxsZW5nZSA9IFdURk1vdmUo
Y2hhbGxlbmdlKV0gKENyZWRlbnRpYWwmJiBjcmVkZW50aWFsKSBtdXRhYmxlIHsKKyAgICAgICAg
ICAgICAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IG1fc3RhdGUgPT0gU3Rh
dGU6OkNvbXBsZXRlZCB8fCAhbV9jbGllbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgY2xlYXJS
ZXF1ZXN0KCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBhdXRoQ2hhbGxlbmdlLnNldFByb3Bvc2VkQ3JlZGVudGlhbChX
VEZNb3ZlKGNyZWRlbnRpYWwpKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZUF1dGhlbnRpY2F0
ZShXVEZNb3ZlKGF1dGhDaGFsbGVuZ2UpKTsKKyAgICAgICAgfSk7CisgICAgfSBlbHNlCisgICAg
ICAgIGNvbnRpbnVlQXV0aGVudGljYXRlKFdURk1vdmUoY2hhbGxlbmdlKSk7Cit9CisKK3ZvaWQg
TmV0d29ya0RhdGFUYXNrOjpjb250aW51ZUF1dGhlbnRpY2F0ZShBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSYmIGNoYWxsZW5nZSkKK3sKKyAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZUNoYWxsZW5nZShj
aGFsbGVuZ2UsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNoYWxsZW5n
ZV0oQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbiBkaXNwb3NpdGlvbiwgY29uc3Qg
Q3JlZGVudGlhbCYgY3JlZGVudGlhbCkgeworICAgICAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6
Q2FuY2VsaW5nIHx8IG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZCkgeworICAgICAgICAgICAg
Y2xlYXJSZXF1ZXN0KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoZGlzcG9zaXRpb24gPT0gQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbjo6
Q2FuY2VsKSB7CisgICAgICAgICAgICBjYW5jZWwoKTsKKyAgICAgICAgICAgIGRpZEZhaWwoY2Fu
Y2VsbGVkRXJyb3IobV9zb3VwUmVxdWVzdC5nZXQoKSkpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKGRpc3Bvc2l0aW9uID09IEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlRGlzcG9zaXRpb246OlVzZUNyZWRlbnRpYWwgJiYgIWNyZWRlbnRpYWwuaXNFbXB0eSgp
KSB7CisgICAgICAgICAgICBpZiAobV9zdG9yZWRDcmVkZW50aWFscyA9PSBBbGxvd1N0b3JlZENy
ZWRlbnRpYWxzKSB7CisgICAgICAgICAgICAgICAgLy8gRXZlbnR1YWxseSB3ZSB3aWxsIG1hbmFn
ZSBwZXItc2Vzc2lvbiBjcmVkZW50aWFscyBvbmx5IGludGVybmFsbHkgb3IgdXNlIHNvbWUgbmV3
bHktZXhwb3NlZCBBUEkgZnJvbSBsaWJzb3VwLAorICAgICAgICAgICAgICAgIC8vIGJlY2F1c2Ug
b25jZSB3ZSBhdXRoZW50aWNhdGUgdmlhIGxpYnNvdXAsIHRoZXJlIGlzIG5vIHdheSB0byBpZ25v
cmUgaXQgZm9yIGEgcGFydGljdWxhciByZXF1ZXN0LiBSaWdodCBub3csCisgICAgICAgICAgICAg
ICAgLy8gd2UgcGxhY2UgdGhlIGNyZWRlbnRpYWxzIGluIHRoZSBzdG9yZSBldmVuIHRob3VnaCBs
aWJzb3VwIHdpbGwgbmV2ZXIgZmlyZSB0aGUgYXV0aGVudGljYXRlIHNpZ25hbCBhZ2FpbiBmb3IK
KyAgICAgICAgICAgICAgICAvLyB0aGlzIHByb3RlY3Rpb24gc3BhY2UuCisgICAgICAgICAgICAg
ICAgaWYgKGNyZWRlbnRpYWwucGVyc2lzdGVuY2UoKSA9PSBDcmVkZW50aWFsUGVyc2lzdGVuY2VG
b3JTZXNzaW9uIHx8IGNyZWRlbnRpYWwucGVyc2lzdGVuY2UoKSA9PSBDcmVkZW50aWFsUGVyc2lz
dGVuY2VQZXJtYW5lbnQpCisgICAgICAgICAgICAgICAgICAgIG1fc2Vzc2lvbi0+bmV0d29ya1N0
b3JhZ2VTZXNzaW9uKCkuY3JlZGVudGlhbFN0b3JhZ2UoKS5zZXQoY3JlZGVudGlhbCwgY2hhbGxl
bmdlLnByb3RlY3Rpb25TcGFjZSgpLCBjaGFsbGVuZ2UuZmFpbHVyZVJlc3BvbnNlKCkudXJsKCkp
OworCisgICAgICAgICAgICAgICAgaWYgKGNyZWRlbnRpYWwucGVyc2lzdGVuY2UoKSA9PSBDcmVk
ZW50aWFsUGVyc2lzdGVuY2VQZXJtYW5lbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9wcm90
ZWN0aW9uU3BhY2VGb3JQZXJzaXN0ZW50U3RvcmFnZSA9IGNoYWxsZW5nZS5wcm90ZWN0aW9uU3Bh
Y2UoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9jcmVkZW50aWFsRm9yUGVyc2lzdGVudFN0b3Jh
Z2UgPSBjcmVkZW50aWFsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc291cF9hdXRoX2F1dGhlbnRpY2F0ZShjaGFsbGVuZ2Uuc291cEF1dGgoKSwgY3Jl
ZGVudGlhbC51c2VyKCkudXRmOCgpLmRhdGEoKSwgY3JlZGVudGlhbC5wYXNzd29yZCgpLnV0Zjgo
KS5kYXRhKCkpOworICAgICAgICB9CisKKyAgICAgICAgc291cF9zZXNzaW9uX3VucGF1c2VfbWVz
c2FnZShtX3Nlc3Npb24tPnNvdXBTZXNzaW9uKCksIG1fc291cE1lc3NhZ2UuZ2V0KCkpOworICAg
IH0pOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6c2tpcElucHV0U3RyZWFtRm9yUmVkaXJl
Y3Rpb25DYWxsYmFjayhHSW5wdXRTdHJlYW0qIGlucHV0U3RyZWFtLCBHQXN5bmNSZXN1bHQqIHJl
c3VsdCwgTmV0d29ya0RhdGFUYXNrKiB0YXNrKQoreworICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRh
c2s+IHByb3RlY3RlZFRoaXMgPSBhZG9wdFJlZih0YXNrKTsKKyAgICBpZiAodGFzay0+c3RhdGUo
KSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNvbXBsZXRl
ZCB8fCAhdGFzay0+bV9jbGllbnQpIHsKKyAgICAgICAgdGFzay0+Y2xlYXJSZXF1ZXN0KCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQVNTRVJUKGlucHV0U3RyZWFtID09IHRhc2stPm1f
aW5wdXRTdHJlYW0uZ2V0KCkpOworCisgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOwor
ICAgIGdzc2l6ZSBieXRlc1NraXBwZWQgPSBnX2lucHV0X3N0cmVhbV9za2lwX2ZpbmlzaChpbnB1
dFN0cmVhbSwgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGlmIChlcnJvcikKKyAgICAg
ICAgdGFzay0+ZGlkRmFpbChSZXNvdXJjZUVycm9yOjpnZW5lcmljR0Vycm9yKGVycm9yLmdldCgp
LCB0YXNrLT5tX3NvdXBSZXF1ZXN0LmdldCgpKSk7CisgICAgZWxzZSBpZiAoYnl0ZXNTa2lwcGVk
ID4gMCkKKyAgICAgICAgdGFzay0+c2tpcElucHV0U3RyZWFtRm9yUmVkaXJlY3Rpb24oKTsKKyAg
ICBlbHNlCisgICAgICAgIHRhc2stPmRpZEZpbmlzaFNraXBJbnB1dFN0cmVhbUZvclJlZGlyZWN0
aW9uKCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpza2lwSW5wdXRTdHJlYW1Gb3JSZWRp
cmVjdGlvbigpCit7CisgICAgQVNTRVJUKG1faW5wdXRTdHJlYW0pOworICAgIFJlZlB0cjxOZXR3
b3JrRGF0YVRhc2s+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgZ19pbnB1dF9zdHJlYW1fc2tp
cF9hc3luYyhtX2lucHV0U3RyZWFtLmdldCgpLCBnRGVmYXVsdFJlYWRCdWZmZXJTaXplLCBHX1BS
SU9SSVRZX0RFRkFVTFQsIG1fY2FuY2VsbGFibGUuZ2V0KCksCisgICAgICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4oc2tpcElucHV0U3RyZWFtRm9yUmVkaXJlY3Rpb25D
YWxsYmFjayksIHByb3RlY3RlZFRoaXMubGVha1JlZigpKTsKK30KKwordm9pZCBOZXR3b3JrRGF0
YVRhc2s6OmRpZEZpbmlzaFNraXBJbnB1dFN0cmVhbUZvclJlZGlyZWN0aW9uKCkKK3sKKyAgICBn
X2lucHV0X3N0cmVhbV9jbG9zZShtX2lucHV0U3RyZWFtLmdldCgpLCBudWxscHRyLCBudWxscHRy
KTsKKyAgICBjb250aW51ZUhUVFBSZWRpcmVjdGlvbigpOworfQorCitzdGF0aWMgYm9vbCBzaG91
bGRSZWRpcmVjdEFzR0VUKFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBib29sIGNyb3NzT3JpZ2luKQor
eworICAgIGlmIChtZXNzYWdlLT5tZXRob2QgPT0gU09VUF9NRVRIT0RfR0VUIHx8IG1lc3NhZ2Ut
Pm1ldGhvZCA9PSBTT1VQX01FVEhPRF9IRUFEKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBzd2l0Y2ggKG1lc3NhZ2UtPnN0YXR1c19jb2RlKSB7CisgICAgY2FzZSBTT1VQX1NUQVRVU19T
RUVfT1RIRVI6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgU09VUF9TVEFUVVNfRk9V
TkQ6CisgICAgY2FzZSBTT1VQX1NUQVRVU19NT1ZFRF9QRVJNQU5FTlRMWToKKyAgICAgICAgaWYg
KG1lc3NhZ2UtPm1ldGhvZCA9PSBTT1VQX01FVEhPRF9QT1NUKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChjcm9zc09yaWdpbiAmJiBt
ZXNzYWdlLT5tZXRob2QgPT0gU09VUF9NRVRIT0RfREVMRVRFKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBOZXR3b3JrRGF0YVRhc2s6OnNob3Vs
ZFN0YXJ0SFRUUFJlZGlyZWN0aW9uKCkKK3sKKyAgICBBU1NFUlQobV9zb3VwTWVzc2FnZSk7Cisg
ICAgQVNTRVJUKCFtX3Jlc3BvbnNlLmlzTnVsbCgpKTsKKworICAgIGF1dG8gc3RhdHVzID0gbV9y
ZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpOworICAgIGlmICghU09VUF9TVEFUVVNfSVNfUkVESVJF
Q1RJT04oc3RhdHVzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gU29tZSAzeHgg
c3RhdHVzIGNvZGVzIGFyZW4ndCBhY3R1YWxseSByZWRpcmVjdHMuCisgICAgaWYgKHN0YXR1cyA9
PSAzMDAgfHwgc3RhdHVzID09IDMwNCB8fCBzdGF0dXMgPT0gMzA1IHx8IHN0YXR1cyA9PSAzMDYp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX3Jlc3BvbnNlLmh0dHBIZWFkZXJG
aWVsZChIVFRQSGVhZGVyTmFtZTo6TG9jYXRpb24pLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpj
b250aW51ZUhUVFBSZWRpcmVjdGlvbigpCit7CisgICAgQVNTRVJUKG1fc291cE1lc3NhZ2UpOwor
ICAgIEFTU0VSVCghbV9yZXNwb25zZS5pc051bGwoKSk7CisKKyAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgbWF4UmVkaXJlY3RzID0gMjA7CisgICAgaWYgKG1fcmVkaXJlY3RDb3VudCsrID4gbWF4
UmVkaXJlY3RzKSB7CisgICAgICAgIGRpZEZhaWwoUmVzb3VyY2VFcnJvcjo6dHJhbnNwb3J0RXJy
b3IobV9zb3VwUmVxdWVzdC5nZXQoKSwgU09VUF9TVEFUVVNfVE9PX01BTllfUkVESVJFQ1RTLCAi
VG9vIG1hbnkgcmVkaXJlY3RzIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVz
b3VyY2VSZXF1ZXN0IHJlcXVlc3QgPSBtX2ZpcnN0UmVxdWVzdDsKKyAgICByZXF1ZXN0LnNldFVS
TChVUkwobV9yZXNwb25zZS51cmwoKSwgbV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGQoSFRUUEhl
YWRlck5hbWU6OkxvY2F0aW9uKSkpOworICAgIHJlcXVlc3Quc2V0Rmlyc3RQYXJ0eUZvckNvb2tp
ZXMocmVxdWVzdC51cmwoKSk7CisKKyAgICAvLyBTaG91bGQgbm90IHNldCBSZWZlcmVyIGFmdGVy
IGEgcmVkaXJlY3QgZnJvbSBhIHNlY3VyZSByZXNvdXJjZSB0byBub24tc2VjdXJlIG9uZS4KKyAg
ICBpZiAobV9zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0ICYmICFyZXF1
ZXN0LnVybCgpLnByb3RvY29sSXMoImh0dHBzIikgJiYgcHJvdG9jb2xJcyhyZXF1ZXN0Lmh0dHBS
ZWZlcnJlcigpLCAiaHR0cHMiKSkKKyAgICAgICAgcmVxdWVzdC5jbGVhckhUVFBSZWZlcnJlcigp
OworCisgICAgYm9vbCBpc0Nyb3NzT3JpZ2luID0gIXByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVh
bChtX2ZpcnN0UmVxdWVzdC51cmwoKSwgcmVxdWVzdC51cmwoKSk7CisgICAgaWYgKCFlcXVhbExl
dHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShyZXF1ZXN0Lmh0dHBNZXRob2QoKSwgIkdFVCIpKSB7Cisg
ICAgICAgIC8vIENoYW5nZSBuZXdSZXF1ZXN0IG1ldGhvZCB0byBHRVQgaWYgY2hhbmdlIHdhcyBt
YWRlIGR1cmluZyBhIHByZXZpb3VzIHJlZGlyZWN0aW9uIG9yIGlmIGN1cnJlbnQgcmVkaXJlY3Rp
b24gc2F5cyBzby4KKyAgICAgICAgaWYgKG1fc291cE1lc3NhZ2UtPm1ldGhvZCA9PSBTT1VQX01F
VEhPRF9HRVQgfHwgIXJlcXVlc3QudXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpIHx8IHNo
b3VsZFJlZGlyZWN0QXNHRVQobV9zb3VwTWVzc2FnZS5nZXQoKSwgaXNDcm9zc09yaWdpbikpIHsK
KyAgICAgICAgICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhvZCgiR0VUIik7CisgICAgICAgICAgICBy
ZXF1ZXN0LnNldEhUVFBCb2R5KG51bGxwdHIpOworICAgICAgICAgICAgcmVxdWVzdC5jbGVhckhU
VFBDb250ZW50VHlwZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgY29uc3QgYXV0byYgdXJs
ID0gcmVxdWVzdC51cmwoKTsKKyAgICBtX3VzZXIgPSB1cmwudXNlcigpOworICAgIG1fcGFzc3dv
cmQgPSB1cmwucGFzcygpOworICAgIG1fbGFzdEhUVFBNZXRob2QgPSByZXF1ZXN0Lmh0dHBNZXRo
b2QoKTsKKyAgICByZXF1ZXN0LnJlbW92ZUNyZWRlbnRpYWxzKCk7CisKKyAgICBpZiAoaXNDcm9z
c09yaWdpbikgeworICAgICAgICAvLyBUaGUgbmV0d29yayBsYXllciBtaWdodCBjYXJyeSBvdmVy
IHNvbWUgaGVhZGVycyBmcm9tIHRoZSBvcmlnaW5hbCByZXF1ZXN0IHRoYXQKKyAgICAgICAgLy8g
d2Ugd2FudCB0byBzdHJpcCBoZXJlIGJlY2F1c2UgdGhlIHJlZGlyZWN0IGlzIGNyb3NzLW9yaWdp
bi4KKyAgICAgICAgcmVxdWVzdC5jbGVhckhUVFBBdXRob3JpemF0aW9uKCk7CisgICAgICAgIHJl
cXVlc3QuY2xlYXJIVFRQT3JpZ2luKCk7CisgICAgfSBlbHNlIGlmICh1cmwucHJvdG9jb2xJc0lu
SFRUUEZhbWlseSgpICYmIG1fc3RvcmVkQ3JlZGVudGlhbHMgPT0gQWxsb3dTdG9yZWRDcmVkZW50
aWFscykgeworICAgICAgICBpZiAobV91c2VyLmlzRW1wdHkoKSAmJiBtX3Bhc3N3b3JkLmlzRW1w
dHkoKSkgeworICAgICAgICAgICAgYXV0byBjcmVkZW50aWFsID0gbV9zZXNzaW9uLT5uZXR3b3Jr
U3RvcmFnZVNlc3Npb24oKS5jcmVkZW50aWFsU3RvcmFnZSgpLmdldChyZXF1ZXN0LnVybCgpKTsK
KyAgICAgICAgICAgIGlmICghY3JlZGVudGlhbC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAg
bV9pbml0aWFsQ3JlZGVudGlhbCA9IGNyZWRlbnRpYWw7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBjbGVhclJlcXVlc3QoKTsKKworICAgIGF1dG8gcmVzcG9uc2UgPSBSZXNvdXJjZVJlc3BvbnNl
KG1fcmVzcG9uc2UpOworICAgIG1fY2xpZW50LT53aWxsUGVyZm9ybUhUVFBSZWRpcmVjdGlvbihX
VEZNb3ZlKHJlc3BvbnNlKSwgV1RGTW92ZShyZXF1ZXN0KSwgW3RoaXMsIHByb3RlY3RlZFRoaXMg
PSBtYWtlUmVmKCp0aGlzKSwgaXNDcm9zc09yaWdpbl0oY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBu
ZXdSZXF1ZXN0KSB7CisgICAgICAgIGlmIChuZXdSZXF1ZXN0LmlzTnVsbCgpIHx8IG1fc3RhdGUg
PT0gU3RhdGU6OkNhbmNlbGluZykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBhdXRv
IHJlcXVlc3QgPSBuZXdSZXF1ZXN0OworICAgICAgICBpZiAocmVxdWVzdC51cmwoKS5wcm90b2Nv
bElzSW5IVFRQRmFtaWx5KCkpIHsKKyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICAgICAgICAg
IGlmIChpc0Nyb3NzT3JpZ2luKQorICAgICAgICAgICAgICAgIG1fc3RhcnRUaW1lID0gbW9ub3Rv
bmljYWxseUluY3JlYXNpbmdUaW1lTVMoKTsKKyNlbmRpZgorICAgICAgICAgICAgYXBwbHlBdXRo
ZW50aWNhdGlvblRvUmVxdWVzdChyZXF1ZXN0KTsKKyAgICAgICAgfQorICAgICAgICBjcmVhdGVS
ZXF1ZXN0KHJlcXVlc3QpOworICAgICAgICBpZiAobV9zb3VwUmVxdWVzdCAmJiBtX3N0YXRlICE9
IFN0YXRlOjpTdXNwZW5kZWQpIHsKKyAgICAgICAgICAgIG1fc3RhdGUgPSBTdGF0ZTo6U3VzcGVu
ZGVkOworICAgICAgICAgICAgcmVzdW1lKCk7CisgICAgICAgIH0KKyAgICB9KTsKK30KKwordm9p
ZCBOZXR3b3JrRGF0YVRhc2s6OnJlYWRDYWxsYmFjayhHSW5wdXRTdHJlYW0qIGlucHV0U3RyZWFt
LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgTmV0d29ya0RhdGFUYXNrKiB0YXNrKQoreworICAgIFJl
ZlB0cjxOZXR3b3JrRGF0YVRhc2s+IHByb3RlY3RlZFRoaXMgPSBhZG9wdFJlZih0YXNrKTsKKyAg
ICBpZiAodGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IHRhc2stPnN0YXRlKCkg
PT0gU3RhdGU6OkNvbXBsZXRlZCB8fCAoIXRhc2stPm1fY2xpZW50ICYmICF0YXNrLT5pc0Rvd25s
b2FkKCkpKSB7CisgICAgICAgIHRhc2stPmNsZWFyUmVxdWVzdCgpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIEFTU0VSVChpbnB1dFN0cmVhbSA9PSB0YXNrLT5tX2lucHV0U3RyZWFtLmdl
dCgpKTsKKworICAgIGlmICh0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpTdXNwZW5kZWQpIHsKKyAg
ICAgICAgQVNTRVJUKCF0YXNrLT5tX3BlbmRpbmdSZXN1bHQpOworICAgICAgICB0YXNrLT5tX3Bl
bmRpbmdSZXN1bHQgPSByZXN1bHQ7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBHVW5p
cXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgZ3NzaXplIGJ5dGVzUmVhZCA9IGdfaW5wdXRf
c3RyZWFtX3JlYWRfZmluaXNoKGlucHV0U3RyZWFtLCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSk7
CisgICAgaWYgKGVycm9yKQorICAgICAgICB0YXNrLT5kaWRGYWlsKFJlc291cmNlRXJyb3I6Omdl
bmVyaWNHRXJyb3IoZXJyb3IuZ2V0KCksIHRhc2stPm1fc291cFJlcXVlc3QuZ2V0KCkpKTsKKyAg
ICBlbHNlIGlmIChieXRlc1JlYWQgPiAwKQorICAgICAgICB0YXNrLT5kaWRSZWFkKGJ5dGVzUmVh
ZCk7CisgICAgZWxzZQorICAgICAgICB0YXNrLT5kaWRGaW5pc2hSZWFkKCk7Cit9CisKK3ZvaWQg
TmV0d29ya0RhdGFUYXNrOjpyZWFkKCkKK3sKKyAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrPiBw
cm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIEFTU0VSVChtX2lucHV0U3RyZWFtKTsKKyAgICBtX3Jl
YWRCdWZmZXIuZ3JvdyhnRGVmYXVsdFJlYWRCdWZmZXJTaXplKTsKKyAgICBnX2lucHV0X3N0cmVh
bV9yZWFkX2FzeW5jKG1faW5wdXRTdHJlYW0uZ2V0KCksIG1fcmVhZEJ1ZmZlci5kYXRhKCksIG1f
cmVhZEJ1ZmZlci5zaXplKCksIEdfUFJJT1JJVFlfREVGQVVMVCwgbV9jYW5jZWxsYWJsZS5nZXQo
KSwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihyZWFkQ2Fs
bGJhY2spLCBwcm90ZWN0ZWRUaGlzLmxlYWtSZWYoKSk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFU
YXNrOjpkaWRSZWFkKGdzc2l6ZSBieXRlc1JlYWQpCit7CisgICAgbV9yZWFkQnVmZmVyLnNocmlu
ayhieXRlc1JlYWQpOworICAgIGlmIChtX2Rvd25sb2FkT3V0cHV0U3RyZWFtKSB7CisgICAgICAg
IEFTU0VSVChpc0Rvd25sb2FkKCkpOworICAgICAgICB3cml0ZURvd25sb2FkKCk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgQVNTRVJUKG1fY2xpZW50KTsKKyAgICAgICAgbV9jbGllbnQtPmRpZFJl
Y2VpdmVEYXRhKFNoYXJlZEJ1ZmZlcjo6YWRvcHRWZWN0b3IobV9yZWFkQnVmZmVyKSk7CisgICAg
ICAgIHJlYWQoKTsKKyAgICB9Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRGaW5pc2hS
ZWFkKCkKK3sKKyAgICBBU1NFUlQobV9pbnB1dFN0cmVhbSk7CisgICAgZ19pbnB1dF9zdHJlYW1f
Y2xvc2UobV9pbnB1dFN0cmVhbS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgbV9pbnB1
dFN0cmVhbSA9IG51bGxwdHI7CisgICAgaWYgKG1fbXVsdGlwYXJ0SW5wdXRTdHJlYW0pIHsKKyAg
ICAgICAgcmVxdWVzdE5leHRQYXJ0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAobV9kb3dubG9hZE91dHB1dFN0cmVhbSkgeworICAgICAgICBkaWRGaW5pc2hEb3dubG9hZCgp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2xlYXJSZXF1ZXN0KCk7CisgICAgQVNT
RVJUKG1fY2xpZW50KTsKKyAgICBtX2NsaWVudC0+ZGlkQ29tcGxldGVXaXRoRXJyb3IoeyB9KTsK
K30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2s6OnJlcXVlc3ROZXh0UGFydENhbGxiYWNrKFNvdXBN
dWx0aXBhcnRJbnB1dFN0cmVhbSogbXVsdGlwYXJ0SW5wdXRTdHJlYW0sIEdBc3luY1Jlc3VsdCog
cmVzdWx0LCBOZXR3b3JrRGF0YVRhc2sqIHRhc2spCit7CisgICAgUmVmUHRyPE5ldHdvcmtEYXRh
VGFzaz4gcHJvdGVjdGVkVGhpcyA9IGFkb3B0UmVmKHRhc2spOworICAgIGlmICh0YXNrLT5zdGF0
ZSgpID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgdGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q29tcGxl
dGVkIHx8ICF0YXNrLT5tX2NsaWVudCkgeworICAgICAgICB0YXNrLT5jbGVhclJlcXVlc3QoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBU1NFUlQobXVsdGlwYXJ0SW5wdXRTdHJlYW0g
PT0gdGFzay0+bV9tdWx0aXBhcnRJbnB1dFN0cmVhbS5nZXQoKSk7CisKKyAgICBpZiAodGFzay0+
c3RhdGUoKSA9PSBTdGF0ZTo6U3VzcGVuZGVkKSB7CisgICAgICAgIEFTU0VSVCghdGFzay0+bV9w
ZW5kaW5nUmVzdWx0KTsKKyAgICAgICAgdGFzay0+bV9wZW5kaW5nUmVzdWx0ID0gcmVzdWx0Owor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9y
OworICAgIEdSZWZQdHI8R0lucHV0U3RyZWFtPiBpbnB1dFN0cmVhbSA9IGFkb3B0R1JlZihzb3Vw
X211bHRpcGFydF9pbnB1dF9zdHJlYW1fbmV4dF9wYXJ0X2ZpbmlzaChtdWx0aXBhcnRJbnB1dFN0
cmVhbSwgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpKTsKKyAgICBpZiAoZXJyb3IpCisgICAgICAg
IHRhc2stPmRpZEZhaWwoUmVzb3VyY2VFcnJvcjo6aHR0cEVycm9yKHRhc2stPm1fc291cE1lc3Nh
Z2UuZ2V0KCksIGVycm9yLmdldCgpLCB0YXNrLT5tX3NvdXBSZXF1ZXN0LmdldCgpKSk7CisgICAg
ZWxzZSBpZiAoaW5wdXRTdHJlYW0pCisgICAgICAgIHRhc2stPmRpZFJlcXVlc3ROZXh0UGFydChX
VEZNb3ZlKGlucHV0U3RyZWFtKSk7CisgICAgZWxzZQorICAgICAgICB0YXNrLT5kaWRGaW5pc2hS
ZXF1ZXN0TmV4dFBhcnQoKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2s6OnJlcXVlc3ROZXh0
UGFydCgpCit7CisgICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4gcHJvdGVjdGVkVGhpcyh0aGlz
KTsKKyAgICBBU1NFUlQobV9tdWx0aXBhcnRJbnB1dFN0cmVhbSk7CisgICAgQVNTRVJUKCFtX2lu
cHV0U3RyZWFtKTsKKyAgICBzb3VwX211bHRpcGFydF9pbnB1dF9zdHJlYW1fbmV4dF9wYXJ0X2Fz
eW5jKG1fbXVsdGlwYXJ0SW5wdXRTdHJlYW0uZ2V0KCksIEdfUFJJT1JJVFlfREVGQVVMVCwgbV9j
YW5jZWxsYWJsZS5nZXQoKSwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNh
bGxiYWNrPihyZXF1ZXN0TmV4dFBhcnRDYWxsYmFjayksIHByb3RlY3RlZFRoaXMubGVha1JlZigp
KTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZFJlcXVlc3ROZXh0UGFydChHUmVmUHRy
PEdJbnB1dFN0cmVhbT4mJiBpbnB1dFN0cmVhbSkKK3sKKyAgICBBU1NFUlQoIW1faW5wdXRTdHJl
YW0pOworICAgIG1faW5wdXRTdHJlYW0gPSBXVEZNb3ZlKGlucHV0U3RyZWFtKTsKKyAgICBtX3Jl
c3BvbnNlID0gUmVzb3VyY2VSZXNwb25zZSgpOworICAgIG1fcmVzcG9uc2Uuc2V0VVJMKG1fZmly
c3RSZXF1ZXN0LnVybCgpKTsKKyAgICBtX3Jlc3BvbnNlLnVwZGF0ZUZyb21Tb3VwTWVzc2FnZUhl
YWRlcnMoc291cF9tdWx0aXBhcnRfaW5wdXRfc3RyZWFtX2dldF9oZWFkZXJzKG1fbXVsdGlwYXJ0
SW5wdXRTdHJlYW0uZ2V0KCkpKTsKKyAgICBkaWRSZWNlaXZlUmVzcG9uc2UoKTsKK30KKwordm9p
ZCBOZXR3b3JrRGF0YVRhc2s6OmRpZEZpbmlzaFJlcXVlc3ROZXh0UGFydCgpCit7CisgICAgQVNT
RVJUKCFtX2lucHV0U3RyZWFtKTsKKyAgICBBU1NFUlQobV9tdWx0aXBhcnRJbnB1dFN0cmVhbSk7
CisgICAgZ19pbnB1dF9zdHJlYW1fY2xvc2UoR19JTlBVVF9TVFJFQU0obV9tdWx0aXBhcnRJbnB1
dFN0cmVhbS5nZXQoKSksIG51bGxwdHIsIG51bGxwdHIpOworICAgIGNsZWFyUmVxdWVzdCgpOwor
ICAgIG1fY2xpZW50LT5kaWRDb21wbGV0ZVdpdGhFcnJvcih7IH0pOworfQorCit2b2lkIE5ldHdv
cmtEYXRhVGFzazo6Z290SGVhZGVyc0NhbGxiYWNrKFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSwg
TmV0d29ya0RhdGFUYXNrKiB0YXNrKQoreworICAgIGlmICh0YXNrLT5zdGF0ZSgpID09IFN0YXRl
OjpDYW5jZWxpbmcgfHwgdGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICF0YXNr
LT5tX2NsaWVudCkgeworICAgICAgICB0YXNrLT5jbGVhclJlcXVlc3QoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBBU1NFUlQodGFzay0+bV9zb3VwTWVzc2FnZS5nZXQoKSA9PSBzb3Vw
TWVzc2FnZSk7CisgICAgdGFzay0+ZGlkR2V0SGVhZGVycygpOworfQorCit2b2lkIE5ldHdvcmtE
YXRhVGFzazo6ZGlkR2V0SGVhZGVycygpCit7CisgICAgLy8gV2UgYXJlIGEgYml0IG1vcmUgY29u
c2VydmF0aXZlIHdpdGggdGhlIHBlcnNpc3RlbnQgY3JlZGVudGlhbCBzdG9yYWdlIHRoYW4gdGhl
IHNlc3Npb24gc3RvcmUsCisgICAgLy8gc2luY2Ugd2UgYXJlIHdhaXRpbmcgdW50aWwgd2Uga25v
dyB0aGF0IHRoaXMgYXV0aGVudGljYXRpb24gc3VjY2VlZGVkIGJlZm9yZSBhY3R1YWxseSBzdG9y
aW5nLgorICAgIC8vIFRoaXMgaXMgYmVjYXVzZSB3ZSB3YW50IHRvIGF2b2lkIGhpdHRpbmcgdGhl
IGRpc2sgdHdpY2UgKG9uY2UgdG8gYWRkIGFuZCBvbmNlIHRvIHJlbW92ZSkgZm9yCisgICAgLy8g
aW5jb3JyZWN0IGNyZWRlbnRpYWxzIG9yIHBvbGx1dGluZyB0aGUga2V5Y2hhaW4gd2l0aCBpbnZh
bGlkIGNyZWRlbnRpYWxzLgorICAgIGlmICghaXNBdXRoZW50aWNhdGlvbkZhaWx1cmVTdGF0dXND
b2RlKG1fc291cE1lc3NhZ2UtPnN0YXR1c19jb2RlKSAmJiBtX3NvdXBNZXNzYWdlLT5zdGF0dXNf
Y29kZSA8IDUwMCkgeworICAgICAgICBtX3Nlc3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigp
LnNhdmVDcmVkZW50aWFsVG9QZXJzaXN0ZW50U3RvcmFnZShtX3Byb3RlY3Rpb25TcGFjZUZvclBl
cnNpc3RlbnRTdG9yYWdlLCBtX2NyZWRlbnRpYWxGb3JQZXJzaXN0ZW50U3RvcmFnZSk7CisgICAg
ICAgIG1fcHJvdGVjdGlvblNwYWNlRm9yUGVyc2lzdGVudFN0b3JhZ2UgPSBQcm90ZWN0aW9uU3Bh
Y2UoKTsKKyAgICAgICAgbV9jcmVkZW50aWFsRm9yUGVyc2lzdGVudFN0b3JhZ2UgPSBDcmVkZW50
aWFsKCk7CisgICAgfQorfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6d3JvdGVCb2R5RGF0YUNh
bGxiYWNrKFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSwgU291cEJ1ZmZlciogYnVmZmVyLCBOZXR3
b3JrRGF0YVRhc2sqIHRhc2spCit7CisgICAgaWYgKHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNh
bmNlbGluZyB8fCB0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDb21wbGV0ZWQgfHwgIXRhc2stPm1f
Y2xpZW50KSB7CisgICAgICAgIHRhc2stPmNsZWFyUmVxdWVzdCgpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIEFTU0VSVCh0YXNrLT5tX3NvdXBNZXNzYWdlLmdldCgpID09IHNvdXBNZXNz
YWdlKTsKKyAgICB0YXNrLT5kaWRXcml0ZUJvZHlEYXRhKGJ1ZmZlci0+bGVuZ3RoKTsKK30KKwor
dm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZFdyaXRlQm9keURhdGEodWludDY0X3QgYnl0ZXNTZW50
KQoreworICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2s+IHByb3RlY3RlZFRoaXModGhpcyk7Cisg
ICAgbV9ib2R5RGF0YVRvdGFsQnl0ZXNTZW50ICs9IGJ5dGVzU2VudDsKKyAgICBtX2NsaWVudC0+
ZGlkU2VuZERhdGEobV9ib2R5RGF0YVRvdGFsQnl0ZXNTZW50LCBtX3NvdXBNZXNzYWdlLT5yZXF1
ZXN0X2JvZHktPmxlbmd0aCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpkb3dubG9hZCgp
Cit7CisgICAgQVNTRVJUKGlzRG93bmxvYWQoKSk7CisgICAgQVNTRVJUKG1fcGVuZGluZ0Rvd25s
b2FkTG9jYXRpb24pOworICAgIEFTU0VSVCghbV9yZXNwb25zZS5pc051bGwoKSk7CisKKyAgICBp
ZiAobV9yZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpID49IDQwMCkgeworICAgICAgICBkaWRGYWls
RG93bmxvYWQocGxhdGZvcm1Eb3dubG9hZE5ldHdvcmtFcnJvcihtX3Jlc3BvbnNlLmh0dHBTdGF0
dXNDb2RlKCksIG1fcmVzcG9uc2UudXJsKCksIG1fcmVzcG9uc2UuaHR0cFN0YXR1c1RleHQoKSkp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9kb3dubG9hZERlc3RpbmF0aW9uRmls
ZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl91cmkobV9wZW5kaW5nRG93bmxvYWRMb2NhdGlv
bi51dGY4KCkuZGF0YSgpKSk7CisgICAgR1JlZlB0cjxHRmlsZU91dHB1dFN0cmVhbT4gb3V0cHV0
U3RyZWFtOworICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBpZiAobV9hbGxv
d092ZXJ3cml0ZURvd25sb2FkKQorICAgICAgICBvdXRwdXRTdHJlYW0gPSBhZG9wdEdSZWYoZ19m
aWxlX3JlcGxhY2UobV9kb3dubG9hZERlc3RpbmF0aW9uRmlsZS5nZXQoKSwgbnVsbHB0ciwgRkFM
U0UsIEdfRklMRV9DUkVBVEVfTk9ORSwgbnVsbHB0ciwgJmVycm9yLm91dFB0cigpKSk7CisgICAg
ZWxzZQorICAgICAgICBvdXRwdXRTdHJlYW0gPSBhZG9wdEdSZWYoZ19maWxlX2NyZWF0ZShtX2Rv
d25sb2FkRGVzdGluYXRpb25GaWxlLmdldCgpLCBHX0ZJTEVfQ1JFQVRFX05PTkUsIG51bGxwdHIs
ICZlcnJvci5vdXRQdHIoKSkpOworICAgIGlmICghb3V0cHV0U3RyZWFtKSB7CisgICAgICAgIGRp
ZEZhaWxEb3dubG9hZChwbGF0Zm9ybURvd25sb2FkRGVzdGluYXRpb25FcnJvcihtX3Jlc3BvbnNl
LCBlcnJvci0+bWVzc2FnZSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgU3RyaW5n
IGludGVybWVkaWF0ZVVSSSA9IG1fcGVuZGluZ0Rvd25sb2FkTG9jYXRpb24gKyAiLndrZG93bmxv
YWQiOworICAgIG1fZG93bmxvYWRJbnRlcm1lZGlhdGVGaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9u
ZXdfZm9yX3VyaShpbnRlcm1lZGlhdGVVUkkudXRmOCgpLmRhdGEoKSkpOworICAgIG91dHB1dFN0
cmVhbSA9IGFkb3B0R1JlZihnX2ZpbGVfcmVwbGFjZShtX2Rvd25sb2FkSW50ZXJtZWRpYXRlRmls
ZS5nZXQoKSwgMCwgVFJVRSwgR19GSUxFX0NSRUFURV9OT05FLCAwLCAmZXJyb3Iub3V0UHRyKCkp
KTsKKyAgICBpZiAoIW91dHB1dFN0cmVhbSkgeworICAgICAgICBkaWRGYWlsRG93bmxvYWQocGxh
dGZvcm1Eb3dubG9hZERlc3RpbmF0aW9uRXJyb3IobV9yZXNwb25zZSwgZXJyb3ItPm1lc3NhZ2Up
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2Rvd25sb2FkT3V0cHV0U3RyZWFtID0g
YWRvcHRHUmVmKEdfT1VUUFVUX1NUUkVBTShvdXRwdXRTdHJlYW0ubGVha1JlZigpKSk7CisKKyAg
ICBhdXRvJiBkb3dubG9hZE1hbmFnZXIgPSBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuZG93
bmxvYWRNYW5hZ2VyKCk7CisgICAgYXV0byBkb3dubG9hZCA9IHN0ZDo6bWFrZV91bmlxdWU8RG93
bmxvYWQ+KGRvd25sb2FkTWFuYWdlciwgbV9wZW5kaW5nRG93bmxvYWRJRCwgdGhpcywgbV9zZXNz
aW9uLT5zZXNzaW9uSUQoKSwgc3VnZ2VzdGVkRmlsZW5hbWUoKSk7CisgICAgYXV0byogZG93bmxv
YWRQdHIgPSBkb3dubG9hZC5nZXQoKTsKKyAgICBkb3dubG9hZE1hbmFnZXIuZGF0YVRhc2tCZWNh
bWVEb3dubG9hZFRhc2sobV9wZW5kaW5nRG93bmxvYWRJRCwgV1RGTW92ZShkb3dubG9hZCkpOwor
ICAgIGRvd25sb2FkUHRyLT5kaWRDcmVhdGVEZXN0aW5hdGlvbihtX3BlbmRpbmdEb3dubG9hZExv
Y2F0aW9uKTsKKworICAgIEFTU0VSVChtX2NsaWVudCk7CisgICAgbV9jbGllbnQtPmRpZEJlY29t
ZURvd25sb2FkKCk7CisKKyAgICByZWFkKCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjp3
cml0ZURvd25sb2FkQ2FsbGJhY2soR091dHB1dFN0cmVhbSogb3V0cHV0U3RyZWFtLCBHQXN5bmNS
ZXN1bHQqIHJlc3VsdCwgTmV0d29ya0RhdGFUYXNrKiB0YXNrKQoreworICAgIFJlZlB0cjxOZXR3
b3JrRGF0YVRhc2s+IHByb3RlY3RlZFRoaXMgPSBhZG9wdFJlZih0YXNrKTsKKyAgICBpZiAodGFz
ay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6
OkNvbXBsZXRlZCB8fCAhdGFzay0+aXNEb3dubG9hZCgpKSB7CisgICAgICAgIHRhc2stPmNsZWFy
UmVxdWVzdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFTU0VSVChvdXRwdXRTdHJl
YW0gPT0gdGFzay0+bV9kb3dubG9hZE91dHB1dFN0cmVhbS5nZXQoKSk7CisKKyAgICBHVW5pcXVl
T3V0UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgZ3NpemUgYnl0ZXNXcml0dGVuOworI2lmIEdMSUJf
Q0hFQ0tfVkVSU0lPTigyLCA0NCwgMCkKKyAgICBnX291dHB1dF9zdHJlYW1fd3JpdGVfYWxsX2Zp
bmlzaChvdXRwdXRTdHJlYW0sIHJlc3VsdCwgJmJ5dGVzV3JpdHRlbiwgJmVycm9yLm91dFB0cigp
KTsKKyNlbHNlCisgICAgZ3NzaXplIHdyaXRlVGFza1Jlc3VsdCA9IGdfdGFza19wcm9wYWdhdGVf
aW50KEdfVEFTSyhyZXN1bHQpLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGlmICh3cml0ZVRhc2tS
ZXN1bHQgIT0gLTEpCisgICAgICAgIGJ5dGVzV3JpdHRlbiA9IHdyaXRlVGFza1Jlc3VsdDsKKyNl
bmRpZgorICAgIGlmIChlcnJvcikKKyAgICAgICAgdGFzay0+ZGlkRmFpbERvd25sb2FkKHBsYXRm
b3JtRG93bmxvYWREZXN0aW5hdGlvbkVycm9yKHRhc2stPm1fcmVzcG9uc2UsIGVycm9yLT5tZXNz
YWdlKSk7CisgICAgZWxzZQorICAgICAgICB0YXNrLT5kaWRXcml0ZURvd25sb2FkKGJ5dGVzV3Jp
dHRlbik7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjp3cml0ZURvd25sb2FkKCkKK3sKKyAg
ICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworI2lmIEdMSUJf
Q0hFQ0tfVkVSU0lPTigyLCA0NCwgMCkKKyAgICBnX291dHB1dF9zdHJlYW1fd3JpdGVfYWxsX2Fz
eW5jKG1fZG93bmxvYWRPdXRwdXRTdHJlYW0uZ2V0KCksIG1fcmVhZEJ1ZmZlci5kYXRhKCksIG1f
cmVhZEJ1ZmZlci5zaXplKCksIEdfUFJJT1JJVFlfREVGQVVMVCwgbV9jYW5jZWxsYWJsZS5nZXQo
KSwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPih3cml0ZURv
d25sb2FkQ2FsbGJhY2spLCBwcm90ZWN0ZWRUaGlzLmxlYWtSZWYoKSk7CisjZWxzZQorICAgIEdS
ZWZQdHI8R1Rhc2s+IHdyaXRlVGFzayA9IGFkb3B0R1JlZihnX3Rhc2tfbmV3KG1fZG93bmxvYWRP
dXRwdXRTdHJlYW0uZ2V0KCksIG1fY2FuY2VsbGFibGUuZ2V0KCksCisgICAgICAgIHJlaW50ZXJw
cmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4od3JpdGVEb3dubG9hZENhbGxiYWNrKSwgcHJv
dGVjdGVkVGhpcy5sZWFrUmVmKCkpKTsKKyAgICBnX3Rhc2tfc2V0X3Rhc2tfZGF0YSh3cml0ZVRh
c2suZ2V0KCksIHRoaXMsIG51bGxwdHIpOworICAgIGdfdGFza19ydW5faW5fdGhyZWFkKHdyaXRl
VGFzay5nZXQoKSwgW10oR1Rhc2sqIHdyaXRlVGFzaywgZ3BvaW50ZXIgc291cmNlLCBncG9pbnRl
ciB1c2VyRGF0YSwgR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSkgeworICAgICAgICBhdXRvKiB0
YXNrID0gc3RhdGljX2Nhc3Q8TmV0d29ya0RhdGFUYXNrKj4odXNlckRhdGEpOworICAgICAgICBH
T3V0cHV0U3RyZWFtKiBvdXRwdXRTdHJlYW0gPSBHX09VVFBVVF9TVFJFQU0oc291cmNlKTsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQodGFzay0+bV9kb3dubG9hZE91dHB1dFN0cmVhbS5nZXQoKSA9
PSBvdXRwdXRTdHJlYW0pOworICAgICAgICBSRUxFQVNFX0FTU0VSVCh0YXNrLT5tX2NhbmNlbGxh
YmxlLmdldCgpID09IGNhbmNlbGxhYmxlKTsKKyAgICAgICAgR0Vycm9yKiBlcnJvciA9IG51bGxw
dHI7CisgICAgICAgIGlmIChnX2NhbmNlbGxhYmxlX3NldF9lcnJvcl9pZl9jYW5jZWxsZWQoY2Fu
Y2VsbGFibGUsICZlcnJvcikpIHsKKyAgICAgICAgICAgIGdfdGFza19yZXR1cm5fZXJyb3Iod3Jp
dGVUYXNrLCBlcnJvcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBnc2l6ZSBieXRlc1dyaXR0ZW47CisgICAgICAgIGlmIChnX291dHB1dF9zdHJlYW1fd3JpdGVf
YWxsKG91dHB1dFN0cmVhbSwgdGFzay0+bV9yZWFkQnVmZmVyLmRhdGEoKSwgdGFzay0+bV9yZWFk
QnVmZmVyLnNpemUoKSwgJmJ5dGVzV3JpdHRlbiwgY2FuY2VsbGFibGUsICZlcnJvcikpCisgICAg
ICAgICAgICBnX3Rhc2tfcmV0dXJuX2ludCh3cml0ZVRhc2ssIGJ5dGVzV3JpdHRlbik7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGdfdGFza19yZXR1cm5fZXJyb3Iod3JpdGVUYXNrLCBlcnJv
cik7CisgICAgfSk7CisjZW5kaWYKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZFdyaXRl
RG93bmxvYWQoZ3NpemUgYnl0ZXNXcml0dGVuKQoreworICAgIEFTU0VSVChieXRlc1dyaXR0ZW4g
PT0gbV9yZWFkQnVmZmVyLnNpemUoKSk7CisgICAgYXV0byogZG93bmxvYWQgPSBOZXR3b3JrUHJv
Y2Vzczo6c2luZ2xldG9uKCkuZG93bmxvYWRNYW5hZ2VyKCkuZG93bmxvYWQobV9wZW5kaW5nRG93
bmxvYWRJRCk7CisgICAgQVNTRVJUKGRvd25sb2FkKTsKKyAgICBkb3dubG9hZC0+ZGlkUmVjZWl2
ZURhdGEoYnl0ZXNXcml0dGVuKTsKKyAgICByZWFkKCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFU
YXNrOjpkaWRGaW5pc2hEb3dubG9hZCgpCit7CisgICAgQVNTRVJUKCFtX3Jlc3BvbnNlLmlzTnVs
bCgpKTsKKyAgICBBU1NFUlQobV9kb3dubG9hZE91dHB1dFN0cmVhbSk7CisgICAgZ19vdXRwdXRf
c3RyZWFtX2Nsb3NlKG1fZG93bmxvYWRPdXRwdXRTdHJlYW0uZ2V0KCksIG51bGxwdHIsIG51bGxw
dHIpOworICAgIG1fZG93bmxvYWRPdXRwdXRTdHJlYW0gPSBudWxscHRyOworCisgICAgQVNTRVJU
KG1fZG93bmxvYWREZXN0aW5hdGlvbkZpbGUpOworICAgIEFTU0VSVChtX2Rvd25sb2FkSW50ZXJt
ZWRpYXRlRmlsZSk7CisgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOworICAgIGlmICgh
Z19maWxlX21vdmUobV9kb3dubG9hZEludGVybWVkaWF0ZUZpbGUuZ2V0KCksIG1fZG93bmxvYWRE
ZXN0aW5hdGlvbkZpbGUuZ2V0KCksIEdfRklMRV9DT1BZX09WRVJXUklURSwgbV9jYW5jZWxsYWJs
ZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0ciwgJmVycm9yLm91dFB0cigpKSkgeworICAgICAgICBk
aWRGYWlsRG93bmxvYWQocGxhdGZvcm1Eb3dubG9hZERlc3RpbmF0aW9uRXJyb3IobV9yZXNwb25z
ZSwgZXJyb3ItPm1lc3NhZ2UpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEdSZWZQ
dHI8R0ZpbGVJbmZvPiBpbmZvID0gYWRvcHRHUmVmKGdfZmlsZV9pbmZvX25ldygpKTsKKyAgICBD
U3RyaW5nIHVyaSA9IG1fcmVzcG9uc2UudXJsKCkuc3RyaW5nKCkudXRmOCgpOworICAgIGdfZmls
ZV9pbmZvX3NldF9hdHRyaWJ1dGVfc3RyaW5nKGluZm8uZ2V0KCksICJtZXRhZGF0YTo6ZG93bmxv
YWQtdXJpIiwgdXJpLmRhdGEoKSk7CisgICAgZ19maWxlX2luZm9fc2V0X2F0dHJpYnV0ZV9zdHJp
bmcoaW5mby5nZXQoKSwgInhhdHRyOjp4ZGcub3JpZ2luLnVybCIsIHVyaS5kYXRhKCkpOworICAg
IGdfZmlsZV9zZXRfYXR0cmlidXRlc19hc3luYyhtX2Rvd25sb2FkRGVzdGluYXRpb25GaWxlLmdl
dCgpLCBpbmZvLmdldCgpLCBHX0ZJTEVfUVVFUllfSU5GT19OT05FLCBHX1BSSU9SSVRZX0RFRkFV
TFQsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIpOworCisgICAgY2xlYXJSZXF1ZXN0KCk7Cisg
ICAgYXV0byogZG93bmxvYWQgPSBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuZG93bmxvYWRN
YW5hZ2VyKCkuZG93bmxvYWQobV9wZW5kaW5nRG93bmxvYWRJRCk7CisgICAgQVNTRVJUKGRvd25s
b2FkKTsKKyAgICBkb3dubG9hZC0+ZGlkRmluaXNoKCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFU
YXNrOjpkaWRGYWlsRG93bmxvYWQoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit7CisgICAg
Y2xlYXJSZXF1ZXN0KCk7CisgICAgY2xlYW5Eb3dubG9hZEZpbGVzKCk7CisgICAgaWYgKG1fY2xp
ZW50KQorICAgICAgICBtX2NsaWVudC0+ZGlkQ29tcGxldGVXaXRoRXJyb3IoZXJyb3IpOworICAg
IGVsc2UgeworICAgICAgICBhdXRvKiBkb3dubG9hZCA9IE5ldHdvcmtQcm9jZXNzOjpzaW5nbGV0
b24oKS5kb3dubG9hZE1hbmFnZXIoKS5kb3dubG9hZChtX3BlbmRpbmdEb3dubG9hZElEKTsKKyAg
ICAgICAgQVNTRVJUKGRvd25sb2FkKTsKKyAgICAgICAgZG93bmxvYWQtPmRpZEZhaWwoZXJyb3Is
IElQQzo6RGF0YVJlZmVyZW5jZSgpKTsKKyAgICB9Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNr
OjpjbGVhbkRvd25sb2FkRmlsZXMoKQoreworICAgIGlmIChtX2Rvd25sb2FkRGVzdGluYXRpb25G
aWxlKSB7CisgICAgICAgIGdfZmlsZV9kZWxldGUobV9kb3dubG9hZERlc3RpbmF0aW9uRmlsZS5n
ZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgIG1fZG93bmxvYWREZXN0aW5hdGlvbkZp
bGUgPSBudWxscHRyOworICAgIH0KKyAgICBpZiAobV9kb3dubG9hZEludGVybWVkaWF0ZUZpbGUp
IHsKKyAgICAgICAgZ19maWxlX2RlbGV0ZShtX2Rvd25sb2FkSW50ZXJtZWRpYXRlRmlsZS5nZXQo
KSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgIG1fZG93bmxvYWRJbnRlcm1lZGlhdGVGaWxl
ID0gbnVsbHB0cjsKKyAgICB9Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRGYWlsKGNv
bnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQoreworICAgIGlmIChpc0Rvd25sb2FkKCkpIHsKKyAg
ICAgICAgZGlkRmFpbERvd25sb2FkKHBsYXRmb3JtRG93bmxvYWROZXR3b3JrRXJyb3IoZXJyb3Iu
ZXJyb3JDb2RlKCksIGVycm9yLmZhaWxpbmdVUkwoKSwgZXJyb3IubG9jYWxpemVkRGVzY3JpcHRp
b24oKSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2xlYXJSZXF1ZXN0KCk7Cisg
ICAgQVNTRVJUKG1fY2xpZW50KTsKKyAgICBtX2NsaWVudC0+ZGlkQ29tcGxldGVXaXRoRXJyb3Io
ZXJyb3IpOworfQorCisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCit2b2lkIE5ldHdvcmtEYXRhVGFz
azo6bmV0d29ya0V2ZW50Q2FsbGJhY2soU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlLCBHU29ja2V0
Q2xpZW50RXZlbnQgZXZlbnQsIEdJT1N0cmVhbSosIE5ldHdvcmtEYXRhVGFzayogdGFzaykKK3sK
KyAgICBpZiAodGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IHRhc2stPnN0YXRl
KCkgPT0gU3RhdGU6OkNvbXBsZXRlZCB8fCAhdGFzay0+bV9jbGllbnQpCisgICAgICAgIHJldHVy
bjsKKworICAgIEFTU0VSVCh0YXNrLT5tX3NvdXBNZXNzYWdlLmdldCgpID09IHNvdXBNZXNzYWdl
KTsKKyAgICB0YXNrLT5uZXR3b3JrRXZlbnQoZXZlbnQpOworfQorCit2b2lkIE5ldHdvcmtEYXRh
VGFzazo6bmV0d29ya0V2ZW50KEdTb2NrZXRDbGllbnRFdmVudCBldmVudCkKK3sKKyAgICBkb3Vi
bGUgZGVsdGFUaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lTVMoKSAtIG1fc3RhcnRU
aW1lOworICAgIGF1dG8mIGxvYWRUaW1pbmcgPSBtX3Jlc3BvbnNlLm5ldHdvcmtMb2FkVGltaW5n
KCk7CisgICAgc3dpdGNoIChldmVudCkgeworICAgIGNhc2UgR19TT0NLRVRfQ0xJRU5UX1JFU09M
VklORzoKKyAgICAgICAgbG9hZFRpbWluZy5kb21haW5Mb29rdXBTdGFydCA9IGRlbHRhVGltZTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHX1NPQ0tFVF9DTElFTlRfUkVTT0xWRUQ6CisgICAg
ICAgIGxvYWRUaW1pbmcuZG9tYWluTG9va3VwRW5kID0gZGVsdGFUaW1lOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEdfU09DS0VUX0NMSUVOVF9DT05ORUNUSU5HOgorICAgICAgICBsb2FkVGlt
aW5nLmNvbm5lY3RTdGFydCA9IGRlbHRhVGltZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBH
X1NPQ0tFVF9DTElFTlRfQ09OTkVDVEVEOgorICAgICAgICAvLyBXZWIgVGltaW5nIGNvbnNpZGVy
cyB0aGF0IGNvbm5lY3Rpb24gdGltZSBpbnZvbHZlcyBkbnMsIHByb3h5ICYgVExTIG5lZ290aWF0
aW9uLi4uCisgICAgICAgIC8vIHNvIHdlIGJldHRlciBwaWNrIEdfU09DS0VUX0NMSUVOVF9DT01Q
TEVURSBmb3IgY29ubmVjdEVuZAorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdfU09DS0VUX0NM
SUVOVF9QUk9YWV9ORUdPVElBVElORzoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHX1NPQ0tF
VF9DTElFTlRfUFJPWFlfTkVHT1RJQVRFRDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHX1NP
Q0tFVF9DTElFTlRfVExTX0hBTkRTSEFLSU5HOgorICAgICAgICBsb2FkVGltaW5nLnNlY3VyZUNv
bm5lY3Rpb25TdGFydCA9IGRlbHRhVGltZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHX1NP
Q0tFVF9DTElFTlRfVExTX0hBTkRTSEFLRUQ6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR19T
T0NLRVRfQ0xJRU5UX0NPTVBMRVRFOgorICAgICAgICBsb2FkVGltaW5nLmNvbm5lY3RFbmQgPSBk
ZWx0YVRpbWU7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKKyNpZiBTT1VQX0NIRUNL
X1ZFUlNJT04oMiwgNDksIDkxKQordm9pZCBOZXR3b3JrRGF0YVRhc2s6OnN0YXJ0aW5nQ2FsbGJh
Y2soU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlLCBOZXR3b3JrRGF0YVRhc2sqIHRhc2spCit7Cisg
ICAgaWYgKHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCB0YXNrLT5zdGF0ZSgp
ID09IFN0YXRlOjpDb21wbGV0ZWQgfHwgIXRhc2stPm1fY2xpZW50KQorICAgICAgICByZXR1cm47
CisKKyAgICBBU1NFUlQodGFzay0+bV9zb3VwTWVzc2FnZS5nZXQoKSA9PSBzb3VwTWVzc2FnZSk7
CisgICAgdGFzay0+ZGlkU3RhcnRSZXF1ZXN0KCk7Cit9CisjZWxzZQordm9pZCBOZXR3b3JrRGF0
YVRhc2s6OnJlcXVlc3RTdGFydGVkQ2FsbGJhY2soU291cFNlc3Npb24qIHNlc3Npb24sIFNvdXBN
ZXNzYWdlKiBzb3VwTWVzc2FnZSwgU291cFNvY2tldCosIE5ldHdvcmtEYXRhVGFzayogdGFzaykK
K3sKKyAgICBBU1NFUlQoc2Vzc2lvbiA9PSB0YXNrLT5tX3Nlc3Npb24tPnNvdXBTZXNzaW9uKCkp
OworICAgIGlmIChzb3VwTWVzc2FnZSAhPSB0YXNrLT5tX3NvdXBNZXNzYWdlLmdldCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAodGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q2FuY2VsaW5n
IHx8IHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNvbXBsZXRlZCB8fCAhdGFzay0+bV9jbGllbnQp
CisgICAgICAgIHJldHVybjsKKworICAgIHRhc2stPmRpZFN0YXJ0UmVxdWVzdCgpOworfQorI2Vu
ZGlmCisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRTdGFydFJlcXVlc3QoKQoreworICAgIG1f
cmVzcG9uc2UubmV0d29ya0xvYWRUaW1pbmcoKS5yZXF1ZXN0U3RhcnQgPSBtb25vdG9uaWNhbGx5
SW5jcmVhc2luZ1RpbWVNUygpIC0gbV9zdGFydFRpbWU7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFU
YXNrOjpyZXN0YXJ0ZWRDYWxsYmFjayhTb3VwTWVzc2FnZSogc291cE1lc3NhZ2UsIE5ldHdvcmtE
YXRhVGFzayogdGFzaykKK3sKKyAgICAvLyBDYWxsZWQgZWFjaCB0aW1lIHRoZSBtZXNzYWdlIGlz
IGdvaW5nIHRvIGJlIHNlbnQgYWdhaW4gZXhjZXB0IHRoZSBmaXJzdCB0aW1lLgorICAgIC8vIFRo
aXMgaGFwcGVucyB3aGVuIGxpYnNvdXAgaGFuZGxlcyBIVFRQIGF1dGhlbnRpY2F0aW9uLgorICAg
IGlmICh0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgdGFzay0+c3RhdGUoKSA9
PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICF0YXNrLT5tX2NsaWVudCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgQVNTRVJUKHRhc2stPm1fc291cE1lc3NhZ2UuZ2V0KCkgPT0gc291cE1lc3NhZ2UpOwor
ICAgIHRhc2stPmRpZFJlc3RhcnQoKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZFJl
c3RhcnQoKQoreworICAgIG1fc3RhcnRUaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1l
TVMoKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1RJTUlORykKKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAv
TmV0d29ya1Nlc3Npb25Tb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3Nv
dXAvTmV0d29ya1Nlc3Npb25Tb3VwLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4zNGMyYzc3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3Mvc291cC9OZXR3b3JrU2Vzc2lvblNvdXAuY3BwCkBAIC0wLDAgKzEsODAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uLmgiCisKKyNpbmNsdWRlIDxXZWJDb3Jl
L05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU291cE5ldHdvcmtT
ZXNzaW9uLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKwordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitSZWY8TmV0d29ya1Nlc3Npb24+IE5l
dHdvcmtTZXNzaW9uOjpjcmVhdGUoVHlwZSB0eXBlLCBTZXNzaW9uSUQgc2Vzc2lvbklELCBDdXN0
b21Qcm90b2NvbE1hbmFnZXIqKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtT
ZXNzaW9uKHR5cGUsIHNlc3Npb25JRCwgbnVsbHB0cikpOworfQorCitOZXR3b3JrU2Vzc2lvbiYg
TmV0d29ya1Nlc3Npb246OmRlZmF1bHRTZXNzaW9uKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOworICAgIHN0YXRpYyBOZXR3b3JrU2Vzc2lvbiogc2Vzc2lvbiA9ICZOZXR3b3JrU2Vz
c2lvbjo6Y3JlYXRlKE5ldHdvcmtTZXNzaW9uOjpUeXBlOjpOb3JtYWwsIFNlc3Npb25JRDo6ZGVm
YXVsdFNlc3Npb25JRCgpLCBudWxscHRyKS5sZWFrUmVmKCk7CisgICAgcmV0dXJuICpzZXNzaW9u
OworfQorCitOZXR3b3JrU3RvcmFnZVNlc3Npb24mIE5ldHdvcmtTZXNzaW9uOjpuZXR3b3JrU3Rv
cmFnZVNlc3Npb24oKSBjb25zdAoreworICAgIGF1dG8qIHN0b3JhZ2VTZXNzaW9uID0gTmV0d29y
a1N0b3JhZ2VTZXNzaW9uOjpzdG9yYWdlU2Vzc2lvbihtX3Nlc3Npb25JRCk7CisgICAgUkVMRUFT
RV9BU1NFUlQoc3RvcmFnZVNlc3Npb24pOworICAgIHJldHVybiAqc3RvcmFnZVNlc3Npb247Cit9
CisKK05ldHdvcmtTZXNzaW9uOjpOZXR3b3JrU2Vzc2lvbihUeXBlIHR5cGUsIFNlc3Npb25JRCBz
ZXNzaW9uSUQsIEN1c3RvbVByb3RvY29sTWFuYWdlciopCisgICAgOiBtX3Nlc3Npb25JRChzZXNz
aW9uSUQpCit7Cit9CisKK05ldHdvcmtTZXNzaW9uOjp+TmV0d29ya1Nlc3Npb24oKQoreworfQor
CitTb3VwU2Vzc2lvbiogTmV0d29ya1Nlc3Npb246OnNvdXBTZXNzaW9uKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbmV0d29ya1N0b3JhZ2VTZXNzaW9uKCkuc291cE5ldHdvcmtTZXNzaW9uKCkuc291
cFNlc3Npb24oKTsKK30KKwordm9pZCBOZXR3b3JrU2Vzc2lvbjo6aW52YWxpZGF0ZUFuZENhbmNl
bCgpCit7CisgICAgZm9yIChhdXRvKiB0YXNrIDogbV9kYXRhVGFza1NldCkKKyAgICAgICAgdGFz
ay0+aW52YWxpZGF0ZUFuZENhbmNlbCgpOworfQorCit2b2lkIE5ldHdvcmtTZXNzaW9uOjpjbGVh
ckNyZWRlbnRpYWxzKCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL1JlbW90ZU5ldHdvcmtpbmdDb250
ZXh0U291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL1JlbW90ZU5l
dHdvcmtpbmdDb250ZXh0U291cC5jcHAKaW5kZXggNmFlY2I3Zi4uOGZiNjRmYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9SZW1vdGVOZXR3b3JraW5nQ29u
dGV4dFNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL3NvdXAvUmVt
b3RlTmV0d29ya2luZ0NvbnRleHRTb3VwLmNwcApAQCAtMjgsNiArMjgsOCBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlbW90ZU5ldHdvcmtpbmdDb250ZXh0LmgiCiAKKyNpbmNs
dWRlICJOZXR3b3JrU2Vzc2lvbi5oIgorI2luY2x1ZGUgIlNlc3Npb25UcmFja2VyLmgiCiAjaW5j
bHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L05vdEltcGxlbWVudGVkLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUhhbmRsZS5oPgpA
QCAtNDUsMTMgKzQ3LDIxIEBAIGJvb2wgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmlzVmFsaWQo
KSBjb25zdAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFJlbW90ZU5ldHdvcmtpbmdDb250
ZXh0OjplbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKFNlc3Npb25JRCkKK3ZvaWQgUmVtb3Rl
TmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oU2Vzc2lvbklE
IHNlc3Npb25JRCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIEFTU0VSVChzZXNzaW9u
SUQuaXNFcGhlbWVyYWwoKSk7CisKKyAgICBpZiAoTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzdG9y
YWdlU2Vzc2lvbihzZXNzaW9uSUQpKQorICAgICAgICByZXR1cm47CisKKyAgICBOZXR3b3JrU3Rv
cmFnZVNlc3Npb246OmVuc3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oc2Vzc2lvbklELCBTdHJp
bmc6Om51bWJlcihzZXNzaW9uSUQuc2Vzc2lvbklEKCkpKTsKKyAgICBTZXNzaW9uVHJhY2tlcjo6
c2V0U2Vzc2lvbihzZXNzaW9uSUQsIE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUoTmV0d29ya1Nlc3Np
b246OlR5cGU6OkVwaGVtZXJhbCwgc2Vzc2lvbklELCBudWxscHRyKSk7CiB9CiAKIE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbiYgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OnN0b3JhZ2VTZXNzaW9uKCkg
Y29uc3QKIHsKKyAgICBpZiAoYXV0byBzZXNzaW9uID0gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpz
dG9yYWdlU2Vzc2lvbihtX3Nlc3Npb25JRCkpCisgICAgICAgIHJldHVybiAqc2Vzc2lvbjsKICAg
ICByZXR1cm4gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWZhdWx0U3RvcmFnZVNlc3Npb24oKTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCBmMTI1OTUxLi5iYWJmMmE3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtMTQsNyArMTQsOSBAQCBsaXN0KEFQUEVORCBXZWJL
aXQyX1NPVVJDRVMKIAogICAgIE5ldHdvcmtQcm9jZXNzL2VmbC9OZXR3b3JrUHJvY2Vzc01haW5F
ZmwuY3BwCiAKKyAgICBOZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAuY3Bw
CiAgICAgTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwCisgICAgTmV0
d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vzc2lvblNvdXAuY3BwCiAgICAgTmV0d29ya1Byb2Nl
c3Mvc291cC9SZW1vdGVOZXR3b3JraW5nQ29udGV4dFNvdXAuY3BwCiAKICAgICBQbGF0Zm9ybS9J
UEMvdW5peC9BdHRhY2htZW50VW5peC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXgg
YmVlYTAwZS4uNmZiZGEyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsu
Y21ha2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTM5LDggKzM5
LDEwIEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIE5ldHdvcmtQcm9jZXNzL2Nh
Y2hlL05ldHdvcmtDYWNoZURhdGFTb3VwLmNwcAogICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZUlPQ2hhbm5lbFNvdXAuY3BwCiAKKyAgICBOZXR3b3JrUHJvY2Vzcy9zb3VwL05l
dHdvcmtEYXRhVGFza1NvdXAuY3BwCiAgICAgTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJv
Y2Vzc01haW5Tb3VwLmNwcAogICAgIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NT
b3VwLmNwcAorICAgIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25Tb3VwLmNwcAog
ICAgIE5ldHdvcmtQcm9jZXNzL3NvdXAvUmVtb3RlTmV0d29ya2luZ0NvbnRleHRTb3VwLmNwcAog
CiAgICAgUGxhdGZvcm0vSVBDL2dsaWIvR1NvY2tldE1vbml0b3IuY3BwCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRpb25NYW5hZ2Vy
LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRpb25N
YW5hZ2VyLmgKaW5kZXggN2ZjMTYxNC4uNjM3MmNkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvU2hhcmVkL0F1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0aW9uTWFuYWdlci5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9BdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdGlvbk1hbmFnZXIu
aApAQCAtMjgsMTAgKzI4LDEwIEBACiAKICNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKICNp
bmNsdWRlICJOZXR3b3JrUHJvY2Vzc1N1cHBsZW1lbnQuaCIKLSNpbmNsdWRlICJOZXR3b3JrU2Vz
c2lvbi5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NTdXBwbGVtZW50LmgiCiAjaW5jbHVkZSA8V2Vi
Q29yZS9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDgsNiArNDgsMTQgQEAgY2xhc3MgRG93bmxvYWRJRDsK
IGNsYXNzIFBlbmRpbmdEb3dubG9hZDsKIGNsYXNzIFdlYkZyYW1lOwogCitlbnVtIGNsYXNzIEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb24geworICAgIFVzZUNyZWRlbnRpYWwsCisg
ICAgUGVyZm9ybURlZmF1bHRIYW5kbGluZywKKyAgICBDYW5jZWwsCisgICAgUmVqZWN0UHJvdGVj
dGlvblNwYWNlCit9OwordHlwZWRlZiBGdW5jdGlvbjx2b2lkKEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlRGlzcG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmKT4gQ2hhbGxlbmdlQ29t
cGxldGlvbkhhbmRsZXI7CisKIGNsYXNzIEF1dGhlbnRpY2F0aW9uTWFuYWdlciA6IHB1YmxpYyBX
ZWJQcm9jZXNzU3VwcGxlbWVudCwgcHVibGljIE5ldHdvcmtQcm9jZXNzU3VwcGxlbWVudCwgcHVi
bGljIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBdXRo
ZW50aWNhdGlvbk1hbmFnZXIpOwogcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9zb3VwL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQu
Y3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9zb3VwL1dlYkZy
YW1lTmV0d29ya2luZ0NvbnRleHQuY3BwCmluZGV4IDIwMWQ0YTguLjJmOTg3MWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvc291cC9XZWJGcmFt
ZU5ldHdvcmtpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L3NvdXAvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5jcHAKQEAgLTI3LDYg
KzI3LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJGcmFtZU5ldHdvcmtp
bmdDb250ZXh0LmgiCiAKKyNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5oIgogI2luY2x1ZGUgIlNl
c3Npb25UcmFja2VyLmgiCiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKICNpbmNsdWRlICJXZWJQYWdl
LmgiCkBAIC00MywxMSArNDQsMTMgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiB2b2lkIFdlYkZyYW1l
TmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oU2Vzc2lvbklE
IHNlc3Npb25JRCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChz
ZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSk7CiAKICAgICBpZiAoTmV0d29ya1N0b3JhZ2VTZXNzaW9u
OjpzdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpKQogICAgICAgICByZXR1cm47CiAKICAgICBOZXR3
b3JrU3RvcmFnZVNlc3Npb246OmVuc3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oc2Vzc2lvbklE
LCBTdHJpbmc6Om51bWJlcihzZXNzaW9uSUQuc2Vzc2lvbklEKCkpKTsKKyAgICBTZXNzaW9uVHJh
Y2tlcjo6c2V0U2Vzc2lvbihzZXNzaW9uSUQsIE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUoTmV0d29y
a1Nlc3Npb246OlR5cGU6OkVwaGVtZXJhbCwgc2Vzc2lvbklELCBudWxscHRyKSk7CiB9CiAKIHZv
aWQgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6c2V0Q29va2llQWNjZXB0UG9saWN5Rm9yQWxs
Q29udGV4dHMoSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAppbmRleCA4M2Q5Y2UzLi5lMWZlM2VmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNs
dWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NN
ZXNzYWdlcy5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5oIgorI2luY2x1
ZGUgIk5ldHdvcmtTZXNzaW9uLmgiCiAjaW5jbHVkZSAiUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25N
YW5hZ2VyLmgiCiAjaW5jbHVkZSAiU2Vzc2lvblRyYWNrZXIuaCIKICNpbmNsdWRlICJTdGF0aXN0
aWNzRGF0YS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvY29uZmlnLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9jb25maWcuaAppbmRleCAxZDkxZmJkLi5hOTdkZDRjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9jb25maWcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9jb25maWcuaApAQCAtNzUs
NyArNzUsNyBAQAogI2VuZGlmCiAjZW5kaWYKIAotI2lmIChQTEFURk9STShNQUMpICYmIF9fTUFD
X09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAwKSB8fCAoUExBVEZPUk0oSU9TKSAm
JiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDAwMDApCisjaWYgKFBMQVRG
T1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEyMDApIHx8
IChQTEFURk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEw
MDAwMCkgfHwgVVNFKFNPVVApCiAjaWZuZGVmIFVTRV9ORVRXT1JLX1NFU1NJT04KICNkZWZpbmUg
VVNFX05FVFdPUktfU0VTU0lPTiAxCiAjZW5kaWYK
</data>
<flag name="review"
          id="315180"
          type_id="1"
          status="+"
          setter="achristensen"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292152</attachid>
            <date>2016-10-19 23:00:08 -0700</date>
            <delta_ts>2016-10-19 23:00:08 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>wk2-soup-network-session.diff</filename>
            <type>text/plain</type>
            <size>86964</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktp
dDIvQ01ha2VMaXN0cy50eHQKaW5kZXggOWI0MzNkZS4uMWFjMTA2YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0
cy50eHQKQEAgLTIxNyw2ICsyMTcsNyBAQCBzZXQoV2ViS2l0Ml9TT1VSQ0VTCiAgICAgTmV0d29y
a1Byb2Nlc3MvRG93bmxvYWRzL0Jsb2JEb3dubG9hZENsaWVudC5jcHAKICAgICBOZXR3b3JrUHJv
Y2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuY3BwCiAgICAgTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRz
L0Rvd25sb2FkTWFuYWdlci5jcHAKKyAgICBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvUGVuZGlu
Z0Rvd25sb2FkLmNwcAogCiAgICAgUGxhdGZvcm0vTG9nZ2luZy5jcHAKICAgICBQbGF0Zm9ybS9N
b2R1bGUuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMjYxYTY4ZS4uOWVlMTFlMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDExNyBAQAorMjAxNi0xMC0xOSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lh
QGlnYWxpYS5jb20+CisKKyAgICAgICAgW1NPVVBdIEFkZCBOZXR3b3JrU2Vzc2lvbiBpbXBsZW1l
bnRhdGlvbiBhbmQgc3dpdGNoIHRvIHVzZSBpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYzNTk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleCBD
aHJpc3RlbnNlbi4KKworICAgICAgICBCYXNpY2FsbHkgbW92ZSB0aGUgUmVzb3VyY2VIYW5kbGUg
aW1wbGVtZW50YXRpb24gdG8gdGhlIG5ldHdvcmsgcHJvY2VzcywgYnV0IG1vZGVybml6ZWQsIGNs
ZWFuZWQgdXAsIGFuZCBhZGFwdGVkCisgICAgICAgIHRvIHRoZSBOZXR3b3JrU2Vzc2lvbiBtb2Rl
bC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OiBBZGQgbmV3IGZpbGVzIHRvIGNvbXBpbGF0
aW9uLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OkRvd25sb2FkOjpEb3dubG9hZCk6IFVzZSB0aGUgc2FtZSBjb2RlIGZv
ciBhbGwgcG9ydHMgdXNpbmcgTmV0d29ya1Nlc3Npb24gYW5kIGFkZCBtaXNzaW5nCisgICAgICAg
IGluaXRpYWxpemF0aW9uIG9mIG1fc2Vzc2lvbklELgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L0Rvd25sb2Fkcy9Eb3dubG9hZC5oOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZDo6RG93bmxv
YWQpOiBEZWZpbmUgUGxhdGZvcm1Eb3dubG9hZFRhc2tSZWYgb24gZXZlcnkgcGxhdGZvcm0gdG8g
bWFrZSB0aGUgY29uc3RydWN0b3IgY29tbW9uIHRvCisgICAgICAgIGFsbCBwb3J0cyB1c2luZyBO
ZXR3b3JrU2Vzc2lvbi4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvc291cC9E
b3dubG9hZFNvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZDo6Y2FuY2VsTmV0d29y
a0xvYWQpOgorICAgICAgICAoV2ViS2l0OjpEb3dubG9hZDo6cGxhdGZvcm1EaWRGaW5pc2gpOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5oOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrRGF0YVRhc2s6OnBlbmRpbmdEb3dubG9hZElEKTogTWFrZSBjb25zdC4KKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpwZW5kaW5nRG93bmxvYWQpOiBEaXR0by4K
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpwZW5kaW5nRG93bmxvYWRMb2NhdGlv
bik6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OmlzRG93bmxvYWQp
OiBIZWxwZXIgdG8gY2hlY2sgaWYgdGhlIHRhc2sgaXMgYSBkb3dubG9hZC4KKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtM
b2FkOjpkaWRSZWNlaXZlUmVzcG9uc2VOZXR3b3JrU2Vzc2lvbik6IFVzZSBOZXR3b3JrRGF0YVRh
c2s6OmlzRG93bmxvYWQoKS4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
cy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpOZXR3b3JrUHJvY2Vzcyk6
IE5ldHdvcmtTZXNzaW9uOjpzZXRDdXN0b21Qcm90b2NvbE1hbmFnZXIoKSBpcyBDb2NvYSBvbmx5
LgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmg6CisgICAgICAgICog
TmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Nlc3Npb246Om5ldHdvcmtTdG9yYWdlU2Vzc2lvbik6IE1ha2UgY29uc3Qu
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6TmV0d29ya0RhdGFUYXNr
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjp+TmV0d29ya0RhdGFUYXNrKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpzY2hlZHVsZUZhaWx1cmUpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OmZhaWx1cmVUaW1lckZpcmVkKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpzdWdnZXN0ZWRGaWxlbmFtZSk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6c2V0U3VnZ2VzdGVkRmlsZW5hbWUpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OnNldFBlbmRpbmdEb3dubG9hZExvY2F0aW9uKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjphbGxvd3NTcGVjaWZpY0hUVFBTQ2Vy
dGlmaWNhdGVGb3JIb3N0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpjcmVh
dGVSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpjbGVhclJlcXVl
c3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OnJlc3VtZSk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6c3VzcGVuZCk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtEYXRhVGFzazo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNr
OjppbnZhbGlkYXRlQW5kQ2FuY2VsKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNr
OjpzdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6dGltZW91dEZpcmVk
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpzdGFydFRpbWVvdXQpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OnN0b3BUaW1lb3V0KToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0RhdGFUYXNrOjpzZW5kUmVxdWVzdENhbGxiYWNrKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0RhdGFUYXNrOjpkaWRTZW5kUmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtEYXRhVGFzazo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0RhdGFUYXNrOjp0bHNFcnJvcnNDaGFuZ2VkQ2FsbGJhY2spOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrRGF0YVRhc2s6OnRsc0Vycm9yc0NoYW5nZWQpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrRGF0YVRhc2s6OmFwcGx5QXV0aGVudGljYXRpb25Ub1JlcXVlc3QpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OmF1dGhlbnRpY2F0ZUNhbGxiYWNrKToKKyAgICAg
ICAgKFdlYktpdDo6aXNBdXRoZW50aWNhdGlvbkZhaWx1cmVTdGF0dXNDb2RlKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjphdXRoZW50aWNhdGUpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrRGF0YVRhc2s6OmNvbnRpbnVlQXV0aGVudGljYXRlKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0RhdGFUYXNrOjpza2lwSW5wdXRTdHJlYW1Gb3JSZWRpcmVjdGlvbkNhbGxiYWNr
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpza2lwSW5wdXRTdHJlYW1Gb3JS
ZWRpcmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6ZGlkRmluaXNo
U2tpcElucHV0U3RyZWFtRm9yUmVkaXJlY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpzaG91bGRS
ZWRpcmVjdEFzR0VUKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpzaG91bGRT
dGFydEhUVFBSZWRpcmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6
Y29udGludWVIVFRQUmVkaXJlY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRh
c2s6OnJlYWRDYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6cmVh
ZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6ZGlkUmVhZCk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6ZGlkRmluaXNoUmVhZCk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtEYXRhVGFzazo6cmVxdWVzdE5leHRQYXJ0Q2FsbGJhY2spOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OnJlcXVlc3ROZXh0UGFydCk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtEYXRhVGFzazo6ZGlkUmVxdWVzdE5leHRQYXJ0KToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0RhdGFUYXNrOjpkaWRGaW5pc2hSZXF1ZXN0TmV4dFBhcnQpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OmdvdEhlYWRlcnNDYWxsYmFjayk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6ZGlkR2V0SGVhZGVycyk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtEYXRhVGFzazo6d3JvdGVCb2R5RGF0YUNhbGxiYWNrKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0RhdGFUYXNrOjpkaWRXcml0ZUJvZHlEYXRhKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0RhdGFUYXNrOjpkb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRh
VGFzazo6d3JpdGVEb3dubG9hZENhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Rh
dGFUYXNrOjp3cml0ZURvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNr
OjpkaWRXcml0ZURvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpk
aWRGaW5pc2hEb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6ZGlk
RmFpbERvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpjbGVhbkRv
d25sb2FkRmlsZXMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OmRpZEZhaWwp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6Om5ldHdvcmtFdmVudENhbGxiYWNr
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrOjpuZXR3b3JrRXZlbnQpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OnN0YXJ0aW5nQ2FsbGJhY2spOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OnJlcXVlc3RTdGFydGVkQ2FsbGJhY2spOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OmRpZFN0YXJ0UmVxdWVzdCk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFzazo6cmVzdGFydGVkQ2FsbGJhY2spOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrRGF0YVRhc2s6OmRpZFJlc3RhcnQpOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25Tb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Nlc3Npb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjpk
ZWZhdWx0U2Vzc2lvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uOjpuZXR3b3Jr
U3RvcmFnZVNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbjo6TmV0d29y
a1Nlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbjo6fk5ldHdvcmtTZXNz
aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246OnNvdXBTZXNzaW9uKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb246OmludmFsaWRhdGVBbmRDYW5jZWwpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvbjo6Y2xlYXJDcmVkZW50aWFscyk6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3Mvc291cC9SZW1vdGVOZXR3b3JraW5nQ29udGV4dFNvdXAuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVOZXR3b3JraW5nQ29udGV4dDo6ZW5zdXJlUHJpdmF0ZUJy
b3dzaW5nU2Vzc2lvbik6IEFkZCBpbXBsZW1lbnRhdGlvbiBtYXRjaGluZworICAgICAgICBXZWJG
cmFtZU5ldHdvcmtpbmdDb250ZXh0OjplbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKCkuCisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZU5ldHdvcmtpbmdDb250ZXh0OjpzdG9yYWdlU2Vzc2lvbik6
IERvIG5vdCBhbHdheXMgcmV0dXJuIHRoZSBkZWZhdWx0IHNlc3Npb24gaWYgdGhlIGdpdmVuIG9u
ZSBpcworICAgICAgICBpbiB0aGUgZ2xvYmFsIG1hcC4KKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5j
bWFrZTogQWQgbmV3IGZpbGVzIHRvIGNvbXBpbGF0aW9uLgorICAgICAgICAqIFBsYXRmb3JtR1RL
LmNtYWtlOiBEaXR0by4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3NvdXAv
V2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1l
TmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24pOiBBbHNvIGNy
ZWF0ZSBhIE5ldHdvcmtTZXNzaW9uLgorICAgICAgICAqIGNvbmZpZy5oOiBFbmFibGUgTmV0d29y
a1Nlc3Npb24gdW5jb25kaXRpb25hbGx5IGZvciBTb3VwIGJhc2VkIHBvcnRzLgorCiAyMDE2LTEw
LTE5ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgW1dLMl0gRXhw
b3NlIHN1Z2dlc3RlZCBmaWxlbmFtZSB2aWEgV0tCdW5kbGVIaXRUZXN0UmVzdWx0IEFQSQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2Fk
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZC5j
cHAKaW5kZXggOWJlMjJlZi4uNjQ5NDhlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAj
aW5jbHVkZSAiRG93bmxvYWRNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiRG93bmxvYWRQcm94eU1lc3Nh
Z2VzLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk5ldHdvcmtEYXRhVGFzay5o
IgogI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1l
bnRDb2RlcnMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CkBAIC00Mywx
MSArNDQsMTIgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewogCi0jaWYgVVNFKE5FVFdPUktfU0VTU0lPTikgJiYgUExBVEZPUk0oQ09DT0EpCi1Eb3dubG9h
ZDo6RG93bmxvYWQoRG93bmxvYWRNYW5hZ2VyJiBkb3dubG9hZE1hbmFnZXIsIERvd25sb2FkSUQg
ZG93bmxvYWRJRCwgTlNVUkxTZXNzaW9uRG93bmxvYWRUYXNrKiBkb3dubG9hZCwgY29uc3QgV2Vi
Q29yZTo6U2Vzc2lvbklEJiBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkTmFtZSkK
KyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQorRG93bmxvYWQ6OkRvd25sb2FkKERvd25sb2FkTWFu
YWdlciYgZG93bmxvYWRNYW5hZ2VyLCBEb3dubG9hZElEIGRvd25sb2FkSUQsIFBsYXRmb3JtRG93
bmxvYWRUYXNrUmVmIGRvd25sb2FkLCBjb25zdCBXZWJDb3JlOjpTZXNzaW9uSUQmIHNlc3Npb25J
RCwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWROYW1lKQogICAgIDogbV9kb3dubG9hZE1hbmFnZXIo
ZG93bmxvYWRNYW5hZ2VyKQogICAgICwgbV9kb3dubG9hZElEKGRvd25sb2FkSUQpCiAgICAgLCBt
X2Rvd25sb2FkKGRvd25sb2FkKQorICAgICwgbV9zZXNzaW9uSUQoc2Vzc2lvbklEKQogICAgICwg
bV9zdWdnZXN0ZWROYW1lKHN1Z2dlc3RlZE5hbWUpCiB7CiAgICAgQVNTRVJUKG1fZG93bmxvYWRJ
RC5kb3dubG9hZElEKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvRG93bmxvYWRzL0Rvd25sb2FkLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9E
b3dubG9hZHMvRG93bmxvYWQuaAppbmRleCA3OTg5ZjdlLi5hZmNkOWRjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWQuaApAQCAtMzUs
MTcgKzM1LDI0IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9TZXNzaW9uSUQuaD4KICNpbmNsdWRlIDxt
ZW1vcnk+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0KLSNpZiBQTEFURk9STShDT0NP
QSkKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAKICNpZiBVU0UoTkVUV09SS19TRVNTSU9O
KQorI2lmIFBMQVRGT1JNKENPQ09BKQogT0JKQ19DTEFTUyBOU1VSTFNlc3Npb25Eb3dubG9hZFRh
c2s7Ci0jZWxzZQordHlwZWRlZiBOU1VSTFNlc3Npb25Eb3dubG9hZFRhc2sqIFBsYXRmb3JtRG93
bmxvYWRUYXNrUmVmOworI2VsaWYgVVNFKFNPVVApCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNz
IE5ldHdvcmtEYXRhVGFzazsKK30KK3R5cGVkZWYgV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2sqIFBs
YXRmb3JtRG93bmxvYWRUYXNrUmVmOworI2VuZGlmCisjZWxzZSAvLyBVU0UoTkVUV09SS19TRVNT
SU9OKQorI2lmIFBMQVRGT1JNKENPQ09BKQogT0JKQ19DTEFTUyBOU1VSTERvd25sb2FkOwogT0JK
Q19DTEFTUyBXS0Rvd25sb2FkQXNEZWxlZ2F0ZTsKICNlbmRpZgotI2VuZGlmCisjZW5kaWYgLy8g
VVNFKE5FVFdPUktfU0VTU0lPTikKIAogbmFtZXNwYWNlIElQQyB7CiBjbGFzcyBEYXRhUmVmZXJl
bmNlOwpAQCAtNjgsOCArNzUsOCBAQCBjbGFzcyBXZWJQYWdlOwogY2xhc3MgRG93bmxvYWQgOiBw
dWJsaWMgSVBDOjpNZXNzYWdlU2VuZGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEb3du
bG9hZCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotI2lmIFVTRShORVRXT1JL
X1NFU1NJT04pICYmIFBMQVRGT1JNKENPQ09BKQotICAgIERvd25sb2FkKERvd25sb2FkTWFuYWdl
ciYsIERvd25sb2FkSUQsIE5TVVJMU2Vzc2lvbkRvd25sb2FkVGFzayosIGNvbnN0IFdlYkNvcmU6
OlNlc3Npb25JRCYgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lID0g
eyB9KTsKKyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQorICAgIERvd25sb2FkKERvd25sb2FkTWFu
YWdlciYsIERvd25sb2FkSUQsIFBsYXRmb3JtRG93bmxvYWRUYXNrUmVmLCBjb25zdCBXZWJDb3Jl
OjpTZXNzaW9uSUQmIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSA9
IHsgfSk7CiAjZW5kaWYKICAgICBEb3dubG9hZChEb3dubG9hZE1hbmFnZXImLCBEb3dubG9hZElE
LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdHJpbmcmIHN1Z2dlc3Rl
ZEZpbGVuYW1lID0geyB9KTsKIApAQCAtMTI2LDE1ICsxMzMsMTkgQEAgcHJpdmF0ZToKIAogICAg
IFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPiBtX3NhbmRib3hFeHRlbnNpb247CiAKLSNpZiBQTEFU
Rk9STShDT0NPQSkKICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQorI2lmIFBMQVRGT1JNKENPQ09B
KQogICAgIFJldGFpblB0cjxOU1VSTFNlc3Npb25Eb3dubG9hZFRhc2s+IG1fZG93bmxvYWQ7Cisj
ZWxpZiBVU0UoU09VUCkKKyAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrPiBtX2Rvd25sb2FkOwor
I2VuZGlmCiAgICAgV2ViQ29yZTo6U2Vzc2lvbklEIG1fc2Vzc2lvbklEOwotI2Vsc2UKKyNlbHNl
IC8vIFVTRShORVRXT1JLX1NFU1NJT04pCisjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgUmV0YWlu
UHRyPE5TVVJMRG93bmxvYWQ+IG1fbnNVUkxEb3dubG9hZDsKICAgICBSZXRhaW5QdHI8V0tEb3du
bG9hZEFzRGVsZWdhdGU+IG1fZGVsZWdhdGU7CiAjZW5kaWYKLSNlbmRpZgorI2VuZGlmIC8vIFVT
RShORVRXT1JLX1NFU1NJT04pCiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlJlc291cmNl
SGFuZGxlQ2xpZW50PiBtX2Rvd25sb2FkQ2xpZW50OwogICAgIFJlZlB0cjxXZWJDb3JlOjpSZXNv
dXJjZUhhbmRsZT4gbV9yZXNvdXJjZUhhbmRsZTsKICAgICBTdHJpbmcgbV9zdWdnZXN0ZWROYW1l
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL3Nv
dXAvRG93bmxvYWRTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25s
b2Fkcy9zb3VwL0Rvd25sb2FkU291cC5jcHAKaW5kZXggNjgwNzkxNy4uODJlOGM1YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93bmxvYWRzL3NvdXAvRG93bmxv
YWRTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMv
c291cC9Eb3dubG9hZFNvdXAuY3BwCkBAIC0yOCwyMDQgKzI4LDEzIEBACiAjaW5jbHVkZSAiRG93
bmxvYWQuaCIKIAogI2luY2x1ZGUgIkRhdGFSZWZlcmVuY2UuaCIKLSNpbmNsdWRlICJEb3dubG9h
ZFNvdXBFcnJvcnMuaCIKKyNpbmNsdWRlICJOZXR3b3JrRGF0YVRhc2suaCIKICNpbmNsdWRlIDxX
ZWJDb3JlL05vdEltcGxlbWVudGVkLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUhhbmRs
ZUludGVybmFsLmg+Ci0jaW5jbHVkZSA8Z2lvL2dpby5oPgotI2luY2x1ZGUgPHd0Zi9SdW5Mb29w
Lmg+Ci0jaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dV
bmlxdWVQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNpZiBQTEFURk9S
TShHVEspCi0jaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KLSNlbmRpZgogCiB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIERvd25sb2FkQ2xp
ZW50IGZpbmFsIDogcHVibGljIFJlc291cmNlSGFuZGxlQ2xpZW50IHsKLSAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShEb3dubG9hZENsaWVudCk7Ci1wdWJsaWM6Ci0gICAgRG93bmxvYWRDbGllbnQo
RG93bmxvYWQmIGRvd25sb2FkKQotICAgICAgICA6IG1fZG93bmxvYWQoZG93bmxvYWQpCi0gICAg
ICAgICwgbV9oYW5kbGVSZXNwb25zZUxhdGVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJkRvd25s
b2FkQ2xpZW50OjpoYW5kbGVSZXNwb25zZSkKLSAgICAgICAgLCBtX2FsbG93T3ZlcndyaXRlKGZh
bHNlKQotICAgIHsKLSAgICB9Ci0KLSAgICB+RG93bmxvYWRDbGllbnQoKQotICAgIHsKLSAgICB9
Ci0KLSAgICB2b2lkIGRlbGV0ZUZpbGVzSWZOZWVkZWQoKQotICAgIHsKLSAgICAgICAgaWYgKG1f
ZGVzdGluYXRpb25GaWxlKQotICAgICAgICAgICAgZ19maWxlX2RlbGV0ZShtX2Rlc3RpbmF0aW9u
RmlsZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7Ci0KLSAgICAgICAgaWYgKG1faW50ZXJtZWRp
YXRlRmlsZSkgewotICAgICAgICAgICAgQVNTRVJUKG1fZGVzdGluYXRpb25GaWxlKTsKLSAgICAg
ICAgICAgIGdfZmlsZV9kZWxldGUobV9pbnRlcm1lZGlhdGVGaWxlLmdldCgpLCBudWxscHRyLCBu
dWxscHRyKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZvaWQgZG93bmxvYWRGYWlsZWQoY29u
c3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCi0gICAgewotICAgICAgICBkZWxldGVGaWxlc0lmTmVl
ZGVkKCk7Ci0gICAgICAgIG1fZG93bmxvYWQuZGlkRmFpbChlcnJvciwgSVBDOjpEYXRhUmVmZXJl
bmNlKCkpOwotICAgIH0KLQotICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlSGFu
ZGxlKiwgUmVzb3VyY2VSZXNwb25zZSYmIHJlc3BvbnNlKSBvdmVycmlkZQotICAgIHsKLSAgICAg
ICAgbV9yZXNwb25zZSA9IFdURk1vdmUocmVzcG9uc2UpOwotICAgICAgICBtX2Rvd25sb2FkLmRp
ZFJlY2VpdmVSZXNwb25zZShtX3Jlc3BvbnNlKTsKLQotICAgICAgICBpZiAobV9yZXNwb25zZS5o
dHRwU3RhdHVzQ29kZSgpID49IDQwMCkgewotICAgICAgICAgICAgZG93bmxvYWRGYWlsZWQocGxh
dGZvcm1Eb3dubG9hZE5ldHdvcmtFcnJvcihtX3Jlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCksIG1f
cmVzcG9uc2UudXJsKCksIG1fcmVzcG9uc2UuaHR0cFN0YXR1c1RleHQoKSkpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nIHN1Z2dlc3RlZEZpbGVuYW1l
ID0gbV9yZXNwb25zZS5zdWdnZXN0ZWRGaWxlbmFtZSgpOwotICAgICAgICBpZiAoc3VnZ2VzdGVk
RmlsZW5hbWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBVUkwgdXJsID0gbV9yZXNwb25zZS51
cmwoKTsKLSAgICAgICAgICAgIHVybC5zZXRRdWVyeShTdHJpbmcoKSk7Ci0gICAgICAgICAgICB1
cmwucmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVyKCk7Ci0gICAgICAgICAgICBzdWdnZXN0ZWRGaWxl
bmFtZSA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyh1cmwubGFzdFBhdGhDb21wb25lbnQoKSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmcgZGVzdGluYXRpb25VUkkgPSBtX2Rvd25sb2Fk
LmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKHN1Z2dlc3RlZEZpbGVuYW1l
LCBtX2FsbG93T3ZlcndyaXRlKTsKLSAgICAgICAgaWYgKGRlc3RpbmF0aW9uVVJJLmlzRW1wdHko
KSkgewotI2lmIFBMQVRGT1JNKEdUSykKLSAgICAgICAgICAgIEdVbmlxdWVQdHI8Y2hhcj4gYnVm
ZmVyKGdfc3RyZHVwX3ByaW50ZihfKCJDYW5ub3QgZGV0ZXJtaW5lIGRlc3RpbmF0aW9uIFVSSSBm
b3IgZG93bmxvYWQgd2l0aCBzdWdnZXN0ZWQgZmlsZW5hbWUgJXMiKSwgc3VnZ2VzdGVkRmlsZW5h
bWUudXRmOCgpLmRhdGEoKSkpOwotICAgICAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFN0
cmluZzo6ZnJvbVVURjgoYnVmZmVyLmdldCgpKTsKLSNlbHNlCi0gICAgICAgICAgICBTdHJpbmcg
ZXJyb3JNZXNzYWdlID0gbWFrZVN0cmluZygiQ2Fubm90IGRldGVybWluZSBkZXN0aW5hdGlvbiBV
UkkgZm9yIGRvd25sb2FkIHdpdGggc3VnZ2VzdGVkIGZpbGVuYW1lICIsIHN1Z2dlc3RlZEZpbGVu
YW1lKTsKLSNlbmRpZgotICAgICAgICAgICAgZG93bmxvYWRGYWlsZWQocGxhdGZvcm1Eb3dubG9h
ZERlc3RpbmF0aW9uRXJyb3IobV9yZXNwb25zZSwgZXJyb3JNZXNzYWdlKSk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBtX2Rlc3RpbmF0aW9uRmlsZSA9IGFkb3B0
R1JlZihnX2ZpbGVfbmV3X2Zvcl91cmkoZGVzdGluYXRpb25VUkkudXRmOCgpLmRhdGEoKSkpOwot
ICAgICAgICBHUmVmUHRyPEdGaWxlT3V0cHV0U3RyZWFtPiBvdXRwdXRTdHJlYW07Ci0gICAgICAg
IEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKLSAgICAgICAgaWYgKG1fYWxsb3dPdmVyd3Jp
dGUpCi0gICAgICAgICAgICBvdXRwdXRTdHJlYW0gPSBhZG9wdEdSZWYoZ19maWxlX3JlcGxhY2Uo
bV9kZXN0aW5hdGlvbkZpbGUuZ2V0KCksIG51bGxwdHIsIEZBTFNFLCBHX0ZJTEVfQ1JFQVRFX05P
TkUsIG51bGxwdHIsICZlcnJvci5vdXRQdHIoKSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBvdXRwdXRTdHJlYW0gPSBhZG9wdEdSZWYoZ19maWxlX2NyZWF0ZShtX2Rlc3RpbmF0aW9uRmls
ZS5nZXQoKSwgR19GSUxFX0NSRUFURV9OT05FLCBudWxscHRyLCAmZXJyb3Iub3V0UHRyKCkpKTsK
LSAgICAgICAgaWYgKCFvdXRwdXRTdHJlYW0pIHsKLSAgICAgICAgICAgIG1fZGVzdGluYXRpb25G
aWxlLmNsZWFyKCk7Ci0gICAgICAgICAgICBkb3dubG9hZEZhaWxlZChwbGF0Zm9ybURvd25sb2Fk
RGVzdGluYXRpb25FcnJvcihtX3Jlc3BvbnNlLCBlcnJvci0+bWVzc2FnZSkpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nIGludGVybWVkaWF0ZVVSSSA9
IGRlc3RpbmF0aW9uVVJJICsgIi53a2Rvd25sb2FkIjsKLSAgICAgICAgbV9pbnRlcm1lZGlhdGVG
aWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3VyaShpbnRlcm1lZGlhdGVVUkkudXRmOCgp
LmRhdGEoKSkpOwotICAgICAgICBtX291dHB1dFN0cmVhbSA9IGFkb3B0R1JlZihnX2ZpbGVfcmVw
bGFjZShtX2ludGVybWVkaWF0ZUZpbGUuZ2V0KCksIDAsIFRSVUUsIEdfRklMRV9DUkVBVEVfTk9O
RSwgMCwgJmVycm9yLm91dFB0cigpKSk7Ci0gICAgICAgIGlmICghbV9vdXRwdXRTdHJlYW0pIHsK
LSAgICAgICAgICAgIGRvd25sb2FkRmFpbGVkKHBsYXRmb3JtRG93bmxvYWREZXN0aW5hdGlvbkVy
cm9yKG1fcmVzcG9uc2UsIGVycm9yLT5tZXNzYWdlKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLQotICAgICAgICBtX2Rvd25sb2FkLmRpZENyZWF0ZURlc3RpbmF0aW9uKGRlc3Rp
bmF0aW9uVVJJKTsKLSAgICB9Ci0KLSAgICB2b2lkIGRpZFJlY2VpdmVEYXRhKFJlc291cmNlSGFu
ZGxlKiwgY29uc3QgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoLCBpbnQgLyplbmNvZGVkRGF0
YUxlbmd0aCovKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgaWYgKG1faGFuZGxlUmVzcG9uc2VM
YXRlci5pc0FjdGl2ZSgpKSB7Ci0gICAgICAgICAgICBtX2hhbmRsZVJlc3BvbnNlTGF0ZXIuc3Rv
cCgpOwotICAgICAgICAgICAgaGFuZGxlUmVzcG9uc2UoKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGdzaXplIGJ5dGVzV3JpdHRlbjsKLSAgICAgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9y
OwotICAgICAgICBnX291dHB1dF9zdHJlYW1fd3JpdGVfYWxsKEdfT1VUUFVUX1NUUkVBTShtX291
dHB1dFN0cmVhbS5nZXQoKSksIGRhdGEsIGxlbmd0aCwgJmJ5dGVzV3JpdHRlbiwgMCwgJmVycm9y
Lm91dFB0cigpKTsKLSAgICAgICAgaWYgKGVycm9yKSB7Ci0gICAgICAgICAgICBkb3dubG9hZEZh
aWxlZChwbGF0Zm9ybURvd25sb2FkRGVzdGluYXRpb25FcnJvcihtX3Jlc3BvbnNlLCBlcnJvci0+
bWVzc2FnZSkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG1fZG93
bmxvYWQuZGlkUmVjZWl2ZURhdGEoYnl0ZXNXcml0dGVuKTsKLSAgICB9Ci0KLSAgICB2b2lkIGRp
ZEZpbmlzaExvYWRpbmcoUmVzb3VyY2VIYW5kbGUqLCBkb3VibGUpIG92ZXJyaWRlCi0gICAgewot
ICAgICAgICBtX291dHB1dFN0cmVhbSA9IG51bGxwdHI7Ci0KLSAgICAgICAgQVNTRVJUKG1fZGVz
dGluYXRpb25GaWxlKTsKLSAgICAgICAgQVNTRVJUKG1faW50ZXJtZWRpYXRlRmlsZSk7Ci0gICAg
ICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKLSAgICAgICAgaWYgKCFnX2ZpbGVfbW92
ZShtX2ludGVybWVkaWF0ZUZpbGUuZ2V0KCksIG1fZGVzdGluYXRpb25GaWxlLmdldCgpLCBHX0ZJ
TEVfQ09QWV9PVkVSV1JJVEUsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsICZlcnJvci5vdXRQ
dHIoKSkpIHsKLSAgICAgICAgICAgIGRvd25sb2FkRmFpbGVkKHBsYXRmb3JtRG93bmxvYWREZXN0
aW5hdGlvbkVycm9yKG1fcmVzcG9uc2UsIGVycm9yLT5tZXNzYWdlKSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBHUmVmUHRyPEdGaWxlSW5mbz4gaW5mbyA9IGFk
b3B0R1JlZihnX2ZpbGVfaW5mb19uZXcoKSk7Ci0gICAgICAgIENTdHJpbmcgdXJpID0gbV9yZXNw
b25zZS51cmwoKS5zdHJpbmcoKS51dGY4KCk7Ci0gICAgICAgIGdfZmlsZV9pbmZvX3NldF9hdHRy
aWJ1dGVfc3RyaW5nKGluZm8uZ2V0KCksICJtZXRhZGF0YTo6ZG93bmxvYWQtdXJpIiwgdXJpLmRh
dGEoKSk7Ci0gICAgICAgIGdfZmlsZV9pbmZvX3NldF9hdHRyaWJ1dGVfc3RyaW5nKGluZm8uZ2V0
KCksICJ4YXR0cjo6eGRnLm9yaWdpbi51cmwiLCB1cmkuZGF0YSgpKTsKLSAgICAgICAgZ19maWxl
X3NldF9hdHRyaWJ1dGVzX2FzeW5jKG1fZGVzdGluYXRpb25GaWxlLmdldCgpLCBpbmZvLmdldCgp
LCBHX0ZJTEVfUVVFUllfSU5GT19OT05FLCBHX1BSSU9SSVRZX0RFRkFVTFQsIG51bGxwdHIsIG51
bGxwdHIsIG51bGxwdHIpOwotCi0gICAgICAgIG1fZG93bmxvYWQuZGlkRmluaXNoKCk7Ci0gICAg
fQotCi0gICAgdm9pZCBkaWRGYWlsKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VFcnJv
ciYgZXJyb3IpIG92ZXJyaWRlCi0gICAgewotICAgICAgICBkb3dubG9hZEZhaWxlZChwbGF0Zm9y
bURvd25sb2FkTmV0d29ya0Vycm9yKGVycm9yLmVycm9yQ29kZSgpLCBlcnJvci5mYWlsaW5nVVJM
KCksIGVycm9yLmxvY2FsaXplZERlc2NyaXB0aW9uKCkpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNh
bmNlbChSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQotICAgIHsKLSAgICAgICAgaGFuZGxlLT5jYW5j
ZWwoKTsKLSAgICAgICAgZGVsZXRlRmlsZXNJZk5lZWRlZCgpOwotICAgICAgICBtX2Rvd25sb2Fk
LmRpZENhbmNlbChJUEM6OkRhdGFSZWZlcmVuY2UoKSk7Ci0gICAgfQotCi0gICAgdm9pZCBoYW5k
bGVSZXNwb25zZSgpCi0gICAgewotICAgICAgICBkaWRSZWNlaXZlUmVzcG9uc2UobnVsbHB0ciwg
V1RGTW92ZShtX2RlbGF5ZWRSZXNwb25zZSkpOwotICAgIH0KLQotICAgIHZvaWQgaGFuZGxlUmVz
cG9uc2VMYXRlcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVChtX3Jlc3BvbnNlLmlzTnVsbCgpKTsKLSAgICAgICAgQVNTRVJUKCFtX2hhbmRs
ZVJlc3BvbnNlTGF0ZXIuaXNBY3RpdmUoKSk7Ci0KLSAgICAgICAgbV9kZWxheWVkUmVzcG9uc2Ug
PSByZXNwb25zZTsKLQotICAgICAgICAvLyBDYWxsIGRpZFJlY2VpdmVSZXNwb25zZSBpbiBhbiBp
ZGxlIHRvIG1ha2Ugc3VyZSB0aGUgZG93bmxvYWQgaXMgYWRkZWQKLSAgICAgICAgLy8gdG8gdGhl
IERvd25sb2FkTWFuYWdlciBkb3dubG9hZHMgbWFwLgotICAgICAgICBtX2hhbmRsZVJlc3BvbnNl
TGF0ZXIuc3RhcnRPbmVTaG90KDApOwotICAgIH0KLQotICAgIERvd25sb2FkJiBtX2Rvd25sb2Fk
OwotICAgIEdSZWZQdHI8R0ZpbGVPdXRwdXRTdHJlYW0+IG1fb3V0cHV0U3RyZWFtOwotICAgIFJl
c291cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsKLSAgICBHUmVmUHRyPEdGaWxlPiBtX2Rlc3RpbmF0
aW9uRmlsZTsKLSAgICBHUmVmUHRyPEdGaWxlPiBtX2ludGVybWVkaWF0ZUZpbGU7Ci0gICAgUmVz
b3VyY2VSZXNwb25zZSBtX2RlbGF5ZWRSZXNwb25zZTsKLSAgICBSdW5Mb29wOjpUaW1lcjxEb3du
bG9hZENsaWVudD4gbV9oYW5kbGVSZXNwb25zZUxhdGVyOwotICAgIGJvb2wgbV9hbGxvd092ZXJ3
cml0ZTsKLX07Ci0KLXZvaWQgRG93bmxvYWQ6OnN0YXJ0TmV0d29ya0xvYWQoKQotewotICAgIEFT
U0VSVCghbV9kb3dubG9hZENsaWVudCk7Ci0gICAgQVNTRVJUKCFtX3Jlc291cmNlSGFuZGxlKTsK
LSAgICBtX2Rvd25sb2FkQ2xpZW50ID0gc3RkOjptYWtlX3VuaXF1ZTxEb3dubG9hZENsaWVudD4o
KnRoaXMpOwotICAgIG1fcmVzb3VyY2VIYW5kbGUgPSBSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlKDAs
IG1fcmVxdWVzdCwgbV9kb3dubG9hZENsaWVudC5nZXQoKSwgZmFsc2UsIHRydWUpOwotICAgIGRp
ZFN0YXJ0KCk7Ci19Ci0KLXZvaWQgRG93bmxvYWQ6OnN0YXJ0TmV0d29ya0xvYWRXaXRoSGFuZGxl
KFJlc291cmNlSGFuZGxlKiByZXNvdXJjZUhhbmRsZSwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYg
cmVzcG9uc2UpCi17Ci0gICAgQVNTRVJUKCFtX2Rvd25sb2FkQ2xpZW50KTsKLSAgICBBU1NFUlQo
IW1fcmVzb3VyY2VIYW5kbGUpOwotICAgIG1fZG93bmxvYWRDbGllbnQgPSBzdGQ6Om1ha2VfdW5p
cXVlPERvd25sb2FkQ2xpZW50PigqdGhpcyk7Ci0gICAgbV9yZXNvdXJjZUhhbmRsZSA9IHJlc291
cmNlSGFuZGxlLT5yZWxlYXNlRm9yRG93bmxvYWQobV9kb3dubG9hZENsaWVudC5nZXQoKSk7Ci0g
ICAgZGlkU3RhcnQoKTsKLSAgICBzdGF0aWNfY2FzdDxEb3dubG9hZENsaWVudCo+KG1fZG93bmxv
YWRDbGllbnQuZ2V0KCkpLT5oYW5kbGVSZXNwb25zZUxhdGVyKHJlc3BvbnNlKTsKLX0KLQogdm9p
ZCBEb3dubG9hZDo6cmVzdW1lKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYsIGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYpCiB7CiAgICAgbm90SW1wbGVtZW50
ZWQoKTsKQEAgLTIzMywxNCArNDIsOCBAQCB2b2lkIERvd25sb2FkOjpyZXN1bWUoY29uc3QgSVBD
OjpEYXRhUmVmZXJlbmNlJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU2FuZGJveEV4dAogCiB2b2lk
IERvd25sb2FkOjpjYW5jZWxOZXR3b3JrTG9hZCgpCiB7Ci0gICAgaWYgKCFtX3Jlc291cmNlSGFu
ZGxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBDYW5jZWxsaW5nIHRoZSBkb3dubG9hZCB3
aWxsIGRlbGV0ZSBpdCBhbmQgcGxhdGZvcm1JbnZhbGlkYXRlKCkgd2lsbCBiZSBjYWxsZWQgYnkg
dGhlIGRlc3RydWN0b3IuCi0gICAgLy8gU28sIHdlIG5lZWQgdG8gc2V0IG1fcmVzb3VyY2VIYW5k
bGUgdG8gbnVsbHB0ciBiZWZvcmUgYWN0dWFsbHkgY2FuY2VsbGluZyB0aGUgZG93bmxvYWQgdG8g
bWFrZSBzdXJlCi0gICAgLy8gaXQgd29uJ3QgYmUgY2FuY2VsbGVkIGFnYWluIGJ5IHBsYXRmb3Jt
SW52YWxpZGF0ZS4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
Mjc2NTAuCi0gICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiByZXNvdXJjZUhhbmRsZSA9IG1fcmVz
b3VyY2VIYW5kbGUucmVsZWFzZSgpOwotICAgIHN0YXRpY19jYXN0PERvd25sb2FkQ2xpZW50Kj4o
bV9kb3dubG9hZENsaWVudC5nZXQoKSktPmNhbmNlbChyZXNvdXJjZUhhbmRsZS5nZXQoKSk7Cisg
ICAgbV9kb3dubG9hZC0+Y2FuY2VsKCk7CisgICAgZGlkQ2FuY2VsKHsgfSk7CiB9CiAKIHZvaWQg
RG93bmxvYWQ6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCkBAIC0yNDksNyArNTIsNiBAQCB2b2lkIERv
d25sb2FkOjpwbGF0Zm9ybUludmFsaWRhdGUoKQogCiB2b2lkIERvd25sb2FkOjpwbGF0Zm9ybURp
ZEZpbmlzaCgpCiB7Ci0gICAgbV9yZXNvdXJjZUhhbmRsZSA9IG51bGxwdHI7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya0RhdGFUYXNrLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrRGF0YVRhc2suaAppbmRleCAzMjQyYzdlLi5iNjI3NThiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suaApAQCAtMjMsOSArMjMsMTEgQEAK
ICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIE5ldHdv
cmtEYXRhVGFza19oCi0jZGVmaW5lIE5ldHdvcmtEYXRhVGFza19oCisjcHJhZ21hIG9uY2UKIAor
I2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisKKyNpbmNsdWRlICJEb3dubG9hZElELmgiCiAjaW5j
bHVkZSAiU2FuZGJveEV4dGVuc2lvbi5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ3JlZGVudGlhbC5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkZXJUeXBlcy5oPgpAQCAtNDEsNiArNDMsMTMg
QEAKIE9CSkNfQ0xBU1MgTlNVUkxTZXNzaW9uRGF0YVRhc2s7CiAjZW5kaWYKIAorI2lmIFVTRShT
T1VQKQorI2luY2x1ZGUgPFdlYkNvcmUvUHJvdGVjdGlvblNwYWNlLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKyNpbmNs
dWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewog
Y2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVuZ2U7CiBjbGFzcyBDcmVkZW50aWFsOwpAQCAtNTUs
MTQgKzY0LDggQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBEb3dubG9hZDsKIGNsYXNzIE5l
dHdvcmtTZXNzaW9uOwogY2xhc3MgUGVuZGluZ0Rvd25sb2FkOworZW51bSBjbGFzcyBBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uOwogCi1lbnVtIGNsYXNzIEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlRGlzcG9zaXRpb24gewotICAgIFVzZUNyZWRlbnRpYWwsCi0gICAgUGVyZm9ybURl
ZmF1bHRIYW5kbGluZywKLSAgICBDYW5jZWwsCi0gICAgUmVqZWN0UHJvdGVjdGlvblNwYWNlCi19
OwotICAgIAogdHlwZWRlZiBGdW5jdGlvbjx2b2lkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYpPiBSZWRpcmVjdENvbXBsZXRpb25IYW5kbGVyOwogdHlwZWRlZiBGdW5jdGlvbjx2b2lk
KEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkNyZWRl
bnRpYWwmKT4gQ2hhbGxlbmdlQ29tcGxldGlvbkhhbmRsZXI7CiB0eXBlZGVmIEZ1bmN0aW9uPHZv
aWQoV2ViQ29yZTo6UG9saWN5QWN0aW9uKT4gUmVzcG9uc2VDb21wbGV0aW9uSGFuZGxlcjsKQEAg
LTEwNSwxOSArMTA4LDIzIEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIHVpbnQ2NF90IFRhc2tJZGVu
dGlmaWVyOwogICAgIAogICAgIH5OZXR3b3JrRGF0YVRhc2soKTsKLSAgICAKKworI2lmIFBMQVRG
T1JNKENPQ09BKQogICAgIHZvaWQgZGlkU2VuZERhdGEodWludDY0X3QgdG90YWxCeXRlc1NlbnQs
IHVpbnQ2NF90IHRvdGFsQnl0ZXNFeHBlY3RlZFRvU2VuZCk7CiAgICAgdm9pZCBkaWRSZWNlaXZl
Q2hhbGxlbmdlKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiwgQ2hhbGxl
bmdlQ29tcGxldGlvbkhhbmRsZXImJik7CiAgICAgdm9pZCBkaWRDb21wbGV0ZVdpdGhFcnJvcihj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJik7CiAgICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9u
c2UoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYmLCBSZXNwb25zZUNvbXBsZXRpb25IYW5kbGVy
JiYpOwogICAgIHZvaWQgZGlkUmVjZWl2ZURhdGEoUmVmPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4m
Jik7CiAgICAgdm9pZCBkaWRCZWNvbWVEb3dubG9hZCgpOwotICAgIAorCisgICAgdm9pZCB3aWxs
UGVyZm9ybUhUVFBSZWRpcmVjdGlvbihXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiYsIFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYmLCBSZWRpcmVjdENvbXBsZXRpb25IYW5kbGVyJiYpOworICAg
IHZvaWQgdHJhbnNmZXJTYW5kYm94RXh0ZW5zaW9uVG9Eb3dubG9hZChEb3dubG9hZCYpOworI2Vu
ZGlmCiAgICAgTmV0d29ya0RhdGFUYXNrQ2xpZW50KiBjbGllbnQoKSBjb25zdCB7IHJldHVybiBt
X2NsaWVudDsgfQogICAgIHZvaWQgY2xlYXJDbGllbnQoKSB7IG1fY2xpZW50ID0gbnVsbHB0cjsg
fQogICAgIAotICAgIERvd25sb2FkSUQgcGVuZGluZ0Rvd25sb2FkSUQoKSB7IHJldHVybiBtX3Bl
bmRpbmdEb3dubG9hZElEOyB9Ci0gICAgUGVuZGluZ0Rvd25sb2FkKiBwZW5kaW5nRG93bmxvYWQo
KSB7IHJldHVybiBtX3BlbmRpbmdEb3dubG9hZDsgfQorICAgIERvd25sb2FkSUQgcGVuZGluZ0Rv
d25sb2FkSUQoKSBjb25zdCB7IHJldHVybiBtX3BlbmRpbmdEb3dubG9hZElEOyB9CisgICAgUGVu
ZGluZ0Rvd25sb2FkKiBwZW5kaW5nRG93bmxvYWQoKSBjb25zdCB7IHJldHVybiBtX3BlbmRpbmdE
b3dubG9hZDsgfQogICAgIHZvaWQgc2V0UGVuZGluZ0Rvd25sb2FkSUQoRG93bmxvYWRJRCBkb3du
bG9hZElEKQogICAgIHsKICAgICAgICAgQVNTRVJUKCFtX3BlbmRpbmdEb3dubG9hZElELmRvd25s
b2FkSUQoKSk7CkBAIC0xMzAsMTkgKzEzNyw3MyBAQCBwdWJsaWM6CiAgICAgICAgIG1fcGVuZGlu
Z0Rvd25sb2FkID0gJnBlbmRpbmdEb3dubG9hZDsKICAgICB9CiAgICAgdm9pZCBzZXRQZW5kaW5n
RG93bmxvYWRMb2NhdGlvbihjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGUmLCBib29sIGFsbG93T3ZlcndyaXRlKTsKLSAgICBjb25zdCBTdHJpbmcm
IHBlbmRpbmdEb3dubG9hZExvY2F0aW9uKCkgeyByZXR1cm4gbV9wZW5kaW5nRG93bmxvYWRMb2Nh
dGlvbjsgfQorICAgIGNvbnN0IFN0cmluZyYgcGVuZGluZ0Rvd25sb2FkTG9jYXRpb24oKSBjb25z
dCB7IHJldHVybiBtX3BlbmRpbmdEb3dubG9hZExvY2F0aW9uOyB9CisgICAgYm9vbCBpc0Rvd25s
b2FkKCkgY29uc3QgeyByZXR1cm4gISFtX3BlbmRpbmdEb3dubG9hZElELmRvd25sb2FkSUQoKTsg
fQogCiAgICAgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBmaXJzdFJlcXVlc3QoKSBj
b25zdCB7IHJldHVybiBtX2ZpcnN0UmVxdWVzdDsgfQogICAgIFN0cmluZyBzdWdnZXN0ZWRGaWxl
bmFtZSgpOwogICAgIHZvaWQgc2V0U3VnZ2VzdGVkRmlsZW5hbWUoY29uc3QgU3RyaW5nJik7Ci0g
ICAgdm9pZCB3aWxsUGVyZm9ybUhUVFBSZWRpcmVjdGlvbihXZWJDb3JlOjpSZXNvdXJjZVJlc3Bv
bnNlJiYsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmLCBSZWRpcmVjdENvbXBsZXRpb25IYW5k
bGVyJiYpOwotICAgIHZvaWQgdHJhbnNmZXJTYW5kYm94RXh0ZW5zaW9uVG9Eb3dubG9hZChEb3du
bG9hZCYpOwogICAgIGJvb2wgYWxsb3dzU3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChj
b25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOwogICAgIAogcHJpdmF0ZToK
ICAgICBOZXR3b3JrRGF0YVRhc2soTmV0d29ya1Nlc3Npb24mLCBOZXR3b3JrRGF0YVRhc2tDbGll
bnQmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBXZWJDb3JlOjpTdG9yZWRDcmVk
ZW50aWFscywgV2ViQ29yZTo6Q29udGVudFNuaWZmaW5nUG9saWN5LCBib29sIHNob3VsZENsZWFy
UmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpOwogCiAgICAgYm9vbCB0cnlQYXNzd29yZEJh
c2VkQXV0aGVudGljYXRpb24oY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2Um
LCBjb25zdCBDaGFsbGVuZ2VDb21wbGV0aW9uSGFuZGxlciYpOworCisjaWYgVVNFKFNPVVApCisg
ICAgdm9pZCB0aW1lb3V0RmlyZWQoKTsKKyAgICB2b2lkIHN0YXJ0VGltZW91dCgpOworICAgIHZv
aWQgc3RvcFRpbWVvdXQoKTsKKyAgICB2b2lkIGludmFsaWRhdGVBbmRDYW5jZWwoKTsKKyAgICB2
b2lkIGNyZWF0ZVJlcXVlc3QoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CisgICAg
dm9pZCBjbGVhclJlcXVlc3QoKTsKKyAgICBzdGF0aWMgdm9pZCBzZW5kUmVxdWVzdENhbGxiYWNr
KFNvdXBSZXF1ZXN0KiwgR0FzeW5jUmVzdWx0KiwgTmV0d29ya0RhdGFUYXNrKik7CisgICAgdm9p
ZCBkaWRTZW5kUmVxdWVzdChHUmVmUHRyPEdJbnB1dFN0cmVhbT4mJik7CisgICAgdm9pZCBkaWRS
ZWNlaXZlUmVzcG9uc2UoKTsKKyAgICBzdGF0aWMgdm9pZCB0bHNFcnJvcnNDaGFuZ2VkQ2FsbGJh
Y2soU291cE1lc3NhZ2UqLCBHUGFyYW1TcGVjKiwgTmV0d29ya0RhdGFUYXNrKik7CisgICAgdm9p
ZCB0bHNFcnJvcnNDaGFuZ2VkKCk7CisgICAgdm9pZCBhcHBseUF1dGhlbnRpY2F0aW9uVG9SZXF1
ZXN0KFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOworICAgIHN0YXRpYyB2b2lkIGF1dGhlbnRp
Y2F0ZUNhbGxiYWNrKFNvdXBTZXNzaW9uKiwgU291cE1lc3NhZ2UqLCBTb3VwQXV0aCosIGdib29s
ZWFuIHJldHJ5aW5nLCBOZXR3b3JrRGF0YVRhc2sqKTsKKyAgICB2b2lkIGF1dGhlbnRpY2F0ZShX
ZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYmKTsKKyAgICB2b2lkIGNvbnRpbnVlQXV0
aGVudGljYXRlKFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiYpOworICAgIHN0YXRp
YyB2b2lkIHNraXBJbnB1dFN0cmVhbUZvclJlZGlyZWN0aW9uQ2FsbGJhY2soR0lucHV0U3RyZWFt
KiwgR0FzeW5jUmVzdWx0KiwgTmV0d29ya0RhdGFUYXNrKik7CisgICAgdm9pZCBza2lwSW5wdXRT
dHJlYW1Gb3JSZWRpcmVjdGlvbigpOworICAgIHZvaWQgZGlkRmluaXNoU2tpcElucHV0U3RyZWFt
Rm9yUmVkaXJlY3Rpb24oKTsKKyAgICBib29sIHNob3VsZFN0YXJ0SFRUUFJlZGlyZWN0aW9uKCk7
CisgICAgdm9pZCBjb250aW51ZUhUVFBSZWRpcmVjdGlvbigpOworICAgIHN0YXRpYyB2b2lkIHJl
YWRDYWxsYmFjayhHSW5wdXRTdHJlYW0qLCBHQXN5bmNSZXN1bHQqLCBOZXR3b3JrRGF0YVRhc2sq
KTsKKyAgICB2b2lkIHJlYWQoKTsKKyAgICB2b2lkIGRpZFJlYWQoZ3NzaXplIGJ5dGVzUmVhZCk7
CisgICAgdm9pZCBkaWRGaW5pc2hSZWFkKCk7CisgICAgc3RhdGljIHZvaWQgcmVxdWVzdE5leHRQ
YXJ0Q2FsbGJhY2soU291cE11bHRpcGFydElucHV0U3RyZWFtKiwgR0FzeW5jUmVzdWx0KiwgTmV0
d29ya0RhdGFUYXNrKik7CisgICAgdm9pZCByZXF1ZXN0TmV4dFBhcnQoKTsKKyAgICB2b2lkIGRp
ZFJlcXVlc3ROZXh0UGFydChHUmVmUHRyPEdJbnB1dFN0cmVhbT4mJik7CisgICAgdm9pZCBkaWRG
aW5pc2hSZXF1ZXN0TmV4dFBhcnQoKTsKKyAgICBzdGF0aWMgdm9pZCBnb3RIZWFkZXJzQ2FsbGJh
Y2soU291cE1lc3NhZ2UqLCBOZXR3b3JrRGF0YVRhc2sqKTsKKyAgICB2b2lkIGRpZEdldEhlYWRl
cnMoKTsKKyAgICBzdGF0aWMgdm9pZCB3cm90ZUJvZHlEYXRhQ2FsbGJhY2soU291cE1lc3NhZ2Uq
LCBTb3VwQnVmZmVyKiwgTmV0d29ya0RhdGFUYXNrKik7CisgICAgdm9pZCBkaWRXcml0ZUJvZHlE
YXRhKHVpbnQ2NF90IGJ5dGVzU2VudCk7CisgICAgdm9pZCBkb3dubG9hZCgpOworICAgIHN0YXRp
YyB2b2lkIHdyaXRlRG93bmxvYWRDYWxsYmFjayhHT3V0cHV0U3RyZWFtKiwgR0FzeW5jUmVzdWx0
KiwgTmV0d29ya0RhdGFUYXNrKik7CisgICAgdm9pZCB3cml0ZURvd25sb2FkKCk7CisgICAgdm9p
ZCBkaWRXcml0ZURvd25sb2FkKGdzaXplIGJ5dGVzV3JpdHRlbik7CisgICAgdm9pZCBkaWRGYWls
RG93bmxvYWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpOworICAgIHZvaWQgZGlkRmlu
aXNoRG93bmxvYWQoKTsKKyAgICB2b2lkIGNsZWFuRG93bmxvYWRGaWxlcygpOworICAgIHZvaWQg
ZGlkRmFpbChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJik7CisjaWYgRU5BQkxFKFdFQl9U
SU1JTkcpCisgICAgc3RhdGljIHZvaWQgbmV0d29ya0V2ZW50Q2FsbGJhY2soU291cE1lc3NhZ2Uq
LCBHU29ja2V0Q2xpZW50RXZlbnQsIEdJT1N0cmVhbSosIE5ldHdvcmtEYXRhVGFzayopOworICAg
IHZvaWQgbmV0d29ya0V2ZW50KEdTb2NrZXRDbGllbnRFdmVudCk7CisjaWYgU09VUF9DSEVDS19W
RVJTSU9OKDIsIDQ5LCA5MSkKKyAgICBzdGF0aWMgdm9pZCBzdGFydGluZ0NhbGxiYWNrKFNvdXBN
ZXNzYWdlKiwgTmV0d29ya0RhdGFUYXNrKik7CisjZWxzZQorICAgIHN0YXRpYyB2b2lkIHJlcXVl
c3RTdGFydGVkQ2FsbGJhY2soU291cFNlc3Npb24qLCBTb3VwTWVzc2FnZSosIFNvdXBTb2NrZXQq
LCBOZXR3b3JrRGF0YVRhc2sqKTsKKyNlbmRpZgorICAgIHZvaWQgZGlkU3RhcnRSZXF1ZXN0KCk7
CisgICAgc3RhdGljIHZvaWQgcmVzdGFydGVkQ2FsbGJhY2soU291cE1lc3NhZ2UqLCBOZXR3b3Jr
RGF0YVRhc2sqKTsKKyAgICB2b2lkIGRpZFJlc3RhcnQoKTsKKyNlbmRpZgorI2VuZGlmCiAgICAg
CiAgICAgZW51bSBGYWlsdXJlVHlwZSB7CiAgICAgICAgIE5vRmFpbHVyZSwKQEAgLTE3Miw2ICsy
MzMsMzAgQEAgcHJpdmF0ZToKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBSZXRhaW5QdHI8TlNV
UkxTZXNzaW9uRGF0YVRhc2s+IG1fdGFzazsKICNlbmRpZgorI2lmIFVTRShTT1VQKQorICAgIFN0
YXRlIG1fc3RhdGUgeyBTdGF0ZTo6U3VzcGVuZGVkIH07CisgICAgV2ViQ29yZTo6Q29udGVudFNu
aWZmaW5nUG9saWN5IG1fc2hvdWxkQ29udGVudFNuaWZmOworICAgIEdSZWZQdHI8U291cFJlcXVl
c3Q+IG1fc291cFJlcXVlc3Q7CisgICAgR1JlZlB0cjxTb3VwTWVzc2FnZT4gbV9zb3VwTWVzc2Fn
ZTsKKyAgICBHUmVmUHRyPEdJbnB1dFN0cmVhbT4gbV9pbnB1dFN0cmVhbTsKKyAgICBHUmVmUHRy
PFNvdXBNdWx0aXBhcnRJbnB1dFN0cmVhbT4gbV9tdWx0aXBhcnRJbnB1dFN0cmVhbTsKKyAgICBH
UmVmUHRyPEdDYW5jZWxsYWJsZT4gbV9jYW5jZWxsYWJsZTsKKyAgICBHUmVmUHRyPEdBc3luY1Jl
c3VsdD4gbV9wZW5kaW5nUmVzdWx0OworICAgIFdlYkNvcmU6OlByb3RlY3Rpb25TcGFjZSBtX3By
b3RlY3Rpb25TcGFjZUZvclBlcnNpc3RlbnRTdG9yYWdlOworICAgIFdlYkNvcmU6OkNyZWRlbnRp
YWwgbV9jcmVkZW50aWFsRm9yUGVyc2lzdGVudFN0b3JhZ2U7CisgICAgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXNwb25zZSBtX3Jlc3BvbnNlOworICAgIFZlY3RvcjxjaGFyPiBtX3JlYWRCdWZmZXI7Cisg
ICAgdW5zaWduZWQgbV9yZWRpcmVjdENvdW50IHsgMCB9OworICAgIHVpbnQ2NF90IG1fYm9keURh
dGFUb3RhbEJ5dGVzU2VudCB7IDAgfTsKKyAgICBHUmVmUHRyPEdGaWxlPiBtX2Rvd25sb2FkRGVz
dGluYXRpb25GaWxlOworICAgIEdSZWZQdHI8R0ZpbGU+IG1fZG93bmxvYWRJbnRlcm1lZGlhdGVG
aWxlOworICAgIEdSZWZQdHI8R091dHB1dFN0cmVhbT4gbV9kb3dubG9hZE91dHB1dFN0cmVhbTsK
KyAgICBib29sIG1fYWxsb3dPdmVyd3JpdGVEb3dubG9hZCB7IGZhbHNlIH07CisjaWYgRU5BQkxF
KFdFQl9USU1JTkcpCisgICAgZG91YmxlIG1fc3RhcnRUaW1lIHsgMCB9OworI2VuZGlmCisgICAg
UnVuTG9vcDo6VGltZXI8TmV0d29ya0RhdGFUYXNrPiBtX3RpbWVvdXRTb3VyY2U7CisjZW5kaWYK
ICAgICBTdHJpbmcgbV9zdWdnZXN0ZWRGaWxlbmFtZTsKIH07CiAKQEAgLTE4MSw0ICsyNjYsNCBA
QCBXZWJDb3JlOjpDcmVkZW50aWFsIHNlcnZlclRydXN0Q3JlZGVudGlhbChjb25zdCBXZWJDb3Jl
OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZQogICAgIAogfQogCi0jZW5kaWYKKyNlbmRpZiAvLyBV
U0UoTkVUV09SS19TRVNTSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvTmV0d29ya0xvYWQuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya0xvYWQuY3BwCmluZGV4IGJiMjk5ZjYuLjhmZDRhY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHAKQEAgLTI3MSw3ICsyNzEsNyBAQCB2b2lk
IE5ldHdvcmtMb2FkOjpjb21wbGV0ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKENoYWxsZW5nZUNv
bXBsZXRpb25IYW5kbGVyJiYgYwogdm9pZCBOZXR3b3JrTG9hZDo6ZGlkUmVjZWl2ZVJlc3BvbnNl
TmV0d29ya1Nlc3Npb24oUmVzb3VyY2VSZXNwb25zZSYmIHJlc3BvbnNlLCBSZXNwb25zZUNvbXBs
ZXRpb25IYW5kbGVyJiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKLSAgICBpZiAobV90YXNrICYmIG1fdGFzay0+cGVuZGluZ0Rvd25sb2FkSUQoKS5k
b3dubG9hZElEKCkpCisgICAgaWYgKG1fdGFzayAmJiBtX3Rhc2stPmlzRG93bmxvYWQoKSkKICAg
ICAgICAgTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLmZpbmRQZW5kaW5nRG93bmxvYWRMb2Nh
dGlvbigqbV90YXNrLmdldCgpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgcmVzcG9uc2Up
OwogICAgIGVsc2UgaWYgKHNoYXJlZERpZFJlY2VpdmVSZXNwb25zZShXVEZNb3ZlKHJlc3BvbnNl
KSkgPT0gTmV0d29ya0xvYWRDbGllbnQ6OlNob3VsZENvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNl
OjpZZXMpCiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFBvbGljeVVzZSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKaW5kZXggM2IzOTVk
Ni4uNmVmMTc0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Byb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdv
cmtQcm9jZXNzLmNwcApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNz
UGxhdGZvcm1TdHJhdGVnaWVzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NQcm94eU1lc3Nh
Z2VzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Jlc291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiTmV0
d29ya1Nlc3Npb24uaCIKICNpbmNsdWRlICJSZW1vdGVOZXR3b3JraW5nQ29udGV4dC5oIgogI2lu
Y2x1ZGUgIlNlc3Npb25UcmFja2VyLmgiCiAjaW5jbHVkZSAiU3RhdGlzdGljc0RhdGEuaCIKQEAg
LTEwMCw3ICsxMDEsNyBAQCBOZXR3b3JrUHJvY2Vzczo6TmV0d29ya1Byb2Nlc3MoKQogICAgIGFk
ZFN1cHBsZW1lbnQ8QXV0aGVudGljYXRpb25NYW5hZ2VyPigpOwogICAgIGFkZFN1cHBsZW1lbnQ8
V2ViQ29va2llTWFuYWdlcj4oKTsKICAgICBhZGRTdXBwbGVtZW50PEN1c3RvbVByb3RvY29sTWFu
YWdlcj4oKTsKLSNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQorI2lmIFVTRShORVRXT1JLX1NFU1NJ
T04pICYmIFBMQVRGT1JNKENPQ09BKQogICAgIE5ldHdvcmtTZXNzaW9uOjpzZXRDdXN0b21Qcm90
b2NvbE1hbmFnZXIoc3VwcGxlbWVudDxDdXN0b21Qcm90b2NvbE1hbmFnZXI+KCkpOwogI2VuZGlm
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vz
c2lvbi5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uaApp
bmRleCBhODQwZjFkLi5iMDg4MmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtTZXNzaW9uLmgKQEAgLTI1LDYgKzI1LDggQEAKIAogI3ByYWdtYSBvbmNlCiAK
KyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQorCiAjaWYgUExBVEZPUk0oQ09DT0EpCiBPQkpDX0NM
QVNTIE5TVVJMU2Vzc2lvbjsKIE9CSkNfQ0xBU1MgTlNPcGVyYXRpb25RdWV1ZTsKQEAgLTM1LDkg
KzM3LDE0IEBAIE9CSkNfQ0xBU1MgV0tOZXR3b3JrU2Vzc2lvbkRlbGVnYXRlOwogI2luY2x1ZGUg
Ik5ldHdvcmtEYXRhVGFzay5oIgogI2luY2x1ZGUgPFdlYkNvcmUvU2Vzc2lvbklELmg+CiAjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUg
PHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCisjaWYgVVNFKFNPVVAp
Cit0eXBlZGVmIHN0cnVjdCBfU291cFNlc3Npb24gU291cFNlc3Npb247CisjZW5kaWYKKwogbmFt
ZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgTmV0d29ya1N0b3JhZ2VTZXNzaW9uOwogfQpAQCAtNjIs
OSArNjksMTMgQEAgcHVibGljOgogCiAgICAgV2ViQ29yZTo6U2Vzc2lvbklEIHNlc3Npb25JRCgp
IGNvbnN0IHsgcmV0dXJuIG1fc2Vzc2lvbklEOyB9CiAKKyNpZiBVU0UoU09VUCkKKyAgICBTb3Vw
U2Vzc2lvbiogc291cFNlc3Npb24oKSBjb25zdDsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oQ09D
T0EpCiAgICAgLy8gTXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueSBOZXR3b3JrU2Vzc2lvbiBoYXMg
YmVlbiBjcmVhdGVkLgogICAgIHN0YXRpYyB2b2lkIHNldEN1c3RvbVByb3RvY29sTWFuYWdlcihD
dXN0b21Qcm90b2NvbE1hbmFnZXIqKTsKLSNpZiBQTEFURk9STShDT0NPQSkKICAgICBzdGF0aWMg
dm9pZCBzZXRTb3VyY2VBcHBsaWNhdGlvbkF1ZGl0VG9rZW5EYXRhKFJldGFpblB0cjxDRkRhdGFS
ZWY+JiYpOwogICAgIHN0YXRpYyB2b2lkIHNldFNvdXJjZUFwcGxpY2F0aW9uQnVuZGxlSWRlbnRp
Zmllcihjb25zdCBTdHJpbmcmKTsKICAgICBzdGF0aWMgdm9pZCBzZXRTb3VyY2VBcHBsaWNhdGlv
blNlY29uZGFyeUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJik7CkBAIC03NCwyOSArODUsMzQgQEAg
cHVibGljOgogI2VuZGlmCiAKICAgICB2b2lkIGNsZWFyQ3JlZGVudGlhbHMoKTsKLQorI2lmIFBM
QVRGT1JNKENPQ09BKQogICAgIE5ldHdvcmtEYXRhVGFzayogZGF0YVRhc2tGb3JJZGVudGlmaWVy
KE5ldHdvcmtEYXRhVGFzazo6VGFza0lkZW50aWZpZXIsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRp
YWxzKTsKIAogICAgIHZvaWQgYWRkRG93bmxvYWRJRChOZXR3b3JrRGF0YVRhc2s6OlRhc2tJZGVu
dGlmaWVyLCBEb3dubG9hZElEKTsKICAgICBEb3dubG9hZElEIGRvd25sb2FkSUQoTmV0d29ya0Rh
dGFUYXNrOjpUYXNrSWRlbnRpZmllcik7CiAgICAgRG93bmxvYWRJRCB0YWtlRG93bmxvYWRJRChO
ZXR3b3JrRGF0YVRhc2s6OlRhc2tJZGVudGlmaWVyKTsKLSAgICAKKyNlbmRpZgorCiBwcml2YXRl
OgogICAgIE5ldHdvcmtTZXNzaW9uKFR5cGUsIFdlYkNvcmU6OlNlc3Npb25JRCwgQ3VzdG9tUHJv
dG9jb2xNYW5hZ2VyKik7Ci0gICAgV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBuZXR3
b3JrU3RvcmFnZVNlc3Npb24oKTsKKyAgICBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb24m
IG5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpIGNvbnN0OwogCiAgICAgV2ViQ29yZTo6U2Vzc2lvbklE
IG1fc2Vzc2lvbklEOwogCisjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgSGFzaE1hcDxOZXR3b3Jr
RGF0YVRhc2s6OlRhc2tJZGVudGlmaWVyLCBOZXR3b3JrRGF0YVRhc2sqPiBtX2RhdGFUYXNrTWFw
V2l0aENyZWRlbnRpYWxzOwogICAgIEhhc2hNYXA8TmV0d29ya0RhdGFUYXNrOjpUYXNrSWRlbnRp
ZmllciwgTmV0d29ya0RhdGFUYXNrKj4gbV9kYXRhVGFza01hcFdpdGhvdXRDcmVkZW50aWFsczsK
ICAgICBIYXNoTWFwPE5ldHdvcmtEYXRhVGFzazo6VGFza0lkZW50aWZpZXIsIERvd25sb2FkSUQ+
IG1fZG93bmxvYWRNYXA7CiAKLSNpZiBQTEFURk9STShDT0NPQSkKICAgICBSZXRhaW5QdHI8TlNV
UkxTZXNzaW9uPiBtX3Nlc3Npb25XaXRoQ3JlZGVudGlhbFN0b3JhZ2U7CiAgICAgUmV0YWluUHRy
PFdLTmV0d29ya1Nlc3Npb25EZWxlZ2F0ZT4gbV9zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdl
RGVsZWdhdGU7CiAgICAgUmV0YWluUHRyPE5TVVJMU2Vzc2lvbj4gbV9zZXNzaW9uV2l0aG91dENy
ZWRlbnRpYWxTdG9yYWdlOwogICAgIFJldGFpblB0cjxXS05ldHdvcmtTZXNzaW9uRGVsZWdhdGU+
IG1fc2Vzc2lvbldpdGhvdXRDcmVkZW50aWFsU3RvcmFnZURlbGVnYXRlOworI2VsaWYgVVNFKFNP
VVApCisgICAgSGFzaFNldDxOZXR3b3JrRGF0YVRhc2sqPiBtX2RhdGFUYXNrU2V0OwogI2VuZGlm
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShORVRXT1JLX1NF
U1NJT04pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9QaW5nTG9h
ZC5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvUGluZ0xvYWQuaAppbmRleCA3YTdh
M2FkLi41ZjNkYTNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Q
aW5nTG9hZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL1BpbmdMb2FkLmgK
QEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgUGluZ0xvYWRfaAogI2RlZmluZSBQaW5nTG9hZF9o
CiAKKyNpbmNsdWRlICJBdXRoZW50aWNhdGlvbk1hbmFnZXIuaCIKICNpbmNsdWRlICJOZXR3b3Jr
RGF0YVRhc2suaCIKICNpbmNsdWRlICJTZXNzaW9uVHJhY2tlci5oIgogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5t
bSBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0Nv
Y29hLm1tCmluZGV4IDk0NTA5ODYuLjYyY2IwZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLm1tCkBA
IC0yOCw2ICsyOCw3IEBACiAKICNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQogCisjaW1wb3J0ICJB
dXRoZW50aWNhdGlvbk1hbmFnZXIuaCIKICNpbXBvcnQgIkRvd25sb2FkLmgiCiAjaW1wb3J0ICJE
b3dubG9hZFByb3h5TWVzc2FnZXMuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2Eu
bW0gYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNv
Y29hLm1tCmluZGV4IGNlZGZjMzkuLjAxZjJhMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW0KKysrIGIvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbQpAQCAt
MjgsNiArMjgsNyBAQAogCiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKIAorI2ltcG9ydCAiQXV0
aGVudGljYXRpb25NYW5hZ2VyLmgiCiAjaW1wb3J0ICJDdXN0b21Qcm90b2NvbE1hbmFnZXIuaCIK
ICNpbXBvcnQgIkRhdGFSZWZlcmVuY2UuaCIKICNpbXBvcnQgIkRvd25sb2FkLmgiCkBAIC00NzUs
NyArNDc2LDcgQEAgdm9pZCBOZXR3b3JrU2Vzc2lvbjo6aW52YWxpZGF0ZUFuZENhbmNlbCgpCiB9
CiAKIAotV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBOZXR3b3JrU2Vzc2lvbjo6bmV0
d29ya1N0b3JhZ2VTZXNzaW9uKCkKK1dlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgTmV0
d29ya1Nlc3Npb246Om5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpIGNvbnN0CiB7CiAgICAgYXV0byog
c3RvcmFnZVNlc3Npb24gPSBXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OnN0b3JhZ2VT
ZXNzaW9uKG1fc2Vzc2lvbklEKTsKICAgICBSRUxFQVNFX0FTU0VSVChzdG9yYWdlU2Vzc2lvbik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtE
YXRhVGFza1NvdXAuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3
b3JrRGF0YVRhc2tTb3VwLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5l
Njg3MmUzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
c291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmNwcApAQCAtMCwwICsxLDExNTMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIk5ldHdvcmtEYXRhVGFzay5oIgorCisjaW5jbHVkZSAiQXV0aGVudGlj
YXRpb25NYW5hZ2VyLmgiCisjaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIkRv
d25sb2FkLmgiCisjaW5jbHVkZSAiRG93bmxvYWRTb3VwRXJyb3JzLmgiCisjaW5jbHVkZSAiTmV0
d29ya0xvYWQuaCIKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzcy5oIgorI2luY2x1ZGUgIk5ldHdv
cmtTZXNzaW9uLmgiCisjaW5jbHVkZSAiV2ViRXJyb3JzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9B
dXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRUUFBhcnNlcnMu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Tb3VwTmV0d29ya1Nl
c3Npb24uaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyBjb25zdCBzaXplX3QgZ0Rl
ZmF1bHRSZWFkQnVmZmVyU2l6ZSA9IDgxOTI7CisKK05ldHdvcmtEYXRhVGFzazo6TmV0d29ya0Rh
dGFUYXNrKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uLCBOZXR3b3JrRGF0YVRhc2tDbGllbnQmIGNs
aWVudCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0V2l0aENyZWRlbnRpYWxzLCBTdG9y
ZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscywgQ29udGVudFNuaWZmaW5nUG9saWN5IHNo
b3VsZENvbnRlbnRTbmlmZiwgYm9vbCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJl
ZGlyZWN0KQorICAgIDogbV9mYWlsdXJlVGltZXIoKnRoaXMsICZOZXR3b3JrRGF0YVRhc2s6OmZh
aWx1cmVUaW1lckZpcmVkKQorICAgICwgbV9zZXNzaW9uKCZzZXNzaW9uKQorICAgICwgbV9jbGll
bnQoJmNsaWVudCkKKyAgICAsIG1fc3RvcmVkQ3JlZGVudGlhbHMoc3RvcmVkQ3JlZGVudGlhbHMp
CisgICAgLCBtX2xhc3RIVFRQTWV0aG9kKHJlcXVlc3RXaXRoQ3JlZGVudGlhbHMuaHR0cE1ldGhv
ZCgpKQorICAgICwgbV9maXJzdFJlcXVlc3QocmVxdWVzdFdpdGhDcmVkZW50aWFscykKKyAgICAs
IG1fc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdChzaG91bGRDbGVhclJl
ZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KQorICAgICwgbV9zaG91bGRDb250ZW50U25pZmYo
c2hvdWxkQ29udGVudFNuaWZmKQorICAgICwgbV90aW1lb3V0U291cmNlKFJ1bkxvb3A6Om1haW4o
KSwgdGhpcywgJk5ldHdvcmtEYXRhVGFzazo6dGltZW91dEZpcmVkKQoreworICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CisKKyAgICBtX3Nlc3Npb24tPm1fZGF0YVRhc2tTZXQuYWRkKHRoaXMp
OworCisgICAgaWYgKCFyZXF1ZXN0V2l0aENyZWRlbnRpYWxzLnVybCgpLmlzVmFsaWQoKSkgewor
ICAgICAgICBzY2hlZHVsZUZhaWx1cmUoSW52YWxpZFVSTEZhaWx1cmUpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKCFwb3J0QWxsb3dlZChyZXF1ZXN0V2l0aENyZWRlbnRpYWxz
LnVybCgpKSkgeworICAgICAgICBzY2hlZHVsZUZhaWx1cmUoQmxvY2tlZEZhaWx1cmUpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byByZXF1ZXN0ID0gcmVxdWVzdFdpdGhDcmVk
ZW50aWFsczsKKyAgICBpZiAocmVxdWVzdC51cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkp
IHsKKyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICAgICAgbV9zdGFydFRpbWUgPSBtb25vdG9u
aWNhbGx5SW5jcmVhc2luZ1RpbWVNUygpOworI2VuZGlmCisgICAgICAgIGF1dG8gdXJsID0gcmVx
dWVzdC51cmwoKTsKKyAgICAgICAgaWYgKG1fc3RvcmVkQ3JlZGVudGlhbHMgPT0gQWxsb3dTdG9y
ZWRDcmVkZW50aWFscykgeworICAgICAgICAgICAgbV91c2VyID0gdXJsLnVzZXIoKTsKKyAgICAg
ICAgICAgIG1fcGFzc3dvcmQgPSB1cmwucGFzcygpOworICAgICAgICAgICAgcmVxdWVzdC5yZW1v
dmVDcmVkZW50aWFscygpOworCisgICAgICAgICAgICBpZiAobV91c2VyLmlzRW1wdHkoKSAmJiBt
X3Bhc3N3b3JkLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBtX2luaXRpYWxDcmVkZW50aWFs
ID0gbV9zZXNzaW9uLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKS5jcmVkZW50aWFsU3RvcmFnZSgp
LmdldChyZXF1ZXN0LnVybCgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBt
X3Nlc3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpLmNyZWRlbnRpYWxTdG9yYWdlKCkuc2V0
KENyZWRlbnRpYWwobV91c2VyLCBtX3Bhc3N3b3JkLCBDcmVkZW50aWFsUGVyc2lzdGVuY2VOb25l
KSwgcmVxdWVzdC51cmwoKSk7CisgICAgICAgIH0KKyAgICAgICAgYXBwbHlBdXRoZW50aWNhdGlv
blRvUmVxdWVzdChyZXF1ZXN0KTsKKyAgICB9CisgICAgY3JlYXRlUmVxdWVzdChyZXF1ZXN0KTsK
K30KKworTmV0d29ya0RhdGFUYXNrOjp+TmV0d29ya0RhdGFUYXNrKCkKK3sKKyAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVCghbV9jbGllbnQpOworICAgIGNsZWFyUmVxdWVz
dCgpOworICAgIG1fc2Vzc2lvbi0+bV9kYXRhVGFza1NldC5yZW1vdmUodGhpcyk7Cit9CisKK3Zv
aWQgTmV0d29ya0RhdGFUYXNrOjpzY2hlZHVsZUZhaWx1cmUoRmFpbHVyZVR5cGUgdHlwZSkKK3sK
KyAgICBBU1NFUlQodHlwZSAhPSBOb0ZhaWx1cmUpOworICAgIG1fc2NoZWR1bGVkRmFpbHVyZVR5
cGUgPSB0eXBlOworICAgIG1fZmFpbHVyZVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKwordm9p
ZCBOZXR3b3JrRGF0YVRhc2s6OmZhaWx1cmVUaW1lckZpcmVkKCkKK3sKKyAgICBSZWZQdHI8TmV0
d29ya0RhdGFUYXNrPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworCisgICAgc3dpdGNoIChtX3NjaGVk
dWxlZEZhaWx1cmVUeXBlKSB7CisgICAgY2FzZSBCbG9ja2VkRmFpbHVyZToKKyAgICAgICAgbV9z
Y2hlZHVsZWRGYWlsdXJlVHlwZSA9IE5vRmFpbHVyZTsKKyAgICAgICAgaWYgKG1fY2xpZW50KQor
ICAgICAgICAgICAgbV9jbGllbnQtPndhc0Jsb2NrZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgSW52YWxpZFVSTEZhaWx1cmU6CisgICAgICAgIG1fc2NoZWR1bGVkRmFpbHVyZVR5cGUg
PSBOb0ZhaWx1cmU7CisgICAgICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgICAgIG1fY2xpZW50
LT5jYW5ub3RTaG93VVJMKCk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE5vRmFpbHVyZToK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworU3RyaW5nIE5ldHdvcmtEYXRhVGFzazo6c3Vn
Z2VzdGVkRmlsZW5hbWUoKQoreworICAgIGlmICghbV9zdWdnZXN0ZWRGaWxlbmFtZS5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiBtX3N1Z2dlc3RlZEZpbGVuYW1lOworCisgICAgU3RyaW5nIHN1
Z2dlc3RlZEZpbGVuYW1lID0gbV9yZXNwb25zZS5zdWdnZXN0ZWRGaWxlbmFtZSgpOworICAgIGlm
ICghc3VnZ2VzdGVkRmlsZW5hbWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gc3VnZ2VzdGVk
RmlsZW5hbWU7CisKKyAgICByZXR1cm4gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKG1fcmVzcG9u
c2UudXJsKCkubGFzdFBhdGhDb21wb25lbnQoKSk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNr
OjpzZXRTdWdnZXN0ZWRGaWxlbmFtZShjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZE5hbWUpCit7Cisg
ICAgbV9zdWdnZXN0ZWRGaWxlbmFtZSA9IHN1Z2dlc3RlZE5hbWU7Cit9CisKK3ZvaWQgTmV0d29y
a0RhdGFUYXNrOjpzZXRQZW5kaW5nRG93bmxvYWRMb2NhdGlvbihjb25zdCBTdHJpbmcmIGZpbGVu
YW1lLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmLCBib29sIGFsbG93T3ZlcndyaXRl
KQoreworICAgIG1fcGVuZGluZ0Rvd25sb2FkTG9jYXRpb24gPSBmaWxlbmFtZTsKKyAgICBtX2Fs
bG93T3ZlcndyaXRlRG93bmxvYWQgPSBhbGxvd092ZXJ3cml0ZTsKK30KKworYm9vbCBOZXR3b3Jr
RGF0YVRhc2s6OmFsbG93c1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UmKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBO
ZXR3b3JrRGF0YVRhc2s6OmNyZWF0ZVJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0KQoreworICAgIEdVbmlxdWVQdHI8U291cFVSST4gc291cFVSSSA9IHJlcXVlc3QuY3JlYXRl
U291cFVSSSgpOworICAgIGlmICghc291cFVSSSkgeworICAgICAgICBzY2hlZHVsZUZhaWx1cmUo
SW52YWxpZFVSTEZhaWx1cmUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgR1JlZlB0
cjxTb3VwUmVxdWVzdD4gc291cFJlcXVlc3QgPSBhZG9wdEdSZWYoc291cF9zZXNzaW9uX3JlcXVl
c3RfdXJpKG1fc2Vzc2lvbi0+c291cFNlc3Npb24oKSwgc291cFVSSS5nZXQoKSwgbnVsbHB0cikp
OworICAgIGlmICghc291cFJlcXVlc3QpIHsKKyAgICAgICAgc2NoZWR1bGVGYWlsdXJlKEludmFs
aWRVUkxGYWlsdXJlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHJlcXVlc3QudXBk
YXRlU291cFJlcXVlc3Qoc291cFJlcXVlc3QuZ2V0KCkpOworCisgICAgaWYgKCFyZXF1ZXN0LnVy
bCgpLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkgeworICAgICAgICBtX3NvdXBSZXF1ZXN0ID0g
V1RGTW92ZShzb3VwUmVxdWVzdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBI
VFRQIHJlcXVlc3QuCisgICAgR1JlZlB0cjxTb3VwTWVzc2FnZT4gc291cE1lc3NhZ2UgPSBhZG9w
dEdSZWYoc291cF9yZXF1ZXN0X2h0dHBfZ2V0X21lc3NhZ2UoU09VUF9SRVFVRVNUX0hUVFAoc291
cFJlcXVlc3QuZ2V0KCkpKSk7CisgICAgaWYgKCFzb3VwTWVzc2FnZSkgeworICAgICAgICBzY2hl
ZHVsZUZhaWx1cmUoSW52YWxpZFVSTEZhaWx1cmUpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgcmVxdWVzdC51cGRhdGVTb3VwTWVzc2FnZShzb3VwTWVzc2FnZS5nZXQoKSk7CisgICAg
aWYgKG1fc2hvdWxkQ29udGVudFNuaWZmID09IERvTm90U25pZmZDb250ZW50KQorICAgICAgICBz
b3VwX21lc3NhZ2VfZGlzYWJsZV9mZWF0dXJlKHNvdXBNZXNzYWdlLmdldCgpLCBTT1VQX1RZUEVf
Q09OVEVOVF9TTklGRkVSKTsKKyAgICBpZiAobV91c2VyLmlzRW1wdHkoKSAmJiBtX3Bhc3N3b3Jk
LmlzRW1wdHkoKSAmJiBtX3N0b3JlZENyZWRlbnRpYWxzID09IERvTm90QWxsb3dTdG9yZWRDcmVk
ZW50aWFscykgeworICAgICAgICAvLyBJbiBjYXNlIGNyZWRlbnRpYWwgaXMgbm90IGF2YWlsYWJs
ZSBhbmQgY3JlZGVudGlhbCBzdG9yYWdlIHNob3VsZCBub3QgdG8gYmUgdXNlZCwKKyAgICAgICAg
Ly8gZGlzYWJsZSBhdXRoZW50aWNhdGlvbiBtYW5hZ2VyIHNvIHRoYXQgY3JlZGVudGlhbHMgc3Rv
cmVkIGluIGxpYnNvdXAgYXJlIG5vdCB1c2VkLgorICAgICAgICBzb3VwX21lc3NhZ2VfZGlzYWJs
ZV9mZWF0dXJlKHNvdXBNZXNzYWdlLmdldCgpLCBTT1VQX1RZUEVfQVVUSF9NQU5BR0VSKTsKKyAg
ICB9CisKKyAgICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBhbiBBY2NlcHQgaGVhZGVyIGZvciBzdWJy
ZXNvdXJjZXM7IHNvbWUgc2l0ZXMgd2FudCB0aGlzIHRvIHNlcnZlIHNvbWUgb2YgdGhlaXIgc3Vi
cmVzb3VyY2VzLgorICAgIGlmICghc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X29uZShzb3VwTWVz
c2FnZS0+cmVxdWVzdF9oZWFkZXJzLCAiQWNjZXB0IikpCisgICAgICAgIHNvdXBfbWVzc2FnZV9o
ZWFkZXJzX2FwcGVuZChzb3VwTWVzc2FnZS0+cmVxdWVzdF9oZWFkZXJzLCAiQWNjZXB0IiwgIiov
KiIpOworCisgICAgLy8gSW4gdGhlIGNhc2Ugb2YgWEhSIC5zZW5kKCkgYW5kIC5zZW5kKCIiKSBl
eHBsaWNpdGx5IHRlbGwgbGlic291cCB0byBzZW5kIGEgemVybyBjb250ZW50LWxlbmdodCBoZWFk
ZXIKKyAgICAvLyBmb3IgY29uc2lzdGVuY3kgd2l0aCBvdGhlciBVQSBpbXBsZW1lbnRhdGlvbnMg
bGlrZSBGaXJlZm94LiBJdCdzIGRvbmUgaW4gdGhlIGJhY2tlbmQgaGVyZSBpbnN0ZWFkIG9mCisg
ICAgLy8gaW4gWEhSIGNvZGUgc2luY2UgaW4gWEhSIENPUlMgY2hlY2tpbmcgcHJldmVudHMgdXMg
ZnJvbSB0aGlzIGtpbmQgb2YgbGF0ZSBoZWFkZXIgbWFuaXB1bGF0aW9uLgorICAgIGlmICgoc291
cE1lc3NhZ2UtPm1ldGhvZCA9PSBTT1VQX01FVEhPRF9QT1NUIHx8IHNvdXBNZXNzYWdlLT5tZXRo
b2QgPT0gU09VUF9NRVRIT0RfUFVUKSAmJiAhc291cE1lc3NhZ2UtPnJlcXVlc3RfYm9keS0+bGVu
Z3RoKQorICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19zZXRfY29udGVudF9sZW5ndGgoc291
cE1lc3NhZ2UtPnJlcXVlc3RfaGVhZGVycywgMCk7CisKKyAgICB1bnNpZ25lZCBmbGFncyA9IFNP
VVBfTUVTU0FHRV9OT19SRURJUkVDVDsKKyAgICBzb3VwX21lc3NhZ2Vfc2V0X2ZsYWdzKHNvdXBN
ZXNzYWdlLmdldCgpLCBzdGF0aWNfY2FzdDxTb3VwTWVzc2FnZUZsYWdzPihzb3VwX21lc3NhZ2Vf
Z2V0X2ZsYWdzKHNvdXBNZXNzYWdlLmdldCgpKSB8IGZsYWdzKSk7CisKKyNpZiBTT1VQX0NIRUNL
X1ZFUlNJT04oMiwgNDMsIDEpCisgICAgc291cF9tZXNzYWdlX3NldF9wcmlvcml0eShzb3VwTWVz
c2FnZS5nZXQoKSwgdG9Tb3VwTWVzc2FnZVByaW9yaXR5KHJlcXVlc3QucHJpb3JpdHkoKSkpOwor
I2VuZGlmCisKKyAgICBtX3NvdXBSZXF1ZXN0ID0gV1RGTW92ZShzb3VwUmVxdWVzdCk7CisgICAg
bV9zb3VwTWVzc2FnZSA9IFdURk1vdmUoc291cE1lc3NhZ2UpOworCisgICAgZ19zaWduYWxfY29u
bmVjdChtX3NvdXBNZXNzYWdlLmdldCgpLCAibm90aWZ5Ojp0bHMtZXJyb3JzIiwgR19DQUxMQkFD
Syh0bHNFcnJvcnNDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0
KG1fc291cE1lc3NhZ2UuZ2V0KCksICJnb3QtaGVhZGVycyIsIEdfQ0FMTEJBQ0soZ290SGVhZGVy
c0NhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdChtX3NvdXBNZXNzYWdlLmdl
dCgpLCAid3JvdGUtYm9keS1kYXRhIiwgR19DQUxMQkFDSyh3cm90ZUJvZHlEYXRhQ2FsbGJhY2sp
LCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fc2Vzc2lvbi0+c291cFNlc3Npb24oKSwg
ImF1dGhlbnRpY2F0ZSIsICBHX0NBTExCQUNLKGF1dGhlbnRpY2F0ZUNhbGxiYWNrKSwgdGhpcyk7
CisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCisgICAgZ19zaWduYWxfY29ubmVjdChtX3NvdXBNZXNz
YWdlLmdldCgpLCAibmV0d29yay1ldmVudCIsIEdfQ0FMTEJBQ0sobmV0d29ya0V2ZW50Q2FsbGJh
Y2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fc291cE1lc3NhZ2UuZ2V0KCksICJy
ZXN0YXJ0ZWQiLCBHX0NBTExCQUNLKHJlc3RhcnRlZENhbGxiYWNrKSwgdGhpcyk7CisjaWYgU09V
UF9DSEVDS19WRVJTSU9OKDIsIDQ5LCA5MSkKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fc291cE1l
c3NhZ2UuZ2V0KCksICJzdGFydGluZyIsIEdfQ0FMTEJBQ0soc3RhcnRpbmdDYWxsYmFjayksIHRo
aXMpOworI2Vsc2UKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fc2Vzc2lvbi0+c291cFNlc3Npb24o
KSwgInJlcXVlc3Qtc3RhcnRlZCIsIEdfQ0FMTEJBQ0socmVxdWVzdFN0YXJ0ZWRDYWxsYmFjayks
IHRoaXMpOworI2VuZGlmCisjZW5kaWYKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2s6OmNsZWFy
UmVxdWVzdCgpCit7CisgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9zdGF0ZSA9IFN0YXRlOjpDb21wbGV0ZWQ7CisKKyAgICBzdG9w
VGltZW91dCgpOworICAgIG1fcGVuZGluZ1Jlc3VsdCA9IG51bGxwdHI7CisgICAgbV9zb3VwUmVx
dWVzdCA9IG51bGxwdHI7CisgICAgbV9pbnB1dFN0cmVhbSA9IG51bGxwdHI7CisgICAgbV9tdWx0
aXBhcnRJbnB1dFN0cmVhbSA9IG51bGxwdHI7CisgICAgbV9kb3dubG9hZE91dHB1dFN0cmVhbSA9
IG51bGxwdHI7CisgICAgZ19jYW5jZWxsYWJsZV9jYW5jZWwobV9jYW5jZWxsYWJsZS5nZXQoKSk7
CisgICAgbV9jYW5jZWxsYWJsZSA9IG51bGxwdHI7CisgICAgaWYgKG1fc291cE1lc3NhZ2UpIHsK
KyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fc291cE1lc3Nh
Z2UuZ2V0KCksIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIG51bGxwdHIsIG51bGxwdHIsIHRo
aXMpOworICAgICAgICBzb3VwX3Nlc3Npb25fY2FuY2VsX21lc3NhZ2UobV9zZXNzaW9uLT5zb3Vw
U2Vzc2lvbigpLCBtX3NvdXBNZXNzYWdlLmdldCgpLCBTT1VQX1NUQVRVU19DQU5DRUxMRUQpOwor
ICAgICAgICBtX3NvdXBNZXNzYWdlID0gbnVsbHB0cjsKKyAgICB9CisgICAgZ19zaWduYWxfaGFu
ZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fc2Vzc2lvbi0+c291cFNlc3Npb24oKSwgR19TSUdO
QUxfTUFUQ0hfREFUQSwgMCwgMCwgbnVsbHB0ciwgbnVsbHB0ciwgdGhpcyk7Cit9CisKK3ZvaWQg
TmV0d29ya0RhdGFUYXNrOjpyZXN1bWUoKQoreworICAgIEFTU0VSVChtX3N0YXRlICE9IFN0YXRl
OjpSdW5uaW5nKTsKKyAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IG1fc3Rh
dGUgPT0gU3RhdGU6OkNvbXBsZXRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zdGF0ZSA9
IFN0YXRlOjpSdW5uaW5nOworCisgICAgaWYgKG1fc2NoZWR1bGVkRmFpbHVyZVR5cGUgIT0gTm9G
YWlsdXJlKSB7CisgICAgICAgIEFTU0VSVChtX2ZhaWx1cmVUaW1lci5pc0FjdGl2ZSgpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN0YXJ0VGltZW91dCgpOworCisgICAgUmVmUHRy
PE5ldHdvcmtEYXRhVGFzaz4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBpZiAobV9zb3VwUmVx
dWVzdCAmJiAhbV9jYW5jZWxsYWJsZSkgeworICAgICAgICBtX2NhbmNlbGxhYmxlID0gYWRvcHRH
UmVmKGdfY2FuY2VsbGFibGVfbmV3KCkpOworICAgICAgICBzb3VwX3JlcXVlc3Rfc2VuZF9hc3lu
YyhtX3NvdXBSZXF1ZXN0LmdldCgpLCBtX2NhbmNlbGxhYmxlLmdldCgpLCByZWludGVycHJldF9j
YXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KHNlbmRSZXF1ZXN0Q2FsbGJhY2spLCBwcm90ZWN0ZWRU
aGlzLmxlYWtSZWYoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9wZW5k
aW5nUmVzdWx0KSB7CisgICAgICAgIEdSZWZQdHI8R0FzeW5jUmVzdWx0PiBwZW5kaW5nUmVzdWx0
ID0gV1RGTW92ZShtX3BlbmRpbmdSZXN1bHQpOworICAgICAgICBpZiAobV9pbnB1dFN0cmVhbSkK
KyAgICAgICAgICAgIHJlYWRDYWxsYmFjayhtX2lucHV0U3RyZWFtLmdldCgpLCBwZW5kaW5nUmVz
dWx0LmdldCgpLCBwcm90ZWN0ZWRUaGlzLmxlYWtSZWYoKSk7CisgICAgICAgIGVsc2UgaWYgKG1f
bXVsdGlwYXJ0SW5wdXRTdHJlYW0pCisgICAgICAgICAgICByZXF1ZXN0TmV4dFBhcnRDYWxsYmFj
ayhtX211bHRpcGFydElucHV0U3RyZWFtLmdldCgpLCBwZW5kaW5nUmVzdWx0LmdldCgpLCBwcm90
ZWN0ZWRUaGlzLmxlYWtSZWYoKSk7CisgICAgICAgIGVsc2UgaWYgKG1fc291cFJlcXVlc3QpCisg
ICAgICAgICAgICBzZW5kUmVxdWVzdENhbGxiYWNrKG1fc291cFJlcXVlc3QuZ2V0KCksIHBlbmRp
bmdSZXN1bHQuZ2V0KCksIHByb3RlY3RlZFRoaXMubGVha1JlZigpKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIE5ldHdv
cmtEYXRhVGFzazo6c3VzcGVuZCgpCit7CisgICAgQVNTRVJUKG1fc3RhdGUgIT0gU3RhdGU6OlN1
c3BlbmRlZCk7CisgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCBtX3N0YXRl
ID09IFN0YXRlOjpDb21wbGV0ZWQpCisgICAgICAgIHJldHVybjsKKyAgICBtX3N0YXRlID0gU3Rh
dGU6OlN1c3BlbmRlZDsKKworICAgIHN0b3BUaW1lb3V0KCk7Cit9CisKK3ZvaWQgTmV0d29ya0Rh
dGFUYXNrOjpjYW5jZWwoKQoreworICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpDYW5jZWxpbmcg
fHwgbV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGxldGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X3N0YXRlID0gU3RhdGU6OkNhbmNlbGluZzsKKworICAgIGlmIChtX3NvdXBNZXNzYWdlKQorICAg
ICAgICBzb3VwX3Nlc3Npb25fY2FuY2VsX21lc3NhZ2UobV9zZXNzaW9uLT5zb3VwU2Vzc2lvbigp
LCBtX3NvdXBNZXNzYWdlLmdldCgpLCBTT1VQX1NUQVRVU19DQU5DRUxMRUQpOworCisgICAgZ19j
YW5jZWxsYWJsZV9jYW5jZWwobV9jYW5jZWxsYWJsZS5nZXQoKSk7CisKKyAgICBpZiAoaXNEb3du
bG9hZCgpKQorICAgICAgICBjbGVhbkRvd25sb2FkRmlsZXMoKTsKK30KKwordm9pZCBOZXR3b3Jr
RGF0YVRhc2s6OmludmFsaWRhdGVBbmRDYW5jZWwoKQoreworICAgIGNhbmNlbCgpOworICAgIGNs
ZWFyUmVxdWVzdCgpOworfQorCitOZXR3b3JrRGF0YVRhc2s6OlN0YXRlIE5ldHdvcmtEYXRhVGFz
azo6c3RhdGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3N0YXRlOworfQorCit2b2lkIE5ldHdv
cmtEYXRhVGFzazo6dGltZW91dEZpcmVkKCkKK3sKKyAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6
Q2FuY2VsaW5nIHx8IG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZCB8fCAhbV9jbGllbnQpIHsK
KyAgICAgICAgY2xlYXJSZXF1ZXN0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBS
ZWZQdHI8TmV0d29ya0RhdGFUYXNrPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIGludmFsaWRh
dGVBbmRDYW5jZWwoKTsKKyAgICBtX2NsaWVudC0+ZGlkQ29tcGxldGVXaXRoRXJyb3IoUmVzb3Vy
Y2VFcnJvcjo6dGltZW91dEVycm9yKG1fZmlyc3RSZXF1ZXN0LnVybCgpKSk7Cit9CisKK3ZvaWQg
TmV0d29ya0RhdGFUYXNrOjpzdGFydFRpbWVvdXQoKQoreworICAgIGlmIChtX2ZpcnN0UmVxdWVz
dC50aW1lb3V0SW50ZXJ2YWwoKSA+IDApCisgICAgICAgIG1fdGltZW91dFNvdXJjZS5zdGFydE9u
ZVNob3QobV9maXJzdFJlcXVlc3QudGltZW91dEludGVydmFsKCkpOworfQorCit2b2lkIE5ldHdv
cmtEYXRhVGFzazo6c3RvcFRpbWVvdXQoKQoreworICAgIG1fdGltZW91dFNvdXJjZS5zdG9wKCk7
Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpzZW5kUmVxdWVzdENhbGxiYWNrKFNvdXBSZXF1
ZXN0KiBzb3VwUmVxdWVzdCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIE5ldHdvcmtEYXRhVGFzayog
dGFzaykKK3sKKyAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrPiBwcm90ZWN0ZWRUaGlzID0gYWRv
cHRSZWYodGFzayk7CisgICAgaWYgKHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNhbmNlbGluZyB8
fCB0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDb21wbGV0ZWQgfHwgIXRhc2stPm1fY2xpZW50KSB7
CisgICAgICAgIHRhc2stPmNsZWFyUmVxdWVzdCgpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIEFTU0VSVChzb3VwUmVxdWVzdCA9PSB0YXNrLT5tX3NvdXBSZXF1ZXN0LmdldCgpKTsKKwor
ICAgIGlmICh0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpTdXNwZW5kZWQpIHsKKyAgICAgICAgQVNT
RVJUKCF0YXNrLT5tX3BlbmRpbmdSZXN1bHQpOworICAgICAgICB0YXNrLT5tX3BlbmRpbmdSZXN1
bHQgPSByZXN1bHQ7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBHVW5pcXVlT3V0UHRy
PEdFcnJvcj4gZXJyb3I7CisgICAgR1JlZlB0cjxHSW5wdXRTdHJlYW0+IGlucHV0U3RyZWFtID0g
YWRvcHRHUmVmKHNvdXBfcmVxdWVzdF9zZW5kX2ZpbmlzaChzb3VwUmVxdWVzdCwgcmVzdWx0LCAm
ZXJyb3Iub3V0UHRyKCkpKTsKKyAgICBpZiAoZXJyb3IpCisgICAgICAgIHRhc2stPmRpZEZhaWwo
UmVzb3VyY2VFcnJvcjo6aHR0cEVycm9yKHRhc2stPm1fc291cE1lc3NhZ2UuZ2V0KCksIGVycm9y
LmdldCgpLCBzb3VwUmVxdWVzdCkpOworICAgIGVsc2UKKyAgICAgICAgdGFzay0+ZGlkU2VuZFJl
cXVlc3QoV1RGTW92ZShpbnB1dFN0cmVhbSkpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6
ZGlkU2VuZFJlcXVlc3QoR1JlZlB0cjxHSW5wdXRTdHJlYW0+JiYgaW5wdXRTdHJlYW0pCit7Cisg
ICAgaWYgKG1fc291cE1lc3NhZ2UpIHsKKyAgICAgICAgaWYgKG1fc2hvdWxkQ29udGVudFNuaWZm
ID09IFNuaWZmQ29udGVudCAmJiBtX3NvdXBNZXNzYWdlLT5zdGF0dXNfY29kZSAhPSBTT1VQX1NU
QVRVU19OT1RfTU9ESUZJRUQpCisgICAgICAgICAgICBtX3Jlc3BvbnNlLnNldFNuaWZmZWRDb250
ZW50VHlwZShzb3VwX3JlcXVlc3RfZ2V0X2NvbnRlbnRfdHlwZShtX3NvdXBSZXF1ZXN0LmdldCgp
KSk7CisgICAgICAgIG1fcmVzcG9uc2UudXBkYXRlRnJvbVNvdXBNZXNzYWdlKG1fc291cE1lc3Nh
Z2UuZ2V0KCkpOworCisgICAgICAgIGlmIChzaG91bGRTdGFydEhUVFBSZWRpcmVjdGlvbigpKSB7
CisgICAgICAgICAgICBtX2lucHV0U3RyZWFtID0gV1RGTW92ZShpbnB1dFN0cmVhbSk7CisgICAg
ICAgICAgICBza2lwSW5wdXRTdHJlYW1Gb3JSZWRpcmVjdGlvbigpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fcmVzcG9uc2UuaXNNdWx0aXBhcnQoKSkK
KyAgICAgICAgICAgIG1fbXVsdGlwYXJ0SW5wdXRTdHJlYW0gPSBhZG9wdEdSZWYoc291cF9tdWx0
aXBhcnRfaW5wdXRfc3RyZWFtX25ldyhtX3NvdXBNZXNzYWdlLmdldCgpLCBpbnB1dFN0cmVhbS5n
ZXQoKSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2lucHV0U3RyZWFtID0gV1RGTW92
ZShpbnB1dFN0cmVhbSk7CisKKyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICAgICAgbV9yZXNw
b25zZS5uZXR3b3JrTG9hZFRpbWluZygpLnJlc3BvbnNlU3RhcnQgPSBtb25vdG9uaWNhbGx5SW5j
cmVhc2luZ1RpbWVNUygpIC0gbV9zdGFydFRpbWU7CisjZW5kaWYKKyAgICB9IGVsc2UgeworICAg
ICAgICBtX3Jlc3BvbnNlLnNldFVSTChtX2ZpcnN0UmVxdWVzdC51cmwoKSk7CisgICAgICAgIGNv
bnN0IGdjaGFyKiBjb250ZW50VHlwZSA9IHNvdXBfcmVxdWVzdF9nZXRfY29udGVudF90eXBlKG1f
c291cFJlcXVlc3QuZ2V0KCkpOworICAgICAgICBtX3Jlc3BvbnNlLnNldE1pbWVUeXBlKGV4dHJh
Y3RNSU1FVHlwZUZyb21NZWRpYVR5cGUoY29udGVudFR5cGUpKTsKKyAgICAgICAgbV9yZXNwb25z
ZS5zZXRUZXh0RW5jb2RpbmdOYW1lKGV4dHJhY3RDaGFyc2V0RnJvbU1lZGlhVHlwZShjb250ZW50
VHlwZSkpOworICAgICAgICBtX3Jlc3BvbnNlLnNldEV4cGVjdGVkQ29udGVudExlbmd0aChzb3Vw
X3JlcXVlc3RfZ2V0X2NvbnRlbnRfbGVuZ3RoKG1fc291cFJlcXVlc3QuZ2V0KCkpKTsKKworICAg
ICAgICBtX2lucHV0U3RyZWFtID0gV1RGTW92ZShpbnB1dFN0cmVhbSk7CisgICAgfQorCisgICAg
ZGlkUmVjZWl2ZVJlc3BvbnNlKCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRSZWNl
aXZlUmVzcG9uc2UoKQoreworICAgIEFTU0VSVCghbV9yZXNwb25zZS5pc051bGwoKSk7CisKKyAg
ICBhdXRvIHJlc3BvbnNlID0gUmVzb3VyY2VSZXNwb25zZShtX3Jlc3BvbnNlKTsKKyAgICBtX2Ns
aWVudC0+ZGlkUmVjZWl2ZVJlc3BvbnNlTmV0d29ya1Nlc3Npb24oV1RGTW92ZShyZXNwb25zZSks
IFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldKFBvbGljeUFjdGlvbiBwb2xp
Y3lBY3Rpb24pIHsKKyAgICAgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCBt
X3N0YXRlID09IFN0YXRlOjpDb21wbGV0ZWQpIHsKKyAgICAgICAgICAgIGNsZWFyUmVxdWVzdCgp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChwb2xp
Y3lBY3Rpb24pIHsKKyAgICAgICAgY2FzZSBQb2xpY3lBY3Rpb246OlBvbGljeVVzZToKKyAgICAg
ICAgICAgIGlmIChtX2lucHV0U3RyZWFtKQorICAgICAgICAgICAgICAgIHJlYWQoKTsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKG1fbXVsdGlwYXJ0SW5wdXRTdHJlYW0pCisgICAgICAgICAgICAgICAg
cmVxdWVzdE5leHRQYXJ0KCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBv
bGljeUFjdGlvbjo6UG9saWN5SWdub3JlOgorICAgICAgICAgICAgY2xlYXJSZXF1ZXN0KCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQb2xpY3lBY3Rpb246OlBvbGljeURvd25s
b2FkOgorICAgICAgICAgICAgZG93bmxvYWQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgfSk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjp0bHNFcnJvcnNDaGFuZ2Vk
Q2FsbGJhY2soU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlLCBHUGFyYW1TcGVjKiwgTmV0d29ya0Rh
dGFUYXNrKiB0YXNrKQoreworICAgIGlmICh0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDYW5jZWxp
bmcgfHwgdGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICF0YXNrLT5tX2NsaWVu
dCkgeworICAgICAgICB0YXNrLT5jbGVhclJlcXVlc3QoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIEFTU0VSVChzb3VwTWVzc2FnZSA9PSB0YXNrLT5tX3NvdXBNZXNzYWdlLmdldCgp
KTsKKyAgICB0YXNrLT50bHNFcnJvcnNDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFU
YXNrOjp0bHNFcnJvcnNDaGFuZ2VkKCkKK3sKKyAgICBBU1NFUlQobV9zb3VwUmVxdWVzdCk7Cisg
ICAgU291cE5ldHdvcmtTZXNzaW9uOjpjaGVja1RMU0Vycm9ycyhtX3NvdXBSZXF1ZXN0LmdldCgp
LCBtX3NvdXBNZXNzYWdlLmdldCgpLCBbdGhpc10gKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9y
KSB7CisgICAgICAgIGlmIChlcnJvci5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAg
ICAgICBpbnZhbGlkYXRlQW5kQ2FuY2VsKCk7CisgICAgICAgIG1fY2xpZW50LT5kaWRDb21wbGV0
ZVdpdGhFcnJvcihlcnJvcik7CisgICAgfSk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjph
cHBseUF1dGhlbnRpY2F0aW9uVG9SZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sK
KyAgICAvLyBXZSBhbHdheXMgcHV0IHRoZSBjcmVkZW50aWFscyBpbnRvIHRoZSBVUkwuIEluIHRo
ZSBDb2NhIHBvcnQgSFRUUCBmYW1pbHkgY3JlZGVudGlhbHMgYXJlIGFwcGxpZWQgaW4KKyAgICAv
LyB0aGUgZGlkUmVjZWl2ZUNoYWxsZW5nZSBjYWxsYmFjaywgYnV0IGxpYnNvdXAgcmVxdWlyZXMg
dXMgdG8gdXNlIHRoaXMgbWV0aG9kIHRvIG92ZXJyaWRlCisgICAgLy8gYW55IHByZXZpb3VzbHkg
cmVtZW1iZXJlZCBjcmVkZW50aWFscy4gSXQgaGFzIGl0cyBvd24gcGVyLXNlc3Npb24gY3JlZGVu
dGlhbCBzdG9yYWdlLgorICAgIGF1dG8gdXJsID0gcmVxdWVzdC51cmwoKTsKKyAgICBpZiAoIW1f
aW5pdGlhbENyZWRlbnRpYWwuaXNFbXB0eSgpKSB7CisgICAgICAgIHVybC5zZXRVc2VyKG1faW5p
dGlhbENyZWRlbnRpYWwudXNlcigpKTsKKyAgICAgICAgdXJsLnNldFBhc3MobV9pbml0aWFsQ3Jl
ZGVudGlhbC5wYXNzd29yZCgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICB1cmwuc2V0VXNlciht
X3VzZXIpOworICAgICAgICB1cmwuc2V0UGFzcyhtX3Bhc3N3b3JkKTsKKyAgICB9CisKKyAgICBt
X3VzZXIgPSBTdHJpbmcoKTsKKyAgICBtX3Bhc3N3b3JkID0gU3RyaW5nKCk7CisKKyAgICByZXF1
ZXN0LnNldFVSTCh1cmwpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6YXV0aGVudGljYXRl
Q2FsbGJhY2soU291cFNlc3Npb24qIHNlc3Npb24sIFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSwg
U291cEF1dGgqIHNvdXBBdXRoLCBnYm9vbGVhbiByZXRyeWluZywgTmV0d29ya0RhdGFUYXNrKiB0
YXNrKQoreworICAgIEFTU0VSVChzZXNzaW9uID09IHRhc2stPm1fc2Vzc2lvbi0+c291cFNlc3Np
b24oKSk7CisgICAgaWYgKHNvdXBNZXNzYWdlICE9IHRhc2stPm1fc291cE1lc3NhZ2UuZ2V0KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmICh0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDYW5j
ZWxpbmcgfHwgdGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICF0YXNrLT5tX2Ns
aWVudCkgeworICAgICAgICB0YXNrLT5jbGVhclJlcXVlc3QoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIHRhc2stPmF1dGhlbnRpY2F0ZShBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShz
b3VwTWVzc2FnZSwgc291cEF1dGgsIHJldHJ5aW5nKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9v
bCBpc0F1dGhlbnRpY2F0aW9uRmFpbHVyZVN0YXR1c0NvZGUoaW50IGh0dHBTdGF0dXNDb2RlKQor
eworICAgIHJldHVybiBodHRwU3RhdHVzQ29kZSA9PSBTT1VQX1NUQVRVU19QUk9YWV9BVVRIRU5U
SUNBVElPTl9SRVFVSVJFRCB8fCBodHRwU3RhdHVzQ29kZSA9PSBTT1VQX1NUQVRVU19VTkFVVEhP
UklaRUQ7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjphdXRoZW50aWNhdGUoQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UmJiBjaGFsbGVuZ2UpCit7CisgICAgQVNTRVJUKG1fc291cE1lc3NhZ2Up
OworICAgIGlmIChtX3N0b3JlZENyZWRlbnRpYWxzID09IEFsbG93U3RvcmVkQ3JlZGVudGlhbHMp
IHsKKyAgICAgICAgaWYgKCFtX2luaXRpYWxDcmVkZW50aWFsLmlzRW1wdHkoKSB8fCBjaGFsbGVu
Z2UucHJldmlvdXNGYWlsdXJlQ291bnQoKSkgeworICAgICAgICAgICAgLy8gVGhlIHN0b3JlZCBj
cmVkZW50aWFsIHdhc24ndCBhY2NlcHRlZCwgc3RvcCB1c2luZyBpdC4gVGhlcmUgaXMgYSByYWNl
IGNvbmRpdGlvbgorICAgICAgICAgICAgLy8gaGVyZSwgc2luY2UgYSBkaWZmZXJlbnQgY3JlZGVu
dGlhbCBtaWdodCBoYXZlIGFscmVhZHkgYmVlbiBzdG9yZWQgYnkgYW5vdGhlcgorICAgICAgICAg
ICAgLy8gTmV0d29ya0RhdGFUYXNrLCBidXQgdGhlIG9ic2VydmFibGUgZWZmZWN0IHNob3VsZCBi
ZSB2ZXJ5IG1pbm9yLCBpZiBhbnkuCisgICAgICAgICAgICBtX3Nlc3Npb24tPm5ldHdvcmtTdG9y
YWdlU2Vzc2lvbigpLmNyZWRlbnRpYWxTdG9yYWdlKCkucmVtb3ZlKGNoYWxsZW5nZS5wcm90ZWN0
aW9uU3BhY2UoKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWNoYWxsZW5nZS5wcmV2aW91
c0ZhaWx1cmVDb3VudCgpKSB7CisgICAgICAgICAgICBhdXRvIGNyZWRlbnRpYWwgPSBtX3Nlc3Np
b24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpLmNyZWRlbnRpYWxTdG9yYWdlKCkuZ2V0KGNoYWxs
ZW5nZS5wcm90ZWN0aW9uU3BhY2UoKSk7CisgICAgICAgICAgICBpZiAoIWNyZWRlbnRpYWwuaXNF
bXB0eSgpICYmIGNyZWRlbnRpYWwgIT0gbV9pbml0aWFsQ3JlZGVudGlhbCkgeworICAgICAgICAg
ICAgICAgIEFTU0VSVChjcmVkZW50aWFsLnBlcnNpc3RlbmNlKCkgPT0gQ3JlZGVudGlhbFBlcnNp
c3RlbmNlTm9uZSk7CisKKyAgICAgICAgICAgICAgICBpZiAoaXNBdXRoZW50aWNhdGlvbkZhaWx1
cmVTdGF0dXNDb2RlKGNoYWxsZW5nZS5mYWlsdXJlUmVzcG9uc2UoKS5odHRwU3RhdHVzQ29kZSgp
KSkgeworICAgICAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgY3JlZGVudGlhbCBiYWNrLCBw
b3NzaWJseSBhZGRpbmcgaXQgYXMgYSBkZWZhdWx0IGZvciB0aGlzIGRpcmVjdG9yeS4KKyAgICAg
ICAgICAgICAgICAgICAgbV9zZXNzaW9uLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKS5jcmVkZW50
aWFsU3RvcmFnZSgpLnNldChjcmVkZW50aWFsLCBjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCks
IGNoYWxsZW5nZS5mYWlsdXJlUmVzcG9uc2UoKS51cmwoKSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIHNvdXBfYXV0aF9hdXRoZW50aWNhdGUoY2hhbGxlbmdlLnNvdXBBdXRo
KCksIGNyZWRlbnRpYWwudXNlcigpLnV0ZjgoKS5kYXRhKCksIGNyZWRlbnRpYWwucGFzc3dvcmQo
KS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzb3VwX3Nlc3Npb25fcGF1c2VfbWVzc2FnZShtX3Nl
c3Npb24tPnNvdXBTZXNzaW9uKCksIG1fc291cE1lc3NhZ2UuZ2V0KCkpOworCisgICAgLy8gV2Ug
Y291bGQgYWxzbyBkbyB0aGlzIGJlZm9yZSB3ZSBldmVuIHN0YXJ0IHRoZSByZXF1ZXN0LCBidXQg
dGhhdCB3b3VsZCBiZSBhdCB0aGUgZXhwZW5zZQorICAgIC8vIG9mIGFsbCByZXF1ZXN0IGxhdGVu
Y3ksIHZlcnN1cyBhIG9uZS10aW1lIGxhdGVuY3kgZm9yIHRoZSBzbWFsbCBzdWJzZXQgb2YgcmVx
dWVzdHMgdGhhdAorICAgIC8vIHVzZSBIVFRQIGF1dGhlbnRpY2F0aW9uLiBJbiB0aGUgZW5kLCB0
aGlzIGRvZXNuJ3QgbWF0dGVyIG11Y2gsIGJlY2F1c2UgcGVyc2lzdGVudCBjcmVkZW50aWFscwor
ICAgIC8vIHdpbGwgYmVjb21lIHNlc3Npb24gY3JlZGVudGlhbHMgYWZ0ZXIgdGhlIGZpcnN0IHVz
ZS4KKyAgICBpZiAobV9zdG9yZWRDcmVkZW50aWFscyA9PSBBbGxvd1N0b3JlZENyZWRlbnRpYWxz
KSB7CisgICAgICAgIGF1dG8gcHJvdGVjdGlvblNwYWNlID0gY2hhbGxlbmdlLnByb3RlY3Rpb25T
cGFjZSgpOworICAgICAgICBtX3Nlc3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpLmdldENy
ZWRlbnRpYWxGcm9tUGVyc2lzdGVudFN0b3JhZ2UocHJvdGVjdGlvblNwYWNlLAorICAgICAgICAg
ICAgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgYXV0aENoYWxsZW5nZSA9
IFdURk1vdmUoY2hhbGxlbmdlKV0gKENyZWRlbnRpYWwmJiBjcmVkZW50aWFsKSBtdXRhYmxlIHsK
KyAgICAgICAgICAgICAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IG1fc3Rh
dGUgPT0gU3RhdGU6OkNvbXBsZXRlZCB8fCAhbV9jbGllbnQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgY2xlYXJSZXF1ZXN0KCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBhdXRoQ2hhbGxlbmdlLnNldFByb3Bvc2VkQ3Jl
ZGVudGlhbChXVEZNb3ZlKGNyZWRlbnRpYWwpKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZUF1
dGhlbnRpY2F0ZShXVEZNb3ZlKGF1dGhDaGFsbGVuZ2UpKTsKKyAgICAgICAgfSk7CisgICAgfSBl
bHNlCisgICAgICAgIGNvbnRpbnVlQXV0aGVudGljYXRlKFdURk1vdmUoY2hhbGxlbmdlKSk7Cit9
CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpjb250aW51ZUF1dGhlbnRpY2F0ZShBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSYmIGNoYWxsZW5nZSkKK3sKKyAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZUNo
YWxsZW5nZShjaGFsbGVuZ2UsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyks
IGNoYWxsZW5nZV0oQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbiBkaXNwb3NpdGlv
biwgY29uc3QgQ3JlZGVudGlhbCYgY3JlZGVudGlhbCkgeworICAgICAgICBpZiAobV9zdGF0ZSA9
PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZCkgeworICAg
ICAgICAgICAgY2xlYXJSZXF1ZXN0KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBpZiAoZGlzcG9zaXRpb24gPT0gQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNw
b3NpdGlvbjo6Q2FuY2VsKSB7CisgICAgICAgICAgICBjYW5jZWwoKTsKKyAgICAgICAgICAgIGRp
ZEZhaWwoY2FuY2VsbGVkRXJyb3IobV9zb3VwUmVxdWVzdC5nZXQoKSkpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGRpc3Bvc2l0aW9uID09IEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb246OlVzZUNyZWRlbnRpYWwgJiYgIWNyZWRlbnRpYWwu
aXNFbXB0eSgpKSB7CisgICAgICAgICAgICBpZiAobV9zdG9yZWRDcmVkZW50aWFscyA9PSBBbGxv
d1N0b3JlZENyZWRlbnRpYWxzKSB7CisgICAgICAgICAgICAgICAgLy8gRXZlbnR1YWxseSB3ZSB3
aWxsIG1hbmFnZSBwZXItc2Vzc2lvbiBjcmVkZW50aWFscyBvbmx5IGludGVybmFsbHkgb3IgdXNl
IHNvbWUgbmV3bHktZXhwb3NlZCBBUEkgZnJvbSBsaWJzb3VwLAorICAgICAgICAgICAgICAgIC8v
IGJlY2F1c2Ugb25jZSB3ZSBhdXRoZW50aWNhdGUgdmlhIGxpYnNvdXAsIHRoZXJlIGlzIG5vIHdh
eSB0byBpZ25vcmUgaXQgZm9yIGEgcGFydGljdWxhciByZXF1ZXN0LiBSaWdodCBub3csCisgICAg
ICAgICAgICAgICAgLy8gd2UgcGxhY2UgdGhlIGNyZWRlbnRpYWxzIGluIHRoZSBzdG9yZSBldmVu
IHRob3VnaCBsaWJzb3VwIHdpbGwgbmV2ZXIgZmlyZSB0aGUgYXV0aGVudGljYXRlIHNpZ25hbCBh
Z2FpbiBmb3IKKyAgICAgICAgICAgICAgICAvLyB0aGlzIHByb3RlY3Rpb24gc3BhY2UuCisgICAg
ICAgICAgICAgICAgaWYgKGNyZWRlbnRpYWwucGVyc2lzdGVuY2UoKSA9PSBDcmVkZW50aWFsUGVy
c2lzdGVuY2VGb3JTZXNzaW9uIHx8IGNyZWRlbnRpYWwucGVyc2lzdGVuY2UoKSA9PSBDcmVkZW50
aWFsUGVyc2lzdGVuY2VQZXJtYW5lbnQpCisgICAgICAgICAgICAgICAgICAgIG1fc2Vzc2lvbi0+
bmV0d29ya1N0b3JhZ2VTZXNzaW9uKCkuY3JlZGVudGlhbFN0b3JhZ2UoKS5zZXQoY3JlZGVudGlh
bCwgY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZSgpLCBjaGFsbGVuZ2UuZmFpbHVyZVJlc3BvbnNl
KCkudXJsKCkpOworCisgICAgICAgICAgICAgICAgaWYgKGNyZWRlbnRpYWwucGVyc2lzdGVuY2Uo
KSA9PSBDcmVkZW50aWFsUGVyc2lzdGVuY2VQZXJtYW5lbnQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgbV9wcm90ZWN0aW9uU3BhY2VGb3JQZXJzaXN0ZW50U3RvcmFnZSA9IGNoYWxsZW5nZS5wcm90
ZWN0aW9uU3BhY2UoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9jcmVkZW50aWFsRm9yUGVyc2lz
dGVudFN0b3JhZ2UgPSBjcmVkZW50aWFsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgc291cF9hdXRoX2F1dGhlbnRpY2F0ZShjaGFsbGVuZ2Uuc291cEF1
dGgoKSwgY3JlZGVudGlhbC51c2VyKCkudXRmOCgpLmRhdGEoKSwgY3JlZGVudGlhbC5wYXNzd29y
ZCgpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICB9CisKKyAgICAgICAgc291cF9zZXNzaW9uX3Vu
cGF1c2VfbWVzc2FnZShtX3Nlc3Npb24tPnNvdXBTZXNzaW9uKCksIG1fc291cE1lc3NhZ2UuZ2V0
KCkpOworICAgIH0pOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6c2tpcElucHV0U3RyZWFt
Rm9yUmVkaXJlY3Rpb25DYWxsYmFjayhHSW5wdXRTdHJlYW0qIGlucHV0U3RyZWFtLCBHQXN5bmNS
ZXN1bHQqIHJlc3VsdCwgTmV0d29ya0RhdGFUYXNrKiB0YXNrKQoreworICAgIFJlZlB0cjxOZXR3
b3JrRGF0YVRhc2s+IHByb3RlY3RlZFRoaXMgPSBhZG9wdFJlZih0YXNrKTsKKyAgICBpZiAodGFz
ay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6
OkNvbXBsZXRlZCB8fCAhdGFzay0+bV9jbGllbnQpIHsKKyAgICAgICAgdGFzay0+Y2xlYXJSZXF1
ZXN0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQVNTRVJUKGlucHV0U3RyZWFtID09
IHRhc2stPm1faW5wdXRTdHJlYW0uZ2V0KCkpOworCisgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+
IGVycm9yOworICAgIGdzc2l6ZSBieXRlc1NraXBwZWQgPSBnX2lucHV0X3N0cmVhbV9za2lwX2Zp
bmlzaChpbnB1dFN0cmVhbSwgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGlmIChlcnJv
cikKKyAgICAgICAgdGFzay0+ZGlkRmFpbChSZXNvdXJjZUVycm9yOjpnZW5lcmljR0Vycm9yKGVy
cm9yLmdldCgpLCB0YXNrLT5tX3NvdXBSZXF1ZXN0LmdldCgpKSk7CisgICAgZWxzZSBpZiAoYnl0
ZXNTa2lwcGVkID4gMCkKKyAgICAgICAgdGFzay0+c2tpcElucHV0U3RyZWFtRm9yUmVkaXJlY3Rp
b24oKTsKKyAgICBlbHNlCisgICAgICAgIHRhc2stPmRpZEZpbmlzaFNraXBJbnB1dFN0cmVhbUZv
clJlZGlyZWN0aW9uKCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpza2lwSW5wdXRTdHJl
YW1Gb3JSZWRpcmVjdGlvbigpCit7CisgICAgQVNTRVJUKG1faW5wdXRTdHJlYW0pOworICAgIFJl
ZlB0cjxOZXR3b3JrRGF0YVRhc2s+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgZ19pbnB1dF9z
dHJlYW1fc2tpcF9hc3luYyhtX2lucHV0U3RyZWFtLmdldCgpLCBnRGVmYXVsdFJlYWRCdWZmZXJT
aXplLCBHX1BSSU9SSVRZX0RFRkFVTFQsIG1fY2FuY2VsbGFibGUuZ2V0KCksCisgICAgICAgIHJl
aW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4oc2tpcElucHV0U3RyZWFtRm9yUmVk
aXJlY3Rpb25DYWxsYmFjayksIHByb3RlY3RlZFRoaXMubGVha1JlZigpKTsKK30KKwordm9pZCBO
ZXR3b3JrRGF0YVRhc2s6OmRpZEZpbmlzaFNraXBJbnB1dFN0cmVhbUZvclJlZGlyZWN0aW9uKCkK
K3sKKyAgICBnX2lucHV0X3N0cmVhbV9jbG9zZShtX2lucHV0U3RyZWFtLmdldCgpLCBudWxscHRy
LCBudWxscHRyKTsKKyAgICBjb250aW51ZUhUVFBSZWRpcmVjdGlvbigpOworfQorCitzdGF0aWMg
Ym9vbCBzaG91bGRSZWRpcmVjdEFzR0VUKFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBib29sIGNyb3Nz
T3JpZ2luKQoreworICAgIGlmIChtZXNzYWdlLT5tZXRob2QgPT0gU09VUF9NRVRIT0RfR0VUIHx8
IG1lc3NhZ2UtPm1ldGhvZCA9PSBTT1VQX01FVEhPRF9IRUFEKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBzd2l0Y2ggKG1lc3NhZ2UtPnN0YXR1c19jb2RlKSB7CisgICAgY2FzZSBTT1VQ
X1NUQVRVU19TRUVfT1RIRVI6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgU09VUF9T
VEFUVVNfRk9VTkQ6CisgICAgY2FzZSBTT1VQX1NUQVRVU19NT1ZFRF9QRVJNQU5FTlRMWToKKyAg
ICAgICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCA9PSBTT1VQX01FVEhPRF9QT1NUKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChjcm9zc09y
aWdpbiAmJiBtZXNzYWdlLT5tZXRob2QgPT0gU09VUF9NRVRIT0RfREVMRVRFKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBOZXR3b3JrRGF0YVRh
c2s6OnNob3VsZFN0YXJ0SFRUUFJlZGlyZWN0aW9uKCkKK3sKKyAgICBBU1NFUlQobV9zb3VwTWVz
c2FnZSk7CisgICAgQVNTRVJUKCFtX3Jlc3BvbnNlLmlzTnVsbCgpKTsKKworICAgIGF1dG8gc3Rh
dHVzID0gbV9yZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpOworICAgIGlmICghU09VUF9TVEFUVVNf
SVNfUkVESVJFQ1RJT04oc3RhdHVzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8g
U29tZSAzeHggc3RhdHVzIGNvZGVzIGFyZW4ndCBhY3R1YWxseSByZWRpcmVjdHMuCisgICAgaWYg
KHN0YXR1cyA9PSAzMDAgfHwgc3RhdHVzID09IDMwNCB8fCBzdGF0dXMgPT0gMzA1IHx8IHN0YXR1
cyA9PSAzMDYpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX3Jlc3BvbnNlLmh0
dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6TG9jYXRpb24pLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgTmV0d29ya0Rh
dGFUYXNrOjpjb250aW51ZUhUVFBSZWRpcmVjdGlvbigpCit7CisgICAgQVNTRVJUKG1fc291cE1l
c3NhZ2UpOworICAgIEFTU0VSVCghbV9yZXNwb25zZS5pc051bGwoKSk7CisKKyAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgbWF4UmVkaXJlY3RzID0gMjA7CisgICAgaWYgKG1fcmVkaXJlY3RDb3Vu
dCsrID4gbWF4UmVkaXJlY3RzKSB7CisgICAgICAgIGRpZEZhaWwoUmVzb3VyY2VFcnJvcjo6dHJh
bnNwb3J0RXJyb3IobV9zb3VwUmVxdWVzdC5nZXQoKSwgU09VUF9TVEFUVVNfVE9PX01BTllfUkVE
SVJFQ1RTLCAiVG9vIG1hbnkgcmVkaXJlY3RzIikpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QgPSBtX2ZpcnN0UmVxdWVzdDsKKyAgICByZXF1
ZXN0LnNldFVSTChVUkwobV9yZXNwb25zZS51cmwoKSwgbV9yZXNwb25zZS5odHRwSGVhZGVyRmll
bGQoSFRUUEhlYWRlck5hbWU6OkxvY2F0aW9uKSkpOworICAgIHJlcXVlc3Quc2V0Rmlyc3RQYXJ0
eUZvckNvb2tpZXMocmVxdWVzdC51cmwoKSk7CisKKyAgICAvLyBTaG91bGQgbm90IHNldCBSZWZl
cmVyIGFmdGVyIGEgcmVkaXJlY3QgZnJvbSBhIHNlY3VyZSByZXNvdXJjZSB0byBub24tc2VjdXJl
IG9uZS4KKyAgICBpZiAobV9zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0
ICYmICFyZXF1ZXN0LnVybCgpLnByb3RvY29sSXMoImh0dHBzIikgJiYgcHJvdG9jb2xJcyhyZXF1
ZXN0Lmh0dHBSZWZlcnJlcigpLCAiaHR0cHMiKSkKKyAgICAgICAgcmVxdWVzdC5jbGVhckhUVFBS
ZWZlcnJlcigpOworCisgICAgYm9vbCBpc0Nyb3NzT3JpZ2luID0gIXByb3RvY29sSG9zdEFuZFBv
cnRBcmVFcXVhbChtX2ZpcnN0UmVxdWVzdC51cmwoKSwgcmVxdWVzdC51cmwoKSk7CisgICAgaWYg
KCFlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShyZXF1ZXN0Lmh0dHBNZXRob2QoKSwgIkdF
VCIpKSB7CisgICAgICAgIC8vIENoYW5nZSBuZXdSZXF1ZXN0IG1ldGhvZCB0byBHRVQgaWYgY2hh
bmdlIHdhcyBtYWRlIGR1cmluZyBhIHByZXZpb3VzIHJlZGlyZWN0aW9uIG9yIGlmIGN1cnJlbnQg
cmVkaXJlY3Rpb24gc2F5cyBzby4KKyAgICAgICAgaWYgKG1fc291cE1lc3NhZ2UtPm1ldGhvZCA9
PSBTT1VQX01FVEhPRF9HRVQgfHwgIXJlcXVlc3QudXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWls
eSgpIHx8IHNob3VsZFJlZGlyZWN0QXNHRVQobV9zb3VwTWVzc2FnZS5nZXQoKSwgaXNDcm9zc09y
aWdpbikpIHsKKyAgICAgICAgICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhvZCgiR0VUIik7CisgICAg
ICAgICAgICByZXF1ZXN0LnNldEhUVFBCb2R5KG51bGxwdHIpOworICAgICAgICAgICAgcmVxdWVz
dC5jbGVhckhUVFBDb250ZW50VHlwZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgY29uc3Qg
YXV0byYgdXJsID0gcmVxdWVzdC51cmwoKTsKKyAgICBtX3VzZXIgPSB1cmwudXNlcigpOworICAg
IG1fcGFzc3dvcmQgPSB1cmwucGFzcygpOworICAgIG1fbGFzdEhUVFBNZXRob2QgPSByZXF1ZXN0
Lmh0dHBNZXRob2QoKTsKKyAgICByZXF1ZXN0LnJlbW92ZUNyZWRlbnRpYWxzKCk7CisKKyAgICBp
ZiAoaXNDcm9zc09yaWdpbikgeworICAgICAgICAvLyBUaGUgbmV0d29yayBsYXllciBtaWdodCBj
YXJyeSBvdmVyIHNvbWUgaGVhZGVycyBmcm9tIHRoZSBvcmlnaW5hbCByZXF1ZXN0IHRoYXQKKyAg
ICAgICAgLy8gd2Ugd2FudCB0byBzdHJpcCBoZXJlIGJlY2F1c2UgdGhlIHJlZGlyZWN0IGlzIGNy
b3NzLW9yaWdpbi4KKyAgICAgICAgcmVxdWVzdC5jbGVhckhUVFBBdXRob3JpemF0aW9uKCk7Cisg
ICAgICAgIHJlcXVlc3QuY2xlYXJIVFRQT3JpZ2luKCk7CisgICAgfSBlbHNlIGlmICh1cmwucHJv
dG9jb2xJc0luSFRUUEZhbWlseSgpICYmIG1fc3RvcmVkQ3JlZGVudGlhbHMgPT0gQWxsb3dTdG9y
ZWRDcmVkZW50aWFscykgeworICAgICAgICBpZiAobV91c2VyLmlzRW1wdHkoKSAmJiBtX3Bhc3N3
b3JkLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgYXV0byBjcmVkZW50aWFsID0gbV9zZXNzaW9u
LT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKS5jcmVkZW50aWFsU3RvcmFnZSgpLmdldChyZXF1ZXN0
LnVybCgpKTsKKyAgICAgICAgICAgIGlmICghY3JlZGVudGlhbC5pc0VtcHR5KCkpCisgICAgICAg
ICAgICAgICAgbV9pbml0aWFsQ3JlZGVudGlhbCA9IGNyZWRlbnRpYWw7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBjbGVhclJlcXVlc3QoKTsKKworICAgIGF1dG8gcmVzcG9uc2UgPSBSZXNvdXJj
ZVJlc3BvbnNlKG1fcmVzcG9uc2UpOworICAgIG1fY2xpZW50LT53aWxsUGVyZm9ybUhUVFBSZWRp
cmVjdGlvbihXVEZNb3ZlKHJlc3BvbnNlKSwgV1RGTW92ZShyZXF1ZXN0KSwgW3RoaXMsIHByb3Rl
Y3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgaXNDcm9zc09yaWdpbl0oY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiBuZXdSZXF1ZXN0KSB7CisgICAgICAgIGlmIChuZXdSZXF1ZXN0LmlzTnVsbCgpIHx8
IG1fc3RhdGUgPT0gU3RhdGU6OkNhbmNlbGluZykKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBhdXRvIHJlcXVlc3QgPSBuZXdSZXF1ZXN0OworICAgICAgICBpZiAocmVxdWVzdC51cmwo
KS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpIHsKKyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAg
ICAgICAgICAgIGlmIChpc0Nyb3NzT3JpZ2luKQorICAgICAgICAgICAgICAgIG1fc3RhcnRUaW1l
ID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lTVMoKTsKKyNlbmRpZgorICAgICAgICAgICAg
YXBwbHlBdXRoZW50aWNhdGlvblRvUmVxdWVzdChyZXF1ZXN0KTsKKyAgICAgICAgfQorICAgICAg
ICBjcmVhdGVSZXF1ZXN0KHJlcXVlc3QpOworICAgICAgICBpZiAobV9zb3VwUmVxdWVzdCAmJiBt
X3N0YXRlICE9IFN0YXRlOjpTdXNwZW5kZWQpIHsKKyAgICAgICAgICAgIG1fc3RhdGUgPSBTdGF0
ZTo6U3VzcGVuZGVkOworICAgICAgICAgICAgcmVzdW1lKCk7CisgICAgICAgIH0KKyAgICB9KTsK
K30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2s6OnJlYWRDYWxsYmFjayhHSW5wdXRTdHJlYW0qIGlu
cHV0U3RyZWFtLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgTmV0d29ya0RhdGFUYXNrKiB0YXNrKQor
eworICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2s+IHByb3RlY3RlZFRoaXMgPSBhZG9wdFJlZih0
YXNrKTsKKyAgICBpZiAodGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IHRhc2st
PnN0YXRlKCkgPT0gU3RhdGU6OkNvbXBsZXRlZCB8fCAoIXRhc2stPm1fY2xpZW50ICYmICF0YXNr
LT5pc0Rvd25sb2FkKCkpKSB7CisgICAgICAgIHRhc2stPmNsZWFyUmVxdWVzdCgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIEFTU0VSVChpbnB1dFN0cmVhbSA9PSB0YXNrLT5tX2lucHV0
U3RyZWFtLmdldCgpKTsKKworICAgIGlmICh0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpTdXNwZW5k
ZWQpIHsKKyAgICAgICAgQVNTRVJUKCF0YXNrLT5tX3BlbmRpbmdSZXN1bHQpOworICAgICAgICB0
YXNrLT5tX3BlbmRpbmdSZXN1bHQgPSByZXN1bHQ7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgZ3NzaXplIGJ5dGVzUmVhZCA9
IGdfaW5wdXRfc3RyZWFtX3JlYWRfZmluaXNoKGlucHV0U3RyZWFtLCByZXN1bHQsICZlcnJvci5v
dXRQdHIoKSk7CisgICAgaWYgKGVycm9yKQorICAgICAgICB0YXNrLT5kaWRGYWlsKFJlc291cmNl
RXJyb3I6OmdlbmVyaWNHRXJyb3IoZXJyb3IuZ2V0KCksIHRhc2stPm1fc291cFJlcXVlc3QuZ2V0
KCkpKTsKKyAgICBlbHNlIGlmIChieXRlc1JlYWQgPiAwKQorICAgICAgICB0YXNrLT5kaWRSZWFk
KGJ5dGVzUmVhZCk7CisgICAgZWxzZQorICAgICAgICB0YXNrLT5kaWRGaW5pc2hSZWFkKCk7Cit9
CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpyZWFkKCkKK3sKKyAgICBSZWZQdHI8TmV0d29ya0Rh
dGFUYXNrPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIEFTU0VSVChtX2lucHV0U3RyZWFtKTsK
KyAgICBtX3JlYWRCdWZmZXIuZ3JvdyhnRGVmYXVsdFJlYWRCdWZmZXJTaXplKTsKKyAgICBnX2lu
cHV0X3N0cmVhbV9yZWFkX2FzeW5jKG1faW5wdXRTdHJlYW0uZ2V0KCksIG1fcmVhZEJ1ZmZlci5k
YXRhKCksIG1fcmVhZEJ1ZmZlci5zaXplKCksIEdfUFJJT1JJVFlfREVGQVVMVCwgbV9jYW5jZWxs
YWJsZS5nZXQoKSwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNr
PihyZWFkQ2FsbGJhY2spLCBwcm90ZWN0ZWRUaGlzLmxlYWtSZWYoKSk7Cit9CisKK3ZvaWQgTmV0
d29ya0RhdGFUYXNrOjpkaWRSZWFkKGdzc2l6ZSBieXRlc1JlYWQpCit7CisgICAgbV9yZWFkQnVm
ZmVyLnNocmluayhieXRlc1JlYWQpOworICAgIGlmIChtX2Rvd25sb2FkT3V0cHV0U3RyZWFtKSB7
CisgICAgICAgIEFTU0VSVChpc0Rvd25sb2FkKCkpOworICAgICAgICB3cml0ZURvd25sb2FkKCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKG1fY2xpZW50KTsKKyAgICAgICAgbV9jbGll
bnQtPmRpZFJlY2VpdmVEYXRhKFNoYXJlZEJ1ZmZlcjo6YWRvcHRWZWN0b3IobV9yZWFkQnVmZmVy
KSk7CisgICAgICAgIHJlYWQoKTsKKyAgICB9Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpk
aWRGaW5pc2hSZWFkKCkKK3sKKyAgICBBU1NFUlQobV9pbnB1dFN0cmVhbSk7CisgICAgZ19pbnB1
dF9zdHJlYW1fY2xvc2UobV9pbnB1dFN0cmVhbS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7Cisg
ICAgbV9pbnB1dFN0cmVhbSA9IG51bGxwdHI7CisgICAgaWYgKG1fbXVsdGlwYXJ0SW5wdXRTdHJl
YW0pIHsKKyAgICAgICAgcmVxdWVzdE5leHRQYXJ0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAobV9kb3dubG9hZE91dHB1dFN0cmVhbSkgeworICAgICAgICBkaWRGaW5pc2hE
b3dubG9hZCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2xlYXJSZXF1ZXN0KCk7
CisgICAgQVNTRVJUKG1fY2xpZW50KTsKKyAgICBtX2NsaWVudC0+ZGlkQ29tcGxldGVXaXRoRXJy
b3IoeyB9KTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2s6OnJlcXVlc3ROZXh0UGFydENhbGxi
YWNrKFNvdXBNdWx0aXBhcnRJbnB1dFN0cmVhbSogbXVsdGlwYXJ0SW5wdXRTdHJlYW0sIEdBc3lu
Y1Jlc3VsdCogcmVzdWx0LCBOZXR3b3JrRGF0YVRhc2sqIHRhc2spCit7CisgICAgUmVmUHRyPE5l
dHdvcmtEYXRhVGFzaz4gcHJvdGVjdGVkVGhpcyA9IGFkb3B0UmVmKHRhc2spOworICAgIGlmICh0
YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgdGFzay0+c3RhdGUoKSA9PSBTdGF0
ZTo6Q29tcGxldGVkIHx8ICF0YXNrLT5tX2NsaWVudCkgeworICAgICAgICB0YXNrLT5jbGVhclJl
cXVlc3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBU1NFUlQobXVsdGlwYXJ0SW5w
dXRTdHJlYW0gPT0gdGFzay0+bV9tdWx0aXBhcnRJbnB1dFN0cmVhbS5nZXQoKSk7CisKKyAgICBp
ZiAodGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6U3VzcGVuZGVkKSB7CisgICAgICAgIEFTU0VSVCgh
dGFzay0+bV9wZW5kaW5nUmVzdWx0KTsKKyAgICAgICAgdGFzay0+bV9wZW5kaW5nUmVzdWx0ID0g
cmVzdWx0OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgR1VuaXF1ZU91dFB0cjxHRXJy
b3I+IGVycm9yOworICAgIEdSZWZQdHI8R0lucHV0U3RyZWFtPiBpbnB1dFN0cmVhbSA9IGFkb3B0
R1JlZihzb3VwX211bHRpcGFydF9pbnB1dF9zdHJlYW1fbmV4dF9wYXJ0X2ZpbmlzaChtdWx0aXBh
cnRJbnB1dFN0cmVhbSwgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpKTsKKyAgICBpZiAoZXJyb3Ip
CisgICAgICAgIHRhc2stPmRpZEZhaWwoUmVzb3VyY2VFcnJvcjo6aHR0cEVycm9yKHRhc2stPm1f
c291cE1lc3NhZ2UuZ2V0KCksIGVycm9yLmdldCgpLCB0YXNrLT5tX3NvdXBSZXF1ZXN0LmdldCgp
KSk7CisgICAgZWxzZSBpZiAoaW5wdXRTdHJlYW0pCisgICAgICAgIHRhc2stPmRpZFJlcXVlc3RO
ZXh0UGFydChXVEZNb3ZlKGlucHV0U3RyZWFtKSk7CisgICAgZWxzZQorICAgICAgICB0YXNrLT5k
aWRGaW5pc2hSZXF1ZXN0TmV4dFBhcnQoKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2s6OnJl
cXVlc3ROZXh0UGFydCgpCit7CisgICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFzaz4gcHJvdGVjdGVk
VGhpcyh0aGlzKTsKKyAgICBBU1NFUlQobV9tdWx0aXBhcnRJbnB1dFN0cmVhbSk7CisgICAgQVNT
RVJUKCFtX2lucHV0U3RyZWFtKTsKKyAgICBzb3VwX211bHRpcGFydF9pbnB1dF9zdHJlYW1fbmV4
dF9wYXJ0X2FzeW5jKG1fbXVsdGlwYXJ0SW5wdXRTdHJlYW0uZ2V0KCksIEdfUFJJT1JJVFlfREVG
QVVMVCwgbV9jYW5jZWxsYWJsZS5nZXQoKSwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHQXN5
bmNSZWFkeUNhbGxiYWNrPihyZXF1ZXN0TmV4dFBhcnRDYWxsYmFjayksIHByb3RlY3RlZFRoaXMu
bGVha1JlZigpKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZFJlcXVlc3ROZXh0UGFy
dChHUmVmUHRyPEdJbnB1dFN0cmVhbT4mJiBpbnB1dFN0cmVhbSkKK3sKKyAgICBBU1NFUlQoIW1f
aW5wdXRTdHJlYW0pOworICAgIG1faW5wdXRTdHJlYW0gPSBXVEZNb3ZlKGlucHV0U3RyZWFtKTsK
KyAgICBtX3Jlc3BvbnNlID0gUmVzb3VyY2VSZXNwb25zZSgpOworICAgIG1fcmVzcG9uc2Uuc2V0
VVJMKG1fZmlyc3RSZXF1ZXN0LnVybCgpKTsKKyAgICBtX3Jlc3BvbnNlLnVwZGF0ZUZyb21Tb3Vw
TWVzc2FnZUhlYWRlcnMoc291cF9tdWx0aXBhcnRfaW5wdXRfc3RyZWFtX2dldF9oZWFkZXJzKG1f
bXVsdGlwYXJ0SW5wdXRTdHJlYW0uZ2V0KCkpKTsKKyAgICBkaWRSZWNlaXZlUmVzcG9uc2UoKTsK
K30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZEZpbmlzaFJlcXVlc3ROZXh0UGFydCgpCit7
CisgICAgQVNTRVJUKCFtX2lucHV0U3RyZWFtKTsKKyAgICBBU1NFUlQobV9tdWx0aXBhcnRJbnB1
dFN0cmVhbSk7CisgICAgZ19pbnB1dF9zdHJlYW1fY2xvc2UoR19JTlBVVF9TVFJFQU0obV9tdWx0
aXBhcnRJbnB1dFN0cmVhbS5nZXQoKSksIG51bGxwdHIsIG51bGxwdHIpOworICAgIGNsZWFyUmVx
dWVzdCgpOworICAgIG1fY2xpZW50LT5kaWRDb21wbGV0ZVdpdGhFcnJvcih7IH0pOworfQorCit2
b2lkIE5ldHdvcmtEYXRhVGFzazo6Z290SGVhZGVyc0NhbGxiYWNrKFNvdXBNZXNzYWdlKiBzb3Vw
TWVzc2FnZSwgTmV0d29ya0RhdGFUYXNrKiB0YXNrKQoreworICAgIGlmICh0YXNrLT5zdGF0ZSgp
ID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgdGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q29tcGxldGVk
IHx8ICF0YXNrLT5tX2NsaWVudCkgeworICAgICAgICB0YXNrLT5jbGVhclJlcXVlc3QoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBU1NFUlQodGFzay0+bV9zb3VwTWVzc2FnZS5nZXQo
KSA9PSBzb3VwTWVzc2FnZSk7CisgICAgdGFzay0+ZGlkR2V0SGVhZGVycygpOworfQorCit2b2lk
IE5ldHdvcmtEYXRhVGFzazo6ZGlkR2V0SGVhZGVycygpCit7CisgICAgLy8gV2UgYXJlIGEgYml0
IG1vcmUgY29uc2VydmF0aXZlIHdpdGggdGhlIHBlcnNpc3RlbnQgY3JlZGVudGlhbCBzdG9yYWdl
IHRoYW4gdGhlIHNlc3Npb24gc3RvcmUsCisgICAgLy8gc2luY2Ugd2UgYXJlIHdhaXRpbmcgdW50
aWwgd2Uga25vdyB0aGF0IHRoaXMgYXV0aGVudGljYXRpb24gc3VjY2VlZGVkIGJlZm9yZSBhY3R1
YWxseSBzdG9yaW5nLgorICAgIC8vIFRoaXMgaXMgYmVjYXVzZSB3ZSB3YW50IHRvIGF2b2lkIGhp
dHRpbmcgdGhlIGRpc2sgdHdpY2UgKG9uY2UgdG8gYWRkIGFuZCBvbmNlIHRvIHJlbW92ZSkgZm9y
CisgICAgLy8gaW5jb3JyZWN0IGNyZWRlbnRpYWxzIG9yIHBvbGx1dGluZyB0aGUga2V5Y2hhaW4g
d2l0aCBpbnZhbGlkIGNyZWRlbnRpYWxzLgorICAgIGlmICghaXNBdXRoZW50aWNhdGlvbkZhaWx1
cmVTdGF0dXNDb2RlKG1fc291cE1lc3NhZ2UtPnN0YXR1c19jb2RlKSAmJiBtX3NvdXBNZXNzYWdl
LT5zdGF0dXNfY29kZSA8IDUwMCkgeworICAgICAgICBtX3Nlc3Npb24tPm5ldHdvcmtTdG9yYWdl
U2Vzc2lvbigpLnNhdmVDcmVkZW50aWFsVG9QZXJzaXN0ZW50U3RvcmFnZShtX3Byb3RlY3Rpb25T
cGFjZUZvclBlcnNpc3RlbnRTdG9yYWdlLCBtX2NyZWRlbnRpYWxGb3JQZXJzaXN0ZW50U3RvcmFn
ZSk7CisgICAgICAgIG1fcHJvdGVjdGlvblNwYWNlRm9yUGVyc2lzdGVudFN0b3JhZ2UgPSBQcm90
ZWN0aW9uU3BhY2UoKTsKKyAgICAgICAgbV9jcmVkZW50aWFsRm9yUGVyc2lzdGVudFN0b3JhZ2Ug
PSBDcmVkZW50aWFsKCk7CisgICAgfQorfQorCit2b2lkIE5ldHdvcmtEYXRhVGFzazo6d3JvdGVC
b2R5RGF0YUNhbGxiYWNrKFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSwgU291cEJ1ZmZlciogYnVm
ZmVyLCBOZXR3b3JrRGF0YVRhc2sqIHRhc2spCit7CisgICAgaWYgKHRhc2stPnN0YXRlKCkgPT0g
U3RhdGU6OkNhbmNlbGluZyB8fCB0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDb21wbGV0ZWQgfHwg
IXRhc2stPm1fY2xpZW50KSB7CisgICAgICAgIHRhc2stPmNsZWFyUmVxdWVzdCgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIEFTU0VSVCh0YXNrLT5tX3NvdXBNZXNzYWdlLmdldCgpID09
IHNvdXBNZXNzYWdlKTsKKyAgICB0YXNrLT5kaWRXcml0ZUJvZHlEYXRhKGJ1ZmZlci0+bGVuZ3Ro
KTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2s6OmRpZFdyaXRlQm9keURhdGEodWludDY0X3Qg
Ynl0ZXNTZW50KQoreworICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2s+IHByb3RlY3RlZFRoaXMo
dGhpcyk7CisgICAgbV9ib2R5RGF0YVRvdGFsQnl0ZXNTZW50ICs9IGJ5dGVzU2VudDsKKyAgICBt
X2NsaWVudC0+ZGlkU2VuZERhdGEobV9ib2R5RGF0YVRvdGFsQnl0ZXNTZW50LCBtX3NvdXBNZXNz
YWdlLT5yZXF1ZXN0X2JvZHktPmxlbmd0aCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpk
b3dubG9hZCgpCit7CisgICAgQVNTRVJUKGlzRG93bmxvYWQoKSk7CisgICAgQVNTRVJUKG1fcGVu
ZGluZ0Rvd25sb2FkTG9jYXRpb24pOworICAgIEFTU0VSVCghbV9yZXNwb25zZS5pc051bGwoKSk7
CisKKyAgICBpZiAobV9yZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpID49IDQwMCkgeworICAgICAg
ICBkaWRGYWlsRG93bmxvYWQocGxhdGZvcm1Eb3dubG9hZE5ldHdvcmtFcnJvcihtX3Jlc3BvbnNl
Lmh0dHBTdGF0dXNDb2RlKCksIG1fcmVzcG9uc2UudXJsKCksIG1fcmVzcG9uc2UuaHR0cFN0YXR1
c1RleHQoKSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9kb3dubG9hZERlc3Rp
bmF0aW9uRmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl91cmkobV9wZW5kaW5nRG93bmxv
YWRMb2NhdGlvbi51dGY4KCkuZGF0YSgpKSk7CisgICAgR1JlZlB0cjxHRmlsZU91dHB1dFN0cmVh
bT4gb3V0cHV0U3RyZWFtOworICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBp
ZiAobV9hbGxvd092ZXJ3cml0ZURvd25sb2FkKQorICAgICAgICBvdXRwdXRTdHJlYW0gPSBhZG9w
dEdSZWYoZ19maWxlX3JlcGxhY2UobV9kb3dubG9hZERlc3RpbmF0aW9uRmlsZS5nZXQoKSwgbnVs
bHB0ciwgRkFMU0UsIEdfRklMRV9DUkVBVEVfTk9ORSwgbnVsbHB0ciwgJmVycm9yLm91dFB0cigp
KSk7CisgICAgZWxzZQorICAgICAgICBvdXRwdXRTdHJlYW0gPSBhZG9wdEdSZWYoZ19maWxlX2Ny
ZWF0ZShtX2Rvd25sb2FkRGVzdGluYXRpb25GaWxlLmdldCgpLCBHX0ZJTEVfQ1JFQVRFX05PTkUs
IG51bGxwdHIsICZlcnJvci5vdXRQdHIoKSkpOworICAgIGlmICghb3V0cHV0U3RyZWFtKSB7Cisg
ICAgICAgIGRpZEZhaWxEb3dubG9hZChwbGF0Zm9ybURvd25sb2FkRGVzdGluYXRpb25FcnJvciht
X3Jlc3BvbnNlLCBlcnJvci0+bWVzc2FnZSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgU3RyaW5nIGludGVybWVkaWF0ZVVSSSA9IG1fcGVuZGluZ0Rvd25sb2FkTG9jYXRpb24gKyAi
LndrZG93bmxvYWQiOworICAgIG1fZG93bmxvYWRJbnRlcm1lZGlhdGVGaWxlID0gYWRvcHRHUmVm
KGdfZmlsZV9uZXdfZm9yX3VyaShpbnRlcm1lZGlhdGVVUkkudXRmOCgpLmRhdGEoKSkpOworICAg
IG91dHB1dFN0cmVhbSA9IGFkb3B0R1JlZihnX2ZpbGVfcmVwbGFjZShtX2Rvd25sb2FkSW50ZXJt
ZWRpYXRlRmlsZS5nZXQoKSwgMCwgVFJVRSwgR19GSUxFX0NSRUFURV9OT05FLCAwLCAmZXJyb3Iu
b3V0UHRyKCkpKTsKKyAgICBpZiAoIW91dHB1dFN0cmVhbSkgeworICAgICAgICBkaWRGYWlsRG93
bmxvYWQocGxhdGZvcm1Eb3dubG9hZERlc3RpbmF0aW9uRXJyb3IobV9yZXNwb25zZSwgZXJyb3It
Pm1lc3NhZ2UpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2Rvd25sb2FkT3V0cHV0
U3RyZWFtID0gYWRvcHRHUmVmKEdfT1VUUFVUX1NUUkVBTShvdXRwdXRTdHJlYW0ubGVha1JlZigp
KSk7CisKKyAgICBhdXRvJiBkb3dubG9hZE1hbmFnZXIgPSBOZXR3b3JrUHJvY2Vzczo6c2luZ2xl
dG9uKCkuZG93bmxvYWRNYW5hZ2VyKCk7CisgICAgYXV0byBkb3dubG9hZCA9IHN0ZDo6bWFrZV91
bmlxdWU8RG93bmxvYWQ+KGRvd25sb2FkTWFuYWdlciwgbV9wZW5kaW5nRG93bmxvYWRJRCwgdGhp
cywgbV9zZXNzaW9uLT5zZXNzaW9uSUQoKSwgc3VnZ2VzdGVkRmlsZW5hbWUoKSk7CisgICAgYXV0
byogZG93bmxvYWRQdHIgPSBkb3dubG9hZC5nZXQoKTsKKyAgICBkb3dubG9hZE1hbmFnZXIuZGF0
YVRhc2tCZWNhbWVEb3dubG9hZFRhc2sobV9wZW5kaW5nRG93bmxvYWRJRCwgV1RGTW92ZShkb3du
bG9hZCkpOworICAgIGRvd25sb2FkUHRyLT5kaWRDcmVhdGVEZXN0aW5hdGlvbihtX3BlbmRpbmdE
b3dubG9hZExvY2F0aW9uKTsKKworICAgIEFTU0VSVChtX2NsaWVudCk7CisgICAgbV9jbGllbnQt
PmRpZEJlY29tZURvd25sb2FkKCk7CisKKyAgICByZWFkKCk7Cit9CisKK3ZvaWQgTmV0d29ya0Rh
dGFUYXNrOjp3cml0ZURvd25sb2FkQ2FsbGJhY2soR091dHB1dFN0cmVhbSogb3V0cHV0U3RyZWFt
LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgTmV0d29ya0RhdGFUYXNrKiB0YXNrKQoreworICAgIFJl
ZlB0cjxOZXR3b3JrRGF0YVRhc2s+IHByb3RlY3RlZFRoaXMgPSBhZG9wdFJlZih0YXNrKTsKKyAg
ICBpZiAodGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IHRhc2stPnN0YXRlKCkg
PT0gU3RhdGU6OkNvbXBsZXRlZCB8fCAhdGFzay0+aXNEb3dubG9hZCgpKSB7CisgICAgICAgIHRh
c2stPmNsZWFyUmVxdWVzdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFTU0VSVChv
dXRwdXRTdHJlYW0gPT0gdGFzay0+bV9kb3dubG9hZE91dHB1dFN0cmVhbS5nZXQoKSk7CisKKyAg
ICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgZ3NpemUgYnl0ZXNXcml0dGVuOwor
I2lmIEdMSUJfQ0hFQ0tfVkVSU0lPTigyLCA0NCwgMCkKKyAgICBnX291dHB1dF9zdHJlYW1fd3Jp
dGVfYWxsX2ZpbmlzaChvdXRwdXRTdHJlYW0sIHJlc3VsdCwgJmJ5dGVzV3JpdHRlbiwgJmVycm9y
Lm91dFB0cigpKTsKKyNlbHNlCisgICAgZ3NzaXplIHdyaXRlVGFza1Jlc3VsdCA9IGdfdGFza19w
cm9wYWdhdGVfaW50KEdfVEFTSyhyZXN1bHQpLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGlmICh3
cml0ZVRhc2tSZXN1bHQgIT0gLTEpCisgICAgICAgIGJ5dGVzV3JpdHRlbiA9IHdyaXRlVGFza1Jl
c3VsdDsKKyNlbmRpZgorICAgIGlmIChlcnJvcikKKyAgICAgICAgdGFzay0+ZGlkRmFpbERvd25s
b2FkKHBsYXRmb3JtRG93bmxvYWREZXN0aW5hdGlvbkVycm9yKHRhc2stPm1fcmVzcG9uc2UsIGVy
cm9yLT5tZXNzYWdlKSk7CisgICAgZWxzZQorICAgICAgICB0YXNrLT5kaWRXcml0ZURvd25sb2Fk
KGJ5dGVzV3JpdHRlbik7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjp3cml0ZURvd25sb2Fk
KCkKK3sKKyAgICBSZWZQdHI8TmV0d29ya0RhdGFUYXNrPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwor
I2lmIEdMSUJfQ0hFQ0tfVkVSU0lPTigyLCA0NCwgMCkKKyAgICBnX291dHB1dF9zdHJlYW1fd3Jp
dGVfYWxsX2FzeW5jKG1fZG93bmxvYWRPdXRwdXRTdHJlYW0uZ2V0KCksIG1fcmVhZEJ1ZmZlci5k
YXRhKCksIG1fcmVhZEJ1ZmZlci5zaXplKCksIEdfUFJJT1JJVFlfREVGQVVMVCwgbV9jYW5jZWxs
YWJsZS5nZXQoKSwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNr
Pih3cml0ZURvd25sb2FkQ2FsbGJhY2spLCBwcm90ZWN0ZWRUaGlzLmxlYWtSZWYoKSk7CisjZWxz
ZQorICAgIEdSZWZQdHI8R1Rhc2s+IHdyaXRlVGFzayA9IGFkb3B0R1JlZihnX3Rhc2tfbmV3KG1f
ZG93bmxvYWRPdXRwdXRTdHJlYW0uZ2V0KCksIG1fY2FuY2VsbGFibGUuZ2V0KCksCisgICAgICAg
IHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4od3JpdGVEb3dubG9hZENhbGxi
YWNrKSwgcHJvdGVjdGVkVGhpcy5sZWFrUmVmKCkpKTsKKyAgICBnX3Rhc2tfc2V0X3Rhc2tfZGF0
YSh3cml0ZVRhc2suZ2V0KCksIHRoaXMsIG51bGxwdHIpOworICAgIGdfdGFza19ydW5faW5fdGhy
ZWFkKHdyaXRlVGFzay5nZXQoKSwgW10oR1Rhc2sqIHdyaXRlVGFzaywgZ3BvaW50ZXIgc291cmNl
LCBncG9pbnRlciB1c2VyRGF0YSwgR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSkgeworICAgICAg
ICBhdXRvKiB0YXNrID0gc3RhdGljX2Nhc3Q8TmV0d29ya0RhdGFUYXNrKj4odXNlckRhdGEpOwor
ICAgICAgICBHT3V0cHV0U3RyZWFtKiBvdXRwdXRTdHJlYW0gPSBHX09VVFBVVF9TVFJFQU0oc291
cmNlKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQodGFzay0+bV9kb3dubG9hZE91dHB1dFN0cmVh
bS5nZXQoKSA9PSBvdXRwdXRTdHJlYW0pOworICAgICAgICBSRUxFQVNFX0FTU0VSVCh0YXNrLT5t
X2NhbmNlbGxhYmxlLmdldCgpID09IGNhbmNlbGxhYmxlKTsKKyAgICAgICAgR0Vycm9yKiBlcnJv
ciA9IG51bGxwdHI7CisgICAgICAgIGlmIChnX2NhbmNlbGxhYmxlX3NldF9lcnJvcl9pZl9jYW5j
ZWxsZWQoY2FuY2VsbGFibGUsICZlcnJvcikpIHsKKyAgICAgICAgICAgIGdfdGFza19yZXR1cm5f
ZXJyb3Iod3JpdGVUYXNrLCBlcnJvcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBnc2l6ZSBieXRlc1dyaXR0ZW47CisgICAgICAgIGlmIChnX291dHB1dF9zdHJl
YW1fd3JpdGVfYWxsKG91dHB1dFN0cmVhbSwgdGFzay0+bV9yZWFkQnVmZmVyLmRhdGEoKSwgdGFz
ay0+bV9yZWFkQnVmZmVyLnNpemUoKSwgJmJ5dGVzV3JpdHRlbiwgY2FuY2VsbGFibGUsICZlcnJv
cikpCisgICAgICAgICAgICBnX3Rhc2tfcmV0dXJuX2ludCh3cml0ZVRhc2ssIGJ5dGVzV3JpdHRl
bik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdfdGFza19yZXR1cm5fZXJyb3Iod3JpdGVU
YXNrLCBlcnJvcik7CisgICAgfSk7CisjZW5kaWYKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2s6
OmRpZFdyaXRlRG93bmxvYWQoZ3NpemUgYnl0ZXNXcml0dGVuKQoreworICAgIEFTU0VSVChieXRl
c1dyaXR0ZW4gPT0gbV9yZWFkQnVmZmVyLnNpemUoKSk7CisgICAgYXV0byogZG93bmxvYWQgPSBO
ZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuZG93bmxvYWRNYW5hZ2VyKCkuZG93bmxvYWQobV9w
ZW5kaW5nRG93bmxvYWRJRCk7CisgICAgQVNTRVJUKGRvd25sb2FkKTsKKyAgICBkb3dubG9hZC0+
ZGlkUmVjZWl2ZURhdGEoYnl0ZXNXcml0dGVuKTsKKyAgICByZWFkKCk7Cit9CisKK3ZvaWQgTmV0
d29ya0RhdGFUYXNrOjpkaWRGaW5pc2hEb3dubG9hZCgpCit7CisgICAgQVNTRVJUKCFtX3Jlc3Bv
bnNlLmlzTnVsbCgpKTsKKyAgICBBU1NFUlQobV9kb3dubG9hZE91dHB1dFN0cmVhbSk7CisgICAg
Z19vdXRwdXRfc3RyZWFtX2Nsb3NlKG1fZG93bmxvYWRPdXRwdXRTdHJlYW0uZ2V0KCksIG51bGxw
dHIsIG51bGxwdHIpOworICAgIG1fZG93bmxvYWRPdXRwdXRTdHJlYW0gPSBudWxscHRyOworCisg
ICAgQVNTRVJUKG1fZG93bmxvYWREZXN0aW5hdGlvbkZpbGUpOworICAgIEFTU0VSVChtX2Rvd25s
b2FkSW50ZXJtZWRpYXRlRmlsZSk7CisgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOwor
ICAgIGlmICghZ19maWxlX21vdmUobV9kb3dubG9hZEludGVybWVkaWF0ZUZpbGUuZ2V0KCksIG1f
ZG93bmxvYWREZXN0aW5hdGlvbkZpbGUuZ2V0KCksIEdfRklMRV9DT1BZX09WRVJXUklURSwgbV9j
YW5jZWxsYWJsZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0ciwgJmVycm9yLm91dFB0cigpKSkgewor
ICAgICAgICBkaWRGYWlsRG93bmxvYWQocGxhdGZvcm1Eb3dubG9hZERlc3RpbmF0aW9uRXJyb3Io
bV9yZXNwb25zZSwgZXJyb3ItPm1lc3NhZ2UpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIEdSZWZQdHI8R0ZpbGVJbmZvPiBpbmZvID0gYWRvcHRHUmVmKGdfZmlsZV9pbmZvX25ldygp
KTsKKyAgICBDU3RyaW5nIHVyaSA9IG1fcmVzcG9uc2UudXJsKCkuc3RyaW5nKCkudXRmOCgpOwor
ICAgIGdfZmlsZV9pbmZvX3NldF9hdHRyaWJ1dGVfc3RyaW5nKGluZm8uZ2V0KCksICJtZXRhZGF0
YTo6ZG93bmxvYWQtdXJpIiwgdXJpLmRhdGEoKSk7CisgICAgZ19maWxlX2luZm9fc2V0X2F0dHJp
YnV0ZV9zdHJpbmcoaW5mby5nZXQoKSwgInhhdHRyOjp4ZGcub3JpZ2luLnVybCIsIHVyaS5kYXRh
KCkpOworICAgIGdfZmlsZV9zZXRfYXR0cmlidXRlc19hc3luYyhtX2Rvd25sb2FkRGVzdGluYXRp
b25GaWxlLmdldCgpLCBpbmZvLmdldCgpLCBHX0ZJTEVfUVVFUllfSU5GT19OT05FLCBHX1BSSU9S
SVRZX0RFRkFVTFQsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIpOworCisgICAgY2xlYXJSZXF1
ZXN0KCk7CisgICAgYXV0byogZG93bmxvYWQgPSBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCku
ZG93bmxvYWRNYW5hZ2VyKCkuZG93bmxvYWQobV9wZW5kaW5nRG93bmxvYWRJRCk7CisgICAgQVNT
RVJUKGRvd25sb2FkKTsKKyAgICBkb3dubG9hZC0+ZGlkRmluaXNoKCk7Cit9CisKK3ZvaWQgTmV0
d29ya0RhdGFUYXNrOjpkaWRGYWlsRG93bmxvYWQoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3Ip
Cit7CisgICAgY2xlYXJSZXF1ZXN0KCk7CisgICAgY2xlYW5Eb3dubG9hZEZpbGVzKCk7CisgICAg
aWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+ZGlkQ29tcGxldGVXaXRoRXJyb3IoZXJy
b3IpOworICAgIGVsc2UgeworICAgICAgICBhdXRvKiBkb3dubG9hZCA9IE5ldHdvcmtQcm9jZXNz
OjpzaW5nbGV0b24oKS5kb3dubG9hZE1hbmFnZXIoKS5kb3dubG9hZChtX3BlbmRpbmdEb3dubG9h
ZElEKTsKKyAgICAgICAgQVNTRVJUKGRvd25sb2FkKTsKKyAgICAgICAgZG93bmxvYWQtPmRpZEZh
aWwoZXJyb3IsIElQQzo6RGF0YVJlZmVyZW5jZSgpKTsKKyAgICB9Cit9CisKK3ZvaWQgTmV0d29y
a0RhdGFUYXNrOjpjbGVhbkRvd25sb2FkRmlsZXMoKQoreworICAgIGlmIChtX2Rvd25sb2FkRGVz
dGluYXRpb25GaWxlKSB7CisgICAgICAgIGdfZmlsZV9kZWxldGUobV9kb3dubG9hZERlc3RpbmF0
aW9uRmlsZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgIG1fZG93bmxvYWREZXN0
aW5hdGlvbkZpbGUgPSBudWxscHRyOworICAgIH0KKyAgICBpZiAobV9kb3dubG9hZEludGVybWVk
aWF0ZUZpbGUpIHsKKyAgICAgICAgZ19maWxlX2RlbGV0ZShtX2Rvd25sb2FkSW50ZXJtZWRpYXRl
RmlsZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgIG1fZG93bmxvYWRJbnRlcm1l
ZGlhdGVGaWxlID0gbnVsbHB0cjsKKyAgICB9Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpk
aWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQoreworICAgIGlmIChpc0Rvd25sb2Fk
KCkpIHsKKyAgICAgICAgZGlkRmFpbERvd25sb2FkKHBsYXRmb3JtRG93bmxvYWROZXR3b3JrRXJy
b3IoZXJyb3IuZXJyb3JDb2RlKCksIGVycm9yLmZhaWxpbmdVUkwoKSwgZXJyb3IubG9jYWxpemVk
RGVzY3JpcHRpb24oKSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2xlYXJSZXF1
ZXN0KCk7CisgICAgQVNTRVJUKG1fY2xpZW50KTsKKyAgICBtX2NsaWVudC0+ZGlkQ29tcGxldGVX
aXRoRXJyb3IoZXJyb3IpOworfQorCisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCit2b2lkIE5ldHdv
cmtEYXRhVGFzazo6bmV0d29ya0V2ZW50Q2FsbGJhY2soU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdl
LCBHU29ja2V0Q2xpZW50RXZlbnQgZXZlbnQsIEdJT1N0cmVhbSosIE5ldHdvcmtEYXRhVGFzayog
dGFzaykKK3sKKyAgICBpZiAodGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IHRh
c2stPnN0YXRlKCkgPT0gU3RhdGU6OkNvbXBsZXRlZCB8fCAhdGFzay0+bV9jbGllbnQpCisgICAg
ICAgIHJldHVybjsKKworICAgIEFTU0VSVCh0YXNrLT5tX3NvdXBNZXNzYWdlLmdldCgpID09IHNv
dXBNZXNzYWdlKTsKKyAgICB0YXNrLT5uZXR3b3JrRXZlbnQoZXZlbnQpOworfQorCit2b2lkIE5l
dHdvcmtEYXRhVGFzazo6bmV0d29ya0V2ZW50KEdTb2NrZXRDbGllbnRFdmVudCBldmVudCkKK3sK
KyAgICBkb3VibGUgZGVsdGFUaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lTVMoKSAt
IG1fc3RhcnRUaW1lOworICAgIGF1dG8mIGxvYWRUaW1pbmcgPSBtX3Jlc3BvbnNlLm5ldHdvcmtM
b2FkVGltaW5nKCk7CisgICAgc3dpdGNoIChldmVudCkgeworICAgIGNhc2UgR19TT0NLRVRfQ0xJ
RU5UX1JFU09MVklORzoKKyAgICAgICAgbG9hZFRpbWluZy5kb21haW5Mb29rdXBTdGFydCA9IGRl
bHRhVGltZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHX1NPQ0tFVF9DTElFTlRfUkVTT0xW
RUQ6CisgICAgICAgIGxvYWRUaW1pbmcuZG9tYWluTG9va3VwRW5kID0gZGVsdGFUaW1lOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEdfU09DS0VUX0NMSUVOVF9DT05ORUNUSU5HOgorICAgICAg
ICBsb2FkVGltaW5nLmNvbm5lY3RTdGFydCA9IGRlbHRhVGltZTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBHX1NPQ0tFVF9DTElFTlRfQ09OTkVDVEVEOgorICAgICAgICAvLyBXZWIgVGltaW5n
IGNvbnNpZGVycyB0aGF0IGNvbm5lY3Rpb24gdGltZSBpbnZvbHZlcyBkbnMsIHByb3h5ICYgVExT
IG5lZ290aWF0aW9uLi4uCisgICAgICAgIC8vIHNvIHdlIGJldHRlciBwaWNrIEdfU09DS0VUX0NM
SUVOVF9DT01QTEVURSBmb3IgY29ubmVjdEVuZAorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdf
U09DS0VUX0NMSUVOVF9QUk9YWV9ORUdPVElBVElORzoKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBHX1NPQ0tFVF9DTElFTlRfUFJPWFlfTkVHT1RJQVRFRDoKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBHX1NPQ0tFVF9DTElFTlRfVExTX0hBTkRTSEFLSU5HOgorICAgICAgICBsb2FkVGltaW5n
LnNlY3VyZUNvbm5lY3Rpb25TdGFydCA9IGRlbHRhVGltZTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBHX1NPQ0tFVF9DTElFTlRfVExTX0hBTkRTSEFLRUQ6CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgR19TT0NLRVRfQ0xJRU5UX0NPTVBMRVRFOgorICAgICAgICBsb2FkVGltaW5nLmNvbm5l
Y3RFbmQgPSBkZWx0YVRpbWU7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKKyNpZiBT
T1VQX0NIRUNLX1ZFUlNJT04oMiwgNDksIDkxKQordm9pZCBOZXR3b3JrRGF0YVRhc2s6OnN0YXJ0
aW5nQ2FsbGJhY2soU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlLCBOZXR3b3JrRGF0YVRhc2sqIHRh
c2spCit7CisgICAgaWYgKHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCB0YXNr
LT5zdGF0ZSgpID09IFN0YXRlOjpDb21wbGV0ZWQgfHwgIXRhc2stPm1fY2xpZW50KQorICAgICAg
ICByZXR1cm47CisKKyAgICBBU1NFUlQodGFzay0+bV9zb3VwTWVzc2FnZS5nZXQoKSA9PSBzb3Vw
TWVzc2FnZSk7CisgICAgdGFzay0+ZGlkU3RhcnRSZXF1ZXN0KCk7Cit9CisjZWxzZQordm9pZCBO
ZXR3b3JrRGF0YVRhc2s6OnJlcXVlc3RTdGFydGVkQ2FsbGJhY2soU291cFNlc3Npb24qIHNlc3Np
b24sIFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSwgU291cFNvY2tldCosIE5ldHdvcmtEYXRhVGFz
ayogdGFzaykKK3sKKyAgICBBU1NFUlQoc2Vzc2lvbiA9PSB0YXNrLT5tX3Nlc3Npb24tPnNvdXBT
ZXNzaW9uKCkpOworICAgIGlmIChzb3VwTWVzc2FnZSAhPSB0YXNrLT5tX3NvdXBNZXNzYWdlLmdl
dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAodGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6
Q2FuY2VsaW5nIHx8IHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNvbXBsZXRlZCB8fCAhdGFzay0+
bV9jbGllbnQpCisgICAgICAgIHJldHVybjsKKworICAgIHRhc2stPmRpZFN0YXJ0UmVxdWVzdCgp
OworfQorI2VuZGlmCisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrOjpkaWRTdGFydFJlcXVlc3QoKQor
eworICAgIG1fcmVzcG9uc2UubmV0d29ya0xvYWRUaW1pbmcoKS5yZXF1ZXN0U3RhcnQgPSBtb25v
dG9uaWNhbGx5SW5jcmVhc2luZ1RpbWVNUygpIC0gbV9zdGFydFRpbWU7Cit9CisKK3ZvaWQgTmV0
d29ya0RhdGFUYXNrOjpyZXN0YXJ0ZWRDYWxsYmFjayhTb3VwTWVzc2FnZSogc291cE1lc3NhZ2Us
IE5ldHdvcmtEYXRhVGFzayogdGFzaykKK3sKKyAgICAvLyBDYWxsZWQgZWFjaCB0aW1lIHRoZSBt
ZXNzYWdlIGlzIGdvaW5nIHRvIGJlIHNlbnQgYWdhaW4gZXhjZXB0IHRoZSBmaXJzdCB0aW1lLgor
ICAgIC8vIFRoaXMgaGFwcGVucyB3aGVuIGxpYnNvdXAgaGFuZGxlcyBIVFRQIGF1dGhlbnRpY2F0
aW9uLgorICAgIGlmICh0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgdGFzay0+
c3RhdGUoKSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICF0YXNrLT5tX2NsaWVudCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgQVNTRVJUKHRhc2stPm1fc291cE1lc3NhZ2UuZ2V0KCkgPT0gc291cE1l
c3NhZ2UpOworICAgIHRhc2stPmRpZFJlc3RhcnQoKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRh
c2s6OmRpZFJlc3RhcnQoKQoreworICAgIG1fc3RhcnRUaW1lID0gbW9ub3RvbmljYWxseUluY3Jl
YXNpbmdUaW1lTVMoKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1RJTUlORykKKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25Tb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25Tb3VwLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4zNGMyYzc3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vzc2lvblNvdXAuY3BwCkBAIC0wLDAgKzEsODAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uLmgiCisKKyNpbmNsdWRl
IDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU291
cE5ldHdvcmtTZXNzaW9uLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKwordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitSZWY8TmV0d29ya1Nl
c3Npb24+IE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUoVHlwZSB0eXBlLCBTZXNzaW9uSUQgc2Vzc2lv
bklELCBDdXN0b21Qcm90b2NvbE1hbmFnZXIqKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IE5ldHdvcmtTZXNzaW9uKHR5cGUsIHNlc3Npb25JRCwgbnVsbHB0cikpOworfQorCitOZXR3b3Jr
U2Vzc2lvbiYgTmV0d29ya1Nlc3Npb246OmRlZmF1bHRTZXNzaW9uKCkKK3sKKyAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOworICAgIHN0YXRpYyBOZXR3b3JrU2Vzc2lvbiogc2Vzc2lvbiA9ICZO
ZXR3b3JrU2Vzc2lvbjo6Y3JlYXRlKE5ldHdvcmtTZXNzaW9uOjpUeXBlOjpOb3JtYWwsIFNlc3Np
b25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpLCBudWxscHRyKS5sZWFrUmVmKCk7CisgICAgcmV0dXJu
ICpzZXNzaW9uOworfQorCitOZXR3b3JrU3RvcmFnZVNlc3Npb24mIE5ldHdvcmtTZXNzaW9uOjpu
ZXR3b3JrU3RvcmFnZVNlc3Npb24oKSBjb25zdAoreworICAgIGF1dG8qIHN0b3JhZ2VTZXNzaW9u
ID0gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzdG9yYWdlU2Vzc2lvbihtX3Nlc3Npb25JRCk7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoc3RvcmFnZVNlc3Npb24pOworICAgIHJldHVybiAqc3RvcmFnZVNl
c3Npb247Cit9CisKK05ldHdvcmtTZXNzaW9uOjpOZXR3b3JrU2Vzc2lvbihUeXBlIHR5cGUsIFNl
c3Npb25JRCBzZXNzaW9uSUQsIEN1c3RvbVByb3RvY29sTWFuYWdlciopCisgICAgOiBtX3Nlc3Np
b25JRChzZXNzaW9uSUQpCit7Cit9CisKK05ldHdvcmtTZXNzaW9uOjp+TmV0d29ya1Nlc3Npb24o
KQoreworfQorCitTb3VwU2Vzc2lvbiogTmV0d29ya1Nlc3Npb246OnNvdXBTZXNzaW9uKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbmV0d29ya1N0b3JhZ2VTZXNzaW9uKCkuc291cE5ldHdvcmtTZXNz
aW9uKCkuc291cFNlc3Npb24oKTsKK30KKwordm9pZCBOZXR3b3JrU2Vzc2lvbjo6aW52YWxpZGF0
ZUFuZENhbmNlbCgpCit7CisgICAgZm9yIChhdXRvKiB0YXNrIDogbV9kYXRhVGFza1NldCkKKyAg
ICAgICAgdGFzay0+aW52YWxpZGF0ZUFuZENhbmNlbCgpOworfQorCit2b2lkIE5ldHdvcmtTZXNz
aW9uOjpjbGVhckNyZWRlbnRpYWxzKCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3VwL1JlbW90ZU5ldHdv
cmtpbmdDb250ZXh0U291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9zb3Vw
L1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0U291cC5jcHAKaW5kZXggNmFlY2I3Zi4uOGZiNjRmYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mvc291cC9SZW1vdGVOZXR3
b3JraW5nQ29udGV4dFNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L3NvdXAvUmVtb3RlTmV0d29ya2luZ0NvbnRleHRTb3VwLmNwcApAQCAtMjgsNiArMjgsOCBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lmgi
CiAKKyNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5oIgorI2luY2x1ZGUgIlNlc3Npb25UcmFja2Vy
LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KICNpbmNsdWRl
IDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUhh
bmRsZS5oPgpAQCAtNDUsMTMgKzQ3LDIxIEBAIGJvb2wgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6
OmlzVmFsaWQoKSBjb25zdAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFJlbW90ZU5ldHdv
cmtpbmdDb250ZXh0OjplbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKFNlc3Npb25JRCkKK3Zv
aWQgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24o
U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIEFTU0VS
VChzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSk7CisKKyAgICBpZiAoTmV0d29ya1N0b3JhZ2VTZXNz
aW9uOjpzdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpKQorICAgICAgICByZXR1cm47CisKKyAgICBO
ZXR3b3JrU3RvcmFnZVNlc3Npb246OmVuc3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oc2Vzc2lv
bklELCBTdHJpbmc6Om51bWJlcihzZXNzaW9uSUQuc2Vzc2lvbklEKCkpKTsKKyAgICBTZXNzaW9u
VHJhY2tlcjo6c2V0U2Vzc2lvbihzZXNzaW9uSUQsIE5ldHdvcmtTZXNzaW9uOjpjcmVhdGUoTmV0
d29ya1Nlc3Npb246OlR5cGU6OkVwaGVtZXJhbCwgc2Vzc2lvbklELCBudWxscHRyKSk7CiB9CiAK
IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OnN0b3JhZ2VT
ZXNzaW9uKCkgY29uc3QKIHsKKyAgICBpZiAoYXV0byBzZXNzaW9uID0gTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uOjpzdG9yYWdlU2Vzc2lvbihtX3Nlc3Npb25JRCkpCisgICAgICAgIHJldHVybiAqc2Vz
c2lvbjsKICAgICByZXR1cm4gTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpkZWZhdWx0U3RvcmFnZVNl
c3Npb24oKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21h
a2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCBmMTI1OTUxLi5iYWJm
MmE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtMTQsNyArMTQsOSBAQCBsaXN0KEFQ
UEVORCBXZWJLaXQyX1NPVVJDRVMKIAogICAgIE5ldHdvcmtQcm9jZXNzL2VmbC9OZXR3b3JrUHJv
Y2Vzc01haW5FZmwuY3BwCiAKKyAgICBOZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtEYXRhVGFz
a1NvdXAuY3BwCiAgICAgTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3Bw
CisgICAgTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vzc2lvblNvdXAuY3BwCiAgICAgTmV0
d29ya1Byb2Nlc3Mvc291cC9SZW1vdGVOZXR3b3JraW5nQ29udGV4dFNvdXAuY3BwCiAKICAgICBQ
bGF0Zm9ybS9JUEMvdW5peC9BdHRhY2htZW50VW5peC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21h
a2UKaW5kZXggYmVlYTAwZS4uNmZiZGEyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxh
dGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKQEAg
LTM5LDggKzM5LDEwIEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIE5ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZURhdGFTb3VwLmNwcAogICAgIE5ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZUlPQ2hhbm5lbFNvdXAuY3BwCiAKKyAgICBOZXR3b3JrUHJvY2Vz
cy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAuY3BwCiAgICAgTmV0d29ya1Byb2Nlc3Mvc291cC9O
ZXR3b3JrUHJvY2Vzc01haW5Tb3VwLmNwcAogICAgIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29y
a1Byb2Nlc3NTb3VwLmNwcAorICAgIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25T
b3VwLmNwcAogICAgIE5ldHdvcmtQcm9jZXNzL3NvdXAvUmVtb3RlTmV0d29ya2luZ0NvbnRleHRT
b3VwLmNwcAogCiAgICAgUGxhdGZvcm0vSVBDL2dsaWIvR1NvY2tldE1vbml0b3IuY3BwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRp
b25NYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQXV0aGVudGljYXRpb24vQXV0aGVu
dGljYXRpb25NYW5hZ2VyLmgKaW5kZXggN2ZjMTYxNC4uNjM3MmNkMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL0F1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0aW9uTWFuYWdlci5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9BdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdGlv
bk1hbmFnZXIuaApAQCAtMjgsMTAgKzI4LDEwIEBACiAKICNpbmNsdWRlICJNZXNzYWdlUmVjZWl2
ZXIuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1N1cHBsZW1lbnQuaCIKLSNpbmNsdWRlICJO
ZXR3b3JrU2Vzc2lvbi5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NTdXBwbGVtZW50LmgiCiAjaW5j
bHVkZSA8V2ViQ29yZS9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oPgogI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDgsNiArNDgsMTQgQEAgY2xhc3MgRG93
bmxvYWRJRDsKIGNsYXNzIFBlbmRpbmdEb3dubG9hZDsKIGNsYXNzIFdlYkZyYW1lOwogCitlbnVt
IGNsYXNzIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb24geworICAgIFVzZUNyZWRl
bnRpYWwsCisgICAgUGVyZm9ybURlZmF1bHRIYW5kbGluZywKKyAgICBDYW5jZWwsCisgICAgUmVq
ZWN0UHJvdGVjdGlvblNwYWNlCit9OwordHlwZWRlZiBGdW5jdGlvbjx2b2lkKEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmKT4gQ2hh
bGxlbmdlQ29tcGxldGlvbkhhbmRsZXI7CisKIGNsYXNzIEF1dGhlbnRpY2F0aW9uTWFuYWdlciA6
IHB1YmxpYyBXZWJQcm9jZXNzU3VwcGxlbWVudCwgcHVibGljIE5ldHdvcmtQcm9jZXNzU3VwcGxl
bWVudCwgcHVibGljIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShBdXRoZW50aWNhdGlvbk1hbmFnZXIpOwogcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9zb3VwL1dlYkZyYW1lTmV0d29ya2lu
Z0NvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9z
b3VwL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuY3BwCmluZGV4IDIwMWQ0YTguLjJmOTg3MWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvc291
cC9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L3NvdXAvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5jcHAK
QEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJGcmFt
ZU5ldHdvcmtpbmdDb250ZXh0LmgiCiAKKyNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5oIgogI2lu
Y2x1ZGUgIlNlc3Npb25UcmFja2VyLmgiCiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKICNpbmNsdWRl
ICJXZWJQYWdlLmgiCkBAIC00MywxMSArNDQsMTMgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiB2b2lk
IFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24o
U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAg
IEFTU0VSVChzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSk7CiAKICAgICBpZiAoTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uOjpzdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpKQogICAgICAgICByZXR1cm47CiAK
ICAgICBOZXR3b3JrU3RvcmFnZVNlc3Npb246OmVuc3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24o
c2Vzc2lvbklELCBTdHJpbmc6Om51bWJlcihzZXNzaW9uSUQuc2Vzc2lvbklEKCkpKTsKKyAgICBT
ZXNzaW9uVHJhY2tlcjo6c2V0U2Vzc2lvbihzZXNzaW9uSUQsIE5ldHdvcmtTZXNzaW9uOjpjcmVh
dGUoTmV0d29ya1Nlc3Npb246OlR5cGU6OkVwaGVtZXJhbCwgc2Vzc2lvbklELCBudWxscHRyKSk7
CiB9CiAKIHZvaWQgV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6c2V0Q29va2llQWNjZXB0UG9s
aWN5Rm9yQWxsQ29udGV4dHMoSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAppbmRleCA4M2Q5Y2UzLi5lMWZlM2VmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKQEAgLTM3LDYgKzM3LDcg
QEAKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3NNZXNzYWdlcy5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5o
IgorI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uLmgiCiAjaW5jbHVkZSAiUGx1Z2luUHJvY2Vzc0Nv
bm5lY3Rpb25NYW5hZ2VyLmgiCiAjaW5jbHVkZSAiU2Vzc2lvblRyYWNrZXIuaCIKICNpbmNsdWRl
ICJTdGF0aXN0aWNzRGF0YS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvY29uZmlnLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9jb25maWcuaAppbmRleCAxZDkxZmJkLi5hOTdkZDRjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9jb25maWcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9jb25maWcu
aApAQCAtNzUsNyArNzUsNyBAQAogI2VuZGlmCiAjZW5kaWYKIAotI2lmIChQTEFURk9STShNQUMp
ICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAwKSB8fCAoUExBVEZP
Uk0oSU9TKSAmJiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDAwMDApCisj
aWYgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAx
MDEyMDApIHx8IChQTEFURk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJ
UkVEID49IDEwMDAwMCkgfHwgVVNFKFNPVVApCiAjaWZuZGVmIFVTRV9ORVRXT1JLX1NFU1NJT04K
ICNkZWZpbmUgVVNFX05FVFdPUktfU0VTU0lPTiAxCiAjZW5kaWYK
</data>

          </attachment>
      

    </bug>

</bugzilla>