<?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>103220</bug_id>
          
          <creation_ts>2012-11-26 00:20:42 -0800</creation_ts>
          <short_desc>Import LevelDB to the ThirdParty directory for IndexedDB</short_desc>
          <delta_ts>2013-01-17 12:04:20 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>98932</blocked>
    
    <blocked>106443</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Michael Pruett">michael</reporter>
          <assigned_to name="Martin Robinson">mrobinson</assigned_to>
          <cc>abarth</cc>
    
    <cc>alecflett</cc>
    
    <cc>cgarcia</cc>
    
    <cc>charles.wei</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dgrogan</cc>
    
    <cc>dpranke</cc>
    
    <cc>d-r</cc>
    
    <cc>eric</cc>
    
    <cc>jsbell</cc>
    
    <cc>jussi.kukkonen</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>levin</cc>
    
    <cc>levin+threading</cc>
    
    <cc>mrobinson</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>775210</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Pruett">michael</who>
    <bug_when>2012-11-26 00:20:42 -0800</bug_when>
    <thetext>WebKitGTK+ should be built with LevelDB when IndexedDB is enabled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>775224</commentid>
    <comment_count>1</comment_count>
      <attachid>175938</attachid>
    <who name="Michael Pruett">michael</who>
    <bug_when>2012-11-26 00:45:31 -0800</bug_when>
    <thetext>Created attachment 175938
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>775527</commentid>
    <comment_count>2</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-11-26 08:59:52 -0800</bug_when>
    <thetext>Some dependencies like ANGLE are actually checked into the tree. In the work I&apos;ve been doing on IndexedDB I did this [1]. I imagine that the requirement for using a shared library version of leveldb would be that it has a stable API and that WebKit does not require new versions frequently.

1. https://github.com/mrobinson/webkit/tree/indexeddatabase-for-jsc</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>776428</commentid>
    <comment_count>3</comment_count>
      <attachid>175938</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-11-27 00:16:54 -0800</bug_when>
    <thetext>Comment on attachment 175938
Patch

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

Thanks for the patch! I&apos;ve some doubts about the jhbuild moduleset changes and the implications of enabling indexdb.

&gt; Source/WebCore/ChangeLog:8
&gt; +        Tests: storage/indexeddb/*

Shouldn&apos;t we unskip them? Have you checked all indexdb tests actually pass?

&gt; Tools/ChangeLog:9
&gt; +        * gtk/jhbuild.modules:
&gt; +        * gtk/patches/leveldb-1.6.0-make-install.patch: Added.

I think you should explain here why we need to build leveldb in our jhbuild, and why it requires a patch. Do different versions of leveldb give different results of layout tests? would it be possible to run the tests with the leveldb installed by the distro?

&gt; Tools/gtk/jhbuild.modules:23
&gt; +      &lt;dep package=&quot;leveldb&quot;/&gt;

This means we will always build leveldb even when indexdb is not enabled. I think there&apos;s no easy way to avoid it, so I guess it would be better to add to the moduleset dependencies that need to be built always and require a particular version to get the same tests results.

&gt; configure.ac:1030
&gt; +if test &quot;$enable_indexed_database&quot; = &quot;yes&quot;; then
&gt; +    PKG_CHECK_MODULES([LEVELDB], [leveldb])
&gt; +    AC_SUBST([LEVELDB_CFLAGS])
&gt; +    AC_SUBST([LEVELDB_LIBS])
&gt; +fi

This depends on a patch applied to leveldb by our jhbuild which means that it will always fail when not using the internal jhbuild + build-webkit even if leveldb is installed. I think you should use AC_SEARCH_LIBS() when PKG_CHECK_MODULES() fails to find the library.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>776750</commentid>
    <comment_count>4</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-11-27 07:59:19 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 175938 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=175938&amp;action=review
&gt; 
&gt; Thanks for the patch! I&apos;ve some doubts about the jhbuild moduleset changes and the implications of enabling indexdb.
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:8
&gt; &gt; +        Tests: storage/indexeddb/*
&gt; 
&gt; Shouldn&apos;t we unskip them? Have you checked all indexdb tests actually pass?

IndexedDB isn&apos;t finished for JSC ports, so tests won&apos;t pass until that&apos;s complete. I don&apos;t think this patch actually enables IndexedDB. We likely shouldn&apos;t put LevelDB in the jhbuild moduleset until we&apos;ve enabled IndexedDB and are running tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>776990</commentid>
    <comment_count>5</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-11-27 11:04:33 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; (From update of attachment 175938 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=175938&amp;action=review
&gt; &gt; 
&gt; &gt; Thanks for the patch! I&apos;ve some doubts about the jhbuild moduleset changes and the implications of enabling indexdb.
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/ChangeLog:8
&gt; &gt; &gt; +        Tests: storage/indexeddb/*
&gt; &gt; 
&gt; &gt; Shouldn&apos;t we unskip them? Have you checked all indexdb tests actually pass?
&gt; 
&gt; IndexedDB isn&apos;t finished for JSC ports, so tests won&apos;t pass until that&apos;s complete. I don&apos;t think this patch actually enables IndexedDB. We likely shouldn&apos;t put LevelDB in the jhbuild moduleset until we&apos;ve enabled IndexedDB and are running tests.

+ Charles, who is doing this work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>802117</commentid>
    <comment_count>6</comment_count>
    <who name="Jussi Kukkonen (jku)">jussi.kukkonen</who>
    <bug_when>2013-01-08 00:46:35 -0800</bug_when>
    <thetext>I was just looking at this for EFL...

(In reply to comment #3)
&gt; I think you should explain here why we need to build leveldb in our jhbuild, and why it requires a patch. Do different versions of leveldb give different results of layout tests? would it be possible to run the tests with the leveldb installed by the distro?

You guys maybe handled this in other channels, but for reference:
From what I&apos;ve seen so far, the big stumbling block is helpers/memenv/memenv.h which is apparently not considered part of the library, but is used by many leveldb users. Otherwise it looks decent if not aimed at typical shared distribution (Makefile doesn&apos;t even have an install target). 

We could just copy-paste the memenv helper (&lt; 380 lines of C++) into webkit and use distro/jhbuild leveldb, right?

&gt; &gt; configure.ac:1030
&gt; &gt; +if test &quot;$enable_indexed_database&quot; = &quot;yes&quot;; then
&gt; &gt; +    PKG_CHECK_MODULES([LEVELDB], [leveldb])
&gt; &gt; +    AC_SUBST([LEVELDB_CFLAGS])
&gt; &gt; +    AC_SUBST([LEVELDB_LIBS])
&gt; &gt; +fi
&gt; 
&gt; This depends on a patch applied to leveldb by our jhbuild which means that it will always fail when not using the internal jhbuild + build-webkit even if leveldb is installed. I think you should use AC_SEARCH_LIBS() when PKG_CHECK_MODULES() fails to find the library.

Is your leveldb patch somewhere available? I was just patching it for testing as well and it would make sense if we were using the same patch...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>802120</commentid>
    <comment_count>7</comment_count>
    <who name="Jussi Kukkonen (jku)">jussi.kukkonen</who>
    <bug_when>2013-01-08 00:57:45 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; &gt; This depends on a patch applied to leveldb by our jhbuild which means that it will always fail when not using the internal jhbuild + build-webkit even if leveldb is installed. I think you should use AC_SEARCH_LIBS() when PKG_CHECK_MODULES() fails to find the library.
&gt; 
&gt; Is your leveldb patch somewhere available? I was just patching it for testing as well and it would make sense if we were using the same patch...

NM, I understood you mean the one in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>802127</commentid>
    <comment_count>8</comment_count>
    <who name="Jussi Kukkonen (jku)">jussi.kukkonen</who>
    <bug_when>2013-01-08 01:11:28 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; This depends on a patch applied to leveldb by our jhbuild which means that it will always fail when not using the internal jhbuild + build-webkit even if leveldb is installed. 

One more comment to this: because of the memenv issue I mentioned, the build will fail with distro leveldb anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>802273</commentid>
    <comment_count>9</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-01-08 08:40:54 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #5)
&gt; &gt; This depends on a patch applied to leveldb by our jhbuild which means that it will always fail when not using the internal jhbuild + build-webkit even if leveldb is installed. 
&gt; 
&gt; One more comment to this: because of the memenv issue I mentioned, the build will fail with distro leveldb anyway.

Yes, I was thinking about this issue recently and I think that we should try first to use the distribution leveldb (which is installed as a .a file on my system) and then add memenv to the ThirdParty directory (assuming the license is compatible). I&apos;ll try to write a patch like this today.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>802330</commentid>
    <comment_count>10</comment_count>
    <who name="Michael Pruett">michael</who>
    <bug_when>2013-01-08 10:24:35 -0800</bug_when>
    <thetext>I believe that the approach I have taken with this patch of building a captive library is the most maintainable despite requiring compiling LevelDB as part of building WebKit. This approach avoids the not inconsiderable burden of ensuring consistency across distributions in API revisions and in compilation settings for a library with a C++ interface.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>802364</commentid>
    <comment_count>11</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-01-08 10:43:11 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; I believe that the approach I have taken with this patch of building a captive library is the most maintainable despite requiring compiling LevelDB as part of building WebKit. This approach avoids the not inconsiderable burden of ensuring consistency across distributions in API revisions and in compilation settings for a library with a C++ interface.

The issue is that the jhbuild modules are only used by developers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>802366</commentid>
    <comment_count>12</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-01-08 10:47:08 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; I believe that the approach I have taken with this patch of building a captive library is the most maintainable despite requiring compiling LevelDB as part of building WebKit. This approach avoids the not inconsiderable burden of ensuring consistency across distributions in API revisions and in compilation settings for a library with a C++ interface.
&gt; 
&gt; The issue is that the jhbuild modules are only used by developers.

To expand on this, if we want to ship a version of leveldb to downstream, we probably need to bundle it in the ThirdParty directory. My plan for today was to only do this for memenv, but if you feel that it&apos;s important to do this for all of leveldb, I can write a patch that does that too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803118</commentid>
    <comment_count>13</comment_count>
    <who name="Jussi Kukkonen (jku)">jussi.kukkonen</who>
    <bug_when>2013-01-09 01:03:04 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; &gt; 
&gt; &gt; The issue is that the jhbuild modules are only used by developers.
&gt; 
&gt; To expand on this, if we want to ship a version of leveldb to downstream, we probably need to bundle it in the ThirdParty directory. My plan for today was to only do this for memenv, but if you feel that it&apos;s important to do this for all of leveldb, I can write a patch that does that too.

Yes. This is what I was saying in email as well: The people building operating systems are likely to strangle us if we tell them that building webkit requires a modified 3rd party project.

I vote for bundling memenv code and relying on jhbuild/distro for leveldb. I&apos;ll write to leveldb upstream just to check that this is a sane idea and what they intended memenv to be used for (that&apos;s what I assume) -- let me know if you happen to have confirmed this already or know the code well enough that this is not needed. 

I&apos;ll also try to get an install target in the Makefile and a pc file included in there so we wouldn&apos;t have to patch in future. I&apos;ll CC you guys.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803720</commentid>
    <comment_count>14</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2013-01-09 14:42:25 -0800</bug_when>
    <thetext>(In reply to comment #6)

&gt; From what I&apos;ve seen so far, the big stumbling block is helpers/memenv/memenv.h which is apparently not considered part of the library, but is used by many leveldb users. Otherwise it looks decent if not aimed at typical shared distribution (Makefile doesn&apos;t even have an install target). 

I don&apos;t know if it&apos;s used by many leveldb users. We added it to leveldb for chrome&apos;s incognito mode. Do GTK or EFL support something similar? If not, we could #ifdef chromium around memenv and then you won&apos;t have to worry about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803741</commentid>
    <comment_count>15</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-01-09 14:54:07 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #6)
&gt; 
&gt; &gt; From what I&apos;ve seen so far, the big stumbling block is helpers/memenv/memenv.h which is apparently not considered part of the library, but is used by many leveldb users. Otherwise it looks decent if not aimed at typical shared distribution (Makefile doesn&apos;t even have an install target). 
&gt; 
&gt; I don&apos;t know if it&apos;s used by many leveldb users. We added it to leveldb for chrome&apos;s incognito mode. Do GTK or EFL support something similar? If not, we could #ifdef chromium around memenv and then you won&apos;t have to worry about it.

If we add leveldb to Sources/ThirdParty, memenv shouldn&apos;t be an issue. This seems to be the way to go since WebKit needs to depend on a particular version (which distributions might not ship).

Can you comment on the amount of API/ABI-breaking changes that happen in leveldb and WebKit&apos;s IDB implementation?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803772</commentid>
    <comment_count>16</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2013-01-09 15:18:58 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #14)
&gt; &gt; (In reply to comment #6)
&gt; &gt; 
&gt; &gt; &gt; From what I&apos;ve seen so far, the big stumbling block is helpers/memenv/memenv.h which is apparently not considered part of the library, but is used by many leveldb users. Otherwise it looks decent if not aimed at typical shared distribution (Makefile doesn&apos;t even have an install target). 
&gt; &gt; 
&gt; &gt; I don&apos;t know if it&apos;s used by many leveldb users. We added it to leveldb for chrome&apos;s incognito mode. Do GTK or EFL support something similar? If not, we could #ifdef chromium around memenv and then you won&apos;t have to worry about it.
&gt; 
&gt; If we add leveldb to Sources/ThirdParty, memenv shouldn&apos;t be an issue. This seems to be the way to go since WebKit needs to depend on a particular version (which distributions might not ship).

Agreed that including a full copy of leveldb in ThirdParty is the way to go.

&gt; Can you comment on the amount of API/ABI-breaking changes that happen in leveldb and WebKit&apos;s IDB implementation?

There&apos;s been one API change in the past year. Code using the old API would not work with the new API but code using the new API would work with the old API. Does that fit this definition of &quot;breaking&quot;?

I don&apos;t know much about ABI changes, we always recompile. ABI compatibility has never been considered a goal of the leveldb project, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>804137</commentid>
    <comment_count>17</comment_count>
    <who name="Jussi Kukkonen (jku)">jussi.kukkonen</who>
    <bug_when>2013-01-10 00:56:47 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #15)
&gt; &gt; If we add leveldb to Sources/ThirdParty, memenv shouldn&apos;t be an issue. This seems to be the way to go since WebKit needs to depend on a particular version (which distributions might not ship).
&gt; 
&gt; Agreed that including a full copy of leveldb in ThirdParty is the way to go.

Can you guys explain why this is -- why we need to depend on a specific version? Didn&apos;t David just say the API is backwards compatible (or at least has been historically)?

I&apos;m fine with bundling whole leveldb as well, it&apos;s a lot better than breaking on dependency updates. But I also know distributors would be happiest if we can use the libraries they provide.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>804160</commentid>
    <comment_count>18</comment_count>
    <who name="Jussi Kukkonen (jku)">jussi.kukkonen</who>
    <bug_when>2013-01-10 01:16:41 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; Can you guys explain why this is -- why we need to depend on a specific version? Didn&apos;t David just say the API is backwards compatible (or at least has been historically)?

Shouldn&apos;t comment before coffee -- didn&apos;t notice the ABI part. I guess if soname isn&apos;t guaranteed to change when it should, then copypasta is the only option.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>804276</commentid>
    <comment_count>19</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-01-10 05:17:39 -0800</bug_when>
    <thetext>Great. I have a patch in my working copy which I expect to post today.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>804542</commentid>
    <comment_count>20</comment_count>
      <attachid>182169</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-01-10 10:57:58 -0800</bug_when>
    <thetext>Created attachment 182169
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>804552</commentid>
    <comment_count>21</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-01-10 11:07:02 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; Created an attachment (id=182169) [details]
&gt; Patch

Sorry, Michael. I didn&apos;t actually mean to obsolete your patch, but I including leveldb in ThirdParty is our best bet for the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>809379</commentid>
    <comment_count>22</comment_count>
      <attachid>183197</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-01-17 09:07:03 -0800</bug_when>
    <thetext>Created attachment 183197
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>809385</commentid>
    <comment_count>23</comment_count>
      <attachid>183197</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2013-01-17 09:20:28 -0800</bug_when>
    <thetext>Comment on attachment 183197
Patch

OK</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>809595</commentid>
    <comment_count>24</comment_count>
      <attachid>183197</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-17 12:04:11 -0800</bug_when>
    <thetext>Comment on attachment 183197
Patch

Clearing flags on attachment: 183197

Committed r140021: &lt;http://trac.webkit.org/changeset/140021&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>809596</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-17 12:04:20 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>175938</attachid>
            <date>2012-11-26 00:45:31 -0800</date>
            <delta_ts>2013-01-10 10:57:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>idb-leveldb-gtk.patch</filename>
            <type>text/plain</type>
            <size>9323</size>
            <attacher name="Michael Pruett">michael</attacher>
            
              <data encoding="base64">RnJvbTogTWljaGFlbCBQcnVldHQgPG1pY2hhZWxANjhrLm9yZz4KRGF0ZTogTW9uLCAyNiBOb3Yg
MjAxMiAwMDo0MDoxMSAtMDgwMApTdWJqZWN0OiBbR1RLXSBCdWlsZCB3aXRoIExldmVsREIgd2hl
biBJbmRleGVkREIgaXMgZW5hYmxlZAoKLS0tCiBDaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDkgKysrCiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTEgKysrCiBTb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwogU291cmNlL1dlYktp
dC9ndGsvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA5ICsrKwogU291cmNl
L1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgfCAgICAyICsKIFNv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgOSAr
KysKIFNvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtICAgICAgICAgICAgICAgICAgICAgIHwg
ICAgMSArCiBUb29scy9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8ICAgMTAgKysrCiBUb29scy9ndGsvamhidWlsZC5tb2R1bGVzICAgICAgICAgICAgICAgICAg
ICAgICAgICB8ICAgMTEgKysrCiBUb29scy9ndGsvcGF0Y2hlcy9sZXZlbGRiLTEuNy4wLW1ha2Ut
aW5zdGFsbC5wYXRjaCB8ICAgODIgKysrKysrKysrKysrKysrKysrKysKIGNvbmZpZ3VyZS5hYyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNiArKwogMTEgZmlsZXMg
Y2hhbmdlZCwgMTUxIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBUb29scy9ndGsv
cGF0Y2hlcy9sZXZlbGRiLTEuNy4wLW1ha2UtaW5zdGFsbC5wYXRjaAoKZGlmZiAtLWdpdCBhL0No
YW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA1NDdkZGY1Li5hZDYwNDM1IDEwMDY0NAotLS0gYS9D
aGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTItMTEtMjYgIE1p
Y2hhZWwgUHJ1ZXR0ICA8bWljaGFlbEA2OGsub3JnPgorCisgICAgICAgIFtHVEtdIEJ1aWxkIHdp
dGggTGV2ZWxEQiB3aGVuIEluZGV4ZWREQiBpcyBlbmFibGVkCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDMyMjAKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGNvbmZpZ3VyZS5hYzoKKwogMjAxMi0xMS0y
MyAgQWxleGlzIE1lbmFyZCAgPGFsZXhpc0B3ZWJraXQub3JnPgogCiAgICAgICAgIFtDU1MzIEJh
Y2tncm91bmRzIGFuZCBCb3JkZXJzXSBJbXBsZW1lbnQgbmV3IENTUzMgYmFja2dyb3VuZC1wb3Np
dGlvbiBwYXJzaW5nLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGRiNmZiNzguLjg0MzAxNjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNCBAQAorMjAxMi0xMS0yNiAgTWljaGFlbCBQcnVldHQgIDxtaWNoYWVsQDY4
ay5vcmc+CisKKyAgICAgICAgW0dUS10gQnVpbGQgd2l0aCBMZXZlbERCIHdoZW4gSW5kZXhlZERC
IGlzIGVuYWJsZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEwMzIyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRlc3RzOiBzdG9yYWdlL2luZGV4ZWRkYi8qCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5h
bToKKwogMjAxMi0xMS0yNSAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5j
b20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEzNTY1Ni4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUuYW0KaW5kZXggNTk0YmRhMC4uODljNWUxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAg
LTY5MSw2ICs2OTEsNyBAQCBsaWJXZWJDb3JlX2xhX0NQUEZMQUdTID0gXAogCSQoR0VPQ0xVRV9D
RkxBR1MpIFwKIAkkKEdMSUJfQ0ZMQUdTKSBcCiAJJChHU1RSRUFNRVJfQ0ZMQUdTKSBcCisJJChM
RVZFTERCX0NGTEFHUykgXAogCSQoTElCU0VDUkVUX0NGTEFHUykgXAogCSQoTElCU09VUF9DRkxB
R1MpIFwKIAkkKExJQlhNTF9DRkxBR1MpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3Rr
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwppbmRleCBiZjk2NDFiLi40
Y2ZmZDU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTItMTEtMjYgIE1p
Y2hhZWwgUHJ1ZXR0ICA8bWljaGFlbEA2OGsub3JnPgorCisgICAgICAgIFtHVEtdIEJ1aWxkIHdp
dGggTGV2ZWxEQiB3aGVuIEluZGV4ZWREQiBpcyBlbmFibGVkCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDMyMjAKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorCiAyMDEyLTEx
LTI1ICBLYXVzdHViaCBBdHJhd2Fsa2FyICA8a2F1c3R1YmhAbW90b3JvbGEuY29tPgogCiAgICAg
ICAgIFJlbW92ZSBkZXByZWNhdGVkIGxvYWQtZG9uZSBzaWduYWwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZp
bGUuYW0KaW5kZXggYmEwOTdkMC4uOTcyYzc2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9n
dGsvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0K
QEAgLTYxLDYgKzYxLDcgQEAgbGlid2Via2l0Z3RrX0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJ
T05AX0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05AX2xhX0NQUEYKIAkkKEdMSUJfQ0ZMQUdT
KSBcCiAJJChHU1RSRUFNRVJfQ0ZMQUdTKSBcCiAJJChHVEtfQ0ZMQUdTKSBcCisJJChMRVZFTERC
X0NGTEFHUykgXAogCSQoTElCU09VUF9DRkxBR1MpIFwKIAkkKExJQlhNTF9DRkxBR1MpIFwKIAkk
KExJQlhTTFRfQ0ZMQUdTKSBcCkBAIC0xMDMsNiArMTA0LDcgQEAgbGlid2Via2l0Z3RrX0BXRUJL
SVRHVEtfQVBJX01BSk9SX1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05AX2xh
X0xJQkEKIAkkKEdTVFJFQU1FUl9MSUJTKSBcCiAJJChHVEtfTElCUykgXAogCSQoSlBFR19MSUJT
KSBcCisJJChMRVZFTERCX0xJQlMpIFwKIAkkKExJQlNFQ1JFVF9MSUJTKSBcCiAJJChMSUJTT1VQ
X0xJQlMpIFwKIAkkKExJQlhNTF9MSUJTKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNzFhMjViYi4uMGUzNjMz
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDEyLTExLTI2ICBNaWNoYWVsIFBydWV0
dCAgPG1pY2hhZWxANjhrLm9yZz4KKworICAgICAgICBbR1RLXSBCdWlsZCB3aXRoIExldmVsREIg
d2hlbiBJbmRleGVkREIgaXMgZW5hYmxlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTAzMjIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKwogMjAxMi0xMS0yNSAgTWlraGFp
bCBQb3pkbnlha292ICA8bWlraGFpbC5wb3pkbnlha292QGludGVsLmNvbT4KIAogICAgICAgICBb
V0syXSBUaWxlZEJhY2tpbmdTdG9yZTogcGFnZSBjb250ZW50cyBpcyBzY2FsZWQgd3JvbmdseQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0
Mi9HTlVtYWtlZmlsZS5hbQppbmRleCAwOTdjZGMxLi42MjJhNTM3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmls
ZS5hbQpAQCAtMTg1LDYgKzE4NSw3IEBAIGxpYndlYmtpdDJndGtfQFdFQktJVEdUS19BUElfTUFK
T1JfVkVSU0lPTkBfQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkBfbGFfTElCCiAJJChHVEtf
TElCUykgXAogCSQoR1RLX1VOSVhfUFJJTlRJTkdfTElCUykgXAogCSQoSlBFR19MSUJTKSBcCisJ
JChMRVZFTERCX0xJQlMpIFwKIAkkKExJQlNFQ1JFVF9MSUJTKSBcCiAJJChMSUJTT1VQX0xJQlMp
IFwKIAkkKExJQlhNTF9MSUJTKSBcCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29s
cy9DaGFuZ2VMb2cKaW5kZXggODgwM2E2Zi4uM2NlOWY4ZCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hh
bmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEyLTExLTI2
ICBNaWNoYWVsIFBydWV0dCAgPG1pY2hhZWxANjhrLm9yZz4KKworICAgICAgICBbR1RLXSBCdWls
ZCB3aXRoIExldmVsREIgd2hlbiBJbmRleGVkREIgaXMgZW5hYmxlZAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzMjIwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBndGsvamhidWlsZC5tb2R1bGVzOgor
ICAgICAgICAqIGd0ay9wYXRjaGVzL2xldmVsZGItMS42LjAtbWFrZS1pbnN0YWxsLnBhdGNoOiBB
ZGRlZC4KKwogMjAxMi0xMS0yNCAgWmFuIERvYmVyc2VrICA8emFuZG9iZXJzZWtAZ21haWwuY29t
PgogCiAgICAgICAgIEFkZCB0aGUgLS1vcmRlciBvcHRpb24gdG8gTlJXVApkaWZmIC0tZ2l0IGEv
VG9vbHMvZ3RrL2poYnVpbGQubW9kdWxlcyBiL1Rvb2xzL2d0ay9qaGJ1aWxkLm1vZHVsZXMKaW5k
ZXggMGFiZjE0NS4uNDMwMWU2NyAxMDA2NDQKLS0tIGEvVG9vbHMvZ3RrL2poYnVpbGQubW9kdWxl
cworKysgYi9Ub29scy9ndGsvamhidWlsZC5tb2R1bGVzCkBAIC0yMCw2ICsyMCw3IEBACiAgICAg
ICA8ZGVwIHBhY2thZ2U9ImxpYnNvdXAiLz4KICAgICAgIDxkZXAgcGFja2FnZT0iYXQtc3BpMi1j
b3JlIi8+CiAgICAgICA8ZGVwIHBhY2thZ2U9ImF0LXNwaTItYXRrIi8+CisgICAgICA8ZGVwIHBh
Y2thZ2U9ImxldmVsZGIiLz4KICAgICA8L2RlcGVuZGVuY2llcz4KICAgPC9tZXRhbW9kdWxlPgog
CkBAIC0zOSw2ICs0MCw4IEBACiAgICAgICBocmVmPSJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9y
ZyIvPgogICA8cmVwb3NpdG9yeSB0eXBlPSJ0YXJiYWxsIiBuYW1lPSJ4bWxzb2Z0Lm9yZyIKICAg
ICAgIGhyZWY9ImZ0cDovL3htbHNvZnQub3JnIi8+CisgIDxyZXBvc2l0b3J5IHR5cGU9InRhcmJh
bGwiIG5hbWU9ImxldmVsZGIuZ29vZ2xlY29kZS5jb20iCisgICAgICBocmVmPSJodHRwOi8vbGV2
ZWxkYi5nb29nbGVjb2RlLmNvbSIvPgogCiAgIDxhdXRvdG9vbHMgaWQ9Im1ha2UiIGF1dG9nZW4t
c2g9ImNvbmZpZ3VyZSI+CiAgICAgPGJyYW5jaCByZXBvPSJmdHAuZ251Lm9yZyIKQEAgLTE3Miw2
ICsxNzUsMTQgQEAKICAgICAgICAgICAgIHRhZz0iTElCU09VUF8yXzM5XzIiLz4KICAgPC9hdXRv
dG9vbHM+CiAKKyAgPGF1dG90b29scyBpZD0ibGV2ZWxkYiI+CisgICAgPGJyYW5jaCBtb2R1bGU9
ImZpbGVzL2xldmVsZGItMS43LjAudGFyLmd6IiB2ZXJzaW9uPSIxLjcuMCIKKyAgICAgICAgICAg
IHJlcG89ImxldmVsZGIuZ29vZ2xlY29kZS5jb20iCisgICAgICAgICAgICBtZDVzdW09IjVjM2M2
Y2ZiYjE2YTIxY2RiZWEwZGI2NTZhYTMyZmVjIj4KKyAgICAgIDxwYXRjaCBmaWxlPSJsZXZlbGRi
LTEuNy4wLW1ha2UtaW5zdGFsbC5wYXRjaCIgc3RyaXA9IjEiLz4KKyAgICA8L2JyYW5jaD4KKyAg
PC9hdXRvdG9vbHM+CisKICAgPGF1dG90b29scyBpZD0iZm9udGNvbmZpZyIgYXV0b2dlbi1zaD0i
Y29uZmlndXJlIj4KICAgICA8YnJhbmNoIG1vZHVsZT0ic29mdHdhcmUvZm9udGNvbmZpZy9yZWxl
YXNlL2ZvbnRjb25maWctMi44LjAudGFyLmd6IiB2ZXJzaW9uPSIyLjguMCIKICAgICAgICAgICAg
IHJlcG89ImZyZWVkZXNrdG9wLm9yZyIKZGlmZiAtLWdpdCBhL1Rvb2xzL2d0ay9wYXRjaGVzL2xl
dmVsZGItMS43LjAtbWFrZS1pbnN0YWxsLnBhdGNoIGIvVG9vbHMvZ3RrL3BhdGNoZXMvbGV2ZWxk
Yi0xLjcuMC1tYWtlLWluc3RhbGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uYzVlMTQwMQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL2d0ay9wYXRjaGVzL2xldmVs
ZGItMS43LjAtbWFrZS1pbnN0YWxsLnBhdGNoCkBAIC0wLDAgKzEsODIgQEAKK2RpZmYgLXJ1TiBs
ZXZlbGRiLTEuNy4wL2F1dG9nZW4uc2ggbGV2ZWxkYi0xLjcuMC1uZXcvYXV0b2dlbi5zaAorLS0t
IGxldmVsZGItMS43LjAvYXV0b2dlbi5zaAkxOTY5LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAt
MDgwMAorKysrIGxldmVsZGItMS43LjAtbmV3L2F1dG9nZW4uc2gJMjAxMi0xMC0xNiAxMzoyNjo1
OS40NTk2NTk0OTAgLTA3MDAKK0BAIC0wLDAgKzEsNDUgQEAKKysjIS9iaW4vYmFzaAorKworK1BS
RUZJWD0vdXNyL2xvY2FsCisrTElCRElSPWxpYgorKworK3doaWxlIFsgJCMgLWd0IDAgXQorK2Rv
CisrCWFyZz0kMQorKwllY2hvIGFyZyAkYXJnCisrCisrCWNhc2UgJGFyZyBpbgorKwkJLS1wcmVm
aXgpCisrCQkJZWNobyBzZXR0aW5nIHByZWZpeCB0byAkMgorKwkJCVBSRUZJWD0kMgorKwkJCXNo
aWZ0CisrCQkJOzsKKysJCS0tbGliZGlyKQorKwkJCWVjaG8gc2V0dGluZyBsaWJkaXIgdG8gJDIK
KysJCQlMSUJESVI9JDIKKysJCQlzaGlmdAorKwkJCTs7CisrCWVzYWMKKysKKysJc2hpZnQKKytk
b25lCisrCisrcm0gLWYgYXV0b2dlbl9jb25maWcubWsKKytlY2hvICJMSUJESVI9JExJQkRJUiIg
Pj4gYXV0b2dlbl9jb25maWcubWsKKytlY2hvICJQUkVGSVg9JFBSRUZJWCIgPj4gYXV0b2dlbl9j
b25maWcubWsKKysKKytybSAtZiBsZXZlbGRiLnBjCisrY2F0ID4gbGV2ZWxkYi5wYyA8PEVPRAor
K3ByZWZpeD0kUFJFRklYCisrZXhlY19wcmVmaXg9XCR7cHJlZml4fQorK2xpYmRpcj0kTElCRElS
CisraW5jbHVkZWRpcj1cJHtwcmVmaXh9L2luY2x1ZGUKKysKKytOYW1lOiBMZXZlbERCCisrRGVz
Y3JpcHRpb246IExldmVsREIKKytSZXF1aXJlczoKKytWZXJzaW9uOiAxLjcuMAorK0xpYnM6IC1M
XCR7bGliZGlyfSAtbGxldmVsZGIgLWxtZW1lbnYKKytMaWJzLnByaXZhdGU6CisrQ2ZsYWdzOiAt
SVwke2luY2x1ZGVkaXJ9CisrRU9ECitkaWZmIC1ydU4gbGV2ZWxkYi0xLjcuMC9NYWtlZmlsZSBs
ZXZlbGRiLTEuNy4wLW5ldy9NYWtlZmlsZQorLS0tIGxldmVsZGItMS43LjAvTWFrZWZpbGUJMjAx
Mi0xMC0xMiAxMTo0ODoyNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBsZXZlbGRiLTEuNy4wLW5ldy9N
YWtlZmlsZQkyMDEyLTEwLTE2IDEzOjI2OjQ3LjkzNTY1OTQ5MSAtMDcwMAorQEAgLTE3LDYgKzE3
LDEwIEBACisgIyB0aGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGJ5IHRoZSBwcmV2aW91cyBsaW5lIHRv
IHNldCBidWlsZCBmbGFncyBhbmQgc291cmNlcworIGluY2x1ZGUgYnVpbGRfY29uZmlnLm1rCisg
CisraW5jbHVkZSBhdXRvZ2VuX2NvbmZpZy5taworKworK0lOU1RBTEw9aW5zdGFsbAorKworIENG
TEFHUyArPSAtSS4gLUkuL2luY2x1ZGUgJChQTEFURk9STV9DQ0ZMQUdTKSAkKE9QVCkKKyBDWFhG
TEFHUyArPSAtSS4gLUkuL2luY2x1ZGUgJChQTEFURk9STV9DWFhGTEFHUykgJChPUFQpCisgCitA
QCAtODcsNiArOTEsMTggQEAKKyAKKyBhbGw6ICQoU0hBUkVEKSAkKExJQlJBUlkpCisgCisraW5z
dGFsbDogJChMSUJSQVJZKSAkKE1FTUVOVkxJQlJBUlkpCisrCSQoSU5TVEFMTCkgLWQgJChERVNU
RElSKS8kKExJQkRJUikKKysJJChJTlNUQUxMKSAkKExJQlJBUlkpICQoREVTVERJUikvJChMSUJE
SVIpCisrCSQoSU5TVEFMTCkgJChNRU1FTlZMSUJSQVJZKSAkKERFU1RESVIpLyQoTElCRElSKQor
KwkkKElOU1RBTEwpIC1kICQoREVTVERJUikvJChQUkVGSVgpL2luY2x1ZGUvbGV2ZWxkYgorKwkk
KElOU1RBTEwpIC1tIDQ0NCBpbmNsdWRlL2xldmVsZGIvKi5oICQoREVTVERJUikvJChQUkVGSVgp
L2luY2x1ZGUvbGV2ZWxkYgorKwkkKElOU1RBTEwpIC1kICQoREVTVERJUikvJChQUkVGSVgpL2lu
Y2x1ZGUvaGVscGVycworKwkkKElOU1RBTEwpIC1kICQoREVTVERJUikvJChQUkVGSVgpL2luY2x1
ZGUvaGVscGVycy9tZW1lbnYKKysJJChJTlNUQUxMKSAtbSA0NDQgaGVscGVycy9tZW1lbnYvKi5o
ICQoREVTVERJUikvJChQUkVGSVgpL2luY2x1ZGUvaGVscGVycy9tZW1lbnYKKysJJChJTlNUQUxM
KSAtZCAkKERFU1RESVIpLyQoTElCRElSKS9wa2djb25maWcKKysJJChJTlNUQUxMKSAtbSA0NDQg
bGV2ZWxkYi5wYyAkKERFU1RESVIpLyQoTElCRElSKS9wa2djb25maWcKKysKKyBjaGVjazogYWxs
ICQoUFJPR1JBTVMpICQoVEVTVFMpCisgCWZvciB0IGluICQoVEVTVFMpOyBkbyBlY2hvICIqKioq
KiBSdW5uaW5nICQkdCI7IC4vJCR0IHx8IGV4aXQgMTsgZG9uZQorIApkaWZmIC0tZ2l0IGEvY29u
ZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCmluZGV4IDRlMWYwZTguLjI3Mzk3NGYgMTAwNjQ0Ci0t
LSBhL2NvbmZpZ3VyZS5hYworKysgYi9jb25maWd1cmUuYWMKQEAgLTEwMjMsNiArMTAyMywxMiBA
QCBpZiB0ZXN0ICIkZW5hYmxlX2dlb2xvY2F0aW9uIiA9ICJ5ZXMiOyB0aGVuCiAgICAgQUNfU1VC
U1QoW0dFT0NMVUVfTElCU10pCiBmaQogCitpZiB0ZXN0ICIkZW5hYmxlX2luZGV4ZWRfZGF0YWJh
c2UiID0gInllcyI7IHRoZW4KKyAgICBQS0dfQ0hFQ0tfTU9EVUxFUyhbTEVWRUxEQl0sIFtsZXZl
bGRiXSkKKyAgICBBQ19TVUJTVChbTEVWRUxEQl9DRkxBR1NdKQorICAgIEFDX1NVQlNUKFtMRVZF
TERCX0xJQlNdKQorZmkKKwogIyBjaGVjayBmb3IgWFJlbmRlciB1bmRlciBMaW51eC9Vbml4LiBT
b21lIGxpbmtlcnMgcmVxdWlyZSBleHBsaWNpdAogIyBsaW5rYWdlIChsaWtlIEdOVSBHb2xkKSwg
c28gd2UgY2Fubm90IHJlbHkgb24gR1RLKyBwdWxsaW5nIFhSZW5kZXIKIGlmIHRlc3QgIiRvc193
aW4zMiIgPSAibm8iOyB0aGVuCi0tIAoxLjcuOS41Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>182169</attachid>
            <date>2013-01-10 10:57:58 -0800</date>
            <delta_ts>2013-01-17 09:06:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103220-20130110105453.patch</filename>
            <type>text/plain</type>
            <size>876496</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM5MzI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9DaGFuZ2VMb2cgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9DaGFuZ2VMb2cKaW5kZXggMTI5NzE3ZTZk
ZWQzOGZjZGRkMTlkOThmMzc1N2FlZmJlZDFhNWFjNi4uZTU0MjdiM2MzOGM1MzU1YjI0NDZkNGRm
NWRiZDE5Zjg5MTIwMGFhNSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEz
LTAxLTA5ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAg
ICBbR1RLXSBCdWlsZCB3aXRoIExldmVsREIgd2hlbiBJbmRleGVkREIgaXMgZW5hYmxlZAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzMjIwCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHRoZSBsZXZl
bGRiIDEuOS4wIHNvdXJjZSBjb2RlIHRvIHRoZSBUaGlyZFBhcnR5IGRlcGVuZGVuY2llcy4KKyAg
ICAgICAgV2UgY2Fubm90IGRlcGVuZCBvbiBsZXZlbGRiIHByb3ZpZGVkIGJ5IHRoZSBkaXN0cmli
dXRpb24sIGJlY2F1c2UKKyAgICAgICAgaXQgc29tZXRpbWVzIGJyZWFrcyBBUEkgY29tcGF0aWJp
bGl0eS4KKworICAgICAgICAqIGxldmVsZGI6IEltcG9ydGVkIGZyb20gdGhlIDEuOS4wIGxldmVs
ZGIgc291cmNlIHRhcmJhbGwuCisKIDIwMTMtMDEtMDkgIERhdmlkIEZhcmxlciAgPGRmYXJsZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIENoYW5nZSBBUkNIUyB0byBnZW5lcmljIHNldHRpbmcgdG8g
d29yayB3aXRoIG11bHRpcGxlIHBsYXRmb3Jtcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiMDJiNDZiZjgyNjFm
NTViYmYwNGI1ZGYzMjQ4NGFjNWVlYmQwN2Y4Li4zZDAwYWEwYTM5ZmZkYzcxNDdmODJiNzRjMzk3
ZjMyODU5NDFiZTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTMtMDEtMDkgIE1h
cnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIEJ1
aWxkIHdpdGggTGV2ZWxEQiB3aGVuIEluZGV4ZWREQiBpcyBlbmFibGVkCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDMyMjAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgaXMg
anVzdCBhIGJ1aWxkIGNoYW5nZS4gSW5kZXhlZERhdGFiYXNlIHN1cHBvcnQKKyAgICAgICAgaXMg
YWxyZWFkeSBjb3ZlcmVkIGJ5IHRoZSBzdWl0ZSBvZiBzdG9yYWdlIGxheW91dCB0ZXN0cy4KKwor
ICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGQgdGhlIGxldmVsZGIgY29udmVuaWVuY2UgbGli
cmFyeS4KKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOiBBZGQgdGhlIGxpc3Qgb2Ygc291
cmNlcy4KKwogMjAxMy0wMS0wOSAgT2phbiBWYWZhaSAgPG9qYW5AY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIGludHJpbnNpYyBtaW4td2lkdGhzIGRvbid0IG92ZXJyaWRlIHdpZHRoIGZvciBmaWxl
IHVwbG9hZCBjb250cm9scwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmluZGV4IDZkOGIwMDBmOTVmZTg5ZGU5ZmIy
NDY1MGQ4ZTNiNGMzYTExNDZjZDkuLmE4NjAxNzllZTQ2YTRjNzFhZDkxYzI3Y2YzNzNiZGJhYjA1
OTAxMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMy0wMS0wOSAgTWFy
dGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gQnVp
bGQgd2l0aCBMZXZlbERCIHdoZW4gSW5kZXhlZERCIGlzIGVuYWJsZWQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzIyMAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IFdoZW4g
SW5kZXhlZERhdGFiYXNlIGlzIGVuYWJsZWQgYWRkIHRoZSBsZXZlbGRiIGNvbnZlbmllbmNlCisg
ICAgICAgIGxpYnJhcnkgdG8gdGhlIHNoYXJlZCBsaWJyYXJ5IGxpbmsgcGhhc2UuCisKIDIwMTMt
MDEtMDggIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZWQg
dGhlIG5lZWQgZm9yIHRoZSBQcm9wb3NlZERhdGFiYXNlIG1lY2hhbmlzbS4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRl
eCBhMWFlNmE4MDE1YjZjZTVlMWYzYjJiM2M3MDhmN2QzN2Q5MDZlZmNjLi45YTY1N2I2NWMzMWYx
MzYxN2YyZjUzNzU5YzlhOWQzMDg5OGIyNDc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMTMtMDEtMDkgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisg
ICAgICAgIFtHVEtdIEJ1aWxkIHdpdGggTGV2ZWxEQiB3aGVuIEluZGV4ZWREQiBpcyBlbmFibGVk
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDMyMjAK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEdOVW1h
a2VmaWxlLmFtOiBXaGVuIEluZGV4ZWREYXRhYmFzZSBpcyBlbmFibGVkIGFkZCB0aGUgbGV2ZWxk
YiBjb252ZW5pZW5jZQorICAgICAgICBsaWJyYXJ5IHRvIHRoZSBzaGFyZWQgbGlicmFyeSBsaW5r
IHBoYXNlLgorCiAyMDEzLTAxLTEwICBaYW4gRG9iZXJzZWsgIDx6YW5kb2JlcnNla0BnbWFpbC5j
b20+CiAKICAgICAgICAgUmVtb3ZlIHRoZSBFTkFCTEVfQU5JTUFUSU9OX0FQSSBmZWF0dXJlIGRl
ZmluZSBvY2N1cmVuY2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL0FV
VEhPUlMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL0FVVEhPUlMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjdh
OTQwN2U1MmZkYzUxN2YzYWIyODc0MWUwNDI2YzMxODBkNDQ0ZQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvQVVUSE9SUwpAQCAtMCwwICsxLDggQEAKKyMgTmFt
ZXMgc2hvdWxkIGJlIGFkZGVkIHRvIHRoaXMgZmlsZSBsaWtlIHNvOgorIyBOYW1lIG9yIE9yZ2Fu
aXphdGlvbiA8ZW1haWwgYWRkcmVzcz4KKworR29vZ2xlIEluYy4KKworIyBJbml0aWFsIHZlcnNp
b24gYXV0aG9yczoKK0plZmZyZXkgRGVhbiA8amVmZkBnb29nbGUuY29tPgorU2FuamF5IEdoZW1h
d2F0IDxzYW5qYXlAZ29vZ2xlLmNvbT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xl
dmVsZGIvTElDRU5TRSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvTElDRU5TRQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi44ZTgwMjA4Y2Q3MmIzMjI1Yzg3ZDkxMTFjNGQ3Y2FiMTNhZjFjMmFjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9MSUNFTlNFCkBAIC0wLDAgKzEsMjcg
QEAKK0NvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKK21ldDoKKworICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCitjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCitpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCitkaXN0cmlidXRpb24uCisgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKK2NvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCit0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCitBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCitTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKK0RBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCitPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGV2ZWxkYi9NYWtlZmlsZSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvTWFrZWZp
bGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNDJjNDk1MmZlYzA0OGRlYWJjMDdhNmZmZmYyYjFiOTUxYTRmZTUyYwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvTWFrZWZpbGUKQEAg
LTAsMCArMSwyMDIgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyMgZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9y
cy4KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisj
IFVuY29tbWVudCBleGFjdGx5IG9uZSBvZiB0aGUgbGluZXMgbGFiZWxsZWQgKEEpLCAoQiksIGFu
ZCAoQykgYmVsb3cKKyMgdG8gc3dpdGNoIGJldHdlZW4gY29tcGlsYXRpb24gbW9kZXMuCisKK09Q
VCA/PSAtTzIgLUROREVCVUcgICAgICAgIyAoQSkgUHJvZHVjdGlvbiB1c2UgKG9wdGltaXplZCBt
b2RlKQorIyBPUFQgPz0gLWcyICAgICAgICAgICAgICAjIChCKSBEZWJ1ZyBtb2RlLCB3LyBmdWxs
IGxpbmUtbGV2ZWwgZGVidWdnaW5nIHN5bWJvbHMKKyMgT1BUID89IC1PMiAtZzIgLUROREVCVUcg
IyAoQykgUHJvZmlsaW5nIG1vZGU6IG9wdCwgYnV0IHcvZGVidWdnaW5nIHN5bWJvbHMKKyMtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIGRldGVjdCB3
aGF0IHBsYXRmb3JtIHdlJ3JlIGJ1aWxkaW5nIG9uCiskKHNoZWxsIENDPSQoQ0MpIENYWD0kKENY
WCkgVEFSR0VUX09TPSQoVEFSR0VUX09TKSBcCisgICAgLi9idWlsZF9kZXRlY3RfcGxhdGZvcm0g
YnVpbGRfY29uZmlnLm1rIC4vKQorIyB0aGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGJ5IHRoZSBwcmV2
aW91cyBsaW5lIHRvIHNldCBidWlsZCBmbGFncyBhbmQgc291cmNlcworaW5jbHVkZSBidWlsZF9j
b25maWcubWsKKworQ0ZMQUdTICs9IC1JLiAtSS4vaW5jbHVkZSAkKFBMQVRGT1JNX0NDRkxBR1Mp
ICQoT1BUKQorQ1hYRkxBR1MgKz0gLUkuIC1JLi9pbmNsdWRlICQoUExBVEZPUk1fQ1hYRkxBR1Mp
ICQoT1BUKQorCitMREZMQUdTICs9ICQoUExBVEZPUk1fTERGTEFHUykKK0xJQlMgKz0gJChQTEFU
Rk9STV9MSUJTKQorCitMSUJPQkpFQ1RTID0gJChTT1VSQ0VTOi5jYz0ubykKK01FTUVOVk9CSkVD
VFMgPSAkKE1FTUVOVl9TT1VSQ0VTOi5jYz0ubykKKworVEVTVFVUSUwgPSAuL3V0aWwvdGVzdHV0
aWwubworVEVTVEhBUk5FU1MgPSAuL3V0aWwvdGVzdGhhcm5lc3MubyAkKFRFU1RVVElMKQorCitU
RVNUUyA9IFwKKwlhcmVuYV90ZXN0IFwKKwlibG9vbV90ZXN0IFwKKwljX3Rlc3QgXAorCWNhY2hl
X3Rlc3QgXAorCWNvZGluZ190ZXN0IFwKKwljb3JydXB0aW9uX3Rlc3QgXAorCWNyYzMyY190ZXN0
IFwKKwlkYl90ZXN0IFwKKwlkYmZvcm1hdF90ZXN0IFwKKwllbnZfdGVzdCBcCisJZmlsZW5hbWVf
dGVzdCBcCisJZmlsdGVyX2Jsb2NrX3Rlc3QgXAorCWxvZ190ZXN0IFwKKwltZW1lbnZfdGVzdCBc
CisJc2tpcGxpc3RfdGVzdCBcCisJdGFibGVfdGVzdCBcCisJdmVyc2lvbl9lZGl0X3Rlc3QgXAor
CXZlcnNpb25fc2V0X3Rlc3QgXAorCXdyaXRlX2JhdGNoX3Rlc3QKKworUFJPR1JBTVMgPSBkYl9i
ZW5jaCBsZXZlbGRidXRpbCAkKFRFU1RTKQorQkVOQ0hNQVJLUyA9IGRiX2JlbmNoX3NxbGl0ZTMg
ZGJfYmVuY2hfdHJlZV9kYgorCitMSUJSQVJZID0gbGlibGV2ZWxkYi5hCitNRU1FTlZMSUJSQVJZ
ID0gbGlibWVtZW52LmEKKworZGVmYXVsdDogYWxsCisKKyMgU2hvdWxkIHdlIGJ1aWxkIHNoYXJl
ZCBsaWJyYXJpZXM/CitpZm5lcSAoJChQTEFURk9STV9TSEFSRURfRVhUKSwpCisKK2lmbmVxICgk
KFBMQVRGT1JNX1NIQVJFRF9WRVJTSU9ORUQpLHRydWUpCitTSEFSRUQxID0gbGlibGV2ZWxkYi4k
KFBMQVRGT1JNX1NIQVJFRF9FWFQpCitTSEFSRUQyID0gJChTSEFSRUQxKQorU0hBUkVEMyA9ICQo
U0hBUkVEMSkKK1NIQVJFRCA9ICQoU0hBUkVEMSkKK2Vsc2UKKyMgVXBkYXRlIGRiLmggaWYgeW91
IGNoYW5nZSB0aGVzZS4KK1NIQVJFRF9NQUpPUiA9IDEKK1NIQVJFRF9NSU5PUiA9IDkKK1NIQVJF
RDEgPSBsaWJsZXZlbGRiLiQoUExBVEZPUk1fU0hBUkVEX0VYVCkKK1NIQVJFRDIgPSAkKFNIQVJF
RDEpLiQoU0hBUkVEX01BSk9SKQorU0hBUkVEMyA9ICQoU0hBUkVEMSkuJChTSEFSRURfTUFKT1Ip
LiQoU0hBUkVEX01JTk9SKQorU0hBUkVEID0gJChTSEFSRUQxKSAkKFNIQVJFRDIpICQoU0hBUkVE
MykKKyQoU0hBUkVEMSk6ICQoU0hBUkVEMykKKwlsbiAtZnMgJChTSEFSRUQzKSAkKFNIQVJFRDEp
CiskKFNIQVJFRDIpOiAkKFNIQVJFRDMpCisJbG4gLWZzICQoU0hBUkVEMykgJChTSEFSRUQyKQor
ZW5kaWYKKworJChTSEFSRUQzKToKKwkkKENYWCkgJChMREZMQUdTKSAkKFBMQVRGT1JNX1NIQVJF
RF9MREZMQUdTKSQoU0hBUkVEMikgJChDWFhGTEFHUykgJChQTEFURk9STV9TSEFSRURfQ0ZMQUdT
KSAkKFNPVVJDRVMpIC1vICQoU0hBUkVEMykgJChMSUJTKQorCitlbmRpZiAgIyBQTEFURk9STV9T
SEFSRURfRVhUCisKK2FsbDogJChTSEFSRUQpICQoTElCUkFSWSkKKworY2hlY2s6IGFsbCAkKFBS
T0dSQU1TKSAkKFRFU1RTKQorCWZvciB0IGluICQoVEVTVFMpOyBkbyBlY2hvICIqKioqKiBSdW5u
aW5nICQkdCI7IC4vJCR0IHx8IGV4aXQgMTsgZG9uZQorCitjbGVhbjoKKwktcm0gLWYgJChQUk9H
UkFNUykgJChCRU5DSE1BUktTKSAkKExJQlJBUlkpICQoU0hBUkVEKSAkKE1FTUVOVkxJQlJBUlkp
ICovKi5vICovKi8qLm8gaW9zLXg4Ni8qLyoubyBpb3MtYXJtLyovKi5vIGJ1aWxkX2NvbmZpZy5t
aworCS1ybSAtcmYgaW9zLXg4Ni8qIGlvcy1hcm0vKgorCiskKExJQlJBUlkpOiAkKExJQk9CSkVD
VFMpCisJcm0gLWYgJEAKKwkkKEFSKSAtcnMgJEAgJChMSUJPQkpFQ1RTKQorCitkYl9iZW5jaDog
ZGIvZGJfYmVuY2gubyAkKExJQk9CSkVDVFMpICQoVEVTVFVUSUwpCisJJChDWFgpICQoTERGTEFH
UykgZGIvZGJfYmVuY2gubyAkKExJQk9CSkVDVFMpICQoVEVTVFVUSUwpIC1vICRAICQoTElCUykK
KworZGJfYmVuY2hfc3FsaXRlMzogZG9jL2JlbmNoL2RiX2JlbmNoX3NxbGl0ZTMubyAkKExJQk9C
SkVDVFMpICQoVEVTVFVUSUwpCisJJChDWFgpICQoTERGTEFHUykgZG9jL2JlbmNoL2RiX2JlbmNo
X3NxbGl0ZTMubyAkKExJQk9CSkVDVFMpICQoVEVTVFVUSUwpIC1vICRAIC1sc3FsaXRlMyAkKExJ
QlMpCisKK2RiX2JlbmNoX3RyZWVfZGI6IGRvYy9iZW5jaC9kYl9iZW5jaF90cmVlX2RiLm8gJChM
SUJPQkpFQ1RTKSAkKFRFU1RVVElMKQorCSQoQ1hYKSAkKExERkxBR1MpIGRvYy9iZW5jaC9kYl9i
ZW5jaF90cmVlX2RiLm8gJChMSUJPQkpFQ1RTKSAkKFRFU1RVVElMKSAtbyAkQCAtbGt5b3RvY2Fi
aW5ldCAkKExJQlMpCisKK2xldmVsZGJ1dGlsOiBkYi9sZXZlbGRiX21haW4ubyAkKExJQk9CSkVD
VFMpCisJJChDWFgpICQoTERGTEFHUykgZGIvbGV2ZWxkYl9tYWluLm8gJChMSUJPQkpFQ1RTKSAt
byAkQCAkKExJQlMpCisKK2FyZW5hX3Rlc3Q6IHV0aWwvYXJlbmFfdGVzdC5vICQoTElCT0JKRUNU
UykgJChURVNUSEFSTkVTUykKKwkkKENYWCkgJChMREZMQUdTKSB1dGlsL2FyZW5hX3Rlc3QubyAk
KExJQk9CSkVDVFMpICQoVEVTVEhBUk5FU1MpIC1vICRAICQoTElCUykKKworYmxvb21fdGVzdDog
dXRpbC9ibG9vbV90ZXN0Lm8gJChMSUJPQkpFQ1RTKSAkKFRFU1RIQVJORVNTKQorCSQoQ1hYKSAk
KExERkxBR1MpIHV0aWwvYmxvb21fdGVzdC5vICQoTElCT0JKRUNUUykgJChURVNUSEFSTkVTUykg
LW8gJEAgJChMSUJTKQorCitjX3Rlc3Q6IGRiL2NfdGVzdC5vICQoTElCT0JKRUNUUykgJChURVNU
SEFSTkVTUykKKwkkKENYWCkgJChMREZMQUdTKSBkYi9jX3Rlc3QubyAkKExJQk9CSkVDVFMpICQo
VEVTVEhBUk5FU1MpIC1vICRAICQoTElCUykKKworY2FjaGVfdGVzdDogdXRpbC9jYWNoZV90ZXN0
Lm8gJChMSUJPQkpFQ1RTKSAkKFRFU1RIQVJORVNTKQorCSQoQ1hYKSAkKExERkxBR1MpIHV0aWwv
Y2FjaGVfdGVzdC5vICQoTElCT0JKRUNUUykgJChURVNUSEFSTkVTUykgLW8gJEAgJChMSUJTKQor
Citjb2RpbmdfdGVzdDogdXRpbC9jb2RpbmdfdGVzdC5vICQoTElCT0JKRUNUUykgJChURVNUSEFS
TkVTUykKKwkkKENYWCkgJChMREZMQUdTKSB1dGlsL2NvZGluZ190ZXN0Lm8gJChMSUJPQkpFQ1RT
KSAkKFRFU1RIQVJORVNTKSAtbyAkQCAkKExJQlMpCisKK2NvcnJ1cHRpb25fdGVzdDogZGIvY29y
cnVwdGlvbl90ZXN0Lm8gJChMSUJPQkpFQ1RTKSAkKFRFU1RIQVJORVNTKQorCSQoQ1hYKSAkKExE
RkxBR1MpIGRiL2NvcnJ1cHRpb25fdGVzdC5vICQoTElCT0JKRUNUUykgJChURVNUSEFSTkVTUykg
LW8gJEAgJChMSUJTKQorCitjcmMzMmNfdGVzdDogdXRpbC9jcmMzMmNfdGVzdC5vICQoTElCT0JK
RUNUUykgJChURVNUSEFSTkVTUykKKwkkKENYWCkgJChMREZMQUdTKSB1dGlsL2NyYzMyY190ZXN0
Lm8gJChMSUJPQkpFQ1RTKSAkKFRFU1RIQVJORVNTKSAtbyAkQCAkKExJQlMpCisKK2RiX3Rlc3Q6
IGRiL2RiX3Rlc3QubyAkKExJQk9CSkVDVFMpICQoVEVTVEhBUk5FU1MpCisJJChDWFgpICQoTERG
TEFHUykgZGIvZGJfdGVzdC5vICQoTElCT0JKRUNUUykgJChURVNUSEFSTkVTUykgLW8gJEAgJChM
SUJTKQorCitkYmZvcm1hdF90ZXN0OiBkYi9kYmZvcm1hdF90ZXN0Lm8gJChMSUJPQkpFQ1RTKSAk
KFRFU1RIQVJORVNTKQorCSQoQ1hYKSAkKExERkxBR1MpIGRiL2RiZm9ybWF0X3Rlc3QubyAkKExJ
Qk9CSkVDVFMpICQoVEVTVEhBUk5FU1MpIC1vICRAICQoTElCUykKKworZW52X3Rlc3Q6IHV0aWwv
ZW52X3Rlc3QubyAkKExJQk9CSkVDVFMpICQoVEVTVEhBUk5FU1MpCisJJChDWFgpICQoTERGTEFH
UykgdXRpbC9lbnZfdGVzdC5vICQoTElCT0JKRUNUUykgJChURVNUSEFSTkVTUykgLW8gJEAgJChM
SUJTKQorCitmaWxlbmFtZV90ZXN0OiBkYi9maWxlbmFtZV90ZXN0Lm8gJChMSUJPQkpFQ1RTKSAk
KFRFU1RIQVJORVNTKQorCSQoQ1hYKSAkKExERkxBR1MpIGRiL2ZpbGVuYW1lX3Rlc3QubyAkKExJ
Qk9CSkVDVFMpICQoVEVTVEhBUk5FU1MpIC1vICRAICQoTElCUykKKworZmlsdGVyX2Jsb2NrX3Rl
c3Q6IHRhYmxlL2ZpbHRlcl9ibG9ja190ZXN0Lm8gJChMSUJPQkpFQ1RTKSAkKFRFU1RIQVJORVNT
KQorCSQoQ1hYKSAkKExERkxBR1MpIHRhYmxlL2ZpbHRlcl9ibG9ja190ZXN0Lm8gJChMSUJPQkpF
Q1RTKSAkKFRFU1RIQVJORVNTKSAtbyAkQCAkKExJQlMpCisKK2xvZ190ZXN0OiBkYi9sb2dfdGVz
dC5vICQoTElCT0JKRUNUUykgJChURVNUSEFSTkVTUykKKwkkKENYWCkgJChMREZMQUdTKSBkYi9s
b2dfdGVzdC5vICQoTElCT0JKRUNUUykgJChURVNUSEFSTkVTUykgLW8gJEAgJChMSUJTKQorCit0
YWJsZV90ZXN0OiB0YWJsZS90YWJsZV90ZXN0Lm8gJChMSUJPQkpFQ1RTKSAkKFRFU1RIQVJORVNT
KQorCSQoQ1hYKSAkKExERkxBR1MpIHRhYmxlL3RhYmxlX3Rlc3QubyAkKExJQk9CSkVDVFMpICQo
VEVTVEhBUk5FU1MpIC1vICRAICQoTElCUykKKworc2tpcGxpc3RfdGVzdDogZGIvc2tpcGxpc3Rf
dGVzdC5vICQoTElCT0JKRUNUUykgJChURVNUSEFSTkVTUykKKwkkKENYWCkgJChMREZMQUdTKSBk
Yi9za2lwbGlzdF90ZXN0Lm8gJChMSUJPQkpFQ1RTKSAkKFRFU1RIQVJORVNTKSAtbyAkQCAkKExJ
QlMpCisKK3ZlcnNpb25fZWRpdF90ZXN0OiBkYi92ZXJzaW9uX2VkaXRfdGVzdC5vICQoTElCT0JK
RUNUUykgJChURVNUSEFSTkVTUykKKwkkKENYWCkgJChMREZMQUdTKSBkYi92ZXJzaW9uX2VkaXRf
dGVzdC5vICQoTElCT0JKRUNUUykgJChURVNUSEFSTkVTUykgLW8gJEAgJChMSUJTKQorCit2ZXJz
aW9uX3NldF90ZXN0OiBkYi92ZXJzaW9uX3NldF90ZXN0Lm8gJChMSUJPQkpFQ1RTKSAkKFRFU1RI
QVJORVNTKQorCSQoQ1hYKSAkKExERkxBR1MpIGRiL3ZlcnNpb25fc2V0X3Rlc3QubyAkKExJQk9C
SkVDVFMpICQoVEVTVEhBUk5FU1MpIC1vICRAICQoTElCUykKKword3JpdGVfYmF0Y2hfdGVzdDog
ZGIvd3JpdGVfYmF0Y2hfdGVzdC5vICQoTElCT0JKRUNUUykgJChURVNUSEFSTkVTUykKKwkkKENY
WCkgJChMREZMQUdTKSBkYi93cml0ZV9iYXRjaF90ZXN0Lm8gJChMSUJPQkpFQ1RTKSAkKFRFU1RI
QVJORVNTKSAtbyAkQCAkKExJQlMpCisKKyQoTUVNRU5WTElCUkFSWSkgOiAkKE1FTUVOVk9CSkVD
VFMpCisJcm0gLWYgJEAKKwkkKEFSKSAtcnMgJEAgJChNRU1FTlZPQkpFQ1RTKQorCittZW1lbnZf
dGVzdCA6IGhlbHBlcnMvbWVtZW52L21lbWVudl90ZXN0Lm8gJChNRU1FTlZMSUJSQVJZKSAkKExJ
QlJBUlkpICQoVEVTVEhBUk5FU1MpCisJJChDWFgpICQoTERGTEFHUykgaGVscGVycy9tZW1lbnYv
bWVtZW52X3Rlc3QubyAkKE1FTUVOVkxJQlJBUlkpICQoTElCUkFSWSkgJChURVNUSEFSTkVTUykg
LW8gJEAgJChMSUJTKQorCitpZmVxICgkKFBMQVRGT1JNKSwgSU9TKQorIyBGb3IgaU9TLCBjcmVh
dGUgdW5pdmVyc2FsIG9iamVjdCBmaWxlcyB0byBiZSB1c2VkIG9uIGJvdGggdGhlIHNpbXVsYXRv
ciBhbmQKKyMgYSBkZXZpY2UuCitQTEFURk9STVNST09UPS9BcHBsaWNhdGlvbnMvWGNvZGUuYXBw
L0NvbnRlbnRzL0RldmVsb3Blci9QbGF0Zm9ybXMKK1NJTVVMQVRPUlJPT1Q9JChQTEFURk9STVNS
T09UKS9pUGhvbmVTaW11bGF0b3IucGxhdGZvcm0vRGV2ZWxvcGVyCitERVZJQ0VST09UPSQoUExB
VEZPUk1TUk9PVCkvaVBob25lT1MucGxhdGZvcm0vRGV2ZWxvcGVyCitJT1NWRVJTSU9OPSQoc2hl
bGwgZGVmYXVsdHMgcmVhZCAkKFBMQVRGT1JNU1JPT1QpL2lQaG9uZU9TLnBsYXRmb3JtL3ZlcnNp
b24gQ0ZCdW5kbGVTaG9ydFZlcnNpb25TdHJpbmcpCisKKy5jYy5vOgorCW1rZGlyIC1wIGlvcy14
ODYvJChkaXIgJEApCisJJChDWFgpICQoQ1hYRkxBR1MpIC1pc3lzcm9vdCAkKFNJTVVMQVRPUlJP
T1QpL1NES3MvaVBob25lU2ltdWxhdG9yJChJT1NWRVJTSU9OKS5zZGsgLWFyY2ggaTY4NiAtYyAk
PCAtbyBpb3MteDg2LyRACisJbWtkaXIgLXAgaW9zLWFybS8kKGRpciAkQCkKKwkkKERFVklDRVJP
T1QpL3Vzci9iaW4vJChDWFgpICQoQ1hYRkxBR1MpIC1pc3lzcm9vdCAkKERFVklDRVJPT1QpL1NE
S3MvaVBob25lT1MkKElPU1ZFUlNJT04pLnNkayAtYXJjaCBhcm12NiAtYXJjaCBhcm12NyAtYyAk
PCAtbyBpb3MtYXJtLyRACisJbGlwbyBpb3MteDg2LyRAIGlvcy1hcm0vJEAgLWNyZWF0ZSAtb3V0
cHV0ICRACisKKy5jLm86CisJbWtkaXIgLXAgaW9zLXg4Ni8kKGRpciAkQCkKKwkkKENDKSAkKENG
TEFHUykgLWlzeXNyb290ICQoU0lNVUxBVE9SUk9PVCkvU0RLcy9pUGhvbmVTaW11bGF0b3IkKElP
U1ZFUlNJT04pLnNkayAtYXJjaCBpNjg2IC1jICQ8IC1vIGlvcy14ODYvJEAKKwlta2RpciAtcCBp
b3MtYXJtLyQoZGlyICRAKQorCSQoREVWSUNFUk9PVCkvdXNyL2Jpbi8kKENDKSAkKENGTEFHUykg
LWlzeXNyb290ICQoREVWSUNFUk9PVCkvU0RLcy9pUGhvbmVPUyQoSU9TVkVSU0lPTikuc2RrIC1h
cmNoIGFybXY2IC1hcmNoIGFybXY3IC1jICQ8IC1vIGlvcy1hcm0vJEAKKwlsaXBvIGlvcy14ODYv
JEAgaW9zLWFybS8kQCAtY3JlYXRlIC1vdXRwdXQgJEAKKworZWxzZQorLmNjLm86CisJJChDWFgp
ICQoQ1hYRkxBR1MpIC1jICQ8IC1vICRACisKKy5jLm86CisJJChDQykgJChDRkxBR1MpIC1jICQ8
IC1vICRACitlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9ORVdT
IGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9ORVdTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNmZDk5MjQyZDdi
YmNmZWZmZWNmZDAxYzA4NzBmODkzODI3NjZiYWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9sZXZlbGRiL05FV1MKQEAgLTAsMCArMSwxNyBAQAorUmVsZWFzZSAxLjIgMjAx
MS0wNS0xNgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGaXhlcyBmb3IgbGFyZ2VyIGRhdGFi
YXNlcyAodGVzdGVkIHVwIHRvIG9uZSBiaWxsaW9uIDEwMC1ieXRlIGVudHJpZXMsCitpLmUuLCB+
MTAwR0IpLgorCisoMSkgUGxhY2UgaGFyZCBsaW1pdCBvbiBudW1iZXIgb2YgbGV2ZWwtMCBmaWxl
cy4gIFRoaXMgZml4ZXMgZXJyb3JzCitvZiB0aGUgZm9ybSAidG9vIG1hbnkgb3BlbiBmaWxlcyIu
CisKKygyKSBGaXhlZCBtZW10YWJsZSBtYW5hZ2VtZW50LiAgQmVmb3JlIHRoZSBmaXgsIGEgaGVh
dnkgd3JpdGUgYnVyc3QKK2NvdWxkIGNhdXNlIHVuYm91bmRlZCBtZW1vcnkgdXNhZ2UuCisKK0Eg
Zml4IGZvciBhIGxvZ2dpbmcgYnVnIHdoZXJlIHRoZSByZWFkZXIgd291bGQgaW5jb3JyZWN0bHkg
Y29tcGxhaW4KK2Fib3V0IGNvcnJ1cHRpb24uCisKK0FsbG93IHB1YmxpYyBhY2Nlc3MgdG8gV3Jp
dGVCYXRjaCBjb250ZW50cyBzbyB0aGF0IHVzZXJzIGNhbiBlYXNpbHkKK3dyYXAgYSBEQi4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvUkVBRE1FIGIvU291cmNlL1RoaXJk
UGFydHkvbGV2ZWxkYi9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzYxOGFkZWVlZGJlYTA0YTE0ZTAwZDVh
MWVmMzNkZDRmMGE3YmUwNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xl
dmVsZGIvUkVBRE1FCkBAIC0wLDAgKzEsNTEgQEAKK2xldmVsZGI6IEEga2V5LXZhbHVlIHN0b3Jl
CitBdXRob3JzOiBTYW5qYXkgR2hlbWF3YXQgKHNhbmpheUBnb29nbGUuY29tKSBhbmQgSmVmZiBE
ZWFuIChqZWZmQGdvb2dsZS5jb20pCisKK1RoZSBjb2RlIHVuZGVyIHRoaXMgZGlyZWN0b3J5IGlt
cGxlbWVudHMgYSBzeXN0ZW0gZm9yIG1haW50YWluaW5nIGEKK3BlcnNpc3RlbnQga2V5L3ZhbHVl
IHN0b3JlLgorCitTZWUgZG9jL2luZGV4Lmh0bWwgZm9yIG1vcmUgZXhwbGFuYXRpb24uCitTZWUg
ZG9jL2ltcGwuaHRtbCBmb3IgYSBicmllZiBvdmVydmlldyBvZiB0aGUgaW1wbGVtZW50YXRpb24u
CisKK1RoZSBwdWJsaWMgaW50ZXJmYWNlIGlzIGluIGluY2x1ZGUvKi5oLiAgQ2FsbGVycyBzaG91
bGQgbm90IGluY2x1ZGUgb3IKK3JlbHkgb24gdGhlIGRldGFpbHMgb2YgYW55IG90aGVyIGhlYWRl
ciBmaWxlcyBpbiB0aGlzIHBhY2thZ2UuICBUaG9zZQoraW50ZXJuYWwgQVBJcyBtYXkgYmUgY2hh
bmdlZCB3aXRob3V0IHdhcm5pbmcuCisKK0d1aWRlIHRvIGhlYWRlciBmaWxlczoKKworaW5jbHVk
ZS9kYi5oCisgICAgTWFpbiBpbnRlcmZhY2UgdG8gdGhlIERCOiBTdGFydCBoZXJlCisKK2luY2x1
ZGUvb3B0aW9ucy5oCisgICAgQ29udHJvbCBvdmVyIHRoZSBiZWhhdmlvciBvZiBhbiBlbnRpcmUg
ZGF0YWJhc2UsIGFuZCBhbHNvCisgICAgY29udHJvbCBvdmVyIHRoZSBiZWhhdmlvciBvZiBpbmRp
dmlkdWFsIHJlYWRzIGFuZCB3cml0ZXMuCisKK2luY2x1ZGUvY29tcGFyYXRvci5oCisgICAgQWJz
dHJhY3Rpb24gZm9yIHVzZXItc3BlY2lmaWVkIGNvbXBhcmlzb24gZnVuY3Rpb24uICBJZiB5b3Ug
d2FudAorICAgIGp1c3QgYnl0ZXdpc2UgY29tcGFyaXNvbiBvZiBrZXlzLCB5b3UgY2FuIHVzZSB0
aGUgZGVmYXVsdCBjb21wYXJhdG9yLAorICAgIGJ1dCBjbGllbnRzIGNhbiB3cml0ZSB0aGVpciBv
d24gY29tcGFyYXRvciBpbXBsZW1lbnRhdGlvbnMgaWYgdGhleQorICAgIHdhbnQgY3VzdG9tIG9y
ZGVyaW5nIChlLmcuIHRvIGhhbmRsZSBkaWZmZXJlbnQgY2hhcmFjdGVyCisgICAgZW5jb2Rpbmdz
LCBldGMuKQorCitpbmNsdWRlL2l0ZXJhdG9yLmgKKyAgICBJbnRlcmZhY2UgZm9yIGl0ZXJhdGlu
ZyBvdmVyIGRhdGEuIFlvdSBjYW4gZ2V0IGFuIGl0ZXJhdG9yCisgICAgZnJvbSBhIERCIG9iamVj
dC4KKworaW5jbHVkZS93cml0ZV9iYXRjaC5oCisgICAgSW50ZXJmYWNlIGZvciBhdG9taWNhbGx5
IGFwcGx5aW5nIG11bHRpcGxlIHVwZGF0ZXMgdG8gYSBkYXRhYmFzZS4KKworaW5jbHVkZS9zbGlj
ZS5oCisgICAgQSBzaW1wbGUgbW9kdWxlIGZvciBtYWludGFpbmluZyBhIHBvaW50ZXIgYW5kIGEg
bGVuZ3RoIGludG8gc29tZQorICAgIG90aGVyIGJ5dGUgYXJyYXkuCisKK2luY2x1ZGUvc3RhdHVz
LmgKKyAgICBTdGF0dXMgaXMgcmV0dXJuZWQgZnJvbSBtYW55IG9mIHRoZSBwdWJsaWMgaW50ZXJm
YWNlcyBhbmQgaXMgdXNlZAorICAgIHRvIHJlcG9ydCBzdWNjZXNzIGFuZCB2YXJpb3VzIGtpbmRz
IG9mIGVycm9ycy4KKworaW5jbHVkZS9lbnYuaAorICAgIEFic3RyYWN0aW9uIG9mIHRoZSBPUyBl
bnZpcm9ubWVudC4gIEEgcG9zaXggaW1wbGVtZW50YXRpb24gb2YKKyAgICB0aGlzIGludGVyZmFj
ZSBpcyBpbiB1dGlsL2Vudl9wb3NpeC5jYworCitpbmNsdWRlL3RhYmxlLmgKK2luY2x1ZGUvdGFi
bGVfYnVpbGRlci5oCisgICAgTG93ZXItbGV2ZWwgbW9kdWxlcyB0aGF0IG1vc3QgY2xpZW50cyBw
cm9iYWJseSB3b24ndCB1c2UgZGlyZWN0bHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xldmVsZGIvVE9ETyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvVE9ETwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5lNjAzYzA3MTM3ZjFlYTE5OGEzZGU5Y2EzYmJiMzY5ZTFjMDY5ZjYxCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9UT0RPCkBAIC0wLDAgKzEsMTQgQEAKK3Nz
CistIFN0YXRzCisKK2RiCistIE1heWJlIGltcGxlbWVudCBEQjo6QnVsa0RlbGV0ZUZvclJhbmdl
KHN0YXJ0X2tleSwgZW5kX2tleSkKKyAgdGhhdCB3b3VsZCBibG93IGF3YXkgZmlsZXMgd2hvc2Ug
cmFuZ2VzIGFyZSBlbnRpcmVseSBjb250YWluZWQKKyAgd2l0aGluIFtzdGFydF9rZXkuLmVuZF9r
ZXldPyAgRm9yIENocm9tZSwgZGVsZXRpb24gb2Ygb2Jzb2xldGUKKyAgb2JqZWN0IHN0b3Jlcywg
ZXRjLiBjYW4gYmUgZG9uZSBpbiB0aGUgYmFja2dyb3VuZCBhbnl3YXksIHNvCisgIHByb2JhYmx5
IG5vdCB0aGF0IGltcG9ydGFudC4KKy0gVGhlcmUgaGF2ZSBiZWVuIHJlcXVlc3RzIGZvciBNdWx0
aUdldC4KKworQWZ0ZXIgYSByYW5nZSBpcyBjb21wbGV0ZWx5IGRlbGV0ZWQsIHdoYXQgZ2V0cyBy
aWQgb2YgdGhlCitjb3JyZXNwb25kaW5nIGZpbGVzIGlmIHdlIGRvIG5vIGZ1dHVyZSBjaGFuZ2Vz
IHRvIHRoYXQgcmFuZ2UuICBNYWtlCit0aGUgY29uZGl0aW9ucyBmb3IgdHJpZ2dlcmluZyBjb21w
YWN0aW9ucyBmaXJlIGluIG1vcmUgc2l0dWF0aW9ucz8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xldmVsZGIvYnVpbGRfZGV0ZWN0X3BsYXRmb3JtIGIvU291cmNlL1RoaXJkUGFydHkv
bGV2ZWxkYi9idWlsZF9kZXRlY3RfcGxhdGZvcm0KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTgwMWQyMDc5NWY4MzA4
ZDNhYjczZjIyYWYzNjkzZmQ3MTAxZWVkOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xldmVsZGIvYnVpbGRfZGV0ZWN0X3BsYXRmb3JtCkBAIC0wLDAgKzEsMjAzIEBACisj
IS9iaW4vc2gKKyMKKyMgRGV0ZWN0cyBPUyB3ZSdyZSBjb21waWxpbmcgb24gYW5kIG91dHB1dHMg
YSBmaWxlIHNwZWNpZmllZCBieSB0aGUgZmlyc3QKKyMgYXJndW1lbnQsIHdoaWNoIGluIHR1cm4g
Z2V0cyByZWFkIHdoaWxlIHByb2Nlc3NpbmcgTWFrZWZpbGUuCisjCisjIFRoZSBvdXRwdXQgd2ls
bCBzZXQgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXM6CisjICAgQ0MgICAgICAgICAgICAgICAgICAg
ICAgICAgIEMgQ29tcGlsZXIgcGF0aAorIyAgIENYWCAgICAgICAgICAgICAgICAgICAgICAgICBD
KysgQ29tcGlsZXIgcGF0aAorIyAgIFBMQVRGT1JNX0xERkxBR1MgICAgICAgICAgICBMaW5rZXIg
ZmxhZ3MKKyMgICBQTEFURk9STV9MSUJTICAgICAgICAgICAgICAgTGlicmFyaWVzIGZsYWdzCisj
ICAgUExBVEZPUk1fU0hBUkVEX0VYVCAgICAgICAgIEV4dGVuc2lvbiBmb3Igc2hhcmVkIGxpYnJh
cmllcworIyAgIFBMQVRGT1JNX1NIQVJFRF9MREZMQUdTICAgICBGbGFncyBmb3IgYnVpbGRpbmcg
c2hhcmVkIGxpYnJhcnkKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBmbGFn
IGlzIGVtYmVkZGVkIGp1c3QgYmVmb3JlIHRoZSBuYW1lCisjICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9mIHRoZSBzaGFyZWQgbGlicmFyeSB3aXRob3V0IGludGVydmVuaW5nIHNwYWNl
cworIyAgIFBMQVRGT1JNX1NIQVJFRF9DRkxBR1MgICAgICBGbGFncyBmb3IgY29tcGlsaW5nIG9i
amVjdHMgZm9yIHNoYXJlZCBsaWJyYXJ5CisjICAgUExBVEZPUk1fQ0NGTEFHUyAgICAgICAgICAg
IEMgY29tcGlsZXIgZmxhZ3MKKyMgICBQTEFURk9STV9DWFhGTEFHUyAgICAgICAgICAgQysrIGNv
bXBpbGVyIGZsYWdzLiAgV2lsbCBjb250YWluOgorIyAgIFBMQVRGT1JNX1NIQVJFRF9WRVJTSU9O
RUQgICBTZXQgdG8gJ3RydWUnIGlmIHBsYXRmb3JtIHN1cHBvcnRzIHZlcnNpb25lZAorIyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWQgbGlicmFyaWVzLCBlbXB0eSBvdGhlcndp
c2UuCisjCisjIFRoZSBQTEFURk9STV9DQ0ZMQUdTIGFuZCBQTEFURk9STV9DWFhGTEFHUyBtaWdo
dCBpbmNsdWRlIHRoZSBmb2xsb3dpbmc6CisjCisjICAgICAgIC1ETEVWRUxEQl9DU1REQVRPTUlD
X1BSRVNFTlQgaWYgPGNzdGRhdG9taWM+IGlzIHByZXNlbnQKKyMgICAgICAgLURMRVZFTERCX1BM
QVRGT1JNX1BPU0lYICAgICBmb3IgUG9zaXgtYmFzZWQgcGxhdGZvcm1zCisjICAgICAgIC1EU05B
UFBZICAgICAgICAgICAgICAgICAgICAgaWYgdGhlIFNuYXBweSBsaWJyYXJ5IGlzIHByZXNlbnQK
KyMKKworT1VUUFVUPSQxCitQUkVGSVg9JDIKK2lmIHRlc3QgLXogIiRPVVRQVVQiIHx8IHRlc3Qg
LXogIiRQUkVGSVgiOyB0aGVuCisgIGVjaG8gInVzYWdlOiAkMCA8b3V0cHV0LWZpbGVuYW1lPiA8
ZGlyZWN0b3J5X3ByZWZpeD4iID4mMgorICBleGl0IDEKK2ZpCisKKyMgRGVsZXRlIGV4aXN0aW5n
IG91dHB1dCwgaWYgaXQgZXhpc3RzCitybSAtZiAkT1VUUFVUCit0b3VjaCAkT1VUUFVUCisKK2lm
IHRlc3QgLXogIiRDQyI7IHRoZW4KKyAgICBDQz1jYworZmkKKworaWYgdGVzdCAteiAiJENYWCI7
IHRoZW4KKyAgICBDWFg9ZysrCitmaQorCisjIERldGVjdCBPUworaWYgdGVzdCAteiAiJFRBUkdF
VF9PUyI7IHRoZW4KKyAgICBUQVJHRVRfT1M9YHVuYW1lIC1zYAorZmkKKworQ09NTU9OX0ZMQUdT
PQorQ1JPU1NfQ09NUElMRT0KK1BMQVRGT1JNX0NDRkxBR1M9CitQTEFURk9STV9DWFhGTEFHUz0K
K1BMQVRGT1JNX0xERkxBR1M9CitQTEFURk9STV9MSUJTPQorUExBVEZPUk1fU0hBUkVEX0VYVD0i
c28iCitQTEFURk9STV9TSEFSRURfTERGTEFHUz0iLXNoYXJlZCAtV2wsLXNvbmFtZSAtV2wsIgor
UExBVEZPUk1fU0hBUkVEX0NGTEFHUz0iLWZQSUMiCitQTEFURk9STV9TSEFSRURfVkVSU0lPTkVE
PXRydWUKKworTUVNQ01QX0ZMQUc9CitpZiBbICIkQ1hYIiA9ICJnKysiIF07IHRoZW4KKyAgICAj
IFVzZSBsaWJjJ3MgbWVtY21wIGluc3RlYWQgb2YgR0NDJ3MgbWVtY21wLiAgVGhpcyByZXN1bHRz
IGluIH40MCUKKyAgICAjIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50IG9uIHJlYWRyYW5kb20gdW5k
ZXIgZ2NjIDQuNC4zIG9uIExpbnV4L3g4Ni4KKyAgICBNRU1DTVBfRkxBRz0iLWZuby1idWlsdGlu
LW1lbWNtcCIKK2ZpCisKK2Nhc2UgIiRUQVJHRVRfT1MiIGluCisgICAgRGFyd2luKQorICAgICAg
ICBQTEFURk9STT1PU19NQUNPU1gKKyAgICAgICAgQ09NTU9OX0ZMQUdTPSIkTUVNQ01QX0ZMQUcg
LURPU19NQUNPU1giCisgICAgICAgIFBMQVRGT1JNX1NIQVJFRF9FWFQ9ZHlsaWIKKyAgICAgICAg
WyAteiAiJElOU1RBTExfUEFUSCIgXSAmJiBJTlNUQUxMX1BBVEg9YHB3ZGAKKyAgICAgICAgUExB
VEZPUk1fU0hBUkVEX0xERkxBR1M9Ii1keW5hbWljbGliIC1pbnN0YWxsX25hbWUgJElOU1RBTExf
UEFUSC8iCisgICAgICAgIFBPUlRfRklMRT1wb3J0L3BvcnRfcG9zaXguY2MKKyAgICAgICAgOzsK
KyAgICBMaW51eCkKKyAgICAgICAgUExBVEZPUk09T1NfTElOVVgKKyAgICAgICAgQ09NTU9OX0ZM
QUdTPSIkTUVNQ01QX0ZMQUcgLXB0aHJlYWQgLURPU19MSU5VWCIKKyAgICAgICAgUExBVEZPUk1f
TERGTEFHUz0iLXB0aHJlYWQiCisgICAgICAgIFBPUlRfRklMRT1wb3J0L3BvcnRfcG9zaXguY2MK
KyAgICAgICAgOzsKKyAgICBTdW5PUykKKyAgICAgICAgUExBVEZPUk09T1NfU09MQVJJUworICAg
ICAgICBDT01NT05fRkxBR1M9IiRNRU1DTVBfRkxBRyAtRF9SRUVOVFJBTlQgLURPU19TT0xBUklT
IgorICAgICAgICBQTEFURk9STV9MSUJTPSItbHB0aHJlYWQgLWxydCIKKyAgICAgICAgUE9SVF9G
SUxFPXBvcnQvcG9ydF9wb3NpeC5jYworICAgICAgICA7OworICAgIEZyZWVCU0QpCisgICAgICAg
IFBMQVRGT1JNPU9TX0ZSRUVCU0QKKyAgICAgICAgQ09NTU9OX0ZMQUdTPSIkTUVNQ01QX0ZMQUcg
LURfUkVFTlRSQU5UIC1ET1NfRlJFRUJTRCIKKyAgICAgICAgUExBVEZPUk1fTElCUz0iLWxwdGhy
ZWFkIgorICAgICAgICBQT1JUX0ZJTEU9cG9ydC9wb3J0X3Bvc2l4LmNjCisgICAgICAgIDs7Cisg
ICAgTmV0QlNEKQorICAgICAgICBQTEFURk9STT1PU19ORVRCU0QKKyAgICAgICAgQ09NTU9OX0ZM
QUdTPSIkTUVNQ01QX0ZMQUcgLURfUkVFTlRSQU5UIC1ET1NfTkVUQlNEIgorICAgICAgICBQTEFU
Rk9STV9MSUJTPSItbHB0aHJlYWQgLWxnY2NfcyIKKyAgICAgICAgUE9SVF9GSUxFPXBvcnQvcG9y
dF9wb3NpeC5jYworICAgICAgICA7OworICAgIE9wZW5CU0QpCisgICAgICAgIFBMQVRGT1JNPU9T
X09QRU5CU0QKKyAgICAgICAgQ09NTU9OX0ZMQUdTPSIkTUVNQ01QX0ZMQUcgLURfUkVFTlRSQU5U
IC1ET1NfT1BFTkJTRCIKKyAgICAgICAgUExBVEZPUk1fTERGTEFHUz0iLXB0aHJlYWQiCisgICAg
ICAgIFBPUlRfRklMRT1wb3J0L3BvcnRfcG9zaXguY2MKKyAgICAgICAgOzsKKyAgICBEcmFnb25G
bHkpCisgICAgICAgIFBMQVRGT1JNPU9TX0RSQUdPTkZMWUJTRAorICAgICAgICBDT01NT05fRkxB
R1M9IiRNRU1DTVBfRkxBRyAtRF9SRUVOVFJBTlQgLURPU19EUkFHT05GTFlCU0QiCisgICAgICAg
IFBMQVRGT1JNX0xJQlM9Ii1scHRocmVhZCIKKyAgICAgICAgUE9SVF9GSUxFPXBvcnQvcG9ydF9w
b3NpeC5jYworICAgICAgICA7OworICAgIE9TX0FORFJPSURfQ1JPU1NDT01QSUxFKQorICAgICAg
ICBQTEFURk9STT1PU19BTkRST0lECisgICAgICAgIENPTU1PTl9GTEFHUz0iJE1FTUNNUF9GTEFH
IC1EX1JFRU5UUkFOVCAtRE9TX0FORFJPSUQgLURMRVZFTERCX1BMQVRGT1JNX1BPU0lYIgorICAg
ICAgICBQTEFURk9STV9MREZMQUdTPSIiICAjIEFsbCBwdGhyZWFkIGZlYXR1cmVzIGFyZSBpbiB0
aGUgQW5kcm9pZCBDIGxpYnJhcnkKKyAgICAgICAgUE9SVF9GSUxFPXBvcnQvcG9ydF9wb3NpeC5j
YworICAgICAgICBDUk9TU19DT01QSUxFPXRydWUKKyAgICAgICAgOzsKKyAgICBIUC1VWCkKKyAg
ICAgICAgUExBVEZPUk09T1NfSFBVWAorICAgICAgICBDT01NT05fRkxBR1M9IiRNRU1DTVBfRkxB
RyAtRF9SRUVOVFJBTlQgLURPU19IUFVYIgorICAgICAgICBQTEFURk9STV9MREZMQUdTPSItcHRo
cmVhZCIKKyAgICAgICAgUE9SVF9GSUxFPXBvcnQvcG9ydF9wb3NpeC5jYworICAgICAgICAjIG1h
biBsZDogK2ggaW50ZXJuYWxfbmFtZQorICAgICAgICBQTEFURk9STV9TSEFSRURfTERGTEFHUz0i
LXNoYXJlZCAtV2wsK2ggLVdsLCIKKyAgICAgICAgOzsKKyAgICAqKQorICAgICAgICBlY2hvICJV
bmtub3duIHBsYXRmb3JtISIgPiYyCisgICAgICAgIGV4aXQgMQorZXNhYworCisjIFdlIHdhbnQg
dG8gbWFrZSBhIGxpc3Qgb2YgYWxsIGNjIGZpbGVzIHdpdGhpbiB1dGlsLCBkYiwgdGFibGUsIGFu
ZCBoZWxwZXJzCisjIGV4Y2VwdCBmb3IgdGhlIHRlc3QgYW5kIGJlbmNobWFyayBmaWxlcy4gQnkg
ZGVmYXVsdCwgZmluZCB3aWxsIG91dHB1dCBhIGxpc3QKKyMgb2YgYWxsIGZpbGVzIG1hdGNoaW5n
IGVpdGhlciBydWxlLCBzbyB3ZSBuZWVkIHRvIGFwcGVuZCAtcHJpbnQgdG8gbWFrZSB0aGUKKyMg
cHJ1bmUgdGFrZSBlZmZlY3QuCitESVJTPSIkUFJFRklYL2RiICRQUkVGSVgvdXRpbCAkUFJFRklY
L3RhYmxlIgorCitzZXQgLWYgIyB0ZW1wb3JhcmlseSBkaXNhYmxlIGdsb2JiaW5nIHNvIHRoYXQg
b3VyIHBhdHRlcm5zIGFyZW4ndCBleHBhbmRlZAorUFJVTkVfVEVTVD0iLW5hbWUgKnRlc3QqLmNj
IC1wcnVuZSIKK1BSVU5FX0JFTkNIPSItbmFtZSAqX2JlbmNoLmNjIC1wcnVuZSIKK1BSVU5FX1RP
T0w9Ii1uYW1lIGxldmVsZGJfbWFpbi5jYyAtcHJ1bmUiCitQT1JUQUJMRV9GSUxFUz1gZmluZCAk
RElSUyAkUFJVTkVfVEVTVCAtbyAkUFJVTkVfQkVOQ0ggLW8gJFBSVU5FX1RPT0wgLW8gLW5hbWUg
JyouY2MnIC1wcmludCB8IHNvcnQgfCBzZWQgInMsXiRQUkVGSVgvLCwiIHwgdHIgIlxuIiAiICJg
CisKK3NldCArZiAjIHJlLWVuYWJsZSBnbG9iYmluZworCisjIFRoZSBzb3VyY2VzIGNvbnNpc3Qg
b2YgdGhlIHBvcnRhYmxlIGZpbGVzLCBwbHVzIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBwb3J0Cisj
IGZpbGUuCitlY2hvICJTT1VSQ0VTPSRQT1JUQUJMRV9GSUxFUyAkUE9SVF9GSUxFIiA+PiAkT1VU
UFVUCitlY2hvICJNRU1FTlZfU09VUkNFUz1oZWxwZXJzL21lbWVudi9tZW1lbnYuY2MiID4+ICRP
VVRQVVQKKworaWYgWyAiJENST1NTX0NPTVBJTEUiID0gInRydWUiIF07IHRoZW4KKyAgICAjIENy
b3NzLWNvbXBpbGluZzsgZG8gbm90IHRyeSBhbnkgY29tcGlsYXRpb24gdGVzdHMuCisgICAgdHJ1
ZQorZWxzZQorICAgICMgSWYgLXN0ZD1jKysweCB3b3JrcywgdXNlIDxjc3RkYXRvbWljPi4gIE90
aGVyd2lzZSB1c2UgcG9ydF9wb3NpeC5oLgorICAgICRDWFggJENYWEZMQUdTIC1zdGQ9YysrMHgg
LXggYysrIC0gLW8gL2Rldi9udWxsIDI+L2Rldi9udWxsICA8PEVPRgorICAgICAgI2luY2x1ZGUg
PGNzdGRhdG9taWM+CisgICAgICBpbnQgbWFpbigpIHt9CitFT0YKKyAgICBpZiBbICIkPyIgPSAw
IF07IHRoZW4KKyAgICAgICAgQ09NTU9OX0ZMQUdTPSIkQ09NTU9OX0ZMQUdTIC1ETEVWRUxEQl9Q
TEFURk9STV9QT1NJWCAtRExFVkVMREJfQ1NUREFUT01JQ19QUkVTRU5UIgorICAgICAgICBQTEFU
Rk9STV9DWFhGTEFHUz0iLXN0ZD1jKysweCIKKyAgICBlbHNlCisgICAgICAgIENPTU1PTl9GTEFH
Uz0iJENPTU1PTl9GTEFHUyAtRExFVkVMREJfUExBVEZPUk1fUE9TSVgiCisgICAgZmkKKworICAg
ICMgVGVzdCB3aGV0aGVyIFNuYXBweSBsaWJyYXJ5IGlzIGluc3RhbGxlZAorICAgICMgaHR0cDov
L2NvZGUuZ29vZ2xlLmNvbS9wL3NuYXBweS8KKyAgICAkQ1hYICRDWFhGTEFHUyAteCBjKysgLSAt
byAvZGV2L251bGwgMj4vZGV2L251bGwgIDw8RU9GCisgICAgICAjaW5jbHVkZSA8c25hcHB5Lmg+
CisgICAgICBpbnQgbWFpbigpIHt9CitFT0YKKyAgICBpZiBbICIkPyIgPSAwIF07IHRoZW4KKyAg
ICAgICAgQ09NTU9OX0ZMQUdTPSIkQ09NTU9OX0ZMQUdTIC1EU05BUFBZIgorICAgICAgICBQTEFU
Rk9STV9MSUJTPSIkUExBVEZPUk1fTElCUyAtbHNuYXBweSIKKyAgICBmaQorCisgICAgIyBUZXN0
IHdoZXRoZXIgdGNtYWxsb2MgaXMgYXZhaWxhYmxlCisgICAgJENYWCAkQ1hYRkxBR1MgLXggYysr
IC0gLW8gL2Rldi9udWxsIC1sdGNtYWxsb2MgMj4vZGV2L251bGwgIDw8RU9GCisgICAgICBpbnQg
bWFpbigpIHt9CitFT0YKKyAgICBpZiBbICIkPyIgPSAwIF07IHRoZW4KKyAgICAgICAgUExBVEZP
Uk1fTElCUz0iJFBMQVRGT1JNX0xJQlMgLWx0Y21hbGxvYyIKKyAgICBmaQorZmkKKworUExBVEZP
Uk1fQ0NGTEFHUz0iJFBMQVRGT1JNX0NDRkxBR1MgJENPTU1PTl9GTEFHUyIKK1BMQVRGT1JNX0NY
WEZMQUdTPSIkUExBVEZPUk1fQ1hYRkxBR1MgJENPTU1PTl9GTEFHUyIKKworZWNobyAiQ0M9JEND
IiA+PiAkT1VUUFVUCitlY2hvICJDWFg9JENYWCIgPj4gJE9VVFBVVAorZWNobyAiUExBVEZPUk09
JFBMQVRGT1JNIiA+PiAkT1VUUFVUCitlY2hvICJQTEFURk9STV9MREZMQUdTPSRQTEFURk9STV9M
REZMQUdTIiA+PiAkT1VUUFVUCitlY2hvICJQTEFURk9STV9MSUJTPSRQTEFURk9STV9MSUJTIiA+
PiAkT1VUUFVUCitlY2hvICJQTEFURk9STV9DQ0ZMQUdTPSRQTEFURk9STV9DQ0ZMQUdTIiA+PiAk
T1VUUFVUCitlY2hvICJQTEFURk9STV9DWFhGTEFHUz0kUExBVEZPUk1fQ1hYRkxBR1MiID4+ICRP
VVRQVVQKK2VjaG8gIlBMQVRGT1JNX1NIQVJFRF9DRkxBR1M9JFBMQVRGT1JNX1NIQVJFRF9DRkxB
R1MiID4+ICRPVVRQVVQKK2VjaG8gIlBMQVRGT1JNX1NIQVJFRF9FWFQ9JFBMQVRGT1JNX1NIQVJF
RF9FWFQiID4+ICRPVVRQVVQKK2VjaG8gIlBMQVRGT1JNX1NIQVJFRF9MREZMQUdTPSRQTEFURk9S
TV9TSEFSRURfTERGTEFHUyIgPj4gJE9VVFBVVAorZWNobyAiUExBVEZPUk1fU0hBUkVEX1ZFUlNJ
T05FRD0kUExBVEZPUk1fU0hBUkVEX1ZFUlNJT05FRCIgPj4gJE9VVFBVVApkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9idWlsZGVyLmNjIGIvU291cmNlL1RoaXJkUGFy
dHkvbGV2ZWxkYi9kYi9idWlsZGVyLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY0MTk4ODIxOTczYzk0ZjJlMjgx
NDhmNzlhMTBjYTJjNDhkOGQxZTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9sZXZlbGRiL2RiL2J1aWxkZXIuY2MKQEAgLTAsMCArMSw4OCBAQAorLy8gQ29weXJpZ2h0IChj
KSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMg
ZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgorCisjaW5jbHVkZSAiZGIvYnVpbGRlci5o
IgorCisjaW5jbHVkZSAiZGIvZmlsZW5hbWUuaCIKKyNpbmNsdWRlICJkYi9kYmZvcm1hdC5oIgor
I2luY2x1ZGUgImRiL3RhYmxlX2NhY2hlLmgiCisjaW5jbHVkZSAiZGIvdmVyc2lvbl9lZGl0Lmgi
CisjaW5jbHVkZSAibGV2ZWxkYi9kYi5oIgorI2luY2x1ZGUgImxldmVsZGIvZW52LmgiCisjaW5j
bHVkZSAibGV2ZWxkYi9pdGVyYXRvci5oIgorCituYW1lc3BhY2UgbGV2ZWxkYiB7CisKK1N0YXR1
cyBCdWlsZFRhYmxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBkYm5hbWUsCisgICAgICAgICAgICAgICAg
ICBFbnYqIGVudiwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMsCisg
ICAgICAgICAgICAgICAgICBUYWJsZUNhY2hlKiB0YWJsZV9jYWNoZSwKKyAgICAgICAgICAgICAg
ICAgIEl0ZXJhdG9yKiBpdGVyLAorICAgICAgICAgICAgICAgICAgRmlsZU1ldGFEYXRhKiBtZXRh
KSB7CisgIFN0YXR1cyBzOworICBtZXRhLT5maWxlX3NpemUgPSAwOworICBpdGVyLT5TZWVrVG9G
aXJzdCgpOworCisgIHN0ZDo6c3RyaW5nIGZuYW1lID0gVGFibGVGaWxlTmFtZShkYm5hbWUsIG1l
dGEtPm51bWJlcik7CisgIGlmIChpdGVyLT5WYWxpZCgpKSB7CisgICAgV3JpdGFibGVGaWxlKiBm
aWxlOworICAgIHMgPSBlbnYtPk5ld1dyaXRhYmxlRmlsZShmbmFtZSwgJmZpbGUpOworICAgIGlm
ICghcy5vaygpKSB7CisgICAgICByZXR1cm4gczsKKyAgICB9CisKKyAgICBUYWJsZUJ1aWxkZXIq
IGJ1aWxkZXIgPSBuZXcgVGFibGVCdWlsZGVyKG9wdGlvbnMsIGZpbGUpOworICAgIG1ldGEtPnNt
YWxsZXN0LkRlY29kZUZyb20oaXRlci0+a2V5KCkpOworICAgIGZvciAoOyBpdGVyLT5WYWxpZCgp
OyBpdGVyLT5OZXh0KCkpIHsKKyAgICAgIFNsaWNlIGtleSA9IGl0ZXItPmtleSgpOworICAgICAg
bWV0YS0+bGFyZ2VzdC5EZWNvZGVGcm9tKGtleSk7CisgICAgICBidWlsZGVyLT5BZGQoa2V5LCBp
dGVyLT52YWx1ZSgpKTsKKyAgICB9CisKKyAgICAvLyBGaW5pc2ggYW5kIGNoZWNrIGZvciBidWls
ZGVyIGVycm9ycworICAgIGlmIChzLm9rKCkpIHsKKyAgICAgIHMgPSBidWlsZGVyLT5GaW5pc2go
KTsKKyAgICAgIGlmIChzLm9rKCkpIHsKKyAgICAgICAgbWV0YS0+ZmlsZV9zaXplID0gYnVpbGRl
ci0+RmlsZVNpemUoKTsKKyAgICAgICAgYXNzZXJ0KG1ldGEtPmZpbGVfc2l6ZSA+IDApOworICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICBidWlsZGVyLT5BYmFuZG9uKCk7CisgICAgfQorICAg
IGRlbGV0ZSBidWlsZGVyOworCisgICAgLy8gRmluaXNoIGFuZCBjaGVjayBmb3IgZmlsZSBlcnJv
cnMKKyAgICBpZiAocy5vaygpKSB7CisgICAgICBzID0gZmlsZS0+U3luYygpOworICAgIH0KKyAg
ICBpZiAocy5vaygpKSB7CisgICAgICBzID0gZmlsZS0+Q2xvc2UoKTsKKyAgICB9CisgICAgZGVs
ZXRlIGZpbGU7CisgICAgZmlsZSA9IE5VTEw7CisKKyAgICBpZiAocy5vaygpKSB7CisgICAgICAv
LyBWZXJpZnkgdGhhdCB0aGUgdGFibGUgaXMgdXNhYmxlCisgICAgICBJdGVyYXRvciogaXQgPSB0
YWJsZV9jYWNoZS0+TmV3SXRlcmF0b3IoUmVhZE9wdGlvbnMoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhLT5udW1iZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YS0+ZmlsZV9zaXplKTsKKyAgICAg
IHMgPSBpdC0+c3RhdHVzKCk7CisgICAgICBkZWxldGUgaXQ7CisgICAgfQorICB9CisKKyAgLy8g
Q2hlY2sgZm9yIGlucHV0IGl0ZXJhdG9yIGVycm9ycworICBpZiAoIWl0ZXItPnN0YXR1cygpLm9r
KCkpIHsKKyAgICBzID0gaXRlci0+c3RhdHVzKCk7CisgIH0KKworICBpZiAocy5vaygpICYmIG1l
dGEtPmZpbGVfc2l6ZSA+IDApIHsKKyAgICAvLyBLZWVwIGl0CisgIH0gZWxzZSB7CisgICAgZW52
LT5EZWxldGVGaWxlKGZuYW1lKTsKKyAgfQorICByZXR1cm4gczsKK30KKworfSAgLy8gbmFtZXNw
YWNlIGxldmVsZGIKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvYnVp
bGRlci5oIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9idWlsZGVyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNjI0MzFmY2Y0NGY0NTQ1NDkwMjkxZDhlYzFhYjA5OGMyZmMyYmE4OAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvYnVpbGRlci5oCkBAIC0wLDAgKzEs
MzQgQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKwor
I2lmbmRlZiBTVE9SQUdFX0xFVkVMREJfREJfQlVJTERFUl9IXworI2RlZmluZSBTVE9SQUdFX0xF
VkVMREJfREJfQlVJTERFUl9IXworCisjaW5jbHVkZSAibGV2ZWxkYi9zdGF0dXMuaCIKKworbmFt
ZXNwYWNlIGxldmVsZGIgeworCitzdHJ1Y3QgT3B0aW9uczsKK3N0cnVjdCBGaWxlTWV0YURhdGE7
CisKK2NsYXNzIEVudjsKK2NsYXNzIEl0ZXJhdG9yOworY2xhc3MgVGFibGVDYWNoZTsKK2NsYXNz
IFZlcnNpb25FZGl0OworCisvLyBCdWlsZCBhIFRhYmxlIGZpbGUgZnJvbSB0aGUgY29udGVudHMg
b2YgKml0ZXIuICBUaGUgZ2VuZXJhdGVkIGZpbGUKKy8vIHdpbGwgYmUgbmFtZWQgYWNjb3JkaW5n
IHRvIG1ldGEtPm51bWJlci4gIE9uIHN1Y2Nlc3MsIHRoZSByZXN0IG9mCisvLyAqbWV0YSB3aWxs
IGJlIGZpbGxlZCB3aXRoIG1ldGFkYXRhIGFib3V0IHRoZSBnZW5lcmF0ZWQgdGFibGUuCisvLyBJ
ZiBubyBkYXRhIGlzIHByZXNlbnQgaW4gKml0ZXIsIG1ldGEtPmZpbGVfc2l6ZSB3aWxsIGJlIHNl
dCB0bworLy8gemVybywgYW5kIG5vIFRhYmxlIGZpbGUgd2lsbCBiZSBwcm9kdWNlZC4KK2V4dGVy
biBTdGF0dXMgQnVpbGRUYWJsZShjb25zdCBzdGQ6OnN0cmluZyYgZGJuYW1lLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIEVudiogZW52LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IE9wdGlvbnMmIG9wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgVGFibGVDYWNoZSog
dGFibGVfY2FjaGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgSXRlcmF0b3IqIGl0ZXIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgRmlsZU1ldGFEYXRhKiBtZXRhKTsKKworfSAgLy8gbmFt
ZXNwYWNlIGxldmVsZGIKKworI2VuZGlmICAvLyBTVE9SQUdFX0xFVkVMREJfREJfQlVJTERFUl9I
XwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9jLmNjIGIvU291cmNl
L1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9jLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA4ZmYwYWQ5MGFjMDBkNjNm
MDVkNWQ3MWZiODlmOWY3MDE4OTQwNTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9sZXZlbGRiL2RiL2MuY2MKQEAgLTAsMCArMSw1OTUgQEAKKy8vIENvcHlyaWdodCAoYykg
MjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZp
bGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2luY2x1ZGUgImxldmVsZGIvYy5oIgor
CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSAibGV2
ZWxkYi9jYWNoZS5oIgorI2luY2x1ZGUgImxldmVsZGIvY29tcGFyYXRvci5oIgorI2luY2x1ZGUg
ImxldmVsZGIvZGIuaCIKKyNpbmNsdWRlICJsZXZlbGRiL2Vudi5oIgorI2luY2x1ZGUgImxldmVs
ZGIvZmlsdGVyX3BvbGljeS5oIgorI2luY2x1ZGUgImxldmVsZGIvaXRlcmF0b3IuaCIKKyNpbmNs
dWRlICJsZXZlbGRiL29wdGlvbnMuaCIKKyNpbmNsdWRlICJsZXZlbGRiL3N0YXR1cy5oIgorI2lu
Y2x1ZGUgImxldmVsZGIvd3JpdGVfYmF0Y2guaCIKKwordXNpbmcgbGV2ZWxkYjo6Q2FjaGU7Cit1
c2luZyBsZXZlbGRiOjpDb21wYXJhdG9yOwordXNpbmcgbGV2ZWxkYjo6Q29tcHJlc3Npb25UeXBl
OwordXNpbmcgbGV2ZWxkYjo6REI7Cit1c2luZyBsZXZlbGRiOjpFbnY7Cit1c2luZyBsZXZlbGRi
OjpGaWxlTG9jazsKK3VzaW5nIGxldmVsZGI6OkZpbHRlclBvbGljeTsKK3VzaW5nIGxldmVsZGI6
Okl0ZXJhdG9yOwordXNpbmcgbGV2ZWxkYjo6a01ham9yVmVyc2lvbjsKK3VzaW5nIGxldmVsZGI6
OmtNaW5vclZlcnNpb247Cit1c2luZyBsZXZlbGRiOjpMb2dnZXI7Cit1c2luZyBsZXZlbGRiOjpO
ZXdCbG9vbUZpbHRlclBvbGljeTsKK3VzaW5nIGxldmVsZGI6Ok5ld0xSVUNhY2hlOwordXNpbmcg
bGV2ZWxkYjo6T3B0aW9uczsKK3VzaW5nIGxldmVsZGI6OlJhbmRvbUFjY2Vzc0ZpbGU7Cit1c2lu
ZyBsZXZlbGRiOjpSYW5nZTsKK3VzaW5nIGxldmVsZGI6OlJlYWRPcHRpb25zOwordXNpbmcgbGV2
ZWxkYjo6U2VxdWVudGlhbEZpbGU7Cit1c2luZyBsZXZlbGRiOjpTbGljZTsKK3VzaW5nIGxldmVs
ZGI6OlNuYXBzaG90OwordXNpbmcgbGV2ZWxkYjo6U3RhdHVzOwordXNpbmcgbGV2ZWxkYjo6V3Jp
dGFibGVGaWxlOwordXNpbmcgbGV2ZWxkYjo6V3JpdGVCYXRjaDsKK3VzaW5nIGxldmVsZGI6Oldy
aXRlT3B0aW9uczsKKworZXh0ZXJuICJDIiB7CisKK3N0cnVjdCBsZXZlbGRiX3QgICAgICAgICAg
ICAgIHsgREIqICAgICAgICAgICAgICAgcmVwOyB9Oworc3RydWN0IGxldmVsZGJfaXRlcmF0b3Jf
dCAgICAgeyBJdGVyYXRvciogICAgICAgICByZXA7IH07CitzdHJ1Y3QgbGV2ZWxkYl93cml0ZWJh
dGNoX3QgICB7IFdyaXRlQmF0Y2ggICAgICAgIHJlcDsgfTsKK3N0cnVjdCBsZXZlbGRiX3NuYXBz
aG90X3QgICAgIHsgY29uc3QgU25hcHNob3QqICAgcmVwOyB9Oworc3RydWN0IGxldmVsZGJfcmVh
ZG9wdGlvbnNfdCAgeyBSZWFkT3B0aW9ucyAgICAgICByZXA7IH07CitzdHJ1Y3QgbGV2ZWxkYl93
cml0ZW9wdGlvbnNfdCB7IFdyaXRlT3B0aW9ucyAgICAgIHJlcDsgfTsKK3N0cnVjdCBsZXZlbGRi
X29wdGlvbnNfdCAgICAgIHsgT3B0aW9ucyAgICAgICAgICAgcmVwOyB9Oworc3RydWN0IGxldmVs
ZGJfY2FjaGVfdCAgICAgICAgeyBDYWNoZSogICAgICAgICAgICByZXA7IH07CitzdHJ1Y3QgbGV2
ZWxkYl9zZXFmaWxlX3QgICAgICB7IFNlcXVlbnRpYWxGaWxlKiAgIHJlcDsgfTsKK3N0cnVjdCBs
ZXZlbGRiX3JhbmRvbWZpbGVfdCAgIHsgUmFuZG9tQWNjZXNzRmlsZSogcmVwOyB9Oworc3RydWN0
IGxldmVsZGJfd3JpdGFibGVmaWxlX3QgeyBXcml0YWJsZUZpbGUqICAgICByZXA7IH07CitzdHJ1
Y3QgbGV2ZWxkYl9sb2dnZXJfdCAgICAgICB7IExvZ2dlciogICAgICAgICAgIHJlcDsgfTsKK3N0
cnVjdCBsZXZlbGRiX2ZpbGVsb2NrX3QgICAgIHsgRmlsZUxvY2sqICAgICAgICAgcmVwOyB9Owor
CitzdHJ1Y3QgbGV2ZWxkYl9jb21wYXJhdG9yX3QgOiBwdWJsaWMgQ29tcGFyYXRvciB7CisgIHZv
aWQqIHN0YXRlXzsKKyAgdm9pZCAoKmRlc3RydWN0b3JfKSh2b2lkKik7CisgIGludCAoKmNvbXBh
cmVfKSgKKyAgICAgIHZvaWQqLAorICAgICAgY29uc3QgY2hhciogYSwgc2l6ZV90IGFsZW4sCisg
ICAgICBjb25zdCBjaGFyKiBiLCBzaXplX3QgYmxlbik7CisgIGNvbnN0IGNoYXIqICgqbmFtZV8p
KHZvaWQqKTsKKworICB2aXJ0dWFsIH5sZXZlbGRiX2NvbXBhcmF0b3JfdCgpIHsKKyAgICAoKmRl
c3RydWN0b3JfKShzdGF0ZV8pOworICB9CisKKyAgdmlydHVhbCBpbnQgQ29tcGFyZShjb25zdCBT
bGljZSYgYSwgY29uc3QgU2xpY2UmIGIpIGNvbnN0IHsKKyAgICByZXR1cm4gKCpjb21wYXJlXyko
c3RhdGVfLCBhLmRhdGEoKSwgYS5zaXplKCksIGIuZGF0YSgpLCBiLnNpemUoKSk7CisgIH0KKwor
ICB2aXJ0dWFsIGNvbnN0IGNoYXIqIE5hbWUoKSBjb25zdCB7CisgICAgcmV0dXJuICgqbmFtZV8p
KHN0YXRlXyk7CisgIH0KKworICAvLyBOby1vcHMgc2luY2UgdGhlIEMgYmluZGluZyBkb2VzIG5v
dCBzdXBwb3J0IGtleSBzaG9ydGVuaW5nIG1ldGhvZHMuCisgIHZpcnR1YWwgdm9pZCBGaW5kU2hv
cnRlc3RTZXBhcmF0b3Ioc3RkOjpzdHJpbmcqLCBjb25zdCBTbGljZSYpIGNvbnN0IHsgfQorICB2
aXJ0dWFsIHZvaWQgRmluZFNob3J0U3VjY2Vzc29yKHN0ZDo6c3RyaW5nKiBrZXkpIGNvbnN0IHsg
fQorfTsKKworc3RydWN0IGxldmVsZGJfZmlsdGVycG9saWN5X3QgOiBwdWJsaWMgRmlsdGVyUG9s
aWN5IHsKKyAgdm9pZCogc3RhdGVfOworICB2b2lkICgqZGVzdHJ1Y3Rvcl8pKHZvaWQqKTsKKyAg
Y29uc3QgY2hhciogKCpuYW1lXykodm9pZCopOworICBjaGFyKiAoKmNyZWF0ZV8pKAorICAgICAg
dm9pZCosCisgICAgICBjb25zdCBjaGFyKiBjb25zdCoga2V5X2FycmF5LCBjb25zdCBzaXplX3Qq
IGtleV9sZW5ndGhfYXJyYXksCisgICAgICBpbnQgbnVtX2tleXMsCisgICAgICBzaXplX3QqIGZp
bHRlcl9sZW5ndGgpOworICB1bnNpZ25lZCBjaGFyICgqa2V5X21hdGNoXykoCisgICAgICB2b2lk
KiwKKyAgICAgIGNvbnN0IGNoYXIqIGtleSwgc2l6ZV90IGxlbmd0aCwKKyAgICAgIGNvbnN0IGNo
YXIqIGZpbHRlciwgc2l6ZV90IGZpbHRlcl9sZW5ndGgpOworCisgIHZpcnR1YWwgfmxldmVsZGJf
ZmlsdGVycG9saWN5X3QoKSB7CisgICAgKCpkZXN0cnVjdG9yXykoc3RhdGVfKTsKKyAgfQorCisg
IHZpcnR1YWwgY29uc3QgY2hhciogTmFtZSgpIGNvbnN0IHsKKyAgICByZXR1cm4gKCpuYW1lXyko
c3RhdGVfKTsKKyAgfQorCisgIHZpcnR1YWwgdm9pZCBDcmVhdGVGaWx0ZXIoY29uc3QgU2xpY2Uq
IGtleXMsIGludCBuLCBzdGQ6OnN0cmluZyogZHN0KSBjb25zdCB7CisgICAgc3RkOjp2ZWN0b3I8
Y29uc3QgY2hhcio+IGtleV9wb2ludGVycyhuKTsKKyAgICBzdGQ6OnZlY3RvcjxzaXplX3Q+IGtl
eV9zaXplcyhuKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgeworICAgICAga2V5
X3BvaW50ZXJzW2ldID0ga2V5c1tpXS5kYXRhKCk7CisgICAgICBrZXlfc2l6ZXNbaV0gPSBrZXlz
W2ldLnNpemUoKTsKKyAgICB9CisgICAgc2l6ZV90IGxlbjsKKyAgICBjaGFyKiBmaWx0ZXIgPSAo
KmNyZWF0ZV8pKHN0YXRlXywgJmtleV9wb2ludGVyc1swXSwgJmtleV9zaXplc1swXSwgbiwgJmxl
bik7CisgICAgZHN0LT5hcHBlbmQoZmlsdGVyLCBsZW4pOworICAgIGZyZWUoZmlsdGVyKTsKKyAg
fQorCisgIHZpcnR1YWwgYm9vbCBLZXlNYXlNYXRjaChjb25zdCBTbGljZSYga2V5LCBjb25zdCBT
bGljZSYgZmlsdGVyKSBjb25zdCB7CisgICAgcmV0dXJuICgqa2V5X21hdGNoXykoc3RhdGVfLCBr
ZXkuZGF0YSgpLCBrZXkuc2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5k
YXRhKCksIGZpbHRlci5zaXplKCkpOworICB9Cit9OworCitzdHJ1Y3QgbGV2ZWxkYl9lbnZfdCB7
CisgIEVudiogcmVwOworICBib29sIGlzX2RlZmF1bHQ7Cit9OworCitzdGF0aWMgYm9vbCBTYXZl
RXJyb3IoY2hhcioqIGVycnB0ciwgY29uc3QgU3RhdHVzJiBzKSB7CisgIGFzc2VydChlcnJwdHIg
IT0gTlVMTCk7CisgIGlmIChzLm9rKCkpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0gZWxzZSBp
ZiAoKmVycnB0ciA9PSBOVUxMKSB7CisgICAgKmVycnB0ciA9IHN0cmR1cChzLlRvU3RyaW5nKCku
Y19zdHIoKSk7CisgIH0gZWxzZSB7CisgICAgLy8gVE9ETyhzYW5qYXkpOiBNZXJnZSB3aXRoIGV4
aXN0aW5nIGVycm9yPworICAgIGZyZWUoKmVycnB0cik7CisgICAgKmVycnB0ciA9IHN0cmR1cChz
LlRvU3RyaW5nKCkuY19zdHIoKSk7CisgIH0KKyAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBj
aGFyKiBDb3B5U3RyaW5nKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIpIHsKKyAgY2hhciogcmVzdWx0
ID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obWFsbG9jKHNpemVvZihjaGFyKSAqIHN0ci5zaXpl
KCkpKTsKKyAgbWVtY3B5KHJlc3VsdCwgc3RyLmRhdGEoKSwgc2l6ZW9mKGNoYXIpICogc3RyLnNp
emUoKSk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK2xldmVsZGJfdCogbGV2ZWxkYl9vcGVuKAor
ICAgIGNvbnN0IGxldmVsZGJfb3B0aW9uc190KiBvcHRpb25zLAorICAgIGNvbnN0IGNoYXIqIG5h
bWUsCisgICAgY2hhcioqIGVycnB0cikgeworICBEQiogZGI7CisgIGlmIChTYXZlRXJyb3IoZXJy
cHRyLCBEQjo6T3BlbihvcHRpb25zLT5yZXAsIHN0ZDo6c3RyaW5nKG5hbWUpLCAmZGIpKSkgewor
ICAgIHJldHVybiBOVUxMOworICB9CisgIGxldmVsZGJfdCogcmVzdWx0ID0gbmV3IGxldmVsZGJf
dDsKKyAgcmVzdWx0LT5yZXAgPSBkYjsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBsZXZl
bGRiX2Nsb3NlKGxldmVsZGJfdCogZGIpIHsKKyAgZGVsZXRlIGRiLT5yZXA7CisgIGRlbGV0ZSBk
YjsKK30KKwordm9pZCBsZXZlbGRiX3B1dCgKKyAgICBsZXZlbGRiX3QqIGRiLAorICAgIGNvbnN0
IGxldmVsZGJfd3JpdGVvcHRpb25zX3QqIG9wdGlvbnMsCisgICAgY29uc3QgY2hhcioga2V5LCBz
aXplX3Qga2V5bGVuLAorICAgIGNvbnN0IGNoYXIqIHZhbCwgc2l6ZV90IHZhbGxlbiwKKyAgICBj
aGFyKiogZXJycHRyKSB7CisgIFNhdmVFcnJvcihlcnJwdHIsCisgICAgICAgICAgICBkYi0+cmVw
LT5QdXQob3B0aW9ucy0+cmVwLCBTbGljZShrZXksIGtleWxlbiksIFNsaWNlKHZhbCwgdmFsbGVu
KSkpOworfQorCit2b2lkIGxldmVsZGJfZGVsZXRlKAorICAgIGxldmVsZGJfdCogZGIsCisgICAg
Y29uc3QgbGV2ZWxkYl93cml0ZW9wdGlvbnNfdCogb3B0aW9ucywKKyAgICBjb25zdCBjaGFyKiBr
ZXksIHNpemVfdCBrZXlsZW4sCisgICAgY2hhcioqIGVycnB0cikgeworICBTYXZlRXJyb3IoZXJy
cHRyLCBkYi0+cmVwLT5EZWxldGUob3B0aW9ucy0+cmVwLCBTbGljZShrZXksIGtleWxlbikpKTsK
K30KKworCit2b2lkIGxldmVsZGJfd3JpdGUoCisgICAgbGV2ZWxkYl90KiBkYiwKKyAgICBjb25z
dCBsZXZlbGRiX3dyaXRlb3B0aW9uc190KiBvcHRpb25zLAorICAgIGxldmVsZGJfd3JpdGViYXRj
aF90KiBiYXRjaCwKKyAgICBjaGFyKiogZXJycHRyKSB7CisgIFNhdmVFcnJvcihlcnJwdHIsIGRi
LT5yZXAtPldyaXRlKG9wdGlvbnMtPnJlcCwgJmJhdGNoLT5yZXApKTsKK30KKworY2hhciogbGV2
ZWxkYl9nZXQoCisgICAgbGV2ZWxkYl90KiBkYiwKKyAgICBjb25zdCBsZXZlbGRiX3JlYWRvcHRp
b25zX3QqIG9wdGlvbnMsCisgICAgY29uc3QgY2hhcioga2V5LCBzaXplX3Qga2V5bGVuLAorICAg
IHNpemVfdCogdmFsbGVuLAorICAgIGNoYXIqKiBlcnJwdHIpIHsKKyAgY2hhciogcmVzdWx0ID0g
TlVMTDsKKyAgc3RkOjpzdHJpbmcgdG1wOworICBTdGF0dXMgcyA9IGRiLT5yZXAtPkdldChvcHRp
b25zLT5yZXAsIFNsaWNlKGtleSwga2V5bGVuKSwgJnRtcCk7CisgIGlmIChzLm9rKCkpIHsKKyAg
ICAqdmFsbGVuID0gdG1wLnNpemUoKTsKKyAgICByZXN1bHQgPSBDb3B5U3RyaW5nKHRtcCk7Cisg
IH0gZWxzZSB7CisgICAgKnZhbGxlbiA9IDA7CisgICAgaWYgKCFzLklzTm90Rm91bmQoKSkgewor
ICAgICAgU2F2ZUVycm9yKGVycnB0ciwgcyk7CisgICAgfQorICB9CisgIHJldHVybiByZXN1bHQ7
Cit9CisKK2xldmVsZGJfaXRlcmF0b3JfdCogbGV2ZWxkYl9jcmVhdGVfaXRlcmF0b3IoCisgICAg
bGV2ZWxkYl90KiBkYiwKKyAgICBjb25zdCBsZXZlbGRiX3JlYWRvcHRpb25zX3QqIG9wdGlvbnMp
IHsKKyAgbGV2ZWxkYl9pdGVyYXRvcl90KiByZXN1bHQgPSBuZXcgbGV2ZWxkYl9pdGVyYXRvcl90
OworICByZXN1bHQtPnJlcCA9IGRiLT5yZXAtPk5ld0l0ZXJhdG9yKG9wdGlvbnMtPnJlcCk7Cisg
IHJldHVybiByZXN1bHQ7Cit9CisKK2NvbnN0IGxldmVsZGJfc25hcHNob3RfdCogbGV2ZWxkYl9j
cmVhdGVfc25hcHNob3QoCisgICAgbGV2ZWxkYl90KiBkYikgeworICBsZXZlbGRiX3NuYXBzaG90
X3QqIHJlc3VsdCA9IG5ldyBsZXZlbGRiX3NuYXBzaG90X3Q7CisgIHJlc3VsdC0+cmVwID0gZGIt
PnJlcC0+R2V0U25hcHNob3QoKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBsZXZlbGRi
X3JlbGVhc2Vfc25hcHNob3QoCisgICAgbGV2ZWxkYl90KiBkYiwKKyAgICBjb25zdCBsZXZlbGRi
X3NuYXBzaG90X3QqIHNuYXBzaG90KSB7CisgIGRiLT5yZXAtPlJlbGVhc2VTbmFwc2hvdChzbmFw
c2hvdC0+cmVwKTsKKyAgZGVsZXRlIHNuYXBzaG90OworfQorCitjaGFyKiBsZXZlbGRiX3Byb3Bl
cnR5X3ZhbHVlKAorICAgIGxldmVsZGJfdCogZGIsCisgICAgY29uc3QgY2hhciogcHJvcG5hbWUp
IHsKKyAgc3RkOjpzdHJpbmcgdG1wOworICBpZiAoZGItPnJlcC0+R2V0UHJvcGVydHkoU2xpY2Uo
cHJvcG5hbWUpLCAmdG1wKSkgeworICAgIC8vIFdlIHVzZSBzdHJkdXAoKSBzaW5jZSB3ZSBleHBl
Y3QgaHVtYW4gcmVhZGFibGUgb3V0cHV0LgorICAgIHJldHVybiBzdHJkdXAodG1wLmNfc3RyKCkp
OworICB9IGVsc2UgeworICAgIHJldHVybiBOVUxMOworICB9Cit9CisKK3ZvaWQgbGV2ZWxkYl9h
cHByb3hpbWF0ZV9zaXplcygKKyAgICBsZXZlbGRiX3QqIGRiLAorICAgIGludCBudW1fcmFuZ2Vz
LAorICAgIGNvbnN0IGNoYXIqIGNvbnN0KiByYW5nZV9zdGFydF9rZXksIGNvbnN0IHNpemVfdCog
cmFuZ2Vfc3RhcnRfa2V5X2xlbiwKKyAgICBjb25zdCBjaGFyKiBjb25zdCogcmFuZ2VfbGltaXRf
a2V5LCBjb25zdCBzaXplX3QqIHJhbmdlX2xpbWl0X2tleV9sZW4sCisgICAgdWludDY0X3QqIHNp
emVzKSB7CisgIFJhbmdlKiByYW5nZXMgPSBuZXcgUmFuZ2VbbnVtX3Jhbmdlc107CisgIGZvciAo
aW50IGkgPSAwOyBpIDwgbnVtX3JhbmdlczsgaSsrKSB7CisgICAgcmFuZ2VzW2ldLnN0YXJ0ID0g
U2xpY2UocmFuZ2Vfc3RhcnRfa2V5W2ldLCByYW5nZV9zdGFydF9rZXlfbGVuW2ldKTsKKyAgICBy
YW5nZXNbaV0ubGltaXQgPSBTbGljZShyYW5nZV9saW1pdF9rZXlbaV0sIHJhbmdlX2xpbWl0X2tl
eV9sZW5baV0pOworICB9CisgIGRiLT5yZXAtPkdldEFwcHJveGltYXRlU2l6ZXMocmFuZ2VzLCBu
dW1fcmFuZ2VzLCBzaXplcyk7CisgIGRlbGV0ZVtdIHJhbmdlczsKK30KKwordm9pZCBsZXZlbGRi
X2NvbXBhY3RfcmFuZ2UoCisgICAgbGV2ZWxkYl90KiBkYiwKKyAgICBjb25zdCBjaGFyKiBzdGFy
dF9rZXksIHNpemVfdCBzdGFydF9rZXlfbGVuLAorICAgIGNvbnN0IGNoYXIqIGxpbWl0X2tleSwg
c2l6ZV90IGxpbWl0X2tleV9sZW4pIHsKKyAgU2xpY2UgYSwgYjsKKyAgZGItPnJlcC0+Q29tcGFj
dFJhbmdlKAorICAgICAgLy8gUGFzcyBOVUxMIFNsaWNlIGlmIGNvcnJlc3BvbmRpbmcgImNvbnN0
IGNoYXIqIiBpcyBOVUxMCisgICAgICAoc3RhcnRfa2V5ID8gKGEgPSBTbGljZShzdGFydF9rZXks
IHN0YXJ0X2tleV9sZW4pLCAmYSkgOiBOVUxMKSwKKyAgICAgIChsaW1pdF9rZXkgPyAoYiA9IFNs
aWNlKGxpbWl0X2tleSwgbGltaXRfa2V5X2xlbiksICZiKSA6IE5VTEwpKTsKK30KKwordm9pZCBs
ZXZlbGRiX2Rlc3Ryb3lfZGIoCisgICAgY29uc3QgbGV2ZWxkYl9vcHRpb25zX3QqIG9wdGlvbnMs
CisgICAgY29uc3QgY2hhciogbmFtZSwKKyAgICBjaGFyKiogZXJycHRyKSB7CisgIFNhdmVFcnJv
cihlcnJwdHIsIERlc3Ryb3lEQihuYW1lLCBvcHRpb25zLT5yZXApKTsKK30KKwordm9pZCBsZXZl
bGRiX3JlcGFpcl9kYigKKyAgICBjb25zdCBsZXZlbGRiX29wdGlvbnNfdCogb3B0aW9ucywKKyAg
ICBjb25zdCBjaGFyKiBuYW1lLAorICAgIGNoYXIqKiBlcnJwdHIpIHsKKyAgU2F2ZUVycm9yKGVy
cnB0ciwgUmVwYWlyREIobmFtZSwgb3B0aW9ucy0+cmVwKSk7Cit9CisKK3ZvaWQgbGV2ZWxkYl9p
dGVyX2Rlc3Ryb3kobGV2ZWxkYl9pdGVyYXRvcl90KiBpdGVyKSB7CisgIGRlbGV0ZSBpdGVyLT5y
ZXA7CisgIGRlbGV0ZSBpdGVyOworfQorCit1bnNpZ25lZCBjaGFyIGxldmVsZGJfaXRlcl92YWxp
ZChjb25zdCBsZXZlbGRiX2l0ZXJhdG9yX3QqIGl0ZXIpIHsKKyAgcmV0dXJuIGl0ZXItPnJlcC0+
VmFsaWQoKTsKK30KKwordm9pZCBsZXZlbGRiX2l0ZXJfc2Vla190b19maXJzdChsZXZlbGRiX2l0
ZXJhdG9yX3QqIGl0ZXIpIHsKKyAgaXRlci0+cmVwLT5TZWVrVG9GaXJzdCgpOworfQorCit2b2lk
IGxldmVsZGJfaXRlcl9zZWVrX3RvX2xhc3QobGV2ZWxkYl9pdGVyYXRvcl90KiBpdGVyKSB7Cisg
IGl0ZXItPnJlcC0+U2Vla1RvTGFzdCgpOworfQorCit2b2lkIGxldmVsZGJfaXRlcl9zZWVrKGxl
dmVsZGJfaXRlcmF0b3JfdCogaXRlciwgY29uc3QgY2hhciogaywgc2l6ZV90IGtsZW4pIHsKKyAg
aXRlci0+cmVwLT5TZWVrKFNsaWNlKGssIGtsZW4pKTsKK30KKwordm9pZCBsZXZlbGRiX2l0ZXJf
bmV4dChsZXZlbGRiX2l0ZXJhdG9yX3QqIGl0ZXIpIHsKKyAgaXRlci0+cmVwLT5OZXh0KCk7Cit9
CisKK3ZvaWQgbGV2ZWxkYl9pdGVyX3ByZXYobGV2ZWxkYl9pdGVyYXRvcl90KiBpdGVyKSB7Cisg
IGl0ZXItPnJlcC0+UHJldigpOworfQorCitjb25zdCBjaGFyKiBsZXZlbGRiX2l0ZXJfa2V5KGNv
bnN0IGxldmVsZGJfaXRlcmF0b3JfdCogaXRlciwgc2l6ZV90KiBrbGVuKSB7CisgIFNsaWNlIHMg
PSBpdGVyLT5yZXAtPmtleSgpOworICAqa2xlbiA9IHMuc2l6ZSgpOworICByZXR1cm4gcy5kYXRh
KCk7Cit9CisKK2NvbnN0IGNoYXIqIGxldmVsZGJfaXRlcl92YWx1ZShjb25zdCBsZXZlbGRiX2l0
ZXJhdG9yX3QqIGl0ZXIsIHNpemVfdCogdmxlbikgeworICBTbGljZSBzID0gaXRlci0+cmVwLT52
YWx1ZSgpOworICAqdmxlbiA9IHMuc2l6ZSgpOworICByZXR1cm4gcy5kYXRhKCk7Cit9CisKK3Zv
aWQgbGV2ZWxkYl9pdGVyX2dldF9lcnJvcihjb25zdCBsZXZlbGRiX2l0ZXJhdG9yX3QqIGl0ZXIs
IGNoYXIqKiBlcnJwdHIpIHsKKyAgU2F2ZUVycm9yKGVycnB0ciwgaXRlci0+cmVwLT5zdGF0dXMo
KSk7Cit9CisKK2xldmVsZGJfd3JpdGViYXRjaF90KiBsZXZlbGRiX3dyaXRlYmF0Y2hfY3JlYXRl
KCkgeworICByZXR1cm4gbmV3IGxldmVsZGJfd3JpdGViYXRjaF90OworfQorCit2b2lkIGxldmVs
ZGJfd3JpdGViYXRjaF9kZXN0cm95KGxldmVsZGJfd3JpdGViYXRjaF90KiBiKSB7CisgIGRlbGV0
ZSBiOworfQorCit2b2lkIGxldmVsZGJfd3JpdGViYXRjaF9jbGVhcihsZXZlbGRiX3dyaXRlYmF0
Y2hfdCogYikgeworICBiLT5yZXAuQ2xlYXIoKTsKK30KKwordm9pZCBsZXZlbGRiX3dyaXRlYmF0
Y2hfcHV0KAorICAgIGxldmVsZGJfd3JpdGViYXRjaF90KiBiLAorICAgIGNvbnN0IGNoYXIqIGtl
eSwgc2l6ZV90IGtsZW4sCisgICAgY29uc3QgY2hhciogdmFsLCBzaXplX3QgdmxlbikgeworICBi
LT5yZXAuUHV0KFNsaWNlKGtleSwga2xlbiksIFNsaWNlKHZhbCwgdmxlbikpOworfQorCit2b2lk
IGxldmVsZGJfd3JpdGViYXRjaF9kZWxldGUoCisgICAgbGV2ZWxkYl93cml0ZWJhdGNoX3QqIGIs
CisgICAgY29uc3QgY2hhcioga2V5LCBzaXplX3Qga2xlbikgeworICBiLT5yZXAuRGVsZXRlKFNs
aWNlKGtleSwga2xlbikpOworfQorCit2b2lkIGxldmVsZGJfd3JpdGViYXRjaF9pdGVyYXRlKAor
ICAgIGxldmVsZGJfd3JpdGViYXRjaF90KiBiLAorICAgIHZvaWQqIHN0YXRlLAorICAgIHZvaWQg
KCpwdXQpKHZvaWQqLCBjb25zdCBjaGFyKiBrLCBzaXplX3Qga2xlbiwgY29uc3QgY2hhciogdiwg
c2l6ZV90IHZsZW4pLAorICAgIHZvaWQgKCpkZWxldGVkKSh2b2lkKiwgY29uc3QgY2hhciogaywg
c2l6ZV90IGtsZW4pKSB7CisgIGNsYXNzIEggOiBwdWJsaWMgV3JpdGVCYXRjaDo6SGFuZGxlciB7
CisgICBwdWJsaWM6CisgICAgdm9pZCogc3RhdGVfOworICAgIHZvaWQgKCpwdXRfKSh2b2lkKiwg
Y29uc3QgY2hhciogaywgc2l6ZV90IGtsZW4sIGNvbnN0IGNoYXIqIHYsIHNpemVfdCB2bGVuKTsK
KyAgICB2b2lkICgqZGVsZXRlZF8pKHZvaWQqLCBjb25zdCBjaGFyKiBrLCBzaXplX3Qga2xlbik7
CisgICAgdmlydHVhbCB2b2lkIFB1dChjb25zdCBTbGljZSYga2V5LCBjb25zdCBTbGljZSYgdmFs
dWUpIHsKKyAgICAgICgqcHV0Xykoc3RhdGVfLCBrZXkuZGF0YSgpLCBrZXkuc2l6ZSgpLCB2YWx1
ZS5kYXRhKCksIHZhbHVlLnNpemUoKSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBEZWxldGUo
Y29uc3QgU2xpY2UmIGtleSkgeworICAgICAgKCpkZWxldGVkXykoc3RhdGVfLCBrZXkuZGF0YSgp
LCBrZXkuc2l6ZSgpKTsKKyAgICB9CisgIH07CisgIEggaGFuZGxlcjsKKyAgaGFuZGxlci5zdGF0
ZV8gPSBzdGF0ZTsKKyAgaGFuZGxlci5wdXRfID0gcHV0OworICBoYW5kbGVyLmRlbGV0ZWRfID0g
ZGVsZXRlZDsKKyAgYi0+cmVwLkl0ZXJhdGUoJmhhbmRsZXIpOworfQorCitsZXZlbGRiX29wdGlv
bnNfdCogbGV2ZWxkYl9vcHRpb25zX2NyZWF0ZSgpIHsKKyAgcmV0dXJuIG5ldyBsZXZlbGRiX29w
dGlvbnNfdDsKK30KKwordm9pZCBsZXZlbGRiX29wdGlvbnNfZGVzdHJveShsZXZlbGRiX29wdGlv
bnNfdCogb3B0aW9ucykgeworICBkZWxldGUgb3B0aW9uczsKK30KKwordm9pZCBsZXZlbGRiX29w
dGlvbnNfc2V0X2NvbXBhcmF0b3IoCisgICAgbGV2ZWxkYl9vcHRpb25zX3QqIG9wdCwKKyAgICBs
ZXZlbGRiX2NvbXBhcmF0b3JfdCogY21wKSB7CisgIG9wdC0+cmVwLmNvbXBhcmF0b3IgPSBjbXA7
Cit9CisKK3ZvaWQgbGV2ZWxkYl9vcHRpb25zX3NldF9maWx0ZXJfcG9saWN5KAorICAgIGxldmVs
ZGJfb3B0aW9uc190KiBvcHQsCisgICAgbGV2ZWxkYl9maWx0ZXJwb2xpY3lfdCogcG9saWN5KSB7
CisgIG9wdC0+cmVwLmZpbHRlcl9wb2xpY3kgPSBwb2xpY3k7Cit9CisKK3ZvaWQgbGV2ZWxkYl9v
cHRpb25zX3NldF9jcmVhdGVfaWZfbWlzc2luZygKKyAgICBsZXZlbGRiX29wdGlvbnNfdCogb3B0
LCB1bnNpZ25lZCBjaGFyIHYpIHsKKyAgb3B0LT5yZXAuY3JlYXRlX2lmX21pc3NpbmcgPSB2Owor
fQorCit2b2lkIGxldmVsZGJfb3B0aW9uc19zZXRfZXJyb3JfaWZfZXhpc3RzKAorICAgIGxldmVs
ZGJfb3B0aW9uc190KiBvcHQsIHVuc2lnbmVkIGNoYXIgdikgeworICBvcHQtPnJlcC5lcnJvcl9p
Zl9leGlzdHMgPSB2OworfQorCit2b2lkIGxldmVsZGJfb3B0aW9uc19zZXRfcGFyYW5vaWRfY2hl
Y2tzKAorICAgIGxldmVsZGJfb3B0aW9uc190KiBvcHQsIHVuc2lnbmVkIGNoYXIgdikgeworICBv
cHQtPnJlcC5wYXJhbm9pZF9jaGVja3MgPSB2OworfQorCit2b2lkIGxldmVsZGJfb3B0aW9uc19z
ZXRfZW52KGxldmVsZGJfb3B0aW9uc190KiBvcHQsIGxldmVsZGJfZW52X3QqIGVudikgeworICBv
cHQtPnJlcC5lbnYgPSAoZW52ID8gZW52LT5yZXAgOiBOVUxMKTsKK30KKwordm9pZCBsZXZlbGRi
X29wdGlvbnNfc2V0X2luZm9fbG9nKGxldmVsZGJfb3B0aW9uc190KiBvcHQsIGxldmVsZGJfbG9n
Z2VyX3QqIGwpIHsKKyAgb3B0LT5yZXAuaW5mb19sb2cgPSAobCA/IGwtPnJlcCA6IE5VTEwpOwor
fQorCit2b2lkIGxldmVsZGJfb3B0aW9uc19zZXRfd3JpdGVfYnVmZmVyX3NpemUobGV2ZWxkYl9v
cHRpb25zX3QqIG9wdCwgc2l6ZV90IHMpIHsKKyAgb3B0LT5yZXAud3JpdGVfYnVmZmVyX3NpemUg
PSBzOworfQorCit2b2lkIGxldmVsZGJfb3B0aW9uc19zZXRfbWF4X29wZW5fZmlsZXMobGV2ZWxk
Yl9vcHRpb25zX3QqIG9wdCwgaW50IG4pIHsKKyAgb3B0LT5yZXAubWF4X29wZW5fZmlsZXMgPSBu
OworfQorCit2b2lkIGxldmVsZGJfb3B0aW9uc19zZXRfY2FjaGUobGV2ZWxkYl9vcHRpb25zX3Qq
IG9wdCwgbGV2ZWxkYl9jYWNoZV90KiBjKSB7CisgIG9wdC0+cmVwLmJsb2NrX2NhY2hlID0gYy0+
cmVwOworfQorCit2b2lkIGxldmVsZGJfb3B0aW9uc19zZXRfYmxvY2tfc2l6ZShsZXZlbGRiX29w
dGlvbnNfdCogb3B0LCBzaXplX3QgcykgeworICBvcHQtPnJlcC5ibG9ja19zaXplID0gczsKK30K
Kwordm9pZCBsZXZlbGRiX29wdGlvbnNfc2V0X2Jsb2NrX3Jlc3RhcnRfaW50ZXJ2YWwobGV2ZWxk
Yl9vcHRpb25zX3QqIG9wdCwgaW50IG4pIHsKKyAgb3B0LT5yZXAuYmxvY2tfcmVzdGFydF9pbnRl
cnZhbCA9IG47Cit9CisKK3ZvaWQgbGV2ZWxkYl9vcHRpb25zX3NldF9jb21wcmVzc2lvbihsZXZl
bGRiX29wdGlvbnNfdCogb3B0LCBpbnQgdCkgeworICBvcHQtPnJlcC5jb21wcmVzc2lvbiA9IHN0
YXRpY19jYXN0PENvbXByZXNzaW9uVHlwZT4odCk7Cit9CisKK2xldmVsZGJfY29tcGFyYXRvcl90
KiBsZXZlbGRiX2NvbXBhcmF0b3JfY3JlYXRlKAorICAgIHZvaWQqIHN0YXRlLAorICAgIHZvaWQg
KCpkZXN0cnVjdG9yKSh2b2lkKiksCisgICAgaW50ICgqY29tcGFyZSkoCisgICAgICAgIHZvaWQq
LAorICAgICAgICBjb25zdCBjaGFyKiBhLCBzaXplX3QgYWxlbiwKKyAgICAgICAgY29uc3QgY2hh
ciogYiwgc2l6ZV90IGJsZW4pLAorICAgIGNvbnN0IGNoYXIqICgqbmFtZSkodm9pZCopKSB7Cisg
IGxldmVsZGJfY29tcGFyYXRvcl90KiByZXN1bHQgPSBuZXcgbGV2ZWxkYl9jb21wYXJhdG9yX3Q7
CisgIHJlc3VsdC0+c3RhdGVfID0gc3RhdGU7CisgIHJlc3VsdC0+ZGVzdHJ1Y3Rvcl8gPSBkZXN0
cnVjdG9yOworICByZXN1bHQtPmNvbXBhcmVfID0gY29tcGFyZTsKKyAgcmVzdWx0LT5uYW1lXyA9
IG5hbWU7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgbGV2ZWxkYl9jb21wYXJhdG9yX2Rl
c3Ryb3kobGV2ZWxkYl9jb21wYXJhdG9yX3QqIGNtcCkgeworICBkZWxldGUgY21wOworfQorCits
ZXZlbGRiX2ZpbHRlcnBvbGljeV90KiBsZXZlbGRiX2ZpbHRlcnBvbGljeV9jcmVhdGUoCisgICAg
dm9pZCogc3RhdGUsCisgICAgdm9pZCAoKmRlc3RydWN0b3IpKHZvaWQqKSwKKyAgICBjaGFyKiAo
KmNyZWF0ZV9maWx0ZXIpKAorICAgICAgICB2b2lkKiwKKyAgICAgICAgY29uc3QgY2hhciogY29u
c3QqIGtleV9hcnJheSwgY29uc3Qgc2l6ZV90KiBrZXlfbGVuZ3RoX2FycmF5LAorICAgICAgICBp
bnQgbnVtX2tleXMsCisgICAgICAgIHNpemVfdCogZmlsdGVyX2xlbmd0aCksCisgICAgdW5zaWdu
ZWQgY2hhciAoKmtleV9tYXlfbWF0Y2gpKAorICAgICAgICB2b2lkKiwKKyAgICAgICAgY29uc3Qg
Y2hhcioga2V5LCBzaXplX3QgbGVuZ3RoLAorICAgICAgICBjb25zdCBjaGFyKiBmaWx0ZXIsIHNp
emVfdCBmaWx0ZXJfbGVuZ3RoKSwKKyAgICBjb25zdCBjaGFyKiAoKm5hbWUpKHZvaWQqKSkgewor
ICBsZXZlbGRiX2ZpbHRlcnBvbGljeV90KiByZXN1bHQgPSBuZXcgbGV2ZWxkYl9maWx0ZXJwb2xp
Y3lfdDsKKyAgcmVzdWx0LT5zdGF0ZV8gPSBzdGF0ZTsKKyAgcmVzdWx0LT5kZXN0cnVjdG9yXyA9
IGRlc3RydWN0b3I7CisgIHJlc3VsdC0+Y3JlYXRlXyA9IGNyZWF0ZV9maWx0ZXI7CisgIHJlc3Vs
dC0+a2V5X21hdGNoXyA9IGtleV9tYXlfbWF0Y2g7CisgIHJlc3VsdC0+bmFtZV8gPSBuYW1lOwor
ICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIGxldmVsZGJfZmlsdGVycG9saWN5X2Rlc3Ryb3ko
bGV2ZWxkYl9maWx0ZXJwb2xpY3lfdCogZmlsdGVyKSB7CisgIGRlbGV0ZSBmaWx0ZXI7Cit9CisK
K2xldmVsZGJfZmlsdGVycG9saWN5X3QqIGxldmVsZGJfZmlsdGVycG9saWN5X2NyZWF0ZV9ibG9v
bShpbnQgYml0c19wZXJfa2V5KSB7CisgIC8vIE1ha2UgYSBsZXZlbGRiX2ZpbHRlcnBvbGljeV90
LCBidXQgb3ZlcnJpZGUgYWxsIG9mIGl0cyBtZXRob2RzIHNvCisgIC8vIHRoZXkgZGVsZWdhdGUg
dG8gYSBOZXdCbG9vbUZpbHRlclBvbGljeSgpIGluc3RlYWQgb2YgdXNlcgorICAvLyBzdXBwbGll
ZCBDIGZ1bmN0aW9ucy4KKyAgc3RydWN0IFdyYXBwZXIgOiBwdWJsaWMgbGV2ZWxkYl9maWx0ZXJw
b2xpY3lfdCB7CisgICAgY29uc3QgRmlsdGVyUG9saWN5KiByZXBfOworICAgIH5XcmFwcGVyKCkg
eyBkZWxldGUgcmVwXzsgfQorICAgIGNvbnN0IGNoYXIqIE5hbWUoKSBjb25zdCB7IHJldHVybiBy
ZXBfLT5OYW1lKCk7IH0KKyAgICB2b2lkIENyZWF0ZUZpbHRlcihjb25zdCBTbGljZSoga2V5cywg
aW50IG4sIHN0ZDo6c3RyaW5nKiBkc3QpIGNvbnN0IHsKKyAgICAgIHJldHVybiByZXBfLT5DcmVh
dGVGaWx0ZXIoa2V5cywgbiwgZHN0KTsKKyAgICB9CisgICAgYm9vbCBLZXlNYXlNYXRjaChjb25z
dCBTbGljZSYga2V5LCBjb25zdCBTbGljZSYgZmlsdGVyKSBjb25zdCB7CisgICAgICByZXR1cm4g
cmVwXy0+S2V5TWF5TWF0Y2goa2V5LCBmaWx0ZXIpOworICAgIH0KKyAgICBzdGF0aWMgdm9pZCBE
b05vdGhpbmcodm9pZCopIHsgfQorICB9OworICBXcmFwcGVyKiB3cmFwcGVyID0gbmV3IFdyYXBw
ZXI7CisgIHdyYXBwZXItPnJlcF8gPSBOZXdCbG9vbUZpbHRlclBvbGljeShiaXRzX3Blcl9rZXkp
OworICB3cmFwcGVyLT5zdGF0ZV8gPSBOVUxMOworICB3cmFwcGVyLT5kZXN0cnVjdG9yXyA9ICZX
cmFwcGVyOjpEb05vdGhpbmc7CisgIHJldHVybiB3cmFwcGVyOworfQorCitsZXZlbGRiX3JlYWRv
cHRpb25zX3QqIGxldmVsZGJfcmVhZG9wdGlvbnNfY3JlYXRlKCkgeworICByZXR1cm4gbmV3IGxl
dmVsZGJfcmVhZG9wdGlvbnNfdDsKK30KKwordm9pZCBsZXZlbGRiX3JlYWRvcHRpb25zX2Rlc3Ry
b3kobGV2ZWxkYl9yZWFkb3B0aW9uc190KiBvcHQpIHsKKyAgZGVsZXRlIG9wdDsKK30KKwordm9p
ZCBsZXZlbGRiX3JlYWRvcHRpb25zX3NldF92ZXJpZnlfY2hlY2tzdW1zKAorICAgIGxldmVsZGJf
cmVhZG9wdGlvbnNfdCogb3B0LAorICAgIHVuc2lnbmVkIGNoYXIgdikgeworICBvcHQtPnJlcC52
ZXJpZnlfY2hlY2tzdW1zID0gdjsKK30KKwordm9pZCBsZXZlbGRiX3JlYWRvcHRpb25zX3NldF9m
aWxsX2NhY2hlKAorICAgIGxldmVsZGJfcmVhZG9wdGlvbnNfdCogb3B0LCB1bnNpZ25lZCBjaGFy
IHYpIHsKKyAgb3B0LT5yZXAuZmlsbF9jYWNoZSA9IHY7Cit9CisKK3ZvaWQgbGV2ZWxkYl9yZWFk
b3B0aW9uc19zZXRfc25hcHNob3QoCisgICAgbGV2ZWxkYl9yZWFkb3B0aW9uc190KiBvcHQsCisg
ICAgY29uc3QgbGV2ZWxkYl9zbmFwc2hvdF90KiBzbmFwKSB7CisgIG9wdC0+cmVwLnNuYXBzaG90
ID0gKHNuYXAgPyBzbmFwLT5yZXAgOiBOVUxMKTsKK30KKworbGV2ZWxkYl93cml0ZW9wdGlvbnNf
dCogbGV2ZWxkYl93cml0ZW9wdGlvbnNfY3JlYXRlKCkgeworICByZXR1cm4gbmV3IGxldmVsZGJf
d3JpdGVvcHRpb25zX3Q7Cit9CisKK3ZvaWQgbGV2ZWxkYl93cml0ZW9wdGlvbnNfZGVzdHJveShs
ZXZlbGRiX3dyaXRlb3B0aW9uc190KiBvcHQpIHsKKyAgZGVsZXRlIG9wdDsKK30KKwordm9pZCBs
ZXZlbGRiX3dyaXRlb3B0aW9uc19zZXRfc3luYygKKyAgICBsZXZlbGRiX3dyaXRlb3B0aW9uc190
KiBvcHQsIHVuc2lnbmVkIGNoYXIgdikgeworICBvcHQtPnJlcC5zeW5jID0gdjsKK30KKworbGV2
ZWxkYl9jYWNoZV90KiBsZXZlbGRiX2NhY2hlX2NyZWF0ZV9scnUoc2l6ZV90IGNhcGFjaXR5KSB7
CisgIGxldmVsZGJfY2FjaGVfdCogYyA9IG5ldyBsZXZlbGRiX2NhY2hlX3Q7CisgIGMtPnJlcCA9
IE5ld0xSVUNhY2hlKGNhcGFjaXR5KTsKKyAgcmV0dXJuIGM7Cit9CisKK3ZvaWQgbGV2ZWxkYl9j
YWNoZV9kZXN0cm95KGxldmVsZGJfY2FjaGVfdCogY2FjaGUpIHsKKyAgZGVsZXRlIGNhY2hlLT5y
ZXA7CisgIGRlbGV0ZSBjYWNoZTsKK30KKworbGV2ZWxkYl9lbnZfdCogbGV2ZWxkYl9jcmVhdGVf
ZGVmYXVsdF9lbnYoKSB7CisgIGxldmVsZGJfZW52X3QqIHJlc3VsdCA9IG5ldyBsZXZlbGRiX2Vu
dl90OworICByZXN1bHQtPnJlcCA9IEVudjo6RGVmYXVsdCgpOworICByZXN1bHQtPmlzX2RlZmF1
bHQgPSB0cnVlOworICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIGxldmVsZGJfZW52X2Rlc3Ry
b3kobGV2ZWxkYl9lbnZfdCogZW52KSB7CisgIGlmICghZW52LT5pc19kZWZhdWx0KSBkZWxldGUg
ZW52LT5yZXA7CisgIGRlbGV0ZSBlbnY7Cit9CisKK3ZvaWQgbGV2ZWxkYl9mcmVlKHZvaWQqIHB0
cikgeworICBmcmVlKHB0cik7Cit9CisKK2ludCBsZXZlbGRiX21ham9yX3ZlcnNpb24oKSB7Cisg
IHJldHVybiBrTWFqb3JWZXJzaW9uOworfQorCitpbnQgbGV2ZWxkYl9taW5vcl92ZXJzaW9uKCkg
eworICByZXR1cm4ga01pbm9yVmVyc2lvbjsKK30KKworfSAgLy8gZW5kIGV4dGVybiAiQyIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvY190ZXN0LmMgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2NfdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdjZDVlZTAyMDc2YWI5
NjMwM2EyYjFmMjVkYmFiYmU3MjFjYWFiYTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9sZXZlbGRiL2RiL2NfdGVzdC5jCkBAIC0wLDAgKzEsMzkwIEBACisvKiBDb3B5cmln
aHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAg
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKyAgIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVU
SE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuICovCisKKyNpbmNsdWRlICJsZXZl
bGRiL2MuaCIKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5j
bHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVz
Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK2NvbnN0IGNoYXIqIHBoYXNlID0gIiI7CitzdGF0
aWMgY2hhciBkYm5hbWVbMjAwXTsKKworc3RhdGljIHZvaWQgU3RhcnRQaGFzZShjb25zdCBjaGFy
KiBuYW1lKSB7CisgIGZwcmludGYoc3RkZXJyLCAiPT09IFRlc3QgJXNcbiIsIG5hbWUpOworICBw
aGFzZSA9IG5hbWU7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyKiBHZXRUZW1wRGlyKHZvaWQpIHsK
KyAgICBjb25zdCBjaGFyKiByZXQgPSBnZXRlbnYoIlRFU1RfVE1QRElSIik7CisgICAgaWYgKHJl
dCA9PSBOVUxMIHx8IHJldFswXSA9PSAnXDAnKQorICAgICAgICByZXQgPSAiL3RtcCI7CisgICAg
cmV0dXJuIHJldDsKK30KKworI2RlZmluZSBDaGVja05vRXJyb3IoZXJyKSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpZiAoKGVycikgIT0gTlVMTCkg
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
IGZwcmludGYoc3RkZXJyLCAiJXM6JWQ6ICVzOiAlc1xuIiwgX19GSUxFX18sIF9fTElORV9fLCBw
aGFzZSwgKGVycikpOyBcCisgICAgYWJvcnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0KKworI2RlZmluZSBDaGVja0Nv
bmRpdGlvbihjb25kKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICBpZiAoIShjb25kKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIGZwcmludGYoc3RkZXJyLCAiJXM6JWQ6ICVzOiAlc1xu
IiwgX19GSUxFX18sIF9fTElORV9fLCBwaGFzZSwgI2NvbmQpOyBcCisgICAgYWJvcnQoKTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgIH0KKworc3RhdGljIHZvaWQgQ2hlY2tFcXVhbChjb25zdCBjaGFyKiBleHBlY3RlZCwgY29u
c3QgY2hhciogdiwgc2l6ZV90IG4pIHsKKyAgaWYgKGV4cGVjdGVkID09IE5VTEwgJiYgdiA9PSBO
VUxMKSB7CisgICAgLy8gb2sKKyAgfSBlbHNlIGlmIChleHBlY3RlZCAhPSBOVUxMICYmIHYgIT0g
TlVMTCAmJiBuID09IHN0cmxlbihleHBlY3RlZCkgJiYKKyAgICAgICAgICAgICBtZW1jbXAoZXhw
ZWN0ZWQsIHYsIG4pID09IDApIHsKKyAgICAvLyBvaworICAgIHJldHVybjsKKyAgfSBlbHNlIHsK
KyAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBleHBlY3RlZCAnJXMnLCBnb3QgJyVzJ1xuIiwKKyAg
ICAgICAgICAgIHBoYXNlLAorICAgICAgICAgICAgKGV4cGVjdGVkID8gZXhwZWN0ZWQgOiAiKG51
bGwpIiksCisgICAgICAgICAgICAodiA/IHYgOiAiKG51bGwiKSk7CisgICAgYWJvcnQoKTsKKyAg
fQorfQorCitzdGF0aWMgdm9pZCBGcmVlKGNoYXIqKiBwdHIpIHsKKyAgaWYgKCpwdHIpIHsKKyAg
ICBmcmVlKCpwdHIpOworICAgICpwdHIgPSBOVUxMOworICB9Cit9CisKK3N0YXRpYyB2b2lkIENo
ZWNrR2V0KAorICAgIGxldmVsZGJfdCogZGIsCisgICAgY29uc3QgbGV2ZWxkYl9yZWFkb3B0aW9u
c190KiBvcHRpb25zLAorICAgIGNvbnN0IGNoYXIqIGtleSwKKyAgICBjb25zdCBjaGFyKiBleHBl
Y3RlZCkgeworICBjaGFyKiBlcnIgPSBOVUxMOworICBzaXplX3QgdmFsX2xlbjsKKyAgY2hhciog
dmFsOworICB2YWwgPSBsZXZlbGRiX2dldChkYiwgb3B0aW9ucywga2V5LCBzdHJsZW4oa2V5KSwg
JnZhbF9sZW4sICZlcnIpOworICBDaGVja05vRXJyb3IoZXJyKTsKKyAgQ2hlY2tFcXVhbChleHBl
Y3RlZCwgdmFsLCB2YWxfbGVuKTsKKyAgRnJlZSgmdmFsKTsKK30KKworc3RhdGljIHZvaWQgQ2hl
Y2tJdGVyKGxldmVsZGJfaXRlcmF0b3JfdCogaXRlciwKKyAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyKiBrZXksIGNvbnN0IGNoYXIqIHZhbCkgeworICBzaXplX3QgbGVuOworICBjb25z
dCBjaGFyKiBzdHI7CisgIHN0ciA9IGxldmVsZGJfaXRlcl9rZXkoaXRlciwgJmxlbik7CisgIENo
ZWNrRXF1YWwoa2V5LCBzdHIsIGxlbik7CisgIHN0ciA9IGxldmVsZGJfaXRlcl92YWx1ZShpdGVy
LCAmbGVuKTsKKyAgQ2hlY2tFcXVhbCh2YWwsIHN0ciwgbGVuKTsKK30KKworLy8gQ2FsbGJhY2sg
ZnJvbSBsZXZlbGRiX3dyaXRlYmF0Y2hfaXRlcmF0ZSgpCitzdGF0aWMgdm9pZCBDaGVja1B1dCh2
b2lkKiBwdHIsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBrLCBzaXplX3Qga2xl
biwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHYsIHNpemVfdCB2bGVuKSB7Cisg
IGludCogc3RhdGUgPSAoaW50KikgcHRyOworICBDaGVja0NvbmRpdGlvbigqc3RhdGUgPCAyKTsK
KyAgc3dpdGNoICgqc3RhdGUpIHsKKyAgICBjYXNlIDA6CisgICAgICBDaGVja0VxdWFsKCJiYXIi
LCBrLCBrbGVuKTsKKyAgICAgIENoZWNrRXF1YWwoImIiLCB2LCB2bGVuKTsKKyAgICAgIGJyZWFr
OworICAgIGNhc2UgMToKKyAgICAgIENoZWNrRXF1YWwoImJveCIsIGssIGtsZW4pOworICAgICAg
Q2hlY2tFcXVhbCgiYyIsIHYsIHZsZW4pOworICAgICAgYnJlYWs7CisgIH0KKyAgKCpzdGF0ZSkr
KzsKK30KKworLy8gQ2FsbGJhY2sgZnJvbSBsZXZlbGRiX3dyaXRlYmF0Y2hfaXRlcmF0ZSgpCitz
dGF0aWMgdm9pZCBDaGVja0RlbCh2b2lkKiBwdHIsIGNvbnN0IGNoYXIqIGssIHNpemVfdCBrbGVu
KSB7CisgIGludCogc3RhdGUgPSAoaW50KikgcHRyOworICBDaGVja0NvbmRpdGlvbigqc3RhdGUg
PT0gMik7CisgIENoZWNrRXF1YWwoImJhciIsIGssIGtsZW4pOworICAoKnN0YXRlKSsrOworfQor
CitzdGF0aWMgdm9pZCBDbXBEZXN0cm95KHZvaWQqIGFyZykgeyB9CisKK3N0YXRpYyBpbnQgQ21w
Q29tcGFyZSh2b2lkKiBhcmcsIGNvbnN0IGNoYXIqIGEsIHNpemVfdCBhbGVuLAorICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGIsIHNpemVfdCBibGVuKSB7CisgIGludCBuID0gKGFs
ZW4gPCBibGVuKSA/IGFsZW4gOiBibGVuOworICBpbnQgciA9IG1lbWNtcChhLCBiLCBuKTsKKyAg
aWYgKHIgPT0gMCkgeworICAgIGlmIChhbGVuIDwgYmxlbikgciA9IC0xOworICAgIGVsc2UgaWYg
KGFsZW4gPiBibGVuKSByID0gKzE7CisgIH0KKyAgcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBjb25z
dCBjaGFyKiBDbXBOYW1lKHZvaWQqIGFyZykgeworICByZXR1cm4gImZvbyI7Cit9CisKKy8vIEN1
c3RvbSBmaWx0ZXIgcG9saWN5CitzdGF0aWMgdW5zaWduZWQgY2hhciBmYWtlX2ZpbHRlcl9yZXN1
bHQgPSAxOworc3RhdGljIHZvaWQgRmlsdGVyRGVzdHJveSh2b2lkKiBhcmcpIHsgfQorc3RhdGlj
IGNvbnN0IGNoYXIqIEZpbHRlck5hbWUodm9pZCogYXJnKSB7CisgIHJldHVybiAiVGVzdEZpbHRl
ciI7Cit9CitzdGF0aWMgY2hhciogRmlsdGVyQ3JlYXRlKAorICAgIHZvaWQqIGFyZywKKyAgICBj
b25zdCBjaGFyKiBjb25zdCoga2V5X2FycmF5LCBjb25zdCBzaXplX3QqIGtleV9sZW5ndGhfYXJy
YXksCisgICAgaW50IG51bV9rZXlzLAorICAgIHNpemVfdCogZmlsdGVyX2xlbmd0aCkgeworICAq
ZmlsdGVyX2xlbmd0aCA9IDQ7CisgIGNoYXIqIHJlc3VsdCA9IG1hbGxvYyg0KTsKKyAgbWVtY3B5
KHJlc3VsdCwgImZha2UiLCA0KTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KK3Vuc2lnbmVkIGNoYXIg
RmlsdGVyS2V5TWF0Y2goCisgICAgdm9pZCogYXJnLAorICAgIGNvbnN0IGNoYXIqIGtleSwgc2l6
ZV90IGxlbmd0aCwKKyAgICBjb25zdCBjaGFyKiBmaWx0ZXIsIHNpemVfdCBmaWx0ZXJfbGVuZ3Ro
KSB7CisgIENoZWNrQ29uZGl0aW9uKGZpbHRlcl9sZW5ndGggPT0gNCk7CisgIENoZWNrQ29uZGl0
aW9uKG1lbWNtcChmaWx0ZXIsICJmYWtlIiwgNCkgPT0gMCk7CisgIHJldHVybiBmYWtlX2ZpbHRl
cl9yZXN1bHQ7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikgeworICBsZXZl
bGRiX3QqIGRiOworICBsZXZlbGRiX2NvbXBhcmF0b3JfdCogY21wOworICBsZXZlbGRiX2NhY2hl
X3QqIGNhY2hlOworICBsZXZlbGRiX2Vudl90KiBlbnY7CisgIGxldmVsZGJfb3B0aW9uc190KiBv
cHRpb25zOworICBsZXZlbGRiX3JlYWRvcHRpb25zX3QqIHJvcHRpb25zOworICBsZXZlbGRiX3dy
aXRlb3B0aW9uc190KiB3b3B0aW9uczsKKyAgY2hhciogZXJyID0gTlVMTDsKKyAgaW50IHJ1biA9
IC0xOworCisgIENoZWNrQ29uZGl0aW9uKGxldmVsZGJfbWFqb3JfdmVyc2lvbigpID49IDEpOwor
ICBDaGVja0NvbmRpdGlvbihsZXZlbGRiX21pbm9yX3ZlcnNpb24oKSA+PSAxKTsKKworICBzbnBy
aW50ZihkYm5hbWUsIHNpemVvZihkYm5hbWUpLAorICAgICAgICAgICAiJXMvbGV2ZWxkYl9jX3Rl
c3QtJWQiLAorICAgICAgICAgICBHZXRUZW1wRGlyKCksCisgICAgICAgICAgICgoaW50KSBnZXRl
dWlkKCkpKTsKKworICBTdGFydFBoYXNlKCJjcmVhdGVfb2JqZWN0cyIpOworICBjbXAgPSBsZXZl
bGRiX2NvbXBhcmF0b3JfY3JlYXRlKE5VTEwsIENtcERlc3Ryb3ksIENtcENvbXBhcmUsIENtcE5h
bWUpOworICBlbnYgPSBsZXZlbGRiX2NyZWF0ZV9kZWZhdWx0X2VudigpOworICBjYWNoZSA9IGxl
dmVsZGJfY2FjaGVfY3JlYXRlX2xydSgxMDAwMDApOworCisgIG9wdGlvbnMgPSBsZXZlbGRiX29w
dGlvbnNfY3JlYXRlKCk7CisgIGxldmVsZGJfb3B0aW9uc19zZXRfY29tcGFyYXRvcihvcHRpb25z
LCBjbXApOworICBsZXZlbGRiX29wdGlvbnNfc2V0X2Vycm9yX2lmX2V4aXN0cyhvcHRpb25zLCAx
KTsKKyAgbGV2ZWxkYl9vcHRpb25zX3NldF9jYWNoZShvcHRpb25zLCBjYWNoZSk7CisgIGxldmVs
ZGJfb3B0aW9uc19zZXRfZW52KG9wdGlvbnMsIGVudik7CisgIGxldmVsZGJfb3B0aW9uc19zZXRf
aW5mb19sb2cob3B0aW9ucywgTlVMTCk7CisgIGxldmVsZGJfb3B0aW9uc19zZXRfd3JpdGVfYnVm
ZmVyX3NpemUob3B0aW9ucywgMTAwMDAwKTsKKyAgbGV2ZWxkYl9vcHRpb25zX3NldF9wYXJhbm9p
ZF9jaGVja3Mob3B0aW9ucywgMSk7CisgIGxldmVsZGJfb3B0aW9uc19zZXRfbWF4X29wZW5fZmls
ZXMob3B0aW9ucywgMTApOworICBsZXZlbGRiX29wdGlvbnNfc2V0X2Jsb2NrX3NpemUob3B0aW9u
cywgMTAyNCk7CisgIGxldmVsZGJfb3B0aW9uc19zZXRfYmxvY2tfcmVzdGFydF9pbnRlcnZhbChv
cHRpb25zLCA4KTsKKyAgbGV2ZWxkYl9vcHRpb25zX3NldF9jb21wcmVzc2lvbihvcHRpb25zLCBs
ZXZlbGRiX25vX2NvbXByZXNzaW9uKTsKKworICByb3B0aW9ucyA9IGxldmVsZGJfcmVhZG9wdGlv
bnNfY3JlYXRlKCk7CisgIGxldmVsZGJfcmVhZG9wdGlvbnNfc2V0X3ZlcmlmeV9jaGVja3N1bXMo
cm9wdGlvbnMsIDEpOworICBsZXZlbGRiX3JlYWRvcHRpb25zX3NldF9maWxsX2NhY2hlKHJvcHRp
b25zLCAwKTsKKworICB3b3B0aW9ucyA9IGxldmVsZGJfd3JpdGVvcHRpb25zX2NyZWF0ZSgpOwor
ICBsZXZlbGRiX3dyaXRlb3B0aW9uc19zZXRfc3luYyh3b3B0aW9ucywgMSk7CisKKyAgU3RhcnRQ
aGFzZSgiZGVzdHJveSIpOworICBsZXZlbGRiX2Rlc3Ryb3lfZGIob3B0aW9ucywgZGJuYW1lLCAm
ZXJyKTsKKyAgRnJlZSgmZXJyKTsKKworICBTdGFydFBoYXNlKCJvcGVuX2Vycm9yIik7CisgIGRi
ID0gbGV2ZWxkYl9vcGVuKG9wdGlvbnMsIGRibmFtZSwgJmVycik7CisgIENoZWNrQ29uZGl0aW9u
KGVyciAhPSBOVUxMKTsKKyAgRnJlZSgmZXJyKTsKKworICBTdGFydFBoYXNlKCJsZXZlbGRiX2Zy
ZWUiKTsKKyAgZGIgPSBsZXZlbGRiX29wZW4ob3B0aW9ucywgZGJuYW1lLCAmZXJyKTsKKyAgQ2hl
Y2tDb25kaXRpb24oZXJyICE9IE5VTEwpOworICBsZXZlbGRiX2ZyZWUoZXJyKTsKKyAgZXJyID0g
TlVMTDsKKworICBTdGFydFBoYXNlKCJvcGVuIik7CisgIGxldmVsZGJfb3B0aW9uc19zZXRfY3Jl
YXRlX2lmX21pc3Npbmcob3B0aW9ucywgMSk7CisgIGRiID0gbGV2ZWxkYl9vcGVuKG9wdGlvbnMs
IGRibmFtZSwgJmVycik7CisgIENoZWNrTm9FcnJvcihlcnIpOworICBDaGVja0dldChkYiwgcm9w
dGlvbnMsICJmb28iLCBOVUxMKTsKKworICBTdGFydFBoYXNlKCJwdXQiKTsKKyAgbGV2ZWxkYl9w
dXQoZGIsIHdvcHRpb25zLCAiZm9vIiwgMywgImhlbGxvIiwgNSwgJmVycik7CisgIENoZWNrTm9F
cnJvcihlcnIpOworICBDaGVja0dldChkYiwgcm9wdGlvbnMsICJmb28iLCAiaGVsbG8iKTsKKwor
ICBTdGFydFBoYXNlKCJjb21wYWN0YWxsIik7CisgIGxldmVsZGJfY29tcGFjdF9yYW5nZShkYiwg
TlVMTCwgMCwgTlVMTCwgMCk7CisgIENoZWNrR2V0KGRiLCByb3B0aW9ucywgImZvbyIsICJoZWxs
byIpOworCisgIFN0YXJ0UGhhc2UoImNvbXBhY3RyYW5nZSIpOworICBsZXZlbGRiX2NvbXBhY3Rf
cmFuZ2UoZGIsICJhIiwgMSwgInoiLCAxKTsKKyAgQ2hlY2tHZXQoZGIsIHJvcHRpb25zLCAiZm9v
IiwgImhlbGxvIik7CisKKyAgU3RhcnRQaGFzZSgid3JpdGViYXRjaCIpOworICB7CisgICAgbGV2
ZWxkYl93cml0ZWJhdGNoX3QqIHdiID0gbGV2ZWxkYl93cml0ZWJhdGNoX2NyZWF0ZSgpOworICAg
IGxldmVsZGJfd3JpdGViYXRjaF9wdXQod2IsICJmb28iLCAzLCAiYSIsIDEpOworICAgIGxldmVs
ZGJfd3JpdGViYXRjaF9jbGVhcih3Yik7CisgICAgbGV2ZWxkYl93cml0ZWJhdGNoX3B1dCh3Yiwg
ImJhciIsIDMsICJiIiwgMSk7CisgICAgbGV2ZWxkYl93cml0ZWJhdGNoX3B1dCh3YiwgImJveCIs
IDMsICJjIiwgMSk7CisgICAgbGV2ZWxkYl93cml0ZWJhdGNoX2RlbGV0ZSh3YiwgImJhciIsIDMp
OworICAgIGxldmVsZGJfd3JpdGUoZGIsIHdvcHRpb25zLCB3YiwgJmVycik7CisgICAgQ2hlY2tO
b0Vycm9yKGVycik7CisgICAgQ2hlY2tHZXQoZGIsIHJvcHRpb25zLCAiZm9vIiwgImhlbGxvIik7
CisgICAgQ2hlY2tHZXQoZGIsIHJvcHRpb25zLCAiYmFyIiwgTlVMTCk7CisgICAgQ2hlY2tHZXQo
ZGIsIHJvcHRpb25zLCAiYm94IiwgImMiKTsKKyAgICBpbnQgcG9zID0gMDsKKyAgICBsZXZlbGRi
X3dyaXRlYmF0Y2hfaXRlcmF0ZSh3YiwgJnBvcywgQ2hlY2tQdXQsIENoZWNrRGVsKTsKKyAgICBD
aGVja0NvbmRpdGlvbihwb3MgPT0gMyk7CisgICAgbGV2ZWxkYl93cml0ZWJhdGNoX2Rlc3Ryb3ko
d2IpOworICB9CisKKyAgU3RhcnRQaGFzZSgiaXRlciIpOworICB7CisgICAgbGV2ZWxkYl9pdGVy
YXRvcl90KiBpdGVyID0gbGV2ZWxkYl9jcmVhdGVfaXRlcmF0b3IoZGIsIHJvcHRpb25zKTsKKyAg
ICBDaGVja0NvbmRpdGlvbighbGV2ZWxkYl9pdGVyX3ZhbGlkKGl0ZXIpKTsKKyAgICBsZXZlbGRi
X2l0ZXJfc2Vla190b19maXJzdChpdGVyKTsKKyAgICBDaGVja0NvbmRpdGlvbihsZXZlbGRiX2l0
ZXJfdmFsaWQoaXRlcikpOworICAgIENoZWNrSXRlcihpdGVyLCAiYm94IiwgImMiKTsKKyAgICBs
ZXZlbGRiX2l0ZXJfbmV4dChpdGVyKTsKKyAgICBDaGVja0l0ZXIoaXRlciwgImZvbyIsICJoZWxs
byIpOworICAgIGxldmVsZGJfaXRlcl9wcmV2KGl0ZXIpOworICAgIENoZWNrSXRlcihpdGVyLCAi
Ym94IiwgImMiKTsKKyAgICBsZXZlbGRiX2l0ZXJfcHJldihpdGVyKTsKKyAgICBDaGVja0NvbmRp
dGlvbighbGV2ZWxkYl9pdGVyX3ZhbGlkKGl0ZXIpKTsKKyAgICBsZXZlbGRiX2l0ZXJfc2Vla190
b19sYXN0KGl0ZXIpOworICAgIENoZWNrSXRlcihpdGVyLCAiZm9vIiwgImhlbGxvIik7CisgICAg
bGV2ZWxkYl9pdGVyX3NlZWsoaXRlciwgImIiLCAxKTsKKyAgICBDaGVja0l0ZXIoaXRlciwgImJv
eCIsICJjIik7CisgICAgbGV2ZWxkYl9pdGVyX2dldF9lcnJvcihpdGVyLCAmZXJyKTsKKyAgICBD
aGVja05vRXJyb3IoZXJyKTsKKyAgICBsZXZlbGRiX2l0ZXJfZGVzdHJveShpdGVyKTsKKyAgfQor
CisgIFN0YXJ0UGhhc2UoImFwcHJveGltYXRlX3NpemVzIik7CisgIHsKKyAgICBpbnQgaTsKKyAg
ICBpbnQgbiA9IDIwMDAwOworICAgIGNoYXIga2V5YnVmWzEwMF07CisgICAgY2hhciB2YWxidWZb
MTAwXTsKKyAgICB1aW50NjRfdCBzaXplc1syXTsKKyAgICBjb25zdCBjaGFyKiBzdGFydFsyXSA9
IHsgImEiLCAiazAwMDAwMDAwMDAwMDAwMDEwMDAwIiB9OworICAgIHNpemVfdCBzdGFydF9sZW5b
Ml0gPSB7IDEsIDIxIH07CisgICAgY29uc3QgY2hhciogbGltaXRbMl0gPSB7ICJrMDAwMDAwMDAw
MDAwMDAwMTAwMDAiLCAieiIgfTsKKyAgICBzaXplX3QgbGltaXRfbGVuWzJdID0geyAyMSwgMSB9
OworICAgIGxldmVsZGJfd3JpdGVvcHRpb25zX3NldF9zeW5jKHdvcHRpb25zLCAwKTsKKyAgICBm
b3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgICBzbnByaW50ZihrZXlidWYsIHNpemVvZihr
ZXlidWYpLCAiayUwMjBkIiwgaSk7CisgICAgICBzbnByaW50Zih2YWxidWYsIHNpemVvZih2YWxi
dWYpLCAidiUwMjBkIiwgaSk7CisgICAgICBsZXZlbGRiX3B1dChkYiwgd29wdGlvbnMsIGtleWJ1
Ziwgc3RybGVuKGtleWJ1ZiksIHZhbGJ1Ziwgc3RybGVuKHZhbGJ1ZiksCisgICAgICAgICAgICAg
ICAgICAmZXJyKTsKKyAgICAgIENoZWNrTm9FcnJvcihlcnIpOworICAgIH0KKyAgICBsZXZlbGRi
X2FwcHJveGltYXRlX3NpemVzKGRiLCAyLCBzdGFydCwgc3RhcnRfbGVuLCBsaW1pdCwgbGltaXRf
bGVuLCBzaXplcyk7CisgICAgQ2hlY2tDb25kaXRpb24oc2l6ZXNbMF0gPiAwKTsKKyAgICBDaGVj
a0NvbmRpdGlvbihzaXplc1sxXSA+IDApOworICB9CisKKyAgU3RhcnRQaGFzZSgicHJvcGVydHki
KTsKKyAgeworICAgIGNoYXIqIHByb3AgPSBsZXZlbGRiX3Byb3BlcnR5X3ZhbHVlKGRiLCAibm9z
dWNocHJvcCIpOworICAgIENoZWNrQ29uZGl0aW9uKHByb3AgPT0gTlVMTCk7CisgICAgcHJvcCA9
IGxldmVsZGJfcHJvcGVydHlfdmFsdWUoZGIsICJsZXZlbGRiLnN0YXRzIik7CisgICAgQ2hlY2tD
b25kaXRpb24ocHJvcCAhPSBOVUxMKTsKKyAgICBGcmVlKCZwcm9wKTsKKyAgfQorCisgIFN0YXJ0
UGhhc2UoInNuYXBzaG90Iik7CisgIHsKKyAgICBjb25zdCBsZXZlbGRiX3NuYXBzaG90X3QqIHNu
YXA7CisgICAgc25hcCA9IGxldmVsZGJfY3JlYXRlX3NuYXBzaG90KGRiKTsKKyAgICBsZXZlbGRi
X2RlbGV0ZShkYiwgd29wdGlvbnMsICJmb28iLCAzLCAmZXJyKTsKKyAgICBDaGVja05vRXJyb3Io
ZXJyKTsKKyAgICBsZXZlbGRiX3JlYWRvcHRpb25zX3NldF9zbmFwc2hvdChyb3B0aW9ucywgc25h
cCk7CisgICAgQ2hlY2tHZXQoZGIsIHJvcHRpb25zLCAiZm9vIiwgImhlbGxvIik7CisgICAgbGV2
ZWxkYl9yZWFkb3B0aW9uc19zZXRfc25hcHNob3Qocm9wdGlvbnMsIE5VTEwpOworICAgIENoZWNr
R2V0KGRiLCByb3B0aW9ucywgImZvbyIsIE5VTEwpOworICAgIGxldmVsZGJfcmVsZWFzZV9zbmFw
c2hvdChkYiwgc25hcCk7CisgIH0KKworICBTdGFydFBoYXNlKCJyZXBhaXIiKTsKKyAgeworICAg
IGxldmVsZGJfY2xvc2UoZGIpOworICAgIGxldmVsZGJfb3B0aW9uc19zZXRfY3JlYXRlX2lmX21p
c3Npbmcob3B0aW9ucywgMCk7CisgICAgbGV2ZWxkYl9vcHRpb25zX3NldF9lcnJvcl9pZl9leGlz
dHMob3B0aW9ucywgMCk7CisgICAgbGV2ZWxkYl9yZXBhaXJfZGIob3B0aW9ucywgZGJuYW1lLCAm
ZXJyKTsKKyAgICBDaGVja05vRXJyb3IoZXJyKTsKKyAgICBkYiA9IGxldmVsZGJfb3BlbihvcHRp
b25zLCBkYm5hbWUsICZlcnIpOworICAgIENoZWNrTm9FcnJvcihlcnIpOworICAgIENoZWNrR2V0
KGRiLCByb3B0aW9ucywgImZvbyIsIE5VTEwpOworICAgIENoZWNrR2V0KGRiLCByb3B0aW9ucywg
ImJhciIsIE5VTEwpOworICAgIENoZWNrR2V0KGRiLCByb3B0aW9ucywgImJveCIsICJjIik7Cisg
ICAgbGV2ZWxkYl9vcHRpb25zX3NldF9jcmVhdGVfaWZfbWlzc2luZyhvcHRpb25zLCAxKTsKKyAg
ICBsZXZlbGRiX29wdGlvbnNfc2V0X2Vycm9yX2lmX2V4aXN0cyhvcHRpb25zLCAxKTsKKyAgfQor
CisgIFN0YXJ0UGhhc2UoImZpbHRlciIpOworICBmb3IgKHJ1biA9IDA7IHJ1biA8IDI7IHJ1bisr
KSB7CisgICAgLy8gRmlyc3QgcnVuIHVzZXMgY3VzdG9tIGZpbHRlciwgc2Vjb25kIHJ1biB1c2Vz
IGJsb29tIGZpbHRlcgorICAgIENoZWNrTm9FcnJvcihlcnIpOworICAgIGxldmVsZGJfZmlsdGVy
cG9saWN5X3QqIHBvbGljeTsKKyAgICBpZiAocnVuID09IDApIHsKKyAgICAgIHBvbGljeSA9IGxl
dmVsZGJfZmlsdGVycG9saWN5X2NyZWF0ZSgKKyAgICAgICAgICBOVUxMLCBGaWx0ZXJEZXN0cm95
LCBGaWx0ZXJDcmVhdGUsIEZpbHRlcktleU1hdGNoLCBGaWx0ZXJOYW1lKTsKKyAgICB9IGVsc2Ug
eworICAgICAgcG9saWN5ID0gbGV2ZWxkYl9maWx0ZXJwb2xpY3lfY3JlYXRlX2Jsb29tKDEwKTsK
KyAgICB9CisKKyAgICAvLyBDcmVhdGUgbmV3IGRhdGFiYXNlCisgICAgbGV2ZWxkYl9jbG9zZShk
Yik7CisgICAgbGV2ZWxkYl9kZXN0cm95X2RiKG9wdGlvbnMsIGRibmFtZSwgJmVycik7CisgICAg
bGV2ZWxkYl9vcHRpb25zX3NldF9maWx0ZXJfcG9saWN5KG9wdGlvbnMsIHBvbGljeSk7CisgICAg
ZGIgPSBsZXZlbGRiX29wZW4ob3B0aW9ucywgZGJuYW1lLCAmZXJyKTsKKyAgICBDaGVja05vRXJy
b3IoZXJyKTsKKyAgICBsZXZlbGRiX3B1dChkYiwgd29wdGlvbnMsICJmb28iLCAzLCAiZm9vdmFs
dWUiLCA4LCAmZXJyKTsKKyAgICBDaGVja05vRXJyb3IoZXJyKTsKKyAgICBsZXZlbGRiX3B1dChk
Yiwgd29wdGlvbnMsICJiYXIiLCAzLCAiYmFydmFsdWUiLCA4LCAmZXJyKTsKKyAgICBDaGVja05v
RXJyb3IoZXJyKTsKKyAgICBsZXZlbGRiX2NvbXBhY3RfcmFuZ2UoZGIsIE5VTEwsIDAsIE5VTEws
IDApOworCisgICAgZmFrZV9maWx0ZXJfcmVzdWx0ID0gMTsKKyAgICBDaGVja0dldChkYiwgcm9w
dGlvbnMsICJmb28iLCAiZm9vdmFsdWUiKTsKKyAgICBDaGVja0dldChkYiwgcm9wdGlvbnMsICJi
YXIiLCAiYmFydmFsdWUiKTsKKyAgICBpZiAocGhhc2UgPT0gMCkgeworICAgICAgLy8gTXVzdCBu
b3QgZmluZCB2YWx1ZSB3aGVuIGN1c3RvbSBmaWx0ZXIgcmV0dXJucyBmYWxzZQorICAgICAgZmFr
ZV9maWx0ZXJfcmVzdWx0ID0gMDsKKyAgICAgIENoZWNrR2V0KGRiLCByb3B0aW9ucywgImZvbyIs
IE5VTEwpOworICAgICAgQ2hlY2tHZXQoZGIsIHJvcHRpb25zLCAiYmFyIiwgTlVMTCk7CisgICAg
ICBmYWtlX2ZpbHRlcl9yZXN1bHQgPSAxOworCisgICAgICBDaGVja0dldChkYiwgcm9wdGlvbnMs
ICJmb28iLCAiZm9vdmFsdWUiKTsKKyAgICAgIENoZWNrR2V0KGRiLCByb3B0aW9ucywgImJhciIs
ICJiYXJ2YWx1ZSIpOworICAgIH0KKyAgICBsZXZlbGRiX29wdGlvbnNfc2V0X2ZpbHRlcl9wb2xp
Y3kob3B0aW9ucywgTlVMTCk7CisgICAgbGV2ZWxkYl9maWx0ZXJwb2xpY3lfZGVzdHJveShwb2xp
Y3kpOworICB9CisKKyAgU3RhcnRQaGFzZSgiY2xlYW51cCIpOworICBsZXZlbGRiX2Nsb3NlKGRi
KTsKKyAgbGV2ZWxkYl9vcHRpb25zX2Rlc3Ryb3kob3B0aW9ucyk7CisgIGxldmVsZGJfcmVhZG9w
dGlvbnNfZGVzdHJveShyb3B0aW9ucyk7CisgIGxldmVsZGJfd3JpdGVvcHRpb25zX2Rlc3Ryb3ko
d29wdGlvbnMpOworICBsZXZlbGRiX2NhY2hlX2Rlc3Ryb3koY2FjaGUpOworICBsZXZlbGRiX2Nv
bXBhcmF0b3JfZGVzdHJveShjbXApOworICBsZXZlbGRiX2Vudl9kZXN0cm95KGVudik7CisKKyAg
ZnByaW50ZihzdGRlcnIsICJQQVNTXG4iKTsKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2NvcnJ1cHRpb25fdGVzdC5jYyBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xldmVsZGIvZGIvY29ycnVwdGlvbl90ZXN0LmNjCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMxYjJk
NWY0MTY2YmMyMDAxMjJjMTc3M2IxYTNlN2ZkY2ZmN2M2NDAKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2NvcnJ1cHRpb25fdGVzdC5jYwpAQCAtMCwwICsx
LDM1OSBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgor
CisjaW5jbHVkZSAibGV2ZWxkYi9kYi5oIgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRl
IDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+
CisjaW5jbHVkZSAibGV2ZWxkYi9jYWNoZS5oIgorI2luY2x1ZGUgImxldmVsZGIvZW52LmgiCisj
aW5jbHVkZSAibGV2ZWxkYi90YWJsZS5oIgorI2luY2x1ZGUgImxldmVsZGIvd3JpdGVfYmF0Y2gu
aCIKKyNpbmNsdWRlICJkYi9kYl9pbXBsLmgiCisjaW5jbHVkZSAiZGIvZmlsZW5hbWUuaCIKKyNp
bmNsdWRlICJkYi9sb2dfZm9ybWF0LmgiCisjaW5jbHVkZSAiZGIvdmVyc2lvbl9zZXQuaCIKKyNp
bmNsdWRlICJ1dGlsL2xvZ2dpbmcuaCIKKyNpbmNsdWRlICJ1dGlsL3Rlc3RoYXJuZXNzLmgiCisj
aW5jbHVkZSAidXRpbC90ZXN0dXRpbC5oIgorCituYW1lc3BhY2UgbGV2ZWxkYiB7CisKK3N0YXRp
YyBjb25zdCBpbnQga1ZhbHVlU2l6ZSA9IDEwMDA7CisKK2NsYXNzIENvcnJ1cHRpb25UZXN0IHsK
KyBwdWJsaWM6CisgIHRlc3Q6OkVycm9yRW52IGVudl87CisgIHN0ZDo6c3RyaW5nIGRibmFtZV87
CisgIENhY2hlKiB0aW55X2NhY2hlXzsKKyAgT3B0aW9ucyBvcHRpb25zXzsKKyAgREIqIGRiXzsK
KworICBDb3JydXB0aW9uVGVzdCgpIHsKKyAgICB0aW55X2NhY2hlXyA9IE5ld0xSVUNhY2hlKDEw
MCk7CisgICAgb3B0aW9uc18uZW52ID0gJmVudl87CisgICAgZGJuYW1lXyA9IHRlc3Q6OlRtcERp
cigpICsgIi9kYl90ZXN0IjsKKyAgICBEZXN0cm95REIoZGJuYW1lXywgb3B0aW9uc18pOworCisg
ICAgZGJfID0gTlVMTDsKKyAgICBvcHRpb25zXy5jcmVhdGVfaWZfbWlzc2luZyA9IHRydWU7Cisg
ICAgUmVvcGVuKCk7CisgICAgb3B0aW9uc18uY3JlYXRlX2lmX21pc3NpbmcgPSBmYWxzZTsKKyAg
fQorCisgIH5Db3JydXB0aW9uVGVzdCgpIHsKKyAgICAgZGVsZXRlIGRiXzsKKyAgICAgRGVzdHJv
eURCKGRibmFtZV8sIE9wdGlvbnMoKSk7CisgICAgIGRlbGV0ZSB0aW55X2NhY2hlXzsKKyAgfQor
CisgIFN0YXR1cyBUcnlSZW9wZW4oT3B0aW9ucyogb3B0aW9ucyA9IE5VTEwpIHsKKyAgICBkZWxl
dGUgZGJfOworICAgIGRiXyA9IE5VTEw7CisgICAgT3B0aW9ucyBvcHQgPSAob3B0aW9ucyA/ICpv
cHRpb25zIDogb3B0aW9uc18pOworICAgIG9wdC5lbnYgPSAmZW52XzsKKyAgICBvcHQuYmxvY2tf
Y2FjaGUgPSB0aW55X2NhY2hlXzsKKyAgICByZXR1cm4gREI6Ok9wZW4ob3B0LCBkYm5hbWVfLCAm
ZGJfKTsKKyAgfQorCisgIHZvaWQgUmVvcGVuKE9wdGlvbnMqIG9wdGlvbnMgPSBOVUxMKSB7Cisg
ICAgQVNTRVJUX09LKFRyeVJlb3BlbihvcHRpb25zKSk7CisgIH0KKworICB2b2lkIFJlcGFpckRC
KCkgeworICAgIGRlbGV0ZSBkYl87CisgICAgZGJfID0gTlVMTDsKKyAgICBBU1NFUlRfT0soOjps
ZXZlbGRiOjpSZXBhaXJEQihkYm5hbWVfLCBvcHRpb25zXykpOworICB9CisKKyAgdm9pZCBCdWls
ZChpbnQgbikgeworICAgIHN0ZDo6c3RyaW5nIGtleV9zcGFjZSwgdmFsdWVfc3BhY2U7CisgICAg
V3JpdGVCYXRjaCBiYXRjaDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgeworICAg
ICAgLy9pZiAoKGkgJSAxMDApID09IDApIGZwcmludGYoc3RkZXJyLCAiQCAlZCBvZiAlZFxuIiwg
aSwgbik7CisgICAgICBTbGljZSBrZXkgPSBLZXkoaSwgJmtleV9zcGFjZSk7CisgICAgICBiYXRj
aC5DbGVhcigpOworICAgICAgYmF0Y2guUHV0KGtleSwgVmFsdWUoaSwgJnZhbHVlX3NwYWNlKSk7
CisgICAgICBBU1NFUlRfT0soZGJfLT5Xcml0ZShXcml0ZU9wdGlvbnMoKSwgJmJhdGNoKSk7Cisg
ICAgfQorICB9CisKKyAgdm9pZCBDaGVjayhpbnQgbWluX2V4cGVjdGVkLCBpbnQgbWF4X2V4cGVj
dGVkKSB7CisgICAgaW50IG5leHRfZXhwZWN0ZWQgPSAwOworICAgIGludCBtaXNzZWQgPSAwOwor
ICAgIGludCBiYWRfa2V5cyA9IDA7CisgICAgaW50IGJhZF92YWx1ZXMgPSAwOworICAgIGludCBj
b3JyZWN0ID0gMDsKKyAgICBzdGQ6OnN0cmluZyB2YWx1ZV9zcGFjZTsKKyAgICBJdGVyYXRvciog
aXRlciA9IGRiXy0+TmV3SXRlcmF0b3IoUmVhZE9wdGlvbnMoKSk7CisgICAgZm9yIChpdGVyLT5T
ZWVrVG9GaXJzdCgpOyBpdGVyLT5WYWxpZCgpOyBpdGVyLT5OZXh0KCkpIHsKKyAgICAgIHVpbnQ2
NF90IGtleTsKKyAgICAgIFNsaWNlIGluKGl0ZXItPmtleSgpKTsKKyAgICAgIGlmICghQ29uc3Vt
ZURlY2ltYWxOdW1iZXIoJmluLCAma2V5KSB8fAorICAgICAgICAgICFpbi5lbXB0eSgpIHx8Cisg
ICAgICAgICAga2V5IDwgbmV4dF9leHBlY3RlZCkgeworICAgICAgICBiYWRfa2V5cysrOworICAg
ICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICAgIG1pc3NlZCArPSAoa2V5IC0gbmV4dF9leHBl
Y3RlZCk7CisgICAgICBuZXh0X2V4cGVjdGVkID0ga2V5ICsgMTsKKyAgICAgIGlmIChpdGVyLT52
YWx1ZSgpICE9IFZhbHVlKGtleSwgJnZhbHVlX3NwYWNlKSkgeworICAgICAgICBiYWRfdmFsdWVz
Kys7CisgICAgICB9IGVsc2UgeworICAgICAgICBjb3JyZWN0Kys7CisgICAgICB9CisgICAgfQor
ICAgIGRlbGV0ZSBpdGVyOworCisgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAiZXhw
ZWN0ZWQ9JWQuLiVkOyBnb3Q9JWQ7IGJhZF9rZXlzPSVkOyBiYWRfdmFsdWVzPSVkOyBtaXNzZWQ9
JWRcbiIsCisgICAgICAgICAgICBtaW5fZXhwZWN0ZWQsIG1heF9leHBlY3RlZCwgY29ycmVjdCwg
YmFkX2tleXMsIGJhZF92YWx1ZXMsIG1pc3NlZCk7CisgICAgQVNTRVJUX0xFKG1pbl9leHBlY3Rl
ZCwgY29ycmVjdCk7CisgICAgQVNTRVJUX0dFKG1heF9leHBlY3RlZCwgY29ycmVjdCk7CisgIH0K
KworICB2b2lkIENvcnJ1cHQoRmlsZVR5cGUgZmlsZXR5cGUsIGludCBvZmZzZXQsIGludCBieXRl
c190b19jb3JydXB0KSB7CisgICAgLy8gUGljayBmaWxlIHRvIGNvcnJ1cHQKKyAgICBzdGQ6OnZl
Y3RvcjxzdGQ6OnN0cmluZz4gZmlsZW5hbWVzOworICAgIEFTU0VSVF9PSyhlbnZfLkdldENoaWxk
cmVuKGRibmFtZV8sICZmaWxlbmFtZXMpKTsKKyAgICB1aW50NjRfdCBudW1iZXI7CisgICAgRmls
ZVR5cGUgdHlwZTsKKyAgICBzdGQ6OnN0cmluZyBmbmFtZTsKKyAgICBpbnQgcGlja2VkX251bWJl
ciA9IC0xOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZW5hbWVzLnNpemUoKTsgaSsrKSB7
CisgICAgICBpZiAoUGFyc2VGaWxlTmFtZShmaWxlbmFtZXNbaV0sICZudW1iZXIsICZ0eXBlKSAm
JgorICAgICAgICAgIHR5cGUgPT0gZmlsZXR5cGUgJiYKKyAgICAgICAgICBpbnQobnVtYmVyKSA+
IHBpY2tlZF9udW1iZXIpIHsgIC8vIFBpY2sgbGF0ZXN0IGZpbGUKKyAgICAgICAgZm5hbWUgPSBk
Ym5hbWVfICsgIi8iICsgZmlsZW5hbWVzW2ldOworICAgICAgICBwaWNrZWRfbnVtYmVyID0gbnVt
YmVyOworICAgICAgfQorICAgIH0KKyAgICBBU1NFUlRfVFJVRSghZm5hbWUuZW1wdHkoKSkgPDwg
ZmlsZXR5cGU7CisKKyAgICBzdHJ1Y3Qgc3RhdCBzYnVmOworICAgIGlmIChzdGF0KGZuYW1lLmNf
c3RyKCksICZzYnVmKSAhPSAwKSB7CisgICAgICBjb25zdCBjaGFyKiBtc2cgPSBzdHJlcnJvcihl
cnJubyk7CisgICAgICBBU1NFUlRfVFJVRShmYWxzZSkgPDwgZm5hbWUgPDwgIjogIiA8PCBtc2c7
CisgICAgfQorCisgICAgaWYgKG9mZnNldCA8IDApIHsKKyAgICAgIC8vIFJlbGF0aXZlIHRvIGVu
ZCBvZiBmaWxlOyBtYWtlIGl0IGFic29sdXRlCisgICAgICBpZiAoLW9mZnNldCA+IHNidWYuc3Rf
c2l6ZSkgeworICAgICAgICBvZmZzZXQgPSAwOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgb2Zm
c2V0ID0gc2J1Zi5zdF9zaXplICsgb2Zmc2V0OworICAgICAgfQorICAgIH0KKyAgICBpZiAob2Zm
c2V0ID4gc2J1Zi5zdF9zaXplKSB7CisgICAgICBvZmZzZXQgPSBzYnVmLnN0X3NpemU7CisgICAg
fQorICAgIGlmIChvZmZzZXQgKyBieXRlc190b19jb3JydXB0ID4gc2J1Zi5zdF9zaXplKSB7Cisg
ICAgICBieXRlc190b19jb3JydXB0ID0gc2J1Zi5zdF9zaXplIC0gb2Zmc2V0OworICAgIH0KKwor
ICAgIC8vIERvIGl0CisgICAgc3RkOjpzdHJpbmcgY29udGVudHM7CisgICAgU3RhdHVzIHMgPSBS
ZWFkRmlsZVRvU3RyaW5nKEVudjo6RGVmYXVsdCgpLCBmbmFtZSwgJmNvbnRlbnRzKTsKKyAgICBB
U1NFUlRfVFJVRShzLm9rKCkpIDw8IHMuVG9TdHJpbmcoKTsKKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IGJ5dGVzX3RvX2NvcnJ1cHQ7IGkrKykgeworICAgICAgY29udGVudHNbaSArIG9mZnNldF0g
Xj0gMHg4MDsKKyAgICB9CisgICAgcyA9IFdyaXRlU3RyaW5nVG9GaWxlKEVudjo6RGVmYXVsdCgp
LCBjb250ZW50cywgZm5hbWUpOworICAgIEFTU0VSVF9UUlVFKHMub2soKSkgPDwgcy5Ub1N0cmlu
ZygpOworICB9CisKKyAgaW50IFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKSB7Cisg
ICAgc3RkOjpzdHJpbmcgcHJvcGVydHk7CisgICAgaW50IHJlc3VsdDsKKyAgICBpZiAoZGJfLT5H
ZXRQcm9wZXJ0eShuYW1lLCAmcHJvcGVydHkpICYmCisgICAgICAgIHNzY2FuZihwcm9wZXJ0eS5j
X3N0cigpLCAiJWQiLCAmcmVzdWx0KSA9PSAxKSB7CisgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0gZWxzZSB7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorICB9CisKKyAgLy8gUmV0dXJuIHRo
ZSBpdGgga2V5CisgIFNsaWNlIEtleShpbnQgaSwgc3RkOjpzdHJpbmcqIHN0b3JhZ2UpIHsKKyAg
ICBjaGFyIGJ1ZlsxMDBdOworICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlMDE2ZCIs
IGkpOworICAgIHN0b3JhZ2UtPmFzc2lnbihidWYsIHN0cmxlbihidWYpKTsKKyAgICByZXR1cm4g
U2xpY2UoKnN0b3JhZ2UpOworICB9CisKKyAgLy8gUmV0dXJuIHRoZSB2YWx1ZSB0byBhc3NvY2lh
dGUgd2l0aCB0aGUgc3BlY2lmaWVkIGtleQorICBTbGljZSBWYWx1ZShpbnQgaywgc3RkOjpzdHJp
bmcqIHN0b3JhZ2UpIHsKKyAgICBSYW5kb20gcihrKTsKKyAgICByZXR1cm4gdGVzdDo6UmFuZG9t
U3RyaW5nKCZyLCBrVmFsdWVTaXplLCBzdG9yYWdlKTsKKyAgfQorfTsKKworVEVTVChDb3JydXB0
aW9uVGVzdCwgUmVjb3ZlcnkpIHsKKyAgQnVpbGQoMTAwKTsKKyAgQ2hlY2soMTAwLCAxMDApOwor
ICBDb3JydXB0KGtMb2dGaWxlLCAxOSwgMSk7ICAgICAgLy8gV3JpdGVCYXRjaCB0YWcgZm9yIGZp
cnN0IHJlY29yZAorICBDb3JydXB0KGtMb2dGaWxlLCBsb2c6OmtCbG9ja1NpemUgKyAxMDAwLCAx
KTsgIC8vIFNvbWV3aGVyZSBpbiBzZWNvbmQgYmxvY2sKKyAgUmVvcGVuKCk7CisKKyAgLy8gVGhl
IDY0IHJlY29yZHMgaW4gdGhlIGZpcnN0IHR3byBsb2cgYmxvY2tzIGFyZSBjb21wbGV0ZWx5IGxv
c3QuCisgIENoZWNrKDM2LCAzNik7Cit9CisKK1RFU1QoQ29ycnVwdGlvblRlc3QsIFJlY292ZXJX
cml0ZUVycm9yKSB7CisgIGVudl8ud3JpdGFibGVfZmlsZV9lcnJvcl8gPSB0cnVlOworICBTdGF0
dXMgcyA9IFRyeVJlb3BlbigpOworICBBU1NFUlRfVFJVRSghcy5vaygpKTsKK30KKworVEVTVChD
b3JydXB0aW9uVGVzdCwgTmV3RmlsZUVycm9yRHVyaW5nV3JpdGUpIHsKKyAgLy8gRG8gZW5vdWdo
IHdyaXRpbmcgdG8gZm9yY2UgbWlub3IgY29tcGFjdGlvbgorICBlbnZfLndyaXRhYmxlX2ZpbGVf
ZXJyb3JfID0gdHJ1ZTsKKyAgY29uc3QgaW50IG51bSA9IDMgKyAoT3B0aW9ucygpLndyaXRlX2J1
ZmZlcl9zaXplIC8ga1ZhbHVlU2l6ZSk7CisgIHN0ZDo6c3RyaW5nIHZhbHVlX3N0b3JhZ2U7Cisg
IFN0YXR1cyBzOworICBmb3IgKGludCBpID0gMDsgcy5vaygpICYmIGkgPCBudW07IGkrKykgewor
ICAgIFdyaXRlQmF0Y2ggYmF0Y2g7CisgICAgYmF0Y2guUHV0KCJhIiwgVmFsdWUoMTAwLCAmdmFs
dWVfc3RvcmFnZSkpOworICAgIHMgPSBkYl8tPldyaXRlKFdyaXRlT3B0aW9ucygpLCAmYmF0Y2gp
OworICB9CisgIEFTU0VSVF9UUlVFKCFzLm9rKCkpOworICBBU1NFUlRfR0UoZW52Xy5udW1fd3Jp
dGFibGVfZmlsZV9lcnJvcnNfLCAxKTsKKyAgZW52Xy53cml0YWJsZV9maWxlX2Vycm9yXyA9IGZh
bHNlOworICBSZW9wZW4oKTsKK30KKworVEVTVChDb3JydXB0aW9uVGVzdCwgVGFibGVGaWxlKSB7
CisgIEJ1aWxkKDEwMCk7CisgIERCSW1wbCogZGJpID0gcmVpbnRlcnByZXRfY2FzdDxEQkltcGwq
PihkYl8pOworICBkYmktPlRFU1RfQ29tcGFjdE1lbVRhYmxlKCk7CisgIGRiaS0+VEVTVF9Db21w
YWN0UmFuZ2UoMCwgTlVMTCwgTlVMTCk7CisgIGRiaS0+VEVTVF9Db21wYWN0UmFuZ2UoMSwgTlVM
TCwgTlVMTCk7CisKKyAgQ29ycnVwdChrVGFibGVGaWxlLCAxMDAsIDEpOworICBDaGVjayg5OSwg
OTkpOworfQorCitURVNUKENvcnJ1cHRpb25UZXN0LCBUYWJsZUZpbGVJbmRleERhdGEpIHsKKyAg
QnVpbGQoMTAwMDApOyAgLy8gRW5vdWdoIHRvIGJ1aWxkIG11bHRpcGxlIFRhYmxlcworICBEQklt
cGwqIGRiaSA9IHJlaW50ZXJwcmV0X2Nhc3Q8REJJbXBsKj4oZGJfKTsKKyAgZGJpLT5URVNUX0Nv
bXBhY3RNZW1UYWJsZSgpOworCisgIENvcnJ1cHQoa1RhYmxlRmlsZSwgLTIwMDAsIDUwMCk7Cisg
IFJlb3BlbigpOworICBDaGVjayg1MDAwLCA5OTk5KTsKK30KKworVEVTVChDb3JydXB0aW9uVGVz
dCwgTWlzc2luZ0Rlc2NyaXB0b3IpIHsKKyAgQnVpbGQoMTAwMCk7CisgIFJlcGFpckRCKCk7Cisg
IFJlb3BlbigpOworICBDaGVjaygxMDAwLCAxMDAwKTsKK30KKworVEVTVChDb3JydXB0aW9uVGVz
dCwgU2VxdWVuY2VOdW1iZXJSZWNvdmVyeSkgeworICBBU1NFUlRfT0soZGJfLT5QdXQoV3JpdGVP
cHRpb25zKCksICJmb28iLCAidjEiKSk7CisgIEFTU0VSVF9PSyhkYl8tPlB1dChXcml0ZU9wdGlv
bnMoKSwgImZvbyIsICJ2MiIpKTsKKyAgQVNTRVJUX09LKGRiXy0+UHV0KFdyaXRlT3B0aW9ucygp
LCAiZm9vIiwgInYzIikpOworICBBU1NFUlRfT0soZGJfLT5QdXQoV3JpdGVPcHRpb25zKCksICJm
b28iLCAidjQiKSk7CisgIEFTU0VSVF9PSyhkYl8tPlB1dChXcml0ZU9wdGlvbnMoKSwgImZvbyIs
ICJ2NSIpKTsKKyAgUmVwYWlyREIoKTsKKyAgUmVvcGVuKCk7CisgIHN0ZDo6c3RyaW5nIHY7Cisg
IEFTU0VSVF9PSyhkYl8tPkdldChSZWFkT3B0aW9ucygpLCAiZm9vIiwgJnYpKTsKKyAgQVNTRVJU
X0VRKCJ2NSIsIHYpOworICAvLyBXcml0ZSBzb21ldGhpbmcuICBJZiBzZXF1ZW5jZSBudW1iZXIg
d2FzIG5vdCByZWNvdmVyZWQgcHJvcGVybHksCisgIC8vIGl0IHdpbGwgYmUgaGlkZGVuIGJ5IGFu
IGVhcmxpZXIgd3JpdGUuCisgIEFTU0VSVF9PSyhkYl8tPlB1dChXcml0ZU9wdGlvbnMoKSwgImZv
byIsICJ2NiIpKTsKKyAgQVNTRVJUX09LKGRiXy0+R2V0KFJlYWRPcHRpb25zKCksICJmb28iLCAm
dikpOworICBBU1NFUlRfRVEoInY2Iiwgdik7CisgIFJlb3BlbigpOworICBBU1NFUlRfT0soZGJf
LT5HZXQoUmVhZE9wdGlvbnMoKSwgImZvbyIsICZ2KSk7CisgIEFTU0VSVF9FUSgidjYiLCB2KTsK
K30KKworVEVTVChDb3JydXB0aW9uVGVzdCwgQ29ycnVwdGVkRGVzY3JpcHRvcikgeworICBBU1NF
UlRfT0soZGJfLT5QdXQoV3JpdGVPcHRpb25zKCksICJmb28iLCAiaGVsbG8iKSk7CisgIERCSW1w
bCogZGJpID0gcmVpbnRlcnByZXRfY2FzdDxEQkltcGwqPihkYl8pOworICBkYmktPlRFU1RfQ29t
cGFjdE1lbVRhYmxlKCk7CisgIGRiaS0+VEVTVF9Db21wYWN0UmFuZ2UoMCwgTlVMTCwgTlVMTCk7
CisKKyAgQ29ycnVwdChrRGVzY3JpcHRvckZpbGUsIDAsIDEwMDApOworICBTdGF0dXMgcyA9IFRy
eVJlb3BlbigpOworICBBU1NFUlRfVFJVRSghcy5vaygpKTsKKworICBSZXBhaXJEQigpOworICBS
ZW9wZW4oKTsKKyAgc3RkOjpzdHJpbmcgdjsKKyAgQVNTRVJUX09LKGRiXy0+R2V0KFJlYWRPcHRp
b25zKCksICJmb28iLCAmdikpOworICBBU1NFUlRfRVEoImhlbGxvIiwgdik7Cit9CisKK1RFU1Qo
Q29ycnVwdGlvblRlc3QsIENvbXBhY3Rpb25JbnB1dEVycm9yKSB7CisgIEJ1aWxkKDEwKTsKKyAg
REJJbXBsKiBkYmkgPSByZWludGVycHJldF9jYXN0PERCSW1wbCo+KGRiXyk7CisgIGRiaS0+VEVT
VF9Db21wYWN0TWVtVGFibGUoKTsKKyAgY29uc3QgaW50IGxhc3QgPSBjb25maWc6OmtNYXhNZW1D
b21wYWN0TGV2ZWw7CisgIEFTU0VSVF9FUSgxLCBQcm9wZXJ0eSgibGV2ZWxkYi5udW0tZmlsZXMt
YXQtbGV2ZWwiICsgTnVtYmVyVG9TdHJpbmcobGFzdCkpKTsKKworICBDb3JydXB0KGtUYWJsZUZp
bGUsIDEwMCwgMSk7CisgIENoZWNrKDksIDkpOworCisgIC8vIEZvcmNlIGNvbXBhY3Rpb25zIGJ5
IHdyaXRpbmcgbG90cyBvZiB2YWx1ZXMKKyAgQnVpbGQoMTAwMDApOworICBDaGVjaygxMDAwMCwg
MTAwMDApOworfQorCitURVNUKENvcnJ1cHRpb25UZXN0LCBDb21wYWN0aW9uSW5wdXRFcnJvclBh
cmFub2lkKSB7CisgIE9wdGlvbnMgb3B0aW9uczsKKyAgb3B0aW9ucy5wYXJhbm9pZF9jaGVja3Mg
PSB0cnVlOworICBvcHRpb25zLndyaXRlX2J1ZmZlcl9zaXplID0gMTA0ODU3NjsKKyAgUmVvcGVu
KCZvcHRpb25zKTsKKyAgREJJbXBsKiBkYmkgPSByZWludGVycHJldF9jYXN0PERCSW1wbCo+KGRi
Xyk7CisKKyAgLy8gRmlsbCBsZXZlbHMgPj0gMSBzbyBtZW10YWJsZSBjb21wYWN0aW9uIG91dHB1
dHMgdG8gbGV2ZWwgMQorICBmb3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDwgY29uZmlnOjprTnVt
TGV2ZWxzOyBsZXZlbCsrKSB7CisgICAgZGJpLT5QdXQoV3JpdGVPcHRpb25zKCksICIiLCAiYmVn
aW4iKTsKKyAgICBkYmktPlB1dChXcml0ZU9wdGlvbnMoKSwgIn4iLCAiZW5kIik7CisgICAgZGJp
LT5URVNUX0NvbXBhY3RNZW1UYWJsZSgpOworICB9CisKKyAgQnVpbGQoMTApOworICBkYmktPlRF
U1RfQ29tcGFjdE1lbVRhYmxlKCk7CisgIEFTU0VSVF9FUSgxLCBQcm9wZXJ0eSgibGV2ZWxkYi5u
dW0tZmlsZXMtYXQtbGV2ZWwwIikpOworCisgIENvcnJ1cHQoa1RhYmxlRmlsZSwgMTAwLCAxKTsK
KyAgQ2hlY2soOSwgOSk7CisKKyAgLy8gV3JpdGUgbXVzdCBldmVudHVhbGx5IGZhaWwgYmVjYXVz
ZSBvZiBjb3JydXB0ZWQgdGFibGUKKyAgU3RhdHVzIHM7CisgIHN0ZDo6c3RyaW5nIHRtcDEsIHRt
cDI7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgMTAwMDAgJiYgcy5vaygpOyBpKyspIHsKKyAgICBz
ID0gZGJfLT5QdXQoV3JpdGVPcHRpb25zKCksIEtleShpLCAmdG1wMSksIFZhbHVlKGksICZ0bXAy
KSk7CisgIH0KKyAgQVNTRVJUX1RSVUUoIXMub2soKSkgPDwgIndyaXRlIGRpZCBub3QgZmFpbCBp
biBjb3JydXB0ZWQgcGFyYW5vaWQgZGIiOworfQorCitURVNUKENvcnJ1cHRpb25UZXN0LCBVbnJl
bGF0ZWRLZXlzKSB7CisgIEJ1aWxkKDEwKTsKKyAgREJJbXBsKiBkYmkgPSByZWludGVycHJldF9j
YXN0PERCSW1wbCo+KGRiXyk7CisgIGRiaS0+VEVTVF9Db21wYWN0TWVtVGFibGUoKTsKKyAgQ29y
cnVwdChrVGFibGVGaWxlLCAxMDAsIDEpOworCisgIHN0ZDo6c3RyaW5nIHRtcDEsIHRtcDI7Cisg
IEFTU0VSVF9PSyhkYl8tPlB1dChXcml0ZU9wdGlvbnMoKSwgS2V5KDEwMDAsICZ0bXAxKSwgVmFs
dWUoMTAwMCwgJnRtcDIpKSk7CisgIHN0ZDo6c3RyaW5nIHY7CisgIEFTU0VSVF9PSyhkYl8tPkdl
dChSZWFkT3B0aW9ucygpLCBLZXkoMTAwMCwgJnRtcDEpLCAmdikpOworICBBU1NFUlRfRVEoVmFs
dWUoMTAwMCwgJnRtcDIpLlRvU3RyaW5nKCksIHYpOworICBkYmktPlRFU1RfQ29tcGFjdE1lbVRh
YmxlKCk7CisgIEFTU0VSVF9PSyhkYl8tPkdldChSZWFkT3B0aW9ucygpLCBLZXkoMTAwMCwgJnRt
cDEpLCAmdikpOworICBBU1NFUlRfRVEoVmFsdWUoMTAwMCwgJnRtcDIpLlRvU3RyaW5nKCksIHYp
OworfQorCit9ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgorCitpbnQgbWFpbihpbnQgYXJnYywgY2hh
cioqIGFyZ3YpIHsKKyAgcmV0dXJuIGxldmVsZGI6OnRlc3Q6OlJ1bkFsbFRlc3RzKCk7Cit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2RiX2JlbmNoLmNjIGIvU291
cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9kYl9iZW5jaC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YWJkZjg3
NTg3ZGZjOGQ0ZmEwMjg3ZDhhZDQ1ZDgyYjIxNDJkN2ZjCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9kYl9iZW5jaC5jYwpAQCAtMCwwICsxLDk3OSBAQAor
Ly8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBT
ZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgorCisjaW5jbHVk
ZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4K
KyNpbmNsdWRlICJkYi9kYl9pbXBsLmgiCisjaW5jbHVkZSAiZGIvdmVyc2lvbl9zZXQuaCIKKyNp
bmNsdWRlICJsZXZlbGRiL2NhY2hlLmgiCisjaW5jbHVkZSAibGV2ZWxkYi9kYi5oIgorI2luY2x1
ZGUgImxldmVsZGIvZW52LmgiCisjaW5jbHVkZSAibGV2ZWxkYi93cml0ZV9iYXRjaC5oIgorI2lu
Y2x1ZGUgInBvcnQvcG9ydC5oIgorI2luY2x1ZGUgInV0aWwvY3JjMzJjLmgiCisjaW5jbHVkZSAi
dXRpbC9oaXN0b2dyYW0uaCIKKyNpbmNsdWRlICJ1dGlsL211dGV4bG9jay5oIgorI2luY2x1ZGUg
InV0aWwvcmFuZG9tLmgiCisjaW5jbHVkZSAidXRpbC90ZXN0dXRpbC5oIgorCisvLyBDb21tYS1z
ZXBhcmF0ZWQgbGlzdCBvZiBvcGVyYXRpb25zIHRvIHJ1biBpbiB0aGUgc3BlY2lmaWVkIG9yZGVy
CisvLyAgIEFjdHVhbCBiZW5jaG1hcmtzOgorLy8gICAgICBmaWxsc2VxICAgICAgIC0tIHdyaXRl
IE4gdmFsdWVzIGluIHNlcXVlbnRpYWwga2V5IG9yZGVyIGluIGFzeW5jIG1vZGUKKy8vICAgICAg
ZmlsbHJhbmRvbSAgICAtLSB3cml0ZSBOIHZhbHVlcyBpbiByYW5kb20ga2V5IG9yZGVyIGluIGFz
eW5jIG1vZGUKKy8vICAgICAgb3ZlcndyaXRlICAgICAtLSBvdmVyd3JpdGUgTiB2YWx1ZXMgaW4g
cmFuZG9tIGtleSBvcmRlciBpbiBhc3luYyBtb2RlCisvLyAgICAgIGZpbGxzeW5jICAgICAgLS0g
d3JpdGUgTi8xMDAgdmFsdWVzIGluIHJhbmRvbSBrZXkgb3JkZXIgaW4gc3luYyBtb2RlCisvLyAg
ICAgIGZpbGwxMDBLICAgICAgLS0gd3JpdGUgTi8xMDAwIDEwMEsgdmFsdWVzIGluIHJhbmRvbSBv
cmRlciBpbiBhc3luYyBtb2RlCisvLyAgICAgIGRlbGV0ZXNlcSAgICAgLS0gZGVsZXRlIE4ga2V5
cyBpbiBzZXF1ZW50aWFsIG9yZGVyCisvLyAgICAgIGRlbGV0ZXJhbmRvbSAgLS0gZGVsZXRlIE4g
a2V5cyBpbiByYW5kb20gb3JkZXIKKy8vICAgICAgcmVhZHNlcSAgICAgICAtLSByZWFkIE4gdGlt
ZXMgc2VxdWVudGlhbGx5CisvLyAgICAgIHJlYWRyZXZlcnNlICAgLS0gcmVhZCBOIHRpbWVzIGlu
IHJldmVyc2Ugb3JkZXIKKy8vICAgICAgcmVhZHJhbmRvbSAgICAtLSByZWFkIE4gdGltZXMgaW4g
cmFuZG9tIG9yZGVyCisvLyAgICAgIHJlYWRtaXNzaW5nICAgLS0gcmVhZCBOIG1pc3Npbmcga2V5
cyBpbiByYW5kb20gb3JkZXIKKy8vICAgICAgcmVhZGhvdCAgICAgICAtLSByZWFkIE4gdGltZXMg
aW4gcmFuZG9tIG9yZGVyIGZyb20gMSUgc2VjdGlvbiBvZiBEQgorLy8gICAgICBzZWVrcmFuZG9t
ICAgIC0tIE4gcmFuZG9tIHNlZWtzCisvLyAgICAgIGNyYzMyYyAgICAgICAgLS0gcmVwZWF0ZWQg
Y3JjMzJjIG9mIDRLIG9mIGRhdGEKKy8vICAgICAgYWNxdWlyZWxvYWQgICAtLSBsb2FkIE4qMTAw
MCB0aW1lcworLy8gICBNZXRhIG9wZXJhdGlvbnM6CisvLyAgICAgIGNvbXBhY3QgICAgIC0tIENv
bXBhY3QgdGhlIGVudGlyZSBEQgorLy8gICAgICBzdGF0cyAgICAgICAtLSBQcmludCBEQiBzdGF0
cworLy8gICAgICBzc3RhYmxlcyAgICAtLSBQcmludCBzc3RhYmxlIGluZm8KKy8vICAgICAgaGVh
cHByb2ZpbGUgLS0gRHVtcCBhIGhlYXAgcHJvZmlsZSAoaWYgc3VwcG9ydGVkIGJ5IHRoaXMgcG9y
dCkKK3N0YXRpYyBjb25zdCBjaGFyKiBGTEFHU19iZW5jaG1hcmtzID0KKyAgICAiZmlsbHNlcSwi
CisgICAgImZpbGxzeW5jLCIKKyAgICAiZmlsbHJhbmRvbSwiCisgICAgIm92ZXJ3cml0ZSwiCisg
ICAgInJlYWRyYW5kb20sIgorICAgICJyZWFkcmFuZG9tLCIgIC8vIEV4dHJhIHJ1biB0byBhbGxv
dyBwcmV2aW91cyBjb21wYWN0aW9ucyB0byBxdWllc2NlCisgICAgInJlYWRzZXEsIgorICAgICJy
ZWFkcmV2ZXJzZSwiCisgICAgImNvbXBhY3QsIgorICAgICJyZWFkcmFuZG9tLCIKKyAgICAicmVh
ZHNlcSwiCisgICAgInJlYWRyZXZlcnNlLCIKKyAgICAiZmlsbDEwMEssIgorICAgICJjcmMzMmMs
IgorICAgICJzbmFwcHljb21wLCIKKyAgICAic25hcHB5dW5jb21wLCIKKyAgICAiYWNxdWlyZWxv
YWQsIgorICAgIDsKKworLy8gTnVtYmVyIG9mIGtleS92YWx1ZXMgdG8gcGxhY2UgaW4gZGF0YWJh
c2UKK3N0YXRpYyBpbnQgRkxBR1NfbnVtID0gMTAwMDAwMDsKKworLy8gTnVtYmVyIG9mIHJlYWQg
b3BlcmF0aW9ucyB0byBkby4gIElmIG5lZ2F0aXZlLCBkbyBGTEFHU19udW0gcmVhZHMuCitzdGF0
aWMgaW50IEZMQUdTX3JlYWRzID0gLTE7CisKKy8vIE51bWJlciBvZiBjb25jdXJyZW50IHRocmVh
ZHMgdG8gcnVuLgorc3RhdGljIGludCBGTEFHU190aHJlYWRzID0gMTsKKworLy8gU2l6ZSBvZiBl
YWNoIHZhbHVlCitzdGF0aWMgaW50IEZMQUdTX3ZhbHVlX3NpemUgPSAxMDA7CisKKy8vIEFycmFu
Z2UgdG8gZ2VuZXJhdGUgdmFsdWVzIHRoYXQgc2hyaW5rIHRvIHRoaXMgZnJhY3Rpb24gb2YKKy8v
IHRoZWlyIG9yaWdpbmFsIHNpemUgYWZ0ZXIgY29tcHJlc3Npb24KK3N0YXRpYyBkb3VibGUgRkxB
R1NfY29tcHJlc3Npb25fcmF0aW8gPSAwLjU7CisKKy8vIFByaW50IGhpc3RvZ3JhbSBvZiBvcGVy
YXRpb24gdGltaW5ncworc3RhdGljIGJvb2wgRkxBR1NfaGlzdG9ncmFtID0gZmFsc2U7CisKKy8v
IE51bWJlciBvZiBieXRlcyB0byBidWZmZXIgaW4gbWVtdGFibGUgYmVmb3JlIGNvbXBhY3RpbmcK
Ky8vIChpbml0aWFsaXplZCB0byBkZWZhdWx0IHZhbHVlIGJ5ICJtYWluIikKK3N0YXRpYyBpbnQg
RkxBR1Nfd3JpdGVfYnVmZmVyX3NpemUgPSAwOworCisvLyBOdW1iZXIgb2YgYnl0ZXMgdG8gdXNl
IGFzIGEgY2FjaGUgb2YgdW5jb21wcmVzc2VkIGRhdGEuCisvLyBOZWdhdGl2ZSBtZWFucyB1c2Ug
ZGVmYXVsdCBzZXR0aW5ncy4KK3N0YXRpYyBpbnQgRkxBR1NfY2FjaGVfc2l6ZSA9IC0xOworCisv
LyBNYXhpbXVtIG51bWJlciBvZiBmaWxlcyB0byBrZWVwIG9wZW4gYXQgdGhlIHNhbWUgdGltZSAo
dXNlIGRlZmF1bHQgaWYgPT0gMCkKK3N0YXRpYyBpbnQgRkxBR1Nfb3Blbl9maWxlcyA9IDA7CisK
Ky8vIEJsb29tIGZpbHRlciBiaXRzIHBlciBrZXkuCisvLyBOZWdhdGl2ZSBtZWFucyB1c2UgZGVm
YXVsdCBzZXR0aW5ncy4KK3N0YXRpYyBpbnQgRkxBR1NfYmxvb21fYml0cyA9IC0xOworCisvLyBJ
ZiB0cnVlLCBkbyBub3QgZGVzdHJveSB0aGUgZXhpc3RpbmcgZGF0YWJhc2UuICBJZiB5b3Ugc2V0
IHRoaXMKKy8vIGZsYWcgYW5kIGFsc28gc3BlY2lmeSBhIGJlbmNobWFyayB0aGF0IHdhbnRzIGEg
ZnJlc2ggZGF0YWJhc2UsIHRoYXQKKy8vIGJlbmNobWFyayB3aWxsIGZhaWwuCitzdGF0aWMgYm9v
bCBGTEFHU191c2VfZXhpc3RpbmdfZGIgPSBmYWxzZTsKKworLy8gVXNlIHRoZSBkYiB3aXRoIHRo
ZSBmb2xsb3dpbmcgbmFtZS4KK3N0YXRpYyBjb25zdCBjaGFyKiBGTEFHU19kYiA9IE5VTEw7CisK
K25hbWVzcGFjZSBsZXZlbGRiIHsKKworbmFtZXNwYWNlIHsKKworLy8gSGVscGVyIGZvciBxdWlj
a2x5IGdlbmVyYXRpbmcgcmFuZG9tIGRhdGEuCitjbGFzcyBSYW5kb21HZW5lcmF0b3IgeworIHBy
aXZhdGU6CisgIHN0ZDo6c3RyaW5nIGRhdGFfOworICBpbnQgcG9zXzsKKworIHB1YmxpYzoKKyAg
UmFuZG9tR2VuZXJhdG9yKCkgeworICAgIC8vIFdlIHVzZSBhIGxpbWl0ZWQgYW1vdW50IG9mIGRh
dGEgb3ZlciBhbmQgb3ZlciBhZ2FpbiBhbmQgZW5zdXJlCisgICAgLy8gdGhhdCBpdCBpcyBsYXJn
ZXIgdGhhbiB0aGUgY29tcHJlc3Npb24gd2luZG93ICgzMktCKSwgYW5kIGFsc28KKyAgICAvLyBs
YXJnZSBlbm91Z2ggdG8gc2VydmUgYWxsIHR5cGljYWwgdmFsdWUgc2l6ZXMgd2Ugd2FudCB0byB3
cml0ZS4KKyAgICBSYW5kb20gcm5kKDMwMSk7CisgICAgc3RkOjpzdHJpbmcgcGllY2U7CisgICAg
d2hpbGUgKGRhdGFfLnNpemUoKSA8IDEwNDg1NzYpIHsKKyAgICAgIC8vIEFkZCBhIHNob3J0IGZy
YWdtZW50IHRoYXQgaXMgYXMgY29tcHJlc3NpYmxlIGFzIHNwZWNpZmllZAorICAgICAgLy8gYnkg
RkxBR1NfY29tcHJlc3Npb25fcmF0aW8uCisgICAgICB0ZXN0OjpDb21wcmVzc2libGVTdHJpbmco
JnJuZCwgRkxBR1NfY29tcHJlc3Npb25fcmF0aW8sIDEwMCwgJnBpZWNlKTsKKyAgICAgIGRhdGFf
LmFwcGVuZChwaWVjZSk7CisgICAgfQorICAgIHBvc18gPSAwOworICB9CisKKyAgU2xpY2UgR2Vu
ZXJhdGUoaW50IGxlbikgeworICAgIGlmIChwb3NfICsgbGVuID4gZGF0YV8uc2l6ZSgpKSB7Cisg
ICAgICBwb3NfID0gMDsKKyAgICAgIGFzc2VydChsZW4gPCBkYXRhXy5zaXplKCkpOworICAgIH0K
KyAgICBwb3NfICs9IGxlbjsKKyAgICByZXR1cm4gU2xpY2UoZGF0YV8uZGF0YSgpICsgcG9zXyAt
IGxlbiwgbGVuKTsKKyAgfQorfTsKKworc3RhdGljIFNsaWNlIFRyaW1TcGFjZShTbGljZSBzKSB7
CisgIGludCBzdGFydCA9IDA7CisgIHdoaWxlIChzdGFydCA8IHMuc2l6ZSgpICYmIGlzc3BhY2Uo
c1tzdGFydF0pKSB7CisgICAgc3RhcnQrKzsKKyAgfQorICBpbnQgbGltaXQgPSBzLnNpemUoKTsK
KyAgd2hpbGUgKGxpbWl0ID4gc3RhcnQgJiYgaXNzcGFjZShzW2xpbWl0LTFdKSkgeworICAgIGxp
bWl0LS07CisgIH0KKyAgcmV0dXJuIFNsaWNlKHMuZGF0YSgpICsgc3RhcnQsIGxpbWl0IC0gc3Rh
cnQpOworfQorCitzdGF0aWMgdm9pZCBBcHBlbmRXaXRoU3BhY2Uoc3RkOjpzdHJpbmcqIHN0ciwg
U2xpY2UgbXNnKSB7CisgIGlmIChtc2cuZW1wdHkoKSkgcmV0dXJuOworICBpZiAoIXN0ci0+ZW1w
dHkoKSkgeworICAgIHN0ci0+cHVzaF9iYWNrKCcgJyk7CisgIH0KKyAgc3RyLT5hcHBlbmQobXNn
LmRhdGEoKSwgbXNnLnNpemUoKSk7Cit9CisKK2NsYXNzIFN0YXRzIHsKKyBwcml2YXRlOgorICBk
b3VibGUgc3RhcnRfOworICBkb3VibGUgZmluaXNoXzsKKyAgZG91YmxlIHNlY29uZHNfOworICBp
bnQgZG9uZV87CisgIGludCBuZXh0X3JlcG9ydF87CisgIGludDY0X3QgYnl0ZXNfOworICBkb3Vi
bGUgbGFzdF9vcF9maW5pc2hfOworICBIaXN0b2dyYW0gaGlzdF87CisgIHN0ZDo6c3RyaW5nIG1l
c3NhZ2VfOworCisgcHVibGljOgorICBTdGF0cygpIHsgU3RhcnQoKTsgfQorCisgIHZvaWQgU3Rh
cnQoKSB7CisgICAgbmV4dF9yZXBvcnRfID0gMTAwOworICAgIGxhc3Rfb3BfZmluaXNoXyA9IHN0
YXJ0XzsKKyAgICBoaXN0Xy5DbGVhcigpOworICAgIGRvbmVfID0gMDsKKyAgICBieXRlc18gPSAw
OworICAgIHNlY29uZHNfID0gMDsKKyAgICBzdGFydF8gPSBFbnY6OkRlZmF1bHQoKS0+Tm93TWlj
cm9zKCk7CisgICAgZmluaXNoXyA9IHN0YXJ0XzsKKyAgICBtZXNzYWdlXy5jbGVhcigpOworICB9
CisKKyAgdm9pZCBNZXJnZShjb25zdCBTdGF0cyYgb3RoZXIpIHsKKyAgICBoaXN0Xy5NZXJnZShv
dGhlci5oaXN0Xyk7CisgICAgZG9uZV8gKz0gb3RoZXIuZG9uZV87CisgICAgYnl0ZXNfICs9IG90
aGVyLmJ5dGVzXzsKKyAgICBzZWNvbmRzXyArPSBvdGhlci5zZWNvbmRzXzsKKyAgICBpZiAob3Ro
ZXIuc3RhcnRfIDwgc3RhcnRfKSBzdGFydF8gPSBvdGhlci5zdGFydF87CisgICAgaWYgKG90aGVy
LmZpbmlzaF8gPiBmaW5pc2hfKSBmaW5pc2hfID0gb3RoZXIuZmluaXNoXzsKKworICAgIC8vIEp1
c3Qga2VlcCB0aGUgbWVzc2FnZXMgZnJvbSBvbmUgdGhyZWFkCisgICAgaWYgKG1lc3NhZ2VfLmVt
cHR5KCkpIG1lc3NhZ2VfID0gb3RoZXIubWVzc2FnZV87CisgIH0KKworICB2b2lkIFN0b3AoKSB7
CisgICAgZmluaXNoXyA9IEVudjo6RGVmYXVsdCgpLT5Ob3dNaWNyb3MoKTsKKyAgICBzZWNvbmRz
XyA9IChmaW5pc2hfIC0gc3RhcnRfKSAqIDFlLTY7CisgIH0KKworICB2b2lkIEFkZE1lc3NhZ2Uo
U2xpY2UgbXNnKSB7CisgICAgQXBwZW5kV2l0aFNwYWNlKCZtZXNzYWdlXywgbXNnKTsKKyAgfQor
CisgIHZvaWQgRmluaXNoZWRTaW5nbGVPcCgpIHsKKyAgICBpZiAoRkxBR1NfaGlzdG9ncmFtKSB7
CisgICAgICBkb3VibGUgbm93ID0gRW52OjpEZWZhdWx0KCktPk5vd01pY3JvcygpOworICAgICAg
ZG91YmxlIG1pY3JvcyA9IG5vdyAtIGxhc3Rfb3BfZmluaXNoXzsKKyAgICAgIGhpc3RfLkFkZCht
aWNyb3MpOworICAgICAgaWYgKG1pY3JvcyA+IDIwMDAwKSB7CisgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAibG9uZyBvcDogJS4xZiBtaWNyb3MlMzBzXHIiLCBtaWNyb3MsICIiKTsKKyAgICAgICAg
ZmZsdXNoKHN0ZGVycik7CisgICAgICB9CisgICAgICBsYXN0X29wX2ZpbmlzaF8gPSBub3c7Cisg
ICAgfQorCisgICAgZG9uZV8rKzsKKyAgICBpZiAoZG9uZV8gPj0gbmV4dF9yZXBvcnRfKSB7Cisg
ICAgICBpZiAgICAgIChuZXh0X3JlcG9ydF8gPCAxMDAwKSAgIG5leHRfcmVwb3J0XyArPSAxMDA7
CisgICAgICBlbHNlIGlmIChuZXh0X3JlcG9ydF8gPCA1MDAwKSAgIG5leHRfcmVwb3J0XyArPSA1
MDA7CisgICAgICBlbHNlIGlmIChuZXh0X3JlcG9ydF8gPCAxMDAwMCkgIG5leHRfcmVwb3J0XyAr
PSAxMDAwOworICAgICAgZWxzZSBpZiAobmV4dF9yZXBvcnRfIDwgNTAwMDApICBuZXh0X3JlcG9y
dF8gKz0gNTAwMDsKKyAgICAgIGVsc2UgaWYgKG5leHRfcmVwb3J0XyA8IDEwMDAwMCkgbmV4dF9y
ZXBvcnRfICs9IDEwMDAwOworICAgICAgZWxzZSBpZiAobmV4dF9yZXBvcnRfIDwgNTAwMDAwKSBu
ZXh0X3JlcG9ydF8gKz0gNTAwMDA7CisgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5leHRfcmVwb3J0XyArPSAxMDAwMDA7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIi4uLiBm
aW5pc2hlZCAlZCBvcHMlMzBzXHIiLCBkb25lXywgIiIpOworICAgICAgZmZsdXNoKHN0ZGVycik7
CisgICAgfQorICB9CisKKyAgdm9pZCBBZGRCeXRlcyhpbnQ2NF90IG4pIHsKKyAgICBieXRlc18g
Kz0gbjsKKyAgfQorCisgIHZvaWQgUmVwb3J0KGNvbnN0IFNsaWNlJiBuYW1lKSB7CisgICAgLy8g
UHJldGVuZCBhdCBsZWFzdCBvbmUgb3Agd2FzIGRvbmUgaW4gY2FzZSB3ZSBhcmUgcnVubmluZyBh
IGJlbmNobWFyaworICAgIC8vIHRoYXQgZG9lcyBub3QgY2FsbCBGaW5pc2hlZFNpbmdsZU9wKCku
CisgICAgaWYgKGRvbmVfIDwgMSkgZG9uZV8gPSAxOworCisgICAgc3RkOjpzdHJpbmcgZXh0cmE7
CisgICAgaWYgKGJ5dGVzXyA+IDApIHsKKyAgICAgIC8vIFJhdGUgaXMgY29tcHV0ZWQgb24gYWN0
dWFsIGVsYXBzZWQgdGltZSwgbm90IHRoZSBzdW0gb2YgcGVyLXRocmVhZAorICAgICAgLy8gZWxh
cHNlZCB0aW1lcy4KKyAgICAgIGRvdWJsZSBlbGFwc2VkID0gKGZpbmlzaF8gLSBzdGFydF8pICog
MWUtNjsKKyAgICAgIGNoYXIgcmF0ZVsxMDBdOworICAgICAgc25wcmludGYocmF0ZSwgc2l6ZW9m
KHJhdGUpLCAiJTYuMWYgTUIvcyIsCisgICAgICAgICAgICAgICAoYnl0ZXNfIC8gMTA0ODU3Ni4w
KSAvIGVsYXBzZWQpOworICAgICAgZXh0cmEgPSByYXRlOworICAgIH0KKyAgICBBcHBlbmRXaXRo
U3BhY2UoJmV4dHJhLCBtZXNzYWdlXyk7CisKKyAgICBmcHJpbnRmKHN0ZG91dCwgIiUtMTJzIDog
JTExLjNmIG1pY3Jvcy9vcDslcyVzXG4iLAorICAgICAgICAgICAgbmFtZS5Ub1N0cmluZygpLmNf
c3RyKCksCisgICAgICAgICAgICBzZWNvbmRzXyAqIDFlNiAvIGRvbmVfLAorICAgICAgICAgICAg
KGV4dHJhLmVtcHR5KCkgPyAiIiA6ICIgIiksCisgICAgICAgICAgICBleHRyYS5jX3N0cigpKTsK
KyAgICBpZiAoRkxBR1NfaGlzdG9ncmFtKSB7CisgICAgICBmcHJpbnRmKHN0ZG91dCwgIk1pY3Jv
c2Vjb25kcyBwZXIgb3A6XG4lc1xuIiwgaGlzdF8uVG9TdHJpbmcoKS5jX3N0cigpKTsKKyAgICB9
CisgICAgZmZsdXNoKHN0ZG91dCk7CisgIH0KK307CisKKy8vIFN0YXRlIHNoYXJlZCBieSBhbGwg
Y29uY3VycmVudCBleGVjdXRpb25zIG9mIHRoZSBzYW1lIGJlbmNobWFyay4KK3N0cnVjdCBTaGFy
ZWRTdGF0ZSB7CisgIHBvcnQ6Ok11dGV4IG11OworICBwb3J0OjpDb25kVmFyIGN2OworICBpbnQg
dG90YWw7CisKKyAgLy8gRWFjaCB0aHJlYWQgZ29lcyB0aHJvdWdoIHRoZSBmb2xsb3dpbmcgc3Rh
dGVzOgorICAvLyAgICAoMSkgaW5pdGlhbGl6aW5nCisgIC8vICAgICgyKSB3YWl0aW5nIGZvciBv
dGhlcnMgdG8gYmUgaW5pdGlhbGl6ZWQKKyAgLy8gICAgKDMpIHJ1bm5pbmcKKyAgLy8gICAgKDQp
IGRvbmUKKworICBpbnQgbnVtX2luaXRpYWxpemVkOworICBpbnQgbnVtX2RvbmU7CisgIGJvb2wg
c3RhcnQ7CisKKyAgU2hhcmVkU3RhdGUoKSA6IGN2KCZtdSkgeyB9Cit9OworCisvLyBQZXItdGhy
ZWFkIHN0YXRlIGZvciBjb25jdXJyZW50IGV4ZWN1dGlvbnMgb2YgdGhlIHNhbWUgYmVuY2htYXJr
Lgorc3RydWN0IFRocmVhZFN0YXRlIHsKKyAgaW50IHRpZDsgICAgICAgICAgICAgLy8gMC4ubi0x
IHdoZW4gcnVubmluZyBpbiBuIHRocmVhZHMKKyAgUmFuZG9tIHJhbmQ7ICAgICAgICAgLy8gSGFz
IGRpZmZlcmVudCBzZWVkcyBmb3IgZGlmZmVyZW50IHRocmVhZHMKKyAgU3RhdHMgc3RhdHM7Cisg
IFNoYXJlZFN0YXRlKiBzaGFyZWQ7CisKKyAgVGhyZWFkU3RhdGUoaW50IGluZGV4KQorICAgICAg
OiB0aWQoaW5kZXgpLAorICAgICAgICByYW5kKDEwMDAgKyBpbmRleCkgeworICB9Cit9OworCit9
ICAvLyBuYW1lc3BhY2UKKworY2xhc3MgQmVuY2htYXJrIHsKKyBwcml2YXRlOgorICBDYWNoZSog
Y2FjaGVfOworICBjb25zdCBGaWx0ZXJQb2xpY3kqIGZpbHRlcl9wb2xpY3lfOworICBEQiogZGJf
OworICBpbnQgbnVtXzsKKyAgaW50IHZhbHVlX3NpemVfOworICBpbnQgZW50cmllc19wZXJfYmF0
Y2hfOworICBXcml0ZU9wdGlvbnMgd3JpdGVfb3B0aW9uc187CisgIGludCByZWFkc187CisgIGlu
dCBoZWFwX2NvdW50ZXJfOworCisgIHZvaWQgUHJpbnRIZWFkZXIoKSB7CisgICAgY29uc3QgaW50
IGtLZXlTaXplID0gMTY7CisgICAgUHJpbnRFbnZpcm9ubWVudCgpOworICAgIGZwcmludGYoc3Rk
b3V0LCAiS2V5czogICAgICAgJWQgYnl0ZXMgZWFjaFxuIiwga0tleVNpemUpOworICAgIGZwcmlu
dGYoc3Rkb3V0LCAiVmFsdWVzOiAgICAgJWQgYnl0ZXMgZWFjaCAoJWQgYnl0ZXMgYWZ0ZXIgY29t
cHJlc3Npb24pXG4iLAorICAgICAgICAgICAgRkxBR1NfdmFsdWVfc2l6ZSwKKyAgICAgICAgICAg
IHN0YXRpY19jYXN0PGludD4oRkxBR1NfdmFsdWVfc2l6ZSAqIEZMQUdTX2NvbXByZXNzaW9uX3Jh
dGlvICsgMC41KSk7CisgICAgZnByaW50ZihzdGRvdXQsICJFbnRyaWVzOiAgICAlZFxuIiwgbnVt
Xyk7CisgICAgZnByaW50ZihzdGRvdXQsICJSYXdTaXplOiAgICAlLjFmIE1CIChlc3RpbWF0ZWQp
XG4iLAorICAgICAgICAgICAgKChzdGF0aWNfY2FzdDxpbnQ2NF90PihrS2V5U2l6ZSArIEZMQUdT
X3ZhbHVlX3NpemUpICogbnVtXykKKyAgICAgICAgICAgICAvIDEwNDg1NzYuMCkpOworICAgIGZw
cmludGYoc3Rkb3V0LCAiRmlsZVNpemU6ICAgJS4xZiBNQiAoZXN0aW1hdGVkKVxuIiwKKyAgICAg
ICAgICAgICgoKGtLZXlTaXplICsgRkxBR1NfdmFsdWVfc2l6ZSAqIEZMQUdTX2NvbXByZXNzaW9u
X3JhdGlvKSAqIG51bV8pCisgICAgICAgICAgICAgLyAxMDQ4NTc2LjApKTsKKyAgICBQcmludFdh
cm5pbmdzKCk7CisgICAgZnByaW50ZihzdGRvdXQsICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworICB9CisKKyAgdm9pZCBQcmludFdhcm5pbmdz
KCkgeworI2lmIGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKF9fT1BUSU1JWkVfXykKKyAg
ICBmcHJpbnRmKHN0ZG91dCwKKyAgICAgICAgICAgICJXQVJOSU5HOiBPcHRpbWl6YXRpb24gaXMg
ZGlzYWJsZWQ6IGJlbmNobWFya3MgdW5uZWNlc3NhcmlseSBzbG93XG4iCisgICAgICAgICAgICAp
OworI2VuZGlmCisjaWZuZGVmIE5ERUJVRworICAgIGZwcmludGYoc3Rkb3V0LAorICAgICAgICAg
ICAgIldBUk5JTkc6IEFzc2VydGlvbnMgYXJlIGVuYWJsZWQ7IGJlbmNobWFya3MgdW5uZWNlc3Nh
cmlseSBzbG93XG4iKTsKKyNlbmRpZgorCisgICAgLy8gU2VlIGlmIHNuYXBweSBpcyB3b3JraW5n
IGJ5IGF0dGVtcHRpbmcgdG8gY29tcHJlc3MgYSBjb21wcmVzc2libGUgc3RyaW5nCisgICAgY29u
c3QgY2hhciB0ZXh0W10gPSAieXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5
eXkiOworICAgIHN0ZDo6c3RyaW5nIGNvbXByZXNzZWQ7CisgICAgaWYgKCFwb3J0OjpTbmFwcHlf
Q29tcHJlc3ModGV4dCwgc2l6ZW9mKHRleHQpLCAmY29tcHJlc3NlZCkpIHsKKyAgICAgIGZwcmlu
dGYoc3Rkb3V0LCAiV0FSTklORzogU25hcHB5IGNvbXByZXNzaW9uIGlzIG5vdCBlbmFibGVkXG4i
KTsKKyAgICB9IGVsc2UgaWYgKGNvbXByZXNzZWQuc2l6ZSgpID49IHNpemVvZih0ZXh0KSkgewor
ICAgICAgZnByaW50ZihzdGRvdXQsICJXQVJOSU5HOiBTbmFwcHkgY29tcHJlc3Npb24gaXMgbm90
IGVmZmVjdGl2ZVxuIik7CisgICAgfQorICB9CisKKyAgdm9pZCBQcmludEVudmlyb25tZW50KCkg
eworICAgIGZwcmludGYoc3RkZXJyLCAiTGV2ZWxEQjogICAgdmVyc2lvbiAlZC4lZFxuIiwKKyAg
ICAgICAgICAgIGtNYWpvclZlcnNpb24sIGtNaW5vclZlcnNpb24pOworCisjaWYgZGVmaW5lZChf
X2xpbnV4KQorICAgIHRpbWVfdCBub3cgPSB0aW1lKE5VTEwpOworICAgIGZwcmludGYoc3RkZXJy
LCAiRGF0ZTogICAgICAgJXMiLCBjdGltZSgmbm93KSk7ICAvLyBjdGltZSgpIGFkZHMgbmV3bGlu
ZQorCisgICAgRklMRSogY3B1aW5mbyA9IGZvcGVuKCIvcHJvYy9jcHVpbmZvIiwgInIiKTsKKyAg
ICBpZiAoY3B1aW5mbyAhPSBOVUxMKSB7CisgICAgICBjaGFyIGxpbmVbMTAwMF07CisgICAgICBp
bnQgbnVtX2NwdXMgPSAwOworICAgICAgc3RkOjpzdHJpbmcgY3B1X3R5cGU7CisgICAgICBzdGQ6
OnN0cmluZyBjYWNoZV9zaXplOworICAgICAgd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5l
KSwgY3B1aW5mbykgIT0gTlVMTCkgeworICAgICAgICBjb25zdCBjaGFyKiBzZXAgPSBzdHJjaHIo
bGluZSwgJzonKTsKKyAgICAgICAgaWYgKHNlcCA9PSBOVUxMKSB7CisgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIH0KKyAgICAgICAgU2xpY2Uga2V5ID0gVHJpbVNwYWNlKFNsaWNlKGxpbmUs
IHNlcCAtIDEgLSBsaW5lKSk7CisgICAgICAgIFNsaWNlIHZhbCA9IFRyaW1TcGFjZShTbGljZShz
ZXAgKyAxKSk7CisgICAgICAgIGlmIChrZXkgPT0gIm1vZGVsIG5hbWUiKSB7CisgICAgICAgICAg
KytudW1fY3B1czsKKyAgICAgICAgICBjcHVfdHlwZSA9IHZhbC5Ub1N0cmluZygpOworICAgICAg
ICB9IGVsc2UgaWYgKGtleSA9PSAiY2FjaGUgc2l6ZSIpIHsKKyAgICAgICAgICBjYWNoZV9zaXpl
ID0gdmFsLlRvU3RyaW5nKCk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGZjbG9zZShjcHVp
bmZvKTsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiQ1BVOiAgICAgICAgJWQgKiAlc1xuIiwgbnVt
X2NwdXMsIGNwdV90eXBlLmNfc3RyKCkpOworICAgICAgZnByaW50ZihzdGRlcnIsICJDUFVDYWNo
ZTogICAlc1xuIiwgY2FjaGVfc2l6ZS5jX3N0cigpKTsKKyAgICB9CisjZW5kaWYKKyAgfQorCisg
cHVibGljOgorICBCZW5jaG1hcmsoKQorICA6IGNhY2hlXyhGTEFHU19jYWNoZV9zaXplID49IDAg
PyBOZXdMUlVDYWNoZShGTEFHU19jYWNoZV9zaXplKSA6IE5VTEwpLAorICAgIGZpbHRlcl9wb2xp
Y3lfKEZMQUdTX2Jsb29tX2JpdHMgPj0gMAorICAgICAgICAgICAgICAgICAgID8gTmV3Qmxvb21G
aWx0ZXJQb2xpY3koRkxBR1NfYmxvb21fYml0cykKKyAgICAgICAgICAgICAgICAgICA6IE5VTEwp
LAorICAgIGRiXyhOVUxMKSwKKyAgICBudW1fKEZMQUdTX251bSksCisgICAgdmFsdWVfc2l6ZV8o
RkxBR1NfdmFsdWVfc2l6ZSksCisgICAgZW50cmllc19wZXJfYmF0Y2hfKDEpLAorICAgIHJlYWRz
XyhGTEFHU19yZWFkcyA8IDAgPyBGTEFHU19udW0gOiBGTEFHU19yZWFkcyksCisgICAgaGVhcF9j
b3VudGVyXygwKSB7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGZpbGVzOworICAgIEVu
djo6RGVmYXVsdCgpLT5HZXRDaGlsZHJlbihGTEFHU19kYiwgJmZpbGVzKTsKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGZpbGVzLnNpemUoKTsgaSsrKSB7CisgICAgICBpZiAoU2xpY2UoZmlsZXNb
aV0pLnN0YXJ0c193aXRoKCJoZWFwLSIpKSB7CisgICAgICAgIEVudjo6RGVmYXVsdCgpLT5EZWxl
dGVGaWxlKHN0ZDo6c3RyaW5nKEZMQUdTX2RiKSArICIvIiArIGZpbGVzW2ldKTsKKyAgICAgIH0K
KyAgICB9CisgICAgaWYgKCFGTEFHU191c2VfZXhpc3RpbmdfZGIpIHsKKyAgICAgIERlc3Ryb3lE
QihGTEFHU19kYiwgT3B0aW9ucygpKTsKKyAgICB9CisgIH0KKworICB+QmVuY2htYXJrKCkgewor
ICAgIGRlbGV0ZSBkYl87CisgICAgZGVsZXRlIGNhY2hlXzsKKyAgICBkZWxldGUgZmlsdGVyX3Bv
bGljeV87CisgIH0KKworICB2b2lkIFJ1bigpIHsKKyAgICBQcmludEhlYWRlcigpOworICAgIE9w
ZW4oKTsKKworICAgIGNvbnN0IGNoYXIqIGJlbmNobWFya3MgPSBGTEFHU19iZW5jaG1hcmtzOwor
ICAgIHdoaWxlIChiZW5jaG1hcmtzICE9IE5VTEwpIHsKKyAgICAgIGNvbnN0IGNoYXIqIHNlcCA9
IHN0cmNocihiZW5jaG1hcmtzLCAnLCcpOworICAgICAgU2xpY2UgbmFtZTsKKyAgICAgIGlmIChz
ZXAgPT0gTlVMTCkgeworICAgICAgICBuYW1lID0gYmVuY2htYXJrczsKKyAgICAgICAgYmVuY2ht
YXJrcyA9IE5VTEw7CisgICAgICB9IGVsc2UgeworICAgICAgICBuYW1lID0gU2xpY2UoYmVuY2ht
YXJrcywgc2VwIC0gYmVuY2htYXJrcyk7CisgICAgICAgIGJlbmNobWFya3MgPSBzZXAgKyAxOwor
ICAgICAgfQorCisgICAgICAvLyBSZXNldCBwYXJhbWV0ZXJzIHRoYXQgbWF5IGJlIG92ZXJyaWRk
ZGVuIGJ3bG93CisgICAgICBudW1fID0gRkxBR1NfbnVtOworICAgICAgcmVhZHNfID0gKEZMQUdT
X3JlYWRzIDwgMCA/IEZMQUdTX251bSA6IEZMQUdTX3JlYWRzKTsKKyAgICAgIHZhbHVlX3NpemVf
ID0gRkxBR1NfdmFsdWVfc2l6ZTsKKyAgICAgIGVudHJpZXNfcGVyX2JhdGNoXyA9IDE7CisgICAg
ICB3cml0ZV9vcHRpb25zXyA9IFdyaXRlT3B0aW9ucygpOworCisgICAgICB2b2lkIChCZW5jaG1h
cms6OiptZXRob2QpKFRocmVhZFN0YXRlKikgPSBOVUxMOworICAgICAgYm9vbCBmcmVzaF9kYiA9
IGZhbHNlOworICAgICAgaW50IG51bV90aHJlYWRzID0gRkxBR1NfdGhyZWFkczsKKworICAgICAg
aWYgKG5hbWUgPT0gU2xpY2UoImZpbGxzZXEiKSkgeworICAgICAgICBmcmVzaF9kYiA9IHRydWU7
CisgICAgICAgIG1ldGhvZCA9ICZCZW5jaG1hcms6OldyaXRlU2VxOworICAgICAgfSBlbHNlIGlm
IChuYW1lID09IFNsaWNlKCJmaWxsYmF0Y2giKSkgeworICAgICAgICBmcmVzaF9kYiA9IHRydWU7
CisgICAgICAgIGVudHJpZXNfcGVyX2JhdGNoXyA9IDEwMDA7CisgICAgICAgIG1ldGhvZCA9ICZC
ZW5jaG1hcms6OldyaXRlU2VxOworICAgICAgfSBlbHNlIGlmIChuYW1lID09IFNsaWNlKCJmaWxs
cmFuZG9tIikpIHsKKyAgICAgICAgZnJlc2hfZGIgPSB0cnVlOworICAgICAgICBtZXRob2QgPSAm
QmVuY2htYXJrOjpXcml0ZVJhbmRvbTsKKyAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSBTbGljZSgi
b3ZlcndyaXRlIikpIHsKKyAgICAgICAgZnJlc2hfZGIgPSBmYWxzZTsKKyAgICAgICAgbWV0aG9k
ID0gJkJlbmNobWFyazo6V3JpdGVSYW5kb207CisgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gU2xp
Y2UoImZpbGxzeW5jIikpIHsKKyAgICAgICAgZnJlc2hfZGIgPSB0cnVlOworICAgICAgICBudW1f
IC89IDEwMDA7CisgICAgICAgIHdyaXRlX29wdGlvbnNfLnN5bmMgPSB0cnVlOworICAgICAgICBt
ZXRob2QgPSAmQmVuY2htYXJrOjpXcml0ZVJhbmRvbTsKKyAgICAgIH0gZWxzZSBpZiAobmFtZSA9
PSBTbGljZSgiZmlsbDEwMEsiKSkgeworICAgICAgICBmcmVzaF9kYiA9IHRydWU7CisgICAgICAg
IG51bV8gLz0gMTAwMDsKKyAgICAgICAgdmFsdWVfc2l6ZV8gPSAxMDAgKiAxMDAwOworICAgICAg
ICBtZXRob2QgPSAmQmVuY2htYXJrOjpXcml0ZVJhbmRvbTsKKyAgICAgIH0gZWxzZSBpZiAobmFt
ZSA9PSBTbGljZSgicmVhZHNlcSIpKSB7CisgICAgICAgIG1ldGhvZCA9ICZCZW5jaG1hcms6OlJl
YWRTZXF1ZW50aWFsOworICAgICAgfSBlbHNlIGlmIChuYW1lID09IFNsaWNlKCJyZWFkcmV2ZXJz
ZSIpKSB7CisgICAgICAgIG1ldGhvZCA9ICZCZW5jaG1hcms6OlJlYWRSZXZlcnNlOworICAgICAg
fSBlbHNlIGlmIChuYW1lID09IFNsaWNlKCJyZWFkcmFuZG9tIikpIHsKKyAgICAgICAgbWV0aG9k
ID0gJkJlbmNobWFyazo6UmVhZFJhbmRvbTsKKyAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSBTbGlj
ZSgicmVhZG1pc3NpbmciKSkgeworICAgICAgICBtZXRob2QgPSAmQmVuY2htYXJrOjpSZWFkTWlz
c2luZzsKKyAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSBTbGljZSgic2Vla3JhbmRvbSIpKSB7Cisg
ICAgICAgIG1ldGhvZCA9ICZCZW5jaG1hcms6OlNlZWtSYW5kb207CisgICAgICB9IGVsc2UgaWYg
KG5hbWUgPT0gU2xpY2UoInJlYWRob3QiKSkgeworICAgICAgICBtZXRob2QgPSAmQmVuY2htYXJr
OjpSZWFkSG90OworICAgICAgfSBlbHNlIGlmIChuYW1lID09IFNsaWNlKCJyZWFkcmFuZG9tc21h
bGwiKSkgeworICAgICAgICByZWFkc18gLz0gMTAwMDsKKyAgICAgICAgbWV0aG9kID0gJkJlbmNo
bWFyazo6UmVhZFJhbmRvbTsKKyAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSBTbGljZSgiZGVsZXRl
c2VxIikpIHsKKyAgICAgICAgbWV0aG9kID0gJkJlbmNobWFyazo6RGVsZXRlU2VxOworICAgICAg
fSBlbHNlIGlmIChuYW1lID09IFNsaWNlKCJkZWxldGVyYW5kb20iKSkgeworICAgICAgICBtZXRo
b2QgPSAmQmVuY2htYXJrOjpEZWxldGVSYW5kb207CisgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0g
U2xpY2UoInJlYWR3aGlsZXdyaXRpbmciKSkgeworICAgICAgICBudW1fdGhyZWFkcysrOyAgLy8g
QWRkIGV4dHJhIHRocmVhZCBmb3Igd3JpdGluZworICAgICAgICBtZXRob2QgPSAmQmVuY2htYXJr
OjpSZWFkV2hpbGVXcml0aW5nOworICAgICAgfSBlbHNlIGlmIChuYW1lID09IFNsaWNlKCJjb21w
YWN0IikpIHsKKyAgICAgICAgbWV0aG9kID0gJkJlbmNobWFyazo6Q29tcGFjdDsKKyAgICAgIH0g
ZWxzZSBpZiAobmFtZSA9PSBTbGljZSgiY3JjMzJjIikpIHsKKyAgICAgICAgbWV0aG9kID0gJkJl
bmNobWFyazo6Q3JjMzJjOworICAgICAgfSBlbHNlIGlmIChuYW1lID09IFNsaWNlKCJhY3F1aXJl
bG9hZCIpKSB7CisgICAgICAgIG1ldGhvZCA9ICZCZW5jaG1hcms6OkFjcXVpcmVMb2FkOworICAg
ICAgfSBlbHNlIGlmIChuYW1lID09IFNsaWNlKCJzbmFwcHljb21wIikpIHsKKyAgICAgICAgbWV0
aG9kID0gJkJlbmNobWFyazo6U25hcHB5Q29tcHJlc3M7CisgICAgICB9IGVsc2UgaWYgKG5hbWUg
PT0gU2xpY2UoInNuYXBweXVuY29tcCIpKSB7CisgICAgICAgIG1ldGhvZCA9ICZCZW5jaG1hcms6
OlNuYXBweVVuY29tcHJlc3M7CisgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gU2xpY2UoImhlYXBw
cm9maWxlIikpIHsKKyAgICAgICAgSGVhcFByb2ZpbGUoKTsKKyAgICAgIH0gZWxzZSBpZiAobmFt
ZSA9PSBTbGljZSgic3RhdHMiKSkgeworICAgICAgICBQcmludFN0YXRzKCJsZXZlbGRiLnN0YXRz
Iik7CisgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gU2xpY2UoInNzdGFibGVzIikpIHsKKyAgICAg
ICAgUHJpbnRTdGF0cygibGV2ZWxkYi5zc3RhYmxlcyIpOworICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgaWYgKG5hbWUgIT0gU2xpY2UoKSkgeyAgLy8gTm8gZXJyb3IgbWVzc2FnZSBmb3IgZW1wdHkg
bmFtZQorICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAidW5rbm93biBiZW5jaG1hcmsgJyVzJ1xu
IiwgbmFtZS5Ub1N0cmluZygpLmNfc3RyKCkpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAg
IGlmIChmcmVzaF9kYikgeworICAgICAgICBpZiAoRkxBR1NfdXNlX2V4aXN0aW5nX2RiKSB7Cisg
ICAgICAgICAgZnByaW50ZihzdGRvdXQsICIlLTEycyA6IHNraXBwZWQgKC0tdXNlX2V4aXN0aW5n
X2RiIGlzIHRydWUpXG4iLAorICAgICAgICAgICAgICAgICAgbmFtZS5Ub1N0cmluZygpLmNfc3Ry
KCkpOworICAgICAgICAgIG1ldGhvZCA9IE5VTEw7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgZGVsZXRlIGRiXzsKKyAgICAgICAgICBkYl8gPSBOVUxMOworICAgICAgICAgIERlc3Ryb3lE
QihGTEFHU19kYiwgT3B0aW9ucygpKTsKKyAgICAgICAgICBPcGVuKCk7CisgICAgICAgIH0KKyAg
ICAgIH0KKworICAgICAgaWYgKG1ldGhvZCAhPSBOVUxMKSB7CisgICAgICAgIFJ1bkJlbmNobWFy
ayhudW1fdGhyZWFkcywgbmFtZSwgbWV0aG9kKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworIHBy
aXZhdGU6CisgIHN0cnVjdCBUaHJlYWRBcmcgeworICAgIEJlbmNobWFyayogYm07CisgICAgU2hh
cmVkU3RhdGUqIHNoYXJlZDsKKyAgICBUaHJlYWRTdGF0ZSogdGhyZWFkOworICAgIHZvaWQgKEJl
bmNobWFyazo6Km1ldGhvZCkoVGhyZWFkU3RhdGUqKTsKKyAgfTsKKworICBzdGF0aWMgdm9pZCBU
aHJlYWRCb2R5KHZvaWQqIHYpIHsKKyAgICBUaHJlYWRBcmcqIGFyZyA9IHJlaW50ZXJwcmV0X2Nh
c3Q8VGhyZWFkQXJnKj4odik7CisgICAgU2hhcmVkU3RhdGUqIHNoYXJlZCA9IGFyZy0+c2hhcmVk
OworICAgIFRocmVhZFN0YXRlKiB0aHJlYWQgPSBhcmctPnRocmVhZDsKKyAgICB7CisgICAgICBN
dXRleExvY2sgbCgmc2hhcmVkLT5tdSk7CisgICAgICBzaGFyZWQtPm51bV9pbml0aWFsaXplZCsr
OworICAgICAgaWYgKHNoYXJlZC0+bnVtX2luaXRpYWxpemVkID49IHNoYXJlZC0+dG90YWwpIHsK
KyAgICAgICAgc2hhcmVkLT5jdi5TaWduYWxBbGwoKTsKKyAgICAgIH0KKyAgICAgIHdoaWxlICgh
c2hhcmVkLT5zdGFydCkgeworICAgICAgICBzaGFyZWQtPmN2LldhaXQoKTsKKyAgICAgIH0KKyAg
ICB9CisKKyAgICB0aHJlYWQtPnN0YXRzLlN0YXJ0KCk7CisgICAgKGFyZy0+Ym0tPiooYXJnLT5t
ZXRob2QpKSh0aHJlYWQpOworICAgIHRocmVhZC0+c3RhdHMuU3RvcCgpOworCisgICAgeworICAg
ICAgTXV0ZXhMb2NrIGwoJnNoYXJlZC0+bXUpOworICAgICAgc2hhcmVkLT5udW1fZG9uZSsrOwor
ICAgICAgaWYgKHNoYXJlZC0+bnVtX2RvbmUgPj0gc2hhcmVkLT50b3RhbCkgeworICAgICAgICBz
aGFyZWQtPmN2LlNpZ25hbEFsbCgpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHZvaWQgUnVu
QmVuY2htYXJrKGludCBuLCBTbGljZSBuYW1lLAorICAgICAgICAgICAgICAgICAgICB2b2lkIChC
ZW5jaG1hcms6OiptZXRob2QpKFRocmVhZFN0YXRlKikpIHsKKyAgICBTaGFyZWRTdGF0ZSBzaGFy
ZWQ7CisgICAgc2hhcmVkLnRvdGFsID0gbjsKKyAgICBzaGFyZWQubnVtX2luaXRpYWxpemVkID0g
MDsKKyAgICBzaGFyZWQubnVtX2RvbmUgPSAwOworICAgIHNoYXJlZC5zdGFydCA9IGZhbHNlOwor
CisgICAgVGhyZWFkQXJnKiBhcmcgPSBuZXcgVGhyZWFkQXJnW25dOworICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgbjsgaSsrKSB7CisgICAgICBhcmdbaV0uYm0gPSB0aGlzOworICAgICAgYXJnW2ld
Lm1ldGhvZCA9IG1ldGhvZDsKKyAgICAgIGFyZ1tpXS5zaGFyZWQgPSAmc2hhcmVkOworICAgICAg
YXJnW2ldLnRocmVhZCA9IG5ldyBUaHJlYWRTdGF0ZShpKTsKKyAgICAgIGFyZ1tpXS50aHJlYWQt
PnNoYXJlZCA9ICZzaGFyZWQ7CisgICAgICBFbnY6OkRlZmF1bHQoKS0+U3RhcnRUaHJlYWQoVGhy
ZWFkQm9keSwgJmFyZ1tpXSk7CisgICAgfQorCisgICAgc2hhcmVkLm11LkxvY2soKTsKKyAgICB3
aGlsZSAoc2hhcmVkLm51bV9pbml0aWFsaXplZCA8IG4pIHsKKyAgICAgIHNoYXJlZC5jdi5XYWl0
KCk7CisgICAgfQorCisgICAgc2hhcmVkLnN0YXJ0ID0gdHJ1ZTsKKyAgICBzaGFyZWQuY3YuU2ln
bmFsQWxsKCk7CisgICAgd2hpbGUgKHNoYXJlZC5udW1fZG9uZSA8IG4pIHsKKyAgICAgIHNoYXJl
ZC5jdi5XYWl0KCk7CisgICAgfQorICAgIHNoYXJlZC5tdS5VbmxvY2soKTsKKworICAgIGZvciAo
aW50IGkgPSAxOyBpIDwgbjsgaSsrKSB7CisgICAgICBhcmdbMF0udGhyZWFkLT5zdGF0cy5NZXJn
ZShhcmdbaV0udGhyZWFkLT5zdGF0cyk7CisgICAgfQorICAgIGFyZ1swXS50aHJlYWQtPnN0YXRz
LlJlcG9ydChuYW1lKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAg
ICBkZWxldGUgYXJnW2ldLnRocmVhZDsKKyAgICB9CisgICAgZGVsZXRlW10gYXJnOworICB9CisK
KyAgdm9pZCBDcmMzMmMoVGhyZWFkU3RhdGUqIHRocmVhZCkgeworICAgIC8vIENoZWNrc3VtIGFi
b3V0IDUwME1CIG9mIGRhdGEgdG90YWwKKyAgICBjb25zdCBpbnQgc2l6ZSA9IDQwOTY7CisgICAg
Y29uc3QgY2hhciogbGFiZWwgPSAiKDRLIHBlciBvcCkiOworICAgIHN0ZDo6c3RyaW5nIGRhdGEo
c2l6ZSwgJ3gnKTsKKyAgICBpbnQ2NF90IGJ5dGVzID0gMDsKKyAgICB1aW50MzJfdCBjcmMgPSAw
OworICAgIHdoaWxlIChieXRlcyA8IDUwMCAqIDEwNDg1NzYpIHsKKyAgICAgIGNyYyA9IGNyYzMy
Yzo6VmFsdWUoZGF0YS5kYXRhKCksIHNpemUpOworICAgICAgdGhyZWFkLT5zdGF0cy5GaW5pc2hl
ZFNpbmdsZU9wKCk7CisgICAgICBieXRlcyArPSBzaXplOworICAgIH0KKyAgICAvLyBQcmludCBz
byByZXN1bHQgaXMgbm90IGRlYWQKKyAgICBmcHJpbnRmKHN0ZGVyciwgIi4uLiBjcmM9MHgleFxy
Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihjcmMpKTsKKworICAgIHRocmVhZC0+c3RhdHMu
QWRkQnl0ZXMoYnl0ZXMpOworICAgIHRocmVhZC0+c3RhdHMuQWRkTWVzc2FnZShsYWJlbCk7Cisg
IH0KKworICB2b2lkIEFjcXVpcmVMb2FkKFRocmVhZFN0YXRlKiB0aHJlYWQpIHsKKyAgICBpbnQg
ZHVtbXk7CisgICAgcG9ydDo6QXRvbWljUG9pbnRlciBhcCgmZHVtbXkpOworICAgIGludCBjb3Vu
dCA9IDA7CisgICAgdm9pZCAqcHRyID0gTlVMTDsKKyAgICB0aHJlYWQtPnN0YXRzLkFkZE1lc3Nh
Z2UoIihlYWNoIG9wIGlzIDEwMDAgbG9hZHMpIik7CisgICAgd2hpbGUgKGNvdW50IDwgMTAwMDAw
KSB7CisgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwMDA7IGkrKykgeworICAgICAgICBwdHIg
PSBhcC5BY3F1aXJlX0xvYWQoKTsKKyAgICAgIH0KKyAgICAgIGNvdW50Kys7CisgICAgICB0aHJl
YWQtPnN0YXRzLkZpbmlzaGVkU2luZ2xlT3AoKTsKKyAgICB9CisgICAgaWYgKHB0ciA9PSBOVUxM
KSBleGl0KDEpOyAvLyBEaXNhYmxlIHVudXNlZCB2YXJpYWJsZSB3YXJuaW5nLgorICB9CisKKyAg
dm9pZCBTbmFwcHlDb21wcmVzcyhUaHJlYWRTdGF0ZSogdGhyZWFkKSB7CisgICAgUmFuZG9tR2Vu
ZXJhdG9yIGdlbjsKKyAgICBTbGljZSBpbnB1dCA9IGdlbi5HZW5lcmF0ZShPcHRpb25zKCkuYmxv
Y2tfc2l6ZSk7CisgICAgaW50NjRfdCBieXRlcyA9IDA7CisgICAgaW50NjRfdCBwcm9kdWNlZCA9
IDA7CisgICAgYm9vbCBvayA9IHRydWU7CisgICAgc3RkOjpzdHJpbmcgY29tcHJlc3NlZDsKKyAg
ICB3aGlsZSAob2sgJiYgYnl0ZXMgPCAxMDI0ICogMTA0ODU3NikgeyAgLy8gQ29tcHJlc3MgMUcK
KyAgICAgIG9rID0gcG9ydDo6U25hcHB5X0NvbXByZXNzKGlucHV0LmRhdGEoKSwgaW5wdXQuc2l6
ZSgpLCAmY29tcHJlc3NlZCk7CisgICAgICBwcm9kdWNlZCArPSBjb21wcmVzc2VkLnNpemUoKTsK
KyAgICAgIGJ5dGVzICs9IGlucHV0LnNpemUoKTsKKyAgICAgIHRocmVhZC0+c3RhdHMuRmluaXNo
ZWRTaW5nbGVPcCgpOworICAgIH0KKworICAgIGlmICghb2spIHsKKyAgICAgIHRocmVhZC0+c3Rh
dHMuQWRkTWVzc2FnZSgiKHNuYXBweSBmYWlsdXJlKSIpOworICAgIH0gZWxzZSB7CisgICAgICBj
aGFyIGJ1ZlsxMDBdOworICAgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIihvdXRwdXQ6
ICUuMWYlJSkiLAorICAgICAgICAgICAgICAgKHByb2R1Y2VkICogMTAwLjApIC8gYnl0ZXMpOwor
ICAgICAgdGhyZWFkLT5zdGF0cy5BZGRNZXNzYWdlKGJ1Zik7CisgICAgICB0aHJlYWQtPnN0YXRz
LkFkZEJ5dGVzKGJ5dGVzKTsKKyAgICB9CisgIH0KKworICB2b2lkIFNuYXBweVVuY29tcHJlc3Mo
VGhyZWFkU3RhdGUqIHRocmVhZCkgeworICAgIFJhbmRvbUdlbmVyYXRvciBnZW47CisgICAgU2xp
Y2UgaW5wdXQgPSBnZW4uR2VuZXJhdGUoT3B0aW9ucygpLmJsb2NrX3NpemUpOworICAgIHN0ZDo6
c3RyaW5nIGNvbXByZXNzZWQ7CisgICAgYm9vbCBvayA9IHBvcnQ6OlNuYXBweV9Db21wcmVzcyhp
bnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgJmNvbXByZXNzZWQpOworICAgIGludDY0X3QgYnl0
ZXMgPSAwOworICAgIGNoYXIqIHVuY29tcHJlc3NlZCA9IG5ldyBjaGFyW2lucHV0LnNpemUoKV07
CisgICAgd2hpbGUgKG9rICYmIGJ5dGVzIDwgMTAyNCAqIDEwNDg1NzYpIHsgIC8vIENvbXByZXNz
IDFHCisgICAgICBvayA9ICBwb3J0OjpTbmFwcHlfVW5jb21wcmVzcyhjb21wcmVzc2VkLmRhdGEo
KSwgY29tcHJlc3NlZC5zaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bmNvbXByZXNzZWQpOworICAgICAgYnl0ZXMgKz0gaW5wdXQuc2l6ZSgpOworICAgICAgdGhy
ZWFkLT5zdGF0cy5GaW5pc2hlZFNpbmdsZU9wKCk7CisgICAgfQorICAgIGRlbGV0ZVtdIHVuY29t
cHJlc3NlZDsKKworICAgIGlmICghb2spIHsKKyAgICAgIHRocmVhZC0+c3RhdHMuQWRkTWVzc2Fn
ZSgiKHNuYXBweSBmYWlsdXJlKSIpOworICAgIH0gZWxzZSB7CisgICAgICB0aHJlYWQtPnN0YXRz
LkFkZEJ5dGVzKGJ5dGVzKTsKKyAgICB9CisgIH0KKworICB2b2lkIE9wZW4oKSB7CisgICAgYXNz
ZXJ0KGRiXyA9PSBOVUxMKTsKKyAgICBPcHRpb25zIG9wdGlvbnM7CisgICAgb3B0aW9ucy5jcmVh
dGVfaWZfbWlzc2luZyA9ICFGTEFHU191c2VfZXhpc3RpbmdfZGI7CisgICAgb3B0aW9ucy5ibG9j
a19jYWNoZSA9IGNhY2hlXzsKKyAgICBvcHRpb25zLndyaXRlX2J1ZmZlcl9zaXplID0gRkxBR1Nf
d3JpdGVfYnVmZmVyX3NpemU7CisgICAgb3B0aW9ucy5tYXhfb3Blbl9maWxlcyA9IEZMQUdTX29w
ZW5fZmlsZXM7CisgICAgb3B0aW9ucy5maWx0ZXJfcG9saWN5ID0gZmlsdGVyX3BvbGljeV87Cisg
ICAgU3RhdHVzIHMgPSBEQjo6T3BlbihvcHRpb25zLCBGTEFHU19kYiwgJmRiXyk7CisgICAgaWYg
KCFzLm9rKCkpIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAib3BlbiBlcnJvcjogJXNcbiIsIHMu
VG9TdHJpbmcoKS5jX3N0cigpKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorICB9CisKKyAgdm9p
ZCBXcml0ZVNlcShUaHJlYWRTdGF0ZSogdGhyZWFkKSB7CisgICAgRG9Xcml0ZSh0aHJlYWQsIHRy
dWUpOworICB9CisKKyAgdm9pZCBXcml0ZVJhbmRvbShUaHJlYWRTdGF0ZSogdGhyZWFkKSB7Cisg
ICAgRG9Xcml0ZSh0aHJlYWQsIGZhbHNlKTsKKyAgfQorCisgIHZvaWQgRG9Xcml0ZShUaHJlYWRT
dGF0ZSogdGhyZWFkLCBib29sIHNlcSkgeworICAgIGlmIChudW1fICE9IEZMQUdTX251bSkgewor
ICAgICAgY2hhciBtc2dbMTAwXTsKKyAgICAgIHNucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksICIo
JWQgb3BzKSIsIG51bV8pOworICAgICAgdGhyZWFkLT5zdGF0cy5BZGRNZXNzYWdlKG1zZyk7Cisg
ICAgfQorCisgICAgUmFuZG9tR2VuZXJhdG9yIGdlbjsKKyAgICBXcml0ZUJhdGNoIGJhdGNoOwor
ICAgIFN0YXR1cyBzOworICAgIGludDY0X3QgYnl0ZXMgPSAwOworICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbnVtXzsgaSArPSBlbnRyaWVzX3Blcl9iYXRjaF8pIHsKKyAgICAgIGJhdGNoLkNsZWFy
KCk7CisgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGVudHJpZXNfcGVyX2JhdGNoXzsgaisrKSB7
CisgICAgICAgIGNvbnN0IGludCBrID0gc2VxID8gaStqIDogKHRocmVhZC0+cmFuZC5OZXh0KCkg
JSBGTEFHU19udW0pOworICAgICAgICBjaGFyIGtleVsxMDBdOworICAgICAgICBzbnByaW50Zihr
ZXksIHNpemVvZihrZXkpLCAiJTAxNmQiLCBrKTsKKyAgICAgICAgYmF0Y2guUHV0KGtleSwgZ2Vu
LkdlbmVyYXRlKHZhbHVlX3NpemVfKSk7CisgICAgICAgIGJ5dGVzICs9IHZhbHVlX3NpemVfICsg
c3RybGVuKGtleSk7CisgICAgICAgIHRocmVhZC0+c3RhdHMuRmluaXNoZWRTaW5nbGVPcCgpOwor
ICAgICAgfQorICAgICAgcyA9IGRiXy0+V3JpdGUod3JpdGVfb3B0aW9uc18sICZiYXRjaCk7Cisg
ICAgICBpZiAoIXMub2soKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInB1dCBlcnJvcjog
JXNcbiIsIHMuVG9TdHJpbmcoKS5jX3N0cigpKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICAgIH0K
KyAgICB9CisgICAgdGhyZWFkLT5zdGF0cy5BZGRCeXRlcyhieXRlcyk7CisgIH0KKworICB2b2lk
IFJlYWRTZXF1ZW50aWFsKFRocmVhZFN0YXRlKiB0aHJlYWQpIHsKKyAgICBJdGVyYXRvciogaXRl
ciA9IGRiXy0+TmV3SXRlcmF0b3IoUmVhZE9wdGlvbnMoKSk7CisgICAgaW50IGkgPSAwOworICAg
IGludDY0X3QgYnl0ZXMgPSAwOworICAgIGZvciAoaXRlci0+U2Vla1RvRmlyc3QoKTsgaSA8IHJl
YWRzXyAmJiBpdGVyLT5WYWxpZCgpOyBpdGVyLT5OZXh0KCkpIHsKKyAgICAgIGJ5dGVzICs9IGl0
ZXItPmtleSgpLnNpemUoKSArIGl0ZXItPnZhbHVlKCkuc2l6ZSgpOworICAgICAgdGhyZWFkLT5z
dGF0cy5GaW5pc2hlZFNpbmdsZU9wKCk7CisgICAgICArK2k7CisgICAgfQorICAgIGRlbGV0ZSBp
dGVyOworICAgIHRocmVhZC0+c3RhdHMuQWRkQnl0ZXMoYnl0ZXMpOworICB9CisKKyAgdm9pZCBS
ZWFkUmV2ZXJzZShUaHJlYWRTdGF0ZSogdGhyZWFkKSB7CisgICAgSXRlcmF0b3IqIGl0ZXIgPSBk
Yl8tPk5ld0l0ZXJhdG9yKFJlYWRPcHRpb25zKCkpOworICAgIGludCBpID0gMDsKKyAgICBpbnQ2
NF90IGJ5dGVzID0gMDsKKyAgICBmb3IgKGl0ZXItPlNlZWtUb0xhc3QoKTsgaSA8IHJlYWRzXyAm
JiBpdGVyLT5WYWxpZCgpOyBpdGVyLT5QcmV2KCkpIHsKKyAgICAgIGJ5dGVzICs9IGl0ZXItPmtl
eSgpLnNpemUoKSArIGl0ZXItPnZhbHVlKCkuc2l6ZSgpOworICAgICAgdGhyZWFkLT5zdGF0cy5G
aW5pc2hlZFNpbmdsZU9wKCk7CisgICAgICArK2k7CisgICAgfQorICAgIGRlbGV0ZSBpdGVyOwor
ICAgIHRocmVhZC0+c3RhdHMuQWRkQnl0ZXMoYnl0ZXMpOworICB9CisKKyAgdm9pZCBSZWFkUmFu
ZG9tKFRocmVhZFN0YXRlKiB0aHJlYWQpIHsKKyAgICBSZWFkT3B0aW9ucyBvcHRpb25zOworICAg
IHN0ZDo6c3RyaW5nIHZhbHVlOworICAgIGludCBmb3VuZCA9IDA7CisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCByZWFkc187IGkrKykgeworICAgICAgY2hhciBrZXlbMTAwXTsKKyAgICAgIGNvbnN0
IGludCBrID0gdGhyZWFkLT5yYW5kLk5leHQoKSAlIEZMQUdTX251bTsKKyAgICAgIHNucHJpbnRm
KGtleSwgc2l6ZW9mKGtleSksICIlMDE2ZCIsIGspOworICAgICAgaWYgKGRiXy0+R2V0KG9wdGlv
bnMsIGtleSwgJnZhbHVlKS5vaygpKSB7CisgICAgICAgIGZvdW5kKys7CisgICAgICB9CisgICAg
ICB0aHJlYWQtPnN0YXRzLkZpbmlzaGVkU2luZ2xlT3AoKTsKKyAgICB9CisgICAgY2hhciBtc2db
MTAwXTsKKyAgICBzbnByaW50Zihtc2csIHNpemVvZihtc2cpLCAiKCVkIG9mICVkIGZvdW5kKSIs
IGZvdW5kLCBudW1fKTsKKyAgICB0aHJlYWQtPnN0YXRzLkFkZE1lc3NhZ2UobXNnKTsKKyAgfQor
CisgIHZvaWQgUmVhZE1pc3NpbmcoVGhyZWFkU3RhdGUqIHRocmVhZCkgeworICAgIFJlYWRPcHRp
b25zIG9wdGlvbnM7CisgICAgc3RkOjpzdHJpbmcgdmFsdWU7CisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCByZWFkc187IGkrKykgeworICAgICAgY2hhciBrZXlbMTAwXTsKKyAgICAgIGNvbnN0IGlu
dCBrID0gdGhyZWFkLT5yYW5kLk5leHQoKSAlIEZMQUdTX251bTsKKyAgICAgIHNucHJpbnRmKGtl
eSwgc2l6ZW9mKGtleSksICIlMDE2ZC4iLCBrKTsKKyAgICAgIGRiXy0+R2V0KG9wdGlvbnMsIGtl
eSwgJnZhbHVlKTsKKyAgICAgIHRocmVhZC0+c3RhdHMuRmluaXNoZWRTaW5nbGVPcCgpOworICAg
IH0KKyAgfQorCisgIHZvaWQgUmVhZEhvdChUaHJlYWRTdGF0ZSogdGhyZWFkKSB7CisgICAgUmVh
ZE9wdGlvbnMgb3B0aW9uczsKKyAgICBzdGQ6OnN0cmluZyB2YWx1ZTsKKyAgICBjb25zdCBpbnQg
cmFuZ2UgPSAoRkxBR1NfbnVtICsgOTkpIC8gMTAwOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
cmVhZHNfOyBpKyspIHsKKyAgICAgIGNoYXIga2V5WzEwMF07CisgICAgICBjb25zdCBpbnQgayA9
IHRocmVhZC0+cmFuZC5OZXh0KCkgJSByYW5nZTsKKyAgICAgIHNucHJpbnRmKGtleSwgc2l6ZW9m
KGtleSksICIlMDE2ZCIsIGspOworICAgICAgZGJfLT5HZXQob3B0aW9ucywga2V5LCAmdmFsdWUp
OworICAgICAgdGhyZWFkLT5zdGF0cy5GaW5pc2hlZFNpbmdsZU9wKCk7CisgICAgfQorICB9CisK
KyAgdm9pZCBTZWVrUmFuZG9tKFRocmVhZFN0YXRlKiB0aHJlYWQpIHsKKyAgICBSZWFkT3B0aW9u
cyBvcHRpb25zOworICAgIHN0ZDo6c3RyaW5nIHZhbHVlOworICAgIGludCBmb3VuZCA9IDA7Cisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWFkc187IGkrKykgeworICAgICAgSXRlcmF0b3IqIGl0
ZXIgPSBkYl8tPk5ld0l0ZXJhdG9yKG9wdGlvbnMpOworICAgICAgY2hhciBrZXlbMTAwXTsKKyAg
ICAgIGNvbnN0IGludCBrID0gdGhyZWFkLT5yYW5kLk5leHQoKSAlIEZMQUdTX251bTsKKyAgICAg
IHNucHJpbnRmKGtleSwgc2l6ZW9mKGtleSksICIlMDE2ZCIsIGspOworICAgICAgaXRlci0+U2Vl
ayhrZXkpOworICAgICAgaWYgKGl0ZXItPlZhbGlkKCkgJiYgaXRlci0+a2V5KCkgPT0ga2V5KSBm
b3VuZCsrOworICAgICAgZGVsZXRlIGl0ZXI7CisgICAgICB0aHJlYWQtPnN0YXRzLkZpbmlzaGVk
U2luZ2xlT3AoKTsKKyAgICB9CisgICAgY2hhciBtc2dbMTAwXTsKKyAgICBzbnByaW50Zihtc2cs
IHNpemVvZihtc2cpLCAiKCVkIG9mICVkIGZvdW5kKSIsIGZvdW5kLCBudW1fKTsKKyAgICB0aHJl
YWQtPnN0YXRzLkFkZE1lc3NhZ2UobXNnKTsKKyAgfQorCisgIHZvaWQgRG9EZWxldGUoVGhyZWFk
U3RhdGUqIHRocmVhZCwgYm9vbCBzZXEpIHsKKyAgICBSYW5kb21HZW5lcmF0b3IgZ2VuOworICAg
IFdyaXRlQmF0Y2ggYmF0Y2g7CisgICAgU3RhdHVzIHM7CisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBudW1fOyBpICs9IGVudHJpZXNfcGVyX2JhdGNoXykgeworICAgICAgYmF0Y2guQ2xlYXIoKTsK
KyAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZW50cmllc19wZXJfYmF0Y2hfOyBqKyspIHsKKyAg
ICAgICAgY29uc3QgaW50IGsgPSBzZXEgPyBpK2ogOiAodGhyZWFkLT5yYW5kLk5leHQoKSAlIEZM
QUdTX251bSk7CisgICAgICAgIGNoYXIga2V5WzEwMF07CisgICAgICAgIHNucHJpbnRmKGtleSwg
c2l6ZW9mKGtleSksICIlMDE2ZCIsIGspOworICAgICAgICBiYXRjaC5EZWxldGUoa2V5KTsKKyAg
ICAgICAgdGhyZWFkLT5zdGF0cy5GaW5pc2hlZFNpbmdsZU9wKCk7CisgICAgICB9CisgICAgICBz
ID0gZGJfLT5Xcml0ZSh3cml0ZV9vcHRpb25zXywgJmJhdGNoKTsKKyAgICAgIGlmICghcy5vaygp
KSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZGVsIGVycm9yOiAlc1xuIiwgcy5Ub1N0cmlu
ZygpLmNfc3RyKCkpOworICAgICAgICBleGl0KDEpOworICAgICAgfQorICAgIH0KKyAgfQorCisg
IHZvaWQgRGVsZXRlU2VxKFRocmVhZFN0YXRlKiB0aHJlYWQpIHsKKyAgICBEb0RlbGV0ZSh0aHJl
YWQsIHRydWUpOworICB9CisKKyAgdm9pZCBEZWxldGVSYW5kb20oVGhyZWFkU3RhdGUqIHRocmVh
ZCkgeworICAgIERvRGVsZXRlKHRocmVhZCwgZmFsc2UpOworICB9CisKKyAgdm9pZCBSZWFkV2hp
bGVXcml0aW5nKFRocmVhZFN0YXRlKiB0aHJlYWQpIHsKKyAgICBpZiAodGhyZWFkLT50aWQgPiAw
KSB7CisgICAgICBSZWFkUmFuZG9tKHRocmVhZCk7CisgICAgfSBlbHNlIHsKKyAgICAgIC8vIFNw
ZWNpYWwgdGhyZWFkIHRoYXQga2VlcHMgd3JpdGluZyB1bnRpbCBvdGhlciB0aHJlYWRzIGFyZSBk
b25lLgorICAgICAgUmFuZG9tR2VuZXJhdG9yIGdlbjsKKyAgICAgIHdoaWxlICh0cnVlKSB7Cisg
ICAgICAgIHsKKyAgICAgICAgICBNdXRleExvY2sgbCgmdGhyZWFkLT5zaGFyZWQtPm11KTsKKyAg
ICAgICAgICBpZiAodGhyZWFkLT5zaGFyZWQtPm51bV9kb25lICsgMSA+PSB0aHJlYWQtPnNoYXJl
ZC0+bnVtX2luaXRpYWxpemVkKSB7CisgICAgICAgICAgICAvLyBPdGhlciB0aHJlYWRzIGhhdmUg
ZmluaXNoZWQKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIGNvbnN0IGludCBrID0gdGhyZWFkLT5yYW5kLk5leHQoKSAlIEZMQUdTX251bTsKKyAg
ICAgICAgY2hhciBrZXlbMTAwXTsKKyAgICAgICAgc25wcmludGYoa2V5LCBzaXplb2Yoa2V5KSwg
IiUwMTZkIiwgayk7CisgICAgICAgIFN0YXR1cyBzID0gZGJfLT5QdXQod3JpdGVfb3B0aW9uc18s
IGtleSwgZ2VuLkdlbmVyYXRlKHZhbHVlX3NpemVfKSk7CisgICAgICAgIGlmICghcy5vaygpKSB7
CisgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJwdXQgZXJyb3I6ICVzXG4iLCBzLlRvU3RyaW5n
KCkuY19zdHIoKSk7CisgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfQorICAgICAgfQorCisg
ICAgICAvLyBEbyBub3QgY291bnQgYW55IG9mIHRoZSBwcmVjZWRpbmcgd29yay9kZWxheSBpbiBz
dGF0cy4KKyAgICAgIHRocmVhZC0+c3RhdHMuU3RhcnQoKTsKKyAgICB9CisgIH0KKworICB2b2lk
IENvbXBhY3QoVGhyZWFkU3RhdGUqIHRocmVhZCkgeworICAgIGRiXy0+Q29tcGFjdFJhbmdlKE5V
TEwsIE5VTEwpOworICB9CisKKyAgdm9pZCBQcmludFN0YXRzKGNvbnN0IGNoYXIqIGtleSkgewor
ICAgIHN0ZDo6c3RyaW5nIHN0YXRzOworICAgIGlmICghZGJfLT5HZXRQcm9wZXJ0eShrZXksICZz
dGF0cykpIHsKKyAgICAgIHN0YXRzID0gIihmYWlsZWQpIjsKKyAgICB9CisgICAgZnByaW50Zihz
dGRvdXQsICJcbiVzXG4iLCBzdGF0cy5jX3N0cigpKTsKKyAgfQorCisgIHN0YXRpYyB2b2lkIFdy
aXRlVG9GaWxlKHZvaWQqIGFyZywgY29uc3QgY2hhciogYnVmLCBpbnQgbikgeworICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8V3JpdGFibGVGaWxlKj4oYXJnKS0+QXBwZW5kKFNsaWNlKGJ1ZiwgbikpOwor
ICB9CisKKyAgdm9pZCBIZWFwUHJvZmlsZSgpIHsKKyAgICBjaGFyIGZuYW1lWzEwMF07CisgICAg
c25wcmludGYoZm5hbWUsIHNpemVvZihmbmFtZSksICIlcy9oZWFwLSUwNGQiLCBGTEFHU19kYiwg
KytoZWFwX2NvdW50ZXJfKTsKKyAgICBXcml0YWJsZUZpbGUqIGZpbGU7CisgICAgU3RhdHVzIHMg
PSBFbnY6OkRlZmF1bHQoKS0+TmV3V3JpdGFibGVGaWxlKGZuYW1lLCAmZmlsZSk7CisgICAgaWYg
KCFzLm9rKCkpIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsIHMuVG9TdHJpbmcoKS5j
X3N0cigpKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgYm9vbCBvayA9IHBvcnQ6OkdldEhl
YXBQcm9maWxlKFdyaXRlVG9GaWxlLCBmaWxlKTsKKyAgICBkZWxldGUgZmlsZTsKKyAgICBpZiAo
IW9rKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgImhlYXAgcHJvZmlsaW5nIG5vdCBzdXBwb3J0
ZWRcbiIpOworICAgICAgRW52OjpEZWZhdWx0KCktPkRlbGV0ZUZpbGUoZm5hbWUpOworICAgIH0K
KyAgfQorfTsKKworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKKworaW50IG1haW4oaW50IGFyZ2Ms
IGNoYXIqKiBhcmd2KSB7CisgIEZMQUdTX3dyaXRlX2J1ZmZlcl9zaXplID0gbGV2ZWxkYjo6T3B0
aW9ucygpLndyaXRlX2J1ZmZlcl9zaXplOworICBGTEFHU19vcGVuX2ZpbGVzID0gbGV2ZWxkYjo6
T3B0aW9ucygpLm1heF9vcGVuX2ZpbGVzOworICBzdGQ6OnN0cmluZyBkZWZhdWx0X2RiX3BhdGg7
CisKKyAgZm9yIChpbnQgaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKKyAgICBkb3VibGUgZDsKKyAg
ICBpbnQgbjsKKyAgICBjaGFyIGp1bms7CisgICAgaWYgKGxldmVsZGI6OlNsaWNlKGFyZ3ZbaV0p
LnN0YXJ0c193aXRoKCItLWJlbmNobWFya3M9IikpIHsKKyAgICAgIEZMQUdTX2JlbmNobWFya3Mg
PSBhcmd2W2ldICsgc3RybGVuKCItLWJlbmNobWFya3M9Iik7CisgICAgfSBlbHNlIGlmIChzc2Nh
bmYoYXJndltpXSwgIi0tY29tcHJlc3Npb25fcmF0aW89JWxmJWMiLCAmZCwgJmp1bmspID09IDEp
IHsKKyAgICAgIEZMQUdTX2NvbXByZXNzaW9uX3JhdGlvID0gZDsKKyAgICB9IGVsc2UgaWYgKHNz
Y2FuZihhcmd2W2ldLCAiLS1oaXN0b2dyYW09JWQlYyIsICZuLCAmanVuaykgPT0gMSAmJgorICAg
ICAgICAgICAgICAgKG4gPT0gMCB8fCBuID09IDEpKSB7CisgICAgICBGTEFHU19oaXN0b2dyYW0g
PSBuOworICAgIH0gZWxzZSBpZiAoc3NjYW5mKGFyZ3ZbaV0sICItLXVzZV9leGlzdGluZ19kYj0l
ZCVjIiwgJm4sICZqdW5rKSA9PSAxICYmCisgICAgICAgICAgICAgICAobiA9PSAwIHx8IG4gPT0g
MSkpIHsKKyAgICAgIEZMQUdTX3VzZV9leGlzdGluZ19kYiA9IG47CisgICAgfSBlbHNlIGlmIChz
c2NhbmYoYXJndltpXSwgIi0tbnVtPSVkJWMiLCAmbiwgJmp1bmspID09IDEpIHsKKyAgICAgIEZM
QUdTX251bSA9IG47CisgICAgfSBlbHNlIGlmIChzc2NhbmYoYXJndltpXSwgIi0tcmVhZHM9JWQl
YyIsICZuLCAmanVuaykgPT0gMSkgeworICAgICAgRkxBR1NfcmVhZHMgPSBuOworICAgIH0gZWxz
ZSBpZiAoc3NjYW5mKGFyZ3ZbaV0sICItLXRocmVhZHM9JWQlYyIsICZuLCAmanVuaykgPT0gMSkg
eworICAgICAgRkxBR1NfdGhyZWFkcyA9IG47CisgICAgfSBlbHNlIGlmIChzc2NhbmYoYXJndltp
XSwgIi0tdmFsdWVfc2l6ZT0lZCVjIiwgJm4sICZqdW5rKSA9PSAxKSB7CisgICAgICBGTEFHU192
YWx1ZV9zaXplID0gbjsKKyAgICB9IGVsc2UgaWYgKHNzY2FuZihhcmd2W2ldLCAiLS13cml0ZV9i
dWZmZXJfc2l6ZT0lZCVjIiwgJm4sICZqdW5rKSA9PSAxKSB7CisgICAgICBGTEFHU193cml0ZV9i
dWZmZXJfc2l6ZSA9IG47CisgICAgfSBlbHNlIGlmIChzc2NhbmYoYXJndltpXSwgIi0tY2FjaGVf
c2l6ZT0lZCVjIiwgJm4sICZqdW5rKSA9PSAxKSB7CisgICAgICBGTEFHU19jYWNoZV9zaXplID0g
bjsKKyAgICB9IGVsc2UgaWYgKHNzY2FuZihhcmd2W2ldLCAiLS1ibG9vbV9iaXRzPSVkJWMiLCAm
biwgJmp1bmspID09IDEpIHsKKyAgICAgIEZMQUdTX2Jsb29tX2JpdHMgPSBuOworICAgIH0gZWxz
ZSBpZiAoc3NjYW5mKGFyZ3ZbaV0sICItLW9wZW5fZmlsZXM9JWQlYyIsICZuLCAmanVuaykgPT0g
MSkgeworICAgICAgRkxBR1Nfb3Blbl9maWxlcyA9IG47CisgICAgfSBlbHNlIGlmIChzdHJuY21w
KGFyZ3ZbaV0sICItLWRiPSIsIDUpID09IDApIHsKKyAgICAgIEZMQUdTX2RiID0gYXJndltpXSAr
IDU7CisgICAgfSBlbHNlIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBmbGFnICcl
cydcbiIsIGFyZ3ZbaV0pOworICAgICAgZXhpdCgxKTsKKyAgICB9CisgIH0KKworICAvLyBDaG9v
c2UgYSBsb2NhdGlvbiBmb3IgdGhlIHRlc3QgZGF0YWJhc2UgaWYgbm9uZSBnaXZlbiB3aXRoIC0t
ZGI9PHBhdGg+CisgIGlmIChGTEFHU19kYiA9PSBOVUxMKSB7CisgICAgICBsZXZlbGRiOjpFbnY6
OkRlZmF1bHQoKS0+R2V0VGVzdERpcmVjdG9yeSgmZGVmYXVsdF9kYl9wYXRoKTsKKyAgICAgIGRl
ZmF1bHRfZGJfcGF0aCArPSAiL2RiYmVuY2giOworICAgICAgRkxBR1NfZGIgPSBkZWZhdWx0X2Ri
X3BhdGguY19zdHIoKTsKKyAgfQorCisgIGxldmVsZGI6OkJlbmNobWFyayBiZW5jaG1hcms7Cisg
IGJlbmNobWFyay5SdW4oKTsKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9sZXZlbGRiL2RiL2RiX2ltcGwuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRi
L2RiL2RiX2ltcGwuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzlkZTE2OWYyOWY2Y2FkMTEyZjg0MjcwMDZiYjdi
YTAzOTFjYjI5ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIv
ZGIvZGJfaW1wbC5jYwpAQCAtMCwwICsxLDE0NjcgQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBU
aGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9y
IG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2luY2x1ZGUgImRiL2RiX2ltcGwuaCIKKworI2lu
Y2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxzZXQ+CisjaW5jbHVkZSA8c3RyaW5nPgorI2lu
Y2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dmVjdG9yPgor
I2luY2x1ZGUgImRiL2J1aWxkZXIuaCIKKyNpbmNsdWRlICJkYi9kYl9pdGVyLmgiCisjaW5jbHVk
ZSAiZGIvZGJmb3JtYXQuaCIKKyNpbmNsdWRlICJkYi9maWxlbmFtZS5oIgorI2luY2x1ZGUgImRi
L2xvZ19yZWFkZXIuaCIKKyNpbmNsdWRlICJkYi9sb2dfd3JpdGVyLmgiCisjaW5jbHVkZSAiZGIv
bWVtdGFibGUuaCIKKyNpbmNsdWRlICJkYi90YWJsZV9jYWNoZS5oIgorI2luY2x1ZGUgImRiL3Zl
cnNpb25fc2V0LmgiCisjaW5jbHVkZSAiZGIvd3JpdGVfYmF0Y2hfaW50ZXJuYWwuaCIKKyNpbmNs
dWRlICJsZXZlbGRiL2RiLmgiCisjaW5jbHVkZSAibGV2ZWxkYi9lbnYuaCIKKyNpbmNsdWRlICJs
ZXZlbGRiL3N0YXR1cy5oIgorI2luY2x1ZGUgImxldmVsZGIvdGFibGUuaCIKKyNpbmNsdWRlICJs
ZXZlbGRiL3RhYmxlX2J1aWxkZXIuaCIKKyNpbmNsdWRlICJwb3J0L3BvcnQuaCIKKyNpbmNsdWRl
ICJ0YWJsZS9ibG9jay5oIgorI2luY2x1ZGUgInRhYmxlL21lcmdlci5oIgorI2luY2x1ZGUgInRh
YmxlL3R3b19sZXZlbF9pdGVyYXRvci5oIgorI2luY2x1ZGUgInV0aWwvY29kaW5nLmgiCisjaW5j
bHVkZSAidXRpbC9sb2dnaW5nLmgiCisjaW5jbHVkZSAidXRpbC9tdXRleGxvY2suaCIKKworbmFt
ZXNwYWNlIGxldmVsZGIgeworCisvLyBJbmZvcm1hdGlvbiBrZXB0IGZvciBldmVyeSB3YWl0aW5n
IHdyaXRlcgorc3RydWN0IERCSW1wbDo6V3JpdGVyIHsKKyAgU3RhdHVzIHN0YXR1czsKKyAgV3Jp
dGVCYXRjaCogYmF0Y2g7CisgIGJvb2wgc3luYzsKKyAgYm9vbCBkb25lOworICBwb3J0OjpDb25k
VmFyIGN2OworCisgIGV4cGxpY2l0IFdyaXRlcihwb3J0OjpNdXRleCogbXUpIDogY3YobXUpIHsg
fQorfTsKKworc3RydWN0IERCSW1wbDo6Q29tcGFjdGlvblN0YXRlIHsKKyAgQ29tcGFjdGlvbiog
Y29uc3QgY29tcGFjdGlvbjsKKworICAvLyBTZXF1ZW5jZSBudW1iZXJzIDwgc21hbGxlc3Rfc25h
cHNob3QgYXJlIG5vdCBzaWduaWZpY2FudCBzaW5jZSB3ZQorICAvLyB3aWxsIG5ldmVyIGhhdmUg
dG8gc2VydmljZSBhIHNuYXBzaG90IGJlbG93IHNtYWxsZXN0X3NuYXBzaG90LgorICAvLyBUaGVy
ZWZvcmUgaWYgd2UgaGF2ZSBzZWVuIGEgc2VxdWVuY2UgbnVtYmVyIFMgPD0gc21hbGxlc3Rfc25h
cHNob3QsCisgIC8vIHdlIGNhbiBkcm9wIGFsbCBlbnRyaWVzIGZvciB0aGUgc2FtZSBrZXkgd2l0
aCBzZXF1ZW5jZSBudW1iZXJzIDwgUy4KKyAgU2VxdWVuY2VOdW1iZXIgc21hbGxlc3Rfc25hcHNo
b3Q7CisKKyAgLy8gRmlsZXMgcHJvZHVjZWQgYnkgY29tcGFjdGlvbgorICBzdHJ1Y3QgT3V0cHV0
IHsKKyAgICB1aW50NjRfdCBudW1iZXI7CisgICAgdWludDY0X3QgZmlsZV9zaXplOworICAgIElu
dGVybmFsS2V5IHNtYWxsZXN0LCBsYXJnZXN0OworICB9OworICBzdGQ6OnZlY3RvcjxPdXRwdXQ+
IG91dHB1dHM7CisKKyAgLy8gU3RhdGUga2VwdCBmb3Igb3V0cHV0IGJlaW5nIGdlbmVyYXRlZAor
ICBXcml0YWJsZUZpbGUqIG91dGZpbGU7CisgIFRhYmxlQnVpbGRlciogYnVpbGRlcjsKKworICB1
aW50NjRfdCB0b3RhbF9ieXRlczsKKworICBPdXRwdXQqIGN1cnJlbnRfb3V0cHV0KCkgeyByZXR1
cm4gJm91dHB1dHNbb3V0cHV0cy5zaXplKCktMV07IH0KKworICBleHBsaWNpdCBDb21wYWN0aW9u
U3RhdGUoQ29tcGFjdGlvbiogYykKKyAgICAgIDogY29tcGFjdGlvbihjKSwKKyAgICAgICAgb3V0
ZmlsZShOVUxMKSwKKyAgICAgICAgYnVpbGRlcihOVUxMKSwKKyAgICAgICAgdG90YWxfYnl0ZXMo
MCkgeworICB9Cit9OworCisvLyBGaXggdXNlci1zdXBwbGllZCBvcHRpb25zIHRvIGJlIHJlYXNv
bmFibGUKK3RlbXBsYXRlIDxjbGFzcyBULGNsYXNzIFY+CitzdGF0aWMgdm9pZCBDbGlwVG9SYW5n
ZShUKiBwdHIsIFYgbWludmFsdWUsIFYgbWF4dmFsdWUpIHsKKyAgaWYgKHN0YXRpY19jYXN0PFY+
KCpwdHIpID4gbWF4dmFsdWUpICpwdHIgPSBtYXh2YWx1ZTsKKyAgaWYgKHN0YXRpY19jYXN0PFY+
KCpwdHIpIDwgbWludmFsdWUpICpwdHIgPSBtaW52YWx1ZTsKK30KK09wdGlvbnMgU2FuaXRpemVP
cHRpb25zKGNvbnN0IHN0ZDo6c3RyaW5nJiBkYm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBJbnRlcm5hbEtleUNvbXBhcmF0b3IqIGljbXAsCisgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBJbnRlcm5hbEZpbHRlclBvbGljeSogaXBvbGljeSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IE9wdGlvbnMmIHNyYykgeworICBPcHRpb25zIHJlc3VsdCA9IHNyYzsK
KyAgcmVzdWx0LmNvbXBhcmF0b3IgPSBpY21wOworICByZXN1bHQuZmlsdGVyX3BvbGljeSA9IChz
cmMuZmlsdGVyX3BvbGljeSAhPSBOVUxMKSA/IGlwb2xpY3kgOiBOVUxMOworICBDbGlwVG9SYW5n
ZSgmcmVzdWx0Lm1heF9vcGVuX2ZpbGVzLCAgICAgICAgICAgIDIwLCAgICAgNTAwMDApOworICBD
bGlwVG9SYW5nZSgmcmVzdWx0LndyaXRlX2J1ZmZlcl9zaXplLCAgICAgICAgIDY0PDwxMCwgMTw8
MzApOworICBDbGlwVG9SYW5nZSgmcmVzdWx0LmJsb2NrX3NpemUsICAgICAgICAgICAgICAgIDE8
PDEwLCAgNDw8MjApOworICBpZiAocmVzdWx0LmluZm9fbG9nID09IE5VTEwpIHsKKyAgICAvLyBP
cGVuIGEgbG9nIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBkYgorICAgIHNyYy5l
bnYtPkNyZWF0ZURpcihkYm5hbWUpOyAgLy8gSW4gY2FzZSBpdCBkb2VzIG5vdCBleGlzdAorICAg
IHNyYy5lbnYtPlJlbmFtZUZpbGUoSW5mb0xvZ0ZpbGVOYW1lKGRibmFtZSksIE9sZEluZm9Mb2dG
aWxlTmFtZShkYm5hbWUpKTsKKyAgICBTdGF0dXMgcyA9IHNyYy5lbnYtPk5ld0xvZ2dlcihJbmZv
TG9nRmlsZU5hbWUoZGJuYW1lKSwgJnJlc3VsdC5pbmZvX2xvZyk7CisgICAgaWYgKCFzLm9rKCkp
IHsKKyAgICAgIC8vIE5vIHBsYWNlIHN1aXRhYmxlIGZvciBsb2dnaW5nCisgICAgICByZXN1bHQu
aW5mb19sb2cgPSBOVUxMOworICAgIH0KKyAgfQorICBpZiAocmVzdWx0LmJsb2NrX2NhY2hlID09
IE5VTEwpIHsKKyAgICByZXN1bHQuYmxvY2tfY2FjaGUgPSBOZXdMUlVDYWNoZSg4IDw8IDIwKTsK
KyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCitEQkltcGw6OkRCSW1wbChjb25zdCBPcHRpb25z
JiBvcHRpb25zLCBjb25zdCBzdGQ6OnN0cmluZyYgZGJuYW1lKQorICAgIDogZW52XyhvcHRpb25z
LmVudiksCisgICAgICBpbnRlcm5hbF9jb21wYXJhdG9yXyhvcHRpb25zLmNvbXBhcmF0b3IpLAor
ICAgICAgaW50ZXJuYWxfZmlsdGVyX3BvbGljeV8ob3B0aW9ucy5maWx0ZXJfcG9saWN5KSwKKyAg
ICAgIG9wdGlvbnNfKFNhbml0aXplT3B0aW9ucygKKyAgICAgICAgICBkYm5hbWUsICZpbnRlcm5h
bF9jb21wYXJhdG9yXywgJmludGVybmFsX2ZpbHRlcl9wb2xpY3lfLCBvcHRpb25zKSksCisgICAg
ICBvd25zX2luZm9fbG9nXyhvcHRpb25zXy5pbmZvX2xvZyAhPSBvcHRpb25zLmluZm9fbG9nKSwK
KyAgICAgIG93bnNfY2FjaGVfKG9wdGlvbnNfLmJsb2NrX2NhY2hlICE9IG9wdGlvbnMuYmxvY2tf
Y2FjaGUpLAorICAgICAgZGJuYW1lXyhkYm5hbWUpLAorICAgICAgZGJfbG9ja18oTlVMTCksCisg
ICAgICBzaHV0dGluZ19kb3duXyhOVUxMKSwKKyAgICAgIGJnX2N2XygmbXV0ZXhfKSwKKyAgICAg
IG1lbV8obmV3IE1lbVRhYmxlKGludGVybmFsX2NvbXBhcmF0b3JfKSksCisgICAgICBpbW1fKE5V
TEwpLAorICAgICAgbG9nZmlsZV8oTlVMTCksCisgICAgICBsb2dmaWxlX251bWJlcl8oMCksCisg
ICAgICBsb2dfKE5VTEwpLAorICAgICAgdG1wX2JhdGNoXyhuZXcgV3JpdGVCYXRjaCksCisgICAg
ICBiZ19jb21wYWN0aW9uX3NjaGVkdWxlZF8oZmFsc2UpLAorICAgICAgbWFudWFsX2NvbXBhY3Rp
b25fKE5VTEwpIHsKKyAgbWVtXy0+UmVmKCk7CisgIGhhc19pbW1fLlJlbGVhc2VfU3RvcmUoTlVM
TCk7CisKKyAgLy8gUmVzZXJ2ZSB0ZW4gZmlsZXMgb3Igc28gZm9yIG90aGVyIHVzZXMgYW5kIGdp
dmUgdGhlIHJlc3QgdG8gVGFibGVDYWNoZS4KKyAgY29uc3QgaW50IHRhYmxlX2NhY2hlX3NpemUg
PSBvcHRpb25zLm1heF9vcGVuX2ZpbGVzIC0gMTA7CisgIHRhYmxlX2NhY2hlXyA9IG5ldyBUYWJs
ZUNhY2hlKGRibmFtZV8sICZvcHRpb25zXywgdGFibGVfY2FjaGVfc2l6ZSk7CisKKyAgdmVyc2lv
bnNfID0gbmV3IFZlcnNpb25TZXQoZGJuYW1lXywgJm9wdGlvbnNfLCB0YWJsZV9jYWNoZV8sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbnRlcm5hbF9jb21wYXJhdG9yXyk7Cit9CisK
K0RCSW1wbDo6fkRCSW1wbCgpIHsKKyAgLy8gV2FpdCBmb3IgYmFja2dyb3VuZCB3b3JrIHRvIGZp
bmlzaAorICBtdXRleF8uTG9jaygpOworICBzaHV0dGluZ19kb3duXy5SZWxlYXNlX1N0b3JlKHRo
aXMpOyAgLy8gQW55IG5vbi1OVUxMIHZhbHVlIGlzIG9rCisgIHdoaWxlIChiZ19jb21wYWN0aW9u
X3NjaGVkdWxlZF8pIHsKKyAgICBiZ19jdl8uV2FpdCgpOworICB9CisgIG11dGV4Xy5VbmxvY2so
KTsKKworICBpZiAoZGJfbG9ja18gIT0gTlVMTCkgeworICAgIGVudl8tPlVubG9ja0ZpbGUoZGJf
bG9ja18pOworICB9CisKKyAgZGVsZXRlIHZlcnNpb25zXzsKKyAgaWYgKG1lbV8gIT0gTlVMTCkg
bWVtXy0+VW5yZWYoKTsKKyAgaWYgKGltbV8gIT0gTlVMTCkgaW1tXy0+VW5yZWYoKTsKKyAgZGVs
ZXRlIHRtcF9iYXRjaF87CisgIGRlbGV0ZSBsb2dfOworICBkZWxldGUgbG9nZmlsZV87CisgIGRl
bGV0ZSB0YWJsZV9jYWNoZV87CisKKyAgaWYgKG93bnNfaW5mb19sb2dfKSB7CisgICAgZGVsZXRl
IG9wdGlvbnNfLmluZm9fbG9nOworICB9CisgIGlmIChvd25zX2NhY2hlXykgeworICAgIGRlbGV0
ZSBvcHRpb25zXy5ibG9ja19jYWNoZTsKKyAgfQorfQorCitTdGF0dXMgREJJbXBsOjpOZXdEQigp
IHsKKyAgVmVyc2lvbkVkaXQgbmV3X2RiOworICBuZXdfZGIuU2V0Q29tcGFyYXRvck5hbWUodXNl
cl9jb21wYXJhdG9yKCktPk5hbWUoKSk7CisgIG5ld19kYi5TZXRMb2dOdW1iZXIoMCk7CisgIG5l
d19kYi5TZXROZXh0RmlsZSgyKTsKKyAgbmV3X2RiLlNldExhc3RTZXF1ZW5jZSgwKTsKKworICBj
b25zdCBzdGQ6OnN0cmluZyBtYW5pZmVzdCA9IERlc2NyaXB0b3JGaWxlTmFtZShkYm5hbWVfLCAx
KTsKKyAgV3JpdGFibGVGaWxlKiBmaWxlOworICBTdGF0dXMgcyA9IGVudl8tPk5ld1dyaXRhYmxl
RmlsZShtYW5pZmVzdCwgJmZpbGUpOworICBpZiAoIXMub2soKSkgeworICAgIHJldHVybiBzOwor
ICB9CisgIHsKKyAgICBsb2c6OldyaXRlciBsb2coZmlsZSk7CisgICAgc3RkOjpzdHJpbmcgcmVj
b3JkOworICAgIG5ld19kYi5FbmNvZGVUbygmcmVjb3JkKTsKKyAgICBzID0gbG9nLkFkZFJlY29y
ZChyZWNvcmQpOworICAgIGlmIChzLm9rKCkpIHsKKyAgICAgIHMgPSBmaWxlLT5DbG9zZSgpOwor
ICAgIH0KKyAgfQorICBkZWxldGUgZmlsZTsKKyAgaWYgKHMub2soKSkgeworICAgIC8vIE1ha2Ug
IkNVUlJFTlQiIGZpbGUgdGhhdCBwb2ludHMgdG8gdGhlIG5ldyBtYW5pZmVzdCBmaWxlLgorICAg
IHMgPSBTZXRDdXJyZW50RmlsZShlbnZfLCBkYm5hbWVfLCAxKTsKKyAgfSBlbHNlIHsKKyAgICBl
bnZfLT5EZWxldGVGaWxlKG1hbmlmZXN0KTsKKyAgfQorICByZXR1cm4gczsKK30KKwordm9pZCBE
QkltcGw6Ok1heWJlSWdub3JlRXJyb3IoU3RhdHVzKiBzKSBjb25zdCB7CisgIGlmIChzLT5vaygp
IHx8IG9wdGlvbnNfLnBhcmFub2lkX2NoZWNrcykgeworICAgIC8vIE5vIGNoYW5nZSBuZWVkZWQK
KyAgfSBlbHNlIHsKKyAgICBMb2cob3B0aW9uc18uaW5mb19sb2csICJJZ25vcmluZyBlcnJvciAl
cyIsIHMtPlRvU3RyaW5nKCkuY19zdHIoKSk7CisgICAgKnMgPSBTdGF0dXM6Ok9LKCk7CisgIH0K
K30KKwordm9pZCBEQkltcGw6OkRlbGV0ZU9ic29sZXRlRmlsZXMoKSB7CisgIC8vIE1ha2UgYSBz
ZXQgb2YgYWxsIG9mIHRoZSBsaXZlIGZpbGVzCisgIHN0ZDo6c2V0PHVpbnQ2NF90PiBsaXZlID0g
cGVuZGluZ19vdXRwdXRzXzsKKyAgdmVyc2lvbnNfLT5BZGRMaXZlRmlsZXMoJmxpdmUpOworCisg
IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBmaWxlbmFtZXM7CisgIGVudl8tPkdldENoaWxkcmVu
KGRibmFtZV8sICZmaWxlbmFtZXMpOyAvLyBJZ25vcmluZyBlcnJvcnMgb24gcHVycG9zZQorICB1
aW50NjRfdCBudW1iZXI7CisgIEZpbGVUeXBlIHR5cGU7CisgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgZmlsZW5hbWVzLnNpemUoKTsgaSsrKSB7CisgICAgaWYgKFBhcnNlRmlsZU5hbWUoZmlsZW5h
bWVzW2ldLCAmbnVtYmVyLCAmdHlwZSkpIHsKKyAgICAgIGJvb2wga2VlcCA9IHRydWU7CisgICAg
ICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBrTG9nRmlsZToKKyAgICAgICAgICBrZWVw
ID0gKChudW1iZXIgPj0gdmVyc2lvbnNfLT5Mb2dOdW1iZXIoKSkgfHwKKyAgICAgICAgICAgICAg
ICAgIChudW1iZXIgPT0gdmVyc2lvbnNfLT5QcmV2TG9nTnVtYmVyKCkpKTsKKyAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBrRGVzY3JpcHRvckZpbGU6CisgICAgICAgICAgLy8gS2VlcCBt
eSBtYW5pZmVzdCBmaWxlLCBhbmQgYW55IG5ld2VyIGluY2FybmF0aW9ucycKKyAgICAgICAgICAv
LyAoaW4gY2FzZSB0aGVyZSBpcyBhIHJhY2UgdGhhdCBhbGxvd3Mgb3RoZXIgaW5jYXJuYXRpb25z
KQorICAgICAgICAgIGtlZXAgPSAobnVtYmVyID49IHZlcnNpb25zXy0+TWFuaWZlc3RGaWxlTnVt
YmVyKCkpOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGtUYWJsZUZpbGU6CisgICAg
ICAgICAga2VlcCA9IChsaXZlLmZpbmQobnVtYmVyKSAhPSBsaXZlLmVuZCgpKTsKKyAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBrVGVtcEZpbGU6CisgICAgICAgICAgLy8gQW55IHRlbXAg
ZmlsZXMgdGhhdCBhcmUgY3VycmVudGx5IGJlaW5nIHdyaXR0ZW4gdG8gbXVzdAorICAgICAgICAg
IC8vIGJlIHJlY29yZGVkIGluIHBlbmRpbmdfb3V0cHV0c18sIHdoaWNoIGlzIGluc2VydGVkIGlu
dG8gImxpdmUiCisgICAgICAgICAga2VlcCA9IChsaXZlLmZpbmQobnVtYmVyKSAhPSBsaXZlLmVu
ZCgpKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrQ3VycmVudEZpbGU6CisgICAg
ICAgIGNhc2Uga0RCTG9ja0ZpbGU6CisgICAgICAgIGNhc2Uga0luZm9Mb2dGaWxlOgorICAgICAg
ICAgIGtlZXAgPSB0cnVlOworICAgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBpZiAo
IWtlZXApIHsKKyAgICAgICAgaWYgKHR5cGUgPT0ga1RhYmxlRmlsZSkgeworICAgICAgICAgIHRh
YmxlX2NhY2hlXy0+RXZpY3QobnVtYmVyKTsKKyAgICAgICAgfQorICAgICAgICBMb2cob3B0aW9u
c18uaW5mb19sb2csICJEZWxldGUgdHlwZT0lZCAjJWxsZFxuIiwKKyAgICAgICAgICAgIGludCh0
eXBlKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4obnVtYmVy
KSk7CisgICAgICAgIGVudl8tPkRlbGV0ZUZpbGUoZGJuYW1lXyArICIvIiArIGZpbGVuYW1lc1tp
XSk7CisgICAgICB9CisgICAgfQorICB9Cit9CisKK1N0YXR1cyBEQkltcGw6OlJlY292ZXIoVmVy
c2lvbkVkaXQqIGVkaXQpIHsKKyAgbXV0ZXhfLkFzc2VydEhlbGQoKTsKKworICAvLyBJZ25vcmUg
ZXJyb3IgZnJvbSBDcmVhdGVEaXIgc2luY2UgdGhlIGNyZWF0aW9uIG9mIHRoZSBEQiBpcworICAv
LyBjb21taXR0ZWQgb25seSB3aGVuIHRoZSBkZXNjcmlwdG9yIGlzIGNyZWF0ZWQsIGFuZCB0aGlz
IGRpcmVjdG9yeQorICAvLyBtYXkgYWxyZWFkeSBleGlzdCBmcm9tIGEgcHJldmlvdXMgZmFpbGVk
IGNyZWF0aW9uIGF0dGVtcHQuCisgIGVudl8tPkNyZWF0ZURpcihkYm5hbWVfKTsKKyAgYXNzZXJ0
KGRiX2xvY2tfID09IE5VTEwpOworICBTdGF0dXMgcyA9IGVudl8tPkxvY2tGaWxlKExvY2tGaWxl
TmFtZShkYm5hbWVfKSwgJmRiX2xvY2tfKTsKKyAgaWYgKCFzLm9rKCkpIHsKKyAgICByZXR1cm4g
czsKKyAgfQorCisgIGlmICghZW52Xy0+RmlsZUV4aXN0cyhDdXJyZW50RmlsZU5hbWUoZGJuYW1l
XykpKSB7CisgICAgaWYgKG9wdGlvbnNfLmNyZWF0ZV9pZl9taXNzaW5nKSB7CisgICAgICBzID0g
TmV3REIoKTsKKyAgICAgIGlmICghcy5vaygpKSB7CisgICAgICAgIHJldHVybiBzOworICAgICAg
fQorICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gU3RhdHVzOjpJbnZhbGlkQXJndW1lbnQoCisg
ICAgICAgICAgZGJuYW1lXywgImRvZXMgbm90IGV4aXN0IChjcmVhdGVfaWZfbWlzc2luZyBpcyBm
YWxzZSkiKTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgaWYgKG9wdGlvbnNfLmVycm9yX2lmX2V4
aXN0cykgeworICAgICAgcmV0dXJuIFN0YXR1czo6SW52YWxpZEFyZ3VtZW50KAorICAgICAgICAg
IGRibmFtZV8sICJleGlzdHMgKGVycm9yX2lmX2V4aXN0cyBpcyB0cnVlKSIpOworICAgIH0KKyAg
fQorCisgIHMgPSB2ZXJzaW9uc18tPlJlY292ZXIoKTsKKyAgaWYgKHMub2soKSkgeworICAgIFNl
cXVlbmNlTnVtYmVyIG1heF9zZXF1ZW5jZSgwKTsKKworICAgIC8vIFJlY292ZXIgZnJvbSBhbGwg
bmV3ZXIgbG9nIGZpbGVzIHRoYW4gdGhlIG9uZXMgbmFtZWQgaW4gdGhlCisgICAgLy8gZGVzY3Jp
cHRvciAobmV3IGxvZyBmaWxlcyBtYXkgaGF2ZSBiZWVuIGFkZGVkIGJ5IHRoZSBwcmV2aW91cwor
ICAgIC8vIGluY2FybmF0aW9uIHdpdGhvdXQgcmVnaXN0ZXJpbmcgdGhlbSBpbiB0aGUgZGVzY3Jp
cHRvcikuCisgICAgLy8KKyAgICAvLyBOb3RlIHRoYXQgUHJldkxvZ051bWJlcigpIGlzIG5vIGxv
bmdlciB1c2VkLCBidXQgd2UgcGF5CisgICAgLy8gYXR0ZW50aW9uIHRvIGl0IGluIGNhc2Ugd2Ug
YXJlIHJlY292ZXJpbmcgYSBkYXRhYmFzZQorICAgIC8vIHByb2R1Y2VkIGJ5IGFuIG9sZGVyIHZl
cnNpb24gb2YgbGV2ZWxkYi4KKyAgICBjb25zdCB1aW50NjRfdCBtaW5fbG9nID0gdmVyc2lvbnNf
LT5Mb2dOdW1iZXIoKTsKKyAgICBjb25zdCB1aW50NjRfdCBwcmV2X2xvZyA9IHZlcnNpb25zXy0+
UHJldkxvZ051bWJlcigpOworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBmaWxlbmFtZXM7
CisgICAgcyA9IGVudl8tPkdldENoaWxkcmVuKGRibmFtZV8sICZmaWxlbmFtZXMpOworICAgIGlm
ICghcy5vaygpKSB7CisgICAgICByZXR1cm4gczsKKyAgICB9CisgICAgdWludDY0X3QgbnVtYmVy
OworICAgIEZpbGVUeXBlIHR5cGU7CisgICAgc3RkOjp2ZWN0b3I8dWludDY0X3Q+IGxvZ3M7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxlbmFtZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAg
IGlmIChQYXJzZUZpbGVOYW1lKGZpbGVuYW1lc1tpXSwgJm51bWJlciwgJnR5cGUpCisgICAgICAg
ICAgJiYgdHlwZSA9PSBrTG9nRmlsZQorICAgICAgICAgICYmICgobnVtYmVyID49IG1pbl9sb2cp
IHx8IChudW1iZXIgPT0gcHJldl9sb2cpKSkgeworICAgICAgICBsb2dzLnB1c2hfYmFjayhudW1i
ZXIpOworICAgICAgfQorICAgIH0KKworICAgIC8vIFJlY292ZXIgaW4gdGhlIG9yZGVyIGluIHdo
aWNoIHRoZSBsb2dzIHdlcmUgZ2VuZXJhdGVkCisgICAgc3RkOjpzb3J0KGxvZ3MuYmVnaW4oKSwg
bG9ncy5lbmQoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsb2dzLnNpemUoKTsgaSsr
KSB7CisgICAgICBzID0gUmVjb3ZlckxvZ0ZpbGUobG9nc1tpXSwgZWRpdCwgJm1heF9zZXF1ZW5j
ZSk7CisKKyAgICAgIC8vIFRoZSBwcmV2aW91cyBpbmNhcm5hdGlvbiBtYXkgbm90IGhhdmUgd3Jp
dHRlbiBhbnkgTUFOSUZFU1QKKyAgICAgIC8vIHJlY29yZHMgYWZ0ZXIgYWxsb2NhdGluZyB0aGlz
IGxvZyBudW1iZXIuICBTbyB3ZSBtYW51YWxseQorICAgICAgLy8gdXBkYXRlIHRoZSBmaWxlIG51
bWJlciBhbGxvY2F0aW9uIGNvdW50ZXIgaW4gVmVyc2lvblNldC4KKyAgICAgIHZlcnNpb25zXy0+
TWFya0ZpbGVOdW1iZXJVc2VkKGxvZ3NbaV0pOworICAgIH0KKworICAgIGlmIChzLm9rKCkpIHsK
KyAgICAgIGlmICh2ZXJzaW9uc18tPkxhc3RTZXF1ZW5jZSgpIDwgbWF4X3NlcXVlbmNlKSB7Cisg
ICAgICAgIHZlcnNpb25zXy0+U2V0TGFzdFNlcXVlbmNlKG1heF9zZXF1ZW5jZSk7CisgICAgICB9
CisgICAgfQorICB9CisKKyAgcmV0dXJuIHM7Cit9CisKK1N0YXR1cyBEQkltcGw6OlJlY292ZXJM
b2dGaWxlKHVpbnQ2NF90IGxvZ19udW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBWZXJzaW9uRWRpdCogZWRpdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlcXVl
bmNlTnVtYmVyKiBtYXhfc2VxdWVuY2UpIHsKKyAgc3RydWN0IExvZ1JlcG9ydGVyIDogcHVibGlj
IGxvZzo6UmVhZGVyOjpSZXBvcnRlciB7CisgICAgRW52KiBlbnY7CisgICAgTG9nZ2VyKiBpbmZv
X2xvZzsKKyAgICBjb25zdCBjaGFyKiBmbmFtZTsKKyAgICBTdGF0dXMqIHN0YXR1czsgIC8vIE5V
TEwgaWYgb3B0aW9uc18ucGFyYW5vaWRfY2hlY2tzPT1mYWxzZQorICAgIHZpcnR1YWwgdm9pZCBD
b3JydXB0aW9uKHNpemVfdCBieXRlcywgY29uc3QgU3RhdHVzJiBzKSB7CisgICAgICBMb2coaW5m
b19sb2csICIlcyVzOiBkcm9wcGluZyAlZCBieXRlczsgJXMiLAorICAgICAgICAgICh0aGlzLT5z
dGF0dXMgPT0gTlVMTCA/ICIoaWdub3JpbmcgZXJyb3IpICIgOiAiIiksCisgICAgICAgICAgZm5h
bWUsIHN0YXRpY19jYXN0PGludD4oYnl0ZXMpLCBzLlRvU3RyaW5nKCkuY19zdHIoKSk7CisgICAg
ICBpZiAodGhpcy0+c3RhdHVzICE9IE5VTEwgJiYgdGhpcy0+c3RhdHVzLT5vaygpKSAqdGhpcy0+
c3RhdHVzID0gczsKKyAgICB9CisgIH07CisKKyAgbXV0ZXhfLkFzc2VydEhlbGQoKTsKKworICAv
LyBPcGVuIHRoZSBsb2cgZmlsZQorICBzdGQ6OnN0cmluZyBmbmFtZSA9IExvZ0ZpbGVOYW1lKGRi
bmFtZV8sIGxvZ19udW1iZXIpOworICBTZXF1ZW50aWFsRmlsZSogZmlsZTsKKyAgU3RhdHVzIHN0
YXR1cyA9IGVudl8tPk5ld1NlcXVlbnRpYWxGaWxlKGZuYW1lLCAmZmlsZSk7CisgIGlmICghc3Rh
dHVzLm9rKCkpIHsKKyAgICBNYXliZUlnbm9yZUVycm9yKCZzdGF0dXMpOworICAgIHJldHVybiBz
dGF0dXM7CisgIH0KKworICAvLyBDcmVhdGUgdGhlIGxvZyByZWFkZXIuCisgIExvZ1JlcG9ydGVy
IHJlcG9ydGVyOworICByZXBvcnRlci5lbnYgPSBlbnZfOworICByZXBvcnRlci5pbmZvX2xvZyA9
IG9wdGlvbnNfLmluZm9fbG9nOworICByZXBvcnRlci5mbmFtZSA9IGZuYW1lLmNfc3RyKCk7Cisg
IHJlcG9ydGVyLnN0YXR1cyA9IChvcHRpb25zXy5wYXJhbm9pZF9jaGVja3MgPyAmc3RhdHVzIDog
TlVMTCk7CisgIC8vIFdlIGludGVudGlhbGx5IG1ha2UgbG9nOjpSZWFkZXIgZG8gY2hlY2tzdW1t
aW5nIGV2ZW4gaWYKKyAgLy8gcGFyYW5vaWRfY2hlY2tzPT1mYWxzZSBzbyB0aGF0IGNvcnJ1cHRp
b25zIGNhdXNlIGVudGlyZSBjb21taXRzCisgIC8vIHRvIGJlIHNraXBwZWQgaW5zdGVhZCBvZiBw
cm9wYWdhdGluZyBiYWQgaW5mb3JtYXRpb24gKGxpa2Ugb3Zlcmx5CisgIC8vIGxhcmdlIHNlcXVl
bmNlIG51bWJlcnMpLgorICBsb2c6OlJlYWRlciByZWFkZXIoZmlsZSwgJnJlcG9ydGVyLCB0cnVl
LypjaGVja3N1bSovLAorICAgICAgICAgICAgICAgICAgICAgMC8qaW5pdGlhbF9vZmZzZXQqLyk7
CisgIExvZyhvcHRpb25zXy5pbmZvX2xvZywgIlJlY292ZXJpbmcgbG9nICMlbGx1IiwKKyAgICAg
ICh1bnNpZ25lZCBsb25nIGxvbmcpIGxvZ19udW1iZXIpOworCisgIC8vIFJlYWQgYWxsIHRoZSBy
ZWNvcmRzIGFuZCBhZGQgdG8gYSBtZW10YWJsZQorICBzdGQ6OnN0cmluZyBzY3JhdGNoOworICBT
bGljZSByZWNvcmQ7CisgIFdyaXRlQmF0Y2ggYmF0Y2g7CisgIE1lbVRhYmxlKiBtZW0gPSBOVUxM
OworICB3aGlsZSAocmVhZGVyLlJlYWRSZWNvcmQoJnJlY29yZCwgJnNjcmF0Y2gpICYmCisgICAg
ICAgICBzdGF0dXMub2soKSkgeworICAgIGlmIChyZWNvcmQuc2l6ZSgpIDwgMTIpIHsKKyAgICAg
IHJlcG9ydGVyLkNvcnJ1cHRpb24oCisgICAgICAgICAgcmVjb3JkLnNpemUoKSwgU3RhdHVzOjpD
b3JydXB0aW9uKCJsb2cgcmVjb3JkIHRvbyBzbWFsbCIpKTsKKyAgICAgIGNvbnRpbnVlOworICAg
IH0KKyAgICBXcml0ZUJhdGNoSW50ZXJuYWw6OlNldENvbnRlbnRzKCZiYXRjaCwgcmVjb3JkKTsK
KworICAgIGlmIChtZW0gPT0gTlVMTCkgeworICAgICAgbWVtID0gbmV3IE1lbVRhYmxlKGludGVy
bmFsX2NvbXBhcmF0b3JfKTsKKyAgICAgIG1lbS0+UmVmKCk7CisgICAgfQorICAgIHN0YXR1cyA9
IFdyaXRlQmF0Y2hJbnRlcm5hbDo6SW5zZXJ0SW50bygmYmF0Y2gsIG1lbSk7CisgICAgTWF5YmVJ
Z25vcmVFcnJvcigmc3RhdHVzKTsKKyAgICBpZiAoIXN0YXR1cy5vaygpKSB7CisgICAgICBicmVh
azsKKyAgICB9CisgICAgY29uc3QgU2VxdWVuY2VOdW1iZXIgbGFzdF9zZXEgPQorICAgICAgICBX
cml0ZUJhdGNoSW50ZXJuYWw6OlNlcXVlbmNlKCZiYXRjaCkgKworICAgICAgICBXcml0ZUJhdGNo
SW50ZXJuYWw6OkNvdW50KCZiYXRjaCkgLSAxOworICAgIGlmIChsYXN0X3NlcSA+ICptYXhfc2Vx
dWVuY2UpIHsKKyAgICAgICptYXhfc2VxdWVuY2UgPSBsYXN0X3NlcTsKKyAgICB9CisKKyAgICBp
ZiAobWVtLT5BcHByb3hpbWF0ZU1lbW9yeVVzYWdlKCkgPiBvcHRpb25zXy53cml0ZV9idWZmZXJf
c2l6ZSkgeworICAgICAgc3RhdHVzID0gV3JpdGVMZXZlbDBUYWJsZShtZW0sIGVkaXQsIE5VTEwp
OworICAgICAgaWYgKCFzdGF0dXMub2soKSkgeworICAgICAgICAvLyBSZWZsZWN0IGVycm9ycyBp
bW1lZGlhdGVseSBzbyB0aGF0IGNvbmRpdGlvbnMgbGlrZSBmdWxsCisgICAgICAgIC8vIGZpbGUt
c3lzdGVtcyBjYXVzZSB0aGUgREI6Ok9wZW4oKSB0byBmYWlsLgorICAgICAgICBicmVhazsKKyAg
ICAgIH0KKyAgICAgIG1lbS0+VW5yZWYoKTsKKyAgICAgIG1lbSA9IE5VTEw7CisgICAgfQorICB9
CisKKyAgaWYgKHN0YXR1cy5vaygpICYmIG1lbSAhPSBOVUxMKSB7CisgICAgc3RhdHVzID0gV3Jp
dGVMZXZlbDBUYWJsZShtZW0sIGVkaXQsIE5VTEwpOworICAgIC8vIFJlZmxlY3QgZXJyb3JzIGlt
bWVkaWF0ZWx5IHNvIHRoYXQgY29uZGl0aW9ucyBsaWtlIGZ1bGwKKyAgICAvLyBmaWxlLXN5c3Rl
bXMgY2F1c2UgdGhlIERCOjpPcGVuKCkgdG8gZmFpbC4KKyAgfQorCisgIGlmIChtZW0gIT0gTlVM
TCkgbWVtLT5VbnJlZigpOworICBkZWxldGUgZmlsZTsKKyAgcmV0dXJuIHN0YXR1czsKK30KKwor
U3RhdHVzIERCSW1wbDo6V3JpdGVMZXZlbDBUYWJsZShNZW1UYWJsZSogbWVtLCBWZXJzaW9uRWRp
dCogZWRpdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiogYmFzZSkg
eworICBtdXRleF8uQXNzZXJ0SGVsZCgpOworICBjb25zdCB1aW50NjRfdCBzdGFydF9taWNyb3Mg
PSBlbnZfLT5Ob3dNaWNyb3MoKTsKKyAgRmlsZU1ldGFEYXRhIG1ldGE7CisgIG1ldGEubnVtYmVy
ID0gdmVyc2lvbnNfLT5OZXdGaWxlTnVtYmVyKCk7CisgIHBlbmRpbmdfb3V0cHV0c18uaW5zZXJ0
KG1ldGEubnVtYmVyKTsKKyAgSXRlcmF0b3IqIGl0ZXIgPSBtZW0tPk5ld0l0ZXJhdG9yKCk7Cisg
IExvZyhvcHRpb25zXy5pbmZvX2xvZywgIkxldmVsLTAgdGFibGUgIyVsbHU6IHN0YXJ0ZWQiLAor
ICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgbWV0YS5udW1iZXIpOworCisgIFN0YXR1cyBzOwor
ICB7CisgICAgbXV0ZXhfLlVubG9jaygpOworICAgIHMgPSBCdWlsZFRhYmxlKGRibmFtZV8sIGVu
dl8sIG9wdGlvbnNfLCB0YWJsZV9jYWNoZV8sIGl0ZXIsICZtZXRhKTsKKyAgICBtdXRleF8uTG9j
aygpOworICB9CisKKyAgTG9nKG9wdGlvbnNfLmluZm9fbG9nLCAiTGV2ZWwtMCB0YWJsZSAjJWxs
dTogJWxsZCBieXRlcyAlcyIsCisgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBtZXRhLm51bWJl
ciwKKyAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIG1ldGEuZmlsZV9zaXplLAorICAgICAgcy5U
b1N0cmluZygpLmNfc3RyKCkpOworICBkZWxldGUgaXRlcjsKKyAgcGVuZGluZ19vdXRwdXRzXy5l
cmFzZShtZXRhLm51bWJlcik7CisKKworICAvLyBOb3RlIHRoYXQgaWYgZmlsZV9zaXplIGlzIHpl
cm8sIHRoZSBmaWxlIGhhcyBiZWVuIGRlbGV0ZWQgYW5kCisgIC8vIHNob3VsZCBub3QgYmUgYWRk
ZWQgdG8gdGhlIG1hbmlmZXN0LgorICBpbnQgbGV2ZWwgPSAwOworICBpZiAocy5vaygpICYmIG1l
dGEuZmlsZV9zaXplID4gMCkgeworICAgIGNvbnN0IFNsaWNlIG1pbl91c2VyX2tleSA9IG1ldGEu
c21hbGxlc3QudXNlcl9rZXkoKTsKKyAgICBjb25zdCBTbGljZSBtYXhfdXNlcl9rZXkgPSBtZXRh
Lmxhcmdlc3QudXNlcl9rZXkoKTsKKyAgICBpZiAoYmFzZSAhPSBOVUxMKSB7CisgICAgICBsZXZl
bCA9IGJhc2UtPlBpY2tMZXZlbEZvck1lbVRhYmxlT3V0cHV0KG1pbl91c2VyX2tleSwgbWF4X3Vz
ZXJfa2V5KTsKKyAgICB9CisgICAgZWRpdC0+QWRkRmlsZShsZXZlbCwgbWV0YS5udW1iZXIsIG1l
dGEuZmlsZV9zaXplLAorICAgICAgICAgICAgICAgICAgbWV0YS5zbWFsbGVzdCwgbWV0YS5sYXJn
ZXN0KTsKKyAgfQorCisgIENvbXBhY3Rpb25TdGF0cyBzdGF0czsKKyAgc3RhdHMubWljcm9zID0g
ZW52Xy0+Tm93TWljcm9zKCkgLSBzdGFydF9taWNyb3M7CisgIHN0YXRzLmJ5dGVzX3dyaXR0ZW4g
PSBtZXRhLmZpbGVfc2l6ZTsKKyAgc3RhdHNfW2xldmVsXS5BZGQoc3RhdHMpOworICByZXR1cm4g
czsKK30KKworU3RhdHVzIERCSW1wbDo6Q29tcGFjdE1lbVRhYmxlKCkgeworICBtdXRleF8uQXNz
ZXJ0SGVsZCgpOworICBhc3NlcnQoaW1tXyAhPSBOVUxMKTsKKworICAvLyBTYXZlIHRoZSBjb250
ZW50cyBvZiB0aGUgbWVtdGFibGUgYXMgYSBuZXcgVGFibGUKKyAgVmVyc2lvbkVkaXQgZWRpdDsK
KyAgVmVyc2lvbiogYmFzZSA9IHZlcnNpb25zXy0+Y3VycmVudCgpOworICBiYXNlLT5SZWYoKTsK
KyAgU3RhdHVzIHMgPSBXcml0ZUxldmVsMFRhYmxlKGltbV8sICZlZGl0LCBiYXNlKTsKKyAgYmFz
ZS0+VW5yZWYoKTsKKworICBpZiAocy5vaygpICYmIHNodXR0aW5nX2Rvd25fLkFjcXVpcmVfTG9h
ZCgpKSB7CisgICAgcyA9IFN0YXR1czo6SU9FcnJvcigiRGVsZXRpbmcgREIgZHVyaW5nIG1lbXRh
YmxlIGNvbXBhY3Rpb24iKTsKKyAgfQorCisgIC8vIFJlcGxhY2UgaW1tdXRhYmxlIG1lbXRhYmxl
IHdpdGggdGhlIGdlbmVyYXRlZCBUYWJsZQorICBpZiAocy5vaygpKSB7CisgICAgZWRpdC5TZXRQ
cmV2TG9nTnVtYmVyKDApOworICAgIGVkaXQuU2V0TG9nTnVtYmVyKGxvZ2ZpbGVfbnVtYmVyXyk7
ICAvLyBFYXJsaWVyIGxvZ3Mgbm8gbG9uZ2VyIG5lZWRlZAorICAgIHMgPSB2ZXJzaW9uc18tPkxv
Z0FuZEFwcGx5KCZlZGl0LCAmbXV0ZXhfKTsKKyAgfQorCisgIGlmIChzLm9rKCkpIHsKKyAgICAv
LyBDb21taXQgdG8gdGhlIG5ldyBzdGF0ZQorICAgIGltbV8tPlVucmVmKCk7CisgICAgaW1tXyA9
IE5VTEw7CisgICAgaGFzX2ltbV8uUmVsZWFzZV9TdG9yZShOVUxMKTsKKyAgICBEZWxldGVPYnNv
bGV0ZUZpbGVzKCk7CisgIH0KKworICByZXR1cm4gczsKK30KKwordm9pZCBEQkltcGw6OkNvbXBh
Y3RSYW5nZShjb25zdCBTbGljZSogYmVnaW4sIGNvbnN0IFNsaWNlKiBlbmQpIHsKKyAgaW50IG1h
eF9sZXZlbF93aXRoX2ZpbGVzID0gMTsKKyAgeworICAgIE11dGV4TG9jayBsKCZtdXRleF8pOwor
ICAgIFZlcnNpb24qIGJhc2UgPSB2ZXJzaW9uc18tPmN1cnJlbnQoKTsKKyAgICBmb3IgKGludCBs
ZXZlbCA9IDE7IGxldmVsIDwgY29uZmlnOjprTnVtTGV2ZWxzOyBsZXZlbCsrKSB7CisgICAgICBp
ZiAoYmFzZS0+T3ZlcmxhcEluTGV2ZWwobGV2ZWwsIGJlZ2luLCBlbmQpKSB7CisgICAgICAgIG1h
eF9sZXZlbF93aXRoX2ZpbGVzID0gbGV2ZWw7CisgICAgICB9CisgICAgfQorICB9CisgIFRFU1Rf
Q29tcGFjdE1lbVRhYmxlKCk7IC8vIFRPRE8oc2FuamF5KTogU2tpcCBpZiBtZW10YWJsZSBkb2Vz
IG5vdCBvdmVybGFwCisgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBtYXhfbGV2ZWxfd2l0
aF9maWxlczsgbGV2ZWwrKykgeworICAgIFRFU1RfQ29tcGFjdFJhbmdlKGxldmVsLCBiZWdpbiwg
ZW5kKTsKKyAgfQorfQorCit2b2lkIERCSW1wbDo6VEVTVF9Db21wYWN0UmFuZ2UoaW50IGxldmVs
LCBjb25zdCBTbGljZSogYmVnaW4sY29uc3QgU2xpY2UqIGVuZCkgeworICBhc3NlcnQobGV2ZWwg
Pj0gMCk7CisgIGFzc2VydChsZXZlbCArIDEgPCBjb25maWc6OmtOdW1MZXZlbHMpOworCisgIElu
dGVybmFsS2V5IGJlZ2luX3N0b3JhZ2UsIGVuZF9zdG9yYWdlOworCisgIE1hbnVhbENvbXBhY3Rp
b24gbWFudWFsOworICBtYW51YWwubGV2ZWwgPSBsZXZlbDsKKyAgbWFudWFsLmRvbmUgPSBmYWxz
ZTsKKyAgaWYgKGJlZ2luID09IE5VTEwpIHsKKyAgICBtYW51YWwuYmVnaW4gPSBOVUxMOworICB9
IGVsc2UgeworICAgIGJlZ2luX3N0b3JhZ2UgPSBJbnRlcm5hbEtleSgqYmVnaW4sIGtNYXhTZXF1
ZW5jZU51bWJlciwga1ZhbHVlVHlwZUZvclNlZWspOworICAgIG1hbnVhbC5iZWdpbiA9ICZiZWdp
bl9zdG9yYWdlOworICB9CisgIGlmIChlbmQgPT0gTlVMTCkgeworICAgIG1hbnVhbC5lbmQgPSBO
VUxMOworICB9IGVsc2UgeworICAgIGVuZF9zdG9yYWdlID0gSW50ZXJuYWxLZXkoKmVuZCwgMCwg
c3RhdGljX2Nhc3Q8VmFsdWVUeXBlPigwKSk7CisgICAgbWFudWFsLmVuZCA9ICZlbmRfc3RvcmFn
ZTsKKyAgfQorCisgIE11dGV4TG9jayBsKCZtdXRleF8pOworICB3aGlsZSAoIW1hbnVhbC5kb25l
KSB7CisgICAgd2hpbGUgKG1hbnVhbF9jb21wYWN0aW9uXyAhPSBOVUxMKSB7CisgICAgICBiZ19j
dl8uV2FpdCgpOworICAgIH0KKyAgICBtYW51YWxfY29tcGFjdGlvbl8gPSAmbWFudWFsOworICAg
IE1heWJlU2NoZWR1bGVDb21wYWN0aW9uKCk7CisgICAgd2hpbGUgKG1hbnVhbF9jb21wYWN0aW9u
XyA9PSAmbWFudWFsKSB7CisgICAgICBiZ19jdl8uV2FpdCgpOworICAgIH0KKyAgfQorfQorCitT
dGF0dXMgREJJbXBsOjpURVNUX0NvbXBhY3RNZW1UYWJsZSgpIHsKKyAgLy8gTlVMTCBiYXRjaCBt
ZWFucyBqdXN0IHdhaXQgZm9yIGVhcmxpZXIgd3JpdGVzIHRvIGJlIGRvbmUKKyAgU3RhdHVzIHMg
PSBXcml0ZShXcml0ZU9wdGlvbnMoKSwgTlVMTCk7CisgIGlmIChzLm9rKCkpIHsKKyAgICAvLyBX
YWl0IHVudGlsIHRoZSBjb21wYWN0aW9uIGNvbXBsZXRlcworICAgIE11dGV4TG9jayBsKCZtdXRl
eF8pOworICAgIHdoaWxlIChpbW1fICE9IE5VTEwgJiYgYmdfZXJyb3JfLm9rKCkpIHsKKyAgICAg
IGJnX2N2Xy5XYWl0KCk7CisgICAgfQorICAgIGlmIChpbW1fICE9IE5VTEwpIHsKKyAgICAgIHMg
PSBiZ19lcnJvcl87CisgICAgfQorICB9CisgIHJldHVybiBzOworfQorCit2b2lkIERCSW1wbDo6
TWF5YmVTY2hlZHVsZUNvbXBhY3Rpb24oKSB7CisgIG11dGV4Xy5Bc3NlcnRIZWxkKCk7CisgIGlm
IChiZ19jb21wYWN0aW9uX3NjaGVkdWxlZF8pIHsKKyAgICAvLyBBbHJlYWR5IHNjaGVkdWxlZAor
ICB9IGVsc2UgaWYgKHNodXR0aW5nX2Rvd25fLkFjcXVpcmVfTG9hZCgpKSB7CisgICAgLy8gREIg
aXMgYmVpbmcgZGVsZXRlZDsgbm8gbW9yZSBiYWNrZ3JvdW5kIGNvbXBhY3Rpb25zCisgIH0gZWxz
ZSBpZiAoaW1tXyA9PSBOVUxMICYmCisgICAgICAgICAgICAgbWFudWFsX2NvbXBhY3Rpb25fID09
IE5VTEwgJiYKKyAgICAgICAgICAgICAhdmVyc2lvbnNfLT5OZWVkc0NvbXBhY3Rpb24oKSkgewor
ICAgIC8vIE5vIHdvcmsgdG8gYmUgZG9uZQorICB9IGVsc2UgeworICAgIGJnX2NvbXBhY3Rpb25f
c2NoZWR1bGVkXyA9IHRydWU7CisgICAgZW52Xy0+U2NoZWR1bGUoJkRCSW1wbDo6QkdXb3JrLCB0
aGlzKTsKKyAgfQorfQorCit2b2lkIERCSW1wbDo6QkdXb3JrKHZvaWQqIGRiKSB7CisgIHJlaW50
ZXJwcmV0X2Nhc3Q8REJJbXBsKj4oZGIpLT5CYWNrZ3JvdW5kQ2FsbCgpOworfQorCit2b2lkIERC
SW1wbDo6QmFja2dyb3VuZENhbGwoKSB7CisgIE11dGV4TG9jayBsKCZtdXRleF8pOworICBhc3Nl
cnQoYmdfY29tcGFjdGlvbl9zY2hlZHVsZWRfKTsKKyAgaWYgKCFzaHV0dGluZ19kb3duXy5BY3F1
aXJlX0xvYWQoKSkgeworICAgIFN0YXR1cyBzID0gQmFja2dyb3VuZENvbXBhY3Rpb24oKTsKKyAg
ICBpZiAocy5vaygpKSB7CisgICAgICAvLyBTdWNjZXNzCisgICAgfSBlbHNlIGlmIChzaHV0dGlu
Z19kb3duXy5BY3F1aXJlX0xvYWQoKSkgeworICAgICAgLy8gRXJyb3IgbW9zdCBsaWtlbHkgZHVl
IHRvIHNodXRkb3duOyBkbyBub3Qgd2FpdAorICAgIH0gZWxzZSB7CisgICAgICAvLyBXYWl0IGEg
bGl0dGxlIGJpdCBiZWZvcmUgcmV0cnlpbmcgYmFja2dyb3VuZCBjb21wYWN0aW9uIGluCisgICAg
ICAvLyBjYXNlIHRoaXMgaXMgYW4gZW52aXJvbm1lbnRhbCBwcm9ibGVtIGFuZCB3ZSBkbyBub3Qg
d2FudCB0bworICAgICAgLy8gY2hldyB1cCByZXNvdXJjZXMgZm9yIGZhaWxlZCBjb21wYWN0aW9u
cyBmb3IgdGhlIGR1cmF0aW9uIG9mCisgICAgICAvLyB0aGUgcHJvYmxlbS4KKyAgICAgIGJnX2N2
Xy5TaWduYWxBbGwoKTsgIC8vIEluIGNhc2UgYSB3YWl0ZXIgY2FuIHByb2NlZWQgZGVzcGl0ZSB0
aGUgZXJyb3IKKyAgICAgIExvZyhvcHRpb25zXy5pbmZvX2xvZywgIldhaXRpbmcgYWZ0ZXIgYmFj
a2dyb3VuZCBjb21wYWN0aW9uIGVycm9yOiAlcyIsCisgICAgICAgICAgcy5Ub1N0cmluZygpLmNf
c3RyKCkpOworICAgICAgbXV0ZXhfLlVubG9jaygpOworICAgICAgZW52Xy0+U2xlZXBGb3JNaWNy
b3NlY29uZHMoMTAwMDAwMCk7CisgICAgICBtdXRleF8uTG9jaygpOworICAgIH0KKyAgfQorCisg
IGJnX2NvbXBhY3Rpb25fc2NoZWR1bGVkXyA9IGZhbHNlOworCisgIC8vIFByZXZpb3VzIGNvbXBh
Y3Rpb24gbWF5IGhhdmUgcHJvZHVjZWQgdG9vIG1hbnkgZmlsZXMgaW4gYSBsZXZlbCwKKyAgLy8g
c28gcmVzY2hlZHVsZSBhbm90aGVyIGNvbXBhY3Rpb24gaWYgbmVlZGVkLgorICBNYXliZVNjaGVk
dWxlQ29tcGFjdGlvbigpOworICBiZ19jdl8uU2lnbmFsQWxsKCk7Cit9CisKK1N0YXR1cyBEQklt
cGw6OkJhY2tncm91bmRDb21wYWN0aW9uKCkgeworICBtdXRleF8uQXNzZXJ0SGVsZCgpOworCisg
IGlmIChpbW1fICE9IE5VTEwpIHsKKyAgICByZXR1cm4gQ29tcGFjdE1lbVRhYmxlKCk7CisgIH0K
KworICBDb21wYWN0aW9uKiBjOworICBib29sIGlzX21hbnVhbCA9IChtYW51YWxfY29tcGFjdGlv
bl8gIT0gTlVMTCk7CisgIEludGVybmFsS2V5IG1hbnVhbF9lbmQ7CisgIGlmIChpc19tYW51YWwp
IHsKKyAgICBNYW51YWxDb21wYWN0aW9uKiBtID0gbWFudWFsX2NvbXBhY3Rpb25fOworICAgIGMg
PSB2ZXJzaW9uc18tPkNvbXBhY3RSYW5nZShtLT5sZXZlbCwgbS0+YmVnaW4sIG0tPmVuZCk7Cisg
ICAgbS0+ZG9uZSA9IChjID09IE5VTEwpOworICAgIGlmIChjICE9IE5VTEwpIHsKKyAgICAgIG1h
bnVhbF9lbmQgPSBjLT5pbnB1dCgwLCBjLT5udW1faW5wdXRfZmlsZXMoMCkgLSAxKS0+bGFyZ2Vz
dDsKKyAgICB9CisgICAgTG9nKG9wdGlvbnNfLmluZm9fbG9nLAorICAgICAgICAiTWFudWFsIGNv
bXBhY3Rpb24gYXQgbGV2ZWwtJWQgZnJvbSAlcyAuLiAlczsgd2lsbCBzdG9wIGF0ICVzXG4iLAor
ICAgICAgICBtLT5sZXZlbCwKKyAgICAgICAgKG0tPmJlZ2luID8gbS0+YmVnaW4tPkRlYnVnU3Ry
aW5nKCkuY19zdHIoKSA6ICIoYmVnaW4pIiksCisgICAgICAgIChtLT5lbmQgPyBtLT5lbmQtPkRl
YnVnU3RyaW5nKCkuY19zdHIoKSA6ICIoZW5kKSIpLAorICAgICAgICAobS0+ZG9uZSA/ICIoZW5k
KSIgOiBtYW51YWxfZW5kLkRlYnVnU3RyaW5nKCkuY19zdHIoKSkpOworICB9IGVsc2UgeworICAg
IGMgPSB2ZXJzaW9uc18tPlBpY2tDb21wYWN0aW9uKCk7CisgIH0KKworICBTdGF0dXMgc3RhdHVz
OworICBpZiAoYyA9PSBOVUxMKSB7CisgICAgLy8gTm90aGluZyB0byBkbworICB9IGVsc2UgaWYg
KCFpc19tYW51YWwgJiYgYy0+SXNUcml2aWFsTW92ZSgpKSB7CisgICAgLy8gTW92ZSBmaWxlIHRv
IG5leHQgbGV2ZWwKKyAgICBhc3NlcnQoYy0+bnVtX2lucHV0X2ZpbGVzKDApID09IDEpOworICAg
IEZpbGVNZXRhRGF0YSogZiA9IGMtPmlucHV0KDAsIDApOworICAgIGMtPmVkaXQoKS0+RGVsZXRl
RmlsZShjLT5sZXZlbCgpLCBmLT5udW1iZXIpOworICAgIGMtPmVkaXQoKS0+QWRkRmlsZShjLT5s
ZXZlbCgpICsgMSwgZi0+bnVtYmVyLCBmLT5maWxlX3NpemUsCisgICAgICAgICAgICAgICAgICAg
ICAgIGYtPnNtYWxsZXN0LCBmLT5sYXJnZXN0KTsKKyAgICBzdGF0dXMgPSB2ZXJzaW9uc18tPkxv
Z0FuZEFwcGx5KGMtPmVkaXQoKSwgJm11dGV4Xyk7CisgICAgVmVyc2lvblNldDo6TGV2ZWxTdW1t
YXJ5U3RvcmFnZSB0bXA7CisgICAgTG9nKG9wdGlvbnNfLmluZm9fbG9nLCAiTW92ZWQgIyVsbGQg
dG8gbGV2ZWwtJWQgJWxsZCBieXRlcyAlczogJXNcbiIsCisgICAgICAgIHN0YXRpY19jYXN0PHVu
c2lnbmVkIGxvbmcgbG9uZz4oZi0+bnVtYmVyKSwKKyAgICAgICAgYy0+bGV2ZWwoKSArIDEsCisg
ICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oZi0+ZmlsZV9zaXplKSwKKyAg
ICAgICAgc3RhdHVzLlRvU3RyaW5nKCkuY19zdHIoKSwKKyAgICAgICAgdmVyc2lvbnNfLT5MZXZl
bFN1bW1hcnkoJnRtcCkpOworICB9IGVsc2UgeworICAgIENvbXBhY3Rpb25TdGF0ZSogY29tcGFj
dCA9IG5ldyBDb21wYWN0aW9uU3RhdGUoYyk7CisgICAgc3RhdHVzID0gRG9Db21wYWN0aW9uV29y
ayhjb21wYWN0KTsKKyAgICBDbGVhbnVwQ29tcGFjdGlvbihjb21wYWN0KTsKKyAgICBjLT5SZWxl
YXNlSW5wdXRzKCk7CisgICAgRGVsZXRlT2Jzb2xldGVGaWxlcygpOworICB9CisgIGRlbGV0ZSBj
OworCisgIGlmIChzdGF0dXMub2soKSkgeworICAgIC8vIERvbmUKKyAgfSBlbHNlIGlmIChzaHV0
dGluZ19kb3duXy5BY3F1aXJlX0xvYWQoKSkgeworICAgIC8vIElnbm9yZSBjb21wYWN0aW9uIGVy
cm9ycyBmb3VuZCBkdXJpbmcgc2h1dHRpbmcgZG93bgorICB9IGVsc2UgeworICAgIExvZyhvcHRp
b25zXy5pbmZvX2xvZywKKyAgICAgICAgIkNvbXBhY3Rpb24gZXJyb3I6ICVzIiwgc3RhdHVzLlRv
U3RyaW5nKCkuY19zdHIoKSk7CisgICAgaWYgKG9wdGlvbnNfLnBhcmFub2lkX2NoZWNrcyAmJiBi
Z19lcnJvcl8ub2soKSkgeworICAgICAgYmdfZXJyb3JfID0gc3RhdHVzOworICAgIH0KKyAgfQor
CisgIGlmIChpc19tYW51YWwpIHsKKyAgICBNYW51YWxDb21wYWN0aW9uKiBtID0gbWFudWFsX2Nv
bXBhY3Rpb25fOworICAgIGlmICghc3RhdHVzLm9rKCkpIHsKKyAgICAgIG0tPmRvbmUgPSB0cnVl
OworICAgIH0KKyAgICBpZiAoIW0tPmRvbmUpIHsKKyAgICAgIC8vIFdlIG9ubHkgY29tcGFjdGVk
IHBhcnQgb2YgdGhlIHJlcXVlc3RlZCByYW5nZS4gIFVwZGF0ZSAqbQorICAgICAgLy8gdG8gdGhl
IHJhbmdlIHRoYXQgaXMgbGVmdCB0byBiZSBjb21wYWN0ZWQuCisgICAgICBtLT50bXBfc3RvcmFn
ZSA9IG1hbnVhbF9lbmQ7CisgICAgICBtLT5iZWdpbiA9ICZtLT50bXBfc3RvcmFnZTsKKyAgICB9
CisgICAgbWFudWFsX2NvbXBhY3Rpb25fID0gTlVMTDsKKyAgfQorICByZXR1cm4gc3RhdHVzOwor
fQorCit2b2lkIERCSW1wbDo6Q2xlYW51cENvbXBhY3Rpb24oQ29tcGFjdGlvblN0YXRlKiBjb21w
YWN0KSB7CisgIG11dGV4Xy5Bc3NlcnRIZWxkKCk7CisgIGlmIChjb21wYWN0LT5idWlsZGVyICE9
IE5VTEwpIHsKKyAgICAvLyBNYXkgaGFwcGVuIGlmIHdlIGdldCBhIHNodXRkb3duIGNhbGwgaW4g
dGhlIG1pZGRsZSBvZiBjb21wYWN0aW9uCisgICAgY29tcGFjdC0+YnVpbGRlci0+QWJhbmRvbigp
OworICAgIGRlbGV0ZSBjb21wYWN0LT5idWlsZGVyOworICB9IGVsc2UgeworICAgIGFzc2VydChj
b21wYWN0LT5vdXRmaWxlID09IE5VTEwpOworICB9CisgIGRlbGV0ZSBjb21wYWN0LT5vdXRmaWxl
OworICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvbXBhY3QtPm91dHB1dHMuc2l6ZSgpOyBpKysp
IHsKKyAgICBjb25zdCBDb21wYWN0aW9uU3RhdGU6Ok91dHB1dCYgb3V0ID0gY29tcGFjdC0+b3V0
cHV0c1tpXTsKKyAgICBwZW5kaW5nX291dHB1dHNfLmVyYXNlKG91dC5udW1iZXIpOworICB9Cisg
IGRlbGV0ZSBjb21wYWN0OworfQorCitTdGF0dXMgREJJbXBsOjpPcGVuQ29tcGFjdGlvbk91dHB1
dEZpbGUoQ29tcGFjdGlvblN0YXRlKiBjb21wYWN0KSB7CisgIGFzc2VydChjb21wYWN0ICE9IE5V
TEwpOworICBhc3NlcnQoY29tcGFjdC0+YnVpbGRlciA9PSBOVUxMKTsKKyAgdWludDY0X3QgZmls
ZV9udW1iZXI7CisgIHsKKyAgICBtdXRleF8uTG9jaygpOworICAgIGZpbGVfbnVtYmVyID0gdmVy
c2lvbnNfLT5OZXdGaWxlTnVtYmVyKCk7CisgICAgcGVuZGluZ19vdXRwdXRzXy5pbnNlcnQoZmls
ZV9udW1iZXIpOworICAgIENvbXBhY3Rpb25TdGF0ZTo6T3V0cHV0IG91dDsKKyAgICBvdXQubnVt
YmVyID0gZmlsZV9udW1iZXI7CisgICAgb3V0LnNtYWxsZXN0LkNsZWFyKCk7CisgICAgb3V0Lmxh
cmdlc3QuQ2xlYXIoKTsKKyAgICBjb21wYWN0LT5vdXRwdXRzLnB1c2hfYmFjayhvdXQpOworICAg
IG11dGV4Xy5VbmxvY2soKTsKKyAgfQorCisgIC8vIE1ha2UgdGhlIG91dHB1dCBmaWxlCisgIHN0
ZDo6c3RyaW5nIGZuYW1lID0gVGFibGVGaWxlTmFtZShkYm5hbWVfLCBmaWxlX251bWJlcik7Cisg
IFN0YXR1cyBzID0gZW52Xy0+TmV3V3JpdGFibGVGaWxlKGZuYW1lLCAmY29tcGFjdC0+b3V0Zmls
ZSk7CisgIGlmIChzLm9rKCkpIHsKKyAgICBjb21wYWN0LT5idWlsZGVyID0gbmV3IFRhYmxlQnVp
bGRlcihvcHRpb25zXywgY29tcGFjdC0+b3V0ZmlsZSk7CisgIH0KKyAgcmV0dXJuIHM7Cit9CisK
K1N0YXR1cyBEQkltcGw6OkZpbmlzaENvbXBhY3Rpb25PdXRwdXRGaWxlKENvbXBhY3Rpb25TdGF0
ZSogY29tcGFjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0
ZXJhdG9yKiBpbnB1dCkgeworICBhc3NlcnQoY29tcGFjdCAhPSBOVUxMKTsKKyAgYXNzZXJ0KGNv
bXBhY3QtPm91dGZpbGUgIT0gTlVMTCk7CisgIGFzc2VydChjb21wYWN0LT5idWlsZGVyICE9IE5V
TEwpOworCisgIGNvbnN0IHVpbnQ2NF90IG91dHB1dF9udW1iZXIgPSBjb21wYWN0LT5jdXJyZW50
X291dHB1dCgpLT5udW1iZXI7CisgIGFzc2VydChvdXRwdXRfbnVtYmVyICE9IDApOworCisgIC8v
IENoZWNrIGZvciBpdGVyYXRvciBlcnJvcnMKKyAgU3RhdHVzIHMgPSBpbnB1dC0+c3RhdHVzKCk7
CisgIGNvbnN0IHVpbnQ2NF90IGN1cnJlbnRfZW50cmllcyA9IGNvbXBhY3QtPmJ1aWxkZXItPk51
bUVudHJpZXMoKTsKKyAgaWYgKHMub2soKSkgeworICAgIHMgPSBjb21wYWN0LT5idWlsZGVyLT5G
aW5pc2goKTsKKyAgfSBlbHNlIHsKKyAgICBjb21wYWN0LT5idWlsZGVyLT5BYmFuZG9uKCk7Cisg
IH0KKyAgY29uc3QgdWludDY0X3QgY3VycmVudF9ieXRlcyA9IGNvbXBhY3QtPmJ1aWxkZXItPkZp
bGVTaXplKCk7CisgIGNvbXBhY3QtPmN1cnJlbnRfb3V0cHV0KCktPmZpbGVfc2l6ZSA9IGN1cnJl
bnRfYnl0ZXM7CisgIGNvbXBhY3QtPnRvdGFsX2J5dGVzICs9IGN1cnJlbnRfYnl0ZXM7CisgIGRl
bGV0ZSBjb21wYWN0LT5idWlsZGVyOworICBjb21wYWN0LT5idWlsZGVyID0gTlVMTDsKKworICAv
LyBGaW5pc2ggYW5kIGNoZWNrIGZvciBmaWxlIGVycm9ycworICBpZiAocy5vaygpKSB7CisgICAg
cyA9IGNvbXBhY3QtPm91dGZpbGUtPlN5bmMoKTsKKyAgfQorICBpZiAocy5vaygpKSB7CisgICAg
cyA9IGNvbXBhY3QtPm91dGZpbGUtPkNsb3NlKCk7CisgIH0KKyAgZGVsZXRlIGNvbXBhY3QtPm91
dGZpbGU7CisgIGNvbXBhY3QtPm91dGZpbGUgPSBOVUxMOworCisgIGlmIChzLm9rKCkgJiYgY3Vy
cmVudF9lbnRyaWVzID4gMCkgeworICAgIC8vIFZlcmlmeSB0aGF0IHRoZSB0YWJsZSBpcyB1c2Fi
bGUKKyAgICBJdGVyYXRvciogaXRlciA9IHRhYmxlX2NhY2hlXy0+TmV3SXRlcmF0b3IoUmVhZE9w
dGlvbnMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3V0cHV0X251bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY3VycmVudF9ieXRlcyk7CisgICAgcyA9IGl0ZXItPnN0YXR1cygpOworICAgIGRlbGV0
ZSBpdGVyOworICAgIGlmIChzLm9rKCkpIHsKKyAgICAgIExvZyhvcHRpb25zXy5pbmZvX2xvZywK
KyAgICAgICAgICAiR2VuZXJhdGVkIHRhYmxlICMlbGx1OiAlbGxkIGtleXMsICVsbGQgYnl0ZXMi
LAorICAgICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIG91dHB1dF9udW1iZXIsCisgICAgICAg
ICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgY3VycmVudF9lbnRyaWVzLAorICAgICAgICAgICh1bnNp
Z25lZCBsb25nIGxvbmcpIGN1cnJlbnRfYnl0ZXMpOworICAgIH0KKyAgfQorICByZXR1cm4gczsK
K30KKworCitTdGF0dXMgREJJbXBsOjpJbnN0YWxsQ29tcGFjdGlvblJlc3VsdHMoQ29tcGFjdGlv
blN0YXRlKiBjb21wYWN0KSB7CisgIG11dGV4Xy5Bc3NlcnRIZWxkKCk7CisgIExvZyhvcHRpb25z
Xy5pbmZvX2xvZywgICJDb21wYWN0ZWQgJWRAJWQgKyAlZEAlZCBmaWxlcyA9PiAlbGxkIGJ5dGVz
IiwKKyAgICAgIGNvbXBhY3QtPmNvbXBhY3Rpb24tPm51bV9pbnB1dF9maWxlcygwKSwKKyAgICAg
IGNvbXBhY3QtPmNvbXBhY3Rpb24tPmxldmVsKCksCisgICAgICBjb21wYWN0LT5jb21wYWN0aW9u
LT5udW1faW5wdXRfZmlsZXMoMSksCisgICAgICBjb21wYWN0LT5jb21wYWN0aW9uLT5sZXZlbCgp
ICsgMSwKKyAgICAgIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oY29tcGFjdC0+dG90YWxfYnl0ZXMp
KTsKKworICAvLyBBZGQgY29tcGFjdGlvbiBvdXRwdXRzCisgIGNvbXBhY3QtPmNvbXBhY3Rpb24t
PkFkZElucHV0RGVsZXRpb25zKGNvbXBhY3QtPmNvbXBhY3Rpb24tPmVkaXQoKSk7CisgIGNvbnN0
IGludCBsZXZlbCA9IGNvbXBhY3QtPmNvbXBhY3Rpb24tPmxldmVsKCk7CisgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgY29tcGFjdC0+b3V0cHV0cy5zaXplKCk7IGkrKykgeworICAgIGNvbnN0IENv
bXBhY3Rpb25TdGF0ZTo6T3V0cHV0JiBvdXQgPSBjb21wYWN0LT5vdXRwdXRzW2ldOworICAgIGNv
bXBhY3QtPmNvbXBhY3Rpb24tPmVkaXQoKS0+QWRkRmlsZSgKKyAgICAgICAgbGV2ZWwgKyAxLAor
ICAgICAgICBvdXQubnVtYmVyLCBvdXQuZmlsZV9zaXplLCBvdXQuc21hbGxlc3QsIG91dC5sYXJn
ZXN0KTsKKyAgfQorICByZXR1cm4gdmVyc2lvbnNfLT5Mb2dBbmRBcHBseShjb21wYWN0LT5jb21w
YWN0aW9uLT5lZGl0KCksICZtdXRleF8pOworfQorCitTdGF0dXMgREJJbXBsOjpEb0NvbXBhY3Rp
b25Xb3JrKENvbXBhY3Rpb25TdGF0ZSogY29tcGFjdCkgeworICBjb25zdCB1aW50NjRfdCBzdGFy
dF9taWNyb3MgPSBlbnZfLT5Ob3dNaWNyb3MoKTsKKyAgaW50NjRfdCBpbW1fbWljcm9zID0gMDsg
IC8vIE1pY3JvcyBzcGVudCBkb2luZyBpbW1fIGNvbXBhY3Rpb25zCisKKyAgTG9nKG9wdGlvbnNf
LmluZm9fbG9nLCAgIkNvbXBhY3RpbmcgJWRAJWQgKyAlZEAlZCBmaWxlcyIsCisgICAgICBjb21w
YWN0LT5jb21wYWN0aW9uLT5udW1faW5wdXRfZmlsZXMoMCksCisgICAgICBjb21wYWN0LT5jb21w
YWN0aW9uLT5sZXZlbCgpLAorICAgICAgY29tcGFjdC0+Y29tcGFjdGlvbi0+bnVtX2lucHV0X2Zp
bGVzKDEpLAorICAgICAgY29tcGFjdC0+Y29tcGFjdGlvbi0+bGV2ZWwoKSArIDEpOworCisgIGFz
c2VydCh2ZXJzaW9uc18tPk51bUxldmVsRmlsZXMoY29tcGFjdC0+Y29tcGFjdGlvbi0+bGV2ZWwo
KSkgPiAwKTsKKyAgYXNzZXJ0KGNvbXBhY3QtPmJ1aWxkZXIgPT0gTlVMTCk7CisgIGFzc2VydChj
b21wYWN0LT5vdXRmaWxlID09IE5VTEwpOworICBpZiAoc25hcHNob3RzXy5lbXB0eSgpKSB7Cisg
ICAgY29tcGFjdC0+c21hbGxlc3Rfc25hcHNob3QgPSB2ZXJzaW9uc18tPkxhc3RTZXF1ZW5jZSgp
OworICB9IGVsc2UgeworICAgIGNvbXBhY3QtPnNtYWxsZXN0X3NuYXBzaG90ID0gc25hcHNob3Rz
Xy5vbGRlc3QoKS0+bnVtYmVyXzsKKyAgfQorCisgIC8vIFJlbGVhc2UgbXV0ZXggd2hpbGUgd2Un
cmUgYWN0dWFsbHkgZG9pbmcgdGhlIGNvbXBhY3Rpb24gd29yaworICBtdXRleF8uVW5sb2NrKCk7
CisKKyAgSXRlcmF0b3IqIGlucHV0ID0gdmVyc2lvbnNfLT5NYWtlSW5wdXRJdGVyYXRvcihjb21w
YWN0LT5jb21wYWN0aW9uKTsKKyAgaW5wdXQtPlNlZWtUb0ZpcnN0KCk7CisgIFN0YXR1cyBzdGF0
dXM7CisgIFBhcnNlZEludGVybmFsS2V5IGlrZXk7CisgIHN0ZDo6c3RyaW5nIGN1cnJlbnRfdXNl
cl9rZXk7CisgIGJvb2wgaGFzX2N1cnJlbnRfdXNlcl9rZXkgPSBmYWxzZTsKKyAgU2VxdWVuY2VO
dW1iZXIgbGFzdF9zZXF1ZW5jZV9mb3Jfa2V5ID0ga01heFNlcXVlbmNlTnVtYmVyOworICBmb3Ig
KDsgaW5wdXQtPlZhbGlkKCkgJiYgIXNodXR0aW5nX2Rvd25fLkFjcXVpcmVfTG9hZCgpOyApIHsK
KyAgICAvLyBQcmlvcml0aXplIGltbXV0YWJsZSBjb21wYWN0aW9uIHdvcmsKKyAgICBpZiAoaGFz
X2ltbV8uTm9CYXJyaWVyX0xvYWQoKSAhPSBOVUxMKSB7CisgICAgICBjb25zdCB1aW50NjRfdCBp
bW1fc3RhcnQgPSBlbnZfLT5Ob3dNaWNyb3MoKTsKKyAgICAgIG11dGV4Xy5Mb2NrKCk7CisgICAg
ICBpZiAoaW1tXyAhPSBOVUxMKSB7CisgICAgICAgIENvbXBhY3RNZW1UYWJsZSgpOworICAgICAg
ICBiZ19jdl8uU2lnbmFsQWxsKCk7ICAvLyBXYWtldXAgTWFrZVJvb21Gb3JXcml0ZSgpIGlmIG5l
Y2Vzc2FyeQorICAgICAgfQorICAgICAgbXV0ZXhfLlVubG9jaygpOworICAgICAgaW1tX21pY3Jv
cyArPSAoZW52Xy0+Tm93TWljcm9zKCkgLSBpbW1fc3RhcnQpOworICAgIH0KKworICAgIFNsaWNl
IGtleSA9IGlucHV0LT5rZXkoKTsKKyAgICBpZiAoY29tcGFjdC0+Y29tcGFjdGlvbi0+U2hvdWxk
U3RvcEJlZm9yZShrZXkpICYmCisgICAgICAgIGNvbXBhY3QtPmJ1aWxkZXIgIT0gTlVMTCkgewor
ICAgICAgc3RhdHVzID0gRmluaXNoQ29tcGFjdGlvbk91dHB1dEZpbGUoY29tcGFjdCwgaW5wdXQp
OworICAgICAgaWYgKCFzdGF0dXMub2soKSkgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAg
ICB9CisKKyAgICAvLyBIYW5kbGUga2V5L3ZhbHVlLCBhZGQgdG8gc3RhdGUsIGV0Yy4KKyAgICBi
b29sIGRyb3AgPSBmYWxzZTsKKyAgICBpZiAoIVBhcnNlSW50ZXJuYWxLZXkoa2V5LCAmaWtleSkp
IHsKKyAgICAgIC8vIERvIG5vdCBoaWRlIGVycm9yIGtleXMKKyAgICAgIGN1cnJlbnRfdXNlcl9r
ZXkuY2xlYXIoKTsKKyAgICAgIGhhc19jdXJyZW50X3VzZXJfa2V5ID0gZmFsc2U7CisgICAgICBs
YXN0X3NlcXVlbmNlX2Zvcl9rZXkgPSBrTWF4U2VxdWVuY2VOdW1iZXI7CisgICAgfSBlbHNlIHsK
KyAgICAgIGlmICghaGFzX2N1cnJlbnRfdXNlcl9rZXkgfHwKKyAgICAgICAgICB1c2VyX2NvbXBh
cmF0b3IoKS0+Q29tcGFyZShpa2V5LnVzZXJfa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNsaWNlKGN1cnJlbnRfdXNlcl9rZXkpKSAhPSAwKSB7CisgICAgICAgIC8v
IEZpcnN0IG9jY3VycmVuY2Ugb2YgdGhpcyB1c2VyIGtleQorICAgICAgICBjdXJyZW50X3VzZXJf
a2V5LmFzc2lnbihpa2V5LnVzZXJfa2V5LmRhdGEoKSwgaWtleS51c2VyX2tleS5zaXplKCkpOwor
ICAgICAgICBoYXNfY3VycmVudF91c2VyX2tleSA9IHRydWU7CisgICAgICAgIGxhc3Rfc2VxdWVu
Y2VfZm9yX2tleSA9IGtNYXhTZXF1ZW5jZU51bWJlcjsKKyAgICAgIH0KKworICAgICAgaWYgKGxh
c3Rfc2VxdWVuY2VfZm9yX2tleSA8PSBjb21wYWN0LT5zbWFsbGVzdF9zbmFwc2hvdCkgeworICAg
ICAgICAvLyBIaWRkZW4gYnkgYW4gbmV3ZXIgZW50cnkgZm9yIHNhbWUgdXNlciBrZXkKKyAgICAg
ICAgZHJvcCA9IHRydWU7ICAgIC8vIChBKQorICAgICAgfSBlbHNlIGlmIChpa2V5LnR5cGUgPT0g
a1R5cGVEZWxldGlvbiAmJgorICAgICAgICAgICAgICAgICBpa2V5LnNlcXVlbmNlIDw9IGNvbXBh
Y3QtPnNtYWxsZXN0X3NuYXBzaG90ICYmCisgICAgICAgICAgICAgICAgIGNvbXBhY3QtPmNvbXBh
Y3Rpb24tPklzQmFzZUxldmVsRm9yS2V5KGlrZXkudXNlcl9rZXkpKSB7CisgICAgICAgIC8vIEZv
ciB0aGlzIHVzZXIga2V5OgorICAgICAgICAvLyAoMSkgdGhlcmUgaXMgbm8gZGF0YSBpbiBoaWdo
ZXIgbGV2ZWxzCisgICAgICAgIC8vICgyKSBkYXRhIGluIGxvd2VyIGxldmVscyB3aWxsIGhhdmUg
bGFyZ2VyIHNlcXVlbmNlIG51bWJlcnMKKyAgICAgICAgLy8gKDMpIGRhdGEgaW4gbGF5ZXJzIHRo
YXQgYXJlIGJlaW5nIGNvbXBhY3RlZCBoZXJlIGFuZCBoYXZlCisgICAgICAgIC8vICAgICBzbWFs
bGVyIHNlcXVlbmNlIG51bWJlcnMgd2lsbCBiZSBkcm9wcGVkIGluIHRoZSBuZXh0CisgICAgICAg
IC8vICAgICBmZXcgaXRlcmF0aW9ucyBvZiB0aGlzIGxvb3AgKGJ5IHJ1bGUgKEEpIGFib3ZlKS4K
KyAgICAgICAgLy8gVGhlcmVmb3JlIHRoaXMgZGVsZXRpb24gbWFya2VyIGlzIG9ic29sZXRlIGFu
ZCBjYW4gYmUgZHJvcHBlZC4KKyAgICAgICAgZHJvcCA9IHRydWU7CisgICAgICB9CisKKyAgICAg
IGxhc3Rfc2VxdWVuY2VfZm9yX2tleSA9IGlrZXkuc2VxdWVuY2U7CisgICAgfQorI2lmIDAKKyAg
ICBMb2cob3B0aW9uc18uaW5mb19sb2csCisgICAgICAgICIgIENvbXBhY3Q6ICVzLCBzZXEgJWQs
IHR5cGU6ICVkICVkLCBkcm9wOiAlZCwgaXNfYmFzZTogJWQsICIKKyAgICAgICAgIiVkIHNtYWxs
ZXN0X3NuYXBzaG90OiAlZCIsCisgICAgICAgIGlrZXkudXNlcl9rZXkuVG9TdHJpbmcoKS5jX3N0
cigpLAorICAgICAgICAoaW50KWlrZXkuc2VxdWVuY2UsIGlrZXkudHlwZSwga1R5cGVWYWx1ZSwg
ZHJvcCwKKyAgICAgICAgY29tcGFjdC0+Y29tcGFjdGlvbi0+SXNCYXNlTGV2ZWxGb3JLZXkoaWtl
eS51c2VyX2tleSksCisgICAgICAgIChpbnQpbGFzdF9zZXF1ZW5jZV9mb3Jfa2V5LCAoaW50KWNv
bXBhY3QtPnNtYWxsZXN0X3NuYXBzaG90KTsKKyNlbmRpZgorCisgICAgaWYgKCFkcm9wKSB7Cisg
ICAgICAvLyBPcGVuIG91dHB1dCBmaWxlIGlmIG5lY2Vzc2FyeQorICAgICAgaWYgKGNvbXBhY3Qt
PmJ1aWxkZXIgPT0gTlVMTCkgeworICAgICAgICBzdGF0dXMgPSBPcGVuQ29tcGFjdGlvbk91dHB1
dEZpbGUoY29tcGFjdCk7CisgICAgICAgIGlmICghc3RhdHVzLm9rKCkpIHsKKyAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgaWYgKGNvbXBhY3QtPmJ1aWxkZXItPk51
bUVudHJpZXMoKSA9PSAwKSB7CisgICAgICAgIGNvbXBhY3QtPmN1cnJlbnRfb3V0cHV0KCktPnNt
YWxsZXN0LkRlY29kZUZyb20oa2V5KTsKKyAgICAgIH0KKyAgICAgIGNvbXBhY3QtPmN1cnJlbnRf
b3V0cHV0KCktPmxhcmdlc3QuRGVjb2RlRnJvbShrZXkpOworICAgICAgY29tcGFjdC0+YnVpbGRl
ci0+QWRkKGtleSwgaW5wdXQtPnZhbHVlKCkpOworCisgICAgICAvLyBDbG9zZSBvdXRwdXQgZmls
ZSBpZiBpdCBpcyBiaWcgZW5vdWdoCisgICAgICBpZiAoY29tcGFjdC0+YnVpbGRlci0+RmlsZVNp
emUoKSA+PQorICAgICAgICAgIGNvbXBhY3QtPmNvbXBhY3Rpb24tPk1heE91dHB1dEZpbGVTaXpl
KCkpIHsKKyAgICAgICAgc3RhdHVzID0gRmluaXNoQ29tcGFjdGlvbk91dHB1dEZpbGUoY29tcGFj
dCwgaW5wdXQpOworICAgICAgICBpZiAoIXN0YXR1cy5vaygpKSB7CisgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICBpbnB1dC0+TmV4dCgpOworICB9CisK
KyAgaWYgKHN0YXR1cy5vaygpICYmIHNodXR0aW5nX2Rvd25fLkFjcXVpcmVfTG9hZCgpKSB7Cisg
ICAgc3RhdHVzID0gU3RhdHVzOjpJT0Vycm9yKCJEZWxldGluZyBEQiBkdXJpbmcgY29tcGFjdGlv
biIpOworICB9CisgIGlmIChzdGF0dXMub2soKSAmJiBjb21wYWN0LT5idWlsZGVyICE9IE5VTEwp
IHsKKyAgICBzdGF0dXMgPSBGaW5pc2hDb21wYWN0aW9uT3V0cHV0RmlsZShjb21wYWN0LCBpbnB1
dCk7CisgIH0KKyAgaWYgKHN0YXR1cy5vaygpKSB7CisgICAgc3RhdHVzID0gaW5wdXQtPnN0YXR1
cygpOworICB9CisgIGRlbGV0ZSBpbnB1dDsKKyAgaW5wdXQgPSBOVUxMOworCisgIENvbXBhY3Rp
b25TdGF0cyBzdGF0czsKKyAgc3RhdHMubWljcm9zID0gZW52Xy0+Tm93TWljcm9zKCkgLSBzdGFy
dF9taWNyb3MgLSBpbW1fbWljcm9zOworICBmb3IgKGludCB3aGljaCA9IDA7IHdoaWNoIDwgMjsg
d2hpY2grKykgeworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29tcGFjdC0+Y29tcGFjdGlvbi0+
bnVtX2lucHV0X2ZpbGVzKHdoaWNoKTsgaSsrKSB7CisgICAgICBzdGF0cy5ieXRlc19yZWFkICs9
IGNvbXBhY3QtPmNvbXBhY3Rpb24tPmlucHV0KHdoaWNoLCBpKS0+ZmlsZV9zaXplOworICAgIH0K
KyAgfQorICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvbXBhY3QtPm91dHB1dHMuc2l6ZSgpOyBp
KyspIHsKKyAgICBzdGF0cy5ieXRlc193cml0dGVuICs9IGNvbXBhY3QtPm91dHB1dHNbaV0uZmls
ZV9zaXplOworICB9CisKKyAgbXV0ZXhfLkxvY2soKTsKKyAgc3RhdHNfW2NvbXBhY3QtPmNvbXBh
Y3Rpb24tPmxldmVsKCkgKyAxXS5BZGQoc3RhdHMpOworCisgIGlmIChzdGF0dXMub2soKSkgewor
ICAgIHN0YXR1cyA9IEluc3RhbGxDb21wYWN0aW9uUmVzdWx0cyhjb21wYWN0KTsKKyAgfQorICBW
ZXJzaW9uU2V0OjpMZXZlbFN1bW1hcnlTdG9yYWdlIHRtcDsKKyAgTG9nKG9wdGlvbnNfLmluZm9f
bG9nLAorICAgICAgImNvbXBhY3RlZCB0bzogJXMiLCB2ZXJzaW9uc18tPkxldmVsU3VtbWFyeSgm
dG1wKSk7CisgIHJldHVybiBzdGF0dXM7Cit9CisKK25hbWVzcGFjZSB7CitzdHJ1Y3QgSXRlclN0
YXRlIHsKKyAgcG9ydDo6TXV0ZXgqIG11OworICBWZXJzaW9uKiB2ZXJzaW9uOworICBNZW1UYWJs
ZSogbWVtOworICBNZW1UYWJsZSogaW1tOworfTsKKworc3RhdGljIHZvaWQgQ2xlYW51cEl0ZXJh
dG9yU3RhdGUodm9pZCogYXJnMSwgdm9pZCogYXJnMikgeworICBJdGVyU3RhdGUqIHN0YXRlID0g
cmVpbnRlcnByZXRfY2FzdDxJdGVyU3RhdGUqPihhcmcxKTsKKyAgc3RhdGUtPm11LT5Mb2NrKCk7
CisgIHN0YXRlLT5tZW0tPlVucmVmKCk7CisgIGlmIChzdGF0ZS0+aW1tICE9IE5VTEwpIHN0YXRl
LT5pbW0tPlVucmVmKCk7CisgIHN0YXRlLT52ZXJzaW9uLT5VbnJlZigpOworICBzdGF0ZS0+bXUt
PlVubG9jaygpOworICBkZWxldGUgc3RhdGU7Cit9Cit9ICAvLyBuYW1lc3BhY2UKKworSXRlcmF0
b3IqIERCSW1wbDo6TmV3SW50ZXJuYWxJdGVyYXRvcihjb25zdCBSZWFkT3B0aW9ucyYgb3B0aW9u
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VxdWVuY2VOdW1iZXIq
IGxhdGVzdF9zbmFwc2hvdCkgeworICBJdGVyU3RhdGUqIGNsZWFudXAgPSBuZXcgSXRlclN0YXRl
OworICBtdXRleF8uTG9jaygpOworICAqbGF0ZXN0X3NuYXBzaG90ID0gdmVyc2lvbnNfLT5MYXN0
U2VxdWVuY2UoKTsKKworICAvLyBDb2xsZWN0IHRvZ2V0aGVyIGFsbCBuZWVkZWQgY2hpbGQgaXRl
cmF0b3JzCisgIHN0ZDo6dmVjdG9yPEl0ZXJhdG9yKj4gbGlzdDsKKyAgbGlzdC5wdXNoX2JhY2so
bWVtXy0+TmV3SXRlcmF0b3IoKSk7CisgIG1lbV8tPlJlZigpOworICBpZiAoaW1tXyAhPSBOVUxM
KSB7CisgICAgbGlzdC5wdXNoX2JhY2soaW1tXy0+TmV3SXRlcmF0b3IoKSk7CisgICAgaW1tXy0+
UmVmKCk7CisgIH0KKyAgdmVyc2lvbnNfLT5jdXJyZW50KCktPkFkZEl0ZXJhdG9ycyhvcHRpb25z
LCAmbGlzdCk7CisgIEl0ZXJhdG9yKiBpbnRlcm5hbF9pdGVyID0KKyAgICAgIE5ld01lcmdpbmdJ
dGVyYXRvcigmaW50ZXJuYWxfY29tcGFyYXRvcl8sICZsaXN0WzBdLCBsaXN0LnNpemUoKSk7Cisg
IHZlcnNpb25zXy0+Y3VycmVudCgpLT5SZWYoKTsKKworICBjbGVhbnVwLT5tdSA9ICZtdXRleF87
CisgIGNsZWFudXAtPm1lbSA9IG1lbV87CisgIGNsZWFudXAtPmltbSA9IGltbV87CisgIGNsZWFu
dXAtPnZlcnNpb24gPSB2ZXJzaW9uc18tPmN1cnJlbnQoKTsKKyAgaW50ZXJuYWxfaXRlci0+UmVn
aXN0ZXJDbGVhbnVwKENsZWFudXBJdGVyYXRvclN0YXRlLCBjbGVhbnVwLCBOVUxMKTsKKworICBt
dXRleF8uVW5sb2NrKCk7CisgIHJldHVybiBpbnRlcm5hbF9pdGVyOworfQorCitJdGVyYXRvciog
REJJbXBsOjpURVNUX05ld0ludGVybmFsSXRlcmF0b3IoKSB7CisgIFNlcXVlbmNlTnVtYmVyIGln
bm9yZWQ7CisgIHJldHVybiBOZXdJbnRlcm5hbEl0ZXJhdG9yKFJlYWRPcHRpb25zKCksICZpZ25v
cmVkKTsKK30KKworaW50NjRfdCBEQkltcGw6OlRFU1RfTWF4TmV4dExldmVsT3ZlcmxhcHBpbmdC
eXRlcygpIHsKKyAgTXV0ZXhMb2NrIGwoJm11dGV4Xyk7CisgIHJldHVybiB2ZXJzaW9uc18tPk1h
eE5leHRMZXZlbE92ZXJsYXBwaW5nQnl0ZXMoKTsKK30KKworU3RhdHVzIERCSW1wbDo6R2V0KGNv
bnN0IFJlYWRPcHRpb25zJiBvcHRpb25zLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IFNsaWNl
JiBrZXksCisgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcqIHZhbHVlKSB7CisgIFN0YXR1
cyBzOworICBNdXRleExvY2sgbCgmbXV0ZXhfKTsKKyAgU2VxdWVuY2VOdW1iZXIgc25hcHNob3Q7
CisgIGlmIChvcHRpb25zLnNuYXBzaG90ICE9IE5VTEwpIHsKKyAgICBzbmFwc2hvdCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgU25hcHNob3RJbXBsKj4ob3B0aW9ucy5zbmFwc2hvdCktPm51bWJl
cl87CisgIH0gZWxzZSB7CisgICAgc25hcHNob3QgPSB2ZXJzaW9uc18tPkxhc3RTZXF1ZW5jZSgp
OworICB9CisKKyAgTWVtVGFibGUqIG1lbSA9IG1lbV87CisgIE1lbVRhYmxlKiBpbW0gPSBpbW1f
OworICBWZXJzaW9uKiBjdXJyZW50ID0gdmVyc2lvbnNfLT5jdXJyZW50KCk7CisgIG1lbS0+UmVm
KCk7CisgIGlmIChpbW0gIT0gTlVMTCkgaW1tLT5SZWYoKTsKKyAgY3VycmVudC0+UmVmKCk7CisK
KyAgYm9vbCBoYXZlX3N0YXRfdXBkYXRlID0gZmFsc2U7CisgIFZlcnNpb246OkdldFN0YXRzIHN0
YXRzOworCisgIC8vIFVubG9jayB3aGlsZSByZWFkaW5nIGZyb20gZmlsZXMgYW5kIG1lbXRhYmxl
cworICB7CisgICAgbXV0ZXhfLlVubG9jaygpOworICAgIC8vIEZpcnN0IGxvb2sgaW4gdGhlIG1l
bXRhYmxlLCB0aGVuIGluIHRoZSBpbW11dGFibGUgbWVtdGFibGUgKGlmIGFueSkuCisgICAgTG9v
a3VwS2V5IGxrZXkoa2V5LCBzbmFwc2hvdCk7CisgICAgaWYgKG1lbS0+R2V0KGxrZXksIHZhbHVl
LCAmcykpIHsKKyAgICAgIC8vIERvbmUKKyAgICB9IGVsc2UgaWYgKGltbSAhPSBOVUxMICYmIGlt
bS0+R2V0KGxrZXksIHZhbHVlLCAmcykpIHsKKyAgICAgIC8vIERvbmUKKyAgICB9IGVsc2Ugewor
ICAgICAgcyA9IGN1cnJlbnQtPkdldChvcHRpb25zLCBsa2V5LCB2YWx1ZSwgJnN0YXRzKTsKKyAg
ICAgIGhhdmVfc3RhdF91cGRhdGUgPSB0cnVlOworICAgIH0KKyAgICBtdXRleF8uTG9jaygpOwor
ICB9CisKKyAgaWYgKGhhdmVfc3RhdF91cGRhdGUgJiYgY3VycmVudC0+VXBkYXRlU3RhdHMoc3Rh
dHMpKSB7CisgICAgTWF5YmVTY2hlZHVsZUNvbXBhY3Rpb24oKTsKKyAgfQorICBtZW0tPlVucmVm
KCk7CisgIGlmIChpbW0gIT0gTlVMTCkgaW1tLT5VbnJlZigpOworICBjdXJyZW50LT5VbnJlZigp
OworICByZXR1cm4gczsKK30KKworSXRlcmF0b3IqIERCSW1wbDo6TmV3SXRlcmF0b3IoY29uc3Qg
UmVhZE9wdGlvbnMmIG9wdGlvbnMpIHsKKyAgU2VxdWVuY2VOdW1iZXIgbGF0ZXN0X3NuYXBzaG90
OworICBJdGVyYXRvciogaW50ZXJuYWxfaXRlciA9IE5ld0ludGVybmFsSXRlcmF0b3Iob3B0aW9u
cywgJmxhdGVzdF9zbmFwc2hvdCk7CisgIHJldHVybiBOZXdEQkl0ZXJhdG9yKAorICAgICAgJmRi
bmFtZV8sIGVudl8sIHVzZXJfY29tcGFyYXRvcigpLCBpbnRlcm5hbF9pdGVyLAorICAgICAgKG9w
dGlvbnMuc25hcHNob3QgIT0gTlVMTAorICAgICAgID8gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBT
bmFwc2hvdEltcGwqPihvcHRpb25zLnNuYXBzaG90KS0+bnVtYmVyXworICAgICAgIDogbGF0ZXN0
X3NuYXBzaG90KSk7Cit9CisKK2NvbnN0IFNuYXBzaG90KiBEQkltcGw6OkdldFNuYXBzaG90KCkg
eworICBNdXRleExvY2sgbCgmbXV0ZXhfKTsKKyAgcmV0dXJuIHNuYXBzaG90c18uTmV3KHZlcnNp
b25zXy0+TGFzdFNlcXVlbmNlKCkpOworfQorCit2b2lkIERCSW1wbDo6UmVsZWFzZVNuYXBzaG90
KGNvbnN0IFNuYXBzaG90KiBzKSB7CisgIE11dGV4TG9jayBsKCZtdXRleF8pOworICBzbmFwc2hv
dHNfLkRlbGV0ZShyZWludGVycHJldF9jYXN0PGNvbnN0IFNuYXBzaG90SW1wbCo+KHMpKTsKK30K
KworLy8gQ29udmVuaWVuY2UgbWV0aG9kcworU3RhdHVzIERCSW1wbDo6UHV0KGNvbnN0IFdyaXRl
T3B0aW9ucyYgbywgY29uc3QgU2xpY2UmIGtleSwgY29uc3QgU2xpY2UmIHZhbCkgeworICByZXR1
cm4gREI6OlB1dChvLCBrZXksIHZhbCk7Cit9CisKK1N0YXR1cyBEQkltcGw6OkRlbGV0ZShjb25z
dCBXcml0ZU9wdGlvbnMmIG9wdGlvbnMsIGNvbnN0IFNsaWNlJiBrZXkpIHsKKyAgcmV0dXJuIERC
OjpEZWxldGUob3B0aW9ucywga2V5KTsKK30KKworU3RhdHVzIERCSW1wbDo6V3JpdGUoY29uc3Qg
V3JpdGVPcHRpb25zJiBvcHRpb25zLCBXcml0ZUJhdGNoKiBteV9iYXRjaCkgeworICBXcml0ZXIg
dygmbXV0ZXhfKTsKKyAgdy5iYXRjaCA9IG15X2JhdGNoOworICB3LnN5bmMgPSBvcHRpb25zLnN5
bmM7CisgIHcuZG9uZSA9IGZhbHNlOworCisgIE11dGV4TG9jayBsKCZtdXRleF8pOworICB3cml0
ZXJzXy5wdXNoX2JhY2soJncpOworICB3aGlsZSAoIXcuZG9uZSAmJiAmdyAhPSB3cml0ZXJzXy5m
cm9udCgpKSB7CisgICAgdy5jdi5XYWl0KCk7CisgIH0KKyAgaWYgKHcuZG9uZSkgeworICAgIHJl
dHVybiB3LnN0YXR1czsKKyAgfQorCisgIC8vIE1heSB0ZW1wb3JhcmlseSB1bmxvY2sgYW5kIHdh
aXQuCisgIFN0YXR1cyBzdGF0dXMgPSBNYWtlUm9vbUZvcldyaXRlKG15X2JhdGNoID09IE5VTEwp
OworICB1aW50NjRfdCBsYXN0X3NlcXVlbmNlID0gdmVyc2lvbnNfLT5MYXN0U2VxdWVuY2UoKTsK
KyAgV3JpdGVyKiBsYXN0X3dyaXRlciA9ICZ3OworICBpZiAoc3RhdHVzLm9rKCkgJiYgbXlfYmF0
Y2ggIT0gTlVMTCkgeyAgLy8gTlVMTCBiYXRjaCBpcyBmb3IgY29tcGFjdGlvbnMKKyAgICBXcml0
ZUJhdGNoKiB1cGRhdGVzID0gQnVpbGRCYXRjaEdyb3VwKCZsYXN0X3dyaXRlcik7CisgICAgV3Jp
dGVCYXRjaEludGVybmFsOjpTZXRTZXF1ZW5jZSh1cGRhdGVzLCBsYXN0X3NlcXVlbmNlICsgMSk7
CisgICAgbGFzdF9zZXF1ZW5jZSArPSBXcml0ZUJhdGNoSW50ZXJuYWw6OkNvdW50KHVwZGF0ZXMp
OworCisgICAgLy8gQWRkIHRvIGxvZyBhbmQgYXBwbHkgdG8gbWVtdGFibGUuICBXZSBjYW4gcmVs
ZWFzZSB0aGUgbG9jaworICAgIC8vIGR1cmluZyB0aGlzIHBoYXNlIHNpbmNlICZ3IGlzIGN1cnJl
bnRseSByZXNwb25zaWJsZSBmb3IgbG9nZ2luZworICAgIC8vIGFuZCBwcm90ZWN0cyBhZ2FpbnN0
IGNvbmN1cnJlbnQgbG9nZ2VycyBhbmQgY29uY3VycmVudCB3cml0ZXMKKyAgICAvLyBpbnRvIG1l
bV8uCisgICAgeworICAgICAgbXV0ZXhfLlVubG9jaygpOworICAgICAgc3RhdHVzID0gbG9nXy0+
QWRkUmVjb3JkKFdyaXRlQmF0Y2hJbnRlcm5hbDo6Q29udGVudHModXBkYXRlcykpOworICAgICAg
aWYgKHN0YXR1cy5vaygpICYmIG9wdGlvbnMuc3luYykgeworICAgICAgICBzdGF0dXMgPSBsb2dm
aWxlXy0+U3luYygpOworICAgICAgfQorICAgICAgaWYgKHN0YXR1cy5vaygpKSB7CisgICAgICAg
IHN0YXR1cyA9IFdyaXRlQmF0Y2hJbnRlcm5hbDo6SW5zZXJ0SW50byh1cGRhdGVzLCBtZW1fKTsK
KyAgICAgIH0KKyAgICAgIG11dGV4Xy5Mb2NrKCk7CisgICAgfQorICAgIGlmICh1cGRhdGVzID09
IHRtcF9iYXRjaF8pIHRtcF9iYXRjaF8tPkNsZWFyKCk7CisKKyAgICB2ZXJzaW9uc18tPlNldExh
c3RTZXF1ZW5jZShsYXN0X3NlcXVlbmNlKTsKKyAgfQorCisgIHdoaWxlICh0cnVlKSB7CisgICAg
V3JpdGVyKiByZWFkeSA9IHdyaXRlcnNfLmZyb250KCk7CisgICAgd3JpdGVyc18ucG9wX2Zyb250
KCk7CisgICAgaWYgKHJlYWR5ICE9ICZ3KSB7CisgICAgICByZWFkeS0+c3RhdHVzID0gc3RhdHVz
OworICAgICAgcmVhZHktPmRvbmUgPSB0cnVlOworICAgICAgcmVhZHktPmN2LlNpZ25hbCgpOwor
ICAgIH0KKyAgICBpZiAocmVhZHkgPT0gbGFzdF93cml0ZXIpIGJyZWFrOworICB9CisKKyAgLy8g
Tm90aWZ5IG5ldyBoZWFkIG9mIHdyaXRlIHF1ZXVlCisgIGlmICghd3JpdGVyc18uZW1wdHkoKSkg
eworICAgIHdyaXRlcnNfLmZyb250KCktPmN2LlNpZ25hbCgpOworICB9CisKKyAgcmV0dXJuIHN0
YXR1czsKK30KKworLy8gUkVRVUlSRVM6IFdyaXRlciBsaXN0IG11c3QgYmUgbm9uLWVtcHR5Cisv
LyBSRVFVSVJFUzogRmlyc3Qgd3JpdGVyIG11c3QgaGF2ZSBhIG5vbi1OVUxMIGJhdGNoCitXcml0
ZUJhdGNoKiBEQkltcGw6OkJ1aWxkQmF0Y2hHcm91cChXcml0ZXIqKiBsYXN0X3dyaXRlcikgewor
ICBhc3NlcnQoIXdyaXRlcnNfLmVtcHR5KCkpOworICBXcml0ZXIqIGZpcnN0ID0gd3JpdGVyc18u
ZnJvbnQoKTsKKyAgV3JpdGVCYXRjaCogcmVzdWx0ID0gZmlyc3QtPmJhdGNoOworICBhc3NlcnQo
cmVzdWx0ICE9IE5VTEwpOworCisgIHNpemVfdCBzaXplID0gV3JpdGVCYXRjaEludGVybmFsOjpC
eXRlU2l6ZShmaXJzdC0+YmF0Y2gpOworCisgIC8vIEFsbG93IHRoZSBncm91cCB0byBncm93IHVw
IHRvIGEgbWF4aW11bSBzaXplLCBidXQgaWYgdGhlCisgIC8vIG9yaWdpbmFsIHdyaXRlIGlzIHNt
YWxsLCBsaW1pdCB0aGUgZ3Jvd3RoIHNvIHdlIGRvIG5vdCBzbG93CisgIC8vIGRvd24gdGhlIHNt
YWxsIHdyaXRlIHRvbyBtdWNoLgorICBzaXplX3QgbWF4X3NpemUgPSAxIDw8IDIwOworICBpZiAo
c2l6ZSA8PSAoMTI4PDwxMCkpIHsKKyAgICBtYXhfc2l6ZSA9IHNpemUgKyAoMTI4PDwxMCk7Cisg
IH0KKworICAqbGFzdF93cml0ZXIgPSBmaXJzdDsKKyAgc3RkOjpkZXF1ZTxXcml0ZXIqPjo6aXRl
cmF0b3IgaXRlciA9IHdyaXRlcnNfLmJlZ2luKCk7CisgICsraXRlcjsgIC8vIEFkdmFuY2UgcGFz
dCAiZmlyc3QiCisgIGZvciAoOyBpdGVyICE9IHdyaXRlcnNfLmVuZCgpOyArK2l0ZXIpIHsKKyAg
ICBXcml0ZXIqIHcgPSAqaXRlcjsKKyAgICBpZiAody0+c3luYyAmJiAhZmlyc3QtPnN5bmMpIHsK
KyAgICAgIC8vIERvIG5vdCBpbmNsdWRlIGEgc3luYyB3cml0ZSBpbnRvIGEgYmF0Y2ggaGFuZGxl
ZCBieSBhIG5vbi1zeW5jIHdyaXRlLgorICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKHct
PmJhdGNoICE9IE5VTEwpIHsKKyAgICAgIHNpemUgKz0gV3JpdGVCYXRjaEludGVybmFsOjpCeXRl
U2l6ZSh3LT5iYXRjaCk7CisgICAgICBpZiAoc2l6ZSA+IG1heF9zaXplKSB7CisgICAgICAgIC8v
IERvIG5vdCBtYWtlIGJhdGNoIHRvbyBiaWcKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAg
ICAgIC8vIEFwcGVuZCB0byAqcmV1c2x0CisgICAgICBpZiAocmVzdWx0ID09IGZpcnN0LT5iYXRj
aCkgeworICAgICAgICAvLyBTd2l0Y2ggdG8gdGVtcG9yYXJ5IGJhdGNoIGluc3RlYWQgb2YgZGlz
dHVyYmluZyBjYWxsZXIncyBiYXRjaAorICAgICAgICByZXN1bHQgPSB0bXBfYmF0Y2hfOworICAg
ICAgICBhc3NlcnQoV3JpdGVCYXRjaEludGVybmFsOjpDb3VudChyZXN1bHQpID09IDApOworICAg
ICAgICBXcml0ZUJhdGNoSW50ZXJuYWw6OkFwcGVuZChyZXN1bHQsIGZpcnN0LT5iYXRjaCk7Cisg
ICAgICB9CisgICAgICBXcml0ZUJhdGNoSW50ZXJuYWw6OkFwcGVuZChyZXN1bHQsIHctPmJhdGNo
KTsKKyAgICB9CisgICAgKmxhc3Rfd3JpdGVyID0gdzsKKyAgfQorICByZXR1cm4gcmVzdWx0Owor
fQorCisvLyBSRVFVSVJFUzogbXV0ZXhfIGlzIGhlbGQKKy8vIFJFUVVJUkVTOiB0aGlzIHRocmVh
ZCBpcyBjdXJyZW50bHkgYXQgdGhlIGZyb250IG9mIHRoZSB3cml0ZXIgcXVldWUKK1N0YXR1cyBE
QkltcGw6Ok1ha2VSb29tRm9yV3JpdGUoYm9vbCBmb3JjZSkgeworICBtdXRleF8uQXNzZXJ0SGVs
ZCgpOworICBhc3NlcnQoIXdyaXRlcnNfLmVtcHR5KCkpOworICBib29sIGFsbG93X2RlbGF5ID0g
IWZvcmNlOworICBTdGF0dXMgczsKKyAgd2hpbGUgKHRydWUpIHsKKyAgICBpZiAoIWJnX2Vycm9y
Xy5vaygpKSB7CisgICAgICAvLyBZaWVsZCBwcmV2aW91cyBlcnJvcgorICAgICAgcyA9IGJnX2Vy
cm9yXzsKKyAgICAgIGJyZWFrOworICAgIH0gZWxzZSBpZiAoCisgICAgICAgIGFsbG93X2RlbGF5
ICYmCisgICAgICAgIHZlcnNpb25zXy0+TnVtTGV2ZWxGaWxlcygwKSA+PSBjb25maWc6OmtMMF9T
bG93ZG93bldyaXRlc1RyaWdnZXIpIHsKKyAgICAgIC8vIFdlIGFyZSBnZXR0aW5nIGNsb3NlIHRv
IGhpdHRpbmcgYSBoYXJkIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YKKyAgICAgIC8vIEwwIGZpbGVz
LiAgUmF0aGVyIHRoYW4gZGVsYXlpbmcgYSBzaW5nbGUgd3JpdGUgYnkgc2V2ZXJhbAorICAgICAg
Ly8gc2Vjb25kcyB3aGVuIHdlIGhpdCB0aGUgaGFyZCBsaW1pdCwgc3RhcnQgZGVsYXlpbmcgZWFj
aAorICAgICAgLy8gaW5kaXZpZHVhbCB3cml0ZSBieSAxbXMgdG8gcmVkdWNlIGxhdGVuY3kgdmFy
aWFuY2UuICBBbHNvLAorICAgICAgLy8gdGhpcyBkZWxheSBoYW5kcyBvdmVyIHNvbWUgQ1BVIHRv
IHRoZSBjb21wYWN0aW9uIHRocmVhZCBpbgorICAgICAgLy8gY2FzZSBpdCBpcyBzaGFyaW5nIHRo
ZSBzYW1lIGNvcmUgYXMgdGhlIHdyaXRlci4KKyAgICAgIG11dGV4Xy5VbmxvY2soKTsKKyAgICAg
IGVudl8tPlNsZWVwRm9yTWljcm9zZWNvbmRzKDEwMDApOworICAgICAgYWxsb3dfZGVsYXkgPSBm
YWxzZTsgIC8vIERvIG5vdCBkZWxheSBhIHNpbmdsZSB3cml0ZSBtb3JlIHRoYW4gb25jZQorICAg
ICAgbXV0ZXhfLkxvY2soKTsKKyAgICB9IGVsc2UgaWYgKCFmb3JjZSAmJgorICAgICAgICAgICAg
ICAgKG1lbV8tPkFwcHJveGltYXRlTWVtb3J5VXNhZ2UoKSA8PSBvcHRpb25zXy53cml0ZV9idWZm
ZXJfc2l6ZSkpIHsKKyAgICAgIC8vIFRoZXJlIGlzIHJvb20gaW4gY3VycmVudCBtZW10YWJsZQor
ICAgICAgYnJlYWs7CisgICAgfSBlbHNlIGlmIChpbW1fICE9IE5VTEwpIHsKKyAgICAgIC8vIFdl
IGhhdmUgZmlsbGVkIHVwIHRoZSBjdXJyZW50IG1lbXRhYmxlLCBidXQgdGhlIHByZXZpb3VzCisg
ICAgICAvLyBvbmUgaXMgc3RpbGwgYmVpbmcgY29tcGFjdGVkLCBzbyB3ZSB3YWl0LgorICAgICAg
YmdfY3ZfLldhaXQoKTsKKyAgICB9IGVsc2UgaWYgKHZlcnNpb25zXy0+TnVtTGV2ZWxGaWxlcygw
KSA+PSBjb25maWc6OmtMMF9TdG9wV3JpdGVzVHJpZ2dlcikgeworICAgICAgLy8gVGhlcmUgYXJl
IHRvbyBtYW55IGxldmVsLTAgZmlsZXMuCisgICAgICBMb2cob3B0aW9uc18uaW5mb19sb2csICJ3
YWl0aW5nLi4uXG4iKTsKKyAgICAgIGJnX2N2Xy5XYWl0KCk7CisgICAgfSBlbHNlIHsKKyAgICAg
IC8vIEF0dGVtcHQgdG8gc3dpdGNoIHRvIGEgbmV3IG1lbXRhYmxlIGFuZCB0cmlnZ2VyIGNvbXBh
Y3Rpb24gb2Ygb2xkCisgICAgICBhc3NlcnQodmVyc2lvbnNfLT5QcmV2TG9nTnVtYmVyKCkgPT0g
MCk7CisgICAgICB1aW50NjRfdCBuZXdfbG9nX251bWJlciA9IHZlcnNpb25zXy0+TmV3RmlsZU51
bWJlcigpOworICAgICAgV3JpdGFibGVGaWxlKiBsZmlsZSA9IE5VTEw7CisgICAgICBzID0gZW52
Xy0+TmV3V3JpdGFibGVGaWxlKExvZ0ZpbGVOYW1lKGRibmFtZV8sIG5ld19sb2dfbnVtYmVyKSwg
JmxmaWxlKTsKKyAgICAgIGlmICghcy5vaygpKSB7CisgICAgICAgIC8vIEF2b2lkIGNoZXdpbmcg
dGhyb3VnaCBmaWxlIG51bWJlciBzcGFjZSBpbiBhIHRpZ2h0IGxvb3AuCisgICAgICAgIHZlcnNp
b25zXy0+UmV1c2VGaWxlTnVtYmVyKG5ld19sb2dfbnVtYmVyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICB9CisgICAgICBkZWxldGUgbG9nXzsKKyAgICAgIGRlbGV0ZSBsb2dmaWxlXzsKKyAgICAg
IGxvZ2ZpbGVfID0gbGZpbGU7CisgICAgICBsb2dmaWxlX251bWJlcl8gPSBuZXdfbG9nX251bWJl
cjsKKyAgICAgIGxvZ18gPSBuZXcgbG9nOjpXcml0ZXIobGZpbGUpOworICAgICAgaW1tXyA9IG1l
bV87CisgICAgICBoYXNfaW1tXy5SZWxlYXNlX1N0b3JlKGltbV8pOworICAgICAgbWVtXyA9IG5l
dyBNZW1UYWJsZShpbnRlcm5hbF9jb21wYXJhdG9yXyk7CisgICAgICBtZW1fLT5SZWYoKTsKKyAg
ICAgIGZvcmNlID0gZmFsc2U7ICAgLy8gRG8gbm90IGZvcmNlIGFub3RoZXIgY29tcGFjdGlvbiBp
ZiBoYXZlIHJvb20KKyAgICAgIE1heWJlU2NoZWR1bGVDb21wYWN0aW9uKCk7CisgICAgfQorICB9
CisgIHJldHVybiBzOworfQorCitib29sIERCSW1wbDo6R2V0UHJvcGVydHkoY29uc3QgU2xpY2Um
IHByb3BlcnR5LCBzdGQ6OnN0cmluZyogdmFsdWUpIHsKKyAgdmFsdWUtPmNsZWFyKCk7CisKKyAg
TXV0ZXhMb2NrIGwoJm11dGV4Xyk7CisgIFNsaWNlIGluID0gcHJvcGVydHk7CisgIFNsaWNlIHBy
ZWZpeCgibGV2ZWxkYi4iKTsKKyAgaWYgKCFpbi5zdGFydHNfd2l0aChwcmVmaXgpKSByZXR1cm4g
ZmFsc2U7CisgIGluLnJlbW92ZV9wcmVmaXgocHJlZml4LnNpemUoKSk7CisKKyAgaWYgKGluLnN0
YXJ0c193aXRoKCJudW0tZmlsZXMtYXQtbGV2ZWwiKSkgeworICAgIGluLnJlbW92ZV9wcmVmaXgo
c3RybGVuKCJudW0tZmlsZXMtYXQtbGV2ZWwiKSk7CisgICAgdWludDY0X3QgbGV2ZWw7CisgICAg
Ym9vbCBvayA9IENvbnN1bWVEZWNpbWFsTnVtYmVyKCZpbiwgJmxldmVsKSAmJiBpbi5lbXB0eSgp
OworICAgIGlmICghb2sgfHwgbGV2ZWwgPj0gY29uZmlnOjprTnVtTGV2ZWxzKSB7CisgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfSBlbHNlIHsKKyAgICAgIGNoYXIgYnVmWzEwMF07CisgICAgICBz
bnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWQiLAorICAgICAgICAgICAgICAgdmVyc2lvbnNf
LT5OdW1MZXZlbEZpbGVzKHN0YXRpY19jYXN0PGludD4obGV2ZWwpKSk7CisgICAgICAqdmFsdWUg
PSBidWY7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgIH0gZWxzZSBpZiAoaW4gPT0gInN0
YXRzIikgeworICAgIGNoYXIgYnVmWzIwMF07CisgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVm
KSwKKyAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBhY3Rp
b25zXG4iCisgICAgICAgICAgICAgIkxldmVsICBGaWxlcyBTaXplKE1CKSBUaW1lKHNlYykgUmVh
ZChNQikgV3JpdGUoTUIpXG4iCisgICAgICAgICAgICAgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisgICAgICAgICAgICAgKTsKKyAgICB2YWx1
ZS0+YXBwZW5kKGJ1Zik7CisgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGNvbmZpZzo6
a051bUxldmVsczsgbGV2ZWwrKykgeworICAgICAgaW50IGZpbGVzID0gdmVyc2lvbnNfLT5OdW1M
ZXZlbEZpbGVzKGxldmVsKTsKKyAgICAgIGlmIChzdGF0c19bbGV2ZWxdLm1pY3JvcyA+IDAgfHwg
ZmlsZXMgPiAwKSB7CisgICAgICAgIHNucHJpbnRmKAorICAgICAgICAgICAgYnVmLCBzaXplb2Yo
YnVmKSwKKyAgICAgICAgICAgICIlM2QgJThkICU4LjBmICU5LjBmICU4LjBmICU5LjBmXG4iLAor
ICAgICAgICAgICAgbGV2ZWwsCisgICAgICAgICAgICBmaWxlcywKKyAgICAgICAgICAgIHZlcnNp
b25zXy0+TnVtTGV2ZWxCeXRlcyhsZXZlbCkgLyAxMDQ4NTc2LjAsCisgICAgICAgICAgICBzdGF0
c19bbGV2ZWxdLm1pY3JvcyAvIDFlNiwKKyAgICAgICAgICAgIHN0YXRzX1tsZXZlbF0uYnl0ZXNf
cmVhZCAvIDEwNDg1NzYuMCwKKyAgICAgICAgICAgIHN0YXRzX1tsZXZlbF0uYnl0ZXNfd3JpdHRl
biAvIDEwNDg1NzYuMCk7CisgICAgICAgIHZhbHVlLT5hcHBlbmQoYnVmKTsKKyAgICAgIH0KKyAg
ICB9CisgICAgcmV0dXJuIHRydWU7CisgIH0gZWxzZSBpZiAoaW4gPT0gInNzdGFibGVzIikgewor
ICAgICp2YWx1ZSA9IHZlcnNpb25zXy0+Y3VycmVudCgpLT5EZWJ1Z1N0cmluZygpOworICAgIHJl
dHVybiB0cnVlOworICB9CisKKyAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIERCSW1wbDo6R2V0
QXBwcm94aW1hdGVTaXplcygKKyAgICBjb25zdCBSYW5nZSogcmFuZ2UsIGludCBuLAorICAgIHVp
bnQ2NF90KiBzaXplcykgeworICAvLyBUT0RPKG9wdCk6IGJldHRlciBpbXBsZW1lbnRhdGlvbgor
ICBWZXJzaW9uKiB2OworICB7CisgICAgTXV0ZXhMb2NrIGwoJm11dGV4Xyk7CisgICAgdmVyc2lv
bnNfLT5jdXJyZW50KCktPlJlZigpOworICAgIHYgPSB2ZXJzaW9uc18tPmN1cnJlbnQoKTsKKyAg
fQorCisgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgLy8gQ29udmVydCB1c2Vy
X2tleSBpbnRvIGEgY29ycmVzcG9uZGluZyBpbnRlcm5hbCBrZXkuCisgICAgSW50ZXJuYWxLZXkg
azEocmFuZ2VbaV0uc3RhcnQsIGtNYXhTZXF1ZW5jZU51bWJlciwga1ZhbHVlVHlwZUZvclNlZWsp
OworICAgIEludGVybmFsS2V5IGsyKHJhbmdlW2ldLmxpbWl0LCBrTWF4U2VxdWVuY2VOdW1iZXIs
IGtWYWx1ZVR5cGVGb3JTZWVrKTsKKyAgICB1aW50NjRfdCBzdGFydCA9IHZlcnNpb25zXy0+QXBw
cm94aW1hdGVPZmZzZXRPZih2LCBrMSk7CisgICAgdWludDY0X3QgbGltaXQgPSB2ZXJzaW9uc18t
PkFwcHJveGltYXRlT2Zmc2V0T2YodiwgazIpOworICAgIHNpemVzW2ldID0gKGxpbWl0ID49IHN0
YXJ0ID8gbGltaXQgLSBzdGFydCA6IDApOworICB9CisKKyAgeworICAgIE11dGV4TG9jayBsKCZt
dXRleF8pOworICAgIHYtPlVucmVmKCk7CisgIH0KK30KKworLy8gRGVmYXVsdCBpbXBsZW1lbnRh
dGlvbnMgb2YgY29udmVuaWVuY2UgbWV0aG9kcyB0aGF0IHN1YmNsYXNzZXMgb2YgREIKKy8vIGNh
biBjYWxsIGlmIHRoZXkgd2lzaAorU3RhdHVzIERCOjpQdXQoY29uc3QgV3JpdGVPcHRpb25zJiBv
cHQsIGNvbnN0IFNsaWNlJiBrZXksIGNvbnN0IFNsaWNlJiB2YWx1ZSkgeworICBXcml0ZUJhdGNo
IGJhdGNoOworICBiYXRjaC5QdXQoa2V5LCB2YWx1ZSk7CisgIHJldHVybiBXcml0ZShvcHQsICZi
YXRjaCk7Cit9CisKK1N0YXR1cyBEQjo6RGVsZXRlKGNvbnN0IFdyaXRlT3B0aW9ucyYgb3B0LCBj
b25zdCBTbGljZSYga2V5KSB7CisgIFdyaXRlQmF0Y2ggYmF0Y2g7CisgIGJhdGNoLkRlbGV0ZShr
ZXkpOworICByZXR1cm4gV3JpdGUob3B0LCAmYmF0Y2gpOworfQorCitEQjo6fkRCKCkgeyB9CisK
K1N0YXR1cyBEQjo6T3Blbihjb25zdCBPcHRpb25zJiBvcHRpb25zLCBjb25zdCBzdGQ6OnN0cmlu
ZyYgZGJuYW1lLAorICAgICAgICAgICAgICAgIERCKiogZGJwdHIpIHsKKyAgKmRicHRyID0gTlVM
TDsKKworICBEQkltcGwqIGltcGwgPSBuZXcgREJJbXBsKG9wdGlvbnMsIGRibmFtZSk7CisgIGlt
cGwtPm11dGV4Xy5Mb2NrKCk7CisgIFZlcnNpb25FZGl0IGVkaXQ7CisgIFN0YXR1cyBzID0gaW1w
bC0+UmVjb3ZlcigmZWRpdCk7IC8vIEhhbmRsZXMgY3JlYXRlX2lmX21pc3NpbmcsIGVycm9yX2lm
X2V4aXN0cworICBpZiAocy5vaygpKSB7CisgICAgdWludDY0X3QgbmV3X2xvZ19udW1iZXIgPSBp
bXBsLT52ZXJzaW9uc18tPk5ld0ZpbGVOdW1iZXIoKTsKKyAgICBXcml0YWJsZUZpbGUqIGxmaWxl
OworICAgIHMgPSBvcHRpb25zLmVudi0+TmV3V3JpdGFibGVGaWxlKExvZ0ZpbGVOYW1lKGRibmFt
ZSwgbmV3X2xvZ19udW1iZXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZsZmlsZSk7CisgICAgaWYgKHMub2soKSkgeworICAgICAgZWRpdC5TZXRMb2dOdW1iZXIobmV3
X2xvZ19udW1iZXIpOworICAgICAgaW1wbC0+bG9nZmlsZV8gPSBsZmlsZTsKKyAgICAgIGltcGwt
PmxvZ2ZpbGVfbnVtYmVyXyA9IG5ld19sb2dfbnVtYmVyOworICAgICAgaW1wbC0+bG9nXyA9IG5l
dyBsb2c6OldyaXRlcihsZmlsZSk7CisgICAgICBzID0gaW1wbC0+dmVyc2lvbnNfLT5Mb2dBbmRB
cHBseSgmZWRpdCwgJmltcGwtPm11dGV4Xyk7CisgICAgfQorICAgIGlmIChzLm9rKCkpIHsKKyAg
ICAgIGltcGwtPkRlbGV0ZU9ic29sZXRlRmlsZXMoKTsKKyAgICAgIGltcGwtPk1heWJlU2NoZWR1
bGVDb21wYWN0aW9uKCk7CisgICAgfQorICB9CisgIGltcGwtPm11dGV4Xy5VbmxvY2soKTsKKyAg
aWYgKHMub2soKSkgeworICAgICpkYnB0ciA9IGltcGw7CisgIH0gZWxzZSB7CisgICAgZGVsZXRl
IGltcGw7CisgIH0KKyAgcmV0dXJuIHM7Cit9CisKK1NuYXBzaG90Ojp+U25hcHNob3QoKSB7Cit9
CisKK1N0YXR1cyBEZXN0cm95REIoY29uc3Qgc3RkOjpzdHJpbmcmIGRibmFtZSwgY29uc3QgT3B0
aW9ucyYgb3B0aW9ucykgeworICBFbnYqIGVudiA9IG9wdGlvbnMuZW52OworICBzdGQ6OnZlY3Rv
cjxzdGQ6OnN0cmluZz4gZmlsZW5hbWVzOworICAvLyBJZ25vcmUgZXJyb3IgaW4gY2FzZSBkaXJl
Y3RvcnkgZG9lcyBub3QgZXhpc3QKKyAgZW52LT5HZXRDaGlsZHJlbihkYm5hbWUsICZmaWxlbmFt
ZXMpOworICBpZiAoZmlsZW5hbWVzLmVtcHR5KCkpIHsKKyAgICByZXR1cm4gU3RhdHVzOjpPSygp
OworICB9CisKKyAgRmlsZUxvY2sqIGxvY2s7CisgIGNvbnN0IHN0ZDo6c3RyaW5nIGxvY2tuYW1l
ID0gTG9ja0ZpbGVOYW1lKGRibmFtZSk7CisgIFN0YXR1cyByZXN1bHQgPSBlbnYtPkxvY2tGaWxl
KGxvY2tuYW1lLCAmbG9jayk7CisgIGlmIChyZXN1bHQub2soKSkgeworICAgIHVpbnQ2NF90IG51
bWJlcjsKKyAgICBGaWxlVHlwZSB0eXBlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmls
ZW5hbWVzLnNpemUoKTsgaSsrKSB7CisgICAgICBpZiAoUGFyc2VGaWxlTmFtZShmaWxlbmFtZXNb
aV0sICZudW1iZXIsICZ0eXBlKSAmJgorICAgICAgICAgIHR5cGUgIT0ga0RCTG9ja0ZpbGUpIHsg
IC8vIExvY2sgZmlsZSB3aWxsIGJlIGRlbGV0ZWQgYXQgZW5kCisgICAgICAgIFN0YXR1cyBkZWwg
PSBlbnYtPkRlbGV0ZUZpbGUoZGJuYW1lICsgIi8iICsgZmlsZW5hbWVzW2ldKTsKKyAgICAgICAg
aWYgKHJlc3VsdC5vaygpICYmICFkZWwub2soKSkgeworICAgICAgICAgIHJlc3VsdCA9IGRlbDsK
KyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICBlbnYtPlVubG9ja0ZpbGUobG9jayk7ICAv
LyBJZ25vcmUgZXJyb3Igc2luY2Ugc3RhdGUgaXMgYWxyZWFkeSBnb25lCisgICAgZW52LT5EZWxl
dGVGaWxlKGxvY2tuYW1lKTsKKyAgICBlbnYtPkRlbGV0ZURpcihkYm5hbWUpOyAgLy8gSWdub3Jl
IGVycm9yIGluIGNhc2UgZGlyIGNvbnRhaW5zIG90aGVyIGZpbGVzCisgIH0KKyAgcmV0dXJuIHJl
c3VsdDsKK30KKworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xldmVsZGIvZGIvZGJfaW1wbC5oIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxk
Yi9kYi9kYl9pbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmQyOWRkODA1NTRiZTEzNThmNzMwMzllMjkzZmQ0
NGQxZTQzNzgyNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIv
ZGIvZGJfaW1wbC5oCkBAIC0wLDAgKzEsMjAyIEBACisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhl
IExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBu
YW1lcyBvZiBjb250cmlidXRvcnMuCisKKyNpZm5kZWYgU1RPUkFHRV9MRVZFTERCX0RCX0RCX0lN
UExfSF8KKyNkZWZpbmUgU1RPUkFHRV9MRVZFTERCX0RCX0RCX0lNUExfSF8KKworI2luY2x1ZGUg
PGRlcXVlPgorI2luY2x1ZGUgPHNldD4KKyNpbmNsdWRlICJkYi9kYmZvcm1hdC5oIgorI2luY2x1
ZGUgImRiL2xvZ193cml0ZXIuaCIKKyNpbmNsdWRlICJkYi9zbmFwc2hvdC5oIgorI2luY2x1ZGUg
ImxldmVsZGIvZGIuaCIKKyNpbmNsdWRlICJsZXZlbGRiL2Vudi5oIgorI2luY2x1ZGUgInBvcnQv
cG9ydC5oIgorI2luY2x1ZGUgInBvcnQvdGhyZWFkX2Fubm90YXRpb25zLmgiCisKK25hbWVzcGFj
ZSBsZXZlbGRiIHsKKworY2xhc3MgTWVtVGFibGU7CitjbGFzcyBUYWJsZUNhY2hlOworY2xhc3Mg
VmVyc2lvbjsKK2NsYXNzIFZlcnNpb25FZGl0OworY2xhc3MgVmVyc2lvblNldDsKKworY2xhc3Mg
REJJbXBsIDogcHVibGljIERCIHsKKyBwdWJsaWM6CisgIERCSW1wbChjb25zdCBPcHRpb25zJiBv
cHRpb25zLCBjb25zdCBzdGQ6OnN0cmluZyYgZGJuYW1lKTsKKyAgdmlydHVhbCB+REJJbXBsKCk7
CisKKyAgLy8gSW1wbGVtZW50YXRpb25zIG9mIHRoZSBEQiBpbnRlcmZhY2UKKyAgdmlydHVhbCBT
dGF0dXMgUHV0KGNvbnN0IFdyaXRlT3B0aW9ucyYsIGNvbnN0IFNsaWNlJiBrZXksIGNvbnN0IFNs
aWNlJiB2YWx1ZSk7CisgIHZpcnR1YWwgU3RhdHVzIERlbGV0ZShjb25zdCBXcml0ZU9wdGlvbnMm
LCBjb25zdCBTbGljZSYga2V5KTsKKyAgdmlydHVhbCBTdGF0dXMgV3JpdGUoY29uc3QgV3JpdGVP
cHRpb25zJiBvcHRpb25zLCBXcml0ZUJhdGNoKiB1cGRhdGVzKTsKKyAgdmlydHVhbCBTdGF0dXMg
R2V0KGNvbnN0IFJlYWRPcHRpb25zJiBvcHRpb25zLAorICAgICAgICAgICAgICAgICAgICAgY29u
c3QgU2xpY2UmIGtleSwKKyAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiB2YWx1ZSk7
CisgIHZpcnR1YWwgSXRlcmF0b3IqIE5ld0l0ZXJhdG9yKGNvbnN0IFJlYWRPcHRpb25zJik7Cisg
IHZpcnR1YWwgY29uc3QgU25hcHNob3QqIEdldFNuYXBzaG90KCk7CisgIHZpcnR1YWwgdm9pZCBS
ZWxlYXNlU25hcHNob3QoY29uc3QgU25hcHNob3QqIHNuYXBzaG90KTsKKyAgdmlydHVhbCBib29s
IEdldFByb3BlcnR5KGNvbnN0IFNsaWNlJiBwcm9wZXJ0eSwgc3RkOjpzdHJpbmcqIHZhbHVlKTsK
KyAgdmlydHVhbCB2b2lkIEdldEFwcHJveGltYXRlU2l6ZXMoY29uc3QgUmFuZ2UqIHJhbmdlLCBp
bnQgbiwgdWludDY0X3QqIHNpemVzKTsKKyAgdmlydHVhbCB2b2lkIENvbXBhY3RSYW5nZShjb25z
dCBTbGljZSogYmVnaW4sIGNvbnN0IFNsaWNlKiBlbmQpOworCisgIC8vIEV4dHJhIG1ldGhvZHMg
KGZvciB0ZXN0aW5nKSB0aGF0IGFyZSBub3QgaW4gdGhlIHB1YmxpYyBEQiBpbnRlcmZhY2UKKwor
ICAvLyBDb21wYWN0IGFueSBmaWxlcyBpbiB0aGUgbmFtZWQgbGV2ZWwgdGhhdCBvdmVybGFwIFsq
YmVnaW4sKmVuZF0KKyAgdm9pZCBURVNUX0NvbXBhY3RSYW5nZShpbnQgbGV2ZWwsIGNvbnN0IFNs
aWNlKiBiZWdpbiwgY29uc3QgU2xpY2UqIGVuZCk7CisKKyAgLy8gRm9yY2UgY3VycmVudCBtZW10
YWJsZSBjb250ZW50cyB0byBiZSBjb21wYWN0ZWQuCisgIFN0YXR1cyBURVNUX0NvbXBhY3RNZW1U
YWJsZSgpOworCisgIC8vIFJldHVybiBhbiBpbnRlcm5hbCBpdGVyYXRvciBvdmVyIHRoZSBjdXJy
ZW50IHN0YXRlIG9mIHRoZSBkYXRhYmFzZS4KKyAgLy8gVGhlIGtleXMgb2YgdGhpcyBpdGVyYXRv
ciBhcmUgaW50ZXJuYWwga2V5cyAoc2VlIGZvcm1hdC5oKS4KKyAgLy8gVGhlIHJldHVybmVkIGl0
ZXJhdG9yIHNob3VsZCBiZSBkZWxldGVkIHdoZW4gbm8gbG9uZ2VyIG5lZWRlZC4KKyAgSXRlcmF0
b3IqIFRFU1RfTmV3SW50ZXJuYWxJdGVyYXRvcigpOworCisgIC8vIFJldHVybiB0aGUgbWF4aW11
bSBvdmVybGFwcGluZyBkYXRhIChpbiBieXRlcykgYXQgbmV4dCBsZXZlbCBmb3IgYW55CisgIC8v
IGZpbGUgYXQgYSBsZXZlbCA+PSAxLgorICBpbnQ2NF90IFRFU1RfTWF4TmV4dExldmVsT3Zlcmxh
cHBpbmdCeXRlcygpOworCisgcHJpdmF0ZToKKyAgZnJpZW5kIGNsYXNzIERCOworICBzdHJ1Y3Qg
Q29tcGFjdGlvblN0YXRlOworICBzdHJ1Y3QgV3JpdGVyOworCisgIEl0ZXJhdG9yKiBOZXdJbnRl
cm5hbEl0ZXJhdG9yKGNvbnN0IFJlYWRPcHRpb25zJiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgU2VxdWVuY2VOdW1iZXIqIGxhdGVzdF9zbmFwc2hvdCk7CisKKyAgU3RhdHVzIE5l
d0RCKCk7CisKKyAgLy8gUmVjb3ZlciB0aGUgZGVzY3JpcHRvciBmcm9tIHBlcnNpc3RlbnQgc3Rv
cmFnZS4gIE1heSBkbyBhIHNpZ25pZmljYW50CisgIC8vIGFtb3VudCBvZiB3b3JrIHRvIHJlY292
ZXIgcmVjZW50bHkgbG9nZ2VkIHVwZGF0ZXMuICBBbnkgY2hhbmdlcyB0bworICAvLyBiZSBtYWRl
IHRvIHRoZSBkZXNjcmlwdG9yIGFyZSBhZGRlZCB0byAqZWRpdC4KKyAgU3RhdHVzIFJlY292ZXIo
VmVyc2lvbkVkaXQqIGVkaXQpIEVYQ0xVU0lWRV9MT0NLU19SRVFVSVJFRChtdXRleF8pOworCisg
IHZvaWQgTWF5YmVJZ25vcmVFcnJvcihTdGF0dXMqIHMpIGNvbnN0OworCisgIC8vIERlbGV0ZSBh
bnkgdW5uZWVkZWQgZmlsZXMgYW5kIHN0YWxlIGluLW1lbW9yeSBlbnRyaWVzLgorICB2b2lkIERl
bGV0ZU9ic29sZXRlRmlsZXMoKTsKKworICAvLyBDb21wYWN0IHRoZSBpbi1tZW1vcnkgd3JpdGUg
YnVmZmVyIHRvIGRpc2suICBTd2l0Y2hlcyB0byBhIG5ldworICAvLyBsb2ctZmlsZS9tZW10YWJs
ZSBhbmQgd3JpdGVzIGEgbmV3IGRlc2NyaXB0b3IgaWZmIHN1Y2Nlc3NmdWwuCisgIFN0YXR1cyBD
b21wYWN0TWVtVGFibGUoKQorICAgICAgRVhDTFVTSVZFX0xPQ0tTX1JFUVVJUkVEKG11dGV4Xyk7
CisKKyAgU3RhdHVzIFJlY292ZXJMb2dGaWxlKHVpbnQ2NF90IGxvZ19udW1iZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICBWZXJzaW9uRWRpdCogZWRpdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFNlcXVlbmNlTnVtYmVyKiBtYXhfc2VxdWVuY2UpCisgICAgICBFWENMVVNJVkVfTE9DS1Nf
UkVRVUlSRUQobXV0ZXhfKTsKKworICBTdGF0dXMgV3JpdGVMZXZlbDBUYWJsZShNZW1UYWJsZSog
bWVtLCBWZXJzaW9uRWRpdCogZWRpdCwgVmVyc2lvbiogYmFzZSkKKyAgICAgIEVYQ0xVU0lWRV9M
T0NLU19SRVFVSVJFRChtdXRleF8pOworCisgIFN0YXR1cyBNYWtlUm9vbUZvcldyaXRlKGJvb2wg
Zm9yY2UgLyogY29tcGFjdCBldmVuIGlmIHRoZXJlIGlzIHJvb20/ICovKQorICAgICAgRVhDTFVT
SVZFX0xPQ0tTX1JFUVVJUkVEKG11dGV4Xyk7CisgIFdyaXRlQmF0Y2gqIEJ1aWxkQmF0Y2hHcm91
cChXcml0ZXIqKiBsYXN0X3dyaXRlcik7CisKKyAgdm9pZCBNYXliZVNjaGVkdWxlQ29tcGFjdGlv
bigpIEVYQ0xVU0lWRV9MT0NLU19SRVFVSVJFRChtdXRleF8pOworICBzdGF0aWMgdm9pZCBCR1dv
cmsodm9pZCogZGIpOworICB2b2lkIEJhY2tncm91bmRDYWxsKCk7CisgIFN0YXR1cyBCYWNrZ3Jv
dW5kQ29tcGFjdGlvbigpIEVYQ0xVU0lWRV9MT0NLU19SRVFVSVJFRChtdXRleF8pOworICB2b2lk
IENsZWFudXBDb21wYWN0aW9uKENvbXBhY3Rpb25TdGF0ZSogY29tcGFjdCkKKyAgICAgIEVYQ0xV
U0lWRV9MT0NLU19SRVFVSVJFRChtdXRleF8pOworICBTdGF0dXMgRG9Db21wYWN0aW9uV29yayhD
b21wYWN0aW9uU3RhdGUqIGNvbXBhY3QpCisgICAgICBFWENMVVNJVkVfTE9DS1NfUkVRVUlSRUQo
bXV0ZXhfKTsKKworICBTdGF0dXMgT3BlbkNvbXBhY3Rpb25PdXRwdXRGaWxlKENvbXBhY3Rpb25T
dGF0ZSogY29tcGFjdCk7CisgIFN0YXR1cyBGaW5pc2hDb21wYWN0aW9uT3V0cHV0RmlsZShDb21w
YWN0aW9uU3RhdGUqIGNvbXBhY3QsIEl0ZXJhdG9yKiBpbnB1dCk7CisgIFN0YXR1cyBJbnN0YWxs
Q29tcGFjdGlvblJlc3VsdHMoQ29tcGFjdGlvblN0YXRlKiBjb21wYWN0KQorICAgICAgRVhDTFVT
SVZFX0xPQ0tTX1JFUVVJUkVEKG11dGV4Xyk7CisKKyAgLy8gQ29uc3RhbnQgYWZ0ZXIgY29uc3Ry
dWN0aW9uCisgIEVudiogY29uc3QgZW52XzsKKyAgY29uc3QgSW50ZXJuYWxLZXlDb21wYXJhdG9y
IGludGVybmFsX2NvbXBhcmF0b3JfOworICBjb25zdCBJbnRlcm5hbEZpbHRlclBvbGljeSBpbnRl
cm5hbF9maWx0ZXJfcG9saWN5XzsKKyAgY29uc3QgT3B0aW9ucyBvcHRpb25zXzsgIC8vIG9wdGlv
bnNfLmNvbXBhcmF0b3IgPT0gJmludGVybmFsX2NvbXBhcmF0b3JfCisgIGJvb2wgb3duc19pbmZv
X2xvZ187CisgIGJvb2wgb3duc19jYWNoZV87CisgIGNvbnN0IHN0ZDo6c3RyaW5nIGRibmFtZV87
CisKKyAgLy8gdGFibGVfY2FjaGVfIHByb3ZpZGVzIGl0cyBvd24gc3luY2hyb25pemF0aW9uCisg
IFRhYmxlQ2FjaGUqIHRhYmxlX2NhY2hlXzsKKworICAvLyBMb2NrIG92ZXIgdGhlIHBlcnNpc3Rl
bnQgREIgc3RhdGUuICBOb24tTlVMTCBpZmYgc3VjY2Vzc2Z1bGx5IGFjcXVpcmVkLgorICBGaWxl
TG9jayogZGJfbG9ja187CisKKyAgLy8gU3RhdGUgYmVsb3cgaXMgcHJvdGVjdGVkIGJ5IG11dGV4
XworICBwb3J0OjpNdXRleCBtdXRleF87CisgIHBvcnQ6OkF0b21pY1BvaW50ZXIgc2h1dHRpbmdf
ZG93bl87CisgIHBvcnQ6OkNvbmRWYXIgYmdfY3ZfOyAgICAgICAgICAvLyBTaWduYWxsZWQgd2hl
biBiYWNrZ3JvdW5kIHdvcmsgZmluaXNoZXMKKyAgTWVtVGFibGUqIG1lbV87CisgIE1lbVRhYmxl
KiBpbW1fOyAgICAgICAgICAgICAgICAvLyBNZW10YWJsZSBiZWluZyBjb21wYWN0ZWQKKyAgcG9y
dDo6QXRvbWljUG9pbnRlciBoYXNfaW1tXzsgIC8vIFNvIGJnIHRocmVhZCBjYW4gZGV0ZWN0IG5v
bi1OVUxMIGltbV8KKyAgV3JpdGFibGVGaWxlKiBsb2dmaWxlXzsKKyAgdWludDY0X3QgbG9nZmls
ZV9udW1iZXJfOworICBsb2c6OldyaXRlciogbG9nXzsKKworICAvLyBRdWV1ZSBvZiB3cml0ZXJz
LgorICBzdGQ6OmRlcXVlPFdyaXRlcio+IHdyaXRlcnNfOworICBXcml0ZUJhdGNoKiB0bXBfYmF0
Y2hfOworCisgIFNuYXBzaG90TGlzdCBzbmFwc2hvdHNfOworCisgIC8vIFNldCBvZiB0YWJsZSBm
aWxlcyB0byBwcm90ZWN0IGZyb20gZGVsZXRpb24gYmVjYXVzZSB0aGV5IGFyZQorICAvLyBwYXJ0
IG9mIG9uZ29pbmcgY29tcGFjdGlvbnMuCisgIHN0ZDo6c2V0PHVpbnQ2NF90PiBwZW5kaW5nX291
dHB1dHNfOworCisgIC8vIEhhcyBhIGJhY2tncm91bmQgY29tcGFjdGlvbiBiZWVuIHNjaGVkdWxl
ZCBvciBpcyBydW5uaW5nPworICBib29sIGJnX2NvbXBhY3Rpb25fc2NoZWR1bGVkXzsKKworICAv
LyBJbmZvcm1hdGlvbiBmb3IgYSBtYW51YWwgY29tcGFjdGlvbgorICBzdHJ1Y3QgTWFudWFsQ29t
cGFjdGlvbiB7CisgICAgaW50IGxldmVsOworICAgIGJvb2wgZG9uZTsKKyAgICBjb25zdCBJbnRl
cm5hbEtleSogYmVnaW47ICAgLy8gTlVMTCBtZWFucyBiZWdpbm5pbmcgb2Yga2V5IHJhbmdlCisg
ICAgY29uc3QgSW50ZXJuYWxLZXkqIGVuZDsgICAgIC8vIE5VTEwgbWVhbnMgZW5kIG9mIGtleSBy
YW5nZQorICAgIEludGVybmFsS2V5IHRtcF9zdG9yYWdlOyAgICAvLyBVc2VkIHRvIGtlZXAgdHJh
Y2sgb2YgY29tcGFjdGlvbiBwcm9ncmVzcworICB9OworICBNYW51YWxDb21wYWN0aW9uKiBtYW51
YWxfY29tcGFjdGlvbl87CisKKyAgVmVyc2lvblNldCogdmVyc2lvbnNfOworCisgIC8vIEhhdmUg
d2UgZW5jb3VudGVyZWQgYSBiYWNrZ3JvdW5kIGVycm9yIGluIHBhcmFub2lkIG1vZGU/CisgIFN0
YXR1cyBiZ19lcnJvcl87CisKKyAgLy8gUGVyIGxldmVsIGNvbXBhY3Rpb24gc3RhdHMuICBzdGF0
c19bbGV2ZWxdIHN0b3JlcyB0aGUgc3RhdHMgZm9yCisgIC8vIGNvbXBhY3Rpb25zIHRoYXQgcHJv
ZHVjZWQgZGF0YSBmb3IgdGhlIHNwZWNpZmllZCAibGV2ZWwiLgorICBzdHJ1Y3QgQ29tcGFjdGlv
blN0YXRzIHsKKyAgICBpbnQ2NF90IG1pY3JvczsKKyAgICBpbnQ2NF90IGJ5dGVzX3JlYWQ7Cisg
ICAgaW50NjRfdCBieXRlc193cml0dGVuOworCisgICAgQ29tcGFjdGlvblN0YXRzKCkgOiBtaWNy
b3MoMCksIGJ5dGVzX3JlYWQoMCksIGJ5dGVzX3dyaXR0ZW4oMCkgeyB9CisKKyAgICB2b2lkIEFk
ZChjb25zdCBDb21wYWN0aW9uU3RhdHMmIGMpIHsKKyAgICAgIHRoaXMtPm1pY3JvcyArPSBjLm1p
Y3JvczsKKyAgICAgIHRoaXMtPmJ5dGVzX3JlYWQgKz0gYy5ieXRlc19yZWFkOworICAgICAgdGhp
cy0+Ynl0ZXNfd3JpdHRlbiArPSBjLmJ5dGVzX3dyaXR0ZW47CisgICAgfQorICB9OworICBDb21w
YWN0aW9uU3RhdHMgc3RhdHNfW2NvbmZpZzo6a051bUxldmVsc107CisKKyAgLy8gTm8gY29weWlu
ZyBhbGxvd2VkCisgIERCSW1wbChjb25zdCBEQkltcGwmKTsKKyAgdm9pZCBvcGVyYXRvcj0oY29u
c3QgREJJbXBsJik7CisKKyAgY29uc3QgQ29tcGFyYXRvciogdXNlcl9jb21wYXJhdG9yKCkgY29u
c3QgeworICAgIHJldHVybiBpbnRlcm5hbF9jb21wYXJhdG9yXy51c2VyX2NvbXBhcmF0b3IoKTsK
KyAgfQorfTsKKworLy8gU2FuaXRpemUgZGIgb3B0aW9ucy4gIFRoZSBjYWxsZXIgc2hvdWxkIGRl
bGV0ZSByZXN1bHQuaW5mb19sb2cgaWYKKy8vIGl0IGlzIG5vdCBlcXVhbCB0byBzcmMuaW5mb19s
b2cuCitleHRlcm4gT3B0aW9ucyBTYW5pdGl6ZU9wdGlvbnMoY29uc3Qgc3RkOjpzdHJpbmcmIGRi
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludGVybmFsS2V5Q29tcGFy
YXRvciogaWNtcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRlcm5h
bEZpbHRlclBvbGljeSogaXBvbGljeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBPcHRpb25zJiBzcmMpOworCit9ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgorCisjZW5kaWYg
IC8vIFNUT1JBR0VfTEVWRUxEQl9EQl9EQl9JTVBMX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9sZXZlbGRiL2RiL2RiX2l0ZXIuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRi
L2RiL2RiX2l0ZXIuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODdkY2EyZGVkNDY0NTNkZWM1ZTA0Y2VmNjUyZDI1
NDUwODZhZjQ4NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIv
ZGIvZGJfaXRlci5jYwpAQCAtMCwwICsxLDI5OSBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDExIFRo
ZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3Ig
bmFtZXMgb2YgY29udHJpYnV0b3JzLgorCisjaW5jbHVkZSAiZGIvZGJfaXRlci5oIgorCisjaW5j
bHVkZSAiZGIvZmlsZW5hbWUuaCIKKyNpbmNsdWRlICJkYi9kYmZvcm1hdC5oIgorI2luY2x1ZGUg
ImxldmVsZGIvZW52LmgiCisjaW5jbHVkZSAibGV2ZWxkYi9pdGVyYXRvci5oIgorI2luY2x1ZGUg
InBvcnQvcG9ydC5oIgorI2luY2x1ZGUgInV0aWwvbG9nZ2luZy5oIgorI2luY2x1ZGUgInV0aWwv
bXV0ZXhsb2NrLmgiCisKK25hbWVzcGFjZSBsZXZlbGRiIHsKKworI2lmIDAKK3N0YXRpYyB2b2lk
IER1bXBJbnRlcm5hbEl0ZXIoSXRlcmF0b3IqIGl0ZXIpIHsKKyAgZm9yIChpdGVyLT5TZWVrVG9G
aXJzdCgpOyBpdGVyLT5WYWxpZCgpOyBpdGVyLT5OZXh0KCkpIHsKKyAgICBQYXJzZWRJbnRlcm5h
bEtleSBrOworICAgIGlmICghUGFyc2VJbnRlcm5hbEtleShpdGVyLT5rZXkoKSwgJmspKSB7Cisg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvcnJ1cHQgJyVzJ1xuIiwgRXNjYXBlU3RyaW5nKGl0ZXIt
PmtleSgpKS5jX3N0cigpKTsKKyAgICB9IGVsc2UgeworICAgICAgZnByaW50ZihzdGRlcnIsICJA
ICclcydcbiIsIGsuRGVidWdTdHJpbmcoKS5jX3N0cigpKTsKKyAgICB9CisgIH0KK30KKyNlbmRp
ZgorCituYW1lc3BhY2UgeworCisvLyBNZW10YWJsZXMgYW5kIHNzdGFibGVzIHRoYXQgbWFrZSB0
aGUgREIgcmVwcmVzZW50YXRpb24gY29udGFpbgorLy8gKHVzZXJrZXksc2VxLHR5cGUpID0+IHVz
ZXJ2YWx1ZSBlbnRyaWVzLiAgREJJdGVyCisvLyBjb21iaW5lcyBtdWx0aXBsZSBlbnRyaWVzIGZv
ciB0aGUgc2FtZSB1c2Vya2V5IGZvdW5kIGluIHRoZSBEQgorLy8gcmVwcmVzZW50YXRpb24gaW50
byBhIHNpbmdsZSBlbnRyeSB3aGlsZSBhY2NvdW50aW5nIGZvciBzZXF1ZW5jZQorLy8gbnVtYmVy
cywgZGVsZXRpb24gbWFya2Vycywgb3ZlcndyaXRlcywgZXRjLgorY2xhc3MgREJJdGVyOiBwdWJs
aWMgSXRlcmF0b3IgeworIHB1YmxpYzoKKyAgLy8gV2hpY2ggZGlyZWN0aW9uIGlzIHRoZSBpdGVy
YXRvciBjdXJyZW50bHkgbW92aW5nPworICAvLyAoMSkgV2hlbiBtb3ZpbmcgZm9yd2FyZCwgdGhl
IGludGVybmFsIGl0ZXJhdG9yIGlzIHBvc2l0aW9uZWQgYXQKKyAgLy8gICAgIHRoZSBleGFjdCBl
bnRyeSB0aGF0IHlpZWxkcyB0aGlzLT5rZXkoKSwgdGhpcy0+dmFsdWUoKQorICAvLyAoMikgV2hl
biBtb3ZpbmcgYmFja3dhcmRzLCB0aGUgaW50ZXJuYWwgaXRlcmF0b3IgaXMgcG9zaXRpb25lZAor
ICAvLyAgICAganVzdCBiZWZvcmUgYWxsIGVudHJpZXMgd2hvc2UgdXNlciBrZXkgPT0gdGhpcy0+
a2V5KCkuCisgIGVudW0gRGlyZWN0aW9uIHsKKyAgICBrRm9yd2FyZCwKKyAgICBrUmV2ZXJzZQor
ICB9OworCisgIERCSXRlcihjb25zdCBzdGQ6OnN0cmluZyogZGJuYW1lLCBFbnYqIGVudiwKKyAg
ICAgICAgIGNvbnN0IENvbXBhcmF0b3IqIGNtcCwgSXRlcmF0b3IqIGl0ZXIsIFNlcXVlbmNlTnVt
YmVyIHMpCisgICAgICA6IGRibmFtZV8oZGJuYW1lKSwKKyAgICAgICAgZW52XyhlbnYpLAorICAg
ICAgICB1c2VyX2NvbXBhcmF0b3JfKGNtcCksCisgICAgICAgIGl0ZXJfKGl0ZXIpLAorICAgICAg
ICBzZXF1ZW5jZV8ocyksCisgICAgICAgIGRpcmVjdGlvbl8oa0ZvcndhcmQpLAorICAgICAgICB2
YWxpZF8oZmFsc2UpIHsKKyAgfQorICB2aXJ0dWFsIH5EQkl0ZXIoKSB7CisgICAgZGVsZXRlIGl0
ZXJfOworICB9CisgIHZpcnR1YWwgYm9vbCBWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIHZhbGlkXzsg
fQorICB2aXJ0dWFsIFNsaWNlIGtleSgpIGNvbnN0IHsKKyAgICBhc3NlcnQodmFsaWRfKTsKKyAg
ICByZXR1cm4gKGRpcmVjdGlvbl8gPT0ga0ZvcndhcmQpID8gRXh0cmFjdFVzZXJLZXkoaXRlcl8t
PmtleSgpKSA6IHNhdmVkX2tleV87CisgIH0KKyAgdmlydHVhbCBTbGljZSB2YWx1ZSgpIGNvbnN0
IHsKKyAgICBhc3NlcnQodmFsaWRfKTsKKyAgICByZXR1cm4gKGRpcmVjdGlvbl8gPT0ga0Zvcndh
cmQpID8gaXRlcl8tPnZhbHVlKCkgOiBzYXZlZF92YWx1ZV87CisgIH0KKyAgdmlydHVhbCBTdGF0
dXMgc3RhdHVzKCkgY29uc3QgeworICAgIGlmIChzdGF0dXNfLm9rKCkpIHsKKyAgICAgIHJldHVy
biBpdGVyXy0+c3RhdHVzKCk7CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiBzdGF0dXNfOwor
ICAgIH0KKyAgfQorCisgIHZpcnR1YWwgdm9pZCBOZXh0KCk7CisgIHZpcnR1YWwgdm9pZCBQcmV2
KCk7CisgIHZpcnR1YWwgdm9pZCBTZWVrKGNvbnN0IFNsaWNlJiB0YXJnZXQpOworICB2aXJ0dWFs
IHZvaWQgU2Vla1RvRmlyc3QoKTsKKyAgdmlydHVhbCB2b2lkIFNlZWtUb0xhc3QoKTsKKworIHBy
aXZhdGU6CisgIHZvaWQgRmluZE5leHRVc2VyRW50cnkoYm9vbCBza2lwcGluZywgc3RkOjpzdHJp
bmcqIHNraXApOworICB2b2lkIEZpbmRQcmV2VXNlckVudHJ5KCk7CisgIGJvb2wgUGFyc2VLZXko
UGFyc2VkSW50ZXJuYWxLZXkqIGtleSk7CisKKyAgaW5saW5lIHZvaWQgU2F2ZUtleShjb25zdCBT
bGljZSYgaywgc3RkOjpzdHJpbmcqIGRzdCkgeworICAgIGRzdC0+YXNzaWduKGsuZGF0YSgpLCBr
LnNpemUoKSk7CisgIH0KKworICBpbmxpbmUgdm9pZCBDbGVhclNhdmVkVmFsdWUoKSB7CisgICAg
aWYgKHNhdmVkX3ZhbHVlXy5jYXBhY2l0eSgpID4gMTA0ODU3NikgeworICAgICAgc3RkOjpzdHJp
bmcgZW1wdHk7CisgICAgICBzd2FwKGVtcHR5LCBzYXZlZF92YWx1ZV8pOworICAgIH0gZWxzZSB7
CisgICAgICBzYXZlZF92YWx1ZV8uY2xlYXIoKTsKKyAgICB9CisgIH0KKworICBjb25zdCBzdGQ6
OnN0cmluZyogY29uc3QgZGJuYW1lXzsKKyAgRW52KiBjb25zdCBlbnZfOworICBjb25zdCBDb21w
YXJhdG9yKiBjb25zdCB1c2VyX2NvbXBhcmF0b3JfOworICBJdGVyYXRvciogY29uc3QgaXRlcl87
CisgIFNlcXVlbmNlTnVtYmVyIGNvbnN0IHNlcXVlbmNlXzsKKworICBTdGF0dXMgc3RhdHVzXzsK
KyAgc3RkOjpzdHJpbmcgc2F2ZWRfa2V5XzsgICAgIC8vID09IGN1cnJlbnQga2V5IHdoZW4gZGly
ZWN0aW9uXz09a1JldmVyc2UKKyAgc3RkOjpzdHJpbmcgc2F2ZWRfdmFsdWVfOyAgIC8vID09IGN1
cnJlbnQgcmF3IHZhbHVlIHdoZW4gZGlyZWN0aW9uXz09a1JldmVyc2UKKyAgRGlyZWN0aW9uIGRp
cmVjdGlvbl87CisgIGJvb2wgdmFsaWRfOworCisgIC8vIE5vIGNvcHlpbmcgYWxsb3dlZAorICBE
Qkl0ZXIoY29uc3QgREJJdGVyJik7CisgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IERCSXRlciYpOwor
fTsKKworaW5saW5lIGJvb2wgREJJdGVyOjpQYXJzZUtleShQYXJzZWRJbnRlcm5hbEtleSogaWtl
eSkgeworICBpZiAoIVBhcnNlSW50ZXJuYWxLZXkoaXRlcl8tPmtleSgpLCBpa2V5KSkgeworICAg
IHN0YXR1c18gPSBTdGF0dXM6OkNvcnJ1cHRpb24oImNvcnJ1cHRlZCBpbnRlcm5hbCBrZXkgaW4g
REJJdGVyIik7CisgICAgcmV0dXJuIGZhbHNlOworICB9IGVsc2UgeworICAgIHJldHVybiB0cnVl
OworICB9Cit9CisKK3ZvaWQgREJJdGVyOjpOZXh0KCkgeworICBhc3NlcnQodmFsaWRfKTsKKwor
ICBpZiAoZGlyZWN0aW9uXyA9PSBrUmV2ZXJzZSkgeyAgLy8gU3dpdGNoIGRpcmVjdGlvbnM/Cisg
ICAgZGlyZWN0aW9uXyA9IGtGb3J3YXJkOworICAgIC8vIGl0ZXJfIGlzIHBvaW50aW5nIGp1c3Qg
YmVmb3JlIHRoZSBlbnRyaWVzIGZvciB0aGlzLT5rZXkoKSwKKyAgICAvLyBzbyBhZHZhbmNlIGlu
dG8gdGhlIHJhbmdlIG9mIGVudHJpZXMgZm9yIHRoaXMtPmtleSgpIGFuZCB0aGVuCisgICAgLy8g
dXNlIHRoZSBub3JtYWwgc2tpcHBpbmcgY29kZSBiZWxvdy4KKyAgICBpZiAoIWl0ZXJfLT5WYWxp
ZCgpKSB7CisgICAgICBpdGVyXy0+U2Vla1RvRmlyc3QoKTsKKyAgICB9IGVsc2UgeworICAgICAg
aXRlcl8tPk5leHQoKTsKKyAgICB9CisgICAgaWYgKCFpdGVyXy0+VmFsaWQoKSkgeworICAgICAg
dmFsaWRfID0gZmFsc2U7CisgICAgICBzYXZlZF9rZXlfLmNsZWFyKCk7CisgICAgICByZXR1cm47
CisgICAgfQorICB9CisKKyAgLy8gVGVtcG9yYXJpbHkgdXNlIHNhdmVkX2tleV8gYXMgc3RvcmFn
ZSBmb3Iga2V5IHRvIHNraXAuCisgIHN0ZDo6c3RyaW5nKiBza2lwID0gJnNhdmVkX2tleV87Cisg
IFNhdmVLZXkoRXh0cmFjdFVzZXJLZXkoaXRlcl8tPmtleSgpKSwgc2tpcCk7CisgIEZpbmROZXh0
VXNlckVudHJ5KHRydWUsIHNraXApOworfQorCit2b2lkIERCSXRlcjo6RmluZE5leHRVc2VyRW50
cnkoYm9vbCBza2lwcGluZywgc3RkOjpzdHJpbmcqIHNraXApIHsKKyAgLy8gTG9vcCB1bnRpbCB3
ZSBoaXQgYW4gYWNjZXB0YWJsZSBlbnRyeSB0byB5aWVsZAorICBhc3NlcnQoaXRlcl8tPlZhbGlk
KCkpOworICBhc3NlcnQoZGlyZWN0aW9uXyA9PSBrRm9yd2FyZCk7CisgIGRvIHsKKyAgICBQYXJz
ZWRJbnRlcm5hbEtleSBpa2V5OworICAgIGlmIChQYXJzZUtleSgmaWtleSkgJiYgaWtleS5zZXF1
ZW5jZSA8PSBzZXF1ZW5jZV8pIHsKKyAgICAgIHN3aXRjaCAoaWtleS50eXBlKSB7CisgICAgICAg
IGNhc2Uga1R5cGVEZWxldGlvbjoKKyAgICAgICAgICAvLyBBcnJhbmdlIHRvIHNraXAgYWxsIHVw
Y29taW5nIGVudHJpZXMgZm9yIHRoaXMga2V5IHNpbmNlCisgICAgICAgICAgLy8gdGhleSBhcmUg
aGlkZGVuIGJ5IHRoaXMgZGVsZXRpb24uCisgICAgICAgICAgU2F2ZUtleShpa2V5LnVzZXJfa2V5
LCBza2lwKTsKKyAgICAgICAgICBza2lwcGluZyA9IHRydWU7CisgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2Uga1R5cGVWYWx1ZToKKyAgICAgICAgICBpZiAoc2tpcHBpbmcgJiYKKyAgICAg
ICAgICAgICAgdXNlcl9jb21wYXJhdG9yXy0+Q29tcGFyZShpa2V5LnVzZXJfa2V5LCAqc2tpcCkg
PD0gMCkgeworICAgICAgICAgICAgLy8gRW50cnkgaGlkZGVuCisgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIHZhbGlkXyA9IHRydWU7CisgICAgICAgICAgICBzYXZlZF9rZXlfLmNsZWFy
KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOwor
ICAgICAgfQorICAgIH0KKyAgICBpdGVyXy0+TmV4dCgpOworICB9IHdoaWxlIChpdGVyXy0+VmFs
aWQoKSk7CisgIHNhdmVkX2tleV8uY2xlYXIoKTsKKyAgdmFsaWRfID0gZmFsc2U7Cit9CisKK3Zv
aWQgREJJdGVyOjpQcmV2KCkgeworICBhc3NlcnQodmFsaWRfKTsKKworICBpZiAoZGlyZWN0aW9u
XyA9PSBrRm9yd2FyZCkgeyAgLy8gU3dpdGNoIGRpcmVjdGlvbnM/CisgICAgLy8gaXRlcl8gaXMg
cG9pbnRpbmcgYXQgdGhlIGN1cnJlbnQgZW50cnkuICBTY2FuIGJhY2t3YXJkcyB1bnRpbAorICAg
IC8vIHRoZSBrZXkgY2hhbmdlcyBzbyB3ZSBjYW4gdXNlIHRoZSBub3JtYWwgcmV2ZXJzZSBzY2Fu
bmluZyBjb2RlLgorICAgIGFzc2VydChpdGVyXy0+VmFsaWQoKSk7ICAvLyBPdGhlcndpc2UgdmFs
aWRfIHdvdWxkIGhhdmUgYmVlbiBmYWxzZQorICAgIFNhdmVLZXkoRXh0cmFjdFVzZXJLZXkoaXRl
cl8tPmtleSgpKSwgJnNhdmVkX2tleV8pOworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICBpdGVy
Xy0+UHJldigpOworICAgICAgaWYgKCFpdGVyXy0+VmFsaWQoKSkgeworICAgICAgICB2YWxpZF8g
PSBmYWxzZTsKKyAgICAgICAgc2F2ZWRfa2V5Xy5jbGVhcigpOworICAgICAgICBDbGVhclNhdmVk
VmFsdWUoKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgaWYgKHVzZXJfY29tcGFy
YXRvcl8tPkNvbXBhcmUoRXh0cmFjdFVzZXJLZXkoaXRlcl8tPmtleSgpKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVkX2tleV8pIDwgMCkgeworICAgICAgICBicmVh
azsKKyAgICAgIH0KKyAgICB9CisgICAgZGlyZWN0aW9uXyA9IGtSZXZlcnNlOworICB9CisKKyAg
RmluZFByZXZVc2VyRW50cnkoKTsKK30KKwordm9pZCBEQkl0ZXI6OkZpbmRQcmV2VXNlckVudHJ5
KCkgeworICBhc3NlcnQoZGlyZWN0aW9uXyA9PSBrUmV2ZXJzZSk7CisKKyAgVmFsdWVUeXBlIHZh
bHVlX3R5cGUgPSBrVHlwZURlbGV0aW9uOworICBpZiAoaXRlcl8tPlZhbGlkKCkpIHsKKyAgICBk
byB7CisgICAgICBQYXJzZWRJbnRlcm5hbEtleSBpa2V5OworICAgICAgaWYgKFBhcnNlS2V5KCZp
a2V5KSAmJiBpa2V5LnNlcXVlbmNlIDw9IHNlcXVlbmNlXykgeworICAgICAgICBpZiAoKHZhbHVl
X3R5cGUgIT0ga1R5cGVEZWxldGlvbikgJiYKKyAgICAgICAgICAgIHVzZXJfY29tcGFyYXRvcl8t
PkNvbXBhcmUoaWtleS51c2VyX2tleSwgc2F2ZWRfa2V5XykgPCAwKSB7CisgICAgICAgICAgLy8g
V2UgZW5jb3VudGVyZWQgYSBub24tZGVsZXRlZCB2YWx1ZSBpbiBlbnRyaWVzIGZvciBwcmV2aW91
cyBrZXlzLAorICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHZhbHVlX3R5cGUg
PSBpa2V5LnR5cGU7CisgICAgICAgIGlmICh2YWx1ZV90eXBlID09IGtUeXBlRGVsZXRpb24pIHsK
KyAgICAgICAgICBzYXZlZF9rZXlfLmNsZWFyKCk7CisgICAgICAgICAgQ2xlYXJTYXZlZFZhbHVl
KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgU2xpY2UgcmF3X3ZhbHVlID0gaXRlcl8t
PnZhbHVlKCk7CisgICAgICAgICAgaWYgKHNhdmVkX3ZhbHVlXy5jYXBhY2l0eSgpID4gcmF3X3Zh
bHVlLnNpemUoKSArIDEwNDg1NzYpIHsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGVtcHR5Owor
ICAgICAgICAgICAgc3dhcChlbXB0eSwgc2F2ZWRfdmFsdWVfKTsKKyAgICAgICAgICB9CisgICAg
ICAgICAgU2F2ZUtleShFeHRyYWN0VXNlcktleShpdGVyXy0+a2V5KCkpLCAmc2F2ZWRfa2V5Xyk7
CisgICAgICAgICAgc2F2ZWRfdmFsdWVfLmFzc2lnbihyYXdfdmFsdWUuZGF0YSgpLCByYXdfdmFs
dWUuc2l6ZSgpKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgaXRlcl8tPlByZXYoKTsKKyAg
ICB9IHdoaWxlIChpdGVyXy0+VmFsaWQoKSk7CisgIH0KKworICBpZiAodmFsdWVfdHlwZSA9PSBr
VHlwZURlbGV0aW9uKSB7CisgICAgLy8gRW5kCisgICAgdmFsaWRfID0gZmFsc2U7CisgICAgc2F2
ZWRfa2V5Xy5jbGVhcigpOworICAgIENsZWFyU2F2ZWRWYWx1ZSgpOworICAgIGRpcmVjdGlvbl8g
PSBrRm9yd2FyZDsKKyAgfSBlbHNlIHsKKyAgICB2YWxpZF8gPSB0cnVlOworICB9Cit9CisKK3Zv
aWQgREJJdGVyOjpTZWVrKGNvbnN0IFNsaWNlJiB0YXJnZXQpIHsKKyAgZGlyZWN0aW9uXyA9IGtG
b3J3YXJkOworICBDbGVhclNhdmVkVmFsdWUoKTsKKyAgc2F2ZWRfa2V5Xy5jbGVhcigpOworICBB
cHBlbmRJbnRlcm5hbEtleSgKKyAgICAgICZzYXZlZF9rZXlfLCBQYXJzZWRJbnRlcm5hbEtleSh0
YXJnZXQsIHNlcXVlbmNlXywga1ZhbHVlVHlwZUZvclNlZWspKTsKKyAgaXRlcl8tPlNlZWsoc2F2
ZWRfa2V5Xyk7CisgIGlmIChpdGVyXy0+VmFsaWQoKSkgeworICAgIEZpbmROZXh0VXNlckVudHJ5
KGZhbHNlLCAmc2F2ZWRfa2V5XyAvKiB0ZW1wb3Jhcnkgc3RvcmFnZSAqLyk7CisgIH0gZWxzZSB7
CisgICAgdmFsaWRfID0gZmFsc2U7CisgIH0KK30KKwordm9pZCBEQkl0ZXI6OlNlZWtUb0ZpcnN0
KCkgeworICBkaXJlY3Rpb25fID0ga0ZvcndhcmQ7CisgIENsZWFyU2F2ZWRWYWx1ZSgpOworICBp
dGVyXy0+U2Vla1RvRmlyc3QoKTsKKyAgaWYgKGl0ZXJfLT5WYWxpZCgpKSB7CisgICAgRmluZE5l
eHRVc2VyRW50cnkoZmFsc2UsICZzYXZlZF9rZXlfIC8qIHRlbXBvcmFyeSBzdG9yYWdlICovKTsK
KyAgfSBlbHNlIHsKKyAgICB2YWxpZF8gPSBmYWxzZTsKKyAgfQorfQorCit2b2lkIERCSXRlcjo6
U2Vla1RvTGFzdCgpIHsKKyAgZGlyZWN0aW9uXyA9IGtSZXZlcnNlOworICBDbGVhclNhdmVkVmFs
dWUoKTsKKyAgaXRlcl8tPlNlZWtUb0xhc3QoKTsKKyAgRmluZFByZXZVc2VyRW50cnkoKTsKK30K
KworfSAgLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitJdGVyYXRvciogTmV3REJJdGVyYXRvcigK
KyAgICBjb25zdCBzdGQ6OnN0cmluZyogZGJuYW1lLAorICAgIEVudiogZW52LAorICAgIGNvbnN0
IENvbXBhcmF0b3IqIHVzZXJfa2V5X2NvbXBhcmF0b3IsCisgICAgSXRlcmF0b3IqIGludGVybmFs
X2l0ZXIsCisgICAgY29uc3QgU2VxdWVuY2VOdW1iZXImIHNlcXVlbmNlKSB7CisgIHJldHVybiBu
ZXcgREJJdGVyKGRibmFtZSwgZW52LCB1c2VyX2tleV9jb21wYXJhdG9yLCBpbnRlcm5hbF9pdGVy
LCBzZXF1ZW5jZSk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBsZXZlbGRiCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2RiX2l0ZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xldmVsZGIvZGIvZGJfaXRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ5ZTFiMTc0YWI4NzI2ZWVjYTU4MTk3
YmIyYzM2ZjczMDk5ZDEzZTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
ZXZlbGRiL2RiL2RiX2l0ZXIuaApAQCAtMCwwICsxLDI2IEBACisvLyBDb3B5cmlnaHQgKGMpIDIw
MTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxl
IGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCisKKyNpZm5kZWYgU1RPUkFHRV9MRVZFTERCX0RC
X0RCX0lURVJfSF8KKyNkZWZpbmUgU1RPUkFHRV9MRVZFTERCX0RCX0RCX0lURVJfSF8KKworI2lu
Y2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgImxldmVsZGIvZGIuaCIKKyNpbmNsdWRlICJkYi9k
YmZvcm1hdC5oIgorCituYW1lc3BhY2UgbGV2ZWxkYiB7CisKKy8vIFJldHVybiBhIG5ldyBpdGVy
YXRvciB0aGF0IGNvbnZlcnRzIGludGVybmFsIGtleXMgKHlpZWxkZWQgYnkKKy8vICIqaW50ZXJu
YWxfaXRlciIpIHRoYXQgd2VyZSBsaXZlIGF0IHRoZSBzcGVjaWZpZWQgInNlcXVlbmNlIiBudW1i
ZXIKKy8vIGludG8gYXBwcm9wcmlhdGUgdXNlciBrZXlzLgorZXh0ZXJuIEl0ZXJhdG9yKiBOZXdE
Qkl0ZXJhdG9yKAorICAgIGNvbnN0IHN0ZDo6c3RyaW5nKiBkYm5hbWUsCisgICAgRW52KiBlbnYs
CisgICAgY29uc3QgQ29tcGFyYXRvciogdXNlcl9rZXlfY29tcGFyYXRvciwKKyAgICBJdGVyYXRv
ciogaW50ZXJuYWxfaXRlciwKKyAgICBjb25zdCBTZXF1ZW5jZU51bWJlciYgc2VxdWVuY2UpOwor
Cit9ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgorCisjZW5kaWYgIC8vIFNUT1JBR0VfTEVWRUxEQl9E
Ql9EQl9JVEVSX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2Ri
X3Rlc3QuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2RiX3Rlc3QuY2MKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNjg0ZWEzYmRiYzhlY2M4MGQ1MWNmZWNiZmJlOGJlMWQ3ODcxMWU2YQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvZGJfdGVzdC5jYwpAQCAtMCww
ICsxLDIwMjcgQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9y
cy4KKworI2luY2x1ZGUgImxldmVsZGIvZGIuaCIKKyNpbmNsdWRlICJsZXZlbGRiL2ZpbHRlcl9w
b2xpY3kuaCIKKyNpbmNsdWRlICJkYi9kYl9pbXBsLmgiCisjaW5jbHVkZSAiZGIvZmlsZW5hbWUu
aCIKKyNpbmNsdWRlICJkYi92ZXJzaW9uX3NldC5oIgorI2luY2x1ZGUgImRiL3dyaXRlX2JhdGNo
X2ludGVybmFsLmgiCisjaW5jbHVkZSAibGV2ZWxkYi9jYWNoZS5oIgorI2luY2x1ZGUgImxldmVs
ZGIvZW52LmgiCisjaW5jbHVkZSAibGV2ZWxkYi90YWJsZS5oIgorI2luY2x1ZGUgInV0aWwvaGFz
aC5oIgorI2luY2x1ZGUgInV0aWwvbG9nZ2luZy5oIgorI2luY2x1ZGUgInV0aWwvbXV0ZXhsb2Nr
LmgiCisjaW5jbHVkZSAidXRpbC90ZXN0aGFybmVzcy5oIgorI2luY2x1ZGUgInV0aWwvdGVzdHV0
aWwuaCIKKworbmFtZXNwYWNlIGxldmVsZGIgeworCitzdGF0aWMgc3RkOjpzdHJpbmcgUmFuZG9t
U3RyaW5nKFJhbmRvbSogcm5kLCBpbnQgbGVuKSB7CisgIHN0ZDo6c3RyaW5nIHI7CisgIHRlc3Q6
OlJhbmRvbVN0cmluZyhybmQsIGxlbiwgJnIpOworICByZXR1cm4gcjsKK30KKworbmFtZXNwYWNl
IHsKK2NsYXNzIEF0b21pY0NvdW50ZXIgeworIHByaXZhdGU6CisgIHBvcnQ6Ok11dGV4IG11XzsK
KyAgaW50IGNvdW50XzsKKyBwdWJsaWM6CisgIEF0b21pY0NvdW50ZXIoKSA6IGNvdW50XygwKSB7
IH0KKyAgdm9pZCBJbmNyZW1lbnQoKSB7CisgICAgTXV0ZXhMb2NrIGwoJm11Xyk7CisgICAgY291
bnRfKys7CisgIH0KKyAgaW50IFJlYWQoKSB7CisgICAgTXV0ZXhMb2NrIGwoJm11Xyk7CisgICAg
cmV0dXJuIGNvdW50XzsKKyAgfQorICB2b2lkIFJlc2V0KCkgeworICAgIE11dGV4TG9jayBsKCZt
dV8pOworICAgIGNvdW50XyA9IDA7CisgIH0KK307Cit9CisKKy8vIFNwZWNpYWwgRW52IHVzZWQg
dG8gZGVsYXkgYmFja2dyb3VuZCBvcGVyYXRpb25zCitjbGFzcyBTcGVjaWFsRW52IDogcHVibGlj
IEVudldyYXBwZXIgeworIHB1YmxpYzoKKyAgLy8gc3N0YWJsZSBTeW5jKCkgY2FsbHMgYXJlIGJs
b2NrZWQgd2hpbGUgdGhpcyBwb2ludGVyIGlzIG5vbi1OVUxMLgorICBwb3J0OjpBdG9taWNQb2lu
dGVyIGRlbGF5X3NzdGFibGVfc3luY187CisKKyAgLy8gU2ltdWxhdGUgbm8tc3BhY2UgZXJyb3Jz
IHdoaWxlIHRoaXMgcG9pbnRlciBpcyBub24tTlVMTC4KKyAgcG9ydDo6QXRvbWljUG9pbnRlciBu
b19zcGFjZV87CisKKyAgLy8gU2ltdWxhdGUgbm9uLXdyaXRhYmxlIGZpbGUgc3lzdGVtIHdoaWxl
IHRoaXMgcG9pbnRlciBpcyBub24tTlVMTAorICBwb3J0OjpBdG9taWNQb2ludGVyIG5vbl93cml0
YWJsZV87CisKKyAgLy8gRm9yY2Ugc3luYyBvZiBtYW5pZmVzdCBmaWxlcyB0byBmYWlsIHdoaWxl
IHRoaXMgcG9pbnRlciBpcyBub24tTlVMTAorICBwb3J0OjpBdG9taWNQb2ludGVyIG1hbmlmZXN0
X3N5bmNfZXJyb3JfOworCisgIC8vIEZvcmNlIHdyaXRlIHRvIG1hbmlmZXN0IGZpbGVzIHRvIGZh
aWwgd2hpbGUgdGhpcyBwb2ludGVyIGlzIG5vbi1OVUxMCisgIHBvcnQ6OkF0b21pY1BvaW50ZXIg
bWFuaWZlc3Rfd3JpdGVfZXJyb3JfOworCisgIGJvb2wgY291bnRfcmFuZG9tX3JlYWRzXzsKKyAg
QXRvbWljQ291bnRlciByYW5kb21fcmVhZF9jb3VudGVyXzsKKworICBBdG9taWNDb3VudGVyIHNs
ZWVwX2NvdW50ZXJfOworCisgIGV4cGxpY2l0IFNwZWNpYWxFbnYoRW52KiBiYXNlKSA6IEVudldy
YXBwZXIoYmFzZSkgeworICAgIGRlbGF5X3NzdGFibGVfc3luY18uUmVsZWFzZV9TdG9yZShOVUxM
KTsKKyAgICBub19zcGFjZV8uUmVsZWFzZV9TdG9yZShOVUxMKTsKKyAgICBub25fd3JpdGFibGVf
LlJlbGVhc2VfU3RvcmUoTlVMTCk7CisgICAgY291bnRfcmFuZG9tX3JlYWRzXyA9IGZhbHNlOwor
ICAgIG1hbmlmZXN0X3N5bmNfZXJyb3JfLlJlbGVhc2VfU3RvcmUoTlVMTCk7CisgICAgbWFuaWZl
c3Rfd3JpdGVfZXJyb3JfLlJlbGVhc2VfU3RvcmUoTlVMTCk7CisgIH0KKworICBTdGF0dXMgTmV3
V3JpdGFibGVGaWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBmLCBXcml0YWJsZUZpbGUqKiByKSB7Cisg
ICAgY2xhc3MgU1NUYWJsZUZpbGUgOiBwdWJsaWMgV3JpdGFibGVGaWxlIHsKKyAgICAgcHJpdmF0
ZToKKyAgICAgIFNwZWNpYWxFbnYqIGVudl87CisgICAgICBXcml0YWJsZUZpbGUqIGJhc2VfOwor
CisgICAgIHB1YmxpYzoKKyAgICAgIFNTVGFibGVGaWxlKFNwZWNpYWxFbnYqIGVudiwgV3JpdGFi
bGVGaWxlKiBiYXNlKQorICAgICAgICAgIDogZW52XyhlbnYpLAorICAgICAgICAgICAgYmFzZV8o
YmFzZSkgeworICAgICAgfQorICAgICAgflNTVGFibGVGaWxlKCkgeyBkZWxldGUgYmFzZV87IH0K
KyAgICAgIFN0YXR1cyBBcHBlbmQoY29uc3QgU2xpY2UmIGRhdGEpIHsKKyAgICAgICAgaWYgKGVu
dl8tPm5vX3NwYWNlXy5BY3F1aXJlX0xvYWQoKSAhPSBOVUxMKSB7CisgICAgICAgICAgLy8gRHJv
cCB3cml0ZXMgb24gdGhlIGZsb29yCisgICAgICAgICAgcmV0dXJuIFN0YXR1czo6T0soKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICByZXR1cm4gYmFzZV8tPkFwcGVuZChkYXRhKTsKKyAg
ICAgICAgfQorICAgICAgfQorICAgICAgU3RhdHVzIENsb3NlKCkgeyByZXR1cm4gYmFzZV8tPkNs
b3NlKCk7IH0KKyAgICAgIFN0YXR1cyBGbHVzaCgpIHsgcmV0dXJuIGJhc2VfLT5GbHVzaCgpOyB9
CisgICAgICBTdGF0dXMgU3luYygpIHsKKyAgICAgICAgd2hpbGUgKGVudl8tPmRlbGF5X3NzdGFi
bGVfc3luY18uQWNxdWlyZV9Mb2FkKCkgIT0gTlVMTCkgeworICAgICAgICAgIGVudl8tPlNsZWVw
Rm9yTWljcm9zZWNvbmRzKDEwMDAwMCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGJhc2Vf
LT5TeW5jKCk7CisgICAgICB9CisgICAgfTsKKyAgICBjbGFzcyBNYW5pZmVzdEZpbGUgOiBwdWJs
aWMgV3JpdGFibGVGaWxlIHsKKyAgICAgcHJpdmF0ZToKKyAgICAgIFNwZWNpYWxFbnYqIGVudl87
CisgICAgICBXcml0YWJsZUZpbGUqIGJhc2VfOworICAgICBwdWJsaWM6CisgICAgICBNYW5pZmVz
dEZpbGUoU3BlY2lhbEVudiogZW52LCBXcml0YWJsZUZpbGUqIGIpIDogZW52XyhlbnYpLCBiYXNl
XyhiKSB7IH0KKyAgICAgIH5NYW5pZmVzdEZpbGUoKSB7IGRlbGV0ZSBiYXNlXzsgfQorICAgICAg
U3RhdHVzIEFwcGVuZChjb25zdCBTbGljZSYgZGF0YSkgeworICAgICAgICBpZiAoZW52Xy0+bWFu
aWZlc3Rfd3JpdGVfZXJyb3JfLkFjcXVpcmVfTG9hZCgpICE9IE5VTEwpIHsKKyAgICAgICAgICBy
ZXR1cm4gU3RhdHVzOjpJT0Vycm9yKCJzaW11bGF0ZWQgd3JpdGVyIGVycm9yIik7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgcmV0dXJuIGJhc2VfLT5BcHBlbmQoZGF0YSk7CisgICAgICAg
IH0KKyAgICAgIH0KKyAgICAgIFN0YXR1cyBDbG9zZSgpIHsgcmV0dXJuIGJhc2VfLT5DbG9zZSgp
OyB9CisgICAgICBTdGF0dXMgRmx1c2goKSB7IHJldHVybiBiYXNlXy0+Rmx1c2goKTsgfQorICAg
ICAgU3RhdHVzIFN5bmMoKSB7CisgICAgICAgIGlmIChlbnZfLT5tYW5pZmVzdF9zeW5jX2Vycm9y
Xy5BY3F1aXJlX0xvYWQoKSAhPSBOVUxMKSB7CisgICAgICAgICAgcmV0dXJuIFN0YXR1czo6SU9F
cnJvcigic2ltdWxhdGVkIHN5bmMgZXJyb3IiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICByZXR1cm4gYmFzZV8tPlN5bmMoKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH07CisKKyAg
ICBpZiAobm9uX3dyaXRhYmxlXy5BY3F1aXJlX0xvYWQoKSAhPSBOVUxMKSB7CisgICAgICByZXR1
cm4gU3RhdHVzOjpJT0Vycm9yKCJzaW11bGF0ZWQgd3JpdGUgZXJyb3IiKTsKKyAgICB9CisKKyAg
ICBTdGF0dXMgcyA9IHRhcmdldCgpLT5OZXdXcml0YWJsZUZpbGUoZiwgcik7CisgICAgaWYgKHMu
b2soKSkgeworICAgICAgaWYgKHN0cnN0cihmLmNfc3RyKCksICIuc3N0IikgIT0gTlVMTCkgewor
ICAgICAgICAqciA9IG5ldyBTU1RhYmxlRmlsZSh0aGlzLCAqcik7CisgICAgICB9IGVsc2UgaWYg
KHN0cnN0cihmLmNfc3RyKCksICJNQU5JRkVTVCIpICE9IE5VTEwpIHsKKyAgICAgICAgKnIgPSBu
ZXcgTWFuaWZlc3RGaWxlKHRoaXMsICpyKTsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHM7
CisgIH0KKworICBTdGF0dXMgTmV3UmFuZG9tQWNjZXNzRmlsZShjb25zdCBzdGQ6OnN0cmluZyYg
ZiwgUmFuZG9tQWNjZXNzRmlsZSoqIHIpIHsKKyAgICBjbGFzcyBDb3VudGluZ0ZpbGUgOiBwdWJs
aWMgUmFuZG9tQWNjZXNzRmlsZSB7CisgICAgIHByaXZhdGU6CisgICAgICBSYW5kb21BY2Nlc3NG
aWxlKiB0YXJnZXRfOworICAgICAgQXRvbWljQ291bnRlciogY291bnRlcl87CisgICAgIHB1Ymxp
YzoKKyAgICAgIENvdW50aW5nRmlsZShSYW5kb21BY2Nlc3NGaWxlKiB0YXJnZXQsIEF0b21pY0Nv
dW50ZXIqIGNvdW50ZXIpCisgICAgICAgICAgOiB0YXJnZXRfKHRhcmdldCksIGNvdW50ZXJfKGNv
dW50ZXIpIHsKKyAgICAgIH0KKyAgICAgIHZpcnR1YWwgfkNvdW50aW5nRmlsZSgpIHsgZGVsZXRl
IHRhcmdldF87IH0KKyAgICAgIHZpcnR1YWwgU3RhdHVzIFJlYWQodWludDY0X3Qgb2Zmc2V0LCBz
aXplX3QgbiwgU2xpY2UqIHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciog
c2NyYXRjaCkgY29uc3QgeworICAgICAgICBjb3VudGVyXy0+SW5jcmVtZW50KCk7CisgICAgICAg
IHJldHVybiB0YXJnZXRfLT5SZWFkKG9mZnNldCwgbiwgcmVzdWx0LCBzY3JhdGNoKTsKKyAgICAg
IH0KKyAgICB9OworCisgICAgU3RhdHVzIHMgPSB0YXJnZXQoKS0+TmV3UmFuZG9tQWNjZXNzRmls
ZShmLCByKTsKKyAgICBpZiAocy5vaygpICYmIGNvdW50X3JhbmRvbV9yZWFkc18pIHsKKyAgICAg
ICpyID0gbmV3IENvdW50aW5nRmlsZSgqciwgJnJhbmRvbV9yZWFkX2NvdW50ZXJfKTsKKyAgICB9
CisgICAgcmV0dXJuIHM7CisgIH0KKworICB2aXJ0dWFsIHZvaWQgU2xlZXBGb3JNaWNyb3NlY29u
ZHMoaW50IG1pY3JvcykgeworICAgIHNsZWVwX2NvdW50ZXJfLkluY3JlbWVudCgpOworICAgIHRh
cmdldCgpLT5TbGVlcEZvck1pY3Jvc2Vjb25kcyhtaWNyb3MpOworICB9Cit9OworCitjbGFzcyBE
QlRlc3QgeworIHByaXZhdGU6CisgIGNvbnN0IEZpbHRlclBvbGljeSogZmlsdGVyX3BvbGljeV87
CisKKyAgLy8gU2VxdWVuY2Ugb2Ygb3B0aW9uIGNvbmZpZ3VyYXRpb25zIHRvIHRyeQorICBlbnVt
IE9wdGlvbkNvbmZpZyB7CisgICAga0RlZmF1bHQsCisgICAga0ZpbHRlciwKKyAgICBrVW5jb21w
cmVzc2VkLAorICAgIGtFbmQKKyAgfTsKKyAgaW50IG9wdGlvbl9jb25maWdfOworCisgcHVibGlj
OgorICBzdGQ6OnN0cmluZyBkYm5hbWVfOworICBTcGVjaWFsRW52KiBlbnZfOworICBEQiogZGJf
OworCisgIE9wdGlvbnMgbGFzdF9vcHRpb25zXzsKKworICBEQlRlc3QoKSA6IG9wdGlvbl9jb25m
aWdfKGtEZWZhdWx0KSwKKyAgICAgICAgICAgICBlbnZfKG5ldyBTcGVjaWFsRW52KEVudjo6RGVm
YXVsdCgpKSkgeworICAgIGZpbHRlcl9wb2xpY3lfID0gTmV3Qmxvb21GaWx0ZXJQb2xpY3koMTAp
OworICAgIGRibmFtZV8gPSB0ZXN0OjpUbXBEaXIoKSArICIvZGJfdGVzdCI7CisgICAgRGVzdHJv
eURCKGRibmFtZV8sIE9wdGlvbnMoKSk7CisgICAgZGJfID0gTlVMTDsKKyAgICBSZW9wZW4oKTsK
KyAgfQorCisgIH5EQlRlc3QoKSB7CisgICAgZGVsZXRlIGRiXzsKKyAgICBEZXN0cm95REIoZGJu
YW1lXywgT3B0aW9ucygpKTsKKyAgICBkZWxldGUgZW52XzsKKyAgICBkZWxldGUgZmlsdGVyX3Bv
bGljeV87CisgIH0KKworICAvLyBTd2l0Y2ggdG8gYSBmcmVzaCBkYXRhYmFzZSB3aXRoIHRoZSBu
ZXh0IG9wdGlvbiBjb25maWd1cmF0aW9uIHRvCisgIC8vIHRlc3QuICBSZXR1cm4gZmFsc2UgaWYg
dGhlcmUgYXJlIG5vIG1vcmUgY29uZmlndXJhdGlvbnMgdG8gdGVzdC4KKyAgYm9vbCBDaGFuZ2VP
cHRpb25zKCkgeworICAgIG9wdGlvbl9jb25maWdfKys7CisgICAgaWYgKG9wdGlvbl9jb25maWdf
ID49IGtFbmQpIHsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGVsc2UgeworICAgICAgRGVz
dHJveUFuZFJlb3BlbigpOworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICB9CisKKyAgLy8g
UmV0dXJuIHRoZSBjdXJyZW50IG9wdGlvbiBjb25maWd1cmF0aW9uLgorICBPcHRpb25zIEN1cnJl
bnRPcHRpb25zKCkgeworICAgIE9wdGlvbnMgb3B0aW9uczsKKyAgICBzd2l0Y2ggKG9wdGlvbl9j
b25maWdfKSB7CisgICAgICBjYXNlIGtGaWx0ZXI6CisgICAgICAgIG9wdGlvbnMuZmlsdGVyX3Bv
bGljeSA9IGZpbHRlcl9wb2xpY3lfOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Uga1VuY29t
cHJlc3NlZDoKKyAgICAgICAgb3B0aW9ucy5jb21wcmVzc2lvbiA9IGtOb0NvbXByZXNzaW9uOwor
ICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICByZXR1cm4gb3B0aW9uczsKKyAgfQorCisgIERCSW1wbCogZGJmdWxsKCkgeworICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PERCSW1wbCo+KGRiXyk7CisgIH0KKworICB2b2lkIFJlb3BlbihP
cHRpb25zKiBvcHRpb25zID0gTlVMTCkgeworICAgIEFTU0VSVF9PSyhUcnlSZW9wZW4ob3B0aW9u
cykpOworICB9CisKKyAgdm9pZCBDbG9zZSgpIHsKKyAgICBkZWxldGUgZGJfOworICAgIGRiXyA9
IE5VTEw7CisgIH0KKworICB2b2lkIERlc3Ryb3lBbmRSZW9wZW4oT3B0aW9ucyogb3B0aW9ucyA9
IE5VTEwpIHsKKyAgICBkZWxldGUgZGJfOworICAgIGRiXyA9IE5VTEw7CisgICAgRGVzdHJveURC
KGRibmFtZV8sIE9wdGlvbnMoKSk7CisgICAgQVNTRVJUX09LKFRyeVJlb3BlbihvcHRpb25zKSk7
CisgIH0KKworICBTdGF0dXMgVHJ5UmVvcGVuKE9wdGlvbnMqIG9wdGlvbnMpIHsKKyAgICBkZWxl
dGUgZGJfOworICAgIGRiXyA9IE5VTEw7CisgICAgT3B0aW9ucyBvcHRzOworICAgIGlmIChvcHRp
b25zICE9IE5VTEwpIHsKKyAgICAgIG9wdHMgPSAqb3B0aW9uczsKKyAgICB9IGVsc2UgeworICAg
ICAgb3B0cyA9IEN1cnJlbnRPcHRpb25zKCk7CisgICAgICBvcHRzLmNyZWF0ZV9pZl9taXNzaW5n
ID0gdHJ1ZTsKKyAgICB9CisgICAgbGFzdF9vcHRpb25zXyA9IG9wdHM7CisKKyAgICByZXR1cm4g
REI6Ok9wZW4ob3B0cywgZGJuYW1lXywgJmRiXyk7CisgIH0KKworICBTdGF0dXMgUHV0KGNvbnN0
IHN0ZDo6c3RyaW5nJiBrLCBjb25zdCBzdGQ6OnN0cmluZyYgdikgeworICAgIHJldHVybiBkYl8t
PlB1dChXcml0ZU9wdGlvbnMoKSwgaywgdik7CisgIH0KKworICBTdGF0dXMgRGVsZXRlKGNvbnN0
IHN0ZDo6c3RyaW5nJiBrKSB7CisgICAgcmV0dXJuIGRiXy0+RGVsZXRlKFdyaXRlT3B0aW9ucygp
LCBrKTsKKyAgfQorCisgIHN0ZDo6c3RyaW5nIEdldChjb25zdCBzdGQ6OnN0cmluZyYgaywgY29u
c3QgU25hcHNob3QqIHNuYXBzaG90ID0gTlVMTCkgeworICAgIFJlYWRPcHRpb25zIG9wdGlvbnM7
CisgICAgb3B0aW9ucy5zbmFwc2hvdCA9IHNuYXBzaG90OworICAgIHN0ZDo6c3RyaW5nIHJlc3Vs
dDsKKyAgICBTdGF0dXMgcyA9IGRiXy0+R2V0KG9wdGlvbnMsIGssICZyZXN1bHQpOworICAgIGlm
IChzLklzTm90Rm91bmQoKSkgeworICAgICAgcmVzdWx0ID0gIk5PVF9GT1VORCI7CisgICAgfSBl
bHNlIGlmICghcy5vaygpKSB7CisgICAgICByZXN1bHQgPSBzLlRvU3RyaW5nKCk7CisgICAgfQor
ICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworICAvLyBSZXR1cm4gYSBzdHJpbmcgdGhhdCBjb250
YWlucyBhbGwga2V5LHZhbHVlIHBhaXJzIGluIG9yZGVyLAorICAvLyBmb3JtYXR0ZWQgbGlrZSAi
KGsxLT52MSkoazItPnYyKSIuCisgIHN0ZDo6c3RyaW5nIENvbnRlbnRzKCkgeworICAgIHN0ZDo6
dmVjdG9yPHN0ZDo6c3RyaW5nPiBmb3J3YXJkOworICAgIHN0ZDo6c3RyaW5nIHJlc3VsdDsKKyAg
ICBJdGVyYXRvciogaXRlciA9IGRiXy0+TmV3SXRlcmF0b3IoUmVhZE9wdGlvbnMoKSk7CisgICAg
Zm9yIChpdGVyLT5TZWVrVG9GaXJzdCgpOyBpdGVyLT5WYWxpZCgpOyBpdGVyLT5OZXh0KCkpIHsK
KyAgICAgIHN0ZDo6c3RyaW5nIHMgPSBJdGVyU3RhdHVzKGl0ZXIpOworICAgICAgcmVzdWx0LnB1
c2hfYmFjaygnKCcpOworICAgICAgcmVzdWx0LmFwcGVuZChzKTsKKyAgICAgIHJlc3VsdC5wdXNo
X2JhY2soJyknKTsKKyAgICAgIGZvcndhcmQucHVzaF9iYWNrKHMpOworICAgIH0KKworICAgIC8v
IENoZWNrIHJldmVyc2UgaXRlcmF0aW9uIHJlc3VsdHMgYXJlIHRoZSByZXZlcnNlIG9mIGZvcndh
cmQgcmVzdWx0cworICAgIGludCBtYXRjaGVkID0gMDsKKyAgICBmb3IgKGl0ZXItPlNlZWtUb0xh
c3QoKTsgaXRlci0+VmFsaWQoKTsgaXRlci0+UHJldigpKSB7CisgICAgICBBU1NFUlRfTFQobWF0
Y2hlZCwgZm9yd2FyZC5zaXplKCkpOworICAgICAgQVNTRVJUX0VRKEl0ZXJTdGF0dXMoaXRlciks
IGZvcndhcmRbZm9yd2FyZC5zaXplKCkgLSBtYXRjaGVkIC0gMV0pOworICAgICAgbWF0Y2hlZCsr
OworICAgIH0KKyAgICBBU1NFUlRfRVEobWF0Y2hlZCwgZm9yd2FyZC5zaXplKCkpOworCisgICAg
ZGVsZXRlIGl0ZXI7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisgIHN0ZDo6c3RyaW5nIEFs
bEVudHJpZXNGb3IoY29uc3QgU2xpY2UmIHVzZXJfa2V5KSB7CisgICAgSXRlcmF0b3IqIGl0ZXIg
PSBkYmZ1bGwoKS0+VEVTVF9OZXdJbnRlcm5hbEl0ZXJhdG9yKCk7CisgICAgSW50ZXJuYWxLZXkg
dGFyZ2V0KHVzZXJfa2V5LCBrTWF4U2VxdWVuY2VOdW1iZXIsIGtUeXBlVmFsdWUpOworICAgIGl0
ZXItPlNlZWsodGFyZ2V0LkVuY29kZSgpKTsKKyAgICBzdGQ6OnN0cmluZyByZXN1bHQ7CisgICAg
aWYgKCFpdGVyLT5zdGF0dXMoKS5vaygpKSB7CisgICAgICByZXN1bHQgPSBpdGVyLT5zdGF0dXMo
KS5Ub1N0cmluZygpOworICAgIH0gZWxzZSB7CisgICAgICByZXN1bHQgPSAiWyAiOworICAgICAg
Ym9vbCBmaXJzdCA9IHRydWU7CisgICAgICB3aGlsZSAoaXRlci0+VmFsaWQoKSkgeworICAgICAg
ICBQYXJzZWRJbnRlcm5hbEtleSBpa2V5OworICAgICAgICBpZiAoIVBhcnNlSW50ZXJuYWxLZXko
aXRlci0+a2V5KCksICZpa2V5KSkgeworICAgICAgICAgIHJlc3VsdCArPSAiQ09SUlVQVEVEIjsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBpZiAobGFzdF9vcHRpb25zXy5jb21wYXJhdG9y
LT5Db21wYXJlKGlrZXkudXNlcl9rZXksIHVzZXJfa2V5KSAhPSAwKSB7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKCFmaXJzdCkgeworICAgICAgICAgICAg
cmVzdWx0ICs9ICIsICI7CisgICAgICAgICAgfQorICAgICAgICAgIGZpcnN0ID0gZmFsc2U7Cisg
ICAgICAgICAgc3dpdGNoIChpa2V5LnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2Uga1R5cGVWYWx1
ZToKKyAgICAgICAgICAgICAgcmVzdWx0ICs9IGl0ZXItPnZhbHVlKCkuVG9TdHJpbmcoKTsKKyAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGtUeXBlRGVsZXRpb246CisgICAg
ICAgICAgICAgIHJlc3VsdCArPSAiREVMIjsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIGl0ZXItPk5leHQoKTsKKyAgICAgIH0KKyAgICAgIGlm
ICghZmlyc3QpIHsKKyAgICAgICAgcmVzdWx0ICs9ICIgIjsKKyAgICAgIH0KKyAgICAgIHJlc3Vs
dCArPSAiXSI7CisgICAgfQorICAgIGRlbGV0ZSBpdGVyOworICAgIHJldHVybiByZXN1bHQ7Cisg
IH0KKworICBpbnQgTnVtVGFibGVGaWxlc0F0TGV2ZWwoaW50IGxldmVsKSB7CisgICAgc3RkOjpz
dHJpbmcgcHJvcGVydHk7CisgICAgQVNTRVJUX1RSVUUoCisgICAgICAgIGRiXy0+R2V0UHJvcGVy
dHkoImxldmVsZGIubnVtLWZpbGVzLWF0LWxldmVsIiArIE51bWJlclRvU3RyaW5nKGxldmVsKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAmcHJvcGVydHkpKTsKKyAgICByZXR1cm4gYXRvaShw
cm9wZXJ0eS5jX3N0cigpKTsKKyAgfQorCisgIGludCBUb3RhbFRhYmxlRmlsZXMoKSB7CisgICAg
aW50IHJlc3VsdCA9IDA7CisgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGNvbmZpZzo6
a051bUxldmVsczsgbGV2ZWwrKykgeworICAgICAgcmVzdWx0ICs9IE51bVRhYmxlRmlsZXNBdExl
dmVsKGxldmVsKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisgIC8vIFJldHVy
biBzcHJlYWQgb2YgZmlsZXMgcGVyIGxldmVsCisgIHN0ZDo6c3RyaW5nIEZpbGVzUGVyTGV2ZWwo
KSB7CisgICAgc3RkOjpzdHJpbmcgcmVzdWx0OworICAgIGludCBsYXN0X25vbl96ZXJvX29mZnNl
dCA9IDA7CisgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGNvbmZpZzo6a051bUxldmVs
czsgbGV2ZWwrKykgeworICAgICAgaW50IGYgPSBOdW1UYWJsZUZpbGVzQXRMZXZlbChsZXZlbCk7
CisgICAgICBjaGFyIGJ1ZlsxMDBdOworICAgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwg
IiVzJWQiLCAobGV2ZWwgPyAiLCIgOiAiIiksIGYpOworICAgICAgcmVzdWx0ICs9IGJ1ZjsKKyAg
ICAgIGlmIChmID4gMCkgeworICAgICAgICBsYXN0X25vbl96ZXJvX29mZnNldCA9IHJlc3VsdC5z
aXplKCk7CisgICAgICB9CisgICAgfQorICAgIHJlc3VsdC5yZXNpemUobGFzdF9ub25femVyb19v
ZmZzZXQpOworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworICBpbnQgQ291bnRGaWxlcygpIHsK
KyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZmlsZXM7CisgICAgZW52Xy0+R2V0Q2hpbGRy
ZW4oZGJuYW1lXywgJmZpbGVzKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihmaWxlcy5z
aXplKCkpOworICB9CisKKyAgdWludDY0X3QgU2l6ZShjb25zdCBTbGljZSYgc3RhcnQsIGNvbnN0
IFNsaWNlJiBsaW1pdCkgeworICAgIFJhbmdlIHIoc3RhcnQsIGxpbWl0KTsKKyAgICB1aW50NjRf
dCBzaXplOworICAgIGRiXy0+R2V0QXBwcm94aW1hdGVTaXplcygmciwgMSwgJnNpemUpOworICAg
IHJldHVybiBzaXplOworICB9CisKKyAgdm9pZCBDb21wYWN0KGNvbnN0IFNsaWNlJiBzdGFydCwg
Y29uc3QgU2xpY2UmIGxpbWl0KSB7CisgICAgZGJfLT5Db21wYWN0UmFuZ2UoJnN0YXJ0LCAmbGlt
aXQpOworICB9CisKKyAgLy8gRG8gbiBtZW10YWJsZSBjb21wYWN0aW9ucywgZWFjaCBvZiB3aGlj
aCBwcm9kdWNlcyBhbiBzc3RhYmxlCisgIC8vIGNvdmVyaW5nIHRoZSByYW5nZSBbc21hbGwsbGFy
Z2VdLgorICB2b2lkIE1ha2VUYWJsZXMoaW50IG4sIGNvbnN0IHN0ZDo6c3RyaW5nJiBzbWFsbCwg
Y29uc3Qgc3RkOjpzdHJpbmcmIGxhcmdlKSB7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBp
KyspIHsKKyAgICAgIFB1dChzbWFsbCwgImJlZ2luIik7CisgICAgICBQdXQobGFyZ2UsICJlbmQi
KTsKKyAgICAgIGRiZnVsbCgpLT5URVNUX0NvbXBhY3RNZW1UYWJsZSgpOworICAgIH0KKyAgfQor
CisgIC8vIFByZXZlbnQgcHVzaGluZyBvZiBuZXcgc3N0YWJsZXMgaW50byBkZWVwZXIgbGV2ZWxz
IGJ5IGFkZGluZworICAvLyB0YWJsZXMgdGhhdCBjb3ZlciBhIHNwZWNpZmllZCByYW5nZSB0byBh
bGwgbGV2ZWxzLgorICB2b2lkIEZpbGxMZXZlbHMoY29uc3Qgc3RkOjpzdHJpbmcmIHNtYWxsZXN0
LCBjb25zdCBzdGQ6OnN0cmluZyYgbGFyZ2VzdCkgeworICAgIE1ha2VUYWJsZXMoY29uZmlnOjpr
TnVtTGV2ZWxzLCBzbWFsbGVzdCwgbGFyZ2VzdCk7CisgIH0KKworICB2b2lkIER1bXBGaWxlQ291
bnRzKGNvbnN0IGNoYXIqIGxhYmVsKSB7CisgICAgZnByaW50ZihzdGRlcnIsICItLS1cbiVzOlxu
IiwgbGFiZWwpOworICAgIGZwcmludGYoc3RkZXJyLCAibWF4b3ZlcmxhcDogJWxsZFxuIiwKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oCisgICAgICAgICAgICAgICAgZGJmdWxs
KCktPlRFU1RfTWF4TmV4dExldmVsT3ZlcmxhcHBpbmdCeXRlcygpKSk7CisgICAgZm9yIChpbnQg
bGV2ZWwgPSAwOyBsZXZlbCA8IGNvbmZpZzo6a051bUxldmVsczsgbGV2ZWwrKykgeworICAgICAg
aW50IG51bSA9IE51bVRhYmxlRmlsZXNBdExldmVsKGxldmVsKTsKKyAgICAgIGlmIChudW0gPiAw
KSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICBsZXZlbCAlM2QgOiAlZCBmaWxlc1xuIiwg
bGV2ZWwsIG51bSk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgc3RkOjpzdHJpbmcgRHVtcFNT
VGFibGVMaXN0KCkgeworICAgIHN0ZDo6c3RyaW5nIHByb3BlcnR5OworICAgIGRiXy0+R2V0UHJv
cGVydHkoImxldmVsZGIuc3N0YWJsZXMiLCAmcHJvcGVydHkpOworICAgIHJldHVybiBwcm9wZXJ0
eTsKKyAgfQorCisgIHN0ZDo6c3RyaW5nIEl0ZXJTdGF0dXMoSXRlcmF0b3IqIGl0ZXIpIHsKKyAg
ICBzdGQ6OnN0cmluZyByZXN1bHQ7CisgICAgaWYgKGl0ZXItPlZhbGlkKCkpIHsKKyAgICAgIHJl
c3VsdCA9IGl0ZXItPmtleSgpLlRvU3RyaW5nKCkgKyAiLT4iICsgaXRlci0+dmFsdWUoKS5Ub1N0
cmluZygpOworICAgIH0gZWxzZSB7CisgICAgICByZXN1bHQgPSAiKGludmFsaWQpIjsKKyAgICB9
CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorfTsKKworVEVTVChEQlRlc3QsIEVtcHR5KSB7Cisg
IGRvIHsKKyAgICBBU1NFUlRfVFJVRShkYl8gIT0gTlVMTCk7CisgICAgQVNTRVJUX0VRKCJOT1Rf
Rk9VTkQiLCBHZXQoImZvbyIpKTsKKyAgfSB3aGlsZSAoQ2hhbmdlT3B0aW9ucygpKTsKK30KKwor
VEVTVChEQlRlc3QsIFJlYWRXcml0ZSkgeworICBkbyB7CisgICAgQVNTRVJUX09LKFB1dCgiZm9v
IiwgInYxIikpOworICAgIEFTU0VSVF9FUSgidjEiLCBHZXQoImZvbyIpKTsKKyAgICBBU1NFUlRf
T0soUHV0KCJiYXIiLCAidjIiKSk7CisgICAgQVNTRVJUX09LKFB1dCgiZm9vIiwgInYzIikpOwor
ICAgIEFTU0VSVF9FUSgidjMiLCBHZXQoImZvbyIpKTsKKyAgICBBU1NFUlRfRVEoInYyIiwgR2V0
KCJiYXIiKSk7CisgIH0gd2hpbGUgKENoYW5nZU9wdGlvbnMoKSk7Cit9CisKK1RFU1QoREJUZXN0
LCBQdXREZWxldGVHZXQpIHsKKyAgZG8geworICAgIEFTU0VSVF9PSyhkYl8tPlB1dChXcml0ZU9w
dGlvbnMoKSwgImZvbyIsICJ2MSIpKTsKKyAgICBBU1NFUlRfRVEoInYxIiwgR2V0KCJmb28iKSk7
CisgICAgQVNTRVJUX09LKGRiXy0+UHV0KFdyaXRlT3B0aW9ucygpLCAiZm9vIiwgInYyIikpOwor
ICAgIEFTU0VSVF9FUSgidjIiLCBHZXQoImZvbyIpKTsKKyAgICBBU1NFUlRfT0soZGJfLT5EZWxl
dGUoV3JpdGVPcHRpb25zKCksICJmb28iKSk7CisgICAgQVNTRVJUX0VRKCJOT1RfRk9VTkQiLCBH
ZXQoImZvbyIpKTsKKyAgfSB3aGlsZSAoQ2hhbmdlT3B0aW9ucygpKTsKK30KKworVEVTVChEQlRl
c3QsIEdldEZyb21JbW11dGFibGVMYXllcikgeworICBkbyB7CisgICAgT3B0aW9ucyBvcHRpb25z
ID0gQ3VycmVudE9wdGlvbnMoKTsKKyAgICBvcHRpb25zLmVudiA9IGVudl87CisgICAgb3B0aW9u
cy53cml0ZV9idWZmZXJfc2l6ZSA9IDEwMDAwMDsgIC8vIFNtYWxsIHdyaXRlIGJ1ZmZlcgorICAg
IFJlb3Blbigmb3B0aW9ucyk7CisKKyAgICBBU1NFUlRfT0soUHV0KCJmb28iLCAidjEiKSk7Cisg
ICAgQVNTRVJUX0VRKCJ2MSIsIEdldCgiZm9vIikpOworCisgICAgZW52Xy0+ZGVsYXlfc3N0YWJs
ZV9zeW5jXy5SZWxlYXNlX1N0b3JlKGVudl8pOyAgIC8vIEJsb2NrIHN5bmMgY2FsbHMKKyAgICBQ
dXQoImsxIiwgc3RkOjpzdHJpbmcoMTAwMDAwLCAneCcpKTsgICAgICAgICAgICAgLy8gRmlsbCBt
ZW10YWJsZQorICAgIFB1dCgiazIiLCBzdGQ6OnN0cmluZygxMDAwMDAsICd5JykpOyAgICAgICAg
ICAgICAvLyBUcmlnZ2VyIGNvbXBhY3Rpb24KKyAgICBBU1NFUlRfRVEoInYxIiwgR2V0KCJmb28i
KSk7CisgICAgZW52Xy0+ZGVsYXlfc3N0YWJsZV9zeW5jXy5SZWxlYXNlX1N0b3JlKE5VTEwpOyAg
IC8vIFJlbGVhc2Ugc3luYyBjYWxscworICB9IHdoaWxlIChDaGFuZ2VPcHRpb25zKCkpOworfQor
CitURVNUKERCVGVzdCwgR2V0RnJvbVZlcnNpb25zKSB7CisgIGRvIHsKKyAgICBBU1NFUlRfT0so
UHV0KCJmb28iLCAidjEiKSk7CisgICAgZGJmdWxsKCktPlRFU1RfQ29tcGFjdE1lbVRhYmxlKCk7
CisgICAgQVNTRVJUX0VRKCJ2MSIsIEdldCgiZm9vIikpOworICB9IHdoaWxlIChDaGFuZ2VPcHRp
b25zKCkpOworfQorCitURVNUKERCVGVzdCwgR2V0U25hcHNob3QpIHsKKyAgZG8geworICAgIC8v
IFRyeSB3aXRoIGJvdGggYSBzaG9ydCBrZXkgYW5kIGEgbG9uZyBrZXkKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IDI7IGkrKykgeworICAgICAgc3RkOjpzdHJpbmcga2V5ID0gKGkgPT0gMCkgPyBz
dGQ6OnN0cmluZygiZm9vIikgOiBzdGQ6OnN0cmluZygyMDAsICd4Jyk7CisgICAgICBBU1NFUlRf
T0soUHV0KGtleSwgInYxIikpOworICAgICAgY29uc3QgU25hcHNob3QqIHMxID0gZGJfLT5HZXRT
bmFwc2hvdCgpOworICAgICAgQVNTRVJUX09LKFB1dChrZXksICJ2MiIpKTsKKyAgICAgIEFTU0VS
VF9FUSgidjIiLCBHZXQoa2V5KSk7CisgICAgICBBU1NFUlRfRVEoInYxIiwgR2V0KGtleSwgczEp
KTsKKyAgICAgIGRiZnVsbCgpLT5URVNUX0NvbXBhY3RNZW1UYWJsZSgpOworICAgICAgQVNTRVJU
X0VRKCJ2MiIsIEdldChrZXkpKTsKKyAgICAgIEFTU0VSVF9FUSgidjEiLCBHZXQoa2V5LCBzMSkp
OworICAgICAgZGJfLT5SZWxlYXNlU25hcHNob3QoczEpOworICAgIH0KKyAgfSB3aGlsZSAoQ2hh
bmdlT3B0aW9ucygpKTsKK30KKworVEVTVChEQlRlc3QsIEdldExldmVsME9yZGVyaW5nKSB7Cisg
IGRvIHsKKyAgICAvLyBDaGVjayB0aGF0IHdlIHByb2Nlc3MgbGV2ZWwtMCBmaWxlcyBpbiBjb3Jy
ZWN0IG9yZGVyLiAgVGhlIGNvZGUKKyAgICAvLyBiZWxvdyBnZW5lcmF0ZXMgdHdvIGxldmVsLTAg
ZmlsZXMgd2hlcmUgdGhlIGVhcmxpZXIgb25lIGNvbWVzCisgICAgLy8gYmVmb3JlIHRoZSBsYXRl
ciBvbmUgaW4gdGhlIGxldmVsLTAgZmlsZSBsaXN0IHNpbmNlIHRoZSBlYXJsaWVyCisgICAgLy8g
b25lIGhhcyBhIHNtYWxsZXIgInNtYWxsZXN0IiBrZXkuCisgICAgQVNTRVJUX09LKFB1dCgiYmFy
IiwgImIiKSk7CisgICAgQVNTRVJUX09LKFB1dCgiZm9vIiwgInYxIikpOworICAgIGRiZnVsbCgp
LT5URVNUX0NvbXBhY3RNZW1UYWJsZSgpOworICAgIEFTU0VSVF9PSyhQdXQoImZvbyIsICJ2MiIp
KTsKKyAgICBkYmZ1bGwoKS0+VEVTVF9Db21wYWN0TWVtVGFibGUoKTsKKyAgICBBU1NFUlRfRVEo
InYyIiwgR2V0KCJmb28iKSk7CisgIH0gd2hpbGUgKENoYW5nZU9wdGlvbnMoKSk7Cit9CisKK1RF
U1QoREJUZXN0LCBHZXRPcmRlcmVkQnlMZXZlbHMpIHsKKyAgZG8geworICAgIEFTU0VSVF9PSyhQ
dXQoImZvbyIsICJ2MSIpKTsKKyAgICBDb21wYWN0KCJhIiwgInoiKTsKKyAgICBBU1NFUlRfRVEo
InYxIiwgR2V0KCJmb28iKSk7CisgICAgQVNTRVJUX09LKFB1dCgiZm9vIiwgInYyIikpOworICAg
IEFTU0VSVF9FUSgidjIiLCBHZXQoImZvbyIpKTsKKyAgICBkYmZ1bGwoKS0+VEVTVF9Db21wYWN0
TWVtVGFibGUoKTsKKyAgICBBU1NFUlRfRVEoInYyIiwgR2V0KCJmb28iKSk7CisgIH0gd2hpbGUg
KENoYW5nZU9wdGlvbnMoKSk7Cit9CisKK1RFU1QoREJUZXN0LCBHZXRQaWNrc0NvcnJlY3RGaWxl
KSB7CisgIGRvIHsKKyAgICAvLyBBcnJhbmdlIHRvIGhhdmUgbXVsdGlwbGUgZmlsZXMgaW4gYSBu
b24tbGV2ZWwtMCBsZXZlbC4KKyAgICBBU1NFUlRfT0soUHV0KCJhIiwgInZhIikpOworICAgIENv
bXBhY3QoImEiLCAiYiIpOworICAgIEFTU0VSVF9PSyhQdXQoIngiLCAidngiKSk7CisgICAgQ29t
cGFjdCgieCIsICJ5Iik7CisgICAgQVNTRVJUX09LKFB1dCgiZiIsICJ2ZiIpKTsKKyAgICBDb21w
YWN0KCJmIiwgImciKTsKKyAgICBBU1NFUlRfRVEoInZhIiwgR2V0KCJhIikpOworICAgIEFTU0VS
VF9FUSgidmYiLCBHZXQoImYiKSk7CisgICAgQVNTRVJUX0VRKCJ2eCIsIEdldCgieCIpKTsKKyAg
fSB3aGlsZSAoQ2hhbmdlT3B0aW9ucygpKTsKK30KKworVEVTVChEQlRlc3QsIEdldEVuY291bnRl
cnNFbXB0eUxldmVsKSB7CisgIGRvIHsKKyAgICAvLyBBcnJhbmdlIGZvciB0aGUgZm9sbG93aW5n
IHRvIGhhcHBlbjoKKyAgICAvLyAgICogc3N0YWJsZSBBIGluIGxldmVsIDAKKyAgICAvLyAgICog
bm90aGluZyBpbiBsZXZlbCAxCisgICAgLy8gICAqIHNzdGFibGUgQiBpbiBsZXZlbCAyCisgICAg
Ly8gVGhlbiBkbyBlbm91Z2ggR2V0KCkgY2FsbHMgdG8gYXJyYW5nZSBmb3IgYW4gYXV0b21hdGlj
IGNvbXBhY3Rpb24KKyAgICAvLyBvZiBzc3RhYmxlIEEuICBBIGJ1ZyB3b3VsZCBjYXVzZSB0aGUg
Y29tcGFjdGlvbiB0byBiZSBtYXJrZWQgYXMKKyAgICAvLyBvY2N1cmluZyBhdCBsZXZlbCAxIChp
bnN0ZWFkIG9mIHRoZSBjb3JyZWN0IGxldmVsIDApLgorCisgICAgLy8gU3RlcCAxOiBGaXJzdCBw
bGFjZSBzc3RhYmxlcyBpbiBsZXZlbHMgMCBhbmQgMgorICAgIGludCBjb21wYWN0aW9uX2NvdW50
ID0gMDsKKyAgICB3aGlsZSAoTnVtVGFibGVGaWxlc0F0TGV2ZWwoMCkgPT0gMCB8fAorICAgICAg
ICAgICBOdW1UYWJsZUZpbGVzQXRMZXZlbCgyKSA9PSAwKSB7CisgICAgICBBU1NFUlRfTEUoY29t
cGFjdGlvbl9jb3VudCwgMTAwKSA8PCAiY291bGQgbm90IGZpbGwgbGV2ZWxzIDAgYW5kIDIiOwor
ICAgICAgY29tcGFjdGlvbl9jb3VudCsrOworICAgICAgUHV0KCJhIiwgImJlZ2luIik7CisgICAg
ICBQdXQoInoiLCAiZW5kIik7CisgICAgICBkYmZ1bGwoKS0+VEVTVF9Db21wYWN0TWVtVGFibGUo
KTsKKyAgICB9CisKKyAgICAvLyBTdGVwIDI6IGNsZWFyIGxldmVsIDEgaWYgbmVjZXNzYXJ5Lgor
ICAgIGRiZnVsbCgpLT5URVNUX0NvbXBhY3RSYW5nZSgxLCBOVUxMLCBOVUxMKTsKKyAgICBBU1NF
UlRfRVEoTnVtVGFibGVGaWxlc0F0TGV2ZWwoMCksIDEpOworICAgIEFTU0VSVF9FUShOdW1UYWJs
ZUZpbGVzQXRMZXZlbCgxKSwgMCk7CisgICAgQVNTRVJUX0VRKE51bVRhYmxlRmlsZXNBdExldmVs
KDIpLCAxKTsKKworICAgIC8vIFN0ZXAgMzogcmVhZCBhIGJ1bmNoIG9mIHRpbWVzCisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKKyAgICAgIEFTU0VSVF9FUSgiTk9UX0ZPVU5E
IiwgR2V0KCJtaXNzaW5nIikpOworICAgIH0KKworICAgIC8vIFN0ZXAgNDogV2FpdCBmb3IgY29t
cGFjdGlvbiB0byBmaW5pc2gKKyAgICBlbnZfLT5TbGVlcEZvck1pY3Jvc2Vjb25kcygxMDAwMDAw
KTsKKworICAgIEFTU0VSVF9FUShOdW1UYWJsZUZpbGVzQXRMZXZlbCgwKSwgMCk7CisgIH0gd2hp
bGUgKENoYW5nZU9wdGlvbnMoKSk7Cit9CisKK1RFU1QoREJUZXN0LCBJdGVyRW1wdHkpIHsKKyAg
SXRlcmF0b3IqIGl0ZXIgPSBkYl8tPk5ld0l0ZXJhdG9yKFJlYWRPcHRpb25zKCkpOworCisgIGl0
ZXItPlNlZWtUb0ZpcnN0KCk7CisgIEFTU0VSVF9FUShJdGVyU3RhdHVzKGl0ZXIpLCAiKGludmFs
aWQpIik7CisKKyAgaXRlci0+U2Vla1RvTGFzdCgpOworICBBU1NFUlRfRVEoSXRlclN0YXR1cyhp
dGVyKSwgIihpbnZhbGlkKSIpOworCisgIGl0ZXItPlNlZWsoImZvbyIpOworICBBU1NFUlRfRVEo
SXRlclN0YXR1cyhpdGVyKSwgIihpbnZhbGlkKSIpOworCisgIGRlbGV0ZSBpdGVyOworfQorCitU
RVNUKERCVGVzdCwgSXRlclNpbmdsZSkgeworICBBU1NFUlRfT0soUHV0KCJhIiwgInZhIikpOwor
ICBJdGVyYXRvciogaXRlciA9IGRiXy0+TmV3SXRlcmF0b3IoUmVhZE9wdGlvbnMoKSk7CisKKyAg
aXRlci0+U2Vla1RvRmlyc3QoKTsKKyAgQVNTRVJUX0VRKEl0ZXJTdGF0dXMoaXRlciksICJhLT52
YSIpOworICBpdGVyLT5OZXh0KCk7CisgIEFTU0VSVF9FUShJdGVyU3RhdHVzKGl0ZXIpLCAiKGlu
dmFsaWQpIik7CisgIGl0ZXItPlNlZWtUb0ZpcnN0KCk7CisgIEFTU0VSVF9FUShJdGVyU3RhdHVz
KGl0ZXIpLCAiYS0+dmEiKTsKKyAgaXRlci0+UHJldigpOworICBBU1NFUlRfRVEoSXRlclN0YXR1
cyhpdGVyKSwgIihpbnZhbGlkKSIpOworCisgIGl0ZXItPlNlZWtUb0xhc3QoKTsKKyAgQVNTRVJU
X0VRKEl0ZXJTdGF0dXMoaXRlciksICJhLT52YSIpOworICBpdGVyLT5OZXh0KCk7CisgIEFTU0VS
VF9FUShJdGVyU3RhdHVzKGl0ZXIpLCAiKGludmFsaWQpIik7CisgIGl0ZXItPlNlZWtUb0xhc3Qo
KTsKKyAgQVNTRVJUX0VRKEl0ZXJTdGF0dXMoaXRlciksICJhLT52YSIpOworICBpdGVyLT5QcmV2
KCk7CisgIEFTU0VSVF9FUShJdGVyU3RhdHVzKGl0ZXIpLCAiKGludmFsaWQpIik7CisKKyAgaXRl
ci0+U2VlaygiIik7CisgIEFTU0VSVF9FUShJdGVyU3RhdHVzKGl0ZXIpLCAiYS0+dmEiKTsKKyAg
aXRlci0+TmV4dCgpOworICBBU1NFUlRfRVEoSXRlclN0YXR1cyhpdGVyKSwgIihpbnZhbGlkKSIp
OworCisgIGl0ZXItPlNlZWsoImEiKTsKKyAgQVNTRVJUX0VRKEl0ZXJTdGF0dXMoaXRlciksICJh
LT52YSIpOworICBpdGVyLT5OZXh0KCk7CisgIEFTU0VSVF9FUShJdGVyU3RhdHVzKGl0ZXIpLCAi
KGludmFsaWQpIik7CisKKyAgaXRlci0+U2VlaygiYiIpOworICBBU1NFUlRfRVEoSXRlclN0YXR1
cyhpdGVyKSwgIihpbnZhbGlkKSIpOworCisgIGRlbGV0ZSBpdGVyOworfQorCitURVNUKERCVGVz
dCwgSXRlck11bHRpKSB7CisgIEFTU0VSVF9PSyhQdXQoImEiLCAidmEiKSk7CisgIEFTU0VSVF9P
SyhQdXQoImIiLCAidmIiKSk7CisgIEFTU0VSVF9PSyhQdXQoImMiLCAidmMiKSk7CisgIEl0ZXJh
dG9yKiBpdGVyID0gZGJfLT5OZXdJdGVyYXRvcihSZWFkT3B0aW9ucygpKTsKKworICBpdGVyLT5T
ZWVrVG9GaXJzdCgpOworICBBU1NFUlRfRVEoSXRlclN0YXR1cyhpdGVyKSwgImEtPnZhIik7Cisg
IGl0ZXItPk5leHQoKTsKKyAgQVNTRVJUX0VRKEl0ZXJTdGF0dXMoaXRlciksICJiLT52YiIpOwor
ICBpdGVyLT5OZXh0KCk7CisgIEFTU0VSVF9FUShJdGVyU3RhdHVzKGl0ZXIpLCAiYy0+dmMiKTsK
KyAgaXRlci0+TmV4dCgpOworICBBU1NFUlRfRVEoSXRlclN0YXR1cyhpdGVyKSwgIihpbnZhbGlk
KSIpOworICBpdGVyLT5TZWVrVG9GaXJzdCgpOworICBBU1NFUlRfRVEoSXRlclN0YXR1cyhpdGVy
KSwgImEtPnZhIik7CisgIGl0ZXItPlByZXYoKTsKKyAgQVNTRVJUX0VRKEl0ZXJTdGF0dXMoaXRl
ciksICIoaW52YWxpZCkiKTsKKworICBpdGVyLT5TZWVrVG9MYXN0KCk7CisgIEFTU0VSVF9FUShJ
dGVyU3RhdHVzKGl0ZXIpLCAiYy0+dmMiKTsKKyAgaXRlci0+UHJldigpOworICBBU1NFUlRfRVEo
SXRlclN0YXR1cyhpdGVyKSwgImItPnZiIik7CisgIGl0ZXItPlByZXYoKTsKKyAgQVNTRVJUX0VR
KEl0ZXJTdGF0dXMoaXRlciksICJhLT52YSIpOworICBpdGVyLT5QcmV2KCk7CisgIEFTU0VSVF9F
UShJdGVyU3RhdHVzKGl0ZXIpLCAiKGludmFsaWQpIik7CisgIGl0ZXItPlNlZWtUb0xhc3QoKTsK
KyAgQVNTRVJUX0VRKEl0ZXJTdGF0dXMoaXRlciksICJjLT52YyIpOworICBpdGVyLT5OZXh0KCk7
CisgIEFTU0VSVF9FUShJdGVyU3RhdHVzKGl0ZXIpLCAiKGludmFsaWQpIik7CisKKyAgaXRlci0+
U2VlaygiIik7CisgIEFTU0VSVF9FUShJdGVyU3RhdHVzKGl0ZXIpLCAiYS0+dmEiKTsKKyAgaXRl
ci0+U2VlaygiYSIpOworICBBU1NFUlRfRVEoSXRlclN0YXR1cyhpdGVyKSwgImEtPnZhIik7Cisg
IGl0ZXItPlNlZWsoImF4Iik7CisgIEFTU0VSVF9FUShJdGVyU3RhdHVzKGl0ZXIpLCAiYi0+dmIi
KTsKKyAgaXRlci0+U2VlaygiYiIpOworICBBU1NFUlRfRVEoSXRlclN0YXR1cyhpdGVyKSwgImIt
PnZiIik7CisgIGl0ZXItPlNlZWsoInoiKTsKKyAgQVNTRVJUX0VRKEl0ZXJTdGF0dXMoaXRlciks
ICIoaW52YWxpZCkiKTsKKworICAvLyBTd2l0Y2ggZnJvbSByZXZlcnNlIHRvIGZvcndhcmQKKyAg
aXRlci0+U2Vla1RvTGFzdCgpOworICBpdGVyLT5QcmV2KCk7CisgIGl0ZXItPlByZXYoKTsKKyAg
aXRlci0+TmV4dCgpOworICBBU1NFUlRfRVEoSXRlclN0YXR1cyhpdGVyKSwgImItPnZiIik7CisK
KyAgLy8gU3dpdGNoIGZyb20gZm9yd2FyZCB0byByZXZlcnNlCisgIGl0ZXItPlNlZWtUb0ZpcnN0
KCk7CisgIGl0ZXItPk5leHQoKTsKKyAgaXRlci0+TmV4dCgpOworICBpdGVyLT5QcmV2KCk7Cisg
IEFTU0VSVF9FUShJdGVyU3RhdHVzKGl0ZXIpLCAiYi0+dmIiKTsKKworICAvLyBNYWtlIHN1cmUg
aXRlciBzdGF5cyBhdCBzbmFwc2hvdAorICBBU1NFUlRfT0soUHV0KCJhIiwgICJ2YTIiKSk7Cisg
IEFTU0VSVF9PSyhQdXQoImEyIiwgInZhMyIpKTsKKyAgQVNTRVJUX09LKFB1dCgiYiIsICAidmIy
IikpOworICBBU1NFUlRfT0soUHV0KCJjIiwgICJ2YzIiKSk7CisgIEFTU0VSVF9PSyhEZWxldGUo
ImIiKSk7CisgIGl0ZXItPlNlZWtUb0ZpcnN0KCk7CisgIEFTU0VSVF9FUShJdGVyU3RhdHVzKGl0
ZXIpLCAiYS0+dmEiKTsKKyAgaXRlci0+TmV4dCgpOworICBBU1NFUlRfRVEoSXRlclN0YXR1cyhp
dGVyKSwgImItPnZiIik7CisgIGl0ZXItPk5leHQoKTsKKyAgQVNTRVJUX0VRKEl0ZXJTdGF0dXMo
aXRlciksICJjLT52YyIpOworICBpdGVyLT5OZXh0KCk7CisgIEFTU0VSVF9FUShJdGVyU3RhdHVz
KGl0ZXIpLCAiKGludmFsaWQpIik7CisgIGl0ZXItPlNlZWtUb0xhc3QoKTsKKyAgQVNTRVJUX0VR
KEl0ZXJTdGF0dXMoaXRlciksICJjLT52YyIpOworICBpdGVyLT5QcmV2KCk7CisgIEFTU0VSVF9F
UShJdGVyU3RhdHVzKGl0ZXIpLCAiYi0+dmIiKTsKKyAgaXRlci0+UHJldigpOworICBBU1NFUlRf
RVEoSXRlclN0YXR1cyhpdGVyKSwgImEtPnZhIik7CisgIGl0ZXItPlByZXYoKTsKKyAgQVNTRVJU
X0VRKEl0ZXJTdGF0dXMoaXRlciksICIoaW52YWxpZCkiKTsKKworICBkZWxldGUgaXRlcjsKK30K
KworVEVTVChEQlRlc3QsIEl0ZXJTbWFsbEFuZExhcmdlTWl4KSB7CisgIEFTU0VSVF9PSyhQdXQo
ImEiLCAidmEiKSk7CisgIEFTU0VSVF9PSyhQdXQoImIiLCBzdGQ6OnN0cmluZygxMDAwMDAsICdi
JykpKTsKKyAgQVNTRVJUX09LKFB1dCgiYyIsICJ2YyIpKTsKKyAgQVNTRVJUX09LKFB1dCgiZCIs
IHN0ZDo6c3RyaW5nKDEwMDAwMCwgJ2QnKSkpOworICBBU1NFUlRfT0soUHV0KCJlIiwgc3RkOjpz
dHJpbmcoMTAwMDAwLCAnZScpKSk7CisKKyAgSXRlcmF0b3IqIGl0ZXIgPSBkYl8tPk5ld0l0ZXJh
dG9yKFJlYWRPcHRpb25zKCkpOworCisgIGl0ZXItPlNlZWtUb0ZpcnN0KCk7CisgIEFTU0VSVF9F
UShJdGVyU3RhdHVzKGl0ZXIpLCAiYS0+dmEiKTsKKyAgaXRlci0+TmV4dCgpOworICBBU1NFUlRf
RVEoSXRlclN0YXR1cyhpdGVyKSwgImItPiIgKyBzdGQ6OnN0cmluZygxMDAwMDAsICdiJykpOwor
ICBpdGVyLT5OZXh0KCk7CisgIEFTU0VSVF9FUShJdGVyU3RhdHVzKGl0ZXIpLCAiYy0+dmMiKTsK
KyAgaXRlci0+TmV4dCgpOworICBBU1NFUlRfRVEoSXRlclN0YXR1cyhpdGVyKSwgImQtPiIgKyBz
dGQ6OnN0cmluZygxMDAwMDAsICdkJykpOworICBpdGVyLT5OZXh0KCk7CisgIEFTU0VSVF9FUShJ
dGVyU3RhdHVzKGl0ZXIpLCAiZS0+IiArIHN0ZDo6c3RyaW5nKDEwMDAwMCwgJ2UnKSk7CisgIGl0
ZXItPk5leHQoKTsKKyAgQVNTRVJUX0VRKEl0ZXJTdGF0dXMoaXRlciksICIoaW52YWxpZCkiKTsK
KworICBpdGVyLT5TZWVrVG9MYXN0KCk7CisgIEFTU0VSVF9FUShJdGVyU3RhdHVzKGl0ZXIpLCAi
ZS0+IiArIHN0ZDo6c3RyaW5nKDEwMDAwMCwgJ2UnKSk7CisgIGl0ZXItPlByZXYoKTsKKyAgQVNT
RVJUX0VRKEl0ZXJTdGF0dXMoaXRlciksICJkLT4iICsgc3RkOjpzdHJpbmcoMTAwMDAwLCAnZCcp
KTsKKyAgaXRlci0+UHJldigpOworICBBU1NFUlRfRVEoSXRlclN0YXR1cyhpdGVyKSwgImMtPnZj
Iik7CisgIGl0ZXItPlByZXYoKTsKKyAgQVNTRVJUX0VRKEl0ZXJTdGF0dXMoaXRlciksICJiLT4i
ICsgc3RkOjpzdHJpbmcoMTAwMDAwLCAnYicpKTsKKyAgaXRlci0+UHJldigpOworICBBU1NFUlRf
RVEoSXRlclN0YXR1cyhpdGVyKSwgImEtPnZhIik7CisgIGl0ZXItPlByZXYoKTsKKyAgQVNTRVJU
X0VRKEl0ZXJTdGF0dXMoaXRlciksICIoaW52YWxpZCkiKTsKKworICBkZWxldGUgaXRlcjsKK30K
KworVEVTVChEQlRlc3QsIEl0ZXJNdWx0aVdpdGhEZWxldGUpIHsKKyAgZG8geworICAgIEFTU0VS
VF9PSyhQdXQoImEiLCAidmEiKSk7CisgICAgQVNTRVJUX09LKFB1dCgiYiIsICJ2YiIpKTsKKyAg
ICBBU1NFUlRfT0soUHV0KCJjIiwgInZjIikpOworICAgIEFTU0VSVF9PSyhEZWxldGUoImIiKSk7
CisgICAgQVNTRVJUX0VRKCJOT1RfRk9VTkQiLCBHZXQoImIiKSk7CisKKyAgICBJdGVyYXRvciog
aXRlciA9IGRiXy0+TmV3SXRlcmF0b3IoUmVhZE9wdGlvbnMoKSk7CisgICAgaXRlci0+U2Vlaygi
YyIpOworICAgIEFTU0VSVF9FUShJdGVyU3RhdHVzKGl0ZXIpLCAiYy0+dmMiKTsKKyAgICBpdGVy
LT5QcmV2KCk7CisgICAgQVNTRVJUX0VRKEl0ZXJTdGF0dXMoaXRlciksICJhLT52YSIpOworICAg
IGRlbGV0ZSBpdGVyOworICB9IHdoaWxlIChDaGFuZ2VPcHRpb25zKCkpOworfQorCitURVNUKERC
VGVzdCwgUmVjb3ZlcikgeworICBkbyB7CisgICAgQVNTRVJUX09LKFB1dCgiZm9vIiwgInYxIikp
OworICAgIEFTU0VSVF9PSyhQdXQoImJheiIsICJ2NSIpKTsKKworICAgIFJlb3BlbigpOworICAg
IEFTU0VSVF9FUSgidjEiLCBHZXQoImZvbyIpKTsKKworICAgIEFTU0VSVF9FUSgidjEiLCBHZXQo
ImZvbyIpKTsKKyAgICBBU1NFUlRfRVEoInY1IiwgR2V0KCJiYXoiKSk7CisgICAgQVNTRVJUX09L
KFB1dCgiYmFyIiwgInYyIikpOworICAgIEFTU0VSVF9PSyhQdXQoImZvbyIsICJ2MyIpKTsKKwor
ICAgIFJlb3BlbigpOworICAgIEFTU0VSVF9FUSgidjMiLCBHZXQoImZvbyIpKTsKKyAgICBBU1NF
UlRfT0soUHV0KCJmb28iLCAidjQiKSk7CisgICAgQVNTRVJUX0VRKCJ2NCIsIEdldCgiZm9vIikp
OworICAgIEFTU0VSVF9FUSgidjIiLCBHZXQoImJhciIpKTsKKyAgICBBU1NFUlRfRVEoInY1Iiwg
R2V0KCJiYXoiKSk7CisgIH0gd2hpbGUgKENoYW5nZU9wdGlvbnMoKSk7Cit9CisKK1RFU1QoREJU
ZXN0LCBSZWNvdmVyeVdpdGhFbXB0eUxvZykgeworICBkbyB7CisgICAgQVNTRVJUX09LKFB1dCgi
Zm9vIiwgInYxIikpOworICAgIEFTU0VSVF9PSyhQdXQoImZvbyIsICJ2MiIpKTsKKyAgICBSZW9w
ZW4oKTsKKyAgICBSZW9wZW4oKTsKKyAgICBBU1NFUlRfT0soUHV0KCJmb28iLCAidjMiKSk7Cisg
ICAgUmVvcGVuKCk7CisgICAgQVNTRVJUX0VRKCJ2MyIsIEdldCgiZm9vIikpOworICB9IHdoaWxl
IChDaGFuZ2VPcHRpb25zKCkpOworfQorCisvLyBDaGVjayB0aGF0IHdyaXRlcyBkb25lIGR1cmlu
ZyBhIG1lbXRhYmxlIGNvbXBhY3Rpb24gYXJlIHJlY292ZXJlZAorLy8gaWYgdGhlIGRhdGFiYXNl
IGlzIHNodXRkb3duIGR1cmluZyB0aGUgbWVtdGFibGUgY29tcGFjdGlvbi4KK1RFU1QoREJUZXN0
LCBSZWNvdmVyRHVyaW5nTWVtdGFibGVDb21wYWN0aW9uKSB7CisgIGRvIHsKKyAgICBPcHRpb25z
IG9wdGlvbnMgPSBDdXJyZW50T3B0aW9ucygpOworICAgIG9wdGlvbnMuZW52ID0gZW52XzsKKyAg
ICBvcHRpb25zLndyaXRlX2J1ZmZlcl9zaXplID0gMTAwMDAwMDsKKyAgICBSZW9wZW4oJm9wdGlv
bnMpOworCisgICAgLy8gVHJpZ2dlciBhIGxvbmcgbWVtdGFibGUgY29tcGFjdGlvbiBhbmQgcmVv
cGVuIHRoZSBkYXRhYmFzZSBkdXJpbmcgaXQKKyAgICBBU1NFUlRfT0soUHV0KCJmb28iLCAidjEi
KSk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdvZXMgdG8gMXN0IGxvZyBmaWxlCisgICAg
QVNTRVJUX09LKFB1dCgiYmlnMSIsIHN0ZDo6c3RyaW5nKDEwMDAwMDAwLCAneCcpKSk7ICAvLyBG
aWxscyBtZW10YWJsZQorICAgIEFTU0VSVF9PSyhQdXQoImJpZzIiLCBzdGQ6OnN0cmluZygxMDAw
LCAneScpKSk7ICAgICAgLy8gVHJpZ2dlcnMgY29tcGFjdGlvbgorICAgIEFTU0VSVF9PSyhQdXQo
ImJhciIsICJ2MiIpKTsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR29lcyB0byBuZXcgbG9n
IGZpbGUKKworICAgIFJlb3Blbigmb3B0aW9ucyk7CisgICAgQVNTRVJUX0VRKCJ2MSIsIEdldCgi
Zm9vIikpOworICAgIEFTU0VSVF9FUSgidjIiLCBHZXQoImJhciIpKTsKKyAgICBBU1NFUlRfRVEo
c3RkOjpzdHJpbmcoMTAwMDAwMDAsICd4JyksIEdldCgiYmlnMSIpKTsKKyAgICBBU1NFUlRfRVEo
c3RkOjpzdHJpbmcoMTAwMCwgJ3knKSwgR2V0KCJiaWcyIikpOworICB9IHdoaWxlIChDaGFuZ2VP
cHRpb25zKCkpOworfQorCitzdGF0aWMgc3RkOjpzdHJpbmcgS2V5KGludCBpKSB7CisgIGNoYXIg
YnVmWzEwMF07CisgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJrZXklMDZkIiwgaSk7Cisg
IHJldHVybiBzdGQ6OnN0cmluZyhidWYpOworfQorCitURVNUKERCVGVzdCwgTWlub3JDb21wYWN0
aW9uc0hhcHBlbikgeworICBPcHRpb25zIG9wdGlvbnMgPSBDdXJyZW50T3B0aW9ucygpOworICBv
cHRpb25zLndyaXRlX2J1ZmZlcl9zaXplID0gMTAwMDA7CisgIFJlb3Blbigmb3B0aW9ucyk7CisK
KyAgY29uc3QgaW50IE4gPSA1MDA7CisKKyAgaW50IHN0YXJ0aW5nX251bV90YWJsZXMgPSBUb3Rh
bFRhYmxlRmlsZXMoKTsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsKKyAgICBBU1NF
UlRfT0soUHV0KEtleShpKSwgS2V5KGkpICsgc3RkOjpzdHJpbmcoMTAwMCwgJ3YnKSkpOworICB9
CisgIGludCBlbmRpbmdfbnVtX3RhYmxlcyA9IFRvdGFsVGFibGVGaWxlcygpOworICBBU1NFUlRf
R1QoZW5kaW5nX251bV90YWJsZXMsIHN0YXJ0aW5nX251bV90YWJsZXMpOworCisgIGZvciAoaW50
IGkgPSAwOyBpIDwgTjsgaSsrKSB7CisgICAgQVNTRVJUX0VRKEtleShpKSArIHN0ZDo6c3RyaW5n
KDEwMDAsICd2JyksIEdldChLZXkoaSkpKTsKKyAgfQorCisgIFJlb3BlbigpOworCisgIGZvciAo
aW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CisgICAgQVNTRVJUX0VRKEtleShpKSArIHN0ZDo6c3Ry
aW5nKDEwMDAsICd2JyksIEdldChLZXkoaSkpKTsKKyAgfQorfQorCitURVNUKERCVGVzdCwgUmVj
b3ZlcldpdGhMYXJnZUxvZykgeworICB7CisgICAgT3B0aW9ucyBvcHRpb25zID0gQ3VycmVudE9w
dGlvbnMoKTsKKyAgICBSZW9wZW4oJm9wdGlvbnMpOworICAgIEFTU0VSVF9PSyhQdXQoImJpZzEi
LCBzdGQ6OnN0cmluZygyMDAwMDAsICcxJykpKTsKKyAgICBBU1NFUlRfT0soUHV0KCJiaWcyIiwg
c3RkOjpzdHJpbmcoMjAwMDAwLCAnMicpKSk7CisgICAgQVNTRVJUX09LKFB1dCgic21hbGwzIiwg
c3RkOjpzdHJpbmcoMTAsICczJykpKTsKKyAgICBBU1NFUlRfT0soUHV0KCJzbWFsbDQiLCBzdGQ6
OnN0cmluZygxMCwgJzQnKSkpOworICAgIEFTU0VSVF9FUShOdW1UYWJsZUZpbGVzQXRMZXZlbCgw
KSwgMCk7CisgIH0KKworICAvLyBNYWtlIHN1cmUgdGhhdCBpZiB3ZSByZS1vcGVuIHdpdGggYSBz
bWFsbCB3cml0ZSBidWZmZXIgc2l6ZSB0aGF0CisgIC8vIHdlIGZsdXNoIHRhYmxlIGZpbGVzIGlu
IHRoZSBtaWRkbGUgb2YgYSBsYXJnZSBsb2cgZmlsZS4KKyAgT3B0aW9ucyBvcHRpb25zID0gQ3Vy
cmVudE9wdGlvbnMoKTsKKyAgb3B0aW9ucy53cml0ZV9idWZmZXJfc2l6ZSA9IDEwMDAwMDsKKyAg
UmVvcGVuKCZvcHRpb25zKTsKKyAgQVNTRVJUX0VRKE51bVRhYmxlRmlsZXNBdExldmVsKDApLCAz
KTsKKyAgQVNTRVJUX0VRKHN0ZDo6c3RyaW5nKDIwMDAwMCwgJzEnKSwgR2V0KCJiaWcxIikpOwor
ICBBU1NFUlRfRVEoc3RkOjpzdHJpbmcoMjAwMDAwLCAnMicpLCBHZXQoImJpZzIiKSk7CisgIEFT
U0VSVF9FUShzdGQ6OnN0cmluZygxMCwgJzMnKSwgR2V0KCJzbWFsbDMiKSk7CisgIEFTU0VSVF9F
UShzdGQ6OnN0cmluZygxMCwgJzQnKSwgR2V0KCJzbWFsbDQiKSk7CisgIEFTU0VSVF9HVChOdW1U
YWJsZUZpbGVzQXRMZXZlbCgwKSwgMSk7Cit9CisKK1RFU1QoREJUZXN0LCBDb21wYWN0aW9uc0dl
bmVyYXRlTXVsdGlwbGVGaWxlcykgeworICBPcHRpb25zIG9wdGlvbnMgPSBDdXJyZW50T3B0aW9u
cygpOworICBvcHRpb25zLndyaXRlX2J1ZmZlcl9zaXplID0gMTAwMDAwMDAwOyAgICAgICAgLy8g
TGFyZ2Ugd3JpdGUgYnVmZmVyCisgIFJlb3Blbigmb3B0aW9ucyk7CisKKyAgUmFuZG9tIHJuZCgz
MDEpOworCisgIC8vIFdyaXRlIDhNQiAoODAgdmFsdWVzLCBlYWNoIDEwMEspCisgIEFTU0VSVF9F
UShOdW1UYWJsZUZpbGVzQXRMZXZlbCgwKSwgMCk7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5n
PiB2YWx1ZXM7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgODA7IGkrKykgeworICAgIHZhbHVlcy5w
dXNoX2JhY2soUmFuZG9tU3RyaW5nKCZybmQsIDEwMDAwMCkpOworICAgIEFTU0VSVF9PSyhQdXQo
S2V5KGkpLCB2YWx1ZXNbaV0pKTsKKyAgfQorCisgIC8vIFJlb3BlbmluZyBtb3ZlcyB1cGRhdGVz
IHRvIGxldmVsLTAKKyAgUmVvcGVuKCZvcHRpb25zKTsKKyAgZGJmdWxsKCktPlRFU1RfQ29tcGFj
dFJhbmdlKDAsIE5VTEwsIE5VTEwpOworCisgIEFTU0VSVF9FUShOdW1UYWJsZUZpbGVzQXRMZXZl
bCgwKSwgMCk7CisgIEFTU0VSVF9HVChOdW1UYWJsZUZpbGVzQXRMZXZlbCgxKSwgMSk7CisgIGZv
ciAoaW50IGkgPSAwOyBpIDwgODA7IGkrKykgeworICAgIEFTU0VSVF9FUShHZXQoS2V5KGkpKSwg
dmFsdWVzW2ldKTsKKyAgfQorfQorCitURVNUKERCVGVzdCwgUmVwZWF0ZWRXcml0ZXNUb1NhbWVL
ZXkpIHsKKyAgT3B0aW9ucyBvcHRpb25zID0gQ3VycmVudE9wdGlvbnMoKTsKKyAgb3B0aW9ucy5l
bnYgPSBlbnZfOworICBvcHRpb25zLndyaXRlX2J1ZmZlcl9zaXplID0gMTAwMDAwOyAgLy8gU21h
bGwgd3JpdGUgYnVmZmVyCisgIFJlb3Blbigmb3B0aW9ucyk7CisKKyAgLy8gV2UgbXVzdCBoYXZl
IGF0IG1vc3Qgb25lIGZpbGUgcGVyIGxldmVsIGV4Y2VwdCBmb3IgbGV2ZWwtMCwKKyAgLy8gd2hp
Y2ggbWF5IGhhdmUgdXAgdG8ga0wwX1N0b3BXcml0ZXNUcmlnZ2VyIGZpbGVzLgorICBjb25zdCBp
bnQga01heEZpbGVzID0gY29uZmlnOjprTnVtTGV2ZWxzICsgY29uZmlnOjprTDBfU3RvcFdyaXRl
c1RyaWdnZXI7CisKKyAgUmFuZG9tIHJuZCgzMDEpOworICBzdGQ6OnN0cmluZyB2YWx1ZSA9IFJh
bmRvbVN0cmluZygmcm5kLCAyICogb3B0aW9ucy53cml0ZV9idWZmZXJfc2l6ZSk7CisgIGZvciAo
aW50IGkgPSAwOyBpIDwgNSAqIGtNYXhGaWxlczsgaSsrKSB7CisgICAgUHV0KCJrZXkiLCB2YWx1
ZSk7CisgICAgQVNTRVJUX0xFKFRvdGFsVGFibGVGaWxlcygpLCBrTWF4RmlsZXMpOworICAgIGZw
cmludGYoc3RkZXJyLCAiYWZ0ZXIgJWQ6ICVkIGZpbGVzXG4iLCBpbnQoaSsxKSwgVG90YWxUYWJs
ZUZpbGVzKCkpOworICB9Cit9CisKK1RFU1QoREJUZXN0LCBTcGFyc2VNZXJnZSkgeworICBPcHRp
b25zIG9wdGlvbnMgPSBDdXJyZW50T3B0aW9ucygpOworICBvcHRpb25zLmNvbXByZXNzaW9uID0g
a05vQ29tcHJlc3Npb247CisgIFJlb3Blbigmb3B0aW9ucyk7CisKKyAgRmlsbExldmVscygiQSIs
ICJaIik7CisKKyAgLy8gU3VwcG9zZSB0aGVyZSBpczoKKyAgLy8gICAgc21hbGwgYW1vdW50IG9m
IGRhdGEgd2l0aCBwcmVmaXggQQorICAvLyAgICBsYXJnZSBhbW91bnQgb2YgZGF0YSB3aXRoIHBy
ZWZpeCBCCisgIC8vICAgIHNtYWxsIGFtb3VudCBvZiBkYXRhIHdpdGggcHJlZml4IEMKKyAgLy8g
YW5kIHRoYXQgcmVjZW50IHVwZGF0ZXMgaGF2ZSBtYWRlIHNtYWxsIGNoYW5nZXMgdG8gYWxsIHRo
cmVlIHByZWZpeGVzLgorICAvLyBDaGVjayB0aGF0IHdlIGRvIG5vdCBkbyBhIGNvbXBhY3Rpb24g
dGhhdCBtZXJnZXMgYWxsIG9mIEIgaW4gb25lIHNob3QuCisgIGNvbnN0IHN0ZDo6c3RyaW5nIHZh
bHVlKDEwMDAsICd4Jyk7CisgIFB1dCgiQSIsICJ2YSIpOworICAvLyBXcml0ZSBhcHByb3hpbWF0
ZWx5IDEwME1CIG9mICJCIiB2YWx1ZXMKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDAwMDA7IGkr
KykgeworICAgIGNoYXIga2V5WzEwMF07CisgICAgc25wcmludGYoa2V5LCBzaXplb2Yoa2V5KSwg
IkIlMDEwZCIsIGkpOworICAgIFB1dChrZXksIHZhbHVlKTsKKyAgfQorICBQdXQoIkMiLCAidmMi
KTsKKyAgZGJmdWxsKCktPlRFU1RfQ29tcGFjdE1lbVRhYmxlKCk7CisgIGRiZnVsbCgpLT5URVNU
X0NvbXBhY3RSYW5nZSgwLCBOVUxMLCBOVUxMKTsKKworICAvLyBNYWtlIHNwYXJzZSB1cGRhdGUK
KyAgUHV0KCJBIiwgICAgInZhMiIpOworICBQdXQoIkIxMDAiLCAiYnZhbHVlMiIpOworICBQdXQo
IkMiLCAgICAidmMyIik7CisgIGRiZnVsbCgpLT5URVNUX0NvbXBhY3RNZW1UYWJsZSgpOworCisg
IC8vIENvbXBhY3Rpb25zIHNob3VsZCBub3QgY2F1c2UgdXMgdG8gY3JlYXRlIGEgc2l0dWF0aW9u
IHdoZXJlCisgIC8vIGEgZmlsZSBvdmVybGFwcyB0b28gbXVjaCBkYXRhIGF0IHRoZSBuZXh0IGxl
dmVsLgorICBBU1NFUlRfTEUoZGJmdWxsKCktPlRFU1RfTWF4TmV4dExldmVsT3ZlcmxhcHBpbmdC
eXRlcygpLCAyMCoxMDQ4NTc2KTsKKyAgZGJmdWxsKCktPlRFU1RfQ29tcGFjdFJhbmdlKDAsIE5V
TEwsIE5VTEwpOworICBBU1NFUlRfTEUoZGJmdWxsKCktPlRFU1RfTWF4TmV4dExldmVsT3Zlcmxh
cHBpbmdCeXRlcygpLCAyMCoxMDQ4NTc2KTsKKyAgZGJmdWxsKCktPlRFU1RfQ29tcGFjdFJhbmdl
KDEsIE5VTEwsIE5VTEwpOworICBBU1NFUlRfTEUoZGJmdWxsKCktPlRFU1RfTWF4TmV4dExldmVs
T3ZlcmxhcHBpbmdCeXRlcygpLCAyMCoxMDQ4NTc2KTsKK30KKworc3RhdGljIGJvb2wgQmV0d2Vl
bih1aW50NjRfdCB2YWwsIHVpbnQ2NF90IGxvdywgdWludDY0X3QgaGlnaCkgeworICBib29sIHJl
c3VsdCA9ICh2YWwgPj0gbG93KSAmJiAodmFsIDw9IGhpZ2gpOworICBpZiAoIXJlc3VsdCkgewor
ICAgIGZwcmludGYoc3RkZXJyLCAiVmFsdWUgJWxsdSBpcyBub3QgaW4gcmFuZ2UgWyVsbHUsICVs
bHVdXG4iLAorICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykodmFsKSwKKyAgICAgICAg
ICAgICh1bnNpZ25lZCBsb25nIGxvbmcpKGxvdyksCisgICAgICAgICAgICAodW5zaWduZWQgbG9u
ZyBsb25nKShoaWdoKSk7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworVEVTVChEQlRlc3Qs
IEFwcHJveGltYXRlU2l6ZXMpIHsKKyAgZG8geworICAgIE9wdGlvbnMgb3B0aW9ucyA9IEN1cnJl
bnRPcHRpb25zKCk7CisgICAgb3B0aW9ucy53cml0ZV9idWZmZXJfc2l6ZSA9IDEwMDAwMDAwMDsg
ICAgICAgIC8vIExhcmdlIHdyaXRlIGJ1ZmZlcgorICAgIG9wdGlvbnMuY29tcHJlc3Npb24gPSBr
Tm9Db21wcmVzc2lvbjsKKyAgICBEZXN0cm95QW5kUmVvcGVuKCk7CisKKyAgICBBU1NFUlRfVFJV
RShCZXR3ZWVuKFNpemUoIiIsICJ4eXoiKSwgMCwgMCkpOworICAgIFJlb3Blbigmb3B0aW9ucyk7
CisgICAgQVNTRVJUX1RSVUUoQmV0d2VlbihTaXplKCIiLCAieHl6IiksIDAsIDApKTsKKworICAg
IC8vIFdyaXRlIDhNQiAoODAgdmFsdWVzLCBlYWNoIDEwMEspCisgICAgQVNTRVJUX0VRKE51bVRh
YmxlRmlsZXNBdExldmVsKDApLCAwKTsKKyAgICBjb25zdCBpbnQgTiA9IDgwOworICAgIHN0YXRp
YyBjb25zdCBpbnQgUzEgPSAxMDAwMDA7CisgICAgc3RhdGljIGNvbnN0IGludCBTMiA9IDEwNTAw
MDsgIC8vIEFsbG93IHNvbWUgZXhwYW5zaW9uIGZyb20gbWV0YWRhdGEKKyAgICBSYW5kb20gcm5k
KDMwMSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsKKyAgICAgIEFTU0VSVF9P
SyhQdXQoS2V5KGkpLCBSYW5kb21TdHJpbmcoJnJuZCwgUzEpKSk7CisgICAgfQorCisgICAgLy8g
MCBiZWNhdXNlIEdldEFwcHJveGltYXRlU2l6ZXMoKSBkb2VzIG5vdCBhY2NvdW50IGZvciBtZW10
YWJsZSBzcGFjZQorICAgIEFTU0VSVF9UUlVFKEJldHdlZW4oU2l6ZSgiIiwgS2V5KDUwKSksIDAs
IDApKTsKKworICAgIC8vIENoZWNrIHNpemVzIGFjcm9zcyByZWNvdmVyeSBieSByZW9wZW5pbmcg
YSBmZXcgdGltZXMKKyAgICBmb3IgKGludCBydW4gPSAwOyBydW4gPCAzOyBydW4rKykgeworICAg
ICAgUmVvcGVuKCZvcHRpb25zKTsKKworICAgICAgZm9yIChpbnQgY29tcGFjdF9zdGFydCA9IDA7
IGNvbXBhY3Rfc3RhcnQgPCBOOyBjb21wYWN0X3N0YXJ0ICs9IDEwKSB7CisgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgTjsgaSArPSAxMCkgeworICAgICAgICAgIEFTU0VSVF9UUlVFKEJldHdl
ZW4oU2l6ZSgiIiwgS2V5KGkpKSwgUzEqaSwgUzIqaSkpOworICAgICAgICAgIEFTU0VSVF9UUlVF
KEJldHdlZW4oU2l6ZSgiIiwgS2V5KGkpKyIuc3VmZml4IiksIFMxKihpKzEpLCBTMiooaSsxKSkp
OworICAgICAgICAgIEFTU0VSVF9UUlVFKEJldHdlZW4oU2l6ZShLZXkoaSksIEtleShpKzEwKSks
IFMxKjEwLCBTMioxMCkpOworICAgICAgICB9CisgICAgICAgIEFTU0VSVF9UUlVFKEJldHdlZW4o
U2l6ZSgiIiwgS2V5KDUwKSksIFMxKjUwLCBTMio1MCkpOworICAgICAgICBBU1NFUlRfVFJVRShC
ZXR3ZWVuKFNpemUoIiIsIEtleSg1MCkrIi5zdWZmaXgiKSwgUzEqNTAsIFMyKjUwKSk7CisKKyAg
ICAgICAgc3RkOjpzdHJpbmcgY3N0YXJ0X3N0ciA9IEtleShjb21wYWN0X3N0YXJ0KTsKKyAgICAg
ICAgc3RkOjpzdHJpbmcgY2VuZF9zdHIgPSBLZXkoY29tcGFjdF9zdGFydCArIDkpOworICAgICAg
ICBTbGljZSBjc3RhcnQgPSBjc3RhcnRfc3RyOworICAgICAgICBTbGljZSBjZW5kID0gY2VuZF9z
dHI7CisgICAgICAgIGRiZnVsbCgpLT5URVNUX0NvbXBhY3RSYW5nZSgwLCAmY3N0YXJ0LCAmY2Vu
ZCk7CisgICAgICB9CisKKyAgICAgIEFTU0VSVF9FUShOdW1UYWJsZUZpbGVzQXRMZXZlbCgwKSwg
MCk7CisgICAgICBBU1NFUlRfR1QoTnVtVGFibGVGaWxlc0F0TGV2ZWwoMSksIDApOworICAgIH0K
KyAgfSB3aGlsZSAoQ2hhbmdlT3B0aW9ucygpKTsKK30KKworVEVTVChEQlRlc3QsIEFwcHJveGlt
YXRlU2l6ZXNfTWl4T2ZTbWFsbEFuZExhcmdlKSB7CisgIGRvIHsKKyAgICBPcHRpb25zIG9wdGlv
bnMgPSBDdXJyZW50T3B0aW9ucygpOworICAgIG9wdGlvbnMuY29tcHJlc3Npb24gPSBrTm9Db21w
cmVzc2lvbjsKKyAgICBSZW9wZW4oKTsKKworICAgIFJhbmRvbSBybmQoMzAxKTsKKyAgICBzdGQ6
OnN0cmluZyBiaWcxID0gUmFuZG9tU3RyaW5nKCZybmQsIDEwMDAwMCk7CisgICAgQVNTRVJUX09L
KFB1dChLZXkoMCksIFJhbmRvbVN0cmluZygmcm5kLCAxMDAwMCkpKTsKKyAgICBBU1NFUlRfT0so
UHV0KEtleSgxKSwgUmFuZG9tU3RyaW5nKCZybmQsIDEwMDAwKSkpOworICAgIEFTU0VSVF9PSyhQ
dXQoS2V5KDIpLCBiaWcxKSk7CisgICAgQVNTRVJUX09LKFB1dChLZXkoMyksIFJhbmRvbVN0cmlu
Zygmcm5kLCAxMDAwMCkpKTsKKyAgICBBU1NFUlRfT0soUHV0KEtleSg0KSwgYmlnMSkpOworICAg
IEFTU0VSVF9PSyhQdXQoS2V5KDUpLCBSYW5kb21TdHJpbmcoJnJuZCwgMTAwMDApKSk7CisgICAg
QVNTRVJUX09LKFB1dChLZXkoNiksIFJhbmRvbVN0cmluZygmcm5kLCAzMDAwMDApKSk7CisgICAg
QVNTRVJUX09LKFB1dChLZXkoNyksIFJhbmRvbVN0cmluZygmcm5kLCAxMDAwMCkpKTsKKworICAg
IC8vIENoZWNrIHNpemVzIGFjcm9zcyByZWNvdmVyeSBieSByZW9wZW5pbmcgYSBmZXcgdGltZXMK
KyAgICBmb3IgKGludCBydW4gPSAwOyBydW4gPCAzOyBydW4rKykgeworICAgICAgUmVvcGVuKCZv
cHRpb25zKTsKKworICAgICAgQVNTRVJUX1RSVUUoQmV0d2VlbihTaXplKCIiLCBLZXkoMCkpLCAw
LCAwKSk7CisgICAgICBBU1NFUlRfVFJVRShCZXR3ZWVuKFNpemUoIiIsIEtleSgxKSksIDEwMDAw
LCAxMTAwMCkpOworICAgICAgQVNTRVJUX1RSVUUoQmV0d2VlbihTaXplKCIiLCBLZXkoMikpLCAy
MDAwMCwgMjEwMDApKTsKKyAgICAgIEFTU0VSVF9UUlVFKEJldHdlZW4oU2l6ZSgiIiwgS2V5KDMp
KSwgMTIwMDAwLCAxMjEwMDApKTsKKyAgICAgIEFTU0VSVF9UUlVFKEJldHdlZW4oU2l6ZSgiIiwg
S2V5KDQpKSwgMTMwMDAwLCAxMzEwMDApKTsKKyAgICAgIEFTU0VSVF9UUlVFKEJldHdlZW4oU2l6
ZSgiIiwgS2V5KDUpKSwgMjMwMDAwLCAyMzEwMDApKTsKKyAgICAgIEFTU0VSVF9UUlVFKEJldHdl
ZW4oU2l6ZSgiIiwgS2V5KDYpKSwgMjQwMDAwLCAyNDEwMDApKTsKKyAgICAgIEFTU0VSVF9UUlVF
KEJldHdlZW4oU2l6ZSgiIiwgS2V5KDcpKSwgNTQwMDAwLCA1NDEwMDApKTsKKyAgICAgIEFTU0VS
VF9UUlVFKEJldHdlZW4oU2l6ZSgiIiwgS2V5KDgpKSwgNTUwMDAwLCA1NjAwMDApKTsKKworICAg
ICAgQVNTRVJUX1RSVUUoQmV0d2VlbihTaXplKEtleSgzKSwgS2V5KDUpKSwgMTEwMDAwLCAxMTEw
MDApKTsKKworICAgICAgZGJmdWxsKCktPlRFU1RfQ29tcGFjdFJhbmdlKDAsIE5VTEwsIE5VTEwp
OworICAgIH0KKyAgfSB3aGlsZSAoQ2hhbmdlT3B0aW9ucygpKTsKK30KKworVEVTVChEQlRlc3Qs
IEl0ZXJhdG9yUGluc1JlZikgeworICBQdXQoImZvbyIsICJoZWxsbyIpOworCisgIC8vIEdldCBp
dGVyYXRvciB0aGF0IHdpbGwgeWllbGQgdGhlIGN1cnJlbnQgY29udGVudHMgb2YgdGhlIERCLgor
ICBJdGVyYXRvciogaXRlciA9IGRiXy0+TmV3SXRlcmF0b3IoUmVhZE9wdGlvbnMoKSk7CisKKyAg
Ly8gV3JpdGUgdG8gZm9yY2UgY29tcGFjdGlvbnMKKyAgUHV0KCJmb28iLCAibmV3dmFsdWUxIik7
CisgIGZvciAoaW50IGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKyAgICBBU1NFUlRfT0soUHV0KEtl
eShpKSwgS2V5KGkpICsgc3RkOjpzdHJpbmcoMTAwMDAwLCAndicpKSk7IC8vIDEwMEsgdmFsdWVz
CisgIH0KKyAgUHV0KCJmb28iLCAibmV3dmFsdWUyIik7CisKKyAgaXRlci0+U2Vla1RvRmlyc3Qo
KTsKKyAgQVNTRVJUX1RSVUUoaXRlci0+VmFsaWQoKSk7CisgIEFTU0VSVF9FUSgiZm9vIiwgaXRl
ci0+a2V5KCkuVG9TdHJpbmcoKSk7CisgIEFTU0VSVF9FUSgiaGVsbG8iLCBpdGVyLT52YWx1ZSgp
LlRvU3RyaW5nKCkpOworICBpdGVyLT5OZXh0KCk7CisgIEFTU0VSVF9UUlVFKCFpdGVyLT5WYWxp
ZCgpKTsKKyAgZGVsZXRlIGl0ZXI7Cit9CisKK1RFU1QoREJUZXN0LCBTbmFwc2hvdCkgeworICBk
byB7CisgICAgUHV0KCJmb28iLCAidjEiKTsKKyAgICBjb25zdCBTbmFwc2hvdCogczEgPSBkYl8t
PkdldFNuYXBzaG90KCk7CisgICAgUHV0KCJmb28iLCAidjIiKTsKKyAgICBjb25zdCBTbmFwc2hv
dCogczIgPSBkYl8tPkdldFNuYXBzaG90KCk7CisgICAgUHV0KCJmb28iLCAidjMiKTsKKyAgICBj
b25zdCBTbmFwc2hvdCogczMgPSBkYl8tPkdldFNuYXBzaG90KCk7CisKKyAgICBQdXQoImZvbyIs
ICJ2NCIpOworICAgIEFTU0VSVF9FUSgidjEiLCBHZXQoImZvbyIsIHMxKSk7CisgICAgQVNTRVJU
X0VRKCJ2MiIsIEdldCgiZm9vIiwgczIpKTsKKyAgICBBU1NFUlRfRVEoInYzIiwgR2V0KCJmb28i
LCBzMykpOworICAgIEFTU0VSVF9FUSgidjQiLCBHZXQoImZvbyIpKTsKKworICAgIGRiXy0+UmVs
ZWFzZVNuYXBzaG90KHMzKTsKKyAgICBBU1NFUlRfRVEoInYxIiwgR2V0KCJmb28iLCBzMSkpOwor
ICAgIEFTU0VSVF9FUSgidjIiLCBHZXQoImZvbyIsIHMyKSk7CisgICAgQVNTRVJUX0VRKCJ2NCIs
IEdldCgiZm9vIikpOworCisgICAgZGJfLT5SZWxlYXNlU25hcHNob3QoczEpOworICAgIEFTU0VS
VF9FUSgidjIiLCBHZXQoImZvbyIsIHMyKSk7CisgICAgQVNTRVJUX0VRKCJ2NCIsIEdldCgiZm9v
IikpOworCisgICAgZGJfLT5SZWxlYXNlU25hcHNob3QoczIpOworICAgIEFTU0VSVF9FUSgidjQi
LCBHZXQoImZvbyIpKTsKKyAgfSB3aGlsZSAoQ2hhbmdlT3B0aW9ucygpKTsKK30KKworVEVTVChE
QlRlc3QsIEhpZGRlblZhbHVlc0FyZVJlbW92ZWQpIHsKKyAgZG8geworICAgIFJhbmRvbSBybmQo
MzAxKTsKKyAgICBGaWxsTGV2ZWxzKCJhIiwgInoiKTsKKworICAgIHN0ZDo6c3RyaW5nIGJpZyA9
IFJhbmRvbVN0cmluZygmcm5kLCA1MDAwMCk7CisgICAgUHV0KCJmb28iLCBiaWcpOworICAgIFB1
dCgicGFzdGZvbyIsICJ2Iik7CisgICAgY29uc3QgU25hcHNob3QqIHNuYXBzaG90ID0gZGJfLT5H
ZXRTbmFwc2hvdCgpOworICAgIFB1dCgiZm9vIiwgInRpbnkiKTsKKyAgICBQdXQoInBhc3Rmb28y
IiwgInYyIik7ICAgICAgICAvLyBBZHZhbmNlIHNlcXVlbmNlIG51bWJlciBvbmUgbW9yZQorCisg
ICAgQVNTRVJUX09LKGRiZnVsbCgpLT5URVNUX0NvbXBhY3RNZW1UYWJsZSgpKTsKKyAgICBBU1NF
UlRfR1QoTnVtVGFibGVGaWxlc0F0TGV2ZWwoMCksIDApOworCisgICAgQVNTRVJUX0VRKGJpZywg
R2V0KCJmb28iLCBzbmFwc2hvdCkpOworICAgIEFTU0VSVF9UUlVFKEJldHdlZW4oU2l6ZSgiIiwg
InBhc3Rmb28iKSwgNTAwMDAsIDYwMDAwKSk7CisgICAgZGJfLT5SZWxlYXNlU25hcHNob3Qoc25h
cHNob3QpOworICAgIEFTU0VSVF9FUShBbGxFbnRyaWVzRm9yKCJmb28iKSwgIlsgdGlueSwgIiAr
IGJpZyArICIgXSIpOworICAgIFNsaWNlIHgoIngiKTsKKyAgICBkYmZ1bGwoKS0+VEVTVF9Db21w
YWN0UmFuZ2UoMCwgTlVMTCwgJngpOworICAgIEFTU0VSVF9FUShBbGxFbnRyaWVzRm9yKCJmb28i
KSwgIlsgdGlueSBdIik7CisgICAgQVNTRVJUX0VRKE51bVRhYmxlRmlsZXNBdExldmVsKDApLCAw
KTsKKyAgICBBU1NFUlRfR0UoTnVtVGFibGVGaWxlc0F0TGV2ZWwoMSksIDEpOworICAgIGRiZnVs
bCgpLT5URVNUX0NvbXBhY3RSYW5nZSgxLCBOVUxMLCAmeCk7CisgICAgQVNTRVJUX0VRKEFsbEVu
dHJpZXNGb3IoImZvbyIpLCAiWyB0aW55IF0iKTsKKworICAgIEFTU0VSVF9UUlVFKEJldHdlZW4o
U2l6ZSgiIiwgInBhc3Rmb28iKSwgMCwgMTAwMCkpOworICB9IHdoaWxlIChDaGFuZ2VPcHRpb25z
KCkpOworfQorCitURVNUKERCVGVzdCwgRGVsZXRpb25NYXJrZXJzMSkgeworICBQdXQoImZvbyIs
ICJ2MSIpOworICBBU1NFUlRfT0soZGJmdWxsKCktPlRFU1RfQ29tcGFjdE1lbVRhYmxlKCkpOwor
ICBjb25zdCBpbnQgbGFzdCA9IGNvbmZpZzo6a01heE1lbUNvbXBhY3RMZXZlbDsKKyAgQVNTRVJU
X0VRKE51bVRhYmxlRmlsZXNBdExldmVsKGxhc3QpLCAxKTsgICAvLyBmb28gPT4gdjEgaXMgbm93
IGluIGxhc3QgbGV2ZWwKKworICAvLyBQbGFjZSBhIHRhYmxlIGF0IGxldmVsIGxhc3QtMSB0byBw
cmV2ZW50IG1lcmdpbmcgd2l0aCBwcmVjZWRpbmcgbXV0YXRpb24KKyAgUHV0KCJhIiwgImJlZ2lu
Iik7CisgIFB1dCgieiIsICJlbmQiKTsKKyAgZGJmdWxsKCktPlRFU1RfQ29tcGFjdE1lbVRhYmxl
KCk7CisgIEFTU0VSVF9FUShOdW1UYWJsZUZpbGVzQXRMZXZlbChsYXN0KSwgMSk7CisgIEFTU0VS
VF9FUShOdW1UYWJsZUZpbGVzQXRMZXZlbChsYXN0LTEpLCAxKTsKKworICBEZWxldGUoImZvbyIp
OworICBQdXQoImZvbyIsICJ2MiIpOworICBBU1NFUlRfRVEoQWxsRW50cmllc0ZvcigiZm9vIiks
ICJbIHYyLCBERUwsIHYxIF0iKTsKKyAgQVNTRVJUX09LKGRiZnVsbCgpLT5URVNUX0NvbXBhY3RN
ZW1UYWJsZSgpKTsgIC8vIE1vdmVzIHRvIGxldmVsIGxhc3QtMgorICBBU1NFUlRfRVEoQWxsRW50
cmllc0ZvcigiZm9vIiksICJbIHYyLCBERUwsIHYxIF0iKTsKKyAgU2xpY2UgeigieiIpOworICBk
YmZ1bGwoKS0+VEVTVF9Db21wYWN0UmFuZ2UobGFzdC0yLCBOVUxMLCAmeik7CisgIC8vIERFTCBl
bGltaW5hdGVkLCBidXQgdjEgcmVtYWlucyBiZWNhdXNlIHdlIGFyZW4ndCBjb21wYWN0aW5nIHRo
YXQgbGV2ZWwKKyAgLy8gKERFTCBjYW4gYmUgZWxpbWluYXRlZCBiZWNhdXNlIHYyIGhpZGVzIHYx
KS4KKyAgQVNTRVJUX0VRKEFsbEVudHJpZXNGb3IoImZvbyIpLCAiWyB2MiwgdjEgXSIpOworICBk
YmZ1bGwoKS0+VEVTVF9Db21wYWN0UmFuZ2UobGFzdC0xLCBOVUxMLCBOVUxMKTsKKyAgLy8gTWVy
Z2luZyBsYXN0LTEgdy8gbGFzdCwgc28gd2UgYXJlIHRoZSBiYXNlIGxldmVsIGZvciAiZm9vIiwg
c28KKyAgLy8gREVMIGlzIHJlbW92ZWQuICAoYXMgaXMgdjEpLgorICBBU1NFUlRfRVEoQWxsRW50
cmllc0ZvcigiZm9vIiksICJbIHYyIF0iKTsKK30KKworVEVTVChEQlRlc3QsIERlbGV0aW9uTWFy
a2VyczIpIHsKKyAgUHV0KCJmb28iLCAidjEiKTsKKyAgQVNTRVJUX09LKGRiZnVsbCgpLT5URVNU
X0NvbXBhY3RNZW1UYWJsZSgpKTsKKyAgY29uc3QgaW50IGxhc3QgPSBjb25maWc6OmtNYXhNZW1D
b21wYWN0TGV2ZWw7CisgIEFTU0VSVF9FUShOdW1UYWJsZUZpbGVzQXRMZXZlbChsYXN0KSwgMSk7
ICAgLy8gZm9vID0+IHYxIGlzIG5vdyBpbiBsYXN0IGxldmVsCisKKyAgLy8gUGxhY2UgYSB0YWJs
ZSBhdCBsZXZlbCBsYXN0LTEgdG8gcHJldmVudCBtZXJnaW5nIHdpdGggcHJlY2VkaW5nIG11dGF0
aW9uCisgIFB1dCgiYSIsICJiZWdpbiIpOworICBQdXQoInoiLCAiZW5kIik7CisgIGRiZnVsbCgp
LT5URVNUX0NvbXBhY3RNZW1UYWJsZSgpOworICBBU1NFUlRfRVEoTnVtVGFibGVGaWxlc0F0TGV2
ZWwobGFzdCksIDEpOworICBBU1NFUlRfRVEoTnVtVGFibGVGaWxlc0F0TGV2ZWwobGFzdC0xKSwg
MSk7CisKKyAgRGVsZXRlKCJmb28iKTsKKyAgQVNTRVJUX0VRKEFsbEVudHJpZXNGb3IoImZvbyIp
LCAiWyBERUwsIHYxIF0iKTsKKyAgQVNTRVJUX09LKGRiZnVsbCgpLT5URVNUX0NvbXBhY3RNZW1U
YWJsZSgpKTsgIC8vIE1vdmVzIHRvIGxldmVsIGxhc3QtMgorICBBU1NFUlRfRVEoQWxsRW50cmll
c0ZvcigiZm9vIiksICJbIERFTCwgdjEgXSIpOworICBkYmZ1bGwoKS0+VEVTVF9Db21wYWN0UmFu
Z2UobGFzdC0yLCBOVUxMLCBOVUxMKTsKKyAgLy8gREVMIGtlcHQ6ICJsYXN0IiBmaWxlIG92ZXJs
YXBzCisgIEFTU0VSVF9FUShBbGxFbnRyaWVzRm9yKCJmb28iKSwgIlsgREVMLCB2MSBdIik7Cisg
IGRiZnVsbCgpLT5URVNUX0NvbXBhY3RSYW5nZShsYXN0LTEsIE5VTEwsIE5VTEwpOworICAvLyBN
ZXJnaW5nIGxhc3QtMSB3LyBsYXN0LCBzbyB3ZSBhcmUgdGhlIGJhc2UgbGV2ZWwgZm9yICJmb28i
LCBzbworICAvLyBERUwgaXMgcmVtb3ZlZC4gIChhcyBpcyB2MSkuCisgIEFTU0VSVF9FUShBbGxF
bnRyaWVzRm9yKCJmb28iKSwgIlsgXSIpOworfQorCitURVNUKERCVGVzdCwgT3ZlcmxhcEluTGV2
ZWwwKSB7CisgIGRvIHsKKyAgICBBU1NFUlRfRVEoY29uZmlnOjprTWF4TWVtQ29tcGFjdExldmVs
LCAyKSA8PCAiRml4IHRlc3QgdG8gbWF0Y2ggY29uZmlnIjsKKworICAgIC8vIEZpbGwgbGV2ZWxz
IDEgYW5kIDIgdG8gZGlzYWJsZSB0aGUgcHVzaGluZyBvZiBuZXcgbWVtdGFibGVzIHRvIGxldmVs
cyA+IDAuCisgICAgQVNTRVJUX09LKFB1dCgiMTAwIiwgInYxMDAiKSk7CisgICAgQVNTRVJUX09L
KFB1dCgiOTk5IiwgInY5OTkiKSk7CisgICAgZGJmdWxsKCktPlRFU1RfQ29tcGFjdE1lbVRhYmxl
KCk7CisgICAgQVNTRVJUX09LKERlbGV0ZSgiMTAwIikpOworICAgIEFTU0VSVF9PSyhEZWxldGUo
Ijk5OSIpKTsKKyAgICBkYmZ1bGwoKS0+VEVTVF9Db21wYWN0TWVtVGFibGUoKTsKKyAgICBBU1NF
UlRfRVEoIjAsMSwxIiwgRmlsZXNQZXJMZXZlbCgpKTsKKworICAgIC8vIE1ha2UgZmlsZXMgc3Bh
bm5pbmcgdGhlIGZvbGxvd2luZyByYW5nZXMgaW4gbGV2ZWwtMDoKKyAgICAvLyAgZmlsZXNbMF0g
IDIwMCAuLiA5MDAKKyAgICAvLyAgZmlsZXNbMV0gIDMwMCAuLiA1MDAKKyAgICAvLyBOb3RlIHRo
YXQgZmlsZXMgYXJlIHNvcnRlZCBieSBzbWFsbGVzdCBrZXkuCisgICAgQVNTRVJUX09LKFB1dCgi
MzAwIiwgInYzMDAiKSk7CisgICAgQVNTRVJUX09LKFB1dCgiNTAwIiwgInY1MDAiKSk7CisgICAg
ZGJmdWxsKCktPlRFU1RfQ29tcGFjdE1lbVRhYmxlKCk7CisgICAgQVNTRVJUX09LKFB1dCgiMjAw
IiwgInYyMDAiKSk7CisgICAgQVNTRVJUX09LKFB1dCgiNjAwIiwgInY2MDAiKSk7CisgICAgQVNT
RVJUX09LKFB1dCgiOTAwIiwgInY5MDAiKSk7CisgICAgZGJmdWxsKCktPlRFU1RfQ29tcGFjdE1l
bVRhYmxlKCk7CisgICAgQVNTRVJUX0VRKCIyLDEsMSIsIEZpbGVzUGVyTGV2ZWwoKSk7CisKKyAg
ICAvLyBDb21wYWN0IGF3YXkgdGhlIHBsYWNlaG9sZGVyIGZpbGVzIHdlIGNyZWF0ZWQgaW5pdGlh
bGx5CisgICAgZGJmdWxsKCktPlRFU1RfQ29tcGFjdFJhbmdlKDEsIE5VTEwsIE5VTEwpOworICAg
IGRiZnVsbCgpLT5URVNUX0NvbXBhY3RSYW5nZSgyLCBOVUxMLCBOVUxMKTsKKyAgICBBU1NFUlRf
RVEoIjIiLCBGaWxlc1BlckxldmVsKCkpOworCisgICAgLy8gRG8gYSBtZW10YWJsZSBjb21wYWN0
aW9uLiAgQmVmb3JlIGJ1Zy1maXgsIHRoZSBjb21wYWN0aW9uIHdvdWxkCisgICAgLy8gbm90IGRl
dGVjdCB0aGUgb3ZlcmxhcCB3aXRoIGxldmVsLTAgZmlsZXMgYW5kIHdvdWxkIGluY29ycmVjdGx5
IHBsYWNlCisgICAgLy8gdGhlIGRlbGV0aW9uIGluIGEgZGVlcGVyIGxldmVsLgorICAgIEFTU0VS
VF9PSyhEZWxldGUoIjYwMCIpKTsKKyAgICBkYmZ1bGwoKS0+VEVTVF9Db21wYWN0TWVtVGFibGUo
KTsKKyAgICBBU1NFUlRfRVEoIjMiLCBGaWxlc1BlckxldmVsKCkpOworICAgIEFTU0VSVF9FUSgi
Tk9UX0ZPVU5EIiwgR2V0KCI2MDAiKSk7CisgIH0gd2hpbGUgKENoYW5nZU9wdGlvbnMoKSk7Cit9
CisKK1RFU1QoREJUZXN0LCBMMF9Db21wYWN0aW9uQnVnX0lzc3VlNDRfYSkgeworICBSZW9wZW4o
KTsKKyAgQVNTRVJUX09LKFB1dCgiYiIsICJ2IikpOworICBSZW9wZW4oKTsKKyAgQVNTRVJUX09L
KERlbGV0ZSgiYiIpKTsKKyAgQVNTRVJUX09LKERlbGV0ZSgiYSIpKTsKKyAgUmVvcGVuKCk7Cisg
IEFTU0VSVF9PSyhEZWxldGUoImEiKSk7CisgIFJlb3BlbigpOworICBBU1NFUlRfT0soUHV0KCJh
IiwgInYiKSk7CisgIFJlb3BlbigpOworICBSZW9wZW4oKTsKKyAgQVNTRVJUX0VRKCIoYS0+diki
LCBDb250ZW50cygpKTsKKyAgZW52Xy0+U2xlZXBGb3JNaWNyb3NlY29uZHMoMTAwMDAwMCk7ICAv
LyBXYWl0IGZvciBjb21wYWN0aW9uIHRvIGZpbmlzaAorICBBU1NFUlRfRVEoIihhLT52KSIsIENv
bnRlbnRzKCkpOworfQorCitURVNUKERCVGVzdCwgTDBfQ29tcGFjdGlvbkJ1Z19Jc3N1ZTQ0X2Ip
IHsKKyAgUmVvcGVuKCk7CisgIFB1dCgiIiwiIik7CisgIFJlb3BlbigpOworICBEZWxldGUoImUi
KTsKKyAgUHV0KCIiLCIiKTsKKyAgUmVvcGVuKCk7CisgIFB1dCgiYyIsICJjdiIpOworICBSZW9w
ZW4oKTsKKyAgUHV0KCIiLCIiKTsKKyAgUmVvcGVuKCk7CisgIFB1dCgiIiwiIik7CisgIGVudl8t
PlNsZWVwRm9yTWljcm9zZWNvbmRzKDEwMDAwMDApOyAgLy8gV2FpdCBmb3IgY29tcGFjdGlvbiB0
byBmaW5pc2gKKyAgUmVvcGVuKCk7CisgIFB1dCgiZCIsImR2Iik7CisgIFJlb3BlbigpOworICBQ
dXQoIiIsIiIpOworICBSZW9wZW4oKTsKKyAgRGVsZXRlKCJkIik7CisgIERlbGV0ZSgiYiIpOwor
ICBSZW9wZW4oKTsKKyAgQVNTRVJUX0VRKCIoLT4pKGMtPmN2KSIsIENvbnRlbnRzKCkpOworICBl
bnZfLT5TbGVlcEZvck1pY3Jvc2Vjb25kcygxMDAwMDAwKTsgIC8vIFdhaXQgZm9yIGNvbXBhY3Rp
b24gdG8gZmluaXNoCisgIEFTU0VSVF9FUSgiKC0+KShjLT5jdikiLCBDb250ZW50cygpKTsKK30K
KworVEVTVChEQlRlc3QsIENvbXBhcmF0b3JDaGVjaykgeworICBjbGFzcyBOZXdDb21wYXJhdG9y
IDogcHVibGljIENvbXBhcmF0b3IgeworICAgcHVibGljOgorICAgIHZpcnR1YWwgY29uc3QgY2hh
ciogTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJsZXZlbGRiLk5ld0NvbXBhcmF0b3IiOyB9CisgICAg
dmlydHVhbCBpbnQgQ29tcGFyZShjb25zdCBTbGljZSYgYSwgY29uc3QgU2xpY2UmIGIpIGNvbnN0
IHsKKyAgICAgIHJldHVybiBCeXRld2lzZUNvbXBhcmF0b3IoKS0+Q29tcGFyZShhLCBiKTsKKyAg
ICB9CisgICAgdmlydHVhbCB2b2lkIEZpbmRTaG9ydGVzdFNlcGFyYXRvcihzdGQ6OnN0cmluZyog
cywgY29uc3QgU2xpY2UmIGwpIGNvbnN0IHsKKyAgICAgIEJ5dGV3aXNlQ29tcGFyYXRvcigpLT5G
aW5kU2hvcnRlc3RTZXBhcmF0b3IocywgbCk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBGaW5k
U2hvcnRTdWNjZXNzb3Ioc3RkOjpzdHJpbmcqIGtleSkgY29uc3QgeworICAgICAgQnl0ZXdpc2VD
b21wYXJhdG9yKCktPkZpbmRTaG9ydFN1Y2Nlc3NvcihrZXkpOworICAgIH0KKyAgfTsKKyAgTmV3
Q29tcGFyYXRvciBjbXA7CisgIE9wdGlvbnMgbmV3X29wdGlvbnMgPSBDdXJyZW50T3B0aW9ucygp
OworICBuZXdfb3B0aW9ucy5jb21wYXJhdG9yID0gJmNtcDsKKyAgU3RhdHVzIHMgPSBUcnlSZW9w
ZW4oJm5ld19vcHRpb25zKTsKKyAgQVNTRVJUX1RSVUUoIXMub2soKSk7CisgIEFTU0VSVF9UUlVF
KHMuVG9TdHJpbmcoKS5maW5kKCJjb21wYXJhdG9yIikgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCisg
ICAgICA8PCBzLlRvU3RyaW5nKCk7Cit9CisKK1RFU1QoREJUZXN0LCBDdXN0b21Db21wYXJhdG9y
KSB7CisgIGNsYXNzIE51bWJlckNvbXBhcmF0b3IgOiBwdWJsaWMgQ29tcGFyYXRvciB7CisgICBw
dWJsaWM6CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBOYW1lKCkgY29uc3QgeyByZXR1cm4gInRl
c3QuTnVtYmVyQ29tcGFyYXRvciI7IH0KKyAgICB2aXJ0dWFsIGludCBDb21wYXJlKGNvbnN0IFNs
aWNlJiBhLCBjb25zdCBTbGljZSYgYikgY29uc3QgeworICAgICAgcmV0dXJuIFRvTnVtYmVyKGEp
IC0gVG9OdW1iZXIoYik7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBGaW5kU2hvcnRlc3RTZXBh
cmF0b3Ioc3RkOjpzdHJpbmcqIHMsIGNvbnN0IFNsaWNlJiBsKSBjb25zdCB7CisgICAgICBUb051
bWJlcigqcyk7ICAgICAvLyBDaGVjayBmb3JtYXQKKyAgICAgIFRvTnVtYmVyKGwpOyAgICAgIC8v
IENoZWNrIGZvcm1hdAorICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgRmluZFNob3J0U3VjY2Vzc29y
KHN0ZDo6c3RyaW5nKiBrZXkpIGNvbnN0IHsKKyAgICAgIFRvTnVtYmVyKCprZXkpOyAgIC8vIENo
ZWNrIGZvcm1hdAorICAgIH0KKyAgIHByaXZhdGU6CisgICAgc3RhdGljIGludCBUb051bWJlcihj
b25zdCBTbGljZSYgeCkgeworICAgICAgLy8gQ2hlY2sgdGhhdCB0aGVyZSBhcmUgbm8gZXh0cmEg
Y2hhcmFjdGVycy4KKyAgICAgIEFTU0VSVF9UUlVFKHguc2l6ZSgpID49IDIgJiYgeFswXSA9PSAn
WycgJiYgeFt4LnNpemUoKS0xXSA9PSAnXScpCisgICAgICAgICAgPDwgRXNjYXBlU3RyaW5nKHgp
OworICAgICAgaW50IHZhbDsKKyAgICAgIGNoYXIgaWdub3JlZDsKKyAgICAgIEFTU0VSVF9UUlVF
KHNzY2FuZih4LlRvU3RyaW5nKCkuY19zdHIoKSwgIlslaV0lYyIsICZ2YWwsICZpZ25vcmVkKSA9
PSAxKQorICAgICAgICAgIDw8IEVzY2FwZVN0cmluZyh4KTsKKyAgICAgIHJldHVybiB2YWw7Cisg
ICAgfQorICB9OworICBOdW1iZXJDb21wYXJhdG9yIGNtcDsKKyAgT3B0aW9ucyBuZXdfb3B0aW9u
cyA9IEN1cnJlbnRPcHRpb25zKCk7CisgIG5ld19vcHRpb25zLmNyZWF0ZV9pZl9taXNzaW5nID0g
dHJ1ZTsKKyAgbmV3X29wdGlvbnMuY29tcGFyYXRvciA9ICZjbXA7CisgIG5ld19vcHRpb25zLmZp
bHRlcl9wb2xpY3kgPSBOVUxMOyAgICAgLy8gQ2Fubm90IHVzZSBibG9vbSBmaWx0ZXJzCisgIG5l
d19vcHRpb25zLndyaXRlX2J1ZmZlcl9zaXplID0gMTAwMDsgIC8vIENvbXBhY3QgbW9yZSBvZnRl
bgorICBEZXN0cm95QW5kUmVvcGVuKCZuZXdfb3B0aW9ucyk7CisgIEFTU0VSVF9PSyhQdXQoIlsx
MF0iLCAidGVuIikpOworICBBU1NFUlRfT0soUHV0KCJbMHgxNF0iLCAidHdlbnR5IikpOworICBm
b3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgeworICAgIEFTU0VSVF9FUSgidGVuIiwgR2V0KCJb
MTBdIikpOworICAgIEFTU0VSVF9FUSgidGVuIiwgR2V0KCJbMHhhXSIpKTsKKyAgICBBU1NFUlRf
RVEoInR3ZW50eSIsIEdldCgiWzIwXSIpKTsKKyAgICBBU1NFUlRfRVEoInR3ZW50eSIsIEdldCgi
WzB4MTRdIikpOworICAgIEFTU0VSVF9FUSgiTk9UX0ZPVU5EIiwgR2V0KCJbMTVdIikpOworICAg
IEFTU0VSVF9FUSgiTk9UX0ZPVU5EIiwgR2V0KCJbMHhmXSIpKTsKKyAgICBDb21wYWN0KCJbMF0i
LCAiWzk5OTldIik7CisgIH0KKworICBmb3IgKGludCBydW4gPSAwOyBydW4gPCAyOyBydW4rKykg
eworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7CisgICAgICBjaGFyIGJ1Zlsx
MDBdOworICAgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIlslZF0iLCBpKjEwKTsKKyAg
ICAgIEFTU0VSVF9PSyhQdXQoYnVmLCBidWYpKTsKKyAgICB9CisgICAgQ29tcGFjdCgiWzBdIiwg
IlsxMDAwMDAwXSIpOworICB9Cit9CisKK1RFU1QoREJUZXN0LCBNYW51YWxDb21wYWN0aW9uKSB7
CisgIEFTU0VSVF9FUShjb25maWc6OmtNYXhNZW1Db21wYWN0TGV2ZWwsIDIpCisgICAgICA8PCAi
TmVlZCB0byB1cGRhdGUgdGhpcyB0ZXN0IHRvIG1hdGNoIGtNYXhNZW1Db21wYWN0TGV2ZWwiOwor
CisgIE1ha2VUYWJsZXMoMywgInAiLCAicSIpOworICBBU1NFUlRfRVEoIjEsMSwxIiwgRmlsZXNQ
ZXJMZXZlbCgpKTsKKworICAvLyBDb21wYWN0aW9uIHJhbmdlIGZhbGxzIGJlZm9yZSBmaWxlcwor
ICBDb21wYWN0KCIiLCAiYyIpOworICBBU1NFUlRfRVEoIjEsMSwxIiwgRmlsZXNQZXJMZXZlbCgp
KTsKKworICAvLyBDb21wYWN0aW9uIHJhbmdlIGZhbGxzIGFmdGVyIGZpbGVzCisgIENvbXBhY3Qo
InIiLCAieiIpOworICBBU1NFUlRfRVEoIjEsMSwxIiwgRmlsZXNQZXJMZXZlbCgpKTsKKworICAv
LyBDb21wYWN0aW9uIHJhbmdlIG92ZXJsYXBzIGZpbGVzCisgIENvbXBhY3QoInAxIiwgInA5Iik7
CisgIEFTU0VSVF9FUSgiMCwwLDEiLCBGaWxlc1BlckxldmVsKCkpOworCisgIC8vIFBvcHVsYXRl
IGEgZGlmZmVyZW50IHJhbmdlCisgIE1ha2VUYWJsZXMoMywgImMiLCAiZSIpOworICBBU1NFUlRf
RVEoIjEsMSwyIiwgRmlsZXNQZXJMZXZlbCgpKTsKKworICAvLyBDb21wYWN0IGp1c3QgdGhlIG5l
dyByYW5nZQorICBDb21wYWN0KCJiIiwgImYiKTsKKyAgQVNTRVJUX0VRKCIwLDAsMiIsIEZpbGVz
UGVyTGV2ZWwoKSk7CisKKyAgLy8gQ29tcGFjdCBhbGwKKyAgTWFrZVRhYmxlcygxLCAiYSIsICJ6
Iik7CisgIEFTU0VSVF9FUSgiMCwxLDIiLCBGaWxlc1BlckxldmVsKCkpOworICBkYl8tPkNvbXBh
Y3RSYW5nZShOVUxMLCBOVUxMKTsKKyAgQVNTRVJUX0VRKCIwLDAsMSIsIEZpbGVzUGVyTGV2ZWwo
KSk7Cit9CisKK1RFU1QoREJUZXN0LCBEQk9wZW5fT3B0aW9ucykgeworICBzdGQ6OnN0cmluZyBk
Ym5hbWUgPSB0ZXN0OjpUbXBEaXIoKSArICIvZGJfb3B0aW9uc190ZXN0IjsKKyAgRGVzdHJveURC
KGRibmFtZSwgT3B0aW9ucygpKTsKKworICAvLyBEb2VzIG5vdCBleGlzdCwgYW5kIGNyZWF0ZV9p
Zl9taXNzaW5nID09IGZhbHNlOiBlcnJvcgorICBEQiogZGIgPSBOVUxMOworICBPcHRpb25zIG9w
dHM7CisgIG9wdHMuY3JlYXRlX2lmX21pc3NpbmcgPSBmYWxzZTsKKyAgU3RhdHVzIHMgPSBEQjo6
T3BlbihvcHRzLCBkYm5hbWUsICZkYik7CisgIEFTU0VSVF9UUlVFKHN0cnN0cihzLlRvU3RyaW5n
KCkuY19zdHIoKSwgImRvZXMgbm90IGV4aXN0IikgIT0gTlVMTCk7CisgIEFTU0VSVF9UUlVFKGRi
ID09IE5VTEwpOworCisgIC8vIERvZXMgbm90IGV4aXN0LCBhbmQgY3JlYXRlX2lmX21pc3Npbmcg
PT0gdHJ1ZTogT0sKKyAgb3B0cy5jcmVhdGVfaWZfbWlzc2luZyA9IHRydWU7CisgIHMgPSBEQjo6
T3BlbihvcHRzLCBkYm5hbWUsICZkYik7CisgIEFTU0VSVF9PSyhzKTsKKyAgQVNTRVJUX1RSVUUo
ZGIgIT0gTlVMTCk7CisKKyAgZGVsZXRlIGRiOworICBkYiA9IE5VTEw7CisKKyAgLy8gRG9lcyBl
eGlzdCwgYW5kIGVycm9yX2lmX2V4aXN0cyA9PSB0cnVlOiBlcnJvcgorICBvcHRzLmNyZWF0ZV9p
Zl9taXNzaW5nID0gZmFsc2U7CisgIG9wdHMuZXJyb3JfaWZfZXhpc3RzID0gdHJ1ZTsKKyAgcyA9
IERCOjpPcGVuKG9wdHMsIGRibmFtZSwgJmRiKTsKKyAgQVNTRVJUX1RSVUUoc3Ryc3RyKHMuVG9T
dHJpbmcoKS5jX3N0cigpLCAiZXhpc3RzIikgIT0gTlVMTCk7CisgIEFTU0VSVF9UUlVFKGRiID09
IE5VTEwpOworCisgIC8vIERvZXMgZXhpc3QsIGFuZCBlcnJvcl9pZl9leGlzdHMgPT0gZmFsc2U6
IE9LCisgIG9wdHMuY3JlYXRlX2lmX21pc3NpbmcgPSB0cnVlOworICBvcHRzLmVycm9yX2lmX2V4
aXN0cyA9IGZhbHNlOworICBzID0gREI6Ok9wZW4ob3B0cywgZGJuYW1lLCAmZGIpOworICBBU1NF
UlRfT0socyk7CisgIEFTU0VSVF9UUlVFKGRiICE9IE5VTEwpOworCisgIGRlbGV0ZSBkYjsKKyAg
ZGIgPSBOVUxMOworfQorCitURVNUKERCVGVzdCwgTG9ja2luZykgeworICBEQiogZGIyID0gTlVM
TDsKKyAgU3RhdHVzIHMgPSBEQjo6T3BlbihDdXJyZW50T3B0aW9ucygpLCBkYm5hbWVfLCAmZGIy
KTsKKyAgQVNTRVJUX1RSVUUoIXMub2soKSkgPDwgIkxvY2tpbmcgZGlkIG5vdCBwcmV2ZW50IHJl
LW9wZW5pbmcgZGIiOworfQorCisvLyBDaGVjayB0aGF0IG51bWJlciBvZiBmaWxlcyBkb2VzIG5v
dCBncm93IHdoZW4gd2UgYXJlIG91dCBvZiBzcGFjZQorVEVTVChEQlRlc3QsIE5vU3BhY2UpIHsK
KyAgT3B0aW9ucyBvcHRpb25zID0gQ3VycmVudE9wdGlvbnMoKTsKKyAgb3B0aW9ucy5lbnYgPSBl
bnZfOworICBSZW9wZW4oJm9wdGlvbnMpOworCisgIEFTU0VSVF9PSyhQdXQoImZvbyIsICJ2MSIp
KTsKKyAgQVNTRVJUX0VRKCJ2MSIsIEdldCgiZm9vIikpOworICBDb21wYWN0KCJhIiwgInoiKTsK
KyAgY29uc3QgaW50IG51bV9maWxlcyA9IENvdW50RmlsZXMoKTsKKyAgZW52Xy0+bm9fc3BhY2Vf
LlJlbGVhc2VfU3RvcmUoZW52Xyk7ICAgLy8gRm9yY2Ugb3V0LW9mLXNwYWNlIGVycm9ycworICBl
bnZfLT5zbGVlcF9jb3VudGVyXy5SZXNldCgpOworICBmb3IgKGludCBpID0gMDsgaSA8IDU7IGkr
KykgeworICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBjb25maWc6OmtOdW1MZXZlbHMt
MTsgbGV2ZWwrKykgeworICAgICAgZGJmdWxsKCktPlRFU1RfQ29tcGFjdFJhbmdlKGxldmVsLCBO
VUxMLCBOVUxMKTsKKyAgICB9CisgIH0KKyAgZW52Xy0+bm9fc3BhY2VfLlJlbGVhc2VfU3RvcmUo
TlVMTCk7CisgIEFTU0VSVF9MVChDb3VudEZpbGVzKCksIG51bV9maWxlcyArIDMpOworCisgIC8v
IENoZWNrIHRoYXQgY29tcGFjdGlvbiBhdHRlbXB0cyBzbGVwdCBhZnRlciBlcnJvcnMKKyAgQVNT
RVJUX0dFKGVudl8tPnNsZWVwX2NvdW50ZXJfLlJlYWQoKSwgNSk7Cit9CisKK1RFU1QoREJUZXN0
LCBOb25Xcml0YWJsZUZpbGVTeXN0ZW0pIHsKKyAgT3B0aW9ucyBvcHRpb25zID0gQ3VycmVudE9w
dGlvbnMoKTsKKyAgb3B0aW9ucy53cml0ZV9idWZmZXJfc2l6ZSA9IDEwMDA7CisgIG9wdGlvbnMu
ZW52ID0gZW52XzsKKyAgUmVvcGVuKCZvcHRpb25zKTsKKyAgQVNTRVJUX09LKFB1dCgiZm9vIiwg
InYxIikpOworICBlbnZfLT5ub25fd3JpdGFibGVfLlJlbGVhc2VfU3RvcmUoZW52Xyk7ICAvLyBG
b3JjZSBlcnJvcnMgZm9yIG5ldyBmaWxlcworICBzdGQ6OnN0cmluZyBiaWcoMTAwMDAwLCAneCcp
OworICBpbnQgZXJyb3JzID0gMDsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCAyMDsgaSsrKSB7Cisg
ICAgZnByaW50ZihzdGRlcnIsICJpdGVyICVkOyBlcnJvcnMgJWRcbiIsIGksIGVycm9ycyk7Cisg
ICAgaWYgKCFQdXQoImZvbyIsIGJpZykub2soKSkgeworICAgICAgZXJyb3JzKys7CisgICAgICBl
bnZfLT5TbGVlcEZvck1pY3Jvc2Vjb25kcygxMDAwMDApOworICAgIH0KKyAgfQorICBBU1NFUlRf
R1QoZXJyb3JzLCAwKTsKKyAgZW52Xy0+bm9uX3dyaXRhYmxlXy5SZWxlYXNlX1N0b3JlKE5VTEwp
OworfQorCitURVNUKERCVGVzdCwgTWFuaWZlc3RXcml0ZUVycm9yKSB7CisgIC8vIFRlc3QgZm9y
IHRoZSBmb2xsb3dpbmcgcHJvYmxlbToKKyAgLy8gKGEpIENvbXBhY3Rpb24gcHJvZHVjZXMgZmls
ZSBGCisgIC8vIChiKSBMb2cgcmVjb3JkIGNvbnRhaW5pbmcgRiBpcyB3cml0dGVuIHRvIE1BTklG
RVNUIGZpbGUsIGJ1dCBTeW5jKCkgZmFpbHMKKyAgLy8gKGMpIEdDIGRlbGV0ZXMgRgorICAvLyAo
ZCkgQWZ0ZXIgcmVvcGVuaW5nIERCLCByZWFkcyBmYWlsIHNpbmNlIGRlbGV0ZWQgRiBpcyBuYW1l
ZCBpbiBsb2cgcmVjb3JkCisKKyAgLy8gV2UgaXRlcmF0ZSB0d2ljZS4gIEluIHRoZSBzZWNvbmQg
aXRlcmF0aW9uLCBldmVyeXRoaW5nIGlzIHRoZQorICAvLyBzYW1lIGV4Y2VwdCB0aGUgbG9nIHJl
Y29yZCBuZXZlciBtYWtlcyBpdCB0byB0aGUgTUFOSUZFU1QgZmlsZS4KKyAgZm9yIChpbnQgaXRl
ciA9IDA7IGl0ZXIgPCAyOyBpdGVyKyspIHsKKyAgICBwb3J0OjpBdG9taWNQb2ludGVyKiBlcnJv
cl90eXBlID0gKGl0ZXIgPT0gMCkKKyAgICAgICAgPyAmZW52Xy0+bWFuaWZlc3Rfc3luY19lcnJv
cl8KKyAgICAgICAgOiAmZW52Xy0+bWFuaWZlc3Rfd3JpdGVfZXJyb3JfOworCisgICAgLy8gSW5z
ZXJ0IGZvbz0+YmFyIG1hcHBpbmcKKyAgICBPcHRpb25zIG9wdGlvbnMgPSBDdXJyZW50T3B0aW9u
cygpOworICAgIG9wdGlvbnMuZW52ID0gZW52XzsKKyAgICBvcHRpb25zLmNyZWF0ZV9pZl9taXNz
aW5nID0gdHJ1ZTsKKyAgICBvcHRpb25zLmVycm9yX2lmX2V4aXN0cyA9IGZhbHNlOworICAgIERl
c3Ryb3lBbmRSZW9wZW4oJm9wdGlvbnMpOworICAgIEFTU0VSVF9PSyhQdXQoImZvbyIsICJiYXIi
KSk7CisgICAgQVNTRVJUX0VRKCJiYXIiLCBHZXQoImZvbyIpKTsKKworICAgIC8vIE1lbXRhYmxl
IGNvbXBhY3Rpb24gKHdpbGwgc3VjY2VlZCkKKyAgICBkYmZ1bGwoKS0+VEVTVF9Db21wYWN0TWVt
VGFibGUoKTsKKyAgICBBU1NFUlRfRVEoImJhciIsIEdldCgiZm9vIikpOworICAgIGNvbnN0IGlu
dCBsYXN0ID0gY29uZmlnOjprTWF4TWVtQ29tcGFjdExldmVsOworICAgIEFTU0VSVF9FUShOdW1U
YWJsZUZpbGVzQXRMZXZlbChsYXN0KSwgMSk7ICAgLy8gZm9vPT5iYXIgaXMgbm93IGluIGxhc3Qg
bGV2ZWwKKworICAgIC8vIE1lcmdpbmcgY29tcGFjdGlvbiAod2lsbCBmYWlsKQorICAgIGVycm9y
X3R5cGUtPlJlbGVhc2VfU3RvcmUoZW52Xyk7CisgICAgZGJmdWxsKCktPlRFU1RfQ29tcGFjdFJh
bmdlKGxhc3QsIE5VTEwsIE5VTEwpOyAgLy8gU2hvdWxkIGZhaWwKKyAgICBBU1NFUlRfRVEoImJh
ciIsIEdldCgiZm9vIikpOworCisgICAgLy8gUmVjb3Zlcnk6IHNob3VsZCBub3QgbG9zZSBkYXRh
CisgICAgZXJyb3JfdHlwZS0+UmVsZWFzZV9TdG9yZShOVUxMKTsKKyAgICBSZW9wZW4oJm9wdGlv
bnMpOworICAgIEFTU0VSVF9FUSgiYmFyIiwgR2V0KCJmb28iKSk7CisgIH0KK30KKworVEVTVChE
QlRlc3QsIEZpbGVzRGVsZXRlZEFmdGVyQ29tcGFjdGlvbikgeworICBBU1NFUlRfT0soUHV0KCJm
b28iLCAidjIiKSk7CisgIENvbXBhY3QoImEiLCAieiIpOworICBjb25zdCBpbnQgbnVtX2ZpbGVz
ID0gQ291bnRGaWxlcygpOworICBmb3IgKGludCBpID0gMDsgaSA8IDEwOyBpKyspIHsKKyAgICBB
U1NFUlRfT0soUHV0KCJmb28iLCAidjIiKSk7CisgICAgQ29tcGFjdCgiYSIsICJ6Iik7CisgIH0K
KyAgQVNTRVJUX0VRKENvdW50RmlsZXMoKSwgbnVtX2ZpbGVzKTsKK30KKworVEVTVChEQlRlc3Qs
IEJsb29tRmlsdGVyKSB7CisgIGVudl8tPmNvdW50X3JhbmRvbV9yZWFkc18gPSB0cnVlOworICBP
cHRpb25zIG9wdGlvbnMgPSBDdXJyZW50T3B0aW9ucygpOworICBvcHRpb25zLmVudiA9IGVudl87
CisgIG9wdGlvbnMuYmxvY2tfY2FjaGUgPSBOZXdMUlVDYWNoZSgwKTsgIC8vIFByZXZlbnQgY2Fj
aGUgaGl0cworICBvcHRpb25zLmZpbHRlcl9wb2xpY3kgPSBOZXdCbG9vbUZpbHRlclBvbGljeSgx
MCk7CisgIFJlb3Blbigmb3B0aW9ucyk7CisKKyAgLy8gUG9wdWxhdGUgbXVsdGlwbGUgbGF5ZXJz
CisgIGNvbnN0IGludCBOID0gMTAwMDA7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7
CisgICAgQVNTRVJUX09LKFB1dChLZXkoaSksIEtleShpKSkpOworICB9CisgIENvbXBhY3QoImEi
LCAieiIpOworICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkgKz0gMTAwKSB7CisgICAgQVNTRVJU
X09LKFB1dChLZXkoaSksIEtleShpKSkpOworICB9CisgIGRiZnVsbCgpLT5URVNUX0NvbXBhY3RN
ZW1UYWJsZSgpOworCisgIC8vIFByZXZlbnQgYXV0byBjb21wYWN0aW9ucyB0cmlnZ2VyZWQgYnkg
c2Vla3MKKyAgZW52Xy0+ZGVsYXlfc3N0YWJsZV9zeW5jXy5SZWxlYXNlX1N0b3JlKGVudl8pOwor
CisgIC8vIExvb2t1cCBwcmVzZW50IGtleXMuICBTaG91bGQgcmFyZWx5IHJlYWQgZnJvbSBzbWFs
bCBzc3RhYmxlLgorICBlbnZfLT5yYW5kb21fcmVhZF9jb3VudGVyXy5SZXNldCgpOworICBmb3Ig
KGludCBpID0gMDsgaSA8IE47IGkrKykgeworICAgIEFTU0VSVF9FUShLZXkoaSksIEdldChLZXko
aSkpKTsKKyAgfQorICBpbnQgcmVhZHMgPSBlbnZfLT5yYW5kb21fcmVhZF9jb3VudGVyXy5SZWFk
KCk7CisgIGZwcmludGYoc3RkZXJyLCAiJWQgcHJlc2VudCA9PiAlZCByZWFkc1xuIiwgTiwgcmVh
ZHMpOworICBBU1NFUlRfR0UocmVhZHMsIE4pOworICBBU1NFUlRfTEUocmVhZHMsIE4gKyAyKk4v
MTAwKTsKKworICAvLyBMb29rdXAgcHJlc2VudCBrZXlzLiAgU2hvdWxkIHJhcmVseSByZWFkIGZy
b20gZWl0aGVyIHNzdGFibGUuCisgIGVudl8tPnJhbmRvbV9yZWFkX2NvdW50ZXJfLlJlc2V0KCk7
CisgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CisgICAgQVNTRVJUX0VRKCJOT1RfRk9V
TkQiLCBHZXQoS2V5KGkpICsgIi5taXNzaW5nIikpOworICB9CisgIHJlYWRzID0gZW52Xy0+cmFu
ZG9tX3JlYWRfY291bnRlcl8uUmVhZCgpOworICBmcHJpbnRmKHN0ZGVyciwgIiVkIG1pc3Npbmcg
PT4gJWQgcmVhZHNcbiIsIE4sIHJlYWRzKTsKKyAgQVNTRVJUX0xFKHJlYWRzLCAzKk4vMTAwKTsK
KworICBlbnZfLT5kZWxheV9zc3RhYmxlX3N5bmNfLlJlbGVhc2VfU3RvcmUoTlVMTCk7CisgIENs
b3NlKCk7CisgIGRlbGV0ZSBvcHRpb25zLmJsb2NrX2NhY2hlOworICBkZWxldGUgb3B0aW9ucy5m
aWx0ZXJfcG9saWN5OworfQorCisvLyBNdWx0aS10aHJlYWRlZCB0ZXN0OgorbmFtZXNwYWNlIHsK
Kworc3RhdGljIGNvbnN0IGludCBrTnVtVGhyZWFkcyA9IDQ7CitzdGF0aWMgY29uc3QgaW50IGtU
ZXN0U2Vjb25kcyA9IDEwOworc3RhdGljIGNvbnN0IGludCBrTnVtS2V5cyA9IDEwMDA7CisKK3N0
cnVjdCBNVFN0YXRlIHsKKyAgREJUZXN0KiB0ZXN0OworICBwb3J0OjpBdG9taWNQb2ludGVyIHN0
b3A7CisgIHBvcnQ6OkF0b21pY1BvaW50ZXIgY291bnRlcltrTnVtVGhyZWFkc107CisgIHBvcnQ6
OkF0b21pY1BvaW50ZXIgdGhyZWFkX2RvbmVba051bVRocmVhZHNdOworfTsKKworc3RydWN0IE1U
VGhyZWFkIHsKKyAgTVRTdGF0ZSogc3RhdGU7CisgIGludCBpZDsKK307CisKK3N0YXRpYyB2b2lk
IE1UVGhyZWFkQm9keSh2b2lkKiBhcmcpIHsKKyAgTVRUaHJlYWQqIHQgPSByZWludGVycHJldF9j
YXN0PE1UVGhyZWFkKj4oYXJnKTsKKyAgaW50IGlkID0gdC0+aWQ7CisgIERCKiBkYiA9IHQtPnN0
YXRlLT50ZXN0LT5kYl87CisgIHVpbnRwdHJfdCBjb3VudGVyID0gMDsKKyAgZnByaW50ZihzdGRl
cnIsICIuLi4gc3RhcnRpbmcgdGhyZWFkICVkXG4iLCBpZCk7CisgIFJhbmRvbSBybmQoMTAwMCAr
IGlkKTsKKyAgc3RkOjpzdHJpbmcgdmFsdWU7CisgIGNoYXIgdmFsYnVmWzE1MDBdOworICB3aGls
ZSAodC0+c3RhdGUtPnN0b3AuQWNxdWlyZV9Mb2FkKCkgPT0gTlVMTCkgeworICAgIHQtPnN0YXRl
LT5jb3VudGVyW2lkXS5SZWxlYXNlX1N0b3JlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNvdW50
ZXIpKTsKKworICAgIGludCBrZXkgPSBybmQuVW5pZm9ybShrTnVtS2V5cyk7CisgICAgY2hhciBr
ZXlidWZbMjBdOworICAgIHNucHJpbnRmKGtleWJ1Ziwgc2l6ZW9mKGtleWJ1ZiksICIlMDE2ZCIs
IGtleSk7CisKKyAgICBpZiAocm5kLk9uZUluKDIpKSB7CisgICAgICAvLyBXcml0ZSB2YWx1ZXMg
b2YgdGhlIGZvcm0gPGtleSwgbXkgaWQsIGNvdW50ZXI+LgorICAgICAgLy8gV2UgYWRkIHNvbWUg
cGFkZGluZyBmb3IgZm9yY2UgY29tcGFjdGlvbnMuCisgICAgICBzbnByaW50Zih2YWxidWYsIHNp
emVvZih2YWxidWYpLCAiJWQuJWQuJS0xMDAwZCIsCisgICAgICAgICAgICAgICBrZXksIGlkLCBz
dGF0aWNfY2FzdDxpbnQ+KGNvdW50ZXIpKTsKKyAgICAgIEFTU0VSVF9PSyhkYi0+UHV0KFdyaXRl
T3B0aW9ucygpLCBTbGljZShrZXlidWYpLCBTbGljZSh2YWxidWYpKSk7CisgICAgfSBlbHNlIHsK
KyAgICAgIC8vIFJlYWQgYSB2YWx1ZSBhbmQgdmVyaWZ5IHRoYXQgaXQgbWF0Y2hlcyB0aGUgcGF0
dGVybiB3cml0dGVuIGFib3ZlLgorICAgICAgU3RhdHVzIHMgPSBkYi0+R2V0KFJlYWRPcHRpb25z
KCksIFNsaWNlKGtleWJ1ZiksICZ2YWx1ZSk7CisgICAgICBpZiAocy5Jc05vdEZvdW5kKCkpIHsK
KyAgICAgICAgLy8gS2V5IGhhcyBub3QgeWV0IGJlZW4gd3JpdHRlbgorICAgICAgfSBlbHNlIHsK
KyAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgd3JpdGVyIHRocmVhZCBjb3VudGVyIGlzID49IHRo
ZSBjb3VudGVyIGluIHRoZSB2YWx1ZQorICAgICAgICBBU1NFUlRfT0socyk7CisgICAgICAgIGlu
dCBrLCB3LCBjOworICAgICAgICBBU1NFUlRfRVEoMywgc3NjYW5mKHZhbHVlLmNfc3RyKCksICIl
ZC4lZC4lZCIsICZrLCAmdywgJmMpKSA8PCB2YWx1ZTsKKyAgICAgICAgQVNTRVJUX0VRKGssIGtl
eSk7CisgICAgICAgIEFTU0VSVF9HRSh3LCAwKTsKKyAgICAgICAgQVNTRVJUX0xUKHcsIGtOdW1U
aHJlYWRzKTsKKyAgICAgICAgQVNTRVJUX0xFKGMsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
PigKKyAgICAgICAgICAgIHQtPnN0YXRlLT5jb3VudGVyW3ddLkFjcXVpcmVfTG9hZCgpKSk7Cisg
ICAgICB9CisgICAgfQorICAgIGNvdW50ZXIrKzsKKyAgfQorICB0LT5zdGF0ZS0+dGhyZWFkX2Rv
bmVbaWRdLlJlbGVhc2VfU3RvcmUodCk7CisgIGZwcmludGYoc3RkZXJyLCAiLi4uIHN0b3BwaW5n
IHRocmVhZCAlZCBhZnRlciAlZCBvcHNcbiIsIGlkLCBpbnQoY291bnRlcikpOworfQorCit9ICAv
LyBuYW1lc3BhY2UKKworVEVTVChEQlRlc3QsIE11bHRpVGhyZWFkZWQpIHsKKyAgZG8geworICAg
IC8vIEluaXRpYWxpemUgc3RhdGUKKyAgICBNVFN0YXRlIG10OworICAgIG10LnRlc3QgPSB0aGlz
OworICAgIG10LnN0b3AuUmVsZWFzZV9TdG9yZSgwKTsKKyAgICBmb3IgKGludCBpZCA9IDA7IGlk
IDwga051bVRocmVhZHM7IGlkKyspIHsKKyAgICAgIG10LmNvdW50ZXJbaWRdLlJlbGVhc2VfU3Rv
cmUoMCk7CisgICAgICBtdC50aHJlYWRfZG9uZVtpZF0uUmVsZWFzZV9TdG9yZSgwKTsKKyAgICB9
CisKKyAgICAvLyBTdGFydCB0aHJlYWRzCisgICAgTVRUaHJlYWQgdGhyZWFkW2tOdW1UaHJlYWRz
XTsKKyAgICBmb3IgKGludCBpZCA9IDA7IGlkIDwga051bVRocmVhZHM7IGlkKyspIHsKKyAgICAg
IHRocmVhZFtpZF0uc3RhdGUgPSAmbXQ7CisgICAgICB0aHJlYWRbaWRdLmlkID0gaWQ7CisgICAg
ICBlbnZfLT5TdGFydFRocmVhZChNVFRocmVhZEJvZHksICZ0aHJlYWRbaWRdKTsKKyAgICB9CisK
KyAgICAvLyBMZXQgdGhlbSBydW4gZm9yIGEgd2hpbGUKKyAgICBlbnZfLT5TbGVlcEZvck1pY3Jv
c2Vjb25kcyhrVGVzdFNlY29uZHMgKiAxMDAwMDAwKTsKKworICAgIC8vIFN0b3AgdGhlIHRocmVh
ZHMgYW5kIHdhaXQgZm9yIHRoZW0gdG8gZmluaXNoCisgICAgbXQuc3RvcC5SZWxlYXNlX1N0b3Jl
KCZtdCk7CisgICAgZm9yIChpbnQgaWQgPSAwOyBpZCA8IGtOdW1UaHJlYWRzOyBpZCsrKSB7Cisg
ICAgICB3aGlsZSAobXQudGhyZWFkX2RvbmVbaWRdLkFjcXVpcmVfTG9hZCgpID09IE5VTEwpIHsK
KyAgICAgICAgZW52Xy0+U2xlZXBGb3JNaWNyb3NlY29uZHMoMTAwMDAwKTsKKyAgICAgIH0KKyAg
ICB9CisgIH0gd2hpbGUgKENoYW5nZU9wdGlvbnMoKSk7Cit9CisKK25hbWVzcGFjZSB7Cit0eXBl
ZGVmIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz4gS1ZNYXA7Cit9CisKK2NsYXNz
IE1vZGVsREI6IHB1YmxpYyBEQiB7CisgcHVibGljOgorICBjbGFzcyBNb2RlbFNuYXBzaG90IDog
cHVibGljIFNuYXBzaG90IHsKKyAgIHB1YmxpYzoKKyAgICBLVk1hcCBtYXBfOworICB9OworCisg
IGV4cGxpY2l0IE1vZGVsREIoY29uc3QgT3B0aW9ucyYgb3B0aW9ucyk6IG9wdGlvbnNfKG9wdGlv
bnMpIHsgfQorICB+TW9kZWxEQigpIHsgfQorICB2aXJ0dWFsIFN0YXR1cyBQdXQoY29uc3QgV3Jp
dGVPcHRpb25zJiBvLCBjb25zdCBTbGljZSYgaywgY29uc3QgU2xpY2UmIHYpIHsKKyAgICByZXR1
cm4gREI6OlB1dChvLCBrLCB2KTsKKyAgfQorICB2aXJ0dWFsIFN0YXR1cyBEZWxldGUoY29uc3Qg
V3JpdGVPcHRpb25zJiBvLCBjb25zdCBTbGljZSYga2V5KSB7CisgICAgcmV0dXJuIERCOjpEZWxl
dGUobywga2V5KTsKKyAgfQorICB2aXJ0dWFsIFN0YXR1cyBHZXQoY29uc3QgUmVhZE9wdGlvbnMm
IG9wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBTbGljZSYga2V5LCBzdGQ6OnN0
cmluZyogdmFsdWUpIHsKKyAgICBhc3NlcnQoZmFsc2UpOyAgICAgIC8vIE5vdCBpbXBsZW1lbnRl
ZAorICAgIHJldHVybiBTdGF0dXM6Ok5vdEZvdW5kKGtleSk7CisgIH0KKyAgdmlydHVhbCBJdGVy
YXRvciogTmV3SXRlcmF0b3IoY29uc3QgUmVhZE9wdGlvbnMmIG9wdGlvbnMpIHsKKyAgICBpZiAo
b3B0aW9ucy5zbmFwc2hvdCA9PSBOVUxMKSB7CisgICAgICBLVk1hcCogc2F2ZWQgPSBuZXcgS1ZN
YXA7CisgICAgICAqc2F2ZWQgPSBtYXBfOworICAgICAgcmV0dXJuIG5ldyBNb2RlbEl0ZXIoc2F2
ZWQsIHRydWUpOworICAgIH0gZWxzZSB7CisgICAgICBjb25zdCBLVk1hcCogc25hcHNob3Rfc3Rh
dGUgPQorICAgICAgICAgICYocmVpbnRlcnByZXRfY2FzdDxjb25zdCBNb2RlbFNuYXBzaG90Kj4o
b3B0aW9ucy5zbmFwc2hvdCktPm1hcF8pOworICAgICAgcmV0dXJuIG5ldyBNb2RlbEl0ZXIoc25h
cHNob3Rfc3RhdGUsIGZhbHNlKTsKKyAgICB9CisgIH0KKyAgdmlydHVhbCBjb25zdCBTbmFwc2hv
dCogR2V0U25hcHNob3QoKSB7CisgICAgTW9kZWxTbmFwc2hvdCogc25hcHNob3QgPSBuZXcgTW9k
ZWxTbmFwc2hvdDsKKyAgICBzbmFwc2hvdC0+bWFwXyA9IG1hcF87CisgICAgcmV0dXJuIHNuYXBz
aG90OworICB9CisKKyAgdmlydHVhbCB2b2lkIFJlbGVhc2VTbmFwc2hvdChjb25zdCBTbmFwc2hv
dCogc25hcHNob3QpIHsKKyAgICBkZWxldGUgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBNb2RlbFNu
YXBzaG90Kj4oc25hcHNob3QpOworICB9CisgIHZpcnR1YWwgU3RhdHVzIFdyaXRlKGNvbnN0IFdy
aXRlT3B0aW9ucyYgb3B0aW9ucywgV3JpdGVCYXRjaCogYmF0Y2gpIHsKKyAgICBjbGFzcyBIYW5k
bGVyIDogcHVibGljIFdyaXRlQmF0Y2g6OkhhbmRsZXIgeworICAgICBwdWJsaWM6CisgICAgICBL
Vk1hcCogbWFwXzsKKyAgICAgIHZpcnR1YWwgdm9pZCBQdXQoY29uc3QgU2xpY2UmIGtleSwgY29u
c3QgU2xpY2UmIHZhbHVlKSB7CisgICAgICAgICgqbWFwXylba2V5LlRvU3RyaW5nKCldID0gdmFs
dWUuVG9TdHJpbmcoKTsKKyAgICAgIH0KKyAgICAgIHZpcnR1YWwgdm9pZCBEZWxldGUoY29uc3Qg
U2xpY2UmIGtleSkgeworICAgICAgICBtYXBfLT5lcmFzZShrZXkuVG9TdHJpbmcoKSk7CisgICAg
ICB9CisgICAgfTsKKyAgICBIYW5kbGVyIGhhbmRsZXI7CisgICAgaGFuZGxlci5tYXBfID0gJm1h
cF87CisgICAgcmV0dXJuIGJhdGNoLT5JdGVyYXRlKCZoYW5kbGVyKTsKKyAgfQorCisgIHZpcnR1
YWwgYm9vbCBHZXRQcm9wZXJ0eShjb25zdCBTbGljZSYgcHJvcGVydHksIHN0ZDo6c3RyaW5nKiB2
YWx1ZSkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICB2aXJ0dWFsIHZvaWQgR2V0QXBwcm94
aW1hdGVTaXplcyhjb25zdCBSYW5nZSogciwgaW50IG4sIHVpbnQ2NF90KiBzaXplcykgeworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgICBzaXplc1tpXSA9IDA7CisgICAg
fQorICB9CisgIHZpcnR1YWwgdm9pZCBDb21wYWN0UmFuZ2UoY29uc3QgU2xpY2UqIHN0YXJ0LCBj
b25zdCBTbGljZSogZW5kKSB7CisgIH0KKworIHByaXZhdGU6CisgIGNsYXNzIE1vZGVsSXRlcjog
cHVibGljIEl0ZXJhdG9yIHsKKyAgIHB1YmxpYzoKKyAgICBNb2RlbEl0ZXIoY29uc3QgS1ZNYXAq
IG1hcCwgYm9vbCBvd25lZCkKKyAgICAgICAgOiBtYXBfKG1hcCksIG93bmVkXyhvd25lZCksIGl0
ZXJfKG1hcF8tPmVuZCgpKSB7CisgICAgfQorICAgIH5Nb2RlbEl0ZXIoKSB7CisgICAgICBpZiAo
b3duZWRfKSBkZWxldGUgbWFwXzsKKyAgICB9CisgICAgdmlydHVhbCBib29sIFZhbGlkKCkgY29u
c3QgeyByZXR1cm4gaXRlcl8gIT0gbWFwXy0+ZW5kKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgU2Vl
a1RvRmlyc3QoKSB7IGl0ZXJfID0gbWFwXy0+YmVnaW4oKTsgfQorICAgIHZpcnR1YWwgdm9pZCBT
ZWVrVG9MYXN0KCkgeworICAgICAgaWYgKG1hcF8tPmVtcHR5KCkpIHsKKyAgICAgICAgaXRlcl8g
PSBtYXBfLT5lbmQoKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGl0ZXJfID0gbWFwXy0+Zmlu
ZChtYXBfLT5yYmVnaW4oKS0+Zmlyc3QpOworICAgICAgfQorICAgIH0KKyAgICB2aXJ0dWFsIHZv
aWQgU2Vlayhjb25zdCBTbGljZSYgaykgeworICAgICAgaXRlcl8gPSBtYXBfLT5sb3dlcl9ib3Vu
ZChrLlRvU3RyaW5nKCkpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgTmV4dCgpIHsgKytpdGVy
XzsgfQorICAgIHZpcnR1YWwgdm9pZCBQcmV2KCkgeyAtLWl0ZXJfOyB9CisgICAgdmlydHVhbCBT
bGljZSBrZXkoKSBjb25zdCB7IHJldHVybiBpdGVyXy0+Zmlyc3Q7IH0KKyAgICB2aXJ0dWFsIFNs
aWNlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gaXRlcl8tPnNlY29uZDsgfQorICAgIHZpcnR1YWwg
U3RhdHVzIHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIFN0YXR1czo6T0soKTsgfQorICAgcHJpdmF0
ZToKKyAgICBjb25zdCBLVk1hcCogY29uc3QgbWFwXzsKKyAgICBjb25zdCBib29sIG93bmVkXzsg
IC8vIERvIHdlIG93biBtYXBfCisgICAgS1ZNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXJfOworICB9
OworICBjb25zdCBPcHRpb25zIG9wdGlvbnNfOworICBLVk1hcCBtYXBfOworfTsKKworc3RhdGlj
IHN0ZDo6c3RyaW5nIFJhbmRvbUtleShSYW5kb20qIHJuZCkgeworICBpbnQgbGVuID0gKHJuZC0+
T25lSW4oMykKKyAgICAgICAgICAgICA/IDEgICAgICAgICAgICAgICAgLy8gU2hvcnQgc29tZXRp
bWVzIHRvIGVuY291cmFnZSBjb2xsaXNpb25zCisgICAgICAgICAgICAgOiAocm5kLT5PbmVJbigx
MDApID8gcm5kLT5Ta2V3ZWQoMTApIDogcm5kLT5Vbmlmb3JtKDEwKSkpOworICByZXR1cm4gdGVz
dDo6UmFuZG9tS2V5KHJuZCwgbGVuKTsKK30KKworc3RhdGljIGJvb2wgQ29tcGFyZUl0ZXJhdG9y
cyhpbnQgc3RlcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREIqIG1vZGVsLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBEQiogZGIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFNuYXBzaG90KiBtb2RlbF9zbmFwLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBTbmFwc2hvdCogZGJfc25hcCkgeworICBSZWFkT3B0aW9ucyBvcHRpb25z
OworICBvcHRpb25zLnNuYXBzaG90ID0gbW9kZWxfc25hcDsKKyAgSXRlcmF0b3IqIG1pdGVyID0g
bW9kZWwtPk5ld0l0ZXJhdG9yKG9wdGlvbnMpOworICBvcHRpb25zLnNuYXBzaG90ID0gZGJfc25h
cDsKKyAgSXRlcmF0b3IqIGRiaXRlciA9IGRiLT5OZXdJdGVyYXRvcihvcHRpb25zKTsKKyAgYm9v
bCBvayA9IHRydWU7CisgIGludCBjb3VudCA9IDA7CisgIGZvciAobWl0ZXItPlNlZWtUb0ZpcnN0
KCksIGRiaXRlci0+U2Vla1RvRmlyc3QoKTsKKyAgICAgICBvayAmJiBtaXRlci0+VmFsaWQoKSAm
JiBkYml0ZXItPlZhbGlkKCk7CisgICAgICAgbWl0ZXItPk5leHQoKSwgZGJpdGVyLT5OZXh0KCkp
IHsKKyAgICBjb3VudCsrOworICAgIGlmIChtaXRlci0+a2V5KCkuY29tcGFyZShkYml0ZXItPmtl
eSgpKSAhPSAwKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgInN0ZXAgJWQ6IEtleSBtaXNtYXRj
aDogJyVzJyB2cy4gJyVzJ1xuIiwKKyAgICAgICAgICAgICAgc3RlcCwKKyAgICAgICAgICAgICAg
RXNjYXBlU3RyaW5nKG1pdGVyLT5rZXkoKSkuY19zdHIoKSwKKyAgICAgICAgICAgICAgRXNjYXBl
U3RyaW5nKGRiaXRlci0+a2V5KCkpLmNfc3RyKCkpOworICAgICAgb2sgPSBmYWxzZTsKKyAgICAg
IGJyZWFrOworICAgIH0KKworICAgIGlmIChtaXRlci0+dmFsdWUoKS5jb21wYXJlKGRiaXRlci0+
dmFsdWUoKSkgIT0gMCkgeworICAgICAgZnByaW50ZihzdGRlcnIsICJzdGVwICVkOiBWYWx1ZSBt
aXNtYXRjaCBmb3Iga2V5ICclcyc6ICclcycgdnMuICclcydcbiIsCisgICAgICAgICAgICAgIHN0
ZXAsCisgICAgICAgICAgICAgIEVzY2FwZVN0cmluZyhtaXRlci0+a2V5KCkpLmNfc3RyKCksCisg
ICAgICAgICAgICAgIEVzY2FwZVN0cmluZyhtaXRlci0+dmFsdWUoKSkuY19zdHIoKSwKKyAgICAg
ICAgICAgICAgRXNjYXBlU3RyaW5nKG1pdGVyLT52YWx1ZSgpKS5jX3N0cigpKTsKKyAgICAgIG9r
ID0gZmFsc2U7CisgICAgfQorICB9CisKKyAgaWYgKG9rKSB7CisgICAgaWYgKG1pdGVyLT5WYWxp
ZCgpICE9IGRiaXRlci0+VmFsaWQoKSkgeworICAgICAgZnByaW50ZihzdGRlcnIsICJzdGVwICVk
OiBNaXNtYXRjaCBhdCBlbmQgb2YgaXRlcmF0b3JzOiAlZCB2cy4gJWRcbiIsCisgICAgICAgICAg
ICAgIHN0ZXAsIG1pdGVyLT5WYWxpZCgpLCBkYml0ZXItPlZhbGlkKCkpOworICAgICAgb2sgPSBm
YWxzZTsKKyAgICB9CisgIH0KKyAgZnByaW50ZihzdGRlcnIsICIlZCBlbnRyaWVzIGNvbXBhcmVk
OiBvaz0lZFxuIiwgY291bnQsIG9rKTsKKyAgZGVsZXRlIG1pdGVyOworICBkZWxldGUgZGJpdGVy
OworICByZXR1cm4gb2s7Cit9CisKK1RFU1QoREJUZXN0LCBSYW5kb21pemVkKSB7CisgIFJhbmRv
bSBybmQodGVzdDo6UmFuZG9tU2VlZCgpKTsKKyAgZG8geworICAgIE1vZGVsREIgbW9kZWwoQ3Vy
cmVudE9wdGlvbnMoKSk7CisgICAgY29uc3QgaW50IE4gPSAxMDAwMDsKKyAgICBjb25zdCBTbmFw
c2hvdCogbW9kZWxfc25hcCA9IE5VTEw7CisgICAgY29uc3QgU25hcHNob3QqIGRiX3NuYXAgPSBO
VUxMOworICAgIHN0ZDo6c3RyaW5nIGssIHY7CisgICAgZm9yIChpbnQgc3RlcCA9IDA7IHN0ZXAg
PCBOOyBzdGVwKyspIHsKKyAgICAgIGlmIChzdGVwICUgMTAwID09IDApIHsKKyAgICAgICAgZnBy
aW50ZihzdGRlcnIsICJTdGVwICVkIG9mICVkXG4iLCBzdGVwLCBOKTsKKyAgICAgIH0KKyAgICAg
IC8vIFRPRE8oc2FuamF5KTogVGVzdCBHZXQoKSB3b3JrcworICAgICAgaW50IHAgPSBybmQuVW5p
Zm9ybSgxMDApOworICAgICAgaWYgKHAgPCA0NSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBQdXQKKyAgICAgICAgayA9IFJhbmRvbUtleSgmcm5kKTsKKyAgICAgICAgdiA9IFJh
bmRvbVN0cmluZygmcm5kLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJuZC5PbmVJbigyMCkK
KyAgICAgICAgICAgICAgICAgICAgICAgICA/IDEwMCArIHJuZC5Vbmlmb3JtKDEwMCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICA6IHJuZC5Vbmlmb3JtKDgpKTsKKyAgICAgICAgQVNTRVJUX09L
KG1vZGVsLlB1dChXcml0ZU9wdGlvbnMoKSwgaywgdikpOworICAgICAgICBBU1NFUlRfT0soZGJf
LT5QdXQoV3JpdGVPcHRpb25zKCksIGssIHYpKTsKKworICAgICAgfSBlbHNlIGlmIChwIDwgOTAp
IHsgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWxldGUKKyAgICAgICAgayA9IFJhbmRvbUtl
eSgmcm5kKTsKKyAgICAgICAgQVNTRVJUX09LKG1vZGVsLkRlbGV0ZShXcml0ZU9wdGlvbnMoKSwg
aykpOworICAgICAgICBBU1NFUlRfT0soZGJfLT5EZWxldGUoV3JpdGVPcHRpb25zKCksIGspKTsK
KworCisgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IE11bHRpLWVsZW1lbnQgYmF0Y2gKKyAgICAgICAgV3JpdGVCYXRjaCBiOworICAgICAgICBjb25z
dCBpbnQgbnVtID0gcm5kLlVuaWZvcm0oOCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bnVtOyBpKyspIHsKKyAgICAgICAgICBpZiAoaSA9PSAwIHx8ICFybmQuT25lSW4oMTApKSB7Cisg
ICAgICAgICAgICBrID0gUmFuZG9tS2V5KCZybmQpOworICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAvLyBQZXJpb2RpY2FsbHkgcmUtdXNlIHRoZSBzYW1lIGtleSBmcm9tIHRoZSBwcmV2
aW91cyBpdGVyLCBzbworICAgICAgICAgICAgLy8gd2UgaGF2ZSBtdWx0aXBsZSBlbnRyaWVzIGlu
IHRoZSB3cml0ZSBiYXRjaCBmb3IgdGhlIHNhbWUga2V5CisgICAgICAgICAgfQorICAgICAgICAg
IGlmIChybmQuT25lSW4oMikpIHsKKyAgICAgICAgICAgIHYgPSBSYW5kb21TdHJpbmcoJnJuZCwg
cm5kLlVuaWZvcm0oMTApKTsKKyAgICAgICAgICAgIGIuUHV0KGssIHYpOworICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBiLkRlbGV0ZShrKTsKKyAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgQVNTRVJUX09LKG1vZGVsLldyaXRlKFdyaXRlT3B0aW9ucygpLCAmYikpOworICAg
ICAgICBBU1NFUlRfT0soZGJfLT5Xcml0ZShXcml0ZU9wdGlvbnMoKSwgJmIpKTsKKyAgICAgIH0K
KworICAgICAgaWYgKChzdGVwICUgMTAwKSA9PSAwKSB7CisgICAgICAgIEFTU0VSVF9UUlVFKENv
bXBhcmVJdGVyYXRvcnMoc3RlcCwgJm1vZGVsLCBkYl8sIE5VTEwsIE5VTEwpKTsKKyAgICAgICAg
QVNTRVJUX1RSVUUoQ29tcGFyZUl0ZXJhdG9ycyhzdGVwLCAmbW9kZWwsIGRiXywgbW9kZWxfc25h
cCwgZGJfc25hcCkpOworICAgICAgICAvLyBTYXZlIGEgc25hcHNob3QgZnJvbSBlYWNoIERCIHRo
aXMgdGltZSB0aGF0IHdlJ2xsIHVzZSBuZXh0CisgICAgICAgIC8vIHRpbWUgd2UgY29tcGFyZSB0
aGluZ3MsIHRvIG1ha2Ugc3VyZSB0aGUgY3VycmVudCBzdGF0ZSBpcworICAgICAgICAvLyBwcmVz
ZXJ2ZWQgd2l0aCB0aGUgc25hcHNob3QKKyAgICAgICAgaWYgKG1vZGVsX3NuYXAgIT0gTlVMTCkg
bW9kZWwuUmVsZWFzZVNuYXBzaG90KG1vZGVsX3NuYXApOworICAgICAgICBpZiAoZGJfc25hcCAh
PSBOVUxMKSBkYl8tPlJlbGVhc2VTbmFwc2hvdChkYl9zbmFwKTsKKworICAgICAgICBSZW9wZW4o
KTsKKyAgICAgICAgQVNTRVJUX1RSVUUoQ29tcGFyZUl0ZXJhdG9ycyhzdGVwLCAmbW9kZWwsIGRi
XywgTlVMTCwgTlVMTCkpOworCisgICAgICAgIG1vZGVsX3NuYXAgPSBtb2RlbC5HZXRTbmFwc2hv
dCgpOworICAgICAgICBkYl9zbmFwID0gZGJfLT5HZXRTbmFwc2hvdCgpOworICAgICAgfQorICAg
IH0KKyAgICBpZiAobW9kZWxfc25hcCAhPSBOVUxMKSBtb2RlbC5SZWxlYXNlU25hcHNob3QobW9k
ZWxfc25hcCk7CisgICAgaWYgKGRiX3NuYXAgIT0gTlVMTCkgZGJfLT5SZWxlYXNlU25hcHNob3Qo
ZGJfc25hcCk7CisgIH0gd2hpbGUgKENoYW5nZU9wdGlvbnMoKSk7Cit9CisKK3N0ZDo6c3RyaW5n
IE1ha2VLZXkodW5zaWduZWQgaW50IG51bSkgeworICBjaGFyIGJ1ZlszMF07CisgIHNucHJpbnRm
KGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlMDE2dSIsIG51bSk7CisgIHJldHVybiBzdGQ6OnN0cmluZyhi
dWYpOworfQorCit2b2lkIEJNX0xvZ0FuZEFwcGx5KGludCBpdGVycywgaW50IG51bV9iYXNlX2Zp
bGVzKSB7CisgIHN0ZDo6c3RyaW5nIGRibmFtZSA9IHRlc3Q6OlRtcERpcigpICsgIi9sZXZlbGRi
X3Rlc3RfYmVuY2htYXJrIjsKKyAgRGVzdHJveURCKGRibmFtZSwgT3B0aW9ucygpKTsKKworICBE
QiogZGIgPSBOVUxMOworICBPcHRpb25zIG9wdHM7CisgIG9wdHMuY3JlYXRlX2lmX21pc3Npbmcg
PSB0cnVlOworICBTdGF0dXMgcyA9IERCOjpPcGVuKG9wdHMsIGRibmFtZSwgJmRiKTsKKyAgQVNT
RVJUX09LKHMpOworICBBU1NFUlRfVFJVRShkYiAhPSBOVUxMKTsKKworICBkZWxldGUgZGI7Cisg
IGRiID0gTlVMTDsKKworICBFbnYqIGVudiA9IEVudjo6RGVmYXVsdCgpOworCisgIHBvcnQ6Ok11
dGV4IG11OworICBNdXRleExvY2sgbCgmbXUpOworCisgIEludGVybmFsS2V5Q29tcGFyYXRvciBj
bXAoQnl0ZXdpc2VDb21wYXJhdG9yKCkpOworICBPcHRpb25zIG9wdGlvbnM7CisgIFZlcnNpb25T
ZXQgdnNldChkYm5hbWUsICZvcHRpb25zLCBOVUxMLCAmY21wKTsKKyAgQVNTRVJUX09LKHZzZXQu
UmVjb3ZlcigpKTsKKyAgVmVyc2lvbkVkaXQgdmJhc2U7CisgIHVpbnQ2NF90IGZudW0gPSAxOwor
ICBmb3IgKGludCBpID0gMDsgaSA8IG51bV9iYXNlX2ZpbGVzOyBpKyspIHsKKyAgICBJbnRlcm5h
bEtleSBzdGFydChNYWtlS2V5KDIqZm51bSksIDEsIGtUeXBlVmFsdWUpOworICAgIEludGVybmFs
S2V5IGxpbWl0KE1ha2VLZXkoMipmbnVtKzEpLCAxLCBrVHlwZURlbGV0aW9uKTsKKyAgICB2YmFz
ZS5BZGRGaWxlKDIsIGZudW0rKywgMSAvKiBmaWxlIHNpemUgKi8sIHN0YXJ0LCBsaW1pdCk7Cisg
IH0KKyAgQVNTRVJUX09LKHZzZXQuTG9nQW5kQXBwbHkoJnZiYXNlLCAmbXUpKTsKKworICB1aW50
NjRfdCBzdGFydF9taWNyb3MgPSBlbnYtPk5vd01pY3JvcygpOworCisgIGZvciAoaW50IGkgPSAw
OyBpIDwgaXRlcnM7IGkrKykgeworICAgIFZlcnNpb25FZGl0IHZlZGl0OworICAgIHZlZGl0LkRl
bGV0ZUZpbGUoMiwgZm51bSk7CisgICAgSW50ZXJuYWxLZXkgc3RhcnQoTWFrZUtleSgyKmZudW0p
LCAxLCBrVHlwZVZhbHVlKTsKKyAgICBJbnRlcm5hbEtleSBsaW1pdChNYWtlS2V5KDIqZm51bSsx
KSwgMSwga1R5cGVEZWxldGlvbik7CisgICAgdmVkaXQuQWRkRmlsZSgyLCBmbnVtKyssIDEgLyog
ZmlsZSBzaXplICovLCBzdGFydCwgbGltaXQpOworICAgIHZzZXQuTG9nQW5kQXBwbHkoJnZlZGl0
LCAmbXUpOworICB9CisgIHVpbnQ2NF90IHN0b3BfbWljcm9zID0gZW52LT5Ob3dNaWNyb3MoKTsK
KyAgdW5zaWduZWQgaW50IHVzID0gc3RvcF9taWNyb3MgLSBzdGFydF9taWNyb3M7CisgIGNoYXIg
YnVmWzE2XTsKKyAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVkIiwgbnVtX2Jhc2VfZmls
ZXMpOworICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAiQk1fTG9nQW5kQXBwbHkvJS02cyAg
ICU4ZCBpdGVycyA6ICU5dSB1cyAoJTcuMGYgdXMgLyBpdGVyKVxuIiwKKyAgICAgICAgICBidWYs
IGl0ZXJzLCB1cywgKChmbG9hdCl1cykgLyBpdGVycyk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBs
ZXZlbGRiCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikgeworICBpZiAoYXJnYyA+
IDEgJiYgc3RkOjpzdHJpbmcoYXJndlsxXSkgPT0gIi0tYmVuY2htYXJrIikgeworICAgIGxldmVs
ZGI6OkJNX0xvZ0FuZEFwcGx5KDEwMDAsIDEpOworICAgIGxldmVsZGI6OkJNX0xvZ0FuZEFwcGx5
KDEwMDAsIDEwMCk7CisgICAgbGV2ZWxkYjo6Qk1fTG9nQW5kQXBwbHkoMTAwMCwgMTAwMDApOwor
ICAgIGxldmVsZGI6OkJNX0xvZ0FuZEFwcGx5KDEwMCwgMTAwMDAwKTsKKyAgICByZXR1cm4gMDsK
KyAgfQorCisgIHJldHVybiBsZXZlbGRiOjp0ZXN0OjpSdW5BbGxUZXN0cygpOworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9kYmZvcm1hdC5jYyBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xldmVsZGIvZGIvZGJmb3JtYXQuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjhlMTFiMzk4ZDAz
YmY4NTVjYzIzMjAzMGU0MDZlOTBmYTM1YzU0NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xldmVsZGIvZGIvZGJmb3JtYXQuY2MKQEAgLTAsMCArMSwxNDAgQEAKKy8vIENv
cHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRo
ZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2luY2x1ZGUgPHN0
ZGlvLmg+CisjaW5jbHVkZSAiZGIvZGJmb3JtYXQuaCIKKyNpbmNsdWRlICJwb3J0L3BvcnQuaCIK
KyNpbmNsdWRlICJ1dGlsL2NvZGluZy5oIgorCituYW1lc3BhY2UgbGV2ZWxkYiB7CisKK3N0YXRp
YyB1aW50NjRfdCBQYWNrU2VxdWVuY2VBbmRUeXBlKHVpbnQ2NF90IHNlcSwgVmFsdWVUeXBlIHQp
IHsKKyAgYXNzZXJ0KHNlcSA8PSBrTWF4U2VxdWVuY2VOdW1iZXIpOworICBhc3NlcnQodCA8PSBr
VmFsdWVUeXBlRm9yU2Vlayk7CisgIHJldHVybiAoc2VxIDw8IDgpIHwgdDsKK30KKwordm9pZCBB
cHBlbmRJbnRlcm5hbEtleShzdGQ6OnN0cmluZyogcmVzdWx0LCBjb25zdCBQYXJzZWRJbnRlcm5h
bEtleSYga2V5KSB7CisgIHJlc3VsdC0+YXBwZW5kKGtleS51c2VyX2tleS5kYXRhKCksIGtleS51
c2VyX2tleS5zaXplKCkpOworICBQdXRGaXhlZDY0KHJlc3VsdCwgUGFja1NlcXVlbmNlQW5kVHlw
ZShrZXkuc2VxdWVuY2UsIGtleS50eXBlKSk7Cit9CisKK3N0ZDo6c3RyaW5nIFBhcnNlZEludGVy
bmFsS2V5OjpEZWJ1Z1N0cmluZygpIGNvbnN0IHsKKyAgY2hhciBidWZbNTBdOworICBzbnByaW50
ZihidWYsIHNpemVvZihidWYpLCAiJyBAICVsbHUgOiAlZCIsCisgICAgICAgICAgICh1bnNpZ25l
ZCBsb25nIGxvbmcpIHNlcXVlbmNlLAorICAgICAgICAgICBpbnQodHlwZSkpOworICBzdGQ6OnN0
cmluZyByZXN1bHQgPSAiJyI7CisgIHJlc3VsdCArPSB1c2VyX2tleS5Ub1N0cmluZygpOworICBy
ZXN1bHQgKz0gYnVmOworICByZXR1cm4gcmVzdWx0OworfQorCitzdGQ6OnN0cmluZyBJbnRlcm5h
bEtleTo6RGVidWdTdHJpbmcoKSBjb25zdCB7CisgIHN0ZDo6c3RyaW5nIHJlc3VsdDsKKyAgUGFy
c2VkSW50ZXJuYWxLZXkgcGFyc2VkOworICBpZiAoUGFyc2VJbnRlcm5hbEtleShyZXBfLCAmcGFy
c2VkKSkgeworICAgIHJlc3VsdCA9IHBhcnNlZC5EZWJ1Z1N0cmluZygpOworICB9IGVsc2Ugewor
ICAgIHJlc3VsdCA9ICIoYmFkKSI7CisgICAgcmVzdWx0LmFwcGVuZChFc2NhcGVTdHJpbmcocmVw
XykpOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKK2NvbnN0IGNoYXIqIEludGVybmFsS2V5
Q29tcGFyYXRvcjo6TmFtZSgpIGNvbnN0IHsKKyAgcmV0dXJuICJsZXZlbGRiLkludGVybmFsS2V5
Q29tcGFyYXRvciI7Cit9CisKK2ludCBJbnRlcm5hbEtleUNvbXBhcmF0b3I6OkNvbXBhcmUoY29u
c3QgU2xpY2UmIGFrZXksIGNvbnN0IFNsaWNlJiBia2V5KSBjb25zdCB7CisgIC8vIE9yZGVyIGJ5
OgorICAvLyAgICBpbmNyZWFzaW5nIHVzZXIga2V5IChhY2NvcmRpbmcgdG8gdXNlci1zdXBwbGll
ZCBjb21wYXJhdG9yKQorICAvLyAgICBkZWNyZWFzaW5nIHNlcXVlbmNlIG51bWJlcgorICAvLyAg
ICBkZWNyZWFzaW5nIHR5cGUgKHRob3VnaCBzZXF1ZW5jZSMgc2hvdWxkIGJlIGVub3VnaCB0byBk
aXNhbWJpZ3VhdGUpCisgIGludCByID0gdXNlcl9jb21wYXJhdG9yXy0+Q29tcGFyZShFeHRyYWN0
VXNlcktleShha2V5KSwgRXh0cmFjdFVzZXJLZXkoYmtleSkpOworICBpZiAociA9PSAwKSB7Cisg
ICAgY29uc3QgdWludDY0X3QgYW51bSA9IERlY29kZUZpeGVkNjQoYWtleS5kYXRhKCkgKyBha2V5
LnNpemUoKSAtIDgpOworICAgIGNvbnN0IHVpbnQ2NF90IGJudW0gPSBEZWNvZGVGaXhlZDY0KGJr
ZXkuZGF0YSgpICsgYmtleS5zaXplKCkgLSA4KTsKKyAgICBpZiAoYW51bSA+IGJudW0pIHsKKyAg
ICAgIHIgPSAtMTsKKyAgICB9IGVsc2UgaWYgKGFudW0gPCBibnVtKSB7CisgICAgICByID0gKzE7
CisgICAgfQorICB9CisgIHJldHVybiByOworfQorCit2b2lkIEludGVybmFsS2V5Q29tcGFyYXRv
cjo6RmluZFNob3J0ZXN0U2VwYXJhdG9yKAorICAgICAgc3RkOjpzdHJpbmcqIHN0YXJ0LAorICAg
ICAgY29uc3QgU2xpY2UmIGxpbWl0KSBjb25zdCB7CisgIC8vIEF0dGVtcHQgdG8gc2hvcnRlbiB0
aGUgdXNlciBwb3J0aW9uIG9mIHRoZSBrZXkKKyAgU2xpY2UgdXNlcl9zdGFydCA9IEV4dHJhY3RV
c2VyS2V5KCpzdGFydCk7CisgIFNsaWNlIHVzZXJfbGltaXQgPSBFeHRyYWN0VXNlcktleShsaW1p
dCk7CisgIHN0ZDo6c3RyaW5nIHRtcCh1c2VyX3N0YXJ0LmRhdGEoKSwgdXNlcl9zdGFydC5zaXpl
KCkpOworICB1c2VyX2NvbXBhcmF0b3JfLT5GaW5kU2hvcnRlc3RTZXBhcmF0b3IoJnRtcCwgdXNl
cl9saW1pdCk7CisgIGlmICh0bXAuc2l6ZSgpIDwgdXNlcl9zdGFydC5zaXplKCkgJiYKKyAgICAg
IHVzZXJfY29tcGFyYXRvcl8tPkNvbXBhcmUodXNlcl9zdGFydCwgdG1wKSA8IDApIHsKKyAgICAv
LyBVc2VyIGtleSBoYXMgYmVjb21lIHNob3J0ZXIgcGh5c2ljYWxseSwgYnV0IGxhcmdlciBsb2dp
Y2FsbHkuCisgICAgLy8gVGFjayBvbiB0aGUgZWFybGllc3QgcG9zc2libGUgbnVtYmVyIHRvIHRo
ZSBzaG9ydGVuZWQgdXNlciBrZXkuCisgICAgUHV0Rml4ZWQ2NCgmdG1wLCBQYWNrU2VxdWVuY2VB
bmRUeXBlKGtNYXhTZXF1ZW5jZU51bWJlcixrVmFsdWVUeXBlRm9yU2VlaykpOworICAgIGFzc2Vy
dCh0aGlzLT5Db21wYXJlKCpzdGFydCwgdG1wKSA8IDApOworICAgIGFzc2VydCh0aGlzLT5Db21w
YXJlKHRtcCwgbGltaXQpIDwgMCk7CisgICAgc3RhcnQtPnN3YXAodG1wKTsKKyAgfQorfQorCit2
b2lkIEludGVybmFsS2V5Q29tcGFyYXRvcjo6RmluZFNob3J0U3VjY2Vzc29yKHN0ZDo6c3RyaW5n
KiBrZXkpIGNvbnN0IHsKKyAgU2xpY2UgdXNlcl9rZXkgPSBFeHRyYWN0VXNlcktleSgqa2V5KTsK
KyAgc3RkOjpzdHJpbmcgdG1wKHVzZXJfa2V5LmRhdGEoKSwgdXNlcl9rZXkuc2l6ZSgpKTsKKyAg
dXNlcl9jb21wYXJhdG9yXy0+RmluZFNob3J0U3VjY2Vzc29yKCZ0bXApOworICBpZiAodG1wLnNp
emUoKSA8IHVzZXJfa2V5LnNpemUoKSAmJgorICAgICAgdXNlcl9jb21wYXJhdG9yXy0+Q29tcGFy
ZSh1c2VyX2tleSwgdG1wKSA8IDApIHsKKyAgICAvLyBVc2VyIGtleSBoYXMgYmVjb21lIHNob3J0
ZXIgcGh5c2ljYWxseSwgYnV0IGxhcmdlciBsb2dpY2FsbHkuCisgICAgLy8gVGFjayBvbiB0aGUg
ZWFybGllc3QgcG9zc2libGUgbnVtYmVyIHRvIHRoZSBzaG9ydGVuZWQgdXNlciBrZXkuCisgICAg
UHV0Rml4ZWQ2NCgmdG1wLCBQYWNrU2VxdWVuY2VBbmRUeXBlKGtNYXhTZXF1ZW5jZU51bWJlcixr
VmFsdWVUeXBlRm9yU2VlaykpOworICAgIGFzc2VydCh0aGlzLT5Db21wYXJlKCprZXksIHRtcCkg
PCAwKTsKKyAgICBrZXktPnN3YXAodG1wKTsKKyAgfQorfQorCitjb25zdCBjaGFyKiBJbnRlcm5h
bEZpbHRlclBvbGljeTo6TmFtZSgpIGNvbnN0IHsKKyAgcmV0dXJuIHVzZXJfcG9saWN5Xy0+TmFt
ZSgpOworfQorCit2b2lkIEludGVybmFsRmlsdGVyUG9saWN5OjpDcmVhdGVGaWx0ZXIoY29uc3Qg
U2xpY2UqIGtleXMsIGludCBuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ZDo6c3RyaW5nKiBkc3QpIGNvbnN0IHsKKyAgLy8gV2UgcmVseSBvbiB0aGUgZmFjdCB0
aGF0IHRoZSBjb2RlIGluIHRhYmxlLmNjIGRvZXMgbm90IG1pbmQgdXMKKyAgLy8gYWRqdXN0aW5n
IGtleXNbXS4KKyAgU2xpY2UqIG1rZXkgPSBjb25zdF9jYXN0PFNsaWNlKj4oa2V5cyk7CisgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgbWtleVtpXSA9IEV4dHJhY3RVc2VyS2V5
KGtleXNbaV0pOworICAgIC8vIFRPRE8oc2FuamF5KTogU3VwcHJlc3MgZHVwcz8KKyAgfQorICB1
c2VyX3BvbGljeV8tPkNyZWF0ZUZpbHRlcihrZXlzLCBuLCBkc3QpOworfQorCitib29sIEludGVy
bmFsRmlsdGVyUG9saWN5OjpLZXlNYXlNYXRjaChjb25zdCBTbGljZSYga2V5LCBjb25zdCBTbGlj
ZSYgZikgY29uc3QgeworICByZXR1cm4gdXNlcl9wb2xpY3lfLT5LZXlNYXlNYXRjaChFeHRyYWN0
VXNlcktleShrZXkpLCBmKTsKK30KKworTG9va3VwS2V5OjpMb29rdXBLZXkoY29uc3QgU2xpY2Um
IHVzZXJfa2V5LCBTZXF1ZW5jZU51bWJlciBzKSB7CisgIHNpemVfdCB1c2l6ZSA9IHVzZXJfa2V5
LnNpemUoKTsKKyAgc2l6ZV90IG5lZWRlZCA9IHVzaXplICsgMTM7ICAvLyBBIGNvbnNlcnZhdGl2
ZSBlc3RpbWF0ZQorICBjaGFyKiBkc3Q7CisgIGlmIChuZWVkZWQgPD0gc2l6ZW9mKHNwYWNlXykp
IHsKKyAgICBkc3QgPSBzcGFjZV87CisgIH0gZWxzZSB7CisgICAgZHN0ID0gbmV3IGNoYXJbbmVl
ZGVkXTsKKyAgfQorICBzdGFydF8gPSBkc3Q7CisgIGRzdCA9IEVuY29kZVZhcmludDMyKGRzdCwg
dXNpemUgKyA4KTsKKyAga3N0YXJ0XyA9IGRzdDsKKyAgbWVtY3B5KGRzdCwgdXNlcl9rZXkuZGF0
YSgpLCB1c2l6ZSk7CisgIGRzdCArPSB1c2l6ZTsKKyAgRW5jb2RlRml4ZWQ2NChkc3QsIFBhY2tT
ZXF1ZW5jZUFuZFR5cGUocywga1ZhbHVlVHlwZUZvclNlZWspKTsKKyAgZHN0ICs9IDg7CisgIGVu
ZF8gPSBkc3Q7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBsZXZlbGRiCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2RiZm9ybWF0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
ZXZlbGRiL2RiL2RiZm9ybWF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjdmNjRkYWZiNmQ1YjNkNjc2ZWNkZTlk
MGZjODZhYjI5NDJiMjQ5NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xl
dmVsZGIvZGIvZGJmb3JtYXQuaApAQCAtMCwwICsxLDIyNyBAQAorLy8gQ29weXJpZ2h0IChjKSAy
MDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmls
ZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgorCisjaWZuZGVmIFNUT1JBR0VfTEVWRUxEQl9E
Ql9GT1JNQVRfSF8KKyNkZWZpbmUgU1RPUkFHRV9MRVZFTERCX0RCX0ZPUk1BVF9IXworCisjaW5j
bHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJsZXZlbGRiL2NvbXBhcmF0b3IuaCIKKyNpbmNsdWRl
ICJsZXZlbGRiL2RiLmgiCisjaW5jbHVkZSAibGV2ZWxkYi9maWx0ZXJfcG9saWN5LmgiCisjaW5j
bHVkZSAibGV2ZWxkYi9zbGljZS5oIgorI2luY2x1ZGUgImxldmVsZGIvdGFibGVfYnVpbGRlci5o
IgorI2luY2x1ZGUgInV0aWwvY29kaW5nLmgiCisjaW5jbHVkZSAidXRpbC9sb2dnaW5nLmgiCisK
K25hbWVzcGFjZSBsZXZlbGRiIHsKKworLy8gR3JvdXBpbmcgb2YgY29uc3RhbnRzLiAgV2UgbWF5
IHdhbnQgdG8gbWFrZSBzb21lIG9mIHRoZXNlCisvLyBwYXJhbWV0ZXJzIHNldCB2aWEgb3B0aW9u
cy4KK25hbWVzcGFjZSBjb25maWcgeworc3RhdGljIGNvbnN0IGludCBrTnVtTGV2ZWxzID0gNzsK
KworLy8gTGV2ZWwtMCBjb21wYWN0aW9uIGlzIHN0YXJ0ZWQgd2hlbiB3ZSBoaXQgdGhpcyBtYW55
IGZpbGVzLgorc3RhdGljIGNvbnN0IGludCBrTDBfQ29tcGFjdGlvblRyaWdnZXIgPSA0OworCisv
LyBTb2Z0IGxpbWl0IG9uIG51bWJlciBvZiBsZXZlbC0wIGZpbGVzLiAgV2Ugc2xvdyBkb3duIHdy
aXRlcyBhdCB0aGlzIHBvaW50Lgorc3RhdGljIGNvbnN0IGludCBrTDBfU2xvd2Rvd25Xcml0ZXNU
cmlnZ2VyID0gODsKKworLy8gTWF4aW11bSBudW1iZXIgb2YgbGV2ZWwtMCBmaWxlcy4gIFdlIHN0
b3Agd3JpdGVzIGF0IHRoaXMgcG9pbnQuCitzdGF0aWMgY29uc3QgaW50IGtMMF9TdG9wV3JpdGVz
VHJpZ2dlciA9IDEyOworCisvLyBNYXhpbXVtIGxldmVsIHRvIHdoaWNoIGEgbmV3IGNvbXBhY3Rl
ZCBtZW10YWJsZSBpcyBwdXNoZWQgaWYgaXQKKy8vIGRvZXMgbm90IGNyZWF0ZSBvdmVybGFwLiAg
V2UgdHJ5IHRvIHB1c2ggdG8gbGV2ZWwgMiB0byBhdm9pZCB0aGUKKy8vIHJlbGF0aXZlbHkgZXhw
ZW5zaXZlIGxldmVsIDA9PjEgY29tcGFjdGlvbnMgYW5kIHRvIGF2b2lkIHNvbWUKKy8vIGV4cGVu
c2l2ZSBtYW5pZmVzdCBmaWxlIG9wZXJhdGlvbnMuICBXZSBkbyBub3QgcHVzaCBhbGwgdGhlIHdh
eSB0bworLy8gdGhlIGxhcmdlc3QgbGV2ZWwgc2luY2UgdGhhdCBjYW4gZ2VuZXJhdGUgYSBsb3Qg
b2Ygd2FzdGVkIGRpc2sKKy8vIHNwYWNlIGlmIHRoZSBzYW1lIGtleSBzcGFjZSBpcyBiZWluZyBy
ZXBlYXRlZGx5IG92ZXJ3cml0dGVuLgorc3RhdGljIGNvbnN0IGludCBrTWF4TWVtQ29tcGFjdExl
dmVsID0gMjsKKworfSAgLy8gbmFtZXNwYWNlIGNvbmZpZworCitjbGFzcyBJbnRlcm5hbEtleTsK
KworLy8gVmFsdWUgdHlwZXMgZW5jb2RlZCBhcyB0aGUgbGFzdCBjb21wb25lbnQgb2YgaW50ZXJu
YWwga2V5cy4KKy8vIERPIE5PVCBDSEFOR0UgVEhFU0UgRU5VTSBWQUxVRVM6IHRoZXkgYXJlIGVt
YmVkZGVkIGluIHRoZSBvbi1kaXNrCisvLyBkYXRhIHN0cnVjdHVyZXMuCitlbnVtIFZhbHVlVHlw
ZSB7CisgIGtUeXBlRGVsZXRpb24gPSAweDAsCisgIGtUeXBlVmFsdWUgPSAweDEKK307CisvLyBr
VmFsdWVUeXBlRm9yU2VlayBkZWZpbmVzIHRoZSBWYWx1ZVR5cGUgdGhhdCBzaG91bGQgYmUgcGFz
c2VkIHdoZW4KKy8vIGNvbnN0cnVjdGluZyBhIFBhcnNlZEludGVybmFsS2V5IG9iamVjdCBmb3Ig
c2Vla2luZyB0byBhIHBhcnRpY3VsYXIKKy8vIHNlcXVlbmNlIG51bWJlciAoc2luY2Ugd2Ugc29y
dCBzZXF1ZW5jZSBudW1iZXJzIGluIGRlY3JlYXNpbmcgb3JkZXIKKy8vIGFuZCB0aGUgdmFsdWUg
dHlwZSBpcyBlbWJlZGRlZCBhcyB0aGUgbG93IDggYml0cyBpbiB0aGUgc2VxdWVuY2UKKy8vIG51
bWJlciBpbiBpbnRlcm5hbCBrZXlzLCB3ZSBuZWVkIHRvIHVzZSB0aGUgaGlnaGVzdC1udW1iZXJl
ZAorLy8gVmFsdWVUeXBlLCBub3QgdGhlIGxvd2VzdCkuCitzdGF0aWMgY29uc3QgVmFsdWVUeXBl
IGtWYWx1ZVR5cGVGb3JTZWVrID0ga1R5cGVWYWx1ZTsKKwordHlwZWRlZiB1aW50NjRfdCBTZXF1
ZW5jZU51bWJlcjsKKworLy8gV2UgbGVhdmUgZWlnaHQgYml0cyBlbXB0eSBhdCB0aGUgYm90dG9t
IHNvIGEgdHlwZSBhbmQgc2VxdWVuY2UjCisvLyBjYW4gYmUgcGFja2VkIHRvZ2V0aGVyIGludG8g
NjQtYml0cy4KK3N0YXRpYyBjb25zdCBTZXF1ZW5jZU51bWJlciBrTWF4U2VxdWVuY2VOdW1iZXIg
PQorICAgICgoMHgxdWxsIDw8IDU2KSAtIDEpOworCitzdHJ1Y3QgUGFyc2VkSW50ZXJuYWxLZXkg
eworICBTbGljZSB1c2VyX2tleTsKKyAgU2VxdWVuY2VOdW1iZXIgc2VxdWVuY2U7CisgIFZhbHVl
VHlwZSB0eXBlOworCisgIFBhcnNlZEludGVybmFsS2V5KCkgeyB9ICAvLyBJbnRlbnRpb25hbGx5
IGxlZnQgdW5pbml0aWFsaXplZCAoZm9yIHNwZWVkKQorICBQYXJzZWRJbnRlcm5hbEtleShjb25z
dCBTbGljZSYgdSwgY29uc3QgU2VxdWVuY2VOdW1iZXImIHNlcSwgVmFsdWVUeXBlIHQpCisgICAg
ICA6IHVzZXJfa2V5KHUpLCBzZXF1ZW5jZShzZXEpLCB0eXBlKHQpIHsgfQorICBzdGQ6OnN0cmlu
ZyBEZWJ1Z1N0cmluZygpIGNvbnN0OworfTsKKworLy8gUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhl
IGVuY29kaW5nIG9mICJrZXkiLgoraW5saW5lIHNpemVfdCBJbnRlcm5hbEtleUVuY29kaW5nTGVu
Z3RoKGNvbnN0IFBhcnNlZEludGVybmFsS2V5JiBrZXkpIHsKKyAgcmV0dXJuIGtleS51c2VyX2tl
eS5zaXplKCkgKyA4OworfQorCisvLyBBcHBlbmQgdGhlIHNlcmlhbGl6YXRpb24gb2YgImtleSIg
dG8gKnJlc3VsdC4KK2V4dGVybiB2b2lkIEFwcGVuZEludGVybmFsS2V5KHN0ZDo6c3RyaW5nKiBy
ZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQYXJzZWRJbnRlcm5h
bEtleSYga2V5KTsKKworLy8gQXR0ZW1wdCB0byBwYXJzZSBhbiBpbnRlcm5hbCBrZXkgZnJvbSAi
aW50ZXJuYWxfa2V5Ii4gIE9uIHN1Y2Nlc3MsCisvLyBzdG9yZXMgdGhlIHBhcnNlZCBkYXRhIGlu
ICIqcmVzdWx0IiwgYW5kIHJldHVybnMgdHJ1ZS4KKy8vCisvLyBPbiBlcnJvciwgcmV0dXJucyBm
YWxzZSwgbGVhdmVzICIqcmVzdWx0IiBpbiBhbiB1bmRlZmluZWQgc3RhdGUuCitleHRlcm4gYm9v
bCBQYXJzZUludGVybmFsS2V5KGNvbnN0IFNsaWNlJiBpbnRlcm5hbF9rZXksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFBhcnNlZEludGVybmFsS2V5KiByZXN1bHQpOworCisvLyBSZXR1
cm5zIHRoZSB1c2VyIGtleSBwb3J0aW9uIG9mIGFuIGludGVybmFsIGtleS4KK2lubGluZSBTbGlj
ZSBFeHRyYWN0VXNlcktleShjb25zdCBTbGljZSYgaW50ZXJuYWxfa2V5KSB7CisgIGFzc2VydChp
bnRlcm5hbF9rZXkuc2l6ZSgpID49IDgpOworICByZXR1cm4gU2xpY2UoaW50ZXJuYWxfa2V5LmRh
dGEoKSwgaW50ZXJuYWxfa2V5LnNpemUoKSAtIDgpOworfQorCitpbmxpbmUgVmFsdWVUeXBlIEV4
dHJhY3RWYWx1ZVR5cGUoY29uc3QgU2xpY2UmIGludGVybmFsX2tleSkgeworICBhc3NlcnQoaW50
ZXJuYWxfa2V5LnNpemUoKSA+PSA4KTsKKyAgY29uc3Qgc2l6ZV90IG4gPSBpbnRlcm5hbF9rZXku
c2l6ZSgpOworICB1aW50NjRfdCBudW0gPSBEZWNvZGVGaXhlZDY0KGludGVybmFsX2tleS5kYXRh
KCkgKyBuIC0gOCk7CisgIHVuc2lnbmVkIGNoYXIgYyA9IG51bSAmIDB4ZmY7CisgIHJldHVybiBz
dGF0aWNfY2FzdDxWYWx1ZVR5cGU+KGMpOworfQorCisvLyBBIGNvbXBhcmF0b3IgZm9yIGludGVy
bmFsIGtleXMgdGhhdCB1c2VzIGEgc3BlY2lmaWVkIGNvbXBhcmF0b3IgZm9yCisvLyB0aGUgdXNl
ciBrZXkgcG9ydGlvbiBhbmQgYnJlYWtzIHRpZXMgYnkgZGVjcmVhc2luZyBzZXF1ZW5jZSBudW1i
ZXIuCitjbGFzcyBJbnRlcm5hbEtleUNvbXBhcmF0b3IgOiBwdWJsaWMgQ29tcGFyYXRvciB7Cisg
cHJpdmF0ZToKKyAgY29uc3QgQ29tcGFyYXRvciogdXNlcl9jb21wYXJhdG9yXzsKKyBwdWJsaWM6
CisgIGV4cGxpY2l0IEludGVybmFsS2V5Q29tcGFyYXRvcihjb25zdCBDb21wYXJhdG9yKiBjKSA6
IHVzZXJfY29tcGFyYXRvcl8oYykgeyB9CisgIHZpcnR1YWwgY29uc3QgY2hhciogTmFtZSgpIGNv
bnN0OworICB2aXJ0dWFsIGludCBDb21wYXJlKGNvbnN0IFNsaWNlJiBhLCBjb25zdCBTbGljZSYg
YikgY29uc3Q7CisgIHZpcnR1YWwgdm9pZCBGaW5kU2hvcnRlc3RTZXBhcmF0b3IoCisgICAgICBz
dGQ6OnN0cmluZyogc3RhcnQsCisgICAgICBjb25zdCBTbGljZSYgbGltaXQpIGNvbnN0OworICB2
aXJ0dWFsIHZvaWQgRmluZFNob3J0U3VjY2Vzc29yKHN0ZDo6c3RyaW5nKiBrZXkpIGNvbnN0Owor
CisgIGNvbnN0IENvbXBhcmF0b3IqIHVzZXJfY29tcGFyYXRvcigpIGNvbnN0IHsgcmV0dXJuIHVz
ZXJfY29tcGFyYXRvcl87IH0KKworICBpbnQgQ29tcGFyZShjb25zdCBJbnRlcm5hbEtleSYgYSwg
Y29uc3QgSW50ZXJuYWxLZXkmIGIpIGNvbnN0OworfTsKKworLy8gRmlsdGVyIHBvbGljeSB3cmFw
cGVyIHRoYXQgY29udmVydHMgZnJvbSBpbnRlcm5hbCBrZXlzIHRvIHVzZXIga2V5cworY2xhc3Mg
SW50ZXJuYWxGaWx0ZXJQb2xpY3kgOiBwdWJsaWMgRmlsdGVyUG9saWN5IHsKKyBwcml2YXRlOgor
ICBjb25zdCBGaWx0ZXJQb2xpY3kqIGNvbnN0IHVzZXJfcG9saWN5XzsKKyBwdWJsaWM6CisgIGV4
cGxpY2l0IEludGVybmFsRmlsdGVyUG9saWN5KGNvbnN0IEZpbHRlclBvbGljeSogcCkgOiB1c2Vy
X3BvbGljeV8ocCkgeyB9CisgIHZpcnR1YWwgY29uc3QgY2hhciogTmFtZSgpIGNvbnN0OworICB2
aXJ0dWFsIHZvaWQgQ3JlYXRlRmlsdGVyKGNvbnN0IFNsaWNlKiBrZXlzLCBpbnQgbiwgc3RkOjpz
dHJpbmcqIGRzdCkgY29uc3Q7CisgIHZpcnR1YWwgYm9vbCBLZXlNYXlNYXRjaChjb25zdCBTbGlj
ZSYga2V5LCBjb25zdCBTbGljZSYgZmlsdGVyKSBjb25zdDsKK307CisKKy8vIE1vZHVsZXMgaW4g
dGhpcyBkaXJlY3Rvcnkgc2hvdWxkIGtlZXAgaW50ZXJuYWwga2V5cyB3cmFwcGVkIGluc2lkZQor
Ly8gdGhlIGZvbGxvd2luZyBjbGFzcyBpbnN0ZWFkIG9mIHBsYWluIHN0cmluZ3Mgc28gdGhhdCB3
ZSBkbyBub3QKKy8vIGluY29ycmVjdGx5IHVzZSBzdHJpbmcgY29tcGFyaXNvbnMgaW5zdGVhZCBv
ZiBhbiBJbnRlcm5hbEtleUNvbXBhcmF0b3IuCitjbGFzcyBJbnRlcm5hbEtleSB7CisgcHJpdmF0
ZToKKyAgc3RkOjpzdHJpbmcgcmVwXzsKKyBwdWJsaWM6CisgIEludGVybmFsS2V5KCkgeyB9ICAg
Ly8gTGVhdmUgcmVwXyBhcyBlbXB0eSB0byBpbmRpY2F0ZSBpdCBpcyBpbnZhbGlkCisgIEludGVy
bmFsS2V5KGNvbnN0IFNsaWNlJiB1c2VyX2tleSwgU2VxdWVuY2VOdW1iZXIgcywgVmFsdWVUeXBl
IHQpIHsKKyAgICBBcHBlbmRJbnRlcm5hbEtleSgmcmVwXywgUGFyc2VkSW50ZXJuYWxLZXkodXNl
cl9rZXksIHMsIHQpKTsKKyAgfQorCisgIHZvaWQgRGVjb2RlRnJvbShjb25zdCBTbGljZSYgcykg
eyByZXBfLmFzc2lnbihzLmRhdGEoKSwgcy5zaXplKCkpOyB9CisgIFNsaWNlIEVuY29kZSgpIGNv
bnN0IHsKKyAgICBhc3NlcnQoIXJlcF8uZW1wdHkoKSk7CisgICAgcmV0dXJuIHJlcF87CisgIH0K
KworICBTbGljZSB1c2VyX2tleSgpIGNvbnN0IHsgcmV0dXJuIEV4dHJhY3RVc2VyS2V5KHJlcF8p
OyB9CisKKyAgdm9pZCBTZXRGcm9tKGNvbnN0IFBhcnNlZEludGVybmFsS2V5JiBwKSB7CisgICAg
cmVwXy5jbGVhcigpOworICAgIEFwcGVuZEludGVybmFsS2V5KCZyZXBfLCBwKTsKKyAgfQorCisg
IHZvaWQgQ2xlYXIoKSB7IHJlcF8uY2xlYXIoKTsgfQorCisgIHN0ZDo6c3RyaW5nIERlYnVnU3Ry
aW5nKCkgY29uc3Q7Cit9OworCitpbmxpbmUgaW50IEludGVybmFsS2V5Q29tcGFyYXRvcjo6Q29t
cGFyZSgKKyAgICBjb25zdCBJbnRlcm5hbEtleSYgYSwgY29uc3QgSW50ZXJuYWxLZXkmIGIpIGNv
bnN0IHsKKyAgcmV0dXJuIENvbXBhcmUoYS5FbmNvZGUoKSwgYi5FbmNvZGUoKSk7Cit9CisKK2lu
bGluZSBib29sIFBhcnNlSW50ZXJuYWxLZXkoY29uc3QgU2xpY2UmIGludGVybmFsX2tleSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFyc2VkSW50ZXJuYWxLZXkqIHJlc3VsdCkgewor
ICBjb25zdCBzaXplX3QgbiA9IGludGVybmFsX2tleS5zaXplKCk7CisgIGlmIChuIDwgOCkgcmV0
dXJuIGZhbHNlOworICB1aW50NjRfdCBudW0gPSBEZWNvZGVGaXhlZDY0KGludGVybmFsX2tleS5k
YXRhKCkgKyBuIC0gOCk7CisgIHVuc2lnbmVkIGNoYXIgYyA9IG51bSAmIDB4ZmY7CisgIHJlc3Vs
dC0+c2VxdWVuY2UgPSBudW0gPj4gODsKKyAgcmVzdWx0LT50eXBlID0gc3RhdGljX2Nhc3Q8VmFs
dWVUeXBlPihjKTsKKyAgcmVzdWx0LT51c2VyX2tleSA9IFNsaWNlKGludGVybmFsX2tleS5kYXRh
KCksIG4gLSA4KTsKKyAgcmV0dXJuIChjIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGtU
eXBlVmFsdWUpKTsKK30KKworLy8gQSBoZWxwZXIgY2xhc3MgdXNlZnVsIGZvciBEQkltcGw6Okdl
dCgpCitjbGFzcyBMb29rdXBLZXkgeworIHB1YmxpYzoKKyAgLy8gSW5pdGlhbGl6ZSAqdGhpcyBm
b3IgbG9va2luZyB1cCB1c2VyX2tleSBhdCBhIHNuYXBzaG90IHdpdGgKKyAgLy8gdGhlIHNwZWNp
ZmllZCBzZXF1ZW5jZSBudW1iZXIuCisgIExvb2t1cEtleShjb25zdCBTbGljZSYgdXNlcl9rZXks
IFNlcXVlbmNlTnVtYmVyIHNlcXVlbmNlKTsKKworICB+TG9va3VwS2V5KCk7CisKKyAgLy8gUmV0
dXJuIGEga2V5IHN1aXRhYmxlIGZvciBsb29rdXAgaW4gYSBNZW1UYWJsZS4KKyAgU2xpY2UgbWVt
dGFibGVfa2V5KCkgY29uc3QgeyByZXR1cm4gU2xpY2Uoc3RhcnRfLCBlbmRfIC0gc3RhcnRfKTsg
fQorCisgIC8vIFJldHVybiBhbiBpbnRlcm5hbCBrZXkgKHN1aXRhYmxlIGZvciBwYXNzaW5nIHRv
IGFuIGludGVybmFsIGl0ZXJhdG9yKQorICBTbGljZSBpbnRlcm5hbF9rZXkoKSBjb25zdCB7IHJl
dHVybiBTbGljZShrc3RhcnRfLCBlbmRfIC0ga3N0YXJ0Xyk7IH0KKworICAvLyBSZXR1cm4gdGhl
IHVzZXIga2V5CisgIFNsaWNlIHVzZXJfa2V5KCkgY29uc3QgeyByZXR1cm4gU2xpY2Uoa3N0YXJ0
XywgZW5kXyAtIGtzdGFydF8gLSA4KTsgfQorCisgcHJpdmF0ZToKKyAgLy8gV2UgY29uc3RydWN0
IGEgY2hhciBhcnJheSBvZiB0aGUgZm9ybToKKyAgLy8gICAga2xlbmd0aCAgdmFyaW50MzIgICAg
ICAgICAgICAgICA8LS0gc3RhcnRfCisgIC8vICAgIHVzZXJrZXkgIGNoYXJba2xlbmd0aF0gICAg
ICAgICAgPC0tIGtzdGFydF8KKyAgLy8gICAgdGFnICAgICAgdWludDY0CisgIC8vICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPC0tIGVuZF8KKyAgLy8gVGhlIGFycmF5IGlzIGEg
c3VpdGFibGUgTWVtVGFibGUga2V5LgorICAvLyBUaGUgc3VmZml4IHN0YXJ0aW5nIHdpdGggInVz
ZXJrZXkiIGNhbiBiZSB1c2VkIGFzIGFuIEludGVybmFsS2V5LgorICBjb25zdCBjaGFyKiBzdGFy
dF87CisgIGNvbnN0IGNoYXIqIGtzdGFydF87CisgIGNvbnN0IGNoYXIqIGVuZF87CisgIGNoYXIg
c3BhY2VfWzIwMF07ICAgICAgLy8gQXZvaWQgYWxsb2NhdGlvbiBmb3Igc2hvcnQga2V5cworCisg
IC8vIE5vIGNvcHlpbmcgYWxsb3dlZAorICBMb29rdXBLZXkoY29uc3QgTG9va3VwS2V5Jik7Cisg
IHZvaWQgb3BlcmF0b3I9KGNvbnN0IExvb2t1cEtleSYpOworfTsKKworaW5saW5lIExvb2t1cEtl
eTo6fkxvb2t1cEtleSgpIHsKKyAgaWYgKHN0YXJ0XyAhPSBzcGFjZV8pIGRlbGV0ZVtdIHN0YXJ0
XzsKK30KKworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKKworI2VuZGlmICAvLyBTVE9SQUdFX0xF
VkVMREJfREJfRk9STUFUX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRi
L2RiL2RiZm9ybWF0X3Rlc3QuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2RiZm9y
bWF0X3Rlc3QuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWQ4MmY1ZDMxM2ZhZDg4ZWE0ZTFkMDc5NDI3YmJhMTNk
ZjY2N2NmZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIv
ZGJmb3JtYXRfdGVzdC5jYwpAQCAtMCwwICsxLDExMiBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDEx
IFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBm
b3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgorCisjaW5jbHVkZSAiZGIvZGJmb3JtYXQuaCIKKyNp
bmNsdWRlICJ1dGlsL2xvZ2dpbmcuaCIKKyNpbmNsdWRlICJ1dGlsL3Rlc3RoYXJuZXNzLmgiCisK
K25hbWVzcGFjZSBsZXZlbGRiIHsKKworc3RhdGljIHN0ZDo6c3RyaW5nIElLZXkoY29uc3Qgc3Rk
OjpzdHJpbmcmIHVzZXJfa2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3Qgc2Vx
LAorICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVUeXBlIHZ0KSB7CisgIHN0ZDo6c3RyaW5n
IGVuY29kZWQ7CisgIEFwcGVuZEludGVybmFsS2V5KCZlbmNvZGVkLCBQYXJzZWRJbnRlcm5hbEtl
eSh1c2VyX2tleSwgc2VxLCB2dCkpOworICByZXR1cm4gZW5jb2RlZDsKK30KKworc3RhdGljIHN0
ZDo6c3RyaW5nIFNob3J0ZW4oY29uc3Qgc3RkOjpzdHJpbmcmIHMsIGNvbnN0IHN0ZDo6c3RyaW5n
JiBsKSB7CisgIHN0ZDo6c3RyaW5nIHJlc3VsdCA9IHM7CisgIEludGVybmFsS2V5Q29tcGFyYXRv
cihCeXRld2lzZUNvbXBhcmF0b3IoKSkuRmluZFNob3J0ZXN0U2VwYXJhdG9yKCZyZXN1bHQsIGwp
OworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgc3RkOjpzdHJpbmcgU2hvcnRTdWNjZXNz
b3IoY29uc3Qgc3RkOjpzdHJpbmcmIHMpIHsKKyAgc3RkOjpzdHJpbmcgcmVzdWx0ID0gczsKKyAg
SW50ZXJuYWxLZXlDb21wYXJhdG9yKEJ5dGV3aXNlQ29tcGFyYXRvcigpKS5GaW5kU2hvcnRTdWNj
ZXNzb3IoJnJlc3VsdCk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIFRlc3RL
ZXkoY29uc3Qgc3RkOjpzdHJpbmcmIGtleSwKKyAgICAgICAgICAgICAgICAgICAgdWludDY0X3Qg
c2VxLAorICAgICAgICAgICAgICAgICAgICBWYWx1ZVR5cGUgdnQpIHsKKyAgc3RkOjpzdHJpbmcg
ZW5jb2RlZCA9IElLZXkoa2V5LCBzZXEsIHZ0KTsKKworICBTbGljZSBpbihlbmNvZGVkKTsKKyAg
UGFyc2VkSW50ZXJuYWxLZXkgZGVjb2RlZCgiIiwgMCwga1R5cGVWYWx1ZSk7CisKKyAgQVNTRVJU
X1RSVUUoUGFyc2VJbnRlcm5hbEtleShpbiwgJmRlY29kZWQpKTsKKyAgQVNTRVJUX0VRKGtleSwg
ZGVjb2RlZC51c2VyX2tleS5Ub1N0cmluZygpKTsKKyAgQVNTRVJUX0VRKHNlcSwgZGVjb2RlZC5z
ZXF1ZW5jZSk7CisgIEFTU0VSVF9FUSh2dCwgZGVjb2RlZC50eXBlKTsKKworICBBU1NFUlRfVFJV
RSghUGFyc2VJbnRlcm5hbEtleShTbGljZSgiYmFyIiksICZkZWNvZGVkKSk7Cit9CisKK2NsYXNz
IEZvcm1hdFRlc3QgeyB9OworCitURVNUKEZvcm1hdFRlc3QsIEludGVybmFsS2V5X0VuY29kZURl
Y29kZSkgeworICBjb25zdCBjaGFyKiBrZXlzW10gPSB7ICIiLCAiayIsICJoZWxsbyIsICJsb25n
Z2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnIiB9OworICBjb25zdCB1aW50NjRfdCBzZXFbXSA9IHsKKyAg
ICAxLCAyLCAzLAorICAgICgxdWxsIDw8IDgpIC0gMSwgMXVsbCA8PCA4LCAoMXVsbCA8PCA4KSAr
IDEsCisgICAgKDF1bGwgPDwgMTYpIC0gMSwgMXVsbCA8PCAxNiwgKDF1bGwgPDwgMTYpICsgMSwK
KyAgICAoMXVsbCA8PCAzMikgLSAxLCAxdWxsIDw8IDMyLCAoMXVsbCA8PCAzMikgKyAxCisgIH07
CisgIGZvciAoaW50IGsgPSAwOyBrIDwgc2l6ZW9mKGtleXMpIC8gc2l6ZW9mKGtleXNbMF0pOyBr
KyspIHsKKyAgICBmb3IgKGludCBzID0gMDsgcyA8IHNpemVvZihzZXEpIC8gc2l6ZW9mKHNlcVsw
XSk7IHMrKykgeworICAgICAgVGVzdEtleShrZXlzW2tdLCBzZXFbc10sIGtUeXBlVmFsdWUpOwor
ICAgICAgVGVzdEtleSgiaGVsbG8iLCAxLCBrVHlwZURlbGV0aW9uKTsKKyAgICB9CisgIH0KK30K
KworVEVTVChGb3JtYXRUZXN0LCBJbnRlcm5hbEtleVNob3J0U2VwYXJhdG9yKSB7CisgIC8vIFdo
ZW4gdXNlciBrZXlzIGFyZSBzYW1lCisgIEFTU0VSVF9FUShJS2V5KCJmb28iLCAxMDAsIGtUeXBl
VmFsdWUpLAorICAgICAgICAgICAgU2hvcnRlbihJS2V5KCJmb28iLCAxMDAsIGtUeXBlVmFsdWUp
LAorICAgICAgICAgICAgICAgICAgICBJS2V5KCJmb28iLCA5OSwga1R5cGVWYWx1ZSkpKTsKKyAg
QVNTRVJUX0VRKElLZXkoImZvbyIsIDEwMCwga1R5cGVWYWx1ZSksCisgICAgICAgICAgICBTaG9y
dGVuKElLZXkoImZvbyIsIDEwMCwga1R5cGVWYWx1ZSksCisgICAgICAgICAgICAgICAgICAgIElL
ZXkoImZvbyIsIDEwMSwga1R5cGVWYWx1ZSkpKTsKKyAgQVNTRVJUX0VRKElLZXkoImZvbyIsIDEw
MCwga1R5cGVWYWx1ZSksCisgICAgICAgICAgICBTaG9ydGVuKElLZXkoImZvbyIsIDEwMCwga1R5
cGVWYWx1ZSksCisgICAgICAgICAgICAgICAgICAgIElLZXkoImZvbyIsIDEwMCwga1R5cGVWYWx1
ZSkpKTsKKyAgQVNTRVJUX0VRKElLZXkoImZvbyIsIDEwMCwga1R5cGVWYWx1ZSksCisgICAgICAg
ICAgICBTaG9ydGVuKElLZXkoImZvbyIsIDEwMCwga1R5cGVWYWx1ZSksCisgICAgICAgICAgICAg
ICAgICAgIElLZXkoImZvbyIsIDEwMCwga1R5cGVEZWxldGlvbikpKTsKKworICAvLyBXaGVuIHVz
ZXIga2V5cyBhcmUgbWlzb3JkZXJlZAorICBBU1NFUlRfRVEoSUtleSgiZm9vIiwgMTAwLCBrVHlw
ZVZhbHVlKSwKKyAgICAgICAgICAgIFNob3J0ZW4oSUtleSgiZm9vIiwgMTAwLCBrVHlwZVZhbHVl
KSwKKyAgICAgICAgICAgICAgICAgICAgSUtleSgiYmFyIiwgOTksIGtUeXBlVmFsdWUpKSk7CisK
KyAgLy8gV2hlbiB1c2VyIGtleXMgYXJlIGRpZmZlcmVudCwgYnV0IGNvcnJlY3RseSBvcmRlcmVk
CisgIEFTU0VSVF9FUShJS2V5KCJnIiwga01heFNlcXVlbmNlTnVtYmVyLCBrVmFsdWVUeXBlRm9y
U2VlayksCisgICAgICAgICAgICBTaG9ydGVuKElLZXkoImZvbyIsIDEwMCwga1R5cGVWYWx1ZSks
CisgICAgICAgICAgICAgICAgICAgIElLZXkoImhlbGxvIiwgMjAwLCBrVHlwZVZhbHVlKSkpOwor
CisgIC8vIFdoZW4gc3RhcnQgdXNlciBrZXkgaXMgcHJlZml4IG9mIGxpbWl0IHVzZXIga2V5Cisg
IEFTU0VSVF9FUShJS2V5KCJmb28iLCAxMDAsIGtUeXBlVmFsdWUpLAorICAgICAgICAgICAgU2hv
cnRlbihJS2V5KCJmb28iLCAxMDAsIGtUeXBlVmFsdWUpLAorICAgICAgICAgICAgICAgICAgICBJ
S2V5KCJmb29iYXIiLCAyMDAsIGtUeXBlVmFsdWUpKSk7CisKKyAgLy8gV2hlbiBsaW1pdCB1c2Vy
IGtleSBpcyBwcmVmaXggb2Ygc3RhcnQgdXNlciBrZXkKKyAgQVNTRVJUX0VRKElLZXkoImZvb2Jh
ciIsIDEwMCwga1R5cGVWYWx1ZSksCisgICAgICAgICAgICBTaG9ydGVuKElLZXkoImZvb2JhciIs
IDEwMCwga1R5cGVWYWx1ZSksCisgICAgICAgICAgICAgICAgICAgIElLZXkoImZvbyIsIDIwMCwg
a1R5cGVWYWx1ZSkpKTsKK30KKworVEVTVChGb3JtYXRUZXN0LCBJbnRlcm5hbEtleVNob3J0ZXN0
U3VjY2Vzc29yKSB7CisgIEFTU0VSVF9FUShJS2V5KCJnIiwga01heFNlcXVlbmNlTnVtYmVyLCBr
VmFsdWVUeXBlRm9yU2VlayksCisgICAgICAgICAgICBTaG9ydFN1Y2Nlc3NvcihJS2V5KCJmb28i
LCAxMDAsIGtUeXBlVmFsdWUpKSk7CisgIEFTU0VSVF9FUShJS2V5KCJceGZmXHhmZiIsIDEwMCwg
a1R5cGVWYWx1ZSksCisgICAgICAgICAgICBTaG9ydFN1Y2Nlc3NvcihJS2V5KCJceGZmXHhmZiIs
IDEwMCwga1R5cGVWYWx1ZSkpKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKKworaW50
IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KSB7CisgIHJldHVybiBsZXZlbGRiOjp0ZXN0OjpS
dW5BbGxUZXN0cygpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9k
Yi9maWxlbmFtZS5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvZmlsZW5hbWUuY2MK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uM2M0ZDQ5ZjY0ZWI2ZGZiZjlkMzc0MGNiZmRhM2Y2YWQyMThhNGY1MgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvZmlsZW5hbWUuY2MK
QEAgLTAsMCArMSwxMzkgQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRy
aWJ1dG9ycy4KKworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNs
dWRlICJkYi9maWxlbmFtZS5oIgorI2luY2x1ZGUgImRiL2RiZm9ybWF0LmgiCisjaW5jbHVkZSAi
bGV2ZWxkYi9lbnYuaCIKKyNpbmNsdWRlICJ1dGlsL2xvZ2dpbmcuaCIKKworbmFtZXNwYWNlIGxl
dmVsZGIgeworCisvLyBBIHV0aWxpdHkgcm91dGluZTogd3JpdGUgImRhdGEiIHRvIHRoZSBuYW1l
ZCBmaWxlIGFuZCBTeW5jKCkgaXQuCitleHRlcm4gU3RhdHVzIFdyaXRlU3RyaW5nVG9GaWxlU3lu
YyhFbnYqIGVudiwgY29uc3QgU2xpY2UmIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZm5hbWUpOworCitzdGF0aWMgc3RkOjpzdHJp
bmcgTWFrZUZpbGVOYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCB1aW50NjRfdCBudW1iZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHN1ZmZpeCkgewor
ICBjaGFyIGJ1ZlsxMDBdOworICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiLyUwNmxsdS4l
cyIsCisgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4obnVtYmVyKSwK
KyAgICAgICAgICAgc3VmZml4KTsKKyAgcmV0dXJuIG5hbWUgKyBidWY7Cit9CisKK3N0ZDo6c3Ry
aW5nIExvZ0ZpbGVOYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCB1aW50NjRfdCBudW1iZXIp
IHsKKyAgYXNzZXJ0KG51bWJlciA+IDApOworICByZXR1cm4gTWFrZUZpbGVOYW1lKG5hbWUsIG51
bWJlciwgImxvZyIpOworfQorCitzdGQ6OnN0cmluZyBUYWJsZUZpbGVOYW1lKGNvbnN0IHN0ZDo6
c3RyaW5nJiBuYW1lLCB1aW50NjRfdCBudW1iZXIpIHsKKyAgYXNzZXJ0KG51bWJlciA+IDApOwor
ICByZXR1cm4gTWFrZUZpbGVOYW1lKG5hbWUsIG51bWJlciwgInNzdCIpOworfQorCitzdGQ6OnN0
cmluZyBEZXNjcmlwdG9yRmlsZU5hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIGRibmFtZSwgdWludDY0
X3QgbnVtYmVyKSB7CisgIGFzc2VydChudW1iZXIgPiAwKTsKKyAgY2hhciBidWZbMTAwXTsKKyAg
c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIi9NQU5JRkVTVC0lMDZsbHUiLAorICAgICAgICAg
ICBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KG51bWJlcikpOworICByZXR1cm4gZGJu
YW1lICsgYnVmOworfQorCitzdGQ6OnN0cmluZyBDdXJyZW50RmlsZU5hbWUoY29uc3Qgc3RkOjpz
dHJpbmcmIGRibmFtZSkgeworICByZXR1cm4gZGJuYW1lICsgIi9DVVJSRU5UIjsKK30KKworc3Rk
OjpzdHJpbmcgTG9ja0ZpbGVOYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBkYm5hbWUpIHsKKyAgcmV0
dXJuIGRibmFtZSArICIvTE9DSyI7Cit9CisKK3N0ZDo6c3RyaW5nIFRlbXBGaWxlTmFtZShjb25z
dCBzdGQ6OnN0cmluZyYgZGJuYW1lLCB1aW50NjRfdCBudW1iZXIpIHsKKyAgYXNzZXJ0KG51bWJl
ciA+IDApOworICByZXR1cm4gTWFrZUZpbGVOYW1lKGRibmFtZSwgbnVtYmVyLCAiZGJ0bXAiKTsK
K30KKworc3RkOjpzdHJpbmcgSW5mb0xvZ0ZpbGVOYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBkYm5h
bWUpIHsKKyAgcmV0dXJuIGRibmFtZSArICIvTE9HIjsKK30KKworLy8gUmV0dXJuIHRoZSBuYW1l
IG9mIHRoZSBvbGQgaW5mbyBsb2cgZmlsZSBmb3IgImRibmFtZSIuCitzdGQ6OnN0cmluZyBPbGRJ
bmZvTG9nRmlsZU5hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIGRibmFtZSkgeworICByZXR1cm4gZGJu
YW1lICsgIi9MT0cub2xkIjsKK30KKworCisvLyBPd25lZCBmaWxlbmFtZXMgaGF2ZSB0aGUgZm9y
bToKKy8vICAgIGRibmFtZS9DVVJSRU5UCisvLyAgICBkYm5hbWUvTE9DSworLy8gICAgZGJuYW1l
L0xPRworLy8gICAgZGJuYW1lL0xPRy5vbGQKKy8vICAgIGRibmFtZS9NQU5JRkVTVC1bMC05XSsK
Ky8vICAgIGRibmFtZS9bMC05XSsuKGxvZ3xzc3QpCitib29sIFBhcnNlRmlsZU5hbWUoY29uc3Qg
c3RkOjpzdHJpbmcmIGZuYW1lLAorICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90KiBudW1iZXIs
CisgICAgICAgICAgICAgICAgICAgRmlsZVR5cGUqIHR5cGUpIHsKKyAgU2xpY2UgcmVzdChmbmFt
ZSk7CisgIGlmIChyZXN0ID09ICJDVVJSRU5UIikgeworICAgICpudW1iZXIgPSAwOworICAgICp0
eXBlID0ga0N1cnJlbnRGaWxlOworICB9IGVsc2UgaWYgKHJlc3QgPT0gIkxPQ0siKSB7CisgICAg
Km51bWJlciA9IDA7CisgICAgKnR5cGUgPSBrREJMb2NrRmlsZTsKKyAgfSBlbHNlIGlmIChyZXN0
ID09ICJMT0ciIHx8IHJlc3QgPT0gIkxPRy5vbGQiKSB7CisgICAgKm51bWJlciA9IDA7CisgICAg
KnR5cGUgPSBrSW5mb0xvZ0ZpbGU7CisgIH0gZWxzZSBpZiAocmVzdC5zdGFydHNfd2l0aCgiTUFO
SUZFU1QtIikpIHsKKyAgICByZXN0LnJlbW92ZV9wcmVmaXgoc3RybGVuKCJNQU5JRkVTVC0iKSk7
CisgICAgdWludDY0X3QgbnVtOworICAgIGlmICghQ29uc3VtZURlY2ltYWxOdW1iZXIoJnJlc3Qs
ICZudW0pKSB7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghcmVzdC5lbXB0
eSgpKSB7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgICp0eXBlID0ga0Rlc2NyaXB0
b3JGaWxlOworICAgICpudW1iZXIgPSBudW07CisgIH0gZWxzZSB7CisgICAgLy8gQXZvaWQgc3Ry
dG91bGwoKSB0byBrZWVwIGZpbGVuYW1lIGZvcm1hdCBpbmRlcGVuZGVudCBvZiB0aGUKKyAgICAv
LyBjdXJyZW50IGxvY2FsZQorICAgIHVpbnQ2NF90IG51bTsKKyAgICBpZiAoIUNvbnN1bWVEZWNp
bWFsTnVtYmVyKCZyZXN0LCAmbnVtKSkgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICBTbGljZSBzdWZmaXggPSByZXN0OworICAgIGlmIChzdWZmaXggPT0gU2xpY2UoIi5sb2ciKSkg
eworICAgICAgKnR5cGUgPSBrTG9nRmlsZTsKKyAgICB9IGVsc2UgaWYgKHN1ZmZpeCA9PSBTbGlj
ZSgiLnNzdCIpKSB7CisgICAgICAqdHlwZSA9IGtUYWJsZUZpbGU7CisgICAgfSBlbHNlIGlmIChz
dWZmaXggPT0gU2xpY2UoIi5kYnRtcCIpKSB7CisgICAgICAqdHlwZSA9IGtUZW1wRmlsZTsKKyAg
ICB9IGVsc2UgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAqbnVtYmVyID0gbnVt
OworICB9CisgIHJldHVybiB0cnVlOworfQorCitTdGF0dXMgU2V0Q3VycmVudEZpbGUoRW52KiBl
bnYsIGNvbnN0IHN0ZDo6c3RyaW5nJiBkYm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgdWlu
dDY0X3QgZGVzY3JpcHRvcl9udW1iZXIpIHsKKyAgLy8gUmVtb3ZlIGxlYWRpbmcgImRibmFtZS8i
IGFuZCBhZGQgbmV3bGluZSB0byBtYW5pZmVzdCBmaWxlIG5hbWUKKyAgc3RkOjpzdHJpbmcgbWFu
aWZlc3QgPSBEZXNjcmlwdG9yRmlsZU5hbWUoZGJuYW1lLCBkZXNjcmlwdG9yX251bWJlcik7Cisg
IFNsaWNlIGNvbnRlbnRzID0gbWFuaWZlc3Q7CisgIGFzc2VydChjb250ZW50cy5zdGFydHNfd2l0
aChkYm5hbWUgKyAiLyIpKTsKKyAgY29udGVudHMucmVtb3ZlX3ByZWZpeChkYm5hbWUuc2l6ZSgp
ICsgMSk7CisgIHN0ZDo6c3RyaW5nIHRtcCA9IFRlbXBGaWxlTmFtZShkYm5hbWUsIGRlc2NyaXB0
b3JfbnVtYmVyKTsKKyAgU3RhdHVzIHMgPSBXcml0ZVN0cmluZ1RvRmlsZVN5bmMoZW52LCBjb250
ZW50cy5Ub1N0cmluZygpICsgIlxuIiwgdG1wKTsKKyAgaWYgKHMub2soKSkgeworICAgIHMgPSBl
bnYtPlJlbmFtZUZpbGUodG1wLCBDdXJyZW50RmlsZU5hbWUoZGJuYW1lKSk7CisgIH0KKyAgaWYg
KCFzLm9rKCkpIHsKKyAgICBlbnYtPkRlbGV0ZUZpbGUodG1wKTsKKyAgfQorICByZXR1cm4gczsK
K30KKworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xldmVsZGIvZGIvZmlsZW5hbWUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIv
ZmlsZW5hbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNWQwOWIxMTQ2ODEwNTMyNDc2MTc2MTY2NWJiOGRiNzJh
YmY5NTQwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9m
aWxlbmFtZS5oCkBAIC0wLDAgKzEsODAgQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2
ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVz
IG9mIGNvbnRyaWJ1dG9ycy4KKy8vCisvLyBGaWxlIG5hbWVzIHVzZWQgYnkgREIgY29kZQorCisj
aWZuZGVmIFNUT1JBR0VfTEVWRUxEQl9EQl9GSUxFTkFNRV9IXworI2RlZmluZSBTVE9SQUdFX0xF
VkVMREJfREJfRklMRU5BTUVfSF8KKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0
cmluZz4KKyNpbmNsdWRlICJsZXZlbGRiL3NsaWNlLmgiCisjaW5jbHVkZSAibGV2ZWxkYi9zdGF0
dXMuaCIKKyNpbmNsdWRlICJwb3J0L3BvcnQuaCIKKworbmFtZXNwYWNlIGxldmVsZGIgeworCitj
bGFzcyBFbnY7CisKK2VudW0gRmlsZVR5cGUgeworICBrTG9nRmlsZSwKKyAga0RCTG9ja0ZpbGUs
CisgIGtUYWJsZUZpbGUsCisgIGtEZXNjcmlwdG9yRmlsZSwKKyAga0N1cnJlbnRGaWxlLAorICBr
VGVtcEZpbGUsCisgIGtJbmZvTG9nRmlsZSAgLy8gRWl0aGVyIHRoZSBjdXJyZW50IG9uZSwgb3Ig
YW4gb2xkIG9uZQorfTsKKworLy8gUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBsb2cgZmlsZSB3aXRo
IHRoZSBzcGVjaWZpZWQgbnVtYmVyCisvLyBpbiB0aGUgZGIgbmFtZWQgYnkgImRibmFtZSIuICBU
aGUgcmVzdWx0IHdpbGwgYmUgcHJlZml4ZWQgd2l0aAorLy8gImRibmFtZSIuCitleHRlcm4gc3Rk
OjpzdHJpbmcgTG9nRmlsZU5hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIGRibmFtZSwgdWludDY0X3Qg
bnVtYmVyKTsKKworLy8gUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBzc3RhYmxlIHdpdGggdGhlIHNw
ZWNpZmllZCBudW1iZXIKKy8vIGluIHRoZSBkYiBuYW1lZCBieSAiZGJuYW1lIi4gIFRoZSByZXN1
bHQgd2lsbCBiZSBwcmVmaXhlZCB3aXRoCisvLyAiZGJuYW1lIi4KK2V4dGVybiBzdGQ6OnN0cmlu
ZyBUYWJsZUZpbGVOYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBkYm5hbWUsIHVpbnQ2NF90IG51bWJl
cik7CisKKy8vIFJldHVybiB0aGUgbmFtZSBvZiB0aGUgZGVzY3JpcHRvciBmaWxlIGZvciB0aGUg
ZGIgbmFtZWQgYnkKKy8vICJkYm5hbWUiIGFuZCB0aGUgc3BlY2lmaWVkIGluY2FybmF0aW9uIG51
bWJlci4gIFRoZSByZXN1bHQgd2lsbCBiZQorLy8gcHJlZml4ZWQgd2l0aCAiZGJuYW1lIi4KK2V4
dGVybiBzdGQ6OnN0cmluZyBEZXNjcmlwdG9yRmlsZU5hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIGRi
bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgbnVt
YmVyKTsKKworLy8gUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGZpbGUuICBUaGlzIGZp
bGUgY29udGFpbnMgdGhlIG5hbWUKKy8vIG9mIHRoZSBjdXJyZW50IG1hbmlmZXN0IGZpbGUuICBU
aGUgcmVzdWx0IHdpbGwgYmUgcHJlZml4ZWQgd2l0aAorLy8gImRibmFtZSIuCitleHRlcm4gc3Rk
OjpzdHJpbmcgQ3VycmVudEZpbGVOYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBkYm5hbWUpOworCisv
LyBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGxvY2sgZmlsZSBmb3IgdGhlIGRiIG5hbWVkIGJ5Cisv
LyAiZGJuYW1lIi4gIFRoZSByZXN1bHQgd2lsbCBiZSBwcmVmaXhlZCB3aXRoICJkYm5hbWUiLgor
ZXh0ZXJuIHN0ZDo6c3RyaW5nIExvY2tGaWxlTmFtZShjb25zdCBzdGQ6OnN0cmluZyYgZGJuYW1l
KTsKKworLy8gUmV0dXJuIHRoZSBuYW1lIG9mIGEgdGVtcG9yYXJ5IGZpbGUgb3duZWQgYnkgdGhl
IGRiIG5hbWVkICJkYm5hbWUiLgorLy8gVGhlIHJlc3VsdCB3aWxsIGJlIHByZWZpeGVkIHdpdGgg
ImRibmFtZSIuCitleHRlcm4gc3RkOjpzdHJpbmcgVGVtcEZpbGVOYW1lKGNvbnN0IHN0ZDo6c3Ry
aW5nJiBkYm5hbWUsIHVpbnQ2NF90IG51bWJlcik7CisKKy8vIFJldHVybiB0aGUgbmFtZSBvZiB0
aGUgaW5mbyBsb2cgZmlsZSBmb3IgImRibmFtZSIuCitleHRlcm4gc3RkOjpzdHJpbmcgSW5mb0xv
Z0ZpbGVOYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBkYm5hbWUpOworCisvLyBSZXR1cm4gdGhlIG5h
bWUgb2YgdGhlIG9sZCBpbmZvIGxvZyBmaWxlIGZvciAiZGJuYW1lIi4KK2V4dGVybiBzdGQ6OnN0
cmluZyBPbGRJbmZvTG9nRmlsZU5hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIGRibmFtZSk7CisKKy8v
IElmIGZpbGVuYW1lIGlzIGEgbGV2ZWxkYiBmaWxlLCBzdG9yZSB0aGUgdHlwZSBvZiB0aGUgZmls
ZSBpbiAqdHlwZS4KKy8vIFRoZSBudW1iZXIgZW5jb2RlZCBpbiB0aGUgZmlsZW5hbWUgaXMgc3Rv
cmVkIGluICpudW1iZXIuICBJZiB0aGUKKy8vIGZpbGVuYW1lIHdhcyBzdWNjZXNzZnVsbHkgcGFy
c2VkLCByZXR1cm5zIHRydWUuICBFbHNlIHJldHVybiBmYWxzZS4KK2V4dGVybiBib29sIFBhcnNl
RmlsZU5hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICB1aW50NjRfdCogbnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGaWxl
VHlwZSogdHlwZSk7CisKKy8vIE1ha2UgdGhlIENVUlJFTlQgZmlsZSBwb2ludCB0byB0aGUgZGVz
Y3JpcHRvciBmaWxlIHdpdGggdGhlCisvLyBzcGVjaWZpZWQgbnVtYmVyLgorZXh0ZXJuIFN0YXR1
cyBTZXRDdXJyZW50RmlsZShFbnYqIGVudiwgY29uc3Qgc3RkOjpzdHJpbmcmIGRibmFtZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgZGVzY3JpcHRvcl9udW1iZXIpOwor
CisKK30gIC8vIG5hbWVzcGFjZSBsZXZlbGRiCisKKyNlbmRpZiAgLy8gU1RPUkFHRV9MRVZFTERC
X0RCX0ZJTEVOQU1FX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2Ri
L2ZpbGVuYW1lX3Rlc3QuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2ZpbGVuYW1l
X3Rlc3QuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNDczNTNkNmM5YWFmNjk5YmU4MmZjNjMyY2RiOGYwMGY4ZGFl
NTBkMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvZmls
ZW5hbWVfdGVzdC5jYwpAQCAtMCwwICsxLDEyMiBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDExIFRo
ZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3Ig
bmFtZXMgb2YgY29udHJpYnV0b3JzLgorCisjaW5jbHVkZSAiZGIvZmlsZW5hbWUuaCIKKworI2lu
Y2x1ZGUgImRiL2RiZm9ybWF0LmgiCisjaW5jbHVkZSAicG9ydC9wb3J0LmgiCisjaW5jbHVkZSAi
dXRpbC9sb2dnaW5nLmgiCisjaW5jbHVkZSAidXRpbC90ZXN0aGFybmVzcy5oIgorCituYW1lc3Bh
Y2UgbGV2ZWxkYiB7CisKK2NsYXNzIEZpbGVOYW1lVGVzdCB7IH07CisKK1RFU1QoRmlsZU5hbWVU
ZXN0LCBQYXJzZSkgeworICBTbGljZSBkYjsKKyAgRmlsZVR5cGUgdHlwZTsKKyAgdWludDY0X3Qg
bnVtYmVyOworCisgIC8vIFN1Y2Nlc3NmdWwgcGFyc2VzCisgIHN0YXRpYyBzdHJ1Y3QgeworICAg
IGNvbnN0IGNoYXIqIGZuYW1lOworICAgIHVpbnQ2NF90IG51bWJlcjsKKyAgICBGaWxlVHlwZSB0
eXBlOworICB9IGNhc2VzW10gPSB7CisgICAgeyAiMTAwLmxvZyIsICAgICAgICAgICAgMTAwLCAg
IGtMb2dGaWxlIH0sCisgICAgeyAiMC5sb2ciLCAgICAgICAgICAgICAgMCwgICAgIGtMb2dGaWxl
IH0sCisgICAgeyAiMC5zc3QiLCAgICAgICAgICAgICAgMCwgICAgIGtUYWJsZUZpbGUgfSwKKyAg
ICB7ICJDVVJSRU5UIiwgICAgICAgICAgICAwLCAgICAga0N1cnJlbnRGaWxlIH0sCisgICAgeyAi
TE9DSyIsICAgICAgICAgICAgICAgMCwgICAgIGtEQkxvY2tGaWxlIH0sCisgICAgeyAiTUFOSUZF
U1QtMiIsICAgICAgICAgMiwgICAgIGtEZXNjcmlwdG9yRmlsZSB9LAorICAgIHsgIk1BTklGRVNU
LTciLCAgICAgICAgIDcsICAgICBrRGVzY3JpcHRvckZpbGUgfSwKKyAgICB7ICJMT0ciLCAgICAg
ICAgICAgICAgICAwLCAgICAga0luZm9Mb2dGaWxlIH0sCisgICAgeyAiTE9HLm9sZCIsICAgICAg
ICAgICAgMCwgICAgIGtJbmZvTG9nRmlsZSB9LAorICAgIHsgIjE4NDQ2NzQ0MDczNzA5NTUxNjE1
LmxvZyIsIDE4NDQ2NzQ0MDczNzA5NTUxNjE1dWxsLCBrTG9nRmlsZSB9LAorICB9OworICBmb3Ig
KGludCBpID0gMDsgaSA8IHNpemVvZihjYXNlcykgLyBzaXplb2YoY2FzZXNbMF0pOyBpKyspIHsK
KyAgICBzdGQ6OnN0cmluZyBmID0gY2FzZXNbaV0uZm5hbWU7CisgICAgQVNTRVJUX1RSVUUoUGFy
c2VGaWxlTmFtZShmLCAmbnVtYmVyLCAmdHlwZSkpIDw8IGY7CisgICAgQVNTRVJUX0VRKGNhc2Vz
W2ldLnR5cGUsIHR5cGUpIDw8IGY7CisgICAgQVNTRVJUX0VRKGNhc2VzW2ldLm51bWJlciwgbnVt
YmVyKSA8PCBmOworICB9CisKKyAgLy8gRXJyb3JzCisgIHN0YXRpYyBjb25zdCBjaGFyKiBlcnJv
cnNbXSA9IHsKKyAgICAiIiwKKyAgICAiZm9vIiwKKyAgICAiZm9vLWR4LTEwMC5sb2ciLAorICAg
ICIubG9nIiwKKyAgICAiIiwKKyAgICAibWFuaWZlc3QiLAorICAgICJDVVJSRU4iLAorICAgICJD
VVJSRU5UWCIsCisgICAgIk1BTklGRVMiLAorICAgICJNQU5JRkVTVCIsCisgICAgIk1BTklGRVNU
LSIsCisgICAgIlhNQU5JRkVTVC0zIiwKKyAgICAiTUFOSUZFU1QtM3giLAorICAgICJMT0MiLAor
ICAgICJMT0NLeCIsCisgICAgIkxPIiwKKyAgICAiTE9HeCIsCisgICAgIjE4NDQ2NzQ0MDczNzA5
NTUxNjE2LmxvZyIsCisgICAgIjE4NDQ2NzQ0MDczNzA5NTUxNjE1MC5sb2ciLAorICAgICIxMDAi
LAorICAgICIxMDAuIiwKKyAgICAiMTAwLmxvcCIKKyAgfTsKKyAgZm9yIChpbnQgaSA9IDA7IGkg
PCBzaXplb2YoZXJyb3JzKSAvIHNpemVvZihlcnJvcnNbMF0pOyBpKyspIHsKKyAgICBzdGQ6OnN0
cmluZyBmID0gZXJyb3JzW2ldOworICAgIEFTU0VSVF9UUlVFKCFQYXJzZUZpbGVOYW1lKGYsICZu
dW1iZXIsICZ0eXBlKSkgPDwgZjsKKyAgfTsKK30KKworVEVTVChGaWxlTmFtZVRlc3QsIENvbnN0
cnVjdGlvbikgeworICB1aW50NjRfdCBudW1iZXI7CisgIEZpbGVUeXBlIHR5cGU7CisgIHN0ZDo6
c3RyaW5nIGZuYW1lOworCisgIGZuYW1lID0gQ3VycmVudEZpbGVOYW1lKCJmb28iKTsKKyAgQVNT
RVJUX0VRKCJmb28vIiwgc3RkOjpzdHJpbmcoZm5hbWUuZGF0YSgpLCA0KSk7CisgIEFTU0VSVF9U
UlVFKFBhcnNlRmlsZU5hbWUoZm5hbWUuY19zdHIoKSArIDQsICZudW1iZXIsICZ0eXBlKSk7Cisg
IEFTU0VSVF9FUSgwLCBudW1iZXIpOworICBBU1NFUlRfRVEoa0N1cnJlbnRGaWxlLCB0eXBlKTsK
KworICBmbmFtZSA9IExvY2tGaWxlTmFtZSgiZm9vIik7CisgIEFTU0VSVF9FUSgiZm9vLyIsIHN0
ZDo6c3RyaW5nKGZuYW1lLmRhdGEoKSwgNCkpOworICBBU1NFUlRfVFJVRShQYXJzZUZpbGVOYW1l
KGZuYW1lLmNfc3RyKCkgKyA0LCAmbnVtYmVyLCAmdHlwZSkpOworICBBU1NFUlRfRVEoMCwgbnVt
YmVyKTsKKyAgQVNTRVJUX0VRKGtEQkxvY2tGaWxlLCB0eXBlKTsKKworICBmbmFtZSA9IExvZ0Zp
bGVOYW1lKCJmb28iLCAxOTIpOworICBBU1NFUlRfRVEoImZvby8iLCBzdGQ6OnN0cmluZyhmbmFt
ZS5kYXRhKCksIDQpKTsKKyAgQVNTRVJUX1RSVUUoUGFyc2VGaWxlTmFtZShmbmFtZS5jX3N0cigp
ICsgNCwgJm51bWJlciwgJnR5cGUpKTsKKyAgQVNTRVJUX0VRKDE5MiwgbnVtYmVyKTsKKyAgQVNT
RVJUX0VRKGtMb2dGaWxlLCB0eXBlKTsKKworICBmbmFtZSA9IFRhYmxlRmlsZU5hbWUoImJhciIs
IDIwMCk7CisgIEFTU0VSVF9FUSgiYmFyLyIsIHN0ZDo6c3RyaW5nKGZuYW1lLmRhdGEoKSwgNCkp
OworICBBU1NFUlRfVFJVRShQYXJzZUZpbGVOYW1lKGZuYW1lLmNfc3RyKCkgKyA0LCAmbnVtYmVy
LCAmdHlwZSkpOworICBBU1NFUlRfRVEoMjAwLCBudW1iZXIpOworICBBU1NFUlRfRVEoa1RhYmxl
RmlsZSwgdHlwZSk7CisKKyAgZm5hbWUgPSBEZXNjcmlwdG9yRmlsZU5hbWUoImJhciIsIDEwMCk7
CisgIEFTU0VSVF9FUSgiYmFyLyIsIHN0ZDo6c3RyaW5nKGZuYW1lLmRhdGEoKSwgNCkpOworICBB
U1NFUlRfVFJVRShQYXJzZUZpbGVOYW1lKGZuYW1lLmNfc3RyKCkgKyA0LCAmbnVtYmVyLCAmdHlw
ZSkpOworICBBU1NFUlRfRVEoMTAwLCBudW1iZXIpOworICBBU1NFUlRfRVEoa0Rlc2NyaXB0b3JG
aWxlLCB0eXBlKTsKKworICBmbmFtZSA9IFRlbXBGaWxlTmFtZSgidG1wIiwgOTk5KTsKKyAgQVNT
RVJUX0VRKCJ0bXAvIiwgc3RkOjpzdHJpbmcoZm5hbWUuZGF0YSgpLCA0KSk7CisgIEFTU0VSVF9U
UlVFKFBhcnNlRmlsZU5hbWUoZm5hbWUuY19zdHIoKSArIDQsICZudW1iZXIsICZ0eXBlKSk7Cisg
IEFTU0VSVF9FUSg5OTksIG51bWJlcik7CisgIEFTU0VSVF9FUShrVGVtcEZpbGUsIHR5cGUpOwor
fQorCit9ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioq
IGFyZ3YpIHsKKyAgcmV0dXJuIGxldmVsZGI6OnRlc3Q6OlJ1bkFsbFRlc3RzKCk7Cit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2xldmVsZGJfbWFpbi5jYyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvbGV2ZWxkYl9tYWluLmNjCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk5
NWQ3NjEwN2ExNmVmZDk2NzdlYzZkMmMxMjVjMDQ1MDJmY2VjM2QKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2xldmVsZGJfbWFpbi5jYwpAQCAtMCwwICsx
LDIzOCBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgor
CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJkYi9kYmZvcm1hdC5oIgorI2luY2x1ZGUg
ImRiL2ZpbGVuYW1lLmgiCisjaW5jbHVkZSAiZGIvbG9nX3JlYWRlci5oIgorI2luY2x1ZGUgImRi
L3ZlcnNpb25fZWRpdC5oIgorI2luY2x1ZGUgImRiL3dyaXRlX2JhdGNoX2ludGVybmFsLmgiCisj
aW5jbHVkZSAibGV2ZWxkYi9lbnYuaCIKKyNpbmNsdWRlICJsZXZlbGRiL2l0ZXJhdG9yLmgiCisj
aW5jbHVkZSAibGV2ZWxkYi9vcHRpb25zLmgiCisjaW5jbHVkZSAibGV2ZWxkYi9zdGF0dXMuaCIK
KyNpbmNsdWRlICJsZXZlbGRiL3RhYmxlLmgiCisjaW5jbHVkZSAibGV2ZWxkYi93cml0ZV9iYXRj
aC5oIgorI2luY2x1ZGUgInV0aWwvbG9nZ2luZy5oIgorCituYW1lc3BhY2UgbGV2ZWxkYiB7CisK
K25hbWVzcGFjZSB7CisKK2Jvb2wgR3Vlc3NUeXBlKGNvbnN0IHN0ZDo6c3RyaW5nJiBmbmFtZSwg
RmlsZVR5cGUqIHR5cGUpIHsKKyAgc2l6ZV90IHBvcyA9IGZuYW1lLnJmaW5kKCcvJyk7CisgIHN0
ZDo6c3RyaW5nIGJhc2VuYW1lOworICBpZiAocG9zID09IHN0ZDo6c3RyaW5nOjpucG9zKSB7Cisg
ICAgYmFzZW5hbWUgPSBmbmFtZTsKKyAgfSBlbHNlIHsKKyAgICBiYXNlbmFtZSA9IHN0ZDo6c3Ry
aW5nKGZuYW1lLmRhdGEoKSArIHBvcyArIDEsIGZuYW1lLnNpemUoKSAtIHBvcyAtIDEpOworICB9
CisgIHVpbnQ2NF90IGlnbm9yZWQ7CisgIHJldHVybiBQYXJzZUZpbGVOYW1lKGJhc2VuYW1lLCAm
aWdub3JlZCwgdHlwZSk7Cit9CisKKy8vIE5vdGlmaWVkIHdoZW4gbG9nIHJlYWRlciBlbmNvdW50
ZXJzIGNvcnJ1cHRpb24uCitjbGFzcyBDb3JydXB0aW9uUmVwb3J0ZXIgOiBwdWJsaWMgbG9nOjpS
ZWFkZXI6OlJlcG9ydGVyIHsKKyBwdWJsaWM6CisgIHZpcnR1YWwgdm9pZCBDb3JydXB0aW9uKHNp
emVfdCBieXRlcywgY29uc3QgU3RhdHVzJiBzdGF0dXMpIHsKKyAgICBwcmludGYoImNvcnJ1cHRp
b246ICVkIGJ5dGVzOyAlc1xuIiwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4oYnl0ZXMp
LAorICAgICAgICAgICAgc3RhdHVzLlRvU3RyaW5nKCkuY19zdHIoKSk7CisgIH0KK307CisKKy8v
IFByaW50IGNvbnRlbnRzIG9mIGEgbG9nIGZpbGUuICgqZnVuYykoKSBpcyBjYWxsZWQgb24gZXZl
cnkgcmVjb3JkLgorYm9vbCBQcmludExvZ0NvbnRlbnRzKEVudiogZW52LCBjb25zdCBzdGQ6OnN0
cmluZyYgZm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKmZ1bmMpKFNsaWNlKSkg
eworICBTZXF1ZW50aWFsRmlsZSogZmlsZTsKKyAgU3RhdHVzIHMgPSBlbnYtPk5ld1NlcXVlbnRp
YWxGaWxlKGZuYW1lLCAmZmlsZSk7CisgIGlmICghcy5vaygpKSB7CisgICAgZnByaW50ZihzdGRl
cnIsICIlc1xuIiwgcy5Ub1N0cmluZygpLmNfc3RyKCkpOworICAgIHJldHVybiBmYWxzZTsKKyAg
fQorICBDb3JydXB0aW9uUmVwb3J0ZXIgcmVwb3J0ZXI7CisgIGxvZzo6UmVhZGVyIHJlYWRlcihm
aWxlLCAmcmVwb3J0ZXIsIHRydWUsIDApOworICBTbGljZSByZWNvcmQ7CisgIHN0ZDo6c3RyaW5n
IHNjcmF0Y2g7CisgIHdoaWxlIChyZWFkZXIuUmVhZFJlY29yZCgmcmVjb3JkLCAmc2NyYXRjaCkp
IHsKKyAgICBwcmludGYoIi0tLSBvZmZzZXQgJWxsdTsgIiwKKyAgICAgICAgICAgc3RhdGljX2Nh
c3Q8dW5zaWduZWQgbG9uZyBsb25nPihyZWFkZXIuTGFzdFJlY29yZE9mZnNldCgpKSk7CisgICAg
KCpmdW5jKShyZWNvcmQpOworICB9CisgIGRlbGV0ZSBmaWxlOworICByZXR1cm4gdHJ1ZTsKK30K
KworLy8gQ2FsbGVkIG9uIGV2ZXJ5IGl0ZW0gZm91bmQgaW4gYSBXcml0ZUJhdGNoLgorY2xhc3Mg
V3JpdGVCYXRjaEl0ZW1QcmludGVyIDogcHVibGljIFdyaXRlQmF0Y2g6OkhhbmRsZXIgeworIHB1
YmxpYzoKKyAgdWludDY0X3Qgb2Zmc2V0XzsKKyAgdWludDY0X3Qgc2VxdWVuY2VfOworCisgIHZp
cnR1YWwgdm9pZCBQdXQoY29uc3QgU2xpY2UmIGtleSwgY29uc3QgU2xpY2UmIHZhbHVlKSB7Cisg
ICAgcHJpbnRmKCIgIHB1dCAnJXMnICclcydcbiIsCisgICAgICAgICAgIEVzY2FwZVN0cmluZyhr
ZXkpLmNfc3RyKCksCisgICAgICAgICAgIEVzY2FwZVN0cmluZyh2YWx1ZSkuY19zdHIoKSk7Cisg
IH0KKyAgdmlydHVhbCB2b2lkIERlbGV0ZShjb25zdCBTbGljZSYga2V5KSB7CisgICAgcHJpbnRm
KCIgIGRlbCAnJXMnXG4iLAorICAgICAgICAgICBFc2NhcGVTdHJpbmcoa2V5KS5jX3N0cigpKTsK
KyAgfQorfTsKKworCisvLyBDYWxsZWQgb24gZXZlcnkgbG9nIHJlY29yZCAoZWFjaCBvbmUgb2Yg
d2hpY2ggaXMgYSBXcml0ZUJhdGNoKQorLy8gZm91bmQgaW4gYSBrTG9nRmlsZS4KK3N0YXRpYyB2
b2lkIFdyaXRlQmF0Y2hQcmludGVyKFNsaWNlIHJlY29yZCkgeworICBpZiAocmVjb3JkLnNpemUo
KSA8IDEyKSB7CisgICAgcHJpbnRmKCJsb2cgcmVjb3JkIGxlbmd0aCAlZCBpcyB0b28gc21hbGxc
biIsCisgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4ocmVjb3JkLnNpemUoKSkpOworICAgIHJl
dHVybjsKKyAgfQorICBXcml0ZUJhdGNoIGJhdGNoOworICBXcml0ZUJhdGNoSW50ZXJuYWw6OlNl
dENvbnRlbnRzKCZiYXRjaCwgcmVjb3JkKTsKKyAgcHJpbnRmKCJzZXF1ZW5jZSAlbGx1XG4iLAor
ICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihXcml0ZUJhdGNoSW50ZXJu
YWw6OlNlcXVlbmNlKCZiYXRjaCkpKTsKKyAgV3JpdGVCYXRjaEl0ZW1QcmludGVyIGJhdGNoX2l0
ZW1fcHJpbnRlcjsKKyAgU3RhdHVzIHMgPSBiYXRjaC5JdGVyYXRlKCZiYXRjaF9pdGVtX3ByaW50
ZXIpOworICBpZiAoIXMub2soKSkgeworICAgIHByaW50ZigiICBlcnJvcjogJXNcbiIsIHMuVG9T
dHJpbmcoKS5jX3N0cigpKTsKKyAgfQorfQorCitib29sIER1bXBMb2coRW52KiBlbnYsIGNvbnN0
IHN0ZDo6c3RyaW5nJiBmbmFtZSkgeworICByZXR1cm4gUHJpbnRMb2dDb250ZW50cyhlbnYsIGZu
YW1lLCBXcml0ZUJhdGNoUHJpbnRlcik7Cit9CisKKy8vIENhbGxlZCBvbiBldmVyeSBsb2cgcmVj
b3JkIChlYWNoIG9uZSBvZiB3aGljaCBpcyBhIFdyaXRlQmF0Y2gpCisvLyBmb3VuZCBpbiBhIGtE
ZXNjcmlwdG9yRmlsZS4KK3N0YXRpYyB2b2lkIFZlcnNpb25FZGl0UHJpbnRlcihTbGljZSByZWNv
cmQpIHsKKyAgVmVyc2lvbkVkaXQgZWRpdDsKKyAgU3RhdHVzIHMgPSBlZGl0LkRlY29kZUZyb20o
cmVjb3JkKTsKKyAgaWYgKCFzLm9rKCkpIHsKKyAgICBwcmludGYoIiVzXG4iLCBzLlRvU3RyaW5n
KCkuY19zdHIoKSk7CisgICAgcmV0dXJuOworICB9CisgIHByaW50ZigiJXMiLCBlZGl0LkRlYnVn
U3RyaW5nKCkuY19zdHIoKSk7Cit9CisKK2Jvb2wgRHVtcERlc2NyaXB0b3IoRW52KiBlbnYsIGNv
bnN0IHN0ZDo6c3RyaW5nJiBmbmFtZSkgeworICByZXR1cm4gUHJpbnRMb2dDb250ZW50cyhlbnYs
IGZuYW1lLCBWZXJzaW9uRWRpdFByaW50ZXIpOworfQorCitib29sIER1bXBUYWJsZShFbnYqIGVu
diwgY29uc3Qgc3RkOjpzdHJpbmcmIGZuYW1lKSB7CisgIHVpbnQ2NF90IGZpbGVfc2l6ZTsKKyAg
UmFuZG9tQWNjZXNzRmlsZSogZmlsZSA9IE5VTEw7CisgIFRhYmxlKiB0YWJsZSA9IE5VTEw7Cisg
IFN0YXR1cyBzID0gZW52LT5HZXRGaWxlU2l6ZShmbmFtZSwgJmZpbGVfc2l6ZSk7CisgIGlmIChz
Lm9rKCkpIHsKKyAgICBzID0gZW52LT5OZXdSYW5kb21BY2Nlc3NGaWxlKGZuYW1lLCAmZmlsZSk7
CisgIH0KKyAgaWYgKHMub2soKSkgeworICAgIC8vIFdlIHVzZSB0aGUgZGVmYXVsdCBjb21wYXJh
dG9yLCB3aGljaCBtYXkgb3IgbWF5IG5vdCBtYXRjaCB0aGUKKyAgICAvLyBjb21wYXJhdG9yIHVz
ZWQgaW4gdGhpcyBkYXRhYmFzZS4gSG93ZXZlciB0aGlzIHNob3VsZCBub3QgY2F1c2UKKyAgICAv
LyBwcm9ibGVtcyBzaW5jZSB3ZSBvbmx5IHVzZSBUYWJsZSBvcGVyYXRpb25zIHRoYXQgZG8gbm90
IHJlcXVpcmUKKyAgICAvLyBhbnkgY29tcGFyaXNvbnMuICBJbiBwYXJ0aWN1bGFyLCB3ZSBkbyBu
b3QgY2FsbCBTZWVrIG9yIFByZXYuCisgICAgcyA9IFRhYmxlOjpPcGVuKE9wdGlvbnMoKSwgZmls
ZSwgZmlsZV9zaXplLCAmdGFibGUpOworICB9CisgIGlmICghcy5vaygpKSB7CisgICAgZnByaW50
ZihzdGRlcnIsICIlc1xuIiwgcy5Ub1N0cmluZygpLmNfc3RyKCkpOworICAgIGRlbGV0ZSB0YWJs
ZTsKKyAgICBkZWxldGUgZmlsZTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICBSZWFkT3B0
aW9ucyBybzsKKyAgcm8uZmlsbF9jYWNoZSA9IGZhbHNlOworICBJdGVyYXRvciogaXRlciA9IHRh
YmxlLT5OZXdJdGVyYXRvcihybyk7CisgIGZvciAoaXRlci0+U2Vla1RvRmlyc3QoKTsgaXRlci0+
VmFsaWQoKTsgaXRlci0+TmV4dCgpKSB7CisgICAgUGFyc2VkSW50ZXJuYWxLZXkga2V5OworICAg
IGlmICghUGFyc2VJbnRlcm5hbEtleShpdGVyLT5rZXkoKSwgJmtleSkpIHsKKyAgICAgIHByaW50
ZigiYmFka2V5ICclcycgPT4gJyVzJ1xuIiwKKyAgICAgICAgICAgICBFc2NhcGVTdHJpbmcoaXRl
ci0+a2V5KCkpLmNfc3RyKCksCisgICAgICAgICAgICAgRXNjYXBlU3RyaW5nKGl0ZXItPnZhbHVl
KCkpLmNfc3RyKCkpOworICAgIH0gZWxzZSB7CisgICAgICBjaGFyIGtidWZbMjBdOworICAgICAg
Y29uc3QgY2hhciogdHlwZTsKKyAgICAgIGlmIChrZXkudHlwZSA9PSBrVHlwZURlbGV0aW9uKSB7
CisgICAgICAgIHR5cGUgPSAiZGVsIjsKKyAgICAgIH0gZWxzZSBpZiAoa2V5LnR5cGUgPT0ga1R5
cGVWYWx1ZSkgeworICAgICAgICB0eXBlID0gInZhbCI7CisgICAgICB9IGVsc2UgeworICAgICAg
ICBzbnByaW50ZihrYnVmLCBzaXplb2Yoa2J1ZiksICIlZCIsIHN0YXRpY19jYXN0PGludD4oa2V5
LnR5cGUpKTsKKyAgICAgICAgdHlwZSA9IGtidWY7CisgICAgICB9CisgICAgICBwcmludGYoIicl
cycgQCAlOGxsdSA6ICVzID0+ICclcydcbiIsCisgICAgICAgICAgICAgRXNjYXBlU3RyaW5nKGtl
eS51c2VyX2tleSkuY19zdHIoKSwKKyAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZCBs
b25nIGxvbmc+KGtleS5zZXF1ZW5jZSksCisgICAgICAgICAgICAgdHlwZSwKKyAgICAgICAgICAg
ICBFc2NhcGVTdHJpbmcoaXRlci0+dmFsdWUoKSkuY19zdHIoKSk7CisgICAgfQorICB9CisgIHMg
PSBpdGVyLT5zdGF0dXMoKTsKKyAgaWYgKCFzLm9rKCkpIHsKKyAgICBwcmludGYoIml0ZXJhdG9y
IGVycm9yOiAlc1xuIiwgcy5Ub1N0cmluZygpLmNfc3RyKCkpOworICB9CisKKyAgZGVsZXRlIGl0
ZXI7CisgIGRlbGV0ZSB0YWJsZTsKKyAgZGVsZXRlIGZpbGU7CisgIHJldHVybiB0cnVlOworfQor
Citib29sIER1bXBGaWxlKEVudiogZW52LCBjb25zdCBzdGQ6OnN0cmluZyYgZm5hbWUpIHsKKyAg
RmlsZVR5cGUgZnR5cGU7CisgIGlmICghR3Vlc3NUeXBlKGZuYW1lLCAmZnR5cGUpKSB7CisgICAg
ZnByaW50ZihzdGRlcnIsICIlczogdW5rbm93biBmaWxlIHR5cGVcbiIsIGZuYW1lLmNfc3RyKCkp
OworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICBzd2l0Y2ggKGZ0eXBlKSB7CisgICAgY2FzZSBr
TG9nRmlsZTogICAgICAgICByZXR1cm4gRHVtcExvZyhlbnYsIGZuYW1lKTsKKyAgICBjYXNlIGtE
ZXNjcmlwdG9yRmlsZTogIHJldHVybiBEdW1wRGVzY3JpcHRvcihlbnYsIGZuYW1lKTsKKyAgICBj
YXNlIGtUYWJsZUZpbGU6ICAgICAgIHJldHVybiBEdW1wVGFibGUoZW52LCBmbmFtZSk7CisKKyAg
ICBkZWZhdWx0OiB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBub3QgYSBkdW1wLWFibGUg
ZmlsZSB0eXBlXG4iLCBmbmFtZS5jX3N0cigpKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQor
ICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSGFuZGxlRHVtcENvbW1hbmQoRW52KiBlbnYsIGNo
YXIqKiBmaWxlcywgaW50IG51bSkgeworICBib29sIG9rID0gdHJ1ZTsKKyAgZm9yIChpbnQgaSA9
IDA7IGkgPCBudW07IGkrKykgeworICAgIG9rICY9IER1bXBGaWxlKGVudiwgZmlsZXNbaV0pOwor
ICB9CisgIHJldHVybiBvazsKK30KKworfQorfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKKworc3Rh
dGljIHZvaWQgVXNhZ2UoKSB7CisgIGZwcmludGYoCisgICAgICBzdGRlcnIsCisgICAgICAiVXNh
Z2U6IGxldmVsZGJ1dGlsIGNvbW1hbmQuLi5cbiIKKyAgICAgICIgICBkdW1wIGZpbGVzLi4uICAg
ICAgICAgLS0gZHVtcCBjb250ZW50cyBvZiBzcGVjaWZpZWQgZmlsZXNcbiIKKyAgICAgICk7Cit9
CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikgeworICBsZXZlbGRiOjpFbnYqIGVu
diA9IGxldmVsZGI6OkVudjo6RGVmYXVsdCgpOworICBib29sIG9rID0gdHJ1ZTsKKyAgaWYgKGFy
Z2MgPCAyKSB7CisgICAgVXNhZ2UoKTsKKyAgICBvayA9IGZhbHNlOworICB9IGVsc2UgeworICAg
IHN0ZDo6c3RyaW5nIGNvbW1hbmQgPSBhcmd2WzFdOworICAgIGlmIChjb21tYW5kID09ICJkdW1w
IikgeworICAgICAgb2sgPSBsZXZlbGRiOjpIYW5kbGVEdW1wQ29tbWFuZChlbnYsIGFyZ3YrMiwg
YXJnYy0yKTsKKyAgICB9IGVsc2UgeworICAgICAgVXNhZ2UoKTsKKyAgICAgIG9rID0gZmFsc2U7
CisgICAgfQorICB9CisgIHJldHVybiAob2sgPyAwIDogMSk7Cit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2xvZ19mb3JtYXQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xldmVsZGIvZGIvbG9nX2Zvcm1hdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI2OTBjYjk3ODllZTYzZTg1MjYw
NTAwYTY3MzZlYzMwMmQyMmY5YjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9sZXZlbGRiL2RiL2xvZ19mb3JtYXQuaApAQCAtMCwwICsxLDM1IEBACisvLyBDb3B5cmlnaHQg
KGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9S
UyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCisvLworLy8gTG9nIGZvcm1hdCBpbmZv
cm1hdGlvbiBzaGFyZWQgYnkgcmVhZGVyIGFuZCB3cml0ZXIuCisvLyBTZWUgLi4vZG9jL2xvZ19m
b3JtYXQudHh0IGZvciBtb3JlIGRldGFpbC4KKworI2lmbmRlZiBTVE9SQUdFX0xFVkVMREJfREJf
TE9HX0ZPUk1BVF9IXworI2RlZmluZSBTVE9SQUdFX0xFVkVMREJfREJfTE9HX0ZPUk1BVF9IXwor
CituYW1lc3BhY2UgbGV2ZWxkYiB7CituYW1lc3BhY2UgbG9nIHsKKworZW51bSBSZWNvcmRUeXBl
IHsKKyAgLy8gWmVybyBpcyByZXNlcnZlZCBmb3IgcHJlYWxsb2NhdGVkIGZpbGVzCisgIGtaZXJv
VHlwZSA9IDAsCisKKyAga0Z1bGxUeXBlID0gMSwKKworICAvLyBGb3IgZnJhZ21lbnRzCisgIGtG
aXJzdFR5cGUgPSAyLAorICBrTWlkZGxlVHlwZSA9IDMsCisgIGtMYXN0VHlwZSA9IDQKK307Citz
dGF0aWMgY29uc3QgaW50IGtNYXhSZWNvcmRUeXBlID0ga0xhc3RUeXBlOworCitzdGF0aWMgY29u
c3QgaW50IGtCbG9ja1NpemUgPSAzMjc2ODsKKworLy8gSGVhZGVyIGlzIGNoZWNrc3VtICg0IGJ5
dGVzKSwgdHlwZSAoMSBieXRlKSwgbGVuZ3RoICgyIGJ5dGVzKS4KK3N0YXRpYyBjb25zdCBpbnQg
a0hlYWRlclNpemUgPSA0ICsgMSArIDI7CisKK30gIC8vIG5hbWVzcGFjZSBsb2cKK30gIC8vIG5h
bWVzcGFjZSBsZXZlbGRiCisKKyNlbmRpZiAgLy8gU1RPUkFHRV9MRVZFTERCX0RCX0xPR19GT1JN
QVRfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvbG9nX3JlYWRl
ci5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvbG9nX3JlYWRlci5jYwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5iMzVmMTE1YWFkYWMyODA1NWIxNmZjZTZmMTMzYmQ1MTQ4ZWNlYzE2Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9sb2dfcmVhZGVyLmNjCkBAIC0w
LDAgKzEsMjU5IEBACisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRv
cnMuCisKKyNpbmNsdWRlICJkYi9sb2dfcmVhZGVyLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgor
I2luY2x1ZGUgImxldmVsZGIvZW52LmgiCisjaW5jbHVkZSAidXRpbC9jb2RpbmcuaCIKKyNpbmNs
dWRlICJ1dGlsL2NyYzMyYy5oIgorCituYW1lc3BhY2UgbGV2ZWxkYiB7CituYW1lc3BhY2UgbG9n
IHsKKworUmVhZGVyOjpSZXBvcnRlcjo6flJlcG9ydGVyKCkgeworfQorCitSZWFkZXI6OlJlYWRl
cihTZXF1ZW50aWFsRmlsZSogZmlsZSwgUmVwb3J0ZXIqIHJlcG9ydGVyLCBib29sIGNoZWNrc3Vt
LAorICAgICAgICAgICAgICAgdWludDY0X3QgaW5pdGlhbF9vZmZzZXQpCisgICAgOiBmaWxlXyhm
aWxlKSwKKyAgICAgIHJlcG9ydGVyXyhyZXBvcnRlciksCisgICAgICBjaGVja3N1bV8oY2hlY2tz
dW0pLAorICAgICAgYmFja2luZ19zdG9yZV8obmV3IGNoYXJba0Jsb2NrU2l6ZV0pLAorICAgICAg
YnVmZmVyXygpLAorICAgICAgZW9mXyhmYWxzZSksCisgICAgICBsYXN0X3JlY29yZF9vZmZzZXRf
KDApLAorICAgICAgZW5kX29mX2J1ZmZlcl9vZmZzZXRfKDApLAorICAgICAgaW5pdGlhbF9vZmZz
ZXRfKGluaXRpYWxfb2Zmc2V0KSB7Cit9CisKK1JlYWRlcjo6flJlYWRlcigpIHsKKyAgZGVsZXRl
W10gYmFja2luZ19zdG9yZV87Cit9CisKK2Jvb2wgUmVhZGVyOjpTa2lwVG9Jbml0aWFsQmxvY2so
KSB7CisgIHNpemVfdCBvZmZzZXRfaW5fYmxvY2sgPSBpbml0aWFsX29mZnNldF8gJSBrQmxvY2tT
aXplOworICB1aW50NjRfdCBibG9ja19zdGFydF9sb2NhdGlvbiA9IGluaXRpYWxfb2Zmc2V0XyAt
IG9mZnNldF9pbl9ibG9jazsKKworICAvLyBEb24ndCBzZWFyY2ggYSBibG9jayBpZiB3ZSdkIGJl
IGluIHRoZSB0cmFpbGVyCisgIGlmIChvZmZzZXRfaW5fYmxvY2sgPiBrQmxvY2tTaXplIC0gNikg
eworICAgIG9mZnNldF9pbl9ibG9jayA9IDA7CisgICAgYmxvY2tfc3RhcnRfbG9jYXRpb24gKz0g
a0Jsb2NrU2l6ZTsKKyAgfQorCisgIGVuZF9vZl9idWZmZXJfb2Zmc2V0XyA9IGJsb2NrX3N0YXJ0
X2xvY2F0aW9uOworCisgIC8vIFNraXAgdG8gc3RhcnQgb2YgZmlyc3QgYmxvY2sgdGhhdCBjYW4g
Y29udGFpbiB0aGUgaW5pdGlhbCByZWNvcmQKKyAgaWYgKGJsb2NrX3N0YXJ0X2xvY2F0aW9uID4g
MCkgeworICAgIFN0YXR1cyBza2lwX3N0YXR1cyA9IGZpbGVfLT5Ta2lwKGJsb2NrX3N0YXJ0X2xv
Y2F0aW9uKTsKKyAgICBpZiAoIXNraXBfc3RhdHVzLm9rKCkpIHsKKyAgICAgIFJlcG9ydERyb3Ao
YmxvY2tfc3RhcnRfbG9jYXRpb24sIHNraXBfc3RhdHVzKTsKKyAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgIH0KKworICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZWFkZXI6OlJlYWRSZWNv
cmQoU2xpY2UqIHJlY29yZCwgc3RkOjpzdHJpbmcqIHNjcmF0Y2gpIHsKKyAgaWYgKGxhc3RfcmVj
b3JkX29mZnNldF8gPCBpbml0aWFsX29mZnNldF8pIHsKKyAgICBpZiAoIVNraXBUb0luaXRpYWxC
bG9jaygpKSB7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICB9CisKKyAgc2NyYXRjaC0+
Y2xlYXIoKTsKKyAgcmVjb3JkLT5jbGVhcigpOworICBib29sIGluX2ZyYWdtZW50ZWRfcmVjb3Jk
ID0gZmFsc2U7CisgIC8vIFJlY29yZCBvZmZzZXQgb2YgdGhlIGxvZ2ljYWwgcmVjb3JkIHRoYXQg
d2UncmUgcmVhZGluZworICAvLyAwIGlzIGEgZHVtbXkgdmFsdWUgdG8gbWFrZSBjb21waWxlcnMg
aGFwcHkKKyAgdWludDY0X3QgcHJvc3BlY3RpdmVfcmVjb3JkX29mZnNldCA9IDA7CisKKyAgU2xp
Y2UgZnJhZ21lbnQ7CisgIHdoaWxlICh0cnVlKSB7CisgICAgdWludDY0X3QgcGh5c2ljYWxfcmVj
b3JkX29mZnNldCA9IGVuZF9vZl9idWZmZXJfb2Zmc2V0XyAtIGJ1ZmZlcl8uc2l6ZSgpOworICAg
IGNvbnN0IHVuc2lnbmVkIGludCByZWNvcmRfdHlwZSA9IFJlYWRQaHlzaWNhbFJlY29yZCgmZnJh
Z21lbnQpOworICAgIHN3aXRjaCAocmVjb3JkX3R5cGUpIHsKKyAgICAgIGNhc2Uga0Z1bGxUeXBl
OgorICAgICAgICBpZiAoaW5fZnJhZ21lbnRlZF9yZWNvcmQpIHsKKyAgICAgICAgICAvLyBIYW5k
bGUgYnVnIGluIGVhcmxpZXIgdmVyc2lvbnMgb2YgbG9nOjpXcml0ZXIgd2hlcmUKKyAgICAgICAg
ICAvLyBpdCBjb3VsZCBlbWl0IGFuIGVtcHR5IGtGaXJzdFR5cGUgcmVjb3JkIGF0IHRoZSB0YWls
IGVuZAorICAgICAgICAgIC8vIG9mIGEgYmxvY2sgZm9sbG93ZWQgYnkgYSBrRnVsbFR5cGUgb3Ig
a0ZpcnN0VHlwZSByZWNvcmQKKyAgICAgICAgICAvLyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBu
ZXh0IGJsb2NrLgorICAgICAgICAgIGlmIChzY3JhdGNoLT5lbXB0eSgpKSB7CisgICAgICAgICAg
ICBpbl9mcmFnbWVudGVkX3JlY29yZCA9IGZhbHNlOworICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBSZXBvcnRDb3JydXB0aW9uKHNjcmF0Y2gtPnNpemUoKSwgInBhcnRpYWwgcmVjb3Jk
IHdpdGhvdXQgZW5kKDEpIik7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHByb3Nw
ZWN0aXZlX3JlY29yZF9vZmZzZXQgPSBwaHlzaWNhbF9yZWNvcmRfb2Zmc2V0OworICAgICAgICBz
Y3JhdGNoLT5jbGVhcigpOworICAgICAgICAqcmVjb3JkID0gZnJhZ21lbnQ7CisgICAgICAgIGxh
c3RfcmVjb3JkX29mZnNldF8gPSBwcm9zcGVjdGl2ZV9yZWNvcmRfb2Zmc2V0OworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgICAgY2FzZSBrRmlyc3RUeXBlOgorICAgICAgICBpZiAoaW5fZnJh
Z21lbnRlZF9yZWNvcmQpIHsKKyAgICAgICAgICAvLyBIYW5kbGUgYnVnIGluIGVhcmxpZXIgdmVy
c2lvbnMgb2YgbG9nOjpXcml0ZXIgd2hlcmUKKyAgICAgICAgICAvLyBpdCBjb3VsZCBlbWl0IGFu
IGVtcHR5IGtGaXJzdFR5cGUgcmVjb3JkIGF0IHRoZSB0YWlsIGVuZAorICAgICAgICAgIC8vIG9m
IGEgYmxvY2sgZm9sbG93ZWQgYnkgYSBrRnVsbFR5cGUgb3Iga0ZpcnN0VHlwZSByZWNvcmQKKyAg
ICAgICAgICAvLyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0IGJsb2NrLgorICAgICAgICAg
IGlmIChzY3JhdGNoLT5lbXB0eSgpKSB7CisgICAgICAgICAgICBpbl9mcmFnbWVudGVkX3JlY29y
ZCA9IGZhbHNlOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBSZXBvcnRDb3JydXB0
aW9uKHNjcmF0Y2gtPnNpemUoKSwgInBhcnRpYWwgcmVjb3JkIHdpdGhvdXQgZW5kKDIpIik7Cisg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHByb3NwZWN0aXZlX3JlY29yZF9vZmZzZXQg
PSBwaHlzaWNhbF9yZWNvcmRfb2Zmc2V0OworICAgICAgICBzY3JhdGNoLT5hc3NpZ24oZnJhZ21l
bnQuZGF0YSgpLCBmcmFnbWVudC5zaXplKCkpOworICAgICAgICBpbl9mcmFnbWVudGVkX3JlY29y
ZCA9IHRydWU7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIGtNaWRkbGVUeXBlOgorICAg
ICAgICBpZiAoIWluX2ZyYWdtZW50ZWRfcmVjb3JkKSB7CisgICAgICAgICAgUmVwb3J0Q29ycnVw
dGlvbihmcmFnbWVudC5zaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAibWlzc2lu
ZyBzdGFydCBvZiBmcmFnbWVudGVkIHJlY29yZCgxKSIpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgIHNjcmF0Y2gtPmFwcGVuZChmcmFnbWVudC5kYXRhKCksIGZyYWdtZW50LnNpemUoKSk7
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2Uga0xhc3RUeXBlOgorICAg
ICAgICBpZiAoIWluX2ZyYWdtZW50ZWRfcmVjb3JkKSB7CisgICAgICAgICAgUmVwb3J0Q29ycnVw
dGlvbihmcmFnbWVudC5zaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAibWlzc2lu
ZyBzdGFydCBvZiBmcmFnbWVudGVkIHJlY29yZCgyKSIpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgIHNjcmF0Y2gtPmFwcGVuZChmcmFnbWVudC5kYXRhKCksIGZyYWdtZW50LnNpemUoKSk7
CisgICAgICAgICAgKnJlY29yZCA9IFNsaWNlKCpzY3JhdGNoKTsKKyAgICAgICAgICBsYXN0X3Jl
Y29yZF9vZmZzZXRfID0gcHJvc3BlY3RpdmVfcmVjb3JkX29mZnNldDsKKyAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBrRW9mOgor
ICAgICAgICBpZiAoaW5fZnJhZ21lbnRlZF9yZWNvcmQpIHsKKyAgICAgICAgICBSZXBvcnRDb3Jy
dXB0aW9uKHNjcmF0Y2gtPnNpemUoKSwgInBhcnRpYWwgcmVjb3JkIHdpdGhvdXQgZW5kKDMpIik7
CisgICAgICAgICAgc2NyYXRjaC0+Y2xlYXIoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgIGNhc2Uga0JhZFJlY29yZDoKKyAgICAgICAgaWYgKGluX2ZyYWdtZW50
ZWRfcmVjb3JkKSB7CisgICAgICAgICAgUmVwb3J0Q29ycnVwdGlvbihzY3JhdGNoLT5zaXplKCks
ICJlcnJvciBpbiBtaWRkbGUgb2YgcmVjb3JkIik7CisgICAgICAgICAgaW5fZnJhZ21lbnRlZF9y
ZWNvcmQgPSBmYWxzZTsKKyAgICAgICAgICBzY3JhdGNoLT5jbGVhcigpOworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0OiB7CisgICAgICAgIGNoYXIgYnVmWzQwXTsK
KyAgICAgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgInVua25vd24gcmVjb3JkIHR5cGUg
JXUiLCByZWNvcmRfdHlwZSk7CisgICAgICAgIFJlcG9ydENvcnJ1cHRpb24oCisgICAgICAgICAg
ICAoZnJhZ21lbnQuc2l6ZSgpICsgKGluX2ZyYWdtZW50ZWRfcmVjb3JkID8gc2NyYXRjaC0+c2l6
ZSgpIDogMCkpLAorICAgICAgICAgICAgYnVmKTsKKyAgICAgICAgaW5fZnJhZ21lbnRlZF9yZWNv
cmQgPSBmYWxzZTsKKyAgICAgICAgc2NyYXRjaC0+Y2xlYXIoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICB9CisgICAgfQorICB9CisgIHJldHVybiBmYWxzZTsKK30KKwordWludDY0X3QgUmVhZGVy
OjpMYXN0UmVjb3JkT2Zmc2V0KCkgeworICByZXR1cm4gbGFzdF9yZWNvcmRfb2Zmc2V0XzsKK30K
Kwordm9pZCBSZWFkZXI6OlJlcG9ydENvcnJ1cHRpb24oc2l6ZV90IGJ5dGVzLCBjb25zdCBjaGFy
KiByZWFzb24pIHsKKyAgUmVwb3J0RHJvcChieXRlcywgU3RhdHVzOjpDb3JydXB0aW9uKHJlYXNv
bikpOworfQorCit2b2lkIFJlYWRlcjo6UmVwb3J0RHJvcChzaXplX3QgYnl0ZXMsIGNvbnN0IFN0
YXR1cyYgcmVhc29uKSB7CisgIGlmIChyZXBvcnRlcl8gIT0gTlVMTCAmJgorICAgICAgZW5kX29m
X2J1ZmZlcl9vZmZzZXRfIC0gYnVmZmVyXy5zaXplKCkgLSBieXRlcyA+PSBpbml0aWFsX29mZnNl
dF8pIHsKKyAgICByZXBvcnRlcl8tPkNvcnJ1cHRpb24oYnl0ZXMsIHJlYXNvbik7CisgIH0KK30K
KwordW5zaWduZWQgaW50IFJlYWRlcjo6UmVhZFBoeXNpY2FsUmVjb3JkKFNsaWNlKiByZXN1bHQp
IHsKKyAgd2hpbGUgKHRydWUpIHsKKyAgICBpZiAoYnVmZmVyXy5zaXplKCkgPCBrSGVhZGVyU2l6
ZSkgeworICAgICAgaWYgKCFlb2ZfKSB7CisgICAgICAgIC8vIExhc3QgcmVhZCB3YXMgYSBmdWxs
IHJlYWQsIHNvIHRoaXMgaXMgYSB0cmFpbGVyIHRvIHNraXAKKyAgICAgICAgYnVmZmVyXy5jbGVh
cigpOworICAgICAgICBTdGF0dXMgc3RhdHVzID0gZmlsZV8tPlJlYWQoa0Jsb2NrU2l6ZSwgJmJ1
ZmZlcl8sIGJhY2tpbmdfc3RvcmVfKTsKKyAgICAgICAgZW5kX29mX2J1ZmZlcl9vZmZzZXRfICs9
IGJ1ZmZlcl8uc2l6ZSgpOworICAgICAgICBpZiAoIXN0YXR1cy5vaygpKSB7CisgICAgICAgICAg
YnVmZmVyXy5jbGVhcigpOworICAgICAgICAgIFJlcG9ydERyb3Aoa0Jsb2NrU2l6ZSwgc3RhdHVz
KTsKKyAgICAgICAgICBlb2ZfID0gdHJ1ZTsKKyAgICAgICAgICByZXR1cm4ga0VvZjsKKyAgICAg
ICAgfSBlbHNlIGlmIChidWZmZXJfLnNpemUoKSA8IGtCbG9ja1NpemUpIHsKKyAgICAgICAgICBl
b2ZfID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBjb250aW51ZTsKKyAgICAgIH0gZWxzZSBp
ZiAoYnVmZmVyXy5zaXplKCkgPT0gMCkgeworICAgICAgICAvLyBFbmQgb2YgZmlsZQorICAgICAg
ICByZXR1cm4ga0VvZjsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHNpemVfdCBkcm9wX3NpemUg
PSBidWZmZXJfLnNpemUoKTsKKyAgICAgICAgYnVmZmVyXy5jbGVhcigpOworICAgICAgICBSZXBv
cnRDb3JydXB0aW9uKGRyb3Bfc2l6ZSwgInRydW5jYXRlZCByZWNvcmQgYXQgZW5kIG9mIGZpbGUi
KTsKKyAgICAgICAgcmV0dXJuIGtFb2Y7CisgICAgICB9CisgICAgfQorCisgICAgLy8gUGFyc2Ug
dGhlIGhlYWRlcgorICAgIGNvbnN0IGNoYXIqIGhlYWRlciA9IGJ1ZmZlcl8uZGF0YSgpOworICAg
IGNvbnN0IHVpbnQzMl90IGEgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oaGVhZGVyWzRdKSAmIDB4
ZmY7CisgICAgY29uc3QgdWludDMyX3QgYiA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihoZWFkZXJb
NV0pICYgMHhmZjsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgdHlwZSA9IGhlYWRlcls2XTsKKyAg
ICBjb25zdCB1aW50MzJfdCBsZW5ndGggPSBhIHwgKGIgPDwgOCk7CisgICAgaWYgKGtIZWFkZXJT
aXplICsgbGVuZ3RoID4gYnVmZmVyXy5zaXplKCkpIHsKKyAgICAgIHNpemVfdCBkcm9wX3NpemUg
PSBidWZmZXJfLnNpemUoKTsKKyAgICAgIGJ1ZmZlcl8uY2xlYXIoKTsKKyAgICAgIFJlcG9ydENv
cnJ1cHRpb24oZHJvcF9zaXplLCAiYmFkIHJlY29yZCBsZW5ndGgiKTsKKyAgICAgIHJldHVybiBr
QmFkUmVjb3JkOworICAgIH0KKworICAgIGlmICh0eXBlID09IGtaZXJvVHlwZSAmJiBsZW5ndGgg
PT0gMCkgeworICAgICAgLy8gU2tpcCB6ZXJvIGxlbmd0aCByZWNvcmQgd2l0aG91dCByZXBvcnRp
bmcgYW55IGRyb3BzIHNpbmNlCisgICAgICAvLyBzdWNoIHJlY29yZHMgYXJlIHByb2R1Y2VkIGJ5
IHRoZSBtbWFwIGJhc2VkIHdyaXRpbmcgY29kZSBpbgorICAgICAgLy8gZW52X3Bvc2l4LmNjIHRo
YXQgcHJlYWxsb2NhdGVzIGZpbGUgcmVnaW9ucy4KKyAgICAgIGJ1ZmZlcl8uY2xlYXIoKTsKKyAg
ICAgIHJldHVybiBrQmFkUmVjb3JkOworICAgIH0KKworICAgIC8vIENoZWNrIGNyYworICAgIGlm
IChjaGVja3N1bV8pIHsKKyAgICAgIHVpbnQzMl90IGV4cGVjdGVkX2NyYyA9IGNyYzMyYzo6VW5t
YXNrKERlY29kZUZpeGVkMzIoaGVhZGVyKSk7CisgICAgICB1aW50MzJfdCBhY3R1YWxfY3JjID0g
Y3JjMzJjOjpWYWx1ZShoZWFkZXIgKyA2LCAxICsgbGVuZ3RoKTsKKyAgICAgIGlmIChhY3R1YWxf
Y3JjICE9IGV4cGVjdGVkX2NyYykgeworICAgICAgICAvLyBEcm9wIHRoZSByZXN0IG9mIHRoZSBi
dWZmZXIgc2luY2UgImxlbmd0aCIgaXRzZWxmIG1heSBoYXZlCisgICAgICAgIC8vIGJlZW4gY29y
cnVwdGVkIGFuZCBpZiB3ZSB0cnVzdCBpdCwgd2UgY291bGQgZmluZCBzb21lCisgICAgICAgIC8v
IGZyYWdtZW50IG9mIGEgcmVhbCBsb2cgcmVjb3JkIHRoYXQganVzdCBoYXBwZW5zIHRvIGxvb2sK
KyAgICAgICAgLy8gbGlrZSBhIHZhbGlkIGxvZyByZWNvcmQuCisgICAgICAgIHNpemVfdCBkcm9w
X3NpemUgPSBidWZmZXJfLnNpemUoKTsKKyAgICAgICAgYnVmZmVyXy5jbGVhcigpOworICAgICAg
ICBSZXBvcnRDb3JydXB0aW9uKGRyb3Bfc2l6ZSwgImNoZWNrc3VtIG1pc21hdGNoIik7CisgICAg
ICAgIHJldHVybiBrQmFkUmVjb3JkOworICAgICAgfQorICAgIH0KKworICAgIGJ1ZmZlcl8ucmVt
b3ZlX3ByZWZpeChrSGVhZGVyU2l6ZSArIGxlbmd0aCk7CisKKyAgICAvLyBTa2lwIHBoeXNpY2Fs
IHJlY29yZCB0aGF0IHN0YXJ0ZWQgYmVmb3JlIGluaXRpYWxfb2Zmc2V0XworICAgIGlmIChlbmRf
b2ZfYnVmZmVyX29mZnNldF8gLSBidWZmZXJfLnNpemUoKSAtIGtIZWFkZXJTaXplIC0gbGVuZ3Ro
IDwKKyAgICAgICAgaW5pdGlhbF9vZmZzZXRfKSB7CisgICAgICByZXN1bHQtPmNsZWFyKCk7Cisg
ICAgICByZXR1cm4ga0JhZFJlY29yZDsKKyAgICB9CisKKyAgICAqcmVzdWx0ID0gU2xpY2UoaGVh
ZGVyICsga0hlYWRlclNpemUsIGxlbmd0aCk7CisgICAgcmV0dXJuIHR5cGU7CisgIH0KK30KKwor
fSAgLy8gbmFtZXNwYWNlIGxvZworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvbG9nX3JlYWRlci5oIGIvU291cmNlL1RoaXJk
UGFydHkvbGV2ZWxkYi9kYi9sb2dfcmVhZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODJkNGJlZTY4ZDBlZWEz
YTdmZGQyNzBlOTFiNDk1NDVhNTM2ZjQ1ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xldmVsZGIvZGIvbG9nX3JlYWRlci5oCkBAIC0wLDAgKzEsMTA4IEBACisvLyBDb3B5
cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUg
QVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCisKKyNpZm5kZWYgU1RPUkFH
RV9MRVZFTERCX0RCX0xPR19SRUFERVJfSF8KKyNkZWZpbmUgU1RPUkFHRV9MRVZFTERCX0RCX0xP
R19SRUFERVJfSF8KKworI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaW5jbHVkZSAiZGIvbG9nX2Zv
cm1hdC5oIgorI2luY2x1ZGUgImxldmVsZGIvc2xpY2UuaCIKKyNpbmNsdWRlICJsZXZlbGRiL3N0
YXR1cy5oIgorCituYW1lc3BhY2UgbGV2ZWxkYiB7CisKK2NsYXNzIFNlcXVlbnRpYWxGaWxlOwor
CituYW1lc3BhY2UgbG9nIHsKKworY2xhc3MgUmVhZGVyIHsKKyBwdWJsaWM6CisgIC8vIEludGVy
ZmFjZSBmb3IgcmVwb3J0aW5nIGVycm9ycy4KKyAgY2xhc3MgUmVwb3J0ZXIgeworICAgcHVibGlj
OgorICAgIHZpcnR1YWwgflJlcG9ydGVyKCk7CisKKyAgICAvLyBTb21lIGNvcnJ1cHRpb24gd2Fz
IGRldGVjdGVkLiAgInNpemUiIGlzIHRoZSBhcHByb3hpbWF0ZSBudW1iZXIKKyAgICAvLyBvZiBi
eXRlcyBkcm9wcGVkIGR1ZSB0byB0aGUgY29ycnVwdGlvbi4KKyAgICB2aXJ0dWFsIHZvaWQgQ29y
cnVwdGlvbihzaXplX3QgYnl0ZXMsIGNvbnN0IFN0YXR1cyYgc3RhdHVzKSA9IDA7CisgIH07CisK
KyAgLy8gQ3JlYXRlIGEgcmVhZGVyIHRoYXQgd2lsbCByZXR1cm4gbG9nIHJlY29yZHMgZnJvbSAi
KmZpbGUiLgorICAvLyAiKmZpbGUiIG11c3QgcmVtYWluIGxpdmUgd2hpbGUgdGhpcyBSZWFkZXIg
aXMgaW4gdXNlLgorICAvLworICAvLyBJZiAicmVwb3J0ZXIiIGlzIG5vbi1OVUxMLCBpdCBpcyBu
b3RpZmllZCB3aGVuZXZlciBzb21lIGRhdGEgaXMKKyAgLy8gZHJvcHBlZCBkdWUgdG8gYSBkZXRl
Y3RlZCBjb3JydXB0aW9uLiAgIipyZXBvcnRlciIgbXVzdCByZW1haW4KKyAgLy8gbGl2ZSB3aGls
ZSB0aGlzIFJlYWRlciBpcyBpbiB1c2UuCisgIC8vCisgIC8vIElmICJjaGVja3N1bSIgaXMgdHJ1
ZSwgdmVyaWZ5IGNoZWNrc3VtcyBpZiBhdmFpbGFibGUuCisgIC8vCisgIC8vIFRoZSBSZWFkZXIg
d2lsbCBzdGFydCByZWFkaW5nIGF0IHRoZSBmaXJzdCByZWNvcmQgbG9jYXRlZCBhdCBwaHlzaWNh
bAorICAvLyBwb3NpdGlvbiA+PSBpbml0aWFsX29mZnNldCB3aXRoaW4gdGhlIGZpbGUuCisgIFJl
YWRlcihTZXF1ZW50aWFsRmlsZSogZmlsZSwgUmVwb3J0ZXIqIHJlcG9ydGVyLCBib29sIGNoZWNr
c3VtLAorICAgICAgICAgdWludDY0X3QgaW5pdGlhbF9vZmZzZXQpOworCisgIH5SZWFkZXIoKTsK
KworICAvLyBSZWFkIHRoZSBuZXh0IHJlY29yZCBpbnRvICpyZWNvcmQuICBSZXR1cm5zIHRydWUg
aWYgcmVhZAorICAvLyBzdWNjZXNzZnVsbHksIGZhbHNlIGlmIHdlIGhpdCBlbmQgb2YgdGhlIGlu
cHV0LiAgTWF5IHVzZQorICAvLyAiKnNjcmF0Y2giIGFzIHRlbXBvcmFyeSBzdG9yYWdlLiAgVGhl
IGNvbnRlbnRzIGZpbGxlZCBpbiAqcmVjb3JkCisgIC8vIHdpbGwgb25seSBiZSB2YWxpZCB1bnRp
bCB0aGUgbmV4dCBtdXRhdGluZyBvcGVyYXRpb24gb24gdGhpcworICAvLyByZWFkZXIgb3IgdGhl
IG5leHQgbXV0YXRpb24gdG8gKnNjcmF0Y2guCisgIGJvb2wgUmVhZFJlY29yZChTbGljZSogcmVj
b3JkLCBzdGQ6OnN0cmluZyogc2NyYXRjaCk7CisKKyAgLy8gUmV0dXJucyB0aGUgcGh5c2ljYWwg
b2Zmc2V0IG9mIHRoZSBsYXN0IHJlY29yZCByZXR1cm5lZCBieSBSZWFkUmVjb3JkLgorICAvLwor
ICAvLyBVbmRlZmluZWQgYmVmb3JlIHRoZSBmaXJzdCBjYWxsIHRvIFJlYWRSZWNvcmQuCisgIHVp
bnQ2NF90IExhc3RSZWNvcmRPZmZzZXQoKTsKKworIHByaXZhdGU6CisgIFNlcXVlbnRpYWxGaWxl
KiBjb25zdCBmaWxlXzsKKyAgUmVwb3J0ZXIqIGNvbnN0IHJlcG9ydGVyXzsKKyAgYm9vbCBjb25z
dCBjaGVja3N1bV87CisgIGNoYXIqIGNvbnN0IGJhY2tpbmdfc3RvcmVfOworICBTbGljZSBidWZm
ZXJfOworICBib29sIGVvZl87ICAgLy8gTGFzdCBSZWFkKCkgaW5kaWNhdGVkIEVPRiBieSByZXR1
cm5pbmcgPCBrQmxvY2tTaXplCisKKyAgLy8gT2Zmc2V0IG9mIHRoZSBsYXN0IHJlY29yZCByZXR1
cm5lZCBieSBSZWFkUmVjb3JkLgorICB1aW50NjRfdCBsYXN0X3JlY29yZF9vZmZzZXRfOworICAv
LyBPZmZzZXQgb2YgdGhlIGZpcnN0IGxvY2F0aW9uIHBhc3QgdGhlIGVuZCBvZiBidWZmZXJfLgor
ICB1aW50NjRfdCBlbmRfb2ZfYnVmZmVyX29mZnNldF87CisKKyAgLy8gT2Zmc2V0IGF0IHdoaWNo
IHRvIHN0YXJ0IGxvb2tpbmcgZm9yIHRoZSBmaXJzdCByZWNvcmQgdG8gcmV0dXJuCisgIHVpbnQ2
NF90IGNvbnN0IGluaXRpYWxfb2Zmc2V0XzsKKworICAvLyBFeHRlbmQgcmVjb3JkIHR5cGVzIHdp
dGggdGhlIGZvbGxvd2luZyBzcGVjaWFsIHZhbHVlcworICBlbnVtIHsKKyAgICBrRW9mID0ga01h
eFJlY29yZFR5cGUgKyAxLAorICAgIC8vIFJldHVybmVkIHdoZW5ldmVyIHdlIGZpbmQgYW4gaW52
YWxpZCBwaHlzaWNhbCByZWNvcmQuCisgICAgLy8gQ3VycmVudGx5IHRoZXJlIGFyZSB0aHJlZSBz
aXR1YXRpb25zIGluIHdoaWNoIHRoaXMgaGFwcGVuczoKKyAgICAvLyAqIFRoZSByZWNvcmQgaGFz
IGFuIGludmFsaWQgQ1JDIChSZWFkUGh5c2ljYWxSZWNvcmQgcmVwb3J0cyBhIGRyb3ApCisgICAg
Ly8gKiBUaGUgcmVjb3JkIGlzIGEgMC1sZW5ndGggcmVjb3JkIChObyBkcm9wIGlzIHJlcG9ydGVk
KQorICAgIC8vICogVGhlIHJlY29yZCBpcyBiZWxvdyBjb25zdHJ1Y3RvcidzIGluaXRpYWxfb2Zm
c2V0IChObyBkcm9wIGlzIHJlcG9ydGVkKQorICAgIGtCYWRSZWNvcmQgPSBrTWF4UmVjb3JkVHlw
ZSArIDIKKyAgfTsKKworICAvLyBTa2lwcyBhbGwgYmxvY2tzIHRoYXQgYXJlIGNvbXBsZXRlbHkg
YmVmb3JlICJpbml0aWFsX29mZnNldF8iLgorICAvLworICAvLyBSZXR1cm5zIHRydWUgb24gc3Vj
Y2Vzcy4gSGFuZGxlcyByZXBvcnRpbmcuCisgIGJvb2wgU2tpcFRvSW5pdGlhbEJsb2NrKCk7CisK
KyAgLy8gUmV0dXJuIHR5cGUsIG9yIG9uZSBvZiB0aGUgcHJlY2VkaW5nIHNwZWNpYWwgdmFsdWVz
CisgIHVuc2lnbmVkIGludCBSZWFkUGh5c2ljYWxSZWNvcmQoU2xpY2UqIHJlc3VsdCk7CisKKyAg
Ly8gUmVwb3J0cyBkcm9wcGVkIGJ5dGVzIHRvIHRoZSByZXBvcnRlci4KKyAgLy8gYnVmZmVyXyBt
dXN0IGJlIHVwZGF0ZWQgdG8gcmVtb3ZlIHRoZSBkcm9wcGVkIGJ5dGVzIHByaW9yIHRvIGludm9j
YXRpb24uCisgIHZvaWQgUmVwb3J0Q29ycnVwdGlvbihzaXplX3QgYnl0ZXMsIGNvbnN0IGNoYXIq
IHJlYXNvbik7CisgIHZvaWQgUmVwb3J0RHJvcChzaXplX3QgYnl0ZXMsIGNvbnN0IFN0YXR1cyYg
cmVhc29uKTsKKworICAvLyBObyBjb3B5aW5nIGFsbG93ZWQKKyAgUmVhZGVyKGNvbnN0IFJlYWRl
ciYpOworICB2b2lkIG9wZXJhdG9yPShjb25zdCBSZWFkZXImKTsKK307CisKK30gIC8vIG5hbWVz
cGFjZSBsb2cKK30gIC8vIG5hbWVzcGFjZSBsZXZlbGRiCisKKyNlbmRpZiAgLy8gU1RPUkFHRV9M
RVZFTERCX0RCX0xPR19SRUFERVJfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xl
dmVsZGIvZGIvbG9nX3Rlc3QuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2xvZ190
ZXN0LmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjRjNWNmODc1NzMzYzE2MTc1NzQzMjI0ZTY0MmYwNTA3YTBkYTY2
M2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2xvZ190
ZXN0LmNjCkBAIC0wLDAgKzEsNTAwIEBACisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVs
REIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBv
ZiBjb250cmlidXRvcnMuCisKKyNpbmNsdWRlICJkYi9sb2dfcmVhZGVyLmgiCisjaW5jbHVkZSAi
ZGIvbG9nX3dyaXRlci5oIgorI2luY2x1ZGUgImxldmVsZGIvZW52LmgiCisjaW5jbHVkZSAidXRp
bC9jb2RpbmcuaCIKKyNpbmNsdWRlICJ1dGlsL2NyYzMyYy5oIgorI2luY2x1ZGUgInV0aWwvcmFu
ZG9tLmgiCisjaW5jbHVkZSAidXRpbC90ZXN0aGFybmVzcy5oIgorCituYW1lc3BhY2UgbGV2ZWxk
YiB7CituYW1lc3BhY2UgbG9nIHsKKworLy8gQ29uc3RydWN0IGEgc3RyaW5nIG9mIHRoZSBzcGVj
aWZpZWQgbGVuZ3RoIG1hZGUgb3V0IG9mIHRoZSBzdXBwbGllZAorLy8gcGFydGlhbCBzdHJpbmcu
CitzdGF0aWMgc3RkOjpzdHJpbmcgQmlnU3RyaW5nKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXJ0aWFs
X3N0cmluZywgc2l6ZV90IG4pIHsKKyAgc3RkOjpzdHJpbmcgcmVzdWx0OworICB3aGlsZSAocmVz
dWx0LnNpemUoKSA8IG4pIHsKKyAgICByZXN1bHQuYXBwZW5kKHBhcnRpYWxfc3RyaW5nKTsKKyAg
fQorICByZXN1bHQucmVzaXplKG4pOworICByZXR1cm4gcmVzdWx0OworfQorCisvLyBDb25zdHJ1
Y3QgYSBzdHJpbmcgZnJvbSBhIG51bWJlcgorc3RhdGljIHN0ZDo6c3RyaW5nIE51bWJlclN0cmlu
ZyhpbnQgbikgeworICBjaGFyIGJ1Zls1MF07CisgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1Ziks
ICIlZC4iLCBuKTsKKyAgcmV0dXJuIHN0ZDo6c3RyaW5nKGJ1Zik7Cit9CisKKy8vIFJldHVybiBh
IHNrZXdlZCBwb3RlbnRpYWxseSBsb25nIHN0cmluZworc3RhdGljIHN0ZDo6c3RyaW5nIFJhbmRv
bVNrZXdlZFN0cmluZyhpbnQgaSwgUmFuZG9tKiBybmQpIHsKKyAgcmV0dXJuIEJpZ1N0cmluZyhO
dW1iZXJTdHJpbmcoaSksIHJuZC0+U2tld2VkKDE3KSk7Cit9CisKK2NsYXNzIExvZ1Rlc3Qgewor
IHByaXZhdGU6CisgIGNsYXNzIFN0cmluZ0Rlc3QgOiBwdWJsaWMgV3JpdGFibGVGaWxlIHsKKyAg
IHB1YmxpYzoKKyAgICBzdGQ6OnN0cmluZyBjb250ZW50c187CisKKyAgICB2aXJ0dWFsIFN0YXR1
cyBDbG9zZSgpIHsgcmV0dXJuIFN0YXR1czo6T0soKTsgfQorICAgIHZpcnR1YWwgU3RhdHVzIEZs
dXNoKCkgeyByZXR1cm4gU3RhdHVzOjpPSygpOyB9CisgICAgdmlydHVhbCBTdGF0dXMgU3luYygp
IHsgcmV0dXJuIFN0YXR1czo6T0soKTsgfQorICAgIHZpcnR1YWwgU3RhdHVzIEFwcGVuZChjb25z
dCBTbGljZSYgc2xpY2UpIHsKKyAgICAgIGNvbnRlbnRzXy5hcHBlbmQoc2xpY2UuZGF0YSgpLCBz
bGljZS5zaXplKCkpOworICAgICAgcmV0dXJuIFN0YXR1czo6T0soKTsKKyAgICB9CisgIH07CisK
KyAgY2xhc3MgU3RyaW5nU291cmNlIDogcHVibGljIFNlcXVlbnRpYWxGaWxlIHsKKyAgIHB1Ymxp
YzoKKyAgICBTbGljZSBjb250ZW50c187CisgICAgYm9vbCBmb3JjZV9lcnJvcl87CisgICAgYm9v
bCByZXR1cm5lZF9wYXJ0aWFsXzsKKyAgICBTdHJpbmdTb3VyY2UoKSA6IGZvcmNlX2Vycm9yXyhm
YWxzZSksIHJldHVybmVkX3BhcnRpYWxfKGZhbHNlKSB7IH0KKworICAgIHZpcnR1YWwgU3RhdHVz
IFJlYWQoc2l6ZV90IG4sIFNsaWNlKiByZXN1bHQsIGNoYXIqIHNjcmF0Y2gpIHsKKyAgICAgIEFT
U0VSVF9UUlVFKCFyZXR1cm5lZF9wYXJ0aWFsXykgPDwgIm11c3Qgbm90IFJlYWQoKSBhZnRlciBl
b2YvZXJyb3IiOworCisgICAgICBpZiAoZm9yY2VfZXJyb3JfKSB7CisgICAgICAgIGZvcmNlX2Vy
cm9yXyA9IGZhbHNlOworICAgICAgICByZXR1cm5lZF9wYXJ0aWFsXyA9IHRydWU7CisgICAgICAg
IHJldHVybiBTdGF0dXM6OkNvcnJ1cHRpb24oInJlYWQgZXJyb3IiKTsKKyAgICAgIH0KKworICAg
ICAgaWYgKGNvbnRlbnRzXy5zaXplKCkgPCBuKSB7CisgICAgICAgIG4gPSBjb250ZW50c18uc2l6
ZSgpOworICAgICAgICByZXR1cm5lZF9wYXJ0aWFsXyA9IHRydWU7CisgICAgICB9CisgICAgICAq
cmVzdWx0ID0gU2xpY2UoY29udGVudHNfLmRhdGEoKSwgbik7CisgICAgICBjb250ZW50c18ucmVt
b3ZlX3ByZWZpeChuKTsKKyAgICAgIHJldHVybiBTdGF0dXM6Ok9LKCk7CisgICAgfQorCisgICAg
dmlydHVhbCBTdGF0dXMgU2tpcCh1aW50NjRfdCBuKSB7CisgICAgICBpZiAobiA+IGNvbnRlbnRz
Xy5zaXplKCkpIHsKKyAgICAgICAgY29udGVudHNfLmNsZWFyKCk7CisgICAgICAgIHJldHVybiBT
dGF0dXM6Ok5vdEZvdW5kKCJpbi1tZW1vcnkgZmlsZSBza2lwZXBkIHBhc3QgZW5kIik7CisgICAg
ICB9CisKKyAgICAgIGNvbnRlbnRzXy5yZW1vdmVfcHJlZml4KG4pOworCisgICAgICByZXR1cm4g
U3RhdHVzOjpPSygpOworICAgIH0KKyAgfTsKKworICBjbGFzcyBSZXBvcnRDb2xsZWN0b3IgOiBw
dWJsaWMgUmVhZGVyOjpSZXBvcnRlciB7CisgICBwdWJsaWM6CisgICAgc2l6ZV90IGRyb3BwZWRf
Ynl0ZXNfOworICAgIHN0ZDo6c3RyaW5nIG1lc3NhZ2VfOworCisgICAgUmVwb3J0Q29sbGVjdG9y
KCkgOiBkcm9wcGVkX2J5dGVzXygwKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgQ29ycnVwdGlvbihz
aXplX3QgYnl0ZXMsIGNvbnN0IFN0YXR1cyYgc3RhdHVzKSB7CisgICAgICBkcm9wcGVkX2J5dGVz
XyArPSBieXRlczsKKyAgICAgIG1lc3NhZ2VfLmFwcGVuZChzdGF0dXMuVG9TdHJpbmcoKSk7Cisg
ICAgfQorICB9OworCisgIFN0cmluZ0Rlc3QgZGVzdF87CisgIFN0cmluZ1NvdXJjZSBzb3VyY2Vf
OworICBSZXBvcnRDb2xsZWN0b3IgcmVwb3J0XzsKKyAgYm9vbCByZWFkaW5nXzsKKyAgV3JpdGVy
IHdyaXRlcl87CisgIFJlYWRlciByZWFkZXJfOworCisgIC8vIFJlY29yZCBtZXRhZGF0YSBmb3Ig
dGVzdGluZyBpbml0aWFsIG9mZnNldCBmdW5jdGlvbmFsaXR5CisgIHN0YXRpYyBzaXplX3QgaW5p
dGlhbF9vZmZzZXRfcmVjb3JkX3NpemVzX1tdOworICBzdGF0aWMgdWludDY0X3QgaW5pdGlhbF9v
ZmZzZXRfbGFzdF9yZWNvcmRfb2Zmc2V0c19bXTsKKworIHB1YmxpYzoKKyAgTG9nVGVzdCgpIDog
cmVhZGluZ18oZmFsc2UpLAorICAgICAgICAgICAgICB3cml0ZXJfKCZkZXN0XyksCisgICAgICAg
ICAgICAgIHJlYWRlcl8oJnNvdXJjZV8sICZyZXBvcnRfLCB0cnVlLypjaGVja3N1bSovLAorICAg
ICAgICAgICAgICAgICAgICAgIDAvKmluaXRpYWxfb2Zmc2V0Ki8pIHsKKyAgfQorCisgIHZvaWQg
V3JpdGUoY29uc3Qgc3RkOjpzdHJpbmcmIG1zZykgeworICAgIEFTU0VSVF9UUlVFKCFyZWFkaW5n
XykgPDwgIldyaXRlKCkgYWZ0ZXIgc3RhcnRpbmcgdG8gcmVhZCI7CisgICAgd3JpdGVyXy5BZGRS
ZWNvcmQoU2xpY2UobXNnKSk7CisgIH0KKworICBzaXplX3QgV3JpdHRlbkJ5dGVzKCkgY29uc3Qg
eworICAgIHJldHVybiBkZXN0Xy5jb250ZW50c18uc2l6ZSgpOworICB9CisKKyAgc3RkOjpzdHJp
bmcgUmVhZCgpIHsKKyAgICBpZiAoIXJlYWRpbmdfKSB7CisgICAgICByZWFkaW5nXyA9IHRydWU7
CisgICAgICBzb3VyY2VfLmNvbnRlbnRzXyA9IFNsaWNlKGRlc3RfLmNvbnRlbnRzXyk7CisgICAg
fQorICAgIHN0ZDo6c3RyaW5nIHNjcmF0Y2g7CisgICAgU2xpY2UgcmVjb3JkOworICAgIGlmIChy
ZWFkZXJfLlJlYWRSZWNvcmQoJnJlY29yZCwgJnNjcmF0Y2gpKSB7CisgICAgICByZXR1cm4gcmVj
b3JkLlRvU3RyaW5nKCk7CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiAiRU9GIjsKKyAgICB9
CisgIH0KKworICB2b2lkIEluY3JlbWVudEJ5dGUoaW50IG9mZnNldCwgaW50IGRlbHRhKSB7Cisg
ICAgZGVzdF8uY29udGVudHNfW29mZnNldF0gKz0gZGVsdGE7CisgIH0KKworICB2b2lkIFNldEJ5
dGUoaW50IG9mZnNldCwgY2hhciBuZXdfYnl0ZSkgeworICAgIGRlc3RfLmNvbnRlbnRzX1tvZmZz
ZXRdID0gbmV3X2J5dGU7CisgIH0KKworICB2b2lkIFNocmlua1NpemUoaW50IGJ5dGVzKSB7Cisg
ICAgZGVzdF8uY29udGVudHNfLnJlc2l6ZShkZXN0Xy5jb250ZW50c18uc2l6ZSgpIC0gYnl0ZXMp
OworICB9CisKKyAgdm9pZCBGaXhDaGVja3N1bShpbnQgaGVhZGVyX29mZnNldCwgaW50IGxlbikg
eworICAgIC8vIENvbXB1dGUgY3JjIG9mIHR5cGUvbGVuL2RhdGEKKyAgICB1aW50MzJfdCBjcmMg
PSBjcmMzMmM6OlZhbHVlKCZkZXN0Xy5jb250ZW50c19baGVhZGVyX29mZnNldCs2XSwgMSArIGxl
bik7CisgICAgY3JjID0gY3JjMzJjOjpNYXNrKGNyYyk7CisgICAgRW5jb2RlRml4ZWQzMigmZGVz
dF8uY29udGVudHNfW2hlYWRlcl9vZmZzZXRdLCBjcmMpOworICB9CisKKyAgdm9pZCBGb3JjZUVy
cm9yKCkgeworICAgIHNvdXJjZV8uZm9yY2VfZXJyb3JfID0gdHJ1ZTsKKyAgfQorCisgIHNpemVf
dCBEcm9wcGVkQnl0ZXMoKSBjb25zdCB7CisgICAgcmV0dXJuIHJlcG9ydF8uZHJvcHBlZF9ieXRl
c187CisgIH0KKworICBzdGQ6OnN0cmluZyBSZXBvcnRNZXNzYWdlKCkgY29uc3QgeworICAgIHJl
dHVybiByZXBvcnRfLm1lc3NhZ2VfOworICB9CisKKyAgLy8gUmV0dXJucyBPSyBpZmYgcmVjb3Jk
ZWQgZXJyb3IgbWVzc2FnZSBjb250YWlucyAibXNnIgorICBzdGQ6OnN0cmluZyBNYXRjaEVycm9y
KGNvbnN0IHN0ZDo6c3RyaW5nJiBtc2cpIGNvbnN0IHsKKyAgICBpZiAocmVwb3J0Xy5tZXNzYWdl
Xy5maW5kKG1zZykgPT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsKKyAgICAgIHJldHVybiByZXBvcnRf
Lm1lc3NhZ2VfOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gIk9LIjsKKyAgICB9CisgIH0K
KworICB2b2lkIFdyaXRlSW5pdGlhbE9mZnNldExvZygpIHsKKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IDQ7IGkrKykgeworICAgICAgc3RkOjpzdHJpbmcgcmVjb3JkKGluaXRpYWxfb2Zmc2V0X3Jl
Y29yZF9zaXplc19baV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y2hh
cj4oJ2EnICsgaSkpOworICAgICAgV3JpdGUocmVjb3JkKTsKKyAgICB9CisgIH0KKworICB2b2lk
IENoZWNrT2Zmc2V0UGFzdEVuZFJldHVybnNOb1JlY29yZHModWludDY0X3Qgb2Zmc2V0X3Bhc3Rf
ZW5kKSB7CisgICAgV3JpdGVJbml0aWFsT2Zmc2V0TG9nKCk7CisgICAgcmVhZGluZ18gPSB0cnVl
OworICAgIHNvdXJjZV8uY29udGVudHNfID0gU2xpY2UoZGVzdF8uY29udGVudHNfKTsKKyAgICBS
ZWFkZXIqIG9mZnNldF9yZWFkZXIgPSBuZXcgUmVhZGVyKCZzb3VyY2VfLCAmcmVwb3J0XywgdHJ1
ZS8qY2hlY2tzdW0qLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdy
aXR0ZW5CeXRlcygpICsgb2Zmc2V0X3Bhc3RfZW5kKTsKKyAgICBTbGljZSByZWNvcmQ7CisgICAg
c3RkOjpzdHJpbmcgc2NyYXRjaDsKKyAgICBBU1NFUlRfVFJVRSghb2Zmc2V0X3JlYWRlci0+UmVh
ZFJlY29yZCgmcmVjb3JkLCAmc2NyYXRjaCkpOworICAgIGRlbGV0ZSBvZmZzZXRfcmVhZGVyOwor
ICB9CisKKyAgdm9pZCBDaGVja0luaXRpYWxPZmZzZXRSZWNvcmQodWludDY0X3QgaW5pdGlhbF9v
ZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBleHBlY3RlZF9yZWNv
cmRfb2Zmc2V0KSB7CisgICAgV3JpdGVJbml0aWFsT2Zmc2V0TG9nKCk7CisgICAgcmVhZGluZ18g
PSB0cnVlOworICAgIHNvdXJjZV8uY29udGVudHNfID0gU2xpY2UoZGVzdF8uY29udGVudHNfKTsK
KyAgICBSZWFkZXIqIG9mZnNldF9yZWFkZXIgPSBuZXcgUmVhZGVyKCZzb3VyY2VfLCAmcmVwb3J0
XywgdHJ1ZS8qY2hlY2tzdW0qLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGluaXRpYWxfb2Zmc2V0KTsKKyAgICBTbGljZSByZWNvcmQ7CisgICAgc3RkOjpzdHJpbmcg
c2NyYXRjaDsKKyAgICBBU1NFUlRfVFJVRShvZmZzZXRfcmVhZGVyLT5SZWFkUmVjb3JkKCZyZWNv
cmQsICZzY3JhdGNoKSk7CisgICAgQVNTRVJUX0VRKGluaXRpYWxfb2Zmc2V0X3JlY29yZF9zaXpl
c19bZXhwZWN0ZWRfcmVjb3JkX29mZnNldF0sCisgICAgICAgICAgICAgIHJlY29yZC5zaXplKCkp
OworICAgIEFTU0VSVF9FUShpbml0aWFsX29mZnNldF9sYXN0X3JlY29yZF9vZmZzZXRzX1tleHBl
Y3RlZF9yZWNvcmRfb2Zmc2V0XSwKKyAgICAgICAgICAgICAgb2Zmc2V0X3JlYWRlci0+TGFzdFJl
Y29yZE9mZnNldCgpKTsKKyAgICBBU1NFUlRfRVEoKGNoYXIpKCdhJyArIGV4cGVjdGVkX3JlY29y
ZF9vZmZzZXQpLCByZWNvcmQuZGF0YSgpWzBdKTsKKyAgICBkZWxldGUgb2Zmc2V0X3JlYWRlcjsK
KyAgfQorCit9OworCitzaXplX3QgTG9nVGVzdDo6aW5pdGlhbF9vZmZzZXRfcmVjb3JkX3NpemVz
X1tdID0KKyAgICB7MTAwMDAsICAvLyBUd28gc2l6YWJsZSByZWNvcmRzIGluIGZpcnN0IGJsb2Nr
CisgICAgIDEwMDAwLAorICAgICAyICogbG9nOjprQmxvY2tTaXplIC0gMTAwMCwgIC8vIFNwYW4g
dGhyZWUgYmxvY2tzCisgICAgIDF9OworCit1aW50NjRfdCBMb2dUZXN0Ojppbml0aWFsX29mZnNl
dF9sYXN0X3JlY29yZF9vZmZzZXRzX1tdID0KKyAgICB7MCwKKyAgICAga0hlYWRlclNpemUgKyAx
MDAwMCwKKyAgICAgMiAqIChrSGVhZGVyU2l6ZSArIDEwMDAwKSwKKyAgICAgMiAqIChrSGVhZGVy
U2l6ZSArIDEwMDAwKSArCisgICAgICAgICAoMiAqIGxvZzo6a0Jsb2NrU2l6ZSAtIDEwMDApICsg
MyAqIGtIZWFkZXJTaXplfTsKKworCitURVNUKExvZ1Rlc3QsIEVtcHR5KSB7CisgIEFTU0VSVF9F
USgiRU9GIiwgUmVhZCgpKTsKK30KKworVEVTVChMb2dUZXN0LCBSZWFkV3JpdGUpIHsKKyAgV3Jp
dGUoImZvbyIpOworICBXcml0ZSgiYmFyIik7CisgIFdyaXRlKCIiKTsKKyAgV3JpdGUoInh4eHgi
KTsKKyAgQVNTRVJUX0VRKCJmb28iLCBSZWFkKCkpOworICBBU1NFUlRfRVEoImJhciIsIFJlYWQo
KSk7CisgIEFTU0VSVF9FUSgiIiwgUmVhZCgpKTsKKyAgQVNTRVJUX0VRKCJ4eHh4IiwgUmVhZCgp
KTsKKyAgQVNTRVJUX0VRKCJFT0YiLCBSZWFkKCkpOworICBBU1NFUlRfRVEoIkVPRiIsIFJlYWQo
KSk7ICAvLyBNYWtlIHN1cmUgcmVhZHMgYXQgZW9mIHdvcmsKK30KKworVEVTVChMb2dUZXN0LCBN
YW55QmxvY2tzKSB7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgMTAwMDAwOyBpKyspIHsKKyAgICBX
cml0ZShOdW1iZXJTdHJpbmcoaSkpOworICB9CisgIGZvciAoaW50IGkgPSAwOyBpIDwgMTAwMDAw
OyBpKyspIHsKKyAgICBBU1NFUlRfRVEoTnVtYmVyU3RyaW5nKGkpLCBSZWFkKCkpOworICB9Cisg
IEFTU0VSVF9FUSgiRU9GIiwgUmVhZCgpKTsKK30KKworVEVTVChMb2dUZXN0LCBGcmFnbWVudGF0
aW9uKSB7CisgIFdyaXRlKCJzbWFsbCIpOworICBXcml0ZShCaWdTdHJpbmcoIm1lZGl1bSIsIDUw
MDAwKSk7CisgIFdyaXRlKEJpZ1N0cmluZygibGFyZ2UiLCAxMDAwMDApKTsKKyAgQVNTRVJUX0VR
KCJzbWFsbCIsIFJlYWQoKSk7CisgIEFTU0VSVF9FUShCaWdTdHJpbmcoIm1lZGl1bSIsIDUwMDAw
KSwgUmVhZCgpKTsKKyAgQVNTRVJUX0VRKEJpZ1N0cmluZygibGFyZ2UiLCAxMDAwMDApLCBSZWFk
KCkpOworICBBU1NFUlRfRVEoIkVPRiIsIFJlYWQoKSk7Cit9CisKK1RFU1QoTG9nVGVzdCwgTWFy
Z2luYWxUcmFpbGVyKSB7CisgIC8vIE1ha2UgYSB0cmFpbGVyIHRoYXQgaXMgZXhhY3RseSB0aGUg
c2FtZSBsZW5ndGggYXMgYW4gZW1wdHkgcmVjb3JkLgorICBjb25zdCBpbnQgbiA9IGtCbG9ja1Np
emUgLSAyKmtIZWFkZXJTaXplOworICBXcml0ZShCaWdTdHJpbmcoImZvbyIsIG4pKTsKKyAgQVNT
RVJUX0VRKGtCbG9ja1NpemUgLSBrSGVhZGVyU2l6ZSwgV3JpdHRlbkJ5dGVzKCkpOworICBXcml0
ZSgiIik7CisgIFdyaXRlKCJiYXIiKTsKKyAgQVNTRVJUX0VRKEJpZ1N0cmluZygiZm9vIiwgbiks
IFJlYWQoKSk7CisgIEFTU0VSVF9FUSgiIiwgUmVhZCgpKTsKKyAgQVNTRVJUX0VRKCJiYXIiLCBS
ZWFkKCkpOworICBBU1NFUlRfRVEoIkVPRiIsIFJlYWQoKSk7Cit9CisKK1RFU1QoTG9nVGVzdCwg
TWFyZ2luYWxUcmFpbGVyMikgeworICAvLyBNYWtlIGEgdHJhaWxlciB0aGF0IGlzIGV4YWN0bHkg
dGhlIHNhbWUgbGVuZ3RoIGFzIGFuIGVtcHR5IHJlY29yZC4KKyAgY29uc3QgaW50IG4gPSBrQmxv
Y2tTaXplIC0gMiprSGVhZGVyU2l6ZTsKKyAgV3JpdGUoQmlnU3RyaW5nKCJmb28iLCBuKSk7Cisg
IEFTU0VSVF9FUShrQmxvY2tTaXplIC0ga0hlYWRlclNpemUsIFdyaXR0ZW5CeXRlcygpKTsKKyAg
V3JpdGUoImJhciIpOworICBBU1NFUlRfRVEoQmlnU3RyaW5nKCJmb28iLCBuKSwgUmVhZCgpKTsK
KyAgQVNTRVJUX0VRKCJiYXIiLCBSZWFkKCkpOworICBBU1NFUlRfRVEoIkVPRiIsIFJlYWQoKSk7
CisgIEFTU0VSVF9FUSgwLCBEcm9wcGVkQnl0ZXMoKSk7CisgIEFTU0VSVF9FUSgiIiwgUmVwb3J0
TWVzc2FnZSgpKTsKK30KKworVEVTVChMb2dUZXN0LCBTaG9ydFRyYWlsZXIpIHsKKyAgY29uc3Qg
aW50IG4gPSBrQmxvY2tTaXplIC0gMiprSGVhZGVyU2l6ZSArIDQ7CisgIFdyaXRlKEJpZ1N0cmlu
ZygiZm9vIiwgbikpOworICBBU1NFUlRfRVEoa0Jsb2NrU2l6ZSAtIGtIZWFkZXJTaXplICsgNCwg
V3JpdHRlbkJ5dGVzKCkpOworICBXcml0ZSgiIik7CisgIFdyaXRlKCJiYXIiKTsKKyAgQVNTRVJU
X0VRKEJpZ1N0cmluZygiZm9vIiwgbiksIFJlYWQoKSk7CisgIEFTU0VSVF9FUSgiIiwgUmVhZCgp
KTsKKyAgQVNTRVJUX0VRKCJiYXIiLCBSZWFkKCkpOworICBBU1NFUlRfRVEoIkVPRiIsIFJlYWQo
KSk7Cit9CisKK1RFU1QoTG9nVGVzdCwgQWxpZ25lZEVvZikgeworICBjb25zdCBpbnQgbiA9IGtC
bG9ja1NpemUgLSAyKmtIZWFkZXJTaXplICsgNDsKKyAgV3JpdGUoQmlnU3RyaW5nKCJmb28iLCBu
KSk7CisgIEFTU0VSVF9FUShrQmxvY2tTaXplIC0ga0hlYWRlclNpemUgKyA0LCBXcml0dGVuQnl0
ZXMoKSk7CisgIEFTU0VSVF9FUShCaWdTdHJpbmcoImZvbyIsIG4pLCBSZWFkKCkpOworICBBU1NF
UlRfRVEoIkVPRiIsIFJlYWQoKSk7Cit9CisKK1RFU1QoTG9nVGVzdCwgUmFuZG9tUmVhZCkgewor
ICBjb25zdCBpbnQgTiA9IDUwMDsKKyAgUmFuZG9tIHdyaXRlX3JuZCgzMDEpOworICBmb3IgKGlu
dCBpID0gMDsgaSA8IE47IGkrKykgeworICAgIFdyaXRlKFJhbmRvbVNrZXdlZFN0cmluZyhpLCAm
d3JpdGVfcm5kKSk7CisgIH0KKyAgUmFuZG9tIHJlYWRfcm5kKDMwMSk7CisgIGZvciAoaW50IGkg
PSAwOyBpIDwgTjsgaSsrKSB7CisgICAgQVNTRVJUX0VRKFJhbmRvbVNrZXdlZFN0cmluZyhpLCAm
cmVhZF9ybmQpLCBSZWFkKCkpOworICB9CisgIEFTU0VSVF9FUSgiRU9GIiwgUmVhZCgpKTsKK30K
KworLy8gVGVzdHMgb2YgYWxsIHRoZSBlcnJvciBwYXRocyBpbiBsb2dfcmVhZGVyLmNjIGZvbGxv
dzoKKworVEVTVChMb2dUZXN0LCBSZWFkRXJyb3IpIHsKKyAgV3JpdGUoImZvbyIpOworICBGb3Jj
ZUVycm9yKCk7CisgIEFTU0VSVF9FUSgiRU9GIiwgUmVhZCgpKTsKKyAgQVNTRVJUX0VRKGtCbG9j
a1NpemUsIERyb3BwZWRCeXRlcygpKTsKKyAgQVNTRVJUX0VRKCJPSyIsIE1hdGNoRXJyb3IoInJl
YWQgZXJyb3IiKSk7Cit9CisKK1RFU1QoTG9nVGVzdCwgQmFkUmVjb3JkVHlwZSkgeworICBXcml0
ZSgiZm9vIik7CisgIC8vIFR5cGUgaXMgc3RvcmVkIGluIGhlYWRlcls2XQorICBJbmNyZW1lbnRC
eXRlKDYsIDEwMCk7CisgIEZpeENoZWNrc3VtKDAsIDMpOworICBBU1NFUlRfRVEoIkVPRiIsIFJl
YWQoKSk7CisgIEFTU0VSVF9FUSgzLCBEcm9wcGVkQnl0ZXMoKSk7CisgIEFTU0VSVF9FUSgiT0si
LCBNYXRjaEVycm9yKCJ1bmtub3duIHJlY29yZCB0eXBlIikpOworfQorCitURVNUKExvZ1Rlc3Qs
IFRydW5jYXRlZFRyYWlsaW5nUmVjb3JkKSB7CisgIFdyaXRlKCJmb28iKTsKKyAgU2hyaW5rU2l6
ZSg0KTsgICAvLyBEcm9wIGFsbCBwYXlsb2FkIGFzIHdlbGwgYXMgYSBoZWFkZXIgYnl0ZQorICBB
U1NFUlRfRVEoIkVPRiIsIFJlYWQoKSk7CisgIEFTU0VSVF9FUShrSGVhZGVyU2l6ZSAtIDEsIERy
b3BwZWRCeXRlcygpKTsKKyAgQVNTRVJUX0VRKCJPSyIsIE1hdGNoRXJyb3IoInRydW5jYXRlZCBy
ZWNvcmQgYXQgZW5kIG9mIGZpbGUiKSk7Cit9CisKK1RFU1QoTG9nVGVzdCwgQmFkTGVuZ3RoKSB7
CisgIFdyaXRlKCJmb28iKTsKKyAgU2hyaW5rU2l6ZSgxKTsKKyAgQVNTRVJUX0VRKCJFT0YiLCBS
ZWFkKCkpOworICBBU1NFUlRfRVEoa0hlYWRlclNpemUgKyAyLCBEcm9wcGVkQnl0ZXMoKSk7Cisg
IEFTU0VSVF9FUSgiT0siLCBNYXRjaEVycm9yKCJiYWQgcmVjb3JkIGxlbmd0aCIpKTsKK30KKwor
VEVTVChMb2dUZXN0LCBDaGVja3N1bU1pc21hdGNoKSB7CisgIFdyaXRlKCJmb28iKTsKKyAgSW5j
cmVtZW50Qnl0ZSgwLCAxMCk7CisgIEFTU0VSVF9FUSgiRU9GIiwgUmVhZCgpKTsKKyAgQVNTRVJU
X0VRKDEwLCBEcm9wcGVkQnl0ZXMoKSk7CisgIEFTU0VSVF9FUSgiT0siLCBNYXRjaEVycm9yKCJj
aGVja3N1bSBtaXNtYXRjaCIpKTsKK30KKworVEVTVChMb2dUZXN0LCBVbmV4cGVjdGVkTWlkZGxl
VHlwZSkgeworICBXcml0ZSgiZm9vIik7CisgIFNldEJ5dGUoNiwga01pZGRsZVR5cGUpOworICBG
aXhDaGVja3N1bSgwLCAzKTsKKyAgQVNTRVJUX0VRKCJFT0YiLCBSZWFkKCkpOworICBBU1NFUlRf
RVEoMywgRHJvcHBlZEJ5dGVzKCkpOworICBBU1NFUlRfRVEoIk9LIiwgTWF0Y2hFcnJvcigibWlz
c2luZyBzdGFydCIpKTsKK30KKworVEVTVChMb2dUZXN0LCBVbmV4cGVjdGVkTGFzdFR5cGUpIHsK
KyAgV3JpdGUoImZvbyIpOworICBTZXRCeXRlKDYsIGtMYXN0VHlwZSk7CisgIEZpeENoZWNrc3Vt
KDAsIDMpOworICBBU1NFUlRfRVEoIkVPRiIsIFJlYWQoKSk7CisgIEFTU0VSVF9FUSgzLCBEcm9w
cGVkQnl0ZXMoKSk7CisgIEFTU0VSVF9FUSgiT0siLCBNYXRjaEVycm9yKCJtaXNzaW5nIHN0YXJ0
IikpOworfQorCitURVNUKExvZ1Rlc3QsIFVuZXhwZWN0ZWRGdWxsVHlwZSkgeworICBXcml0ZSgi
Zm9vIik7CisgIFdyaXRlKCJiYXIiKTsKKyAgU2V0Qnl0ZSg2LCBrRmlyc3RUeXBlKTsKKyAgRml4
Q2hlY2tzdW0oMCwgMyk7CisgIEFTU0VSVF9FUSgiYmFyIiwgUmVhZCgpKTsKKyAgQVNTRVJUX0VR
KCJFT0YiLCBSZWFkKCkpOworICBBU1NFUlRfRVEoMywgRHJvcHBlZEJ5dGVzKCkpOworICBBU1NF
UlRfRVEoIk9LIiwgTWF0Y2hFcnJvcigicGFydGlhbCByZWNvcmQgd2l0aG91dCBlbmQiKSk7Cit9
CisKK1RFU1QoTG9nVGVzdCwgVW5leHBlY3RlZEZpcnN0VHlwZSkgeworICBXcml0ZSgiZm9vIik7
CisgIFdyaXRlKEJpZ1N0cmluZygiYmFyIiwgMTAwMDAwKSk7CisgIFNldEJ5dGUoNiwga0ZpcnN0
VHlwZSk7CisgIEZpeENoZWNrc3VtKDAsIDMpOworICBBU1NFUlRfRVEoQmlnU3RyaW5nKCJiYXIi
LCAxMDAwMDApLCBSZWFkKCkpOworICBBU1NFUlRfRVEoIkVPRiIsIFJlYWQoKSk7CisgIEFTU0VS
VF9FUSgzLCBEcm9wcGVkQnl0ZXMoKSk7CisgIEFTU0VSVF9FUSgiT0siLCBNYXRjaEVycm9yKCJw
YXJ0aWFsIHJlY29yZCB3aXRob3V0IGVuZCIpKTsKK30KKworVEVTVChMb2dUZXN0LCBFcnJvckpv
aW5zUmVjb3JkcykgeworICAvLyBDb25zaWRlciB0d28gZnJhZ21lbnRlZCByZWNvcmRzOgorICAv
LyAgICBmaXJzdChSMSkgbGFzdChSMSkgZmlyc3QoUjIpIGxhc3QoUjIpCisgIC8vIHdoZXJlIHRo
ZSBtaWRkbGUgdHdvIGZyYWdtZW50cyBkaXNhcHBlYXIuICBXZSBkbyBub3Qgd2FudAorICAvLyBm
aXJzdChSMSksbGFzdChSMikgdG8gZ2V0IGpvaW5lZCBhbmQgcmV0dXJuZWQgYXMgYSB2YWxpZCBy
ZWNvcmQuCisKKyAgLy8gV3JpdGUgcmVjb3JkcyB0aGF0IHNwYW4gdHdvIGJsb2NrcworICBXcml0
ZShCaWdTdHJpbmcoImZvbyIsIGtCbG9ja1NpemUpKTsKKyAgV3JpdGUoQmlnU3RyaW5nKCJiYXIi
LCBrQmxvY2tTaXplKSk7CisgIFdyaXRlKCJjb3JyZWN0Iik7CisKKyAgLy8gV2lwZSB0aGUgbWlk
ZGxlIGJsb2NrCisgIGZvciAoaW50IG9mZnNldCA9IGtCbG9ja1NpemU7IG9mZnNldCA8IDIqa0Js
b2NrU2l6ZTsgb2Zmc2V0KyspIHsKKyAgICBTZXRCeXRlKG9mZnNldCwgJ3gnKTsKKyAgfQorCisg
IEFTU0VSVF9FUSgiY29ycmVjdCIsIFJlYWQoKSk7CisgIEFTU0VSVF9FUSgiRU9GIiwgUmVhZCgp
KTsKKyAgY29uc3QgaW50IGRyb3BwZWQgPSBEcm9wcGVkQnl0ZXMoKTsKKyAgQVNTRVJUX0xFKGRy
b3BwZWQsIDIqa0Jsb2NrU2l6ZSArIDEwMCk7CisgIEFTU0VSVF9HRShkcm9wcGVkLCAyKmtCbG9j
a1NpemUpOworfQorCitURVNUKExvZ1Rlc3QsIFJlYWRTdGFydCkgeworICBDaGVja0luaXRpYWxP
ZmZzZXRSZWNvcmQoMCwgMCk7Cit9CisKK1RFU1QoTG9nVGVzdCwgUmVhZFNlY29uZE9uZU9mZikg
eworICBDaGVja0luaXRpYWxPZmZzZXRSZWNvcmQoMSwgMSk7Cit9CisKK1RFU1QoTG9nVGVzdCwg
UmVhZFNlY29uZFRlblRob3VzYW5kKSB7CisgIENoZWNrSW5pdGlhbE9mZnNldFJlY29yZCgxMDAw
MCwgMSk7Cit9CisKK1RFU1QoTG9nVGVzdCwgUmVhZFNlY29uZFN0YXJ0KSB7CisgIENoZWNrSW5p
dGlhbE9mZnNldFJlY29yZCgxMDAwNywgMSk7Cit9CisKK1RFU1QoTG9nVGVzdCwgUmVhZFRoaXJk
T25lT2ZmKSB7CisgIENoZWNrSW5pdGlhbE9mZnNldFJlY29yZCgxMDAwOCwgMik7Cit9CisKK1RF
U1QoTG9nVGVzdCwgUmVhZFRoaXJkU3RhcnQpIHsKKyAgQ2hlY2tJbml0aWFsT2Zmc2V0UmVjb3Jk
KDIwMDE0LCAyKTsKK30KKworVEVTVChMb2dUZXN0LCBSZWFkRm91cnRoT25lT2ZmKSB7CisgIENo
ZWNrSW5pdGlhbE9mZnNldFJlY29yZCgyMDAxNSwgMyk7Cit9CisKK1RFU1QoTG9nVGVzdCwgUmVh
ZEZvdXJ0aEZpcnN0QmxvY2tUcmFpbGVyKSB7CisgIENoZWNrSW5pdGlhbE9mZnNldFJlY29yZChs
b2c6OmtCbG9ja1NpemUgLSA0LCAzKTsKK30KKworVEVTVChMb2dUZXN0LCBSZWFkRm91cnRoTWlk
ZGxlQmxvY2spIHsKKyAgQ2hlY2tJbml0aWFsT2Zmc2V0UmVjb3JkKGxvZzo6a0Jsb2NrU2l6ZSAr
IDEsIDMpOworfQorCitURVNUKExvZ1Rlc3QsIFJlYWRGb3VydGhMYXN0QmxvY2spIHsKKyAgQ2hl
Y2tJbml0aWFsT2Zmc2V0UmVjb3JkKDIgKiBsb2c6OmtCbG9ja1NpemUgKyAxLCAzKTsKK30KKwor
VEVTVChMb2dUZXN0LCBSZWFkRm91cnRoU3RhcnQpIHsKKyAgQ2hlY2tJbml0aWFsT2Zmc2V0UmVj
b3JkKAorICAgICAgMiAqIChrSGVhZGVyU2l6ZSArIDEwMDApICsgKDIgKiBsb2c6OmtCbG9ja1Np
emUgLSAxMDAwKSArIDMgKiBrSGVhZGVyU2l6ZSwKKyAgICAgIDMpOworfQorCitURVNUKExvZ1Rl
c3QsIFJlYWRFbmQpIHsKKyAgQ2hlY2tPZmZzZXRQYXN0RW5kUmV0dXJuc05vUmVjb3JkcygwKTsK
K30KKworVEVTVChMb2dUZXN0LCBSZWFkUGFzdEVuZCkgeworICBDaGVja09mZnNldFBhc3RFbmRS
ZXR1cm5zTm9SZWNvcmRzKDUpOworfQorCit9ICAvLyBuYW1lc3BhY2UgbG9nCit9ICAvLyBuYW1l
c3BhY2UgbGV2ZWxkYgorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpIHsKKyAgcmV0
dXJuIGxldmVsZGI6OnRlc3Q6OlJ1bkFsbFRlc3RzKCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2xvZ193cml0ZXIuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
ZXZlbGRiL2RiL2xvZ193cml0ZXIuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmRhOTlhYzA4ODY2Mzk3MjcwNjYz
YTEyMDMwNzU5NDQxNjJiYTI5MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xldmVsZGIvZGIvbG9nX3dyaXRlci5jYwpAQCAtMCwwICsxLDEwMyBAQAorLy8gQ29weXJpZ2h0
IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhP
UlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgorCisjaW5jbHVkZSAiZGIvbG9nX3dy
aXRlci5oIgorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSAibGV2ZWxkYi9lbnYuaCIK
KyNpbmNsdWRlICJ1dGlsL2NvZGluZy5oIgorI2luY2x1ZGUgInV0aWwvY3JjMzJjLmgiCisKK25h
bWVzcGFjZSBsZXZlbGRiIHsKK25hbWVzcGFjZSBsb2cgeworCitXcml0ZXI6OldyaXRlcihXcml0
YWJsZUZpbGUqIGRlc3QpCisgICAgOiBkZXN0XyhkZXN0KSwKKyAgICAgIGJsb2NrX29mZnNldF8o
MCkgeworICBmb3IgKGludCBpID0gMDsgaSA8PSBrTWF4UmVjb3JkVHlwZTsgaSsrKSB7CisgICAg
Y2hhciB0ID0gc3RhdGljX2Nhc3Q8Y2hhcj4oaSk7CisgICAgdHlwZV9jcmNfW2ldID0gY3JjMzJj
OjpWYWx1ZSgmdCwgMSk7CisgIH0KK30KKworV3JpdGVyOjp+V3JpdGVyKCkgeworfQorCitTdGF0
dXMgV3JpdGVyOjpBZGRSZWNvcmQoY29uc3QgU2xpY2UmIHNsaWNlKSB7CisgIGNvbnN0IGNoYXIq
IHB0ciA9IHNsaWNlLmRhdGEoKTsKKyAgc2l6ZV90IGxlZnQgPSBzbGljZS5zaXplKCk7CisKKyAg
Ly8gRnJhZ21lbnQgdGhlIHJlY29yZCBpZiBuZWNlc3NhcnkgYW5kIGVtaXQgaXQuICBOb3RlIHRo
YXQgaWYgc2xpY2UKKyAgLy8gaXMgZW1wdHksIHdlIHN0aWxsIHdhbnQgdG8gaXRlcmF0ZSBvbmNl
IHRvIGVtaXQgYSBzaW5nbGUKKyAgLy8gemVyby1sZW5ndGggcmVjb3JkCisgIFN0YXR1cyBzOwor
ICBib29sIGJlZ2luID0gdHJ1ZTsKKyAgZG8geworICAgIGNvbnN0IGludCBsZWZ0b3ZlciA9IGtC
bG9ja1NpemUgLSBibG9ja19vZmZzZXRfOworICAgIGFzc2VydChsZWZ0b3ZlciA+PSAwKTsKKyAg
ICBpZiAobGVmdG92ZXIgPCBrSGVhZGVyU2l6ZSkgeworICAgICAgLy8gU3dpdGNoIHRvIGEgbmV3
IGJsb2NrCisgICAgICBpZiAobGVmdG92ZXIgPiAwKSB7CisgICAgICAgIC8vIEZpbGwgdGhlIHRy
YWlsZXIgKGxpdGVyYWwgYmVsb3cgcmVsaWVzIG9uIGtIZWFkZXJTaXplIGJlaW5nIDcpCisgICAg
ICAgIGFzc2VydChrSGVhZGVyU2l6ZSA9PSA3KTsKKyAgICAgICAgZGVzdF8tPkFwcGVuZChTbGlj
ZSgiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIiwgbGVmdG92ZXIpKTsKKyAgICAgIH0KKyAgICAg
IGJsb2NrX29mZnNldF8gPSAwOworICAgIH0KKworICAgIC8vIEludmFyaWFudDogd2UgbmV2ZXIg
bGVhdmUgPCBrSGVhZGVyU2l6ZSBieXRlcyBpbiBhIGJsb2NrLgorICAgIGFzc2VydChrQmxvY2tT
aXplIC0gYmxvY2tfb2Zmc2V0XyAtIGtIZWFkZXJTaXplID49IDApOworCisgICAgY29uc3Qgc2l6
ZV90IGF2YWlsID0ga0Jsb2NrU2l6ZSAtIGJsb2NrX29mZnNldF8gLSBrSGVhZGVyU2l6ZTsKKyAg
ICBjb25zdCBzaXplX3QgZnJhZ21lbnRfbGVuZ3RoID0gKGxlZnQgPCBhdmFpbCkgPyBsZWZ0IDog
YXZhaWw7CisKKyAgICBSZWNvcmRUeXBlIHR5cGU7CisgICAgY29uc3QgYm9vbCBlbmQgPSAobGVm
dCA9PSBmcmFnbWVudF9sZW5ndGgpOworICAgIGlmIChiZWdpbiAmJiBlbmQpIHsKKyAgICAgIHR5
cGUgPSBrRnVsbFR5cGU7CisgICAgfSBlbHNlIGlmIChiZWdpbikgeworICAgICAgdHlwZSA9IGtG
aXJzdFR5cGU7CisgICAgfSBlbHNlIGlmIChlbmQpIHsKKyAgICAgIHR5cGUgPSBrTGFzdFR5cGU7
CisgICAgfSBlbHNlIHsKKyAgICAgIHR5cGUgPSBrTWlkZGxlVHlwZTsKKyAgICB9CisKKyAgICBz
ID0gRW1pdFBoeXNpY2FsUmVjb3JkKHR5cGUsIHB0ciwgZnJhZ21lbnRfbGVuZ3RoKTsKKyAgICBw
dHIgKz0gZnJhZ21lbnRfbGVuZ3RoOworICAgIGxlZnQgLT0gZnJhZ21lbnRfbGVuZ3RoOworICAg
IGJlZ2luID0gZmFsc2U7CisgIH0gd2hpbGUgKHMub2soKSAmJiBsZWZ0ID4gMCk7CisgIHJldHVy
biBzOworfQorCitTdGF0dXMgV3JpdGVyOjpFbWl0UGh5c2ljYWxSZWNvcmQoUmVjb3JkVHlwZSB0
LCBjb25zdCBjaGFyKiBwdHIsIHNpemVfdCBuKSB7CisgIGFzc2VydChuIDw9IDB4ZmZmZik7ICAv
LyBNdXN0IGZpdCBpbiB0d28gYnl0ZXMKKyAgYXNzZXJ0KGJsb2NrX29mZnNldF8gKyBrSGVhZGVy
U2l6ZSArIG4gPD0ga0Jsb2NrU2l6ZSk7CisKKyAgLy8gRm9ybWF0IHRoZSBoZWFkZXIKKyAgY2hh
ciBidWZba0hlYWRlclNpemVdOworICBidWZbNF0gPSBzdGF0aWNfY2FzdDxjaGFyPihuICYgMHhm
Zik7CisgIGJ1Zls1XSA9IHN0YXRpY19jYXN0PGNoYXI+KG4gPj4gOCk7CisgIGJ1Zls2XSA9IHN0
YXRpY19jYXN0PGNoYXI+KHQpOworCisgIC8vIENvbXB1dGUgdGhlIGNyYyBvZiB0aGUgcmVjb3Jk
IHR5cGUgYW5kIHRoZSBwYXlsb2FkLgorICB1aW50MzJfdCBjcmMgPSBjcmMzMmM6OkV4dGVuZCh0
eXBlX2NyY19bdF0sIHB0ciwgbik7CisgIGNyYyA9IGNyYzMyYzo6TWFzayhjcmMpOyAgICAgICAg
ICAgICAgICAgLy8gQWRqdXN0IGZvciBzdG9yYWdlCisgIEVuY29kZUZpeGVkMzIoYnVmLCBjcmMp
OworCisgIC8vIFdyaXRlIHRoZSBoZWFkZXIgYW5kIHRoZSBwYXlsb2FkCisgIFN0YXR1cyBzID0g
ZGVzdF8tPkFwcGVuZChTbGljZShidWYsIGtIZWFkZXJTaXplKSk7CisgIGlmIChzLm9rKCkpIHsK
KyAgICBzID0gZGVzdF8tPkFwcGVuZChTbGljZShwdHIsIG4pKTsKKyAgICBpZiAocy5vaygpKSB7
CisgICAgICBzID0gZGVzdF8tPkZsdXNoKCk7CisgICAgfQorICB9CisgIGJsb2NrX29mZnNldF8g
Kz0ga0hlYWRlclNpemUgKyBuOworICByZXR1cm4gczsKK30KKworfSAgLy8gbmFtZXNwYWNlIGxv
ZworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xldmVsZGIvZGIvbG9nX3dyaXRlci5oIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9s
b2dfd3JpdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTNhOTU0ZDk2NzMyNTQyZmFjOWFlZjEzNDVlYmQ5NTIw
NzVmNzM3YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIv
bG9nX3dyaXRlci5oCkBAIC0wLDAgKzEsNDggQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUg
TGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5h
bWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2lmbmRlZiBTVE9SQUdFX0xFVkVMREJfREJfTE9HX1dS
SVRFUl9IXworI2RlZmluZSBTVE9SQUdFX0xFVkVMREJfREJfTE9HX1dSSVRFUl9IXworCisjaW5j
bHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSAiZGIvbG9nX2Zvcm1hdC5oIgorI2luY2x1ZGUgImxl
dmVsZGIvc2xpY2UuaCIKKyNpbmNsdWRlICJsZXZlbGRiL3N0YXR1cy5oIgorCituYW1lc3BhY2Ug
bGV2ZWxkYiB7CisKK2NsYXNzIFdyaXRhYmxlRmlsZTsKKworbmFtZXNwYWNlIGxvZyB7CisKK2Ns
YXNzIFdyaXRlciB7CisgcHVibGljOgorICAvLyBDcmVhdGUgYSB3cml0ZXIgdGhhdCB3aWxsIGFw
cGVuZCBkYXRhIHRvICIqZGVzdCIuCisgIC8vICIqZGVzdCIgbXVzdCBiZSBpbml0aWFsbHkgZW1w
dHkuCisgIC8vICIqZGVzdCIgbXVzdCByZW1haW4gbGl2ZSB3aGlsZSB0aGlzIFdyaXRlciBpcyBp
biB1c2UuCisgIGV4cGxpY2l0IFdyaXRlcihXcml0YWJsZUZpbGUqIGRlc3QpOworICB+V3JpdGVy
KCk7CisKKyAgU3RhdHVzIEFkZFJlY29yZChjb25zdCBTbGljZSYgc2xpY2UpOworCisgcHJpdmF0
ZToKKyAgV3JpdGFibGVGaWxlKiBkZXN0XzsKKyAgaW50IGJsb2NrX29mZnNldF87ICAgICAgIC8v
IEN1cnJlbnQgb2Zmc2V0IGluIGJsb2NrCisKKyAgLy8gY3JjMzJjIHZhbHVlcyBmb3IgYWxsIHN1
cHBvcnRlZCByZWNvcmQgdHlwZXMuICBUaGVzZSBhcmUKKyAgLy8gcHJlLWNvbXB1dGVkIHRvIHJl
ZHVjZSB0aGUgb3ZlcmhlYWQgb2YgY29tcHV0aW5nIHRoZSBjcmMgb2YgdGhlCisgIC8vIHJlY29y
ZCB0eXBlIHN0b3JlZCBpbiB0aGUgaGVhZGVyLgorICB1aW50MzJfdCB0eXBlX2NyY19ba01heFJl
Y29yZFR5cGUgKyAxXTsKKworICBTdGF0dXMgRW1pdFBoeXNpY2FsUmVjb3JkKFJlY29yZFR5cGUg
dHlwZSwgY29uc3QgY2hhciogcHRyLCBzaXplX3QgbGVuZ3RoKTsKKworICAvLyBObyBjb3B5aW5n
IGFsbG93ZWQKKyAgV3JpdGVyKGNvbnN0IFdyaXRlciYpOworICB2b2lkIG9wZXJhdG9yPShjb25z
dCBXcml0ZXImKTsKK307CisKK30gIC8vIG5hbWVzcGFjZSBsb2cKK30gIC8vIG5hbWVzcGFjZSBs
ZXZlbGRiCisKKyNlbmRpZiAgLy8gU1RPUkFHRV9MRVZFTERCX0RCX0xPR19XUklURVJfSF8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvbWVtdGFibGUuY2MgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL21lbXRhYmxlLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJmZWMwYTdl
N2ExZGMyMTBiNDRkZDUyN2I5NTQ3ZTMzZTgyOWQ5YmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL21lbXRhYmxlLmNjCkBAIC0wLDAgKzEsMTQ1IEBACisv
LyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNl
ZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCisKKyNpbmNsdWRl
ICJkYi9tZW10YWJsZS5oIgorI2luY2x1ZGUgImRiL2RiZm9ybWF0LmgiCisjaW5jbHVkZSAibGV2
ZWxkYi9jb21wYXJhdG9yLmgiCisjaW5jbHVkZSAibGV2ZWxkYi9lbnYuaCIKKyNpbmNsdWRlICJs
ZXZlbGRiL2l0ZXJhdG9yLmgiCisjaW5jbHVkZSAidXRpbC9jb2RpbmcuaCIKKworbmFtZXNwYWNl
IGxldmVsZGIgeworCitzdGF0aWMgU2xpY2UgR2V0TGVuZ3RoUHJlZml4ZWRTbGljZShjb25zdCBj
aGFyKiBkYXRhKSB7CisgIHVpbnQzMl90IGxlbjsKKyAgY29uc3QgY2hhciogcCA9IGRhdGE7Cisg
IHAgPSBHZXRWYXJpbnQzMlB0cihwLCBwICsgNSwgJmxlbik7ICAvLyArNTogd2UgYXNzdW1lICJw
IiBpcyBub3QgY29ycnVwdGVkCisgIHJldHVybiBTbGljZShwLCBsZW4pOworfQorCitNZW1UYWJs
ZTo6TWVtVGFibGUoY29uc3QgSW50ZXJuYWxLZXlDb21wYXJhdG9yJiBjbXApCisgICAgOiBjb21w
YXJhdG9yXyhjbXApLAorICAgICAgcmVmc18oMCksCisgICAgICB0YWJsZV8oY29tcGFyYXRvcl8s
ICZhcmVuYV8pIHsKK30KKworTWVtVGFibGU6On5NZW1UYWJsZSgpIHsKKyAgYXNzZXJ0KHJlZnNf
ID09IDApOworfQorCitzaXplX3QgTWVtVGFibGU6OkFwcHJveGltYXRlTWVtb3J5VXNhZ2UoKSB7
IHJldHVybiBhcmVuYV8uTWVtb3J5VXNhZ2UoKTsgfQorCitpbnQgTWVtVGFibGU6OktleUNvbXBh
cmF0b3I6Om9wZXJhdG9yKCkoY29uc3QgY2hhciogYXB0ciwgY29uc3QgY2hhciogYnB0cikKKyAg
ICBjb25zdCB7CisgIC8vIEludGVybmFsIGtleXMgYXJlIGVuY29kZWQgYXMgbGVuZ3RoLXByZWZp
eGVkIHN0cmluZ3MuCisgIFNsaWNlIGEgPSBHZXRMZW5ndGhQcmVmaXhlZFNsaWNlKGFwdHIpOwor
ICBTbGljZSBiID0gR2V0TGVuZ3RoUHJlZml4ZWRTbGljZShicHRyKTsKKyAgcmV0dXJuIGNvbXBh
cmF0b3IuQ29tcGFyZShhLCBiKTsKK30KKworLy8gRW5jb2RlIGEgc3VpdGFibGUgaW50ZXJuYWwg
a2V5IHRhcmdldCBmb3IgInRhcmdldCIgYW5kIHJldHVybiBpdC4KKy8vIFVzZXMgKnNjcmF0Y2gg
YXMgc2NyYXRjaCBzcGFjZSwgYW5kIHRoZSByZXR1cm5lZCBwb2ludGVyIHdpbGwgcG9pbnQKKy8v
IGludG8gdGhpcyBzY3JhdGNoIHNwYWNlLgorc3RhdGljIGNvbnN0IGNoYXIqIEVuY29kZUtleShz
dGQ6OnN0cmluZyogc2NyYXRjaCwgY29uc3QgU2xpY2UmIHRhcmdldCkgeworICBzY3JhdGNoLT5j
bGVhcigpOworICBQdXRWYXJpbnQzMihzY3JhdGNoLCB0YXJnZXQuc2l6ZSgpKTsKKyAgc2NyYXRj
aC0+YXBwZW5kKHRhcmdldC5kYXRhKCksIHRhcmdldC5zaXplKCkpOworICByZXR1cm4gc2NyYXRj
aC0+ZGF0YSgpOworfQorCitjbGFzcyBNZW1UYWJsZUl0ZXJhdG9yOiBwdWJsaWMgSXRlcmF0b3Ig
eworIHB1YmxpYzoKKyAgZXhwbGljaXQgTWVtVGFibGVJdGVyYXRvcihNZW1UYWJsZTo6VGFibGUq
IHRhYmxlKSA6IGl0ZXJfKHRhYmxlKSB7IH0KKworICB2aXJ0dWFsIGJvb2wgVmFsaWQoKSBjb25z
dCB7IHJldHVybiBpdGVyXy5WYWxpZCgpOyB9CisgIHZpcnR1YWwgdm9pZCBTZWVrKGNvbnN0IFNs
aWNlJiBrKSB7IGl0ZXJfLlNlZWsoRW5jb2RlS2V5KCZ0bXBfLCBrKSk7IH0KKyAgdmlydHVhbCB2
b2lkIFNlZWtUb0ZpcnN0KCkgeyBpdGVyXy5TZWVrVG9GaXJzdCgpOyB9CisgIHZpcnR1YWwgdm9p
ZCBTZWVrVG9MYXN0KCkgeyBpdGVyXy5TZWVrVG9MYXN0KCk7IH0KKyAgdmlydHVhbCB2b2lkIE5l
eHQoKSB7IGl0ZXJfLk5leHQoKTsgfQorICB2aXJ0dWFsIHZvaWQgUHJldigpIHsgaXRlcl8uUHJl
digpOyB9CisgIHZpcnR1YWwgU2xpY2Uga2V5KCkgY29uc3QgeyByZXR1cm4gR2V0TGVuZ3RoUHJl
Zml4ZWRTbGljZShpdGVyXy5rZXkoKSk7IH0KKyAgdmlydHVhbCBTbGljZSB2YWx1ZSgpIGNvbnN0
IHsKKyAgICBTbGljZSBrZXlfc2xpY2UgPSBHZXRMZW5ndGhQcmVmaXhlZFNsaWNlKGl0ZXJfLmtl
eSgpKTsKKyAgICByZXR1cm4gR2V0TGVuZ3RoUHJlZml4ZWRTbGljZShrZXlfc2xpY2UuZGF0YSgp
ICsga2V5X3NsaWNlLnNpemUoKSk7CisgIH0KKworICB2aXJ0dWFsIFN0YXR1cyBzdGF0dXMoKSBj
b25zdCB7IHJldHVybiBTdGF0dXM6Ok9LKCk7IH0KKworIHByaXZhdGU6CisgIE1lbVRhYmxlOjpU
YWJsZTo6SXRlcmF0b3IgaXRlcl87CisgIHN0ZDo6c3RyaW5nIHRtcF87ICAgICAgIC8vIEZvciBw
YXNzaW5nIHRvIEVuY29kZUtleQorCisgIC8vIE5vIGNvcHlpbmcgYWxsb3dlZAorICBNZW1UYWJs
ZUl0ZXJhdG9yKGNvbnN0IE1lbVRhYmxlSXRlcmF0b3ImKTsKKyAgdm9pZCBvcGVyYXRvcj0oY29u
c3QgTWVtVGFibGVJdGVyYXRvciYpOworfTsKKworSXRlcmF0b3IqIE1lbVRhYmxlOjpOZXdJdGVy
YXRvcigpIHsKKyAgcmV0dXJuIG5ldyBNZW1UYWJsZUl0ZXJhdG9yKCZ0YWJsZV8pOworfQorCit2
b2lkIE1lbVRhYmxlOjpBZGQoU2VxdWVuY2VOdW1iZXIgcywgVmFsdWVUeXBlIHR5cGUsCisgICAg
ICAgICAgICAgICAgICAgY29uc3QgU2xpY2UmIGtleSwKKyAgICAgICAgICAgICAgICAgICBjb25z
dCBTbGljZSYgdmFsdWUpIHsKKyAgLy8gRm9ybWF0IG9mIGFuIGVudHJ5IGlzIGNvbmNhdGVuYXRp
b24gb2Y6CisgIC8vICBrZXlfc2l6ZSAgICAgOiB2YXJpbnQzMiBvZiBpbnRlcm5hbF9rZXkuc2l6
ZSgpCisgIC8vICBrZXkgYnl0ZXMgICAgOiBjaGFyW2ludGVybmFsX2tleS5zaXplKCldCisgIC8v
ICB2YWx1ZV9zaXplICAgOiB2YXJpbnQzMiBvZiB2YWx1ZS5zaXplKCkKKyAgLy8gIHZhbHVlIGJ5
dGVzICA6IGNoYXJbdmFsdWUuc2l6ZSgpXQorICBzaXplX3Qga2V5X3NpemUgPSBrZXkuc2l6ZSgp
OworICBzaXplX3QgdmFsX3NpemUgPSB2YWx1ZS5zaXplKCk7CisgIHNpemVfdCBpbnRlcm5hbF9r
ZXlfc2l6ZSA9IGtleV9zaXplICsgODsKKyAgY29uc3Qgc2l6ZV90IGVuY29kZWRfbGVuID0KKyAg
ICAgIFZhcmludExlbmd0aChpbnRlcm5hbF9rZXlfc2l6ZSkgKyBpbnRlcm5hbF9rZXlfc2l6ZSAr
CisgICAgICBWYXJpbnRMZW5ndGgodmFsX3NpemUpICsgdmFsX3NpemU7CisgIGNoYXIqIGJ1ZiA9
IGFyZW5hXy5BbGxvY2F0ZShlbmNvZGVkX2xlbik7CisgIGNoYXIqIHAgPSBFbmNvZGVWYXJpbnQz
MihidWYsIGludGVybmFsX2tleV9zaXplKTsKKyAgbWVtY3B5KHAsIGtleS5kYXRhKCksIGtleV9z
aXplKTsKKyAgcCArPSBrZXlfc2l6ZTsKKyAgRW5jb2RlRml4ZWQ2NChwLCAocyA8PCA4KSB8IHR5
cGUpOworICBwICs9IDg7CisgIHAgPSBFbmNvZGVWYXJpbnQzMihwLCB2YWxfc2l6ZSk7CisgIG1l
bWNweShwLCB2YWx1ZS5kYXRhKCksIHZhbF9zaXplKTsKKyAgYXNzZXJ0KChwICsgdmFsX3NpemUp
IC0gYnVmID09IGVuY29kZWRfbGVuKTsKKyAgdGFibGVfLkluc2VydChidWYpOworfQorCitib29s
IE1lbVRhYmxlOjpHZXQoY29uc3QgTG9va3VwS2V5JiBrZXksIHN0ZDo6c3RyaW5nKiB2YWx1ZSwg
U3RhdHVzKiBzKSB7CisgIFNsaWNlIG1lbWtleSA9IGtleS5tZW10YWJsZV9rZXkoKTsKKyAgVGFi
bGU6Okl0ZXJhdG9yIGl0ZXIoJnRhYmxlXyk7CisgIGl0ZXIuU2VlayhtZW1rZXkuZGF0YSgpKTsK
KyAgaWYgKGl0ZXIuVmFsaWQoKSkgeworICAgIC8vIGVudHJ5IGZvcm1hdCBpczoKKyAgICAvLyAg
ICBrbGVuZ3RoICB2YXJpbnQzMgorICAgIC8vICAgIHVzZXJrZXkgIGNoYXJba2xlbmd0aF0KKyAg
ICAvLyAgICB0YWcgICAgICB1aW50NjQKKyAgICAvLyAgICB2bGVuZ3RoICB2YXJpbnQzMgorICAg
IC8vICAgIHZhbHVlICAgIGNoYXJbdmxlbmd0aF0KKyAgICAvLyBDaGVjayB0aGF0IGl0IGJlbG9u
Z3MgdG8gc2FtZSB1c2VyIGtleS4gIFdlIGRvIG5vdCBjaGVjayB0aGUKKyAgICAvLyBzZXF1ZW5j
ZSBudW1iZXIgc2luY2UgdGhlIFNlZWsoKSBjYWxsIGFib3ZlIHNob3VsZCBoYXZlIHNraXBwZWQK
KyAgICAvLyBhbGwgZW50cmllcyB3aXRoIG92ZXJseSBsYXJnZSBzZXF1ZW5jZSBudW1iZXJzLgor
ICAgIGNvbnN0IGNoYXIqIGVudHJ5ID0gaXRlci5rZXkoKTsKKyAgICB1aW50MzJfdCBrZXlfbGVu
Z3RoOworICAgIGNvbnN0IGNoYXIqIGtleV9wdHIgPSBHZXRWYXJpbnQzMlB0cihlbnRyeSwgZW50
cnkrNSwgJmtleV9sZW5ndGgpOworICAgIGlmIChjb21wYXJhdG9yXy5jb21wYXJhdG9yLnVzZXJf
Y29tcGFyYXRvcigpLT5Db21wYXJlKAorICAgICAgICAgICAgU2xpY2Uoa2V5X3B0ciwga2V5X2xl
bmd0aCAtIDgpLAorICAgICAgICAgICAga2V5LnVzZXJfa2V5KCkpID09IDApIHsKKyAgICAgIC8v
IENvcnJlY3QgdXNlciBrZXkKKyAgICAgIGNvbnN0IHVpbnQ2NF90IHRhZyA9IERlY29kZUZpeGVk
NjQoa2V5X3B0ciArIGtleV9sZW5ndGggLSA4KTsKKyAgICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8
VmFsdWVUeXBlPih0YWcgJiAweGZmKSkgeworICAgICAgICBjYXNlIGtUeXBlVmFsdWU6IHsKKyAg
ICAgICAgICBTbGljZSB2ID0gR2V0TGVuZ3RoUHJlZml4ZWRTbGljZShrZXlfcHRyICsga2V5X2xl
bmd0aCk7CisgICAgICAgICAgdmFsdWUtPmFzc2lnbih2LmRhdGEoKSwgdi5zaXplKCkpOworICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGNhc2Uga1R5cGVEZWxldGlv
bjoKKyAgICAgICAgICAqcyA9IFN0YXR1czo6Tm90Rm91bmQoU2xpY2UoKSk7CisgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiBmYWxzZTsKK30KKwor
fSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xl
dmVsZGIvZGIvbWVtdGFibGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvbWVtdGFi
bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi45MmU5MGJiMDk5ZjMzNTY1MjBjNDJkNmJiODg3YjJhMzVjNmJiZTM5
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9tZW10YWJs
ZS5oCkBAIC0wLDAgKzEsOTEgQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNv
bnRyaWJ1dG9ycy4KKworI2lmbmRlZiBTVE9SQUdFX0xFVkVMREJfREJfTUVNVEFCTEVfSF8KKyNk
ZWZpbmUgU1RPUkFHRV9MRVZFTERCX0RCX01FTVRBQkxFX0hfCisKKyNpbmNsdWRlIDxzdHJpbmc+
CisjaW5jbHVkZSAibGV2ZWxkYi9kYi5oIgorI2luY2x1ZGUgImRiL2RiZm9ybWF0LmgiCisjaW5j
bHVkZSAiZGIvc2tpcGxpc3QuaCIKKyNpbmNsdWRlICJ1dGlsL2FyZW5hLmgiCisKK25hbWVzcGFj
ZSBsZXZlbGRiIHsKKworY2xhc3MgSW50ZXJuYWxLZXlDb21wYXJhdG9yOworY2xhc3MgTXV0ZXg7
CitjbGFzcyBNZW1UYWJsZUl0ZXJhdG9yOworCitjbGFzcyBNZW1UYWJsZSB7CisgcHVibGljOgor
ICAvLyBNZW1UYWJsZXMgYXJlIHJlZmVyZW5jZSBjb3VudGVkLiAgVGhlIGluaXRpYWwgcmVmZXJl
bmNlIGNvdW50CisgIC8vIGlzIHplcm8gYW5kIHRoZSBjYWxsZXIgbXVzdCBjYWxsIFJlZigpIGF0
IGxlYXN0IG9uY2UuCisgIGV4cGxpY2l0IE1lbVRhYmxlKGNvbnN0IEludGVybmFsS2V5Q29tcGFy
YXRvciYgY29tcGFyYXRvcik7CisKKyAgLy8gSW5jcmVhc2UgcmVmZXJlbmNlIGNvdW50LgorICB2
b2lkIFJlZigpIHsgKytyZWZzXzsgfQorCisgIC8vIERyb3AgcmVmZXJlbmNlIGNvdW50LiAgRGVs
ZXRlIGlmIG5vIG1vcmUgcmVmZXJlbmNlcyBleGlzdC4KKyAgdm9pZCBVbnJlZigpIHsKKyAgICAt
LXJlZnNfOworICAgIGFzc2VydChyZWZzXyA+PSAwKTsKKyAgICBpZiAocmVmc18gPD0gMCkgewor
ICAgICAgZGVsZXRlIHRoaXM7CisgICAgfQorICB9CisKKyAgLy8gUmV0dXJucyBhbiBlc3RpbWF0
ZSBvZiB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9mIGRhdGEgaW4gdXNlIGJ5IHRoaXMKKyAgLy8gZGF0
YSBzdHJ1Y3R1cmUuCisgIC8vCisgIC8vIFJFUVVJUkVTOiBleHRlcm5hbCBzeW5jaHJvbml6YXRp
b24gdG8gcHJldmVudCBzaW11bHRhbmVvdXMKKyAgLy8gb3BlcmF0aW9ucyBvbiB0aGUgc2FtZSBN
ZW1UYWJsZS4KKyAgc2l6ZV90IEFwcHJveGltYXRlTWVtb3J5VXNhZ2UoKTsKKworICAvLyBSZXR1
cm4gYW4gaXRlcmF0b3IgdGhhdCB5aWVsZHMgdGhlIGNvbnRlbnRzIG9mIHRoZSBtZW10YWJsZS4K
KyAgLy8KKyAgLy8gVGhlIGNhbGxlciBtdXN0IGVuc3VyZSB0aGF0IHRoZSB1bmRlcmx5aW5nIE1l
bVRhYmxlIHJlbWFpbnMgbGl2ZQorICAvLyB3aGlsZSB0aGUgcmV0dXJuZWQgaXRlcmF0b3IgaXMg
bGl2ZS4gIFRoZSBrZXlzIHJldHVybmVkIGJ5IHRoaXMKKyAgLy8gaXRlcmF0b3IgYXJlIGludGVy
bmFsIGtleXMgZW5jb2RlZCBieSBBcHBlbmRJbnRlcm5hbEtleSBpbiB0aGUKKyAgLy8gZGIvZm9y
bWF0LntoLGNjfSBtb2R1bGUuCisgIEl0ZXJhdG9yKiBOZXdJdGVyYXRvcigpOworCisgIC8vIEFk
ZCBhbiBlbnRyeSBpbnRvIG1lbXRhYmxlIHRoYXQgbWFwcyBrZXkgdG8gdmFsdWUgYXQgdGhlCisg
IC8vIHNwZWNpZmllZCBzZXF1ZW5jZSBudW1iZXIgYW5kIHdpdGggdGhlIHNwZWNpZmllZCB0eXBl
LgorICAvLyBUeXBpY2FsbHkgdmFsdWUgd2lsbCBiZSBlbXB0eSBpZiB0eXBlPT1rVHlwZURlbGV0
aW9uLgorICB2b2lkIEFkZChTZXF1ZW5jZU51bWJlciBzZXEsIFZhbHVlVHlwZSB0eXBlLAorICAg
ICAgICAgICBjb25zdCBTbGljZSYga2V5LAorICAgICAgICAgICBjb25zdCBTbGljZSYgdmFsdWUp
OworCisgIC8vIElmIG1lbXRhYmxlIGNvbnRhaW5zIGEgdmFsdWUgZm9yIGtleSwgc3RvcmUgaXQg
aW4gKnZhbHVlIGFuZCByZXR1cm4gdHJ1ZS4KKyAgLy8gSWYgbWVtdGFibGUgY29udGFpbnMgYSBk
ZWxldGlvbiBmb3Iga2V5LCBzdG9yZSBhIE5vdEZvdW5kKCkgZXJyb3IKKyAgLy8gaW4gKnN0YXR1
cyBhbmQgcmV0dXJuIHRydWUuCisgIC8vIEVsc2UsIHJldHVybiBmYWxzZS4KKyAgYm9vbCBHZXQo
Y29uc3QgTG9va3VwS2V5JiBrZXksIHN0ZDo6c3RyaW5nKiB2YWx1ZSwgU3RhdHVzKiBzKTsKKwor
IHByaXZhdGU6CisgIH5NZW1UYWJsZSgpOyAgLy8gUHJpdmF0ZSBzaW5jZSBvbmx5IFVucmVmKCkg
c2hvdWxkIGJlIHVzZWQgdG8gZGVsZXRlIGl0CisKKyAgc3RydWN0IEtleUNvbXBhcmF0b3Igewor
ICAgIGNvbnN0IEludGVybmFsS2V5Q29tcGFyYXRvciBjb21wYXJhdG9yOworICAgIGV4cGxpY2l0
IEtleUNvbXBhcmF0b3IoY29uc3QgSW50ZXJuYWxLZXlDb21wYXJhdG9yJiBjKSA6IGNvbXBhcmF0
b3IoYykgeyB9CisgICAgaW50IG9wZXJhdG9yKCkoY29uc3QgY2hhciogYSwgY29uc3QgY2hhciog
YikgY29uc3Q7CisgIH07CisgIGZyaWVuZCBjbGFzcyBNZW1UYWJsZUl0ZXJhdG9yOworICBmcmll
bmQgY2xhc3MgTWVtVGFibGVCYWNrd2FyZEl0ZXJhdG9yOworCisgIHR5cGVkZWYgU2tpcExpc3Q8
Y29uc3QgY2hhciosIEtleUNvbXBhcmF0b3I+IFRhYmxlOworCisgIEtleUNvbXBhcmF0b3IgY29t
cGFyYXRvcl87CisgIGludCByZWZzXzsKKyAgQXJlbmEgYXJlbmFfOworICBUYWJsZSB0YWJsZV87
CisKKyAgLy8gTm8gY29weWluZyBhbGxvd2VkCisgIE1lbVRhYmxlKGNvbnN0IE1lbVRhYmxlJik7
CisgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IE1lbVRhYmxlJik7Cit9OworCit9ICAvLyBuYW1lc3Bh
Y2UgbGV2ZWxkYgorCisjZW5kaWYgIC8vIFNUT1JBR0VfTEVWRUxEQl9EQl9NRU1UQUJMRV9IXwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9yZXBhaXIuY2MgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL3JlcGFpci5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMjJkNTJmM2Rl
YmUwYzBlODlhNjgyNWNhMzc3OGM1ODk0YzM3ODNjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9yZXBhaXIuY2MKQEAgLTAsMCArMSwzODkgQEAKKy8vIENv
cHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRo
ZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKy8vCisvLyBXZSByZWNv
dmVyIHRoZSBjb250ZW50cyBvZiB0aGUgZGVzY3JpcHRvciBmcm9tIHRoZSBvdGhlciBmaWxlcyB3
ZSBmaW5kLgorLy8gKDEpIEFueSBsb2cgZmlsZXMgYXJlIGZpcnN0IGNvbnZlcnRlZCB0byB0YWJs
ZXMKKy8vICgyKSBXZSBzY2FuIGV2ZXJ5IHRhYmxlIHRvIGNvbXB1dGUKKy8vICAgICAoYSkgc21h
bGxlc3QvbGFyZ2VzdCBmb3IgdGhlIHRhYmxlCisvLyAgICAgKGIpIGxhcmdlc3Qgc2VxdWVuY2Ug
bnVtYmVyIGluIHRoZSB0YWJsZQorLy8gKDMpIFdlIGdlbmVyYXRlIGRlc2NyaXB0b3IgY29udGVu
dHM6CisvLyAgICAgIC0gbG9nIG51bWJlciBpcyBzZXQgdG8gemVybworLy8gICAgICAtIG5leHQt
ZmlsZS1udW1iZXIgaXMgc2V0IHRvIDEgKyBsYXJnZXN0IGZpbGUgbnVtYmVyIHdlIGZvdW5kCisv
LyAgICAgIC0gbGFzdC1zZXF1ZW5jZS1udW1iZXIgaXMgc2V0IHRvIGxhcmdlc3Qgc2VxdWVuY2Uj
IGZvdW5kIGFjcm9zcworLy8gICAgICAgIGFsbCB0YWJsZXMgKHNlZSAyYykKKy8vICAgICAgLSBj
b21wYWN0aW9uIHBvaW50ZXJzIGFyZSBjbGVhcmVkCisvLyAgICAgIC0gZXZlcnkgdGFibGUgZmls
ZSBpcyBhZGRlZCBhdCBsZXZlbCAwCisvLworLy8gUG9zc2libGUgb3B0aW1pemF0aW9uIDE6Cisv
LyAgIChhKSBDb21wdXRlIHRvdGFsIHNpemUgYW5kIHVzZSB0byBwaWNrIGFwcHJvcHJpYXRlIG1h
eC1sZXZlbCBNCisvLyAgIChiKSBTb3J0IHRhYmxlcyBieSBsYXJnZXN0IHNlcXVlbmNlIyBpbiB0
aGUgdGFibGUKKy8vICAgKGMpIEZvciBlYWNoIHRhYmxlOiBpZiBpdCBvdmVybGFwcyBlYXJsaWVy
IHRhYmxlLCBwbGFjZSBpbiBsZXZlbC0wLAorLy8gICAgICAgZWxzZSBwbGFjZSBpbiBsZXZlbC1N
LgorLy8gUG9zc2libGUgb3B0aW1pemF0aW9uIDI6CisvLyAgIFN0b3JlIHBlci10YWJsZSBtZXRh
ZGF0YSAoc21hbGxlc3QsIGxhcmdlc3QsIGxhcmdlc3Qtc2VxIywgLi4uKQorLy8gICBpbiB0aGUg
dGFibGUncyBtZXRhIHNlY3Rpb24gdG8gc3BlZWQgdXAgU2NhblRhYmxlLgorCisjaW5jbHVkZSAi
ZGIvYnVpbGRlci5oIgorI2luY2x1ZGUgImRiL2RiX2ltcGwuaCIKKyNpbmNsdWRlICJkYi9kYmZv
cm1hdC5oIgorI2luY2x1ZGUgImRiL2ZpbGVuYW1lLmgiCisjaW5jbHVkZSAiZGIvbG9nX3JlYWRl
ci5oIgorI2luY2x1ZGUgImRiL2xvZ193cml0ZXIuaCIKKyNpbmNsdWRlICJkYi9tZW10YWJsZS5o
IgorI2luY2x1ZGUgImRiL3RhYmxlX2NhY2hlLmgiCisjaW5jbHVkZSAiZGIvdmVyc2lvbl9lZGl0
LmgiCisjaW5jbHVkZSAiZGIvd3JpdGVfYmF0Y2hfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJsZXZl
bGRiL2NvbXBhcmF0b3IuaCIKKyNpbmNsdWRlICJsZXZlbGRiL2RiLmgiCisjaW5jbHVkZSAibGV2
ZWxkYi9lbnYuaCIKKworbmFtZXNwYWNlIGxldmVsZGIgeworCituYW1lc3BhY2UgeworCitjbGFz
cyBSZXBhaXJlciB7CisgcHVibGljOgorICBSZXBhaXJlcihjb25zdCBzdGQ6OnN0cmluZyYgZGJu
YW1lLCBjb25zdCBPcHRpb25zJiBvcHRpb25zKQorICAgICAgOiBkYm5hbWVfKGRibmFtZSksCisg
ICAgICAgIGVudl8ob3B0aW9ucy5lbnYpLAorICAgICAgICBpY21wXyhvcHRpb25zLmNvbXBhcmF0
b3IpLAorICAgICAgICBpcG9saWN5XyhvcHRpb25zLmZpbHRlcl9wb2xpY3kpLAorICAgICAgICBv
cHRpb25zXyhTYW5pdGl6ZU9wdGlvbnMoZGJuYW1lLCAmaWNtcF8sICZpcG9saWN5Xywgb3B0aW9u
cykpLAorICAgICAgICBvd25zX2luZm9fbG9nXyhvcHRpb25zXy5pbmZvX2xvZyAhPSBvcHRpb25z
LmluZm9fbG9nKSwKKyAgICAgICAgb3duc19jYWNoZV8ob3B0aW9uc18uYmxvY2tfY2FjaGUgIT0g
b3B0aW9ucy5ibG9ja19jYWNoZSksCisgICAgICAgIG5leHRfZmlsZV9udW1iZXJfKDEpIHsKKyAg
ICAvLyBUYWJsZUNhY2hlIGNhbiBiZSBzbWFsbCBzaW5jZSB3ZSBleHBlY3QgZWFjaCB0YWJsZSB0
byBiZSBvcGVuZWQgb25jZS4KKyAgICB0YWJsZV9jYWNoZV8gPSBuZXcgVGFibGVDYWNoZShkYm5h
bWVfLCAmb3B0aW9uc18sIDEwKTsKKyAgfQorCisgIH5SZXBhaXJlcigpIHsKKyAgICBkZWxldGUg
dGFibGVfY2FjaGVfOworICAgIGlmIChvd25zX2luZm9fbG9nXykgeworICAgICAgZGVsZXRlIG9w
dGlvbnNfLmluZm9fbG9nOworICAgIH0KKyAgICBpZiAob3duc19jYWNoZV8pIHsKKyAgICAgIGRl
bGV0ZSBvcHRpb25zXy5ibG9ja19jYWNoZTsKKyAgICB9CisgIH0KKworICBTdGF0dXMgUnVuKCkg
eworICAgIFN0YXR1cyBzdGF0dXMgPSBGaW5kRmlsZXMoKTsKKyAgICBpZiAoc3RhdHVzLm9rKCkp
IHsKKyAgICAgIENvbnZlcnRMb2dGaWxlc1RvVGFibGVzKCk7CisgICAgICBFeHRyYWN0TWV0YURh
dGEoKTsKKyAgICAgIHN0YXR1cyA9IFdyaXRlRGVzY3JpcHRvcigpOworICAgIH0KKyAgICBpZiAo
c3RhdHVzLm9rKCkpIHsKKyAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBieXRlcyA9IDA7CisgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRhYmxlc18uc2l6ZSgpOyBpKyspIHsKKyAgICAgICAg
Ynl0ZXMgKz0gdGFibGVzX1tpXS5tZXRhLmZpbGVfc2l6ZTsKKyAgICAgIH0KKyAgICAgIExvZyhv
cHRpb25zXy5pbmZvX2xvZywKKyAgICAgICAgICAiKioqKiBSZXBhaXJlZCBsZXZlbGRiICVzOyAi
CisgICAgICAgICAgInJlY292ZXJlZCAlZCBmaWxlczsgJWxsdSBieXRlcy4gIgorICAgICAgICAg
ICJTb21lIGRhdGEgbWF5IGhhdmUgYmVlbiBsb3N0LiAiCisgICAgICAgICAgIioqKioiLAorICAg
ICAgICAgIGRibmFtZV8uY19zdHIoKSwKKyAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KHRhYmxl
c18uc2l6ZSgpKSwKKyAgICAgICAgICBieXRlcyk7CisgICAgfQorICAgIHJldHVybiBzdGF0dXM7
CisgIH0KKworIHByaXZhdGU6CisgIHN0cnVjdCBUYWJsZUluZm8geworICAgIEZpbGVNZXRhRGF0
YSBtZXRhOworICAgIFNlcXVlbmNlTnVtYmVyIG1heF9zZXF1ZW5jZTsKKyAgfTsKKworICBzdGQ6
OnN0cmluZyBjb25zdCBkYm5hbWVfOworICBFbnYqIGNvbnN0IGVudl87CisgIEludGVybmFsS2V5
Q29tcGFyYXRvciBjb25zdCBpY21wXzsKKyAgSW50ZXJuYWxGaWx0ZXJQb2xpY3kgY29uc3QgaXBv
bGljeV87CisgIE9wdGlvbnMgY29uc3Qgb3B0aW9uc187CisgIGJvb2wgb3duc19pbmZvX2xvZ187
CisgIGJvb2wgb3duc19jYWNoZV87CisgIFRhYmxlQ2FjaGUqIHRhYmxlX2NhY2hlXzsKKyAgVmVy
c2lvbkVkaXQgZWRpdF87CisKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG1hbmlmZXN0c187
CisgIHN0ZDo6dmVjdG9yPHVpbnQ2NF90PiB0YWJsZV9udW1iZXJzXzsKKyAgc3RkOjp2ZWN0b3I8
dWludDY0X3Q+IGxvZ3NfOworICBzdGQ6OnZlY3RvcjxUYWJsZUluZm8+IHRhYmxlc187CisgIHVp
bnQ2NF90IG5leHRfZmlsZV9udW1iZXJfOworCisgIFN0YXR1cyBGaW5kRmlsZXMoKSB7CisgICAg
c3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGZpbGVuYW1lczsKKyAgICBTdGF0dXMgc3RhdHVzID0g
ZW52Xy0+R2V0Q2hpbGRyZW4oZGJuYW1lXywgJmZpbGVuYW1lcyk7CisgICAgaWYgKCFzdGF0dXMu
b2soKSkgeworICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisgICAgaWYgKGZpbGVuYW1lcy5l
bXB0eSgpKSB7CisgICAgICByZXR1cm4gU3RhdHVzOjpJT0Vycm9yKGRibmFtZV8sICJyZXBhaXIg
Zm91bmQgbm8gZmlsZXMiKTsKKyAgICB9CisKKyAgICB1aW50NjRfdCBudW1iZXI7CisgICAgRmls
ZVR5cGUgdHlwZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpbGVuYW1lcy5zaXplKCk7
IGkrKykgeworICAgICAgaWYgKFBhcnNlRmlsZU5hbWUoZmlsZW5hbWVzW2ldLCAmbnVtYmVyLCAm
dHlwZSkpIHsKKyAgICAgICAgaWYgKHR5cGUgPT0ga0Rlc2NyaXB0b3JGaWxlKSB7CisgICAgICAg
ICAgbWFuaWZlc3RzXy5wdXNoX2JhY2soZmlsZW5hbWVzW2ldKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICBpZiAobnVtYmVyICsgMSA+IG5leHRfZmlsZV9udW1iZXJfKSB7CisgICAgICAg
ICAgICBuZXh0X2ZpbGVfbnVtYmVyXyA9IG51bWJlciArIDE7CisgICAgICAgICAgfQorICAgICAg
ICAgIGlmICh0eXBlID09IGtMb2dGaWxlKSB7CisgICAgICAgICAgICBsb2dzXy5wdXNoX2JhY2so
bnVtYmVyKTsKKyAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0ga1RhYmxlRmlsZSkgeworICAg
ICAgICAgICAgdGFibGVfbnVtYmVyc18ucHVzaF9iYWNrKG51bWJlcik7CisgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIC8vIElnbm9yZSBvdGhlciBmaWxlcworICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc3RhdHVzOworICB9CisKKyAgdm9p
ZCBDb252ZXJ0TG9nRmlsZXNUb1RhYmxlcygpIHsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGxvZ3NfLnNpemUoKTsgaSsrKSB7CisgICAgICBzdGQ6OnN0cmluZyBsb2duYW1lID0gTG9nRmls
ZU5hbWUoZGJuYW1lXywgbG9nc19baV0pOworICAgICAgU3RhdHVzIHN0YXR1cyA9IENvbnZlcnRM
b2dUb1RhYmxlKGxvZ3NfW2ldKTsKKyAgICAgIGlmICghc3RhdHVzLm9rKCkpIHsKKyAgICAgICAg
TG9nKG9wdGlvbnNfLmluZm9fbG9nLCAiTG9nICMlbGx1OiBpZ25vcmluZyBjb252ZXJzaW9uIGVy
cm9yOiAlcyIsCisgICAgICAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBsb2dzX1tpXSwKKyAg
ICAgICAgICAgIHN0YXR1cy5Ub1N0cmluZygpLmNfc3RyKCkpOworICAgICAgfQorICAgICAgQXJj
aGl2ZUZpbGUobG9nbmFtZSk7CisgICAgfQorICB9CisKKyAgU3RhdHVzIENvbnZlcnRMb2dUb1Rh
YmxlKHVpbnQ2NF90IGxvZykgeworICAgIHN0cnVjdCBMb2dSZXBvcnRlciA6IHB1YmxpYyBsb2c6
OlJlYWRlcjo6UmVwb3J0ZXIgeworICAgICAgRW52KiBlbnY7CisgICAgICBMb2dnZXIqIGluZm9f
bG9nOworICAgICAgdWludDY0X3QgbG9nbnVtOworICAgICAgdmlydHVhbCB2b2lkIENvcnJ1cHRp
b24oc2l6ZV90IGJ5dGVzLCBjb25zdCBTdGF0dXMmIHMpIHsKKyAgICAgICAgLy8gV2UgcHJpbnQg
ZXJyb3IgbWVzc2FnZXMgZm9yIGNvcnJ1cHRpb24sIGJ1dCBjb250aW51ZSByZXBhaXJpbmcuCisg
ICAgICAgIExvZyhpbmZvX2xvZywgIkxvZyAjJWxsdTogZHJvcHBpbmcgJWQgYnl0ZXM7ICVzIiwK
KyAgICAgICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGxvZ251bSwKKyAgICAgICAgICAgIHN0
YXRpY19jYXN0PGludD4oYnl0ZXMpLAorICAgICAgICAgICAgcy5Ub1N0cmluZygpLmNfc3RyKCkp
OworICAgICAgfQorICAgIH07CisKKyAgICAvLyBPcGVuIHRoZSBsb2cgZmlsZQorICAgIHN0ZDo6
c3RyaW5nIGxvZ25hbWUgPSBMb2dGaWxlTmFtZShkYm5hbWVfLCBsb2cpOworICAgIFNlcXVlbnRp
YWxGaWxlKiBsZmlsZTsKKyAgICBTdGF0dXMgc3RhdHVzID0gZW52Xy0+TmV3U2VxdWVudGlhbEZp
bGUobG9nbmFtZSwgJmxmaWxlKTsKKyAgICBpZiAoIXN0YXR1cy5vaygpKSB7CisgICAgICByZXR1
cm4gc3RhdHVzOworICAgIH0KKworICAgIC8vIENyZWF0ZSB0aGUgbG9nIHJlYWRlci4KKyAgICBM
b2dSZXBvcnRlciByZXBvcnRlcjsKKyAgICByZXBvcnRlci5lbnYgPSBlbnZfOworICAgIHJlcG9y
dGVyLmluZm9fbG9nID0gb3B0aW9uc18uaW5mb19sb2c7CisgICAgcmVwb3J0ZXIubG9nbnVtID0g
bG9nOworICAgIC8vIFdlIGludGVudGlhbGx5IG1ha2UgbG9nOjpSZWFkZXIgZG8gY2hlY2tzdW1t
aW5nIHNvIHRoYXQKKyAgICAvLyBjb3JydXB0aW9ucyBjYXVzZSBlbnRpcmUgY29tbWl0cyB0byBi
ZSBza2lwcGVkIGluc3RlYWQgb2YKKyAgICAvLyBwcm9wYWdhdGluZyBiYWQgaW5mb3JtYXRpb24g
KGxpa2Ugb3Zlcmx5IGxhcmdlIHNlcXVlbmNlCisgICAgLy8gbnVtYmVycykuCisgICAgbG9nOjpS
ZWFkZXIgcmVhZGVyKGxmaWxlLCAmcmVwb3J0ZXIsIGZhbHNlLypkbyBub3QgY2hlY2tzdW0qLywK
KyAgICAgICAgICAgICAgICAgICAgICAgMC8qaW5pdGlhbF9vZmZzZXQqLyk7CisKKyAgICAvLyBS
ZWFkIGFsbCB0aGUgcmVjb3JkcyBhbmQgYWRkIHRvIGEgbWVtdGFibGUKKyAgICBzdGQ6OnN0cmlu
ZyBzY3JhdGNoOworICAgIFNsaWNlIHJlY29yZDsKKyAgICBXcml0ZUJhdGNoIGJhdGNoOworICAg
IE1lbVRhYmxlKiBtZW0gPSBuZXcgTWVtVGFibGUoaWNtcF8pOworICAgIG1lbS0+UmVmKCk7Cisg
ICAgaW50IGNvdW50ZXIgPSAwOworICAgIHdoaWxlIChyZWFkZXIuUmVhZFJlY29yZCgmcmVjb3Jk
LCAmc2NyYXRjaCkpIHsKKyAgICAgIGlmIChyZWNvcmQuc2l6ZSgpIDwgMTIpIHsKKyAgICAgICAg
cmVwb3J0ZXIuQ29ycnVwdGlvbigKKyAgICAgICAgICAgIHJlY29yZC5zaXplKCksIFN0YXR1czo6
Q29ycnVwdGlvbigibG9nIHJlY29yZCB0b28gc21hbGwiKSk7CisgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgfQorICAgICAgV3JpdGVCYXRjaEludGVybmFsOjpTZXRDb250ZW50cygmYmF0Y2gsIHJl
Y29yZCk7CisgICAgICBzdGF0dXMgPSBXcml0ZUJhdGNoSW50ZXJuYWw6Okluc2VydEludG8oJmJh
dGNoLCBtZW0pOworICAgICAgaWYgKHN0YXR1cy5vaygpKSB7CisgICAgICAgIGNvdW50ZXIgKz0g
V3JpdGVCYXRjaEludGVybmFsOjpDb3VudCgmYmF0Y2gpOworICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgTG9nKG9wdGlvbnNfLmluZm9fbG9nLCAiTG9nICMlbGx1OiBpZ25vcmluZyAlcyIsCisgICAg
ICAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBsb2csCisgICAgICAgICAgICBzdGF0dXMuVG9T
dHJpbmcoKS5jX3N0cigpKTsKKyAgICAgICAgc3RhdHVzID0gU3RhdHVzOjpPSygpOyAgLy8gS2Vl
cCBnb2luZyB3aXRoIHJlc3Qgb2YgZmlsZQorICAgICAgfQorICAgIH0KKyAgICBkZWxldGUgbGZp
bGU7CisKKyAgICAvLyBEbyBub3QgcmVjb3JkIGEgdmVyc2lvbiBlZGl0IGZvciB0aGlzIGNvbnZl
cnNpb24gdG8gYSBUYWJsZQorICAgIC8vIHNpbmNlIEV4dHJhY3RNZXRhRGF0YSgpIHdpbGwgYWxz
byBnZW5lcmF0ZSBlZGl0cy4KKyAgICBGaWxlTWV0YURhdGEgbWV0YTsKKyAgICBtZXRhLm51bWJl
ciA9IG5leHRfZmlsZV9udW1iZXJfKys7CisgICAgSXRlcmF0b3IqIGl0ZXIgPSBtZW0tPk5ld0l0
ZXJhdG9yKCk7CisgICAgc3RhdHVzID0gQnVpbGRUYWJsZShkYm5hbWVfLCBlbnZfLCBvcHRpb25z
XywgdGFibGVfY2FjaGVfLCBpdGVyLCAmbWV0YSk7CisgICAgZGVsZXRlIGl0ZXI7CisgICAgbWVt
LT5VbnJlZigpOworICAgIG1lbSA9IE5VTEw7CisgICAgaWYgKHN0YXR1cy5vaygpKSB7CisgICAg
ICBpZiAobWV0YS5maWxlX3NpemUgPiAwKSB7CisgICAgICAgIHRhYmxlX251bWJlcnNfLnB1c2hf
YmFjayhtZXRhLm51bWJlcik7CisgICAgICB9CisgICAgfQorICAgIExvZyhvcHRpb25zXy5pbmZv
X2xvZywgIkxvZyAjJWxsdTogJWQgb3BzIHNhdmVkIHRvIFRhYmxlICMlbGx1ICVzIiwKKyAgICAg
ICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgbG9nLAorICAgICAgICBjb3VudGVyLAorICAgICAgICAo
dW5zaWduZWQgbG9uZyBsb25nKSBtZXRhLm51bWJlciwKKyAgICAgICAgc3RhdHVzLlRvU3RyaW5n
KCkuY19zdHIoKSk7CisgICAgcmV0dXJuIHN0YXR1czsKKyAgfQorCisgIHZvaWQgRXh0cmFjdE1l
dGFEYXRhKCkgeworICAgIHN0ZDo6dmVjdG9yPFRhYmxlSW5mbz4ga2VwdDsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHRhYmxlX251bWJlcnNfLnNpemUoKTsgaSsrKSB7CisgICAgICBUYWJs
ZUluZm8gdDsKKyAgICAgIHQubWV0YS5udW1iZXIgPSB0YWJsZV9udW1iZXJzX1tpXTsKKyAgICAg
IFN0YXR1cyBzdGF0dXMgPSBTY2FuVGFibGUoJnQpOworICAgICAgaWYgKCFzdGF0dXMub2soKSkg
eworICAgICAgICBzdGQ6OnN0cmluZyBmbmFtZSA9IFRhYmxlRmlsZU5hbWUoZGJuYW1lXywgdGFi
bGVfbnVtYmVyc19baV0pOworICAgICAgICBMb2cob3B0aW9uc18uaW5mb19sb2csICJUYWJsZSAj
JWxsdTogaWdub3JpbmcgJXMiLAorICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgdGFi
bGVfbnVtYmVyc19baV0sCisgICAgICAgICAgICBzdGF0dXMuVG9TdHJpbmcoKS5jX3N0cigpKTsK
KyAgICAgICAgQXJjaGl2ZUZpbGUoZm5hbWUpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdGFi
bGVzXy5wdXNoX2JhY2sodCk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgU3RhdHVzIFNjYW5U
YWJsZShUYWJsZUluZm8qIHQpIHsKKyAgICBzdGQ6OnN0cmluZyBmbmFtZSA9IFRhYmxlRmlsZU5h
bWUoZGJuYW1lXywgdC0+bWV0YS5udW1iZXIpOworICAgIGludCBjb3VudGVyID0gMDsKKyAgICBT
dGF0dXMgc3RhdHVzID0gZW52Xy0+R2V0RmlsZVNpemUoZm5hbWUsICZ0LT5tZXRhLmZpbGVfc2l6
ZSk7CisgICAgaWYgKHN0YXR1cy5vaygpKSB7CisgICAgICBJdGVyYXRvciogaXRlciA9IHRhYmxl
X2NhY2hlXy0+TmV3SXRlcmF0b3IoCisgICAgICAgICAgUmVhZE9wdGlvbnMoKSwgdC0+bWV0YS5u
dW1iZXIsIHQtPm1ldGEuZmlsZV9zaXplKTsKKyAgICAgIGJvb2wgZW1wdHkgPSB0cnVlOworICAg
ICAgUGFyc2VkSW50ZXJuYWxLZXkgcGFyc2VkOworICAgICAgdC0+bWF4X3NlcXVlbmNlID0gMDsK
KyAgICAgIGZvciAoaXRlci0+U2Vla1RvRmlyc3QoKTsgaXRlci0+VmFsaWQoKTsgaXRlci0+TmV4
dCgpKSB7CisgICAgICAgIFNsaWNlIGtleSA9IGl0ZXItPmtleSgpOworICAgICAgICBpZiAoIVBh
cnNlSW50ZXJuYWxLZXkoa2V5LCAmcGFyc2VkKSkgeworICAgICAgICAgIExvZyhvcHRpb25zXy5p
bmZvX2xvZywgIlRhYmxlICMlbGx1OiB1bnBhcnNhYmxlIGtleSAlcyIsCisgICAgICAgICAgICAg
ICh1bnNpZ25lZCBsb25nIGxvbmcpIHQtPm1ldGEubnVtYmVyLAorICAgICAgICAgICAgICBFc2Nh
cGVTdHJpbmcoa2V5KS5jX3N0cigpKTsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQor
CisgICAgICAgIGNvdW50ZXIrKzsKKyAgICAgICAgaWYgKGVtcHR5KSB7CisgICAgICAgICAgZW1w
dHkgPSBmYWxzZTsKKyAgICAgICAgICB0LT5tZXRhLnNtYWxsZXN0LkRlY29kZUZyb20oa2V5KTsK
KyAgICAgICAgfQorICAgICAgICB0LT5tZXRhLmxhcmdlc3QuRGVjb2RlRnJvbShrZXkpOworICAg
ICAgICBpZiAocGFyc2VkLnNlcXVlbmNlID4gdC0+bWF4X3NlcXVlbmNlKSB7CisgICAgICAgICAg
dC0+bWF4X3NlcXVlbmNlID0gcGFyc2VkLnNlcXVlbmNlOworICAgICAgICB9CisgICAgICB9Cisg
ICAgICBpZiAoIWl0ZXItPnN0YXR1cygpLm9rKCkpIHsKKyAgICAgICAgc3RhdHVzID0gaXRlci0+
c3RhdHVzKCk7CisgICAgICB9CisgICAgICBkZWxldGUgaXRlcjsKKyAgICB9CisgICAgTG9nKG9w
dGlvbnNfLmluZm9fbG9nLCAiVGFibGUgIyVsbHU6ICVkIGVudHJpZXMgJXMiLAorICAgICAgICAo
dW5zaWduZWQgbG9uZyBsb25nKSB0LT5tZXRhLm51bWJlciwKKyAgICAgICAgY291bnRlciwKKyAg
ICAgICAgc3RhdHVzLlRvU3RyaW5nKCkuY19zdHIoKSk7CisgICAgcmV0dXJuIHN0YXR1czsKKyAg
fQorCisgIFN0YXR1cyBXcml0ZURlc2NyaXB0b3IoKSB7CisgICAgc3RkOjpzdHJpbmcgdG1wID0g
VGVtcEZpbGVOYW1lKGRibmFtZV8sIDEpOworICAgIFdyaXRhYmxlRmlsZSogZmlsZTsKKyAgICBT
dGF0dXMgc3RhdHVzID0gZW52Xy0+TmV3V3JpdGFibGVGaWxlKHRtcCwgJmZpbGUpOworICAgIGlm
ICghc3RhdHVzLm9rKCkpIHsKKyAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgU2Vx
dWVuY2VOdW1iZXIgbWF4X3NlcXVlbmNlID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHRhYmxlc18uc2l6ZSgpOyBpKyspIHsKKyAgICAgIGlmIChtYXhfc2VxdWVuY2UgPCB0YWJsZXNf
W2ldLm1heF9zZXF1ZW5jZSkgeworICAgICAgICBtYXhfc2VxdWVuY2UgPSB0YWJsZXNfW2ldLm1h
eF9zZXF1ZW5jZTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBlZGl0Xy5TZXRDb21wYXJhdG9yTmFt
ZShpY21wXy51c2VyX2NvbXBhcmF0b3IoKS0+TmFtZSgpKTsKKyAgICBlZGl0Xy5TZXRMb2dOdW1i
ZXIoMCk7CisgICAgZWRpdF8uU2V0TmV4dEZpbGUobmV4dF9maWxlX251bWJlcl8pOworICAgIGVk
aXRfLlNldExhc3RTZXF1ZW5jZShtYXhfc2VxdWVuY2UpOworCisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCB0YWJsZXNfLnNpemUoKTsgaSsrKSB7CisgICAgICAvLyBUT0RPKG9wdCk6IHNlcGFy
YXRlIG91dCBpbnRvIG11bHRpcGxlIGxldmVscworICAgICAgY29uc3QgVGFibGVJbmZvJiB0ID0g
dGFibGVzX1tpXTsKKyAgICAgIGVkaXRfLkFkZEZpbGUoMCwgdC5tZXRhLm51bWJlciwgdC5tZXRh
LmZpbGVfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgdC5tZXRhLnNtYWxsZXN0LCB0Lm1ldGEu
bGFyZ2VzdCk7CisgICAgfQorCisgICAgLy9mcHJpbnRmKHN0ZGVyciwgIk5ld0Rlc2NyaXB0b3I6
XG4lc1xuIiwgZWRpdF8uRGVidWdTdHJpbmcoKS5jX3N0cigpKTsKKyAgICB7CisgICAgICBsb2c6
OldyaXRlciBsb2coZmlsZSk7CisgICAgICBzdGQ6OnN0cmluZyByZWNvcmQ7CisgICAgICBlZGl0
Xy5FbmNvZGVUbygmcmVjb3JkKTsKKyAgICAgIHN0YXR1cyA9IGxvZy5BZGRSZWNvcmQocmVjb3Jk
KTsKKyAgICB9CisgICAgaWYgKHN0YXR1cy5vaygpKSB7CisgICAgICBzdGF0dXMgPSBmaWxlLT5D
bG9zZSgpOworICAgIH0KKyAgICBkZWxldGUgZmlsZTsKKyAgICBmaWxlID0gTlVMTDsKKworICAg
IGlmICghc3RhdHVzLm9rKCkpIHsKKyAgICAgIGVudl8tPkRlbGV0ZUZpbGUodG1wKTsKKyAgICB9
IGVsc2UgeworICAgICAgLy8gRGlzY2FyZCBvbGRlciBtYW5pZmVzdHMKKyAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbWFuaWZlc3RzXy5zaXplKCk7IGkrKykgeworICAgICAgICBBcmNoaXZl
RmlsZShkYm5hbWVfICsgIi8iICsgbWFuaWZlc3RzX1tpXSk7CisgICAgICB9CisKKyAgICAgIC8v
IEluc3RhbGwgbmV3IG1hbmlmZXN0CisgICAgICBzdGF0dXMgPSBlbnZfLT5SZW5hbWVGaWxlKHRt
cCwgRGVzY3JpcHRvckZpbGVOYW1lKGRibmFtZV8sIDEpKTsKKyAgICAgIGlmIChzdGF0dXMub2so
KSkgeworICAgICAgICBzdGF0dXMgPSBTZXRDdXJyZW50RmlsZShlbnZfLCBkYm5hbWVfLCAxKTsK
KyAgICAgIH0gZWxzZSB7CisgICAgICAgIGVudl8tPkRlbGV0ZUZpbGUodG1wKTsKKyAgICAgIH0K
KyAgICB9CisgICAgcmV0dXJuIHN0YXR1czsKKyAgfQorCisgIHZvaWQgQXJjaGl2ZUZpbGUoY29u
c3Qgc3RkOjpzdHJpbmcmIGZuYW1lKSB7CisgICAgLy8gTW92ZSBpbnRvIGFub3RoZXIgZGlyZWN0
b3J5LiAgRS5nLiwgZm9yCisgICAgLy8gICAgZGlyL2ZvbworICAgIC8vIHJlbmFtZSB0bworICAg
IC8vICAgIGRpci9sb3N0L2ZvbworICAgIGNvbnN0IGNoYXIqIHNsYXNoID0gc3RycmNocihmbmFt
ZS5jX3N0cigpLCAnLycpOworICAgIHN0ZDo6c3RyaW5nIG5ld19kaXI7CisgICAgaWYgKHNsYXNo
ICE9IE5VTEwpIHsKKyAgICAgIG5ld19kaXIuYXNzaWduKGZuYW1lLmRhdGEoKSwgc2xhc2ggLSBm
bmFtZS5kYXRhKCkpOworICAgIH0KKyAgICBuZXdfZGlyLmFwcGVuZCgiL2xvc3QiKTsKKyAgICBl
bnZfLT5DcmVhdGVEaXIobmV3X2Rpcik7ICAvLyBJZ25vcmUgZXJyb3IKKyAgICBzdGQ6OnN0cmlu
ZyBuZXdfZmlsZSA9IG5ld19kaXI7CisgICAgbmV3X2ZpbGUuYXBwZW5kKCIvIik7CisgICAgbmV3
X2ZpbGUuYXBwZW5kKChzbGFzaCA9PSBOVUxMKSA/IGZuYW1lLmNfc3RyKCkgOiBzbGFzaCArIDEp
OworICAgIFN0YXR1cyBzID0gZW52Xy0+UmVuYW1lRmlsZShmbmFtZSwgbmV3X2ZpbGUpOworICAg
IExvZyhvcHRpb25zXy5pbmZvX2xvZywgIkFyY2hpdmluZyAlczogJXNcbiIsCisgICAgICAgIGZu
YW1lLmNfc3RyKCksIHMuVG9TdHJpbmcoKS5jX3N0cigpKTsKKyAgfQorfTsKK30gIC8vIG5hbWVz
cGFjZQorCitTdGF0dXMgUmVwYWlyREIoY29uc3Qgc3RkOjpzdHJpbmcmIGRibmFtZSwgY29uc3Qg
T3B0aW9ucyYgb3B0aW9ucykgeworICBSZXBhaXJlciByZXBhaXJlcihkYm5hbWUsIG9wdGlvbnMp
OworICByZXR1cm4gcmVwYWlyZXIuUnVuKCk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBsZXZlbGRi
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL3NraXBsaXN0LmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL3NraXBsaXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWY4NWJl
NmQwMTYyMWIyNDlmMTc1NmIyYWY1ZmQ2MDc4ZGQyZWUyNQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvc2tpcGxpc3QuaApAQCAtMCwwICsxLDM3OSBAQAor
Ly8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBT
ZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgorLy8KKy8vIFRo
cmVhZCBzYWZldHkKKy8vIC0tLS0tLS0tLS0tLS0KKy8vCisvLyBXcml0ZXMgcmVxdWlyZSBleHRl
cm5hbCBzeW5jaHJvbml6YXRpb24sIG1vc3QgbGlrZWx5IGEgbXV0ZXguCisvLyBSZWFkcyByZXF1
aXJlIGEgZ3VhcmFudGVlIHRoYXQgdGhlIFNraXBMaXN0IHdpbGwgbm90IGJlIGRlc3Ryb3llZAor
Ly8gd2hpbGUgdGhlIHJlYWQgaXMgaW4gcHJvZ3Jlc3MuICBBcGFydCBmcm9tIHRoYXQsIHJlYWRz
IHByb2dyZXNzCisvLyB3aXRob3V0IGFueSBpbnRlcm5hbCBsb2NraW5nIG9yIHN5bmNocm9uaXph
dGlvbi4KKy8vCisvLyBJbnZhcmlhbnRzOgorLy8KKy8vICgxKSBBbGxvY2F0ZWQgbm9kZXMgYXJl
IG5ldmVyIGRlbGV0ZWQgdW50aWwgdGhlIFNraXBMaXN0IGlzCisvLyBkZXN0cm95ZWQuICBUaGlz
IGlzIHRyaXZpYWxseSBndWFyYW50ZWVkIGJ5IHRoZSBjb2RlIHNpbmNlIHdlCisvLyBuZXZlciBk
ZWxldGUgYW55IHNraXAgbGlzdCBub2Rlcy4KKy8vCisvLyAoMikgVGhlIGNvbnRlbnRzIG9mIGEg
Tm9kZSBleGNlcHQgZm9yIHRoZSBuZXh0L3ByZXYgcG9pbnRlcnMgYXJlCisvLyBpbW11dGFibGUg
YWZ0ZXIgdGhlIE5vZGUgaGFzIGJlZW4gbGlua2VkIGludG8gdGhlIFNraXBMaXN0LgorLy8gT25s
eSBJbnNlcnQoKSBtb2RpZmllcyB0aGUgbGlzdCwgYW5kIGl0IGlzIGNhcmVmdWwgdG8gaW5pdGlh
bGl6ZQorLy8gYSBub2RlIGFuZCB1c2UgcmVsZWFzZS1zdG9yZXMgdG8gcHVibGlzaCB0aGUgbm9k
ZXMgaW4gb25lIG9yCisvLyBtb3JlIGxpc3RzLgorLy8KKy8vIC4uLiBwcmV2IHZzLiBuZXh0IHBv
aW50ZXIgb3JkZXJpbmcgLi4uCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdGRs
aWIuaD4KKyNpbmNsdWRlICJwb3J0L3BvcnQuaCIKKyNpbmNsdWRlICJ1dGlsL2FyZW5hLmgiCisj
aW5jbHVkZSAidXRpbC9yYW5kb20uaCIKKworbmFtZXNwYWNlIGxldmVsZGIgeworCitjbGFzcyBB
cmVuYTsKKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCBjbGFzcyBDb21wYXJhdG9yPgorY2xhc3Mg
U2tpcExpc3QgeworIHByaXZhdGU6CisgIHN0cnVjdCBOb2RlOworCisgcHVibGljOgorICAvLyBD
cmVhdGUgYSBuZXcgU2tpcExpc3Qgb2JqZWN0IHRoYXQgd2lsbCB1c2UgImNtcCIgZm9yIGNvbXBh
cmluZyBrZXlzLAorICAvLyBhbmQgd2lsbCBhbGxvY2F0ZSBtZW1vcnkgdXNpbmcgIiphcmVuYSIu
ICBPYmplY3RzIGFsbG9jYXRlZCBpbiB0aGUgYXJlbmEKKyAgLy8gbXVzdCByZW1haW4gYWxsb2Nh
dGVkIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIHNraXBsaXN0IG9iamVjdC4KKyAgZXhwbGljaXQg
U2tpcExpc3QoQ29tcGFyYXRvciBjbXAsIEFyZW5hKiBhcmVuYSk7CisKKyAgLy8gSW5zZXJ0IGtl
eSBpbnRvIHRoZSBsaXN0LgorICAvLyBSRVFVSVJFUzogbm90aGluZyB0aGF0IGNvbXBhcmVzIGVx
dWFsIHRvIGtleSBpcyBjdXJyZW50bHkgaW4gdGhlIGxpc3QuCisgIHZvaWQgSW5zZXJ0KGNvbnN0
IEtleSYga2V5KTsKKworICAvLyBSZXR1cm5zIHRydWUgaWZmIGFuIGVudHJ5IHRoYXQgY29tcGFy
ZXMgZXF1YWwgdG8ga2V5IGlzIGluIHRoZSBsaXN0LgorICBib29sIENvbnRhaW5zKGNvbnN0IEtl
eSYga2V5KSBjb25zdDsKKworICAvLyBJdGVyYXRpb24gb3ZlciB0aGUgY29udGVudHMgb2YgYSBz
a2lwIGxpc3QKKyAgY2xhc3MgSXRlcmF0b3IgeworICAgcHVibGljOgorICAgIC8vIEluaXRpYWxp
emUgYW4gaXRlcmF0b3Igb3ZlciB0aGUgc3BlY2lmaWVkIGxpc3QuCisgICAgLy8gVGhlIHJldHVy
bmVkIGl0ZXJhdG9yIGlzIG5vdCB2YWxpZC4KKyAgICBleHBsaWNpdCBJdGVyYXRvcihjb25zdCBT
a2lwTGlzdCogbGlzdCk7CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWZmIHRoZSBpdGVyYXRvciBp
cyBwb3NpdGlvbmVkIGF0IGEgdmFsaWQgbm9kZS4KKyAgICBib29sIFZhbGlkKCkgY29uc3Q7CisK
KyAgICAvLyBSZXR1cm5zIHRoZSBrZXkgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24uCisgICAgLy8g
UkVRVUlSRVM6IFZhbGlkKCkKKyAgICBjb25zdCBLZXkmIGtleSgpIGNvbnN0OworCisgICAgLy8g
QWR2YW5jZXMgdG8gdGhlIG5leHQgcG9zaXRpb24uCisgICAgLy8gUkVRVUlSRVM6IFZhbGlkKCkK
KyAgICB2b2lkIE5leHQoKTsKKworICAgIC8vIEFkdmFuY2VzIHRvIHRoZSBwcmV2aW91cyBwb3Np
dGlvbi4KKyAgICAvLyBSRVFVSVJFUzogVmFsaWQoKQorICAgIHZvaWQgUHJldigpOworCisgICAg
Ly8gQWR2YW5jZSB0byB0aGUgZmlyc3QgZW50cnkgd2l0aCBhIGtleSA+PSB0YXJnZXQKKyAgICB2
b2lkIFNlZWsoY29uc3QgS2V5JiB0YXJnZXQpOworCisgICAgLy8gUG9zaXRpb24gYXQgdGhlIGZp
cnN0IGVudHJ5IGluIGxpc3QuCisgICAgLy8gRmluYWwgc3RhdGUgb2YgaXRlcmF0b3IgaXMgVmFs
aWQoKSBpZmYgbGlzdCBpcyBub3QgZW1wdHkuCisgICAgdm9pZCBTZWVrVG9GaXJzdCgpOworCisg
ICAgLy8gUG9zaXRpb24gYXQgdGhlIGxhc3QgZW50cnkgaW4gbGlzdC4KKyAgICAvLyBGaW5hbCBz
dGF0ZSBvZiBpdGVyYXRvciBpcyBWYWxpZCgpIGlmZiBsaXN0IGlzIG5vdCBlbXB0eS4KKyAgICB2
b2lkIFNlZWtUb0xhc3QoKTsKKworICAgcHJpdmF0ZToKKyAgICBjb25zdCBTa2lwTGlzdCogbGlz
dF87CisgICAgTm9kZSogbm9kZV87CisgICAgLy8gSW50ZW50aW9uYWxseSBjb3B5YWJsZQorICB9
OworCisgcHJpdmF0ZToKKyAgZW51bSB7IGtNYXhIZWlnaHQgPSAxMiB9OworCisgIC8vIEltbXV0
YWJsZSBhZnRlciBjb25zdHJ1Y3Rpb24KKyAgQ29tcGFyYXRvciBjb25zdCBjb21wYXJlXzsKKyAg
QXJlbmEqIGNvbnN0IGFyZW5hXzsgICAgLy8gQXJlbmEgdXNlZCBmb3IgYWxsb2NhdGlvbnMgb2Yg
bm9kZXMKKworICBOb2RlKiBjb25zdCBoZWFkXzsKKworICAvLyBNb2RpZmllZCBvbmx5IGJ5IElu
c2VydCgpLiAgUmVhZCByYWNpbHkgYnkgcmVhZGVycywgYnV0IHN0YWxlCisgIC8vIHZhbHVlcyBh
cmUgb2suCisgIHBvcnQ6OkF0b21pY1BvaW50ZXIgbWF4X2hlaWdodF87ICAgLy8gSGVpZ2h0IG9m
IHRoZSBlbnRpcmUgbGlzdAorCisgIGlubGluZSBpbnQgR2V0TWF4SGVpZ2h0KCkgY29uc3Qgewor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KAorICAgICAgICByZWludGVycHJldF9jYXN0PGlu
dHB0cl90PihtYXhfaGVpZ2h0Xy5Ob0JhcnJpZXJfTG9hZCgpKSk7CisgIH0KKworICAvLyBSZWFk
L3dyaXR0ZW4gb25seSBieSBJbnNlcnQoKS4KKyAgUmFuZG9tIHJuZF87CisKKyAgTm9kZSogTmV3
Tm9kZShjb25zdCBLZXkmIGtleSwgaW50IGhlaWdodCk7CisgIGludCBSYW5kb21IZWlnaHQoKTsK
KyAgYm9vbCBFcXVhbChjb25zdCBLZXkmIGEsIGNvbnN0IEtleSYgYikgY29uc3QgeyByZXR1cm4g
KGNvbXBhcmVfKGEsIGIpID09IDApOyB9CisKKyAgLy8gUmV0dXJuIHRydWUgaWYga2V5IGlzIGdy
ZWF0ZXIgdGhhbiB0aGUgZGF0YSBzdG9yZWQgaW4gIm4iCisgIGJvb2wgS2V5SXNBZnRlck5vZGUo
Y29uc3QgS2V5JiBrZXksIE5vZGUqIG4pIGNvbnN0OworCisgIC8vIFJldHVybiB0aGUgZWFybGll
c3Qgbm9kZSB0aGF0IGNvbWVzIGF0IG9yIGFmdGVyIGtleS4KKyAgLy8gUmV0dXJuIE5VTEwgaWYg
dGhlcmUgaXMgbm8gc3VjaCBub2RlLgorICAvLworICAvLyBJZiBwcmV2IGlzIG5vbi1OVUxMLCBm
aWxscyBwcmV2W2xldmVsXSB3aXRoIHBvaW50ZXIgdG8gcHJldmlvdXMKKyAgLy8gbm9kZSBhdCAi
bGV2ZWwiIGZvciBldmVyeSBsZXZlbCBpbiBbMC4ubWF4X2hlaWdodF8tMV0uCisgIE5vZGUqIEZp
bmRHcmVhdGVyT3JFcXVhbChjb25zdCBLZXkmIGtleSwgTm9kZSoqIHByZXYpIGNvbnN0OworCisg
IC8vIFJldHVybiB0aGUgbGF0ZXN0IG5vZGUgd2l0aCBhIGtleSA8IGtleS4KKyAgLy8gUmV0dXJu
IGhlYWRfIGlmIHRoZXJlIGlzIG5vIHN1Y2ggbm9kZS4KKyAgTm9kZSogRmluZExlc3NUaGFuKGNv
bnN0IEtleSYga2V5KSBjb25zdDsKKworICAvLyBSZXR1cm4gdGhlIGxhc3Qgbm9kZSBpbiB0aGUg
bGlzdC4KKyAgLy8gUmV0dXJuIGhlYWRfIGlmIGxpc3QgaXMgZW1wdHkuCisgIE5vZGUqIEZpbmRM
YXN0KCkgY29uc3Q7CisKKyAgLy8gTm8gY29weWluZyBhbGxvd2VkCisgIFNraXBMaXN0KGNvbnN0
IFNraXBMaXN0Jik7CisgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFNraXBMaXN0Jik7Cit9OworCisv
LyBJbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZvbGxvdwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCBj
bGFzcyBDb21wYXJhdG9yPgorc3RydWN0IFNraXBMaXN0PEtleSxDb21wYXJhdG9yPjo6Tm9kZSB7
CisgIGV4cGxpY2l0IE5vZGUoY29uc3QgS2V5JiBrKSA6IGtleShrKSB7IH0KKworICBLZXkgY29u
c3Qga2V5OworCisgIC8vIEFjY2Vzc29ycy9tdXRhdG9ycyBmb3IgbGlua3MuICBXcmFwcGVkIGlu
IG1ldGhvZHMgc28gd2UgY2FuCisgIC8vIGFkZCB0aGUgYXBwcm9wcmlhdGUgYmFycmllcnMgYXMg
bmVjZXNzYXJ5LgorICBOb2RlKiBOZXh0KGludCBuKSB7CisgICAgYXNzZXJ0KG4gPj0gMCk7Cisg
ICAgLy8gVXNlIGFuICdhY3F1aXJlIGxvYWQnIHNvIHRoYXQgd2Ugb2JzZXJ2ZSBhIGZ1bGx5IGlu
aXRpYWxpemVkCisgICAgLy8gdmVyc2lvbiBvZiB0aGUgcmV0dXJuZWQgTm9kZS4KKyAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxOb2RlKj4obmV4dF9bbl0uQWNxdWlyZV9Mb2FkKCkpOworICB9
CisgIHZvaWQgU2V0TmV4dChpbnQgbiwgTm9kZSogeCkgeworICAgIGFzc2VydChuID49IDApOwor
ICAgIC8vIFVzZSBhICdyZWxlYXNlIHN0b3JlJyBzbyB0aGF0IGFueWJvZHkgd2hvIHJlYWRzIHRo
cm91Z2ggdGhpcworICAgIC8vIHBvaW50ZXIgb2JzZXJ2ZXMgYSBmdWxseSBpbml0aWFsaXplZCB2
ZXJzaW9uIG9mIHRoZSBpbnNlcnRlZCBub2RlLgorICAgIG5leHRfW25dLlJlbGVhc2VfU3RvcmUo
eCk7CisgIH0KKworICAvLyBOby1iYXJyaWVyIHZhcmlhbnRzIHRoYXQgY2FuIGJlIHNhZmVseSB1
c2VkIGluIGEgZmV3IGxvY2F0aW9ucy4KKyAgTm9kZSogTm9CYXJyaWVyX05leHQoaW50IG4pIHsK
KyAgICBhc3NlcnQobiA+PSAwKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxOb2RlKj4o
bmV4dF9bbl0uTm9CYXJyaWVyX0xvYWQoKSk7CisgIH0KKyAgdm9pZCBOb0JhcnJpZXJfU2V0TmV4
dChpbnQgbiwgTm9kZSogeCkgeworICAgIGFzc2VydChuID49IDApOworICAgIG5leHRfW25dLk5v
QmFycmllcl9TdG9yZSh4KTsKKyAgfQorCisgcHJpdmF0ZToKKyAgLy8gQXJyYXkgb2YgbGVuZ3Ro
IGVxdWFsIHRvIHRoZSBub2RlIGhlaWdodC4gIG5leHRfWzBdIGlzIGxvd2VzdCBsZXZlbCBsaW5r
LgorICBwb3J0OjpBdG9taWNQb2ludGVyIG5leHRfWzFdOworfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgS2V5LCBjbGFzcyBDb21wYXJhdG9yPgordHlwZW5hbWUgU2tpcExpc3Q8S2V5LENvbXBhcmF0
b3I+OjpOb2RlKgorU2tpcExpc3Q8S2V5LENvbXBhcmF0b3I+OjpOZXdOb2RlKGNvbnN0IEtleSYg
a2V5LCBpbnQgaGVpZ2h0KSB7CisgIGNoYXIqIG1lbSA9IGFyZW5hXy0+QWxsb2NhdGVBbGlnbmVk
KAorICAgICAgc2l6ZW9mKE5vZGUpICsgc2l6ZW9mKHBvcnQ6OkF0b21pY1BvaW50ZXIpICogKGhl
aWdodCAtIDEpKTsKKyAgcmV0dXJuIG5ldyAobWVtKSBOb2RlKGtleSk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEtleSwgY2xhc3MgQ29tcGFyYXRvcj4KK2lubGluZSBTa2lwTGlzdDxLZXksQ29t
cGFyYXRvcj46Okl0ZXJhdG9yOjpJdGVyYXRvcihjb25zdCBTa2lwTGlzdCogbGlzdCkgeworICBs
aXN0XyA9IGxpc3Q7CisgIG5vZGVfID0gTlVMTDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5
LCBjbGFzcyBDb21wYXJhdG9yPgoraW5saW5lIGJvb2wgU2tpcExpc3Q8S2V5LENvbXBhcmF0b3I+
OjpJdGVyYXRvcjo6VmFsaWQoKSBjb25zdCB7CisgIHJldHVybiBub2RlXyAhPSBOVUxMOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIGNsYXNzIENvbXBhcmF0b3I+CitpbmxpbmUgY29uc3Qg
S2V5JiBTa2lwTGlzdDxLZXksQ29tcGFyYXRvcj46Okl0ZXJhdG9yOjprZXkoKSBjb25zdCB7Cisg
IGFzc2VydChWYWxpZCgpKTsKKyAgcmV0dXJuIG5vZGVfLT5rZXk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEtleSwgY2xhc3MgQ29tcGFyYXRvcj4KK2lubGluZSB2b2lkIFNraXBMaXN0PEtleSxD
b21wYXJhdG9yPjo6SXRlcmF0b3I6Ok5leHQoKSB7CisgIGFzc2VydChWYWxpZCgpKTsKKyAgbm9k
ZV8gPSBub2RlXy0+TmV4dCgwKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCBjbGFzcyBD
b21wYXJhdG9yPgoraW5saW5lIHZvaWQgU2tpcExpc3Q8S2V5LENvbXBhcmF0b3I+OjpJdGVyYXRv
cjo6UHJldigpIHsKKyAgLy8gSW5zdGVhZCBvZiB1c2luZyBleHBsaWNpdCAicHJldiIgbGlua3Ms
IHdlIGp1c3Qgc2VhcmNoIGZvciB0aGUKKyAgLy8gbGFzdCBub2RlIHRoYXQgZmFsbHMgYmVmb3Jl
IGtleS4KKyAgYXNzZXJ0KFZhbGlkKCkpOworICBub2RlXyA9IGxpc3RfLT5GaW5kTGVzc1RoYW4o
bm9kZV8tPmtleSk7CisgIGlmIChub2RlXyA9PSBsaXN0Xy0+aGVhZF8pIHsKKyAgICBub2RlXyA9
IE5VTEw7CisgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCBjbGFzcyBDb21wYXJhdG9y
PgoraW5saW5lIHZvaWQgU2tpcExpc3Q8S2V5LENvbXBhcmF0b3I+OjpJdGVyYXRvcjo6U2Vlayhj
b25zdCBLZXkmIHRhcmdldCkgeworICBub2RlXyA9IGxpc3RfLT5GaW5kR3JlYXRlck9yRXF1YWwo
dGFyZ2V0LCBOVUxMKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCBjbGFzcyBDb21wYXJh
dG9yPgoraW5saW5lIHZvaWQgU2tpcExpc3Q8S2V5LENvbXBhcmF0b3I+OjpJdGVyYXRvcjo6U2Vl
a1RvRmlyc3QoKSB7CisgIG5vZGVfID0gbGlzdF8tPmhlYWRfLT5OZXh0KDApOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBLZXksIGNsYXNzIENvbXBhcmF0b3I+CitpbmxpbmUgdm9pZCBTa2lwTGlz
dDxLZXksQ29tcGFyYXRvcj46Okl0ZXJhdG9yOjpTZWVrVG9MYXN0KCkgeworICBub2RlXyA9IGxp
c3RfLT5GaW5kTGFzdCgpOworICBpZiAobm9kZV8gPT0gbGlzdF8tPmhlYWRfKSB7CisgICAgbm9k
ZV8gPSBOVUxMOworICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgY2xhc3MgQ29tcGFy
YXRvcj4KK2ludCBTa2lwTGlzdDxLZXksQ29tcGFyYXRvcj46OlJhbmRvbUhlaWdodCgpIHsKKyAg
Ly8gSW5jcmVhc2UgaGVpZ2h0IHdpdGggcHJvYmFiaWxpdHkgMSBpbiBrQnJhbmNoaW5nCisgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQga0JyYW5jaGluZyA9IDQ7CisgIGludCBoZWlnaHQgPSAx
OworICB3aGlsZSAoaGVpZ2h0IDwga01heEhlaWdodCAmJiAoKHJuZF8uTmV4dCgpICUga0JyYW5j
aGluZykgPT0gMCkpIHsKKyAgICBoZWlnaHQrKzsKKyAgfQorICBhc3NlcnQoaGVpZ2h0ID4gMCk7
CisgIGFzc2VydChoZWlnaHQgPD0ga01heEhlaWdodCk7CisgIHJldHVybiBoZWlnaHQ7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgY2xhc3MgQ29tcGFyYXRvcj4KK2Jvb2wgU2tpcExpc3Q8
S2V5LENvbXBhcmF0b3I+OjpLZXlJc0FmdGVyTm9kZShjb25zdCBLZXkmIGtleSwgTm9kZSogbikg
Y29uc3QgeworICAvLyBOVUxMIG4gaXMgY29uc2lkZXJlZCBpbmZpbml0ZQorICByZXR1cm4gKG4g
IT0gTlVMTCkgJiYgKGNvbXBhcmVfKG4tPmtleSwga2V5KSA8IDApOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBLZXksIGNsYXNzIENvbXBhcmF0b3I+Cit0eXBlbmFtZSBTa2lwTGlzdDxLZXksQ29t
cGFyYXRvcj46Ok5vZGUqIFNraXBMaXN0PEtleSxDb21wYXJhdG9yPjo6RmluZEdyZWF0ZXJPckVx
dWFsKGNvbnN0IEtleSYga2V5LCBOb2RlKiogcHJldikKKyAgICBjb25zdCB7CisgIE5vZGUqIHgg
PSBoZWFkXzsKKyAgaW50IGxldmVsID0gR2V0TWF4SGVpZ2h0KCkgLSAxOworICB3aGlsZSAodHJ1
ZSkgeworICAgIE5vZGUqIG5leHQgPSB4LT5OZXh0KGxldmVsKTsKKyAgICBpZiAoS2V5SXNBZnRl
ck5vZGUoa2V5LCBuZXh0KSkgeworICAgICAgLy8gS2VlcCBzZWFyY2hpbmcgaW4gdGhpcyBsaXN0
CisgICAgICB4ID0gbmV4dDsKKyAgICB9IGVsc2UgeworICAgICAgaWYgKHByZXYgIT0gTlVMTCkg
cHJldltsZXZlbF0gPSB4OworICAgICAgaWYgKGxldmVsID09IDApIHsKKyAgICAgICAgcmV0dXJu
IG5leHQ7CisgICAgICB9IGVsc2UgeworICAgICAgICAvLyBTd2l0Y2ggdG8gbmV4dCBsaXN0Cisg
ICAgICAgIGxldmVsLS07CisgICAgICB9CisgICAgfQorICB9Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEtleSwgY2xhc3MgQ29tcGFyYXRvcj4KK3R5cGVuYW1lIFNraXBMaXN0PEtleSxDb21wYXJh
dG9yPjo6Tm9kZSoKK1NraXBMaXN0PEtleSxDb21wYXJhdG9yPjo6RmluZExlc3NUaGFuKGNvbnN0
IEtleSYga2V5KSBjb25zdCB7CisgIE5vZGUqIHggPSBoZWFkXzsKKyAgaW50IGxldmVsID0gR2V0
TWF4SGVpZ2h0KCkgLSAxOworICB3aGlsZSAodHJ1ZSkgeworICAgIGFzc2VydCh4ID09IGhlYWRf
IHx8IGNvbXBhcmVfKHgtPmtleSwga2V5KSA8IDApOworICAgIE5vZGUqIG5leHQgPSB4LT5OZXh0
KGxldmVsKTsKKyAgICBpZiAobmV4dCA9PSBOVUxMIHx8IGNvbXBhcmVfKG5leHQtPmtleSwga2V5
KSA+PSAwKSB7CisgICAgICBpZiAobGV2ZWwgPT0gMCkgeworICAgICAgICByZXR1cm4geDsKKyAg
ICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFN3aXRjaCB0byBuZXh0IGxpc3QKKyAgICAgICAgbGV2
ZWwtLTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgeCA9IG5leHQ7CisgICAgfQorICB9
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgY2xhc3MgQ29tcGFyYXRvcj4KK3R5cGVuYW1l
IFNraXBMaXN0PEtleSxDb21wYXJhdG9yPjo6Tm9kZSogU2tpcExpc3Q8S2V5LENvbXBhcmF0b3I+
OjpGaW5kTGFzdCgpCisgICAgY29uc3QgeworICBOb2RlKiB4ID0gaGVhZF87CisgIGludCBsZXZl
bCA9IEdldE1heEhlaWdodCgpIC0gMTsKKyAgd2hpbGUgKHRydWUpIHsKKyAgICBOb2RlKiBuZXh0
ID0geC0+TmV4dChsZXZlbCk7CisgICAgaWYgKG5leHQgPT0gTlVMTCkgeworICAgICAgaWYgKGxl
dmVsID09IDApIHsKKyAgICAgICAgcmV0dXJuIHg7CisgICAgICB9IGVsc2UgeworICAgICAgICAv
LyBTd2l0Y2ggdG8gbmV4dCBsaXN0CisgICAgICAgIGxldmVsLS07CisgICAgICB9CisgICAgfSBl
bHNlIHsKKyAgICAgIHggPSBuZXh0OworICAgIH0KKyAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXksIGNsYXNzIENvbXBhcmF0b3I+CitTa2lwTGlzdDxLZXksQ29tcGFyYXRvcj46OlNraXBM
aXN0KENvbXBhcmF0b3IgY21wLCBBcmVuYSogYXJlbmEpCisgICAgOiBjb21wYXJlXyhjbXApLAor
ICAgICAgYXJlbmFfKGFyZW5hKSwKKyAgICAgIGhlYWRfKE5ld05vZGUoMCAvKiBhbnkga2V5IHdp
bGwgZG8gKi8sIGtNYXhIZWlnaHQpKSwKKyAgICAgIG1heF9oZWlnaHRfKHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KDEpKSwKKyAgICAgIHJuZF8oMHhkZWFkYmVlZikgeworICBmb3IgKGludCBpID0g
MDsgaSA8IGtNYXhIZWlnaHQ7IGkrKykgeworICAgIGhlYWRfLT5TZXROZXh0KGksIE5VTEwpOwor
ICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgY2xhc3MgQ29tcGFyYXRvcj4KK3ZvaWQg
U2tpcExpc3Q8S2V5LENvbXBhcmF0b3I+OjpJbnNlcnQoY29uc3QgS2V5JiBrZXkpIHsKKyAgLy8g
VE9ETyhvcHQpOiBXZSBjYW4gdXNlIGEgYmFycmllci1mcmVlIHZhcmlhbnQgb2YgRmluZEdyZWF0
ZXJPckVxdWFsKCkKKyAgLy8gaGVyZSBzaW5jZSBJbnNlcnQoKSBpcyBleHRlcm5hbGx5IHN5bmNo
cm9uaXplZC4KKyAgTm9kZSogcHJldltrTWF4SGVpZ2h0XTsKKyAgTm9kZSogeCA9IEZpbmRHcmVh
dGVyT3JFcXVhbChrZXksIHByZXYpOworCisgIC8vIE91ciBkYXRhIHN0cnVjdHVyZSBkb2VzIG5v
dCBhbGxvdyBkdXBsaWNhdGUgaW5zZXJ0aW9uCisgIGFzc2VydCh4ID09IE5VTEwgfHwgIUVxdWFs
KGtleSwgeC0+a2V5KSk7CisKKyAgaW50IGhlaWdodCA9IFJhbmRvbUhlaWdodCgpOworICBpZiAo
aGVpZ2h0ID4gR2V0TWF4SGVpZ2h0KCkpIHsKKyAgICBmb3IgKGludCBpID0gR2V0TWF4SGVpZ2h0
KCk7IGkgPCBoZWlnaHQ7IGkrKykgeworICAgICAgcHJldltpXSA9IGhlYWRfOworICAgIH0KKyAg
ICAvL2ZwcmludGYoc3RkZXJyLCAiQ2hhbmdlIGhlaWdodCBmcm9tICVkIHRvICVkXG4iLCBtYXhf
aGVpZ2h0XywgaGVpZ2h0KTsKKworICAgIC8vIEl0IGlzIG9rIHRvIG11dGF0ZSBtYXhfaGVpZ2h0
XyB3aXRob3V0IGFueSBzeW5jaHJvbml6YXRpb24KKyAgICAvLyB3aXRoIGNvbmN1cnJlbnQgcmVh
ZGVycy4gIEEgY29uY3VycmVudCByZWFkZXIgdGhhdCBvYnNlcnZlcworICAgIC8vIHRoZSBuZXcg
dmFsdWUgb2YgbWF4X2hlaWdodF8gd2lsbCBzZWUgZWl0aGVyIHRoZSBvbGQgdmFsdWUgb2YKKyAg
ICAvLyBuZXcgbGV2ZWwgcG9pbnRlcnMgZnJvbSBoZWFkXyAoTlVMTCksIG9yIGEgbmV3IHZhbHVl
IHNldCBpbgorICAgIC8vIHRoZSBsb29wIGJlbG93LiAgSW4gdGhlIGZvcm1lciBjYXNlIHRoZSBy
ZWFkZXIgd2lsbAorICAgIC8vIGltbWVkaWF0ZWx5IGRyb3AgdG8gdGhlIG5leHQgbGV2ZWwgc2lu
Y2UgTlVMTCBzb3J0cyBhZnRlciBhbGwKKyAgICAvLyBrZXlzLiAgSW4gdGhlIGxhdHRlciBjYXNl
IHRoZSByZWFkZXIgd2lsbCB1c2UgdGhlIG5ldyBub2RlLgorICAgIG1heF9oZWlnaHRfLk5vQmFy
cmllcl9TdG9yZShyZWludGVycHJldF9jYXN0PHZvaWQqPihoZWlnaHQpKTsKKyAgfQorCisgIHgg
PSBOZXdOb2RlKGtleSwgaGVpZ2h0KTsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBoZWlnaHQ7IGkr
KykgeworICAgIC8vIE5vQmFycmllcl9TZXROZXh0KCkgc3VmZmljZXMgc2luY2Ugd2Ugd2lsbCBh
ZGQgYSBiYXJyaWVyIHdoZW4KKyAgICAvLyB3ZSBwdWJsaXNoIGEgcG9pbnRlciB0byAieCIgaW4g
cHJldltpXS4KKyAgICB4LT5Ob0JhcnJpZXJfU2V0TmV4dChpLCBwcmV2W2ldLT5Ob0JhcnJpZXJf
TmV4dChpKSk7CisgICAgcHJldltpXS0+U2V0TmV4dChpLCB4KTsKKyAgfQorfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBLZXksIGNsYXNzIENvbXBhcmF0b3I+Citib29sIFNraXBMaXN0PEtleSxDb21w
YXJhdG9yPjo6Q29udGFpbnMoY29uc3QgS2V5JiBrZXkpIGNvbnN0IHsKKyAgTm9kZSogeCA9IEZp
bmRHcmVhdGVyT3JFcXVhbChrZXksIE5VTEwpOworICBpZiAoeCAhPSBOVUxMICYmIEVxdWFsKGtl
eSwgeC0+a2V5KSkgeworICAgIHJldHVybiB0cnVlOworICB9IGVsc2UgeworICAgIHJldHVybiBm
YWxzZTsKKyAgfQorfQorCit9ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9za2lwbGlzdF90ZXN0LmNjIGIvU291cmNlL1RoaXJk
UGFydHkvbGV2ZWxkYi9kYi9za2lwbGlzdF90ZXN0LmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM3OGY0YjRmYjFh
MGZjN2ZiNWFhZGJlZmEwZjdkMTllYWYwNmJhMWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9sZXZlbGRiL2RiL3NraXBsaXN0X3Rlc3QuY2MKQEAgLTAsMCArMSwzNzggQEAK
Ky8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4g
U2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2luY2x1
ZGUgImRiL3NraXBsaXN0LmgiCisjaW5jbHVkZSA8c2V0PgorI2luY2x1ZGUgImxldmVsZGIvZW52
LmgiCisjaW5jbHVkZSAidXRpbC9hcmVuYS5oIgorI2luY2x1ZGUgInV0aWwvaGFzaC5oIgorI2lu
Y2x1ZGUgInV0aWwvcmFuZG9tLmgiCisjaW5jbHVkZSAidXRpbC90ZXN0aGFybmVzcy5oIgorCitu
YW1lc3BhY2UgbGV2ZWxkYiB7CisKK3R5cGVkZWYgdWludDY0X3QgS2V5OworCitzdHJ1Y3QgQ29t
cGFyYXRvciB7CisgIGludCBvcGVyYXRvcigpKGNvbnN0IEtleSYgYSwgY29uc3QgS2V5JiBiKSBj
b25zdCB7CisgICAgaWYgKGEgPCBiKSB7CisgICAgICByZXR1cm4gLTE7CisgICAgfSBlbHNlIGlm
IChhID4gYikgeworICAgICAgcmV0dXJuICsxOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4g
MDsKKyAgICB9CisgIH0KK307CisKK2NsYXNzIFNraXBUZXN0IHsgfTsKKworVEVTVChTa2lwVGVz
dCwgRW1wdHkpIHsKKyAgQXJlbmEgYXJlbmE7CisgIENvbXBhcmF0b3IgY21wOworICBTa2lwTGlz
dDxLZXksIENvbXBhcmF0b3I+IGxpc3QoY21wLCAmYXJlbmEpOworICBBU1NFUlRfVFJVRSghbGlz
dC5Db250YWlucygxMCkpOworCisgIFNraXBMaXN0PEtleSwgQ29tcGFyYXRvcj46Okl0ZXJhdG9y
IGl0ZXIoJmxpc3QpOworICBBU1NFUlRfVFJVRSghaXRlci5WYWxpZCgpKTsKKyAgaXRlci5TZWVr
VG9GaXJzdCgpOworICBBU1NFUlRfVFJVRSghaXRlci5WYWxpZCgpKTsKKyAgaXRlci5TZWVrKDEw
MCk7CisgIEFTU0VSVF9UUlVFKCFpdGVyLlZhbGlkKCkpOworICBpdGVyLlNlZWtUb0xhc3QoKTsK
KyAgQVNTRVJUX1RSVUUoIWl0ZXIuVmFsaWQoKSk7Cit9CisKK1RFU1QoU2tpcFRlc3QsIEluc2Vy
dEFuZExvb2t1cCkgeworICBjb25zdCBpbnQgTiA9IDIwMDA7CisgIGNvbnN0IGludCBSID0gNTAw
MDsKKyAgUmFuZG9tIHJuZCgxMDAwKTsKKyAgc3RkOjpzZXQ8S2V5PiBrZXlzOworICBBcmVuYSBh
cmVuYTsKKyAgQ29tcGFyYXRvciBjbXA7CisgIFNraXBMaXN0PEtleSwgQ29tcGFyYXRvcj4gbGlz
dChjbXAsICZhcmVuYSk7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CisgICAgS2V5
IGtleSA9IHJuZC5OZXh0KCkgJSBSOworICAgIGlmIChrZXlzLmluc2VydChrZXkpLnNlY29uZCkg
eworICAgICAgbGlzdC5JbnNlcnQoa2V5KTsKKyAgICB9CisgIH0KKworICBmb3IgKGludCBpID0g
MDsgaSA8IFI7IGkrKykgeworICAgIGlmIChsaXN0LkNvbnRhaW5zKGkpKSB7CisgICAgICBBU1NF
UlRfRVEoa2V5cy5jb3VudChpKSwgMSk7CisgICAgfSBlbHNlIHsKKyAgICAgIEFTU0VSVF9FUShr
ZXlzLmNvdW50KGkpLCAwKTsKKyAgICB9CisgIH0KKworICAvLyBTaW1wbGUgaXRlcmF0b3IgdGVz
dHMKKyAgeworICAgIFNraXBMaXN0PEtleSwgQ29tcGFyYXRvcj46Okl0ZXJhdG9yIGl0ZXIoJmxp
c3QpOworICAgIEFTU0VSVF9UUlVFKCFpdGVyLlZhbGlkKCkpOworCisgICAgaXRlci5TZWVrKDAp
OworICAgIEFTU0VSVF9UUlVFKGl0ZXIuVmFsaWQoKSk7CisgICAgQVNTRVJUX0VRKCooa2V5cy5i
ZWdpbigpKSwgaXRlci5rZXkoKSk7CisKKyAgICBpdGVyLlNlZWtUb0ZpcnN0KCk7CisgICAgQVNT
RVJUX1RSVUUoaXRlci5WYWxpZCgpKTsKKyAgICBBU1NFUlRfRVEoKihrZXlzLmJlZ2luKCkpLCBp
dGVyLmtleSgpKTsKKworICAgIGl0ZXIuU2Vla1RvTGFzdCgpOworICAgIEFTU0VSVF9UUlVFKGl0
ZXIuVmFsaWQoKSk7CisgICAgQVNTRVJUX0VRKCooa2V5cy5yYmVnaW4oKSksIGl0ZXIua2V5KCkp
OworICB9CisKKyAgLy8gRm9yd2FyZCBpdGVyYXRpb24gdGVzdAorICBmb3IgKGludCBpID0gMDsg
aSA8IFI7IGkrKykgeworICAgIFNraXBMaXN0PEtleSwgQ29tcGFyYXRvcj46Okl0ZXJhdG9yIGl0
ZXIoJmxpc3QpOworICAgIGl0ZXIuU2VlayhpKTsKKworICAgIC8vIENvbXBhcmUgYWdhaW5zdCBt
b2RlbCBpdGVyYXRvcgorICAgIHN0ZDo6c2V0PEtleT46Oml0ZXJhdG9yIG1vZGVsX2l0ZXIgPSBr
ZXlzLmxvd2VyX2JvdW5kKGkpOworICAgIGZvciAoaW50IGogPSAwOyBqIDwgMzsgaisrKSB7Cisg
ICAgICBpZiAobW9kZWxfaXRlciA9PSBrZXlzLmVuZCgpKSB7CisgICAgICAgIEFTU0VSVF9UUlVF
KCFpdGVyLlZhbGlkKCkpOworICAgICAgICBicmVhazsKKyAgICAgIH0gZWxzZSB7CisgICAgICAg
IEFTU0VSVF9UUlVFKGl0ZXIuVmFsaWQoKSk7CisgICAgICAgIEFTU0VSVF9FUSgqbW9kZWxfaXRl
ciwgaXRlci5rZXkoKSk7CisgICAgICAgICsrbW9kZWxfaXRlcjsKKyAgICAgICAgaXRlci5OZXh0
KCk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgLy8gQmFja3dhcmQgaXRlcmF0aW9uIHRlc3QK
KyAgeworICAgIFNraXBMaXN0PEtleSwgQ29tcGFyYXRvcj46Okl0ZXJhdG9yIGl0ZXIoJmxpc3Qp
OworICAgIGl0ZXIuU2Vla1RvTGFzdCgpOworCisgICAgLy8gQ29tcGFyZSBhZ2FpbnN0IG1vZGVs
IGl0ZXJhdG9yCisgICAgZm9yIChzdGQ6OnNldDxLZXk+OjpyZXZlcnNlX2l0ZXJhdG9yIG1vZGVs
X2l0ZXIgPSBrZXlzLnJiZWdpbigpOworICAgICAgICAgbW9kZWxfaXRlciAhPSBrZXlzLnJlbmQo
KTsKKyAgICAgICAgICsrbW9kZWxfaXRlcikgeworICAgICAgQVNTRVJUX1RSVUUoaXRlci5WYWxp
ZCgpKTsKKyAgICAgIEFTU0VSVF9FUSgqbW9kZWxfaXRlciwgaXRlci5rZXkoKSk7CisgICAgICBp
dGVyLlByZXYoKTsKKyAgICB9CisgICAgQVNTRVJUX1RSVUUoIWl0ZXIuVmFsaWQoKSk7CisgIH0K
K30KKworLy8gV2Ugd2FudCB0byBtYWtlIHN1cmUgdGhhdCB3aXRoIGEgc2luZ2xlIHdyaXRlciBh
bmQgbXVsdGlwbGUKKy8vIGNvbmN1cnJlbnQgcmVhZGVycyAod2l0aCBubyBzeW5jaHJvbml6YXRp
b24gb3RoZXIgdGhhbiB3aGVuIGEKKy8vIHJlYWRlcidzIGl0ZXJhdG9yIGlzIGNyZWF0ZWQpLCB0
aGUgcmVhZGVyIGFsd2F5cyBvYnNlcnZlcyBhbGwgdGhlCisvLyBkYXRhIHRoYXQgd2FzIHByZXNl
bnQgaW4gdGhlIHNraXAgbGlzdCB3aGVuIHRoZSBpdGVyYXRvciB3YXMKKy8vIGNvbnN0cnVjdG9y
LiAgQmVjYXVzZSBpbnNlcnRpb25zIGFyZSBoYXBwZW5pbmcgY29uY3VycmVudGx5LCB3ZSBtYXkK
Ky8vIGFsc28gb2JzZXJ2ZSBuZXcgdmFsdWVzIHRoYXQgd2VyZSBpbnNlcnRlZCBzaW5jZSB0aGUg
aXRlcmF0b3Igd2FzCisvLyBjb25zdHJ1Y3RlZCwgYnV0IHdlIHNob3VsZCBuZXZlciBtaXNzIGFu
eSB2YWx1ZXMgdGhhdCB3ZXJlIHByZXNlbnQKKy8vIGF0IGl0ZXJhdG9yIGNvbnN0cnVjdGlvbiB0
aW1lLgorLy8KKy8vIFdlIGdlbmVyYXRlIG11bHRpLXBhcnQga2V5czoKKy8vICAgICA8a2V5LGdl
bixoYXNoPgorLy8gd2hlcmU6CisvLyAgICAga2V5IGlzIGluIHJhbmdlIFswLi5LLTFdCisvLyAg
ICAgZ2VuIGlzIGEgZ2VuZXJhdGlvbiBudW1iZXIgZm9yIGtleQorLy8gICAgIGhhc2ggaXMgaGFz
aChrZXksZ2VuKQorLy8KKy8vIFRoZSBpbnNlcnRpb24gY29kZSBwaWNrcyBhIHJhbmRvbSBrZXks
IHNldHMgZ2VuIHRvIGJlIDEgKyB0aGUgbGFzdAorLy8gZ2VuZXJhdGlvbiBudW1iZXIgaW5zZXJ0
ZWQgZm9yIHRoYXQga2V5LCBhbmQgc2V0cyBoYXNoIHRvIEhhc2goa2V5LGdlbikuCisvLworLy8g
QXQgdGhlIGJlZ2lubmluZyBvZiBhIHJlYWQsIHdlIHNuYXBzaG90IHRoZSBsYXN0IGluc2VydGVk
CisvLyBnZW5lcmF0aW9uIG51bWJlciBmb3IgZWFjaCBrZXkuICBXZSB0aGVuIGl0ZXJhdGUsIGlu
Y2x1ZGluZyByYW5kb20KKy8vIGNhbGxzIHRvIE5leHQoKSBhbmQgU2VlaygpLiAgRm9yIGV2ZXJ5
IGtleSB3ZSBlbmNvdW50ZXIsIHdlCisvLyBjaGVjayB0aGF0IGl0IGlzIGVpdGhlciBleHBlY3Rl
ZCBnaXZlbiB0aGUgaW5pdGlhbCBzbmFwc2hvdCBvciBoYXMKKy8vIGJlZW4gY29uY3VycmVudGx5
IGFkZGVkIHNpbmNlIHRoZSBpdGVyYXRvciBzdGFydGVkLgorY2xhc3MgQ29uY3VycmVudFRlc3Qg
eworIHByaXZhdGU6CisgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBLID0gNDsKKworICBzdGF0aWMg
dWludDY0X3Qga2V5KEtleSBrZXkpIHsgcmV0dXJuIChrZXkgPj4gNDApOyB9CisgIHN0YXRpYyB1
aW50NjRfdCBnZW4oS2V5IGtleSkgeyByZXR1cm4gKGtleSA+PiA4KSAmIDB4ZmZmZmZmZmZ1OyB9
CisgIHN0YXRpYyB1aW50NjRfdCBoYXNoKEtleSBrZXkpIHsgcmV0dXJuIGtleSAmIDB4ZmY7IH0K
KworICBzdGF0aWMgdWludDY0X3QgSGFzaE51bWJlcnModWludDY0X3QgaywgdWludDY0X3QgZykg
eworICAgIHVpbnQ2NF90IGRhdGFbMl0gPSB7IGssIGcgfTsKKyAgICByZXR1cm4gSGFzaChyZWlu
dGVycHJldF9jYXN0PGNoYXIqPihkYXRhKSwgc2l6ZW9mKGRhdGEpLCAwKTsKKyAgfQorCisgIHN0
YXRpYyBLZXkgTWFrZUtleSh1aW50NjRfdCBrLCB1aW50NjRfdCBnKSB7CisgICAgYXNzZXJ0KHNp
emVvZihLZXkpID09IHNpemVvZih1aW50NjRfdCkpOworICAgIGFzc2VydChrIDw9IEspOyAgLy8g
V2Ugc29tZXRpbWVzIHBhc3MgSyB0byBzZWVrIHRvIHRoZSBlbmQgb2YgdGhlIHNraXBsaXN0Cisg
ICAgYXNzZXJ0KGcgPD0gMHhmZmZmZmZmZnUpOworICAgIHJldHVybiAoKGsgPDwgNDApIHwgKGcg
PDwgOCkgfCAoSGFzaE51bWJlcnMoaywgZykgJiAweGZmKSk7CisgIH0KKworICBzdGF0aWMgYm9v
bCBJc1ZhbGlkS2V5KEtleSBrKSB7CisgICAgcmV0dXJuIGhhc2goaykgPT0gKEhhc2hOdW1iZXJz
KGtleShrKSwgZ2VuKGspKSAmIDB4ZmYpOworICB9CisKKyAgc3RhdGljIEtleSBSYW5kb21UYXJn
ZXQoUmFuZG9tKiBybmQpIHsKKyAgICBzd2l0Y2ggKHJuZC0+TmV4dCgpICUgMTApIHsKKyAgICAg
IGNhc2UgMDoKKyAgICAgICAgLy8gU2VlayB0byBiZWdpbm5pbmcKKyAgICAgICAgcmV0dXJuIE1h
a2VLZXkoMCwgMCk7CisgICAgICBjYXNlIDE6CisgICAgICAgIC8vIFNlZWsgdG8gZW5kCisgICAg
ICAgIHJldHVybiBNYWtlS2V5KEssIDApOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gU2Vl
ayB0byBtaWRkbGUKKyAgICAgICAgcmV0dXJuIE1ha2VLZXkocm5kLT5OZXh0KCkgJSBLLCAwKTsK
KyAgICB9CisgIH0KKworICAvLyBQZXIta2V5IGdlbmVyYXRpb24KKyAgc3RydWN0IFN0YXRlIHsK
KyAgICBwb3J0OjpBdG9taWNQb2ludGVyIGdlbmVyYXRpb25bS107CisgICAgdm9pZCBTZXQoaW50
IGssIGludHB0cl90IHYpIHsKKyAgICAgIGdlbmVyYXRpb25ba10uUmVsZWFzZV9TdG9yZShyZWlu
dGVycHJldF9jYXN0PHZvaWQqPih2KSk7CisgICAgfQorICAgIGludHB0cl90IEdldChpbnQgaykg
eworICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGdlbmVyYXRpb25ba10u
QWNxdWlyZV9Mb2FkKCkpOworICAgIH0KKworICAgIFN0YXRlKCkgeworICAgICAgZm9yIChpbnQg
ayA9IDA7IGsgPCBLOyBrKyspIHsKKyAgICAgICAgU2V0KGssIDApOworICAgICAgfQorICAgIH0K
KyAgfTsKKworICAvLyBDdXJyZW50IHN0YXRlIG9mIHRoZSB0ZXN0CisgIFN0YXRlIGN1cnJlbnRf
OworCisgIEFyZW5hIGFyZW5hXzsKKworICAvLyBTa2lwTGlzdCBpcyBub3QgcHJvdGVjdGVkIGJ5
IG11Xy4gIFdlIGp1c3QgdXNlIGEgc2luZ2xlIHdyaXRlcgorICAvLyB0aHJlYWQgdG8gbW9kaWZ5
IGl0LgorICBTa2lwTGlzdDxLZXksIENvbXBhcmF0b3I+IGxpc3RfOworCisgcHVibGljOgorICBD
b25jdXJyZW50VGVzdCgpIDogbGlzdF8oQ29tcGFyYXRvcigpLCAmYXJlbmFfKSB7IH0KKworICAv
LyBSRVFVSVJFUzogRXh0ZXJuYWwgc3luY2hyb25pemF0aW9uCisgIHZvaWQgV3JpdGVTdGVwKFJh
bmRvbSogcm5kKSB7CisgICAgY29uc3QgdWludDMyX3QgayA9IHJuZC0+TmV4dCgpICUgSzsKKyAg
ICBjb25zdCBpbnRwdHJfdCBnID0gY3VycmVudF8uR2V0KGspICsgMTsKKyAgICBjb25zdCBLZXkg
a2V5ID0gTWFrZUtleShrLCBnKTsKKyAgICBsaXN0Xy5JbnNlcnQoa2V5KTsKKyAgICBjdXJyZW50
Xy5TZXQoaywgZyk7CisgIH0KKworICB2b2lkIFJlYWRTdGVwKFJhbmRvbSogcm5kKSB7CisgICAg
Ly8gUmVtZW1iZXIgdGhlIGluaXRpYWwgY29tbWl0dGVkIHN0YXRlIG9mIHRoZSBza2lwbGlzdC4K
KyAgICBTdGF0ZSBpbml0aWFsX3N0YXRlOworICAgIGZvciAoaW50IGsgPSAwOyBrIDwgSzsgaysr
KSB7CisgICAgICBpbml0aWFsX3N0YXRlLlNldChrLCBjdXJyZW50Xy5HZXQoaykpOworICAgIH0K
KworICAgIEtleSBwb3MgPSBSYW5kb21UYXJnZXQocm5kKTsKKyAgICBTa2lwTGlzdDxLZXksIENv
bXBhcmF0b3I+OjpJdGVyYXRvciBpdGVyKCZsaXN0Xyk7CisgICAgaXRlci5TZWVrKHBvcyk7Cisg
ICAgd2hpbGUgKHRydWUpIHsKKyAgICAgIEtleSBjdXJyZW50OworICAgICAgaWYgKCFpdGVyLlZh
bGlkKCkpIHsKKyAgICAgICAgY3VycmVudCA9IE1ha2VLZXkoSywgMCk7CisgICAgICB9IGVsc2Ug
eworICAgICAgICBjdXJyZW50ID0gaXRlci5rZXkoKTsKKyAgICAgICAgQVNTRVJUX1RSVUUoSXNW
YWxpZEtleShjdXJyZW50KSkgPDwgY3VycmVudDsKKyAgICAgIH0KKyAgICAgIEFTU0VSVF9MRShw
b3MsIGN1cnJlbnQpIDw8ICJzaG91bGQgbm90IGdvIGJhY2t3YXJkcyI7CisKKyAgICAgIC8vIFZl
cmlmeSB0aGF0IGV2ZXJ5dGhpbmcgaW4gW3BvcyxjdXJyZW50KSB3YXMgbm90IHByZXNlbnQgaW4K
KyAgICAgIC8vIGluaXRpYWxfc3RhdGUuCisgICAgICB3aGlsZSAocG9zIDwgY3VycmVudCkgewor
ICAgICAgICBBU1NFUlRfTFQoa2V5KHBvcyksIEspIDw8IHBvczsKKworICAgICAgICAvLyBOb3Rl
IHRoYXQgZ2VuZXJhdGlvbiAwIGlzIG5ldmVyIGluc2VydGVkLCBzbyBpdCBpcyBvayBpZgorICAg
ICAgICAvLyA8KiwwLCo+IGlzIG1pc3NpbmcuCisgICAgICAgIEFTU0VSVF9UUlVFKChnZW4ocG9z
KSA9PSAwKSB8fAorICAgICAgICAgICAgICAgICAgICAoZ2VuKHBvcykgPiBpbml0aWFsX3N0YXRl
LkdldChrZXkocG9zKSkpCisgICAgICAgICAgICAgICAgICAgICkgPDwgImtleTogIiA8PCBrZXko
cG9zKQorICAgICAgICAgICAgICAgICAgICAgIDw8ICI7IGdlbjogIiA8PCBnZW4ocG9zKQorICAg
ICAgICAgICAgICAgICAgICAgIDw8ICI7IGluaXRnZW46ICIKKyAgICAgICAgICAgICAgICAgICAg
ICA8PCBpbml0aWFsX3N0YXRlLkdldChrZXkocG9zKSk7CisKKyAgICAgICAgLy8gQWR2YW5jZSB0
byBuZXh0IGtleSBpbiB0aGUgdmFsaWQga2V5IHNwYWNlCisgICAgICAgIGlmIChrZXkocG9zKSA8
IGtleShjdXJyZW50KSkgeworICAgICAgICAgIHBvcyA9IE1ha2VLZXkoa2V5KHBvcykgKyAxLCAw
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBwb3MgPSBNYWtlS2V5KGtleShwb3MpLCBn
ZW4ocG9zKSArIDEpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGlmICghaXRlci5WYWxp
ZCgpKSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBpZiAocm5kLT5OZXh0KCkg
JSAyKSB7CisgICAgICAgIGl0ZXIuTmV4dCgpOworICAgICAgICBwb3MgPSBNYWtlS2V5KGtleShw
b3MpLCBnZW4ocG9zKSArIDEpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgS2V5IG5ld190YXJn
ZXQgPSBSYW5kb21UYXJnZXQocm5kKTsKKyAgICAgICAgaWYgKG5ld190YXJnZXQgPiBwb3MpIHsK
KyAgICAgICAgICBwb3MgPSBuZXdfdGFyZ2V0OworICAgICAgICAgIGl0ZXIuU2VlayhuZXdfdGFy
Z2V0KTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorfTsKK2NvbnN0IHVpbnQzMl90
IENvbmN1cnJlbnRUZXN0OjpLOworCisvLyBTaW1wbGUgdGVzdCB0aGF0IGRvZXMgc2luZ2xlLXRo
cmVhZGVkIHRlc3Rpbmcgb2YgdGhlIENvbmN1cnJlbnRUZXN0CisvLyBzY2FmZm9sZGluZy4KK1RF
U1QoU2tpcFRlc3QsIENvbmN1cnJlbnRXaXRob3V0VGhyZWFkcykgeworICBDb25jdXJyZW50VGVz
dCB0ZXN0OworICBSYW5kb20gcm5kKHRlc3Q6OlJhbmRvbVNlZWQoKSk7CisgIGZvciAoaW50IGkg
PSAwOyBpIDwgMTAwMDA7IGkrKykgeworICAgIHRlc3QuUmVhZFN0ZXAoJnJuZCk7CisgICAgdGVz
dC5Xcml0ZVN0ZXAoJnJuZCk7CisgIH0KK30KKworY2xhc3MgVGVzdFN0YXRlIHsKKyBwdWJsaWM6
CisgIENvbmN1cnJlbnRUZXN0IHRfOworICBpbnQgc2VlZF87CisgIHBvcnQ6OkF0b21pY1BvaW50
ZXIgcXVpdF9mbGFnXzsKKworICBlbnVtIFJlYWRlclN0YXRlIHsKKyAgICBTVEFSVElORywKKyAg
ICBSVU5OSU5HLAorICAgIERPTkUKKyAgfTsKKworICBleHBsaWNpdCBUZXN0U3RhdGUoaW50IHMp
CisgICAgICA6IHNlZWRfKHMpLAorICAgICAgICBxdWl0X2ZsYWdfKE5VTEwpLAorICAgICAgICBz
dGF0ZV8oU1RBUlRJTkcpLAorICAgICAgICBzdGF0ZV9jdl8oJm11Xykge30KKworICB2b2lkIFdh
aXQoUmVhZGVyU3RhdGUgcykgeworICAgIG11Xy5Mb2NrKCk7CisgICAgd2hpbGUgKHN0YXRlXyAh
PSBzKSB7CisgICAgICBzdGF0ZV9jdl8uV2FpdCgpOworICAgIH0KKyAgICBtdV8uVW5sb2NrKCk7
CisgIH0KKworICB2b2lkIENoYW5nZShSZWFkZXJTdGF0ZSBzKSB7CisgICAgbXVfLkxvY2soKTsK
KyAgICBzdGF0ZV8gPSBzOworICAgIHN0YXRlX2N2Xy5TaWduYWwoKTsKKyAgICBtdV8uVW5sb2Nr
KCk7CisgIH0KKworIHByaXZhdGU6CisgIHBvcnQ6Ok11dGV4IG11XzsKKyAgUmVhZGVyU3RhdGUg
c3RhdGVfOworICBwb3J0OjpDb25kVmFyIHN0YXRlX2N2XzsKK307CisKK3N0YXRpYyB2b2lkIENv
bmN1cnJlbnRSZWFkZXIodm9pZCogYXJnKSB7CisgIFRlc3RTdGF0ZSogc3RhdGUgPSByZWludGVy
cHJldF9jYXN0PFRlc3RTdGF0ZSo+KGFyZyk7CisgIFJhbmRvbSBybmQoc3RhdGUtPnNlZWRfKTsK
KyAgaW50NjRfdCByZWFkcyA9IDA7CisgIHN0YXRlLT5DaGFuZ2UoVGVzdFN0YXRlOjpSVU5OSU5H
KTsKKyAgd2hpbGUgKCFzdGF0ZS0+cXVpdF9mbGFnXy5BY3F1aXJlX0xvYWQoKSkgeworICAgIHN0
YXRlLT50Xy5SZWFkU3RlcCgmcm5kKTsKKyAgICArK3JlYWRzOworICB9CisgIHN0YXRlLT5DaGFu
Z2UoVGVzdFN0YXRlOjpET05FKTsKK30KKworc3RhdGljIHZvaWQgUnVuQ29uY3VycmVudChpbnQg
cnVuKSB7CisgIGNvbnN0IGludCBzZWVkID0gdGVzdDo6UmFuZG9tU2VlZCgpICsgKHJ1biAqIDEw
MCk7CisgIFJhbmRvbSBybmQoc2VlZCk7CisgIGNvbnN0IGludCBOID0gMTAwMDsKKyAgY29uc3Qg
aW50IGtTaXplID0gMTAwMDsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsKKyAgICBp
ZiAoKGkgJSAxMDApID09IDApIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiUnVuICVkIG9mICVk
XG4iLCBpLCBOKTsKKyAgICB9CisgICAgVGVzdFN0YXRlIHN0YXRlKHNlZWQgKyAxKTsKKyAgICBF
bnY6OkRlZmF1bHQoKS0+U2NoZWR1bGUoQ29uY3VycmVudFJlYWRlciwgJnN0YXRlKTsKKyAgICBz
dGF0ZS5XYWl0KFRlc3RTdGF0ZTo6UlVOTklORyk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBr
U2l6ZTsgaSsrKSB7CisgICAgICBzdGF0ZS50Xy5Xcml0ZVN0ZXAoJnJuZCk7CisgICAgfQorICAg
IHN0YXRlLnF1aXRfZmxhZ18uUmVsZWFzZV9TdG9yZSgmc3RhdGUpOyAgLy8gQW55IG5vbi1OVUxM
IGFyZyB3aWxsIGRvCisgICAgc3RhdGUuV2FpdChUZXN0U3RhdGU6OkRPTkUpOworICB9Cit9CisK
K1RFU1QoU2tpcFRlc3QsIENvbmN1cnJlbnQxKSB7IFJ1bkNvbmN1cnJlbnQoMSk7IH0KK1RFU1Qo
U2tpcFRlc3QsIENvbmN1cnJlbnQyKSB7IFJ1bkNvbmN1cnJlbnQoMik7IH0KK1RFU1QoU2tpcFRl
c3QsIENvbmN1cnJlbnQzKSB7IFJ1bkNvbmN1cnJlbnQoMyk7IH0KK1RFU1QoU2tpcFRlc3QsIENv
bmN1cnJlbnQ0KSB7IFJ1bkNvbmN1cnJlbnQoNCk7IH0KK1RFU1QoU2tpcFRlc3QsIENvbmN1cnJl
bnQ1KSB7IFJ1bkNvbmN1cnJlbnQoNSk7IH0KKworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKKwor
aW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KSB7CisgIHJldHVybiBsZXZlbGRiOjp0ZXN0
OjpSdW5BbGxUZXN0cygpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxk
Yi9kYi9zbmFwc2hvdC5oIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9zbmFwc2hvdC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmU3ZjhmZDJjMzdjZjhhNDgyYzQ1ZjU1MjRhYTcyOWU3NGY3YjNhYTcKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL3NuYXBzaG90LmgK
QEAgLTAsMCArMSw2NiBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJp
YnV0b3JzLgorCisjaWZuZGVmIFNUT1JBR0VfTEVWRUxEQl9EQl9TTkFQU0hPVF9IXworI2RlZmlu
ZSBTVE9SQUdFX0xFVkVMREJfREJfU05BUFNIT1RfSF8KKworI2luY2x1ZGUgImxldmVsZGIvZGIu
aCIKKworbmFtZXNwYWNlIGxldmVsZGIgeworCitjbGFzcyBTbmFwc2hvdExpc3Q7CisKKy8vIFNu
YXBzaG90cyBhcmUga2VwdCBpbiBhIGRvdWJseS1saW5rZWQgbGlzdCBpbiB0aGUgREIuCisvLyBF
YWNoIFNuYXBzaG90SW1wbCBjb3JyZXNwb25kcyB0byBhIHBhcnRpY3VsYXIgc2VxdWVuY2UgbnVt
YmVyLgorY2xhc3MgU25hcHNob3RJbXBsIDogcHVibGljIFNuYXBzaG90IHsKKyBwdWJsaWM6Cisg
IFNlcXVlbmNlTnVtYmVyIG51bWJlcl87ICAvLyBjb25zdCBhZnRlciBjcmVhdGlvbgorCisgcHJp
dmF0ZToKKyAgZnJpZW5kIGNsYXNzIFNuYXBzaG90TGlzdDsKKworICAvLyBTbmFwc2hvdEltcGwg
aXMga2VwdCBpbiBhIGRvdWJseS1saW5rZWQgY2lyY3VsYXIgbGlzdAorICBTbmFwc2hvdEltcGwq
IHByZXZfOworICBTbmFwc2hvdEltcGwqIG5leHRfOworCisgIFNuYXBzaG90TGlzdCogbGlzdF87
ICAgICAgICAgICAgICAgICAvLyBqdXN0IGZvciBzYW5pdHkgY2hlY2tzCit9OworCitjbGFzcyBT
bmFwc2hvdExpc3QgeworIHB1YmxpYzoKKyAgU25hcHNob3RMaXN0KCkgeworICAgIGxpc3RfLnBy
ZXZfID0gJmxpc3RfOworICAgIGxpc3RfLm5leHRfID0gJmxpc3RfOworICB9CisKKyAgYm9vbCBl
bXB0eSgpIGNvbnN0IHsgcmV0dXJuIGxpc3RfLm5leHRfID09ICZsaXN0XzsgfQorICBTbmFwc2hv
dEltcGwqIG9sZGVzdCgpIGNvbnN0IHsgYXNzZXJ0KCFlbXB0eSgpKTsgcmV0dXJuIGxpc3RfLm5l
eHRfOyB9CisgIFNuYXBzaG90SW1wbCogbmV3ZXN0KCkgY29uc3QgeyBhc3NlcnQoIWVtcHR5KCkp
OyByZXR1cm4gbGlzdF8ucHJldl87IH0KKworICBjb25zdCBTbmFwc2hvdEltcGwqIE5ldyhTZXF1
ZW5jZU51bWJlciBzZXEpIHsKKyAgICBTbmFwc2hvdEltcGwqIHMgPSBuZXcgU25hcHNob3RJbXBs
OworICAgIHMtPm51bWJlcl8gPSBzZXE7CisgICAgcy0+bGlzdF8gPSB0aGlzOworICAgIHMtPm5l
eHRfID0gJmxpc3RfOworICAgIHMtPnByZXZfID0gbGlzdF8ucHJldl87CisgICAgcy0+cHJldl8t
Pm5leHRfID0gczsKKyAgICBzLT5uZXh0Xy0+cHJldl8gPSBzOworICAgIHJldHVybiBzOworICB9
CisKKyAgdm9pZCBEZWxldGUoY29uc3QgU25hcHNob3RJbXBsKiBzKSB7CisgICAgYXNzZXJ0KHMt
Pmxpc3RfID09IHRoaXMpOworICAgIHMtPnByZXZfLT5uZXh0XyA9IHMtPm5leHRfOworICAgIHMt
Pm5leHRfLT5wcmV2XyA9IHMtPnByZXZfOworICAgIGRlbGV0ZSBzOworICB9CisKKyBwcml2YXRl
OgorICAvLyBEdW1teSBoZWFkIG9mIGRvdWJseS1saW5rZWQgbGlzdCBvZiBzbmFwc2hvdHMKKyAg
U25hcHNob3RJbXBsIGxpc3RfOworfTsKKworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKKworI2Vu
ZGlmICAvLyBTVE9SQUdFX0xFVkVMREJfREJfU05BUFNIT1RfSF8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvdGFibGVfY2FjaGUuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9sZXZlbGRiL2RiL3RhYmxlX2NhY2hlLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ5N2RiMjcwNzY2ZDg4NTdk
ZGIzNTVhZDA5ZWQwODkyZTRhYjJkYWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9sZXZlbGRiL2RiL3RhYmxlX2NhY2hlLmNjCkBAIC0wLDAgKzEsMTIxIEBACisvLyBDb3B5
cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUg
QVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCisKKyNpbmNsdWRlICJkYi90
YWJsZV9jYWNoZS5oIgorCisjaW5jbHVkZSAiZGIvZmlsZW5hbWUuaCIKKyNpbmNsdWRlICJsZXZl
bGRiL2Vudi5oIgorI2luY2x1ZGUgImxldmVsZGIvdGFibGUuaCIKKyNpbmNsdWRlICJ1dGlsL2Nv
ZGluZy5oIgorCituYW1lc3BhY2UgbGV2ZWxkYiB7CisKK3N0cnVjdCBUYWJsZUFuZEZpbGUgewor
ICBSYW5kb21BY2Nlc3NGaWxlKiBmaWxlOworICBUYWJsZSogdGFibGU7Cit9OworCitzdGF0aWMg
dm9pZCBEZWxldGVFbnRyeShjb25zdCBTbGljZSYga2V5LCB2b2lkKiB2YWx1ZSkgeworICBUYWJs
ZUFuZEZpbGUqIHRmID0gcmVpbnRlcnByZXRfY2FzdDxUYWJsZUFuZEZpbGUqPih2YWx1ZSk7Cisg
IGRlbGV0ZSB0Zi0+dGFibGU7CisgIGRlbGV0ZSB0Zi0+ZmlsZTsKKyAgZGVsZXRlIHRmOworfQor
CitzdGF0aWMgdm9pZCBVbnJlZkVudHJ5KHZvaWQqIGFyZzEsIHZvaWQqIGFyZzIpIHsKKyAgQ2Fj
aGUqIGNhY2hlID0gcmVpbnRlcnByZXRfY2FzdDxDYWNoZSo+KGFyZzEpOworICBDYWNoZTo6SGFu
ZGxlKiBoID0gcmVpbnRlcnByZXRfY2FzdDxDYWNoZTo6SGFuZGxlKj4oYXJnMik7CisgIGNhY2hl
LT5SZWxlYXNlKGgpOworfQorCitUYWJsZUNhY2hlOjpUYWJsZUNhY2hlKGNvbnN0IHN0ZDo6c3Ry
aW5nJiBkYm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE9wdGlvbnMqIG9wdGlv
bnMsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBlbnRyaWVzKQorICAgIDogZW52XyhvcHRp
b25zLT5lbnYpLAorICAgICAgZGJuYW1lXyhkYm5hbWUpLAorICAgICAgb3B0aW9uc18ob3B0aW9u
cyksCisgICAgICBjYWNoZV8oTmV3TFJVQ2FjaGUoZW50cmllcykpIHsKK30KKworVGFibGVDYWNo
ZTo6flRhYmxlQ2FjaGUoKSB7CisgIGRlbGV0ZSBjYWNoZV87Cit9CisKK1N0YXR1cyBUYWJsZUNh
Y2hlOjpGaW5kVGFibGUodWludDY0X3QgZmlsZV9udW1iZXIsIHVpbnQ2NF90IGZpbGVfc2l6ZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FjaGU6OkhhbmRsZSoqIGhhbmRsZSkgewor
ICBTdGF0dXMgczsKKyAgY2hhciBidWZbc2l6ZW9mKGZpbGVfbnVtYmVyKV07CisgIEVuY29kZUZp
eGVkNjQoYnVmLCBmaWxlX251bWJlcik7CisgIFNsaWNlIGtleShidWYsIHNpemVvZihidWYpKTsK
KyAgKmhhbmRsZSA9IGNhY2hlXy0+TG9va3VwKGtleSk7CisgIGlmICgqaGFuZGxlID09IE5VTEwp
IHsKKyAgICBzdGQ6OnN0cmluZyBmbmFtZSA9IFRhYmxlRmlsZU5hbWUoZGJuYW1lXywgZmlsZV9u
dW1iZXIpOworICAgIFJhbmRvbUFjY2Vzc0ZpbGUqIGZpbGUgPSBOVUxMOworICAgIFRhYmxlKiB0
YWJsZSA9IE5VTEw7CisgICAgcyA9IGVudl8tPk5ld1JhbmRvbUFjY2Vzc0ZpbGUoZm5hbWUsICZm
aWxlKTsKKyAgICBpZiAocy5vaygpKSB7CisgICAgICBzID0gVGFibGU6Ok9wZW4oKm9wdGlvbnNf
LCBmaWxlLCBmaWxlX3NpemUsICZ0YWJsZSk7CisgICAgfQorCisgICAgaWYgKCFzLm9rKCkpIHsK
KyAgICAgIGFzc2VydCh0YWJsZSA9PSBOVUxMKTsKKyAgICAgIGRlbGV0ZSBmaWxlOworICAgICAg
Ly8gV2UgZG8gbm90IGNhY2hlIGVycm9yIHJlc3VsdHMgc28gdGhhdCBpZiB0aGUgZXJyb3IgaXMg
dHJhbnNpZW50LAorICAgICAgLy8gb3Igc29tZWJvZHkgcmVwYWlycyB0aGUgZmlsZSwgd2UgcmVj
b3ZlciBhdXRvbWF0aWNhbGx5LgorICAgIH0gZWxzZSB7CisgICAgICBUYWJsZUFuZEZpbGUqIHRm
ID0gbmV3IFRhYmxlQW5kRmlsZTsKKyAgICAgIHRmLT5maWxlID0gZmlsZTsKKyAgICAgIHRmLT50
YWJsZSA9IHRhYmxlOworICAgICAgKmhhbmRsZSA9IGNhY2hlXy0+SW5zZXJ0KGtleSwgdGYsIDEs
ICZEZWxldGVFbnRyeSk7CisgICAgfQorICB9CisgIHJldHVybiBzOworfQorCitJdGVyYXRvciog
VGFibGVDYWNoZTo6TmV3SXRlcmF0b3IoY29uc3QgUmVhZE9wdGlvbnMmIG9wdGlvbnMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgZmlsZV9udW1iZXIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgZmlsZV9zaXplLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhYmxlKiogdGFibGVwdHIpIHsKKyAgaWYgKHRh
YmxlcHRyICE9IE5VTEwpIHsKKyAgICAqdGFibGVwdHIgPSBOVUxMOworICB9CisKKyAgQ2FjaGU6
OkhhbmRsZSogaGFuZGxlID0gTlVMTDsKKyAgU3RhdHVzIHMgPSBGaW5kVGFibGUoZmlsZV9udW1i
ZXIsIGZpbGVfc2l6ZSwgJmhhbmRsZSk7CisgIGlmICghcy5vaygpKSB7CisgICAgcmV0dXJuIE5l
d0Vycm9ySXRlcmF0b3Iocyk7CisgIH0KKworICBUYWJsZSogdGFibGUgPSByZWludGVycHJldF9j
YXN0PFRhYmxlQW5kRmlsZSo+KGNhY2hlXy0+VmFsdWUoaGFuZGxlKSktPnRhYmxlOworICBJdGVy
YXRvciogcmVzdWx0ID0gdGFibGUtPk5ld0l0ZXJhdG9yKG9wdGlvbnMpOworICByZXN1bHQtPlJl
Z2lzdGVyQ2xlYW51cCgmVW5yZWZFbnRyeSwgY2FjaGVfLCBoYW5kbGUpOworICBpZiAodGFibGVw
dHIgIT0gTlVMTCkgeworICAgICp0YWJsZXB0ciA9IHRhYmxlOworICB9CisgIHJldHVybiByZXN1
bHQ7Cit9CisKK1N0YXR1cyBUYWJsZUNhY2hlOjpHZXQoY29uc3QgUmVhZE9wdGlvbnMmIG9wdGlv
bnMsCisgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGZpbGVfbnVtYmVyLAorICAgICAg
ICAgICAgICAgICAgICAgICB1aW50NjRfdCBmaWxlX3NpemUsCisgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFNsaWNlJiBrLAorICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBhcmcsCisg
ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpzYXZlcikodm9pZCosIGNvbnN0IFNsaWNlJiwg
Y29uc3QgU2xpY2UmKSkgeworICBDYWNoZTo6SGFuZGxlKiBoYW5kbGUgPSBOVUxMOworICBTdGF0
dXMgcyA9IEZpbmRUYWJsZShmaWxlX251bWJlciwgZmlsZV9zaXplLCAmaGFuZGxlKTsKKyAgaWYg
KHMub2soKSkgeworICAgIFRhYmxlKiB0ID0gcmVpbnRlcnByZXRfY2FzdDxUYWJsZUFuZEZpbGUq
PihjYWNoZV8tPlZhbHVlKGhhbmRsZSkpLT50YWJsZTsKKyAgICBzID0gdC0+SW50ZXJuYWxHZXQo
b3B0aW9ucywgaywgYXJnLCBzYXZlcik7CisgICAgY2FjaGVfLT5SZWxlYXNlKGhhbmRsZSk7Cisg
IH0KKyAgcmV0dXJuIHM7Cit9CisKK3ZvaWQgVGFibGVDYWNoZTo6RXZpY3QodWludDY0X3QgZmls
ZV9udW1iZXIpIHsKKyAgY2hhciBidWZbc2l6ZW9mKGZpbGVfbnVtYmVyKV07CisgIEVuY29kZUZp
eGVkNjQoYnVmLCBmaWxlX251bWJlcik7CisgIGNhY2hlXy0+RXJhc2UoU2xpY2UoYnVmLCBzaXpl
b2YoYnVmKSkpOworfQorCit9ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi90YWJsZV9jYWNoZS5oIGIvU291cmNlL1RoaXJkUGFy
dHkvbGV2ZWxkYi9kYi90YWJsZV9jYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhjZjRhYWYxMmQ4ZWQxYTAy
YmQ3ZDE5NjJiNzljYzg1MDY1NzViNmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9sZXZlbGRiL2RiL3RhYmxlX2NhY2hlLmgKQEAgLTAsMCArMSw2MSBAQAorLy8gQ29weXJp
Z2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFV
VEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgorLy8KKy8vIFRocmVhZC1zYWZl
IChwcm92aWRlcyBpbnRlcm5hbCBzeW5jaHJvbml6YXRpb24pCisKKyNpZm5kZWYgU1RPUkFHRV9M
RVZFTERCX0RCX1RBQkxFX0NBQ0hFX0hfCisjZGVmaW5lIFNUT1JBR0VfTEVWRUxEQl9EQl9UQUJM
RV9DQUNIRV9IXworCisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2lu
Y2x1ZGUgImRiL2RiZm9ybWF0LmgiCisjaW5jbHVkZSAibGV2ZWxkYi9jYWNoZS5oIgorI2luY2x1
ZGUgImxldmVsZGIvdGFibGUuaCIKKyNpbmNsdWRlICJwb3J0L3BvcnQuaCIKKworbmFtZXNwYWNl
IGxldmVsZGIgeworCitjbGFzcyBFbnY7CisKK2NsYXNzIFRhYmxlQ2FjaGUgeworIHB1YmxpYzoK
KyAgVGFibGVDYWNoZShjb25zdCBzdGQ6OnN0cmluZyYgZGJuYW1lLCBjb25zdCBPcHRpb25zKiBv
cHRpb25zLCBpbnQgZW50cmllcyk7CisgIH5UYWJsZUNhY2hlKCk7CisKKyAgLy8gUmV0dXJuIGFu
IGl0ZXJhdG9yIGZvciB0aGUgc3BlY2lmaWVkIGZpbGUgbnVtYmVyICh0aGUgY29ycmVzcG9uZGlu
ZworICAvLyBmaWxlIGxlbmd0aCBtdXN0IGJlIGV4YWN0bHkgImZpbGVfc2l6ZSIgYnl0ZXMpLiAg
SWYgInRhYmxlcHRyIiBpcworICAvLyBub24tTlVMTCwgYWxzbyBzZXRzICIqdGFibGVwdHIiIHRv
IHBvaW50IHRvIHRoZSBUYWJsZSBvYmplY3QKKyAgLy8gdW5kZXJseWluZyB0aGUgcmV0dXJuZWQg
aXRlcmF0b3IsIG9yIE5VTEwgaWYgbm8gVGFibGUgb2JqZWN0IHVuZGVybGllcworICAvLyB0aGUg
cmV0dXJuZWQgaXRlcmF0b3IuICBUaGUgcmV0dXJuZWQgIip0YWJsZXB0ciIgb2JqZWN0IGlzIG93
bmVkIGJ5CisgIC8vIHRoZSBjYWNoZSBhbmQgc2hvdWxkIG5vdCBiZSBkZWxldGVkLCBhbmQgaXMg
dmFsaWQgZm9yIGFzIGxvbmcgYXMgdGhlCisgIC8vIHJldHVybmVkIGl0ZXJhdG9yIGlzIGxpdmUu
CisgIEl0ZXJhdG9yKiBOZXdJdGVyYXRvcihjb25zdCBSZWFkT3B0aW9ucyYgb3B0aW9ucywKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGZpbGVfbnVtYmVyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgdWludDY0X3QgZmlsZV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAg
VGFibGUqKiB0YWJsZXB0ciA9IE5VTEwpOworCisgIC8vIElmIGEgc2VlayB0byBpbnRlcm5hbCBr
ZXkgImsiIGluIHNwZWNpZmllZCBmaWxlIGZpbmRzIGFuIGVudHJ5LAorICAvLyBjYWxsICgqaGFu
ZGxlX3Jlc3VsdCkoYXJnLCBmb3VuZF9rZXksIGZvdW5kX3ZhbHVlKS4KKyAgU3RhdHVzIEdldChj
b25zdCBSZWFkT3B0aW9ucyYgb3B0aW9ucywKKyAgICAgICAgICAgICB1aW50NjRfdCBmaWxlX251
bWJlciwKKyAgICAgICAgICAgICB1aW50NjRfdCBmaWxlX3NpemUsCisgICAgICAgICAgICAgY29u
c3QgU2xpY2UmIGssCisgICAgICAgICAgICAgdm9pZCogYXJnLAorICAgICAgICAgICAgIHZvaWQg
KCpoYW5kbGVfcmVzdWx0KSh2b2lkKiwgY29uc3QgU2xpY2UmLCBjb25zdCBTbGljZSYpKTsKKwor
ICAvLyBFdmljdCBhbnkgZW50cnkgZm9yIHRoZSBzcGVjaWZpZWQgZmlsZSBudW1iZXIKKyAgdm9p
ZCBFdmljdCh1aW50NjRfdCBmaWxlX251bWJlcik7CisKKyBwcml2YXRlOgorICBFbnYqIGNvbnN0
IGVudl87CisgIGNvbnN0IHN0ZDo6c3RyaW5nIGRibmFtZV87CisgIGNvbnN0IE9wdGlvbnMqIG9w
dGlvbnNfOworICBDYWNoZSogY2FjaGVfOworCisgIFN0YXR1cyBGaW5kVGFibGUodWludDY0X3Qg
ZmlsZV9udW1iZXIsIHVpbnQ2NF90IGZpbGVfc2l6ZSwgQ2FjaGU6OkhhbmRsZSoqKTsKK307CisK
K30gIC8vIG5hbWVzcGFjZSBsZXZlbGRiCisKKyNlbmRpZiAgLy8gU1RPUkFHRV9MRVZFTERCX0RC
X1RBQkxFX0NBQ0hFX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2Ri
L3ZlcnNpb25fZWRpdC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvdmVyc2lvbl9l
ZGl0LmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmYxMGEyZDU4YjIxMWNiMTZiZWNiMGFjMDI5ODIxMGYwZGFjYmQy
YTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL3ZlcnNp
b25fZWRpdC5jYwpAQCAtMCwwICsxLDI2NiBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBM
ZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFt
ZXMgb2YgY29udHJpYnV0b3JzLgorCisjaW5jbHVkZSAiZGIvdmVyc2lvbl9lZGl0LmgiCisKKyNp
bmNsdWRlICJkYi92ZXJzaW9uX3NldC5oIgorI2luY2x1ZGUgInV0aWwvY29kaW5nLmgiCisKK25h
bWVzcGFjZSBsZXZlbGRiIHsKKworLy8gVGFnIG51bWJlcnMgZm9yIHNlcmlhbGl6ZWQgVmVyc2lv
bkVkaXQuICBUaGVzZSBudW1iZXJzIGFyZSB3cml0dGVuIHRvCisvLyBkaXNrIGFuZCBzaG91bGQg
bm90IGJlIGNoYW5nZWQuCitlbnVtIFRhZyB7CisgIGtDb21wYXJhdG9yICAgICAgICAgICA9IDEs
CisgIGtMb2dOdW1iZXIgICAgICAgICAgICA9IDIsCisgIGtOZXh0RmlsZU51bWJlciAgICAgICA9
IDMsCisgIGtMYXN0U2VxdWVuY2UgICAgICAgICA9IDQsCisgIGtDb21wYWN0UG9pbnRlciAgICAg
ICA9IDUsCisgIGtEZWxldGVkRmlsZSAgICAgICAgICA9IDYsCisgIGtOZXdGaWxlICAgICAgICAg
ICAgICA9IDcsCisgIC8vIDggd2FzIHVzZWQgZm9yIGxhcmdlIHZhbHVlIHJlZnMKKyAga1ByZXZM
b2dOdW1iZXIgICAgICAgID0gOQorfTsKKwordm9pZCBWZXJzaW9uRWRpdDo6Q2xlYXIoKSB7Cisg
IGNvbXBhcmF0b3JfLmNsZWFyKCk7CisgIGxvZ19udW1iZXJfID0gMDsKKyAgcHJldl9sb2dfbnVt
YmVyXyA9IDA7CisgIGxhc3Rfc2VxdWVuY2VfID0gMDsKKyAgbmV4dF9maWxlX251bWJlcl8gPSAw
OworICBoYXNfY29tcGFyYXRvcl8gPSBmYWxzZTsKKyAgaGFzX2xvZ19udW1iZXJfID0gZmFsc2U7
CisgIGhhc19wcmV2X2xvZ19udW1iZXJfID0gZmFsc2U7CisgIGhhc19uZXh0X2ZpbGVfbnVtYmVy
XyA9IGZhbHNlOworICBoYXNfbGFzdF9zZXF1ZW5jZV8gPSBmYWxzZTsKKyAgZGVsZXRlZF9maWxl
c18uY2xlYXIoKTsKKyAgbmV3X2ZpbGVzXy5jbGVhcigpOworfQorCit2b2lkIFZlcnNpb25FZGl0
OjpFbmNvZGVUbyhzdGQ6OnN0cmluZyogZHN0KSBjb25zdCB7CisgIGlmIChoYXNfY29tcGFyYXRv
cl8pIHsKKyAgICBQdXRWYXJpbnQzMihkc3QsIGtDb21wYXJhdG9yKTsKKyAgICBQdXRMZW5ndGhQ
cmVmaXhlZFNsaWNlKGRzdCwgY29tcGFyYXRvcl8pOworICB9CisgIGlmIChoYXNfbG9nX251bWJl
cl8pIHsKKyAgICBQdXRWYXJpbnQzMihkc3QsIGtMb2dOdW1iZXIpOworICAgIFB1dFZhcmludDY0
KGRzdCwgbG9nX251bWJlcl8pOworICB9CisgIGlmIChoYXNfcHJldl9sb2dfbnVtYmVyXykgewor
ICAgIFB1dFZhcmludDMyKGRzdCwga1ByZXZMb2dOdW1iZXIpOworICAgIFB1dFZhcmludDY0KGRz
dCwgcHJldl9sb2dfbnVtYmVyXyk7CisgIH0KKyAgaWYgKGhhc19uZXh0X2ZpbGVfbnVtYmVyXykg
eworICAgIFB1dFZhcmludDMyKGRzdCwga05leHRGaWxlTnVtYmVyKTsKKyAgICBQdXRWYXJpbnQ2
NChkc3QsIG5leHRfZmlsZV9udW1iZXJfKTsKKyAgfQorICBpZiAoaGFzX2xhc3Rfc2VxdWVuY2Vf
KSB7CisgICAgUHV0VmFyaW50MzIoZHN0LCBrTGFzdFNlcXVlbmNlKTsKKyAgICBQdXRWYXJpbnQ2
NChkc3QsIGxhc3Rfc2VxdWVuY2VfKTsKKyAgfQorCisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
Y29tcGFjdF9wb2ludGVyc18uc2l6ZSgpOyBpKyspIHsKKyAgICBQdXRWYXJpbnQzMihkc3QsIGtD
b21wYWN0UG9pbnRlcik7CisgICAgUHV0VmFyaW50MzIoZHN0LCBjb21wYWN0X3BvaW50ZXJzX1tp
XS5maXJzdCk7ICAvLyBsZXZlbAorICAgIFB1dExlbmd0aFByZWZpeGVkU2xpY2UoZHN0LCBjb21w
YWN0X3BvaW50ZXJzX1tpXS5zZWNvbmQuRW5jb2RlKCkpOworICB9CisKKyAgZm9yIChEZWxldGVk
RmlsZVNldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGRlbGV0ZWRfZmlsZXNfLmJlZ2luKCk7Cisg
ICAgICAgaXRlciAhPSBkZWxldGVkX2ZpbGVzXy5lbmQoKTsKKyAgICAgICArK2l0ZXIpIHsKKyAg
ICBQdXRWYXJpbnQzMihkc3QsIGtEZWxldGVkRmlsZSk7CisgICAgUHV0VmFyaW50MzIoZHN0LCBp
dGVyLT5maXJzdCk7ICAgLy8gbGV2ZWwKKyAgICBQdXRWYXJpbnQ2NChkc3QsIGl0ZXItPnNlY29u
ZCk7ICAvLyBmaWxlIG51bWJlcgorICB9CisKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuZXdf
ZmlsZXNfLnNpemUoKTsgaSsrKSB7CisgICAgY29uc3QgRmlsZU1ldGFEYXRhJiBmID0gbmV3X2Zp
bGVzX1tpXS5zZWNvbmQ7CisgICAgUHV0VmFyaW50MzIoZHN0LCBrTmV3RmlsZSk7CisgICAgUHV0
VmFyaW50MzIoZHN0LCBuZXdfZmlsZXNfW2ldLmZpcnN0KTsgIC8vIGxldmVsCisgICAgUHV0VmFy
aW50NjQoZHN0LCBmLm51bWJlcik7CisgICAgUHV0VmFyaW50NjQoZHN0LCBmLmZpbGVfc2l6ZSk7
CisgICAgUHV0TGVuZ3RoUHJlZml4ZWRTbGljZShkc3QsIGYuc21hbGxlc3QuRW5jb2RlKCkpOwor
ICAgIFB1dExlbmd0aFByZWZpeGVkU2xpY2UoZHN0LCBmLmxhcmdlc3QuRW5jb2RlKCkpOworICB9
Cit9CisKK3N0YXRpYyBib29sIEdldEludGVybmFsS2V5KFNsaWNlKiBpbnB1dCwgSW50ZXJuYWxL
ZXkqIGRzdCkgeworICBTbGljZSBzdHI7CisgIGlmIChHZXRMZW5ndGhQcmVmaXhlZFNsaWNlKGlu
cHV0LCAmc3RyKSkgeworICAgIGRzdC0+RGVjb2RlRnJvbShzdHIpOworICAgIHJldHVybiB0cnVl
OworICB9IGVsc2UgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorfQorCitzdGF0aWMgYm9vbCBH
ZXRMZXZlbChTbGljZSogaW5wdXQsIGludCogbGV2ZWwpIHsKKyAgdWludDMyX3QgdjsKKyAgaWYg
KEdldFZhcmludDMyKGlucHV0LCAmdikgJiYKKyAgICAgIHYgPCBjb25maWc6OmtOdW1MZXZlbHMp
IHsKKyAgICAqbGV2ZWwgPSB2OworICAgIHJldHVybiB0cnVlOworICB9IGVsc2UgeworICAgIHJl
dHVybiBmYWxzZTsKKyAgfQorfQorCitTdGF0dXMgVmVyc2lvbkVkaXQ6OkRlY29kZUZyb20oY29u
c3QgU2xpY2UmIHNyYykgeworICBDbGVhcigpOworICBTbGljZSBpbnB1dCA9IHNyYzsKKyAgY29u
c3QgY2hhciogbXNnID0gTlVMTDsKKyAgdWludDMyX3QgdGFnOworCisgIC8vIFRlbXBvcmFyeSBz
dG9yYWdlIGZvciBwYXJzaW5nCisgIGludCBsZXZlbDsKKyAgdWludDY0X3QgbnVtYmVyOworICBG
aWxlTWV0YURhdGEgZjsKKyAgU2xpY2Ugc3RyOworICBJbnRlcm5hbEtleSBrZXk7CisKKyAgd2hp
bGUgKG1zZyA9PSBOVUxMICYmIEdldFZhcmludDMyKCZpbnB1dCwgJnRhZykpIHsKKyAgICBzd2l0
Y2ggKHRhZykgeworICAgICAgY2FzZSBrQ29tcGFyYXRvcjoKKyAgICAgICAgaWYgKEdldExlbmd0
aFByZWZpeGVkU2xpY2UoJmlucHV0LCAmc3RyKSkgeworICAgICAgICAgIGNvbXBhcmF0b3JfID0g
c3RyLlRvU3RyaW5nKCk7CisgICAgICAgICAgaGFzX2NvbXBhcmF0b3JfID0gdHJ1ZTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICBtc2cgPSAiY29tcGFyYXRvciBuYW1lIjsKKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBrTG9nTnVtYmVyOgorICAgICAgICBpZiAo
R2V0VmFyaW50NjQoJmlucHV0LCAmbG9nX251bWJlcl8pKSB7CisgICAgICAgICAgaGFzX2xvZ19u
dW1iZXJfID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBtc2cgPSAibG9nIG51
bWJlciI7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2Uga1ByZXZMb2dO
dW1iZXI6CisgICAgICAgIGlmIChHZXRWYXJpbnQ2NCgmaW5wdXQsICZwcmV2X2xvZ19udW1iZXJf
KSkgeworICAgICAgICAgIGhhc19wcmV2X2xvZ19udW1iZXJfID0gdHJ1ZTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICBtc2cgPSAicHJldmlvdXMgbG9nIG51bWJlciI7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2Uga05leHRGaWxlTnVtYmVyOgorICAgICAgICBp
ZiAoR2V0VmFyaW50NjQoJmlucHV0LCAmbmV4dF9maWxlX251bWJlcl8pKSB7CisgICAgICAgICAg
aGFzX25leHRfZmlsZV9udW1iZXJfID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICBtc2cgPSAibmV4dCBmaWxlIG51bWJlciI7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisK
KyAgICAgIGNhc2Uga0xhc3RTZXF1ZW5jZToKKyAgICAgICAgaWYgKEdldFZhcmludDY0KCZpbnB1
dCwgJmxhc3Rfc2VxdWVuY2VfKSkgeworICAgICAgICAgIGhhc19sYXN0X3NlcXVlbmNlXyA9IHRy
dWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgbXNnID0gImxhc3Qgc2VxdWVuY2UgbnVt
YmVyIjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBrQ29tcGFjdFBv
aW50ZXI6CisgICAgICAgIGlmIChHZXRMZXZlbCgmaW5wdXQsICZsZXZlbCkgJiYKKyAgICAgICAg
ICAgIEdldEludGVybmFsS2V5KCZpbnB1dCwgJmtleSkpIHsKKyAgICAgICAgICBjb21wYWN0X3Bv
aW50ZXJzXy5wdXNoX2JhY2soc3RkOjptYWtlX3BhaXIobGV2ZWwsIGtleSkpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgIG1zZyA9ICJjb21wYWN0aW9uIHBvaW50ZXIiOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIGtEZWxldGVkRmlsZToKKyAgICAgICAgaWYg
KEdldExldmVsKCZpbnB1dCwgJmxldmVsKSAmJgorICAgICAgICAgICAgR2V0VmFyaW50NjQoJmlu
cHV0LCAmbnVtYmVyKSkgeworICAgICAgICAgIGRlbGV0ZWRfZmlsZXNfLmluc2VydChzdGQ6Om1h
a2VfcGFpcihsZXZlbCwgbnVtYmVyKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgbXNn
ID0gImRlbGV0ZWQgZmlsZSI7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNh
c2Uga05ld0ZpbGU6CisgICAgICAgIGlmIChHZXRMZXZlbCgmaW5wdXQsICZsZXZlbCkgJiYKKyAg
ICAgICAgICAgIEdldFZhcmludDY0KCZpbnB1dCwgJmYubnVtYmVyKSAmJgorICAgICAgICAgICAg
R2V0VmFyaW50NjQoJmlucHV0LCAmZi5maWxlX3NpemUpICYmCisgICAgICAgICAgICBHZXRJbnRl
cm5hbEtleSgmaW5wdXQsICZmLnNtYWxsZXN0KSAmJgorICAgICAgICAgICAgR2V0SW50ZXJuYWxL
ZXkoJmlucHV0LCAmZi5sYXJnZXN0KSkgeworICAgICAgICAgIG5ld19maWxlc18ucHVzaF9iYWNr
KHN0ZDo6bWFrZV9wYWlyKGxldmVsLCBmKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
bXNnID0gIm5ldy1maWxlIGVudHJ5IjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgbXNnID0gInVua25vd24gdGFnIjsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICB9CisKKyAgaWYgKG1zZyA9PSBOVUxMICYmICFpbnB1dC5lbXB0eSgpKSB7Cisg
ICAgbXNnID0gImludmFsaWQgdGFnIjsKKyAgfQorCisgIFN0YXR1cyByZXN1bHQ7CisgIGlmICht
c2cgIT0gTlVMTCkgeworICAgIHJlc3VsdCA9IFN0YXR1czo6Q29ycnVwdGlvbigiVmVyc2lvbkVk
aXQiLCBtc2cpOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0ZDo6c3RyaW5nIFZlcnNp
b25FZGl0OjpEZWJ1Z1N0cmluZygpIGNvbnN0IHsKKyAgc3RkOjpzdHJpbmcgcjsKKyAgci5hcHBl
bmQoIlZlcnNpb25FZGl0IHsiKTsKKyAgaWYgKGhhc19jb21wYXJhdG9yXykgeworICAgIHIuYXBw
ZW5kKCJcbiAgQ29tcGFyYXRvcjogIik7CisgICAgci5hcHBlbmQoY29tcGFyYXRvcl8pOworICB9
CisgIGlmIChoYXNfbG9nX251bWJlcl8pIHsKKyAgICByLmFwcGVuZCgiXG4gIExvZ051bWJlcjog
Iik7CisgICAgQXBwZW5kTnVtYmVyVG8oJnIsIGxvZ19udW1iZXJfKTsKKyAgfQorICBpZiAoaGFz
X3ByZXZfbG9nX251bWJlcl8pIHsKKyAgICByLmFwcGVuZCgiXG4gIFByZXZMb2dOdW1iZXI6ICIp
OworICAgIEFwcGVuZE51bWJlclRvKCZyLCBwcmV2X2xvZ19udW1iZXJfKTsKKyAgfQorICBpZiAo
aGFzX25leHRfZmlsZV9udW1iZXJfKSB7CisgICAgci5hcHBlbmQoIlxuICBOZXh0RmlsZTogIik7
CisgICAgQXBwZW5kTnVtYmVyVG8oJnIsIG5leHRfZmlsZV9udW1iZXJfKTsKKyAgfQorICBpZiAo
aGFzX2xhc3Rfc2VxdWVuY2VfKSB7CisgICAgci5hcHBlbmQoIlxuICBMYXN0U2VxOiAiKTsKKyAg
ICBBcHBlbmROdW1iZXJUbygmciwgbGFzdF9zZXF1ZW5jZV8pOworICB9CisgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgY29tcGFjdF9wb2ludGVyc18uc2l6ZSgpOyBpKyspIHsKKyAgICByLmFwcGVu
ZCgiXG4gIENvbXBhY3RQb2ludGVyOiAiKTsKKyAgICBBcHBlbmROdW1iZXJUbygmciwgY29tcGFj
dF9wb2ludGVyc19baV0uZmlyc3QpOworICAgIHIuYXBwZW5kKCIgIik7CisgICAgci5hcHBlbmQo
Y29tcGFjdF9wb2ludGVyc19baV0uc2Vjb25kLkRlYnVnU3RyaW5nKCkpOworICB9CisgIGZvciAo
RGVsZXRlZEZpbGVTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBkZWxldGVkX2ZpbGVzXy5iZWdp
bigpOworICAgICAgIGl0ZXIgIT0gZGVsZXRlZF9maWxlc18uZW5kKCk7CisgICAgICAgKytpdGVy
KSB7CisgICAgci5hcHBlbmQoIlxuICBEZWxldGVGaWxlOiAiKTsKKyAgICBBcHBlbmROdW1iZXJU
bygmciwgaXRlci0+Zmlyc3QpOworICAgIHIuYXBwZW5kKCIgIik7CisgICAgQXBwZW5kTnVtYmVy
VG8oJnIsIGl0ZXItPnNlY29uZCk7CisgIH0KKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuZXdf
ZmlsZXNfLnNpemUoKTsgaSsrKSB7CisgICAgY29uc3QgRmlsZU1ldGFEYXRhJiBmID0gbmV3X2Zp
bGVzX1tpXS5zZWNvbmQ7CisgICAgci5hcHBlbmQoIlxuICBBZGRGaWxlOiAiKTsKKyAgICBBcHBl
bmROdW1iZXJUbygmciwgbmV3X2ZpbGVzX1tpXS5maXJzdCk7CisgICAgci5hcHBlbmQoIiAiKTsK
KyAgICBBcHBlbmROdW1iZXJUbygmciwgZi5udW1iZXIpOworICAgIHIuYXBwZW5kKCIgIik7Cisg
ICAgQXBwZW5kTnVtYmVyVG8oJnIsIGYuZmlsZV9zaXplKTsKKyAgICByLmFwcGVuZCgiICIpOwor
ICAgIHIuYXBwZW5kKGYuc21hbGxlc3QuRGVidWdTdHJpbmcoKSk7CisgICAgci5hcHBlbmQoIiAu
LiAiKTsKKyAgICByLmFwcGVuZChmLmxhcmdlc3QuRGVidWdTdHJpbmcoKSk7CisgIH0KKyAgci5h
cHBlbmQoIlxufVxuIik7CisgIHJldHVybiByOworfQorCit9ICAvLyBuYW1lc3BhY2UgbGV2ZWxk
YgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi92ZXJzaW9uX2VkaXQu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvdmVyc2lvbl9lZGl0LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZWFlZjc3YjMyN2M2NGEzNzU2YTVmMjUxMmJjMTc4NjUzMDkwN2NiZAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvdmVyc2lvbl9lZGl0LmgKQEAgLTAs
MCArMSwxMDcgQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9y
cy4KKworI2lmbmRlZiBTVE9SQUdFX0xFVkVMREJfREJfVkVSU0lPTl9FRElUX0hfCisjZGVmaW5l
IFNUT1JBR0VfTEVWRUxEQl9EQl9WRVJTSU9OX0VESVRfSF8KKworI2luY2x1ZGUgPHNldD4KKyNp
bmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlICJkYi9kYmZvcm1h
dC5oIgorCituYW1lc3BhY2UgbGV2ZWxkYiB7CisKK2NsYXNzIFZlcnNpb25TZXQ7CisKK3N0cnVj
dCBGaWxlTWV0YURhdGEgeworICBpbnQgcmVmczsKKyAgaW50IGFsbG93ZWRfc2Vla3M7ICAgICAg
ICAgIC8vIFNlZWtzIGFsbG93ZWQgdW50aWwgY29tcGFjdGlvbgorICB1aW50NjRfdCBudW1iZXI7
CisgIHVpbnQ2NF90IGZpbGVfc2l6ZTsgICAgICAgICAvLyBGaWxlIHNpemUgaW4gYnl0ZXMKKyAg
SW50ZXJuYWxLZXkgc21hbGxlc3Q7ICAgICAgIC8vIFNtYWxsZXN0IGludGVybmFsIGtleSBzZXJ2
ZWQgYnkgdGFibGUKKyAgSW50ZXJuYWxLZXkgbGFyZ2VzdDsgICAgICAgIC8vIExhcmdlc3QgaW50
ZXJuYWwga2V5IHNlcnZlZCBieSB0YWJsZQorCisgIEZpbGVNZXRhRGF0YSgpIDogcmVmcygwKSwg
YWxsb3dlZF9zZWVrcygxIDw8IDMwKSwgZmlsZV9zaXplKDApIHsgfQorfTsKKworY2xhc3MgVmVy
c2lvbkVkaXQgeworIHB1YmxpYzoKKyAgVmVyc2lvbkVkaXQoKSB7IENsZWFyKCk7IH0KKyAgflZl
cnNpb25FZGl0KCkgeyB9CisKKyAgdm9pZCBDbGVhcigpOworCisgIHZvaWQgU2V0Q29tcGFyYXRv
ck5hbWUoY29uc3QgU2xpY2UmIG5hbWUpIHsKKyAgICBoYXNfY29tcGFyYXRvcl8gPSB0cnVlOwor
ICAgIGNvbXBhcmF0b3JfID0gbmFtZS5Ub1N0cmluZygpOworICB9CisgIHZvaWQgU2V0TG9nTnVt
YmVyKHVpbnQ2NF90IG51bSkgeworICAgIGhhc19sb2dfbnVtYmVyXyA9IHRydWU7CisgICAgbG9n
X251bWJlcl8gPSBudW07CisgIH0KKyAgdm9pZCBTZXRQcmV2TG9nTnVtYmVyKHVpbnQ2NF90IG51
bSkgeworICAgIGhhc19wcmV2X2xvZ19udW1iZXJfID0gdHJ1ZTsKKyAgICBwcmV2X2xvZ19udW1i
ZXJfID0gbnVtOworICB9CisgIHZvaWQgU2V0TmV4dEZpbGUodWludDY0X3QgbnVtKSB7CisgICAg
aGFzX25leHRfZmlsZV9udW1iZXJfID0gdHJ1ZTsKKyAgICBuZXh0X2ZpbGVfbnVtYmVyXyA9IG51
bTsKKyAgfQorICB2b2lkIFNldExhc3RTZXF1ZW5jZShTZXF1ZW5jZU51bWJlciBzZXEpIHsKKyAg
ICBoYXNfbGFzdF9zZXF1ZW5jZV8gPSB0cnVlOworICAgIGxhc3Rfc2VxdWVuY2VfID0gc2VxOwor
ICB9CisgIHZvaWQgU2V0Q29tcGFjdFBvaW50ZXIoaW50IGxldmVsLCBjb25zdCBJbnRlcm5hbEtl
eSYga2V5KSB7CisgICAgY29tcGFjdF9wb2ludGVyc18ucHVzaF9iYWNrKHN0ZDo6bWFrZV9wYWly
KGxldmVsLCBrZXkpKTsKKyAgfQorCisgIC8vIEFkZCB0aGUgc3BlY2lmaWVkIGZpbGUgYXQgdGhl
IHNwZWNpZmllZCBudW1iZXIuCisgIC8vIFJFUVVJUkVTOiBUaGlzIHZlcnNpb24gaGFzIG5vdCBi
ZWVuIHNhdmVkIChzZWUgVmVyc2lvblNldDo6U2F2ZVRvKQorICAvLyBSRVFVSVJFUzogInNtYWxs
ZXN0IiBhbmQgImxhcmdlc3QiIGFyZSBzbWFsbGVzdCBhbmQgbGFyZ2VzdCBrZXlzIGluIGZpbGUK
KyAgdm9pZCBBZGRGaWxlKGludCBsZXZlbCwgdWludDY0X3QgZmlsZSwKKyAgICAgICAgICAgICAg
IHVpbnQ2NF90IGZpbGVfc2l6ZSwKKyAgICAgICAgICAgICAgIGNvbnN0IEludGVybmFsS2V5JiBz
bWFsbGVzdCwKKyAgICAgICAgICAgICAgIGNvbnN0IEludGVybmFsS2V5JiBsYXJnZXN0KSB7Cisg
ICAgRmlsZU1ldGFEYXRhIGY7CisgICAgZi5udW1iZXIgPSBmaWxlOworICAgIGYuZmlsZV9zaXpl
ID0gZmlsZV9zaXplOworICAgIGYuc21hbGxlc3QgPSBzbWFsbGVzdDsKKyAgICBmLmxhcmdlc3Qg
PSBsYXJnZXN0OworICAgIG5ld19maWxlc18ucHVzaF9iYWNrKHN0ZDo6bWFrZV9wYWlyKGxldmVs
LCBmKSk7CisgIH0KKworICAvLyBEZWxldGUgdGhlIHNwZWNpZmllZCAiZmlsZSIgZnJvbSB0aGUg
c3BlY2lmaWVkICJsZXZlbCIuCisgIHZvaWQgRGVsZXRlRmlsZShpbnQgbGV2ZWwsIHVpbnQ2NF90
IGZpbGUpIHsKKyAgICBkZWxldGVkX2ZpbGVzXy5pbnNlcnQoc3RkOjptYWtlX3BhaXIobGV2ZWws
IGZpbGUpKTsKKyAgfQorCisgIHZvaWQgRW5jb2RlVG8oc3RkOjpzdHJpbmcqIGRzdCkgY29uc3Q7
CisgIFN0YXR1cyBEZWNvZGVGcm9tKGNvbnN0IFNsaWNlJiBzcmMpOworCisgIHN0ZDo6c3RyaW5n
IERlYnVnU3RyaW5nKCkgY29uc3Q7CisKKyBwcml2YXRlOgorICBmcmllbmQgY2xhc3MgVmVyc2lv
blNldDsKKworICB0eXBlZGVmIHN0ZDo6c2V0PCBzdGQ6OnBhaXI8aW50LCB1aW50NjRfdD4gPiBE
ZWxldGVkRmlsZVNldDsKKworICBzdGQ6OnN0cmluZyBjb21wYXJhdG9yXzsKKyAgdWludDY0X3Qg
bG9nX251bWJlcl87CisgIHVpbnQ2NF90IHByZXZfbG9nX251bWJlcl87CisgIHVpbnQ2NF90IG5l
eHRfZmlsZV9udW1iZXJfOworICBTZXF1ZW5jZU51bWJlciBsYXN0X3NlcXVlbmNlXzsKKyAgYm9v
bCBoYXNfY29tcGFyYXRvcl87CisgIGJvb2wgaGFzX2xvZ19udW1iZXJfOworICBib29sIGhhc19w
cmV2X2xvZ19udW1iZXJfOworICBib29sIGhhc19uZXh0X2ZpbGVfbnVtYmVyXzsKKyAgYm9vbCBo
YXNfbGFzdF9zZXF1ZW5jZV87CisKKyAgc3RkOjp2ZWN0b3I8IHN0ZDo6cGFpcjxpbnQsIEludGVy
bmFsS2V5PiA+IGNvbXBhY3RfcG9pbnRlcnNfOworICBEZWxldGVkRmlsZVNldCBkZWxldGVkX2Zp
bGVzXzsKKyAgc3RkOjp2ZWN0b3I8IHN0ZDo6cGFpcjxpbnQsIEZpbGVNZXRhRGF0YT4gPiBuZXdf
ZmlsZXNfOworfTsKKworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKKworI2VuZGlmICAvLyBTVE9S
QUdFX0xFVkVMREJfREJfVkVSU0lPTl9FRElUX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9sZXZlbGRiL2RiL3ZlcnNpb25fZWRpdF90ZXN0LmNjIGIvU291cmNlL1RoaXJkUGFydHkv
bGV2ZWxkYi9kYi92ZXJzaW9uX2VkaXRfdGVzdC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yODAzMTBiNDlkODQ2
ZTI0NWRmMGQwMDBjYTE0MDc3MjQ1ODJkYWEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvbGV2ZWxkYi9kYi92ZXJzaW9uX2VkaXRfdGVzdC5jYwpAQCAtMCwwICsxLDQ2IEBA
CisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
IFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCisKKyNpbmNs
dWRlICJkYi92ZXJzaW9uX2VkaXQuaCIKKyNpbmNsdWRlICJ1dGlsL3Rlc3RoYXJuZXNzLmgiCisK
K25hbWVzcGFjZSBsZXZlbGRiIHsKKworc3RhdGljIHZvaWQgVGVzdEVuY29kZURlY29kZShjb25z
dCBWZXJzaW9uRWRpdCYgZWRpdCkgeworICBzdGQ6OnN0cmluZyBlbmNvZGVkLCBlbmNvZGVkMjsK
KyAgZWRpdC5FbmNvZGVUbygmZW5jb2RlZCk7CisgIFZlcnNpb25FZGl0IHBhcnNlZDsKKyAgU3Rh
dHVzIHMgPSBwYXJzZWQuRGVjb2RlRnJvbShlbmNvZGVkKTsKKyAgQVNTRVJUX1RSVUUocy5vaygp
KSA8PCBzLlRvU3RyaW5nKCk7CisgIHBhcnNlZC5FbmNvZGVUbygmZW5jb2RlZDIpOworICBBU1NF
UlRfRVEoZW5jb2RlZCwgZW5jb2RlZDIpOworfQorCitjbGFzcyBWZXJzaW9uRWRpdFRlc3QgeyB9
OworCitURVNUKFZlcnNpb25FZGl0VGVzdCwgRW5jb2RlRGVjb2RlKSB7CisgIHN0YXRpYyBjb25z
dCB1aW50NjRfdCBrQmlnID0gMXVsbCA8PCA1MDsKKworICBWZXJzaW9uRWRpdCBlZGl0OworICBm
b3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgeworICAgIFRlc3RFbmNvZGVEZWNvZGUoZWRpdCk7
CisgICAgZWRpdC5BZGRGaWxlKDMsIGtCaWcgKyAzMDAgKyBpLCBrQmlnICsgNDAwICsgaSwKKyAg
ICAgICAgICAgICAgICAgSW50ZXJuYWxLZXkoImZvbyIsIGtCaWcgKyA1MDAgKyBpLCBrVHlwZVZh
bHVlKSwKKyAgICAgICAgICAgICAgICAgSW50ZXJuYWxLZXkoInpvbyIsIGtCaWcgKyA2MDAgKyBp
LCBrVHlwZURlbGV0aW9uKSk7CisgICAgZWRpdC5EZWxldGVGaWxlKDQsIGtCaWcgKyA3MDAgKyBp
KTsKKyAgICBlZGl0LlNldENvbXBhY3RQb2ludGVyKGksIEludGVybmFsS2V5KCJ4Iiwga0JpZyAr
IDkwMCArIGksIGtUeXBlVmFsdWUpKTsKKyAgfQorCisgIGVkaXQuU2V0Q29tcGFyYXRvck5hbWUo
ImZvbyIpOworICBlZGl0LlNldExvZ051bWJlcihrQmlnICsgMTAwKTsKKyAgZWRpdC5TZXROZXh0
RmlsZShrQmlnICsgMjAwKTsKKyAgZWRpdC5TZXRMYXN0U2VxdWVuY2Uoa0JpZyArIDEwMDApOwor
ICBUZXN0RW5jb2RlRGVjb2RlKGVkaXQpOworfQorCit9ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgor
CitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpIHsKKyAgcmV0dXJuIGxldmVsZGI6OnRl
c3Q6OlJ1bkFsbFRlc3RzKCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZl
bGRiL2RiL3ZlcnNpb25fc2V0LmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi92ZXJz
aW9uX3NldC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZDBhNWRlMmI5ZjNlMDU1OTQxN2E3MzIwNGU2NjY4YmJl
ZDE3OTNiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi92
ZXJzaW9uX3NldC5jYwpAQCAtMCwwICsxLDE0MzggQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBU
aGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9y
IG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2luY2x1ZGUgImRiL3ZlcnNpb25fc2V0LmgiCisK
KyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJkYi9m
aWxlbmFtZS5oIgorI2luY2x1ZGUgImRiL2xvZ19yZWFkZXIuaCIKKyNpbmNsdWRlICJkYi9sb2df
d3JpdGVyLmgiCisjaW5jbHVkZSAiZGIvbWVtdGFibGUuaCIKKyNpbmNsdWRlICJkYi90YWJsZV9j
YWNoZS5oIgorI2luY2x1ZGUgImxldmVsZGIvZW52LmgiCisjaW5jbHVkZSAibGV2ZWxkYi90YWJs
ZV9idWlsZGVyLmgiCisjaW5jbHVkZSAidGFibGUvbWVyZ2VyLmgiCisjaW5jbHVkZSAidGFibGUv
dHdvX2xldmVsX2l0ZXJhdG9yLmgiCisjaW5jbHVkZSAidXRpbC9jb2RpbmcuaCIKKyNpbmNsdWRl
ICJ1dGlsL2xvZ2dpbmcuaCIKKworbmFtZXNwYWNlIGxldmVsZGIgeworCitzdGF0aWMgY29uc3Qg
aW50IGtUYXJnZXRGaWxlU2l6ZSA9IDIgKiAxMDQ4NTc2OworCisvLyBNYXhpbXVtIGJ5dGVzIG9m
IG92ZXJsYXBzIGluIGdyYW5kcGFyZW50IChpLmUuLCBsZXZlbCsyKSBiZWZvcmUgd2UKKy8vIHN0
b3AgYnVpbGRpbmcgYSBzaW5nbGUgZmlsZSBpbiBhIGxldmVsLT5sZXZlbCsxIGNvbXBhY3Rpb24u
CitzdGF0aWMgY29uc3QgaW50NjRfdCBrTWF4R3JhbmRQYXJlbnRPdmVybGFwQnl0ZXMgPSAxMCAq
IGtUYXJnZXRGaWxlU2l6ZTsKKworLy8gTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgaW4gYWxsIGNv
bXBhY3RlZCBmaWxlcy4gIFdlIGF2b2lkIGV4cGFuZGluZworLy8gdGhlIGxvd2VyIGxldmVsIGZp
bGUgc2V0IG9mIGEgY29tcGFjdGlvbiBpZiBpdCB3b3VsZCBtYWtlIHRoZQorLy8gdG90YWwgY29t
cGFjdGlvbiBjb3ZlciBtb3JlIHRoYW4gdGhpcyBtYW55IGJ5dGVzLgorc3RhdGljIGNvbnN0IGlu
dDY0X3Qga0V4cGFuZGVkQ29tcGFjdGlvbkJ5dGVTaXplTGltaXQgPSAyNSAqIGtUYXJnZXRGaWxl
U2l6ZTsKKworc3RhdGljIGRvdWJsZSBNYXhCeXRlc0ZvckxldmVsKGludCBsZXZlbCkgeworICAv
LyBOb3RlOiB0aGUgcmVzdWx0IGZvciBsZXZlbCB6ZXJvIGlzIG5vdCByZWFsbHkgdXNlZCBzaW5j
ZSB3ZSBzZXQKKyAgLy8gdGhlIGxldmVsLTAgY29tcGFjdGlvbiB0aHJlc2hvbGQgYmFzZWQgb24g
bnVtYmVyIG9mIGZpbGVzLgorICBkb3VibGUgcmVzdWx0ID0gMTAgKiAxMDQ4NTc2LjA7ICAvLyBS
ZXN1bHQgZm9yIGJvdGggbGV2ZWwtMCBhbmQgbGV2ZWwtMQorICB3aGlsZSAobGV2ZWwgPiAxKSB7
CisgICAgcmVzdWx0ICo9IDEwOworICAgIGxldmVsLS07CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsK
K30KKworc3RhdGljIHVpbnQ2NF90IE1heEZpbGVTaXplRm9yTGV2ZWwoaW50IGxldmVsKSB7Cisg
IHJldHVybiBrVGFyZ2V0RmlsZVNpemU7ICAvLyBXZSBjb3VsZCB2YXJ5IHBlciBsZXZlbCB0byBy
ZWR1Y2UgbnVtYmVyIG9mIGZpbGVzPworfQorCitzdGF0aWMgaW50NjRfdCBUb3RhbEZpbGVTaXpl
KGNvbnN0IHN0ZDo6dmVjdG9yPEZpbGVNZXRhRGF0YSo+JiBmaWxlcykgeworICBpbnQ2NF90IHN1
bSA9IDA7CisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsZXMuc2l6ZSgpOyBpKyspIHsKKyAg
ICBzdW0gKz0gZmlsZXNbaV0tPmZpbGVfc2l6ZTsKKyAgfQorICByZXR1cm4gc3VtOworfQorCitu
YW1lc3BhY2Ugeworc3RkOjpzdHJpbmcgSW50U2V0VG9TdHJpbmcoY29uc3Qgc3RkOjpzZXQ8dWlu
dDY0X3Q+JiBzKSB7CisgIHN0ZDo6c3RyaW5nIHJlc3VsdCA9ICJ7IjsKKyAgZm9yIChzdGQ6OnNl
dDx1aW50NjRfdD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcy5iZWdpbigpOworICAgICAgIGl0ICE9
IHMuZW5kKCk7CisgICAgICAgKytpdCkgeworICAgIHJlc3VsdCArPSAocmVzdWx0LnNpemUoKSA+
IDEpID8gIiwiIDogIiI7CisgICAgcmVzdWx0ICs9IE51bWJlclRvU3RyaW5nKCppdCk7CisgIH0K
KyAgcmVzdWx0ICs9ICJ9IjsKKyAgcmV0dXJuIHJlc3VsdDsKK30KK30gIC8vIG5hbWVzcGFjZQor
CitWZXJzaW9uOjp+VmVyc2lvbigpIHsKKyAgYXNzZXJ0KHJlZnNfID09IDApOworCisgIC8vIFJl
bW92ZSBmcm9tIGxpbmtlZCBsaXN0CisgIHByZXZfLT5uZXh0XyA9IG5leHRfOworICBuZXh0Xy0+
cHJldl8gPSBwcmV2XzsKKworICAvLyBEcm9wIHJlZmVyZW5jZXMgdG8gZmlsZXMKKyAgZm9yIChp
bnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGNvbmZpZzo6a051bUxldmVsczsgbGV2ZWwrKykgeworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsZXNfW2xldmVsXS5zaXplKCk7IGkrKykgeworICAg
ICAgRmlsZU1ldGFEYXRhKiBmID0gZmlsZXNfW2xldmVsXVtpXTsKKyAgICAgIGFzc2VydChmLT5y
ZWZzID4gMCk7CisgICAgICBmLT5yZWZzLS07CisgICAgICBpZiAoZi0+cmVmcyA8PSAwKSB7Cisg
ICAgICAgIGRlbGV0ZSBmOworICAgICAgfQorICAgIH0KKyAgfQorfQorCitpbnQgRmluZEZpbGUo
Y29uc3QgSW50ZXJuYWxLZXlDb21wYXJhdG9yJiBpY21wLAorICAgICAgICAgICAgIGNvbnN0IHN0
ZDo6dmVjdG9yPEZpbGVNZXRhRGF0YSo+JiBmaWxlcywKKyAgICAgICAgICAgICBjb25zdCBTbGlj
ZSYga2V5KSB7CisgIHVpbnQzMl90IGxlZnQgPSAwOworICB1aW50MzJfdCByaWdodCA9IGZpbGVz
LnNpemUoKTsKKyAgd2hpbGUgKGxlZnQgPCByaWdodCkgeworICAgIHVpbnQzMl90IG1pZCA9IChs
ZWZ0ICsgcmlnaHQpIC8gMjsKKyAgICBjb25zdCBGaWxlTWV0YURhdGEqIGYgPSBmaWxlc1ttaWRd
OworICAgIGlmIChpY21wLkludGVybmFsS2V5Q29tcGFyYXRvcjo6Q29tcGFyZShmLT5sYXJnZXN0
LkVuY29kZSgpLCBrZXkpIDwgMCkgeworICAgICAgLy8gS2V5IGF0ICJtaWQubGFyZ2VzdCIgaXMg
PCAidGFyZ2V0Ii4gIFRoZXJlZm9yZSBhbGwKKyAgICAgIC8vIGZpbGVzIGF0IG9yIGJlZm9yZSAi
bWlkIiBhcmUgdW5pbnRlcmVzdGluZy4KKyAgICAgIGxlZnQgPSBtaWQgKyAxOworICAgIH0gZWxz
ZSB7CisgICAgICAvLyBLZXkgYXQgIm1pZC5sYXJnZXN0IiBpcyA+PSAidGFyZ2V0Ii4gIFRoZXJl
Zm9yZSBhbGwgZmlsZXMKKyAgICAgIC8vIGFmdGVyICJtaWQiIGFyZSB1bmludGVyZXN0aW5nLgor
ICAgICAgcmlnaHQgPSBtaWQ7CisgICAgfQorICB9CisgIHJldHVybiByaWdodDsKK30KKworc3Rh
dGljIGJvb2wgQWZ0ZXJGaWxlKGNvbnN0IENvbXBhcmF0b3IqIHVjbXAsCisgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgU2xpY2UqIHVzZXJfa2V5LCBjb25zdCBGaWxlTWV0YURhdGEqIGYpIHsK
KyAgLy8gTlVMTCB1c2VyX2tleSBvY2N1cnMgYmVmb3JlIGFsbCBrZXlzIGFuZCBpcyB0aGVyZWZv
cmUgbmV2ZXIgYWZ0ZXIgKmYKKyAgcmV0dXJuICh1c2VyX2tleSAhPSBOVUxMICYmCisgICAgICAg
ICAgdWNtcC0+Q29tcGFyZSgqdXNlcl9rZXksIGYtPmxhcmdlc3QudXNlcl9rZXkoKSkgPiAwKTsK
K30KKworc3RhdGljIGJvb2wgQmVmb3JlRmlsZShjb25zdCBDb21wYXJhdG9yKiB1Y21wLAorICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBTbGljZSogdXNlcl9rZXksIGNvbnN0IEZpbGVNZXRh
RGF0YSogZikgeworICAvLyBOVUxMIHVzZXJfa2V5IG9jY3VycyBhZnRlciBhbGwga2V5cyBhbmQg
aXMgdGhlcmVmb3JlIG5ldmVyIGJlZm9yZSAqZgorICByZXR1cm4gKHVzZXJfa2V5ICE9IE5VTEwg
JiYKKyAgICAgICAgICB1Y21wLT5Db21wYXJlKCp1c2VyX2tleSwgZi0+c21hbGxlc3QudXNlcl9r
ZXkoKSkgPCAwKTsKK30KKworYm9vbCBTb21lRmlsZU92ZXJsYXBzUmFuZ2UoCisgICAgY29uc3Qg
SW50ZXJuYWxLZXlDb21wYXJhdG9yJiBpY21wLAorICAgIGJvb2wgZGlzam9pbnRfc29ydGVkX2Zp
bGVzLAorICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEZpbGVNZXRhRGF0YSo+JiBmaWxlcywKKyAgICBj
b25zdCBTbGljZSogc21hbGxlc3RfdXNlcl9rZXksCisgICAgY29uc3QgU2xpY2UqIGxhcmdlc3Rf
dXNlcl9rZXkpIHsKKyAgY29uc3QgQ29tcGFyYXRvciogdWNtcCA9IGljbXAudXNlcl9jb21wYXJh
dG9yKCk7CisgIGlmICghZGlzam9pbnRfc29ydGVkX2ZpbGVzKSB7CisgICAgLy8gTmVlZCB0byBj
aGVjayBhZ2FpbnN0IGFsbCBmaWxlcworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsZXMu
c2l6ZSgpOyBpKyspIHsKKyAgICAgIGNvbnN0IEZpbGVNZXRhRGF0YSogZiA9IGZpbGVzW2ldOwor
ICAgICAgaWYgKEFmdGVyRmlsZSh1Y21wLCBzbWFsbGVzdF91c2VyX2tleSwgZikgfHwKKyAgICAg
ICAgICBCZWZvcmVGaWxlKHVjbXAsIGxhcmdlc3RfdXNlcl9rZXksIGYpKSB7CisgICAgICAgIC8v
IE5vIG92ZXJsYXAKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiB0cnVlOyAgLy8gT3Zl
cmxhcAorICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICAvLyBCaW5h
cnkgc2VhcmNoIG92ZXIgZmlsZSBsaXN0CisgIHVpbnQzMl90IGluZGV4ID0gMDsKKyAgaWYgKHNt
YWxsZXN0X3VzZXJfa2V5ICE9IE5VTEwpIHsKKyAgICAvLyBGaW5kIHRoZSBlYXJsaWVzdCBwb3Nz
aWJsZSBpbnRlcm5hbCBrZXkgZm9yIHNtYWxsZXN0X3VzZXJfa2V5CisgICAgSW50ZXJuYWxLZXkg
c21hbGwoKnNtYWxsZXN0X3VzZXJfa2V5LCBrTWF4U2VxdWVuY2VOdW1iZXIsa1ZhbHVlVHlwZUZv
clNlZWspOworICAgIGluZGV4ID0gRmluZEZpbGUoaWNtcCwgZmlsZXMsIHNtYWxsLkVuY29kZSgp
KTsKKyAgfQorCisgIGlmIChpbmRleCA+PSBmaWxlcy5zaXplKCkpIHsKKyAgICAvLyBiZWdpbm5p
bmcgb2YgcmFuZ2UgaXMgYWZ0ZXIgYWxsIGZpbGVzLCBzbyBubyBvdmVybGFwLgorICAgIHJldHVy
biBmYWxzZTsKKyAgfQorCisgIHJldHVybiAhQmVmb3JlRmlsZSh1Y21wLCBsYXJnZXN0X3VzZXJf
a2V5LCBmaWxlc1tpbmRleF0pOworfQorCisvLyBBbiBpbnRlcm5hbCBpdGVyYXRvci4gIEZvciBh
IGdpdmVuIHZlcnNpb24vbGV2ZWwgcGFpciwgeWllbGRzCisvLyBpbmZvcm1hdGlvbiBhYm91dCB0
aGUgZmlsZXMgaW4gdGhlIGxldmVsLiAgRm9yIGEgZ2l2ZW4gZW50cnksIGtleSgpCisvLyBpcyB0
aGUgbGFyZ2VzdCBrZXkgdGhhdCBvY2N1cnMgaW4gdGhlIGZpbGUsIGFuZCB2YWx1ZSgpIGlzIGFu
CisvLyAxNi1ieXRlIHZhbHVlIGNvbnRhaW5pbmcgdGhlIGZpbGUgbnVtYmVyIGFuZCBmaWxlIHNp
emUsIGJvdGgKKy8vIGVuY29kZWQgdXNpbmcgRW5jb2RlRml4ZWQ2NC4KK2NsYXNzIFZlcnNpb246
OkxldmVsRmlsZU51bUl0ZXJhdG9yIDogcHVibGljIEl0ZXJhdG9yIHsKKyBwdWJsaWM6CisgIExl
dmVsRmlsZU51bUl0ZXJhdG9yKGNvbnN0IEludGVybmFsS2V5Q29tcGFyYXRvciYgaWNtcCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8RmlsZU1ldGFEYXRhKj4qIGZs
aXN0KQorICAgICAgOiBpY21wXyhpY21wKSwKKyAgICAgICAgZmxpc3RfKGZsaXN0KSwKKyAgICAg
ICAgaW5kZXhfKGZsaXN0LT5zaXplKCkpIHsgICAgICAgIC8vIE1hcmtzIGFzIGludmFsaWQKKyAg
fQorICB2aXJ0dWFsIGJvb2wgVmFsaWQoKSBjb25zdCB7CisgICAgcmV0dXJuIGluZGV4XyA8IGZs
aXN0Xy0+c2l6ZSgpOworICB9CisgIHZpcnR1YWwgdm9pZCBTZWVrKGNvbnN0IFNsaWNlJiB0YXJn
ZXQpIHsKKyAgICBpbmRleF8gPSBGaW5kRmlsZShpY21wXywgKmZsaXN0XywgdGFyZ2V0KTsKKyAg
fQorICB2aXJ0dWFsIHZvaWQgU2Vla1RvRmlyc3QoKSB7IGluZGV4XyA9IDA7IH0KKyAgdmlydHVh
bCB2b2lkIFNlZWtUb0xhc3QoKSB7CisgICAgaW5kZXhfID0gZmxpc3RfLT5lbXB0eSgpID8gMCA6
IGZsaXN0Xy0+c2l6ZSgpIC0gMTsKKyAgfQorICB2aXJ0dWFsIHZvaWQgTmV4dCgpIHsKKyAgICBh
c3NlcnQoVmFsaWQoKSk7CisgICAgaW5kZXhfKys7CisgIH0KKyAgdmlydHVhbCB2b2lkIFByZXYo
KSB7CisgICAgYXNzZXJ0KFZhbGlkKCkpOworICAgIGlmIChpbmRleF8gPT0gMCkgeworICAgICAg
aW5kZXhfID0gZmxpc3RfLT5zaXplKCk7ICAvLyBNYXJrcyBhcyBpbnZhbGlkCisgICAgfSBlbHNl
IHsKKyAgICAgIGluZGV4Xy0tOworICAgIH0KKyAgfQorICBTbGljZSBrZXkoKSBjb25zdCB7Cisg
ICAgYXNzZXJ0KFZhbGlkKCkpOworICAgIHJldHVybiAoKmZsaXN0XylbaW5kZXhfXS0+bGFyZ2Vz
dC5FbmNvZGUoKTsKKyAgfQorICBTbGljZSB2YWx1ZSgpIGNvbnN0IHsKKyAgICBhc3NlcnQoVmFs
aWQoKSk7CisgICAgRW5jb2RlRml4ZWQ2NCh2YWx1ZV9idWZfLCAoKmZsaXN0XylbaW5kZXhfXS0+
bnVtYmVyKTsKKyAgICBFbmNvZGVGaXhlZDY0KHZhbHVlX2J1Zl8rOCwgKCpmbGlzdF8pW2luZGV4
X10tPmZpbGVfc2l6ZSk7CisgICAgcmV0dXJuIFNsaWNlKHZhbHVlX2J1Zl8sIHNpemVvZih2YWx1
ZV9idWZfKSk7CisgIH0KKyAgdmlydHVhbCBTdGF0dXMgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4g
U3RhdHVzOjpPSygpOyB9CisgcHJpdmF0ZToKKyAgY29uc3QgSW50ZXJuYWxLZXlDb21wYXJhdG9y
IGljbXBfOworICBjb25zdCBzdGQ6OnZlY3RvcjxGaWxlTWV0YURhdGEqPiogY29uc3QgZmxpc3Rf
OworICB1aW50MzJfdCBpbmRleF87CisKKyAgLy8gQmFja2luZyBzdG9yZSBmb3IgdmFsdWUoKS4g
IEhvbGRzIHRoZSBmaWxlIG51bWJlciBhbmQgc2l6ZS4KKyAgbXV0YWJsZSBjaGFyIHZhbHVlX2J1
Zl9bMTZdOworfTsKKworc3RhdGljIEl0ZXJhdG9yKiBHZXRGaWxlSXRlcmF0b3Iodm9pZCogYXJn
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVhZE9wdGlvbnMmIG9w
dGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTbGljZSYgZmls
ZV92YWx1ZSkgeworICBUYWJsZUNhY2hlKiBjYWNoZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8VGFibGVD
YWNoZSo+KGFyZyk7CisgIGlmIChmaWxlX3ZhbHVlLnNpemUoKSAhPSAxNikgeworICAgIHJldHVy
biBOZXdFcnJvckl0ZXJhdG9yKAorICAgICAgICBTdGF0dXM6OkNvcnJ1cHRpb24oIkZpbGVSZWFk
ZXIgaW52b2tlZCB3aXRoIHVuZXhwZWN0ZWQgdmFsdWUiKSk7CisgIH0gZWxzZSB7CisgICAgcmV0
dXJuIGNhY2hlLT5OZXdJdGVyYXRvcihvcHRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRGVjb2RlRml4ZWQ2NChmaWxlX3ZhbHVlLmRhdGEoKSksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBEZWNvZGVGaXhlZDY0KGZpbGVfdmFsdWUuZGF0YSgpICsgOCkpOworICB9
Cit9CisKK0l0ZXJhdG9yKiBWZXJzaW9uOjpOZXdDb25jYXRlbmF0aW5nSXRlcmF0b3IoY29uc3Qg
UmVhZE9wdGlvbnMmIG9wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBsZXZlbCkgY29uc3QgeworICByZXR1cm4gTmV3VHdvTGV2ZWxJdGVyYXRv
cigKKyAgICAgIG5ldyBMZXZlbEZpbGVOdW1JdGVyYXRvcih2c2V0Xy0+aWNtcF8sICZmaWxlc19b
bGV2ZWxdKSwKKyAgICAgICZHZXRGaWxlSXRlcmF0b3IsIHZzZXRfLT50YWJsZV9jYWNoZV8sIG9w
dGlvbnMpOworfQorCit2b2lkIFZlcnNpb246OkFkZEl0ZXJhdG9ycyhjb25zdCBSZWFkT3B0aW9u
cyYgb3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPEl0ZXJh
dG9yKj4qIGl0ZXJzKSB7CisgIC8vIE1lcmdlIGFsbCBsZXZlbCB6ZXJvIGZpbGVzIHRvZ2V0aGVy
IHNpbmNlIHRoZXkgbWF5IG92ZXJsYXAKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxlc19b
MF0uc2l6ZSgpOyBpKyspIHsKKyAgICBpdGVycy0+cHVzaF9iYWNrKAorICAgICAgICB2c2V0Xy0+
dGFibGVfY2FjaGVfLT5OZXdJdGVyYXRvcigKKyAgICAgICAgICAgIG9wdGlvbnMsIGZpbGVzX1sw
XVtpXS0+bnVtYmVyLCBmaWxlc19bMF1baV0tPmZpbGVfc2l6ZSkpOworICB9CisKKyAgLy8gRm9y
IGxldmVscyA+IDAsIHdlIGNhbiB1c2UgYSBjb25jYXRlbmF0aW5nIGl0ZXJhdG9yIHRoYXQgc2Vx
dWVudGlhbGx5CisgIC8vIHdhbGtzIHRocm91Z2ggdGhlIG5vbi1vdmVybGFwcGluZyBmaWxlcyBp
biB0aGUgbGV2ZWwsIG9wZW5pbmcgdGhlbQorICAvLyBsYXppbHkuCisgIGZvciAoaW50IGxldmVs
ID0gMTsgbGV2ZWwgPCBjb25maWc6OmtOdW1MZXZlbHM7IGxldmVsKyspIHsKKyAgICBpZiAoIWZp
bGVzX1tsZXZlbF0uZW1wdHkoKSkgeworICAgICAgaXRlcnMtPnB1c2hfYmFjayhOZXdDb25jYXRl
bmF0aW5nSXRlcmF0b3Iob3B0aW9ucywgbGV2ZWwpKTsKKyAgICB9CisgIH0KK30KKworLy8gQ2Fs
bGJhY2sgZnJvbSBUYWJsZUNhY2hlOjpHZXQoKQorbmFtZXNwYWNlIHsKK2VudW0gU2F2ZXJTdGF0
ZSB7CisgIGtOb3RGb3VuZCwKKyAga0ZvdW5kLAorICBrRGVsZXRlZCwKKyAga0NvcnJ1cHQsCit9
Oworc3RydWN0IFNhdmVyIHsKKyAgU2F2ZXJTdGF0ZSBzdGF0ZTsKKyAgY29uc3QgQ29tcGFyYXRv
ciogdWNtcDsKKyAgU2xpY2UgdXNlcl9rZXk7CisgIHN0ZDo6c3RyaW5nKiB2YWx1ZTsKK307Cit9
CitzdGF0aWMgdm9pZCBTYXZlVmFsdWUodm9pZCogYXJnLCBjb25zdCBTbGljZSYgaWtleSwgY29u
c3QgU2xpY2UmIHYpIHsKKyAgU2F2ZXIqIHMgPSByZWludGVycHJldF9jYXN0PFNhdmVyKj4oYXJn
KTsKKyAgUGFyc2VkSW50ZXJuYWxLZXkgcGFyc2VkX2tleTsKKyAgaWYgKCFQYXJzZUludGVybmFs
S2V5KGlrZXksICZwYXJzZWRfa2V5KSkgeworICAgIHMtPnN0YXRlID0ga0NvcnJ1cHQ7CisgIH0g
ZWxzZSB7CisgICAgaWYgKHMtPnVjbXAtPkNvbXBhcmUocGFyc2VkX2tleS51c2VyX2tleSwgcy0+
dXNlcl9rZXkpID09IDApIHsKKyAgICAgIHMtPnN0YXRlID0gKHBhcnNlZF9rZXkudHlwZSA9PSBr
VHlwZVZhbHVlKSA/IGtGb3VuZCA6IGtEZWxldGVkOworICAgICAgaWYgKHMtPnN0YXRlID09IGtG
b3VuZCkgeworICAgICAgICBzLT52YWx1ZS0+YXNzaWduKHYuZGF0YSgpLCB2LnNpemUoKSk7Cisg
ICAgICB9CisgICAgfQorICB9Cit9CisKK3N0YXRpYyBib29sIE5ld2VzdEZpcnN0KEZpbGVNZXRh
RGF0YSogYSwgRmlsZU1ldGFEYXRhKiBiKSB7CisgIHJldHVybiBhLT5udW1iZXIgPiBiLT5udW1i
ZXI7Cit9CisKK1N0YXR1cyBWZXJzaW9uOjpHZXQoY29uc3QgUmVhZE9wdGlvbnMmIG9wdGlvbnMs
CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IExvb2t1cEtleSYgaywKKyAgICAgICAgICAgICAg
ICAgICAgc3RkOjpzdHJpbmcqIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICBHZXRTdGF0cyog
c3RhdHMpIHsKKyAgU2xpY2UgaWtleSA9IGsuaW50ZXJuYWxfa2V5KCk7CisgIFNsaWNlIHVzZXJf
a2V5ID0gay51c2VyX2tleSgpOworICBjb25zdCBDb21wYXJhdG9yKiB1Y21wID0gdnNldF8tPmlj
bXBfLnVzZXJfY29tcGFyYXRvcigpOworICBTdGF0dXMgczsKKworICBzdGF0cy0+c2Vla19maWxl
ID0gTlVMTDsKKyAgc3RhdHMtPnNlZWtfZmlsZV9sZXZlbCA9IC0xOworICBGaWxlTWV0YURhdGEq
IGxhc3RfZmlsZV9yZWFkID0gTlVMTDsKKyAgaW50IGxhc3RfZmlsZV9yZWFkX2xldmVsID0gLTE7
CisKKyAgLy8gV2UgY2FuIHNlYXJjaCBsZXZlbC1ieS1sZXZlbCBzaW5jZSBlbnRyaWVzIG5ldmVy
IGhvcCBhY3Jvc3MKKyAgLy8gbGV2ZWxzLiAgVGhlcmVmb3JlIHdlIGFyZSBndWFyYW50ZWVkIHRo
YXQgaWYgd2UgZmluZCBkYXRhCisgIC8vIGluIGFuIHNtYWxsZXIgbGV2ZWwsIGxhdGVyIGxldmVs
cyBhcmUgaXJyZWxldmFudC4KKyAgc3RkOjp2ZWN0b3I8RmlsZU1ldGFEYXRhKj4gdG1wOworICBG
aWxlTWV0YURhdGEqIHRtcDI7CisgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBjb25maWc6
OmtOdW1MZXZlbHM7IGxldmVsKyspIHsKKyAgICBzaXplX3QgbnVtX2ZpbGVzID0gZmlsZXNfW2xl
dmVsXS5zaXplKCk7CisgICAgaWYgKG51bV9maWxlcyA9PSAwKSBjb250aW51ZTsKKworICAgIC8v
IEdldCB0aGUgbGlzdCBvZiBmaWxlcyB0byBzZWFyY2ggaW4gdGhpcyBsZXZlbAorICAgIEZpbGVN
ZXRhRGF0YSogY29uc3QqIGZpbGVzID0gJmZpbGVzX1tsZXZlbF1bMF07CisgICAgaWYgKGxldmVs
ID09IDApIHsKKyAgICAgIC8vIExldmVsLTAgZmlsZXMgbWF5IG92ZXJsYXAgZWFjaCBvdGhlci4g
IEZpbmQgYWxsIGZpbGVzIHRoYXQKKyAgICAgIC8vIG92ZXJsYXAgdXNlcl9rZXkgYW5kIHByb2Nl
c3MgdGhlbSBpbiBvcmRlciBmcm9tIG5ld2VzdCB0byBvbGRlc3QuCisgICAgICB0bXAucmVzZXJ2
ZShudW1fZmlsZXMpOworICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bV9maWxlczsg
aSsrKSB7CisgICAgICAgIEZpbGVNZXRhRGF0YSogZiA9IGZpbGVzW2ldOworICAgICAgICBpZiAo
dWNtcC0+Q29tcGFyZSh1c2VyX2tleSwgZi0+c21hbGxlc3QudXNlcl9rZXkoKSkgPj0gMCAmJgor
ICAgICAgICAgICAgdWNtcC0+Q29tcGFyZSh1c2VyX2tleSwgZi0+bGFyZ2VzdC51c2VyX2tleSgp
KSA8PSAwKSB7CisgICAgICAgICAgdG1wLnB1c2hfYmFjayhmKTsKKyAgICAgICAgfQorICAgICAg
fQorICAgICAgaWYgKHRtcC5lbXB0eSgpKSBjb250aW51ZTsKKworICAgICAgc3RkOjpzb3J0KHRt
cC5iZWdpbigpLCB0bXAuZW5kKCksIE5ld2VzdEZpcnN0KTsKKyAgICAgIGZpbGVzID0gJnRtcFsw
XTsKKyAgICAgIG51bV9maWxlcyA9IHRtcC5zaXplKCk7CisgICAgfSBlbHNlIHsKKyAgICAgIC8v
IEJpbmFyeSBzZWFyY2ggdG8gZmluZCBlYXJsaWVzdCBpbmRleCB3aG9zZSBsYXJnZXN0IGtleSA+
PSBpa2V5LgorICAgICAgdWludDMyX3QgaW5kZXggPSBGaW5kRmlsZSh2c2V0Xy0+aWNtcF8sIGZp
bGVzX1tsZXZlbF0sIGlrZXkpOworICAgICAgaWYgKGluZGV4ID49IG51bV9maWxlcykgeworICAg
ICAgICBmaWxlcyA9IE5VTEw7CisgICAgICAgIG51bV9maWxlcyA9IDA7CisgICAgICB9IGVsc2Ug
eworICAgICAgICB0bXAyID0gZmlsZXNbaW5kZXhdOworICAgICAgICBpZiAodWNtcC0+Q29tcGFy
ZSh1c2VyX2tleSwgdG1wMi0+c21hbGxlc3QudXNlcl9rZXkoKSkgPCAwKSB7CisgICAgICAgICAg
Ly8gQWxsIG9mICJ0bXAyIiBpcyBwYXN0IGFueSBkYXRhIGZvciB1c2VyX2tleQorICAgICAgICAg
IGZpbGVzID0gTlVMTDsKKyAgICAgICAgICBudW1fZmlsZXMgPSAwOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgIGZpbGVzID0gJnRtcDI7CisgICAgICAgICAgbnVtX2ZpbGVzID0gMTsKKyAg
ICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBu
dW1fZmlsZXM7ICsraSkgeworICAgICAgaWYgKGxhc3RfZmlsZV9yZWFkICE9IE5VTEwgJiYgc3Rh
dHMtPnNlZWtfZmlsZSA9PSBOVUxMKSB7CisgICAgICAgIC8vIFdlIGhhdmUgaGFkIG1vcmUgdGhh
biBvbmUgc2VlayBmb3IgdGhpcyByZWFkLiAgQ2hhcmdlIHRoZSAxc3QgZmlsZS4KKyAgICAgICAg
c3RhdHMtPnNlZWtfZmlsZSA9IGxhc3RfZmlsZV9yZWFkOworICAgICAgICBzdGF0cy0+c2Vla19m
aWxlX2xldmVsID0gbGFzdF9maWxlX3JlYWRfbGV2ZWw7CisgICAgICB9CisKKyAgICAgIEZpbGVN
ZXRhRGF0YSogZiA9IGZpbGVzW2ldOworICAgICAgbGFzdF9maWxlX3JlYWQgPSBmOworICAgICAg
bGFzdF9maWxlX3JlYWRfbGV2ZWwgPSBsZXZlbDsKKworICAgICAgU2F2ZXIgc2F2ZXI7CisgICAg
ICBzYXZlci5zdGF0ZSA9IGtOb3RGb3VuZDsKKyAgICAgIHNhdmVyLnVjbXAgPSB1Y21wOworICAg
ICAgc2F2ZXIudXNlcl9rZXkgPSB1c2VyX2tleTsKKyAgICAgIHNhdmVyLnZhbHVlID0gdmFsdWU7
CisgICAgICBzID0gdnNldF8tPnRhYmxlX2NhY2hlXy0+R2V0KG9wdGlvbnMsIGYtPm51bWJlciwg
Zi0+ZmlsZV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpa2V5LCAm
c2F2ZXIsIFNhdmVWYWx1ZSk7CisgICAgICBpZiAoIXMub2soKSkgeworICAgICAgICByZXR1cm4g
czsKKyAgICAgIH0KKyAgICAgIHN3aXRjaCAoc2F2ZXIuc3RhdGUpIHsKKyAgICAgICAgY2FzZSBr
Tm90Rm91bmQ6CisgICAgICAgICAgYnJlYWs7ICAgICAgLy8gS2VlcCBzZWFyY2hpbmcgaW4gb3Ro
ZXIgZmlsZXMKKyAgICAgICAgY2FzZSBrRm91bmQ6CisgICAgICAgICAgcmV0dXJuIHM7CisgICAg
ICAgIGNhc2Uga0RlbGV0ZWQ6CisgICAgICAgICAgcyA9IFN0YXR1czo6Tm90Rm91bmQoU2xpY2Uo
KSk7ICAvLyBVc2UgZW1wdHkgZXJyb3IgbWVzc2FnZSBmb3Igc3BlZWQKKyAgICAgICAgICByZXR1
cm4gczsKKyAgICAgICAgY2FzZSBrQ29ycnVwdDoKKyAgICAgICAgICBzID0gU3RhdHVzOjpDb3Jy
dXB0aW9uKCJjb3JydXB0ZWQga2V5IGZvciAiLCB1c2VyX2tleSk7CisgICAgICAgICAgcmV0dXJu
IHM7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIFN0YXR1czo6Tm90Rm91bmQoU2xp
Y2UoKSk7ICAvLyBVc2UgYW4gZW1wdHkgZXJyb3IgbWVzc2FnZSBmb3Igc3BlZWQKK30KKworYm9v
bCBWZXJzaW9uOjpVcGRhdGVTdGF0cyhjb25zdCBHZXRTdGF0cyYgc3RhdHMpIHsKKyAgRmlsZU1l
dGFEYXRhKiBmID0gc3RhdHMuc2Vla19maWxlOworICBpZiAoZiAhPSBOVUxMKSB7CisgICAgZi0+
YWxsb3dlZF9zZWVrcy0tOworICAgIGlmIChmLT5hbGxvd2VkX3NlZWtzIDw9IDAgJiYgZmlsZV90
b19jb21wYWN0XyA9PSBOVUxMKSB7CisgICAgICBmaWxlX3RvX2NvbXBhY3RfID0gZjsKKyAgICAg
IGZpbGVfdG9fY29tcGFjdF9sZXZlbF8gPSBzdGF0cy5zZWVrX2ZpbGVfbGV2ZWw7CisgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFZlcnNp
b246OlJlZigpIHsKKyAgKytyZWZzXzsKK30KKwordm9pZCBWZXJzaW9uOjpVbnJlZigpIHsKKyAg
YXNzZXJ0KHRoaXMgIT0gJnZzZXRfLT5kdW1teV92ZXJzaW9uc18pOworICBhc3NlcnQocmVmc18g
Pj0gMSk7CisgIC0tcmVmc187CisgIGlmIChyZWZzXyA9PSAwKSB7CisgICAgZGVsZXRlIHRoaXM7
CisgIH0KK30KKworYm9vbCBWZXJzaW9uOjpPdmVybGFwSW5MZXZlbChpbnQgbGV2ZWwsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNsaWNlKiBzbWFsbGVzdF91c2VyX2tleSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2xpY2UqIGxhcmdlc3RfdXNlcl9r
ZXkpIHsKKyAgcmV0dXJuIFNvbWVGaWxlT3ZlcmxhcHNSYW5nZSh2c2V0Xy0+aWNtcF8sIChsZXZl
bCA+IDApLCBmaWxlc19bbGV2ZWxdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNt
YWxsZXN0X3VzZXJfa2V5LCBsYXJnZXN0X3VzZXJfa2V5KTsKK30KKworaW50IFZlcnNpb246OlBp
Y2tMZXZlbEZvck1lbVRhYmxlT3V0cHV0KAorICAgIGNvbnN0IFNsaWNlJiBzbWFsbGVzdF91c2Vy
X2tleSwKKyAgICBjb25zdCBTbGljZSYgbGFyZ2VzdF91c2VyX2tleSkgeworICBpbnQgbGV2ZWwg
PSAwOworICBpZiAoIU92ZXJsYXBJbkxldmVsKDAsICZzbWFsbGVzdF91c2VyX2tleSwgJmxhcmdl
c3RfdXNlcl9rZXkpKSB7CisgICAgLy8gUHVzaCB0byBuZXh0IGxldmVsIGlmIHRoZXJlIGlzIG5v
IG92ZXJsYXAgaW4gbmV4dCBsZXZlbCwKKyAgICAvLyBhbmQgdGhlICNieXRlcyBvdmVybGFwcGlu
ZyBpbiB0aGUgbGV2ZWwgYWZ0ZXIgdGhhdCBhcmUgbGltaXRlZC4KKyAgICBJbnRlcm5hbEtleSBz
dGFydChzbWFsbGVzdF91c2VyX2tleSwga01heFNlcXVlbmNlTnVtYmVyLCBrVmFsdWVUeXBlRm9y
U2Vlayk7CisgICAgSW50ZXJuYWxLZXkgbGltaXQobGFyZ2VzdF91c2VyX2tleSwgMCwgc3RhdGlj
X2Nhc3Q8VmFsdWVUeXBlPigwKSk7CisgICAgc3RkOjp2ZWN0b3I8RmlsZU1ldGFEYXRhKj4gb3Zl
cmxhcHM7CisgICAgd2hpbGUgKGxldmVsIDwgY29uZmlnOjprTWF4TWVtQ29tcGFjdExldmVsKSB7
CisgICAgICBpZiAoT3ZlcmxhcEluTGV2ZWwobGV2ZWwgKyAxLCAmc21hbGxlc3RfdXNlcl9rZXks
ICZsYXJnZXN0X3VzZXJfa2V5KSkgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIEdl
dE92ZXJsYXBwaW5nSW5wdXRzKGxldmVsICsgMiwgJnN0YXJ0LCAmbGltaXQsICZvdmVybGFwcyk7
CisgICAgICBjb25zdCBpbnQ2NF90IHN1bSA9IFRvdGFsRmlsZVNpemUob3ZlcmxhcHMpOworICAg
ICAgaWYgKHN1bSA+IGtNYXhHcmFuZFBhcmVudE92ZXJsYXBCeXRlcykgeworICAgICAgICBicmVh
azsKKyAgICAgIH0KKyAgICAgIGxldmVsKys7CisgICAgfQorICB9CisgIHJldHVybiBsZXZlbDsK
K30KKworLy8gU3RvcmUgaW4gIippbnB1dHMiIGFsbCBmaWxlcyBpbiAibGV2ZWwiIHRoYXQgb3Zl
cmxhcCBbYmVnaW4sZW5kXQordm9pZCBWZXJzaW9uOjpHZXRPdmVybGFwcGluZ0lucHV0cygKKyAg
ICBpbnQgbGV2ZWwsCisgICAgY29uc3QgSW50ZXJuYWxLZXkqIGJlZ2luLAorICAgIGNvbnN0IElu
dGVybmFsS2V5KiBlbmQsCisgICAgc3RkOjp2ZWN0b3I8RmlsZU1ldGFEYXRhKj4qIGlucHV0cykg
eworICBpbnB1dHMtPmNsZWFyKCk7CisgIFNsaWNlIHVzZXJfYmVnaW4sIHVzZXJfZW5kOworICBp
ZiAoYmVnaW4gIT0gTlVMTCkgeworICAgIHVzZXJfYmVnaW4gPSBiZWdpbi0+dXNlcl9rZXkoKTsK
KyAgfQorICBpZiAoZW5kICE9IE5VTEwpIHsKKyAgICB1c2VyX2VuZCA9IGVuZC0+dXNlcl9rZXko
KTsKKyAgfQorICBjb25zdCBDb21wYXJhdG9yKiB1c2VyX2NtcCA9IHZzZXRfLT5pY21wXy51c2Vy
X2NvbXBhcmF0b3IoKTsKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxlc19bbGV2ZWxdLnNp
emUoKTsgKSB7CisgICAgRmlsZU1ldGFEYXRhKiBmID0gZmlsZXNfW2xldmVsXVtpKytdOworICAg
IGNvbnN0IFNsaWNlIGZpbGVfc3RhcnQgPSBmLT5zbWFsbGVzdC51c2VyX2tleSgpOworICAgIGNv
bnN0IFNsaWNlIGZpbGVfbGltaXQgPSBmLT5sYXJnZXN0LnVzZXJfa2V5KCk7CisgICAgaWYgKGJl
Z2luICE9IE5VTEwgJiYgdXNlcl9jbXAtPkNvbXBhcmUoZmlsZV9saW1pdCwgdXNlcl9iZWdpbikg
PCAwKSB7CisgICAgICAvLyAiZiIgaXMgY29tcGxldGVseSBiZWZvcmUgc3BlY2lmaWVkIHJhbmdl
OyBza2lwIGl0CisgICAgfSBlbHNlIGlmIChlbmQgIT0gTlVMTCAmJiB1c2VyX2NtcC0+Q29tcGFy
ZShmaWxlX3N0YXJ0LCB1c2VyX2VuZCkgPiAwKSB7CisgICAgICAvLyAiZiIgaXMgY29tcGxldGVs
eSBhZnRlciBzcGVjaWZpZWQgcmFuZ2U7IHNraXAgaXQKKyAgICB9IGVsc2UgeworICAgICAgaW5w
dXRzLT5wdXNoX2JhY2soZik7CisgICAgICBpZiAobGV2ZWwgPT0gMCkgeworICAgICAgICAvLyBM
ZXZlbC0wIGZpbGVzIG1heSBvdmVybGFwIGVhY2ggb3RoZXIuICBTbyBjaGVjayBpZiB0aGUgbmV3
bHkKKyAgICAgICAgLy8gYWRkZWQgZmlsZSBoYXMgZXhwYW5kZWQgdGhlIHJhbmdlLiAgSWYgc28s
IHJlc3RhcnQgc2VhcmNoLgorICAgICAgICBpZiAoYmVnaW4gIT0gTlVMTCAmJiB1c2VyX2NtcC0+
Q29tcGFyZShmaWxlX3N0YXJ0LCB1c2VyX2JlZ2luKSA8IDApIHsKKyAgICAgICAgICB1c2VyX2Jl
Z2luID0gZmlsZV9zdGFydDsKKyAgICAgICAgICBpbnB1dHMtPmNsZWFyKCk7CisgICAgICAgICAg
aSA9IDA7CisgICAgICAgIH0gZWxzZSBpZiAoZW5kICE9IE5VTEwgJiYgdXNlcl9jbXAtPkNvbXBh
cmUoZmlsZV9saW1pdCwgdXNlcl9lbmQpID4gMCkgeworICAgICAgICAgIHVzZXJfZW5kID0gZmls
ZV9saW1pdDsKKyAgICAgICAgICBpbnB1dHMtPmNsZWFyKCk7CisgICAgICAgICAgaSA9IDA7Cisg
ICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworc3RkOjpzdHJpbmcgVmVyc2lvbjo6
RGVidWdTdHJpbmcoKSBjb25zdCB7CisgIHN0ZDo6c3RyaW5nIHI7CisgIGZvciAoaW50IGxldmVs
ID0gMDsgbGV2ZWwgPCBjb25maWc6OmtOdW1MZXZlbHM7IGxldmVsKyspIHsKKyAgICAvLyBFLmcu
LAorICAgIC8vICAgLS0tIGxldmVsIDEgLS0tCisgICAgLy8gICAxNzoxMjNbJ2EnIC4uICdkJ10K
KyAgICAvLyAgIDIwOjQzWydlJyAuLiAnZyddCisgICAgci5hcHBlbmQoIi0tLSBsZXZlbCAiKTsK
KyAgICBBcHBlbmROdW1iZXJUbygmciwgbGV2ZWwpOworICAgIHIuYXBwZW5kKCIgLS0tXG4iKTsK
KyAgICBjb25zdCBzdGQ6OnZlY3RvcjxGaWxlTWV0YURhdGEqPiYgZmlsZXMgPSBmaWxlc19bbGV2
ZWxdOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsZXMuc2l6ZSgpOyBpKyspIHsKKyAg
ICAgIHIucHVzaF9iYWNrKCcgJyk7CisgICAgICBBcHBlbmROdW1iZXJUbygmciwgZmlsZXNbaV0t
Pm51bWJlcik7CisgICAgICByLnB1c2hfYmFjaygnOicpOworICAgICAgQXBwZW5kTnVtYmVyVG8o
JnIsIGZpbGVzW2ldLT5maWxlX3NpemUpOworICAgICAgci5hcHBlbmQoIlsiKTsKKyAgICAgIHIu
YXBwZW5kKGZpbGVzW2ldLT5zbWFsbGVzdC5EZWJ1Z1N0cmluZygpKTsKKyAgICAgIHIuYXBwZW5k
KCIgLi4gIik7CisgICAgICByLmFwcGVuZChmaWxlc1tpXS0+bGFyZ2VzdC5EZWJ1Z1N0cmluZygp
KTsKKyAgICAgIHIuYXBwZW5kKCJdXG4iKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHI7Cit9CisK
Ky8vIEEgaGVscGVyIGNsYXNzIHNvIHdlIGNhbiBlZmZpY2llbnRseSBhcHBseSBhIHdob2xlIHNl
cXVlbmNlCisvLyBvZiBlZGl0cyB0byBhIHBhcnRpY3VsYXIgc3RhdGUgd2l0aG91dCBjcmVhdGlu
ZyBpbnRlcm1lZGlhdGUKKy8vIFZlcnNpb25zIHRoYXQgY29udGFpbiBmdWxsIGNvcGllcyBvZiB0
aGUgaW50ZXJtZWRpYXRlIHN0YXRlLgorY2xhc3MgVmVyc2lvblNldDo6QnVpbGRlciB7CisgcHJp
dmF0ZToKKyAgLy8gSGVscGVyIHRvIHNvcnQgYnkgdi0+ZmlsZXNfW2ZpbGVfbnVtYmVyXS5zbWFs
bGVzdAorICBzdHJ1Y3QgQnlTbWFsbGVzdEtleSB7CisgICAgY29uc3QgSW50ZXJuYWxLZXlDb21w
YXJhdG9yKiBpbnRlcm5hbF9jb21wYXJhdG9yOworCisgICAgYm9vbCBvcGVyYXRvcigpKEZpbGVN
ZXRhRGF0YSogZjEsIEZpbGVNZXRhRGF0YSogZjIpIGNvbnN0IHsKKyAgICAgIGludCByID0gaW50
ZXJuYWxfY29tcGFyYXRvci0+Q29tcGFyZShmMS0+c21hbGxlc3QsIGYyLT5zbWFsbGVzdCk7Cisg
ICAgICBpZiAociAhPSAwKSB7CisgICAgICAgIHJldHVybiAociA8IDApOworICAgICAgfSBlbHNl
IHsKKyAgICAgICAgLy8gQnJlYWsgdGllcyBieSBmaWxlIG51bWJlcgorICAgICAgICByZXR1cm4g
KGYxLT5udW1iZXIgPCBmMi0+bnVtYmVyKTsKKyAgICAgIH0KKyAgICB9CisgIH07CisKKyAgdHlw
ZWRlZiBzdGQ6OnNldDxGaWxlTWV0YURhdGEqLCBCeVNtYWxsZXN0S2V5PiBGaWxlU2V0OworICBz
dHJ1Y3QgTGV2ZWxTdGF0ZSB7CisgICAgc3RkOjpzZXQ8dWludDY0X3Q+IGRlbGV0ZWRfZmlsZXM7
CisgICAgRmlsZVNldCogYWRkZWRfZmlsZXM7CisgIH07CisKKyAgVmVyc2lvblNldCogdnNldF87
CisgIFZlcnNpb24qIGJhc2VfOworICBMZXZlbFN0YXRlIGxldmVsc19bY29uZmlnOjprTnVtTGV2
ZWxzXTsKKworIHB1YmxpYzoKKyAgLy8gSW5pdGlhbGl6ZSBhIGJ1aWxkZXIgd2l0aCB0aGUgZmls
ZXMgZnJvbSAqYmFzZSBhbmQgb3RoZXIgaW5mbyBmcm9tICp2c2V0CisgIEJ1aWxkZXIoVmVyc2lv
blNldCogdnNldCwgVmVyc2lvbiogYmFzZSkKKyAgICAgIDogdnNldF8odnNldCksCisgICAgICAg
IGJhc2VfKGJhc2UpIHsKKyAgICBiYXNlXy0+UmVmKCk7CisgICAgQnlTbWFsbGVzdEtleSBjbXA7
CisgICAgY21wLmludGVybmFsX2NvbXBhcmF0b3IgPSAmdnNldF8tPmljbXBfOworICAgIGZvciAo
aW50IGxldmVsID0gMDsgbGV2ZWwgPCBjb25maWc6OmtOdW1MZXZlbHM7IGxldmVsKyspIHsKKyAg
ICAgIGxldmVsc19bbGV2ZWxdLmFkZGVkX2ZpbGVzID0gbmV3IEZpbGVTZXQoY21wKTsKKyAgICB9
CisgIH0KKworICB+QnVpbGRlcigpIHsKKyAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwg
Y29uZmlnOjprTnVtTGV2ZWxzOyBsZXZlbCsrKSB7CisgICAgICBjb25zdCBGaWxlU2V0KiBhZGRl
ZCA9IGxldmVsc19bbGV2ZWxdLmFkZGVkX2ZpbGVzOworICAgICAgc3RkOjp2ZWN0b3I8RmlsZU1l
dGFEYXRhKj4gdG9fdW5yZWY7CisgICAgICB0b191bnJlZi5yZXNlcnZlKGFkZGVkLT5zaXplKCkp
OworICAgICAgZm9yIChGaWxlU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IGFkZGVkLT5iZWdpbigp
OworICAgICAgICAgIGl0ICE9IGFkZGVkLT5lbmQoKTsgKytpdCkgeworICAgICAgICB0b191bnJl
Zi5wdXNoX2JhY2soKml0KTsKKyAgICAgIH0KKyAgICAgIGRlbGV0ZSBhZGRlZDsKKyAgICAgIGZv
ciAodWludDMyX3QgaSA9IDA7IGkgPCB0b191bnJlZi5zaXplKCk7IGkrKykgeworICAgICAgICBG
aWxlTWV0YURhdGEqIGYgPSB0b191bnJlZltpXTsKKyAgICAgICAgZi0+cmVmcy0tOworICAgICAg
ICBpZiAoZi0+cmVmcyA8PSAwKSB7CisgICAgICAgICAgZGVsZXRlIGY7CisgICAgICAgIH0KKyAg
ICAgIH0KKyAgICB9CisgICAgYmFzZV8tPlVucmVmKCk7CisgIH0KKworICAvLyBBcHBseSBhbGwg
b2YgdGhlIGVkaXRzIGluICplZGl0IHRvIHRoZSBjdXJyZW50IHN0YXRlLgorICB2b2lkIEFwcGx5
KFZlcnNpb25FZGl0KiBlZGl0KSB7CisgICAgLy8gVXBkYXRlIGNvbXBhY3Rpb24gcG9pbnRlcnMK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGVkaXQtPmNvbXBhY3RfcG9pbnRlcnNfLnNpemUo
KTsgaSsrKSB7CisgICAgICBjb25zdCBpbnQgbGV2ZWwgPSBlZGl0LT5jb21wYWN0X3BvaW50ZXJz
X1tpXS5maXJzdDsKKyAgICAgIHZzZXRfLT5jb21wYWN0X3BvaW50ZXJfW2xldmVsXSA9CisgICAg
ICAgICAgZWRpdC0+Y29tcGFjdF9wb2ludGVyc19baV0uc2Vjb25kLkVuY29kZSgpLlRvU3RyaW5n
KCk7CisgICAgfQorCisgICAgLy8gRGVsZXRlIGZpbGVzCisgICAgY29uc3QgVmVyc2lvbkVkaXQ6
OkRlbGV0ZWRGaWxlU2V0JiBkZWwgPSBlZGl0LT5kZWxldGVkX2ZpbGVzXzsKKyAgICBmb3IgKFZl
cnNpb25FZGl0OjpEZWxldGVkRmlsZVNldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGRlbC5iZWdp
bigpOworICAgICAgICAgaXRlciAhPSBkZWwuZW5kKCk7CisgICAgICAgICArK2l0ZXIpIHsKKyAg
ICAgIGNvbnN0IGludCBsZXZlbCA9IGl0ZXItPmZpcnN0OworICAgICAgY29uc3QgdWludDY0X3Qg
bnVtYmVyID0gaXRlci0+c2Vjb25kOworICAgICAgbGV2ZWxzX1tsZXZlbF0uZGVsZXRlZF9maWxl
cy5pbnNlcnQobnVtYmVyKTsKKyAgICB9CisKKyAgICAvLyBBZGQgbmV3IGZpbGVzCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBlZGl0LT5uZXdfZmlsZXNfLnNpemUoKTsgaSsrKSB7CisgICAg
ICBjb25zdCBpbnQgbGV2ZWwgPSBlZGl0LT5uZXdfZmlsZXNfW2ldLmZpcnN0OworICAgICAgRmls
ZU1ldGFEYXRhKiBmID0gbmV3IEZpbGVNZXRhRGF0YShlZGl0LT5uZXdfZmlsZXNfW2ldLnNlY29u
ZCk7CisgICAgICBmLT5yZWZzID0gMTsKKworICAgICAgLy8gV2UgYXJyYW5nZSB0byBhdXRvbWF0
aWNhbGx5IGNvbXBhY3QgdGhpcyBmaWxlIGFmdGVyCisgICAgICAvLyBhIGNlcnRhaW4gbnVtYmVy
IG9mIHNlZWtzLiAgTGV0J3MgYXNzdW1lOgorICAgICAgLy8gICAoMSkgT25lIHNlZWsgY29zdHMg
MTBtcworICAgICAgLy8gICAoMikgV3JpdGluZyBvciByZWFkaW5nIDFNQiBjb3N0cyAxMG1zICgx
MDBNQi9zKQorICAgICAgLy8gICAoMykgQSBjb21wYWN0aW9uIG9mIDFNQiBkb2VzIDI1TUIgb2Yg
SU86CisgICAgICAvLyAgICAgICAgIDFNQiByZWFkIGZyb20gdGhpcyBsZXZlbAorICAgICAgLy8g
ICAgICAgICAxMC0xMk1CIHJlYWQgZnJvbSBuZXh0IGxldmVsIChib3VuZGFyaWVzIG1heSBiZSBt
aXNhbGlnbmVkKQorICAgICAgLy8gICAgICAgICAxMC0xMk1CIHdyaXR0ZW4gdG8gbmV4dCBsZXZl
bAorICAgICAgLy8gVGhpcyBpbXBsaWVzIHRoYXQgMjUgc2Vla3MgY29zdCB0aGUgc2FtZSBhcyB0
aGUgY29tcGFjdGlvbgorICAgICAgLy8gb2YgMU1CIG9mIGRhdGEuICBJLmUuLCBvbmUgc2VlayBj
b3N0cyBhcHByb3hpbWF0ZWx5IHRoZQorICAgICAgLy8gc2FtZSBhcyB0aGUgY29tcGFjdGlvbiBv
ZiA0MEtCIG9mIGRhdGEuICBXZSBhcmUgYSBsaXR0bGUKKyAgICAgIC8vIGNvbnNlcnZhdGl2ZSBh
bmQgYWxsb3cgYXBwcm94aW1hdGVseSBvbmUgc2VlayBmb3IgZXZlcnkgMTZLQgorICAgICAgLy8g
b2YgZGF0YSBiZWZvcmUgdHJpZ2dlcmluZyBhIGNvbXBhY3Rpb24uCisgICAgICBmLT5hbGxvd2Vk
X3NlZWtzID0gKGYtPmZpbGVfc2l6ZSAvIDE2Mzg0KTsKKyAgICAgIGlmIChmLT5hbGxvd2VkX3Nl
ZWtzIDwgMTAwKSBmLT5hbGxvd2VkX3NlZWtzID0gMTAwOworCisgICAgICBsZXZlbHNfW2xldmVs
XS5kZWxldGVkX2ZpbGVzLmVyYXNlKGYtPm51bWJlcik7CisgICAgICBsZXZlbHNfW2xldmVsXS5h
ZGRlZF9maWxlcy0+aW5zZXJ0KGYpOworICAgIH0KKyAgfQorCisgIC8vIFNhdmUgdGhlIGN1cnJl
bnQgc3RhdGUgaW4gKnYuCisgIHZvaWQgU2F2ZVRvKFZlcnNpb24qIHYpIHsKKyAgICBCeVNtYWxs
ZXN0S2V5IGNtcDsKKyAgICBjbXAuaW50ZXJuYWxfY29tcGFyYXRvciA9ICZ2c2V0Xy0+aWNtcF87
CisgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGNvbmZpZzo6a051bUxldmVsczsgbGV2
ZWwrKykgeworICAgICAgLy8gTWVyZ2UgdGhlIHNldCBvZiBhZGRlZCBmaWxlcyB3aXRoIHRoZSBz
ZXQgb2YgcHJlLWV4aXN0aW5nIGZpbGVzLgorICAgICAgLy8gRHJvcCBhbnkgZGVsZXRlZCBmaWxl
cy4gIFN0b3JlIHRoZSByZXN1bHQgaW4gKnYuCisgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxGaWxl
TWV0YURhdGEqPiYgYmFzZV9maWxlcyA9IGJhc2VfLT5maWxlc19bbGV2ZWxdOworICAgICAgc3Rk
Ojp2ZWN0b3I8RmlsZU1ldGFEYXRhKj46OmNvbnN0X2l0ZXJhdG9yIGJhc2VfaXRlciA9IGJhc2Vf
ZmlsZXMuYmVnaW4oKTsKKyAgICAgIHN0ZDo6dmVjdG9yPEZpbGVNZXRhRGF0YSo+Ojpjb25zdF9p
dGVyYXRvciBiYXNlX2VuZCA9IGJhc2VfZmlsZXMuZW5kKCk7CisgICAgICBjb25zdCBGaWxlU2V0
KiBhZGRlZCA9IGxldmVsc19bbGV2ZWxdLmFkZGVkX2ZpbGVzOworICAgICAgdi0+ZmlsZXNfW2xl
dmVsXS5yZXNlcnZlKGJhc2VfZmlsZXMuc2l6ZSgpICsgYWRkZWQtPnNpemUoKSk7CisgICAgICBm
b3IgKEZpbGVTZXQ6OmNvbnN0X2l0ZXJhdG9yIGFkZGVkX2l0ZXIgPSBhZGRlZC0+YmVnaW4oKTsK
KyAgICAgICAgICAgYWRkZWRfaXRlciAhPSBhZGRlZC0+ZW5kKCk7CisgICAgICAgICAgICsrYWRk
ZWRfaXRlcikgeworICAgICAgICAvLyBBZGQgYWxsIHNtYWxsZXIgZmlsZXMgbGlzdGVkIGluIGJh
c2VfCisgICAgICAgIGZvciAoc3RkOjp2ZWN0b3I8RmlsZU1ldGFEYXRhKj46OmNvbnN0X2l0ZXJh
dG9yIGJwb3MKKyAgICAgICAgICAgICAgICAgPSBzdGQ6OnVwcGVyX2JvdW5kKGJhc2VfaXRlciwg
YmFzZV9lbmQsICphZGRlZF9pdGVyLCBjbXApOworICAgICAgICAgICAgIGJhc2VfaXRlciAhPSBi
cG9zOworICAgICAgICAgICAgICsrYmFzZV9pdGVyKSB7CisgICAgICAgICAgTWF5YmVBZGRGaWxl
KHYsIGxldmVsLCAqYmFzZV9pdGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIE1heWJlQWRkRmls
ZSh2LCBsZXZlbCwgKmFkZGVkX2l0ZXIpOworICAgICAgfQorCisgICAgICAvLyBBZGQgcmVtYWlu
aW5nIGJhc2UgZmlsZXMKKyAgICAgIGZvciAoOyBiYXNlX2l0ZXIgIT0gYmFzZV9lbmQ7ICsrYmFz
ZV9pdGVyKSB7CisgICAgICAgIE1heWJlQWRkRmlsZSh2LCBsZXZlbCwgKmJhc2VfaXRlcik7Cisg
ICAgICB9CisKKyNpZm5kZWYgTkRFQlVHCisgICAgICAvLyBNYWtlIHN1cmUgdGhlcmUgaXMgbm8g
b3ZlcmxhcCBpbiBsZXZlbHMgPiAwCisgICAgICBpZiAobGV2ZWwgPiAwKSB7CisgICAgICAgIGZv
ciAodWludDMyX3QgaSA9IDE7IGkgPCB2LT5maWxlc19bbGV2ZWxdLnNpemUoKTsgaSsrKSB7Cisg
ICAgICAgICAgY29uc3QgSW50ZXJuYWxLZXkmIHByZXZfZW5kID0gdi0+ZmlsZXNfW2xldmVsXVtp
LTFdLT5sYXJnZXN0OworICAgICAgICAgIGNvbnN0IEludGVybmFsS2V5JiB0aGlzX2JlZ2luID0g
di0+ZmlsZXNfW2xldmVsXVtpXS0+c21hbGxlc3Q7CisgICAgICAgICAgaWYgKHZzZXRfLT5pY21w
Xy5Db21wYXJlKHByZXZfZW5kLCB0aGlzX2JlZ2luKSA+PSAwKSB7CisgICAgICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIm92ZXJsYXBwaW5nIHJhbmdlcyBpbiBzYW1lIGxldmVsICVzIHZzLiAlc1xu
IiwKKyAgICAgICAgICAgICAgICAgICAgcHJldl9lbmQuRGVidWdTdHJpbmcoKS5jX3N0cigpLAor
ICAgICAgICAgICAgICAgICAgICB0aGlzX2JlZ2luLkRlYnVnU3RyaW5nKCkuY19zdHIoKSk7Cisg
ICAgICAgICAgICBhYm9ydCgpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorI2Vu
ZGlmCisgICAgfQorICB9CisKKyAgdm9pZCBNYXliZUFkZEZpbGUoVmVyc2lvbiogdiwgaW50IGxl
dmVsLCBGaWxlTWV0YURhdGEqIGYpIHsKKyAgICBpZiAobGV2ZWxzX1tsZXZlbF0uZGVsZXRlZF9m
aWxlcy5jb3VudChmLT5udW1iZXIpID4gMCkgeworICAgICAgLy8gRmlsZSBpcyBkZWxldGVkOiBk
byBub3RoaW5nCisgICAgfSBlbHNlIHsKKyAgICAgIHN0ZDo6dmVjdG9yPEZpbGVNZXRhRGF0YSo+
KiBmaWxlcyA9ICZ2LT5maWxlc19bbGV2ZWxdOworICAgICAgaWYgKGxldmVsID4gMCAmJiAhZmls
ZXMtPmVtcHR5KCkpIHsKKyAgICAgICAgLy8gTXVzdCBub3Qgb3ZlcmxhcAorICAgICAgICBhc3Nl
cnQodnNldF8tPmljbXBfLkNvbXBhcmUoKCpmaWxlcylbZmlsZXMtPnNpemUoKS0xXS0+bGFyZ2Vz
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYtPnNtYWxsZXN0KSA8IDAp
OworICAgICAgfQorICAgICAgZi0+cmVmcysrOworICAgICAgZmlsZXMtPnB1c2hfYmFjayhmKTsK
KyAgICB9CisgIH0KK307CisKK1ZlcnNpb25TZXQ6OlZlcnNpb25TZXQoY29uc3Qgc3RkOjpzdHJp
bmcmIGRibmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgT3B0aW9ucyogb3B0aW9u
cywKKyAgICAgICAgICAgICAgICAgICAgICAgVGFibGVDYWNoZSogdGFibGVfY2FjaGUsCisgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEludGVybmFsS2V5Q29tcGFyYXRvciogY21wKQorICAg
IDogZW52XyhvcHRpb25zLT5lbnYpLAorICAgICAgZGJuYW1lXyhkYm5hbWUpLAorICAgICAgb3B0
aW9uc18ob3B0aW9ucyksCisgICAgICB0YWJsZV9jYWNoZV8odGFibGVfY2FjaGUpLAorICAgICAg
aWNtcF8oKmNtcCksCisgICAgICBuZXh0X2ZpbGVfbnVtYmVyXygyKSwKKyAgICAgIG1hbmlmZXN0
X2ZpbGVfbnVtYmVyXygwKSwgIC8vIEZpbGxlZCBieSBSZWNvdmVyKCkKKyAgICAgIGxhc3Rfc2Vx
dWVuY2VfKDApLAorICAgICAgbG9nX251bWJlcl8oMCksCisgICAgICBwcmV2X2xvZ19udW1iZXJf
KDApLAorICAgICAgZGVzY3JpcHRvcl9maWxlXyhOVUxMKSwKKyAgICAgIGRlc2NyaXB0b3JfbG9n
XyhOVUxMKSwKKyAgICAgIGR1bW15X3ZlcnNpb25zXyh0aGlzKSwKKyAgICAgIGN1cnJlbnRfKE5V
TEwpIHsKKyAgQXBwZW5kVmVyc2lvbihuZXcgVmVyc2lvbih0aGlzKSk7Cit9CisKK1ZlcnNpb25T
ZXQ6On5WZXJzaW9uU2V0KCkgeworICBjdXJyZW50Xy0+VW5yZWYoKTsKKyAgYXNzZXJ0KGR1bW15
X3ZlcnNpb25zXy5uZXh0XyA9PSAmZHVtbXlfdmVyc2lvbnNfKTsgIC8vIExpc3QgbXVzdCBiZSBl
bXB0eQorICBkZWxldGUgZGVzY3JpcHRvcl9sb2dfOworICBkZWxldGUgZGVzY3JpcHRvcl9maWxl
XzsKK30KKwordm9pZCBWZXJzaW9uU2V0OjpBcHBlbmRWZXJzaW9uKFZlcnNpb24qIHYpIHsKKyAg
Ly8gTWFrZSAidiIgY3VycmVudAorICBhc3NlcnQodi0+cmVmc18gPT0gMCk7CisgIGFzc2VydCh2
ICE9IGN1cnJlbnRfKTsKKyAgaWYgKGN1cnJlbnRfICE9IE5VTEwpIHsKKyAgICBjdXJyZW50Xy0+
VW5yZWYoKTsKKyAgfQorICBjdXJyZW50XyA9IHY7CisgIHYtPlJlZigpOworCisgIC8vIEFwcGVu
ZCB0byBsaW5rZWQgbGlzdAorICB2LT5wcmV2XyA9IGR1bW15X3ZlcnNpb25zXy5wcmV2XzsKKyAg
di0+bmV4dF8gPSAmZHVtbXlfdmVyc2lvbnNfOworICB2LT5wcmV2Xy0+bmV4dF8gPSB2OworICB2
LT5uZXh0Xy0+cHJldl8gPSB2OworfQorCitTdGF0dXMgVmVyc2lvblNldDo6TG9nQW5kQXBwbHko
VmVyc2lvbkVkaXQqIGVkaXQsIHBvcnQ6Ok11dGV4KiBtdSkgeworICBpZiAoZWRpdC0+aGFzX2xv
Z19udW1iZXJfKSB7CisgICAgYXNzZXJ0KGVkaXQtPmxvZ19udW1iZXJfID49IGxvZ19udW1iZXJf
KTsKKyAgICBhc3NlcnQoZWRpdC0+bG9nX251bWJlcl8gPCBuZXh0X2ZpbGVfbnVtYmVyXyk7Cisg
IH0gZWxzZSB7CisgICAgZWRpdC0+U2V0TG9nTnVtYmVyKGxvZ19udW1iZXJfKTsKKyAgfQorCisg
IGlmICghZWRpdC0+aGFzX3ByZXZfbG9nX251bWJlcl8pIHsKKyAgICBlZGl0LT5TZXRQcmV2TG9n
TnVtYmVyKHByZXZfbG9nX251bWJlcl8pOworICB9CisKKyAgZWRpdC0+U2V0TmV4dEZpbGUobmV4
dF9maWxlX251bWJlcl8pOworICBlZGl0LT5TZXRMYXN0U2VxdWVuY2UobGFzdF9zZXF1ZW5jZV8p
OworCisgIFZlcnNpb24qIHYgPSBuZXcgVmVyc2lvbih0aGlzKTsKKyAgeworICAgIEJ1aWxkZXIg
YnVpbGRlcih0aGlzLCBjdXJyZW50Xyk7CisgICAgYnVpbGRlci5BcHBseShlZGl0KTsKKyAgICBi
dWlsZGVyLlNhdmVUbyh2KTsKKyAgfQorICBGaW5hbGl6ZSh2KTsKKworICAvLyBJbml0aWFsaXpl
IG5ldyBkZXNjcmlwdG9yIGxvZyBmaWxlIGlmIG5lY2Vzc2FyeSBieSBjcmVhdGluZworICAvLyBh
IHRlbXBvcmFyeSBmaWxlIHRoYXQgY29udGFpbnMgYSBzbmFwc2hvdCBvZiB0aGUgY3VycmVudCB2
ZXJzaW9uLgorICBzdGQ6OnN0cmluZyBuZXdfbWFuaWZlc3RfZmlsZTsKKyAgU3RhdHVzIHM7Cisg
IGlmIChkZXNjcmlwdG9yX2xvZ18gPT0gTlVMTCkgeworICAgIC8vIE5vIHJlYXNvbiB0byB1bmxv
Y2sgKm11IGhlcmUgc2luY2Ugd2Ugb25seSBoaXQgdGhpcyBwYXRoIGluIHRoZQorICAgIC8vIGZp
cnN0IGNhbGwgdG8gTG9nQW5kQXBwbHkgKHdoZW4gb3BlbmluZyB0aGUgZGF0YWJhc2UpLgorICAg
IGFzc2VydChkZXNjcmlwdG9yX2ZpbGVfID09IE5VTEwpOworICAgIG5ld19tYW5pZmVzdF9maWxl
ID0gRGVzY3JpcHRvckZpbGVOYW1lKGRibmFtZV8sIG1hbmlmZXN0X2ZpbGVfbnVtYmVyXyk7Cisg
ICAgZWRpdC0+U2V0TmV4dEZpbGUobmV4dF9maWxlX251bWJlcl8pOworICAgIHMgPSBlbnZfLT5O
ZXdXcml0YWJsZUZpbGUobmV3X21hbmlmZXN0X2ZpbGUsICZkZXNjcmlwdG9yX2ZpbGVfKTsKKyAg
ICBpZiAocy5vaygpKSB7CisgICAgICBkZXNjcmlwdG9yX2xvZ18gPSBuZXcgbG9nOjpXcml0ZXIo
ZGVzY3JpcHRvcl9maWxlXyk7CisgICAgICBzID0gV3JpdGVTbmFwc2hvdChkZXNjcmlwdG9yX2xv
Z18pOworICAgIH0KKyAgfQorCisgIC8vIFVubG9jayBkdXJpbmcgZXhwZW5zaXZlIE1BTklGRVNU
IGxvZyB3cml0ZQorICB7CisgICAgbXUtPlVubG9jaygpOworCisgICAgLy8gV3JpdGUgbmV3IHJl
Y29yZCB0byBNQU5JRkVTVCBsb2cKKyAgICBpZiAocy5vaygpKSB7CisgICAgICBzdGQ6OnN0cmlu
ZyByZWNvcmQ7CisgICAgICBlZGl0LT5FbmNvZGVUbygmcmVjb3JkKTsKKyAgICAgIHMgPSBkZXNj
cmlwdG9yX2xvZ18tPkFkZFJlY29yZChyZWNvcmQpOworICAgICAgaWYgKHMub2soKSkgeworICAg
ICAgICBzID0gZGVzY3JpcHRvcl9maWxlXy0+U3luYygpOworICAgICAgfQorICAgICAgaWYgKCFz
Lm9rKCkpIHsKKyAgICAgICAgTG9nKG9wdGlvbnNfLT5pbmZvX2xvZywgIk1BTklGRVNUIHdyaXRl
OiAlc1xuIiwgcy5Ub1N0cmluZygpLmNfc3RyKCkpOworICAgICAgICBpZiAoTWFuaWZlc3RDb250
YWlucyhyZWNvcmQpKSB7CisgICAgICAgICAgTG9nKG9wdGlvbnNfLT5pbmZvX2xvZywKKyAgICAg
ICAgICAgICAgIk1BTklGRVNUIGNvbnRhaW5zIGxvZyByZWNvcmQgZGVzcGl0ZSBlcnJvcjsgYWR2
YW5jaW5nIHRvIG5ldyAiCisgICAgICAgICAgICAgICJ2ZXJzaW9uIHRvIHByZXZlbnQgbWlzbWF0
Y2ggYmV0d2VlbiBpbi1tZW1vcnkgYW5kIGxvZ2dlZCBzdGF0ZSIpOworICAgICAgICAgIHMgPSBT
dGF0dXM6Ok9LKCk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICAvLyBJZiB3ZSBq
dXN0IGNyZWF0ZWQgYSBuZXcgZGVzY3JpcHRvciBmaWxlLCBpbnN0YWxsIGl0IGJ5IHdyaXRpbmcg
YQorICAgIC8vIG5ldyBDVVJSRU5UIGZpbGUgdGhhdCBwb2ludHMgdG8gaXQuCisgICAgaWYgKHMu
b2soKSAmJiAhbmV3X21hbmlmZXN0X2ZpbGUuZW1wdHkoKSkgeworICAgICAgcyA9IFNldEN1cnJl
bnRGaWxlKGVudl8sIGRibmFtZV8sIG1hbmlmZXN0X2ZpbGVfbnVtYmVyXyk7CisgICAgICAvLyBO
byBuZWVkIHRvIGRvdWJsZS1jaGVjayBNQU5JRkVTVCBpbiBjYXNlIG9mIGVycm9yIHNpbmNlIGl0
CisgICAgICAvLyB3aWxsIGJlIGRpc2NhcmRlZCBiZWxvdy4KKyAgICB9CisKKyAgICBtdS0+TG9j
aygpOworICB9CisKKyAgLy8gSW5zdGFsbCB0aGUgbmV3IHZlcnNpb24KKyAgaWYgKHMub2soKSkg
eworICAgIEFwcGVuZFZlcnNpb24odik7CisgICAgbG9nX251bWJlcl8gPSBlZGl0LT5sb2dfbnVt
YmVyXzsKKyAgICBwcmV2X2xvZ19udW1iZXJfID0gZWRpdC0+cHJldl9sb2dfbnVtYmVyXzsKKyAg
fSBlbHNlIHsKKyAgICBkZWxldGUgdjsKKyAgICBpZiAoIW5ld19tYW5pZmVzdF9maWxlLmVtcHR5
KCkpIHsKKyAgICAgIGRlbGV0ZSBkZXNjcmlwdG9yX2xvZ187CisgICAgICBkZWxldGUgZGVzY3Jp
cHRvcl9maWxlXzsKKyAgICAgIGRlc2NyaXB0b3JfbG9nXyA9IE5VTEw7CisgICAgICBkZXNjcmlw
dG9yX2ZpbGVfID0gTlVMTDsKKyAgICAgIGVudl8tPkRlbGV0ZUZpbGUobmV3X21hbmlmZXN0X2Zp
bGUpOworICAgIH0KKyAgfQorCisgIHJldHVybiBzOworfQorCitTdGF0dXMgVmVyc2lvblNldDo6
UmVjb3ZlcigpIHsKKyAgc3RydWN0IExvZ1JlcG9ydGVyIDogcHVibGljIGxvZzo6UmVhZGVyOjpS
ZXBvcnRlciB7CisgICAgU3RhdHVzKiBzdGF0dXM7CisgICAgdmlydHVhbCB2b2lkIENvcnJ1cHRp
b24oc2l6ZV90IGJ5dGVzLCBjb25zdCBTdGF0dXMmIHMpIHsKKyAgICAgIGlmICh0aGlzLT5zdGF0
dXMtPm9rKCkpICp0aGlzLT5zdGF0dXMgPSBzOworICAgIH0KKyAgfTsKKworICAvLyBSZWFkICJD
VVJSRU5UIiBmaWxlLCB3aGljaCBjb250YWlucyBhIHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgbWFu
aWZlc3QgZmlsZQorICBzdGQ6OnN0cmluZyBjdXJyZW50OworICBTdGF0dXMgcyA9IFJlYWRGaWxl
VG9TdHJpbmcoZW52XywgQ3VycmVudEZpbGVOYW1lKGRibmFtZV8pLCAmY3VycmVudCk7CisgIGlm
ICghcy5vaygpKSB7CisgICAgcmV0dXJuIHM7CisgIH0KKyAgaWYgKGN1cnJlbnQuZW1wdHkoKSB8
fCBjdXJyZW50W2N1cnJlbnQuc2l6ZSgpLTFdICE9ICdcbicpIHsKKyAgICByZXR1cm4gU3RhdHVz
OjpDb3JydXB0aW9uKCJDVVJSRU5UIGZpbGUgZG9lcyBub3QgZW5kIHdpdGggbmV3bGluZSIpOwor
ICB9CisgIGN1cnJlbnQucmVzaXplKGN1cnJlbnQuc2l6ZSgpIC0gMSk7CisKKyAgc3RkOjpzdHJp
bmcgZHNjbmFtZSA9IGRibmFtZV8gKyAiLyIgKyBjdXJyZW50OworICBTZXF1ZW50aWFsRmlsZSog
ZmlsZTsKKyAgcyA9IGVudl8tPk5ld1NlcXVlbnRpYWxGaWxlKGRzY25hbWUsICZmaWxlKTsKKyAg
aWYgKCFzLm9rKCkpIHsKKyAgICByZXR1cm4gczsKKyAgfQorCisgIGJvb2wgaGF2ZV9sb2dfbnVt
YmVyID0gZmFsc2U7CisgIGJvb2wgaGF2ZV9wcmV2X2xvZ19udW1iZXIgPSBmYWxzZTsKKyAgYm9v
bCBoYXZlX25leHRfZmlsZSA9IGZhbHNlOworICBib29sIGhhdmVfbGFzdF9zZXF1ZW5jZSA9IGZh
bHNlOworICB1aW50NjRfdCBuZXh0X2ZpbGUgPSAwOworICB1aW50NjRfdCBsYXN0X3NlcXVlbmNl
ID0gMDsKKyAgdWludDY0X3QgbG9nX251bWJlciA9IDA7CisgIHVpbnQ2NF90IHByZXZfbG9nX251
bWJlciA9IDA7CisgIEJ1aWxkZXIgYnVpbGRlcih0aGlzLCBjdXJyZW50Xyk7CisKKyAgeworICAg
IExvZ1JlcG9ydGVyIHJlcG9ydGVyOworICAgIHJlcG9ydGVyLnN0YXR1cyA9ICZzOworICAgIGxv
Zzo6UmVhZGVyIHJlYWRlcihmaWxlLCAmcmVwb3J0ZXIsIHRydWUvKmNoZWNrc3VtKi8sIDAvKmlu
aXRpYWxfb2Zmc2V0Ki8pOworICAgIFNsaWNlIHJlY29yZDsKKyAgICBzdGQ6OnN0cmluZyBzY3Jh
dGNoOworICAgIHdoaWxlIChyZWFkZXIuUmVhZFJlY29yZCgmcmVjb3JkLCAmc2NyYXRjaCkgJiYg
cy5vaygpKSB7CisgICAgICBWZXJzaW9uRWRpdCBlZGl0OworICAgICAgcyA9IGVkaXQuRGVjb2Rl
RnJvbShyZWNvcmQpOworICAgICAgaWYgKHMub2soKSkgeworICAgICAgICBpZiAoZWRpdC5oYXNf
Y29tcGFyYXRvcl8gJiYKKyAgICAgICAgICAgIGVkaXQuY29tcGFyYXRvcl8gIT0gaWNtcF8udXNl
cl9jb21wYXJhdG9yKCktPk5hbWUoKSkgeworICAgICAgICAgIHMgPSBTdGF0dXM6OkludmFsaWRB
cmd1bWVudCgKKyAgICAgICAgICAgICAgZWRpdC5jb21wYXJhdG9yXyArICIgZG9lcyBub3QgbWF0
Y2ggZXhpc3RpbmcgY29tcGFyYXRvciAiLAorICAgICAgICAgICAgICBpY21wXy51c2VyX2NvbXBh
cmF0b3IoKS0+TmFtZSgpKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAocy5vaygp
KSB7CisgICAgICAgIGJ1aWxkZXIuQXBwbHkoJmVkaXQpOworICAgICAgfQorCisgICAgICBpZiAo
ZWRpdC5oYXNfbG9nX251bWJlcl8pIHsKKyAgICAgICAgbG9nX251bWJlciA9IGVkaXQubG9nX251
bWJlcl87CisgICAgICAgIGhhdmVfbG9nX251bWJlciA9IHRydWU7CisgICAgICB9CisKKyAgICAg
IGlmIChlZGl0Lmhhc19wcmV2X2xvZ19udW1iZXJfKSB7CisgICAgICAgIHByZXZfbG9nX251bWJl
ciA9IGVkaXQucHJldl9sb2dfbnVtYmVyXzsKKyAgICAgICAgaGF2ZV9wcmV2X2xvZ19udW1iZXIg
PSB0cnVlOworICAgICAgfQorCisgICAgICBpZiAoZWRpdC5oYXNfbmV4dF9maWxlX251bWJlcl8p
IHsKKyAgICAgICAgbmV4dF9maWxlID0gZWRpdC5uZXh0X2ZpbGVfbnVtYmVyXzsKKyAgICAgICAg
aGF2ZV9uZXh0X2ZpbGUgPSB0cnVlOworICAgICAgfQorCisgICAgICBpZiAoZWRpdC5oYXNfbGFz
dF9zZXF1ZW5jZV8pIHsKKyAgICAgICAgbGFzdF9zZXF1ZW5jZSA9IGVkaXQubGFzdF9zZXF1ZW5j
ZV87CisgICAgICAgIGhhdmVfbGFzdF9zZXF1ZW5jZSA9IHRydWU7CisgICAgICB9CisgICAgfQor
ICB9CisgIGRlbGV0ZSBmaWxlOworICBmaWxlID0gTlVMTDsKKworICBpZiAocy5vaygpKSB7Cisg
ICAgaWYgKCFoYXZlX25leHRfZmlsZSkgeworICAgICAgcyA9IFN0YXR1czo6Q29ycnVwdGlvbigi
bm8gbWV0YS1uZXh0ZmlsZSBlbnRyeSBpbiBkZXNjcmlwdG9yIik7CisgICAgfSBlbHNlIGlmICgh
aGF2ZV9sb2dfbnVtYmVyKSB7CisgICAgICBzID0gU3RhdHVzOjpDb3JydXB0aW9uKCJubyBtZXRh
LWxvZ251bWJlciBlbnRyeSBpbiBkZXNjcmlwdG9yIik7CisgICAgfSBlbHNlIGlmICghaGF2ZV9s
YXN0X3NlcXVlbmNlKSB7CisgICAgICBzID0gU3RhdHVzOjpDb3JydXB0aW9uKCJubyBsYXN0LXNl
cXVlbmNlLW51bWJlciBlbnRyeSBpbiBkZXNjcmlwdG9yIik7CisgICAgfQorCisgICAgaWYgKCFo
YXZlX3ByZXZfbG9nX251bWJlcikgeworICAgICAgcHJldl9sb2dfbnVtYmVyID0gMDsKKyAgICB9
CisKKyAgICBNYXJrRmlsZU51bWJlclVzZWQocHJldl9sb2dfbnVtYmVyKTsKKyAgICBNYXJrRmls
ZU51bWJlclVzZWQobG9nX251bWJlcik7CisgIH0KKworICBpZiAocy5vaygpKSB7CisgICAgVmVy
c2lvbiogdiA9IG5ldyBWZXJzaW9uKHRoaXMpOworICAgIGJ1aWxkZXIuU2F2ZVRvKHYpOworICAg
IC8vIEluc3RhbGwgcmVjb3ZlcmVkIHZlcnNpb24KKyAgICBGaW5hbGl6ZSh2KTsKKyAgICBBcHBl
bmRWZXJzaW9uKHYpOworICAgIG1hbmlmZXN0X2ZpbGVfbnVtYmVyXyA9IG5leHRfZmlsZTsKKyAg
ICBuZXh0X2ZpbGVfbnVtYmVyXyA9IG5leHRfZmlsZSArIDE7CisgICAgbGFzdF9zZXF1ZW5jZV8g
PSBsYXN0X3NlcXVlbmNlOworICAgIGxvZ19udW1iZXJfID0gbG9nX251bWJlcjsKKyAgICBwcmV2
X2xvZ19udW1iZXJfID0gcHJldl9sb2dfbnVtYmVyOworICB9CisKKyAgcmV0dXJuIHM7Cit9CisK
K3ZvaWQgVmVyc2lvblNldDo6TWFya0ZpbGVOdW1iZXJVc2VkKHVpbnQ2NF90IG51bWJlcikgewor
ICBpZiAobmV4dF9maWxlX251bWJlcl8gPD0gbnVtYmVyKSB7CisgICAgbmV4dF9maWxlX251bWJl
cl8gPSBudW1iZXIgKyAxOworICB9Cit9CisKK3ZvaWQgVmVyc2lvblNldDo6RmluYWxpemUoVmVy
c2lvbiogdikgeworICAvLyBQcmVjb21wdXRlZCBiZXN0IGxldmVsIGZvciBuZXh0IGNvbXBhY3Rp
b24KKyAgaW50IGJlc3RfbGV2ZWwgPSAtMTsKKyAgZG91YmxlIGJlc3Rfc2NvcmUgPSAtMTsKKwor
ICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgY29uZmlnOjprTnVtTGV2ZWxzLTE7IGxldmVs
KyspIHsKKyAgICBkb3VibGUgc2NvcmU7CisgICAgaWYgKGxldmVsID09IDApIHsKKyAgICAgIC8v
IFdlIHRyZWF0IGxldmVsLTAgc3BlY2lhbGx5IGJ5IGJvdW5kaW5nIHRoZSBudW1iZXIgb2YgZmls
ZXMKKyAgICAgIC8vIGluc3RlYWQgb2YgbnVtYmVyIG9mIGJ5dGVzIGZvciB0d28gcmVhc29uczoK
KyAgICAgIC8vCisgICAgICAvLyAoMSkgV2l0aCBsYXJnZXIgd3JpdGUtYnVmZmVyIHNpemVzLCBp
dCBpcyBuaWNlIG5vdCB0byBkbyB0b28KKyAgICAgIC8vIG1hbnkgbGV2ZWwtMCBjb21wYWN0aW9u
cy4KKyAgICAgIC8vCisgICAgICAvLyAoMikgVGhlIGZpbGVzIGluIGxldmVsLTAgYXJlIG1lcmdl
ZCBvbiBldmVyeSByZWFkIGFuZAorICAgICAgLy8gdGhlcmVmb3JlIHdlIHdpc2ggdG8gYXZvaWQg
dG9vIG1hbnkgZmlsZXMgd2hlbiB0aGUgaW5kaXZpZHVhbAorICAgICAgLy8gZmlsZSBzaXplIGlz
IHNtYWxsIChwZXJoYXBzIGJlY2F1c2Ugb2YgYSBzbWFsbCB3cml0ZS1idWZmZXIKKyAgICAgIC8v
IHNldHRpbmcsIG9yIHZlcnkgaGlnaCBjb21wcmVzc2lvbiByYXRpb3MsIG9yIGxvdHMgb2YKKyAg
ICAgIC8vIG92ZXJ3cml0ZXMvZGVsZXRpb25zKS4KKyAgICAgIHNjb3JlID0gdi0+ZmlsZXNfW2xl
dmVsXS5zaXplKCkgLworICAgICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4oY29uZmlnOjprTDBf
Q29tcGFjdGlvblRyaWdnZXIpOworICAgIH0gZWxzZSB7CisgICAgICAvLyBDb21wdXRlIHRoZSBy
YXRpbyBvZiBjdXJyZW50IHNpemUgdG8gc2l6ZSBsaW1pdC4KKyAgICAgIGNvbnN0IHVpbnQ2NF90
IGxldmVsX2J5dGVzID0gVG90YWxGaWxlU2l6ZSh2LT5maWxlc19bbGV2ZWxdKTsKKyAgICAgIHNj
b3JlID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihsZXZlbF9ieXRlcykgLyBNYXhCeXRlc0ZvckxldmVs
KGxldmVsKTsKKyAgICB9CisKKyAgICBpZiAoc2NvcmUgPiBiZXN0X3Njb3JlKSB7CisgICAgICBi
ZXN0X2xldmVsID0gbGV2ZWw7CisgICAgICBiZXN0X3Njb3JlID0gc2NvcmU7CisgICAgfQorICB9
CisKKyAgdi0+Y29tcGFjdGlvbl9sZXZlbF8gPSBiZXN0X2xldmVsOworICB2LT5jb21wYWN0aW9u
X3Njb3JlXyA9IGJlc3Rfc2NvcmU7Cit9CisKK1N0YXR1cyBWZXJzaW9uU2V0OjpXcml0ZVNuYXBz
aG90KGxvZzo6V3JpdGVyKiBsb2cpIHsKKyAgLy8gVE9ETzogQnJlYWsgdXAgaW50byBtdWx0aXBs
ZSByZWNvcmRzIHRvIHJlZHVjZSBtZW1vcnkgdXNhZ2Ugb24gcmVjb3Zlcnk/CisKKyAgLy8gU2F2
ZSBtZXRhZGF0YQorICBWZXJzaW9uRWRpdCBlZGl0OworICBlZGl0LlNldENvbXBhcmF0b3JOYW1l
KGljbXBfLnVzZXJfY29tcGFyYXRvcigpLT5OYW1lKCkpOworCisgIC8vIFNhdmUgY29tcGFjdGlv
biBwb2ludGVycworICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgY29uZmlnOjprTnVtTGV2
ZWxzOyBsZXZlbCsrKSB7CisgICAgaWYgKCFjb21wYWN0X3BvaW50ZXJfW2xldmVsXS5lbXB0eSgp
KSB7CisgICAgICBJbnRlcm5hbEtleSBrZXk7CisgICAgICBrZXkuRGVjb2RlRnJvbShjb21wYWN0
X3BvaW50ZXJfW2xldmVsXSk7CisgICAgICBlZGl0LlNldENvbXBhY3RQb2ludGVyKGxldmVsLCBr
ZXkpOworICAgIH0KKyAgfQorCisgIC8vIFNhdmUgZmlsZXMKKyAgZm9yIChpbnQgbGV2ZWwgPSAw
OyBsZXZlbCA8IGNvbmZpZzo6a051bUxldmVsczsgbGV2ZWwrKykgeworICAgIGNvbnN0IHN0ZDo6
dmVjdG9yPEZpbGVNZXRhRGF0YSo+JiBmaWxlcyA9IGN1cnJlbnRfLT5maWxlc19bbGV2ZWxdOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgIGNv
bnN0IEZpbGVNZXRhRGF0YSogZiA9IGZpbGVzW2ldOworICAgICAgZWRpdC5BZGRGaWxlKGxldmVs
LCBmLT5udW1iZXIsIGYtPmZpbGVfc2l6ZSwgZi0+c21hbGxlc3QsIGYtPmxhcmdlc3QpOworICAg
IH0KKyAgfQorCisgIHN0ZDo6c3RyaW5nIHJlY29yZDsKKyAgZWRpdC5FbmNvZGVUbygmcmVjb3Jk
KTsKKyAgcmV0dXJuIGxvZy0+QWRkUmVjb3JkKHJlY29yZCk7Cit9CisKK2ludCBWZXJzaW9uU2V0
OjpOdW1MZXZlbEZpbGVzKGludCBsZXZlbCkgY29uc3QgeworICBhc3NlcnQobGV2ZWwgPj0gMCk7
CisgIGFzc2VydChsZXZlbCA8IGNvbmZpZzo6a051bUxldmVscyk7CisgIHJldHVybiBjdXJyZW50
Xy0+ZmlsZXNfW2xldmVsXS5zaXplKCk7Cit9CisKK2NvbnN0IGNoYXIqIFZlcnNpb25TZXQ6Okxl
dmVsU3VtbWFyeShMZXZlbFN1bW1hcnlTdG9yYWdlKiBzY3JhdGNoKSBjb25zdCB7CisgIC8vIFVw
ZGF0ZSBjb2RlIGlmIGtOdW1MZXZlbHMgY2hhbmdlcworICBhc3NlcnQoY29uZmlnOjprTnVtTGV2
ZWxzID09IDcpOworICBzbnByaW50ZihzY3JhdGNoLT5idWZmZXIsIHNpemVvZihzY3JhdGNoLT5i
dWZmZXIpLAorICAgICAgICAgICAiZmlsZXNbICVkICVkICVkICVkICVkICVkICVkIF0iLAorICAg
ICAgICAgICBpbnQoY3VycmVudF8tPmZpbGVzX1swXS5zaXplKCkpLAorICAgICAgICAgICBpbnQo
Y3VycmVudF8tPmZpbGVzX1sxXS5zaXplKCkpLAorICAgICAgICAgICBpbnQoY3VycmVudF8tPmZp
bGVzX1syXS5zaXplKCkpLAorICAgICAgICAgICBpbnQoY3VycmVudF8tPmZpbGVzX1szXS5zaXpl
KCkpLAorICAgICAgICAgICBpbnQoY3VycmVudF8tPmZpbGVzX1s0XS5zaXplKCkpLAorICAgICAg
ICAgICBpbnQoY3VycmVudF8tPmZpbGVzX1s1XS5zaXplKCkpLAorICAgICAgICAgICBpbnQoY3Vy
cmVudF8tPmZpbGVzX1s2XS5zaXplKCkpKTsKKyAgcmV0dXJuIHNjcmF0Y2gtPmJ1ZmZlcjsKK30K
KworLy8gUmV0dXJuIHRydWUgaWZmIHRoZSBtYW5pZmVzdCBjb250YWlucyB0aGUgc3BlY2lmaWVk
IHJlY29yZC4KK2Jvb2wgVmVyc2lvblNldDo6TWFuaWZlc3RDb250YWlucyhjb25zdCBzdGQ6OnN0
cmluZyYgcmVjb3JkKSBjb25zdCB7CisgIHN0ZDo6c3RyaW5nIGZuYW1lID0gRGVzY3JpcHRvckZp
bGVOYW1lKGRibmFtZV8sIG1hbmlmZXN0X2ZpbGVfbnVtYmVyXyk7CisgIExvZyhvcHRpb25zXy0+
aW5mb19sb2csICJNYW5pZmVzdENvbnRhaW5zOiBjaGVja2luZyAlc1xuIiwgZm5hbWUuY19zdHIo
KSk7CisgIFNlcXVlbnRpYWxGaWxlKiBmaWxlID0gTlVMTDsKKyAgU3RhdHVzIHMgPSBlbnZfLT5O
ZXdTZXF1ZW50aWFsRmlsZShmbmFtZSwgJmZpbGUpOworICBpZiAoIXMub2soKSkgeworICAgIExv
ZyhvcHRpb25zXy0+aW5mb19sb2csICJNYW5pZmVzdENvbnRhaW5zOiAlc1xuIiwgcy5Ub1N0cmlu
ZygpLmNfc3RyKCkpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICBsb2c6OlJlYWRlciByZWFk
ZXIoZmlsZSwgTlVMTCwgdHJ1ZS8qY2hlY2tzdW0qLywgMCk7CisgIFNsaWNlIHI7CisgIHN0ZDo6
c3RyaW5nIHNjcmF0Y2g7CisgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgIHdoaWxlIChyZWFkZXIu
UmVhZFJlY29yZCgmciwgJnNjcmF0Y2gpKSB7CisgICAgaWYgKHIgPT0gU2xpY2UocmVjb3JkKSkg
eworICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICBkZWxl
dGUgZmlsZTsKKyAgTG9nKG9wdGlvbnNfLT5pbmZvX2xvZywgIk1hbmlmZXN0Q29udGFpbnM6IHJl
c3VsdCA9ICVkXG4iLCByZXN1bHQgPyAxIDogMCk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3Vp
bnQ2NF90IFZlcnNpb25TZXQ6OkFwcHJveGltYXRlT2Zmc2V0T2YoVmVyc2lvbiogdiwgY29uc3Qg
SW50ZXJuYWxLZXkmIGlrZXkpIHsKKyAgdWludDY0X3QgcmVzdWx0ID0gMDsKKyAgZm9yIChpbnQg
bGV2ZWwgPSAwOyBsZXZlbCA8IGNvbmZpZzo6a051bUxldmVsczsgbGV2ZWwrKykgeworICAgIGNv
bnN0IHN0ZDo6dmVjdG9yPEZpbGVNZXRhRGF0YSo+JiBmaWxlcyA9IHYtPmZpbGVzX1tsZXZlbF07
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxlcy5zaXplKCk7IGkrKykgeworICAgICAg
aWYgKGljbXBfLkNvbXBhcmUoZmlsZXNbaV0tPmxhcmdlc3QsIGlrZXkpIDw9IDApIHsKKyAgICAg
ICAgLy8gRW50aXJlIGZpbGUgaXMgYmVmb3JlICJpa2V5Iiwgc28ganVzdCBhZGQgdGhlIGZpbGUg
c2l6ZQorICAgICAgICByZXN1bHQgKz0gZmlsZXNbaV0tPmZpbGVfc2l6ZTsKKyAgICAgIH0gZWxz
ZSBpZiAoaWNtcF8uQ29tcGFyZShmaWxlc1tpXS0+c21hbGxlc3QsIGlrZXkpID4gMCkgeworICAg
ICAgICAvLyBFbnRpcmUgZmlsZSBpcyBhZnRlciAiaWtleSIsIHNvIGlnbm9yZQorICAgICAgICBp
ZiAobGV2ZWwgPiAwKSB7CisgICAgICAgICAgLy8gRmlsZXMgb3RoZXIgdGhhbiBsZXZlbCAwIGFy
ZSBzb3J0ZWQgYnkgbWV0YS0+c21hbGxlc3QsIHNvCisgICAgICAgICAgLy8gbm8gZnVydGhlciBm
aWxlcyBpbiB0aGlzIGxldmVsIHdpbGwgY29udGFpbiBkYXRhIGZvcgorICAgICAgICAgIC8vICJp
a2V5Ii4KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgLy8gImlrZXkiIGZhbGxzIGluIHRoZSByYW5nZSBmb3IgdGhpcyB0YWJsZS4gIEFkZCB0aGUK
KyAgICAgICAgLy8gYXBwcm94aW1hdGUgb2Zmc2V0IG9mICJpa2V5IiB3aXRoaW4gdGhlIHRhYmxl
LgorICAgICAgICBUYWJsZSogdGFibGVwdHI7CisgICAgICAgIEl0ZXJhdG9yKiBpdGVyID0gdGFi
bGVfY2FjaGVfLT5OZXdJdGVyYXRvcigKKyAgICAgICAgICAgIFJlYWRPcHRpb25zKCksIGZpbGVz
W2ldLT5udW1iZXIsIGZpbGVzW2ldLT5maWxlX3NpemUsICZ0YWJsZXB0cik7CisgICAgICAgIGlm
ICh0YWJsZXB0ciAhPSBOVUxMKSB7CisgICAgICAgICAgcmVzdWx0ICs9IHRhYmxlcHRyLT5BcHBy
b3hpbWF0ZU9mZnNldE9mKGlrZXkuRW5jb2RlKCkpOworICAgICAgICB9CisgICAgICAgIGRlbGV0
ZSBpdGVyOworICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCit2b2lk
IFZlcnNpb25TZXQ6OkFkZExpdmVGaWxlcyhzdGQ6OnNldDx1aW50NjRfdD4qIGxpdmUpIHsKKyAg
Zm9yIChWZXJzaW9uKiB2ID0gZHVtbXlfdmVyc2lvbnNfLm5leHRfOworICAgICAgIHYgIT0gJmR1
bW15X3ZlcnNpb25zXzsKKyAgICAgICB2ID0gdi0+bmV4dF8pIHsKKyAgICBmb3IgKGludCBsZXZl
bCA9IDA7IGxldmVsIDwgY29uZmlnOjprTnVtTGV2ZWxzOyBsZXZlbCsrKSB7CisgICAgICBjb25z
dCBzdGQ6OnZlY3RvcjxGaWxlTWV0YURhdGEqPiYgZmlsZXMgPSB2LT5maWxlc19bbGV2ZWxdOwor
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxlcy5zaXplKCk7IGkrKykgeworICAgICAg
ICBsaXZlLT5pbnNlcnQoZmlsZXNbaV0tPm51bWJlcik7CisgICAgICB9CisgICAgfQorICB9Cit9
CisKK2ludDY0X3QgVmVyc2lvblNldDo6TnVtTGV2ZWxCeXRlcyhpbnQgbGV2ZWwpIGNvbnN0IHsK
KyAgYXNzZXJ0KGxldmVsID49IDApOworICBhc3NlcnQobGV2ZWwgPCBjb25maWc6OmtOdW1MZXZl
bHMpOworICByZXR1cm4gVG90YWxGaWxlU2l6ZShjdXJyZW50Xy0+ZmlsZXNfW2xldmVsXSk7Cit9
CisKK2ludDY0X3QgVmVyc2lvblNldDo6TWF4TmV4dExldmVsT3ZlcmxhcHBpbmdCeXRlcygpIHsK
KyAgaW50NjRfdCByZXN1bHQgPSAwOworICBzdGQ6OnZlY3RvcjxGaWxlTWV0YURhdGEqPiBvdmVy
bGFwczsKKyAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8IGNvbmZpZzo6a051bUxldmVscyAt
IDE7IGxldmVsKyspIHsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGN1cnJlbnRfLT5maWxl
c19bbGV2ZWxdLnNpemUoKTsgaSsrKSB7CisgICAgICBjb25zdCBGaWxlTWV0YURhdGEqIGYgPSBj
dXJyZW50Xy0+ZmlsZXNfW2xldmVsXVtpXTsKKyAgICAgIGN1cnJlbnRfLT5HZXRPdmVybGFwcGlu
Z0lucHV0cyhsZXZlbCsxLCAmZi0+c21hbGxlc3QsICZmLT5sYXJnZXN0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZvdmVybGFwcyk7CisgICAgICBjb25zdCBpbnQ2NF90
IHN1bSA9IFRvdGFsRmlsZVNpemUob3ZlcmxhcHMpOworICAgICAgaWYgKHN1bSA+IHJlc3VsdCkg
eworICAgICAgICByZXN1bHQgPSBzdW07CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiBy
ZXN1bHQ7Cit9CisKKy8vIFN0b3JlcyB0aGUgbWluaW1hbCByYW5nZSB0aGF0IGNvdmVycyBhbGwg
ZW50cmllcyBpbiBpbnB1dHMgaW4KKy8vICpzbWFsbGVzdCwgKmxhcmdlc3QuCisvLyBSRVFVSVJF
UzogaW5wdXRzIGlzIG5vdCBlbXB0eQordm9pZCBWZXJzaW9uU2V0OjpHZXRSYW5nZShjb25zdCBz
dGQ6OnZlY3RvcjxGaWxlTWV0YURhdGEqPiYgaW5wdXRzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICBJbnRlcm5hbEtleSogc21hbGxlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIElu
dGVybmFsS2V5KiBsYXJnZXN0KSB7CisgIGFzc2VydCghaW5wdXRzLmVtcHR5KCkpOworICBzbWFs
bGVzdC0+Q2xlYXIoKTsKKyAgbGFyZ2VzdC0+Q2xlYXIoKTsKKyAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBpbnB1dHMuc2l6ZSgpOyBpKyspIHsKKyAgICBGaWxlTWV0YURhdGEqIGYgPSBpbnB1dHNb
aV07CisgICAgaWYgKGkgPT0gMCkgeworICAgICAgKnNtYWxsZXN0ID0gZi0+c21hbGxlc3Q7Cisg
ICAgICAqbGFyZ2VzdCA9IGYtPmxhcmdlc3Q7CisgICAgfSBlbHNlIHsKKyAgICAgIGlmIChpY21w
Xy5Db21wYXJlKGYtPnNtYWxsZXN0LCAqc21hbGxlc3QpIDwgMCkgeworICAgICAgICAqc21hbGxl
c3QgPSBmLT5zbWFsbGVzdDsKKyAgICAgIH0KKyAgICAgIGlmIChpY21wXy5Db21wYXJlKGYtPmxh
cmdlc3QsICpsYXJnZXN0KSA+IDApIHsKKyAgICAgICAgKmxhcmdlc3QgPSBmLT5sYXJnZXN0Owor
ICAgICAgfQorICAgIH0KKyAgfQorfQorCisvLyBTdG9yZXMgdGhlIG1pbmltYWwgcmFuZ2UgdGhh
dCBjb3ZlcnMgYWxsIGVudHJpZXMgaW4gaW5wdXRzMSBhbmQgaW5wdXRzMgorLy8gaW4gKnNtYWxs
ZXN0LCAqbGFyZ2VzdC4KKy8vIFJFUVVJUkVTOiBpbnB1dHMgaXMgbm90IGVtcHR5Cit2b2lkIFZl
cnNpb25TZXQ6OkdldFJhbmdlMihjb25zdCBzdGQ6OnZlY3RvcjxGaWxlTWV0YURhdGEqPiYgaW5w
dXRzMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEZpbGVN
ZXRhRGF0YSo+JiBpbnB1dHMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWxL
ZXkqIHNtYWxsZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWxLZXkqIGxh
cmdlc3QpIHsKKyAgc3RkOjp2ZWN0b3I8RmlsZU1ldGFEYXRhKj4gYWxsID0gaW5wdXRzMTsKKyAg
YWxsLmluc2VydChhbGwuZW5kKCksIGlucHV0czIuYmVnaW4oKSwgaW5wdXRzMi5lbmQoKSk7Cisg
IEdldFJhbmdlKGFsbCwgc21hbGxlc3QsIGxhcmdlc3QpOworfQorCitJdGVyYXRvciogVmVyc2lv
blNldDo6TWFrZUlucHV0SXRlcmF0b3IoQ29tcGFjdGlvbiogYykgeworICBSZWFkT3B0aW9ucyBv
cHRpb25zOworICBvcHRpb25zLnZlcmlmeV9jaGVja3N1bXMgPSBvcHRpb25zXy0+cGFyYW5vaWRf
Y2hlY2tzOworICBvcHRpb25zLmZpbGxfY2FjaGUgPSBmYWxzZTsKKworICAvLyBMZXZlbC0wIGZp
bGVzIGhhdmUgdG8gYmUgbWVyZ2VkIHRvZ2V0aGVyLiAgRm9yIG90aGVyIGxldmVscywKKyAgLy8g
d2Ugd2lsbCBtYWtlIGEgY29uY2F0ZW5hdGluZyBpdGVyYXRvciBwZXIgbGV2ZWwuCisgIC8vIFRP
RE8ob3B0KTogdXNlIGNvbmNhdGVuYXRpbmcgaXRlcmF0b3IgZm9yIGxldmVsLTAgaWYgdGhlcmUg
aXMgbm8gb3ZlcmxhcAorICBjb25zdCBpbnQgc3BhY2UgPSAoYy0+bGV2ZWwoKSA9PSAwID8gYy0+
aW5wdXRzX1swXS5zaXplKCkgKyAxIDogMik7CisgIEl0ZXJhdG9yKiogbGlzdCA9IG5ldyBJdGVy
YXRvcipbc3BhY2VdOworICBpbnQgbnVtID0gMDsKKyAgZm9yIChpbnQgd2hpY2ggPSAwOyB3aGlj
aCA8IDI7IHdoaWNoKyspIHsKKyAgICBpZiAoIWMtPmlucHV0c19bd2hpY2hdLmVtcHR5KCkpIHsK
KyAgICAgIGlmIChjLT5sZXZlbCgpICsgd2hpY2ggPT0gMCkgeworICAgICAgICBjb25zdCBzdGQ6
OnZlY3RvcjxGaWxlTWV0YURhdGEqPiYgZmlsZXMgPSBjLT5pbnB1dHNfW3doaWNoXTsKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxlcy5zaXplKCk7IGkrKykgeworICAgICAgICAg
IGxpc3RbbnVtKytdID0gdGFibGVfY2FjaGVfLT5OZXdJdGVyYXRvcigKKyAgICAgICAgICAgICAg
b3B0aW9ucywgZmlsZXNbaV0tPm51bWJlciwgZmlsZXNbaV0tPmZpbGVfc2l6ZSk7CisgICAgICAg
IH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIC8vIENyZWF0ZSBjb25jYXRlbmF0aW5nIGl0ZXJh
dG9yIGZvciB0aGUgZmlsZXMgZnJvbSB0aGlzIGxldmVsCisgICAgICAgIGxpc3RbbnVtKytdID0g
TmV3VHdvTGV2ZWxJdGVyYXRvcigKKyAgICAgICAgICAgIG5ldyBWZXJzaW9uOjpMZXZlbEZpbGVO
dW1JdGVyYXRvcihpY21wXywgJmMtPmlucHV0c19bd2hpY2hdKSwKKyAgICAgICAgICAgICZHZXRG
aWxlSXRlcmF0b3IsIHRhYmxlX2NhY2hlXywgb3B0aW9ucyk7CisgICAgICB9CisgICAgfQorICB9
CisgIGFzc2VydChudW0gPD0gc3BhY2UpOworICBJdGVyYXRvciogcmVzdWx0ID0gTmV3TWVyZ2lu
Z0l0ZXJhdG9yKCZpY21wXywgbGlzdCwgbnVtKTsKKyAgZGVsZXRlW10gbGlzdDsKKyAgcmV0dXJu
IHJlc3VsdDsKK30KKworQ29tcGFjdGlvbiogVmVyc2lvblNldDo6UGlja0NvbXBhY3Rpb24oKSB7
CisgIENvbXBhY3Rpb24qIGM7CisgIGludCBsZXZlbDsKKworICAvLyBXZSBwcmVmZXIgY29tcGFj
dGlvbnMgdHJpZ2dlcmVkIGJ5IHRvbyBtdWNoIGRhdGEgaW4gYSBsZXZlbCBvdmVyCisgIC8vIHRo
ZSBjb21wYWN0aW9ucyB0cmlnZ2VyZWQgYnkgc2Vla3MuCisgIGNvbnN0IGJvb2wgc2l6ZV9jb21w
YWN0aW9uID0gKGN1cnJlbnRfLT5jb21wYWN0aW9uX3Njb3JlXyA+PSAxKTsKKyAgY29uc3QgYm9v
bCBzZWVrX2NvbXBhY3Rpb24gPSAoY3VycmVudF8tPmZpbGVfdG9fY29tcGFjdF8gIT0gTlVMTCk7
CisgIGlmIChzaXplX2NvbXBhY3Rpb24pIHsKKyAgICBsZXZlbCA9IGN1cnJlbnRfLT5jb21wYWN0
aW9uX2xldmVsXzsKKyAgICBhc3NlcnQobGV2ZWwgPj0gMCk7CisgICAgYXNzZXJ0KGxldmVsKzEg
PCBjb25maWc6OmtOdW1MZXZlbHMpOworICAgIGMgPSBuZXcgQ29tcGFjdGlvbihsZXZlbCk7CisK
KyAgICAvLyBQaWNrIHRoZSBmaXJzdCBmaWxlIHRoYXQgY29tZXMgYWZ0ZXIgY29tcGFjdF9wb2lu
dGVyX1tsZXZlbF0KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGN1cnJlbnRfLT5maWxlc19b
bGV2ZWxdLnNpemUoKTsgaSsrKSB7CisgICAgICBGaWxlTWV0YURhdGEqIGYgPSBjdXJyZW50Xy0+
ZmlsZXNfW2xldmVsXVtpXTsKKyAgICAgIGlmIChjb21wYWN0X3BvaW50ZXJfW2xldmVsXS5lbXB0
eSgpIHx8CisgICAgICAgICAgaWNtcF8uQ29tcGFyZShmLT5sYXJnZXN0LkVuY29kZSgpLCBjb21w
YWN0X3BvaW50ZXJfW2xldmVsXSkgPiAwKSB7CisgICAgICAgIGMtPmlucHV0c19bMF0ucHVzaF9i
YWNrKGYpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgICAgaWYgKGMtPmlucHV0
c19bMF0uZW1wdHkoKSkgeworICAgICAgLy8gV3JhcC1hcm91bmQgdG8gdGhlIGJlZ2lubmluZyBv
ZiB0aGUga2V5IHNwYWNlCisgICAgICBjLT5pbnB1dHNfWzBdLnB1c2hfYmFjayhjdXJyZW50Xy0+
ZmlsZXNfW2xldmVsXVswXSk7CisgICAgfQorICB9IGVsc2UgaWYgKHNlZWtfY29tcGFjdGlvbikg
eworICAgIGxldmVsID0gY3VycmVudF8tPmZpbGVfdG9fY29tcGFjdF9sZXZlbF87CisgICAgYyA9
IG5ldyBDb21wYWN0aW9uKGxldmVsKTsKKyAgICBjLT5pbnB1dHNfWzBdLnB1c2hfYmFjayhjdXJy
ZW50Xy0+ZmlsZV90b19jb21wYWN0Xyk7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIE5VTEw7Cisg
IH0KKworICBjLT5pbnB1dF92ZXJzaW9uXyA9IGN1cnJlbnRfOworICBjLT5pbnB1dF92ZXJzaW9u
Xy0+UmVmKCk7CisKKyAgLy8gRmlsZXMgaW4gbGV2ZWwgMCBtYXkgb3ZlcmxhcCBlYWNoIG90aGVy
LCBzbyBwaWNrIHVwIGFsbCBvdmVybGFwcGluZyBvbmVzCisgIGlmIChsZXZlbCA9PSAwKSB7Cisg
ICAgSW50ZXJuYWxLZXkgc21hbGxlc3QsIGxhcmdlc3Q7CisgICAgR2V0UmFuZ2UoYy0+aW5wdXRz
X1swXSwgJnNtYWxsZXN0LCAmbGFyZ2VzdCk7CisgICAgLy8gTm90ZSB0aGF0IHRoZSBuZXh0IGNh
bGwgd2lsbCBkaXNjYXJkIHRoZSBmaWxlIHdlIHBsYWNlZCBpbgorICAgIC8vIGMtPmlucHV0c19b
MF0gZWFybGllciBhbmQgcmVwbGFjZSBpdCB3aXRoIGFuIG92ZXJsYXBwaW5nIHNldAorICAgIC8v
IHdoaWNoIHdpbGwgaW5jbHVkZSB0aGUgcGlja2VkIGZpbGUuCisgICAgY3VycmVudF8tPkdldE92
ZXJsYXBwaW5nSW5wdXRzKDAsICZzbWFsbGVzdCwgJmxhcmdlc3QsICZjLT5pbnB1dHNfWzBdKTsK
KyAgICBhc3NlcnQoIWMtPmlucHV0c19bMF0uZW1wdHkoKSk7CisgIH0KKworICBTZXR1cE90aGVy
SW5wdXRzKGMpOworCisgIHJldHVybiBjOworfQorCit2b2lkIFZlcnNpb25TZXQ6OlNldHVwT3Ro
ZXJJbnB1dHMoQ29tcGFjdGlvbiogYykgeworICBjb25zdCBpbnQgbGV2ZWwgPSBjLT5sZXZlbCgp
OworICBJbnRlcm5hbEtleSBzbWFsbGVzdCwgbGFyZ2VzdDsKKyAgR2V0UmFuZ2UoYy0+aW5wdXRz
X1swXSwgJnNtYWxsZXN0LCAmbGFyZ2VzdCk7CisKKyAgY3VycmVudF8tPkdldE92ZXJsYXBwaW5n
SW5wdXRzKGxldmVsKzEsICZzbWFsbGVzdCwgJmxhcmdlc3QsICZjLT5pbnB1dHNfWzFdKTsKKwor
ICAvLyBHZXQgZW50aXJlIHJhbmdlIGNvdmVyZWQgYnkgY29tcGFjdGlvbgorICBJbnRlcm5hbEtl
eSBhbGxfc3RhcnQsIGFsbF9saW1pdDsKKyAgR2V0UmFuZ2UyKGMtPmlucHV0c19bMF0sIGMtPmlu
cHV0c19bMV0sICZhbGxfc3RhcnQsICZhbGxfbGltaXQpOworCisgIC8vIFNlZSBpZiB3ZSBjYW4g
Z3JvdyB0aGUgbnVtYmVyIG9mIGlucHV0cyBpbiAibGV2ZWwiIHdpdGhvdXQKKyAgLy8gY2hhbmdp
bmcgdGhlIG51bWJlciBvZiAibGV2ZWwrMSIgZmlsZXMgd2UgcGljayB1cC4KKyAgaWYgKCFjLT5p
bnB1dHNfWzFdLmVtcHR5KCkpIHsKKyAgICBzdGQ6OnZlY3RvcjxGaWxlTWV0YURhdGEqPiBleHBh
bmRlZDA7CisgICAgY3VycmVudF8tPkdldE92ZXJsYXBwaW5nSW5wdXRzKGxldmVsLCAmYWxsX3N0
YXJ0LCAmYWxsX2xpbWl0LCAmZXhwYW5kZWQwKTsKKyAgICBjb25zdCBpbnQ2NF90IGlucHV0czBf
c2l6ZSA9IFRvdGFsRmlsZVNpemUoYy0+aW5wdXRzX1swXSk7CisgICAgY29uc3QgaW50NjRfdCBp
bnB1dHMxX3NpemUgPSBUb3RhbEZpbGVTaXplKGMtPmlucHV0c19bMV0pOworICAgIGNvbnN0IGlu
dDY0X3QgZXhwYW5kZWQwX3NpemUgPSBUb3RhbEZpbGVTaXplKGV4cGFuZGVkMCk7CisgICAgaWYg
KGV4cGFuZGVkMC5zaXplKCkgPiBjLT5pbnB1dHNfWzBdLnNpemUoKSAmJgorICAgICAgICBpbnB1
dHMxX3NpemUgKyBleHBhbmRlZDBfc2l6ZSA8IGtFeHBhbmRlZENvbXBhY3Rpb25CeXRlU2l6ZUxp
bWl0KSB7CisgICAgICBJbnRlcm5hbEtleSBuZXdfc3RhcnQsIG5ld19saW1pdDsKKyAgICAgIEdl
dFJhbmdlKGV4cGFuZGVkMCwgJm5ld19zdGFydCwgJm5ld19saW1pdCk7CisgICAgICBzdGQ6OnZl
Y3RvcjxGaWxlTWV0YURhdGEqPiBleHBhbmRlZDE7CisgICAgICBjdXJyZW50Xy0+R2V0T3Zlcmxh
cHBpbmdJbnB1dHMobGV2ZWwrMSwgJm5ld19zdGFydCwgJm5ld19saW1pdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmZXhwYW5kZWQxKTsKKyAgICAgIGlmIChleHBhbmRl
ZDEuc2l6ZSgpID09IGMtPmlucHV0c19bMV0uc2l6ZSgpKSB7CisgICAgICAgIExvZyhvcHRpb25z
Xy0+aW5mb19sb2csCisgICAgICAgICAgICAiRXhwYW5kaW5nQCVkICVkKyVkICglbGQrJWxkIGJ5
dGVzKSB0byAlZCslZCAoJWxkKyVsZCBieXRlcylcbiIsCisgICAgICAgICAgICBsZXZlbCwKKyAg
ICAgICAgICAgIGludChjLT5pbnB1dHNfWzBdLnNpemUoKSksCisgICAgICAgICAgICBpbnQoYy0+
aW5wdXRzX1sxXS5zaXplKCkpLAorICAgICAgICAgICAgbG9uZyhpbnB1dHMwX3NpemUpLCBsb25n
KGlucHV0czFfc2l6ZSksCisgICAgICAgICAgICBpbnQoZXhwYW5kZWQwLnNpemUoKSksCisgICAg
ICAgICAgICBpbnQoZXhwYW5kZWQxLnNpemUoKSksCisgICAgICAgICAgICBsb25nKGV4cGFuZGVk
MF9zaXplKSwgbG9uZyhpbnB1dHMxX3NpemUpKTsKKyAgICAgICAgc21hbGxlc3QgPSBuZXdfc3Rh
cnQ7CisgICAgICAgIGxhcmdlc3QgPSBuZXdfbGltaXQ7CisgICAgICAgIGMtPmlucHV0c19bMF0g
PSBleHBhbmRlZDA7CisgICAgICAgIGMtPmlucHV0c19bMV0gPSBleHBhbmRlZDE7CisgICAgICAg
IEdldFJhbmdlMihjLT5pbnB1dHNfWzBdLCBjLT5pbnB1dHNfWzFdLCAmYWxsX3N0YXJ0LCAmYWxs
X2xpbWl0KTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICAvLyBDb21wdXRlIHRoZSBzZXQgb2Yg
Z3JhbmRwYXJlbnQgZmlsZXMgdGhhdCBvdmVybGFwIHRoaXMgY29tcGFjdGlvbgorICAvLyAocGFy
ZW50ID09IGxldmVsKzE7IGdyYW5kcGFyZW50ID09IGxldmVsKzIpCisgIGlmIChsZXZlbCArIDIg
PCBjb25maWc6OmtOdW1MZXZlbHMpIHsKKyAgICBjdXJyZW50Xy0+R2V0T3ZlcmxhcHBpbmdJbnB1
dHMobGV2ZWwgKyAyLCAmYWxsX3N0YXJ0LCAmYWxsX2xpbWl0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmYy0+Z3JhbmRwYXJlbnRzXyk7CisgIH0KKworICBpZiAoZmFsc2Up
IHsKKyAgICBMb2cob3B0aW9uc18tPmluZm9fbG9nLCAiQ29tcGFjdGluZyAlZCAnJXMnIC4uICcl
cyciLAorICAgICAgICBsZXZlbCwKKyAgICAgICAgc21hbGxlc3QuRGVidWdTdHJpbmcoKS5jX3N0
cigpLAorICAgICAgICBsYXJnZXN0LkRlYnVnU3RyaW5nKCkuY19zdHIoKSk7CisgIH0KKworICAv
LyBVcGRhdGUgdGhlIHBsYWNlIHdoZXJlIHdlIHdpbGwgZG8gdGhlIG5leHQgY29tcGFjdGlvbiBm
b3IgdGhpcyBsZXZlbC4KKyAgLy8gV2UgdXBkYXRlIHRoaXMgaW1tZWRpYXRlbHkgaW5zdGVhZCBv
ZiB3YWl0aW5nIGZvciB0aGUgVmVyc2lvbkVkaXQKKyAgLy8gdG8gYmUgYXBwbGllZCBzbyB0aGF0
IGlmIHRoZSBjb21wYWN0aW9uIGZhaWxzLCB3ZSB3aWxsIHRyeSBhIGRpZmZlcmVudAorICAvLyBr
ZXkgcmFuZ2UgbmV4dCB0aW1lLgorICBjb21wYWN0X3BvaW50ZXJfW2xldmVsXSA9IGxhcmdlc3Qu
RW5jb2RlKCkuVG9TdHJpbmcoKTsKKyAgYy0+ZWRpdF8uU2V0Q29tcGFjdFBvaW50ZXIobGV2ZWws
IGxhcmdlc3QpOworfQorCitDb21wYWN0aW9uKiBWZXJzaW9uU2V0OjpDb21wYWN0UmFuZ2UoCisg
ICAgaW50IGxldmVsLAorICAgIGNvbnN0IEludGVybmFsS2V5KiBiZWdpbiwKKyAgICBjb25zdCBJ
bnRlcm5hbEtleSogZW5kKSB7CisgIHN0ZDo6dmVjdG9yPEZpbGVNZXRhRGF0YSo+IGlucHV0czsK
KyAgY3VycmVudF8tPkdldE92ZXJsYXBwaW5nSW5wdXRzKGxldmVsLCBiZWdpbiwgZW5kLCAmaW5w
dXRzKTsKKyAgaWYgKGlucHV0cy5lbXB0eSgpKSB7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKwor
ICAvLyBBdm9pZCBjb21wYWN0aW5nIHRvbyBtdWNoIGluIG9uZSBzaG90IGluIGNhc2UgdGhlIHJh
bmdlIGlzIGxhcmdlLgorICBjb25zdCB1aW50NjRfdCBsaW1pdCA9IE1heEZpbGVTaXplRm9yTGV2
ZWwobGV2ZWwpOworICB1aW50NjRfdCB0b3RhbCA9IDA7CisgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgaW5wdXRzLnNpemUoKTsgaSsrKSB7CisgICAgdWludDY0X3QgcyA9IGlucHV0c1tpXS0+Zmls
ZV9zaXplOworICAgIHRvdGFsICs9IHM7CisgICAgaWYgKHRvdGFsID49IGxpbWl0KSB7CisgICAg
ICBpbnB1dHMucmVzaXplKGkgKyAxKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIENv
bXBhY3Rpb24qIGMgPSBuZXcgQ29tcGFjdGlvbihsZXZlbCk7CisgIGMtPmlucHV0X3ZlcnNpb25f
ID0gY3VycmVudF87CisgIGMtPmlucHV0X3ZlcnNpb25fLT5SZWYoKTsKKyAgYy0+aW5wdXRzX1sw
XSA9IGlucHV0czsKKyAgU2V0dXBPdGhlcklucHV0cyhjKTsKKyAgcmV0dXJuIGM7Cit9CisKK0Nv
bXBhY3Rpb246OkNvbXBhY3Rpb24oaW50IGxldmVsKQorICAgIDogbGV2ZWxfKGxldmVsKSwKKyAg
ICAgIG1heF9vdXRwdXRfZmlsZV9zaXplXyhNYXhGaWxlU2l6ZUZvckxldmVsKGxldmVsKSksCisg
ICAgICBpbnB1dF92ZXJzaW9uXyhOVUxMKSwKKyAgICAgIGdyYW5kcGFyZW50X2luZGV4XygwKSwK
KyAgICAgIHNlZW5fa2V5XyhmYWxzZSksCisgICAgICBvdmVybGFwcGVkX2J5dGVzXygwKSB7Cisg
IGZvciAoaW50IGkgPSAwOyBpIDwgY29uZmlnOjprTnVtTGV2ZWxzOyBpKyspIHsKKyAgICBsZXZl
bF9wdHJzX1tpXSA9IDA7CisgIH0KK30KKworQ29tcGFjdGlvbjo6fkNvbXBhY3Rpb24oKSB7Cisg
IGlmIChpbnB1dF92ZXJzaW9uXyAhPSBOVUxMKSB7CisgICAgaW5wdXRfdmVyc2lvbl8tPlVucmVm
KCk7CisgIH0KK30KKworYm9vbCBDb21wYWN0aW9uOjpJc1RyaXZpYWxNb3ZlKCkgY29uc3Qgewor
ICAvLyBBdm9pZCBhIG1vdmUgaWYgdGhlcmUgaXMgbG90cyBvZiBvdmVybGFwcGluZyBncmFuZHBh
cmVudCBkYXRhLgorICAvLyBPdGhlcndpc2UsIHRoZSBtb3ZlIGNvdWxkIGNyZWF0ZSBhIHBhcmVu
dCBmaWxlIHRoYXQgd2lsbCByZXF1aXJlCisgIC8vIGEgdmVyeSBleHBlbnNpdmUgbWVyZ2UgbGF0
ZXIgb24uCisgIHJldHVybiAobnVtX2lucHV0X2ZpbGVzKDApID09IDEgJiYKKyAgICAgICAgICBu
dW1faW5wdXRfZmlsZXMoMSkgPT0gMCAmJgorICAgICAgICAgIFRvdGFsRmlsZVNpemUoZ3JhbmRw
YXJlbnRzXykgPD0ga01heEdyYW5kUGFyZW50T3ZlcmxhcEJ5dGVzKTsKK30KKwordm9pZCBDb21w
YWN0aW9uOjpBZGRJbnB1dERlbGV0aW9ucyhWZXJzaW9uRWRpdCogZWRpdCkgeworICBmb3IgKGlu
dCB3aGljaCA9IDA7IHdoaWNoIDwgMjsgd2hpY2grKykgeworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgaW5wdXRzX1t3aGljaF0uc2l6ZSgpOyBpKyspIHsKKyAgICAgIGVkaXQtPkRlbGV0ZUZp
bGUobGV2ZWxfICsgd2hpY2gsIGlucHV0c19bd2hpY2hdW2ldLT5udW1iZXIpOworICAgIH0KKyAg
fQorfQorCitib29sIENvbXBhY3Rpb246OklzQmFzZUxldmVsRm9yS2V5KGNvbnN0IFNsaWNlJiB1
c2VyX2tleSkgeworICAvLyBNYXliZSB1c2UgYmluYXJ5IHNlYXJjaCB0byBmaW5kIHJpZ2h0IGVu
dHJ5IGluc3RlYWQgb2YgbGluZWFyIHNlYXJjaD8KKyAgY29uc3QgQ29tcGFyYXRvciogdXNlcl9j
bXAgPSBpbnB1dF92ZXJzaW9uXy0+dnNldF8tPmljbXBfLnVzZXJfY29tcGFyYXRvcigpOworICBm
b3IgKGludCBsdmwgPSBsZXZlbF8gKyAyOyBsdmwgPCBjb25maWc6OmtOdW1MZXZlbHM7IGx2bCsr
KSB7CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8RmlsZU1ldGFEYXRhKj4mIGZpbGVzID0gaW5wdXRf
dmVyc2lvbl8tPmZpbGVzX1tsdmxdOworICAgIGZvciAoOyBsZXZlbF9wdHJzX1tsdmxdIDwgZmls
ZXMuc2l6ZSgpOyApIHsKKyAgICAgIEZpbGVNZXRhRGF0YSogZiA9IGZpbGVzW2xldmVsX3B0cnNf
W2x2bF1dOworICAgICAgaWYgKHVzZXJfY21wLT5Db21wYXJlKHVzZXJfa2V5LCBmLT5sYXJnZXN0
LnVzZXJfa2V5KCkpIDw9IDApIHsKKyAgICAgICAgLy8gV2UndmUgYWR2YW5jZWQgZmFyIGVub3Vn
aAorICAgICAgICBpZiAodXNlcl9jbXAtPkNvbXBhcmUodXNlcl9rZXksIGYtPnNtYWxsZXN0LnVz
ZXJfa2V5KCkpID49IDApIHsKKyAgICAgICAgICAvLyBLZXkgZmFsbHMgaW4gdGhpcyBmaWxlJ3Mg
cmFuZ2UsIHNvIGRlZmluaXRlbHkgbm90IGJhc2UgbGV2ZWwKKyAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBsZXZlbF9wdHJz
X1tsdmxdKys7CisgICAgfQorICB9CisgIHJldHVybiB0cnVlOworfQorCitib29sIENvbXBhY3Rp
b246OlNob3VsZFN0b3BCZWZvcmUoY29uc3QgU2xpY2UmIGludGVybmFsX2tleSkgeworICAvLyBT
Y2FuIHRvIGZpbmQgZWFybGllc3QgZ3JhbmRwYXJlbnQgZmlsZSB0aGF0IGNvbnRhaW5zIGtleS4K
KyAgY29uc3QgSW50ZXJuYWxLZXlDb21wYXJhdG9yKiBpY21wID0gJmlucHV0X3ZlcnNpb25fLT52
c2V0Xy0+aWNtcF87CisgIHdoaWxlIChncmFuZHBhcmVudF9pbmRleF8gPCBncmFuZHBhcmVudHNf
LnNpemUoKSAmJgorICAgICAgaWNtcC0+Q29tcGFyZShpbnRlcm5hbF9rZXksCisgICAgICAgICAg
ICAgICAgICAgIGdyYW5kcGFyZW50c19bZ3JhbmRwYXJlbnRfaW5kZXhfXS0+bGFyZ2VzdC5FbmNv
ZGUoKSkgPiAwKSB7CisgICAgaWYgKHNlZW5fa2V5XykgeworICAgICAgb3ZlcmxhcHBlZF9ieXRl
c18gKz0gZ3JhbmRwYXJlbnRzX1tncmFuZHBhcmVudF9pbmRleF9dLT5maWxlX3NpemU7CisgICAg
fQorICAgIGdyYW5kcGFyZW50X2luZGV4XysrOworICB9CisgIHNlZW5fa2V5XyA9IHRydWU7CisK
KyAgaWYgKG92ZXJsYXBwZWRfYnl0ZXNfID4ga01heEdyYW5kUGFyZW50T3ZlcmxhcEJ5dGVzKSB7
CisgICAgLy8gVG9vIG11Y2ggb3ZlcmxhcCBmb3IgY3VycmVudCBvdXRwdXQ7IHN0YXJ0IG5ldyBv
dXRwdXQKKyAgICBvdmVybGFwcGVkX2J5dGVzXyA9IDA7CisgICAgcmV0dXJuIHRydWU7CisgIH0g
ZWxzZSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9Cit9CisKK3ZvaWQgQ29tcGFjdGlvbjo6UmVs
ZWFzZUlucHV0cygpIHsKKyAgaWYgKGlucHV0X3ZlcnNpb25fICE9IE5VTEwpIHsKKyAgICBpbnB1
dF92ZXJzaW9uXy0+VW5yZWYoKTsKKyAgICBpbnB1dF92ZXJzaW9uXyA9IE5VTEw7CisgIH0KK30K
KworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xldmVsZGIvZGIvdmVyc2lvbl9zZXQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIv
dmVyc2lvbl9zZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZDA4NGZkYjdkMDA1NzRjNjI3MjkxYjFhNDhlMDU5
YTgwOTNkNWI0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9k
Yi92ZXJzaW9uX3NldC5oCkBAIC0wLDAgKzEsMzgzIEBACisvLyBDb3B5cmlnaHQgKGMpIDIwMTEg
VGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZv
ciBuYW1lcyBvZiBjb250cmlidXRvcnMuCisvLworLy8gVGhlIHJlcHJlc2VudGF0aW9uIG9mIGEg
REJJbXBsIGNvbnNpc3RzIG9mIGEgc2V0IG9mIFZlcnNpb25zLiAgVGhlCisvLyBuZXdlc3QgdmVy
c2lvbiBpcyBjYWxsZWQgImN1cnJlbnQiLiAgT2xkZXIgdmVyc2lvbnMgbWF5IGJlIGtlcHQKKy8v
IGFyb3VuZCB0byBwcm92aWRlIGEgY29uc2lzdGVudCB2aWV3IHRvIGxpdmUgaXRlcmF0b3JzLgor
Ly8KKy8vIEVhY2ggVmVyc2lvbiBrZWVwcyB0cmFjayBvZiBhIHNldCBvZiBUYWJsZSBmaWxlcyBw
ZXIgbGV2ZWwuICBUaGUKKy8vIGVudGlyZSBzZXQgb2YgdmVyc2lvbnMgaXMgbWFpbnRhaW5lZCBp
biBhIFZlcnNpb25TZXQuCisvLworLy8gVmVyc2lvbixWZXJzaW9uU2V0IGFyZSB0aHJlYWQtY29t
cGF0aWJsZSwgYnV0IHJlcXVpcmUgZXh0ZXJuYWwKKy8vIHN5bmNocm9uaXphdGlvbiBvbiBhbGwg
YWNjZXNzZXMuCisKKyNpZm5kZWYgU1RPUkFHRV9MRVZFTERCX0RCX1ZFUlNJT05fU0VUX0hfCisj
ZGVmaW5lIFNUT1JBR0VfTEVWRUxEQl9EQl9WRVJTSU9OX1NFVF9IXworCisjaW5jbHVkZSA8bWFw
PgorI2luY2x1ZGUgPHNldD4KKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSAiZGIvZGJmb3Jt
YXQuaCIKKyNpbmNsdWRlICJkYi92ZXJzaW9uX2VkaXQuaCIKKyNpbmNsdWRlICJwb3J0L3BvcnQu
aCIKKyNpbmNsdWRlICJwb3J0L3RocmVhZF9hbm5vdGF0aW9ucy5oIgorCituYW1lc3BhY2UgbGV2
ZWxkYiB7CisKK25hbWVzcGFjZSBsb2cgeyBjbGFzcyBXcml0ZXI7IH0KKworY2xhc3MgQ29tcGFj
dGlvbjsKK2NsYXNzIEl0ZXJhdG9yOworY2xhc3MgTWVtVGFibGU7CitjbGFzcyBUYWJsZUJ1aWxk
ZXI7CitjbGFzcyBUYWJsZUNhY2hlOworY2xhc3MgVmVyc2lvbjsKK2NsYXNzIFZlcnNpb25TZXQ7
CitjbGFzcyBXcml0YWJsZUZpbGU7CisKKy8vIFJldHVybiB0aGUgc21hbGxlc3QgaW5kZXggaSBz
dWNoIHRoYXQgZmlsZXNbaV0tPmxhcmdlc3QgPj0ga2V5LgorLy8gUmV0dXJuIGZpbGVzLnNpemUo
KSBpZiB0aGVyZSBpcyBubyBzdWNoIGZpbGUuCisvLyBSRVFVSVJFUzogImZpbGVzIiBjb250YWlu
cyBhIHNvcnRlZCBsaXN0IG9mIG5vbi1vdmVybGFwcGluZyBmaWxlcy4KK2V4dGVybiBpbnQgRmlu
ZEZpbGUoY29uc3QgSW50ZXJuYWxLZXlDb21wYXJhdG9yJiBpY21wLAorICAgICAgICAgICAgICAg
ICAgICBjb25zdCBzdGQ6OnZlY3RvcjxGaWxlTWV0YURhdGEqPiYgZmlsZXMsCisgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFNsaWNlJiBrZXkpOworCisvLyBSZXR1cm5zIHRydWUgaWZmIHNvbWUg
ZmlsZSBpbiAiZmlsZXMiIG92ZXJsYXBzIHRoZSB1c2VyIGtleSByYW5nZQorLy8gWypzbWFsbGVz
dCwqbGFyZ2VzdF0uCisvLyBzbWFsbGVzdD09TlVMTCByZXByZXNlbnRzIGEga2V5IHNtYWxsZXIg
dGhhbiBhbGwga2V5cyBpbiB0aGUgREIuCisvLyBsYXJnZXN0PT1OVUxMIHJlcHJlc2VudHMgYSBr
ZXkgbGFyZ2VzdCB0aGFuIGFsbCBrZXlzIGluIHRoZSBEQi4KKy8vIFJFUVVJUkVTOiBJZiBkaXNq
b2ludF9zb3J0ZWRfZmlsZXMsIGZpbGVzW10gY29udGFpbnMgZGlzam9pbnQgcmFuZ2VzCisvLyAg
ICAgICAgICAgaW4gc29ydGVkIG9yZGVyLgorZXh0ZXJuIGJvb2wgU29tZUZpbGVPdmVybGFwc1Jh
bmdlKAorICAgIGNvbnN0IEludGVybmFsS2V5Q29tcGFyYXRvciYgaWNtcCwKKyAgICBib29sIGRp
c2pvaW50X3NvcnRlZF9maWxlcywKKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxGaWxlTWV0YURhdGEq
PiYgZmlsZXMsCisgICAgY29uc3QgU2xpY2UqIHNtYWxsZXN0X3VzZXJfa2V5LAorICAgIGNvbnN0
IFNsaWNlKiBsYXJnZXN0X3VzZXJfa2V5KTsKKworY2xhc3MgVmVyc2lvbiB7CisgcHVibGljOgor
ICAvLyBBcHBlbmQgdG8gKml0ZXJzIGEgc2VxdWVuY2Ugb2YgaXRlcmF0b3JzIHRoYXQgd2lsbAor
ICAvLyB5aWVsZCB0aGUgY29udGVudHMgb2YgdGhpcyBWZXJzaW9uIHdoZW4gbWVyZ2VkIHRvZ2V0
aGVyLgorICAvLyBSRVFVSVJFUzogVGhpcyB2ZXJzaW9uIGhhcyBiZWVuIHNhdmVkIChzZWUgVmVy
c2lvblNldDo6U2F2ZVRvKQorICB2b2lkIEFkZEl0ZXJhdG9ycyhjb25zdCBSZWFkT3B0aW9ucyYs
IHN0ZDo6dmVjdG9yPEl0ZXJhdG9yKj4qIGl0ZXJzKTsKKworICAvLyBMb29rdXAgdGhlIHZhbHVl
IGZvciBrZXkuICBJZiBmb3VuZCwgc3RvcmUgaXQgaW4gKnZhbCBhbmQKKyAgLy8gcmV0dXJuIE9L
LiAgRWxzZSByZXR1cm4gYSBub24tT0sgc3RhdHVzLiAgRmlsbHMgKnN0YXRzLgorICAvLyBSRVFV
SVJFUzogbG9jayBpcyBub3QgaGVsZAorICBzdHJ1Y3QgR2V0U3RhdHMgeworICAgIEZpbGVNZXRh
RGF0YSogc2Vla19maWxlOworICAgIGludCBzZWVrX2ZpbGVfbGV2ZWw7CisgIH07CisgIFN0YXR1
cyBHZXQoY29uc3QgUmVhZE9wdGlvbnMmLCBjb25zdCBMb29rdXBLZXkmIGtleSwgc3RkOjpzdHJp
bmcqIHZhbCwKKyAgICAgICAgICAgICBHZXRTdGF0cyogc3RhdHMpOworCisgIC8vIEFkZHMgInN0
YXRzIiBpbnRvIHRoZSBjdXJyZW50IHN0YXRlLiAgUmV0dXJucyB0cnVlIGlmIGEgbmV3CisgIC8v
IGNvbXBhY3Rpb24gbWF5IG5lZWQgdG8gYmUgdHJpZ2dlcmVkLCBmYWxzZSBvdGhlcndpc2UuCisg
IC8vIFJFUVVJUkVTOiBsb2NrIGlzIGhlbGQKKyAgYm9vbCBVcGRhdGVTdGF0cyhjb25zdCBHZXRT
dGF0cyYgc3RhdHMpOworCisgIC8vIFJlZmVyZW5jZSBjb3VudCBtYW5hZ2VtZW50IChzbyBWZXJz
aW9ucyBkbyBub3QgZGlzYXBwZWFyIG91dCBmcm9tCisgIC8vIHVuZGVyIGxpdmUgaXRlcmF0b3Jz
KQorICB2b2lkIFJlZigpOworICB2b2lkIFVucmVmKCk7CisKKyAgdm9pZCBHZXRPdmVybGFwcGlu
Z0lucHV0cygKKyAgICAgIGludCBsZXZlbCwKKyAgICAgIGNvbnN0IEludGVybmFsS2V5KiBiZWdp
biwgICAgICAgICAvLyBOVUxMIG1lYW5zIGJlZm9yZSBhbGwga2V5cworICAgICAgY29uc3QgSW50
ZXJuYWxLZXkqIGVuZCwgICAgICAgICAgIC8vIE5VTEwgbWVhbnMgYWZ0ZXIgYWxsIGtleXMKKyAg
ICAgIHN0ZDo6dmVjdG9yPEZpbGVNZXRhRGF0YSo+KiBpbnB1dHMpOworCisgIC8vIFJldHVybnMg
dHJ1ZSBpZmYgc29tZSBmaWxlIGluIHRoZSBzcGVjaWZpZWQgbGV2ZWwgb3ZlcmxhcHMKKyAgLy8g
c29tZSBwYXJ0IG9mIFsqc21hbGxlc3RfdXNlcl9rZXksKmxhcmdlc3RfdXNlcl9rZXldLgorICAv
LyBzbWFsbGVzdF91c2VyX2tleT09TlVMTCByZXByZXNlbnRzIGEga2V5IHNtYWxsZXIgdGhhbiBh
bGwga2V5cyBpbiB0aGUgREIuCisgIC8vIGxhcmdlc3RfdXNlcl9rZXk9PU5VTEwgcmVwcmVzZW50
cyBhIGtleSBsYXJnZXN0IHRoYW4gYWxsIGtleXMgaW4gdGhlIERCLgorICBib29sIE92ZXJsYXBJ
bkxldmVsKGludCBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTbGljZSogc21h
bGxlc3RfdXNlcl9rZXksCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2xpY2UqIGxhcmdl
c3RfdXNlcl9rZXkpOworCisgIC8vIFJldHVybiB0aGUgbGV2ZWwgYXQgd2hpY2ggd2Ugc2hvdWxk
IHBsYWNlIGEgbmV3IG1lbXRhYmxlIGNvbXBhY3Rpb24KKyAgLy8gcmVzdWx0IHRoYXQgY292ZXJz
IHRoZSByYW5nZSBbc21hbGxlc3RfdXNlcl9rZXksbGFyZ2VzdF91c2VyX2tleV0uCisgIGludCBQ
aWNrTGV2ZWxGb3JNZW1UYWJsZU91dHB1dChjb25zdCBTbGljZSYgc21hbGxlc3RfdXNlcl9rZXks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTbGljZSYgbGFyZ2VzdF91
c2VyX2tleSk7CisKKyAgaW50IE51bUZpbGVzKGludCBsZXZlbCkgY29uc3QgeyByZXR1cm4gZmls
ZXNfW2xldmVsXS5zaXplKCk7IH0KKworICAvLyBSZXR1cm4gYSBodW1hbiByZWFkYWJsZSBzdHJp
bmcgdGhhdCBkZXNjcmliZXMgdGhpcyB2ZXJzaW9uJ3MgY29udGVudHMuCisgIHN0ZDo6c3RyaW5n
IERlYnVnU3RyaW5nKCkgY29uc3Q7CisKKyBwcml2YXRlOgorICBmcmllbmQgY2xhc3MgQ29tcGFj
dGlvbjsKKyAgZnJpZW5kIGNsYXNzIFZlcnNpb25TZXQ7CisKKyAgY2xhc3MgTGV2ZWxGaWxlTnVt
SXRlcmF0b3I7CisgIEl0ZXJhdG9yKiBOZXdDb25jYXRlbmF0aW5nSXRlcmF0b3IoY29uc3QgUmVh
ZE9wdGlvbnMmLCBpbnQgbGV2ZWwpIGNvbnN0OworCisgIFZlcnNpb25TZXQqIHZzZXRfOyAgICAg
ICAgICAgIC8vIFZlcnNpb25TZXQgdG8gd2hpY2ggdGhpcyBWZXJzaW9uIGJlbG9uZ3MKKyAgVmVy
c2lvbiogbmV4dF87ICAgICAgICAgICAgICAgLy8gTmV4dCB2ZXJzaW9uIGluIGxpbmtlZCBsaXN0
CisgIFZlcnNpb24qIHByZXZfOyAgICAgICAgICAgICAgIC8vIFByZXZpb3VzIHZlcnNpb24gaW4g
bGlua2VkIGxpc3QKKyAgaW50IHJlZnNfOyAgICAgICAgICAgICAgICAgICAgLy8gTnVtYmVyIG9m
IGxpdmUgcmVmcyB0byB0aGlzIHZlcnNpb24KKworICAvLyBMaXN0IG9mIGZpbGVzIHBlciBsZXZl
bAorICBzdGQ6OnZlY3RvcjxGaWxlTWV0YURhdGEqPiBmaWxlc19bY29uZmlnOjprTnVtTGV2ZWxz
XTsKKworICAvLyBOZXh0IGZpbGUgdG8gY29tcGFjdCBiYXNlZCBvbiBzZWVrIHN0YXRzLgorICBG
aWxlTWV0YURhdGEqIGZpbGVfdG9fY29tcGFjdF87CisgIGludCBmaWxlX3RvX2NvbXBhY3RfbGV2
ZWxfOworCisgIC8vIExldmVsIHRoYXQgc2hvdWxkIGJlIGNvbXBhY3RlZCBuZXh0IGFuZCBpdHMg
Y29tcGFjdGlvbiBzY29yZS4KKyAgLy8gU2NvcmUgPCAxIG1lYW5zIGNvbXBhY3Rpb24gaXMgbm90
IHN0cmljdGx5IG5lZWRlZC4gIFRoZXNlIGZpZWxkcworICAvLyBhcmUgaW5pdGlhbGl6ZWQgYnkg
RmluYWxpemUoKS4KKyAgZG91YmxlIGNvbXBhY3Rpb25fc2NvcmVfOworICBpbnQgY29tcGFjdGlv
bl9sZXZlbF87CisKKyAgZXhwbGljaXQgVmVyc2lvbihWZXJzaW9uU2V0KiB2c2V0KQorICAgICAg
OiB2c2V0Xyh2c2V0KSwgbmV4dF8odGhpcyksIHByZXZfKHRoaXMpLCByZWZzXygwKSwKKyAgICAg
ICAgZmlsZV90b19jb21wYWN0XyhOVUxMKSwKKyAgICAgICAgZmlsZV90b19jb21wYWN0X2xldmVs
XygtMSksCisgICAgICAgIGNvbXBhY3Rpb25fc2NvcmVfKC0xKSwKKyAgICAgICAgY29tcGFjdGlv
bl9sZXZlbF8oLTEpIHsKKyAgfQorCisgIH5WZXJzaW9uKCk7CisKKyAgLy8gTm8gY29weWluZyBh
bGxvd2VkCisgIFZlcnNpb24oY29uc3QgVmVyc2lvbiYpOworICB2b2lkIG9wZXJhdG9yPShjb25z
dCBWZXJzaW9uJik7Cit9OworCitjbGFzcyBWZXJzaW9uU2V0IHsKKyBwdWJsaWM6CisgIFZlcnNp
b25TZXQoY29uc3Qgc3RkOjpzdHJpbmcmIGRibmFtZSwKKyAgICAgICAgICAgICBjb25zdCBPcHRp
b25zKiBvcHRpb25zLAorICAgICAgICAgICAgIFRhYmxlQ2FjaGUqIHRhYmxlX2NhY2hlLAorICAg
ICAgICAgICAgIGNvbnN0IEludGVybmFsS2V5Q29tcGFyYXRvciopOworICB+VmVyc2lvblNldCgp
OworCisgIC8vIEFwcGx5ICplZGl0IHRvIHRoZSBjdXJyZW50IHZlcnNpb24gdG8gZm9ybSBhIG5l
dyBkZXNjcmlwdG9yIHRoYXQKKyAgLy8gaXMgYm90aCBzYXZlZCB0byBwZXJzaXN0ZW50IHN0YXRl
IGFuZCBpbnN0YWxsZWQgYXMgdGhlIG5ldworICAvLyBjdXJyZW50IHZlcnNpb24uICBXaWxsIHJl
bGVhc2UgKm11IHdoaWxlIGFjdHVhbGx5IHdyaXRpbmcgdG8gdGhlIGZpbGUuCisgIC8vIFJFUVVJ
UkVTOiAqbXUgaXMgaGVsZCBvbiBlbnRyeS4KKyAgLy8gUkVRVUlSRVM6IG5vIG90aGVyIHRocmVh
ZCBjb25jdXJyZW50bHkgY2FsbHMgTG9nQW5kQXBwbHkoKQorICBTdGF0dXMgTG9nQW5kQXBwbHko
VmVyc2lvbkVkaXQqIGVkaXQsIHBvcnQ6Ok11dGV4KiBtdSkKKyAgICAgIEVYQ0xVU0lWRV9MT0NL
U19SRVFVSVJFRChtdSk7CisKKyAgLy8gUmVjb3ZlciB0aGUgbGFzdCBzYXZlZCBkZXNjcmlwdG9y
IGZyb20gcGVyc2lzdGVudCBzdG9yYWdlLgorICBTdGF0dXMgUmVjb3ZlcigpOworCisgIC8vIFJl
dHVybiB0aGUgY3VycmVudCB2ZXJzaW9uLgorICBWZXJzaW9uKiBjdXJyZW50KCkgY29uc3QgeyBy
ZXR1cm4gY3VycmVudF87IH0KKworICAvLyBSZXR1cm4gdGhlIGN1cnJlbnQgbWFuaWZlc3QgZmls
ZSBudW1iZXIKKyAgdWludDY0X3QgTWFuaWZlc3RGaWxlTnVtYmVyKCkgY29uc3QgeyByZXR1cm4g
bWFuaWZlc3RfZmlsZV9udW1iZXJfOyB9CisKKyAgLy8gQWxsb2NhdGUgYW5kIHJldHVybiBhIG5l
dyBmaWxlIG51bWJlcgorICB1aW50NjRfdCBOZXdGaWxlTnVtYmVyKCkgeyByZXR1cm4gbmV4dF9m
aWxlX251bWJlcl8rKzsgfQorCisgIC8vIEFycmFuZ2UgdG8gcmV1c2UgImZpbGVfbnVtYmVyIiB1
bmxlc3MgYSBuZXdlciBmaWxlIG51bWJlciBoYXMKKyAgLy8gYWxyZWFkeSBiZWVuIGFsbG9jYXRl
ZC4KKyAgLy8gUkVRVUlSRVM6ICJmaWxlX251bWJlciIgd2FzIHJldHVybmVkIGJ5IGEgY2FsbCB0
byBOZXdGaWxlTnVtYmVyKCkuCisgIHZvaWQgUmV1c2VGaWxlTnVtYmVyKHVpbnQ2NF90IGZpbGVf
bnVtYmVyKSB7CisgICAgaWYgKG5leHRfZmlsZV9udW1iZXJfID09IGZpbGVfbnVtYmVyICsgMSkg
eworICAgICAgbmV4dF9maWxlX251bWJlcl8gPSBmaWxlX251bWJlcjsKKyAgICB9CisgIH0KKwor
ICAvLyBSZXR1cm4gdGhlIG51bWJlciBvZiBUYWJsZSBmaWxlcyBhdCB0aGUgc3BlY2lmaWVkIGxl
dmVsLgorICBpbnQgTnVtTGV2ZWxGaWxlcyhpbnQgbGV2ZWwpIGNvbnN0OworCisgIC8vIFJldHVy
biB0aGUgY29tYmluZWQgZmlsZSBzaXplIG9mIGFsbCBmaWxlcyBhdCB0aGUgc3BlY2lmaWVkIGxl
dmVsLgorICBpbnQ2NF90IE51bUxldmVsQnl0ZXMoaW50IGxldmVsKSBjb25zdDsKKworICAvLyBS
ZXR1cm4gdGhlIGxhc3Qgc2VxdWVuY2UgbnVtYmVyLgorICB1aW50NjRfdCBMYXN0U2VxdWVuY2Uo
KSBjb25zdCB7IHJldHVybiBsYXN0X3NlcXVlbmNlXzsgfQorCisgIC8vIFNldCB0aGUgbGFzdCBz
ZXF1ZW5jZSBudW1iZXIgdG8gcy4KKyAgdm9pZCBTZXRMYXN0U2VxdWVuY2UodWludDY0X3Qgcykg
eworICAgIGFzc2VydChzID49IGxhc3Rfc2VxdWVuY2VfKTsKKyAgICBsYXN0X3NlcXVlbmNlXyA9
IHM7CisgIH0KKworICAvLyBNYXJrIHRoZSBzcGVjaWZpZWQgZmlsZSBudW1iZXIgYXMgdXNlZC4K
KyAgdm9pZCBNYXJrRmlsZU51bWJlclVzZWQodWludDY0X3QgbnVtYmVyKTsKKworICAvLyBSZXR1
cm4gdGhlIGN1cnJlbnQgbG9nIGZpbGUgbnVtYmVyLgorICB1aW50NjRfdCBMb2dOdW1iZXIoKSBj
b25zdCB7IHJldHVybiBsb2dfbnVtYmVyXzsgfQorCisgIC8vIFJldHVybiB0aGUgbG9nIGZpbGUg
bnVtYmVyIGZvciB0aGUgbG9nIGZpbGUgdGhhdCBpcyBjdXJyZW50bHkKKyAgLy8gYmVpbmcgY29t
cGFjdGVkLCBvciB6ZXJvIGlmIHRoZXJlIGlzIG5vIHN1Y2ggbG9nIGZpbGUuCisgIHVpbnQ2NF90
IFByZXZMb2dOdW1iZXIoKSBjb25zdCB7IHJldHVybiBwcmV2X2xvZ19udW1iZXJfOyB9CisKKyAg
Ly8gUGljayBsZXZlbCBhbmQgaW5wdXRzIGZvciBhIG5ldyBjb21wYWN0aW9uLgorICAvLyBSZXR1
cm5zIE5VTEwgaWYgdGhlcmUgaXMgbm8gY29tcGFjdGlvbiB0byBiZSBkb25lLgorICAvLyBPdGhl
cndpc2UgcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBoZWFwLWFsbG9jYXRlZCBvYmplY3QgdGhhdAor
ICAvLyBkZXNjcmliZXMgdGhlIGNvbXBhY3Rpb24uICBDYWxsZXIgc2hvdWxkIGRlbGV0ZSB0aGUg
cmVzdWx0LgorICBDb21wYWN0aW9uKiBQaWNrQ29tcGFjdGlvbigpOworCisgIC8vIFJldHVybiBh
IGNvbXBhY3Rpb24gb2JqZWN0IGZvciBjb21wYWN0aW5nIHRoZSByYW5nZSBbYmVnaW4sZW5kXSBp
bgorICAvLyB0aGUgc3BlY2lmaWVkIGxldmVsLiAgUmV0dXJucyBOVUxMIGlmIHRoZXJlIGlzIG5v
dGhpbmcgaW4gdGhhdAorICAvLyBsZXZlbCB0aGF0IG92ZXJsYXBzIHRoZSBzcGVjaWZpZWQgcmFu
Z2UuICBDYWxsZXIgc2hvdWxkIGRlbGV0ZQorICAvLyB0aGUgcmVzdWx0LgorICBDb21wYWN0aW9u
KiBDb21wYWN0UmFuZ2UoCisgICAgICBpbnQgbGV2ZWwsCisgICAgICBjb25zdCBJbnRlcm5hbEtl
eSogYmVnaW4sCisgICAgICBjb25zdCBJbnRlcm5hbEtleSogZW5kKTsKKworICAvLyBSZXR1cm4g
dGhlIG1heGltdW0gb3ZlcmxhcHBpbmcgZGF0YSAoaW4gYnl0ZXMpIGF0IG5leHQgbGV2ZWwgZm9y
IGFueQorICAvLyBmaWxlIGF0IGEgbGV2ZWwgPj0gMS4KKyAgaW50NjRfdCBNYXhOZXh0TGV2ZWxP
dmVybGFwcGluZ0J5dGVzKCk7CisKKyAgLy8gQ3JlYXRlIGFuIGl0ZXJhdG9yIHRoYXQgcmVhZHMg
b3ZlciB0aGUgY29tcGFjdGlvbiBpbnB1dHMgZm9yICIqYyIuCisgIC8vIFRoZSBjYWxsZXIgc2hv
dWxkIGRlbGV0ZSB0aGUgaXRlcmF0b3Igd2hlbiBubyBsb25nZXIgbmVlZGVkLgorICBJdGVyYXRv
ciogTWFrZUlucHV0SXRlcmF0b3IoQ29tcGFjdGlvbiogYyk7CisKKyAgLy8gUmV0dXJucyB0cnVl
IGlmZiBzb21lIGxldmVsIG5lZWRzIGEgY29tcGFjdGlvbi4KKyAgYm9vbCBOZWVkc0NvbXBhY3Rp
b24oKSBjb25zdCB7CisgICAgVmVyc2lvbiogdiA9IGN1cnJlbnRfOworICAgIHJldHVybiAodi0+
Y29tcGFjdGlvbl9zY29yZV8gPj0gMSkgfHwgKHYtPmZpbGVfdG9fY29tcGFjdF8gIT0gTlVMTCk7
CisgIH0KKworICAvLyBBZGQgYWxsIGZpbGVzIGxpc3RlZCBpbiBhbnkgbGl2ZSB2ZXJzaW9uIHRv
ICpsaXZlLgorICAvLyBNYXkgYWxzbyBtdXRhdGUgc29tZSBpbnRlcm5hbCBzdGF0ZS4KKyAgdm9p
ZCBBZGRMaXZlRmlsZXMoc3RkOjpzZXQ8dWludDY0X3Q+KiBsaXZlKTsKKworICAvLyBSZXR1cm4g
dGhlIGFwcHJveGltYXRlIG9mZnNldCBpbiB0aGUgZGF0YWJhc2Ugb2YgdGhlIGRhdGEgZm9yCisg
IC8vICJrZXkiIGFzIG9mIHZlcnNpb24gInYiLgorICB1aW50NjRfdCBBcHByb3hpbWF0ZU9mZnNl
dE9mKFZlcnNpb24qIHYsIGNvbnN0IEludGVybmFsS2V5JiBrZXkpOworCisgIC8vIFJldHVybiBh
IGh1bWFuLXJlYWRhYmxlIHNob3J0IChzaW5nbGUtbGluZSkgc3VtbWFyeSBvZiB0aGUgbnVtYmVy
CisgIC8vIG9mIGZpbGVzIHBlciBsZXZlbC4gIFVzZXMgKnNjcmF0Y2ggYXMgYmFja2luZyBzdG9y
ZS4KKyAgc3RydWN0IExldmVsU3VtbWFyeVN0b3JhZ2UgeworICAgIGNoYXIgYnVmZmVyWzEwMF07
CisgIH07CisgIGNvbnN0IGNoYXIqIExldmVsU3VtbWFyeShMZXZlbFN1bW1hcnlTdG9yYWdlKiBz
Y3JhdGNoKSBjb25zdDsKKworIHByaXZhdGU6CisgIGNsYXNzIEJ1aWxkZXI7CisKKyAgZnJpZW5k
IGNsYXNzIENvbXBhY3Rpb247CisgIGZyaWVuZCBjbGFzcyBWZXJzaW9uOworCisgIHZvaWQgRmlu
YWxpemUoVmVyc2lvbiogdik7CisKKyAgdm9pZCBHZXRSYW5nZShjb25zdCBzdGQ6OnZlY3RvcjxG
aWxlTWV0YURhdGEqPiYgaW5wdXRzLAorICAgICAgICAgICAgICAgIEludGVybmFsS2V5KiBzbWFs
bGVzdCwKKyAgICAgICAgICAgICAgICBJbnRlcm5hbEtleSogbGFyZ2VzdCk7CisKKyAgdm9pZCBH
ZXRSYW5nZTIoY29uc3Qgc3RkOjp2ZWN0b3I8RmlsZU1ldGFEYXRhKj4mIGlucHV0czEsCisgICAg
ICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEZpbGVNZXRhRGF0YSo+JiBpbnB1dHMyLAor
ICAgICAgICAgICAgICAgICBJbnRlcm5hbEtleSogc21hbGxlc3QsCisgICAgICAgICAgICAgICAg
IEludGVybmFsS2V5KiBsYXJnZXN0KTsKKworICB2b2lkIFNldHVwT3RoZXJJbnB1dHMoQ29tcGFj
dGlvbiogYyk7CisKKyAgLy8gU2F2ZSBjdXJyZW50IGNvbnRlbnRzIHRvICpsb2cKKyAgU3RhdHVz
IFdyaXRlU25hcHNob3QobG9nOjpXcml0ZXIqIGxvZyk7CisKKyAgdm9pZCBBcHBlbmRWZXJzaW9u
KFZlcnNpb24qIHYpOworCisgIGJvb2wgTWFuaWZlc3RDb250YWlucyhjb25zdCBzdGQ6OnN0cmlu
ZyYgcmVjb3JkKSBjb25zdDsKKworICBFbnYqIGNvbnN0IGVudl87CisgIGNvbnN0IHN0ZDo6c3Ry
aW5nIGRibmFtZV87CisgIGNvbnN0IE9wdGlvbnMqIGNvbnN0IG9wdGlvbnNfOworICBUYWJsZUNh
Y2hlKiBjb25zdCB0YWJsZV9jYWNoZV87CisgIGNvbnN0IEludGVybmFsS2V5Q29tcGFyYXRvciBp
Y21wXzsKKyAgdWludDY0X3QgbmV4dF9maWxlX251bWJlcl87CisgIHVpbnQ2NF90IG1hbmlmZXN0
X2ZpbGVfbnVtYmVyXzsKKyAgdWludDY0X3QgbGFzdF9zZXF1ZW5jZV87CisgIHVpbnQ2NF90IGxv
Z19udW1iZXJfOworICB1aW50NjRfdCBwcmV2X2xvZ19udW1iZXJfOyAgLy8gMCBvciBiYWNraW5n
IHN0b3JlIGZvciBtZW10YWJsZSBiZWluZyBjb21wYWN0ZWQKKworICAvLyBPcGVuZWQgbGF6aWx5
CisgIFdyaXRhYmxlRmlsZSogZGVzY3JpcHRvcl9maWxlXzsKKyAgbG9nOjpXcml0ZXIqIGRlc2Ny
aXB0b3JfbG9nXzsKKyAgVmVyc2lvbiBkdW1teV92ZXJzaW9uc187ICAvLyBIZWFkIG9mIGNpcmN1
bGFyIGRvdWJseS1saW5rZWQgbGlzdCBvZiB2ZXJzaW9ucy4KKyAgVmVyc2lvbiogY3VycmVudF87
ICAgICAgICAvLyA9PSBkdW1teV92ZXJzaW9uc18ucHJldl8KKworICAvLyBQZXItbGV2ZWwga2V5
IGF0IHdoaWNoIHRoZSBuZXh0IGNvbXBhY3Rpb24gYXQgdGhhdCBsZXZlbCBzaG91bGQgc3RhcnQu
CisgIC8vIEVpdGhlciBhbiBlbXB0eSBzdHJpbmcsIG9yIGEgdmFsaWQgSW50ZXJuYWxLZXkuCisg
IHN0ZDo6c3RyaW5nIGNvbXBhY3RfcG9pbnRlcl9bY29uZmlnOjprTnVtTGV2ZWxzXTsKKworICAv
LyBObyBjb3B5aW5nIGFsbG93ZWQKKyAgVmVyc2lvblNldChjb25zdCBWZXJzaW9uU2V0Jik7Cisg
IHZvaWQgb3BlcmF0b3I9KGNvbnN0IFZlcnNpb25TZXQmKTsKK307CisKKy8vIEEgQ29tcGFjdGlv
biBlbmNhcHN1bGF0ZXMgaW5mb3JtYXRpb24gYWJvdXQgYSBjb21wYWN0aW9uLgorY2xhc3MgQ29t
cGFjdGlvbiB7CisgcHVibGljOgorICB+Q29tcGFjdGlvbigpOworCisgIC8vIFJldHVybiB0aGUg
bGV2ZWwgdGhhdCBpcyBiZWluZyBjb21wYWN0ZWQuICBJbnB1dHMgZnJvbSAibGV2ZWwiCisgIC8v
IGFuZCAibGV2ZWwrMSIgd2lsbCBiZSBtZXJnZWQgdG8gcHJvZHVjZSBhIHNldCBvZiAibGV2ZWwr
MSIgZmlsZXMuCisgIGludCBsZXZlbCgpIGNvbnN0IHsgcmV0dXJuIGxldmVsXzsgfQorCisgIC8v
IFJldHVybiB0aGUgb2JqZWN0IHRoYXQgaG9sZHMgdGhlIGVkaXRzIHRvIHRoZSBkZXNjcmlwdG9y
IGRvbmUKKyAgLy8gYnkgdGhpcyBjb21wYWN0aW9uLgorICBWZXJzaW9uRWRpdCogZWRpdCgpIHsg
cmV0dXJuICZlZGl0XzsgfQorCisgIC8vICJ3aGljaCIgbXVzdCBiZSBlaXRoZXIgMCBvciAxCisg
IGludCBudW1faW5wdXRfZmlsZXMoaW50IHdoaWNoKSBjb25zdCB7IHJldHVybiBpbnB1dHNfW3do
aWNoXS5zaXplKCk7IH0KKworICAvLyBSZXR1cm4gdGhlIGl0aCBpbnB1dCBmaWxlIGF0ICJsZXZl
bCgpK3doaWNoIiAoIndoaWNoIiBtdXN0IGJlIDAgb3IgMSkuCisgIEZpbGVNZXRhRGF0YSogaW5w
dXQoaW50IHdoaWNoLCBpbnQgaSkgY29uc3QgeyByZXR1cm4gaW5wdXRzX1t3aGljaF1baV07IH0K
KworICAvLyBNYXhpbXVtIHNpemUgb2YgZmlsZXMgdG8gYnVpbGQgZHVyaW5nIHRoaXMgY29tcGFj
dGlvbi4KKyAgdWludDY0X3QgTWF4T3V0cHV0RmlsZVNpemUoKSBjb25zdCB7IHJldHVybiBtYXhf
b3V0cHV0X2ZpbGVfc2l6ZV87IH0KKworICAvLyBJcyB0aGlzIGEgdHJpdmlhbCBjb21wYWN0aW9u
IHRoYXQgY2FuIGJlIGltcGxlbWVudGVkIGJ5IGp1c3QKKyAgLy8gbW92aW5nIGEgc2luZ2xlIGlu
cHV0IGZpbGUgdG8gdGhlIG5leHQgbGV2ZWwgKG5vIG1lcmdpbmcgb3Igc3BsaXR0aW5nKQorICBi
b29sIElzVHJpdmlhbE1vdmUoKSBjb25zdDsKKworICAvLyBBZGQgYWxsIGlucHV0cyB0byB0aGlz
IGNvbXBhY3Rpb24gYXMgZGVsZXRlIG9wZXJhdGlvbnMgdG8gKmVkaXQuCisgIHZvaWQgQWRkSW5w
dXREZWxldGlvbnMoVmVyc2lvbkVkaXQqIGVkaXQpOworCisgIC8vIFJldHVybnMgdHJ1ZSBpZiB0
aGUgaW5mb3JtYXRpb24gd2UgaGF2ZSBhdmFpbGFibGUgZ3VhcmFudGVlcyB0aGF0CisgIC8vIHRo
ZSBjb21wYWN0aW9uIGlzIHByb2R1Y2luZyBkYXRhIGluICJsZXZlbCsxIiBmb3Igd2hpY2ggbm8g
ZGF0YSBleGlzdHMKKyAgLy8gaW4gbGV2ZWxzIGdyZWF0ZXIgdGhhbiAibGV2ZWwrMSIuCisgIGJv
b2wgSXNCYXNlTGV2ZWxGb3JLZXkoY29uc3QgU2xpY2UmIHVzZXJfa2V5KTsKKworICAvLyBSZXR1
cm5zIHRydWUgaWZmIHdlIHNob3VsZCBzdG9wIGJ1aWxkaW5nIHRoZSBjdXJyZW50IG91dHB1dAor
ICAvLyBiZWZvcmUgcHJvY2Vzc2luZyAiaW50ZXJuYWxfa2V5Ii4KKyAgYm9vbCBTaG91bGRTdG9w
QmVmb3JlKGNvbnN0IFNsaWNlJiBpbnRlcm5hbF9rZXkpOworCisgIC8vIFJlbGVhc2UgdGhlIGlu
cHV0IHZlcnNpb24gZm9yIHRoZSBjb21wYWN0aW9uLCBvbmNlIHRoZSBjb21wYWN0aW9uCisgIC8v
IGlzIHN1Y2Nlc3NmdWwuCisgIHZvaWQgUmVsZWFzZUlucHV0cygpOworCisgcHJpdmF0ZToKKyAg
ZnJpZW5kIGNsYXNzIFZlcnNpb247CisgIGZyaWVuZCBjbGFzcyBWZXJzaW9uU2V0OworCisgIGV4
cGxpY2l0IENvbXBhY3Rpb24oaW50IGxldmVsKTsKKworICBpbnQgbGV2ZWxfOworICB1aW50NjRf
dCBtYXhfb3V0cHV0X2ZpbGVfc2l6ZV87CisgIFZlcnNpb24qIGlucHV0X3ZlcnNpb25fOworICBW
ZXJzaW9uRWRpdCBlZGl0XzsKKworICAvLyBFYWNoIGNvbXBhY3Rpb24gcmVhZHMgaW5wdXRzIGZy
b20gImxldmVsXyIgYW5kICJsZXZlbF8rMSIKKyAgc3RkOjp2ZWN0b3I8RmlsZU1ldGFEYXRhKj4g
aW5wdXRzX1syXTsgICAgICAvLyBUaGUgdHdvIHNldHMgb2YgaW5wdXRzCisKKyAgLy8gU3RhdGUg
dXNlZCB0byBjaGVjayBmb3IgbnVtYmVyIG9mIG9mIG92ZXJsYXBwaW5nIGdyYW5kcGFyZW50IGZp
bGVzCisgIC8vIChwYXJlbnQgPT0gbGV2ZWxfICsgMSwgZ3JhbmRwYXJlbnQgPT0gbGV2ZWxfICsg
MikKKyAgc3RkOjp2ZWN0b3I8RmlsZU1ldGFEYXRhKj4gZ3JhbmRwYXJlbnRzXzsKKyAgc2l6ZV90
IGdyYW5kcGFyZW50X2luZGV4XzsgIC8vIEluZGV4IGluIGdyYW5kcGFyZW50X3N0YXJ0c18KKyAg
Ym9vbCBzZWVuX2tleV87ICAgICAgICAgICAgIC8vIFNvbWUgb3V0cHV0IGtleSBoYXMgYmVlbiBz
ZWVuCisgIGludDY0X3Qgb3ZlcmxhcHBlZF9ieXRlc187ICAvLyBCeXRlcyBvZiBvdmVybGFwIGJl
dHdlZW4gY3VycmVudCBvdXRwdXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFu
ZCBncmFuZHBhcmVudCBmaWxlcworCisgIC8vIFN0YXRlIGZvciBpbXBsZW1lbnRpbmcgSXNCYXNl
TGV2ZWxGb3JLZXkKKworICAvLyBsZXZlbF9wdHJzXyBob2xkcyBpbmRpY2VzIGludG8gaW5wdXRf
dmVyc2lvbl8tPmxldmVsc186IG91ciBzdGF0ZQorICAvLyBpcyB0aGF0IHdlIGFyZSBwb3NpdGlv
bmVkIGF0IG9uZSBvZiB0aGUgZmlsZSByYW5nZXMgZm9yIGVhY2gKKyAgLy8gaGlnaGVyIGxldmVs
IHRoYW4gdGhlIG9uZXMgaW52b2x2ZWQgaW4gdGhpcyBjb21wYWN0aW9uIChpLmUuIGZvcgorICAv
LyBhbGwgTCA+PSBsZXZlbF8gKyAyKS4KKyAgc2l6ZV90IGxldmVsX3B0cnNfW2NvbmZpZzo6a051
bUxldmVsc107Cit9OworCit9ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgorCisjZW5kaWYgIC8vIFNU
T1JBR0VfTEVWRUxEQl9EQl9WRVJTSU9OX1NFVF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGV2ZWxkYi9kYi92ZXJzaW9uX3NldF90ZXN0LmNjIGIvU291cmNlL1RoaXJkUGFydHkv
bGV2ZWxkYi9kYi92ZXJzaW9uX3NldF90ZXN0LmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUwMWUzNGQxMzM3ZDM5
MTcxODViNzAzNjlkOTk4MmRiNTRlNzg3YWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9sZXZlbGRiL2RiL3ZlcnNpb25fc2V0X3Rlc3QuY2MKQEAgLTAsMCArMSwxNzkgQEAK
Ky8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4g
U2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2luY2x1
ZGUgImRiL3ZlcnNpb25fc2V0LmgiCisjaW5jbHVkZSAidXRpbC9sb2dnaW5nLmgiCisjaW5jbHVk
ZSAidXRpbC90ZXN0aGFybmVzcy5oIgorI2luY2x1ZGUgInV0aWwvdGVzdHV0aWwuaCIKKworbmFt
ZXNwYWNlIGxldmVsZGIgeworCitjbGFzcyBGaW5kRmlsZVRlc3QgeworIHB1YmxpYzoKKyAgc3Rk
Ojp2ZWN0b3I8RmlsZU1ldGFEYXRhKj4gZmlsZXNfOworICBib29sIGRpc2pvaW50X3NvcnRlZF9m
aWxlc187CisKKyAgRmluZEZpbGVUZXN0KCkgOiBkaXNqb2ludF9zb3J0ZWRfZmlsZXNfKHRydWUp
IHsgfQorCisgIH5GaW5kRmlsZVRlc3QoKSB7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxl
c18uc2l6ZSgpOyBpKyspIHsKKyAgICAgIGRlbGV0ZSBmaWxlc19baV07CisgICAgfQorICB9CisK
KyAgdm9pZCBBZGQoY29uc3QgY2hhciogc21hbGxlc3QsIGNvbnN0IGNoYXIqIGxhcmdlc3QsCisg
ICAgICAgICAgIFNlcXVlbmNlTnVtYmVyIHNtYWxsZXN0X3NlcSA9IDEwMCwKKyAgICAgICAgICAg
U2VxdWVuY2VOdW1iZXIgbGFyZ2VzdF9zZXEgPSAxMDApIHsKKyAgICBGaWxlTWV0YURhdGEqIGYg
PSBuZXcgRmlsZU1ldGFEYXRhOworICAgIGYtPm51bWJlciA9IGZpbGVzXy5zaXplKCkgKyAxOwor
ICAgIGYtPnNtYWxsZXN0ID0gSW50ZXJuYWxLZXkoc21hbGxlc3QsIHNtYWxsZXN0X3NlcSwga1R5
cGVWYWx1ZSk7CisgICAgZi0+bGFyZ2VzdCA9IEludGVybmFsS2V5KGxhcmdlc3QsIGxhcmdlc3Rf
c2VxLCBrVHlwZVZhbHVlKTsKKyAgICBmaWxlc18ucHVzaF9iYWNrKGYpOworICB9CisKKyAgaW50
IEZpbmQoY29uc3QgY2hhcioga2V5KSB7CisgICAgSW50ZXJuYWxLZXkgdGFyZ2V0KGtleSwgMTAw
LCBrVHlwZVZhbHVlKTsKKyAgICBJbnRlcm5hbEtleUNvbXBhcmF0b3IgY21wKEJ5dGV3aXNlQ29t
cGFyYXRvcigpKTsKKyAgICByZXR1cm4gRmluZEZpbGUoY21wLCBmaWxlc18sIHRhcmdldC5FbmNv
ZGUoKSk7CisgIH0KKworICBib29sIE92ZXJsYXBzKGNvbnN0IGNoYXIqIHNtYWxsZXN0LCBjb25z
dCBjaGFyKiBsYXJnZXN0KSB7CisgICAgSW50ZXJuYWxLZXlDb21wYXJhdG9yIGNtcChCeXRld2lz
ZUNvbXBhcmF0b3IoKSk7CisgICAgU2xpY2UgcyhzbWFsbGVzdCAhPSBOVUxMID8gc21hbGxlc3Qg
OiAiIik7CisgICAgU2xpY2UgbChsYXJnZXN0ICE9IE5VTEwgPyBsYXJnZXN0IDogIiIpOworICAg
IHJldHVybiBTb21lRmlsZU92ZXJsYXBzUmFuZ2UoY21wLCBkaXNqb2ludF9zb3J0ZWRfZmlsZXNf
LCBmaWxlc18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc21hbGxlc3QgIT0g
TlVMTCA/ICZzIDogTlVMTCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGFy
Z2VzdCAhPSBOVUxMID8gJmwgOiBOVUxMKSk7CisgIH0KK307CisKK1RFU1QoRmluZEZpbGVUZXN0
LCBFbXB0eSkgeworICBBU1NFUlRfRVEoMCwgRmluZCgiZm9vIikpOworICBBU1NFUlRfVFJVRSgh
IE92ZXJsYXBzKCJhIiwgInoiKSk7CisgIEFTU0VSVF9UUlVFKCEgT3ZlcmxhcHMoTlVMTCwgInoi
KSk7CisgIEFTU0VSVF9UUlVFKCEgT3ZlcmxhcHMoImEiLCBOVUxMKSk7CisgIEFTU0VSVF9UUlVF
KCEgT3ZlcmxhcHMoTlVMTCwgTlVMTCkpOworfQorCitURVNUKEZpbmRGaWxlVGVzdCwgU2luZ2xl
KSB7CisgIEFkZCgicCIsICJxIik7CisgIEFTU0VSVF9FUSgwLCBGaW5kKCJhIikpOworICBBU1NF
UlRfRVEoMCwgRmluZCgicCIpKTsKKyAgQVNTRVJUX0VRKDAsIEZpbmQoInAxIikpOworICBBU1NF
UlRfRVEoMCwgRmluZCgicSIpKTsKKyAgQVNTRVJUX0VRKDEsIEZpbmQoInExIikpOworICBBU1NF
UlRfRVEoMSwgRmluZCgieiIpKTsKKworICBBU1NFUlRfVFJVRSghIE92ZXJsYXBzKCJhIiwgImIi
KSk7CisgIEFTU0VSVF9UUlVFKCEgT3ZlcmxhcHMoInoxIiwgInoyIikpOworICBBU1NFUlRfVFJV
RShPdmVybGFwcygiYSIsICJwIikpOworICBBU1NFUlRfVFJVRShPdmVybGFwcygiYSIsICJxIikp
OworICBBU1NFUlRfVFJVRShPdmVybGFwcygiYSIsICJ6IikpOworICBBU1NFUlRfVFJVRShPdmVy
bGFwcygicCIsICJwMSIpKTsKKyAgQVNTRVJUX1RSVUUoT3ZlcmxhcHMoInAiLCAicSIpKTsKKyAg
QVNTRVJUX1RSVUUoT3ZlcmxhcHMoInAiLCAieiIpKTsKKyAgQVNTRVJUX1RSVUUoT3ZlcmxhcHMo
InAxIiwgInAyIikpOworICBBU1NFUlRfVFJVRShPdmVybGFwcygicDEiLCAieiIpKTsKKyAgQVNT
RVJUX1RSVUUoT3ZlcmxhcHMoInEiLCAicSIpKTsKKyAgQVNTRVJUX1RSVUUoT3ZlcmxhcHMoInEi
LCAicTEiKSk7CisKKyAgQVNTRVJUX1RSVUUoISBPdmVybGFwcyhOVUxMLCAiaiIpKTsKKyAgQVNT
RVJUX1RSVUUoISBPdmVybGFwcygiciIsIE5VTEwpKTsKKyAgQVNTRVJUX1RSVUUoT3ZlcmxhcHMo
TlVMTCwgInAiKSk7CisgIEFTU0VSVF9UUlVFKE92ZXJsYXBzKE5VTEwsICJwMSIpKTsKKyAgQVNT
RVJUX1RSVUUoT3ZlcmxhcHMoInEiLCBOVUxMKSk7CisgIEFTU0VSVF9UUlVFKE92ZXJsYXBzKE5V
TEwsIE5VTEwpKTsKK30KKworCitURVNUKEZpbmRGaWxlVGVzdCwgTXVsdGlwbGUpIHsKKyAgQWRk
KCIxNTAiLCAiMjAwIik7CisgIEFkZCgiMjAwIiwgIjI1MCIpOworICBBZGQoIjMwMCIsICIzNTAi
KTsKKyAgQWRkKCI0MDAiLCAiNDUwIik7CisgIEFTU0VSVF9FUSgwLCBGaW5kKCIxMDAiKSk7Cisg
IEFTU0VSVF9FUSgwLCBGaW5kKCIxNTAiKSk7CisgIEFTU0VSVF9FUSgwLCBGaW5kKCIxNTEiKSk7
CisgIEFTU0VSVF9FUSgwLCBGaW5kKCIxOTkiKSk7CisgIEFTU0VSVF9FUSgwLCBGaW5kKCIyMDAi
KSk7CisgIEFTU0VSVF9FUSgxLCBGaW5kKCIyMDEiKSk7CisgIEFTU0VSVF9FUSgxLCBGaW5kKCIy
NDkiKSk7CisgIEFTU0VSVF9FUSgxLCBGaW5kKCIyNTAiKSk7CisgIEFTU0VSVF9FUSgyLCBGaW5k
KCIyNTEiKSk7CisgIEFTU0VSVF9FUSgyLCBGaW5kKCIyOTkiKSk7CisgIEFTU0VSVF9FUSgyLCBG
aW5kKCIzMDAiKSk7CisgIEFTU0VSVF9FUSgyLCBGaW5kKCIzNDkiKSk7CisgIEFTU0VSVF9FUSgy
LCBGaW5kKCIzNTAiKSk7CisgIEFTU0VSVF9FUSgzLCBGaW5kKCIzNTEiKSk7CisgIEFTU0VSVF9F
USgzLCBGaW5kKCI0MDAiKSk7CisgIEFTU0VSVF9FUSgzLCBGaW5kKCI0NTAiKSk7CisgIEFTU0VS
VF9FUSg0LCBGaW5kKCI0NTEiKSk7CisKKyAgQVNTRVJUX1RSVUUoISBPdmVybGFwcygiMTAwIiwg
IjE0OSIpKTsKKyAgQVNTRVJUX1RSVUUoISBPdmVybGFwcygiMjUxIiwgIjI5OSIpKTsKKyAgQVNT
RVJUX1RSVUUoISBPdmVybGFwcygiNDUxIiwgIjUwMCIpKTsKKyAgQVNTRVJUX1RSVUUoISBPdmVy
bGFwcygiMzUxIiwgIjM5OSIpKTsKKworICBBU1NFUlRfVFJVRShPdmVybGFwcygiMTAwIiwgIjE1
MCIpKTsKKyAgQVNTRVJUX1RSVUUoT3ZlcmxhcHMoIjEwMCIsICIyMDAiKSk7CisgIEFTU0VSVF9U
UlVFKE92ZXJsYXBzKCIxMDAiLCAiMzAwIikpOworICBBU1NFUlRfVFJVRShPdmVybGFwcygiMTAw
IiwgIjQwMCIpKTsKKyAgQVNTRVJUX1RSVUUoT3ZlcmxhcHMoIjEwMCIsICI1MDAiKSk7CisgIEFT
U0VSVF9UUlVFKE92ZXJsYXBzKCIzNzUiLCAiNDAwIikpOworICBBU1NFUlRfVFJVRShPdmVybGFw
cygiNDUwIiwgIjQ1MCIpKTsKKyAgQVNTRVJUX1RSVUUoT3ZlcmxhcHMoIjQ1MCIsICI1MDAiKSk7
Cit9CisKK1RFU1QoRmluZEZpbGVUZXN0LCBNdWx0aXBsZU51bGxCb3VuZGFyaWVzKSB7CisgIEFk
ZCgiMTUwIiwgIjIwMCIpOworICBBZGQoIjIwMCIsICIyNTAiKTsKKyAgQWRkKCIzMDAiLCAiMzUw
Iik7CisgIEFkZCgiNDAwIiwgIjQ1MCIpOworICBBU1NFUlRfVFJVRSghIE92ZXJsYXBzKE5VTEws
ICIxNDkiKSk7CisgIEFTU0VSVF9UUlVFKCEgT3ZlcmxhcHMoIjQ1MSIsIE5VTEwpKTsKKyAgQVNT
RVJUX1RSVUUoT3ZlcmxhcHMoTlVMTCwgTlVMTCkpOworICBBU1NFUlRfVFJVRShPdmVybGFwcyhO
VUxMLCAiMTUwIikpOworICBBU1NFUlRfVFJVRShPdmVybGFwcyhOVUxMLCAiMTk5IikpOworICBB
U1NFUlRfVFJVRShPdmVybGFwcyhOVUxMLCAiMjAwIikpOworICBBU1NFUlRfVFJVRShPdmVybGFw
cyhOVUxMLCAiMjAxIikpOworICBBU1NFUlRfVFJVRShPdmVybGFwcyhOVUxMLCAiNDAwIikpOwor
ICBBU1NFUlRfVFJVRShPdmVybGFwcyhOVUxMLCAiODAwIikpOworICBBU1NFUlRfVFJVRShPdmVy
bGFwcygiMTAwIiwgTlVMTCkpOworICBBU1NFUlRfVFJVRShPdmVybGFwcygiMjAwIiwgTlVMTCkp
OworICBBU1NFUlRfVFJVRShPdmVybGFwcygiNDQ5IiwgTlVMTCkpOworICBBU1NFUlRfVFJVRShP
dmVybGFwcygiNDUwIiwgTlVMTCkpOworfQorCitURVNUKEZpbmRGaWxlVGVzdCwgT3ZlcmxhcFNl
cXVlbmNlQ2hlY2tzKSB7CisgIEFkZCgiMjAwIiwgIjIwMCIsIDUwMDAsIDMwMDApOworICBBU1NF
UlRfVFJVRSghIE92ZXJsYXBzKCIxOTkiLCAiMTk5IikpOworICBBU1NFUlRfVFJVRSghIE92ZXJs
YXBzKCIyMDEiLCAiMzAwIikpOworICBBU1NFUlRfVFJVRShPdmVybGFwcygiMjAwIiwgIjIwMCIp
KTsKKyAgQVNTRVJUX1RSVUUoT3ZlcmxhcHMoIjE5MCIsICIyMDAiKSk7CisgIEFTU0VSVF9UUlVF
KE92ZXJsYXBzKCIyMDAiLCAiMjEwIikpOworfQorCitURVNUKEZpbmRGaWxlVGVzdCwgT3Zlcmxh
cHBpbmdGaWxlcykgeworICBBZGQoIjE1MCIsICI2MDAiKTsKKyAgQWRkKCI0MDAiLCAiNTAwIik7
CisgIGRpc2pvaW50X3NvcnRlZF9maWxlc18gPSBmYWxzZTsKKyAgQVNTRVJUX1RSVUUoISBPdmVy
bGFwcygiMTAwIiwgIjE0OSIpKTsKKyAgQVNTRVJUX1RSVUUoISBPdmVybGFwcygiNjAxIiwgIjcw
MCIpKTsKKyAgQVNTRVJUX1RSVUUoT3ZlcmxhcHMoIjEwMCIsICIxNTAiKSk7CisgIEFTU0VSVF9U
UlVFKE92ZXJsYXBzKCIxMDAiLCAiMjAwIikpOworICBBU1NFUlRfVFJVRShPdmVybGFwcygiMTAw
IiwgIjMwMCIpKTsKKyAgQVNTRVJUX1RSVUUoT3ZlcmxhcHMoIjEwMCIsICI0MDAiKSk7CisgIEFT
U0VSVF9UUlVFKE92ZXJsYXBzKCIxMDAiLCAiNTAwIikpOworICBBU1NFUlRfVFJVRShPdmVybGFw
cygiMzc1IiwgIjQwMCIpKTsKKyAgQVNTRVJUX1RSVUUoT3ZlcmxhcHMoIjQ1MCIsICI0NTAiKSk7
CisgIEFTU0VSVF9UUlVFKE92ZXJsYXBzKCI0NTAiLCAiNTAwIikpOworICBBU1NFUlRfVFJVRShP
dmVybGFwcygiNDUwIiwgIjcwMCIpKTsKKyAgQVNTRVJUX1RSVUUoT3ZlcmxhcHMoIjYwMCIsICI3
MDAiKSk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBsZXZlbGRiCisKK2ludCBtYWluKGludCBhcmdj
LCBjaGFyKiogYXJndikgeworICByZXR1cm4gbGV2ZWxkYjo6dGVzdDo6UnVuQWxsVGVzdHMoKTsK
K30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvd3JpdGVfYmF0Y2gu
Y2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL3dyaXRlX2JhdGNoLmNjCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjMzZjRhNDI1N2VhOTRlMDEwNWE5MzY4ZGU3OWQ3NjFhYzdiZjk3OWEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL3dyaXRlX2JhdGNoLmNjCkBAIC0w
LDAgKzEsMTQ3IEBACisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRv
cnMuCisvLworLy8gV3JpdGVCYXRjaDo6cmVwXyA6PQorLy8gICAgc2VxdWVuY2U6IGZpeGVkNjQK
Ky8vICAgIGNvdW50OiBmaXhlZDMyCisvLyAgICBkYXRhOiByZWNvcmRbY291bnRdCisvLyByZWNv
cmQgOj0KKy8vICAgIGtUeXBlVmFsdWUgdmFyc3RyaW5nIHZhcnN0cmluZyAgICAgICAgIHwKKy8v
ICAgIGtUeXBlRGVsZXRpb24gdmFyc3RyaW5nCisvLyB2YXJzdHJpbmcgOj0KKy8vICAgIGxlbjog
dmFyaW50MzIKKy8vICAgIGRhdGE6IHVpbnQ4W2xlbl0KKworI2luY2x1ZGUgImxldmVsZGIvd3Jp
dGVfYmF0Y2guaCIKKworI2luY2x1ZGUgImxldmVsZGIvZGIuaCIKKyNpbmNsdWRlICJkYi9kYmZv
cm1hdC5oIgorI2luY2x1ZGUgImRiL21lbXRhYmxlLmgiCisjaW5jbHVkZSAiZGIvd3JpdGVfYmF0
Y2hfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJ1dGlsL2NvZGluZy5oIgorCituYW1lc3BhY2UgbGV2
ZWxkYiB7CisKKy8vIFdyaXRlQmF0Y2ggaGVhZGVyIGhhcyBhbiA4LWJ5dGUgc2VxdWVuY2UgbnVt
YmVyIGZvbGxvd2VkIGJ5IGEgNC1ieXRlIGNvdW50Lgorc3RhdGljIGNvbnN0IHNpemVfdCBrSGVh
ZGVyID0gMTI7CisKK1dyaXRlQmF0Y2g6OldyaXRlQmF0Y2goKSB7CisgIENsZWFyKCk7Cit9CisK
K1dyaXRlQmF0Y2g6On5Xcml0ZUJhdGNoKCkgeyB9CisKK1dyaXRlQmF0Y2g6OkhhbmRsZXI6On5I
YW5kbGVyKCkgeyB9CisKK3ZvaWQgV3JpdGVCYXRjaDo6Q2xlYXIoKSB7CisgIHJlcF8uY2xlYXIo
KTsKKyAgcmVwXy5yZXNpemUoa0hlYWRlcik7Cit9CisKK1N0YXR1cyBXcml0ZUJhdGNoOjpJdGVy
YXRlKEhhbmRsZXIqIGhhbmRsZXIpIGNvbnN0IHsKKyAgU2xpY2UgaW5wdXQocmVwXyk7CisgIGlm
IChpbnB1dC5zaXplKCkgPCBrSGVhZGVyKSB7CisgICAgcmV0dXJuIFN0YXR1czo6Q29ycnVwdGlv
bigibWFsZm9ybWVkIFdyaXRlQmF0Y2ggKHRvbyBzbWFsbCkiKTsKKyAgfQorCisgIGlucHV0LnJl
bW92ZV9wcmVmaXgoa0hlYWRlcik7CisgIFNsaWNlIGtleSwgdmFsdWU7CisgIGludCBmb3VuZCA9
IDA7CisgIHdoaWxlICghaW5wdXQuZW1wdHkoKSkgeworICAgIGZvdW5kKys7CisgICAgY2hhciB0
YWcgPSBpbnB1dFswXTsKKyAgICBpbnB1dC5yZW1vdmVfcHJlZml4KDEpOworICAgIHN3aXRjaCAo
dGFnKSB7CisgICAgICBjYXNlIGtUeXBlVmFsdWU6CisgICAgICAgIGlmIChHZXRMZW5ndGhQcmVm
aXhlZFNsaWNlKCZpbnB1dCwgJmtleSkgJiYKKyAgICAgICAgICAgIEdldExlbmd0aFByZWZpeGVk
U2xpY2UoJmlucHV0LCAmdmFsdWUpKSB7CisgICAgICAgICAgaGFuZGxlci0+UHV0KGtleSwgdmFs
dWUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHJldHVybiBTdGF0dXM6OkNvcnJ1cHRp
b24oImJhZCBXcml0ZUJhdGNoIFB1dCIpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBrVHlwZURlbGV0aW9uOgorICAgICAgICBpZiAoR2V0TGVuZ3RoUHJlZml4ZWRTbGlj
ZSgmaW5wdXQsICZrZXkpKSB7CisgICAgICAgICAgaGFuZGxlci0+RGVsZXRlKGtleSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgcmV0dXJuIFN0YXR1czo6Q29ycnVwdGlvbigiYmFkIFdy
aXRlQmF0Y2ggRGVsZXRlIik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm4gU3RhdHVzOjpDb3JydXB0aW9uKCJ1bmtub3duIFdyaXRlQmF0
Y2ggdGFnIik7CisgICAgfQorICB9CisgIGlmIChmb3VuZCAhPSBXcml0ZUJhdGNoSW50ZXJuYWw6
OkNvdW50KHRoaXMpKSB7CisgICAgcmV0dXJuIFN0YXR1czo6Q29ycnVwdGlvbigiV3JpdGVCYXRj
aCBoYXMgd3JvbmcgY291bnQiKTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gU3RhdHVzOjpPSygp
OworICB9Cit9CisKK2ludCBXcml0ZUJhdGNoSW50ZXJuYWw6OkNvdW50KGNvbnN0IFdyaXRlQmF0
Y2gqIGIpIHsKKyAgcmV0dXJuIERlY29kZUZpeGVkMzIoYi0+cmVwXy5kYXRhKCkgKyA4KTsKK30K
Kwordm9pZCBXcml0ZUJhdGNoSW50ZXJuYWw6OlNldENvdW50KFdyaXRlQmF0Y2gqIGIsIGludCBu
KSB7CisgIEVuY29kZUZpeGVkMzIoJmItPnJlcF9bOF0sIG4pOworfQorCitTZXF1ZW5jZU51bWJl
ciBXcml0ZUJhdGNoSW50ZXJuYWw6OlNlcXVlbmNlKGNvbnN0IFdyaXRlQmF0Y2gqIGIpIHsKKyAg
cmV0dXJuIFNlcXVlbmNlTnVtYmVyKERlY29kZUZpeGVkNjQoYi0+cmVwXy5kYXRhKCkpKTsKK30K
Kwordm9pZCBXcml0ZUJhdGNoSW50ZXJuYWw6OlNldFNlcXVlbmNlKFdyaXRlQmF0Y2gqIGIsIFNl
cXVlbmNlTnVtYmVyIHNlcSkgeworICBFbmNvZGVGaXhlZDY0KCZiLT5yZXBfWzBdLCBzZXEpOwor
fQorCit2b2lkIFdyaXRlQmF0Y2g6OlB1dChjb25zdCBTbGljZSYga2V5LCBjb25zdCBTbGljZSYg
dmFsdWUpIHsKKyAgV3JpdGVCYXRjaEludGVybmFsOjpTZXRDb3VudCh0aGlzLCBXcml0ZUJhdGNo
SW50ZXJuYWw6OkNvdW50KHRoaXMpICsgMSk7CisgIHJlcF8ucHVzaF9iYWNrKHN0YXRpY19jYXN0
PGNoYXI+KGtUeXBlVmFsdWUpKTsKKyAgUHV0TGVuZ3RoUHJlZml4ZWRTbGljZSgmcmVwXywga2V5
KTsKKyAgUHV0TGVuZ3RoUHJlZml4ZWRTbGljZSgmcmVwXywgdmFsdWUpOworfQorCit2b2lkIFdy
aXRlQmF0Y2g6OkRlbGV0ZShjb25zdCBTbGljZSYga2V5KSB7CisgIFdyaXRlQmF0Y2hJbnRlcm5h
bDo6U2V0Q291bnQodGhpcywgV3JpdGVCYXRjaEludGVybmFsOjpDb3VudCh0aGlzKSArIDEpOwor
ICByZXBfLnB1c2hfYmFjayhzdGF0aWNfY2FzdDxjaGFyPihrVHlwZURlbGV0aW9uKSk7CisgIFB1
dExlbmd0aFByZWZpeGVkU2xpY2UoJnJlcF8sIGtleSk7Cit9CisKK25hbWVzcGFjZSB7CitjbGFz
cyBNZW1UYWJsZUluc2VydGVyIDogcHVibGljIFdyaXRlQmF0Y2g6OkhhbmRsZXIgeworIHB1Ymxp
YzoKKyAgU2VxdWVuY2VOdW1iZXIgc2VxdWVuY2VfOworICBNZW1UYWJsZSogbWVtXzsKKworICB2
aXJ0dWFsIHZvaWQgUHV0KGNvbnN0IFNsaWNlJiBrZXksIGNvbnN0IFNsaWNlJiB2YWx1ZSkgewor
ICAgIG1lbV8tPkFkZChzZXF1ZW5jZV8sIGtUeXBlVmFsdWUsIGtleSwgdmFsdWUpOworICAgIHNl
cXVlbmNlXysrOworICB9CisgIHZpcnR1YWwgdm9pZCBEZWxldGUoY29uc3QgU2xpY2UmIGtleSkg
eworICAgIG1lbV8tPkFkZChzZXF1ZW5jZV8sIGtUeXBlRGVsZXRpb24sIGtleSwgU2xpY2UoKSk7
CisgICAgc2VxdWVuY2VfKys7CisgIH0KK307Cit9ICAvLyBuYW1lc3BhY2UKKworU3RhdHVzIFdy
aXRlQmF0Y2hJbnRlcm5hbDo6SW5zZXJ0SW50byhjb25zdCBXcml0ZUJhdGNoKiBiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZW1UYWJsZSogbWVtdGFibGUpIHsKKyAg
TWVtVGFibGVJbnNlcnRlciBpbnNlcnRlcjsKKyAgaW5zZXJ0ZXIuc2VxdWVuY2VfID0gV3JpdGVC
YXRjaEludGVybmFsOjpTZXF1ZW5jZShiKTsKKyAgaW5zZXJ0ZXIubWVtXyA9IG1lbXRhYmxlOwor
ICByZXR1cm4gYi0+SXRlcmF0ZSgmaW5zZXJ0ZXIpOworfQorCit2b2lkIFdyaXRlQmF0Y2hJbnRl
cm5hbDo6U2V0Q29udGVudHMoV3JpdGVCYXRjaCogYiwgY29uc3QgU2xpY2UmIGNvbnRlbnRzKSB7
CisgIGFzc2VydChjb250ZW50cy5zaXplKCkgPj0ga0hlYWRlcik7CisgIGItPnJlcF8uYXNzaWdu
KGNvbnRlbnRzLmRhdGEoKSwgY29udGVudHMuc2l6ZSgpKTsKK30KKwordm9pZCBXcml0ZUJhdGNo
SW50ZXJuYWw6OkFwcGVuZChXcml0ZUJhdGNoKiBkc3QsIGNvbnN0IFdyaXRlQmF0Y2gqIHNyYykg
eworICBTZXRDb3VudChkc3QsIENvdW50KGRzdCkgKyBDb3VudChzcmMpKTsKKyAgYXNzZXJ0KHNy
Yy0+cmVwXy5zaXplKCkgPj0ga0hlYWRlcik7CisgIGRzdC0+cmVwXy5hcHBlbmQoc3JjLT5yZXBf
LmRhdGEoKSArIGtIZWFkZXIsIHNyYy0+cmVwXy5zaXplKCkgLSBrSGVhZGVyKTsKK30KKworfSAg
Ly8gbmFtZXNwYWNlIGxldmVsZGIKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVs
ZGIvZGIvd3JpdGVfYmF0Y2hfaW50ZXJuYWwuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIv
ZGIvd3JpdGVfYmF0Y2hfaW50ZXJuYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NDIzYTdmMzE4NDI0NTdkZWE2
MmQ0MzU0NzYxNmIyZjVlYzg1MmY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvbGV2ZWxkYi9kYi93cml0ZV9iYXRjaF9pbnRlcm5hbC5oCkBAIC0wLDAgKzEsNDkgQEAKKy8v
IENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2Vl
IHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2lmbmRlZiBT
VE9SQUdFX0xFVkVMREJfREJfV1JJVEVfQkFUQ0hfSU5URVJOQUxfSF8KKyNkZWZpbmUgU1RPUkFH
RV9MRVZFTERCX0RCX1dSSVRFX0JBVENIX0lOVEVSTkFMX0hfCisKKyNpbmNsdWRlICJsZXZlbGRi
L3dyaXRlX2JhdGNoLmgiCisKK25hbWVzcGFjZSBsZXZlbGRiIHsKKworY2xhc3MgTWVtVGFibGU7
CisKKy8vIFdyaXRlQmF0Y2hJbnRlcm5hbCBwcm92aWRlcyBzdGF0aWMgbWV0aG9kcyBmb3IgbWFu
aXB1bGF0aW5nIGEKKy8vIFdyaXRlQmF0Y2ggdGhhdCB3ZSBkb24ndCB3YW50IGluIHRoZSBwdWJs
aWMgV3JpdGVCYXRjaCBpbnRlcmZhY2UuCitjbGFzcyBXcml0ZUJhdGNoSW50ZXJuYWwgeworIHB1
YmxpYzoKKyAgLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgYmF0Y2guCisg
IHN0YXRpYyBpbnQgQ291bnQoY29uc3QgV3JpdGVCYXRjaCogYmF0Y2gpOworCisgIC8vIFNldCB0
aGUgY291bnQgZm9yIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgYmF0Y2guCisgIHN0YXRp
YyB2b2lkIFNldENvdW50KFdyaXRlQmF0Y2gqIGJhdGNoLCBpbnQgbik7CisKKyAgLy8gUmV0dXJu
IHRoZSBzZXFldW5jZSBudW1iZXIgZm9yIHRoZSBzdGFydCBvZiB0aGlzIGJhdGNoLgorICBzdGF0
aWMgU2VxdWVuY2VOdW1iZXIgU2VxdWVuY2UoY29uc3QgV3JpdGVCYXRjaCogYmF0Y2gpOworCisg
IC8vIFN0b3JlIHRoZSBzcGVjaWZpZWQgbnVtYmVyIGFzIHRoZSBzZXFldW5jZSBudW1iZXIgZm9y
IHRoZSBzdGFydCBvZgorICAvLyB0aGlzIGJhdGNoLgorICBzdGF0aWMgdm9pZCBTZXRTZXF1ZW5j
ZShXcml0ZUJhdGNoKiBiYXRjaCwgU2VxdWVuY2VOdW1iZXIgc2VxKTsKKworICBzdGF0aWMgU2xp
Y2UgQ29udGVudHMoY29uc3QgV3JpdGVCYXRjaCogYmF0Y2gpIHsKKyAgICByZXR1cm4gU2xpY2Uo
YmF0Y2gtPnJlcF8pOworICB9CisKKyAgc3RhdGljIHNpemVfdCBCeXRlU2l6ZShjb25zdCBXcml0
ZUJhdGNoKiBiYXRjaCkgeworICAgIHJldHVybiBiYXRjaC0+cmVwXy5zaXplKCk7CisgIH0KKwor
ICBzdGF0aWMgdm9pZCBTZXRDb250ZW50cyhXcml0ZUJhdGNoKiBiYXRjaCwgY29uc3QgU2xpY2Um
IGNvbnRlbnRzKTsKKworICBzdGF0aWMgU3RhdHVzIEluc2VydEludG8oY29uc3QgV3JpdGVCYXRj
aCogYmF0Y2gsIE1lbVRhYmxlKiBtZW10YWJsZSk7CisKKyAgc3RhdGljIHZvaWQgQXBwZW5kKFdy
aXRlQmF0Y2gqIGRzdCwgY29uc3QgV3JpdGVCYXRjaCogc3JjKTsKK307CisKK30gIC8vIG5hbWVz
cGFjZSBsZXZlbGRiCisKKworI2VuZGlmICAvLyBTVE9SQUdFX0xFVkVMREJfREJfV1JJVEVfQkFU
Q0hfSU5URVJOQUxfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIv
d3JpdGVfYmF0Y2hfdGVzdC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvd3JpdGVf
YmF0Y2hfdGVzdC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MDY0ZTNkODVlYjM1ZjMyZDIwZWY0Yzc0NTZiMDg2
NmQ1MjVhZWU4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9k
Yi93cml0ZV9iYXRjaF90ZXN0LmNjCkBAIC0wLDAgKzEsMTIwIEBACisvLyBDb3B5cmlnaHQgKGMp
IDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBm
aWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCisKKyNpbmNsdWRlICJsZXZlbGRiL2RiLmgi
CisKKyNpbmNsdWRlICJkYi9tZW10YWJsZS5oIgorI2luY2x1ZGUgImRiL3dyaXRlX2JhdGNoX2lu
dGVybmFsLmgiCisjaW5jbHVkZSAibGV2ZWxkYi9lbnYuaCIKKyNpbmNsdWRlICJ1dGlsL2xvZ2dp
bmcuaCIKKyNpbmNsdWRlICJ1dGlsL3Rlc3RoYXJuZXNzLmgiCisKK25hbWVzcGFjZSBsZXZlbGRi
IHsKKworc3RhdGljIHN0ZDo6c3RyaW5nIFByaW50Q29udGVudHMoV3JpdGVCYXRjaCogYikgewor
ICBJbnRlcm5hbEtleUNvbXBhcmF0b3IgY21wKEJ5dGV3aXNlQ29tcGFyYXRvcigpKTsKKyAgTWVt
VGFibGUqIG1lbSA9IG5ldyBNZW1UYWJsZShjbXApOworICBtZW0tPlJlZigpOworICBzdGQ6OnN0
cmluZyBzdGF0ZTsKKyAgU3RhdHVzIHMgPSBXcml0ZUJhdGNoSW50ZXJuYWw6Okluc2VydEludG8o
YiwgbWVtKTsKKyAgaW50IGNvdW50ID0gMDsKKyAgSXRlcmF0b3IqIGl0ZXIgPSBtZW0tPk5ld0l0
ZXJhdG9yKCk7CisgIGZvciAoaXRlci0+U2Vla1RvRmlyc3QoKTsgaXRlci0+VmFsaWQoKTsgaXRl
ci0+TmV4dCgpKSB7CisgICAgUGFyc2VkSW50ZXJuYWxLZXkgaWtleTsKKyAgICBBU1NFUlRfVFJV
RShQYXJzZUludGVybmFsS2V5KGl0ZXItPmtleSgpLCAmaWtleSkpOworICAgIHN3aXRjaCAoaWtl
eS50eXBlKSB7CisgICAgICBjYXNlIGtUeXBlVmFsdWU6CisgICAgICAgIHN0YXRlLmFwcGVuZCgi
UHV0KCIpOworICAgICAgICBzdGF0ZS5hcHBlbmQoaWtleS51c2VyX2tleS5Ub1N0cmluZygpKTsK
KyAgICAgICAgc3RhdGUuYXBwZW5kKCIsICIpOworICAgICAgICBzdGF0ZS5hcHBlbmQoaXRlci0+
dmFsdWUoKS5Ub1N0cmluZygpKTsKKyAgICAgICAgc3RhdGUuYXBwZW5kKCIpIik7CisgICAgICAg
IGNvdW50Kys7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBrVHlwZURlbGV0aW9uOgorICAg
ICAgICBzdGF0ZS5hcHBlbmQoIkRlbGV0ZSgiKTsKKyAgICAgICAgc3RhdGUuYXBwZW5kKGlrZXku
dXNlcl9rZXkuVG9TdHJpbmcoKSk7CisgICAgICAgIHN0YXRlLmFwcGVuZCgiKSIpOworICAgICAg
ICBjb3VudCsrOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgc3RhdGUuYXBwZW5kKCJAIik7
CisgICAgc3RhdGUuYXBwZW5kKE51bWJlclRvU3RyaW5nKGlrZXkuc2VxdWVuY2UpKTsKKyAgfQor
ICBkZWxldGUgaXRlcjsKKyAgaWYgKCFzLm9rKCkpIHsKKyAgICBzdGF0ZS5hcHBlbmQoIlBhcnNl
RXJyb3IoKSIpOworICB9IGVsc2UgaWYgKGNvdW50ICE9IFdyaXRlQmF0Y2hJbnRlcm5hbDo6Q291
bnQoYikpIHsKKyAgICBzdGF0ZS5hcHBlbmQoIkNvdW50TWlzbWF0Y2goKSIpOworICB9CisgIG1l
bS0+VW5yZWYoKTsKKyAgcmV0dXJuIHN0YXRlOworfQorCitjbGFzcyBXcml0ZUJhdGNoVGVzdCB7
IH07CisKK1RFU1QoV3JpdGVCYXRjaFRlc3QsIEVtcHR5KSB7CisgIFdyaXRlQmF0Y2ggYmF0Y2g7
CisgIEFTU0VSVF9FUSgiIiwgUHJpbnRDb250ZW50cygmYmF0Y2gpKTsKKyAgQVNTRVJUX0VRKDAs
IFdyaXRlQmF0Y2hJbnRlcm5hbDo6Q291bnQoJmJhdGNoKSk7Cit9CisKK1RFU1QoV3JpdGVCYXRj
aFRlc3QsIE11bHRpcGxlKSB7CisgIFdyaXRlQmF0Y2ggYmF0Y2g7CisgIGJhdGNoLlB1dChTbGlj
ZSgiZm9vIiksIFNsaWNlKCJiYXIiKSk7CisgIGJhdGNoLkRlbGV0ZShTbGljZSgiYm94IikpOwor
ICBiYXRjaC5QdXQoU2xpY2UoImJheiIpLCBTbGljZSgiYm9vIikpOworICBXcml0ZUJhdGNoSW50
ZXJuYWw6OlNldFNlcXVlbmNlKCZiYXRjaCwgMTAwKTsKKyAgQVNTRVJUX0VRKDEwMCwgV3JpdGVC
YXRjaEludGVybmFsOjpTZXF1ZW5jZSgmYmF0Y2gpKTsKKyAgQVNTRVJUX0VRKDMsIFdyaXRlQmF0
Y2hJbnRlcm5hbDo6Q291bnQoJmJhdGNoKSk7CisgIEFTU0VSVF9FUSgiUHV0KGJheiwgYm9vKUAx
MDIiCisgICAgICAgICAgICAiRGVsZXRlKGJveClAMTAxIgorICAgICAgICAgICAgIlB1dChmb28s
IGJhcilAMTAwIiwKKyAgICAgICAgICAgIFByaW50Q29udGVudHMoJmJhdGNoKSk7Cit9CisKK1RF
U1QoV3JpdGVCYXRjaFRlc3QsIENvcnJ1cHRpb24pIHsKKyAgV3JpdGVCYXRjaCBiYXRjaDsKKyAg
YmF0Y2guUHV0KFNsaWNlKCJmb28iKSwgU2xpY2UoImJhciIpKTsKKyAgYmF0Y2guRGVsZXRlKFNs
aWNlKCJib3giKSk7CisgIFdyaXRlQmF0Y2hJbnRlcm5hbDo6U2V0U2VxdWVuY2UoJmJhdGNoLCAy
MDApOworICBTbGljZSBjb250ZW50cyA9IFdyaXRlQmF0Y2hJbnRlcm5hbDo6Q29udGVudHMoJmJh
dGNoKTsKKyAgV3JpdGVCYXRjaEludGVybmFsOjpTZXRDb250ZW50cygmYmF0Y2gsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU2xpY2UoY29udGVudHMuZGF0YSgpLGNvbnRlbnRz
LnNpemUoKS0xKSk7CisgIEFTU0VSVF9FUSgiUHV0KGZvbywgYmFyKUAyMDAiCisgICAgICAgICAg
ICAiUGFyc2VFcnJvcigpIiwKKyAgICAgICAgICAgIFByaW50Q29udGVudHMoJmJhdGNoKSk7Cit9
CisKK1RFU1QoV3JpdGVCYXRjaFRlc3QsIEFwcGVuZCkgeworICBXcml0ZUJhdGNoIGIxLCBiMjsK
KyAgV3JpdGVCYXRjaEludGVybmFsOjpTZXRTZXF1ZW5jZSgmYjEsIDIwMCk7CisgIFdyaXRlQmF0
Y2hJbnRlcm5hbDo6U2V0U2VxdWVuY2UoJmIyLCAzMDApOworICBXcml0ZUJhdGNoSW50ZXJuYWw6
OkFwcGVuZCgmYjEsICZiMik7CisgIEFTU0VSVF9FUSgiIiwKKyAgICAgICAgICAgIFByaW50Q29u
dGVudHMoJmIxKSk7CisgIGIyLlB1dCgiYSIsICJ2YSIpOworICBXcml0ZUJhdGNoSW50ZXJuYWw6
OkFwcGVuZCgmYjEsICZiMik7CisgIEFTU0VSVF9FUSgiUHV0KGEsIHZhKUAyMDAiLAorICAgICAg
ICAgICAgUHJpbnRDb250ZW50cygmYjEpKTsKKyAgYjIuQ2xlYXIoKTsKKyAgYjIuUHV0KCJiIiwg
InZiIik7CisgIFdyaXRlQmF0Y2hJbnRlcm5hbDo6QXBwZW5kKCZiMSwgJmIyKTsKKyAgQVNTRVJU
X0VRKCJQdXQoYSwgdmEpQDIwMCIKKyAgICAgICAgICAgICJQdXQoYiwgdmIpQDIwMSIsCisgICAg
ICAgICAgICBQcmludENvbnRlbnRzKCZiMSkpOworICBiMi5EZWxldGUoImZvbyIpOworICBXcml0
ZUJhdGNoSW50ZXJuYWw6OkFwcGVuZCgmYjEsICZiMik7CisgIEFTU0VSVF9FUSgiUHV0KGEsIHZh
KUAyMDAiCisgICAgICAgICAgICAiUHV0KGIsIHZiKUAyMDIiCisgICAgICAgICAgICAiUHV0KGIs
IHZiKUAyMDEiCisgICAgICAgICAgICAiRGVsZXRlKGZvbylAMjAzIiwKKyAgICAgICAgICAgIFBy
aW50Q29udGVudHMoJmIxKSk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBsZXZlbGRiCisKK2ludCBt
YWluKGludCBhcmdjLCBjaGFyKiogYXJndikgeworICByZXR1cm4gbGV2ZWxkYjo6dGVzdDo6UnVu
QWxsVGVzdHMoKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZG9j
L2JlbmNoL2RiX2JlbmNoX3NxbGl0ZTMuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2Rv
Yy9iZW5jaC9kYl9iZW5jaF9zcWxpdGUzLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU2M2FhYThkY2MyODk5MTUx
NzZiMTI3NDlkZDllYzIxYjUwYWJhMDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9sZXZlbGRiL2RvYy9iZW5jaC9kYl9iZW5jaF9zcWxpdGUzLmNjCkBAIC0wLDAgKzEsNzE4
IEBACisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCisKKyNp
bmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHNxbGl0ZTMu
aD4KKyNpbmNsdWRlICJ1dGlsL2hpc3RvZ3JhbS5oIgorI2luY2x1ZGUgInV0aWwvcmFuZG9tLmgi
CisjaW5jbHVkZSAidXRpbC90ZXN0dXRpbC5oIgorCisvLyBDb21tYS1zZXBhcmF0ZWQgbGlzdCBv
ZiBvcGVyYXRpb25zIHRvIHJ1biBpbiB0aGUgc3BlY2lmaWVkIG9yZGVyCisvLyAgIEFjdHVhbCBi
ZW5jaG1hcmtzOgorLy8KKy8vICAgZmlsbHNlcSAgICAgICAtLSB3cml0ZSBOIHZhbHVlcyBpbiBz
ZXF1ZW50aWFsIGtleSBvcmRlciBpbiBhc3luYyBtb2RlCisvLyAgIGZpbGxzZXFzeW5jICAgLS0g
d3JpdGUgTi8xMDAgdmFsdWVzIGluIHNlcXVlbnRpYWwga2V5IG9yZGVyIGluIHN5bmMgbW9kZQor
Ly8gICBmaWxsc2VxYmF0Y2ggIC0tIGJhdGNoIHdyaXRlIE4gdmFsdWVzIGluIHNlcXVlbnRpYWwg
a2V5IG9yZGVyIGluIGFzeW5jIG1vZGUKKy8vICAgZmlsbHJhbmRvbSAgICAtLSB3cml0ZSBOIHZh
bHVlcyBpbiByYW5kb20ga2V5IG9yZGVyIGluIGFzeW5jIG1vZGUKKy8vICAgZmlsbHJhbmRzeW5j
ICAtLSB3cml0ZSBOLzEwMCB2YWx1ZXMgaW4gcmFuZG9tIGtleSBvcmRlciBpbiBzeW5jIG1vZGUK
Ky8vICAgZmlsbHJhbmRiYXRjaCAtLSBiYXRjaCB3cml0ZSBOIHZhbHVlcyBpbiBzZXF1ZW50aWFs
IGtleSBvcmRlciBpbiBhc3luYyBtb2RlCisvLyAgIG92ZXJ3cml0ZSAgICAgLS0gb3ZlcndyaXRl
IE4gdmFsdWVzIGluIHJhbmRvbSBrZXkgb3JkZXIgaW4gYXN5bmMgbW9kZQorLy8gICBmaWxscmFu
ZDEwMEsgIC0tIHdyaXRlIE4vMTAwMCAxMDBLIHZhbHVlcyBpbiByYW5kb20gb3JkZXIgaW4gYXN5
bmMgbW9kZQorLy8gICBmaWxsc2VxMTAwSyAgIC0tIHdyaXRlIE4vMTAwMCAxMDBLIHZhbHVlcyBp
biBzZXF1ZW50aWFsIG9yZGVyIGluIGFzeW5jIG1vZGUKKy8vICAgcmVhZHNlcSAgICAgICAtLSBy
ZWFkIE4gdGltZXMgc2VxdWVudGlhbGx5CisvLyAgIHJlYWRyYW5kb20gICAgLS0gcmVhZCBOIHRp
bWVzIGluIHJhbmRvbSBvcmRlcgorLy8gICByZWFkcmFuZDEwMEsgIC0tIHJlYWQgTi8xMDAwIDEw
MEsgdmFsdWVzIGluIHNlcXVlbnRpYWwgb3JkZXIgaW4gYXN5bmMgbW9kZQorc3RhdGljIGNvbnN0
IGNoYXIqIEZMQUdTX2JlbmNobWFya3MgPQorICAgICJmaWxsc2VxLCIKKyAgICAiZmlsbHNlcXN5
bmMsIgorICAgICJmaWxsc2VxYmF0Y2gsIgorICAgICJmaWxscmFuZG9tLCIKKyAgICAiZmlsbHJh
bmRzeW5jLCIKKyAgICAiZmlsbHJhbmRiYXRjaCwiCisgICAgIm92ZXJ3cml0ZSwiCisgICAgIm92
ZXJ3cml0ZWJhdGNoLCIKKyAgICAicmVhZHJhbmRvbSwiCisgICAgInJlYWRzZXEsIgorICAgICJm
aWxscmFuZDEwMEssIgorICAgICJmaWxsc2VxMTAwSywiCisgICAgInJlYWRzZXEsIgorICAgICJy
ZWFkcmFuZDEwMEssIgorICAgIDsKKworLy8gTnVtYmVyIG9mIGtleS92YWx1ZXMgdG8gcGxhY2Ug
aW4gZGF0YWJhc2UKK3N0YXRpYyBpbnQgRkxBR1NfbnVtID0gMTAwMDAwMDsKKworLy8gTnVtYmVy
IG9mIHJlYWQgb3BlcmF0aW9ucyB0byBkby4gIElmIG5lZ2F0aXZlLCBkbyBGTEFHU19udW0gcmVh
ZHMuCitzdGF0aWMgaW50IEZMQUdTX3JlYWRzID0gLTE7CisKKy8vIFNpemUgb2YgZWFjaCB2YWx1
ZQorc3RhdGljIGludCBGTEFHU192YWx1ZV9zaXplID0gMTAwOworCisvLyBQcmludCBoaXN0b2dy
YW0gb2Ygb3BlcmF0aW9uIHRpbWluZ3MKK3N0YXRpYyBib29sIEZMQUdTX2hpc3RvZ3JhbSA9IGZh
bHNlOworCisvLyBBcnJhbmdlIHRvIGdlbmVyYXRlIHZhbHVlcyB0aGF0IHNocmluayB0byB0aGlz
IGZyYWN0aW9uIG9mCisvLyB0aGVpciBvcmlnaW5hbCBzaXplIGFmdGVyIGNvbXByZXNzaW9uCitz
dGF0aWMgZG91YmxlIEZMQUdTX2NvbXByZXNzaW9uX3JhdGlvID0gMC41OworCisvLyBQYWdlIHNp
emUuIERlZmF1bHQgMSBLQi4KK3N0YXRpYyBpbnQgRkxBR1NfcGFnZV9zaXplID0gMTAyNDsKKwor
Ly8gTnVtYmVyIG9mIHBhZ2VzLgorLy8gRGVmYXVsdCBjYWNoZSBzaXplID0gRkxBR1NfcGFnZV9z
aXplICogRkxBR1NfbnVtX3BhZ2VzID0gNCBNQi4KK3N0YXRpYyBpbnQgRkxBR1NfbnVtX3BhZ2Vz
ID0gNDA5NjsKKworLy8gSWYgdHJ1ZSwgZG8gbm90IGRlc3Ryb3kgdGhlIGV4aXN0aW5nIGRhdGFi
YXNlLiAgSWYgeW91IHNldCB0aGlzCisvLyBmbGFnIGFuZCBhbHNvIHNwZWNpZnkgYSBiZW5jaG1h
cmsgdGhhdCB3YW50cyBhIGZyZXNoIGRhdGFiYXNlLCB0aGF0CisvLyBiZW5jaG1hcmsgd2lsbCBm
YWlsLgorc3RhdGljIGJvb2wgRkxBR1NfdXNlX2V4aXN0aW5nX2RiID0gZmFsc2U7CisKKy8vIElm
IHRydWUsIHdlIGFsbG93IGJhdGNoIHdyaXRlcyB0byBvY2N1cgorc3RhdGljIGJvb2wgRkxBR1Nf
dHJhbnNhY3Rpb24gPSB0cnVlOworCisvLyBJZiB0cnVlLCB3ZSBlbmFibGUgV3JpdGUtQWhlYWQg
TG9nZ2luZworc3RhdGljIGJvb2wgRkxBR1NfV0FMX2VuYWJsZWQgPSB0cnVlOworCisvLyBVc2Ug
dGhlIGRiIHdpdGggdGhlIGZvbGxvd2luZyBuYW1lLgorc3RhdGljIGNvbnN0IGNoYXIqIEZMQUdT
X2RiID0gTlVMTDsKKworaW5saW5lCitzdGF0aWMgdm9pZCBFeGVjRXJyb3JDaGVjayhpbnQgc3Rh
dHVzLCBjaGFyICplcnJfbXNnKSB7CisgIGlmIChzdGF0dXMgIT0gU1FMSVRFX09LKSB7CisgICAg
ZnByaW50ZihzdGRlcnIsICJTUUwgZXJyb3I6ICVzXG4iLCBlcnJfbXNnKTsKKyAgICBzcWxpdGUz
X2ZyZWUoZXJyX21zZyk7CisgICAgZXhpdCgxKTsKKyAgfQorfQorCitpbmxpbmUKK3N0YXRpYyB2
b2lkIFN0ZXBFcnJvckNoZWNrKGludCBzdGF0dXMpIHsKKyAgaWYgKHN0YXR1cyAhPSBTUUxJVEVf
RE9ORSkgeworICAgIGZwcmludGYoc3RkZXJyLCAiU1FMIHN0ZXAgZXJyb3I6IHN0YXR1cyA9ICVk
XG4iLCBzdGF0dXMpOworICAgIGV4aXQoMSk7CisgIH0KK30KKworaW5saW5lCitzdGF0aWMgdm9p
ZCBFcnJvckNoZWNrKGludCBzdGF0dXMpIHsKKyAgaWYgKHN0YXR1cyAhPSBTUUxJVEVfT0spIHsK
KyAgICBmcHJpbnRmKHN0ZGVyciwgInNxbGl0ZTMgZXJyb3I6IHN0YXR1cyA9ICVkXG4iLCBzdGF0
dXMpOworICAgIGV4aXQoMSk7CisgIH0KK30KKworaW5saW5lCitzdGF0aWMgdm9pZCBXYWxDaGVj
a3BvaW50KHNxbGl0ZTMqIGRiXykgeworICAvLyBGbHVzaCBhbGwgd3JpdGVzIHRvIGRpc2sKKyAg
aWYgKEZMQUdTX1dBTF9lbmFibGVkKSB7CisgICAgc3FsaXRlM193YWxfY2hlY2twb2ludF92Mihk
Yl8sIE5VTEwsIFNRTElURV9DSEVDS1BPSU5UX0ZVTEwsIE5VTEwsIE5VTEwpOworICB9Cit9CisK
K25hbWVzcGFjZSBsZXZlbGRiIHsKKworLy8gSGVscGVyIGZvciBxdWlja2x5IGdlbmVyYXRpbmcg
cmFuZG9tIGRhdGEuCituYW1lc3BhY2UgeworY2xhc3MgUmFuZG9tR2VuZXJhdG9yIHsKKyBwcml2
YXRlOgorICBzdGQ6OnN0cmluZyBkYXRhXzsKKyAgaW50IHBvc187CisKKyBwdWJsaWM6CisgIFJh
bmRvbUdlbmVyYXRvcigpIHsKKyAgICAvLyBXZSB1c2UgYSBsaW1pdGVkIGFtb3VudCBvZiBkYXRh
IG92ZXIgYW5kIG92ZXIgYWdhaW4gYW5kIGVuc3VyZQorICAgIC8vIHRoYXQgaXQgaXMgbGFyZ2Vy
IHRoYW4gdGhlIGNvbXByZXNzaW9uIHdpbmRvdyAoMzJLQiksIGFuZCBhbHNvCisgICAgLy8gbGFy
Z2UgZW5vdWdoIHRvIHNlcnZlIGFsbCB0eXBpY2FsIHZhbHVlIHNpemVzIHdlIHdhbnQgdG8gd3Jp
dGUuCisgICAgUmFuZG9tIHJuZCgzMDEpOworICAgIHN0ZDo6c3RyaW5nIHBpZWNlOworICAgIHdo
aWxlIChkYXRhXy5zaXplKCkgPCAxMDQ4NTc2KSB7CisgICAgICAvLyBBZGQgYSBzaG9ydCBmcmFn
bWVudCB0aGF0IGlzIGFzIGNvbXByZXNzaWJsZSBhcyBzcGVjaWZpZWQKKyAgICAgIC8vIGJ5IEZM
QUdTX2NvbXByZXNzaW9uX3JhdGlvLgorICAgICAgdGVzdDo6Q29tcHJlc3NpYmxlU3RyaW5nKCZy
bmQsIEZMQUdTX2NvbXByZXNzaW9uX3JhdGlvLCAxMDAsICZwaWVjZSk7CisgICAgICBkYXRhXy5h
cHBlbmQocGllY2UpOworICAgIH0KKyAgICBwb3NfID0gMDsKKyAgfQorCisgIFNsaWNlIEdlbmVy
YXRlKGludCBsZW4pIHsKKyAgICBpZiAocG9zXyArIGxlbiA+IGRhdGFfLnNpemUoKSkgeworICAg
ICAgcG9zXyA9IDA7CisgICAgICBhc3NlcnQobGVuIDwgZGF0YV8uc2l6ZSgpKTsKKyAgICB9Cisg
ICAgcG9zXyArPSBsZW47CisgICAgcmV0dXJuIFNsaWNlKGRhdGFfLmRhdGEoKSArIHBvc18gLSBs
ZW4sIGxlbik7CisgIH0KK307CisKK3N0YXRpYyBTbGljZSBUcmltU3BhY2UoU2xpY2Ugcykgewor
ICBpbnQgc3RhcnQgPSAwOworICB3aGlsZSAoc3RhcnQgPCBzLnNpemUoKSAmJiBpc3NwYWNlKHNb
c3RhcnRdKSkgeworICAgIHN0YXJ0Kys7CisgIH0KKyAgaW50IGxpbWl0ID0gcy5zaXplKCk7Cisg
IHdoaWxlIChsaW1pdCA+IHN0YXJ0ICYmIGlzc3BhY2Uoc1tsaW1pdC0xXSkpIHsKKyAgICBsaW1p
dC0tOworICB9CisgIHJldHVybiBTbGljZShzLmRhdGEoKSArIHN0YXJ0LCBsaW1pdCAtIHN0YXJ0
KTsKK30KKworfSAgLy8gbmFtZXNwYWNlCisKK2NsYXNzIEJlbmNobWFyayB7CisgcHJpdmF0ZToK
KyAgc3FsaXRlMyogZGJfOworICBpbnQgZGJfbnVtXzsKKyAgaW50IG51bV87CisgIGludCByZWFk
c187CisgIGRvdWJsZSBzdGFydF87CisgIGRvdWJsZSBsYXN0X29wX2ZpbmlzaF87CisgIGludDY0
X3QgYnl0ZXNfOworICBzdGQ6OnN0cmluZyBtZXNzYWdlXzsKKyAgSGlzdG9ncmFtIGhpc3RfOwor
ICBSYW5kb21HZW5lcmF0b3IgZ2VuXzsKKyAgUmFuZG9tIHJhbmRfOworCisgIC8vIFN0YXRlIGtl
cHQgZm9yIHByb2dyZXNzIG1lc3NhZ2VzCisgIGludCBkb25lXzsKKyAgaW50IG5leHRfcmVwb3J0
XzsgICAgIC8vIFdoZW4gdG8gcmVwb3J0IG5leHQKKworICB2b2lkIFByaW50SGVhZGVyKCkgewor
ICAgIGNvbnN0IGludCBrS2V5U2l6ZSA9IDE2OworICAgIFByaW50RW52aXJvbm1lbnQoKTsKKyAg
ICBmcHJpbnRmKHN0ZG91dCwgIktleXM6ICAgICAgICVkIGJ5dGVzIGVhY2hcbiIsIGtLZXlTaXpl
KTsKKyAgICBmcHJpbnRmKHN0ZG91dCwgIlZhbHVlczogICAgICVkIGJ5dGVzIGVhY2hcbiIsIEZM
QUdTX3ZhbHVlX3NpemUpOworICAgIGZwcmludGYoc3Rkb3V0LCAiRW50cmllczogICAgJWRcbiIs
IG51bV8pOworICAgIGZwcmludGYoc3Rkb3V0LCAiUmF3U2l6ZTogICAgJS4xZiBNQiAoZXN0aW1h
dGVkKVxuIiwKKyAgICAgICAgICAgICgoc3RhdGljX2Nhc3Q8aW50NjRfdD4oa0tleVNpemUgKyBG
TEFHU192YWx1ZV9zaXplKSAqIG51bV8pCisgICAgICAgICAgICAgLyAxMDQ4NTc2LjApKTsKKyAg
ICBQcmludFdhcm5pbmdzKCk7CisgICAgZnByaW50ZihzdGRvdXQsICItLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworICB9CisKKyAgdm9pZCBQcmlu
dFdhcm5pbmdzKCkgeworI2lmIGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKF9fT1BUSU1J
WkVfXykKKyAgICBmcHJpbnRmKHN0ZG91dCwKKyAgICAgICAgICAgICJXQVJOSU5HOiBPcHRpbWl6
YXRpb24gaXMgZGlzYWJsZWQ6IGJlbmNobWFya3MgdW5uZWNlc3NhcmlseSBzbG93XG4iCisgICAg
ICAgICAgICApOworI2VuZGlmCisjaWZuZGVmIE5ERUJVRworICAgIGZwcmludGYoc3Rkb3V0LAor
ICAgICAgICAgICAgIldBUk5JTkc6IEFzc2VydGlvbnMgYXJlIGVuYWJsZWQ7IGJlbmNobWFya3Mg
dW5uZWNlc3NhcmlseSBzbG93XG4iKTsKKyNlbmRpZgorICB9CisKKyAgdm9pZCBQcmludEVudmly
b25tZW50KCkgeworICAgIGZwcmludGYoc3RkZXJyLCAiU1FMaXRlOiAgICAgdmVyc2lvbiAlc1xu
IiwgU1FMSVRFX1ZFUlNJT04pOworCisjaWYgZGVmaW5lZChfX2xpbnV4KQorICAgIHRpbWVfdCBu
b3cgPSB0aW1lKE5VTEwpOworICAgIGZwcmludGYoc3RkZXJyLCAiRGF0ZTogICAgICAgJXMiLCBj
dGltZSgmbm93KSk7ICAvLyBjdGltZSgpIGFkZHMgbmV3bGluZQorCisgICAgRklMRSogY3B1aW5m
byA9IGZvcGVuKCIvcHJvYy9jcHVpbmZvIiwgInIiKTsKKyAgICBpZiAoY3B1aW5mbyAhPSBOVUxM
KSB7CisgICAgICBjaGFyIGxpbmVbMTAwMF07CisgICAgICBpbnQgbnVtX2NwdXMgPSAwOworICAg
ICAgc3RkOjpzdHJpbmcgY3B1X3R5cGU7CisgICAgICBzdGQ6OnN0cmluZyBjYWNoZV9zaXplOwor
ICAgICAgd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgY3B1aW5mbykgIT0gTlVMTCkg
eworICAgICAgICBjb25zdCBjaGFyKiBzZXAgPSBzdHJjaHIobGluZSwgJzonKTsKKyAgICAgICAg
aWYgKHNlcCA9PSBOVUxMKSB7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAg
ICAgU2xpY2Uga2V5ID0gVHJpbVNwYWNlKFNsaWNlKGxpbmUsIHNlcCAtIDEgLSBsaW5lKSk7Cisg
ICAgICAgIFNsaWNlIHZhbCA9IFRyaW1TcGFjZShTbGljZShzZXAgKyAxKSk7CisgICAgICAgIGlm
IChrZXkgPT0gIm1vZGVsIG5hbWUiKSB7CisgICAgICAgICAgKytudW1fY3B1czsKKyAgICAgICAg
ICBjcHVfdHlwZSA9IHZhbC5Ub1N0cmluZygpOworICAgICAgICB9IGVsc2UgaWYgKGtleSA9PSAi
Y2FjaGUgc2l6ZSIpIHsKKyAgICAgICAgICBjYWNoZV9zaXplID0gdmFsLlRvU3RyaW5nKCk7Cisg
ICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGZjbG9zZShjcHVpbmZvKTsKKyAgICAgIGZwcmludGYo
c3RkZXJyLCAiQ1BVOiAgICAgICAgJWQgKiAlc1xuIiwgbnVtX2NwdXMsIGNwdV90eXBlLmNfc3Ry
KCkpOworICAgICAgZnByaW50ZihzdGRlcnIsICJDUFVDYWNoZTogICAlc1xuIiwgY2FjaGVfc2l6
ZS5jX3N0cigpKTsKKyAgICB9CisjZW5kaWYKKyAgfQorCisgIHZvaWQgU3RhcnQoKSB7CisgICAg
c3RhcnRfID0gRW52OjpEZWZhdWx0KCktPk5vd01pY3JvcygpICogMWUtNjsKKyAgICBieXRlc18g
PSAwOworICAgIG1lc3NhZ2VfLmNsZWFyKCk7CisgICAgbGFzdF9vcF9maW5pc2hfID0gc3RhcnRf
OworICAgIGhpc3RfLkNsZWFyKCk7CisgICAgZG9uZV8gPSAwOworICAgIG5leHRfcmVwb3J0XyA9
IDEwMDsKKyAgfQorCisgIHZvaWQgRmluaXNoZWRTaW5nbGVPcCgpIHsKKyAgICBpZiAoRkxBR1Nf
aGlzdG9ncmFtKSB7CisgICAgICBkb3VibGUgbm93ID0gRW52OjpEZWZhdWx0KCktPk5vd01pY3Jv
cygpICogMWUtNjsKKyAgICAgIGRvdWJsZSBtaWNyb3MgPSAobm93IC0gbGFzdF9vcF9maW5pc2hf
KSAqIDFlNjsKKyAgICAgIGhpc3RfLkFkZChtaWNyb3MpOworICAgICAgaWYgKG1pY3JvcyA+IDIw
MDAwKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAibG9uZyBvcDogJS4xZiBtaWNyb3MlMzBz
XHIiLCBtaWNyb3MsICIiKTsKKyAgICAgICAgZmZsdXNoKHN0ZGVycik7CisgICAgICB9CisgICAg
ICBsYXN0X29wX2ZpbmlzaF8gPSBub3c7CisgICAgfQorCisgICAgZG9uZV8rKzsKKyAgICBpZiAo
ZG9uZV8gPj0gbmV4dF9yZXBvcnRfKSB7CisgICAgICBpZiAgICAgIChuZXh0X3JlcG9ydF8gPCAx
MDAwKSAgIG5leHRfcmVwb3J0XyArPSAxMDA7CisgICAgICBlbHNlIGlmIChuZXh0X3JlcG9ydF8g
PCA1MDAwKSAgIG5leHRfcmVwb3J0XyArPSA1MDA7CisgICAgICBlbHNlIGlmIChuZXh0X3JlcG9y
dF8gPCAxMDAwMCkgIG5leHRfcmVwb3J0XyArPSAxMDAwOworICAgICAgZWxzZSBpZiAobmV4dF9y
ZXBvcnRfIDwgNTAwMDApICBuZXh0X3JlcG9ydF8gKz0gNTAwMDsKKyAgICAgIGVsc2UgaWYgKG5l
eHRfcmVwb3J0XyA8IDEwMDAwMCkgbmV4dF9yZXBvcnRfICs9IDEwMDAwOworICAgICAgZWxzZSBp
ZiAobmV4dF9yZXBvcnRfIDwgNTAwMDAwKSBuZXh0X3JlcG9ydF8gKz0gNTAwMDA7CisgICAgICBl
bHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfcmVwb3J0XyArPSAxMDAwMDA7Cisg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIi4uLiBmaW5pc2hlZCAlZCBvcHMlMzBzXHIiLCBkb25lXywg
IiIpOworICAgICAgZmZsdXNoKHN0ZGVycik7CisgICAgfQorICB9CisKKyAgdm9pZCBTdG9wKGNv
bnN0IFNsaWNlJiBuYW1lKSB7CisgICAgZG91YmxlIGZpbmlzaCA9IEVudjo6RGVmYXVsdCgpLT5O
b3dNaWNyb3MoKSAqIDFlLTY7CisKKyAgICAvLyBQcmV0ZW5kIGF0IGxlYXN0IG9uZSBvcCB3YXMg
ZG9uZSBpbiBjYXNlIHdlIGFyZSBydW5uaW5nIGEgYmVuY2htYXJrCisgICAgLy8gdGhhdCBkb2Vz
IG5vdCBjYWxsIEZpbmlzaGVkU2luZ2xlT3AoKS4KKyAgICBpZiAoZG9uZV8gPCAxKSBkb25lXyA9
IDE7CisKKyAgICBpZiAoYnl0ZXNfID4gMCkgeworICAgICAgY2hhciByYXRlWzEwMF07CisgICAg
ICBzbnByaW50ZihyYXRlLCBzaXplb2YocmF0ZSksICIlNi4xZiBNQi9zIiwKKyAgICAgICAgICAg
ICAgIChieXRlc18gLyAxMDQ4NTc2LjApIC8gKGZpbmlzaCAtIHN0YXJ0XykpOworICAgICAgaWYg
KCFtZXNzYWdlXy5lbXB0eSgpKSB7CisgICAgICAgIG1lc3NhZ2VfICA9IHN0ZDo6c3RyaW5nKHJh
dGUpICsgIiAiICsgbWVzc2FnZV87CisgICAgICB9IGVsc2UgeworICAgICAgICBtZXNzYWdlXyA9
IHJhdGU7CisgICAgICB9CisgICAgfQorCisgICAgZnByaW50ZihzdGRvdXQsICIlLTEycyA6ICUx
MS4zZiBtaWNyb3Mvb3A7JXMlc1xuIiwKKyAgICAgICAgICAgIG5hbWUuVG9TdHJpbmcoKS5jX3N0
cigpLAorICAgICAgICAgICAgKGZpbmlzaCAtIHN0YXJ0XykgKiAxZTYgLyBkb25lXywKKyAgICAg
ICAgICAgIChtZXNzYWdlXy5lbXB0eSgpID8gIiIgOiAiICIpLAorICAgICAgICAgICAgbWVzc2Fn
ZV8uY19zdHIoKSk7CisgICAgaWYgKEZMQUdTX2hpc3RvZ3JhbSkgeworICAgICAgZnByaW50Zihz
dGRvdXQsICJNaWNyb3NlY29uZHMgcGVyIG9wOlxuJXNcbiIsIGhpc3RfLlRvU3RyaW5nKCkuY19z
dHIoKSk7CisgICAgfQorICAgIGZmbHVzaChzdGRvdXQpOworICB9CisKKyBwdWJsaWM6CisgIGVu
dW0gT3JkZXIgeworICAgIFNFUVVFTlRJQUwsCisgICAgUkFORE9NCisgIH07CisgIGVudW0gREJT
dGF0ZSB7CisgICAgRlJFU0gsCisgICAgRVhJU1RJTkcKKyAgfTsKKworICBCZW5jaG1hcmsoKQor
ICA6IGRiXyhOVUxMKSwKKyAgICBkYl9udW1fKDApLAorICAgIG51bV8oRkxBR1NfbnVtKSwKKyAg
ICByZWFkc18oRkxBR1NfcmVhZHMgPCAwID8gRkxBR1NfbnVtIDogRkxBR1NfcmVhZHMpLAorICAg
IGJ5dGVzXygwKSwKKyAgICByYW5kXygzMDEpIHsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmlu
Zz4gZmlsZXM7CisgICAgc3RkOjpzdHJpbmcgdGVzdF9kaXI7CisgICAgRW52OjpEZWZhdWx0KCkt
PkdldFRlc3REaXJlY3RvcnkoJnRlc3RfZGlyKTsKKyAgICBFbnY6OkRlZmF1bHQoKS0+R2V0Q2hp
bGRyZW4odGVzdF9kaXIsICZmaWxlcyk7CisgICAgaWYgKCFGTEFHU191c2VfZXhpc3RpbmdfZGIp
IHsKKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAg
ICAgaWYgKFNsaWNlKGZpbGVzW2ldKS5zdGFydHNfd2l0aCgiZGJiZW5jaF9zcWxpdGUzIikpIHsK
KyAgICAgICAgICBzdGQ6OnN0cmluZyBmaWxlX25hbWUodGVzdF9kaXIpOworICAgICAgICAgIGZp
bGVfbmFtZSArPSAiLyI7CisgICAgICAgICAgZmlsZV9uYW1lICs9IGZpbGVzW2ldOworICAgICAg
ICAgIEVudjo6RGVmYXVsdCgpLT5EZWxldGVGaWxlKGZpbGVfbmFtZS5jX3N0cigpKTsKKyAgICAg
ICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisgIH5CZW5jaG1hcmsoKSB7CisgICAgaW50IHN0
YXR1cyA9IHNxbGl0ZTNfY2xvc2UoZGJfKTsKKyAgICBFcnJvckNoZWNrKHN0YXR1cyk7CisgIH0K
KworICB2b2lkIFJ1bigpIHsKKyAgICBQcmludEhlYWRlcigpOworICAgIE9wZW4oKTsKKworICAg
IGNvbnN0IGNoYXIqIGJlbmNobWFya3MgPSBGTEFHU19iZW5jaG1hcmtzOworICAgIHdoaWxlIChi
ZW5jaG1hcmtzICE9IE5VTEwpIHsKKyAgICAgIGNvbnN0IGNoYXIqIHNlcCA9IHN0cmNocihiZW5j
aG1hcmtzLCAnLCcpOworICAgICAgU2xpY2UgbmFtZTsKKyAgICAgIGlmIChzZXAgPT0gTlVMTCkg
eworICAgICAgICBuYW1lID0gYmVuY2htYXJrczsKKyAgICAgICAgYmVuY2htYXJrcyA9IE5VTEw7
CisgICAgICB9IGVsc2UgeworICAgICAgICBuYW1lID0gU2xpY2UoYmVuY2htYXJrcywgc2VwIC0g
YmVuY2htYXJrcyk7CisgICAgICAgIGJlbmNobWFya3MgPSBzZXAgKyAxOworICAgICAgfQorCisg
ICAgICBieXRlc18gPSAwOworICAgICAgU3RhcnQoKTsKKworICAgICAgYm9vbCBrbm93biA9IHRy
dWU7CisgICAgICBib29sIHdyaXRlX3N5bmMgPSBmYWxzZTsKKyAgICAgIGlmIChuYW1lID09IFNs
aWNlKCJmaWxsc2VxIikpIHsKKyAgICAgICAgV3JpdGUod3JpdGVfc3luYywgU0VRVUVOVElBTCwg
RlJFU0gsIG51bV8sIEZMQUdTX3ZhbHVlX3NpemUsIDEpOworICAgICAgICBXYWxDaGVja3BvaW50
KGRiXyk7CisgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gU2xpY2UoImZpbGxzZXFiYXRjaCIpKSB7
CisgICAgICAgIFdyaXRlKHdyaXRlX3N5bmMsIFNFUVVFTlRJQUwsIEZSRVNILCBudW1fLCBGTEFH
U192YWx1ZV9zaXplLCAxMDAwKTsKKyAgICAgICAgV2FsQ2hlY2twb2ludChkYl8pOworICAgICAg
fSBlbHNlIGlmIChuYW1lID09IFNsaWNlKCJmaWxscmFuZG9tIikpIHsKKyAgICAgICAgV3JpdGUo
d3JpdGVfc3luYywgUkFORE9NLCBGUkVTSCwgbnVtXywgRkxBR1NfdmFsdWVfc2l6ZSwgMSk7Cisg
ICAgICAgIFdhbENoZWNrcG9pbnQoZGJfKTsKKyAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSBTbGlj
ZSgiZmlsbHJhbmRiYXRjaCIpKSB7CisgICAgICAgIFdyaXRlKHdyaXRlX3N5bmMsIFJBTkRPTSwg
RlJFU0gsIG51bV8sIEZMQUdTX3ZhbHVlX3NpemUsIDEwMDApOworICAgICAgICBXYWxDaGVja3Bv
aW50KGRiXyk7CisgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gU2xpY2UoIm92ZXJ3cml0ZSIpKSB7
CisgICAgICAgIFdyaXRlKHdyaXRlX3N5bmMsIFJBTkRPTSwgRVhJU1RJTkcsIG51bV8sIEZMQUdT
X3ZhbHVlX3NpemUsIDEpOworICAgICAgICBXYWxDaGVja3BvaW50KGRiXyk7CisgICAgICB9IGVs
c2UgaWYgKG5hbWUgPT0gU2xpY2UoIm92ZXJ3cml0ZWJhdGNoIikpIHsKKyAgICAgICAgV3JpdGUo
d3JpdGVfc3luYywgUkFORE9NLCBFWElTVElORywgbnVtXywgRkxBR1NfdmFsdWVfc2l6ZSwgMTAw
MCk7CisgICAgICAgIFdhbENoZWNrcG9pbnQoZGJfKTsKKyAgICAgIH0gZWxzZSBpZiAobmFtZSA9
PSBTbGljZSgiZmlsbHJhbmRzeW5jIikpIHsKKyAgICAgICAgd3JpdGVfc3luYyA9IHRydWU7Cisg
ICAgICAgIFdyaXRlKHdyaXRlX3N5bmMsIFJBTkRPTSwgRlJFU0gsIG51bV8gLyAxMDAsIEZMQUdT
X3ZhbHVlX3NpemUsIDEpOworICAgICAgICBXYWxDaGVja3BvaW50KGRiXyk7CisgICAgICB9IGVs
c2UgaWYgKG5hbWUgPT0gU2xpY2UoImZpbGxzZXFzeW5jIikpIHsKKyAgICAgICAgd3JpdGVfc3lu
YyA9IHRydWU7CisgICAgICAgIFdyaXRlKHdyaXRlX3N5bmMsIFNFUVVFTlRJQUwsIEZSRVNILCBu
dW1fIC8gMTAwLCBGTEFHU192YWx1ZV9zaXplLCAxKTsKKyAgICAgICAgV2FsQ2hlY2twb2ludChk
Yl8pOworICAgICAgfSBlbHNlIGlmIChuYW1lID09IFNsaWNlKCJmaWxscmFuZDEwMEsiKSkgewor
ICAgICAgICBXcml0ZSh3cml0ZV9zeW5jLCBSQU5ET00sIEZSRVNILCBudW1fIC8gMTAwMCwgMTAw
ICogMTAwMCwgMSk7CisgICAgICAgIFdhbENoZWNrcG9pbnQoZGJfKTsKKyAgICAgIH0gZWxzZSBp
ZiAobmFtZSA9PSBTbGljZSgiZmlsbHNlcTEwMEsiKSkgeworICAgICAgICBXcml0ZSh3cml0ZV9z
eW5jLCBTRVFVRU5USUFMLCBGUkVTSCwgbnVtXyAvIDEwMDAsIDEwMCAqIDEwMDAsIDEpOworICAg
ICAgICBXYWxDaGVja3BvaW50KGRiXyk7CisgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gU2xpY2Uo
InJlYWRzZXEiKSkgeworICAgICAgICBSZWFkU2VxdWVudGlhbCgpOworICAgICAgfSBlbHNlIGlm
IChuYW1lID09IFNsaWNlKCJyZWFkcmFuZG9tIikpIHsKKyAgICAgICAgUmVhZChSQU5ET00sIDEp
OworICAgICAgfSBlbHNlIGlmIChuYW1lID09IFNsaWNlKCJyZWFkcmFuZDEwMEsiKSkgeworICAg
ICAgICBpbnQgbiA9IHJlYWRzXzsKKyAgICAgICAgcmVhZHNfIC89IDEwMDA7CisgICAgICAgIFJl
YWQoUkFORE9NLCAxKTsKKyAgICAgICAgcmVhZHNfID0gbjsKKyAgICAgIH0gZWxzZSB7CisgICAg
ICAgIGtub3duID0gZmFsc2U7CisgICAgICAgIGlmIChuYW1lICE9IFNsaWNlKCkpIHsgIC8vIE5v
IGVycm9yIG1lc3NhZ2UgZm9yIGVtcHR5IG5hbWUKKyAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
InVua25vd24gYmVuY2htYXJrICclcydcbiIsIG5hbWUuVG9TdHJpbmcoKS5jX3N0cigpKTsKKyAg
ICAgICAgfQorICAgICAgfQorICAgICAgaWYgKGtub3duKSB7CisgICAgICAgIFN0b3AobmFtZSk7
CisgICAgICB9CisgICAgfQorICB9CisKKyAgdm9pZCBPcGVuKCkgeworICAgIGFzc2VydChkYl8g
PT0gTlVMTCk7CisKKyAgICBpbnQgc3RhdHVzOworICAgIGNoYXIgZmlsZV9uYW1lWzEwMF07Cisg
ICAgY2hhciogZXJyX21zZyA9IE5VTEw7CisgICAgZGJfbnVtXysrOworCisgICAgLy8gT3BlbiBk
YXRhYmFzZQorICAgIHN0ZDo6c3RyaW5nIHRtcF9kaXI7CisgICAgRW52OjpEZWZhdWx0KCktPkdl
dFRlc3REaXJlY3RvcnkoJnRtcF9kaXIpOworICAgIHNucHJpbnRmKGZpbGVfbmFtZSwgc2l6ZW9m
KGZpbGVfbmFtZSksCisgICAgICAgICAgICAgIiVzL2RiYmVuY2hfc3FsaXRlMy0lZC5kYiIsCisg
ICAgICAgICAgICAgdG1wX2Rpci5jX3N0cigpLAorICAgICAgICAgICAgIGRiX251bV8pOworICAg
IHN0YXR1cyA9IHNxbGl0ZTNfb3BlbihmaWxlX25hbWUsICZkYl8pOworICAgIGlmIChzdGF0dXMp
IHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAib3BlbiBlcnJvcjogJXNcbiIsIHNxbGl0ZTNfZXJy
bXNnKGRiXykpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisKKyAgICAvLyBDaGFuZ2UgU1FMaXRl
IGNhY2hlIHNpemUKKyAgICBjaGFyIGNhY2hlX3NpemVbMTAwXTsKKyAgICBzbnByaW50ZihjYWNo
ZV9zaXplLCBzaXplb2YoY2FjaGVfc2l6ZSksICJQUkFHTUEgY2FjaGVfc2l6ZSA9ICVkIiwKKyAg
ICAgICAgICAgICBGTEFHU19udW1fcGFnZXMpOworICAgIHN0YXR1cyA9IHNxbGl0ZTNfZXhlYyhk
Yl8sIGNhY2hlX3NpemUsIE5VTEwsIE5VTEwsICZlcnJfbXNnKTsKKyAgICBFeGVjRXJyb3JDaGVj
ayhzdGF0dXMsIGVycl9tc2cpOworCisgICAgLy8gRkxBR1NfcGFnZV9zaXplIGlzIGRlZmF1bHRl
ZCB0byAxMDI0CisgICAgaWYgKEZMQUdTX3BhZ2Vfc2l6ZSAhPSAxMDI0KSB7CisgICAgICBjaGFy
IHBhZ2Vfc2l6ZVsxMDBdOworICAgICAgc25wcmludGYocGFnZV9zaXplLCBzaXplb2YocGFnZV9z
aXplKSwgIlBSQUdNQSBwYWdlX3NpemUgPSAlZCIsCisgICAgICAgICAgICAgICBGTEFHU19wYWdl
X3NpemUpOworICAgICAgc3RhdHVzID0gc3FsaXRlM19leGVjKGRiXywgcGFnZV9zaXplLCBOVUxM
LCBOVUxMLCAmZXJyX21zZyk7CisgICAgICBFeGVjRXJyb3JDaGVjayhzdGF0dXMsIGVycl9tc2cp
OworICAgIH0KKworICAgIC8vIENoYW5nZSBqb3VybmFsIG1vZGUgdG8gV0FMIGlmIFdBTCBlbmFi
bGVkIGZsYWcgaXMgb24KKyAgICBpZiAoRkxBR1NfV0FMX2VuYWJsZWQpIHsKKyAgICAgIHN0ZDo6
c3RyaW5nIFdBTF9zdG10ID0gIlBSQUdNQSBqb3VybmFsX21vZGUgPSBXQUwiOworCisgICAgICAv
LyBMZXZlbERCJ3MgZGVmYXVsdCBjYWNoZSBzaXplIGlzIGEgY29tYmluZWQgNCBNQgorICAgICAg
c3RkOjpzdHJpbmcgV0FMX2NoZWNrcG9pbnQgPSAiUFJBR01BIHdhbF9hdXRvY2hlY2twb2ludCA9
IDQwOTYiOworICAgICAgc3RhdHVzID0gc3FsaXRlM19leGVjKGRiXywgV0FMX3N0bXQuY19zdHIo
KSwgTlVMTCwgTlVMTCwgJmVycl9tc2cpOworICAgICAgRXhlY0Vycm9yQ2hlY2soc3RhdHVzLCBl
cnJfbXNnKTsKKyAgICAgIHN0YXR1cyA9IHNxbGl0ZTNfZXhlYyhkYl8sIFdBTF9jaGVja3BvaW50
LmNfc3RyKCksIE5VTEwsIE5VTEwsICZlcnJfbXNnKTsKKyAgICAgIEV4ZWNFcnJvckNoZWNrKHN0
YXR1cywgZXJyX21zZyk7CisgICAgfQorCisgICAgLy8gQ2hhbmdlIGxvY2tpbmcgbW9kZSB0byBl
eGNsdXNpdmUgYW5kIGNyZWF0ZSB0YWJsZXMvaW5kZXggZm9yIGRhdGFiYXNlCisgICAgc3RkOjpz
dHJpbmcgbG9ja2luZ19zdG10ID0gIlBSQUdNQSBsb2NraW5nX21vZGUgPSBFWENMVVNJVkUiOwor
ICAgIHN0ZDo6c3RyaW5nIGNyZWF0ZV9zdG10ID0KKyAgICAgICAgICAiQ1JFQVRFIFRBQkxFIHRl
c3QgKGtleSBibG9iLCB2YWx1ZSBibG9iLCBQUklNQVJZIEtFWShrZXkpKSI7CisgICAgc3RkOjpz
dHJpbmcgc3RtdF9hcnJheVtdID0geyBsb2NraW5nX3N0bXQsIGNyZWF0ZV9zdG10IH07CisgICAg
aW50IHN0bXRfYXJyYXlfbGVuZ3RoID0gc2l6ZW9mKHN0bXRfYXJyYXkpIC8gc2l6ZW9mKHN0ZDo6
c3RyaW5nKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0bXRfYXJyYXlfbGVuZ3RoOyBpKysp
IHsKKyAgICAgIHN0YXR1cyA9IHNxbGl0ZTNfZXhlYyhkYl8sIHN0bXRfYXJyYXlbaV0uY19zdHIo
KSwgTlVMTCwgTlVMTCwgJmVycl9tc2cpOworICAgICAgRXhlY0Vycm9yQ2hlY2soc3RhdHVzLCBl
cnJfbXNnKTsKKyAgICB9CisgIH0KKworICB2b2lkIFdyaXRlKGJvb2wgd3JpdGVfc3luYywgT3Jk
ZXIgb3JkZXIsIERCU3RhdGUgc3RhdGUsCisgICAgICAgICAgICAgaW50IG51bV9lbnRyaWVzLCBp
bnQgdmFsdWVfc2l6ZSwgaW50IGVudHJpZXNfcGVyX2JhdGNoKSB7CisgICAgLy8gQ3JlYXRlIG5l
dyBkYXRhYmFzZSBpZiBzdGF0ZSA9PSBGUkVTSAorICAgIGlmIChzdGF0ZSA9PSBGUkVTSCkgewor
ICAgICAgaWYgKEZMQUdTX3VzZV9leGlzdGluZ19kYikgeworICAgICAgICBtZXNzYWdlXyA9ICJz
a2lwcGluZyAoLS11c2VfZXhpc3RpbmdfZGIgaXMgdHJ1ZSkiOworICAgICAgICByZXR1cm47Cisg
ICAgICB9CisgICAgICBzcWxpdGUzX2Nsb3NlKGRiXyk7CisgICAgICBkYl8gPSBOVUxMOworICAg
ICAgT3BlbigpOworICAgICAgU3RhcnQoKTsKKyAgICB9CisKKyAgICBpZiAobnVtX2VudHJpZXMg
IT0gbnVtXykgeworICAgICAgY2hhciBtc2dbMTAwXTsKKyAgICAgIHNucHJpbnRmKG1zZywgc2l6
ZW9mKG1zZyksICIoJWQgb3BzKSIsIG51bV9lbnRyaWVzKTsKKyAgICAgIG1lc3NhZ2VfID0gbXNn
OworICAgIH0KKworICAgIGNoYXIqIGVycl9tc2cgPSBOVUxMOworICAgIGludCBzdGF0dXM7CisK
KyAgICBzcWxpdGUzX3N0bXQgKnJlcGxhY2Vfc3RtdCwgKmJlZ2luX3RyYW5zX3N0bXQsICplbmRf
dHJhbnNfc3RtdDsKKyAgICBzdGQ6OnN0cmluZyByZXBsYWNlX3N0ciA9ICJSRVBMQUNFIElOVE8g
dGVzdCAoa2V5LCB2YWx1ZSkgVkFMVUVTICg/LCA/KSI7CisgICAgc3RkOjpzdHJpbmcgYmVnaW5f
dHJhbnNfc3RyID0gIkJFR0lOIFRSQU5TQUNUSU9OOyI7CisgICAgc3RkOjpzdHJpbmcgZW5kX3Ry
YW5zX3N0ciA9ICJFTkQgVFJBTlNBQ1RJT047IjsKKworICAgIC8vIENoZWNrIGZvciBzeW5jaHJv
bm91cyBmbGFnIGluIG9wdGlvbnMKKyAgICBzdGQ6OnN0cmluZyBzeW5jX3N0bXQgPSAod3JpdGVf
c3luYykgPyAiUFJBR01BIHN5bmNocm9ub3VzID0gRlVMTCIgOgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJQUkFHTUEgc3luY2hyb25vdXMgPSBPRkYiOworICAg
IHN0YXR1cyA9IHNxbGl0ZTNfZXhlYyhkYl8sIHN5bmNfc3RtdC5jX3N0cigpLCBOVUxMLCBOVUxM
LCAmZXJyX21zZyk7CisgICAgRXhlY0Vycm9yQ2hlY2soc3RhdHVzLCBlcnJfbXNnKTsKKworICAg
IC8vIFByZXBhcmluZyBzcWxpdGUzIHN0YXRlbWVudHMKKyAgICBzdGF0dXMgPSBzcWxpdGUzX3By
ZXBhcmVfdjIoZGJfLCByZXBsYWNlX3N0ci5jX3N0cigpLCAtMSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJnJlcGxhY2Vfc3RtdCwgTlVMTCk7CisgICAgRXJyb3JDaGVjayhzdGF0
dXMpOworICAgIHN0YXR1cyA9IHNxbGl0ZTNfcHJlcGFyZV92MihkYl8sIGJlZ2luX3RyYW5zX3N0
ci5jX3N0cigpLCAtMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJlZ2luX3Ry
YW5zX3N0bXQsIE5VTEwpOworICAgIEVycm9yQ2hlY2soc3RhdHVzKTsKKyAgICBzdGF0dXMgPSBz
cWxpdGUzX3ByZXBhcmVfdjIoZGJfLCBlbmRfdHJhbnNfc3RyLmNfc3RyKCksIC0xLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmZW5kX3RyYW5zX3N0bXQsIE5VTEwpOworICAgIEVy
cm9yQ2hlY2soc3RhdHVzKTsKKworICAgIGJvb2wgdHJhbnNhY3Rpb24gPSAoZW50cmllc19wZXJf
YmF0Y2ggPiAxKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bV9lbnRyaWVzOyBpICs9IGVu
dHJpZXNfcGVyX2JhdGNoKSB7CisgICAgICAvLyBCZWdpbiB3cml0ZSB0cmFuc2FjdGlvbgorICAg
ICAgaWYgKEZMQUdTX3RyYW5zYWN0aW9uICYmIHRyYW5zYWN0aW9uKSB7CisgICAgICAgIHN0YXR1
cyA9IHNxbGl0ZTNfc3RlcChiZWdpbl90cmFuc19zdG10KTsKKyAgICAgICAgU3RlcEVycm9yQ2hl
Y2soc3RhdHVzKTsKKyAgICAgICAgc3RhdHVzID0gc3FsaXRlM19yZXNldChiZWdpbl90cmFuc19z
dG10KTsKKyAgICAgICAgRXJyb3JDaGVjayhzdGF0dXMpOworICAgICAgfQorCisgICAgICAvLyBD
cmVhdGUgYW5kIGV4ZWN1dGUgU1FMIHN0YXRlbWVudHMKKyAgICAgIGZvciAoaW50IGogPSAwOyBq
IDwgZW50cmllc19wZXJfYmF0Y2g7IGorKykgeworICAgICAgICBjb25zdCBjaGFyKiB2YWx1ZSA9
IGdlbl8uR2VuZXJhdGUodmFsdWVfc2l6ZSkuZGF0YSgpOworCisgICAgICAgIC8vIENyZWF0ZSB2
YWx1ZXMgZm9yIGtleS12YWx1ZSBwYWlyCisgICAgICAgIGNvbnN0IGludCBrID0gKG9yZGVyID09
IFNFUVVFTlRJQUwpID8gaSArIGogOgorICAgICAgICAgICAgICAgICAgICAgIChyYW5kXy5OZXh0
KCkgJSBudW1fZW50cmllcyk7CisgICAgICAgIGNoYXIga2V5WzEwMF07CisgICAgICAgIHNucHJp
bnRmKGtleSwgc2l6ZW9mKGtleSksICIlMDE2ZCIsIGspOworCisgICAgICAgIC8vIEJpbmQgS1Yg
dmFsdWVzIGludG8gcmVwbGFjZV9zdG10CisgICAgICAgIHN0YXR1cyA9IHNxbGl0ZTNfYmluZF9i
bG9iKHJlcGxhY2Vfc3RtdCwgMSwga2V5LCAxNiwgU1FMSVRFX1NUQVRJQyk7CisgICAgICAgIEVy
cm9yQ2hlY2soc3RhdHVzKTsKKyAgICAgICAgc3RhdHVzID0gc3FsaXRlM19iaW5kX2Jsb2IocmVw
bGFjZV9zdG10LCAyLCB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFsdWVfc2l6ZSwgU1FMSVRFX1NUQVRJQyk7CisgICAgICAgIEVycm9yQ2hlY2soc3RhdHVzKTsK
KworICAgICAgICAvLyBFeGVjdXRlIHJlcGxhY2Vfc3RtdAorICAgICAgICBieXRlc18gKz0gdmFs
dWVfc2l6ZSArIHN0cmxlbihrZXkpOworICAgICAgICBzdGF0dXMgPSBzcWxpdGUzX3N0ZXAocmVw
bGFjZV9zdG10KTsKKyAgICAgICAgU3RlcEVycm9yQ2hlY2soc3RhdHVzKTsKKworICAgICAgICAv
LyBSZXNldCBTUUxpdGUgc3RhdGVtZW50IGZvciBhbm90aGVyIHVzZQorICAgICAgICBzdGF0dXMg
PSBzcWxpdGUzX2NsZWFyX2JpbmRpbmdzKHJlcGxhY2Vfc3RtdCk7CisgICAgICAgIEVycm9yQ2hl
Y2soc3RhdHVzKTsKKyAgICAgICAgc3RhdHVzID0gc3FsaXRlM19yZXNldChyZXBsYWNlX3N0bXQp
OworICAgICAgICBFcnJvckNoZWNrKHN0YXR1cyk7CisKKyAgICAgICAgRmluaXNoZWRTaW5nbGVP
cCgpOworICAgICAgfQorCisgICAgICAvLyBFbmQgd3JpdGUgdHJhbnNhY3Rpb24KKyAgICAgIGlm
IChGTEFHU190cmFuc2FjdGlvbiAmJiB0cmFuc2FjdGlvbikgeworICAgICAgICBzdGF0dXMgPSBz
cWxpdGUzX3N0ZXAoZW5kX3RyYW5zX3N0bXQpOworICAgICAgICBTdGVwRXJyb3JDaGVjayhzdGF0
dXMpOworICAgICAgICBzdGF0dXMgPSBzcWxpdGUzX3Jlc2V0KGVuZF90cmFuc19zdG10KTsKKyAg
ICAgICAgRXJyb3JDaGVjayhzdGF0dXMpOworICAgICAgfQorICAgIH0KKworICAgIHN0YXR1cyA9
IHNxbGl0ZTNfZmluYWxpemUocmVwbGFjZV9zdG10KTsKKyAgICBFcnJvckNoZWNrKHN0YXR1cyk7
CisgICAgc3RhdHVzID0gc3FsaXRlM19maW5hbGl6ZShiZWdpbl90cmFuc19zdG10KTsKKyAgICBF
cnJvckNoZWNrKHN0YXR1cyk7CisgICAgc3RhdHVzID0gc3FsaXRlM19maW5hbGl6ZShlbmRfdHJh
bnNfc3RtdCk7CisgICAgRXJyb3JDaGVjayhzdGF0dXMpOworICB9CisKKyAgdm9pZCBSZWFkKE9y
ZGVyIG9yZGVyLCBpbnQgZW50cmllc19wZXJfYmF0Y2gpIHsKKyAgICBpbnQgc3RhdHVzOworICAg
IHNxbGl0ZTNfc3RtdCAqcmVhZF9zdG10LCAqYmVnaW5fdHJhbnNfc3RtdCwgKmVuZF90cmFuc19z
dG10OworCisgICAgc3RkOjpzdHJpbmcgcmVhZF9zdHIgPSAiU0VMRUNUICogRlJPTSB0ZXN0IFdI
RVJFIGtleSA9ID8iOworICAgIHN0ZDo6c3RyaW5nIGJlZ2luX3RyYW5zX3N0ciA9ICJCRUdJTiBU
UkFOU0FDVElPTjsiOworICAgIHN0ZDo6c3RyaW5nIGVuZF90cmFuc19zdHIgPSAiRU5EIFRSQU5T
QUNUSU9OOyI7CisKKyAgICAvLyBQcmVwYXJpbmcgc3FsaXRlMyBzdGF0ZW1lbnRzCisgICAgc3Rh
dHVzID0gc3FsaXRlM19wcmVwYXJlX3YyKGRiXywgYmVnaW5fdHJhbnNfc3RyLmNfc3RyKCksIC0x
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYmVnaW5fdHJhbnNfc3RtdCwgTlVM
TCk7CisgICAgRXJyb3JDaGVjayhzdGF0dXMpOworICAgIHN0YXR1cyA9IHNxbGl0ZTNfcHJlcGFy
ZV92MihkYl8sIGVuZF90cmFuc19zdHIuY19zdHIoKSwgLTEsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZlbmRfdHJhbnNfc3RtdCwgTlVMTCk7CisgICAgRXJyb3JDaGVjayhzdGF0
dXMpOworICAgIHN0YXR1cyA9IHNxbGl0ZTNfcHJlcGFyZV92MihkYl8sIHJlYWRfc3RyLmNfc3Ry
KCksIC0xLCAmcmVhZF9zdG10LCBOVUxMKTsKKyAgICBFcnJvckNoZWNrKHN0YXR1cyk7CisKKyAg
ICBib29sIHRyYW5zYWN0aW9uID0gKGVudHJpZXNfcGVyX2JhdGNoID4gMSk7CisgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCByZWFkc187IGkgKz0gZW50cmllc19wZXJfYmF0Y2gpIHsKKyAgICAgIC8v
IEJlZ2luIHJlYWQgdHJhbnNhY3Rpb24KKyAgICAgIGlmIChGTEFHU190cmFuc2FjdGlvbiAmJiB0
cmFuc2FjdGlvbikgeworICAgICAgICBzdGF0dXMgPSBzcWxpdGUzX3N0ZXAoYmVnaW5fdHJhbnNf
c3RtdCk7CisgICAgICAgIFN0ZXBFcnJvckNoZWNrKHN0YXR1cyk7CisgICAgICAgIHN0YXR1cyA9
IHNxbGl0ZTNfcmVzZXQoYmVnaW5fdHJhbnNfc3RtdCk7CisgICAgICAgIEVycm9yQ2hlY2soc3Rh
dHVzKTsKKyAgICAgIH0KKworICAgICAgLy8gQ3JlYXRlIGFuZCBleGVjdXRlIFNRTCBzdGF0ZW1l
bnRzCisgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGVudHJpZXNfcGVyX2JhdGNoOyBqKyspIHsK
KyAgICAgICAgLy8gQ3JlYXRlIGtleSB2YWx1ZQorICAgICAgICBjaGFyIGtleVsxMDBdOworICAg
ICAgICBpbnQgayA9IChvcmRlciA9PSBTRVFVRU5USUFMKSA/IGkgKyBqIDogKHJhbmRfLk5leHQo
KSAlIHJlYWRzXyk7CisgICAgICAgIHNucHJpbnRmKGtleSwgc2l6ZW9mKGtleSksICIlMDE2ZCIs
IGspOworCisgICAgICAgIC8vIEJpbmQga2V5IHZhbHVlIGludG8gcmVhZF9zdG10CisgICAgICAg
IHN0YXR1cyA9IHNxbGl0ZTNfYmluZF9ibG9iKHJlYWRfc3RtdCwgMSwga2V5LCAxNiwgU1FMSVRF
X1NUQVRJQyk7CisgICAgICAgIEVycm9yQ2hlY2soc3RhdHVzKTsKKworICAgICAgICAvLyBFeGVj
dXRlIHJlYWQgc3RhdGVtZW50CisgICAgICAgIHdoaWxlICgoc3RhdHVzID0gc3FsaXRlM19zdGVw
KHJlYWRfc3RtdCkpID09IFNRTElURV9ST1cpIHt9CisgICAgICAgIFN0ZXBFcnJvckNoZWNrKHN0
YXR1cyk7CisKKyAgICAgICAgLy8gUmVzZXQgU1FMaXRlIHN0YXRlbWVudCBmb3IgYW5vdGhlciB1
c2UKKyAgICAgICAgc3RhdHVzID0gc3FsaXRlM19jbGVhcl9iaW5kaW5ncyhyZWFkX3N0bXQpOwor
ICAgICAgICBFcnJvckNoZWNrKHN0YXR1cyk7CisgICAgICAgIHN0YXR1cyA9IHNxbGl0ZTNfcmVz
ZXQocmVhZF9zdG10KTsKKyAgICAgICAgRXJyb3JDaGVjayhzdGF0dXMpOworICAgICAgICBGaW5p
c2hlZFNpbmdsZU9wKCk7CisgICAgICB9CisKKyAgICAgIC8vIEVuZCByZWFkIHRyYW5zYWN0aW9u
CisgICAgICBpZiAoRkxBR1NfdHJhbnNhY3Rpb24gJiYgdHJhbnNhY3Rpb24pIHsKKyAgICAgICAg
c3RhdHVzID0gc3FsaXRlM19zdGVwKGVuZF90cmFuc19zdG10KTsKKyAgICAgICAgU3RlcEVycm9y
Q2hlY2soc3RhdHVzKTsKKyAgICAgICAgc3RhdHVzID0gc3FsaXRlM19yZXNldChlbmRfdHJhbnNf
c3RtdCk7CisgICAgICAgIEVycm9yQ2hlY2soc3RhdHVzKTsKKyAgICAgIH0KKyAgICB9CisKKyAg
ICBzdGF0dXMgPSBzcWxpdGUzX2ZpbmFsaXplKHJlYWRfc3RtdCk7CisgICAgRXJyb3JDaGVjayhz
dGF0dXMpOworICAgIHN0YXR1cyA9IHNxbGl0ZTNfZmluYWxpemUoYmVnaW5fdHJhbnNfc3RtdCk7
CisgICAgRXJyb3JDaGVjayhzdGF0dXMpOworICAgIHN0YXR1cyA9IHNxbGl0ZTNfZmluYWxpemUo
ZW5kX3RyYW5zX3N0bXQpOworICAgIEVycm9yQ2hlY2soc3RhdHVzKTsKKyAgfQorCisgIHZvaWQg
UmVhZFNlcXVlbnRpYWwoKSB7CisgICAgaW50IHN0YXR1czsKKyAgICBzcWxpdGUzX3N0bXQgKnBT
dG10OworICAgIHN0ZDo6c3RyaW5nIHJlYWRfc3RyID0gIlNFTEVDVCAqIEZST00gdGVzdCBPUkRF
UiBCWSBrZXkiOworCisgICAgc3RhdHVzID0gc3FsaXRlM19wcmVwYXJlX3YyKGRiXywgcmVhZF9z
dHIuY19zdHIoKSwgLTEsICZwU3RtdCwgTlVMTCk7CisgICAgRXJyb3JDaGVjayhzdGF0dXMpOwor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVhZHNfICYmIFNRTElURV9ST1cgPT0gc3FsaXRlM19z
dGVwKHBTdG10KTsgaSsrKSB7CisgICAgICBieXRlc18gKz0gc3FsaXRlM19jb2x1bW5fYnl0ZXMo
cFN0bXQsIDEpICsgc3FsaXRlM19jb2x1bW5fYnl0ZXMocFN0bXQsIDIpOworICAgICAgRmluaXNo
ZWRTaW5nbGVPcCgpOworICAgIH0KKworICAgIHN0YXR1cyA9IHNxbGl0ZTNfZmluYWxpemUocFN0
bXQpOworICAgIEVycm9yQ2hlY2soc3RhdHVzKTsKKyAgfQorCit9OworCit9ICAvLyBuYW1lc3Bh
Y2UgbGV2ZWxkYgorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpIHsKKyAgc3RkOjpz
dHJpbmcgZGVmYXVsdF9kYl9wYXRoOworICBmb3IgKGludCBpID0gMTsgaSA8IGFyZ2M7IGkrKykg
eworICAgIGRvdWJsZSBkOworICAgIGludCBuOworICAgIGNoYXIganVuazsKKyAgICBpZiAobGV2
ZWxkYjo6U2xpY2UoYXJndltpXSkuc3RhcnRzX3dpdGgoIi0tYmVuY2htYXJrcz0iKSkgeworICAg
ICAgRkxBR1NfYmVuY2htYXJrcyA9IGFyZ3ZbaV0gKyBzdHJsZW4oIi0tYmVuY2htYXJrcz0iKTsK
KyAgICB9IGVsc2UgaWYgKHNzY2FuZihhcmd2W2ldLCAiLS1oaXN0b2dyYW09JWQlYyIsICZuLCAm
anVuaykgPT0gMSAmJgorICAgICAgICAgICAgICAgKG4gPT0gMCB8fCBuID09IDEpKSB7CisgICAg
ICBGTEFHU19oaXN0b2dyYW0gPSBuOworICAgIH0gZWxzZSBpZiAoc3NjYW5mKGFyZ3ZbaV0sICIt
LWNvbXByZXNzaW9uX3JhdGlvPSVsZiVjIiwgJmQsICZqdW5rKSA9PSAxKSB7CisgICAgICBGTEFH
U19jb21wcmVzc2lvbl9yYXRpbyA9IGQ7CisgICAgfSBlbHNlIGlmIChzc2NhbmYoYXJndltpXSwg
Ii0tdXNlX2V4aXN0aW5nX2RiPSVkJWMiLCAmbiwgJmp1bmspID09IDEgJiYKKyAgICAgICAgICAg
ICAgIChuID09IDAgfHwgbiA9PSAxKSkgeworICAgICAgRkxBR1NfdXNlX2V4aXN0aW5nX2RiID0g
bjsKKyAgICB9IGVsc2UgaWYgKHNzY2FuZihhcmd2W2ldLCAiLS1udW09JWQlYyIsICZuLCAmanVu
aykgPT0gMSkgeworICAgICAgRkxBR1NfbnVtID0gbjsKKyAgICB9IGVsc2UgaWYgKHNzY2FuZihh
cmd2W2ldLCAiLS1yZWFkcz0lZCVjIiwgJm4sICZqdW5rKSA9PSAxKSB7CisgICAgICBGTEFHU19y
ZWFkcyA9IG47CisgICAgfSBlbHNlIGlmIChzc2NhbmYoYXJndltpXSwgIi0tdmFsdWVfc2l6ZT0l
ZCVjIiwgJm4sICZqdW5rKSA9PSAxKSB7CisgICAgICBGTEFHU192YWx1ZV9zaXplID0gbjsKKyAg
ICB9IGVsc2UgaWYgKGxldmVsZGI6OlNsaWNlKGFyZ3ZbaV0pID09IGxldmVsZGI6OlNsaWNlKCIt
LW5vX3RyYW5zYWN0aW9uIikpIHsKKyAgICAgIEZMQUdTX3RyYW5zYWN0aW9uID0gZmFsc2U7Cisg
ICAgfSBlbHNlIGlmIChzc2NhbmYoYXJndltpXSwgIi0tcGFnZV9zaXplPSVkJWMiLCAmbiwgJmp1
bmspID09IDEpIHsKKyAgICAgIEZMQUdTX3BhZ2Vfc2l6ZSA9IG47CisgICAgfSBlbHNlIGlmIChz
c2NhbmYoYXJndltpXSwgIi0tbnVtX3BhZ2VzPSVkJWMiLCAmbiwgJmp1bmspID09IDEpIHsKKyAg
ICAgIEZMQUdTX251bV9wYWdlcyA9IG47CisgICAgfSBlbHNlIGlmIChzc2NhbmYoYXJndltpXSwg
Ii0tV0FMX2VuYWJsZWQ9JWQlYyIsICZuLCAmanVuaykgPT0gMSAmJgorICAgICAgICAgICAgICAg
KG4gPT0gMCB8fCBuID09IDEpKSB7CisgICAgICBGTEFHU19XQUxfZW5hYmxlZCA9IG47CisgICAg
fSBlbHNlIGlmIChzdHJuY21wKGFyZ3ZbaV0sICItLWRiPSIsIDUpID09IDApIHsKKyAgICAgIEZM
QUdTX2RiID0gYXJndltpXSArIDU7CisgICAgfSBlbHNlIHsKKyAgICAgIGZwcmludGYoc3RkZXJy
LCAiSW52YWxpZCBmbGFnICclcydcbiIsIGFyZ3ZbaV0pOworICAgICAgZXhpdCgxKTsKKyAgICB9
CisgIH0KKworICAvLyBDaG9vc2UgYSBsb2NhdGlvbiBmb3IgdGhlIHRlc3QgZGF0YWJhc2UgaWYg
bm9uZSBnaXZlbiB3aXRoIC0tZGI9PHBhdGg+CisgIGlmIChGTEFHU19kYiA9PSBOVUxMKSB7Cisg
ICAgICBsZXZlbGRiOjpFbnY6OkRlZmF1bHQoKS0+R2V0VGVzdERpcmVjdG9yeSgmZGVmYXVsdF9k
Yl9wYXRoKTsKKyAgICAgIGRlZmF1bHRfZGJfcGF0aCArPSAiL2RiYmVuY2giOworICAgICAgRkxB
R1NfZGIgPSBkZWZhdWx0X2RiX3BhdGguY19zdHIoKTsKKyAgfQorCisgIGxldmVsZGI6OkJlbmNo
bWFyayBiZW5jaG1hcms7CisgIGJlbmNobWFyay5SdW4oKTsKKyAgcmV0dXJuIDA7Cit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RvYy9iZW5jaC9kYl9iZW5jaF90cmVl
X2RiLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kb2MvYmVuY2gvZGJfYmVuY2hfdHJl
ZV9kYi5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5lZDg2ZjAzMWMyNWZlOTMxYjBlM2EwNWY0NTAxMjY5YWZkMjMz
ZjAyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kb2MvYmVu
Y2gvZGJfYmVuY2hfdHJlZV9kYi5jYwpAQCAtMCwwICsxLDUyOCBAQAorLy8gQ29weXJpZ2h0IChj
KSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMg
ZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNp
bmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxrY3BvbHlkYi5oPgorI2luY2x1ZGUgInV0aWwv
aGlzdG9ncmFtLmgiCisjaW5jbHVkZSAidXRpbC9yYW5kb20uaCIKKyNpbmNsdWRlICJ1dGlsL3Rl
c3R1dGlsLmgiCisKKy8vIENvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIG9wZXJhdGlvbnMgdG8gcnVu
IGluIHRoZSBzcGVjaWZpZWQgb3JkZXIKKy8vICAgQWN0dWFsIGJlbmNobWFya3M6CisvLworLy8g
ICBmaWxsc2VxICAgICAgIC0tIHdyaXRlIE4gdmFsdWVzIGluIHNlcXVlbnRpYWwga2V5IG9yZGVy
IGluIGFzeW5jIG1vZGUKKy8vICAgZmlsbHJhbmRvbSAgICAtLSB3cml0ZSBOIHZhbHVlcyBpbiBy
YW5kb20ga2V5IG9yZGVyIGluIGFzeW5jIG1vZGUKKy8vICAgb3ZlcndyaXRlICAgICAtLSBvdmVy
d3JpdGUgTiB2YWx1ZXMgaW4gcmFuZG9tIGtleSBvcmRlciBpbiBhc3luYyBtb2RlCisvLyAgIGZp
bGxzZXFzeW5jICAgLS0gd3JpdGUgTi8xMDAgdmFsdWVzIGluIHNlcXVlbnRpYWwga2V5IG9yZGVy
IGluIHN5bmMgbW9kZQorLy8gICBmaWxscmFuZHN5bmMgIC0tIHdyaXRlIE4vMTAwIHZhbHVlcyBp
biByYW5kb20ga2V5IG9yZGVyIGluIHN5bmMgbW9kZQorLy8gICBmaWxscmFuZDEwMEsgIC0tIHdy
aXRlIE4vMTAwMCAxMDBLIHZhbHVlcyBpbiByYW5kb20gb3JkZXIgaW4gYXN5bmMgbW9kZQorLy8g
ICBmaWxsc2VxMTAwSyAgIC0tIHdyaXRlIE4vMTAwMCAxMDBLIHZhbHVlcyBpbiBzZXEgb3JkZXIg
aW4gYXN5bmMgbW9kZQorLy8gICByZWFkc2VxICAgICAgIC0tIHJlYWQgTiB0aW1lcyBzZXF1ZW50
aWFsbHkKKy8vICAgcmVhZHNlcTEwMEsgICAtLSByZWFkIE4vMTAwMCAxMDBLIHZhbHVlcyBpbiBz
ZXF1ZW50aWFsIG9yZGVyIGluIGFzeW5jIG1vZGUKKy8vICAgcmVhZHJhbmQxMDBLICAtLSByZWFk
IE4vMTAwMCAxMDBLIHZhbHVlcyBpbiBzZXF1ZW50aWFsIG9yZGVyIGluIGFzeW5jIG1vZGUKKy8v
ICAgcmVhZHJhbmRvbSAgICAtLSByZWFkIE4gdGltZXMgaW4gcmFuZG9tIG9yZGVyCitzdGF0aWMg
Y29uc3QgY2hhciogRkxBR1NfYmVuY2htYXJrcyA9CisgICAgImZpbGxzZXEsIgorICAgICJmaWxs
c2Vxc3luYywiCisgICAgImZpbGxyYW5kc3luYywiCisgICAgImZpbGxyYW5kb20sIgorICAgICJv
dmVyd3JpdGUsIgorICAgICJyZWFkcmFuZG9tLCIKKyAgICAicmVhZHNlcSwiCisgICAgImZpbGxy
YW5kMTAwSywiCisgICAgImZpbGxzZXExMDBLLCIKKyAgICAicmVhZHNlcTEwMEssIgorICAgICJy
ZWFkcmFuZDEwMEssIgorICAgIDsKKworLy8gTnVtYmVyIG9mIGtleS92YWx1ZXMgdG8gcGxhY2Ug
aW4gZGF0YWJhc2UKK3N0YXRpYyBpbnQgRkxBR1NfbnVtID0gMTAwMDAwMDsKKworLy8gTnVtYmVy
IG9mIHJlYWQgb3BlcmF0aW9ucyB0byBkby4gIElmIG5lZ2F0aXZlLCBkbyBGTEFHU19udW0gcmVh
ZHMuCitzdGF0aWMgaW50IEZMQUdTX3JlYWRzID0gLTE7CisKKy8vIFNpemUgb2YgZWFjaCB2YWx1
ZQorc3RhdGljIGludCBGTEFHU192YWx1ZV9zaXplID0gMTAwOworCisvLyBBcnJhbmdlIHRvIGdl
bmVyYXRlIHZhbHVlcyB0aGF0IHNocmluayB0byB0aGlzIGZyYWN0aW9uIG9mCisvLyB0aGVpciBv
cmlnaW5hbCBzaXplIGFmdGVyIGNvbXByZXNzaW9uCitzdGF0aWMgZG91YmxlIEZMQUdTX2NvbXBy
ZXNzaW9uX3JhdGlvID0gMC41OworCisvLyBQcmludCBoaXN0b2dyYW0gb2Ygb3BlcmF0aW9uIHRp
bWluZ3MKK3N0YXRpYyBib29sIEZMQUdTX2hpc3RvZ3JhbSA9IGZhbHNlOworCisvLyBDYWNoZSBz
aXplLiBEZWZhdWx0IDQgTUIKK3N0YXRpYyBpbnQgRkxBR1NfY2FjaGVfc2l6ZSA9IDQxOTQzMDQ7
CisKKy8vIFBhZ2Ugc2l6ZS4gRGVmYXVsdCAxIEtCCitzdGF0aWMgaW50IEZMQUdTX3BhZ2Vfc2l6
ZSA9IDEwMjQ7CisKKy8vIElmIHRydWUsIGRvIG5vdCBkZXN0cm95IHRoZSBleGlzdGluZyBkYXRh
YmFzZS4gIElmIHlvdSBzZXQgdGhpcworLy8gZmxhZyBhbmQgYWxzbyBzcGVjaWZ5IGEgYmVuY2ht
YXJrIHRoYXQgd2FudHMgYSBmcmVzaCBkYXRhYmFzZSwgdGhhdAorLy8gYmVuY2htYXJrIHdpbGwg
ZmFpbC4KK3N0YXRpYyBib29sIEZMQUdTX3VzZV9leGlzdGluZ19kYiA9IGZhbHNlOworCisvLyBD
b21wcmVzc2lvbiBmbGFnLiBJZiB0cnVlLCBjb21wcmVzc2lvbiBpcyBvbi4gSWYgZmFsc2UsIGNv
bXByZXNzaW9uCisvLyBpcyBvZmYuCitzdGF0aWMgYm9vbCBGTEFHU19jb21wcmVzc2lvbiA9IHRy
dWU7CisKKy8vIFVzZSB0aGUgZGIgd2l0aCB0aGUgZm9sbG93aW5nIG5hbWUuCitzdGF0aWMgY29u
c3QgY2hhciogRkxBR1NfZGIgPSBOVUxMOworCitpbmxpbmUKK3N0YXRpYyB2b2lkIERCU3luY2hy
b25pemUoa3lvdG9jYWJpbmV0OjpUcmVlREIqIGRiXykKK3sKKyAgLy8gU3luY2hyb25pemUgd2ls
bCBmbHVzaCB3cml0ZXMgdG8gZGlzaworICBpZiAoIWRiXy0+c3luY2hyb25pemUoKSkgeworICAg
IGZwcmludGYoc3RkZXJyLCAic3luY2hyb25pemUgZXJyb3I6ICVzXG4iLCBkYl8tPmVycm9yKCku
bmFtZSgpKTsKKyAgfQorfQorCituYW1lc3BhY2UgbGV2ZWxkYiB7CisKKy8vIEhlbHBlciBmb3Ig
cXVpY2tseSBnZW5lcmF0aW5nIHJhbmRvbSBkYXRhLgorbmFtZXNwYWNlIHsKK2NsYXNzIFJhbmRv
bUdlbmVyYXRvciB7CisgcHJpdmF0ZToKKyAgc3RkOjpzdHJpbmcgZGF0YV87CisgIGludCBwb3Nf
OworCisgcHVibGljOgorICBSYW5kb21HZW5lcmF0b3IoKSB7CisgICAgLy8gV2UgdXNlIGEgbGlt
aXRlZCBhbW91bnQgb2YgZGF0YSBvdmVyIGFuZCBvdmVyIGFnYWluIGFuZCBlbnN1cmUKKyAgICAv
LyB0aGF0IGl0IGlzIGxhcmdlciB0aGFuIHRoZSBjb21wcmVzc2lvbiB3aW5kb3cgKDMyS0IpLCBh
bmQgYWxzbworICAgIC8vIGxhcmdlIGVub3VnaCB0byBzZXJ2ZSBhbGwgdHlwaWNhbCB2YWx1ZSBz
aXplcyB3ZSB3YW50IHRvIHdyaXRlLgorICAgIFJhbmRvbSBybmQoMzAxKTsKKyAgICBzdGQ6OnN0
cmluZyBwaWVjZTsKKyAgICB3aGlsZSAoZGF0YV8uc2l6ZSgpIDwgMTA0ODU3NikgeworICAgICAg
Ly8gQWRkIGEgc2hvcnQgZnJhZ21lbnQgdGhhdCBpcyBhcyBjb21wcmVzc2libGUgYXMgc3BlY2lm
aWVkCisgICAgICAvLyBieSBGTEFHU19jb21wcmVzc2lvbl9yYXRpby4KKyAgICAgIHRlc3Q6OkNv
bXByZXNzaWJsZVN0cmluZygmcm5kLCBGTEFHU19jb21wcmVzc2lvbl9yYXRpbywgMTAwLCAmcGll
Y2UpOworICAgICAgZGF0YV8uYXBwZW5kKHBpZWNlKTsKKyAgICB9CisgICAgcG9zXyA9IDA7Cisg
IH0KKworICBTbGljZSBHZW5lcmF0ZShpbnQgbGVuKSB7CisgICAgaWYgKHBvc18gKyBsZW4gPiBk
YXRhXy5zaXplKCkpIHsKKyAgICAgIHBvc18gPSAwOworICAgICAgYXNzZXJ0KGxlbiA8IGRhdGFf
LnNpemUoKSk7CisgICAgfQorICAgIHBvc18gKz0gbGVuOworICAgIHJldHVybiBTbGljZShkYXRh
Xy5kYXRhKCkgKyBwb3NfIC0gbGVuLCBsZW4pOworICB9Cit9OworCitzdGF0aWMgU2xpY2UgVHJp
bVNwYWNlKFNsaWNlIHMpIHsKKyAgaW50IHN0YXJ0ID0gMDsKKyAgd2hpbGUgKHN0YXJ0IDwgcy5z
aXplKCkgJiYgaXNzcGFjZShzW3N0YXJ0XSkpIHsKKyAgICBzdGFydCsrOworICB9CisgIGludCBs
aW1pdCA9IHMuc2l6ZSgpOworICB3aGlsZSAobGltaXQgPiBzdGFydCAmJiBpc3NwYWNlKHNbbGlt
aXQtMV0pKSB7CisgICAgbGltaXQtLTsKKyAgfQorICByZXR1cm4gU2xpY2Uocy5kYXRhKCkgKyBz
dGFydCwgbGltaXQgLSBzdGFydCk7Cit9CisKK30gIC8vIG5hbWVzcGFjZQorCitjbGFzcyBCZW5j
aG1hcmsgeworIHByaXZhdGU6CisgIGt5b3RvY2FiaW5ldDo6VHJlZURCKiBkYl87CisgIGludCBk
Yl9udW1fOworICBpbnQgbnVtXzsKKyAgaW50IHJlYWRzXzsKKyAgZG91YmxlIHN0YXJ0XzsKKyAg
ZG91YmxlIGxhc3Rfb3BfZmluaXNoXzsKKyAgaW50NjRfdCBieXRlc187CisgIHN0ZDo6c3RyaW5n
IG1lc3NhZ2VfOworICBIaXN0b2dyYW0gaGlzdF87CisgIFJhbmRvbUdlbmVyYXRvciBnZW5fOwor
ICBSYW5kb20gcmFuZF87CisgIGt5b3RvY2FiaW5ldDo6TFpPQ29tcHJlc3NvcjxreW90b2NhYmlu
ZXQ6OkxaTzo6UkFXPiBjb21wXzsKKworICAvLyBTdGF0ZSBrZXB0IGZvciBwcm9ncmVzcyBtZXNz
YWdlcworICBpbnQgZG9uZV87CisgIGludCBuZXh0X3JlcG9ydF87ICAgICAvLyBXaGVuIHRvIHJl
cG9ydCBuZXh0CisKKyAgdm9pZCBQcmludEhlYWRlcigpIHsKKyAgICBjb25zdCBpbnQga0tleVNp
emUgPSAxNjsKKyAgICBQcmludEVudmlyb25tZW50KCk7CisgICAgZnByaW50ZihzdGRvdXQsICJL
ZXlzOiAgICAgICAlZCBieXRlcyBlYWNoXG4iLCBrS2V5U2l6ZSk7CisgICAgZnByaW50ZihzdGRv
dXQsICJWYWx1ZXM6ICAgICAlZCBieXRlcyBlYWNoICglZCBieXRlcyBhZnRlciBjb21wcmVzc2lv
bilcbiIsCisgICAgICAgICAgICBGTEFHU192YWx1ZV9zaXplLAorICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50PihGTEFHU192YWx1ZV9zaXplICogRkxBR1NfY29tcHJlc3Npb25fcmF0aW8gKyAw
LjUpKTsKKyAgICBmcHJpbnRmKHN0ZG91dCwgIkVudHJpZXM6ICAgICVkXG4iLCBudW1fKTsKKyAg
ICBmcHJpbnRmKHN0ZG91dCwgIlJhd1NpemU6ICAgICUuMWYgTUIgKGVzdGltYXRlZClcbiIsCisg
ICAgICAgICAgICAoKHN0YXRpY19jYXN0PGludDY0X3Q+KGtLZXlTaXplICsgRkxBR1NfdmFsdWVf
c2l6ZSkgKiBudW1fKQorICAgICAgICAgICAgIC8gMTA0ODU3Ni4wKSk7CisgICAgZnByaW50Zihz
dGRvdXQsICJGaWxlU2l6ZTogICAlLjFmIE1CIChlc3RpbWF0ZWQpXG4iLAorICAgICAgICAgICAg
KCgoa0tleVNpemUgKyBGTEFHU192YWx1ZV9zaXplICogRkxBR1NfY29tcHJlc3Npb25fcmF0aW8p
ICogbnVtXykKKyAgICAgICAgICAgICAvIDEwNDg1NzYuMCkpOworICAgIFByaW50V2FybmluZ3Mo
KTsKKyAgICBmcHJpbnRmKHN0ZG91dCwgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLVxuIik7CisgIH0KKworICB2b2lkIFByaW50V2FybmluZ3MoKSB7Cisj
aWYgZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19PUFRJTUlaRV9fKQorICAgIGZwcmlu
dGYoc3Rkb3V0LAorICAgICAgICAgICAgIldBUk5JTkc6IE9wdGltaXphdGlvbiBpcyBkaXNhYmxl
ZDogYmVuY2htYXJrcyB1bm5lY2Vzc2FyaWx5IHNsb3dcbiIKKyAgICAgICAgICAgICk7CisjZW5k
aWYKKyNpZm5kZWYgTkRFQlVHCisgICAgZnByaW50ZihzdGRvdXQsCisgICAgICAgICAgICAiV0FS
TklORzogQXNzZXJ0aW9ucyBhcmUgZW5hYmxlZDsgYmVuY2htYXJrcyB1bm5lY2Vzc2FyaWx5IHNs
b3dcbiIpOworI2VuZGlmCisgIH0KKworICB2b2lkIFByaW50RW52aXJvbm1lbnQoKSB7CisgICAg
ZnByaW50ZihzdGRlcnIsICJLeW90byBDYWJpbmV0OiAgICB2ZXJzaW9uICVzLCBsaWIgdmVyICVk
LCBsaWIgcmV2ICVkXG4iLAorICAgICAgICAgICAga3lvdG9jYWJpbmV0OjpWRVJTSU9OLCBreW90
b2NhYmluZXQ6OkxJQlZFUiwga3lvdG9jYWJpbmV0OjpMSUJSRVYpOworCisjaWYgZGVmaW5lZChf
X2xpbnV4KQorICAgIHRpbWVfdCBub3cgPSB0aW1lKE5VTEwpOworICAgIGZwcmludGYoc3RkZXJy
LCAiRGF0ZTogICAgICAgICAgICVzIiwgY3RpbWUoJm5vdykpOyAgLy8gY3RpbWUoKSBhZGRzIG5l
d2xpbmUKKworICAgIEZJTEUqIGNwdWluZm8gPSBmb3BlbigiL3Byb2MvY3B1aW5mbyIsICJyIik7
CisgICAgaWYgKGNwdWluZm8gIT0gTlVMTCkgeworICAgICAgY2hhciBsaW5lWzEwMDBdOworICAg
ICAgaW50IG51bV9jcHVzID0gMDsKKyAgICAgIHN0ZDo6c3RyaW5nIGNwdV90eXBlOworICAgICAg
c3RkOjpzdHJpbmcgY2FjaGVfc2l6ZTsKKyAgICAgIHdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2Yo
bGluZSksIGNwdWluZm8pICE9IE5VTEwpIHsKKyAgICAgICAgY29uc3QgY2hhciogc2VwID0gc3Ry
Y2hyKGxpbmUsICc6Jyk7CisgICAgICAgIGlmIChzZXAgPT0gTlVMTCkgeworICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICB9CisgICAgICAgIFNsaWNlIGtleSA9IFRyaW1TcGFjZShTbGljZShs
aW5lLCBzZXAgLSAxIC0gbGluZSkpOworICAgICAgICBTbGljZSB2YWwgPSBUcmltU3BhY2UoU2xp
Y2Uoc2VwICsgMSkpOworICAgICAgICBpZiAoa2V5ID09ICJtb2RlbCBuYW1lIikgeworICAgICAg
ICAgICsrbnVtX2NwdXM7CisgICAgICAgICAgY3B1X3R5cGUgPSB2YWwuVG9TdHJpbmcoKTsKKyAg
ICAgICAgfSBlbHNlIGlmIChrZXkgPT0gImNhY2hlIHNpemUiKSB7CisgICAgICAgICAgY2FjaGVf
c2l6ZSA9IHZhbC5Ub1N0cmluZygpOworICAgICAgICB9CisgICAgICB9CisgICAgICBmY2xvc2Uo
Y3B1aW5mbyk7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNQVTogICAgICAgICAgICAlZCAqICVz
XG4iLCBudW1fY3B1cywgY3B1X3R5cGUuY19zdHIoKSk7CisgICAgICBmcHJpbnRmKHN0ZGVyciwg
IkNQVUNhY2hlOiAgICAgICAlc1xuIiwgY2FjaGVfc2l6ZS5jX3N0cigpKTsKKyAgICB9CisjZW5k
aWYKKyAgfQorCisgIHZvaWQgU3RhcnQoKSB7CisgICAgc3RhcnRfID0gRW52OjpEZWZhdWx0KCkt
Pk5vd01pY3JvcygpICogMWUtNjsKKyAgICBieXRlc18gPSAwOworICAgIG1lc3NhZ2VfLmNsZWFy
KCk7CisgICAgbGFzdF9vcF9maW5pc2hfID0gc3RhcnRfOworICAgIGhpc3RfLkNsZWFyKCk7Cisg
ICAgZG9uZV8gPSAwOworICAgIG5leHRfcmVwb3J0XyA9IDEwMDsKKyAgfQorCisgIHZvaWQgRmlu
aXNoZWRTaW5nbGVPcCgpIHsKKyAgICBpZiAoRkxBR1NfaGlzdG9ncmFtKSB7CisgICAgICBkb3Vi
bGUgbm93ID0gRW52OjpEZWZhdWx0KCktPk5vd01pY3JvcygpICogMWUtNjsKKyAgICAgIGRvdWJs
ZSBtaWNyb3MgPSAobm93IC0gbGFzdF9vcF9maW5pc2hfKSAqIDFlNjsKKyAgICAgIGhpc3RfLkFk
ZChtaWNyb3MpOworICAgICAgaWYgKG1pY3JvcyA+IDIwMDAwKSB7CisgICAgICAgIGZwcmludGYo
c3RkZXJyLCAibG9uZyBvcDogJS4xZiBtaWNyb3MlMzBzXHIiLCBtaWNyb3MsICIiKTsKKyAgICAg
ICAgZmZsdXNoKHN0ZGVycik7CisgICAgICB9CisgICAgICBsYXN0X29wX2ZpbmlzaF8gPSBub3c7
CisgICAgfQorCisgICAgZG9uZV8rKzsKKyAgICBpZiAoZG9uZV8gPj0gbmV4dF9yZXBvcnRfKSB7
CisgICAgICBpZiAgICAgIChuZXh0X3JlcG9ydF8gPCAxMDAwKSAgIG5leHRfcmVwb3J0XyArPSAx
MDA7CisgICAgICBlbHNlIGlmIChuZXh0X3JlcG9ydF8gPCA1MDAwKSAgIG5leHRfcmVwb3J0XyAr
PSA1MDA7CisgICAgICBlbHNlIGlmIChuZXh0X3JlcG9ydF8gPCAxMDAwMCkgIG5leHRfcmVwb3J0
XyArPSAxMDAwOworICAgICAgZWxzZSBpZiAobmV4dF9yZXBvcnRfIDwgNTAwMDApICBuZXh0X3Jl
cG9ydF8gKz0gNTAwMDsKKyAgICAgIGVsc2UgaWYgKG5leHRfcmVwb3J0XyA8IDEwMDAwMCkgbmV4
dF9yZXBvcnRfICs9IDEwMDAwOworICAgICAgZWxzZSBpZiAobmV4dF9yZXBvcnRfIDwgNTAwMDAw
KSBuZXh0X3JlcG9ydF8gKz0gNTAwMDA7CisgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5leHRfcmVwb3J0XyArPSAxMDAwMDA7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIi4u
LiBmaW5pc2hlZCAlZCBvcHMlMzBzXHIiLCBkb25lXywgIiIpOworICAgICAgZmZsdXNoKHN0ZGVy
cik7CisgICAgfQorICB9CisKKyAgdm9pZCBTdG9wKGNvbnN0IFNsaWNlJiBuYW1lKSB7CisgICAg
ZG91YmxlIGZpbmlzaCA9IEVudjo6RGVmYXVsdCgpLT5Ob3dNaWNyb3MoKSAqIDFlLTY7CisKKyAg
ICAvLyBQcmV0ZW5kIGF0IGxlYXN0IG9uZSBvcCB3YXMgZG9uZSBpbiBjYXNlIHdlIGFyZSBydW5u
aW5nIGEgYmVuY2htYXJrCisgICAgLy8gdGhhdCBkb2VzIG5vdCBjYWxsIEZpbmlzaGVkU2luZ2xl
T3AoKS4KKyAgICBpZiAoZG9uZV8gPCAxKSBkb25lXyA9IDE7CisKKyAgICBpZiAoYnl0ZXNfID4g
MCkgeworICAgICAgY2hhciByYXRlWzEwMF07CisgICAgICBzbnByaW50ZihyYXRlLCBzaXplb2Yo
cmF0ZSksICIlNi4xZiBNQi9zIiwKKyAgICAgICAgICAgICAgIChieXRlc18gLyAxMDQ4NTc2LjAp
IC8gKGZpbmlzaCAtIHN0YXJ0XykpOworICAgICAgaWYgKCFtZXNzYWdlXy5lbXB0eSgpKSB7Cisg
ICAgICAgIG1lc3NhZ2VfICA9IHN0ZDo6c3RyaW5nKHJhdGUpICsgIiAiICsgbWVzc2FnZV87Cisg
ICAgICB9IGVsc2UgeworICAgICAgICBtZXNzYWdlXyA9IHJhdGU7CisgICAgICB9CisgICAgfQor
CisgICAgZnByaW50ZihzdGRvdXQsICIlLTEycyA6ICUxMS4zZiBtaWNyb3Mvb3A7JXMlc1xuIiwK
KyAgICAgICAgICAgIG5hbWUuVG9TdHJpbmcoKS5jX3N0cigpLAorICAgICAgICAgICAgKGZpbmlz
aCAtIHN0YXJ0XykgKiAxZTYgLyBkb25lXywKKyAgICAgICAgICAgIChtZXNzYWdlXy5lbXB0eSgp
ID8gIiIgOiAiICIpLAorICAgICAgICAgICAgbWVzc2FnZV8uY19zdHIoKSk7CisgICAgaWYgKEZM
QUdTX2hpc3RvZ3JhbSkgeworICAgICAgZnByaW50ZihzdGRvdXQsICJNaWNyb3NlY29uZHMgcGVy
IG9wOlxuJXNcbiIsIGhpc3RfLlRvU3RyaW5nKCkuY19zdHIoKSk7CisgICAgfQorICAgIGZmbHVz
aChzdGRvdXQpOworICB9CisKKyBwdWJsaWM6CisgIGVudW0gT3JkZXIgeworICAgIFNFUVVFTlRJ
QUwsCisgICAgUkFORE9NCisgIH07CisgIGVudW0gREJTdGF0ZSB7CisgICAgRlJFU0gsCisgICAg
RVhJU1RJTkcKKyAgfTsKKworICBCZW5jaG1hcmsoKQorICA6IGRiXyhOVUxMKSwKKyAgICBudW1f
KEZMQUdTX251bSksCisgICAgcmVhZHNfKEZMQUdTX3JlYWRzIDwgMCA/IEZMQUdTX251bSA6IEZM
QUdTX3JlYWRzKSwKKyAgICBieXRlc18oMCksCisgICAgcmFuZF8oMzAxKSB7CisgICAgc3RkOjp2
ZWN0b3I8c3RkOjpzdHJpbmc+IGZpbGVzOworICAgIHN0ZDo6c3RyaW5nIHRlc3RfZGlyOworICAg
IEVudjo6RGVmYXVsdCgpLT5HZXRUZXN0RGlyZWN0b3J5KCZ0ZXN0X2Rpcik7CisgICAgRW52OjpE
ZWZhdWx0KCktPkdldENoaWxkcmVuKHRlc3RfZGlyLmNfc3RyKCksICZmaWxlcyk7CisgICAgaWYg
KCFGTEFHU191c2VfZXhpc3RpbmdfZGIpIHsKKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmls
ZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgaWYgKFNsaWNlKGZpbGVzW2ldKS5zdGFydHNfd2l0
aCgiZGJiZW5jaF9wb2x5REIiKSkgeworICAgICAgICAgIHN0ZDo6c3RyaW5nIGZpbGVfbmFtZSh0
ZXN0X2Rpcik7CisgICAgICAgICAgZmlsZV9uYW1lICs9ICIvIjsKKyAgICAgICAgICBmaWxlX25h
bWUgKz0gZmlsZXNbaV07CisgICAgICAgICAgRW52OjpEZWZhdWx0KCktPkRlbGV0ZUZpbGUoZmls
ZV9uYW1lLmNfc3RyKCkpOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisKKyAgfkJl
bmNobWFyaygpIHsKKyAgICBpZiAoIWRiXy0+Y2xvc2UoKSkgeworICAgICAgZnByaW50ZihzdGRl
cnIsICJjbG9zZSBlcnJvcjogJXNcbiIsIGRiXy0+ZXJyb3IoKS5uYW1lKCkpOworICAgIH0KKyAg
fQorCisgIHZvaWQgUnVuKCkgeworICAgIFByaW50SGVhZGVyKCk7CisgICAgT3BlbihmYWxzZSk7
CisKKyAgICBjb25zdCBjaGFyKiBiZW5jaG1hcmtzID0gRkxBR1NfYmVuY2htYXJrczsKKyAgICB3
aGlsZSAoYmVuY2htYXJrcyAhPSBOVUxMKSB7CisgICAgICBjb25zdCBjaGFyKiBzZXAgPSBzdHJj
aHIoYmVuY2htYXJrcywgJywnKTsKKyAgICAgIFNsaWNlIG5hbWU7CisgICAgICBpZiAoc2VwID09
IE5VTEwpIHsKKyAgICAgICAgbmFtZSA9IGJlbmNobWFya3M7CisgICAgICAgIGJlbmNobWFya3Mg
PSBOVUxMOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgbmFtZSA9IFNsaWNlKGJlbmNobWFya3Ms
IHNlcCAtIGJlbmNobWFya3MpOworICAgICAgICBiZW5jaG1hcmtzID0gc2VwICsgMTsKKyAgICAg
IH0KKworICAgICAgU3RhcnQoKTsKKworICAgICAgYm9vbCBrbm93biA9IHRydWU7CisgICAgICBi
b29sIHdyaXRlX3N5bmMgPSBmYWxzZTsKKyAgICAgIGlmIChuYW1lID09IFNsaWNlKCJmaWxsc2Vx
IikpIHsKKyAgICAgICAgV3JpdGUod3JpdGVfc3luYywgU0VRVUVOVElBTCwgRlJFU0gsIG51bV8s
IEZMQUdTX3ZhbHVlX3NpemUsIDEpOworICAgICAgICAKKyAgICAgIH0gZWxzZSBpZiAobmFtZSA9
PSBTbGljZSgiZmlsbHJhbmRvbSIpKSB7CisgICAgICAgIFdyaXRlKHdyaXRlX3N5bmMsIFJBTkRP
TSwgRlJFU0gsIG51bV8sIEZMQUdTX3ZhbHVlX3NpemUsIDEpOworICAgICAgICBEQlN5bmNocm9u
aXplKGRiXyk7CisgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gU2xpY2UoIm92ZXJ3cml0ZSIpKSB7
CisgICAgICAgIFdyaXRlKHdyaXRlX3N5bmMsIFJBTkRPTSwgRVhJU1RJTkcsIG51bV8sIEZMQUdT
X3ZhbHVlX3NpemUsIDEpOworICAgICAgICBEQlN5bmNocm9uaXplKGRiXyk7CisgICAgICB9IGVs
c2UgaWYgKG5hbWUgPT0gU2xpY2UoImZpbGxyYW5kc3luYyIpKSB7CisgICAgICAgIHdyaXRlX3N5
bmMgPSB0cnVlOworICAgICAgICBXcml0ZSh3cml0ZV9zeW5jLCBSQU5ET00sIEZSRVNILCBudW1f
IC8gMTAwLCBGTEFHU192YWx1ZV9zaXplLCAxKTsKKyAgICAgICAgREJTeW5jaHJvbml6ZShkYl8p
OworICAgICAgfSBlbHNlIGlmIChuYW1lID09IFNsaWNlKCJmaWxsc2Vxc3luYyIpKSB7CisgICAg
ICAgIHdyaXRlX3N5bmMgPSB0cnVlOworICAgICAgICBXcml0ZSh3cml0ZV9zeW5jLCBTRVFVRU5U
SUFMLCBGUkVTSCwgbnVtXyAvIDEwMCwgRkxBR1NfdmFsdWVfc2l6ZSwgMSk7CisgICAgICAgIERC
U3luY2hyb25pemUoZGJfKTsKKyAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSBTbGljZSgiZmlsbHJh
bmQxMDBLIikpIHsKKyAgICAgICAgV3JpdGUod3JpdGVfc3luYywgUkFORE9NLCBGUkVTSCwgbnVt
XyAvIDEwMDAsIDEwMCAqIDEwMDAsIDEpOworICAgICAgICBEQlN5bmNocm9uaXplKGRiXyk7Cisg
ICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gU2xpY2UoImZpbGxzZXExMDBLIikpIHsKKyAgICAgICAg
V3JpdGUod3JpdGVfc3luYywgU0VRVUVOVElBTCwgRlJFU0gsIG51bV8gLyAxMDAwLCAxMDAgKiAx
MDAwLCAxKTsKKyAgICAgICAgREJTeW5jaHJvbml6ZShkYl8pOworICAgICAgfSBlbHNlIGlmIChu
YW1lID09IFNsaWNlKCJyZWFkc2VxIikpIHsKKyAgICAgICAgUmVhZFNlcXVlbnRpYWwoKTsKKyAg
ICAgIH0gZWxzZSBpZiAobmFtZSA9PSBTbGljZSgicmVhZHJhbmRvbSIpKSB7CisgICAgICAgIFJl
YWRSYW5kb20oKTsKKyAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSBTbGljZSgicmVhZHJhbmQxMDBL
IikpIHsKKyAgICAgICAgaW50IG4gPSByZWFkc187CisgICAgICAgIHJlYWRzXyAvPSAxMDAwOwor
ICAgICAgICBSZWFkUmFuZG9tKCk7CisgICAgICAgIHJlYWRzXyA9IG47CisgICAgICB9IGVsc2Ug
aWYgKG5hbWUgPT0gU2xpY2UoInJlYWRzZXExMDBLIikpIHsKKyAgICAgICAgaW50IG4gPSByZWFk
c187CisgICAgICAgIHJlYWRzXyAvPSAxMDAwOworICAgICAgICBSZWFkU2VxdWVudGlhbCgpOwor
ICAgICAgICByZWFkc18gPSBuOworICAgICAgfSBlbHNlIHsKKyAgICAgICAga25vd24gPSBmYWxz
ZTsKKyAgICAgICAgaWYgKG5hbWUgIT0gU2xpY2UoKSkgeyAgLy8gTm8gZXJyb3IgbWVzc2FnZSBm
b3IgZW1wdHkgbmFtZQorICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAidW5rbm93biBiZW5jaG1h
cmsgJyVzJ1xuIiwgbmFtZS5Ub1N0cmluZygpLmNfc3RyKCkpOworICAgICAgICB9CisgICAgICB9
CisgICAgICBpZiAoa25vd24pIHsKKyAgICAgICAgU3RvcChuYW1lKTsKKyAgICAgIH0KKyAgICB9
CisgIH0KKworIHByaXZhdGU6CisgICAgdm9pZCBPcGVuKGJvb2wgc3luYykgeworICAgIGFzc2Vy
dChkYl8gPT0gTlVMTCk7CisKKyAgICAvLyBJbml0aWFsaXplIGRiXworICAgIGRiXyA9IG5ldyBr
eW90b2NhYmluZXQ6OlRyZWVEQigpOworICAgIGNoYXIgZmlsZV9uYW1lWzEwMF07CisgICAgZGJf
bnVtXysrOworICAgIHN0ZDo6c3RyaW5nIHRlc3RfZGlyOworICAgIEVudjo6RGVmYXVsdCgpLT5H
ZXRUZXN0RGlyZWN0b3J5KCZ0ZXN0X2Rpcik7CisgICAgc25wcmludGYoZmlsZV9uYW1lLCBzaXpl
b2YoZmlsZV9uYW1lKSwKKyAgICAgICAgICAgICAiJXMvZGJiZW5jaF9wb2x5REItJWQua2N0IiwK
KyAgICAgICAgICAgICB0ZXN0X2Rpci5jX3N0cigpLAorICAgICAgICAgICAgIGRiX251bV8pOwor
CisgICAgLy8gQ3JlYXRlIHR1bmluZyBvcHRpb25zIGFuZCBvcGVuIHRoZSBkYXRhYmFzZQorICAg
IGludCBvcGVuX29wdGlvbnMgPSBreW90b2NhYmluZXQ6OlBvbHlEQjo6T1dSSVRFUiB8CisgICAg
ICAgICAgICAgICAgICAgICAgIGt5b3RvY2FiaW5ldDo6UG9seURCOjpPQ1JFQVRFOworICAgIGlu
dCB0dW5lX29wdGlvbnMgPSBreW90b2NhYmluZXQ6OlRyZWVEQjo6VFNNQUxMIHwKKyAgICAgICAg
a3lvdG9jYWJpbmV0OjpUcmVlREI6OlRMSU5FQVI7CisgICAgaWYgKEZMQUdTX2NvbXByZXNzaW9u
KSB7CisgICAgICB0dW5lX29wdGlvbnMgfD0ga3lvdG9jYWJpbmV0OjpUcmVlREI6OlRDT01QUkVT
UzsKKyAgICAgIGRiXy0+dHVuZV9jb21wcmVzc29yKCZjb21wXyk7CisgICAgfQorICAgIGRiXy0+
dHVuZV9vcHRpb25zKHR1bmVfb3B0aW9ucyk7CisgICAgZGJfLT50dW5lX3BhZ2VfY2FjaGUoRkxB
R1NfY2FjaGVfc2l6ZSk7CisgICAgZGJfLT50dW5lX3BhZ2UoRkxBR1NfcGFnZV9zaXplKTsKKyAg
ICBkYl8tPnR1bmVfbWFwKDI1NkxMPDwyMCk7CisgICAgaWYgKHN5bmMpIHsKKyAgICAgIG9wZW5f
b3B0aW9ucyB8PSBreW90b2NhYmluZXQ6OlBvbHlEQjo6T0FVVE9TWU5DOworICAgIH0KKyAgICBp
ZiAoIWRiXy0+b3BlbihmaWxlX25hbWUsIG9wZW5fb3B0aW9ucykpIHsKKyAgICAgIGZwcmludGYo
c3RkZXJyLCAib3BlbiBlcnJvcjogJXNcbiIsIGRiXy0+ZXJyb3IoKS5uYW1lKCkpOworICAgIH0K
KyAgfQorCisgIHZvaWQgV3JpdGUoYm9vbCBzeW5jLCBPcmRlciBvcmRlciwgREJTdGF0ZSBzdGF0
ZSwKKyAgICAgICAgICAgICBpbnQgbnVtX2VudHJpZXMsIGludCB2YWx1ZV9zaXplLCBpbnQgZW50
cmllc19wZXJfYmF0Y2gpIHsKKyAgICAvLyBDcmVhdGUgbmV3IGRhdGFiYXNlIGlmIHN0YXRlID09
IEZSRVNICisgICAgaWYgKHN0YXRlID09IEZSRVNIKSB7CisgICAgICBpZiAoRkxBR1NfdXNlX2V4
aXN0aW5nX2RiKSB7CisgICAgICAgIG1lc3NhZ2VfID0gInNraXBwaW5nICgtLXVzZV9leGlzdGlu
Z19kYiBpcyB0cnVlKSI7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIGRlbGV0ZSBk
Yl87CisgICAgICBkYl8gPSBOVUxMOworICAgICAgT3BlbihzeW5jKTsKKyAgICAgIFN0YXJ0KCk7
ICAvLyBEbyBub3QgY291bnQgdGltZSB0YWtlbiB0byBkZXN0cm95L29wZW4KKyAgICB9CisKKyAg
ICBpZiAobnVtX2VudHJpZXMgIT0gbnVtXykgeworICAgICAgY2hhciBtc2dbMTAwXTsKKyAgICAg
IHNucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksICIoJWQgb3BzKSIsIG51bV9lbnRyaWVzKTsKKyAg
ICAgIG1lc3NhZ2VfID0gbXNnOworICAgIH0KKworICAgIC8vIFdyaXRlIHRvIGRhdGFiYXNlCisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1fZW50cmllczsgaSsrKQorICAgIHsKKyAgICAgIGNv
bnN0IGludCBrID0gKG9yZGVyID09IFNFUVVFTlRJQUwpID8gaSA6IChyYW5kXy5OZXh0KCkgJSBu
dW1fZW50cmllcyk7CisgICAgICBjaGFyIGtleVsxMDBdOworICAgICAgc25wcmludGYoa2V5LCBz
aXplb2Yoa2V5KSwgIiUwMTZkIiwgayk7CisgICAgICBieXRlc18gKz0gdmFsdWVfc2l6ZSArIHN0
cmxlbihrZXkpOworICAgICAgc3RkOjpzdHJpbmcgY3BwX2tleSA9IGtleTsKKyAgICAgIGlmICgh
ZGJfLT5zZXQoY3BwX2tleSwgZ2VuXy5HZW5lcmF0ZSh2YWx1ZV9zaXplKS5Ub1N0cmluZygpKSkg
eworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInNldCBlcnJvcjogJXNcbiIsIGRiXy0+ZXJyb3Io
KS5uYW1lKCkpOworICAgICAgfQorICAgICAgRmluaXNoZWRTaW5nbGVPcCgpOworICAgIH0KKyAg
fQorCisgIHZvaWQgUmVhZFNlcXVlbnRpYWwoKSB7CisgICAga3lvdG9jYWJpbmV0OjpEQjo6Q3Vy
c29yKiBjdXIgPSBkYl8tPmN1cnNvcigpOworICAgIGN1ci0+anVtcCgpOworICAgIHN0ZDo6c3Ry
aW5nIGNrZXksIGN2YWx1ZTsKKyAgICB3aGlsZSAoY3VyLT5nZXQoJmNrZXksICZjdmFsdWUsIHRy
dWUpKSB7CisgICAgICBieXRlc18gKz0gY2tleS5zaXplKCkgKyBjdmFsdWUuc2l6ZSgpOworICAg
ICAgRmluaXNoZWRTaW5nbGVPcCgpOworICAgIH0KKyAgICBkZWxldGUgY3VyOworICB9CisKKyAg
dm9pZCBSZWFkUmFuZG9tKCkgeworICAgIHN0ZDo6c3RyaW5nIHZhbHVlOworICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgcmVhZHNfOyBpKyspIHsKKyAgICAgIGNoYXIga2V5WzEwMF07CisgICAgICBj
b25zdCBpbnQgayA9IHJhbmRfLk5leHQoKSAlIHJlYWRzXzsKKyAgICAgIHNucHJpbnRmKGtleSwg
c2l6ZW9mKGtleSksICIlMDE2ZCIsIGspOworICAgICAgZGJfLT5nZXQoa2V5LCAmdmFsdWUpOwor
ICAgICAgRmluaXNoZWRTaW5nbGVPcCgpOworICAgIH0KKyAgfQorfTsKKworfSAgLy8gbmFtZXNw
YWNlIGxldmVsZGIKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KSB7CisgIHN0ZDo6
c3RyaW5nIGRlZmF1bHRfZGJfcGF0aDsKKyAgZm9yIChpbnQgaSA9IDE7IGkgPCBhcmdjOyBpKysp
IHsKKyAgICBkb3VibGUgZDsKKyAgICBpbnQgbjsKKyAgICBjaGFyIGp1bms7CisgICAgaWYgKGxl
dmVsZGI6OlNsaWNlKGFyZ3ZbaV0pLnN0YXJ0c193aXRoKCItLWJlbmNobWFya3M9IikpIHsKKyAg
ICAgIEZMQUdTX2JlbmNobWFya3MgPSBhcmd2W2ldICsgc3RybGVuKCItLWJlbmNobWFya3M9Iik7
CisgICAgfSBlbHNlIGlmIChzc2NhbmYoYXJndltpXSwgIi0tY29tcHJlc3Npb25fcmF0aW89JWxm
JWMiLCAmZCwgJmp1bmspID09IDEpIHsKKyAgICAgIEZMQUdTX2NvbXByZXNzaW9uX3JhdGlvID0g
ZDsKKyAgICB9IGVsc2UgaWYgKHNzY2FuZihhcmd2W2ldLCAiLS1oaXN0b2dyYW09JWQlYyIsICZu
LCAmanVuaykgPT0gMSAmJgorICAgICAgICAgICAgICAgKG4gPT0gMCB8fCBuID09IDEpKSB7Cisg
ICAgICBGTEFHU19oaXN0b2dyYW0gPSBuOworICAgIH0gZWxzZSBpZiAoc3NjYW5mKGFyZ3ZbaV0s
ICItLW51bT0lZCVjIiwgJm4sICZqdW5rKSA9PSAxKSB7CisgICAgICBGTEFHU19udW0gPSBuOwor
ICAgIH0gZWxzZSBpZiAoc3NjYW5mKGFyZ3ZbaV0sICItLXJlYWRzPSVkJWMiLCAmbiwgJmp1bmsp
ID09IDEpIHsKKyAgICAgIEZMQUdTX3JlYWRzID0gbjsKKyAgICB9IGVsc2UgaWYgKHNzY2FuZihh
cmd2W2ldLCAiLS12YWx1ZV9zaXplPSVkJWMiLCAmbiwgJmp1bmspID09IDEpIHsKKyAgICAgIEZM
QUdTX3ZhbHVlX3NpemUgPSBuOworICAgIH0gZWxzZSBpZiAoc3NjYW5mKGFyZ3ZbaV0sICItLWNh
Y2hlX3NpemU9JWQlYyIsICZuLCAmanVuaykgPT0gMSkgeworICAgICAgRkxBR1NfY2FjaGVfc2l6
ZSA9IG47CisgICAgfSBlbHNlIGlmIChzc2NhbmYoYXJndltpXSwgIi0tcGFnZV9zaXplPSVkJWMi
LCAmbiwgJmp1bmspID09IDEpIHsKKyAgICAgIEZMQUdTX3BhZ2Vfc2l6ZSA9IG47CisgICAgfSBl
bHNlIGlmIChzc2NhbmYoYXJndltpXSwgIi0tY29tcHJlc3Npb249JWQlYyIsICZuLCAmanVuaykg
PT0gMSAmJgorICAgICAgICAgICAgICAgKG4gPT0gMCB8fCBuID09IDEpKSB7CisgICAgICBGTEFH
U19jb21wcmVzc2lvbiA9IChuID09IDEpID8gdHJ1ZSA6IGZhbHNlOworICAgIH0gZWxzZSBpZiAo
c3RybmNtcChhcmd2W2ldLCAiLS1kYj0iLCA1KSA9PSAwKSB7CisgICAgICBGTEFHU19kYiA9IGFy
Z3ZbaV0gKyA1OworICAgIH0gZWxzZSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQg
ZmxhZyAnJXMnXG4iLCBhcmd2W2ldKTsKKyAgICAgIGV4aXQoMSk7CisgICAgfQorICB9CisKKyAg
Ly8gQ2hvb3NlIGEgbG9jYXRpb24gZm9yIHRoZSB0ZXN0IGRhdGFiYXNlIGlmIG5vbmUgZ2l2ZW4g
d2l0aCAtLWRiPTxwYXRoPgorICBpZiAoRkxBR1NfZGIgPT0gTlVMTCkgeworICAgICAgbGV2ZWxk
Yjo6RW52OjpEZWZhdWx0KCktPkdldFRlc3REaXJlY3RvcnkoJmRlZmF1bHRfZGJfcGF0aCk7Cisg
ICAgICBkZWZhdWx0X2RiX3BhdGggKz0gIi9kYmJlbmNoIjsKKyAgICAgIEZMQUdTX2RiID0gZGVm
YXVsdF9kYl9wYXRoLmNfc3RyKCk7CisgIH0KKworICBsZXZlbGRiOjpCZW5jaG1hcmsgYmVuY2ht
YXJrOworICBiZW5jaG1hcmsuUnVuKCk7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kb2MvYmVuY2htYXJrLmh0bWwgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9sZXZlbGRiL2RvYy9iZW5jaG1hcmsuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNDYzOTc3MmMxNzVi
NDYzZjZmNDFlZWIwY2QwYzczZmU3YzE2ZDY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvbGV2ZWxkYi9kb2MvYmVuY2htYXJrLmh0bWwKQEAgLTAsMCArMSw0NTkgQEAKKzwh
RE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5MZXZlbERCIEJlbmNobWFya3M8
L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0
bWw7IGNoYXJzZXQ9dXRmLTgiPgorPHN0eWxlPgorYm9keSB7CisgIGZvbnQtZmFtaWx5OkhlbHZl
dGljYSxzYW5zLXNlcmlmOworICBwYWRkaW5nOjIwcHg7Cit9CisKK2gyIHsKKyAgcGFkZGluZy10
b3A6MzBweDsKK30KKwordGFibGUuYm4geworICB3aWR0aDo4MDBweDsKKyAgYm9yZGVyLWNvbGxh
cHNlOmNvbGxhcHNlOworICBib3JkZXI6MDsKKyAgcGFkZGluZzowOworfQorCit0YWJsZS5ibmJh
c2UgeworICB3aWR0aDo2NTBweDsKK30KKwordGFibGUuYm4gdGQgeworICBwYWRkaW5nOjJweCAw
OworfQorCit0YWJsZS5ibiB0ZC5jMSB7CisgIGZvbnQtd2VpZ2h0OmJvbGQ7CisgIHdpZHRoOjE1
MHB4OworfQorCit0YWJsZS5ibiB0ZC5jMSBkaXYuZSB7CisgIGZsb2F0OnJpZ2h0OworICBmb250
LXdlaWdodDpub3JtYWw7Cit9CisKK3RhYmxlLmJuIHRkLmMyIHsKKyAgd2lkdGg6MTUwcHg7Cisg
IHRleHQtYWxpZ246cmlnaHQ7CisgIHBhZGRpbmc6MnB4OworfQorCit0YWJsZS5ibiB0ZC5jMyB7
CisgIHdpZHRoOjM1MHB4OworfQorCit0YWJsZS5ibiB0ZC5jNCB7CisgIHdpZHRoOjE1MHB4Owor
ICBmb250LXNpemU6c21hbGw7CisgIHBhZGRpbmctbGVmdDo0cHg7Cit9CisKKy8qIGNoYXJ0IGJh
cnMgKi8KK2Rpdi5ibGRiIHsKKyAgYmFja2dyb3VuZC1jb2xvcjojMDI1NWRmOworfQorCitkaXYu
YmtjdCB7CisgIGJhY2tncm91bmQtY29sb3I6I2RmNTU1NTsKK30KKworZGl2LmJzcWwgeworICBi
YWNrZ3JvdW5kLWNvbG9yOiNhYWRmNTU7Cit9CisKKy5jb2RlIHsKKyAgZm9udC1mYW1pbHk6bW9u
b3NwYWNlOworICBmb250LXNpemU6bGFyZ2U7Cit9CisKKy50b2RvIHsKKyAgY29sb3I6IHJlZDsK
K30KKworPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGgxPkxldmVsREIgQmVuY2htYXJrczwv
aDE+Cis8cD5Hb29nbGUsIEp1bHkgMjAxMTwvcD4KKzxocj4KKworPHA+SW4gb3JkZXIgdG8gdGVz
dCBMZXZlbERCJ3MgcGVyZm9ybWFuY2UsIHdlIGJlbmNobWFyayBpdCBhZ2FpbnN0IG90aGVyIHdl
bGwtZXN0YWJsaXNoZWQgZGF0YWJhc2UgaW1wbGVtZW50YXRpb25zLiBXZSBjb21wYXJlIExldmVs
REIgKHJldmlzaW9uIDM5KSBhZ2FpbnN0IDxhIGhyZWY9Imh0dHA6Ly93d3cuc3FsaXRlLm9yZy8i
PlNRTGl0ZTM8L2E+ICh2ZXJzaW9uIDMuNy42LjMpIGFuZCA8YSBocmVmPSJodHRwOi8vZmFsbGFi
cy5jb20va3lvdG9jYWJpbmV0L3NwZXguaHRtbCI+S3lvdG8gQ2FiaW5ldCdzPC9hPiAodmVyc2lv
biAxLjIuNjcpIFRyZWVEQiAoYSBCK1RyZWUgYmFzZWQga2V5LXZhbHVlIHN0b3JlKS4gV2Ugd291
bGQgbGlrZSB0byBhY2tub3dsZWRnZSBTY290dCBIZXNzIGFuZCBNaWtpbyBIaXJhYmF5YXNoaSBm
b3IgdGhlaXIgc3VnZ2VzdGlvbnMgYW5kIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIFNRTGl0ZTMgYW5k
IEt5b3RvIENhYmluZXQgYmVuY2htYXJrcywgcmVzcGVjdGl2ZWx5LjwvcD4KKworPHA+QmVuY2ht
YXJrcyB3ZXJlIGFsbCBwZXJmb3JtZWQgb24gYSBzaXgtY29yZSBJbnRlbChSKSBYZW9uKFIpIENQ
VSBYNTY1MCBAIDIuNjdHSHosIHdpdGggMTIyODggS0Igb2YgdG90YWwgTDMgY2FjaGUgYW5kIDEy
IEdCIG9mIEREUjMgUkFNIGF0IDEzMzMgTUh6LiAoTm90ZSB0aGF0IExldmVsREIgdXNlcyBhdCBt
b3N0IHR3byBDUFVzIHNpbmNlIHRoZSBiZW5jaG1hcmtzIGFyZSBzaW5nbGUgdGhyZWFkZWQ6IG9u
ZSB0byBydW4gdGhlIGJlbmNobWFyaywgYW5kIG9uZSBmb3IgYmFja2dyb3VuZCBjb21wYWN0aW9u
cy4pIFdlIHJhbiB0aGUgYmVuY2htYXJrcyBvbiB0d28gbWFjaGluZXMgKHdpdGggaWRlbnRpY2Fs
IHByb2Nlc3NvcnMpLCBvbmUgd2l0aCBhbiBFeHQzIGZpbGUgc3lzdGVtIGFuZCBvbmUgd2l0aCBh
biBFeHQ0IGZpbGUgc3lzdGVtLiBUaGUgbWFjaGluZSB3aXRoIHRoZSBFeHQzIGZpbGUgc3lzdGVt
IGhhcyBhIFNBVEEgSGl0YWNoaSBIRFM3MjEwNTBDTEEzNjIgaGFyZCBkcml2ZS4gVGhlIG1hY2hp
bmUgd2l0aCB0aGUgRXh0NCBmaWxlIHN5c3RlbSBoYXMgYSBTQVRBIFNhbXN1bmcgSEQ1MDJISiBo
YXJkIGRyaXZlLiBCb3RoIGhhcmQgZHJpdmVzIHNwaW4gYXQgNzIwMCBSUE0gYW5kIGhhdmUgaGFy
ZCBkcml2ZSB3cml0ZS1jYWNoaW5nIGVuYWJsZWQgKHVzaW5nIGBoZHBhcm0gLVcgMSBbZGV2aWNl
XWApLiBUaGUgbnVtYmVycyByZXBvcnRlZCBiZWxvdyBhcmUgdGhlIG1lZGlhbiBvZiB0aHJlZSBt
ZWFzdXJlbWVudHMuPC9wPgorCis8aDQ+QmVuY2htYXJrIFNvdXJjZSBDb2RlPC9oND4KKzxwPldl
IHdyb3RlIGJlbmNobWFyayB0b29scyBmb3IgU1FMaXRlIGFuZCBLeW90byBUcmVlREIgYmFzZWQg
b24gTGV2ZWxEQidzIDxzcGFuIGNsYXNzPSJjb2RlIj5kYl9iZW5jaDwvc3Bhbj4uIFRoZSBjb2Rl
IGZvciBlYWNoIG9mIHRoZSBiZW5jaG1hcmtzIHJlc2lkZXMgaGVyZTo8L3A+Cis8dWw+CisJPGxp
PiA8Yj5MZXZlbERCOjwvYj4gPGEgaHJlZj0iaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2xldmVs
ZGIvc291cmNlL2Jyb3dzZS90cnVuay9kYi9kYl9iZW5jaC5jYyI+ZGIvZGJfYmVuY2guY2M8L2E+
LjwvbGk+CisJPGxpPiA8Yj5TUUxpdGU6PC9iPiA8YSBocmVmPSJodHRwOi8vY29kZS5nb29nbGUu
Y29tL3AvbGV2ZWxkYi9zb3VyY2UvYnJvd3NlLyNzdm4lMkZ0cnVuayUyRmRvYyUyRmJlbmNoJTJG
ZGJfYmVuY2hfc3FsaXRlMy5jYyI+ZG9jL2JlbmNoL2RiX2JlbmNoX3NxbGl0ZTMuY2M8L2E+Ljwv
bGk+CisJPGxpPiA8Yj5LeW90byBUcmVlREI6PC9iPiA8YSBocmVmPSJodHRwOi8vY29kZS5nb29n
bGUuY29tL3AvbGV2ZWxkYi9zb3VyY2UvYnJvd3NlLyNzdm4lMkZ0cnVuayUyRmRvYyUyRmJlbmNo
JTJGZGJfYmVuY2hfdHJlZV9kYi5jYyI+ZG9jL2JlbmNoL2RiX2JlbmNoX3RyZWVfZGIuY2M8L2E+
LjwvbGk+Cis8L3VsPgorCis8aDQ+Q3VzdG9tIEJ1aWxkIFNwZWNpZmljYXRpb25zPC9oND4KKzx1
bD4KKzxsaT5MZXZlbERCOiBMZXZlbERCIHdhcyBjb21waWxlZCB3aXRoIHRoZSA8YSBocmVmPSJo
dHRwOi8vY29kZS5nb29nbGUuY29tL3AvZ29vZ2xlLXBlcmZ0b29scyI+dGNtYWxsb2M8L2E+IGxp
YnJhcnkgYW5kIHRoZSA8YSBocmVmPSJodHRwOi8vY29kZS5nb29nbGUuY29tL3Avc25hcHB5LyI+
U25hcHB5PC9hPiBjb21wcmVzc2lvbiBsaWJyYXJ5IChyZXZpc2lvbiAzMykuICBBc3NlcnRpb25z
IHdlcmUgZGlzYWJsZWQuPC9saT4KKzxsaT5UcmVlREI6IFRyZWVEQiB3YXMgY29tcGlsZWQgdXNp
bmcgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8i
PkxaTzwvYT4gY29tcHJlc3Npb24gbGlicmFyeSAodmVyc2lvbiAyLjAzKS4gRnVydGhlcm1vcmUs
IHdlIGVuYWJsZWQgdGhlIFRTTUFMTCBhbmQgVExJTkVBUiBvcHRpb25zIHdoZW4gb3BlbmluZyB0
aGUgZGF0YWJhc2UgaW4gb3JkZXIgdG8gcmVkdWNlIHRoZSBmb290cHJpbnQgb2YgZWFjaCByZWNv
cmQuPC9saT4KKzxsaT5TUUxpdGU6IFdlIHR1bmVkIFNRTGl0ZSdzIHBlcmZvcm1hbmNlLCBieSBz
ZXR0aW5nIGl0cyBsb2NraW5nIG1vZGUgdG8gZXhjbHVzaXZlLiAgV2UgYWxzbyBlbmFibGVkIFNR
TGl0ZSdzIDxhIGhyZWY9Imh0dHA6Ly93d3cuc3FsaXRlLm9yZy9kcmFmdC93YWwuaHRtbCI+d3Jp
dGUtYWhlYWQgbG9nZ2luZzwvYT4uPC9saT4KKzwvdWw+CisKKzxoMj4xLiBCYXNlbGluZSBQZXJm
b3JtYW5jZTwvaDI+Cis8cD5UaGlzIHNlY3Rpb24gZ2l2ZXMgdGhlIGJhc2VsaW5lIHBlcmZvcm1h
bmNlIG9mIGFsbCB0aGUKK2RhdGFiYXNlcy4gIEZvbGxvd2luZyBzZWN0aW9ucyBzaG93IGhvdyBw
ZXJmb3JtYW5jZSBjaGFuZ2VzIGFzIHZhcmlvdXMKK3BhcmFtZXRlcnMgYXJlIHZhcmllZC4gIEZv
ciB0aGUgYmFzZWxpbmU6PC9wPgorPHVsPgorCTxsaT4gRWFjaCBkYXRhYmFzZSBpcyBhbGxvd2Vk
IDQgTUIgb2YgY2FjaGUgbWVtb3J5LjwvbGk+CisgICAgICAgIDxsaT4gRGF0YWJhc2VzIGFyZSBv
cGVuZWQgaW4gPGVtPmFzeW5jaHJvbm91czwvZW0+IHdyaXRlIG1vZGUuCisgICAgICAgICAgICAg
KExldmVsREIncyBzeW5jIG9wdGlvbiwgVHJlZURCJ3MgT0FVVE9TWU5DIG9wdGlvbiwgYW5kCisg
ICAgICAgICAgICAgU1FMaXRlMydzIHN5bmNocm9ub3VzIG9wdGlvbnMgYXJlIGFsbCB0dXJuZWQg
b2ZmKS4gIEkuZS4sCisgICAgICAgICAgICAgZXZlcnkgd3JpdGUgaXMgcHVzaGVkIHRvIHRoZSBv
cGVyYXRpbmcgc3lzdGVtLCBidXQgdGhlCisgICAgICAgICAgICAgYmVuY2htYXJrIGRvZXMgbm90
IHdhaXQgZm9yIHRoZSB3cml0ZSB0byByZWFjaCB0aGUgZGlzay48L2xpPgorCTxsaT4gS2V5cyBh
cmUgMTYgYnl0ZXMgZWFjaC48L2xpPgorICAgICAgICA8bGk+IFZhbHVlIGFyZSAxMDAgYnl0ZXMg
ZWFjaCAod2l0aCBlbm91Z2ggcmVkdW5kYW5jeSBzbyB0aGF0CisgICAgICAgICAgICAgYSBzaW1w
bGUgY29tcHJlc3NvciBzaHJpbmtzIHRoZW0gdG8gNTAlIG9mIHRoZWlyIG9yaWdpbmFsCisgICAg
ICAgICAgICAgc2l6ZSkuPC9saT4KKwk8bGk+IFNlcXVlbnRpYWwgcmVhZHMvd3JpdGVzIHRyYXZl
cnNlIHRoZSBrZXkgc3BhY2UgaW4gaW5jcmVhc2luZyBvcmRlci48L2xpPgorCTxsaT4gUmFuZG9t
IHJlYWRzL3dyaXRlcyB0cmF2ZXJzZSB0aGUga2V5IHNwYWNlIGluIHJhbmRvbSBvcmRlci48L2xp
PgorPC91bD4KKworPGgzPkEuIFNlcXVlbnRpYWwgUmVhZHM8L2gzPgorPHRhYmxlIGNsYXNzPSJi
biBibmJhc2UiPgorPHRyPjx0ZCBjbGFzcz0iYzEiPkxldmVsREI8L3RkPgorICAgIDx0ZCBjbGFz
cz0iYzIiPjQsMDMwLDAwMCBvcHMvc2VjPC90ZD4KKyAgICA8dGQgY2xhc3M9ImMzIj48ZGl2IGNs
YXNzPSJibGRiIiBzdHlsZT0id2lkdGg6MzUwcHgiPiZuYnNwOzwvZGl2PjwvdGQ+Cis8dHI+PHRk
IGNsYXNzPSJjMSI+S3lvdG8gVHJlZURCPC90ZD4KKyAgICA8dGQgY2xhc3M9ImMyIj4xLDAxMCww
MDAgb3BzL3NlYzwvdGQ+CisgICAgPHRkIGNsYXNzPSJjMyI+PGRpdiBjbGFzcz0iYmtjdCIgc3R5
bGU9IndpZHRoOjk1cHgiPiZuYnNwOzwvZGl2PjwvdGQ+Cis8dHI+PHRkIGNsYXNzPSJjMSI+U1FM
aXRlMzwvdGQ+CisgICAgPHRkIGNsYXNzPSJjMiI+MzgzLDAwMCBvcHMvc2VjPC90ZD4KKyAgICA8
dGQgY2xhc3M9ImMzIj48ZGl2IGNsYXNzPSJic3FsIiBzdHlsZT0id2lkdGg6MzNweCI+Jm5ic3A7
PC9kaXY+PC90ZD4KKzwvdGFibGU+Cis8aDM+Qi4gUmFuZG9tIFJlYWRzPC9oMz4KKzx0YWJsZSBj
bGFzcz0iYm4gYm5iYXNlIj4KKzx0cj48dGQgY2xhc3M9ImMxIj5MZXZlbERCPC90ZD4KKyAgICA8
dGQgY2xhc3M9ImMyIj4xMjksMDAwIG9wcy9zZWM8L3RkPgorICAgIDx0ZCBjbGFzcz0iYzMiPjxk
aXYgY2xhc3M9ImJsZGIiIHN0eWxlPSJ3aWR0aDoyOThweCI+Jm5ic3A7PC9kaXY+PC90ZD4KKzx0
cj48dGQgY2xhc3M9ImMxIj5LeW90byBUcmVlREI8L3RkPgorICAgIDx0ZCBjbGFzcz0iYzIiPjE1
MSwwMDAgb3BzL3NlYzwvdGQ+CisgICAgPHRkIGNsYXNzPSJjMyI+PGRpdiBjbGFzcz0iYmtjdCIg
c3R5bGU9IndpZHRoOjM1MHB4Ij4mbmJzcDs8L2Rpdj48L3RkPgorPHRyPjx0ZCBjbGFzcz0iYzEi
PlNRTGl0ZTM8L3RkPgorICAgIDx0ZCBjbGFzcz0iYzIiPjEzNCwwMDAgb3BzL3NlYzwvdGQ+Cisg
ICAgPHRkIGNsYXNzPSJjMyI+PGRpdiBjbGFzcz0iYnNxbCIgc3R5bGU9IndpZHRoOjMxMHB4Ij4m
bmJzcDs8L2Rpdj48L3RkPgorPC90YWJsZT4KKzxoMz5DLiBTZXF1ZW50aWFsIFdyaXRlczwvaDM+
Cis8dGFibGUgY2xhc3M9ImJuIGJuYmFzZSI+Cis8dHI+PHRkIGNsYXNzPSJjMSI+TGV2ZWxEQjwv
dGQ+CisgICAgPHRkIGNsYXNzPSJjMiI+Nzc5LDAwMCBvcHMvc2VjPC90ZD4KKyAgICA8dGQgY2xh
c3M9ImMzIj48ZGl2IGNsYXNzPSJibGRiIiBzdHlsZT0id2lkdGg6MzUwcHgiPiZuYnNwOzwvZGl2
PjwvdGQ+Cis8dHI+PHRkIGNsYXNzPSJjMSI+S3lvdG8gVHJlZURCPC90ZD4KKyAgICA8dGQgY2xh
c3M9ImMyIj4zNDIsMDAwIG9wcy9zZWM8L3RkPgorICAgIDx0ZCBjbGFzcz0iYzMiPjxkaXYgY2xh
c3M9ImJrY3QiIHN0eWxlPSJ3aWR0aDoxNTRweCI+Jm5ic3A7PC9kaXY+PC90ZD4KKzx0cj48dGQg
Y2xhc3M9ImMxIj5TUUxpdGUzPC90ZD4KKyAgICA8dGQgY2xhc3M9ImMyIj40OCw2MDAgb3BzL3Nl
YzwvdGQ+CisgICAgPHRkIGNsYXNzPSJjMyI+PGRpdiBjbGFzcz0iYnNxbCIgc3R5bGU9IndpZHRo
OjIycHgiPiZuYnNwOzwvZGl2PjwvdGQ+Cis8L3RhYmxlPgorPGgzPkQuIFJhbmRvbSBXcml0ZXM8
L2gzPgorPHRhYmxlIGNsYXNzPSJibiBibmJhc2UiPgorPHRyPjx0ZCBjbGFzcz0iYzEiPkxldmVs
REI8L3RkPgorICAgIDx0ZCBjbGFzcz0iYzIiPjE2NCwwMDAgb3BzL3NlYzwvdGQ+CisgICAgPHRk
IGNsYXNzPSJjMyI+PGRpdiBjbGFzcz0iYmxkYiIgc3R5bGU9IndpZHRoOjM1MHB4Ij4mbmJzcDs8
L2Rpdj48L3RkPgorPHRyPjx0ZCBjbGFzcz0iYzEiPkt5b3RvIFRyZWVEQjwvdGQ+CisgICAgPHRk
IGNsYXNzPSJjMiI+ODgsNTAwIG9wcy9zZWM8L3RkPgorICAgIDx0ZCBjbGFzcz0iYzMiPjxkaXYg
Y2xhc3M9ImJrY3QiIHN0eWxlPSJ3aWR0aDoxODhweCI+Jm5ic3A7PC9kaXY+PC90ZD4KKzx0cj48
dGQgY2xhc3M9ImMxIj5TUUxpdGUzPC90ZD4KKyAgICA8dGQgY2xhc3M9ImMyIj45LDg2MCBvcHMv
c2VjPC90ZD4KKyAgICA8dGQgY2xhc3M9ImMzIj48ZGl2IGNsYXNzPSJic3FsIiBzdHlsZT0id2lk
dGg6MjFweCI+Jm5ic3A7PC9kaXY+PC90ZD4KKzwvdGFibGU+CisKKzxwPkxldmVsREIgb3V0cGVy
Zm9ybXMgYm90aCBTUUxpdGUzIGFuZCBUcmVlREIgaW4gc2VxdWVudGlhbCBhbmQgcmFuZG9tIHdy
aXRlIG9wZXJhdGlvbnMgYW5kIHNlcXVlbnRpYWwgcmVhZCBvcGVyYXRpb25zLiBLeW90byBDYWJp
bmV0IGhhcyB0aGUgZmFzdGVzdCByYW5kb20gcmVhZCBvcGVyYXRpb25zLjwvcD4KKworPGgyPjIu
IFdyaXRlIFBlcmZvcm1hbmNlIHVuZGVyIERpZmZlcmVudCBDb25maWd1cmF0aW9uczwvaDI+Cis8
aDM+QS4gTGFyZ2UgVmFsdWVzIDwvaDM+Cis8cD5Gb3IgdGhpcyBiZW5jaG1hcmssIHdlIHN0YXJ0
IHdpdGggYW4gZW1wdHkgZGF0YWJhc2UsIGFuZCB3cml0ZSAxMDAsMDAwIGJ5dGUgdmFsdWVzICh+
NTAlIGNvbXByZXNzaWJsZSkuIFRvIGtlZXAgdGhlIGJlbmNobWFyayBydW5uaW5nIHRpbWUgcmVh
c29uYWJsZSwgd2Ugc3RvcCBhZnRlciB3cml0aW5nIDEwMDAgdmFsdWVzLjwvcD4KKzxoND5TZXF1
ZW50aWFsIFdyaXRlczwvaDQ+Cis8dGFibGUgY2xhc3M9ImJuIGJuYmFzZSI+Cis8dHI+PHRkIGNs
YXNzPSJjMSI+TGV2ZWxEQjwvdGQ+CisgICAgPHRkIGNsYXNzPSJjMiI+MSwxMDAgb3BzL3NlYzwv
dGQ+CisgICAgPHRkIGNsYXNzPSJjMyI+PGRpdiBjbGFzcz0iYmxkYiIgc3R5bGU9IndpZHRoOjIz
NHB4Ij4mbmJzcDs8L2Rpdj48L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJjMSI+S3lvdG8gVHJl
ZURCPC90ZD4KKyAgICA8dGQgY2xhc3M9ImMyIj4xLDAwMCBvcHMvc2VjPC90ZD4KKyAgICA8dGQg
Y2xhc3M9ImMzIj48ZGl2IGNsYXNzPSJia2N0IiBzdHlsZT0id2lkdGg6MjI0cHgiPiZuYnNwOzwv
ZGl2PjwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9ImMxIj5TUUxpdGUzPC90ZD4KKyAgICA8dGQg
Y2xhc3M9ImMyIj4xLDYwMCBvcHMvc2VjPC90ZD4KKyAgICA8dGQgY2xhc3M9ImMzIj48ZGl2IGNs
YXNzPSJic3FsIiBzdHlsZT0id2lkdGg6MzUwcHgiPiZuYnNwOzwvZGl2PjwvdGQ+PC90cj4KKzwv
dGFibGU+Cis8aDQ+UmFuZG9tIFdyaXRlczwvaDQ+Cis8dGFibGUgY2xhc3M9ImJuIGJuYmFzZSI+
Cis8dHI+PHRkIGNsYXNzPSJjMSI+TGV2ZWxEQjwvdGQ+CisgICAgPHRkIGNsYXNzPSJjMiI+NDgw
IG9wcy9zZWM8L3RkPgorICAgIDx0ZCBjbGFzcz0iYzMiPjxkaXYgY2xhc3M9ImJsZGIiIHN0eWxl
PSJ3aWR0aDoxMDVweCI+Jm5ic3A7PC9kaXY+PC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0iYzEi
Pkt5b3RvIFRyZWVEQjwvdGQ+CisgICAgPHRkIGNsYXNzPSJjMiI+MSwxMDAgb3BzL3NlYzwvdGQ+
CisgICAgPHRkIGNsYXNzPSJjMyI+PGRpdiBjbGFzcz0iYmtjdCIgc3R5bGU9IndpZHRoOjI0MHB4
Ij4mbmJzcDs8L2Rpdj48L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJjMSI+U1FMaXRlMzwvdGQ+
CisgICAgPHRkIGNsYXNzPSJjMiI+MSw2MDAgb3BzL3NlYzwvdGQ+CisgICAgPHRkIGNsYXNzPSJj
MyI+PGRpdiBjbGFzcz0iYnNxbCIgc3R5bGU9IndpZHRoOjM1MHB4Ij4mbmJzcDs8L2Rpdj48L3Rk
PjwvdHI+Cis8L3RhYmxlPgorPHA+TGV2ZWxEQiBkb2Vzbid0IHBlcmZvcm0gYXMgd2VsbCB3aXRo
IGxhcmdlIHZhbHVlcyBvZiAxMDAsMDAwIGJ5dGVzIGVhY2guIFRoaXMgaXMgYmVjYXVzZSBMZXZl
bERCIHdyaXRlcyBrZXlzIGFuZCB2YWx1ZXMgYXQgbGVhc3QgdHdpY2U6IGZpcnN0IHRpbWUgdG8g
dGhlIHRyYW5zYWN0aW9uIGxvZywgYW5kIHNlY29uZCB0aW1lIChkdXJpbmcgYSBjb21wYWN0aW9u
KSB0byBhIHNvcnRlZCBmaWxlLgorV2l0aCBsYXJnZXIgdmFsdWVzLCBMZXZlbERCJ3MgcGVyLW9w
ZXJhdGlvbiBlZmZpY2llbmN5IGlzIHN3YW1wZWQgYnkgdGhlCitjb3N0IG9mIGV4dHJhIGNvcGll
cyBvZiBsYXJnZSB2YWx1ZXMuPC9wPgorPGgzPkIuIEJhdGNoIFdyaXRlczwvaDM+Cis8cD5BIGJh
dGNoIHdyaXRlIGlzIGEgc2V0IG9mIHdyaXRlcyB0aGF0IGFyZSBhcHBsaWVkIGF0b21pY2FsbHkg
dG8gdGhlIHVuZGVybHlpbmcgZGF0YWJhc2UuIEEgc2luZ2xlIGJhdGNoIG9mIE4gd3JpdGVzIG1h
eSBiZSBzaWduaWZpY2FudGx5IGZhc3RlciB0aGFuIE4gaW5kaXZpZHVhbCB3cml0ZXMuIFRoZSBm
b2xsb3dpbmcgYmVuY2htYXJrIHdyaXRlcyBvbmUgdGhvdXNhbmQgYmF0Y2hlcyB3aGVyZSBlYWNo
IGJhdGNoIGNvbnRhaW5zIG9uZSB0aG91c2FuZCAxMDAtYnl0ZSB2YWx1ZXMuIFRyZWVEQiBkb2Vz
IG5vdCBzdXBwb3J0IGJhdGNoIHdyaXRlcyBhbmQgaXMgb21pdHRlZCBmcm9tIHRoaXMgYmVuY2ht
YXJrLjwvcD4KKzxoND5TZXF1ZW50aWFsIFdyaXRlczwvaDQ+Cis8dGFibGUgY2xhc3M9ImJuIj4K
Kzx0cj48dGQgY2xhc3M9ImMxIj5MZXZlbERCPC90ZD4KKyAgICA8dGQgY2xhc3M9ImMyIj44NDAs
MDAwIGVudHJpZXMvc2VjPC90ZD4KKyAgICA8dGQgY2xhc3M9ImMzIj48ZGl2IGNsYXNzPSJibGRi
IiBzdHlsZT0id2lkdGg6MzUwcHgiPiZuYnNwOzwvZGl2PjwvdGQ+CisgICAgPHRkIGNsYXNzPSJj
NCI+KDEuMDh4IGJhc2VsaW5lKTwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9ImMxIj5TUUxpdGUz
PC90ZD4KKyAgICA8dGQgY2xhc3M9ImMyIj4xMjQsMDAwIGVudHJpZXMvc2VjPC90ZD4KKyAgICA8
dGQgY2xhc3M9ImMzIj48ZGl2IGNsYXNzPSJic3FsIiBzdHlsZT0id2lkdGg6NTJweCI+Jm5ic3A7
PC9kaXY+PC90ZD4KKyAgICA8dGQgY2xhc3M9ImM0Ij4oMi41NXggYmFzZWxpbmUpPC90ZD48L3Ry
PgorPC90YWJsZT4KKzxoND5SYW5kb20gV3JpdGVzPC9oND4KKzx0YWJsZSBjbGFzcz0iYm4iPgor
PHRyPjx0ZCBjbGFzcz0iYzEiPkxldmVsREI8L3RkPgorICAgIDx0ZCBjbGFzcz0iYzIiPjIyMSww
MDAgZW50cmllcy9zZWM8L3RkPgorICAgIDx0ZCBjbGFzcz0iYzMiPjxkaXYgY2xhc3M9ImJsZGIi
IHN0eWxlPSJ3aWR0aDozNTBweCI+Jm5ic3A7PC9kaXY+PC90ZD4KKyAgICA8dGQgY2xhc3M9ImM0
Ij4oMS4zNXggYmFzZWxpbmUpPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0iYzEiPlNRTGl0ZTM8
L3RkPgorICAgIDx0ZCBjbGFzcz0iYzIiPjIyLDAwMCBlbnRyaWVzL3NlYzwvdGQ+CisgICAgPHRk
IGNsYXNzPSJjMyI+PGRpdiBjbGFzcz0iYnNxbCIgc3R5bGU9IndpZHRoOjM0cHgiPiZuYnNwOzwv
ZGl2PjwvdGQ+CisgICAgPHRkIGNsYXNzPSJjNCI+KDIuMjN4IGJhc2VsaW5lKTwvdGQ+PC90cj4K
KzwvdGFibGU+CisKKzxwPkJlY2F1c2Ugb2YgdGhlIHdheSBMZXZlbERCIHBlcnNpc3RlbnQgc3Rv
cmFnZSBpcyBvcmdhbml6ZWQsIGJhdGNoZXMgb2YKK3JhbmRvbSB3cml0ZXMgYXJlIG5vdCBtdWNo
IHNsb3dlciAob25seSBhIGZhY3RvciBvZiA0eCkgdGhhbiBiYXRjaGVzCitvZiBzZXF1ZW50aWFs
IHdyaXRlcy48L3A+CisKKzxoMz5DLiBTeW5jaHJvbm91cyBXcml0ZXM8L2gzPgorPHA+SW4gdGhl
IGZvbGxvd2luZyBiZW5jaG1hcmssIHdlIGVuYWJsZSB0aGUgc3luY2hyb25vdXMgd3JpdGluZyBt
b2Rlcworb2YgYWxsIG9mIHRoZSBkYXRhYmFzZXMuICBTaW5jZSB0aGlzIGNoYW5nZSBzaWduaWZp
Y2FudGx5IHNsb3dzIGRvd24gdGhlCitiZW5jaG1hcmssIHdlIHN0b3AgYWZ0ZXIgMTAsMDAwIHdy
aXRlcy4gRm9yIHN5bmNocm9ub3VzIHdyaXRlIHRlc3RzLCB3ZSd2ZQorZGlzYWJsZWQgaGFyZCBk
cml2ZSB3cml0ZS1jYWNoaW5nICh1c2luZyBgaGRwYXJtIC1XIDAgW2RldmljZV1gKS48L3A+Cis8
dWw+CisgICAgPGxpPkZvciBMZXZlbERCLCB3ZSBzZXQgV3JpdGVPcHRpb25zLnN5bmMgPSB0cnVl
LjwvbGk+CisgICAgPGxpPkluIFRyZWVEQiwgd2UgZW5hYmxlZCBUcmVlREIncyBPQVVUT1NZTkMg
b3B0aW9uLjwvbGk+CisgICAgPGxpPkZvciBTUUxpdGUzLCB3ZSBzZXQgIlBSQUdNQSBzeW5jaHJv
bm91cyA9IEZVTEwiLjwvbGk+Cis8L3VsPgorPGg0PlNlcXVlbnRpYWwgV3JpdGVzPC9oND4KKzx0
YWJsZSBjbGFzcz0iYm4iPgorPHRyPjx0ZCBjbGFzcz0iYzEiPkxldmVsREI8L3RkPgorICAgIDx0
ZCBjbGFzcz0iYzIiPjEwMCBvcHMvc2VjPC90ZD4KKyAgICA8dGQgY2xhc3M9ImMzIj48ZGl2IGNs
YXNzPSJibGRiIiBzdHlsZT0id2lkdGg6MzUwcHgiPiZuYnNwOzwvZGl2PjwvdGQ+CisgICAgPHRk
IGNsYXNzPSJjNCI+KDAuMDAzeCBiYXNlbGluZSk8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJj
MSI+S3lvdG8gVHJlZURCPC90ZD4KKyAgICA8dGQgY2xhc3M9ImMyIj43IG9wcy9zZWM8L3RkPgor
ICAgIDx0ZCBjbGFzcz0iYzMiPjxkaXYgY2xhc3M9ImJrY3QiIHN0eWxlPSJ3aWR0aDoyN3B4Ij4m
bmJzcDs8L2Rpdj48L3RkPgorICAgIDx0ZCBjbGFzcz0iYzQiPigwLjAwMDR4IGJhc2VsaW5lKTwv
dGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9ImMxIj5TUUxpdGUzPC90ZD4KKyAgICA8dGQgY2xhc3M9
ImMyIj44OCBvcHMvc2VjPC90ZD4KKyAgICA8dGQgY2xhc3M9ImMzIj48ZGl2IGNsYXNzPSJic3Fs
IiBzdHlsZT0id2lkdGg6MzE1cHgiPiZuYnNwOzwvZGl2PjwvdGQ+CisgICAgPHRkIGNsYXNzPSJj
NCI+KDAuMDAyeCBiYXNlbGluZSk8L3RkPjwvdHI+Cis8L3RhYmxlPgorPGg0PlJhbmRvbSBXcml0
ZXM8L2g0PgorPHRhYmxlIGNsYXNzPSJibiI+Cis8dHI+PHRkIGNsYXNzPSJjMSI+TGV2ZWxEQjwv
dGQ+CisgICAgPHRkIGNsYXNzPSJjMiI+MTAwIG9wcy9zZWM8L3RkPgorICAgIDx0ZCBjbGFzcz0i
YzMiPjxkaXYgY2xhc3M9ImJsZGIiIHN0eWxlPSJ3aWR0aDozNTBweCI+Jm5ic3A7PC9kaXY+PC90
ZD4KKyAgICA8dGQgY2xhc3M9ImM0Ij4oMC4wMTV4IGJhc2VsaW5lKTwvdGQ+PC90cj4KKzx0cj48
dGQgY2xhc3M9ImMxIj5LeW90byBUcmVlREI8L3RkPgorICAgIDx0ZCBjbGFzcz0iYzIiPjggb3Bz
L3NlYzwvdGQ+CisgICAgPHRkIGNsYXNzPSJjMyI+PGRpdiBjbGFzcz0iYmtjdCIgc3R5bGU9Indp
ZHRoOjI5cHgiPiZuYnNwOzwvZGl2PjwvdGQ+CisgICAgPHRkIGNsYXNzPSJjNCI+KDAuMDAxeCBi
YXNlbGluZSk8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJjMSI+U1FMaXRlMzwvdGQ+CisgICAg
PHRkIGNsYXNzPSJjMiI+ODggb3BzL3NlYzwvdGQ+CisgICAgPHRkIGNsYXNzPSJjMyI+PGRpdiBj
bGFzcz0iYnNxbCIgc3R5bGU9IndpZHRoOjMxNHB4Ij4mbmJzcDs8L2Rpdj48L3RkPgorICAgIDx0
ZCBjbGFzcz0iYzQiPigwLjAwOXggYmFzZWxpbmUpPC90ZD48L3RyPgorPC90YWJsZT4KKworPHA+
QWxzbyBzZWUgdGhlIDxjb2RlPmV4dDQ8L2NvZGU+IHBlcmZvcm1hbmNlIG51bWJlcnMgYmVsb3cK
K3NpbmNlIHN5bmNocm9ub3VzIHdyaXRlcyBiZWhhdmUgc2lnbmlmaWNhbnRseSBkaWZmZXJlbnRs
eQorb24gPGNvZGU+ZXh0MzwvY29kZT4gYW5kIDxjb2RlPmV4dDQ8L2NvZGU+LjwvcD4KKworPGgz
PkQuIFR1cm5pbmcgQ29tcHJlc3Npb24gT2ZmPC9oMz4KKworPHA+SW4gdGhlIGJhc2VsaW5lIG1l
YXN1cmVtZW50cywgTGV2ZWxEQiBhbmQgVHJlZURCIHdlcmUgdXNpbmcKK2xpZ2h0LXdlaWdodCBj
b21wcmVzc2lvbgorKDxhIGhyZWY9Imh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9zbmFwcHkvIj5T
bmFwcHk8L2E+IGZvciBMZXZlbERCLAorYW5kIDxhIGhyZWY9Imh0dHA6Ly93d3cub2Jlcmh1bWVy
LmNvbS9vcGVuc291cmNlL2x6by8iPkxaTzwvYT4gZm9yCitUcmVlREIpLiBTUUxpdGUzLCBieSBk
ZWZhdWx0IGRvZXMgbm90IHVzZSBjb21wcmVzc2lvbi4gIFRoZQorZXhwZXJpbWVudHMgYmVsb3cg
c2hvdyB3aGF0IGhhcHBlbnMgd2hlbiBjb21wcmVzc2lvbiBpcyBkaXNhYmxlZCBpbgorYWxsIG9m
IHRoZSBkYXRhYmFzZXMgKHRoZSBTUUxpdGUzIG51bWJlcnMgYXJlIGp1c3QgYSBjb3B5IG9mCitp
dHMgYmFzZWxpbmUgbWVhc3VyZW1lbnRzKTo8L3A+CisKKzxoND5TZXF1ZW50aWFsIFdyaXRlczwv
aDQ+Cis8dGFibGUgY2xhc3M9ImJuIj4KKzx0cj48dGQgY2xhc3M9ImMxIj5MZXZlbERCPC90ZD4K
KyAgICA8dGQgY2xhc3M9ImMyIj41OTQsMDAwIG9wcy9zZWM8L3RkPgorICAgIDx0ZCBjbGFzcz0i
YzMiPjxkaXYgY2xhc3M9ImJsZGIiIHN0eWxlPSJ3aWR0aDozNTBweCI+Jm5ic3A7PC9kaXY+PC90
ZD4KKyAgICA8dGQgY2xhc3M9ImM0Ij4oMC43NnggYmFzZWxpbmUpPC90ZD48L3RyPgorPHRyPjx0
ZCBjbGFzcz0iYzEiPkt5b3RvIFRyZWVEQjwvdGQ+CisgICAgPHRkIGNsYXNzPSJjMiI+NDg1LDAw
MCBvcHMvc2VjPC90ZD4KKyAgICA8dGQgY2xhc3M9ImMzIj48ZGl2IGNsYXNzPSJia2N0IiBzdHls
ZT0id2lkdGg6MjM5cHgiPiZuYnNwOzwvZGl2PjwvdGQ+CisgICAgPHRkIGNsYXNzPSJjNCI+KDEu
NDJ4IGJhc2VsaW5lKTwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9ImMxIj5TUUxpdGUzPC90ZD4K
KyAgICA8dGQgY2xhc3M9ImMyIj40OCw2MDAgb3BzL3NlYzwvdGQ+CisgICAgPHRkIGNsYXNzPSJj
MyI+PGRpdiBjbGFzcz0iYnNxbCIgc3R5bGU9IndpZHRoOjI5cHgiPiZuYnNwOzwvZGl2PjwvdGQ+
CisgICAgPHRkIGNsYXNzPSJjNCI+KDEuMDB4IGJhc2VsaW5lKTwvdGQ+PC90cj4KKzwvdGFibGU+
Cis8aDQ+UmFuZG9tIFdyaXRlczwvaDQ+Cis8dGFibGUgY2xhc3M9ImJuIj4KKzx0cj48dGQgY2xh
c3M9ImMxIj5MZXZlbERCPC90ZD4KKyAgICA8dGQgY2xhc3M9ImMyIj4xMzUsMDAwIG9wcy9zZWM8
L3RkPgorICAgIDx0ZCBjbGFzcz0iYzMiPjxkaXYgY2xhc3M9ImJsZGIiIHN0eWxlPSJ3aWR0aDoy
OTZweCI+Jm5ic3A7PC9kaXY+PC90ZD4KKyAgICA8dGQgY2xhc3M9ImM0Ij4oMC44MnggYmFzZWxp
bmUpPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0iYzEiPkt5b3RvIFRyZWVEQjwvdGQ+CisgICAg
PHRkIGNsYXNzPSJjMiI+MTU5LDAwMCBvcHMvc2VjPC90ZD4KKyAgICA8dGQgY2xhc3M9ImMzIj48
ZGl2IGNsYXNzPSJia2N0IiBzdHlsZT0id2lkdGg6MzUwcHgiPiZuYnNwOzwvZGl2PjwvdGQ+Cisg
ICAgPHRkIGNsYXNzPSJjNCI+KDEuODB4IGJhc2VsaW5lKTwvdGQ+PC90cj4KKzx0cj48dGQgY2xh
c3M9ImMxIj5TUUxpdGUzPC90ZD4KKyAgICA8dGQgY2xhc3M9ImMyIj45LDg2MCBvcHMvc2VjPC90
ZD4KKyAgICA8dGQgY2xhc3M9ImMzIj48ZGl2IGNsYXNzPSJic3FsIiBzdHlsZT0id2lkdGg6MjJw
eCI+Jm5ic3A7PC9kaXY+PC90ZD4KKyAgICA8dGQgY2xhc3M9ImM0Ij4oMS4wMHggYmFzZWxpbmUp
PC90ZD48L3RyPgorPC90YWJsZT4KKworPHA+TGV2ZWxEQidzIHdyaXRlIHBlcmZvcm1hbmNlIGlz
IGJldHRlciB3aXRoIGNvbXByZXNzaW9uIHRoYW4gd2l0aG91dAorc2luY2UgY29tcHJlc3Npb24g
ZGVjcmVhc2VzIHRoZSBhbW91bnQgb2YgZGF0YSB0aGF0IGhhcyB0byBiZSB3cml0dGVuCit0byBk
aXNrLiAgVGhlcmVmb3JlIExldmVsREIgdXNlcnMgY2FuIGxlYXZlIGNvbXByZXNzaW9uIGVuYWJs
ZWQgaW4KK21vc3Qgc2NlbmFyaW9zIHdpdGhvdXQgaGF2aW5nIHdvcnJ5IGFib3V0IGEgdHJhZGVv
ZmYgYmV0d2VlbiBzcGFjZQordXNhZ2UgYW5kIHBlcmZvcm1hbmNlLiAgVHJlZURCJ3MgcGVyZm9y
bWFuY2Ugb24gdGhlIG90aGVyIGhhbmQgaXMKK2JldHRlciB3aXRob3V0IGNvbXByZXNzaW9uIHRo
YW4gd2l0aCBjb21wcmVzc2lvbi4gIFByZXN1bWFibHkgdGhpcyBpcworYmVjYXVzZSBUcmVlREIn
cyBjb21wcmVzc2lvbiBsaWJyYXJ5IChMWk8pIGlzIG1vcmUgZXhwZW5zaXZlIHRoYW4KK0xldmVs
REIncyBjb21wcmVzc2lvbiBsaWJyYXJ5IChTbmFwcHkpLjxwPgorCis8aDM+RS4gVXNpbmcgTW9y
ZSBNZW1vcnk8L2gzPgorPHA+V2UgaW5jcmVhc2VkIHRoZSBvdmVyYWxsIGNhY2hlIHNpemUgZm9y
IGVhY2ggZGF0YWJhc2UgdG8gMTI4IE1CLiBGb3IgTGV2ZWxEQiwgd2UgcGFydGl0aW9uZWQgMTI4
IE1CIGludG8gYSAxMjAgTUIgd3JpdGUgYnVmZmVyIGFuZCA4IE1CIG9mIGNhY2hlICh1cCBmcm9t
IDIgTUIgb2Ygd3JpdGUgYnVmZmVyIGFuZCAyIE1CIG9mIGNhY2hlKS4gRm9yIFNRTGl0ZTMsIHdl
IGtlcHQgdGhlIHBhZ2Ugc2l6ZSBhdCAxMDI0IGJ5dGVzLCBidXQgaW5jcmVhc2VkIHRoZSBudW1i
ZXIgb2YgcGFnZXMgdG8gMTMxLDA3MiAodXAgZnJvbSA0MDk2KS4gRm9yIFRyZWVEQiwgd2UgYWxz
byBrZXB0IHRoZSBwYWdlIHNpemUgYXQgMTAyNCBieXRlcywgYnV0IGluY3JlYXNlZCB0aGUgY2Fj
aGUgc2l6ZSB0byAxMjggTUIgKHVwIGZyb20gNCBNQikuPC9wPgorPGg0PlNlcXVlbnRpYWwgV3Jp
dGVzPC9oND4KKzx0YWJsZSBjbGFzcz0iYm4iPgorPHRyPjx0ZCBjbGFzcz0iYzEiPkxldmVsREI8
L3RkPgorICAgIDx0ZCBjbGFzcz0iYzIiPjgxMiwwMDAgb3BzL3NlYzwvdGQ+CisgICAgPHRkIGNs
YXNzPSJjMyI+PGRpdiBjbGFzcz0iYmxkYiIgc3R5bGU9IndpZHRoOjM1MHB4Ij4mbmJzcDs8L2Rp
dj48L3RkPgorICAgIDx0ZCBjbGFzcz0iYzQiPigxLjA0eCBiYXNlbGluZSk8L3RkPjwvdHI+Cis8
dHI+PHRkIGNsYXNzPSJjMSI+S3lvdG8gVHJlZURCPC90ZD4KKyAgICA8dGQgY2xhc3M9ImMyIj4z
MjEsMDAwIG9wcy9zZWM8L3RkPgorICAgIDx0ZCBjbGFzcz0iYzMiPjxkaXYgY2xhc3M9ImJrY3Qi
IHN0eWxlPSJ3aWR0aDoxMzhweCI+Jm5ic3A7PC9kaXY+PC90ZD4KKyAgICA8dGQgY2xhc3M9ImM0
Ij4oMC45NHggYmFzZWxpbmUpPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0iYzEiPlNRTGl0ZTM8
L3RkPgorICAgIDx0ZCBjbGFzcz0iYzIiPjQ4LDUwMCBvcHMvc2VjPC90ZD4KKyAgICA8dGQgY2xh
c3M9ImMzIj48ZGl2IGNsYXNzPSJic3FsIiBzdHlsZT0id2lkdGg6MjFweCI+Jm5ic3A7PC9kaXY+
PC90ZD4KKyAgICA8dGQgY2xhc3M9ImM0Ij4oMS4wMHggYmFzZWxpbmUpPC90ZD48L3RyPgorPC90
YWJsZT4KKzxoND5SYW5kb20gV3JpdGVzPC9oND4KKzx0YWJsZSBjbGFzcz0iYm4iPgorPHRyPjx0
ZCBjbGFzcz0iYzEiPkxldmVsREI8L3RkPgorICAgIDx0ZCBjbGFzcz0iYzIiPjM1NSwwMDAgb3Bz
L3NlYzwvdGQ+CisgICAgPHRkIGNsYXNzPSJjMyI+PGRpdiBjbGFzcz0iYmxkYiIgc3R5bGU9Indp
ZHRoOjM1MHB4Ij4mbmJzcDs8L2Rpdj48L3RkPgorICAgIDx0ZCBjbGFzcz0iYzQiPigyLjE2eCBi
YXNlbGluZSk8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJjMSI+S3lvdG8gVHJlZURCPC90ZD4K
KyAgICA8dGQgY2xhc3M9ImMyIj4yODQsMDAwIG9wcy9zZWM8L3RkPgorICAgIDx0ZCBjbGFzcz0i
YzMiPjxkaXYgY2xhc3M9ImJrY3QiIHN0eWxlPSJ3aWR0aDoyODBweCI+Jm5ic3A7PC9kaXY+PC90
ZD4KKyAgICA8dGQgY2xhc3M9ImM0Ij4oMy4yMXggYmFzZWxpbmUpPC90ZD48L3RyPgorPHRyPjx0
ZCBjbGFzcz0iYzEiPlNRTGl0ZTM8L3RkPgorICAgIDx0ZCBjbGFzcz0iYzIiPjksNjcwIG9wcy9z
ZWM8L3RkPgorICAgIDx0ZCBjbGFzcz0iYzMiPjxkaXYgY2xhc3M9ImJzcWwiIHN0eWxlPSJ3aWR0
aDoxMHB4Ij4mbmJzcDs8L2Rpdj48L3RkPgorICAgIDx0ZCBjbGFzcz0iYzQiPigwLjk4eCBiYXNl
bGluZSk8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8cD5TUUxpdGUncyBwZXJmb3JtYW5jZSBkb2Vz
IG5vdCBjaGFuZ2Ugc3Vic3RhbnRpYWxseSB3aGVuIGNvbXBhcmVkIHRvCit0aGUgYmFzZWxpbmUs
IGJ1dCB0aGUgcmFuZG9tIHdyaXRlIHBlcmZvcm1hbmNlIGZvciBib3RoIExldmVsREIgYW5kCitU
cmVlREIgaW5jcmVhc2VzIHNpZ25pZmljYW50bHkuICBMZXZlbERCJ3MgcGVyZm9ybWFuY2UgaW1w
cm92ZXMKK2JlY2F1c2UgYSBsYXJnZXIgd3JpdGUgYnVmZmVyIHJlZHVjZXMgdGhlIG5lZWQgdG8g
bWVyZ2Ugc29ydGVkIGZpbGVzCisoc2luY2UgaXQgY3JlYXRlcyBhIHNtYWxsZXIgbnVtYmVyIG9m
IGxhcmdlciBzb3J0ZWQgZmlsZXMpLiAgVHJlZURCJ3MKK3BlcmZvcm1hbmNlIGdvZXMgdXAgYmVj
YXVzZSB0aGUgZW50aXJlIGRhdGFiYXNlIGlzIGF2YWlsYWJsZSBpbiBtZW1vcnkKK2ZvciBmYXN0
IGluLXBsYWNlIHVwZGF0ZXMuPC9wPgorCisgIDxoMj4zLiBSZWFkIFBlcmZvcm1hbmNlIHVuZGVy
IERpZmZlcmVudCBDb25maWd1cmF0aW9uczwvaDI+Cis8aDM+QS4gTGFyZ2VyIENhY2hlczwvaDM+
Cis8cD5XZSBpbmNyZWFzZWQgdGhlIG92ZXJhbGwgbWVtb3J5IHVzYWdlIHRvIDEyOCBNQiBmb3Ig
ZWFjaCBkYXRhYmFzZS4KK0ZvciBMZXZlbERCLCB3ZSBhbGxvY2F0ZWQgOCBNQiB0byBMZXZlbERC
J3Mgd3JpdGUgYnVmZmVyIGFuZCAxMjAgTUIKK3RvIExldmVsREIncyBjYWNoZS4gVGhlIG90aGVy
IGRhdGFiYXNlcyBkb24ndCBkaWZmZXJlbnRpYXRlIGJldHdlZW4gYQord3JpdGUgYnVmZmVyIGFu
ZCBhIGNhY2hlLCBzbyB3ZSBzaW1wbHkgc2V0IHRoZWlyIGNhY2hlIHNpemUgdG8gMTI4CitNQi48
L3A+Cis8aDQ+U2VxdWVudGlhbCBSZWFkczwvaDQ+Cis8dGFibGUgY2xhc3M9ImJuIj4KKzx0cj48
dGQgY2xhc3M9ImMxIj5MZXZlbERCPC90ZD4KKyAgICA8dGQgY2xhc3M9ImMyIj41LDIxMCwwMDAg
b3BzL3NlYzwvdGQ+CisgICAgPHRkIGNsYXNzPSJjMyI+PGRpdiBjbGFzcz0iYmxkYiIgc3R5bGU9
IndpZHRoOjM1MHB4Ij4mbmJzcDs8L2Rpdj48L3RkPgorICAgIDx0ZCBjbGFzcz0iYzQiPigxLjI5
eCBiYXNlbGluZSk8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJjMSI+S3lvdG8gVHJlZURCPC90
ZD4KKyAgICA8dGQgY2xhc3M9ImMyIj4xLDA3MCwwMDAgb3BzL3NlYzwvdGQ+CisgICAgPHRkIGNs
YXNzPSJjMyI+PGRpdiBjbGFzcz0iYmtjdCIgc3R5bGU9IndpZHRoOjcycHgiPiZuYnNwOzwvZGl2
PjwvdGQ+CisgICAgPHRkIGNsYXNzPSJjNCI+KDEuMDZ4IGJhc2VsaW5lKTwvdGQ+PC90cj4KKzx0
cj48dGQgY2xhc3M9ImMxIj5TUUxpdGUzPC90ZD4KKyAgICA8dGQgY2xhc3M9ImMyIj42MDksMDAw
IG9wcy9zZWM8L3RkPgorICAgIDx0ZCBjbGFzcz0iYzMiPjxkaXYgY2xhc3M9ImJzcWwiIHN0eWxl
PSJ3aWR0aDo0MXB4Ij4mbmJzcDs8L2Rpdj48L3RkPgorICAgIDx0ZCBjbGFzcz0iYzQiPigxLjU5
eCBiYXNlbGluZSk8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8aDQ+UmFuZG9tIFJlYWRzPC9oND4K
Kzx0YWJsZSBjbGFzcz0iYm4iPgorPHRyPjx0ZCBjbGFzcz0iYzEiPkxldmVsREI8L3RkPgorICAg
IDx0ZCBjbGFzcz0iYzIiPjE5MCwwMDAgb3BzL3NlYzwvdGQ+CisgICAgPHRkIGNsYXNzPSJjMyI+
PGRpdiBjbGFzcz0iYmxkYiIgc3R5bGU9IndpZHRoOjE0NHB4Ij4mbmJzcDs8L2Rpdj48L3RkPgor
ICAgIDx0ZCBjbGFzcz0iYzQiPigxLjQ3eCBiYXNlbGluZSk8L3RkPjwvdHI+Cis8dHI+PHRkIGNs
YXNzPSJjMSI+S3lvdG8gVHJlZURCPC90ZD4KKyAgICA8dGQgY2xhc3M9ImMyIj40NjMsMDAwIG9w
cy9zZWM8L3RkPgorICAgIDx0ZCBjbGFzcz0iYzMiPjxkaXYgY2xhc3M9ImJrY3QiIHN0eWxlPSJ3
aWR0aDozNTBweCI+Jm5ic3A7PC9kaXY+PC90ZD4KKyAgICA8dGQgY2xhc3M9ImM0Ij4oMy4wN3gg
YmFzZWxpbmUpPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0iYzEiPlNRTGl0ZTM8L3RkPgorICAg
IDx0ZCBjbGFzcz0iYzIiPjE4NiwwMDAgb3BzL3NlYzwvdGQ+CisgICAgPHRkIGNsYXNzPSJjMyI+
PGRpdiBjbGFzcz0iYnNxbCIgc3R5bGU9IndpZHRoOjE0MXB4Ij4mbmJzcDs8L2Rpdj48L3RkPgor
ICAgIDx0ZCBjbGFzcz0iYzQiPigxLjM5eCBiYXNlbGluZSk8L3RkPjwvdHI+Cis8L3RhYmxlPgor
Cis8cD5BcyBleHBlY3RlZCwgdGhlIHJlYWQgcGVyZm9ybWFuY2Ugb2YgYWxsIG9mIHRoZSBkYXRh
YmFzZXMgaW5jcmVhc2VzCit3aGVuIHRoZSBjYWNoZXMgYXJlIGVubGFyZ2VkLiAgSW4gcGFydGlj
dWxhciwgVHJlZURCIHNlZW1zIHRvIG1ha2UKK3ZlcnkgZWZmZWN0aXZlIHVzZSBvZiBhIGNhY2hl
IHRoYXQgaXMgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgdGhlIGVudGlyZQorZGF0YWJhc2UuPC9wPgor
Cis8aDM+Qi4gTm8gQ29tcHJlc3Npb24gUmVhZHMgPC9oMz4KKzxwPkZvciB0aGlzIGJlbmNobWFy
aywgd2UgcG9wdWxhdGVkIGEgZGF0YWJhc2Ugd2l0aCAxIG1pbGxpb24gZW50cmllcyBjb25zaXN0
aW5nIG9mIDE2IGJ5dGUga2V5cyBhbmQgMTAwIGJ5dGUgdmFsdWVzLiBXZSBjb21waWxlZCBMZXZl
bERCIGFuZCBLeW90byBDYWJpbmV0IHdpdGhvdXQgY29tcHJlc3Npb24gc3VwcG9ydCwgc28gcmVz
dWx0cyB0aGF0IGFyZSByZWFkIG91dCBmcm9tIHRoZSBkYXRhYmFzZSBhcmUgYWxyZWFkeSB1bmNv
bXByZXNzZWQuIFdlJ3ZlIGxpc3RlZCB0aGUgU1FMaXRlMyBiYXNlbGluZSByZWFkIHBlcmZvcm1h
bmNlIGFzIGEgcG9pbnQgb2YgY29tcGFyaXNvbi48L3A+Cis8aDQ+U2VxdWVudGlhbCBSZWFkczwv
aDQ+Cis8dGFibGUgY2xhc3M9ImJuIj4KKzx0cj48dGQgY2xhc3M9ImMxIj5MZXZlbERCPC90ZD4K
KyAgICA8dGQgY2xhc3M9ImMyIj40LDg4MCwwMDAgb3BzL3NlYzwvdGQ+CisgICAgPHRkIGNsYXNz
PSJjMyI+PGRpdiBjbGFzcz0iYmxkYiIgc3R5bGU9IndpZHRoOjM1MHB4Ij4mbmJzcDs8L2Rpdj48
L3RkPgorICAgIDx0ZCBjbGFzcz0iYzQiPigxLjIxeCBiYXNlbGluZSk8L3RkPjwvdHI+Cis8dHI+
PHRkIGNsYXNzPSJjMSI+S3lvdG8gVHJlZURCPC90ZD4KKyAgICA8dGQgY2xhc3M9ImMyIj4xLDIz
MCwwMDAgb3BzL3NlYzwvdGQ+CisgICAgPHRkIGNsYXNzPSJjMyI+PGRpdiBjbGFzcz0iYmtjdCIg
c3R5bGU9IndpZHRoOjg4cHgiPiZuYnNwOzwvZGl2PjwvdGQ+CisgICAgPHRkIGNsYXNzPSJjNCI+
KDMuNjB4IGJhc2VsaW5lKTwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9ImMxIj5TUUxpdGUzPC90
ZD4KKyAgICA8dGQgY2xhc3M9ImMyIj4zODMsMDAwIG9wcy9zZWM8L3RkPgorICAgIDx0ZCBjbGFz
cz0iYzMiPjxkaXYgY2xhc3M9ImJzcWwiIHN0eWxlPSJ3aWR0aDoyN3B4Ij4mbmJzcDs8L2Rpdj48
L3RkPgorICAgIDx0ZCBjbGFzcz0iYzQiPigxLjAweCBiYXNlbGluZSk8L3RkPjwvdHI+Cis8L3Rh
YmxlPgorPGg0PlJhbmRvbSBSZWFkczwvaDQ+Cis8dGFibGUgY2xhc3M9ImJuIj4KKzx0cj48dGQg
Y2xhc3M9ImMxIj5MZXZlbERCPC90ZD4KKyAgICA8dGQgY2xhc3M9ImMyIj4xNDksMDAwIG9wcy9z
ZWM8L3RkPgorICAgIDx0ZCBjbGFzcz0iYzMiPjxkaXYgY2xhc3M9ImJsZGIiIHN0eWxlPSJ3aWR0
aDozMDBweCI+Jm5ic3A7PC9kaXY+PC90ZD4KKyAgICA8dGQgY2xhc3M9ImM0Ij4oMS4xNnggYmFz
ZWxpbmUpPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0iYzEiPkt5b3RvIFRyZWVEQjwvdGQ+Cisg
ICAgPHRkIGNsYXNzPSJjMiI+MTc1LDAwMCBvcHMvc2VjPC90ZD4KKyAgICA8dGQgY2xhc3M9ImMz
Ij48ZGl2IGNsYXNzPSJia2N0IiBzdHlsZT0id2lkdGg6MzUwcHgiPiZuYnNwOzwvZGl2PjwvdGQ+
CisgICAgPHRkIGNsYXNzPSJjNCI+KDEuMTZ4IGJhc2VsaW5lKTwvdGQ+PC90cj4KKzx0cj48dGQg
Y2xhc3M9ImMxIj5TUUxpdGUzPC90ZD4KKyAgICA8dGQgY2xhc3M9ImMyIj4xMzQsMDAwIG9wcy9z
ZWM8L3RkPgorICAgIDx0ZCBjbGFzcz0iYzMiPjxkaXYgY2xhc3M9ImJzcWwiIHN0eWxlPSJ3aWR0
aDoyNjhweCI+Jm5ic3A7PC9kaXY+PC90ZD4KKyAgICA8dGQgY2xhc3M9ImM0Ij4oMS4wMHggYmFz
ZWxpbmUpPC90ZD48L3RyPgorPC90YWJsZT4KKworPHA+UGVyZm9ybWFuY2Ugb2YgYm90aCBMZXZl
bERCIGFuZCBUcmVlREIgaW1wcm92ZXMgYSBzbWFsbCBhbW91bnQgd2hlbgorY29tcHJlc3Npb24g
aXMgZGlzYWJsZWQuICBOb3RlIGhvd2V2ZXIgdGhhdCB1bmRlciBkaWZmZXJlbnQgd29ya2xvYWRz
LAorcGVyZm9ybWFuY2UgbWF5IHZlcnkgd2VsbCBiZSBiZXR0ZXIgd2l0aCBjb21wcmVzc2lvbiBp
ZiBpdCBhbGxvd3MgbW9yZQorb2YgdGhlIHdvcmtpbmcgc2V0IHRvIGZpdCBpbiBtZW1vcnkuPC9w
PgorCis8aDI+Tm90ZSBhYm91dCBFeHQ0IEZpbGVzeXN0ZW1zPC9oMj4KKzxwPlRoZSBwcmVjZWRp
bmcgbnVtYmVycyBhcmUgZm9yIGFuIGV4dDMgZmlsZSBzeXN0ZW0uIFN5bmNocm9ub3VzIHdyaXRl
cyBhcmUgbXVjaCBzbG93ZXIgdW5kZXIgPGEgaHJlZj0iaHR0cDovL2VuLndpa2lwZWRpYS5vcmcv
d2lraS9FeHQ0Ij5leHQ0PC9hPiAoTGV2ZWxEQiBkcm9wcyB0byB+MzEgd3JpdGVzIC8gc2Vjb25k
IGFuZCBUcmVlREIgZHJvcHMgdG8gfjUgd3JpdGVzIC8gc2Vjb25kOyBTUUxpdGUzJ3Mgc3luY2hy
b25vdXMgd3JpdGVzIGRvIG5vdCBub3RpY2VhYmx5IGRyb3ApIGR1ZSB0byBleHQ0J3MgZGlmZmVy
ZW50IGhhbmRsaW5nIG9mIDxzcGFuIGNsYXNzPSJjb2RlIj5mc3luYzwvc3Bhbj4gLyA8c3BhbiBj
bGFzcz0iY29kZSI+bXN5bmM8L3NwYW4+IGNhbGxzLiBFdmVuIExldmVsREIncyBhc3luY2hyb25v
dXMgd3JpdGUgcGVyZm9ybWFuY2UgZHJvcHMgc29tZXdoYXQgc2luY2UgaXQgc3ByZWFkcyBpdHMg
c3RvcmFnZSBhY3Jvc3MgbXVsdGlwbGUgZmlsZXMgYW5kIGlzc3VlcyA8c3BhbiBjbGFzcz0iY29k
ZSI+ZnN5bmM8L3NwYW4+IGNhbGxzIHdoZW4gc3dpdGNoaW5nIHRvIGEgbmV3IGZpbGUuPC9wPgor
Cis8aDI+QWNrbm93bGVkZ2VtZW50czwvaDI+Cis8cD5KZWZmIERlYW4gYW5kIFNhbmpheSBHaGVt
YXdhdCB3cm90ZSBMZXZlbERCLiBLZXZpbiBUc2VuZyB3cm90ZSBhbmQgY29tcGlsZWQgdGhlc2Ug
YmVuY2htYXJrcy4gTWlraW8gSGlyYWJheWFzaGksIFNjb3R0IEhlc3MsIGFuZCBHYWJvciBDc2Vs
bGUgcHJvdmlkZWQgaGVscCBhbmQgYWR2aWNlLjwvcD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZG9jL2RvYy5jc3MgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9sZXZlbGRiL2RvYy9kb2MuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcwMGM1NjRlNDMzODI3YzMx
MWNkOGEyNjg5NmNlYWE3YzgyNjA4MTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9sZXZlbGRiL2RvYy9kb2MuY3NzCkBAIC0wLDAgKzEsODkgQEAKK2JvZHkgeworICBtYXJn
aW4tbGVmdDogMC41aW47CisgIG1hcmdpbi1yaWdodDogMC41aW47CisgIGJhY2tncm91bmQ6IHdo
aXRlOworICBjb2xvcjogYmxhY2s7Cit9CisKK2gxIHsKKyAgbWFyZ2luLWxlZnQ6IC0wLjJpbjsK
KyAgZm9udC1zaXplOiAxNHB0OworfQoraDIgeworICBtYXJnaW4tbGVmdDogLTBpbjsKKyAgZm9u
dC1zaXplOiAxMnB0OworfQoraDMgeworICBtYXJnaW4tbGVmdDogLTBpbjsKK30KK2g0IHsKKyAg
bWFyZ2luLWxlZnQ6IC0waW47Cit9CitociB7CisgIG1hcmdpbi1sZWZ0OiAtMGluOworfQorCisv
KiBEZWZpbml0aW9uIGxpc3RzOiBkZWZpbml0aW9uIHRlcm0gYm9sZCAqLworZHQgeworICBmb250
LXdlaWdodDogYm9sZDsKK30KKworYWRkcmVzcyB7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKK30K
K2NvZGUsc2FtcCx2YXIgeworICBjb2xvcjogYmx1ZTsKK30KK2tiZCB7CisgIGNvbG9yOiAjNjAw
MDAwOworfQorZGl2Lm5vdGUgcCB7CisgIGZsb2F0OiByaWdodDsKKyAgd2lkdGg6IDNpbjsKKyAg
bWFyZ2luLXJpZ2h0OiAwJTsKKyAgcGFkZGluZzogMXB4OworICBib3JkZXI6IDJweCBzb2xpZCAj
NjA2MGEwOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmYwOworfQorCit1bCB7CisgIG1hcmdp
bi10b3A6IC0wZW07CisgIG1hcmdpbi1ib3R0b206IC0wZW07Cit9CisKK29sIHsKKyAgbWFyZ2lu
LXRvcDogLTBlbTsKKyAgbWFyZ2luLWJvdHRvbTogLTBlbTsKK30KKworVUwubm9idWxsZXRzIHsK
KyAgbGlzdC1zdHlsZS10eXBlOiBub25lOworICBsaXN0LXN0eWxlLWltYWdlOiBub25lOworICBt
YXJnaW4tbGVmdDogLTFlbTsKK30KKworcCB7CisgIG1hcmdpbjogMWVtIDAgMWVtIDA7CisgIHBh
ZGRpbmc6IDAgMCAwIDA7Cit9CisKK3ByZSB7CisgIGxpbmUtaGVpZ2h0OiAxLjNlbTsKKyAgcGFk
ZGluZzogMC40ZW0gMCAwLjhlbSAwOworICBtYXJnaW46ICAwIDAgMCAwOworICBib3JkZXI6ICAw
IDAgMCAwOworICBjb2xvcjogYmx1ZTsKK30KKworLmRhdGF0YWJsZSB7CisgIG1hcmdpbi1sZWZ0
OiBhdXRvOworICBtYXJnaW4tcmlnaHQ6IGF1dG87CisgIG1hcmdpbi10b3A6IDJlbTsKKyAgbWFy
Z2luLWJvdHRvbTogMmVtOworICBib3JkZXI6IDFweCBzb2xpZDsKK30KKworLmRhdGF0YWJsZSB0
ZCx0aCB7CisgIHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RvYy9pbXBsLmh0bWwg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RvYy9pbXBsLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTg3
MDc5NWQyMzE0NjNiMTY3ZDViNzllZmRjMTZiODAxMDdkZTkzZQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZG9jL2ltcGwuaHRtbApAQCAtMCwwICsxLDIxMyBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0
IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iZG9jLmNzcyIgLz4KKzx0aXRsZT5MZXZlbGRiIGZpbGUg
bGF5b3V0IGFuZCBjb21wYWN0aW9uczwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5PgorCis8aDE+
RmlsZXM8L2gxPgorCitUaGUgaW1wbGVtZW50YXRpb24gb2YgbGV2ZWxkYiBpcyBzaW1pbGFyIGlu
IHNwaXJpdCB0byB0aGUKK3JlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlCis8YSBocmVmPSJodHRw
Oi8vbGFicy5nb29nbGUuY29tL3BhcGVycy9iaWd0YWJsZS5odG1sIj4KK0JpZ3RhYmxlIHRhYmxl
dCAoc2VjdGlvbiA1LjMpPC9hPi4KK0hvd2V2ZXIgdGhlIG9yZ2FuaXphdGlvbiBvZiB0aGUgZmls
ZXMgdGhhdCBtYWtlIHVwIHRoZSByZXByZXNlbnRhdGlvbgoraXMgc29tZXdoYXQgZGlmZmVyZW50
IGFuZCBpcyBleHBsYWluZWQgYmVsb3cuCisKKzxwPgorRWFjaCBkYXRhYmFzZSBpcyByZXByZXNl
bnRlZCBieSBhIHNldCBvZiBmaWxlcyBzdG9yZWQgaW4gYSBkaXJlY3RvcnkuCitUaGVyZSBhcmUg
c2V2ZXJhbCBkaWZmZXJlbnQgdHlwZXMgb2YgZmlsZXMgYXMgZG9jdW1lbnRlZCBiZWxvdzoKKzxw
PgorPGgyPkxvZyBmaWxlczwvaDI+Cis8cD4KK0EgbG9nIGZpbGUgKCoubG9nKSBzdG9yZXMgYSBz
ZXF1ZW5jZSBvZiByZWNlbnQgdXBkYXRlcy4gIEVhY2ggdXBkYXRlCitpcyBhcHBlbmRlZCB0byB0
aGUgY3VycmVudCBsb2cgZmlsZS4gIFdoZW4gdGhlIGxvZyBmaWxlIHJlYWNoZXMgYQorcHJlLWRl
dGVybWluZWQgc2l6ZSAoYXBwcm94aW1hdGVseSA0TUIgYnkgZGVmYXVsdCksIGl0IGlzIGNvbnZl
cnRlZAordG8gYSBzb3J0ZWQgdGFibGUgKHNlZSBiZWxvdykgYW5kIGEgbmV3IGxvZyBmaWxlIGlz
IGNyZWF0ZWQgZm9yIGZ1dHVyZQordXBkYXRlcy4KKzxwPgorQSBjb3B5IG9mIHRoZSBjdXJyZW50
IGxvZyBmaWxlIGlzIGtlcHQgaW4gYW4gaW4tbWVtb3J5IHN0cnVjdHVyZSAodGhlCis8Y29kZT5t
ZW10YWJsZTwvY29kZT4pLiAgVGhpcyBjb3B5IGlzIGNvbnN1bHRlZCBvbiBldmVyeSByZWFkIHNv
IHRoYXQgcmVhZAorb3BlcmF0aW9ucyByZWZsZWN0IGFsbCBsb2dnZWQgdXBkYXRlcy4KKzxwPgor
PGgyPlNvcnRlZCB0YWJsZXM8L2gyPgorPHA+CitBIHNvcnRlZCB0YWJsZSAoKi5zc3QpIHN0b3Jl
cyBhIHNlcXVlbmNlIG9mIGVudHJpZXMgc29ydGVkIGJ5IGtleS4KK0VhY2ggZW50cnkgaXMgZWl0
aGVyIGEgdmFsdWUgZm9yIHRoZSBrZXksIG9yIGEgZGVsZXRpb24gbWFya2VyIGZvciB0aGUKK2tl
eS4gIChEZWxldGlvbiBtYXJrZXJzIGFyZSBrZXB0IGFyb3VuZCB0byBoaWRlIG9ic29sZXRlIHZh
bHVlcworcHJlc2VudCBpbiBvbGRlciBzb3J0ZWQgdGFibGVzKS4KKzxwPgorVGhlIHNldCBvZiBz
b3J0ZWQgdGFibGVzIGFyZSBvcmdhbml6ZWQgaW50byBhIHNlcXVlbmNlIG9mIGxldmVscy4gIFRo
ZQorc29ydGVkIHRhYmxlIGdlbmVyYXRlZCBmcm9tIGEgbG9nIGZpbGUgaXMgcGxhY2VkIGluIGEg
c3BlY2lhbCA8Y29kZT55b3VuZzwvY29kZT4KK2xldmVsIChhbHNvIGNhbGxlZCBsZXZlbC0wKS4g
IFdoZW4gdGhlIG51bWJlciBvZiB5b3VuZyBmaWxlcyBleGNlZWRzIGEKK2NlcnRhaW4gdGhyZXNo
b2xkIChjdXJyZW50bHkgZm91ciksIGFsbCBvZiB0aGUgeW91bmcgZmlsZXMgYXJlIG1lcmdlZAor
dG9nZXRoZXIgd2l0aCBhbGwgb2YgdGhlIG92ZXJsYXBwaW5nIGxldmVsLTEgZmlsZXMgdG8gcHJv
ZHVjZSBhCitzZXF1ZW5jZSBvZiBuZXcgbGV2ZWwtMSBmaWxlcyAod2UgY3JlYXRlIGEgbmV3IGxl
dmVsLTEgZmlsZSBmb3IgZXZlcnkKKzJNQiBvZiBkYXRhLikKKzxwPgorRmlsZXMgaW4gdGhlIHlv
dW5nIGxldmVsIG1heSBjb250YWluIG92ZXJsYXBwaW5nIGtleXMuICBIb3dldmVyIGZpbGVzCitp
biBvdGhlciBsZXZlbHMgaGF2ZSBkaXN0aW5jdCBub24tb3ZlcmxhcHBpbmcga2V5IHJhbmdlcy4g
IENvbnNpZGVyCitsZXZlbCBudW1iZXIgTCB3aGVyZSBMID49IDEuICBXaGVuIHRoZSBjb21iaW5l
ZCBzaXplIG9mIGZpbGVzIGluCitsZXZlbC1MIGV4Y2VlZHMgKDEwXkwpIE1CIChpLmUuLCAxME1C
IGZvciBsZXZlbC0xLCAxMDBNQiBmb3IgbGV2ZWwtMiwKKy4uLiksIG9uZSBmaWxlIGluIGxldmVs
LUwsIGFuZCBhbGwgb2YgdGhlIG92ZXJsYXBwaW5nIGZpbGVzIGluCitsZXZlbC0oTCsxKSBhcmUg
bWVyZ2VkIHRvIGZvcm0gYSBzZXQgb2YgbmV3IGZpbGVzIGZvciBsZXZlbC0oTCsxKS4KK1RoZXNl
IG1lcmdlcyBoYXZlIHRoZSBlZmZlY3Qgb2YgZ3JhZHVhbGx5IG1pZ3JhdGluZyBuZXcgdXBkYXRl
cyBmcm9tCit0aGUgeW91bmcgbGV2ZWwgdG8gdGhlIGxhcmdlc3QgbGV2ZWwgdXNpbmcgb25seSBi
dWxrIHJlYWRzIGFuZCB3cml0ZXMKKyhpLmUuLCBtaW5pbWl6aW5nIGV4cGVuc2l2ZSBzZWVrcyku
CisKKzxoMj5NYW5pZmVzdDwvaDI+Cis8cD4KK0EgTUFOSUZFU1QgZmlsZSBsaXN0cyB0aGUgc2V0
IG9mIHNvcnRlZCB0YWJsZXMgdGhhdCBtYWtlIHVwIGVhY2gKK2xldmVsLCB0aGUgY29ycmVzcG9u
ZGluZyBrZXkgcmFuZ2VzLCBhbmQgb3RoZXIgaW1wb3J0YW50IG1ldGFkYXRhLgorQSBuZXcgTUFO
SUZFU1QgZmlsZSAod2l0aCBhIG5ldyBudW1iZXIgZW1iZWRkZWQgaW4gdGhlIGZpbGUgbmFtZSkK
K2lzIGNyZWF0ZWQgd2hlbmV2ZXIgdGhlIGRhdGFiYXNlIGlzIHJlb3BlbmVkLiAgVGhlIE1BTklG
RVNUIGZpbGUgaXMKK2Zvcm1hdHRlZCBhcyBhIGxvZywgYW5kIGNoYW5nZXMgbWFkZSB0byB0aGUg
c2VydmluZyBzdGF0ZSAoYXMgZmlsZXMKK2FyZSBhZGRlZCBvciByZW1vdmVkKSBhcmUgYXBwZW5k
ZWQgdG8gdGhpcyBsb2cuCis8cD4KKzxoMj5DdXJyZW50PC9oMj4KKzxwPgorQ1VSUkVOVCBpcyBh
IHNpbXBsZSB0ZXh0IGZpbGUgdGhhdCBjb250YWlucyB0aGUgbmFtZSBvZiB0aGUgbGF0ZXN0CitN
QU5JRkVTVCBmaWxlLgorPHA+Cis8aDI+SW5mbyBsb2dzPC9oMj4KKzxwPgorSW5mb3JtYXRpb25h
bCBtZXNzYWdlcyBhcmUgcHJpbnRlZCB0byBmaWxlcyBuYW1lZCBMT0cgYW5kIExPRy5vbGQuCis8
cD4KKzxoMj5PdGhlcnM8L2gyPgorPHA+CitPdGhlciBmaWxlcyB1c2VkIGZvciBtaXNjZWxsYW5l
b3VzIHB1cnBvc2VzIG1heSBhbHNvIGJlIHByZXNlbnQKKyhMT0NLLCAqLmRidG1wKS4KKworPGgx
PkxldmVsIDA8L2gxPgorV2hlbiB0aGUgbG9nIGZpbGUgZ3Jvd3MgYWJvdmUgYSBjZXJ0YWluIHNp
emUgKDFNQiBieSBkZWZhdWx0KToKKzx1bD4KKzxsaT5DcmVhdGUgYSBicmFuZCBuZXcgbWVtdGFi
bGUgYW5kIGxvZyBmaWxlIGFuZCBkaXJlY3QgZnV0dXJlIHVwZGF0ZXMgaGVyZQorPGxpPkluIHRo
ZSBiYWNrZ3JvdW5kOgorPHVsPgorPGxpPldyaXRlIHRoZSBjb250ZW50cyBvZiB0aGUgcHJldmlv
dXMgbWVtdGFibGUgdG8gYW4gc3N0YWJsZQorPGxpPkRpc2NhcmQgdGhlIG1lbXRhYmxlCis8bGk+
RGVsZXRlIHRoZSBvbGQgbG9nIGZpbGUgYW5kIHRoZSBvbGQgbWVtdGFibGUKKzxsaT5BZGQgdGhl
IG5ldyBzc3RhYmxlIHRvIHRoZSB5b3VuZyAobGV2ZWwtMCkgbGV2ZWwuCis8L3VsPgorPC91bD4K
KworPGgxPkNvbXBhY3Rpb25zPC9oMT4KKworPHA+CitXaGVuIHRoZSBzaXplIG9mIGxldmVsIEwg
ZXhjZWVkcyBpdHMgbGltaXQsIHdlIGNvbXBhY3QgaXQgaW4gYQorYmFja2dyb3VuZCB0aHJlYWQu
ICBUaGUgY29tcGFjdGlvbiBwaWNrcyBhIGZpbGUgZnJvbSBsZXZlbCBMIGFuZCBhbGwKK292ZXJs
YXBwaW5nIGZpbGVzIGZyb20gdGhlIG5leHQgbGV2ZWwgTCsxLiAgTm90ZSB0aGF0IGlmIGEgbGV2
ZWwtTAorZmlsZSBvdmVybGFwcyBvbmx5IHBhcnQgb2YgYSBsZXZlbC0oTCsxKSBmaWxlLCB0aGUg
ZW50aXJlIGZpbGUgYXQKK2xldmVsLShMKzEpIGlzIHVzZWQgYXMgYW4gaW5wdXQgdG8gdGhlIGNv
bXBhY3Rpb24gYW5kIHdpbGwgYmUKK2Rpc2NhcmRlZCBhZnRlciB0aGUgY29tcGFjdGlvbi4gIEFz
aWRlOiBiZWNhdXNlIGxldmVsLTAgaXMgc3BlY2lhbAorKGZpbGVzIGluIGl0IG1heSBvdmVybGFw
IGVhY2ggb3RoZXIpLCB3ZSB0cmVhdCBjb21wYWN0aW9ucyBmcm9tCitsZXZlbC0wIHRvIGxldmVs
LTEgc3BlY2lhbGx5OiBhIGxldmVsLTAgY29tcGFjdGlvbiBtYXkgcGljayBtb3JlIHRoYW4KK29u
ZSBsZXZlbC0wIGZpbGUgaW4gY2FzZSBzb21lIG9mIHRoZXNlIGZpbGVzIG92ZXJsYXAgZWFjaCBv
dGhlci4KKworPHA+CitBIGNvbXBhY3Rpb24gbWVyZ2VzIHRoZSBjb250ZW50cyBvZiB0aGUgcGlj
a2VkIGZpbGVzIHRvIHByb2R1Y2UgYQorc2VxdWVuY2Ugb2YgbGV2ZWwtKEwrMSkgZmlsZXMuICBX
ZSBzd2l0Y2ggdG8gcHJvZHVjaW5nIGEgbmV3CitsZXZlbC0oTCsxKSBmaWxlIGFmdGVyIHRoZSBj
dXJyZW50IG91dHB1dCBmaWxlIGhhcyByZWFjaGVkIHRoZSB0YXJnZXQKK2ZpbGUgc2l6ZSAoMk1C
KS4gIFdlIGFsc28gc3dpdGNoIHRvIGEgbmV3IG91dHB1dCBmaWxlIHdoZW4gdGhlIGtleQorcmFu
Z2Ugb2YgdGhlIGN1cnJlbnQgb3V0cHV0IGZpbGUgaGFzIGdyb3duIGVub3VnaCB0byBvdmVybGFw
IG1vcmUgdGhlbgordGVuIGxldmVsLShMKzIpIGZpbGVzLiAgVGhpcyBsYXN0IHJ1bGUgZW5zdXJl
cyB0aGF0IGEgbGF0ZXIgY29tcGFjdGlvbgorb2YgYSBsZXZlbC0oTCsxKSBmaWxlIHdpbGwgbm90
IHBpY2sgdXAgdG9vIG11Y2ggZGF0YSBmcm9tIGxldmVsLShMKzIpLgorCis8cD4KK1RoZSBvbGQg
ZmlsZXMgYXJlIGRpc2NhcmRlZCBhbmQgdGhlIG5ldyBmaWxlcyBhcmUgYWRkZWQgdG8gdGhlIHNl
cnZpbmcKK3N0YXRlLgorCis8cD4KK0NvbXBhY3Rpb25zIGZvciBhIHBhcnRpY3VsYXIgbGV2ZWwg
cm90YXRlIHRocm91Z2ggdGhlIGtleSBzcGFjZS4gIEluCittb3JlIGRldGFpbCwgZm9yIGVhY2gg
bGV2ZWwgTCwgd2UgcmVtZW1iZXIgdGhlIGVuZGluZyBrZXkgb2YgdGhlIGxhc3QKK2NvbXBhY3Rp
b24gYXQgbGV2ZWwgTC4gIFRoZSBuZXh0IGNvbXBhY3Rpb24gZm9yIGxldmVsIEwgd2lsbCBwaWNr
IHRoZQorZmlyc3QgZmlsZSB0aGF0IHN0YXJ0cyBhZnRlciB0aGlzIGtleSAod3JhcHBpbmcgYXJv
dW5kIHRvIHRoZQorYmVnaW5uaW5nIG9mIHRoZSBrZXkgc3BhY2UgaWYgdGhlcmUgaXMgbm8gc3Vj
aCBmaWxlKS4KKworPHA+CitDb21wYWN0aW9ucyBkcm9wIG92ZXJ3cml0dGVuIHZhbHVlcy4gIFRo
ZXkgYWxzbyBkcm9wIGRlbGV0aW9uIG1hcmtlcnMKK2lmIHRoZXJlIGFyZSBubyBoaWdoZXIgbnVt
YmVyZWQgbGV2ZWxzIHRoYXQgY29udGFpbiBhIGZpbGUgd2hvc2UgcmFuZ2UKK292ZXJsYXBzIHRo
ZSBjdXJyZW50IGtleS4KKworPGgyPlRpbWluZzwvaDI+CisKK0xldmVsLTAgY29tcGFjdGlvbnMg
d2lsbCByZWFkIHVwIHRvIGZvdXIgMU1CIGZpbGVzIGZyb20gbGV2ZWwtMCwgYW5kCithdCB3b3Jz
dCBhbGwgdGhlIGxldmVsLTEgZmlsZXMgKDEwTUIpLiAgSS5lLiwgd2Ugd2lsbCByZWFkIDE0TUIg
YW5kCit3cml0ZSAxNE1CLgorCis8cD4KK090aGVyIHRoYW4gdGhlIHNwZWNpYWwgbGV2ZWwtMCBj
b21wYWN0aW9ucywgd2Ugd2lsbCBwaWNrIG9uZSAyTUIgZmlsZQorZnJvbSBsZXZlbCBMLiAgSW4g
dGhlIHdvcnN0IGNhc2UsIHRoaXMgd2lsbCBvdmVybGFwIH4gMTIgZmlsZXMgZnJvbQorbGV2ZWwg
TCsxICgxMCBiZWNhdXNlIGxldmVsLShMKzEpIGlzIHRlbiB0aW1lcyB0aGUgc2l6ZSBvZiBsZXZl
bC1MLAorYW5kIGFub3RoZXIgdHdvIGF0IHRoZSBib3VuZGFyaWVzIHNpbmNlIHRoZSBmaWxlIHJh
bmdlcyBhdCBsZXZlbC1MCit3aWxsIHVzdWFsbHkgbm90IGJlIGFsaWduZWQgd2l0aCB0aGUgZmls
ZSByYW5nZXMgYXQgbGV2ZWwtTCsxKS4gIFRoZQorY29tcGFjdGlvbiB3aWxsIHRoZXJlZm9yZSBy
ZWFkIDI2TUIgYW5kIHdyaXRlIDI2TUIuICBBc3N1bWluZyBhIGRpc2sKK0lPIHJhdGUgb2YgMTAw
TUIvcyAoYmFsbHBhcmsgcmFuZ2UgZm9yIG1vZGVybiBkcml2ZXMpLCB0aGUgd29yc3QKK2NvbXBh
Y3Rpb24gY29zdCB3aWxsIGJlIGFwcHJveGltYXRlbHkgMC41IHNlY29uZC4KKworPHA+CitJZiB3
ZSB0aHJvdHRsZSB0aGUgYmFja2dyb3VuZCB3cml0aW5nIHRvIHNvbWV0aGluZyBzbWFsbCwgc2F5
IDEwJSBvZgordGhlIGZ1bGwgMTAwTUIvcyBzcGVlZCwgYSBjb21wYWN0aW9uIG1heSB0YWtlIHVw
IHRvIDUgc2Vjb25kcy4gIElmIHRoZQordXNlciBpcyB3cml0aW5nIGF0IDEwTUIvcywgd2UgbWln
aHQgYnVpbGQgdXAgbG90cyBvZiBsZXZlbC0wIGZpbGVzCisofjUwIHRvIGhvbGQgdGhlIDUqMTBN
QikuICBUaGlzIG1heSBzaWduZmljYW50bHkgaW5jcmVhc2UgdGhlIGNvc3Qgb2YKK3JlYWRzIGR1
ZSB0byB0aGUgb3ZlcmhlYWQgb2YgbWVyZ2luZyBtb3JlIGZpbGVzIHRvZ2V0aGVyIG9uIGV2ZXJ5
CityZWFkLgorCis8cD4KK1NvbHV0aW9uIDE6IFRvIHJlZHVjZSB0aGlzIHByb2JsZW0sIHdlIG1p
Z2h0IHdhbnQgdG8gaW5jcmVhc2UgdGhlIGxvZworc3dpdGNoaW5nIHRocmVzaG9sZCB3aGVuIHRo
ZSBudW1iZXIgb2YgbGV2ZWwtMCBmaWxlcyBpcyBsYXJnZS4gIFRob3VnaAordGhlIGRvd25zaWRl
IGlzIHRoYXQgdGhlIGxhcmdlciB0aGlzIHRocmVzaG9sZCwgdGhlIG1vcmUgbWVtb3J5IHdlIHdp
bGwKK25lZWQgdG8gaG9sZCB0aGUgY29ycmVzcG9uZGluZyBtZW10YWJsZS4KKworPHA+CitTb2x1
dGlvbiAyOiBXZSBtaWdodCB3YW50IHRvIGRlY3JlYXNlIHdyaXRlIHJhdGUgYXJ0aWZpY2lhbGx5
IHdoZW4gdGhlCitudW1iZXIgb2YgbGV2ZWwtMCBmaWxlcyBnb2VzIHVwLgorCis8cD4KK1NvbHV0
aW9uIDM6IFdlIHdvcmsgb24gcmVkdWNpbmcgdGhlIGNvc3Qgb2YgdmVyeSB3aWRlIG1lcmdlcy4K
K1BlcmhhcHMgbW9zdCBvZiB0aGUgbGV2ZWwtMCBmaWxlcyB3aWxsIGhhdmUgdGhlaXIgYmxvY2tz
IHNpdHRpbmcKK3VuY29tcHJlc3NlZCBpbiB0aGUgY2FjaGUgYW5kIHdlIHdpbGwgb25seSBuZWVk
IHRvIHdvcnJ5IGFib3V0IHRoZQorTyhOKSBjb21wbGV4aXR5IGluIHRoZSBtZXJnaW5nIGl0ZXJh
dG9yLgorCis8aDI+TnVtYmVyIG9mIGZpbGVzPC9oMj4KKworSW5zdGVhZCBvZiBhbHdheXMgbWFr
aW5nIDJNQiBmaWxlcywgd2UgY291bGQgbWFrZSBsYXJnZXIgZmlsZXMgZm9yCitsYXJnZXIgbGV2
ZWxzIHRvIHJlZHVjZSB0aGUgdG90YWwgZmlsZSBjb3VudCwgdGhvdWdoIGF0IHRoZSBleHBlbnNl
IG9mCittb3JlIGJ1cnN0eSBjb21wYWN0aW9ucy4gIEFsdGVybmF0aXZlbHksIHdlIGNvdWxkIHNo
YXJkIHRoZSBzZXQgb2YKK2ZpbGVzIGludG8gbXVsdGlwbGUgZGlyZWN0b3JpZXMuCisKKzxwPgor
QW4gZXhwZXJpbWVudCBvbiBhbiA8Y29kZT5leHQzPC9jb2RlPiBmaWxlc3lzdGVtIG9uIEZlYiAw
NCwgMjAxMSBzaG93cwordGhlIGZvbGxvd2luZyB0aW1pbmdzIHRvIGRvIDEwMEsgZmlsZSBvcGVu
cyBpbiBkaXJlY3RvcmllcyB3aXRoCit2YXJ5aW5nIG51bWJlciBvZiBmaWxlczoKKzx0YWJsZSBj
bGFzcz0iZGF0YXRhYmxlIj4KKzx0cj48dGg+RmlsZXMgaW4gZGlyZWN0b3J5PC90aD48dGg+TWlj
cm9zZWNvbmRzIHRvIG9wZW4gYSBmaWxlPC90aD48L3RyPgorPHRyPjx0ZD4xMDAwPC90ZD48dGQ+
OTwvdGQ+Cis8dHI+PHRkPjEwMDAwPC90ZD48dGQ+MTA8L3RkPgorPHRyPjx0ZD4xMDAwMDA8L3Rk
Pjx0ZD4xNjwvdGQ+Cis8L3RhYmxlPgorU28gbWF5YmUgZXZlbiB0aGUgc2hhcmRpbmcgaXMgbm90
IG5lY2Vzc2FyeSBvbiBtb2Rlcm4gZmlsZXN5c3RlbXM/CisKKzxoMT5SZWNvdmVyeTwvaDE+CisK
Kzx1bD4KKzxsaT4gUmVhZCBDVVJSRU5UIHRvIGZpbmQgbmFtZSBvZiB0aGUgbGF0ZXN0IGNvbW1p
dHRlZCBNQU5JRkVTVAorPGxpPiBSZWFkIHRoZSBuYW1lZCBNQU5JRkVTVCBmaWxlCis8bGk+IENs
ZWFuIHVwIHN0YWxlIGZpbGVzCis8bGk+IFdlIGNvdWxkIG9wZW4gYWxsIHNzdGFibGVzIGhlcmUs
IGJ1dCBpdCBpcyBwcm9iYWJseSBiZXR0ZXIgdG8gYmUgbGF6eS4uLgorPGxpPiBDb252ZXJ0IGxv
ZyBjaHVuayB0byBhIG5ldyBsZXZlbC0wIHNzdGFibGUKKzxsaT4gU3RhcnQgZGlyZWN0aW5nIG5l
dyB3cml0ZXMgdG8gYSBuZXcgbG9nIGZpbGUgd2l0aCByZWNvdmVyZWQgc2VxdWVuY2UjCis8L3Vs
PgorCis8aDE+R2FyYmFnZSBjb2xsZWN0aW9uIG9mIGZpbGVzPC9oMT4KKworPGNvZGU+RGVsZXRl
T2Jzb2xldGVGaWxlcygpPC9jb2RlPiBpcyBjYWxsZWQgYXQgdGhlIGVuZCBvZiBldmVyeQorY29t
cGFjdGlvbiBhbmQgYXQgdGhlIGVuZCBvZiByZWNvdmVyeS4gIEl0IGZpbmRzIHRoZSBuYW1lcyBv
ZiBhbGwKK2ZpbGVzIGluIHRoZSBkYXRhYmFzZS4gIEl0IGRlbGV0ZXMgYWxsIGxvZyBmaWxlcyB0
aGF0IGFyZSBub3QgdGhlCitjdXJyZW50IGxvZyBmaWxlLiAgSXQgZGVsZXRlcyBhbGwgdGFibGUg
ZmlsZXMgdGhhdCBhcmUgbm90IHJlZmVyZW5jZWQKK2Zyb20gc29tZSBsZXZlbCBhbmQgYXJlIG5v
dCB0aGUgb3V0cHV0IG9mIGFuIGFjdGl2ZSBjb21wYWN0aW9uLgorCis8L2JvZHk+Cis8L2h0bWw+
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RvYy9pbmRleC5odG1sIGIv
U291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kb2MvaW5kZXguaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZWQw
ZWQ5ZDllMzA1ZWQ2MzBmMzlhMjAxZTMwMzRlMDBkODE1YjQzCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kb2MvaW5kZXguaHRtbApAQCAtMCwwICsxLDU0OSBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0
IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iZG9jLmNzcyIgLz4KKzx0aXRsZT5MZXZlbGRiPC90aXRs
ZT4KKzwvaGVhZD4KKworPGJvZHk+Cis8aDE+TGV2ZWxkYjwvaDE+Cis8YWRkcmVzcz5KZWZmIERl
YW4sIFNhbmpheSBHaGVtYXdhdDwvYWRkcmVzcz4KKzxwPgorVGhlIDxjb2RlPmxldmVsZGI8L2Nv
ZGU+IGxpYnJhcnkgcHJvdmlkZXMgYSBwZXJzaXN0ZW50IGtleSB2YWx1ZSBzdG9yZS4gIEtleXMg
YW5kCit2YWx1ZXMgYXJlIGFyYml0cmFyeSBieXRlIGFycmF5cy4gIFRoZSBrZXlzIGFyZSBvcmRl
cmVkIHdpdGhpbiB0aGUga2V5Cit2YWx1ZSBzdG9yZSBhY2NvcmRpbmcgdG8gYSB1c2VyLXNwZWNp
ZmllZCBjb21wYXJhdG9yIGZ1bmN0aW9uLgorCis8cD4KKzxoMT5PcGVuaW5nIEEgRGF0YWJhc2U8
L2gxPgorPHA+CitBIDxjb2RlPmxldmVsZGI8L2NvZGU+IGRhdGFiYXNlIGhhcyBhIG5hbWUgd2hp
Y2ggY29ycmVzcG9uZHMgdG8gYSBmaWxlIHN5c3RlbQorZGlyZWN0b3J5LiAgQWxsIG9mIHRoZSBj
b250ZW50cyBvZiBkYXRhYmFzZSBhcmUgc3RvcmVkIGluIHRoaXMKK2RpcmVjdG9yeS4gIFRoZSBm
b2xsb3dpbmcgZXhhbXBsZSBzaG93cyBob3cgdG8gb3BlbiBhIGRhdGFiYXNlLAorY3JlYXRpbmcg
aXQgaWYgbmVjZXNzYXJ5OgorPHA+Cis8cHJlPgorICAjaW5jbHVkZSAmbHQ7YXNzZXJ0Jmd0Owor
ICAjaW5jbHVkZSAibGV2ZWxkYi9kYi5oIgorCisgIGxldmVsZGI6OkRCKiBkYjsKKyAgbGV2ZWxk
Yjo6T3B0aW9ucyBvcHRpb25zOworICBvcHRpb25zLmNyZWF0ZV9pZl9taXNzaW5nID0gdHJ1ZTsK
KyAgbGV2ZWxkYjo6U3RhdHVzIHN0YXR1cyA9IGxldmVsZGI6OkRCOjpPcGVuKG9wdGlvbnMsICIv
dG1wL3Rlc3RkYiIsICZhbXA7ZGIpOworICBhc3NlcnQoc3RhdHVzLm9rKCkpOworICAuLi4KKzwv
cHJlPgorSWYgeW91IHdhbnQgdG8gcmFpc2UgYW4gZXJyb3IgaWYgdGhlIGRhdGFiYXNlIGFscmVh
ZHkgZXhpc3RzLCBhZGQKK3RoZSBmb2xsb3dpbmcgbGluZSBiZWZvcmUgdGhlIDxjb2RlPmxldmVs
ZGI6OkRCOjpPcGVuPC9jb2RlPiBjYWxsOgorPHByZT4KKyAgb3B0aW9ucy5lcnJvcl9pZl9leGlz
dHMgPSB0cnVlOworPC9wcmU+Cis8aDE+U3RhdHVzPC9oMT4KKzxwPgorWW91IG1heSBoYXZlIG5v
dGljZWQgdGhlIDxjb2RlPmxldmVsZGI6OlN0YXR1czwvY29kZT4gdHlwZSBhYm92ZS4gIFZhbHVl
cyBvZiB0aGlzCit0eXBlIGFyZSByZXR1cm5lZCBieSBtb3N0IGZ1bmN0aW9ucyBpbiA8Y29kZT5s
ZXZlbGRiPC9jb2RlPiB0aGF0IG1heSBlbmNvdW50ZXIgYW4KK2Vycm9yLiAgWW91IGNhbiBjaGVj
ayBpZiBzdWNoIGEgcmVzdWx0IGlzIG9rLCBhbmQgYWxzbyBwcmludCBhbgorYXNzb2NpYXRlZCBl
cnJvciBtZXNzYWdlOgorPHA+Cis8cHJlPgorICAgbGV2ZWxkYjo6U3RhdHVzIHMgPSAuLi47Cisg
ICBpZiAoIXMub2soKSkgY2VyciAmbHQ7Jmx0OyBzLlRvU3RyaW5nKCkgJmx0OyZsdDsgZW5kbDsK
KzwvcHJlPgorPGgxPkNsb3NpbmcgQSBEYXRhYmFzZTwvaDE+Cis8cD4KK1doZW4geW91IGFyZSBk
b25lIHdpdGggYSBkYXRhYmFzZSwganVzdCBkZWxldGUgdGhlIGRhdGFiYXNlIG9iamVjdC4KK0V4
YW1wbGU6Cis8cD4KKzxwcmU+CisgIC4uLiBvcGVuIHRoZSBkYiBhcyBkZXNjcmliZWQgYWJvdmUg
Li4uCisgIC4uLiBkbyBzb21ldGhpbmcgd2l0aCBkYiAuLi4KKyAgZGVsZXRlIGRiOworPC9wcmU+
Cis8aDE+UmVhZHMgQW5kIFdyaXRlczwvaDE+Cis8cD4KK1RoZSBkYXRhYmFzZSBwcm92aWRlcyA8
Y29kZT5QdXQ8L2NvZGU+LCA8Y29kZT5EZWxldGU8L2NvZGU+LCBhbmQgPGNvZGU+R2V0PC9jb2Rl
PiBtZXRob2RzIHRvCittb2RpZnkvcXVlcnkgdGhlIGRhdGFiYXNlLiAgRm9yIGV4YW1wbGUsIHRo
ZSBmb2xsb3dpbmcgY29kZQorbW92ZXMgdGhlIHZhbHVlIHN0b3JlZCB1bmRlciBrZXkxIHRvIGtl
eTIuCis8cHJlPgorICBzdGQ6OnN0cmluZyB2YWx1ZTsKKyAgbGV2ZWxkYjo6U3RhdHVzIHMgPSBk
Yi0mZ3Q7R2V0KGxldmVsZGI6OlJlYWRPcHRpb25zKCksIGtleTEsICZhbXA7dmFsdWUpOworICBp
ZiAocy5vaygpKSBzID0gZGItJmd0O1B1dChsZXZlbGRiOjpXcml0ZU9wdGlvbnMoKSwga2V5Miwg
dmFsdWUpOworICBpZiAocy5vaygpKSBzID0gZGItJmd0O0RlbGV0ZShsZXZlbGRiOjpXcml0ZU9w
dGlvbnMoKSwga2V5MSk7Cis8L3ByZT4KKworPGgxPkF0b21pYyBVcGRhdGVzPC9oMT4KKzxwPgor
Tm90ZSB0aGF0IGlmIHRoZSBwcm9jZXNzIGRpZXMgYWZ0ZXIgdGhlIFB1dCBvZiBrZXkyIGJ1dCBi
ZWZvcmUgdGhlCitkZWxldGUgb2Yga2V5MSwgdGhlIHNhbWUgdmFsdWUgbWF5IGJlIGxlZnQgc3Rv
cmVkIHVuZGVyIG11bHRpcGxlIGtleXMuCitTdWNoIHByb2JsZW1zIGNhbiBiZSBhdm9pZGVkIGJ5
IHVzaW5nIHRoZSA8Y29kZT5Xcml0ZUJhdGNoPC9jb2RlPiBjbGFzcyB0bworYXRvbWljYWxseSBh
cHBseSBhIHNldCBvZiB1cGRhdGVzOgorPHA+Cis8cHJlPgorICAjaW5jbHVkZSAibGV2ZWxkYi93
cml0ZV9iYXRjaC5oIgorICAuLi4KKyAgc3RkOjpzdHJpbmcgdmFsdWU7CisgIGxldmVsZGI6OlN0
YXR1cyBzID0gZGItJmd0O0dldChsZXZlbGRiOjpSZWFkT3B0aW9ucygpLCBrZXkxLCAmYW1wO3Zh
bHVlKTsKKyAgaWYgKHMub2soKSkgeworICAgIGxldmVsZGI6OldyaXRlQmF0Y2ggYmF0Y2g7Cisg
ICAgYmF0Y2guRGVsZXRlKGtleTEpOworICAgIGJhdGNoLlB1dChrZXkyLCB2YWx1ZSk7CisgICAg
cyA9IGRiLSZndDtXcml0ZShsZXZlbGRiOjpXcml0ZU9wdGlvbnMoKSwgJmFtcDtiYXRjaCk7Cisg
IH0KKzwvcHJlPgorVGhlIDxjb2RlPldyaXRlQmF0Y2g8L2NvZGU+IGhvbGRzIGEgc2VxdWVuY2Ug
b2YgZWRpdHMgdG8gYmUgbWFkZSB0byB0aGUgZGF0YWJhc2UsCithbmQgdGhlc2UgZWRpdHMgd2l0
aGluIHRoZSBiYXRjaCBhcmUgYXBwbGllZCBpbiBvcmRlci4gIE5vdGUgdGhhdCB3ZQorY2FsbGVk
IDxjb2RlPkRlbGV0ZTwvY29kZT4gYmVmb3JlIDxjb2RlPlB1dDwvY29kZT4gc28gdGhhdCBpZiA8
Y29kZT5rZXkxPC9jb2RlPiBpcyBpZGVudGljYWwgdG8gPGNvZGU+a2V5MjwvY29kZT4sCit3ZSBk
byBub3QgZW5kIHVwIGVycm9uZW91c2x5IGRyb3BwaW5nIHRoZSB2YWx1ZSBlbnRpcmVseS4KKzxw
PgorQXBhcnQgZnJvbSBpdHMgYXRvbWljaXR5IGJlbmVmaXRzLCA8Y29kZT5Xcml0ZUJhdGNoPC9j
b2RlPiBtYXkgYWxzbyBiZSB1c2VkIHRvCitzcGVlZCB1cCBidWxrIHVwZGF0ZXMgYnkgcGxhY2lu
ZyBsb3RzIG9mIGluZGl2aWR1YWwgbXV0YXRpb25zIGludG8gdGhlCitzYW1lIGJhdGNoLgorCis8
aDE+U3luY2hyb25vdXMgV3JpdGVzPC9oMT4KK0J5IGRlZmF1bHQsIGVhY2ggd3JpdGUgdG8gPGNv
ZGU+bGV2ZWxkYjwvY29kZT4gaXMgYXN5bmNocm9ub3VzOiBpdAorcmV0dXJucyBhZnRlciBwdXNo
aW5nIHRoZSB3cml0ZSBmcm9tIHRoZSBwcm9jZXNzIGludG8gdGhlIG9wZXJhdGluZworc3lzdGVt
LiAgVGhlIHRyYW5zZmVyIGZyb20gb3BlcmF0aW5nIHN5c3RlbSBtZW1vcnkgdG8gdGhlIHVuZGVy
bHlpbmcKK3BlcnNpc3RlbnQgc3RvcmFnZSBoYXBwZW5zIGFzeW5jaHJvbm91c2x5LiAgVGhlIDxj
b2RlPnN5bmM8L2NvZGU+IGZsYWcKK2NhbiBiZSB0dXJuZWQgb24gZm9yIGEgcGFydGljdWxhciB3
cml0ZSB0byBtYWtlIHRoZSB3cml0ZSBvcGVyYXRpb24KK25vdCByZXR1cm4gdW50aWwgdGhlIGRh
dGEgYmVpbmcgd3JpdHRlbiBoYXMgYmVlbiBwdXNoZWQgYWxsIHRoZSB3YXkgdG8KK3BlcnNpc3Rl
bnQgc3RvcmFnZS4gIChPbiBQb3NpeCBzeXN0ZW1zLCB0aGlzIGlzIGltcGxlbWVudGVkIGJ5IGNh
bGxpbmcKK2VpdGhlciA8Y29kZT5mc3luYyguLi4pPC9jb2RlPiBvciA8Y29kZT5mZGF0YXN5bmMo
Li4uKTwvY29kZT4gb3IKKzxjb2RlPm1zeW5jKC4uLiwgTVNfU1lOQyk8L2NvZGU+IGJlZm9yZSB0
aGUgd3JpdGUgb3BlcmF0aW9uIHJldHVybnMuKQorPHByZT4KKyAgbGV2ZWxkYjo6V3JpdGVPcHRp
b25zIHdyaXRlX29wdGlvbnM7CisgIHdyaXRlX29wdGlvbnMuc3luYyA9IHRydWU7CisgIGRiLSZn
dDtQdXQod3JpdGVfb3B0aW9ucywgLi4uKTsKKzwvcHJlPgorQXN5bmNocm9ub3VzIHdyaXRlcyBh
cmUgb2Z0ZW4gbW9yZSB0aGFuIGEgdGhvdXNhbmQgdGltZXMgYXMgZmFzdCBhcworc3luY2hyb25v
dXMgd3JpdGVzLiAgVGhlIGRvd25zaWRlIG9mIGFzeW5jaHJvbm91cyB3cml0ZXMgaXMgdGhhdCBh
CitjcmFzaCBvZiB0aGUgbWFjaGluZSBtYXkgY2F1c2UgdGhlIGxhc3QgZmV3IHVwZGF0ZXMgdG8g
YmUgbG9zdC4gIE5vdGUKK3RoYXQgYSBjcmFzaCBvZiBqdXN0IHRoZSB3cml0aW5nIHByb2Nlc3Mg
KGkuZS4sIG5vdCBhIHJlYm9vdCkgd2lsbCBub3QKK2NhdXNlIGFueSBsb3NzIHNpbmNlIGV2ZW4g
d2hlbiA8Y29kZT5zeW5jPC9jb2RlPiBpcyBmYWxzZSwgYW4gdXBkYXRlCitpcyBwdXNoZWQgZnJv
bSB0aGUgcHJvY2VzcyBtZW1vcnkgaW50byB0aGUgb3BlcmF0aW5nIHN5c3RlbSBiZWZvcmUgaXQK
K2lzIGNvbnNpZGVyZWQgZG9uZS4KKworPHA+CitBc3luY2hyb25vdXMgd3JpdGVzIGNhbiBvZnRl
biBiZSB1c2VkIHNhZmVseS4gIEZvciBleGFtcGxlLCB3aGVuCitsb2FkaW5nIGEgbGFyZ2UgYW1v
dW50IG9mIGRhdGEgaW50byB0aGUgZGF0YWJhc2UgeW91IGNhbiBoYW5kbGUgbG9zdAordXBkYXRl
cyBieSByZXN0YXJ0aW5nIHRoZSBidWxrIGxvYWQgYWZ0ZXIgYSBjcmFzaC4gIEEgaHlicmlkIHNj
aGVtZSBpcworYWxzbyBwb3NzaWJsZSB3aGVyZSBldmVyeSBOdGggd3JpdGUgaXMgc3luY2hyb25v
dXMsIGFuZCBpbiB0aGUgZXZlbnQKK29mIGEgY3Jhc2gsIHRoZSBidWxrIGxvYWQgaXMgcmVzdGFy
dGVkIGp1c3QgYWZ0ZXIgdGhlIGxhc3Qgc3luY2hyb25vdXMKK3dyaXRlIGZpbmlzaGVkIGJ5IHRo
ZSBwcmV2aW91cyBydW4uICAoVGhlIHN5bmNocm9ub3VzIHdyaXRlIGNhbiB1cGRhdGUKK2EgbWFy
a2VyIHRoYXQgZGVzY3JpYmVzIHdoZXJlIHRvIHJlc3RhcnQgb24gYSBjcmFzaC4pCisKKzxwPgor
PGNvZGU+V3JpdGVCYXRjaDwvY29kZT4gcHJvdmlkZXMgYW4gYWx0ZXJuYXRpdmUgdG8gYXN5bmNo
cm9ub3VzIHdyaXRlcy4KK011bHRpcGxlIHVwZGF0ZXMgbWF5IGJlIHBsYWNlZCBpbiB0aGUgc2Ft
ZSA8Y29kZT5Xcml0ZUJhdGNoPC9jb2RlPiBhbmQKK2FwcGxpZWQgdG9nZXRoZXIgdXNpbmcgYSBz
eW5jaHJvbm91cyB3cml0ZSAoaS5lLiwKKzxjb2RlPndyaXRlX29wdGlvbnMuc3luYzwvY29kZT4g
aXMgc2V0IHRvIHRydWUpLiAgVGhlIGV4dHJhIGNvc3Qgb2YKK3RoZSBzeW5jaHJvbm91cyB3cml0
ZSB3aWxsIGJlIGFtb3J0aXplZCBhY3Jvc3MgYWxsIG9mIHRoZSB3cml0ZXMgaW4KK3RoZSBiYXRj
aC4KKworPHA+Cis8aDE+Q29uY3VycmVuY3k8L2gxPgorPHA+CitBIGRhdGFiYXNlIG1heSBvbmx5
IGJlIG9wZW5lZCBieSBvbmUgcHJvY2VzcyBhdCBhIHRpbWUuCitUaGUgPGNvZGU+bGV2ZWxkYjwv
Y29kZT4gaW1wbGVtZW50YXRpb24gYWNxdWlyZXMgYSBsb2NrIGZyb20gdGhlCitvcGVyYXRpbmcg
c3lzdGVtIHRvIHByZXZlbnQgbWlzdXNlLiAgV2l0aGluIGEgc2luZ2xlIHByb2Nlc3MsIHRoZQor
c2FtZSA8Y29kZT5sZXZlbGRiOjpEQjwvY29kZT4gb2JqZWN0IG1heSBiZSBzYWZlbHkgc2hhcmVk
IGJ5IG11bHRpcGxlCitjb25jdXJyZW50IHRocmVhZHMuICBJLmUuLCBkaWZmZXJlbnQgdGhyZWFk
cyBtYXkgd3JpdGUgaW50byBvciBmZXRjaAoraXRlcmF0b3JzIG9yIGNhbGwgPGNvZGU+R2V0PC9j
b2RlPiBvbiB0aGUgc2FtZSBkYXRhYmFzZSB3aXRob3V0IGFueQorZXh0ZXJuYWwgc3luY2hyb25p
emF0aW9uICh0aGUgbGV2ZWxkYiBpbXBsZW1lbnRhdGlvbiB3aWxsCithdXRvbWF0aWNhbGx5IGRv
IHRoZSByZXF1aXJlZCBzeW5jaHJvbml6YXRpb24pLiAgSG93ZXZlciBvdGhlciBvYmplY3RzCiso
bGlrZSBJdGVyYXRvciBhbmQgV3JpdGVCYXRjaCkgbWF5IHJlcXVpcmUgZXh0ZXJuYWwgc3luY2hy
b25pemF0aW9uLgorSWYgdHdvIHRocmVhZHMgc2hhcmUgc3VjaCBhbiBvYmplY3QsIHRoZXkgbXVz
dCBwcm90ZWN0IGFjY2VzcyB0byBpdAordXNpbmcgdGhlaXIgb3duIGxvY2tpbmcgcHJvdG9jb2wu
ICBNb3JlIGRldGFpbHMgYXJlIGF2YWlsYWJsZSBpbgordGhlIHB1YmxpYyBoZWFkZXIgZmlsZXMu
Cis8cD4KKzxoMT5JdGVyYXRpb248L2gxPgorPHA+CitUaGUgZm9sbG93aW5nIGV4YW1wbGUgZGVt
b25zdHJhdGVzIGhvdyB0byBwcmludCBhbGwga2V5LHZhbHVlIHBhaXJzCitpbiBhIGRhdGFiYXNl
LgorPHA+Cis8cHJlPgorICBsZXZlbGRiOjpJdGVyYXRvciogaXQgPSBkYi0mZ3Q7TmV3SXRlcmF0
b3IobGV2ZWxkYjo6UmVhZE9wdGlvbnMoKSk7CisgIGZvciAoaXQtJmd0O1NlZWtUb0ZpcnN0KCk7
IGl0LSZndDtWYWxpZCgpOyBpdC0mZ3Q7TmV4dCgpKSB7CisgICAgY291dCAmbHQ7Jmx0OyBpdC0m
Z3Q7a2V5KCkuVG9TdHJpbmcoKSAmbHQ7Jmx0OyAiOiAiICAmbHQ7Jmx0OyBpdC0mZ3Q7dmFsdWUo
KS5Ub1N0cmluZygpICZsdDsmbHQ7IGVuZGw7CisgIH0KKyAgYXNzZXJ0KGl0LSZndDtzdGF0dXMo
KS5vaygpKTsgIC8vIENoZWNrIGZvciBhbnkgZXJyb3JzIGZvdW5kIGR1cmluZyB0aGUgc2Nhbgor
ICBkZWxldGUgaXQ7Cis8L3ByZT4KK1RoZSBmb2xsb3dpbmcgdmFyaWF0aW9uIHNob3dzIGhvdyB0
byBwcm9jZXNzIGp1c3QgdGhlIGtleXMgaW4gdGhlCityYW5nZSA8Y29kZT5bc3RhcnQsbGltaXQp
PC9jb2RlPjoKKzxwPgorPHByZT4KKyAgZm9yIChpdC0mZ3Q7U2VlayhzdGFydCk7CisgICAgICAg
aXQtJmd0O1ZhbGlkKCkgJmFtcDsmYW1wOyBpdC0mZ3Q7a2V5KCkuVG9TdHJpbmcoKSAmbHQ7IGxp
bWl0OworICAgICAgIGl0LSZndDtOZXh0KCkpIHsKKyAgICAuLi4KKyAgfQorPC9wcmU+CitZb3Ug
Y2FuIGFsc28gcHJvY2VzcyBlbnRyaWVzIGluIHJldmVyc2Ugb3JkZXIuICAoQ2F2ZWF0OiByZXZl
cnNlCitpdGVyYXRpb24gbWF5IGJlIHNvbWV3aGF0IHNsb3dlciB0aGFuIGZvcndhcmQgaXRlcmF0
aW9uLikKKzxwPgorPHByZT4KKyAgZm9yIChpdC0mZ3Q7U2Vla1RvTGFzdCgpOyBpdC0mZ3Q7VmFs
aWQoKTsgaXQtJmd0O1ByZXYoKSkgeworICAgIC4uLgorICB9Cis8L3ByZT4KKzxoMT5TbmFwc2hv
dHM8L2gxPgorPHA+CitTbmFwc2hvdHMgcHJvdmlkZSBjb25zaXN0ZW50IHJlYWQtb25seSB2aWV3
cyBvdmVyIHRoZSBlbnRpcmUgc3RhdGUgb2YKK3RoZSBrZXktdmFsdWUgc3RvcmUuICA8Y29kZT5S
ZWFkT3B0aW9uczo6c25hcHNob3Q8L2NvZGU+IG1heSBiZSBub24tTlVMTCB0byBpbmRpY2F0ZQor
dGhhdCBhIHJlYWQgc2hvdWxkIG9wZXJhdGUgb24gYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhl
IERCIHN0YXRlLgorSWYgPGNvZGU+UmVhZE9wdGlvbnM6OnNuYXBzaG90PC9jb2RlPiBpcyBOVUxM
LCB0aGUgcmVhZCB3aWxsIG9wZXJhdGUgb24gYW4KK2ltcGxpY2l0IHNuYXBzaG90IG9mIHRoZSBj
dXJyZW50IHN0YXRlLgorPHA+CitTbmFwc2hvdHMgYXJlIGNyZWF0ZWQgYnkgdGhlIERCOjpHZXRT
bmFwc2hvdCgpIG1ldGhvZDoKKzxwPgorPHByZT4KKyAgbGV2ZWxkYjo6UmVhZE9wdGlvbnMgb3B0
aW9uczsKKyAgb3B0aW9ucy5zbmFwc2hvdCA9IGRiLSZndDtHZXRTbmFwc2hvdCgpOworICAuLi4g
YXBwbHkgc29tZSB1cGRhdGVzIHRvIGRiIC4uLgorICBsZXZlbGRiOjpJdGVyYXRvciogaXRlciA9
IGRiLSZndDtOZXdJdGVyYXRvcihvcHRpb25zKTsKKyAgLi4uIHJlYWQgdXNpbmcgaXRlciB0byB2
aWV3IHRoZSBzdGF0ZSB3aGVuIHRoZSBzbmFwc2hvdCB3YXMgY3JlYXRlZCAuLi4KKyAgZGVsZXRl
IGl0ZXI7CisgIGRiLSZndDtSZWxlYXNlU25hcHNob3Qob3B0aW9ucy5zbmFwc2hvdCk7Cis8L3By
ZT4KK05vdGUgdGhhdCB3aGVuIGEgc25hcHNob3QgaXMgbm8gbG9uZ2VyIG5lZWRlZCwgaXQgc2hv
dWxkIGJlIHJlbGVhc2VkCit1c2luZyB0aGUgREI6OlJlbGVhc2VTbmFwc2hvdCBpbnRlcmZhY2Uu
ICBUaGlzIGFsbG93cyB0aGUKK2ltcGxlbWVudGF0aW9uIHRvIGdldCByaWQgb2Ygc3RhdGUgdGhh
dCB3YXMgYmVpbmcgbWFpbnRhaW5lZCBqdXN0IHRvCitzdXBwb3J0IHJlYWRpbmcgYXMgb2YgdGhh
dCBzbmFwc2hvdC4KKzxoMT5TbGljZTwvaDE+Cis8cD4KK1RoZSByZXR1cm4gdmFsdWUgb2YgdGhl
IDxjb2RlPml0LT5rZXkoKTwvY29kZT4gYW5kIDxjb2RlPml0LT52YWx1ZSgpPC9jb2RlPiBjYWxs
cyBhYm92ZQorYXJlIGluc3RhbmNlcyBvZiB0aGUgPGNvZGU+bGV2ZWxkYjo6U2xpY2U8L2NvZGU+
IHR5cGUuICA8Y29kZT5TbGljZTwvY29kZT4gaXMgYSBzaW1wbGUKK3N0cnVjdHVyZSB0aGF0IGNv
bnRhaW5zIGEgbGVuZ3RoIGFuZCBhIHBvaW50ZXIgdG8gYW4gZXh0ZXJuYWwgYnl0ZQorYXJyYXku
ICBSZXR1cm5pbmcgYSA8Y29kZT5TbGljZTwvY29kZT4gaXMgYSBjaGVhcGVyIGFsdGVybmF0aXZl
IHRvIHJldHVybmluZyBhCis8Y29kZT5zdGQ6OnN0cmluZzwvY29kZT4gc2luY2Ugd2UgZG8gbm90
IG5lZWQgdG8gY29weSBwb3RlbnRpYWxseSBsYXJnZSBrZXlzIGFuZAordmFsdWVzLiAgSW4gYWRk
aXRpb24sIDxjb2RlPmxldmVsZGI8L2NvZGU+IG1ldGhvZHMgZG8gbm90IHJldHVybiBudWxsLXRl
cm1pbmF0ZWQKK0Mtc3R5bGUgc3RyaW5ncyBzaW5jZSA8Y29kZT5sZXZlbGRiPC9jb2RlPiBrZXlz
IGFuZCB2YWx1ZXMgYXJlIGFsbG93ZWQgdG8KK2NvbnRhaW4gJ1wwJyBieXRlcy4KKzxwPgorQysr
IHN0cmluZ3MgYW5kIG51bGwtdGVybWluYXRlZCBDLXN0eWxlIHN0cmluZ3MgY2FuIGJlIGVhc2ls
eSBjb252ZXJ0ZWQKK3RvIGEgU2xpY2U6Cis8cD4KKzxwcmU+CisgICBsZXZlbGRiOjpTbGljZSBz
MSA9ICJoZWxsbyI7CisKKyAgIHN0ZDo6c3RyaW5nIHN0cigid29ybGQiKTsKKyAgIGxldmVsZGI6
OlNsaWNlIHMyID0gc3RyOworPC9wcmU+CitBIFNsaWNlIGNhbiBiZSBlYXNpbHkgY29udmVydGVk
IGJhY2sgdG8gYSBDKysgc3RyaW5nOgorPHByZT4KKyAgIHN0ZDo6c3RyaW5nIHN0ciA9IHMxLlRv
U3RyaW5nKCk7CisgICBhc3NlcnQoc3RyID09IHN0ZDo6c3RyaW5nKCJoZWxsbyIpKTsKKzwvcHJl
PgorQmUgY2FyZWZ1bCB3aGVuIHVzaW5nIFNsaWNlcyBzaW5jZSBpdCBpcyB1cCB0byB0aGUgY2Fs
bGVyIHRvIGVuc3VyZSB0aGF0Cit0aGUgZXh0ZXJuYWwgYnl0ZSBhcnJheSBpbnRvIHdoaWNoIHRo
ZSBTbGljZSBwb2ludHMgcmVtYWlucyBsaXZlIHdoaWxlCit0aGUgU2xpY2UgaXMgaW4gdXNlLiAg
Rm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgaXMgYnVnZ3k6Cis8cD4KKzxwcmU+CisgICBsZXZl
bGRiOjpTbGljZSBzbGljZTsKKyAgIGlmICguLi4pIHsKKyAgICAgc3RkOjpzdHJpbmcgc3RyID0g
Li4uOworICAgICBzbGljZSA9IHN0cjsKKyAgIH0KKyAgIFVzZShzbGljZSk7Cis8L3ByZT4KK1do
ZW4gdGhlIDxjb2RlPmlmPC9jb2RlPiBzdGF0ZW1lbnQgZ29lcyBvdXQgb2Ygc2NvcGUsIDxjb2Rl
PnN0cjwvY29kZT4gd2lsbCBiZSBkZXN0cm95ZWQgYW5kIHRoZQorYmFja2luZyBzdG9yYWdlIGZv
ciA8Y29kZT5zbGljZTwvY29kZT4gd2lsbCBkaXNhcHBlYXIuCis8cD4KKzxoMT5Db21wYXJhdG9y
czwvaDE+Cis8cD4KK1RoZSBwcmVjZWRpbmcgZXhhbXBsZXMgdXNlZCB0aGUgZGVmYXVsdCBvcmRl
cmluZyBmdW5jdGlvbiBmb3Iga2V5LAord2hpY2ggb3JkZXJzIGJ5dGVzIGxleGljb2dyYXBoaWNh
bGx5LiAgWW91IGNhbiBob3dldmVyIHN1cHBseSBhIGN1c3RvbQorY29tcGFyYXRvciB3aGVuIG9w
ZW5pbmcgYSBkYXRhYmFzZS4gIEZvciBleGFtcGxlLCBzdXBwb3NlIGVhY2gKK2RhdGFiYXNlIGtl
eSBjb25zaXN0cyBvZiB0d28gbnVtYmVycyBhbmQgd2Ugc2hvdWxkIHNvcnQgYnkgdGhlIGZpcnN0
CitudW1iZXIsIGJyZWFraW5nIHRpZXMgYnkgdGhlIHNlY29uZCBudW1iZXIuICBGaXJzdCwgZGVm
aW5lIGEgcHJvcGVyCitzdWJjbGFzcyBvZiA8Y29kZT5sZXZlbGRiOjpDb21wYXJhdG9yPC9jb2Rl
PiB0aGF0IGV4cHJlc3NlcyB0aGVzZSBydWxlczoKKzxwPgorPHByZT4KKyAgY2xhc3MgVHdvUGFy
dENvbXBhcmF0b3IgOiBwdWJsaWMgbGV2ZWxkYjo6Q29tcGFyYXRvciB7CisgICBwdWJsaWM6Cisg
ICAgLy8gVGhyZWUtd2F5IGNvbXBhcmlzb24gZnVuY3Rpb246CisgICAgLy8gICBpZiBhICZsdDsg
YjogbmVnYXRpdmUgcmVzdWx0CisgICAgLy8gICBpZiBhICZndDsgYjogcG9zaXRpdmUgcmVzdWx0
CisgICAgLy8gICBlbHNlOiB6ZXJvIHJlc3VsdAorICAgIGludCBDb21wYXJlKGNvbnN0IGxldmVs
ZGI6OlNsaWNlJmFtcDsgYSwgY29uc3QgbGV2ZWxkYjo6U2xpY2UmYW1wOyBiKSBjb25zdCB7Cisg
ICAgICBpbnQgYTEsIGEyLCBiMSwgYjI7CisgICAgICBQYXJzZUtleShhLCAmYW1wO2ExLCAmYW1w
O2EyKTsKKyAgICAgIFBhcnNlS2V5KGIsICZhbXA7YjEsICZhbXA7YjIpOworICAgICAgaWYgKGEx
ICZsdDsgYjEpIHJldHVybiAtMTsKKyAgICAgIGlmIChhMSAmZ3Q7IGIxKSByZXR1cm4gKzE7Cisg
ICAgICBpZiAoYTIgJmx0OyBiMikgcmV0dXJuIC0xOworICAgICAgaWYgKGEyICZndDsgYjIpIHJl
dHVybiArMTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8vIElnbm9yZSB0aGUgZm9s
bG93aW5nIG1ldGhvZHMgZm9yIG5vdzoKKyAgICBjb25zdCBjaGFyKiBOYW1lKCkgY29uc3QgeyBy
ZXR1cm4gIlR3b1BhcnRDb21wYXJhdG9yIjsgfQorICAgIHZvaWQgRmluZFNob3J0ZXN0U2VwYXJh
dG9yKHN0ZDo6c3RyaW5nKiwgY29uc3QgbGV2ZWxkYjo6U2xpY2UmYW1wOykgY29uc3QgeyB9Cisg
ICAgdm9pZCBGaW5kU2hvcnRTdWNjZXNzb3Ioc3RkOjpzdHJpbmcqKSBjb25zdCB7IH0KKyAgfTsK
KzwvcHJlPgorTm93IGNyZWF0ZSBhIGRhdGFiYXNlIHVzaW5nIHRoaXMgY3VzdG9tIGNvbXBhcmF0
b3I6Cis8cD4KKzxwcmU+CisgIFR3b1BhcnRDb21wYXJhdG9yIGNtcDsKKyAgbGV2ZWxkYjo6REIq
IGRiOworICBsZXZlbGRiOjpPcHRpb25zIG9wdGlvbnM7CisgIG9wdGlvbnMuY3JlYXRlX2lmX21p
c3NpbmcgPSB0cnVlOworICBvcHRpb25zLmNvbXBhcmF0b3IgPSAmYW1wO2NtcDsKKyAgbGV2ZWxk
Yjo6U3RhdHVzIHN0YXR1cyA9IGxldmVsZGI6OkRCOjpPcGVuKG9wdGlvbnMsICIvdG1wL3Rlc3Rk
YiIsICZhbXA7ZGIpOworICAuLi4KKzwvcHJlPgorPGgyPkJhY2t3YXJkcyBjb21wYXRpYmlsaXR5
PC9oMj4KKzxwPgorVGhlIHJlc3VsdCBvZiB0aGUgY29tcGFyYXRvcidzIDxjb2RlPk5hbWU8L2Nv
ZGU+IG1ldGhvZCBpcyBhdHRhY2hlZCB0byB0aGUKK2RhdGFiYXNlIHdoZW4gaXQgaXMgY3JlYXRl
ZCwgYW5kIGlzIGNoZWNrZWQgb24gZXZlcnkgc3Vic2VxdWVudAorZGF0YWJhc2Ugb3Blbi4gIElm
IHRoZSBuYW1lIGNoYW5nZXMsIHRoZSA8Y29kZT5sZXZlbGRiOjpEQjo6T3BlbjwvY29kZT4gY2Fs
bCB3aWxsCitmYWlsLiAgVGhlcmVmb3JlLCBjaGFuZ2UgdGhlIG5hbWUgaWYgYW5kIG9ubHkgaWYg
dGhlIG5ldyBrZXkgZm9ybWF0CithbmQgY29tcGFyaXNvbiBmdW5jdGlvbiBhcmUgaW5jb21wYXRp
YmxlIHdpdGggZXhpc3RpbmcgZGF0YWJhc2VzLCBhbmQKK2l0IGlzIG9rIHRvIGRpc2NhcmQgdGhl
IGNvbnRlbnRzIG9mIGFsbCBleGlzdGluZyBkYXRhYmFzZXMuCis8cD4KK1lvdSBjYW4gaG93ZXZl
ciBzdGlsbCBncmFkdWFsbHkgZXZvbHZlIHlvdXIga2V5IGZvcm1hdCBvdmVyIHRpbWUgd2l0aAor
YSBsaXR0bGUgYml0IG9mIHByZS1wbGFubmluZy4gIEZvciBleGFtcGxlLCB5b3UgY291bGQgc3Rv
cmUgYSB2ZXJzaW9uCitudW1iZXIgYXQgdGhlIGVuZCBvZiBlYWNoIGtleSAob25lIGJ5dGUgc2hv
dWxkIHN1ZmZpY2UgZm9yIG1vc3QgdXNlcykuCitXaGVuIHlvdSB3aXNoIHRvIHN3aXRjaCB0byBh
IG5ldyBrZXkgZm9ybWF0IChlLmcuLCBhZGRpbmcgYW4gb3B0aW9uYWwKK3RoaXJkIHBhcnQgdG8g
dGhlIGtleXMgcHJvY2Vzc2VkIGJ5IDxjb2RlPlR3b1BhcnRDb21wYXJhdG9yPC9jb2RlPiksCiso
YSkga2VlcCB0aGUgc2FtZSBjb21wYXJhdG9yIG5hbWUgKGIpIGluY3JlbWVudCB0aGUgdmVyc2lv
biBudW1iZXIKK2ZvciBuZXcga2V5cyAoYykgY2hhbmdlIHRoZSBjb21wYXJhdG9yIGZ1bmN0aW9u
IHNvIGl0IHVzZXMgdGhlCit2ZXJzaW9uIG51bWJlcnMgZm91bmQgaW4gdGhlIGtleXMgdG8gZGVj
aWRlIGhvdyB0byBpbnRlcnByZXQgdGhlbS4KKzxwPgorPGgxPlBlcmZvcm1hbmNlPC9oMT4KKzxw
PgorUGVyZm9ybWFuY2UgY2FuIGJlIHR1bmVkIGJ5IGNoYW5naW5nIHRoZSBkZWZhdWx0IHZhbHVl
cyBvZiB0aGUKK3R5cGVzIGRlZmluZWQgaW4gPGNvZGU+aW5jbHVkZS9sZXZlbGRiL29wdGlvbnMu
aDwvY29kZT4uCisKKzxwPgorPGgyPkJsb2NrIHNpemU8L2gyPgorPHA+Cis8Y29kZT5sZXZlbGRi
PC9jb2RlPiBncm91cHMgYWRqYWNlbnQga2V5cyB0b2dldGhlciBpbnRvIHRoZSBzYW1lIGJsb2Nr
IGFuZCBzdWNoIGEKK2Jsb2NrIGlzIHRoZSB1bml0IG9mIHRyYW5zZmVyIHRvIGFuZCBmcm9tIHBl
cnNpc3RlbnQgc3RvcmFnZS4gIFRoZQorZGVmYXVsdCBibG9jayBzaXplIGlzIGFwcHJveGltYXRl
bHkgNDA5NiB1bmNvbXByZXNzZWQgYnl0ZXMuCitBcHBsaWNhdGlvbnMgdGhhdCBtb3N0bHkgZG8g
YnVsayBzY2FucyBvdmVyIHRoZSBjb250ZW50cyBvZiB0aGUKK2RhdGFiYXNlIG1heSB3aXNoIHRv
IGluY3JlYXNlIHRoaXMgc2l6ZS4gIEFwcGxpY2F0aW9ucyB0aGF0IGRvIGEgbG90CitvZiBwb2lu
dCByZWFkcyBvZiBzbWFsbCB2YWx1ZXMgbWF5IHdpc2ggdG8gc3dpdGNoIHRvIGEgc21hbGxlciBi
bG9jaworc2l6ZSBpZiBwZXJmb3JtYW5jZSBtZWFzdXJlbWVudHMgaW5kaWNhdGUgYW4gaW1wcm92
ZW1lbnQuICBUaGVyZSBpc24ndAorbXVjaCBiZW5lZml0IGluIHVzaW5nIGJsb2NrcyBzbWFsbGVy
IHRoYW4gb25lIGtpbG9ieXRlLCBvciBsYXJnZXIgdGhhbgorYSBmZXcgbWVnYWJ5dGVzLiAgQWxz
byBub3RlIHRoYXQgY29tcHJlc3Npb24gd2lsbCBiZSBtb3JlIGVmZmVjdGl2ZQord2l0aCBsYXJn
ZXIgYmxvY2sgc2l6ZXMuCis8cD4KKzxoMj5Db21wcmVzc2lvbjwvaDI+Cis8cD4KK0VhY2ggYmxv
Y2sgaXMgaW5kaXZpZHVhbGx5IGNvbXByZXNzZWQgYmVmb3JlIGJlaW5nIHdyaXR0ZW4gdG8KK3Bl
cnNpc3RlbnQgc3RvcmFnZS4gIENvbXByZXNzaW9uIGlzIG9uIGJ5IGRlZmF1bHQgc2luY2UgdGhl
IGRlZmF1bHQKK2NvbXByZXNzaW9uIG1ldGhvZCBpcyB2ZXJ5IGZhc3QsIGFuZCBpcyBhdXRvbWF0
aWNhbGx5IGRpc2FibGVkIGZvcgordW5jb21wcmVzc2libGUgZGF0YS4gIEluIHJhcmUgY2FzZXMs
IGFwcGxpY2F0aW9ucyBtYXkgd2FudCB0byBkaXNhYmxlCitjb21wcmVzc2lvbiBlbnRpcmVseSwg
YnV0IHNob3VsZCBvbmx5IGRvIHNvIGlmIGJlbmNobWFya3Mgc2hvdyBhCitwZXJmb3JtYW5jZSBp
bXByb3ZlbWVudDoKKzxwPgorPHByZT4KKyAgbGV2ZWxkYjo6T3B0aW9ucyBvcHRpb25zOworICBv
cHRpb25zLmNvbXByZXNzaW9uID0gbGV2ZWxkYjo6a05vQ29tcHJlc3Npb247CisgIC4uLiBsZXZl
bGRiOjpEQjo6T3BlbihvcHRpb25zLCBuYW1lLCAuLi4pIC4uLi4KKzwvcHJlPgorPGgyPkNhY2hl
PC9oMj4KKzxwPgorVGhlIGNvbnRlbnRzIG9mIHRoZSBkYXRhYmFzZSBhcmUgc3RvcmVkIGluIGEg
c2V0IG9mIGZpbGVzIGluIHRoZQorZmlsZXN5c3RlbSBhbmQgZWFjaCBmaWxlIHN0b3JlcyBhIHNl
cXVlbmNlIG9mIGNvbXByZXNzZWQgYmxvY2tzLiAgSWYKKzxjb2RlPm9wdGlvbnMuY2FjaGU8L2Nv
ZGU+IGlzIG5vbi1OVUxMLCBpdCBpcyB1c2VkIHRvIGNhY2hlIGZyZXF1ZW50bHkgdXNlZAordW5j
b21wcmVzc2VkIGJsb2NrIGNvbnRlbnRzLgorPHA+Cis8cHJlPgorICAjaW5jbHVkZSAibGV2ZWxk
Yi9jYWNoZS5oIgorCisgIGxldmVsZGI6Ok9wdGlvbnMgb3B0aW9uczsKKyAgb3B0aW9ucy5jYWNo
ZSA9IGxldmVsZGI6Ok5ld0xSVUNhY2hlKDEwMCAqIDEwNDg1NzYpOyAgLy8gMTAwTUIgY2FjaGUK
KyAgbGV2ZWxkYjo6REIqIGRiOworICBsZXZlbGRiOjpEQjo6T3BlbihvcHRpb25zLCBuYW1lLCAm
ZGIpOworICAuLi4gdXNlIHRoZSBkYiAuLi4KKyAgZGVsZXRlIGRiCisgIGRlbGV0ZSBvcHRpb25z
LmNhY2hlOworPC9wcmU+CitOb3RlIHRoYXQgdGhlIGNhY2hlIGhvbGRzIHVuY29tcHJlc3NlZCBk
YXRhLCBhbmQgdGhlcmVmb3JlIGl0IHNob3VsZAorYmUgc2l6ZWQgYWNjb3JkaW5nIHRvIGFwcGxp
Y2F0aW9uIGxldmVsIGRhdGEgc2l6ZXMsIHdpdGhvdXQgYW55CityZWR1Y3Rpb24gZnJvbSBjb21w
cmVzc2lvbi4gIChDYWNoaW5nIG9mIGNvbXByZXNzZWQgYmxvY2tzIGlzIGxlZnQgdG8KK3RoZSBv
cGVyYXRpbmcgc3lzdGVtIGJ1ZmZlciBjYWNoZSwgb3IgYW55IGN1c3RvbSA8Y29kZT5FbnY8L2Nv
ZGU+CitpbXBsZW1lbnRhdGlvbiBwcm92aWRlZCBieSB0aGUgY2xpZW50LikKKzxwPgorV2hlbiBw
ZXJmb3JtaW5nIGEgYnVsayByZWFkLCB0aGUgYXBwbGljYXRpb24gbWF5IHdpc2ggdG8gZGlzYWJs
ZQorY2FjaGluZyBzbyB0aGF0IHRoZSBkYXRhIHByb2Nlc3NlZCBieSB0aGUgYnVsayByZWFkIGRv
ZXMgbm90IGVuZCB1cAorZGlzcGxhY2luZyBtb3N0IG9mIHRoZSBjYWNoZWQgY29udGVudHMuICBB
IHBlci1pdGVyYXRvciBvcHRpb24gY2FuIGJlCit1c2VkIHRvIGFjaGlldmUgdGhpczoKKzxwPgor
PHByZT4KKyAgbGV2ZWxkYjo6UmVhZE9wdGlvbnMgb3B0aW9uczsKKyAgb3B0aW9ucy5maWxsX2Nh
Y2hlID0gZmFsc2U7CisgIGxldmVsZGI6Okl0ZXJhdG9yKiBpdCA9IGRiLSZndDtOZXdJdGVyYXRv
cihvcHRpb25zKTsKKyAgZm9yIChpdC0mZ3Q7U2Vla1RvRmlyc3QoKTsgaXQtJmd0O1ZhbGlkKCk7
IGl0LSZndDtOZXh0KCkpIHsKKyAgICAuLi4KKyAgfQorPC9wcmU+Cis8aDI+S2V5IExheW91dDwv
aDI+Cis8cD4KK05vdGUgdGhhdCB0aGUgdW5pdCBvZiBkaXNrIHRyYW5zZmVyIGFuZCBjYWNoaW5n
IGlzIGEgYmxvY2suICBBZGphY2VudAora2V5cyAoYWNjb3JkaW5nIHRvIHRoZSBkYXRhYmFzZSBz
b3J0IG9yZGVyKSB3aWxsIHVzdWFsbHkgYmUgcGxhY2VkIGluCit0aGUgc2FtZSBibG9jay4gIFRo
ZXJlZm9yZSB0aGUgYXBwbGljYXRpb24gY2FuIGltcHJvdmUgaXRzIHBlcmZvcm1hbmNlCitieSBw
bGFjaW5nIGtleXMgdGhhdCBhcmUgYWNjZXNzZWQgdG9nZXRoZXIgbmVhciBlYWNoIG90aGVyIGFu
ZCBwbGFjaW5nCitpbmZyZXF1ZW50bHkgdXNlZCBrZXlzIGluIGEgc2VwYXJhdGUgcmVnaW9uIG9m
IHRoZSBrZXkgc3BhY2UuCis8cD4KK0ZvciBleGFtcGxlLCBzdXBwb3NlIHdlIGFyZSBpbXBsZW1l
bnRpbmcgYSBzaW1wbGUgZmlsZSBzeXN0ZW0gb24gdG9wCitvZiA8Y29kZT5sZXZlbGRiPC9jb2Rl
Pi4gIFRoZSB0eXBlcyBvZiBlbnRyaWVzIHdlIG1pZ2h0IHdpc2ggdG8gc3RvcmUgYXJlOgorPHA+
Cis8cHJlPgorICAgZmlsZW5hbWUgLSZndDsgcGVybWlzc2lvbi1iaXRzLCBsZW5ndGgsIGxpc3Qg
b2YgZmlsZV9ibG9ja19pZHMKKyAgIGZpbGVfYmxvY2tfaWQgLSZndDsgZGF0YQorPC9wcmU+CitX
ZSBtaWdodCB3YW50IHRvIHByZWZpeCA8Y29kZT5maWxlbmFtZTwvY29kZT4ga2V5cyB3aXRoIG9u
ZSBsZXR0ZXIgKHNheSAnLycpIGFuZCB0aGUKKzxjb2RlPmZpbGVfYmxvY2tfaWQ8L2NvZGU+IGtl
eXMgd2l0aCBhIGRpZmZlcmVudCBsZXR0ZXIgKHNheSAnMCcpIHNvIHRoYXQgc2NhbnMKK292ZXIg
anVzdCB0aGUgbWV0YWRhdGEgZG8gbm90IGZvcmNlIHVzIHRvIGZldGNoIGFuZCBjYWNoZSBidWxr
eSBmaWxlCitjb250ZW50cy4KKzxwPgorPGgyPkZpbHRlcnM8L2gyPgorPHA+CitCZWNhdXNlIG9m
IHRoZSB3YXkgPGNvZGU+bGV2ZWxkYjwvY29kZT4gZGF0YSBpcyBvcmdhbml6ZWQgb24gZGlzaywK
K2Egc2luZ2xlIDxjb2RlPkdldCgpPC9jb2RlPiBjYWxsIG1heSBpbnZvbHZlIG11bHRpcGxlIHJl
YWRzIGZyb20gZGlzay4KK1RoZSBvcHRpb25hbCA8Y29kZT5GaWx0ZXJQb2xpY3k8L2NvZGU+IG1l
Y2hhbmlzbSBjYW4gYmUgdXNlZCB0byByZWR1Y2UKK3RoZSBudW1iZXIgb2YgZGlzayByZWFkcyBz
dWJzdGFudGlhbGx5LgorPHByZT4KKyAgIGxldmVsZGI6Ok9wdGlvbnMgb3B0aW9uczsKKyAgIG9w
dGlvbnMuZmlsdGVyX3BvbGljeSA9IE5ld0Jsb29tRmlsdGVyUG9saWN5KDEwKTsKKyAgIGxldmVs
ZGI6OkRCKiBkYjsKKyAgIGxldmVsZGI6OkRCOjpPcGVuKG9wdGlvbnMsICIvdG1wL3Rlc3RkYiIs
ICZhbXA7ZGIpOworICAgLi4uIHVzZSB0aGUgZGF0YWJhc2UgLi4uCisgICBkZWxldGUgZGI7Cisg
ICBkZWxldGUgb3B0aW9ucy5maWx0ZXJfcG9saWN5OworPC9wcmU+CitUaGUgcHJlY2VkaW5nIGNv
ZGUgYXNzb2NpYXRlcyBhCis8YSBocmVmPSJodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Js
b29tX2ZpbHRlciI+Qmxvb20gZmlsdGVyPC9hPgorYmFzZWQgZmlsdGVyaW5nIHBvbGljeSB3aXRo
IHRoZSBkYXRhYmFzZS4gIEJsb29tIGZpbHRlciBiYXNlZAorZmlsdGVyaW5nIHJlbGllcyBvbiBr
ZWVwaW5nIHNvbWUgbnVtYmVyIG9mIGJpdHMgb2YgZGF0YSBpbiBtZW1vcnkgcGVyCitrZXkgKGlu
IHRoaXMgY2FzZSAxMCBiaXRzIHBlciBrZXkgc2luY2UgdGhhdCBpcyB0aGUgYXJndW1lbnQgd2Ug
cGFzc2VkCit0byBOZXdCbG9vbUZpbHRlclBvbGljeSkuICBUaGlzIGZpbHRlciB3aWxsIHJlZHVj
ZSB0aGUgbnVtYmVyIG9mIHVubmVjZXNzYXJ5CitkaXNrIHJlYWRzIG5lZWRlZCBmb3IgPGNvZGU+
R2V0KCk8L2NvZGU+IGNhbGxzIGJ5IGEgZmFjdG9yIG9mCithcHByb3hpbWF0ZWx5IGEgMTAwLiAg
SW5jcmVhc2luZyB0aGUgYml0cyBwZXIga2V5IHdpbGwgbGVhZCB0byBhCitsYXJnZXIgcmVkdWN0
aW9uIGF0IHRoZSBjb3N0IG9mIG1vcmUgbWVtb3J5IHVzYWdlLiAgV2UgcmVjb21tZW5kIHRoYXQK
K2FwcGxpY2F0aW9ucyB3aG9zZSB3b3JraW5nIHNldCBkb2VzIG5vdCBmaXQgaW4gbWVtb3J5IGFu
ZCB0aGF0IGRvIGEKK2xvdCBvZiByYW5kb20gcmVhZHMgc2V0IGEgZmlsdGVyIHBvbGljeS4KKzxw
PgorSWYgeW91IGFyZSB1c2luZyBhIGN1c3RvbSBjb21wYXJhdG9yLCB5b3Ugc2hvdWxkIGVuc3Vy
ZSB0aGF0IHRoZSBmaWx0ZXIKK3BvbGljeSB5b3UgYXJlIHVzaW5nIGlzIGNvbXBhdGlibGUgd2l0
aCB5b3VyIGNvbXBhcmF0b3IuICBGb3IgZXhhbXBsZSwKK2NvbnNpZGVyIGEgY29tcGFyYXRvciB0
aGF0IGlnbm9yZXMgdHJhaWxpbmcgc3BhY2VzIHdoZW4gY29tcGFyaW5nIGtleXMuCis8Y29kZT5O
ZXdCbG9vbUZpbHRlclBvbGljeTwvY29kZT4gbXVzdCBub3QgYmUgdXNlZCB3aXRoIHN1Y2ggYSBj
b21wYXJhdG9yLgorSW5zdGVhZCwgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBwcm92aWRlIGEgY3Vz
dG9tIGZpbHRlciBwb2xpY3kgdGhhdAorYWxzbyBpZ25vcmVzIHRyYWlsaW5nIHNwYWNlcy4gIEZv
ciBleGFtcGxlOgorPHByZT4KKyAgY2xhc3MgQ3VzdG9tRmlsdGVyUG9saWN5IDogcHVibGljIGxl
dmVsZGI6OkZpbHRlclBvbGljeSB7CisgICBwcml2YXRlOgorICAgIEZpbHRlclBvbGljeSogYnVp
bHRpbl9wb2xpY3lfOworICAgcHVibGljOgorICAgIEN1c3RvbUZpbHRlclBvbGljeSgpIDogYnVp
bHRpbl9wb2xpY3lfKE5ld0Jsb29tRmlsdGVyUG9saWN5KDEwKSkgeyB9CisgICAgfkN1c3RvbUZp
bHRlclBvbGljeSgpIHsgZGVsZXRlIGJ1aWx0aW5fcG9saWN5XzsgfQorCisgICAgY29uc3QgY2hh
ciogTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJJZ25vcmVUcmFpbGluZ1NwYWNlc0ZpbHRlciI7IH0K
KworICAgIHZvaWQgQ3JlYXRlRmlsdGVyKGNvbnN0IFNsaWNlKiBrZXlzLCBpbnQgbiwgc3RkOjpz
dHJpbmcqIGRzdCkgY29uc3QgeworICAgICAgLy8gVXNlIGJ1aWx0aW4gYmxvb20gZmlsdGVyIGNv
ZGUgYWZ0ZXIgcmVtb3ZpbmcgdHJhaWxpbmcgc3BhY2VzCisgICAgICBzdGQ6OnZlY3RvciZsdDtT
bGljZSZndDsgdHJpbW1lZChuKTsKKyAgICAgIGZvciAoaW50IGkgPSAwOyBpICZsdDsgbjsgaSsr
KSB7CisgICAgICAgIHRyaW1tZWRbaV0gPSBSZW1vdmVUcmFpbGluZ1NwYWNlcyhrZXlzW2ldKTsK
KyAgICAgIH0KKyAgICAgIHJldHVybiBidWlsdGluX3BvbGljeV8tJmd0O0NyZWF0ZUZpbHRlcigm
YW1wO3RyaW1tZWRbaV0sIG4sIGRzdCk7CisgICAgfQorCisgICAgYm9vbCBLZXlNYXlNYXRjaChj
b25zdCBTbGljZSYga2V5LCBjb25zdCBTbGljZSYgZmlsdGVyKSBjb25zdCB7CisgICAgICAvLyBV
c2UgYnVpbHRpbiBibG9vbSBmaWx0ZXIgY29kZSBhZnRlciByZW1vdmluZyB0cmFpbGluZyBzcGFj
ZXMKKyAgICAgIHJldHVybiBidWlsdGluX3BvbGljeV8tJmd0O0tleU1heU1hdGNoKFJlbW92ZVRy
YWlsaW5nU3BhY2VzKGtleSksIGZpbHRlcik7CisgICAgfQorICB9OworPC9wcmU+Cis8cD4KK0Fk
dmFuY2VkIGFwcGxpY2F0aW9ucyBtYXkgcHJvdmlkZSBhIGZpbHRlciBwb2xpY3kgdGhhdCBkb2Vz
IG5vdCB1c2UKK2EgYmxvb20gZmlsdGVyIGJ1dCB1c2VzIHNvbWUgb3RoZXIgbWVjaGFuaXNtIGZv
ciBzdW1tYXJpemluZyBhIHNldAorb2Yga2V5cy4gIFNlZSA8Y29kZT5sZXZlbGRiL2ZpbHRlcl9w
b2xpY3kuaDwvY29kZT4gZm9yIGRldGFpbC4KKzxwPgorPGgxPkNoZWNrc3VtczwvaDE+Cis8cD4K
Kzxjb2RlPmxldmVsZGI8L2NvZGU+IGFzc29jaWF0ZXMgY2hlY2tzdW1zIHdpdGggYWxsIGRhdGEg
aXQgc3RvcmVzIGluIHRoZSBmaWxlIHN5c3RlbS4KK1RoZXJlIGFyZSB0d28gc2VwYXJhdGUgY29u
dHJvbHMgcHJvdmlkZWQgb3ZlciBob3cgYWdncmVzc2l2ZWx5IHRoZXNlCitjaGVja3N1bXMgYXJl
IHZlcmlmaWVkOgorPHA+Cis8dWw+Cis8bGk+IDxjb2RlPlJlYWRPcHRpb25zOjp2ZXJpZnlfY2hl
Y2tzdW1zPC9jb2RlPiBtYXkgYmUgc2V0IHRvIHRydWUgdG8gZm9yY2UKKyAgY2hlY2tzdW0gdmVy
aWZpY2F0aW9uIG9mIGFsbCBkYXRhIHRoYXQgaXMgcmVhZCBmcm9tIHRoZSBmaWxlIHN5c3RlbSBv
bgorICBiZWhhbGYgb2YgYSBwYXJ0aWN1bGFyIHJlYWQuICBCeSBkZWZhdWx0LCBubyBzdWNoIHZl
cmlmaWNhdGlvbiBpcworICBkb25lLgorPHA+Cis8bGk+IDxjb2RlPk9wdGlvbnM6OnBhcmFub2lk
X2NoZWNrczwvY29kZT4gbWF5IGJlIHNldCB0byB0cnVlIGJlZm9yZSBvcGVuaW5nIGEKKyAgZGF0
YWJhc2UgdG8gbWFrZSB0aGUgZGF0YWJhc2UgaW1wbGVtZW50YXRpb24gcmFpc2UgYW4gZXJyb3Ig
YXMgc29vbiBhcworICBpdCBkZXRlY3RzIGFuIGludGVybmFsIGNvcnJ1cHRpb24uICBEZXBlbmRp
bmcgb24gd2hpY2ggcG9ydGlvbiBvZiB0aGUKKyAgZGF0YWJhc2UgaGFzIGJlZW4gY29ycnVwdGVk
LCB0aGUgZXJyb3IgbWF5IGJlIHJhaXNlZCB3aGVuIHRoZSBkYXRhYmFzZQorICBpcyBvcGVuZWQs
IG9yIGxhdGVyIGJ5IGFub3RoZXIgZGF0YWJhc2Ugb3BlcmF0aW9uLiAgQnkgZGVmYXVsdCwKKyAg
cGFyYW5vaWQgY2hlY2tpbmcgaXMgb2ZmIHNvIHRoYXQgdGhlIGRhdGFiYXNlIGNhbiBiZSB1c2Vk
IGV2ZW4gaWYKKyAgcGFydHMgb2YgaXRzIHBlcnNpc3RlbnQgc3RvcmFnZSBoYXZlIGJlZW4gY29y
cnVwdGVkLgorPHA+CisgIElmIGEgZGF0YWJhc2UgaXMgY29ycnVwdGVkIChwZXJoYXBzIGl0IGNh
bm5vdCBiZSBvcGVuZWQgd2hlbgorICBwYXJhbm9pZCBjaGVja2luZyBpcyB0dXJuZWQgb24pLCB0
aGUgPGNvZGU+bGV2ZWxkYjo6UmVwYWlyREI8L2NvZGU+IGZ1bmN0aW9uCisgIG1heSBiZSB1c2Vk
IHRvIHJlY292ZXIgYXMgbXVjaCBvZiB0aGUgZGF0YSBhcyBwb3NzaWJsZQorPHA+Cis8L3VsPgor
PGgxPkFwcHJveGltYXRlIFNpemVzPC9oMT4KKzxwPgorVGhlIDxjb2RlPkdldEFwcHJveGltYXRl
U2l6ZXM8L2NvZGU+IG1ldGhvZCBjYW4gdXNlZCB0byBnZXQgdGhlIGFwcHJveGltYXRlCitudW1i
ZXIgb2YgYnl0ZXMgb2YgZmlsZSBzeXN0ZW0gc3BhY2UgdXNlZCBieSBvbmUgb3IgbW9yZSBrZXkg
cmFuZ2VzLgorPHA+Cis8cHJlPgorICAgbGV2ZWxkYjo6UmFuZ2UgcmFuZ2VzWzJdOworICAgcmFu
Z2VzWzBdID0gbGV2ZWxkYjo6UmFuZ2UoImEiLCAiYyIpOworICAgcmFuZ2VzWzFdID0gbGV2ZWxk
Yjo6UmFuZ2UoIngiLCAieiIpOworICAgdWludDY0X3Qgc2l6ZXNbMl07CisgICBsZXZlbGRiOjpT
dGF0dXMgcyA9IGRiLSZndDtHZXRBcHByb3hpbWF0ZVNpemVzKHJhbmdlcywgMiwgc2l6ZXMpOwor
PC9wcmU+CitUaGUgcHJlY2VkaW5nIGNhbGwgd2lsbCBzZXQgPGNvZGU+c2l6ZXNbMF08L2NvZGU+
IHRvIHRoZSBhcHByb3hpbWF0ZSBudW1iZXIgb2YKK2J5dGVzIG9mIGZpbGUgc3lzdGVtIHNwYWNl
IHVzZWQgYnkgdGhlIGtleSByYW5nZSA8Y29kZT5bYS4uYyk8L2NvZGU+IGFuZAorPGNvZGU+c2l6
ZXNbMV08L2NvZGU+IHRvIHRoZSBhcHByb3hpbWF0ZSBudW1iZXIgb2YgYnl0ZXMgdXNlZCBieSB0
aGUga2V5IHJhbmdlCis8Y29kZT5beC4ueik8L2NvZGU+LgorPHA+Cis8aDE+RW52aXJvbm1lbnQ8
L2gxPgorPHA+CitBbGwgZmlsZSBvcGVyYXRpb25zIChhbmQgb3RoZXIgb3BlcmF0aW5nIHN5c3Rl
bSBjYWxscykgaXNzdWVkIGJ5IHRoZQorPGNvZGU+bGV2ZWxkYjwvY29kZT4gaW1wbGVtZW50YXRp
b24gYXJlIHJvdXRlZCB0aHJvdWdoIGEgPGNvZGU+bGV2ZWxkYjo6RW52PC9jb2RlPiBvYmplY3Qu
CitTb3BoaXN0aWNhdGVkIGNsaWVudHMgbWF5IHdpc2ggdG8gcHJvdmlkZSB0aGVpciBvd24gPGNv
ZGU+RW52PC9jb2RlPgoraW1wbGVtZW50YXRpb24gdG8gZ2V0IGJldHRlciBjb250cm9sLiAgRm9y
IGV4YW1wbGUsIGFuIGFwcGxpY2F0aW9uIG1heQoraW50cm9kdWNlIGFydGlmaWNpYWwgZGVsYXlz
IGluIHRoZSBmaWxlIElPIHBhdGhzIHRvIGxpbWl0IHRoZSBpbXBhY3QKK29mIDxjb2RlPmxldmVs
ZGI8L2NvZGU+IG9uIG90aGVyIGFjdGl2aXRpZXMgaW4gdGhlIHN5c3RlbS4KKzxwPgorPHByZT4K
KyAgY2xhc3MgU2xvd0VudiA6IHB1YmxpYyBsZXZlbGRiOjpFbnYgeworICAgIC4uIGltcGxlbWVu
dGF0aW9uIG9mIHRoZSBFbnYgaW50ZXJmYWNlIC4uLgorICB9OworCisgIFNsb3dFbnYgZW52Owor
ICBsZXZlbGRiOjpPcHRpb25zIG9wdGlvbnM7CisgIG9wdGlvbnMuZW52ID0gJmFtcDtlbnY7Cisg
IFN0YXR1cyBzID0gbGV2ZWxkYjo6REI6Ok9wZW4ob3B0aW9ucywgLi4uKTsKKzwvcHJlPgorPGgx
PlBvcnRpbmc8L2gxPgorPHA+Cis8Y29kZT5sZXZlbGRiPC9jb2RlPiBtYXkgYmUgcG9ydGVkIHRv
IGEgbmV3IHBsYXRmb3JtIGJ5IHByb3ZpZGluZyBwbGF0Zm9ybQorc3BlY2lmaWMgaW1wbGVtZW50
YXRpb25zIG9mIHRoZSB0eXBlcy9tZXRob2RzL2Z1bmN0aW9ucyBleHBvcnRlZCBieQorPGNvZGU+
bGV2ZWxkYi9wb3J0L3BvcnQuaDwvY29kZT4uICBTZWUgPGNvZGU+bGV2ZWxkYi9wb3J0L3BvcnRf
ZXhhbXBsZS5oPC9jb2RlPiBmb3IgbW9yZQorZGV0YWlscy4KKzxwPgorSW4gYWRkaXRpb24sIHRo
ZSBuZXcgcGxhdGZvcm0gbWF5IG5lZWQgYSBuZXcgZGVmYXVsdCA8Y29kZT5sZXZlbGRiOjpFbnY8
L2NvZGU+CitpbXBsZW1lbnRhdGlvbi4gIFNlZSA8Y29kZT5sZXZlbGRiL3V0aWwvZW52X3Bvc2l4
Lmg8L2NvZGU+IGZvciBhbiBleGFtcGxlLgorCis8aDE+T3RoZXIgSW5mb3JtYXRpb248L2gxPgor
Cis8cD4KK0RldGFpbHMgYWJvdXQgdGhlIDxjb2RlPmxldmVsZGI8L2NvZGU+IGltcGxlbWVudGF0
aW9uIG1heSBiZSBmb3VuZCBpbgordGhlIGZvbGxvd2luZyBkb2N1bWVudHM6Cis8dWw+Cis8bGk+
IDxhIGhyZWY9ImltcGwuaHRtbCI+SW1wbGVtZW50YXRpb24gbm90ZXM8L2E+Cis8bGk+IDxhIGhy
ZWY9InRhYmxlX2Zvcm1hdC50eHQiPkZvcm1hdCBvZiBhbiBpbW11dGFibGUgVGFibGUgZmlsZTwv
YT4KKzxsaT4gPGEgaHJlZj0ibG9nX2Zvcm1hdC50eHQiPkZvcm1hdCBvZiBhIGxvZyBmaWxlPC9h
PgorPC91bD4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGV2ZWxkYi9kb2MvbG9nX2Zvcm1hdC50eHQgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRi
L2RvYy9sb2dfZm9ybWF0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MjI4ZjYyNGRlNDM0N2MxMTRiODc1MjBj
MTJhMWFlMzk0MjVkNDExCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGV2
ZWxkYi9kb2MvbG9nX2Zvcm1hdC50eHQKQEAgLTAsMCArMSw3NSBAQAorVGhlIGxvZyBmaWxlIGNv
bnRlbnRzIGFyZSBhIHNlcXVlbmNlIG9mIDMyS0IgYmxvY2tzLiAgVGhlIG9ubHkKK2V4Y2VwdGlv
biBpcyB0aGF0IHRoZSB0YWlsIG9mIHRoZSBmaWxlIG1heSBjb250YWluIGEgcGFydGlhbCBibG9j
ay4KKworRWFjaCBibG9jayBjb25zaXN0cyBvZiBhIHNlcXVlbmNlIG9mIHJlY29yZHM6CisgICBi
bG9jayA6PSByZWNvcmQqIHRyYWlsZXI/CisgICByZWNvcmQgOj0KKwljaGVja3N1bTogdWludDMy
CS8vIGNyYzMyYyBvZiB0eXBlIGFuZCBkYXRhW10gOyBsaXR0bGUtZW5kaWFuCisJbGVuZ3RoOiB1
aW50MTYJCS8vIGxpdHRsZS1lbmRpYW4KKwl0eXBlOiB1aW50OAkJLy8gT25lIG9mIEZVTEwsIEZJ
UlNULCBNSURETEUsIExBU1QKKwlkYXRhOiB1aW50OFtsZW5ndGhdCisKK0EgcmVjb3JkIG5ldmVy
IHN0YXJ0cyB3aXRoaW4gdGhlIGxhc3Qgc2l4IGJ5dGVzIG9mIGEgYmxvY2sgKHNpbmNlIGl0Cit3
b24ndCBmaXQpLiAgQW55IGxlZnRvdmVyIGJ5dGVzIGhlcmUgZm9ybSB0aGUgdHJhaWxlciwgd2hp
Y2ggbXVzdAorY29uc2lzdCBlbnRpcmVseSBvZiB6ZXJvIGJ5dGVzIGFuZCBtdXN0IGJlIHNraXBw
ZWQgYnkgcmVhZGVycy4gIAorCitBc2lkZTogaWYgZXhhY3RseSBzZXZlbiBieXRlcyBhcmUgbGVm
dCBpbiB0aGUgY3VycmVudCBibG9jaywgYW5kIGEgbmV3Citub24temVybyBsZW5ndGggcmVjb3Jk
IGlzIGFkZGVkLCB0aGUgd3JpdGVyIG11c3QgZW1pdCBhIEZJUlNUIHJlY29yZAorKHdoaWNoIGNv
bnRhaW5zIHplcm8gYnl0ZXMgb2YgdXNlciBkYXRhKSB0byBmaWxsIHVwIHRoZSB0cmFpbGluZyBz
ZXZlbgorYnl0ZXMgb2YgdGhlIGJsb2NrIGFuZCB0aGVuIGVtaXQgYWxsIG9mIHRoZSB1c2VyIGRh
dGEgaW4gc3Vic2VxdWVudAorYmxvY2tzLgorCitNb3JlIHR5cGVzIG1heSBiZSBhZGRlZCBpbiB0
aGUgZnV0dXJlLiAgU29tZSBSZWFkZXJzIG1heSBza2lwIHJlY29yZAordHlwZXMgdGhleSBkbyBu
b3QgdW5kZXJzdGFuZCwgb3RoZXJzIG1heSByZXBvcnQgdGhhdCBzb21lIGRhdGEgd2FzCitza2lw
cGVkLgorCitGVUxMID09IDEKK0ZJUlNUID09IDIKK01JRERMRSA9PSAzCitMQVNUID09IDQKKwor
VGhlIEZVTEwgcmVjb3JkIGNvbnRhaW5zIHRoZSBjb250ZW50cyBvZiBhbiBlbnRpcmUgdXNlciBy
ZWNvcmQuCisKK0ZJUlNULCBNSURETEUsIExBU1QgYXJlIHR5cGVzIHVzZWQgZm9yIHVzZXIgcmVj
b3JkcyB0aGF0IGhhdmUgYmVlbgorc3BsaXQgaW50byBtdWx0aXBsZSBmcmFnbWVudHMgKHR5cGlj
YWxseSBiZWNhdXNlIG9mIGJsb2NrIGJvdW5kYXJpZXMpLgorRklSU1QgaXMgdGhlIHR5cGUgb2Yg
dGhlIGZpcnN0IGZyYWdtZW50IG9mIGEgdXNlciByZWNvcmQsIExBU1QgaXMgdGhlCit0eXBlIG9m
IHRoZSBsYXN0IGZyYWdtZW50IG9mIGEgdXNlciByZWNvcmQsIGFuZCBNSUQgaXMgdGhlIHR5cGUg
b2YgYWxsCitpbnRlcmlvciBmcmFnbWVudHMgb2YgYSB1c2VyIHJlY29yZC4KKworRXhhbXBsZTog
Y29uc2lkZXIgYSBzZXF1ZW5jZSBvZiB1c2VyIHJlY29yZHM6CisgICBBOiBsZW5ndGggMTAwMAor
ICAgQjogbGVuZ3RoIDk3MjcwCisgICBDOiBsZW5ndGggODAwMAorQSB3aWxsIGJlIHN0b3JlZCBh
cyBhIEZVTEwgcmVjb3JkIGluIHRoZSBmaXJzdCBibG9jay4KKworQiB3aWxsIGJlIHNwbGl0IGlu
dG8gdGhyZWUgZnJhZ21lbnRzOiBmaXJzdCBmcmFnbWVudCBvY2N1cGllcyB0aGUgcmVzdAorb2Yg
dGhlIGZpcnN0IGJsb2NrLCBzZWNvbmQgZnJhZ21lbnQgb2NjdXBpZXMgdGhlIGVudGlyZXR5IG9m
IHRoZQorc2Vjb25kIGJsb2NrLCBhbmQgdGhlIHRoaXJkIGZyYWdtZW50IG9jY3VwaWVzIGEgcHJl
Zml4IG9mIHRoZSB0aGlyZAorYmxvY2suICBUaGlzIHdpbGwgbGVhdmUgc2l4IGJ5dGVzIGZyZWUg
aW4gdGhlIHRoaXJkIGJsb2NrLCB3aGljaCB3aWxsCitiZSBsZWZ0IGVtcHR5IGFzIHRoZSB0cmFp
bGVyLgorCitDIHdpbGwgYmUgc3RvcmVkIGFzIGEgRlVMTCByZWNvcmQgaW4gdGhlIGZvdXJ0aCBi
bG9jay4KKworPT09PT09PT09PT09PT09PT09PQorCitTb21lIGJlbmVmaXRzIG92ZXIgdGhlIHJl
Y29yZGlvIGZvcm1hdDoKKworKDEpIFdlIGRvIG5vdCBuZWVkIGFueSBoZXVyaXN0aWNzIGZvciBy
ZXN5bmNpbmcgLSBqdXN0IGdvIHRvIG5leHQKK2Jsb2NrIGJvdW5kYXJ5IGFuZCBzY2FuLiAgSWYg
dGhlcmUgaXMgYSBjb3JydXB0aW9uLCBza2lwIHRvIHRoZSBuZXh0CitibG9jay4gIEFzIGEgc2lk
ZS1iZW5lZml0LCB3ZSBkbyBub3QgZ2V0IGNvbmZ1c2VkIHdoZW4gcGFydCBvZiB0aGUKK2NvbnRl
bnRzIG9mIG9uZSBsb2cgZmlsZSBhcmUgZW1iZWRkZWQgYXMgYSByZWNvcmQgaW5zaWRlIGFub3Ro
ZXIgbG9nCitmaWxlLgorCisoMikgU3BsaXR0aW5nIGF0IGFwcHJveGltYXRlIGJvdW5kYXJpZXMg
KGUuZy4sIGZvciBtYXByZWR1Y2UpIGlzCitzaW1wbGU6IGZpbmQgdGhlIG5leHQgYmxvY2sgYm91
bmRhcnkgYW5kIHNraXAgcmVjb3JkcyB1bnRpbCB3ZQoraGl0IGEgRlVMTCBvciBGSVJTVCByZWNv
cmQuCisKKygzKSBXZSBkbyBub3QgbmVlZCBleHRyYSBidWZmZXJpbmcgZm9yIGxhcmdlIHJlY29y
ZHMuCisKK1NvbWUgZG93bnNpZGVzIGNvbXBhcmVkIHRvIHJlY29yZGlvIGZvcm1hdDoKKworKDEp
IE5vIHBhY2tpbmcgb2YgdGlueSByZWNvcmRzLiAgVGhpcyBjb3VsZCBiZSBmaXhlZCBieSBhZGRp
bmcgYSBuZXcKK3JlY29yZCB0eXBlLCBzbyBpdCBpcyBhIHNob3J0Y29taW5nIG9mIHRoZSBjdXJy
ZW50IGltcGxlbWVudGF0aW9uLAorbm90IG5lY2Vzc2FyaWx5IHRoZSBmb3JtYXQuCisKKygyKSBO
byBjb21wcmVzc2lvbi4gIEFnYWluLCB0aGlzIGNvdWxkIGJlIGZpeGVkIGJ5IGFkZGluZyBuZXcg
cmVjb3JkIHR5cGVzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kb2Mv
dGFibGVfZm9ybWF0LnR4dCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZG9jL3RhYmxlX2Zv
cm1hdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uY2E4ZjliNDQ2MGFkODVkOWUwOWYxNGE5NTllZDQ3YmQyODEy
ZWRiNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZG9jL3Rh
YmxlX2Zvcm1hdC50eHQKQEAgLTAsMCArMSwxMDQgQEAKK0ZpbGUgZm9ybWF0Cis9PT09PT09PT09
PQorCisgIDxiZWdpbm5pbmdfb2ZfZmlsZT4KKyAgW2RhdGEgYmxvY2sgMV0KKyAgW2RhdGEgYmxv
Y2sgMl0KKyAgLi4uCisgIFtkYXRhIGJsb2NrIE5dCisgIFttZXRhIGJsb2NrIDFdCisgIC4uLgor
ICBbbWV0YSBibG9jayBLXQorICBbbWV0YWluZGV4IGJsb2NrXQorICBbaW5kZXggYmxvY2tdCisg
IFtGb290ZXJdICAgICAgICAoZml4ZWQgc2l6ZTsgc3RhcnRzIGF0IGZpbGVfc2l6ZSAtIHNpemVv
ZihGb290ZXIpKQorICA8ZW5kX29mX2ZpbGU+CisKK1RoZSBmaWxlIGNvbnRhaW5zIGludGVybmFs
IHBvaW50ZXJzLiAgRWFjaCBzdWNoIHBvaW50ZXIgaXMgY2FsbGVkCithIEJsb2NrSGFuZGxlIGFu
ZCBjb250YWlucyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOgorICBvZmZzZXQ6CSAgICB2YXJp
bnQ2NAorICBzaXplOgkJICAgIHZhcmludDY0CitTZWUgaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2ds
ZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL2VuY29kaW5nI3ZhcmludHMKK2ZvciBhbiBleHBs
YW5hdGlvbiBvZiB2YXJpbnQ2NCBmb3JtYXQuCisKKygxKSBUaGUgc2VxdWVuY2Ugb2Yga2V5L3Zh
bHVlIHBhaXJzIGluIHRoZSBmaWxlIGFyZSBzdG9yZWQgaW4gc29ydGVkCitvcmRlciBhbmQgcGFy
dGl0aW9uZWQgaW50byBhIHNlcXVlbmNlIG9mIGRhdGEgYmxvY2tzLiAgVGhlc2UgYmxvY2tzCitj
b21lIG9uZSBhZnRlciBhbm90aGVyIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuICBFYWNo
IGRhdGEgYmxvY2sKK2lzIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gdGhlIGNvZGUgaW4gYmxvY2tf
YnVpbGRlci5jYywgYW5kIHRoZW4KK29wdGlvbmFsbHkgY29tcHJlc3NlZC4KKworKDIpIEFmdGVy
IHRoZSBkYXRhIGJsb2NrcyB3ZSBzdG9yZSBhIGJ1bmNoIG9mIG1ldGEgYmxvY2tzLiAgVGhlCitz
dXBwb3J0ZWQgbWV0YSBibG9jayB0eXBlcyBhcmUgZGVzY3JpYmVkIGJlbG93LiAgTW9yZSBtZXRh
IGJsb2NrIHR5cGVzCittYXkgYmUgYWRkZWQgaW4gdGhlIGZ1dHVyZS4gIEVhY2ggbWV0YSBibG9j
ayBpcyBhZ2FpbiBmb3JtYXR0ZWQgdXNpbmcKK2Jsb2NrX2J1aWxkZXIuY2MgYW5kIHRoZW4gb3B0
aW9uYWxseSBjb21wcmVzc2VkLgorCisoMykgQSAibWV0YWluZGV4IiBibG9jay4gIEl0IGNvbnRh
aW5zIG9uZSBlbnRyeSBmb3IgZXZlcnkgb3RoZXIgbWV0YQorYmxvY2sgd2hlcmUgdGhlIGtleSBp
cyB0aGUgbmFtZSBvZiB0aGUgbWV0YSBibG9jayBhbmQgdGhlIHZhbHVlIGlzIGEKK0Jsb2NrSGFu
ZGxlIHBvaW50aW5nIHRvIHRoYXQgbWV0YSBibG9jay4KKworKDQpIEFuICJpbmRleCIgYmxvY2su
ICBUaGlzIGJsb2NrIGNvbnRhaW5zIG9uZSBlbnRyeSBwZXIgZGF0YSBibG9jaywKK3doZXJlIHRo
ZSBrZXkgaXMgYSBzdHJpbmcgPj0gbGFzdCBrZXkgaW4gdGhhdCBkYXRhIGJsb2NrIGFuZCBiZWZv
cmUKK3RoZSBmaXJzdCBrZXkgaW4gdGhlIHN1Y2Nlc3NpdmUgZGF0YSBibG9jay4gIFRoZSB2YWx1
ZSBpcyB0aGUKK0Jsb2NrSGFuZGxlIGZvciB0aGUgZGF0YSBibG9jay4KKworKDYpIEF0IHRoZSB2
ZXJ5IGVuZCBvZiB0aGUgZmlsZSBpcyBhIGZpeGVkIGxlbmd0aCBmb290ZXIgdGhhdCBjb250YWlu
cwordGhlIEJsb2NrSGFuZGxlIG9mIHRoZSBtZXRhaW5kZXggYW5kIGluZGV4IGJsb2NrcyBhcyB3
ZWxsIGFzIGEgbWFnaWMgbnVtYmVyLgorICAgICAgIG1ldGFpbmRleF9oYW5kbGU6IGNoYXJbcF07
ICAgIC8vIEJsb2NrIGhhbmRsZSBmb3IgbWV0YWluZGV4CisgICAgICAgaW5kZXhfaGFuZGxlOiAg
ICAgY2hhcltxXTsgICAgLy8gQmxvY2sgaGFuZGxlIGZvciBpbmRleAorICAgICAgIHBhZGRpbmc6
ICAgICAgICAgIGNoYXJbNDAtcC1xXTsgLy8gemVyb2VkIGJ5dGVzIHRvIG1ha2UgZml4ZWQgbGVu
Z3RoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAoNDA9PTIqQmxv
Y2tIYW5kbGU6OmtNYXhFbmNvZGVkTGVuZ3RoKQorICAgICAgIG1hZ2ljOiAgICAgICAgICAgIGZp
eGVkNjQ7ICAgIC8vID09IDB4ZGI0Nzc1MjQ4YjgwZmI1NyAobGl0dGxlLWVuZGlhbikKKworImZp
bHRlciIgTWV0YSBCbG9jaworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiBhICJGaWx0ZXJQb2xp
Y3kiIHdhcyBzcGVjaWZpZWQgd2hlbiB0aGUgZGF0YWJhc2Ugd2FzIG9wZW5lZCwgYQorZmlsdGVy
IGJsb2NrIGlzIHN0b3JlZCBpbiBlYWNoIHRhYmxlLiAgVGhlICJtZXRhaW5kZXgiIGJsb2NrIGNv
bnRhaW5zCithbiBlbnRyeSB0aGF0IG1hcHMgZnJvbSAiZmlsdGVyLjxOPiIgdG8gdGhlIEJsb2Nr
SGFuZGxlIGZvciB0aGUgZmlsdGVyCitibG9jayB3aGVyZSAiPE4+IiBpcyB0aGUgc3RyaW5nIHJl
dHVybmVkIGJ5IHRoZSBmaWx0ZXIgcG9saWN5J3MKKyJOYW1lKCkiIG1ldGhvZC4KKworVGhlIGZp
bHRlciBibG9jayBzdG9yZXMgYSBzZXF1ZW5jZSBvZiBmaWx0ZXJzLCB3aGVyZSBmaWx0ZXIgaSBj
b250YWlucwordGhlIG91dHB1dCBvZiBGaWx0ZXJQb2xpY3k6OkNyZWF0ZUZpbHRlcigpIG9uIGFs
bCBrZXlzIHRoYXQgYXJlIHN0b3JlZAoraW4gYSBibG9jayB3aG9zZSBmaWxlIG9mZnNldCBmYWxs
cyB3aXRoaW4gdGhlIHJhbmdlCisKKyAgICBbIGkqYmFzZSAuLi4gKGkrMSkqYmFzZS0xIF0KKwor
Q3VycmVudGx5LCAiYmFzZSIgaXMgMktCLiAgU28gZm9yIGV4YW1wbGUsIGlmIGJsb2NrcyBYIGFu
ZCBZIHN0YXJ0IGluCit0aGUgcmFuZ2UgWyAwS0IgLi4gMktCLTEgXSwgYWxsIG9mIHRoZSBrZXlz
IGluIFggYW5kIFkgd2lsbCBiZQorY29udmVydGVkIHRvIGEgZmlsdGVyIGJ5IGNhbGxpbmcgRmls
dGVyUG9saWN5OjpDcmVhdGVGaWx0ZXIoKSwgYW5kIHRoZQorcmVzdWx0aW5nIGZpbHRlciB3aWxs
IGJlIHN0b3JlZCBhcyB0aGUgZmlyc3QgZmlsdGVyIGluIHRoZSBmaWx0ZXIKK2Jsb2NrLgorCitU
aGUgZmlsdGVyIGJsb2NrIGlzIGZvcm1hdHRlZCBhcyBmb2xsb3dzOgorCisgICAgIFtmaWx0ZXIg
MF0KKyAgICAgW2ZpbHRlciAxXQorICAgICBbZmlsdGVyIDJdCisgICAgIC4uLgorICAgICBbZmls
dGVyIE4tMV0KKworICAgICBbb2Zmc2V0IG9mIGZpbHRlciAwXSAgICAgICAgICAgICAgICAgIDog
NCBieXRlcworICAgICBbb2Zmc2V0IG9mIGZpbHRlciAxXSAgICAgICAgICAgICAgICAgIDogNCBi
eXRlcworICAgICBbb2Zmc2V0IG9mIGZpbHRlciAyXSAgICAgICAgICAgICAgICAgIDogNCBieXRl
cworICAgICAuLi4KKyAgICAgW29mZnNldCBvZiBmaWx0ZXIgTi0xXSAgICAgICAgICAgICAgICA6
IDQgYnl0ZXMKKworICAgICBbb2Zmc2V0IG9mIGJlZ2lubmluZyBvZiBvZmZzZXQgYXJyYXldIDog
NCBieXRlcworICAgICBsZyhiYXNlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMSBi
eXRlCisKK1RoZSBvZmZzZXQgYXJyYXkgYXQgdGhlIGVuZCBvZiB0aGUgZmlsdGVyIGJsb2NrIGFs
bG93cyBlZmZpY2llbnQKK21hcHBpbmcgZnJvbSBhIGRhdGEgYmxvY2sgb2Zmc2V0IHRvIHRoZSBj
b3JyZXNwb25kaW5nIGZpbHRlci4KKworInN0YXRzIiBNZXRhIEJsb2NrCistLS0tLS0tLS0tLS0t
LS0tLS0KKworVGhpcyBtZXRhIGJsb2NrIGNvbnRhaW5zIGEgYnVuY2ggb2Ygc3RhdHMuICBUaGUg
a2V5IGlzIHRoZSBuYW1lCitvZiB0aGUgc3RhdGlzdGljLiAgVGhlIHZhbHVlIGNvbnRhaW5zIHRo
ZSBzdGF0aXN0aWMuCitUT0RPKHBvc3RyZWxlYXNlKTogcmVjb3JkIGZvbGxvd2luZyBzdGF0cy4K
KyAgZGF0YSBzaXplCisgIGluZGV4IHNpemUKKyAga2V5IHNpemUgKHVuY29tcHJlc3NlZCkKKyAg
dmFsdWUgc2l6ZSAodW5jb21wcmVzc2VkKQorICBudW1iZXIgb2YgZW50cmllcworICBudW1iZXIg
b2YgZGF0YSBibG9ja3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvaGVs
cGVycy9tZW1lbnYvbWVtZW52LmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9oZWxwZXJz
L21lbWVudi9tZW1lbnYuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTg3OWRlMTIxNDU2YTdjNWMxNjQ1N2ViMzZk
ODVjNjRhZDBhMWI2MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVs
ZGIvaGVscGVycy9tZW1lbnYvbWVtZW52LmNjCkBAIC0wLDAgKzEsMzg0IEBACisvLyBDb3B5cmln
aHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVU
SE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCisKKyNpbmNsdWRlICJoZWxwZXJz
L21lbWVudi9tZW1lbnYuaCIKKworI2luY2x1ZGUgImxldmVsZGIvZW52LmgiCisjaW5jbHVkZSAi
bGV2ZWxkYi9zdGF0dXMuaCIKKyNpbmNsdWRlICJwb3J0L3BvcnQuaCIKKyNpbmNsdWRlICJ1dGls
L211dGV4bG9jay5oIgorI2luY2x1ZGUgPG1hcD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNs
dWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dmVjdG9yPgorCituYW1lc3BhY2UgbGV2ZWxkYiB7CisK
K25hbWVzcGFjZSB7CisKK2NsYXNzIEZpbGVTdGF0ZSB7CisgcHVibGljOgorICAvLyBGaWxlU3Rh
dGVzIGFyZSByZWZlcmVuY2UgY291bnRlZC4gVGhlIGluaXRpYWwgcmVmZXJlbmNlIGNvdW50IGlz
IHplcm8KKyAgLy8gYW5kIHRoZSBjYWxsZXIgbXVzdCBjYWxsIFJlZigpIGF0IGxlYXN0IG9uY2Uu
CisgIEZpbGVTdGF0ZSgpIDogcmVmc18oMCksIHNpemVfKDApIHt9CisKKyAgLy8gSW5jcmVhc2Ug
dGhlIHJlZmVyZW5jZSBjb3VudC4KKyAgdm9pZCBSZWYoKSB7CisgICAgTXV0ZXhMb2NrIGxvY2so
JnJlZnNfbXV0ZXhfKTsKKyAgICArK3JlZnNfOworICB9CisKKyAgLy8gRGVjcmVhc2UgdGhlIHJl
ZmVyZW5jZSBjb3VudC4gRGVsZXRlIGlmIHRoaXMgaXMgdGhlIGxhc3QgcmVmZXJlbmNlLgorICB2
b2lkIFVucmVmKCkgeworICAgIGJvb2wgZG9fZGVsZXRlID0gZmFsc2U7CisKKyAgICB7CisgICAg
ICBNdXRleExvY2sgbG9jaygmcmVmc19tdXRleF8pOworICAgICAgLS1yZWZzXzsKKyAgICAgIGFz
c2VydChyZWZzXyA+PSAwKTsKKyAgICAgIGlmIChyZWZzXyA8PSAwKSB7CisgICAgICAgIGRvX2Rl
bGV0ZSA9IHRydWU7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKGRvX2RlbGV0ZSkgeworICAg
ICAgZGVsZXRlIHRoaXM7CisgICAgfQorICB9CisKKyAgdWludDY0X3QgU2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIHNpemVfOyB9CisKKyAgU3RhdHVzIFJlYWQodWludDY0X3Qgb2Zmc2V0LCBzaXplX3Qg
biwgU2xpY2UqIHJlc3VsdCwgY2hhciogc2NyYXRjaCkgY29uc3QgeworICAgIGlmIChvZmZzZXQg
PiBzaXplXykgeworICAgICAgcmV0dXJuIFN0YXR1czo6SU9FcnJvcigiT2Zmc2V0IGdyZWF0ZXIg
dGhhbiBmaWxlIHNpemUuIik7CisgICAgfQorICAgIGNvbnN0IHVpbnQ2NF90IGF2YWlsYWJsZSA9
IHNpemVfIC0gb2Zmc2V0OworICAgIGlmIChuID4gYXZhaWxhYmxlKSB7CisgICAgICBuID0gYXZh
aWxhYmxlOworICAgIH0KKyAgICBpZiAobiA9PSAwKSB7CisgICAgICAqcmVzdWx0ID0gU2xpY2Uo
KTsKKyAgICAgIHJldHVybiBTdGF0dXM6Ok9LKCk7CisgICAgfQorCisgICAgc2l6ZV90IGJsb2Nr
ID0gb2Zmc2V0IC8ga0Jsb2NrU2l6ZTsKKyAgICBzaXplX3QgYmxvY2tfb2Zmc2V0ID0gb2Zmc2V0
ICUga0Jsb2NrU2l6ZTsKKworICAgIGlmIChuIDw9IGtCbG9ja1NpemUgLSBibG9ja19vZmZzZXQp
IHsKKyAgICAgIC8vIFRoZSByZXF1ZXN0ZWQgYnl0ZXMgYXJlIGFsbCBpbiB0aGUgZmlyc3QgYmxv
Y2suCisgICAgICAqcmVzdWx0ID0gU2xpY2UoYmxvY2tzX1tibG9ja10gKyBibG9ja19vZmZzZXQs
IG4pOworICAgICAgcmV0dXJuIFN0YXR1czo6T0soKTsKKyAgICB9CisKKyAgICBzaXplX3QgYnl0
ZXNfdG9fY29weSA9IG47CisgICAgY2hhciogZHN0ID0gc2NyYXRjaDsKKworICAgIHdoaWxlIChi
eXRlc190b19jb3B5ID4gMCkgeworICAgICAgc2l6ZV90IGF2YWlsID0ga0Jsb2NrU2l6ZSAtIGJs
b2NrX29mZnNldDsKKyAgICAgIGlmIChhdmFpbCA+IGJ5dGVzX3RvX2NvcHkpIHsKKyAgICAgICAg
YXZhaWwgPSBieXRlc190b19jb3B5OworICAgICAgfQorICAgICAgbWVtY3B5KGRzdCwgYmxvY2tz
X1tibG9ja10gKyBibG9ja19vZmZzZXQsIGF2YWlsKTsKKworICAgICAgYnl0ZXNfdG9fY29weSAt
PSBhdmFpbDsKKyAgICAgIGRzdCArPSBhdmFpbDsKKyAgICAgIGJsb2NrKys7CisgICAgICBibG9j
a19vZmZzZXQgPSAwOworICAgIH0KKworICAgICpyZXN1bHQgPSBTbGljZShzY3JhdGNoLCBuKTsK
KyAgICByZXR1cm4gU3RhdHVzOjpPSygpOworICB9CisKKyAgU3RhdHVzIEFwcGVuZChjb25zdCBT
bGljZSYgZGF0YSkgeworICAgIGNvbnN0IGNoYXIqIHNyYyA9IGRhdGEuZGF0YSgpOworICAgIHNp
emVfdCBzcmNfbGVuID0gZGF0YS5zaXplKCk7CisKKyAgICB3aGlsZSAoc3JjX2xlbiA+IDApIHsK
KyAgICAgIHNpemVfdCBhdmFpbDsKKyAgICAgIHNpemVfdCBvZmZzZXQgPSBzaXplXyAlIGtCbG9j
a1NpemU7CisKKyAgICAgIGlmIChvZmZzZXQgIT0gMCkgeworICAgICAgICAvLyBUaGVyZSBpcyBz
b21lIHJvb20gaW4gdGhlIGxhc3QgYmxvY2suCisgICAgICAgIGF2YWlsID0ga0Jsb2NrU2l6ZSAt
IG9mZnNldDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE5vIHJvb20gaW4gdGhlIGxhc3Qg
YmxvY2s7IHB1c2ggbmV3IG9uZS4KKyAgICAgICAgYmxvY2tzXy5wdXNoX2JhY2sobmV3IGNoYXJb
a0Jsb2NrU2l6ZV0pOworICAgICAgICBhdmFpbCA9IGtCbG9ja1NpemU7CisgICAgICB9CisKKyAg
ICAgIGlmIChhdmFpbCA+IHNyY19sZW4pIHsKKyAgICAgICAgYXZhaWwgPSBzcmNfbGVuOworICAg
ICAgfQorICAgICAgbWVtY3B5KGJsb2Nrc18uYmFjaygpICsgb2Zmc2V0LCBzcmMsIGF2YWlsKTsK
KyAgICAgIHNyY19sZW4gLT0gYXZhaWw7CisgICAgICBzcmMgKz0gYXZhaWw7CisgICAgICBzaXpl
XyArPSBhdmFpbDsKKyAgICB9CisKKyAgICByZXR1cm4gU3RhdHVzOjpPSygpOworICB9CisKKyBw
cml2YXRlOgorICAvLyBQcml2YXRlIHNpbmNlIG9ubHkgVW5yZWYoKSBzaG91bGQgYmUgdXNlZCB0
byBkZWxldGUgaXQuCisgIH5GaWxlU3RhdGUoKSB7CisgICAgZm9yIChzdGQ6OnZlY3RvcjxjaGFy
Kj46Oml0ZXJhdG9yIGkgPSBibG9ja3NfLmJlZ2luKCk7IGkgIT0gYmxvY2tzXy5lbmQoKTsKKyAg
ICAgICAgICsraSkgeworICAgICAgZGVsZXRlIFtdICppOworICAgIH0KKyAgfQorCisgIC8vIE5v
IGNvcHlpbmcgYWxsb3dlZC4KKyAgRmlsZVN0YXRlKGNvbnN0IEZpbGVTdGF0ZSYpOworICB2b2lk
IG9wZXJhdG9yPShjb25zdCBGaWxlU3RhdGUmKTsKKworICBwb3J0OjpNdXRleCByZWZzX211dGV4
XzsKKyAgaW50IHJlZnNfOyAgLy8gUHJvdGVjdGVkIGJ5IHJlZnNfbXV0ZXhfOworCisgIC8vIFRo
ZSBmb2xsb3dpbmcgZmllbGRzIGFyZSBub3QgcHJvdGVjdGVkIGJ5IGFueSBtdXRleC4gVGhleSBh
cmUgb25seSBtdXRhYmxlCisgIC8vIHdoaWxlIHRoZSBmaWxlIGlzIGJlaW5nIHdyaXR0ZW4sIGFu
ZCBjb25jdXJyZW50IGFjY2VzcyBpcyBub3QgYWxsb3dlZAorICAvLyB0byB3cml0YWJsZSBmaWxl
cy4KKyAgc3RkOjp2ZWN0b3I8Y2hhcio+IGJsb2Nrc187CisgIHVpbnQ2NF90IHNpemVfOworCisg
IGVudW0geyBrQmxvY2tTaXplID0gOCAqIDEwMjQgfTsKK307CisKK2NsYXNzIFNlcXVlbnRpYWxG
aWxlSW1wbCA6IHB1YmxpYyBTZXF1ZW50aWFsRmlsZSB7CisgcHVibGljOgorICBleHBsaWNpdCBT
ZXF1ZW50aWFsRmlsZUltcGwoRmlsZVN0YXRlKiBmaWxlKSA6IGZpbGVfKGZpbGUpLCBwb3NfKDAp
IHsKKyAgICBmaWxlXy0+UmVmKCk7CisgIH0KKworICB+U2VxdWVudGlhbEZpbGVJbXBsKCkgewor
ICAgIGZpbGVfLT5VbnJlZigpOworICB9CisKKyAgdmlydHVhbCBTdGF0dXMgUmVhZChzaXplX3Qg
biwgU2xpY2UqIHJlc3VsdCwgY2hhciogc2NyYXRjaCkgeworICAgIFN0YXR1cyBzID0gZmlsZV8t
PlJlYWQocG9zXywgbiwgcmVzdWx0LCBzY3JhdGNoKTsKKyAgICBpZiAocy5vaygpKSB7CisgICAg
ICBwb3NfICs9IHJlc3VsdC0+c2l6ZSgpOworICAgIH0KKyAgICByZXR1cm4gczsKKyAgfQorCisg
IHZpcnR1YWwgU3RhdHVzIFNraXAodWludDY0X3QgbikgeworICAgIGlmIChwb3NfID4gZmlsZV8t
PlNpemUoKSkgeworICAgICAgcmV0dXJuIFN0YXR1czo6SU9FcnJvcigicG9zXyA+IGZpbGVfLT5T
aXplKCkiKTsKKyAgICB9CisgICAgY29uc3Qgc2l6ZV90IGF2YWlsYWJsZSA9IGZpbGVfLT5TaXpl
KCkgLSBwb3NfOworICAgIGlmIChuID4gYXZhaWxhYmxlKSB7CisgICAgICBuID0gYXZhaWxhYmxl
OworICAgIH0KKyAgICBwb3NfICs9IG47CisgICAgcmV0dXJuIFN0YXR1czo6T0soKTsKKyAgfQor
CisgcHJpdmF0ZToKKyAgRmlsZVN0YXRlKiBmaWxlXzsKKyAgc2l6ZV90IHBvc187Cit9OworCitj
bGFzcyBSYW5kb21BY2Nlc3NGaWxlSW1wbCA6IHB1YmxpYyBSYW5kb21BY2Nlc3NGaWxlIHsKKyBw
dWJsaWM6CisgIGV4cGxpY2l0IFJhbmRvbUFjY2Vzc0ZpbGVJbXBsKEZpbGVTdGF0ZSogZmlsZSkg
OiBmaWxlXyhmaWxlKSB7CisgICAgZmlsZV8tPlJlZigpOworICB9CisKKyAgflJhbmRvbUFjY2Vz
c0ZpbGVJbXBsKCkgeworICAgIGZpbGVfLT5VbnJlZigpOworICB9CisKKyAgdmlydHVhbCBTdGF0
dXMgUmVhZCh1aW50NjRfdCBvZmZzZXQsIHNpemVfdCBuLCBTbGljZSogcmVzdWx0LAorICAgICAg
ICAgICAgICAgICAgICAgIGNoYXIqIHNjcmF0Y2gpIGNvbnN0IHsKKyAgICByZXR1cm4gZmlsZV8t
PlJlYWQob2Zmc2V0LCBuLCByZXN1bHQsIHNjcmF0Y2gpOworICB9CisKKyBwcml2YXRlOgorICBG
aWxlU3RhdGUqIGZpbGVfOworfTsKKworY2xhc3MgV3JpdGFibGVGaWxlSW1wbCA6IHB1YmxpYyBX
cml0YWJsZUZpbGUgeworIHB1YmxpYzoKKyAgV3JpdGFibGVGaWxlSW1wbChGaWxlU3RhdGUqIGZp
bGUpIDogZmlsZV8oZmlsZSkgeworICAgIGZpbGVfLT5SZWYoKTsKKyAgfQorCisgIH5Xcml0YWJs
ZUZpbGVJbXBsKCkgeworICAgIGZpbGVfLT5VbnJlZigpOworICB9CisKKyAgdmlydHVhbCBTdGF0
dXMgQXBwZW5kKGNvbnN0IFNsaWNlJiBkYXRhKSB7CisgICAgcmV0dXJuIGZpbGVfLT5BcHBlbmQo
ZGF0YSk7CisgIH0KKworICB2aXJ0dWFsIFN0YXR1cyBDbG9zZSgpIHsgcmV0dXJuIFN0YXR1czo6
T0soKTsgfQorICB2aXJ0dWFsIFN0YXR1cyBGbHVzaCgpIHsgcmV0dXJuIFN0YXR1czo6T0soKTsg
fQorICB2aXJ0dWFsIFN0YXR1cyBTeW5jKCkgeyByZXR1cm4gU3RhdHVzOjpPSygpOyB9CisKKyBw
cml2YXRlOgorICBGaWxlU3RhdGUqIGZpbGVfOworfTsKKworY2xhc3MgTm9PcExvZ2dlciA6IHB1
YmxpYyBMb2dnZXIgeworIHB1YmxpYzoKKyAgdmlydHVhbCB2b2lkIExvZ3YoY29uc3QgY2hhciog
Zm9ybWF0LCB2YV9saXN0IGFwKSB7IH0KK307CisKK2NsYXNzIEluTWVtb3J5RW52IDogcHVibGlj
IEVudldyYXBwZXIgeworIHB1YmxpYzoKKyAgZXhwbGljaXQgSW5NZW1vcnlFbnYoRW52KiBiYXNl
X2VudikgOiBFbnZXcmFwcGVyKGJhc2VfZW52KSB7IH0KKworICB2aXJ0dWFsIH5Jbk1lbW9yeUVu
digpIHsKKyAgICBmb3IgKEZpbGVTeXN0ZW06Oml0ZXJhdG9yIGkgPSBmaWxlX21hcF8uYmVnaW4o
KTsgaSAhPSBmaWxlX21hcF8uZW5kKCk7ICsraSl7CisgICAgICBpLT5zZWNvbmQtPlVucmVmKCk7
CisgICAgfQorICB9CisKKyAgLy8gUGFydGlhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRW52IGlu
dGVyZmFjZS4KKyAgdmlydHVhbCBTdGF0dXMgTmV3U2VxdWVudGlhbEZpbGUoY29uc3Qgc3RkOjpz
dHJpbmcmIGZuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXF1ZW50
aWFsRmlsZSoqIHJlc3VsdCkgeworICAgIE11dGV4TG9jayBsb2NrKCZtdXRleF8pOworICAgIGlm
IChmaWxlX21hcF8uZmluZChmbmFtZSkgPT0gZmlsZV9tYXBfLmVuZCgpKSB7CisgICAgICAqcmVz
dWx0ID0gTlVMTDsKKyAgICAgIHJldHVybiBTdGF0dXM6OklPRXJyb3IoZm5hbWUsICJGaWxlIG5v
dCBmb3VuZCIpOworICAgIH0KKworICAgICpyZXN1bHQgPSBuZXcgU2VxdWVudGlhbEZpbGVJbXBs
KGZpbGVfbWFwX1tmbmFtZV0pOworICAgIHJldHVybiBTdGF0dXM6Ok9LKCk7CisgIH0KKworICB2
aXJ0dWFsIFN0YXR1cyBOZXdSYW5kb21BY2Nlc3NGaWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBmbmFt
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSYW5kb21BY2Nlc3NGaWxl
KiogcmVzdWx0KSB7CisgICAgTXV0ZXhMb2NrIGxvY2soJm11dGV4Xyk7CisgICAgaWYgKGZpbGVf
bWFwXy5maW5kKGZuYW1lKSA9PSBmaWxlX21hcF8uZW5kKCkpIHsKKyAgICAgICpyZXN1bHQgPSBO
VUxMOworICAgICAgcmV0dXJuIFN0YXR1czo6SU9FcnJvcihmbmFtZSwgIkZpbGUgbm90IGZvdW5k
Iik7CisgICAgfQorCisgICAgKnJlc3VsdCA9IG5ldyBSYW5kb21BY2Nlc3NGaWxlSW1wbChmaWxl
X21hcF9bZm5hbWVdKTsKKyAgICByZXR1cm4gU3RhdHVzOjpPSygpOworICB9CisKKyAgdmlydHVh
bCBTdGF0dXMgTmV3V3JpdGFibGVGaWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBmbmFtZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlRmlsZSoqIHJlc3VsdCkgeworICAg
IE11dGV4TG9jayBsb2NrKCZtdXRleF8pOworICAgIGlmIChmaWxlX21hcF8uZmluZChmbmFtZSkg
IT0gZmlsZV9tYXBfLmVuZCgpKSB7CisgICAgICBEZWxldGVGaWxlSW50ZXJuYWwoZm5hbWUpOwor
ICAgIH0KKworICAgIEZpbGVTdGF0ZSogZmlsZSA9IG5ldyBGaWxlU3RhdGUoKTsKKyAgICBmaWxl
LT5SZWYoKTsKKyAgICBmaWxlX21hcF9bZm5hbWVdID0gZmlsZTsKKworICAgICpyZXN1bHQgPSBu
ZXcgV3JpdGFibGVGaWxlSW1wbChmaWxlKTsKKyAgICByZXR1cm4gU3RhdHVzOjpPSygpOworICB9
CisKKyAgdmlydHVhbCBib29sIEZpbGVFeGlzdHMoY29uc3Qgc3RkOjpzdHJpbmcmIGZuYW1lKSB7
CisgICAgTXV0ZXhMb2NrIGxvY2soJm11dGV4Xyk7CisgICAgcmV0dXJuIGZpbGVfbWFwXy5maW5k
KGZuYW1lKSAhPSBmaWxlX21hcF8uZW5kKCk7CisgIH0KKworICB2aXJ0dWFsIFN0YXR1cyBHZXRD
aGlsZHJlbihjb25zdCBzdGQ6OnN0cmluZyYgZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4qIHJlc3VsdCkgeworICAgIE11dGV4TG9jayBs
b2NrKCZtdXRleF8pOworICAgIHJlc3VsdC0+Y2xlYXIoKTsKKworICAgIGZvciAoRmlsZVN5c3Rl
bTo6aXRlcmF0b3IgaSA9IGZpbGVfbWFwXy5iZWdpbigpOyBpICE9IGZpbGVfbWFwXy5lbmQoKTsg
KytpKXsKKyAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlbmFtZSA9IGktPmZpcnN0OworCisg
ICAgICBpZiAoZmlsZW5hbWUuc2l6ZSgpID49IGRpci5zaXplKCkgKyAxICYmIGZpbGVuYW1lW2Rp
ci5zaXplKCldID09ICcvJyAmJgorICAgICAgICAgIFNsaWNlKGZpbGVuYW1lKS5zdGFydHNfd2l0
aChTbGljZShkaXIpKSkgeworICAgICAgICByZXN1bHQtPnB1c2hfYmFjayhmaWxlbmFtZS5zdWJz
dHIoZGlyLnNpemUoKSArIDEpKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gU3RhdHVz
OjpPSygpOworICB9CisKKyAgdm9pZCBEZWxldGVGaWxlSW50ZXJuYWwoY29uc3Qgc3RkOjpzdHJp
bmcmIGZuYW1lKSB7CisgICAgaWYgKGZpbGVfbWFwXy5maW5kKGZuYW1lKSA9PSBmaWxlX21hcF8u
ZW5kKCkpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmaWxlX21hcF9bZm5hbWVdLT5V
bnJlZigpOworICAgIGZpbGVfbWFwXy5lcmFzZShmbmFtZSk7CisgIH0KKworICB2aXJ0dWFsIFN0
YXR1cyBEZWxldGVGaWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBmbmFtZSkgeworICAgIE11dGV4TG9j
ayBsb2NrKCZtdXRleF8pOworICAgIGlmIChmaWxlX21hcF8uZmluZChmbmFtZSkgPT0gZmlsZV9t
YXBfLmVuZCgpKSB7CisgICAgICByZXR1cm4gU3RhdHVzOjpJT0Vycm9yKGZuYW1lLCAiRmlsZSBu
b3QgZm91bmQiKTsKKyAgICB9CisKKyAgICBEZWxldGVGaWxlSW50ZXJuYWwoZm5hbWUpOworICAg
IHJldHVybiBTdGF0dXM6Ok9LKCk7CisgIH0KKworICB2aXJ0dWFsIFN0YXR1cyBDcmVhdGVEaXIo
Y29uc3Qgc3RkOjpzdHJpbmcmIGRpcm5hbWUpIHsKKyAgICByZXR1cm4gU3RhdHVzOjpPSygpOwor
ICB9CisKKyAgdmlydHVhbCBTdGF0dXMgRGVsZXRlRGlyKGNvbnN0IHN0ZDo6c3RyaW5nJiBkaXJu
YW1lKSB7CisgICAgcmV0dXJuIFN0YXR1czo6T0soKTsKKyAgfQorCisgIHZpcnR1YWwgU3RhdHVz
IEdldEZpbGVTaXplKGNvbnN0IHN0ZDo6c3RyaW5nJiBmbmFtZSwgdWludDY0X3QqIGZpbGVfc2l6
ZSkgeworICAgIE11dGV4TG9jayBsb2NrKCZtdXRleF8pOworICAgIGlmIChmaWxlX21hcF8uZmlu
ZChmbmFtZSkgPT0gZmlsZV9tYXBfLmVuZCgpKSB7CisgICAgICByZXR1cm4gU3RhdHVzOjpJT0Vy
cm9yKGZuYW1lLCAiRmlsZSBub3QgZm91bmQiKTsKKyAgICB9CisKKyAgICAqZmlsZV9zaXplID0g
ZmlsZV9tYXBfW2ZuYW1lXS0+U2l6ZSgpOworICAgIHJldHVybiBTdGF0dXM6Ok9LKCk7CisgIH0K
KworICB2aXJ0dWFsIFN0YXR1cyBSZW5hbWVGaWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBzcmMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRhcmdldCkgewor
ICAgIE11dGV4TG9jayBsb2NrKCZtdXRleF8pOworICAgIGlmIChmaWxlX21hcF8uZmluZChzcmMp
ID09IGZpbGVfbWFwXy5lbmQoKSkgeworICAgICAgcmV0dXJuIFN0YXR1czo6SU9FcnJvcihzcmMs
ICJGaWxlIG5vdCBmb3VuZCIpOworICAgIH0KKworICAgIERlbGV0ZUZpbGVJbnRlcm5hbCh0YXJn
ZXQpOworICAgIGZpbGVfbWFwX1t0YXJnZXRdID0gZmlsZV9tYXBfW3NyY107CisgICAgZmlsZV9t
YXBfLmVyYXNlKHNyYyk7CisgICAgcmV0dXJuIFN0YXR1czo6T0soKTsKKyAgfQorCisgIHZpcnR1
YWwgU3RhdHVzIExvY2tGaWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBmbmFtZSwgRmlsZUxvY2sqKiBs
b2NrKSB7CisgICAgKmxvY2sgPSBuZXcgRmlsZUxvY2s7CisgICAgcmV0dXJuIFN0YXR1czo6T0so
KTsKKyAgfQorCisgIHZpcnR1YWwgU3RhdHVzIFVubG9ja0ZpbGUoRmlsZUxvY2sqIGxvY2spIHsK
KyAgICBkZWxldGUgbG9jazsKKyAgICByZXR1cm4gU3RhdHVzOjpPSygpOworICB9CisKKyAgdmly
dHVhbCBTdGF0dXMgR2V0VGVzdERpcmVjdG9yeShzdGQ6OnN0cmluZyogcGF0aCkgeworICAgICpw
YXRoID0gIi90ZXN0IjsKKyAgICByZXR1cm4gU3RhdHVzOjpPSygpOworICB9CisKKyAgdmlydHVh
bCBTdGF0dXMgTmV3TG9nZ2VyKGNvbnN0IHN0ZDo6c3RyaW5nJiBmbmFtZSwgTG9nZ2VyKiogcmVz
dWx0KSB7CisgICAgKnJlc3VsdCA9IG5ldyBOb09wTG9nZ2VyOworICAgIHJldHVybiBTdGF0dXM6
Ok9LKCk7CisgIH0KKworIHByaXZhdGU6CisgIC8vIE1hcCBmcm9tIGZpbGVuYW1lcyB0byBGaWxl
U3RhdGUgb2JqZWN0cywgcmVwcmVzZW50aW5nIGEgc2ltcGxlIGZpbGUgc3lzdGVtLgorICB0eXBl
ZGVmIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBGaWxlU3RhdGUqPiBGaWxlU3lzdGVtOworICBwb3J0
OjpNdXRleCBtdXRleF87CisgIEZpbGVTeXN0ZW0gZmlsZV9tYXBfOyAgLy8gUHJvdGVjdGVkIGJ5
IG11dGV4Xy4KK307CisKK30gIC8vIG5hbWVzcGFjZQorCitFbnYqIE5ld01lbUVudihFbnYqIGJh
c2VfZW52KSB7CisgIHJldHVybiBuZXcgSW5NZW1vcnlFbnYoYmFzZV9lbnYpOworfQorCit9ICAv
LyBuYW1lc3BhY2UgbGV2ZWxkYgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxk
Yi9oZWxwZXJzL21lbWVudi9tZW1lbnYuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvaGVs
cGVycy9tZW1lbnYvbWVtZW52LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDNiODhkZTc2MWRjNzMyZTA5ZGVjNTRi
YWRkZDM0ZTk0ZWUxNzYxMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xl
dmVsZGIvaGVscGVycy9tZW1lbnYvbWVtZW52LmgKQEAgLTAsMCArMSwyMCBAQAorLy8gQ29weXJp
Z2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFV
VEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgorCisjaWZuZGVmIFNUT1JBR0Vf
TEVWRUxEQl9IRUxQRVJTX01FTUVOVl9NRU1FTlZfSF8KKyNkZWZpbmUgU1RPUkFHRV9MRVZFTERC
X0hFTFBFUlNfTUVNRU5WX01FTUVOVl9IXworCituYW1lc3BhY2UgbGV2ZWxkYiB7CisKK2NsYXNz
IEVudjsKKworLy8gUmV0dXJucyBhIG5ldyBlbnZpcm9ubWVudCB0aGF0IHN0b3JlcyBpdHMgZGF0
YSBpbiBtZW1vcnkgYW5kIGRlbGVnYXRlcworLy8gYWxsIG5vbi1maWxlLXN0b3JhZ2UgdGFza3Mg
dG8gYmFzZV9lbnYuIFRoZSBjYWxsZXIgbXVzdCBkZWxldGUgdGhlIHJlc3VsdAorLy8gd2hlbiBp
dCBpcyBubyBsb25nZXIgbmVlZGVkLgorLy8gKmJhc2VfZW52IG11c3QgcmVtYWluIGxpdmUgd2hp
bGUgdGhlIHJlc3VsdCBpcyBpbiB1c2UuCitFbnYqIE5ld01lbUVudihFbnYqIGJhc2VfZW52KTsK
KworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKKworI2VuZGlmICAvLyBTVE9SQUdFX0xFVkVMREJf
SEVMUEVSU19NRU1FTlZfTUVNRU5WX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
ZXZlbGRiL2hlbHBlcnMvbWVtZW52L21lbWVudl90ZXN0LmNjIGIvU291cmNlL1RoaXJkUGFydHkv
bGV2ZWxkYi9oZWxwZXJzL21lbWVudi9tZW1lbnZfdGVzdC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNDQzMTBm
ZWQ4MGNkN2YyMTBkNjRiMmM4ZTc5Y2ViNzQyODQyMTdhCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9oZWxwZXJzL21lbWVudi9tZW1lbnZfdGVzdC5jYwpAQCAt
MCwwICsxLDIzMiBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0
b3JzLgorCisjaW5jbHVkZSAiaGVscGVycy9tZW1lbnYvbWVtZW52LmgiCisKKyNpbmNsdWRlICJk
Yi9kYl9pbXBsLmgiCisjaW5jbHVkZSAibGV2ZWxkYi9kYi5oIgorI2luY2x1ZGUgImxldmVsZGIv
ZW52LmgiCisjaW5jbHVkZSAidXRpbC90ZXN0aGFybmVzcy5oIgorI2luY2x1ZGUgPHN0cmluZz4K
KyNpbmNsdWRlIDx2ZWN0b3I+CisKK25hbWVzcGFjZSBsZXZlbGRiIHsKKworY2xhc3MgTWVtRW52
VGVzdCB7CisgcHVibGljOgorICBFbnYqIGVudl87CisKKyAgTWVtRW52VGVzdCgpCisgICAgICA6
IGVudl8oTmV3TWVtRW52KEVudjo6RGVmYXVsdCgpKSkgeworICB9CisgIH5NZW1FbnZUZXN0KCkg
eworICAgIGRlbGV0ZSBlbnZfOworICB9Cit9OworCitURVNUKE1lbUVudlRlc3QsIEJhc2ljcykg
eworICB1aW50NjRfdCBmaWxlX3NpemU7CisgIFdyaXRhYmxlRmlsZSogd3JpdGFibGVfZmlsZTsK
KyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNoaWxkcmVuOworCisgIEFTU0VSVF9PSyhlbnZf
LT5DcmVhdGVEaXIoIi9kaXIiKSk7CisKKyAgLy8gQ2hlY2sgdGhhdCB0aGUgZGlyZWN0b3J5IGlz
IGVtcHR5LgorICBBU1NFUlRfVFJVRSghZW52Xy0+RmlsZUV4aXN0cygiL2Rpci9ub25fZXhpc3Rl
bnQiKSk7CisgIEFTU0VSVF9UUlVFKCFlbnZfLT5HZXRGaWxlU2l6ZSgiL2Rpci9ub25fZXhpc3Rl
bnQiLCAmZmlsZV9zaXplKS5vaygpKTsKKyAgQVNTRVJUX09LKGVudl8tPkdldENoaWxkcmVuKCIv
ZGlyIiwgJmNoaWxkcmVuKSk7CisgIEFTU0VSVF9FUSgwLCBjaGlsZHJlbi5zaXplKCkpOworCisg
IC8vIENyZWF0ZSBhIGZpbGUuCisgIEFTU0VSVF9PSyhlbnZfLT5OZXdXcml0YWJsZUZpbGUoIi9k
aXIvZiIsICZ3cml0YWJsZV9maWxlKSk7CisgIGRlbGV0ZSB3cml0YWJsZV9maWxlOworCisgIC8v
IENoZWNrIHRoYXQgdGhlIGZpbGUgZXhpc3RzLgorICBBU1NFUlRfVFJVRShlbnZfLT5GaWxlRXhp
c3RzKCIvZGlyL2YiKSk7CisgIEFTU0VSVF9PSyhlbnZfLT5HZXRGaWxlU2l6ZSgiL2Rpci9mIiwg
JmZpbGVfc2l6ZSkpOworICBBU1NFUlRfRVEoMCwgZmlsZV9zaXplKTsKKyAgQVNTRVJUX09LKGVu
dl8tPkdldENoaWxkcmVuKCIvZGlyIiwgJmNoaWxkcmVuKSk7CisgIEFTU0VSVF9FUSgxLCBjaGls
ZHJlbi5zaXplKCkpOworICBBU1NFUlRfRVEoImYiLCBjaGlsZHJlblswXSk7CisKKyAgLy8gV3Jp
dGUgdG8gdGhlIGZpbGUuCisgIEFTU0VSVF9PSyhlbnZfLT5OZXdXcml0YWJsZUZpbGUoIi9kaXIv
ZiIsICZ3cml0YWJsZV9maWxlKSk7CisgIEFTU0VSVF9PSyh3cml0YWJsZV9maWxlLT5BcHBlbmQo
ImFiYyIpKTsKKyAgZGVsZXRlIHdyaXRhYmxlX2ZpbGU7CisKKyAgLy8gQ2hlY2sgZm9yIGV4cGVj
dGVkIHNpemUuCisgIEFTU0VSVF9PSyhlbnZfLT5HZXRGaWxlU2l6ZSgiL2Rpci9mIiwgJmZpbGVf
c2l6ZSkpOworICBBU1NFUlRfRVEoMywgZmlsZV9zaXplKTsKKworICAvLyBDaGVjayB0aGF0IHJl
bmFtaW5nIHdvcmtzLgorICBBU1NFUlRfVFJVRSghZW52Xy0+UmVuYW1lRmlsZSgiL2Rpci9ub25f
ZXhpc3RlbnQiLCAiL2Rpci9nIikub2soKSk7CisgIEFTU0VSVF9PSyhlbnZfLT5SZW5hbWVGaWxl
KCIvZGlyL2YiLCAiL2Rpci9nIikpOworICBBU1NFUlRfVFJVRSghZW52Xy0+RmlsZUV4aXN0cygi
L2Rpci9mIikpOworICBBU1NFUlRfVFJVRShlbnZfLT5GaWxlRXhpc3RzKCIvZGlyL2ciKSk7Cisg
IEFTU0VSVF9PSyhlbnZfLT5HZXRGaWxlU2l6ZSgiL2Rpci9nIiwgJmZpbGVfc2l6ZSkpOworICBB
U1NFUlRfRVEoMywgZmlsZV9zaXplKTsKKworICAvLyBDaGVjayB0aGF0IG9wZW5pbmcgbm9uLWV4
aXN0ZW50IGZpbGUgZmFpbHMuCisgIFNlcXVlbnRpYWxGaWxlKiBzZXFfZmlsZTsKKyAgUmFuZG9t
QWNjZXNzRmlsZSogcmFuZF9maWxlOworICBBU1NFUlRfVFJVRSghZW52Xy0+TmV3U2VxdWVudGlh
bEZpbGUoIi9kaXIvbm9uX2V4aXN0ZW50IiwgJnNlcV9maWxlKS5vaygpKTsKKyAgQVNTRVJUX1RS
VUUoIXNlcV9maWxlKTsKKyAgQVNTRVJUX1RSVUUoIWVudl8tPk5ld1JhbmRvbUFjY2Vzc0ZpbGUo
Ii9kaXIvbm9uX2V4aXN0ZW50IiwgJnJhbmRfZmlsZSkub2soKSk7CisgIEFTU0VSVF9UUlVFKCFy
YW5kX2ZpbGUpOworCisgIC8vIENoZWNrIHRoYXQgZGVsZXRpbmcgd29ya3MuCisgIEFTU0VSVF9U
UlVFKCFlbnZfLT5EZWxldGVGaWxlKCIvZGlyL25vbl9leGlzdGVudCIpLm9rKCkpOworICBBU1NF
UlRfT0soZW52Xy0+RGVsZXRlRmlsZSgiL2Rpci9nIikpOworICBBU1NFUlRfVFJVRSghZW52Xy0+
RmlsZUV4aXN0cygiL2Rpci9nIikpOworICBBU1NFUlRfT0soZW52Xy0+R2V0Q2hpbGRyZW4oIi9k
aXIiLCAmY2hpbGRyZW4pKTsKKyAgQVNTRVJUX0VRKDAsIGNoaWxkcmVuLnNpemUoKSk7CisgIEFT
U0VSVF9PSyhlbnZfLT5EZWxldGVEaXIoIi9kaXIiKSk7Cit9CisKK1RFU1QoTWVtRW52VGVzdCwg
UmVhZFdyaXRlKSB7CisgIFdyaXRhYmxlRmlsZSogd3JpdGFibGVfZmlsZTsKKyAgU2VxdWVudGlh
bEZpbGUqIHNlcV9maWxlOworICBSYW5kb21BY2Nlc3NGaWxlKiByYW5kX2ZpbGU7CisgIFNsaWNl
IHJlc3VsdDsKKyAgY2hhciBzY3JhdGNoWzEwMF07CisKKyAgQVNTRVJUX09LKGVudl8tPkNyZWF0
ZURpcigiL2RpciIpKTsKKworICBBU1NFUlRfT0soZW52Xy0+TmV3V3JpdGFibGVGaWxlKCIvZGly
L2YiLCAmd3JpdGFibGVfZmlsZSkpOworICBBU1NFUlRfT0sod3JpdGFibGVfZmlsZS0+QXBwZW5k
KCJoZWxsbyAiKSk7CisgIEFTU0VSVF9PSyh3cml0YWJsZV9maWxlLT5BcHBlbmQoIndvcmxkIikp
OworICBkZWxldGUgd3JpdGFibGVfZmlsZTsKKworICAvLyBSZWFkIHNlcXVlbnRpYWxseS4KKyAg
QVNTRVJUX09LKGVudl8tPk5ld1NlcXVlbnRpYWxGaWxlKCIvZGlyL2YiLCAmc2VxX2ZpbGUpKTsK
KyAgQVNTRVJUX09LKHNlcV9maWxlLT5SZWFkKDUsICZyZXN1bHQsIHNjcmF0Y2gpKTsgLy8gUmVh
ZCAiaGVsbG8iLgorICBBU1NFUlRfRVEoMCwgcmVzdWx0LmNvbXBhcmUoImhlbGxvIikpOworICBB
U1NFUlRfT0soc2VxX2ZpbGUtPlNraXAoMSkpOworICBBU1NFUlRfT0soc2VxX2ZpbGUtPlJlYWQo
MTAwMCwgJnJlc3VsdCwgc2NyYXRjaCkpOyAvLyBSZWFkICJ3b3JsZCIuCisgIEFTU0VSVF9FUSgw
LCByZXN1bHQuY29tcGFyZSgid29ybGQiKSk7CisgIEFTU0VSVF9PSyhzZXFfZmlsZS0+UmVhZCgx
MDAwLCAmcmVzdWx0LCBzY3JhdGNoKSk7IC8vIFRyeSByZWFkaW5nIHBhc3QgRU9GLgorICBBU1NF
UlRfRVEoMCwgcmVzdWx0LnNpemUoKSk7CisgIEFTU0VSVF9PSyhzZXFfZmlsZS0+U2tpcCgxMDAp
KTsgLy8gVHJ5IHRvIHNraXAgcGFzdCBlbmQgb2YgZmlsZS4KKyAgQVNTRVJUX09LKHNlcV9maWxl
LT5SZWFkKDEwMDAsICZyZXN1bHQsIHNjcmF0Y2gpKTsKKyAgQVNTRVJUX0VRKDAsIHJlc3VsdC5z
aXplKCkpOworICBkZWxldGUgc2VxX2ZpbGU7CisKKyAgLy8gUmFuZG9tIHJlYWRzLgorICBBU1NF
UlRfT0soZW52Xy0+TmV3UmFuZG9tQWNjZXNzRmlsZSgiL2Rpci9mIiwgJnJhbmRfZmlsZSkpOwor
ICBBU1NFUlRfT0socmFuZF9maWxlLT5SZWFkKDYsIDUsICZyZXN1bHQsIHNjcmF0Y2gpKTsgLy8g
UmVhZCAid29ybGQiLgorICBBU1NFUlRfRVEoMCwgcmVzdWx0LmNvbXBhcmUoIndvcmxkIikpOwor
ICBBU1NFUlRfT0socmFuZF9maWxlLT5SZWFkKDAsIDUsICZyZXN1bHQsIHNjcmF0Y2gpKTsgLy8g
UmVhZCAiaGVsbG8iLgorICBBU1NFUlRfRVEoMCwgcmVzdWx0LmNvbXBhcmUoImhlbGxvIikpOwor
ICBBU1NFUlRfT0socmFuZF9maWxlLT5SZWFkKDEwLCAxMDAsICZyZXN1bHQsIHNjcmF0Y2gpKTsg
Ly8gUmVhZCAiZCIuCisgIEFTU0VSVF9FUSgwLCByZXN1bHQuY29tcGFyZSgiZCIpKTsKKworICAv
LyBUb28gaGlnaCBvZmZzZXQuCisgIEFTU0VSVF9UUlVFKCFyYW5kX2ZpbGUtPlJlYWQoMTAwMCwg
NSwgJnJlc3VsdCwgc2NyYXRjaCkub2soKSk7CisgIGRlbGV0ZSByYW5kX2ZpbGU7Cit9CisKK1RF
U1QoTWVtRW52VGVzdCwgTG9ja3MpIHsKKyAgRmlsZUxvY2sqIGxvY2s7CisKKyAgLy8gVGhlc2Ug
YXJlIG5vLW9wcywgYnV0IHdlIHRlc3QgdGhleSByZXR1cm4gc3VjY2Vzcy4KKyAgQVNTRVJUX09L
KGVudl8tPkxvY2tGaWxlKCJzb21lIGZpbGUiLCAmbG9jaykpOworICBBU1NFUlRfT0soZW52Xy0+
VW5sb2NrRmlsZShsb2NrKSk7Cit9CisKK1RFU1QoTWVtRW52VGVzdCwgTWlzYykgeworICBzdGQ6
OnN0cmluZyB0ZXN0X2RpcjsKKyAgQVNTRVJUX09LKGVudl8tPkdldFRlc3REaXJlY3RvcnkoJnRl
c3RfZGlyKSk7CisgIEFTU0VSVF9UUlVFKCF0ZXN0X2Rpci5lbXB0eSgpKTsKKworICBXcml0YWJs
ZUZpbGUqIHdyaXRhYmxlX2ZpbGU7CisgIEFTU0VSVF9PSyhlbnZfLT5OZXdXcml0YWJsZUZpbGUo
Ii9hL2IiLCAmd3JpdGFibGVfZmlsZSkpOworCisgIC8vIFRoZXNlIGFyZSBuby1vcHMsIGJ1dCB3
ZSB0ZXN0IHRoZXkgcmV0dXJuIHN1Y2Nlc3MuCisgIEFTU0VSVF9PSyh3cml0YWJsZV9maWxlLT5T
eW5jKCkpOworICBBU1NFUlRfT0sod3JpdGFibGVfZmlsZS0+Rmx1c2goKSk7CisgIEFTU0VSVF9P
Syh3cml0YWJsZV9maWxlLT5DbG9zZSgpKTsKKyAgZGVsZXRlIHdyaXRhYmxlX2ZpbGU7Cit9CisK
K1RFU1QoTWVtRW52VGVzdCwgTGFyZ2VXcml0ZSkgeworICBjb25zdCBzaXplX3Qga1dyaXRlU2l6
ZSA9IDMwMCAqIDEwMjQ7CisgIGNoYXIqIHNjcmF0Y2ggPSBuZXcgY2hhcltrV3JpdGVTaXplICog
Ml07CisKKyAgc3RkOjpzdHJpbmcgd3JpdGVfZGF0YTsKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBrV3JpdGVTaXplOyArK2kpIHsKKyAgICB3cml0ZV9kYXRhLmFwcGVuZCgxLCBzdGF0aWNfY2Fz
dDxjaGFyPihpKSk7CisgIH0KKworICBXcml0YWJsZUZpbGUqIHdyaXRhYmxlX2ZpbGU7CisgIEFT
U0VSVF9PSyhlbnZfLT5OZXdXcml0YWJsZUZpbGUoIi9kaXIvZiIsICZ3cml0YWJsZV9maWxlKSk7
CisgIEFTU0VSVF9PSyh3cml0YWJsZV9maWxlLT5BcHBlbmQoImZvbyIpKTsKKyAgQVNTRVJUX09L
KHdyaXRhYmxlX2ZpbGUtPkFwcGVuZCh3cml0ZV9kYXRhKSk7CisgIGRlbGV0ZSB3cml0YWJsZV9m
aWxlOworCisgIFNlcXVlbnRpYWxGaWxlKiBzZXFfZmlsZTsKKyAgU2xpY2UgcmVzdWx0OworICBB
U1NFUlRfT0soZW52Xy0+TmV3U2VxdWVudGlhbEZpbGUoIi9kaXIvZiIsICZzZXFfZmlsZSkpOwor
ICBBU1NFUlRfT0soc2VxX2ZpbGUtPlJlYWQoMywgJnJlc3VsdCwgc2NyYXRjaCkpOyAvLyBSZWFk
ICJmb28iLgorICBBU1NFUlRfRVEoMCwgcmVzdWx0LmNvbXBhcmUoImZvbyIpKTsKKworICBzaXpl
X3QgcmVhZCA9IDA7CisgIHN0ZDo6c3RyaW5nIHJlYWRfZGF0YTsKKyAgd2hpbGUgKHJlYWQgPCBr
V3JpdGVTaXplKSB7CisgICAgQVNTRVJUX09LKHNlcV9maWxlLT5SZWFkKGtXcml0ZVNpemUgLSBy
ZWFkLCAmcmVzdWx0LCBzY3JhdGNoKSk7CisgICAgcmVhZF9kYXRhLmFwcGVuZChyZXN1bHQuZGF0
YSgpLCByZXN1bHQuc2l6ZSgpKTsKKyAgICByZWFkICs9IHJlc3VsdC5zaXplKCk7CisgIH0KKyAg
QVNTRVJUX1RSVUUod3JpdGVfZGF0YSA9PSByZWFkX2RhdGEpOworICBkZWxldGUgc2VxX2ZpbGU7
CisgIGRlbGV0ZSBbXSBzY3JhdGNoOworfQorCitURVNUKE1lbUVudlRlc3QsIERCVGVzdCkgewor
ICBPcHRpb25zIG9wdGlvbnM7CisgIG9wdGlvbnMuY3JlYXRlX2lmX21pc3NpbmcgPSB0cnVlOwor
ICBvcHRpb25zLmVudiA9IGVudl87CisgIERCKiBkYjsKKworICBjb25zdCBTbGljZSBrZXlzW10g
PSB7U2xpY2UoImFhYSIpLCBTbGljZSgiYmJiIiksIFNsaWNlKCJjY2MiKX07CisgIGNvbnN0IFNs
aWNlIHZhbHNbXSA9IHtTbGljZSgiZm9vIiksIFNsaWNlKCJiYXIiKSwgU2xpY2UoImJheiIpfTsK
KworICBBU1NFUlRfT0soREI6Ok9wZW4ob3B0aW9ucywgIi9kaXIvZGIiLCAmZGIpKTsKKyAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCAzOyArK2kpIHsKKyAgICBBU1NFUlRfT0soZGItPlB1dChXcml0
ZU9wdGlvbnMoKSwga2V5c1tpXSwgdmFsc1tpXSkpOworICB9CisKKyAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCAzOyArK2kpIHsKKyAgICBzdGQ6OnN0cmluZyByZXM7CisgICAgQVNTRVJUX09LKGRi
LT5HZXQoUmVhZE9wdGlvbnMoKSwga2V5c1tpXSwgJnJlcykpOworICAgIEFTU0VSVF9UUlVFKHJl
cyA9PSB2YWxzW2ldKTsKKyAgfQorCisgIEl0ZXJhdG9yKiBpdGVyYXRvciA9IGRiLT5OZXdJdGVy
YXRvcihSZWFkT3B0aW9ucygpKTsKKyAgaXRlcmF0b3ItPlNlZWtUb0ZpcnN0KCk7CisgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgMzsgKytpKSB7CisgICAgQVNTRVJUX1RSVUUoaXRlcmF0b3ItPlZh
bGlkKCkpOworICAgIEFTU0VSVF9UUlVFKGtleXNbaV0gPT0gaXRlcmF0b3ItPmtleSgpKTsKKyAg
ICBBU1NFUlRfVFJVRSh2YWxzW2ldID09IGl0ZXJhdG9yLT52YWx1ZSgpKTsKKyAgICBpdGVyYXRv
ci0+TmV4dCgpOworICB9CisgIEFTU0VSVF9UUlVFKCFpdGVyYXRvci0+VmFsaWQoKSk7CisgIGRl
bGV0ZSBpdGVyYXRvcjsKKworICBEQkltcGwqIGRiaSA9IHJlaW50ZXJwcmV0X2Nhc3Q8REJJbXBs
Kj4oZGIpOworICBBU1NFUlRfT0soZGJpLT5URVNUX0NvbXBhY3RNZW1UYWJsZSgpKTsKKworICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IDM7ICsraSkgeworICAgIHN0ZDo6c3RyaW5nIHJlczsKKyAg
ICBBU1NFUlRfT0soZGItPkdldChSZWFkT3B0aW9ucygpLCBrZXlzW2ldLCAmcmVzKSk7CisgICAg
QVNTRVJUX1RSVUUocmVzID09IHZhbHNbaV0pOworICB9CisKKyAgZGVsZXRlIGRiOworfQorCit9
ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3Yp
IHsKKyAgcmV0dXJuIGxldmVsZGI6OnRlc3Q6OlJ1bkFsbFRlc3RzKCk7Cit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2luY2x1ZGUvbGV2ZWxkYi9jLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9sZXZlbGRiL2luY2x1ZGUvbGV2ZWxkYi9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWZhNTg4
NjZjMzk1OGM2NmQ3YzY4YjI2NGFhNGVlNGNjZGY1MWM2OAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvaW5jbHVkZS9sZXZlbGRiL2MuaApAQCAtMCwwICsxLDI5
MSBAQAorLyogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyAgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworICBD
IGJpbmRpbmdzIGZvciBsZXZlbGRiLiAgTWF5IGJlIHVzZWZ1bCBhcyBhIHN0YWJsZSBBQkkgdGhh
dCBjYW4gYmUKKyAgdXNlZCBieSBwcm9ncmFtcyB0aGF0IGtlZXAgbGV2ZWxkYiBpbiBhIHNoYXJl
ZCBsaWJyYXJ5LCBvciBmb3IKKyAgYSBKTkkgYXBpLgorCisgIERvZXMgbm90IHN1cHBvcnQ6Cisg
IC4gZ2V0dGVycyBmb3IgdGhlIG9wdGlvbiB0eXBlcworICAuIGN1c3RvbSBjb21wYXJhdG9ycyB0
aGF0IGltcGxlbWVudCBrZXkgc2hvcnRlbmluZworICAuIGNhcHR1cmluZyBwb3N0LXdyaXRlLXNu
YXBzaG90CisgIC4gY3VzdG9tIGl0ZXIsIGRiLCBlbnYsIGNhY2hlIGltcGxlbWVudGF0aW9ucyB1
c2luZyBqdXN0IHRoZSBDIGJpbmRpbmdzCisKKyAgU29tZSBjb252ZW50aW9uczoKKworICAoMSkg
V2UgZXhwb3NlIGp1c3Qgb3BhcXVlIHN0cnVjdCBwb2ludGVycyBhbmQgZnVuY3Rpb25zIHRvIGNs
aWVudHMuCisgIFRoaXMgYWxsb3dzIHVzIHRvIGNoYW5nZSBpbnRlcm5hbCByZXByZXNlbnRhdGlv
bnMgd2l0aG91dCBoYXZpbmcgdG8KKyAgcmVjb21waWxlIGNsaWVudHMuCisKKyAgKDIpIEZvciBz
aW1wbGljaXR5LCB0aGVyZSBpcyBubyBlcXVpdmFsZW50IHRvIHRoZSBTbGljZSB0eXBlLiAgSW5z
dGVhZCwKKyAgdGhlIGNhbGxlciBoYXMgdG8gcGFzcyB0aGUgcG9pbnRlciBhbmQgbGVuZ3RoIGFz
IHNlcGFyYXRlCisgIGFyZ3VtZW50cy4KKworICAoMykgRXJyb3JzIGFyZSByZXByZXNlbnRlZCBi
eSBhIG51bGwtdGVybWluYXRlZCBjIHN0cmluZy4gIE5VTEwKKyAgbWVhbnMgbm8gZXJyb3IuICBB
bGwgb3BlcmF0aW9ucyB0aGF0IGNhbiByYWlzZSBhbiBlcnJvciBhcmUgcGFzc2VkCisgIGEgImNo
YXIqKiBlcnJwdHIiIGFzIHRoZSBsYXN0IGFyZ3VtZW50LiAgT25lIG9mIHRoZSBmb2xsb3dpbmcg
bXVzdAorICBiZSB0cnVlIG9uIGVudHJ5OgorICAgICAqZXJycHRyID09IE5VTEwKKyAgICAgKmVy
cnB0ciBwb2ludHMgdG8gYSBtYWxsb2MoKWVkIG51bGwtdGVybWluYXRlZCBlcnJvciBtZXNzYWdl
CisgICAgICAgKE9uIFdpbmRvd3MsICplcnJwdHIgbXVzdCBoYXZlIGJlZW4gbWFsbG9jKCktZWQg
YnkgdGhpcyBsaWJyYXJ5LikKKyAgT24gc3VjY2VzcywgYSBsZXZlbGRiIHJvdXRpbmUgbGVhdmVz
ICplcnJwdHIgdW5jaGFuZ2VkLgorICBPbiBmYWlsdXJlLCBsZXZlbGRiIGZyZWVzIHRoZSBvbGQg
dmFsdWUgb2YgKmVycnB0ciBhbmQKKyAgc2V0ICplcnJwdHIgdG8gYSBtYWxsb2MoKWVkIGVycm9y
IG1lc3NhZ2UuCisKKyAgKDQpIEJvb2xzIGhhdmUgdGhlIHR5cGUgdW5zaWduZWQgY2hhciAoMCA9
PSBmYWxzZTsgcmVzdCA9PSB0cnVlKQorCisgICg1KSBBbGwgb2YgdGhlIHBvaW50ZXIgYXJndW1l
bnRzIG11c3QgYmUgbm9uLU5VTEwuCisqLworCisjaWZuZGVmIFNUT1JBR0VfTEVWRUxEQl9JTkNM
VURFX0NfSF8KKyNkZWZpbmUgU1RPUkFHRV9MRVZFTERCX0lOQ0xVREVfQ19IXworCisjaWZkZWYg
X19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4K
KyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworLyogRXhwb3J0ZWQg
dHlwZXMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgbGV2ZWxkYl90ICAgICAgICAgICAgICAgbGV2ZWxk
Yl90OwordHlwZWRlZiBzdHJ1Y3QgbGV2ZWxkYl9jYWNoZV90ICAgICAgICAgbGV2ZWxkYl9jYWNo
ZV90OwordHlwZWRlZiBzdHJ1Y3QgbGV2ZWxkYl9jb21wYXJhdG9yX3QgICAgbGV2ZWxkYl9jb21w
YXJhdG9yX3Q7Cit0eXBlZGVmIHN0cnVjdCBsZXZlbGRiX2Vudl90ICAgICAgICAgICBsZXZlbGRi
X2Vudl90OwordHlwZWRlZiBzdHJ1Y3QgbGV2ZWxkYl9maWxlbG9ja190ICAgICAgbGV2ZWxkYl9m
aWxlbG9ja190OwordHlwZWRlZiBzdHJ1Y3QgbGV2ZWxkYl9maWx0ZXJwb2xpY3lfdCAgbGV2ZWxk
Yl9maWx0ZXJwb2xpY3lfdDsKK3R5cGVkZWYgc3RydWN0IGxldmVsZGJfaXRlcmF0b3JfdCAgICAg
IGxldmVsZGJfaXRlcmF0b3JfdDsKK3R5cGVkZWYgc3RydWN0IGxldmVsZGJfbG9nZ2VyX3QgICAg
ICAgIGxldmVsZGJfbG9nZ2VyX3Q7Cit0eXBlZGVmIHN0cnVjdCBsZXZlbGRiX29wdGlvbnNfdCAg
ICAgICBsZXZlbGRiX29wdGlvbnNfdDsKK3R5cGVkZWYgc3RydWN0IGxldmVsZGJfcmFuZG9tZmls
ZV90ICAgIGxldmVsZGJfcmFuZG9tZmlsZV90OwordHlwZWRlZiBzdHJ1Y3QgbGV2ZWxkYl9yZWFk
b3B0aW9uc190ICAgbGV2ZWxkYl9yZWFkb3B0aW9uc190OwordHlwZWRlZiBzdHJ1Y3QgbGV2ZWxk
Yl9zZXFmaWxlX3QgICAgICAgbGV2ZWxkYl9zZXFmaWxlX3Q7Cit0eXBlZGVmIHN0cnVjdCBsZXZl
bGRiX3NuYXBzaG90X3QgICAgICBsZXZlbGRiX3NuYXBzaG90X3Q7Cit0eXBlZGVmIHN0cnVjdCBs
ZXZlbGRiX3dyaXRhYmxlZmlsZV90ICBsZXZlbGRiX3dyaXRhYmxlZmlsZV90OwordHlwZWRlZiBz
dHJ1Y3QgbGV2ZWxkYl93cml0ZWJhdGNoX3QgICAgbGV2ZWxkYl93cml0ZWJhdGNoX3Q7Cit0eXBl
ZGVmIHN0cnVjdCBsZXZlbGRiX3dyaXRlb3B0aW9uc190ICBsZXZlbGRiX3dyaXRlb3B0aW9uc190
OworCisvKiBEQiBvcGVyYXRpb25zICovCisKK2V4dGVybiBsZXZlbGRiX3QqIGxldmVsZGJfb3Bl
bigKKyAgICBjb25zdCBsZXZlbGRiX29wdGlvbnNfdCogb3B0aW9ucywKKyAgICBjb25zdCBjaGFy
KiBuYW1lLAorICAgIGNoYXIqKiBlcnJwdHIpOworCitleHRlcm4gdm9pZCBsZXZlbGRiX2Nsb3Nl
KGxldmVsZGJfdCogZGIpOworCitleHRlcm4gdm9pZCBsZXZlbGRiX3B1dCgKKyAgICBsZXZlbGRi
X3QqIGRiLAorICAgIGNvbnN0IGxldmVsZGJfd3JpdGVvcHRpb25zX3QqIG9wdGlvbnMsCisgICAg
Y29uc3QgY2hhcioga2V5LCBzaXplX3Qga2V5bGVuLAorICAgIGNvbnN0IGNoYXIqIHZhbCwgc2l6
ZV90IHZhbGxlbiwKKyAgICBjaGFyKiogZXJycHRyKTsKKworZXh0ZXJuIHZvaWQgbGV2ZWxkYl9k
ZWxldGUoCisgICAgbGV2ZWxkYl90KiBkYiwKKyAgICBjb25zdCBsZXZlbGRiX3dyaXRlb3B0aW9u
c190KiBvcHRpb25zLAorICAgIGNvbnN0IGNoYXIqIGtleSwgc2l6ZV90IGtleWxlbiwKKyAgICBj
aGFyKiogZXJycHRyKTsKKworZXh0ZXJuIHZvaWQgbGV2ZWxkYl93cml0ZSgKKyAgICBsZXZlbGRi
X3QqIGRiLAorICAgIGNvbnN0IGxldmVsZGJfd3JpdGVvcHRpb25zX3QqIG9wdGlvbnMsCisgICAg
bGV2ZWxkYl93cml0ZWJhdGNoX3QqIGJhdGNoLAorICAgIGNoYXIqKiBlcnJwdHIpOworCisvKiBS
ZXR1cm5zIE5VTEwgaWYgbm90IGZvdW5kLiAgQSBtYWxsb2MoKWVkIGFycmF5IG90aGVyd2lzZS4K
KyAgIFN0b3JlcyB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSBpbiAqdmFsbGVuLiAqLworZXh0ZXJu
IGNoYXIqIGxldmVsZGJfZ2V0KAorICAgIGxldmVsZGJfdCogZGIsCisgICAgY29uc3QgbGV2ZWxk
Yl9yZWFkb3B0aW9uc190KiBvcHRpb25zLAorICAgIGNvbnN0IGNoYXIqIGtleSwgc2l6ZV90IGtl
eWxlbiwKKyAgICBzaXplX3QqIHZhbGxlbiwKKyAgICBjaGFyKiogZXJycHRyKTsKKworZXh0ZXJu
IGxldmVsZGJfaXRlcmF0b3JfdCogbGV2ZWxkYl9jcmVhdGVfaXRlcmF0b3IoCisgICAgbGV2ZWxk
Yl90KiBkYiwKKyAgICBjb25zdCBsZXZlbGRiX3JlYWRvcHRpb25zX3QqIG9wdGlvbnMpOworCitl
eHRlcm4gY29uc3QgbGV2ZWxkYl9zbmFwc2hvdF90KiBsZXZlbGRiX2NyZWF0ZV9zbmFwc2hvdCgK
KyAgICBsZXZlbGRiX3QqIGRiKTsKKworZXh0ZXJuIHZvaWQgbGV2ZWxkYl9yZWxlYXNlX3NuYXBz
aG90KAorICAgIGxldmVsZGJfdCogZGIsCisgICAgY29uc3QgbGV2ZWxkYl9zbmFwc2hvdF90KiBz
bmFwc2hvdCk7CisKKy8qIFJldHVybnMgTlVMTCBpZiBwcm9wZXJ0eSBuYW1lIGlzIHVua25vd24u
CisgICBFbHNlIHJldHVybnMgYSBwb2ludGVyIHRvIGEgbWFsbG9jKCktZWQgbnVsbC10ZXJtaW5h
dGVkIHZhbHVlLiAqLworZXh0ZXJuIGNoYXIqIGxldmVsZGJfcHJvcGVydHlfdmFsdWUoCisgICAg
bGV2ZWxkYl90KiBkYiwKKyAgICBjb25zdCBjaGFyKiBwcm9wbmFtZSk7CisKK2V4dGVybiB2b2lk
IGxldmVsZGJfYXBwcm94aW1hdGVfc2l6ZXMoCisgICAgbGV2ZWxkYl90KiBkYiwKKyAgICBpbnQg
bnVtX3JhbmdlcywKKyAgICBjb25zdCBjaGFyKiBjb25zdCogcmFuZ2Vfc3RhcnRfa2V5LCBjb25z
dCBzaXplX3QqIHJhbmdlX3N0YXJ0X2tleV9sZW4sCisgICAgY29uc3QgY2hhciogY29uc3QqIHJh
bmdlX2xpbWl0X2tleSwgY29uc3Qgc2l6ZV90KiByYW5nZV9saW1pdF9rZXlfbGVuLAorICAgIHVp
bnQ2NF90KiBzaXplcyk7CisKK2V4dGVybiB2b2lkIGxldmVsZGJfY29tcGFjdF9yYW5nZSgKKyAg
ICBsZXZlbGRiX3QqIGRiLAorICAgIGNvbnN0IGNoYXIqIHN0YXJ0X2tleSwgc2l6ZV90IHN0YXJ0
X2tleV9sZW4sCisgICAgY29uc3QgY2hhciogbGltaXRfa2V5LCBzaXplX3QgbGltaXRfa2V5X2xl
bik7CisKKy8qIE1hbmFnZW1lbnQgb3BlcmF0aW9ucyAqLworCitleHRlcm4gdm9pZCBsZXZlbGRi
X2Rlc3Ryb3lfZGIoCisgICAgY29uc3QgbGV2ZWxkYl9vcHRpb25zX3QqIG9wdGlvbnMsCisgICAg
Y29uc3QgY2hhciogbmFtZSwKKyAgICBjaGFyKiogZXJycHRyKTsKKworZXh0ZXJuIHZvaWQgbGV2
ZWxkYl9yZXBhaXJfZGIoCisgICAgY29uc3QgbGV2ZWxkYl9vcHRpb25zX3QqIG9wdGlvbnMsCisg
ICAgY29uc3QgY2hhciogbmFtZSwKKyAgICBjaGFyKiogZXJycHRyKTsKKworLyogSXRlcmF0b3Ig
Ki8KKworZXh0ZXJuIHZvaWQgbGV2ZWxkYl9pdGVyX2Rlc3Ryb3kobGV2ZWxkYl9pdGVyYXRvcl90
Kik7CitleHRlcm4gdW5zaWduZWQgY2hhciBsZXZlbGRiX2l0ZXJfdmFsaWQoY29uc3QgbGV2ZWxk
Yl9pdGVyYXRvcl90Kik7CitleHRlcm4gdm9pZCBsZXZlbGRiX2l0ZXJfc2Vla190b19maXJzdChs
ZXZlbGRiX2l0ZXJhdG9yX3QqKTsKK2V4dGVybiB2b2lkIGxldmVsZGJfaXRlcl9zZWVrX3RvX2xh
c3QobGV2ZWxkYl9pdGVyYXRvcl90Kik7CitleHRlcm4gdm9pZCBsZXZlbGRiX2l0ZXJfc2Vlayhs
ZXZlbGRiX2l0ZXJhdG9yX3QqLCBjb25zdCBjaGFyKiBrLCBzaXplX3Qga2xlbik7CitleHRlcm4g
dm9pZCBsZXZlbGRiX2l0ZXJfbmV4dChsZXZlbGRiX2l0ZXJhdG9yX3QqKTsKK2V4dGVybiB2b2lk
IGxldmVsZGJfaXRlcl9wcmV2KGxldmVsZGJfaXRlcmF0b3JfdCopOworZXh0ZXJuIGNvbnN0IGNo
YXIqIGxldmVsZGJfaXRlcl9rZXkoY29uc3QgbGV2ZWxkYl9pdGVyYXRvcl90Kiwgc2l6ZV90KiBr
bGVuKTsKK2V4dGVybiBjb25zdCBjaGFyKiBsZXZlbGRiX2l0ZXJfdmFsdWUoY29uc3QgbGV2ZWxk
Yl9pdGVyYXRvcl90Kiwgc2l6ZV90KiB2bGVuKTsKK2V4dGVybiB2b2lkIGxldmVsZGJfaXRlcl9n
ZXRfZXJyb3IoY29uc3QgbGV2ZWxkYl9pdGVyYXRvcl90KiwgY2hhcioqIGVycnB0cik7CisKKy8q
IFdyaXRlIGJhdGNoICovCisKK2V4dGVybiBsZXZlbGRiX3dyaXRlYmF0Y2hfdCogbGV2ZWxkYl93
cml0ZWJhdGNoX2NyZWF0ZSgpOworZXh0ZXJuIHZvaWQgbGV2ZWxkYl93cml0ZWJhdGNoX2Rlc3Ry
b3kobGV2ZWxkYl93cml0ZWJhdGNoX3QqKTsKK2V4dGVybiB2b2lkIGxldmVsZGJfd3JpdGViYXRj
aF9jbGVhcihsZXZlbGRiX3dyaXRlYmF0Y2hfdCopOworZXh0ZXJuIHZvaWQgbGV2ZWxkYl93cml0
ZWJhdGNoX3B1dCgKKyAgICBsZXZlbGRiX3dyaXRlYmF0Y2hfdCosCisgICAgY29uc3QgY2hhciog
a2V5LCBzaXplX3Qga2xlbiwKKyAgICBjb25zdCBjaGFyKiB2YWwsIHNpemVfdCB2bGVuKTsKK2V4
dGVybiB2b2lkIGxldmVsZGJfd3JpdGViYXRjaF9kZWxldGUoCisgICAgbGV2ZWxkYl93cml0ZWJh
dGNoX3QqLAorICAgIGNvbnN0IGNoYXIqIGtleSwgc2l6ZV90IGtsZW4pOworZXh0ZXJuIHZvaWQg
bGV2ZWxkYl93cml0ZWJhdGNoX2l0ZXJhdGUoCisgICAgbGV2ZWxkYl93cml0ZWJhdGNoX3QqLAor
ICAgIHZvaWQqIHN0YXRlLAorICAgIHZvaWQgKCpwdXQpKHZvaWQqLCBjb25zdCBjaGFyKiBrLCBz
aXplX3Qga2xlbiwgY29uc3QgY2hhciogdiwgc2l6ZV90IHZsZW4pLAorICAgIHZvaWQgKCpkZWxl
dGVkKSh2b2lkKiwgY29uc3QgY2hhciogaywgc2l6ZV90IGtsZW4pKTsKKworLyogT3B0aW9ucyAq
LworCitleHRlcm4gbGV2ZWxkYl9vcHRpb25zX3QqIGxldmVsZGJfb3B0aW9uc19jcmVhdGUoKTsK
K2V4dGVybiB2b2lkIGxldmVsZGJfb3B0aW9uc19kZXN0cm95KGxldmVsZGJfb3B0aW9uc190Kik7
CitleHRlcm4gdm9pZCBsZXZlbGRiX29wdGlvbnNfc2V0X2NvbXBhcmF0b3IoCisgICAgbGV2ZWxk
Yl9vcHRpb25zX3QqLAorICAgIGxldmVsZGJfY29tcGFyYXRvcl90Kik7CitleHRlcm4gdm9pZCBs
ZXZlbGRiX29wdGlvbnNfc2V0X2ZpbHRlcl9wb2xpY3koCisgICAgbGV2ZWxkYl9vcHRpb25zX3Qq
LAorICAgIGxldmVsZGJfZmlsdGVycG9saWN5X3QqKTsKK2V4dGVybiB2b2lkIGxldmVsZGJfb3B0
aW9uc19zZXRfY3JlYXRlX2lmX21pc3NpbmcoCisgICAgbGV2ZWxkYl9vcHRpb25zX3QqLCB1bnNp
Z25lZCBjaGFyKTsKK2V4dGVybiB2b2lkIGxldmVsZGJfb3B0aW9uc19zZXRfZXJyb3JfaWZfZXhp
c3RzKAorICAgIGxldmVsZGJfb3B0aW9uc190KiwgdW5zaWduZWQgY2hhcik7CitleHRlcm4gdm9p
ZCBsZXZlbGRiX29wdGlvbnNfc2V0X3BhcmFub2lkX2NoZWNrcygKKyAgICBsZXZlbGRiX29wdGlv
bnNfdCosIHVuc2lnbmVkIGNoYXIpOworZXh0ZXJuIHZvaWQgbGV2ZWxkYl9vcHRpb25zX3NldF9l
bnYobGV2ZWxkYl9vcHRpb25zX3QqLCBsZXZlbGRiX2Vudl90Kik7CitleHRlcm4gdm9pZCBsZXZl
bGRiX29wdGlvbnNfc2V0X2luZm9fbG9nKGxldmVsZGJfb3B0aW9uc190KiwgbGV2ZWxkYl9sb2dn
ZXJfdCopOworZXh0ZXJuIHZvaWQgbGV2ZWxkYl9vcHRpb25zX3NldF93cml0ZV9idWZmZXJfc2l6
ZShsZXZlbGRiX29wdGlvbnNfdCosIHNpemVfdCk7CitleHRlcm4gdm9pZCBsZXZlbGRiX29wdGlv
bnNfc2V0X21heF9vcGVuX2ZpbGVzKGxldmVsZGJfb3B0aW9uc190KiwgaW50KTsKK2V4dGVybiB2
b2lkIGxldmVsZGJfb3B0aW9uc19zZXRfY2FjaGUobGV2ZWxkYl9vcHRpb25zX3QqLCBsZXZlbGRi
X2NhY2hlX3QqKTsKK2V4dGVybiB2b2lkIGxldmVsZGJfb3B0aW9uc19zZXRfYmxvY2tfc2l6ZShs
ZXZlbGRiX29wdGlvbnNfdCosIHNpemVfdCk7CitleHRlcm4gdm9pZCBsZXZlbGRiX29wdGlvbnNf
c2V0X2Jsb2NrX3Jlc3RhcnRfaW50ZXJ2YWwobGV2ZWxkYl9vcHRpb25zX3QqLCBpbnQpOworCitl
bnVtIHsKKyAgbGV2ZWxkYl9ub19jb21wcmVzc2lvbiA9IDAsCisgIGxldmVsZGJfc25hcHB5X2Nv
bXByZXNzaW9uID0gMQorfTsKK2V4dGVybiB2b2lkIGxldmVsZGJfb3B0aW9uc19zZXRfY29tcHJl
c3Npb24obGV2ZWxkYl9vcHRpb25zX3QqLCBpbnQpOworCisvKiBDb21wYXJhdG9yICovCisKK2V4
dGVybiBsZXZlbGRiX2NvbXBhcmF0b3JfdCogbGV2ZWxkYl9jb21wYXJhdG9yX2NyZWF0ZSgKKyAg
ICB2b2lkKiBzdGF0ZSwKKyAgICB2b2lkICgqZGVzdHJ1Y3Rvcikodm9pZCopLAorICAgIGludCAo
KmNvbXBhcmUpKAorICAgICAgICB2b2lkKiwKKyAgICAgICAgY29uc3QgY2hhciogYSwgc2l6ZV90
IGFsZW4sCisgICAgICAgIGNvbnN0IGNoYXIqIGIsIHNpemVfdCBibGVuKSwKKyAgICBjb25zdCBj
aGFyKiAoKm5hbWUpKHZvaWQqKSk7CitleHRlcm4gdm9pZCBsZXZlbGRiX2NvbXBhcmF0b3JfZGVz
dHJveShsZXZlbGRiX2NvbXBhcmF0b3JfdCopOworCisvKiBGaWx0ZXIgcG9saWN5ICovCisKK2V4
dGVybiBsZXZlbGRiX2ZpbHRlcnBvbGljeV90KiBsZXZlbGRiX2ZpbHRlcnBvbGljeV9jcmVhdGUo
CisgICAgdm9pZCogc3RhdGUsCisgICAgdm9pZCAoKmRlc3RydWN0b3IpKHZvaWQqKSwKKyAgICBj
aGFyKiAoKmNyZWF0ZV9maWx0ZXIpKAorICAgICAgICB2b2lkKiwKKyAgICAgICAgY29uc3QgY2hh
ciogY29uc3QqIGtleV9hcnJheSwgY29uc3Qgc2l6ZV90KiBrZXlfbGVuZ3RoX2FycmF5LAorICAg
ICAgICBpbnQgbnVtX2tleXMsCisgICAgICAgIHNpemVfdCogZmlsdGVyX2xlbmd0aCksCisgICAg
dW5zaWduZWQgY2hhciAoKmtleV9tYXlfbWF0Y2gpKAorICAgICAgICB2b2lkKiwKKyAgICAgICAg
Y29uc3QgY2hhcioga2V5LCBzaXplX3QgbGVuZ3RoLAorICAgICAgICBjb25zdCBjaGFyKiBmaWx0
ZXIsIHNpemVfdCBmaWx0ZXJfbGVuZ3RoKSwKKyAgICBjb25zdCBjaGFyKiAoKm5hbWUpKHZvaWQq
KSk7CitleHRlcm4gdm9pZCBsZXZlbGRiX2ZpbHRlcnBvbGljeV9kZXN0cm95KGxldmVsZGJfZmls
dGVycG9saWN5X3QqKTsKKworZXh0ZXJuIGxldmVsZGJfZmlsdGVycG9saWN5X3QqIGxldmVsZGJf
ZmlsdGVycG9saWN5X2NyZWF0ZV9ibG9vbSgKKyAgICBpbnQgYml0c19wZXJfa2V5KTsKKworLyog
UmVhZCBvcHRpb25zICovCisKK2V4dGVybiBsZXZlbGRiX3JlYWRvcHRpb25zX3QqIGxldmVsZGJf
cmVhZG9wdGlvbnNfY3JlYXRlKCk7CitleHRlcm4gdm9pZCBsZXZlbGRiX3JlYWRvcHRpb25zX2Rl
c3Ryb3kobGV2ZWxkYl9yZWFkb3B0aW9uc190Kik7CitleHRlcm4gdm9pZCBsZXZlbGRiX3JlYWRv
cHRpb25zX3NldF92ZXJpZnlfY2hlY2tzdW1zKAorICAgIGxldmVsZGJfcmVhZG9wdGlvbnNfdCos
CisgICAgdW5zaWduZWQgY2hhcik7CitleHRlcm4gdm9pZCBsZXZlbGRiX3JlYWRvcHRpb25zX3Nl
dF9maWxsX2NhY2hlKAorICAgIGxldmVsZGJfcmVhZG9wdGlvbnNfdCosIHVuc2lnbmVkIGNoYXIp
OworZXh0ZXJuIHZvaWQgbGV2ZWxkYl9yZWFkb3B0aW9uc19zZXRfc25hcHNob3QoCisgICAgbGV2
ZWxkYl9yZWFkb3B0aW9uc190KiwKKyAgICBjb25zdCBsZXZlbGRiX3NuYXBzaG90X3QqKTsKKwor
LyogV3JpdGUgb3B0aW9ucyAqLworCitleHRlcm4gbGV2ZWxkYl93cml0ZW9wdGlvbnNfdCogbGV2
ZWxkYl93cml0ZW9wdGlvbnNfY3JlYXRlKCk7CitleHRlcm4gdm9pZCBsZXZlbGRiX3dyaXRlb3B0
aW9uc19kZXN0cm95KGxldmVsZGJfd3JpdGVvcHRpb25zX3QqKTsKK2V4dGVybiB2b2lkIGxldmVs
ZGJfd3JpdGVvcHRpb25zX3NldF9zeW5jKAorICAgIGxldmVsZGJfd3JpdGVvcHRpb25zX3QqLCB1
bnNpZ25lZCBjaGFyKTsKKworLyogQ2FjaGUgKi8KKworZXh0ZXJuIGxldmVsZGJfY2FjaGVfdCog
bGV2ZWxkYl9jYWNoZV9jcmVhdGVfbHJ1KHNpemVfdCBjYXBhY2l0eSk7CitleHRlcm4gdm9pZCBs
ZXZlbGRiX2NhY2hlX2Rlc3Ryb3kobGV2ZWxkYl9jYWNoZV90KiBjYWNoZSk7CisKKy8qIEVudiAq
LworCitleHRlcm4gbGV2ZWxkYl9lbnZfdCogbGV2ZWxkYl9jcmVhdGVfZGVmYXVsdF9lbnYoKTsK
K2V4dGVybiB2b2lkIGxldmVsZGJfZW52X2Rlc3Ryb3kobGV2ZWxkYl9lbnZfdCopOworCisvKiBV
dGlsaXR5ICovCisKKy8qIENhbGxzIGZyZWUocHRyKS4KKyAgIFJFUVVJUkVTOiBwdHIgd2FzIG1h
bGxvYygpLWVkIGFuZCByZXR1cm5lZCBieSBvbmUgb2YgdGhlIHJvdXRpbmVzCisgICBpbiB0aGlz
IGZpbGUuICBOb3RlIHRoYXQgaW4gY2VydGFpbiBjYXNlcyAodHlwaWNhbGx5IG9uIFdpbmRvd3Mp
LCB5b3UKKyAgIG1heSBuZWVkIHRvIGNhbGwgdGhpcyByb3V0aW5lIGluc3RlYWQgb2YgZnJlZShw
dHIpIHRvIGRpc3Bvc2Ugb2YKKyAgIG1hbGxvYygpLWVkIG1lbW9yeSByZXR1cm5lZCBieSB0aGlz
IGxpYnJhcnkuICovCitleHRlcm4gdm9pZCBsZXZlbGRiX2ZyZWUodm9pZCogcHRyKTsKKworLyog
UmV0dXJuIHRoZSBtYWpvciB2ZXJzaW9uIG51bWJlciBmb3IgdGhpcyByZWxlYXNlLiAqLworZXh0
ZXJuIGludCBsZXZlbGRiX21ham9yX3ZlcnNpb24oKTsKKworLyogUmV0dXJuIHRoZSBtaW5vciB2
ZXJzaW9uIG51bWJlciBmb3IgdGhpcyByZWxlYXNlLiAqLworZXh0ZXJuIGludCBsZXZlbGRiX21p
bm9yX3ZlcnNpb24oKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvKiBlbmQgZXh0ZXJuICJD
IiAqLworI2VuZGlmCisKKyNlbmRpZiAgLyogU1RPUkFHRV9MRVZFTERCX0lOQ0xVREVfQ19IXyAq
LwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIv
Y2FjaGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvaW5jbHVkZS9sZXZlbGRiL2NhY2hl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNWUzYjQ3NjM3ZDQ5ZTlmOTYzYjE0MWRjNWEwMTFlMTI3MjYxNTc1MAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvaW5jbHVkZS9sZXZl
bGRiL2NhY2hlLmgKQEAgLTAsMCArMSw5OSBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBM
ZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFt
ZXMgb2YgY29udHJpYnV0b3JzLgorLy8KKy8vIEEgQ2FjaGUgaXMgYW4gaW50ZXJmYWNlIHRoYXQg
bWFwcyBrZXlzIHRvIHZhbHVlcy4gIEl0IGhhcyBpbnRlcm5hbAorLy8gc3luY2hyb25pemF0aW9u
IGFuZCBtYXkgYmUgc2FmZWx5IGFjY2Vzc2VkIGNvbmN1cnJlbnRseSBmcm9tCisvLyBtdWx0aXBs
ZSB0aHJlYWRzLiAgSXQgbWF5IGF1dG9tYXRpY2FsbHkgZXZpY3QgZW50cmllcyB0byBtYWtlIHJv
b20KKy8vIGZvciBuZXcgZW50cmllcy4gIFZhbHVlcyBoYXZlIGEgc3BlY2lmaWVkIGNoYXJnZSBh
Z2FpbnN0IHRoZSBjYWNoZQorLy8gY2FwYWNpdHkuICBGb3IgZXhhbXBsZSwgYSBjYWNoZSB3aGVy
ZSB0aGUgdmFsdWVzIGFyZSB2YXJpYWJsZQorLy8gbGVuZ3RoIHN0cmluZ3MsIG1heSB1c2UgdGhl
IGxlbmd0aCBvZiB0aGUgc3RyaW5nIGFzIHRoZSBjaGFyZ2UgZm9yCisvLyB0aGUgc3RyaW5nLgor
Ly8KKy8vIEEgYnVpbHRpbiBjYWNoZSBpbXBsZW1lbnRhdGlvbiB3aXRoIGEgbGVhc3QtcmVjZW50
bHktdXNlZCBldmljdGlvbgorLy8gcG9saWN5IGlzIHByb3ZpZGVkLiAgQ2xpZW50cyBtYXkgdXNl
IHRoZWlyIG93biBpbXBsZW1lbnRhdGlvbnMgaWYKKy8vIHRoZXkgd2FudCBzb21ldGhpbmcgbW9y
ZSBzb3BoaXN0aWNhdGVkIChsaWtlIHNjYW4tcmVzaXN0YW5jZSwgYQorLy8gY3VzdG9tIGV2aWN0
aW9uIHBvbGljeSwgdmFyaWFibGUgY2FjaGUgc2l6aW5nLCBldGMuKQorCisjaWZuZGVmIFNUT1JB
R0VfTEVWRUxEQl9JTkNMVURFX0NBQ0hFX0hfCisjZGVmaW5lIFNUT1JBR0VfTEVWRUxEQl9JTkNM
VURFX0NBQ0hFX0hfCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlICJsZXZlbGRiL3Ns
aWNlLmgiCisKK25hbWVzcGFjZSBsZXZlbGRiIHsKKworY2xhc3MgQ2FjaGU7CisKKy8vIENyZWF0
ZSBhIG5ldyBjYWNoZSB3aXRoIGEgZml4ZWQgc2l6ZSBjYXBhY2l0eS4gIFRoaXMgaW1wbGVtZW50
YXRpb24KKy8vIG9mIENhY2hlIHVzZXMgYSBsZWFzdC1yZWNlbnRseS11c2VkIGV2aWN0aW9uIHBv
bGljeS4KK2V4dGVybiBDYWNoZSogTmV3TFJVQ2FjaGUoc2l6ZV90IGNhcGFjaXR5KTsKKworY2xh
c3MgQ2FjaGUgeworIHB1YmxpYzoKKyAgQ2FjaGUoKSB7IH0KKworICAvLyBEZXN0cm95cyBhbGwg
ZXhpc3RpbmcgZW50cmllcyBieSBjYWxsaW5nIHRoZSAiZGVsZXRlciIKKyAgLy8gZnVuY3Rpb24g
dGhhdCB3YXMgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3Rvci4KKyAgdmlydHVhbCB+Q2FjaGUoKTsK
KworICAvLyBPcGFxdWUgaGFuZGxlIHRvIGFuIGVudHJ5IHN0b3JlZCBpbiB0aGUgY2FjaGUuCisg
IHN0cnVjdCBIYW5kbGUgeyB9OworCisgIC8vIEluc2VydCBhIG1hcHBpbmcgZnJvbSBrZXktPnZh
bHVlIGludG8gdGhlIGNhY2hlIGFuZCBhc3NpZ24gaXQKKyAgLy8gdGhlIHNwZWNpZmllZCBjaGFy
Z2UgYWdhaW5zdCB0aGUgdG90YWwgY2FjaGUgY2FwYWNpdHkuCisgIC8vCisgIC8vIFJldHVybnMg
YSBoYW5kbGUgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgbWFwcGluZy4gIFRoZSBjYWxsZXIKKyAg
Ly8gbXVzdCBjYWxsIHRoaXMtPlJlbGVhc2UoaGFuZGxlKSB3aGVuIHRoZSByZXR1cm5lZCBtYXBw
aW5nIGlzIG5vCisgIC8vIGxvbmdlciBuZWVkZWQuCisgIC8vCisgIC8vIFdoZW4gdGhlIGluc2Vy
dGVkIGVudHJ5IGlzIG5vIGxvbmdlciBuZWVkZWQsIHRoZSBrZXkgYW5kCisgIC8vIHZhbHVlIHdp
bGwgYmUgcGFzc2VkIHRvICJkZWxldGVyIi4KKyAgdmlydHVhbCBIYW5kbGUqIEluc2VydChjb25z
dCBTbGljZSYga2V5LCB2b2lkKiB2YWx1ZSwgc2l6ZV90IGNoYXJnZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICB2b2lkICgqZGVsZXRlcikoY29uc3QgU2xpY2UmIGtleSwgdm9pZCogdmFsdWUp
KSA9IDA7CisKKyAgLy8gSWYgdGhlIGNhY2hlIGhhcyBubyBtYXBwaW5nIGZvciAia2V5IiwgcmV0
dXJucyBOVUxMLgorICAvLworICAvLyBFbHNlIHJldHVybiBhIGhhbmRsZSB0aGF0IGNvcnJlc3Bv
bmRzIHRvIHRoZSBtYXBwaW5nLiAgVGhlIGNhbGxlcgorICAvLyBtdXN0IGNhbGwgdGhpcy0+UmVs
ZWFzZShoYW5kbGUpIHdoZW4gdGhlIHJldHVybmVkIG1hcHBpbmcgaXMgbm8KKyAgLy8gbG9uZ2Vy
IG5lZWRlZC4KKyAgdmlydHVhbCBIYW5kbGUqIExvb2t1cChjb25zdCBTbGljZSYga2V5KSA9IDA7
CisKKyAgLy8gUmVsZWFzZSBhIG1hcHBpbmcgcmV0dXJuZWQgYnkgYSBwcmV2aW91cyBMb29rdXAo
KS4KKyAgLy8gUkVRVUlSRVM6IGhhbmRsZSBtdXN0IG5vdCBoYXZlIGJlZW4gcmVsZWFzZWQgeWV0
LgorICAvLyBSRVFVSVJFUzogaGFuZGxlIG11c3QgaGF2ZSBiZWVuIHJldHVybmVkIGJ5IGEgbWV0
aG9kIG9uICp0aGlzLgorICB2aXJ0dWFsIHZvaWQgUmVsZWFzZShIYW5kbGUqIGhhbmRsZSkgPSAw
OworCisgIC8vIFJldHVybiB0aGUgdmFsdWUgZW5jYXBzdWxhdGVkIGluIGEgaGFuZGxlIHJldHVy
bmVkIGJ5IGEKKyAgLy8gc3VjY2Vzc2Z1bCBMb29rdXAoKS4KKyAgLy8gUkVRVUlSRVM6IGhhbmRs
ZSBtdXN0IG5vdCBoYXZlIGJlZW4gcmVsZWFzZWQgeWV0LgorICAvLyBSRVFVSVJFUzogaGFuZGxl
IG11c3QgaGF2ZSBiZWVuIHJldHVybmVkIGJ5IGEgbWV0aG9kIG9uICp0aGlzLgorICB2aXJ0dWFs
IHZvaWQqIFZhbHVlKEhhbmRsZSogaGFuZGxlKSA9IDA7CisKKyAgLy8gSWYgdGhlIGNhY2hlIGNv
bnRhaW5zIGVudHJ5IGZvciBrZXksIGVyYXNlIGl0LiAgTm90ZSB0aGF0IHRoZQorICAvLyB1bmRl
cmx5aW5nIGVudHJ5IHdpbGwgYmUga2VwdCBhcm91bmQgdW50aWwgYWxsIGV4aXN0aW5nIGhhbmRs
ZXMKKyAgLy8gdG8gaXQgaGF2ZSBiZWVuIHJlbGVhc2VkLgorICB2aXJ0dWFsIHZvaWQgRXJhc2Uo
Y29uc3QgU2xpY2UmIGtleSkgPSAwOworCisgIC8vIFJldHVybiBhIG5ldyBudW1lcmljIGlkLiAg
TWF5IGJlIHVzZWQgYnkgbXVsdGlwbGUgY2xpZW50cyB3aG8gYXJlCisgIC8vIHNoYXJpbmcgdGhl
IHNhbWUgY2FjaGUgdG8gcGFydGl0aW9uIHRoZSBrZXkgc3BhY2UuICBUeXBpY2FsbHkgdGhlCisg
IC8vIGNsaWVudCB3aWxsIGFsbG9jYXRlIGEgbmV3IGlkIGF0IHN0YXJ0dXAgYW5kIHByZXBlbmQg
dGhlIGlkIHRvCisgIC8vIGl0cyBjYWNoZSBrZXlzLgorICB2aXJ0dWFsIHVpbnQ2NF90IE5ld0lk
KCkgPSAwOworCisgcHJpdmF0ZToKKyAgdm9pZCBMUlVfUmVtb3ZlKEhhbmRsZSogZSk7CisgIHZv
aWQgTFJVX0FwcGVuZChIYW5kbGUqIGUpOworICB2b2lkIFVucmVmKEhhbmRsZSogZSk7CisKKyAg
c3RydWN0IFJlcDsKKyAgUmVwKiByZXBfOworCisgIC8vIE5vIGNvcHlpbmcgYWxsb3dlZAorICBD
YWNoZShjb25zdCBDYWNoZSYpOworICB2b2lkIG9wZXJhdG9yPShjb25zdCBDYWNoZSYpOworfTsK
KworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKKworI2VuZGlmICAvLyBTVE9SQUdFX0xFVkVMREJf
VVRJTF9DQUNIRV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9pbmNs
dWRlL2xldmVsZGIvY29tcGFyYXRvci5oIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9pbmNs
dWRlL2xldmVsZGIvY29tcGFyYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU1NmI5ODRjNzY5NGY2NTIwMDg4
NzU0ZjMwMTdiZjU4YzdjYWZjOWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9sZXZlbGRiL2luY2x1ZGUvbGV2ZWxkYi9jb21wYXJhdG9yLmgKQEAgLTAsMCArMSw2MyBAQAor
Ly8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBT
ZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgorCisjaWZuZGVm
IFNUT1JBR0VfTEVWRUxEQl9JTkNMVURFX0NPTVBBUkFUT1JfSF8KKyNkZWZpbmUgU1RPUkFHRV9M
RVZFTERCX0lOQ0xVREVfQ09NUEFSQVRPUl9IXworCisjaW5jbHVkZSA8c3RyaW5nPgorCituYW1l
c3BhY2UgbGV2ZWxkYiB7CisKK2NsYXNzIFNsaWNlOworCisvLyBBIENvbXBhcmF0b3Igb2JqZWN0
IHByb3ZpZGVzIGEgdG90YWwgb3JkZXIgYWNyb3NzIHNsaWNlcyB0aGF0IGFyZQorLy8gdXNlZCBh
cyBrZXlzIGluIGFuIHNzdGFibGUgb3IgYSBkYXRhYmFzZS4gIEEgQ29tcGFyYXRvciBpbXBsZW1l
bnRhdGlvbgorLy8gbXVzdCBiZSB0aHJlYWQtc2FmZSBzaW5jZSBsZXZlbGRiIG1heSBpbnZva2Ug
aXRzIG1ldGhvZHMgY29uY3VycmVudGx5CisvLyBmcm9tIG11bHRpcGxlIHRocmVhZHMuCitjbGFz
cyBDb21wYXJhdG9yIHsKKyBwdWJsaWM6CisgIHZpcnR1YWwgfkNvbXBhcmF0b3IoKTsKKworICAv
LyBUaHJlZS13YXkgY29tcGFyaXNvbi4gIFJldHVybnMgdmFsdWU6CisgIC8vICAgPCAwIGlmZiAi
YSIgPCAiYiIsCisgIC8vICAgPT0gMCBpZmYgImEiID09ICJiIiwKKyAgLy8gICA+IDAgaWZmICJh
IiA+ICJiIgorICB2aXJ0dWFsIGludCBDb21wYXJlKGNvbnN0IFNsaWNlJiBhLCBjb25zdCBTbGlj
ZSYgYikgY29uc3QgPSAwOworCisgIC8vIFRoZSBuYW1lIG9mIHRoZSBjb21wYXJhdG9yLiAgVXNl
ZCB0byBjaGVjayBmb3IgY29tcGFyYXRvcgorICAvLyBtaXNtYXRjaGVzIChpLmUuLCBhIERCIGNy
ZWF0ZWQgd2l0aCBvbmUgY29tcGFyYXRvciBpcworICAvLyBhY2Nlc3NlZCB1c2luZyBhIGRpZmZl
cmVudCBjb21wYXJhdG9yLgorICAvLworICAvLyBUaGUgY2xpZW50IG9mIHRoaXMgcGFja2FnZSBz
aG91bGQgc3dpdGNoIHRvIGEgbmV3IG5hbWUgd2hlbmV2ZXIKKyAgLy8gdGhlIGNvbXBhcmF0b3Ig
aW1wbGVtZW50YXRpb24gY2hhbmdlcyBpbiBhIHdheSB0aGF0IHdpbGwgY2F1c2UKKyAgLy8gdGhl
IHJlbGF0aXZlIG9yZGVyaW5nIG9mIGFueSB0d28ga2V5cyB0byBjaGFuZ2UuCisgIC8vCisgIC8v
IE5hbWVzIHN0YXJ0aW5nIHdpdGggImxldmVsZGIuIiBhcmUgcmVzZXJ2ZWQgYW5kIHNob3VsZCBu
b3QgYmUgdXNlZAorICAvLyBieSBhbnkgY2xpZW50cyBvZiB0aGlzIHBhY2thZ2UuCisgIHZpcnR1
YWwgY29uc3QgY2hhciogTmFtZSgpIGNvbnN0ID0gMDsKKworICAvLyBBZHZhbmNlZCBmdW5jdGlv
bnM6IHRoZXNlIGFyZSB1c2VkIHRvIHJlZHVjZSB0aGUgc3BhY2UgcmVxdWlyZW1lbnRzCisgIC8v
IGZvciBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgbGlrZSBpbmRleCBibG9ja3MuCisKKyAgLy8g
SWYgKnN0YXJ0IDwgbGltaXQsIGNoYW5nZXMgKnN0YXJ0IHRvIGEgc2hvcnQgc3RyaW5nIGluIFtz
dGFydCxsaW1pdCkuCisgIC8vIFNpbXBsZSBjb21wYXJhdG9yIGltcGxlbWVudGF0aW9ucyBtYXkg
cmV0dXJuIHdpdGggKnN0YXJ0IHVuY2hhbmdlZCwKKyAgLy8gaS5lLiwgYW4gaW1wbGVtZW50YXRp
b24gb2YgdGhpcyBtZXRob2QgdGhhdCBkb2VzIG5vdGhpbmcgaXMgY29ycmVjdC4KKyAgdmlydHVh
bCB2b2lkIEZpbmRTaG9ydGVzdFNlcGFyYXRvcigKKyAgICAgIHN0ZDo6c3RyaW5nKiBzdGFydCwK
KyAgICAgIGNvbnN0IFNsaWNlJiBsaW1pdCkgY29uc3QgPSAwOworCisgIC8vIENoYW5nZXMgKmtl
eSB0byBhIHNob3J0IHN0cmluZyA+PSAqa2V5LgorICAvLyBTaW1wbGUgY29tcGFyYXRvciBpbXBs
ZW1lbnRhdGlvbnMgbWF5IHJldHVybiB3aXRoICprZXkgdW5jaGFuZ2VkLAorICAvLyBpLmUuLCBh
biBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1ldGhvZCB0aGF0IGRvZXMgbm90aGluZyBpcyBjb3Jy
ZWN0LgorICB2aXJ0dWFsIHZvaWQgRmluZFNob3J0U3VjY2Vzc29yKHN0ZDo6c3RyaW5nKiBrZXkp
IGNvbnN0ID0gMDsKK307CisKKy8vIFJldHVybiBhIGJ1aWx0aW4gY29tcGFyYXRvciB0aGF0IHVz
ZXMgbGV4aWNvZ3JhcGhpYyBieXRlLXdpc2UKKy8vIG9yZGVyaW5nLiAgVGhlIHJlc3VsdCByZW1h
aW5zIHRoZSBwcm9wZXJ0eSBvZiB0aGlzIG1vZHVsZSBhbmQKKy8vIG11c3Qgbm90IGJlIGRlbGV0
ZWQuCitleHRlcm4gY29uc3QgQ29tcGFyYXRvciogQnl0ZXdpc2VDb21wYXJhdG9yKCk7CisKK30g
IC8vIG5hbWVzcGFjZSBsZXZlbGRiCisKKyNlbmRpZiAgLy8gU1RPUkFHRV9MRVZFTERCX0lOQ0xV
REVfQ09NUEFSQVRPUl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9p
bmNsdWRlL2xldmVsZGIvZGIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvaW5jbHVkZS9s
ZXZlbGRiL2RiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjlkMzY3NDQ3OTA3MDYzOTc1NjA4ZDc0MmM4YTI5YTc5
OTg0OGZiNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvaW5j
bHVkZS9sZXZlbGRiL2RiLmgKQEAgLTAsMCArMSwxNjEgQEAKKy8vIENvcHlyaWdodCAoYykgMjAx
MSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUg
Zm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2lmbmRlZiBTVE9SQUdFX0xFVkVMREJfSU5D
TFVERV9EQl9IXworI2RlZmluZSBTVE9SQUdFX0xFVkVMREJfSU5DTFVERV9EQl9IXworCisjaW5j
bHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJsZXZlbGRiL2l0
ZXJhdG9yLmgiCisjaW5jbHVkZSAibGV2ZWxkYi9vcHRpb25zLmgiCisKK25hbWVzcGFjZSBsZXZl
bGRiIHsKKworLy8gVXBkYXRlIE1ha2VmaWxlIGlmIHlvdSBjaGFuZ2UgdGhlc2UKK3N0YXRpYyBj
b25zdCBpbnQga01ham9yVmVyc2lvbiA9IDE7CitzdGF0aWMgY29uc3QgaW50IGtNaW5vclZlcnNp
b24gPSA5OworCitzdHJ1Y3QgT3B0aW9uczsKK3N0cnVjdCBSZWFkT3B0aW9uczsKK3N0cnVjdCBX
cml0ZU9wdGlvbnM7CitjbGFzcyBXcml0ZUJhdGNoOworCisvLyBBYnN0cmFjdCBoYW5kbGUgdG8g
cGFydGljdWxhciBzdGF0ZSBvZiBhIERCLgorLy8gQSBTbmFwc2hvdCBpcyBhbiBpbW11dGFibGUg
b2JqZWN0IGFuZCBjYW4gdGhlcmVmb3JlIGJlIHNhZmVseQorLy8gYWNjZXNzZWQgZnJvbSBtdWx0
aXBsZSB0aHJlYWRzIHdpdGhvdXQgYW55IGV4dGVybmFsIHN5bmNocm9uaXphdGlvbi4KK2NsYXNz
IFNuYXBzaG90IHsKKyBwcm90ZWN0ZWQ6CisgIHZpcnR1YWwgflNuYXBzaG90KCk7Cit9OworCisv
LyBBIHJhbmdlIG9mIGtleXMKK3N0cnVjdCBSYW5nZSB7CisgIFNsaWNlIHN0YXJ0OyAgICAgICAg
ICAvLyBJbmNsdWRlZCBpbiB0aGUgcmFuZ2UKKyAgU2xpY2UgbGltaXQ7ICAgICAgICAgIC8vIE5v
dCBpbmNsdWRlZCBpbiB0aGUgcmFuZ2UKKworICBSYW5nZSgpIHsgfQorICBSYW5nZShjb25zdCBT
bGljZSYgcywgY29uc3QgU2xpY2UmIGwpIDogc3RhcnQocyksIGxpbWl0KGwpIHsgfQorfTsKKwor
Ly8gQSBEQiBpcyBhIHBlcnNpc3RlbnQgb3JkZXJlZCBtYXAgZnJvbSBrZXlzIHRvIHZhbHVlcy4K
Ky8vIEEgREIgaXMgc2FmZSBmb3IgY29uY3VycmVudCBhY2Nlc3MgZnJvbSBtdWx0aXBsZSB0aHJl
YWRzIHdpdGhvdXQKKy8vIGFueSBleHRlcm5hbCBzeW5jaHJvbml6YXRpb24uCitjbGFzcyBEQiB7
CisgcHVibGljOgorICAvLyBPcGVuIHRoZSBkYXRhYmFzZSB3aXRoIHRoZSBzcGVjaWZpZWQgIm5h
bWUiLgorICAvLyBTdG9yZXMgYSBwb2ludGVyIHRvIGEgaGVhcC1hbGxvY2F0ZWQgZGF0YWJhc2Ug
aW4gKmRicHRyIGFuZCByZXR1cm5zCisgIC8vIE9LIG9uIHN1Y2Nlc3MuCisgIC8vIFN0b3JlcyBO
VUxMIGluICpkYnB0ciBhbmQgcmV0dXJucyBhIG5vbi1PSyBzdGF0dXMgb24gZXJyb3IuCisgIC8v
IENhbGxlciBzaG91bGQgZGVsZXRlICpkYnB0ciB3aGVuIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQu
CisgIHN0YXRpYyBTdGF0dXMgT3Blbihjb25zdCBPcHRpb25zJiBvcHRpb25zLAorICAgICAgICAg
ICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsCisgICAgICAgICAgICAgICAgICAg
ICBEQioqIGRicHRyKTsKKworICBEQigpIHsgfQorICB2aXJ0dWFsIH5EQigpOworCisgIC8vIFNl
dCB0aGUgZGF0YWJhc2UgZW50cnkgZm9yICJrZXkiIHRvICJ2YWx1ZSIuICBSZXR1cm5zIE9LIG9u
IHN1Y2Nlc3MsCisgIC8vIGFuZCBhIG5vbi1PSyBzdGF0dXMgb24gZXJyb3IuCisgIC8vIE5vdGU6
IGNvbnNpZGVyIHNldHRpbmcgb3B0aW9ucy5zeW5jID0gdHJ1ZS4KKyAgdmlydHVhbCBTdGF0dXMg
UHV0KGNvbnN0IFdyaXRlT3B0aW9ucyYgb3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFNsaWNlJiBrZXksCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBTbGljZSYgdmFsdWUp
ID0gMDsKKworICAvLyBSZW1vdmUgdGhlIGRhdGFiYXNlIGVudHJ5IChpZiBhbnkpIGZvciAia2V5
Ii4gIFJldHVybnMgT0sgb24KKyAgLy8gc3VjY2VzcywgYW5kIGEgbm9uLU9LIHN0YXR1cyBvbiBl
cnJvci4gIEl0IGlzIG5vdCBhbiBlcnJvciBpZiAia2V5IgorICAvLyBkaWQgbm90IGV4aXN0IGlu
IHRoZSBkYXRhYmFzZS4KKyAgLy8gTm90ZTogY29uc2lkZXIgc2V0dGluZyBvcHRpb25zLnN5bmMg
PSB0cnVlLgorICB2aXJ0dWFsIFN0YXR1cyBEZWxldGUoY29uc3QgV3JpdGVPcHRpb25zJiBvcHRp
b25zLCBjb25zdCBTbGljZSYga2V5KSA9IDA7CisKKyAgLy8gQXBwbHkgdGhlIHNwZWNpZmllZCB1
cGRhdGVzIHRvIHRoZSBkYXRhYmFzZS4KKyAgLy8gUmV0dXJucyBPSyBvbiBzdWNjZXNzLCBub24t
T0sgb24gZmFpbHVyZS4KKyAgLy8gTm90ZTogY29uc2lkZXIgc2V0dGluZyBvcHRpb25zLnN5bmMg
PSB0cnVlLgorICB2aXJ0dWFsIFN0YXR1cyBXcml0ZShjb25zdCBXcml0ZU9wdGlvbnMmIG9wdGlv
bnMsIFdyaXRlQmF0Y2gqIHVwZGF0ZXMpID0gMDsKKworICAvLyBJZiB0aGUgZGF0YWJhc2UgY29u
dGFpbnMgYW4gZW50cnkgZm9yICJrZXkiIHN0b3JlIHRoZQorICAvLyBjb3JyZXNwb25kaW5nIHZh
bHVlIGluICp2YWx1ZSBhbmQgcmV0dXJuIE9LLgorICAvLworICAvLyBJZiB0aGVyZSBpcyBubyBl
bnRyeSBmb3IgImtleSIgbGVhdmUgKnZhbHVlIHVuY2hhbmdlZCBhbmQgcmV0dXJuCisgIC8vIGEg
c3RhdHVzIGZvciB3aGljaCBTdGF0dXM6OklzTm90Rm91bmQoKSByZXR1cm5zIHRydWUuCisgIC8v
CisgIC8vIE1heSByZXR1cm4gc29tZSBvdGhlciBTdGF0dXMgb24gYW4gZXJyb3IuCisgIHZpcnR1
YWwgU3RhdHVzIEdldChjb25zdCBSZWFkT3B0aW9ucyYgb3B0aW9ucywKKyAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFNsaWNlJiBrZXksIHN0ZDo6c3RyaW5nKiB2YWx1ZSkgPSAwOworCisgIC8v
IFJldHVybiBhIGhlYXAtYWxsb2NhdGVkIGl0ZXJhdG9yIG92ZXIgdGhlIGNvbnRlbnRzIG9mIHRo
ZSBkYXRhYmFzZS4KKyAgLy8gVGhlIHJlc3VsdCBvZiBOZXdJdGVyYXRvcigpIGlzIGluaXRpYWxs
eSBpbnZhbGlkIChjYWxsZXIgbXVzdAorICAvLyBjYWxsIG9uZSBvZiB0aGUgU2VlayBtZXRob2Rz
IG9uIHRoZSBpdGVyYXRvciBiZWZvcmUgdXNpbmcgaXQpLgorICAvLworICAvLyBDYWxsZXIgc2hv
dWxkIGRlbGV0ZSB0aGUgaXRlcmF0b3Igd2hlbiBpdCBpcyBubyBsb25nZXIgbmVlZGVkLgorICAv
LyBUaGUgcmV0dXJuZWQgaXRlcmF0b3Igc2hvdWxkIGJlIGRlbGV0ZWQgYmVmb3JlIHRoaXMgZGIg
aXMgZGVsZXRlZC4KKyAgdmlydHVhbCBJdGVyYXRvciogTmV3SXRlcmF0b3IoY29uc3QgUmVhZE9w
dGlvbnMmIG9wdGlvbnMpID0gMDsKKworICAvLyBSZXR1cm4gYSBoYW5kbGUgdG8gdGhlIGN1cnJl
bnQgREIgc3RhdGUuICBJdGVyYXRvcnMgY3JlYXRlZCB3aXRoCisgIC8vIHRoaXMgaGFuZGxlIHdp
bGwgYWxsIG9ic2VydmUgYSBzdGFibGUgc25hcHNob3Qgb2YgdGhlIGN1cnJlbnQgREIKKyAgLy8g
c3RhdGUuICBUaGUgY2FsbGVyIG11c3QgY2FsbCBSZWxlYXNlU25hcHNob3QocmVzdWx0KSB3aGVu
IHRoZQorICAvLyBzbmFwc2hvdCBpcyBubyBsb25nZXIgbmVlZGVkLgorICB2aXJ0dWFsIGNvbnN0
IFNuYXBzaG90KiBHZXRTbmFwc2hvdCgpID0gMDsKKworICAvLyBSZWxlYXNlIGEgcHJldmlvdXNs
eSBhY3F1aXJlZCBzbmFwc2hvdC4gIFRoZSBjYWxsZXIgbXVzdCBub3QKKyAgLy8gdXNlICJzbmFw
c2hvdCIgYWZ0ZXIgdGhpcyBjYWxsLgorICB2aXJ0dWFsIHZvaWQgUmVsZWFzZVNuYXBzaG90KGNv
bnN0IFNuYXBzaG90KiBzbmFwc2hvdCkgPSAwOworCisgIC8vIERCIGltcGxlbWVudGF0aW9ucyBj
YW4gZXhwb3J0IHByb3BlcnRpZXMgYWJvdXQgdGhlaXIgc3RhdGUKKyAgLy8gdmlhIHRoaXMgbWV0
aG9kLiAgSWYgInByb3BlcnR5IiBpcyBhIHZhbGlkIHByb3BlcnR5IHVuZGVyc3Rvb2QgYnkgdGhp
cworICAvLyBEQiBpbXBsZW1lbnRhdGlvbiwgZmlsbHMgIip2YWx1ZSIgd2l0aCBpdHMgY3VycmVu
dCB2YWx1ZSBhbmQgcmV0dXJucworICAvLyB0cnVlLiAgT3RoZXJ3aXNlIHJldHVybnMgZmFsc2Uu
CisgIC8vCisgIC8vCisgIC8vIFZhbGlkIHByb3BlcnR5IG5hbWVzIGluY2x1ZGU6CisgIC8vCisg
IC8vICAibGV2ZWxkYi5udW0tZmlsZXMtYXQtbGV2ZWw8Tj4iIC0gcmV0dXJuIHRoZSBudW1iZXIg
b2YgZmlsZXMgYXQgbGV2ZWwgPE4+LAorICAvLyAgICAgd2hlcmUgPE4+IGlzIGFuIEFTQ0lJIHJl
cHJlc2VudGF0aW9uIG9mIGEgbGV2ZWwgbnVtYmVyIChlLmcuICIwIikuCisgIC8vICAibGV2ZWxk
Yi5zdGF0cyIgLSByZXR1cm5zIGEgbXVsdGktbGluZSBzdHJpbmcgdGhhdCBkZXNjcmliZXMgc3Rh
dGlzdGljcworICAvLyAgICAgYWJvdXQgdGhlIGludGVybmFsIG9wZXJhdGlvbiBvZiB0aGUgREIu
CisgIC8vICAibGV2ZWxkYi5zc3RhYmxlcyIgLSByZXR1cm5zIGEgbXVsdGktbGluZSBzdHJpbmcg
dGhhdCBkZXNjcmliZXMgYWxsCisgIC8vICAgICBvZiB0aGUgc3N0YWJsZXMgdGhhdCBtYWtlIHVw
IHRoZSBkYiBjb250ZW50cy4KKyAgdmlydHVhbCBib29sIEdldFByb3BlcnR5KGNvbnN0IFNsaWNl
JiBwcm9wZXJ0eSwgc3RkOjpzdHJpbmcqIHZhbHVlKSA9IDA7CisKKyAgLy8gRm9yIGVhY2ggaSBp
biBbMCxuLTFdLCBzdG9yZSBpbiAic2l6ZXNbaV0iLCB0aGUgYXBwcm94aW1hdGUKKyAgLy8gZmls
ZSBzeXN0ZW0gc3BhY2UgdXNlZCBieSBrZXlzIGluICJbcmFuZ2VbaV0uc3RhcnQgLi4gcmFuZ2Vb
aV0ubGltaXQpIi4KKyAgLy8KKyAgLy8gTm90ZSB0aGF0IHRoZSByZXR1cm5lZCBzaXplcyBtZWFz
dXJlIGZpbGUgc3lzdGVtIHNwYWNlIHVzYWdlLCBzbworICAvLyBpZiB0aGUgdXNlciBkYXRhIGNv
bXByZXNzZXMgYnkgYSBmYWN0b3Igb2YgdGVuLCB0aGUgcmV0dXJuZWQKKyAgLy8gc2l6ZXMgd2ls
bCBiZSBvbmUtdGVudGggdGhlIHNpemUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgdXNlciBkYXRhIHNp
emUuCisgIC8vCisgIC8vIFRoZSByZXN1bHRzIG1heSBub3QgaW5jbHVkZSB0aGUgc2l6ZXMgb2Yg
cmVjZW50bHkgd3JpdHRlbiBkYXRhLgorICB2aXJ0dWFsIHZvaWQgR2V0QXBwcm94aW1hdGVTaXpl
cyhjb25zdCBSYW5nZSogcmFuZ2UsIGludCBuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1aW50NjRfdCogc2l6ZXMpID0gMDsKKworICAvLyBDb21wYWN0IHRoZSB1bmRlcmx5
aW5nIHN0b3JhZ2UgZm9yIHRoZSBrZXkgcmFuZ2UgWypiZWdpbiwqZW5kXS4KKyAgLy8gSW4gcGFy
dGljdWxhciwgZGVsZXRlZCBhbmQgb3ZlcndyaXR0ZW4gdmVyc2lvbnMgYXJlIGRpc2NhcmRlZCwK
KyAgLy8gYW5kIHRoZSBkYXRhIGlzIHJlYXJyYW5nZWQgdG8gcmVkdWNlIHRoZSBjb3N0IG9mIG9w
ZXJhdGlvbnMKKyAgLy8gbmVlZGVkIHRvIGFjY2VzcyB0aGUgZGF0YS4gIFRoaXMgb3BlcmF0aW9u
IHNob3VsZCB0eXBpY2FsbHkgb25seQorICAvLyBiZSBpbnZva2VkIGJ5IHVzZXJzIHdobyB1bmRl
cnN0YW5kIHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uLgorICAvLworICAvLyBiZWdpbj09
TlVMTCBpcyB0cmVhdGVkIGFzIGEga2V5IGJlZm9yZSBhbGwga2V5cyBpbiB0aGUgZGF0YWJhc2Uu
CisgIC8vIGVuZD09TlVMTCBpcyB0cmVhdGVkIGFzIGEga2V5IGFmdGVyIGFsbCBrZXlzIGluIHRo
ZSBkYXRhYmFzZS4KKyAgLy8gVGhlcmVmb3JlIHRoZSBmb2xsb3dpbmcgY2FsbCB3aWxsIGNvbXBh
Y3QgdGhlIGVudGlyZSBkYXRhYmFzZToKKyAgLy8gICAgZGItPkNvbXBhY3RSYW5nZShOVUxMLCBO
VUxMKTsKKyAgdmlydHVhbCB2b2lkIENvbXBhY3RSYW5nZShjb25zdCBTbGljZSogYmVnaW4sIGNv
bnN0IFNsaWNlKiBlbmQpID0gMDsKKworIHByaXZhdGU6CisgIC8vIE5vIGNvcHlpbmcgYWxsb3dl
ZAorICBEQihjb25zdCBEQiYpOworICB2b2lkIG9wZXJhdG9yPShjb25zdCBEQiYpOworfTsKKwor
Ly8gRGVzdHJveSB0aGUgY29udGVudHMgb2YgdGhlIHNwZWNpZmllZCBkYXRhYmFzZS4KKy8vIEJl
IHZlcnkgY2FyZWZ1bCB1c2luZyB0aGlzIG1ldGhvZC4KK1N0YXR1cyBEZXN0cm95REIoY29uc3Qg
c3RkOjpzdHJpbmcmIG5hbWUsIGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMpOworCisvLyBJZiBhIERC
IGNhbm5vdCBiZSBvcGVuZWQsIHlvdSBtYXkgYXR0ZW1wdCB0byBjYWxsIHRoaXMgbWV0aG9kIHRv
CisvLyByZXN1cnJlY3QgYXMgbXVjaCBvZiB0aGUgY29udGVudHMgb2YgdGhlIGRhdGFiYXNlIGFz
IHBvc3NpYmxlLgorLy8gU29tZSBkYXRhIG1heSBiZSBsb3N0LCBzbyBiZSBjYXJlZnVsIHdoZW4g
Y2FsbGluZyB0aGlzIGZ1bmN0aW9uCisvLyBvbiBhIGRhdGFiYXNlIHRoYXQgY29udGFpbnMgaW1w
b3J0YW50IGluZm9ybWF0aW9uLgorU3RhdHVzIFJlcGFpckRCKGNvbnN0IHN0ZDo6c3RyaW5nJiBk
Ym5hbWUsIGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMpOworCit9ICAvLyBuYW1lc3BhY2UgbGV2ZWxk
YgorCisjZW5kaWYgIC8vIFNUT1JBR0VfTEVWRUxEQl9JTkNMVURFX0RCX0hfCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2luY2x1ZGUvbGV2ZWxkYi9lbnYuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xldmVsZGIvaW5jbHVkZS9sZXZlbGRiL2Vudi5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZh
MzIyODlmNTgxZmQ0ZDIyMmRjNzRlYTE3N2E3ODEzOGI3MWZiYzIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2luY2x1ZGUvbGV2ZWxkYi9lbnYuaApAQCAtMCww
ICsxLDMzMyBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3Jz
LgorLy8KKy8vIEFuIEVudiBpcyBhbiBpbnRlcmZhY2UgdXNlZCBieSB0aGUgbGV2ZWxkYiBpbXBs
ZW1lbnRhdGlvbiB0byBhY2Nlc3MKKy8vIG9wZXJhdGluZyBzeXN0ZW0gZnVuY3Rpb25hbGl0eSBs
aWtlIHRoZSBmaWxlc3lzdGVtIGV0Yy4gIENhbGxlcnMKKy8vIG1heSB3aXNoIHRvIHByb3ZpZGUg
YSBjdXN0b20gRW52IG9iamVjdCB3aGVuIG9wZW5pbmcgYSBkYXRhYmFzZSB0bworLy8gZ2V0IGZp
bmUgZ2FpbiBjb250cm9sOyBlLmcuLCB0byByYXRlIGxpbWl0IGZpbGUgc3lzdGVtIG9wZXJhdGlv
bnMuCisvLworLy8gQWxsIEVudiBpbXBsZW1lbnRhdGlvbnMgYXJlIHNhZmUgZm9yIGNvbmN1cnJl
bnQgYWNjZXNzIGZyb20KKy8vIG11bHRpcGxlIHRocmVhZHMgd2l0aG91dCBhbnkgZXh0ZXJuYWwg
c3luY2hyb25pemF0aW9uLgorCisjaWZuZGVmIFNUT1JBR0VfTEVWRUxEQl9JTkNMVURFX0VOVl9I
XworI2RlZmluZSBTVE9SQUdFX0xFVkVMREJfSU5DTFVERV9FTlZfSF8KKworI2luY2x1ZGUgPGNz
dGRhcmc+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlIDxz
dGRpbnQuaD4KKyNpbmNsdWRlICJsZXZlbGRiL3N0YXR1cy5oIgorCituYW1lc3BhY2UgbGV2ZWxk
YiB7CisKK2NsYXNzIEZpbGVMb2NrOworY2xhc3MgTG9nZ2VyOworY2xhc3MgUmFuZG9tQWNjZXNz
RmlsZTsKK2NsYXNzIFNlcXVlbnRpYWxGaWxlOworY2xhc3MgU2xpY2U7CitjbGFzcyBXcml0YWJs
ZUZpbGU7CisKK2NsYXNzIEVudiB7CisgcHVibGljOgorICBFbnYoKSB7IH0KKyAgdmlydHVhbCB+
RW52KCk7CisKKyAgLy8gUmV0dXJuIGEgZGVmYXVsdCBlbnZpcm9ubWVudCBzdWl0YWJsZSBmb3Ig
dGhlIGN1cnJlbnQgb3BlcmF0aW5nCisgIC8vIHN5c3RlbS4gIFNvcGhpc3RpY2F0ZWQgdXNlcnMg
bWF5IHdpc2ggdG8gcHJvdmlkZSB0aGVpciBvd24gRW52CisgIC8vIGltcGxlbWVudGF0aW9uIGlu
c3RlYWQgb2YgcmVseWluZyBvbiB0aGlzIGRlZmF1bHQgZW52aXJvbm1lbnQuCisgIC8vCisgIC8v
IFRoZSByZXN1bHQgb2YgRGVmYXVsdCgpIGJlbG9uZ3MgdG8gbGV2ZWxkYiBhbmQgbXVzdCBuZXZl
ciBiZSBkZWxldGVkLgorICBzdGF0aWMgRW52KiBEZWZhdWx0KCk7CisKKyAgLy8gQ3JlYXRlIGEg
YnJhbmQgbmV3IHNlcXVlbnRpYWxseS1yZWFkYWJsZSBmaWxlIHdpdGggdGhlIHNwZWNpZmllZCBu
YW1lLgorICAvLyBPbiBzdWNjZXNzLCBzdG9yZXMgYSBwb2ludGVyIHRvIHRoZSBuZXcgZmlsZSBp
biAqcmVzdWx0IGFuZCByZXR1cm5zIE9LLgorICAvLyBPbiBmYWlsdXJlIHN0b3JlcyBOVUxMIGlu
ICpyZXN1bHQgYW5kIHJldHVybnMgbm9uLU9LLiAgSWYgdGhlIGZpbGUgZG9lcworICAvLyBub3Qg
ZXhpc3QsIHJldHVybnMgYSBub24tT0sgc3RhdHVzLgorICAvLworICAvLyBUaGUgcmV0dXJuZWQg
ZmlsZSB3aWxsIG9ubHkgYmUgYWNjZXNzZWQgYnkgb25lIHRocmVhZCBhdCBhIHRpbWUuCisgIHZp
cnR1YWwgU3RhdHVzIE5ld1NlcXVlbnRpYWxGaWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBmbmFtZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VxdWVudGlhbEZpbGUqKiByZXN1
bHQpID0gMDsKKworICAvLyBDcmVhdGUgYSBicmFuZCBuZXcgcmFuZG9tIGFjY2VzcyByZWFkLW9u
bHkgZmlsZSB3aXRoIHRoZQorICAvLyBzcGVjaWZpZWQgbmFtZS4gIE9uIHN1Y2Nlc3MsIHN0b3Jl
cyBhIHBvaW50ZXIgdG8gdGhlIG5ldyBmaWxlIGluCisgIC8vICpyZXN1bHQgYW5kIHJldHVybnMg
T0suICBPbiBmYWlsdXJlIHN0b3JlcyBOVUxMIGluICpyZXN1bHQgYW5kCisgIC8vIHJldHVybnMg
bm9uLU9LLiAgSWYgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QsIHJldHVybnMgYSBub24tT0sKKyAg
Ly8gc3RhdHVzLgorICAvLworICAvLyBUaGUgcmV0dXJuZWQgZmlsZSBtYXkgYmUgY29uY3VycmVu
dGx5IGFjY2Vzc2VkIGJ5IG11bHRpcGxlIHRocmVhZHMuCisgIHZpcnR1YWwgU3RhdHVzIE5ld1Jh
bmRvbUFjY2Vzc0ZpbGUoY29uc3Qgc3RkOjpzdHJpbmcmIGZuYW1lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFJhbmRvbUFjY2Vzc0ZpbGUqKiByZXN1bHQpID0gMDsKKwor
ICAvLyBDcmVhdGUgYW4gb2JqZWN0IHRoYXQgd3JpdGVzIHRvIGEgbmV3IGZpbGUgd2l0aCB0aGUg
c3BlY2lmaWVkCisgIC8vIG5hbWUuICBEZWxldGVzIGFueSBleGlzdGluZyBmaWxlIHdpdGggdGhl
IHNhbWUgbmFtZSBhbmQgY3JlYXRlcyBhCisgIC8vIG5ldyBmaWxlLiAgT24gc3VjY2Vzcywgc3Rv
cmVzIGEgcG9pbnRlciB0byB0aGUgbmV3IGZpbGUgaW4KKyAgLy8gKnJlc3VsdCBhbmQgcmV0dXJu
cyBPSy4gIE9uIGZhaWx1cmUgc3RvcmVzIE5VTEwgaW4gKnJlc3VsdCBhbmQKKyAgLy8gcmV0dXJu
cyBub24tT0suCisgIC8vCisgIC8vIFRoZSByZXR1cm5lZCBmaWxlIHdpbGwgb25seSBiZSBhY2Nl
c3NlZCBieSBvbmUgdGhyZWFkIGF0IGEgdGltZS4KKyAgdmlydHVhbCBTdGF0dXMgTmV3V3JpdGFi
bGVGaWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBmbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFdyaXRhYmxlRmlsZSoqIHJlc3VsdCkgPSAwOworCisgIC8vIFJldHVybnMgdHJ1
ZSBpZmYgdGhlIG5hbWVkIGZpbGUgZXhpc3RzLgorICB2aXJ0dWFsIGJvb2wgRmlsZUV4aXN0cyhj
b25zdCBzdGQ6OnN0cmluZyYgZm5hbWUpID0gMDsKKworICAvLyBTdG9yZSBpbiAqcmVzdWx0IHRo
ZSBuYW1lcyBvZiB0aGUgY2hpbGRyZW4gb2YgdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkuCisgIC8v
IFRoZSBuYW1lcyBhcmUgcmVsYXRpdmUgdG8gImRpciIuCisgIC8vIE9yaWdpbmFsIGNvbnRlbnRz
IG9mICpyZXN1bHRzIGFyZSBkcm9wcGVkLgorICB2aXJ0dWFsIFN0YXR1cyBHZXRDaGlsZHJlbihj
b25zdCBzdGQ6OnN0cmluZyYgZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6
OnZlY3RvcjxzdGQ6OnN0cmluZz4qIHJlc3VsdCkgPSAwOworCisgIC8vIERlbGV0ZSB0aGUgbmFt
ZWQgZmlsZS4KKyAgdmlydHVhbCBTdGF0dXMgRGVsZXRlRmlsZShjb25zdCBzdGQ6OnN0cmluZyYg
Zm5hbWUpID0gMDsKKworICAvLyBDcmVhdGUgdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkuCisgIHZp
cnR1YWwgU3RhdHVzIENyZWF0ZURpcihjb25zdCBzdGQ6OnN0cmluZyYgZGlybmFtZSkgPSAwOwor
CisgIC8vIERlbGV0ZSB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeS4KKyAgdmlydHVhbCBTdGF0dXMg
RGVsZXRlRGlyKGNvbnN0IHN0ZDo6c3RyaW5nJiBkaXJuYW1lKSA9IDA7CisKKyAgLy8gU3RvcmUg
dGhlIHNpemUgb2YgZm5hbWUgaW4gKmZpbGVfc2l6ZS4KKyAgdmlydHVhbCBTdGF0dXMgR2V0Rmls
ZVNpemUoY29uc3Qgc3RkOjpzdHJpbmcmIGZuYW1lLCB1aW50NjRfdCogZmlsZV9zaXplKSA9IDA7
CisKKyAgLy8gUmVuYW1lIGZpbGUgc3JjIHRvIHRhcmdldC4KKyAgdmlydHVhbCBTdGF0dXMgUmVu
YW1lRmlsZShjb25zdCBzdGQ6OnN0cmluZyYgc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0YXJnZXQpID0gMDsKKworICAvLyBMb2NrIHRoZSBzcGVj
aWZpZWQgZmlsZS4gIFVzZWQgdG8gcHJldmVudCBjb25jdXJyZW50IGFjY2VzcyB0bworICAvLyB0
aGUgc2FtZSBkYiBieSBtdWx0aXBsZSBwcm9jZXNzZXMuICBPbiBmYWlsdXJlLCBzdG9yZXMgTlVM
TCBpbgorICAvLyAqbG9jayBhbmQgcmV0dXJucyBub24tT0suCisgIC8vCisgIC8vIE9uIHN1Y2Nl
c3MsIHN0b3JlcyBhIHBvaW50ZXIgdG8gdGhlIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgdGhlCisg
IC8vIGFjcXVpcmVkIGxvY2sgaW4gKmxvY2sgYW5kIHJldHVybnMgT0suICBUaGUgY2FsbGVyIHNo
b3VsZCBjYWxsCisgIC8vIFVubG9ja0ZpbGUoKmxvY2spIHRvIHJlbGVhc2UgdGhlIGxvY2suICBJ
ZiB0aGUgcHJvY2VzcyBleGl0cywKKyAgLy8gdGhlIGxvY2sgd2lsbCBiZSBhdXRvbWF0aWNhbGx5
IHJlbGVhc2VkLgorICAvLworICAvLyBJZiBzb21lYm9keSBlbHNlIGFscmVhZHkgaG9sZHMgdGhl
IGxvY2ssIGZpbmlzaGVzIGltbWVkaWF0ZWx5CisgIC8vIHdpdGggYSBmYWlsdXJlLiAgSS5lLiwg
dGhpcyBjYWxsIGRvZXMgbm90IHdhaXQgZm9yIGV4aXN0aW5nIGxvY2tzCisgIC8vIHRvIGdvIGF3
YXkuCisgIC8vCisgIC8vIE1heSBjcmVhdGUgdGhlIG5hbWVkIGZpbGUgaWYgaXQgZG9lcyBub3Qg
YWxyZWFkeSBleGlzdC4KKyAgdmlydHVhbCBTdGF0dXMgTG9ja0ZpbGUoY29uc3Qgc3RkOjpzdHJp
bmcmIGZuYW1lLCBGaWxlTG9jayoqIGxvY2spID0gMDsKKworICAvLyBSZWxlYXNlIHRoZSBsb2Nr
IGFjcXVpcmVkIGJ5IGEgcHJldmlvdXMgc3VjY2Vzc2Z1bCBjYWxsIHRvIExvY2tGaWxlLgorICAv
LyBSRVFVSVJFUzogbG9jayB3YXMgcmV0dXJuZWQgYnkgYSBzdWNjZXNzZnVsIExvY2tGaWxlKCkg
Y2FsbAorICAvLyBSRVFVSVJFUzogbG9jayBoYXMgbm90IGFscmVhZHkgYmVlbiB1bmxvY2tlZC4K
KyAgdmlydHVhbCBTdGF0dXMgVW5sb2NrRmlsZShGaWxlTG9jayogbG9jaykgPSAwOworCisgIC8v
IEFycmFuZ2UgdG8gcnVuICIoKmZ1bmN0aW9uKShhcmcpIiBvbmNlIGluIGEgYmFja2dyb3VuZCB0
aHJlYWQuCisgIC8vCisgIC8vICJmdW5jdGlvbiIgbWF5IHJ1biBpbiBhbiB1bnNwZWNpZmllZCB0
aHJlYWQuICBNdWx0aXBsZSBmdW5jdGlvbnMKKyAgLy8gYWRkZWQgdG8gdGhlIHNhbWUgRW52IG1h
eSBydW4gY29uY3VycmVudGx5IGluIGRpZmZlcmVudCB0aHJlYWRzLgorICAvLyBJLmUuLCB0aGUg
Y2FsbGVyIG1heSBub3QgYXNzdW1lIHRoYXQgYmFja2dyb3VuZCB3b3JrIGl0ZW1zIGFyZQorICAv
LyBzZXJpYWxpemVkLgorICB2aXJ0dWFsIHZvaWQgU2NoZWR1bGUoCisgICAgICB2b2lkICgqZnVu
Y3Rpb24pKHZvaWQqIGFyZyksCisgICAgICB2b2lkKiBhcmcpID0gMDsKKworICAvLyBTdGFydCBh
IG5ldyB0aHJlYWQsIGludm9raW5nICJmdW5jdGlvbihhcmcpIiB3aXRoaW4gdGhlIG5ldyB0aHJl
YWQuCisgIC8vIFdoZW4gImZ1bmN0aW9uKGFyZykiIHJldHVybnMsIHRoZSB0aHJlYWQgd2lsbCBi
ZSBkZXN0cm95ZWQuCisgIHZpcnR1YWwgdm9pZCBTdGFydFRocmVhZCh2b2lkICgqZnVuY3Rpb24p
KHZvaWQqIGFyZyksIHZvaWQqIGFyZykgPSAwOworCisgIC8vICpwYXRoIGlzIHNldCB0byBhIHRl
bXBvcmFyeSBkaXJlY3RvcnkgdGhhdCBjYW4gYmUgdXNlZCBmb3IgdGVzdGluZy4gSXQgbWF5Cisg
IC8vIG9yIG1hbnkgbm90IGhhdmUganVzdCBiZWVuIGNyZWF0ZWQuIFRoZSBkaXJlY3RvcnkgbWF5
IG9yIG1heSBub3QgZGlmZmVyCisgIC8vIGJldHdlZW4gcnVucyBvZiB0aGUgc2FtZSBwcm9jZXNz
LCBidXQgc3Vic2VxdWVudCBjYWxscyB3aWxsIHJldHVybiB0aGUKKyAgLy8gc2FtZSBkaXJlY3Rv
cnkuCisgIHZpcnR1YWwgU3RhdHVzIEdldFRlc3REaXJlY3Rvcnkoc3RkOjpzdHJpbmcqIHBhdGgp
ID0gMDsKKworICAvLyBDcmVhdGUgYW5kIHJldHVybiBhIGxvZyBmaWxlIGZvciBzdG9yaW5nIGlu
Zm9ybWF0aW9uYWwgbWVzc2FnZXMuCisgIHZpcnR1YWwgU3RhdHVzIE5ld0xvZ2dlcihjb25zdCBz
dGQ6OnN0cmluZyYgZm5hbWUsIExvZ2dlcioqIHJlc3VsdCkgPSAwOworCisgIC8vIFJldHVybnMg
dGhlIG51bWJlciBvZiBtaWNyby1zZWNvbmRzIHNpbmNlIHNvbWUgZml4ZWQgcG9pbnQgaW4gdGlt
ZS4gT25seQorICAvLyB1c2VmdWwgZm9yIGNvbXB1dGluZyBkZWx0YXMgb2YgdGltZS4KKyAgdmly
dHVhbCB1aW50NjRfdCBOb3dNaWNyb3MoKSA9IDA7CisKKyAgLy8gU2xlZXAvZGVsYXkgdGhlIHRo
cmVhZCBmb3IgdGhlIHBlcnNjcmliZWQgbnVtYmVyIG9mIG1pY3JvLXNlY29uZHMuCisgIHZpcnR1
YWwgdm9pZCBTbGVlcEZvck1pY3Jvc2Vjb25kcyhpbnQgbWljcm9zKSA9IDA7CisKKyBwcml2YXRl
OgorICAvLyBObyBjb3B5aW5nIGFsbG93ZWQKKyAgRW52KGNvbnN0IEVudiYpOworICB2b2lkIG9w
ZXJhdG9yPShjb25zdCBFbnYmKTsKK307CisKKy8vIEEgZmlsZSBhYnN0cmFjdGlvbiBmb3IgcmVh
ZGluZyBzZXF1ZW50aWFsbHkgdGhyb3VnaCBhIGZpbGUKK2NsYXNzIFNlcXVlbnRpYWxGaWxlIHsK
KyBwdWJsaWM6CisgIFNlcXVlbnRpYWxGaWxlKCkgeyB9CisgIHZpcnR1YWwgflNlcXVlbnRpYWxG
aWxlKCk7CisKKyAgLy8gUmVhZCB1cCB0byAibiIgYnl0ZXMgZnJvbSB0aGUgZmlsZS4gICJzY3Jh
dGNoWzAuLm4tMV0iIG1heSBiZQorICAvLyB3cml0dGVuIGJ5IHRoaXMgcm91dGluZS4gIFNldHMg
IipyZXN1bHQiIHRvIHRoZSBkYXRhIHRoYXQgd2FzCisgIC8vIHJlYWQgKGluY2x1ZGluZyBpZiBm
ZXdlciB0aGFuICJuIiBieXRlcyB3ZXJlIHN1Y2Nlc3NmdWxseSByZWFkKS4KKyAgLy8gTWF5IHNl
dCAiKnJlc3VsdCIgdG8gcG9pbnQgYXQgZGF0YSBpbiAic2NyYXRjaFswLi5uLTFdIiwgc28KKyAg
Ly8gInNjcmF0Y2hbMC4ubi0xXSIgbXVzdCBiZSBsaXZlIHdoZW4gIipyZXN1bHQiIGlzIHVzZWQu
CisgIC8vIElmIGFuIGVycm9yIHdhcyBlbmNvdW50ZXJlZCwgcmV0dXJucyBhIG5vbi1PSyBzdGF0
dXMuCisgIC8vCisgIC8vIFJFUVVJUkVTOiBFeHRlcm5hbCBzeW5jaHJvbml6YXRpb24KKyAgdmly
dHVhbCBTdGF0dXMgUmVhZChzaXplX3QgbiwgU2xpY2UqIHJlc3VsdCwgY2hhciogc2NyYXRjaCkg
PSAwOworCisgIC8vIFNraXAgIm4iIGJ5dGVzIGZyb20gdGhlIGZpbGUuIFRoaXMgaXMgZ3VhcmFu
dGVlZCB0byBiZSBubworICAvLyBzbG93ZXIgdGhhdCByZWFkaW5nIHRoZSBzYW1lIGRhdGEsIGJ1
dCBtYXkgYmUgZmFzdGVyLgorICAvLworICAvLyBJZiBlbmQgb2YgZmlsZSBpcyByZWFjaGVkLCBz
a2lwcGluZyB3aWxsIHN0b3AgYXQgdGhlIGVuZCBvZiB0aGUKKyAgLy8gZmlsZSwgYW5kIFNraXAg
d2lsbCByZXR1cm4gT0suCisgIC8vCisgIC8vIFJFUVVJUkVTOiBFeHRlcm5hbCBzeW5jaHJvbml6
YXRpb24KKyAgdmlydHVhbCBTdGF0dXMgU2tpcCh1aW50NjRfdCBuKSA9IDA7CisKKyBwcml2YXRl
OgorICAvLyBObyBjb3B5aW5nIGFsbG93ZWQKKyAgU2VxdWVudGlhbEZpbGUoY29uc3QgU2VxdWVu
dGlhbEZpbGUmKTsKKyAgdm9pZCBvcGVyYXRvcj0oY29uc3QgU2VxdWVudGlhbEZpbGUmKTsKK307
CisKKy8vIEEgZmlsZSBhYnN0cmFjdGlvbiBmb3IgcmFuZG9tbHkgcmVhZGluZyB0aGUgY29udGVu
dHMgb2YgYSBmaWxlLgorY2xhc3MgUmFuZG9tQWNjZXNzRmlsZSB7CisgcHVibGljOgorICBSYW5k
b21BY2Nlc3NGaWxlKCkgeyB9CisgIHZpcnR1YWwgflJhbmRvbUFjY2Vzc0ZpbGUoKTsKKworICAv
LyBSZWFkIHVwIHRvICJuIiBieXRlcyBmcm9tIHRoZSBmaWxlIHN0YXJ0aW5nIGF0ICJvZmZzZXQi
LgorICAvLyAic2NyYXRjaFswLi5uLTFdIiBtYXkgYmUgd3JpdHRlbiBieSB0aGlzIHJvdXRpbmUu
ICBTZXRzICIqcmVzdWx0IgorICAvLyB0byB0aGUgZGF0YSB0aGF0IHdhcyByZWFkIChpbmNsdWRp
bmcgaWYgZmV3ZXIgdGhhbiAibiIgYnl0ZXMgd2VyZQorICAvLyBzdWNjZXNzZnVsbHkgcmVhZCku
ICBNYXkgc2V0ICIqcmVzdWx0IiB0byBwb2ludCBhdCBkYXRhIGluCisgIC8vICJzY3JhdGNoWzAu
Lm4tMV0iLCBzbyAic2NyYXRjaFswLi5uLTFdIiBtdXN0IGJlIGxpdmUgd2hlbgorICAvLyAiKnJl
c3VsdCIgaXMgdXNlZC4gIElmIGFuIGVycm9yIHdhcyBlbmNvdW50ZXJlZCwgcmV0dXJucyBhIG5v
bi1PSworICAvLyBzdGF0dXMuCisgIC8vCisgIC8vIFNhZmUgZm9yIGNvbmN1cnJlbnQgdXNlIGJ5
IG11bHRpcGxlIHRocmVhZHMuCisgIHZpcnR1YWwgU3RhdHVzIFJlYWQodWludDY0X3Qgb2Zmc2V0
LCBzaXplX3QgbiwgU2xpY2UqIHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICBjaGFyKiBz
Y3JhdGNoKSBjb25zdCA9IDA7CisKKyBwcml2YXRlOgorICAvLyBObyBjb3B5aW5nIGFsbG93ZWQK
KyAgUmFuZG9tQWNjZXNzRmlsZShjb25zdCBSYW5kb21BY2Nlc3NGaWxlJik7CisgIHZvaWQgb3Bl
cmF0b3I9KGNvbnN0IFJhbmRvbUFjY2Vzc0ZpbGUmKTsKK307CisKKy8vIEEgZmlsZSBhYnN0cmFj
dGlvbiBmb3Igc2VxdWVudGlhbCB3cml0aW5nLiAgVGhlIGltcGxlbWVudGF0aW9uCisvLyBtdXN0
IHByb3ZpZGUgYnVmZmVyaW5nIHNpbmNlIGNhbGxlcnMgbWF5IGFwcGVuZCBzbWFsbCBmcmFnbWVu
dHMKKy8vIGF0IGEgdGltZSB0byB0aGUgZmlsZS4KK2NsYXNzIFdyaXRhYmxlRmlsZSB7CisgcHVi
bGljOgorICBXcml0YWJsZUZpbGUoKSB7IH0KKyAgdmlydHVhbCB+V3JpdGFibGVGaWxlKCk7CisK
KyAgdmlydHVhbCBTdGF0dXMgQXBwZW5kKGNvbnN0IFNsaWNlJiBkYXRhKSA9IDA7CisgIHZpcnR1
YWwgU3RhdHVzIENsb3NlKCkgPSAwOworICB2aXJ0dWFsIFN0YXR1cyBGbHVzaCgpID0gMDsKKyAg
dmlydHVhbCBTdGF0dXMgU3luYygpID0gMDsKKworIHByaXZhdGU6CisgIC8vIE5vIGNvcHlpbmcg
YWxsb3dlZAorICBXcml0YWJsZUZpbGUoY29uc3QgV3JpdGFibGVGaWxlJik7CisgIHZvaWQgb3Bl
cmF0b3I9KGNvbnN0IFdyaXRhYmxlRmlsZSYpOworfTsKKworLy8gQW4gaW50ZXJmYWNlIGZvciB3
cml0aW5nIGxvZyBtZXNzYWdlcy4KK2NsYXNzIExvZ2dlciB7CisgcHVibGljOgorICBMb2dnZXIo
KSB7IH0KKyAgdmlydHVhbCB+TG9nZ2VyKCk7CisKKyAgLy8gV3JpdGUgYW4gZW50cnkgdG8gdGhl
IGxvZyBmaWxlIHdpdGggdGhlIHNwZWNpZmllZCBmb3JtYXQuCisgIHZpcnR1YWwgdm9pZCBMb2d2
KGNvbnN0IGNoYXIqIGZvcm1hdCwgdmFfbGlzdCBhcCkgPSAwOworCisgcHJpdmF0ZToKKyAgLy8g
Tm8gY29weWluZyBhbGxvd2VkCisgIExvZ2dlcihjb25zdCBMb2dnZXImKTsKKyAgdm9pZCBvcGVy
YXRvcj0oY29uc3QgTG9nZ2VyJik7Cit9OworCisKKy8vIElkZW50aWZpZXMgYSBsb2NrZWQgZmls
ZS4KK2NsYXNzIEZpbGVMb2NrIHsKKyBwdWJsaWM6CisgIEZpbGVMb2NrKCkgeyB9CisgIHZpcnR1
YWwgfkZpbGVMb2NrKCk7CisgcHJpdmF0ZToKKyAgLy8gTm8gY29weWluZyBhbGxvd2VkCisgIEZp
bGVMb2NrKGNvbnN0IEZpbGVMb2NrJik7CisgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IEZpbGVMb2Nr
Jik7Cit9OworCisvLyBMb2cgdGhlIHNwZWNpZmllZCBkYXRhIHRvICppbmZvX2xvZyBpZiBpbmZv
X2xvZyBpcyBub24tTlVMTC4KK2V4dGVybiB2b2lkIExvZyhMb2dnZXIqIGluZm9fbG9nLCBjb25z
dCBjaGFyKiBmb3JtYXQsIC4uLikKKyMgICBpZiBkZWZpbmVkKF9fR05VQ19fKSB8fCBkZWZpbmVk
KF9fY2xhbmdfXykKKyAgICBfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAy
LCAzKSkpCisjICAgZW5kaWYKKyAgICA7CisKKy8vIEEgdXRpbGl0eSByb3V0aW5lOiB3cml0ZSAi
ZGF0YSIgdG8gdGhlIG5hbWVkIGZpbGUuCitleHRlcm4gU3RhdHVzIFdyaXRlU3RyaW5nVG9GaWxl
KEVudiogZW52LCBjb25zdCBTbGljZSYgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZuYW1lKTsKKworLy8gQSB1dGlsaXR5IHJvdXRpbmU6
IHJlYWQgY29udGVudHMgb2YgbmFtZWQgZmlsZSBpbnRvICpkYXRhCitleHRlcm4gU3RhdHVzIFJl
YWRGaWxlVG9TdHJpbmcoRW52KiBlbnYsIGNvbnN0IHN0ZDo6c3RyaW5nJiBmbmFtZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyogZGF0YSk7CisKKy8vIEFuIGlt
cGxlbWVudGF0aW9uIG9mIEVudiB0aGF0IGZvcndhcmRzIGFsbCBjYWxscyB0byBhbm90aGVyIEVu
di4KKy8vIE1heSBiZSB1c2VmdWwgdG8gY2xpZW50cyB3aG8gd2lzaCB0byBvdmVycmlkZSBqdXN0
IHBhcnQgb2YgdGhlCisvLyBmdW5jdGlvbmFsaXR5IG9mIGFub3RoZXIgRW52LgorY2xhc3MgRW52
V3JhcHBlciA6IHB1YmxpYyBFbnYgeworIHB1YmxpYzoKKyAgLy8gSW5pdGlhbGl6ZSBhbiBFbnZX
cmFwcGVyIHRoYXQgZGVsZWdhdGVzIGFsbCBjYWxscyB0byAqdAorICBleHBsaWNpdCBFbnZXcmFw
cGVyKEVudiogdCkgOiB0YXJnZXRfKHQpIHsgfQorICB2aXJ0dWFsIH5FbnZXcmFwcGVyKCk7CisK
KyAgLy8gUmV0dXJuIHRoZSB0YXJnZXQgdG8gd2hpY2ggdGhpcyBFbnYgZm9yd2FyZHMgYWxsIGNh
bGxzCisgIEVudiogdGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gdGFyZ2V0XzsgfQorCisgIC8vIFRo
ZSBmb2xsb3dpbmcgdGV4dCBpcyBib2lsZXJwbGF0ZSB0aGF0IGZvcndhcmRzIGFsbCBtZXRob2Rz
IHRvIHRhcmdldCgpCisgIFN0YXR1cyBOZXdTZXF1ZW50aWFsRmlsZShjb25zdCBzdGQ6OnN0cmlu
ZyYgZiwgU2VxdWVudGlhbEZpbGUqKiByKSB7CisgICAgcmV0dXJuIHRhcmdldF8tPk5ld1NlcXVl
bnRpYWxGaWxlKGYsIHIpOworICB9CisgIFN0YXR1cyBOZXdSYW5kb21BY2Nlc3NGaWxlKGNvbnN0
IHN0ZDo6c3RyaW5nJiBmLCBSYW5kb21BY2Nlc3NGaWxlKiogcikgeworICAgIHJldHVybiB0YXJn
ZXRfLT5OZXdSYW5kb21BY2Nlc3NGaWxlKGYsIHIpOworICB9CisgIFN0YXR1cyBOZXdXcml0YWJs
ZUZpbGUoY29uc3Qgc3RkOjpzdHJpbmcmIGYsIFdyaXRhYmxlRmlsZSoqIHIpIHsKKyAgICByZXR1
cm4gdGFyZ2V0Xy0+TmV3V3JpdGFibGVGaWxlKGYsIHIpOworICB9CisgIGJvb2wgRmlsZUV4aXN0
cyhjb25zdCBzdGQ6OnN0cmluZyYgZikgeyByZXR1cm4gdGFyZ2V0Xy0+RmlsZUV4aXN0cyhmKTsg
fQorICBTdGF0dXMgR2V0Q2hpbGRyZW4oY29uc3Qgc3RkOjpzdHJpbmcmIGRpciwgc3RkOjp2ZWN0
b3I8c3RkOjpzdHJpbmc+KiByKSB7CisgICAgcmV0dXJuIHRhcmdldF8tPkdldENoaWxkcmVuKGRp
ciwgcik7CisgIH0KKyAgU3RhdHVzIERlbGV0ZUZpbGUoY29uc3Qgc3RkOjpzdHJpbmcmIGYpIHsg
cmV0dXJuIHRhcmdldF8tPkRlbGV0ZUZpbGUoZik7IH0KKyAgU3RhdHVzIENyZWF0ZURpcihjb25z
dCBzdGQ6OnN0cmluZyYgZCkgeyByZXR1cm4gdGFyZ2V0Xy0+Q3JlYXRlRGlyKGQpOyB9CisgIFN0
YXR1cyBEZWxldGVEaXIoY29uc3Qgc3RkOjpzdHJpbmcmIGQpIHsgcmV0dXJuIHRhcmdldF8tPkRl
bGV0ZURpcihkKTsgfQorICBTdGF0dXMgR2V0RmlsZVNpemUoY29uc3Qgc3RkOjpzdHJpbmcmIGYs
IHVpbnQ2NF90KiBzKSB7CisgICAgcmV0dXJuIHRhcmdldF8tPkdldEZpbGVTaXplKGYsIHMpOwor
ICB9CisgIFN0YXR1cyBSZW5hbWVGaWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBzLCBjb25zdCBzdGQ6
OnN0cmluZyYgdCkgeworICAgIHJldHVybiB0YXJnZXRfLT5SZW5hbWVGaWxlKHMsIHQpOworICB9
CisgIFN0YXR1cyBMb2NrRmlsZShjb25zdCBzdGQ6OnN0cmluZyYgZiwgRmlsZUxvY2sqKiBsKSB7
CisgICAgcmV0dXJuIHRhcmdldF8tPkxvY2tGaWxlKGYsIGwpOworICB9CisgIFN0YXR1cyBVbmxv
Y2tGaWxlKEZpbGVMb2NrKiBsKSB7IHJldHVybiB0YXJnZXRfLT5VbmxvY2tGaWxlKGwpOyB9Cisg
IHZvaWQgU2NoZWR1bGUodm9pZCAoKmYpKHZvaWQqKSwgdm9pZCogYSkgeworICAgIHJldHVybiB0
YXJnZXRfLT5TY2hlZHVsZShmLCBhKTsKKyAgfQorICB2b2lkIFN0YXJ0VGhyZWFkKHZvaWQgKCpm
KSh2b2lkKiksIHZvaWQqIGEpIHsKKyAgICByZXR1cm4gdGFyZ2V0Xy0+U3RhcnRUaHJlYWQoZiwg
YSk7CisgIH0KKyAgdmlydHVhbCBTdGF0dXMgR2V0VGVzdERpcmVjdG9yeShzdGQ6OnN0cmluZyog
cGF0aCkgeworICAgIHJldHVybiB0YXJnZXRfLT5HZXRUZXN0RGlyZWN0b3J5KHBhdGgpOworICB9
CisgIHZpcnR1YWwgU3RhdHVzIE5ld0xvZ2dlcihjb25zdCBzdGQ6OnN0cmluZyYgZm5hbWUsIExv
Z2dlcioqIHJlc3VsdCkgeworICAgIHJldHVybiB0YXJnZXRfLT5OZXdMb2dnZXIoZm5hbWUsIHJl
c3VsdCk7CisgIH0KKyAgdWludDY0X3QgTm93TWljcm9zKCkgeworICAgIHJldHVybiB0YXJnZXRf
LT5Ob3dNaWNyb3MoKTsKKyAgfQorICB2b2lkIFNsZWVwRm9yTWljcm9zZWNvbmRzKGludCBtaWNy
b3MpIHsKKyAgICB0YXJnZXRfLT5TbGVlcEZvck1pY3Jvc2Vjb25kcyhtaWNyb3MpOworICB9Cisg
cHJpdmF0ZToKKyAgRW52KiB0YXJnZXRfOworfTsKKworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIK
KworI2VuZGlmICAvLyBTVE9SQUdFX0xFVkVMREJfSU5DTFVERV9FTlZfSF8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvaW5jbHVkZS9sZXZlbGRiL2ZpbHRlcl9wb2xpY3ku
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvaW5jbHVkZS9sZXZlbGRiL2ZpbHRlcl9wb2xp
Y3kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4xZmJhMDgwMDFmYzMzNWExNGJkZTkwZmE1YTFjNWQ1ODAyNWFlMDM4
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9pbmNsdWRlL2xl
dmVsZGIvZmlsdGVyX3BvbGljeS5oCkBAIC0wLDAgKzEsNzAgQEAKKy8vIENvcHlyaWdodCAoYykg
MjAxMiBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZp
bGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKy8vCisvLyBBIGRhdGFiYXNlIGNhbiBiZSBj
b25maWd1cmVkIHdpdGggYSBjdXN0b20gRmlsdGVyUG9saWN5IG9iamVjdC4KKy8vIFRoaXMgb2Jq
ZWN0IGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyBhIHNtYWxsIGZpbHRlciBmcm9tIGEgc2V0
CisvLyBvZiBrZXlzLiAgVGhlc2UgZmlsdGVycyBhcmUgc3RvcmVkIGluIGxldmVsZGIgYW5kIGFy
ZSBjb25zdWx0ZWQKKy8vIGF1dG9tYXRpY2FsbHkgYnkgbGV2ZWxkYiB0byBkZWNpZGUgd2hldGhl
ciBvciBub3QgdG8gcmVhZCBzb21lCisvLyBpbmZvcm1hdGlvbiBmcm9tIGRpc2suIEluIG1hbnkg
Y2FzZXMsIGEgZmlsdGVyIGNhbiBjdXQgZG93biB0aGUKKy8vIG51bWJlciBvZiBkaXNrIHNlZWtz
IGZvcm0gYSBoYW5kZnVsIHRvIGEgc2luZ2xlIGRpc2sgc2VlayBwZXIKKy8vIERCOjpHZXQoKSBj
YWxsLgorLy8KKy8vIE1vc3QgcGVvcGxlIHdpbGwgd2FudCB0byB1c2UgdGhlIGJ1aWx0aW4gYmxv
b20gZmlsdGVyIHN1cHBvcnQgKHNlZQorLy8gTmV3Qmxvb21GaWx0ZXJQb2xpY3koKSBiZWxvdyku
CisKKyNpZm5kZWYgU1RPUkFHRV9MRVZFTERCX0lOQ0xVREVfRklMVEVSX1BPTElDWV9IXworI2Rl
ZmluZSBTVE9SQUdFX0xFVkVMREJfSU5DTFVERV9GSUxURVJfUE9MSUNZX0hfCisKKyNpbmNsdWRl
IDxzdHJpbmc+CisKK25hbWVzcGFjZSBsZXZlbGRiIHsKKworY2xhc3MgU2xpY2U7CisKK2NsYXNz
IEZpbHRlclBvbGljeSB7CisgcHVibGljOgorICB2aXJ0dWFsIH5GaWx0ZXJQb2xpY3koKTsKKwor
ICAvLyBSZXR1cm4gdGhlIG5hbWUgb2YgdGhpcyBwb2xpY3kuICBOb3RlIHRoYXQgaWYgdGhlIGZp
bHRlciBlbmNvZGluZworICAvLyBjaGFuZ2VzIGluIGFuIGluY29tcGF0aWJsZSB3YXksIHRoZSBu
YW1lIHJldHVybmVkIGJ5IHRoaXMgbWV0aG9kCisgIC8vIG11c3QgYmUgY2hhbmdlZC4gIE90aGVy
d2lzZSwgb2xkIGluY29tcGF0aWJsZSBmaWx0ZXJzIG1heSBiZQorICAvLyBwYXNzZWQgdG8gbWV0
aG9kcyBvZiB0aGlzIHR5cGUuCisgIHZpcnR1YWwgY29uc3QgY2hhciogTmFtZSgpIGNvbnN0ID0g
MDsKKworICAvLyBrZXlzWzAsbi0xXSBjb250YWlucyBhIGxpc3Qgb2Yga2V5cyAocG90ZW50aWFs
bHkgd2l0aCBkdXBsaWNhdGVzKQorICAvLyB0aGF0IGFyZSBvcmRlcmVkIGFjY29yZGluZyB0byB0
aGUgdXNlciBzdXBwbGllZCBjb21wYXJhdG9yLgorICAvLyBBcHBlbmQgYSBmaWx0ZXIgdGhhdCBz
dW1tYXJpemVzIGtleXNbMCxuLTFdIHRvICpkc3QuCisgIC8vCisgIC8vIFdhcm5pbmc6IGRvIG5v
dCBjaGFuZ2UgdGhlIGluaXRpYWwgY29udGVudHMgb2YgKmRzdC4gIEluc3RlYWQsCisgIC8vIGFw
cGVuZCB0aGUgbmV3bHkgY29uc3RydWN0ZWQgZmlsdGVyIHRvICpkc3QuCisgIHZpcnR1YWwgdm9p
ZCBDcmVhdGVGaWx0ZXIoY29uc3QgU2xpY2UqIGtleXMsIGludCBuLCBzdGQ6OnN0cmluZyogZHN0
KQorICAgICAgY29uc3QgPSAwOworCisgIC8vICJmaWx0ZXIiIGNvbnRhaW5zIHRoZSBkYXRhIGFw
cGVuZGVkIGJ5IGEgcHJlY2VkaW5nIGNhbGwgdG8KKyAgLy8gQ3JlYXRlRmlsdGVyKCkgb24gdGhp
cyBjbGFzcy4gIFRoaXMgbWV0aG9kIG11c3QgcmV0dXJuIHRydWUgaWYKKyAgLy8gdGhlIGtleSB3
YXMgaW4gdGhlIGxpc3Qgb2Yga2V5cyBwYXNzZWQgdG8gQ3JlYXRlRmlsdGVyKCkuCisgIC8vIFRo
aXMgbWV0aG9kIG1heSByZXR1cm4gdHJ1ZSBvciBmYWxzZSBpZiB0aGUga2V5IHdhcyBub3Qgb24g
dGhlCisgIC8vIGxpc3QsIGJ1dCBpdCBzaG91bGQgYWltIHRvIHJldHVybiBmYWxzZSB3aXRoIGEg
aGlnaCBwcm9iYWJpbGl0eS4KKyAgdmlydHVhbCBib29sIEtleU1heU1hdGNoKGNvbnN0IFNsaWNl
JiBrZXksIGNvbnN0IFNsaWNlJiBmaWx0ZXIpIGNvbnN0ID0gMDsKK307CisKKy8vIFJldHVybiBh
IG5ldyBmaWx0ZXIgcG9saWN5IHRoYXQgdXNlcyBhIGJsb29tIGZpbHRlciB3aXRoIGFwcHJveGlt
YXRlbHkKKy8vIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGJpdHMgcGVyIGtleS4gIEEgZ29vZCB2
YWx1ZSBmb3IgYml0c19wZXJfa2V5CisvLyBpcyAxMCwgd2hpY2ggeWllbGRzIGEgZmlsdGVyIHdp
dGggfiAxJSBmYWxzZSBwb3NpdGl2ZSByYXRlLgorLy8KKy8vIENhbGxlcnMgbXVzdCBkZWxldGUg
dGhlIHJlc3VsdCBhZnRlciBhbnkgZGF0YWJhc2UgdGhhdCBpcyB1c2luZyB0aGUKKy8vIHJlc3Vs
dCBoYXMgYmVlbiBjbG9zZWQuCisvLworLy8gTm90ZTogaWYgeW91IGFyZSB1c2luZyBhIGN1c3Rv
bSBjb21wYXJhdG9yIHRoYXQgaWdub3JlcyBzb21lIHBhcnRzCisvLyBvZiB0aGUga2V5cyBiZWlu
ZyBjb21wYXJlZCwgeW91IG11c3Qgbm90IHVzZSBOZXdCbG9vbUZpbHRlclBvbGljeSgpCisvLyBh
bmQgbXVzdCBwcm92aWRlIHlvdXIgb3duIEZpbHRlclBvbGljeSB0aGF0IGFsc28gaWdub3JlcyB0
aGUKKy8vIGNvcnJlc3BvbmRpbmcgcGFydHMgb2YgdGhlIGtleXMuICBGb3IgZXhhbXBsZSwgaWYg
dGhlIGNvbXBhcmF0b3IKKy8vIGlnbm9yZXMgdHJhaWxpbmcgc3BhY2VzLCBpdCB3b3VsZCBiZSBp
bmNvcnJlY3QgdG8gdXNlIGEKKy8vIEZpbHRlclBvbGljeSAobGlrZSBOZXdCbG9vbUZpbHRlclBv
bGljeSkgdGhhdCBkb2VzIG5vdCBpZ25vcmUKKy8vIHRyYWlsaW5nIHNwYWNlcyBpbiBrZXlzLgor
ZXh0ZXJuIGNvbnN0IEZpbHRlclBvbGljeSogTmV3Qmxvb21GaWx0ZXJQb2xpY3koaW50IGJpdHNf
cGVyX2tleSk7CisKK30KKworI2VuZGlmICAvLyBTVE9SQUdFX0xFVkVMREJfSU5DTFVERV9GSUxU
RVJfUE9MSUNZX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2luY2x1
ZGUvbGV2ZWxkYi9pdGVyYXRvci5oIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9pbmNsdWRl
L2xldmVsZGIvaXRlcmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZDU0M2ViNDZjZGU5YWYzMGY5MjUwZWUy
ZWFhN2YwOTc5Y2MyOTk0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGV2
ZWxkYi9pbmNsdWRlL2xldmVsZGIvaXRlcmF0b3IuaApAQCAtMCwwICsxLDEwMCBAQAorLy8gQ29w
eXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhl
IEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgorLy8KKy8vIEFuIGl0ZXJh
dG9yIHlpZWxkcyBhIHNlcXVlbmNlIG9mIGtleS92YWx1ZSBwYWlycyBmcm9tIGEgc291cmNlLgor
Ly8gVGhlIGZvbGxvd2luZyBjbGFzcyBkZWZpbmVzIHRoZSBpbnRlcmZhY2UuICBNdWx0aXBsZSBp
bXBsZW1lbnRhdGlvbnMKKy8vIGFyZSBwcm92aWRlZCBieSB0aGlzIGxpYnJhcnkuICBJbiBwYXJ0
aWN1bGFyLCBpdGVyYXRvcnMgYXJlIHByb3ZpZGVkCisvLyB0byBhY2Nlc3MgdGhlIGNvbnRlbnRz
IG9mIGEgVGFibGUgb3IgYSBEQi4KKy8vCisvLyBNdWx0aXBsZSB0aHJlYWRzIGNhbiBpbnZva2Ug
Y29uc3QgbWV0aG9kcyBvbiBhbiBJdGVyYXRvciB3aXRob3V0CisvLyBleHRlcm5hbCBzeW5jaHJv
bml6YXRpb24sIGJ1dCBpZiBhbnkgb2YgdGhlIHRocmVhZHMgbWF5IGNhbGwgYQorLy8gbm9uLWNv
bnN0IG1ldGhvZCwgYWxsIHRocmVhZHMgYWNjZXNzaW5nIHRoZSBzYW1lIEl0ZXJhdG9yIG11c3Qg
dXNlCisvLyBleHRlcm5hbCBzeW5jaHJvbml6YXRpb24uCisKKyNpZm5kZWYgU1RPUkFHRV9MRVZF
TERCX0lOQ0xVREVfSVRFUkFUT1JfSF8KKyNkZWZpbmUgU1RPUkFHRV9MRVZFTERCX0lOQ0xVREVf
SVRFUkFUT1JfSF8KKworI2luY2x1ZGUgImxldmVsZGIvc2xpY2UuaCIKKyNpbmNsdWRlICJsZXZl
bGRiL3N0YXR1cy5oIgorCituYW1lc3BhY2UgbGV2ZWxkYiB7CisKK2NsYXNzIEl0ZXJhdG9yIHsK
KyBwdWJsaWM6CisgIEl0ZXJhdG9yKCk7CisgIHZpcnR1YWwgfkl0ZXJhdG9yKCk7CisKKyAgLy8g
QW4gaXRlcmF0b3IgaXMgZWl0aGVyIHBvc2l0aW9uZWQgYXQgYSBrZXkvdmFsdWUgcGFpciwgb3IK
KyAgLy8gbm90IHZhbGlkLiAgVGhpcyBtZXRob2QgcmV0dXJucyB0cnVlIGlmZiB0aGUgaXRlcmF0
b3IgaXMgdmFsaWQuCisgIHZpcnR1YWwgYm9vbCBWYWxpZCgpIGNvbnN0ID0gMDsKKworICAvLyBQ
b3NpdGlvbiBhdCB0aGUgZmlyc3Qga2V5IGluIHRoZSBzb3VyY2UuICBUaGUgaXRlcmF0b3IgaXMg
VmFsaWQoKQorICAvLyBhZnRlciB0aGlzIGNhbGwgaWZmIHRoZSBzb3VyY2UgaXMgbm90IGVtcHR5
LgorICB2aXJ0dWFsIHZvaWQgU2Vla1RvRmlyc3QoKSA9IDA7CisKKyAgLy8gUG9zaXRpb24gYXQg
dGhlIGxhc3Qga2V5IGluIHRoZSBzb3VyY2UuICBUaGUgaXRlcmF0b3IgaXMKKyAgLy8gVmFsaWQo
KSBhZnRlciB0aGlzIGNhbGwgaWZmIHRoZSBzb3VyY2UgaXMgbm90IGVtcHR5LgorICB2aXJ0dWFs
IHZvaWQgU2Vla1RvTGFzdCgpID0gMDsKKworICAvLyBQb3NpdGlvbiBhdCB0aGUgZmlyc3Qga2V5
IGluIHRoZSBzb3VyY2UgdGhhdCBhdCBvciBwYXN0IHRhcmdldAorICAvLyBUaGUgaXRlcmF0b3Ig
aXMgVmFsaWQoKSBhZnRlciB0aGlzIGNhbGwgaWZmIHRoZSBzb3VyY2UgY29udGFpbnMKKyAgLy8g
YW4gZW50cnkgdGhhdCBjb21lcyBhdCBvciBwYXN0IHRhcmdldC4KKyAgdmlydHVhbCB2b2lkIFNl
ZWsoY29uc3QgU2xpY2UmIHRhcmdldCkgPSAwOworCisgIC8vIE1vdmVzIHRvIHRoZSBuZXh0IGVu
dHJ5IGluIHRoZSBzb3VyY2UuICBBZnRlciB0aGlzIGNhbGwsIFZhbGlkKCkgaXMKKyAgLy8gdHJ1
ZSBpZmYgdGhlIGl0ZXJhdG9yIHdhcyBub3QgcG9zaXRpb25lZCBhdCB0aGUgbGFzdCBlbnRyeSBp
biB0aGUgc291cmNlLgorICAvLyBSRVFVSVJFUzogVmFsaWQoKQorICB2aXJ0dWFsIHZvaWQgTmV4
dCgpID0gMDsKKworICAvLyBNb3ZlcyB0byB0aGUgcHJldmlvdXMgZW50cnkgaW4gdGhlIHNvdXJj
ZS4gIEFmdGVyIHRoaXMgY2FsbCwgVmFsaWQoKSBpcworICAvLyB0cnVlIGlmZiB0aGUgaXRlcmF0
b3Igd2FzIG5vdCBwb3NpdGlvbmVkIGF0IHRoZSBmaXJzdCBlbnRyeSBpbiBzb3VyY2UuCisgIC8v
IFJFUVVJUkVTOiBWYWxpZCgpCisgIHZpcnR1YWwgdm9pZCBQcmV2KCkgPSAwOworCisgIC8vIFJl
dHVybiB0aGUga2V5IGZvciB0aGUgY3VycmVudCBlbnRyeS4gIFRoZSB1bmRlcmx5aW5nIHN0b3Jh
Z2UgZm9yCisgIC8vIHRoZSByZXR1cm5lZCBzbGljZSBpcyB2YWxpZCBvbmx5IHVudGlsIHRoZSBu
ZXh0IG1vZGlmaWNhdGlvbiBvZgorICAvLyB0aGUgaXRlcmF0b3IuCisgIC8vIFJFUVVJUkVTOiBW
YWxpZCgpCisgIHZpcnR1YWwgU2xpY2Uga2V5KCkgY29uc3QgPSAwOworCisgIC8vIFJldHVybiB0
aGUgdmFsdWUgZm9yIHRoZSBjdXJyZW50IGVudHJ5LiAgVGhlIHVuZGVybHlpbmcgc3RvcmFnZSBm
b3IKKyAgLy8gdGhlIHJldHVybmVkIHNsaWNlIGlzIHZhbGlkIG9ubHkgdW50aWwgdGhlIG5leHQg
bW9kaWZpY2F0aW9uIG9mCisgIC8vIHRoZSBpdGVyYXRvci4KKyAgLy8gUkVRVUlSRVM6ICFBdEVu
ZCgpICYmICFBdFN0YXJ0KCkKKyAgdmlydHVhbCBTbGljZSB2YWx1ZSgpIGNvbnN0ID0gMDsKKwor
ICAvLyBJZiBhbiBlcnJvciBoYXMgb2NjdXJyZWQsIHJldHVybiBpdC4gIEVsc2UgcmV0dXJuIGFu
IG9rIHN0YXR1cy4KKyAgdmlydHVhbCBTdGF0dXMgc3RhdHVzKCkgY29uc3QgPSAwOworCisgIC8v
IENsaWVudHMgYXJlIGFsbG93ZWQgdG8gcmVnaXN0ZXIgZnVuY3Rpb24vYXJnMS9hcmcyIHRyaXBs
ZXMgdGhhdAorICAvLyB3aWxsIGJlIGludm9rZWQgd2hlbiB0aGlzIGl0ZXJhdG9yIGlzIGRlc3Ry
b3llZC4KKyAgLy8KKyAgLy8gTm90ZSB0aGF0IHVubGlrZSBhbGwgb2YgdGhlIHByZWNlZGluZyBt
ZXRob2RzLCB0aGlzIG1ldGhvZCBpcworICAvLyBub3QgYWJzdHJhY3QgYW5kIHRoZXJlZm9yZSBj
bGllbnRzIHNob3VsZCBub3Qgb3ZlcnJpZGUgaXQuCisgIHR5cGVkZWYgdm9pZCAoKkNsZWFudXBG
dW5jdGlvbikodm9pZCogYXJnMSwgdm9pZCogYXJnMik7CisgIHZvaWQgUmVnaXN0ZXJDbGVhbnVw
KENsZWFudXBGdW5jdGlvbiBmdW5jdGlvbiwgdm9pZCogYXJnMSwgdm9pZCogYXJnMik7CisKKyBw
cml2YXRlOgorICBzdHJ1Y3QgQ2xlYW51cCB7CisgICAgQ2xlYW51cEZ1bmN0aW9uIGZ1bmN0aW9u
OworICAgIHZvaWQqIGFyZzE7CisgICAgdm9pZCogYXJnMjsKKyAgICBDbGVhbnVwKiBuZXh0Owor
ICB9OworICBDbGVhbnVwIGNsZWFudXBfOworCisgIC8vIE5vIGNvcHlpbmcgYWxsb3dlZAorICBJ
dGVyYXRvcihjb25zdCBJdGVyYXRvciYpOworICB2b2lkIG9wZXJhdG9yPShjb25zdCBJdGVyYXRv
ciYpOworfTsKKworLy8gUmV0dXJuIGFuIGVtcHR5IGl0ZXJhdG9yICh5aWVsZHMgbm90aGluZyku
CitleHRlcm4gSXRlcmF0b3IqIE5ld0VtcHR5SXRlcmF0b3IoKTsKKworLy8gUmV0dXJuIGFuIGVt
cHR5IGl0ZXJhdG9yIHdpdGggdGhlIHNwZWNpZmllZCBzdGF0dXMuCitleHRlcm4gSXRlcmF0b3Iq
IE5ld0Vycm9ySXRlcmF0b3IoY29uc3QgU3RhdHVzJiBzdGF0dXMpOworCit9ICAvLyBuYW1lc3Bh
Y2UgbGV2ZWxkYgorCisjZW5kaWYgIC8vIFNUT1JBR0VfTEVWRUxEQl9JTkNMVURFX0lURVJBVE9S
X0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2luY2x1ZGUvbGV2ZWxk
Yi9vcHRpb25zLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2luY2x1ZGUvbGV2ZWxkYi9v
cHRpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZmRkYTcxOGQzMDkwNjM4YzczNzhmNDQxOGU0ZDAyNGRkMmU2
OGJkYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvaW5jbHVk
ZS9sZXZlbGRiL29wdGlvbnMuaApAQCAtMCwwICsxLDE5NSBAQAorLy8gQ29weXJpZ2h0IChjKSAy
MDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmls
ZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgorCisjaWZuZGVmIFNUT1JBR0VfTEVWRUxEQl9J
TkNMVURFX09QVElPTlNfSF8KKyNkZWZpbmUgU1RPUkFHRV9MRVZFTERCX0lOQ0xVREVfT1BUSU9O
U19IXworCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKK25hbWVzcGFjZSBsZXZlbGRiIHsKKworY2xh
c3MgQ2FjaGU7CitjbGFzcyBDb21wYXJhdG9yOworY2xhc3MgRW52OworY2xhc3MgRmlsdGVyUG9s
aWN5OworY2xhc3MgTG9nZ2VyOworY2xhc3MgU25hcHNob3Q7CisKKy8vIERCIGNvbnRlbnRzIGFy
ZSBzdG9yZWQgaW4gYSBzZXQgb2YgYmxvY2tzLCBlYWNoIG9mIHdoaWNoIGhvbGRzIGEKKy8vIHNl
cXVlbmNlIG9mIGtleSx2YWx1ZSBwYWlycy4gIEVhY2ggYmxvY2sgbWF5IGJlIGNvbXByZXNzZWQg
YmVmb3JlCisvLyBiZWluZyBzdG9yZWQgaW4gYSBmaWxlLiAgVGhlIGZvbGxvd2luZyBlbnVtIGRl
c2NyaWJlcyB3aGljaAorLy8gY29tcHJlc3Npb24gbWV0aG9kIChpZiBhbnkpIGlzIHVzZWQgdG8g
Y29tcHJlc3MgYSBibG9jay4KK2VudW0gQ29tcHJlc3Npb25UeXBlIHsKKyAgLy8gTk9URTogZG8g
bm90IGNoYW5nZSB0aGUgdmFsdWVzIG9mIGV4aXN0aW5nIGVudHJpZXMsIGFzIHRoZXNlIGFyZQor
ICAvLyBwYXJ0IG9mIHRoZSBwZXJzaXN0ZW50IGZvcm1hdCBvbiBkaXNrLgorICBrTm9Db21wcmVz
c2lvbiAgICAgPSAweDAsCisgIGtTbmFwcHlDb21wcmVzc2lvbiA9IDB4MQorfTsKKworLy8gT3B0
aW9ucyB0byBjb250cm9sIHRoZSBiZWhhdmlvciBvZiBhIGRhdGFiYXNlIChwYXNzZWQgdG8gREI6
Ok9wZW4pCitzdHJ1Y3QgT3B0aW9ucyB7CisgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgLy8g
UGFyYW1ldGVycyB0aGF0IGFmZmVjdCBiZWhhdmlvcgorCisgIC8vIENvbXBhcmF0b3IgdXNlZCB0
byBkZWZpbmUgdGhlIG9yZGVyIG9mIGtleXMgaW4gdGhlIHRhYmxlLgorICAvLyBEZWZhdWx0OiBh
IGNvbXBhcmF0b3IgdGhhdCB1c2VzIGxleGljb2dyYXBoaWMgYnl0ZS13aXNlIG9yZGVyaW5nCisg
IC8vCisgIC8vIFJFUVVJUkVTOiBUaGUgY2xpZW50IG11c3QgZW5zdXJlIHRoYXQgdGhlIGNvbXBh
cmF0b3Igc3VwcGxpZWQKKyAgLy8gaGVyZSBoYXMgdGhlIHNhbWUgbmFtZSBhbmQgb3JkZXJzIGtl
eXMgKmV4YWN0bHkqIHRoZSBzYW1lIGFzIHRoZQorICAvLyBjb21wYXJhdG9yIHByb3ZpZGVkIHRv
IHByZXZpb3VzIG9wZW4gY2FsbHMgb24gdGhlIHNhbWUgREIuCisgIGNvbnN0IENvbXBhcmF0b3Iq
IGNvbXBhcmF0b3I7CisKKyAgLy8gSWYgdHJ1ZSwgdGhlIGRhdGFiYXNlIHdpbGwgYmUgY3JlYXRl
ZCBpZiBpdCBpcyBtaXNzaW5nLgorICAvLyBEZWZhdWx0OiBmYWxzZQorICBib29sIGNyZWF0ZV9p
Zl9taXNzaW5nOworCisgIC8vIElmIHRydWUsIGFuIGVycm9yIGlzIHJhaXNlZCBpZiB0aGUgZGF0
YWJhc2UgYWxyZWFkeSBleGlzdHMuCisgIC8vIERlZmF1bHQ6IGZhbHNlCisgIGJvb2wgZXJyb3Jf
aWZfZXhpc3RzOworCisgIC8vIElmIHRydWUsIHRoZSBpbXBsZW1lbnRhdGlvbiB3aWxsIGRvIGFn
Z3Jlc3NpdmUgY2hlY2tpbmcgb2YgdGhlCisgIC8vIGRhdGEgaXQgaXMgcHJvY2Vzc2luZyBhbmQg
d2lsbCBzdG9wIGVhcmx5IGlmIGl0IGRldGVjdHMgYW55CisgIC8vIGVycm9ycy4gIFRoaXMgbWF5
IGhhdmUgdW5mb3Jlc2VlbiByYW1pZmljYXRpb25zOiBmb3IgZXhhbXBsZSwgYQorICAvLyBjb3Jy
dXB0aW9uIG9mIG9uZSBEQiBlbnRyeSBtYXkgY2F1c2UgYSBsYXJnZSBudW1iZXIgb2YgZW50cmll
cyB0bworICAvLyBiZWNvbWUgdW5yZWFkYWJsZSBvciBmb3IgdGhlIGVudGlyZSBEQiB0byBiZWNv
bWUgdW5vcGVuYWJsZS4KKyAgLy8gRGVmYXVsdDogZmFsc2UKKyAgYm9vbCBwYXJhbm9pZF9jaGVj
a3M7CisKKyAgLy8gVXNlIHRoZSBzcGVjaWZpZWQgb2JqZWN0IHRvIGludGVyYWN0IHdpdGggdGhl
IGVudmlyb25tZW50LAorICAvLyBlLmcuIHRvIHJlYWQvd3JpdGUgZmlsZXMsIHNjaGVkdWxlIGJh
Y2tncm91bmQgd29yaywgZXRjLgorICAvLyBEZWZhdWx0OiBFbnY6OkRlZmF1bHQoKQorICBFbnYq
IGVudjsKKworICAvLyBBbnkgaW50ZXJuYWwgcHJvZ3Jlc3MvZXJyb3IgaW5mb3JtYXRpb24gZ2Vu
ZXJhdGVkIGJ5IHRoZSBkYiB3aWxsCisgIC8vIGJlIHdyaXR0ZW4gdG8gaW5mb19sb2cgaWYgaXQg
aXMgbm9uLU5VTEwsIG9yIHRvIGEgZmlsZSBzdG9yZWQKKyAgLy8gaW4gdGhlIHNhbWUgZGlyZWN0
b3J5IGFzIHRoZSBEQiBjb250ZW50cyBpZiBpbmZvX2xvZyBpcyBOVUxMLgorICAvLyBEZWZhdWx0
OiBOVUxMCisgIExvZ2dlciogaW5mb19sb2c7CisKKyAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLQor
ICAvLyBQYXJhbWV0ZXJzIHRoYXQgYWZmZWN0IHBlcmZvcm1hbmNlCisKKyAgLy8gQW1vdW50IG9m
IGRhdGEgdG8gYnVpbGQgdXAgaW4gbWVtb3J5IChiYWNrZWQgYnkgYW4gdW5zb3J0ZWQgbG9nCisg
IC8vIG9uIGRpc2spIGJlZm9yZSBjb252ZXJ0aW5nIHRvIGEgc29ydGVkIG9uLWRpc2sgZmlsZS4K
KyAgLy8KKyAgLy8gTGFyZ2VyIHZhbHVlcyBpbmNyZWFzZSBwZXJmb3JtYW5jZSwgZXNwZWNpYWxs
eSBkdXJpbmcgYnVsayBsb2Fkcy4KKyAgLy8gVXAgdG8gdHdvIHdyaXRlIGJ1ZmZlcnMgbWF5IGJl
IGhlbGQgaW4gbWVtb3J5IGF0IHRoZSBzYW1lIHRpbWUsCisgIC8vIHNvIHlvdSBtYXkgd2lzaCB0
byBhZGp1c3QgdGhpcyBwYXJhbWV0ZXIgdG8gY29udHJvbCBtZW1vcnkgdXNhZ2UuCisgIC8vIEFs
c28sIGEgbGFyZ2VyIHdyaXRlIGJ1ZmZlciB3aWxsIHJlc3VsdCBpbiBhIGxvbmdlciByZWNvdmVy
eSB0aW1lCisgIC8vIHRoZSBuZXh0IHRpbWUgdGhlIGRhdGFiYXNlIGlzIG9wZW5lZC4KKyAgLy8K
KyAgLy8gRGVmYXVsdDogNE1CCisgIHNpemVfdCB3cml0ZV9idWZmZXJfc2l6ZTsKKworICAvLyBO
dW1iZXIgb2Ygb3BlbiBmaWxlcyB0aGF0IGNhbiBiZSB1c2VkIGJ5IHRoZSBEQi4gIFlvdSBtYXkg
bmVlZCB0bworICAvLyBpbmNyZWFzZSB0aGlzIGlmIHlvdXIgZGF0YWJhc2UgaGFzIGEgbGFyZ2Ug
d29ya2luZyBzZXQgKGJ1ZGdldAorICAvLyBvbmUgb3BlbiBmaWxlIHBlciAyTUIgb2Ygd29ya2lu
ZyBzZXQpLgorICAvLworICAvLyBEZWZhdWx0OiAxMDAwCisgIGludCBtYXhfb3Blbl9maWxlczsK
KworICAvLyBDb250cm9sIG92ZXIgYmxvY2tzICh1c2VyIGRhdGEgaXMgc3RvcmVkIGluIGEgc2V0
IG9mIGJsb2NrcywgYW5kCisgIC8vIGEgYmxvY2sgaXMgdGhlIHVuaXQgb2YgcmVhZGluZyBmcm9t
IGRpc2spLgorCisgIC8vIElmIG5vbi1OVUxMLCB1c2UgdGhlIHNwZWNpZmllZCBjYWNoZSBmb3Ig
YmxvY2tzLgorICAvLyBJZiBOVUxMLCBsZXZlbGRiIHdpbGwgYXV0b21hdGljYWxseSBjcmVhdGUg
YW5kIHVzZSBhbiA4TUIgaW50ZXJuYWwgY2FjaGUuCisgIC8vIERlZmF1bHQ6IE5VTEwKKyAgQ2Fj
aGUqIGJsb2NrX2NhY2hlOworCisgIC8vIEFwcHJveGltYXRlIHNpemUgb2YgdXNlciBkYXRhIHBh
Y2tlZCBwZXIgYmxvY2suICBOb3RlIHRoYXQgdGhlCisgIC8vIGJsb2NrIHNpemUgc3BlY2lmaWVk
IGhlcmUgY29ycmVzcG9uZHMgdG8gdW5jb21wcmVzc2VkIGRhdGEuICBUaGUKKyAgLy8gYWN0dWFs
IHNpemUgb2YgdGhlIHVuaXQgcmVhZCBmcm9tIGRpc2sgbWF5IGJlIHNtYWxsZXIgaWYKKyAgLy8g
Y29tcHJlc3Npb24gaXMgZW5hYmxlZC4gIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBjaGFuZ2VkIGR5
bmFtaWNhbGx5LgorICAvLworICAvLyBEZWZhdWx0OiA0SworICBzaXplX3QgYmxvY2tfc2l6ZTsK
KworICAvLyBOdW1iZXIgb2Yga2V5cyBiZXR3ZWVuIHJlc3RhcnQgcG9pbnRzIGZvciBkZWx0YSBl
bmNvZGluZyBvZiBrZXlzLgorICAvLyBUaGlzIHBhcmFtZXRlciBjYW4gYmUgY2hhbmdlZCBkeW5h
bWljYWxseS4gIE1vc3QgY2xpZW50cyBzaG91bGQKKyAgLy8gbGVhdmUgdGhpcyBwYXJhbWV0ZXIg
YWxvbmUuCisgIC8vCisgIC8vIERlZmF1bHQ6IDE2CisgIGludCBibG9ja19yZXN0YXJ0X2ludGVy
dmFsOworCisgIC8vIENvbXByZXNzIGJsb2NrcyB1c2luZyB0aGUgc3BlY2lmaWVkIGNvbXByZXNz
aW9uIGFsZ29yaXRobS4gIFRoaXMKKyAgLy8gcGFyYW1ldGVyIGNhbiBiZSBjaGFuZ2VkIGR5bmFt
aWNhbGx5LgorICAvLworICAvLyBEZWZhdWx0OiBrU25hcHB5Q29tcHJlc3Npb24sIHdoaWNoIGdp
dmVzIGxpZ2h0d2VpZ2h0IGJ1dCBmYXN0CisgIC8vIGNvbXByZXNzaW9uLgorICAvLworICAvLyBU
eXBpY2FsIHNwZWVkcyBvZiBrU25hcHB5Q29tcHJlc3Npb24gb24gYW4gSW50ZWwoUikgQ29yZShU
TSkyIDIuNEdIejoKKyAgLy8gICAgfjIwMC01MDBNQi9zIGNvbXByZXNzaW9uCisgIC8vICAgIH40
MDAtODAwTUIvcyBkZWNvbXByZXNzaW9uCisgIC8vIE5vdGUgdGhhdCB0aGVzZSBzcGVlZHMgYXJl
IHNpZ25pZmljYW50bHkgZmFzdGVyIHRoYW4gbW9zdAorICAvLyBwZXJzaXN0ZW50IHN0b3JhZ2Ug
c3BlZWRzLCBhbmQgdGhlcmVmb3JlIGl0IGlzIHR5cGljYWxseSBuZXZlcgorICAvLyB3b3J0aCBz
d2l0Y2hpbmcgdG8ga05vQ29tcHJlc3Npb24uICBFdmVuIGlmIHRoZSBpbnB1dCBkYXRhIGlzCisg
IC8vIGluY29tcHJlc3NpYmxlLCB0aGUga1NuYXBweUNvbXByZXNzaW9uIGltcGxlbWVudGF0aW9u
IHdpbGwKKyAgLy8gZWZmaWNpZW50bHkgZGV0ZWN0IHRoYXQgYW5kIHdpbGwgc3dpdGNoIHRvIHVu
Y29tcHJlc3NlZCBtb2RlLgorICBDb21wcmVzc2lvblR5cGUgY29tcHJlc3Npb247CisKKyAgLy8g
SWYgbm9uLU5VTEwsIHVzZSB0aGUgc3BlY2lmaWVkIGZpbHRlciBwb2xpY3kgdG8gcmVkdWNlIGRp
c2sgcmVhZHMuCisgIC8vIE1hbnkgYXBwbGljYXRpb25zIHdpbGwgYmVuZWZpdCBmcm9tIHBhc3Np
bmcgdGhlIHJlc3VsdCBvZgorICAvLyBOZXdCbG9vbUZpbHRlclBvbGljeSgpIGhlcmUuCisgIC8v
CisgIC8vIERlZmF1bHQ6IE5VTEwKKyAgY29uc3QgRmlsdGVyUG9saWN5KiBmaWx0ZXJfcG9saWN5
OworCisgIC8vIENyZWF0ZSBhbiBPcHRpb25zIG9iamVjdCB3aXRoIGRlZmF1bHQgdmFsdWVzIGZv
ciBhbGwgZmllbGRzLgorICBPcHRpb25zKCk7Cit9OworCisvLyBPcHRpb25zIHRoYXQgY29udHJv
bCByZWFkIG9wZXJhdGlvbnMKK3N0cnVjdCBSZWFkT3B0aW9ucyB7CisgIC8vIElmIHRydWUsIGFs
bCBkYXRhIHJlYWQgZnJvbSB1bmRlcmx5aW5nIHN0b3JhZ2Ugd2lsbCBiZQorICAvLyB2ZXJpZmll
ZCBhZ2FpbnN0IGNvcnJlc3BvbmRpbmcgY2hlY2tzdW1zLgorICAvLyBEZWZhdWx0OiBmYWxzZQor
ICBib29sIHZlcmlmeV9jaGVja3N1bXM7CisKKyAgLy8gU2hvdWxkIHRoZSBkYXRhIHJlYWQgZm9y
IHRoaXMgaXRlcmF0aW9uIGJlIGNhY2hlZCBpbiBtZW1vcnk/CisgIC8vIENhbGxlcnMgbWF5IHdp
c2ggdG8gc2V0IHRoaXMgZmllbGQgdG8gZmFsc2UgZm9yIGJ1bGsgc2NhbnMuCisgIC8vIERlZmF1
bHQ6IHRydWUKKyAgYm9vbCBmaWxsX2NhY2hlOworCisgIC8vIElmICJzbmFwc2hvdCIgaXMgbm9u
LU5VTEwsIHJlYWQgYXMgb2YgdGhlIHN1cHBsaWVkIHNuYXBzaG90CisgIC8vICh3aGljaCBtdXN0
IGJlbG9uZyB0byB0aGUgREIgdGhhdCBpcyBiZWluZyByZWFkIGFuZCB3aGljaCBtdXN0CisgIC8v
IG5vdCBoYXZlIGJlZW4gcmVsZWFzZWQpLiAgSWYgInNuYXBzaG90IiBpcyBOVUxMLCB1c2UgYW4g
aW1wbGlpY2l0CisgIC8vIHNuYXBzaG90IG9mIHRoZSBzdGF0ZSBhdCB0aGUgYmVnaW5uaW5nIG9m
IHRoaXMgcmVhZCBvcGVyYXRpb24uCisgIC8vIERlZmF1bHQ6IE5VTEwKKyAgY29uc3QgU25hcHNo
b3QqIHNuYXBzaG90OworCisgIFJlYWRPcHRpb25zKCkKKyAgICAgIDogdmVyaWZ5X2NoZWNrc3Vt
cyhmYWxzZSksCisgICAgICAgIGZpbGxfY2FjaGUodHJ1ZSksCisgICAgICAgIHNuYXBzaG90KE5V
TEwpIHsKKyAgfQorfTsKKworLy8gT3B0aW9ucyB0aGF0IGNvbnRyb2wgd3JpdGUgb3BlcmF0aW9u
cworc3RydWN0IFdyaXRlT3B0aW9ucyB7CisgIC8vIElmIHRydWUsIHRoZSB3cml0ZSB3aWxsIGJl
IGZsdXNoZWQgZnJvbSB0aGUgb3BlcmF0aW5nIHN5c3RlbQorICAvLyBidWZmZXIgY2FjaGUgKGJ5
IGNhbGxpbmcgV3JpdGFibGVGaWxlOjpTeW5jKCkpIGJlZm9yZSB0aGUgd3JpdGUKKyAgLy8gaXMg
Y29uc2lkZXJlZCBjb21wbGV0ZS4gIElmIHRoaXMgZmxhZyBpcyB0cnVlLCB3cml0ZXMgd2lsbCBi
ZQorICAvLyBzbG93ZXIuCisgIC8vCisgIC8vIElmIHRoaXMgZmxhZyBpcyBmYWxzZSwgYW5kIHRo
ZSBtYWNoaW5lIGNyYXNoZXMsIHNvbWUgcmVjZW50CisgIC8vIHdyaXRlcyBtYXkgYmUgbG9zdC4g
IE5vdGUgdGhhdCBpZiBpdCBpcyBqdXN0IHRoZSBwcm9jZXNzIHRoYXQKKyAgLy8gY3Jhc2hlcyAo
aS5lLiwgdGhlIG1hY2hpbmUgZG9lcyBub3QgcmVib290KSwgbm8gd3JpdGVzIHdpbGwgYmUKKyAg
Ly8gbG9zdCBldmVuIGlmIHN5bmM9PWZhbHNlLgorICAvLworICAvLyBJbiBvdGhlciB3b3Jkcywg
YSBEQiB3cml0ZSB3aXRoIHN5bmM9PWZhbHNlIGhhcyBzaW1pbGFyCisgIC8vIGNyYXNoIHNlbWFu
dGljcyBhcyB0aGUgIndyaXRlKCkiIHN5c3RlbSBjYWxsLiAgQSBEQiB3cml0ZQorICAvLyB3aXRo
IHN5bmM9PXRydWUgaGFzIHNpbWlsYXIgY3Jhc2ggc2VtYW50aWNzIHRvIGEgIndyaXRlKCkiCisg
IC8vIHN5c3RlbSBjYWxsIGZvbGxvd2VkIGJ5ICJmc3luYygpIi4KKyAgLy8KKyAgLy8gRGVmYXVs
dDogZmFsc2UKKyAgYm9vbCBzeW5jOworCisgIFdyaXRlT3B0aW9ucygpCisgICAgICA6IHN5bmMo
ZmFsc2UpIHsKKyAgfQorfTsKKworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKKworI2VuZGlmICAv
LyBTVE9SQUdFX0xFVkVMREJfSU5DTFVERV9PUFRJT05TX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9sZXZlbGRiL2luY2x1ZGUvbGV2ZWxkYi9zbGljZS5oIGIvU291cmNlL1RoaXJk
UGFydHkvbGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvc2xpY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NGVhOGZh
NDlhZjY3ODJiNTRiYTA3NTI4ODQ0ZTY2NWU4ZWE4MDk1Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvc2xpY2UuaApAQCAtMCwwICsx
LDEwOSBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgor
Ly8KKy8vIFNsaWNlIGlzIGEgc2ltcGxlIHN0cnVjdHVyZSBjb250YWluaW5nIGEgcG9pbnRlciBp
bnRvIHNvbWUgZXh0ZXJuYWwKKy8vIHN0b3JhZ2UgYW5kIGEgc2l6ZS4gIFRoZSB1c2VyIG9mIGEg
U2xpY2UgbXVzdCBlbnN1cmUgdGhhdCB0aGUgc2xpY2UKKy8vIGlzIG5vdCB1c2VkIGFmdGVyIHRo
ZSBjb3JyZXNwb25kaW5nIGV4dGVybmFsIHN0b3JhZ2UgaGFzIGJlZW4KKy8vIGRlYWxsb2NhdGVk
LgorLy8KKy8vIE11bHRpcGxlIHRocmVhZHMgY2FuIGludm9rZSBjb25zdCBtZXRob2RzIG9uIGEg
U2xpY2Ugd2l0aG91dAorLy8gZXh0ZXJuYWwgc3luY2hyb25pemF0aW9uLCBidXQgaWYgYW55IG9m
IHRoZSB0aHJlYWRzIG1heSBjYWxsIGEKKy8vIG5vbi1jb25zdCBtZXRob2QsIGFsbCB0aHJlYWRz
IGFjY2Vzc2luZyB0aGUgc2FtZSBTbGljZSBtdXN0IHVzZQorLy8gZXh0ZXJuYWwgc3luY2hyb25p
emF0aW9uLgorCisjaWZuZGVmIFNUT1JBR0VfTEVWRUxEQl9JTkNMVURFX1NMSUNFX0hfCisjZGVm
aW5lIFNUT1JBR0VfTEVWRUxEQl9JTkNMVURFX1NMSUNFX0hfCisKKyNpbmNsdWRlIDxhc3NlcnQu
aD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxz
dHJpbmc+CisKK25hbWVzcGFjZSBsZXZlbGRiIHsKKworY2xhc3MgU2xpY2UgeworIHB1YmxpYzoK
KyAgLy8gQ3JlYXRlIGFuIGVtcHR5IHNsaWNlLgorICBTbGljZSgpIDogZGF0YV8oIiIpLCBzaXpl
XygwKSB7IH0KKworICAvLyBDcmVhdGUgYSBzbGljZSB0aGF0IHJlZmVycyB0byBkWzAsbi0xXS4K
KyAgU2xpY2UoY29uc3QgY2hhciogZCwgc2l6ZV90IG4pIDogZGF0YV8oZCksIHNpemVfKG4pIHsg
fQorCisgIC8vIENyZWF0ZSBhIHNsaWNlIHRoYXQgcmVmZXJzIHRvIHRoZSBjb250ZW50cyBvZiAi
cyIKKyAgU2xpY2UoY29uc3Qgc3RkOjpzdHJpbmcmIHMpIDogZGF0YV8ocy5kYXRhKCkpLCBzaXpl
XyhzLnNpemUoKSkgeyB9CisKKyAgLy8gQ3JlYXRlIGEgc2xpY2UgdGhhdCByZWZlcnMgdG8gc1sw
LHN0cmxlbihzKS0xXQorICBTbGljZShjb25zdCBjaGFyKiBzKSA6IGRhdGFfKHMpLCBzaXplXyhz
dHJsZW4ocykpIHsgfQorCisgIC8vIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGJlZ2lubmluZyBv
ZiB0aGUgcmVmZXJlbmNlZCBkYXRhCisgIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVy
biBkYXRhXzsgfQorCisgIC8vIFJldHVybiB0aGUgbGVuZ3RoIChpbiBieXRlcykgb2YgdGhlIHJl
ZmVyZW5jZWQgZGF0YQorICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVfOyB9CisK
KyAgLy8gUmV0dXJuIHRydWUgaWZmIHRoZSBsZW5ndGggb2YgdGhlIHJlZmVyZW5jZWQgZGF0YSBp
cyB6ZXJvCisgIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJldHVybiBzaXplXyA9PSAwOyB9CisKKyAg
Ly8gUmV0dXJuIHRoZSBpdGggYnl0ZSBpbiB0aGUgcmVmZXJlbmNlZCBkYXRhLgorICAvLyBSRVFV
SVJFUzogbiA8IHNpemUoKQorICBjaGFyIG9wZXJhdG9yW10oc2l6ZV90IG4pIGNvbnN0IHsKKyAg
ICBhc3NlcnQobiA8IHNpemUoKSk7CisgICAgcmV0dXJuIGRhdGFfW25dOworICB9CisKKyAgLy8g
Q2hhbmdlIHRoaXMgc2xpY2UgdG8gcmVmZXIgdG8gYW4gZW1wdHkgYXJyYXkKKyAgdm9pZCBjbGVh
cigpIHsgZGF0YV8gPSAiIjsgc2l6ZV8gPSAwOyB9CisKKyAgLy8gRHJvcCB0aGUgZmlyc3QgIm4i
IGJ5dGVzIGZyb20gdGhpcyBzbGljZS4KKyAgdm9pZCByZW1vdmVfcHJlZml4KHNpemVfdCBuKSB7
CisgICAgYXNzZXJ0KG4gPD0gc2l6ZSgpKTsKKyAgICBkYXRhXyArPSBuOworICAgIHNpemVfIC09
IG47CisgIH0KKworICAvLyBSZXR1cm4gYSBzdHJpbmcgdGhhdCBjb250YWlucyB0aGUgY29weSBv
ZiB0aGUgcmVmZXJlbmNlZCBkYXRhLgorICBzdGQ6OnN0cmluZyBUb1N0cmluZygpIGNvbnN0IHsg
cmV0dXJuIHN0ZDo6c3RyaW5nKGRhdGFfLCBzaXplXyk7IH0KKworICAvLyBUaHJlZS13YXkgY29t
cGFyaXNvbi4gIFJldHVybnMgdmFsdWU6CisgIC8vICAgPCAgMCBpZmYgIip0aGlzIiA8ICAiYiIs
CisgIC8vICAgPT0gMCBpZmYgIip0aGlzIiA9PSAiYiIsCisgIC8vICAgPiAgMCBpZmYgIip0aGlz
IiA+ICAiYiIKKyAgaW50IGNvbXBhcmUoY29uc3QgU2xpY2UmIGIpIGNvbnN0OworCisgIC8vIFJl
dHVybiB0cnVlIGlmZiAieCIgaXMgYSBwcmVmaXggb2YgIip0aGlzIgorICBib29sIHN0YXJ0c193
aXRoKGNvbnN0IFNsaWNlJiB4KSBjb25zdCB7CisgICAgcmV0dXJuICgoc2l6ZV8gPj0geC5zaXpl
XykgJiYKKyAgICAgICAgICAgIChtZW1jbXAoZGF0YV8sIHguZGF0YV8sIHguc2l6ZV8pID09IDAp
KTsKKyAgfQorCisgcHJpdmF0ZToKKyAgY29uc3QgY2hhciogZGF0YV87CisgIHNpemVfdCBzaXpl
XzsKKworICAvLyBJbnRlbnRpb25hbGx5IGNvcHlhYmxlCit9OworCitpbmxpbmUgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFNsaWNlJiB4LCBjb25zdCBTbGljZSYgeSkgeworICByZXR1cm4gKCh4LnNp
emUoKSA9PSB5LnNpemUoKSkgJiYKKyAgICAgICAgICAobWVtY21wKHguZGF0YSgpLCB5LmRhdGEo
KSwgeC5zaXplKCkpID09IDApKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBT
bGljZSYgeCwgY29uc3QgU2xpY2UmIHkpIHsKKyAgcmV0dXJuICEoeCA9PSB5KTsKK30KKworaW5s
aW5lIGludCBTbGljZTo6Y29tcGFyZShjb25zdCBTbGljZSYgYikgY29uc3QgeworICBjb25zdCBp
bnQgbWluX2xlbiA9IChzaXplXyA8IGIuc2l6ZV8pID8gc2l6ZV8gOiBiLnNpemVfOworICBpbnQg
ciA9IG1lbWNtcChkYXRhXywgYi5kYXRhXywgbWluX2xlbik7CisgIGlmIChyID09IDApIHsKKyAg
ICBpZiAoc2l6ZV8gPCBiLnNpemVfKSByID0gLTE7CisgICAgZWxzZSBpZiAoc2l6ZV8gPiBiLnNp
emVfKSByID0gKzE7CisgIH0KKyAgcmV0dXJuIHI7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBsZXZl
bGRiCisKKworI2VuZGlmICAvLyBTVE9SQUdFX0xFVkVMREJfSU5DTFVERV9TTElDRV9IXwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvc3RhdHVz
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2luY2x1ZGUvbGV2ZWxkYi9zdGF0dXMuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4xMWRiZDRiNDdlZDM4ODNiN2RkNTA5MmMyMTY4NTQ0MWY2MDAwYzI2Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIv
c3RhdHVzLmgKQEAgLTAsMCArMSwxMDYgQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2
ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVz
IG9mIGNvbnRyaWJ1dG9ycy4KKy8vCisvLyBBIFN0YXR1cyBlbmNhcHN1bGF0ZXMgdGhlIHJlc3Vs
dCBvZiBhbiBvcGVyYXRpb24uICBJdCBtYXkgaW5kaWNhdGUgc3VjY2VzcywKKy8vIG9yIGl0IG1h
eSBpbmRpY2F0ZSBhbiBlcnJvciB3aXRoIGFuIGFzc29jaWF0ZWQgZXJyb3IgbWVzc2FnZS4KKy8v
CisvLyBNdWx0aXBsZSB0aHJlYWRzIGNhbiBpbnZva2UgY29uc3QgbWV0aG9kcyBvbiBhIFN0YXR1
cyB3aXRob3V0CisvLyBleHRlcm5hbCBzeW5jaHJvbml6YXRpb24sIGJ1dCBpZiBhbnkgb2YgdGhl
IHRocmVhZHMgbWF5IGNhbGwgYQorLy8gbm9uLWNvbnN0IG1ldGhvZCwgYWxsIHRocmVhZHMgYWNj
ZXNzaW5nIHRoZSBzYW1lIFN0YXR1cyBtdXN0IHVzZQorLy8gZXh0ZXJuYWwgc3luY2hyb25pemF0
aW9uLgorCisjaWZuZGVmIFNUT1JBR0VfTEVWRUxEQl9JTkNMVURFX1NUQVRVU19IXworI2RlZmlu
ZSBTVE9SQUdFX0xFVkVMREJfSU5DTFVERV9TVEFUVVNfSF8KKworI2luY2x1ZGUgPHN0cmluZz4K
KyNpbmNsdWRlICJsZXZlbGRiL3NsaWNlLmgiCisKK25hbWVzcGFjZSBsZXZlbGRiIHsKKworY2xh
c3MgU3RhdHVzIHsKKyBwdWJsaWM6CisgIC8vIENyZWF0ZSBhIHN1Y2Nlc3Mgc3RhdHVzLgorICBT
dGF0dXMoKSA6IHN0YXRlXyhOVUxMKSB7IH0KKyAgflN0YXR1cygpIHsgZGVsZXRlW10gc3RhdGVf
OyB9CisKKyAgLy8gQ29weSB0aGUgc3BlY2lmaWVkIHN0YXR1cy4KKyAgU3RhdHVzKGNvbnN0IFN0
YXR1cyYgcyk7CisgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFN0YXR1cyYgcyk7CisKKyAgLy8gUmV0
dXJuIGEgc3VjY2VzcyBzdGF0dXMuCisgIHN0YXRpYyBTdGF0dXMgT0soKSB7IHJldHVybiBTdGF0
dXMoKTsgfQorCisgIC8vIFJldHVybiBlcnJvciBzdGF0dXMgb2YgYW4gYXBwcm9wcmlhdGUgdHlw
ZS4KKyAgc3RhdGljIFN0YXR1cyBOb3RGb3VuZChjb25zdCBTbGljZSYgbXNnLCBjb25zdCBTbGlj
ZSYgbXNnMiA9IFNsaWNlKCkpIHsKKyAgICByZXR1cm4gU3RhdHVzKGtOb3RGb3VuZCwgbXNnLCBt
c2cyKTsKKyAgfQorICBzdGF0aWMgU3RhdHVzIENvcnJ1cHRpb24oY29uc3QgU2xpY2UmIG1zZywg
Y29uc3QgU2xpY2UmIG1zZzIgPSBTbGljZSgpKSB7CisgICAgcmV0dXJuIFN0YXR1cyhrQ29ycnVw
dGlvbiwgbXNnLCBtc2cyKTsKKyAgfQorICBzdGF0aWMgU3RhdHVzIE5vdFN1cHBvcnRlZChjb25z
dCBTbGljZSYgbXNnLCBjb25zdCBTbGljZSYgbXNnMiA9IFNsaWNlKCkpIHsKKyAgICByZXR1cm4g
U3RhdHVzKGtOb3RTdXBwb3J0ZWQsIG1zZywgbXNnMik7CisgIH0KKyAgc3RhdGljIFN0YXR1cyBJ
bnZhbGlkQXJndW1lbnQoY29uc3QgU2xpY2UmIG1zZywgY29uc3QgU2xpY2UmIG1zZzIgPSBTbGlj
ZSgpKSB7CisgICAgcmV0dXJuIFN0YXR1cyhrSW52YWxpZEFyZ3VtZW50LCBtc2csIG1zZzIpOwor
ICB9CisgIHN0YXRpYyBTdGF0dXMgSU9FcnJvcihjb25zdCBTbGljZSYgbXNnLCBjb25zdCBTbGlj
ZSYgbXNnMiA9IFNsaWNlKCkpIHsKKyAgICByZXR1cm4gU3RhdHVzKGtJT0Vycm9yLCBtc2csIG1z
ZzIpOworICB9CisKKyAgLy8gUmV0dXJucyB0cnVlIGlmZiB0aGUgc3RhdHVzIGluZGljYXRlcyBz
dWNjZXNzLgorICBib29sIG9rKCkgY29uc3QgeyByZXR1cm4gKHN0YXRlXyA9PSBOVUxMKTsgfQor
CisgIC8vIFJldHVybnMgdHJ1ZSBpZmYgdGhlIHN0YXR1cyBpbmRpY2F0ZXMgYSBOb3RGb3VuZCBl
cnJvci4KKyAgYm9vbCBJc05vdEZvdW5kKCkgY29uc3QgeyByZXR1cm4gY29kZSgpID09IGtOb3RG
b3VuZDsgfQorCisgIC8vIFJldHVybnMgdHJ1ZSBpZmYgdGhlIHN0YXR1cyBpbmRpY2F0ZXMgYSBD
b3JydXB0aW9uIGVycm9yLgorICBib29sIElzQ29ycnVwdGlvbigpIGNvbnN0IHsgcmV0dXJuIGNv
ZGUoKSA9PSBrQ29ycnVwdGlvbjsgfQorCisgIC8vIFJldHVybnMgdHJ1ZSBpZmYgdGhlIHN0YXR1
cyBpbmRpY2F0ZXMgYW4gSU9FcnJvci4KKyAgYm9vbCBJc0lPRXJyb3IoKSBjb25zdCB7IHJldHVy
biBjb2RlKCkgPT0ga0lPRXJyb3I7IH0KKworICAvLyBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50
YXRpb24gb2YgdGhpcyBzdGF0dXMgc3VpdGFibGUgZm9yIHByaW50aW5nLgorICAvLyBSZXR1cm5z
IHRoZSBzdHJpbmcgIk9LIiBmb3Igc3VjY2Vzcy4KKyAgc3RkOjpzdHJpbmcgVG9TdHJpbmcoKSBj
b25zdDsKKworIHByaXZhdGU6CisgIC8vIE9LIHN0YXR1cyBoYXMgYSBOVUxMIHN0YXRlXy4gIE90
aGVyd2lzZSwgc3RhdGVfIGlzIGEgbmV3W10gYXJyYXkKKyAgLy8gb2YgdGhlIGZvbGxvd2luZyBm
b3JtOgorICAvLyAgICBzdGF0ZV9bMC4uM10gPT0gbGVuZ3RoIG9mIG1lc3NhZ2UKKyAgLy8gICAg
c3RhdGVfWzRdICAgID09IGNvZGUKKyAgLy8gICAgc3RhdGVfWzUuLl0gID09IG1lc3NhZ2UKKyAg
Y29uc3QgY2hhciogc3RhdGVfOworCisgIGVudW0gQ29kZSB7CisgICAga09rID0gMCwKKyAgICBr
Tm90Rm91bmQgPSAxLAorICAgIGtDb3JydXB0aW9uID0gMiwKKyAgICBrTm90U3VwcG9ydGVkID0g
MywKKyAgICBrSW52YWxpZEFyZ3VtZW50ID0gNCwKKyAgICBrSU9FcnJvciA9IDUKKyAgfTsKKwor
ICBDb2RlIGNvZGUoKSBjb25zdCB7CisgICAgcmV0dXJuIChzdGF0ZV8gPT0gTlVMTCkgPyBrT2sg
OiBzdGF0aWNfY2FzdDxDb2RlPihzdGF0ZV9bNF0pOworICB9CisKKyAgU3RhdHVzKENvZGUgY29k
ZSwgY29uc3QgU2xpY2UmIG1zZywgY29uc3QgU2xpY2UmIG1zZzIpOworICBzdGF0aWMgY29uc3Qg
Y2hhciogQ29weVN0YXRlKGNvbnN0IGNoYXIqIHMpOworfTsKKworaW5saW5lIFN0YXR1czo6U3Rh
dHVzKGNvbnN0IFN0YXR1cyYgcykgeworICBzdGF0ZV8gPSAocy5zdGF0ZV8gPT0gTlVMTCkgPyBO
VUxMIDogQ29weVN0YXRlKHMuc3RhdGVfKTsKK30KK2lubGluZSB2b2lkIFN0YXR1czo6b3BlcmF0
b3I9KGNvbnN0IFN0YXR1cyYgcykgeworICAvLyBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbiBjYXRj
aGVzIGJvdGggYWxpYXNpbmcgKHdoZW4gdGhpcyA9PSAmcyksCisgIC8vIGFuZCB0aGUgY29tbW9u
IGNhc2Ugd2hlcmUgYm90aCBzIGFuZCAqdGhpcyBhcmUgb2suCisgIGlmIChzdGF0ZV8gIT0gcy5z
dGF0ZV8pIHsKKyAgICBkZWxldGVbXSBzdGF0ZV87CisgICAgc3RhdGVfID0gKHMuc3RhdGVfID09
IE5VTEwpID8gTlVMTCA6IENvcHlTdGF0ZShzLnN0YXRlXyk7CisgIH0KK30KKworfSAgLy8gbmFt
ZXNwYWNlIGxldmVsZGIKKworI2VuZGlmICAvLyBTVE9SQUdFX0xFVkVMREJfSU5DTFVERV9TVEFU
VVNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvaW5jbHVkZS9sZXZl
bGRiL3RhYmxlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2luY2x1ZGUvbGV2ZWxkYi90
YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmE5NzQ2YzNmNWVhOTAyNTBkOGJkZTEyZDllYzdlOTA5MWZkNWJk
NTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2luY2x1ZGUv
bGV2ZWxkYi90YWJsZS5oCkBAIC0wLDAgKzEsODUgQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBU
aGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9y
IG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2lmbmRlZiBTVE9SQUdFX0xFVkVMREJfSU5DTFVE
RV9UQUJMRV9IXworI2RlZmluZSBTVE9SQUdFX0xFVkVMREJfSU5DTFVERV9UQUJMRV9IXworCisj
aW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSAibGV2ZWxkYi9pdGVyYXRvci5oIgorCituYW1l
c3BhY2UgbGV2ZWxkYiB7CisKK2NsYXNzIEJsb2NrOworY2xhc3MgQmxvY2tIYW5kbGU7CitjbGFz
cyBGb290ZXI7CitzdHJ1Y3QgT3B0aW9uczsKK2NsYXNzIFJhbmRvbUFjY2Vzc0ZpbGU7CitzdHJ1
Y3QgUmVhZE9wdGlvbnM7CitjbGFzcyBUYWJsZUNhY2hlOworCisvLyBBIFRhYmxlIGlzIGEgc29y
dGVkIG1hcCBmcm9tIHN0cmluZ3MgdG8gc3RyaW5ncy4gIFRhYmxlcyBhcmUKKy8vIGltbXV0YWJs
ZSBhbmQgcGVyc2lzdGVudC4gIEEgVGFibGUgbWF5IGJlIHNhZmVseSBhY2Nlc3NlZCBmcm9tCisv
LyBtdWx0aXBsZSB0aHJlYWRzIHdpdGhvdXQgZXh0ZXJuYWwgc3luY2hyb25pemF0aW9uLgorY2xh
c3MgVGFibGUgeworIHB1YmxpYzoKKyAgLy8gQXR0ZW1wdCB0byBvcGVuIHRoZSB0YWJsZSB0aGF0
IGlzIHN0b3JlZCBpbiBieXRlcyBbMC4uZmlsZV9zaXplKQorICAvLyBvZiAiZmlsZSIsIGFuZCBy
ZWFkIHRoZSBtZXRhZGF0YSBlbnRyaWVzIG5lY2Vzc2FyeSB0byBhbGxvdworICAvLyByZXRyaWV2
aW5nIGRhdGEgZnJvbSB0aGUgdGFibGUuCisgIC8vCisgIC8vIElmIHN1Y2Nlc3NmdWwsIHJldHVy
bnMgb2sgYW5kIHNldHMgIip0YWJsZSIgdG8gdGhlIG5ld2x5IG9wZW5lZAorICAvLyB0YWJsZS4g
IFRoZSBjbGllbnQgc2hvdWxkIGRlbGV0ZSAiKnRhYmxlIiB3aGVuIG5vIGxvbmdlciBuZWVkZWQu
CisgIC8vIElmIHRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBpbml0aWFsaXppbmcgdGhlIHRhYmxl
LCBzZXRzICIqdGFibGUiCisgIC8vIHRvIE5VTEwgYW5kIHJldHVybnMgYSBub24tb2sgc3RhdHVz
LiAgRG9lcyBub3QgdGFrZSBvd25lcnNoaXAgb2YKKyAgLy8gIipzb3VyY2UiLCBidXQgdGhlIGNs
aWVudCBtdXN0IGVuc3VyZSB0aGF0ICJzb3VyY2UiIHJlbWFpbnMgbGl2ZQorICAvLyBmb3IgdGhl
IGR1cmF0aW9uIG9mIHRoZSByZXR1cm5lZCB0YWJsZSdzIGxpZmV0aW1lLgorICAvLworICAvLyAq
ZmlsZSBtdXN0IHJlbWFpbiBsaXZlIHdoaWxlIHRoaXMgVGFibGUgaXMgaW4gdXNlLgorICBzdGF0
aWMgU3RhdHVzIE9wZW4oY29uc3QgT3B0aW9ucyYgb3B0aW9ucywKKyAgICAgICAgICAgICAgICAg
ICAgIFJhbmRvbUFjY2Vzc0ZpbGUqIGZpbGUsCisgICAgICAgICAgICAgICAgICAgICB1aW50NjRf
dCBmaWxlX3NpemUsCisgICAgICAgICAgICAgICAgICAgICBUYWJsZSoqIHRhYmxlKTsKKworICB+
VGFibGUoKTsKKworICAvLyBSZXR1cm5zIGEgbmV3IGl0ZXJhdG9yIG92ZXIgdGhlIHRhYmxlIGNv
bnRlbnRzLgorICAvLyBUaGUgcmVzdWx0IG9mIE5ld0l0ZXJhdG9yKCkgaXMgaW5pdGlhbGx5IGlu
dmFsaWQgKGNhbGxlciBtdXN0CisgIC8vIGNhbGwgb25lIG9mIHRoZSBTZWVrIG1ldGhvZHMgb24g
dGhlIGl0ZXJhdG9yIGJlZm9yZSB1c2luZyBpdCkuCisgIEl0ZXJhdG9yKiBOZXdJdGVyYXRvcihj
b25zdCBSZWFkT3B0aW9ucyYpIGNvbnN0OworCisgIC8vIEdpdmVuIGEga2V5LCByZXR1cm4gYW4g
YXBwcm94aW1hdGUgYnl0ZSBvZmZzZXQgaW4gdGhlIGZpbGUgd2hlcmUKKyAgLy8gdGhlIGRhdGEg
Zm9yIHRoYXQga2V5IGJlZ2lucyAob3Igd291bGQgYmVnaW4gaWYgdGhlIGtleSB3ZXJlCisgIC8v
IHByZXNlbnQgaW4gdGhlIGZpbGUpLiAgVGhlIHJldHVybmVkIHZhbHVlIGlzIGluIHRlcm1zIG9m
IGZpbGUKKyAgLy8gYnl0ZXMsIGFuZCBzbyBpbmNsdWRlcyBlZmZlY3RzIGxpa2UgY29tcHJlc3Np
b24gb2YgdGhlIHVuZGVybHlpbmcgZGF0YS4KKyAgLy8gRS5nLiwgdGhlIGFwcHJveGltYXRlIG9m
ZnNldCBvZiB0aGUgbGFzdCBrZXkgaW4gdGhlIHRhYmxlIHdpbGwKKyAgLy8gYmUgY2xvc2UgdG8g
dGhlIGZpbGUgbGVuZ3RoLgorICB1aW50NjRfdCBBcHByb3hpbWF0ZU9mZnNldE9mKGNvbnN0IFNs
aWNlJiBrZXkpIGNvbnN0OworCisgcHJpdmF0ZToKKyAgc3RydWN0IFJlcDsKKyAgUmVwKiByZXBf
OworCisgIGV4cGxpY2l0IFRhYmxlKFJlcCogcmVwKSB7IHJlcF8gPSByZXA7IH0KKyAgc3RhdGlj
IEl0ZXJhdG9yKiBCbG9ja1JlYWRlcih2b2lkKiwgY29uc3QgUmVhZE9wdGlvbnMmLCBjb25zdCBT
bGljZSYpOworCisgIC8vIENhbGxzICgqaGFuZGxlX3Jlc3VsdCkoYXJnLCAuLi4pIHdpdGggdGhl
IGVudHJ5IGZvdW5kIGFmdGVyIGEgY2FsbAorICAvLyB0byBTZWVrKGtleSkuICBNYXkgbm90IG1h
a2Ugc3VjaCBhIGNhbGwgaWYgZmlsdGVyIHBvbGljeSBzYXlzCisgIC8vIHRoYXQga2V5IGlzIG5v
dCBwcmVzZW50LgorICBmcmllbmQgY2xhc3MgVGFibGVDYWNoZTsKKyAgU3RhdHVzIEludGVybmFs
R2V0KAorICAgICAgY29uc3QgUmVhZE9wdGlvbnMmLCBjb25zdCBTbGljZSYga2V5LAorICAgICAg
dm9pZCogYXJnLAorICAgICAgdm9pZCAoKmhhbmRsZV9yZXN1bHQpKHZvaWQqIGFyZywgY29uc3Qg
U2xpY2UmIGssIGNvbnN0IFNsaWNlJiB2KSk7CisKKworICB2b2lkIFJlYWRNZXRhKGNvbnN0IEZv
b3RlciYgZm9vdGVyKTsKKyAgdm9pZCBSZWFkRmlsdGVyKGNvbnN0IFNsaWNlJiBmaWx0ZXJfaGFu
ZGxlX3ZhbHVlKTsKKworICAvLyBObyBjb3B5aW5nIGFsbG93ZWQKKyAgVGFibGUoY29uc3QgVGFi
bGUmKTsKKyAgdm9pZCBvcGVyYXRvcj0oY29uc3QgVGFibGUmKTsKK307CisKK30gIC8vIG5hbWVz
cGFjZSBsZXZlbGRiCisKKyNlbmRpZiAgLy8gU1RPUkFHRV9MRVZFTERCX0lOQ0xVREVfVEFCTEVf
SF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvaW5jbHVkZS9sZXZlbGRi
L3RhYmxlX2J1aWxkZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvaW5jbHVkZS9sZXZl
bGRiL3RhYmxlX2J1aWxkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZmQxZGM3MWYxY2I3NTQxZWY2MjM5N2I2
Nzk1OTQ2YWQ4YzIwNjUyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGV2
ZWxkYi9pbmNsdWRlL2xldmVsZGIvdGFibGVfYnVpbGRlci5oCkBAIC0wLDAgKzEsOTIgQEAKKy8v
IENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2Vl
IHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKy8vCisvLyBUYWJs
ZUJ1aWxkZXIgcHJvdmlkZXMgdGhlIGludGVyZmFjZSB1c2VkIHRvIGJ1aWxkIGEgVGFibGUKKy8v
IChhbiBpbW11dGFibGUgYW5kIHNvcnRlZCBtYXAgZnJvbSBrZXlzIHRvIHZhbHVlcykuCisvLwor
Ly8gTXVsdGlwbGUgdGhyZWFkcyBjYW4gaW52b2tlIGNvbnN0IG1ldGhvZHMgb24gYSBUYWJsZUJ1
aWxkZXIgd2l0aG91dAorLy8gZXh0ZXJuYWwgc3luY2hyb25pemF0aW9uLCBidXQgaWYgYW55IG9m
IHRoZSB0aHJlYWRzIG1heSBjYWxsIGEKKy8vIG5vbi1jb25zdCBtZXRob2QsIGFsbCB0aHJlYWRz
IGFjY2Vzc2luZyB0aGUgc2FtZSBUYWJsZUJ1aWxkZXIgbXVzdCB1c2UKKy8vIGV4dGVybmFsIHN5
bmNocm9uaXphdGlvbi4KKworI2lmbmRlZiBTVE9SQUdFX0xFVkVMREJfSU5DTFVERV9UQUJMRV9C
VUlMREVSX0hfCisjZGVmaW5lIFNUT1JBR0VfTEVWRUxEQl9JTkNMVURFX1RBQkxFX0JVSUxERVJf
SF8KKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgImxldmVsZGIvb3B0aW9ucy5oIgor
I2luY2x1ZGUgImxldmVsZGIvc3RhdHVzLmgiCisKK25hbWVzcGFjZSBsZXZlbGRiIHsKKworY2xh
c3MgQmxvY2tCdWlsZGVyOworY2xhc3MgQmxvY2tIYW5kbGU7CitjbGFzcyBXcml0YWJsZUZpbGU7
CisKK2NsYXNzIFRhYmxlQnVpbGRlciB7CisgcHVibGljOgorICAvLyBDcmVhdGUgYSBidWlsZGVy
IHRoYXQgd2lsbCBzdG9yZSB0aGUgY29udGVudHMgb2YgdGhlIHRhYmxlIGl0IGlzCisgIC8vIGJ1
aWxkaW5nIGluICpmaWxlLiAgRG9lcyBub3QgY2xvc2UgdGhlIGZpbGUuICBJdCBpcyB1cCB0byB0
aGUKKyAgLy8gY2FsbGVyIHRvIGNsb3NlIHRoZSBmaWxlIGFmdGVyIGNhbGxpbmcgRmluaXNoKCku
CisgIFRhYmxlQnVpbGRlcihjb25zdCBPcHRpb25zJiBvcHRpb25zLCBXcml0YWJsZUZpbGUqIGZp
bGUpOworCisgIC8vIFJFUVVJUkVTOiBFaXRoZXIgRmluaXNoKCkgb3IgQWJhbmRvbigpIGhhcyBi
ZWVuIGNhbGxlZC4KKyAgflRhYmxlQnVpbGRlcigpOworCisgIC8vIENoYW5nZSB0aGUgb3B0aW9u
cyB1c2VkIGJ5IHRoaXMgYnVpbGRlci4gIE5vdGU6IG9ubHkgc29tZSBvZiB0aGUKKyAgLy8gb3B0
aW9uIGZpZWxkcyBjYW4gYmUgY2hhbmdlZCBhZnRlciBjb25zdHJ1Y3Rpb24uICBJZiBhIGZpZWxk
IGlzCisgIC8vIG5vdCBhbGxvd2VkIHRvIGNoYW5nZSBkeW5hbWljYWxseSBhbmQgaXRzIHZhbHVl
IGluIHRoZSBzdHJ1Y3R1cmUKKyAgLy8gcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3RvciBpcyBkaWZm
ZXJlbnQgZnJvbSBpdHMgdmFsdWUgaW4gdGhlCisgIC8vIHN0cnVjdHVyZSBwYXNzZWQgdG8gdGhp
cyBtZXRob2QsIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIGFuIGVycm9yCisgIC8vIHdpdGhvdXQg
Y2hhbmdpbmcgYW55IGZpZWxkcy4KKyAgU3RhdHVzIENoYW5nZU9wdGlvbnMoY29uc3QgT3B0aW9u
cyYgb3B0aW9ucyk7CisKKyAgLy8gQWRkIGtleSx2YWx1ZSB0byB0aGUgdGFibGUgYmVpbmcgY29u
c3RydWN0ZWQuCisgIC8vIFJFUVVJUkVTOiBrZXkgaXMgYWZ0ZXIgYW55IHByZXZpb3VzbHkgYWRk
ZWQga2V5IGFjY29yZGluZyB0byBjb21wYXJhdG9yLgorICAvLyBSRVFVSVJFUzogRmluaXNoKCks
IEFiYW5kb24oKSBoYXZlIG5vdCBiZWVuIGNhbGxlZAorICB2b2lkIEFkZChjb25zdCBTbGljZSYg
a2V5LCBjb25zdCBTbGljZSYgdmFsdWUpOworCisgIC8vIEFkdmFuY2VkIG9wZXJhdGlvbjogZmx1
c2ggYW55IGJ1ZmZlcmVkIGtleS92YWx1ZSBwYWlycyB0byBmaWxlLgorICAvLyBDYW4gYmUgdXNl
ZCB0byBlbnN1cmUgdGhhdCB0d28gYWRqYWNlbnQgZW50cmllcyBuZXZlciBsaXZlIGluCisgIC8v
IHRoZSBzYW1lIGRhdGEgYmxvY2suICBNb3N0IGNsaWVudHMgc2hvdWxkIG5vdCBuZWVkIHRvIHVz
ZSB0aGlzIG1ldGhvZC4KKyAgLy8gUkVRVUlSRVM6IEZpbmlzaCgpLCBBYmFuZG9uKCkgaGF2ZSBu
b3QgYmVlbiBjYWxsZWQKKyAgdm9pZCBGbHVzaCgpOworCisgIC8vIFJldHVybiBub24tb2sgaWZm
IHNvbWUgZXJyb3IgaGFzIGJlZW4gZGV0ZWN0ZWQuCisgIFN0YXR1cyBzdGF0dXMoKSBjb25zdDsK
KworICAvLyBGaW5pc2ggYnVpbGRpbmcgdGhlIHRhYmxlLiAgU3RvcHMgdXNpbmcgdGhlIGZpbGUg
cGFzc2VkIHRvIHRoZQorICAvLyBjb25zdHJ1Y3RvciBhZnRlciB0aGlzIGZ1bmN0aW9uIHJldHVy
bnMuCisgIC8vIFJFUVVJUkVTOiBGaW5pc2goKSwgQWJhbmRvbigpIGhhdmUgbm90IGJlZW4gY2Fs
bGVkCisgIFN0YXR1cyBGaW5pc2goKTsKKworICAvLyBJbmRpY2F0ZSB0aGF0IHRoZSBjb250ZW50
cyBvZiB0aGlzIGJ1aWxkZXIgc2hvdWxkIGJlIGFiYW5kb25lZC4gIFN0b3BzCisgIC8vIHVzaW5n
IHRoZSBmaWxlIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3IgYWZ0ZXIgdGhpcyBmdW5jdGlvbiBy
ZXR1cm5zLgorICAvLyBJZiB0aGUgY2FsbGVyIGlzIG5vdCBnb2luZyB0byBjYWxsIEZpbmlzaCgp
LCBpdCBtdXN0IGNhbGwgQWJhbmRvbigpCisgIC8vIGJlZm9yZSBkZXN0cm95aW5nIHRoaXMgYnVp
bGRlci4KKyAgLy8gUkVRVUlSRVM6IEZpbmlzaCgpLCBBYmFuZG9uKCkgaGF2ZSBub3QgYmVlbiBj
YWxsZWQKKyAgdm9pZCBBYmFuZG9uKCk7CisKKyAgLy8gTnVtYmVyIG9mIGNhbGxzIHRvIEFkZCgp
IHNvIGZhci4KKyAgdWludDY0X3QgTnVtRW50cmllcygpIGNvbnN0OworCisgIC8vIFNpemUgb2Yg
dGhlIGZpbGUgZ2VuZXJhdGVkIHNvIGZhci4gIElmIGludm9rZWQgYWZ0ZXIgYSBzdWNjZXNzZnVs
CisgIC8vIEZpbmlzaCgpIGNhbGwsIHJldHVybnMgdGhlIHNpemUgb2YgdGhlIGZpbmFsIGdlbmVy
YXRlZCBmaWxlLgorICB1aW50NjRfdCBGaWxlU2l6ZSgpIGNvbnN0OworCisgcHJpdmF0ZToKKyAg
Ym9vbCBvaygpIGNvbnN0IHsgcmV0dXJuIHN0YXR1cygpLm9rKCk7IH0KKyAgdm9pZCBXcml0ZUJs
b2NrKEJsb2NrQnVpbGRlciogYmxvY2ssIEJsb2NrSGFuZGxlKiBoYW5kbGUpOworICB2b2lkIFdy
aXRlUmF3QmxvY2soY29uc3QgU2xpY2UmIGRhdGEsIENvbXByZXNzaW9uVHlwZSwgQmxvY2tIYW5k
bGUqIGhhbmRsZSk7CisKKyAgc3RydWN0IFJlcDsKKyAgUmVwKiByZXBfOworCisgIC8vIE5vIGNv
cHlpbmcgYWxsb3dlZAorICBUYWJsZUJ1aWxkZXIoY29uc3QgVGFibGVCdWlsZGVyJik7CisgIHZv
aWQgb3BlcmF0b3I9KGNvbnN0IFRhYmxlQnVpbGRlciYpOworfTsKKworfSAgLy8gbmFtZXNwYWNl
IGxldmVsZGIKKworI2VuZGlmICAvLyBTVE9SQUdFX0xFVkVMREJfSU5DTFVERV9UQUJMRV9CVUlM
REVSX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2luY2x1ZGUvbGV2
ZWxkYi93cml0ZV9iYXRjaC5oIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9pbmNsdWRlL2xl
dmVsZGIvd3JpdGVfYmF0Y2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZTlhYWI2OGUwZDgzZGM0ZDk0ODM1ZWUy
MWNmOTI2YzFmZjBjMGRiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGV2
ZWxkYi9pbmNsdWRlL2xldmVsZGIvd3JpdGVfYmF0Y2guaApAQCAtMCwwICsxLDY0IEBACisvLyBD
b3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0
aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCisvLworLy8gV3JpdGVC
YXRjaCBob2xkcyBhIGNvbGxlY3Rpb24gb2YgdXBkYXRlcyB0byBhcHBseSBhdG9taWNhbGx5IHRv
IGEgREIuCisvLworLy8gVGhlIHVwZGF0ZXMgYXJlIGFwcGxpZWQgaW4gdGhlIG9yZGVyIGluIHdo
aWNoIHRoZXkgYXJlIGFkZGVkCisvLyB0byB0aGUgV3JpdGVCYXRjaC4gIEZvciBleGFtcGxlLCB0
aGUgdmFsdWUgb2YgImtleSIgd2lsbCBiZSAidjMiCisvLyBhZnRlciB0aGUgZm9sbG93aW5nIGJh
dGNoIGlzIHdyaXR0ZW46CisvLworLy8gICAgYmF0Y2guUHV0KCJrZXkiLCAidjEiKTsKKy8vICAg
IGJhdGNoLkRlbGV0ZSgia2V5Iik7CisvLyAgICBiYXRjaC5QdXQoImtleSIsICJ2MiIpOworLy8g
ICAgYmF0Y2guUHV0KCJrZXkiLCAidjMiKTsKKy8vCisvLyBNdWx0aXBsZSB0aHJlYWRzIGNhbiBp
bnZva2UgY29uc3QgbWV0aG9kcyBvbiBhIFdyaXRlQmF0Y2ggd2l0aG91dAorLy8gZXh0ZXJuYWwg
c3luY2hyb25pemF0aW9uLCBidXQgaWYgYW55IG9mIHRoZSB0aHJlYWRzIG1heSBjYWxsIGEKKy8v
IG5vbi1jb25zdCBtZXRob2QsIGFsbCB0aHJlYWRzIGFjY2Vzc2luZyB0aGUgc2FtZSBXcml0ZUJh
dGNoIG11c3QgdXNlCisvLyBleHRlcm5hbCBzeW5jaHJvbml6YXRpb24uCisKKyNpZm5kZWYgU1RP
UkFHRV9MRVZFTERCX0lOQ0xVREVfV1JJVEVfQkFUQ0hfSF8KKyNkZWZpbmUgU1RPUkFHRV9MRVZF
TERCX0lOQ0xVREVfV1JJVEVfQkFUQ0hfSF8KKworI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRl
ICJsZXZlbGRiL3N0YXR1cy5oIgorCituYW1lc3BhY2UgbGV2ZWxkYiB7CisKK2NsYXNzIFNsaWNl
OworCitjbGFzcyBXcml0ZUJhdGNoIHsKKyBwdWJsaWM6CisgIFdyaXRlQmF0Y2goKTsKKyAgfldy
aXRlQmF0Y2goKTsKKworICAvLyBTdG9yZSB0aGUgbWFwcGluZyAia2V5LT52YWx1ZSIgaW4gdGhl
IGRhdGFiYXNlLgorICB2b2lkIFB1dChjb25zdCBTbGljZSYga2V5LCBjb25zdCBTbGljZSYgdmFs
dWUpOworCisgIC8vIElmIHRoZSBkYXRhYmFzZSBjb250YWlucyBhIG1hcHBpbmcgZm9yICJrZXki
LCBlcmFzZSBpdC4gIEVsc2UgZG8gbm90aGluZy4KKyAgdm9pZCBEZWxldGUoY29uc3QgU2xpY2Um
IGtleSk7CisKKyAgLy8gQ2xlYXIgYWxsIHVwZGF0ZXMgYnVmZmVyZWQgaW4gdGhpcyBiYXRjaC4K
KyAgdm9pZCBDbGVhcigpOworCisgIC8vIFN1cHBvcnQgZm9yIGl0ZXJhdGluZyBvdmVyIHRoZSBj
b250ZW50cyBvZiBhIGJhdGNoLgorICBjbGFzcyBIYW5kbGVyIHsKKyAgIHB1YmxpYzoKKyAgICB2
aXJ0dWFsIH5IYW5kbGVyKCk7CisgICAgdmlydHVhbCB2b2lkIFB1dChjb25zdCBTbGljZSYga2V5
LCBjb25zdCBTbGljZSYgdmFsdWUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgRGVsZXRlKGNvbnN0
IFNsaWNlJiBrZXkpID0gMDsKKyAgfTsKKyAgU3RhdHVzIEl0ZXJhdGUoSGFuZGxlciogaGFuZGxl
cikgY29uc3Q7CisKKyBwcml2YXRlOgorICBmcmllbmQgY2xhc3MgV3JpdGVCYXRjaEludGVybmFs
OworCisgIHN0ZDo6c3RyaW5nIHJlcF87ICAvLyBTZWUgY29tbWVudCBpbiB3cml0ZV9iYXRjaC5j
YyBmb3IgdGhlIGZvcm1hdCBvZiByZXBfCisKKyAgLy8gSW50ZW50aW9uYWxseSBjb3B5YWJsZQor
fTsKKworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKKworI2VuZGlmICAvLyBTVE9SQUdFX0xFVkVM
REJfSU5DTFVERV9XUklURV9CQVRDSF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGV2ZWxkYi9wb3J0L1JFQURNRSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvcG9ydC9SRUFE
TUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNDIyNTYzZTI1Y2UwMjMwZDkyMzczNjM3Nzk5ZGE4ZDI4YWI2MDIyMwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvcG9ydC9SRUFETUUK
QEAgLTAsMCArMSwxMCBAQAorVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgaW50ZXJmYWNlcyBhbmQg
aW1wbGVtZW50YXRpb25zIHRoYXQgaXNvbGF0ZSB0aGUKK3Jlc3Qgb2YgdGhlIHBhY2thZ2UgZnJv
bSBwbGF0Zm9ybSBkZXRhaWxzLgorCitDb2RlIGluIHRoZSByZXN0IG9mIHRoZSBwYWNrYWdlIGlu
Y2x1ZGVzICJwb3J0LmgiIGZyb20gdGhpcyBkaXJlY3RvcnkuCisicG9ydC5oIiBpbiB0dXJuIGlu
Y2x1ZGVzIGEgcGxhdGZvcm0gc3BlY2lmaWMgInBvcnRfPHBsYXRmb3JtPi5oIiBmaWxlCit0aGF0
IHByb3ZpZGVzIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi4KKworU2VlIHBv
cnRfcG9zaXguaCBmb3IgYW4gZXhhbXBsZSBvZiB3aGF0IG11c3QgYmUgcHJvdmlkZWQgaW4gYSBw
bGF0Zm9ybQorc3BlY2lmaWMgaGVhZGVyIGZpbGUuCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xldmVsZGIvcG9ydC9hdG9taWNfcG9pbnRlci5oIGIvU291cmNlL1RoaXJkUGFydHkv
bGV2ZWxkYi9wb3J0L2F0b21pY19wb2ludGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTE3YmY0MzVlYWIzM2U1
NWE4NzA0NmU3MDVhMWVjYjA0ZGFkN2UyNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xldmVsZGIvcG9ydC9hdG9taWNfcG9pbnRlci5oCkBAIC0wLDAgKzEsMjI0IEBACisv
LyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNl
ZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCisKKy8vIEF0b21p
Y1BvaW50ZXIgcHJvdmlkZXMgc3RvcmFnZSBmb3IgYSBsb2NrLWZyZWUgcG9pbnRlci4KKy8vIFBs
YXRmb3JtLWRlcGVuZGVudCBpbXBsZW1lbnRhdGlvbiBvZiBBdG9taWNQb2ludGVyOgorLy8gLSBJ
ZiB0aGUgcGxhdGZvcm0gcHJvdmlkZXMgYSBjaGVhcCBiYXJyaWVyLCB3ZSB1c2UgaXQgd2l0aCBy
YXcgcG9pbnRlcnMKKy8vIC0gSWYgY3N0ZGF0b21pYyBpcyBwcmVzZW50IChvbiBuZXdlciB2ZXJz
aW9ucyBvZiBnY2MsIGl0IGlzKSwgd2UgdXNlCisvLyAgIGEgY3N0ZGF0b21pYy1iYXNlZCBBdG9t
aWNQb2ludGVyLiAgSG93ZXZlciB3ZSBwcmVmZXIgdGhlIG1lbW9yeQorLy8gICBiYXJyaWVyIGJh
c2VkIHZlcnNpb24sIGJlY2F1c2UgYXQgbGVhc3Qgb24gYSBnY2MgNC40IDMyLWJpdCBidWlsZAor
Ly8gICBvbiBsaW51eCwgd2UgaGF2ZSBlbmNvdW50ZXJlZCBhIGJ1Z2d5IDxjc3RkYXRvbWljPgor
Ly8gICBpbXBsZW1lbnRhdGlvbi4gIEFsc28sIHNvbWUgPGNzdGRhdG9taWM+IGltcGxlbWVudGF0
aW9ucyBhcmUgbXVjaAorLy8gICBzbG93ZXIgdGhhbiBhIG1lbW9yeS1iYXJyaWVyIGJhc2VkIGlt
cGxlbWVudGF0aW9uICh+MTZucyBmb3IKKy8vICAgPGNzdGRhdG9taWM+IGJhc2VkIGFjcXVpcmUt
bG9hZCB2cy4gfjFucyBmb3IgYSBiYXJyaWVyIGJhc2VkCisvLyAgIGFjcXVpcmUtbG9hZCkuCisv
LyBUaGlzIGNvZGUgaXMgYmFzZWQgb24gYXRvbWljb3BzLWludGVybmFscy0qIGluIEdvb2dsZSdz
IHBlcmZ0b29sczoKKy8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9nb29nbGUtcGVyZnRvb2xz
L3NvdXJjZS9icm93c2UvI3N2biUyRnRydW5rJTJGc3JjJTJGYmFzZQorCisjaWZuZGVmIFBPUlRf
QVRPTUlDX1BPSU5URVJfSF8KKyNkZWZpbmUgUE9SVF9BVE9NSUNfUE9JTlRFUl9IXworCisjaW5j
bHVkZSA8c3RkaW50Lmg+CisjaWZkZWYgTEVWRUxEQl9DU1REQVRPTUlDX1BSRVNFTlQKKyNpbmNs
dWRlIDxjc3RkYXRvbWljPgorI2VuZGlmCisjaWZkZWYgT1NfV0lOCisjaW5jbHVkZSA8d2luZG93
cy5oPgorI2VuZGlmCisjaWZkZWYgT1NfTUFDT1NYCisjaW5jbHVkZSA8bGlia2Vybi9PU0F0b21p
Yy5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9NX1g2NCkgfHwgZGVmaW5lZChfX3g4Nl82NF9f
KQorI2RlZmluZSBBUkNIX0NQVV9YODZfRkFNSUxZIDEKKyNlbGlmIGRlZmluZWQoX01fSVg4Nikg
fHwgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX2kzODYpCisjZGVmaW5lIEFSQ0hfQ1BV
X1g4Nl9GQU1JTFkgMQorI2VsaWYgZGVmaW5lZChfX0FSTUVMX18pCisjZGVmaW5lIEFSQ0hfQ1BV
X0FSTV9GQU1JTFkgMQorI2VsaWYgZGVmaW5lZChfX3BwY19fKSB8fCBkZWZpbmVkKF9fcG93ZXJw
Y19fKSB8fCBkZWZpbmVkKF9fcG93ZXJwYzY0X18pCisjZGVmaW5lIEFSQ0hfQ1BVX1BQQ19GQU1J
TFkgMQorI2VuZGlmCisKK25hbWVzcGFjZSBsZXZlbGRiIHsKK25hbWVzcGFjZSBwb3J0IHsKKwor
Ly8gRGVmaW5lIE1lbW9yeUJhcnJpZXIoKSBpZiBhdmFpbGFibGUKKy8vIFdpbmRvd3Mgb24geDg2
CisjaWYgZGVmaW5lZChPU19XSU4pICYmIGRlZmluZWQoQ09NUElMRVJfTVNWQykgJiYgZGVmaW5l
ZChBUkNIX0NQVV9YODZfRkFNSUxZKQorLy8gd2luZG93cy5oIGFscmVhZHkgcHJvdmlkZXMgYSBN
ZW1vcnlCYXJyaWVyKHZvaWQpIG1hY3JvCisvLyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2Vu
LXVzL2xpYnJhcnkvbXM2ODQyMDgodj12cy44NSkuYXNweAorI2RlZmluZSBMRVZFTERCX0hBVkVf
TUVNT1JZX0JBUlJJRVIKKworLy8gR2NjIG9uIHg4NgorI2VsaWYgZGVmaW5lZChBUkNIX0NQVV9Y
ODZfRkFNSUxZKSAmJiBkZWZpbmVkKF9fR05VQ19fKQoraW5saW5lIHZvaWQgTWVtb3J5QmFycmll
cigpIHsKKyAgLy8gU2VlIGh0dHA6Ly9nY2MuZ251Lm9yZy9tbC9nY2MvMjAwMy0wNC9tc2cwMTE4
MC5odG1sIGZvciBhIGRpc2N1c3Npb24gb24KKyAgLy8gdGhpcyBpZGlvbS4gQWxzbyBzZWUgaHR0
cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NZW1vcnlfb3JkZXJpbmcuCisgIF9fYXNtX18gX192
b2xhdGlsZV9fKCIiIDogOiA6ICJtZW1vcnkiKTsKK30KKyNkZWZpbmUgTEVWRUxEQl9IQVZFX01F
TU9SWV9CQVJSSUVSCisKKy8vIFN1biBTdHVkaW8KKyNlbGlmIGRlZmluZWQoQVJDSF9DUFVfWDg2
X0ZBTUlMWSkgJiYgZGVmaW5lZChfX1NVTlBST19DQykKK2lubGluZSB2b2lkIE1lbW9yeUJhcnJp
ZXIoKSB7CisgIC8vIFNlZSBodHRwOi8vZ2NjLmdudS5vcmcvbWwvZ2NjLzIwMDMtMDQvbXNnMDEx
ODAuaHRtbCBmb3IgYSBkaXNjdXNzaW9uIG9uCisgIC8vIHRoaXMgaWRpb20uIEFsc28gc2VlIGh0
dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTWVtb3J5X29yZGVyaW5nLgorICBhc20gdm9sYXRp
bGUoIiIgOiA6IDogIm1lbW9yeSIpOworfQorI2RlZmluZSBMRVZFTERCX0hBVkVfTUVNT1JZX0JB
UlJJRVIKKworLy8gTWFjIE9TCisjZWxpZiBkZWZpbmVkKE9TX01BQ09TWCkKK2lubGluZSB2b2lk
IE1lbW9yeUJhcnJpZXIoKSB7CisgIE9TTWVtb3J5QmFycmllcigpOworfQorI2RlZmluZSBMRVZF
TERCX0hBVkVfTUVNT1JZX0JBUlJJRVIKKworLy8gQVJNIExpbnV4CisjZWxpZiBkZWZpbmVkKEFS
Q0hfQ1BVX0FSTV9GQU1JTFkpICYmIGRlZmluZWQoX19saW51eF9fKQordHlwZWRlZiB2b2lkICgq
TGludXhLZXJuZWxNZW1vcnlCYXJyaWVyRnVuYykodm9pZCk7CisvLyBUaGUgTGludXggQVJNIGtl
cm5lbCBwcm92aWRlcyBhIGhpZ2hseSBvcHRpbWl6ZWQgZGV2aWNlLXNwZWNpZmljIG1lbW9yeQor
Ly8gYmFycmllciBmdW5jdGlvbiBhdCBhIGZpeGVkIG1lbW9yeSBhZGRyZXNzIHRoYXQgaXMgbWFw
cGVkIGluIGV2ZXJ5CisvLyB1c2VyLWxldmVsIHByb2Nlc3MuCisvLworLy8gVGhpcyBiZWF0cyB1
c2luZyBDUFUtc3BlY2lmaWMgaW5zdHJ1Y3Rpb25zIHdoaWNoIGFyZSwgb24gc2luZ2xlLWNvcmUK
Ky8vIGRldmljZXMsIHVuLW5lY2Vzc2FyeSBhbmQgdmVyeSBjb3N0bHkgKGUuZy4gQVJNdjctQSAi
ZG1iIiB0YWtlcyBtb3JlCisvLyB0aGFuIDE4MG5zIG9uIGEgQ29ydGV4LUE4IGxpa2UgdGhlIG9u
ZSBvbiBhIE5leHVzIE9uZSkuIEJlbmNobWFya2luZworLy8gc2hvd3MgdGhhdCB0aGUgZXh0cmEg
ZnVuY3Rpb24gY2FsbCBjb3N0IGlzIGNvbXBsZXRlbHkgbmVnbGlnaWJsZSBvbgorLy8gbXVsdGkt
Y29yZSBkZXZpY2VzLgorLy8KK2lubGluZSB2b2lkIE1lbW9yeUJhcnJpZXIoKSB7CisgICgqKExp
bnV4S2VybmVsTWVtb3J5QmFycmllckZ1bmMpMHhmZmZmMGZhMCkoKTsKK30KKyNkZWZpbmUgTEVW
RUxEQl9IQVZFX01FTU9SWV9CQVJSSUVSCisKKy8vIFBQQworI2VsaWYgZGVmaW5lZChBUkNIX0NQ
VV9QUENfRkFNSUxZKSAmJiBkZWZpbmVkKF9fR05VQ19fKQoraW5saW5lIHZvaWQgTWVtb3J5QmFy
cmllcigpIHsKKyAgLy8gVE9ETyBmb3Igc29tZSBwb3dlcnBjIGV4cGVydDogaXMgdGhlcmUgYSBj
aGVhcGVyIHN1aXRhYmxlIHZhcmlhbnQ/CisgIC8vIFBlcmhhcHMgYnkgaGF2aW5nIHNlcGFyYXRl
IGJhcnJpZXJzIGZvciBhY3F1aXJlIGFuZCByZWxlYXNlIG9wcy4KKyAgYXNtIHZvbGF0aWxlKCJz
eW5jIiA6IDogOiAibWVtb3J5Iik7Cit9CisjZGVmaW5lIExFVkVMREJfSEFWRV9NRU1PUllfQkFS
UklFUgorCisjZW5kaWYKKworLy8gQXRvbWljUG9pbnRlciBidWlsdCB1c2luZyBwbGF0Zm9ybS1z
cGVjaWZpYyBNZW1vcnlCYXJyaWVyKCkKKyNpZiBkZWZpbmVkKExFVkVMREJfSEFWRV9NRU1PUllf
QkFSUklFUikKK2NsYXNzIEF0b21pY1BvaW50ZXIgeworIHByaXZhdGU6CisgIHZvaWQqIHJlcF87
CisgcHVibGljOgorICBBdG9taWNQb2ludGVyKCkgeyB9CisgIGV4cGxpY2l0IEF0b21pY1BvaW50
ZXIodm9pZCogcCkgOiByZXBfKHApIHt9CisgIGlubGluZSB2b2lkKiBOb0JhcnJpZXJfTG9hZCgp
IGNvbnN0IHsgcmV0dXJuIHJlcF87IH0KKyAgaW5saW5lIHZvaWQgTm9CYXJyaWVyX1N0b3JlKHZv
aWQqIHYpIHsgcmVwXyA9IHY7IH0KKyAgaW5saW5lIHZvaWQqIEFjcXVpcmVfTG9hZCgpIGNvbnN0
IHsKKyAgICB2b2lkKiByZXN1bHQgPSByZXBfOworICAgIE1lbW9yeUJhcnJpZXIoKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworICB9CisgIGlubGluZSB2b2lkIFJlbGVhc2VfU3RvcmUodm9pZCogdikg
eworICAgIE1lbW9yeUJhcnJpZXIoKTsKKyAgICByZXBfID0gdjsKKyAgfQorfTsKKworLy8gQXRv
bWljUG9pbnRlciBiYXNlZCBvbiA8Y3N0ZGF0b21pYz4KKyNlbGlmIGRlZmluZWQoTEVWRUxEQl9D
U1REQVRPTUlDX1BSRVNFTlQpCitjbGFzcyBBdG9taWNQb2ludGVyIHsKKyBwcml2YXRlOgorICBz
dGQ6OmF0b21pYzx2b2lkKj4gcmVwXzsKKyBwdWJsaWM6CisgIEF0b21pY1BvaW50ZXIoKSB7IH0K
KyAgZXhwbGljaXQgQXRvbWljUG9pbnRlcih2b2lkKiB2KSA6IHJlcF8odikgeyB9CisgIGlubGlu
ZSB2b2lkKiBBY3F1aXJlX0xvYWQoKSBjb25zdCB7CisgICAgcmV0dXJuIHJlcF8ubG9hZChzdGQ6
Om1lbW9yeV9vcmRlcl9hY3F1aXJlKTsKKyAgfQorICBpbmxpbmUgdm9pZCBSZWxlYXNlX1N0b3Jl
KHZvaWQqIHYpIHsKKyAgICByZXBfLnN0b3JlKHYsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2Up
OworICB9CisgIGlubGluZSB2b2lkKiBOb0JhcnJpZXJfTG9hZCgpIGNvbnN0IHsKKyAgICByZXR1
cm4gcmVwXy5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICB9CisgIGlubGluZSB2
b2lkIE5vQmFycmllcl9TdG9yZSh2b2lkKiB2KSB7CisgICAgcmVwXy5zdG9yZSh2LCBzdGQ6Om1l
bW9yeV9vcmRlcl9yZWxheGVkKTsKKyAgfQorfTsKKworLy8gQXRvbWljIHBvaW50ZXIgYmFzZWQg
b24gc3BhcmMgbWVtb3J5IGJhcnJpZXJzCisjZWxpZiBkZWZpbmVkKF9fc3BhcmN2OSkgJiYgZGVm
aW5lZChfX0dOVUNfXykKK2NsYXNzIEF0b21pY1BvaW50ZXIgeworIHByaXZhdGU6CisgIHZvaWQq
IHJlcF87CisgcHVibGljOgorICBBdG9taWNQb2ludGVyKCkgeyB9CisgIGV4cGxpY2l0IEF0b21p
Y1BvaW50ZXIodm9pZCogdikgOiByZXBfKHYpIHsgfQorICBpbmxpbmUgdm9pZCogQWNxdWlyZV9M
b2FkKCkgY29uc3QgeworICAgIHZvaWQqIHZhbDsKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAo
CisgICAgICAgICJsZHggWyVbcmVwX11dLCAlW3ZhbF0gXG5cdCIKKyAgICAgICAgICJtZW1iYXIg
I0xvYWRMb2FkfCNMb2FkU3RvcmUgXG5cdCIKKyAgICAgICAgOiBbdmFsXSAiPXIiICh2YWwpCisg
ICAgICAgIDogW3JlcF9dICJyIiAoJnJlcF8pCisgICAgICAgIDogIm1lbW9yeSIpOworICAgIHJl
dHVybiB2YWw7CisgIH0KKyAgaW5saW5lIHZvaWQgUmVsZWFzZV9TdG9yZSh2b2lkKiB2KSB7Cisg
ICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAorICAgICAgICAibWVtYmFyICNMb2FkU3RvcmV8I1N0
b3JlU3RvcmUgXG5cdCIKKyAgICAgICAgInN0eCAlW3ZdLCBbJVtyZXBfXV0gXG5cdCIKKyAgICAg
ICAgOgorICAgICAgICA6IFtyZXBfXSAiciIgKCZyZXBfKSwgW3ZdICJyIiAodikKKyAgICAgICAg
OiAibWVtb3J5Iik7CisgIH0KKyAgaW5saW5lIHZvaWQqIE5vQmFycmllcl9Mb2FkKCkgY29uc3Qg
eyByZXR1cm4gcmVwXzsgfQorICBpbmxpbmUgdm9pZCBOb0JhcnJpZXJfU3RvcmUodm9pZCogdikg
eyByZXBfID0gdjsgfQorfTsKKworLy8gQXRvbWljIHBvaW50ZXIgYmFzZWQgb24gaWE2NCBhY3Ev
cmVsCisjZWxpZiBkZWZpbmVkKF9faWE2NCkgJiYgZGVmaW5lZChfX0dOVUNfXykKK2NsYXNzIEF0
b21pY1BvaW50ZXIgeworIHByaXZhdGU6CisgIHZvaWQqIHJlcF87CisgcHVibGljOgorICBBdG9t
aWNQb2ludGVyKCkgeyB9CisgIGV4cGxpY2l0IEF0b21pY1BvaW50ZXIodm9pZCogdikgOiByZXBf
KHYpIHsgfQorICBpbmxpbmUgdm9pZCogQWNxdWlyZV9Mb2FkKCkgY29uc3QgeworICAgIHZvaWQq
IHZhbCAgICA7CisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAorICAgICAgICAibGQ4LmFjcSAl
W3ZhbF0gPSBbJVtyZXBfXV0gXG5cdCIKKyAgICAgICAgOiBbdmFsXSAiPXIiICh2YWwpCisgICAg
ICAgIDogW3JlcF9dICJyIiAoJnJlcF8pCisgICAgICAgIDogIm1lbW9yeSIKKyAgICAgICAgKTsK
KyAgICByZXR1cm4gdmFsOworICB9CisgIGlubGluZSB2b2lkIFJlbGVhc2VfU3RvcmUodm9pZCog
dikgeworICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKKyAgICAgICAgInN0OC5yZWwgWyVbcmVw
X11dID0gJVt2XSAgXG5cdCIKKyAgICAgICAgOgorICAgICAgICA6IFtyZXBfXSAiciIgKCZyZXBf
KSwgW3ZdICJyIiAodikKKyAgICAgICAgOiAibWVtb3J5IgorICAgICAgICApOworICB9CisgIGlu
bGluZSB2b2lkKiBOb0JhcnJpZXJfTG9hZCgpIGNvbnN0IHsgcmV0dXJuIHJlcF87IH0KKyAgaW5s
aW5lIHZvaWQgTm9CYXJyaWVyX1N0b3JlKHZvaWQqIHYpIHsgcmVwXyA9IHY7IH0KK307CisKKy8v
IFdlIGhhdmUgbmVpdGhlciBNZW1vcnlCYXJyaWVyKCksIG5vciA8Y3N0ZGF0b21pYz4KKyNlbHNl
CisjZXJyb3IgUGxlYXNlIGltcGxlbWVudCBBdG9taWNQb2ludGVyIGZvciB0aGlzIHBsYXRmb3Jt
LgorCisjZW5kaWYKKworI3VuZGVmIExFVkVMREJfSEFWRV9NRU1PUllfQkFSUklFUgorI3VuZGVm
IEFSQ0hfQ1BVX1g4Nl9GQU1JTFkKKyN1bmRlZiBBUkNIX0NQVV9BUk1fRkFNSUxZCisjdW5kZWYg
QVJDSF9DUFVfUFBDX0ZBTUlMWQorCit9ICAvLyBuYW1lc3BhY2UgcG9ydAorfSAgLy8gbmFtZXNw
YWNlIGxldmVsZGIKKworI2VuZGlmICAvLyBQT1JUX0FUT01JQ19QT0lOVEVSX0hfCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3BvcnQvcG9ydC5oIGIvU291cmNlL1RoaXJk
UGFydHkvbGV2ZWxkYi9wb3J0L3BvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNjY3ZGI0MGQwZDUwNDZkYTJk
NjhkNDVmMWU4M2Y4NTI5Y2VmYTRlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvbGV2ZWxkYi9wb3J0L3BvcnQuaApAQCAtMCwwICsxLDE5IEBACisvLyBDb3B5cmlnaHQgKGMp
IDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBm
aWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCisKKyNpZm5kZWYgU1RPUkFHRV9MRVZFTERC
X1BPUlRfUE9SVF9IXworI2RlZmluZSBTVE9SQUdFX0xFVkVMREJfUE9SVF9QT1JUX0hfCisKKyNp
bmNsdWRlIDxzdHJpbmcuaD4KKworLy8gSW5jbHVkZSB0aGUgYXBwcm9wcmlhdGUgcGxhdGZvcm0g
c3BlY2lmaWMgZmlsZSBiZWxvdy4gIElmIHlvdSBhcmUKKy8vIHBvcnRpbmcgdG8gYSBuZXcgcGxh
dGZvcm0sIHNlZSAicG9ydF9leGFtcGxlLmgiIGZvciBkb2N1bWVudGF0aW9uCisvLyBvZiB3aGF0
IHRoZSBuZXcgcG9ydF88cGxhdGZvcm0+LmggZmlsZSBtdXN0IHByb3ZpZGUuCisjaWYgZGVmaW5l
ZChMRVZFTERCX1BMQVRGT1JNX1BPU0lYKQorIyAgaW5jbHVkZSAicG9ydC9wb3J0X3Bvc2l4Lmgi
CisjZWxpZiBkZWZpbmVkKExFVkVMREJfUExBVEZPUk1fQ0hST01JVU0pCisjICBpbmNsdWRlICJw
b3J0L3BvcnRfY2hyb21pdW0uaCIKKyNlbmRpZgorCisjZW5kaWYgIC8vIFNUT1JBR0VfTEVWRUxE
Ql9QT1JUX1BPUlRfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvcG9y
dC9wb3J0X2V4YW1wbGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvcG9ydC9wb3J0X2V4
YW1wbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5hYjllNDg5YjMyZDhlYjRlYzhhNDNkYTA3YTIwYWQ5MTdmYjM1
YTFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9wb3J0L3Bv
cnRfZXhhbXBsZS5oCkBAIC0wLDAgKzEsMTM1IEBACisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhl
IExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBu
YW1lcyBvZiBjb250cmlidXRvcnMuCisvLworLy8gVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBzcGVj
aWZpY2F0aW9uLCBidXQgbm90IHRoZSBpbXBsZW1lbnRhdGlvbnMsCisvLyBvZiB0aGUgdHlwZXMv
b3BlcmF0aW9ucy9ldGMuIHRoYXQgc2hvdWxkIGJlIGRlZmluZWQgYnkgYSBwbGF0Zm9ybQorLy8g
c3BlY2lmaWMgcG9ydF88cGxhdGZvcm0+LmggZmlsZS4gIFVzZSB0aGlzIGZpbGUgYXMgYSByZWZl
cmVuY2UgZm9yCisvLyBob3cgdG8gcG9ydCB0aGlzIHBhY2thZ2UgdG8gYSBuZXcgcGxhdGZvcm0u
CisKKyNpZm5kZWYgU1RPUkFHRV9MRVZFTERCX1BPUlRfUE9SVF9FWEFNUExFX0hfCisjZGVmaW5l
IFNUT1JBR0VfTEVWRUxEQl9QT1JUX1BPUlRfRVhBTVBMRV9IXworCituYW1lc3BhY2UgbGV2ZWxk
YiB7CituYW1lc3BhY2UgcG9ydCB7CisKKy8vIFRPRE8oam9ybG93KTogTWFueSBvZiB0aGVzZSBi
ZWxvbmcgbW9yZSBpbiB0aGUgZW52aXJvbm1lbnQgY2xhc3MgcmF0aGVyIHRoYW4KKy8vICAgICAg
ICAgICAgICAgaGVyZS4gV2Ugc2hvdWxkIHRyeSBtb3ZpbmcgdGhlbSBhbmQgc2VlIGlmIGl0IGFm
ZmVjdHMgcGVyZi4KKworLy8gVGhlIGZvbGxvd2luZyBib29sZWFuIGNvbnN0YW50IG11c3QgYmUg
dHJ1ZSBvbiBhIGxpdHRsZS1lbmRpYW4gbWFjaGluZQorLy8gYW5kIGZhbHNlIG90aGVyd2lzZS4K
K3N0YXRpYyBjb25zdCBib29sIGtMaXR0bGVFbmRpYW4gPSB0cnVlIC8qIG9yIHNvbWUgb3RoZXIg
ZXhwcmVzc2lvbiAqLzsKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tIFRocmVhZGluZyAtLS0tLS0t
LS0tLS0tLS0tLS0tCisKKy8vIEEgTXV0ZXggcmVwcmVzZW50cyBhbiBleGNsdXNpdmUgbG9jay4K
K2NsYXNzIE11dGV4IHsKKyBwdWJsaWM6CisgIE11dGV4KCk7CisgIH5NdXRleCgpOworCisgIC8v
IExvY2sgdGhlIG11dGV4LiAgV2FpdHMgdW50aWwgb3RoZXIgbG9ja2VycyBoYXZlIGV4aXRlZC4K
KyAgLy8gV2lsbCBkZWFkbG9jayBpZiB0aGUgbXV0ZXggaXMgYWxyZWFkeSBsb2NrZWQgYnkgdGhp
cyB0aHJlYWQuCisgIHZvaWQgTG9jaygpOworCisgIC8vIFVubG9jayB0aGUgbXV0ZXguCisgIC8v
IFJFUVVJUkVTOiBUaGlzIG11dGV4IHdhcyBsb2NrZWQgYnkgdGhpcyB0aHJlYWQuCisgIHZvaWQg
VW5sb2NrKCk7CisKKyAgLy8gT3B0aW9uYWxseSBjcmFzaCBpZiB0aGlzIHRocmVhZCBkb2VzIG5v
dCBob2xkIHRoaXMgbXV0ZXguCisgIC8vIFRoZSBpbXBsZW1lbnRhdGlvbiBtdXN0IGJlIGZhc3Qs
IGVzcGVjaWFsbHkgaWYgTkRFQlVHIGlzCisgIC8vIGRlZmluZWQuICBUaGUgaW1wbGVtZW50YXRp
b24gaXMgYWxsb3dlZCB0byBza2lwIGFsbCBjaGVja3MuCisgIHZvaWQgQXNzZXJ0SGVsZCgpOwor
fTsKKworY2xhc3MgQ29uZFZhciB7CisgcHVibGljOgorICBleHBsaWNpdCBDb25kVmFyKE11dGV4
KiBtdSk7CisgIH5Db25kVmFyKCk7CisKKyAgLy8gQXRvbWljYWxseSByZWxlYXNlICptdSBhbmQg
YmxvY2sgb24gdGhpcyBjb25kaXRpb24gdmFyaWFibGUgdW50aWwKKyAgLy8gZWl0aGVyIGEgY2Fs
bCB0byBTaWduYWxBbGwoKSwgb3IgYSBjYWxsIHRvIFNpZ25hbCgpIHRoYXQgcGlja3MKKyAgLy8g
dGhpcyB0aHJlYWQgdG8gd2FrZXVwLgorICAvLyBSRVFVSVJFUzogdGhpcyB0aHJlYWQgaG9sZHMg
Km11CisgIHZvaWQgV2FpdCgpOworCisgIC8vIElmIHRoZXJlIGFyZSBzb21lIHRocmVhZHMgd2Fp
dGluZywgd2FrZSB1cCBhdCBsZWFzdCBvbmUgb2YgdGhlbS4KKyAgdm9pZCBTaWduYWwoKTsKKwor
ICAvLyBXYWtlIHVwIGFsbCB3YWl0aW5nIHRocmVhZHMuCisgIHZvaWQgU2lnbmFsbEFsbCgpOwor
fTsKKworLy8gVGhyZWFkLXNhZmUgaW5pdGlhbGl6YXRpb24uCisvLyBVc2VkIGFzIGZvbGxvd3M6
CisvLyAgICAgIHN0YXRpYyBwb3J0OjpPbmNlVHlwZSBpbml0X2NvbnRyb2wgPSBMRVZFTERCX09O
Q0VfSU5JVDsKKy8vICAgICAgc3RhdGljIHZvaWQgSW5pdGlhbGl6ZXIoKSB7IC4uLiBkbyBzb21l
dGhpbmcgLi4uOyB9CisvLyAgICAgIC4uLgorLy8gICAgICBwb3J0OjpJbml0T25jZSgmaW5pdF9j
b250cm9sLCAmSW5pdGlhbGl6ZXIpOwordHlwZWRlZiBpbnRwdHJfdCBPbmNlVHlwZTsKKyNkZWZp
bmUgTEVWRUxEQl9PTkNFX0lOSVQgMAorZXh0ZXJuIHZvaWQgSW5pdE9uY2UocG9ydDo6T25jZVR5
cGUqLCB2b2lkICgqaW5pdGlhbGl6ZXIpKCkpOworCisvLyBBIHR5cGUgdGhhdCBob2xkcyBhIHBv
aW50ZXIgdGhhdCBjYW4gYmUgcmVhZCBvciB3cml0dGVuIGF0b21pY2FsbHkKKy8vIChpLmUuLCB3
aXRob3V0IHdvcmQtdGVhcmluZy4pCitjbGFzcyBBdG9taWNQb2ludGVyIHsKKyBwcml2YXRlOgor
ICBpbnRwdHJfdCByZXBfOworIHB1YmxpYzoKKyAgLy8gSW5pdGlhbGl6ZSB0byBhcmJpdHJhcnkg
dmFsdWUKKyAgQXRvbWljUG9pbnRlcigpOworCisgIC8vIEluaXRpYWxpemUgdG8gaG9sZCB2Cisg
IGV4cGxpY2l0IEF0b21pY1BvaW50ZXIodm9pZCogdikgOiByZXBfKHYpIHsgfQorCisgIC8vIFJl
YWQgYW5kIHJldHVybiB0aGUgc3RvcmVkIHBvaW50ZXIgd2l0aCB0aGUgZ3VhcmFudGVlIHRoYXQg
bm8KKyAgLy8gbGF0ZXIgbWVtb3J5IGFjY2VzcyAocmVhZCBvciB3cml0ZSkgYnkgdGhpcyB0aHJl
YWQgY2FuIGJlCisgIC8vIHJlb3JkZXJlZCBhaGVhZCBvZiB0aGlzIHJlYWQuCisgIHZvaWQqIEFj
cXVpcmVfTG9hZCgpIGNvbnN0OworCisgIC8vIFNldCB2IGFzIHRoZSBzdG9yZWQgcG9pbnRlciB3
aXRoIHRoZSBndWFyYW50ZWUgdGhhdCBubyBlYXJsaWVyCisgIC8vIG1lbW9yeSBhY2Nlc3MgKHJl
YWQgb3Igd3JpdGUpIGJ5IHRoaXMgdGhyZWFkIGNhbiBiZSByZW9yZGVyZWQKKyAgLy8gYWZ0ZXIg
dGhpcyBzdG9yZS4KKyAgdm9pZCBSZWxlYXNlX1N0b3JlKHZvaWQqIHYpOworCisgIC8vIFJlYWQg
dGhlIHN0b3JlZCBwb2ludGVyIHdpdGggbm8gb3JkZXJpbmcgZ3VhcmFudGVlcy4KKyAgdm9pZCog
Tm9CYXJyaWVyX0xvYWQoKSBjb25zdDsKKworICAvLyBTZXQgdmEgYXMgdGhlIHN0b3JlZCBwb2lu
dGVyIHdpdGggbm8gb3JkZXJpbmcgZ3VhcmFudGVlcy4KKyAgdm9pZCBOb0JhcnJpZXJfU3RvcmUo
dm9pZCogdik7Cit9OworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0gQ29tcHJlc3Npb24gLS0tLS0t
LS0tLS0tLS0tLS0tLQorCisvLyBTdG9yZSB0aGUgc25hcHB5IGNvbXByZXNzaW9uIG9mICJpbnB1
dFswLGlucHV0X2xlbmd0aC0xXSIgaW4gKm91dHB1dC4KKy8vIFJldHVybnMgZmFsc2UgaWYgc25h
cHB5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBwb3J0LgorZXh0ZXJuIGJvb2wgU25hcHB5X0Nv
bXByZXNzKGNvbnN0IGNoYXIqIGlucHV0LCBzaXplX3QgaW5wdXRfbGVuZ3RoLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBvdXRwdXQpOworCisvLyBJZiBpbnB1dFsw
LGlucHV0X2xlbmd0aC0xXSBsb29rcyBsaWtlIGEgdmFsaWQgc25hcHB5IGNvbXByZXNzZWQKKy8v
IGJ1ZmZlciwgc3RvcmUgdGhlIHNpemUgb2YgdGhlIHVuY29tcHJlc3NlZCBkYXRhIGluICpyZXN1
bHQgYW5kCisvLyByZXR1cm4gdHJ1ZS4gIEVsc2UgcmV0dXJuIGZhbHNlLgorZXh0ZXJuIGJvb2wg
U25hcHB5X0dldFVuY29tcHJlc3NlZExlbmd0aChjb25zdCBjaGFyKiBpbnB1dCwgc2l6ZV90IGxl
bmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KiBy
ZXN1bHQpOworCisvLyBBdHRlbXB0IHRvIHNuYXBweSB1bmNvbXByZXNzIGlucHV0WzAsaW5wdXRf
bGVuZ3RoLTFdIGludG8gKm91dHB1dC4KKy8vIFJldHVybnMgdHJ1ZSBpZiBzdWNjZXNzZnVsLCBm
YWxzZSBpZiB0aGUgaW5wdXQgaXMgaW52YWxpZCBsaWdodHdlaWdodAorLy8gY29tcHJlc3NlZCBk
YXRhLgorLy8KKy8vIFJFUVVJUkVTOiBhdCBsZWFzdCB0aGUgZmlyc3QgIm4iIGJ5dGVzIG9mIG91
dHB1dFtdIG11c3QgYmUgd3JpdGFibGUKKy8vIHdoZXJlICJuIiBpcyB0aGUgcmVzdWx0IG9mIGEg
c3VjY2Vzc2Z1bCBjYWxsIHRvCisvLyBTbmFwcHlfR2V0VW5jb21wcmVzc2VkTGVuZ3RoLgorZXh0
ZXJuIGJvb2wgU25hcHB5X1VuY29tcHJlc3MoY29uc3QgY2hhciogaW5wdXRfZGF0YSwgc2l6ZV90
IGlucHV0X2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIG91dHB1
dCk7CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0t
LS0tLS0KKworLy8gSWYgaGVhcCBwcm9maWxpbmcgaXMgbm90IHN1cHBvcnRlZCwgcmV0dXJucyBm
YWxzZS4KKy8vIEVsc2UgcmVwZWF0ZWRseSBjYWxscyAoKmZ1bmMpKGFyZywgZGF0YSwgbikgYW5k
IHRoZW4gcmV0dXJucyB0cnVlLgorLy8gVGhlIGNvbmNhdGVuYXRpb24gb2YgYWxsICJkYXRhWzAs
bi0xXSIgZnJhZ21lbnRzIGlzIHRoZSBoZWFwIHByb2ZpbGUuCitleHRlcm4gYm9vbCBHZXRIZWFw
UHJvZmlsZSh2b2lkICgqZnVuYykodm9pZCosIGNvbnN0IGNoYXIqLCBpbnQpLCB2b2lkKiBhcmcp
OworCit9ICAvLyBuYW1lc3BhY2UgcG9ydAorfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKKworI2Vu
ZGlmICAvLyBTVE9SQUdFX0xFVkVMREJfUE9SVF9QT1JUX0VYQU1QTEVfSF8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvcG9ydC9wb3J0X3Bvc2l4LmNjIGIvU291cmNlL1Ro
aXJkUGFydHkvbGV2ZWxkYi9wb3J0L3BvcnRfcG9zaXguY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWJhMTI3YTVi
OTFiZmEwMzYxODlhYTI5ZWUyYWViOWIwMmEwMzRkOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xldmVsZGIvcG9ydC9wb3J0X3Bvc2l4LmNjCkBAIC0wLDAgKzEsNTQgQEAK
Ky8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4g
U2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2luY2x1
ZGUgInBvcnQvcG9ydF9wb3NpeC5oIgorCisjaW5jbHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxz
dGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgInV0aWwvbG9nZ2luZy5oIgor
CituYW1lc3BhY2UgbGV2ZWxkYiB7CituYW1lc3BhY2UgcG9ydCB7CisKK3N0YXRpYyB2b2lkIFB0
aHJlYWRDYWxsKGNvbnN0IGNoYXIqIGxhYmVsLCBpbnQgcmVzdWx0KSB7CisgIGlmIChyZXN1bHQg
IT0gMCkgeworICAgIGZwcmludGYoc3RkZXJyLCAicHRocmVhZCAlczogJXNcbiIsIGxhYmVsLCBz
dHJlcnJvcihyZXN1bHQpKTsKKyAgICBhYm9ydCgpOworICB9Cit9CisKK011dGV4OjpNdXRleCgp
IHsgUHRocmVhZENhbGwoImluaXQgbXV0ZXgiLCBwdGhyZWFkX211dGV4X2luaXQoJm11XywgTlVM
TCkpOyB9CisKK011dGV4Ojp+TXV0ZXgoKSB7IFB0aHJlYWRDYWxsKCJkZXN0cm95IG11dGV4Iiwg
cHRocmVhZF9tdXRleF9kZXN0cm95KCZtdV8pKTsgfQorCit2b2lkIE11dGV4OjpMb2NrKCkgeyBQ
dGhyZWFkQ2FsbCgibG9jayIsIHB0aHJlYWRfbXV0ZXhfbG9jaygmbXVfKSk7IH0KKwordm9pZCBN
dXRleDo6VW5sb2NrKCkgeyBQdGhyZWFkQ2FsbCgidW5sb2NrIiwgcHRocmVhZF9tdXRleF91bmxv
Y2soJm11XykpOyB9CisKK0NvbmRWYXI6OkNvbmRWYXIoTXV0ZXgqIG11KQorICAgIDogbXVfKG11
KSB7CisgICAgUHRocmVhZENhbGwoImluaXQgY3YiLCBwdGhyZWFkX2NvbmRfaW5pdCgmY3ZfLCBO
VUxMKSk7Cit9CisKK0NvbmRWYXI6On5Db25kVmFyKCkgeyBQdGhyZWFkQ2FsbCgiZGVzdHJveSBj
diIsIHB0aHJlYWRfY29uZF9kZXN0cm95KCZjdl8pKTsgfQorCit2b2lkIENvbmRWYXI6OldhaXQo
KSB7CisgIFB0aHJlYWRDYWxsKCJ3YWl0IiwgcHRocmVhZF9jb25kX3dhaXQoJmN2XywgJm11Xy0+
bXVfKSk7Cit9CisKK3ZvaWQgQ29uZFZhcjo6U2lnbmFsKCkgeworICBQdGhyZWFkQ2FsbCgic2ln
bmFsIiwgcHRocmVhZF9jb25kX3NpZ25hbCgmY3ZfKSk7Cit9CisKK3ZvaWQgQ29uZFZhcjo6U2ln
bmFsQWxsKCkgeworICBQdGhyZWFkQ2FsbCgiYnJvYWRjYXN0IiwgcHRocmVhZF9jb25kX2Jyb2Fk
Y2FzdCgmY3ZfKSk7Cit9CisKK3ZvaWQgSW5pdE9uY2UoT25jZVR5cGUqIG9uY2UsIHZvaWQgKCpp
bml0aWFsaXplcikoKSkgeworICBQdGhyZWFkQ2FsbCgib25jZSIsIHB0aHJlYWRfb25jZShvbmNl
LCBpbml0aWFsaXplcikpOworfQorCit9ICAvLyBuYW1lc3BhY2UgcG9ydAorfSAgLy8gbmFtZXNw
YWNlIGxldmVsZGIKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvcG9ydC9w
b3J0X3Bvc2l4LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3BvcnQvcG9ydF9wb3NpeC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmYyYjg5YmZmYjk5YzIzMmMwMzkyMjgwNjg2OGIwY2NmNjYzYmMxMTEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3BvcnQvcG9ydF9wb3Np
eC5oCkBAIC0wLDAgKzEsMTU3IEBACisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBj
b250cmlidXRvcnMuCisvLworLy8gU2VlIHBvcnRfZXhhbXBsZS5oIGZvciBkb2N1bWVudGF0aW9u
IGZvciB0aGUgZm9sbG93aW5nIHR5cGVzL2Z1bmN0aW9ucy4KKworI2lmbmRlZiBTVE9SQUdFX0xF
VkVMREJfUE9SVF9QT1JUX1BPU0lYX0hfCisjZGVmaW5lIFNUT1JBR0VfTEVWRUxEQl9QT1JUX1BP
UlRfUE9TSVhfSF8KKworI3VuZGVmIFBMQVRGT1JNX0lTX0xJVFRMRV9FTkRJQU4KKyNpZiBkZWZp
bmVkKE9TX01BQ09TWCkKKyAgI2luY2x1ZGUgPG1hY2hpbmUvZW5kaWFuLmg+CisgICNpZiBkZWZp
bmVkKF9fREFSV0lOX0xJVFRMRV9FTkRJQU4pICYmIGRlZmluZWQoX19EQVJXSU5fQllURV9PUkRF
UikKKyAgICAjZGVmaW5lIFBMQVRGT1JNX0lTX0xJVFRMRV9FTkRJQU4gXAorICAgICAgICAoX19E
QVJXSU5fQllURV9PUkRFUiA9PSBfX0RBUldJTl9MSVRUTEVfRU5ESUFOKQorICAjZW5kaWYKKyNl
bGlmIGRlZmluZWQoT1NfU09MQVJJUykKKyAgI2luY2x1ZGUgPHN5cy9pc2FfZGVmcy5oPgorICAj
aWZkZWYgX0xJVFRMRV9FTkRJQU4KKyAgICAjZGVmaW5lIFBMQVRGT1JNX0lTX0xJVFRMRV9FTkRJ
QU4gdHJ1ZQorICAjZWxzZQorICAgICNkZWZpbmUgUExBVEZPUk1fSVNfTElUVExFX0VORElBTiBm
YWxzZQorICAjZW5kaWYKKyNlbGlmIGRlZmluZWQoT1NfRlJFRUJTRCkKKyAgI2luY2x1ZGUgPHN5
cy90eXBlcy5oPgorICAjaW5jbHVkZSA8c3lzL2VuZGlhbi5oPgorICAjZGVmaW5lIFBMQVRGT1JN
X0lTX0xJVFRMRV9FTkRJQU4gKF9CWVRFX09SREVSID09IF9MSVRUTEVfRU5ESUFOKQorI2VsaWYg
ZGVmaW5lZChPU19PUEVOQlNEKSB8fCBkZWZpbmVkKE9TX05FVEJTRCkgfHxcCisgICAgICBkZWZp
bmVkKE9TX0RSQUdPTkZMWUJTRCkKKyAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICAjaW5jbHVk
ZSA8c3lzL2VuZGlhbi5oPgorI2VsaWYgZGVmaW5lZChPU19IUFVYKQorICAjZGVmaW5lIFBMQVRG
T1JNX0lTX0xJVFRMRV9FTkRJQU4gZmFsc2UKKyNlbGlmIGRlZmluZWQoT1NfQU5EUk9JRCkKKyAg
Ly8gRHVlIHRvIGEgYnVnIGluIHRoZSBOREsgeDg2IDxzeXMvZW5kaWFuLmg+IGRlZmluaXRpb24s
CisgIC8vIF9CWVRFX09SREVSIG11c3QgYmUgdXNlZCBpbnN0ZWFkIG9mIF9fQllURV9PUkRFUiBv
biBBbmRyb2lkLgorICAvLyBTZWUgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2FuZHJvaWQvaXNz
dWVzL2RldGFpbD9pZD0zOTgyNAorICAjaW5jbHVkZSA8ZW5kaWFuLmg+CisgICNkZWZpbmUgUExB
VEZPUk1fSVNfTElUVExFX0VORElBTiAgKF9CWVRFX09SREVSID09IF9MSVRUTEVfRU5ESUFOKQor
I2Vsc2UKKyAgI2luY2x1ZGUgPGVuZGlhbi5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxwdGhyZWFk
Lmg+CisjaWZkZWYgU05BUFBZCisjaW5jbHVkZSA8c25hcHB5Lmg+CisjZW5kaWYKKyNpbmNsdWRl
IDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSAicG9ydC9hdG9taWNfcG9p
bnRlci5oIgorCisjaWZuZGVmIFBMQVRGT1JNX0lTX0xJVFRMRV9FTkRJQU4KKyNkZWZpbmUgUExB
VEZPUk1fSVNfTElUVExFX0VORElBTiAoX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTikK
KyNlbmRpZgorCisjaWYgZGVmaW5lZChPU19NQUNPU1gpIHx8IGRlZmluZWQoT1NfU09MQVJJUykg
fHwgZGVmaW5lZChPU19GUkVFQlNEKSB8fFwKKyAgICBkZWZpbmVkKE9TX05FVEJTRCkgfHwgZGVm
aW5lZChPU19PUEVOQlNEKSB8fCBkZWZpbmVkKE9TX0RSQUdPTkZMWUJTRCkgfHxcCisgICAgZGVm
aW5lZChPU19BTkRST0lEKSB8fCBkZWZpbmVkKE9TX0hQVVgpCisvLyBVc2UgZnJlYWQvZndyaXRl
L2ZmbHVzaCBvbiBwbGF0Zm9ybXMgd2l0aG91dCBfdW5sb2NrZWQgdmFyaWFudHMKKyNkZWZpbmUg
ZnJlYWRfdW5sb2NrZWQgZnJlYWQKKyNkZWZpbmUgZndyaXRlX3VubG9ja2VkIGZ3cml0ZQorI2Rl
ZmluZSBmZmx1c2hfdW5sb2NrZWQgZmZsdXNoCisjZW5kaWYKKworI2lmIGRlZmluZWQoT1NfTUFD
T1NYKSB8fCBkZWZpbmVkKE9TX0ZSRUVCU0QpIHx8XAorICAgIGRlZmluZWQoT1NfT1BFTkJTRCkg
fHwgZGVmaW5lZChPU19EUkFHT05GTFlCU0QpCisvLyBVc2UgZnN5bmMoKSBvbiBwbGF0Zm9ybXMg
d2l0aG91dCBmZGF0YXN5bmMoKQorI2RlZmluZSBmZGF0YXN5bmMgZnN5bmMKKyNlbmRpZgorCisj
aWYgZGVmaW5lZChPU19BTkRST0lEKSAmJiBfX0FORFJPSURfQVBJX18gPCA5CisvLyBmZGF0YXN5
bmMoKSB3YXMgb25seSBpbnRyb2R1Y2VkIGluIEFQSSBsZXZlbCA5IG9uIEFuZHJvaWQuIFVzZSBm
c3luYygpCisvLyB3aGVuIHRhcmdldHRpbmcgb2xkZXIgcGxhdGZvcm1zLgorI2RlZmluZSBmZGF0
YXN5bmMgZnN5bmMKKyNlbmRpZgorCituYW1lc3BhY2UgbGV2ZWxkYiB7CituYW1lc3BhY2UgcG9y
dCB7CisKK3N0YXRpYyBjb25zdCBib29sIGtMaXR0bGVFbmRpYW4gPSBQTEFURk9STV9JU19MSVRU
TEVfRU5ESUFOOworI3VuZGVmIFBMQVRGT1JNX0lTX0xJVFRMRV9FTkRJQU4KKworY2xhc3MgQ29u
ZFZhcjsKKworY2xhc3MgTXV0ZXggeworIHB1YmxpYzoKKyAgTXV0ZXgoKTsKKyAgfk11dGV4KCk7
CisKKyAgdm9pZCBMb2NrKCk7CisgIHZvaWQgVW5sb2NrKCk7CisgIHZvaWQgQXNzZXJ0SGVsZCgp
IHsgfQorCisgcHJpdmF0ZToKKyAgZnJpZW5kIGNsYXNzIENvbmRWYXI7CisgIHB0aHJlYWRfbXV0
ZXhfdCBtdV87CisKKyAgLy8gTm8gY29weWluZworICBNdXRleChjb25zdCBNdXRleCYpOworICB2
b2lkIG9wZXJhdG9yPShjb25zdCBNdXRleCYpOworfTsKKworY2xhc3MgQ29uZFZhciB7CisgcHVi
bGljOgorICBleHBsaWNpdCBDb25kVmFyKE11dGV4KiBtdSk7CisgIH5Db25kVmFyKCk7CisgIHZv
aWQgV2FpdCgpOworICB2b2lkIFNpZ25hbCgpOworICB2b2lkIFNpZ25hbEFsbCgpOworIHByaXZh
dGU6CisgIHB0aHJlYWRfY29uZF90IGN2XzsKKyAgTXV0ZXgqIG11XzsKK307CisKK3R5cGVkZWYg
cHRocmVhZF9vbmNlX3QgT25jZVR5cGU7CisjZGVmaW5lIExFVkVMREJfT05DRV9JTklUIFBUSFJF
QURfT05DRV9JTklUCitleHRlcm4gdm9pZCBJbml0T25jZShPbmNlVHlwZSogb25jZSwgdm9pZCAo
KmluaXRpYWxpemVyKSgpKTsKKworaW5saW5lIGJvb2wgU25hcHB5X0NvbXByZXNzKGNvbnN0IGNo
YXIqIGlucHV0LCBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6
c3RkOjpzdHJpbmcqIG91dHB1dCkgeworI2lmZGVmIFNOQVBQWQorICBvdXRwdXQtPnJlc2l6ZShz
bmFwcHk6Ok1heENvbXByZXNzZWRMZW5ndGgobGVuZ3RoKSk7CisgIHNpemVfdCBvdXRsZW47Cisg
IHNuYXBweTo6UmF3Q29tcHJlc3MoaW5wdXQsIGxlbmd0aCwgJigqb3V0cHV0KVswXSwgJm91dGxl
bik7CisgIG91dHB1dC0+cmVzaXplKG91dGxlbik7CisgIHJldHVybiB0cnVlOworI2VuZGlmCisK
KyAgcmV0dXJuIGZhbHNlOworfQorCitpbmxpbmUgYm9vbCBTbmFwcHlfR2V0VW5jb21wcmVzc2Vk
TGVuZ3RoKGNvbnN0IGNoYXIqIGlucHV0LCBzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QqIHJlc3VsdCkgeworI2lmZGVmIFNOQVBQ
WQorICByZXR1cm4gc25hcHB5OjpHZXRVbmNvbXByZXNzZWRMZW5ndGgoaW5wdXQsIGxlbmd0aCwg
cmVzdWx0KTsKKyNlbHNlCisgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCitpbmxpbmUgYm9v
bCBTbmFwcHlfVW5jb21wcmVzcyhjb25zdCBjaGFyKiBpbnB1dCwgc2l6ZV90IGxlbmd0aCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIG91dHB1dCkgeworI2lmZGVmIFNOQVBQ
WQorICByZXR1cm4gc25hcHB5OjpSYXdVbmNvbXByZXNzKGlucHV0LCBsZW5ndGgsIG91dHB1dCk7
CisjZWxzZQorICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworaW5saW5lIGJvb2wgR2V0SGVh
cFByb2ZpbGUodm9pZCAoKmZ1bmMpKHZvaWQqLCBjb25zdCBjaGFyKiwgaW50KSwgdm9pZCogYXJn
KSB7CisgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2UgcG9ydAorfSAvLyBuYW1l
c3BhY2UgbGV2ZWxkYgorCisjZW5kaWYgIC8vIFNUT1JBR0VfTEVWRUxEQl9QT1JUX1BPUlRfUE9T
SVhfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvcG9ydC90aHJlYWRf
YW5ub3RhdGlvbnMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvcG9ydC90aHJlYWRfYW5u
b3RhdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZjliNmE3OTI0ZDY4ZTE2OTQwMjU0ZDZkMjE4ODhlYWFl
MmEyNDBkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9wb3J0
L3RocmVhZF9hbm5vdGF0aW9ucy5oCkBAIC0wLDAgKzEsNTkgQEAKKy8vIENvcHlyaWdodCAoYykg
MjAxMiBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZp
bGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2lmbmRlZiBTVE9SQUdFX0xFVkVMREJf
UE9SVF9USFJFQURfQU5OT1RBVElPTlNfSAorCisvLyBTb21lIGVudmlyb25tZW50cyBwcm92aWRl
IGN1c3RvbSBtYWNyb3MgdG8gYWlkIGluIHN0YXRpYyB0aHJlYWQtc2FmZXR5CisvLyBhbmFseXNp
cy4gIFByb3ZpZGUgZW1wdHkgZGVmaW5pdGlvbnMgb2Ygc3VjaCBtYWNyb3MgdW5sZXNzIHRoZXkg
YXJlIGFscmVhZHkKKy8vIGRlZmluZWQuCisKKyNpZm5kZWYgRVhDTFVTSVZFX0xPQ0tTX1JFUVVJ
UkVECisjZGVmaW5lIEVYQ0xVU0lWRV9MT0NLU19SRVFVSVJFRCguLi4pCisjZW5kaWYKKworI2lm
bmRlZiBTSEFSRURfTE9DS1NfUkVRVUlSRUQKKyNkZWZpbmUgU0hBUkVEX0xPQ0tTX1JFUVVJUkVE
KC4uLikKKyNlbmRpZgorCisjaWZuZGVmIExPQ0tTX0VYQ0xVREVECisjZGVmaW5lIExPQ0tTX0VY
Q0xVREVEKC4uLikKKyNlbmRpZgorCisjaWZuZGVmIExPQ0tfUkVUVVJORUQKKyNkZWZpbmUgTE9D
S19SRVRVUk5FRCh4KQorI2VuZGlmCisKKyNpZm5kZWYgTE9DS0FCTEUKKyNkZWZpbmUgTE9DS0FC
TEUKKyNlbmRpZgorCisjaWZuZGVmIFNDT1BFRF9MT0NLQUJMRQorI2RlZmluZSBTQ09QRURfTE9D
S0FCTEUKKyNlbmRpZgorCisjaWZuZGVmIEVYQ0xVU0lWRV9MT0NLX0ZVTkNUSU9OCisjZGVmaW5l
IEVYQ0xVU0lWRV9MT0NLX0ZVTkNUSU9OKC4uLikKKyNlbmRpZgorCisjaWZuZGVmIFNIQVJFRF9M
T0NLX0ZVTkNUSU9OCisjZGVmaW5lIFNIQVJFRF9MT0NLX0ZVTkNUSU9OKC4uLikKKyNlbmRpZgor
CisjaWZuZGVmIEVYQ0xVU0lWRV9UUllMT0NLX0ZVTkNUSU9OCisjZGVmaW5lIEVYQ0xVU0lWRV9U
UllMT0NLX0ZVTkNUSU9OKC4uLikKKyNlbmRpZgorCisjaWZuZGVmIFNIQVJFRF9UUllMT0NLX0ZV
TkNUSU9OCisjZGVmaW5lIFNIQVJFRF9UUllMT0NLX0ZVTkNUSU9OKC4uLikKKyNlbmRpZgorCisj
aWZuZGVmIFVOTE9DS19GVU5DVElPTgorI2RlZmluZSBVTkxPQ0tfRlVOQ1RJT04oLi4uKQorI2Vu
ZGlmCisKKyNpZm5kZWYgTk9fVEhSRUFEX1NBRkVUWV9BTkFMWVNJUworI2RlZmluZSBOT19USFJF
QURfU0FGRVRZX0FOQUxZU0lTCisjZW5kaWYKKworI2VuZGlmICAvLyBTVE9SQUdFX0xFVkVMREJf
UE9SVF9USFJFQURfQU5OT1RBVElPTlNfSApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGV2ZWxkYi9wb3J0L3dpbi9zdGRpbnQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvcG9y
dC93aW4vc3RkaW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzllZGQwZGIxM2Y0MzZkYzU3ZGQyOGVkNDAxM2Fi
NGQ1NWEyOGEzMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIv
cG9ydC93aW4vc3RkaW50LmgKQEAgLTAsMCArMSwyNCBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDEx
IFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBm
b3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgorCisvLyBNU1ZDIGRpZG4ndCBzaGlwIHdpdGggdGhp
cyBmaWxlIHVudGlsIHRoZSAyMDEwIHZlcnNpb24uCisKKyNpZm5kZWYgU1RPUkFHRV9MRVZFTERC
X1BPUlRfV0lOX1NURElOVF9IXworI2RlZmluZSBTVE9SQUdFX0xFVkVMREJfUE9SVF9XSU5fU1RE
SU5UX0hfCisKKyNpZiAhZGVmaW5lZChfTVNDX1ZFUikKKyNlcnJvciBUaGlzIGZpbGUgc2hvdWxk
IG9ubHkgYmUgaW5jbHVkZWQgd2hlbiBjb21waWxpbmcgd2l0aCBNU1ZDLgorI2VuZGlmCisKKy8v
IERlZmluZSBDOTkgZXF1aXZhbGVudCB0eXBlcy4KK3R5cGVkZWYgc2lnbmVkIGNoYXIgICAgICAg
ICAgIGludDhfdDsKK3R5cGVkZWYgc2lnbmVkIHNob3J0ICAgICAgICAgIGludDE2X3Q7Cit0eXBl
ZGVmIHNpZ25lZCBpbnQgICAgICAgICAgICBpbnQzMl90OwordHlwZWRlZiBzaWduZWQgbG9uZyBs
b25nICAgICAgaW50NjRfdDsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciAgICAgICAgIHVpbnQ4X3Q7
Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICAgICAgICB1aW50MTZfdDsKK3R5cGVkZWYgdW5zaWdu
ZWQgaW50ICAgICAgICAgIHVpbnQzMl90OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgICAg
dWludDY0X3Q7CisKKyNlbmRpZiAgLy8gU1RPUkFHRV9MRVZFTERCX1BPUlRfV0lOX1NURElOVF9I
XwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi90YWJsZS9ibG9jay5jYyBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdGFibGUvYmxvY2suY2MKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWI4
M2MxMTEyY2MxMGMwYWQ2NWU2MjhkYjkxY2RjYzI3ZGM5ZThjNAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdGFibGUvYmxvY2suY2MKQEAgLTAsMCArMSwyNjcg
QEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKy8vCisv
LyBEZWNvZGVzIHRoZSBibG9ja3MgZ2VuZXJhdGVkIGJ5IGJsb2NrX2J1aWxkZXIuY2MuCisKKyNp
bmNsdWRlICJ0YWJsZS9ibG9jay5oIgorCisjaW5jbHVkZSA8dmVjdG9yPgorI2luY2x1ZGUgPGFs
Z29yaXRobT4KKyNpbmNsdWRlICJsZXZlbGRiL2NvbXBhcmF0b3IuaCIKKyNpbmNsdWRlICJ0YWJs
ZS9mb3JtYXQuaCIKKyNpbmNsdWRlICJ1dGlsL2NvZGluZy5oIgorI2luY2x1ZGUgInV0aWwvbG9n
Z2luZy5oIgorCituYW1lc3BhY2UgbGV2ZWxkYiB7CisKK2lubGluZSB1aW50MzJfdCBCbG9jazo6
TnVtUmVzdGFydHMoKSBjb25zdCB7CisgIGFzc2VydChzaXplXyA+PSAyKnNpemVvZih1aW50MzJf
dCkpOworICByZXR1cm4gRGVjb2RlRml4ZWQzMihkYXRhXyArIHNpemVfIC0gc2l6ZW9mKHVpbnQz
Ml90KSk7Cit9CisKK0Jsb2NrOjpCbG9jayhjb25zdCBCbG9ja0NvbnRlbnRzJiBjb250ZW50cykK
KyAgICA6IGRhdGFfKGNvbnRlbnRzLmRhdGEuZGF0YSgpKSwKKyAgICAgIHNpemVfKGNvbnRlbnRz
LmRhdGEuc2l6ZSgpKSwKKyAgICAgIG93bmVkXyhjb250ZW50cy5oZWFwX2FsbG9jYXRlZCkgewor
ICBpZiAoc2l6ZV8gPCBzaXplb2YodWludDMyX3QpKSB7CisgICAgc2l6ZV8gPSAwOyAgLy8gRXJy
b3IgbWFya2VyCisgIH0gZWxzZSB7CisgICAgcmVzdGFydF9vZmZzZXRfID0gc2l6ZV8gLSAoMSAr
IE51bVJlc3RhcnRzKCkpICogc2l6ZW9mKHVpbnQzMl90KTsKKyAgICBpZiAocmVzdGFydF9vZmZz
ZXRfID4gc2l6ZV8gLSBzaXplb2YodWludDMyX3QpKSB7CisgICAgICAvLyBUaGUgc2l6ZSBpcyB0
b28gc21hbGwgZm9yIE51bVJlc3RhcnRzKCkgYW5kIHRoZXJlZm9yZQorICAgICAgLy8gcmVzdGFy
dF9vZmZzZXRfIHdyYXBwZWQgYXJvdW5kLgorICAgICAgc2l6ZV8gPSAwOworICAgIH0KKyAgfQor
fQorCitCbG9jazo6fkJsb2NrKCkgeworICBpZiAob3duZWRfKSB7CisgICAgZGVsZXRlW10gZGF0
YV87CisgIH0KK30KKworLy8gSGVscGVyIHJvdXRpbmU6IGRlY29kZSB0aGUgbmV4dCBibG9jayBl
bnRyeSBzdGFydGluZyBhdCAicCIsCisvLyBzdG9yaW5nIHRoZSBudW1iZXIgb2Ygc2hhcmVkIGtl
eSBieXRlcywgbm9uX3NoYXJlZCBrZXkgYnl0ZXMsCisvLyBhbmQgdGhlIGxlbmd0aCBvZiB0aGUg
dmFsdWUgaW4gIipzaGFyZWQiLCAiKm5vbl9zaGFyZWQiLCBhbmQKKy8vICIqdmFsdWVfbGVuZ3Ro
IiwgcmVzcGVjdGl2ZWx5LiAgV2lsbCBub3QgZGVyZWZlbmNlIHBhc3QgImxpbWl0Ii4KKy8vCisv
LyBJZiBhbnkgZXJyb3JzIGFyZSBkZXRlY3RlZCwgcmV0dXJucyBOVUxMLiAgT3RoZXJ3aXNlLCBy
ZXR1cm5zIGEKKy8vIHBvaW50ZXIgdG8gdGhlIGtleSBkZWx0YSAoanVzdCBwYXN0IHRoZSB0aHJl
ZSBkZWNvZGVkIHZhbHVlcykuCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIERlY29kZUVudHJ5
KGNvbnN0IGNoYXIqIHAsIGNvbnN0IGNoYXIqIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1aW50MzJfdCogc2hhcmVkLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1aW50MzJfdCogbm9uX3NoYXJlZCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QqIHZhbHVlX2xlbmd0aCkgeworICBpZiAobGlt
aXQgLSBwIDwgMykgcmV0dXJuIE5VTEw7CisgICpzaGFyZWQgPSByZWludGVycHJldF9jYXN0PGNv
bnN0IHVuc2lnbmVkIGNoYXIqPihwKVswXTsKKyAgKm5vbl9zaGFyZWQgPSByZWludGVycHJldF9j
YXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihwKVsxXTsKKyAgKnZhbHVlX2xlbmd0aCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KHApWzJdOworICBpZiAoKCpzaGFyZWQg
fCAqbm9uX3NoYXJlZCB8ICp2YWx1ZV9sZW5ndGgpIDwgMTI4KSB7CisgICAgLy8gRmFzdCBwYXRo
OiBhbGwgdGhyZWUgdmFsdWVzIGFyZSBlbmNvZGVkIGluIG9uZSBieXRlIGVhY2gKKyAgICBwICs9
IDM7CisgIH0gZWxzZSB7CisgICAgaWYgKChwID0gR2V0VmFyaW50MzJQdHIocCwgbGltaXQsIHNo
YXJlZCkpID09IE5VTEwpIHJldHVybiBOVUxMOworICAgIGlmICgocCA9IEdldFZhcmludDMyUHRy
KHAsIGxpbWl0LCBub25fc2hhcmVkKSkgPT0gTlVMTCkgcmV0dXJuIE5VTEw7CisgICAgaWYgKChw
ID0gR2V0VmFyaW50MzJQdHIocCwgbGltaXQsIHZhbHVlX2xlbmd0aCkpID09IE5VTEwpIHJldHVy
biBOVUxMOworICB9CisKKyAgaWYgKHN0YXRpY19jYXN0PHVpbnQzMl90PihsaW1pdCAtIHApIDwg
KCpub25fc2hhcmVkICsgKnZhbHVlX2xlbmd0aCkpIHsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQor
ICByZXR1cm4gcDsKK30KKworY2xhc3MgQmxvY2s6Okl0ZXIgOiBwdWJsaWMgSXRlcmF0b3Igewor
IHByaXZhdGU6CisgIGNvbnN0IENvbXBhcmF0b3IqIGNvbnN0IGNvbXBhcmF0b3JfOworICBjb25z
dCBjaGFyKiBjb25zdCBkYXRhXzsgICAgICAvLyB1bmRlcmx5aW5nIGJsb2NrIGNvbnRlbnRzCisg
IHVpbnQzMl90IGNvbnN0IHJlc3RhcnRzXzsgICAgIC8vIE9mZnNldCBvZiByZXN0YXJ0IGFycmF5
IChsaXN0IG9mIGZpeGVkMzIpCisgIHVpbnQzMl90IGNvbnN0IG51bV9yZXN0YXJ0c187IC8vIE51
bWJlciBvZiB1aW50MzJfdCBlbnRyaWVzIGluIHJlc3RhcnQgYXJyYXkKKworICAvLyBjdXJyZW50
XyBpcyBvZmZzZXQgaW4gZGF0YV8gb2YgY3VycmVudCBlbnRyeS4gID49IHJlc3RhcnRzXyBpZiAh
VmFsaWQKKyAgdWludDMyX3QgY3VycmVudF87CisgIHVpbnQzMl90IHJlc3RhcnRfaW5kZXhfOyAg
Ly8gSW5kZXggb2YgcmVzdGFydCBibG9jayBpbiB3aGljaCBjdXJyZW50XyBmYWxscworICBzdGQ6
OnN0cmluZyBrZXlfOworICBTbGljZSB2YWx1ZV87CisgIFN0YXR1cyBzdGF0dXNfOworCisgIGlu
bGluZSBpbnQgQ29tcGFyZShjb25zdCBTbGljZSYgYSwgY29uc3QgU2xpY2UmIGIpIGNvbnN0IHsK
KyAgICByZXR1cm4gY29tcGFyYXRvcl8tPkNvbXBhcmUoYSwgYik7CisgIH0KKworICAvLyBSZXR1
cm4gdGhlIG9mZnNldCBpbiBkYXRhXyBqdXN0IHBhc3QgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBl
bnRyeS4KKyAgaW5saW5lIHVpbnQzMl90IE5leHRFbnRyeU9mZnNldCgpIGNvbnN0IHsKKyAgICBy
ZXR1cm4gKHZhbHVlXy5kYXRhKCkgKyB2YWx1ZV8uc2l6ZSgpKSAtIGRhdGFfOworICB9CisKKyAg
dWludDMyX3QgR2V0UmVzdGFydFBvaW50KHVpbnQzMl90IGluZGV4KSB7CisgICAgYXNzZXJ0KGlu
ZGV4IDwgbnVtX3Jlc3RhcnRzXyk7CisgICAgcmV0dXJuIERlY29kZUZpeGVkMzIoZGF0YV8gKyBy
ZXN0YXJ0c18gKyBpbmRleCAqIHNpemVvZih1aW50MzJfdCkpOworICB9CisKKyAgdm9pZCBTZWVr
VG9SZXN0YXJ0UG9pbnQodWludDMyX3QgaW5kZXgpIHsKKyAgICBrZXlfLmNsZWFyKCk7CisgICAg
cmVzdGFydF9pbmRleF8gPSBpbmRleDsKKyAgICAvLyBjdXJyZW50XyB3aWxsIGJlIGZpeGVkIGJ5
IFBhcnNlTmV4dEtleSgpOworCisgICAgLy8gUGFyc2VOZXh0S2V5KCkgc3RhcnRzIGF0IHRoZSBl
bmQgb2YgdmFsdWVfLCBzbyBzZXQgdmFsdWVfIGFjY29yZGluZ2x5CisgICAgdWludDMyX3Qgb2Zm
c2V0ID0gR2V0UmVzdGFydFBvaW50KGluZGV4KTsKKyAgICB2YWx1ZV8gPSBTbGljZShkYXRhXyAr
IG9mZnNldCwgMCk7CisgIH0KKworIHB1YmxpYzoKKyAgSXRlcihjb25zdCBDb21wYXJhdG9yKiBj
b21wYXJhdG9yLAorICAgICAgIGNvbnN0IGNoYXIqIGRhdGEsCisgICAgICAgdWludDMyX3QgcmVz
dGFydHMsCisgICAgICAgdWludDMyX3QgbnVtX3Jlc3RhcnRzKQorICAgICAgOiBjb21wYXJhdG9y
Xyhjb21wYXJhdG9yKSwKKyAgICAgICAgZGF0YV8oZGF0YSksCisgICAgICAgIHJlc3RhcnRzXyhy
ZXN0YXJ0cyksCisgICAgICAgIG51bV9yZXN0YXJ0c18obnVtX3Jlc3RhcnRzKSwKKyAgICAgICAg
Y3VycmVudF8ocmVzdGFydHNfKSwKKyAgICAgICAgcmVzdGFydF9pbmRleF8obnVtX3Jlc3RhcnRz
XykgeworICAgIGFzc2VydChudW1fcmVzdGFydHNfID4gMCk7CisgIH0KKworICB2aXJ0dWFsIGJv
b2wgVmFsaWQoKSBjb25zdCB7IHJldHVybiBjdXJyZW50XyA8IHJlc3RhcnRzXzsgfQorICB2aXJ0
dWFsIFN0YXR1cyBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBzdGF0dXNfOyB9CisgIHZpcnR1YWwg
U2xpY2Uga2V5KCkgY29uc3QgeworICAgIGFzc2VydChWYWxpZCgpKTsKKyAgICByZXR1cm4ga2V5
XzsKKyAgfQorICB2aXJ0dWFsIFNsaWNlIHZhbHVlKCkgY29uc3QgeworICAgIGFzc2VydChWYWxp
ZCgpKTsKKyAgICByZXR1cm4gdmFsdWVfOworICB9CisKKyAgdmlydHVhbCB2b2lkIE5leHQoKSB7
CisgICAgYXNzZXJ0KFZhbGlkKCkpOworICAgIFBhcnNlTmV4dEtleSgpOworICB9CisKKyAgdmly
dHVhbCB2b2lkIFByZXYoKSB7CisgICAgYXNzZXJ0KFZhbGlkKCkpOworCisgICAgLy8gU2NhbiBi
YWNrd2FyZHMgdG8gYSByZXN0YXJ0IHBvaW50IGJlZm9yZSBjdXJyZW50XworICAgIGNvbnN0IHVp
bnQzMl90IG9yaWdpbmFsID0gY3VycmVudF87CisgICAgd2hpbGUgKEdldFJlc3RhcnRQb2ludChy
ZXN0YXJ0X2luZGV4XykgPj0gb3JpZ2luYWwpIHsKKyAgICAgIGlmIChyZXN0YXJ0X2luZGV4XyA9
PSAwKSB7CisgICAgICAgIC8vIE5vIG1vcmUgZW50cmllcworICAgICAgICBjdXJyZW50XyA9IHJl
c3RhcnRzXzsKKyAgICAgICAgcmVzdGFydF9pbmRleF8gPSBudW1fcmVzdGFydHNfOworICAgICAg
ICByZXR1cm47CisgICAgICB9CisgICAgICByZXN0YXJ0X2luZGV4Xy0tOworICAgIH0KKworICAg
IFNlZWtUb1Jlc3RhcnRQb2ludChyZXN0YXJ0X2luZGV4Xyk7CisgICAgZG8geworICAgICAgLy8g
TG9vcCB1bnRpbCBlbmQgb2YgY3VycmVudCBlbnRyeSBoaXRzIHRoZSBzdGFydCBvZiBvcmlnaW5h
bCBlbnRyeQorICAgIH0gd2hpbGUgKFBhcnNlTmV4dEtleSgpICYmIE5leHRFbnRyeU9mZnNldCgp
IDwgb3JpZ2luYWwpOworICB9CisKKyAgdmlydHVhbCB2b2lkIFNlZWsoY29uc3QgU2xpY2UmIHRh
cmdldCkgeworICAgIC8vIEJpbmFyeSBzZWFyY2ggaW4gcmVzdGFydCBhcnJheSB0byBmaW5kIHRo
ZSBsYXN0IHJlc3RhcnQgcG9pbnQKKyAgICAvLyB3aXRoIGEga2V5IDwgdGFyZ2V0CisgICAgdWlu
dDMyX3QgbGVmdCA9IDA7CisgICAgdWludDMyX3QgcmlnaHQgPSBudW1fcmVzdGFydHNfIC0gMTsK
KyAgICB3aGlsZSAobGVmdCA8IHJpZ2h0KSB7CisgICAgICB1aW50MzJfdCBtaWQgPSAobGVmdCAr
IHJpZ2h0ICsgMSkgLyAyOworICAgICAgdWludDMyX3QgcmVnaW9uX29mZnNldCA9IEdldFJlc3Rh
cnRQb2ludChtaWQpOworICAgICAgdWludDMyX3Qgc2hhcmVkLCBub25fc2hhcmVkLCB2YWx1ZV9s
ZW5ndGg7CisgICAgICBjb25zdCBjaGFyKiBrZXlfcHRyID0gRGVjb2RlRW50cnkoZGF0YV8gKyBy
ZWdpb25fb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGFfICsgcmVzdGFydHNfLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZzaGFyZWQsICZub25fc2hhcmVkLCAmdmFsdWVfbGVuZ3RoKTsKKyAgICAgIGlmIChrZXlfcHRy
ID09IE5VTEwgfHwgKHNoYXJlZCAhPSAwKSkgeworICAgICAgICBDb3JydXB0aW9uRXJyb3IoKTsK
KyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgU2xpY2UgbWlkX2tleShrZXlfcHRyLCBu
b25fc2hhcmVkKTsKKyAgICAgIGlmIChDb21wYXJlKG1pZF9rZXksIHRhcmdldCkgPCAwKSB7Cisg
ICAgICAgIC8vIEtleSBhdCAibWlkIiBpcyBzbWFsbGVyIHRoYW4gInRhcmdldCIuICBUaGVyZWZv
cmUgYWxsCisgICAgICAgIC8vIGJsb2NrcyBiZWZvcmUgIm1pZCIgYXJlIHVuaW50ZXJlc3Rpbmcu
CisgICAgICAgIGxlZnQgPSBtaWQ7CisgICAgICB9IGVsc2UgeworICAgICAgICAvLyBLZXkgYXQg
Im1pZCIgaXMgPj0gInRhcmdldCIuICBUaGVyZWZvcmUgYWxsIGJsb2NrcyBhdCBvcgorICAgICAg
ICAvLyBhZnRlciAibWlkIiBhcmUgdW5pbnRlcmVzdGluZy4KKyAgICAgICAgcmlnaHQgPSBtaWQg
LSAxOworICAgICAgfQorICAgIH0KKworICAgIC8vIExpbmVhciBzZWFyY2ggKHdpdGhpbiByZXN0
YXJ0IGJsb2NrKSBmb3IgZmlyc3Qga2V5ID49IHRhcmdldAorICAgIFNlZWtUb1Jlc3RhcnRQb2lu
dChsZWZ0KTsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgaWYgKCFQYXJzZU5leHRLZXkoKSkg
eworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgICBpZiAoQ29tcGFyZShrZXlfLCB0YXJn
ZXQpID49IDApIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHZp
cnR1YWwgdm9pZCBTZWVrVG9GaXJzdCgpIHsKKyAgICBTZWVrVG9SZXN0YXJ0UG9pbnQoMCk7Cisg
ICAgUGFyc2VOZXh0S2V5KCk7CisgIH0KKworICB2aXJ0dWFsIHZvaWQgU2Vla1RvTGFzdCgpIHsK
KyAgICBTZWVrVG9SZXN0YXJ0UG9pbnQobnVtX3Jlc3RhcnRzXyAtIDEpOworICAgIHdoaWxlIChQ
YXJzZU5leHRLZXkoKSAmJiBOZXh0RW50cnlPZmZzZXQoKSA8IHJlc3RhcnRzXykgeworICAgICAg
Ly8gS2VlcCBza2lwcGluZworICAgIH0KKyAgfQorCisgcHJpdmF0ZToKKyAgdm9pZCBDb3JydXB0
aW9uRXJyb3IoKSB7CisgICAgY3VycmVudF8gPSByZXN0YXJ0c187CisgICAgcmVzdGFydF9pbmRl
eF8gPSBudW1fcmVzdGFydHNfOworICAgIHN0YXR1c18gPSBTdGF0dXM6OkNvcnJ1cHRpb24oImJh
ZCBlbnRyeSBpbiBibG9jayIpOworICAgIGtleV8uY2xlYXIoKTsKKyAgICB2YWx1ZV8uY2xlYXIo
KTsKKyAgfQorCisgIGJvb2wgUGFyc2VOZXh0S2V5KCkgeworICAgIGN1cnJlbnRfID0gTmV4dEVu
dHJ5T2Zmc2V0KCk7CisgICAgY29uc3QgY2hhciogcCA9IGRhdGFfICsgY3VycmVudF87CisgICAg
Y29uc3QgY2hhciogbGltaXQgPSBkYXRhXyArIHJlc3RhcnRzXzsgIC8vIFJlc3RhcnRzIGNvbWUg
cmlnaHQgYWZ0ZXIgZGF0YQorICAgIGlmIChwID49IGxpbWl0KSB7CisgICAgICAvLyBObyBtb3Jl
IGVudHJpZXMgdG8gcmV0dXJuLiAgTWFyayBhcyBpbnZhbGlkLgorICAgICAgY3VycmVudF8gPSBy
ZXN0YXJ0c187CisgICAgICByZXN0YXJ0X2luZGV4XyA9IG51bV9yZXN0YXJ0c187CisgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gRGVjb2RlIG5leHQgZW50cnkKKyAgICB1aW50
MzJfdCBzaGFyZWQsIG5vbl9zaGFyZWQsIHZhbHVlX2xlbmd0aDsKKyAgICBwID0gRGVjb2RlRW50
cnkocCwgbGltaXQsICZzaGFyZWQsICZub25fc2hhcmVkLCAmdmFsdWVfbGVuZ3RoKTsKKyAgICBp
ZiAocCA9PSBOVUxMIHx8IGtleV8uc2l6ZSgpIDwgc2hhcmVkKSB7CisgICAgICBDb3JydXB0aW9u
RXJyb3IoKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGVsc2UgeworICAgICAga2V5Xy5y
ZXNpemUoc2hhcmVkKTsKKyAgICAgIGtleV8uYXBwZW5kKHAsIG5vbl9zaGFyZWQpOworICAgICAg
dmFsdWVfID0gU2xpY2UocCArIG5vbl9zaGFyZWQsIHZhbHVlX2xlbmd0aCk7CisgICAgICB3aGls
ZSAocmVzdGFydF9pbmRleF8gKyAxIDwgbnVtX3Jlc3RhcnRzXyAmJgorICAgICAgICAgICAgIEdl
dFJlc3RhcnRQb2ludChyZXN0YXJ0X2luZGV4XyArIDEpIDwgY3VycmVudF8pIHsKKyAgICAgICAg
KytyZXN0YXJ0X2luZGV4XzsKKyAgICAgIH0KKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
fQorfTsKKworSXRlcmF0b3IqIEJsb2NrOjpOZXdJdGVyYXRvcihjb25zdCBDb21wYXJhdG9yKiBj
bXApIHsKKyAgaWYgKHNpemVfIDwgMipzaXplb2YodWludDMyX3QpKSB7CisgICAgcmV0dXJuIE5l
d0Vycm9ySXRlcmF0b3IoU3RhdHVzOjpDb3JydXB0aW9uKCJiYWQgYmxvY2sgY29udGVudHMiKSk7
CisgIH0KKyAgY29uc3QgdWludDMyX3QgbnVtX3Jlc3RhcnRzID0gTnVtUmVzdGFydHMoKTsKKyAg
aWYgKG51bV9yZXN0YXJ0cyA9PSAwKSB7CisgICAgcmV0dXJuIE5ld0VtcHR5SXRlcmF0b3IoKTsK
KyAgfSBlbHNlIHsKKyAgICByZXR1cm4gbmV3IEl0ZXIoY21wLCBkYXRhXywgcmVzdGFydF9vZmZz
ZXRfLCBudW1fcmVzdGFydHMpOworICB9Cit9CisKK30gIC8vIG5hbWVzcGFjZSBsZXZlbGRiCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxlL2Jsb2NrLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxlL2Jsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjQ5M2ViOWY5
ZmQ5ZGE0MWFhZmNhYzgwMTgwYzNmODMxOTI4YTMyZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xldmVsZGIvdGFibGUvYmxvY2suaApAQCAtMCwwICsxLDQ0IEBACisvLyBD
b3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0
aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCisKKyNpZm5kZWYgU1RP
UkFHRV9MRVZFTERCX1RBQkxFX0JMT0NLX0hfCisjZGVmaW5lIFNUT1JBR0VfTEVWRUxEQl9UQUJM
RV9CTE9DS19IXworCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+Cisj
aW5jbHVkZSAibGV2ZWxkYi9pdGVyYXRvci5oIgorCituYW1lc3BhY2UgbGV2ZWxkYiB7CisKK3N0
cnVjdCBCbG9ja0NvbnRlbnRzOworY2xhc3MgQ29tcGFyYXRvcjsKKworY2xhc3MgQmxvY2sgewor
IHB1YmxpYzoKKyAgLy8gSW5pdGlhbGl6ZSB0aGUgYmxvY2sgd2l0aCB0aGUgc3BlY2lmaWVkIGNv
bnRlbnRzLgorICBleHBsaWNpdCBCbG9jayhjb25zdCBCbG9ja0NvbnRlbnRzJiBjb250ZW50cyk7
CisKKyAgfkJsb2NrKCk7CisKKyAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBzaXplXzsg
fQorICBJdGVyYXRvciogTmV3SXRlcmF0b3IoY29uc3QgQ29tcGFyYXRvciogY29tcGFyYXRvcik7
CisKKyBwcml2YXRlOgorICB1aW50MzJfdCBOdW1SZXN0YXJ0cygpIGNvbnN0OworCisgIGNvbnN0
IGNoYXIqIGRhdGFfOworICBzaXplX3Qgc2l6ZV87CisgIHVpbnQzMl90IHJlc3RhcnRfb2Zmc2V0
XzsgICAgIC8vIE9mZnNldCBpbiBkYXRhXyBvZiByZXN0YXJ0IGFycmF5CisgIGJvb2wgb3duZWRf
OyAgICAgICAgICAgICAgICAgIC8vIEJsb2NrIG93bnMgZGF0YV9bXQorCisgIC8vIE5vIGNvcHlp
bmcgYWxsb3dlZAorICBCbG9jayhjb25zdCBCbG9jayYpOworICB2b2lkIG9wZXJhdG9yPShjb25z
dCBCbG9jayYpOworCisgIGNsYXNzIEl0ZXI7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgbGV2ZWxk
YgorCisjZW5kaWYgIC8vIFNUT1JBR0VfTEVWRUxEQl9UQUJMRV9CTE9DS19IXwpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi90YWJsZS9ibG9ja19idWlsZGVyLmNjIGIvU291
cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi90YWJsZS9ibG9ja19idWlsZGVyLmNjCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmRiNjYwY2QwN2NmNTBhZDFiNTQzMTBjMjFiMjIxMDhhYjY5OTQ4MDIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxlL2Jsb2NrX2J1aWxkZXIuY2MKQEAg
LTAsMCArMSwxMDkgQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1
dG9ycy4KKy8vCisvLyBCbG9ja0J1aWxkZXIgZ2VuZXJhdGVzIGJsb2NrcyB3aGVyZSBrZXlzIGFy
ZSBwcmVmaXgtY29tcHJlc3NlZDoKKy8vCisvLyBXaGVuIHdlIHN0b3JlIGEga2V5LCB3ZSBkcm9w
IHRoZSBwcmVmaXggc2hhcmVkIHdpdGggdGhlIHByZXZpb3VzCisvLyBzdHJpbmcuICBUaGlzIGhl
bHBzIHJlZHVjZSB0aGUgc3BhY2UgcmVxdWlyZW1lbnQgc2lnbmlmaWNhbnRseS4KKy8vIEZ1cnRo
ZXJtb3JlLCBvbmNlIGV2ZXJ5IEsga2V5cywgd2UgZG8gbm90IGFwcGx5IHRoZSBwcmVmaXgKKy8v
IGNvbXByZXNzaW9uIGFuZCBzdG9yZSB0aGUgZW50aXJlIGtleS4gIFdlIGNhbGwgdGhpcyBhICJy
ZXN0YXJ0CisvLyBwb2ludCIuICBUaGUgdGFpbCBlbmQgb2YgdGhlIGJsb2NrIHN0b3JlcyB0aGUg
b2Zmc2V0cyBvZiBhbGwgb2YgdGhlCisvLyByZXN0YXJ0IHBvaW50cywgYW5kIGNhbiBiZSB1c2Vk
IHRvIGRvIGEgYmluYXJ5IHNlYXJjaCB3aGVuIGxvb2tpbmcKKy8vIGZvciBhIHBhcnRpY3VsYXIg
a2V5LiAgVmFsdWVzIGFyZSBzdG9yZWQgYXMtaXMgKHdpdGhvdXQgY29tcHJlc3Npb24pCisvLyBp
bW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGNvcnJlc3BvbmRpbmcga2V5LgorLy8KKy8vIEFuIGVu
dHJ5IGZvciBhIHBhcnRpY3VsYXIga2V5LXZhbHVlIHBhaXIgaGFzIHRoZSBmb3JtOgorLy8gICAg
IHNoYXJlZF9ieXRlczogdmFyaW50MzIKKy8vICAgICB1bnNoYXJlZF9ieXRlczogdmFyaW50MzIK
Ky8vICAgICB2YWx1ZV9sZW5ndGg6IHZhcmludDMyCisvLyAgICAga2V5X2RlbHRhOiBjaGFyW3Vu
c2hhcmVkX2J5dGVzXQorLy8gICAgIHZhbHVlOiBjaGFyW3ZhbHVlX2xlbmd0aF0KKy8vIHNoYXJl
ZF9ieXRlcyA9PSAwIGZvciByZXN0YXJ0IHBvaW50cy4KKy8vCisvLyBUaGUgdHJhaWxlciBvZiB0
aGUgYmxvY2sgaGFzIHRoZSBmb3JtOgorLy8gICAgIHJlc3RhcnRzOiB1aW50MzJbbnVtX3Jlc3Rh
cnRzXQorLy8gICAgIG51bV9yZXN0YXJ0czogdWludDMyCisvLyByZXN0YXJ0c1tpXSBjb250YWlu
cyB0aGUgb2Zmc2V0IHdpdGhpbiB0aGUgYmxvY2sgb2YgdGhlIGl0aCByZXN0YXJ0IHBvaW50Lgor
CisjaW5jbHVkZSAidGFibGUvYmxvY2tfYnVpbGRlci5oIgorCisjaW5jbHVkZSA8YWxnb3JpdGht
PgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgImxldmVsZGIvY29tcGFyYXRvci5oIgor
I2luY2x1ZGUgImxldmVsZGIvdGFibGVfYnVpbGRlci5oIgorI2luY2x1ZGUgInV0aWwvY29kaW5n
LmgiCisKK25hbWVzcGFjZSBsZXZlbGRiIHsKKworQmxvY2tCdWlsZGVyOjpCbG9ja0J1aWxkZXIo
Y29uc3QgT3B0aW9ucyogb3B0aW9ucykKKyAgICA6IG9wdGlvbnNfKG9wdGlvbnMpLAorICAgICAg
cmVzdGFydHNfKCksCisgICAgICBjb3VudGVyXygwKSwKKyAgICAgIGZpbmlzaGVkXyhmYWxzZSkg
eworICBhc3NlcnQob3B0aW9ucy0+YmxvY2tfcmVzdGFydF9pbnRlcnZhbCA+PSAxKTsKKyAgcmVz
dGFydHNfLnB1c2hfYmFjaygwKTsgICAgICAgLy8gRmlyc3QgcmVzdGFydCBwb2ludCBpcyBhdCBv
ZmZzZXQgMAorfQorCit2b2lkIEJsb2NrQnVpbGRlcjo6UmVzZXQoKSB7CisgIGJ1ZmZlcl8uY2xl
YXIoKTsKKyAgcmVzdGFydHNfLmNsZWFyKCk7CisgIHJlc3RhcnRzXy5wdXNoX2JhY2soMCk7ICAg
ICAgIC8vIEZpcnN0IHJlc3RhcnQgcG9pbnQgaXMgYXQgb2Zmc2V0IDAKKyAgY291bnRlcl8gPSAw
OworICBmaW5pc2hlZF8gPSBmYWxzZTsKKyAgbGFzdF9rZXlfLmNsZWFyKCk7Cit9CisKK3NpemVf
dCBCbG9ja0J1aWxkZXI6OkN1cnJlbnRTaXplRXN0aW1hdGUoKSBjb25zdCB7CisgIHJldHVybiAo
YnVmZmVyXy5zaXplKCkgKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJhdyBkYXRhIGJ1ZmZl
cgorICAgICAgICAgIHJlc3RhcnRzXy5zaXplKCkgKiBzaXplb2YodWludDMyX3QpICsgICAvLyBS
ZXN0YXJ0IGFycmF5CisgICAgICAgICAgc2l6ZW9mKHVpbnQzMl90KSk7ICAgICAgICAgICAgICAg
ICAgICAgIC8vIFJlc3RhcnQgYXJyYXkgbGVuZ3RoCit9CisKK1NsaWNlIEJsb2NrQnVpbGRlcjo6
RmluaXNoKCkgeworICAvLyBBcHBlbmQgcmVzdGFydCBhcnJheQorICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHJlc3RhcnRzXy5zaXplKCk7IGkrKykgeworICAgIFB1dEZpeGVkMzIoJmJ1ZmZlcl8s
IHJlc3RhcnRzX1tpXSk7CisgIH0KKyAgUHV0Rml4ZWQzMigmYnVmZmVyXywgcmVzdGFydHNfLnNp
emUoKSk7CisgIGZpbmlzaGVkXyA9IHRydWU7CisgIHJldHVybiBTbGljZShidWZmZXJfKTsKK30K
Kwordm9pZCBCbG9ja0J1aWxkZXI6OkFkZChjb25zdCBTbGljZSYga2V5LCBjb25zdCBTbGljZSYg
dmFsdWUpIHsKKyAgU2xpY2UgbGFzdF9rZXlfcGllY2UobGFzdF9rZXlfKTsKKyAgYXNzZXJ0KCFm
aW5pc2hlZF8pOworICBhc3NlcnQoY291bnRlcl8gPD0gb3B0aW9uc18tPmJsb2NrX3Jlc3RhcnRf
aW50ZXJ2YWwpOworICBhc3NlcnQoYnVmZmVyXy5lbXB0eSgpIC8vIE5vIHZhbHVlcyB5ZXQ/Cisg
ICAgICAgICB8fCBvcHRpb25zXy0+Y29tcGFyYXRvci0+Q29tcGFyZShrZXksIGxhc3Rfa2V5X3Bp
ZWNlKSA+IDApOworICBzaXplX3Qgc2hhcmVkID0gMDsKKyAgaWYgKGNvdW50ZXJfIDwgb3B0aW9u
c18tPmJsb2NrX3Jlc3RhcnRfaW50ZXJ2YWwpIHsKKyAgICAvLyBTZWUgaG93IG11Y2ggc2hhcmlu
ZyB0byBkbyB3aXRoIHByZXZpb3VzIHN0cmluZworICAgIGNvbnN0IHNpemVfdCBtaW5fbGVuZ3Ro
ID0gc3RkOjptaW4obGFzdF9rZXlfcGllY2Uuc2l6ZSgpLCBrZXkuc2l6ZSgpKTsKKyAgICB3aGls
ZSAoKHNoYXJlZCA8IG1pbl9sZW5ndGgpICYmIChsYXN0X2tleV9waWVjZVtzaGFyZWRdID09IGtl
eVtzaGFyZWRdKSkgeworICAgICAgc2hhcmVkKys7CisgICAgfQorICB9IGVsc2UgeworICAgIC8v
IFJlc3RhcnQgY29tcHJlc3Npb24KKyAgICByZXN0YXJ0c18ucHVzaF9iYWNrKGJ1ZmZlcl8uc2l6
ZSgpKTsKKyAgICBjb3VudGVyXyA9IDA7CisgIH0KKyAgY29uc3Qgc2l6ZV90IG5vbl9zaGFyZWQg
PSBrZXkuc2l6ZSgpIC0gc2hhcmVkOworCisgIC8vIEFkZCAiPHNoYXJlZD48bm9uX3NoYXJlZD48
dmFsdWVfc2l6ZT4iIHRvIGJ1ZmZlcl8KKyAgUHV0VmFyaW50MzIoJmJ1ZmZlcl8sIHNoYXJlZCk7
CisgIFB1dFZhcmludDMyKCZidWZmZXJfLCBub25fc2hhcmVkKTsKKyAgUHV0VmFyaW50MzIoJmJ1
ZmZlcl8sIHZhbHVlLnNpemUoKSk7CisKKyAgLy8gQWRkIHN0cmluZyBkZWx0YSB0byBidWZmZXJf
IGZvbGxvd2VkIGJ5IHZhbHVlCisgIGJ1ZmZlcl8uYXBwZW5kKGtleS5kYXRhKCkgKyBzaGFyZWQs
IG5vbl9zaGFyZWQpOworICBidWZmZXJfLmFwcGVuZCh2YWx1ZS5kYXRhKCksIHZhbHVlLnNpemUo
KSk7CisKKyAgLy8gVXBkYXRlIHN0YXRlCisgIGxhc3Rfa2V5Xy5yZXNpemUoc2hhcmVkKTsKKyAg
bGFzdF9rZXlfLmFwcGVuZChrZXkuZGF0YSgpICsgc2hhcmVkLCBub25fc2hhcmVkKTsKKyAgYXNz
ZXJ0KFNsaWNlKGxhc3Rfa2V5XykgPT0ga2V5KTsKKyAgY291bnRlcl8rKzsKK30KKworfSAgLy8g
bmFtZXNwYWNlIGxldmVsZGIKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIv
dGFibGUvYmxvY2tfYnVpbGRlci5oIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi90YWJsZS9i
bG9ja19idWlsZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWI1NDViZDFhZmI0ZjRlNjVjMzZkODQzMGRkZTA5
ZTBmNTQzMjU5ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIv
dGFibGUvYmxvY2tfYnVpbGRlci5oCkBAIC0wLDAgKzEsNTcgQEAKKy8vIENvcHlyaWdodCAoYykg
MjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZp
bGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2lmbmRlZiBTVE9SQUdFX0xFVkVMREJf
VEFCTEVfQkxPQ0tfQlVJTERFUl9IXworI2RlZmluZSBTVE9SQUdFX0xFVkVMREJfVEFCTEVfQkxP
Q0tfQlVJTERFUl9IXworCisjaW5jbHVkZSA8dmVjdG9yPgorCisjaW5jbHVkZSA8c3RkaW50Lmg+
CisjaW5jbHVkZSAibGV2ZWxkYi9zbGljZS5oIgorCituYW1lc3BhY2UgbGV2ZWxkYiB7CisKK3N0
cnVjdCBPcHRpb25zOworCitjbGFzcyBCbG9ja0J1aWxkZXIgeworIHB1YmxpYzoKKyAgZXhwbGlj
aXQgQmxvY2tCdWlsZGVyKGNvbnN0IE9wdGlvbnMqIG9wdGlvbnMpOworCisgIC8vIFJlc2V0IHRo
ZSBjb250ZW50cyBhcyBpZiB0aGUgQmxvY2tCdWlsZGVyIHdhcyBqdXN0IGNvbnN0cnVjdGVkLgor
ICB2b2lkIFJlc2V0KCk7CisKKyAgLy8gUkVRVUlSRVM6IEZpbmlzaCgpIGhhcyBub3QgYmVlbiBj
YWxsbGVkIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gUmVzZXQoKS4KKyAgLy8gUkVRVUlSRVM6IGtl
eSBpcyBsYXJnZXIgdGhhbiBhbnkgcHJldmlvdXNseSBhZGRlZCBrZXkKKyAgdm9pZCBBZGQoY29u
c3QgU2xpY2UmIGtleSwgY29uc3QgU2xpY2UmIHZhbHVlKTsKKworICAvLyBGaW5pc2ggYnVpbGRp
bmcgdGhlIGJsb2NrIGFuZCByZXR1cm4gYSBzbGljZSB0aGF0IHJlZmVycyB0byB0aGUKKyAgLy8g
YmxvY2sgY29udGVudHMuICBUaGUgcmV0dXJuZWQgc2xpY2Ugd2lsbCByZW1haW4gdmFsaWQgZm9y
IHRoZQorICAvLyBsaWZldGltZSBvZiB0aGlzIGJ1aWxkZXIgb3IgdW50aWwgUmVzZXQoKSBpcyBj
YWxsZWQuCisgIFNsaWNlIEZpbmlzaCgpOworCisgIC8vIFJldHVybnMgYW4gZXN0aW1hdGUgb2Yg
dGhlIGN1cnJlbnQgKHVuY29tcHJlc3NlZCkgc2l6ZSBvZiB0aGUgYmxvY2sKKyAgLy8gd2UgYXJl
IGJ1aWxkaW5nLgorICBzaXplX3QgQ3VycmVudFNpemVFc3RpbWF0ZSgpIGNvbnN0OworCisgIC8v
IFJldHVybiB0cnVlIGlmZiBubyBlbnRyaWVzIGhhdmUgYmVlbiBhZGRlZCBzaW5jZSB0aGUgbGFz
dCBSZXNldCgpCisgIGJvb2wgZW1wdHkoKSBjb25zdCB7CisgICAgcmV0dXJuIGJ1ZmZlcl8uZW1w
dHkoKTsKKyAgfQorCisgcHJpdmF0ZToKKyAgY29uc3QgT3B0aW9ucyogICAgICAgIG9wdGlvbnNf
OworICBzdGQ6OnN0cmluZyAgICAgICAgICAgYnVmZmVyXzsgICAgICAvLyBEZXN0aW5hdGlvbiBi
dWZmZXIKKyAgc3RkOjp2ZWN0b3I8dWludDMyX3Q+IHJlc3RhcnRzXzsgICAgLy8gUmVzdGFydCBw
b2ludHMKKyAgaW50ICAgICAgICAgICAgICAgICAgIGNvdW50ZXJfOyAgICAgLy8gTnVtYmVyIG9m
IGVudHJpZXMgZW1pdHRlZCBzaW5jZSByZXN0YXJ0CisgIGJvb2wgICAgICAgICAgICAgICAgICBm
aW5pc2hlZF87ICAgIC8vIEhhcyBGaW5pc2goKSBiZWVuIGNhbGxlZD8KKyAgc3RkOjpzdHJpbmcg
ICAgICAgICAgIGxhc3Rfa2V5XzsKKworICAvLyBObyBjb3B5aW5nIGFsbG93ZWQKKyAgQmxvY2tC
dWlsZGVyKGNvbnN0IEJsb2NrQnVpbGRlciYpOworICB2b2lkIG9wZXJhdG9yPShjb25zdCBCbG9j
a0J1aWxkZXImKTsKK307CisKK30gIC8vIG5hbWVzcGFjZSBsZXZlbGRiCisKKyNlbmRpZiAgLy8g
U1RPUkFHRV9MRVZFTERCX1RBQkxFX0JMT0NLX0JVSUxERVJfSF8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xldmVsZGIvdGFibGUvZmlsdGVyX2Jsb2NrLmNjIGIvU291cmNlL1RoaXJk
UGFydHkvbGV2ZWxkYi90YWJsZS9maWx0ZXJfYmxvY2suY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjAzZTE1Yzhi
Y2IxM2I4Nzc2ODQyMDUyYTcyNWFkMmEzOTA5ZmNmNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xldmVsZGIvdGFibGUvZmlsdGVyX2Jsb2NrLmNjCkBAIC0wLDAgKzEsMTEx
IEBACisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCisKKyNp
bmNsdWRlICJ0YWJsZS9maWx0ZXJfYmxvY2suaCIKKworI2luY2x1ZGUgImxldmVsZGIvZmlsdGVy
X3BvbGljeS5oIgorI2luY2x1ZGUgInV0aWwvY29kaW5nLmgiCisKK25hbWVzcGFjZSBsZXZlbGRi
IHsKKworLy8gU2VlIGRvYy90YWJsZV9mb3JtYXQudHh0IGZvciBhbiBleHBsYW5hdGlvbiBvZiB0
aGUgZmlsdGVyIGJsb2NrIGZvcm1hdC4KKworLy8gR2VuZXJhdGUgbmV3IGZpbHRlciBldmVyeSAy
S0Igb2YgZGF0YQorc3RhdGljIGNvbnN0IHNpemVfdCBrRmlsdGVyQmFzZUxnID0gMTE7CitzdGF0
aWMgY29uc3Qgc2l6ZV90IGtGaWx0ZXJCYXNlID0gMSA8PCBrRmlsdGVyQmFzZUxnOworCitGaWx0
ZXJCbG9ja0J1aWxkZXI6OkZpbHRlckJsb2NrQnVpbGRlcihjb25zdCBGaWx0ZXJQb2xpY3kqIHBv
bGljeSkKKyAgICA6IHBvbGljeV8ocG9saWN5KSB7Cit9CisKK3ZvaWQgRmlsdGVyQmxvY2tCdWls
ZGVyOjpTdGFydEJsb2NrKHVpbnQ2NF90IGJsb2NrX29mZnNldCkgeworICB1aW50NjRfdCBmaWx0
ZXJfaW5kZXggPSAoYmxvY2tfb2Zmc2V0IC8ga0ZpbHRlckJhc2UpOworICBhc3NlcnQoZmlsdGVy
X2luZGV4ID49IGZpbHRlcl9vZmZzZXRzXy5zaXplKCkpOworICB3aGlsZSAoZmlsdGVyX2luZGV4
ID4gZmlsdGVyX29mZnNldHNfLnNpemUoKSkgeworICAgIEdlbmVyYXRlRmlsdGVyKCk7CisgIH0K
K30KKwordm9pZCBGaWx0ZXJCbG9ja0J1aWxkZXI6OkFkZEtleShjb25zdCBTbGljZSYga2V5KSB7
CisgIFNsaWNlIGsgPSBrZXk7CisgIHN0YXJ0Xy5wdXNoX2JhY2soa2V5c18uc2l6ZSgpKTsKKyAg
a2V5c18uYXBwZW5kKGsuZGF0YSgpLCBrLnNpemUoKSk7Cit9CisKK1NsaWNlIEZpbHRlckJsb2Nr
QnVpbGRlcjo6RmluaXNoKCkgeworICBpZiAoIXN0YXJ0Xy5lbXB0eSgpKSB7CisgICAgR2VuZXJh
dGVGaWx0ZXIoKTsKKyAgfQorCisgIC8vIEFwcGVuZCBhcnJheSBvZiBwZXItZmlsdGVyIG9mZnNl
dHMKKyAgY29uc3QgdWludDMyX3QgYXJyYXlfb2Zmc2V0ID0gcmVzdWx0Xy5zaXplKCk7CisgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsdGVyX29mZnNldHNfLnNpemUoKTsgaSsrKSB7CisgICAg
UHV0Rml4ZWQzMigmcmVzdWx0XywgZmlsdGVyX29mZnNldHNfW2ldKTsKKyAgfQorCisgIFB1dEZp
eGVkMzIoJnJlc3VsdF8sIGFycmF5X29mZnNldCk7CisgIHJlc3VsdF8ucHVzaF9iYWNrKGtGaWx0
ZXJCYXNlTGcpOyAgLy8gU2F2ZSBlbmNvZGluZyBwYXJhbWV0ZXIgaW4gcmVzdWx0CisgIHJldHVy
biBTbGljZShyZXN1bHRfKTsKK30KKwordm9pZCBGaWx0ZXJCbG9ja0J1aWxkZXI6OkdlbmVyYXRl
RmlsdGVyKCkgeworICBjb25zdCBzaXplX3QgbnVtX2tleXMgPSBzdGFydF8uc2l6ZSgpOworICBp
ZiAobnVtX2tleXMgPT0gMCkgeworICAgIC8vIEZhc3QgcGF0aCBpZiB0aGVyZSBhcmUgbm8ga2V5
cyBmb3IgdGhpcyBmaWx0ZXIKKyAgICBmaWx0ZXJfb2Zmc2V0c18ucHVzaF9iYWNrKHJlc3VsdF8u
c2l6ZSgpKTsKKyAgICByZXR1cm47CisgIH0KKworICAvLyBNYWtlIGxpc3Qgb2Yga2V5cyBmcm9t
IGZsYXR0ZW5lZCBrZXkgc3RydWN0dXJlCisgIHN0YXJ0Xy5wdXNoX2JhY2soa2V5c18uc2l6ZSgp
KTsgIC8vIFNpbXBsaWZ5IGxlbmd0aCBjb21wdXRhdGlvbgorICB0bXBfa2V5c18ucmVzaXplKG51
bV9rZXlzKTsKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1fa2V5czsgaSsrKSB7CisgICAg
Y29uc3QgY2hhciogYmFzZSA9IGtleXNfLmRhdGEoKSArIHN0YXJ0X1tpXTsKKyAgICBzaXplX3Qg
bGVuZ3RoID0gc3RhcnRfW2krMV0gLSBzdGFydF9baV07CisgICAgdG1wX2tleXNfW2ldID0gU2xp
Y2UoYmFzZSwgbGVuZ3RoKTsKKyAgfQorCisgIC8vIEdlbmVyYXRlIGZpbHRlciBmb3IgY3VycmVu
dCBzZXQgb2Yga2V5cyBhbmQgYXBwZW5kIHRvIHJlc3VsdF8uCisgIGZpbHRlcl9vZmZzZXRzXy5w
dXNoX2JhY2socmVzdWx0Xy5zaXplKCkpOworICBwb2xpY3lfLT5DcmVhdGVGaWx0ZXIoJnRtcF9r
ZXlzX1swXSwgbnVtX2tleXMsICZyZXN1bHRfKTsKKworICB0bXBfa2V5c18uY2xlYXIoKTsKKyAg
a2V5c18uY2xlYXIoKTsKKyAgc3RhcnRfLmNsZWFyKCk7Cit9CisKK0ZpbHRlckJsb2NrUmVhZGVy
OjpGaWx0ZXJCbG9ja1JlYWRlcihjb25zdCBGaWx0ZXJQb2xpY3kqIHBvbGljeSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTbGljZSYgY29udGVudHMpCisgICAg
OiBwb2xpY3lfKHBvbGljeSksCisgICAgICBkYXRhXyhOVUxMKSwKKyAgICAgIG9mZnNldF8oTlVM
TCksCisgICAgICBudW1fKDApLAorICAgICAgYmFzZV9sZ18oMCkgeworICBzaXplX3QgbiA9IGNv
bnRlbnRzLnNpemUoKTsKKyAgaWYgKG4gPCA1KSByZXR1cm47ICAvLyAxIGJ5dGUgZm9yIGJhc2Vf
bGdfIGFuZCA0IGZvciBzdGFydCBvZiBvZmZzZXQgYXJyYXkKKyAgYmFzZV9sZ18gPSBjb250ZW50
c1tuLTFdOworICB1aW50MzJfdCBsYXN0X3dvcmQgPSBEZWNvZGVGaXhlZDMyKGNvbnRlbnRzLmRh
dGEoKSArIG4gLSA1KTsKKyAgaWYgKGxhc3Rfd29yZCA+IG4gLSA1KSByZXR1cm47CisgIGRhdGFf
ID0gY29udGVudHMuZGF0YSgpOworICBvZmZzZXRfID0gZGF0YV8gKyBsYXN0X3dvcmQ7CisgIG51
bV8gPSAobiAtIDUgLSBsYXN0X3dvcmQpIC8gNDsKK30KKworYm9vbCBGaWx0ZXJCbG9ja1JlYWRl
cjo6S2V5TWF5TWF0Y2godWludDY0X3QgYmxvY2tfb2Zmc2V0LCBjb25zdCBTbGljZSYga2V5KSB7
CisgIHVpbnQ2NF90IGluZGV4ID0gYmxvY2tfb2Zmc2V0ID4+IGJhc2VfbGdfOworICBpZiAoaW5k
ZXggPCBudW1fKSB7CisgICAgdWludDMyX3Qgc3RhcnQgPSBEZWNvZGVGaXhlZDMyKG9mZnNldF8g
KyBpbmRleCo0KTsKKyAgICB1aW50MzJfdCBsaW1pdCA9IERlY29kZUZpeGVkMzIob2Zmc2V0XyAr
IGluZGV4KjQgKyA0KTsKKyAgICBpZiAoc3RhcnQgPD0gbGltaXQgJiYgbGltaXQgPD0gKG9mZnNl
dF8gLSBkYXRhXykpIHsKKyAgICAgIFNsaWNlIGZpbHRlciA9IFNsaWNlKGRhdGFfICsgc3RhcnQs
IGxpbWl0IC0gc3RhcnQpOworICAgICAgcmV0dXJuIHBvbGljeV8tPktleU1heU1hdGNoKGtleSwg
ZmlsdGVyKTsKKyAgICB9IGVsc2UgaWYgKHN0YXJ0ID09IGxpbWl0KSB7CisgICAgICAvLyBFbXB0
eSBmaWx0ZXJzIGRvIG5vdCBtYXRjaCBhbnkga2V5cworICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgfQorICByZXR1cm4gdHJ1ZTsgIC8vIEVycm9ycyBhcmUgdHJlYXRlZCBhcyBwb3RlbnRp
YWwgbWF0Y2hlcworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRi
L3RhYmxlL2ZpbHRlcl9ibG9jay5oIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi90YWJsZS9m
aWx0ZXJfYmxvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNjdkMDEwYmQxMDY3NTZjNDU2ZGVhMDEzYzViYWJk
ZjBhMTg0OTRmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi90
YWJsZS9maWx0ZXJfYmxvY2suaApAQCAtMCwwICsxLDY4IEBACisvLyBDb3B5cmlnaHQgKGMpIDIw
MTIgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxl
IGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCisvLworLy8gQSBmaWx0ZXIgYmxvY2sgaXMgc3Rv
cmVkIG5lYXIgdGhlIGVuZCBvZiBhIFRhYmxlIGZpbGUuICBJdCBjb250YWlucworLy8gZmlsdGVy
cyAoZS5nLiwgYmxvb20gZmlsdGVycykgZm9yIGFsbCBkYXRhIGJsb2NrcyBpbiB0aGUgdGFibGUg
Y29tYmluZWQKKy8vIGludG8gYSBzaW5nbGUgZmlsdGVyIGJsb2NrLgorCisjaWZuZGVmIFNUT1JB
R0VfTEVWRUxEQl9UQUJMRV9GSUxURVJfQkxPQ0tfSF8KKyNkZWZpbmUgU1RPUkFHRV9MRVZFTERC
X1RBQkxFX0ZJTFRFUl9CTE9DS19IXworCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8
c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRl
ICJsZXZlbGRiL3NsaWNlLmgiCisjaW5jbHVkZSAidXRpbC9oYXNoLmgiCisKK25hbWVzcGFjZSBs
ZXZlbGRiIHsKKworY2xhc3MgRmlsdGVyUG9saWN5OworCisvLyBBIEZpbHRlckJsb2NrQnVpbGRl
ciBpcyB1c2VkIHRvIGNvbnN0cnVjdCBhbGwgb2YgdGhlIGZpbHRlcnMgZm9yIGEKKy8vIHBhcnRp
Y3VsYXIgVGFibGUuICBJdCBnZW5lcmF0ZXMgYSBzaW5nbGUgc3RyaW5nIHdoaWNoIGlzIHN0b3Jl
ZCBhcworLy8gYSBzcGVjaWFsIGJsb2NrIGluIHRoZSBUYWJsZS4KKy8vCisvLyBUaGUgc2VxdWVu
Y2Ugb2YgY2FsbHMgdG8gRmlsdGVyQmxvY2tCdWlsZGVyIG11c3QgbWF0Y2ggdGhlIHJlZ2V4cDoK
Ky8vICAgICAgKFN0YXJ0QmxvY2sgQWRkS2V5KikqIEZpbmlzaAorY2xhc3MgRmlsdGVyQmxvY2tC
dWlsZGVyIHsKKyBwdWJsaWM6CisgIGV4cGxpY2l0IEZpbHRlckJsb2NrQnVpbGRlcihjb25zdCBG
aWx0ZXJQb2xpY3kqKTsKKworICB2b2lkIFN0YXJ0QmxvY2sodWludDY0X3QgYmxvY2tfb2Zmc2V0
KTsKKyAgdm9pZCBBZGRLZXkoY29uc3QgU2xpY2UmIGtleSk7CisgIFNsaWNlIEZpbmlzaCgpOwor
CisgcHJpdmF0ZToKKyAgdm9pZCBHZW5lcmF0ZUZpbHRlcigpOworCisgIGNvbnN0IEZpbHRlclBv
bGljeSogcG9saWN5XzsKKyAgc3RkOjpzdHJpbmcga2V5c187ICAgICAgICAgICAgICAvLyBGbGF0
dGVuZWQga2V5IGNvbnRlbnRzCisgIHN0ZDo6dmVjdG9yPHNpemVfdD4gc3RhcnRfOyAgICAgLy8g
U3RhcnRpbmcgaW5kZXggaW4ga2V5c18gb2YgZWFjaCBrZXkKKyAgc3RkOjpzdHJpbmcgcmVzdWx0
XzsgICAgICAgICAgICAvLyBGaWx0ZXIgZGF0YSBjb21wdXRlZCBzbyBmYXIKKyAgc3RkOjp2ZWN0
b3I8U2xpY2U+IHRtcF9rZXlzXzsgICAvLyBwb2xpY3lfLT5DcmVhdGVGaWx0ZXIoKSBhcmd1bWVu
dAorICBzdGQ6OnZlY3Rvcjx1aW50MzJfdD4gZmlsdGVyX29mZnNldHNfOworCisgIC8vIE5vIGNv
cHlpbmcgYWxsb3dlZAorICBGaWx0ZXJCbG9ja0J1aWxkZXIoY29uc3QgRmlsdGVyQmxvY2tCdWls
ZGVyJik7CisgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IEZpbHRlckJsb2NrQnVpbGRlciYpOworfTsK
KworY2xhc3MgRmlsdGVyQmxvY2tSZWFkZXIgeworIHB1YmxpYzoKKyAvLyBSRVFVSVJFUzogImNv
bnRlbnRzIiBhbmQgKnBvbGljeSBtdXN0IHN0YXkgbGl2ZSB3aGlsZSAqdGhpcyBpcyBsaXZlLgor
ICBGaWx0ZXJCbG9ja1JlYWRlcihjb25zdCBGaWx0ZXJQb2xpY3kqIHBvbGljeSwgY29uc3QgU2xp
Y2UmIGNvbnRlbnRzKTsKKyAgYm9vbCBLZXlNYXlNYXRjaCh1aW50NjRfdCBibG9ja19vZmZzZXQs
IGNvbnN0IFNsaWNlJiBrZXkpOworCisgcHJpdmF0ZToKKyAgY29uc3QgRmlsdGVyUG9saWN5KiBw
b2xpY3lfOworICBjb25zdCBjaGFyKiBkYXRhXzsgICAgLy8gUG9pbnRlciB0byBmaWx0ZXIgZGF0
YSAoYXQgYmxvY2stc3RhcnQpCisgIGNvbnN0IGNoYXIqIG9mZnNldF87ICAvLyBQb2ludGVyIHRv
IGJlZ2lubmluZyBvZiBvZmZzZXQgYXJyYXkgKGF0IGJsb2NrLWVuZCkKKyAgc2l6ZV90IG51bV87
ICAgICAgICAgIC8vIE51bWJlciBvZiBlbnRyaWVzIGluIG9mZnNldCBhcnJheQorICBzaXplX3Qg
YmFzZV9sZ187ICAgICAgLy8gRW5jb2RpbmcgcGFyYW1ldGVyIChzZWUga0ZpbHRlckJhc2VMZyBp
biAuY2MgZmlsZSkKK307CisKK30KKworI2VuZGlmICAvLyBTVE9SQUdFX0xFVkVMREJfVEFCTEVf
RklMVEVSX0JMT0NLX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3Rh
YmxlL2ZpbHRlcl9ibG9ja190ZXN0LmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi90YWJs
ZS9maWx0ZXJfYmxvY2tfdGVzdC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYTJhMDdjZjUzY2E2MDZiMmQwZTk4
OTBlNmI5Y2ZhMDJhNjc4Mzk4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
bGV2ZWxkYi90YWJsZS9maWx0ZXJfYmxvY2tfdGVzdC5jYwpAQCAtMCwwICsxLDEyOCBAQAorLy8g
Q29weXJpZ2h0IChjKSAyMDEyIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUg
dGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgorCisjaW5jbHVkZSAi
dGFibGUvZmlsdGVyX2Jsb2NrLmgiCisKKyNpbmNsdWRlICJsZXZlbGRiL2ZpbHRlcl9wb2xpY3ku
aCIKKyNpbmNsdWRlICJ1dGlsL2NvZGluZy5oIgorI2luY2x1ZGUgInV0aWwvaGFzaC5oIgorI2lu
Y2x1ZGUgInV0aWwvbG9nZ2luZy5oIgorI2luY2x1ZGUgInV0aWwvdGVzdGhhcm5lc3MuaCIKKyNp
bmNsdWRlICJ1dGlsL3Rlc3R1dGlsLmgiCisKK25hbWVzcGFjZSBsZXZlbGRiIHsKKworLy8gRm9y
IHRlc3Rpbmc6IGVtaXQgYW4gYXJyYXkgd2l0aCBvbmUgaGFzaCB2YWx1ZSBwZXIga2V5CitjbGFz
cyBUZXN0SGFzaEZpbHRlciA6IHB1YmxpYyBGaWx0ZXJQb2xpY3kgeworIHB1YmxpYzoKKyAgdmly
dHVhbCBjb25zdCBjaGFyKiBOYW1lKCkgY29uc3QgeworICAgIHJldHVybiAiVGVzdEhhc2hGaWx0
ZXIiOworICB9CisKKyAgdmlydHVhbCB2b2lkIENyZWF0ZUZpbHRlcihjb25zdCBTbGljZSoga2V5
cywgaW50IG4sIHN0ZDo6c3RyaW5nKiBkc3QpIGNvbnN0IHsKKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IG47IGkrKykgeworICAgICAgdWludDMyX3QgaCA9IEhhc2goa2V5c1tpXS5kYXRhKCksIGtl
eXNbaV0uc2l6ZSgpLCAxKTsKKyAgICAgIFB1dEZpeGVkMzIoZHN0LCBoKTsKKyAgICB9CisgIH0K
KworICB2aXJ0dWFsIGJvb2wgS2V5TWF5TWF0Y2goY29uc3QgU2xpY2UmIGtleSwgY29uc3QgU2xp
Y2UmIGZpbHRlcikgY29uc3QgeworICAgIHVpbnQzMl90IGggPSBIYXNoKGtleS5kYXRhKCksIGtl
eS5zaXplKCksIDEpOworICAgIGZvciAoaW50IGkgPSAwOyBpICsgNCA8PSBmaWx0ZXIuc2l6ZSgp
OyBpICs9IDQpIHsKKyAgICAgIGlmIChoID09IERlY29kZUZpeGVkMzIoZmlsdGVyLmRhdGEoKSAr
IGkpKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4g
ZmFsc2U7CisgIH0KK307CisKK2NsYXNzIEZpbHRlckJsb2NrVGVzdCB7CisgcHVibGljOgorICBU
ZXN0SGFzaEZpbHRlciBwb2xpY3lfOworfTsKKworVEVTVChGaWx0ZXJCbG9ja1Rlc3QsIEVtcHR5
QnVpbGRlcikgeworICBGaWx0ZXJCbG9ja0J1aWxkZXIgYnVpbGRlcigmcG9saWN5Xyk7CisgIFNs
aWNlIGJsb2NrID0gYnVpbGRlci5GaW5pc2goKTsKKyAgQVNTRVJUX0VRKCJcXHgwMFxceDAwXFx4
MDBcXHgwMFxceDBiIiwgRXNjYXBlU3RyaW5nKGJsb2NrKSk7CisgIEZpbHRlckJsb2NrUmVhZGVy
IHJlYWRlcigmcG9saWN5XywgYmxvY2spOworICBBU1NFUlRfVFJVRShyZWFkZXIuS2V5TWF5TWF0
Y2goMCwgImZvbyIpKTsKKyAgQVNTRVJUX1RSVUUocmVhZGVyLktleU1heU1hdGNoKDEwMDAwMCwg
ImZvbyIpKTsKK30KKworVEVTVChGaWx0ZXJCbG9ja1Rlc3QsIFNpbmdsZUNodW5rKSB7CisgIEZp
bHRlckJsb2NrQnVpbGRlciBidWlsZGVyKCZwb2xpY3lfKTsKKyAgYnVpbGRlci5TdGFydEJsb2Nr
KDEwMCk7CisgIGJ1aWxkZXIuQWRkS2V5KCJmb28iKTsKKyAgYnVpbGRlci5BZGRLZXkoImJhciIp
OworICBidWlsZGVyLkFkZEtleSgiYm94Iik7CisgIGJ1aWxkZXIuU3RhcnRCbG9jaygyMDApOwor
ICBidWlsZGVyLkFkZEtleSgiYm94Iik7CisgIGJ1aWxkZXIuU3RhcnRCbG9jaygzMDApOworICBi
dWlsZGVyLkFkZEtleSgiaGVsbG8iKTsKKyAgU2xpY2UgYmxvY2sgPSBidWlsZGVyLkZpbmlzaCgp
OworICBGaWx0ZXJCbG9ja1JlYWRlciByZWFkZXIoJnBvbGljeV8sIGJsb2NrKTsKKyAgQVNTRVJU
X1RSVUUocmVhZGVyLktleU1heU1hdGNoKDEwMCwgImZvbyIpKTsKKyAgQVNTRVJUX1RSVUUocmVh
ZGVyLktleU1heU1hdGNoKDEwMCwgImJhciIpKTsKKyAgQVNTRVJUX1RSVUUocmVhZGVyLktleU1h
eU1hdGNoKDEwMCwgImJveCIpKTsKKyAgQVNTRVJUX1RSVUUocmVhZGVyLktleU1heU1hdGNoKDEw
MCwgImhlbGxvIikpOworICBBU1NFUlRfVFJVRShyZWFkZXIuS2V5TWF5TWF0Y2goMTAwLCAiZm9v
IikpOworICBBU1NFUlRfVFJVRSghIHJlYWRlci5LZXlNYXlNYXRjaCgxMDAsICJtaXNzaW5nIikp
OworICBBU1NFUlRfVFJVRSghIHJlYWRlci5LZXlNYXlNYXRjaCgxMDAsICJvdGhlciIpKTsKK30K
KworVEVTVChGaWx0ZXJCbG9ja1Rlc3QsIE11bHRpQ2h1bmspIHsKKyAgRmlsdGVyQmxvY2tCdWls
ZGVyIGJ1aWxkZXIoJnBvbGljeV8pOworCisgIC8vIEZpcnN0IGZpbHRlcgorICBidWlsZGVyLlN0
YXJ0QmxvY2soMCk7CisgIGJ1aWxkZXIuQWRkS2V5KCJmb28iKTsKKyAgYnVpbGRlci5TdGFydEJs
b2NrKDIwMDApOworICBidWlsZGVyLkFkZEtleSgiYmFyIik7CisKKyAgLy8gU2Vjb25kIGZpbHRl
cgorICBidWlsZGVyLlN0YXJ0QmxvY2soMzEwMCk7CisgIGJ1aWxkZXIuQWRkS2V5KCJib3giKTsK
KworICAvLyBUaGlyZCBmaWx0ZXIgaXMgZW1wdHkKKworICAvLyBMYXN0IGZpbHRlcgorICBidWls
ZGVyLlN0YXJ0QmxvY2soOTAwMCk7CisgIGJ1aWxkZXIuQWRkS2V5KCJib3giKTsKKyAgYnVpbGRl
ci5BZGRLZXkoImhlbGxvIik7CisKKyAgU2xpY2UgYmxvY2sgPSBidWlsZGVyLkZpbmlzaCgpOwor
ICBGaWx0ZXJCbG9ja1JlYWRlciByZWFkZXIoJnBvbGljeV8sIGJsb2NrKTsKKworICAvLyBDaGVj
ayBmaXJzdCBmaWx0ZXIKKyAgQVNTRVJUX1RSVUUocmVhZGVyLktleU1heU1hdGNoKDAsICJmb28i
KSk7CisgIEFTU0VSVF9UUlVFKHJlYWRlci5LZXlNYXlNYXRjaCgyMDAwLCAiYmFyIikpOworICBB
U1NFUlRfVFJVRSghIHJlYWRlci5LZXlNYXlNYXRjaCgwLCAiYm94IikpOworICBBU1NFUlRfVFJV
RSghIHJlYWRlci5LZXlNYXlNYXRjaCgwLCAiaGVsbG8iKSk7CisKKyAgLy8gQ2hlY2sgc2Vjb25k
IGZpbHRlcgorICBBU1NFUlRfVFJVRShyZWFkZXIuS2V5TWF5TWF0Y2goMzEwMCwgImJveCIpKTsK
KyAgQVNTRVJUX1RSVUUoISByZWFkZXIuS2V5TWF5TWF0Y2goMzEwMCwgImZvbyIpKTsKKyAgQVNT
RVJUX1RSVUUoISByZWFkZXIuS2V5TWF5TWF0Y2goMzEwMCwgImJhciIpKTsKKyAgQVNTRVJUX1RS
VUUoISByZWFkZXIuS2V5TWF5TWF0Y2goMzEwMCwgImhlbGxvIikpOworCisgIC8vIENoZWNrIHRo
aXJkIGZpbHRlciAoZW1wdHkpCisgIEFTU0VSVF9UUlVFKCEgcmVhZGVyLktleU1heU1hdGNoKDQx
MDAsICJmb28iKSk7CisgIEFTU0VSVF9UUlVFKCEgcmVhZGVyLktleU1heU1hdGNoKDQxMDAsICJi
YXIiKSk7CisgIEFTU0VSVF9UUlVFKCEgcmVhZGVyLktleU1heU1hdGNoKDQxMDAsICJib3giKSk7
CisgIEFTU0VSVF9UUlVFKCEgcmVhZGVyLktleU1heU1hdGNoKDQxMDAsICJoZWxsbyIpKTsKKwor
ICAvLyBDaGVjayBsYXN0IGZpbHRlcgorICBBU1NFUlRfVFJVRShyZWFkZXIuS2V5TWF5TWF0Y2go
OTAwMCwgImJveCIpKTsKKyAgQVNTRVJUX1RSVUUocmVhZGVyLktleU1heU1hdGNoKDkwMDAsICJo
ZWxsbyIpKTsKKyAgQVNTRVJUX1RSVUUoISByZWFkZXIuS2V5TWF5TWF0Y2goOTAwMCwgImZvbyIp
KTsKKyAgQVNTRVJUX1RSVUUoISByZWFkZXIuS2V5TWF5TWF0Y2goOTAwMCwgImJhciIpKTsKK30K
KworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBh
cmd2KSB7CisgIHJldHVybiBsZXZlbGRiOjp0ZXN0OjpSdW5BbGxUZXN0cygpOworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi90YWJsZS9mb3JtYXQuY2MgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxlL2Zvcm1hdC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZGExZGVjZGYz
NTQ3NmVjZDVjNDRkN2YzYThlNjkxMTFlNjIwMTI0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvbGV2ZWxkYi90YWJsZS9mb3JtYXQuY2MKQEAgLTAsMCArMSwxNDUgQEAKKy8v
IENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2Vl
IHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2luY2x1ZGUg
InRhYmxlL2Zvcm1hdC5oIgorCisjaW5jbHVkZSAibGV2ZWxkYi9lbnYuaCIKKyNpbmNsdWRlICJw
b3J0L3BvcnQuaCIKKyNpbmNsdWRlICJ0YWJsZS9ibG9jay5oIgorI2luY2x1ZGUgInV0aWwvY29k
aW5nLmgiCisjaW5jbHVkZSAidXRpbC9jcmMzMmMuaCIKKworbmFtZXNwYWNlIGxldmVsZGIgewor
Cit2b2lkIEJsb2NrSGFuZGxlOjpFbmNvZGVUbyhzdGQ6OnN0cmluZyogZHN0KSBjb25zdCB7Cisg
IC8vIFNhbml0eSBjaGVjayB0aGF0IGFsbCBmaWVsZHMgaGF2ZSBiZWVuIHNldAorICBhc3NlcnQo
b2Zmc2V0XyAhPSB+c3RhdGljX2Nhc3Q8dWludDY0X3Q+KDApKTsKKyAgYXNzZXJ0KHNpemVfICE9
IH5zdGF0aWNfY2FzdDx1aW50NjRfdD4oMCkpOworICBQdXRWYXJpbnQ2NChkc3QsIG9mZnNldF8p
OworICBQdXRWYXJpbnQ2NChkc3QsIHNpemVfKTsKK30KKworU3RhdHVzIEJsb2NrSGFuZGxlOjpE
ZWNvZGVGcm9tKFNsaWNlKiBpbnB1dCkgeworICBpZiAoR2V0VmFyaW50NjQoaW5wdXQsICZvZmZz
ZXRfKSAmJgorICAgICAgR2V0VmFyaW50NjQoaW5wdXQsICZzaXplXykpIHsKKyAgICByZXR1cm4g
U3RhdHVzOjpPSygpOworICB9IGVsc2UgeworICAgIHJldHVybiBTdGF0dXM6OkNvcnJ1cHRpb24o
ImJhZCBibG9jayBoYW5kbGUiKTsKKyAgfQorfQorCit2b2lkIEZvb3Rlcjo6RW5jb2RlVG8oc3Rk
OjpzdHJpbmcqIGRzdCkgY29uc3QgeworI2lmbmRlZiBOREVCVUcKKyAgY29uc3Qgc2l6ZV90IG9y
aWdpbmFsX3NpemUgPSBkc3QtPnNpemUoKTsKKyNlbmRpZgorICBtZXRhaW5kZXhfaGFuZGxlXy5F
bmNvZGVUbyhkc3QpOworICBpbmRleF9oYW5kbGVfLkVuY29kZVRvKGRzdCk7CisgIGRzdC0+cmVz
aXplKDIgKiBCbG9ja0hhbmRsZTo6a01heEVuY29kZWRMZW5ndGgpOyAgLy8gUGFkZGluZworICBQ
dXRGaXhlZDMyKGRzdCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGtUYWJsZU1hZ2ljTnVtYmVyICYg
MHhmZmZmZmZmZnUpKTsKKyAgUHV0Rml4ZWQzMihkc3QsIHN0YXRpY19jYXN0PHVpbnQzMl90Pihr
VGFibGVNYWdpY051bWJlciA+PiAzMikpOworICBhc3NlcnQoZHN0LT5zaXplKCkgPT0gb3JpZ2lu
YWxfc2l6ZSArIGtFbmNvZGVkTGVuZ3RoKTsKK30KKworU3RhdHVzIEZvb3Rlcjo6RGVjb2RlRnJv
bShTbGljZSogaW5wdXQpIHsKKyAgY29uc3QgY2hhciogbWFnaWNfcHRyID0gaW5wdXQtPmRhdGEo
KSArIGtFbmNvZGVkTGVuZ3RoIC0gODsKKyAgY29uc3QgdWludDMyX3QgbWFnaWNfbG8gPSBEZWNv
ZGVGaXhlZDMyKG1hZ2ljX3B0cik7CisgIGNvbnN0IHVpbnQzMl90IG1hZ2ljX2hpID0gRGVjb2Rl
Rml4ZWQzMihtYWdpY19wdHIgKyA0KTsKKyAgY29uc3QgdWludDY0X3QgbWFnaWMgPSAoKHN0YXRp
Y19jYXN0PHVpbnQ2NF90PihtYWdpY19oaSkgPDwgMzIpIHwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgKHN0YXRpY19jYXN0PHVpbnQ2NF90PihtYWdpY19sbykpKTsKKyAgaWYgKG1hZ2ljICE9
IGtUYWJsZU1hZ2ljTnVtYmVyKSB7CisgICAgcmV0dXJuIFN0YXR1czo6SW52YWxpZEFyZ3VtZW50
KCJub3QgYW4gc3N0YWJsZSAoYmFkIG1hZ2ljIG51bWJlcikiKTsKKyAgfQorCisgIFN0YXR1cyBy
ZXN1bHQgPSBtZXRhaW5kZXhfaGFuZGxlXy5EZWNvZGVGcm9tKGlucHV0KTsKKyAgaWYgKHJlc3Vs
dC5vaygpKSB7CisgICAgcmVzdWx0ID0gaW5kZXhfaGFuZGxlXy5EZWNvZGVGcm9tKGlucHV0KTsK
KyAgfQorICBpZiAocmVzdWx0Lm9rKCkpIHsKKyAgICAvLyBXZSBza2lwIG92ZXIgYW55IGxlZnRv
dmVyIGRhdGEgKGp1c3QgcGFkZGluZyBmb3Igbm93KSBpbiAiaW5wdXQiCisgICAgY29uc3QgY2hh
ciogZW5kID0gbWFnaWNfcHRyICsgODsKKyAgICAqaW5wdXQgPSBTbGljZShlbmQsIGlucHV0LT5k
YXRhKCkgKyBpbnB1dC0+c2l6ZSgpIC0gZW5kKTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQor
CitTdGF0dXMgUmVhZEJsb2NrKFJhbmRvbUFjY2Vzc0ZpbGUqIGZpbGUsCisgICAgICAgICAgICAg
ICAgIGNvbnN0IFJlYWRPcHRpb25zJiBvcHRpb25zLAorICAgICAgICAgICAgICAgICBjb25zdCBC
bG9ja0hhbmRsZSYgaGFuZGxlLAorICAgICAgICAgICAgICAgICBCbG9ja0NvbnRlbnRzKiByZXN1
bHQpIHsKKyAgcmVzdWx0LT5kYXRhID0gU2xpY2UoKTsKKyAgcmVzdWx0LT5jYWNoYWJsZSA9IGZh
bHNlOworICByZXN1bHQtPmhlYXBfYWxsb2NhdGVkID0gZmFsc2U7CisKKyAgLy8gUmVhZCB0aGUg
YmxvY2sgY29udGVudHMgYXMgd2VsbCBhcyB0aGUgdHlwZS9jcmMgZm9vdGVyLgorICAvLyBTZWUg
dGFibGVfYnVpbGRlci5jYyBmb3IgdGhlIGNvZGUgdGhhdCBidWlsdCB0aGlzIHN0cnVjdHVyZS4K
KyAgc2l6ZV90IG4gPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGhhbmRsZS5zaXplKCkpOworICBjaGFy
KiBidWYgPSBuZXcgY2hhcltuICsga0Jsb2NrVHJhaWxlclNpemVdOworICBTbGljZSBjb250ZW50
czsKKyAgU3RhdHVzIHMgPSBmaWxlLT5SZWFkKGhhbmRsZS5vZmZzZXQoKSwgbiArIGtCbG9ja1Ry
YWlsZXJTaXplLCAmY29udGVudHMsIGJ1Zik7CisgIGlmICghcy5vaygpKSB7CisgICAgZGVsZXRl
W10gYnVmOworICAgIHJldHVybiBzOworICB9CisgIGlmIChjb250ZW50cy5zaXplKCkgIT0gbiAr
IGtCbG9ja1RyYWlsZXJTaXplKSB7CisgICAgZGVsZXRlW10gYnVmOworICAgIHJldHVybiBTdGF0
dXM6OkNvcnJ1cHRpb24oInRydW5jYXRlZCBibG9jayByZWFkIik7CisgIH0KKworICAvLyBDaGVj
ayB0aGUgY3JjIG9mIHRoZSB0eXBlIGFuZCB0aGUgYmxvY2sgY29udGVudHMKKyAgY29uc3QgY2hh
ciogZGF0YSA9IGNvbnRlbnRzLmRhdGEoKTsgICAgLy8gUG9pbnRlciB0byB3aGVyZSBSZWFkIHB1
dCB0aGUgZGF0YQorICBpZiAob3B0aW9ucy52ZXJpZnlfY2hlY2tzdW1zKSB7CisgICAgY29uc3Qg
dWludDMyX3QgY3JjID0gY3JjMzJjOjpVbm1hc2soRGVjb2RlRml4ZWQzMihkYXRhICsgbiArIDEp
KTsKKyAgICBjb25zdCB1aW50MzJfdCBhY3R1YWwgPSBjcmMzMmM6OlZhbHVlKGRhdGEsIG4gKyAx
KTsKKyAgICBpZiAoYWN0dWFsICE9IGNyYykgeworICAgICAgZGVsZXRlW10gYnVmOworICAgICAg
cyA9IFN0YXR1czo6Q29ycnVwdGlvbigiYmxvY2sgY2hlY2tzdW0gbWlzbWF0Y2giKTsKKyAgICAg
IHJldHVybiBzOworICAgIH0KKyAgfQorCisgIHN3aXRjaCAoZGF0YVtuXSkgeworICAgIGNhc2Ug
a05vQ29tcHJlc3Npb246CisgICAgICBpZiAoZGF0YSAhPSBidWYpIHsKKyAgICAgICAgLy8gRmls
ZSBpbXBsZW1lbnRhdGlvbiBnYXZlIHVzIHBvaW50ZXIgdG8gc29tZSBvdGhlciBkYXRhLgorICAg
ICAgICAvLyBVc2UgaXQgZGlyZWN0bHkgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCBpdCB3aWxs
IGJlIGxpdmUKKyAgICAgICAgLy8gd2hpbGUgdGhlIGZpbGUgaXMgb3Blbi4KKyAgICAgICAgZGVs
ZXRlW10gYnVmOworICAgICAgICByZXN1bHQtPmRhdGEgPSBTbGljZShkYXRhLCBuKTsKKyAgICAg
ICAgcmVzdWx0LT5oZWFwX2FsbG9jYXRlZCA9IGZhbHNlOworICAgICAgICByZXN1bHQtPmNhY2hh
YmxlID0gZmFsc2U7ICAvLyBEbyBub3QgZG91YmxlLWNhY2hlCisgICAgICB9IGVsc2UgeworICAg
ICAgICByZXN1bHQtPmRhdGEgPSBTbGljZShidWYsIG4pOworICAgICAgICByZXN1bHQtPmhlYXBf
YWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgcmVzdWx0LT5jYWNoYWJsZSA9IHRydWU7CisgICAg
ICB9CisKKyAgICAgIC8vIE9rCisgICAgICBicmVhazsKKyAgICBjYXNlIGtTbmFwcHlDb21wcmVz
c2lvbjogeworICAgICAgc2l6ZV90IHVsZW5ndGggPSAwOworICAgICAgaWYgKCFwb3J0OjpTbmFw
cHlfR2V0VW5jb21wcmVzc2VkTGVuZ3RoKGRhdGEsIG4sICZ1bGVuZ3RoKSkgeworICAgICAgICBk
ZWxldGVbXSBidWY7CisgICAgICAgIHJldHVybiBTdGF0dXM6OkNvcnJ1cHRpb24oImNvcnJ1cHRl
ZCBjb21wcmVzc2VkIGJsb2NrIGNvbnRlbnRzIik7CisgICAgICB9CisgICAgICBjaGFyKiB1YnVm
ID0gbmV3IGNoYXJbdWxlbmd0aF07CisgICAgICBpZiAoIXBvcnQ6OlNuYXBweV9VbmNvbXByZXNz
KGRhdGEsIG4sIHVidWYpKSB7CisgICAgICAgIGRlbGV0ZVtdIGJ1ZjsKKyAgICAgICAgZGVsZXRl
W10gdWJ1ZjsKKyAgICAgICAgcmV0dXJuIFN0YXR1czo6Q29ycnVwdGlvbigiY29ycnVwdGVkIGNv
bXByZXNzZWQgYmxvY2sgY29udGVudHMiKTsKKyAgICAgIH0KKyAgICAgIGRlbGV0ZVtdIGJ1ZjsK
KyAgICAgIHJlc3VsdC0+ZGF0YSA9IFNsaWNlKHVidWYsIHVsZW5ndGgpOworICAgICAgcmVzdWx0
LT5oZWFwX2FsbG9jYXRlZCA9IHRydWU7CisgICAgICByZXN1bHQtPmNhY2hhYmxlID0gdHJ1ZTsK
KyAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgZGVsZXRlW10gYnVmOwor
ICAgICAgcmV0dXJuIFN0YXR1czo6Q29ycnVwdGlvbigiYmFkIGJsb2NrIHR5cGUiKTsKKyAgfQor
CisgIHJldHVybiBTdGF0dXM6Ok9LKCk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBsZXZlbGRiCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxlL2Zvcm1hdC5oIGIvU291
cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi90YWJsZS9mb3JtYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YzBiODBj
MDE3OWM3ZmZmYmY2ZWUyYWY4MDJhMTBlYzAyZDczOTk4Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi90YWJsZS9mb3JtYXQuaApAQCAtMCwwICsxLDEwOCBAQAor
Ly8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBT
ZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgorCisjaWZuZGVm
IFNUT1JBR0VfTEVWRUxEQl9UQUJMRV9GT1JNQVRfSF8KKyNkZWZpbmUgU1RPUkFHRV9MRVZFTERC
X1RBQkxFX0ZPUk1BVF9IXworCisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHN0ZGludC5o
PgorI2luY2x1ZGUgImxldmVsZGIvc2xpY2UuaCIKKyNpbmNsdWRlICJsZXZlbGRiL3N0YXR1cy5o
IgorI2luY2x1ZGUgImxldmVsZGIvdGFibGVfYnVpbGRlci5oIgorCituYW1lc3BhY2UgbGV2ZWxk
YiB7CisKK2NsYXNzIEJsb2NrOworY2xhc3MgUmFuZG9tQWNjZXNzRmlsZTsKK3N0cnVjdCBSZWFk
T3B0aW9uczsKKworLy8gQmxvY2tIYW5kbGUgaXMgYSBwb2ludGVyIHRvIHRoZSBleHRlbnQgb2Yg
YSBmaWxlIHRoYXQgc3RvcmVzIGEgZGF0YQorLy8gYmxvY2sgb3IgYSBtZXRhIGJsb2NrLgorY2xh
c3MgQmxvY2tIYW5kbGUgeworIHB1YmxpYzoKKyAgQmxvY2tIYW5kbGUoKTsKKworICAvLyBUaGUg
b2Zmc2V0IG9mIHRoZSBibG9jayBpbiB0aGUgZmlsZS4KKyAgdWludDY0X3Qgb2Zmc2V0KCkgY29u
c3QgeyByZXR1cm4gb2Zmc2V0XzsgfQorICB2b2lkIHNldF9vZmZzZXQodWludDY0X3Qgb2Zmc2V0
KSB7IG9mZnNldF8gPSBvZmZzZXQ7IH0KKworICAvLyBUaGUgc2l6ZSBvZiB0aGUgc3RvcmVkIGJs
b2NrCisgIHVpbnQ2NF90IHNpemUoKSBjb25zdCB7IHJldHVybiBzaXplXzsgfQorICB2b2lkIHNl
dF9zaXplKHVpbnQ2NF90IHNpemUpIHsgc2l6ZV8gPSBzaXplOyB9CisKKyAgdm9pZCBFbmNvZGVU
byhzdGQ6OnN0cmluZyogZHN0KSBjb25zdDsKKyAgU3RhdHVzIERlY29kZUZyb20oU2xpY2UqIGlu
cHV0KTsKKworICAvLyBNYXhpbXVtIGVuY29kaW5nIGxlbmd0aCBvZiBhIEJsb2NrSGFuZGxlCisg
IGVudW0geyBrTWF4RW5jb2RlZExlbmd0aCA9IDEwICsgMTAgfTsKKworIHByaXZhdGU6CisgIHVp
bnQ2NF90IG9mZnNldF87CisgIHVpbnQ2NF90IHNpemVfOworfTsKKworLy8gRm9vdGVyIGVuY2Fw
c3VsYXRlcyB0aGUgZml4ZWQgaW5mb3JtYXRpb24gc3RvcmVkIGF0IHRoZSB0YWlsCisvLyBlbmQg
b2YgZXZlcnkgdGFibGUgZmlsZS4KK2NsYXNzIEZvb3RlciB7CisgcHVibGljOgorICBGb290ZXIo
KSB7IH0KKworICAvLyBUaGUgYmxvY2sgaGFuZGxlIGZvciB0aGUgbWV0YWluZGV4IGJsb2NrIG9m
IHRoZSB0YWJsZQorICBjb25zdCBCbG9ja0hhbmRsZSYgbWV0YWluZGV4X2hhbmRsZSgpIGNvbnN0
IHsgcmV0dXJuIG1ldGFpbmRleF9oYW5kbGVfOyB9CisgIHZvaWQgc2V0X21ldGFpbmRleF9oYW5k
bGUoY29uc3QgQmxvY2tIYW5kbGUmIGgpIHsgbWV0YWluZGV4X2hhbmRsZV8gPSBoOyB9CisKKyAg
Ly8gVGhlIGJsb2NrIGhhbmRsZSBmb3IgdGhlIGluZGV4IGJsb2NrIG9mIHRoZSB0YWJsZQorICBj
b25zdCBCbG9ja0hhbmRsZSYgaW5kZXhfaGFuZGxlKCkgY29uc3QgeworICAgIHJldHVybiBpbmRl
eF9oYW5kbGVfOworICB9CisgIHZvaWQgc2V0X2luZGV4X2hhbmRsZShjb25zdCBCbG9ja0hhbmRs
ZSYgaCkgeworICAgIGluZGV4X2hhbmRsZV8gPSBoOworICB9CisKKyAgdm9pZCBFbmNvZGVUbyhz
dGQ6OnN0cmluZyogZHN0KSBjb25zdDsKKyAgU3RhdHVzIERlY29kZUZyb20oU2xpY2UqIGlucHV0
KTsKKworICAvLyBFbmNvZGVkIGxlbmd0aCBvZiBhIEZvb3Rlci4gIE5vdGUgdGhhdCB0aGUgc2Vy
aWFsaXphdGlvbiBvZiBhCisgIC8vIEZvb3RlciB3aWxsIGFsd2F5cyBvY2N1cHkgZXhhY3RseSB0
aGlzIG1hbnkgYnl0ZXMuICBJdCBjb25zaXN0cworICAvLyBvZiB0d28gYmxvY2sgaGFuZGxlcyBh
bmQgYSBtYWdpYyBudW1iZXIuCisgIGVudW0geworICAgIGtFbmNvZGVkTGVuZ3RoID0gMipCbG9j
a0hhbmRsZTo6a01heEVuY29kZWRMZW5ndGggKyA4CisgIH07CisKKyBwcml2YXRlOgorICBCbG9j
a0hhbmRsZSBtZXRhaW5kZXhfaGFuZGxlXzsKKyAgQmxvY2tIYW5kbGUgaW5kZXhfaGFuZGxlXzsK
K307CisKKy8vIGtUYWJsZU1hZ2ljTnVtYmVyIHdhcyBwaWNrZWQgYnkgcnVubmluZworLy8gICAg
ZWNobyBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvbGV2ZWxkYi8gfCBzaGExc3VtCisvLyBhbmQg
dGFraW5nIHRoZSBsZWFkaW5nIDY0IGJpdHMuCitzdGF0aWMgY29uc3QgdWludDY0X3Qga1RhYmxl
TWFnaWNOdW1iZXIgPSAweGRiNDc3NTI0OGI4MGZiNTd1bGw7CisKKy8vIDEtYnl0ZSB0eXBlICsg
MzItYml0IGNyYworc3RhdGljIGNvbnN0IHNpemVfdCBrQmxvY2tUcmFpbGVyU2l6ZSA9IDU7CisK
K3N0cnVjdCBCbG9ja0NvbnRlbnRzIHsKKyAgU2xpY2UgZGF0YTsgICAgICAgICAgIC8vIEFjdHVh
bCBjb250ZW50cyBvZiBkYXRhCisgIGJvb2wgY2FjaGFibGU7ICAgICAgICAvLyBUcnVlIGlmZiBk
YXRhIGNhbiBiZSBjYWNoZWQKKyAgYm9vbCBoZWFwX2FsbG9jYXRlZDsgIC8vIFRydWUgaWZmIGNh
bGxlciBzaG91bGQgZGVsZXRlW10gZGF0YS5kYXRhKCkKK307CisKKy8vIFJlYWQgdGhlIGJsb2Nr
IGlkZW50aWZpZWQgYnkgImhhbmRsZSIgZnJvbSAiZmlsZSIuICBPbiBmYWlsdXJlCisvLyByZXR1
cm4gbm9uLU9LLiAgT24gc3VjY2VzcyBmaWxsICpyZXN1bHQgYW5kIHJldHVybiBPSy4KK2V4dGVy
biBTdGF0dXMgUmVhZEJsb2NrKFJhbmRvbUFjY2Vzc0ZpbGUqIGZpbGUsCisgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBSZWFkT3B0aW9ucyYgb3B0aW9ucywKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEJsb2NrSGFuZGxlJiBoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICBCbG9ja0NvbnRlbnRzKiByZXN1bHQpOworCisvLyBJbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZv
bGxvdy4gIENsaWVudHMgc2hvdWxkIGlnbm9yZSwKKworaW5saW5lIEJsb2NrSGFuZGxlOjpCbG9j
a0hhbmRsZSgpCisgICAgOiBvZmZzZXRfKH5zdGF0aWNfY2FzdDx1aW50NjRfdD4oMCkpLAorICAg
ICAgc2l6ZV8ofnN0YXRpY19jYXN0PHVpbnQ2NF90PigwKSkgeworfQorCit9ICAvLyBuYW1lc3Bh
Y2UgbGV2ZWxkYgorCisjZW5kaWYgIC8vIFNUT1JBR0VfTEVWRUxEQl9UQUJMRV9GT1JNQVRfSF8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdGFibGUvaXRlcmF0b3IuY2Mg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxlL2l0ZXJhdG9yLmNjCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjNkMWM4N2ZkZWNlNzNkNGMxZWYxNmEwYTc2MmY3MDA1OWI5NDQzZTYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxlL2l0ZXJhdG9yLmNjCkBAIC0wLDAg
KzEsNjcgQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4K
KworI2luY2x1ZGUgImxldmVsZGIvaXRlcmF0b3IuaCIKKworbmFtZXNwYWNlIGxldmVsZGIgewor
CitJdGVyYXRvcjo6SXRlcmF0b3IoKSB7CisgIGNsZWFudXBfLmZ1bmN0aW9uID0gTlVMTDsKKyAg
Y2xlYW51cF8ubmV4dCA9IE5VTEw7Cit9CisKK0l0ZXJhdG9yOjp+SXRlcmF0b3IoKSB7CisgIGlm
IChjbGVhbnVwXy5mdW5jdGlvbiAhPSBOVUxMKSB7CisgICAgKCpjbGVhbnVwXy5mdW5jdGlvbiko
Y2xlYW51cF8uYXJnMSwgY2xlYW51cF8uYXJnMik7CisgICAgZm9yIChDbGVhbnVwKiBjID0gY2xl
YW51cF8ubmV4dDsgYyAhPSBOVUxMOyApIHsKKyAgICAgICgqYy0+ZnVuY3Rpb24pKGMtPmFyZzEs
IGMtPmFyZzIpOworICAgICAgQ2xlYW51cCogbmV4dCA9IGMtPm5leHQ7CisgICAgICBkZWxldGUg
YzsKKyAgICAgIGMgPSBuZXh0OworICAgIH0KKyAgfQorfQorCit2b2lkIEl0ZXJhdG9yOjpSZWdp
c3RlckNsZWFudXAoQ2xlYW51cEZ1bmN0aW9uIGZ1bmMsIHZvaWQqIGFyZzEsIHZvaWQqIGFyZzIp
IHsKKyAgYXNzZXJ0KGZ1bmMgIT0gTlVMTCk7CisgIENsZWFudXAqIGM7CisgIGlmIChjbGVhbnVw
Xy5mdW5jdGlvbiA9PSBOVUxMKSB7CisgICAgYyA9ICZjbGVhbnVwXzsKKyAgfSBlbHNlIHsKKyAg
ICBjID0gbmV3IENsZWFudXA7CisgICAgYy0+bmV4dCA9IGNsZWFudXBfLm5leHQ7CisgICAgY2xl
YW51cF8ubmV4dCA9IGM7CisgIH0KKyAgYy0+ZnVuY3Rpb24gPSBmdW5jOworICBjLT5hcmcxID0g
YXJnMTsKKyAgYy0+YXJnMiA9IGFyZzI7Cit9CisKK25hbWVzcGFjZSB7CitjbGFzcyBFbXB0eUl0
ZXJhdG9yIDogcHVibGljIEl0ZXJhdG9yIHsKKyBwdWJsaWM6CisgIEVtcHR5SXRlcmF0b3IoY29u
c3QgU3RhdHVzJiBzKSA6IHN0YXR1c18ocykgeyB9CisgIHZpcnR1YWwgYm9vbCBWYWxpZCgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgIHZpcnR1YWwgdm9pZCBTZWVrKGNvbnN0IFNsaWNlJiB0
YXJnZXQpIHsgfQorICB2aXJ0dWFsIHZvaWQgU2Vla1RvRmlyc3QoKSB7IH0KKyAgdmlydHVhbCB2
b2lkIFNlZWtUb0xhc3QoKSB7IH0KKyAgdmlydHVhbCB2b2lkIE5leHQoKSB7IGFzc2VydChmYWxz
ZSk7IH0KKyAgdmlydHVhbCB2b2lkIFByZXYoKSB7IGFzc2VydChmYWxzZSk7IH0KKyAgU2xpY2Ug
a2V5KCkgY29uc3QgeyBhc3NlcnQoZmFsc2UpOyByZXR1cm4gU2xpY2UoKTsgfQorICBTbGljZSB2
YWx1ZSgpIGNvbnN0IHsgYXNzZXJ0KGZhbHNlKTsgcmV0dXJuIFNsaWNlKCk7IH0KKyAgdmlydHVh
bCBTdGF0dXMgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4gc3RhdHVzXzsgfQorIHByaXZhdGU6Cisg
IFN0YXR1cyBzdGF0dXNfOworfTsKK30gIC8vIG5hbWVzcGFjZQorCitJdGVyYXRvciogTmV3RW1w
dHlJdGVyYXRvcigpIHsKKyAgcmV0dXJuIG5ldyBFbXB0eUl0ZXJhdG9yKFN0YXR1czo6T0soKSk7
Cit9CisKK0l0ZXJhdG9yKiBOZXdFcnJvckl0ZXJhdG9yKGNvbnN0IFN0YXR1cyYgc3RhdHVzKSB7
CisgIHJldHVybiBuZXcgRW1wdHlJdGVyYXRvcihzdGF0dXMpOworfQorCit9ICAvLyBuYW1lc3Bh
Y2UgbGV2ZWxkYgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi90YWJsZS9p
dGVyYXRvcl93cmFwcGVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxlL2l0ZXJh
dG9yX3dyYXBwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZTE2YjNkYmVkZWJlNjVmMzZmYmJmYTllMTgwZmQx
ZmE4MGU4NGEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi90
YWJsZS9pdGVyYXRvcl93cmFwcGVyLmgKQEAgLTAsMCArMSw2MyBAQAorLy8gQ29weXJpZ2h0IChj
KSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMg
ZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgorCisjaWZuZGVmIFNUT1JBR0VfTEVWRUxE
Ql9UQUJMRV9JVEVSQVRPUl9XUkFQUEVSX0hfCisjZGVmaW5lIFNUT1JBR0VfTEVWRUxEQl9UQUJM
RV9JVEVSQVRPUl9XUkFQUEVSX0hfCisKK25hbWVzcGFjZSBsZXZlbGRiIHsKKworLy8gQSBpbnRl
cm5hbCB3cmFwcGVyIGNsYXNzIHdpdGggYW4gaW50ZXJmYWNlIHNpbWlsYXIgdG8gSXRlcmF0b3Ig
dGhhdAorLy8gY2FjaGVzIHRoZSB2YWxpZCgpIGFuZCBrZXkoKSByZXN1bHRzIGZvciBhbiB1bmRl
cmx5aW5nIGl0ZXJhdG9yLgorLy8gVGhpcyBjYW4gaGVscCBhdm9pZCB2aXJ0dWFsIGZ1bmN0aW9u
IGNhbGxzIGFuZCBhbHNvIGdpdmVzIGJldHRlcgorLy8gY2FjaGUgbG9jYWxpdHkuCitjbGFzcyBJ
dGVyYXRvcldyYXBwZXIgeworIHB1YmxpYzoKKyAgSXRlcmF0b3JXcmFwcGVyKCk6IGl0ZXJfKE5V
TEwpLCB2YWxpZF8oZmFsc2UpIHsgfQorICBleHBsaWNpdCBJdGVyYXRvcldyYXBwZXIoSXRlcmF0
b3IqIGl0ZXIpOiBpdGVyXyhOVUxMKSB7CisgICAgU2V0KGl0ZXIpOworICB9CisgIH5JdGVyYXRv
cldyYXBwZXIoKSB7IGRlbGV0ZSBpdGVyXzsgfQorICBJdGVyYXRvciogaXRlcigpIGNvbnN0IHsg
cmV0dXJuIGl0ZXJfOyB9CisKKyAgLy8gVGFrZXMgb3duZXJzaGlwIG9mICJpdGVyIiBhbmQgd2ls
bCBkZWxldGUgaXQgd2hlbiBkZXN0cm95ZWQsIG9yCisgIC8vIHdoZW4gU2V0KCkgaXMgaW52b2tl
ZCBhZ2Fpbi4KKyAgdm9pZCBTZXQoSXRlcmF0b3IqIGl0ZXIpIHsKKyAgICBkZWxldGUgaXRlcl87
CisgICAgaXRlcl8gPSBpdGVyOworICAgIGlmIChpdGVyXyA9PSBOVUxMKSB7CisgICAgICB2YWxp
ZF8gPSBmYWxzZTsKKyAgICB9IGVsc2UgeworICAgICAgVXBkYXRlKCk7CisgICAgfQorICB9CisK
KworICAvLyBJdGVyYXRvciBpbnRlcmZhY2UgbWV0aG9kcworICBib29sIFZhbGlkKCkgY29uc3Qg
ICAgICAgIHsgcmV0dXJuIHZhbGlkXzsgfQorICBTbGljZSBrZXkoKSBjb25zdCAgICAgICAgIHsg
YXNzZXJ0KFZhbGlkKCkpOyByZXR1cm4ga2V5XzsgfQorICBTbGljZSB2YWx1ZSgpIGNvbnN0ICAg
ICAgIHsgYXNzZXJ0KFZhbGlkKCkpOyByZXR1cm4gaXRlcl8tPnZhbHVlKCk7IH0KKyAgLy8gTWV0
aG9kcyBiZWxvdyByZXF1aXJlIGl0ZXIoKSAhPSBOVUxMCisgIFN0YXR1cyBzdGF0dXMoKSBjb25z
dCAgICAgeyBhc3NlcnQoaXRlcl8pOyByZXR1cm4gaXRlcl8tPnN0YXR1cygpOyB9CisgIHZvaWQg
TmV4dCgpICAgICAgICAgICAgICAgeyBhc3NlcnQoaXRlcl8pOyBpdGVyXy0+TmV4dCgpOyAgICAg
ICAgVXBkYXRlKCk7IH0KKyAgdm9pZCBQcmV2KCkgICAgICAgICAgICAgICB7IGFzc2VydChpdGVy
Xyk7IGl0ZXJfLT5QcmV2KCk7ICAgICAgICBVcGRhdGUoKTsgfQorICB2b2lkIFNlZWsoY29uc3Qg
U2xpY2UmIGspIHsgYXNzZXJ0KGl0ZXJfKTsgaXRlcl8tPlNlZWsoayk7ICAgICAgIFVwZGF0ZSgp
OyB9CisgIHZvaWQgU2Vla1RvRmlyc3QoKSAgICAgICAgeyBhc3NlcnQoaXRlcl8pOyBpdGVyXy0+
U2Vla1RvRmlyc3QoKTsgVXBkYXRlKCk7IH0KKyAgdm9pZCBTZWVrVG9MYXN0KCkgICAgICAgICB7
IGFzc2VydChpdGVyXyk7IGl0ZXJfLT5TZWVrVG9MYXN0KCk7ICBVcGRhdGUoKTsgfQorCisgcHJp
dmF0ZToKKyAgdm9pZCBVcGRhdGUoKSB7CisgICAgdmFsaWRfID0gaXRlcl8tPlZhbGlkKCk7Cisg
ICAgaWYgKHZhbGlkXykgeworICAgICAga2V5XyA9IGl0ZXJfLT5rZXkoKTsKKyAgICB9CisgIH0K
KworICBJdGVyYXRvciogaXRlcl87CisgIGJvb2wgdmFsaWRfOworICBTbGljZSBrZXlfOworfTsK
KworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKKworI2VuZGlmICAvLyBTVE9SQUdFX0xFVkVMREJf
VEFCTEVfSVRFUkFUT1JfV1JBUFBFUl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGV2ZWxkYi90YWJsZS9tZXJnZXIuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxl
L21lcmdlci5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZGRlNGRjMjFmZGU5ZDg2ZTk4ZjVhM2YzYjQ5Mzc0NWQw
N2EyMmY3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi90YWJs
ZS9tZXJnZXIuY2MKQEAgLTAsMCArMSwxOTcgQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUg
TGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5h
bWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2luY2x1ZGUgInRhYmxlL21lcmdlci5oIgorCisjaW5j
bHVkZSAibGV2ZWxkYi9jb21wYXJhdG9yLmgiCisjaW5jbHVkZSAibGV2ZWxkYi9pdGVyYXRvci5o
IgorI2luY2x1ZGUgInRhYmxlL2l0ZXJhdG9yX3dyYXBwZXIuaCIKKworbmFtZXNwYWNlIGxldmVs
ZGIgeworCituYW1lc3BhY2UgeworY2xhc3MgTWVyZ2luZ0l0ZXJhdG9yIDogcHVibGljIEl0ZXJh
dG9yIHsKKyBwdWJsaWM6CisgIE1lcmdpbmdJdGVyYXRvcihjb25zdCBDb21wYXJhdG9yKiBjb21w
YXJhdG9yLCBJdGVyYXRvcioqIGNoaWxkcmVuLCBpbnQgbikKKyAgICAgIDogY29tcGFyYXRvcl8o
Y29tcGFyYXRvciksCisgICAgICAgIGNoaWxkcmVuXyhuZXcgSXRlcmF0b3JXcmFwcGVyW25dKSwK
KyAgICAgICAgbl8obiksCisgICAgICAgIGN1cnJlbnRfKE5VTEwpLAorICAgICAgICBkaXJlY3Rp
b25fKGtGb3J3YXJkKSB7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKKyAgICAg
IGNoaWxkcmVuX1tpXS5TZXQoY2hpbGRyZW5baV0pOworICAgIH0KKyAgfQorCisgIHZpcnR1YWwg
fk1lcmdpbmdJdGVyYXRvcigpIHsKKyAgICBkZWxldGVbXSBjaGlsZHJlbl87CisgIH0KKworICB2
aXJ0dWFsIGJvb2wgVmFsaWQoKSBjb25zdCB7CisgICAgcmV0dXJuIChjdXJyZW50XyAhPSBOVUxM
KTsKKyAgfQorCisgIHZpcnR1YWwgdm9pZCBTZWVrVG9GaXJzdCgpIHsKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IG5fOyBpKyspIHsKKyAgICAgIGNoaWxkcmVuX1tpXS5TZWVrVG9GaXJzdCgpOwor
ICAgIH0KKyAgICBGaW5kU21hbGxlc3QoKTsKKyAgICBkaXJlY3Rpb25fID0ga0ZvcndhcmQ7Cisg
IH0KKworICB2aXJ0dWFsIHZvaWQgU2Vla1RvTGFzdCgpIHsKKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IG5fOyBpKyspIHsKKyAgICAgIGNoaWxkcmVuX1tpXS5TZWVrVG9MYXN0KCk7CisgICAgfQor
ICAgIEZpbmRMYXJnZXN0KCk7CisgICAgZGlyZWN0aW9uXyA9IGtSZXZlcnNlOworICB9CisKKyAg
dmlydHVhbCB2b2lkIFNlZWsoY29uc3QgU2xpY2UmIHRhcmdldCkgeworICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgbl87IGkrKykgeworICAgICAgY2hpbGRyZW5fW2ldLlNlZWsodGFyZ2V0KTsKKyAg
ICB9CisgICAgRmluZFNtYWxsZXN0KCk7CisgICAgZGlyZWN0aW9uXyA9IGtGb3J3YXJkOworICB9
CisKKyAgdmlydHVhbCB2b2lkIE5leHQoKSB7CisgICAgYXNzZXJ0KFZhbGlkKCkpOworCisgICAg
Ly8gRW5zdXJlIHRoYXQgYWxsIGNoaWxkcmVuIGFyZSBwb3NpdGlvbmVkIGFmdGVyIGtleSgpLgor
ICAgIC8vIElmIHdlIGFyZSBtb3ZpbmcgaW4gdGhlIGZvcndhcmQgZGlyZWN0aW9uLCBpdCBpcyBh
bHJlYWR5CisgICAgLy8gdHJ1ZSBmb3IgYWxsIG9mIHRoZSBub24tY3VycmVudF8gY2hpbGRyZW4g
c2luY2UgY3VycmVudF8gaXMKKyAgICAvLyB0aGUgc21hbGxlc3QgY2hpbGQgYW5kIGtleSgpID09
IGN1cnJlbnRfLT5rZXkoKS4gIE90aGVyd2lzZSwKKyAgICAvLyB3ZSBleHBsaWNpdGx5IHBvc2l0
aW9uIHRoZSBub24tY3VycmVudF8gY2hpbGRyZW4uCisgICAgaWYgKGRpcmVjdGlvbl8gIT0ga0Zv
cndhcmQpIHsKKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbl87IGkrKykgeworICAgICAgICBJ
dGVyYXRvcldyYXBwZXIqIGNoaWxkID0gJmNoaWxkcmVuX1tpXTsKKyAgICAgICAgaWYgKGNoaWxk
ICE9IGN1cnJlbnRfKSB7CisgICAgICAgICAgY2hpbGQtPlNlZWsoa2V5KCkpOworICAgICAgICAg
IGlmIChjaGlsZC0+VmFsaWQoKSAmJgorICAgICAgICAgICAgICBjb21wYXJhdG9yXy0+Q29tcGFy
ZShrZXkoKSwgY2hpbGQtPmtleSgpKSA9PSAwKSB7CisgICAgICAgICAgICBjaGlsZC0+TmV4dCgp
OworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgZGlyZWN0aW9uXyA9IGtG
b3J3YXJkOworICAgIH0KKworICAgIGN1cnJlbnRfLT5OZXh0KCk7CisgICAgRmluZFNtYWxsZXN0
KCk7CisgIH0KKworICB2aXJ0dWFsIHZvaWQgUHJldigpIHsKKyAgICBhc3NlcnQoVmFsaWQoKSk7
CisKKyAgICAvLyBFbnN1cmUgdGhhdCBhbGwgY2hpbGRyZW4gYXJlIHBvc2l0aW9uZWQgYmVmb3Jl
IGtleSgpLgorICAgIC8vIElmIHdlIGFyZSBtb3ZpbmcgaW4gdGhlIHJldmVyc2UgZGlyZWN0aW9u
LCBpdCBpcyBhbHJlYWR5CisgICAgLy8gdHJ1ZSBmb3IgYWxsIG9mIHRoZSBub24tY3VycmVudF8g
Y2hpbGRyZW4gc2luY2UgY3VycmVudF8gaXMKKyAgICAvLyB0aGUgbGFyZ2VzdCBjaGlsZCBhbmQg
a2V5KCkgPT0gY3VycmVudF8tPmtleSgpLiAgT3RoZXJ3aXNlLAorICAgIC8vIHdlIGV4cGxpY2l0
bHkgcG9zaXRpb24gdGhlIG5vbi1jdXJyZW50XyBjaGlsZHJlbi4KKyAgICBpZiAoZGlyZWN0aW9u
XyAhPSBrUmV2ZXJzZSkgeworICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuXzsgaSsrKSB7Cisg
ICAgICAgIEl0ZXJhdG9yV3JhcHBlciogY2hpbGQgPSAmY2hpbGRyZW5fW2ldOworICAgICAgICBp
ZiAoY2hpbGQgIT0gY3VycmVudF8pIHsKKyAgICAgICAgICBjaGlsZC0+U2VlayhrZXkoKSk7Cisg
ICAgICAgICAgaWYgKGNoaWxkLT5WYWxpZCgpKSB7CisgICAgICAgICAgICAvLyBDaGlsZCBpcyBh
dCBmaXJzdCBlbnRyeSA+PSBrZXkoKS4gIFN0ZXAgYmFjayBvbmUgdG8gYmUgPCBrZXkoKQorICAg
ICAgICAgICAgY2hpbGQtPlByZXYoKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
Ly8gQ2hpbGQgaGFzIG5vIGVudHJpZXMgPj0ga2V5KCkuICBQb3NpdGlvbiBhdCBsYXN0IGVudHJ5
LgorICAgICAgICAgICAgY2hpbGQtPlNlZWtUb0xhc3QoKTsKKyAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgIH0KKyAgICAgIGRpcmVjdGlvbl8gPSBrUmV2ZXJzZTsKKyAgICB9CisKKyAgICBj
dXJyZW50Xy0+UHJldigpOworICAgIEZpbmRMYXJnZXN0KCk7CisgIH0KKworICB2aXJ0dWFsIFNs
aWNlIGtleSgpIGNvbnN0IHsKKyAgICBhc3NlcnQoVmFsaWQoKSk7CisgICAgcmV0dXJuIGN1cnJl
bnRfLT5rZXkoKTsKKyAgfQorCisgIHZpcnR1YWwgU2xpY2UgdmFsdWUoKSBjb25zdCB7CisgICAg
YXNzZXJ0KFZhbGlkKCkpOworICAgIHJldHVybiBjdXJyZW50Xy0+dmFsdWUoKTsKKyAgfQorCisg
IHZpcnR1YWwgU3RhdHVzIHN0YXR1cygpIGNvbnN0IHsKKyAgICBTdGF0dXMgc3RhdHVzOworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbl87IGkrKykgeworICAgICAgc3RhdHVzID0gY2hpbGRyZW5f
W2ldLnN0YXR1cygpOworICAgICAgaWYgKCFzdGF0dXMub2soKSkgeworICAgICAgICBicmVhazsK
KyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHN0YXR1czsKKyAgfQorCisgcHJpdmF0ZToKKyAg
dm9pZCBGaW5kU21hbGxlc3QoKTsKKyAgdm9pZCBGaW5kTGFyZ2VzdCgpOworCisgIC8vIFdlIG1p
Z2h0IHdhbnQgdG8gdXNlIGEgaGVhcCBpbiBjYXNlIHRoZXJlIGFyZSBsb3RzIG9mIGNoaWxkcmVu
LgorICAvLyBGb3Igbm93IHdlIHVzZSBhIHNpbXBsZSBhcnJheSBzaW5jZSB3ZSBleHBlY3QgYSB2
ZXJ5IHNtYWxsIG51bWJlcgorICAvLyBvZiBjaGlsZHJlbiBpbiBsZXZlbGRiLgorICBjb25zdCBD
b21wYXJhdG9yKiBjb21wYXJhdG9yXzsKKyAgSXRlcmF0b3JXcmFwcGVyKiBjaGlsZHJlbl87Cisg
IGludCBuXzsKKyAgSXRlcmF0b3JXcmFwcGVyKiBjdXJyZW50XzsKKworICAvLyBXaGljaCBkaXJl
Y3Rpb24gaXMgdGhlIGl0ZXJhdG9yIG1vdmluZz8KKyAgZW51bSBEaXJlY3Rpb24geworICAgIGtG
b3J3YXJkLAorICAgIGtSZXZlcnNlCisgIH07CisgIERpcmVjdGlvbiBkaXJlY3Rpb25fOworfTsK
Kwordm9pZCBNZXJnaW5nSXRlcmF0b3I6OkZpbmRTbWFsbGVzdCgpIHsKKyAgSXRlcmF0b3JXcmFw
cGVyKiBzbWFsbGVzdCA9IE5VTEw7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgbl87IGkrKykgewor
ICAgIEl0ZXJhdG9yV3JhcHBlciogY2hpbGQgPSAmY2hpbGRyZW5fW2ldOworICAgIGlmIChjaGls
ZC0+VmFsaWQoKSkgeworICAgICAgaWYgKHNtYWxsZXN0ID09IE5VTEwpIHsKKyAgICAgICAgc21h
bGxlc3QgPSBjaGlsZDsKKyAgICAgIH0gZWxzZSBpZiAoY29tcGFyYXRvcl8tPkNvbXBhcmUoY2hp
bGQtPmtleSgpLCBzbWFsbGVzdC0+a2V5KCkpIDwgMCkgeworICAgICAgICBzbWFsbGVzdCA9IGNo
aWxkOworICAgICAgfQorICAgIH0KKyAgfQorICBjdXJyZW50XyA9IHNtYWxsZXN0OworfQorCit2
b2lkIE1lcmdpbmdJdGVyYXRvcjo6RmluZExhcmdlc3QoKSB7CisgIEl0ZXJhdG9yV3JhcHBlciog
bGFyZ2VzdCA9IE5VTEw7CisgIGZvciAoaW50IGkgPSBuXy0xOyBpID49IDA7IGktLSkgeworICAg
IEl0ZXJhdG9yV3JhcHBlciogY2hpbGQgPSAmY2hpbGRyZW5fW2ldOworICAgIGlmIChjaGlsZC0+
VmFsaWQoKSkgeworICAgICAgaWYgKGxhcmdlc3QgPT0gTlVMTCkgeworICAgICAgICBsYXJnZXN0
ID0gY2hpbGQ7CisgICAgICB9IGVsc2UgaWYgKGNvbXBhcmF0b3JfLT5Db21wYXJlKGNoaWxkLT5r
ZXkoKSwgbGFyZ2VzdC0+a2V5KCkpID4gMCkgeworICAgICAgICBsYXJnZXN0ID0gY2hpbGQ7Cisg
ICAgICB9CisgICAgfQorICB9CisgIGN1cnJlbnRfID0gbGFyZ2VzdDsKK30KK30gIC8vIG5hbWVz
cGFjZQorCitJdGVyYXRvciogTmV3TWVyZ2luZ0l0ZXJhdG9yKGNvbnN0IENvbXBhcmF0b3IqIGNt
cCwgSXRlcmF0b3IqKiBsaXN0LCBpbnQgbikgeworICBhc3NlcnQobiA+PSAwKTsKKyAgaWYgKG4g
PT0gMCkgeworICAgIHJldHVybiBOZXdFbXB0eUl0ZXJhdG9yKCk7CisgIH0gZWxzZSBpZiAobiA9
PSAxKSB7CisgICAgcmV0dXJuIGxpc3RbMF07CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIG5ldyBN
ZXJnaW5nSXRlcmF0b3IoY21wLCBsaXN0LCBuKTsKKyAgfQorfQorCit9ICAvLyBuYW1lc3BhY2Ug
bGV2ZWxkYgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi90YWJsZS9tZXJn
ZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdGFibGUvbWVyZ2VyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uOTFkZGQ4MGZhYTM1YmZjZjdlZGI4MWVlMmYyMmVkM2YyOWI1OGY5OAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdGFibGUvbWVyZ2VyLmgKQEAgLTAsMCAr
MSwyNiBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgor
CisjaWZuZGVmIFNUT1JBR0VfTEVWRUxEQl9UQUJMRV9NRVJHRVJfSF8KKyNkZWZpbmUgU1RPUkFH
RV9MRVZFTERCX1RBQkxFX01FUkdFUl9IXworCituYW1lc3BhY2UgbGV2ZWxkYiB7CisKK2NsYXNz
IENvbXBhcmF0b3I7CitjbGFzcyBJdGVyYXRvcjsKKworLy8gUmV0dXJuIGFuIGl0ZXJhdG9yIHRo
YXQgcHJvdmlkZWQgdGhlIHVuaW9uIG9mIHRoZSBkYXRhIGluCisvLyBjaGlsZHJlblswLG4tMV0u
ICBUYWtlcyBvd25lcnNoaXAgb2YgdGhlIGNoaWxkIGl0ZXJhdG9ycyBhbmQKKy8vIHdpbGwgZGVs
ZXRlIHRoZW0gd2hlbiB0aGUgcmVzdWx0IGl0ZXJhdG9yIGlzIGRlbGV0ZWQuCisvLworLy8gVGhl
IHJlc3VsdCBkb2VzIG5vIGR1cGxpY2F0ZSBzdXBwcmVzc2lvbi4gIEkuZS4sIGlmIGEgcGFydGlj
dWxhcgorLy8ga2V5IGlzIHByZXNlbnQgaW4gSyBjaGlsZCBpdGVyYXRvcnMsIGl0IHdpbGwgYmUg
eWllbGRlZCBLIHRpbWVzLgorLy8KKy8vIFJFUVVJUkVTOiBuID49IDAKK2V4dGVybiBJdGVyYXRv
ciogTmV3TWVyZ2luZ0l0ZXJhdG9yKAorICAgIGNvbnN0IENvbXBhcmF0b3IqIGNvbXBhcmF0b3Is
IEl0ZXJhdG9yKiogY2hpbGRyZW4sIGludCBuKTsKKworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIK
KworI2VuZGlmICAvLyBTVE9SQUdFX0xFVkVMREJfVEFCTEVfTUVSR0VSX0hfCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxlL3RhYmxlLmNjIGIvU291cmNlL1RoaXJk
UGFydHkvbGV2ZWxkYi90YWJsZS90YWJsZS5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYmQ2ZDNhMWJmMDg2N2Uy
ODVkZDUzMjA3ODc2NjA1Y2NhM2JjZjA3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvbGV2ZWxkYi90YWJsZS90YWJsZS5jYwpAQCAtMCwwICsxLDI3NiBAQAorLy8gQ29weXJp
Z2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFV
VEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgorCisjaW5jbHVkZSAibGV2ZWxk
Yi90YWJsZS5oIgorCisjaW5jbHVkZSAibGV2ZWxkYi9jYWNoZS5oIgorI2luY2x1ZGUgImxldmVs
ZGIvY29tcGFyYXRvci5oIgorI2luY2x1ZGUgImxldmVsZGIvZW52LmgiCisjaW5jbHVkZSAibGV2
ZWxkYi9maWx0ZXJfcG9saWN5LmgiCisjaW5jbHVkZSAibGV2ZWxkYi9vcHRpb25zLmgiCisjaW5j
bHVkZSAidGFibGUvYmxvY2suaCIKKyNpbmNsdWRlICJ0YWJsZS9maWx0ZXJfYmxvY2suaCIKKyNp
bmNsdWRlICJ0YWJsZS9mb3JtYXQuaCIKKyNpbmNsdWRlICJ0YWJsZS90d29fbGV2ZWxfaXRlcmF0
b3IuaCIKKyNpbmNsdWRlICJ1dGlsL2NvZGluZy5oIgorCituYW1lc3BhY2UgbGV2ZWxkYiB7CisK
K3N0cnVjdCBUYWJsZTo6UmVwIHsKKyAgflJlcCgpIHsKKyAgICBkZWxldGUgZmlsdGVyOworICAg
IGRlbGV0ZSBbXSBmaWx0ZXJfZGF0YTsKKyAgICBkZWxldGUgaW5kZXhfYmxvY2s7CisgIH0KKwor
ICBPcHRpb25zIG9wdGlvbnM7CisgIFN0YXR1cyBzdGF0dXM7CisgIFJhbmRvbUFjY2Vzc0ZpbGUq
IGZpbGU7CisgIHVpbnQ2NF90IGNhY2hlX2lkOworICBGaWx0ZXJCbG9ja1JlYWRlciogZmlsdGVy
OworICBjb25zdCBjaGFyKiBmaWx0ZXJfZGF0YTsKKworICBCbG9ja0hhbmRsZSBtZXRhaW5kZXhf
aGFuZGxlOyAgLy8gSGFuZGxlIHRvIG1ldGFpbmRleF9ibG9jazogc2F2ZWQgZnJvbSBmb290ZXIK
KyAgQmxvY2sqIGluZGV4X2Jsb2NrOworfTsKKworU3RhdHVzIFRhYmxlOjpPcGVuKGNvbnN0IE9w
dGlvbnMmIG9wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgUmFuZG9tQWNjZXNzRmlsZSogZmls
ZSwKKyAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBzaXplLAorICAgICAgICAgICAgICAgICAg
IFRhYmxlKiogdGFibGUpIHsKKyAgKnRhYmxlID0gTlVMTDsKKyAgaWYgKHNpemUgPCBGb290ZXI6
OmtFbmNvZGVkTGVuZ3RoKSB7CisgICAgcmV0dXJuIFN0YXR1czo6SW52YWxpZEFyZ3VtZW50KCJm
aWxlIGlzIHRvbyBzaG9ydCB0byBiZSBhbiBzc3RhYmxlIik7CisgIH0KKworICBjaGFyIGZvb3Rl
cl9zcGFjZVtGb290ZXI6OmtFbmNvZGVkTGVuZ3RoXTsKKyAgU2xpY2UgZm9vdGVyX2lucHV0Owor
ICBTdGF0dXMgcyA9IGZpbGUtPlJlYWQoc2l6ZSAtIEZvb3Rlcjo6a0VuY29kZWRMZW5ndGgsIEZv
b3Rlcjo6a0VuY29kZWRMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAmZm9vdGVyX2lu
cHV0LCBmb290ZXJfc3BhY2UpOworICBpZiAoIXMub2soKSkgcmV0dXJuIHM7CisKKyAgRm9vdGVy
IGZvb3RlcjsKKyAgcyA9IGZvb3Rlci5EZWNvZGVGcm9tKCZmb290ZXJfaW5wdXQpOworICBpZiAo
IXMub2soKSkgcmV0dXJuIHM7CisKKyAgLy8gUmVhZCB0aGUgaW5kZXggYmxvY2sKKyAgQmxvY2tD
b250ZW50cyBjb250ZW50czsKKyAgQmxvY2sqIGluZGV4X2Jsb2NrID0gTlVMTDsKKyAgaWYgKHMu
b2soKSkgeworICAgIHMgPSBSZWFkQmxvY2soZmlsZSwgUmVhZE9wdGlvbnMoKSwgZm9vdGVyLmlu
ZGV4X2hhbmRsZSgpLCAmY29udGVudHMpOworICAgIGlmIChzLm9rKCkpIHsKKyAgICAgIGluZGV4
X2Jsb2NrID0gbmV3IEJsb2NrKGNvbnRlbnRzKTsKKyAgICB9CisgIH0KKworICBpZiAocy5vaygp
KSB7CisgICAgLy8gV2UndmUgc3VjY2Vzc2Z1bGx5IHJlYWQgdGhlIGZvb3RlciBhbmQgdGhlIGlu
ZGV4IGJsb2NrOiB3ZSdyZQorICAgIC8vIHJlYWR5IHRvIHNlcnZlIHJlcXVlc3RzLgorICAgIFJl
cCogcmVwID0gbmV3IFRhYmxlOjpSZXA7CisgICAgcmVwLT5vcHRpb25zID0gb3B0aW9uczsKKyAg
ICByZXAtPmZpbGUgPSBmaWxlOworICAgIHJlcC0+bWV0YWluZGV4X2hhbmRsZSA9IGZvb3Rlci5t
ZXRhaW5kZXhfaGFuZGxlKCk7CisgICAgcmVwLT5pbmRleF9ibG9jayA9IGluZGV4X2Jsb2NrOwor
ICAgIHJlcC0+Y2FjaGVfaWQgPSAob3B0aW9ucy5ibG9ja19jYWNoZSA/IG9wdGlvbnMuYmxvY2tf
Y2FjaGUtPk5ld0lkKCkgOiAwKTsKKyAgICByZXAtPmZpbHRlcl9kYXRhID0gTlVMTDsKKyAgICBy
ZXAtPmZpbHRlciA9IE5VTEw7CisgICAgKnRhYmxlID0gbmV3IFRhYmxlKHJlcCk7CisgICAgKCp0
YWJsZSktPlJlYWRNZXRhKGZvb3Rlcik7CisgIH0gZWxzZSB7CisgICAgaWYgKGluZGV4X2Jsb2Nr
KSBkZWxldGUgaW5kZXhfYmxvY2s7CisgIH0KKworICByZXR1cm4gczsKK30KKwordm9pZCBUYWJs
ZTo6UmVhZE1ldGEoY29uc3QgRm9vdGVyJiBmb290ZXIpIHsKKyAgaWYgKHJlcF8tPm9wdGlvbnMu
ZmlsdGVyX3BvbGljeSA9PSBOVUxMKSB7CisgICAgcmV0dXJuOyAgLy8gRG8gbm90IG5lZWQgYW55
IG1ldGFkYXRhCisgIH0KKworICAvLyBUT0RPKHNhbmpheSk6IFNraXAgdGhpcyBpZiBmb290ZXIu
bWV0YWluZGV4X2hhbmRsZSgpIHNpemUgaW5kaWNhdGVzCisgIC8vIGl0IGlzIGFuIGVtcHR5IGJs
b2NrLgorICBSZWFkT3B0aW9ucyBvcHQ7CisgIEJsb2NrQ29udGVudHMgY29udGVudHM7CisgIGlm
ICghUmVhZEJsb2NrKHJlcF8tPmZpbGUsIG9wdCwgZm9vdGVyLm1ldGFpbmRleF9oYW5kbGUoKSwg
JmNvbnRlbnRzKS5vaygpKSB7CisgICAgLy8gRG8gbm90IHByb3BhZ2F0ZSBlcnJvcnMgc2luY2Ug
bWV0YSBpbmZvIGlzIG5vdCBuZWVkZWQgZm9yIG9wZXJhdGlvbgorICAgIHJldHVybjsKKyAgfQor
ICBCbG9jayogbWV0YSA9IG5ldyBCbG9jayhjb250ZW50cyk7CisKKyAgSXRlcmF0b3IqIGl0ZXIg
PSBtZXRhLT5OZXdJdGVyYXRvcihCeXRld2lzZUNvbXBhcmF0b3IoKSk7CisgIHN0ZDo6c3RyaW5n
IGtleSA9ICJmaWx0ZXIuIjsKKyAga2V5LmFwcGVuZChyZXBfLT5vcHRpb25zLmZpbHRlcl9wb2xp
Y3ktPk5hbWUoKSk7CisgIGl0ZXItPlNlZWsoa2V5KTsKKyAgaWYgKGl0ZXItPlZhbGlkKCkgJiYg
aXRlci0+a2V5KCkgPT0gU2xpY2Uoa2V5KSkgeworICAgIFJlYWRGaWx0ZXIoaXRlci0+dmFsdWUo
KSk7CisgIH0KKyAgZGVsZXRlIGl0ZXI7CisgIGRlbGV0ZSBtZXRhOworfQorCit2b2lkIFRhYmxl
OjpSZWFkRmlsdGVyKGNvbnN0IFNsaWNlJiBmaWx0ZXJfaGFuZGxlX3ZhbHVlKSB7CisgIFNsaWNl
IHYgPSBmaWx0ZXJfaGFuZGxlX3ZhbHVlOworICBCbG9ja0hhbmRsZSBmaWx0ZXJfaGFuZGxlOwor
ICBpZiAoIWZpbHRlcl9oYW5kbGUuRGVjb2RlRnJvbSgmdikub2soKSkgeworICAgIHJldHVybjsK
KyAgfQorCisgIC8vIFdlIG1pZ2h0IHdhbnQgdG8gdW5pZnkgd2l0aCBSZWFkQmxvY2soKSBpZiB3
ZSBzdGFydAorICAvLyByZXF1aXJpbmcgY2hlY2tzdW0gdmVyaWZpY2F0aW9uIGluIFRhYmxlOjpP
cGVuLgorICBSZWFkT3B0aW9ucyBvcHQ7CisgIEJsb2NrQ29udGVudHMgYmxvY2s7CisgIGlmICgh
UmVhZEJsb2NrKHJlcF8tPmZpbGUsIG9wdCwgZmlsdGVyX2hhbmRsZSwgJmJsb2NrKS5vaygpKSB7
CisgICAgcmV0dXJuOworICB9CisgIGlmIChibG9jay5oZWFwX2FsbG9jYXRlZCkgeworICAgIHJl
cF8tPmZpbHRlcl9kYXRhID0gYmxvY2suZGF0YS5kYXRhKCk7ICAgICAvLyBXaWxsIG5lZWQgdG8g
ZGVsZXRlIGxhdGVyCisgIH0KKyAgcmVwXy0+ZmlsdGVyID0gbmV3IEZpbHRlckJsb2NrUmVhZGVy
KHJlcF8tPm9wdGlvbnMuZmlsdGVyX3BvbGljeSwgYmxvY2suZGF0YSk7Cit9CisKK1RhYmxlOjp+
VGFibGUoKSB7CisgIGRlbGV0ZSByZXBfOworfQorCitzdGF0aWMgdm9pZCBEZWxldGVCbG9jayh2
b2lkKiBhcmcsIHZvaWQqIGlnbm9yZWQpIHsKKyAgZGVsZXRlIHJlaW50ZXJwcmV0X2Nhc3Q8Qmxv
Y2sqPihhcmcpOworfQorCitzdGF0aWMgdm9pZCBEZWxldGVDYWNoZWRCbG9jayhjb25zdCBTbGlj
ZSYga2V5LCB2b2lkKiB2YWx1ZSkgeworICBCbG9jayogYmxvY2sgPSByZWludGVycHJldF9jYXN0
PEJsb2NrKj4odmFsdWUpOworICBkZWxldGUgYmxvY2s7Cit9CisKK3N0YXRpYyB2b2lkIFJlbGVh
c2VCbG9jayh2b2lkKiBhcmcsIHZvaWQqIGgpIHsKKyAgQ2FjaGUqIGNhY2hlID0gcmVpbnRlcnBy
ZXRfY2FzdDxDYWNoZSo+KGFyZyk7CisgIENhY2hlOjpIYW5kbGUqIGhhbmRsZSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Q2FjaGU6OkhhbmRsZSo+KGgpOworICBjYWNoZS0+UmVsZWFzZShoYW5kbGUpOwor
fQorCisvLyBDb252ZXJ0IGFuIGluZGV4IGl0ZXJhdG9yIHZhbHVlIChpLmUuLCBhbiBlbmNvZGVk
IEJsb2NrSGFuZGxlKQorLy8gaW50byBhbiBpdGVyYXRvciBvdmVyIHRoZSBjb250ZW50cyBvZiB0
aGUgY29ycmVzcG9uZGluZyBibG9jay4KK0l0ZXJhdG9yKiBUYWJsZTo6QmxvY2tSZWFkZXIodm9p
ZCogYXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZWFkT3B0aW9ucyYg
b3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2xpY2UmIGluZGV4
X3ZhbHVlKSB7CisgIFRhYmxlKiB0YWJsZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8VGFibGUqPihhcmcp
OworICBDYWNoZSogYmxvY2tfY2FjaGUgPSB0YWJsZS0+cmVwXy0+b3B0aW9ucy5ibG9ja19jYWNo
ZTsKKyAgQmxvY2sqIGJsb2NrID0gTlVMTDsKKyAgQ2FjaGU6OkhhbmRsZSogY2FjaGVfaGFuZGxl
ID0gTlVMTDsKKworICBCbG9ja0hhbmRsZSBoYW5kbGU7CisgIFNsaWNlIGlucHV0ID0gaW5kZXhf
dmFsdWU7CisgIFN0YXR1cyBzID0gaGFuZGxlLkRlY29kZUZyb20oJmlucHV0KTsKKyAgLy8gV2Ug
aW50ZW50aW9uYWxseSBhbGxvdyBleHRyYSBzdHVmZiBpbiBpbmRleF92YWx1ZSBzbyB0aGF0IHdl
CisgIC8vIGNhbiBhZGQgbW9yZSBmZWF0dXJlcyBpbiB0aGUgZnV0dXJlLgorCisgIGlmIChzLm9r
KCkpIHsKKyAgICBCbG9ja0NvbnRlbnRzIGNvbnRlbnRzOworICAgIGlmIChibG9ja19jYWNoZSAh
PSBOVUxMKSB7CisgICAgICBjaGFyIGNhY2hlX2tleV9idWZmZXJbMTZdOworICAgICAgRW5jb2Rl
Rml4ZWQ2NChjYWNoZV9rZXlfYnVmZmVyLCB0YWJsZS0+cmVwXy0+Y2FjaGVfaWQpOworICAgICAg
RW5jb2RlRml4ZWQ2NChjYWNoZV9rZXlfYnVmZmVyKzgsIGhhbmRsZS5vZmZzZXQoKSk7CisgICAg
ICBTbGljZSBrZXkoY2FjaGVfa2V5X2J1ZmZlciwgc2l6ZW9mKGNhY2hlX2tleV9idWZmZXIpKTsK
KyAgICAgIGNhY2hlX2hhbmRsZSA9IGJsb2NrX2NhY2hlLT5Mb29rdXAoa2V5KTsKKyAgICAgIGlm
IChjYWNoZV9oYW5kbGUgIT0gTlVMTCkgeworICAgICAgICBibG9jayA9IHJlaW50ZXJwcmV0X2Nh
c3Q8QmxvY2sqPihibG9ja19jYWNoZS0+VmFsdWUoY2FjaGVfaGFuZGxlKSk7CisgICAgICB9IGVs
c2UgeworICAgICAgICBzID0gUmVhZEJsb2NrKHRhYmxlLT5yZXBfLT5maWxlLCBvcHRpb25zLCBo
YW5kbGUsICZjb250ZW50cyk7CisgICAgICAgIGlmIChzLm9rKCkpIHsKKyAgICAgICAgICBibG9j
ayA9IG5ldyBCbG9jayhjb250ZW50cyk7CisgICAgICAgICAgaWYgKGNvbnRlbnRzLmNhY2hhYmxl
ICYmIG9wdGlvbnMuZmlsbF9jYWNoZSkgeworICAgICAgICAgICAgY2FjaGVfaGFuZGxlID0gYmxv
Y2tfY2FjaGUtPkluc2VydCgKKyAgICAgICAgICAgICAgICBrZXksIGJsb2NrLCBibG9jay0+c2l6
ZSgpLCAmRGVsZXRlQ2FjaGVkQmxvY2spOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
fQorICAgIH0gZWxzZSB7CisgICAgICBzID0gUmVhZEJsb2NrKHRhYmxlLT5yZXBfLT5maWxlLCBv
cHRpb25zLCBoYW5kbGUsICZjb250ZW50cyk7CisgICAgICBpZiAocy5vaygpKSB7CisgICAgICAg
IGJsb2NrID0gbmV3IEJsb2NrKGNvbnRlbnRzKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBJ
dGVyYXRvciogaXRlcjsKKyAgaWYgKGJsb2NrICE9IE5VTEwpIHsKKyAgICBpdGVyID0gYmxvY2st
Pk5ld0l0ZXJhdG9yKHRhYmxlLT5yZXBfLT5vcHRpb25zLmNvbXBhcmF0b3IpOworICAgIGlmIChj
YWNoZV9oYW5kbGUgPT0gTlVMTCkgeworICAgICAgaXRlci0+UmVnaXN0ZXJDbGVhbnVwKCZEZWxl
dGVCbG9jaywgYmxvY2ssIE5VTEwpOworICAgIH0gZWxzZSB7CisgICAgICBpdGVyLT5SZWdpc3Rl
ckNsZWFudXAoJlJlbGVhc2VCbG9jaywgYmxvY2tfY2FjaGUsIGNhY2hlX2hhbmRsZSk7CisgICAg
fQorICB9IGVsc2UgeworICAgIGl0ZXIgPSBOZXdFcnJvckl0ZXJhdG9yKHMpOworICB9CisgIHJl
dHVybiBpdGVyOworfQorCitJdGVyYXRvciogVGFibGU6Ok5ld0l0ZXJhdG9yKGNvbnN0IFJlYWRP
cHRpb25zJiBvcHRpb25zKSBjb25zdCB7CisgIHJldHVybiBOZXdUd29MZXZlbEl0ZXJhdG9yKAor
ICAgICAgcmVwXy0+aW5kZXhfYmxvY2stPk5ld0l0ZXJhdG9yKHJlcF8tPm9wdGlvbnMuY29tcGFy
YXRvciksCisgICAgICAmVGFibGU6OkJsb2NrUmVhZGVyLCBjb25zdF9jYXN0PFRhYmxlKj4odGhp
cyksIG9wdGlvbnMpOworfQorCitTdGF0dXMgVGFibGU6OkludGVybmFsR2V0KGNvbnN0IFJlYWRP
cHRpb25zJiBvcHRpb25zLCBjb25zdCBTbGljZSYgaywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgdm9pZCogYXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqc2F2ZXIpKHZv
aWQqLCBjb25zdCBTbGljZSYsIGNvbnN0IFNsaWNlJikpIHsKKyAgU3RhdHVzIHM7CisgIEl0ZXJh
dG9yKiBpaXRlciA9IHJlcF8tPmluZGV4X2Jsb2NrLT5OZXdJdGVyYXRvcihyZXBfLT5vcHRpb25z
LmNvbXBhcmF0b3IpOworICBpaXRlci0+U2VlayhrKTsKKyAgaWYgKGlpdGVyLT5WYWxpZCgpKSB7
CisgICAgU2xpY2UgaGFuZGxlX3ZhbHVlID0gaWl0ZXItPnZhbHVlKCk7CisgICAgRmlsdGVyQmxv
Y2tSZWFkZXIqIGZpbHRlciA9IHJlcF8tPmZpbHRlcjsKKyAgICBCbG9ja0hhbmRsZSBoYW5kbGU7
CisgICAgaWYgKGZpbHRlciAhPSBOVUxMICYmCisgICAgICAgIGhhbmRsZS5EZWNvZGVGcm9tKCZo
YW5kbGVfdmFsdWUpLm9rKCkgJiYKKyAgICAgICAgIWZpbHRlci0+S2V5TWF5TWF0Y2goaGFuZGxl
Lm9mZnNldCgpLCBrKSkgeworICAgICAgLy8gTm90IGZvdW5kCisgICAgfSBlbHNlIHsKKyAgICAg
IFNsaWNlIGhhbmRsZSA9IGlpdGVyLT52YWx1ZSgpOworICAgICAgSXRlcmF0b3IqIGJsb2NrX2l0
ZXIgPSBCbG9ja1JlYWRlcih0aGlzLCBvcHRpb25zLCBpaXRlci0+dmFsdWUoKSk7CisgICAgICBi
bG9ja19pdGVyLT5TZWVrKGspOworICAgICAgaWYgKGJsb2NrX2l0ZXItPlZhbGlkKCkpIHsKKyAg
ICAgICAgKCpzYXZlcikoYXJnLCBibG9ja19pdGVyLT5rZXkoKSwgYmxvY2tfaXRlci0+dmFsdWUo
KSk7CisgICAgICB9CisgICAgICBzID0gYmxvY2tfaXRlci0+c3RhdHVzKCk7CisgICAgICBkZWxl
dGUgYmxvY2tfaXRlcjsKKyAgICB9CisgIH0KKyAgaWYgKHMub2soKSkgeworICAgIHMgPSBpaXRl
ci0+c3RhdHVzKCk7CisgIH0KKyAgZGVsZXRlIGlpdGVyOworICByZXR1cm4gczsKK30KKworCit1
aW50NjRfdCBUYWJsZTo6QXBwcm94aW1hdGVPZmZzZXRPZihjb25zdCBTbGljZSYga2V5KSBjb25z
dCB7CisgIEl0ZXJhdG9yKiBpbmRleF9pdGVyID0KKyAgICAgIHJlcF8tPmluZGV4X2Jsb2NrLT5O
ZXdJdGVyYXRvcihyZXBfLT5vcHRpb25zLmNvbXBhcmF0b3IpOworICBpbmRleF9pdGVyLT5TZWVr
KGtleSk7CisgIHVpbnQ2NF90IHJlc3VsdDsKKyAgaWYgKGluZGV4X2l0ZXItPlZhbGlkKCkpIHsK
KyAgICBCbG9ja0hhbmRsZSBoYW5kbGU7CisgICAgU2xpY2UgaW5wdXQgPSBpbmRleF9pdGVyLT52
YWx1ZSgpOworICAgIFN0YXR1cyBzID0gaGFuZGxlLkRlY29kZUZyb20oJmlucHV0KTsKKyAgICBp
ZiAocy5vaygpKSB7CisgICAgICByZXN1bHQgPSBoYW5kbGUub2Zmc2V0KCk7CisgICAgfSBlbHNl
IHsKKyAgICAgIC8vIFN0cmFuZ2U6IHdlIGNhbid0IGRlY29kZSB0aGUgYmxvY2sgaGFuZGxlIGlu
IHRoZSBpbmRleCBibG9jay4KKyAgICAgIC8vIFdlJ2xsIGp1c3QgcmV0dXJuIHRoZSBvZmZzZXQg
b2YgdGhlIG1ldGFpbmRleCBibG9jaywgd2hpY2ggaXMKKyAgICAgIC8vIGNsb3NlIHRvIHRoZSB3
aG9sZSBmaWxlIHNpemUgZm9yIHRoaXMgY2FzZS4KKyAgICAgIHJlc3VsdCA9IHJlcF8tPm1ldGFp
bmRleF9oYW5kbGUub2Zmc2V0KCk7CisgICAgfQorICB9IGVsc2UgeworICAgIC8vIGtleSBpcyBw
YXN0IHRoZSBsYXN0IGtleSBpbiB0aGUgZmlsZS4gIEFwcHJveGltYXRlIHRoZSBvZmZzZXQKKyAg
ICAvLyBieSByZXR1cm5pbmcgdGhlIG9mZnNldCBvZiB0aGUgbWV0YWluZGV4IGJsb2NrICh3aGlj
aCBpcworICAgIC8vIHJpZ2h0IG5lYXIgdGhlIGVuZCBvZiB0aGUgZmlsZSkuCisgICAgcmVzdWx0
ID0gcmVwXy0+bWV0YWluZGV4X2hhbmRsZS5vZmZzZXQoKTsKKyAgfQorICBkZWxldGUgaW5kZXhf
aXRlcjsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdGFibGUvdGFibGVfYnVpbGRlci5j
YyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdGFibGUvdGFibGVfYnVpbGRlci5jYwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi42MjAwMmM4NGYyYjE4ZjQ3OWZkYjFjZDNhYjE0MmMxNzllMWYzYTZmCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi90YWJsZS90YWJsZV9idWlsZGVy
LmNjCkBAIC0wLDAgKzEsMjcwIEBACisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBj
b250cmlidXRvcnMuCisKKyNpbmNsdWRlICJsZXZlbGRiL3RhYmxlX2J1aWxkZXIuaCIKKworI2lu
Y2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgImxldmVsZGIvY29tcGFyYXRvci5oIgorI2luY2x1
ZGUgImxldmVsZGIvZW52LmgiCisjaW5jbHVkZSAibGV2ZWxkYi9maWx0ZXJfcG9saWN5LmgiCisj
aW5jbHVkZSAibGV2ZWxkYi9vcHRpb25zLmgiCisjaW5jbHVkZSAidGFibGUvYmxvY2tfYnVpbGRl
ci5oIgorI2luY2x1ZGUgInRhYmxlL2ZpbHRlcl9ibG9jay5oIgorI2luY2x1ZGUgInRhYmxlL2Zv
cm1hdC5oIgorI2luY2x1ZGUgInV0aWwvY29kaW5nLmgiCisjaW5jbHVkZSAidXRpbC9jcmMzMmMu
aCIKKworbmFtZXNwYWNlIGxldmVsZGIgeworCitzdHJ1Y3QgVGFibGVCdWlsZGVyOjpSZXAgewor
ICBPcHRpb25zIG9wdGlvbnM7CisgIE9wdGlvbnMgaW5kZXhfYmxvY2tfb3B0aW9uczsKKyAgV3Jp
dGFibGVGaWxlKiBmaWxlOworICB1aW50NjRfdCBvZmZzZXQ7CisgIFN0YXR1cyBzdGF0dXM7Cisg
IEJsb2NrQnVpbGRlciBkYXRhX2Jsb2NrOworICBCbG9ja0J1aWxkZXIgaW5kZXhfYmxvY2s7Cisg
IHN0ZDo6c3RyaW5nIGxhc3Rfa2V5OworICBpbnQ2NF90IG51bV9lbnRyaWVzOworICBib29sIGNs
b3NlZDsgICAgICAgICAgLy8gRWl0aGVyIEZpbmlzaCgpIG9yIEFiYW5kb24oKSBoYXMgYmVlbiBj
YWxsZWQuCisgIEZpbHRlckJsb2NrQnVpbGRlciogZmlsdGVyX2Jsb2NrOworCisgIC8vIFdlIGRv
IG5vdCBlbWl0IHRoZSBpbmRleCBlbnRyeSBmb3IgYSBibG9jayB1bnRpbCB3ZSBoYXZlIHNlZW4g
dGhlCisgIC8vIGZpcnN0IGtleSBmb3IgdGhlIG5leHQgZGF0YSBibG9jay4gIFRoaXMgYWxsb3dz
IHVzIHRvIHVzZSBzaG9ydGVyCisgIC8vIGtleXMgaW4gdGhlIGluZGV4IGJsb2NrLiAgRm9yIGV4
YW1wbGUsIGNvbnNpZGVyIGEgYmxvY2sgYm91bmRhcnkKKyAgLy8gYmV0d2VlbiB0aGUga2V5cyAi
dGhlIHF1aWNrIGJyb3duIGZveCIgYW5kICJ0aGUgd2hvIi4gIFdlIGNhbiB1c2UKKyAgLy8gInRo
ZSByIiBhcyB0aGUga2V5IGZvciB0aGUgaW5kZXggYmxvY2sgZW50cnkgc2luY2UgaXQgaXMgPj0g
YWxsCisgIC8vIGVudHJpZXMgaW4gdGhlIGZpcnN0IGJsb2NrIGFuZCA8IGFsbCBlbnRyaWVzIGlu
IHN1YnNlcXVlbnQKKyAgLy8gYmxvY2tzLgorICAvLworICAvLyBJbnZhcmlhbnQ6IHItPnBlbmRp
bmdfaW5kZXhfZW50cnkgaXMgdHJ1ZSBvbmx5IGlmIGRhdGFfYmxvY2sgaXMgZW1wdHkuCisgIGJv
b2wgcGVuZGluZ19pbmRleF9lbnRyeTsKKyAgQmxvY2tIYW5kbGUgcGVuZGluZ19oYW5kbGU7ICAv
LyBIYW5kbGUgdG8gYWRkIHRvIGluZGV4IGJsb2NrCisKKyAgc3RkOjpzdHJpbmcgY29tcHJlc3Nl
ZF9vdXRwdXQ7CisKKyAgUmVwKGNvbnN0IE9wdGlvbnMmIG9wdCwgV3JpdGFibGVGaWxlKiBmKQor
ICAgICAgOiBvcHRpb25zKG9wdCksCisgICAgICAgIGluZGV4X2Jsb2NrX29wdGlvbnMob3B0KSwK
KyAgICAgICAgZmlsZShmKSwKKyAgICAgICAgb2Zmc2V0KDApLAorICAgICAgICBkYXRhX2Jsb2Nr
KCZvcHRpb25zKSwKKyAgICAgICAgaW5kZXhfYmxvY2soJmluZGV4X2Jsb2NrX29wdGlvbnMpLAor
ICAgICAgICBudW1fZW50cmllcygwKSwKKyAgICAgICAgY2xvc2VkKGZhbHNlKSwKKyAgICAgICAg
ZmlsdGVyX2Jsb2NrKG9wdC5maWx0ZXJfcG9saWN5ID09IE5VTEwgPyBOVUxMCisgICAgICAgICAg
ICAgICAgICAgICA6IG5ldyBGaWx0ZXJCbG9ja0J1aWxkZXIob3B0LmZpbHRlcl9wb2xpY3kpKSwK
KyAgICAgICAgcGVuZGluZ19pbmRleF9lbnRyeShmYWxzZSkgeworICAgIGluZGV4X2Jsb2NrX29w
dGlvbnMuYmxvY2tfcmVzdGFydF9pbnRlcnZhbCA9IDE7CisgIH0KK307CisKK1RhYmxlQnVpbGRl
cjo6VGFibGVCdWlsZGVyKGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMsIFdyaXRhYmxlRmlsZSogZmls
ZSkKKyAgICA6IHJlcF8obmV3IFJlcChvcHRpb25zLCBmaWxlKSkgeworICBpZiAocmVwXy0+Zmls
dGVyX2Jsb2NrICE9IE5VTEwpIHsKKyAgICByZXBfLT5maWx0ZXJfYmxvY2stPlN0YXJ0QmxvY2so
MCk7CisgIH0KK30KKworVGFibGVCdWlsZGVyOjp+VGFibGVCdWlsZGVyKCkgeworICBhc3NlcnQo
cmVwXy0+Y2xvc2VkKTsgIC8vIENhdGNoIGVycm9ycyB3aGVyZSBjYWxsZXIgZm9yZ290IHRvIGNh
bGwgRmluaXNoKCkKKyAgZGVsZXRlIHJlcF8tPmZpbHRlcl9ibG9jazsKKyAgZGVsZXRlIHJlcF87
Cit9CisKK1N0YXR1cyBUYWJsZUJ1aWxkZXI6OkNoYW5nZU9wdGlvbnMoY29uc3QgT3B0aW9ucyYg
b3B0aW9ucykgeworICAvLyBOb3RlOiBpZiBtb3JlIGZpZWxkcyBhcmUgYWRkZWQgdG8gT3B0aW9u
cywgdXBkYXRlCisgIC8vIHRoaXMgZnVuY3Rpb24gdG8gY2F0Y2ggY2hhbmdlcyB0aGF0IHNob3Vs
ZCBub3QgYmUgYWxsb3dlZCB0bworICAvLyBjaGFuZ2UgaW4gdGhlIG1pZGRsZSBvZiBidWlsZGlu
ZyBhIFRhYmxlLgorICBpZiAob3B0aW9ucy5jb21wYXJhdG9yICE9IHJlcF8tPm9wdGlvbnMuY29t
cGFyYXRvcikgeworICAgIHJldHVybiBTdGF0dXM6OkludmFsaWRBcmd1bWVudCgiY2hhbmdpbmcg
Y29tcGFyYXRvciB3aGlsZSBidWlsZGluZyB0YWJsZSIpOworICB9CisKKyAgLy8gTm90ZSB0aGF0
IGFueSBsaXZlIEJsb2NrQnVpbGRlcnMgcG9pbnQgdG8gcmVwXy0+b3B0aW9ucyBhbmQgdGhlcmVm
b3JlCisgIC8vIHdpbGwgYXV0b21hdGljYWxseSBwaWNrIHVwIHRoZSB1cGRhdGVkIG9wdGlvbnMu
CisgIHJlcF8tPm9wdGlvbnMgPSBvcHRpb25zOworICByZXBfLT5pbmRleF9ibG9ja19vcHRpb25z
ID0gb3B0aW9uczsKKyAgcmVwXy0+aW5kZXhfYmxvY2tfb3B0aW9ucy5ibG9ja19yZXN0YXJ0X2lu
dGVydmFsID0gMTsKKyAgcmV0dXJuIFN0YXR1czo6T0soKTsKK30KKwordm9pZCBUYWJsZUJ1aWxk
ZXI6OkFkZChjb25zdCBTbGljZSYga2V5LCBjb25zdCBTbGljZSYgdmFsdWUpIHsKKyAgUmVwKiBy
ID0gcmVwXzsKKyAgYXNzZXJ0KCFyLT5jbG9zZWQpOworICBpZiAoIW9rKCkpIHJldHVybjsKKyAg
aWYgKHItPm51bV9lbnRyaWVzID4gMCkgeworICAgIGFzc2VydChyLT5vcHRpb25zLmNvbXBhcmF0
b3ItPkNvbXBhcmUoa2V5LCBTbGljZShyLT5sYXN0X2tleSkpID4gMCk7CisgIH0KKworICBpZiAo
ci0+cGVuZGluZ19pbmRleF9lbnRyeSkgeworICAgIGFzc2VydChyLT5kYXRhX2Jsb2NrLmVtcHR5
KCkpOworICAgIHItPm9wdGlvbnMuY29tcGFyYXRvci0+RmluZFNob3J0ZXN0U2VwYXJhdG9yKCZy
LT5sYXN0X2tleSwga2V5KTsKKyAgICBzdGQ6OnN0cmluZyBoYW5kbGVfZW5jb2Rpbmc7CisgICAg
ci0+cGVuZGluZ19oYW5kbGUuRW5jb2RlVG8oJmhhbmRsZV9lbmNvZGluZyk7CisgICAgci0+aW5k
ZXhfYmxvY2suQWRkKHItPmxhc3Rfa2V5LCBTbGljZShoYW5kbGVfZW5jb2RpbmcpKTsKKyAgICBy
LT5wZW5kaW5nX2luZGV4X2VudHJ5ID0gZmFsc2U7CisgIH0KKworICBpZiAoci0+ZmlsdGVyX2Js
b2NrICE9IE5VTEwpIHsKKyAgICByLT5maWx0ZXJfYmxvY2stPkFkZEtleShrZXkpOworICB9CisK
KyAgci0+bGFzdF9rZXkuYXNzaWduKGtleS5kYXRhKCksIGtleS5zaXplKCkpOworICByLT5udW1f
ZW50cmllcysrOworICByLT5kYXRhX2Jsb2NrLkFkZChrZXksIHZhbHVlKTsKKworICBjb25zdCBz
aXplX3QgZXN0aW1hdGVkX2Jsb2NrX3NpemUgPSByLT5kYXRhX2Jsb2NrLkN1cnJlbnRTaXplRXN0
aW1hdGUoKTsKKyAgaWYgKGVzdGltYXRlZF9ibG9ja19zaXplID49IHItPm9wdGlvbnMuYmxvY2tf
c2l6ZSkgeworICAgIEZsdXNoKCk7CisgIH0KK30KKwordm9pZCBUYWJsZUJ1aWxkZXI6OkZsdXNo
KCkgeworICBSZXAqIHIgPSByZXBfOworICBhc3NlcnQoIXItPmNsb3NlZCk7CisgIGlmICghb2so
KSkgcmV0dXJuOworICBpZiAoci0+ZGF0YV9ibG9jay5lbXB0eSgpKSByZXR1cm47CisgIGFzc2Vy
dCghci0+cGVuZGluZ19pbmRleF9lbnRyeSk7CisgIFdyaXRlQmxvY2soJnItPmRhdGFfYmxvY2ss
ICZyLT5wZW5kaW5nX2hhbmRsZSk7CisgIGlmIChvaygpKSB7CisgICAgci0+cGVuZGluZ19pbmRl
eF9lbnRyeSA9IHRydWU7CisgICAgci0+c3RhdHVzID0gci0+ZmlsZS0+Rmx1c2goKTsKKyAgfQor
ICBpZiAoci0+ZmlsdGVyX2Jsb2NrICE9IE5VTEwpIHsKKyAgICByLT5maWx0ZXJfYmxvY2stPlN0
YXJ0QmxvY2soci0+b2Zmc2V0KTsKKyAgfQorfQorCit2b2lkIFRhYmxlQnVpbGRlcjo6V3JpdGVC
bG9jayhCbG9ja0J1aWxkZXIqIGJsb2NrLCBCbG9ja0hhbmRsZSogaGFuZGxlKSB7CisgIC8vIEZp
bGUgZm9ybWF0IGNvbnRhaW5zIGEgc2VxdWVuY2Ugb2YgYmxvY2tzIHdoZXJlIGVhY2ggYmxvY2sg
aGFzOgorICAvLyAgICBibG9ja19kYXRhOiB1aW50OFtuXQorICAvLyAgICB0eXBlOiB1aW50OAor
ICAvLyAgICBjcmM6IHVpbnQzMgorICBhc3NlcnQob2soKSk7CisgIFJlcCogciA9IHJlcF87Cisg
IFNsaWNlIHJhdyA9IGJsb2NrLT5GaW5pc2goKTsKKworICBTbGljZSBibG9ja19jb250ZW50czsK
KyAgQ29tcHJlc3Npb25UeXBlIHR5cGUgPSByLT5vcHRpb25zLmNvbXByZXNzaW9uOworICAvLyBU
T0RPKHBvc3RyZWxlYXNlKTogU3VwcG9ydCBtb3JlIGNvbXByZXNzaW9uIG9wdGlvbnM6IHpsaWI/
CisgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2Uga05vQ29tcHJlc3Npb246CisgICAgICBibG9j
a19jb250ZW50cyA9IHJhdzsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBrU25hcHB5Q29tcHJl
c3Npb246IHsKKyAgICAgIHN0ZDo6c3RyaW5nKiBjb21wcmVzc2VkID0gJnItPmNvbXByZXNzZWRf
b3V0cHV0OworICAgICAgaWYgKHBvcnQ6OlNuYXBweV9Db21wcmVzcyhyYXcuZGF0YSgpLCByYXcu
c2l6ZSgpLCBjb21wcmVzc2VkKSAmJgorICAgICAgICAgIGNvbXByZXNzZWQtPnNpemUoKSA8IHJh
dy5zaXplKCkgLSAocmF3LnNpemUoKSAvIDh1KSkgeworICAgICAgICBibG9ja19jb250ZW50cyA9
ICpjb21wcmVzc2VkOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gU25hcHB5IG5vdCBzdXBw
b3J0ZWQsIG9yIGNvbXByZXNzZWQgbGVzcyB0aGFuIDEyLjUlLCBzbyBqdXN0CisgICAgICAgIC8v
IHN0b3JlIHVuY29tcHJlc3NlZCBmb3JtCisgICAgICAgIGJsb2NrX2NvbnRlbnRzID0gcmF3Owor
ICAgICAgICB0eXBlID0ga05vQ29tcHJlc3Npb247CisgICAgICB9CisgICAgICBicmVhazsKKyAg
ICB9CisgIH0KKyAgV3JpdGVSYXdCbG9jayhibG9ja19jb250ZW50cywgdHlwZSwgaGFuZGxlKTsK
KyAgci0+Y29tcHJlc3NlZF9vdXRwdXQuY2xlYXIoKTsKKyAgYmxvY2stPlJlc2V0KCk7Cit9CisK
K3ZvaWQgVGFibGVCdWlsZGVyOjpXcml0ZVJhd0Jsb2NrKGNvbnN0IFNsaWNlJiBibG9ja19jb250
ZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXByZXNzaW9uVHlwZSB0
eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmxvY2tIYW5kbGUqIGhhbmRs
ZSkgeworICBSZXAqIHIgPSByZXBfOworICBoYW5kbGUtPnNldF9vZmZzZXQoci0+b2Zmc2V0KTsK
KyAgaGFuZGxlLT5zZXRfc2l6ZShibG9ja19jb250ZW50cy5zaXplKCkpOworICByLT5zdGF0dXMg
PSByLT5maWxlLT5BcHBlbmQoYmxvY2tfY29udGVudHMpOworICBpZiAoci0+c3RhdHVzLm9rKCkp
IHsKKyAgICBjaGFyIHRyYWlsZXJba0Jsb2NrVHJhaWxlclNpemVdOworICAgIHRyYWlsZXJbMF0g
PSB0eXBlOworICAgIHVpbnQzMl90IGNyYyA9IGNyYzMyYzo6VmFsdWUoYmxvY2tfY29udGVudHMu
ZGF0YSgpLCBibG9ja19jb250ZW50cy5zaXplKCkpOworICAgIGNyYyA9IGNyYzMyYzo6RXh0ZW5k
KGNyYywgdHJhaWxlciwgMSk7ICAvLyBFeHRlbmQgY3JjIHRvIGNvdmVyIGJsb2NrIHR5cGUKKyAg
ICBFbmNvZGVGaXhlZDMyKHRyYWlsZXIrMSwgY3JjMzJjOjpNYXNrKGNyYykpOworICAgIHItPnN0
YXR1cyA9IHItPmZpbGUtPkFwcGVuZChTbGljZSh0cmFpbGVyLCBrQmxvY2tUcmFpbGVyU2l6ZSkp
OworICAgIGlmIChyLT5zdGF0dXMub2soKSkgeworICAgICAgci0+b2Zmc2V0ICs9IGJsb2NrX2Nv
bnRlbnRzLnNpemUoKSArIGtCbG9ja1RyYWlsZXJTaXplOworICAgIH0KKyAgfQorfQorCitTdGF0
dXMgVGFibGVCdWlsZGVyOjpzdGF0dXMoKSBjb25zdCB7CisgIHJldHVybiByZXBfLT5zdGF0dXM7
Cit9CisKK1N0YXR1cyBUYWJsZUJ1aWxkZXI6OkZpbmlzaCgpIHsKKyAgUmVwKiByID0gcmVwXzsK
KyAgRmx1c2goKTsKKyAgYXNzZXJ0KCFyLT5jbG9zZWQpOworICByLT5jbG9zZWQgPSB0cnVlOwor
CisgIEJsb2NrSGFuZGxlIGZpbHRlcl9ibG9ja19oYW5kbGUsIG1ldGFpbmRleF9ibG9ja19oYW5k
bGUsIGluZGV4X2Jsb2NrX2hhbmRsZTsKKworICAvLyBXcml0ZSBmaWx0ZXIgYmxvY2sKKyAgaWYg
KG9rKCkgJiYgci0+ZmlsdGVyX2Jsb2NrICE9IE5VTEwpIHsKKyAgICBXcml0ZVJhd0Jsb2NrKHIt
PmZpbHRlcl9ibG9jay0+RmluaXNoKCksIGtOb0NvbXByZXNzaW9uLAorICAgICAgICAgICAgICAg
ICAgJmZpbHRlcl9ibG9ja19oYW5kbGUpOworICB9CisKKyAgLy8gV3JpdGUgbWV0YWluZGV4IGJs
b2NrCisgIGlmIChvaygpKSB7CisgICAgQmxvY2tCdWlsZGVyIG1ldGFfaW5kZXhfYmxvY2soJnIt
Pm9wdGlvbnMpOworICAgIGlmIChyLT5maWx0ZXJfYmxvY2sgIT0gTlVMTCkgeworICAgICAgLy8g
QWRkIG1hcHBpbmcgZnJvbSAiZmlsdGVyLk5hbWUiIHRvIGxvY2F0aW9uIG9mIGZpbHRlciBkYXRh
CisgICAgICBzdGQ6OnN0cmluZyBrZXkgPSAiZmlsdGVyLiI7CisgICAgICBrZXkuYXBwZW5kKHIt
Pm9wdGlvbnMuZmlsdGVyX3BvbGljeS0+TmFtZSgpKTsKKyAgICAgIHN0ZDo6c3RyaW5nIGhhbmRs
ZV9lbmNvZGluZzsKKyAgICAgIGZpbHRlcl9ibG9ja19oYW5kbGUuRW5jb2RlVG8oJmhhbmRsZV9l
bmNvZGluZyk7CisgICAgICBtZXRhX2luZGV4X2Jsb2NrLkFkZChrZXksIGhhbmRsZV9lbmNvZGlu
Zyk7CisgICAgfQorCisgICAgLy8gVE9ETyhwb3N0cmVsZWFzZSk6IEFkZCBzdGF0cyBhbmQgb3Ro
ZXIgbWV0YSBibG9ja3MKKyAgICBXcml0ZUJsb2NrKCZtZXRhX2luZGV4X2Jsb2NrLCAmbWV0YWlu
ZGV4X2Jsb2NrX2hhbmRsZSk7CisgIH0KKworICAvLyBXcml0ZSBpbmRleCBibG9jaworICBpZiAo
b2soKSkgeworICAgIGlmIChyLT5wZW5kaW5nX2luZGV4X2VudHJ5KSB7CisgICAgICByLT5vcHRp
b25zLmNvbXBhcmF0b3ItPkZpbmRTaG9ydFN1Y2Nlc3Nvcigmci0+bGFzdF9rZXkpOworICAgICAg
c3RkOjpzdHJpbmcgaGFuZGxlX2VuY29kaW5nOworICAgICAgci0+cGVuZGluZ19oYW5kbGUuRW5j
b2RlVG8oJmhhbmRsZV9lbmNvZGluZyk7CisgICAgICByLT5pbmRleF9ibG9jay5BZGQoci0+bGFz
dF9rZXksIFNsaWNlKGhhbmRsZV9lbmNvZGluZykpOworICAgICAgci0+cGVuZGluZ19pbmRleF9l
bnRyeSA9IGZhbHNlOworICAgIH0KKyAgICBXcml0ZUJsb2NrKCZyLT5pbmRleF9ibG9jaywgJmlu
ZGV4X2Jsb2NrX2hhbmRsZSk7CisgIH0KKworICAvLyBXcml0ZSBmb290ZXIKKyAgaWYgKG9rKCkp
IHsKKyAgICBGb290ZXIgZm9vdGVyOworICAgIGZvb3Rlci5zZXRfbWV0YWluZGV4X2hhbmRsZSht
ZXRhaW5kZXhfYmxvY2tfaGFuZGxlKTsKKyAgICBmb290ZXIuc2V0X2luZGV4X2hhbmRsZShpbmRl
eF9ibG9ja19oYW5kbGUpOworICAgIHN0ZDo6c3RyaW5nIGZvb3Rlcl9lbmNvZGluZzsKKyAgICBm
b290ZXIuRW5jb2RlVG8oJmZvb3Rlcl9lbmNvZGluZyk7CisgICAgci0+c3RhdHVzID0gci0+Zmls
ZS0+QXBwZW5kKGZvb3Rlcl9lbmNvZGluZyk7CisgICAgaWYgKHItPnN0YXR1cy5vaygpKSB7Cisg
ICAgICByLT5vZmZzZXQgKz0gZm9vdGVyX2VuY29kaW5nLnNpemUoKTsKKyAgICB9CisgIH0KKyAg
cmV0dXJuIHItPnN0YXR1czsKK30KKwordm9pZCBUYWJsZUJ1aWxkZXI6OkFiYW5kb24oKSB7Cisg
IFJlcCogciA9IHJlcF87CisgIGFzc2VydCghci0+Y2xvc2VkKTsKKyAgci0+Y2xvc2VkID0gdHJ1
ZTsKK30KKwordWludDY0X3QgVGFibGVCdWlsZGVyOjpOdW1FbnRyaWVzKCkgY29uc3QgeworICBy
ZXR1cm4gcmVwXy0+bnVtX2VudHJpZXM7Cit9CisKK3VpbnQ2NF90IFRhYmxlQnVpbGRlcjo6Rmls
ZVNpemUoKSBjb25zdCB7CisgIHJldHVybiByZXBfLT5vZmZzZXQ7Cit9CisKK30gIC8vIG5hbWVz
cGFjZSBsZXZlbGRiCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxl
L3RhYmxlX3Rlc3QuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxlL3RhYmxlX3Rl
c3QuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNTdjZWEyNTMzNGUwNzUwMTc0OGI1ZmRhYzVhODg3MmI4OWQzMWYx
ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdGFibGUvdGFi
bGVfdGVzdC5jYwpAQCAtMCwwICsxLDgzOCBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBM
ZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFt
ZXMgb2YgY29udHJpYnV0b3JzLgorCisjaW5jbHVkZSAibGV2ZWxkYi90YWJsZS5oIgorCisjaW5j
bHVkZSA8bWFwPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlICJkYi9kYmZvcm1hdC5oIgor
I2luY2x1ZGUgImRiL21lbXRhYmxlLmgiCisjaW5jbHVkZSAiZGIvd3JpdGVfYmF0Y2hfaW50ZXJu
YWwuaCIKKyNpbmNsdWRlICJsZXZlbGRiL2RiLmgiCisjaW5jbHVkZSAibGV2ZWxkYi9lbnYuaCIK
KyNpbmNsdWRlICJsZXZlbGRiL2l0ZXJhdG9yLmgiCisjaW5jbHVkZSAibGV2ZWxkYi90YWJsZV9i
dWlsZGVyLmgiCisjaW5jbHVkZSAidGFibGUvYmxvY2suaCIKKyNpbmNsdWRlICJ0YWJsZS9ibG9j
a19idWlsZGVyLmgiCisjaW5jbHVkZSAidGFibGUvZm9ybWF0LmgiCisjaW5jbHVkZSAidXRpbC9y
YW5kb20uaCIKKyNpbmNsdWRlICJ1dGlsL3Rlc3RoYXJuZXNzLmgiCisjaW5jbHVkZSAidXRpbC90
ZXN0dXRpbC5oIgorCituYW1lc3BhY2UgbGV2ZWxkYiB7CisKKy8vIFJldHVybiByZXZlcnNlIG9m
ICJrZXkiLgorLy8gVXNlZCB0byB0ZXN0IG5vbi1sZXhpY29ncmFwaGljIGNvbXBhcmF0b3JzLgor
c3RhdGljIHN0ZDo6c3RyaW5nIFJldmVyc2UoY29uc3QgU2xpY2UmIGtleSkgeworICBzdGQ6OnN0
cmluZyBzdHIoa2V5LlRvU3RyaW5nKCkpOworICBzdGQ6OnN0cmluZyByZXYoIiIpOworICBmb3Ig
KHN0ZDo6c3RyaW5nOjpyZXZlcnNlX2l0ZXJhdG9yIHJpdCA9IHN0ci5yYmVnaW4oKTsKKyAgICAg
ICByaXQgIT0gc3RyLnJlbmQoKTsgKytyaXQpIHsKKyAgICByZXYucHVzaF9iYWNrKCpyaXQpOwor
ICB9CisgIHJldHVybiByZXY7Cit9CisKK25hbWVzcGFjZSB7CitjbGFzcyBSZXZlcnNlS2V5Q29t
cGFyYXRvciA6IHB1YmxpYyBDb21wYXJhdG9yIHsKKyBwdWJsaWM6CisgIHZpcnR1YWwgY29uc3Qg
Y2hhciogTmFtZSgpIGNvbnN0IHsKKyAgICByZXR1cm4gImxldmVsZGIuUmV2ZXJzZUJ5dGV3aXNl
Q29tcGFyYXRvciI7CisgIH0KKworICB2aXJ0dWFsIGludCBDb21wYXJlKGNvbnN0IFNsaWNlJiBh
LCBjb25zdCBTbGljZSYgYikgY29uc3QgeworICAgIHJldHVybiBCeXRld2lzZUNvbXBhcmF0b3Io
KS0+Q29tcGFyZShSZXZlcnNlKGEpLCBSZXZlcnNlKGIpKTsKKyAgfQorCisgIHZpcnR1YWwgdm9p
ZCBGaW5kU2hvcnRlc3RTZXBhcmF0b3IoCisgICAgICBzdGQ6OnN0cmluZyogc3RhcnQsCisgICAg
ICBjb25zdCBTbGljZSYgbGltaXQpIGNvbnN0IHsKKyAgICBzdGQ6OnN0cmluZyBzID0gUmV2ZXJz
ZSgqc3RhcnQpOworICAgIHN0ZDo6c3RyaW5nIGwgPSBSZXZlcnNlKGxpbWl0KTsKKyAgICBCeXRl
d2lzZUNvbXBhcmF0b3IoKS0+RmluZFNob3J0ZXN0U2VwYXJhdG9yKCZzLCBsKTsKKyAgICAqc3Rh
cnQgPSBSZXZlcnNlKHMpOworICB9CisKKyAgdmlydHVhbCB2b2lkIEZpbmRTaG9ydFN1Y2Nlc3Nv
cihzdGQ6OnN0cmluZyoga2V5KSBjb25zdCB7CisgICAgc3RkOjpzdHJpbmcgcyA9IFJldmVyc2Uo
KmtleSk7CisgICAgQnl0ZXdpc2VDb21wYXJhdG9yKCktPkZpbmRTaG9ydFN1Y2Nlc3Nvcigmcyk7
CisgICAgKmtleSA9IFJldmVyc2Uocyk7CisgIH0KK307Cit9ICAvLyBuYW1lc3BhY2UKK3N0YXRp
YyBSZXZlcnNlS2V5Q29tcGFyYXRvciByZXZlcnNlX2tleV9jb21wYXJhdG9yOworCitzdGF0aWMg
dm9pZCBJbmNyZW1lbnQoY29uc3QgQ29tcGFyYXRvciogY21wLCBzdGQ6OnN0cmluZyoga2V5KSB7
CisgIGlmIChjbXAgPT0gQnl0ZXdpc2VDb21wYXJhdG9yKCkpIHsKKyAgICBrZXktPnB1c2hfYmFj
aygnXDAnKTsKKyAgfSBlbHNlIHsKKyAgICBhc3NlcnQoY21wID09ICZyZXZlcnNlX2tleV9jb21w
YXJhdG9yKTsKKyAgICBzdGQ6OnN0cmluZyByZXYgPSBSZXZlcnNlKCprZXkpOworICAgIHJldi5w
dXNoX2JhY2soJ1wwJyk7CisgICAgKmtleSA9IFJldmVyc2UocmV2KTsKKyAgfQorfQorCisvLyBB
biBTVEwgY29tcGFyYXRvciB0aGF0IHVzZXMgYSBDb21wYXJhdG9yCituYW1lc3BhY2Ugeworc3Ry
dWN0IFNUTExlc3NUaGFuIHsKKyAgY29uc3QgQ29tcGFyYXRvciogY21wOworCisgIFNUTExlc3NU
aGFuKCkgOiBjbXAoQnl0ZXdpc2VDb21wYXJhdG9yKCkpIHsgfQorICBTVExMZXNzVGhhbihjb25z
dCBDb21wYXJhdG9yKiBjKSA6IGNtcChjKSB7IH0KKyAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHN0
ZDo6c3RyaW5nJiBhLCBjb25zdCBzdGQ6OnN0cmluZyYgYikgY29uc3QgeworICAgIHJldHVybiBj
bXAtPkNvbXBhcmUoU2xpY2UoYSksIFNsaWNlKGIpKSA8IDA7CisgIH0KK307Cit9ICAvLyBuYW1l
c3BhY2UKKworY2xhc3MgU3RyaW5nU2luazogcHVibGljIFdyaXRhYmxlRmlsZSB7CisgcHVibGlj
OgorICB+U3RyaW5nU2luaygpIHsgfQorCisgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb250ZW50cygp
IGNvbnN0IHsgcmV0dXJuIGNvbnRlbnRzXzsgfQorCisgIHZpcnR1YWwgU3RhdHVzIENsb3NlKCkg
eyByZXR1cm4gU3RhdHVzOjpPSygpOyB9CisgIHZpcnR1YWwgU3RhdHVzIEZsdXNoKCkgeyByZXR1
cm4gU3RhdHVzOjpPSygpOyB9CisgIHZpcnR1YWwgU3RhdHVzIFN5bmMoKSB7IHJldHVybiBTdGF0
dXM6Ok9LKCk7IH0KKworICB2aXJ0dWFsIFN0YXR1cyBBcHBlbmQoY29uc3QgU2xpY2UmIGRhdGEp
IHsKKyAgICBjb250ZW50c18uYXBwZW5kKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CisgICAg
cmV0dXJuIFN0YXR1czo6T0soKTsKKyAgfQorCisgcHJpdmF0ZToKKyAgc3RkOjpzdHJpbmcgY29u
dGVudHNfOworfTsKKworCitjbGFzcyBTdHJpbmdTb3VyY2U6IHB1YmxpYyBSYW5kb21BY2Nlc3NG
aWxlIHsKKyBwdWJsaWM6CisgIFN0cmluZ1NvdXJjZShjb25zdCBTbGljZSYgY29udGVudHMpCisg
ICAgICA6IGNvbnRlbnRzXyhjb250ZW50cy5kYXRhKCksIGNvbnRlbnRzLnNpemUoKSkgeworICB9
CisKKyAgdmlydHVhbCB+U3RyaW5nU291cmNlKCkgeyB9CisKKyAgdWludDY0X3QgU2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIGNvbnRlbnRzXy5zaXplKCk7IH0KKworICB2aXJ0dWFsIFN0YXR1cyBSZWFk
KHVpbnQ2NF90IG9mZnNldCwgc2l6ZV90IG4sIFNsaWNlKiByZXN1bHQsCisgICAgICAgICAgICAg
ICAgICAgICAgIGNoYXIqIHNjcmF0Y2gpIGNvbnN0IHsKKyAgICBpZiAob2Zmc2V0ID4gY29udGVu
dHNfLnNpemUoKSkgeworICAgICAgcmV0dXJuIFN0YXR1czo6SW52YWxpZEFyZ3VtZW50KCJpbnZh
bGlkIFJlYWQgb2Zmc2V0Iik7CisgICAgfQorICAgIGlmIChvZmZzZXQgKyBuID4gY29udGVudHNf
LnNpemUoKSkgeworICAgICAgbiA9IGNvbnRlbnRzXy5zaXplKCkgLSBvZmZzZXQ7CisgICAgfQor
ICAgIG1lbWNweShzY3JhdGNoLCAmY29udGVudHNfW29mZnNldF0sIG4pOworICAgICpyZXN1bHQg
PSBTbGljZShzY3JhdGNoLCBuKTsKKyAgICByZXR1cm4gU3RhdHVzOjpPSygpOworICB9CisKKyBw
cml2YXRlOgorICBzdGQ6OnN0cmluZyBjb250ZW50c187Cit9OworCit0eXBlZGVmIHN0ZDo6bWFw
PHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZywgU1RMTGVzc1RoYW4+IEtWTWFwOworCisvLyBIZWxw
ZXIgY2xhc3MgZm9yIHRlc3RzIHRvIHVuaWZ5IHRoZSBpbnRlcmZhY2UgYmV0d2VlbgorLy8gQmxv
Y2tCdWlsZGVyL1RhYmxlQnVpbGRlciBhbmQgQmxvY2svVGFibGUuCitjbGFzcyBDb25zdHJ1Y3Rv
ciB7CisgcHVibGljOgorICBleHBsaWNpdCBDb25zdHJ1Y3Rvcihjb25zdCBDb21wYXJhdG9yKiBj
bXApIDogZGF0YV8oU1RMTGVzc1RoYW4oY21wKSkgeyB9CisgIHZpcnR1YWwgfkNvbnN0cnVjdG9y
KCkgeyB9CisKKyAgdm9pZCBBZGQoY29uc3Qgc3RkOjpzdHJpbmcmIGtleSwgY29uc3QgU2xpY2Um
IHZhbHVlKSB7CisgICAgZGF0YV9ba2V5XSA9IHZhbHVlLlRvU3RyaW5nKCk7CisgIH0KKworICAv
LyBGaW5pc2ggY29uc3RydWN0aW5nIHRoZSBkYXRhIHN0cnVjdHVyZSB3aXRoIGFsbCB0aGUga2V5
cyB0aGF0IGhhdmUKKyAgLy8gYmVlbiBhZGRlZCBzbyBmYXIuICBSZXR1cm5zIHRoZSBrZXlzIGlu
IHNvcnRlZCBvcmRlciBpbiAiKmtleXMiCisgIC8vIGFuZCBzdG9yZXMgdGhlIGtleS92YWx1ZSBw
YWlycyBpbiAiKmt2bWFwIgorICB2b2lkIEZpbmlzaChjb25zdCBPcHRpb25zJiBvcHRpb25zLAor
ICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4qIGtleXMsCisgICAgICAgICAg
ICAgIEtWTWFwKiBrdm1hcCkgeworICAgICprdm1hcCA9IGRhdGFfOworICAgIGtleXMtPmNsZWFy
KCk7CisgICAgZm9yIChLVk1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBkYXRhXy5iZWdpbigpOwor
ICAgICAgICAgaXQgIT0gZGF0YV8uZW5kKCk7CisgICAgICAgICArK2l0KSB7CisgICAgICBrZXlz
LT5wdXNoX2JhY2soaXQtPmZpcnN0KTsKKyAgICB9CisgICAgZGF0YV8uY2xlYXIoKTsKKyAgICBT
dGF0dXMgcyA9IEZpbmlzaEltcGwob3B0aW9ucywgKmt2bWFwKTsKKyAgICBBU1NFUlRfVFJVRShz
Lm9rKCkpIDw8IHMuVG9TdHJpbmcoKTsKKyAgfQorCisgIC8vIENvbnN0cnVjdCB0aGUgZGF0YSBz
dHJ1Y3R1cmUgZnJvbSB0aGUgZGF0YSBpbiAiZGF0YSIKKyAgdmlydHVhbCBTdGF0dXMgRmluaXNo
SW1wbChjb25zdCBPcHRpb25zJiBvcHRpb25zLCBjb25zdCBLVk1hcCYgZGF0YSkgPSAwOworCisg
IHZpcnR1YWwgSXRlcmF0b3IqIE5ld0l0ZXJhdG9yKCkgY29uc3QgPSAwOworCisgIHZpcnR1YWwg
Y29uc3QgS1ZNYXAmIGRhdGEoKSB7IHJldHVybiBkYXRhXzsgfQorCisgIHZpcnR1YWwgREIqIGRi
KCkgY29uc3QgeyByZXR1cm4gTlVMTDsgfSAgLy8gT3ZlcnJpZGRlbiBpbiBEQkNvbnN0cnVjdG9y
CisKKyBwcml2YXRlOgorICBLVk1hcCBkYXRhXzsKK307CisKK2NsYXNzIEJsb2NrQ29uc3RydWN0
b3I6IHB1YmxpYyBDb25zdHJ1Y3RvciB7CisgcHVibGljOgorICBleHBsaWNpdCBCbG9ja0NvbnN0
cnVjdG9yKGNvbnN0IENvbXBhcmF0b3IqIGNtcCkKKyAgICAgIDogQ29uc3RydWN0b3IoY21wKSwK
KyAgICAgICAgY29tcGFyYXRvcl8oY21wKSwKKyAgICAgICAgYmxvY2tfKE5VTEwpIHsgfQorICB+
QmxvY2tDb25zdHJ1Y3RvcigpIHsKKyAgICBkZWxldGUgYmxvY2tfOworICB9CisgIHZpcnR1YWwg
U3RhdHVzIEZpbmlzaEltcGwoY29uc3QgT3B0aW9ucyYgb3B0aW9ucywgY29uc3QgS1ZNYXAmIGRh
dGEpIHsKKyAgICBkZWxldGUgYmxvY2tfOworICAgIGJsb2NrXyA9IE5VTEw7CisgICAgQmxvY2tC
dWlsZGVyIGJ1aWxkZXIoJm9wdGlvbnMpOworCisgICAgZm9yIChLVk1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBkYXRhLmJlZ2luKCk7CisgICAgICAgICBpdCAhPSBkYXRhLmVuZCgpOworICAgICAg
ICAgKytpdCkgeworICAgICAgYnVpbGRlci5BZGQoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAg
ICB9CisgICAgLy8gT3BlbiB0aGUgYmxvY2sKKyAgICBkYXRhXyA9IGJ1aWxkZXIuRmluaXNoKCku
VG9TdHJpbmcoKTsKKyAgICBCbG9ja0NvbnRlbnRzIGNvbnRlbnRzOworICAgIGNvbnRlbnRzLmRh
dGEgPSBkYXRhXzsKKyAgICBjb250ZW50cy5jYWNoYWJsZSA9IGZhbHNlOworICAgIGNvbnRlbnRz
LmhlYXBfYWxsb2NhdGVkID0gZmFsc2U7CisgICAgYmxvY2tfID0gbmV3IEJsb2NrKGNvbnRlbnRz
KTsKKyAgICByZXR1cm4gU3RhdHVzOjpPSygpOworICB9CisgIHZpcnR1YWwgSXRlcmF0b3IqIE5l
d0l0ZXJhdG9yKCkgY29uc3QgeworICAgIHJldHVybiBibG9ja18tPk5ld0l0ZXJhdG9yKGNvbXBh
cmF0b3JfKTsKKyAgfQorCisgcHJpdmF0ZToKKyAgY29uc3QgQ29tcGFyYXRvciogY29tcGFyYXRv
cl87CisgIHN0ZDo6c3RyaW5nIGRhdGFfOworICBCbG9jayogYmxvY2tfOworCisgIEJsb2NrQ29u
c3RydWN0b3IoKTsKK307CisKK2NsYXNzIFRhYmxlQ29uc3RydWN0b3I6IHB1YmxpYyBDb25zdHJ1
Y3RvciB7CisgcHVibGljOgorICBUYWJsZUNvbnN0cnVjdG9yKGNvbnN0IENvbXBhcmF0b3IqIGNt
cCkKKyAgICAgIDogQ29uc3RydWN0b3IoY21wKSwKKyAgICAgICAgc291cmNlXyhOVUxMKSwgdGFi
bGVfKE5VTEwpIHsKKyAgfQorICB+VGFibGVDb25zdHJ1Y3RvcigpIHsKKyAgICBSZXNldCgpOwor
ICB9CisgIHZpcnR1YWwgU3RhdHVzIEZpbmlzaEltcGwoY29uc3QgT3B0aW9ucyYgb3B0aW9ucywg
Y29uc3QgS1ZNYXAmIGRhdGEpIHsKKyAgICBSZXNldCgpOworICAgIFN0cmluZ1Npbmsgc2luazsK
KyAgICBUYWJsZUJ1aWxkZXIgYnVpbGRlcihvcHRpb25zLCAmc2luayk7CisKKyAgICBmb3IgKEtW
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGRhdGEuYmVnaW4oKTsKKyAgICAgICAgIGl0ICE9IGRh
dGEuZW5kKCk7CisgICAgICAgICArK2l0KSB7CisgICAgICBidWlsZGVyLkFkZChpdC0+Zmlyc3Qs
IGl0LT5zZWNvbmQpOworICAgICAgQVNTRVJUX1RSVUUoYnVpbGRlci5zdGF0dXMoKS5vaygpKTsK
KyAgICB9CisgICAgU3RhdHVzIHMgPSBidWlsZGVyLkZpbmlzaCgpOworICAgIEFTU0VSVF9UUlVF
KHMub2soKSkgPDwgcy5Ub1N0cmluZygpOworCisgICAgQVNTRVJUX0VRKHNpbmsuY29udGVudHMo
KS5zaXplKCksIGJ1aWxkZXIuRmlsZVNpemUoKSk7CisKKyAgICAvLyBPcGVuIHRoZSB0YWJsZQor
ICAgIHNvdXJjZV8gPSBuZXcgU3RyaW5nU291cmNlKHNpbmsuY29udGVudHMoKSk7CisgICAgT3B0
aW9ucyB0YWJsZV9vcHRpb25zOworICAgIHRhYmxlX29wdGlvbnMuY29tcGFyYXRvciA9IG9wdGlv
bnMuY29tcGFyYXRvcjsKKyAgICByZXR1cm4gVGFibGU6Ok9wZW4odGFibGVfb3B0aW9ucywgc291
cmNlXywgc2luay5jb250ZW50cygpLnNpemUoKSwgJnRhYmxlXyk7CisgIH0KKworICB2aXJ0dWFs
IEl0ZXJhdG9yKiBOZXdJdGVyYXRvcigpIGNvbnN0IHsKKyAgICByZXR1cm4gdGFibGVfLT5OZXdJ
dGVyYXRvcihSZWFkT3B0aW9ucygpKTsKKyAgfQorCisgIHVpbnQ2NF90IEFwcHJveGltYXRlT2Zm
c2V0T2YoY29uc3QgU2xpY2UmIGtleSkgY29uc3QgeworICAgIHJldHVybiB0YWJsZV8tPkFwcHJv
eGltYXRlT2Zmc2V0T2Yoa2V5KTsKKyAgfQorCisgcHJpdmF0ZToKKyAgdm9pZCBSZXNldCgpIHsK
KyAgICBkZWxldGUgdGFibGVfOworICAgIGRlbGV0ZSBzb3VyY2VfOworICAgIHRhYmxlXyA9IE5V
TEw7CisgICAgc291cmNlXyA9IE5VTEw7CisgIH0KKworICBTdHJpbmdTb3VyY2UqIHNvdXJjZV87
CisgIFRhYmxlKiB0YWJsZV87CisKKyAgVGFibGVDb25zdHJ1Y3RvcigpOworfTsKKworLy8gQSBo
ZWxwZXIgY2xhc3MgdGhhdCBjb252ZXJ0cyBpbnRlcm5hbCBmb3JtYXQga2V5cyBpbnRvIHVzZXIg
a2V5cworY2xhc3MgS2V5Q29udmVydGluZ0l0ZXJhdG9yOiBwdWJsaWMgSXRlcmF0b3IgeworIHB1
YmxpYzoKKyAgZXhwbGljaXQgS2V5Q29udmVydGluZ0l0ZXJhdG9yKEl0ZXJhdG9yKiBpdGVyKSA6
IGl0ZXJfKGl0ZXIpIHsgfQorICB2aXJ0dWFsIH5LZXlDb252ZXJ0aW5nSXRlcmF0b3IoKSB7IGRl
bGV0ZSBpdGVyXzsgfQorICB2aXJ0dWFsIGJvb2wgVmFsaWQoKSBjb25zdCB7IHJldHVybiBpdGVy
Xy0+VmFsaWQoKTsgfQorICB2aXJ0dWFsIHZvaWQgU2Vlayhjb25zdCBTbGljZSYgdGFyZ2V0KSB7
CisgICAgUGFyc2VkSW50ZXJuYWxLZXkgaWtleSh0YXJnZXQsIGtNYXhTZXF1ZW5jZU51bWJlciwg
a1R5cGVWYWx1ZSk7CisgICAgc3RkOjpzdHJpbmcgZW5jb2RlZDsKKyAgICBBcHBlbmRJbnRlcm5h
bEtleSgmZW5jb2RlZCwgaWtleSk7CisgICAgaXRlcl8tPlNlZWsoZW5jb2RlZCk7CisgIH0KKyAg
dmlydHVhbCB2b2lkIFNlZWtUb0ZpcnN0KCkgeyBpdGVyXy0+U2Vla1RvRmlyc3QoKTsgfQorICB2
aXJ0dWFsIHZvaWQgU2Vla1RvTGFzdCgpIHsgaXRlcl8tPlNlZWtUb0xhc3QoKTsgfQorICB2aXJ0
dWFsIHZvaWQgTmV4dCgpIHsgaXRlcl8tPk5leHQoKTsgfQorICB2aXJ0dWFsIHZvaWQgUHJldigp
IHsgaXRlcl8tPlByZXYoKTsgfQorCisgIHZpcnR1YWwgU2xpY2Uga2V5KCkgY29uc3QgeworICAg
IGFzc2VydChWYWxpZCgpKTsKKyAgICBQYXJzZWRJbnRlcm5hbEtleSBrZXk7CisgICAgaWYgKCFQ
YXJzZUludGVybmFsS2V5KGl0ZXJfLT5rZXkoKSwgJmtleSkpIHsKKyAgICAgIHN0YXR1c18gPSBT
dGF0dXM6OkNvcnJ1cHRpb24oIm1hbGZvcm1lZCBpbnRlcm5hbCBrZXkiKTsKKyAgICAgIHJldHVy
biBTbGljZSgiY29ycnVwdGVkIGtleSIpOworICAgIH0KKyAgICByZXR1cm4ga2V5LnVzZXJfa2V5
OworICB9CisKKyAgdmlydHVhbCBTbGljZSB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJfLT52
YWx1ZSgpOyB9CisgIHZpcnR1YWwgU3RhdHVzIHN0YXR1cygpIGNvbnN0IHsKKyAgICByZXR1cm4g
c3RhdHVzXy5vaygpID8gaXRlcl8tPnN0YXR1cygpIDogc3RhdHVzXzsKKyAgfQorCisgcHJpdmF0
ZToKKyAgbXV0YWJsZSBTdGF0dXMgc3RhdHVzXzsKKyAgSXRlcmF0b3IqIGl0ZXJfOworCisgIC8v
IE5vIGNvcHlpbmcgYWxsb3dlZAorICBLZXlDb252ZXJ0aW5nSXRlcmF0b3IoY29uc3QgS2V5Q29u
dmVydGluZ0l0ZXJhdG9yJik7CisgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IEtleUNvbnZlcnRpbmdJ
dGVyYXRvciYpOworfTsKKworY2xhc3MgTWVtVGFibGVDb25zdHJ1Y3RvcjogcHVibGljIENvbnN0
cnVjdG9yIHsKKyBwdWJsaWM6CisgIGV4cGxpY2l0IE1lbVRhYmxlQ29uc3RydWN0b3IoY29uc3Qg
Q29tcGFyYXRvciogY21wKQorICAgICAgOiBDb25zdHJ1Y3RvcihjbXApLAorICAgICAgICBpbnRl
cm5hbF9jb21wYXJhdG9yXyhjbXApIHsKKyAgICBtZW10YWJsZV8gPSBuZXcgTWVtVGFibGUoaW50
ZXJuYWxfY29tcGFyYXRvcl8pOworICAgIG1lbXRhYmxlXy0+UmVmKCk7CisgIH0KKyAgfk1lbVRh
YmxlQ29uc3RydWN0b3IoKSB7CisgICAgbWVtdGFibGVfLT5VbnJlZigpOworICB9CisgIHZpcnR1
YWwgU3RhdHVzIEZpbmlzaEltcGwoY29uc3QgT3B0aW9ucyYgb3B0aW9ucywgY29uc3QgS1ZNYXAm
IGRhdGEpIHsKKyAgICBtZW10YWJsZV8tPlVucmVmKCk7CisgICAgbWVtdGFibGVfID0gbmV3IE1l
bVRhYmxlKGludGVybmFsX2NvbXBhcmF0b3JfKTsKKyAgICBtZW10YWJsZV8tPlJlZigpOworICAg
IGludCBzZXEgPSAxOworICAgIGZvciAoS1ZNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZGF0YS5i
ZWdpbigpOworICAgICAgICAgaXQgIT0gZGF0YS5lbmQoKTsKKyAgICAgICAgICsraXQpIHsKKyAg
ICAgIG1lbXRhYmxlXy0+QWRkKHNlcSwga1R5cGVWYWx1ZSwgaXQtPmZpcnN0LCBpdC0+c2Vjb25k
KTsKKyAgICAgIHNlcSsrOworICAgIH0KKyAgICByZXR1cm4gU3RhdHVzOjpPSygpOworICB9Cisg
IHZpcnR1YWwgSXRlcmF0b3IqIE5ld0l0ZXJhdG9yKCkgY29uc3QgeworICAgIHJldHVybiBuZXcg
S2V5Q29udmVydGluZ0l0ZXJhdG9yKG1lbXRhYmxlXy0+TmV3SXRlcmF0b3IoKSk7CisgIH0KKwor
IHByaXZhdGU6CisgIEludGVybmFsS2V5Q29tcGFyYXRvciBpbnRlcm5hbF9jb21wYXJhdG9yXzsK
KyAgTWVtVGFibGUqIG1lbXRhYmxlXzsKK307CisKK2NsYXNzIERCQ29uc3RydWN0b3I6IHB1Ymxp
YyBDb25zdHJ1Y3RvciB7CisgcHVibGljOgorICBleHBsaWNpdCBEQkNvbnN0cnVjdG9yKGNvbnN0
IENvbXBhcmF0b3IqIGNtcCkKKyAgICAgIDogQ29uc3RydWN0b3IoY21wKSwKKyAgICAgICAgY29t
cGFyYXRvcl8oY21wKSB7CisgICAgZGJfID0gTlVMTDsKKyAgICBOZXdEQigpOworICB9CisgIH5E
QkNvbnN0cnVjdG9yKCkgeworICAgIGRlbGV0ZSBkYl87CisgIH0KKyAgdmlydHVhbCBTdGF0dXMg
RmluaXNoSW1wbChjb25zdCBPcHRpb25zJiBvcHRpb25zLCBjb25zdCBLVk1hcCYgZGF0YSkgewor
ICAgIGRlbGV0ZSBkYl87CisgICAgZGJfID0gTlVMTDsKKyAgICBOZXdEQigpOworICAgIGZvciAo
S1ZNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZGF0YS5iZWdpbigpOworICAgICAgICAgaXQgIT0g
ZGF0YS5lbmQoKTsKKyAgICAgICAgICsraXQpIHsKKyAgICAgIFdyaXRlQmF0Y2ggYmF0Y2g7Cisg
ICAgICBiYXRjaC5QdXQoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAgIEFTU0VSVF9UUlVF
KGRiXy0+V3JpdGUoV3JpdGVPcHRpb25zKCksICZiYXRjaCkub2soKSk7CisgICAgfQorICAgIHJl
dHVybiBTdGF0dXM6Ok9LKCk7CisgIH0KKyAgdmlydHVhbCBJdGVyYXRvciogTmV3SXRlcmF0b3Io
KSBjb25zdCB7CisgICAgcmV0dXJuIGRiXy0+TmV3SXRlcmF0b3IoUmVhZE9wdGlvbnMoKSk7Cisg
IH0KKworICB2aXJ0dWFsIERCKiBkYigpIGNvbnN0IHsgcmV0dXJuIGRiXzsgfQorCisgcHJpdmF0
ZToKKyAgdm9pZCBOZXdEQigpIHsKKyAgICBzdGQ6OnN0cmluZyBuYW1lID0gdGVzdDo6VG1wRGly
KCkgKyAiL3RhYmxlX3Rlc3RkYiI7CisKKyAgICBPcHRpb25zIG9wdGlvbnM7CisgICAgb3B0aW9u
cy5jb21wYXJhdG9yID0gY29tcGFyYXRvcl87CisgICAgU3RhdHVzIHN0YXR1cyA9IERlc3Ryb3lE
QihuYW1lLCBvcHRpb25zKTsKKyAgICBBU1NFUlRfVFJVRShzdGF0dXMub2soKSkgPDwgc3RhdHVz
LlRvU3RyaW5nKCk7CisKKyAgICBvcHRpb25zLmNyZWF0ZV9pZl9taXNzaW5nID0gdHJ1ZTsKKyAg
ICBvcHRpb25zLmVycm9yX2lmX2V4aXN0cyA9IHRydWU7CisgICAgb3B0aW9ucy53cml0ZV9idWZm
ZXJfc2l6ZSA9IDEwMDAwOyAgLy8gU29tZXRoaW5nIHNtYWxsIHRvIGZvcmNlIG1lcmdpbmcKKyAg
ICBzdGF0dXMgPSBEQjo6T3BlbihvcHRpb25zLCBuYW1lLCAmZGJfKTsKKyAgICBBU1NFUlRfVFJV
RShzdGF0dXMub2soKSkgPDwgc3RhdHVzLlRvU3RyaW5nKCk7CisgIH0KKworICBjb25zdCBDb21w
YXJhdG9yKiBjb21wYXJhdG9yXzsKKyAgREIqIGRiXzsKK307CisKK2VudW0gVGVzdFR5cGUgewor
ICBUQUJMRV9URVNULAorICBCTE9DS19URVNULAorICBNRU1UQUJMRV9URVNULAorICBEQl9URVNU
Cit9OworCitzdHJ1Y3QgVGVzdEFyZ3MgeworICBUZXN0VHlwZSB0eXBlOworICBib29sIHJldmVy
c2VfY29tcGFyZTsKKyAgaW50IHJlc3RhcnRfaW50ZXJ2YWw7Cit9OworCitzdGF0aWMgY29uc3Qg
VGVzdEFyZ3Mga1Rlc3RBcmdMaXN0W10gPSB7CisgIHsgVEFCTEVfVEVTVCwgZmFsc2UsIDE2IH0s
CisgIHsgVEFCTEVfVEVTVCwgZmFsc2UsIDEgfSwKKyAgeyBUQUJMRV9URVNULCBmYWxzZSwgMTAy
NCB9LAorICB7IFRBQkxFX1RFU1QsIHRydWUsIDE2IH0sCisgIHsgVEFCTEVfVEVTVCwgdHJ1ZSwg
MSB9LAorICB7IFRBQkxFX1RFU1QsIHRydWUsIDEwMjQgfSwKKworICB7IEJMT0NLX1RFU1QsIGZh
bHNlLCAxNiB9LAorICB7IEJMT0NLX1RFU1QsIGZhbHNlLCAxIH0sCisgIHsgQkxPQ0tfVEVTVCwg
ZmFsc2UsIDEwMjQgfSwKKyAgeyBCTE9DS19URVNULCB0cnVlLCAxNiB9LAorICB7IEJMT0NLX1RF
U1QsIHRydWUsIDEgfSwKKyAgeyBCTE9DS19URVNULCB0cnVlLCAxMDI0IH0sCisKKyAgLy8gUmVz
dGFydCBpbnRlcnZhbCBkb2VzIG5vdCBtYXR0ZXIgZm9yIG1lbXRhYmxlcworICB7IE1FTVRBQkxF
X1RFU1QsIGZhbHNlLCAxNiB9LAorICB7IE1FTVRBQkxFX1RFU1QsIHRydWUsIDE2IH0sCisKKyAg
Ly8gRG8gbm90IGJvdGhlciB3aXRoIHJlc3RhcnQgaW50ZXJ2YWwgdmFyaWF0aW9ucyBmb3IgREIK
KyAgeyBEQl9URVNULCBmYWxzZSwgMTYgfSwKKyAgeyBEQl9URVNULCB0cnVlLCAxNiB9LAorfTsK
K3N0YXRpYyBjb25zdCBpbnQga051bVRlc3RBcmdzID0gc2l6ZW9mKGtUZXN0QXJnTGlzdCkgLyBz
aXplb2Yoa1Rlc3RBcmdMaXN0WzBdKTsKKworY2xhc3MgSGFybmVzcyB7CisgcHVibGljOgorICBI
YXJuZXNzKCkgOiBjb25zdHJ1Y3Rvcl8oTlVMTCkgeyB9CisKKyAgdm9pZCBJbml0KGNvbnN0IFRl
c3RBcmdzJiBhcmdzKSB7CisgICAgZGVsZXRlIGNvbnN0cnVjdG9yXzsKKyAgICBjb25zdHJ1Y3Rv
cl8gPSBOVUxMOworICAgIG9wdGlvbnNfID0gT3B0aW9ucygpOworCisgICAgb3B0aW9uc18uYmxv
Y2tfcmVzdGFydF9pbnRlcnZhbCA9IGFyZ3MucmVzdGFydF9pbnRlcnZhbDsKKyAgICAvLyBVc2Ug
c2hvcnRlciBibG9jayBzaXplIGZvciB0ZXN0cyB0byBleGVyY2lzZSBibG9jayBib3VuZGFyeQor
ICAgIC8vIGNvbmRpdGlvbnMgbW9yZS4KKyAgICBvcHRpb25zXy5ibG9ja19zaXplID0gMjU2Owor
ICAgIGlmIChhcmdzLnJldmVyc2VfY29tcGFyZSkgeworICAgICAgb3B0aW9uc18uY29tcGFyYXRv
ciA9ICZyZXZlcnNlX2tleV9jb21wYXJhdG9yOworICAgIH0KKyAgICBzd2l0Y2ggKGFyZ3MudHlw
ZSkgeworICAgICAgY2FzZSBUQUJMRV9URVNUOgorICAgICAgICBjb25zdHJ1Y3Rvcl8gPSBuZXcg
VGFibGVDb25zdHJ1Y3RvcihvcHRpb25zXy5jb21wYXJhdG9yKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEJMT0NLX1RFU1Q6CisgICAgICAgIGNvbnN0cnVjdG9yXyA9IG5ldyBCbG9ja0Nv
bnN0cnVjdG9yKG9wdGlvbnNfLmNvbXBhcmF0b3IpOworICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgTUVNVEFCTEVfVEVTVDoKKyAgICAgICAgY29uc3RydWN0b3JfID0gbmV3IE1lbVRhYmxlQ29u
c3RydWN0b3Iob3B0aW9uc18uY29tcGFyYXRvcik7CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBEQl9URVNUOgorICAgICAgICBjb25zdHJ1Y3Rvcl8gPSBuZXcgREJDb25zdHJ1Y3RvcihvcHRp
b25zXy5jb21wYXJhdG9yKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgfkhhcm5l
c3MoKSB7CisgICAgZGVsZXRlIGNvbnN0cnVjdG9yXzsKKyAgfQorCisgIHZvaWQgQWRkKGNvbnN0
IHN0ZDo6c3RyaW5nJiBrZXksIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkgeworICAgIGNvbnN0
cnVjdG9yXy0+QWRkKGtleSwgdmFsdWUpOworICB9CisKKyAgdm9pZCBUZXN0KFJhbmRvbSogcm5k
KSB7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGtleXM7CisgICAgS1ZNYXAgZGF0YTsK
KyAgICBjb25zdHJ1Y3Rvcl8tPkZpbmlzaChvcHRpb25zXywgJmtleXMsICZkYXRhKTsKKworICAg
IFRlc3RGb3J3YXJkU2NhbihrZXlzLCBkYXRhKTsKKyAgICBUZXN0QmFja3dhcmRTY2FuKGtleXMs
IGRhdGEpOworICAgIFRlc3RSYW5kb21BY2Nlc3Mocm5kLCBrZXlzLCBkYXRhKTsKKyAgfQorCisg
IHZvaWQgVGVzdEZvcndhcmRTY2FuKGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYga2V5
cywKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgS1ZNYXAmIGRhdGEpIHsKKyAgICBJdGVy
YXRvciogaXRlciA9IGNvbnN0cnVjdG9yXy0+TmV3SXRlcmF0b3IoKTsKKyAgICBBU1NFUlRfVFJV
RSghaXRlci0+VmFsaWQoKSk7CisgICAgaXRlci0+U2Vla1RvRmlyc3QoKTsKKyAgICBmb3IgKEtW
TWFwOjpjb25zdF9pdGVyYXRvciBtb2RlbF9pdGVyID0gZGF0YS5iZWdpbigpOworICAgICAgICAg
bW9kZWxfaXRlciAhPSBkYXRhLmVuZCgpOworICAgICAgICAgKyttb2RlbF9pdGVyKSB7CisgICAg
ICBBU1NFUlRfRVEoVG9TdHJpbmcoZGF0YSwgbW9kZWxfaXRlciksIFRvU3RyaW5nKGl0ZXIpKTsK
KyAgICAgIGl0ZXItPk5leHQoKTsKKyAgICB9CisgICAgQVNTRVJUX1RSVUUoIWl0ZXItPlZhbGlk
KCkpOworICAgIGRlbGV0ZSBpdGVyOworICB9CisKKyAgdm9pZCBUZXN0QmFja3dhcmRTY2FuKGNv
bnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYga2V5cywKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEtWTWFwJiBkYXRhKSB7CisgICAgSXRlcmF0b3IqIGl0ZXIgPSBjb25zdHJ1Y3Rv
cl8tPk5ld0l0ZXJhdG9yKCk7CisgICAgQVNTRVJUX1RSVUUoIWl0ZXItPlZhbGlkKCkpOworICAg
IGl0ZXItPlNlZWtUb0xhc3QoKTsKKyAgICBmb3IgKEtWTWFwOjpjb25zdF9yZXZlcnNlX2l0ZXJh
dG9yIG1vZGVsX2l0ZXIgPSBkYXRhLnJiZWdpbigpOworICAgICAgICAgbW9kZWxfaXRlciAhPSBk
YXRhLnJlbmQoKTsKKyAgICAgICAgICsrbW9kZWxfaXRlcikgeworICAgICAgQVNTRVJUX0VRKFRv
U3RyaW5nKGRhdGEsIG1vZGVsX2l0ZXIpLCBUb1N0cmluZyhpdGVyKSk7CisgICAgICBpdGVyLT5Q
cmV2KCk7CisgICAgfQorICAgIEFTU0VSVF9UUlVFKCFpdGVyLT5WYWxpZCgpKTsKKyAgICBkZWxl
dGUgaXRlcjsKKyAgfQorCisgIHZvaWQgVGVzdFJhbmRvbUFjY2VzcyhSYW5kb20qIHJuZCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYga2V5
cywKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEtWTWFwJiBkYXRhKSB7CisgICAgc3Rh
dGljIGNvbnN0IGJvb2wga1ZlcmJvc2UgPSBmYWxzZTsKKyAgICBJdGVyYXRvciogaXRlciA9IGNv
bnN0cnVjdG9yXy0+TmV3SXRlcmF0b3IoKTsKKyAgICBBU1NFUlRfVFJVRSghaXRlci0+VmFsaWQo
KSk7CisgICAgS1ZNYXA6OmNvbnN0X2l0ZXJhdG9yIG1vZGVsX2l0ZXIgPSBkYXRhLmJlZ2luKCk7
CisgICAgaWYgKGtWZXJib3NlKSBmcHJpbnRmKHN0ZGVyciwgIi0tLVxuIik7CisgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCAyMDA7IGkrKykgeworICAgICAgY29uc3QgaW50IHRvc3MgPSBybmQtPlVu
aWZvcm0oNSk7CisgICAgICBzd2l0Y2ggKHRvc3MpIHsKKyAgICAgICAgY2FzZSAwOiB7CisgICAg
ICAgICAgaWYgKGl0ZXItPlZhbGlkKCkpIHsKKyAgICAgICAgICAgIGlmIChrVmVyYm9zZSkgZnBy
aW50ZihzdGRlcnIsICJOZXh0XG4iKTsKKyAgICAgICAgICAgIGl0ZXItPk5leHQoKTsKKyAgICAg
ICAgICAgICsrbW9kZWxfaXRlcjsKKyAgICAgICAgICAgIEFTU0VSVF9FUShUb1N0cmluZyhkYXRh
LCBtb2RlbF9pdGVyKSwgVG9TdHJpbmcoaXRlcikpOworICAgICAgICAgIH0KKyAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgMTogeworICAgICAgICAgIGlmIChrVmVy
Ym9zZSkgZnByaW50ZihzdGRlcnIsICJTZWVrVG9GaXJzdFxuIik7CisgICAgICAgICAgaXRlci0+
U2Vla1RvRmlyc3QoKTsKKyAgICAgICAgICBtb2RlbF9pdGVyID0gZGF0YS5iZWdpbigpOworICAg
ICAgICAgIEFTU0VSVF9FUShUb1N0cmluZyhkYXRhLCBtb2RlbF9pdGVyKSwgVG9TdHJpbmcoaXRl
cikpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSAyOiB7Cisg
ICAgICAgICAgc3RkOjpzdHJpbmcga2V5ID0gUGlja1JhbmRvbUtleShybmQsIGtleXMpOworICAg
ICAgICAgIG1vZGVsX2l0ZXIgPSBkYXRhLmxvd2VyX2JvdW5kKGtleSk7CisgICAgICAgICAgaWYg
KGtWZXJib3NlKSBmcHJpbnRmKHN0ZGVyciwgIlNlZWsgJyVzJ1xuIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRXNjYXBlU3RyaW5nKGtleSkuY19zdHIoKSk7CisgICAgICAgICAg
aXRlci0+U2VlayhTbGljZShrZXkpKTsKKyAgICAgICAgICBBU1NFUlRfRVEoVG9TdHJpbmcoZGF0
YSwgbW9kZWxfaXRlciksIFRvU3RyaW5nKGl0ZXIpKTsKKyAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIGNhc2UgMzogeworICAgICAgICAgIGlmIChpdGVyLT5WYWxpZCgpKSB7
CisgICAgICAgICAgICBpZiAoa1ZlcmJvc2UpIGZwcmludGYoc3RkZXJyLCAiUHJldlxuIik7Cisg
ICAgICAgICAgICBpdGVyLT5QcmV2KCk7CisgICAgICAgICAgICBpZiAobW9kZWxfaXRlciA9PSBk
YXRhLmJlZ2luKCkpIHsKKyAgICAgICAgICAgICAgbW9kZWxfaXRlciA9IGRhdGEuZW5kKCk7ICAg
Ly8gV3JhcCBhcm91bmQgdG8gaW52YWxpZCB2YWx1ZQorICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgLS1tb2RlbF9pdGVyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNT
RVJUX0VRKFRvU3RyaW5nKGRhdGEsIG1vZGVsX2l0ZXIpLCBUb1N0cmluZyhpdGVyKSk7CisgICAg
ICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSA0OiB7
CisgICAgICAgICAgaWYgKGtWZXJib3NlKSBmcHJpbnRmKHN0ZGVyciwgIlNlZWtUb0xhc3RcbiIp
OworICAgICAgICAgIGl0ZXItPlNlZWtUb0xhc3QoKTsKKyAgICAgICAgICBpZiAoa2V5cy5lbXB0
eSgpKSB7CisgICAgICAgICAgICBtb2RlbF9pdGVyID0gZGF0YS5lbmQoKTsKKyAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgc3RkOjpzdHJpbmcgbGFzdCA9IGRhdGEucmJlZ2luKCktPmZp
cnN0OworICAgICAgICAgICAgbW9kZWxfaXRlciA9IGRhdGEubG93ZXJfYm91bmQobGFzdCk7Cisg
ICAgICAgICAgfQorICAgICAgICAgIEFTU0VSVF9FUShUb1N0cmluZyhkYXRhLCBtb2RlbF9pdGVy
KSwgVG9TdHJpbmcoaXRlcikpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9
CisgICAgfQorICAgIGRlbGV0ZSBpdGVyOworICB9CisKKyAgc3RkOjpzdHJpbmcgVG9TdHJpbmco
Y29uc3QgS1ZNYXAmIGRhdGEsIGNvbnN0IEtWTWFwOjpjb25zdF9pdGVyYXRvciYgaXQpIHsKKyAg
ICBpZiAoaXQgPT0gZGF0YS5lbmQoKSkgeworICAgICAgcmV0dXJuICJFTkQiOworICAgIH0gZWxz
ZSB7CisgICAgICByZXR1cm4gIiciICsgaXQtPmZpcnN0ICsgIi0+IiArIGl0LT5zZWNvbmQgKyAi
JyI7CisgICAgfQorICB9CisKKyAgc3RkOjpzdHJpbmcgVG9TdHJpbmcoY29uc3QgS1ZNYXAmIGRh
dGEsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEtWTWFwOjpjb25zdF9yZXZlcnNlX2l0
ZXJhdG9yJiBpdCkgeworICAgIGlmIChpdCA9PSBkYXRhLnJlbmQoKSkgeworICAgICAgcmV0dXJu
ICJFTkQiOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gIiciICsgaXQtPmZpcnN0ICsgIi0+
IiArIGl0LT5zZWNvbmQgKyAiJyI7CisgICAgfQorICB9CisKKyAgc3RkOjpzdHJpbmcgVG9TdHJp
bmcoY29uc3QgSXRlcmF0b3IqIGl0KSB7CisgICAgaWYgKCFpdC0+VmFsaWQoKSkgeworICAgICAg
cmV0dXJuICJFTkQiOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gIiciICsgaXQtPmtleSgp
LlRvU3RyaW5nKCkgKyAiLT4iICsgaXQtPnZhbHVlKCkuVG9TdHJpbmcoKSArICInIjsKKyAgICB9
CisgIH0KKworICBzdGQ6OnN0cmluZyBQaWNrUmFuZG9tS2V5KFJhbmRvbSogcm5kLCBjb25zdCBz
dGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGtleXMpIHsKKyAgICBpZiAoa2V5cy5lbXB0eSgpKSB7
CisgICAgICByZXR1cm4gImZvbyI7CisgICAgfSBlbHNlIHsKKyAgICAgIGNvbnN0IGludCBpbmRl
eCA9IHJuZC0+VW5pZm9ybShrZXlzLnNpemUoKSk7CisgICAgICBzdGQ6OnN0cmluZyByZXN1bHQg
PSBrZXlzW2luZGV4XTsKKyAgICAgIHN3aXRjaCAocm5kLT5Vbmlmb3JtKDMpKSB7CisgICAgICAg
IGNhc2UgMDoKKyAgICAgICAgICAvLyBSZXR1cm4gYW4gZXhpc3Rpbmcga2V5CisgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgMTogeworICAgICAgICAgIC8vIEF0dGVtcHQgdG8gcmV0dXJu
IHNvbWV0aGluZyBzbWFsbGVyIHRoYW4gYW4gZXhpc3Rpbmcga2V5CisgICAgICAgICAgaWYgKHJl
c3VsdC5zaXplKCkgPiAwICYmIHJlc3VsdFtyZXN1bHQuc2l6ZSgpLTFdID4gJ1wwJykgeworICAg
ICAgICAgICAgcmVzdWx0W3Jlc3VsdC5zaXplKCktMV0tLTsKKyAgICAgICAgICB9CisgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSAyOiB7CisgICAgICAgICAgLy8gUmV0
dXJuIHNvbWV0aGluZyBsYXJnZXIgdGhhbiBhbiBleGlzdGluZyBrZXkKKyAgICAgICAgICBJbmNy
ZW1lbnQob3B0aW9uc18uY29tcGFyYXRvciwgJnJlc3VsdCk7CisgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICB9CisKKyAg
Ly8gUmV0dXJucyBOVUxMIGlmIG5vdCBydW5uaW5nIGFnYWluc3QgYSBEQgorICBEQiogZGIoKSBj
b25zdCB7IHJldHVybiBjb25zdHJ1Y3Rvcl8tPmRiKCk7IH0KKworIHByaXZhdGU6CisgIE9wdGlv
bnMgb3B0aW9uc187CisgIENvbnN0cnVjdG9yKiBjb25zdHJ1Y3Rvcl87Cit9OworCisvLyBUZXN0
IHRoZSBlbXB0eSBrZXkKK1RFU1QoSGFybmVzcywgU2ltcGxlRW1wdHlLZXkpIHsKKyAgZm9yIChp
bnQgaSA9IDA7IGkgPCBrTnVtVGVzdEFyZ3M7IGkrKykgeworICAgIEluaXQoa1Rlc3RBcmdMaXN0
W2ldKTsKKyAgICBSYW5kb20gcm5kKHRlc3Q6OlJhbmRvbVNlZWQoKSArIDEpOworICAgIEFkZCgi
IiwgInYiKTsKKyAgICBUZXN0KCZybmQpOworICB9Cit9CisKK1RFU1QoSGFybmVzcywgU2ltcGxl
U2luZ2xlKSB7CisgIGZvciAoaW50IGkgPSAwOyBpIDwga051bVRlc3RBcmdzOyBpKyspIHsKKyAg
ICBJbml0KGtUZXN0QXJnTGlzdFtpXSk7CisgICAgUmFuZG9tIHJuZCh0ZXN0OjpSYW5kb21TZWVk
KCkgKyAyKTsKKyAgICBBZGQoImFiYyIsICJ2Iik7CisgICAgVGVzdCgmcm5kKTsKKyAgfQorfQor
CitURVNUKEhhcm5lc3MsIFNpbXBsZU11bHRpKSB7CisgIGZvciAoaW50IGkgPSAwOyBpIDwga051
bVRlc3RBcmdzOyBpKyspIHsKKyAgICBJbml0KGtUZXN0QXJnTGlzdFtpXSk7CisgICAgUmFuZG9t
IHJuZCh0ZXN0OjpSYW5kb21TZWVkKCkgKyAzKTsKKyAgICBBZGQoImFiYyIsICJ2Iik7CisgICAg
QWRkKCJhYmNkIiwgInYiKTsKKyAgICBBZGQoImFjIiwgInYyIik7CisgICAgVGVzdCgmcm5kKTsK
KyAgfQorfQorCitURVNUKEhhcm5lc3MsIFNpbXBsZVNwZWNpYWxLZXkpIHsKKyAgZm9yIChpbnQg
aSA9IDA7IGkgPCBrTnVtVGVzdEFyZ3M7IGkrKykgeworICAgIEluaXQoa1Rlc3RBcmdMaXN0W2ld
KTsKKyAgICBSYW5kb20gcm5kKHRlc3Q6OlJhbmRvbVNlZWQoKSArIDQpOworICAgIEFkZCgiXHhm
Zlx4ZmYiLCAidjMiKTsKKyAgICBUZXN0KCZybmQpOworICB9Cit9CisKK1RFU1QoSGFybmVzcywg
UmFuZG9taXplZCkgeworICBmb3IgKGludCBpID0gMDsgaSA8IGtOdW1UZXN0QXJnczsgaSsrKSB7
CisgICAgSW5pdChrVGVzdEFyZ0xpc3RbaV0pOworICAgIFJhbmRvbSBybmQodGVzdDo6UmFuZG9t
U2VlZCgpICsgNSk7CisgICAgZm9yIChpbnQgbnVtX2VudHJpZXMgPSAwOyBudW1fZW50cmllcyA8
IDIwMDA7CisgICAgICAgICBudW1fZW50cmllcyArPSAobnVtX2VudHJpZXMgPCA1MCA/IDEgOiAy
MDApKSB7CisgICAgICBpZiAoKG51bV9lbnRyaWVzICUgMTApID09IDApIHsKKyAgICAgICAgZnBy
aW50ZihzdGRlcnIsICJjYXNlICVkIG9mICVkOiBudW1fZW50cmllcyA9ICVkXG4iLAorICAgICAg
ICAgICAgICAgIChpICsgMSksIGludChrTnVtVGVzdEFyZ3MpLCBudW1fZW50cmllcyk7CisgICAg
ICB9CisgICAgICBmb3IgKGludCBlID0gMDsgZSA8IG51bV9lbnRyaWVzOyBlKyspIHsKKyAgICAg
ICAgc3RkOjpzdHJpbmcgdjsKKyAgICAgICAgQWRkKHRlc3Q6OlJhbmRvbUtleSgmcm5kLCBybmQu
U2tld2VkKDQpKSwKKyAgICAgICAgICAgIHRlc3Q6OlJhbmRvbVN0cmluZygmcm5kLCBybmQuU2tl
d2VkKDUpLCAmdikuVG9TdHJpbmcoKSk7CisgICAgICB9CisgICAgICBUZXN0KCZybmQpOworICAg
IH0KKyAgfQorfQorCitURVNUKEhhcm5lc3MsIFJhbmRvbWl6ZWRMb25nREIpIHsKKyAgUmFuZG9t
IHJuZCh0ZXN0OjpSYW5kb21TZWVkKCkpOworICBUZXN0QXJncyBhcmdzID0geyBEQl9URVNULCBm
YWxzZSwgMTYgfTsKKyAgSW5pdChhcmdzKTsKKyAgaW50IG51bV9lbnRyaWVzID0gMTAwMDAwOwor
ICBmb3IgKGludCBlID0gMDsgZSA8IG51bV9lbnRyaWVzOyBlKyspIHsKKyAgICBzdGQ6OnN0cmlu
ZyB2OworICAgIEFkZCh0ZXN0OjpSYW5kb21LZXkoJnJuZCwgcm5kLlNrZXdlZCg0KSksCisgICAg
ICAgIHRlc3Q6OlJhbmRvbVN0cmluZygmcm5kLCBybmQuU2tld2VkKDUpLCAmdikuVG9TdHJpbmco
KSk7CisgIH0KKyAgVGVzdCgmcm5kKTsKKworICAvLyBXZSBtdXN0IGhhdmUgY3JlYXRlZCBlbm91
Z2ggZGF0YSB0byBmb3JjZSBtZXJnaW5nCisgIGludCBmaWxlcyA9IDA7CisgIGZvciAoaW50IGxl
dmVsID0gMDsgbGV2ZWwgPCBjb25maWc6OmtOdW1MZXZlbHM7IGxldmVsKyspIHsKKyAgICBzdGQ6
OnN0cmluZyB2YWx1ZTsKKyAgICBjaGFyIG5hbWVbMTAwXTsKKyAgICBzbnByaW50ZihuYW1lLCBz
aXplb2YobmFtZSksICJsZXZlbGRiLm51bS1maWxlcy1hdC1sZXZlbCVkIiwgbGV2ZWwpOworICAg
IEFTU0VSVF9UUlVFKGRiKCktPkdldFByb3BlcnR5KG5hbWUsICZ2YWx1ZSkpOworICAgIGZpbGVz
ICs9IGF0b2kodmFsdWUuY19zdHIoKSk7CisgIH0KKyAgQVNTRVJUX0dUKGZpbGVzLCAwKTsKK30K
KworY2xhc3MgTWVtVGFibGVUZXN0IHsgfTsKKworVEVTVChNZW1UYWJsZVRlc3QsIFNpbXBsZSkg
eworICBJbnRlcm5hbEtleUNvbXBhcmF0b3IgY21wKEJ5dGV3aXNlQ29tcGFyYXRvcigpKTsKKyAg
TWVtVGFibGUqIG1lbXRhYmxlID0gbmV3IE1lbVRhYmxlKGNtcCk7CisgIG1lbXRhYmxlLT5SZWYo
KTsKKyAgV3JpdGVCYXRjaCBiYXRjaDsKKyAgV3JpdGVCYXRjaEludGVybmFsOjpTZXRTZXF1ZW5j
ZSgmYmF0Y2gsIDEwMCk7CisgIGJhdGNoLlB1dChzdGQ6OnN0cmluZygiazEiKSwgc3RkOjpzdHJp
bmcoInYxIikpOworICBiYXRjaC5QdXQoc3RkOjpzdHJpbmcoImsyIiksIHN0ZDo6c3RyaW5nKCJ2
MiIpKTsKKyAgYmF0Y2guUHV0KHN0ZDo6c3RyaW5nKCJrMyIpLCBzdGQ6OnN0cmluZygidjMiKSk7
CisgIGJhdGNoLlB1dChzdGQ6OnN0cmluZygibGFyZ2VrZXkiKSwgc3RkOjpzdHJpbmcoInZsYXJn
ZSIpKTsKKyAgQVNTRVJUX1RSVUUoV3JpdGVCYXRjaEludGVybmFsOjpJbnNlcnRJbnRvKCZiYXRj
aCwgbWVtdGFibGUpLm9rKCkpOworCisgIEl0ZXJhdG9yKiBpdGVyID0gbWVtdGFibGUtPk5ld0l0
ZXJhdG9yKCk7CisgIGl0ZXItPlNlZWtUb0ZpcnN0KCk7CisgIHdoaWxlIChpdGVyLT5WYWxpZCgp
KSB7CisgICAgZnByaW50ZihzdGRlcnIsICJrZXk6ICclcycgLT4gJyVzJ1xuIiwKKyAgICAgICAg
ICAgIGl0ZXItPmtleSgpLlRvU3RyaW5nKCkuY19zdHIoKSwKKyAgICAgICAgICAgIGl0ZXItPnZh
bHVlKCkuVG9TdHJpbmcoKS5jX3N0cigpKTsKKyAgICBpdGVyLT5OZXh0KCk7CisgIH0KKworICBk
ZWxldGUgaXRlcjsKKyAgbWVtdGFibGUtPlVucmVmKCk7Cit9CisKK3N0YXRpYyBib29sIEJldHdl
ZW4odWludDY0X3QgdmFsLCB1aW50NjRfdCBsb3csIHVpbnQ2NF90IGhpZ2gpIHsKKyAgYm9vbCBy
ZXN1bHQgPSAodmFsID49IGxvdykgJiYgKHZhbCA8PSBoaWdoKTsKKyAgaWYgKCFyZXN1bHQpIHsK
KyAgICBmcHJpbnRmKHN0ZGVyciwgIlZhbHVlICVsbHUgaXMgbm90IGluIHJhbmdlIFslbGx1LCAl
bGx1XVxuIiwKKyAgICAgICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpKHZhbCksCisgICAgICAg
ICAgICAodW5zaWduZWQgbG9uZyBsb25nKShsb3cpLAorICAgICAgICAgICAgKHVuc2lnbmVkIGxv
bmcgbG9uZykoaGlnaCkpOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKK2NsYXNzIFRhYmxl
VGVzdCB7IH07CisKK1RFU1QoVGFibGVUZXN0LCBBcHByb3hpbWF0ZU9mZnNldE9mUGxhaW4pIHsK
KyAgVGFibGVDb25zdHJ1Y3RvciBjKEJ5dGV3aXNlQ29tcGFyYXRvcigpKTsKKyAgYy5BZGQoImsw
MSIsICJoZWxsbyIpOworICBjLkFkZCgiazAyIiwgImhlbGxvMiIpOworICBjLkFkZCgiazAzIiwg
c3RkOjpzdHJpbmcoMTAwMDAsICd4JykpOworICBjLkFkZCgiazA0Iiwgc3RkOjpzdHJpbmcoMjAw
MDAwLCAneCcpKTsKKyAgYy5BZGQoImswNSIsIHN0ZDo6c3RyaW5nKDMwMDAwMCwgJ3gnKSk7Cisg
IGMuQWRkKCJrMDYiLCAiaGVsbG8zIik7CisgIGMuQWRkKCJrMDciLCBzdGQ6OnN0cmluZygxMDAw
MDAsICd4JykpOworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4ga2V5czsKKyAgS1ZNYXAga3Zt
YXA7CisgIE9wdGlvbnMgb3B0aW9uczsKKyAgb3B0aW9ucy5ibG9ja19zaXplID0gMTAyNDsKKyAg
b3B0aW9ucy5jb21wcmVzc2lvbiA9IGtOb0NvbXByZXNzaW9uOworICBjLkZpbmlzaChvcHRpb25z
LCAma2V5cywgJmt2bWFwKTsKKworICBBU1NFUlRfVFJVRShCZXR3ZWVuKGMuQXBwcm94aW1hdGVP
ZmZzZXRPZigiYWJjIiksICAgICAgIDAsICAgICAgMCkpOworICBBU1NFUlRfVFJVRShCZXR3ZWVu
KGMuQXBwcm94aW1hdGVPZmZzZXRPZigiazAxIiksICAgICAgIDAsICAgICAgMCkpOworICBBU1NF
UlRfVFJVRShCZXR3ZWVuKGMuQXBwcm94aW1hdGVPZmZzZXRPZigiazAxYSIpLCAgICAgIDAsICAg
ICAgMCkpOworICBBU1NFUlRfVFJVRShCZXR3ZWVuKGMuQXBwcm94aW1hdGVPZmZzZXRPZigiazAy
IiksICAgICAgIDAsICAgICAgMCkpOworICBBU1NFUlRfVFJVRShCZXR3ZWVuKGMuQXBwcm94aW1h
dGVPZmZzZXRPZigiazAzIiksICAgICAgIDAsICAgICAgMCkpOworICBBU1NFUlRfVFJVRShCZXR3
ZWVuKGMuQXBwcm94aW1hdGVPZmZzZXRPZigiazA0IiksICAgMTAwMDAsICAxMTAwMCkpOworICBB
U1NFUlRfVFJVRShCZXR3ZWVuKGMuQXBwcm94aW1hdGVPZmZzZXRPZigiazA0YSIpLCAyMTAwMDAs
IDIxMTAwMCkpOworICBBU1NFUlRfVFJVRShCZXR3ZWVuKGMuQXBwcm94aW1hdGVPZmZzZXRPZigi
azA1IiksICAyMTAwMDAsIDIxMTAwMCkpOworICBBU1NFUlRfVFJVRShCZXR3ZWVuKGMuQXBwcm94
aW1hdGVPZmZzZXRPZigiazA2IiksICA1MTAwMDAsIDUxMTAwMCkpOworICBBU1NFUlRfVFJVRShC
ZXR3ZWVuKGMuQXBwcm94aW1hdGVPZmZzZXRPZigiazA3IiksICA1MTAwMDAsIDUxMTAwMCkpOwor
ICBBU1NFUlRfVFJVRShCZXR3ZWVuKGMuQXBwcm94aW1hdGVPZmZzZXRPZigieHl6IiksICA2MTAw
MDAsIDYxMjAwMCkpOworCit9CisKK3N0YXRpYyBib29sIFNuYXBweUNvbXByZXNzaW9uU3VwcG9y
dGVkKCkgeworICBzdGQ6OnN0cmluZyBvdXQ7CisgIFNsaWNlIGluID0gImFhYWFhYWFhYWFhYWFh
YWFhYWFhYWFhYWFhYWFhYWEiOworICByZXR1cm4gcG9ydDo6U25hcHB5X0NvbXByZXNzKGluLmRh
dGEoKSwgaW4uc2l6ZSgpLCAmb3V0KTsKK30KKworVEVTVChUYWJsZVRlc3QsIEFwcHJveGltYXRl
T2Zmc2V0T2ZDb21wcmVzc2VkKSB7CisgIGlmICghU25hcHB5Q29tcHJlc3Npb25TdXBwb3J0ZWQo
KSkgeworICAgIGZwcmludGYoc3RkZXJyLCAic2tpcHBpbmcgY29tcHJlc3Npb24gdGVzdHNcbiIp
OworICAgIHJldHVybjsKKyAgfQorCisgIFJhbmRvbSBybmQoMzAxKTsKKyAgVGFibGVDb25zdHJ1
Y3RvciBjKEJ5dGV3aXNlQ29tcGFyYXRvcigpKTsKKyAgc3RkOjpzdHJpbmcgdG1wOworICBjLkFk
ZCgiazAxIiwgImhlbGxvIik7CisgIGMuQWRkKCJrMDIiLCB0ZXN0OjpDb21wcmVzc2libGVTdHJp
bmcoJnJuZCwgMC4yNSwgMTAwMDAsICZ0bXApKTsKKyAgYy5BZGQoImswMyIsICJoZWxsbzMiKTsK
KyAgYy5BZGQoImswNCIsIHRlc3Q6OkNvbXByZXNzaWJsZVN0cmluZygmcm5kLCAwLjI1LCAxMDAw
MCwgJnRtcCkpOworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4ga2V5czsKKyAgS1ZNYXAga3Zt
YXA7CisgIE9wdGlvbnMgb3B0aW9uczsKKyAgb3B0aW9ucy5ibG9ja19zaXplID0gMTAyNDsKKyAg
b3B0aW9ucy5jb21wcmVzc2lvbiA9IGtTbmFwcHlDb21wcmVzc2lvbjsKKyAgYy5GaW5pc2gob3B0
aW9ucywgJmtleXMsICZrdm1hcCk7CisKKyAgQVNTRVJUX1RSVUUoQmV0d2VlbihjLkFwcHJveGlt
YXRlT2Zmc2V0T2YoImFiYyIpLCAgICAgICAwLCAgICAgIDApKTsKKyAgQVNTRVJUX1RSVUUoQmV0
d2VlbihjLkFwcHJveGltYXRlT2Zmc2V0T2YoImswMSIpLCAgICAgICAwLCAgICAgIDApKTsKKyAg
QVNTRVJUX1RSVUUoQmV0d2VlbihjLkFwcHJveGltYXRlT2Zmc2V0T2YoImswMiIpLCAgICAgICAw
LCAgICAgIDApKTsKKyAgQVNTRVJUX1RSVUUoQmV0d2VlbihjLkFwcHJveGltYXRlT2Zmc2V0T2Yo
ImswMyIpLCAgICAyMDAwLCAgIDMwMDApKTsKKyAgQVNTRVJUX1RSVUUoQmV0d2VlbihjLkFwcHJv
eGltYXRlT2Zmc2V0T2YoImswNCIpLCAgICAyMDAwLCAgIDMwMDApKTsKKyAgQVNTRVJUX1RSVUUo
QmV0d2VlbihjLkFwcHJveGltYXRlT2Zmc2V0T2YoInh5eiIpLCAgICA0MDAwLCAgIDYwMDApKTsK
K30KKworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIq
KiBhcmd2KSB7CisgIHJldHVybiBsZXZlbGRiOjp0ZXN0OjpSdW5BbGxUZXN0cygpOworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi90YWJsZS90d29fbGV2ZWxfaXRlcmF0
b3IuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxlL3R3b19sZXZlbF9pdGVyYXRv
ci5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi43ODIyZWJhYjljMzJjZTU3OWM0MmY5NjIxNTQ1ZDcyODNlODMzMmI5
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi90YWJsZS90d29f
bGV2ZWxfaXRlcmF0b3IuY2MKQEAgLTAsMCArMSwxODIgQEAKKy8vIENvcHlyaWdodCAoYykgMjAx
MSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUg
Zm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2luY2x1ZGUgInRhYmxlL3R3b19sZXZlbF9p
dGVyYXRvci5oIgorCisjaW5jbHVkZSAibGV2ZWxkYi90YWJsZS5oIgorI2luY2x1ZGUgInRhYmxl
L2Jsb2NrLmgiCisjaW5jbHVkZSAidGFibGUvZm9ybWF0LmgiCisjaW5jbHVkZSAidGFibGUvaXRl
cmF0b3Jfd3JhcHBlci5oIgorCituYW1lc3BhY2UgbGV2ZWxkYiB7CisKK25hbWVzcGFjZSB7CisK
K3R5cGVkZWYgSXRlcmF0b3IqICgqQmxvY2tGdW5jdGlvbikodm9pZCosIGNvbnN0IFJlYWRPcHRp
b25zJiwgY29uc3QgU2xpY2UmKTsKKworY2xhc3MgVHdvTGV2ZWxJdGVyYXRvcjogcHVibGljIEl0
ZXJhdG9yIHsKKyBwdWJsaWM6CisgIFR3b0xldmVsSXRlcmF0b3IoCisgICAgSXRlcmF0b3IqIGlu
ZGV4X2l0ZXIsCisgICAgQmxvY2tGdW5jdGlvbiBibG9ja19mdW5jdGlvbiwKKyAgICB2b2lkKiBh
cmcsCisgICAgY29uc3QgUmVhZE9wdGlvbnMmIG9wdGlvbnMpOworCisgIHZpcnR1YWwgflR3b0xl
dmVsSXRlcmF0b3IoKTsKKworICB2aXJ0dWFsIHZvaWQgU2Vlayhjb25zdCBTbGljZSYgdGFyZ2V0
KTsKKyAgdmlydHVhbCB2b2lkIFNlZWtUb0ZpcnN0KCk7CisgIHZpcnR1YWwgdm9pZCBTZWVrVG9M
YXN0KCk7CisgIHZpcnR1YWwgdm9pZCBOZXh0KCk7CisgIHZpcnR1YWwgdm9pZCBQcmV2KCk7CisK
KyAgdmlydHVhbCBib29sIFZhbGlkKCkgY29uc3QgeworICAgIHJldHVybiBkYXRhX2l0ZXJfLlZh
bGlkKCk7CisgIH0KKyAgdmlydHVhbCBTbGljZSBrZXkoKSBjb25zdCB7CisgICAgYXNzZXJ0KFZh
bGlkKCkpOworICAgIHJldHVybiBkYXRhX2l0ZXJfLmtleSgpOworICB9CisgIHZpcnR1YWwgU2xp
Y2UgdmFsdWUoKSBjb25zdCB7CisgICAgYXNzZXJ0KFZhbGlkKCkpOworICAgIHJldHVybiBkYXRh
X2l0ZXJfLnZhbHVlKCk7CisgIH0KKyAgdmlydHVhbCBTdGF0dXMgc3RhdHVzKCkgY29uc3Qgewor
ICAgIC8vIEl0J2QgYmUgbmljZSBpZiBzdGF0dXMoKSByZXR1cm5lZCBhIGNvbnN0IFN0YXR1cyYg
aW5zdGVhZCBvZiBhIFN0YXR1cworICAgIGlmICghaW5kZXhfaXRlcl8uc3RhdHVzKCkub2soKSkg
eworICAgICAgcmV0dXJuIGluZGV4X2l0ZXJfLnN0YXR1cygpOworICAgIH0gZWxzZSBpZiAoZGF0
YV9pdGVyXy5pdGVyKCkgIT0gTlVMTCAmJiAhZGF0YV9pdGVyXy5zdGF0dXMoKS5vaygpKSB7Cisg
ICAgICByZXR1cm4gZGF0YV9pdGVyXy5zdGF0dXMoKTsKKyAgICB9IGVsc2UgeworICAgICAgcmV0
dXJuIHN0YXR1c187CisgICAgfQorICB9CisKKyBwcml2YXRlOgorICB2b2lkIFNhdmVFcnJvcihj
b25zdCBTdGF0dXMmIHMpIHsKKyAgICBpZiAoc3RhdHVzXy5vaygpICYmICFzLm9rKCkpIHN0YXR1
c18gPSBzOworICB9CisgIHZvaWQgU2tpcEVtcHR5RGF0YUJsb2Nrc0ZvcndhcmQoKTsKKyAgdm9p
ZCBTa2lwRW1wdHlEYXRhQmxvY2tzQmFja3dhcmQoKTsKKyAgdm9pZCBTZXREYXRhSXRlcmF0b3Io
SXRlcmF0b3IqIGRhdGFfaXRlcik7CisgIHZvaWQgSW5pdERhdGFCbG9jaygpOworCisgIEJsb2Nr
RnVuY3Rpb24gYmxvY2tfZnVuY3Rpb25fOworICB2b2lkKiBhcmdfOworICBjb25zdCBSZWFkT3B0
aW9ucyBvcHRpb25zXzsKKyAgU3RhdHVzIHN0YXR1c187CisgIEl0ZXJhdG9yV3JhcHBlciBpbmRl
eF9pdGVyXzsKKyAgSXRlcmF0b3JXcmFwcGVyIGRhdGFfaXRlcl87IC8vIE1heSBiZSBOVUxMCisg
IC8vIElmIGRhdGFfaXRlcl8gaXMgbm9uLU5VTEwsIHRoZW4gImRhdGFfYmxvY2tfaGFuZGxlXyIg
aG9sZHMgdGhlCisgIC8vICJpbmRleF92YWx1ZSIgcGFzc2VkIHRvIGJsb2NrX2Z1bmN0aW9uXyB0
byBjcmVhdGUgdGhlIGRhdGFfaXRlcl8uCisgIHN0ZDo6c3RyaW5nIGRhdGFfYmxvY2tfaGFuZGxl
XzsKK307CisKK1R3b0xldmVsSXRlcmF0b3I6OlR3b0xldmVsSXRlcmF0b3IoCisgICAgSXRlcmF0
b3IqIGluZGV4X2l0ZXIsCisgICAgQmxvY2tGdW5jdGlvbiBibG9ja19mdW5jdGlvbiwKKyAgICB2
b2lkKiBhcmcsCisgICAgY29uc3QgUmVhZE9wdGlvbnMmIG9wdGlvbnMpCisgICAgOiBibG9ja19m
dW5jdGlvbl8oYmxvY2tfZnVuY3Rpb24pLAorICAgICAgYXJnXyhhcmcpLAorICAgICAgb3B0aW9u
c18ob3B0aW9ucyksCisgICAgICBpbmRleF9pdGVyXyhpbmRleF9pdGVyKSwKKyAgICAgIGRhdGFf
aXRlcl8oTlVMTCkgeworfQorCitUd29MZXZlbEl0ZXJhdG9yOjp+VHdvTGV2ZWxJdGVyYXRvcigp
IHsKK30KKwordm9pZCBUd29MZXZlbEl0ZXJhdG9yOjpTZWVrKGNvbnN0IFNsaWNlJiB0YXJnZXQp
IHsKKyAgaW5kZXhfaXRlcl8uU2Vlayh0YXJnZXQpOworICBJbml0RGF0YUJsb2NrKCk7CisgIGlm
IChkYXRhX2l0ZXJfLml0ZXIoKSAhPSBOVUxMKSBkYXRhX2l0ZXJfLlNlZWsodGFyZ2V0KTsKKyAg
U2tpcEVtcHR5RGF0YUJsb2Nrc0ZvcndhcmQoKTsKK30KKwordm9pZCBUd29MZXZlbEl0ZXJhdG9y
OjpTZWVrVG9GaXJzdCgpIHsKKyAgaW5kZXhfaXRlcl8uU2Vla1RvRmlyc3QoKTsKKyAgSW5pdERh
dGFCbG9jaygpOworICBpZiAoZGF0YV9pdGVyXy5pdGVyKCkgIT0gTlVMTCkgZGF0YV9pdGVyXy5T
ZWVrVG9GaXJzdCgpOworICBTa2lwRW1wdHlEYXRhQmxvY2tzRm9yd2FyZCgpOworfQorCit2b2lk
IFR3b0xldmVsSXRlcmF0b3I6OlNlZWtUb0xhc3QoKSB7CisgIGluZGV4X2l0ZXJfLlNlZWtUb0xh
c3QoKTsKKyAgSW5pdERhdGFCbG9jaygpOworICBpZiAoZGF0YV9pdGVyXy5pdGVyKCkgIT0gTlVM
TCkgZGF0YV9pdGVyXy5TZWVrVG9MYXN0KCk7CisgIFNraXBFbXB0eURhdGFCbG9ja3NCYWNrd2Fy
ZCgpOworfQorCit2b2lkIFR3b0xldmVsSXRlcmF0b3I6Ok5leHQoKSB7CisgIGFzc2VydChWYWxp
ZCgpKTsKKyAgZGF0YV9pdGVyXy5OZXh0KCk7CisgIFNraXBFbXB0eURhdGFCbG9ja3NGb3J3YXJk
KCk7Cit9CisKK3ZvaWQgVHdvTGV2ZWxJdGVyYXRvcjo6UHJldigpIHsKKyAgYXNzZXJ0KFZhbGlk
KCkpOworICBkYXRhX2l0ZXJfLlByZXYoKTsKKyAgU2tpcEVtcHR5RGF0YUJsb2Nrc0JhY2t3YXJk
KCk7Cit9CisKKwordm9pZCBUd29MZXZlbEl0ZXJhdG9yOjpTa2lwRW1wdHlEYXRhQmxvY2tzRm9y
d2FyZCgpIHsKKyAgd2hpbGUgKGRhdGFfaXRlcl8uaXRlcigpID09IE5VTEwgfHwgIWRhdGFfaXRl
cl8uVmFsaWQoKSkgeworICAgIC8vIE1vdmUgdG8gbmV4dCBibG9jaworICAgIGlmICghaW5kZXhf
aXRlcl8uVmFsaWQoKSkgeworICAgICAgU2V0RGF0YUl0ZXJhdG9yKE5VTEwpOworICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBpbmRleF9pdGVyXy5OZXh0KCk7CisgICAgSW5pdERhdGFCbG9jaygp
OworICAgIGlmIChkYXRhX2l0ZXJfLml0ZXIoKSAhPSBOVUxMKSBkYXRhX2l0ZXJfLlNlZWtUb0Zp
cnN0KCk7CisgIH0KK30KKwordm9pZCBUd29MZXZlbEl0ZXJhdG9yOjpTa2lwRW1wdHlEYXRhQmxv
Y2tzQmFja3dhcmQoKSB7CisgIHdoaWxlIChkYXRhX2l0ZXJfLml0ZXIoKSA9PSBOVUxMIHx8ICFk
YXRhX2l0ZXJfLlZhbGlkKCkpIHsKKyAgICAvLyBNb3ZlIHRvIG5leHQgYmxvY2sKKyAgICBpZiAo
IWluZGV4X2l0ZXJfLlZhbGlkKCkpIHsKKyAgICAgIFNldERhdGFJdGVyYXRvcihOVUxMKTsKKyAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgaW5kZXhfaXRlcl8uUHJldigpOworICAgIEluaXREYXRh
QmxvY2soKTsKKyAgICBpZiAoZGF0YV9pdGVyXy5pdGVyKCkgIT0gTlVMTCkgZGF0YV9pdGVyXy5T
ZWVrVG9MYXN0KCk7CisgIH0KK30KKwordm9pZCBUd29MZXZlbEl0ZXJhdG9yOjpTZXREYXRhSXRl
cmF0b3IoSXRlcmF0b3IqIGRhdGFfaXRlcikgeworICBpZiAoZGF0YV9pdGVyXy5pdGVyKCkgIT0g
TlVMTCkgU2F2ZUVycm9yKGRhdGFfaXRlcl8uc3RhdHVzKCkpOworICBkYXRhX2l0ZXJfLlNldChk
YXRhX2l0ZXIpOworfQorCit2b2lkIFR3b0xldmVsSXRlcmF0b3I6OkluaXREYXRhQmxvY2soKSB7
CisgIGlmICghaW5kZXhfaXRlcl8uVmFsaWQoKSkgeworICAgIFNldERhdGFJdGVyYXRvcihOVUxM
KTsKKyAgfSBlbHNlIHsKKyAgICBTbGljZSBoYW5kbGUgPSBpbmRleF9pdGVyXy52YWx1ZSgpOwor
ICAgIGlmIChkYXRhX2l0ZXJfLml0ZXIoKSAhPSBOVUxMICYmIGhhbmRsZS5jb21wYXJlKGRhdGFf
YmxvY2tfaGFuZGxlXykgPT0gMCkgeworICAgICAgLy8gZGF0YV9pdGVyXyBpcyBhbHJlYWR5IGNv
bnN0cnVjdGVkIHdpdGggdGhpcyBpdGVyYXRvciwgc28KKyAgICAgIC8vIG5vIG5lZWQgdG8gY2hh
bmdlIGFueXRoaW5nCisgICAgfSBlbHNlIHsKKyAgICAgIEl0ZXJhdG9yKiBpdGVyID0gKCpibG9j
a19mdW5jdGlvbl8pKGFyZ18sIG9wdGlvbnNfLCBoYW5kbGUpOworICAgICAgZGF0YV9ibG9ja19o
YW5kbGVfLmFzc2lnbihoYW5kbGUuZGF0YSgpLCBoYW5kbGUuc2l6ZSgpKTsKKyAgICAgIFNldERh
dGFJdGVyYXRvcihpdGVyKTsKKyAgICB9CisgIH0KK30KKworfSAgLy8gbmFtZXNwYWNlCisKK0l0
ZXJhdG9yKiBOZXdUd29MZXZlbEl0ZXJhdG9yKAorICAgIEl0ZXJhdG9yKiBpbmRleF9pdGVyLAor
ICAgIEJsb2NrRnVuY3Rpb24gYmxvY2tfZnVuY3Rpb24sCisgICAgdm9pZCogYXJnLAorICAgIGNv
bnN0IFJlYWRPcHRpb25zJiBvcHRpb25zKSB7CisgIHJldHVybiBuZXcgVHdvTGV2ZWxJdGVyYXRv
cihpbmRleF9pdGVyLCBibG9ja19mdW5jdGlvbiwgYXJnLCBvcHRpb25zKTsKK30KKworfSAgLy8g
bmFtZXNwYWNlIGxldmVsZGIKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIv
dGFibGUvdHdvX2xldmVsX2l0ZXJhdG9yLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3Rh
YmxlL3R3b19sZXZlbF9pdGVyYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYyOWNhMzQ1MjU0MTQ1ODJlMzlk
ZjhhZDdhNDhlZmY3MmUwZTQ1MGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9sZXZlbGRiL3RhYmxlL3R3b19sZXZlbF9pdGVyYXRvci5oCkBAIC0wLDAgKzEsMzQgQEAKKy8v
IENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2Vl
IHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2lmbmRlZiBT
VE9SQUdFX0xFVkVMREJfVEFCTEVfVFdPX0xFVkVMX0lURVJBVE9SX0hfCisjZGVmaW5lIFNUT1JB
R0VfTEVWRUxEQl9UQUJMRV9UV09fTEVWRUxfSVRFUkFUT1JfSF8KKworI2luY2x1ZGUgImxldmVs
ZGIvaXRlcmF0b3IuaCIKKworbmFtZXNwYWNlIGxldmVsZGIgeworCitzdHJ1Y3QgUmVhZE9wdGlv
bnM7CisKKy8vIFJldHVybiBhIG5ldyB0d28gbGV2ZWwgaXRlcmF0b3IuICBBIHR3by1sZXZlbCBp
dGVyYXRvciBjb250YWlucyBhbgorLy8gaW5kZXggaXRlcmF0b3Igd2hvc2UgdmFsdWVzIHBvaW50
IHRvIGEgc2VxdWVuY2Ugb2YgYmxvY2tzIHdoZXJlCisvLyBlYWNoIGJsb2NrIGlzIGl0c2VsZiBh
IHNlcXVlbmNlIG9mIGtleSx2YWx1ZSBwYWlycy4gIFRoZSByZXR1cm5lZAorLy8gdHdvLWxldmVs
IGl0ZXJhdG9yIHlpZWxkcyB0aGUgY29uY2F0ZW5hdGlvbiBvZiBhbGwga2V5L3ZhbHVlIHBhaXJz
CisvLyBpbiB0aGUgc2VxdWVuY2Ugb2YgYmxvY2tzLiAgVGFrZXMgb3duZXJzaGlwIG9mICJpbmRl
eF9pdGVyIiBhbmQKKy8vIHdpbGwgZGVsZXRlIGl0IHdoZW4gbm8gbG9uZ2VyIG5lZWRlZC4KKy8v
CisvLyBVc2VzIGEgc3VwcGxpZWQgZnVuY3Rpb24gdG8gY29udmVydCBhbiBpbmRleF9pdGVyIHZh
bHVlIGludG8KKy8vIGFuIGl0ZXJhdG9yIG92ZXIgdGhlIGNvbnRlbnRzIG9mIHRoZSBjb3JyZXNw
b25kaW5nIGJsb2NrLgorZXh0ZXJuIEl0ZXJhdG9yKiBOZXdUd29MZXZlbEl0ZXJhdG9yKAorICAg
IEl0ZXJhdG9yKiBpbmRleF9pdGVyLAorICAgIEl0ZXJhdG9yKiAoKmJsb2NrX2Z1bmN0aW9uKSgK
KyAgICAgICAgdm9pZCogYXJnLAorICAgICAgICBjb25zdCBSZWFkT3B0aW9ucyYgb3B0aW9ucywK
KyAgICAgICAgY29uc3QgU2xpY2UmIGluZGV4X3ZhbHVlKSwKKyAgICB2b2lkKiBhcmcsCisgICAg
Y29uc3QgUmVhZE9wdGlvbnMmIG9wdGlvbnMpOworCit9ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgor
CisjZW5kaWYgIC8vIFNUT1JBR0VfTEVWRUxEQl9UQUJMRV9UV09fTEVWRUxfSVRFUkFUT1JfSF8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9hcmVuYS5jYyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9hcmVuYS5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NTUxZDZh
M2EyN2M4YzJiZDEzY2M3ZTQ4ODgyYWFlY2RiNzViYTIwCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2FyZW5hLmNjCkBAIC0wLDAgKzEsNjggQEAKKy8v
IENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2Vl
IHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2luY2x1ZGUg
InV0aWwvYXJlbmEuaCIKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworbmFtZXNwYWNlIGxldmVsZGIg
eworCitzdGF0aWMgY29uc3QgaW50IGtCbG9ja1NpemUgPSA0MDk2OworCitBcmVuYTo6QXJlbmEo
KSB7CisgIGJsb2Nrc19tZW1vcnlfID0gMDsKKyAgYWxsb2NfcHRyXyA9IE5VTEw7ICAvLyBGaXJz
dCBhbGxvY2F0aW9uIHdpbGwgYWxsb2NhdGUgYSBibG9jaworICBhbGxvY19ieXRlc19yZW1haW5p
bmdfID0gMDsKK30KKworQXJlbmE6On5BcmVuYSgpIHsKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBibG9ja3NfLnNpemUoKTsgaSsrKSB7CisgICAgZGVsZXRlW10gYmxvY2tzX1tpXTsKKyAgfQor
fQorCitjaGFyKiBBcmVuYTo6QWxsb2NhdGVGYWxsYmFjayhzaXplX3QgYnl0ZXMpIHsKKyAgaWYg
KGJ5dGVzID4ga0Jsb2NrU2l6ZSAvIDQpIHsKKyAgICAvLyBPYmplY3QgaXMgbW9yZSB0aGFuIGEg
cXVhcnRlciBvZiBvdXIgYmxvY2sgc2l6ZS4gIEFsbG9jYXRlIGl0IHNlcGFyYXRlbHkKKyAgICAv
LyB0byBhdm9pZCB3YXN0aW5nIHRvbyBtdWNoIHNwYWNlIGluIGxlZnRvdmVyIGJ5dGVzLgorICAg
IGNoYXIqIHJlc3VsdCA9IEFsbG9jYXRlTmV3QmxvY2soYnl0ZXMpOworICAgIHJldHVybiByZXN1
bHQ7CisgIH0KKworICAvLyBXZSB3YXN0ZSB0aGUgcmVtYWluaW5nIHNwYWNlIGluIHRoZSBjdXJy
ZW50IGJsb2NrLgorICBhbGxvY19wdHJfID0gQWxsb2NhdGVOZXdCbG9jayhrQmxvY2tTaXplKTsK
KyAgYWxsb2NfYnl0ZXNfcmVtYWluaW5nXyA9IGtCbG9ja1NpemU7CisKKyAgY2hhciogcmVzdWx0
ID0gYWxsb2NfcHRyXzsKKyAgYWxsb2NfcHRyXyArPSBieXRlczsKKyAgYWxsb2NfYnl0ZXNfcmVt
YWluaW5nXyAtPSBieXRlczsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworY2hhciogQXJlbmE6OkFs
bG9jYXRlQWxpZ25lZChzaXplX3QgYnl0ZXMpIHsKKyAgY29uc3QgaW50IGFsaWduID0gc2l6ZW9m
KHZvaWQqKTsgICAgLy8gV2UnbGwgYWxpZ24gdG8gcG9pbnRlciBzaXplCisgIGFzc2VydCgoYWxp
Z24gJiAoYWxpZ24tMSkpID09IDApOyAgIC8vIFBvaW50ZXIgc2l6ZSBzaG91bGQgYmUgYSBwb3dl
ciBvZiAyCisgIHNpemVfdCBjdXJyZW50X21vZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
PihhbGxvY19wdHJfKSAmIChhbGlnbi0xKTsKKyAgc2l6ZV90IHNsb3AgPSAoY3VycmVudF9tb2Qg
PT0gMCA/IDAgOiBhbGlnbiAtIGN1cnJlbnRfbW9kKTsKKyAgc2l6ZV90IG5lZWRlZCA9IGJ5dGVz
ICsgc2xvcDsKKyAgY2hhciogcmVzdWx0OworICBpZiAobmVlZGVkIDw9IGFsbG9jX2J5dGVzX3Jl
bWFpbmluZ18pIHsKKyAgICByZXN1bHQgPSBhbGxvY19wdHJfICsgc2xvcDsKKyAgICBhbGxvY19w
dHJfICs9IG5lZWRlZDsKKyAgICBhbGxvY19ieXRlc19yZW1haW5pbmdfIC09IG5lZWRlZDsKKyAg
fSBlbHNlIHsKKyAgICAvLyBBbGxvY2F0ZUZhbGxiYWNrIGFsd2F5cyByZXR1cm5lZCBhbGlnbmVk
IG1lbW9yeQorICAgIHJlc3VsdCA9IEFsbG9jYXRlRmFsbGJhY2soYnl0ZXMpOworICB9CisgIGFz
c2VydCgocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHJlc3VsdCkgJiAoYWxpZ24tMSkpID09
IDApOworICByZXR1cm4gcmVzdWx0OworfQorCitjaGFyKiBBcmVuYTo6QWxsb2NhdGVOZXdCbG9j
ayhzaXplX3QgYmxvY2tfYnl0ZXMpIHsKKyAgY2hhciogcmVzdWx0ID0gbmV3IGNoYXJbYmxvY2tf
Ynl0ZXNdOworICBibG9ja3NfbWVtb3J5XyArPSBibG9ja19ieXRlczsKKyAgYmxvY2tzXy5wdXNo
X2JhY2socmVzdWx0KTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAgLy8gbmFtZXNwYWNlIGxl
dmVsZGIKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9hcmVuYS5o
IGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2FyZW5hLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGY3
ZGRlMjI2YzQ1MDc0NTY0NmYyOTk4NmQwMzAyNjMwZGI2ZjFmNQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9hcmVuYS5oCkBAIC0wLDAgKzEsNjggQEAK
Ky8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4g
U2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2lmbmRl
ZiBTVE9SQUdFX0xFVkVMREJfVVRJTF9BUkVOQV9IXworI2RlZmluZSBTVE9SQUdFX0xFVkVMREJf
VVRJTF9BUkVOQV9IXworCisjaW5jbHVkZSA8Y3N0ZGRlZj4KKyNpbmNsdWRlIDx2ZWN0b3I+Cisj
aW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKK25hbWVzcGFjZSBsZXZl
bGRiIHsKKworY2xhc3MgQXJlbmEgeworIHB1YmxpYzoKKyAgQXJlbmEoKTsKKyAgfkFyZW5hKCk7
CisKKyAgLy8gUmV0dXJuIGEgcG9pbnRlciB0byBhIG5ld2x5IGFsbG9jYXRlZCBtZW1vcnkgYmxv
Y2sgb2YgImJ5dGVzIiBieXRlcy4KKyAgY2hhciogQWxsb2NhdGUoc2l6ZV90IGJ5dGVzKTsKKwor
ICAvLyBBbGxvY2F0ZSBtZW1vcnkgd2l0aCB0aGUgbm9ybWFsIGFsaWdubWVudCBndWFyYW50ZWVz
IHByb3ZpZGVkIGJ5IG1hbGxvYworICBjaGFyKiBBbGxvY2F0ZUFsaWduZWQoc2l6ZV90IGJ5dGVz
KTsKKworICAvLyBSZXR1cm5zIGFuIGVzdGltYXRlIG9mIHRoZSB0b3RhbCBtZW1vcnkgdXNhZ2Ug
b2YgZGF0YSBhbGxvY2F0ZWQKKyAgLy8gYnkgdGhlIGFyZW5hIChpbmNsdWRpbmcgc3BhY2UgYWxs
b2NhdGVkIGJ1dCBub3QgeWV0IHVzZWQgZm9yIHVzZXIKKyAgLy8gYWxsb2NhdGlvbnMpLgorICBz
aXplX3QgTWVtb3J5VXNhZ2UoKSBjb25zdCB7CisgICAgcmV0dXJuIGJsb2Nrc19tZW1vcnlfICsg
YmxvY2tzXy5jYXBhY2l0eSgpICogc2l6ZW9mKGNoYXIqKTsKKyAgfQorCisgcHJpdmF0ZToKKyAg
Y2hhciogQWxsb2NhdGVGYWxsYmFjayhzaXplX3QgYnl0ZXMpOworICBjaGFyKiBBbGxvY2F0ZU5l
d0Jsb2NrKHNpemVfdCBibG9ja19ieXRlcyk7CisKKyAgLy8gQWxsb2NhdGlvbiBzdGF0ZQorICBj
aGFyKiBhbGxvY19wdHJfOworICBzaXplX3QgYWxsb2NfYnl0ZXNfcmVtYWluaW5nXzsKKworICAv
LyBBcnJheSBvZiBuZXdbXSBhbGxvY2F0ZWQgbWVtb3J5IGJsb2NrcworICBzdGQ6OnZlY3Rvcjxj
aGFyKj4gYmxvY2tzXzsKKworICAvLyBCeXRlcyBvZiBtZW1vcnkgaW4gYmxvY2tzIGFsbG9jYXRl
ZCBzbyBmYXIKKyAgc2l6ZV90IGJsb2Nrc19tZW1vcnlfOworCisgIC8vIE5vIGNvcHlpbmcgYWxs
b3dlZAorICBBcmVuYShjb25zdCBBcmVuYSYpOworICB2b2lkIG9wZXJhdG9yPShjb25zdCBBcmVu
YSYpOworfTsKKworaW5saW5lIGNoYXIqIEFyZW5hOjpBbGxvY2F0ZShzaXplX3QgYnl0ZXMpIHsK
KyAgLy8gVGhlIHNlbWFudGljcyBvZiB3aGF0IHRvIHJldHVybiBhcmUgYSBiaXQgbWVzc3kgaWYg
d2UgYWxsb3cKKyAgLy8gMC1ieXRlIGFsbG9jYXRpb25zLCBzbyB3ZSBkaXNhbGxvdyB0aGVtIGhl
cmUgKHdlIGRvbid0IG5lZWQKKyAgLy8gdGhlbSBmb3Igb3VyIGludGVybmFsIHVzZSkuCisgIGFz
c2VydChieXRlcyA+IDApOworICBpZiAoYnl0ZXMgPD0gYWxsb2NfYnl0ZXNfcmVtYWluaW5nXykg
eworICAgIGNoYXIqIHJlc3VsdCA9IGFsbG9jX3B0cl87CisgICAgYWxsb2NfcHRyXyArPSBieXRl
czsKKyAgICBhbGxvY19ieXRlc19yZW1haW5pbmdfIC09IGJ5dGVzOworICAgIHJldHVybiByZXN1
bHQ7CisgIH0KKyAgcmV0dXJuIEFsbG9jYXRlRmFsbGJhY2soYnl0ZXMpOworfQorCit9ICAvLyBu
YW1lc3BhY2UgbGV2ZWxkYgorCisjZW5kaWYgIC8vIFNUT1JBR0VfTEVWRUxEQl9VVElMX0FSRU5B
X0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvYXJlbmFfdGVz
dC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9hcmVuYV90ZXN0LmNjCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjYzZDE3NzgwMzQ1NTBhNzM5NDAyOWRmNDFkNmIyNGY5MDUzZjU2NjMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvYXJlbmFfdGVzdC5jYwpA
QCAtMCwwICsxLDY4IEBACisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmli
dXRvcnMuCisKKyNpbmNsdWRlICJ1dGlsL2FyZW5hLmgiCisKKyNpbmNsdWRlICJ1dGlsL3JhbmRv
bS5oIgorI2luY2x1ZGUgInV0aWwvdGVzdGhhcm5lc3MuaCIKKworbmFtZXNwYWNlIGxldmVsZGIg
eworCitjbGFzcyBBcmVuYVRlc3QgeyB9OworCitURVNUKEFyZW5hVGVzdCwgRW1wdHkpIHsKKyAg
QXJlbmEgYXJlbmE7Cit9CisKK1RFU1QoQXJlbmFUZXN0LCBTaW1wbGUpIHsKKyAgc3RkOjp2ZWN0
b3I8c3RkOjpwYWlyPHNpemVfdCwgY2hhcio+ID4gYWxsb2NhdGVkOworICBBcmVuYSBhcmVuYTsK
KyAgY29uc3QgaW50IE4gPSAxMDAwMDA7CisgIHNpemVfdCBieXRlcyA9IDA7CisgIFJhbmRvbSBy
bmQoMzAxKTsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsKKyAgICBzaXplX3QgczsK
KyAgICBpZiAoaSAlIChOIC8gMTApID09IDApIHsKKyAgICAgIHMgPSBpOworICAgIH0gZWxzZSB7
CisgICAgICBzID0gcm5kLk9uZUluKDQwMDApID8gcm5kLlVuaWZvcm0oNjAwMCkgOgorICAgICAg
ICAgIChybmQuT25lSW4oMTApID8gcm5kLlVuaWZvcm0oMTAwKSA6IHJuZC5Vbmlmb3JtKDIwKSk7
CisgICAgfQorICAgIGlmIChzID09IDApIHsKKyAgICAgIC8vIE91ciBhcmVuYSBkaXNhbGxvd3Mg
c2l6ZSAwIGFsbG9jYXRpb25zLgorICAgICAgcyA9IDE7CisgICAgfQorICAgIGNoYXIqIHI7Cisg
ICAgaWYgKHJuZC5PbmVJbigxMCkpIHsKKyAgICAgIHIgPSBhcmVuYS5BbGxvY2F0ZUFsaWduZWQo
cyk7CisgICAgfSBlbHNlIHsKKyAgICAgIHIgPSBhcmVuYS5BbGxvY2F0ZShzKTsKKyAgICB9CisK
KyAgICBmb3IgKGludCBiID0gMDsgYiA8IHM7IGIrKykgeworICAgICAgLy8gRmlsbCB0aGUgImki
dGggYWxsb2NhdGlvbiB3aXRoIGEga25vd24gYml0IHBhdHRlcm4KKyAgICAgIHJbYl0gPSBpICUg
MjU2OworICAgIH0KKyAgICBieXRlcyArPSBzOworICAgIGFsbG9jYXRlZC5wdXNoX2JhY2soc3Rk
OjptYWtlX3BhaXIocywgcikpOworICAgIEFTU0VSVF9HRShhcmVuYS5NZW1vcnlVc2FnZSgpLCBi
eXRlcyk7CisgICAgaWYgKGkgPiBOLzEwKSB7CisgICAgICBBU1NFUlRfTEUoYXJlbmEuTWVtb3J5
VXNhZ2UoKSwgYnl0ZXMgKiAxLjEwKTsKKyAgICB9CisgIH0KKyAgZm9yIChpbnQgaSA9IDA7IGkg
PCBhbGxvY2F0ZWQuc2l6ZSgpOyBpKyspIHsKKyAgICBzaXplX3QgbnVtX2J5dGVzID0gYWxsb2Nh
dGVkW2ldLmZpcnN0OworICAgIGNvbnN0IGNoYXIqIHAgPSBhbGxvY2F0ZWRbaV0uc2Vjb25kOwor
ICAgIGZvciAoaW50IGIgPSAwOyBiIDwgbnVtX2J5dGVzOyBiKyspIHsKKyAgICAgIC8vIENoZWNr
IHRoZSAiaSJ0aCBhbGxvY2F0aW9uIGZvciB0aGUga25vd24gYml0IHBhdHRlcm4KKyAgICAgIEFT
U0VSVF9FUShpbnQocFtiXSkgJiAweGZmLCBpICUgMjU2KTsKKyAgICB9CisgIH0KK30KKworfSAg
Ly8gbmFtZXNwYWNlIGxldmVsZGIKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KSB7
CisgIHJldHVybiBsZXZlbGRiOjp0ZXN0OjpSdW5BbGxUZXN0cygpOworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2Jsb29tLmNjIGIvU291cmNlL1RoaXJkUGFy
dHkvbGV2ZWxkYi91dGlsL2Jsb29tLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ3OTQxY2QyMWZhYjY0MDc5Y2Jl
ZjFmNjIwNjBhNDhmMGQ4NmM3NGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9sZXZlbGRiL3V0aWwvYmxvb20uY2MKQEAgLTAsMCArMSw5NSBAQAorLy8gQ29weXJpZ2h0IChj
KSAyMDEyIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMg
ZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgorCisjaW5jbHVkZSAibGV2ZWxkYi9maWx0
ZXJfcG9saWN5LmgiCisKKyNpbmNsdWRlICJsZXZlbGRiL3NsaWNlLmgiCisjaW5jbHVkZSAidXRp
bC9oYXNoLmgiCisKK25hbWVzcGFjZSBsZXZlbGRiIHsKKworbmFtZXNwYWNlIHsKK3N0YXRpYyB1
aW50MzJfdCBCbG9vbUhhc2goY29uc3QgU2xpY2UmIGtleSkgeworICByZXR1cm4gSGFzaChrZXku
ZGF0YSgpLCBrZXkuc2l6ZSgpLCAweGJjOWYxZDM0KTsKK30KKworY2xhc3MgQmxvb21GaWx0ZXJQ
b2xpY3kgOiBwdWJsaWMgRmlsdGVyUG9saWN5IHsKKyBwcml2YXRlOgorICBzaXplX3QgYml0c19w
ZXJfa2V5XzsKKyAgc2l6ZV90IGtfOworCisgcHVibGljOgorICBleHBsaWNpdCBCbG9vbUZpbHRl
clBvbGljeShpbnQgYml0c19wZXJfa2V5KQorICAgICAgOiBiaXRzX3Blcl9rZXlfKGJpdHNfcGVy
X2tleSkgeworICAgIC8vIFdlIGludGVudGlvbmFsbHkgcm91bmQgZG93biB0byByZWR1Y2UgcHJv
YmluZyBjb3N0IGEgbGl0dGxlIGJpdAorICAgIGtfID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihiaXRz
X3Blcl9rZXkgKiAwLjY5KTsgIC8vIDAuNjkgPX4gbG4oMikKKyAgICBpZiAoa18gPCAxKSBrXyA9
IDE7CisgICAgaWYgKGtfID4gMzApIGtfID0gMzA7CisgIH0KKworICB2aXJ0dWFsIGNvbnN0IGNo
YXIqIE5hbWUoKSBjb25zdCB7CisgICAgcmV0dXJuICJsZXZlbGRiLkJ1aWx0aW5CbG9vbUZpbHRl
ciI7CisgIH0KKworICB2aXJ0dWFsIHZvaWQgQ3JlYXRlRmlsdGVyKGNvbnN0IFNsaWNlKiBrZXlz
LCBpbnQgbiwgc3RkOjpzdHJpbmcqIGRzdCkgY29uc3QgeworICAgIC8vIENvbXB1dGUgYmxvb20g
ZmlsdGVyIHNpemUgKGluIGJvdGggYml0cyBhbmQgYnl0ZXMpCisgICAgc2l6ZV90IGJpdHMgPSBu
ICogYml0c19wZXJfa2V5XzsKKworICAgIC8vIEZvciBzbWFsbCBuLCB3ZSBjYW4gc2VlIGEgdmVy
eSBoaWdoIGZhbHNlIHBvc2l0aXZlIHJhdGUuICBGaXggaXQKKyAgICAvLyBieSBlbmZvcmNpbmcg
YSBtaW5pbXVtIGJsb29tIGZpbHRlciBsZW5ndGguCisgICAgaWYgKGJpdHMgPCA2NCkgYml0cyA9
IDY0OworCisgICAgc2l6ZV90IGJ5dGVzID0gKGJpdHMgKyA3KSAvIDg7CisgICAgYml0cyA9IGJ5
dGVzICogODsKKworICAgIGNvbnN0IHNpemVfdCBpbml0X3NpemUgPSBkc3QtPnNpemUoKTsKKyAg
ICBkc3QtPnJlc2l6ZShpbml0X3NpemUgKyBieXRlcywgMCk7CisgICAgZHN0LT5wdXNoX2JhY2so
c3RhdGljX2Nhc3Q8Y2hhcj4oa18pKTsgIC8vIFJlbWVtYmVyICMgb2YgcHJvYmVzIGluIGZpbHRl
cgorICAgIGNoYXIqIGFycmF5ID0gJigqZHN0KVtpbml0X3NpemVdOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgICAvLyBVc2UgZG91YmxlLWhhc2hpbmcgdG8gZ2Vu
ZXJhdGUgYSBzZXF1ZW5jZSBvZiBoYXNoIHZhbHVlcy4KKyAgICAgIC8vIFNlZSBhbmFseXNpcyBp
biBbS2lyc2NoLE1pdHplbm1hY2hlciAyMDA2XS4KKyAgICAgIHVpbnQzMl90IGggPSBCbG9vbUhh
c2goa2V5c1tpXSk7CisgICAgICBjb25zdCB1aW50MzJfdCBkZWx0YSA9IChoID4+IDE3KSB8ICho
IDw8IDE1KTsgIC8vIFJvdGF0ZSByaWdodCAxNyBiaXRzCisgICAgICBmb3IgKHNpemVfdCBqID0g
MDsgaiA8IGtfOyBqKyspIHsKKyAgICAgICAgY29uc3QgdWludDMyX3QgYml0cG9zID0gaCAlIGJp
dHM7CisgICAgICAgIGFycmF5W2JpdHBvcy84XSB8PSAoMSA8PCAoYml0cG9zICUgOCkpOworICAg
ICAgICBoICs9IGRlbHRhOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHZpcnR1YWwgYm9vbCBL
ZXlNYXlNYXRjaChjb25zdCBTbGljZSYga2V5LCBjb25zdCBTbGljZSYgYmxvb21fZmlsdGVyKSBj
b25zdCB7CisgICAgY29uc3Qgc2l6ZV90IGxlbiA9IGJsb29tX2ZpbHRlci5zaXplKCk7CisgICAg
aWYgKGxlbiA8IDIpIHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0IGNoYXIqIGFycmF5ID0gYmxv
b21fZmlsdGVyLmRhdGEoKTsKKyAgICBjb25zdCBzaXplX3QgYml0cyA9IChsZW4gLSAxKSAqIDg7
CisKKyAgICAvLyBVc2UgdGhlIGVuY29kZWQgayBzbyB0aGF0IHdlIGNhbiByZWFkIGZpbHRlcnMg
Z2VuZXJhdGVkIGJ5CisgICAgLy8gYmxvb20gZmlsdGVycyBjcmVhdGVkIHVzaW5nIGRpZmZlcmVu
dCBwYXJhbWV0ZXJzLgorICAgIGNvbnN0IHNpemVfdCBrID0gYXJyYXlbbGVuLTFdOworICAgIGlm
IChrID4gMzApIHsKKyAgICAgIC8vIFJlc2VydmVkIGZvciBwb3RlbnRpYWxseSBuZXcgZW5jb2Rp
bmdzIGZvciBzaG9ydCBibG9vbSBmaWx0ZXJzLgorICAgICAgLy8gQ29uc2lkZXIgaXQgYSBtYXRj
aC4KKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHVpbnQzMl90IGggPSBCbG9vbUhh
c2goa2V5KTsKKyAgICBjb25zdCB1aW50MzJfdCBkZWx0YSA9IChoID4+IDE3KSB8IChoIDw8IDE1
KTsgIC8vIFJvdGF0ZSByaWdodCAxNyBiaXRzCisgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBr
OyBqKyspIHsKKyAgICAgIGNvbnN0IHVpbnQzMl90IGJpdHBvcyA9IGggJSBiaXRzOworICAgICAg
aWYgKChhcnJheVtiaXRwb3MvOF0gJiAoMSA8PCAoYml0cG9zICUgOCkpKSA9PSAwKSByZXR1cm4g
ZmFsc2U7CisgICAgICBoICs9IGRlbHRhOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQor
fTsKK30KKworY29uc3QgRmlsdGVyUG9saWN5KiBOZXdCbG9vbUZpbHRlclBvbGljeShpbnQgYml0
c19wZXJfa2V5KSB7CisgIHJldHVybiBuZXcgQmxvb21GaWx0ZXJQb2xpY3koYml0c19wZXJfa2V5
KTsKK30KKworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xldmVsZGIvdXRpbC9ibG9vbV90ZXN0LmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGV2
ZWxkYi91dGlsL2Jsb29tX3Rlc3QuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGJmOGU4ZDZlYmVhZTg2MGQ3ZDU1
MzUzODUxMWVmMmFjNmU4MGYyMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xldmVsZGIvdXRpbC9ibG9vbV90ZXN0LmNjCkBAIC0wLDAgKzEsMTYwIEBACisvLyBDb3B5cmln
aHQgKGMpIDIwMTIgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVU
SE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCisKKyNpbmNsdWRlICJsZXZlbGRi
L2ZpbHRlcl9wb2xpY3kuaCIKKworI2luY2x1ZGUgInV0aWwvY29kaW5nLmgiCisjaW5jbHVkZSAi
dXRpbC9sb2dnaW5nLmgiCisjaW5jbHVkZSAidXRpbC90ZXN0aGFybmVzcy5oIgorI2luY2x1ZGUg
InV0aWwvdGVzdHV0aWwuaCIKKworbmFtZXNwYWNlIGxldmVsZGIgeworCitzdGF0aWMgY29uc3Qg
aW50IGtWZXJib3NlID0gMTsKKworc3RhdGljIFNsaWNlIEtleShpbnQgaSwgY2hhciogYnVmZmVy
KSB7CisgIEVuY29kZUZpeGVkMzIoYnVmZmVyLCBpKTsKKyAgcmV0dXJuIFNsaWNlKGJ1ZmZlciwg
c2l6ZW9mKHVpbnQzMl90KSk7Cit9CisKK2NsYXNzIEJsb29tVGVzdCB7CisgcHJpdmF0ZToKKyAg
Y29uc3QgRmlsdGVyUG9saWN5KiBwb2xpY3lfOworICBzdGQ6OnN0cmluZyBmaWx0ZXJfOworICBz
dGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4ga2V5c187CisKKyBwdWJsaWM6CisgIEJsb29tVGVzdCgp
IDogcG9saWN5XyhOZXdCbG9vbUZpbHRlclBvbGljeSgxMCkpIHsgfQorCisgIH5CbG9vbVRlc3Qo
KSB7CisgICAgZGVsZXRlIHBvbGljeV87CisgIH0KKworICB2b2lkIFJlc2V0KCkgeworICAgIGtl
eXNfLmNsZWFyKCk7CisgICAgZmlsdGVyXy5jbGVhcigpOworICB9CisKKyAgdm9pZCBBZGQoY29u
c3QgU2xpY2UmIHMpIHsKKyAgICBrZXlzXy5wdXNoX2JhY2socy5Ub1N0cmluZygpKTsKKyAgfQor
CisgIHZvaWQgQnVpbGQoKSB7CisgICAgc3RkOjp2ZWN0b3I8U2xpY2U+IGtleV9zbGljZXM7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzXy5zaXplKCk7IGkrKykgeworICAgICAga2V5
X3NsaWNlcy5wdXNoX2JhY2soU2xpY2Uoa2V5c19baV0pKTsKKyAgICB9CisgICAgZmlsdGVyXy5j
bGVhcigpOworICAgIHBvbGljeV8tPkNyZWF0ZUZpbHRlcigma2V5X3NsaWNlc1swXSwga2V5X3Ns
aWNlcy5zaXplKCksICZmaWx0ZXJfKTsKKyAgICBrZXlzXy5jbGVhcigpOworICAgIGlmIChrVmVy
Ym9zZSA+PSAyKSBEdW1wRmlsdGVyKCk7CisgIH0KKworICBzaXplX3QgRmlsdGVyU2l6ZSgpIGNv
bnN0IHsKKyAgICByZXR1cm4gZmlsdGVyXy5zaXplKCk7CisgIH0KKworICB2b2lkIER1bXBGaWx0
ZXIoKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJGKCIpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpKzEgPCBmaWx0ZXJfLnNpemUoKTsgaSsrKSB7CisgICAgICBjb25zdCB1bnNpZ25lZCBpbnQg
YyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oZmlsdGVyX1tpXSk7CisgICAgICBmb3IgKGlu
dCBqID0gMDsgaiA8IDg7IGorKykgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVjIiwgKGMg
JiAoMSA8PGopKSA/ICcxJyA6ICcuJyk7CisgICAgICB9CisgICAgfQorICAgIGZwcmludGYoc3Rk
ZXJyLCAiKVxuIik7CisgIH0KKworICBib29sIE1hdGNoZXMoY29uc3QgU2xpY2UmIHMpIHsKKyAg
ICBpZiAoIWtleXNfLmVtcHR5KCkpIHsKKyAgICAgIEJ1aWxkKCk7CisgICAgfQorICAgIHJldHVy
biBwb2xpY3lfLT5LZXlNYXlNYXRjaChzLCBmaWx0ZXJfKTsKKyAgfQorCisgIGRvdWJsZSBGYWxz
ZVBvc2l0aXZlUmF0ZSgpIHsKKyAgICBjaGFyIGJ1ZmZlcltzaXplb2YoaW50KV07CisgICAgaW50
IHJlc3VsdCA9IDA7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDAwMDsgaSsrKSB7CisgICAg
ICBpZiAoTWF0Y2hlcyhLZXkoaSArIDEwMDAwMDAwMDAsIGJ1ZmZlcikpKSB7CisgICAgICAgIHJl
c3VsdCsrOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0IC8gMTAwMDAuMDsKKyAg
fQorfTsKKworVEVTVChCbG9vbVRlc3QsIEVtcHR5RmlsdGVyKSB7CisgIEFTU0VSVF9UUlVFKCEg
TWF0Y2hlcygiaGVsbG8iKSk7CisgIEFTU0VSVF9UUlVFKCEgTWF0Y2hlcygid29ybGQiKSk7Cit9
CisKK1RFU1QoQmxvb21UZXN0LCBTbWFsbCkgeworICBBZGQoImhlbGxvIik7CisgIEFkZCgid29y
bGQiKTsKKyAgQVNTRVJUX1RSVUUoTWF0Y2hlcygiaGVsbG8iKSk7CisgIEFTU0VSVF9UUlVFKE1h
dGNoZXMoIndvcmxkIikpOworICBBU1NFUlRfVFJVRSghIE1hdGNoZXMoIngiKSk7CisgIEFTU0VS
VF9UUlVFKCEgTWF0Y2hlcygiZm9vIikpOworfQorCitzdGF0aWMgaW50IE5leHRMZW5ndGgoaW50
IGxlbmd0aCkgeworICBpZiAobGVuZ3RoIDwgMTApIHsKKyAgICBsZW5ndGggKz0gMTsKKyAgfSBl
bHNlIGlmIChsZW5ndGggPCAxMDApIHsKKyAgICBsZW5ndGggKz0gMTA7CisgIH0gZWxzZSBpZiAo
bGVuZ3RoIDwgMTAwMCkgeworICAgIGxlbmd0aCArPSAxMDA7CisgIH0gZWxzZSB7CisgICAgbGVu
Z3RoICs9IDEwMDA7CisgIH0KKyAgcmV0dXJuIGxlbmd0aDsKK30KKworVEVTVChCbG9vbVRlc3Qs
IFZhcnlpbmdMZW5ndGhzKSB7CisgIGNoYXIgYnVmZmVyW3NpemVvZihpbnQpXTsKKworICAvLyBD
b3VudCBudW1iZXIgb2YgZmlsdGVycyB0aGF0IHNpZ25pZmljYW50bHkgZXhjZWVkIHRoZSBmYWxz
ZSBwb3NpdGl2ZSByYXRlCisgIGludCBtZWRpb2NyZV9maWx0ZXJzID0gMDsKKyAgaW50IGdvb2Rf
ZmlsdGVycyA9IDA7CisKKyAgZm9yIChpbnQgbGVuZ3RoID0gMTsgbGVuZ3RoIDw9IDEwMDAwOyBs
ZW5ndGggPSBOZXh0TGVuZ3RoKGxlbmd0aCkpIHsKKyAgICBSZXNldCgpOworICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgIEFkZChLZXkoaSwgYnVmZmVyKSk7Cisg
ICAgfQorICAgIEJ1aWxkKCk7CisKKyAgICBBU1NFUlRfTEUoRmlsdGVyU2l6ZSgpLCAobGVuZ3Ro
ICogMTAgLyA4KSArIDQwKSA8PCBsZW5ndGg7CisKKyAgICAvLyBBbGwgYWRkZWQga2V5cyBtdXN0
IG1hdGNoCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgQVNT
RVJUX1RSVUUoTWF0Y2hlcyhLZXkoaSwgYnVmZmVyKSkpCisgICAgICAgICAgPDwgIkxlbmd0aCAi
IDw8IGxlbmd0aCA8PCAiOyBrZXkgIiA8PCBpOworICAgIH0KKworICAgIC8vIENoZWNrIGZhbHNl
IHBvc2l0aXZlIHJhdGUKKyAgICBkb3VibGUgcmF0ZSA9IEZhbHNlUG9zaXRpdmVSYXRlKCk7Cisg
ICAgaWYgKGtWZXJib3NlID49IDEpIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFsc2UgcG9z
aXRpdmVzOiAlNS4yZiUlIEAgbGVuZ3RoID0gJTZkIDsgYnl0ZXMgPSAlNmRcbiIsCisgICAgICAg
ICAgICAgIHJhdGUqMTAwLjAsIGxlbmd0aCwgc3RhdGljX2Nhc3Q8aW50PihGaWx0ZXJTaXplKCkp
KTsKKyAgICB9CisgICAgQVNTRVJUX0xFKHJhdGUsIDAuMDIpOyAgIC8vIE11c3Qgbm90IGJlIG92
ZXIgMiUKKyAgICBpZiAocmF0ZSA+IDAuMDEyNSkgbWVkaW9jcmVfZmlsdGVycysrOyAgLy8gQWxs
b3dlZCwgYnV0IG5vdCB0b28gb2Z0ZW4KKyAgICBlbHNlIGdvb2RfZmlsdGVycysrOworICB9Cisg
IGlmIChrVmVyYm9zZSA+PSAxKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJGaWx0ZXJzOiAlZCBn
b29kLCAlZCBtZWRpb2NyZVxuIiwKKyAgICAgICAgICAgIGdvb2RfZmlsdGVycywgbWVkaW9jcmVf
ZmlsdGVycyk7CisgIH0KKyAgQVNTRVJUX0xFKG1lZGlvY3JlX2ZpbHRlcnMsIGdvb2RfZmlsdGVy
cy81KTsKK30KKworLy8gRGlmZmVyZW50IGJpdHMtcGVyLWJ5dGUKKworfSAgLy8gbmFtZXNwYWNl
IGxldmVsZGIKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KSB7CisgIHJldHVybiBs
ZXZlbGRiOjp0ZXN0OjpSdW5BbGxUZXN0cygpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGV2ZWxkYi91dGlsL2NhY2hlLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91
dGlsL2NhY2hlLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI0ZjFmNjNmNGYwMDI4OWJlZDlhYzcwMGU1NjQzZTFm
ZjYyNmQwOTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0
aWwvY2FjaGUuY2MKQEAgLTAsMCArMSwzMjggQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUg
TGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5h
bWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0
ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlICJsZXZlbGRiL2NhY2hlLmgi
CisjaW5jbHVkZSAicG9ydC9wb3J0LmgiCisjaW5jbHVkZSAidXRpbC9oYXNoLmgiCisjaW5jbHVk
ZSAidXRpbC9tdXRleGxvY2suaCIKKworbmFtZXNwYWNlIGxldmVsZGIgeworCitDYWNoZTo6fkNh
Y2hlKCkgeworfQorCituYW1lc3BhY2UgeworCisvLyBMUlUgY2FjaGUgaW1wbGVtZW50YXRpb24K
KworLy8gQW4gZW50cnkgaXMgYSB2YXJpYWJsZSBsZW5ndGggaGVhcC1hbGxvY2F0ZWQgc3RydWN0
dXJlLiAgRW50cmllcworLy8gYXJlIGtlcHQgaW4gYSBjaXJjdWxhciBkb3VibHkgbGlua2VkIGxp
c3Qgb3JkZXJlZCBieSBhY2Nlc3MgdGltZS4KK3N0cnVjdCBMUlVIYW5kbGUgeworICB2b2lkKiB2
YWx1ZTsKKyAgdm9pZCAoKmRlbGV0ZXIpKGNvbnN0IFNsaWNlJiwgdm9pZCogdmFsdWUpOworICBM
UlVIYW5kbGUqIG5leHRfaGFzaDsKKyAgTFJVSGFuZGxlKiBuZXh0OworICBMUlVIYW5kbGUqIHBy
ZXY7CisgIHNpemVfdCBjaGFyZ2U7ICAgICAgLy8gVE9ETyhvcHQpOiBPbmx5IGFsbG93IHVpbnQz
Ml90PworICBzaXplX3Qga2V5X2xlbmd0aDsKKyAgdWludDMyX3QgcmVmczsKKyAgdWludDMyX3Qg
aGFzaDsgICAgICAvLyBIYXNoIG9mIGtleSgpOyB1c2VkIGZvciBmYXN0IHNoYXJkaW5nIGFuZCBj
b21wYXJpc29ucworICBjaGFyIGtleV9kYXRhWzFdOyAgIC8vIEJlZ2lubmluZyBvZiBrZXkKKwor
ICBTbGljZSBrZXkoKSBjb25zdCB7CisgICAgLy8gRm9yIGNoZWFwZXIgbG9va3Vwcywgd2UgYWxs
b3cgYSB0ZW1wb3JhcnkgSGFuZGxlIG9iamVjdAorICAgIC8vIHRvIHN0b3JlIGEgcG9pbnRlciB0
byBhIGtleSBpbiAidmFsdWUiLgorICAgIGlmIChuZXh0ID09IHRoaXMpIHsKKyAgICAgIHJldHVy
biAqKHJlaW50ZXJwcmV0X2Nhc3Q8U2xpY2UqPih2YWx1ZSkpOworICAgIH0gZWxzZSB7CisgICAg
ICByZXR1cm4gU2xpY2Uoa2V5X2RhdGEsIGtleV9sZW5ndGgpOworICAgIH0KKyAgfQorfTsKKwor
Ly8gV2UgcHJvdmlkZSBvdXIgb3duIHNpbXBsZSBoYXNoIHRhYmxlIHNpbmNlIGl0IHJlbW92ZXMg
YSB3aG9sZSBidW5jaAorLy8gb2YgcG9ydGluZyBoYWNrcyBhbmQgaXMgYWxzbyBmYXN0ZXIgdGhh
biBzb21lIG9mIHRoZSBidWlsdC1pbiBoYXNoCisvLyB0YWJsZSBpbXBsZW1lbnRhdGlvbnMgaW4g
c29tZSBvZiB0aGUgY29tcGlsZXIvcnVudGltZSBjb21iaW5hdGlvbnMKKy8vIHdlIGhhdmUgdGVz
dGVkLiAgRS5nLiwgcmVhZHJhbmRvbSBzcGVlZHMgdXAgYnkgfjUlIG92ZXIgdGhlIGcrKworLy8g
NC40LjMncyBidWlsdGluIGhhc2h0YWJsZS4KK2NsYXNzIEhhbmRsZVRhYmxlIHsKKyBwdWJsaWM6
CisgIEhhbmRsZVRhYmxlKCkgOiBsZW5ndGhfKDApLCBlbGVtc18oMCksIGxpc3RfKE5VTEwpIHsg
UmVzaXplKCk7IH0KKyAgfkhhbmRsZVRhYmxlKCkgeyBkZWxldGVbXSBsaXN0XzsgfQorCisgIExS
VUhhbmRsZSogTG9va3VwKGNvbnN0IFNsaWNlJiBrZXksIHVpbnQzMl90IGhhc2gpIHsKKyAgICBy
ZXR1cm4gKkZpbmRQb2ludGVyKGtleSwgaGFzaCk7CisgIH0KKworICBMUlVIYW5kbGUqIEluc2Vy
dChMUlVIYW5kbGUqIGgpIHsKKyAgICBMUlVIYW5kbGUqKiBwdHIgPSBGaW5kUG9pbnRlcihoLT5r
ZXkoKSwgaC0+aGFzaCk7CisgICAgTFJVSGFuZGxlKiBvbGQgPSAqcHRyOworICAgIGgtPm5leHRf
aGFzaCA9IChvbGQgPT0gTlVMTCA/IE5VTEwgOiBvbGQtPm5leHRfaGFzaCk7CisgICAgKnB0ciA9
IGg7CisgICAgaWYgKG9sZCA9PSBOVUxMKSB7CisgICAgICArK2VsZW1zXzsKKyAgICAgIGlmIChl
bGVtc18gPiBsZW5ndGhfKSB7CisgICAgICAgIC8vIFNpbmNlIGVhY2ggY2FjaGUgZW50cnkgaXMg
ZmFpcmx5IGxhcmdlLCB3ZSBhaW0gZm9yIGEgc21hbGwKKyAgICAgICAgLy8gYXZlcmFnZSBsaW5r
ZWQgbGlzdCBsZW5ndGggKDw9IDEpLgorICAgICAgICBSZXNpemUoKTsKKyAgICAgIH0KKyAgICB9
CisgICAgcmV0dXJuIG9sZDsKKyAgfQorCisgIExSVUhhbmRsZSogUmVtb3ZlKGNvbnN0IFNsaWNl
JiBrZXksIHVpbnQzMl90IGhhc2gpIHsKKyAgICBMUlVIYW5kbGUqKiBwdHIgPSBGaW5kUG9pbnRl
cihrZXksIGhhc2gpOworICAgIExSVUhhbmRsZSogcmVzdWx0ID0gKnB0cjsKKyAgICBpZiAocmVz
dWx0ICE9IE5VTEwpIHsKKyAgICAgICpwdHIgPSByZXN1bHQtPm5leHRfaGFzaDsKKyAgICAgIC0t
ZWxlbXNfOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKyBwcml2YXRlOgorICAv
LyBUaGUgdGFibGUgY29uc2lzdHMgb2YgYW4gYXJyYXkgb2YgYnVja2V0cyB3aGVyZSBlYWNoIGJ1
Y2tldCBpcworICAvLyBhIGxpbmtlZCBsaXN0IG9mIGNhY2hlIGVudHJpZXMgdGhhdCBoYXNoIGlu
dG8gdGhlIGJ1Y2tldC4KKyAgdWludDMyX3QgbGVuZ3RoXzsKKyAgdWludDMyX3QgZWxlbXNfOwor
ICBMUlVIYW5kbGUqKiBsaXN0XzsKKworICAvLyBSZXR1cm4gYSBwb2ludGVyIHRvIHNsb3QgdGhh
dCBwb2ludHMgdG8gYSBjYWNoZSBlbnRyeSB0aGF0CisgIC8vIG1hdGNoZXMga2V5L2hhc2guICBJ
ZiB0aGVyZSBpcyBubyBzdWNoIGNhY2hlIGVudHJ5LCByZXR1cm4gYQorICAvLyBwb2ludGVyIHRv
IHRoZSB0cmFpbGluZyBzbG90IGluIHRoZSBjb3JyZXNwb25kaW5nIGxpbmtlZCBsaXN0LgorICBM
UlVIYW5kbGUqKiBGaW5kUG9pbnRlcihjb25zdCBTbGljZSYga2V5LCB1aW50MzJfdCBoYXNoKSB7
CisgICAgTFJVSGFuZGxlKiogcHRyID0gJmxpc3RfW2hhc2ggJiAobGVuZ3RoXyAtIDEpXTsKKyAg
ICB3aGlsZSAoKnB0ciAhPSBOVUxMICYmCisgICAgICAgICAgICgoKnB0ciktPmhhc2ggIT0gaGFz
aCB8fCBrZXkgIT0gKCpwdHIpLT5rZXkoKSkpIHsKKyAgICAgIHB0ciA9ICYoKnB0ciktPm5leHRf
aGFzaDsKKyAgICB9CisgICAgcmV0dXJuIHB0cjsKKyAgfQorCisgIHZvaWQgUmVzaXplKCkgewor
ICAgIHVpbnQzMl90IG5ld19sZW5ndGggPSA0OworICAgIHdoaWxlIChuZXdfbGVuZ3RoIDwgZWxl
bXNfKSB7CisgICAgICBuZXdfbGVuZ3RoICo9IDI7CisgICAgfQorICAgIExSVUhhbmRsZSoqIG5l
d19saXN0ID0gbmV3IExSVUhhbmRsZSpbbmV3X2xlbmd0aF07CisgICAgbWVtc2V0KG5ld19saXN0
LCAwLCBzaXplb2YobmV3X2xpc3RbMF0pICogbmV3X2xlbmd0aCk7CisgICAgdWludDMyX3QgY291
bnQgPSAwOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBsZW5ndGhfOyBpKyspIHsKKyAg
ICAgIExSVUhhbmRsZSogaCA9IGxpc3RfW2ldOworICAgICAgd2hpbGUgKGggIT0gTlVMTCkgewor
ICAgICAgICBMUlVIYW5kbGUqIG5leHQgPSBoLT5uZXh0X2hhc2g7CisgICAgICAgIFNsaWNlIGtl
eSA9IGgtPmtleSgpOworICAgICAgICB1aW50MzJfdCBoYXNoID0gaC0+aGFzaDsKKyAgICAgICAg
TFJVSGFuZGxlKiogcHRyID0gJm5ld19saXN0W2hhc2ggJiAobmV3X2xlbmd0aCAtIDEpXTsKKyAg
ICAgICAgaC0+bmV4dF9oYXNoID0gKnB0cjsKKyAgICAgICAgKnB0ciA9IGg7CisgICAgICAgIGgg
PSBuZXh0OworICAgICAgICBjb3VudCsrOworICAgICAgfQorICAgIH0KKyAgICBhc3NlcnQoZWxl
bXNfID09IGNvdW50KTsKKyAgICBkZWxldGVbXSBsaXN0XzsKKyAgICBsaXN0XyA9IG5ld19saXN0
OworICAgIGxlbmd0aF8gPSBuZXdfbGVuZ3RoOworICB9Cit9OworCisvLyBBIHNpbmdsZSBzaGFy
ZCBvZiBzaGFyZGVkIGNhY2hlLgorY2xhc3MgTFJVQ2FjaGUgeworIHB1YmxpYzoKKyAgTFJVQ2Fj
aGUoKTsKKyAgfkxSVUNhY2hlKCk7CisKKyAgLy8gU2VwYXJhdGUgZnJvbSBjb25zdHJ1Y3RvciBz
byBjYWxsZXIgY2FuIGVhc2lseSBtYWtlIGFuIGFycmF5IG9mIExSVUNhY2hlCisgIHZvaWQgU2V0
Q2FwYWNpdHkoc2l6ZV90IGNhcGFjaXR5KSB7IGNhcGFjaXR5XyA9IGNhcGFjaXR5OyB9CisKKyAg
Ly8gTGlrZSBDYWNoZSBtZXRob2RzLCBidXQgd2l0aCBhbiBleHRyYSAiaGFzaCIgcGFyYW1ldGVy
LgorICBDYWNoZTo6SGFuZGxlKiBJbnNlcnQoY29uc3QgU2xpY2UmIGtleSwgdWludDMyX3QgaGFz
aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIHZhbHVlLCBzaXplX3QgY2hhcmdlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKmRlbGV0ZXIpKGNvbnN0IFNsaWNlJiBrZXks
IHZvaWQqIHZhbHVlKSk7CisgIENhY2hlOjpIYW5kbGUqIExvb2t1cChjb25zdCBTbGljZSYga2V5
LCB1aW50MzJfdCBoYXNoKTsKKyAgdm9pZCBSZWxlYXNlKENhY2hlOjpIYW5kbGUqIGhhbmRsZSk7
CisgIHZvaWQgRXJhc2UoY29uc3QgU2xpY2UmIGtleSwgdWludDMyX3QgaGFzaCk7CisKKyBwcml2
YXRlOgorICB2b2lkIExSVV9SZW1vdmUoTFJVSGFuZGxlKiBlKTsKKyAgdm9pZCBMUlVfQXBwZW5k
KExSVUhhbmRsZSogZSk7CisgIHZvaWQgVW5yZWYoTFJVSGFuZGxlKiBlKTsKKworICAvLyBJbml0
aWFsaXplZCBiZWZvcmUgdXNlLgorICBzaXplX3QgY2FwYWNpdHlfOworCisgIC8vIG11dGV4XyBw
cm90ZWN0cyB0aGUgZm9sbG93aW5nIHN0YXRlLgorICBwb3J0OjpNdXRleCBtdXRleF87CisgIHNp
emVfdCB1c2FnZV87CisgIHVpbnQ2NF90IGxhc3RfaWRfOworCisgIC8vIER1bW15IGhlYWQgb2Yg
TFJVIGxpc3QuCisgIC8vIGxydS5wcmV2IGlzIG5ld2VzdCBlbnRyeSwgbHJ1Lm5leHQgaXMgb2xk
ZXN0IGVudHJ5LgorICBMUlVIYW5kbGUgbHJ1XzsKKworICBIYW5kbGVUYWJsZSB0YWJsZV87Cit9
OworCitMUlVDYWNoZTo6TFJVQ2FjaGUoKQorICAgIDogdXNhZ2VfKDApLAorICAgICAgbGFzdF9p
ZF8oMCkgeworICAvLyBNYWtlIGVtcHR5IGNpcmN1bGFyIGxpbmtlZCBsaXN0CisgIGxydV8ubmV4
dCA9ICZscnVfOworICBscnVfLnByZXYgPSAmbHJ1XzsKK30KKworTFJVQ2FjaGU6On5MUlVDYWNo
ZSgpIHsKKyAgZm9yIChMUlVIYW5kbGUqIGUgPSBscnVfLm5leHQ7IGUgIT0gJmxydV87ICkgewor
ICAgIExSVUhhbmRsZSogbmV4dCA9IGUtPm5leHQ7CisgICAgYXNzZXJ0KGUtPnJlZnMgPT0gMSk7
ICAvLyBFcnJvciBpZiBjYWxsZXIgaGFzIGFuIHVucmVsZWFzZWQgaGFuZGxlCisgICAgVW5yZWYo
ZSk7CisgICAgZSA9IG5leHQ7CisgIH0KK30KKwordm9pZCBMUlVDYWNoZTo6VW5yZWYoTFJVSGFu
ZGxlKiBlKSB7CisgIGFzc2VydChlLT5yZWZzID4gMCk7CisgIGUtPnJlZnMtLTsKKyAgaWYgKGUt
PnJlZnMgPD0gMCkgeworICAgIHVzYWdlXyAtPSBlLT5jaGFyZ2U7CisgICAgKCplLT5kZWxldGVy
KShlLT5rZXkoKSwgZS0+dmFsdWUpOworICAgIGZyZWUoZSk7CisgIH0KK30KKwordm9pZCBMUlVD
YWNoZTo6TFJVX1JlbW92ZShMUlVIYW5kbGUqIGUpIHsKKyAgZS0+bmV4dC0+cHJldiA9IGUtPnBy
ZXY7CisgIGUtPnByZXYtPm5leHQgPSBlLT5uZXh0OworfQorCit2b2lkIExSVUNhY2hlOjpMUlVf
QXBwZW5kKExSVUhhbmRsZSogZSkgeworICAvLyBNYWtlICJlIiBuZXdlc3QgZW50cnkgYnkgaW5z
ZXJ0aW5nIGp1c3QgYmVmb3JlIGxydV8KKyAgZS0+bmV4dCA9ICZscnVfOworICBlLT5wcmV2ID0g
bHJ1Xy5wcmV2OworICBlLT5wcmV2LT5uZXh0ID0gZTsKKyAgZS0+bmV4dC0+cHJldiA9IGU7Cit9
CisKK0NhY2hlOjpIYW5kbGUqIExSVUNhY2hlOjpMb29rdXAoY29uc3QgU2xpY2UmIGtleSwgdWlu
dDMyX3QgaGFzaCkgeworICBNdXRleExvY2sgbCgmbXV0ZXhfKTsKKyAgTFJVSGFuZGxlKiBlID0g
dGFibGVfLkxvb2t1cChrZXksIGhhc2gpOworICBpZiAoZSAhPSBOVUxMKSB7CisgICAgZS0+cmVm
cysrOworICAgIExSVV9SZW1vdmUoZSk7CisgICAgTFJVX0FwcGVuZChlKTsKKyAgfQorICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxDYWNoZTo6SGFuZGxlKj4oZSk7Cit9CisKK3ZvaWQgTFJVQ2Fj
aGU6OlJlbGVhc2UoQ2FjaGU6OkhhbmRsZSogaGFuZGxlKSB7CisgIE11dGV4TG9jayBsKCZtdXRl
eF8pOworICBVbnJlZihyZWludGVycHJldF9jYXN0PExSVUhhbmRsZSo+KGhhbmRsZSkpOworfQor
CitDYWNoZTo6SGFuZGxlKiBMUlVDYWNoZTo6SW5zZXJ0KAorICAgIGNvbnN0IFNsaWNlJiBrZXks
IHVpbnQzMl90IGhhc2gsIHZvaWQqIHZhbHVlLCBzaXplX3QgY2hhcmdlLAorICAgIHZvaWQgKCpk
ZWxldGVyKShjb25zdCBTbGljZSYga2V5LCB2b2lkKiB2YWx1ZSkpIHsKKyAgTXV0ZXhMb2NrIGwo
Jm11dGV4Xyk7CisKKyAgTFJVSGFuZGxlKiBlID0gcmVpbnRlcnByZXRfY2FzdDxMUlVIYW5kbGUq
PigKKyAgICAgIG1hbGxvYyhzaXplb2YoTFJVSGFuZGxlKS0xICsga2V5LnNpemUoKSkpOworICBl
LT52YWx1ZSA9IHZhbHVlOworICBlLT5kZWxldGVyID0gZGVsZXRlcjsKKyAgZS0+Y2hhcmdlID0g
Y2hhcmdlOworICBlLT5rZXlfbGVuZ3RoID0ga2V5LnNpemUoKTsKKyAgZS0+aGFzaCA9IGhhc2g7
CisgIGUtPnJlZnMgPSAyOyAgLy8gT25lIGZyb20gTFJVQ2FjaGUsIG9uZSBmb3IgdGhlIHJldHVy
bmVkIGhhbmRsZQorICBtZW1jcHkoZS0+a2V5X2RhdGEsIGtleS5kYXRhKCksIGtleS5zaXplKCkp
OworICBMUlVfQXBwZW5kKGUpOworICB1c2FnZV8gKz0gY2hhcmdlOworCisgIExSVUhhbmRsZSog
b2xkID0gdGFibGVfLkluc2VydChlKTsKKyAgaWYgKG9sZCAhPSBOVUxMKSB7CisgICAgTFJVX1Jl
bW92ZShvbGQpOworICAgIFVucmVmKG9sZCk7CisgIH0KKworICB3aGlsZSAodXNhZ2VfID4gY2Fw
YWNpdHlfICYmIGxydV8ubmV4dCAhPSAmbHJ1XykgeworICAgIExSVUhhbmRsZSogb2xkID0gbHJ1
Xy5uZXh0OworICAgIExSVV9SZW1vdmUob2xkKTsKKyAgICB0YWJsZV8uUmVtb3ZlKG9sZC0+a2V5
KCksIG9sZC0+aGFzaCk7CisgICAgVW5yZWYob2xkKTsKKyAgfQorCisgIHJldHVybiByZWludGVy
cHJldF9jYXN0PENhY2hlOjpIYW5kbGUqPihlKTsKK30KKwordm9pZCBMUlVDYWNoZTo6RXJhc2Uo
Y29uc3QgU2xpY2UmIGtleSwgdWludDMyX3QgaGFzaCkgeworICBNdXRleExvY2sgbCgmbXV0ZXhf
KTsKKyAgTFJVSGFuZGxlKiBlID0gdGFibGVfLlJlbW92ZShrZXksIGhhc2gpOworICBpZiAoZSAh
PSBOVUxMKSB7CisgICAgTFJVX1JlbW92ZShlKTsKKyAgICBVbnJlZihlKTsKKyAgfQorfQorCitz
dGF0aWMgY29uc3QgaW50IGtOdW1TaGFyZEJpdHMgPSA0Oworc3RhdGljIGNvbnN0IGludCBrTnVt
U2hhcmRzID0gMSA8PCBrTnVtU2hhcmRCaXRzOworCitjbGFzcyBTaGFyZGVkTFJVQ2FjaGUgOiBw
dWJsaWMgQ2FjaGUgeworIHByaXZhdGU6CisgIExSVUNhY2hlIHNoYXJkX1trTnVtU2hhcmRzXTsK
KyAgcG9ydDo6TXV0ZXggaWRfbXV0ZXhfOworICB1aW50NjRfdCBsYXN0X2lkXzsKKworICBzdGF0
aWMgaW5saW5lIHVpbnQzMl90IEhhc2hTbGljZShjb25zdCBTbGljZSYgcykgeworICAgIHJldHVy
biBIYXNoKHMuZGF0YSgpLCBzLnNpemUoKSwgMCk7CisgIH0KKworICBzdGF0aWMgdWludDMyX3Qg
U2hhcmQodWludDMyX3QgaGFzaCkgeworICAgIHJldHVybiBoYXNoID4+ICgzMiAtIGtOdW1TaGFy
ZEJpdHMpOworICB9CisKKyBwdWJsaWM6CisgIGV4cGxpY2l0IFNoYXJkZWRMUlVDYWNoZShzaXpl
X3QgY2FwYWNpdHkpCisgICAgICA6IGxhc3RfaWRfKDApIHsKKyAgICBjb25zdCBzaXplX3QgcGVy
X3NoYXJkID0gKGNhcGFjaXR5ICsgKGtOdW1TaGFyZHMgLSAxKSkgLyBrTnVtU2hhcmRzOworICAg
IGZvciAoaW50IHMgPSAwOyBzIDwga051bVNoYXJkczsgcysrKSB7CisgICAgICBzaGFyZF9bc10u
U2V0Q2FwYWNpdHkocGVyX3NoYXJkKTsKKyAgICB9CisgIH0KKyAgdmlydHVhbCB+U2hhcmRlZExS
VUNhY2hlKCkgeyB9CisgIHZpcnR1YWwgSGFuZGxlKiBJbnNlcnQoY29uc3QgU2xpY2UmIGtleSwg
dm9pZCogdmFsdWUsIHNpemVfdCBjaGFyZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgdm9p
ZCAoKmRlbGV0ZXIpKGNvbnN0IFNsaWNlJiBrZXksIHZvaWQqIHZhbHVlKSkgeworICAgIGNvbnN0
IHVpbnQzMl90IGhhc2ggPSBIYXNoU2xpY2Uoa2V5KTsKKyAgICByZXR1cm4gc2hhcmRfW1NoYXJk
KGhhc2gpXS5JbnNlcnQoa2V5LCBoYXNoLCB2YWx1ZSwgY2hhcmdlLCBkZWxldGVyKTsKKyAgfQor
ICB2aXJ0dWFsIEhhbmRsZSogTG9va3VwKGNvbnN0IFNsaWNlJiBrZXkpIHsKKyAgICBjb25zdCB1
aW50MzJfdCBoYXNoID0gSGFzaFNsaWNlKGtleSk7CisgICAgcmV0dXJuIHNoYXJkX1tTaGFyZCho
YXNoKV0uTG9va3VwKGtleSwgaGFzaCk7CisgIH0KKyAgdmlydHVhbCB2b2lkIFJlbGVhc2UoSGFu
ZGxlKiBoYW5kbGUpIHsKKyAgICBMUlVIYW5kbGUqIGggPSByZWludGVycHJldF9jYXN0PExSVUhh
bmRsZSo+KGhhbmRsZSk7CisgICAgc2hhcmRfW1NoYXJkKGgtPmhhc2gpXS5SZWxlYXNlKGhhbmRs
ZSk7CisgIH0KKyAgdmlydHVhbCB2b2lkIEVyYXNlKGNvbnN0IFNsaWNlJiBrZXkpIHsKKyAgICBj
b25zdCB1aW50MzJfdCBoYXNoID0gSGFzaFNsaWNlKGtleSk7CisgICAgc2hhcmRfW1NoYXJkKGhh
c2gpXS5FcmFzZShrZXksIGhhc2gpOworICB9CisgIHZpcnR1YWwgdm9pZCogVmFsdWUoSGFuZGxl
KiBoYW5kbGUpIHsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxMUlVIYW5kbGUqPihoYW5k
bGUpLT52YWx1ZTsKKyAgfQorICB2aXJ0dWFsIHVpbnQ2NF90IE5ld0lkKCkgeworICAgIE11dGV4
TG9jayBsKCZpZF9tdXRleF8pOworICAgIHJldHVybiArKyhsYXN0X2lkXyk7CisgIH0KK307CisK
K30gIC8vIGVuZCBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK0NhY2hlKiBOZXdMUlVDYWNoZShzaXpl
X3QgY2FwYWNpdHkpIHsKKyAgcmV0dXJuIG5ldyBTaGFyZGVkTFJVQ2FjaGUoY2FwYWNpdHkpOwor
fQorCit9ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGV2ZWxkYi91dGlsL2NhY2hlX3Rlc3QuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRi
L3V0aWwvY2FjaGVfdGVzdC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MzcxNjcxNWE4OWY0NzY3MDA4NDVjMzAz
ZTE2NTE0NDhlY2VmNjJjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGV2
ZWxkYi91dGlsL2NhY2hlX3Rlc3QuY2MKQEAgLTAsMCArMSwxODYgQEAKKy8vIENvcHlyaWdodCAo
YykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JT
IGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2luY2x1ZGUgImxldmVsZGIvY2Fj
aGUuaCIKKworI2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlICJ1dGlsL2NvZGluZy5oIgorI2lu
Y2x1ZGUgInV0aWwvdGVzdGhhcm5lc3MuaCIKKworbmFtZXNwYWNlIGxldmVsZGIgeworCisvLyBD
b252ZXJzaW9ucyBiZXR3ZWVuIG51bWVyaWMga2V5cy92YWx1ZXMgYW5kIHRoZSB0eXBlcyBleHBl
Y3RlZCBieSBDYWNoZS4KK3N0YXRpYyBzdGQ6OnN0cmluZyBFbmNvZGVLZXkoaW50IGspIHsKKyAg
c3RkOjpzdHJpbmcgcmVzdWx0OworICBQdXRGaXhlZDMyKCZyZXN1bHQsIGspOworICByZXR1cm4g
cmVzdWx0OworfQorc3RhdGljIGludCBEZWNvZGVLZXkoY29uc3QgU2xpY2UmIGspIHsKKyAgYXNz
ZXJ0KGsuc2l6ZSgpID09IDQpOworICByZXR1cm4gRGVjb2RlRml4ZWQzMihrLmRhdGEoKSk7Cit9
CitzdGF0aWMgdm9pZCogRW5jb2RlVmFsdWUodWludHB0cl90IHYpIHsgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KHYpOyB9CitzdGF0aWMgaW50IERlY29kZVZhbHVlKHZvaWQqIHYpIHsg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih2KTsgfQorCitjbGFzcyBDYWNoZVRl
c3QgeworIHB1YmxpYzoKKyAgc3RhdGljIENhY2hlVGVzdCogY3VycmVudF87CisKKyAgc3RhdGlj
IHZvaWQgRGVsZXRlcihjb25zdCBTbGljZSYga2V5LCB2b2lkKiB2KSB7CisgICAgY3VycmVudF8t
PmRlbGV0ZWRfa2V5c18ucHVzaF9iYWNrKERlY29kZUtleShrZXkpKTsKKyAgICBjdXJyZW50Xy0+
ZGVsZXRlZF92YWx1ZXNfLnB1c2hfYmFjayhEZWNvZGVWYWx1ZSh2KSk7CisgIH0KKworICBzdGF0
aWMgY29uc3QgaW50IGtDYWNoZVNpemUgPSAxMDAwOworICBzdGQ6OnZlY3RvcjxpbnQ+IGRlbGV0
ZWRfa2V5c187CisgIHN0ZDo6dmVjdG9yPGludD4gZGVsZXRlZF92YWx1ZXNfOworICBDYWNoZSog
Y2FjaGVfOworCisgIENhY2hlVGVzdCgpIDogY2FjaGVfKE5ld0xSVUNhY2hlKGtDYWNoZVNpemUp
KSB7CisgICAgY3VycmVudF8gPSB0aGlzOworICB9CisKKyAgfkNhY2hlVGVzdCgpIHsKKyAgICBk
ZWxldGUgY2FjaGVfOworICB9CisKKyAgaW50IExvb2t1cChpbnQga2V5KSB7CisgICAgQ2FjaGU6
OkhhbmRsZSogaGFuZGxlID0gY2FjaGVfLT5Mb29rdXAoRW5jb2RlS2V5KGtleSkpOworICAgIGNv
bnN0IGludCByID0gKGhhbmRsZSA9PSBOVUxMKSA/IC0xIDogRGVjb2RlVmFsdWUoY2FjaGVfLT5W
YWx1ZShoYW5kbGUpKTsKKyAgICBpZiAoaGFuZGxlICE9IE5VTEwpIHsKKyAgICAgIGNhY2hlXy0+
UmVsZWFzZShoYW5kbGUpOworICAgIH0KKyAgICByZXR1cm4gcjsKKyAgfQorCisgIHZvaWQgSW5z
ZXJ0KGludCBrZXksIGludCB2YWx1ZSwgaW50IGNoYXJnZSA9IDEpIHsKKyAgICBjYWNoZV8tPlJl
bGVhc2UoY2FjaGVfLT5JbnNlcnQoRW5jb2RlS2V5KGtleSksIEVuY29kZVZhbHVlKHZhbHVlKSwg
Y2hhcmdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQ2FjaGVUZXN0OjpE
ZWxldGVyKSk7CisgIH0KKworICB2b2lkIEVyYXNlKGludCBrZXkpIHsKKyAgICBjYWNoZV8tPkVy
YXNlKEVuY29kZUtleShrZXkpKTsKKyAgfQorfTsKK0NhY2hlVGVzdCogQ2FjaGVUZXN0OjpjdXJy
ZW50XzsKKworVEVTVChDYWNoZVRlc3QsIEhpdEFuZE1pc3MpIHsKKyAgQVNTRVJUX0VRKC0xLCBM
b29rdXAoMTAwKSk7CisKKyAgSW5zZXJ0KDEwMCwgMTAxKTsKKyAgQVNTRVJUX0VRKDEwMSwgTG9v
a3VwKDEwMCkpOworICBBU1NFUlRfRVEoLTEsICBMb29rdXAoMjAwKSk7CisgIEFTU0VSVF9FUSgt
MSwgIExvb2t1cCgzMDApKTsKKworICBJbnNlcnQoMjAwLCAyMDEpOworICBBU1NFUlRfRVEoMTAx
LCBMb29rdXAoMTAwKSk7CisgIEFTU0VSVF9FUSgyMDEsIExvb2t1cCgyMDApKTsKKyAgQVNTRVJU
X0VRKC0xLCAgTG9va3VwKDMwMCkpOworCisgIEluc2VydCgxMDAsIDEwMik7CisgIEFTU0VSVF9F
USgxMDIsIExvb2t1cCgxMDApKTsKKyAgQVNTRVJUX0VRKDIwMSwgTG9va3VwKDIwMCkpOworICBB
U1NFUlRfRVEoLTEsICBMb29rdXAoMzAwKSk7CisKKyAgQVNTRVJUX0VRKDEsIGRlbGV0ZWRfa2V5
c18uc2l6ZSgpKTsKKyAgQVNTRVJUX0VRKDEwMCwgZGVsZXRlZF9rZXlzX1swXSk7CisgIEFTU0VS
VF9FUSgxMDEsIGRlbGV0ZWRfdmFsdWVzX1swXSk7Cit9CisKK1RFU1QoQ2FjaGVUZXN0LCBFcmFz
ZSkgeworICBFcmFzZSgyMDApOworICBBU1NFUlRfRVEoMCwgZGVsZXRlZF9rZXlzXy5zaXplKCkp
OworCisgIEluc2VydCgxMDAsIDEwMSk7CisgIEluc2VydCgyMDAsIDIwMSk7CisgIEVyYXNlKDEw
MCk7CisgIEFTU0VSVF9FUSgtMSwgIExvb2t1cCgxMDApKTsKKyAgQVNTRVJUX0VRKDIwMSwgTG9v
a3VwKDIwMCkpOworICBBU1NFUlRfRVEoMSwgZGVsZXRlZF9rZXlzXy5zaXplKCkpOworICBBU1NF
UlRfRVEoMTAwLCBkZWxldGVkX2tleXNfWzBdKTsKKyAgQVNTRVJUX0VRKDEwMSwgZGVsZXRlZF92
YWx1ZXNfWzBdKTsKKworICBFcmFzZSgxMDApOworICBBU1NFUlRfRVEoLTEsICBMb29rdXAoMTAw
KSk7CisgIEFTU0VSVF9FUSgyMDEsIExvb2t1cCgyMDApKTsKKyAgQVNTRVJUX0VRKDEsIGRlbGV0
ZWRfa2V5c18uc2l6ZSgpKTsKK30KKworVEVTVChDYWNoZVRlc3QsIEVudHJpZXNBcmVQaW5uZWQp
IHsKKyAgSW5zZXJ0KDEwMCwgMTAxKTsKKyAgQ2FjaGU6OkhhbmRsZSogaDEgPSBjYWNoZV8tPkxv
b2t1cChFbmNvZGVLZXkoMTAwKSk7CisgIEFTU0VSVF9FUSgxMDEsIERlY29kZVZhbHVlKGNhY2hl
Xy0+VmFsdWUoaDEpKSk7CisKKyAgSW5zZXJ0KDEwMCwgMTAyKTsKKyAgQ2FjaGU6OkhhbmRsZSog
aDIgPSBjYWNoZV8tPkxvb2t1cChFbmNvZGVLZXkoMTAwKSk7CisgIEFTU0VSVF9FUSgxMDIsIERl
Y29kZVZhbHVlKGNhY2hlXy0+VmFsdWUoaDIpKSk7CisgIEFTU0VSVF9FUSgwLCBkZWxldGVkX2tl
eXNfLnNpemUoKSk7CisKKyAgY2FjaGVfLT5SZWxlYXNlKGgxKTsKKyAgQVNTRVJUX0VRKDEsIGRl
bGV0ZWRfa2V5c18uc2l6ZSgpKTsKKyAgQVNTRVJUX0VRKDEwMCwgZGVsZXRlZF9rZXlzX1swXSk7
CisgIEFTU0VSVF9FUSgxMDEsIGRlbGV0ZWRfdmFsdWVzX1swXSk7CisKKyAgRXJhc2UoMTAwKTsK
KyAgQVNTRVJUX0VRKC0xLCBMb29rdXAoMTAwKSk7CisgIEFTU0VSVF9FUSgxLCBkZWxldGVkX2tl
eXNfLnNpemUoKSk7CisKKyAgY2FjaGVfLT5SZWxlYXNlKGgyKTsKKyAgQVNTRVJUX0VRKDIsIGRl
bGV0ZWRfa2V5c18uc2l6ZSgpKTsKKyAgQVNTRVJUX0VRKDEwMCwgZGVsZXRlZF9rZXlzX1sxXSk7
CisgIEFTU0VSVF9FUSgxMDIsIGRlbGV0ZWRfdmFsdWVzX1sxXSk7Cit9CisKK1RFU1QoQ2FjaGVU
ZXN0LCBFdmljdGlvblBvbGljeSkgeworICBJbnNlcnQoMTAwLCAxMDEpOworICBJbnNlcnQoMjAw
LCAyMDEpOworCisgIC8vIEZyZXF1ZW50bHkgdXNlZCBlbnRyeSBtdXN0IGJlIGtlcHQgYXJvdW5k
CisgIGZvciAoaW50IGkgPSAwOyBpIDwga0NhY2hlU2l6ZSArIDEwMDsgaSsrKSB7CisgICAgSW5z
ZXJ0KDEwMDAraSwgMjAwMCtpKTsKKyAgICBBU1NFUlRfRVEoMjAwMCtpLCBMb29rdXAoMTAwMCtp
KSk7CisgICAgQVNTRVJUX0VRKDEwMSwgTG9va3VwKDEwMCkpOworICB9CisgIEFTU0VSVF9FUSgx
MDEsIExvb2t1cCgxMDApKTsKKyAgQVNTRVJUX0VRKC0xLCBMb29rdXAoMjAwKSk7Cit9CisKK1RF
U1QoQ2FjaGVUZXN0LCBIZWF2eUVudHJpZXMpIHsKKyAgLy8gQWRkIGEgYnVuY2ggb2YgbGlnaHQg
YW5kIGhlYXZ5IGVudHJpZXMgYW5kIHRoZW4gY291bnQgdGhlIGNvbWJpbmVkCisgIC8vIHNpemUg
b2YgaXRlbXMgc3RpbGwgaW4gdGhlIGNhY2hlLCB3aGljaCBtdXN0IGJlIGFwcHJveGltYXRlbHkg
dGhlCisgIC8vIHNhbWUgYXMgdGhlIHRvdGFsIGNhcGFjaXR5LgorICBjb25zdCBpbnQga0xpZ2h0
ID0gMTsKKyAgY29uc3QgaW50IGtIZWF2eSA9IDEwOworICBpbnQgYWRkZWQgPSAwOworICBpbnQg
aW5kZXggPSAwOworICB3aGlsZSAoYWRkZWQgPCAyKmtDYWNoZVNpemUpIHsKKyAgICBjb25zdCBp
bnQgd2VpZ2h0ID0gKGluZGV4ICYgMSkgPyBrTGlnaHQgOiBrSGVhdnk7CisgICAgSW5zZXJ0KGlu
ZGV4LCAxMDAwK2luZGV4LCB3ZWlnaHQpOworICAgIGFkZGVkICs9IHdlaWdodDsKKyAgICBpbmRl
eCsrOworICB9CisKKyAgaW50IGNhY2hlZF93ZWlnaHQgPSAwOworICBmb3IgKGludCBpID0gMDsg
aSA8IGluZGV4OyBpKyspIHsKKyAgICBjb25zdCBpbnQgd2VpZ2h0ID0gKGkgJiAxID8ga0xpZ2h0
IDoga0hlYXZ5KTsKKyAgICBpbnQgciA9IExvb2t1cChpKTsKKyAgICBpZiAociA+PSAwKSB7Cisg
ICAgICBjYWNoZWRfd2VpZ2h0ICs9IHdlaWdodDsKKyAgICAgIEFTU0VSVF9FUSgxMDAwK2ksIHIp
OworICAgIH0KKyAgfQorICBBU1NFUlRfTEUoY2FjaGVkX3dlaWdodCwga0NhY2hlU2l6ZSArIGtD
YWNoZVNpemUvMTApOworfQorCitURVNUKENhY2hlVGVzdCwgTmV3SWQpIHsKKyAgdWludDY0X3Qg
YSA9IGNhY2hlXy0+TmV3SWQoKTsKKyAgdWludDY0X3QgYiA9IGNhY2hlXy0+TmV3SWQoKTsKKyAg
QVNTRVJUX05FKGEsIGIpOworfQorCit9ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgorCitpbnQgbWFp
bihpbnQgYXJnYywgY2hhcioqIGFyZ3YpIHsKKyAgcmV0dXJuIGxldmVsZGI6OnRlc3Q6OlJ1bkFs
bFRlc3RzKCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwv
Y29kaW5nLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2NvZGluZy5jYwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4yMWUzMTg2ZDVkY2ZmOTg0YTExNTYzZmQwZDA5YzcxNDQyNmEyOWMzCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2NvZGluZy5jYwpAQCAt
MCwwICsxLDE5NCBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0
b3JzLgorCisjaW5jbHVkZSAidXRpbC9jb2RpbmcuaCIKKworbmFtZXNwYWNlIGxldmVsZGIgewor
Cit2b2lkIEVuY29kZUZpeGVkMzIoY2hhciogYnVmLCB1aW50MzJfdCB2YWx1ZSkgeworICBpZiAo
cG9ydDo6a0xpdHRsZUVuZGlhbikgeworICAgIG1lbWNweShidWYsICZ2YWx1ZSwgc2l6ZW9mKHZh
bHVlKSk7CisgIH0gZWxzZSB7CisgICAgYnVmWzBdID0gdmFsdWUgJiAweGZmOworICAgIGJ1Zlsx
XSA9ICh2YWx1ZSA+PiA4KSAmIDB4ZmY7CisgICAgYnVmWzJdID0gKHZhbHVlID4+IDE2KSAmIDB4
ZmY7CisgICAgYnVmWzNdID0gKHZhbHVlID4+IDI0KSAmIDB4ZmY7CisgIH0KK30KKwordm9pZCBF
bmNvZGVGaXhlZDY0KGNoYXIqIGJ1ZiwgdWludDY0X3QgdmFsdWUpIHsKKyAgaWYgKHBvcnQ6OmtM
aXR0bGVFbmRpYW4pIHsKKyAgICBtZW1jcHkoYnVmLCAmdmFsdWUsIHNpemVvZih2YWx1ZSkpOwor
ICB9IGVsc2UgeworICAgIGJ1ZlswXSA9IHZhbHVlICYgMHhmZjsKKyAgICBidWZbMV0gPSAodmFs
dWUgPj4gOCkgJiAweGZmOworICAgIGJ1ZlsyXSA9ICh2YWx1ZSA+PiAxNikgJiAweGZmOworICAg
IGJ1ZlszXSA9ICh2YWx1ZSA+PiAyNCkgJiAweGZmOworICAgIGJ1Zls0XSA9ICh2YWx1ZSA+PiAz
MikgJiAweGZmOworICAgIGJ1Zls1XSA9ICh2YWx1ZSA+PiA0MCkgJiAweGZmOworICAgIGJ1Zls2
XSA9ICh2YWx1ZSA+PiA0OCkgJiAweGZmOworICAgIGJ1Zls3XSA9ICh2YWx1ZSA+PiA1NikgJiAw
eGZmOworICB9Cit9CisKK3ZvaWQgUHV0Rml4ZWQzMihzdGQ6OnN0cmluZyogZHN0LCB1aW50MzJf
dCB2YWx1ZSkgeworICBjaGFyIGJ1ZltzaXplb2YodmFsdWUpXTsKKyAgRW5jb2RlRml4ZWQzMihi
dWYsIHZhbHVlKTsKKyAgZHN0LT5hcHBlbmQoYnVmLCBzaXplb2YoYnVmKSk7Cit9CisKK3ZvaWQg
UHV0Rml4ZWQ2NChzdGQ6OnN0cmluZyogZHN0LCB1aW50NjRfdCB2YWx1ZSkgeworICBjaGFyIGJ1
ZltzaXplb2YodmFsdWUpXTsKKyAgRW5jb2RlRml4ZWQ2NChidWYsIHZhbHVlKTsKKyAgZHN0LT5h
cHBlbmQoYnVmLCBzaXplb2YoYnVmKSk7Cit9CisKK2NoYXIqIEVuY29kZVZhcmludDMyKGNoYXIq
IGRzdCwgdWludDMyX3QgdikgeworICAvLyBPcGVyYXRlIG9uIGNoYXJhY3RlcnMgYXMgdW5zaWdu
ZWRzCisgIHVuc2lnbmVkIGNoYXIqIHB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hh
cio+KGRzdCk7CisgIHN0YXRpYyBjb25zdCBpbnQgQiA9IDEyODsKKyAgaWYgKHYgPCAoMTw8Nykp
IHsKKyAgICAqKHB0cisrKSA9IHY7CisgIH0gZWxzZSBpZiAodiA8ICgxPDwxNCkpIHsKKyAgICAq
KHB0cisrKSA9IHYgfCBCOworICAgICoocHRyKyspID0gdj4+NzsKKyAgfSBlbHNlIGlmICh2IDwg
KDE8PDIxKSkgeworICAgICoocHRyKyspID0gdiB8IEI7CisgICAgKihwdHIrKykgPSAodj4+Nykg
fCBCOworICAgICoocHRyKyspID0gdj4+MTQ7CisgIH0gZWxzZSBpZiAodiA8ICgxPDwyOCkpIHsK
KyAgICAqKHB0cisrKSA9IHYgfCBCOworICAgICoocHRyKyspID0gKHY+PjcpIHwgQjsKKyAgICAq
KHB0cisrKSA9ICh2Pj4xNCkgfCBCOworICAgICoocHRyKyspID0gdj4+MjE7CisgIH0gZWxzZSB7
CisgICAgKihwdHIrKykgPSB2IHwgQjsKKyAgICAqKHB0cisrKSA9ICh2Pj43KSB8IEI7CisgICAg
KihwdHIrKykgPSAodj4+MTQpIHwgQjsKKyAgICAqKHB0cisrKSA9ICh2Pj4yMSkgfCBCOworICAg
ICoocHRyKyspID0gdj4+Mjg7CisgIH0KKyAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KHB0cik7Cit9CisKK3ZvaWQgUHV0VmFyaW50MzIoc3RkOjpzdHJpbmcqIGRzdCwgdWludDMyX3Qg
dikgeworICBjaGFyIGJ1Zls1XTsKKyAgY2hhciogcHRyID0gRW5jb2RlVmFyaW50MzIoYnVmLCB2
KTsKKyAgZHN0LT5hcHBlbmQoYnVmLCBwdHIgLSBidWYpOworfQorCitjaGFyKiBFbmNvZGVWYXJp
bnQ2NChjaGFyKiBkc3QsIHVpbnQ2NF90IHYpIHsKKyAgc3RhdGljIGNvbnN0IGludCBCID0gMTI4
OworICB1bnNpZ25lZCBjaGFyKiBwdHIgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIq
Pihkc3QpOworICB3aGlsZSAodiA+PSBCKSB7CisgICAgKihwdHIrKykgPSAodiAmIChCLTEpKSB8
IEI7CisgICAgdiA+Pj0gNzsKKyAgfQorICAqKHB0cisrKSA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXI+KHYpOworICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocHRyKTsKK30KKwor
dm9pZCBQdXRWYXJpbnQ2NChzdGQ6OnN0cmluZyogZHN0LCB1aW50NjRfdCB2KSB7CisgIGNoYXIg
YnVmWzEwXTsKKyAgY2hhciogcHRyID0gRW5jb2RlVmFyaW50NjQoYnVmLCB2KTsKKyAgZHN0LT5h
cHBlbmQoYnVmLCBwdHIgLSBidWYpOworfQorCit2b2lkIFB1dExlbmd0aFByZWZpeGVkU2xpY2Uo
c3RkOjpzdHJpbmcqIGRzdCwgY29uc3QgU2xpY2UmIHZhbHVlKSB7CisgIFB1dFZhcmludDMyKGRz
dCwgdmFsdWUuc2l6ZSgpKTsKKyAgZHN0LT5hcHBlbmQodmFsdWUuZGF0YSgpLCB2YWx1ZS5zaXpl
KCkpOworfQorCitpbnQgVmFyaW50TGVuZ3RoKHVpbnQ2NF90IHYpIHsKKyAgaW50IGxlbiA9IDE7
CisgIHdoaWxlICh2ID49IDEyOCkgeworICAgIHYgPj49IDc7CisgICAgbGVuKys7CisgIH0KKyAg
cmV0dXJuIGxlbjsKK30KKworY29uc3QgY2hhciogR2V0VmFyaW50MzJQdHJGYWxsYmFjayhjb25z
dCBjaGFyKiBwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
KiBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QqIHZh
bHVlKSB7CisgIHVpbnQzMl90IHJlc3VsdCA9IDA7CisgIGZvciAodWludDMyX3Qgc2hpZnQgPSAw
OyBzaGlmdCA8PSAyOCAmJiBwIDwgbGltaXQ7IHNoaWZ0ICs9IDcpIHsKKyAgICB1aW50MzJfdCBi
eXRlID0gKihyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihwKSk7CisgICAg
cCsrOworICAgIGlmIChieXRlICYgMTI4KSB7CisgICAgICAvLyBNb3JlIGJ5dGVzIGFyZSBwcmVz
ZW50CisgICAgICByZXN1bHQgfD0gKChieXRlICYgMTI3KSA8PCBzaGlmdCk7CisgICAgfSBlbHNl
IHsKKyAgICAgIHJlc3VsdCB8PSAoYnl0ZSA8PCBzaGlmdCk7CisgICAgICAqdmFsdWUgPSByZXN1
bHQ7CisgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4ocCk7CisgICAg
fQorICB9CisgIHJldHVybiBOVUxMOworfQorCitib29sIEdldFZhcmludDMyKFNsaWNlKiBpbnB1
dCwgdWludDMyX3QqIHZhbHVlKSB7CisgIGNvbnN0IGNoYXIqIHAgPSBpbnB1dC0+ZGF0YSgpOwor
ICBjb25zdCBjaGFyKiBsaW1pdCA9IHAgKyBpbnB1dC0+c2l6ZSgpOworICBjb25zdCBjaGFyKiBx
ID0gR2V0VmFyaW50MzJQdHIocCwgbGltaXQsIHZhbHVlKTsKKyAgaWYgKHEgPT0gTlVMTCkgewor
ICAgIHJldHVybiBmYWxzZTsKKyAgfSBlbHNlIHsKKyAgICAqaW5wdXQgPSBTbGljZShxLCBsaW1p
dCAtIHEpOworICAgIHJldHVybiB0cnVlOworICB9Cit9CisKK2NvbnN0IGNoYXIqIEdldFZhcmlu
dDY0UHRyKGNvbnN0IGNoYXIqIHAsIGNvbnN0IGNoYXIqIGxpbWl0LCB1aW50NjRfdCogdmFsdWUp
IHsKKyAgdWludDY0X3QgcmVzdWx0ID0gMDsKKyAgZm9yICh1aW50MzJfdCBzaGlmdCA9IDA7IHNo
aWZ0IDw9IDYzICYmIHAgPCBsaW1pdDsgc2hpZnQgKz0gNykgeworICAgIHVpbnQ2NF90IGJ5dGUg
PSAqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KHApKTsKKyAgICBwKys7
CisgICAgaWYgKGJ5dGUgJiAxMjgpIHsKKyAgICAgIC8vIE1vcmUgYnl0ZXMgYXJlIHByZXNlbnQK
KyAgICAgIHJlc3VsdCB8PSAoKGJ5dGUgJiAxMjcpIDw8IHNoaWZ0KTsKKyAgICB9IGVsc2Ugewor
ICAgICAgcmVzdWx0IHw9IChieXRlIDw8IHNoaWZ0KTsKKyAgICAgICp2YWx1ZSA9IHJlc3VsdDsK
KyAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihwKTsKKyAgICB9Cisg
IH0KKyAgcmV0dXJuIE5VTEw7Cit9CisKK2Jvb2wgR2V0VmFyaW50NjQoU2xpY2UqIGlucHV0LCB1
aW50NjRfdCogdmFsdWUpIHsKKyAgY29uc3QgY2hhciogcCA9IGlucHV0LT5kYXRhKCk7CisgIGNv
bnN0IGNoYXIqIGxpbWl0ID0gcCArIGlucHV0LT5zaXplKCk7CisgIGNvbnN0IGNoYXIqIHEgPSBH
ZXRWYXJpbnQ2NFB0cihwLCBsaW1pdCwgdmFsdWUpOworICBpZiAocSA9PSBOVUxMKSB7CisgICAg
cmV0dXJuIGZhbHNlOworICB9IGVsc2UgeworICAgICppbnB1dCA9IFNsaWNlKHEsIGxpbWl0IC0g
cSk7CisgICAgcmV0dXJuIHRydWU7CisgIH0KK30KKworY29uc3QgY2hhciogR2V0TGVuZ3RoUHJl
Zml4ZWRTbGljZShjb25zdCBjaGFyKiBwLCBjb25zdCBjaGFyKiBsaW1pdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgU2xpY2UqIHJlc3VsdCkgeworICB1aW50MzJfdCBsZW47
CisgIHAgPSBHZXRWYXJpbnQzMlB0cihwLCBsaW1pdCwgJmxlbik7CisgIGlmIChwID09IE5VTEwp
IHJldHVybiBOVUxMOworICBpZiAocCArIGxlbiA+IGxpbWl0KSByZXR1cm4gTlVMTDsKKyAgKnJl
c3VsdCA9IFNsaWNlKHAsIGxlbik7CisgIHJldHVybiBwICsgbGVuOworfQorCitib29sIEdldExl
bmd0aFByZWZpeGVkU2xpY2UoU2xpY2UqIGlucHV0LCBTbGljZSogcmVzdWx0KSB7CisgIHVpbnQz
Ml90IGxlbjsKKyAgaWYgKEdldFZhcmludDMyKGlucHV0LCAmbGVuKSAmJgorICAgICAgaW5wdXQt
PnNpemUoKSA+PSBsZW4pIHsKKyAgICAqcmVzdWx0ID0gU2xpY2UoaW5wdXQtPmRhdGEoKSwgbGVu
KTsKKyAgICBpbnB1dC0+cmVtb3ZlX3ByZWZpeChsZW4pOworICAgIHJldHVybiB0cnVlOworICB9
IGVsc2UgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorfQorCit9ICAvLyBuYW1lc3BhY2UgbGV2
ZWxkYgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2NvZGluZy5o
IGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2NvZGluZy5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM5
OTNjNGE3NTVkZmE1YTBmOGI5NjZmMWE2OThhMzcxZmEwODU1NmQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvY29kaW5nLmgKQEAgLTAsMCArMSwxMDQg
QEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKy8vCisv
LyBFbmRpYW4tbmV1dHJhbCBlbmNvZGluZzoKKy8vICogRml4ZWQtbGVuZ3RoIG51bWJlcnMgYXJl
IGVuY29kZWQgd2l0aCBsZWFzdC1zaWduaWZpY2FudCBieXRlIGZpcnN0CisvLyAqIEluIGFkZGl0
aW9uIHdlIHN1cHBvcnQgdmFyaWFibGUgbGVuZ3RoICJ2YXJpbnQiIGVuY29kaW5nCisvLyAqIFN0
cmluZ3MgYXJlIGVuY29kZWQgcHJlZml4ZWQgYnkgdGhlaXIgbGVuZ3RoIGluIHZhcmludCBmb3Jt
YXQKKworI2lmbmRlZiBTVE9SQUdFX0xFVkVMREJfVVRJTF9DT0RJTkdfSF8KKyNkZWZpbmUgU1RP
UkFHRV9MRVZFTERCX1VUSUxfQ09ESU5HX0hfCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNs
dWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSAibGV2ZWxkYi9zbGlj
ZS5oIgorI2luY2x1ZGUgInBvcnQvcG9ydC5oIgorCituYW1lc3BhY2UgbGV2ZWxkYiB7CisKKy8v
IFN0YW5kYXJkIFB1dC4uLiByb3V0aW5lcyBhcHBlbmQgdG8gYSBzdHJpbmcKK2V4dGVybiB2b2lk
IFB1dEZpeGVkMzIoc3RkOjpzdHJpbmcqIGRzdCwgdWludDMyX3QgdmFsdWUpOworZXh0ZXJuIHZv
aWQgUHV0Rml4ZWQ2NChzdGQ6OnN0cmluZyogZHN0LCB1aW50NjRfdCB2YWx1ZSk7CitleHRlcm4g
dm9pZCBQdXRWYXJpbnQzMihzdGQ6OnN0cmluZyogZHN0LCB1aW50MzJfdCB2YWx1ZSk7CitleHRl
cm4gdm9pZCBQdXRWYXJpbnQ2NChzdGQ6OnN0cmluZyogZHN0LCB1aW50NjRfdCB2YWx1ZSk7Citl
eHRlcm4gdm9pZCBQdXRMZW5ndGhQcmVmaXhlZFNsaWNlKHN0ZDo6c3RyaW5nKiBkc3QsIGNvbnN0
IFNsaWNlJiB2YWx1ZSk7CisKKy8vIFN0YW5kYXJkIEdldC4uLiByb3V0aW5lcyBwYXJzZSBhIHZh
bHVlIGZyb20gdGhlIGJlZ2lubmluZyBvZiBhIFNsaWNlCisvLyBhbmQgYWR2YW5jZSB0aGUgc2xp
Y2UgcGFzdCB0aGUgcGFyc2VkIHZhbHVlLgorZXh0ZXJuIGJvb2wgR2V0VmFyaW50MzIoU2xpY2Uq
IGlucHV0LCB1aW50MzJfdCogdmFsdWUpOworZXh0ZXJuIGJvb2wgR2V0VmFyaW50NjQoU2xpY2Uq
IGlucHV0LCB1aW50NjRfdCogdmFsdWUpOworZXh0ZXJuIGJvb2wgR2V0TGVuZ3RoUHJlZml4ZWRT
bGljZShTbGljZSogaW5wdXQsIFNsaWNlKiByZXN1bHQpOworCisvLyBQb2ludGVyLWJhc2VkIHZh
cmlhbnRzIG9mIEdldFZhcmludC4uLiAgVGhlc2UgZWl0aGVyIHN0b3JlIGEgdmFsdWUKKy8vIGlu
ICp2IGFuZCByZXR1cm4gYSBwb2ludGVyIGp1c3QgcGFzdCB0aGUgcGFyc2VkIHZhbHVlLCBvciBy
ZXR1cm4KKy8vIE5VTEwgb24gZXJyb3IuICBUaGVzZSByb3V0aW5lcyBvbmx5IGxvb2sgYXQgYnl0
ZXMgaW4gdGhlIHJhbmdlCisvLyBbcC4ubGltaXQtMV0KK2V4dGVybiBjb25zdCBjaGFyKiBHZXRW
YXJpbnQzMlB0cihjb25zdCBjaGFyKiBwLGNvbnN0IGNoYXIqIGxpbWl0LCB1aW50MzJfdCogdik7
CitleHRlcm4gY29uc3QgY2hhciogR2V0VmFyaW50NjRQdHIoY29uc3QgY2hhciogcCxjb25zdCBj
aGFyKiBsaW1pdCwgdWludDY0X3QqIHYpOworCisvLyBSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhl
IHZhcmludDMyIG9yIHZhcmludDY0IGVuY29kaW5nIG9mICJ2IgorZXh0ZXJuIGludCBWYXJpbnRM
ZW5ndGgodWludDY0X3Qgdik7CisKKy8vIExvd2VyLWxldmVsIHZlcnNpb25zIG9mIFB1dC4uLiB0
aGF0IHdyaXRlIGRpcmVjdGx5IGludG8gYSBjaGFyYWN0ZXIgYnVmZmVyCisvLyBSRVFVSVJFUzog
ZHN0IGhhcyBlbm91Z2ggc3BhY2UgZm9yIHRoZSB2YWx1ZSBiZWluZyB3cml0dGVuCitleHRlcm4g
dm9pZCBFbmNvZGVGaXhlZDMyKGNoYXIqIGRzdCwgdWludDMyX3QgdmFsdWUpOworZXh0ZXJuIHZv
aWQgRW5jb2RlRml4ZWQ2NChjaGFyKiBkc3QsIHVpbnQ2NF90IHZhbHVlKTsKKworLy8gTG93ZXIt
bGV2ZWwgdmVyc2lvbnMgb2YgUHV0Li4uIHRoYXQgd3JpdGUgZGlyZWN0bHkgaW50byBhIGNoYXJh
Y3RlciBidWZmZXIKKy8vIGFuZCByZXR1cm4gYSBwb2ludGVyIGp1c3QgcGFzdCB0aGUgbGFzdCBi
eXRlIHdyaXR0ZW4uCisvLyBSRVFVSVJFUzogZHN0IGhhcyBlbm91Z2ggc3BhY2UgZm9yIHRoZSB2
YWx1ZSBiZWluZyB3cml0dGVuCitleHRlcm4gY2hhciogRW5jb2RlVmFyaW50MzIoY2hhciogZHN0
LCB1aW50MzJfdCB2YWx1ZSk7CitleHRlcm4gY2hhciogRW5jb2RlVmFyaW50NjQoY2hhciogZHN0
LCB1aW50NjRfdCB2YWx1ZSk7CisKKy8vIExvd2VyLWxldmVsIHZlcnNpb25zIG9mIEdldC4uLiB0
aGF0IHJlYWQgZGlyZWN0bHkgZnJvbSBhIGNoYXJhY3RlciBidWZmZXIKKy8vIHdpdGhvdXQgYW55
IGJvdW5kcyBjaGVja2luZy4KKworaW5saW5lIHVpbnQzMl90IERlY29kZUZpeGVkMzIoY29uc3Qg
Y2hhciogcHRyKSB7CisgIGlmIChwb3J0OjprTGl0dGxlRW5kaWFuKSB7CisgICAgLy8gTG9hZCB0
aGUgcmF3IGJ5dGVzCisgICAgdWludDMyX3QgcmVzdWx0OworICAgIG1lbWNweSgmcmVzdWx0LCBw
dHIsIHNpemVvZihyZXN1bHQpKTsgIC8vIGdjYyBvcHRpbWl6ZXMgdGhpcyB0byBhIHBsYWluIGxv
YWQKKyAgICByZXR1cm4gcmVzdWx0OworICB9IGVsc2UgeworICAgIHJldHVybiAoKHN0YXRpY19j
YXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihwdHJbMF0pKSkKKyAgICAg
ICAgfCAoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KHB0
clsxXSkpIDw8IDgpCisgICAgICAgIHwgKHN0YXRpY19jYXN0PHVpbnQzMl90PihzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyPihwdHJbMl0pKSA8PCAxNikKKyAgICAgICAgfCAoc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KHB0clszXSkpIDw8IDI0KSk7Cisg
IH0KK30KKworaW5saW5lIHVpbnQ2NF90IERlY29kZUZpeGVkNjQoY29uc3QgY2hhciogcHRyKSB7
CisgIGlmIChwb3J0OjprTGl0dGxlRW5kaWFuKSB7CisgICAgLy8gTG9hZCB0aGUgcmF3IGJ5dGVz
CisgICAgdWludDY0X3QgcmVzdWx0OworICAgIG1lbWNweSgmcmVzdWx0LCBwdHIsIHNpemVvZihy
ZXN1bHQpKTsgIC8vIGdjYyBvcHRpbWl6ZXMgdGhpcyB0byBhIHBsYWluIGxvYWQKKyAgICByZXR1
cm4gcmVzdWx0OworICB9IGVsc2UgeworICAgIHVpbnQ2NF90IGxvID0gRGVjb2RlRml4ZWQzMihw
dHIpOworICAgIHVpbnQ2NF90IGhpID0gRGVjb2RlRml4ZWQzMihwdHIgKyA0KTsKKyAgICByZXR1
cm4gKGhpIDw8IDMyKSB8IGxvOworICB9Cit9CisKKy8vIEludGVybmFsIHJvdXRpbmUgZm9yIHVz
ZSBieSBmYWxsYmFjayBwYXRoIG9mIEdldFZhcmludDMyUHRyCitleHRlcm4gY29uc3QgY2hhciog
R2V0VmFyaW50MzJQdHJGYWxsYmFjayhjb25zdCBjaGFyKiBwLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogbGltaXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCogdmFsdWUpOworaW5saW5lIGNv
bnN0IGNoYXIqIEdldFZhcmludDMyUHRyKGNvbnN0IGNoYXIqIHAsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogbGltaXQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdWludDMyX3QqIHZhbHVlKSB7CisgIGlmIChwIDwgbGltaXQpIHsKKyAg
ICB1aW50MzJfdCByZXN1bHQgPSAqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hh
cio+KHApKTsKKyAgICBpZiAoKHJlc3VsdCAmIDEyOCkgPT0gMCkgeworICAgICAgKnZhbHVlID0g
cmVzdWx0OworICAgICAgcmV0dXJuIHAgKyAxOworICAgIH0KKyAgfQorICByZXR1cm4gR2V0VmFy
aW50MzJQdHJGYWxsYmFjayhwLCBsaW1pdCwgdmFsdWUpOworfQorCit9ICAvLyBuYW1lc3BhY2Ug
bGV2ZWxkYgorCisjZW5kaWYgIC8vIFNUT1JBR0VfTEVWRUxEQl9VVElMX0NPRElOR19IXwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2NvZGluZ190ZXN0LmNjIGIv
U291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2NvZGluZ190ZXN0LmNjCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjJjNTJiMTdiNjAyYjhkYzFjYjM2YmQ0OWQyYmFmZWFiZDRhMzVhZjEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvY29kaW5nX3Rlc3QuY2MKQEAgLTAs
MCArMSwxOTYgQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9y
cy4KKworI2luY2x1ZGUgInV0aWwvY29kaW5nLmgiCisKKyNpbmNsdWRlICJ1dGlsL3Rlc3RoYXJu
ZXNzLmgiCisKK25hbWVzcGFjZSBsZXZlbGRiIHsKKworY2xhc3MgQ29kaW5nIHsgfTsKKworVEVT
VChDb2RpbmcsIEZpeGVkMzIpIHsKKyAgc3RkOjpzdHJpbmcgczsKKyAgZm9yICh1aW50MzJfdCB2
ID0gMDsgdiA8IDEwMDAwMDsgdisrKSB7CisgICAgUHV0Rml4ZWQzMigmcywgdik7CisgIH0KKwor
ICBjb25zdCBjaGFyKiBwID0gcy5kYXRhKCk7CisgIGZvciAodWludDMyX3QgdiA9IDA7IHYgPCAx
MDAwMDA7IHYrKykgeworICAgIHVpbnQzMl90IGFjdHVhbCA9IERlY29kZUZpeGVkMzIocCk7Cisg
ICAgQVNTRVJUX0VRKHYsIGFjdHVhbCk7CisgICAgcCArPSBzaXplb2YodWludDMyX3QpOworICB9
Cit9CisKK1RFU1QoQ29kaW5nLCBGaXhlZDY0KSB7CisgIHN0ZDo6c3RyaW5nIHM7CisgIGZvciAo
aW50IHBvd2VyID0gMDsgcG93ZXIgPD0gNjM7IHBvd2VyKyspIHsKKyAgICB1aW50NjRfdCB2ID0g
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KDEpIDw8IHBvd2VyOworICAgIFB1dEZpeGVkNjQoJnMsIHYg
LSAxKTsKKyAgICBQdXRGaXhlZDY0KCZzLCB2ICsgMCk7CisgICAgUHV0Rml4ZWQ2NCgmcywgdiAr
IDEpOworICB9CisKKyAgY29uc3QgY2hhciogcCA9IHMuZGF0YSgpOworICBmb3IgKGludCBwb3dl
ciA9IDA7IHBvd2VyIDw9IDYzOyBwb3dlcisrKSB7CisgICAgdWludDY0X3QgdiA9IHN0YXRpY19j
YXN0PHVpbnQ2NF90PigxKSA8PCBwb3dlcjsKKyAgICB1aW50NjRfdCBhY3R1YWw7CisgICAgYWN0
dWFsID0gRGVjb2RlRml4ZWQ2NChwKTsKKyAgICBBU1NFUlRfRVEodi0xLCBhY3R1YWwpOworICAg
IHAgKz0gc2l6ZW9mKHVpbnQ2NF90KTsKKworICAgIGFjdHVhbCA9IERlY29kZUZpeGVkNjQocCk7
CisgICAgQVNTRVJUX0VRKHYrMCwgYWN0dWFsKTsKKyAgICBwICs9IHNpemVvZih1aW50NjRfdCk7
CisKKyAgICBhY3R1YWwgPSBEZWNvZGVGaXhlZDY0KHApOworICAgIEFTU0VSVF9FUSh2KzEsIGFj
dHVhbCk7CisgICAgcCArPSBzaXplb2YodWludDY0X3QpOworICB9Cit9CisKKy8vIFRlc3QgdGhh
dCBlbmNvZGluZyByb3V0aW5lcyBnZW5lcmF0ZSBsaXR0bGUtZW5kaWFuIGVuY29kaW5ncworVEVT
VChDb2RpbmcsIEVuY29kaW5nT3V0cHV0KSB7CisgIHN0ZDo6c3RyaW5nIGRzdDsKKyAgUHV0Rml4
ZWQzMigmZHN0LCAweDA0MDMwMjAxKTsKKyAgQVNTRVJUX0VRKDQsIGRzdC5zaXplKCkpOworICBB
U1NFUlRfRVEoMHgwMSwgc3RhdGljX2Nhc3Q8aW50Pihkc3RbMF0pKTsKKyAgQVNTRVJUX0VRKDB4
MDIsIHN0YXRpY19jYXN0PGludD4oZHN0WzFdKSk7CisgIEFTU0VSVF9FUSgweDAzLCBzdGF0aWNf
Y2FzdDxpbnQ+KGRzdFsyXSkpOworICBBU1NFUlRfRVEoMHgwNCwgc3RhdGljX2Nhc3Q8aW50Pihk
c3RbM10pKTsKKworICBkc3QuY2xlYXIoKTsKKyAgUHV0Rml4ZWQ2NCgmZHN0LCAweDA4MDcwNjA1
MDQwMzAyMDF1bGwpOworICBBU1NFUlRfRVEoOCwgZHN0LnNpemUoKSk7CisgIEFTU0VSVF9FUSgw
eDAxLCBzdGF0aWNfY2FzdDxpbnQ+KGRzdFswXSkpOworICBBU1NFUlRfRVEoMHgwMiwgc3RhdGlj
X2Nhc3Q8aW50Pihkc3RbMV0pKTsKKyAgQVNTRVJUX0VRKDB4MDMsIHN0YXRpY19jYXN0PGludD4o
ZHN0WzJdKSk7CisgIEFTU0VSVF9FUSgweDA0LCBzdGF0aWNfY2FzdDxpbnQ+KGRzdFszXSkpOwor
ICBBU1NFUlRfRVEoMHgwNSwgc3RhdGljX2Nhc3Q8aW50Pihkc3RbNF0pKTsKKyAgQVNTRVJUX0VR
KDB4MDYsIHN0YXRpY19jYXN0PGludD4oZHN0WzVdKSk7CisgIEFTU0VSVF9FUSgweDA3LCBzdGF0
aWNfY2FzdDxpbnQ+KGRzdFs2XSkpOworICBBU1NFUlRfRVEoMHgwOCwgc3RhdGljX2Nhc3Q8aW50
Pihkc3RbN10pKTsKK30KKworVEVTVChDb2RpbmcsIFZhcmludDMyKSB7CisgIHN0ZDo6c3RyaW5n
IHM7CisgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCAoMzIgKiAzMik7IGkrKykgeworICAgIHVp
bnQzMl90IHYgPSAoaSAvIDMyKSA8PCAoaSAlIDMyKTsKKyAgICBQdXRWYXJpbnQzMigmcywgdik7
CisgIH0KKworICBjb25zdCBjaGFyKiBwID0gcy5kYXRhKCk7CisgIGNvbnN0IGNoYXIqIGxpbWl0
ID0gcCArIHMuc2l6ZSgpOworICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgKDMyICogMzIpOyBp
KyspIHsKKyAgICB1aW50MzJfdCBleHBlY3RlZCA9IChpIC8gMzIpIDw8IChpICUgMzIpOworICAg
IHVpbnQzMl90IGFjdHVhbDsKKyAgICBjb25zdCBjaGFyKiBzdGFydCA9IHA7CisgICAgcCA9IEdl
dFZhcmludDMyUHRyKHAsIGxpbWl0LCAmYWN0dWFsKTsKKyAgICBBU1NFUlRfVFJVRShwICE9IE5V
TEwpOworICAgIEFTU0VSVF9FUShleHBlY3RlZCwgYWN0dWFsKTsKKyAgICBBU1NFUlRfRVEoVmFy
aW50TGVuZ3RoKGFjdHVhbCksIHAgLSBzdGFydCk7CisgIH0KKyAgQVNTRVJUX0VRKHAsIHMuZGF0
YSgpICsgcy5zaXplKCkpOworfQorCitURVNUKENvZGluZywgVmFyaW50NjQpIHsKKyAgLy8gQ29u
c3RydWN0IHRoZSBsaXN0IG9mIHZhbHVlcyB0byBjaGVjaworICBzdGQ6OnZlY3Rvcjx1aW50NjRf
dD4gdmFsdWVzOworICAvLyBTb21lIHNwZWNpYWwgdmFsdWVzCisgIHZhbHVlcy5wdXNoX2JhY2so
MCk7CisgIHZhbHVlcy5wdXNoX2JhY2soMTAwKTsKKyAgdmFsdWVzLnB1c2hfYmFjayh+c3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KDApKTsKKyAgdmFsdWVzLnB1c2hfYmFjayh+c3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KDApIC0gMSk7CisgIGZvciAodWludDMyX3QgayA9IDA7IGsgPCA2NDsgaysrKSB7Cisg
ICAgLy8gVGVzdCB2YWx1ZXMgbmVhciBwb3dlcnMgb2YgdHdvCisgICAgY29uc3QgdWludDY0X3Qg
cG93ZXIgPSAxdWxsIDw8IGs7CisgICAgdmFsdWVzLnB1c2hfYmFjayhwb3dlcik7CisgICAgdmFs
dWVzLnB1c2hfYmFjayhwb3dlci0xKTsKKyAgICB2YWx1ZXMucHVzaF9iYWNrKHBvd2VyKzEpOwor
ICB9OworCisgIHN0ZDo6c3RyaW5nIHM7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFsdWVzLnNp
emUoKTsgaSsrKSB7CisgICAgUHV0VmFyaW50NjQoJnMsIHZhbHVlc1tpXSk7CisgIH0KKworICBj
b25zdCBjaGFyKiBwID0gcy5kYXRhKCk7CisgIGNvbnN0IGNoYXIqIGxpbWl0ID0gcCArIHMuc2l6
ZSgpOworICBmb3IgKGludCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7IGkrKykgeworICAgIEFT
U0VSVF9UUlVFKHAgPCBsaW1pdCk7CisgICAgdWludDY0X3QgYWN0dWFsOworICAgIGNvbnN0IGNo
YXIqIHN0YXJ0ID0gcDsKKyAgICBwID0gR2V0VmFyaW50NjRQdHIocCwgbGltaXQsICZhY3R1YWwp
OworICAgIEFTU0VSVF9UUlVFKHAgIT0gTlVMTCk7CisgICAgQVNTRVJUX0VRKHZhbHVlc1tpXSwg
YWN0dWFsKTsKKyAgICBBU1NFUlRfRVEoVmFyaW50TGVuZ3RoKGFjdHVhbCksIHAgLSBzdGFydCk7
CisgIH0KKyAgQVNTRVJUX0VRKHAsIGxpbWl0KTsKKworfQorCitURVNUKENvZGluZywgVmFyaW50
MzJPdmVyZmxvdykgeworICB1aW50MzJfdCByZXN1bHQ7CisgIHN0ZDo6c3RyaW5nIGlucHV0KCJc
eDgxXHg4Mlx4ODNceDg0XHg4NVx4MTEiKTsKKyAgQVNTRVJUX1RSVUUoR2V0VmFyaW50MzJQdHIo
aW5wdXQuZGF0YSgpLCBpbnB1dC5kYXRhKCkgKyBpbnB1dC5zaXplKCksICZyZXN1bHQpCisgICAg
ICAgICAgICAgID09IE5VTEwpOworfQorCitURVNUKENvZGluZywgVmFyaW50MzJUcnVuY2F0aW9u
KSB7CisgIHVpbnQzMl90IGxhcmdlX3ZhbHVlID0gKDF1IDw8IDMxKSArIDEwMDsKKyAgc3RkOjpz
dHJpbmcgczsKKyAgUHV0VmFyaW50MzIoJnMsIGxhcmdlX3ZhbHVlKTsKKyAgdWludDMyX3QgcmVz
dWx0OworICBmb3IgKGludCBsZW4gPSAwOyBsZW4gPCBzLnNpemUoKSAtIDE7IGxlbisrKSB7Cisg
ICAgQVNTRVJUX1RSVUUoR2V0VmFyaW50MzJQdHIocy5kYXRhKCksIHMuZGF0YSgpICsgbGVuLCAm
cmVzdWx0KSA9PSBOVUxMKTsKKyAgfQorICBBU1NFUlRfVFJVRShHZXRWYXJpbnQzMlB0cihzLmRh
dGEoKSwgcy5kYXRhKCkgKyBzLnNpemUoKSwgJnJlc3VsdCkgIT0gTlVMTCk7CisgIEFTU0VSVF9F
UShsYXJnZV92YWx1ZSwgcmVzdWx0KTsKK30KKworVEVTVChDb2RpbmcsIFZhcmludDY0T3ZlcmZs
b3cpIHsKKyAgdWludDY0X3QgcmVzdWx0OworICBzdGQ6OnN0cmluZyBpbnB1dCgiXHg4MVx4ODJc
eDgzXHg4NFx4ODVceDgxXHg4Mlx4ODNceDg0XHg4NVx4MTEiKTsKKyAgQVNTRVJUX1RSVUUoR2V0
VmFyaW50NjRQdHIoaW5wdXQuZGF0YSgpLCBpbnB1dC5kYXRhKCkgKyBpbnB1dC5zaXplKCksICZy
ZXN1bHQpCisgICAgICAgICAgICAgID09IE5VTEwpOworfQorCitURVNUKENvZGluZywgVmFyaW50
NjRUcnVuY2F0aW9uKSB7CisgIHVpbnQ2NF90IGxhcmdlX3ZhbHVlID0gKDF1bGwgPDwgNjMpICsg
MTAwdWxsOworICBzdGQ6OnN0cmluZyBzOworICBQdXRWYXJpbnQ2NCgmcywgbGFyZ2VfdmFsdWUp
OworICB1aW50NjRfdCByZXN1bHQ7CisgIGZvciAoaW50IGxlbiA9IDA7IGxlbiA8IHMuc2l6ZSgp
IC0gMTsgbGVuKyspIHsKKyAgICBBU1NFUlRfVFJVRShHZXRWYXJpbnQ2NFB0cihzLmRhdGEoKSwg
cy5kYXRhKCkgKyBsZW4sICZyZXN1bHQpID09IE5VTEwpOworICB9CisgIEFTU0VSVF9UUlVFKEdl
dFZhcmludDY0UHRyKHMuZGF0YSgpLCBzLmRhdGEoKSArIHMuc2l6ZSgpLCAmcmVzdWx0KSAhPSBO
VUxMKTsKKyAgQVNTRVJUX0VRKGxhcmdlX3ZhbHVlLCByZXN1bHQpOworfQorCitURVNUKENvZGlu
ZywgU3RyaW5ncykgeworICBzdGQ6OnN0cmluZyBzOworICBQdXRMZW5ndGhQcmVmaXhlZFNsaWNl
KCZzLCBTbGljZSgiIikpOworICBQdXRMZW5ndGhQcmVmaXhlZFNsaWNlKCZzLCBTbGljZSgiZm9v
IikpOworICBQdXRMZW5ndGhQcmVmaXhlZFNsaWNlKCZzLCBTbGljZSgiYmFyIikpOworICBQdXRM
ZW5ndGhQcmVmaXhlZFNsaWNlKCZzLCBTbGljZShzdGQ6OnN0cmluZygyMDAsICd4JykpKTsKKwor
ICBTbGljZSBpbnB1dChzKTsKKyAgU2xpY2UgdjsKKyAgQVNTRVJUX1RSVUUoR2V0TGVuZ3RoUHJl
Zml4ZWRTbGljZSgmaW5wdXQsICZ2KSk7CisgIEFTU0VSVF9FUSgiIiwgdi5Ub1N0cmluZygpKTsK
KyAgQVNTRVJUX1RSVUUoR2V0TGVuZ3RoUHJlZml4ZWRTbGljZSgmaW5wdXQsICZ2KSk7CisgIEFT
U0VSVF9FUSgiZm9vIiwgdi5Ub1N0cmluZygpKTsKKyAgQVNTRVJUX1RSVUUoR2V0TGVuZ3RoUHJl
Zml4ZWRTbGljZSgmaW5wdXQsICZ2KSk7CisgIEFTU0VSVF9FUSgiYmFyIiwgdi5Ub1N0cmluZygp
KTsKKyAgQVNTRVJUX1RSVUUoR2V0TGVuZ3RoUHJlZml4ZWRTbGljZSgmaW5wdXQsICZ2KSk7Cisg
IEFTU0VSVF9FUShzdGQ6OnN0cmluZygyMDAsICd4JyksIHYuVG9TdHJpbmcoKSk7CisgIEFTU0VS
VF9FUSgiIiwgaW5wdXQuVG9TdHJpbmcoKSk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBsZXZlbGRi
CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikgeworICByZXR1cm4gbGV2ZWxkYjo6
dGVzdDo6UnVuQWxsVGVzdHMoKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xl
dmVsZGIvdXRpbC9jb21wYXJhdG9yLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGls
L2NvbXBhcmF0b3IuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGI3YjU3MjRlZjNiZTVmNmM3ZWQ5Zjk1ZGNiNDdh
OTlmMmVlMmY5YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIv
dXRpbC9jb21wYXJhdG9yLmNjCkBAIC0wLDAgKzEsODEgQEAKKy8vIENvcHlyaWdodCAoYykgMjAx
MSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUg
Zm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNs
dWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlICJsZXZlbGRiL2NvbXBhcmF0b3IuaCIKKyNpbmNsdWRl
ICJsZXZlbGRiL3NsaWNlLmgiCisjaW5jbHVkZSAicG9ydC9wb3J0LmgiCisjaW5jbHVkZSAidXRp
bC9sb2dnaW5nLmgiCisKK25hbWVzcGFjZSBsZXZlbGRiIHsKKworQ29tcGFyYXRvcjo6fkNvbXBh
cmF0b3IoKSB7IH0KKworbmFtZXNwYWNlIHsKK2NsYXNzIEJ5dGV3aXNlQ29tcGFyYXRvckltcGwg
OiBwdWJsaWMgQ29tcGFyYXRvciB7CisgcHVibGljOgorICBCeXRld2lzZUNvbXBhcmF0b3JJbXBs
KCkgeyB9CisKKyAgdmlydHVhbCBjb25zdCBjaGFyKiBOYW1lKCkgY29uc3QgeworICAgIHJldHVy
biAibGV2ZWxkYi5CeXRld2lzZUNvbXBhcmF0b3IiOworICB9CisKKyAgdmlydHVhbCBpbnQgQ29t
cGFyZShjb25zdCBTbGljZSYgYSwgY29uc3QgU2xpY2UmIGIpIGNvbnN0IHsKKyAgICByZXR1cm4g
YS5jb21wYXJlKGIpOworICB9CisKKyAgdmlydHVhbCB2b2lkIEZpbmRTaG9ydGVzdFNlcGFyYXRv
cigKKyAgICAgIHN0ZDo6c3RyaW5nKiBzdGFydCwKKyAgICAgIGNvbnN0IFNsaWNlJiBsaW1pdCkg
Y29uc3QgeworICAgIC8vIEZpbmQgbGVuZ3RoIG9mIGNvbW1vbiBwcmVmaXgKKyAgICBzaXplX3Qg
bWluX2xlbmd0aCA9IHN0ZDo6bWluKHN0YXJ0LT5zaXplKCksIGxpbWl0LnNpemUoKSk7CisgICAg
c2l6ZV90IGRpZmZfaW5kZXggPSAwOworICAgIHdoaWxlICgoZGlmZl9pbmRleCA8IG1pbl9sZW5n
dGgpICYmCisgICAgICAgICAgICgoKnN0YXJ0KVtkaWZmX2luZGV4XSA9PSBsaW1pdFtkaWZmX2lu
ZGV4XSkpIHsKKyAgICAgIGRpZmZfaW5kZXgrKzsKKyAgICB9CisKKyAgICBpZiAoZGlmZl9pbmRl
eCA+PSBtaW5fbGVuZ3RoKSB7CisgICAgICAvLyBEbyBub3Qgc2hvcnRlbiBpZiBvbmUgc3RyaW5n
IGlzIGEgcHJlZml4IG9mIHRoZSBvdGhlcgorICAgIH0gZWxzZSB7CisgICAgICB1aW50OF90IGRp
ZmZfYnl0ZSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KCgqc3RhcnQpW2RpZmZfaW5kZXhdKTsKKyAg
ICAgIGlmIChkaWZmX2J5dGUgPCBzdGF0aWNfY2FzdDx1aW50OF90PigweGZmKSAmJgorICAgICAg
ICAgIGRpZmZfYnl0ZSArIDEgPCBzdGF0aWNfY2FzdDx1aW50OF90PihsaW1pdFtkaWZmX2luZGV4
XSkpIHsKKyAgICAgICAgKCpzdGFydClbZGlmZl9pbmRleF0rKzsKKyAgICAgICAgc3RhcnQtPnJl
c2l6ZShkaWZmX2luZGV4ICsgMSk7CisgICAgICAgIGFzc2VydChDb21wYXJlKCpzdGFydCwgbGlt
aXQpIDwgMCk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgdmlydHVhbCB2b2lkIEZpbmRTaG9y
dFN1Y2Nlc3NvcihzdGQ6OnN0cmluZyoga2V5KSBjb25zdCB7CisgICAgLy8gRmluZCBmaXJzdCBj
aGFyYWN0ZXIgdGhhdCBjYW4gYmUgaW5jcmVtZW50ZWQKKyAgICBzaXplX3QgbiA9IGtleS0+c2l6
ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgICBjb25zdCB1
aW50OF90IGJ5dGUgPSAoKmtleSlbaV07CisgICAgICBpZiAoYnl0ZSAhPSBzdGF0aWNfY2FzdDx1
aW50OF90PigweGZmKSkgeworICAgICAgICAoKmtleSlbaV0gPSBieXRlICsgMTsKKyAgICAgICAg
a2V5LT5yZXNpemUoaSsxKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgIH0KKyAgICAv
LyAqa2V5IGlzIGEgcnVuIG9mIDB4ZmZzLiAgTGVhdmUgaXQgYWxvbmUuCisgIH0KK307Cit9ICAv
LyBuYW1lc3BhY2UKKworc3RhdGljIHBvcnQ6Ok9uY2VUeXBlIG9uY2UgPSBMRVZFTERCX09OQ0Vf
SU5JVDsKK3N0YXRpYyBjb25zdCBDb21wYXJhdG9yKiBieXRld2lzZTsKKworc3RhdGljIHZvaWQg
SW5pdE1vZHVsZSgpIHsKKyAgYnl0ZXdpc2UgPSBuZXcgQnl0ZXdpc2VDb21wYXJhdG9ySW1wbDsK
K30KKworY29uc3QgQ29tcGFyYXRvciogQnl0ZXdpc2VDb21wYXJhdG9yKCkgeworICBwb3J0OjpJ
bml0T25jZSgmb25jZSwgSW5pdE1vZHVsZSk7CisgIHJldHVybiBieXRld2lzZTsKK30KKworfSAg
Ly8gbmFtZXNwYWNlIGxldmVsZGIKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVs
ZGIvdXRpbC9jcmMzMmMuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvY3JjMzJj
LmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjZkYjllNzcwNzc0ZDdlYmMwYjBjM2JjNGEyMzBiNWI4MjU0Y2QxZjQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvY3JjMzJj
LmNjCkBAIC0wLDAgKzEsMzMyIEBACisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBj
b250cmlidXRvcnMuCisvLworLy8gQSBwb3J0YWJsZSBpbXBsZW1lbnRhdGlvbiBvZiBjcmMzMmMs
IG9wdGltaXplZCB0byBoYW5kbGUKKy8vIGZvdXIgYnl0ZXMgYXQgYSB0aW1lLgorCisjaW5jbHVk
ZSAidXRpbC9jcmMzMmMuaCIKKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgInV0aWwv
Y29kaW5nLmgiCisKK25hbWVzcGFjZSBsZXZlbGRiIHsKK25hbWVzcGFjZSBjcmMzMmMgeworCitz
dGF0aWMgY29uc3QgdWludDMyX3QgdGFibGUwX1syNTZdID0geworICAweDAwMDAwMDAwLCAweGYy
NmI4MzAzLCAweGUxM2I3MGY3LCAweDEzNTBmM2Y0LAorICAweGM3OWE5NzFmLCAweDM1ZjExNDFj
LCAweDI2YTFlN2U4LCAweGQ0Y2E2NGViLAorICAweDhhZDk1OGNmLCAweDc4YjJkYmNjLCAweDZi
ZTIyODM4LCAweDk5ODlhYjNiLAorICAweDRkNDNjZmQwLCAweGJmMjg0Y2QzLCAweGFjNzhiZjI3
LCAweDVlMTMzYzI0LAorICAweDEwNWVjNzZmLCAweGUyMzU0NDZjLCAweGYxNjViNzk4LCAweDAz
MGUzNDliLAorICAweGQ3YzQ1MDcwLCAweDI1YWZkMzczLCAweDM2ZmYyMDg3LCAweGM0OTRhMzg0
LAorICAweDlhODc5ZmEwLCAweDY4ZWMxY2EzLCAweDdiYmNlZjU3LCAweDg5ZDc2YzU0LAorICAw
eDVkMWQwOGJmLCAweGFmNzY4YmJjLCAweGJjMjY3ODQ4LCAweDRlNGRmYjRiLAorICAweDIwYmQ4
ZWRlLCAweGQyZDYwZGRkLCAweGMxODZmZTI5LCAweDMzZWQ3ZDJhLAorICAweGU3MjcxOWMxLCAw
eDE1NGM5YWMyLCAweDA2MWM2OTM2LCAweGY0NzdlYTM1LAorICAweGFhNjRkNjExLCAweDU4MGY1
NTEyLCAweDRiNWZhNmU2LCAweGI5MzQyNWU1LAorICAweDZkZmU0MTBlLCAweDlmOTVjMjBkLCAw
eDhjYzUzMWY5LCAweDdlYWViMmZhLAorICAweDMwZTM0OWIxLCAweGMyODhjYWIyLCAweGQxZDgz
OTQ2LCAweDIzYjNiYTQ1LAorICAweGY3NzlkZWFlLCAweDA1MTI1ZGFkLCAweDE2NDJhZTU5LCAw
eGU0MjkyZDVhLAorICAweGJhM2ExMTdlLCAweDQ4NTE5MjdkLCAweDViMDE2MTg5LCAweGE5NmFl
MjhhLAorICAweDdkYTA4NjYxLCAweDhmY2IwNTYyLCAweDljOWJmNjk2LCAweDZlZjA3NTk1LAor
ICAweDQxN2IxZGJjLCAweGIzMTA5ZWJmLCAweGEwNDA2ZDRiLCAweDUyMmJlZTQ4LAorICAweDg2
ZTE4YWEzLCAweDc0OGEwOWEwLCAweDY3ZGFmYTU0LCAweDk1YjE3OTU3LAorICAweGNiYTI0NTcz
LCAweDM5YzljNjcwLCAweDJhOTkzNTg0LCAweGQ4ZjJiNjg3LAorICAweDBjMzhkMjZjLCAweGZl
NTM1MTZmLCAweGVkMDNhMjliLCAweDFmNjgyMTk4LAorICAweDUxMjVkYWQzLCAweGEzNGU1OWQw
LCAweGIwMWVhYTI0LCAweDQyNzUyOTI3LAorICAweDk2YmY0ZGNjLCAweDY0ZDRjZWNmLCAweDc3
ODQzZDNiLCAweDg1ZWZiZTM4LAorICAweGRiZmM4MjFjLCAweDI5OTcwMTFmLCAweDNhYzdmMmVi
LCAweGM4YWM3MWU4LAorICAweDFjNjYxNTAzLCAweGVlMGQ5NjAwLCAweGZkNWQ2NWY0LCAweDBm
MzZlNmY3LAorICAweDYxYzY5MzYyLCAweDkzYWQxMDYxLCAweDgwZmRlMzk1LCAweDcyOTY2MDk2
LAorICAweGE2NWMwNDdkLCAweDU0Mzc4NzdlLCAweDQ3Njc3NDhhLCAweGI1MGNmNzg5LAorICAw
eGViMWZjYmFkLCAweDE5NzQ0OGFlLCAweDBhMjRiYjVhLCAweGY4NGYzODU5LAorICAweDJjODU1
Y2IyLCAweGRlZWVkZmIxLCAweGNkYmUyYzQ1LCAweDNmZDVhZjQ2LAorICAweDcxOTg1NDBkLCAw
eDgzZjNkNzBlLCAweDkwYTMyNGZhLCAweDYyYzhhN2Y5LAorICAweGI2MDJjMzEyLCAweDQ0Njk0
MDExLCAweDU3MzliM2U1LCAweGE1NTIzMGU2LAorICAweGZiNDEwY2MyLCAweDA5MmE4ZmMxLCAw
eDFhN2E3YzM1LCAweGU4MTFmZjM2LAorICAweDNjZGI5YmRkLCAweGNlYjAxOGRlLCAweGRkZTBl
YjJhLCAweDJmOGI2ODI5LAorICAweDgyZjYzYjc4LCAweDcwOWRiODdiLCAweDYzY2Q0YjhmLCAw
eDkxYTZjODhjLAorICAweDQ1NmNhYzY3LCAweGI3MDcyZjY0LCAweGE0NTdkYzkwLCAweDU2M2M1
ZjkzLAorICAweDA4MmY2M2I3LCAweGZhNDRlMGI0LCAweGU5MTQxMzQwLCAweDFiN2Y5MDQzLAor
ICAweGNmYjVmNGE4LCAweDNkZGU3N2FiLCAweDJlOGU4NDVmLCAweGRjZTUwNzVjLAorICAweDky
YThmYzE3LCAweDYwYzM3ZjE0LCAweDczOTM4Y2UwLCAweDgxZjgwZmUzLAorICAweDU1MzI2YjA4
LCAweGE3NTllODBiLCAweGI0MDkxYmZmLCAweDQ2NjI5OGZjLAorICAweDE4NzFhNGQ4LCAweGVh
MWEyN2RiLCAweGY5NGFkNDJmLCAweDBiMjE1NzJjLAorICAweGRmZWIzM2M3LCAweDJkODBiMGM0
LCAweDNlZDA0MzMwLCAweGNjYmJjMDMzLAorICAweGEyNGJiNWE2LCAweDUwMjAzNmE1LCAweDQz
NzBjNTUxLCAweGIxMWI0NjUyLAorICAweDY1ZDEyMmI5LCAweDk3YmFhMWJhLCAweDg0ZWE1MjRl
LCAweDc2ODFkMTRkLAorICAweDI4OTJlZDY5LCAweGRhZjk2ZTZhLCAweGM5YTk5ZDllLCAweDNi
YzIxZTlkLAorICAweGVmMDg3YTc2LCAweDFkNjNmOTc1LCAweDBlMzMwYTgxLCAweGZjNTg4OTgy
LAorICAweGIyMTU3MmM5LCAweDQwN2VmMWNhLCAweDUzMmUwMjNlLCAweGExNDU4MTNkLAorICAw
eDc1OGZlNWQ2LCAweDg3ZTQ2NmQ1LCAweDk0YjQ5NTIxLCAweDY2ZGYxNjIyLAorICAweDM4Y2My
YTA2LCAweGNhYTdhOTA1LCAweGQ5Zjc1YWYxLCAweDJiOWNkOWYyLAorICAweGZmNTZiZDE5LCAw
eDBkM2QzZTFhLCAweDFlNmRjZGVlLCAweGVjMDY0ZWVkLAorICAweGMzOGQyNmM0LCAweDMxZTZh
NWM3LCAweDIyYjY1NjMzLCAweGQwZGRkNTMwLAorICAweDA0MTdiMWRiLCAweGY2N2MzMmQ4LCAw
eGU1MmNjMTJjLCAweDE3NDc0MjJmLAorICAweDQ5NTQ3ZTBiLCAweGJiM2ZmZDA4LCAweGE4NmYw
ZWZjLCAweDVhMDQ4ZGZmLAorICAweDhlY2VlOTE0LCAweDdjYTU2YTE3LCAweDZmZjU5OWUzLCAw
eDlkOWUxYWUwLAorICAweGQzZDNlMWFiLCAweDIxYjg2MmE4LCAweDMyZTg5MTVjLCAweGMwODMx
MjVmLAorICAweDE0NDk3NmI0LCAweGU2MjJmNWI3LCAweGY1NzIwNjQzLCAweDA3MTk4NTQwLAor
ICAweDU5MGFiOTY0LCAweGFiNjEzYTY3LCAweGI4MzFjOTkzLCAweDRhNWE0YTkwLAorICAweDll
OTAyZTdiLCAweDZjZmJhZDc4LCAweDdmYWI1ZThjLCAweDhkYzBkZDhmLAorICAweGUzMzBhODFh
LCAweDExNWIyYjE5LCAweDAyMGJkOGVkLCAweGYwNjA1YmVlLAorICAweDI0YWEzZjA1LCAweGQ2
YzFiYzA2LCAweGM1OTE0ZmYyLCAweDM3ZmFjY2YxLAorICAweDY5ZTlmMGQ1LCAweDliODI3M2Q2
LCAweDg4ZDI4MDIyLCAweDdhYjkwMzIxLAorICAweGFlNzM2N2NhLCAweDVjMThlNGM5LCAweDRm
NDgxNzNkLCAweGJkMjM5NDNlLAorICAweGYzNmU2Zjc1LCAweDAxMDVlYzc2LCAweDEyNTUxZjgy
LCAweGUwM2U5YzgxLAorICAweDM0ZjRmODZhLCAweGM2OWY3YjY5LCAweGQ1Y2Y4ODlkLCAweDI3
YTQwYjllLAorICAweDc5YjczN2JhLCAweDhiZGNiNGI5LCAweDk4OGM0NzRkLCAweDZhZTdjNDRl
LAorICAweGJlMmRhMGE1LCAweDRjNDYyM2E2LCAweDVmMTZkMDUyLCAweGFkN2Q1MzUxCit9Owor
c3RhdGljIGNvbnN0IHVpbnQzMl90IHRhYmxlMV9bMjU2XSA9IHsKKyAgMHgwMDAwMDAwMCwgMHgx
M2EyOTg3NywgMHgyNzQ1MzBlZSwgMHgzNGU3YTg5OSwKKyAgMHg0ZThhNjFkYywgMHg1ZDI4Zjlh
YiwgMHg2OWNmNTEzMiwgMHg3YTZkYzk0NSwKKyAgMHg5ZDE0YzNiOCwgMHg4ZWI2NWJjZiwgMHhi
YTUxZjM1NiwgMHhhOWYzNmIyMSwKKyAgMHhkMzllYTI2NCwgMHhjMDNjM2ExMywgMHhmNGRiOTI4
YSwgMHhlNzc5MGFmZCwKKyAgMHgzZmM1ZjE4MSwgMHgyYzY3NjlmNiwgMHgxODgwYzE2ZiwgMHgw
YjIyNTkxOCwKKyAgMHg3MTRmOTA1ZCwgMHg2MmVkMDgyYSwgMHg1NjBhYTBiMywgMHg0NWE4Mzhj
NCwKKyAgMHhhMmQxMzIzOSwgMHhiMTczYWE0ZSwgMHg4NTk0MDJkNywgMHg5NjM2OWFhMCwKKyAg
MHhlYzViNTNlNSwgMHhmZmY5Y2I5MiwgMHhjYjFlNjMwYiwgMHhkOGJjZmI3YywKKyAgMHg3Zjhi
ZTMwMiwgMHg2YzI5N2I3NSwgMHg1OGNlZDNlYywgMHg0YjZjNGI5YiwKKyAgMHgzMTAxODJkZSwg
MHgyMmEzMWFhOSwgMHgxNjQ0YjIzMCwgMHgwNWU2MmE0NywKKyAgMHhlMjlmMjBiYSwgMHhmMTNk
YjhjZCwgMHhjNWRhMTA1NCwgMHhkNjc4ODgyMywKKyAgMHhhYzE1NDE2NiwgMHhiZmI3ZDkxMSwg
MHg4YjUwNzE4OCwgMHg5OGYyZTlmZiwKKyAgMHg0MDRlMTI4MywgMHg1M2VjOGFmNCwgMHg2NzBi
MjI2ZCwgMHg3NGE5YmExYSwKKyAgMHgwZWM0NzM1ZiwgMHgxZDY2ZWIyOCwgMHgyOTgxNDNiMSwg
MHgzYTIzZGJjNiwKKyAgMHhkZDVhZDEzYiwgMHhjZWY4NDk0YywgMHhmYTFmZTFkNSwgMHhlOWJk
NzlhMiwKKyAgMHg5M2QwYjBlNywgMHg4MDcyMjg5MCwgMHhiNDk1ODAwOSwgMHhhNzM3MTg3ZSwK
KyAgMHhmZjE3YzYwNCwgMHhlY2I1NWU3MywgMHhkODUyZjZlYSwgMHhjYmYwNmU5ZCwKKyAgMHhi
MTlkYTdkOCwgMHhhMjNmM2ZhZiwgMHg5NmQ4OTczNiwgMHg4NTdhMGY0MSwKKyAgMHg2MjAzMDVi
YywgMHg3MWExOWRjYiwgMHg0NTQ2MzU1MiwgMHg1NmU0YWQyNSwKKyAgMHgyYzg5NjQ2MCwgMHgz
ZjJiZmMxNywgMHgwYmNjNTQ4ZSwgMHgxODZlY2NmOSwKKyAgMHhjMGQyMzc4NSwgMHhkMzcwYWZm
MiwgMHhlNzk3MDc2YiwgMHhmNDM1OWYxYywKKyAgMHg4ZTU4NTY1OSwgMHg5ZGZhY2UyZSwgMHhh
OTFkNjZiNywgMHhiYWJmZmVjMCwKKyAgMHg1ZGM2ZjQzZCwgMHg0ZTY0NmM0YSwgMHg3YTgzYzRk
MywgMHg2OTIxNWNhNCwKKyAgMHgxMzRjOTVlMSwgMHgwMGVlMGQ5NiwgMHgzNDA5YTUwZiwgMHgy
N2FiM2Q3OCwKKyAgMHg4MDljMjUwNiwgMHg5MzNlYmQ3MSwgMHhhN2Q5MTVlOCwgMHhiNDdiOGQ5
ZiwKKyAgMHhjZTE2NDRkYSwgMHhkZGI0ZGNhZCwgMHhlOTUzNzQzNCwgMHhmYWYxZWM0MywKKyAg
MHgxZDg4ZTZiZSwgMHgwZTJhN2VjOSwgMHgzYWNkZDY1MCwgMHgyOTZmNGUyNywKKyAgMHg1MzAy
ODc2MiwgMHg0MGEwMWYxNSwgMHg3NDQ3Yjc4YywgMHg2N2U1MmZmYiwKKyAgMHhiZjU5ZDQ4Nywg
MHhhY2ZiNGNmMCwgMHg5ODFjZTQ2OSwgMHg4YmJlN2MxZSwKKyAgMHhmMWQzYjU1YiwgMHhlMjcx
MmQyYywgMHhkNjk2ODViNSwgMHhjNTM0MWRjMiwKKyAgMHgyMjRkMTczZiwgMHgzMWVmOGY0OCwg
MHgwNTA4MjdkMSwgMHgxNmFhYmZhNiwKKyAgMHg2Y2M3NzZlMywgMHg3ZjY1ZWU5NCwgMHg0Yjgy
NDYwZCwgMHg1ODIwZGU3YSwKKyAgMHhmYmMzZmFmOSwgMHhlODYxNjI4ZSwgMHhkYzg2Y2ExNywg
MHhjZjI0NTI2MCwKKyAgMHhiNTQ5OWIyNSwgMHhhNmViMDM1MiwgMHg5MjBjYWJjYiwgMHg4MWFl
MzNiYywKKyAgMHg2NmQ3Mzk0MSwgMHg3NTc1YTEzNiwgMHg0MTkyMDlhZiwgMHg1MjMwOTFkOCwK
KyAgMHgyODVkNTg5ZCwgMHgzYmZmYzBlYSwgMHgwZjE4Njg3MywgMHgxY2JhZjAwNCwKKyAgMHhj
NDA2MGI3OCwgMHhkN2E0OTMwZiwgMHhlMzQzM2I5NiwgMHhmMGUxYTNlMSwKKyAgMHg4YThjNmFh
NCwgMHg5OTJlZjJkMywgMHhhZGM5NWE0YSwgMHhiZTZiYzIzZCwKKyAgMHg1OTEyYzhjMCwgMHg0
YWIwNTBiNywgMHg3ZTU3ZjgyZSwgMHg2ZGY1NjA1OSwKKyAgMHgxNzk4YTkxYywgMHgwNDNhMzE2
YiwgMHgzMGRkOTlmMiwgMHgyMzdmMDE4NSwKKyAgMHg4NDQ4MTlmYiwgMHg5N2VhODE4YywgMHhh
MzBkMjkxNSwgMHhiMGFmYjE2MiwKKyAgMHhjYWMyNzgyNywgMHhkOTYwZTA1MCwgMHhlZDg3NDhj
OSwgMHhmZTI1ZDBiZSwKKyAgMHgxOTVjZGE0MywgMHgwYWZlNDIzNCwgMHgzZTE5ZWFhZCwgMHgy
ZGJiNzJkYSwKKyAgMHg1N2Q2YmI5ZiwgMHg0NDc0MjNlOCwgMHg3MDkzOGI3MSwgMHg2MzMxMTMw
NiwKKyAgMHhiYjhkZTg3YSwgMHhhODJmNzAwZCwgMHg5Y2M4ZDg5NCwgMHg4ZjZhNDBlMywKKyAg
MHhmNTA3ODlhNiwgMHhlNmE1MTFkMSwgMHhkMjQyYjk0OCwgMHhjMWUwMjEzZiwKKyAgMHgyNjk5
MmJjMiwgMHgzNTNiYjNiNSwgMHgwMWRjMWIyYywgMHgxMjdlODM1YiwKKyAgMHg2ODEzNGExZSwg
MHg3YmIxZDI2OSwgMHg0ZjU2N2FmMCwgMHg1Y2Y0ZTI4NywKKyAgMHgwNGQ0M2NmZCwgMHgxNzc2
YTQ4YSwgMHgyMzkxMGMxMywgMHgzMDMzOTQ2NCwKKyAgMHg0YTVlNWQyMSwgMHg1OWZjYzU1Niwg
MHg2ZDFiNmRjZiwgMHg3ZWI5ZjViOCwKKyAgMHg5OWMwZmY0NSwgMHg4YTYyNjczMiwgMHhiZTg1
Y2ZhYiwgMHhhZDI3NTdkYywKKyAgMHhkNzRhOWU5OSwgMHhjNGU4MDZlZSwgMHhmMDBmYWU3Nywg
MHhlM2FkMzYwMCwKKyAgMHgzYjExY2Q3YywgMHgyOGIzNTUwYiwgMHgxYzU0ZmQ5MiwgMHgwZmY2
NjVlNSwKKyAgMHg3NTliYWNhMCwgMHg2NjM5MzRkNywgMHg1MmRlOWM0ZSwgMHg0MTdjMDQzOSwK
KyAgMHhhNjA1MGVjNCwgMHhiNWE3OTZiMywgMHg4MTQwM2UyYSwgMHg5MmUyYTY1ZCwKKyAgMHhl
ODhmNmYxOCwgMHhmYjJkZjc2ZiwgMHhjZmNhNWZmNiwgMHhkYzY4Yzc4MSwKKyAgMHg3YjVmZGZm
ZiwgMHg2OGZkNDc4OCwgMHg1YzFhZWYxMSwgMHg0ZmI4Nzc2NiwKKyAgMHgzNWQ1YmUyMywgMHgy
Njc3MjY1NCwgMHgxMjkwOGVjZCwgMHgwMTMyMTZiYSwKKyAgMHhlNjRiMWM0NywgMHhmNWU5ODQz
MCwgMHhjMTBlMmNhOSwgMHhkMmFjYjRkZSwKKyAgMHhhOGMxN2Q5YiwgMHhiYjYzZTVlYywgMHg4
Zjg0NGQ3NSwgMHg5YzI2ZDUwMiwKKyAgMHg0NDlhMmU3ZSwgMHg1NzM4YjYwOSwgMHg2M2RmMWU5
MCwgMHg3MDdkODZlNywKKyAgMHgwYTEwNGZhMiwgMHgxOWIyZDdkNSwgMHgyZDU1N2Y0YywgMHgz
ZWY3ZTczYiwKKyAgMHhkOThlZWRjNiwgMHhjYTJjNzViMSwgMHhmZWNiZGQyOCwgMHhlZDY5NDU1
ZiwKKyAgMHg5NzA0OGMxYSwgMHg4NGE2MTQ2ZCwgMHhiMDQxYmNmNCwgMHhhM2UzMjQ4MworfTsK
K3N0YXRpYyBjb25zdCB1aW50MzJfdCB0YWJsZTJfWzI1Nl0gPSB7CisgIDB4MDAwMDAwMDAsIDB4
YTU0MTkyN2UsIDB4NGY2ZjUyMGQsIDB4ZWEyZWMwNzMsCisgIDB4OWVkZWE0MWEsIDB4M2I5ZjM2
NjQsIDB4ZDFiMWY2MTcsIDB4NzRmMDY0NjksCisgIDB4Mzg1MTNlYzUsIDB4OWQxMGFjYmIsIDB4
NzczZTZjYzgsIDB4ZDI3ZmZlYjYsCisgIDB4YTY4ZjlhZGYsIDB4MDNjZTA4YTEsIDB4ZTllMGM4
ZDIsIDB4NGNhMTVhYWMsCisgIDB4NzBhMjdkOGEsIDB4ZDVlM2VmZjQsIDB4M2ZjZDJmODcsIDB4
OWE4Y2JkZjksCisgIDB4ZWU3Y2Q5OTAsIDB4NGIzZDRiZWUsIDB4YTExMzhiOWQsIDB4MDQ1MjE5
ZTMsCisgIDB4NDhmMzQzNGYsIDB4ZWRiMmQxMzEsIDB4MDc5YzExNDIsIDB4YTJkZDgzM2MsCisg
IDB4ZDYyZGU3NTUsIDB4NzM2Yzc1MmIsIDB4OTk0MmI1NTgsIDB4M2MwMzI3MjYsCisgIDB4ZTE0
NGZiMTQsIDB4NDQwNTY5NmEsIDB4YWUyYmE5MTksIDB4MGI2YTNiNjcsCisgIDB4N2Y5YTVmMGUs
IDB4ZGFkYmNkNzAsIDB4MzBmNTBkMDMsIDB4OTViNDlmN2QsCisgIDB4ZDkxNWM1ZDEsIDB4N2M1
NDU3YWYsIDB4OTY3YTk3ZGMsIDB4MzMzYjA1YTIsCisgIDB4NDdjYjYxY2IsIDB4ZTI4YWYzYjUs
IDB4MDhhNDMzYzYsIDB4YWRlNWExYjgsCisgIDB4OTFlNjg2OWUsIDB4MzRhNzE0ZTAsIDB4ZGU4
OWQ0OTMsIDB4N2JjODQ2ZWQsCisgIDB4MGYzODIyODQsIDB4YWE3OWIwZmEsIDB4NDA1NzcwODks
IDB4ZTUxNmUyZjcsCisgIDB4YTliN2I4NWIsIDB4MGNmNjJhMjUsIDB4ZTZkOGVhNTYsIDB4NDM5
OTc4MjgsCisgIDB4Mzc2OTFjNDEsIDB4OTIyODhlM2YsIDB4NzgwNjRlNGMsIDB4ZGQ0N2RjMzIs
CisgIDB4Yzc2NTgwZDksIDB4NjIyNDEyYTcsIDB4ODgwYWQyZDQsIDB4MmQ0YjQwYWEsCisgIDB4
NTliYjI0YzMsIDB4ZmNmYWI2YmQsIDB4MTZkNDc2Y2UsIDB4YjM5NWU0YjAsCisgIDB4ZmYzNGJl
MWMsIDB4NWE3NTJjNjIsIDB4YjA1YmVjMTEsIDB4MTUxYTdlNmYsCisgIDB4NjFlYTFhMDYsIDB4
YzRhYjg4NzgsIDB4MmU4NTQ4MGIsIDB4OGJjNGRhNzUsCisgIDB4YjdjN2ZkNTMsIDB4MTI4NjZm
MmQsIDB4ZjhhOGFmNWUsIDB4NWRlOTNkMjAsCisgIDB4MjkxOTU5NDksIDB4OGM1OGNiMzcsIDB4
NjY3NjBiNDQsIDB4YzMzNzk5M2EsCisgIDB4OGY5NmMzOTYsIDB4MmFkNzUxZTgsIDB4YzBmOTkx
OWIsIDB4NjViODAzZTUsCisgIDB4MTE0ODY3OGMsIDB4YjQwOWY1ZjIsIDB4NWUyNzM1ODEsIDB4
ZmI2NmE3ZmYsCisgIDB4MjYyMTdiY2QsIDB4ODM2MGU5YjMsIDB4Njk0ZTI5YzAsIDB4Y2MwZmJi
YmUsCisgIDB4YjhmZmRmZDcsIDB4MWRiZTRkYTksIDB4Zjc5MDhkZGEsIDB4NTJkMTFmYTQsCisg
IDB4MWU3MDQ1MDgsIDB4YmIzMWQ3NzYsIDB4NTExZjE3MDUsIDB4ZjQ1ZTg1N2IsCisgIDB4ODBh
ZWUxMTIsIDB4MjVlZjczNmMsIDB4Y2ZjMWIzMWYsIDB4NmE4MDIxNjEsCisgIDB4NTY4MzA2NDcs
IDB4ZjNjMjk0MzksIDB4MTllYzU0NGEsIDB4YmNhZGM2MzQsCisgIDB4Yzg1ZGEyNWQsIDB4NmQx
YzMwMjMsIDB4ODczMmYwNTAsIDB4MjI3MzYyMmUsCisgIDB4NmVkMjM4ODIsIDB4Y2I5M2FhZmMs
IDB4MjFiZDZhOGYsIDB4ODRmY2Y4ZjEsCisgIDB4ZjAwYzljOTgsIDB4NTU0ZDBlZTYsIDB4YmY2
M2NlOTUsIDB4MWEyMjVjZWIsCisgIDB4OGIyNzc3NDMsIDB4MmU2NmU1M2QsIDB4YzQ0ODI1NGUs
IDB4NjEwOWI3MzAsCisgIDB4MTVmOWQzNTksIDB4YjBiODQxMjcsIDB4NWE5NjgxNTQsIDB4ZmZk
NzEzMmEsCisgIDB4YjM3NjQ5ODYsIDB4MTYzN2RiZjgsIDB4ZmMxOTFiOGIsIDB4NTk1ODg5ZjUs
CisgIDB4MmRhOGVkOWMsIDB4ODhlOTdmZTIsIDB4NjJjN2JmOTEsIDB4Yzc4NjJkZWYsCisgIDB4
ZmI4NTBhYzksIDB4NWVjNDk4YjcsIDB4YjRlYTU4YzQsIDB4MTFhYmNhYmEsCisgIDB4NjU1YmFl
ZDMsIDB4YzAxYTNjYWQsIDB4MmEzNGZjZGUsIDB4OGY3NTZlYTAsCisgIDB4YzNkNDM0MGMsIDB4
NjY5NWE2NzIsIDB4OGNiYjY2MDEsIDB4MjlmYWY0N2YsCisgIDB4NWQwYTkwMTYsIDB4Zjg0YjAy
NjgsIDB4MTI2NWMyMWIsIDB4YjcyNDUwNjUsCisgIDB4NmE2MzhjNTcsIDB4Y2YyMjFlMjksIDB4
MjUwY2RlNWEsIDB4ODA0ZDRjMjQsCisgIDB4ZjRiZDI4NGQsIDB4NTFmY2JhMzMsIDB4YmJkMjdh
NDAsIDB4MWU5M2U4M2UsCisgIDB4NTIzMmIyOTIsIDB4Zjc3MzIwZWMsIDB4MWQ1ZGUwOWYsIDB4
YjgxYzcyZTEsCisgIDB4Y2NlYzE2ODgsIDB4NjlhZDg0ZjYsIDB4ODM4MzQ0ODUsIDB4MjZjMmQ2
ZmIsCisgIDB4MWFjMWYxZGQsIDB4YmY4MDYzYTMsIDB4NTVhZWEzZDAsIDB4ZjBlZjMxYWUsCisg
IDB4ODQxZjU1YzcsIDB4MjE1ZWM3YjksIDB4Y2I3MDA3Y2EsIDB4NmUzMTk1YjQsCisgIDB4MjI5
MGNmMTgsIDB4ODdkMTVkNjYsIDB4NmRmZjlkMTUsIDB4YzhiZTBmNmIsCisgIDB4YmM0ZTZiMDIs
IDB4MTkwZmY5N2MsIDB4ZjMyMTM5MGYsIDB4NTY2MGFiNzEsCisgIDB4NGM0MmY3OWEsIDB4ZTkw
MzY1ZTQsIDB4MDMyZGE1OTcsIDB4YTY2YzM3ZTksCisgIDB4ZDI5YzUzODAsIDB4NzdkZGMxZmUs
IDB4OWRmMzAxOGQsIDB4MzhiMjkzZjMsCisgIDB4NzQxM2M5NWYsIDB4ZDE1MjViMjEsIDB4M2I3
YzliNTIsIDB4OWUzZDA5MmMsCisgIDB4ZWFjZDZkNDUsIDB4NGY4Y2ZmM2IsIDB4YTVhMjNmNDgs
IDB4MDBlM2FkMzYsCisgIDB4M2NlMDhhMTAsIDB4OTlhMTE4NmUsIDB4NzM4ZmQ4MWQsIDB4ZDZj
ZTRhNjMsCisgIDB4YTIzZTJlMGEsIDB4MDc3ZmJjNzQsIDB4ZWQ1MTdjMDcsIDB4NDgxMGVlNzks
CisgIDB4MDRiMWI0ZDUsIDB4YTFmMDI2YWIsIDB4NGJkZWU2ZDgsIDB4ZWU5Zjc0YTYsCisgIDB4
OWE2ZjEwY2YsIDB4M2YyZTgyYjEsIDB4ZDUwMDQyYzIsIDB4NzA0MWQwYmMsCisgIDB4YWQwNjBj
OGUsIDB4MDg0NzllZjAsIDB4ZTI2OTVlODMsIDB4NDcyOGNjZmQsCisgIDB4MzNkOGE4OTQsIDB4
OTY5OTNhZWEsIDB4N2NiN2ZhOTksIDB4ZDlmNjY4ZTcsCisgIDB4OTU1NzMyNGIsIDB4MzAxNmEw
MzUsIDB4ZGEzODYwNDYsIDB4N2Y3OWYyMzgsCisgIDB4MGI4OTk2NTEsIDB4YWVjODA0MmYsIDB4
NDRlNmM0NWMsIDB4ZTFhNzU2MjIsCisgIDB4ZGRhNDcxMDQsIDB4NzhlNWUzN2EsIDB4OTJjYjIz
MDksIDB4Mzc4YWIxNzcsCisgIDB4NDM3YWQ1MWUsIDB4ZTYzYjQ3NjAsIDB4MGMxNTg3MTMsIDB4
YTk1NDE1NmQsCisgIDB4ZTVmNTRmYzEsIDB4NDBiNGRkYmYsIDB4YWE5YTFkY2MsIDB4MGZkYjhm
YjIsCisgIDB4N2IyYmViZGIsIDB4ZGU2YTc5YTUsIDB4MzQ0NGI5ZDYsIDB4OTEwNTJiYTgKK307
CitzdGF0aWMgY29uc3QgdWludDMyX3QgdGFibGUzX1syNTZdID0geworICAweDAwMDAwMDAwLCAw
eGRkNDVhYWI4LCAweGJmNjcyMzgxLCAweDYyMjI4OTM5LAorICAweDdiMjIzMWYzLCAweGE2Njc5
YjRiLCAweGM0NDUxMjcyLCAweDE5MDBiOGNhLAorICAweGY2NDQ2M2U2LCAweDJiMDFjOTVlLCAw
eDQ5MjM0MDY3LCAweDk0NjZlYWRmLAorICAweDhkNjY1MjE1LCAweDUwMjNmOGFkLCAweDMyMDE3
MTk0LCAweGVmNDRkYjJjLAorICAweGU5NjRiMTNkLCAweDM0MjExYjg1LCAweDU2MDM5MmJjLCAw
eDhiNDYzODA0LAorICAweDkyNDY4MGNlLCAweDRmMDMyYTc2LCAweDJkMjFhMzRmLCAweGYwNjQw
OWY3LAorICAweDFmMjBkMmRiLCAweGMyNjU3ODYzLCAweGEwNDdmMTVhLCAweDdkMDI1YmUyLAor
ICAweDY0MDJlMzI4LCAweGI5NDc0OTkwLCAweGRiNjVjMGE5LCAweDA2MjA2YTExLAorICAweGQ3
MjUxNDhiLCAweDBhNjBiZTMzLCAweDY4NDIzNzBhLCAweGI1MDc5ZGIyLAorICAweGFjMDcyNTc4
LCAweDcxNDI4ZmMwLCAweDEzNjAwNmY5LCAweGNlMjVhYzQxLAorICAweDIxNjE3NzZkLCAweGZj
MjRkZGQ1LCAweDllMDY1NGVjLCAweDQzNDNmZTU0LAorICAweDVhNDM0NjllLCAweDg3MDZlYzI2
LCAweGU1MjQ2NTFmLCAweDM4NjFjZmE3LAorICAweDNlNDFhNWI2LCAweGUzMDQwZjBlLCAweDgx
MjY4NjM3LCAweDVjNjMyYzhmLAorICAweDQ1NjM5NDQ1LCAweDk4MjYzZWZkLCAweGZhMDRiN2M0
LCAweDI3NDExZDdjLAorICAweGM4MDVjNjUwLCAweDE1NDA2Y2U4LCAweDc3NjJlNWQxLCAweGFh
Mjc0ZjY5LAorICAweGIzMjdmN2EzLCAweDZlNjI1ZDFiLCAweDBjNDBkNDIyLCAweGQxMDU3ZTlh
LAorICAweGFiYTY1ZmU3LCAweDc2ZTNmNTVmLCAweDE0YzE3YzY2LCAweGM5ODRkNmRlLAorICAw
eGQwODQ2ZTE0LCAweDBkYzFjNGFjLCAweDZmZTM0ZDk1LCAweGIyYTZlNzJkLAorICAweDVkZTIz
YzAxLCAweDgwYTc5NmI5LCAweGUyODUxZjgwLCAweDNmYzBiNTM4LAorICAweDI2YzAwZGYyLCAw
eGZiODVhNzRhLCAweDk5YTcyZTczLCAweDQ0ZTI4NGNiLAorICAweDQyYzJlZWRhLCAweDlmODc0
NDYyLCAweGZkYTVjZDViLCAweDIwZTA2N2UzLAorICAweDM5ZTBkZjI5LCAweGU0YTU3NTkxLCAw
eDg2ODdmY2E4LCAweDViYzI1NjEwLAorICAweGI0ODY4ZDNjLCAweDY5YzMyNzg0LCAweDBiZTFh
ZWJkLCAweGQ2YTQwNDA1LAorICAweGNmYTRiY2NmLCAweDEyZTExNjc3LCAweDcwYzM5ZjRlLCAw
eGFkODYzNWY2LAorICAweDdjODM0YjZjLCAweGExYzZlMWQ0LCAweGMzZTQ2OGVkLCAweDFlYTFj
MjU1LAorICAweDA3YTE3YTlmLCAweGRhZTRkMDI3LCAweGI4YzY1OTFlLCAweDY1ODNmM2E2LAor
ICAweDhhYzcyODhhLCAweDU3ODI4MjMyLCAweDM1YTAwYjBiLCAweGU4ZTVhMWIzLAorICAweGYx
ZTUxOTc5LCAweDJjYTBiM2MxLCAweDRlODIzYWY4LCAweDkzYzc5MDQwLAorICAweDk1ZTdmYTUx
LCAweDQ4YTI1MGU5LCAweDJhODBkOWQwLCAweGY3YzU3MzY4LAorICAweGVlYzVjYmEyLCAweDMz
ODA2MTFhLCAweDUxYTJlODIzLCAweDhjZTc0MjliLAorICAweDYzYTM5OWI3LCAweGJlZTYzMzBm
LCAweGRjYzRiYTM2LCAweDAxODExMDhlLAorICAweDE4ODFhODQ0LCAweGM1YzQwMmZjLCAweGE3
ZTY4YmM1LCAweDdhYTMyMTdkLAorICAweDUyYTBjOTNmLCAweDhmZTU2Mzg3LCAweGVkYzdlYWJl
LCAweDMwODI0MDA2LAorICAweDI5ODJmOGNjLCAweGY0Yzc1Mjc0LCAweDk2ZTVkYjRkLCAweDRi
YTA3MWY1LAorICAweGE0ZTRhYWQ5LCAweDc5YTEwMDYxLCAweDFiODM4OTU4LCAweGM2YzYyM2Uw
LAorICAweGRmYzY5YjJhLCAweDAyODMzMTkyLCAweDYwYTFiOGFiLCAweGJkZTQxMjEzLAorICAw
eGJiYzQ3ODAyLCAweDY2ODFkMmJhLCAweDA0YTM1YjgzLCAweGQ5ZTZmMTNiLAorICAweGMwZTY0
OWYxLCAweDFkYTNlMzQ5LCAweDdmODE2YTcwLCAweGEyYzRjMGM4LAorICAweDRkODAxYmU0LCAw
eDkwYzViMTVjLCAweGYyZTczODY1LCAweDJmYTI5MmRkLAorICAweDM2YTIyYTE3LCAweGViZTc4
MGFmLCAweDg5YzUwOTk2LCAweDU0ODBhMzJlLAorICAweDg1ODVkZGI0LCAweDU4YzA3NzBjLCAw
eDNhZTJmZTM1LCAweGU3YTc1NDhkLAorICAweGZlYTdlYzQ3LCAweDIzZTI0NmZmLCAweDQxYzBj
ZmM2LCAweDljODU2NTdlLAorICAweDczYzFiZTUyLCAweGFlODQxNGVhLCAweGNjYTY5ZGQzLCAw
eDExZTMzNzZiLAorICAweDA4ZTM4ZmExLCAweGQ1YTYyNTE5LCAweGI3ODRhYzIwLCAweDZhYzEw
Njk4LAorICAweDZjZTE2Yzg5LCAweGIxYTRjNjMxLCAweGQzODY0ZjA4LCAweDBlYzNlNWIwLAor
ICAweDE3YzM1ZDdhLCAweGNhODZmN2MyLCAweGE4YTQ3ZWZiLCAweDc1ZTFkNDQzLAorICAweDlh
YTUwZjZmLCAweDQ3ZTBhNWQ3LCAweDI1YzIyY2VlLCAweGY4ODc4NjU2LAorICAweGUxODczZTlj
LCAweDNjYzI5NDI0LCAweDVlZTAxZDFkLCAweDgzYTViN2E1LAorICAweGY5MDY5NmQ4LCAweDI0
NDMzYzYwLCAweDQ2NjFiNTU5LCAweDliMjQxZmUxLAorICAweDgyMjRhNzJiLCAweDVmNjEwZDkz
LCAweDNkNDM4NGFhLCAweGUwMDYyZTEyLAorICAweDBmNDJmNTNlLCAweGQyMDc1Zjg2LCAweGIw
MjVkNmJmLCAweDZkNjA3YzA3LAorICAweDc0NjBjNGNkLCAweGE5MjU2ZTc1LCAweGNiMDdlNzRj
LCAweDE2NDI0ZGY0LAorICAweDEwNjIyN2U1LCAweGNkMjc4ZDVkLCAweGFmMDUwNDY0LCAweDcy
NDBhZWRjLAorICAweDZiNDAxNjE2LCAweGI2MDViY2FlLCAweGQ0MjczNTk3LCAweDA5NjI5ZjJm
LAorICAweGU2MjY0NDAzLCAweDNiNjNlZWJiLCAweDU5NDE2NzgyLCAweDg0MDRjZDNhLAorICAw
eDlkMDQ3NWYwLCAweDQwNDFkZjQ4LCAweDIyNjM1NjcxLCAweGZmMjZmY2M5LAorICAweDJlMjM4
MjUzLCAweGYzNjYyOGViLCAweDkxNDRhMWQyLCAweDRjMDEwYjZhLAorICAweDU1MDFiM2EwLCAw
eDg4NDQxOTE4LCAweGVhNjY5MDIxLCAweDM3MjMzYTk5LAorICAweGQ4NjdlMWI1LCAweDA1MjI0
YjBkLCAweDY3MDBjMjM0LCAweGJhNDU2ODhjLAorICAweGEzNDVkMDQ2LCAweDdlMDA3YWZlLCAw
eDFjMjJmM2M3LCAweGMxNjc1OTdmLAorICAweGM3NDczMzZlLCAweDFhMDI5OWQ2LCAweDc4MjAx
MGVmLCAweGE1NjViYTU3LAorICAweGJjNjUwMjlkLCAweDYxMjBhODI1LCAweDAzMDIyMTFjLCAw
eGRlNDc4YmE0LAorICAweDMxMDM1MDg4LCAweGVjNDZmYTMwLCAweDhlNjQ3MzA5LCAweDUzMjFk
OWIxLAorICAweDRhMjE2MTdiLCAweDk3NjRjYmMzLCAweGY1NDY0MmZhLCAweDI4MDNlODQyCit9
OworCisvLyBVc2VkIHRvIGZldGNoIGEgbmF0dXJhbGx5LWFsaWduZWQgMzItYml0IHdvcmQgaW4g
bGl0dGxlIGVuZGlhbiBieXRlLW9yZGVyCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IExFX0xPQUQz
Mihjb25zdCB1aW50OF90ICpwKSB7CisgIHJldHVybiBEZWNvZGVGaXhlZDMyKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgY2hhcio+KHApKTsKK30KKwordWludDMyX3QgRXh0ZW5kKHVpbnQzMl90IGNy
YywgY29uc3QgY2hhciogYnVmLCBzaXplX3Qgc2l6ZSkgeworICBjb25zdCB1aW50OF90ICpwID0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90ICo+KGJ1Zik7CisgIGNvbnN0IHVpbnQ4X3Qg
KmUgPSBwICsgc2l6ZTsKKyAgdWludDMyX3QgbCA9IGNyYyBeIDB4ZmZmZmZmZmZ1OworCisjZGVm
aW5lIFNURVAxIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaW50IGMg
PSAobCAmIDB4ZmYpIF4gKnArKzsgICAgICAgICAgICAgICAgICBcCisgICAgbCA9IHRhYmxlMF9b
Y10gXiAobCA+PiA4KTsgICAgICAgICAgICAgICAgICBcCit9IHdoaWxlICgwKQorI2RlZmluZSBT
VEVQNCBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVpbnQzMl90IGMg
PSBsIF4gTEVfTE9BRDMyKHApOyAgICAgICAgICAgICAgXAorICAgIHAgKz0gNDsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGwgPSB0YWJsZTNfW2MgJiAweGZmXSBe
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB0YWJsZTJfWyhjID4+IDgpICYgMHhmZl0g
XiAgICAgICAgICAgICAgXAorICAgICAgICB0YWJsZTFfWyhjID4+IDE2KSAmIDB4ZmZdIF4gICAg
ICAgICAgICAgXAorICAgICAgICB0YWJsZTBfW2MgPj4gMjRdOyAgICAgICAgICAgICAgICAgICAg
ICAgXAorfSB3aGlsZSAoMCkKKworICAvLyBQb2ludCB4IGF0IGZpcnN0IDQtYnl0ZSBhbGlnbmVk
IGJ5dGUgaW4gc3RyaW5nLiAgVGhpcyBtaWdodCBiZQorICAvLyBqdXN0IHBhc3QgdGhlIGVuZCBv
ZiB0aGUgc3RyaW5nLgorICBjb25zdCB1aW50cHRyX3QgcHZhbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludHB0cl90PihwKTsKKyAgY29uc3QgdWludDhfdCogeCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdWludDhfdCo+KCgocHZhbCArIDMpID4+IDIpIDw8IDIpOworICBpZiAoeCA8PSBlKSB7Cisg
ICAgLy8gUHJvY2VzcyBieXRlcyB1bnRpbCBmaW5pc2hlZCBvciBwIGlzIDQtYnl0ZSBhbGlnbmVk
CisgICAgd2hpbGUgKHAgIT0geCkgeworICAgICAgU1RFUDE7CisgICAgfQorICB9CisgIC8vIFBy
b2Nlc3MgYnl0ZXMgMTYgYXQgYSB0aW1lCisgIHdoaWxlICgoZS1wKSA+PSAxNikgeworICAgIFNU
RVA0OyBTVEVQNDsgU1RFUDQ7IFNURVA0OworICB9CisgIC8vIFByb2Nlc3MgYnl0ZXMgNCBhdCBh
IHRpbWUKKyAgd2hpbGUgKChlLXApID49IDQpIHsKKyAgICBTVEVQNDsKKyAgfQorICAvLyBQcm9j
ZXNzIHRoZSBsYXN0IGZldyBieXRlcworICB3aGlsZSAocCAhPSBlKSB7CisgICAgU1RFUDE7Cisg
IH0KKyN1bmRlZiBTVEVQNAorI3VuZGVmIFNURVAxCisgIHJldHVybiBsIF4gMHhmZmZmZmZmZnU7
Cit9CisKK30gIC8vIG5hbWVzcGFjZSBjcmMzMmMKK30gIC8vIG5hbWVzcGFjZSBsZXZlbGRiCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvY3JjMzJjLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvY3JjMzJjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWQ3ZTVjMDc1
ZDg2ZDZjZjI1NTFjZmNkMGZkOWFjNWFkY2U2ZmMzOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9jcmMzMmMuaApAQCAtMCwwICsxLDQ1IEBACisvLyBD
b3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0
aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCisKKyNpZm5kZWYgU1RP
UkFHRV9MRVZFTERCX1VUSUxfQ1JDMzJDX0hfCisjZGVmaW5lIFNUT1JBR0VfTEVWRUxEQl9VVElM
X0NSQzMyQ19IXworCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisK
K25hbWVzcGFjZSBsZXZlbGRiIHsKK25hbWVzcGFjZSBjcmMzMmMgeworCisvLyBSZXR1cm4gdGhl
IGNyYzMyYyBvZiBjb25jYXQoQSwgZGF0YVswLG4tMV0pIHdoZXJlIGluaXRfY3JjIGlzIHRoZQor
Ly8gY3JjMzJjIG9mIHNvbWUgc3RyaW5nIEEuICBFeHRlbmQoKSBpcyBvZnRlbiB1c2VkIHRvIG1h
aW50YWluIHRoZQorLy8gY3JjMzJjIG9mIGEgc3RyZWFtIG9mIGRhdGEuCitleHRlcm4gdWludDMy
X3QgRXh0ZW5kKHVpbnQzMl90IGluaXRfY3JjLCBjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgbik7
CisKKy8vIFJldHVybiB0aGUgY3JjMzJjIG9mIGRhdGFbMCxuLTFdCitpbmxpbmUgdWludDMyX3Qg
VmFsdWUoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IG4pIHsKKyAgcmV0dXJuIEV4dGVuZCgwLCBk
YXRhLCBuKTsKK30KKworc3RhdGljIGNvbnN0IHVpbnQzMl90IGtNYXNrRGVsdGEgPSAweGEyODJl
YWQ4dWw7CisKKy8vIFJldHVybiBhIG1hc2tlZCByZXByZXNlbnRhdGlvbiBvZiBjcmMuCisvLwor
Ly8gTW90aXZhdGlvbjogaXQgaXMgcHJvYmxlbWF0aWMgdG8gY29tcHV0ZSB0aGUgQ1JDIG9mIGEg
c3RyaW5nIHRoYXQKKy8vIGNvbnRhaW5zIGVtYmVkZGVkIENSQ3MuICBUaGVyZWZvcmUgd2UgcmVj
b21tZW5kIHRoYXQgQ1JDcyBzdG9yZWQKKy8vIHNvbWV3aGVyZSAoZS5nLiwgaW4gZmlsZXMpIHNo
b3VsZCBiZSBtYXNrZWQgYmVmb3JlIGJlaW5nIHN0b3JlZC4KK2lubGluZSB1aW50MzJfdCBNYXNr
KHVpbnQzMl90IGNyYykgeworICAvLyBSb3RhdGUgcmlnaHQgYnkgMTUgYml0cyBhbmQgYWRkIGEg
Y29uc3RhbnQuCisgIHJldHVybiAoKGNyYyA+PiAxNSkgfCAoY3JjIDw8IDE3KSkgKyBrTWFza0Rl
bHRhOworfQorCisvLyBSZXR1cm4gdGhlIGNyYyB3aG9zZSBtYXNrZWQgcmVwcmVzZW50YXRpb24g
aXMgbWFza2VkX2NyYy4KK2lubGluZSB1aW50MzJfdCBVbm1hc2sodWludDMyX3QgbWFza2VkX2Ny
YykgeworICB1aW50MzJfdCByb3QgPSBtYXNrZWRfY3JjIC0ga01hc2tEZWx0YTsKKyAgcmV0dXJu
ICgocm90ID4+IDE3KSB8IChyb3QgPDwgMTUpKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIGNyYzMy
YworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKKworI2VuZGlmICAvLyBTVE9SQUdFX0xFVkVMREJf
VVRJTF9DUkMzMkNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRp
bC9jcmMzMmNfdGVzdC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9jcmMzMmNf
dGVzdC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi40Yjk1N2VlMTIwYzhmODA1YzAyNDBkM2Q5MGVhZjE2YTc1OTQz
N2JhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2Ny
YzMyY190ZXN0LmNjCkBAIC0wLDAgKzEsNzIgQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUg
TGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5h
bWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2luY2x1ZGUgInV0aWwvY3JjMzJjLmgiCisjaW5jbHVk
ZSAidXRpbC90ZXN0aGFybmVzcy5oIgorCituYW1lc3BhY2UgbGV2ZWxkYiB7CituYW1lc3BhY2Ug
Y3JjMzJjIHsKKworY2xhc3MgQ1JDIHsgfTsKKworVEVTVChDUkMsIFN0YW5kYXJkUmVzdWx0cykg
eworICAvLyBGcm9tIHJmYzM3MjAgc2VjdGlvbiBCLjQuCisgIGNoYXIgYnVmWzMyXTsKKworICBt
ZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7CisgIEFTU0VSVF9FUSgweDhhOTEzNmFhLCBWYWx1
ZShidWYsIHNpemVvZihidWYpKSk7CisKKyAgbWVtc2V0KGJ1ZiwgMHhmZiwgc2l6ZW9mKGJ1Zikp
OworICBBU1NFUlRfRVEoMHg2MmE4YWI0MywgVmFsdWUoYnVmLCBzaXplb2YoYnVmKSkpOworCisg
IGZvciAoaW50IGkgPSAwOyBpIDwgMzI7IGkrKykgeworICAgIGJ1ZltpXSA9IGk7CisgIH0KKyAg
QVNTRVJUX0VRKDB4NDZkZDc5NGUsIFZhbHVlKGJ1Ziwgc2l6ZW9mKGJ1ZikpKTsKKworICBmb3Ig
KGludCBpID0gMDsgaSA8IDMyOyBpKyspIHsKKyAgICBidWZbaV0gPSAzMSAtIGk7CisgIH0KKyAg
QVNTRVJUX0VRKDB4MTEzZmRiNWMsIFZhbHVlKGJ1Ziwgc2l6ZW9mKGJ1ZikpKTsKKworICB1bnNp
Z25lZCBjaGFyIGRhdGFbNDhdID0geworICAgIDB4MDEsIDB4YzAsIDB4MDAsIDB4MDAsCisgICAg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAg
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgxNCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAg
ICAweDAwLCAweDAwLCAweDA0LCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsCisg
ICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKKyAgICAweDI4LCAweDAwLCAweDAwLCAweDAwLAor
ICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwK
KyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICB9OworICBBU1NFUlRfRVEoMHhkOTk2M2E1
NiwgVmFsdWUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZGF0YSksIHNpemVvZihkYXRhKSkpOwor
fQorCitURVNUKENSQywgVmFsdWVzKSB7CisgIEFTU0VSVF9ORShWYWx1ZSgiYSIsIDEpLCBWYWx1
ZSgiZm9vIiwgMykpOworfQorCitURVNUKENSQywgRXh0ZW5kKSB7CisgIEFTU0VSVF9FUShWYWx1
ZSgiaGVsbG8gd29ybGQiLCAxMSksCisgICAgICAgICAgICBFeHRlbmQoVmFsdWUoImhlbGxvICIs
IDYpLCAid29ybGQiLCA1KSk7Cit9CisKK1RFU1QoQ1JDLCBNYXNrKSB7CisgIHVpbnQzMl90IGNy
YyA9IFZhbHVlKCJmb28iLCAzKTsKKyAgQVNTRVJUX05FKGNyYywgTWFzayhjcmMpKTsKKyAgQVNT
RVJUX05FKGNyYywgTWFzayhNYXNrKGNyYykpKTsKKyAgQVNTRVJUX0VRKGNyYywgVW5tYXNrKE1h
c2soY3JjKSkpOworICBBU1NFUlRfRVEoY3JjLCBVbm1hc2soVW5tYXNrKE1hc2soTWFzayhjcmMp
KSkpKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIGNyYzMyYworfSAgLy8gbmFtZXNwYWNlIGxldmVs
ZGIKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KSB7CisgIHJldHVybiBsZXZlbGRi
Ojp0ZXN0OjpSdW5BbGxUZXN0cygpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGV2ZWxkYi91dGlsL2Vudi5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9lbnYu
Y2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYzI2MDBlOTY0YTI2MGM4N2YyMmFmYzhjNWEzZTc3ODhiNGM3ZTM1MAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9lbnYuY2MK
QEAgLTAsMCArMSw5NiBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJp
YnV0b3JzLgorCisjaW5jbHVkZSAibGV2ZWxkYi9lbnYuaCIKKworbmFtZXNwYWNlIGxldmVsZGIg
eworCitFbnY6On5FbnYoKSB7Cit9CisKK1NlcXVlbnRpYWxGaWxlOjp+U2VxdWVudGlhbEZpbGUo
KSB7Cit9CisKK1JhbmRvbUFjY2Vzc0ZpbGU6On5SYW5kb21BY2Nlc3NGaWxlKCkgeworfQorCitX
cml0YWJsZUZpbGU6On5Xcml0YWJsZUZpbGUoKSB7Cit9CisKK0xvZ2dlcjo6fkxvZ2dlcigpIHsK
K30KKworRmlsZUxvY2s6On5GaWxlTG9jaygpIHsKK30KKwordm9pZCBMb2coTG9nZ2VyKiBpbmZv
X2xvZywgY29uc3QgY2hhciogZm9ybWF0LCAuLi4pIHsKKyAgaWYgKGluZm9fbG9nICE9IE5VTEwp
IHsKKyAgICB2YV9saXN0IGFwOworICAgIHZhX3N0YXJ0KGFwLCBmb3JtYXQpOworICAgIGluZm9f
bG9nLT5Mb2d2KGZvcm1hdCwgYXApOworICAgIHZhX2VuZChhcCk7CisgIH0KK30KKworc3RhdGlj
IFN0YXR1cyBEb1dyaXRlU3RyaW5nVG9GaWxlKEVudiogZW52LCBjb25zdCBTbGljZSYgZGF0YSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZm5h
bWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzaG91bGRfc3luYykg
eworICBXcml0YWJsZUZpbGUqIGZpbGU7CisgIFN0YXR1cyBzID0gZW52LT5OZXdXcml0YWJsZUZp
bGUoZm5hbWUsICZmaWxlKTsKKyAgaWYgKCFzLm9rKCkpIHsKKyAgICByZXR1cm4gczsKKyAgfQor
ICBzID0gZmlsZS0+QXBwZW5kKGRhdGEpOworICBpZiAocy5vaygpICYmIHNob3VsZF9zeW5jKSB7
CisgICAgcyA9IGZpbGUtPlN5bmMoKTsKKyAgfQorICBpZiAocy5vaygpKSB7CisgICAgcyA9IGZp
bGUtPkNsb3NlKCk7CisgIH0KKyAgZGVsZXRlIGZpbGU7ICAvLyBXaWxsIGF1dG8tY2xvc2UgaWYg
d2UgZGlkIG5vdCBjbG9zZSBhYm92ZQorICBpZiAoIXMub2soKSkgeworICAgIGVudi0+RGVsZXRl
RmlsZShmbmFtZSk7CisgIH0KKyAgcmV0dXJuIHM7Cit9CisKK1N0YXR1cyBXcml0ZVN0cmluZ1Rv
RmlsZShFbnYqIGVudiwgY29uc3QgU2xpY2UmIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZuYW1lKSB7CisgIHJldHVybiBEb1dyaXRlU3RyaW5nVG9G
aWxlKGVudiwgZGF0YSwgZm5hbWUsIGZhbHNlKTsKK30KKworU3RhdHVzIFdyaXRlU3RyaW5nVG9G
aWxlU3luYyhFbnYqIGVudiwgY29uc3QgU2xpY2UmIGRhdGEsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmbmFtZSkgeworICByZXR1cm4gRG9Xcml0ZVN0
cmluZ1RvRmlsZShlbnYsIGRhdGEsIGZuYW1lLCB0cnVlKTsKK30KKworU3RhdHVzIFJlYWRGaWxl
VG9TdHJpbmcoRW52KiBlbnYsIGNvbnN0IHN0ZDo6c3RyaW5nJiBmbmFtZSwgc3RkOjpzdHJpbmcq
IGRhdGEpIHsKKyAgZGF0YS0+Y2xlYXIoKTsKKyAgU2VxdWVudGlhbEZpbGUqIGZpbGU7CisgIFN0
YXR1cyBzID0gZW52LT5OZXdTZXF1ZW50aWFsRmlsZShmbmFtZSwgJmZpbGUpOworICBpZiAoIXMu
b2soKSkgeworICAgIHJldHVybiBzOworICB9CisgIHN0YXRpYyBjb25zdCBpbnQga0J1ZmZlclNp
emUgPSA4MTkyOworICBjaGFyKiBzcGFjZSA9IG5ldyBjaGFyW2tCdWZmZXJTaXplXTsKKyAgd2hp
bGUgKHRydWUpIHsKKyAgICBTbGljZSBmcmFnbWVudDsKKyAgICBzID0gZmlsZS0+UmVhZChrQnVm
ZmVyU2l6ZSwgJmZyYWdtZW50LCBzcGFjZSk7CisgICAgaWYgKCFzLm9rKCkpIHsKKyAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBkYXRhLT5hcHBlbmQoZnJhZ21lbnQuZGF0YSgpLCBmcmFnbWVudC5z
aXplKCkpOworICAgIGlmIChmcmFnbWVudC5lbXB0eSgpKSB7CisgICAgICBicmVhazsKKyAgICB9
CisgIH0KKyAgZGVsZXRlW10gc3BhY2U7CisgIGRlbGV0ZSBmaWxlOworICByZXR1cm4gczsKK30K
KworRW52V3JhcHBlcjo6fkVudldyYXBwZXIoKSB7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBsZXZl
bGRiCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvZW52X3Bvc2l4
LmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2Vudl9wb3NpeC5jYwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi43OGUwOWM5NWM5OTkwMjM4M2IxNTJhNjMwZDUyMmY0NjIwZjU2MjIyCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2Vudl9wb3NpeC5jYwpAQCAt
MCwwICsxLDY5OCBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0
b3JzLgorCisjaW5jbHVkZSA8ZGVxdWU+CisjaW5jbHVkZSA8c2V0PgorI2luY2x1ZGUgPGRpcmVu
dC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxw
dGhyZWFkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNs
dWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2luY2x1ZGUgPHN5cy9zdGF0
Lmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNs
dWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaWYgZGVmaW5lZChMRVZFTERCX1BM
QVRGT1JNX0FORFJPSUQpCisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgorI2luY2x1ZGUg
ImxldmVsZGIvZW52LmgiCisjaW5jbHVkZSAibGV2ZWxkYi9zbGljZS5oIgorI2luY2x1ZGUgInBv
cnQvcG9ydC5oIgorI2luY2x1ZGUgInV0aWwvbG9nZ2luZy5oIgorI2luY2x1ZGUgInV0aWwvbXV0
ZXhsb2NrLmgiCisjaW5jbHVkZSAidXRpbC9wb3NpeF9sb2dnZXIuaCIKKworbmFtZXNwYWNlIGxl
dmVsZGIgeworCituYW1lc3BhY2UgeworCitzdGF0aWMgU3RhdHVzIElPRXJyb3IoY29uc3Qgc3Rk
OjpzdHJpbmcmIGNvbnRleHQsIGludCBlcnJfbnVtYmVyKSB7CisgIHJldHVybiBTdGF0dXM6OklP
RXJyb3IoY29udGV4dCwgc3RyZXJyb3IoZXJyX251bWJlcikpOworfQorCitjbGFzcyBQb3NpeFNl
cXVlbnRpYWxGaWxlOiBwdWJsaWMgU2VxdWVudGlhbEZpbGUgeworIHByaXZhdGU6CisgIHN0ZDo6
c3RyaW5nIGZpbGVuYW1lXzsKKyAgRklMRSogZmlsZV87CisKKyBwdWJsaWM6CisgIFBvc2l4U2Vx
dWVudGlhbEZpbGUoY29uc3Qgc3RkOjpzdHJpbmcmIGZuYW1lLCBGSUxFKiBmKQorICAgICAgOiBm
aWxlbmFtZV8oZm5hbWUpLCBmaWxlXyhmKSB7IH0KKyAgdmlydHVhbCB+UG9zaXhTZXF1ZW50aWFs
RmlsZSgpIHsgZmNsb3NlKGZpbGVfKTsgfQorCisgIHZpcnR1YWwgU3RhdHVzIFJlYWQoc2l6ZV90
IG4sIFNsaWNlKiByZXN1bHQsIGNoYXIqIHNjcmF0Y2gpIHsKKyAgICBTdGF0dXMgczsKKyAgICBz
aXplX3QgciA9IGZyZWFkX3VubG9ja2VkKHNjcmF0Y2gsIDEsIG4sIGZpbGVfKTsKKyAgICAqcmVz
dWx0ID0gU2xpY2Uoc2NyYXRjaCwgcik7CisgICAgaWYgKHIgPCBuKSB7CisgICAgICBpZiAoZmVv
ZihmaWxlXykpIHsKKyAgICAgICAgLy8gV2UgbGVhdmUgc3RhdHVzIGFzIG9rIGlmIHdlIGhpdCB0
aGUgZW5kIG9mIHRoZSBmaWxlCisgICAgICB9IGVsc2UgeworICAgICAgICAvLyBBIHBhcnRpYWwg
cmVhZCB3aXRoIGFuIGVycm9yOiByZXR1cm4gYSBub24tb2sgc3RhdHVzCisgICAgICAgIHMgPSBJ
T0Vycm9yKGZpbGVuYW1lXywgZXJybm8pOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gczsK
KyAgfQorCisgIHZpcnR1YWwgU3RhdHVzIFNraXAodWludDY0X3QgbikgeworICAgIGlmIChmc2Vl
ayhmaWxlXywgbiwgU0VFS19DVVIpKSB7CisgICAgICByZXR1cm4gSU9FcnJvcihmaWxlbmFtZV8s
IGVycm5vKTsKKyAgICB9CisgICAgcmV0dXJuIFN0YXR1czo6T0soKTsKKyAgfQorfTsKKworLy8g
cHJlYWQoKSBiYXNlZCByYW5kb20tYWNjZXNzCitjbGFzcyBQb3NpeFJhbmRvbUFjY2Vzc0ZpbGU6
IHB1YmxpYyBSYW5kb21BY2Nlc3NGaWxlIHsKKyBwcml2YXRlOgorICBzdGQ6OnN0cmluZyBmaWxl
bmFtZV87CisgIGludCBmZF87CisKKyBwdWJsaWM6CisgIFBvc2l4UmFuZG9tQWNjZXNzRmlsZShj
b25zdCBzdGQ6OnN0cmluZyYgZm5hbWUsIGludCBmZCkKKyAgICAgIDogZmlsZW5hbWVfKGZuYW1l
KSwgZmRfKGZkKSB7IH0KKyAgdmlydHVhbCB+UG9zaXhSYW5kb21BY2Nlc3NGaWxlKCkgeyBjbG9z
ZShmZF8pOyB9CisKKyAgdmlydHVhbCBTdGF0dXMgUmVhZCh1aW50NjRfdCBvZmZzZXQsIHNpemVf
dCBuLCBTbGljZSogcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIHNjcmF0Y2gp
IGNvbnN0IHsKKyAgICBTdGF0dXMgczsKKyAgICBzc2l6ZV90IHIgPSBwcmVhZChmZF8sIHNjcmF0
Y2gsIG4sIHN0YXRpY19jYXN0PG9mZl90PihvZmZzZXQpKTsKKyAgICAqcmVzdWx0ID0gU2xpY2Uo
c2NyYXRjaCwgKHIgPCAwKSA/IDAgOiByKTsKKyAgICBpZiAociA8IDApIHsKKyAgICAgIC8vIEFu
IGVycm9yOiByZXR1cm4gYSBub24tb2sgc3RhdHVzCisgICAgICBzID0gSU9FcnJvcihmaWxlbmFt
ZV8sIGVycm5vKTsKKyAgICB9CisgICAgcmV0dXJuIHM7CisgIH0KK307CisKKy8vIEhlbHBlciBj
bGFzcyB0byBsaW1pdCBtbWFwIGZpbGUgdXNhZ2Ugc28gdGhhdCB3ZSBkbyBub3QgZW5kIHVwCisv
LyBydW5uaW5nIG91dCB2aXJ0dWFsIG1lbW9yeSBvciBydW5uaW5nIGludG8ga2VybmVsIHBlcmZv
cm1hbmNlCisvLyBwcm9ibGVtcyBmb3IgdmVyeSBsYXJnZSBkYXRhYmFzZXMuCitjbGFzcyBNbWFw
TGltaXRlciB7CisgcHVibGljOgorICAvLyBVcCB0byAxMDAwIG1tYXBzIGZvciA2NC1iaXQgYmlu
YXJpZXM7IG5vbmUgZm9yIHNtYWxsZXIgcG9pbnRlciBzaXplcy4KKyAgTW1hcExpbWl0ZXIoKSB7
CisgICAgU2V0QWxsb3dlZChzaXplb2Yodm9pZCopID49IDggPyAxMDAwIDogMCk7CisgIH0KKwor
ICAvLyBJZiBhbm90aGVyIG1tYXAgc2xvdCBpcyBhdmFpbGFibGUsIGFjcXVpcmUgaXQgYW5kIHJl
dHVybiB0cnVlLgorICAvLyBFbHNlIHJldHVybiBmYWxzZS4KKyAgYm9vbCBBY3F1aXJlKCkgewor
ICAgIGlmIChHZXRBbGxvd2VkKCkgPD0gMCkgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICBNdXRleExvY2sgbCgmbXVfKTsKKyAgICBpbnRwdHJfdCB4ID0gR2V0QWxsb3dlZCgpOwor
ICAgIGlmICh4IDw9IDApIHsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGVsc2UgeworICAg
ICAgU2V0QWxsb3dlZCh4IC0gMSk7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgIH0KKwor
ICAvLyBSZWxlYXNlIGEgc2xvdCBhY3F1aXJlZCBieSBhIHByZXZpb3VzIGNhbGwgdG8gQWNxdWly
ZSgpIHRoYXQgcmV0dXJuZWQgdHJ1ZS4KKyAgdm9pZCBSZWxlYXNlKCkgeworICAgIE11dGV4TG9j
ayBsKCZtdV8pOworICAgIFNldEFsbG93ZWQoR2V0QWxsb3dlZCgpICsgMSk7CisgIH0KKworIHBy
aXZhdGU6CisgIHBvcnQ6Ok11dGV4IG11XzsKKyAgcG9ydDo6QXRvbWljUG9pbnRlciBhbGxvd2Vk
XzsKKworICBpbnRwdHJfdCBHZXRBbGxvd2VkKCkgY29uc3QgeworICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PGludHB0cl90PihhbGxvd2VkXy5BY3F1aXJlX0xvYWQoKSk7CisgIH0KKworICAv
LyBSRVFVSVJFUzogbXVfIG11c3QgYmUgaGVsZAorICB2b2lkIFNldEFsbG93ZWQoaW50cHRyX3Qg
dikgeworICAgIGFsbG93ZWRfLlJlbGVhc2VfU3RvcmUocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
dikpOworICB9CisKKyAgTW1hcExpbWl0ZXIoY29uc3QgTW1hcExpbWl0ZXImKTsKKyAgdm9pZCBv
cGVyYXRvcj0oY29uc3QgTW1hcExpbWl0ZXImKTsKK307CisKKy8vIG1tYXAoKSBiYXNlZCByYW5k
b20tYWNjZXNzCitjbGFzcyBQb3NpeE1tYXBSZWFkYWJsZUZpbGU6IHB1YmxpYyBSYW5kb21BY2Nl
c3NGaWxlIHsKKyBwcml2YXRlOgorICBzdGQ6OnN0cmluZyBmaWxlbmFtZV87CisgIHZvaWQqIG1t
YXBwZWRfcmVnaW9uXzsKKyAgc2l6ZV90IGxlbmd0aF87CisgIE1tYXBMaW1pdGVyKiBsaW1pdGVy
XzsKKworIHB1YmxpYzoKKyAgLy8gYmFzZVswLGxlbmd0aC0xXSBjb250YWlucyB0aGUgbW1hcHBl
ZCBjb250ZW50cyBvZiB0aGUgZmlsZS4KKyAgUG9zaXhNbWFwUmVhZGFibGVGaWxlKGNvbnN0IHN0
ZDo6c3RyaW5nJiBmbmFtZSwgdm9pZCogYmFzZSwgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIE1tYXBMaW1pdGVyKiBsaW1pdGVyKQorICAgICAgOiBmaWxlbmFtZV8oZm5h
bWUpLCBtbWFwcGVkX3JlZ2lvbl8oYmFzZSksIGxlbmd0aF8obGVuZ3RoKSwKKyAgICAgICAgbGlt
aXRlcl8obGltaXRlcikgeworICB9CisKKyAgdmlydHVhbCB+UG9zaXhNbWFwUmVhZGFibGVGaWxl
KCkgeworICAgIG11bm1hcChtbWFwcGVkX3JlZ2lvbl8sIGxlbmd0aF8pOworICAgIGxpbWl0ZXJf
LT5SZWxlYXNlKCk7CisgIH0KKworICB2aXJ0dWFsIFN0YXR1cyBSZWFkKHVpbnQ2NF90IG9mZnNl
dCwgc2l6ZV90IG4sIFNsaWNlKiByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgY2hhciog
c2NyYXRjaCkgY29uc3QgeworICAgIFN0YXR1cyBzOworICAgIGlmIChvZmZzZXQgKyBuID4gbGVu
Z3RoXykgeworICAgICAgKnJlc3VsdCA9IFNsaWNlKCk7CisgICAgICBzID0gSU9FcnJvcihmaWxl
bmFtZV8sIEVJTlZBTCk7CisgICAgfSBlbHNlIHsKKyAgICAgICpyZXN1bHQgPSBTbGljZShyZWlu
dGVycHJldF9jYXN0PGNoYXIqPihtbWFwcGVkX3JlZ2lvbl8pICsgb2Zmc2V0LCBuKTsKKyAgICB9
CisgICAgcmV0dXJuIHM7CisgIH0KK307CisKKy8vIFdlIHByZWFsbG9jYXRlIHVwIHRvIGFuIGV4
dHJhIG1lZ2FieXRlIGFuZCB1c2UgbWVtY3B5IHRvIGFwcGVuZCBuZXcKKy8vIGRhdGEgdG8gdGhl
IGZpbGUuICBUaGlzIGlzIHNhZmUgc2luY2Ugd2UgZWl0aGVyIHByb3Blcmx5IGNsb3NlIHRoZQor
Ly8gZmlsZSBiZWZvcmUgcmVhZGluZyBmcm9tIGl0LCBvciBmb3IgbG9nIGZpbGVzLCB0aGUgcmVh
ZGluZyBjb2RlCisvLyBrbm93cyBlbm91Z2ggdG8gc2tpcCB6ZXJvIHN1ZmZpeGVzLgorY2xhc3Mg
UG9zaXhNbWFwRmlsZSA6IHB1YmxpYyBXcml0YWJsZUZpbGUgeworIHByaXZhdGU6CisgIHN0ZDo6
c3RyaW5nIGZpbGVuYW1lXzsKKyAgaW50IGZkXzsKKyAgc2l6ZV90IHBhZ2Vfc2l6ZV87CisgIHNp
emVfdCBtYXBfc2l6ZV87ICAgICAgIC8vIEhvdyBtdWNoIGV4dHJhIG1lbW9yeSB0byBtYXAgYXQg
YSB0aW1lCisgIGNoYXIqIGJhc2VfOyAgICAgICAgICAgIC8vIFRoZSBtYXBwZWQgcmVnaW9uCisg
IGNoYXIqIGxpbWl0XzsgICAgICAgICAgIC8vIExpbWl0IG9mIHRoZSBtYXBwZWQgcmVnaW9uCisg
IGNoYXIqIGRzdF87ICAgICAgICAgICAgIC8vIFdoZXJlIHRvIHdyaXRlIG5leHQgIChpbiByYW5n
ZSBbYmFzZV8sbGltaXRfXSkKKyAgY2hhciogbGFzdF9zeW5jXzsgICAgICAgLy8gV2hlcmUgaGF2
ZSB3ZSBzeW5jZWQgdXAgdG8KKyAgdWludDY0X3QgZmlsZV9vZmZzZXRfOyAgLy8gT2Zmc2V0IG9m
IGJhc2VfIGluIGZpbGUKKworICAvLyBIYXZlIHdlIGRvbmUgYW4gbXVubWFwIG9mIHVuc3luY2Vk
IGRhdGE/CisgIGJvb2wgcGVuZGluZ19zeW5jXzsKKworICAvLyBSb3VuZHVwIHggdG8gYSBtdWx0
aXBsZSBvZiB5CisgIHN0YXRpYyBzaXplX3QgUm91bmR1cChzaXplX3QgeCwgc2l6ZV90IHkpIHsK
KyAgICByZXR1cm4gKCh4ICsgeSAtIDEpIC8geSkgKiB5OworICB9CisKKyAgc2l6ZV90IFRydW5j
YXRlVG9QYWdlQm91bmRhcnkoc2l6ZV90IHMpIHsKKyAgICBzIC09IChzICYgKHBhZ2Vfc2l6ZV8g
LSAxKSk7CisgICAgYXNzZXJ0KChzICUgcGFnZV9zaXplXykgPT0gMCk7CisgICAgcmV0dXJuIHM7
CisgIH0KKworICBib29sIFVubWFwQ3VycmVudFJlZ2lvbigpIHsKKyAgICBib29sIHJlc3VsdCA9
IHRydWU7CisgICAgaWYgKGJhc2VfICE9IE5VTEwpIHsKKyAgICAgIGlmIChsYXN0X3N5bmNfIDwg
bGltaXRfKSB7CisgICAgICAgIC8vIERlZmVyIHN5bmNpbmcgdGhpcyBkYXRhIHVudGlsIG5leHQg
U3luYygpIGNhbGwsIGlmIGFueQorICAgICAgICBwZW5kaW5nX3N5bmNfID0gdHJ1ZTsKKyAgICAg
IH0KKyAgICAgIGlmIChtdW5tYXAoYmFzZV8sIGxpbWl0XyAtIGJhc2VfKSAhPSAwKSB7CisgICAg
ICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgfQorICAgICAgZmlsZV9vZmZzZXRfICs9IGxpbWl0
XyAtIGJhc2VfOworICAgICAgYmFzZV8gPSBOVUxMOworICAgICAgbGltaXRfID0gTlVMTDsKKyAg
ICAgIGxhc3Rfc3luY18gPSBOVUxMOworICAgICAgZHN0XyA9IE5VTEw7CisKKyAgICAgIC8vIElu
Y3JlYXNlIHRoZSBhbW91bnQgd2UgbWFwIHRoZSBuZXh0IHRpbWUsIGJ1dCBjYXBwZWQgYXQgMU1C
CisgICAgICBpZiAobWFwX3NpemVfIDwgKDE8PDIwKSkgeworICAgICAgICBtYXBfc2l6ZV8gKj0g
MjsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisgIGJvb2wgTWFw
TmV3UmVnaW9uKCkgeworICAgIGFzc2VydChiYXNlXyA9PSBOVUxMKTsKKyAgICBpZiAoZnRydW5j
YXRlKGZkXywgZmlsZV9vZmZzZXRfICsgbWFwX3NpemVfKSA8IDApIHsKKyAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgdm9pZCogcHRyID0gbW1hcChOVUxMLCBtYXBfc2l6ZV8sIFBST1Rf
UkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsCisgICAgICAgICAgICAgICAgICAgICBmZF8s
IGZpbGVfb2Zmc2V0Xyk7CisgICAgaWYgKHB0ciA9PSBNQVBfRkFJTEVEKSB7CisgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIGJhc2VfID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocHRy
KTsKKyAgICBsaW1pdF8gPSBiYXNlXyArIG1hcF9zaXplXzsKKyAgICBkc3RfID0gYmFzZV87Cisg
ICAgbGFzdF9zeW5jXyA9IGJhc2VfOworICAgIHJldHVybiB0cnVlOworICB9CisKKyBwdWJsaWM6
CisgIFBvc2l4TW1hcEZpbGUoY29uc3Qgc3RkOjpzdHJpbmcmIGZuYW1lLCBpbnQgZmQsIHNpemVf
dCBwYWdlX3NpemUpCisgICAgICA6IGZpbGVuYW1lXyhmbmFtZSksCisgICAgICAgIGZkXyhmZCks
CisgICAgICAgIHBhZ2Vfc2l6ZV8ocGFnZV9zaXplKSwKKyAgICAgICAgbWFwX3NpemVfKFJvdW5k
dXAoNjU1MzYsIHBhZ2Vfc2l6ZSkpLAorICAgICAgICBiYXNlXyhOVUxMKSwKKyAgICAgICAgbGlt
aXRfKE5VTEwpLAorICAgICAgICBkc3RfKE5VTEwpLAorICAgICAgICBsYXN0X3N5bmNfKE5VTEwp
LAorICAgICAgICBmaWxlX29mZnNldF8oMCksCisgICAgICAgIHBlbmRpbmdfc3luY18oZmFsc2Up
IHsKKyAgICBhc3NlcnQoKHBhZ2Vfc2l6ZSAmIChwYWdlX3NpemUgLSAxKSkgPT0gMCk7CisgIH0K
KworCisgIH5Qb3NpeE1tYXBGaWxlKCkgeworICAgIGlmIChmZF8gPj0gMCkgeworICAgICAgUG9z
aXhNbWFwRmlsZTo6Q2xvc2UoKTsKKyAgICB9CisgIH0KKworICB2aXJ0dWFsIFN0YXR1cyBBcHBl
bmQoY29uc3QgU2xpY2UmIGRhdGEpIHsKKyAgICBjb25zdCBjaGFyKiBzcmMgPSBkYXRhLmRhdGEo
KTsKKyAgICBzaXplX3QgbGVmdCA9IGRhdGEuc2l6ZSgpOworICAgIHdoaWxlIChsZWZ0ID4gMCkg
eworICAgICAgYXNzZXJ0KGJhc2VfIDw9IGRzdF8pOworICAgICAgYXNzZXJ0KGRzdF8gPD0gbGlt
aXRfKTsKKyAgICAgIHNpemVfdCBhdmFpbCA9IGxpbWl0XyAtIGRzdF87CisgICAgICBpZiAoYXZh
aWwgPT0gMCkgeworICAgICAgICBpZiAoIVVubWFwQ3VycmVudFJlZ2lvbigpIHx8CisgICAgICAg
ICAgICAhTWFwTmV3UmVnaW9uKCkpIHsKKyAgICAgICAgICByZXR1cm4gSU9FcnJvcihmaWxlbmFt
ZV8sIGVycm5vKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBzaXplX3QgbiA9IChsZWZ0
IDw9IGF2YWlsKSA/IGxlZnQgOiBhdmFpbDsKKyAgICAgIG1lbWNweShkc3RfLCBzcmMsIG4pOwor
ICAgICAgZHN0XyArPSBuOworICAgICAgc3JjICs9IG47CisgICAgICBsZWZ0IC09IG47CisgICAg
fQorICAgIHJldHVybiBTdGF0dXM6Ok9LKCk7CisgIH0KKworICB2aXJ0dWFsIFN0YXR1cyBDbG9z
ZSgpIHsKKyAgICBTdGF0dXMgczsKKyAgICBzaXplX3QgdW51c2VkID0gbGltaXRfIC0gZHN0XzsK
KyAgICBpZiAoIVVubWFwQ3VycmVudFJlZ2lvbigpKSB7CisgICAgICBzID0gSU9FcnJvcihmaWxl
bmFtZV8sIGVycm5vKTsKKyAgICB9IGVsc2UgaWYgKHVudXNlZCA+IDApIHsKKyAgICAgIC8vIFRy
aW0gdGhlIGV4dHJhIHNwYWNlIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUKKyAgICAgIGlmIChmdHJ1
bmNhdGUoZmRfLCBmaWxlX29mZnNldF8gLSB1bnVzZWQpIDwgMCkgeworICAgICAgICBzID0gSU9F
cnJvcihmaWxlbmFtZV8sIGVycm5vKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY2xvc2Uo
ZmRfKSA8IDApIHsKKyAgICAgIGlmIChzLm9rKCkpIHsKKyAgICAgICAgcyA9IElPRXJyb3IoZmls
ZW5hbWVfLCBlcnJubyk7CisgICAgICB9CisgICAgfQorCisgICAgZmRfID0gLTE7CisgICAgYmFz
ZV8gPSBOVUxMOworICAgIGxpbWl0XyA9IE5VTEw7CisgICAgcmV0dXJuIHM7CisgIH0KKworICB2
aXJ0dWFsIFN0YXR1cyBGbHVzaCgpIHsKKyAgICByZXR1cm4gU3RhdHVzOjpPSygpOworICB9CisK
KyAgdmlydHVhbCBTdGF0dXMgU3luYygpIHsKKyAgICBTdGF0dXMgczsKKworICAgIGlmIChwZW5k
aW5nX3N5bmNfKSB7CisgICAgICAvLyBTb21lIHVubWFwcGVkIGRhdGEgd2FzIG5vdCBzeW5jZWQK
KyAgICAgIHBlbmRpbmdfc3luY18gPSBmYWxzZTsKKyAgICAgIGlmIChmZGF0YXN5bmMoZmRfKSA8
IDApIHsKKyAgICAgICAgcyA9IElPRXJyb3IoZmlsZW5hbWVfLCBlcnJubyk7CisgICAgICB9Cisg
ICAgfQorCisgICAgaWYgKGRzdF8gPiBsYXN0X3N5bmNfKSB7CisgICAgICAvLyBGaW5kIHRoZSBi
ZWdpbm5pbmdzIG9mIHRoZSBwYWdlcyB0aGF0IGNvbnRhaW4gdGhlIGZpcnN0IGFuZCBsYXN0Cisg
ICAgICAvLyBieXRlcyB0byBiZSBzeW5jZWQuCisgICAgICBzaXplX3QgcDEgPSBUcnVuY2F0ZVRv
UGFnZUJvdW5kYXJ5KGxhc3Rfc3luY18gLSBiYXNlXyk7CisgICAgICBzaXplX3QgcDIgPSBUcnVu
Y2F0ZVRvUGFnZUJvdW5kYXJ5KGRzdF8gLSBiYXNlXyAtIDEpOworICAgICAgbGFzdF9zeW5jXyA9
IGRzdF87CisgICAgICBpZiAobXN5bmMoYmFzZV8gKyBwMSwgcDIgLSBwMSArIHBhZ2Vfc2l6ZV8s
IE1TX1NZTkMpIDwgMCkgeworICAgICAgICBzID0gSU9FcnJvcihmaWxlbmFtZV8sIGVycm5vKTsK
KyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gczsKKyAgfQorfTsKKworc3RhdGljIGludCBM
b2NrT3JVbmxvY2soaW50IGZkLCBib29sIGxvY2spIHsKKyAgZXJybm8gPSAwOworICBzdHJ1Y3Qg
ZmxvY2sgZjsKKyAgbWVtc2V0KCZmLCAwLCBzaXplb2YoZikpOworICBmLmxfdHlwZSA9IChsb2Nr
ID8gRl9XUkxDSyA6IEZfVU5MQ0spOworICBmLmxfd2hlbmNlID0gU0VFS19TRVQ7CisgIGYubF9z
dGFydCA9IDA7CisgIGYubF9sZW4gPSAwOyAgICAgICAgLy8gTG9jay91bmxvY2sgZW50aXJlIGZp
bGUKKyAgcmV0dXJuIGZjbnRsKGZkLCBGX1NFVExLLCAmZik7Cit9CisKK2NsYXNzIFBvc2l4Rmls
ZUxvY2sgOiBwdWJsaWMgRmlsZUxvY2sgeworIHB1YmxpYzoKKyAgaW50IGZkXzsKKyAgc3RkOjpz
dHJpbmcgbmFtZV87Cit9OworCisvLyBTZXQgb2YgbG9ja2VkIGZpbGVzLiAgV2Uga2VlcCBhIHNl
cGFyYXRlIHNldCBpbnN0ZWFkIG9mIGp1c3QKKy8vIHJlbHlpbmcgb24gZmNudHJsKEZfU0VUTEsp
IHNpbmNlIGZjbnRsKEZfU0VUTEspIGRvZXMgbm90IHByb3ZpZGUKKy8vIGFueSBwcm90ZWN0aW9u
IGFnYWluc3QgbXVsdGlwbGUgdXNlcyBmcm9tIHRoZSBzYW1lIHByb2Nlc3MuCitjbGFzcyBQb3Np
eExvY2tUYWJsZSB7CisgcHJpdmF0ZToKKyAgcG9ydDo6TXV0ZXggbXVfOworICBzdGQ6OnNldDxz
dGQ6OnN0cmluZz4gbG9ja2VkX2ZpbGVzXzsKKyBwdWJsaWM6CisgIGJvb2wgSW5zZXJ0KGNvbnN0
IHN0ZDo6c3RyaW5nJiBmbmFtZSkgeworICAgIE11dGV4TG9jayBsKCZtdV8pOworICAgIHJldHVy
biBsb2NrZWRfZmlsZXNfLmluc2VydChmbmFtZSkuc2Vjb25kOworICB9CisgIHZvaWQgUmVtb3Zl
KGNvbnN0IHN0ZDo6c3RyaW5nJiBmbmFtZSkgeworICAgIE11dGV4TG9jayBsKCZtdV8pOworICAg
IGxvY2tlZF9maWxlc18uZXJhc2UoZm5hbWUpOworICB9Cit9OworCitjbGFzcyBQb3NpeEVudiA6
IHB1YmxpYyBFbnYgeworIHB1YmxpYzoKKyAgUG9zaXhFbnYoKTsKKyAgdmlydHVhbCB+UG9zaXhF
bnYoKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJEZXN0cm95aW5nIEVudjo6RGVmYXVsdCgpXG4i
KTsKKyAgICBleGl0KDEpOworICB9CisKKyAgdmlydHVhbCBTdGF0dXMgTmV3U2VxdWVudGlhbEZp
bGUoY29uc3Qgc3RkOjpzdHJpbmcmIGZuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTZXF1ZW50aWFsRmlsZSoqIHJlc3VsdCkgeworICAgIEZJTEUqIGYgPSBmb3Blbihm
bmFtZS5jX3N0cigpLCAiciIpOworICAgIGlmIChmID09IE5VTEwpIHsKKyAgICAgICpyZXN1bHQg
PSBOVUxMOworICAgICAgcmV0dXJuIElPRXJyb3IoZm5hbWUsIGVycm5vKTsKKyAgICB9IGVsc2Ug
eworICAgICAgKnJlc3VsdCA9IG5ldyBQb3NpeFNlcXVlbnRpYWxGaWxlKGZuYW1lLCBmKTsKKyAg
ICAgIHJldHVybiBTdGF0dXM6Ok9LKCk7CisgICAgfQorICB9CisKKyAgdmlydHVhbCBTdGF0dXMg
TmV3UmFuZG9tQWNjZXNzRmlsZShjb25zdCBzdGQ6OnN0cmluZyYgZm5hbWUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUmFuZG9tQWNjZXNzRmlsZSoqIHJlc3VsdCkgewor
ICAgICpyZXN1bHQgPSBOVUxMOworICAgIFN0YXR1cyBzOworICAgIGludCBmZCA9IG9wZW4oZm5h
bWUuY19zdHIoKSwgT19SRE9OTFkpOworICAgIGlmIChmZCA8IDApIHsKKyAgICAgIHMgPSBJT0Vy
cm9yKGZuYW1lLCBlcnJubyk7CisgICAgfSBlbHNlIGlmIChtbWFwX2xpbWl0Xy5BY3F1aXJlKCkp
IHsKKyAgICAgIHVpbnQ2NF90IHNpemU7CisgICAgICBzID0gR2V0RmlsZVNpemUoZm5hbWUsICZz
aXplKTsKKyAgICAgIGlmIChzLm9rKCkpIHsKKyAgICAgICAgdm9pZCogYmFzZSA9IG1tYXAoTlVM
TCwgc2l6ZSwgUFJPVF9SRUFELCBNQVBfU0hBUkVELCBmZCwgMCk7CisgICAgICAgIGlmIChiYXNl
ICE9IE1BUF9GQUlMRUQpIHsKKyAgICAgICAgICAqcmVzdWx0ID0gbmV3IFBvc2l4TW1hcFJlYWRh
YmxlRmlsZShmbmFtZSwgYmFzZSwgc2l6ZSwgJm1tYXBfbGltaXRfKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICBzID0gSU9FcnJvcihmbmFtZSwgZXJybm8pOworICAgICAgICB9CisgICAg
ICB9CisgICAgICBjbG9zZShmZCk7CisgICAgICBpZiAoIXMub2soKSkgeworICAgICAgICBtbWFw
X2xpbWl0Xy5SZWxlYXNlKCk7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICpyZXN1bHQg
PSBuZXcgUG9zaXhSYW5kb21BY2Nlc3NGaWxlKGZuYW1lLCBmZCk7CisgICAgfQorICAgIHJldHVy
biBzOworICB9CisKKyAgdmlydHVhbCBTdGF0dXMgTmV3V3JpdGFibGVGaWxlKGNvbnN0IHN0ZDo6
c3RyaW5nJiBmbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxl
RmlsZSoqIHJlc3VsdCkgeworICAgIFN0YXR1cyBzOworICAgIGNvbnN0IGludCBmZCA9IG9wZW4o
Zm5hbWUuY19zdHIoKSwgT19DUkVBVCB8IE9fUkRXUiB8IE9fVFJVTkMsIDA2NDQpOworICAgIGlm
IChmZCA8IDApIHsKKyAgICAgICpyZXN1bHQgPSBOVUxMOworICAgICAgcyA9IElPRXJyb3IoZm5h
bWUsIGVycm5vKTsKKyAgICB9IGVsc2UgeworICAgICAgKnJlc3VsdCA9IG5ldyBQb3NpeE1tYXBG
aWxlKGZuYW1lLCBmZCwgcGFnZV9zaXplXyk7CisgICAgfQorICAgIHJldHVybiBzOworICB9CisK
KyAgdmlydHVhbCBib29sIEZpbGVFeGlzdHMoY29uc3Qgc3RkOjpzdHJpbmcmIGZuYW1lKSB7Cisg
ICAgcmV0dXJuIGFjY2VzcyhmbmFtZS5jX3N0cigpLCBGX09LKSA9PSAwOworICB9CisKKyAgdmly
dHVhbCBTdGF0dXMgR2V0Q2hpbGRyZW4oY29uc3Qgc3RkOjpzdHJpbmcmIGRpciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+KiByZXN1bHQpIHsK
KyAgICByZXN1bHQtPmNsZWFyKCk7CisgICAgRElSKiBkID0gb3BlbmRpcihkaXIuY19zdHIoKSk7
CisgICAgaWYgKGQgPT0gTlVMTCkgeworICAgICAgcmV0dXJuIElPRXJyb3IoZGlyLCBlcnJubyk7
CisgICAgfQorICAgIHN0cnVjdCBkaXJlbnQqIGVudHJ5OworICAgIHdoaWxlICgoZW50cnkgPSBy
ZWFkZGlyKGQpKSAhPSBOVUxMKSB7CisgICAgICByZXN1bHQtPnB1c2hfYmFjayhlbnRyeS0+ZF9u
YW1lKTsKKyAgICB9CisgICAgY2xvc2VkaXIoZCk7CisgICAgcmV0dXJuIFN0YXR1czo6T0soKTsK
KyAgfQorCisgIHZpcnR1YWwgU3RhdHVzIERlbGV0ZUZpbGUoY29uc3Qgc3RkOjpzdHJpbmcmIGZu
YW1lKSB7CisgICAgU3RhdHVzIHJlc3VsdDsKKyAgICBpZiAodW5saW5rKGZuYW1lLmNfc3RyKCkp
ICE9IDApIHsKKyAgICAgIHJlc3VsdCA9IElPRXJyb3IoZm5hbWUsIGVycm5vKTsKKyAgICB9Cisg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgfTsKKworICB2aXJ0dWFsIFN0YXR1cyBDcmVhdGVEaXIoY29u
c3Qgc3RkOjpzdHJpbmcmIG5hbWUpIHsKKyAgICBTdGF0dXMgcmVzdWx0OworICAgIGlmIChta2Rp
cihuYW1lLmNfc3RyKCksIDA3NTUpICE9IDApIHsKKyAgICAgIHJlc3VsdCA9IElPRXJyb3IobmFt
ZSwgZXJybm8pOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworICB9OworCisgIHZpcnR1YWwg
U3RhdHVzIERlbGV0ZURpcihjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkgeworICAgIFN0YXR1cyBy
ZXN1bHQ7CisgICAgaWYgKHJtZGlyKG5hbWUuY19zdHIoKSkgIT0gMCkgeworICAgICAgcmVzdWx0
ID0gSU9FcnJvcihuYW1lLCBlcnJubyk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7CisgIH07
CisKKyAgdmlydHVhbCBTdGF0dXMgR2V0RmlsZVNpemUoY29uc3Qgc3RkOjpzdHJpbmcmIGZuYW1l
LCB1aW50NjRfdCogc2l6ZSkgeworICAgIFN0YXR1cyBzOworICAgIHN0cnVjdCBzdGF0IHNidWY7
CisgICAgaWYgKHN0YXQoZm5hbWUuY19zdHIoKSwgJnNidWYpICE9IDApIHsKKyAgICAgICpzaXpl
ID0gMDsKKyAgICAgIHMgPSBJT0Vycm9yKGZuYW1lLCBlcnJubyk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICpzaXplID0gc2J1Zi5zdF9zaXplOworICAgIH0KKyAgICByZXR1cm4gczsKKyAgfQorCisg
IHZpcnR1YWwgU3RhdHVzIFJlbmFtZUZpbGUoY29uc3Qgc3RkOjpzdHJpbmcmIHNyYywgY29uc3Qg
c3RkOjpzdHJpbmcmIHRhcmdldCkgeworICAgIFN0YXR1cyByZXN1bHQ7CisgICAgaWYgKHJlbmFt
ZShzcmMuY19zdHIoKSwgdGFyZ2V0LmNfc3RyKCkpICE9IDApIHsKKyAgICAgIHJlc3VsdCA9IElP
RXJyb3Ioc3JjLCBlcnJubyk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworICB2
aXJ0dWFsIFN0YXR1cyBMb2NrRmlsZShjb25zdCBzdGQ6OnN0cmluZyYgZm5hbWUsIEZpbGVMb2Nr
KiogbG9jaykgeworICAgICpsb2NrID0gTlVMTDsKKyAgICBTdGF0dXMgcmVzdWx0OworICAgIGlu
dCBmZCA9IG9wZW4oZm5hbWUuY19zdHIoKSwgT19SRFdSIHwgT19DUkVBVCwgMDY0NCk7CisgICAg
aWYgKGZkIDwgMCkgeworICAgICAgcmVzdWx0ID0gSU9FcnJvcihmbmFtZSwgZXJybm8pOworICAg
IH0gZWxzZSBpZiAoIWxvY2tzXy5JbnNlcnQoZm5hbWUpKSB7CisgICAgICBjbG9zZShmZCk7Cisg
ICAgICByZXN1bHQgPSBTdGF0dXM6OklPRXJyb3IoImxvY2sgIiArIGZuYW1lLCAiYWxyZWFkeSBo
ZWxkIGJ5IHByb2Nlc3MiKTsKKyAgICB9IGVsc2UgaWYgKExvY2tPclVubG9jayhmZCwgdHJ1ZSkg
PT0gLTEpIHsKKyAgICAgIHJlc3VsdCA9IElPRXJyb3IoImxvY2sgIiArIGZuYW1lLCBlcnJubyk7
CisgICAgICBjbG9zZShmZCk7CisgICAgICBsb2Nrc18uUmVtb3ZlKGZuYW1lKTsKKyAgICB9IGVs
c2UgeworICAgICAgUG9zaXhGaWxlTG9jayogbXlfbG9jayA9IG5ldyBQb3NpeEZpbGVMb2NrOwor
ICAgICAgbXlfbG9jay0+ZmRfID0gZmQ7CisgICAgICBteV9sb2NrLT5uYW1lXyA9IGZuYW1lOwor
ICAgICAgKmxvY2sgPSBteV9sb2NrOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworICB9CisK
KyAgdmlydHVhbCBTdGF0dXMgVW5sb2NrRmlsZShGaWxlTG9jayogbG9jaykgeworICAgIFBvc2l4
RmlsZUxvY2sqIG15X2xvY2sgPSByZWludGVycHJldF9jYXN0PFBvc2l4RmlsZUxvY2sqPihsb2Nr
KTsKKyAgICBTdGF0dXMgcmVzdWx0OworICAgIGlmIChMb2NrT3JVbmxvY2sobXlfbG9jay0+ZmRf
LCBmYWxzZSkgPT0gLTEpIHsKKyAgICAgIHJlc3VsdCA9IElPRXJyb3IoInVubG9jayIsIGVycm5v
KTsKKyAgICB9CisgICAgbG9ja3NfLlJlbW92ZShteV9sb2NrLT5uYW1lXyk7CisgICAgY2xvc2Uo
bXlfbG9jay0+ZmRfKTsKKyAgICBkZWxldGUgbXlfbG9jazsKKyAgICByZXR1cm4gcmVzdWx0Owor
ICB9CisKKyAgdmlydHVhbCB2b2lkIFNjaGVkdWxlKHZvaWQgKCpmdW5jdGlvbikodm9pZCopLCB2
b2lkKiBhcmcpOworCisgIHZpcnR1YWwgdm9pZCBTdGFydFRocmVhZCh2b2lkICgqZnVuY3Rpb24p
KHZvaWQqIGFyZyksIHZvaWQqIGFyZyk7CisKKyAgdmlydHVhbCBTdGF0dXMgR2V0VGVzdERpcmVj
dG9yeShzdGQ6OnN0cmluZyogcmVzdWx0KSB7CisgICAgY29uc3QgY2hhciogZW52ID0gZ2V0ZW52
KCJURVNUX1RNUERJUiIpOworICAgIGlmIChlbnYgJiYgZW52WzBdICE9ICdcMCcpIHsKKyAgICAg
ICpyZXN1bHQgPSBlbnY7CisgICAgfSBlbHNlIHsKKyAgICAgIGNoYXIgYnVmWzEwMF07CisgICAg
ICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiL3RtcC9sZXZlbGRidGVzdC0lZCIsIGludChn
ZXRldWlkKCkpKTsKKyAgICAgICpyZXN1bHQgPSBidWY7CisgICAgfQorICAgIC8vIERpcmVjdG9y
eSBtYXkgYWxyZWFkeSBleGlzdAorICAgIENyZWF0ZURpcigqcmVzdWx0KTsKKyAgICByZXR1cm4g
U3RhdHVzOjpPSygpOworICB9CisKKyAgc3RhdGljIHVpbnQ2NF90IGdldHRpZCgpIHsKKyAgICBw
dGhyZWFkX3QgdGlkID0gcHRocmVhZF9zZWxmKCk7CisgICAgdWludDY0X3QgdGhyZWFkX2lkID0g
MDsKKyAgICBtZW1jcHkoJnRocmVhZF9pZCwgJnRpZCwgc3RkOjptaW4oc2l6ZW9mKHRocmVhZF9p
ZCksIHNpemVvZih0aWQpKSk7CisgICAgcmV0dXJuIHRocmVhZF9pZDsKKyAgfQorCisgIHZpcnR1
YWwgU3RhdHVzIE5ld0xvZ2dlcihjb25zdCBzdGQ6OnN0cmluZyYgZm5hbWUsIExvZ2dlcioqIHJl
c3VsdCkgeworICAgIEZJTEUqIGYgPSBmb3BlbihmbmFtZS5jX3N0cigpLCAidyIpOworICAgIGlm
IChmID09IE5VTEwpIHsKKyAgICAgICpyZXN1bHQgPSBOVUxMOworICAgICAgcmV0dXJuIElPRXJy
b3IoZm5hbWUsIGVycm5vKTsKKyAgICB9IGVsc2UgeworICAgICAgKnJlc3VsdCA9IG5ldyBQb3Np
eExvZ2dlcihmLCAmUG9zaXhFbnY6OmdldHRpZCk7CisgICAgICByZXR1cm4gU3RhdHVzOjpPSygp
OworICAgIH0KKyAgfQorCisgIHZpcnR1YWwgdWludDY0X3QgTm93TWljcm9zKCkgeworICAgIHN0
cnVjdCB0aW1ldmFsIHR2OworICAgIGdldHRpbWVvZmRheSgmdHYsIE5VTEwpOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDx1aW50NjRfdD4odHYudHZfc2VjKSAqIDEwMDAwMDAgKyB0di50dl91c2Vj
OworICB9CisKKyAgdmlydHVhbCB2b2lkIFNsZWVwRm9yTWljcm9zZWNvbmRzKGludCBtaWNyb3Mp
IHsKKyAgICB1c2xlZXAobWljcm9zKTsKKyAgfQorCisgcHJpdmF0ZToKKyAgdm9pZCBQdGhyZWFk
Q2FsbChjb25zdCBjaGFyKiBsYWJlbCwgaW50IHJlc3VsdCkgeworICAgIGlmIChyZXN1bHQgIT0g
MCkgeworICAgICAgZnByaW50ZihzdGRlcnIsICJwdGhyZWFkICVzOiAlc1xuIiwgbGFiZWwsIHN0
cmVycm9yKHJlc3VsdCkpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisgIH0KKworICAvLyBCR1Ro
cmVhZCgpIGlzIHRoZSBib2R5IG9mIHRoZSBiYWNrZ3JvdW5kIHRocmVhZAorICB2b2lkIEJHVGhy
ZWFkKCk7CisgIHN0YXRpYyB2b2lkKiBCR1RocmVhZFdyYXBwZXIodm9pZCogYXJnKSB7CisgICAg
cmVpbnRlcnByZXRfY2FzdDxQb3NpeEVudio+KGFyZyktPkJHVGhyZWFkKCk7CisgICAgcmV0dXJu
IE5VTEw7CisgIH0KKworICBzaXplX3QgcGFnZV9zaXplXzsKKyAgcHRocmVhZF9tdXRleF90IG11
XzsKKyAgcHRocmVhZF9jb25kX3QgYmdzaWduYWxfOworICBwdGhyZWFkX3QgYmd0aHJlYWRfOwor
ICBib29sIHN0YXJ0ZWRfYmd0aHJlYWRfOworCisgIC8vIEVudHJ5IHBlciBTY2hlZHVsZSgpIGNh
bGwKKyAgc3RydWN0IEJHSXRlbSB7IHZvaWQqIGFyZzsgdm9pZCAoKmZ1bmN0aW9uKSh2b2lkKik7
IH07CisgIHR5cGVkZWYgc3RkOjpkZXF1ZTxCR0l0ZW0+IEJHUXVldWU7CisgIEJHUXVldWUgcXVl
dWVfOworCisgIFBvc2l4TG9ja1RhYmxlIGxvY2tzXzsKKyAgTW1hcExpbWl0ZXIgbW1hcF9saW1p
dF87Cit9OworCitQb3NpeEVudjo6UG9zaXhFbnYoKSA6IHBhZ2Vfc2l6ZV8oZ2V0cGFnZXNpemUo
KSksCisgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWRfYmd0aHJlYWRfKGZhbHNlKSB7Cisg
IFB0aHJlYWRDYWxsKCJtdXRleF9pbml0IiwgcHRocmVhZF9tdXRleF9pbml0KCZtdV8sIE5VTEwp
KTsKKyAgUHRocmVhZENhbGwoImN2YXJfaW5pdCIsIHB0aHJlYWRfY29uZF9pbml0KCZiZ3NpZ25h
bF8sIE5VTEwpKTsKK30KKwordm9pZCBQb3NpeEVudjo6U2NoZWR1bGUodm9pZCAoKmZ1bmN0aW9u
KSh2b2lkKiksIHZvaWQqIGFyZykgeworICBQdGhyZWFkQ2FsbCgibG9jayIsIHB0aHJlYWRfbXV0
ZXhfbG9jaygmbXVfKSk7CisKKyAgLy8gU3RhcnQgYmFja2dyb3VuZCB0aHJlYWQgaWYgbmVjZXNz
YXJ5CisgIGlmICghc3RhcnRlZF9iZ3RocmVhZF8pIHsKKyAgICBzdGFydGVkX2JndGhyZWFkXyA9
IHRydWU7CisgICAgUHRocmVhZENhbGwoCisgICAgICAgICJjcmVhdGUgdGhyZWFkIiwKKyAgICAg
ICAgcHRocmVhZF9jcmVhdGUoJmJndGhyZWFkXywgTlVMTCwgICZQb3NpeEVudjo6QkdUaHJlYWRX
cmFwcGVyLCB0aGlzKSk7CisgIH0KKworICAvLyBJZiB0aGUgcXVldWUgaXMgY3VycmVudGx5IGVt
cHR5LCB0aGUgYmFja2dyb3VuZCB0aHJlYWQgbWF5IGN1cnJlbnRseSBiZQorICAvLyB3YWl0aW5n
LgorICBpZiAocXVldWVfLmVtcHR5KCkpIHsKKyAgICBQdGhyZWFkQ2FsbCgic2lnbmFsIiwgcHRo
cmVhZF9jb25kX3NpZ25hbCgmYmdzaWduYWxfKSk7CisgIH0KKworICAvLyBBZGQgdG8gcHJpb3Jp
dHkgcXVldWUKKyAgcXVldWVfLnB1c2hfYmFjayhCR0l0ZW0oKSk7CisgIHF1ZXVlXy5iYWNrKCku
ZnVuY3Rpb24gPSBmdW5jdGlvbjsKKyAgcXVldWVfLmJhY2soKS5hcmcgPSBhcmc7CisKKyAgUHRo
cmVhZENhbGwoInVubG9jayIsIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZtdV8pKTsKK30KKwordm9p
ZCBQb3NpeEVudjo6QkdUaHJlYWQoKSB7CisgIHdoaWxlICh0cnVlKSB7CisgICAgLy8gV2FpdCB1
bnRpbCB0aGVyZSBpcyBhbiBpdGVtIHRoYXQgaXMgcmVhZHkgdG8gcnVuCisgICAgUHRocmVhZENh
bGwoImxvY2siLCBwdGhyZWFkX211dGV4X2xvY2soJm11XykpOworICAgIHdoaWxlIChxdWV1ZV8u
ZW1wdHkoKSkgeworICAgICAgUHRocmVhZENhbGwoIndhaXQiLCBwdGhyZWFkX2NvbmRfd2FpdCgm
YmdzaWduYWxfLCAmbXVfKSk7CisgICAgfQorCisgICAgdm9pZCAoKmZ1bmN0aW9uKSh2b2lkKikg
PSBxdWV1ZV8uZnJvbnQoKS5mdW5jdGlvbjsKKyAgICB2b2lkKiBhcmcgPSBxdWV1ZV8uZnJvbnQo
KS5hcmc7CisgICAgcXVldWVfLnBvcF9mcm9udCgpOworCisgICAgUHRocmVhZENhbGwoInVubG9j
ayIsIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZtdV8pKTsKKyAgICAoKmZ1bmN0aW9uKShhcmcpOwor
ICB9Cit9CisKK25hbWVzcGFjZSB7CitzdHJ1Y3QgU3RhcnRUaHJlYWRTdGF0ZSB7CisgIHZvaWQg
KCp1c2VyX2Z1bmN0aW9uKSh2b2lkKik7CisgIHZvaWQqIGFyZzsKK307Cit9CitzdGF0aWMgdm9p
ZCogU3RhcnRUaHJlYWRXcmFwcGVyKHZvaWQqIGFyZykgeworICBTdGFydFRocmVhZFN0YXRlKiBz
dGF0ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8U3RhcnRUaHJlYWRTdGF0ZSo+KGFyZyk7CisgIHN0YXRl
LT51c2VyX2Z1bmN0aW9uKHN0YXRlLT5hcmcpOworICBkZWxldGUgc3RhdGU7CisgIHJldHVybiBO
VUxMOworfQorCit2b2lkIFBvc2l4RW52OjpTdGFydFRocmVhZCh2b2lkICgqZnVuY3Rpb24pKHZv
aWQqIGFyZyksIHZvaWQqIGFyZykgeworICBwdGhyZWFkX3QgdDsKKyAgU3RhcnRUaHJlYWRTdGF0
ZSogc3RhdGUgPSBuZXcgU3RhcnRUaHJlYWRTdGF0ZTsKKyAgc3RhdGUtPnVzZXJfZnVuY3Rpb24g
PSBmdW5jdGlvbjsKKyAgc3RhdGUtPmFyZyA9IGFyZzsKKyAgUHRocmVhZENhbGwoInN0YXJ0IHRo
cmVhZCIsCisgICAgICAgICAgICAgIHB0aHJlYWRfY3JlYXRlKCZ0LCBOVUxMLCAgJlN0YXJ0VGhy
ZWFkV3JhcHBlciwgc3RhdGUpKTsKK30KKworfSAgLy8gbmFtZXNwYWNlCisKK3N0YXRpYyBwdGhy
ZWFkX29uY2VfdCBvbmNlID0gUFRIUkVBRF9PTkNFX0lOSVQ7CitzdGF0aWMgRW52KiBkZWZhdWx0
X2VudjsKK3N0YXRpYyB2b2lkIEluaXREZWZhdWx0RW52KCkgeyBkZWZhdWx0X2VudiA9IG5ldyBQ
b3NpeEVudjsgfQorCitFbnYqIEVudjo6RGVmYXVsdCgpIHsKKyAgcHRocmVhZF9vbmNlKCZvbmNl
LCBJbml0RGVmYXVsdEVudik7CisgIHJldHVybiBkZWZhdWx0X2VudjsKK30KKworfSAgLy8gbmFt
ZXNwYWNlIGxldmVsZGIKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRp
bC9lbnZfdGVzdC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9lbnZfdGVzdC5j
YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5iNzJjYjQ0Mzg0MjViY2E4M2Q5YTZjYTBkMjA3ZGJjODU5MGVmYjJlCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2Vudl90ZXN0
LmNjCkBAIC0wLDAgKzEsMTA0IEBACisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBj
b250cmlidXRvcnMuCisKKyNpbmNsdWRlICJsZXZlbGRiL2Vudi5oIgorCisjaW5jbHVkZSAicG9y
dC9wb3J0LmgiCisjaW5jbHVkZSAidXRpbC90ZXN0aGFybmVzcy5oIgorCituYW1lc3BhY2UgbGV2
ZWxkYiB7CisKK3N0YXRpYyBjb25zdCBpbnQga0RlbGF5TWljcm9zID0gMTAwMDAwOworCitjbGFz
cyBFbnZQb3NpeFRlc3QgeworIHByaXZhdGU6CisgIHBvcnQ6Ok11dGV4IG11XzsKKyAgc3RkOjpz
dHJpbmcgZXZlbnRzXzsKKworIHB1YmxpYzoKKyAgRW52KiBlbnZfOworICBFbnZQb3NpeFRlc3Qo
KSA6IGVudl8oRW52OjpEZWZhdWx0KCkpIHsgfQorfTsKKworc3RhdGljIHZvaWQgU2V0Qm9vbCh2
b2lkKiBwdHIpIHsKKyAgcmVpbnRlcnByZXRfY2FzdDxwb3J0OjpBdG9taWNQb2ludGVyKj4ocHRy
KS0+Tm9CYXJyaWVyX1N0b3JlKHB0cik7Cit9CisKK1RFU1QoRW52UG9zaXhUZXN0LCBSdW5JbW1l
ZGlhdGVseSkgeworICBwb3J0OjpBdG9taWNQb2ludGVyIGNhbGxlZCAoTlVMTCk7CisgIGVudl8t
PlNjaGVkdWxlKCZTZXRCb29sLCAmY2FsbGVkKTsKKyAgRW52OjpEZWZhdWx0KCktPlNsZWVwRm9y
TWljcm9zZWNvbmRzKGtEZWxheU1pY3Jvcyk7CisgIEFTU0VSVF9UUlVFKGNhbGxlZC5Ob0JhcnJp
ZXJfTG9hZCgpICE9IE5VTEwpOworfQorCitURVNUKEVudlBvc2l4VGVzdCwgUnVuTWFueSkgewor
ICBwb3J0OjpBdG9taWNQb2ludGVyIGxhc3RfaWQgKE5VTEwpOworCisgIHN0cnVjdCBDQiB7Cisg
ICAgcG9ydDo6QXRvbWljUG9pbnRlciogbGFzdF9pZF9wdHI7ICAgLy8gUG9pbnRlciB0byBzaGFy
ZWQgc2xvdAorICAgIHVpbnRwdHJfdCBpZDsgICAgICAgICAgICAgLy8gT3JkZXIjIGZvciB0aGUg
ZXhlY3V0aW9uIG9mIHRoaXMgY2FsbGJhY2sKKworICAgIENCKHBvcnQ6OkF0b21pY1BvaW50ZXIq
IHAsIGludCBpKSA6IGxhc3RfaWRfcHRyKHApLCBpZChpKSB7IH0KKworICAgIHN0YXRpYyB2b2lk
IFJ1bih2b2lkKiB2KSB7CisgICAgICBDQiogY2IgPSByZWludGVycHJldF9jYXN0PENCKj4odik7
CisgICAgICB2b2lkKiBjdXIgPSBjYi0+bGFzdF9pZF9wdHItPk5vQmFycmllcl9Mb2FkKCk7Cisg
ICAgICBBU1NFUlRfRVEoY2ItPmlkLTEsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihjdXIp
KTsKKyAgICAgIGNiLT5sYXN0X2lkX3B0ci0+UmVsZWFzZV9TdG9yZShyZWludGVycHJldF9jYXN0
PHZvaWQqPihjYi0+aWQpKTsKKyAgICB9CisgIH07CisKKyAgLy8gU2NoZWR1bGUgaW4gZGlmZmVy
ZW50IG9yZGVyIHRoYW4gc3RhcnQgdGltZQorICBDQiBjYjEoJmxhc3RfaWQsIDEpOworICBDQiBj
YjIoJmxhc3RfaWQsIDIpOworICBDQiBjYjMoJmxhc3RfaWQsIDMpOworICBDQiBjYjQoJmxhc3Rf
aWQsIDQpOworICBlbnZfLT5TY2hlZHVsZSgmQ0I6OlJ1biwgJmNiMSk7CisgIGVudl8tPlNjaGVk
dWxlKCZDQjo6UnVuLCAmY2IyKTsKKyAgZW52Xy0+U2NoZWR1bGUoJkNCOjpSdW4sICZjYjMpOwor
ICBlbnZfLT5TY2hlZHVsZSgmQ0I6OlJ1biwgJmNiNCk7CisKKyAgRW52OjpEZWZhdWx0KCktPlNs
ZWVwRm9yTWljcm9zZWNvbmRzKGtEZWxheU1pY3Jvcyk7CisgIHZvaWQqIGN1ciA9IGxhc3RfaWQu
QWNxdWlyZV9Mb2FkKCk7CisgIEFTU0VSVF9FUSg0LCByZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dD4oY3VyKSk7Cit9CisKK3N0cnVjdCBTdGF0ZSB7CisgIHBvcnQ6Ok11dGV4IG11OworICBpbnQg
dmFsOworICBpbnQgbnVtX3J1bm5pbmc7Cit9OworCitzdGF0aWMgdm9pZCBUaHJlYWRCb2R5KHZv
aWQqIGFyZykgeworICBTdGF0ZSogcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8U3RhdGUqPihhcmcpOwor
ICBzLT5tdS5Mb2NrKCk7CisgIHMtPnZhbCArPSAxOworICBzLT5udW1fcnVubmluZyAtPSAxOwor
ICBzLT5tdS5VbmxvY2soKTsKK30KKworVEVTVChFbnZQb3NpeFRlc3QsIFN0YXJ0VGhyZWFkKSB7
CisgIFN0YXRlIHN0YXRlOworICBzdGF0ZS52YWwgPSAwOworICBzdGF0ZS5udW1fcnVubmluZyA9
IDM7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSsrKSB7CisgICAgZW52Xy0+U3RhcnRUaHJl
YWQoJlRocmVhZEJvZHksICZzdGF0ZSk7CisgIH0KKyAgd2hpbGUgKHRydWUpIHsKKyAgICBzdGF0
ZS5tdS5Mb2NrKCk7CisgICAgaW50IG51bSA9IHN0YXRlLm51bV9ydW5uaW5nOworICAgIHN0YXRl
Lm11LlVubG9jaygpOworICAgIGlmIChudW0gPT0gMCkgeworICAgICAgYnJlYWs7CisgICAgfQor
ICAgIEVudjo6RGVmYXVsdCgpLT5TbGVlcEZvck1pY3Jvc2Vjb25kcyhrRGVsYXlNaWNyb3MpOwor
ICB9CisgIEFTU0VSVF9FUShzdGF0ZS52YWwsIDMpOworfQorCit9ICAvLyBuYW1lc3BhY2UgbGV2
ZWxkYgorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpIHsKKyAgcmV0dXJuIGxldmVs
ZGI6OnRlc3Q6OlJ1bkFsbFRlc3RzKCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9sZXZlbGRiL3V0aWwvZmlsdGVyX3BvbGljeS5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVs
ZGIvdXRpbC9maWx0ZXJfcG9saWN5LmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdiMDQ1YzhjOTFkNmY2ZDYwMDMw
OGU1MDk2NmNjZjU2ZTUzNjM4YmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9sZXZlbGRiL3V0aWwvZmlsdGVyX3BvbGljeS5jYwpAQCAtMCwwICsxLDExIEBACisvLyBDb3B5
cmlnaHQgKGMpIDIwMTIgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUg
QVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCisKKyNpbmNsdWRlICJsZXZl
bGRiL2ZpbHRlcl9wb2xpY3kuaCIKKworbmFtZXNwYWNlIGxldmVsZGIgeworCitGaWx0ZXJQb2xp
Y3k6On5GaWx0ZXJQb2xpY3koKSB7IH0KKworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9oYXNoLmNjIGIvU291cmNlL1Ro
aXJkUGFydHkvbGV2ZWxkYi91dGlsL2hhc2guY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmExODE4MDgyZGZmOTBh
YTY0NzViYjI3MmZhMjVlZTBjMjJkNjI5MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xldmVsZGIvdXRpbC9oYXNoLmNjCkBAIC0wLDAgKzEsNDUgQEAKKy8vIENvcHlyaWdo
dCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRI
T1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2luY2x1ZGUgPHN0cmluZy5o
PgorI2luY2x1ZGUgInV0aWwvY29kaW5nLmgiCisjaW5jbHVkZSAidXRpbC9oYXNoLmgiCisKK25h
bWVzcGFjZSBsZXZlbGRiIHsKKwordWludDMyX3QgSGFzaChjb25zdCBjaGFyKiBkYXRhLCBzaXpl
X3QgbiwgdWludDMyX3Qgc2VlZCkgeworICAvLyBTaW1pbGFyIHRvIG11cm11ciBoYXNoCisgIGNv
bnN0IHVpbnQzMl90IG0gPSAweGM2YTRhNzkzOworICBjb25zdCB1aW50MzJfdCByID0gMjQ7Cisg
IGNvbnN0IGNoYXIqIGxpbWl0ID0gZGF0YSArIG47CisgIHVpbnQzMl90IGggPSBzZWVkIF4gKG4g
KiBtKTsKKworICAvLyBQaWNrIHVwIGZvdXIgYnl0ZXMgYXQgYSB0aW1lCisgIHdoaWxlIChkYXRh
ICsgNCA8PSBsaW1pdCkgeworICAgIHVpbnQzMl90IHcgPSBEZWNvZGVGaXhlZDMyKGRhdGEpOwor
ICAgIGRhdGEgKz0gNDsKKyAgICBoICs9IHc7CisgICAgaCAqPSBtOworICAgIGggXj0gKGggPj4g
MTYpOworICB9CisKKyAgLy8gUGljayB1cCByZW1haW5pbmcgYnl0ZXMKKyAgc3dpdGNoIChsaW1p
dCAtIGRhdGEpIHsKKyAgICBjYXNlIDM6CisgICAgICBoICs9IGRhdGFbMl0gPDwgMTY7CisgICAg
ICAvLyBmYWxsIHRocm91Z2gKKyAgICBjYXNlIDI6CisgICAgICBoICs9IGRhdGFbMV0gPDwgODsK
KyAgICAgIC8vIGZhbGwgdGhyb3VnaAorICAgIGNhc2UgMToKKyAgICAgIGggKz0gZGF0YVswXTsK
KyAgICAgIGggKj0gbTsKKyAgICAgIGggXj0gKGggPj4gcik7CisgICAgICBicmVhazsKKyAgfQor
ICByZXR1cm4gaDsKK30KKworCit9ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2hhc2guaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xldmVsZGIvdXRpbC9oYXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODg4OWQ1NmJlODBlMmY2MzQyYTFhMjky
YzZhMDA3NWQyNDgxZGU4MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xl
dmVsZGIvdXRpbC9oYXNoLmgKQEAgLTAsMCArMSwxOSBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDEx
IFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBm
b3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgorLy8KKy8vIFNpbXBsZSBoYXNoIGZ1bmN0aW9uIHVz
ZWQgZm9yIGludGVybmFsIGRhdGEgc3RydWN0dXJlcworCisjaWZuZGVmIFNUT1JBR0VfTEVWRUxE
Ql9VVElMX0hBU0hfSF8KKyNkZWZpbmUgU1RPUkFHRV9MRVZFTERCX1VUSUxfSEFTSF9IXworCisj
aW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKK25hbWVzcGFjZSBsZXZl
bGRiIHsKKworZXh0ZXJuIHVpbnQzMl90IEhhc2goY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IG4s
IHVpbnQzMl90IHNlZWQpOworCit9CisKKyNlbmRpZiAgLy8gU1RPUkFHRV9MRVZFTERCX1VUSUxf
SEFTSF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2hpc3Rv
Z3JhbS5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9oaXN0b2dyYW0uY2MKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYmI5NWY1ODNlYWM2YTZmOTE2YTgzZTQwOTA0NWYwYTIyNmJkOWFlNwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9oaXN0b2dyYW0uY2MK
QEAgLTAsMCArMSwxMzkgQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRy
aWJ1dG9ycy4KKworI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1
ZGUgInBvcnQvcG9ydC5oIgorI2luY2x1ZGUgInV0aWwvaGlzdG9ncmFtLmgiCisKK25hbWVzcGFj
ZSBsZXZlbGRiIHsKKworY29uc3QgZG91YmxlIEhpc3RvZ3JhbTo6a0J1Y2tldExpbWl0W2tOdW1C
dWNrZXRzXSA9IHsKKyAgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDEyLCAxNCwgMTYs
IDE4LCAyMCwgMjUsIDMwLCAzNSwgNDAsIDQ1LAorICA1MCwgNjAsIDcwLCA4MCwgOTAsIDEwMCwg
MTIwLCAxNDAsIDE2MCwgMTgwLCAyMDAsIDI1MCwgMzAwLCAzNTAsIDQwMCwgNDUwLAorICA1MDAs
IDYwMCwgNzAwLCA4MDAsIDkwMCwgMTAwMCwgMTIwMCwgMTQwMCwgMTYwMCwgMTgwMCwgMjAwMCwg
MjUwMCwgMzAwMCwKKyAgMzUwMCwgNDAwMCwgNDUwMCwgNTAwMCwgNjAwMCwgNzAwMCwgODAwMCwg
OTAwMCwgMTAwMDAsIDEyMDAwLCAxNDAwMCwKKyAgMTYwMDAsIDE4MDAwLCAyMDAwMCwgMjUwMDAs
IDMwMDAwLCAzNTAwMCwgNDAwMDAsIDQ1MDAwLCA1MDAwMCwgNjAwMDAsCisgIDcwMDAwLCA4MDAw
MCwgOTAwMDAsIDEwMDAwMCwgMTIwMDAwLCAxNDAwMDAsIDE2MDAwMCwgMTgwMDAwLCAyMDAwMDAs
CisgIDI1MDAwMCwgMzAwMDAwLCAzNTAwMDAsIDQwMDAwMCwgNDUwMDAwLCA1MDAwMDAsIDYwMDAw
MCwgNzAwMDAwLCA4MDAwMDAsCisgIDkwMDAwMCwgMTAwMDAwMCwgMTIwMDAwMCwgMTQwMDAwMCwg
MTYwMDAwMCwgMTgwMDAwMCwgMjAwMDAwMCwgMjUwMDAwMCwKKyAgMzAwMDAwMCwgMzUwMDAwMCwg
NDAwMDAwMCwgNDUwMDAwMCwgNTAwMDAwMCwgNjAwMDAwMCwgNzAwMDAwMCwgODAwMDAwMCwKKyAg
OTAwMDAwMCwgMTAwMDAwMDAsIDEyMDAwMDAwLCAxNDAwMDAwMCwgMTYwMDAwMDAsIDE4MDAwMDAw
LCAyMDAwMDAwMCwKKyAgMjUwMDAwMDAsIDMwMDAwMDAwLCAzNTAwMDAwMCwgNDAwMDAwMDAsIDQ1
MDAwMDAwLCA1MDAwMDAwMCwgNjAwMDAwMDAsCisgIDcwMDAwMDAwLCA4MDAwMDAwMCwgOTAwMDAw
MDAsIDEwMDAwMDAwMCwgMTIwMDAwMDAwLCAxNDAwMDAwMDAsIDE2MDAwMDAwMCwKKyAgMTgwMDAw
MDAwLCAyMDAwMDAwMDAsIDI1MDAwMDAwMCwgMzAwMDAwMDAwLCAzNTAwMDAwMDAsIDQwMDAwMDAw
MCwKKyAgNDUwMDAwMDAwLCA1MDAwMDAwMDAsIDYwMDAwMDAwMCwgNzAwMDAwMDAwLCA4MDAwMDAw
MDAsIDkwMDAwMDAwMCwKKyAgMTAwMDAwMDAwMCwgMTIwMDAwMDAwMCwgMTQwMDAwMDAwMCwgMTYw
MDAwMDAwMCwgMTgwMDAwMDAwMCwgMjAwMDAwMDAwMCwKKyAgMjUwMDAwMDAwMC4wLCAzMDAwMDAw
MDAwLjAsIDM1MDAwMDAwMDAuMCwgNDAwMDAwMDAwMC4wLCA0NTAwMDAwMDAwLjAsCisgIDUwMDAw
MDAwMDAuMCwgNjAwMDAwMDAwMC4wLCA3MDAwMDAwMDAwLjAsIDgwMDAwMDAwMDAuMCwgOTAwMDAw
MDAwMC4wLAorICAxZTIwMCwKK307CisKK3ZvaWQgSGlzdG9ncmFtOjpDbGVhcigpIHsKKyAgbWlu
XyA9IGtCdWNrZXRMaW1pdFtrTnVtQnVja2V0cy0xXTsKKyAgbWF4XyA9IDA7CisgIG51bV8gPSAw
OworICBzdW1fID0gMDsKKyAgc3VtX3NxdWFyZXNfID0gMDsKKyAgZm9yIChpbnQgaSA9IDA7IGkg
PCBrTnVtQnVja2V0czsgaSsrKSB7CisgICAgYnVja2V0c19baV0gPSAwOworICB9Cit9CisKK3Zv
aWQgSGlzdG9ncmFtOjpBZGQoZG91YmxlIHZhbHVlKSB7CisgIC8vIExpbmVhciBzZWFyY2ggaXMg
ZmFzdCBlbm91Z2ggZm9yIG91ciB1c2FnZSBpbiBkYl9iZW5jaAorICBpbnQgYiA9IDA7CisgIHdo
aWxlIChiIDwga051bUJ1Y2tldHMgLSAxICYmIGtCdWNrZXRMaW1pdFtiXSA8PSB2YWx1ZSkgewor
ICAgIGIrKzsKKyAgfQorICBidWNrZXRzX1tiXSArPSAxLjA7CisgIGlmIChtaW5fID4gdmFsdWUp
IG1pbl8gPSB2YWx1ZTsKKyAgaWYgKG1heF8gPCB2YWx1ZSkgbWF4XyA9IHZhbHVlOworICBudW1f
Kys7CisgIHN1bV8gKz0gdmFsdWU7CisgIHN1bV9zcXVhcmVzXyArPSAodmFsdWUgKiB2YWx1ZSk7
Cit9CisKK3ZvaWQgSGlzdG9ncmFtOjpNZXJnZShjb25zdCBIaXN0b2dyYW0mIG90aGVyKSB7Cisg
IGlmIChvdGhlci5taW5fIDwgbWluXykgbWluXyA9IG90aGVyLm1pbl87CisgIGlmIChvdGhlci5t
YXhfID4gbWF4XykgbWF4XyA9IG90aGVyLm1heF87CisgIG51bV8gKz0gb3RoZXIubnVtXzsKKyAg
c3VtXyArPSBvdGhlci5zdW1fOworICBzdW1fc3F1YXJlc18gKz0gb3RoZXIuc3VtX3NxdWFyZXNf
OworICBmb3IgKGludCBiID0gMDsgYiA8IGtOdW1CdWNrZXRzOyBiKyspIHsKKyAgICBidWNrZXRz
X1tiXSArPSBvdGhlci5idWNrZXRzX1tiXTsKKyAgfQorfQorCitkb3VibGUgSGlzdG9ncmFtOjpN
ZWRpYW4oKSBjb25zdCB7CisgIHJldHVybiBQZXJjZW50aWxlKDUwLjApOworfQorCitkb3VibGUg
SGlzdG9ncmFtOjpQZXJjZW50aWxlKGRvdWJsZSBwKSBjb25zdCB7CisgIGRvdWJsZSB0aHJlc2hv
bGQgPSBudW1fICogKHAgLyAxMDAuMCk7CisgIGRvdWJsZSBzdW0gPSAwOworICBmb3IgKGludCBi
ID0gMDsgYiA8IGtOdW1CdWNrZXRzOyBiKyspIHsKKyAgICBzdW0gKz0gYnVja2V0c19bYl07Cisg
ICAgaWYgKHN1bSA+PSB0aHJlc2hvbGQpIHsKKyAgICAgIC8vIFNjYWxlIGxpbmVhcmx5IHdpdGhp
biB0aGlzIGJ1Y2tldAorICAgICAgZG91YmxlIGxlZnRfcG9pbnQgPSAoYiA9PSAwKSA/IDAgOiBr
QnVja2V0TGltaXRbYi0xXTsKKyAgICAgIGRvdWJsZSByaWdodF9wb2ludCA9IGtCdWNrZXRMaW1p
dFtiXTsKKyAgICAgIGRvdWJsZSBsZWZ0X3N1bSA9IHN1bSAtIGJ1Y2tldHNfW2JdOworICAgICAg
ZG91YmxlIHJpZ2h0X3N1bSA9IHN1bTsKKyAgICAgIGRvdWJsZSBwb3MgPSAodGhyZXNob2xkIC0g
bGVmdF9zdW0pIC8gKHJpZ2h0X3N1bSAtIGxlZnRfc3VtKTsKKyAgICAgIGRvdWJsZSByID0gbGVm
dF9wb2ludCArIChyaWdodF9wb2ludCAtIGxlZnRfcG9pbnQpICogcG9zOworICAgICAgaWYgKHIg
PCBtaW5fKSByID0gbWluXzsKKyAgICAgIGlmIChyID4gbWF4XykgciA9IG1heF87CisgICAgICBy
ZXR1cm4gcjsKKyAgICB9CisgIH0KKyAgcmV0dXJuIG1heF87Cit9CisKK2RvdWJsZSBIaXN0b2dy
YW06OkF2ZXJhZ2UoKSBjb25zdCB7CisgIGlmIChudW1fID09IDAuMCkgcmV0dXJuIDA7CisgIHJl
dHVybiBzdW1fIC8gbnVtXzsKK30KKworZG91YmxlIEhpc3RvZ3JhbTo6U3RhbmRhcmREZXZpYXRp
b24oKSBjb25zdCB7CisgIGlmIChudW1fID09IDAuMCkgcmV0dXJuIDA7CisgIGRvdWJsZSB2YXJp
YW5jZSA9IChzdW1fc3F1YXJlc18gKiBudW1fIC0gc3VtXyAqIHN1bV8pIC8gKG51bV8gKiBudW1f
KTsKKyAgcmV0dXJuIHNxcnQodmFyaWFuY2UpOworfQorCitzdGQ6OnN0cmluZyBIaXN0b2dyYW06
OlRvU3RyaW5nKCkgY29uc3QgeworICBzdGQ6OnN0cmluZyByOworICBjaGFyIGJ1ZlsyMDBdOwor
ICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLAorICAgICAgICAgICAiQ291bnQ6ICUuMGYgIEF2
ZXJhZ2U6ICUuNGYgIFN0ZERldjogJS4yZlxuIiwKKyAgICAgICAgICAgbnVtXywgQXZlcmFnZSgp
LCBTdGFuZGFyZERldmlhdGlvbigpKTsKKyAgci5hcHBlbmQoYnVmKTsKKyAgc25wcmludGYoYnVm
LCBzaXplb2YoYnVmKSwKKyAgICAgICAgICAgIk1pbjogJS40ZiAgTWVkaWFuOiAlLjRmICBNYXg6
ICUuNGZcbiIsCisgICAgICAgICAgIChudW1fID09IDAuMCA/IDAuMCA6IG1pbl8pLCBNZWRpYW4o
KSwgbWF4Xyk7CisgIHIuYXBwZW5kKGJ1Zik7CisgIHIuYXBwZW5kKCItLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworICBjb25zdCBkb3Vi
bGUgbXVsdCA9IDEwMC4wIC8gbnVtXzsKKyAgZG91YmxlIHN1bSA9IDA7CisgIGZvciAoaW50IGIg
PSAwOyBiIDwga051bUJ1Y2tldHM7IGIrKykgeworICAgIGlmIChidWNrZXRzX1tiXSA8PSAwLjAp
IGNvbnRpbnVlOworICAgIHN1bSArPSBidWNrZXRzX1tiXTsKKyAgICBzbnByaW50ZihidWYsIHNp
emVvZihidWYpLAorICAgICAgICAgICAgICJbICU3LjBmLCAlNy4wZiApICU3LjBmICU3LjNmJSUg
JTcuM2YlJSAiLAorICAgICAgICAgICAgICgoYiA9PSAwKSA/IDAuMCA6IGtCdWNrZXRMaW1pdFti
LTFdKSwgICAgICAvLyBsZWZ0CisgICAgICAgICAgICAga0J1Y2tldExpbWl0W2JdLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHJpZ2h0CisgICAgICAgICAgICAgYnVja2V0c19bYl0sICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvdW50CisgICAgICAgICAgICAgbXVsdCAq
IGJ1Y2tldHNfW2JdLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBlcmNlbnRhZ2UKKyAgICAg
ICAgICAgICBtdWx0ICogc3VtKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY3Vt
dWxhdGl2ZSBwZXJjZW50YWdlCisgICAgci5hcHBlbmQoYnVmKTsKKworICAgIC8vIEFkZCBoYXNo
IG1hcmtzIGJhc2VkIG9uIHBlcmNlbnRhZ2U7IDIwIG1hcmtzIGZvciAxMDAlLgorICAgIGludCBt
YXJrcyA9IHN0YXRpY19jYXN0PGludD4oMjAqKGJ1Y2tldHNfW2JdIC8gbnVtXykgKyAwLjUpOwor
ICAgIHIuYXBwZW5kKG1hcmtzLCAnIycpOworICAgIHIucHVzaF9iYWNrKCdcbicpOworICB9Cisg
IHJldHVybiByOworfQorCit9ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2hpc3RvZ3JhbS5oIGIvU291cmNlL1RoaXJkUGFy
dHkvbGV2ZWxkYi91dGlsL2hpc3RvZ3JhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFlZjlmM2M4YWJkZmM1MDg1
OGJlNDMzMTEwNjExMDg2YmIzYzBkYTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9sZXZlbGRiL3V0aWwvaGlzdG9ncmFtLmgKQEAgLTAsMCArMSw0MiBAQAorLy8gQ29weXJp
Z2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFV
VEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgorCisjaWZuZGVmIFNUT1JBR0Vf
TEVWRUxEQl9VVElMX0hJU1RPR1JBTV9IXworI2RlZmluZSBTVE9SQUdFX0xFVkVMREJfVVRJTF9I
SVNUT0dSQU1fSF8KKworI2luY2x1ZGUgPHN0cmluZz4KKworbmFtZXNwYWNlIGxldmVsZGIgewor
CitjbGFzcyBIaXN0b2dyYW0geworIHB1YmxpYzoKKyAgSGlzdG9ncmFtKCkgeyB9CisgIH5IaXN0
b2dyYW0oKSB7IH0KKworICB2b2lkIENsZWFyKCk7CisgIHZvaWQgQWRkKGRvdWJsZSB2YWx1ZSk7
CisgIHZvaWQgTWVyZ2UoY29uc3QgSGlzdG9ncmFtJiBvdGhlcik7CisKKyAgc3RkOjpzdHJpbmcg
VG9TdHJpbmcoKSBjb25zdDsKKworIHByaXZhdGU6CisgIGRvdWJsZSBtaW5fOworICBkb3VibGUg
bWF4XzsKKyAgZG91YmxlIG51bV87CisgIGRvdWJsZSBzdW1fOworICBkb3VibGUgc3VtX3NxdWFy
ZXNfOworCisgIGVudW0geyBrTnVtQnVja2V0cyA9IDE1NCB9OworICBzdGF0aWMgY29uc3QgZG91
YmxlIGtCdWNrZXRMaW1pdFtrTnVtQnVja2V0c107CisgIGRvdWJsZSBidWNrZXRzX1trTnVtQnVj
a2V0c107CisKKyAgZG91YmxlIE1lZGlhbigpIGNvbnN0OworICBkb3VibGUgUGVyY2VudGlsZShk
b3VibGUgcCkgY29uc3Q7CisgIGRvdWJsZSBBdmVyYWdlKCkgY29uc3Q7CisgIGRvdWJsZSBTdGFu
ZGFyZERldmlhdGlvbigpIGNvbnN0OworfTsKKworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKKwor
I2VuZGlmICAvLyBTVE9SQUdFX0xFVkVMREJfVVRJTF9ISVNUT0dSQU1fSF8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9sb2dnaW5nLmNjIGIvU291cmNlL1RoaXJk
UGFydHkvbGV2ZWxkYi91dGlsL2xvZ2dpbmcuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjJjZjI3ODUxMjNjNDVh
Yjc3ZmExNTgyNTZhNDVkOGU3MDBjMTQ2MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xldmVsZGIvdXRpbC9sb2dnaW5nLmNjCkBAIC0wLDAgKzEsODEgQEAKKy8vIENvcHly
aWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBB
VVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2luY2x1ZGUgInV0aWwv
bG9nZ2luZy5oIgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNp
bmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgImxldmVsZGIv
ZW52LmgiCisjaW5jbHVkZSAibGV2ZWxkYi9zbGljZS5oIgorCituYW1lc3BhY2UgbGV2ZWxkYiB7
CisKK3ZvaWQgQXBwZW5kTnVtYmVyVG8oc3RkOjpzdHJpbmcqIHN0ciwgdWludDY0X3QgbnVtKSB7
CisgIGNoYXIgYnVmWzMwXTsKKyAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVsbHUiLCAo
dW5zaWduZWQgbG9uZyBsb25nKSBudW0pOworICBzdHItPmFwcGVuZChidWYpOworfQorCit2b2lk
IEFwcGVuZEVzY2FwZWRTdHJpbmdUbyhzdGQ6OnN0cmluZyogc3RyLCBjb25zdCBTbGljZSYgdmFs
dWUpIHsKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZS5zaXplKCk7IGkrKykgeworICAg
IGNoYXIgYyA9IHZhbHVlW2ldOworICAgIGlmIChjID49ICcgJyAmJiBjIDw9ICd+JykgeworICAg
ICAgc3RyLT5wdXNoX2JhY2soYyk7CisgICAgfSBlbHNlIHsKKyAgICAgIGNoYXIgYnVmWzEwXTsK
KyAgICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJcXHglMDJ4IiwKKyAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oYykgJiAweGZmKTsKKyAgICAgIHN0ci0+YXBw
ZW5kKGJ1Zik7CisgICAgfQorICB9Cit9CisKK3N0ZDo6c3RyaW5nIE51bWJlclRvU3RyaW5nKHVp
bnQ2NF90IG51bSkgeworICBzdGQ6OnN0cmluZyByOworICBBcHBlbmROdW1iZXJUbygmciwgbnVt
KTsKKyAgcmV0dXJuIHI7Cit9CisKK3N0ZDo6c3RyaW5nIEVzY2FwZVN0cmluZyhjb25zdCBTbGlj
ZSYgdmFsdWUpIHsKKyAgc3RkOjpzdHJpbmcgcjsKKyAgQXBwZW5kRXNjYXBlZFN0cmluZ1RvKCZy
LCB2YWx1ZSk7CisgIHJldHVybiByOworfQorCitib29sIENvbnN1bWVDaGFyKFNsaWNlKiBpbiwg
Y2hhciBjKSB7CisgIGlmICghaW4tPmVtcHR5KCkgJiYgKCppbilbMF0gPT0gYykgeworICAgIGlu
LT5yZW1vdmVfcHJlZml4KDEpOworICAgIHJldHVybiB0cnVlOworICB9IGVsc2UgeworICAgIHJl
dHVybiBmYWxzZTsKKyAgfQorfQorCitib29sIENvbnN1bWVEZWNpbWFsTnVtYmVyKFNsaWNlKiBp
biwgdWludDY0X3QqIHZhbCkgeworICB1aW50NjRfdCB2ID0gMDsKKyAgaW50IGRpZ2l0cyA9IDA7
CisgIHdoaWxlICghaW4tPmVtcHR5KCkpIHsKKyAgICBjaGFyIGMgPSAoKmluKVswXTsKKyAgICBp
ZiAoYyA+PSAnMCcgJiYgYyA8PSAnOScpIHsKKyAgICAgICsrZGlnaXRzOworICAgICAgY29uc3Qg
aW50IGRlbHRhID0gKGMgLSAnMCcpOworICAgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGtNYXhV
aW50NjQgPSB+c3RhdGljX2Nhc3Q8dWludDY0X3Q+KDApOworICAgICAgaWYgKHYgPiBrTWF4VWlu
dDY0LzEwIHx8CisgICAgICAgICAgKHYgPT0ga01heFVpbnQ2NC8xMCAmJiBkZWx0YSA+IGtNYXhV
aW50NjQlMTApKSB7CisgICAgICAgIC8vIE92ZXJmbG93CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgIH0KKyAgICAgIHYgPSAodiAqIDEwKSArIGRlbHRhOworICAgICAgaW4tPnJlbW92ZV9w
cmVmaXgoMSk7CisgICAgfSBlbHNlIHsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICAqdmFs
ID0gdjsKKyAgcmV0dXJuIChkaWdpdHMgPiAwKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIGxldmVs
ZGIKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9sb2dnaW5nLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvbG9nZ2luZy5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIw
YzVkYTgxM2U4NjU4Yzk3MTJiNTUyOWY0YjIxOWNiMWE5NDU1MDgKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvbG9nZ2luZy5oCkBAIC0wLDAgKzEsNDcg
QEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKy8vCisv
LyBNdXN0IG5vdCBiZSBpbmNsdWRlZCBmcm9tIGFueSAuaCBmaWxlcyB0byBhdm9pZCBwb2xsdXRp
bmcgdGhlIG5hbWVzcGFjZQorLy8gd2l0aCBtYWNyb3MuCisKKyNpZm5kZWYgU1RPUkFHRV9MRVZF
TERCX1VUSUxfTE9HR0lOR19IXworI2RlZmluZSBTVE9SQUdFX0xFVkVMREJfVVRJTF9MT0dHSU5H
X0hfCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUg
PHN0cmluZz4KKyNpbmNsdWRlICJwb3J0L3BvcnQuaCIKKworbmFtZXNwYWNlIGxldmVsZGIgewor
CitjbGFzcyBTbGljZTsKK2NsYXNzIFdyaXRhYmxlRmlsZTsKKworLy8gQXBwZW5kIGEgaHVtYW4t
cmVhZGFibGUgcHJpbnRvdXQgb2YgIm51bSIgdG8gKnN0cgorZXh0ZXJuIHZvaWQgQXBwZW5kTnVt
YmVyVG8oc3RkOjpzdHJpbmcqIHN0ciwgdWludDY0X3QgbnVtKTsKKworLy8gQXBwZW5kIGEgaHVt
YW4tcmVhZGFibGUgcHJpbnRvdXQgb2YgInZhbHVlIiB0byAqc3RyLgorLy8gRXNjYXBlcyBhbnkg
bm9uLXByaW50YWJsZSBjaGFyYWN0ZXJzIGZvdW5kIGluICJ2YWx1ZSIuCitleHRlcm4gdm9pZCBB
cHBlbmRFc2NhcGVkU3RyaW5nVG8oc3RkOjpzdHJpbmcqIHN0ciwgY29uc3QgU2xpY2UmIHZhbHVl
KTsKKworLy8gUmV0dXJuIGEgaHVtYW4tcmVhZGFibGUgcHJpbnRvdXQgb2YgIm51bSIKK2V4dGVy
biBzdGQ6OnN0cmluZyBOdW1iZXJUb1N0cmluZyh1aW50NjRfdCBudW0pOworCisvLyBSZXR1cm4g
YSBodW1hbi1yZWFkYWJsZSB2ZXJzaW9uIG9mICJ2YWx1ZSIuCisvLyBFc2NhcGVzIGFueSBub24t
cHJpbnRhYmxlIGNoYXJhY3RlcnMgZm91bmQgaW4gInZhbHVlIi4KK2V4dGVybiBzdGQ6OnN0cmlu
ZyBFc2NhcGVTdHJpbmcoY29uc3QgU2xpY2UmIHZhbHVlKTsKKworLy8gSWYgKmluIHN0YXJ0cyB3
aXRoICJjIiwgYWR2YW5jZXMgKmluIHBhc3QgdGhlIGZpcnN0IGNoYXJhY3RlciBhbmQKKy8vIHJl
dHVybnMgdHJ1ZS4gIE90aGVyd2lzZSwgcmV0dXJucyBmYWxzZS4KK2V4dGVybiBib29sIENvbnN1
bWVDaGFyKFNsaWNlKiBpbiwgY2hhciBjKTsKKworLy8gUGFyc2UgYSBodW1hbi1yZWFkYWJsZSBu
dW1iZXIgZnJvbSAiKmluIiBpbnRvICp2YWx1ZS4gIE9uIHN1Y2Nlc3MsCisvLyBhZHZhbmNlcyAi
KmluIiBwYXN0IHRoZSBjb25zdW1lZCBudW1iZXIgYW5kIHNldHMgIip2YWwiIHRvIHRoZQorLy8g
bnVtZXJpYyB2YWx1ZS4gIE90aGVyd2lzZSwgcmV0dXJucyBmYWxzZSBhbmQgbGVhdmVzICppbiBp
biBhbgorLy8gdW5zcGVjaWZpZWQgc3RhdGUuCitleHRlcm4gYm9vbCBDb25zdW1lRGVjaW1hbE51
bWJlcihTbGljZSogaW4sIHVpbnQ2NF90KiB2YWwpOworCit9ICAvLyBuYW1lc3BhY2UgbGV2ZWxk
YgorCisjZW5kaWYgIC8vIFNUT1JBR0VfTEVWRUxEQl9VVElMX0xPR0dJTkdfSF8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9tdXRleGxvY2suaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xldmVsZGIvdXRpbC9tdXRleGxvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZmY1YTllZmEx
NWVmYTE2NmI0MjdlZjk2MTFjY2M1OGM5NmEzOTg0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL211dGV4bG9jay5oCkBAIC0wLDAgKzEsNDEgQEAKKy8v
IENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2Vl
IHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2lmbmRlZiBT
VE9SQUdFX0xFVkVMREJfVVRJTF9NVVRFWExPQ0tfSF8KKyNkZWZpbmUgU1RPUkFHRV9MRVZFTERC
X1VUSUxfTVVURVhMT0NLX0hfCisKKyNpbmNsdWRlICJwb3J0L3BvcnQuaCIKKyNpbmNsdWRlICJw
b3J0L3RocmVhZF9hbm5vdGF0aW9ucy5oIgorCituYW1lc3BhY2UgbGV2ZWxkYiB7CisKKy8vIEhl
bHBlciBjbGFzcyB0aGF0IGxvY2tzIGEgbXV0ZXggb24gY29uc3RydWN0aW9uIGFuZCB1bmxvY2tz
IHRoZSBtdXRleCB3aGVuCisvLyB0aGUgZGVzdHJ1Y3RvciBvZiB0aGUgTXV0ZXhMb2NrIG9iamVj
dCBpcyBpbnZva2VkLgorLy8KKy8vIFR5cGljYWwgdXNhZ2U6CisvLworLy8gICB2b2lkIE15Q2xh
c3M6Ok15TWV0aG9kKCkgeworLy8gICAgIE11dGV4TG9jayBsKCZtdV8pOyAgICAgICAvLyBtdV8g
aXMgYW4gaW5zdGFuY2UgdmFyaWFibGUKKy8vICAgICAuLi4gc29tZSBjb21wbGV4IGNvZGUsIHBv
c3NpYmx5IHdpdGggbXVsdGlwbGUgcmV0dXJuIHBhdGhzIC4uLgorLy8gICB9CisKK2NsYXNzIFND
T1BFRF9MT0NLQUJMRSBNdXRleExvY2sgeworIHB1YmxpYzoKKyAgZXhwbGljaXQgTXV0ZXhMb2Nr
KHBvcnQ6Ok11dGV4ICptdSkgRVhDTFVTSVZFX0xPQ0tfRlVOQ1RJT04obXUpCisgICAgICA6IG11
XyhtdSkgIHsKKyAgICB0aGlzLT5tdV8tPkxvY2soKTsKKyAgfQorICB+TXV0ZXhMb2NrKCkgVU5M
T0NLX0ZVTkNUSU9OKCkgeyB0aGlzLT5tdV8tPlVubG9jaygpOyB9CisKKyBwcml2YXRlOgorICBw
b3J0OjpNdXRleCAqY29uc3QgbXVfOworICAvLyBObyBjb3B5aW5nIGFsbG93ZWQKKyAgTXV0ZXhM
b2NrKGNvbnN0IE11dGV4TG9jayYpOworICB2b2lkIG9wZXJhdG9yPShjb25zdCBNdXRleExvY2sm
KTsKK307CisKK30gIC8vIG5hbWVzcGFjZSBsZXZlbGRiCisKKworI2VuZGlmICAvLyBTVE9SQUdF
X0xFVkVMREJfVVRJTF9NVVRFWExPQ0tfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xldmVsZGIvdXRpbC9vcHRpb25zLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGls
L29wdGlvbnMuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzZhZjViOTMwMmQ0MzdkOTg0N2IyYTkzYzg3Njk3MjMy
ZDAyN2NhYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRp
bC9vcHRpb25zLmNjCkBAIC0wLDAgKzEsMjkgQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUg
TGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5h
bWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2luY2x1ZGUgImxldmVsZGIvb3B0aW9ucy5oIgorCisj
aW5jbHVkZSAibGV2ZWxkYi9jb21wYXJhdG9yLmgiCisjaW5jbHVkZSAibGV2ZWxkYi9lbnYuaCIK
KworbmFtZXNwYWNlIGxldmVsZGIgeworCitPcHRpb25zOjpPcHRpb25zKCkKKyAgICA6IGNvbXBh
cmF0b3IoQnl0ZXdpc2VDb21wYXJhdG9yKCkpLAorICAgICAgY3JlYXRlX2lmX21pc3NpbmcoZmFs
c2UpLAorICAgICAgZXJyb3JfaWZfZXhpc3RzKGZhbHNlKSwKKyAgICAgIHBhcmFub2lkX2NoZWNr
cyhmYWxzZSksCisgICAgICBlbnYoRW52OjpEZWZhdWx0KCkpLAorICAgICAgaW5mb19sb2coTlVM
TCksCisgICAgICB3cml0ZV9idWZmZXJfc2l6ZSg0PDwyMCksCisgICAgICBtYXhfb3Blbl9maWxl
cygxMDAwKSwKKyAgICAgIGJsb2NrX2NhY2hlKE5VTEwpLAorICAgICAgYmxvY2tfc2l6ZSg0MDk2
KSwKKyAgICAgIGJsb2NrX3Jlc3RhcnRfaW50ZXJ2YWwoMTYpLAorICAgICAgY29tcHJlc3Npb24o
a1NuYXBweUNvbXByZXNzaW9uKSwKKyAgICAgIGZpbHRlcl9wb2xpY3koTlVMTCkgeworfQorCisK
K30gIC8vIG5hbWVzcGFjZSBsZXZlbGRiCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
ZXZlbGRiL3V0aWwvcG9zaXhfbG9nZ2VyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0
aWwvcG9zaXhfbG9nZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTc0MWIxYWZhZDkzMDg0NGYyZmYwNDdkMjQ0
YTQ4NjNlOGMwMTYxMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVs
ZGIvdXRpbC9wb3NpeF9sb2dnZXIuaApAQCAtMCwwICsxLDk4IEBACisvLyBDb3B5cmlnaHQgKGMp
IDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBm
aWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCisvLworLy8gTG9nZ2VyIGltcGxlbWVudGF0
aW9uIHRoYXQgY2FuIGJlIHNoYXJlZCBieSBhbGwgZW52aXJvbm1lbnRzCisvLyB3aGVyZSBlbm91
Z2ggcG9zaXggZnVuY3Rpb25hbGl0eSBpcyBhdmFpbGFibGUuCisKKyNpZm5kZWYgU1RPUkFHRV9M
RVZFTERCX1VUSUxfUE9TSVhfTE9HR0VSX0hfCisjZGVmaW5lIFNUT1JBR0VfTEVWRUxEQl9VVElM
X1BPU0lYX0xPR0dFUl9IXworCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPHN0ZGlv
Lmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSAi
bGV2ZWxkYi9lbnYuaCIKKworbmFtZXNwYWNlIGxldmVsZGIgeworCitjbGFzcyBQb3NpeExvZ2dl
ciA6IHB1YmxpYyBMb2dnZXIgeworIHByaXZhdGU6CisgIEZJTEUqIGZpbGVfOworICB1aW50NjRf
dCAoKmdldHRpZF8pKCk7ICAvLyBSZXR1cm4gdGhlIHRocmVhZCBpZCBmb3IgdGhlIGN1cnJlbnQg
dGhyZWFkCisgcHVibGljOgorICBQb3NpeExvZ2dlcihGSUxFKiBmLCB1aW50NjRfdCAoKmdldHRp
ZCkoKSkgOiBmaWxlXyhmKSwgZ2V0dGlkXyhnZXR0aWQpIHsgfQorICB2aXJ0dWFsIH5Qb3NpeExv
Z2dlcigpIHsKKyAgICBmY2xvc2UoZmlsZV8pOworICB9CisgIHZpcnR1YWwgdm9pZCBMb2d2KGNv
bnN0IGNoYXIqIGZvcm1hdCwgdmFfbGlzdCBhcCkgeworICAgIGNvbnN0IHVpbnQ2NF90IHRocmVh
ZF9pZCA9ICgqZ2V0dGlkXykoKTsKKworICAgIC8vIFdlIHRyeSB0d2ljZTogdGhlIGZpcnN0IHRp
bWUgd2l0aCBhIGZpeGVkLXNpemUgc3RhY2sgYWxsb2NhdGVkIGJ1ZmZlciwKKyAgICAvLyBhbmQg
dGhlIHNlY29uZCB0aW1lIHdpdGggYSBtdWNoIGxhcmdlciBkeW5hbWljYWxseSBhbGxvY2F0ZWQg
YnVmZmVyLgorICAgIGNoYXIgYnVmZmVyWzUwMF07CisgICAgZm9yIChpbnQgaXRlciA9IDA7IGl0
ZXIgPCAyOyBpdGVyKyspIHsKKyAgICAgIGNoYXIqIGJhc2U7CisgICAgICBpbnQgYnVmc2l6ZTsK
KyAgICAgIGlmIChpdGVyID09IDApIHsKKyAgICAgICAgYnVmc2l6ZSA9IHNpemVvZihidWZmZXIp
OworICAgICAgICBiYXNlID0gYnVmZmVyOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgYnVmc2l6
ZSA9IDMwMDAwOworICAgICAgICBiYXNlID0gbmV3IGNoYXJbYnVmc2l6ZV07CisgICAgICB9Cisg
ICAgICBjaGFyKiBwID0gYmFzZTsKKyAgICAgIGNoYXIqIGxpbWl0ID0gYmFzZSArIGJ1ZnNpemU7
CisKKyAgICAgIHN0cnVjdCB0aW1ldmFsIG5vd190djsKKyAgICAgIGdldHRpbWVvZmRheSgmbm93
X3R2LCBOVUxMKTsKKyAgICAgIGNvbnN0IHRpbWVfdCBzZWNvbmRzID0gbm93X3R2LnR2X3NlYzsK
KyAgICAgIHN0cnVjdCB0bSB0OworICAgICAgbG9jYWx0aW1lX3IoJnNlY29uZHMsICZ0KTsKKyAg
ICAgIHAgKz0gc25wcmludGYocCwgbGltaXQgLSBwLAorICAgICAgICAgICAgICAgICAgICAiJTA0
ZC8lMDJkLyUwMmQtJTAyZDolMDJkOiUwMmQuJTA2ZCAlbGx4ICIsCisgICAgICAgICAgICAgICAg
ICAgIHQudG1feWVhciArIDE5MDAsCisgICAgICAgICAgICAgICAgICAgIHQudG1fbW9uICsgMSwK
KyAgICAgICAgICAgICAgICAgICAgdC50bV9tZGF5LAorICAgICAgICAgICAgICAgICAgICB0LnRt
X2hvdXIsCisgICAgICAgICAgICAgICAgICAgIHQudG1fbWluLAorICAgICAgICAgICAgICAgICAg
ICB0LnRtX3NlYywKKyAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50Pihub3dfdHYu
dHZfdXNlYyksCisgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGxvbmcgbG9uZyB1bnNp
Z25lZCBpbnQ+KHRocmVhZF9pZCkpOworCisgICAgICAvLyBQcmludCB0aGUgbWVzc2FnZQorICAg
ICAgaWYgKHAgPCBsaW1pdCkgeworICAgICAgICB2YV9saXN0IGJhY2t1cF9hcDsKKyAgICAgICAg
dmFfY29weShiYWNrdXBfYXAsIGFwKTsKKyAgICAgICAgcCArPSB2c25wcmludGYocCwgbGltaXQg
LSBwLCBmb3JtYXQsIGJhY2t1cF9hcCk7CisgICAgICAgIHZhX2VuZChiYWNrdXBfYXApOworICAg
ICAgfQorCisgICAgICAvLyBUcnVuY2F0ZSB0byBhdmFpbGFibGUgc3BhY2UgaWYgbmVjZXNzYXJ5
CisgICAgICBpZiAocCA+PSBsaW1pdCkgeworICAgICAgICBpZiAoaXRlciA9PSAwKSB7CisgICAg
ICAgICAgY29udGludWU7ICAgICAgIC8vIFRyeSBhZ2FpbiB3aXRoIGxhcmdlciBidWZmZXIKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBwID0gbGltaXQgLSAxOworICAgICAgICB9CisgICAg
ICB9CisKKyAgICAgIC8vIEFkZCBuZXdsaW5lIGlmIG5lY2Vzc2FyeQorICAgICAgaWYgKHAgPT0g
YmFzZSB8fCBwWy0xXSAhPSAnXG4nKSB7CisgICAgICAgICpwKysgPSAnXG4nOworICAgICAgfQor
CisgICAgICBhc3NlcnQocCA8PSBsaW1pdCk7CisgICAgICBmd3JpdGUoYmFzZSwgMSwgcCAtIGJh
c2UsIGZpbGVfKTsKKyAgICAgIGZmbHVzaChmaWxlXyk7CisgICAgICBpZiAoYmFzZSAhPSBidWZm
ZXIpIHsKKyAgICAgICAgZGVsZXRlW10gYmFzZTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAg
IH0KKyAgfQorfTsKKworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKKworI2VuZGlmICAvLyBTVE9S
QUdFX0xFVkVMREJfVVRJTF9QT1NJWF9MT0dHRVJfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xldmVsZGIvdXRpbC9yYW5kb20uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIv
dXRpbC9yYW5kb20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNzUzODI0MmVhNTU5YWQzMTM5NmI5OTRhNTE3MmYx
M2VjYjNkNzc1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91
dGlsL3JhbmRvbS5oCkBAIC0wLDAgKzEsNTkgQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUg
TGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5h
bWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2lmbmRlZiBTVE9SQUdFX0xFVkVMREJfVVRJTF9SQU5E
T01fSF8KKyNkZWZpbmUgU1RPUkFHRV9MRVZFTERCX1VUSUxfUkFORE9NX0hfCisKKyNpbmNsdWRl
IDxzdGRpbnQuaD4KKworbmFtZXNwYWNlIGxldmVsZGIgeworCisvLyBBIHZlcnkgc2ltcGxlIHJh
bmRvbSBudW1iZXIgZ2VuZXJhdG9yLiAgTm90IGVzcGVjaWFsbHkgZ29vZCBhdAorLy8gZ2VuZXJh
dGluZyB0cnVseSByYW5kb20gYml0cywgYnV0IGdvb2QgZW5vdWdoIGZvciBvdXIgbmVlZHMgaW4g
dGhpcworLy8gcGFja2FnZS4KK2NsYXNzIFJhbmRvbSB7CisgcHJpdmF0ZToKKyAgdWludDMyX3Qg
c2VlZF87CisgcHVibGljOgorICBleHBsaWNpdCBSYW5kb20odWludDMyX3QgcykgOiBzZWVkXyhz
ICYgMHg3ZmZmZmZmZnUpIHsgfQorICB1aW50MzJfdCBOZXh0KCkgeworICAgIHN0YXRpYyBjb25z
dCB1aW50MzJfdCBNID0gMjE0NzQ4MzY0N0w7ICAgLy8gMl4zMS0xCisgICAgc3RhdGljIGNvbnN0
IHVpbnQ2NF90IEEgPSAxNjgwNzsgIC8vIGJpdHMgMTQsIDgsIDcsIDUsIDIsIDEsIDAKKyAgICAv
LyBXZSBhcmUgY29tcHV0aW5nCisgICAgLy8gICAgICAgc2VlZF8gPSAoc2VlZF8gKiBBKSAlIE0s
ICAgIHdoZXJlIE0gPSAyXjMxLTEKKyAgICAvLworICAgIC8vIHNlZWRfIG11c3Qgbm90IGJlIHpl
cm8gb3IgTSwgb3IgZWxzZSBhbGwgc3Vic2VxdWVudCBjb21wdXRlZCB2YWx1ZXMKKyAgICAvLyB3
aWxsIGJlIHplcm8gb3IgTSByZXNwZWN0aXZlbHkuICBGb3IgYWxsIG90aGVyIHZhbHVlcywgc2Vl
ZF8gd2lsbCBlbmQKKyAgICAvLyB1cCBjeWNsaW5nIHRocm91Z2ggZXZlcnkgbnVtYmVyIGluIFsx
LE0tMV0KKyAgICB1aW50NjRfdCBwcm9kdWN0ID0gc2VlZF8gKiBBOworCisgICAgLy8gQ29tcHV0
ZSAocHJvZHVjdCAlIE0pIHVzaW5nIHRoZSBmYWN0IHRoYXQgKCh4IDw8IDMxKSAlIE0pID09IHgu
CisgICAgc2VlZF8gPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oKHByb2R1Y3QgPj4gMzEpICsgKHBy
b2R1Y3QgJiBNKSk7CisgICAgLy8gVGhlIGZpcnN0IHJlZHVjdGlvbiBtYXkgb3ZlcmZsb3cgYnkg
MSBiaXQsIHNvIHdlIG1heSBuZWVkIHRvCisgICAgLy8gcmVwZWF0LiAgbW9kID09IE0gaXMgbm90
IHBvc3NpYmxlOyB1c2luZyA+IGFsbG93cyB0aGUgZmFzdGVyCisgICAgLy8gc2lnbi1iaXQtYmFz
ZWQgdGVzdC4KKyAgICBpZiAoc2VlZF8gPiBNKSB7CisgICAgICBzZWVkXyAtPSBNOworICAgIH0K
KyAgICByZXR1cm4gc2VlZF87CisgIH0KKyAgLy8gUmV0dXJucyBhIHVuaWZvcm1seSBkaXN0cmli
dXRlZCB2YWx1ZSBpbiB0aGUgcmFuZ2UgWzAuLm4tMV0KKyAgLy8gUkVRVUlSRVM6IG4gPiAwCisg
IHVpbnQzMl90IFVuaWZvcm0oaW50IG4pIHsgcmV0dXJuIE5leHQoKSAlIG47IH0KKworICAvLyBS
YW5kb21seSByZXR1cm5zIHRydWUgfiIxL24iIG9mIHRoZSB0aW1lLCBhbmQgZmFsc2Ugb3RoZXJ3
aXNlLgorICAvLyBSRVFVSVJFUzogbiA+IDAKKyAgYm9vbCBPbmVJbihpbnQgbikgeyByZXR1cm4g
KE5leHQoKSAlIG4pID09IDA7IH0KKworICAvLyBTa2V3ZWQ6IHBpY2sgImJhc2UiIHVuaWZvcm1s
eSBmcm9tIHJhbmdlIFswLG1heF9sb2ddIGFuZCB0aGVuCisgIC8vIHJldHVybiAiYmFzZSIgcmFu
ZG9tIGJpdHMuICBUaGUgZWZmZWN0IGlzIHRvIHBpY2sgYSBudW1iZXIgaW4gdGhlCisgIC8vIHJh
bmdlIFswLDJebWF4X2xvZy0xXSB3aXRoIGV4cG9uZW50aWFsIGJpYXMgdG93YXJkcyBzbWFsbGVy
IG51bWJlcnMuCisgIHVpbnQzMl90IFNrZXdlZChpbnQgbWF4X2xvZykgeworICAgIHJldHVybiBV
bmlmb3JtKDEgPDwgVW5pZm9ybShtYXhfbG9nICsgMSkpOworICB9Cit9OworCit9ICAvLyBuYW1l
c3BhY2UgbGV2ZWxkYgorCisjZW5kaWYgIC8vIFNUT1JBR0VfTEVWRUxEQl9VVElMX1JBTkRPTV9I
XwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL3N0YXR1cy5jYyBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9zdGF0dXMuY2MKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTQ0
ZjM1YjMxNDlmYThmZTg4ZDljYTMyZGJmOTJmYmI5ZjZkNTM0YwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9zdGF0dXMuY2MKQEAgLTAsMCArMSw3NSBA
QAorLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgorCisjaW5j
bHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJwb3J0L3BvcnQuaCIKKyNpbmNsdWRlICJsZXZlbGRi
L3N0YXR1cy5oIgorCituYW1lc3BhY2UgbGV2ZWxkYiB7CisKK2NvbnN0IGNoYXIqIFN0YXR1czo6
Q29weVN0YXRlKGNvbnN0IGNoYXIqIHN0YXRlKSB7CisgIHVpbnQzMl90IHNpemU7CisgIG1lbWNw
eSgmc2l6ZSwgc3RhdGUsIHNpemVvZihzaXplKSk7CisgIGNoYXIqIHJlc3VsdCA9IG5ldyBjaGFy
W3NpemUgKyA1XTsKKyAgbWVtY3B5KHJlc3VsdCwgc3RhdGUsIHNpemUgKyA1KTsKKyAgcmV0dXJu
IHJlc3VsdDsKK30KKworU3RhdHVzOjpTdGF0dXMoQ29kZSBjb2RlLCBjb25zdCBTbGljZSYgbXNn
LCBjb25zdCBTbGljZSYgbXNnMikgeworICBhc3NlcnQoY29kZSAhPSBrT2spOworICBjb25zdCB1
aW50MzJfdCBsZW4xID0gbXNnLnNpemUoKTsKKyAgY29uc3QgdWludDMyX3QgbGVuMiA9IG1zZzIu
c2l6ZSgpOworICBjb25zdCB1aW50MzJfdCBzaXplID0gbGVuMSArIChsZW4yID8gKDIgKyBsZW4y
KSA6IDApOworICBjaGFyKiByZXN1bHQgPSBuZXcgY2hhcltzaXplICsgNV07CisgIG1lbWNweShy
ZXN1bHQsICZzaXplLCBzaXplb2Yoc2l6ZSkpOworICByZXN1bHRbNF0gPSBzdGF0aWNfY2FzdDxj
aGFyPihjb2RlKTsKKyAgbWVtY3B5KHJlc3VsdCArIDUsIG1zZy5kYXRhKCksIGxlbjEpOworICBp
ZiAobGVuMikgeworICAgIHJlc3VsdFs1ICsgbGVuMV0gPSAnOic7CisgICAgcmVzdWx0WzYgKyBs
ZW4xXSA9ICcgJzsKKyAgICBtZW1jcHkocmVzdWx0ICsgNyArIGxlbjEsIG1zZzIuZGF0YSgpLCBs
ZW4yKTsKKyAgfQorICBzdGF0ZV8gPSByZXN1bHQ7Cit9CisKK3N0ZDo6c3RyaW5nIFN0YXR1czo6
VG9TdHJpbmcoKSBjb25zdCB7CisgIGlmIChzdGF0ZV8gPT0gTlVMTCkgeworICAgIHJldHVybiAi
T0siOworICB9IGVsc2UgeworICAgIGNoYXIgdG1wWzMwXTsKKyAgICBjb25zdCBjaGFyKiB0eXBl
OworICAgIHN3aXRjaCAoY29kZSgpKSB7CisgICAgICBjYXNlIGtPazoKKyAgICAgICAgdHlwZSA9
ICJPSyI7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBrTm90Rm91bmQ6CisgICAgICAgIHR5
cGUgPSAiTm90Rm91bmQ6ICI7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBrQ29ycnVwdGlv
bjoKKyAgICAgICAgdHlwZSA9ICJDb3JydXB0aW9uOiAiOworICAgICAgICBicmVhazsKKyAgICAg
IGNhc2Uga05vdFN1cHBvcnRlZDoKKyAgICAgICAgdHlwZSA9ICJOb3QgaW1wbGVtZW50ZWQ6ICI7
CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBrSW52YWxpZEFyZ3VtZW50OgorICAgICAgICB0
eXBlID0gIkludmFsaWQgYXJndW1lbnQ6ICI7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBr
SU9FcnJvcjoKKyAgICAgICAgdHlwZSA9ICJJTyBlcnJvcjogIjsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICBkZWZhdWx0OgorICAgICAgICBzbnByaW50Zih0bXAsIHNpemVvZih0bXApLCAiVW5rbm93
biBjb2RlKCVkKTogIiwKKyAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50Pihjb2RlKCkp
KTsKKyAgICAgICAgdHlwZSA9IHRtcDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHN0ZDo6
c3RyaW5nIHJlc3VsdCh0eXBlKTsKKyAgICB1aW50MzJfdCBsZW5ndGg7CisgICAgbWVtY3B5KCZs
ZW5ndGgsIHN0YXRlXywgc2l6ZW9mKGxlbmd0aCkpOworICAgIHJlc3VsdC5hcHBlbmQoc3RhdGVf
ICsgNSwgbGVuZ3RoKTsKKyAgICByZXR1cm4gcmVzdWx0OworICB9Cit9CisKK30gIC8vIG5hbWVz
cGFjZSBsZXZlbGRiCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwv
dGVzdGhhcm5lc3MuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvdGVzdGhhcm5l
c3MuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZWIxYmRkNTU0YTNlYTJmMDZjZDQ1MDUzYWIzZGY4YzcxYzk2MTBh
OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC90ZXN0
aGFybmVzcy5jYwpAQCAtMCwwICsxLDc3IEBACisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExl
dmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1l
cyBvZiBjb250cmlidXRvcnMuCisKKyNpbmNsdWRlICJ1dGlsL3Rlc3RoYXJuZXNzLmgiCisKKyNp
bmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQu
aD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworbmFtZXNwYWNlIGxldmVsZGIgeworbmFtZXNw
YWNlIHRlc3QgeworCituYW1lc3BhY2Ugeworc3RydWN0IFRlc3QgeworICBjb25zdCBjaGFyKiBi
YXNlOworICBjb25zdCBjaGFyKiBuYW1lOworICB2b2lkICgqZnVuYykoKTsKK307CitzdGQ6OnZl
Y3RvcjxUZXN0PiogdGVzdHM7Cit9CisKK2Jvb2wgUmVnaXN0ZXJUZXN0KGNvbnN0IGNoYXIqIGJh
c2UsIGNvbnN0IGNoYXIqIG5hbWUsIHZvaWQgKCpmdW5jKSgpKSB7CisgIGlmICh0ZXN0cyA9PSBO
VUxMKSB7CisgICAgdGVzdHMgPSBuZXcgc3RkOjp2ZWN0b3I8VGVzdD47CisgIH0KKyAgVGVzdCB0
OworICB0LmJhc2UgPSBiYXNlOworICB0Lm5hbWUgPSBuYW1lOworICB0LmZ1bmMgPSBmdW5jOwor
ICB0ZXN0cy0+cHVzaF9iYWNrKHQpOworICByZXR1cm4gdHJ1ZTsKK30KKworaW50IFJ1bkFsbFRl
c3RzKCkgeworICBjb25zdCBjaGFyKiBtYXRjaGVyID0gZ2V0ZW52KCJMRVZFTERCX1RFU1RTIik7
CisKKyAgaW50IG51bSA9IDA7CisgIGlmICh0ZXN0cyAhPSBOVUxMKSB7CisgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCB0ZXN0cy0+c2l6ZSgpOyBpKyspIHsKKyAgICAgIGNvbnN0IFRlc3QmIHQgPSAo
KnRlc3RzKVtpXTsKKyAgICAgIGlmIChtYXRjaGVyICE9IE5VTEwpIHsKKyAgICAgICAgc3RkOjpz
dHJpbmcgbmFtZSA9IHQuYmFzZTsKKyAgICAgICAgbmFtZS5wdXNoX2JhY2soJy4nKTsKKyAgICAg
ICAgbmFtZS5hcHBlbmQodC5uYW1lKTsKKyAgICAgICAgaWYgKHN0cnN0cihuYW1lLmNfc3RyKCks
IG1hdGNoZXIpID09IE5VTEwpIHsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAg
ICAgfQorICAgICAgZnByaW50ZihzdGRlcnIsICI9PT09IFRlc3QgJXMuJXNcbiIsIHQuYmFzZSwg
dC5uYW1lKTsKKyAgICAgICgqdC5mdW5jKSgpOworICAgICAgKytudW07CisgICAgfQorICB9Cisg
IGZwcmludGYoc3RkZXJyLCAiPT09PSBQQVNTRUQgJWQgdGVzdHNcbiIsIG51bSk7CisgIHJldHVy
biAwOworfQorCitzdGQ6OnN0cmluZyBUbXBEaXIoKSB7CisgIHN0ZDo6c3RyaW5nIGRpcjsKKyAg
U3RhdHVzIHMgPSBFbnY6OkRlZmF1bHQoKS0+R2V0VGVzdERpcmVjdG9yeSgmZGlyKTsKKyAgQVNT
RVJUX1RSVUUocy5vaygpKSA8PCBzLlRvU3RyaW5nKCk7CisgIHJldHVybiBkaXI7Cit9CisKK2lu
dCBSYW5kb21TZWVkKCkgeworICBjb25zdCBjaGFyKiBlbnYgPSBnZXRlbnYoIlRFU1RfUkFORE9N
X1NFRUQiKTsKKyAgaW50IHJlc3VsdCA9IChlbnYgIT0gTlVMTCA/IGF0b2koZW52KSA6IDMwMSk7
CisgIGlmIChyZXN1bHQgPD0gMCkgeworICAgIHJlc3VsdCA9IDMwMTsKKyAgfQorICByZXR1cm4g
cmVzdWx0OworfQorCit9ICAvLyBuYW1lc3BhY2UgdGVzdAorfSAgLy8gbmFtZXNwYWNlIGxldmVs
ZGIKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC90ZXN0aGFybmVz
cy5oIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL3Rlc3RoYXJuZXNzLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZGE0ZmU2OGJiNGU3NmVlNjlhZjEzNmQ3NmY5NDE3ZDM0OWZhOTYwNQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC90ZXN0aGFybmVzcy5oCkBA
IC0wLDAgKzEsMTM4IEBACisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmli
dXRvcnMuCisKKyNpZm5kZWYgU1RPUkFHRV9MRVZFTERCX1VUSUxfVEVTVEhBUk5FU1NfSF8KKyNk
ZWZpbmUgU1RPUkFHRV9MRVZFTERCX1VUSUxfVEVTVEhBUk5FU1NfSF8KKworI2luY2x1ZGUgPHN0
ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3N0cmVhbT4KKyNpbmNsdWRl
ICJsZXZlbGRiL2Vudi5oIgorI2luY2x1ZGUgImxldmVsZGIvc2xpY2UuaCIKKyNpbmNsdWRlICJ1
dGlsL3JhbmRvbS5oIgorCituYW1lc3BhY2UgbGV2ZWxkYiB7CituYW1lc3BhY2UgdGVzdCB7CisK
Ky8vIFJ1biBzb21lIG9mIHRoZSB0ZXN0cyByZWdpc3RlcmVkIGJ5IHRoZSBURVNUKCkgbWFjcm8u
ICBJZiB0aGUKKy8vIGVudmlyb25tZW50IHZhcmlhYmxlICJMRVZFTERCX1RFU1RTIiBpcyBub3Qg
c2V0LCBydW5zIGFsbCB0ZXN0cy4KKy8vIE90aGVyd2lzZSwgcnVucyBvbmx5IHRoZSB0ZXN0cyB3
aG9zZSBuYW1lIGNvbnRhaW5zIHRoZSB2YWx1ZSBvZgorLy8gIkxFVkVMREJfVEVTVFMiIGFzIGEg
c3Vic3RyaW5nLiAgRS5nLiwgc3VwcG9zZSB0aGUgdGVzdHMgYXJlOgorLy8gICAgVEVTVChGb28s
IEhlbGxvKSB7IC4uLiB9CisvLyAgICBURVNUKEZvbywgV29ybGQpIHsgLi4uIH0KKy8vIExFVkVM
REJfVEVTVFM9SGVsbG8gd2lsbCBydW4gdGhlIGZpcnN0IHRlc3QKKy8vIExFVkVMREJfVEVTVFM9
byAgICAgd2lsbCBydW4gYm90aCB0ZXN0cworLy8gTEVWRUxEQl9URVNUUz1KdW5rICB3aWxsIHJ1
biBubyB0ZXN0cworLy8KKy8vIFJldHVybnMgMCBpZiBhbGwgdGVzdHMgcGFzcy4KKy8vIERpZXMg
b3IgcmV0dXJucyBhIG5vbi16ZXJvIHZhbHVlIGlmIHNvbWUgdGVzdCBmYWlscy4KK2V4dGVybiBp
bnQgUnVuQWxsVGVzdHMoKTsKKworLy8gUmV0dXJuIHRoZSBkaXJlY3RvcnkgdG8gdXNlIGZvciB0
ZW1wb3Jhcnkgc3RvcmFnZS4KK2V4dGVybiBzdGQ6OnN0cmluZyBUbXBEaXIoKTsKKworLy8gUmV0
dXJuIGEgcmFuZG9taXphdGlvbiBzZWVkIGZvciB0aGlzIHJ1bi4gIFR5cGljYWxseSByZXR1cm5z
IHRoZQorLy8gc2FtZSBudW1iZXIgb24gcmVwZWF0ZWQgaW52b2NhdGlvbnMgb2YgdGhpcyBiaW5h
cnksIGJ1dCBhdXRvbWF0ZWQKKy8vIHJ1bnMgbWF5IGJlIGFibGUgdG8gdmFyeSB0aGUgc2VlZC4K
K2V4dGVybiBpbnQgUmFuZG9tU2VlZCgpOworCisvLyBBbiBpbnN0YW5jZSBvZiBUZXN0ZXIgaXMg
YWxsb2NhdGVkIHRvIGhvbGQgdGVtcG9yYXJ5IHN0YXRlIGR1cmluZworLy8gdGhlIGV4ZWN1dGlv
biBvZiBhbiBhc3NlcnRpb24uCitjbGFzcyBUZXN0ZXIgeworIHByaXZhdGU6CisgIGJvb2wgb2tf
OworICBjb25zdCBjaGFyKiBmbmFtZV87CisgIGludCBsaW5lXzsKKyAgc3RkOjpzdHJpbmdzdHJl
YW0gc3NfOworCisgcHVibGljOgorICBUZXN0ZXIoY29uc3QgY2hhciogZiwgaW50IGwpCisgICAg
ICA6IG9rXyh0cnVlKSwgZm5hbWVfKGYpLCBsaW5lXyhsKSB7CisgIH0KKworICB+VGVzdGVyKCkg
eworICAgIGlmICghb2tfKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiVzXG4iLCBm
bmFtZV8sIGxpbmVfLCBzc18uc3RyKCkuY19zdHIoKSk7CisgICAgICBleGl0KDEpOworICAgIH0K
KyAgfQorCisgIFRlc3RlciYgSXMoYm9vbCBiLCBjb25zdCBjaGFyKiBtc2cpIHsKKyAgICBpZiAo
IWIpIHsKKyAgICAgIHNzXyA8PCAiIEFzc2VydGlvbiBmYWlsdXJlICIgPDwgbXNnOworICAgICAg
b2tfID0gZmFsc2U7CisgICAgfQorICAgIHJldHVybiAqdGhpczsKKyAgfQorCisgIFRlc3RlciYg
SXNPayhjb25zdCBTdGF0dXMmIHMpIHsKKyAgICBpZiAoIXMub2soKSkgeworICAgICAgc3NfIDw8
ICIgIiA8PCBzLlRvU3RyaW5nKCk7CisgICAgICBva18gPSBmYWxzZTsKKyAgICB9CisgICAgcmV0
dXJuICp0aGlzOworICB9CisKKyNkZWZpbmUgQklOQVJZX09QKG5hbWUsb3ApICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICB0ZW1wbGF0ZSA8Y2xhc3MgWCwgY2xhc3MgWT4gICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgIFRlc3RlciYgbmFtZShjb25zdCBYJiB4LCBjb25zdCBZ
JiB5KSB7ICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoISAoeCBvcCB5KSkgeyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3NfIDw8ICIgZmFpbGVkOiAiIDw8IHgg
PDwgKCIgIiAjb3AgIiAiKSA8PCB5OyAgICBcCisgICAgICBva18gPSBmYWxzZTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJldHVybiAqdGhpczsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0KKworICBCSU5BUllfT1AoSXNF
cSwgPT0pCisgIEJJTkFSWV9PUChJc05lLCAhPSkKKyAgQklOQVJZX09QKElzR2UsID49KQorICBC
SU5BUllfT1AoSXNHdCwgPikKKyAgQklOQVJZX09QKElzTGUsIDw9KQorICBCSU5BUllfT1AoSXNM
dCwgPCkKKyN1bmRlZiBCSU5BUllfT1AKKworICAvLyBBdHRhY2ggdGhlIHNwZWNpZmllZCB2YWx1
ZSB0byB0aGUgZXJyb3IgbWVzc2FnZSBpZiBhbiBlcnJvciBoYXMgb2NjdXJyZWQKKyAgdGVtcGxh
dGUgPGNsYXNzIFY+CisgIFRlc3RlciYgb3BlcmF0b3I8PChjb25zdCBWJiB2YWx1ZSkgeworICAg
IGlmICghb2tfKSB7CisgICAgICBzc18gPDwgIiAiIDw8IHZhbHVlOworICAgIH0KKyAgICByZXR1
cm4gKnRoaXM7CisgIH0KK307CisKKyNkZWZpbmUgQVNTRVJUX1RSVUUoYykgOjpsZXZlbGRiOjp0
ZXN0OjpUZXN0ZXIoX19GSUxFX18sIF9fTElORV9fKS5JcygoYyksICNjKQorI2RlZmluZSBBU1NF
UlRfT0socykgOjpsZXZlbGRiOjp0ZXN0OjpUZXN0ZXIoX19GSUxFX18sIF9fTElORV9fKS5Jc09r
KChzKSkKKyNkZWZpbmUgQVNTRVJUX0VRKGEsYikgOjpsZXZlbGRiOjp0ZXN0OjpUZXN0ZXIoX19G
SUxFX18sIF9fTElORV9fKS5Jc0VxKChhKSwoYikpCisjZGVmaW5lIEFTU0VSVF9ORShhLGIpIDo6
bGV2ZWxkYjo6dGVzdDo6VGVzdGVyKF9fRklMRV9fLCBfX0xJTkVfXykuSXNOZSgoYSksKGIpKQor
I2RlZmluZSBBU1NFUlRfR0UoYSxiKSA6OmxldmVsZGI6OnRlc3Q6OlRlc3RlcihfX0ZJTEVfXywg
X19MSU5FX18pLklzR2UoKGEpLChiKSkKKyNkZWZpbmUgQVNTRVJUX0dUKGEsYikgOjpsZXZlbGRi
Ojp0ZXN0OjpUZXN0ZXIoX19GSUxFX18sIF9fTElORV9fKS5Jc0d0KChhKSwoYikpCisjZGVmaW5l
IEFTU0VSVF9MRShhLGIpIDo6bGV2ZWxkYjo6dGVzdDo6VGVzdGVyKF9fRklMRV9fLCBfX0xJTkVf
XykuSXNMZSgoYSksKGIpKQorI2RlZmluZSBBU1NFUlRfTFQoYSxiKSA6OmxldmVsZGI6OnRlc3Q6
OlRlc3RlcihfX0ZJTEVfXywgX19MSU5FX18pLklzTHQoKGEpLChiKSkKKworI2RlZmluZSBUQ09O
Q0FUKGEsYikgVENPTkNBVDEoYSxiKQorI2RlZmluZSBUQ09OQ0FUMShhLGIpIGEjI2IKKworI2Rl
ZmluZSBURVNUKGJhc2UsbmFtZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorY2xhc3MgVENPTkNBVChfVGVzdF8sbmFtZSkgOiBwdWJsaWMgYmFzZSB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIHB1YmxpYzogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB2b2lk
IF9SdW4oKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICBzdGF0aWMgdm9pZCBfUnVuSXQoKSB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFRDT05DQVQoX1Rlc3RfLG5hbWUpIHQ7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHQuX1J1
bigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorfTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorYm9vbCBUQ09OQ0FU
KF9UZXN0X2lnbm9yZWRfLG5hbWUpID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICA6OmxldmVsZGI6OnRlc3Q6OlJlZ2lzdGVyVGVzdCgjYmFzZSwgI25hbWUsICZUQ09O
Q0FUKF9UZXN0XyxuYW1lKTo6X1J1bkl0KTsgXAordm9pZCBUQ09OQ0FUKF9UZXN0XyxuYW1lKTo6
X1J1bigpCisKKy8vIFJlZ2lzdGVyIHRoZSBzcGVjaWZpZWQgdGVzdC4gIFR5cGljYWxseSBub3Qg
dXNlZCBkaXJlY3RseSwgYnV0CisvLyBpbnZva2VkIHZpYSB0aGUgbWFjcm8gZXhwYW5zaW9uIG9m
IFRFU1QuCitleHRlcm4gYm9vbCBSZWdpc3RlclRlc3QoY29uc3QgY2hhciogYmFzZSwgY29uc3Qg
Y2hhciogbmFtZSwgdm9pZCAoKmZ1bmMpKCkpOworCisKK30gIC8vIG5hbWVzcGFjZSB0ZXN0Cit9
ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgorCisjZW5kaWYgIC8vIFNUT1JBR0VfTEVWRUxEQl9VVElM
X1RFU1RIQVJORVNTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0
aWwvdGVzdHV0aWwuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvdGVzdHV0aWwu
Y2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNTM4ZDA5NTE2ZDIxN2Q2MTRhYzQ1Y2VmZTM4YmIxNTAzZDNiMWQ1Ywot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC90ZXN0dXRp
bC5jYwpAQCAtMCwwICsxLDUxIEBACisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBj
b250cmlidXRvcnMuCisKKyNpbmNsdWRlICJ1dGlsL3Rlc3R1dGlsLmgiCisKKyNpbmNsdWRlICJ1
dGlsL3JhbmRvbS5oIgorCituYW1lc3BhY2UgbGV2ZWxkYiB7CituYW1lc3BhY2UgdGVzdCB7CisK
K1NsaWNlIFJhbmRvbVN0cmluZyhSYW5kb20qIHJuZCwgaW50IGxlbiwgc3RkOjpzdHJpbmcqIGRz
dCkgeworICBkc3QtPnJlc2l6ZShsZW4pOworICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsr
KSB7CisgICAgKCpkc3QpW2ldID0gc3RhdGljX2Nhc3Q8Y2hhcj4oJyAnICsgcm5kLT5Vbmlmb3Jt
KDk1KSk7ICAgLy8gJyAnIC4uICd+JworICB9CisgIHJldHVybiBTbGljZSgqZHN0KTsKK30KKwor
c3RkOjpzdHJpbmcgUmFuZG9tS2V5KFJhbmRvbSogcm5kLCBpbnQgbGVuKSB7CisgIC8vIE1ha2Ug
c3VyZSB0byBnZW5lcmF0ZSBhIHdpZGUgdmFyaWV0eSBvZiBjaGFyYWN0ZXJzIHNvIHdlCisgIC8v
IHRlc3QgdGhlIGJvdW5kYXJ5IGNvbmRpdGlvbnMgZm9yIHNob3J0LWtleSBvcHRpbWl6YXRpb25z
LgorICBzdGF0aWMgY29uc3QgY2hhciBrVGVzdENoYXJzW10gPSB7CisgICAgJ1wwJywgJ1wxJywg
J2EnLCAnYicsICdjJywgJ2QnLCAnZScsICdceGZkJywgJ1x4ZmUnLCAnXHhmZicKKyAgfTsKKyAg
c3RkOjpzdHJpbmcgcmVzdWx0OworICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7Cisg
ICAgcmVzdWx0ICs9IGtUZXN0Q2hhcnNbcm5kLT5Vbmlmb3JtKHNpemVvZihrVGVzdENoYXJzKSld
OworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKKworZXh0ZXJuIFNsaWNlIENvbXByZXNzaWJs
ZVN0cmluZyhSYW5kb20qIHJuZCwgZG91YmxlIGNvbXByZXNzZWRfZnJhY3Rpb24sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW4sIHN0ZDo6c3RyaW5nKiBkc3QpIHsKKyAg
aW50IHJhdyA9IHN0YXRpY19jYXN0PGludD4obGVuICogY29tcHJlc3NlZF9mcmFjdGlvbik7Cisg
IGlmIChyYXcgPCAxKSByYXcgPSAxOworICBzdGQ6OnN0cmluZyByYXdfZGF0YTsKKyAgUmFuZG9t
U3RyaW5nKHJuZCwgcmF3LCAmcmF3X2RhdGEpOworCisgIC8vIER1cGxpY2F0ZSB0aGUgcmFuZG9t
IGRhdGEgdW50aWwgd2UgaGF2ZSBmaWxsZWQgImxlbiIgYnl0ZXMKKyAgZHN0LT5jbGVhcigpOwor
ICB3aGlsZSAoZHN0LT5zaXplKCkgPCBsZW4pIHsKKyAgICBkc3QtPmFwcGVuZChyYXdfZGF0YSk7
CisgIH0KKyAgZHN0LT5yZXNpemUobGVuKTsKKyAgcmV0dXJuIFNsaWNlKCpkc3QpOworfQorCit9
ICAvLyBuYW1lc3BhY2UgdGVzdAorfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC90ZXN0dXRpbC5oIGIvU291cmNlL1RoaXJk
UGFydHkvbGV2ZWxkYi91dGlsL3Rlc3R1dGlsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODI0ZTY1NWJkMmM1ZDc5
NTVhYTgzODg3OTY2YWQwZjU0ZmI3NzE5MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xldmVsZGIvdXRpbC90ZXN0dXRpbC5oCkBAIC0wLDAgKzEsNTMgQEAKKy8vIENvcHly
aWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBB
VVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2lmbmRlZiBTVE9SQUdF
X0xFVkVMREJfVVRJTF9URVNUVVRJTF9IXworI2RlZmluZSBTVE9SQUdFX0xFVkVMREJfVVRJTF9U
RVNUVVRJTF9IXworCisjaW5jbHVkZSAibGV2ZWxkYi9lbnYuaCIKKyNpbmNsdWRlICJsZXZlbGRi
L3NsaWNlLmgiCisjaW5jbHVkZSAidXRpbC9yYW5kb20uaCIKKworbmFtZXNwYWNlIGxldmVsZGIg
eworbmFtZXNwYWNlIHRlc3QgeworCisvLyBTdG9yZSBpbiAqZHN0IGEgcmFuZG9tIHN0cmluZyBv
ZiBsZW5ndGggImxlbiIgYW5kIHJldHVybiBhIFNsaWNlIHRoYXQKKy8vIHJlZmVyZW5jZXMgdGhl
IGdlbmVyYXRlZCBkYXRhLgorZXh0ZXJuIFNsaWNlIFJhbmRvbVN0cmluZyhSYW5kb20qIHJuZCwg
aW50IGxlbiwgc3RkOjpzdHJpbmcqIGRzdCk7CisKKy8vIFJldHVybiBhIHJhbmRvbSBrZXkgd2l0
aCB0aGUgc3BlY2lmaWVkIGxlbmd0aCB0aGF0IG1heSBjb250YWluIGludGVyZXN0aW5nCisvLyBj
aGFyYWN0ZXJzIChlLmcuIFx4MDAsIFx4ZmYsIGV0Yy4pLgorZXh0ZXJuIHN0ZDo6c3RyaW5nIFJh
bmRvbUtleShSYW5kb20qIHJuZCwgaW50IGxlbik7CisKKy8vIFN0b3JlIGluICpkc3QgYSBzdHJp
bmcgb2YgbGVuZ3RoICJsZW4iIHRoYXQgd2lsbCBjb21wcmVzcyB0bworLy8gIk4qY29tcHJlc3Nl
ZF9mcmFjdGlvbiIgYnl0ZXMgYW5kIHJldHVybiBhIFNsaWNlIHRoYXQgcmVmZXJlbmNlcworLy8g
dGhlIGdlbmVyYXRlZCBkYXRhLgorZXh0ZXJuIFNsaWNlIENvbXByZXNzaWJsZVN0cmluZyhSYW5k
b20qIHJuZCwgZG91YmxlIGNvbXByZXNzZWRfZnJhY3Rpb24sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBsZW4sIHN0ZDo6c3RyaW5nKiBkc3QpOworCisvLyBBIHdyYXBwZXIg
dGhhdCBhbGxvd3MgaW5qZWN0aW9uIG9mIGVycm9ycy4KK2NsYXNzIEVycm9yRW52IDogcHVibGlj
IEVudldyYXBwZXIgeworIHB1YmxpYzoKKyAgYm9vbCB3cml0YWJsZV9maWxlX2Vycm9yXzsKKyAg
aW50IG51bV93cml0YWJsZV9maWxlX2Vycm9yc187CisKKyAgRXJyb3JFbnYoKSA6IEVudldyYXBw
ZXIoRW52OjpEZWZhdWx0KCkpLAorICAgICAgICAgICAgICAgd3JpdGFibGVfZmlsZV9lcnJvcl8o
ZmFsc2UpLAorICAgICAgICAgICAgICAgbnVtX3dyaXRhYmxlX2ZpbGVfZXJyb3JzXygwKSB7IH0K
KworICB2aXJ0dWFsIFN0YXR1cyBOZXdXcml0YWJsZUZpbGUoY29uc3Qgc3RkOjpzdHJpbmcmIGZu
YW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVGaWxlKiogcmVz
dWx0KSB7CisgICAgaWYgKHdyaXRhYmxlX2ZpbGVfZXJyb3JfKSB7CisgICAgICArK251bV93cml0
YWJsZV9maWxlX2Vycm9yc187CisgICAgICAqcmVzdWx0ID0gTlVMTDsKKyAgICAgIHJldHVybiBT
dGF0dXM6OklPRXJyb3IoZm5hbWUsICJmYWtlIGVycm9yIik7CisgICAgfQorICAgIHJldHVybiB0
YXJnZXQoKS0+TmV3V3JpdGFibGVGaWxlKGZuYW1lLCByZXN1bHQpOworICB9Cit9OworCit9ICAv
LyBuYW1lc3BhY2UgdGVzdAorfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKKworI2VuZGlmICAvLyBT
VE9SQUdFX0xFVkVMREJfVVRJTF9URVNUVVRJTF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCA3
Mjg5NTRkMGJiZWJmN2M1MTVhN2VkNzg4YzJmMDQ4ZmNiMDE0OWNmLi5lZDU2MWQ1ZjI3MDkyYjY2
YTdjZDliM2M3YTY2Nzc2YTBmZjE5NGY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMzM1LDYg
KzMzNSwxMCBAQCBlbHNlCiBmZWF0dXJlX2RlZmluZXNfb3ZlcnJpZGVzICs9IEVOQUJMRV9TUEVM
TENIRUNLPTAKIGVuZGlmICAjIEVORCBFTkFCTEVfU1BFTExDSEVDSwogCitpZiBFTkFCTEVfSU5E
RVhFRF9EQVRBQkFTRQord2ViY29yZV9jcHBmbGFncyArPSBcCisJLURXVEZfVVNFX0xFVkVMREI9
MQorZW5kaWYKIAogIyBGaWxsIHRoZSBmZWF0dXJlX2RlZmluZXMgdmFyaWFibGUgd2l0aCBhbGwg
dGhlIGRlZmluZXMsIG1ha2luZyBpdCBwb3NzaWJsZQogIyB0byBvdmVycmlkZSB0aGUgZGVmYXVs
dCBkZWZpbmUgdmFsdWUgKGFzIHNldCBpbiBmZWF0dXJlX2RlZmluZXNfZGVmYXVsdHMpCkBAIC01
NjQsNiArNTY4LDExIEBAIG5vaW5zdF9MVExJQlJBUklFUyArPSBcCiAJbGliV2ViQ29yZU1vZHVs
ZXMubGEgXAogCWxpYldlYkNvcmUubGEKIAoraWYgRU5BQkxFX0lOREVYRURfREFUQUJBU0UKK25v
aW5zdF9MVExJQlJBUklFUyArPSBcCisJbGliTGV2ZWxEQi5sYQorZW5kaWYKKwogaWYgRU5BQkxF
X1NWRwogbm9pbnN0X0xUTElCUkFSSUVTICs9IFwKIAlsaWJXZWJDb3JlU1ZHLmxhCkBAIC02MzQs
MjQgKzY0MywzNSBAQCBlbmRpZgogCiBsaWJXZWJDb3JlTW9kdWxlc19sYV9TT1VSQ0VTID0gXAog
CSQod2ViY29yZV9tb2R1bGVzX3NvdXJjZXMpCi0KIGxpYldlYkNvcmVNb2R1bGVzX2xhX0NYWEZM
QUdTID0gJChsaWJXZWJDb3JlX2xhX0NYWEZMQUdTKQotCiBsaWJXZWJDb3JlTW9kdWxlc19sYV9D
RkxBR1MgPSAkKGxpYldlYkNvcmVfbGFfQ0ZMQUdTKQotCiBsaWJXZWJDb3JlTW9kdWxlc19sYV9D
UFBGTEFHUyA9ICQobGliV2ViQ29yZV9sYV9DUFBGTEFHUykKIAorbGliTGV2ZWxEQl9sYV9DWFhG
TEFHUyA9ICQoZ2xvYmFsX2N4eGZsYWdzKQorbGliTGV2ZWxEQl9sYV9DRkxBR1MgPSAkKGdsb2Jh
bF9jeGZsYWdzKQorbGliTGV2ZWxEQl9sYV9DUFBGTEFHUyA9IFwKKwkkKGdsb2JhbF9jcHBmbGFn
cykgXAorCS1mbm8tYnVpbHRpbi1tZW1jbXAgXAorCS1JJChzcmNkaXIpL1NvdXJjZS9UaGlyZFBh
cnR5L2xldmVsZGIKKworaWYgVEFSR0VUX1dJTjMyCitsaWJMZXZlbERCX2xhX0NQUEZMQUdTICs9
IFwKKwktRE9TX1dJTgorZWxzZQorbGliTGV2ZWxEQl9sYV9DUFBGTEFHUyArPSBcCisJLXB0aHJl
YWQgXAorCS1ET1NfTElOVVggXAorCS1ETEVWRUxEQl9QTEFURk9STV9QT1NJWAorZW5kaWYKKwog
bGliV2ViQ29yZVBsYXRmb3JtX2xhX1NPVVJDRVMgPSBcCiAJJCh3ZWJjb3JlX3BsYXRmb3JtX3Nv
dXJjZXMpCi0KIGxpYldlYkNvcmVQbGF0Zm9ybV9sYV9DWFhGTEFHUyA9IFwKIAkkKFNZTUJPTF9W
SVNJQklMSVRZX0lOTElORVMpIFwKIAkkKGdsb2JhbF9jeHhmbGFncykKLQogbGliV2ViQ29yZVBs
YXRmb3JtX2xhX0NGTEFHUyA9IFwKIAkkKFNZTUJPTF9WSVNJQklMSVRZKSBcCiAJJChnbG9iYWxf
Y2ZsYWdzKQotCiBsaWJXZWJDb3JlUGxhdGZvcm1fbGFfQ1BQRkxBR1MgPSBcCiAJLURCVUlMRElO
R19XRUJLSVQgXAogCSQoZ2xvYmFsX2NwcGZsYWdzKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlz
dC5hbQppbmRleCA2ZDRhMDI2ZDFmNTQ2OTdjMzI4ZDVkZmJhNWE4MWZkYmJhYzRhNGRiLi45MjQz
ZTdmZWY5NDYyNGY4MTUxYzgyMGMyOGUxZWIzZjBlYTQ5MmFmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0KQEAgLTY0NjQsMyArNjQ2NCw5NSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllci5oCiBlbmRpZiAgIyBFTkQgVVNFX1RFWFRVUkVfTUFQUEVSX0dMCiBlbmRpZiAg
IyBVU0VfQUNDRUxFUkFURURfQ09NUE9TSVRJTkcKKworbGliTGV2ZWxEQl9sYV9TT1VSQ0VTID0g
XAorCVNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvYnVpbGRlci5jY1wKKwlTb3VyY2UvVGhp
cmRQYXJ0eS9sZXZlbGRiL2RiL2J1aWxkZXIuaCBcCisJU291cmNlL1RoaXJkUGFydHkvbGV2ZWxk
Yi9kYi9jLmNjIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2RiZm9ybWF0LmNjIFwK
KwlTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2RiZm9ybWF0LmggXAorCVNvdXJjZS9UaGly
ZFBhcnR5L2xldmVsZGIvZGIvZGJfaW1wbC5jYyBcCisJU291cmNlL1RoaXJkUGFydHkvbGV2ZWxk
Yi9kYi9kYl9pbXBsLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvZGJfaXRlci5j
YyBcCisJU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9kYl9pdGVyLmggXAorCVNvdXJjZS9U
aGlyZFBhcnR5L2xldmVsZGIvZGIvZmlsZW5hbWUuY2MgXAorCVNvdXJjZS9UaGlyZFBhcnR5L2xl
dmVsZGIvZGIvZmlsZW5hbWUuaCBcCisJU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9sb2df
Zm9ybWF0LmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvbG9nX3JlYWRlci5jYyBc
CisJU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9sb2dfcmVhZGVyLmggXAorCVNvdXJjZS9U
aGlyZFBhcnR5L2xldmVsZGIvZGIvbG9nX3dyaXRlci5jYyBcCisJU291cmNlL1RoaXJkUGFydHkv
bGV2ZWxkYi9kYi9sb2dfd3JpdGVyLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIv
bWVtdGFibGUuY2MgXAorCVNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvbWVtdGFibGUuaCBc
CisJU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9yZXBhaXIuY2MgXAorCVNvdXJjZS9UaGly
ZFBhcnR5L2xldmVsZGIvZGIvc2tpcGxpc3QuaCBcCisJU291cmNlL1RoaXJkUGFydHkvbGV2ZWxk
Yi9kYi9zbmFwc2hvdC5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL3RhYmxlX2Nh
Y2hlLmNjIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL3RhYmxlX2NhY2hlLmggXAor
CVNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvdmVyc2lvbl9lZGl0LmNjIFwKKwlTb3VyY2Uv
VGhpcmRQYXJ0eS9sZXZlbGRiL2RiL3ZlcnNpb25fZWRpdC5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0
eS9sZXZlbGRiL2RiL3ZlcnNpb25fc2V0LmNjIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRi
L2RiL3ZlcnNpb25fc2V0LmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvd3JpdGVf
YmF0Y2guY2MgXAorCVNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvd3JpdGVfYmF0Y2hfaW50
ZXJuYWwuaCBcCisJU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9oZWxwZXJzL21lbWVudi9tZW1l
bnYuY2MgXAorCVNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvaGVscGVycy9tZW1lbnYvbWVtZW52
LmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvaW5jbHVkZS9sZXZlbGRiL2NhY2hlLmgg
XAorCVNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvaW5jbHVkZS9sZXZlbGRiL2MuaCBcCisJU291
cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvY29tcGFyYXRvci5oIFwKKwlT
b3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2luY2x1ZGUvbGV2ZWxkYi9kYi5oIFwKKwlTb3VyY2Uv
VGhpcmRQYXJ0eS9sZXZlbGRiL2luY2x1ZGUvbGV2ZWxkYi9lbnYuaCBcCisJU291cmNlL1RoaXJk
UGFydHkvbGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvZmlsdGVyX3BvbGljeS5oIFwKKwlTb3VyY2Uv
VGhpcmRQYXJ0eS9sZXZlbGRiL2luY2x1ZGUvbGV2ZWxkYi9pdGVyYXRvci5oIFwKKwlTb3VyY2Uv
VGhpcmRQYXJ0eS9sZXZlbGRiL2luY2x1ZGUvbGV2ZWxkYi9vcHRpb25zLmggXAorCVNvdXJjZS9U
aGlyZFBhcnR5L2xldmVsZGIvaW5jbHVkZS9sZXZlbGRiL3NsaWNlLmggXAorCVNvdXJjZS9UaGly
ZFBhcnR5L2xldmVsZGIvaW5jbHVkZS9sZXZlbGRiL3N0YXR1cy5oIFwKKwlTb3VyY2UvVGhpcmRQ
YXJ0eS9sZXZlbGRiL2luY2x1ZGUvbGV2ZWxkYi90YWJsZV9idWlsZGVyLmggXAorCVNvdXJjZS9U
aGlyZFBhcnR5L2xldmVsZGIvaW5jbHVkZS9sZXZlbGRiL3RhYmxlLmggXAorCVNvdXJjZS9UaGly
ZFBhcnR5L2xldmVsZGIvaW5jbHVkZS9sZXZlbGRiL3dyaXRlX2JhdGNoLmggXAorCVNvdXJjZS9U
aGlyZFBhcnR5L2xldmVsZGIvcG9ydC9hdG9taWNfcG9pbnRlci5oIFwKKwlTb3VyY2UvVGhpcmRQ
YXJ0eS9sZXZlbGRiL3BvcnQvcG9ydF9leGFtcGxlLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L2xl
dmVsZGIvcG9ydC9wb3J0LmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvcG9ydC9wb3J0
X3Bvc2l4LmNjIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3BvcnQvcG9ydF9wb3NpeC5o
IFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3BvcnQvdGhyZWFkX2Fubm90YXRpb25zLmgg
XAorCVNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvcG9ydC93aW4vc3RkaW50LmggXAorCVNvdXJj
ZS9UaGlyZFBhcnR5L2xldmVsZGIvdGFibGUvYmxvY2tfYnVpbGRlci5jYyBcCisJU291cmNlL1Ro
aXJkUGFydHkvbGV2ZWxkYi90YWJsZS9ibG9ja19idWlsZGVyLmggXAorCVNvdXJjZS9UaGlyZFBh
cnR5L2xldmVsZGIvdGFibGUvYmxvY2suY2MgXAorCVNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIv
dGFibGUvYmxvY2suaCBcCisJU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi90YWJsZS9maWx0ZXJf
YmxvY2suY2MgXAorCVNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdGFibGUvZmlsdGVyX2Jsb2Nr
LmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdGFibGUvZm9ybWF0LmNjIFwKKwlTb3Vy
Y2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxlL2Zvcm1hdC5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0
eS9sZXZlbGRiL3RhYmxlL2l0ZXJhdG9yLmNjIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRi
L3RhYmxlL2l0ZXJhdG9yX3dyYXBwZXIuaCBcCisJU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi90
YWJsZS9tZXJnZXIuY2MgXAorCVNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdGFibGUvbWVyZ2Vy
LmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdGFibGUvdGFibGVfYnVpbGRlci5jYyBc
CisJU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi90YWJsZS90YWJsZS5jYyBcCisJU291cmNlL1Ro
aXJkUGFydHkvbGV2ZWxkYi90YWJsZS90d29fbGV2ZWxfaXRlcmF0b3IuY2MgXAorCVNvdXJjZS9U
aGlyZFBhcnR5L2xldmVsZGIvdGFibGUvdHdvX2xldmVsX2l0ZXJhdG9yLmggXAorCVNvdXJjZS9U
aGlyZFBhcnR5L2xldmVsZGIvdXRpbC9hcmVuYS5jYyBcCisJU291cmNlL1RoaXJkUGFydHkvbGV2
ZWxkYi91dGlsL2FyZW5hLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9ibG9v
bS5jYyBcCisJU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2NhY2hlLmNjIFwKKwlTb3Vy
Y2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvY29kaW5nLmNjIFwKKwlTb3VyY2UvVGhpcmRQYXJ0
eS9sZXZlbGRiL3V0aWwvY29kaW5nLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRp
bC9jb21wYXJhdG9yLmNjIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvY3JjMzJj
LmNjIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvY3JjMzJjLmggXAorCVNvdXJj
ZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9lbnYuY2MgXAorCVNvdXJjZS9UaGlyZFBhcnR5L2xl
dmVsZGIvdXRpbC9lbnZfcG9zaXguY2MgXAorCVNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRp
bC9maWx0ZXJfcG9saWN5LmNjIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvaGFz
aC5jYyBcCisJU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2hhc2guaCBcCisJU291cmNl
L1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2hpc3RvZ3JhbS5jYyBcCisJU291cmNlL1RoaXJkUGFy
dHkvbGV2ZWxkYi91dGlsL2hpc3RvZ3JhbS5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRi
L3V0aWwvbG9nZ2luZy5jYyBcCisJU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2xvZ2dp
bmcuaCBcCisJU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL211dGV4bG9jay5oIFwKKwlT
b3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvb3B0aW9ucy5jYyBcCisJU291cmNlL1RoaXJk
UGFydHkvbGV2ZWxkYi91dGlsL3Bvc2l4X2xvZ2dlci5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9s
ZXZlbGRiL3V0aWwvcmFuZG9tLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9z
dGF0dXMuY2MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtIGIv
U291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KaW5kZXggYWIwNmQ1Y2JkN2Q4YWU5ZDM4
ZmEzYmQxOTBmNjNkZDI3NDkxNGVkZS4uM2E4NGEyN2RmOThiNmU0NDE1YWNmYWY1Njk5MWU5NjVj
OWNkZWM0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KKysr
IGIvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KQEAgLTg2LDYgKzg2LDExIEBAIGxp
YndlYmtpdGd0a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9N
SU5PUl9WRVJTSU9OQF9sYV9MSUJBCiAJbGliV2ViQ29yZURPTS5sYSBcCiAJbGliV2ViQ29yZUd0
ay5sYQogCitpZiBFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRQorbGlid2Via2l0Z3RrX0BXRUJLSVRH
VEtfQVBJX01BSk9SX1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05AX2xhX0xJ
QkFERCArPSBcCisJbGliTGV2ZWxEQi5sYQorZW5kaWYKKwogaWYgRU5BQkxFX1NWRwogbGlid2Vi
a2l0Z3RrX0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJX01JTk9S
X1ZFUlNJT05AX2xhX0xJQkFERCArPSBcCiAJbGliV2ViQ29yZVNWRy5sYQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmls
ZS5hbQppbmRleCBhMDExOGI1NzhjZjAzYTNjNTFjZGVkMWY4M2NiYzQ2ZTIzNzRkM2YwLi43MmQ2
NDI0MDZiM2IxNWQxN2NlM2JlYzcxNGIwODEzM2VmN2M4NDdkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5h
bQpAQCAtMTc2LDYgKzE3NiwxMSBAQCBsaWJ3ZWJraXQyZ3RrX0BXRUJLSVRHVEtfQVBJX01BSk9S
X1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05AX2xhX0xJQgogCWxpYldlYkNv
cmVQbGF0Zm9ybS5sYSBcCiAJbGliV2ViQ29yZU1vZHVsZXMubGEKIAoraWYgRU5BQkxFX0lOREVY
RURfREFUQUJBU0UKK2xpYndlYmtpdDJndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBf
QFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkBfbGFfTElCQUREICs9IFwKKwlsaWJMZXZlbERC
LmxhCitlbmRpZgorCiBpZiBFTkFCTEVfU1ZHCiBsaWJ3ZWJraXQyZ3RrX0BXRUJLSVRHVEtfQVBJ
X01BSk9SX1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05AX2xhX0xJQkFERCAr
PSBcCiAJbGliV2ViQ29yZVNWRy5sYQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9v
bHMvQ2hhbmdlTG9nCmluZGV4IDViNTJlODEzNzUyZDA0NjlhNGQyY2M1MmYzMjkwODI2NjRiMGYx
NzguLjJjZmM2ZTMzMmNjYmUzMTkxNDgxZjY5YTcxOTg3NmVlMjhmNGVhNTggMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAor
MjAxMy0wMS0wOSAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAg
ICAgICAgW0dUS10gQnVpbGQgd2l0aCBMZXZlbERCIHdoZW4gSW5kZXhlZERCIGlzIGVuYWJsZWQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzIyMAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5OiBEbyBub3Qgc3R5bGUgY2hlY2sgdGhlIGxldmVs
ZGIgc291cmNlIGNvZGUKKyAgICAgICAgYXMgaXQgZG9lcyBub3QgY29uZm9ybSB0byBXZWJLaXQg
c3R5bGUuCisKIDIwMTMtMDEtMTAgIFphbiBEb2JlcnNlayAgPHphbmRvYmVyc2VrQGdtYWlsLmNv
bT4KIAogICAgICAgICBSZW1vdmUgdGhlIEVOQUJMRV9BTklNQVRJT05fQVBJIGZlYXR1cmUgZGVm
aW5lIG9jY3VyZW5jZXMKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUv
Y2hlY2tlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQppbmRl
eCAzZWY2N2FjYzIxMTk1ZDA4NDgyZTAzY2FjMWVmNTgzM2VlMWE1NGIyLi45NzQxM2RiZDUxYjNl
YzVjYWRjOGExMGJjZmNkOWRkOTJjZjk3YjUxIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHls
ZS9jaGVja2VyLnB5CkBAIC0zNDAsNiArMzQwLDcgQEAgX1NLSVBQRURfRklMRVNfV0lUSF9XQVJO
SU5HID0gWwogIyB3aXRoIEZpbGVUeXBlLk5PTkUgYXJlIGF1dG9tYXRpY2FsbHkgc2tpcHBlZCB3
aXRob3V0IHdhcm5pbmcuCiBfU0tJUFBFRF9GSUxFU19XSVRIT1VUX1dBUk5JTkcgPSBbCiAgICAg
IkxheW91dFRlc3RzIiArIG9zLnBhdGguc2VwLAorICAgICJTb3VyY2UvVGhpcmRQYXJ0eS9sZXZl
bGRiIiArIG9zLnBhdGguc2VwLAogICAgICMgUHJldmVudHMgdGhpcyBiZWluZyByZWNvZ25pemVk
IGFzIGEgdGV4dCBmaWxlLgogICAgICJTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5mZWF0dXJl
cy5hbS5pbiIsCiAgICAgXQpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4
IDc1Y2IxMWM1ZTQzMmQ3OWViNjM1MWI1MDJkNmM0ZDZiNmQ0M2E3MzMuLmI5YTNlYTJmYzU3NWFk
ODQwYjU4ZTU1MWZiNWFiODZlMDA3ZTkyMGUgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMy0wMS0wOSAgTWFydGluIFJvYmluc29uICA8
bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gQnVpbGQgd2l0aCBMZXZlbERC
IHdoZW4gSW5kZXhlZERCIGlzIGVuYWJsZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEwMzIyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogY29uZmlndXJlLmFjOiBEZXRlY3Qgd2hldGhlciB0aGUgSW5k
ZXhlZERhdGFiYXNlIGZlYXR1cmUgaXMgZW5hYmxlZC4gV2UgY2Fubm90CisgICAgICAgIHVzZSB0
aGUgdHlwaWNhbCBhcHByb2FjaCBmb3IgZmVhdHVyZSBkZXRlY3Rpb24gc2luY2Ugd2UgbmVlZCB0
byBhZGp1c3QgdGhlIGF1dG9tYWtlCisgICAgICAgIGZpbGUgb3V0cHV0IGJhc2VkIG9uIHdoZXRo
ZXIgb3Igbm90IEluZGV4ZWREYXRhYmFzZSBpcyBlbmFibGVkLgorCiAyMDEzLTAxLTEwICBaYW4g
RG9iZXJzZWsgIDx6YW5kb2JlcnNla0BnbWFpbC5jb20+CiAKICAgICAgICAgW0F1dG90b29sc10g
QWRkIHRoZSBBTV9XRUJLSVRfRkVBVFVSRV9DT05ESVRJT05BTCBtYWNybwpkaWZmIC0tZ2l0IGEv
Y29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCmluZGV4IDdkMTdjYmUwYWMyMDBkYTVkOTA0OTI1
ZDQ5ZDBkYTBlNzI0Njk3YTkuLjhkMjYzY2VjMDMyNjAwMjlhMWZiODM0ZGFmZjc0NjEyNTRhMDI2
ZGYgMTAwNjQ0Ci0tLSBhL2NvbmZpZ3VyZS5hYworKysgYi9jb25maWd1cmUuYWMKQEAgLTEwOTYs
NiArMTA5NiwxMCBAQCBpZiB0ZXN0ICIkZW5hYmxlX3dlYmtpdDIiID0gInllcyI7IHRoZW4KICAg
IEFDX1NVQlNUKFtBVFNQSTJfTElCU10pCiBmaQogCisjIEZvciB0aGUgbW9tZW50IHdlIG5lZWQg
dG8gY2hlY2sgd2hldGhlciBvciBub3QgaW5kZXhlZCBkYXRhYmFzZQorIyBpcyBlbmFibGVkIGJl
Y2F1c2UgaXQgZGV0ZXJtaW5lcyBpZiB3ZSBidWlsZCBsZXZlbGRiIG9yIG5vdC4KK0FNX1dFQktJ
VF9GRUFUVVJFX0NPTkRJVElPTkFMKFtFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRV0pCisKICMgT1Mg
Y29uZGl0aW9uYWxzCiBBTV9DT05ESVRJT05BTChbT1NfV0lOMzJdLFt0ZXN0ICIkb3Nfd2luMzIi
ID0gInllcyJdKQogQU1fQ09ORElUSU9OQUwoW09TX1VOSVhdLFt0ZXN0ICIkb3Nfd2luMzIiID0g
Im5vIl0pCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183197</attachid>
            <date>2013-01-17 09:07:03 -0800</date>
            <delta_ts>2013-01-17 12:04:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103220-20130117090356.patch</filename>
            <type>text/plain</type>
            <size>876587</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM5Nzk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9DaGFuZ2VMb2cgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9DaGFuZ2VMb2cKaW5kZXggMTI5NzE3ZTZk
ZWQzOGZjZGRkMTlkOThmMzc1N2FlZmJlZDFhNWFjNi4uNWM4YjFkYmNjODU2OTgyZjlmODM0NzQz
MzZhOTYxOTRkM2ZiYzAwMyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEz
LTAxLTE1ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAg
ICBbR1RLXSBCdWlsZCB3aXRoIExldmVsREIgd2hlbiBJbmRleGVkREIgaXMgZW5hYmxlZAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzMjIwCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHRoZSBsZXZl
bGRiIDEuOS4wIHNvdXJjZSBjb2RlIHRvIHRoZSBUaGlyZFBhcnR5IGRlcGVuZGVuY2llcy4KKyAg
ICAgICAgV2UgY2Fubm90IGRlcGVuZCBvbiBsZXZlbGRiIHByb3ZpZGVkIGJ5IHRoZSBkaXN0cmli
dXRpb24sIGJlY2F1c2UKKyAgICAgICAgaXQgc29tZXRpbWVzIGJyZWFrcyBBUEkgY29tcGF0aWJp
bGl0eS4KKworICAgICAgICAqIGxldmVsZGI6IEltcG9ydGVkIGZyb20gdGhlIDEuOS4wIGxldmVs
ZGIgc291cmNlIHRhcmJhbGwuCisKIDIwMTMtMDEtMDkgIERhdmlkIEZhcmxlciAgPGRmYXJsZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIENoYW5nZSBBUkNIUyB0byBnZW5lcmljIHNldHRpbmcgdG8g
d29yayB3aXRoIG11bHRpcGxlIHBsYXRmb3Jtcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3ZTUzODk1OWViMjlh
ODY1NmM1MTAwYTNiN2ZmYzVjYjA0NGZjYmNkLi40MTgzYTIwMzU1YmFhZDM3Y2YyNWNjZWNlOGFk
MmM1NTdlZGVjMDkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTMtMDEtMTUgIE1h
cnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIEJ1
aWxkIHdpdGggTGV2ZWxEQiB3aGVuIEluZGV4ZWREQiBpcyBlbmFibGVkCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDMyMjAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgaXMg
anVzdCBhIGJ1aWxkIGNoYW5nZS4gSW5kZXhlZERhdGFiYXNlIHN1cHBvcnQKKyAgICAgICAgaXMg
YWxyZWFkeSBjb3ZlcmVkIGJ5IHRoZSBzdWl0ZSBvZiBzdG9yYWdlIGxheW91dCB0ZXN0cy4KKwor
ICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGQgdGhlIGxldmVsZGIgY29udmVuaWVuY2UgbGli
cmFyeS4KKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOiBBZGQgdGhlIGxpc3Qgb2Ygc291
cmNlcy4KKwogMjAxMy0wMS0xNSAgQWxleGFuZHJ1IENoaWN1bGl0YSAgPGFjaGljdUBhZG9iZS5j
b20+CiAKICAgICAgICAgW0NvbXBvc2l0b3JdIERvIG5vdCBkaXNhYmxlIG92ZXJsYXAgdGVzdGlu
ZyBmb3IgbGF5ZXJzIGluIGZyb250IG9mIDNEIHRyYW5zZm9ybWVkIGxheWVycwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdl
TG9nCmluZGV4IGRjYmVjM2ZhOTY3ZDI2Nzg3MzQxMGYzZWQzZDlkNmExZjE5ODNjZGQuLjkyYTIw
NjNjZjc5ODkyYWMxMDc2NjFiYjhiMmJjYjI2MTdhNGZjZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvZ3RrL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxMyBAQAorMjAxMy0wMS0xNSAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGln
YWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gQnVpbGQgd2l0aCBMZXZlbERCIHdoZW4gSW5kZXhl
ZERCIGlzIGVuYWJsZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEwMzIyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogR05VbWFrZWZpbGUuYW06IFdoZW4gSW5kZXhlZERhdGFiYXNlIGlzIGVuYWJsZWQg
YWRkIHRoZSBsZXZlbGRiIGNvbnZlbmllbmNlCisgICAgICAgIGxpYnJhcnkgdG8gdGhlIHNoYXJl
ZCBsaWJyYXJ5IGxpbmsgcGhhc2UuCisKIDIwMTMtMDEtMTUgIFphbiBEb2JlcnNlayAgPHphbmRv
YmVyc2VrQGdtYWlsLmNvbT4KIAogICAgICAgICBbQXV0b3Rvb2xzXSBBZGQgc3VwcG9ydCBmb3Ig
V2ViS2l0Mi1vbmx5IGJ1aWxkcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDFhZTc5NTFlODU2NzgyYmUzMmYzMzZk
ZjMxMmRjMTU0YzMzZDM3YTMuLjg2NjE2MmQyMDZhMWUyNzJjZGZmMGE2OWNjZWMyYzUzYjNjYjVi
ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMy0wMS0xNSAgTWFydGluIFJvYmlu
c29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gQnVpbGQgd2l0aCBM
ZXZlbERCIHdoZW4gSW5kZXhlZERCIGlzIGVuYWJsZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzIyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IFdoZW4gSW5kZXhlZERh
dGFiYXNlIGlzIGVuYWJsZWQgYWRkIHRoZSBsZXZlbGRiIGNvbnZlbmllbmNlCisgICAgICAgIGxp
YnJhcnkgdG8gdGhlIHNoYXJlZCBsaWJyYXJ5IGxpbmsgcGhhc2UuCisKIDIwMTMtMDEtMTUgIEFu
ZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW5hbWUgTGF5
ZXJUcmVlSG9zdENBTWFjIHRvIExheWVyVHJlZUhvc3RNYWMuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9sZXZlbGRiL0FVVEhPUlMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL0FV
VEhPUlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMjdhOTQwN2U1MmZkYzUxN2YzYWIyODc0MWUwNDI2YzMxODBkNDQ0
ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvQVVUSE9SUwpA
QCAtMCwwICsxLDggQEAKKyMgTmFtZXMgc2hvdWxkIGJlIGFkZGVkIHRvIHRoaXMgZmlsZSBsaWtl
IHNvOgorIyBOYW1lIG9yIE9yZ2FuaXphdGlvbiA8ZW1haWwgYWRkcmVzcz4KKworR29vZ2xlIElu
Yy4KKworIyBJbml0aWFsIHZlcnNpb24gYXV0aG9yczoKK0plZmZyZXkgRGVhbiA8amVmZkBnb29n
bGUuY29tPgorU2FuamF5IEdoZW1hd2F0IDxzYW5qYXlAZ29vZ2xlLmNvbT4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvTElDRU5TRSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xl
dmVsZGIvTElDRU5TRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZTgwMjA4Y2Q3MmIzMjI1Yzg3ZDkxMTFjNGQ3Y2Fi
MTNhZjFjMmFjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9M
SUNFTlNFCkBAIC0wLDAgKzEsMjcgQEAKK0NvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
K21ldDoKKworICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCitjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCitpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCitkaXN0
cmlidXRpb24uCisgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKK2NvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCit0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCitBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCitTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
K0RBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCitPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9NYWtlZmlsZSBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xldmVsZGIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDJjNDk1MmZlYzA0OGRlYWJjMDdh
NmZmZmYyYjFiOTUxYTRmZTUyYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xldmVsZGIvTWFrZWZpbGUKQEAgLTAsMCArMSwyMDIgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDEx
IFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKyMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9y
IG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisjIFVuY29tbWVudCBleGFjdGx5IG9uZSBvZiB0aGUgbGluZXMg
bGFiZWxsZWQgKEEpLCAoQiksIGFuZCAoQykgYmVsb3cKKyMgdG8gc3dpdGNoIGJldHdlZW4gY29t
cGlsYXRpb24gbW9kZXMuCisKK09QVCA/PSAtTzIgLUROREVCVUcgICAgICAgIyAoQSkgUHJvZHVj
dGlvbiB1c2UgKG9wdGltaXplZCBtb2RlKQorIyBPUFQgPz0gLWcyICAgICAgICAgICAgICAjIChC
KSBEZWJ1ZyBtb2RlLCB3LyBmdWxsIGxpbmUtbGV2ZWwgZGVidWdnaW5nIHN5bWJvbHMKKyMgT1BU
ID89IC1PMiAtZzIgLUROREVCVUcgIyAoQykgUHJvZmlsaW5nIG1vZGU6IG9wdCwgYnV0IHcvZGVi
dWdnaW5nIHN5bWJvbHMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCisjIGRldGVjdCB3aGF0IHBsYXRmb3JtIHdlJ3JlIGJ1aWxkaW5nIG9uCiskKHNo
ZWxsIENDPSQoQ0MpIENYWD0kKENYWCkgVEFSR0VUX09TPSQoVEFSR0VUX09TKSBcCisgICAgLi9i
dWlsZF9kZXRlY3RfcGxhdGZvcm0gYnVpbGRfY29uZmlnLm1rIC4vKQorIyB0aGlzIGZpbGUgaXMg
Z2VuZXJhdGVkIGJ5IHRoZSBwcmV2aW91cyBsaW5lIHRvIHNldCBidWlsZCBmbGFncyBhbmQgc291
cmNlcworaW5jbHVkZSBidWlsZF9jb25maWcubWsKKworQ0ZMQUdTICs9IC1JLiAtSS4vaW5jbHVk
ZSAkKFBMQVRGT1JNX0NDRkxBR1MpICQoT1BUKQorQ1hYRkxBR1MgKz0gLUkuIC1JLi9pbmNsdWRl
ICQoUExBVEZPUk1fQ1hYRkxBR1MpICQoT1BUKQorCitMREZMQUdTICs9ICQoUExBVEZPUk1fTERG
TEFHUykKK0xJQlMgKz0gJChQTEFURk9STV9MSUJTKQorCitMSUJPQkpFQ1RTID0gJChTT1VSQ0VT
Oi5jYz0ubykKK01FTUVOVk9CSkVDVFMgPSAkKE1FTUVOVl9TT1VSQ0VTOi5jYz0ubykKKworVEVT
VFVUSUwgPSAuL3V0aWwvdGVzdHV0aWwubworVEVTVEhBUk5FU1MgPSAuL3V0aWwvdGVzdGhhcm5l
c3MubyAkKFRFU1RVVElMKQorCitURVNUUyA9IFwKKwlhcmVuYV90ZXN0IFwKKwlibG9vbV90ZXN0
IFwKKwljX3Rlc3QgXAorCWNhY2hlX3Rlc3QgXAorCWNvZGluZ190ZXN0IFwKKwljb3JydXB0aW9u
X3Rlc3QgXAorCWNyYzMyY190ZXN0IFwKKwlkYl90ZXN0IFwKKwlkYmZvcm1hdF90ZXN0IFwKKwll
bnZfdGVzdCBcCisJZmlsZW5hbWVfdGVzdCBcCisJZmlsdGVyX2Jsb2NrX3Rlc3QgXAorCWxvZ190
ZXN0IFwKKwltZW1lbnZfdGVzdCBcCisJc2tpcGxpc3RfdGVzdCBcCisJdGFibGVfdGVzdCBcCisJ
dmVyc2lvbl9lZGl0X3Rlc3QgXAorCXZlcnNpb25fc2V0X3Rlc3QgXAorCXdyaXRlX2JhdGNoX3Rl
c3QKKworUFJPR1JBTVMgPSBkYl9iZW5jaCBsZXZlbGRidXRpbCAkKFRFU1RTKQorQkVOQ0hNQVJL
UyA9IGRiX2JlbmNoX3NxbGl0ZTMgZGJfYmVuY2hfdHJlZV9kYgorCitMSUJSQVJZID0gbGlibGV2
ZWxkYi5hCitNRU1FTlZMSUJSQVJZID0gbGlibWVtZW52LmEKKworZGVmYXVsdDogYWxsCisKKyMg
U2hvdWxkIHdlIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXM/CitpZm5lcSAoJChQTEFURk9STV9TSEFS
RURfRVhUKSwpCisKK2lmbmVxICgkKFBMQVRGT1JNX1NIQVJFRF9WRVJTSU9ORUQpLHRydWUpCitT
SEFSRUQxID0gbGlibGV2ZWxkYi4kKFBMQVRGT1JNX1NIQVJFRF9FWFQpCitTSEFSRUQyID0gJChT
SEFSRUQxKQorU0hBUkVEMyA9ICQoU0hBUkVEMSkKK1NIQVJFRCA9ICQoU0hBUkVEMSkKK2Vsc2UK
KyMgVXBkYXRlIGRiLmggaWYgeW91IGNoYW5nZSB0aGVzZS4KK1NIQVJFRF9NQUpPUiA9IDEKK1NI
QVJFRF9NSU5PUiA9IDkKK1NIQVJFRDEgPSBsaWJsZXZlbGRiLiQoUExBVEZPUk1fU0hBUkVEX0VY
VCkKK1NIQVJFRDIgPSAkKFNIQVJFRDEpLiQoU0hBUkVEX01BSk9SKQorU0hBUkVEMyA9ICQoU0hB
UkVEMSkuJChTSEFSRURfTUFKT1IpLiQoU0hBUkVEX01JTk9SKQorU0hBUkVEID0gJChTSEFSRUQx
KSAkKFNIQVJFRDIpICQoU0hBUkVEMykKKyQoU0hBUkVEMSk6ICQoU0hBUkVEMykKKwlsbiAtZnMg
JChTSEFSRUQzKSAkKFNIQVJFRDEpCiskKFNIQVJFRDIpOiAkKFNIQVJFRDMpCisJbG4gLWZzICQo
U0hBUkVEMykgJChTSEFSRUQyKQorZW5kaWYKKworJChTSEFSRUQzKToKKwkkKENYWCkgJChMREZM
QUdTKSAkKFBMQVRGT1JNX1NIQVJFRF9MREZMQUdTKSQoU0hBUkVEMikgJChDWFhGTEFHUykgJChQ
TEFURk9STV9TSEFSRURfQ0ZMQUdTKSAkKFNPVVJDRVMpIC1vICQoU0hBUkVEMykgJChMSUJTKQor
CitlbmRpZiAgIyBQTEFURk9STV9TSEFSRURfRVhUCisKK2FsbDogJChTSEFSRUQpICQoTElCUkFS
WSkKKworY2hlY2s6IGFsbCAkKFBST0dSQU1TKSAkKFRFU1RTKQorCWZvciB0IGluICQoVEVTVFMp
OyBkbyBlY2hvICIqKioqKiBSdW5uaW5nICQkdCI7IC4vJCR0IHx8IGV4aXQgMTsgZG9uZQorCitj
bGVhbjoKKwktcm0gLWYgJChQUk9HUkFNUykgJChCRU5DSE1BUktTKSAkKExJQlJBUlkpICQoU0hB
UkVEKSAkKE1FTUVOVkxJQlJBUlkpICovKi5vICovKi8qLm8gaW9zLXg4Ni8qLyoubyBpb3MtYXJt
LyovKi5vIGJ1aWxkX2NvbmZpZy5taworCS1ybSAtcmYgaW9zLXg4Ni8qIGlvcy1hcm0vKgorCisk
KExJQlJBUlkpOiAkKExJQk9CSkVDVFMpCisJcm0gLWYgJEAKKwkkKEFSKSAtcnMgJEAgJChMSUJP
QkpFQ1RTKQorCitkYl9iZW5jaDogZGIvZGJfYmVuY2gubyAkKExJQk9CSkVDVFMpICQoVEVTVFVU
SUwpCisJJChDWFgpICQoTERGTEFHUykgZGIvZGJfYmVuY2gubyAkKExJQk9CSkVDVFMpICQoVEVT
VFVUSUwpIC1vICRAICQoTElCUykKKworZGJfYmVuY2hfc3FsaXRlMzogZG9jL2JlbmNoL2RiX2Jl
bmNoX3NxbGl0ZTMubyAkKExJQk9CSkVDVFMpICQoVEVTVFVUSUwpCisJJChDWFgpICQoTERGTEFH
UykgZG9jL2JlbmNoL2RiX2JlbmNoX3NxbGl0ZTMubyAkKExJQk9CSkVDVFMpICQoVEVTVFVUSUwp
IC1vICRAIC1sc3FsaXRlMyAkKExJQlMpCisKK2RiX2JlbmNoX3RyZWVfZGI6IGRvYy9iZW5jaC9k
Yl9iZW5jaF90cmVlX2RiLm8gJChMSUJPQkpFQ1RTKSAkKFRFU1RVVElMKQorCSQoQ1hYKSAkKExE
RkxBR1MpIGRvYy9iZW5jaC9kYl9iZW5jaF90cmVlX2RiLm8gJChMSUJPQkpFQ1RTKSAkKFRFU1RV
VElMKSAtbyAkQCAtbGt5b3RvY2FiaW5ldCAkKExJQlMpCisKK2xldmVsZGJ1dGlsOiBkYi9sZXZl
bGRiX21haW4ubyAkKExJQk9CSkVDVFMpCisJJChDWFgpICQoTERGTEFHUykgZGIvbGV2ZWxkYl9t
YWluLm8gJChMSUJPQkpFQ1RTKSAtbyAkQCAkKExJQlMpCisKK2FyZW5hX3Rlc3Q6IHV0aWwvYXJl
bmFfdGVzdC5vICQoTElCT0JKRUNUUykgJChURVNUSEFSTkVTUykKKwkkKENYWCkgJChMREZMQUdT
KSB1dGlsL2FyZW5hX3Rlc3QubyAkKExJQk9CSkVDVFMpICQoVEVTVEhBUk5FU1MpIC1vICRAICQo
TElCUykKKworYmxvb21fdGVzdDogdXRpbC9ibG9vbV90ZXN0Lm8gJChMSUJPQkpFQ1RTKSAkKFRF
U1RIQVJORVNTKQorCSQoQ1hYKSAkKExERkxBR1MpIHV0aWwvYmxvb21fdGVzdC5vICQoTElCT0JK
RUNUUykgJChURVNUSEFSTkVTUykgLW8gJEAgJChMSUJTKQorCitjX3Rlc3Q6IGRiL2NfdGVzdC5v
ICQoTElCT0JKRUNUUykgJChURVNUSEFSTkVTUykKKwkkKENYWCkgJChMREZMQUdTKSBkYi9jX3Rl
c3QubyAkKExJQk9CSkVDVFMpICQoVEVTVEhBUk5FU1MpIC1vICRAICQoTElCUykKKworY2FjaGVf
dGVzdDogdXRpbC9jYWNoZV90ZXN0Lm8gJChMSUJPQkpFQ1RTKSAkKFRFU1RIQVJORVNTKQorCSQo
Q1hYKSAkKExERkxBR1MpIHV0aWwvY2FjaGVfdGVzdC5vICQoTElCT0JKRUNUUykgJChURVNUSEFS
TkVTUykgLW8gJEAgJChMSUJTKQorCitjb2RpbmdfdGVzdDogdXRpbC9jb2RpbmdfdGVzdC5vICQo
TElCT0JKRUNUUykgJChURVNUSEFSTkVTUykKKwkkKENYWCkgJChMREZMQUdTKSB1dGlsL2NvZGlu
Z190ZXN0Lm8gJChMSUJPQkpFQ1RTKSAkKFRFU1RIQVJORVNTKSAtbyAkQCAkKExJQlMpCisKK2Nv
cnJ1cHRpb25fdGVzdDogZGIvY29ycnVwdGlvbl90ZXN0Lm8gJChMSUJPQkpFQ1RTKSAkKFRFU1RI
QVJORVNTKQorCSQoQ1hYKSAkKExERkxBR1MpIGRiL2NvcnJ1cHRpb25fdGVzdC5vICQoTElCT0JK
RUNUUykgJChURVNUSEFSTkVTUykgLW8gJEAgJChMSUJTKQorCitjcmMzMmNfdGVzdDogdXRpbC9j
cmMzMmNfdGVzdC5vICQoTElCT0JKRUNUUykgJChURVNUSEFSTkVTUykKKwkkKENYWCkgJChMREZM
QUdTKSB1dGlsL2NyYzMyY190ZXN0Lm8gJChMSUJPQkpFQ1RTKSAkKFRFU1RIQVJORVNTKSAtbyAk
QCAkKExJQlMpCisKK2RiX3Rlc3Q6IGRiL2RiX3Rlc3QubyAkKExJQk9CSkVDVFMpICQoVEVTVEhB
Uk5FU1MpCisJJChDWFgpICQoTERGTEFHUykgZGIvZGJfdGVzdC5vICQoTElCT0JKRUNUUykgJChU
RVNUSEFSTkVTUykgLW8gJEAgJChMSUJTKQorCitkYmZvcm1hdF90ZXN0OiBkYi9kYmZvcm1hdF90
ZXN0Lm8gJChMSUJPQkpFQ1RTKSAkKFRFU1RIQVJORVNTKQorCSQoQ1hYKSAkKExERkxBR1MpIGRi
L2RiZm9ybWF0X3Rlc3QubyAkKExJQk9CSkVDVFMpICQoVEVTVEhBUk5FU1MpIC1vICRAICQoTElC
UykKKworZW52X3Rlc3Q6IHV0aWwvZW52X3Rlc3QubyAkKExJQk9CSkVDVFMpICQoVEVTVEhBUk5F
U1MpCisJJChDWFgpICQoTERGTEFHUykgdXRpbC9lbnZfdGVzdC5vICQoTElCT0JKRUNUUykgJChU
RVNUSEFSTkVTUykgLW8gJEAgJChMSUJTKQorCitmaWxlbmFtZV90ZXN0OiBkYi9maWxlbmFtZV90
ZXN0Lm8gJChMSUJPQkpFQ1RTKSAkKFRFU1RIQVJORVNTKQorCSQoQ1hYKSAkKExERkxBR1MpIGRi
L2ZpbGVuYW1lX3Rlc3QubyAkKExJQk9CSkVDVFMpICQoVEVTVEhBUk5FU1MpIC1vICRAICQoTElC
UykKKworZmlsdGVyX2Jsb2NrX3Rlc3Q6IHRhYmxlL2ZpbHRlcl9ibG9ja190ZXN0Lm8gJChMSUJP
QkpFQ1RTKSAkKFRFU1RIQVJORVNTKQorCSQoQ1hYKSAkKExERkxBR1MpIHRhYmxlL2ZpbHRlcl9i
bG9ja190ZXN0Lm8gJChMSUJPQkpFQ1RTKSAkKFRFU1RIQVJORVNTKSAtbyAkQCAkKExJQlMpCisK
K2xvZ190ZXN0OiBkYi9sb2dfdGVzdC5vICQoTElCT0JKRUNUUykgJChURVNUSEFSTkVTUykKKwkk
KENYWCkgJChMREZMQUdTKSBkYi9sb2dfdGVzdC5vICQoTElCT0JKRUNUUykgJChURVNUSEFSTkVT
UykgLW8gJEAgJChMSUJTKQorCit0YWJsZV90ZXN0OiB0YWJsZS90YWJsZV90ZXN0Lm8gJChMSUJP
QkpFQ1RTKSAkKFRFU1RIQVJORVNTKQorCSQoQ1hYKSAkKExERkxBR1MpIHRhYmxlL3RhYmxlX3Rl
c3QubyAkKExJQk9CSkVDVFMpICQoVEVTVEhBUk5FU1MpIC1vICRAICQoTElCUykKKworc2tpcGxp
c3RfdGVzdDogZGIvc2tpcGxpc3RfdGVzdC5vICQoTElCT0JKRUNUUykgJChURVNUSEFSTkVTUykK
KwkkKENYWCkgJChMREZMQUdTKSBkYi9za2lwbGlzdF90ZXN0Lm8gJChMSUJPQkpFQ1RTKSAkKFRF
U1RIQVJORVNTKSAtbyAkQCAkKExJQlMpCisKK3ZlcnNpb25fZWRpdF90ZXN0OiBkYi92ZXJzaW9u
X2VkaXRfdGVzdC5vICQoTElCT0JKRUNUUykgJChURVNUSEFSTkVTUykKKwkkKENYWCkgJChMREZM
QUdTKSBkYi92ZXJzaW9uX2VkaXRfdGVzdC5vICQoTElCT0JKRUNUUykgJChURVNUSEFSTkVTUykg
LW8gJEAgJChMSUJTKQorCit2ZXJzaW9uX3NldF90ZXN0OiBkYi92ZXJzaW9uX3NldF90ZXN0Lm8g
JChMSUJPQkpFQ1RTKSAkKFRFU1RIQVJORVNTKQorCSQoQ1hYKSAkKExERkxBR1MpIGRiL3ZlcnNp
b25fc2V0X3Rlc3QubyAkKExJQk9CSkVDVFMpICQoVEVTVEhBUk5FU1MpIC1vICRAICQoTElCUykK
Kword3JpdGVfYmF0Y2hfdGVzdDogZGIvd3JpdGVfYmF0Y2hfdGVzdC5vICQoTElCT0JKRUNUUykg
JChURVNUSEFSTkVTUykKKwkkKENYWCkgJChMREZMQUdTKSBkYi93cml0ZV9iYXRjaF90ZXN0Lm8g
JChMSUJPQkpFQ1RTKSAkKFRFU1RIQVJORVNTKSAtbyAkQCAkKExJQlMpCisKKyQoTUVNRU5WTElC
UkFSWSkgOiAkKE1FTUVOVk9CSkVDVFMpCisJcm0gLWYgJEAKKwkkKEFSKSAtcnMgJEAgJChNRU1F
TlZPQkpFQ1RTKQorCittZW1lbnZfdGVzdCA6IGhlbHBlcnMvbWVtZW52L21lbWVudl90ZXN0Lm8g
JChNRU1FTlZMSUJSQVJZKSAkKExJQlJBUlkpICQoVEVTVEhBUk5FU1MpCisJJChDWFgpICQoTERG
TEFHUykgaGVscGVycy9tZW1lbnYvbWVtZW52X3Rlc3QubyAkKE1FTUVOVkxJQlJBUlkpICQoTElC
UkFSWSkgJChURVNUSEFSTkVTUykgLW8gJEAgJChMSUJTKQorCitpZmVxICgkKFBMQVRGT1JNKSwg
SU9TKQorIyBGb3IgaU9TLCBjcmVhdGUgdW5pdmVyc2FsIG9iamVjdCBmaWxlcyB0byBiZSB1c2Vk
IG9uIGJvdGggdGhlIHNpbXVsYXRvciBhbmQKKyMgYSBkZXZpY2UuCitQTEFURk9STVNST09UPS9B
cHBsaWNhdGlvbnMvWGNvZGUuYXBwL0NvbnRlbnRzL0RldmVsb3Blci9QbGF0Zm9ybXMKK1NJTVVM
QVRPUlJPT1Q9JChQTEFURk9STVNST09UKS9pUGhvbmVTaW11bGF0b3IucGxhdGZvcm0vRGV2ZWxv
cGVyCitERVZJQ0VST09UPSQoUExBVEZPUk1TUk9PVCkvaVBob25lT1MucGxhdGZvcm0vRGV2ZWxv
cGVyCitJT1NWRVJTSU9OPSQoc2hlbGwgZGVmYXVsdHMgcmVhZCAkKFBMQVRGT1JNU1JPT1QpL2lQ
aG9uZU9TLnBsYXRmb3JtL3ZlcnNpb24gQ0ZCdW5kbGVTaG9ydFZlcnNpb25TdHJpbmcpCisKKy5j
Yy5vOgorCW1rZGlyIC1wIGlvcy14ODYvJChkaXIgJEApCisJJChDWFgpICQoQ1hYRkxBR1MpIC1p
c3lzcm9vdCAkKFNJTVVMQVRPUlJPT1QpL1NES3MvaVBob25lU2ltdWxhdG9yJChJT1NWRVJTSU9O
KS5zZGsgLWFyY2ggaTY4NiAtYyAkPCAtbyBpb3MteDg2LyRACisJbWtkaXIgLXAgaW9zLWFybS8k
KGRpciAkQCkKKwkkKERFVklDRVJPT1QpL3Vzci9iaW4vJChDWFgpICQoQ1hYRkxBR1MpIC1pc3lz
cm9vdCAkKERFVklDRVJPT1QpL1NES3MvaVBob25lT1MkKElPU1ZFUlNJT04pLnNkayAtYXJjaCBh
cm12NiAtYXJjaCBhcm12NyAtYyAkPCAtbyBpb3MtYXJtLyRACisJbGlwbyBpb3MteDg2LyRAIGlv
cy1hcm0vJEAgLWNyZWF0ZSAtb3V0cHV0ICRACisKKy5jLm86CisJbWtkaXIgLXAgaW9zLXg4Ni8k
KGRpciAkQCkKKwkkKENDKSAkKENGTEFHUykgLWlzeXNyb290ICQoU0lNVUxBVE9SUk9PVCkvU0RL
cy9pUGhvbmVTaW11bGF0b3IkKElPU1ZFUlNJT04pLnNkayAtYXJjaCBpNjg2IC1jICQ8IC1vIGlv
cy14ODYvJEAKKwlta2RpciAtcCBpb3MtYXJtLyQoZGlyICRAKQorCSQoREVWSUNFUk9PVCkvdXNy
L2Jpbi8kKENDKSAkKENGTEFHUykgLWlzeXNyb290ICQoREVWSUNFUk9PVCkvU0RLcy9pUGhvbmVP
UyQoSU9TVkVSU0lPTikuc2RrIC1hcmNoIGFybXY2IC1hcmNoIGFybXY3IC1jICQ8IC1vIGlvcy1h
cm0vJEAKKwlsaXBvIGlvcy14ODYvJEAgaW9zLWFybS8kQCAtY3JlYXRlIC1vdXRwdXQgJEAKKwor
ZWxzZQorLmNjLm86CisJJChDWFgpICQoQ1hYRkxBR1MpIC1jICQ8IC1vICRACisKKy5jLm86CisJ
JChDQykgJChDRkxBR1MpIC1jICQ8IC1vICRACitlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvbGV2ZWxkYi9ORVdTIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9ORVdTCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjNmZDk5MjQyZDdiYmNmZWZmZWNmZDAxYzA4NzBmODkzODI3NjZiYWYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL05FV1MKQEAgLTAsMCArMSwx
NyBAQAorUmVsZWFzZSAxLjIgMjAxMS0wNS0xNgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitG
aXhlcyBmb3IgbGFyZ2VyIGRhdGFiYXNlcyAodGVzdGVkIHVwIHRvIG9uZSBiaWxsaW9uIDEwMC1i
eXRlIGVudHJpZXMsCitpLmUuLCB+MTAwR0IpLgorCisoMSkgUGxhY2UgaGFyZCBsaW1pdCBvbiBu
dW1iZXIgb2YgbGV2ZWwtMCBmaWxlcy4gIFRoaXMgZml4ZXMgZXJyb3JzCitvZiB0aGUgZm9ybSAi
dG9vIG1hbnkgb3BlbiBmaWxlcyIuCisKKygyKSBGaXhlZCBtZW10YWJsZSBtYW5hZ2VtZW50LiAg
QmVmb3JlIHRoZSBmaXgsIGEgaGVhdnkgd3JpdGUgYnVyc3QKK2NvdWxkIGNhdXNlIHVuYm91bmRl
ZCBtZW1vcnkgdXNhZ2UuCisKK0EgZml4IGZvciBhIGxvZ2dpbmcgYnVnIHdoZXJlIHRoZSByZWFk
ZXIgd291bGQgaW5jb3JyZWN0bHkgY29tcGxhaW4KK2Fib3V0IGNvcnJ1cHRpb24uCisKK0FsbG93
IHB1YmxpYyBhY2Nlc3MgdG8gV3JpdGVCYXRjaCBjb250ZW50cyBzbyB0aGF0IHVzZXJzIGNhbiBl
YXNpbHkKK3dyYXAgYSBEQi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIv
UkVBRE1FIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9SRUFETUUKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzYx
OGFkZWVlZGJlYTA0YTE0ZTAwZDVhMWVmMzNkZDRmMGE3YmUwNgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvUkVBRE1FCkBAIC0wLDAgKzEsNTEgQEAKK2xldmVs
ZGI6IEEga2V5LXZhbHVlIHN0b3JlCitBdXRob3JzOiBTYW5qYXkgR2hlbWF3YXQgKHNhbmpheUBn
b29nbGUuY29tKSBhbmQgSmVmZiBEZWFuIChqZWZmQGdvb2dsZS5jb20pCisKK1RoZSBjb2RlIHVu
ZGVyIHRoaXMgZGlyZWN0b3J5IGltcGxlbWVudHMgYSBzeXN0ZW0gZm9yIG1haW50YWluaW5nIGEK
K3BlcnNpc3RlbnQga2V5L3ZhbHVlIHN0b3JlLgorCitTZWUgZG9jL2luZGV4Lmh0bWwgZm9yIG1v
cmUgZXhwbGFuYXRpb24uCitTZWUgZG9jL2ltcGwuaHRtbCBmb3IgYSBicmllZiBvdmVydmlldyBv
ZiB0aGUgaW1wbGVtZW50YXRpb24uCisKK1RoZSBwdWJsaWMgaW50ZXJmYWNlIGlzIGluIGluY2x1
ZGUvKi5oLiAgQ2FsbGVycyBzaG91bGQgbm90IGluY2x1ZGUgb3IKK3JlbHkgb24gdGhlIGRldGFp
bHMgb2YgYW55IG90aGVyIGhlYWRlciBmaWxlcyBpbiB0aGlzIHBhY2thZ2UuICBUaG9zZQoraW50
ZXJuYWwgQVBJcyBtYXkgYmUgY2hhbmdlZCB3aXRob3V0IHdhcm5pbmcuCisKK0d1aWRlIHRvIGhl
YWRlciBmaWxlczoKKworaW5jbHVkZS9kYi5oCisgICAgTWFpbiBpbnRlcmZhY2UgdG8gdGhlIERC
OiBTdGFydCBoZXJlCisKK2luY2x1ZGUvb3B0aW9ucy5oCisgICAgQ29udHJvbCBvdmVyIHRoZSBi
ZWhhdmlvciBvZiBhbiBlbnRpcmUgZGF0YWJhc2UsIGFuZCBhbHNvCisgICAgY29udHJvbCBvdmVy
IHRoZSBiZWhhdmlvciBvZiBpbmRpdmlkdWFsIHJlYWRzIGFuZCB3cml0ZXMuCisKK2luY2x1ZGUv
Y29tcGFyYXRvci5oCisgICAgQWJzdHJhY3Rpb24gZm9yIHVzZXItc3BlY2lmaWVkIGNvbXBhcmlz
b24gZnVuY3Rpb24uICBJZiB5b3Ugd2FudAorICAgIGp1c3QgYnl0ZXdpc2UgY29tcGFyaXNvbiBv
ZiBrZXlzLCB5b3UgY2FuIHVzZSB0aGUgZGVmYXVsdCBjb21wYXJhdG9yLAorICAgIGJ1dCBjbGll
bnRzIGNhbiB3cml0ZSB0aGVpciBvd24gY29tcGFyYXRvciBpbXBsZW1lbnRhdGlvbnMgaWYgdGhl
eQorICAgIHdhbnQgY3VzdG9tIG9yZGVyaW5nIChlLmcuIHRvIGhhbmRsZSBkaWZmZXJlbnQgY2hh
cmFjdGVyCisgICAgZW5jb2RpbmdzLCBldGMuKQorCitpbmNsdWRlL2l0ZXJhdG9yLmgKKyAgICBJ
bnRlcmZhY2UgZm9yIGl0ZXJhdGluZyBvdmVyIGRhdGEuIFlvdSBjYW4gZ2V0IGFuIGl0ZXJhdG9y
CisgICAgZnJvbSBhIERCIG9iamVjdC4KKworaW5jbHVkZS93cml0ZV9iYXRjaC5oCisgICAgSW50
ZXJmYWNlIGZvciBhdG9taWNhbGx5IGFwcGx5aW5nIG11bHRpcGxlIHVwZGF0ZXMgdG8gYSBkYXRh
YmFzZS4KKworaW5jbHVkZS9zbGljZS5oCisgICAgQSBzaW1wbGUgbW9kdWxlIGZvciBtYWludGFp
bmluZyBhIHBvaW50ZXIgYW5kIGEgbGVuZ3RoIGludG8gc29tZQorICAgIG90aGVyIGJ5dGUgYXJy
YXkuCisKK2luY2x1ZGUvc3RhdHVzLmgKKyAgICBTdGF0dXMgaXMgcmV0dXJuZWQgZnJvbSBtYW55
IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlcyBhbmQgaXMgdXNlZAorICAgIHRvIHJlcG9ydCBzdWNj
ZXNzIGFuZCB2YXJpb3VzIGtpbmRzIG9mIGVycm9ycy4KKworaW5jbHVkZS9lbnYuaAorICAgIEFi
c3RyYWN0aW9uIG9mIHRoZSBPUyBlbnZpcm9ubWVudC4gIEEgcG9zaXggaW1wbGVtZW50YXRpb24g
b2YKKyAgICB0aGlzIGludGVyZmFjZSBpcyBpbiB1dGlsL2Vudl9wb3NpeC5jYworCitpbmNsdWRl
L3RhYmxlLmgKK2luY2x1ZGUvdGFibGVfYnVpbGRlci5oCisgICAgTG93ZXItbGV2ZWwgbW9kdWxl
cyB0aGF0IG1vc3QgY2xpZW50cyBwcm9iYWJseSB3b24ndCB1c2UgZGlyZWN0bHkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvVE9ETyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xl
dmVsZGIvVE9ETwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNjAzYzA3MTM3ZjFlYTE5OGEzZGU5Y2EzYmJiMzY5ZTFj
MDY5ZjYxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9UT0RP
CkBAIC0wLDAgKzEsMTQgQEAKK3NzCistIFN0YXRzCisKK2RiCistIE1heWJlIGltcGxlbWVudCBE
Qjo6QnVsa0RlbGV0ZUZvclJhbmdlKHN0YXJ0X2tleSwgZW5kX2tleSkKKyAgdGhhdCB3b3VsZCBi
bG93IGF3YXkgZmlsZXMgd2hvc2UgcmFuZ2VzIGFyZSBlbnRpcmVseSBjb250YWluZWQKKyAgd2l0
aGluIFtzdGFydF9rZXkuLmVuZF9rZXldPyAgRm9yIENocm9tZSwgZGVsZXRpb24gb2Ygb2Jzb2xl
dGUKKyAgb2JqZWN0IHN0b3JlcywgZXRjLiBjYW4gYmUgZG9uZSBpbiB0aGUgYmFja2dyb3VuZCBh
bnl3YXksIHNvCisgIHByb2JhYmx5IG5vdCB0aGF0IGltcG9ydGFudC4KKy0gVGhlcmUgaGF2ZSBi
ZWVuIHJlcXVlc3RzIGZvciBNdWx0aUdldC4KKworQWZ0ZXIgYSByYW5nZSBpcyBjb21wbGV0ZWx5
IGRlbGV0ZWQsIHdoYXQgZ2V0cyByaWQgb2YgdGhlCitjb3JyZXNwb25kaW5nIGZpbGVzIGlmIHdl
IGRvIG5vIGZ1dHVyZSBjaGFuZ2VzIHRvIHRoYXQgcmFuZ2UuICBNYWtlCit0aGUgY29uZGl0aW9u
cyBmb3IgdHJpZ2dlcmluZyBjb21wYWN0aW9ucyBmaXJlIGluIG1vcmUgc2l0dWF0aW9ucz8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvYnVpbGRfZGV0ZWN0X3BsYXRmb3Jt
IGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9idWlsZF9kZXRlY3RfcGxhdGZvcm0KbmV3IGZp
bGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNTgwMWQyMDc5NWY4MzA4ZDNhYjczZjIyYWYzNjkzZmQ3MTAxZWVkOAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvYnVpbGRfZGV0ZWN0X3BsYXRmb3Jt
CkBAIC0wLDAgKzEsMjAzIEBACisjIS9iaW4vc2gKKyMKKyMgRGV0ZWN0cyBPUyB3ZSdyZSBjb21w
aWxpbmcgb24gYW5kIG91dHB1dHMgYSBmaWxlIHNwZWNpZmllZCBieSB0aGUgZmlyc3QKKyMgYXJn
dW1lbnQsIHdoaWNoIGluIHR1cm4gZ2V0cyByZWFkIHdoaWxlIHByb2Nlc3NpbmcgTWFrZWZpbGUu
CisjCisjIFRoZSBvdXRwdXQgd2lsbCBzZXQgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXM6CisjICAg
Q0MgICAgICAgICAgICAgICAgICAgICAgICAgIEMgQ29tcGlsZXIgcGF0aAorIyAgIENYWCAgICAg
ICAgICAgICAgICAgICAgICAgICBDKysgQ29tcGlsZXIgcGF0aAorIyAgIFBMQVRGT1JNX0xERkxB
R1MgICAgICAgICAgICBMaW5rZXIgZmxhZ3MKKyMgICBQTEFURk9STV9MSUJTICAgICAgICAgICAg
ICAgTGlicmFyaWVzIGZsYWdzCisjICAgUExBVEZPUk1fU0hBUkVEX0VYVCAgICAgICAgIEV4dGVu
c2lvbiBmb3Igc2hhcmVkIGxpYnJhcmllcworIyAgIFBMQVRGT1JNX1NIQVJFRF9MREZMQUdTICAg
ICBGbGFncyBmb3IgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcnkKKyMgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVGhpcyBmbGFnIGlzIGVtYmVkZGVkIGp1c3QgYmVmb3JlIHRoZSBuYW1lCisj
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBzaGFyZWQgbGlicmFyeSB3aXRo
b3V0IGludGVydmVuaW5nIHNwYWNlcworIyAgIFBMQVRGT1JNX1NIQVJFRF9DRkxBR1MgICAgICBG
bGFncyBmb3IgY29tcGlsaW5nIG9iamVjdHMgZm9yIHNoYXJlZCBsaWJyYXJ5CisjICAgUExBVEZP
Uk1fQ0NGTEFHUyAgICAgICAgICAgIEMgY29tcGlsZXIgZmxhZ3MKKyMgICBQTEFURk9STV9DWFhG
TEFHUyAgICAgICAgICAgQysrIGNvbXBpbGVyIGZsYWdzLiAgV2lsbCBjb250YWluOgorIyAgIFBM
QVRGT1JNX1NIQVJFRF9WRVJTSU9ORUQgICBTZXQgdG8gJ3RydWUnIGlmIHBsYXRmb3JtIHN1cHBv
cnRzIHZlcnNpb25lZAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWQgbGli
cmFyaWVzLCBlbXB0eSBvdGhlcndpc2UuCisjCisjIFRoZSBQTEFURk9STV9DQ0ZMQUdTIGFuZCBQ
TEFURk9STV9DWFhGTEFHUyBtaWdodCBpbmNsdWRlIHRoZSBmb2xsb3dpbmc6CisjCisjICAgICAg
IC1ETEVWRUxEQl9DU1REQVRPTUlDX1BSRVNFTlQgaWYgPGNzdGRhdG9taWM+IGlzIHByZXNlbnQK
KyMgICAgICAgLURMRVZFTERCX1BMQVRGT1JNX1BPU0lYICAgICBmb3IgUG9zaXgtYmFzZWQgcGxh
dGZvcm1zCisjICAgICAgIC1EU05BUFBZICAgICAgICAgICAgICAgICAgICAgaWYgdGhlIFNuYXBw
eSBsaWJyYXJ5IGlzIHByZXNlbnQKKyMKKworT1VUUFVUPSQxCitQUkVGSVg9JDIKK2lmIHRlc3Qg
LXogIiRPVVRQVVQiIHx8IHRlc3QgLXogIiRQUkVGSVgiOyB0aGVuCisgIGVjaG8gInVzYWdlOiAk
MCA8b3V0cHV0LWZpbGVuYW1lPiA8ZGlyZWN0b3J5X3ByZWZpeD4iID4mMgorICBleGl0IDEKK2Zp
CisKKyMgRGVsZXRlIGV4aXN0aW5nIG91dHB1dCwgaWYgaXQgZXhpc3RzCitybSAtZiAkT1VUUFVU
Cit0b3VjaCAkT1VUUFVUCisKK2lmIHRlc3QgLXogIiRDQyI7IHRoZW4KKyAgICBDQz1jYworZmkK
KworaWYgdGVzdCAteiAiJENYWCI7IHRoZW4KKyAgICBDWFg9ZysrCitmaQorCisjIERldGVjdCBP
UworaWYgdGVzdCAteiAiJFRBUkdFVF9PUyI7IHRoZW4KKyAgICBUQVJHRVRfT1M9YHVuYW1lIC1z
YAorZmkKKworQ09NTU9OX0ZMQUdTPQorQ1JPU1NfQ09NUElMRT0KK1BMQVRGT1JNX0NDRkxBR1M9
CitQTEFURk9STV9DWFhGTEFHUz0KK1BMQVRGT1JNX0xERkxBR1M9CitQTEFURk9STV9MSUJTPQor
UExBVEZPUk1fU0hBUkVEX0VYVD0ic28iCitQTEFURk9STV9TSEFSRURfTERGTEFHUz0iLXNoYXJl
ZCAtV2wsLXNvbmFtZSAtV2wsIgorUExBVEZPUk1fU0hBUkVEX0NGTEFHUz0iLWZQSUMiCitQTEFU
Rk9STV9TSEFSRURfVkVSU0lPTkVEPXRydWUKKworTUVNQ01QX0ZMQUc9CitpZiBbICIkQ1hYIiA9
ICJnKysiIF07IHRoZW4KKyAgICAjIFVzZSBsaWJjJ3MgbWVtY21wIGluc3RlYWQgb2YgR0NDJ3Mg
bWVtY21wLiAgVGhpcyByZXN1bHRzIGluIH40MCUKKyAgICAjIHBlcmZvcm1hbmNlIGltcHJvdmVt
ZW50IG9uIHJlYWRyYW5kb20gdW5kZXIgZ2NjIDQuNC4zIG9uIExpbnV4L3g4Ni4KKyAgICBNRU1D
TVBfRkxBRz0iLWZuby1idWlsdGluLW1lbWNtcCIKK2ZpCisKK2Nhc2UgIiRUQVJHRVRfT1MiIGlu
CisgICAgRGFyd2luKQorICAgICAgICBQTEFURk9STT1PU19NQUNPU1gKKyAgICAgICAgQ09NTU9O
X0ZMQUdTPSIkTUVNQ01QX0ZMQUcgLURPU19NQUNPU1giCisgICAgICAgIFBMQVRGT1JNX1NIQVJF
RF9FWFQ9ZHlsaWIKKyAgICAgICAgWyAteiAiJElOU1RBTExfUEFUSCIgXSAmJiBJTlNUQUxMX1BB
VEg9YHB3ZGAKKyAgICAgICAgUExBVEZPUk1fU0hBUkVEX0xERkxBR1M9Ii1keW5hbWljbGliIC1p
bnN0YWxsX25hbWUgJElOU1RBTExfUEFUSC8iCisgICAgICAgIFBPUlRfRklMRT1wb3J0L3BvcnRf
cG9zaXguY2MKKyAgICAgICAgOzsKKyAgICBMaW51eCkKKyAgICAgICAgUExBVEZPUk09T1NfTElO
VVgKKyAgICAgICAgQ09NTU9OX0ZMQUdTPSIkTUVNQ01QX0ZMQUcgLXB0aHJlYWQgLURPU19MSU5V
WCIKKyAgICAgICAgUExBVEZPUk1fTERGTEFHUz0iLXB0aHJlYWQiCisgICAgICAgIFBPUlRfRklM
RT1wb3J0L3BvcnRfcG9zaXguY2MKKyAgICAgICAgOzsKKyAgICBTdW5PUykKKyAgICAgICAgUExB
VEZPUk09T1NfU09MQVJJUworICAgICAgICBDT01NT05fRkxBR1M9IiRNRU1DTVBfRkxBRyAtRF9S
RUVOVFJBTlQgLURPU19TT0xBUklTIgorICAgICAgICBQTEFURk9STV9MSUJTPSItbHB0aHJlYWQg
LWxydCIKKyAgICAgICAgUE9SVF9GSUxFPXBvcnQvcG9ydF9wb3NpeC5jYworICAgICAgICA7Owor
ICAgIEZyZWVCU0QpCisgICAgICAgIFBMQVRGT1JNPU9TX0ZSRUVCU0QKKyAgICAgICAgQ09NTU9O
X0ZMQUdTPSIkTUVNQ01QX0ZMQUcgLURfUkVFTlRSQU5UIC1ET1NfRlJFRUJTRCIKKyAgICAgICAg
UExBVEZPUk1fTElCUz0iLWxwdGhyZWFkIgorICAgICAgICBQT1JUX0ZJTEU9cG9ydC9wb3J0X3Bv
c2l4LmNjCisgICAgICAgIDs7CisgICAgTmV0QlNEKQorICAgICAgICBQTEFURk9STT1PU19ORVRC
U0QKKyAgICAgICAgQ09NTU9OX0ZMQUdTPSIkTUVNQ01QX0ZMQUcgLURfUkVFTlRSQU5UIC1ET1Nf
TkVUQlNEIgorICAgICAgICBQTEFURk9STV9MSUJTPSItbHB0aHJlYWQgLWxnY2NfcyIKKyAgICAg
ICAgUE9SVF9GSUxFPXBvcnQvcG9ydF9wb3NpeC5jYworICAgICAgICA7OworICAgIE9wZW5CU0Qp
CisgICAgICAgIFBMQVRGT1JNPU9TX09QRU5CU0QKKyAgICAgICAgQ09NTU9OX0ZMQUdTPSIkTUVN
Q01QX0ZMQUcgLURfUkVFTlRSQU5UIC1ET1NfT1BFTkJTRCIKKyAgICAgICAgUExBVEZPUk1fTERG
TEFHUz0iLXB0aHJlYWQiCisgICAgICAgIFBPUlRfRklMRT1wb3J0L3BvcnRfcG9zaXguY2MKKyAg
ICAgICAgOzsKKyAgICBEcmFnb25GbHkpCisgICAgICAgIFBMQVRGT1JNPU9TX0RSQUdPTkZMWUJT
RAorICAgICAgICBDT01NT05fRkxBR1M9IiRNRU1DTVBfRkxBRyAtRF9SRUVOVFJBTlQgLURPU19E
UkFHT05GTFlCU0QiCisgICAgICAgIFBMQVRGT1JNX0xJQlM9Ii1scHRocmVhZCIKKyAgICAgICAg
UE9SVF9GSUxFPXBvcnQvcG9ydF9wb3NpeC5jYworICAgICAgICA7OworICAgIE9TX0FORFJPSURf
Q1JPU1NDT01QSUxFKQorICAgICAgICBQTEFURk9STT1PU19BTkRST0lECisgICAgICAgIENPTU1P
Tl9GTEFHUz0iJE1FTUNNUF9GTEFHIC1EX1JFRU5UUkFOVCAtRE9TX0FORFJPSUQgLURMRVZFTERC
X1BMQVRGT1JNX1BPU0lYIgorICAgICAgICBQTEFURk9STV9MREZMQUdTPSIiICAjIEFsbCBwdGhy
ZWFkIGZlYXR1cmVzIGFyZSBpbiB0aGUgQW5kcm9pZCBDIGxpYnJhcnkKKyAgICAgICAgUE9SVF9G
SUxFPXBvcnQvcG9ydF9wb3NpeC5jYworICAgICAgICBDUk9TU19DT01QSUxFPXRydWUKKyAgICAg
ICAgOzsKKyAgICBIUC1VWCkKKyAgICAgICAgUExBVEZPUk09T1NfSFBVWAorICAgICAgICBDT01N
T05fRkxBR1M9IiRNRU1DTVBfRkxBRyAtRF9SRUVOVFJBTlQgLURPU19IUFVYIgorICAgICAgICBQ
TEFURk9STV9MREZMQUdTPSItcHRocmVhZCIKKyAgICAgICAgUE9SVF9GSUxFPXBvcnQvcG9ydF9w
b3NpeC5jYworICAgICAgICAjIG1hbiBsZDogK2ggaW50ZXJuYWxfbmFtZQorICAgICAgICBQTEFU
Rk9STV9TSEFSRURfTERGTEFHUz0iLXNoYXJlZCAtV2wsK2ggLVdsLCIKKyAgICAgICAgOzsKKyAg
ICAqKQorICAgICAgICBlY2hvICJVbmtub3duIHBsYXRmb3JtISIgPiYyCisgICAgICAgIGV4aXQg
MQorZXNhYworCisjIFdlIHdhbnQgdG8gbWFrZSBhIGxpc3Qgb2YgYWxsIGNjIGZpbGVzIHdpdGhp
biB1dGlsLCBkYiwgdGFibGUsIGFuZCBoZWxwZXJzCisjIGV4Y2VwdCBmb3IgdGhlIHRlc3QgYW5k
IGJlbmNobWFyayBmaWxlcy4gQnkgZGVmYXVsdCwgZmluZCB3aWxsIG91dHB1dCBhIGxpc3QKKyMg
b2YgYWxsIGZpbGVzIG1hdGNoaW5nIGVpdGhlciBydWxlLCBzbyB3ZSBuZWVkIHRvIGFwcGVuZCAt
cHJpbnQgdG8gbWFrZSB0aGUKKyMgcHJ1bmUgdGFrZSBlZmZlY3QuCitESVJTPSIkUFJFRklYL2Ri
ICRQUkVGSVgvdXRpbCAkUFJFRklYL3RhYmxlIgorCitzZXQgLWYgIyB0ZW1wb3JhcmlseSBkaXNh
YmxlIGdsb2JiaW5nIHNvIHRoYXQgb3VyIHBhdHRlcm5zIGFyZW4ndCBleHBhbmRlZAorUFJVTkVf
VEVTVD0iLW5hbWUgKnRlc3QqLmNjIC1wcnVuZSIKK1BSVU5FX0JFTkNIPSItbmFtZSAqX2JlbmNo
LmNjIC1wcnVuZSIKK1BSVU5FX1RPT0w9Ii1uYW1lIGxldmVsZGJfbWFpbi5jYyAtcHJ1bmUiCitQ
T1JUQUJMRV9GSUxFUz1gZmluZCAkRElSUyAkUFJVTkVfVEVTVCAtbyAkUFJVTkVfQkVOQ0ggLW8g
JFBSVU5FX1RPT0wgLW8gLW5hbWUgJyouY2MnIC1wcmludCB8IHNvcnQgfCBzZWQgInMsXiRQUkVG
SVgvLCwiIHwgdHIgIlxuIiAiICJgCisKK3NldCArZiAjIHJlLWVuYWJsZSBnbG9iYmluZworCisj
IFRoZSBzb3VyY2VzIGNvbnNpc3Qgb2YgdGhlIHBvcnRhYmxlIGZpbGVzLCBwbHVzIHRoZSBwbGF0
Zm9ybS1zcGVjaWZpYyBwb3J0CisjIGZpbGUuCitlY2hvICJTT1VSQ0VTPSRQT1JUQUJMRV9GSUxF
UyAkUE9SVF9GSUxFIiA+PiAkT1VUUFVUCitlY2hvICJNRU1FTlZfU09VUkNFUz1oZWxwZXJzL21l
bWVudi9tZW1lbnYuY2MiID4+ICRPVVRQVVQKKworaWYgWyAiJENST1NTX0NPTVBJTEUiID0gInRy
dWUiIF07IHRoZW4KKyAgICAjIENyb3NzLWNvbXBpbGluZzsgZG8gbm90IHRyeSBhbnkgY29tcGls
YXRpb24gdGVzdHMuCisgICAgdHJ1ZQorZWxzZQorICAgICMgSWYgLXN0ZD1jKysweCB3b3Jrcywg
dXNlIDxjc3RkYXRvbWljPi4gIE90aGVyd2lzZSB1c2UgcG9ydF9wb3NpeC5oLgorICAgICRDWFgg
JENYWEZMQUdTIC1zdGQ9YysrMHggLXggYysrIC0gLW8gL2Rldi9udWxsIDI+L2Rldi9udWxsICA8
PEVPRgorICAgICAgI2luY2x1ZGUgPGNzdGRhdG9taWM+CisgICAgICBpbnQgbWFpbigpIHt9CitF
T0YKKyAgICBpZiBbICIkPyIgPSAwIF07IHRoZW4KKyAgICAgICAgQ09NTU9OX0ZMQUdTPSIkQ09N
TU9OX0ZMQUdTIC1ETEVWRUxEQl9QTEFURk9STV9QT1NJWCAtRExFVkVMREJfQ1NUREFUT01JQ19Q
UkVTRU5UIgorICAgICAgICBQTEFURk9STV9DWFhGTEFHUz0iLXN0ZD1jKysweCIKKyAgICBlbHNl
CisgICAgICAgIENPTU1PTl9GTEFHUz0iJENPTU1PTl9GTEFHUyAtRExFVkVMREJfUExBVEZPUk1f
UE9TSVgiCisgICAgZmkKKworICAgICMgVGVzdCB3aGV0aGVyIFNuYXBweSBsaWJyYXJ5IGlzIGlu
c3RhbGxlZAorICAgICMgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3NuYXBweS8KKyAgICAkQ1hY
ICRDWFhGTEFHUyAteCBjKysgLSAtbyAvZGV2L251bGwgMj4vZGV2L251bGwgIDw8RU9GCisgICAg
ICAjaW5jbHVkZSA8c25hcHB5Lmg+CisgICAgICBpbnQgbWFpbigpIHt9CitFT0YKKyAgICBpZiBb
ICIkPyIgPSAwIF07IHRoZW4KKyAgICAgICAgQ09NTU9OX0ZMQUdTPSIkQ09NTU9OX0ZMQUdTIC1E
U05BUFBZIgorICAgICAgICBQTEFURk9STV9MSUJTPSIkUExBVEZPUk1fTElCUyAtbHNuYXBweSIK
KyAgICBmaQorCisgICAgIyBUZXN0IHdoZXRoZXIgdGNtYWxsb2MgaXMgYXZhaWxhYmxlCisgICAg
JENYWCAkQ1hYRkxBR1MgLXggYysrIC0gLW8gL2Rldi9udWxsIC1sdGNtYWxsb2MgMj4vZGV2L251
bGwgIDw8RU9GCisgICAgICBpbnQgbWFpbigpIHt9CitFT0YKKyAgICBpZiBbICIkPyIgPSAwIF07
IHRoZW4KKyAgICAgICAgUExBVEZPUk1fTElCUz0iJFBMQVRGT1JNX0xJQlMgLWx0Y21hbGxvYyIK
KyAgICBmaQorZmkKKworUExBVEZPUk1fQ0NGTEFHUz0iJFBMQVRGT1JNX0NDRkxBR1MgJENPTU1P
Tl9GTEFHUyIKK1BMQVRGT1JNX0NYWEZMQUdTPSIkUExBVEZPUk1fQ1hYRkxBR1MgJENPTU1PTl9G
TEFHUyIKKworZWNobyAiQ0M9JENDIiA+PiAkT1VUUFVUCitlY2hvICJDWFg9JENYWCIgPj4gJE9V
VFBVVAorZWNobyAiUExBVEZPUk09JFBMQVRGT1JNIiA+PiAkT1VUUFVUCitlY2hvICJQTEFURk9S
TV9MREZMQUdTPSRQTEFURk9STV9MREZMQUdTIiA+PiAkT1VUUFVUCitlY2hvICJQTEFURk9STV9M
SUJTPSRQTEFURk9STV9MSUJTIiA+PiAkT1VUUFVUCitlY2hvICJQTEFURk9STV9DQ0ZMQUdTPSRQ
TEFURk9STV9DQ0ZMQUdTIiA+PiAkT1VUUFVUCitlY2hvICJQTEFURk9STV9DWFhGTEFHUz0kUExB
VEZPUk1fQ1hYRkxBR1MiID4+ICRPVVRQVVQKK2VjaG8gIlBMQVRGT1JNX1NIQVJFRF9DRkxBR1M9
JFBMQVRGT1JNX1NIQVJFRF9DRkxBR1MiID4+ICRPVVRQVVQKK2VjaG8gIlBMQVRGT1JNX1NIQVJF
RF9FWFQ9JFBMQVRGT1JNX1NIQVJFRF9FWFQiID4+ICRPVVRQVVQKK2VjaG8gIlBMQVRGT1JNX1NI
QVJFRF9MREZMQUdTPSRQTEFURk9STV9TSEFSRURfTERGTEFHUyIgPj4gJE9VVFBVVAorZWNobyAi
UExBVEZPUk1fU0hBUkVEX1ZFUlNJT05FRD0kUExBVEZPUk1fU0hBUkVEX1ZFUlNJT05FRCIgPj4g
JE9VVFBVVApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9idWlsZGVy
LmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9idWlsZGVyLmNjCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmY0MTk4ODIxOTczYzk0ZjJlMjgxNDhmNzlhMTBjYTJjNDhkOGQxZTYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2J1aWxkZXIuY2MKQEAgLTAsMCArMSw4
OCBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgorCisj
aW5jbHVkZSAiZGIvYnVpbGRlci5oIgorCisjaW5jbHVkZSAiZGIvZmlsZW5hbWUuaCIKKyNpbmNs
dWRlICJkYi9kYmZvcm1hdC5oIgorI2luY2x1ZGUgImRiL3RhYmxlX2NhY2hlLmgiCisjaW5jbHVk
ZSAiZGIvdmVyc2lvbl9lZGl0LmgiCisjaW5jbHVkZSAibGV2ZWxkYi9kYi5oIgorI2luY2x1ZGUg
ImxldmVsZGIvZW52LmgiCisjaW5jbHVkZSAibGV2ZWxkYi9pdGVyYXRvci5oIgorCituYW1lc3Bh
Y2UgbGV2ZWxkYiB7CisKK1N0YXR1cyBCdWlsZFRhYmxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBkYm5h
bWUsCisgICAgICAgICAgICAgICAgICBFbnYqIGVudiwKKyAgICAgICAgICAgICAgICAgIGNvbnN0
IE9wdGlvbnMmIG9wdGlvbnMsCisgICAgICAgICAgICAgICAgICBUYWJsZUNhY2hlKiB0YWJsZV9j
YWNoZSwKKyAgICAgICAgICAgICAgICAgIEl0ZXJhdG9yKiBpdGVyLAorICAgICAgICAgICAgICAg
ICAgRmlsZU1ldGFEYXRhKiBtZXRhKSB7CisgIFN0YXR1cyBzOworICBtZXRhLT5maWxlX3NpemUg
PSAwOworICBpdGVyLT5TZWVrVG9GaXJzdCgpOworCisgIHN0ZDo6c3RyaW5nIGZuYW1lID0gVGFi
bGVGaWxlTmFtZShkYm5hbWUsIG1ldGEtPm51bWJlcik7CisgIGlmIChpdGVyLT5WYWxpZCgpKSB7
CisgICAgV3JpdGFibGVGaWxlKiBmaWxlOworICAgIHMgPSBlbnYtPk5ld1dyaXRhYmxlRmlsZShm
bmFtZSwgJmZpbGUpOworICAgIGlmICghcy5vaygpKSB7CisgICAgICByZXR1cm4gczsKKyAgICB9
CisKKyAgICBUYWJsZUJ1aWxkZXIqIGJ1aWxkZXIgPSBuZXcgVGFibGVCdWlsZGVyKG9wdGlvbnMs
IGZpbGUpOworICAgIG1ldGEtPnNtYWxsZXN0LkRlY29kZUZyb20oaXRlci0+a2V5KCkpOworICAg
IGZvciAoOyBpdGVyLT5WYWxpZCgpOyBpdGVyLT5OZXh0KCkpIHsKKyAgICAgIFNsaWNlIGtleSA9
IGl0ZXItPmtleSgpOworICAgICAgbWV0YS0+bGFyZ2VzdC5EZWNvZGVGcm9tKGtleSk7CisgICAg
ICBidWlsZGVyLT5BZGQoa2V5LCBpdGVyLT52YWx1ZSgpKTsKKyAgICB9CisKKyAgICAvLyBGaW5p
c2ggYW5kIGNoZWNrIGZvciBidWlsZGVyIGVycm9ycworICAgIGlmIChzLm9rKCkpIHsKKyAgICAg
IHMgPSBidWlsZGVyLT5GaW5pc2goKTsKKyAgICAgIGlmIChzLm9rKCkpIHsKKyAgICAgICAgbWV0
YS0+ZmlsZV9zaXplID0gYnVpbGRlci0+RmlsZVNpemUoKTsKKyAgICAgICAgYXNzZXJ0KG1ldGEt
PmZpbGVfc2l6ZSA+IDApOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBidWlsZGVyLT5B
YmFuZG9uKCk7CisgICAgfQorICAgIGRlbGV0ZSBidWlsZGVyOworCisgICAgLy8gRmluaXNoIGFu
ZCBjaGVjayBmb3IgZmlsZSBlcnJvcnMKKyAgICBpZiAocy5vaygpKSB7CisgICAgICBzID0gZmls
ZS0+U3luYygpOworICAgIH0KKyAgICBpZiAocy5vaygpKSB7CisgICAgICBzID0gZmlsZS0+Q2xv
c2UoKTsKKyAgICB9CisgICAgZGVsZXRlIGZpbGU7CisgICAgZmlsZSA9IE5VTEw7CisKKyAgICBp
ZiAocy5vaygpKSB7CisgICAgICAvLyBWZXJpZnkgdGhhdCB0aGUgdGFibGUgaXMgdXNhYmxlCisg
ICAgICBJdGVyYXRvciogaXQgPSB0YWJsZV9jYWNoZS0+TmV3SXRlcmF0b3IoUmVhZE9wdGlvbnMo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhLT5u
dW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0
YS0+ZmlsZV9zaXplKTsKKyAgICAgIHMgPSBpdC0+c3RhdHVzKCk7CisgICAgICBkZWxldGUgaXQ7
CisgICAgfQorICB9CisKKyAgLy8gQ2hlY2sgZm9yIGlucHV0IGl0ZXJhdG9yIGVycm9ycworICBp
ZiAoIWl0ZXItPnN0YXR1cygpLm9rKCkpIHsKKyAgICBzID0gaXRlci0+c3RhdHVzKCk7CisgIH0K
KworICBpZiAocy5vaygpICYmIG1ldGEtPmZpbGVfc2l6ZSA+IDApIHsKKyAgICAvLyBLZWVwIGl0
CisgIH0gZWxzZSB7CisgICAgZW52LT5EZWxldGVGaWxlKGZuYW1lKTsKKyAgfQorICByZXR1cm4g
czsKK30KKworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xldmVsZGIvZGIvYnVpbGRlci5oIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9k
Yi9idWlsZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjI0MzFmY2Y0NGY0NTQ1NDkwMjkxZDhlYzFhYjA5OGMy
ZmMyYmE4OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIv
YnVpbGRlci5oCkBAIC0wLDAgKzEsMzQgQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2
ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVz
IG9mIGNvbnRyaWJ1dG9ycy4KKworI2lmbmRlZiBTVE9SQUdFX0xFVkVMREJfREJfQlVJTERFUl9I
XworI2RlZmluZSBTVE9SQUdFX0xFVkVMREJfREJfQlVJTERFUl9IXworCisjaW5jbHVkZSAibGV2
ZWxkYi9zdGF0dXMuaCIKKworbmFtZXNwYWNlIGxldmVsZGIgeworCitzdHJ1Y3QgT3B0aW9uczsK
K3N0cnVjdCBGaWxlTWV0YURhdGE7CisKK2NsYXNzIEVudjsKK2NsYXNzIEl0ZXJhdG9yOworY2xh
c3MgVGFibGVDYWNoZTsKK2NsYXNzIFZlcnNpb25FZGl0OworCisvLyBCdWlsZCBhIFRhYmxlIGZp
bGUgZnJvbSB0aGUgY29udGVudHMgb2YgKml0ZXIuICBUaGUgZ2VuZXJhdGVkIGZpbGUKKy8vIHdp
bGwgYmUgbmFtZWQgYWNjb3JkaW5nIHRvIG1ldGEtPm51bWJlci4gIE9uIHN1Y2Nlc3MsIHRoZSBy
ZXN0IG9mCisvLyAqbWV0YSB3aWxsIGJlIGZpbGxlZCB3aXRoIG1ldGFkYXRhIGFib3V0IHRoZSBn
ZW5lcmF0ZWQgdGFibGUuCisvLyBJZiBubyBkYXRhIGlzIHByZXNlbnQgaW4gKml0ZXIsIG1ldGEt
PmZpbGVfc2l6ZSB3aWxsIGJlIHNldCB0bworLy8gemVybywgYW5kIG5vIFRhYmxlIGZpbGUgd2ls
bCBiZSBwcm9kdWNlZC4KK2V4dGVybiBTdGF0dXMgQnVpbGRUYWJsZShjb25zdCBzdGQ6OnN0cmlu
ZyYgZGJuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgIEVudiogZW52LAorICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgVGFibGVDYWNoZSogdGFibGVfY2FjaGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgSXRlcmF0b3IqIGl0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZU1ldGFEYXRh
KiBtZXRhKTsKKworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKKworI2VuZGlmICAvLyBTVE9SQUdF
X0xFVkVMREJfREJfQlVJTERFUl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2
ZWxkYi9kYi9jLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9jLmNjCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjA4ZmYwYWQ5MGFjMDBkNjNmMDVkNWQ3MWZiODlmOWY3MDE4OTQwNTgKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2MuY2MKQEAgLTAsMCArMSw1OTUg
QEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2lu
Y2x1ZGUgImxldmVsZGIvYy5oIgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5p
c3RkLmg+CisjaW5jbHVkZSAibGV2ZWxkYi9jYWNoZS5oIgorI2luY2x1ZGUgImxldmVsZGIvY29t
cGFyYXRvci5oIgorI2luY2x1ZGUgImxldmVsZGIvZGIuaCIKKyNpbmNsdWRlICJsZXZlbGRiL2Vu
di5oIgorI2luY2x1ZGUgImxldmVsZGIvZmlsdGVyX3BvbGljeS5oIgorI2luY2x1ZGUgImxldmVs
ZGIvaXRlcmF0b3IuaCIKKyNpbmNsdWRlICJsZXZlbGRiL29wdGlvbnMuaCIKKyNpbmNsdWRlICJs
ZXZlbGRiL3N0YXR1cy5oIgorI2luY2x1ZGUgImxldmVsZGIvd3JpdGVfYmF0Y2guaCIKKwordXNp
bmcgbGV2ZWxkYjo6Q2FjaGU7Cit1c2luZyBsZXZlbGRiOjpDb21wYXJhdG9yOwordXNpbmcgbGV2
ZWxkYjo6Q29tcHJlc3Npb25UeXBlOwordXNpbmcgbGV2ZWxkYjo6REI7Cit1c2luZyBsZXZlbGRi
OjpFbnY7Cit1c2luZyBsZXZlbGRiOjpGaWxlTG9jazsKK3VzaW5nIGxldmVsZGI6OkZpbHRlclBv
bGljeTsKK3VzaW5nIGxldmVsZGI6Okl0ZXJhdG9yOwordXNpbmcgbGV2ZWxkYjo6a01ham9yVmVy
c2lvbjsKK3VzaW5nIGxldmVsZGI6OmtNaW5vclZlcnNpb247Cit1c2luZyBsZXZlbGRiOjpMb2dn
ZXI7Cit1c2luZyBsZXZlbGRiOjpOZXdCbG9vbUZpbHRlclBvbGljeTsKK3VzaW5nIGxldmVsZGI6
Ok5ld0xSVUNhY2hlOwordXNpbmcgbGV2ZWxkYjo6T3B0aW9uczsKK3VzaW5nIGxldmVsZGI6OlJh
bmRvbUFjY2Vzc0ZpbGU7Cit1c2luZyBsZXZlbGRiOjpSYW5nZTsKK3VzaW5nIGxldmVsZGI6OlJl
YWRPcHRpb25zOwordXNpbmcgbGV2ZWxkYjo6U2VxdWVudGlhbEZpbGU7Cit1c2luZyBsZXZlbGRi
OjpTbGljZTsKK3VzaW5nIGxldmVsZGI6OlNuYXBzaG90OwordXNpbmcgbGV2ZWxkYjo6U3RhdHVz
OwordXNpbmcgbGV2ZWxkYjo6V3JpdGFibGVGaWxlOwordXNpbmcgbGV2ZWxkYjo6V3JpdGVCYXRj
aDsKK3VzaW5nIGxldmVsZGI6OldyaXRlT3B0aW9uczsKKworZXh0ZXJuICJDIiB7CisKK3N0cnVj
dCBsZXZlbGRiX3QgICAgICAgICAgICAgIHsgREIqICAgICAgICAgICAgICAgcmVwOyB9Oworc3Ry
dWN0IGxldmVsZGJfaXRlcmF0b3JfdCAgICAgeyBJdGVyYXRvciogICAgICAgICByZXA7IH07Citz
dHJ1Y3QgbGV2ZWxkYl93cml0ZWJhdGNoX3QgICB7IFdyaXRlQmF0Y2ggICAgICAgIHJlcDsgfTsK
K3N0cnVjdCBsZXZlbGRiX3NuYXBzaG90X3QgICAgIHsgY29uc3QgU25hcHNob3QqICAgcmVwOyB9
Oworc3RydWN0IGxldmVsZGJfcmVhZG9wdGlvbnNfdCAgeyBSZWFkT3B0aW9ucyAgICAgICByZXA7
IH07CitzdHJ1Y3QgbGV2ZWxkYl93cml0ZW9wdGlvbnNfdCB7IFdyaXRlT3B0aW9ucyAgICAgIHJl
cDsgfTsKK3N0cnVjdCBsZXZlbGRiX29wdGlvbnNfdCAgICAgIHsgT3B0aW9ucyAgICAgICAgICAg
cmVwOyB9Oworc3RydWN0IGxldmVsZGJfY2FjaGVfdCAgICAgICAgeyBDYWNoZSogICAgICAgICAg
ICByZXA7IH07CitzdHJ1Y3QgbGV2ZWxkYl9zZXFmaWxlX3QgICAgICB7IFNlcXVlbnRpYWxGaWxl
KiAgIHJlcDsgfTsKK3N0cnVjdCBsZXZlbGRiX3JhbmRvbWZpbGVfdCAgIHsgUmFuZG9tQWNjZXNz
RmlsZSogcmVwOyB9Oworc3RydWN0IGxldmVsZGJfd3JpdGFibGVmaWxlX3QgeyBXcml0YWJsZUZp
bGUqICAgICByZXA7IH07CitzdHJ1Y3QgbGV2ZWxkYl9sb2dnZXJfdCAgICAgICB7IExvZ2dlciog
ICAgICAgICAgIHJlcDsgfTsKK3N0cnVjdCBsZXZlbGRiX2ZpbGVsb2NrX3QgICAgIHsgRmlsZUxv
Y2sqICAgICAgICAgcmVwOyB9OworCitzdHJ1Y3QgbGV2ZWxkYl9jb21wYXJhdG9yX3QgOiBwdWJs
aWMgQ29tcGFyYXRvciB7CisgIHZvaWQqIHN0YXRlXzsKKyAgdm9pZCAoKmRlc3RydWN0b3JfKSh2
b2lkKik7CisgIGludCAoKmNvbXBhcmVfKSgKKyAgICAgIHZvaWQqLAorICAgICAgY29uc3QgY2hh
ciogYSwgc2l6ZV90IGFsZW4sCisgICAgICBjb25zdCBjaGFyKiBiLCBzaXplX3QgYmxlbik7Cisg
IGNvbnN0IGNoYXIqICgqbmFtZV8pKHZvaWQqKTsKKworICB2aXJ0dWFsIH5sZXZlbGRiX2NvbXBh
cmF0b3JfdCgpIHsKKyAgICAoKmRlc3RydWN0b3JfKShzdGF0ZV8pOworICB9CisKKyAgdmlydHVh
bCBpbnQgQ29tcGFyZShjb25zdCBTbGljZSYgYSwgY29uc3QgU2xpY2UmIGIpIGNvbnN0IHsKKyAg
ICByZXR1cm4gKCpjb21wYXJlXykoc3RhdGVfLCBhLmRhdGEoKSwgYS5zaXplKCksIGIuZGF0YSgp
LCBiLnNpemUoKSk7CisgIH0KKworICB2aXJ0dWFsIGNvbnN0IGNoYXIqIE5hbWUoKSBjb25zdCB7
CisgICAgcmV0dXJuICgqbmFtZV8pKHN0YXRlXyk7CisgIH0KKworICAvLyBOby1vcHMgc2luY2Ug
dGhlIEMgYmluZGluZyBkb2VzIG5vdCBzdXBwb3J0IGtleSBzaG9ydGVuaW5nIG1ldGhvZHMuCisg
IHZpcnR1YWwgdm9pZCBGaW5kU2hvcnRlc3RTZXBhcmF0b3Ioc3RkOjpzdHJpbmcqLCBjb25zdCBT
bGljZSYpIGNvbnN0IHsgfQorICB2aXJ0dWFsIHZvaWQgRmluZFNob3J0U3VjY2Vzc29yKHN0ZDo6
c3RyaW5nKiBrZXkpIGNvbnN0IHsgfQorfTsKKworc3RydWN0IGxldmVsZGJfZmlsdGVycG9saWN5
X3QgOiBwdWJsaWMgRmlsdGVyUG9saWN5IHsKKyAgdm9pZCogc3RhdGVfOworICB2b2lkICgqZGVz
dHJ1Y3Rvcl8pKHZvaWQqKTsKKyAgY29uc3QgY2hhciogKCpuYW1lXykodm9pZCopOworICBjaGFy
KiAoKmNyZWF0ZV8pKAorICAgICAgdm9pZCosCisgICAgICBjb25zdCBjaGFyKiBjb25zdCoga2V5
X2FycmF5LCBjb25zdCBzaXplX3QqIGtleV9sZW5ndGhfYXJyYXksCisgICAgICBpbnQgbnVtX2tl
eXMsCisgICAgICBzaXplX3QqIGZpbHRlcl9sZW5ndGgpOworICB1bnNpZ25lZCBjaGFyICgqa2V5
X21hdGNoXykoCisgICAgICB2b2lkKiwKKyAgICAgIGNvbnN0IGNoYXIqIGtleSwgc2l6ZV90IGxl
bmd0aCwKKyAgICAgIGNvbnN0IGNoYXIqIGZpbHRlciwgc2l6ZV90IGZpbHRlcl9sZW5ndGgpOwor
CisgIHZpcnR1YWwgfmxldmVsZGJfZmlsdGVycG9saWN5X3QoKSB7CisgICAgKCpkZXN0cnVjdG9y
Xykoc3RhdGVfKTsKKyAgfQorCisgIHZpcnR1YWwgY29uc3QgY2hhciogTmFtZSgpIGNvbnN0IHsK
KyAgICByZXR1cm4gKCpuYW1lXykoc3RhdGVfKTsKKyAgfQorCisgIHZpcnR1YWwgdm9pZCBDcmVh
dGVGaWx0ZXIoY29uc3QgU2xpY2UqIGtleXMsIGludCBuLCBzdGQ6OnN0cmluZyogZHN0KSBjb25z
dCB7CisgICAgc3RkOjp2ZWN0b3I8Y29uc3QgY2hhcio+IGtleV9wb2ludGVycyhuKTsKKyAgICBz
dGQ6OnZlY3RvcjxzaXplX3Q+IGtleV9zaXplcyhuKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8
IG47IGkrKykgeworICAgICAga2V5X3BvaW50ZXJzW2ldID0ga2V5c1tpXS5kYXRhKCk7CisgICAg
ICBrZXlfc2l6ZXNbaV0gPSBrZXlzW2ldLnNpemUoKTsKKyAgICB9CisgICAgc2l6ZV90IGxlbjsK
KyAgICBjaGFyKiBmaWx0ZXIgPSAoKmNyZWF0ZV8pKHN0YXRlXywgJmtleV9wb2ludGVyc1swXSwg
JmtleV9zaXplc1swXSwgbiwgJmxlbik7CisgICAgZHN0LT5hcHBlbmQoZmlsdGVyLCBsZW4pOwor
ICAgIGZyZWUoZmlsdGVyKTsKKyAgfQorCisgIHZpcnR1YWwgYm9vbCBLZXlNYXlNYXRjaChjb25z
dCBTbGljZSYga2V5LCBjb25zdCBTbGljZSYgZmlsdGVyKSBjb25zdCB7CisgICAgcmV0dXJuICgq
a2V5X21hdGNoXykoc3RhdGVfLCBrZXkuZGF0YSgpLCBrZXkuc2l6ZSgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgIGZpbHRlci5kYXRhKCksIGZpbHRlci5zaXplKCkpOworICB9Cit9OworCitz
dHJ1Y3QgbGV2ZWxkYl9lbnZfdCB7CisgIEVudiogcmVwOworICBib29sIGlzX2RlZmF1bHQ7Cit9
OworCitzdGF0aWMgYm9vbCBTYXZlRXJyb3IoY2hhcioqIGVycnB0ciwgY29uc3QgU3RhdHVzJiBz
KSB7CisgIGFzc2VydChlcnJwdHIgIT0gTlVMTCk7CisgIGlmIChzLm9rKCkpIHsKKyAgICByZXR1
cm4gZmFsc2U7CisgIH0gZWxzZSBpZiAoKmVycnB0ciA9PSBOVUxMKSB7CisgICAgKmVycnB0ciA9
IHN0cmR1cChzLlRvU3RyaW5nKCkuY19zdHIoKSk7CisgIH0gZWxzZSB7CisgICAgLy8gVE9ETyhz
YW5qYXkpOiBNZXJnZSB3aXRoIGV4aXN0aW5nIGVycm9yPworICAgIGZyZWUoKmVycnB0cik7Cisg
ICAgKmVycnB0ciA9IHN0cmR1cChzLlRvU3RyaW5nKCkuY19zdHIoKSk7CisgIH0KKyAgcmV0dXJu
IHRydWU7Cit9CisKK3N0YXRpYyBjaGFyKiBDb3B5U3RyaW5nKGNvbnN0IHN0ZDo6c3RyaW5nJiBz
dHIpIHsKKyAgY2hhciogcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obWFsbG9jKHNp
emVvZihjaGFyKSAqIHN0ci5zaXplKCkpKTsKKyAgbWVtY3B5KHJlc3VsdCwgc3RyLmRhdGEoKSwg
c2l6ZW9mKGNoYXIpICogc3RyLnNpemUoKSk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK2xldmVs
ZGJfdCogbGV2ZWxkYl9vcGVuKAorICAgIGNvbnN0IGxldmVsZGJfb3B0aW9uc190KiBvcHRpb25z
LAorICAgIGNvbnN0IGNoYXIqIG5hbWUsCisgICAgY2hhcioqIGVycnB0cikgeworICBEQiogZGI7
CisgIGlmIChTYXZlRXJyb3IoZXJycHRyLCBEQjo6T3BlbihvcHRpb25zLT5yZXAsIHN0ZDo6c3Ry
aW5nKG5hbWUpLCAmZGIpKSkgeworICAgIHJldHVybiBOVUxMOworICB9CisgIGxldmVsZGJfdCog
cmVzdWx0ID0gbmV3IGxldmVsZGJfdDsKKyAgcmVzdWx0LT5yZXAgPSBkYjsKKyAgcmV0dXJuIHJl
c3VsdDsKK30KKwordm9pZCBsZXZlbGRiX2Nsb3NlKGxldmVsZGJfdCogZGIpIHsKKyAgZGVsZXRl
IGRiLT5yZXA7CisgIGRlbGV0ZSBkYjsKK30KKwordm9pZCBsZXZlbGRiX3B1dCgKKyAgICBsZXZl
bGRiX3QqIGRiLAorICAgIGNvbnN0IGxldmVsZGJfd3JpdGVvcHRpb25zX3QqIG9wdGlvbnMsCisg
ICAgY29uc3QgY2hhcioga2V5LCBzaXplX3Qga2V5bGVuLAorICAgIGNvbnN0IGNoYXIqIHZhbCwg
c2l6ZV90IHZhbGxlbiwKKyAgICBjaGFyKiogZXJycHRyKSB7CisgIFNhdmVFcnJvcihlcnJwdHIs
CisgICAgICAgICAgICBkYi0+cmVwLT5QdXQob3B0aW9ucy0+cmVwLCBTbGljZShrZXksIGtleWxl
biksIFNsaWNlKHZhbCwgdmFsbGVuKSkpOworfQorCit2b2lkIGxldmVsZGJfZGVsZXRlKAorICAg
IGxldmVsZGJfdCogZGIsCisgICAgY29uc3QgbGV2ZWxkYl93cml0ZW9wdGlvbnNfdCogb3B0aW9u
cywKKyAgICBjb25zdCBjaGFyKiBrZXksIHNpemVfdCBrZXlsZW4sCisgICAgY2hhcioqIGVycnB0
cikgeworICBTYXZlRXJyb3IoZXJycHRyLCBkYi0+cmVwLT5EZWxldGUob3B0aW9ucy0+cmVwLCBT
bGljZShrZXksIGtleWxlbikpKTsKK30KKworCit2b2lkIGxldmVsZGJfd3JpdGUoCisgICAgbGV2
ZWxkYl90KiBkYiwKKyAgICBjb25zdCBsZXZlbGRiX3dyaXRlb3B0aW9uc190KiBvcHRpb25zLAor
ICAgIGxldmVsZGJfd3JpdGViYXRjaF90KiBiYXRjaCwKKyAgICBjaGFyKiogZXJycHRyKSB7Cisg
IFNhdmVFcnJvcihlcnJwdHIsIGRiLT5yZXAtPldyaXRlKG9wdGlvbnMtPnJlcCwgJmJhdGNoLT5y
ZXApKTsKK30KKworY2hhciogbGV2ZWxkYl9nZXQoCisgICAgbGV2ZWxkYl90KiBkYiwKKyAgICBj
b25zdCBsZXZlbGRiX3JlYWRvcHRpb25zX3QqIG9wdGlvbnMsCisgICAgY29uc3QgY2hhcioga2V5
LCBzaXplX3Qga2V5bGVuLAorICAgIHNpemVfdCogdmFsbGVuLAorICAgIGNoYXIqKiBlcnJwdHIp
IHsKKyAgY2hhciogcmVzdWx0ID0gTlVMTDsKKyAgc3RkOjpzdHJpbmcgdG1wOworICBTdGF0dXMg
cyA9IGRiLT5yZXAtPkdldChvcHRpb25zLT5yZXAsIFNsaWNlKGtleSwga2V5bGVuKSwgJnRtcCk7
CisgIGlmIChzLm9rKCkpIHsKKyAgICAqdmFsbGVuID0gdG1wLnNpemUoKTsKKyAgICByZXN1bHQg
PSBDb3B5U3RyaW5nKHRtcCk7CisgIH0gZWxzZSB7CisgICAgKnZhbGxlbiA9IDA7CisgICAgaWYg
KCFzLklzTm90Rm91bmQoKSkgeworICAgICAgU2F2ZUVycm9yKGVycnB0ciwgcyk7CisgICAgfQor
ICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKK2xldmVsZGJfaXRlcmF0b3JfdCogbGV2ZWxkYl9j
cmVhdGVfaXRlcmF0b3IoCisgICAgbGV2ZWxkYl90KiBkYiwKKyAgICBjb25zdCBsZXZlbGRiX3Jl
YWRvcHRpb25zX3QqIG9wdGlvbnMpIHsKKyAgbGV2ZWxkYl9pdGVyYXRvcl90KiByZXN1bHQgPSBu
ZXcgbGV2ZWxkYl9pdGVyYXRvcl90OworICByZXN1bHQtPnJlcCA9IGRiLT5yZXAtPk5ld0l0ZXJh
dG9yKG9wdGlvbnMtPnJlcCk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK2NvbnN0IGxldmVsZGJf
c25hcHNob3RfdCogbGV2ZWxkYl9jcmVhdGVfc25hcHNob3QoCisgICAgbGV2ZWxkYl90KiBkYikg
eworICBsZXZlbGRiX3NuYXBzaG90X3QqIHJlc3VsdCA9IG5ldyBsZXZlbGRiX3NuYXBzaG90X3Q7
CisgIHJlc3VsdC0+cmVwID0gZGItPnJlcC0+R2V0U25hcHNob3QoKTsKKyAgcmV0dXJuIHJlc3Vs
dDsKK30KKwordm9pZCBsZXZlbGRiX3JlbGVhc2Vfc25hcHNob3QoCisgICAgbGV2ZWxkYl90KiBk
YiwKKyAgICBjb25zdCBsZXZlbGRiX3NuYXBzaG90X3QqIHNuYXBzaG90KSB7CisgIGRiLT5yZXAt
PlJlbGVhc2VTbmFwc2hvdChzbmFwc2hvdC0+cmVwKTsKKyAgZGVsZXRlIHNuYXBzaG90OworfQor
CitjaGFyKiBsZXZlbGRiX3Byb3BlcnR5X3ZhbHVlKAorICAgIGxldmVsZGJfdCogZGIsCisgICAg
Y29uc3QgY2hhciogcHJvcG5hbWUpIHsKKyAgc3RkOjpzdHJpbmcgdG1wOworICBpZiAoZGItPnJl
cC0+R2V0UHJvcGVydHkoU2xpY2UocHJvcG5hbWUpLCAmdG1wKSkgeworICAgIC8vIFdlIHVzZSBz
dHJkdXAoKSBzaW5jZSB3ZSBleHBlY3QgaHVtYW4gcmVhZGFibGUgb3V0cHV0LgorICAgIHJldHVy
biBzdHJkdXAodG1wLmNfc3RyKCkpOworICB9IGVsc2UgeworICAgIHJldHVybiBOVUxMOworICB9
Cit9CisKK3ZvaWQgbGV2ZWxkYl9hcHByb3hpbWF0ZV9zaXplcygKKyAgICBsZXZlbGRiX3QqIGRi
LAorICAgIGludCBudW1fcmFuZ2VzLAorICAgIGNvbnN0IGNoYXIqIGNvbnN0KiByYW5nZV9zdGFy
dF9rZXksIGNvbnN0IHNpemVfdCogcmFuZ2Vfc3RhcnRfa2V5X2xlbiwKKyAgICBjb25zdCBjaGFy
KiBjb25zdCogcmFuZ2VfbGltaXRfa2V5LCBjb25zdCBzaXplX3QqIHJhbmdlX2xpbWl0X2tleV9s
ZW4sCisgICAgdWludDY0X3QqIHNpemVzKSB7CisgIFJhbmdlKiByYW5nZXMgPSBuZXcgUmFuZ2Vb
bnVtX3Jhbmdlc107CisgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtX3JhbmdlczsgaSsrKSB7Cisg
ICAgcmFuZ2VzW2ldLnN0YXJ0ID0gU2xpY2UocmFuZ2Vfc3RhcnRfa2V5W2ldLCByYW5nZV9zdGFy
dF9rZXlfbGVuW2ldKTsKKyAgICByYW5nZXNbaV0ubGltaXQgPSBTbGljZShyYW5nZV9saW1pdF9r
ZXlbaV0sIHJhbmdlX2xpbWl0X2tleV9sZW5baV0pOworICB9CisgIGRiLT5yZXAtPkdldEFwcHJv
eGltYXRlU2l6ZXMocmFuZ2VzLCBudW1fcmFuZ2VzLCBzaXplcyk7CisgIGRlbGV0ZVtdIHJhbmdl
czsKK30KKwordm9pZCBsZXZlbGRiX2NvbXBhY3RfcmFuZ2UoCisgICAgbGV2ZWxkYl90KiBkYiwK
KyAgICBjb25zdCBjaGFyKiBzdGFydF9rZXksIHNpemVfdCBzdGFydF9rZXlfbGVuLAorICAgIGNv
bnN0IGNoYXIqIGxpbWl0X2tleSwgc2l6ZV90IGxpbWl0X2tleV9sZW4pIHsKKyAgU2xpY2UgYSwg
YjsKKyAgZGItPnJlcC0+Q29tcGFjdFJhbmdlKAorICAgICAgLy8gUGFzcyBOVUxMIFNsaWNlIGlm
IGNvcnJlc3BvbmRpbmcgImNvbnN0IGNoYXIqIiBpcyBOVUxMCisgICAgICAoc3RhcnRfa2V5ID8g
KGEgPSBTbGljZShzdGFydF9rZXksIHN0YXJ0X2tleV9sZW4pLCAmYSkgOiBOVUxMKSwKKyAgICAg
IChsaW1pdF9rZXkgPyAoYiA9IFNsaWNlKGxpbWl0X2tleSwgbGltaXRfa2V5X2xlbiksICZiKSA6
IE5VTEwpKTsKK30KKwordm9pZCBsZXZlbGRiX2Rlc3Ryb3lfZGIoCisgICAgY29uc3QgbGV2ZWxk
Yl9vcHRpb25zX3QqIG9wdGlvbnMsCisgICAgY29uc3QgY2hhciogbmFtZSwKKyAgICBjaGFyKiog
ZXJycHRyKSB7CisgIFNhdmVFcnJvcihlcnJwdHIsIERlc3Ryb3lEQihuYW1lLCBvcHRpb25zLT5y
ZXApKTsKK30KKwordm9pZCBsZXZlbGRiX3JlcGFpcl9kYigKKyAgICBjb25zdCBsZXZlbGRiX29w
dGlvbnNfdCogb3B0aW9ucywKKyAgICBjb25zdCBjaGFyKiBuYW1lLAorICAgIGNoYXIqKiBlcnJw
dHIpIHsKKyAgU2F2ZUVycm9yKGVycnB0ciwgUmVwYWlyREIobmFtZSwgb3B0aW9ucy0+cmVwKSk7
Cit9CisKK3ZvaWQgbGV2ZWxkYl9pdGVyX2Rlc3Ryb3kobGV2ZWxkYl9pdGVyYXRvcl90KiBpdGVy
KSB7CisgIGRlbGV0ZSBpdGVyLT5yZXA7CisgIGRlbGV0ZSBpdGVyOworfQorCit1bnNpZ25lZCBj
aGFyIGxldmVsZGJfaXRlcl92YWxpZChjb25zdCBsZXZlbGRiX2l0ZXJhdG9yX3QqIGl0ZXIpIHsK
KyAgcmV0dXJuIGl0ZXItPnJlcC0+VmFsaWQoKTsKK30KKwordm9pZCBsZXZlbGRiX2l0ZXJfc2Vl
a190b19maXJzdChsZXZlbGRiX2l0ZXJhdG9yX3QqIGl0ZXIpIHsKKyAgaXRlci0+cmVwLT5TZWVr
VG9GaXJzdCgpOworfQorCit2b2lkIGxldmVsZGJfaXRlcl9zZWVrX3RvX2xhc3QobGV2ZWxkYl9p
dGVyYXRvcl90KiBpdGVyKSB7CisgIGl0ZXItPnJlcC0+U2Vla1RvTGFzdCgpOworfQorCit2b2lk
IGxldmVsZGJfaXRlcl9zZWVrKGxldmVsZGJfaXRlcmF0b3JfdCogaXRlciwgY29uc3QgY2hhciog
aywgc2l6ZV90IGtsZW4pIHsKKyAgaXRlci0+cmVwLT5TZWVrKFNsaWNlKGssIGtsZW4pKTsKK30K
Kwordm9pZCBsZXZlbGRiX2l0ZXJfbmV4dChsZXZlbGRiX2l0ZXJhdG9yX3QqIGl0ZXIpIHsKKyAg
aXRlci0+cmVwLT5OZXh0KCk7Cit9CisKK3ZvaWQgbGV2ZWxkYl9pdGVyX3ByZXYobGV2ZWxkYl9p
dGVyYXRvcl90KiBpdGVyKSB7CisgIGl0ZXItPnJlcC0+UHJldigpOworfQorCitjb25zdCBjaGFy
KiBsZXZlbGRiX2l0ZXJfa2V5KGNvbnN0IGxldmVsZGJfaXRlcmF0b3JfdCogaXRlciwgc2l6ZV90
KiBrbGVuKSB7CisgIFNsaWNlIHMgPSBpdGVyLT5yZXAtPmtleSgpOworICAqa2xlbiA9IHMuc2l6
ZSgpOworICByZXR1cm4gcy5kYXRhKCk7Cit9CisKK2NvbnN0IGNoYXIqIGxldmVsZGJfaXRlcl92
YWx1ZShjb25zdCBsZXZlbGRiX2l0ZXJhdG9yX3QqIGl0ZXIsIHNpemVfdCogdmxlbikgeworICBT
bGljZSBzID0gaXRlci0+cmVwLT52YWx1ZSgpOworICAqdmxlbiA9IHMuc2l6ZSgpOworICByZXR1
cm4gcy5kYXRhKCk7Cit9CisKK3ZvaWQgbGV2ZWxkYl9pdGVyX2dldF9lcnJvcihjb25zdCBsZXZl
bGRiX2l0ZXJhdG9yX3QqIGl0ZXIsIGNoYXIqKiBlcnJwdHIpIHsKKyAgU2F2ZUVycm9yKGVycnB0
ciwgaXRlci0+cmVwLT5zdGF0dXMoKSk7Cit9CisKK2xldmVsZGJfd3JpdGViYXRjaF90KiBsZXZl
bGRiX3dyaXRlYmF0Y2hfY3JlYXRlKCkgeworICByZXR1cm4gbmV3IGxldmVsZGJfd3JpdGViYXRj
aF90OworfQorCit2b2lkIGxldmVsZGJfd3JpdGViYXRjaF9kZXN0cm95KGxldmVsZGJfd3JpdGVi
YXRjaF90KiBiKSB7CisgIGRlbGV0ZSBiOworfQorCit2b2lkIGxldmVsZGJfd3JpdGViYXRjaF9j
bGVhcihsZXZlbGRiX3dyaXRlYmF0Y2hfdCogYikgeworICBiLT5yZXAuQ2xlYXIoKTsKK30KKwor
dm9pZCBsZXZlbGRiX3dyaXRlYmF0Y2hfcHV0KAorICAgIGxldmVsZGJfd3JpdGViYXRjaF90KiBi
LAorICAgIGNvbnN0IGNoYXIqIGtleSwgc2l6ZV90IGtsZW4sCisgICAgY29uc3QgY2hhciogdmFs
LCBzaXplX3QgdmxlbikgeworICBiLT5yZXAuUHV0KFNsaWNlKGtleSwga2xlbiksIFNsaWNlKHZh
bCwgdmxlbikpOworfQorCit2b2lkIGxldmVsZGJfd3JpdGViYXRjaF9kZWxldGUoCisgICAgbGV2
ZWxkYl93cml0ZWJhdGNoX3QqIGIsCisgICAgY29uc3QgY2hhcioga2V5LCBzaXplX3Qga2xlbikg
eworICBiLT5yZXAuRGVsZXRlKFNsaWNlKGtleSwga2xlbikpOworfQorCit2b2lkIGxldmVsZGJf
d3JpdGViYXRjaF9pdGVyYXRlKAorICAgIGxldmVsZGJfd3JpdGViYXRjaF90KiBiLAorICAgIHZv
aWQqIHN0YXRlLAorICAgIHZvaWQgKCpwdXQpKHZvaWQqLCBjb25zdCBjaGFyKiBrLCBzaXplX3Qg
a2xlbiwgY29uc3QgY2hhciogdiwgc2l6ZV90IHZsZW4pLAorICAgIHZvaWQgKCpkZWxldGVkKSh2
b2lkKiwgY29uc3QgY2hhciogaywgc2l6ZV90IGtsZW4pKSB7CisgIGNsYXNzIEggOiBwdWJsaWMg
V3JpdGVCYXRjaDo6SGFuZGxlciB7CisgICBwdWJsaWM6CisgICAgdm9pZCogc3RhdGVfOworICAg
IHZvaWQgKCpwdXRfKSh2b2lkKiwgY29uc3QgY2hhciogaywgc2l6ZV90IGtsZW4sIGNvbnN0IGNo
YXIqIHYsIHNpemVfdCB2bGVuKTsKKyAgICB2b2lkICgqZGVsZXRlZF8pKHZvaWQqLCBjb25zdCBj
aGFyKiBrLCBzaXplX3Qga2xlbik7CisgICAgdmlydHVhbCB2b2lkIFB1dChjb25zdCBTbGljZSYg
a2V5LCBjb25zdCBTbGljZSYgdmFsdWUpIHsKKyAgICAgICgqcHV0Xykoc3RhdGVfLCBrZXkuZGF0
YSgpLCBrZXkuc2l6ZSgpLCB2YWx1ZS5kYXRhKCksIHZhbHVlLnNpemUoKSk7CisgICAgfQorICAg
IHZpcnR1YWwgdm9pZCBEZWxldGUoY29uc3QgU2xpY2UmIGtleSkgeworICAgICAgKCpkZWxldGVk
Xykoc3RhdGVfLCBrZXkuZGF0YSgpLCBrZXkuc2l6ZSgpKTsKKyAgICB9CisgIH07CisgIEggaGFu
ZGxlcjsKKyAgaGFuZGxlci5zdGF0ZV8gPSBzdGF0ZTsKKyAgaGFuZGxlci5wdXRfID0gcHV0Owor
ICBoYW5kbGVyLmRlbGV0ZWRfID0gZGVsZXRlZDsKKyAgYi0+cmVwLkl0ZXJhdGUoJmhhbmRsZXIp
OworfQorCitsZXZlbGRiX29wdGlvbnNfdCogbGV2ZWxkYl9vcHRpb25zX2NyZWF0ZSgpIHsKKyAg
cmV0dXJuIG5ldyBsZXZlbGRiX29wdGlvbnNfdDsKK30KKwordm9pZCBsZXZlbGRiX29wdGlvbnNf
ZGVzdHJveShsZXZlbGRiX29wdGlvbnNfdCogb3B0aW9ucykgeworICBkZWxldGUgb3B0aW9uczsK
K30KKwordm9pZCBsZXZlbGRiX29wdGlvbnNfc2V0X2NvbXBhcmF0b3IoCisgICAgbGV2ZWxkYl9v
cHRpb25zX3QqIG9wdCwKKyAgICBsZXZlbGRiX2NvbXBhcmF0b3JfdCogY21wKSB7CisgIG9wdC0+
cmVwLmNvbXBhcmF0b3IgPSBjbXA7Cit9CisKK3ZvaWQgbGV2ZWxkYl9vcHRpb25zX3NldF9maWx0
ZXJfcG9saWN5KAorICAgIGxldmVsZGJfb3B0aW9uc190KiBvcHQsCisgICAgbGV2ZWxkYl9maWx0
ZXJwb2xpY3lfdCogcG9saWN5KSB7CisgIG9wdC0+cmVwLmZpbHRlcl9wb2xpY3kgPSBwb2xpY3k7
Cit9CisKK3ZvaWQgbGV2ZWxkYl9vcHRpb25zX3NldF9jcmVhdGVfaWZfbWlzc2luZygKKyAgICBs
ZXZlbGRiX29wdGlvbnNfdCogb3B0LCB1bnNpZ25lZCBjaGFyIHYpIHsKKyAgb3B0LT5yZXAuY3Jl
YXRlX2lmX21pc3NpbmcgPSB2OworfQorCit2b2lkIGxldmVsZGJfb3B0aW9uc19zZXRfZXJyb3Jf
aWZfZXhpc3RzKAorICAgIGxldmVsZGJfb3B0aW9uc190KiBvcHQsIHVuc2lnbmVkIGNoYXIgdikg
eworICBvcHQtPnJlcC5lcnJvcl9pZl9leGlzdHMgPSB2OworfQorCit2b2lkIGxldmVsZGJfb3B0
aW9uc19zZXRfcGFyYW5vaWRfY2hlY2tzKAorICAgIGxldmVsZGJfb3B0aW9uc190KiBvcHQsIHVu
c2lnbmVkIGNoYXIgdikgeworICBvcHQtPnJlcC5wYXJhbm9pZF9jaGVja3MgPSB2OworfQorCit2
b2lkIGxldmVsZGJfb3B0aW9uc19zZXRfZW52KGxldmVsZGJfb3B0aW9uc190KiBvcHQsIGxldmVs
ZGJfZW52X3QqIGVudikgeworICBvcHQtPnJlcC5lbnYgPSAoZW52ID8gZW52LT5yZXAgOiBOVUxM
KTsKK30KKwordm9pZCBsZXZlbGRiX29wdGlvbnNfc2V0X2luZm9fbG9nKGxldmVsZGJfb3B0aW9u
c190KiBvcHQsIGxldmVsZGJfbG9nZ2VyX3QqIGwpIHsKKyAgb3B0LT5yZXAuaW5mb19sb2cgPSAo
bCA/IGwtPnJlcCA6IE5VTEwpOworfQorCit2b2lkIGxldmVsZGJfb3B0aW9uc19zZXRfd3JpdGVf
YnVmZmVyX3NpemUobGV2ZWxkYl9vcHRpb25zX3QqIG9wdCwgc2l6ZV90IHMpIHsKKyAgb3B0LT5y
ZXAud3JpdGVfYnVmZmVyX3NpemUgPSBzOworfQorCit2b2lkIGxldmVsZGJfb3B0aW9uc19zZXRf
bWF4X29wZW5fZmlsZXMobGV2ZWxkYl9vcHRpb25zX3QqIG9wdCwgaW50IG4pIHsKKyAgb3B0LT5y
ZXAubWF4X29wZW5fZmlsZXMgPSBuOworfQorCit2b2lkIGxldmVsZGJfb3B0aW9uc19zZXRfY2Fj
aGUobGV2ZWxkYl9vcHRpb25zX3QqIG9wdCwgbGV2ZWxkYl9jYWNoZV90KiBjKSB7CisgIG9wdC0+
cmVwLmJsb2NrX2NhY2hlID0gYy0+cmVwOworfQorCit2b2lkIGxldmVsZGJfb3B0aW9uc19zZXRf
YmxvY2tfc2l6ZShsZXZlbGRiX29wdGlvbnNfdCogb3B0LCBzaXplX3QgcykgeworICBvcHQtPnJl
cC5ibG9ja19zaXplID0gczsKK30KKwordm9pZCBsZXZlbGRiX29wdGlvbnNfc2V0X2Jsb2NrX3Jl
c3RhcnRfaW50ZXJ2YWwobGV2ZWxkYl9vcHRpb25zX3QqIG9wdCwgaW50IG4pIHsKKyAgb3B0LT5y
ZXAuYmxvY2tfcmVzdGFydF9pbnRlcnZhbCA9IG47Cit9CisKK3ZvaWQgbGV2ZWxkYl9vcHRpb25z
X3NldF9jb21wcmVzc2lvbihsZXZlbGRiX29wdGlvbnNfdCogb3B0LCBpbnQgdCkgeworICBvcHQt
PnJlcC5jb21wcmVzc2lvbiA9IHN0YXRpY19jYXN0PENvbXByZXNzaW9uVHlwZT4odCk7Cit9CisK
K2xldmVsZGJfY29tcGFyYXRvcl90KiBsZXZlbGRiX2NvbXBhcmF0b3JfY3JlYXRlKAorICAgIHZv
aWQqIHN0YXRlLAorICAgIHZvaWQgKCpkZXN0cnVjdG9yKSh2b2lkKiksCisgICAgaW50ICgqY29t
cGFyZSkoCisgICAgICAgIHZvaWQqLAorICAgICAgICBjb25zdCBjaGFyKiBhLCBzaXplX3QgYWxl
biwKKyAgICAgICAgY29uc3QgY2hhciogYiwgc2l6ZV90IGJsZW4pLAorICAgIGNvbnN0IGNoYXIq
ICgqbmFtZSkodm9pZCopKSB7CisgIGxldmVsZGJfY29tcGFyYXRvcl90KiByZXN1bHQgPSBuZXcg
bGV2ZWxkYl9jb21wYXJhdG9yX3Q7CisgIHJlc3VsdC0+c3RhdGVfID0gc3RhdGU7CisgIHJlc3Vs
dC0+ZGVzdHJ1Y3Rvcl8gPSBkZXN0cnVjdG9yOworICByZXN1bHQtPmNvbXBhcmVfID0gY29tcGFy
ZTsKKyAgcmVzdWx0LT5uYW1lXyA9IG5hbWU7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQg
bGV2ZWxkYl9jb21wYXJhdG9yX2Rlc3Ryb3kobGV2ZWxkYl9jb21wYXJhdG9yX3QqIGNtcCkgewor
ICBkZWxldGUgY21wOworfQorCitsZXZlbGRiX2ZpbHRlcnBvbGljeV90KiBsZXZlbGRiX2ZpbHRl
cnBvbGljeV9jcmVhdGUoCisgICAgdm9pZCogc3RhdGUsCisgICAgdm9pZCAoKmRlc3RydWN0b3Ip
KHZvaWQqKSwKKyAgICBjaGFyKiAoKmNyZWF0ZV9maWx0ZXIpKAorICAgICAgICB2b2lkKiwKKyAg
ICAgICAgY29uc3QgY2hhciogY29uc3QqIGtleV9hcnJheSwgY29uc3Qgc2l6ZV90KiBrZXlfbGVu
Z3RoX2FycmF5LAorICAgICAgICBpbnQgbnVtX2tleXMsCisgICAgICAgIHNpemVfdCogZmlsdGVy
X2xlbmd0aCksCisgICAgdW5zaWduZWQgY2hhciAoKmtleV9tYXlfbWF0Y2gpKAorICAgICAgICB2
b2lkKiwKKyAgICAgICAgY29uc3QgY2hhcioga2V5LCBzaXplX3QgbGVuZ3RoLAorICAgICAgICBj
b25zdCBjaGFyKiBmaWx0ZXIsIHNpemVfdCBmaWx0ZXJfbGVuZ3RoKSwKKyAgICBjb25zdCBjaGFy
KiAoKm5hbWUpKHZvaWQqKSkgeworICBsZXZlbGRiX2ZpbHRlcnBvbGljeV90KiByZXN1bHQgPSBu
ZXcgbGV2ZWxkYl9maWx0ZXJwb2xpY3lfdDsKKyAgcmVzdWx0LT5zdGF0ZV8gPSBzdGF0ZTsKKyAg
cmVzdWx0LT5kZXN0cnVjdG9yXyA9IGRlc3RydWN0b3I7CisgIHJlc3VsdC0+Y3JlYXRlXyA9IGNy
ZWF0ZV9maWx0ZXI7CisgIHJlc3VsdC0+a2V5X21hdGNoXyA9IGtleV9tYXlfbWF0Y2g7CisgIHJl
c3VsdC0+bmFtZV8gPSBuYW1lOworICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIGxldmVsZGJf
ZmlsdGVycG9saWN5X2Rlc3Ryb3kobGV2ZWxkYl9maWx0ZXJwb2xpY3lfdCogZmlsdGVyKSB7Cisg
IGRlbGV0ZSBmaWx0ZXI7Cit9CisKK2xldmVsZGJfZmlsdGVycG9saWN5X3QqIGxldmVsZGJfZmls
dGVycG9saWN5X2NyZWF0ZV9ibG9vbShpbnQgYml0c19wZXJfa2V5KSB7CisgIC8vIE1ha2UgYSBs
ZXZlbGRiX2ZpbHRlcnBvbGljeV90LCBidXQgb3ZlcnJpZGUgYWxsIG9mIGl0cyBtZXRob2RzIHNv
CisgIC8vIHRoZXkgZGVsZWdhdGUgdG8gYSBOZXdCbG9vbUZpbHRlclBvbGljeSgpIGluc3RlYWQg
b2YgdXNlcgorICAvLyBzdXBwbGllZCBDIGZ1bmN0aW9ucy4KKyAgc3RydWN0IFdyYXBwZXIgOiBw
dWJsaWMgbGV2ZWxkYl9maWx0ZXJwb2xpY3lfdCB7CisgICAgY29uc3QgRmlsdGVyUG9saWN5KiBy
ZXBfOworICAgIH5XcmFwcGVyKCkgeyBkZWxldGUgcmVwXzsgfQorICAgIGNvbnN0IGNoYXIqIE5h
bWUoKSBjb25zdCB7IHJldHVybiByZXBfLT5OYW1lKCk7IH0KKyAgICB2b2lkIENyZWF0ZUZpbHRl
cihjb25zdCBTbGljZSoga2V5cywgaW50IG4sIHN0ZDo6c3RyaW5nKiBkc3QpIGNvbnN0IHsKKyAg
ICAgIHJldHVybiByZXBfLT5DcmVhdGVGaWx0ZXIoa2V5cywgbiwgZHN0KTsKKyAgICB9CisgICAg
Ym9vbCBLZXlNYXlNYXRjaChjb25zdCBTbGljZSYga2V5LCBjb25zdCBTbGljZSYgZmlsdGVyKSBj
b25zdCB7CisgICAgICByZXR1cm4gcmVwXy0+S2V5TWF5TWF0Y2goa2V5LCBmaWx0ZXIpOworICAg
IH0KKyAgICBzdGF0aWMgdm9pZCBEb05vdGhpbmcodm9pZCopIHsgfQorICB9OworICBXcmFwcGVy
KiB3cmFwcGVyID0gbmV3IFdyYXBwZXI7CisgIHdyYXBwZXItPnJlcF8gPSBOZXdCbG9vbUZpbHRl
clBvbGljeShiaXRzX3Blcl9rZXkpOworICB3cmFwcGVyLT5zdGF0ZV8gPSBOVUxMOworICB3cmFw
cGVyLT5kZXN0cnVjdG9yXyA9ICZXcmFwcGVyOjpEb05vdGhpbmc7CisgIHJldHVybiB3cmFwcGVy
OworfQorCitsZXZlbGRiX3JlYWRvcHRpb25zX3QqIGxldmVsZGJfcmVhZG9wdGlvbnNfY3JlYXRl
KCkgeworICByZXR1cm4gbmV3IGxldmVsZGJfcmVhZG9wdGlvbnNfdDsKK30KKwordm9pZCBsZXZl
bGRiX3JlYWRvcHRpb25zX2Rlc3Ryb3kobGV2ZWxkYl9yZWFkb3B0aW9uc190KiBvcHQpIHsKKyAg
ZGVsZXRlIG9wdDsKK30KKwordm9pZCBsZXZlbGRiX3JlYWRvcHRpb25zX3NldF92ZXJpZnlfY2hl
Y2tzdW1zKAorICAgIGxldmVsZGJfcmVhZG9wdGlvbnNfdCogb3B0LAorICAgIHVuc2lnbmVkIGNo
YXIgdikgeworICBvcHQtPnJlcC52ZXJpZnlfY2hlY2tzdW1zID0gdjsKK30KKwordm9pZCBsZXZl
bGRiX3JlYWRvcHRpb25zX3NldF9maWxsX2NhY2hlKAorICAgIGxldmVsZGJfcmVhZG9wdGlvbnNf
dCogb3B0LCB1bnNpZ25lZCBjaGFyIHYpIHsKKyAgb3B0LT5yZXAuZmlsbF9jYWNoZSA9IHY7Cit9
CisKK3ZvaWQgbGV2ZWxkYl9yZWFkb3B0aW9uc19zZXRfc25hcHNob3QoCisgICAgbGV2ZWxkYl9y
ZWFkb3B0aW9uc190KiBvcHQsCisgICAgY29uc3QgbGV2ZWxkYl9zbmFwc2hvdF90KiBzbmFwKSB7
CisgIG9wdC0+cmVwLnNuYXBzaG90ID0gKHNuYXAgPyBzbmFwLT5yZXAgOiBOVUxMKTsKK30KKwor
bGV2ZWxkYl93cml0ZW9wdGlvbnNfdCogbGV2ZWxkYl93cml0ZW9wdGlvbnNfY3JlYXRlKCkgewor
ICByZXR1cm4gbmV3IGxldmVsZGJfd3JpdGVvcHRpb25zX3Q7Cit9CisKK3ZvaWQgbGV2ZWxkYl93
cml0ZW9wdGlvbnNfZGVzdHJveShsZXZlbGRiX3dyaXRlb3B0aW9uc190KiBvcHQpIHsKKyAgZGVs
ZXRlIG9wdDsKK30KKwordm9pZCBsZXZlbGRiX3dyaXRlb3B0aW9uc19zZXRfc3luYygKKyAgICBs
ZXZlbGRiX3dyaXRlb3B0aW9uc190KiBvcHQsIHVuc2lnbmVkIGNoYXIgdikgeworICBvcHQtPnJl
cC5zeW5jID0gdjsKK30KKworbGV2ZWxkYl9jYWNoZV90KiBsZXZlbGRiX2NhY2hlX2NyZWF0ZV9s
cnUoc2l6ZV90IGNhcGFjaXR5KSB7CisgIGxldmVsZGJfY2FjaGVfdCogYyA9IG5ldyBsZXZlbGRi
X2NhY2hlX3Q7CisgIGMtPnJlcCA9IE5ld0xSVUNhY2hlKGNhcGFjaXR5KTsKKyAgcmV0dXJuIGM7
Cit9CisKK3ZvaWQgbGV2ZWxkYl9jYWNoZV9kZXN0cm95KGxldmVsZGJfY2FjaGVfdCogY2FjaGUp
IHsKKyAgZGVsZXRlIGNhY2hlLT5yZXA7CisgIGRlbGV0ZSBjYWNoZTsKK30KKworbGV2ZWxkYl9l
bnZfdCogbGV2ZWxkYl9jcmVhdGVfZGVmYXVsdF9lbnYoKSB7CisgIGxldmVsZGJfZW52X3QqIHJl
c3VsdCA9IG5ldyBsZXZlbGRiX2Vudl90OworICByZXN1bHQtPnJlcCA9IEVudjo6RGVmYXVsdCgp
OworICByZXN1bHQtPmlzX2RlZmF1bHQgPSB0cnVlOworICByZXR1cm4gcmVzdWx0OworfQorCit2
b2lkIGxldmVsZGJfZW52X2Rlc3Ryb3kobGV2ZWxkYl9lbnZfdCogZW52KSB7CisgIGlmICghZW52
LT5pc19kZWZhdWx0KSBkZWxldGUgZW52LT5yZXA7CisgIGRlbGV0ZSBlbnY7Cit9CisKK3ZvaWQg
bGV2ZWxkYl9mcmVlKHZvaWQqIHB0cikgeworICBmcmVlKHB0cik7Cit9CisKK2ludCBsZXZlbGRi
X21ham9yX3ZlcnNpb24oKSB7CisgIHJldHVybiBrTWFqb3JWZXJzaW9uOworfQorCitpbnQgbGV2
ZWxkYl9taW5vcl92ZXJzaW9uKCkgeworICByZXR1cm4ga01pbm9yVmVyc2lvbjsKK30KKworfSAg
Ly8gZW5kIGV4dGVybiAiQyIKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIv
ZGIvY190ZXN0LmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2NfdGVzdC5jCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjdjZDVlZTAyMDc2YWI5NjMwM2EyYjFmMjVkYmFiYmU3MjFjYWFiYTcKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2NfdGVzdC5jCkBAIC0wLDAg
KzEsMzkwIEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAgIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyAgIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMu
ICovCisKKyNpbmNsdWRlICJsZXZlbGRiL2MuaCIKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2lu
Y2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+
CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK2NvbnN0IGNo
YXIqIHBoYXNlID0gIiI7CitzdGF0aWMgY2hhciBkYm5hbWVbMjAwXTsKKworc3RhdGljIHZvaWQg
U3RhcnRQaGFzZShjb25zdCBjaGFyKiBuYW1lKSB7CisgIGZwcmludGYoc3RkZXJyLCAiPT09IFRl
c3QgJXNcbiIsIG5hbWUpOworICBwaGFzZSA9IG5hbWU7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFy
KiBHZXRUZW1wRGlyKHZvaWQpIHsKKyAgICBjb25zdCBjaGFyKiByZXQgPSBnZXRlbnYoIlRFU1Rf
VE1QRElSIik7CisgICAgaWYgKHJldCA9PSBOVUxMIHx8IHJldFswXSA9PSAnXDAnKQorICAgICAg
ICByZXQgPSAiL3RtcCI7CisgICAgcmV0dXJuIHJldDsKK30KKworI2RlZmluZSBDaGVja05vRXJy
b3IoZXJyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICBpZiAoKGVycikgIT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIGZwcmludGYoc3RkZXJyLCAiJXM6JWQ6ICVzOiAlc1xuIiwg
X19GSUxFX18sIF9fTElORV9fLCBwaGFzZSwgKGVycikpOyBcCisgICAgYWJvcnQoKTsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
IH0KKworI2RlZmluZSBDaGVja0NvbmRpdGlvbihjb25kKSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICBpZiAoIShjb25kKSkgeyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGZwcmludGYoc3Rk
ZXJyLCAiJXM6JWQ6ICVzOiAlc1xuIiwgX19GSUxFX18sIF9fTElORV9fLCBwaGFzZSwgI2NvbmQp
OyBcCisgICAgYWJvcnQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgIH0KKworc3RhdGljIHZvaWQgQ2hlY2tFcXVhbChjb25z
dCBjaGFyKiBleHBlY3RlZCwgY29uc3QgY2hhciogdiwgc2l6ZV90IG4pIHsKKyAgaWYgKGV4cGVj
dGVkID09IE5VTEwgJiYgdiA9PSBOVUxMKSB7CisgICAgLy8gb2sKKyAgfSBlbHNlIGlmIChleHBl
Y3RlZCAhPSBOVUxMICYmIHYgIT0gTlVMTCAmJiBuID09IHN0cmxlbihleHBlY3RlZCkgJiYKKyAg
ICAgICAgICAgICBtZW1jbXAoZXhwZWN0ZWQsIHYsIG4pID09IDApIHsKKyAgICAvLyBvaworICAg
IHJldHVybjsKKyAgfSBlbHNlIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBleHBlY3RlZCAn
JXMnLCBnb3QgJyVzJ1xuIiwKKyAgICAgICAgICAgIHBoYXNlLAorICAgICAgICAgICAgKGV4cGVj
dGVkID8gZXhwZWN0ZWQgOiAiKG51bGwpIiksCisgICAgICAgICAgICAodiA/IHYgOiAiKG51bGwi
KSk7CisgICAgYWJvcnQoKTsKKyAgfQorfQorCitzdGF0aWMgdm9pZCBGcmVlKGNoYXIqKiBwdHIp
IHsKKyAgaWYgKCpwdHIpIHsKKyAgICBmcmVlKCpwdHIpOworICAgICpwdHIgPSBOVUxMOworICB9
Cit9CisKK3N0YXRpYyB2b2lkIENoZWNrR2V0KAorICAgIGxldmVsZGJfdCogZGIsCisgICAgY29u
c3QgbGV2ZWxkYl9yZWFkb3B0aW9uc190KiBvcHRpb25zLAorICAgIGNvbnN0IGNoYXIqIGtleSwK
KyAgICBjb25zdCBjaGFyKiBleHBlY3RlZCkgeworICBjaGFyKiBlcnIgPSBOVUxMOworICBzaXpl
X3QgdmFsX2xlbjsKKyAgY2hhciogdmFsOworICB2YWwgPSBsZXZlbGRiX2dldChkYiwgb3B0aW9u
cywga2V5LCBzdHJsZW4oa2V5KSwgJnZhbF9sZW4sICZlcnIpOworICBDaGVja05vRXJyb3IoZXJy
KTsKKyAgQ2hlY2tFcXVhbChleHBlY3RlZCwgdmFsLCB2YWxfbGVuKTsKKyAgRnJlZSgmdmFsKTsK
K30KKworc3RhdGljIHZvaWQgQ2hlY2tJdGVyKGxldmVsZGJfaXRlcmF0b3JfdCogaXRlciwKKyAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBrZXksIGNvbnN0IGNoYXIqIHZhbCkgewor
ICBzaXplX3QgbGVuOworICBjb25zdCBjaGFyKiBzdHI7CisgIHN0ciA9IGxldmVsZGJfaXRlcl9r
ZXkoaXRlciwgJmxlbik7CisgIENoZWNrRXF1YWwoa2V5LCBzdHIsIGxlbik7CisgIHN0ciA9IGxl
dmVsZGJfaXRlcl92YWx1ZShpdGVyLCAmbGVuKTsKKyAgQ2hlY2tFcXVhbCh2YWwsIHN0ciwgbGVu
KTsKK30KKworLy8gQ2FsbGJhY2sgZnJvbSBsZXZlbGRiX3dyaXRlYmF0Y2hfaXRlcmF0ZSgpCitz
dGF0aWMgdm9pZCBDaGVja1B1dCh2b2lkKiBwdHIsCisgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyKiBrLCBzaXplX3Qga2xlbiwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIq
IHYsIHNpemVfdCB2bGVuKSB7CisgIGludCogc3RhdGUgPSAoaW50KikgcHRyOworICBDaGVja0Nv
bmRpdGlvbigqc3RhdGUgPCAyKTsKKyAgc3dpdGNoICgqc3RhdGUpIHsKKyAgICBjYXNlIDA6Cisg
ICAgICBDaGVja0VxdWFsKCJiYXIiLCBrLCBrbGVuKTsKKyAgICAgIENoZWNrRXF1YWwoImIiLCB2
LCB2bGVuKTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMToKKyAgICAgIENoZWNrRXF1YWwoImJv
eCIsIGssIGtsZW4pOworICAgICAgQ2hlY2tFcXVhbCgiYyIsIHYsIHZsZW4pOworICAgICAgYnJl
YWs7CisgIH0KKyAgKCpzdGF0ZSkrKzsKK30KKworLy8gQ2FsbGJhY2sgZnJvbSBsZXZlbGRiX3dy
aXRlYmF0Y2hfaXRlcmF0ZSgpCitzdGF0aWMgdm9pZCBDaGVja0RlbCh2b2lkKiBwdHIsIGNvbnN0
IGNoYXIqIGssIHNpemVfdCBrbGVuKSB7CisgIGludCogc3RhdGUgPSAoaW50KikgcHRyOworICBD
aGVja0NvbmRpdGlvbigqc3RhdGUgPT0gMik7CisgIENoZWNrRXF1YWwoImJhciIsIGssIGtsZW4p
OworICAoKnN0YXRlKSsrOworfQorCitzdGF0aWMgdm9pZCBDbXBEZXN0cm95KHZvaWQqIGFyZykg
eyB9CisKK3N0YXRpYyBpbnQgQ21wQ29tcGFyZSh2b2lkKiBhcmcsIGNvbnN0IGNoYXIqIGEsIHNp
emVfdCBhbGVuLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGIsIHNpemVfdCBi
bGVuKSB7CisgIGludCBuID0gKGFsZW4gPCBibGVuKSA/IGFsZW4gOiBibGVuOworICBpbnQgciA9
IG1lbWNtcChhLCBiLCBuKTsKKyAgaWYgKHIgPT0gMCkgeworICAgIGlmIChhbGVuIDwgYmxlbikg
ciA9IC0xOworICAgIGVsc2UgaWYgKGFsZW4gPiBibGVuKSByID0gKzE7CisgIH0KKyAgcmV0dXJu
IHI7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyKiBDbXBOYW1lKHZvaWQqIGFyZykgeworICByZXR1
cm4gImZvbyI7Cit9CisKKy8vIEN1c3RvbSBmaWx0ZXIgcG9saWN5CitzdGF0aWMgdW5zaWduZWQg
Y2hhciBmYWtlX2ZpbHRlcl9yZXN1bHQgPSAxOworc3RhdGljIHZvaWQgRmlsdGVyRGVzdHJveSh2
b2lkKiBhcmcpIHsgfQorc3RhdGljIGNvbnN0IGNoYXIqIEZpbHRlck5hbWUodm9pZCogYXJnKSB7
CisgIHJldHVybiAiVGVzdEZpbHRlciI7Cit9CitzdGF0aWMgY2hhciogRmlsdGVyQ3JlYXRlKAor
ICAgIHZvaWQqIGFyZywKKyAgICBjb25zdCBjaGFyKiBjb25zdCoga2V5X2FycmF5LCBjb25zdCBz
aXplX3QqIGtleV9sZW5ndGhfYXJyYXksCisgICAgaW50IG51bV9rZXlzLAorICAgIHNpemVfdCog
ZmlsdGVyX2xlbmd0aCkgeworICAqZmlsdGVyX2xlbmd0aCA9IDQ7CisgIGNoYXIqIHJlc3VsdCA9
IG1hbGxvYyg0KTsKKyAgbWVtY3B5KHJlc3VsdCwgImZha2UiLCA0KTsKKyAgcmV0dXJuIHJlc3Vs
dDsKK30KK3Vuc2lnbmVkIGNoYXIgRmlsdGVyS2V5TWF0Y2goCisgICAgdm9pZCogYXJnLAorICAg
IGNvbnN0IGNoYXIqIGtleSwgc2l6ZV90IGxlbmd0aCwKKyAgICBjb25zdCBjaGFyKiBmaWx0ZXIs
IHNpemVfdCBmaWx0ZXJfbGVuZ3RoKSB7CisgIENoZWNrQ29uZGl0aW9uKGZpbHRlcl9sZW5ndGgg
PT0gNCk7CisgIENoZWNrQ29uZGl0aW9uKG1lbWNtcChmaWx0ZXIsICJmYWtlIiwgNCkgPT0gMCk7
CisgIHJldHVybiBmYWtlX2ZpbHRlcl9yZXN1bHQ7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBj
aGFyKiogYXJndikgeworICBsZXZlbGRiX3QqIGRiOworICBsZXZlbGRiX2NvbXBhcmF0b3JfdCog
Y21wOworICBsZXZlbGRiX2NhY2hlX3QqIGNhY2hlOworICBsZXZlbGRiX2Vudl90KiBlbnY7Cisg
IGxldmVsZGJfb3B0aW9uc190KiBvcHRpb25zOworICBsZXZlbGRiX3JlYWRvcHRpb25zX3QqIHJv
cHRpb25zOworICBsZXZlbGRiX3dyaXRlb3B0aW9uc190KiB3b3B0aW9uczsKKyAgY2hhciogZXJy
ID0gTlVMTDsKKyAgaW50IHJ1biA9IC0xOworCisgIENoZWNrQ29uZGl0aW9uKGxldmVsZGJfbWFq
b3JfdmVyc2lvbigpID49IDEpOworICBDaGVja0NvbmRpdGlvbihsZXZlbGRiX21pbm9yX3ZlcnNp
b24oKSA+PSAxKTsKKworICBzbnByaW50ZihkYm5hbWUsIHNpemVvZihkYm5hbWUpLAorICAgICAg
ICAgICAiJXMvbGV2ZWxkYl9jX3Rlc3QtJWQiLAorICAgICAgICAgICBHZXRUZW1wRGlyKCksCisg
ICAgICAgICAgICgoaW50KSBnZXRldWlkKCkpKTsKKworICBTdGFydFBoYXNlKCJjcmVhdGVfb2Jq
ZWN0cyIpOworICBjbXAgPSBsZXZlbGRiX2NvbXBhcmF0b3JfY3JlYXRlKE5VTEwsIENtcERlc3Ry
b3ksIENtcENvbXBhcmUsIENtcE5hbWUpOworICBlbnYgPSBsZXZlbGRiX2NyZWF0ZV9kZWZhdWx0
X2VudigpOworICBjYWNoZSA9IGxldmVsZGJfY2FjaGVfY3JlYXRlX2xydSgxMDAwMDApOworCisg
IG9wdGlvbnMgPSBsZXZlbGRiX29wdGlvbnNfY3JlYXRlKCk7CisgIGxldmVsZGJfb3B0aW9uc19z
ZXRfY29tcGFyYXRvcihvcHRpb25zLCBjbXApOworICBsZXZlbGRiX29wdGlvbnNfc2V0X2Vycm9y
X2lmX2V4aXN0cyhvcHRpb25zLCAxKTsKKyAgbGV2ZWxkYl9vcHRpb25zX3NldF9jYWNoZShvcHRp
b25zLCBjYWNoZSk7CisgIGxldmVsZGJfb3B0aW9uc19zZXRfZW52KG9wdGlvbnMsIGVudik7Cisg
IGxldmVsZGJfb3B0aW9uc19zZXRfaW5mb19sb2cob3B0aW9ucywgTlVMTCk7CisgIGxldmVsZGJf
b3B0aW9uc19zZXRfd3JpdGVfYnVmZmVyX3NpemUob3B0aW9ucywgMTAwMDAwKTsKKyAgbGV2ZWxk
Yl9vcHRpb25zX3NldF9wYXJhbm9pZF9jaGVja3Mob3B0aW9ucywgMSk7CisgIGxldmVsZGJfb3B0
aW9uc19zZXRfbWF4X29wZW5fZmlsZXMob3B0aW9ucywgMTApOworICBsZXZlbGRiX29wdGlvbnNf
c2V0X2Jsb2NrX3NpemUob3B0aW9ucywgMTAyNCk7CisgIGxldmVsZGJfb3B0aW9uc19zZXRfYmxv
Y2tfcmVzdGFydF9pbnRlcnZhbChvcHRpb25zLCA4KTsKKyAgbGV2ZWxkYl9vcHRpb25zX3NldF9j
b21wcmVzc2lvbihvcHRpb25zLCBsZXZlbGRiX25vX2NvbXByZXNzaW9uKTsKKworICByb3B0aW9u
cyA9IGxldmVsZGJfcmVhZG9wdGlvbnNfY3JlYXRlKCk7CisgIGxldmVsZGJfcmVhZG9wdGlvbnNf
c2V0X3ZlcmlmeV9jaGVja3N1bXMocm9wdGlvbnMsIDEpOworICBsZXZlbGRiX3JlYWRvcHRpb25z
X3NldF9maWxsX2NhY2hlKHJvcHRpb25zLCAwKTsKKworICB3b3B0aW9ucyA9IGxldmVsZGJfd3Jp
dGVvcHRpb25zX2NyZWF0ZSgpOworICBsZXZlbGRiX3dyaXRlb3B0aW9uc19zZXRfc3luYyh3b3B0
aW9ucywgMSk7CisKKyAgU3RhcnRQaGFzZSgiZGVzdHJveSIpOworICBsZXZlbGRiX2Rlc3Ryb3lf
ZGIob3B0aW9ucywgZGJuYW1lLCAmZXJyKTsKKyAgRnJlZSgmZXJyKTsKKworICBTdGFydFBoYXNl
KCJvcGVuX2Vycm9yIik7CisgIGRiID0gbGV2ZWxkYl9vcGVuKG9wdGlvbnMsIGRibmFtZSwgJmVy
cik7CisgIENoZWNrQ29uZGl0aW9uKGVyciAhPSBOVUxMKTsKKyAgRnJlZSgmZXJyKTsKKworICBT
dGFydFBoYXNlKCJsZXZlbGRiX2ZyZWUiKTsKKyAgZGIgPSBsZXZlbGRiX29wZW4ob3B0aW9ucywg
ZGJuYW1lLCAmZXJyKTsKKyAgQ2hlY2tDb25kaXRpb24oZXJyICE9IE5VTEwpOworICBsZXZlbGRi
X2ZyZWUoZXJyKTsKKyAgZXJyID0gTlVMTDsKKworICBTdGFydFBoYXNlKCJvcGVuIik7CisgIGxl
dmVsZGJfb3B0aW9uc19zZXRfY3JlYXRlX2lmX21pc3Npbmcob3B0aW9ucywgMSk7CisgIGRiID0g
bGV2ZWxkYl9vcGVuKG9wdGlvbnMsIGRibmFtZSwgJmVycik7CisgIENoZWNrTm9FcnJvcihlcnIp
OworICBDaGVja0dldChkYiwgcm9wdGlvbnMsICJmb28iLCBOVUxMKTsKKworICBTdGFydFBoYXNl
KCJwdXQiKTsKKyAgbGV2ZWxkYl9wdXQoZGIsIHdvcHRpb25zLCAiZm9vIiwgMywgImhlbGxvIiwg
NSwgJmVycik7CisgIENoZWNrTm9FcnJvcihlcnIpOworICBDaGVja0dldChkYiwgcm9wdGlvbnMs
ICJmb28iLCAiaGVsbG8iKTsKKworICBTdGFydFBoYXNlKCJjb21wYWN0YWxsIik7CisgIGxldmVs
ZGJfY29tcGFjdF9yYW5nZShkYiwgTlVMTCwgMCwgTlVMTCwgMCk7CisgIENoZWNrR2V0KGRiLCBy
b3B0aW9ucywgImZvbyIsICJoZWxsbyIpOworCisgIFN0YXJ0UGhhc2UoImNvbXBhY3RyYW5nZSIp
OworICBsZXZlbGRiX2NvbXBhY3RfcmFuZ2UoZGIsICJhIiwgMSwgInoiLCAxKTsKKyAgQ2hlY2tH
ZXQoZGIsIHJvcHRpb25zLCAiZm9vIiwgImhlbGxvIik7CisKKyAgU3RhcnRQaGFzZSgid3JpdGVi
YXRjaCIpOworICB7CisgICAgbGV2ZWxkYl93cml0ZWJhdGNoX3QqIHdiID0gbGV2ZWxkYl93cml0
ZWJhdGNoX2NyZWF0ZSgpOworICAgIGxldmVsZGJfd3JpdGViYXRjaF9wdXQod2IsICJmb28iLCAz
LCAiYSIsIDEpOworICAgIGxldmVsZGJfd3JpdGViYXRjaF9jbGVhcih3Yik7CisgICAgbGV2ZWxk
Yl93cml0ZWJhdGNoX3B1dCh3YiwgImJhciIsIDMsICJiIiwgMSk7CisgICAgbGV2ZWxkYl93cml0
ZWJhdGNoX3B1dCh3YiwgImJveCIsIDMsICJjIiwgMSk7CisgICAgbGV2ZWxkYl93cml0ZWJhdGNo
X2RlbGV0ZSh3YiwgImJhciIsIDMpOworICAgIGxldmVsZGJfd3JpdGUoZGIsIHdvcHRpb25zLCB3
YiwgJmVycik7CisgICAgQ2hlY2tOb0Vycm9yKGVycik7CisgICAgQ2hlY2tHZXQoZGIsIHJvcHRp
b25zLCAiZm9vIiwgImhlbGxvIik7CisgICAgQ2hlY2tHZXQoZGIsIHJvcHRpb25zLCAiYmFyIiwg
TlVMTCk7CisgICAgQ2hlY2tHZXQoZGIsIHJvcHRpb25zLCAiYm94IiwgImMiKTsKKyAgICBpbnQg
cG9zID0gMDsKKyAgICBsZXZlbGRiX3dyaXRlYmF0Y2hfaXRlcmF0ZSh3YiwgJnBvcywgQ2hlY2tQ
dXQsIENoZWNrRGVsKTsKKyAgICBDaGVja0NvbmRpdGlvbihwb3MgPT0gMyk7CisgICAgbGV2ZWxk
Yl93cml0ZWJhdGNoX2Rlc3Ryb3kod2IpOworICB9CisKKyAgU3RhcnRQaGFzZSgiaXRlciIpOwor
ICB7CisgICAgbGV2ZWxkYl9pdGVyYXRvcl90KiBpdGVyID0gbGV2ZWxkYl9jcmVhdGVfaXRlcmF0
b3IoZGIsIHJvcHRpb25zKTsKKyAgICBDaGVja0NvbmRpdGlvbighbGV2ZWxkYl9pdGVyX3ZhbGlk
KGl0ZXIpKTsKKyAgICBsZXZlbGRiX2l0ZXJfc2Vla190b19maXJzdChpdGVyKTsKKyAgICBDaGVj
a0NvbmRpdGlvbihsZXZlbGRiX2l0ZXJfdmFsaWQoaXRlcikpOworICAgIENoZWNrSXRlcihpdGVy
LCAiYm94IiwgImMiKTsKKyAgICBsZXZlbGRiX2l0ZXJfbmV4dChpdGVyKTsKKyAgICBDaGVja0l0
ZXIoaXRlciwgImZvbyIsICJoZWxsbyIpOworICAgIGxldmVsZGJfaXRlcl9wcmV2KGl0ZXIpOwor
ICAgIENoZWNrSXRlcihpdGVyLCAiYm94IiwgImMiKTsKKyAgICBsZXZlbGRiX2l0ZXJfcHJldihp
dGVyKTsKKyAgICBDaGVja0NvbmRpdGlvbighbGV2ZWxkYl9pdGVyX3ZhbGlkKGl0ZXIpKTsKKyAg
ICBsZXZlbGRiX2l0ZXJfc2Vla190b19sYXN0KGl0ZXIpOworICAgIENoZWNrSXRlcihpdGVyLCAi
Zm9vIiwgImhlbGxvIik7CisgICAgbGV2ZWxkYl9pdGVyX3NlZWsoaXRlciwgImIiLCAxKTsKKyAg
ICBDaGVja0l0ZXIoaXRlciwgImJveCIsICJjIik7CisgICAgbGV2ZWxkYl9pdGVyX2dldF9lcnJv
cihpdGVyLCAmZXJyKTsKKyAgICBDaGVja05vRXJyb3IoZXJyKTsKKyAgICBsZXZlbGRiX2l0ZXJf
ZGVzdHJveShpdGVyKTsKKyAgfQorCisgIFN0YXJ0UGhhc2UoImFwcHJveGltYXRlX3NpemVzIik7
CisgIHsKKyAgICBpbnQgaTsKKyAgICBpbnQgbiA9IDIwMDAwOworICAgIGNoYXIga2V5YnVmWzEw
MF07CisgICAgY2hhciB2YWxidWZbMTAwXTsKKyAgICB1aW50NjRfdCBzaXplc1syXTsKKyAgICBj
b25zdCBjaGFyKiBzdGFydFsyXSA9IHsgImEiLCAiazAwMDAwMDAwMDAwMDAwMDEwMDAwIiB9Owor
ICAgIHNpemVfdCBzdGFydF9sZW5bMl0gPSB7IDEsIDIxIH07CisgICAgY29uc3QgY2hhciogbGlt
aXRbMl0gPSB7ICJrMDAwMDAwMDAwMDAwMDAwMTAwMDAiLCAieiIgfTsKKyAgICBzaXplX3QgbGlt
aXRfbGVuWzJdID0geyAyMSwgMSB9OworICAgIGxldmVsZGJfd3JpdGVvcHRpb25zX3NldF9zeW5j
KHdvcHRpb25zLCAwKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgICBzbnBy
aW50ZihrZXlidWYsIHNpemVvZihrZXlidWYpLCAiayUwMjBkIiwgaSk7CisgICAgICBzbnByaW50
Zih2YWxidWYsIHNpemVvZih2YWxidWYpLCAidiUwMjBkIiwgaSk7CisgICAgICBsZXZlbGRiX3B1
dChkYiwgd29wdGlvbnMsIGtleWJ1Ziwgc3RybGVuKGtleWJ1ZiksIHZhbGJ1Ziwgc3RybGVuKHZh
bGJ1ZiksCisgICAgICAgICAgICAgICAgICAmZXJyKTsKKyAgICAgIENoZWNrTm9FcnJvcihlcnIp
OworICAgIH0KKyAgICBsZXZlbGRiX2FwcHJveGltYXRlX3NpemVzKGRiLCAyLCBzdGFydCwgc3Rh
cnRfbGVuLCBsaW1pdCwgbGltaXRfbGVuLCBzaXplcyk7CisgICAgQ2hlY2tDb25kaXRpb24oc2l6
ZXNbMF0gPiAwKTsKKyAgICBDaGVja0NvbmRpdGlvbihzaXplc1sxXSA+IDApOworICB9CisKKyAg
U3RhcnRQaGFzZSgicHJvcGVydHkiKTsKKyAgeworICAgIGNoYXIqIHByb3AgPSBsZXZlbGRiX3By
b3BlcnR5X3ZhbHVlKGRiLCAibm9zdWNocHJvcCIpOworICAgIENoZWNrQ29uZGl0aW9uKHByb3Ag
PT0gTlVMTCk7CisgICAgcHJvcCA9IGxldmVsZGJfcHJvcGVydHlfdmFsdWUoZGIsICJsZXZlbGRi
LnN0YXRzIik7CisgICAgQ2hlY2tDb25kaXRpb24ocHJvcCAhPSBOVUxMKTsKKyAgICBGcmVlKCZw
cm9wKTsKKyAgfQorCisgIFN0YXJ0UGhhc2UoInNuYXBzaG90Iik7CisgIHsKKyAgICBjb25zdCBs
ZXZlbGRiX3NuYXBzaG90X3QqIHNuYXA7CisgICAgc25hcCA9IGxldmVsZGJfY3JlYXRlX3NuYXBz
aG90KGRiKTsKKyAgICBsZXZlbGRiX2RlbGV0ZShkYiwgd29wdGlvbnMsICJmb28iLCAzLCAmZXJy
KTsKKyAgICBDaGVja05vRXJyb3IoZXJyKTsKKyAgICBsZXZlbGRiX3JlYWRvcHRpb25zX3NldF9z
bmFwc2hvdChyb3B0aW9ucywgc25hcCk7CisgICAgQ2hlY2tHZXQoZGIsIHJvcHRpb25zLCAiZm9v
IiwgImhlbGxvIik7CisgICAgbGV2ZWxkYl9yZWFkb3B0aW9uc19zZXRfc25hcHNob3Qocm9wdGlv
bnMsIE5VTEwpOworICAgIENoZWNrR2V0KGRiLCByb3B0aW9ucywgImZvbyIsIE5VTEwpOworICAg
IGxldmVsZGJfcmVsZWFzZV9zbmFwc2hvdChkYiwgc25hcCk7CisgIH0KKworICBTdGFydFBoYXNl
KCJyZXBhaXIiKTsKKyAgeworICAgIGxldmVsZGJfY2xvc2UoZGIpOworICAgIGxldmVsZGJfb3B0
aW9uc19zZXRfY3JlYXRlX2lmX21pc3Npbmcob3B0aW9ucywgMCk7CisgICAgbGV2ZWxkYl9vcHRp
b25zX3NldF9lcnJvcl9pZl9leGlzdHMob3B0aW9ucywgMCk7CisgICAgbGV2ZWxkYl9yZXBhaXJf
ZGIob3B0aW9ucywgZGJuYW1lLCAmZXJyKTsKKyAgICBDaGVja05vRXJyb3IoZXJyKTsKKyAgICBk
YiA9IGxldmVsZGJfb3BlbihvcHRpb25zLCBkYm5hbWUsICZlcnIpOworICAgIENoZWNrTm9FcnJv
cihlcnIpOworICAgIENoZWNrR2V0KGRiLCByb3B0aW9ucywgImZvbyIsIE5VTEwpOworICAgIENo
ZWNrR2V0KGRiLCByb3B0aW9ucywgImJhciIsIE5VTEwpOworICAgIENoZWNrR2V0KGRiLCByb3B0
aW9ucywgImJveCIsICJjIik7CisgICAgbGV2ZWxkYl9vcHRpb25zX3NldF9jcmVhdGVfaWZfbWlz
c2luZyhvcHRpb25zLCAxKTsKKyAgICBsZXZlbGRiX29wdGlvbnNfc2V0X2Vycm9yX2lmX2V4aXN0
cyhvcHRpb25zLCAxKTsKKyAgfQorCisgIFN0YXJ0UGhhc2UoImZpbHRlciIpOworICBmb3IgKHJ1
biA9IDA7IHJ1biA8IDI7IHJ1bisrKSB7CisgICAgLy8gRmlyc3QgcnVuIHVzZXMgY3VzdG9tIGZp
bHRlciwgc2Vjb25kIHJ1biB1c2VzIGJsb29tIGZpbHRlcgorICAgIENoZWNrTm9FcnJvcihlcnIp
OworICAgIGxldmVsZGJfZmlsdGVycG9saWN5X3QqIHBvbGljeTsKKyAgICBpZiAocnVuID09IDAp
IHsKKyAgICAgIHBvbGljeSA9IGxldmVsZGJfZmlsdGVycG9saWN5X2NyZWF0ZSgKKyAgICAgICAg
ICBOVUxMLCBGaWx0ZXJEZXN0cm95LCBGaWx0ZXJDcmVhdGUsIEZpbHRlcktleU1hdGNoLCBGaWx0
ZXJOYW1lKTsKKyAgICB9IGVsc2UgeworICAgICAgcG9saWN5ID0gbGV2ZWxkYl9maWx0ZXJwb2xp
Y3lfY3JlYXRlX2Jsb29tKDEwKTsKKyAgICB9CisKKyAgICAvLyBDcmVhdGUgbmV3IGRhdGFiYXNl
CisgICAgbGV2ZWxkYl9jbG9zZShkYik7CisgICAgbGV2ZWxkYl9kZXN0cm95X2RiKG9wdGlvbnMs
IGRibmFtZSwgJmVycik7CisgICAgbGV2ZWxkYl9vcHRpb25zX3NldF9maWx0ZXJfcG9saWN5KG9w
dGlvbnMsIHBvbGljeSk7CisgICAgZGIgPSBsZXZlbGRiX29wZW4ob3B0aW9ucywgZGJuYW1lLCAm
ZXJyKTsKKyAgICBDaGVja05vRXJyb3IoZXJyKTsKKyAgICBsZXZlbGRiX3B1dChkYiwgd29wdGlv
bnMsICJmb28iLCAzLCAiZm9vdmFsdWUiLCA4LCAmZXJyKTsKKyAgICBDaGVja05vRXJyb3IoZXJy
KTsKKyAgICBsZXZlbGRiX3B1dChkYiwgd29wdGlvbnMsICJiYXIiLCAzLCAiYmFydmFsdWUiLCA4
LCAmZXJyKTsKKyAgICBDaGVja05vRXJyb3IoZXJyKTsKKyAgICBsZXZlbGRiX2NvbXBhY3RfcmFu
Z2UoZGIsIE5VTEwsIDAsIE5VTEwsIDApOworCisgICAgZmFrZV9maWx0ZXJfcmVzdWx0ID0gMTsK
KyAgICBDaGVja0dldChkYiwgcm9wdGlvbnMsICJmb28iLCAiZm9vdmFsdWUiKTsKKyAgICBDaGVj
a0dldChkYiwgcm9wdGlvbnMsICJiYXIiLCAiYmFydmFsdWUiKTsKKyAgICBpZiAocGhhc2UgPT0g
MCkgeworICAgICAgLy8gTXVzdCBub3QgZmluZCB2YWx1ZSB3aGVuIGN1c3RvbSBmaWx0ZXIgcmV0
dXJucyBmYWxzZQorICAgICAgZmFrZV9maWx0ZXJfcmVzdWx0ID0gMDsKKyAgICAgIENoZWNrR2V0
KGRiLCByb3B0aW9ucywgImZvbyIsIE5VTEwpOworICAgICAgQ2hlY2tHZXQoZGIsIHJvcHRpb25z
LCAiYmFyIiwgTlVMTCk7CisgICAgICBmYWtlX2ZpbHRlcl9yZXN1bHQgPSAxOworCisgICAgICBD
aGVja0dldChkYiwgcm9wdGlvbnMsICJmb28iLCAiZm9vdmFsdWUiKTsKKyAgICAgIENoZWNrR2V0
KGRiLCByb3B0aW9ucywgImJhciIsICJiYXJ2YWx1ZSIpOworICAgIH0KKyAgICBsZXZlbGRiX29w
dGlvbnNfc2V0X2ZpbHRlcl9wb2xpY3kob3B0aW9ucywgTlVMTCk7CisgICAgbGV2ZWxkYl9maWx0
ZXJwb2xpY3lfZGVzdHJveShwb2xpY3kpOworICB9CisKKyAgU3RhcnRQaGFzZSgiY2xlYW51cCIp
OworICBsZXZlbGRiX2Nsb3NlKGRiKTsKKyAgbGV2ZWxkYl9vcHRpb25zX2Rlc3Ryb3kob3B0aW9u
cyk7CisgIGxldmVsZGJfcmVhZG9wdGlvbnNfZGVzdHJveShyb3B0aW9ucyk7CisgIGxldmVsZGJf
d3JpdGVvcHRpb25zX2Rlc3Ryb3kod29wdGlvbnMpOworICBsZXZlbGRiX2NhY2hlX2Rlc3Ryb3ko
Y2FjaGUpOworICBsZXZlbGRiX2NvbXBhcmF0b3JfZGVzdHJveShjbXApOworICBsZXZlbGRiX2Vu
dl9kZXN0cm95KGVudik7CisKKyAgZnByaW50ZihzdGRlcnIsICJQQVNTXG4iKTsKKyAgcmV0dXJu
IDA7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2NvcnJ1cHRp
b25fdGVzdC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvY29ycnVwdGlvbl90ZXN0
LmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjMxYjJkNWY0MTY2YmMyMDAxMjJjMTc3M2IxYTNlN2ZkY2ZmN2M2NDAK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2NvcnJ1cHRp
b25fdGVzdC5jYwpAQCAtMCwwICsxLDM1OSBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBM
ZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFt
ZXMgb2YgY29udHJpYnV0b3JzLgorCisjaW5jbHVkZSAibGV2ZWxkYi9kYi5oIgorCisjaW5jbHVk
ZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Cisj
aW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSAibGV2ZWxkYi9jYWNoZS5oIgorI2luY2x1
ZGUgImxldmVsZGIvZW52LmgiCisjaW5jbHVkZSAibGV2ZWxkYi90YWJsZS5oIgorI2luY2x1ZGUg
ImxldmVsZGIvd3JpdGVfYmF0Y2guaCIKKyNpbmNsdWRlICJkYi9kYl9pbXBsLmgiCisjaW5jbHVk
ZSAiZGIvZmlsZW5hbWUuaCIKKyNpbmNsdWRlICJkYi9sb2dfZm9ybWF0LmgiCisjaW5jbHVkZSAi
ZGIvdmVyc2lvbl9zZXQuaCIKKyNpbmNsdWRlICJ1dGlsL2xvZ2dpbmcuaCIKKyNpbmNsdWRlICJ1
dGlsL3Rlc3RoYXJuZXNzLmgiCisjaW5jbHVkZSAidXRpbC90ZXN0dXRpbC5oIgorCituYW1lc3Bh
Y2UgbGV2ZWxkYiB7CisKK3N0YXRpYyBjb25zdCBpbnQga1ZhbHVlU2l6ZSA9IDEwMDA7CisKK2Ns
YXNzIENvcnJ1cHRpb25UZXN0IHsKKyBwdWJsaWM6CisgIHRlc3Q6OkVycm9yRW52IGVudl87Cisg
IHN0ZDo6c3RyaW5nIGRibmFtZV87CisgIENhY2hlKiB0aW55X2NhY2hlXzsKKyAgT3B0aW9ucyBv
cHRpb25zXzsKKyAgREIqIGRiXzsKKworICBDb3JydXB0aW9uVGVzdCgpIHsKKyAgICB0aW55X2Nh
Y2hlXyA9IE5ld0xSVUNhY2hlKDEwMCk7CisgICAgb3B0aW9uc18uZW52ID0gJmVudl87CisgICAg
ZGJuYW1lXyA9IHRlc3Q6OlRtcERpcigpICsgIi9kYl90ZXN0IjsKKyAgICBEZXN0cm95REIoZGJu
YW1lXywgb3B0aW9uc18pOworCisgICAgZGJfID0gTlVMTDsKKyAgICBvcHRpb25zXy5jcmVhdGVf
aWZfbWlzc2luZyA9IHRydWU7CisgICAgUmVvcGVuKCk7CisgICAgb3B0aW9uc18uY3JlYXRlX2lm
X21pc3NpbmcgPSBmYWxzZTsKKyAgfQorCisgIH5Db3JydXB0aW9uVGVzdCgpIHsKKyAgICAgZGVs
ZXRlIGRiXzsKKyAgICAgRGVzdHJveURCKGRibmFtZV8sIE9wdGlvbnMoKSk7CisgICAgIGRlbGV0
ZSB0aW55X2NhY2hlXzsKKyAgfQorCisgIFN0YXR1cyBUcnlSZW9wZW4oT3B0aW9ucyogb3B0aW9u
cyA9IE5VTEwpIHsKKyAgICBkZWxldGUgZGJfOworICAgIGRiXyA9IE5VTEw7CisgICAgT3B0aW9u
cyBvcHQgPSAob3B0aW9ucyA/ICpvcHRpb25zIDogb3B0aW9uc18pOworICAgIG9wdC5lbnYgPSAm
ZW52XzsKKyAgICBvcHQuYmxvY2tfY2FjaGUgPSB0aW55X2NhY2hlXzsKKyAgICByZXR1cm4gREI6
Ok9wZW4ob3B0LCBkYm5hbWVfLCAmZGJfKTsKKyAgfQorCisgIHZvaWQgUmVvcGVuKE9wdGlvbnMq
IG9wdGlvbnMgPSBOVUxMKSB7CisgICAgQVNTRVJUX09LKFRyeVJlb3BlbihvcHRpb25zKSk7Cisg
IH0KKworICB2b2lkIFJlcGFpckRCKCkgeworICAgIGRlbGV0ZSBkYl87CisgICAgZGJfID0gTlVM
TDsKKyAgICBBU1NFUlRfT0soOjpsZXZlbGRiOjpSZXBhaXJEQihkYm5hbWVfLCBvcHRpb25zXykp
OworICB9CisKKyAgdm9pZCBCdWlsZChpbnQgbikgeworICAgIHN0ZDo6c3RyaW5nIGtleV9zcGFj
ZSwgdmFsdWVfc3BhY2U7CisgICAgV3JpdGVCYXRjaCBiYXRjaDsKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IG47IGkrKykgeworICAgICAgLy9pZiAoKGkgJSAxMDApID09IDApIGZwcmludGYoc3Rk
ZXJyLCAiQCAlZCBvZiAlZFxuIiwgaSwgbik7CisgICAgICBTbGljZSBrZXkgPSBLZXkoaSwgJmtl
eV9zcGFjZSk7CisgICAgICBiYXRjaC5DbGVhcigpOworICAgICAgYmF0Y2guUHV0KGtleSwgVmFs
dWUoaSwgJnZhbHVlX3NwYWNlKSk7CisgICAgICBBU1NFUlRfT0soZGJfLT5Xcml0ZShXcml0ZU9w
dGlvbnMoKSwgJmJhdGNoKSk7CisgICAgfQorICB9CisKKyAgdm9pZCBDaGVjayhpbnQgbWluX2V4
cGVjdGVkLCBpbnQgbWF4X2V4cGVjdGVkKSB7CisgICAgaW50IG5leHRfZXhwZWN0ZWQgPSAwOwor
ICAgIGludCBtaXNzZWQgPSAwOworICAgIGludCBiYWRfa2V5cyA9IDA7CisgICAgaW50IGJhZF92
YWx1ZXMgPSAwOworICAgIGludCBjb3JyZWN0ID0gMDsKKyAgICBzdGQ6OnN0cmluZyB2YWx1ZV9z
cGFjZTsKKyAgICBJdGVyYXRvciogaXRlciA9IGRiXy0+TmV3SXRlcmF0b3IoUmVhZE9wdGlvbnMo
KSk7CisgICAgZm9yIChpdGVyLT5TZWVrVG9GaXJzdCgpOyBpdGVyLT5WYWxpZCgpOyBpdGVyLT5O
ZXh0KCkpIHsKKyAgICAgIHVpbnQ2NF90IGtleTsKKyAgICAgIFNsaWNlIGluKGl0ZXItPmtleSgp
KTsKKyAgICAgIGlmICghQ29uc3VtZURlY2ltYWxOdW1iZXIoJmluLCAma2V5KSB8fAorICAgICAg
ICAgICFpbi5lbXB0eSgpIHx8CisgICAgICAgICAga2V5IDwgbmV4dF9leHBlY3RlZCkgeworICAg
ICAgICBiYWRfa2V5cysrOworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICAgIG1pc3Nl
ZCArPSAoa2V5IC0gbmV4dF9leHBlY3RlZCk7CisgICAgICBuZXh0X2V4cGVjdGVkID0ga2V5ICsg
MTsKKyAgICAgIGlmIChpdGVyLT52YWx1ZSgpICE9IFZhbHVlKGtleSwgJnZhbHVlX3NwYWNlKSkg
eworICAgICAgICBiYWRfdmFsdWVzKys7CisgICAgICB9IGVsc2UgeworICAgICAgICBjb3JyZWN0
Kys7CisgICAgICB9CisgICAgfQorICAgIGRlbGV0ZSBpdGVyOworCisgICAgZnByaW50ZihzdGRl
cnIsCisgICAgICAgICAgICAiZXhwZWN0ZWQ9JWQuLiVkOyBnb3Q9JWQ7IGJhZF9rZXlzPSVkOyBi
YWRfdmFsdWVzPSVkOyBtaXNzZWQ9JWRcbiIsCisgICAgICAgICAgICBtaW5fZXhwZWN0ZWQsIG1h
eF9leHBlY3RlZCwgY29ycmVjdCwgYmFkX2tleXMsIGJhZF92YWx1ZXMsIG1pc3NlZCk7CisgICAg
QVNTRVJUX0xFKG1pbl9leHBlY3RlZCwgY29ycmVjdCk7CisgICAgQVNTRVJUX0dFKG1heF9leHBl
Y3RlZCwgY29ycmVjdCk7CisgIH0KKworICB2b2lkIENvcnJ1cHQoRmlsZVR5cGUgZmlsZXR5cGUs
IGludCBvZmZzZXQsIGludCBieXRlc190b19jb3JydXB0KSB7CisgICAgLy8gUGljayBmaWxlIHRv
IGNvcnJ1cHQKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZmlsZW5hbWVzOworICAgIEFT
U0VSVF9PSyhlbnZfLkdldENoaWxkcmVuKGRibmFtZV8sICZmaWxlbmFtZXMpKTsKKyAgICB1aW50
NjRfdCBudW1iZXI7CisgICAgRmlsZVR5cGUgdHlwZTsKKyAgICBzdGQ6OnN0cmluZyBmbmFtZTsK
KyAgICBpbnQgcGlja2VkX251bWJlciA9IC0xOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmls
ZW5hbWVzLnNpemUoKTsgaSsrKSB7CisgICAgICBpZiAoUGFyc2VGaWxlTmFtZShmaWxlbmFtZXNb
aV0sICZudW1iZXIsICZ0eXBlKSAmJgorICAgICAgICAgIHR5cGUgPT0gZmlsZXR5cGUgJiYKKyAg
ICAgICAgICBpbnQobnVtYmVyKSA+IHBpY2tlZF9udW1iZXIpIHsgIC8vIFBpY2sgbGF0ZXN0IGZp
bGUKKyAgICAgICAgZm5hbWUgPSBkYm5hbWVfICsgIi8iICsgZmlsZW5hbWVzW2ldOworICAgICAg
ICBwaWNrZWRfbnVtYmVyID0gbnVtYmVyOworICAgICAgfQorICAgIH0KKyAgICBBU1NFUlRfVFJV
RSghZm5hbWUuZW1wdHkoKSkgPDwgZmlsZXR5cGU7CisKKyAgICBzdHJ1Y3Qgc3RhdCBzYnVmOwor
ICAgIGlmIChzdGF0KGZuYW1lLmNfc3RyKCksICZzYnVmKSAhPSAwKSB7CisgICAgICBjb25zdCBj
aGFyKiBtc2cgPSBzdHJlcnJvcihlcnJubyk7CisgICAgICBBU1NFUlRfVFJVRShmYWxzZSkgPDwg
Zm5hbWUgPDwgIjogIiA8PCBtc2c7CisgICAgfQorCisgICAgaWYgKG9mZnNldCA8IDApIHsKKyAg
ICAgIC8vIFJlbGF0aXZlIHRvIGVuZCBvZiBmaWxlOyBtYWtlIGl0IGFic29sdXRlCisgICAgICBp
ZiAoLW9mZnNldCA+IHNidWYuc3Rfc2l6ZSkgeworICAgICAgICBvZmZzZXQgPSAwOworICAgICAg
fSBlbHNlIHsKKyAgICAgICAgb2Zmc2V0ID0gc2J1Zi5zdF9zaXplICsgb2Zmc2V0OworICAgICAg
fQorICAgIH0KKyAgICBpZiAob2Zmc2V0ID4gc2J1Zi5zdF9zaXplKSB7CisgICAgICBvZmZzZXQg
PSBzYnVmLnN0X3NpemU7CisgICAgfQorICAgIGlmIChvZmZzZXQgKyBieXRlc190b19jb3JydXB0
ID4gc2J1Zi5zdF9zaXplKSB7CisgICAgICBieXRlc190b19jb3JydXB0ID0gc2J1Zi5zdF9zaXpl
IC0gb2Zmc2V0OworICAgIH0KKworICAgIC8vIERvIGl0CisgICAgc3RkOjpzdHJpbmcgY29udGVu
dHM7CisgICAgU3RhdHVzIHMgPSBSZWFkRmlsZVRvU3RyaW5nKEVudjo6RGVmYXVsdCgpLCBmbmFt
ZSwgJmNvbnRlbnRzKTsKKyAgICBBU1NFUlRfVFJVRShzLm9rKCkpIDw8IHMuVG9TdHJpbmcoKTsK
KyAgICBmb3IgKGludCBpID0gMDsgaSA8IGJ5dGVzX3RvX2NvcnJ1cHQ7IGkrKykgeworICAgICAg
Y29udGVudHNbaSArIG9mZnNldF0gXj0gMHg4MDsKKyAgICB9CisgICAgcyA9IFdyaXRlU3RyaW5n
VG9GaWxlKEVudjo6RGVmYXVsdCgpLCBjb250ZW50cywgZm5hbWUpOworICAgIEFTU0VSVF9UUlVF
KHMub2soKSkgPDwgcy5Ub1N0cmluZygpOworICB9CisKKyAgaW50IFByb3BlcnR5KGNvbnN0IHN0
ZDo6c3RyaW5nJiBuYW1lKSB7CisgICAgc3RkOjpzdHJpbmcgcHJvcGVydHk7CisgICAgaW50IHJl
c3VsdDsKKyAgICBpZiAoZGJfLT5HZXRQcm9wZXJ0eShuYW1lLCAmcHJvcGVydHkpICYmCisgICAg
ICAgIHNzY2FuZihwcm9wZXJ0eS5jX3N0cigpLCAiJWQiLCAmcmVzdWx0KSA9PSAxKSB7CisgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gLTE7CisgICAgfQor
ICB9CisKKyAgLy8gUmV0dXJuIHRoZSBpdGgga2V5CisgIFNsaWNlIEtleShpbnQgaSwgc3RkOjpz
dHJpbmcqIHN0b3JhZ2UpIHsKKyAgICBjaGFyIGJ1ZlsxMDBdOworICAgIHNucHJpbnRmKGJ1Ziwg
c2l6ZW9mKGJ1ZiksICIlMDE2ZCIsIGkpOworICAgIHN0b3JhZ2UtPmFzc2lnbihidWYsIHN0cmxl
bihidWYpKTsKKyAgICByZXR1cm4gU2xpY2UoKnN0b3JhZ2UpOworICB9CisKKyAgLy8gUmV0dXJu
IHRoZSB2YWx1ZSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgc3BlY2lmaWVkIGtleQorICBTbGljZSBW
YWx1ZShpbnQgaywgc3RkOjpzdHJpbmcqIHN0b3JhZ2UpIHsKKyAgICBSYW5kb20gcihrKTsKKyAg
ICByZXR1cm4gdGVzdDo6UmFuZG9tU3RyaW5nKCZyLCBrVmFsdWVTaXplLCBzdG9yYWdlKTsKKyAg
fQorfTsKKworVEVTVChDb3JydXB0aW9uVGVzdCwgUmVjb3ZlcnkpIHsKKyAgQnVpbGQoMTAwKTsK
KyAgQ2hlY2soMTAwLCAxMDApOworICBDb3JydXB0KGtMb2dGaWxlLCAxOSwgMSk7ICAgICAgLy8g
V3JpdGVCYXRjaCB0YWcgZm9yIGZpcnN0IHJlY29yZAorICBDb3JydXB0KGtMb2dGaWxlLCBsb2c6
OmtCbG9ja1NpemUgKyAxMDAwLCAxKTsgIC8vIFNvbWV3aGVyZSBpbiBzZWNvbmQgYmxvY2sKKyAg
UmVvcGVuKCk7CisKKyAgLy8gVGhlIDY0IHJlY29yZHMgaW4gdGhlIGZpcnN0IHR3byBsb2cgYmxv
Y2tzIGFyZSBjb21wbGV0ZWx5IGxvc3QuCisgIENoZWNrKDM2LCAzNik7Cit9CisKK1RFU1QoQ29y
cnVwdGlvblRlc3QsIFJlY292ZXJXcml0ZUVycm9yKSB7CisgIGVudl8ud3JpdGFibGVfZmlsZV9l
cnJvcl8gPSB0cnVlOworICBTdGF0dXMgcyA9IFRyeVJlb3BlbigpOworICBBU1NFUlRfVFJVRSgh
cy5vaygpKTsKK30KKworVEVTVChDb3JydXB0aW9uVGVzdCwgTmV3RmlsZUVycm9yRHVyaW5nV3Jp
dGUpIHsKKyAgLy8gRG8gZW5vdWdoIHdyaXRpbmcgdG8gZm9yY2UgbWlub3IgY29tcGFjdGlvbgor
ICBlbnZfLndyaXRhYmxlX2ZpbGVfZXJyb3JfID0gdHJ1ZTsKKyAgY29uc3QgaW50IG51bSA9IDMg
KyAoT3B0aW9ucygpLndyaXRlX2J1ZmZlcl9zaXplIC8ga1ZhbHVlU2l6ZSk7CisgIHN0ZDo6c3Ry
aW5nIHZhbHVlX3N0b3JhZ2U7CisgIFN0YXR1cyBzOworICBmb3IgKGludCBpID0gMDsgcy5vaygp
ICYmIGkgPCBudW07IGkrKykgeworICAgIFdyaXRlQmF0Y2ggYmF0Y2g7CisgICAgYmF0Y2guUHV0
KCJhIiwgVmFsdWUoMTAwLCAmdmFsdWVfc3RvcmFnZSkpOworICAgIHMgPSBkYl8tPldyaXRlKFdy
aXRlT3B0aW9ucygpLCAmYmF0Y2gpOworICB9CisgIEFTU0VSVF9UUlVFKCFzLm9rKCkpOworICBB
U1NFUlRfR0UoZW52Xy5udW1fd3JpdGFibGVfZmlsZV9lcnJvcnNfLCAxKTsKKyAgZW52Xy53cml0
YWJsZV9maWxlX2Vycm9yXyA9IGZhbHNlOworICBSZW9wZW4oKTsKK30KKworVEVTVChDb3JydXB0
aW9uVGVzdCwgVGFibGVGaWxlKSB7CisgIEJ1aWxkKDEwMCk7CisgIERCSW1wbCogZGJpID0gcmVp
bnRlcnByZXRfY2FzdDxEQkltcGwqPihkYl8pOworICBkYmktPlRFU1RfQ29tcGFjdE1lbVRhYmxl
KCk7CisgIGRiaS0+VEVTVF9Db21wYWN0UmFuZ2UoMCwgTlVMTCwgTlVMTCk7CisgIGRiaS0+VEVT
VF9Db21wYWN0UmFuZ2UoMSwgTlVMTCwgTlVMTCk7CisKKyAgQ29ycnVwdChrVGFibGVGaWxlLCAx
MDAsIDEpOworICBDaGVjayg5OSwgOTkpOworfQorCitURVNUKENvcnJ1cHRpb25UZXN0LCBUYWJs
ZUZpbGVJbmRleERhdGEpIHsKKyAgQnVpbGQoMTAwMDApOyAgLy8gRW5vdWdoIHRvIGJ1aWxkIG11
bHRpcGxlIFRhYmxlcworICBEQkltcGwqIGRiaSA9IHJlaW50ZXJwcmV0X2Nhc3Q8REJJbXBsKj4o
ZGJfKTsKKyAgZGJpLT5URVNUX0NvbXBhY3RNZW1UYWJsZSgpOworCisgIENvcnJ1cHQoa1RhYmxl
RmlsZSwgLTIwMDAsIDUwMCk7CisgIFJlb3BlbigpOworICBDaGVjayg1MDAwLCA5OTk5KTsKK30K
KworVEVTVChDb3JydXB0aW9uVGVzdCwgTWlzc2luZ0Rlc2NyaXB0b3IpIHsKKyAgQnVpbGQoMTAw
MCk7CisgIFJlcGFpckRCKCk7CisgIFJlb3BlbigpOworICBDaGVjaygxMDAwLCAxMDAwKTsKK30K
KworVEVTVChDb3JydXB0aW9uVGVzdCwgU2VxdWVuY2VOdW1iZXJSZWNvdmVyeSkgeworICBBU1NF
UlRfT0soZGJfLT5QdXQoV3JpdGVPcHRpb25zKCksICJmb28iLCAidjEiKSk7CisgIEFTU0VSVF9P
SyhkYl8tPlB1dChXcml0ZU9wdGlvbnMoKSwgImZvbyIsICJ2MiIpKTsKKyAgQVNTRVJUX09LKGRi
Xy0+UHV0KFdyaXRlT3B0aW9ucygpLCAiZm9vIiwgInYzIikpOworICBBU1NFUlRfT0soZGJfLT5Q
dXQoV3JpdGVPcHRpb25zKCksICJmb28iLCAidjQiKSk7CisgIEFTU0VSVF9PSyhkYl8tPlB1dChX
cml0ZU9wdGlvbnMoKSwgImZvbyIsICJ2NSIpKTsKKyAgUmVwYWlyREIoKTsKKyAgUmVvcGVuKCk7
CisgIHN0ZDo6c3RyaW5nIHY7CisgIEFTU0VSVF9PSyhkYl8tPkdldChSZWFkT3B0aW9ucygpLCAi
Zm9vIiwgJnYpKTsKKyAgQVNTRVJUX0VRKCJ2NSIsIHYpOworICAvLyBXcml0ZSBzb21ldGhpbmcu
ICBJZiBzZXF1ZW5jZSBudW1iZXIgd2FzIG5vdCByZWNvdmVyZWQgcHJvcGVybHksCisgIC8vIGl0
IHdpbGwgYmUgaGlkZGVuIGJ5IGFuIGVhcmxpZXIgd3JpdGUuCisgIEFTU0VSVF9PSyhkYl8tPlB1
dChXcml0ZU9wdGlvbnMoKSwgImZvbyIsICJ2NiIpKTsKKyAgQVNTRVJUX09LKGRiXy0+R2V0KFJl
YWRPcHRpb25zKCksICJmb28iLCAmdikpOworICBBU1NFUlRfRVEoInY2Iiwgdik7CisgIFJlb3Bl
bigpOworICBBU1NFUlRfT0soZGJfLT5HZXQoUmVhZE9wdGlvbnMoKSwgImZvbyIsICZ2KSk7Cisg
IEFTU0VSVF9FUSgidjYiLCB2KTsKK30KKworVEVTVChDb3JydXB0aW9uVGVzdCwgQ29ycnVwdGVk
RGVzY3JpcHRvcikgeworICBBU1NFUlRfT0soZGJfLT5QdXQoV3JpdGVPcHRpb25zKCksICJmb28i
LCAiaGVsbG8iKSk7CisgIERCSW1wbCogZGJpID0gcmVpbnRlcnByZXRfY2FzdDxEQkltcGwqPihk
Yl8pOworICBkYmktPlRFU1RfQ29tcGFjdE1lbVRhYmxlKCk7CisgIGRiaS0+VEVTVF9Db21wYWN0
UmFuZ2UoMCwgTlVMTCwgTlVMTCk7CisKKyAgQ29ycnVwdChrRGVzY3JpcHRvckZpbGUsIDAsIDEw
MDApOworICBTdGF0dXMgcyA9IFRyeVJlb3BlbigpOworICBBU1NFUlRfVFJVRSghcy5vaygpKTsK
KworICBSZXBhaXJEQigpOworICBSZW9wZW4oKTsKKyAgc3RkOjpzdHJpbmcgdjsKKyAgQVNTRVJU
X09LKGRiXy0+R2V0KFJlYWRPcHRpb25zKCksICJmb28iLCAmdikpOworICBBU1NFUlRfRVEoImhl
bGxvIiwgdik7Cit9CisKK1RFU1QoQ29ycnVwdGlvblRlc3QsIENvbXBhY3Rpb25JbnB1dEVycm9y
KSB7CisgIEJ1aWxkKDEwKTsKKyAgREJJbXBsKiBkYmkgPSByZWludGVycHJldF9jYXN0PERCSW1w
bCo+KGRiXyk7CisgIGRiaS0+VEVTVF9Db21wYWN0TWVtVGFibGUoKTsKKyAgY29uc3QgaW50IGxh
c3QgPSBjb25maWc6OmtNYXhNZW1Db21wYWN0TGV2ZWw7CisgIEFTU0VSVF9FUSgxLCBQcm9wZXJ0
eSgibGV2ZWxkYi5udW0tZmlsZXMtYXQtbGV2ZWwiICsgTnVtYmVyVG9TdHJpbmcobGFzdCkpKTsK
KworICBDb3JydXB0KGtUYWJsZUZpbGUsIDEwMCwgMSk7CisgIENoZWNrKDksIDkpOworCisgIC8v
IEZvcmNlIGNvbXBhY3Rpb25zIGJ5IHdyaXRpbmcgbG90cyBvZiB2YWx1ZXMKKyAgQnVpbGQoMTAw
MDApOworICBDaGVjaygxMDAwMCwgMTAwMDApOworfQorCitURVNUKENvcnJ1cHRpb25UZXN0LCBD
b21wYWN0aW9uSW5wdXRFcnJvclBhcmFub2lkKSB7CisgIE9wdGlvbnMgb3B0aW9uczsKKyAgb3B0
aW9ucy5wYXJhbm9pZF9jaGVja3MgPSB0cnVlOworICBvcHRpb25zLndyaXRlX2J1ZmZlcl9zaXpl
ID0gMTA0ODU3NjsKKyAgUmVvcGVuKCZvcHRpb25zKTsKKyAgREJJbXBsKiBkYmkgPSByZWludGVy
cHJldF9jYXN0PERCSW1wbCo+KGRiXyk7CisKKyAgLy8gRmlsbCBsZXZlbHMgPj0gMSBzbyBtZW10
YWJsZSBjb21wYWN0aW9uIG91dHB1dHMgdG8gbGV2ZWwgMQorICBmb3IgKGludCBsZXZlbCA9IDE7
IGxldmVsIDwgY29uZmlnOjprTnVtTGV2ZWxzOyBsZXZlbCsrKSB7CisgICAgZGJpLT5QdXQoV3Jp
dGVPcHRpb25zKCksICIiLCAiYmVnaW4iKTsKKyAgICBkYmktPlB1dChXcml0ZU9wdGlvbnMoKSwg
In4iLCAiZW5kIik7CisgICAgZGJpLT5URVNUX0NvbXBhY3RNZW1UYWJsZSgpOworICB9CisKKyAg
QnVpbGQoMTApOworICBkYmktPlRFU1RfQ29tcGFjdE1lbVRhYmxlKCk7CisgIEFTU0VSVF9FUSgx
LCBQcm9wZXJ0eSgibGV2ZWxkYi5udW0tZmlsZXMtYXQtbGV2ZWwwIikpOworCisgIENvcnJ1cHQo
a1RhYmxlRmlsZSwgMTAwLCAxKTsKKyAgQ2hlY2soOSwgOSk7CisKKyAgLy8gV3JpdGUgbXVzdCBl
dmVudHVhbGx5IGZhaWwgYmVjYXVzZSBvZiBjb3JydXB0ZWQgdGFibGUKKyAgU3RhdHVzIHM7Cisg
IHN0ZDo6c3RyaW5nIHRtcDEsIHRtcDI7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgMTAwMDAgJiYg
cy5vaygpOyBpKyspIHsKKyAgICBzID0gZGJfLT5QdXQoV3JpdGVPcHRpb25zKCksIEtleShpLCAm
dG1wMSksIFZhbHVlKGksICZ0bXAyKSk7CisgIH0KKyAgQVNTRVJUX1RSVUUoIXMub2soKSkgPDwg
IndyaXRlIGRpZCBub3QgZmFpbCBpbiBjb3JydXB0ZWQgcGFyYW5vaWQgZGIiOworfQorCitURVNU
KENvcnJ1cHRpb25UZXN0LCBVbnJlbGF0ZWRLZXlzKSB7CisgIEJ1aWxkKDEwKTsKKyAgREJJbXBs
KiBkYmkgPSByZWludGVycHJldF9jYXN0PERCSW1wbCo+KGRiXyk7CisgIGRiaS0+VEVTVF9Db21w
YWN0TWVtVGFibGUoKTsKKyAgQ29ycnVwdChrVGFibGVGaWxlLCAxMDAsIDEpOworCisgIHN0ZDo6
c3RyaW5nIHRtcDEsIHRtcDI7CisgIEFTU0VSVF9PSyhkYl8tPlB1dChXcml0ZU9wdGlvbnMoKSwg
S2V5KDEwMDAsICZ0bXAxKSwgVmFsdWUoMTAwMCwgJnRtcDIpKSk7CisgIHN0ZDo6c3RyaW5nIHY7
CisgIEFTU0VSVF9PSyhkYl8tPkdldChSZWFkT3B0aW9ucygpLCBLZXkoMTAwMCwgJnRtcDEpLCAm
dikpOworICBBU1NFUlRfRVEoVmFsdWUoMTAwMCwgJnRtcDIpLlRvU3RyaW5nKCksIHYpOworICBk
YmktPlRFU1RfQ29tcGFjdE1lbVRhYmxlKCk7CisgIEFTU0VSVF9PSyhkYl8tPkdldChSZWFkT3B0
aW9ucygpLCBLZXkoMTAwMCwgJnRtcDEpLCAmdikpOworICBBU1NFUlRfRVEoVmFsdWUoMTAwMCwg
JnRtcDIpLlRvU3RyaW5nKCksIHYpOworfQorCit9ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgorCitp
bnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpIHsKKyAgcmV0dXJuIGxldmVsZGI6OnRlc3Q6
OlJ1bkFsbFRlc3RzKCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRi
L2RiL2RiX2JlbmNoLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9kYl9iZW5jaC5j
YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi43YWJkZjg3NTg3ZGZjOGQ0ZmEwMjg3ZDhhZDQ1ZDgyYjIxNDJkN2ZjCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9kYl9iZW5jaC5j
YwpAQCAtMCwwICsxLDk3OSBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29u
dHJpYnV0b3JzLgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4K
KyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJkYi9kYl9pbXBsLmgiCisjaW5jbHVkZSAi
ZGIvdmVyc2lvbl9zZXQuaCIKKyNpbmNsdWRlICJsZXZlbGRiL2NhY2hlLmgiCisjaW5jbHVkZSAi
bGV2ZWxkYi9kYi5oIgorI2luY2x1ZGUgImxldmVsZGIvZW52LmgiCisjaW5jbHVkZSAibGV2ZWxk
Yi93cml0ZV9iYXRjaC5oIgorI2luY2x1ZGUgInBvcnQvcG9ydC5oIgorI2luY2x1ZGUgInV0aWwv
Y3JjMzJjLmgiCisjaW5jbHVkZSAidXRpbC9oaXN0b2dyYW0uaCIKKyNpbmNsdWRlICJ1dGlsL211
dGV4bG9jay5oIgorI2luY2x1ZGUgInV0aWwvcmFuZG9tLmgiCisjaW5jbHVkZSAidXRpbC90ZXN0
dXRpbC5oIgorCisvLyBDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBvcGVyYXRpb25zIHRvIHJ1biBp
biB0aGUgc3BlY2lmaWVkIG9yZGVyCisvLyAgIEFjdHVhbCBiZW5jaG1hcmtzOgorLy8gICAgICBm
aWxsc2VxICAgICAgIC0tIHdyaXRlIE4gdmFsdWVzIGluIHNlcXVlbnRpYWwga2V5IG9yZGVyIGlu
IGFzeW5jIG1vZGUKKy8vICAgICAgZmlsbHJhbmRvbSAgICAtLSB3cml0ZSBOIHZhbHVlcyBpbiBy
YW5kb20ga2V5IG9yZGVyIGluIGFzeW5jIG1vZGUKKy8vICAgICAgb3ZlcndyaXRlICAgICAtLSBv
dmVyd3JpdGUgTiB2YWx1ZXMgaW4gcmFuZG9tIGtleSBvcmRlciBpbiBhc3luYyBtb2RlCisvLyAg
ICAgIGZpbGxzeW5jICAgICAgLS0gd3JpdGUgTi8xMDAgdmFsdWVzIGluIHJhbmRvbSBrZXkgb3Jk
ZXIgaW4gc3luYyBtb2RlCisvLyAgICAgIGZpbGwxMDBLICAgICAgLS0gd3JpdGUgTi8xMDAwIDEw
MEsgdmFsdWVzIGluIHJhbmRvbSBvcmRlciBpbiBhc3luYyBtb2RlCisvLyAgICAgIGRlbGV0ZXNl
cSAgICAgLS0gZGVsZXRlIE4ga2V5cyBpbiBzZXF1ZW50aWFsIG9yZGVyCisvLyAgICAgIGRlbGV0
ZXJhbmRvbSAgLS0gZGVsZXRlIE4ga2V5cyBpbiByYW5kb20gb3JkZXIKKy8vICAgICAgcmVhZHNl
cSAgICAgICAtLSByZWFkIE4gdGltZXMgc2VxdWVudGlhbGx5CisvLyAgICAgIHJlYWRyZXZlcnNl
ICAgLS0gcmVhZCBOIHRpbWVzIGluIHJldmVyc2Ugb3JkZXIKKy8vICAgICAgcmVhZHJhbmRvbSAg
ICAtLSByZWFkIE4gdGltZXMgaW4gcmFuZG9tIG9yZGVyCisvLyAgICAgIHJlYWRtaXNzaW5nICAg
LS0gcmVhZCBOIG1pc3Npbmcga2V5cyBpbiByYW5kb20gb3JkZXIKKy8vICAgICAgcmVhZGhvdCAg
ICAgICAtLSByZWFkIE4gdGltZXMgaW4gcmFuZG9tIG9yZGVyIGZyb20gMSUgc2VjdGlvbiBvZiBE
QgorLy8gICAgICBzZWVrcmFuZG9tICAgIC0tIE4gcmFuZG9tIHNlZWtzCisvLyAgICAgIGNyYzMy
YyAgICAgICAgLS0gcmVwZWF0ZWQgY3JjMzJjIG9mIDRLIG9mIGRhdGEKKy8vICAgICAgYWNxdWly
ZWxvYWQgICAtLSBsb2FkIE4qMTAwMCB0aW1lcworLy8gICBNZXRhIG9wZXJhdGlvbnM6CisvLyAg
ICAgIGNvbXBhY3QgICAgIC0tIENvbXBhY3QgdGhlIGVudGlyZSBEQgorLy8gICAgICBzdGF0cyAg
ICAgICAtLSBQcmludCBEQiBzdGF0cworLy8gICAgICBzc3RhYmxlcyAgICAtLSBQcmludCBzc3Rh
YmxlIGluZm8KKy8vICAgICAgaGVhcHByb2ZpbGUgLS0gRHVtcCBhIGhlYXAgcHJvZmlsZSAoaWYg
c3VwcG9ydGVkIGJ5IHRoaXMgcG9ydCkKK3N0YXRpYyBjb25zdCBjaGFyKiBGTEFHU19iZW5jaG1h
cmtzID0KKyAgICAiZmlsbHNlcSwiCisgICAgImZpbGxzeW5jLCIKKyAgICAiZmlsbHJhbmRvbSwi
CisgICAgIm92ZXJ3cml0ZSwiCisgICAgInJlYWRyYW5kb20sIgorICAgICJyZWFkcmFuZG9tLCIg
IC8vIEV4dHJhIHJ1biB0byBhbGxvdyBwcmV2aW91cyBjb21wYWN0aW9ucyB0byBxdWllc2NlCisg
ICAgInJlYWRzZXEsIgorICAgICJyZWFkcmV2ZXJzZSwiCisgICAgImNvbXBhY3QsIgorICAgICJy
ZWFkcmFuZG9tLCIKKyAgICAicmVhZHNlcSwiCisgICAgInJlYWRyZXZlcnNlLCIKKyAgICAiZmls
bDEwMEssIgorICAgICJjcmMzMmMsIgorICAgICJzbmFwcHljb21wLCIKKyAgICAic25hcHB5dW5j
b21wLCIKKyAgICAiYWNxdWlyZWxvYWQsIgorICAgIDsKKworLy8gTnVtYmVyIG9mIGtleS92YWx1
ZXMgdG8gcGxhY2UgaW4gZGF0YWJhc2UKK3N0YXRpYyBpbnQgRkxBR1NfbnVtID0gMTAwMDAwMDsK
KworLy8gTnVtYmVyIG9mIHJlYWQgb3BlcmF0aW9ucyB0byBkby4gIElmIG5lZ2F0aXZlLCBkbyBG
TEFHU19udW0gcmVhZHMuCitzdGF0aWMgaW50IEZMQUdTX3JlYWRzID0gLTE7CisKKy8vIE51bWJl
ciBvZiBjb25jdXJyZW50IHRocmVhZHMgdG8gcnVuLgorc3RhdGljIGludCBGTEFHU190aHJlYWRz
ID0gMTsKKworLy8gU2l6ZSBvZiBlYWNoIHZhbHVlCitzdGF0aWMgaW50IEZMQUdTX3ZhbHVlX3Np
emUgPSAxMDA7CisKKy8vIEFycmFuZ2UgdG8gZ2VuZXJhdGUgdmFsdWVzIHRoYXQgc2hyaW5rIHRv
IHRoaXMgZnJhY3Rpb24gb2YKKy8vIHRoZWlyIG9yaWdpbmFsIHNpemUgYWZ0ZXIgY29tcHJlc3Np
b24KK3N0YXRpYyBkb3VibGUgRkxBR1NfY29tcHJlc3Npb25fcmF0aW8gPSAwLjU7CisKKy8vIFBy
aW50IGhpc3RvZ3JhbSBvZiBvcGVyYXRpb24gdGltaW5ncworc3RhdGljIGJvb2wgRkxBR1NfaGlz
dG9ncmFtID0gZmFsc2U7CisKKy8vIE51bWJlciBvZiBieXRlcyB0byBidWZmZXIgaW4gbWVtdGFi
bGUgYmVmb3JlIGNvbXBhY3RpbmcKKy8vIChpbml0aWFsaXplZCB0byBkZWZhdWx0IHZhbHVlIGJ5
ICJtYWluIikKK3N0YXRpYyBpbnQgRkxBR1Nfd3JpdGVfYnVmZmVyX3NpemUgPSAwOworCisvLyBO
dW1iZXIgb2YgYnl0ZXMgdG8gdXNlIGFzIGEgY2FjaGUgb2YgdW5jb21wcmVzc2VkIGRhdGEuCisv
LyBOZWdhdGl2ZSBtZWFucyB1c2UgZGVmYXVsdCBzZXR0aW5ncy4KK3N0YXRpYyBpbnQgRkxBR1Nf
Y2FjaGVfc2l6ZSA9IC0xOworCisvLyBNYXhpbXVtIG51bWJlciBvZiBmaWxlcyB0byBrZWVwIG9w
ZW4gYXQgdGhlIHNhbWUgdGltZSAodXNlIGRlZmF1bHQgaWYgPT0gMCkKK3N0YXRpYyBpbnQgRkxB
R1Nfb3Blbl9maWxlcyA9IDA7CisKKy8vIEJsb29tIGZpbHRlciBiaXRzIHBlciBrZXkuCisvLyBO
ZWdhdGl2ZSBtZWFucyB1c2UgZGVmYXVsdCBzZXR0aW5ncy4KK3N0YXRpYyBpbnQgRkxBR1NfYmxv
b21fYml0cyA9IC0xOworCisvLyBJZiB0cnVlLCBkbyBub3QgZGVzdHJveSB0aGUgZXhpc3Rpbmcg
ZGF0YWJhc2UuICBJZiB5b3Ugc2V0IHRoaXMKKy8vIGZsYWcgYW5kIGFsc28gc3BlY2lmeSBhIGJl
bmNobWFyayB0aGF0IHdhbnRzIGEgZnJlc2ggZGF0YWJhc2UsIHRoYXQKKy8vIGJlbmNobWFyayB3
aWxsIGZhaWwuCitzdGF0aWMgYm9vbCBGTEFHU191c2VfZXhpc3RpbmdfZGIgPSBmYWxzZTsKKwor
Ly8gVXNlIHRoZSBkYiB3aXRoIHRoZSBmb2xsb3dpbmcgbmFtZS4KK3N0YXRpYyBjb25zdCBjaGFy
KiBGTEFHU19kYiA9IE5VTEw7CisKK25hbWVzcGFjZSBsZXZlbGRiIHsKKworbmFtZXNwYWNlIHsK
KworLy8gSGVscGVyIGZvciBxdWlja2x5IGdlbmVyYXRpbmcgcmFuZG9tIGRhdGEuCitjbGFzcyBS
YW5kb21HZW5lcmF0b3IgeworIHByaXZhdGU6CisgIHN0ZDo6c3RyaW5nIGRhdGFfOworICBpbnQg
cG9zXzsKKworIHB1YmxpYzoKKyAgUmFuZG9tR2VuZXJhdG9yKCkgeworICAgIC8vIFdlIHVzZSBh
IGxpbWl0ZWQgYW1vdW50IG9mIGRhdGEgb3ZlciBhbmQgb3ZlciBhZ2FpbiBhbmQgZW5zdXJlCisg
ICAgLy8gdGhhdCBpdCBpcyBsYXJnZXIgdGhhbiB0aGUgY29tcHJlc3Npb24gd2luZG93ICgzMktC
KSwgYW5kIGFsc28KKyAgICAvLyBsYXJnZSBlbm91Z2ggdG8gc2VydmUgYWxsIHR5cGljYWwgdmFs
dWUgc2l6ZXMgd2Ugd2FudCB0byB3cml0ZS4KKyAgICBSYW5kb20gcm5kKDMwMSk7CisgICAgc3Rk
OjpzdHJpbmcgcGllY2U7CisgICAgd2hpbGUgKGRhdGFfLnNpemUoKSA8IDEwNDg1NzYpIHsKKyAg
ICAgIC8vIEFkZCBhIHNob3J0IGZyYWdtZW50IHRoYXQgaXMgYXMgY29tcHJlc3NpYmxlIGFzIHNw
ZWNpZmllZAorICAgICAgLy8gYnkgRkxBR1NfY29tcHJlc3Npb25fcmF0aW8uCisgICAgICB0ZXN0
OjpDb21wcmVzc2libGVTdHJpbmcoJnJuZCwgRkxBR1NfY29tcHJlc3Npb25fcmF0aW8sIDEwMCwg
JnBpZWNlKTsKKyAgICAgIGRhdGFfLmFwcGVuZChwaWVjZSk7CisgICAgfQorICAgIHBvc18gPSAw
OworICB9CisKKyAgU2xpY2UgR2VuZXJhdGUoaW50IGxlbikgeworICAgIGlmIChwb3NfICsgbGVu
ID4gZGF0YV8uc2l6ZSgpKSB7CisgICAgICBwb3NfID0gMDsKKyAgICAgIGFzc2VydChsZW4gPCBk
YXRhXy5zaXplKCkpOworICAgIH0KKyAgICBwb3NfICs9IGxlbjsKKyAgICByZXR1cm4gU2xpY2Uo
ZGF0YV8uZGF0YSgpICsgcG9zXyAtIGxlbiwgbGVuKTsKKyAgfQorfTsKKworc3RhdGljIFNsaWNl
IFRyaW1TcGFjZShTbGljZSBzKSB7CisgIGludCBzdGFydCA9IDA7CisgIHdoaWxlIChzdGFydCA8
IHMuc2l6ZSgpICYmIGlzc3BhY2Uoc1tzdGFydF0pKSB7CisgICAgc3RhcnQrKzsKKyAgfQorICBp
bnQgbGltaXQgPSBzLnNpemUoKTsKKyAgd2hpbGUgKGxpbWl0ID4gc3RhcnQgJiYgaXNzcGFjZShz
W2xpbWl0LTFdKSkgeworICAgIGxpbWl0LS07CisgIH0KKyAgcmV0dXJuIFNsaWNlKHMuZGF0YSgp
ICsgc3RhcnQsIGxpbWl0IC0gc3RhcnQpOworfQorCitzdGF0aWMgdm9pZCBBcHBlbmRXaXRoU3Bh
Y2Uoc3RkOjpzdHJpbmcqIHN0ciwgU2xpY2UgbXNnKSB7CisgIGlmIChtc2cuZW1wdHkoKSkgcmV0
dXJuOworICBpZiAoIXN0ci0+ZW1wdHkoKSkgeworICAgIHN0ci0+cHVzaF9iYWNrKCcgJyk7Cisg
IH0KKyAgc3RyLT5hcHBlbmQobXNnLmRhdGEoKSwgbXNnLnNpemUoKSk7Cit9CisKK2NsYXNzIFN0
YXRzIHsKKyBwcml2YXRlOgorICBkb3VibGUgc3RhcnRfOworICBkb3VibGUgZmluaXNoXzsKKyAg
ZG91YmxlIHNlY29uZHNfOworICBpbnQgZG9uZV87CisgIGludCBuZXh0X3JlcG9ydF87CisgIGlu
dDY0X3QgYnl0ZXNfOworICBkb3VibGUgbGFzdF9vcF9maW5pc2hfOworICBIaXN0b2dyYW0gaGlz
dF87CisgIHN0ZDo6c3RyaW5nIG1lc3NhZ2VfOworCisgcHVibGljOgorICBTdGF0cygpIHsgU3Rh
cnQoKTsgfQorCisgIHZvaWQgU3RhcnQoKSB7CisgICAgbmV4dF9yZXBvcnRfID0gMTAwOworICAg
IGxhc3Rfb3BfZmluaXNoXyA9IHN0YXJ0XzsKKyAgICBoaXN0Xy5DbGVhcigpOworICAgIGRvbmVf
ID0gMDsKKyAgICBieXRlc18gPSAwOworICAgIHNlY29uZHNfID0gMDsKKyAgICBzdGFydF8gPSBF
bnY6OkRlZmF1bHQoKS0+Tm93TWljcm9zKCk7CisgICAgZmluaXNoXyA9IHN0YXJ0XzsKKyAgICBt
ZXNzYWdlXy5jbGVhcigpOworICB9CisKKyAgdm9pZCBNZXJnZShjb25zdCBTdGF0cyYgb3RoZXIp
IHsKKyAgICBoaXN0Xy5NZXJnZShvdGhlci5oaXN0Xyk7CisgICAgZG9uZV8gKz0gb3RoZXIuZG9u
ZV87CisgICAgYnl0ZXNfICs9IG90aGVyLmJ5dGVzXzsKKyAgICBzZWNvbmRzXyArPSBvdGhlci5z
ZWNvbmRzXzsKKyAgICBpZiAob3RoZXIuc3RhcnRfIDwgc3RhcnRfKSBzdGFydF8gPSBvdGhlci5z
dGFydF87CisgICAgaWYgKG90aGVyLmZpbmlzaF8gPiBmaW5pc2hfKSBmaW5pc2hfID0gb3RoZXIu
ZmluaXNoXzsKKworICAgIC8vIEp1c3Qga2VlcCB0aGUgbWVzc2FnZXMgZnJvbSBvbmUgdGhyZWFk
CisgICAgaWYgKG1lc3NhZ2VfLmVtcHR5KCkpIG1lc3NhZ2VfID0gb3RoZXIubWVzc2FnZV87Cisg
IH0KKworICB2b2lkIFN0b3AoKSB7CisgICAgZmluaXNoXyA9IEVudjo6RGVmYXVsdCgpLT5Ob3dN
aWNyb3MoKTsKKyAgICBzZWNvbmRzXyA9IChmaW5pc2hfIC0gc3RhcnRfKSAqIDFlLTY7CisgIH0K
KworICB2b2lkIEFkZE1lc3NhZ2UoU2xpY2UgbXNnKSB7CisgICAgQXBwZW5kV2l0aFNwYWNlKCZt
ZXNzYWdlXywgbXNnKTsKKyAgfQorCisgIHZvaWQgRmluaXNoZWRTaW5nbGVPcCgpIHsKKyAgICBp
ZiAoRkxBR1NfaGlzdG9ncmFtKSB7CisgICAgICBkb3VibGUgbm93ID0gRW52OjpEZWZhdWx0KCkt
Pk5vd01pY3JvcygpOworICAgICAgZG91YmxlIG1pY3JvcyA9IG5vdyAtIGxhc3Rfb3BfZmluaXNo
XzsKKyAgICAgIGhpc3RfLkFkZChtaWNyb3MpOworICAgICAgaWYgKG1pY3JvcyA+IDIwMDAwKSB7
CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAibG9uZyBvcDogJS4xZiBtaWNyb3MlMzBzXHIiLCBt
aWNyb3MsICIiKTsKKyAgICAgICAgZmZsdXNoKHN0ZGVycik7CisgICAgICB9CisgICAgICBsYXN0
X29wX2ZpbmlzaF8gPSBub3c7CisgICAgfQorCisgICAgZG9uZV8rKzsKKyAgICBpZiAoZG9uZV8g
Pj0gbmV4dF9yZXBvcnRfKSB7CisgICAgICBpZiAgICAgIChuZXh0X3JlcG9ydF8gPCAxMDAwKSAg
IG5leHRfcmVwb3J0XyArPSAxMDA7CisgICAgICBlbHNlIGlmIChuZXh0X3JlcG9ydF8gPCA1MDAw
KSAgIG5leHRfcmVwb3J0XyArPSA1MDA7CisgICAgICBlbHNlIGlmIChuZXh0X3JlcG9ydF8gPCAx
MDAwMCkgIG5leHRfcmVwb3J0XyArPSAxMDAwOworICAgICAgZWxzZSBpZiAobmV4dF9yZXBvcnRf
IDwgNTAwMDApICBuZXh0X3JlcG9ydF8gKz0gNTAwMDsKKyAgICAgIGVsc2UgaWYgKG5leHRfcmVw
b3J0XyA8IDEwMDAwMCkgbmV4dF9yZXBvcnRfICs9IDEwMDAwOworICAgICAgZWxzZSBpZiAobmV4
dF9yZXBvcnRfIDwgNTAwMDAwKSBuZXh0X3JlcG9ydF8gKz0gNTAwMDA7CisgICAgICBlbHNlICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfcmVwb3J0XyArPSAxMDAwMDA7CisgICAgICBm
cHJpbnRmKHN0ZGVyciwgIi4uLiBmaW5pc2hlZCAlZCBvcHMlMzBzXHIiLCBkb25lXywgIiIpOwor
ICAgICAgZmZsdXNoKHN0ZGVycik7CisgICAgfQorICB9CisKKyAgdm9pZCBBZGRCeXRlcyhpbnQ2
NF90IG4pIHsKKyAgICBieXRlc18gKz0gbjsKKyAgfQorCisgIHZvaWQgUmVwb3J0KGNvbnN0IFNs
aWNlJiBuYW1lKSB7CisgICAgLy8gUHJldGVuZCBhdCBsZWFzdCBvbmUgb3Agd2FzIGRvbmUgaW4g
Y2FzZSB3ZSBhcmUgcnVubmluZyBhIGJlbmNobWFyaworICAgIC8vIHRoYXQgZG9lcyBub3QgY2Fs
bCBGaW5pc2hlZFNpbmdsZU9wKCkuCisgICAgaWYgKGRvbmVfIDwgMSkgZG9uZV8gPSAxOworCisg
ICAgc3RkOjpzdHJpbmcgZXh0cmE7CisgICAgaWYgKGJ5dGVzXyA+IDApIHsKKyAgICAgIC8vIFJh
dGUgaXMgY29tcHV0ZWQgb24gYWN0dWFsIGVsYXBzZWQgdGltZSwgbm90IHRoZSBzdW0gb2YgcGVy
LXRocmVhZAorICAgICAgLy8gZWxhcHNlZCB0aW1lcy4KKyAgICAgIGRvdWJsZSBlbGFwc2VkID0g
KGZpbmlzaF8gLSBzdGFydF8pICogMWUtNjsKKyAgICAgIGNoYXIgcmF0ZVsxMDBdOworICAgICAg
c25wcmludGYocmF0ZSwgc2l6ZW9mKHJhdGUpLCAiJTYuMWYgTUIvcyIsCisgICAgICAgICAgICAg
ICAoYnl0ZXNfIC8gMTA0ODU3Ni4wKSAvIGVsYXBzZWQpOworICAgICAgZXh0cmEgPSByYXRlOwor
ICAgIH0KKyAgICBBcHBlbmRXaXRoU3BhY2UoJmV4dHJhLCBtZXNzYWdlXyk7CisKKyAgICBmcHJp
bnRmKHN0ZG91dCwgIiUtMTJzIDogJTExLjNmIG1pY3Jvcy9vcDslcyVzXG4iLAorICAgICAgICAg
ICAgbmFtZS5Ub1N0cmluZygpLmNfc3RyKCksCisgICAgICAgICAgICBzZWNvbmRzXyAqIDFlNiAv
IGRvbmVfLAorICAgICAgICAgICAgKGV4dHJhLmVtcHR5KCkgPyAiIiA6ICIgIiksCisgICAgICAg
ICAgICBleHRyYS5jX3N0cigpKTsKKyAgICBpZiAoRkxBR1NfaGlzdG9ncmFtKSB7CisgICAgICBm
cHJpbnRmKHN0ZG91dCwgIk1pY3Jvc2Vjb25kcyBwZXIgb3A6XG4lc1xuIiwgaGlzdF8uVG9TdHJp
bmcoKS5jX3N0cigpKTsKKyAgICB9CisgICAgZmZsdXNoKHN0ZG91dCk7CisgIH0KK307CisKKy8v
IFN0YXRlIHNoYXJlZCBieSBhbGwgY29uY3VycmVudCBleGVjdXRpb25zIG9mIHRoZSBzYW1lIGJl
bmNobWFyay4KK3N0cnVjdCBTaGFyZWRTdGF0ZSB7CisgIHBvcnQ6Ok11dGV4IG11OworICBwb3J0
OjpDb25kVmFyIGN2OworICBpbnQgdG90YWw7CisKKyAgLy8gRWFjaCB0aHJlYWQgZ29lcyB0aHJv
dWdoIHRoZSBmb2xsb3dpbmcgc3RhdGVzOgorICAvLyAgICAoMSkgaW5pdGlhbGl6aW5nCisgIC8v
ICAgICgyKSB3YWl0aW5nIGZvciBvdGhlcnMgdG8gYmUgaW5pdGlhbGl6ZWQKKyAgLy8gICAgKDMp
IHJ1bm5pbmcKKyAgLy8gICAgKDQpIGRvbmUKKworICBpbnQgbnVtX2luaXRpYWxpemVkOworICBp
bnQgbnVtX2RvbmU7CisgIGJvb2wgc3RhcnQ7CisKKyAgU2hhcmVkU3RhdGUoKSA6IGN2KCZtdSkg
eyB9Cit9OworCisvLyBQZXItdGhyZWFkIHN0YXRlIGZvciBjb25jdXJyZW50IGV4ZWN1dGlvbnMg
b2YgdGhlIHNhbWUgYmVuY2htYXJrLgorc3RydWN0IFRocmVhZFN0YXRlIHsKKyAgaW50IHRpZDsg
ICAgICAgICAgICAgLy8gMC4ubi0xIHdoZW4gcnVubmluZyBpbiBuIHRocmVhZHMKKyAgUmFuZG9t
IHJhbmQ7ICAgICAgICAgLy8gSGFzIGRpZmZlcmVudCBzZWVkcyBmb3IgZGlmZmVyZW50IHRocmVh
ZHMKKyAgU3RhdHMgc3RhdHM7CisgIFNoYXJlZFN0YXRlKiBzaGFyZWQ7CisKKyAgVGhyZWFkU3Rh
dGUoaW50IGluZGV4KQorICAgICAgOiB0aWQoaW5kZXgpLAorICAgICAgICByYW5kKDEwMDAgKyBp
bmRleCkgeworICB9Cit9OworCit9ICAvLyBuYW1lc3BhY2UKKworY2xhc3MgQmVuY2htYXJrIHsK
KyBwcml2YXRlOgorICBDYWNoZSogY2FjaGVfOworICBjb25zdCBGaWx0ZXJQb2xpY3kqIGZpbHRl
cl9wb2xpY3lfOworICBEQiogZGJfOworICBpbnQgbnVtXzsKKyAgaW50IHZhbHVlX3NpemVfOwor
ICBpbnQgZW50cmllc19wZXJfYmF0Y2hfOworICBXcml0ZU9wdGlvbnMgd3JpdGVfb3B0aW9uc187
CisgIGludCByZWFkc187CisgIGludCBoZWFwX2NvdW50ZXJfOworCisgIHZvaWQgUHJpbnRIZWFk
ZXIoKSB7CisgICAgY29uc3QgaW50IGtLZXlTaXplID0gMTY7CisgICAgUHJpbnRFbnZpcm9ubWVu
dCgpOworICAgIGZwcmludGYoc3Rkb3V0LCAiS2V5czogICAgICAgJWQgYnl0ZXMgZWFjaFxuIiwg
a0tleVNpemUpOworICAgIGZwcmludGYoc3Rkb3V0LCAiVmFsdWVzOiAgICAgJWQgYnl0ZXMgZWFj
aCAoJWQgYnl0ZXMgYWZ0ZXIgY29tcHJlc3Npb24pXG4iLAorICAgICAgICAgICAgRkxBR1NfdmFs
dWVfc2l6ZSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4oRkxBR1NfdmFsdWVfc2l6ZSAq
IEZMQUdTX2NvbXByZXNzaW9uX3JhdGlvICsgMC41KSk7CisgICAgZnByaW50ZihzdGRvdXQsICJF
bnRyaWVzOiAgICAlZFxuIiwgbnVtXyk7CisgICAgZnByaW50ZihzdGRvdXQsICJSYXdTaXplOiAg
ICAlLjFmIE1CIChlc3RpbWF0ZWQpXG4iLAorICAgICAgICAgICAgKChzdGF0aWNfY2FzdDxpbnQ2
NF90PihrS2V5U2l6ZSArIEZMQUdTX3ZhbHVlX3NpemUpICogbnVtXykKKyAgICAgICAgICAgICAv
IDEwNDg1NzYuMCkpOworICAgIGZwcmludGYoc3Rkb3V0LCAiRmlsZVNpemU6ICAgJS4xZiBNQiAo
ZXN0aW1hdGVkKVxuIiwKKyAgICAgICAgICAgICgoKGtLZXlTaXplICsgRkxBR1NfdmFsdWVfc2l6
ZSAqIEZMQUdTX2NvbXByZXNzaW9uX3JhdGlvKSAqIG51bV8pCisgICAgICAgICAgICAgLyAxMDQ4
NTc2LjApKTsKKyAgICBQcmludFdhcm5pbmdzKCk7CisgICAgZnByaW50ZihzdGRvdXQsICItLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworICB9CisK
KyAgdm9pZCBQcmludFdhcm5pbmdzKCkgeworI2lmIGRlZmluZWQoX19HTlVDX18pICYmICFkZWZp
bmVkKF9fT1BUSU1JWkVfXykKKyAgICBmcHJpbnRmKHN0ZG91dCwKKyAgICAgICAgICAgICJXQVJO
SU5HOiBPcHRpbWl6YXRpb24gaXMgZGlzYWJsZWQ6IGJlbmNobWFya3MgdW5uZWNlc3NhcmlseSBz
bG93XG4iCisgICAgICAgICAgICApOworI2VuZGlmCisjaWZuZGVmIE5ERUJVRworICAgIGZwcmlu
dGYoc3Rkb3V0LAorICAgICAgICAgICAgIldBUk5JTkc6IEFzc2VydGlvbnMgYXJlIGVuYWJsZWQ7
IGJlbmNobWFya3MgdW5uZWNlc3NhcmlseSBzbG93XG4iKTsKKyNlbmRpZgorCisgICAgLy8gU2Vl
IGlmIHNuYXBweSBpcyB3b3JraW5nIGJ5IGF0dGVtcHRpbmcgdG8gY29tcHJlc3MgYSBjb21wcmVz
c2libGUgc3RyaW5nCisgICAgY29uc3QgY2hhciB0ZXh0W10gPSAieXl5eXl5eXl5eXl5eXl5eXl5
eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXkiOworICAgIHN0ZDo6c3RyaW5nIGNvbXByZXNzZWQ7Cisg
ICAgaWYgKCFwb3J0OjpTbmFwcHlfQ29tcHJlc3ModGV4dCwgc2l6ZW9mKHRleHQpLCAmY29tcHJl
c3NlZCkpIHsKKyAgICAgIGZwcmludGYoc3Rkb3V0LCAiV0FSTklORzogU25hcHB5IGNvbXByZXNz
aW9uIGlzIG5vdCBlbmFibGVkXG4iKTsKKyAgICB9IGVsc2UgaWYgKGNvbXByZXNzZWQuc2l6ZSgp
ID49IHNpemVvZih0ZXh0KSkgeworICAgICAgZnByaW50ZihzdGRvdXQsICJXQVJOSU5HOiBTbmFw
cHkgY29tcHJlc3Npb24gaXMgbm90IGVmZmVjdGl2ZVxuIik7CisgICAgfQorICB9CisKKyAgdm9p
ZCBQcmludEVudmlyb25tZW50KCkgeworICAgIGZwcmludGYoc3RkZXJyLCAiTGV2ZWxEQjogICAg
dmVyc2lvbiAlZC4lZFxuIiwKKyAgICAgICAgICAgIGtNYWpvclZlcnNpb24sIGtNaW5vclZlcnNp
b24pOworCisjaWYgZGVmaW5lZChfX2xpbnV4KQorICAgIHRpbWVfdCBub3cgPSB0aW1lKE5VTEwp
OworICAgIGZwcmludGYoc3RkZXJyLCAiRGF0ZTogICAgICAgJXMiLCBjdGltZSgmbm93KSk7ICAv
LyBjdGltZSgpIGFkZHMgbmV3bGluZQorCisgICAgRklMRSogY3B1aW5mbyA9IGZvcGVuKCIvcHJv
Yy9jcHVpbmZvIiwgInIiKTsKKyAgICBpZiAoY3B1aW5mbyAhPSBOVUxMKSB7CisgICAgICBjaGFy
IGxpbmVbMTAwMF07CisgICAgICBpbnQgbnVtX2NwdXMgPSAwOworICAgICAgc3RkOjpzdHJpbmcg
Y3B1X3R5cGU7CisgICAgICBzdGQ6OnN0cmluZyBjYWNoZV9zaXplOworICAgICAgd2hpbGUgKGZn
ZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgY3B1aW5mbykgIT0gTlVMTCkgeworICAgICAgICBjb25z
dCBjaGFyKiBzZXAgPSBzdHJjaHIobGluZSwgJzonKTsKKyAgICAgICAgaWYgKHNlcCA9PSBOVUxM
KSB7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgU2xpY2Uga2V5ID0g
VHJpbVNwYWNlKFNsaWNlKGxpbmUsIHNlcCAtIDEgLSBsaW5lKSk7CisgICAgICAgIFNsaWNlIHZh
bCA9IFRyaW1TcGFjZShTbGljZShzZXAgKyAxKSk7CisgICAgICAgIGlmIChrZXkgPT0gIm1vZGVs
IG5hbWUiKSB7CisgICAgICAgICAgKytudW1fY3B1czsKKyAgICAgICAgICBjcHVfdHlwZSA9IHZh
bC5Ub1N0cmluZygpOworICAgICAgICB9IGVsc2UgaWYgKGtleSA9PSAiY2FjaGUgc2l6ZSIpIHsK
KyAgICAgICAgICBjYWNoZV9zaXplID0gdmFsLlRvU3RyaW5nKCk7CisgICAgICAgIH0KKyAgICAg
IH0KKyAgICAgIGZjbG9zZShjcHVpbmZvKTsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiQ1BVOiAg
ICAgICAgJWQgKiAlc1xuIiwgbnVtX2NwdXMsIGNwdV90eXBlLmNfc3RyKCkpOworICAgICAgZnBy
aW50ZihzdGRlcnIsICJDUFVDYWNoZTogICAlc1xuIiwgY2FjaGVfc2l6ZS5jX3N0cigpKTsKKyAg
ICB9CisjZW5kaWYKKyAgfQorCisgcHVibGljOgorICBCZW5jaG1hcmsoKQorICA6IGNhY2hlXyhG
TEFHU19jYWNoZV9zaXplID49IDAgPyBOZXdMUlVDYWNoZShGTEFHU19jYWNoZV9zaXplKSA6IE5V
TEwpLAorICAgIGZpbHRlcl9wb2xpY3lfKEZMQUdTX2Jsb29tX2JpdHMgPj0gMAorICAgICAgICAg
ICAgICAgICAgID8gTmV3Qmxvb21GaWx0ZXJQb2xpY3koRkxBR1NfYmxvb21fYml0cykKKyAgICAg
ICAgICAgICAgICAgICA6IE5VTEwpLAorICAgIGRiXyhOVUxMKSwKKyAgICBudW1fKEZMQUdTX251
bSksCisgICAgdmFsdWVfc2l6ZV8oRkxBR1NfdmFsdWVfc2l6ZSksCisgICAgZW50cmllc19wZXJf
YmF0Y2hfKDEpLAorICAgIHJlYWRzXyhGTEFHU19yZWFkcyA8IDAgPyBGTEFHU19udW0gOiBGTEFH
U19yZWFkcyksCisgICAgaGVhcF9jb3VudGVyXygwKSB7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpz
dHJpbmc+IGZpbGVzOworICAgIEVudjo6RGVmYXVsdCgpLT5HZXRDaGlsZHJlbihGTEFHU19kYiwg
JmZpbGVzKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVzLnNpemUoKTsgaSsrKSB7Cisg
ICAgICBpZiAoU2xpY2UoZmlsZXNbaV0pLnN0YXJ0c193aXRoKCJoZWFwLSIpKSB7CisgICAgICAg
IEVudjo6RGVmYXVsdCgpLT5EZWxldGVGaWxlKHN0ZDo6c3RyaW5nKEZMQUdTX2RiKSArICIvIiAr
IGZpbGVzW2ldKTsKKyAgICAgIH0KKyAgICB9CisgICAgaWYgKCFGTEFHU191c2VfZXhpc3Rpbmdf
ZGIpIHsKKyAgICAgIERlc3Ryb3lEQihGTEFHU19kYiwgT3B0aW9ucygpKTsKKyAgICB9CisgIH0K
KworICB+QmVuY2htYXJrKCkgeworICAgIGRlbGV0ZSBkYl87CisgICAgZGVsZXRlIGNhY2hlXzsK
KyAgICBkZWxldGUgZmlsdGVyX3BvbGljeV87CisgIH0KKworICB2b2lkIFJ1bigpIHsKKyAgICBQ
cmludEhlYWRlcigpOworICAgIE9wZW4oKTsKKworICAgIGNvbnN0IGNoYXIqIGJlbmNobWFya3Mg
PSBGTEFHU19iZW5jaG1hcmtzOworICAgIHdoaWxlIChiZW5jaG1hcmtzICE9IE5VTEwpIHsKKyAg
ICAgIGNvbnN0IGNoYXIqIHNlcCA9IHN0cmNocihiZW5jaG1hcmtzLCAnLCcpOworICAgICAgU2xp
Y2UgbmFtZTsKKyAgICAgIGlmIChzZXAgPT0gTlVMTCkgeworICAgICAgICBuYW1lID0gYmVuY2ht
YXJrczsKKyAgICAgICAgYmVuY2htYXJrcyA9IE5VTEw7CisgICAgICB9IGVsc2UgeworICAgICAg
ICBuYW1lID0gU2xpY2UoYmVuY2htYXJrcywgc2VwIC0gYmVuY2htYXJrcyk7CisgICAgICAgIGJl
bmNobWFya3MgPSBzZXAgKyAxOworICAgICAgfQorCisgICAgICAvLyBSZXNldCBwYXJhbWV0ZXJz
IHRoYXQgbWF5IGJlIG92ZXJyaWRkZGVuIGJ3bG93CisgICAgICBudW1fID0gRkxBR1NfbnVtOwor
ICAgICAgcmVhZHNfID0gKEZMQUdTX3JlYWRzIDwgMCA/IEZMQUdTX251bSA6IEZMQUdTX3JlYWRz
KTsKKyAgICAgIHZhbHVlX3NpemVfID0gRkxBR1NfdmFsdWVfc2l6ZTsKKyAgICAgIGVudHJpZXNf
cGVyX2JhdGNoXyA9IDE7CisgICAgICB3cml0ZV9vcHRpb25zXyA9IFdyaXRlT3B0aW9ucygpOwor
CisgICAgICB2b2lkIChCZW5jaG1hcms6OiptZXRob2QpKFRocmVhZFN0YXRlKikgPSBOVUxMOwor
ICAgICAgYm9vbCBmcmVzaF9kYiA9IGZhbHNlOworICAgICAgaW50IG51bV90aHJlYWRzID0gRkxB
R1NfdGhyZWFkczsKKworICAgICAgaWYgKG5hbWUgPT0gU2xpY2UoImZpbGxzZXEiKSkgeworICAg
ICAgICBmcmVzaF9kYiA9IHRydWU7CisgICAgICAgIG1ldGhvZCA9ICZCZW5jaG1hcms6OldyaXRl
U2VxOworICAgICAgfSBlbHNlIGlmIChuYW1lID09IFNsaWNlKCJmaWxsYmF0Y2giKSkgeworICAg
ICAgICBmcmVzaF9kYiA9IHRydWU7CisgICAgICAgIGVudHJpZXNfcGVyX2JhdGNoXyA9IDEwMDA7
CisgICAgICAgIG1ldGhvZCA9ICZCZW5jaG1hcms6OldyaXRlU2VxOworICAgICAgfSBlbHNlIGlm
IChuYW1lID09IFNsaWNlKCJmaWxscmFuZG9tIikpIHsKKyAgICAgICAgZnJlc2hfZGIgPSB0cnVl
OworICAgICAgICBtZXRob2QgPSAmQmVuY2htYXJrOjpXcml0ZVJhbmRvbTsKKyAgICAgIH0gZWxz
ZSBpZiAobmFtZSA9PSBTbGljZSgib3ZlcndyaXRlIikpIHsKKyAgICAgICAgZnJlc2hfZGIgPSBm
YWxzZTsKKyAgICAgICAgbWV0aG9kID0gJkJlbmNobWFyazo6V3JpdGVSYW5kb207CisgICAgICB9
IGVsc2UgaWYgKG5hbWUgPT0gU2xpY2UoImZpbGxzeW5jIikpIHsKKyAgICAgICAgZnJlc2hfZGIg
PSB0cnVlOworICAgICAgICBudW1fIC89IDEwMDA7CisgICAgICAgIHdyaXRlX29wdGlvbnNfLnN5
bmMgPSB0cnVlOworICAgICAgICBtZXRob2QgPSAmQmVuY2htYXJrOjpXcml0ZVJhbmRvbTsKKyAg
ICAgIH0gZWxzZSBpZiAobmFtZSA9PSBTbGljZSgiZmlsbDEwMEsiKSkgeworICAgICAgICBmcmVz
aF9kYiA9IHRydWU7CisgICAgICAgIG51bV8gLz0gMTAwMDsKKyAgICAgICAgdmFsdWVfc2l6ZV8g
PSAxMDAgKiAxMDAwOworICAgICAgICBtZXRob2QgPSAmQmVuY2htYXJrOjpXcml0ZVJhbmRvbTsK
KyAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSBTbGljZSgicmVhZHNlcSIpKSB7CisgICAgICAgIG1l
dGhvZCA9ICZCZW5jaG1hcms6OlJlYWRTZXF1ZW50aWFsOworICAgICAgfSBlbHNlIGlmIChuYW1l
ID09IFNsaWNlKCJyZWFkcmV2ZXJzZSIpKSB7CisgICAgICAgIG1ldGhvZCA9ICZCZW5jaG1hcms6
OlJlYWRSZXZlcnNlOworICAgICAgfSBlbHNlIGlmIChuYW1lID09IFNsaWNlKCJyZWFkcmFuZG9t
IikpIHsKKyAgICAgICAgbWV0aG9kID0gJkJlbmNobWFyazo6UmVhZFJhbmRvbTsKKyAgICAgIH0g
ZWxzZSBpZiAobmFtZSA9PSBTbGljZSgicmVhZG1pc3NpbmciKSkgeworICAgICAgICBtZXRob2Qg
PSAmQmVuY2htYXJrOjpSZWFkTWlzc2luZzsKKyAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSBTbGlj
ZSgic2Vla3JhbmRvbSIpKSB7CisgICAgICAgIG1ldGhvZCA9ICZCZW5jaG1hcms6OlNlZWtSYW5k
b207CisgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gU2xpY2UoInJlYWRob3QiKSkgeworICAgICAg
ICBtZXRob2QgPSAmQmVuY2htYXJrOjpSZWFkSG90OworICAgICAgfSBlbHNlIGlmIChuYW1lID09
IFNsaWNlKCJyZWFkcmFuZG9tc21hbGwiKSkgeworICAgICAgICByZWFkc18gLz0gMTAwMDsKKyAg
ICAgICAgbWV0aG9kID0gJkJlbmNobWFyazo6UmVhZFJhbmRvbTsKKyAgICAgIH0gZWxzZSBpZiAo
bmFtZSA9PSBTbGljZSgiZGVsZXRlc2VxIikpIHsKKyAgICAgICAgbWV0aG9kID0gJkJlbmNobWFy
azo6RGVsZXRlU2VxOworICAgICAgfSBlbHNlIGlmIChuYW1lID09IFNsaWNlKCJkZWxldGVyYW5k
b20iKSkgeworICAgICAgICBtZXRob2QgPSAmQmVuY2htYXJrOjpEZWxldGVSYW5kb207CisgICAg
ICB9IGVsc2UgaWYgKG5hbWUgPT0gU2xpY2UoInJlYWR3aGlsZXdyaXRpbmciKSkgeworICAgICAg
ICBudW1fdGhyZWFkcysrOyAgLy8gQWRkIGV4dHJhIHRocmVhZCBmb3Igd3JpdGluZworICAgICAg
ICBtZXRob2QgPSAmQmVuY2htYXJrOjpSZWFkV2hpbGVXcml0aW5nOworICAgICAgfSBlbHNlIGlm
IChuYW1lID09IFNsaWNlKCJjb21wYWN0IikpIHsKKyAgICAgICAgbWV0aG9kID0gJkJlbmNobWFy
azo6Q29tcGFjdDsKKyAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSBTbGljZSgiY3JjMzJjIikpIHsK
KyAgICAgICAgbWV0aG9kID0gJkJlbmNobWFyazo6Q3JjMzJjOworICAgICAgfSBlbHNlIGlmIChu
YW1lID09IFNsaWNlKCJhY3F1aXJlbG9hZCIpKSB7CisgICAgICAgIG1ldGhvZCA9ICZCZW5jaG1h
cms6OkFjcXVpcmVMb2FkOworICAgICAgfSBlbHNlIGlmIChuYW1lID09IFNsaWNlKCJzbmFwcHlj
b21wIikpIHsKKyAgICAgICAgbWV0aG9kID0gJkJlbmNobWFyazo6U25hcHB5Q29tcHJlc3M7Cisg
ICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gU2xpY2UoInNuYXBweXVuY29tcCIpKSB7CisgICAgICAg
IG1ldGhvZCA9ICZCZW5jaG1hcms6OlNuYXBweVVuY29tcHJlc3M7CisgICAgICB9IGVsc2UgaWYg
KG5hbWUgPT0gU2xpY2UoImhlYXBwcm9maWxlIikpIHsKKyAgICAgICAgSGVhcFByb2ZpbGUoKTsK
KyAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSBTbGljZSgic3RhdHMiKSkgeworICAgICAgICBQcmlu
dFN0YXRzKCJsZXZlbGRiLnN0YXRzIik7CisgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gU2xpY2Uo
InNzdGFibGVzIikpIHsKKyAgICAgICAgUHJpbnRTdGF0cygibGV2ZWxkYi5zc3RhYmxlcyIpOwor
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG5hbWUgIT0gU2xpY2UoKSkgeyAgLy8gTm8gZXJy
b3IgbWVzc2FnZSBmb3IgZW1wdHkgbmFtZQorICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAidW5r
bm93biBiZW5jaG1hcmsgJyVzJ1xuIiwgbmFtZS5Ub1N0cmluZygpLmNfc3RyKCkpOworICAgICAg
ICB9CisgICAgICB9CisKKyAgICAgIGlmIChmcmVzaF9kYikgeworICAgICAgICBpZiAoRkxBR1Nf
dXNlX2V4aXN0aW5nX2RiKSB7CisgICAgICAgICAgZnByaW50ZihzdGRvdXQsICIlLTEycyA6IHNr
aXBwZWQgKC0tdXNlX2V4aXN0aW5nX2RiIGlzIHRydWUpXG4iLAorICAgICAgICAgICAgICAgICAg
bmFtZS5Ub1N0cmluZygpLmNfc3RyKCkpOworICAgICAgICAgIG1ldGhvZCA9IE5VTEw7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgZGVsZXRlIGRiXzsKKyAgICAgICAgICBkYl8gPSBOVUxM
OworICAgICAgICAgIERlc3Ryb3lEQihGTEFHU19kYiwgT3B0aW9ucygpKTsKKyAgICAgICAgICBP
cGVuKCk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKG1ldGhvZCAhPSBOVUxMKSB7
CisgICAgICAgIFJ1bkJlbmNobWFyayhudW1fdGhyZWFkcywgbmFtZSwgbWV0aG9kKTsKKyAgICAg
IH0KKyAgICB9CisgIH0KKworIHByaXZhdGU6CisgIHN0cnVjdCBUaHJlYWRBcmcgeworICAgIEJl
bmNobWFyayogYm07CisgICAgU2hhcmVkU3RhdGUqIHNoYXJlZDsKKyAgICBUaHJlYWRTdGF0ZSog
dGhyZWFkOworICAgIHZvaWQgKEJlbmNobWFyazo6Km1ldGhvZCkoVGhyZWFkU3RhdGUqKTsKKyAg
fTsKKworICBzdGF0aWMgdm9pZCBUaHJlYWRCb2R5KHZvaWQqIHYpIHsKKyAgICBUaHJlYWRBcmcq
IGFyZyA9IHJlaW50ZXJwcmV0X2Nhc3Q8VGhyZWFkQXJnKj4odik7CisgICAgU2hhcmVkU3RhdGUq
IHNoYXJlZCA9IGFyZy0+c2hhcmVkOworICAgIFRocmVhZFN0YXRlKiB0aHJlYWQgPSBhcmctPnRo
cmVhZDsKKyAgICB7CisgICAgICBNdXRleExvY2sgbCgmc2hhcmVkLT5tdSk7CisgICAgICBzaGFy
ZWQtPm51bV9pbml0aWFsaXplZCsrOworICAgICAgaWYgKHNoYXJlZC0+bnVtX2luaXRpYWxpemVk
ID49IHNoYXJlZC0+dG90YWwpIHsKKyAgICAgICAgc2hhcmVkLT5jdi5TaWduYWxBbGwoKTsKKyAg
ICAgIH0KKyAgICAgIHdoaWxlICghc2hhcmVkLT5zdGFydCkgeworICAgICAgICBzaGFyZWQtPmN2
LldhaXQoKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICB0aHJlYWQtPnN0YXRzLlN0YXJ0KCk7Cisg
ICAgKGFyZy0+Ym0tPiooYXJnLT5tZXRob2QpKSh0aHJlYWQpOworICAgIHRocmVhZC0+c3RhdHMu
U3RvcCgpOworCisgICAgeworICAgICAgTXV0ZXhMb2NrIGwoJnNoYXJlZC0+bXUpOworICAgICAg
c2hhcmVkLT5udW1fZG9uZSsrOworICAgICAgaWYgKHNoYXJlZC0+bnVtX2RvbmUgPj0gc2hhcmVk
LT50b3RhbCkgeworICAgICAgICBzaGFyZWQtPmN2LlNpZ25hbEFsbCgpOworICAgICAgfQorICAg
IH0KKyAgfQorCisgIHZvaWQgUnVuQmVuY2htYXJrKGludCBuLCBTbGljZSBuYW1lLAorICAgICAg
ICAgICAgICAgICAgICB2b2lkIChCZW5jaG1hcms6OiptZXRob2QpKFRocmVhZFN0YXRlKikpIHsK
KyAgICBTaGFyZWRTdGF0ZSBzaGFyZWQ7CisgICAgc2hhcmVkLnRvdGFsID0gbjsKKyAgICBzaGFy
ZWQubnVtX2luaXRpYWxpemVkID0gMDsKKyAgICBzaGFyZWQubnVtX2RvbmUgPSAwOworICAgIHNo
YXJlZC5zdGFydCA9IGZhbHNlOworCisgICAgVGhyZWFkQXJnKiBhcmcgPSBuZXcgVGhyZWFkQXJn
W25dOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgICBhcmdbaV0uYm0g
PSB0aGlzOworICAgICAgYXJnW2ldLm1ldGhvZCA9IG1ldGhvZDsKKyAgICAgIGFyZ1tpXS5zaGFy
ZWQgPSAmc2hhcmVkOworICAgICAgYXJnW2ldLnRocmVhZCA9IG5ldyBUaHJlYWRTdGF0ZShpKTsK
KyAgICAgIGFyZ1tpXS50aHJlYWQtPnNoYXJlZCA9ICZzaGFyZWQ7CisgICAgICBFbnY6OkRlZmF1
bHQoKS0+U3RhcnRUaHJlYWQoVGhyZWFkQm9keSwgJmFyZ1tpXSk7CisgICAgfQorCisgICAgc2hh
cmVkLm11LkxvY2soKTsKKyAgICB3aGlsZSAoc2hhcmVkLm51bV9pbml0aWFsaXplZCA8IG4pIHsK
KyAgICAgIHNoYXJlZC5jdi5XYWl0KCk7CisgICAgfQorCisgICAgc2hhcmVkLnN0YXJ0ID0gdHJ1
ZTsKKyAgICBzaGFyZWQuY3YuU2lnbmFsQWxsKCk7CisgICAgd2hpbGUgKHNoYXJlZC5udW1fZG9u
ZSA8IG4pIHsKKyAgICAgIHNoYXJlZC5jdi5XYWl0KCk7CisgICAgfQorICAgIHNoYXJlZC5tdS5V
bmxvY2soKTsKKworICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbjsgaSsrKSB7CisgICAgICBhcmdb
MF0udGhyZWFkLT5zdGF0cy5NZXJnZShhcmdbaV0udGhyZWFkLT5zdGF0cyk7CisgICAgfQorICAg
IGFyZ1swXS50aHJlYWQtPnN0YXRzLlJlcG9ydChuYW1lKTsKKworICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbjsgaSsrKSB7CisgICAgICBkZWxldGUgYXJnW2ldLnRocmVhZDsKKyAgICB9CisgICAg
ZGVsZXRlW10gYXJnOworICB9CisKKyAgdm9pZCBDcmMzMmMoVGhyZWFkU3RhdGUqIHRocmVhZCkg
eworICAgIC8vIENoZWNrc3VtIGFib3V0IDUwME1CIG9mIGRhdGEgdG90YWwKKyAgICBjb25zdCBp
bnQgc2l6ZSA9IDQwOTY7CisgICAgY29uc3QgY2hhciogbGFiZWwgPSAiKDRLIHBlciBvcCkiOwor
ICAgIHN0ZDo6c3RyaW5nIGRhdGEoc2l6ZSwgJ3gnKTsKKyAgICBpbnQ2NF90IGJ5dGVzID0gMDsK
KyAgICB1aW50MzJfdCBjcmMgPSAwOworICAgIHdoaWxlIChieXRlcyA8IDUwMCAqIDEwNDg1NzYp
IHsKKyAgICAgIGNyYyA9IGNyYzMyYzo6VmFsdWUoZGF0YS5kYXRhKCksIHNpemUpOworICAgICAg
dGhyZWFkLT5zdGF0cy5GaW5pc2hlZFNpbmdsZU9wKCk7CisgICAgICBieXRlcyArPSBzaXplOwor
ICAgIH0KKyAgICAvLyBQcmludCBzbyByZXN1bHQgaXMgbm90IGRlYWQKKyAgICBmcHJpbnRmKHN0
ZGVyciwgIi4uLiBjcmM9MHgleFxyIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihjcmMpKTsK
KworICAgIHRocmVhZC0+c3RhdHMuQWRkQnl0ZXMoYnl0ZXMpOworICAgIHRocmVhZC0+c3RhdHMu
QWRkTWVzc2FnZShsYWJlbCk7CisgIH0KKworICB2b2lkIEFjcXVpcmVMb2FkKFRocmVhZFN0YXRl
KiB0aHJlYWQpIHsKKyAgICBpbnQgZHVtbXk7CisgICAgcG9ydDo6QXRvbWljUG9pbnRlciBhcCgm
ZHVtbXkpOworICAgIGludCBjb3VudCA9IDA7CisgICAgdm9pZCAqcHRyID0gTlVMTDsKKyAgICB0
aHJlYWQtPnN0YXRzLkFkZE1lc3NhZ2UoIihlYWNoIG9wIGlzIDEwMDAgbG9hZHMpIik7CisgICAg
d2hpbGUgKGNvdW50IDwgMTAwMDAwKSB7CisgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwMDA7
IGkrKykgeworICAgICAgICBwdHIgPSBhcC5BY3F1aXJlX0xvYWQoKTsKKyAgICAgIH0KKyAgICAg
IGNvdW50Kys7CisgICAgICB0aHJlYWQtPnN0YXRzLkZpbmlzaGVkU2luZ2xlT3AoKTsKKyAgICB9
CisgICAgaWYgKHB0ciA9PSBOVUxMKSBleGl0KDEpOyAvLyBEaXNhYmxlIHVudXNlZCB2YXJpYWJs
ZSB3YXJuaW5nLgorICB9CisKKyAgdm9pZCBTbmFwcHlDb21wcmVzcyhUaHJlYWRTdGF0ZSogdGhy
ZWFkKSB7CisgICAgUmFuZG9tR2VuZXJhdG9yIGdlbjsKKyAgICBTbGljZSBpbnB1dCA9IGdlbi5H
ZW5lcmF0ZShPcHRpb25zKCkuYmxvY2tfc2l6ZSk7CisgICAgaW50NjRfdCBieXRlcyA9IDA7Cisg
ICAgaW50NjRfdCBwcm9kdWNlZCA9IDA7CisgICAgYm9vbCBvayA9IHRydWU7CisgICAgc3RkOjpz
dHJpbmcgY29tcHJlc3NlZDsKKyAgICB3aGlsZSAob2sgJiYgYnl0ZXMgPCAxMDI0ICogMTA0ODU3
NikgeyAgLy8gQ29tcHJlc3MgMUcKKyAgICAgIG9rID0gcG9ydDo6U25hcHB5X0NvbXByZXNzKGlu
cHV0LmRhdGEoKSwgaW5wdXQuc2l6ZSgpLCAmY29tcHJlc3NlZCk7CisgICAgICBwcm9kdWNlZCAr
PSBjb21wcmVzc2VkLnNpemUoKTsKKyAgICAgIGJ5dGVzICs9IGlucHV0LnNpemUoKTsKKyAgICAg
IHRocmVhZC0+c3RhdHMuRmluaXNoZWRTaW5nbGVPcCgpOworICAgIH0KKworICAgIGlmICghb2sp
IHsKKyAgICAgIHRocmVhZC0+c3RhdHMuQWRkTWVzc2FnZSgiKHNuYXBweSBmYWlsdXJlKSIpOwor
ICAgIH0gZWxzZSB7CisgICAgICBjaGFyIGJ1ZlsxMDBdOworICAgICAgc25wcmludGYoYnVmLCBz
aXplb2YoYnVmKSwgIihvdXRwdXQ6ICUuMWYlJSkiLAorICAgICAgICAgICAgICAgKHByb2R1Y2Vk
ICogMTAwLjApIC8gYnl0ZXMpOworICAgICAgdGhyZWFkLT5zdGF0cy5BZGRNZXNzYWdlKGJ1Zik7
CisgICAgICB0aHJlYWQtPnN0YXRzLkFkZEJ5dGVzKGJ5dGVzKTsKKyAgICB9CisgIH0KKworICB2
b2lkIFNuYXBweVVuY29tcHJlc3MoVGhyZWFkU3RhdGUqIHRocmVhZCkgeworICAgIFJhbmRvbUdl
bmVyYXRvciBnZW47CisgICAgU2xpY2UgaW5wdXQgPSBnZW4uR2VuZXJhdGUoT3B0aW9ucygpLmJs
b2NrX3NpemUpOworICAgIHN0ZDo6c3RyaW5nIGNvbXByZXNzZWQ7CisgICAgYm9vbCBvayA9IHBv
cnQ6OlNuYXBweV9Db21wcmVzcyhpbnB1dC5kYXRhKCksIGlucHV0LnNpemUoKSwgJmNvbXByZXNz
ZWQpOworICAgIGludDY0X3QgYnl0ZXMgPSAwOworICAgIGNoYXIqIHVuY29tcHJlc3NlZCA9IG5l
dyBjaGFyW2lucHV0LnNpemUoKV07CisgICAgd2hpbGUgKG9rICYmIGJ5dGVzIDwgMTAyNCAqIDEw
NDg1NzYpIHsgIC8vIENvbXByZXNzIDFHCisgICAgICBvayA9ICBwb3J0OjpTbmFwcHlfVW5jb21w
cmVzcyhjb21wcmVzc2VkLmRhdGEoKSwgY29tcHJlc3NlZC5zaXplKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bmNvbXByZXNzZWQpOworICAgICAgYnl0ZXMgKz0gaW5w
dXQuc2l6ZSgpOworICAgICAgdGhyZWFkLT5zdGF0cy5GaW5pc2hlZFNpbmdsZU9wKCk7CisgICAg
fQorICAgIGRlbGV0ZVtdIHVuY29tcHJlc3NlZDsKKworICAgIGlmICghb2spIHsKKyAgICAgIHRo
cmVhZC0+c3RhdHMuQWRkTWVzc2FnZSgiKHNuYXBweSBmYWlsdXJlKSIpOworICAgIH0gZWxzZSB7
CisgICAgICB0aHJlYWQtPnN0YXRzLkFkZEJ5dGVzKGJ5dGVzKTsKKyAgICB9CisgIH0KKworICB2
b2lkIE9wZW4oKSB7CisgICAgYXNzZXJ0KGRiXyA9PSBOVUxMKTsKKyAgICBPcHRpb25zIG9wdGlv
bnM7CisgICAgb3B0aW9ucy5jcmVhdGVfaWZfbWlzc2luZyA9ICFGTEFHU191c2VfZXhpc3Rpbmdf
ZGI7CisgICAgb3B0aW9ucy5ibG9ja19jYWNoZSA9IGNhY2hlXzsKKyAgICBvcHRpb25zLndyaXRl
X2J1ZmZlcl9zaXplID0gRkxBR1Nfd3JpdGVfYnVmZmVyX3NpemU7CisgICAgb3B0aW9ucy5tYXhf
b3Blbl9maWxlcyA9IEZMQUdTX29wZW5fZmlsZXM7CisgICAgb3B0aW9ucy5maWx0ZXJfcG9saWN5
ID0gZmlsdGVyX3BvbGljeV87CisgICAgU3RhdHVzIHMgPSBEQjo6T3BlbihvcHRpb25zLCBGTEFH
U19kYiwgJmRiXyk7CisgICAgaWYgKCFzLm9rKCkpIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAi
b3BlbiBlcnJvcjogJXNcbiIsIHMuVG9TdHJpbmcoKS5jX3N0cigpKTsKKyAgICAgIGV4aXQoMSk7
CisgICAgfQorICB9CisKKyAgdm9pZCBXcml0ZVNlcShUaHJlYWRTdGF0ZSogdGhyZWFkKSB7Cisg
ICAgRG9Xcml0ZSh0aHJlYWQsIHRydWUpOworICB9CisKKyAgdm9pZCBXcml0ZVJhbmRvbShUaHJl
YWRTdGF0ZSogdGhyZWFkKSB7CisgICAgRG9Xcml0ZSh0aHJlYWQsIGZhbHNlKTsKKyAgfQorCisg
IHZvaWQgRG9Xcml0ZShUaHJlYWRTdGF0ZSogdGhyZWFkLCBib29sIHNlcSkgeworICAgIGlmIChu
dW1fICE9IEZMQUdTX251bSkgeworICAgICAgY2hhciBtc2dbMTAwXTsKKyAgICAgIHNucHJpbnRm
KG1zZywgc2l6ZW9mKG1zZyksICIoJWQgb3BzKSIsIG51bV8pOworICAgICAgdGhyZWFkLT5zdGF0
cy5BZGRNZXNzYWdlKG1zZyk7CisgICAgfQorCisgICAgUmFuZG9tR2VuZXJhdG9yIGdlbjsKKyAg
ICBXcml0ZUJhdGNoIGJhdGNoOworICAgIFN0YXR1cyBzOworICAgIGludDY0X3QgYnl0ZXMgPSAw
OworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtXzsgaSArPSBlbnRyaWVzX3Blcl9iYXRjaF8p
IHsKKyAgICAgIGJhdGNoLkNsZWFyKCk7CisgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGVudHJp
ZXNfcGVyX2JhdGNoXzsgaisrKSB7CisgICAgICAgIGNvbnN0IGludCBrID0gc2VxID8gaStqIDog
KHRocmVhZC0+cmFuZC5OZXh0KCkgJSBGTEFHU19udW0pOworICAgICAgICBjaGFyIGtleVsxMDBd
OworICAgICAgICBzbnByaW50ZihrZXksIHNpemVvZihrZXkpLCAiJTAxNmQiLCBrKTsKKyAgICAg
ICAgYmF0Y2guUHV0KGtleSwgZ2VuLkdlbmVyYXRlKHZhbHVlX3NpemVfKSk7CisgICAgICAgIGJ5
dGVzICs9IHZhbHVlX3NpemVfICsgc3RybGVuKGtleSk7CisgICAgICAgIHRocmVhZC0+c3RhdHMu
RmluaXNoZWRTaW5nbGVPcCgpOworICAgICAgfQorICAgICAgcyA9IGRiXy0+V3JpdGUod3JpdGVf
b3B0aW9uc18sICZiYXRjaCk7CisgICAgICBpZiAoIXMub2soKSkgeworICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgInB1dCBlcnJvcjogJXNcbiIsIHMuVG9TdHJpbmcoKS5jX3N0cigpKTsKKyAgICAg
ICAgZXhpdCgxKTsKKyAgICAgIH0KKyAgICB9CisgICAgdGhyZWFkLT5zdGF0cy5BZGRCeXRlcyhi
eXRlcyk7CisgIH0KKworICB2b2lkIFJlYWRTZXF1ZW50aWFsKFRocmVhZFN0YXRlKiB0aHJlYWQp
IHsKKyAgICBJdGVyYXRvciogaXRlciA9IGRiXy0+TmV3SXRlcmF0b3IoUmVhZE9wdGlvbnMoKSk7
CisgICAgaW50IGkgPSAwOworICAgIGludDY0X3QgYnl0ZXMgPSAwOworICAgIGZvciAoaXRlci0+
U2Vla1RvRmlyc3QoKTsgaSA8IHJlYWRzXyAmJiBpdGVyLT5WYWxpZCgpOyBpdGVyLT5OZXh0KCkp
IHsKKyAgICAgIGJ5dGVzICs9IGl0ZXItPmtleSgpLnNpemUoKSArIGl0ZXItPnZhbHVlKCkuc2l6
ZSgpOworICAgICAgdGhyZWFkLT5zdGF0cy5GaW5pc2hlZFNpbmdsZU9wKCk7CisgICAgICArK2k7
CisgICAgfQorICAgIGRlbGV0ZSBpdGVyOworICAgIHRocmVhZC0+c3RhdHMuQWRkQnl0ZXMoYnl0
ZXMpOworICB9CisKKyAgdm9pZCBSZWFkUmV2ZXJzZShUaHJlYWRTdGF0ZSogdGhyZWFkKSB7Cisg
ICAgSXRlcmF0b3IqIGl0ZXIgPSBkYl8tPk5ld0l0ZXJhdG9yKFJlYWRPcHRpb25zKCkpOworICAg
IGludCBpID0gMDsKKyAgICBpbnQ2NF90IGJ5dGVzID0gMDsKKyAgICBmb3IgKGl0ZXItPlNlZWtU
b0xhc3QoKTsgaSA8IHJlYWRzXyAmJiBpdGVyLT5WYWxpZCgpOyBpdGVyLT5QcmV2KCkpIHsKKyAg
ICAgIGJ5dGVzICs9IGl0ZXItPmtleSgpLnNpemUoKSArIGl0ZXItPnZhbHVlKCkuc2l6ZSgpOwor
ICAgICAgdGhyZWFkLT5zdGF0cy5GaW5pc2hlZFNpbmdsZU9wKCk7CisgICAgICArK2k7CisgICAg
fQorICAgIGRlbGV0ZSBpdGVyOworICAgIHRocmVhZC0+c3RhdHMuQWRkQnl0ZXMoYnl0ZXMpOwor
ICB9CisKKyAgdm9pZCBSZWFkUmFuZG9tKFRocmVhZFN0YXRlKiB0aHJlYWQpIHsKKyAgICBSZWFk
T3B0aW9ucyBvcHRpb25zOworICAgIHN0ZDo6c3RyaW5nIHZhbHVlOworICAgIGludCBmb3VuZCA9
IDA7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWFkc187IGkrKykgeworICAgICAgY2hhciBr
ZXlbMTAwXTsKKyAgICAgIGNvbnN0IGludCBrID0gdGhyZWFkLT5yYW5kLk5leHQoKSAlIEZMQUdT
X251bTsKKyAgICAgIHNucHJpbnRmKGtleSwgc2l6ZW9mKGtleSksICIlMDE2ZCIsIGspOworICAg
ICAgaWYgKGRiXy0+R2V0KG9wdGlvbnMsIGtleSwgJnZhbHVlKS5vaygpKSB7CisgICAgICAgIGZv
dW5kKys7CisgICAgICB9CisgICAgICB0aHJlYWQtPnN0YXRzLkZpbmlzaGVkU2luZ2xlT3AoKTsK
KyAgICB9CisgICAgY2hhciBtc2dbMTAwXTsKKyAgICBzbnByaW50Zihtc2csIHNpemVvZihtc2cp
LCAiKCVkIG9mICVkIGZvdW5kKSIsIGZvdW5kLCBudW1fKTsKKyAgICB0aHJlYWQtPnN0YXRzLkFk
ZE1lc3NhZ2UobXNnKTsKKyAgfQorCisgIHZvaWQgUmVhZE1pc3NpbmcoVGhyZWFkU3RhdGUqIHRo
cmVhZCkgeworICAgIFJlYWRPcHRpb25zIG9wdGlvbnM7CisgICAgc3RkOjpzdHJpbmcgdmFsdWU7
CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWFkc187IGkrKykgeworICAgICAgY2hhciBrZXlb
MTAwXTsKKyAgICAgIGNvbnN0IGludCBrID0gdGhyZWFkLT5yYW5kLk5leHQoKSAlIEZMQUdTX251
bTsKKyAgICAgIHNucHJpbnRmKGtleSwgc2l6ZW9mKGtleSksICIlMDE2ZC4iLCBrKTsKKyAgICAg
IGRiXy0+R2V0KG9wdGlvbnMsIGtleSwgJnZhbHVlKTsKKyAgICAgIHRocmVhZC0+c3RhdHMuRmlu
aXNoZWRTaW5nbGVPcCgpOworICAgIH0KKyAgfQorCisgIHZvaWQgUmVhZEhvdChUaHJlYWRTdGF0
ZSogdGhyZWFkKSB7CisgICAgUmVhZE9wdGlvbnMgb3B0aW9uczsKKyAgICBzdGQ6OnN0cmluZyB2
YWx1ZTsKKyAgICBjb25zdCBpbnQgcmFuZ2UgPSAoRkxBR1NfbnVtICsgOTkpIC8gMTAwOworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgcmVhZHNfOyBpKyspIHsKKyAgICAgIGNoYXIga2V5WzEwMF07
CisgICAgICBjb25zdCBpbnQgayA9IHRocmVhZC0+cmFuZC5OZXh0KCkgJSByYW5nZTsKKyAgICAg
IHNucHJpbnRmKGtleSwgc2l6ZW9mKGtleSksICIlMDE2ZCIsIGspOworICAgICAgZGJfLT5HZXQo
b3B0aW9ucywga2V5LCAmdmFsdWUpOworICAgICAgdGhyZWFkLT5zdGF0cy5GaW5pc2hlZFNpbmds
ZU9wKCk7CisgICAgfQorICB9CisKKyAgdm9pZCBTZWVrUmFuZG9tKFRocmVhZFN0YXRlKiB0aHJl
YWQpIHsKKyAgICBSZWFkT3B0aW9ucyBvcHRpb25zOworICAgIHN0ZDo6c3RyaW5nIHZhbHVlOwor
ICAgIGludCBmb3VuZCA9IDA7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWFkc187IGkrKykg
eworICAgICAgSXRlcmF0b3IqIGl0ZXIgPSBkYl8tPk5ld0l0ZXJhdG9yKG9wdGlvbnMpOworICAg
ICAgY2hhciBrZXlbMTAwXTsKKyAgICAgIGNvbnN0IGludCBrID0gdGhyZWFkLT5yYW5kLk5leHQo
KSAlIEZMQUdTX251bTsKKyAgICAgIHNucHJpbnRmKGtleSwgc2l6ZW9mKGtleSksICIlMDE2ZCIs
IGspOworICAgICAgaXRlci0+U2VlayhrZXkpOworICAgICAgaWYgKGl0ZXItPlZhbGlkKCkgJiYg
aXRlci0+a2V5KCkgPT0ga2V5KSBmb3VuZCsrOworICAgICAgZGVsZXRlIGl0ZXI7CisgICAgICB0
aHJlYWQtPnN0YXRzLkZpbmlzaGVkU2luZ2xlT3AoKTsKKyAgICB9CisgICAgY2hhciBtc2dbMTAw
XTsKKyAgICBzbnByaW50Zihtc2csIHNpemVvZihtc2cpLCAiKCVkIG9mICVkIGZvdW5kKSIsIGZv
dW5kLCBudW1fKTsKKyAgICB0aHJlYWQtPnN0YXRzLkFkZE1lc3NhZ2UobXNnKTsKKyAgfQorCisg
IHZvaWQgRG9EZWxldGUoVGhyZWFkU3RhdGUqIHRocmVhZCwgYm9vbCBzZXEpIHsKKyAgICBSYW5k
b21HZW5lcmF0b3IgZ2VuOworICAgIFdyaXRlQmF0Y2ggYmF0Y2g7CisgICAgU3RhdHVzIHM7Cisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1fOyBpICs9IGVudHJpZXNfcGVyX2JhdGNoXykgewor
ICAgICAgYmF0Y2guQ2xlYXIoKTsKKyAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZW50cmllc19w
ZXJfYmF0Y2hfOyBqKyspIHsKKyAgICAgICAgY29uc3QgaW50IGsgPSBzZXEgPyBpK2ogOiAodGhy
ZWFkLT5yYW5kLk5leHQoKSAlIEZMQUdTX251bSk7CisgICAgICAgIGNoYXIga2V5WzEwMF07Cisg
ICAgICAgIHNucHJpbnRmKGtleSwgc2l6ZW9mKGtleSksICIlMDE2ZCIsIGspOworICAgICAgICBi
YXRjaC5EZWxldGUoa2V5KTsKKyAgICAgICAgdGhyZWFkLT5zdGF0cy5GaW5pc2hlZFNpbmdsZU9w
KCk7CisgICAgICB9CisgICAgICBzID0gZGJfLT5Xcml0ZSh3cml0ZV9vcHRpb25zXywgJmJhdGNo
KTsKKyAgICAgIGlmICghcy5vaygpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZGVsIGVy
cm9yOiAlc1xuIiwgcy5Ub1N0cmluZygpLmNfc3RyKCkpOworICAgICAgICBleGl0KDEpOworICAg
ICAgfQorICAgIH0KKyAgfQorCisgIHZvaWQgRGVsZXRlU2VxKFRocmVhZFN0YXRlKiB0aHJlYWQp
IHsKKyAgICBEb0RlbGV0ZSh0aHJlYWQsIHRydWUpOworICB9CisKKyAgdm9pZCBEZWxldGVSYW5k
b20oVGhyZWFkU3RhdGUqIHRocmVhZCkgeworICAgIERvRGVsZXRlKHRocmVhZCwgZmFsc2UpOwor
ICB9CisKKyAgdm9pZCBSZWFkV2hpbGVXcml0aW5nKFRocmVhZFN0YXRlKiB0aHJlYWQpIHsKKyAg
ICBpZiAodGhyZWFkLT50aWQgPiAwKSB7CisgICAgICBSZWFkUmFuZG9tKHRocmVhZCk7CisgICAg
fSBlbHNlIHsKKyAgICAgIC8vIFNwZWNpYWwgdGhyZWFkIHRoYXQga2VlcHMgd3JpdGluZyB1bnRp
bCBvdGhlciB0aHJlYWRzIGFyZSBkb25lLgorICAgICAgUmFuZG9tR2VuZXJhdG9yIGdlbjsKKyAg
ICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIHsKKyAgICAgICAgICBNdXRleExvY2sgbCgmdGhy
ZWFkLT5zaGFyZWQtPm11KTsKKyAgICAgICAgICBpZiAodGhyZWFkLT5zaGFyZWQtPm51bV9kb25l
ICsgMSA+PSB0aHJlYWQtPnNoYXJlZC0+bnVtX2luaXRpYWxpemVkKSB7CisgICAgICAgICAgICAv
LyBPdGhlciB0aHJlYWRzIGhhdmUgZmluaXNoZWQKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IGludCBrID0gdGhyZWFkLT5yYW5kLk5l
eHQoKSAlIEZMQUdTX251bTsKKyAgICAgICAgY2hhciBrZXlbMTAwXTsKKyAgICAgICAgc25wcmlu
dGYoa2V5LCBzaXplb2Yoa2V5KSwgIiUwMTZkIiwgayk7CisgICAgICAgIFN0YXR1cyBzID0gZGJf
LT5QdXQod3JpdGVfb3B0aW9uc18sIGtleSwgZ2VuLkdlbmVyYXRlKHZhbHVlX3NpemVfKSk7Cisg
ICAgICAgIGlmICghcy5vaygpKSB7CisgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJwdXQgZXJy
b3I6ICVzXG4iLCBzLlRvU3RyaW5nKCkuY19zdHIoKSk7CisgICAgICAgICAgZXhpdCgxKTsKKyAg
ICAgICAgfQorICAgICAgfQorCisgICAgICAvLyBEbyBub3QgY291bnQgYW55IG9mIHRoZSBwcmVj
ZWRpbmcgd29yay9kZWxheSBpbiBzdGF0cy4KKyAgICAgIHRocmVhZC0+c3RhdHMuU3RhcnQoKTsK
KyAgICB9CisgIH0KKworICB2b2lkIENvbXBhY3QoVGhyZWFkU3RhdGUqIHRocmVhZCkgeworICAg
IGRiXy0+Q29tcGFjdFJhbmdlKE5VTEwsIE5VTEwpOworICB9CisKKyAgdm9pZCBQcmludFN0YXRz
KGNvbnN0IGNoYXIqIGtleSkgeworICAgIHN0ZDo6c3RyaW5nIHN0YXRzOworICAgIGlmICghZGJf
LT5HZXRQcm9wZXJ0eShrZXksICZzdGF0cykpIHsKKyAgICAgIHN0YXRzID0gIihmYWlsZWQpIjsK
KyAgICB9CisgICAgZnByaW50ZihzdGRvdXQsICJcbiVzXG4iLCBzdGF0cy5jX3N0cigpKTsKKyAg
fQorCisgIHN0YXRpYyB2b2lkIFdyaXRlVG9GaWxlKHZvaWQqIGFyZywgY29uc3QgY2hhciogYnVm
LCBpbnQgbikgeworICAgIHJlaW50ZXJwcmV0X2Nhc3Q8V3JpdGFibGVGaWxlKj4oYXJnKS0+QXBw
ZW5kKFNsaWNlKGJ1ZiwgbikpOworICB9CisKKyAgdm9pZCBIZWFwUHJvZmlsZSgpIHsKKyAgICBj
aGFyIGZuYW1lWzEwMF07CisgICAgc25wcmludGYoZm5hbWUsIHNpemVvZihmbmFtZSksICIlcy9o
ZWFwLSUwNGQiLCBGTEFHU19kYiwgKytoZWFwX2NvdW50ZXJfKTsKKyAgICBXcml0YWJsZUZpbGUq
IGZpbGU7CisgICAgU3RhdHVzIHMgPSBFbnY6OkRlZmF1bHQoKS0+TmV3V3JpdGFibGVGaWxlKGZu
YW1lLCAmZmlsZSk7CisgICAgaWYgKCFzLm9rKCkpIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAi
JXNcbiIsIHMuVG9TdHJpbmcoKS5jX3N0cigpKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAg
Ym9vbCBvayA9IHBvcnQ6OkdldEhlYXBQcm9maWxlKFdyaXRlVG9GaWxlLCBmaWxlKTsKKyAgICBk
ZWxldGUgZmlsZTsKKyAgICBpZiAoIW9rKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgImhlYXAg
cHJvZmlsaW5nIG5vdCBzdXBwb3J0ZWRcbiIpOworICAgICAgRW52OjpEZWZhdWx0KCktPkRlbGV0
ZUZpbGUoZm5hbWUpOworICAgIH0KKyAgfQorfTsKKworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIK
KworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KSB7CisgIEZMQUdTX3dyaXRlX2J1ZmZl
cl9zaXplID0gbGV2ZWxkYjo6T3B0aW9ucygpLndyaXRlX2J1ZmZlcl9zaXplOworICBGTEFHU19v
cGVuX2ZpbGVzID0gbGV2ZWxkYjo6T3B0aW9ucygpLm1heF9vcGVuX2ZpbGVzOworICBzdGQ6OnN0
cmluZyBkZWZhdWx0X2RiX3BhdGg7CisKKyAgZm9yIChpbnQgaSA9IDE7IGkgPCBhcmdjOyBpKysp
IHsKKyAgICBkb3VibGUgZDsKKyAgICBpbnQgbjsKKyAgICBjaGFyIGp1bms7CisgICAgaWYgKGxl
dmVsZGI6OlNsaWNlKGFyZ3ZbaV0pLnN0YXJ0c193aXRoKCItLWJlbmNobWFya3M9IikpIHsKKyAg
ICAgIEZMQUdTX2JlbmNobWFya3MgPSBhcmd2W2ldICsgc3RybGVuKCItLWJlbmNobWFya3M9Iik7
CisgICAgfSBlbHNlIGlmIChzc2NhbmYoYXJndltpXSwgIi0tY29tcHJlc3Npb25fcmF0aW89JWxm
JWMiLCAmZCwgJmp1bmspID09IDEpIHsKKyAgICAgIEZMQUdTX2NvbXByZXNzaW9uX3JhdGlvID0g
ZDsKKyAgICB9IGVsc2UgaWYgKHNzY2FuZihhcmd2W2ldLCAiLS1oaXN0b2dyYW09JWQlYyIsICZu
LCAmanVuaykgPT0gMSAmJgorICAgICAgICAgICAgICAgKG4gPT0gMCB8fCBuID09IDEpKSB7Cisg
ICAgICBGTEFHU19oaXN0b2dyYW0gPSBuOworICAgIH0gZWxzZSBpZiAoc3NjYW5mKGFyZ3ZbaV0s
ICItLXVzZV9leGlzdGluZ19kYj0lZCVjIiwgJm4sICZqdW5rKSA9PSAxICYmCisgICAgICAgICAg
ICAgICAobiA9PSAwIHx8IG4gPT0gMSkpIHsKKyAgICAgIEZMQUdTX3VzZV9leGlzdGluZ19kYiA9
IG47CisgICAgfSBlbHNlIGlmIChzc2NhbmYoYXJndltpXSwgIi0tbnVtPSVkJWMiLCAmbiwgJmp1
bmspID09IDEpIHsKKyAgICAgIEZMQUdTX251bSA9IG47CisgICAgfSBlbHNlIGlmIChzc2NhbmYo
YXJndltpXSwgIi0tcmVhZHM9JWQlYyIsICZuLCAmanVuaykgPT0gMSkgeworICAgICAgRkxBR1Nf
cmVhZHMgPSBuOworICAgIH0gZWxzZSBpZiAoc3NjYW5mKGFyZ3ZbaV0sICItLXRocmVhZHM9JWQl
YyIsICZuLCAmanVuaykgPT0gMSkgeworICAgICAgRkxBR1NfdGhyZWFkcyA9IG47CisgICAgfSBl
bHNlIGlmIChzc2NhbmYoYXJndltpXSwgIi0tdmFsdWVfc2l6ZT0lZCVjIiwgJm4sICZqdW5rKSA9
PSAxKSB7CisgICAgICBGTEFHU192YWx1ZV9zaXplID0gbjsKKyAgICB9IGVsc2UgaWYgKHNzY2Fu
Zihhcmd2W2ldLCAiLS13cml0ZV9idWZmZXJfc2l6ZT0lZCVjIiwgJm4sICZqdW5rKSA9PSAxKSB7
CisgICAgICBGTEFHU193cml0ZV9idWZmZXJfc2l6ZSA9IG47CisgICAgfSBlbHNlIGlmIChzc2Nh
bmYoYXJndltpXSwgIi0tY2FjaGVfc2l6ZT0lZCVjIiwgJm4sICZqdW5rKSA9PSAxKSB7CisgICAg
ICBGTEFHU19jYWNoZV9zaXplID0gbjsKKyAgICB9IGVsc2UgaWYgKHNzY2FuZihhcmd2W2ldLCAi
LS1ibG9vbV9iaXRzPSVkJWMiLCAmbiwgJmp1bmspID09IDEpIHsKKyAgICAgIEZMQUdTX2Jsb29t
X2JpdHMgPSBuOworICAgIH0gZWxzZSBpZiAoc3NjYW5mKGFyZ3ZbaV0sICItLW9wZW5fZmlsZXM9
JWQlYyIsICZuLCAmanVuaykgPT0gMSkgeworICAgICAgRkxBR1Nfb3Blbl9maWxlcyA9IG47Cisg
ICAgfSBlbHNlIGlmIChzdHJuY21wKGFyZ3ZbaV0sICItLWRiPSIsIDUpID09IDApIHsKKyAgICAg
IEZMQUdTX2RiID0gYXJndltpXSArIDU7CisgICAgfSBlbHNlIHsKKyAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiSW52YWxpZCBmbGFnICclcydcbiIsIGFyZ3ZbaV0pOworICAgICAgZXhpdCgxKTsKKyAg
ICB9CisgIH0KKworICAvLyBDaG9vc2UgYSBsb2NhdGlvbiBmb3IgdGhlIHRlc3QgZGF0YWJhc2Ug
aWYgbm9uZSBnaXZlbiB3aXRoIC0tZGI9PHBhdGg+CisgIGlmIChGTEFHU19kYiA9PSBOVUxMKSB7
CisgICAgICBsZXZlbGRiOjpFbnY6OkRlZmF1bHQoKS0+R2V0VGVzdERpcmVjdG9yeSgmZGVmYXVs
dF9kYl9wYXRoKTsKKyAgICAgIGRlZmF1bHRfZGJfcGF0aCArPSAiL2RiYmVuY2giOworICAgICAg
RkxBR1NfZGIgPSBkZWZhdWx0X2RiX3BhdGguY19zdHIoKTsKKyAgfQorCisgIGxldmVsZGI6OkJl
bmNobWFyayBiZW5jaG1hcms7CisgIGJlbmNobWFyay5SdW4oKTsKKyAgcmV0dXJuIDA7Cit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2RiX2ltcGwuY2MgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2RiX2ltcGwuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzlkZTE2OWYy
OWY2Y2FkMTEyZjg0MjcwMDZiYjdiYTAzOTFjYjI5ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvZGJfaW1wbC5jYwpAQCAtMCwwICsxLDE0NjcgQEAKKy8v
IENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2Vl
IHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2luY2x1ZGUg
ImRiL2RiX2ltcGwuaCIKKworI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxzZXQ+Cisj
aW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+
CisjaW5jbHVkZSA8dmVjdG9yPgorI2luY2x1ZGUgImRiL2J1aWxkZXIuaCIKKyNpbmNsdWRlICJk
Yi9kYl9pdGVyLmgiCisjaW5jbHVkZSAiZGIvZGJmb3JtYXQuaCIKKyNpbmNsdWRlICJkYi9maWxl
bmFtZS5oIgorI2luY2x1ZGUgImRiL2xvZ19yZWFkZXIuaCIKKyNpbmNsdWRlICJkYi9sb2dfd3Jp
dGVyLmgiCisjaW5jbHVkZSAiZGIvbWVtdGFibGUuaCIKKyNpbmNsdWRlICJkYi90YWJsZV9jYWNo
ZS5oIgorI2luY2x1ZGUgImRiL3ZlcnNpb25fc2V0LmgiCisjaW5jbHVkZSAiZGIvd3JpdGVfYmF0
Y2hfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJsZXZlbGRiL2RiLmgiCisjaW5jbHVkZSAibGV2ZWxk
Yi9lbnYuaCIKKyNpbmNsdWRlICJsZXZlbGRiL3N0YXR1cy5oIgorI2luY2x1ZGUgImxldmVsZGIv
dGFibGUuaCIKKyNpbmNsdWRlICJsZXZlbGRiL3RhYmxlX2J1aWxkZXIuaCIKKyNpbmNsdWRlICJw
b3J0L3BvcnQuaCIKKyNpbmNsdWRlICJ0YWJsZS9ibG9jay5oIgorI2luY2x1ZGUgInRhYmxlL21l
cmdlci5oIgorI2luY2x1ZGUgInRhYmxlL3R3b19sZXZlbF9pdGVyYXRvci5oIgorI2luY2x1ZGUg
InV0aWwvY29kaW5nLmgiCisjaW5jbHVkZSAidXRpbC9sb2dnaW5nLmgiCisjaW5jbHVkZSAidXRp
bC9tdXRleGxvY2suaCIKKworbmFtZXNwYWNlIGxldmVsZGIgeworCisvLyBJbmZvcm1hdGlvbiBr
ZXB0IGZvciBldmVyeSB3YWl0aW5nIHdyaXRlcgorc3RydWN0IERCSW1wbDo6V3JpdGVyIHsKKyAg
U3RhdHVzIHN0YXR1czsKKyAgV3JpdGVCYXRjaCogYmF0Y2g7CisgIGJvb2wgc3luYzsKKyAgYm9v
bCBkb25lOworICBwb3J0OjpDb25kVmFyIGN2OworCisgIGV4cGxpY2l0IFdyaXRlcihwb3J0OjpN
dXRleCogbXUpIDogY3YobXUpIHsgfQorfTsKKworc3RydWN0IERCSW1wbDo6Q29tcGFjdGlvblN0
YXRlIHsKKyAgQ29tcGFjdGlvbiogY29uc3QgY29tcGFjdGlvbjsKKworICAvLyBTZXF1ZW5jZSBu
dW1iZXJzIDwgc21hbGxlc3Rfc25hcHNob3QgYXJlIG5vdCBzaWduaWZpY2FudCBzaW5jZSB3ZQor
ICAvLyB3aWxsIG5ldmVyIGhhdmUgdG8gc2VydmljZSBhIHNuYXBzaG90IGJlbG93IHNtYWxsZXN0
X3NuYXBzaG90LgorICAvLyBUaGVyZWZvcmUgaWYgd2UgaGF2ZSBzZWVuIGEgc2VxdWVuY2UgbnVt
YmVyIFMgPD0gc21hbGxlc3Rfc25hcHNob3QsCisgIC8vIHdlIGNhbiBkcm9wIGFsbCBlbnRyaWVz
IGZvciB0aGUgc2FtZSBrZXkgd2l0aCBzZXF1ZW5jZSBudW1iZXJzIDwgUy4KKyAgU2VxdWVuY2VO
dW1iZXIgc21hbGxlc3Rfc25hcHNob3Q7CisKKyAgLy8gRmlsZXMgcHJvZHVjZWQgYnkgY29tcGFj
dGlvbgorICBzdHJ1Y3QgT3V0cHV0IHsKKyAgICB1aW50NjRfdCBudW1iZXI7CisgICAgdWludDY0
X3QgZmlsZV9zaXplOworICAgIEludGVybmFsS2V5IHNtYWxsZXN0LCBsYXJnZXN0OworICB9Owor
ICBzdGQ6OnZlY3RvcjxPdXRwdXQ+IG91dHB1dHM7CisKKyAgLy8gU3RhdGUga2VwdCBmb3Igb3V0
cHV0IGJlaW5nIGdlbmVyYXRlZAorICBXcml0YWJsZUZpbGUqIG91dGZpbGU7CisgIFRhYmxlQnVp
bGRlciogYnVpbGRlcjsKKworICB1aW50NjRfdCB0b3RhbF9ieXRlczsKKworICBPdXRwdXQqIGN1
cnJlbnRfb3V0cHV0KCkgeyByZXR1cm4gJm91dHB1dHNbb3V0cHV0cy5zaXplKCktMV07IH0KKwor
ICBleHBsaWNpdCBDb21wYWN0aW9uU3RhdGUoQ29tcGFjdGlvbiogYykKKyAgICAgIDogY29tcGFj
dGlvbihjKSwKKyAgICAgICAgb3V0ZmlsZShOVUxMKSwKKyAgICAgICAgYnVpbGRlcihOVUxMKSwK
KyAgICAgICAgdG90YWxfYnl0ZXMoMCkgeworICB9Cit9OworCisvLyBGaXggdXNlci1zdXBwbGll
ZCBvcHRpb25zIHRvIGJlIHJlYXNvbmFibGUKK3RlbXBsYXRlIDxjbGFzcyBULGNsYXNzIFY+Citz
dGF0aWMgdm9pZCBDbGlwVG9SYW5nZShUKiBwdHIsIFYgbWludmFsdWUsIFYgbWF4dmFsdWUpIHsK
KyAgaWYgKHN0YXRpY19jYXN0PFY+KCpwdHIpID4gbWF4dmFsdWUpICpwdHIgPSBtYXh2YWx1ZTsK
KyAgaWYgKHN0YXRpY19jYXN0PFY+KCpwdHIpIDwgbWludmFsdWUpICpwdHIgPSBtaW52YWx1ZTsK
K30KK09wdGlvbnMgU2FuaXRpemVPcHRpb25zKGNvbnN0IHN0ZDo6c3RyaW5nJiBkYm5hbWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRlcm5hbEtleUNvbXBhcmF0b3IqIGljbXAs
CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRlcm5hbEZpbHRlclBvbGljeSogaXBv
bGljeSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE9wdGlvbnMmIHNyYykgeworICBP
cHRpb25zIHJlc3VsdCA9IHNyYzsKKyAgcmVzdWx0LmNvbXBhcmF0b3IgPSBpY21wOworICByZXN1
bHQuZmlsdGVyX3BvbGljeSA9IChzcmMuZmlsdGVyX3BvbGljeSAhPSBOVUxMKSA/IGlwb2xpY3kg
OiBOVUxMOworICBDbGlwVG9SYW5nZSgmcmVzdWx0Lm1heF9vcGVuX2ZpbGVzLCAgICAgICAgICAg
IDIwLCAgICAgNTAwMDApOworICBDbGlwVG9SYW5nZSgmcmVzdWx0LndyaXRlX2J1ZmZlcl9zaXpl
LCAgICAgICAgIDY0PDwxMCwgMTw8MzApOworICBDbGlwVG9SYW5nZSgmcmVzdWx0LmJsb2NrX3Np
emUsICAgICAgICAgICAgICAgIDE8PDEwLCAgNDw8MjApOworICBpZiAocmVzdWx0LmluZm9fbG9n
ID09IE5VTEwpIHsKKyAgICAvLyBPcGVuIGEgbG9nIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5
IGFzIHRoZSBkYgorICAgIHNyYy5lbnYtPkNyZWF0ZURpcihkYm5hbWUpOyAgLy8gSW4gY2FzZSBp
dCBkb2VzIG5vdCBleGlzdAorICAgIHNyYy5lbnYtPlJlbmFtZUZpbGUoSW5mb0xvZ0ZpbGVOYW1l
KGRibmFtZSksIE9sZEluZm9Mb2dGaWxlTmFtZShkYm5hbWUpKTsKKyAgICBTdGF0dXMgcyA9IHNy
Yy5lbnYtPk5ld0xvZ2dlcihJbmZvTG9nRmlsZU5hbWUoZGJuYW1lKSwgJnJlc3VsdC5pbmZvX2xv
Zyk7CisgICAgaWYgKCFzLm9rKCkpIHsKKyAgICAgIC8vIE5vIHBsYWNlIHN1aXRhYmxlIGZvciBs
b2dnaW5nCisgICAgICByZXN1bHQuaW5mb19sb2cgPSBOVUxMOworICAgIH0KKyAgfQorICBpZiAo
cmVzdWx0LmJsb2NrX2NhY2hlID09IE5VTEwpIHsKKyAgICByZXN1bHQuYmxvY2tfY2FjaGUgPSBO
ZXdMUlVDYWNoZSg4IDw8IDIwKTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCitEQkltcGw6
OkRCSW1wbChjb25zdCBPcHRpb25zJiBvcHRpb25zLCBjb25zdCBzdGQ6OnN0cmluZyYgZGJuYW1l
KQorICAgIDogZW52XyhvcHRpb25zLmVudiksCisgICAgICBpbnRlcm5hbF9jb21wYXJhdG9yXyhv
cHRpb25zLmNvbXBhcmF0b3IpLAorICAgICAgaW50ZXJuYWxfZmlsdGVyX3BvbGljeV8ob3B0aW9u
cy5maWx0ZXJfcG9saWN5KSwKKyAgICAgIG9wdGlvbnNfKFNhbml0aXplT3B0aW9ucygKKyAgICAg
ICAgICBkYm5hbWUsICZpbnRlcm5hbF9jb21wYXJhdG9yXywgJmludGVybmFsX2ZpbHRlcl9wb2xp
Y3lfLCBvcHRpb25zKSksCisgICAgICBvd25zX2luZm9fbG9nXyhvcHRpb25zXy5pbmZvX2xvZyAh
PSBvcHRpb25zLmluZm9fbG9nKSwKKyAgICAgIG93bnNfY2FjaGVfKG9wdGlvbnNfLmJsb2NrX2Nh
Y2hlICE9IG9wdGlvbnMuYmxvY2tfY2FjaGUpLAorICAgICAgZGJuYW1lXyhkYm5hbWUpLAorICAg
ICAgZGJfbG9ja18oTlVMTCksCisgICAgICBzaHV0dGluZ19kb3duXyhOVUxMKSwKKyAgICAgIGJn
X2N2XygmbXV0ZXhfKSwKKyAgICAgIG1lbV8obmV3IE1lbVRhYmxlKGludGVybmFsX2NvbXBhcmF0
b3JfKSksCisgICAgICBpbW1fKE5VTEwpLAorICAgICAgbG9nZmlsZV8oTlVMTCksCisgICAgICBs
b2dmaWxlX251bWJlcl8oMCksCisgICAgICBsb2dfKE5VTEwpLAorICAgICAgdG1wX2JhdGNoXyhu
ZXcgV3JpdGVCYXRjaCksCisgICAgICBiZ19jb21wYWN0aW9uX3NjaGVkdWxlZF8oZmFsc2UpLAor
ICAgICAgbWFudWFsX2NvbXBhY3Rpb25fKE5VTEwpIHsKKyAgbWVtXy0+UmVmKCk7CisgIGhhc19p
bW1fLlJlbGVhc2VfU3RvcmUoTlVMTCk7CisKKyAgLy8gUmVzZXJ2ZSB0ZW4gZmlsZXMgb3Igc28g
Zm9yIG90aGVyIHVzZXMgYW5kIGdpdmUgdGhlIHJlc3QgdG8gVGFibGVDYWNoZS4KKyAgY29uc3Qg
aW50IHRhYmxlX2NhY2hlX3NpemUgPSBvcHRpb25zLm1heF9vcGVuX2ZpbGVzIC0gMTA7CisgIHRh
YmxlX2NhY2hlXyA9IG5ldyBUYWJsZUNhY2hlKGRibmFtZV8sICZvcHRpb25zXywgdGFibGVfY2Fj
aGVfc2l6ZSk7CisKKyAgdmVyc2lvbnNfID0gbmV3IFZlcnNpb25TZXQoZGJuYW1lXywgJm9wdGlv
bnNfLCB0YWJsZV9jYWNoZV8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbnRlcm5h
bF9jb21wYXJhdG9yXyk7Cit9CisKK0RCSW1wbDo6fkRCSW1wbCgpIHsKKyAgLy8gV2FpdCBmb3Ig
YmFja2dyb3VuZCB3b3JrIHRvIGZpbmlzaAorICBtdXRleF8uTG9jaygpOworICBzaHV0dGluZ19k
b3duXy5SZWxlYXNlX1N0b3JlKHRoaXMpOyAgLy8gQW55IG5vbi1OVUxMIHZhbHVlIGlzIG9rCisg
IHdoaWxlIChiZ19jb21wYWN0aW9uX3NjaGVkdWxlZF8pIHsKKyAgICBiZ19jdl8uV2FpdCgpOwor
ICB9CisgIG11dGV4Xy5VbmxvY2soKTsKKworICBpZiAoZGJfbG9ja18gIT0gTlVMTCkgeworICAg
IGVudl8tPlVubG9ja0ZpbGUoZGJfbG9ja18pOworICB9CisKKyAgZGVsZXRlIHZlcnNpb25zXzsK
KyAgaWYgKG1lbV8gIT0gTlVMTCkgbWVtXy0+VW5yZWYoKTsKKyAgaWYgKGltbV8gIT0gTlVMTCkg
aW1tXy0+VW5yZWYoKTsKKyAgZGVsZXRlIHRtcF9iYXRjaF87CisgIGRlbGV0ZSBsb2dfOworICBk
ZWxldGUgbG9nZmlsZV87CisgIGRlbGV0ZSB0YWJsZV9jYWNoZV87CisKKyAgaWYgKG93bnNfaW5m
b19sb2dfKSB7CisgICAgZGVsZXRlIG9wdGlvbnNfLmluZm9fbG9nOworICB9CisgIGlmIChvd25z
X2NhY2hlXykgeworICAgIGRlbGV0ZSBvcHRpb25zXy5ibG9ja19jYWNoZTsKKyAgfQorfQorCitT
dGF0dXMgREJJbXBsOjpOZXdEQigpIHsKKyAgVmVyc2lvbkVkaXQgbmV3X2RiOworICBuZXdfZGIu
U2V0Q29tcGFyYXRvck5hbWUodXNlcl9jb21wYXJhdG9yKCktPk5hbWUoKSk7CisgIG5ld19kYi5T
ZXRMb2dOdW1iZXIoMCk7CisgIG5ld19kYi5TZXROZXh0RmlsZSgyKTsKKyAgbmV3X2RiLlNldExh
c3RTZXF1ZW5jZSgwKTsKKworICBjb25zdCBzdGQ6OnN0cmluZyBtYW5pZmVzdCA9IERlc2NyaXB0
b3JGaWxlTmFtZShkYm5hbWVfLCAxKTsKKyAgV3JpdGFibGVGaWxlKiBmaWxlOworICBTdGF0dXMg
cyA9IGVudl8tPk5ld1dyaXRhYmxlRmlsZShtYW5pZmVzdCwgJmZpbGUpOworICBpZiAoIXMub2so
KSkgeworICAgIHJldHVybiBzOworICB9CisgIHsKKyAgICBsb2c6OldyaXRlciBsb2coZmlsZSk7
CisgICAgc3RkOjpzdHJpbmcgcmVjb3JkOworICAgIG5ld19kYi5FbmNvZGVUbygmcmVjb3JkKTsK
KyAgICBzID0gbG9nLkFkZFJlY29yZChyZWNvcmQpOworICAgIGlmIChzLm9rKCkpIHsKKyAgICAg
IHMgPSBmaWxlLT5DbG9zZSgpOworICAgIH0KKyAgfQorICBkZWxldGUgZmlsZTsKKyAgaWYgKHMu
b2soKSkgeworICAgIC8vIE1ha2UgIkNVUlJFTlQiIGZpbGUgdGhhdCBwb2ludHMgdG8gdGhlIG5l
dyBtYW5pZmVzdCBmaWxlLgorICAgIHMgPSBTZXRDdXJyZW50RmlsZShlbnZfLCBkYm5hbWVfLCAx
KTsKKyAgfSBlbHNlIHsKKyAgICBlbnZfLT5EZWxldGVGaWxlKG1hbmlmZXN0KTsKKyAgfQorICBy
ZXR1cm4gczsKK30KKwordm9pZCBEQkltcGw6Ok1heWJlSWdub3JlRXJyb3IoU3RhdHVzKiBzKSBj
b25zdCB7CisgIGlmIChzLT5vaygpIHx8IG9wdGlvbnNfLnBhcmFub2lkX2NoZWNrcykgeworICAg
IC8vIE5vIGNoYW5nZSBuZWVkZWQKKyAgfSBlbHNlIHsKKyAgICBMb2cob3B0aW9uc18uaW5mb19s
b2csICJJZ25vcmluZyBlcnJvciAlcyIsIHMtPlRvU3RyaW5nKCkuY19zdHIoKSk7CisgICAgKnMg
PSBTdGF0dXM6Ok9LKCk7CisgIH0KK30KKwordm9pZCBEQkltcGw6OkRlbGV0ZU9ic29sZXRlRmls
ZXMoKSB7CisgIC8vIE1ha2UgYSBzZXQgb2YgYWxsIG9mIHRoZSBsaXZlIGZpbGVzCisgIHN0ZDo6
c2V0PHVpbnQ2NF90PiBsaXZlID0gcGVuZGluZ19vdXRwdXRzXzsKKyAgdmVyc2lvbnNfLT5BZGRM
aXZlRmlsZXMoJmxpdmUpOworCisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBmaWxlbmFtZXM7
CisgIGVudl8tPkdldENoaWxkcmVuKGRibmFtZV8sICZmaWxlbmFtZXMpOyAvLyBJZ25vcmluZyBl
cnJvcnMgb24gcHVycG9zZQorICB1aW50NjRfdCBudW1iZXI7CisgIEZpbGVUeXBlIHR5cGU7Cisg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsZW5hbWVzLnNpemUoKTsgaSsrKSB7CisgICAgaWYg
KFBhcnNlRmlsZU5hbWUoZmlsZW5hbWVzW2ldLCAmbnVtYmVyLCAmdHlwZSkpIHsKKyAgICAgIGJv
b2wga2VlcCA9IHRydWU7CisgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBrTG9n
RmlsZToKKyAgICAgICAgICBrZWVwID0gKChudW1iZXIgPj0gdmVyc2lvbnNfLT5Mb2dOdW1iZXIo
KSkgfHwKKyAgICAgICAgICAgICAgICAgIChudW1iZXIgPT0gdmVyc2lvbnNfLT5QcmV2TG9nTnVt
YmVyKCkpKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrRGVzY3JpcHRvckZpbGU6
CisgICAgICAgICAgLy8gS2VlcCBteSBtYW5pZmVzdCBmaWxlLCBhbmQgYW55IG5ld2VyIGluY2Fy
bmF0aW9ucycKKyAgICAgICAgICAvLyAoaW4gY2FzZSB0aGVyZSBpcyBhIHJhY2UgdGhhdCBhbGxv
d3Mgb3RoZXIgaW5jYXJuYXRpb25zKQorICAgICAgICAgIGtlZXAgPSAobnVtYmVyID49IHZlcnNp
b25zXy0+TWFuaWZlc3RGaWxlTnVtYmVyKCkpOworICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIGtUYWJsZUZpbGU6CisgICAgICAgICAga2VlcCA9IChsaXZlLmZpbmQobnVtYmVyKSAhPSBs
aXZlLmVuZCgpKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBrVGVtcEZpbGU6Cisg
ICAgICAgICAgLy8gQW55IHRlbXAgZmlsZXMgdGhhdCBhcmUgY3VycmVudGx5IGJlaW5nIHdyaXR0
ZW4gdG8gbXVzdAorICAgICAgICAgIC8vIGJlIHJlY29yZGVkIGluIHBlbmRpbmdfb3V0cHV0c18s
IHdoaWNoIGlzIGluc2VydGVkIGludG8gImxpdmUiCisgICAgICAgICAga2VlcCA9IChsaXZlLmZp
bmQobnVtYmVyKSAhPSBsaXZlLmVuZCgpKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBrQ3VycmVudEZpbGU6CisgICAgICAgIGNhc2Uga0RCTG9ja0ZpbGU6CisgICAgICAgIGNhc2Ug
a0luZm9Mb2dGaWxlOgorICAgICAgICAgIGtlZXAgPSB0cnVlOworICAgICAgICAgIGJyZWFrOwor
ICAgICAgfQorCisgICAgICBpZiAoIWtlZXApIHsKKyAgICAgICAgaWYgKHR5cGUgPT0ga1RhYmxl
RmlsZSkgeworICAgICAgICAgIHRhYmxlX2NhY2hlXy0+RXZpY3QobnVtYmVyKTsKKyAgICAgICAg
fQorICAgICAgICBMb2cob3B0aW9uc18uaW5mb19sb2csICJEZWxldGUgdHlwZT0lZCAjJWxsZFxu
IiwKKyAgICAgICAgICAgIGludCh0eXBlKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2ln
bmVkIGxvbmcgbG9uZz4obnVtYmVyKSk7CisgICAgICAgIGVudl8tPkRlbGV0ZUZpbGUoZGJuYW1l
XyArICIvIiArIGZpbGVuYW1lc1tpXSk7CisgICAgICB9CisgICAgfQorICB9Cit9CisKK1N0YXR1
cyBEQkltcGw6OlJlY292ZXIoVmVyc2lvbkVkaXQqIGVkaXQpIHsKKyAgbXV0ZXhfLkFzc2VydEhl
bGQoKTsKKworICAvLyBJZ25vcmUgZXJyb3IgZnJvbSBDcmVhdGVEaXIgc2luY2UgdGhlIGNyZWF0
aW9uIG9mIHRoZSBEQiBpcworICAvLyBjb21taXR0ZWQgb25seSB3aGVuIHRoZSBkZXNjcmlwdG9y
IGlzIGNyZWF0ZWQsIGFuZCB0aGlzIGRpcmVjdG9yeQorICAvLyBtYXkgYWxyZWFkeSBleGlzdCBm
cm9tIGEgcHJldmlvdXMgZmFpbGVkIGNyZWF0aW9uIGF0dGVtcHQuCisgIGVudl8tPkNyZWF0ZURp
cihkYm5hbWVfKTsKKyAgYXNzZXJ0KGRiX2xvY2tfID09IE5VTEwpOworICBTdGF0dXMgcyA9IGVu
dl8tPkxvY2tGaWxlKExvY2tGaWxlTmFtZShkYm5hbWVfKSwgJmRiX2xvY2tfKTsKKyAgaWYgKCFz
Lm9rKCkpIHsKKyAgICByZXR1cm4gczsKKyAgfQorCisgIGlmICghZW52Xy0+RmlsZUV4aXN0cyhD
dXJyZW50RmlsZU5hbWUoZGJuYW1lXykpKSB7CisgICAgaWYgKG9wdGlvbnNfLmNyZWF0ZV9pZl9t
aXNzaW5nKSB7CisgICAgICBzID0gTmV3REIoKTsKKyAgICAgIGlmICghcy5vaygpKSB7CisgICAg
ICAgIHJldHVybiBzOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gU3RhdHVz
OjpJbnZhbGlkQXJndW1lbnQoCisgICAgICAgICAgZGJuYW1lXywgImRvZXMgbm90IGV4aXN0IChj
cmVhdGVfaWZfbWlzc2luZyBpcyBmYWxzZSkiKTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgaWYg
KG9wdGlvbnNfLmVycm9yX2lmX2V4aXN0cykgeworICAgICAgcmV0dXJuIFN0YXR1czo6SW52YWxp
ZEFyZ3VtZW50KAorICAgICAgICAgIGRibmFtZV8sICJleGlzdHMgKGVycm9yX2lmX2V4aXN0cyBp
cyB0cnVlKSIpOworICAgIH0KKyAgfQorCisgIHMgPSB2ZXJzaW9uc18tPlJlY292ZXIoKTsKKyAg
aWYgKHMub2soKSkgeworICAgIFNlcXVlbmNlTnVtYmVyIG1heF9zZXF1ZW5jZSgwKTsKKworICAg
IC8vIFJlY292ZXIgZnJvbSBhbGwgbmV3ZXIgbG9nIGZpbGVzIHRoYW4gdGhlIG9uZXMgbmFtZWQg
aW4gdGhlCisgICAgLy8gZGVzY3JpcHRvciAobmV3IGxvZyBmaWxlcyBtYXkgaGF2ZSBiZWVuIGFk
ZGVkIGJ5IHRoZSBwcmV2aW91cworICAgIC8vIGluY2FybmF0aW9uIHdpdGhvdXQgcmVnaXN0ZXJp
bmcgdGhlbSBpbiB0aGUgZGVzY3JpcHRvcikuCisgICAgLy8KKyAgICAvLyBOb3RlIHRoYXQgUHJl
dkxvZ051bWJlcigpIGlzIG5vIGxvbmdlciB1c2VkLCBidXQgd2UgcGF5CisgICAgLy8gYXR0ZW50
aW9uIHRvIGl0IGluIGNhc2Ugd2UgYXJlIHJlY292ZXJpbmcgYSBkYXRhYmFzZQorICAgIC8vIHBy
b2R1Y2VkIGJ5IGFuIG9sZGVyIHZlcnNpb24gb2YgbGV2ZWxkYi4KKyAgICBjb25zdCB1aW50NjRf
dCBtaW5fbG9nID0gdmVyc2lvbnNfLT5Mb2dOdW1iZXIoKTsKKyAgICBjb25zdCB1aW50NjRfdCBw
cmV2X2xvZyA9IHZlcnNpb25zXy0+UHJldkxvZ051bWJlcigpOworICAgIHN0ZDo6dmVjdG9yPHN0
ZDo6c3RyaW5nPiBmaWxlbmFtZXM7CisgICAgcyA9IGVudl8tPkdldENoaWxkcmVuKGRibmFtZV8s
ICZmaWxlbmFtZXMpOworICAgIGlmICghcy5vaygpKSB7CisgICAgICByZXR1cm4gczsKKyAgICB9
CisgICAgdWludDY0X3QgbnVtYmVyOworICAgIEZpbGVUeXBlIHR5cGU7CisgICAgc3RkOjp2ZWN0
b3I8dWludDY0X3Q+IGxvZ3M7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxlbmFtZXMu
c2l6ZSgpOyBpKyspIHsKKyAgICAgIGlmIChQYXJzZUZpbGVOYW1lKGZpbGVuYW1lc1tpXSwgJm51
bWJlciwgJnR5cGUpCisgICAgICAgICAgJiYgdHlwZSA9PSBrTG9nRmlsZQorICAgICAgICAgICYm
ICgobnVtYmVyID49IG1pbl9sb2cpIHx8IChudW1iZXIgPT0gcHJldl9sb2cpKSkgeworICAgICAg
ICBsb2dzLnB1c2hfYmFjayhudW1iZXIpOworICAgICAgfQorICAgIH0KKworICAgIC8vIFJlY292
ZXIgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZSBsb2dzIHdlcmUgZ2VuZXJhdGVkCisgICAgc3Rk
Ojpzb3J0KGxvZ3MuYmVnaW4oKSwgbG9ncy5lbmQoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBsb2dzLnNpemUoKTsgaSsrKSB7CisgICAgICBzID0gUmVjb3ZlckxvZ0ZpbGUobG9nc1tp
XSwgZWRpdCwgJm1heF9zZXF1ZW5jZSk7CisKKyAgICAgIC8vIFRoZSBwcmV2aW91cyBpbmNhcm5h
dGlvbiBtYXkgbm90IGhhdmUgd3JpdHRlbiBhbnkgTUFOSUZFU1QKKyAgICAgIC8vIHJlY29yZHMg
YWZ0ZXIgYWxsb2NhdGluZyB0aGlzIGxvZyBudW1iZXIuICBTbyB3ZSBtYW51YWxseQorICAgICAg
Ly8gdXBkYXRlIHRoZSBmaWxlIG51bWJlciBhbGxvY2F0aW9uIGNvdW50ZXIgaW4gVmVyc2lvblNl
dC4KKyAgICAgIHZlcnNpb25zXy0+TWFya0ZpbGVOdW1iZXJVc2VkKGxvZ3NbaV0pOworICAgIH0K
KworICAgIGlmIChzLm9rKCkpIHsKKyAgICAgIGlmICh2ZXJzaW9uc18tPkxhc3RTZXF1ZW5jZSgp
IDwgbWF4X3NlcXVlbmNlKSB7CisgICAgICAgIHZlcnNpb25zXy0+U2V0TGFzdFNlcXVlbmNlKG1h
eF9zZXF1ZW5jZSk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIHM7Cit9CisKK1N0
YXR1cyBEQkltcGw6OlJlY292ZXJMb2dGaWxlKHVpbnQ2NF90IGxvZ19udW1iZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uRWRpdCogZWRpdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFNlcXVlbmNlTnVtYmVyKiBtYXhfc2VxdWVuY2UpIHsKKyAgc3RydWN0
IExvZ1JlcG9ydGVyIDogcHVibGljIGxvZzo6UmVhZGVyOjpSZXBvcnRlciB7CisgICAgRW52KiBl
bnY7CisgICAgTG9nZ2VyKiBpbmZvX2xvZzsKKyAgICBjb25zdCBjaGFyKiBmbmFtZTsKKyAgICBT
dGF0dXMqIHN0YXR1czsgIC8vIE5VTEwgaWYgb3B0aW9uc18ucGFyYW5vaWRfY2hlY2tzPT1mYWxz
ZQorICAgIHZpcnR1YWwgdm9pZCBDb3JydXB0aW9uKHNpemVfdCBieXRlcywgY29uc3QgU3RhdHVz
JiBzKSB7CisgICAgICBMb2coaW5mb19sb2csICIlcyVzOiBkcm9wcGluZyAlZCBieXRlczsgJXMi
LAorICAgICAgICAgICh0aGlzLT5zdGF0dXMgPT0gTlVMTCA/ICIoaWdub3JpbmcgZXJyb3IpICIg
OiAiIiksCisgICAgICAgICAgZm5hbWUsIHN0YXRpY19jYXN0PGludD4oYnl0ZXMpLCBzLlRvU3Ry
aW5nKCkuY19zdHIoKSk7CisgICAgICBpZiAodGhpcy0+c3RhdHVzICE9IE5VTEwgJiYgdGhpcy0+
c3RhdHVzLT5vaygpKSAqdGhpcy0+c3RhdHVzID0gczsKKyAgICB9CisgIH07CisKKyAgbXV0ZXhf
LkFzc2VydEhlbGQoKTsKKworICAvLyBPcGVuIHRoZSBsb2cgZmlsZQorICBzdGQ6OnN0cmluZyBm
bmFtZSA9IExvZ0ZpbGVOYW1lKGRibmFtZV8sIGxvZ19udW1iZXIpOworICBTZXF1ZW50aWFsRmls
ZSogZmlsZTsKKyAgU3RhdHVzIHN0YXR1cyA9IGVudl8tPk5ld1NlcXVlbnRpYWxGaWxlKGZuYW1l
LCAmZmlsZSk7CisgIGlmICghc3RhdHVzLm9rKCkpIHsKKyAgICBNYXliZUlnbm9yZUVycm9yKCZz
dGF0dXMpOworICAgIHJldHVybiBzdGF0dXM7CisgIH0KKworICAvLyBDcmVhdGUgdGhlIGxvZyBy
ZWFkZXIuCisgIExvZ1JlcG9ydGVyIHJlcG9ydGVyOworICByZXBvcnRlci5lbnYgPSBlbnZfOwor
ICByZXBvcnRlci5pbmZvX2xvZyA9IG9wdGlvbnNfLmluZm9fbG9nOworICByZXBvcnRlci5mbmFt
ZSA9IGZuYW1lLmNfc3RyKCk7CisgIHJlcG9ydGVyLnN0YXR1cyA9IChvcHRpb25zXy5wYXJhbm9p
ZF9jaGVja3MgPyAmc3RhdHVzIDogTlVMTCk7CisgIC8vIFdlIGludGVudGlhbGx5IG1ha2UgbG9n
OjpSZWFkZXIgZG8gY2hlY2tzdW1taW5nIGV2ZW4gaWYKKyAgLy8gcGFyYW5vaWRfY2hlY2tzPT1m
YWxzZSBzbyB0aGF0IGNvcnJ1cHRpb25zIGNhdXNlIGVudGlyZSBjb21taXRzCisgIC8vIHRvIGJl
IHNraXBwZWQgaW5zdGVhZCBvZiBwcm9wYWdhdGluZyBiYWQgaW5mb3JtYXRpb24gKGxpa2Ugb3Zl
cmx5CisgIC8vIGxhcmdlIHNlcXVlbmNlIG51bWJlcnMpLgorICBsb2c6OlJlYWRlciByZWFkZXIo
ZmlsZSwgJnJlcG9ydGVyLCB0cnVlLypjaGVja3N1bSovLAorICAgICAgICAgICAgICAgICAgICAg
MC8qaW5pdGlhbF9vZmZzZXQqLyk7CisgIExvZyhvcHRpb25zXy5pbmZvX2xvZywgIlJlY292ZXJp
bmcgbG9nICMlbGx1IiwKKyAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGxvZ19udW1iZXIpOwor
CisgIC8vIFJlYWQgYWxsIHRoZSByZWNvcmRzIGFuZCBhZGQgdG8gYSBtZW10YWJsZQorICBzdGQ6
OnN0cmluZyBzY3JhdGNoOworICBTbGljZSByZWNvcmQ7CisgIFdyaXRlQmF0Y2ggYmF0Y2g7Cisg
IE1lbVRhYmxlKiBtZW0gPSBOVUxMOworICB3aGlsZSAocmVhZGVyLlJlYWRSZWNvcmQoJnJlY29y
ZCwgJnNjcmF0Y2gpICYmCisgICAgICAgICBzdGF0dXMub2soKSkgeworICAgIGlmIChyZWNvcmQu
c2l6ZSgpIDwgMTIpIHsKKyAgICAgIHJlcG9ydGVyLkNvcnJ1cHRpb24oCisgICAgICAgICAgcmVj
b3JkLnNpemUoKSwgU3RhdHVzOjpDb3JydXB0aW9uKCJsb2cgcmVjb3JkIHRvbyBzbWFsbCIpKTsK
KyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICBXcml0ZUJhdGNoSW50ZXJuYWw6OlNldENvbnRl
bnRzKCZiYXRjaCwgcmVjb3JkKTsKKworICAgIGlmIChtZW0gPT0gTlVMTCkgeworICAgICAgbWVt
ID0gbmV3IE1lbVRhYmxlKGludGVybmFsX2NvbXBhcmF0b3JfKTsKKyAgICAgIG1lbS0+UmVmKCk7
CisgICAgfQorICAgIHN0YXR1cyA9IFdyaXRlQmF0Y2hJbnRlcm5hbDo6SW5zZXJ0SW50bygmYmF0
Y2gsIG1lbSk7CisgICAgTWF5YmVJZ25vcmVFcnJvcigmc3RhdHVzKTsKKyAgICBpZiAoIXN0YXR1
cy5vaygpKSB7CisgICAgICBicmVhazsKKyAgICB9CisgICAgY29uc3QgU2VxdWVuY2VOdW1iZXIg
bGFzdF9zZXEgPQorICAgICAgICBXcml0ZUJhdGNoSW50ZXJuYWw6OlNlcXVlbmNlKCZiYXRjaCkg
KworICAgICAgICBXcml0ZUJhdGNoSW50ZXJuYWw6OkNvdW50KCZiYXRjaCkgLSAxOworICAgIGlm
IChsYXN0X3NlcSA+ICptYXhfc2VxdWVuY2UpIHsKKyAgICAgICptYXhfc2VxdWVuY2UgPSBsYXN0
X3NlcTsKKyAgICB9CisKKyAgICBpZiAobWVtLT5BcHByb3hpbWF0ZU1lbW9yeVVzYWdlKCkgPiBv
cHRpb25zXy53cml0ZV9idWZmZXJfc2l6ZSkgeworICAgICAgc3RhdHVzID0gV3JpdGVMZXZlbDBU
YWJsZShtZW0sIGVkaXQsIE5VTEwpOworICAgICAgaWYgKCFzdGF0dXMub2soKSkgeworICAgICAg
ICAvLyBSZWZsZWN0IGVycm9ycyBpbW1lZGlhdGVseSBzbyB0aGF0IGNvbmRpdGlvbnMgbGlrZSBm
dWxsCisgICAgICAgIC8vIGZpbGUtc3lzdGVtcyBjYXVzZSB0aGUgREI6Ok9wZW4oKSB0byBmYWls
LgorICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIG1lbS0+VW5yZWYoKTsKKyAgICAgIG1l
bSA9IE5VTEw7CisgICAgfQorICB9CisKKyAgaWYgKHN0YXR1cy5vaygpICYmIG1lbSAhPSBOVUxM
KSB7CisgICAgc3RhdHVzID0gV3JpdGVMZXZlbDBUYWJsZShtZW0sIGVkaXQsIE5VTEwpOworICAg
IC8vIFJlZmxlY3QgZXJyb3JzIGltbWVkaWF0ZWx5IHNvIHRoYXQgY29uZGl0aW9ucyBsaWtlIGZ1
bGwKKyAgICAvLyBmaWxlLXN5c3RlbXMgY2F1c2UgdGhlIERCOjpPcGVuKCkgdG8gZmFpbC4KKyAg
fQorCisgIGlmIChtZW0gIT0gTlVMTCkgbWVtLT5VbnJlZigpOworICBkZWxldGUgZmlsZTsKKyAg
cmV0dXJuIHN0YXR1czsKK30KKworU3RhdHVzIERCSW1wbDo6V3JpdGVMZXZlbDBUYWJsZShNZW1U
YWJsZSogbWVtLCBWZXJzaW9uRWRpdCogZWRpdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVmVyc2lvbiogYmFzZSkgeworICBtdXRleF8uQXNzZXJ0SGVsZCgpOworICBjb25zdCB1
aW50NjRfdCBzdGFydF9taWNyb3MgPSBlbnZfLT5Ob3dNaWNyb3MoKTsKKyAgRmlsZU1ldGFEYXRh
IG1ldGE7CisgIG1ldGEubnVtYmVyID0gdmVyc2lvbnNfLT5OZXdGaWxlTnVtYmVyKCk7CisgIHBl
bmRpbmdfb3V0cHV0c18uaW5zZXJ0KG1ldGEubnVtYmVyKTsKKyAgSXRlcmF0b3IqIGl0ZXIgPSBt
ZW0tPk5ld0l0ZXJhdG9yKCk7CisgIExvZyhvcHRpb25zXy5pbmZvX2xvZywgIkxldmVsLTAgdGFi
bGUgIyVsbHU6IHN0YXJ0ZWQiLAorICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgbWV0YS5udW1i
ZXIpOworCisgIFN0YXR1cyBzOworICB7CisgICAgbXV0ZXhfLlVubG9jaygpOworICAgIHMgPSBC
dWlsZFRhYmxlKGRibmFtZV8sIGVudl8sIG9wdGlvbnNfLCB0YWJsZV9jYWNoZV8sIGl0ZXIsICZt
ZXRhKTsKKyAgICBtdXRleF8uTG9jaygpOworICB9CisKKyAgTG9nKG9wdGlvbnNfLmluZm9fbG9n
LCAiTGV2ZWwtMCB0YWJsZSAjJWxsdTogJWxsZCBieXRlcyAlcyIsCisgICAgICAodW5zaWduZWQg
bG9uZyBsb25nKSBtZXRhLm51bWJlciwKKyAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIG1ldGEu
ZmlsZV9zaXplLAorICAgICAgcy5Ub1N0cmluZygpLmNfc3RyKCkpOworICBkZWxldGUgaXRlcjsK
KyAgcGVuZGluZ19vdXRwdXRzXy5lcmFzZShtZXRhLm51bWJlcik7CisKKworICAvLyBOb3RlIHRo
YXQgaWYgZmlsZV9zaXplIGlzIHplcm8sIHRoZSBmaWxlIGhhcyBiZWVuIGRlbGV0ZWQgYW5kCisg
IC8vIHNob3VsZCBub3QgYmUgYWRkZWQgdG8gdGhlIG1hbmlmZXN0LgorICBpbnQgbGV2ZWwgPSAw
OworICBpZiAocy5vaygpICYmIG1ldGEuZmlsZV9zaXplID4gMCkgeworICAgIGNvbnN0IFNsaWNl
IG1pbl91c2VyX2tleSA9IG1ldGEuc21hbGxlc3QudXNlcl9rZXkoKTsKKyAgICBjb25zdCBTbGlj
ZSBtYXhfdXNlcl9rZXkgPSBtZXRhLmxhcmdlc3QudXNlcl9rZXkoKTsKKyAgICBpZiAoYmFzZSAh
PSBOVUxMKSB7CisgICAgICBsZXZlbCA9IGJhc2UtPlBpY2tMZXZlbEZvck1lbVRhYmxlT3V0cHV0
KG1pbl91c2VyX2tleSwgbWF4X3VzZXJfa2V5KTsKKyAgICB9CisgICAgZWRpdC0+QWRkRmlsZShs
ZXZlbCwgbWV0YS5udW1iZXIsIG1ldGEuZmlsZV9zaXplLAorICAgICAgICAgICAgICAgICAgbWV0
YS5zbWFsbGVzdCwgbWV0YS5sYXJnZXN0KTsKKyAgfQorCisgIENvbXBhY3Rpb25TdGF0cyBzdGF0
czsKKyAgc3RhdHMubWljcm9zID0gZW52Xy0+Tm93TWljcm9zKCkgLSBzdGFydF9taWNyb3M7Cisg
IHN0YXRzLmJ5dGVzX3dyaXR0ZW4gPSBtZXRhLmZpbGVfc2l6ZTsKKyAgc3RhdHNfW2xldmVsXS5B
ZGQoc3RhdHMpOworICByZXR1cm4gczsKK30KKworU3RhdHVzIERCSW1wbDo6Q29tcGFjdE1lbVRh
YmxlKCkgeworICBtdXRleF8uQXNzZXJ0SGVsZCgpOworICBhc3NlcnQoaW1tXyAhPSBOVUxMKTsK
KworICAvLyBTYXZlIHRoZSBjb250ZW50cyBvZiB0aGUgbWVtdGFibGUgYXMgYSBuZXcgVGFibGUK
KyAgVmVyc2lvbkVkaXQgZWRpdDsKKyAgVmVyc2lvbiogYmFzZSA9IHZlcnNpb25zXy0+Y3VycmVu
dCgpOworICBiYXNlLT5SZWYoKTsKKyAgU3RhdHVzIHMgPSBXcml0ZUxldmVsMFRhYmxlKGltbV8s
ICZlZGl0LCBiYXNlKTsKKyAgYmFzZS0+VW5yZWYoKTsKKworICBpZiAocy5vaygpICYmIHNodXR0
aW5nX2Rvd25fLkFjcXVpcmVfTG9hZCgpKSB7CisgICAgcyA9IFN0YXR1czo6SU9FcnJvcigiRGVs
ZXRpbmcgREIgZHVyaW5nIG1lbXRhYmxlIGNvbXBhY3Rpb24iKTsKKyAgfQorCisgIC8vIFJlcGxh
Y2UgaW1tdXRhYmxlIG1lbXRhYmxlIHdpdGggdGhlIGdlbmVyYXRlZCBUYWJsZQorICBpZiAocy5v
aygpKSB7CisgICAgZWRpdC5TZXRQcmV2TG9nTnVtYmVyKDApOworICAgIGVkaXQuU2V0TG9nTnVt
YmVyKGxvZ2ZpbGVfbnVtYmVyXyk7ICAvLyBFYXJsaWVyIGxvZ3Mgbm8gbG9uZ2VyIG5lZWRlZAor
ICAgIHMgPSB2ZXJzaW9uc18tPkxvZ0FuZEFwcGx5KCZlZGl0LCAmbXV0ZXhfKTsKKyAgfQorCisg
IGlmIChzLm9rKCkpIHsKKyAgICAvLyBDb21taXQgdG8gdGhlIG5ldyBzdGF0ZQorICAgIGltbV8t
PlVucmVmKCk7CisgICAgaW1tXyA9IE5VTEw7CisgICAgaGFzX2ltbV8uUmVsZWFzZV9TdG9yZShO
VUxMKTsKKyAgICBEZWxldGVPYnNvbGV0ZUZpbGVzKCk7CisgIH0KKworICByZXR1cm4gczsKK30K
Kwordm9pZCBEQkltcGw6OkNvbXBhY3RSYW5nZShjb25zdCBTbGljZSogYmVnaW4sIGNvbnN0IFNs
aWNlKiBlbmQpIHsKKyAgaW50IG1heF9sZXZlbF93aXRoX2ZpbGVzID0gMTsKKyAgeworICAgIE11
dGV4TG9jayBsKCZtdXRleF8pOworICAgIFZlcnNpb24qIGJhc2UgPSB2ZXJzaW9uc18tPmN1cnJl
bnQoKTsKKyAgICBmb3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDwgY29uZmlnOjprTnVtTGV2ZWxz
OyBsZXZlbCsrKSB7CisgICAgICBpZiAoYmFzZS0+T3ZlcmxhcEluTGV2ZWwobGV2ZWwsIGJlZ2lu
LCBlbmQpKSB7CisgICAgICAgIG1heF9sZXZlbF93aXRoX2ZpbGVzID0gbGV2ZWw7CisgICAgICB9
CisgICAgfQorICB9CisgIFRFU1RfQ29tcGFjdE1lbVRhYmxlKCk7IC8vIFRPRE8oc2FuamF5KTog
U2tpcCBpZiBtZW10YWJsZSBkb2VzIG5vdCBvdmVybGFwCisgIGZvciAoaW50IGxldmVsID0gMDsg
bGV2ZWwgPCBtYXhfbGV2ZWxfd2l0aF9maWxlczsgbGV2ZWwrKykgeworICAgIFRFU1RfQ29tcGFj
dFJhbmdlKGxldmVsLCBiZWdpbiwgZW5kKTsKKyAgfQorfQorCit2b2lkIERCSW1wbDo6VEVTVF9D
b21wYWN0UmFuZ2UoaW50IGxldmVsLCBjb25zdCBTbGljZSogYmVnaW4sY29uc3QgU2xpY2UqIGVu
ZCkgeworICBhc3NlcnQobGV2ZWwgPj0gMCk7CisgIGFzc2VydChsZXZlbCArIDEgPCBjb25maWc6
OmtOdW1MZXZlbHMpOworCisgIEludGVybmFsS2V5IGJlZ2luX3N0b3JhZ2UsIGVuZF9zdG9yYWdl
OworCisgIE1hbnVhbENvbXBhY3Rpb24gbWFudWFsOworICBtYW51YWwubGV2ZWwgPSBsZXZlbDsK
KyAgbWFudWFsLmRvbmUgPSBmYWxzZTsKKyAgaWYgKGJlZ2luID09IE5VTEwpIHsKKyAgICBtYW51
YWwuYmVnaW4gPSBOVUxMOworICB9IGVsc2UgeworICAgIGJlZ2luX3N0b3JhZ2UgPSBJbnRlcm5h
bEtleSgqYmVnaW4sIGtNYXhTZXF1ZW5jZU51bWJlciwga1ZhbHVlVHlwZUZvclNlZWspOworICAg
IG1hbnVhbC5iZWdpbiA9ICZiZWdpbl9zdG9yYWdlOworICB9CisgIGlmIChlbmQgPT0gTlVMTCkg
eworICAgIG1hbnVhbC5lbmQgPSBOVUxMOworICB9IGVsc2UgeworICAgIGVuZF9zdG9yYWdlID0g
SW50ZXJuYWxLZXkoKmVuZCwgMCwgc3RhdGljX2Nhc3Q8VmFsdWVUeXBlPigwKSk7CisgICAgbWFu
dWFsLmVuZCA9ICZlbmRfc3RvcmFnZTsKKyAgfQorCisgIE11dGV4TG9jayBsKCZtdXRleF8pOwor
ICB3aGlsZSAoIW1hbnVhbC5kb25lKSB7CisgICAgd2hpbGUgKG1hbnVhbF9jb21wYWN0aW9uXyAh
PSBOVUxMKSB7CisgICAgICBiZ19jdl8uV2FpdCgpOworICAgIH0KKyAgICBtYW51YWxfY29tcGFj
dGlvbl8gPSAmbWFudWFsOworICAgIE1heWJlU2NoZWR1bGVDb21wYWN0aW9uKCk7CisgICAgd2hp
bGUgKG1hbnVhbF9jb21wYWN0aW9uXyA9PSAmbWFudWFsKSB7CisgICAgICBiZ19jdl8uV2FpdCgp
OworICAgIH0KKyAgfQorfQorCitTdGF0dXMgREJJbXBsOjpURVNUX0NvbXBhY3RNZW1UYWJsZSgp
IHsKKyAgLy8gTlVMTCBiYXRjaCBtZWFucyBqdXN0IHdhaXQgZm9yIGVhcmxpZXIgd3JpdGVzIHRv
IGJlIGRvbmUKKyAgU3RhdHVzIHMgPSBXcml0ZShXcml0ZU9wdGlvbnMoKSwgTlVMTCk7CisgIGlm
IChzLm9rKCkpIHsKKyAgICAvLyBXYWl0IHVudGlsIHRoZSBjb21wYWN0aW9uIGNvbXBsZXRlcwor
ICAgIE11dGV4TG9jayBsKCZtdXRleF8pOworICAgIHdoaWxlIChpbW1fICE9IE5VTEwgJiYgYmdf
ZXJyb3JfLm9rKCkpIHsKKyAgICAgIGJnX2N2Xy5XYWl0KCk7CisgICAgfQorICAgIGlmIChpbW1f
ICE9IE5VTEwpIHsKKyAgICAgIHMgPSBiZ19lcnJvcl87CisgICAgfQorICB9CisgIHJldHVybiBz
OworfQorCit2b2lkIERCSW1wbDo6TWF5YmVTY2hlZHVsZUNvbXBhY3Rpb24oKSB7CisgIG11dGV4
Xy5Bc3NlcnRIZWxkKCk7CisgIGlmIChiZ19jb21wYWN0aW9uX3NjaGVkdWxlZF8pIHsKKyAgICAv
LyBBbHJlYWR5IHNjaGVkdWxlZAorICB9IGVsc2UgaWYgKHNodXR0aW5nX2Rvd25fLkFjcXVpcmVf
TG9hZCgpKSB7CisgICAgLy8gREIgaXMgYmVpbmcgZGVsZXRlZDsgbm8gbW9yZSBiYWNrZ3JvdW5k
IGNvbXBhY3Rpb25zCisgIH0gZWxzZSBpZiAoaW1tXyA9PSBOVUxMICYmCisgICAgICAgICAgICAg
bWFudWFsX2NvbXBhY3Rpb25fID09IE5VTEwgJiYKKyAgICAgICAgICAgICAhdmVyc2lvbnNfLT5O
ZWVkc0NvbXBhY3Rpb24oKSkgeworICAgIC8vIE5vIHdvcmsgdG8gYmUgZG9uZQorICB9IGVsc2Ug
eworICAgIGJnX2NvbXBhY3Rpb25fc2NoZWR1bGVkXyA9IHRydWU7CisgICAgZW52Xy0+U2NoZWR1
bGUoJkRCSW1wbDo6QkdXb3JrLCB0aGlzKTsKKyAgfQorfQorCit2b2lkIERCSW1wbDo6QkdXb3Jr
KHZvaWQqIGRiKSB7CisgIHJlaW50ZXJwcmV0X2Nhc3Q8REJJbXBsKj4oZGIpLT5CYWNrZ3JvdW5k
Q2FsbCgpOworfQorCit2b2lkIERCSW1wbDo6QmFja2dyb3VuZENhbGwoKSB7CisgIE11dGV4TG9j
ayBsKCZtdXRleF8pOworICBhc3NlcnQoYmdfY29tcGFjdGlvbl9zY2hlZHVsZWRfKTsKKyAgaWYg
KCFzaHV0dGluZ19kb3duXy5BY3F1aXJlX0xvYWQoKSkgeworICAgIFN0YXR1cyBzID0gQmFja2dy
b3VuZENvbXBhY3Rpb24oKTsKKyAgICBpZiAocy5vaygpKSB7CisgICAgICAvLyBTdWNjZXNzCisg
ICAgfSBlbHNlIGlmIChzaHV0dGluZ19kb3duXy5BY3F1aXJlX0xvYWQoKSkgeworICAgICAgLy8g
RXJyb3IgbW9zdCBsaWtlbHkgZHVlIHRvIHNodXRkb3duOyBkbyBub3Qgd2FpdAorICAgIH0gZWxz
ZSB7CisgICAgICAvLyBXYWl0IGEgbGl0dGxlIGJpdCBiZWZvcmUgcmV0cnlpbmcgYmFja2dyb3Vu
ZCBjb21wYWN0aW9uIGluCisgICAgICAvLyBjYXNlIHRoaXMgaXMgYW4gZW52aXJvbm1lbnRhbCBw
cm9ibGVtIGFuZCB3ZSBkbyBub3Qgd2FudCB0bworICAgICAgLy8gY2hldyB1cCByZXNvdXJjZXMg
Zm9yIGZhaWxlZCBjb21wYWN0aW9ucyBmb3IgdGhlIGR1cmF0aW9uIG9mCisgICAgICAvLyB0aGUg
cHJvYmxlbS4KKyAgICAgIGJnX2N2Xy5TaWduYWxBbGwoKTsgIC8vIEluIGNhc2UgYSB3YWl0ZXIg
Y2FuIHByb2NlZWQgZGVzcGl0ZSB0aGUgZXJyb3IKKyAgICAgIExvZyhvcHRpb25zXy5pbmZvX2xv
ZywgIldhaXRpbmcgYWZ0ZXIgYmFja2dyb3VuZCBjb21wYWN0aW9uIGVycm9yOiAlcyIsCisgICAg
ICAgICAgcy5Ub1N0cmluZygpLmNfc3RyKCkpOworICAgICAgbXV0ZXhfLlVubG9jaygpOworICAg
ICAgZW52Xy0+U2xlZXBGb3JNaWNyb3NlY29uZHMoMTAwMDAwMCk7CisgICAgICBtdXRleF8uTG9j
aygpOworICAgIH0KKyAgfQorCisgIGJnX2NvbXBhY3Rpb25fc2NoZWR1bGVkXyA9IGZhbHNlOwor
CisgIC8vIFByZXZpb3VzIGNvbXBhY3Rpb24gbWF5IGhhdmUgcHJvZHVjZWQgdG9vIG1hbnkgZmls
ZXMgaW4gYSBsZXZlbCwKKyAgLy8gc28gcmVzY2hlZHVsZSBhbm90aGVyIGNvbXBhY3Rpb24gaWYg
bmVlZGVkLgorICBNYXliZVNjaGVkdWxlQ29tcGFjdGlvbigpOworICBiZ19jdl8uU2lnbmFsQWxs
KCk7Cit9CisKK1N0YXR1cyBEQkltcGw6OkJhY2tncm91bmRDb21wYWN0aW9uKCkgeworICBtdXRl
eF8uQXNzZXJ0SGVsZCgpOworCisgIGlmIChpbW1fICE9IE5VTEwpIHsKKyAgICByZXR1cm4gQ29t
cGFjdE1lbVRhYmxlKCk7CisgIH0KKworICBDb21wYWN0aW9uKiBjOworICBib29sIGlzX21hbnVh
bCA9IChtYW51YWxfY29tcGFjdGlvbl8gIT0gTlVMTCk7CisgIEludGVybmFsS2V5IG1hbnVhbF9l
bmQ7CisgIGlmIChpc19tYW51YWwpIHsKKyAgICBNYW51YWxDb21wYWN0aW9uKiBtID0gbWFudWFs
X2NvbXBhY3Rpb25fOworICAgIGMgPSB2ZXJzaW9uc18tPkNvbXBhY3RSYW5nZShtLT5sZXZlbCwg
bS0+YmVnaW4sIG0tPmVuZCk7CisgICAgbS0+ZG9uZSA9IChjID09IE5VTEwpOworICAgIGlmIChj
ICE9IE5VTEwpIHsKKyAgICAgIG1hbnVhbF9lbmQgPSBjLT5pbnB1dCgwLCBjLT5udW1faW5wdXRf
ZmlsZXMoMCkgLSAxKS0+bGFyZ2VzdDsKKyAgICB9CisgICAgTG9nKG9wdGlvbnNfLmluZm9fbG9n
LAorICAgICAgICAiTWFudWFsIGNvbXBhY3Rpb24gYXQgbGV2ZWwtJWQgZnJvbSAlcyAuLiAlczsg
d2lsbCBzdG9wIGF0ICVzXG4iLAorICAgICAgICBtLT5sZXZlbCwKKyAgICAgICAgKG0tPmJlZ2lu
ID8gbS0+YmVnaW4tPkRlYnVnU3RyaW5nKCkuY19zdHIoKSA6ICIoYmVnaW4pIiksCisgICAgICAg
IChtLT5lbmQgPyBtLT5lbmQtPkRlYnVnU3RyaW5nKCkuY19zdHIoKSA6ICIoZW5kKSIpLAorICAg
ICAgICAobS0+ZG9uZSA/ICIoZW5kKSIgOiBtYW51YWxfZW5kLkRlYnVnU3RyaW5nKCkuY19zdHIo
KSkpOworICB9IGVsc2UgeworICAgIGMgPSB2ZXJzaW9uc18tPlBpY2tDb21wYWN0aW9uKCk7Cisg
IH0KKworICBTdGF0dXMgc3RhdHVzOworICBpZiAoYyA9PSBOVUxMKSB7CisgICAgLy8gTm90aGlu
ZyB0byBkbworICB9IGVsc2UgaWYgKCFpc19tYW51YWwgJiYgYy0+SXNUcml2aWFsTW92ZSgpKSB7
CisgICAgLy8gTW92ZSBmaWxlIHRvIG5leHQgbGV2ZWwKKyAgICBhc3NlcnQoYy0+bnVtX2lucHV0
X2ZpbGVzKDApID09IDEpOworICAgIEZpbGVNZXRhRGF0YSogZiA9IGMtPmlucHV0KDAsIDApOwor
ICAgIGMtPmVkaXQoKS0+RGVsZXRlRmlsZShjLT5sZXZlbCgpLCBmLT5udW1iZXIpOworICAgIGMt
PmVkaXQoKS0+QWRkRmlsZShjLT5sZXZlbCgpICsgMSwgZi0+bnVtYmVyLCBmLT5maWxlX3NpemUs
CisgICAgICAgICAgICAgICAgICAgICAgIGYtPnNtYWxsZXN0LCBmLT5sYXJnZXN0KTsKKyAgICBz
dGF0dXMgPSB2ZXJzaW9uc18tPkxvZ0FuZEFwcGx5KGMtPmVkaXQoKSwgJm11dGV4Xyk7CisgICAg
VmVyc2lvblNldDo6TGV2ZWxTdW1tYXJ5U3RvcmFnZSB0bXA7CisgICAgTG9nKG9wdGlvbnNfLmlu
Zm9fbG9nLCAiTW92ZWQgIyVsbGQgdG8gbGV2ZWwtJWQgJWxsZCBieXRlcyAlczogJXNcbiIsCisg
ICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oZi0+bnVtYmVyKSwKKyAgICAg
ICAgYy0+bGV2ZWwoKSArIDEsCisgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9u
Zz4oZi0+ZmlsZV9zaXplKSwKKyAgICAgICAgc3RhdHVzLlRvU3RyaW5nKCkuY19zdHIoKSwKKyAg
ICAgICAgdmVyc2lvbnNfLT5MZXZlbFN1bW1hcnkoJnRtcCkpOworICB9IGVsc2UgeworICAgIENv
bXBhY3Rpb25TdGF0ZSogY29tcGFjdCA9IG5ldyBDb21wYWN0aW9uU3RhdGUoYyk7CisgICAgc3Rh
dHVzID0gRG9Db21wYWN0aW9uV29yayhjb21wYWN0KTsKKyAgICBDbGVhbnVwQ29tcGFjdGlvbihj
b21wYWN0KTsKKyAgICBjLT5SZWxlYXNlSW5wdXRzKCk7CisgICAgRGVsZXRlT2Jzb2xldGVGaWxl
cygpOworICB9CisgIGRlbGV0ZSBjOworCisgIGlmIChzdGF0dXMub2soKSkgeworICAgIC8vIERv
bmUKKyAgfSBlbHNlIGlmIChzaHV0dGluZ19kb3duXy5BY3F1aXJlX0xvYWQoKSkgeworICAgIC8v
IElnbm9yZSBjb21wYWN0aW9uIGVycm9ycyBmb3VuZCBkdXJpbmcgc2h1dHRpbmcgZG93bgorICB9
IGVsc2UgeworICAgIExvZyhvcHRpb25zXy5pbmZvX2xvZywKKyAgICAgICAgIkNvbXBhY3Rpb24g
ZXJyb3I6ICVzIiwgc3RhdHVzLlRvU3RyaW5nKCkuY19zdHIoKSk7CisgICAgaWYgKG9wdGlvbnNf
LnBhcmFub2lkX2NoZWNrcyAmJiBiZ19lcnJvcl8ub2soKSkgeworICAgICAgYmdfZXJyb3JfID0g
c3RhdHVzOworICAgIH0KKyAgfQorCisgIGlmIChpc19tYW51YWwpIHsKKyAgICBNYW51YWxDb21w
YWN0aW9uKiBtID0gbWFudWFsX2NvbXBhY3Rpb25fOworICAgIGlmICghc3RhdHVzLm9rKCkpIHsK
KyAgICAgIG0tPmRvbmUgPSB0cnVlOworICAgIH0KKyAgICBpZiAoIW0tPmRvbmUpIHsKKyAgICAg
IC8vIFdlIG9ubHkgY29tcGFjdGVkIHBhcnQgb2YgdGhlIHJlcXVlc3RlZCByYW5nZS4gIFVwZGF0
ZSAqbQorICAgICAgLy8gdG8gdGhlIHJhbmdlIHRoYXQgaXMgbGVmdCB0byBiZSBjb21wYWN0ZWQu
CisgICAgICBtLT50bXBfc3RvcmFnZSA9IG1hbnVhbF9lbmQ7CisgICAgICBtLT5iZWdpbiA9ICZt
LT50bXBfc3RvcmFnZTsKKyAgICB9CisgICAgbWFudWFsX2NvbXBhY3Rpb25fID0gTlVMTDsKKyAg
fQorICByZXR1cm4gc3RhdHVzOworfQorCit2b2lkIERCSW1wbDo6Q2xlYW51cENvbXBhY3Rpb24o
Q29tcGFjdGlvblN0YXRlKiBjb21wYWN0KSB7CisgIG11dGV4Xy5Bc3NlcnRIZWxkKCk7CisgIGlm
IChjb21wYWN0LT5idWlsZGVyICE9IE5VTEwpIHsKKyAgICAvLyBNYXkgaGFwcGVuIGlmIHdlIGdl
dCBhIHNodXRkb3duIGNhbGwgaW4gdGhlIG1pZGRsZSBvZiBjb21wYWN0aW9uCisgICAgY29tcGFj
dC0+YnVpbGRlci0+QWJhbmRvbigpOworICAgIGRlbGV0ZSBjb21wYWN0LT5idWlsZGVyOworICB9
IGVsc2UgeworICAgIGFzc2VydChjb21wYWN0LT5vdXRmaWxlID09IE5VTEwpOworICB9CisgIGRl
bGV0ZSBjb21wYWN0LT5vdXRmaWxlOworICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvbXBhY3Qt
Pm91dHB1dHMuc2l6ZSgpOyBpKyspIHsKKyAgICBjb25zdCBDb21wYWN0aW9uU3RhdGU6Ok91dHB1
dCYgb3V0ID0gY29tcGFjdC0+b3V0cHV0c1tpXTsKKyAgICBwZW5kaW5nX291dHB1dHNfLmVyYXNl
KG91dC5udW1iZXIpOworICB9CisgIGRlbGV0ZSBjb21wYWN0OworfQorCitTdGF0dXMgREJJbXBs
OjpPcGVuQ29tcGFjdGlvbk91dHB1dEZpbGUoQ29tcGFjdGlvblN0YXRlKiBjb21wYWN0KSB7Cisg
IGFzc2VydChjb21wYWN0ICE9IE5VTEwpOworICBhc3NlcnQoY29tcGFjdC0+YnVpbGRlciA9PSBO
VUxMKTsKKyAgdWludDY0X3QgZmlsZV9udW1iZXI7CisgIHsKKyAgICBtdXRleF8uTG9jaygpOwor
ICAgIGZpbGVfbnVtYmVyID0gdmVyc2lvbnNfLT5OZXdGaWxlTnVtYmVyKCk7CisgICAgcGVuZGlu
Z19vdXRwdXRzXy5pbnNlcnQoZmlsZV9udW1iZXIpOworICAgIENvbXBhY3Rpb25TdGF0ZTo6T3V0
cHV0IG91dDsKKyAgICBvdXQubnVtYmVyID0gZmlsZV9udW1iZXI7CisgICAgb3V0LnNtYWxsZXN0
LkNsZWFyKCk7CisgICAgb3V0Lmxhcmdlc3QuQ2xlYXIoKTsKKyAgICBjb21wYWN0LT5vdXRwdXRz
LnB1c2hfYmFjayhvdXQpOworICAgIG11dGV4Xy5VbmxvY2soKTsKKyAgfQorCisgIC8vIE1ha2Ug
dGhlIG91dHB1dCBmaWxlCisgIHN0ZDo6c3RyaW5nIGZuYW1lID0gVGFibGVGaWxlTmFtZShkYm5h
bWVfLCBmaWxlX251bWJlcik7CisgIFN0YXR1cyBzID0gZW52Xy0+TmV3V3JpdGFibGVGaWxlKGZu
YW1lLCAmY29tcGFjdC0+b3V0ZmlsZSk7CisgIGlmIChzLm9rKCkpIHsKKyAgICBjb21wYWN0LT5i
dWlsZGVyID0gbmV3IFRhYmxlQnVpbGRlcihvcHRpb25zXywgY29tcGFjdC0+b3V0ZmlsZSk7Cisg
IH0KKyAgcmV0dXJuIHM7Cit9CisKK1N0YXR1cyBEQkltcGw6OkZpbmlzaENvbXBhY3Rpb25PdXRw
dXRGaWxlKENvbXBhY3Rpb25TdGF0ZSogY29tcGFjdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEl0ZXJhdG9yKiBpbnB1dCkgeworICBhc3NlcnQoY29tcGFjdCAh
PSBOVUxMKTsKKyAgYXNzZXJ0KGNvbXBhY3QtPm91dGZpbGUgIT0gTlVMTCk7CisgIGFzc2VydChj
b21wYWN0LT5idWlsZGVyICE9IE5VTEwpOworCisgIGNvbnN0IHVpbnQ2NF90IG91dHB1dF9udW1i
ZXIgPSBjb21wYWN0LT5jdXJyZW50X291dHB1dCgpLT5udW1iZXI7CisgIGFzc2VydChvdXRwdXRf
bnVtYmVyICE9IDApOworCisgIC8vIENoZWNrIGZvciBpdGVyYXRvciBlcnJvcnMKKyAgU3RhdHVz
IHMgPSBpbnB1dC0+c3RhdHVzKCk7CisgIGNvbnN0IHVpbnQ2NF90IGN1cnJlbnRfZW50cmllcyA9
IGNvbXBhY3QtPmJ1aWxkZXItPk51bUVudHJpZXMoKTsKKyAgaWYgKHMub2soKSkgeworICAgIHMg
PSBjb21wYWN0LT5idWlsZGVyLT5GaW5pc2goKTsKKyAgfSBlbHNlIHsKKyAgICBjb21wYWN0LT5i
dWlsZGVyLT5BYmFuZG9uKCk7CisgIH0KKyAgY29uc3QgdWludDY0X3QgY3VycmVudF9ieXRlcyA9
IGNvbXBhY3QtPmJ1aWxkZXItPkZpbGVTaXplKCk7CisgIGNvbXBhY3QtPmN1cnJlbnRfb3V0cHV0
KCktPmZpbGVfc2l6ZSA9IGN1cnJlbnRfYnl0ZXM7CisgIGNvbXBhY3QtPnRvdGFsX2J5dGVzICs9
IGN1cnJlbnRfYnl0ZXM7CisgIGRlbGV0ZSBjb21wYWN0LT5idWlsZGVyOworICBjb21wYWN0LT5i
dWlsZGVyID0gTlVMTDsKKworICAvLyBGaW5pc2ggYW5kIGNoZWNrIGZvciBmaWxlIGVycm9ycwor
ICBpZiAocy5vaygpKSB7CisgICAgcyA9IGNvbXBhY3QtPm91dGZpbGUtPlN5bmMoKTsKKyAgfQor
ICBpZiAocy5vaygpKSB7CisgICAgcyA9IGNvbXBhY3QtPm91dGZpbGUtPkNsb3NlKCk7CisgIH0K
KyAgZGVsZXRlIGNvbXBhY3QtPm91dGZpbGU7CisgIGNvbXBhY3QtPm91dGZpbGUgPSBOVUxMOwor
CisgIGlmIChzLm9rKCkgJiYgY3VycmVudF9lbnRyaWVzID4gMCkgeworICAgIC8vIFZlcmlmeSB0
aGF0IHRoZSB0YWJsZSBpcyB1c2FibGUKKyAgICBJdGVyYXRvciogaXRlciA9IHRhYmxlX2NhY2hl
Xy0+TmV3SXRlcmF0b3IoUmVhZE9wdGlvbnMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X251bWJlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudF9ieXRlcyk7CisgICAgcyA9IGl0ZXIt
PnN0YXR1cygpOworICAgIGRlbGV0ZSBpdGVyOworICAgIGlmIChzLm9rKCkpIHsKKyAgICAgIExv
ZyhvcHRpb25zXy5pbmZvX2xvZywKKyAgICAgICAgICAiR2VuZXJhdGVkIHRhYmxlICMlbGx1OiAl
bGxkIGtleXMsICVsbGQgYnl0ZXMiLAorICAgICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIG91
dHB1dF9udW1iZXIsCisgICAgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgY3VycmVudF9lbnRy
aWVzLAorICAgICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGN1cnJlbnRfYnl0ZXMpOworICAg
IH0KKyAgfQorICByZXR1cm4gczsKK30KKworCitTdGF0dXMgREJJbXBsOjpJbnN0YWxsQ29tcGFj
dGlvblJlc3VsdHMoQ29tcGFjdGlvblN0YXRlKiBjb21wYWN0KSB7CisgIG11dGV4Xy5Bc3NlcnRI
ZWxkKCk7CisgIExvZyhvcHRpb25zXy5pbmZvX2xvZywgICJDb21wYWN0ZWQgJWRAJWQgKyAlZEAl
ZCBmaWxlcyA9PiAlbGxkIGJ5dGVzIiwKKyAgICAgIGNvbXBhY3QtPmNvbXBhY3Rpb24tPm51bV9p
bnB1dF9maWxlcygwKSwKKyAgICAgIGNvbXBhY3QtPmNvbXBhY3Rpb24tPmxldmVsKCksCisgICAg
ICBjb21wYWN0LT5jb21wYWN0aW9uLT5udW1faW5wdXRfZmlsZXMoMSksCisgICAgICBjb21wYWN0
LT5jb21wYWN0aW9uLT5sZXZlbCgpICsgMSwKKyAgICAgIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4o
Y29tcGFjdC0+dG90YWxfYnl0ZXMpKTsKKworICAvLyBBZGQgY29tcGFjdGlvbiBvdXRwdXRzCisg
IGNvbXBhY3QtPmNvbXBhY3Rpb24tPkFkZElucHV0RGVsZXRpb25zKGNvbXBhY3QtPmNvbXBhY3Rp
b24tPmVkaXQoKSk7CisgIGNvbnN0IGludCBsZXZlbCA9IGNvbXBhY3QtPmNvbXBhY3Rpb24tPmxl
dmVsKCk7CisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29tcGFjdC0+b3V0cHV0cy5zaXplKCk7
IGkrKykgeworICAgIGNvbnN0IENvbXBhY3Rpb25TdGF0ZTo6T3V0cHV0JiBvdXQgPSBjb21wYWN0
LT5vdXRwdXRzW2ldOworICAgIGNvbXBhY3QtPmNvbXBhY3Rpb24tPmVkaXQoKS0+QWRkRmlsZSgK
KyAgICAgICAgbGV2ZWwgKyAxLAorICAgICAgICBvdXQubnVtYmVyLCBvdXQuZmlsZV9zaXplLCBv
dXQuc21hbGxlc3QsIG91dC5sYXJnZXN0KTsKKyAgfQorICByZXR1cm4gdmVyc2lvbnNfLT5Mb2dB
bmRBcHBseShjb21wYWN0LT5jb21wYWN0aW9uLT5lZGl0KCksICZtdXRleF8pOworfQorCitTdGF0
dXMgREJJbXBsOjpEb0NvbXBhY3Rpb25Xb3JrKENvbXBhY3Rpb25TdGF0ZSogY29tcGFjdCkgewor
ICBjb25zdCB1aW50NjRfdCBzdGFydF9taWNyb3MgPSBlbnZfLT5Ob3dNaWNyb3MoKTsKKyAgaW50
NjRfdCBpbW1fbWljcm9zID0gMDsgIC8vIE1pY3JvcyBzcGVudCBkb2luZyBpbW1fIGNvbXBhY3Rp
b25zCisKKyAgTG9nKG9wdGlvbnNfLmluZm9fbG9nLCAgIkNvbXBhY3RpbmcgJWRAJWQgKyAlZEAl
ZCBmaWxlcyIsCisgICAgICBjb21wYWN0LT5jb21wYWN0aW9uLT5udW1faW5wdXRfZmlsZXMoMCks
CisgICAgICBjb21wYWN0LT5jb21wYWN0aW9uLT5sZXZlbCgpLAorICAgICAgY29tcGFjdC0+Y29t
cGFjdGlvbi0+bnVtX2lucHV0X2ZpbGVzKDEpLAorICAgICAgY29tcGFjdC0+Y29tcGFjdGlvbi0+
bGV2ZWwoKSArIDEpOworCisgIGFzc2VydCh2ZXJzaW9uc18tPk51bUxldmVsRmlsZXMoY29tcGFj
dC0+Y29tcGFjdGlvbi0+bGV2ZWwoKSkgPiAwKTsKKyAgYXNzZXJ0KGNvbXBhY3QtPmJ1aWxkZXIg
PT0gTlVMTCk7CisgIGFzc2VydChjb21wYWN0LT5vdXRmaWxlID09IE5VTEwpOworICBpZiAoc25h
cHNob3RzXy5lbXB0eSgpKSB7CisgICAgY29tcGFjdC0+c21hbGxlc3Rfc25hcHNob3QgPSB2ZXJz
aW9uc18tPkxhc3RTZXF1ZW5jZSgpOworICB9IGVsc2UgeworICAgIGNvbXBhY3QtPnNtYWxsZXN0
X3NuYXBzaG90ID0gc25hcHNob3RzXy5vbGRlc3QoKS0+bnVtYmVyXzsKKyAgfQorCisgIC8vIFJl
bGVhc2UgbXV0ZXggd2hpbGUgd2UncmUgYWN0dWFsbHkgZG9pbmcgdGhlIGNvbXBhY3Rpb24gd29y
aworICBtdXRleF8uVW5sb2NrKCk7CisKKyAgSXRlcmF0b3IqIGlucHV0ID0gdmVyc2lvbnNfLT5N
YWtlSW5wdXRJdGVyYXRvcihjb21wYWN0LT5jb21wYWN0aW9uKTsKKyAgaW5wdXQtPlNlZWtUb0Zp
cnN0KCk7CisgIFN0YXR1cyBzdGF0dXM7CisgIFBhcnNlZEludGVybmFsS2V5IGlrZXk7CisgIHN0
ZDo6c3RyaW5nIGN1cnJlbnRfdXNlcl9rZXk7CisgIGJvb2wgaGFzX2N1cnJlbnRfdXNlcl9rZXkg
PSBmYWxzZTsKKyAgU2VxdWVuY2VOdW1iZXIgbGFzdF9zZXF1ZW5jZV9mb3Jfa2V5ID0ga01heFNl
cXVlbmNlTnVtYmVyOworICBmb3IgKDsgaW5wdXQtPlZhbGlkKCkgJiYgIXNodXR0aW5nX2Rvd25f
LkFjcXVpcmVfTG9hZCgpOyApIHsKKyAgICAvLyBQcmlvcml0aXplIGltbXV0YWJsZSBjb21wYWN0
aW9uIHdvcmsKKyAgICBpZiAoaGFzX2ltbV8uTm9CYXJyaWVyX0xvYWQoKSAhPSBOVUxMKSB7Cisg
ICAgICBjb25zdCB1aW50NjRfdCBpbW1fc3RhcnQgPSBlbnZfLT5Ob3dNaWNyb3MoKTsKKyAgICAg
IG11dGV4Xy5Mb2NrKCk7CisgICAgICBpZiAoaW1tXyAhPSBOVUxMKSB7CisgICAgICAgIENvbXBh
Y3RNZW1UYWJsZSgpOworICAgICAgICBiZ19jdl8uU2lnbmFsQWxsKCk7ICAvLyBXYWtldXAgTWFr
ZVJvb21Gb3JXcml0ZSgpIGlmIG5lY2Vzc2FyeQorICAgICAgfQorICAgICAgbXV0ZXhfLlVubG9j
aygpOworICAgICAgaW1tX21pY3JvcyArPSAoZW52Xy0+Tm93TWljcm9zKCkgLSBpbW1fc3RhcnQp
OworICAgIH0KKworICAgIFNsaWNlIGtleSA9IGlucHV0LT5rZXkoKTsKKyAgICBpZiAoY29tcGFj
dC0+Y29tcGFjdGlvbi0+U2hvdWxkU3RvcEJlZm9yZShrZXkpICYmCisgICAgICAgIGNvbXBhY3Qt
PmJ1aWxkZXIgIT0gTlVMTCkgeworICAgICAgc3RhdHVzID0gRmluaXNoQ29tcGFjdGlvbk91dHB1
dEZpbGUoY29tcGFjdCwgaW5wdXQpOworICAgICAgaWYgKCFzdGF0dXMub2soKSkgeworICAgICAg
ICBicmVhazsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvLyBIYW5kbGUga2V5L3ZhbHVlLCBhZGQg
dG8gc3RhdGUsIGV0Yy4KKyAgICBib29sIGRyb3AgPSBmYWxzZTsKKyAgICBpZiAoIVBhcnNlSW50
ZXJuYWxLZXkoa2V5LCAmaWtleSkpIHsKKyAgICAgIC8vIERvIG5vdCBoaWRlIGVycm9yIGtleXMK
KyAgICAgIGN1cnJlbnRfdXNlcl9rZXkuY2xlYXIoKTsKKyAgICAgIGhhc19jdXJyZW50X3VzZXJf
a2V5ID0gZmFsc2U7CisgICAgICBsYXN0X3NlcXVlbmNlX2Zvcl9rZXkgPSBrTWF4U2VxdWVuY2VO
dW1iZXI7CisgICAgfSBlbHNlIHsKKyAgICAgIGlmICghaGFzX2N1cnJlbnRfdXNlcl9rZXkgfHwK
KyAgICAgICAgICB1c2VyX2NvbXBhcmF0b3IoKS0+Q29tcGFyZShpa2V5LnVzZXJfa2V5LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNsaWNlKGN1cnJlbnRfdXNlcl9rZXkp
KSAhPSAwKSB7CisgICAgICAgIC8vIEZpcnN0IG9jY3VycmVuY2Ugb2YgdGhpcyB1c2VyIGtleQor
ICAgICAgICBjdXJyZW50X3VzZXJfa2V5LmFzc2lnbihpa2V5LnVzZXJfa2V5LmRhdGEoKSwgaWtl
eS51c2VyX2tleS5zaXplKCkpOworICAgICAgICBoYXNfY3VycmVudF91c2VyX2tleSA9IHRydWU7
CisgICAgICAgIGxhc3Rfc2VxdWVuY2VfZm9yX2tleSA9IGtNYXhTZXF1ZW5jZU51bWJlcjsKKyAg
ICAgIH0KKworICAgICAgaWYgKGxhc3Rfc2VxdWVuY2VfZm9yX2tleSA8PSBjb21wYWN0LT5zbWFs
bGVzdF9zbmFwc2hvdCkgeworICAgICAgICAvLyBIaWRkZW4gYnkgYW4gbmV3ZXIgZW50cnkgZm9y
IHNhbWUgdXNlciBrZXkKKyAgICAgICAgZHJvcCA9IHRydWU7ICAgIC8vIChBKQorICAgICAgfSBl
bHNlIGlmIChpa2V5LnR5cGUgPT0ga1R5cGVEZWxldGlvbiAmJgorICAgICAgICAgICAgICAgICBp
a2V5LnNlcXVlbmNlIDw9IGNvbXBhY3QtPnNtYWxsZXN0X3NuYXBzaG90ICYmCisgICAgICAgICAg
ICAgICAgIGNvbXBhY3QtPmNvbXBhY3Rpb24tPklzQmFzZUxldmVsRm9yS2V5KGlrZXkudXNlcl9r
ZXkpKSB7CisgICAgICAgIC8vIEZvciB0aGlzIHVzZXIga2V5OgorICAgICAgICAvLyAoMSkgdGhl
cmUgaXMgbm8gZGF0YSBpbiBoaWdoZXIgbGV2ZWxzCisgICAgICAgIC8vICgyKSBkYXRhIGluIGxv
d2VyIGxldmVscyB3aWxsIGhhdmUgbGFyZ2VyIHNlcXVlbmNlIG51bWJlcnMKKyAgICAgICAgLy8g
KDMpIGRhdGEgaW4gbGF5ZXJzIHRoYXQgYXJlIGJlaW5nIGNvbXBhY3RlZCBoZXJlIGFuZCBoYXZl
CisgICAgICAgIC8vICAgICBzbWFsbGVyIHNlcXVlbmNlIG51bWJlcnMgd2lsbCBiZSBkcm9wcGVk
IGluIHRoZSBuZXh0CisgICAgICAgIC8vICAgICBmZXcgaXRlcmF0aW9ucyBvZiB0aGlzIGxvb3Ag
KGJ5IHJ1bGUgKEEpIGFib3ZlKS4KKyAgICAgICAgLy8gVGhlcmVmb3JlIHRoaXMgZGVsZXRpb24g
bWFya2VyIGlzIG9ic29sZXRlIGFuZCBjYW4gYmUgZHJvcHBlZC4KKyAgICAgICAgZHJvcCA9IHRy
dWU7CisgICAgICB9CisKKyAgICAgIGxhc3Rfc2VxdWVuY2VfZm9yX2tleSA9IGlrZXkuc2VxdWVu
Y2U7CisgICAgfQorI2lmIDAKKyAgICBMb2cob3B0aW9uc18uaW5mb19sb2csCisgICAgICAgICIg
IENvbXBhY3Q6ICVzLCBzZXEgJWQsIHR5cGU6ICVkICVkLCBkcm9wOiAlZCwgaXNfYmFzZTogJWQs
ICIKKyAgICAgICAgIiVkIHNtYWxsZXN0X3NuYXBzaG90OiAlZCIsCisgICAgICAgIGlrZXkudXNl
cl9rZXkuVG9TdHJpbmcoKS5jX3N0cigpLAorICAgICAgICAoaW50KWlrZXkuc2VxdWVuY2UsIGlr
ZXkudHlwZSwga1R5cGVWYWx1ZSwgZHJvcCwKKyAgICAgICAgY29tcGFjdC0+Y29tcGFjdGlvbi0+
SXNCYXNlTGV2ZWxGb3JLZXkoaWtleS51c2VyX2tleSksCisgICAgICAgIChpbnQpbGFzdF9zZXF1
ZW5jZV9mb3Jfa2V5LCAoaW50KWNvbXBhY3QtPnNtYWxsZXN0X3NuYXBzaG90KTsKKyNlbmRpZgor
CisgICAgaWYgKCFkcm9wKSB7CisgICAgICAvLyBPcGVuIG91dHB1dCBmaWxlIGlmIG5lY2Vzc2Fy
eQorICAgICAgaWYgKGNvbXBhY3QtPmJ1aWxkZXIgPT0gTlVMTCkgeworICAgICAgICBzdGF0dXMg
PSBPcGVuQ29tcGFjdGlvbk91dHB1dEZpbGUoY29tcGFjdCk7CisgICAgICAgIGlmICghc3RhdHVz
Lm9rKCkpIHsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgaWYg
KGNvbXBhY3QtPmJ1aWxkZXItPk51bUVudHJpZXMoKSA9PSAwKSB7CisgICAgICAgIGNvbXBhY3Qt
PmN1cnJlbnRfb3V0cHV0KCktPnNtYWxsZXN0LkRlY29kZUZyb20oa2V5KTsKKyAgICAgIH0KKyAg
ICAgIGNvbXBhY3QtPmN1cnJlbnRfb3V0cHV0KCktPmxhcmdlc3QuRGVjb2RlRnJvbShrZXkpOwor
ICAgICAgY29tcGFjdC0+YnVpbGRlci0+QWRkKGtleSwgaW5wdXQtPnZhbHVlKCkpOworCisgICAg
ICAvLyBDbG9zZSBvdXRwdXQgZmlsZSBpZiBpdCBpcyBiaWcgZW5vdWdoCisgICAgICBpZiAoY29t
cGFjdC0+YnVpbGRlci0+RmlsZVNpemUoKSA+PQorICAgICAgICAgIGNvbXBhY3QtPmNvbXBhY3Rp
b24tPk1heE91dHB1dEZpbGVTaXplKCkpIHsKKyAgICAgICAgc3RhdHVzID0gRmluaXNoQ29tcGFj
dGlvbk91dHB1dEZpbGUoY29tcGFjdCwgaW5wdXQpOworICAgICAgICBpZiAoIXN0YXR1cy5vaygp
KSB7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICBp
bnB1dC0+TmV4dCgpOworICB9CisKKyAgaWYgKHN0YXR1cy5vaygpICYmIHNodXR0aW5nX2Rvd25f
LkFjcXVpcmVfTG9hZCgpKSB7CisgICAgc3RhdHVzID0gU3RhdHVzOjpJT0Vycm9yKCJEZWxldGlu
ZyBEQiBkdXJpbmcgY29tcGFjdGlvbiIpOworICB9CisgIGlmIChzdGF0dXMub2soKSAmJiBjb21w
YWN0LT5idWlsZGVyICE9IE5VTEwpIHsKKyAgICBzdGF0dXMgPSBGaW5pc2hDb21wYWN0aW9uT3V0
cHV0RmlsZShjb21wYWN0LCBpbnB1dCk7CisgIH0KKyAgaWYgKHN0YXR1cy5vaygpKSB7CisgICAg
c3RhdHVzID0gaW5wdXQtPnN0YXR1cygpOworICB9CisgIGRlbGV0ZSBpbnB1dDsKKyAgaW5wdXQg
PSBOVUxMOworCisgIENvbXBhY3Rpb25TdGF0cyBzdGF0czsKKyAgc3RhdHMubWljcm9zID0gZW52
Xy0+Tm93TWljcm9zKCkgLSBzdGFydF9taWNyb3MgLSBpbW1fbWljcm9zOworICBmb3IgKGludCB3
aGljaCA9IDA7IHdoaWNoIDwgMjsgd2hpY2grKykgeworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Y29tcGFjdC0+Y29tcGFjdGlvbi0+bnVtX2lucHV0X2ZpbGVzKHdoaWNoKTsgaSsrKSB7CisgICAg
ICBzdGF0cy5ieXRlc19yZWFkICs9IGNvbXBhY3QtPmNvbXBhY3Rpb24tPmlucHV0KHdoaWNoLCBp
KS0+ZmlsZV9zaXplOworICAgIH0KKyAgfQorICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvbXBh
Y3QtPm91dHB1dHMuc2l6ZSgpOyBpKyspIHsKKyAgICBzdGF0cy5ieXRlc193cml0dGVuICs9IGNv
bXBhY3QtPm91dHB1dHNbaV0uZmlsZV9zaXplOworICB9CisKKyAgbXV0ZXhfLkxvY2soKTsKKyAg
c3RhdHNfW2NvbXBhY3QtPmNvbXBhY3Rpb24tPmxldmVsKCkgKyAxXS5BZGQoc3RhdHMpOworCisg
IGlmIChzdGF0dXMub2soKSkgeworICAgIHN0YXR1cyA9IEluc3RhbGxDb21wYWN0aW9uUmVzdWx0
cyhjb21wYWN0KTsKKyAgfQorICBWZXJzaW9uU2V0OjpMZXZlbFN1bW1hcnlTdG9yYWdlIHRtcDsK
KyAgTG9nKG9wdGlvbnNfLmluZm9fbG9nLAorICAgICAgImNvbXBhY3RlZCB0bzogJXMiLCB2ZXJz
aW9uc18tPkxldmVsU3VtbWFyeSgmdG1wKSk7CisgIHJldHVybiBzdGF0dXM7Cit9CisKK25hbWVz
cGFjZSB7CitzdHJ1Y3QgSXRlclN0YXRlIHsKKyAgcG9ydDo6TXV0ZXgqIG11OworICBWZXJzaW9u
KiB2ZXJzaW9uOworICBNZW1UYWJsZSogbWVtOworICBNZW1UYWJsZSogaW1tOworfTsKKworc3Rh
dGljIHZvaWQgQ2xlYW51cEl0ZXJhdG9yU3RhdGUodm9pZCogYXJnMSwgdm9pZCogYXJnMikgewor
ICBJdGVyU3RhdGUqIHN0YXRlID0gcmVpbnRlcnByZXRfY2FzdDxJdGVyU3RhdGUqPihhcmcxKTsK
KyAgc3RhdGUtPm11LT5Mb2NrKCk7CisgIHN0YXRlLT5tZW0tPlVucmVmKCk7CisgIGlmIChzdGF0
ZS0+aW1tICE9IE5VTEwpIHN0YXRlLT5pbW0tPlVucmVmKCk7CisgIHN0YXRlLT52ZXJzaW9uLT5V
bnJlZigpOworICBzdGF0ZS0+bXUtPlVubG9jaygpOworICBkZWxldGUgc3RhdGU7Cit9Cit9ICAv
LyBuYW1lc3BhY2UKKworSXRlcmF0b3IqIERCSW1wbDo6TmV3SW50ZXJuYWxJdGVyYXRvcihjb25z
dCBSZWFkT3B0aW9ucyYgb3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU2VxdWVuY2VOdW1iZXIqIGxhdGVzdF9zbmFwc2hvdCkgeworICBJdGVyU3RhdGUqIGNs
ZWFudXAgPSBuZXcgSXRlclN0YXRlOworICBtdXRleF8uTG9jaygpOworICAqbGF0ZXN0X3NuYXBz
aG90ID0gdmVyc2lvbnNfLT5MYXN0U2VxdWVuY2UoKTsKKworICAvLyBDb2xsZWN0IHRvZ2V0aGVy
IGFsbCBuZWVkZWQgY2hpbGQgaXRlcmF0b3JzCisgIHN0ZDo6dmVjdG9yPEl0ZXJhdG9yKj4gbGlz
dDsKKyAgbGlzdC5wdXNoX2JhY2sobWVtXy0+TmV3SXRlcmF0b3IoKSk7CisgIG1lbV8tPlJlZigp
OworICBpZiAoaW1tXyAhPSBOVUxMKSB7CisgICAgbGlzdC5wdXNoX2JhY2soaW1tXy0+TmV3SXRl
cmF0b3IoKSk7CisgICAgaW1tXy0+UmVmKCk7CisgIH0KKyAgdmVyc2lvbnNfLT5jdXJyZW50KCkt
PkFkZEl0ZXJhdG9ycyhvcHRpb25zLCAmbGlzdCk7CisgIEl0ZXJhdG9yKiBpbnRlcm5hbF9pdGVy
ID0KKyAgICAgIE5ld01lcmdpbmdJdGVyYXRvcigmaW50ZXJuYWxfY29tcGFyYXRvcl8sICZsaXN0
WzBdLCBsaXN0LnNpemUoKSk7CisgIHZlcnNpb25zXy0+Y3VycmVudCgpLT5SZWYoKTsKKworICBj
bGVhbnVwLT5tdSA9ICZtdXRleF87CisgIGNsZWFudXAtPm1lbSA9IG1lbV87CisgIGNsZWFudXAt
PmltbSA9IGltbV87CisgIGNsZWFudXAtPnZlcnNpb24gPSB2ZXJzaW9uc18tPmN1cnJlbnQoKTsK
KyAgaW50ZXJuYWxfaXRlci0+UmVnaXN0ZXJDbGVhbnVwKENsZWFudXBJdGVyYXRvclN0YXRlLCBj
bGVhbnVwLCBOVUxMKTsKKworICBtdXRleF8uVW5sb2NrKCk7CisgIHJldHVybiBpbnRlcm5hbF9p
dGVyOworfQorCitJdGVyYXRvciogREJJbXBsOjpURVNUX05ld0ludGVybmFsSXRlcmF0b3IoKSB7
CisgIFNlcXVlbmNlTnVtYmVyIGlnbm9yZWQ7CisgIHJldHVybiBOZXdJbnRlcm5hbEl0ZXJhdG9y
KFJlYWRPcHRpb25zKCksICZpZ25vcmVkKTsKK30KKworaW50NjRfdCBEQkltcGw6OlRFU1RfTWF4
TmV4dExldmVsT3ZlcmxhcHBpbmdCeXRlcygpIHsKKyAgTXV0ZXhMb2NrIGwoJm11dGV4Xyk7Cisg
IHJldHVybiB2ZXJzaW9uc18tPk1heE5leHRMZXZlbE92ZXJsYXBwaW5nQnl0ZXMoKTsKK30KKwor
U3RhdHVzIERCSW1wbDo6R2V0KGNvbnN0IFJlYWRPcHRpb25zJiBvcHRpb25zLAorICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFNsaWNlJiBrZXksCisgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJp
bmcqIHZhbHVlKSB7CisgIFN0YXR1cyBzOworICBNdXRleExvY2sgbCgmbXV0ZXhfKTsKKyAgU2Vx
dWVuY2VOdW1iZXIgc25hcHNob3Q7CisgIGlmIChvcHRpb25zLnNuYXBzaG90ICE9IE5VTEwpIHsK
KyAgICBzbmFwc2hvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgU25hcHNob3RJbXBsKj4ob3B0
aW9ucy5zbmFwc2hvdCktPm51bWJlcl87CisgIH0gZWxzZSB7CisgICAgc25hcHNob3QgPSB2ZXJz
aW9uc18tPkxhc3RTZXF1ZW5jZSgpOworICB9CisKKyAgTWVtVGFibGUqIG1lbSA9IG1lbV87Cisg
IE1lbVRhYmxlKiBpbW0gPSBpbW1fOworICBWZXJzaW9uKiBjdXJyZW50ID0gdmVyc2lvbnNfLT5j
dXJyZW50KCk7CisgIG1lbS0+UmVmKCk7CisgIGlmIChpbW0gIT0gTlVMTCkgaW1tLT5SZWYoKTsK
KyAgY3VycmVudC0+UmVmKCk7CisKKyAgYm9vbCBoYXZlX3N0YXRfdXBkYXRlID0gZmFsc2U7Cisg
IFZlcnNpb246OkdldFN0YXRzIHN0YXRzOworCisgIC8vIFVubG9jayB3aGlsZSByZWFkaW5nIGZy
b20gZmlsZXMgYW5kIG1lbXRhYmxlcworICB7CisgICAgbXV0ZXhfLlVubG9jaygpOworICAgIC8v
IEZpcnN0IGxvb2sgaW4gdGhlIG1lbXRhYmxlLCB0aGVuIGluIHRoZSBpbW11dGFibGUgbWVtdGFi
bGUgKGlmIGFueSkuCisgICAgTG9va3VwS2V5IGxrZXkoa2V5LCBzbmFwc2hvdCk7CisgICAgaWYg
KG1lbS0+R2V0KGxrZXksIHZhbHVlLCAmcykpIHsKKyAgICAgIC8vIERvbmUKKyAgICB9IGVsc2Ug
aWYgKGltbSAhPSBOVUxMICYmIGltbS0+R2V0KGxrZXksIHZhbHVlLCAmcykpIHsKKyAgICAgIC8v
IERvbmUKKyAgICB9IGVsc2UgeworICAgICAgcyA9IGN1cnJlbnQtPkdldChvcHRpb25zLCBsa2V5
LCB2YWx1ZSwgJnN0YXRzKTsKKyAgICAgIGhhdmVfc3RhdF91cGRhdGUgPSB0cnVlOworICAgIH0K
KyAgICBtdXRleF8uTG9jaygpOworICB9CisKKyAgaWYgKGhhdmVfc3RhdF91cGRhdGUgJiYgY3Vy
cmVudC0+VXBkYXRlU3RhdHMoc3RhdHMpKSB7CisgICAgTWF5YmVTY2hlZHVsZUNvbXBhY3Rpb24o
KTsKKyAgfQorICBtZW0tPlVucmVmKCk7CisgIGlmIChpbW0gIT0gTlVMTCkgaW1tLT5VbnJlZigp
OworICBjdXJyZW50LT5VbnJlZigpOworICByZXR1cm4gczsKK30KKworSXRlcmF0b3IqIERCSW1w
bDo6TmV3SXRlcmF0b3IoY29uc3QgUmVhZE9wdGlvbnMmIG9wdGlvbnMpIHsKKyAgU2VxdWVuY2VO
dW1iZXIgbGF0ZXN0X3NuYXBzaG90OworICBJdGVyYXRvciogaW50ZXJuYWxfaXRlciA9IE5ld0lu
dGVybmFsSXRlcmF0b3Iob3B0aW9ucywgJmxhdGVzdF9zbmFwc2hvdCk7CisgIHJldHVybiBOZXdE
Qkl0ZXJhdG9yKAorICAgICAgJmRibmFtZV8sIGVudl8sIHVzZXJfY29tcGFyYXRvcigpLCBpbnRl
cm5hbF9pdGVyLAorICAgICAgKG9wdGlvbnMuc25hcHNob3QgIT0gTlVMTAorICAgICAgID8gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBTbmFwc2hvdEltcGwqPihvcHRpb25zLnNuYXBzaG90KS0+bnVt
YmVyXworICAgICAgIDogbGF0ZXN0X3NuYXBzaG90KSk7Cit9CisKK2NvbnN0IFNuYXBzaG90KiBE
QkltcGw6OkdldFNuYXBzaG90KCkgeworICBNdXRleExvY2sgbCgmbXV0ZXhfKTsKKyAgcmV0dXJu
IHNuYXBzaG90c18uTmV3KHZlcnNpb25zXy0+TGFzdFNlcXVlbmNlKCkpOworfQorCit2b2lkIERC
SW1wbDo6UmVsZWFzZVNuYXBzaG90KGNvbnN0IFNuYXBzaG90KiBzKSB7CisgIE11dGV4TG9jayBs
KCZtdXRleF8pOworICBzbmFwc2hvdHNfLkRlbGV0ZShyZWludGVycHJldF9jYXN0PGNvbnN0IFNu
YXBzaG90SW1wbCo+KHMpKTsKK30KKworLy8gQ29udmVuaWVuY2UgbWV0aG9kcworU3RhdHVzIERC
SW1wbDo6UHV0KGNvbnN0IFdyaXRlT3B0aW9ucyYgbywgY29uc3QgU2xpY2UmIGtleSwgY29uc3Qg
U2xpY2UmIHZhbCkgeworICByZXR1cm4gREI6OlB1dChvLCBrZXksIHZhbCk7Cit9CisKK1N0YXR1
cyBEQkltcGw6OkRlbGV0ZShjb25zdCBXcml0ZU9wdGlvbnMmIG9wdGlvbnMsIGNvbnN0IFNsaWNl
JiBrZXkpIHsKKyAgcmV0dXJuIERCOjpEZWxldGUob3B0aW9ucywga2V5KTsKK30KKworU3RhdHVz
IERCSW1wbDo6V3JpdGUoY29uc3QgV3JpdGVPcHRpb25zJiBvcHRpb25zLCBXcml0ZUJhdGNoKiBt
eV9iYXRjaCkgeworICBXcml0ZXIgdygmbXV0ZXhfKTsKKyAgdy5iYXRjaCA9IG15X2JhdGNoOwor
ICB3LnN5bmMgPSBvcHRpb25zLnN5bmM7CisgIHcuZG9uZSA9IGZhbHNlOworCisgIE11dGV4TG9j
ayBsKCZtdXRleF8pOworICB3cml0ZXJzXy5wdXNoX2JhY2soJncpOworICB3aGlsZSAoIXcuZG9u
ZSAmJiAmdyAhPSB3cml0ZXJzXy5mcm9udCgpKSB7CisgICAgdy5jdi5XYWl0KCk7CisgIH0KKyAg
aWYgKHcuZG9uZSkgeworICAgIHJldHVybiB3LnN0YXR1czsKKyAgfQorCisgIC8vIE1heSB0ZW1w
b3JhcmlseSB1bmxvY2sgYW5kIHdhaXQuCisgIFN0YXR1cyBzdGF0dXMgPSBNYWtlUm9vbUZvcldy
aXRlKG15X2JhdGNoID09IE5VTEwpOworICB1aW50NjRfdCBsYXN0X3NlcXVlbmNlID0gdmVyc2lv
bnNfLT5MYXN0U2VxdWVuY2UoKTsKKyAgV3JpdGVyKiBsYXN0X3dyaXRlciA9ICZ3OworICBpZiAo
c3RhdHVzLm9rKCkgJiYgbXlfYmF0Y2ggIT0gTlVMTCkgeyAgLy8gTlVMTCBiYXRjaCBpcyBmb3Ig
Y29tcGFjdGlvbnMKKyAgICBXcml0ZUJhdGNoKiB1cGRhdGVzID0gQnVpbGRCYXRjaEdyb3VwKCZs
YXN0X3dyaXRlcik7CisgICAgV3JpdGVCYXRjaEludGVybmFsOjpTZXRTZXF1ZW5jZSh1cGRhdGVz
LCBsYXN0X3NlcXVlbmNlICsgMSk7CisgICAgbGFzdF9zZXF1ZW5jZSArPSBXcml0ZUJhdGNoSW50
ZXJuYWw6OkNvdW50KHVwZGF0ZXMpOworCisgICAgLy8gQWRkIHRvIGxvZyBhbmQgYXBwbHkgdG8g
bWVtdGFibGUuICBXZSBjYW4gcmVsZWFzZSB0aGUgbG9jaworICAgIC8vIGR1cmluZyB0aGlzIHBo
YXNlIHNpbmNlICZ3IGlzIGN1cnJlbnRseSByZXNwb25zaWJsZSBmb3IgbG9nZ2luZworICAgIC8v
IGFuZCBwcm90ZWN0cyBhZ2FpbnN0IGNvbmN1cnJlbnQgbG9nZ2VycyBhbmQgY29uY3VycmVudCB3
cml0ZXMKKyAgICAvLyBpbnRvIG1lbV8uCisgICAgeworICAgICAgbXV0ZXhfLlVubG9jaygpOwor
ICAgICAgc3RhdHVzID0gbG9nXy0+QWRkUmVjb3JkKFdyaXRlQmF0Y2hJbnRlcm5hbDo6Q29udGVu
dHModXBkYXRlcykpOworICAgICAgaWYgKHN0YXR1cy5vaygpICYmIG9wdGlvbnMuc3luYykgewor
ICAgICAgICBzdGF0dXMgPSBsb2dmaWxlXy0+U3luYygpOworICAgICAgfQorICAgICAgaWYgKHN0
YXR1cy5vaygpKSB7CisgICAgICAgIHN0YXR1cyA9IFdyaXRlQmF0Y2hJbnRlcm5hbDo6SW5zZXJ0
SW50byh1cGRhdGVzLCBtZW1fKTsKKyAgICAgIH0KKyAgICAgIG11dGV4Xy5Mb2NrKCk7CisgICAg
fQorICAgIGlmICh1cGRhdGVzID09IHRtcF9iYXRjaF8pIHRtcF9iYXRjaF8tPkNsZWFyKCk7CisK
KyAgICB2ZXJzaW9uc18tPlNldExhc3RTZXF1ZW5jZShsYXN0X3NlcXVlbmNlKTsKKyAgfQorCisg
IHdoaWxlICh0cnVlKSB7CisgICAgV3JpdGVyKiByZWFkeSA9IHdyaXRlcnNfLmZyb250KCk7Cisg
ICAgd3JpdGVyc18ucG9wX2Zyb250KCk7CisgICAgaWYgKHJlYWR5ICE9ICZ3KSB7CisgICAgICBy
ZWFkeS0+c3RhdHVzID0gc3RhdHVzOworICAgICAgcmVhZHktPmRvbmUgPSB0cnVlOworICAgICAg
cmVhZHktPmN2LlNpZ25hbCgpOworICAgIH0KKyAgICBpZiAocmVhZHkgPT0gbGFzdF93cml0ZXIp
IGJyZWFrOworICB9CisKKyAgLy8gTm90aWZ5IG5ldyBoZWFkIG9mIHdyaXRlIHF1ZXVlCisgIGlm
ICghd3JpdGVyc18uZW1wdHkoKSkgeworICAgIHdyaXRlcnNfLmZyb250KCktPmN2LlNpZ25hbCgp
OworICB9CisKKyAgcmV0dXJuIHN0YXR1czsKK30KKworLy8gUkVRVUlSRVM6IFdyaXRlciBsaXN0
IG11c3QgYmUgbm9uLWVtcHR5CisvLyBSRVFVSVJFUzogRmlyc3Qgd3JpdGVyIG11c3QgaGF2ZSBh
IG5vbi1OVUxMIGJhdGNoCitXcml0ZUJhdGNoKiBEQkltcGw6OkJ1aWxkQmF0Y2hHcm91cChXcml0
ZXIqKiBsYXN0X3dyaXRlcikgeworICBhc3NlcnQoIXdyaXRlcnNfLmVtcHR5KCkpOworICBXcml0
ZXIqIGZpcnN0ID0gd3JpdGVyc18uZnJvbnQoKTsKKyAgV3JpdGVCYXRjaCogcmVzdWx0ID0gZmly
c3QtPmJhdGNoOworICBhc3NlcnQocmVzdWx0ICE9IE5VTEwpOworCisgIHNpemVfdCBzaXplID0g
V3JpdGVCYXRjaEludGVybmFsOjpCeXRlU2l6ZShmaXJzdC0+YmF0Y2gpOworCisgIC8vIEFsbG93
IHRoZSBncm91cCB0byBncm93IHVwIHRvIGEgbWF4aW11bSBzaXplLCBidXQgaWYgdGhlCisgIC8v
IG9yaWdpbmFsIHdyaXRlIGlzIHNtYWxsLCBsaW1pdCB0aGUgZ3Jvd3RoIHNvIHdlIGRvIG5vdCBz
bG93CisgIC8vIGRvd24gdGhlIHNtYWxsIHdyaXRlIHRvbyBtdWNoLgorICBzaXplX3QgbWF4X3Np
emUgPSAxIDw8IDIwOworICBpZiAoc2l6ZSA8PSAoMTI4PDwxMCkpIHsKKyAgICBtYXhfc2l6ZSA9
IHNpemUgKyAoMTI4PDwxMCk7CisgIH0KKworICAqbGFzdF93cml0ZXIgPSBmaXJzdDsKKyAgc3Rk
OjpkZXF1ZTxXcml0ZXIqPjo6aXRlcmF0b3IgaXRlciA9IHdyaXRlcnNfLmJlZ2luKCk7CisgICsr
aXRlcjsgIC8vIEFkdmFuY2UgcGFzdCAiZmlyc3QiCisgIGZvciAoOyBpdGVyICE9IHdyaXRlcnNf
LmVuZCgpOyArK2l0ZXIpIHsKKyAgICBXcml0ZXIqIHcgPSAqaXRlcjsKKyAgICBpZiAody0+c3lu
YyAmJiAhZmlyc3QtPnN5bmMpIHsKKyAgICAgIC8vIERvIG5vdCBpbmNsdWRlIGEgc3luYyB3cml0
ZSBpbnRvIGEgYmF0Y2ggaGFuZGxlZCBieSBhIG5vbi1zeW5jIHdyaXRlLgorICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgaWYgKHctPmJhdGNoICE9IE5VTEwpIHsKKyAgICAgIHNpemUgKz0gV3Jp
dGVCYXRjaEludGVybmFsOjpCeXRlU2l6ZSh3LT5iYXRjaCk7CisgICAgICBpZiAoc2l6ZSA+IG1h
eF9zaXplKSB7CisgICAgICAgIC8vIERvIG5vdCBtYWtlIGJhdGNoIHRvbyBiaWcKKyAgICAgICAg
YnJlYWs7CisgICAgICB9CisKKyAgICAgIC8vIEFwcGVuZCB0byAqcmV1c2x0CisgICAgICBpZiAo
cmVzdWx0ID09IGZpcnN0LT5iYXRjaCkgeworICAgICAgICAvLyBTd2l0Y2ggdG8gdGVtcG9yYXJ5
IGJhdGNoIGluc3RlYWQgb2YgZGlzdHVyYmluZyBjYWxsZXIncyBiYXRjaAorICAgICAgICByZXN1
bHQgPSB0bXBfYmF0Y2hfOworICAgICAgICBhc3NlcnQoV3JpdGVCYXRjaEludGVybmFsOjpDb3Vu
dChyZXN1bHQpID09IDApOworICAgICAgICBXcml0ZUJhdGNoSW50ZXJuYWw6OkFwcGVuZChyZXN1
bHQsIGZpcnN0LT5iYXRjaCk7CisgICAgICB9CisgICAgICBXcml0ZUJhdGNoSW50ZXJuYWw6OkFw
cGVuZChyZXN1bHQsIHctPmJhdGNoKTsKKyAgICB9CisgICAgKmxhc3Rfd3JpdGVyID0gdzsKKyAg
fQorICByZXR1cm4gcmVzdWx0OworfQorCisvLyBSRVFVSVJFUzogbXV0ZXhfIGlzIGhlbGQKKy8v
IFJFUVVJUkVTOiB0aGlzIHRocmVhZCBpcyBjdXJyZW50bHkgYXQgdGhlIGZyb250IG9mIHRoZSB3
cml0ZXIgcXVldWUKK1N0YXR1cyBEQkltcGw6Ok1ha2VSb29tRm9yV3JpdGUoYm9vbCBmb3JjZSkg
eworICBtdXRleF8uQXNzZXJ0SGVsZCgpOworICBhc3NlcnQoIXdyaXRlcnNfLmVtcHR5KCkpOwor
ICBib29sIGFsbG93X2RlbGF5ID0gIWZvcmNlOworICBTdGF0dXMgczsKKyAgd2hpbGUgKHRydWUp
IHsKKyAgICBpZiAoIWJnX2Vycm9yXy5vaygpKSB7CisgICAgICAvLyBZaWVsZCBwcmV2aW91cyBl
cnJvcgorICAgICAgcyA9IGJnX2Vycm9yXzsKKyAgICAgIGJyZWFrOworICAgIH0gZWxzZSBpZiAo
CisgICAgICAgIGFsbG93X2RlbGF5ICYmCisgICAgICAgIHZlcnNpb25zXy0+TnVtTGV2ZWxGaWxl
cygwKSA+PSBjb25maWc6OmtMMF9TbG93ZG93bldyaXRlc1RyaWdnZXIpIHsKKyAgICAgIC8vIFdl
IGFyZSBnZXR0aW5nIGNsb3NlIHRvIGhpdHRpbmcgYSBoYXJkIGxpbWl0IG9uIHRoZSBudW1iZXIg
b2YKKyAgICAgIC8vIEwwIGZpbGVzLiAgUmF0aGVyIHRoYW4gZGVsYXlpbmcgYSBzaW5nbGUgd3Jp
dGUgYnkgc2V2ZXJhbAorICAgICAgLy8gc2Vjb25kcyB3aGVuIHdlIGhpdCB0aGUgaGFyZCBsaW1p
dCwgc3RhcnQgZGVsYXlpbmcgZWFjaAorICAgICAgLy8gaW5kaXZpZHVhbCB3cml0ZSBieSAxbXMg
dG8gcmVkdWNlIGxhdGVuY3kgdmFyaWFuY2UuICBBbHNvLAorICAgICAgLy8gdGhpcyBkZWxheSBo
YW5kcyBvdmVyIHNvbWUgQ1BVIHRvIHRoZSBjb21wYWN0aW9uIHRocmVhZCBpbgorICAgICAgLy8g
Y2FzZSBpdCBpcyBzaGFyaW5nIHRoZSBzYW1lIGNvcmUgYXMgdGhlIHdyaXRlci4KKyAgICAgIG11
dGV4Xy5VbmxvY2soKTsKKyAgICAgIGVudl8tPlNsZWVwRm9yTWljcm9zZWNvbmRzKDEwMDApOwor
ICAgICAgYWxsb3dfZGVsYXkgPSBmYWxzZTsgIC8vIERvIG5vdCBkZWxheSBhIHNpbmdsZSB3cml0
ZSBtb3JlIHRoYW4gb25jZQorICAgICAgbXV0ZXhfLkxvY2soKTsKKyAgICB9IGVsc2UgaWYgKCFm
b3JjZSAmJgorICAgICAgICAgICAgICAgKG1lbV8tPkFwcHJveGltYXRlTWVtb3J5VXNhZ2UoKSA8
PSBvcHRpb25zXy53cml0ZV9idWZmZXJfc2l6ZSkpIHsKKyAgICAgIC8vIFRoZXJlIGlzIHJvb20g
aW4gY3VycmVudCBtZW10YWJsZQorICAgICAgYnJlYWs7CisgICAgfSBlbHNlIGlmIChpbW1fICE9
IE5VTEwpIHsKKyAgICAgIC8vIFdlIGhhdmUgZmlsbGVkIHVwIHRoZSBjdXJyZW50IG1lbXRhYmxl
LCBidXQgdGhlIHByZXZpb3VzCisgICAgICAvLyBvbmUgaXMgc3RpbGwgYmVpbmcgY29tcGFjdGVk
LCBzbyB3ZSB3YWl0LgorICAgICAgYmdfY3ZfLldhaXQoKTsKKyAgICB9IGVsc2UgaWYgKHZlcnNp
b25zXy0+TnVtTGV2ZWxGaWxlcygwKSA+PSBjb25maWc6OmtMMF9TdG9wV3JpdGVzVHJpZ2dlcikg
eworICAgICAgLy8gVGhlcmUgYXJlIHRvbyBtYW55IGxldmVsLTAgZmlsZXMuCisgICAgICBMb2co
b3B0aW9uc18uaW5mb19sb2csICJ3YWl0aW5nLi4uXG4iKTsKKyAgICAgIGJnX2N2Xy5XYWl0KCk7
CisgICAgfSBlbHNlIHsKKyAgICAgIC8vIEF0dGVtcHQgdG8gc3dpdGNoIHRvIGEgbmV3IG1lbXRh
YmxlIGFuZCB0cmlnZ2VyIGNvbXBhY3Rpb24gb2Ygb2xkCisgICAgICBhc3NlcnQodmVyc2lvbnNf
LT5QcmV2TG9nTnVtYmVyKCkgPT0gMCk7CisgICAgICB1aW50NjRfdCBuZXdfbG9nX251bWJlciA9
IHZlcnNpb25zXy0+TmV3RmlsZU51bWJlcigpOworICAgICAgV3JpdGFibGVGaWxlKiBsZmlsZSA9
IE5VTEw7CisgICAgICBzID0gZW52Xy0+TmV3V3JpdGFibGVGaWxlKExvZ0ZpbGVOYW1lKGRibmFt
ZV8sIG5ld19sb2dfbnVtYmVyKSwgJmxmaWxlKTsKKyAgICAgIGlmICghcy5vaygpKSB7CisgICAg
ICAgIC8vIEF2b2lkIGNoZXdpbmcgdGhyb3VnaCBmaWxlIG51bWJlciBzcGFjZSBpbiBhIHRpZ2h0
IGxvb3AuCisgICAgICAgIHZlcnNpb25zXy0+UmV1c2VGaWxlTnVtYmVyKG5ld19sb2dfbnVtYmVy
KTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBkZWxldGUgbG9nXzsKKyAgICAgIGRl
bGV0ZSBsb2dmaWxlXzsKKyAgICAgIGxvZ2ZpbGVfID0gbGZpbGU7CisgICAgICBsb2dmaWxlX251
bWJlcl8gPSBuZXdfbG9nX251bWJlcjsKKyAgICAgIGxvZ18gPSBuZXcgbG9nOjpXcml0ZXIobGZp
bGUpOworICAgICAgaW1tXyA9IG1lbV87CisgICAgICBoYXNfaW1tXy5SZWxlYXNlX1N0b3JlKGlt
bV8pOworICAgICAgbWVtXyA9IG5ldyBNZW1UYWJsZShpbnRlcm5hbF9jb21wYXJhdG9yXyk7Cisg
ICAgICBtZW1fLT5SZWYoKTsKKyAgICAgIGZvcmNlID0gZmFsc2U7ICAgLy8gRG8gbm90IGZvcmNl
IGFub3RoZXIgY29tcGFjdGlvbiBpZiBoYXZlIHJvb20KKyAgICAgIE1heWJlU2NoZWR1bGVDb21w
YWN0aW9uKCk7CisgICAgfQorICB9CisgIHJldHVybiBzOworfQorCitib29sIERCSW1wbDo6R2V0
UHJvcGVydHkoY29uc3QgU2xpY2UmIHByb3BlcnR5LCBzdGQ6OnN0cmluZyogdmFsdWUpIHsKKyAg
dmFsdWUtPmNsZWFyKCk7CisKKyAgTXV0ZXhMb2NrIGwoJm11dGV4Xyk7CisgIFNsaWNlIGluID0g
cHJvcGVydHk7CisgIFNsaWNlIHByZWZpeCgibGV2ZWxkYi4iKTsKKyAgaWYgKCFpbi5zdGFydHNf
d2l0aChwcmVmaXgpKSByZXR1cm4gZmFsc2U7CisgIGluLnJlbW92ZV9wcmVmaXgocHJlZml4LnNp
emUoKSk7CisKKyAgaWYgKGluLnN0YXJ0c193aXRoKCJudW0tZmlsZXMtYXQtbGV2ZWwiKSkgewor
ICAgIGluLnJlbW92ZV9wcmVmaXgoc3RybGVuKCJudW0tZmlsZXMtYXQtbGV2ZWwiKSk7CisgICAg
dWludDY0X3QgbGV2ZWw7CisgICAgYm9vbCBvayA9IENvbnN1bWVEZWNpbWFsTnVtYmVyKCZpbiwg
JmxldmVsKSAmJiBpbi5lbXB0eSgpOworICAgIGlmICghb2sgfHwgbGV2ZWwgPj0gY29uZmlnOjpr
TnVtTGV2ZWxzKSB7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBlbHNlIHsKKyAgICAgIGNo
YXIgYnVmWzEwMF07CisgICAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWQiLAorICAg
ICAgICAgICAgICAgdmVyc2lvbnNfLT5OdW1MZXZlbEZpbGVzKHN0YXRpY19jYXN0PGludD4obGV2
ZWwpKSk7CisgICAgICAqdmFsdWUgPSBidWY7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
IH0gZWxzZSBpZiAoaW4gPT0gInN0YXRzIikgeworICAgIGNoYXIgYnVmWzIwMF07CisgICAgc25w
cmludGYoYnVmLCBzaXplb2YoYnVmKSwKKyAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENvbXBhY3Rpb25zXG4iCisgICAgICAgICAgICAgIkxldmVsICBGaWxlcyBT
aXplKE1CKSBUaW1lKHNlYykgUmVhZChNQikgV3JpdGUoTUIpXG4iCisgICAgICAgICAgICAgIi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisgICAg
ICAgICAgICAgKTsKKyAgICB2YWx1ZS0+YXBwZW5kKGJ1Zik7CisgICAgZm9yIChpbnQgbGV2ZWwg
PSAwOyBsZXZlbCA8IGNvbmZpZzo6a051bUxldmVsczsgbGV2ZWwrKykgeworICAgICAgaW50IGZp
bGVzID0gdmVyc2lvbnNfLT5OdW1MZXZlbEZpbGVzKGxldmVsKTsKKyAgICAgIGlmIChzdGF0c19b
bGV2ZWxdLm1pY3JvcyA+IDAgfHwgZmlsZXMgPiAwKSB7CisgICAgICAgIHNucHJpbnRmKAorICAg
ICAgICAgICAgYnVmLCBzaXplb2YoYnVmKSwKKyAgICAgICAgICAgICIlM2QgJThkICU4LjBmICU5
LjBmICU4LjBmICU5LjBmXG4iLAorICAgICAgICAgICAgbGV2ZWwsCisgICAgICAgICAgICBmaWxl
cywKKyAgICAgICAgICAgIHZlcnNpb25zXy0+TnVtTGV2ZWxCeXRlcyhsZXZlbCkgLyAxMDQ4NTc2
LjAsCisgICAgICAgICAgICBzdGF0c19bbGV2ZWxdLm1pY3JvcyAvIDFlNiwKKyAgICAgICAgICAg
IHN0YXRzX1tsZXZlbF0uYnl0ZXNfcmVhZCAvIDEwNDg1NzYuMCwKKyAgICAgICAgICAgIHN0YXRz
X1tsZXZlbF0uYnl0ZXNfd3JpdHRlbiAvIDEwNDg1NzYuMCk7CisgICAgICAgIHZhbHVlLT5hcHBl
bmQoYnVmKTsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7CisgIH0gZWxzZSBpZiAo
aW4gPT0gInNzdGFibGVzIikgeworICAgICp2YWx1ZSA9IHZlcnNpb25zXy0+Y3VycmVudCgpLT5E
ZWJ1Z1N0cmluZygpOworICAgIHJldHVybiB0cnVlOworICB9CisKKyAgcmV0dXJuIGZhbHNlOwor
fQorCit2b2lkIERCSW1wbDo6R2V0QXBwcm94aW1hdGVTaXplcygKKyAgICBjb25zdCBSYW5nZSog
cmFuZ2UsIGludCBuLAorICAgIHVpbnQ2NF90KiBzaXplcykgeworICAvLyBUT0RPKG9wdCk6IGJl
dHRlciBpbXBsZW1lbnRhdGlvbgorICBWZXJzaW9uKiB2OworICB7CisgICAgTXV0ZXhMb2NrIGwo
Jm11dGV4Xyk7CisgICAgdmVyc2lvbnNfLT5jdXJyZW50KCktPlJlZigpOworICAgIHYgPSB2ZXJz
aW9uc18tPmN1cnJlbnQoKTsKKyAgfQorCisgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7
CisgICAgLy8gQ29udmVydCB1c2VyX2tleSBpbnRvIGEgY29ycmVzcG9uZGluZyBpbnRlcm5hbCBr
ZXkuCisgICAgSW50ZXJuYWxLZXkgazEocmFuZ2VbaV0uc3RhcnQsIGtNYXhTZXF1ZW5jZU51bWJl
ciwga1ZhbHVlVHlwZUZvclNlZWspOworICAgIEludGVybmFsS2V5IGsyKHJhbmdlW2ldLmxpbWl0
LCBrTWF4U2VxdWVuY2VOdW1iZXIsIGtWYWx1ZVR5cGVGb3JTZWVrKTsKKyAgICB1aW50NjRfdCBz
dGFydCA9IHZlcnNpb25zXy0+QXBwcm94aW1hdGVPZmZzZXRPZih2LCBrMSk7CisgICAgdWludDY0
X3QgbGltaXQgPSB2ZXJzaW9uc18tPkFwcHJveGltYXRlT2Zmc2V0T2YodiwgazIpOworICAgIHNp
emVzW2ldID0gKGxpbWl0ID49IHN0YXJ0ID8gbGltaXQgLSBzdGFydCA6IDApOworICB9CisKKyAg
eworICAgIE11dGV4TG9jayBsKCZtdXRleF8pOworICAgIHYtPlVucmVmKCk7CisgIH0KK30KKwor
Ly8gRGVmYXVsdCBpbXBsZW1lbnRhdGlvbnMgb2YgY29udmVuaWVuY2UgbWV0aG9kcyB0aGF0IHN1
YmNsYXNzZXMgb2YgREIKKy8vIGNhbiBjYWxsIGlmIHRoZXkgd2lzaAorU3RhdHVzIERCOjpQdXQo
Y29uc3QgV3JpdGVPcHRpb25zJiBvcHQsIGNvbnN0IFNsaWNlJiBrZXksIGNvbnN0IFNsaWNlJiB2
YWx1ZSkgeworICBXcml0ZUJhdGNoIGJhdGNoOworICBiYXRjaC5QdXQoa2V5LCB2YWx1ZSk7Cisg
IHJldHVybiBXcml0ZShvcHQsICZiYXRjaCk7Cit9CisKK1N0YXR1cyBEQjo6RGVsZXRlKGNvbnN0
IFdyaXRlT3B0aW9ucyYgb3B0LCBjb25zdCBTbGljZSYga2V5KSB7CisgIFdyaXRlQmF0Y2ggYmF0
Y2g7CisgIGJhdGNoLkRlbGV0ZShrZXkpOworICByZXR1cm4gV3JpdGUob3B0LCAmYmF0Y2gpOwor
fQorCitEQjo6fkRCKCkgeyB9CisKK1N0YXR1cyBEQjo6T3Blbihjb25zdCBPcHRpb25zJiBvcHRp
b25zLCBjb25zdCBzdGQ6OnN0cmluZyYgZGJuYW1lLAorICAgICAgICAgICAgICAgIERCKiogZGJw
dHIpIHsKKyAgKmRicHRyID0gTlVMTDsKKworICBEQkltcGwqIGltcGwgPSBuZXcgREJJbXBsKG9w
dGlvbnMsIGRibmFtZSk7CisgIGltcGwtPm11dGV4Xy5Mb2NrKCk7CisgIFZlcnNpb25FZGl0IGVk
aXQ7CisgIFN0YXR1cyBzID0gaW1wbC0+UmVjb3ZlcigmZWRpdCk7IC8vIEhhbmRsZXMgY3JlYXRl
X2lmX21pc3NpbmcsIGVycm9yX2lmX2V4aXN0cworICBpZiAocy5vaygpKSB7CisgICAgdWludDY0
X3QgbmV3X2xvZ19udW1iZXIgPSBpbXBsLT52ZXJzaW9uc18tPk5ld0ZpbGVOdW1iZXIoKTsKKyAg
ICBXcml0YWJsZUZpbGUqIGxmaWxlOworICAgIHMgPSBvcHRpb25zLmVudi0+TmV3V3JpdGFibGVG
aWxlKExvZ0ZpbGVOYW1lKGRibmFtZSwgbmV3X2xvZ19udW1iZXIpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICZsZmlsZSk7CisgICAgaWYgKHMub2soKSkgeworICAgICAg
ZWRpdC5TZXRMb2dOdW1iZXIobmV3X2xvZ19udW1iZXIpOworICAgICAgaW1wbC0+bG9nZmlsZV8g
PSBsZmlsZTsKKyAgICAgIGltcGwtPmxvZ2ZpbGVfbnVtYmVyXyA9IG5ld19sb2dfbnVtYmVyOwor
ICAgICAgaW1wbC0+bG9nXyA9IG5ldyBsb2c6OldyaXRlcihsZmlsZSk7CisgICAgICBzID0gaW1w
bC0+dmVyc2lvbnNfLT5Mb2dBbmRBcHBseSgmZWRpdCwgJmltcGwtPm11dGV4Xyk7CisgICAgfQor
ICAgIGlmIChzLm9rKCkpIHsKKyAgICAgIGltcGwtPkRlbGV0ZU9ic29sZXRlRmlsZXMoKTsKKyAg
ICAgIGltcGwtPk1heWJlU2NoZWR1bGVDb21wYWN0aW9uKCk7CisgICAgfQorICB9CisgIGltcGwt
Pm11dGV4Xy5VbmxvY2soKTsKKyAgaWYgKHMub2soKSkgeworICAgICpkYnB0ciA9IGltcGw7Cisg
IH0gZWxzZSB7CisgICAgZGVsZXRlIGltcGw7CisgIH0KKyAgcmV0dXJuIHM7Cit9CisKK1NuYXBz
aG90Ojp+U25hcHNob3QoKSB7Cit9CisKK1N0YXR1cyBEZXN0cm95REIoY29uc3Qgc3RkOjpzdHJp
bmcmIGRibmFtZSwgY29uc3QgT3B0aW9ucyYgb3B0aW9ucykgeworICBFbnYqIGVudiA9IG9wdGlv
bnMuZW52OworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZmlsZW5hbWVzOworICAvLyBJZ25v
cmUgZXJyb3IgaW4gY2FzZSBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QKKyAgZW52LT5HZXRDaGls
ZHJlbihkYm5hbWUsICZmaWxlbmFtZXMpOworICBpZiAoZmlsZW5hbWVzLmVtcHR5KCkpIHsKKyAg
ICByZXR1cm4gU3RhdHVzOjpPSygpOworICB9CisKKyAgRmlsZUxvY2sqIGxvY2s7CisgIGNvbnN0
IHN0ZDo6c3RyaW5nIGxvY2tuYW1lID0gTG9ja0ZpbGVOYW1lKGRibmFtZSk7CisgIFN0YXR1cyBy
ZXN1bHQgPSBlbnYtPkxvY2tGaWxlKGxvY2tuYW1lLCAmbG9jayk7CisgIGlmIChyZXN1bHQub2so
KSkgeworICAgIHVpbnQ2NF90IG51bWJlcjsKKyAgICBGaWxlVHlwZSB0eXBlOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgZmlsZW5hbWVzLnNpemUoKTsgaSsrKSB7CisgICAgICBpZiAoUGFy
c2VGaWxlTmFtZShmaWxlbmFtZXNbaV0sICZudW1iZXIsICZ0eXBlKSAmJgorICAgICAgICAgIHR5
cGUgIT0ga0RCTG9ja0ZpbGUpIHsgIC8vIExvY2sgZmlsZSB3aWxsIGJlIGRlbGV0ZWQgYXQgZW5k
CisgICAgICAgIFN0YXR1cyBkZWwgPSBlbnYtPkRlbGV0ZUZpbGUoZGJuYW1lICsgIi8iICsgZmls
ZW5hbWVzW2ldKTsKKyAgICAgICAgaWYgKHJlc3VsdC5vaygpICYmICFkZWwub2soKSkgeworICAg
ICAgICAgIHJlc3VsdCA9IGRlbDsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICBlbnYt
PlVubG9ja0ZpbGUobG9jayk7ICAvLyBJZ25vcmUgZXJyb3Igc2luY2Ugc3RhdGUgaXMgYWxyZWFk
eSBnb25lCisgICAgZW52LT5EZWxldGVGaWxlKGxvY2tuYW1lKTsKKyAgICBlbnYtPkRlbGV0ZURp
cihkYm5hbWUpOyAgLy8gSWdub3JlIGVycm9yIGluIGNhc2UgZGlyIGNvbnRhaW5zIG90aGVyIGZp
bGVzCisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvZGJfaW1wbC5oIGIvU291
cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9kYl9pbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmQyOWRkODA1
NTRiZTEzNThmNzMwMzllMjkzZmQ0NGQxZTQzNzgyNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvZGJfaW1wbC5oCkBAIC0wLDAgKzEsMjAyIEBACisvLyBD
b3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0
aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCisKKyNpZm5kZWYgU1RP
UkFHRV9MRVZFTERCX0RCX0RCX0lNUExfSF8KKyNkZWZpbmUgU1RPUkFHRV9MRVZFTERCX0RCX0RC
X0lNUExfSF8KKworI2luY2x1ZGUgPGRlcXVlPgorI2luY2x1ZGUgPHNldD4KKyNpbmNsdWRlICJk
Yi9kYmZvcm1hdC5oIgorI2luY2x1ZGUgImRiL2xvZ193cml0ZXIuaCIKKyNpbmNsdWRlICJkYi9z
bmFwc2hvdC5oIgorI2luY2x1ZGUgImxldmVsZGIvZGIuaCIKKyNpbmNsdWRlICJsZXZlbGRiL2Vu
di5oIgorI2luY2x1ZGUgInBvcnQvcG9ydC5oIgorI2luY2x1ZGUgInBvcnQvdGhyZWFkX2Fubm90
YXRpb25zLmgiCisKK25hbWVzcGFjZSBsZXZlbGRiIHsKKworY2xhc3MgTWVtVGFibGU7CitjbGFz
cyBUYWJsZUNhY2hlOworY2xhc3MgVmVyc2lvbjsKK2NsYXNzIFZlcnNpb25FZGl0OworY2xhc3Mg
VmVyc2lvblNldDsKKworY2xhc3MgREJJbXBsIDogcHVibGljIERCIHsKKyBwdWJsaWM6CisgIERC
SW1wbChjb25zdCBPcHRpb25zJiBvcHRpb25zLCBjb25zdCBzdGQ6OnN0cmluZyYgZGJuYW1lKTsK
KyAgdmlydHVhbCB+REJJbXBsKCk7CisKKyAgLy8gSW1wbGVtZW50YXRpb25zIG9mIHRoZSBEQiBp
bnRlcmZhY2UKKyAgdmlydHVhbCBTdGF0dXMgUHV0KGNvbnN0IFdyaXRlT3B0aW9ucyYsIGNvbnN0
IFNsaWNlJiBrZXksIGNvbnN0IFNsaWNlJiB2YWx1ZSk7CisgIHZpcnR1YWwgU3RhdHVzIERlbGV0
ZShjb25zdCBXcml0ZU9wdGlvbnMmLCBjb25zdCBTbGljZSYga2V5KTsKKyAgdmlydHVhbCBTdGF0
dXMgV3JpdGUoY29uc3QgV3JpdGVPcHRpb25zJiBvcHRpb25zLCBXcml0ZUJhdGNoKiB1cGRhdGVz
KTsKKyAgdmlydHVhbCBTdGF0dXMgR2V0KGNvbnN0IFJlYWRPcHRpb25zJiBvcHRpb25zLAorICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgU2xpY2UmIGtleSwKKyAgICAgICAgICAgICAgICAgICAg
IHN0ZDo6c3RyaW5nKiB2YWx1ZSk7CisgIHZpcnR1YWwgSXRlcmF0b3IqIE5ld0l0ZXJhdG9yKGNv
bnN0IFJlYWRPcHRpb25zJik7CisgIHZpcnR1YWwgY29uc3QgU25hcHNob3QqIEdldFNuYXBzaG90
KCk7CisgIHZpcnR1YWwgdm9pZCBSZWxlYXNlU25hcHNob3QoY29uc3QgU25hcHNob3QqIHNuYXBz
aG90KTsKKyAgdmlydHVhbCBib29sIEdldFByb3BlcnR5KGNvbnN0IFNsaWNlJiBwcm9wZXJ0eSwg
c3RkOjpzdHJpbmcqIHZhbHVlKTsKKyAgdmlydHVhbCB2b2lkIEdldEFwcHJveGltYXRlU2l6ZXMo
Y29uc3QgUmFuZ2UqIHJhbmdlLCBpbnQgbiwgdWludDY0X3QqIHNpemVzKTsKKyAgdmlydHVhbCB2
b2lkIENvbXBhY3RSYW5nZShjb25zdCBTbGljZSogYmVnaW4sIGNvbnN0IFNsaWNlKiBlbmQpOwor
CisgIC8vIEV4dHJhIG1ldGhvZHMgKGZvciB0ZXN0aW5nKSB0aGF0IGFyZSBub3QgaW4gdGhlIHB1
YmxpYyBEQiBpbnRlcmZhY2UKKworICAvLyBDb21wYWN0IGFueSBmaWxlcyBpbiB0aGUgbmFtZWQg
bGV2ZWwgdGhhdCBvdmVybGFwIFsqYmVnaW4sKmVuZF0KKyAgdm9pZCBURVNUX0NvbXBhY3RSYW5n
ZShpbnQgbGV2ZWwsIGNvbnN0IFNsaWNlKiBiZWdpbiwgY29uc3QgU2xpY2UqIGVuZCk7CisKKyAg
Ly8gRm9yY2UgY3VycmVudCBtZW10YWJsZSBjb250ZW50cyB0byBiZSBjb21wYWN0ZWQuCisgIFN0
YXR1cyBURVNUX0NvbXBhY3RNZW1UYWJsZSgpOworCisgIC8vIFJldHVybiBhbiBpbnRlcm5hbCBp
dGVyYXRvciBvdmVyIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBkYXRhYmFzZS4KKyAgLy8gVGhl
IGtleXMgb2YgdGhpcyBpdGVyYXRvciBhcmUgaW50ZXJuYWwga2V5cyAoc2VlIGZvcm1hdC5oKS4K
KyAgLy8gVGhlIHJldHVybmVkIGl0ZXJhdG9yIHNob3VsZCBiZSBkZWxldGVkIHdoZW4gbm8gbG9u
Z2VyIG5lZWRlZC4KKyAgSXRlcmF0b3IqIFRFU1RfTmV3SW50ZXJuYWxJdGVyYXRvcigpOworCisg
IC8vIFJldHVybiB0aGUgbWF4aW11bSBvdmVybGFwcGluZyBkYXRhIChpbiBieXRlcykgYXQgbmV4
dCBsZXZlbCBmb3IgYW55CisgIC8vIGZpbGUgYXQgYSBsZXZlbCA+PSAxLgorICBpbnQ2NF90IFRF
U1RfTWF4TmV4dExldmVsT3ZlcmxhcHBpbmdCeXRlcygpOworCisgcHJpdmF0ZToKKyAgZnJpZW5k
IGNsYXNzIERCOworICBzdHJ1Y3QgQ29tcGFjdGlvblN0YXRlOworICBzdHJ1Y3QgV3JpdGVyOwor
CisgIEl0ZXJhdG9yKiBOZXdJbnRlcm5hbEl0ZXJhdG9yKGNvbnN0IFJlYWRPcHRpb25zJiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VxdWVuY2VOdW1iZXIqIGxhdGVzdF9zbmFw
c2hvdCk7CisKKyAgU3RhdHVzIE5ld0RCKCk7CisKKyAgLy8gUmVjb3ZlciB0aGUgZGVzY3JpcHRv
ciBmcm9tIHBlcnNpc3RlbnQgc3RvcmFnZS4gIE1heSBkbyBhIHNpZ25pZmljYW50CisgIC8vIGFt
b3VudCBvZiB3b3JrIHRvIHJlY292ZXIgcmVjZW50bHkgbG9nZ2VkIHVwZGF0ZXMuICBBbnkgY2hh
bmdlcyB0bworICAvLyBiZSBtYWRlIHRvIHRoZSBkZXNjcmlwdG9yIGFyZSBhZGRlZCB0byAqZWRp
dC4KKyAgU3RhdHVzIFJlY292ZXIoVmVyc2lvbkVkaXQqIGVkaXQpIEVYQ0xVU0lWRV9MT0NLU19S
RVFVSVJFRChtdXRleF8pOworCisgIHZvaWQgTWF5YmVJZ25vcmVFcnJvcihTdGF0dXMqIHMpIGNv
bnN0OworCisgIC8vIERlbGV0ZSBhbnkgdW5uZWVkZWQgZmlsZXMgYW5kIHN0YWxlIGluLW1lbW9y
eSBlbnRyaWVzLgorICB2b2lkIERlbGV0ZU9ic29sZXRlRmlsZXMoKTsKKworICAvLyBDb21wYWN0
IHRoZSBpbi1tZW1vcnkgd3JpdGUgYnVmZmVyIHRvIGRpc2suICBTd2l0Y2hlcyB0byBhIG5ldwor
ICAvLyBsb2ctZmlsZS9tZW10YWJsZSBhbmQgd3JpdGVzIGEgbmV3IGRlc2NyaXB0b3IgaWZmIHN1
Y2Nlc3NmdWwuCisgIFN0YXR1cyBDb21wYWN0TWVtVGFibGUoKQorICAgICAgRVhDTFVTSVZFX0xP
Q0tTX1JFUVVJUkVEKG11dGV4Xyk7CisKKyAgU3RhdHVzIFJlY292ZXJMb2dGaWxlKHVpbnQ2NF90
IGxvZ19udW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uRWRpdCogZWRpdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgIFNlcXVlbmNlTnVtYmVyKiBtYXhfc2VxdWVuY2UpCisg
ICAgICBFWENMVVNJVkVfTE9DS1NfUkVRVUlSRUQobXV0ZXhfKTsKKworICBTdGF0dXMgV3JpdGVM
ZXZlbDBUYWJsZShNZW1UYWJsZSogbWVtLCBWZXJzaW9uRWRpdCogZWRpdCwgVmVyc2lvbiogYmFz
ZSkKKyAgICAgIEVYQ0xVU0lWRV9MT0NLU19SRVFVSVJFRChtdXRleF8pOworCisgIFN0YXR1cyBN
YWtlUm9vbUZvcldyaXRlKGJvb2wgZm9yY2UgLyogY29tcGFjdCBldmVuIGlmIHRoZXJlIGlzIHJv
b20/ICovKQorICAgICAgRVhDTFVTSVZFX0xPQ0tTX1JFUVVJUkVEKG11dGV4Xyk7CisgIFdyaXRl
QmF0Y2gqIEJ1aWxkQmF0Y2hHcm91cChXcml0ZXIqKiBsYXN0X3dyaXRlcik7CisKKyAgdm9pZCBN
YXliZVNjaGVkdWxlQ29tcGFjdGlvbigpIEVYQ0xVU0lWRV9MT0NLU19SRVFVSVJFRChtdXRleF8p
OworICBzdGF0aWMgdm9pZCBCR1dvcmsodm9pZCogZGIpOworICB2b2lkIEJhY2tncm91bmRDYWxs
KCk7CisgIFN0YXR1cyBCYWNrZ3JvdW5kQ29tcGFjdGlvbigpIEVYQ0xVU0lWRV9MT0NLU19SRVFV
SVJFRChtdXRleF8pOworICB2b2lkIENsZWFudXBDb21wYWN0aW9uKENvbXBhY3Rpb25TdGF0ZSog
Y29tcGFjdCkKKyAgICAgIEVYQ0xVU0lWRV9MT0NLU19SRVFVSVJFRChtdXRleF8pOworICBTdGF0
dXMgRG9Db21wYWN0aW9uV29yayhDb21wYWN0aW9uU3RhdGUqIGNvbXBhY3QpCisgICAgICBFWENM
VVNJVkVfTE9DS1NfUkVRVUlSRUQobXV0ZXhfKTsKKworICBTdGF0dXMgT3BlbkNvbXBhY3Rpb25P
dXRwdXRGaWxlKENvbXBhY3Rpb25TdGF0ZSogY29tcGFjdCk7CisgIFN0YXR1cyBGaW5pc2hDb21w
YWN0aW9uT3V0cHV0RmlsZShDb21wYWN0aW9uU3RhdGUqIGNvbXBhY3QsIEl0ZXJhdG9yKiBpbnB1
dCk7CisgIFN0YXR1cyBJbnN0YWxsQ29tcGFjdGlvblJlc3VsdHMoQ29tcGFjdGlvblN0YXRlKiBj
b21wYWN0KQorICAgICAgRVhDTFVTSVZFX0xPQ0tTX1JFUVVJUkVEKG11dGV4Xyk7CisKKyAgLy8g
Q29uc3RhbnQgYWZ0ZXIgY29uc3RydWN0aW9uCisgIEVudiogY29uc3QgZW52XzsKKyAgY29uc3Qg
SW50ZXJuYWxLZXlDb21wYXJhdG9yIGludGVybmFsX2NvbXBhcmF0b3JfOworICBjb25zdCBJbnRl
cm5hbEZpbHRlclBvbGljeSBpbnRlcm5hbF9maWx0ZXJfcG9saWN5XzsKKyAgY29uc3QgT3B0aW9u
cyBvcHRpb25zXzsgIC8vIG9wdGlvbnNfLmNvbXBhcmF0b3IgPT0gJmludGVybmFsX2NvbXBhcmF0
b3JfCisgIGJvb2wgb3duc19pbmZvX2xvZ187CisgIGJvb2wgb3duc19jYWNoZV87CisgIGNvbnN0
IHN0ZDo6c3RyaW5nIGRibmFtZV87CisKKyAgLy8gdGFibGVfY2FjaGVfIHByb3ZpZGVzIGl0cyBv
d24gc3luY2hyb25pemF0aW9uCisgIFRhYmxlQ2FjaGUqIHRhYmxlX2NhY2hlXzsKKworICAvLyBM
b2NrIG92ZXIgdGhlIHBlcnNpc3RlbnQgREIgc3RhdGUuICBOb24tTlVMTCBpZmYgc3VjY2Vzc2Z1
bGx5IGFjcXVpcmVkLgorICBGaWxlTG9jayogZGJfbG9ja187CisKKyAgLy8gU3RhdGUgYmVsb3cg
aXMgcHJvdGVjdGVkIGJ5IG11dGV4XworICBwb3J0OjpNdXRleCBtdXRleF87CisgIHBvcnQ6OkF0
b21pY1BvaW50ZXIgc2h1dHRpbmdfZG93bl87CisgIHBvcnQ6OkNvbmRWYXIgYmdfY3ZfOyAgICAg
ICAgICAvLyBTaWduYWxsZWQgd2hlbiBiYWNrZ3JvdW5kIHdvcmsgZmluaXNoZXMKKyAgTWVtVGFi
bGUqIG1lbV87CisgIE1lbVRhYmxlKiBpbW1fOyAgICAgICAgICAgICAgICAvLyBNZW10YWJsZSBi
ZWluZyBjb21wYWN0ZWQKKyAgcG9ydDo6QXRvbWljUG9pbnRlciBoYXNfaW1tXzsgIC8vIFNvIGJn
IHRocmVhZCBjYW4gZGV0ZWN0IG5vbi1OVUxMIGltbV8KKyAgV3JpdGFibGVGaWxlKiBsb2dmaWxl
XzsKKyAgdWludDY0X3QgbG9nZmlsZV9udW1iZXJfOworICBsb2c6OldyaXRlciogbG9nXzsKKwor
ICAvLyBRdWV1ZSBvZiB3cml0ZXJzLgorICBzdGQ6OmRlcXVlPFdyaXRlcio+IHdyaXRlcnNfOwor
ICBXcml0ZUJhdGNoKiB0bXBfYmF0Y2hfOworCisgIFNuYXBzaG90TGlzdCBzbmFwc2hvdHNfOwor
CisgIC8vIFNldCBvZiB0YWJsZSBmaWxlcyB0byBwcm90ZWN0IGZyb20gZGVsZXRpb24gYmVjYXVz
ZSB0aGV5IGFyZQorICAvLyBwYXJ0IG9mIG9uZ29pbmcgY29tcGFjdGlvbnMuCisgIHN0ZDo6c2V0
PHVpbnQ2NF90PiBwZW5kaW5nX291dHB1dHNfOworCisgIC8vIEhhcyBhIGJhY2tncm91bmQgY29t
cGFjdGlvbiBiZWVuIHNjaGVkdWxlZCBvciBpcyBydW5uaW5nPworICBib29sIGJnX2NvbXBhY3Rp
b25fc2NoZWR1bGVkXzsKKworICAvLyBJbmZvcm1hdGlvbiBmb3IgYSBtYW51YWwgY29tcGFjdGlv
bgorICBzdHJ1Y3QgTWFudWFsQ29tcGFjdGlvbiB7CisgICAgaW50IGxldmVsOworICAgIGJvb2wg
ZG9uZTsKKyAgICBjb25zdCBJbnRlcm5hbEtleSogYmVnaW47ICAgLy8gTlVMTCBtZWFucyBiZWdp
bm5pbmcgb2Yga2V5IHJhbmdlCisgICAgY29uc3QgSW50ZXJuYWxLZXkqIGVuZDsgICAgIC8vIE5V
TEwgbWVhbnMgZW5kIG9mIGtleSByYW5nZQorICAgIEludGVybmFsS2V5IHRtcF9zdG9yYWdlOyAg
ICAvLyBVc2VkIHRvIGtlZXAgdHJhY2sgb2YgY29tcGFjdGlvbiBwcm9ncmVzcworICB9OworICBN
YW51YWxDb21wYWN0aW9uKiBtYW51YWxfY29tcGFjdGlvbl87CisKKyAgVmVyc2lvblNldCogdmVy
c2lvbnNfOworCisgIC8vIEhhdmUgd2UgZW5jb3VudGVyZWQgYSBiYWNrZ3JvdW5kIGVycm9yIGlu
IHBhcmFub2lkIG1vZGU/CisgIFN0YXR1cyBiZ19lcnJvcl87CisKKyAgLy8gUGVyIGxldmVsIGNv
bXBhY3Rpb24gc3RhdHMuICBzdGF0c19bbGV2ZWxdIHN0b3JlcyB0aGUgc3RhdHMgZm9yCisgIC8v
IGNvbXBhY3Rpb25zIHRoYXQgcHJvZHVjZWQgZGF0YSBmb3IgdGhlIHNwZWNpZmllZCAibGV2ZWwi
LgorICBzdHJ1Y3QgQ29tcGFjdGlvblN0YXRzIHsKKyAgICBpbnQ2NF90IG1pY3JvczsKKyAgICBp
bnQ2NF90IGJ5dGVzX3JlYWQ7CisgICAgaW50NjRfdCBieXRlc193cml0dGVuOworCisgICAgQ29t
cGFjdGlvblN0YXRzKCkgOiBtaWNyb3MoMCksIGJ5dGVzX3JlYWQoMCksIGJ5dGVzX3dyaXR0ZW4o
MCkgeyB9CisKKyAgICB2b2lkIEFkZChjb25zdCBDb21wYWN0aW9uU3RhdHMmIGMpIHsKKyAgICAg
IHRoaXMtPm1pY3JvcyArPSBjLm1pY3JvczsKKyAgICAgIHRoaXMtPmJ5dGVzX3JlYWQgKz0gYy5i
eXRlc19yZWFkOworICAgICAgdGhpcy0+Ynl0ZXNfd3JpdHRlbiArPSBjLmJ5dGVzX3dyaXR0ZW47
CisgICAgfQorICB9OworICBDb21wYWN0aW9uU3RhdHMgc3RhdHNfW2NvbmZpZzo6a051bUxldmVs
c107CisKKyAgLy8gTm8gY29weWluZyBhbGxvd2VkCisgIERCSW1wbChjb25zdCBEQkltcGwmKTsK
KyAgdm9pZCBvcGVyYXRvcj0oY29uc3QgREJJbXBsJik7CisKKyAgY29uc3QgQ29tcGFyYXRvciog
dXNlcl9jb21wYXJhdG9yKCkgY29uc3QgeworICAgIHJldHVybiBpbnRlcm5hbF9jb21wYXJhdG9y
Xy51c2VyX2NvbXBhcmF0b3IoKTsKKyAgfQorfTsKKworLy8gU2FuaXRpemUgZGIgb3B0aW9ucy4g
IFRoZSBjYWxsZXIgc2hvdWxkIGRlbGV0ZSByZXN1bHQuaW5mb19sb2cgaWYKKy8vIGl0IGlzIG5v
dCBlcXVhbCB0byBzcmMuaW5mb19sb2cuCitleHRlcm4gT3B0aW9ucyBTYW5pdGl6ZU9wdGlvbnMo
Y29uc3Qgc3RkOjpzdHJpbmcmIGRiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEludGVybmFsS2V5Q29tcGFyYXRvciogaWNtcCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBJbnRlcm5hbEZpbHRlclBvbGljeSogaXBvbGljeSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBPcHRpb25zJiBzcmMpOworCit9ICAvLyBuYW1lc3Bh
Y2UgbGV2ZWxkYgorCisjZW5kaWYgIC8vIFNUT1JBR0VfTEVWRUxEQl9EQl9EQl9JTVBMX0hfCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2RiX2l0ZXIuY2MgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2RiX2l0ZXIuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODdkY2EyZGVk
NDY0NTNkZWM1ZTA0Y2VmNjUyZDI1NDUwODZhZjQ4NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvZGJfaXRlci5jYwpAQCAtMCwwICsxLDI5OSBAQAorLy8g
Q29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUg
dGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgorCisjaW5jbHVkZSAi
ZGIvZGJfaXRlci5oIgorCisjaW5jbHVkZSAiZGIvZmlsZW5hbWUuaCIKKyNpbmNsdWRlICJkYi9k
YmZvcm1hdC5oIgorI2luY2x1ZGUgImxldmVsZGIvZW52LmgiCisjaW5jbHVkZSAibGV2ZWxkYi9p
dGVyYXRvci5oIgorI2luY2x1ZGUgInBvcnQvcG9ydC5oIgorI2luY2x1ZGUgInV0aWwvbG9nZ2lu
Zy5oIgorI2luY2x1ZGUgInV0aWwvbXV0ZXhsb2NrLmgiCisKK25hbWVzcGFjZSBsZXZlbGRiIHsK
KworI2lmIDAKK3N0YXRpYyB2b2lkIER1bXBJbnRlcm5hbEl0ZXIoSXRlcmF0b3IqIGl0ZXIpIHsK
KyAgZm9yIChpdGVyLT5TZWVrVG9GaXJzdCgpOyBpdGVyLT5WYWxpZCgpOyBpdGVyLT5OZXh0KCkp
IHsKKyAgICBQYXJzZWRJbnRlcm5hbEtleSBrOworICAgIGlmICghUGFyc2VJbnRlcm5hbEtleShp
dGVyLT5rZXkoKSwgJmspKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvcnJ1cHQgJyVzJ1xu
IiwgRXNjYXBlU3RyaW5nKGl0ZXItPmtleSgpKS5jX3N0cigpKTsKKyAgICB9IGVsc2UgeworICAg
ICAgZnByaW50ZihzdGRlcnIsICJAICclcydcbiIsIGsuRGVidWdTdHJpbmcoKS5jX3N0cigpKTsK
KyAgICB9CisgIH0KK30KKyNlbmRpZgorCituYW1lc3BhY2UgeworCisvLyBNZW10YWJsZXMgYW5k
IHNzdGFibGVzIHRoYXQgbWFrZSB0aGUgREIgcmVwcmVzZW50YXRpb24gY29udGFpbgorLy8gKHVz
ZXJrZXksc2VxLHR5cGUpID0+IHVzZXJ2YWx1ZSBlbnRyaWVzLiAgREJJdGVyCisvLyBjb21iaW5l
cyBtdWx0aXBsZSBlbnRyaWVzIGZvciB0aGUgc2FtZSB1c2Vya2V5IGZvdW5kIGluIHRoZSBEQgor
Ly8gcmVwcmVzZW50YXRpb24gaW50byBhIHNpbmdsZSBlbnRyeSB3aGlsZSBhY2NvdW50aW5nIGZv
ciBzZXF1ZW5jZQorLy8gbnVtYmVycywgZGVsZXRpb24gbWFya2Vycywgb3ZlcndyaXRlcywgZXRj
LgorY2xhc3MgREJJdGVyOiBwdWJsaWMgSXRlcmF0b3IgeworIHB1YmxpYzoKKyAgLy8gV2hpY2gg
ZGlyZWN0aW9uIGlzIHRoZSBpdGVyYXRvciBjdXJyZW50bHkgbW92aW5nPworICAvLyAoMSkgV2hl
biBtb3ZpbmcgZm9yd2FyZCwgdGhlIGludGVybmFsIGl0ZXJhdG9yIGlzIHBvc2l0aW9uZWQgYXQK
KyAgLy8gICAgIHRoZSBleGFjdCBlbnRyeSB0aGF0IHlpZWxkcyB0aGlzLT5rZXkoKSwgdGhpcy0+
dmFsdWUoKQorICAvLyAoMikgV2hlbiBtb3ZpbmcgYmFja3dhcmRzLCB0aGUgaW50ZXJuYWwgaXRl
cmF0b3IgaXMgcG9zaXRpb25lZAorICAvLyAgICAganVzdCBiZWZvcmUgYWxsIGVudHJpZXMgd2hv
c2UgdXNlciBrZXkgPT0gdGhpcy0+a2V5KCkuCisgIGVudW0gRGlyZWN0aW9uIHsKKyAgICBrRm9y
d2FyZCwKKyAgICBrUmV2ZXJzZQorICB9OworCisgIERCSXRlcihjb25zdCBzdGQ6OnN0cmluZyog
ZGJuYW1lLCBFbnYqIGVudiwKKyAgICAgICAgIGNvbnN0IENvbXBhcmF0b3IqIGNtcCwgSXRlcmF0
b3IqIGl0ZXIsIFNlcXVlbmNlTnVtYmVyIHMpCisgICAgICA6IGRibmFtZV8oZGJuYW1lKSwKKyAg
ICAgICAgZW52XyhlbnYpLAorICAgICAgICB1c2VyX2NvbXBhcmF0b3JfKGNtcCksCisgICAgICAg
IGl0ZXJfKGl0ZXIpLAorICAgICAgICBzZXF1ZW5jZV8ocyksCisgICAgICAgIGRpcmVjdGlvbl8o
a0ZvcndhcmQpLAorICAgICAgICB2YWxpZF8oZmFsc2UpIHsKKyAgfQorICB2aXJ0dWFsIH5EQkl0
ZXIoKSB7CisgICAgZGVsZXRlIGl0ZXJfOworICB9CisgIHZpcnR1YWwgYm9vbCBWYWxpZCgpIGNv
bnN0IHsgcmV0dXJuIHZhbGlkXzsgfQorICB2aXJ0dWFsIFNsaWNlIGtleSgpIGNvbnN0IHsKKyAg
ICBhc3NlcnQodmFsaWRfKTsKKyAgICByZXR1cm4gKGRpcmVjdGlvbl8gPT0ga0ZvcndhcmQpID8g
RXh0cmFjdFVzZXJLZXkoaXRlcl8tPmtleSgpKSA6IHNhdmVkX2tleV87CisgIH0KKyAgdmlydHVh
bCBTbGljZSB2YWx1ZSgpIGNvbnN0IHsKKyAgICBhc3NlcnQodmFsaWRfKTsKKyAgICByZXR1cm4g
KGRpcmVjdGlvbl8gPT0ga0ZvcndhcmQpID8gaXRlcl8tPnZhbHVlKCkgOiBzYXZlZF92YWx1ZV87
CisgIH0KKyAgdmlydHVhbCBTdGF0dXMgc3RhdHVzKCkgY29uc3QgeworICAgIGlmIChzdGF0dXNf
Lm9rKCkpIHsKKyAgICAgIHJldHVybiBpdGVyXy0+c3RhdHVzKCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgIHJldHVybiBzdGF0dXNfOworICAgIH0KKyAgfQorCisgIHZpcnR1YWwgdm9pZCBOZXh0KCk7
CisgIHZpcnR1YWwgdm9pZCBQcmV2KCk7CisgIHZpcnR1YWwgdm9pZCBTZWVrKGNvbnN0IFNsaWNl
JiB0YXJnZXQpOworICB2aXJ0dWFsIHZvaWQgU2Vla1RvRmlyc3QoKTsKKyAgdmlydHVhbCB2b2lk
IFNlZWtUb0xhc3QoKTsKKworIHByaXZhdGU6CisgIHZvaWQgRmluZE5leHRVc2VyRW50cnkoYm9v
bCBza2lwcGluZywgc3RkOjpzdHJpbmcqIHNraXApOworICB2b2lkIEZpbmRQcmV2VXNlckVudHJ5
KCk7CisgIGJvb2wgUGFyc2VLZXkoUGFyc2VkSW50ZXJuYWxLZXkqIGtleSk7CisKKyAgaW5saW5l
IHZvaWQgU2F2ZUtleShjb25zdCBTbGljZSYgaywgc3RkOjpzdHJpbmcqIGRzdCkgeworICAgIGRz
dC0+YXNzaWduKGsuZGF0YSgpLCBrLnNpemUoKSk7CisgIH0KKworICBpbmxpbmUgdm9pZCBDbGVh
clNhdmVkVmFsdWUoKSB7CisgICAgaWYgKHNhdmVkX3ZhbHVlXy5jYXBhY2l0eSgpID4gMTA0ODU3
NikgeworICAgICAgc3RkOjpzdHJpbmcgZW1wdHk7CisgICAgICBzd2FwKGVtcHR5LCBzYXZlZF92
YWx1ZV8pOworICAgIH0gZWxzZSB7CisgICAgICBzYXZlZF92YWx1ZV8uY2xlYXIoKTsKKyAgICB9
CisgIH0KKworICBjb25zdCBzdGQ6OnN0cmluZyogY29uc3QgZGJuYW1lXzsKKyAgRW52KiBjb25z
dCBlbnZfOworICBjb25zdCBDb21wYXJhdG9yKiBjb25zdCB1c2VyX2NvbXBhcmF0b3JfOworICBJ
dGVyYXRvciogY29uc3QgaXRlcl87CisgIFNlcXVlbmNlTnVtYmVyIGNvbnN0IHNlcXVlbmNlXzsK
KworICBTdGF0dXMgc3RhdHVzXzsKKyAgc3RkOjpzdHJpbmcgc2F2ZWRfa2V5XzsgICAgIC8vID09
IGN1cnJlbnQga2V5IHdoZW4gZGlyZWN0aW9uXz09a1JldmVyc2UKKyAgc3RkOjpzdHJpbmcgc2F2
ZWRfdmFsdWVfOyAgIC8vID09IGN1cnJlbnQgcmF3IHZhbHVlIHdoZW4gZGlyZWN0aW9uXz09a1Jl
dmVyc2UKKyAgRGlyZWN0aW9uIGRpcmVjdGlvbl87CisgIGJvb2wgdmFsaWRfOworCisgIC8vIE5v
IGNvcHlpbmcgYWxsb3dlZAorICBEQkl0ZXIoY29uc3QgREJJdGVyJik7CisgIHZvaWQgb3BlcmF0
b3I9KGNvbnN0IERCSXRlciYpOworfTsKKworaW5saW5lIGJvb2wgREJJdGVyOjpQYXJzZUtleShQ
YXJzZWRJbnRlcm5hbEtleSogaWtleSkgeworICBpZiAoIVBhcnNlSW50ZXJuYWxLZXkoaXRlcl8t
PmtleSgpLCBpa2V5KSkgeworICAgIHN0YXR1c18gPSBTdGF0dXM6OkNvcnJ1cHRpb24oImNvcnJ1
cHRlZCBpbnRlcm5hbCBrZXkgaW4gREJJdGVyIik7CisgICAgcmV0dXJuIGZhbHNlOworICB9IGVs
c2UgeworICAgIHJldHVybiB0cnVlOworICB9Cit9CisKK3ZvaWQgREJJdGVyOjpOZXh0KCkgewor
ICBhc3NlcnQodmFsaWRfKTsKKworICBpZiAoZGlyZWN0aW9uXyA9PSBrUmV2ZXJzZSkgeyAgLy8g
U3dpdGNoIGRpcmVjdGlvbnM/CisgICAgZGlyZWN0aW9uXyA9IGtGb3J3YXJkOworICAgIC8vIGl0
ZXJfIGlzIHBvaW50aW5nIGp1c3QgYmVmb3JlIHRoZSBlbnRyaWVzIGZvciB0aGlzLT5rZXkoKSwK
KyAgICAvLyBzbyBhZHZhbmNlIGludG8gdGhlIHJhbmdlIG9mIGVudHJpZXMgZm9yIHRoaXMtPmtl
eSgpIGFuZCB0aGVuCisgICAgLy8gdXNlIHRoZSBub3JtYWwgc2tpcHBpbmcgY29kZSBiZWxvdy4K
KyAgICBpZiAoIWl0ZXJfLT5WYWxpZCgpKSB7CisgICAgICBpdGVyXy0+U2Vla1RvRmlyc3QoKTsK
KyAgICB9IGVsc2UgeworICAgICAgaXRlcl8tPk5leHQoKTsKKyAgICB9CisgICAgaWYgKCFpdGVy
Xy0+VmFsaWQoKSkgeworICAgICAgdmFsaWRfID0gZmFsc2U7CisgICAgICBzYXZlZF9rZXlfLmNs
ZWFyKCk7CisgICAgICByZXR1cm47CisgICAgfQorICB9CisKKyAgLy8gVGVtcG9yYXJpbHkgdXNl
IHNhdmVkX2tleV8gYXMgc3RvcmFnZSBmb3Iga2V5IHRvIHNraXAuCisgIHN0ZDo6c3RyaW5nKiBz
a2lwID0gJnNhdmVkX2tleV87CisgIFNhdmVLZXkoRXh0cmFjdFVzZXJLZXkoaXRlcl8tPmtleSgp
KSwgc2tpcCk7CisgIEZpbmROZXh0VXNlckVudHJ5KHRydWUsIHNraXApOworfQorCit2b2lkIERC
SXRlcjo6RmluZE5leHRVc2VyRW50cnkoYm9vbCBza2lwcGluZywgc3RkOjpzdHJpbmcqIHNraXAp
IHsKKyAgLy8gTG9vcCB1bnRpbCB3ZSBoaXQgYW4gYWNjZXB0YWJsZSBlbnRyeSB0byB5aWVsZAor
ICBhc3NlcnQoaXRlcl8tPlZhbGlkKCkpOworICBhc3NlcnQoZGlyZWN0aW9uXyA9PSBrRm9yd2Fy
ZCk7CisgIGRvIHsKKyAgICBQYXJzZWRJbnRlcm5hbEtleSBpa2V5OworICAgIGlmIChQYXJzZUtl
eSgmaWtleSkgJiYgaWtleS5zZXF1ZW5jZSA8PSBzZXF1ZW5jZV8pIHsKKyAgICAgIHN3aXRjaCAo
aWtleS50eXBlKSB7CisgICAgICAgIGNhc2Uga1R5cGVEZWxldGlvbjoKKyAgICAgICAgICAvLyBB
cnJhbmdlIHRvIHNraXAgYWxsIHVwY29taW5nIGVudHJpZXMgZm9yIHRoaXMga2V5IHNpbmNlCisg
ICAgICAgICAgLy8gdGhleSBhcmUgaGlkZGVuIGJ5IHRoaXMgZGVsZXRpb24uCisgICAgICAgICAg
U2F2ZUtleShpa2V5LnVzZXJfa2V5LCBza2lwKTsKKyAgICAgICAgICBza2lwcGluZyA9IHRydWU7
CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Uga1R5cGVWYWx1ZToKKyAgICAgICAgICBp
ZiAoc2tpcHBpbmcgJiYKKyAgICAgICAgICAgICAgdXNlcl9jb21wYXJhdG9yXy0+Q29tcGFyZShp
a2V5LnVzZXJfa2V5LCAqc2tpcCkgPD0gMCkgeworICAgICAgICAgICAgLy8gRW50cnkgaGlkZGVu
CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhbGlkXyA9IHRydWU7CisgICAgICAg
ICAgICBzYXZlZF9rZXlfLmNsZWFyKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
fQorICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgICBpdGVyXy0+TmV4dCgpOwor
ICB9IHdoaWxlIChpdGVyXy0+VmFsaWQoKSk7CisgIHNhdmVkX2tleV8uY2xlYXIoKTsKKyAgdmFs
aWRfID0gZmFsc2U7Cit9CisKK3ZvaWQgREJJdGVyOjpQcmV2KCkgeworICBhc3NlcnQodmFsaWRf
KTsKKworICBpZiAoZGlyZWN0aW9uXyA9PSBrRm9yd2FyZCkgeyAgLy8gU3dpdGNoIGRpcmVjdGlv
bnM/CisgICAgLy8gaXRlcl8gaXMgcG9pbnRpbmcgYXQgdGhlIGN1cnJlbnQgZW50cnkuICBTY2Fu
IGJhY2t3YXJkcyB1bnRpbAorICAgIC8vIHRoZSBrZXkgY2hhbmdlcyBzbyB3ZSBjYW4gdXNlIHRo
ZSBub3JtYWwgcmV2ZXJzZSBzY2FubmluZyBjb2RlLgorICAgIGFzc2VydChpdGVyXy0+VmFsaWQo
KSk7ICAvLyBPdGhlcndpc2UgdmFsaWRfIHdvdWxkIGhhdmUgYmVlbiBmYWxzZQorICAgIFNhdmVL
ZXkoRXh0cmFjdFVzZXJLZXkoaXRlcl8tPmtleSgpKSwgJnNhdmVkX2tleV8pOworICAgIHdoaWxl
ICh0cnVlKSB7CisgICAgICBpdGVyXy0+UHJldigpOworICAgICAgaWYgKCFpdGVyXy0+VmFsaWQo
KSkgeworICAgICAgICB2YWxpZF8gPSBmYWxzZTsKKyAgICAgICAgc2F2ZWRfa2V5Xy5jbGVhcigp
OworICAgICAgICBDbGVhclNhdmVkVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQor
ICAgICAgaWYgKHVzZXJfY29tcGFyYXRvcl8tPkNvbXBhcmUoRXh0cmFjdFVzZXJLZXkoaXRlcl8t
PmtleSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVkX2tleV8p
IDwgMCkgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgICAgZGlyZWN0aW9uXyA9
IGtSZXZlcnNlOworICB9CisKKyAgRmluZFByZXZVc2VyRW50cnkoKTsKK30KKwordm9pZCBEQkl0
ZXI6OkZpbmRQcmV2VXNlckVudHJ5KCkgeworICBhc3NlcnQoZGlyZWN0aW9uXyA9PSBrUmV2ZXJz
ZSk7CisKKyAgVmFsdWVUeXBlIHZhbHVlX3R5cGUgPSBrVHlwZURlbGV0aW9uOworICBpZiAoaXRl
cl8tPlZhbGlkKCkpIHsKKyAgICBkbyB7CisgICAgICBQYXJzZWRJbnRlcm5hbEtleSBpa2V5Owor
ICAgICAgaWYgKFBhcnNlS2V5KCZpa2V5KSAmJiBpa2V5LnNlcXVlbmNlIDw9IHNlcXVlbmNlXykg
eworICAgICAgICBpZiAoKHZhbHVlX3R5cGUgIT0ga1R5cGVEZWxldGlvbikgJiYKKyAgICAgICAg
ICAgIHVzZXJfY29tcGFyYXRvcl8tPkNvbXBhcmUoaWtleS51c2VyX2tleSwgc2F2ZWRfa2V5Xykg
PCAwKSB7CisgICAgICAgICAgLy8gV2UgZW5jb3VudGVyZWQgYSBub24tZGVsZXRlZCB2YWx1ZSBp
biBlbnRyaWVzIGZvciBwcmV2aW91cyBrZXlzLAorICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIHZhbHVlX3R5cGUgPSBpa2V5LnR5cGU7CisgICAgICAgIGlmICh2YWx1ZV90eXBl
ID09IGtUeXBlRGVsZXRpb24pIHsKKyAgICAgICAgICBzYXZlZF9rZXlfLmNsZWFyKCk7CisgICAg
ICAgICAgQ2xlYXJTYXZlZFZhbHVlKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgU2xp
Y2UgcmF3X3ZhbHVlID0gaXRlcl8tPnZhbHVlKCk7CisgICAgICAgICAgaWYgKHNhdmVkX3ZhbHVl
Xy5jYXBhY2l0eSgpID4gcmF3X3ZhbHVlLnNpemUoKSArIDEwNDg1NzYpIHsKKyAgICAgICAgICAg
IHN0ZDo6c3RyaW5nIGVtcHR5OworICAgICAgICAgICAgc3dhcChlbXB0eSwgc2F2ZWRfdmFsdWVf
KTsKKyAgICAgICAgICB9CisgICAgICAgICAgU2F2ZUtleShFeHRyYWN0VXNlcktleShpdGVyXy0+
a2V5KCkpLCAmc2F2ZWRfa2V5Xyk7CisgICAgICAgICAgc2F2ZWRfdmFsdWVfLmFzc2lnbihyYXdf
dmFsdWUuZGF0YSgpLCByYXdfdmFsdWUuc2l6ZSgpKTsKKyAgICAgICAgfQorICAgICAgfQorICAg
ICAgaXRlcl8tPlByZXYoKTsKKyAgICB9IHdoaWxlIChpdGVyXy0+VmFsaWQoKSk7CisgIH0KKwor
ICBpZiAodmFsdWVfdHlwZSA9PSBrVHlwZURlbGV0aW9uKSB7CisgICAgLy8gRW5kCisgICAgdmFs
aWRfID0gZmFsc2U7CisgICAgc2F2ZWRfa2V5Xy5jbGVhcigpOworICAgIENsZWFyU2F2ZWRWYWx1
ZSgpOworICAgIGRpcmVjdGlvbl8gPSBrRm9yd2FyZDsKKyAgfSBlbHNlIHsKKyAgICB2YWxpZF8g
PSB0cnVlOworICB9Cit9CisKK3ZvaWQgREJJdGVyOjpTZWVrKGNvbnN0IFNsaWNlJiB0YXJnZXQp
IHsKKyAgZGlyZWN0aW9uXyA9IGtGb3J3YXJkOworICBDbGVhclNhdmVkVmFsdWUoKTsKKyAgc2F2
ZWRfa2V5Xy5jbGVhcigpOworICBBcHBlbmRJbnRlcm5hbEtleSgKKyAgICAgICZzYXZlZF9rZXlf
LCBQYXJzZWRJbnRlcm5hbEtleSh0YXJnZXQsIHNlcXVlbmNlXywga1ZhbHVlVHlwZUZvclNlZWsp
KTsKKyAgaXRlcl8tPlNlZWsoc2F2ZWRfa2V5Xyk7CisgIGlmIChpdGVyXy0+VmFsaWQoKSkgewor
ICAgIEZpbmROZXh0VXNlckVudHJ5KGZhbHNlLCAmc2F2ZWRfa2V5XyAvKiB0ZW1wb3Jhcnkgc3Rv
cmFnZSAqLyk7CisgIH0gZWxzZSB7CisgICAgdmFsaWRfID0gZmFsc2U7CisgIH0KK30KKwordm9p
ZCBEQkl0ZXI6OlNlZWtUb0ZpcnN0KCkgeworICBkaXJlY3Rpb25fID0ga0ZvcndhcmQ7CisgIENs
ZWFyU2F2ZWRWYWx1ZSgpOworICBpdGVyXy0+U2Vla1RvRmlyc3QoKTsKKyAgaWYgKGl0ZXJfLT5W
YWxpZCgpKSB7CisgICAgRmluZE5leHRVc2VyRW50cnkoZmFsc2UsICZzYXZlZF9rZXlfIC8qIHRl
bXBvcmFyeSBzdG9yYWdlICovKTsKKyAgfSBlbHNlIHsKKyAgICB2YWxpZF8gPSBmYWxzZTsKKyAg
fQorfQorCit2b2lkIERCSXRlcjo6U2Vla1RvTGFzdCgpIHsKKyAgZGlyZWN0aW9uXyA9IGtSZXZl
cnNlOworICBDbGVhclNhdmVkVmFsdWUoKTsKKyAgaXRlcl8tPlNlZWtUb0xhc3QoKTsKKyAgRmlu
ZFByZXZVc2VyRW50cnkoKTsKK30KKworfSAgLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitJdGVy
YXRvciogTmV3REJJdGVyYXRvcigKKyAgICBjb25zdCBzdGQ6OnN0cmluZyogZGJuYW1lLAorICAg
IEVudiogZW52LAorICAgIGNvbnN0IENvbXBhcmF0b3IqIHVzZXJfa2V5X2NvbXBhcmF0b3IsCisg
ICAgSXRlcmF0b3IqIGludGVybmFsX2l0ZXIsCisgICAgY29uc3QgU2VxdWVuY2VOdW1iZXImIHNl
cXVlbmNlKSB7CisgIHJldHVybiBuZXcgREJJdGVyKGRibmFtZSwgZW52LCB1c2VyX2tleV9jb21w
YXJhdG9yLCBpbnRlcm5hbF9pdGVyLCBzZXF1ZW5jZSk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBs
ZXZlbGRiCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2RiX2l0ZXIu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvZGJfaXRlci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ5
ZTFiMTc0YWI4NzI2ZWVjYTU4MTk3YmIyYzM2ZjczMDk5ZDEzZTUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2RiX2l0ZXIuaApAQCAtMCwwICsxLDI2IEBA
CisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
IFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCisKKyNpZm5k
ZWYgU1RPUkFHRV9MRVZFTERCX0RCX0RCX0lURVJfSF8KKyNkZWZpbmUgU1RPUkFHRV9MRVZFTERC
X0RCX0RCX0lURVJfSF8KKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgImxldmVsZGIv
ZGIuaCIKKyNpbmNsdWRlICJkYi9kYmZvcm1hdC5oIgorCituYW1lc3BhY2UgbGV2ZWxkYiB7CisK
Ky8vIFJldHVybiBhIG5ldyBpdGVyYXRvciB0aGF0IGNvbnZlcnRzIGludGVybmFsIGtleXMgKHlp
ZWxkZWQgYnkKKy8vICIqaW50ZXJuYWxfaXRlciIpIHRoYXQgd2VyZSBsaXZlIGF0IHRoZSBzcGVj
aWZpZWQgInNlcXVlbmNlIiBudW1iZXIKKy8vIGludG8gYXBwcm9wcmlhdGUgdXNlciBrZXlzLgor
ZXh0ZXJuIEl0ZXJhdG9yKiBOZXdEQkl0ZXJhdG9yKAorICAgIGNvbnN0IHN0ZDo6c3RyaW5nKiBk
Ym5hbWUsCisgICAgRW52KiBlbnYsCisgICAgY29uc3QgQ29tcGFyYXRvciogdXNlcl9rZXlfY29t
cGFyYXRvciwKKyAgICBJdGVyYXRvciogaW50ZXJuYWxfaXRlciwKKyAgICBjb25zdCBTZXF1ZW5j
ZU51bWJlciYgc2VxdWVuY2UpOworCit9ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgorCisjZW5kaWYg
IC8vIFNUT1JBR0VfTEVWRUxEQl9EQl9EQl9JVEVSX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9sZXZlbGRiL2RiL2RiX3Rlc3QuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRi
L2RiL2RiX3Rlc3QuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjg0ZWEzYmRiYzhlY2M4MGQ1MWNmZWNiZmJlOGJl
MWQ3ODcxMWU2YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIv
ZGIvZGJfdGVzdC5jYwpAQCAtMCwwICsxLDIwMjcgQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBU
aGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9y
IG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2luY2x1ZGUgImxldmVsZGIvZGIuaCIKKyNpbmNs
dWRlICJsZXZlbGRiL2ZpbHRlcl9wb2xpY3kuaCIKKyNpbmNsdWRlICJkYi9kYl9pbXBsLmgiCisj
aW5jbHVkZSAiZGIvZmlsZW5hbWUuaCIKKyNpbmNsdWRlICJkYi92ZXJzaW9uX3NldC5oIgorI2lu
Y2x1ZGUgImRiL3dyaXRlX2JhdGNoX2ludGVybmFsLmgiCisjaW5jbHVkZSAibGV2ZWxkYi9jYWNo
ZS5oIgorI2luY2x1ZGUgImxldmVsZGIvZW52LmgiCisjaW5jbHVkZSAibGV2ZWxkYi90YWJsZS5o
IgorI2luY2x1ZGUgInV0aWwvaGFzaC5oIgorI2luY2x1ZGUgInV0aWwvbG9nZ2luZy5oIgorI2lu
Y2x1ZGUgInV0aWwvbXV0ZXhsb2NrLmgiCisjaW5jbHVkZSAidXRpbC90ZXN0aGFybmVzcy5oIgor
I2luY2x1ZGUgInV0aWwvdGVzdHV0aWwuaCIKKworbmFtZXNwYWNlIGxldmVsZGIgeworCitzdGF0
aWMgc3RkOjpzdHJpbmcgUmFuZG9tU3RyaW5nKFJhbmRvbSogcm5kLCBpbnQgbGVuKSB7CisgIHN0
ZDo6c3RyaW5nIHI7CisgIHRlc3Q6OlJhbmRvbVN0cmluZyhybmQsIGxlbiwgJnIpOworICByZXR1
cm4gcjsKK30KKworbmFtZXNwYWNlIHsKK2NsYXNzIEF0b21pY0NvdW50ZXIgeworIHByaXZhdGU6
CisgIHBvcnQ6Ok11dGV4IG11XzsKKyAgaW50IGNvdW50XzsKKyBwdWJsaWM6CisgIEF0b21pY0Nv
dW50ZXIoKSA6IGNvdW50XygwKSB7IH0KKyAgdm9pZCBJbmNyZW1lbnQoKSB7CisgICAgTXV0ZXhM
b2NrIGwoJm11Xyk7CisgICAgY291bnRfKys7CisgIH0KKyAgaW50IFJlYWQoKSB7CisgICAgTXV0
ZXhMb2NrIGwoJm11Xyk7CisgICAgcmV0dXJuIGNvdW50XzsKKyAgfQorICB2b2lkIFJlc2V0KCkg
eworICAgIE11dGV4TG9jayBsKCZtdV8pOworICAgIGNvdW50XyA9IDA7CisgIH0KK307Cit9CisK
Ky8vIFNwZWNpYWwgRW52IHVzZWQgdG8gZGVsYXkgYmFja2dyb3VuZCBvcGVyYXRpb25zCitjbGFz
cyBTcGVjaWFsRW52IDogcHVibGljIEVudldyYXBwZXIgeworIHB1YmxpYzoKKyAgLy8gc3N0YWJs
ZSBTeW5jKCkgY2FsbHMgYXJlIGJsb2NrZWQgd2hpbGUgdGhpcyBwb2ludGVyIGlzIG5vbi1OVUxM
LgorICBwb3J0OjpBdG9taWNQb2ludGVyIGRlbGF5X3NzdGFibGVfc3luY187CisKKyAgLy8gU2lt
dWxhdGUgbm8tc3BhY2UgZXJyb3JzIHdoaWxlIHRoaXMgcG9pbnRlciBpcyBub24tTlVMTC4KKyAg
cG9ydDo6QXRvbWljUG9pbnRlciBub19zcGFjZV87CisKKyAgLy8gU2ltdWxhdGUgbm9uLXdyaXRh
YmxlIGZpbGUgc3lzdGVtIHdoaWxlIHRoaXMgcG9pbnRlciBpcyBub24tTlVMTAorICBwb3J0OjpB
dG9taWNQb2ludGVyIG5vbl93cml0YWJsZV87CisKKyAgLy8gRm9yY2Ugc3luYyBvZiBtYW5pZmVz
dCBmaWxlcyB0byBmYWlsIHdoaWxlIHRoaXMgcG9pbnRlciBpcyBub24tTlVMTAorICBwb3J0OjpB
dG9taWNQb2ludGVyIG1hbmlmZXN0X3N5bmNfZXJyb3JfOworCisgIC8vIEZvcmNlIHdyaXRlIHRv
IG1hbmlmZXN0IGZpbGVzIHRvIGZhaWwgd2hpbGUgdGhpcyBwb2ludGVyIGlzIG5vbi1OVUxMCisg
IHBvcnQ6OkF0b21pY1BvaW50ZXIgbWFuaWZlc3Rfd3JpdGVfZXJyb3JfOworCisgIGJvb2wgY291
bnRfcmFuZG9tX3JlYWRzXzsKKyAgQXRvbWljQ291bnRlciByYW5kb21fcmVhZF9jb3VudGVyXzsK
KworICBBdG9taWNDb3VudGVyIHNsZWVwX2NvdW50ZXJfOworCisgIGV4cGxpY2l0IFNwZWNpYWxF
bnYoRW52KiBiYXNlKSA6IEVudldyYXBwZXIoYmFzZSkgeworICAgIGRlbGF5X3NzdGFibGVfc3lu
Y18uUmVsZWFzZV9TdG9yZShOVUxMKTsKKyAgICBub19zcGFjZV8uUmVsZWFzZV9TdG9yZShOVUxM
KTsKKyAgICBub25fd3JpdGFibGVfLlJlbGVhc2VfU3RvcmUoTlVMTCk7CisgICAgY291bnRfcmFu
ZG9tX3JlYWRzXyA9IGZhbHNlOworICAgIG1hbmlmZXN0X3N5bmNfZXJyb3JfLlJlbGVhc2VfU3Rv
cmUoTlVMTCk7CisgICAgbWFuaWZlc3Rfd3JpdGVfZXJyb3JfLlJlbGVhc2VfU3RvcmUoTlVMTCk7
CisgIH0KKworICBTdGF0dXMgTmV3V3JpdGFibGVGaWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBmLCBX
cml0YWJsZUZpbGUqKiByKSB7CisgICAgY2xhc3MgU1NUYWJsZUZpbGUgOiBwdWJsaWMgV3JpdGFi
bGVGaWxlIHsKKyAgICAgcHJpdmF0ZToKKyAgICAgIFNwZWNpYWxFbnYqIGVudl87CisgICAgICBX
cml0YWJsZUZpbGUqIGJhc2VfOworCisgICAgIHB1YmxpYzoKKyAgICAgIFNTVGFibGVGaWxlKFNw
ZWNpYWxFbnYqIGVudiwgV3JpdGFibGVGaWxlKiBiYXNlKQorICAgICAgICAgIDogZW52XyhlbnYp
LAorICAgICAgICAgICAgYmFzZV8oYmFzZSkgeworICAgICAgfQorICAgICAgflNTVGFibGVGaWxl
KCkgeyBkZWxldGUgYmFzZV87IH0KKyAgICAgIFN0YXR1cyBBcHBlbmQoY29uc3QgU2xpY2UmIGRh
dGEpIHsKKyAgICAgICAgaWYgKGVudl8tPm5vX3NwYWNlXy5BY3F1aXJlX0xvYWQoKSAhPSBOVUxM
KSB7CisgICAgICAgICAgLy8gRHJvcCB3cml0ZXMgb24gdGhlIGZsb29yCisgICAgICAgICAgcmV0
dXJuIFN0YXR1czo6T0soKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICByZXR1cm4gYmFz
ZV8tPkFwcGVuZChkYXRhKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgU3RhdHVzIENsb3Nl
KCkgeyByZXR1cm4gYmFzZV8tPkNsb3NlKCk7IH0KKyAgICAgIFN0YXR1cyBGbHVzaCgpIHsgcmV0
dXJuIGJhc2VfLT5GbHVzaCgpOyB9CisgICAgICBTdGF0dXMgU3luYygpIHsKKyAgICAgICAgd2hp
bGUgKGVudl8tPmRlbGF5X3NzdGFibGVfc3luY18uQWNxdWlyZV9Mb2FkKCkgIT0gTlVMTCkgewor
ICAgICAgICAgIGVudl8tPlNsZWVwRm9yTWljcm9zZWNvbmRzKDEwMDAwMCk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIGJhc2VfLT5TeW5jKCk7CisgICAgICB9CisgICAgfTsKKyAgICBjbGFz
cyBNYW5pZmVzdEZpbGUgOiBwdWJsaWMgV3JpdGFibGVGaWxlIHsKKyAgICAgcHJpdmF0ZToKKyAg
ICAgIFNwZWNpYWxFbnYqIGVudl87CisgICAgICBXcml0YWJsZUZpbGUqIGJhc2VfOworICAgICBw
dWJsaWM6CisgICAgICBNYW5pZmVzdEZpbGUoU3BlY2lhbEVudiogZW52LCBXcml0YWJsZUZpbGUq
IGIpIDogZW52XyhlbnYpLCBiYXNlXyhiKSB7IH0KKyAgICAgIH5NYW5pZmVzdEZpbGUoKSB7IGRl
bGV0ZSBiYXNlXzsgfQorICAgICAgU3RhdHVzIEFwcGVuZChjb25zdCBTbGljZSYgZGF0YSkgewor
ICAgICAgICBpZiAoZW52Xy0+bWFuaWZlc3Rfd3JpdGVfZXJyb3JfLkFjcXVpcmVfTG9hZCgpICE9
IE5VTEwpIHsKKyAgICAgICAgICByZXR1cm4gU3RhdHVzOjpJT0Vycm9yKCJzaW11bGF0ZWQgd3Jp
dGVyIGVycm9yIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcmV0dXJuIGJhc2VfLT5B
cHBlbmQoZGF0YSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIFN0YXR1cyBDbG9zZSgpIHsg
cmV0dXJuIGJhc2VfLT5DbG9zZSgpOyB9CisgICAgICBTdGF0dXMgRmx1c2goKSB7IHJldHVybiBi
YXNlXy0+Rmx1c2goKTsgfQorICAgICAgU3RhdHVzIFN5bmMoKSB7CisgICAgICAgIGlmIChlbnZf
LT5tYW5pZmVzdF9zeW5jX2Vycm9yXy5BY3F1aXJlX0xvYWQoKSAhPSBOVUxMKSB7CisgICAgICAg
ICAgcmV0dXJuIFN0YXR1czo6SU9FcnJvcigic2ltdWxhdGVkIHN5bmMgZXJyb3IiKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICByZXR1cm4gYmFzZV8tPlN5bmMoKTsKKyAgICAgICAgfQor
ICAgICAgfQorICAgIH07CisKKyAgICBpZiAobm9uX3dyaXRhYmxlXy5BY3F1aXJlX0xvYWQoKSAh
PSBOVUxMKSB7CisgICAgICByZXR1cm4gU3RhdHVzOjpJT0Vycm9yKCJzaW11bGF0ZWQgd3JpdGUg
ZXJyb3IiKTsKKyAgICB9CisKKyAgICBTdGF0dXMgcyA9IHRhcmdldCgpLT5OZXdXcml0YWJsZUZp
bGUoZiwgcik7CisgICAgaWYgKHMub2soKSkgeworICAgICAgaWYgKHN0cnN0cihmLmNfc3RyKCks
ICIuc3N0IikgIT0gTlVMTCkgeworICAgICAgICAqciA9IG5ldyBTU1RhYmxlRmlsZSh0aGlzLCAq
cik7CisgICAgICB9IGVsc2UgaWYgKHN0cnN0cihmLmNfc3RyKCksICJNQU5JRkVTVCIpICE9IE5V
TEwpIHsKKyAgICAgICAgKnIgPSBuZXcgTWFuaWZlc3RGaWxlKHRoaXMsICpyKTsKKyAgICAgIH0K
KyAgICB9CisgICAgcmV0dXJuIHM7CisgIH0KKworICBTdGF0dXMgTmV3UmFuZG9tQWNjZXNzRmls
ZShjb25zdCBzdGQ6OnN0cmluZyYgZiwgUmFuZG9tQWNjZXNzRmlsZSoqIHIpIHsKKyAgICBjbGFz
cyBDb3VudGluZ0ZpbGUgOiBwdWJsaWMgUmFuZG9tQWNjZXNzRmlsZSB7CisgICAgIHByaXZhdGU6
CisgICAgICBSYW5kb21BY2Nlc3NGaWxlKiB0YXJnZXRfOworICAgICAgQXRvbWljQ291bnRlciog
Y291bnRlcl87CisgICAgIHB1YmxpYzoKKyAgICAgIENvdW50aW5nRmlsZShSYW5kb21BY2Nlc3NG
aWxlKiB0YXJnZXQsIEF0b21pY0NvdW50ZXIqIGNvdW50ZXIpCisgICAgICAgICAgOiB0YXJnZXRf
KHRhcmdldCksIGNvdW50ZXJfKGNvdW50ZXIpIHsKKyAgICAgIH0KKyAgICAgIHZpcnR1YWwgfkNv
dW50aW5nRmlsZSgpIHsgZGVsZXRlIHRhcmdldF87IH0KKyAgICAgIHZpcnR1YWwgU3RhdHVzIFJl
YWQodWludDY0X3Qgb2Zmc2V0LCBzaXplX3QgbiwgU2xpY2UqIHJlc3VsdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2hhciogc2NyYXRjaCkgY29uc3QgeworICAgICAgICBjb3VudGVyXy0+
SW5jcmVtZW50KCk7CisgICAgICAgIHJldHVybiB0YXJnZXRfLT5SZWFkKG9mZnNldCwgbiwgcmVz
dWx0LCBzY3JhdGNoKTsKKyAgICAgIH0KKyAgICB9OworCisgICAgU3RhdHVzIHMgPSB0YXJnZXQo
KS0+TmV3UmFuZG9tQWNjZXNzRmlsZShmLCByKTsKKyAgICBpZiAocy5vaygpICYmIGNvdW50X3Jh
bmRvbV9yZWFkc18pIHsKKyAgICAgICpyID0gbmV3IENvdW50aW5nRmlsZSgqciwgJnJhbmRvbV9y
ZWFkX2NvdW50ZXJfKTsKKyAgICB9CisgICAgcmV0dXJuIHM7CisgIH0KKworICB2aXJ0dWFsIHZv
aWQgU2xlZXBGb3JNaWNyb3NlY29uZHMoaW50IG1pY3JvcykgeworICAgIHNsZWVwX2NvdW50ZXJf
LkluY3JlbWVudCgpOworICAgIHRhcmdldCgpLT5TbGVlcEZvck1pY3Jvc2Vjb25kcyhtaWNyb3Mp
OworICB9Cit9OworCitjbGFzcyBEQlRlc3QgeworIHByaXZhdGU6CisgIGNvbnN0IEZpbHRlclBv
bGljeSogZmlsdGVyX3BvbGljeV87CisKKyAgLy8gU2VxdWVuY2Ugb2Ygb3B0aW9uIGNvbmZpZ3Vy
YXRpb25zIHRvIHRyeQorICBlbnVtIE9wdGlvbkNvbmZpZyB7CisgICAga0RlZmF1bHQsCisgICAg
a0ZpbHRlciwKKyAgICBrVW5jb21wcmVzc2VkLAorICAgIGtFbmQKKyAgfTsKKyAgaW50IG9wdGlv
bl9jb25maWdfOworCisgcHVibGljOgorICBzdGQ6OnN0cmluZyBkYm5hbWVfOworICBTcGVjaWFs
RW52KiBlbnZfOworICBEQiogZGJfOworCisgIE9wdGlvbnMgbGFzdF9vcHRpb25zXzsKKworICBE
QlRlc3QoKSA6IG9wdGlvbl9jb25maWdfKGtEZWZhdWx0KSwKKyAgICAgICAgICAgICBlbnZfKG5l
dyBTcGVjaWFsRW52KEVudjo6RGVmYXVsdCgpKSkgeworICAgIGZpbHRlcl9wb2xpY3lfID0gTmV3
Qmxvb21GaWx0ZXJQb2xpY3koMTApOworICAgIGRibmFtZV8gPSB0ZXN0OjpUbXBEaXIoKSArICIv
ZGJfdGVzdCI7CisgICAgRGVzdHJveURCKGRibmFtZV8sIE9wdGlvbnMoKSk7CisgICAgZGJfID0g
TlVMTDsKKyAgICBSZW9wZW4oKTsKKyAgfQorCisgIH5EQlRlc3QoKSB7CisgICAgZGVsZXRlIGRi
XzsKKyAgICBEZXN0cm95REIoZGJuYW1lXywgT3B0aW9ucygpKTsKKyAgICBkZWxldGUgZW52XzsK
KyAgICBkZWxldGUgZmlsdGVyX3BvbGljeV87CisgIH0KKworICAvLyBTd2l0Y2ggdG8gYSBmcmVz
aCBkYXRhYmFzZSB3aXRoIHRoZSBuZXh0IG9wdGlvbiBjb25maWd1cmF0aW9uIHRvCisgIC8vIHRl
c3QuICBSZXR1cm4gZmFsc2UgaWYgdGhlcmUgYXJlIG5vIG1vcmUgY29uZmlndXJhdGlvbnMgdG8g
dGVzdC4KKyAgYm9vbCBDaGFuZ2VPcHRpb25zKCkgeworICAgIG9wdGlvbl9jb25maWdfKys7Cisg
ICAgaWYgKG9wdGlvbl9jb25maWdfID49IGtFbmQpIHsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9IGVsc2UgeworICAgICAgRGVzdHJveUFuZFJlb3BlbigpOworICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICB9CisKKyAgLy8gUmV0dXJuIHRoZSBjdXJyZW50IG9wdGlvbiBjb25maWd1cmF0
aW9uLgorICBPcHRpb25zIEN1cnJlbnRPcHRpb25zKCkgeworICAgIE9wdGlvbnMgb3B0aW9uczsK
KyAgICBzd2l0Y2ggKG9wdGlvbl9jb25maWdfKSB7CisgICAgICBjYXNlIGtGaWx0ZXI6CisgICAg
ICAgIG9wdGlvbnMuZmlsdGVyX3BvbGljeSA9IGZpbHRlcl9wb2xpY3lfOworICAgICAgICBicmVh
azsKKyAgICAgIGNhc2Uga1VuY29tcHJlc3NlZDoKKyAgICAgICAgb3B0aW9ucy5jb21wcmVzc2lv
biA9IGtOb0NvbXByZXNzaW9uOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gb3B0aW9uczsKKyAgfQorCisgIERCSW1wbCog
ZGJmdWxsKCkgeworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PERCSW1wbCo+KGRiXyk7Cisg
IH0KKworICB2b2lkIFJlb3BlbihPcHRpb25zKiBvcHRpb25zID0gTlVMTCkgeworICAgIEFTU0VS
VF9PSyhUcnlSZW9wZW4ob3B0aW9ucykpOworICB9CisKKyAgdm9pZCBDbG9zZSgpIHsKKyAgICBk
ZWxldGUgZGJfOworICAgIGRiXyA9IE5VTEw7CisgIH0KKworICB2b2lkIERlc3Ryb3lBbmRSZW9w
ZW4oT3B0aW9ucyogb3B0aW9ucyA9IE5VTEwpIHsKKyAgICBkZWxldGUgZGJfOworICAgIGRiXyA9
IE5VTEw7CisgICAgRGVzdHJveURCKGRibmFtZV8sIE9wdGlvbnMoKSk7CisgICAgQVNTRVJUX09L
KFRyeVJlb3BlbihvcHRpb25zKSk7CisgIH0KKworICBTdGF0dXMgVHJ5UmVvcGVuKE9wdGlvbnMq
IG9wdGlvbnMpIHsKKyAgICBkZWxldGUgZGJfOworICAgIGRiXyA9IE5VTEw7CisgICAgT3B0aW9u
cyBvcHRzOworICAgIGlmIChvcHRpb25zICE9IE5VTEwpIHsKKyAgICAgIG9wdHMgPSAqb3B0aW9u
czsKKyAgICB9IGVsc2UgeworICAgICAgb3B0cyA9IEN1cnJlbnRPcHRpb25zKCk7CisgICAgICBv
cHRzLmNyZWF0ZV9pZl9taXNzaW5nID0gdHJ1ZTsKKyAgICB9CisgICAgbGFzdF9vcHRpb25zXyA9
IG9wdHM7CisKKyAgICByZXR1cm4gREI6Ok9wZW4ob3B0cywgZGJuYW1lXywgJmRiXyk7CisgIH0K
KworICBTdGF0dXMgUHV0KGNvbnN0IHN0ZDo6c3RyaW5nJiBrLCBjb25zdCBzdGQ6OnN0cmluZyYg
dikgeworICAgIHJldHVybiBkYl8tPlB1dChXcml0ZU9wdGlvbnMoKSwgaywgdik7CisgIH0KKwor
ICBTdGF0dXMgRGVsZXRlKGNvbnN0IHN0ZDo6c3RyaW5nJiBrKSB7CisgICAgcmV0dXJuIGRiXy0+
RGVsZXRlKFdyaXRlT3B0aW9ucygpLCBrKTsKKyAgfQorCisgIHN0ZDo6c3RyaW5nIEdldChjb25z
dCBzdGQ6OnN0cmluZyYgaywgY29uc3QgU25hcHNob3QqIHNuYXBzaG90ID0gTlVMTCkgeworICAg
IFJlYWRPcHRpb25zIG9wdGlvbnM7CisgICAgb3B0aW9ucy5zbmFwc2hvdCA9IHNuYXBzaG90Owor
ICAgIHN0ZDo6c3RyaW5nIHJlc3VsdDsKKyAgICBTdGF0dXMgcyA9IGRiXy0+R2V0KG9wdGlvbnMs
IGssICZyZXN1bHQpOworICAgIGlmIChzLklzTm90Rm91bmQoKSkgeworICAgICAgcmVzdWx0ID0g
Ik5PVF9GT1VORCI7CisgICAgfSBlbHNlIGlmICghcy5vaygpKSB7CisgICAgICByZXN1bHQgPSBz
LlRvU3RyaW5nKCk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworICAvLyBSZXR1
cm4gYSBzdHJpbmcgdGhhdCBjb250YWlucyBhbGwga2V5LHZhbHVlIHBhaXJzIGluIG9yZGVyLAor
ICAvLyBmb3JtYXR0ZWQgbGlrZSAiKGsxLT52MSkoazItPnYyKSIuCisgIHN0ZDo6c3RyaW5nIENv
bnRlbnRzKCkgeworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBmb3J3YXJkOworICAgIHN0
ZDo6c3RyaW5nIHJlc3VsdDsKKyAgICBJdGVyYXRvciogaXRlciA9IGRiXy0+TmV3SXRlcmF0b3Io
UmVhZE9wdGlvbnMoKSk7CisgICAgZm9yIChpdGVyLT5TZWVrVG9GaXJzdCgpOyBpdGVyLT5WYWxp
ZCgpOyBpdGVyLT5OZXh0KCkpIHsKKyAgICAgIHN0ZDo6c3RyaW5nIHMgPSBJdGVyU3RhdHVzKGl0
ZXIpOworICAgICAgcmVzdWx0LnB1c2hfYmFjaygnKCcpOworICAgICAgcmVzdWx0LmFwcGVuZChz
KTsKKyAgICAgIHJlc3VsdC5wdXNoX2JhY2soJyknKTsKKyAgICAgIGZvcndhcmQucHVzaF9iYWNr
KHMpOworICAgIH0KKworICAgIC8vIENoZWNrIHJldmVyc2UgaXRlcmF0aW9uIHJlc3VsdHMgYXJl
IHRoZSByZXZlcnNlIG9mIGZvcndhcmQgcmVzdWx0cworICAgIGludCBtYXRjaGVkID0gMDsKKyAg
ICBmb3IgKGl0ZXItPlNlZWtUb0xhc3QoKTsgaXRlci0+VmFsaWQoKTsgaXRlci0+UHJldigpKSB7
CisgICAgICBBU1NFUlRfTFQobWF0Y2hlZCwgZm9yd2FyZC5zaXplKCkpOworICAgICAgQVNTRVJU
X0VRKEl0ZXJTdGF0dXMoaXRlciksIGZvcndhcmRbZm9yd2FyZC5zaXplKCkgLSBtYXRjaGVkIC0g
MV0pOworICAgICAgbWF0Y2hlZCsrOworICAgIH0KKyAgICBBU1NFUlRfRVEobWF0Y2hlZCwgZm9y
d2FyZC5zaXplKCkpOworCisgICAgZGVsZXRlIGl0ZXI7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAg
fQorCisgIHN0ZDo6c3RyaW5nIEFsbEVudHJpZXNGb3IoY29uc3QgU2xpY2UmIHVzZXJfa2V5KSB7
CisgICAgSXRlcmF0b3IqIGl0ZXIgPSBkYmZ1bGwoKS0+VEVTVF9OZXdJbnRlcm5hbEl0ZXJhdG9y
KCk7CisgICAgSW50ZXJuYWxLZXkgdGFyZ2V0KHVzZXJfa2V5LCBrTWF4U2VxdWVuY2VOdW1iZXIs
IGtUeXBlVmFsdWUpOworICAgIGl0ZXItPlNlZWsodGFyZ2V0LkVuY29kZSgpKTsKKyAgICBzdGQ6
OnN0cmluZyByZXN1bHQ7CisgICAgaWYgKCFpdGVyLT5zdGF0dXMoKS5vaygpKSB7CisgICAgICBy
ZXN1bHQgPSBpdGVyLT5zdGF0dXMoKS5Ub1N0cmluZygpOworICAgIH0gZWxzZSB7CisgICAgICBy
ZXN1bHQgPSAiWyAiOworICAgICAgYm9vbCBmaXJzdCA9IHRydWU7CisgICAgICB3aGlsZSAoaXRl
ci0+VmFsaWQoKSkgeworICAgICAgICBQYXJzZWRJbnRlcm5hbEtleSBpa2V5OworICAgICAgICBp
ZiAoIVBhcnNlSW50ZXJuYWxLZXkoaXRlci0+a2V5KCksICZpa2V5KSkgeworICAgICAgICAgIHJl
c3VsdCArPSAiQ09SUlVQVEVEIjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBpZiAobGFz
dF9vcHRpb25zXy5jb21wYXJhdG9yLT5Db21wYXJlKGlrZXkudXNlcl9rZXksIHVzZXJfa2V5KSAh
PSAwKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKCFm
aXJzdCkgeworICAgICAgICAgICAgcmVzdWx0ICs9ICIsICI7CisgICAgICAgICAgfQorICAgICAg
ICAgIGZpcnN0ID0gZmFsc2U7CisgICAgICAgICAgc3dpdGNoIChpa2V5LnR5cGUpIHsKKyAgICAg
ICAgICAgIGNhc2Uga1R5cGVWYWx1ZToKKyAgICAgICAgICAgICAgcmVzdWx0ICs9IGl0ZXItPnZh
bHVlKCkuVG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IGtUeXBlRGVsZXRpb246CisgICAgICAgICAgICAgIHJlc3VsdCArPSAiREVMIjsKKyAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGl0ZXItPk5leHQo
KTsKKyAgICAgIH0KKyAgICAgIGlmICghZmlyc3QpIHsKKyAgICAgICAgcmVzdWx0ICs9ICIgIjsK
KyAgICAgIH0KKyAgICAgIHJlc3VsdCArPSAiXSI7CisgICAgfQorICAgIGRlbGV0ZSBpdGVyOwor
ICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworICBpbnQgTnVtVGFibGVGaWxlc0F0TGV2ZWwoaW50
IGxldmVsKSB7CisgICAgc3RkOjpzdHJpbmcgcHJvcGVydHk7CisgICAgQVNTRVJUX1RSVUUoCisg
ICAgICAgIGRiXy0+R2V0UHJvcGVydHkoImxldmVsZGIubnVtLWZpbGVzLWF0LWxldmVsIiArIE51
bWJlclRvU3RyaW5nKGxldmVsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAmcHJvcGVydHkp
KTsKKyAgICByZXR1cm4gYXRvaShwcm9wZXJ0eS5jX3N0cigpKTsKKyAgfQorCisgIGludCBUb3Rh
bFRhYmxlRmlsZXMoKSB7CisgICAgaW50IHJlc3VsdCA9IDA7CisgICAgZm9yIChpbnQgbGV2ZWwg
PSAwOyBsZXZlbCA8IGNvbmZpZzo6a051bUxldmVsczsgbGV2ZWwrKykgeworICAgICAgcmVzdWx0
ICs9IE51bVRhYmxlRmlsZXNBdExldmVsKGxldmVsKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgfQorCisgIC8vIFJldHVybiBzcHJlYWQgb2YgZmlsZXMgcGVyIGxldmVsCisgIHN0ZDo6
c3RyaW5nIEZpbGVzUGVyTGV2ZWwoKSB7CisgICAgc3RkOjpzdHJpbmcgcmVzdWx0OworICAgIGlu
dCBsYXN0X25vbl96ZXJvX29mZnNldCA9IDA7CisgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZl
bCA8IGNvbmZpZzo6a051bUxldmVsczsgbGV2ZWwrKykgeworICAgICAgaW50IGYgPSBOdW1UYWJs
ZUZpbGVzQXRMZXZlbChsZXZlbCk7CisgICAgICBjaGFyIGJ1ZlsxMDBdOworICAgICAgc25wcmlu
dGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzJWQiLCAobGV2ZWwgPyAiLCIgOiAiIiksIGYpOworICAg
ICAgcmVzdWx0ICs9IGJ1ZjsKKyAgICAgIGlmIChmID4gMCkgeworICAgICAgICBsYXN0X25vbl96
ZXJvX29mZnNldCA9IHJlc3VsdC5zaXplKCk7CisgICAgICB9CisgICAgfQorICAgIHJlc3VsdC5y
ZXNpemUobGFzdF9ub25femVyb19vZmZzZXQpOworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKwor
ICBpbnQgQ291bnRGaWxlcygpIHsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZmlsZXM7
CisgICAgZW52Xy0+R2V0Q2hpbGRyZW4oZGJuYW1lXywgJmZpbGVzKTsKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8aW50PihmaWxlcy5zaXplKCkpOworICB9CisKKyAgdWludDY0X3QgU2l6ZShjb25z
dCBTbGljZSYgc3RhcnQsIGNvbnN0IFNsaWNlJiBsaW1pdCkgeworICAgIFJhbmdlIHIoc3RhcnQs
IGxpbWl0KTsKKyAgICB1aW50NjRfdCBzaXplOworICAgIGRiXy0+R2V0QXBwcm94aW1hdGVTaXpl
cygmciwgMSwgJnNpemUpOworICAgIHJldHVybiBzaXplOworICB9CisKKyAgdm9pZCBDb21wYWN0
KGNvbnN0IFNsaWNlJiBzdGFydCwgY29uc3QgU2xpY2UmIGxpbWl0KSB7CisgICAgZGJfLT5Db21w
YWN0UmFuZ2UoJnN0YXJ0LCAmbGltaXQpOworICB9CisKKyAgLy8gRG8gbiBtZW10YWJsZSBjb21w
YWN0aW9ucywgZWFjaCBvZiB3aGljaCBwcm9kdWNlcyBhbiBzc3RhYmxlCisgIC8vIGNvdmVyaW5n
IHRoZSByYW5nZSBbc21hbGwsbGFyZ2VdLgorICB2b2lkIE1ha2VUYWJsZXMoaW50IG4sIGNvbnN0
IHN0ZDo6c3RyaW5nJiBzbWFsbCwgY29uc3Qgc3RkOjpzdHJpbmcmIGxhcmdlKSB7CisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKKyAgICAgIFB1dChzbWFsbCwgImJlZ2luIik7Cisg
ICAgICBQdXQobGFyZ2UsICJlbmQiKTsKKyAgICAgIGRiZnVsbCgpLT5URVNUX0NvbXBhY3RNZW1U
YWJsZSgpOworICAgIH0KKyAgfQorCisgIC8vIFByZXZlbnQgcHVzaGluZyBvZiBuZXcgc3N0YWJs
ZXMgaW50byBkZWVwZXIgbGV2ZWxzIGJ5IGFkZGluZworICAvLyB0YWJsZXMgdGhhdCBjb3ZlciBh
IHNwZWNpZmllZCByYW5nZSB0byBhbGwgbGV2ZWxzLgorICB2b2lkIEZpbGxMZXZlbHMoY29uc3Qg
c3RkOjpzdHJpbmcmIHNtYWxsZXN0LCBjb25zdCBzdGQ6OnN0cmluZyYgbGFyZ2VzdCkgeworICAg
IE1ha2VUYWJsZXMoY29uZmlnOjprTnVtTGV2ZWxzLCBzbWFsbGVzdCwgbGFyZ2VzdCk7CisgIH0K
KworICB2b2lkIER1bXBGaWxlQ291bnRzKGNvbnN0IGNoYXIqIGxhYmVsKSB7CisgICAgZnByaW50
ZihzdGRlcnIsICItLS1cbiVzOlxuIiwgbGFiZWwpOworICAgIGZwcmludGYoc3RkZXJyLCAibWF4
b3ZlcmxhcDogJWxsZFxuIiwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oCisg
ICAgICAgICAgICAgICAgZGJmdWxsKCktPlRFU1RfTWF4TmV4dExldmVsT3ZlcmxhcHBpbmdCeXRl
cygpKSk7CisgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGNvbmZpZzo6a051bUxldmVs
czsgbGV2ZWwrKykgeworICAgICAgaW50IG51bSA9IE51bVRhYmxlRmlsZXNBdExldmVsKGxldmVs
KTsKKyAgICAgIGlmIChudW0gPiAwKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICBsZXZl
bCAlM2QgOiAlZCBmaWxlc1xuIiwgbGV2ZWwsIG51bSk7CisgICAgICB9CisgICAgfQorICB9CisK
KyAgc3RkOjpzdHJpbmcgRHVtcFNTVGFibGVMaXN0KCkgeworICAgIHN0ZDo6c3RyaW5nIHByb3Bl
cnR5OworICAgIGRiXy0+R2V0UHJvcGVydHkoImxldmVsZGIuc3N0YWJsZXMiLCAmcHJvcGVydHkp
OworICAgIHJldHVybiBwcm9wZXJ0eTsKKyAgfQorCisgIHN0ZDo6c3RyaW5nIEl0ZXJTdGF0dXMo
SXRlcmF0b3IqIGl0ZXIpIHsKKyAgICBzdGQ6OnN0cmluZyByZXN1bHQ7CisgICAgaWYgKGl0ZXIt
PlZhbGlkKCkpIHsKKyAgICAgIHJlc3VsdCA9IGl0ZXItPmtleSgpLlRvU3RyaW5nKCkgKyAiLT4i
ICsgaXRlci0+dmFsdWUoKS5Ub1N0cmluZygpOworICAgIH0gZWxzZSB7CisgICAgICByZXN1bHQg
PSAiKGludmFsaWQpIjsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorfTsKKworVEVT
VChEQlRlc3QsIEVtcHR5KSB7CisgIGRvIHsKKyAgICBBU1NFUlRfVFJVRShkYl8gIT0gTlVMTCk7
CisgICAgQVNTRVJUX0VRKCJOT1RfRk9VTkQiLCBHZXQoImZvbyIpKTsKKyAgfSB3aGlsZSAoQ2hh
bmdlT3B0aW9ucygpKTsKK30KKworVEVTVChEQlRlc3QsIFJlYWRXcml0ZSkgeworICBkbyB7Cisg
ICAgQVNTRVJUX09LKFB1dCgiZm9vIiwgInYxIikpOworICAgIEFTU0VSVF9FUSgidjEiLCBHZXQo
ImZvbyIpKTsKKyAgICBBU1NFUlRfT0soUHV0KCJiYXIiLCAidjIiKSk7CisgICAgQVNTRVJUX09L
KFB1dCgiZm9vIiwgInYzIikpOworICAgIEFTU0VSVF9FUSgidjMiLCBHZXQoImZvbyIpKTsKKyAg
ICBBU1NFUlRfRVEoInYyIiwgR2V0KCJiYXIiKSk7CisgIH0gd2hpbGUgKENoYW5nZU9wdGlvbnMo
KSk7Cit9CisKK1RFU1QoREJUZXN0LCBQdXREZWxldGVHZXQpIHsKKyAgZG8geworICAgIEFTU0VS
VF9PSyhkYl8tPlB1dChXcml0ZU9wdGlvbnMoKSwgImZvbyIsICJ2MSIpKTsKKyAgICBBU1NFUlRf
RVEoInYxIiwgR2V0KCJmb28iKSk7CisgICAgQVNTRVJUX09LKGRiXy0+UHV0KFdyaXRlT3B0aW9u
cygpLCAiZm9vIiwgInYyIikpOworICAgIEFTU0VSVF9FUSgidjIiLCBHZXQoImZvbyIpKTsKKyAg
ICBBU1NFUlRfT0soZGJfLT5EZWxldGUoV3JpdGVPcHRpb25zKCksICJmb28iKSk7CisgICAgQVNT
RVJUX0VRKCJOT1RfRk9VTkQiLCBHZXQoImZvbyIpKTsKKyAgfSB3aGlsZSAoQ2hhbmdlT3B0aW9u
cygpKTsKK30KKworVEVTVChEQlRlc3QsIEdldEZyb21JbW11dGFibGVMYXllcikgeworICBkbyB7
CisgICAgT3B0aW9ucyBvcHRpb25zID0gQ3VycmVudE9wdGlvbnMoKTsKKyAgICBvcHRpb25zLmVu
diA9IGVudl87CisgICAgb3B0aW9ucy53cml0ZV9idWZmZXJfc2l6ZSA9IDEwMDAwMDsgIC8vIFNt
YWxsIHdyaXRlIGJ1ZmZlcgorICAgIFJlb3Blbigmb3B0aW9ucyk7CisKKyAgICBBU1NFUlRfT0so
UHV0KCJmb28iLCAidjEiKSk7CisgICAgQVNTRVJUX0VRKCJ2MSIsIEdldCgiZm9vIikpOworCisg
ICAgZW52Xy0+ZGVsYXlfc3N0YWJsZV9zeW5jXy5SZWxlYXNlX1N0b3JlKGVudl8pOyAgIC8vIEJs
b2NrIHN5bmMgY2FsbHMKKyAgICBQdXQoImsxIiwgc3RkOjpzdHJpbmcoMTAwMDAwLCAneCcpKTsg
ICAgICAgICAgICAgLy8gRmlsbCBtZW10YWJsZQorICAgIFB1dCgiazIiLCBzdGQ6OnN0cmluZygx
MDAwMDAsICd5JykpOyAgICAgICAgICAgICAvLyBUcmlnZ2VyIGNvbXBhY3Rpb24KKyAgICBBU1NF
UlRfRVEoInYxIiwgR2V0KCJmb28iKSk7CisgICAgZW52Xy0+ZGVsYXlfc3N0YWJsZV9zeW5jXy5S
ZWxlYXNlX1N0b3JlKE5VTEwpOyAgIC8vIFJlbGVhc2Ugc3luYyBjYWxscworICB9IHdoaWxlIChD
aGFuZ2VPcHRpb25zKCkpOworfQorCitURVNUKERCVGVzdCwgR2V0RnJvbVZlcnNpb25zKSB7Cisg
IGRvIHsKKyAgICBBU1NFUlRfT0soUHV0KCJmb28iLCAidjEiKSk7CisgICAgZGJmdWxsKCktPlRF
U1RfQ29tcGFjdE1lbVRhYmxlKCk7CisgICAgQVNTRVJUX0VRKCJ2MSIsIEdldCgiZm9vIikpOwor
ICB9IHdoaWxlIChDaGFuZ2VPcHRpb25zKCkpOworfQorCitURVNUKERCVGVzdCwgR2V0U25hcHNo
b3QpIHsKKyAgZG8geworICAgIC8vIFRyeSB3aXRoIGJvdGggYSBzaG9ydCBrZXkgYW5kIGEgbG9u
ZyBrZXkKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgeworICAgICAgc3RkOjpzdHJp
bmcga2V5ID0gKGkgPT0gMCkgPyBzdGQ6OnN0cmluZygiZm9vIikgOiBzdGQ6OnN0cmluZygyMDAs
ICd4Jyk7CisgICAgICBBU1NFUlRfT0soUHV0KGtleSwgInYxIikpOworICAgICAgY29uc3QgU25h
cHNob3QqIHMxID0gZGJfLT5HZXRTbmFwc2hvdCgpOworICAgICAgQVNTRVJUX09LKFB1dChrZXks
ICJ2MiIpKTsKKyAgICAgIEFTU0VSVF9FUSgidjIiLCBHZXQoa2V5KSk7CisgICAgICBBU1NFUlRf
RVEoInYxIiwgR2V0KGtleSwgczEpKTsKKyAgICAgIGRiZnVsbCgpLT5URVNUX0NvbXBhY3RNZW1U
YWJsZSgpOworICAgICAgQVNTRVJUX0VRKCJ2MiIsIEdldChrZXkpKTsKKyAgICAgIEFTU0VSVF9F
USgidjEiLCBHZXQoa2V5LCBzMSkpOworICAgICAgZGJfLT5SZWxlYXNlU25hcHNob3QoczEpOwor
ICAgIH0KKyAgfSB3aGlsZSAoQ2hhbmdlT3B0aW9ucygpKTsKK30KKworVEVTVChEQlRlc3QsIEdl
dExldmVsME9yZGVyaW5nKSB7CisgIGRvIHsKKyAgICAvLyBDaGVjayB0aGF0IHdlIHByb2Nlc3Mg
bGV2ZWwtMCBmaWxlcyBpbiBjb3JyZWN0IG9yZGVyLiAgVGhlIGNvZGUKKyAgICAvLyBiZWxvdyBn
ZW5lcmF0ZXMgdHdvIGxldmVsLTAgZmlsZXMgd2hlcmUgdGhlIGVhcmxpZXIgb25lIGNvbWVzCisg
ICAgLy8gYmVmb3JlIHRoZSBsYXRlciBvbmUgaW4gdGhlIGxldmVsLTAgZmlsZSBsaXN0IHNpbmNl
IHRoZSBlYXJsaWVyCisgICAgLy8gb25lIGhhcyBhIHNtYWxsZXIgInNtYWxsZXN0IiBrZXkuCisg
ICAgQVNTRVJUX09LKFB1dCgiYmFyIiwgImIiKSk7CisgICAgQVNTRVJUX09LKFB1dCgiZm9vIiwg
InYxIikpOworICAgIGRiZnVsbCgpLT5URVNUX0NvbXBhY3RNZW1UYWJsZSgpOworICAgIEFTU0VS
VF9PSyhQdXQoImZvbyIsICJ2MiIpKTsKKyAgICBkYmZ1bGwoKS0+VEVTVF9Db21wYWN0TWVtVGFi
bGUoKTsKKyAgICBBU1NFUlRfRVEoInYyIiwgR2V0KCJmb28iKSk7CisgIH0gd2hpbGUgKENoYW5n
ZU9wdGlvbnMoKSk7Cit9CisKK1RFU1QoREJUZXN0LCBHZXRPcmRlcmVkQnlMZXZlbHMpIHsKKyAg
ZG8geworICAgIEFTU0VSVF9PSyhQdXQoImZvbyIsICJ2MSIpKTsKKyAgICBDb21wYWN0KCJhIiwg
InoiKTsKKyAgICBBU1NFUlRfRVEoInYxIiwgR2V0KCJmb28iKSk7CisgICAgQVNTRVJUX09LKFB1
dCgiZm9vIiwgInYyIikpOworICAgIEFTU0VSVF9FUSgidjIiLCBHZXQoImZvbyIpKTsKKyAgICBk
YmZ1bGwoKS0+VEVTVF9Db21wYWN0TWVtVGFibGUoKTsKKyAgICBBU1NFUlRfRVEoInYyIiwgR2V0
KCJmb28iKSk7CisgIH0gd2hpbGUgKENoYW5nZU9wdGlvbnMoKSk7Cit9CisKK1RFU1QoREJUZXN0
LCBHZXRQaWNrc0NvcnJlY3RGaWxlKSB7CisgIGRvIHsKKyAgICAvLyBBcnJhbmdlIHRvIGhhdmUg
bXVsdGlwbGUgZmlsZXMgaW4gYSBub24tbGV2ZWwtMCBsZXZlbC4KKyAgICBBU1NFUlRfT0soUHV0
KCJhIiwgInZhIikpOworICAgIENvbXBhY3QoImEiLCAiYiIpOworICAgIEFTU0VSVF9PSyhQdXQo
IngiLCAidngiKSk7CisgICAgQ29tcGFjdCgieCIsICJ5Iik7CisgICAgQVNTRVJUX09LKFB1dCgi
ZiIsICJ2ZiIpKTsKKyAgICBDb21wYWN0KCJmIiwgImciKTsKKyAgICBBU1NFUlRfRVEoInZhIiwg
R2V0KCJhIikpOworICAgIEFTU0VSVF9FUSgidmYiLCBHZXQoImYiKSk7CisgICAgQVNTRVJUX0VR
KCJ2eCIsIEdldCgieCIpKTsKKyAgfSB3aGlsZSAoQ2hhbmdlT3B0aW9ucygpKTsKK30KKworVEVT
VChEQlRlc3QsIEdldEVuY291bnRlcnNFbXB0eUxldmVsKSB7CisgIGRvIHsKKyAgICAvLyBBcnJh
bmdlIGZvciB0aGUgZm9sbG93aW5nIHRvIGhhcHBlbjoKKyAgICAvLyAgICogc3N0YWJsZSBBIGlu
IGxldmVsIDAKKyAgICAvLyAgICogbm90aGluZyBpbiBsZXZlbCAxCisgICAgLy8gICAqIHNzdGFi
bGUgQiBpbiBsZXZlbCAyCisgICAgLy8gVGhlbiBkbyBlbm91Z2ggR2V0KCkgY2FsbHMgdG8gYXJy
YW5nZSBmb3IgYW4gYXV0b21hdGljIGNvbXBhY3Rpb24KKyAgICAvLyBvZiBzc3RhYmxlIEEuICBB
IGJ1ZyB3b3VsZCBjYXVzZSB0aGUgY29tcGFjdGlvbiB0byBiZSBtYXJrZWQgYXMKKyAgICAvLyBv
Y2N1cmluZyBhdCBsZXZlbCAxIChpbnN0ZWFkIG9mIHRoZSBjb3JyZWN0IGxldmVsIDApLgorCisg
ICAgLy8gU3RlcCAxOiBGaXJzdCBwbGFjZSBzc3RhYmxlcyBpbiBsZXZlbHMgMCBhbmQgMgorICAg
IGludCBjb21wYWN0aW9uX2NvdW50ID0gMDsKKyAgICB3aGlsZSAoTnVtVGFibGVGaWxlc0F0TGV2
ZWwoMCkgPT0gMCB8fAorICAgICAgICAgICBOdW1UYWJsZUZpbGVzQXRMZXZlbCgyKSA9PSAwKSB7
CisgICAgICBBU1NFUlRfTEUoY29tcGFjdGlvbl9jb3VudCwgMTAwKSA8PCAiY291bGQgbm90IGZp
bGwgbGV2ZWxzIDAgYW5kIDIiOworICAgICAgY29tcGFjdGlvbl9jb3VudCsrOworICAgICAgUHV0
KCJhIiwgImJlZ2luIik7CisgICAgICBQdXQoInoiLCAiZW5kIik7CisgICAgICBkYmZ1bGwoKS0+
VEVTVF9Db21wYWN0TWVtVGFibGUoKTsKKyAgICB9CisKKyAgICAvLyBTdGVwIDI6IGNsZWFyIGxl
dmVsIDEgaWYgbmVjZXNzYXJ5LgorICAgIGRiZnVsbCgpLT5URVNUX0NvbXBhY3RSYW5nZSgxLCBO
VUxMLCBOVUxMKTsKKyAgICBBU1NFUlRfRVEoTnVtVGFibGVGaWxlc0F0TGV2ZWwoMCksIDEpOwor
ICAgIEFTU0VSVF9FUShOdW1UYWJsZUZpbGVzQXRMZXZlbCgxKSwgMCk7CisgICAgQVNTRVJUX0VR
KE51bVRhYmxlRmlsZXNBdExldmVsKDIpLCAxKTsKKworICAgIC8vIFN0ZXAgMzogcmVhZCBhIGJ1
bmNoIG9mIHRpbWVzCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKKyAgICAg
IEFTU0VSVF9FUSgiTk9UX0ZPVU5EIiwgR2V0KCJtaXNzaW5nIikpOworICAgIH0KKworICAgIC8v
IFN0ZXAgNDogV2FpdCBmb3IgY29tcGFjdGlvbiB0byBmaW5pc2gKKyAgICBlbnZfLT5TbGVlcEZv
ck1pY3Jvc2Vjb25kcygxMDAwMDAwKTsKKworICAgIEFTU0VSVF9FUShOdW1UYWJsZUZpbGVzQXRM
ZXZlbCgwKSwgMCk7CisgIH0gd2hpbGUgKENoYW5nZU9wdGlvbnMoKSk7Cit9CisKK1RFU1QoREJU
ZXN0LCBJdGVyRW1wdHkpIHsKKyAgSXRlcmF0b3IqIGl0ZXIgPSBkYl8tPk5ld0l0ZXJhdG9yKFJl
YWRPcHRpb25zKCkpOworCisgIGl0ZXItPlNlZWtUb0ZpcnN0KCk7CisgIEFTU0VSVF9FUShJdGVy
U3RhdHVzKGl0ZXIpLCAiKGludmFsaWQpIik7CisKKyAgaXRlci0+U2Vla1RvTGFzdCgpOworICBB
U1NFUlRfRVEoSXRlclN0YXR1cyhpdGVyKSwgIihpbnZhbGlkKSIpOworCisgIGl0ZXItPlNlZWso
ImZvbyIpOworICBBU1NFUlRfRVEoSXRlclN0YXR1cyhpdGVyKSwgIihpbnZhbGlkKSIpOworCisg
IGRlbGV0ZSBpdGVyOworfQorCitURVNUKERCVGVzdCwgSXRlclNpbmdsZSkgeworICBBU1NFUlRf
T0soUHV0KCJhIiwgInZhIikpOworICBJdGVyYXRvciogaXRlciA9IGRiXy0+TmV3SXRlcmF0b3Io
UmVhZE9wdGlvbnMoKSk7CisKKyAgaXRlci0+U2Vla1RvRmlyc3QoKTsKKyAgQVNTRVJUX0VRKEl0
ZXJTdGF0dXMoaXRlciksICJhLT52YSIpOworICBpdGVyLT5OZXh0KCk7CisgIEFTU0VSVF9FUShJ
dGVyU3RhdHVzKGl0ZXIpLCAiKGludmFsaWQpIik7CisgIGl0ZXItPlNlZWtUb0ZpcnN0KCk7Cisg
IEFTU0VSVF9FUShJdGVyU3RhdHVzKGl0ZXIpLCAiYS0+dmEiKTsKKyAgaXRlci0+UHJldigpOwor
ICBBU1NFUlRfRVEoSXRlclN0YXR1cyhpdGVyKSwgIihpbnZhbGlkKSIpOworCisgIGl0ZXItPlNl
ZWtUb0xhc3QoKTsKKyAgQVNTRVJUX0VRKEl0ZXJTdGF0dXMoaXRlciksICJhLT52YSIpOworICBp
dGVyLT5OZXh0KCk7CisgIEFTU0VSVF9FUShJdGVyU3RhdHVzKGl0ZXIpLCAiKGludmFsaWQpIik7
CisgIGl0ZXItPlNlZWtUb0xhc3QoKTsKKyAgQVNTRVJUX0VRKEl0ZXJTdGF0dXMoaXRlciksICJh
LT52YSIpOworICBpdGVyLT5QcmV2KCk7CisgIEFTU0VSVF9FUShJdGVyU3RhdHVzKGl0ZXIpLCAi
KGludmFsaWQpIik7CisKKyAgaXRlci0+U2VlaygiIik7CisgIEFTU0VSVF9FUShJdGVyU3RhdHVz
KGl0ZXIpLCAiYS0+dmEiKTsKKyAgaXRlci0+TmV4dCgpOworICBBU1NFUlRfRVEoSXRlclN0YXR1
cyhpdGVyKSwgIihpbnZhbGlkKSIpOworCisgIGl0ZXItPlNlZWsoImEiKTsKKyAgQVNTRVJUX0VR
KEl0ZXJTdGF0dXMoaXRlciksICJhLT52YSIpOworICBpdGVyLT5OZXh0KCk7CisgIEFTU0VSVF9F
UShJdGVyU3RhdHVzKGl0ZXIpLCAiKGludmFsaWQpIik7CisKKyAgaXRlci0+U2VlaygiYiIpOwor
ICBBU1NFUlRfRVEoSXRlclN0YXR1cyhpdGVyKSwgIihpbnZhbGlkKSIpOworCisgIGRlbGV0ZSBp
dGVyOworfQorCitURVNUKERCVGVzdCwgSXRlck11bHRpKSB7CisgIEFTU0VSVF9PSyhQdXQoImEi
LCAidmEiKSk7CisgIEFTU0VSVF9PSyhQdXQoImIiLCAidmIiKSk7CisgIEFTU0VSVF9PSyhQdXQo
ImMiLCAidmMiKSk7CisgIEl0ZXJhdG9yKiBpdGVyID0gZGJfLT5OZXdJdGVyYXRvcihSZWFkT3B0
aW9ucygpKTsKKworICBpdGVyLT5TZWVrVG9GaXJzdCgpOworICBBU1NFUlRfRVEoSXRlclN0YXR1
cyhpdGVyKSwgImEtPnZhIik7CisgIGl0ZXItPk5leHQoKTsKKyAgQVNTRVJUX0VRKEl0ZXJTdGF0
dXMoaXRlciksICJiLT52YiIpOworICBpdGVyLT5OZXh0KCk7CisgIEFTU0VSVF9FUShJdGVyU3Rh
dHVzKGl0ZXIpLCAiYy0+dmMiKTsKKyAgaXRlci0+TmV4dCgpOworICBBU1NFUlRfRVEoSXRlclN0
YXR1cyhpdGVyKSwgIihpbnZhbGlkKSIpOworICBpdGVyLT5TZWVrVG9GaXJzdCgpOworICBBU1NF
UlRfRVEoSXRlclN0YXR1cyhpdGVyKSwgImEtPnZhIik7CisgIGl0ZXItPlByZXYoKTsKKyAgQVNT
RVJUX0VRKEl0ZXJTdGF0dXMoaXRlciksICIoaW52YWxpZCkiKTsKKworICBpdGVyLT5TZWVrVG9M
YXN0KCk7CisgIEFTU0VSVF9FUShJdGVyU3RhdHVzKGl0ZXIpLCAiYy0+dmMiKTsKKyAgaXRlci0+
UHJldigpOworICBBU1NFUlRfRVEoSXRlclN0YXR1cyhpdGVyKSwgImItPnZiIik7CisgIGl0ZXIt
PlByZXYoKTsKKyAgQVNTRVJUX0VRKEl0ZXJTdGF0dXMoaXRlciksICJhLT52YSIpOworICBpdGVy
LT5QcmV2KCk7CisgIEFTU0VSVF9FUShJdGVyU3RhdHVzKGl0ZXIpLCAiKGludmFsaWQpIik7Cisg
IGl0ZXItPlNlZWtUb0xhc3QoKTsKKyAgQVNTRVJUX0VRKEl0ZXJTdGF0dXMoaXRlciksICJjLT52
YyIpOworICBpdGVyLT5OZXh0KCk7CisgIEFTU0VSVF9FUShJdGVyU3RhdHVzKGl0ZXIpLCAiKGlu
dmFsaWQpIik7CisKKyAgaXRlci0+U2VlaygiIik7CisgIEFTU0VSVF9FUShJdGVyU3RhdHVzKGl0
ZXIpLCAiYS0+dmEiKTsKKyAgaXRlci0+U2VlaygiYSIpOworICBBU1NFUlRfRVEoSXRlclN0YXR1
cyhpdGVyKSwgImEtPnZhIik7CisgIGl0ZXItPlNlZWsoImF4Iik7CisgIEFTU0VSVF9FUShJdGVy
U3RhdHVzKGl0ZXIpLCAiYi0+dmIiKTsKKyAgaXRlci0+U2VlaygiYiIpOworICBBU1NFUlRfRVEo
SXRlclN0YXR1cyhpdGVyKSwgImItPnZiIik7CisgIGl0ZXItPlNlZWsoInoiKTsKKyAgQVNTRVJU
X0VRKEl0ZXJTdGF0dXMoaXRlciksICIoaW52YWxpZCkiKTsKKworICAvLyBTd2l0Y2ggZnJvbSBy
ZXZlcnNlIHRvIGZvcndhcmQKKyAgaXRlci0+U2Vla1RvTGFzdCgpOworICBpdGVyLT5QcmV2KCk7
CisgIGl0ZXItPlByZXYoKTsKKyAgaXRlci0+TmV4dCgpOworICBBU1NFUlRfRVEoSXRlclN0YXR1
cyhpdGVyKSwgImItPnZiIik7CisKKyAgLy8gU3dpdGNoIGZyb20gZm9yd2FyZCB0byByZXZlcnNl
CisgIGl0ZXItPlNlZWtUb0ZpcnN0KCk7CisgIGl0ZXItPk5leHQoKTsKKyAgaXRlci0+TmV4dCgp
OworICBpdGVyLT5QcmV2KCk7CisgIEFTU0VSVF9FUShJdGVyU3RhdHVzKGl0ZXIpLCAiYi0+dmIi
KTsKKworICAvLyBNYWtlIHN1cmUgaXRlciBzdGF5cyBhdCBzbmFwc2hvdAorICBBU1NFUlRfT0so
UHV0KCJhIiwgICJ2YTIiKSk7CisgIEFTU0VSVF9PSyhQdXQoImEyIiwgInZhMyIpKTsKKyAgQVNT
RVJUX09LKFB1dCgiYiIsICAidmIyIikpOworICBBU1NFUlRfT0soUHV0KCJjIiwgICJ2YzIiKSk7
CisgIEFTU0VSVF9PSyhEZWxldGUoImIiKSk7CisgIGl0ZXItPlNlZWtUb0ZpcnN0KCk7CisgIEFT
U0VSVF9FUShJdGVyU3RhdHVzKGl0ZXIpLCAiYS0+dmEiKTsKKyAgaXRlci0+TmV4dCgpOworICBB
U1NFUlRfRVEoSXRlclN0YXR1cyhpdGVyKSwgImItPnZiIik7CisgIGl0ZXItPk5leHQoKTsKKyAg
QVNTRVJUX0VRKEl0ZXJTdGF0dXMoaXRlciksICJjLT52YyIpOworICBpdGVyLT5OZXh0KCk7Cisg
IEFTU0VSVF9FUShJdGVyU3RhdHVzKGl0ZXIpLCAiKGludmFsaWQpIik7CisgIGl0ZXItPlNlZWtU
b0xhc3QoKTsKKyAgQVNTRVJUX0VRKEl0ZXJTdGF0dXMoaXRlciksICJjLT52YyIpOworICBpdGVy
LT5QcmV2KCk7CisgIEFTU0VSVF9FUShJdGVyU3RhdHVzKGl0ZXIpLCAiYi0+dmIiKTsKKyAgaXRl
ci0+UHJldigpOworICBBU1NFUlRfRVEoSXRlclN0YXR1cyhpdGVyKSwgImEtPnZhIik7CisgIGl0
ZXItPlByZXYoKTsKKyAgQVNTRVJUX0VRKEl0ZXJTdGF0dXMoaXRlciksICIoaW52YWxpZCkiKTsK
KworICBkZWxldGUgaXRlcjsKK30KKworVEVTVChEQlRlc3QsIEl0ZXJTbWFsbEFuZExhcmdlTWl4
KSB7CisgIEFTU0VSVF9PSyhQdXQoImEiLCAidmEiKSk7CisgIEFTU0VSVF9PSyhQdXQoImIiLCBz
dGQ6OnN0cmluZygxMDAwMDAsICdiJykpKTsKKyAgQVNTRVJUX09LKFB1dCgiYyIsICJ2YyIpKTsK
KyAgQVNTRVJUX09LKFB1dCgiZCIsIHN0ZDo6c3RyaW5nKDEwMDAwMCwgJ2QnKSkpOworICBBU1NF
UlRfT0soUHV0KCJlIiwgc3RkOjpzdHJpbmcoMTAwMDAwLCAnZScpKSk7CisKKyAgSXRlcmF0b3Iq
IGl0ZXIgPSBkYl8tPk5ld0l0ZXJhdG9yKFJlYWRPcHRpb25zKCkpOworCisgIGl0ZXItPlNlZWtU
b0ZpcnN0KCk7CisgIEFTU0VSVF9FUShJdGVyU3RhdHVzKGl0ZXIpLCAiYS0+dmEiKTsKKyAgaXRl
ci0+TmV4dCgpOworICBBU1NFUlRfRVEoSXRlclN0YXR1cyhpdGVyKSwgImItPiIgKyBzdGQ6OnN0
cmluZygxMDAwMDAsICdiJykpOworICBpdGVyLT5OZXh0KCk7CisgIEFTU0VSVF9FUShJdGVyU3Rh
dHVzKGl0ZXIpLCAiYy0+dmMiKTsKKyAgaXRlci0+TmV4dCgpOworICBBU1NFUlRfRVEoSXRlclN0
YXR1cyhpdGVyKSwgImQtPiIgKyBzdGQ6OnN0cmluZygxMDAwMDAsICdkJykpOworICBpdGVyLT5O
ZXh0KCk7CisgIEFTU0VSVF9FUShJdGVyU3RhdHVzKGl0ZXIpLCAiZS0+IiArIHN0ZDo6c3RyaW5n
KDEwMDAwMCwgJ2UnKSk7CisgIGl0ZXItPk5leHQoKTsKKyAgQVNTRVJUX0VRKEl0ZXJTdGF0dXMo
aXRlciksICIoaW52YWxpZCkiKTsKKworICBpdGVyLT5TZWVrVG9MYXN0KCk7CisgIEFTU0VSVF9F
UShJdGVyU3RhdHVzKGl0ZXIpLCAiZS0+IiArIHN0ZDo6c3RyaW5nKDEwMDAwMCwgJ2UnKSk7Cisg
IGl0ZXItPlByZXYoKTsKKyAgQVNTRVJUX0VRKEl0ZXJTdGF0dXMoaXRlciksICJkLT4iICsgc3Rk
OjpzdHJpbmcoMTAwMDAwLCAnZCcpKTsKKyAgaXRlci0+UHJldigpOworICBBU1NFUlRfRVEoSXRl
clN0YXR1cyhpdGVyKSwgImMtPnZjIik7CisgIGl0ZXItPlByZXYoKTsKKyAgQVNTRVJUX0VRKEl0
ZXJTdGF0dXMoaXRlciksICJiLT4iICsgc3RkOjpzdHJpbmcoMTAwMDAwLCAnYicpKTsKKyAgaXRl
ci0+UHJldigpOworICBBU1NFUlRfRVEoSXRlclN0YXR1cyhpdGVyKSwgImEtPnZhIik7CisgIGl0
ZXItPlByZXYoKTsKKyAgQVNTRVJUX0VRKEl0ZXJTdGF0dXMoaXRlciksICIoaW52YWxpZCkiKTsK
KworICBkZWxldGUgaXRlcjsKK30KKworVEVTVChEQlRlc3QsIEl0ZXJNdWx0aVdpdGhEZWxldGUp
IHsKKyAgZG8geworICAgIEFTU0VSVF9PSyhQdXQoImEiLCAidmEiKSk7CisgICAgQVNTRVJUX09L
KFB1dCgiYiIsICJ2YiIpKTsKKyAgICBBU1NFUlRfT0soUHV0KCJjIiwgInZjIikpOworICAgIEFT
U0VSVF9PSyhEZWxldGUoImIiKSk7CisgICAgQVNTRVJUX0VRKCJOT1RfRk9VTkQiLCBHZXQoImIi
KSk7CisKKyAgICBJdGVyYXRvciogaXRlciA9IGRiXy0+TmV3SXRlcmF0b3IoUmVhZE9wdGlvbnMo
KSk7CisgICAgaXRlci0+U2VlaygiYyIpOworICAgIEFTU0VSVF9FUShJdGVyU3RhdHVzKGl0ZXIp
LCAiYy0+dmMiKTsKKyAgICBpdGVyLT5QcmV2KCk7CisgICAgQVNTRVJUX0VRKEl0ZXJTdGF0dXMo
aXRlciksICJhLT52YSIpOworICAgIGRlbGV0ZSBpdGVyOworICB9IHdoaWxlIChDaGFuZ2VPcHRp
b25zKCkpOworfQorCitURVNUKERCVGVzdCwgUmVjb3ZlcikgeworICBkbyB7CisgICAgQVNTRVJU
X09LKFB1dCgiZm9vIiwgInYxIikpOworICAgIEFTU0VSVF9PSyhQdXQoImJheiIsICJ2NSIpKTsK
KworICAgIFJlb3BlbigpOworICAgIEFTU0VSVF9FUSgidjEiLCBHZXQoImZvbyIpKTsKKworICAg
IEFTU0VSVF9FUSgidjEiLCBHZXQoImZvbyIpKTsKKyAgICBBU1NFUlRfRVEoInY1IiwgR2V0KCJi
YXoiKSk7CisgICAgQVNTRVJUX09LKFB1dCgiYmFyIiwgInYyIikpOworICAgIEFTU0VSVF9PSyhQ
dXQoImZvbyIsICJ2MyIpKTsKKworICAgIFJlb3BlbigpOworICAgIEFTU0VSVF9FUSgidjMiLCBH
ZXQoImZvbyIpKTsKKyAgICBBU1NFUlRfT0soUHV0KCJmb28iLCAidjQiKSk7CisgICAgQVNTRVJU
X0VRKCJ2NCIsIEdldCgiZm9vIikpOworICAgIEFTU0VSVF9FUSgidjIiLCBHZXQoImJhciIpKTsK
KyAgICBBU1NFUlRfRVEoInY1IiwgR2V0KCJiYXoiKSk7CisgIH0gd2hpbGUgKENoYW5nZU9wdGlv
bnMoKSk7Cit9CisKK1RFU1QoREJUZXN0LCBSZWNvdmVyeVdpdGhFbXB0eUxvZykgeworICBkbyB7
CisgICAgQVNTRVJUX09LKFB1dCgiZm9vIiwgInYxIikpOworICAgIEFTU0VSVF9PSyhQdXQoImZv
byIsICJ2MiIpKTsKKyAgICBSZW9wZW4oKTsKKyAgICBSZW9wZW4oKTsKKyAgICBBU1NFUlRfT0so
UHV0KCJmb28iLCAidjMiKSk7CisgICAgUmVvcGVuKCk7CisgICAgQVNTRVJUX0VRKCJ2MyIsIEdl
dCgiZm9vIikpOworICB9IHdoaWxlIChDaGFuZ2VPcHRpb25zKCkpOworfQorCisvLyBDaGVjayB0
aGF0IHdyaXRlcyBkb25lIGR1cmluZyBhIG1lbXRhYmxlIGNvbXBhY3Rpb24gYXJlIHJlY292ZXJl
ZAorLy8gaWYgdGhlIGRhdGFiYXNlIGlzIHNodXRkb3duIGR1cmluZyB0aGUgbWVtdGFibGUgY29t
cGFjdGlvbi4KK1RFU1QoREJUZXN0LCBSZWNvdmVyRHVyaW5nTWVtdGFibGVDb21wYWN0aW9uKSB7
CisgIGRvIHsKKyAgICBPcHRpb25zIG9wdGlvbnMgPSBDdXJyZW50T3B0aW9ucygpOworICAgIG9w
dGlvbnMuZW52ID0gZW52XzsKKyAgICBvcHRpb25zLndyaXRlX2J1ZmZlcl9zaXplID0gMTAwMDAw
MDsKKyAgICBSZW9wZW4oJm9wdGlvbnMpOworCisgICAgLy8gVHJpZ2dlciBhIGxvbmcgbWVtdGFi
bGUgY29tcGFjdGlvbiBhbmQgcmVvcGVuIHRoZSBkYXRhYmFzZSBkdXJpbmcgaXQKKyAgICBBU1NF
UlRfT0soUHV0KCJmb28iLCAidjEiKSk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdvZXMg
dG8gMXN0IGxvZyBmaWxlCisgICAgQVNTRVJUX09LKFB1dCgiYmlnMSIsIHN0ZDo6c3RyaW5nKDEw
MDAwMDAwLCAneCcpKSk7ICAvLyBGaWxscyBtZW10YWJsZQorICAgIEFTU0VSVF9PSyhQdXQoImJp
ZzIiLCBzdGQ6OnN0cmluZygxMDAwLCAneScpKSk7ICAgICAgLy8gVHJpZ2dlcnMgY29tcGFjdGlv
bgorICAgIEFTU0VSVF9PSyhQdXQoImJhciIsICJ2MiIpKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gR29lcyB0byBuZXcgbG9nIGZpbGUKKworICAgIFJlb3Blbigmb3B0aW9ucyk7CisgICAg
QVNTRVJUX0VRKCJ2MSIsIEdldCgiZm9vIikpOworICAgIEFTU0VSVF9FUSgidjIiLCBHZXQoImJh
ciIpKTsKKyAgICBBU1NFUlRfRVEoc3RkOjpzdHJpbmcoMTAwMDAwMDAsICd4JyksIEdldCgiYmln
MSIpKTsKKyAgICBBU1NFUlRfRVEoc3RkOjpzdHJpbmcoMTAwMCwgJ3knKSwgR2V0KCJiaWcyIikp
OworICB9IHdoaWxlIChDaGFuZ2VPcHRpb25zKCkpOworfQorCitzdGF0aWMgc3RkOjpzdHJpbmcg
S2V5KGludCBpKSB7CisgIGNoYXIgYnVmWzEwMF07CisgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1
ZiksICJrZXklMDZkIiwgaSk7CisgIHJldHVybiBzdGQ6OnN0cmluZyhidWYpOworfQorCitURVNU
KERCVGVzdCwgTWlub3JDb21wYWN0aW9uc0hhcHBlbikgeworICBPcHRpb25zIG9wdGlvbnMgPSBD
dXJyZW50T3B0aW9ucygpOworICBvcHRpb25zLndyaXRlX2J1ZmZlcl9zaXplID0gMTAwMDA7Cisg
IFJlb3Blbigmb3B0aW9ucyk7CisKKyAgY29uc3QgaW50IE4gPSA1MDA7CisKKyAgaW50IHN0YXJ0
aW5nX251bV90YWJsZXMgPSBUb3RhbFRhYmxlRmlsZXMoKTsKKyAgZm9yIChpbnQgaSA9IDA7IGkg
PCBOOyBpKyspIHsKKyAgICBBU1NFUlRfT0soUHV0KEtleShpKSwgS2V5KGkpICsgc3RkOjpzdHJp
bmcoMTAwMCwgJ3YnKSkpOworICB9CisgIGludCBlbmRpbmdfbnVtX3RhYmxlcyA9IFRvdGFsVGFi
bGVGaWxlcygpOworICBBU1NFUlRfR1QoZW5kaW5nX251bV90YWJsZXMsIHN0YXJ0aW5nX251bV90
YWJsZXMpOworCisgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CisgICAgQVNTRVJUX0VR
KEtleShpKSArIHN0ZDo6c3RyaW5nKDEwMDAsICd2JyksIEdldChLZXkoaSkpKTsKKyAgfQorCisg
IFJlb3BlbigpOworCisgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CisgICAgQVNTRVJU
X0VRKEtleShpKSArIHN0ZDo6c3RyaW5nKDEwMDAsICd2JyksIEdldChLZXkoaSkpKTsKKyAgfQor
fQorCitURVNUKERCVGVzdCwgUmVjb3ZlcldpdGhMYXJnZUxvZykgeworICB7CisgICAgT3B0aW9u
cyBvcHRpb25zID0gQ3VycmVudE9wdGlvbnMoKTsKKyAgICBSZW9wZW4oJm9wdGlvbnMpOworICAg
IEFTU0VSVF9PSyhQdXQoImJpZzEiLCBzdGQ6OnN0cmluZygyMDAwMDAsICcxJykpKTsKKyAgICBB
U1NFUlRfT0soUHV0KCJiaWcyIiwgc3RkOjpzdHJpbmcoMjAwMDAwLCAnMicpKSk7CisgICAgQVNT
RVJUX09LKFB1dCgic21hbGwzIiwgc3RkOjpzdHJpbmcoMTAsICczJykpKTsKKyAgICBBU1NFUlRf
T0soUHV0KCJzbWFsbDQiLCBzdGQ6OnN0cmluZygxMCwgJzQnKSkpOworICAgIEFTU0VSVF9FUShO
dW1UYWJsZUZpbGVzQXRMZXZlbCgwKSwgMCk7CisgIH0KKworICAvLyBNYWtlIHN1cmUgdGhhdCBp
ZiB3ZSByZS1vcGVuIHdpdGggYSBzbWFsbCB3cml0ZSBidWZmZXIgc2l6ZSB0aGF0CisgIC8vIHdl
IGZsdXNoIHRhYmxlIGZpbGVzIGluIHRoZSBtaWRkbGUgb2YgYSBsYXJnZSBsb2cgZmlsZS4KKyAg
T3B0aW9ucyBvcHRpb25zID0gQ3VycmVudE9wdGlvbnMoKTsKKyAgb3B0aW9ucy53cml0ZV9idWZm
ZXJfc2l6ZSA9IDEwMDAwMDsKKyAgUmVvcGVuKCZvcHRpb25zKTsKKyAgQVNTRVJUX0VRKE51bVRh
YmxlRmlsZXNBdExldmVsKDApLCAzKTsKKyAgQVNTRVJUX0VRKHN0ZDo6c3RyaW5nKDIwMDAwMCwg
JzEnKSwgR2V0KCJiaWcxIikpOworICBBU1NFUlRfRVEoc3RkOjpzdHJpbmcoMjAwMDAwLCAnMicp
LCBHZXQoImJpZzIiKSk7CisgIEFTU0VSVF9FUShzdGQ6OnN0cmluZygxMCwgJzMnKSwgR2V0KCJz
bWFsbDMiKSk7CisgIEFTU0VSVF9FUShzdGQ6OnN0cmluZygxMCwgJzQnKSwgR2V0KCJzbWFsbDQi
KSk7CisgIEFTU0VSVF9HVChOdW1UYWJsZUZpbGVzQXRMZXZlbCgwKSwgMSk7Cit9CisKK1RFU1Qo
REJUZXN0LCBDb21wYWN0aW9uc0dlbmVyYXRlTXVsdGlwbGVGaWxlcykgeworICBPcHRpb25zIG9w
dGlvbnMgPSBDdXJyZW50T3B0aW9ucygpOworICBvcHRpb25zLndyaXRlX2J1ZmZlcl9zaXplID0g
MTAwMDAwMDAwOyAgICAgICAgLy8gTGFyZ2Ugd3JpdGUgYnVmZmVyCisgIFJlb3Blbigmb3B0aW9u
cyk7CisKKyAgUmFuZG9tIHJuZCgzMDEpOworCisgIC8vIFdyaXRlIDhNQiAoODAgdmFsdWVzLCBl
YWNoIDEwMEspCisgIEFTU0VSVF9FUShOdW1UYWJsZUZpbGVzQXRMZXZlbCgwKSwgMCk7CisgIHN0
ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiB2YWx1ZXM7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgODA7
IGkrKykgeworICAgIHZhbHVlcy5wdXNoX2JhY2soUmFuZG9tU3RyaW5nKCZybmQsIDEwMDAwMCkp
OworICAgIEFTU0VSVF9PSyhQdXQoS2V5KGkpLCB2YWx1ZXNbaV0pKTsKKyAgfQorCisgIC8vIFJl
b3BlbmluZyBtb3ZlcyB1cGRhdGVzIHRvIGxldmVsLTAKKyAgUmVvcGVuKCZvcHRpb25zKTsKKyAg
ZGJmdWxsKCktPlRFU1RfQ29tcGFjdFJhbmdlKDAsIE5VTEwsIE5VTEwpOworCisgIEFTU0VSVF9F
UShOdW1UYWJsZUZpbGVzQXRMZXZlbCgwKSwgMCk7CisgIEFTU0VSVF9HVChOdW1UYWJsZUZpbGVz
QXRMZXZlbCgxKSwgMSk7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgODA7IGkrKykgeworICAgIEFT
U0VSVF9FUShHZXQoS2V5KGkpKSwgdmFsdWVzW2ldKTsKKyAgfQorfQorCitURVNUKERCVGVzdCwg
UmVwZWF0ZWRXcml0ZXNUb1NhbWVLZXkpIHsKKyAgT3B0aW9ucyBvcHRpb25zID0gQ3VycmVudE9w
dGlvbnMoKTsKKyAgb3B0aW9ucy5lbnYgPSBlbnZfOworICBvcHRpb25zLndyaXRlX2J1ZmZlcl9z
aXplID0gMTAwMDAwOyAgLy8gU21hbGwgd3JpdGUgYnVmZmVyCisgIFJlb3Blbigmb3B0aW9ucyk7
CisKKyAgLy8gV2UgbXVzdCBoYXZlIGF0IG1vc3Qgb25lIGZpbGUgcGVyIGxldmVsIGV4Y2VwdCBm
b3IgbGV2ZWwtMCwKKyAgLy8gd2hpY2ggbWF5IGhhdmUgdXAgdG8ga0wwX1N0b3BXcml0ZXNUcmln
Z2VyIGZpbGVzLgorICBjb25zdCBpbnQga01heEZpbGVzID0gY29uZmlnOjprTnVtTGV2ZWxzICsg
Y29uZmlnOjprTDBfU3RvcFdyaXRlc1RyaWdnZXI7CisKKyAgUmFuZG9tIHJuZCgzMDEpOworICBz
dGQ6OnN0cmluZyB2YWx1ZSA9IFJhbmRvbVN0cmluZygmcm5kLCAyICogb3B0aW9ucy53cml0ZV9i
dWZmZXJfc2l6ZSk7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgNSAqIGtNYXhGaWxlczsgaSsrKSB7
CisgICAgUHV0KCJrZXkiLCB2YWx1ZSk7CisgICAgQVNTRVJUX0xFKFRvdGFsVGFibGVGaWxlcygp
LCBrTWF4RmlsZXMpOworICAgIGZwcmludGYoc3RkZXJyLCAiYWZ0ZXIgJWQ6ICVkIGZpbGVzXG4i
LCBpbnQoaSsxKSwgVG90YWxUYWJsZUZpbGVzKCkpOworICB9Cit9CisKK1RFU1QoREJUZXN0LCBT
cGFyc2VNZXJnZSkgeworICBPcHRpb25zIG9wdGlvbnMgPSBDdXJyZW50T3B0aW9ucygpOworICBv
cHRpb25zLmNvbXByZXNzaW9uID0ga05vQ29tcHJlc3Npb247CisgIFJlb3Blbigmb3B0aW9ucyk7
CisKKyAgRmlsbExldmVscygiQSIsICJaIik7CisKKyAgLy8gU3VwcG9zZSB0aGVyZSBpczoKKyAg
Ly8gICAgc21hbGwgYW1vdW50IG9mIGRhdGEgd2l0aCBwcmVmaXggQQorICAvLyAgICBsYXJnZSBh
bW91bnQgb2YgZGF0YSB3aXRoIHByZWZpeCBCCisgIC8vICAgIHNtYWxsIGFtb3VudCBvZiBkYXRh
IHdpdGggcHJlZml4IEMKKyAgLy8gYW5kIHRoYXQgcmVjZW50IHVwZGF0ZXMgaGF2ZSBtYWRlIHNt
YWxsIGNoYW5nZXMgdG8gYWxsIHRocmVlIHByZWZpeGVzLgorICAvLyBDaGVjayB0aGF0IHdlIGRv
IG5vdCBkbyBhIGNvbXBhY3Rpb24gdGhhdCBtZXJnZXMgYWxsIG9mIEIgaW4gb25lIHNob3QuCisg
IGNvbnN0IHN0ZDo6c3RyaW5nIHZhbHVlKDEwMDAsICd4Jyk7CisgIFB1dCgiQSIsICJ2YSIpOwor
ICAvLyBXcml0ZSBhcHByb3hpbWF0ZWx5IDEwME1CIG9mICJCIiB2YWx1ZXMKKyAgZm9yIChpbnQg
aSA9IDA7IGkgPCAxMDAwMDA7IGkrKykgeworICAgIGNoYXIga2V5WzEwMF07CisgICAgc25wcmlu
dGYoa2V5LCBzaXplb2Yoa2V5KSwgIkIlMDEwZCIsIGkpOworICAgIFB1dChrZXksIHZhbHVlKTsK
KyAgfQorICBQdXQoIkMiLCAidmMiKTsKKyAgZGJmdWxsKCktPlRFU1RfQ29tcGFjdE1lbVRhYmxl
KCk7CisgIGRiZnVsbCgpLT5URVNUX0NvbXBhY3RSYW5nZSgwLCBOVUxMLCBOVUxMKTsKKworICAv
LyBNYWtlIHNwYXJzZSB1cGRhdGUKKyAgUHV0KCJBIiwgICAgInZhMiIpOworICBQdXQoIkIxMDAi
LCAiYnZhbHVlMiIpOworICBQdXQoIkMiLCAgICAidmMyIik7CisgIGRiZnVsbCgpLT5URVNUX0Nv
bXBhY3RNZW1UYWJsZSgpOworCisgIC8vIENvbXBhY3Rpb25zIHNob3VsZCBub3QgY2F1c2UgdXMg
dG8gY3JlYXRlIGEgc2l0dWF0aW9uIHdoZXJlCisgIC8vIGEgZmlsZSBvdmVybGFwcyB0b28gbXVj
aCBkYXRhIGF0IHRoZSBuZXh0IGxldmVsLgorICBBU1NFUlRfTEUoZGJmdWxsKCktPlRFU1RfTWF4
TmV4dExldmVsT3ZlcmxhcHBpbmdCeXRlcygpLCAyMCoxMDQ4NTc2KTsKKyAgZGJmdWxsKCktPlRF
U1RfQ29tcGFjdFJhbmdlKDAsIE5VTEwsIE5VTEwpOworICBBU1NFUlRfTEUoZGJmdWxsKCktPlRF
U1RfTWF4TmV4dExldmVsT3ZlcmxhcHBpbmdCeXRlcygpLCAyMCoxMDQ4NTc2KTsKKyAgZGJmdWxs
KCktPlRFU1RfQ29tcGFjdFJhbmdlKDEsIE5VTEwsIE5VTEwpOworICBBU1NFUlRfTEUoZGJmdWxs
KCktPlRFU1RfTWF4TmV4dExldmVsT3ZlcmxhcHBpbmdCeXRlcygpLCAyMCoxMDQ4NTc2KTsKK30K
Kworc3RhdGljIGJvb2wgQmV0d2Vlbih1aW50NjRfdCB2YWwsIHVpbnQ2NF90IGxvdywgdWludDY0
X3QgaGlnaCkgeworICBib29sIHJlc3VsdCA9ICh2YWwgPj0gbG93KSAmJiAodmFsIDw9IGhpZ2gp
OworICBpZiAoIXJlc3VsdCkgeworICAgIGZwcmludGYoc3RkZXJyLCAiVmFsdWUgJWxsdSBpcyBu
b3QgaW4gcmFuZ2UgWyVsbHUsICVsbHVdXG4iLAorICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcg
bG9uZykodmFsKSwKKyAgICAgICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpKGxvdyksCisgICAg
ICAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKShoaWdoKSk7CisgIH0KKyAgcmV0dXJuIHJlc3Vs
dDsKK30KKworVEVTVChEQlRlc3QsIEFwcHJveGltYXRlU2l6ZXMpIHsKKyAgZG8geworICAgIE9w
dGlvbnMgb3B0aW9ucyA9IEN1cnJlbnRPcHRpb25zKCk7CisgICAgb3B0aW9ucy53cml0ZV9idWZm
ZXJfc2l6ZSA9IDEwMDAwMDAwMDsgICAgICAgIC8vIExhcmdlIHdyaXRlIGJ1ZmZlcgorICAgIG9w
dGlvbnMuY29tcHJlc3Npb24gPSBrTm9Db21wcmVzc2lvbjsKKyAgICBEZXN0cm95QW5kUmVvcGVu
KCk7CisKKyAgICBBU1NFUlRfVFJVRShCZXR3ZWVuKFNpemUoIiIsICJ4eXoiKSwgMCwgMCkpOwor
ICAgIFJlb3Blbigmb3B0aW9ucyk7CisgICAgQVNTRVJUX1RSVUUoQmV0d2VlbihTaXplKCIiLCAi
eHl6IiksIDAsIDApKTsKKworICAgIC8vIFdyaXRlIDhNQiAoODAgdmFsdWVzLCBlYWNoIDEwMEsp
CisgICAgQVNTRVJUX0VRKE51bVRhYmxlRmlsZXNBdExldmVsKDApLCAwKTsKKyAgICBjb25zdCBp
bnQgTiA9IDgwOworICAgIHN0YXRpYyBjb25zdCBpbnQgUzEgPSAxMDAwMDA7CisgICAgc3RhdGlj
IGNvbnN0IGludCBTMiA9IDEwNTAwMDsgIC8vIEFsbG93IHNvbWUgZXhwYW5zaW9uIGZyb20gbWV0
YWRhdGEKKyAgICBSYW5kb20gcm5kKDMwMSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBp
KyspIHsKKyAgICAgIEFTU0VSVF9PSyhQdXQoS2V5KGkpLCBSYW5kb21TdHJpbmcoJnJuZCwgUzEp
KSk7CisgICAgfQorCisgICAgLy8gMCBiZWNhdXNlIEdldEFwcHJveGltYXRlU2l6ZXMoKSBkb2Vz
IG5vdCBhY2NvdW50IGZvciBtZW10YWJsZSBzcGFjZQorICAgIEFTU0VSVF9UUlVFKEJldHdlZW4o
U2l6ZSgiIiwgS2V5KDUwKSksIDAsIDApKTsKKworICAgIC8vIENoZWNrIHNpemVzIGFjcm9zcyBy
ZWNvdmVyeSBieSByZW9wZW5pbmcgYSBmZXcgdGltZXMKKyAgICBmb3IgKGludCBydW4gPSAwOyBy
dW4gPCAzOyBydW4rKykgeworICAgICAgUmVvcGVuKCZvcHRpb25zKTsKKworICAgICAgZm9yIChp
bnQgY29tcGFjdF9zdGFydCA9IDA7IGNvbXBhY3Rfc3RhcnQgPCBOOyBjb21wYWN0X3N0YXJ0ICs9
IDEwKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSArPSAxMCkgeworICAgICAg
ICAgIEFTU0VSVF9UUlVFKEJldHdlZW4oU2l6ZSgiIiwgS2V5KGkpKSwgUzEqaSwgUzIqaSkpOwor
ICAgICAgICAgIEFTU0VSVF9UUlVFKEJldHdlZW4oU2l6ZSgiIiwgS2V5KGkpKyIuc3VmZml4Iiks
IFMxKihpKzEpLCBTMiooaSsxKSkpOworICAgICAgICAgIEFTU0VSVF9UUlVFKEJldHdlZW4oU2l6
ZShLZXkoaSksIEtleShpKzEwKSksIFMxKjEwLCBTMioxMCkpOworICAgICAgICB9CisgICAgICAg
IEFTU0VSVF9UUlVFKEJldHdlZW4oU2l6ZSgiIiwgS2V5KDUwKSksIFMxKjUwLCBTMio1MCkpOwor
ICAgICAgICBBU1NFUlRfVFJVRShCZXR3ZWVuKFNpemUoIiIsIEtleSg1MCkrIi5zdWZmaXgiKSwg
UzEqNTAsIFMyKjUwKSk7CisKKyAgICAgICAgc3RkOjpzdHJpbmcgY3N0YXJ0X3N0ciA9IEtleShj
b21wYWN0X3N0YXJ0KTsKKyAgICAgICAgc3RkOjpzdHJpbmcgY2VuZF9zdHIgPSBLZXkoY29tcGFj
dF9zdGFydCArIDkpOworICAgICAgICBTbGljZSBjc3RhcnQgPSBjc3RhcnRfc3RyOworICAgICAg
ICBTbGljZSBjZW5kID0gY2VuZF9zdHI7CisgICAgICAgIGRiZnVsbCgpLT5URVNUX0NvbXBhY3RS
YW5nZSgwLCAmY3N0YXJ0LCAmY2VuZCk7CisgICAgICB9CisKKyAgICAgIEFTU0VSVF9FUShOdW1U
YWJsZUZpbGVzQXRMZXZlbCgwKSwgMCk7CisgICAgICBBU1NFUlRfR1QoTnVtVGFibGVGaWxlc0F0
TGV2ZWwoMSksIDApOworICAgIH0KKyAgfSB3aGlsZSAoQ2hhbmdlT3B0aW9ucygpKTsKK30KKwor
VEVTVChEQlRlc3QsIEFwcHJveGltYXRlU2l6ZXNfTWl4T2ZTbWFsbEFuZExhcmdlKSB7CisgIGRv
IHsKKyAgICBPcHRpb25zIG9wdGlvbnMgPSBDdXJyZW50T3B0aW9ucygpOworICAgIG9wdGlvbnMu
Y29tcHJlc3Npb24gPSBrTm9Db21wcmVzc2lvbjsKKyAgICBSZW9wZW4oKTsKKworICAgIFJhbmRv
bSBybmQoMzAxKTsKKyAgICBzdGQ6OnN0cmluZyBiaWcxID0gUmFuZG9tU3RyaW5nKCZybmQsIDEw
MDAwMCk7CisgICAgQVNTRVJUX09LKFB1dChLZXkoMCksIFJhbmRvbVN0cmluZygmcm5kLCAxMDAw
MCkpKTsKKyAgICBBU1NFUlRfT0soUHV0KEtleSgxKSwgUmFuZG9tU3RyaW5nKCZybmQsIDEwMDAw
KSkpOworICAgIEFTU0VSVF9PSyhQdXQoS2V5KDIpLCBiaWcxKSk7CisgICAgQVNTRVJUX09LKFB1
dChLZXkoMyksIFJhbmRvbVN0cmluZygmcm5kLCAxMDAwMCkpKTsKKyAgICBBU1NFUlRfT0soUHV0
KEtleSg0KSwgYmlnMSkpOworICAgIEFTU0VSVF9PSyhQdXQoS2V5KDUpLCBSYW5kb21TdHJpbmco
JnJuZCwgMTAwMDApKSk7CisgICAgQVNTRVJUX09LKFB1dChLZXkoNiksIFJhbmRvbVN0cmluZygm
cm5kLCAzMDAwMDApKSk7CisgICAgQVNTRVJUX09LKFB1dChLZXkoNyksIFJhbmRvbVN0cmluZygm
cm5kLCAxMDAwMCkpKTsKKworICAgIC8vIENoZWNrIHNpemVzIGFjcm9zcyByZWNvdmVyeSBieSBy
ZW9wZW5pbmcgYSBmZXcgdGltZXMKKyAgICBmb3IgKGludCBydW4gPSAwOyBydW4gPCAzOyBydW4r
KykgeworICAgICAgUmVvcGVuKCZvcHRpb25zKTsKKworICAgICAgQVNTRVJUX1RSVUUoQmV0d2Vl
bihTaXplKCIiLCBLZXkoMCkpLCAwLCAwKSk7CisgICAgICBBU1NFUlRfVFJVRShCZXR3ZWVuKFNp
emUoIiIsIEtleSgxKSksIDEwMDAwLCAxMTAwMCkpOworICAgICAgQVNTRVJUX1RSVUUoQmV0d2Vl
bihTaXplKCIiLCBLZXkoMikpLCAyMDAwMCwgMjEwMDApKTsKKyAgICAgIEFTU0VSVF9UUlVFKEJl
dHdlZW4oU2l6ZSgiIiwgS2V5KDMpKSwgMTIwMDAwLCAxMjEwMDApKTsKKyAgICAgIEFTU0VSVF9U
UlVFKEJldHdlZW4oU2l6ZSgiIiwgS2V5KDQpKSwgMTMwMDAwLCAxMzEwMDApKTsKKyAgICAgIEFT
U0VSVF9UUlVFKEJldHdlZW4oU2l6ZSgiIiwgS2V5KDUpKSwgMjMwMDAwLCAyMzEwMDApKTsKKyAg
ICAgIEFTU0VSVF9UUlVFKEJldHdlZW4oU2l6ZSgiIiwgS2V5KDYpKSwgMjQwMDAwLCAyNDEwMDAp
KTsKKyAgICAgIEFTU0VSVF9UUlVFKEJldHdlZW4oU2l6ZSgiIiwgS2V5KDcpKSwgNTQwMDAwLCA1
NDEwMDApKTsKKyAgICAgIEFTU0VSVF9UUlVFKEJldHdlZW4oU2l6ZSgiIiwgS2V5KDgpKSwgNTUw
MDAwLCA1NjAwMDApKTsKKworICAgICAgQVNTRVJUX1RSVUUoQmV0d2VlbihTaXplKEtleSgzKSwg
S2V5KDUpKSwgMTEwMDAwLCAxMTEwMDApKTsKKworICAgICAgZGJmdWxsKCktPlRFU1RfQ29tcGFj
dFJhbmdlKDAsIE5VTEwsIE5VTEwpOworICAgIH0KKyAgfSB3aGlsZSAoQ2hhbmdlT3B0aW9ucygp
KTsKK30KKworVEVTVChEQlRlc3QsIEl0ZXJhdG9yUGluc1JlZikgeworICBQdXQoImZvbyIsICJo
ZWxsbyIpOworCisgIC8vIEdldCBpdGVyYXRvciB0aGF0IHdpbGwgeWllbGQgdGhlIGN1cnJlbnQg
Y29udGVudHMgb2YgdGhlIERCLgorICBJdGVyYXRvciogaXRlciA9IGRiXy0+TmV3SXRlcmF0b3Io
UmVhZE9wdGlvbnMoKSk7CisKKyAgLy8gV3JpdGUgdG8gZm9yY2UgY29tcGFjdGlvbnMKKyAgUHV0
KCJmb28iLCAibmV3dmFsdWUxIik7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgMTAwOyBpKyspIHsK
KyAgICBBU1NFUlRfT0soUHV0KEtleShpKSwgS2V5KGkpICsgc3RkOjpzdHJpbmcoMTAwMDAwLCAn
dicpKSk7IC8vIDEwMEsgdmFsdWVzCisgIH0KKyAgUHV0KCJmb28iLCAibmV3dmFsdWUyIik7CisK
KyAgaXRlci0+U2Vla1RvRmlyc3QoKTsKKyAgQVNTRVJUX1RSVUUoaXRlci0+VmFsaWQoKSk7Cisg
IEFTU0VSVF9FUSgiZm9vIiwgaXRlci0+a2V5KCkuVG9TdHJpbmcoKSk7CisgIEFTU0VSVF9FUSgi
aGVsbG8iLCBpdGVyLT52YWx1ZSgpLlRvU3RyaW5nKCkpOworICBpdGVyLT5OZXh0KCk7CisgIEFT
U0VSVF9UUlVFKCFpdGVyLT5WYWxpZCgpKTsKKyAgZGVsZXRlIGl0ZXI7Cit9CisKK1RFU1QoREJU
ZXN0LCBTbmFwc2hvdCkgeworICBkbyB7CisgICAgUHV0KCJmb28iLCAidjEiKTsKKyAgICBjb25z
dCBTbmFwc2hvdCogczEgPSBkYl8tPkdldFNuYXBzaG90KCk7CisgICAgUHV0KCJmb28iLCAidjIi
KTsKKyAgICBjb25zdCBTbmFwc2hvdCogczIgPSBkYl8tPkdldFNuYXBzaG90KCk7CisgICAgUHV0
KCJmb28iLCAidjMiKTsKKyAgICBjb25zdCBTbmFwc2hvdCogczMgPSBkYl8tPkdldFNuYXBzaG90
KCk7CisKKyAgICBQdXQoImZvbyIsICJ2NCIpOworICAgIEFTU0VSVF9FUSgidjEiLCBHZXQoImZv
byIsIHMxKSk7CisgICAgQVNTRVJUX0VRKCJ2MiIsIEdldCgiZm9vIiwgczIpKTsKKyAgICBBU1NF
UlRfRVEoInYzIiwgR2V0KCJmb28iLCBzMykpOworICAgIEFTU0VSVF9FUSgidjQiLCBHZXQoImZv
byIpKTsKKworICAgIGRiXy0+UmVsZWFzZVNuYXBzaG90KHMzKTsKKyAgICBBU1NFUlRfRVEoInYx
IiwgR2V0KCJmb28iLCBzMSkpOworICAgIEFTU0VSVF9FUSgidjIiLCBHZXQoImZvbyIsIHMyKSk7
CisgICAgQVNTRVJUX0VRKCJ2NCIsIEdldCgiZm9vIikpOworCisgICAgZGJfLT5SZWxlYXNlU25h
cHNob3QoczEpOworICAgIEFTU0VSVF9FUSgidjIiLCBHZXQoImZvbyIsIHMyKSk7CisgICAgQVNT
RVJUX0VRKCJ2NCIsIEdldCgiZm9vIikpOworCisgICAgZGJfLT5SZWxlYXNlU25hcHNob3QoczIp
OworICAgIEFTU0VSVF9FUSgidjQiLCBHZXQoImZvbyIpKTsKKyAgfSB3aGlsZSAoQ2hhbmdlT3B0
aW9ucygpKTsKK30KKworVEVTVChEQlRlc3QsIEhpZGRlblZhbHVlc0FyZVJlbW92ZWQpIHsKKyAg
ZG8geworICAgIFJhbmRvbSBybmQoMzAxKTsKKyAgICBGaWxsTGV2ZWxzKCJhIiwgInoiKTsKKwor
ICAgIHN0ZDo6c3RyaW5nIGJpZyA9IFJhbmRvbVN0cmluZygmcm5kLCA1MDAwMCk7CisgICAgUHV0
KCJmb28iLCBiaWcpOworICAgIFB1dCgicGFzdGZvbyIsICJ2Iik7CisgICAgY29uc3QgU25hcHNo
b3QqIHNuYXBzaG90ID0gZGJfLT5HZXRTbmFwc2hvdCgpOworICAgIFB1dCgiZm9vIiwgInRpbnki
KTsKKyAgICBQdXQoInBhc3Rmb28yIiwgInYyIik7ICAgICAgICAvLyBBZHZhbmNlIHNlcXVlbmNl
IG51bWJlciBvbmUgbW9yZQorCisgICAgQVNTRVJUX09LKGRiZnVsbCgpLT5URVNUX0NvbXBhY3RN
ZW1UYWJsZSgpKTsKKyAgICBBU1NFUlRfR1QoTnVtVGFibGVGaWxlc0F0TGV2ZWwoMCksIDApOwor
CisgICAgQVNTRVJUX0VRKGJpZywgR2V0KCJmb28iLCBzbmFwc2hvdCkpOworICAgIEFTU0VSVF9U
UlVFKEJldHdlZW4oU2l6ZSgiIiwgInBhc3Rmb28iKSwgNTAwMDAsIDYwMDAwKSk7CisgICAgZGJf
LT5SZWxlYXNlU25hcHNob3Qoc25hcHNob3QpOworICAgIEFTU0VSVF9FUShBbGxFbnRyaWVzRm9y
KCJmb28iKSwgIlsgdGlueSwgIiArIGJpZyArICIgXSIpOworICAgIFNsaWNlIHgoIngiKTsKKyAg
ICBkYmZ1bGwoKS0+VEVTVF9Db21wYWN0UmFuZ2UoMCwgTlVMTCwgJngpOworICAgIEFTU0VSVF9F
UShBbGxFbnRyaWVzRm9yKCJmb28iKSwgIlsgdGlueSBdIik7CisgICAgQVNTRVJUX0VRKE51bVRh
YmxlRmlsZXNBdExldmVsKDApLCAwKTsKKyAgICBBU1NFUlRfR0UoTnVtVGFibGVGaWxlc0F0TGV2
ZWwoMSksIDEpOworICAgIGRiZnVsbCgpLT5URVNUX0NvbXBhY3RSYW5nZSgxLCBOVUxMLCAmeCk7
CisgICAgQVNTRVJUX0VRKEFsbEVudHJpZXNGb3IoImZvbyIpLCAiWyB0aW55IF0iKTsKKworICAg
IEFTU0VSVF9UUlVFKEJldHdlZW4oU2l6ZSgiIiwgInBhc3Rmb28iKSwgMCwgMTAwMCkpOworICB9
IHdoaWxlIChDaGFuZ2VPcHRpb25zKCkpOworfQorCitURVNUKERCVGVzdCwgRGVsZXRpb25NYXJr
ZXJzMSkgeworICBQdXQoImZvbyIsICJ2MSIpOworICBBU1NFUlRfT0soZGJmdWxsKCktPlRFU1Rf
Q29tcGFjdE1lbVRhYmxlKCkpOworICBjb25zdCBpbnQgbGFzdCA9IGNvbmZpZzo6a01heE1lbUNv
bXBhY3RMZXZlbDsKKyAgQVNTRVJUX0VRKE51bVRhYmxlRmlsZXNBdExldmVsKGxhc3QpLCAxKTsg
ICAvLyBmb28gPT4gdjEgaXMgbm93IGluIGxhc3QgbGV2ZWwKKworICAvLyBQbGFjZSBhIHRhYmxl
IGF0IGxldmVsIGxhc3QtMSB0byBwcmV2ZW50IG1lcmdpbmcgd2l0aCBwcmVjZWRpbmcgbXV0YXRp
b24KKyAgUHV0KCJhIiwgImJlZ2luIik7CisgIFB1dCgieiIsICJlbmQiKTsKKyAgZGJmdWxsKCkt
PlRFU1RfQ29tcGFjdE1lbVRhYmxlKCk7CisgIEFTU0VSVF9FUShOdW1UYWJsZUZpbGVzQXRMZXZl
bChsYXN0KSwgMSk7CisgIEFTU0VSVF9FUShOdW1UYWJsZUZpbGVzQXRMZXZlbChsYXN0LTEpLCAx
KTsKKworICBEZWxldGUoImZvbyIpOworICBQdXQoImZvbyIsICJ2MiIpOworICBBU1NFUlRfRVEo
QWxsRW50cmllc0ZvcigiZm9vIiksICJbIHYyLCBERUwsIHYxIF0iKTsKKyAgQVNTRVJUX09LKGRi
ZnVsbCgpLT5URVNUX0NvbXBhY3RNZW1UYWJsZSgpKTsgIC8vIE1vdmVzIHRvIGxldmVsIGxhc3Qt
MgorICBBU1NFUlRfRVEoQWxsRW50cmllc0ZvcigiZm9vIiksICJbIHYyLCBERUwsIHYxIF0iKTsK
KyAgU2xpY2UgeigieiIpOworICBkYmZ1bGwoKS0+VEVTVF9Db21wYWN0UmFuZ2UobGFzdC0yLCBO
VUxMLCAmeik7CisgIC8vIERFTCBlbGltaW5hdGVkLCBidXQgdjEgcmVtYWlucyBiZWNhdXNlIHdl
IGFyZW4ndCBjb21wYWN0aW5nIHRoYXQgbGV2ZWwKKyAgLy8gKERFTCBjYW4gYmUgZWxpbWluYXRl
ZCBiZWNhdXNlIHYyIGhpZGVzIHYxKS4KKyAgQVNTRVJUX0VRKEFsbEVudHJpZXNGb3IoImZvbyIp
LCAiWyB2MiwgdjEgXSIpOworICBkYmZ1bGwoKS0+VEVTVF9Db21wYWN0UmFuZ2UobGFzdC0xLCBO
VUxMLCBOVUxMKTsKKyAgLy8gTWVyZ2luZyBsYXN0LTEgdy8gbGFzdCwgc28gd2UgYXJlIHRoZSBi
YXNlIGxldmVsIGZvciAiZm9vIiwgc28KKyAgLy8gREVMIGlzIHJlbW92ZWQuICAoYXMgaXMgdjEp
LgorICBBU1NFUlRfRVEoQWxsRW50cmllc0ZvcigiZm9vIiksICJbIHYyIF0iKTsKK30KKworVEVT
VChEQlRlc3QsIERlbGV0aW9uTWFya2VyczIpIHsKKyAgUHV0KCJmb28iLCAidjEiKTsKKyAgQVNT
RVJUX09LKGRiZnVsbCgpLT5URVNUX0NvbXBhY3RNZW1UYWJsZSgpKTsKKyAgY29uc3QgaW50IGxh
c3QgPSBjb25maWc6OmtNYXhNZW1Db21wYWN0TGV2ZWw7CisgIEFTU0VSVF9FUShOdW1UYWJsZUZp
bGVzQXRMZXZlbChsYXN0KSwgMSk7ICAgLy8gZm9vID0+IHYxIGlzIG5vdyBpbiBsYXN0IGxldmVs
CisKKyAgLy8gUGxhY2UgYSB0YWJsZSBhdCBsZXZlbCBsYXN0LTEgdG8gcHJldmVudCBtZXJnaW5n
IHdpdGggcHJlY2VkaW5nIG11dGF0aW9uCisgIFB1dCgiYSIsICJiZWdpbiIpOworICBQdXQoInoi
LCAiZW5kIik7CisgIGRiZnVsbCgpLT5URVNUX0NvbXBhY3RNZW1UYWJsZSgpOworICBBU1NFUlRf
RVEoTnVtVGFibGVGaWxlc0F0TGV2ZWwobGFzdCksIDEpOworICBBU1NFUlRfRVEoTnVtVGFibGVG
aWxlc0F0TGV2ZWwobGFzdC0xKSwgMSk7CisKKyAgRGVsZXRlKCJmb28iKTsKKyAgQVNTRVJUX0VR
KEFsbEVudHJpZXNGb3IoImZvbyIpLCAiWyBERUwsIHYxIF0iKTsKKyAgQVNTRVJUX09LKGRiZnVs
bCgpLT5URVNUX0NvbXBhY3RNZW1UYWJsZSgpKTsgIC8vIE1vdmVzIHRvIGxldmVsIGxhc3QtMgor
ICBBU1NFUlRfRVEoQWxsRW50cmllc0ZvcigiZm9vIiksICJbIERFTCwgdjEgXSIpOworICBkYmZ1
bGwoKS0+VEVTVF9Db21wYWN0UmFuZ2UobGFzdC0yLCBOVUxMLCBOVUxMKTsKKyAgLy8gREVMIGtl
cHQ6ICJsYXN0IiBmaWxlIG92ZXJsYXBzCisgIEFTU0VSVF9FUShBbGxFbnRyaWVzRm9yKCJmb28i
KSwgIlsgREVMLCB2MSBdIik7CisgIGRiZnVsbCgpLT5URVNUX0NvbXBhY3RSYW5nZShsYXN0LTEs
IE5VTEwsIE5VTEwpOworICAvLyBNZXJnaW5nIGxhc3QtMSB3LyBsYXN0LCBzbyB3ZSBhcmUgdGhl
IGJhc2UgbGV2ZWwgZm9yICJmb28iLCBzbworICAvLyBERUwgaXMgcmVtb3ZlZC4gIChhcyBpcyB2
MSkuCisgIEFTU0VSVF9FUShBbGxFbnRyaWVzRm9yKCJmb28iKSwgIlsgXSIpOworfQorCitURVNU
KERCVGVzdCwgT3ZlcmxhcEluTGV2ZWwwKSB7CisgIGRvIHsKKyAgICBBU1NFUlRfRVEoY29uZmln
OjprTWF4TWVtQ29tcGFjdExldmVsLCAyKSA8PCAiRml4IHRlc3QgdG8gbWF0Y2ggY29uZmlnIjsK
KworICAgIC8vIEZpbGwgbGV2ZWxzIDEgYW5kIDIgdG8gZGlzYWJsZSB0aGUgcHVzaGluZyBvZiBu
ZXcgbWVtdGFibGVzIHRvIGxldmVscyA+IDAuCisgICAgQVNTRVJUX09LKFB1dCgiMTAwIiwgInYx
MDAiKSk7CisgICAgQVNTRVJUX09LKFB1dCgiOTk5IiwgInY5OTkiKSk7CisgICAgZGJmdWxsKCkt
PlRFU1RfQ29tcGFjdE1lbVRhYmxlKCk7CisgICAgQVNTRVJUX09LKERlbGV0ZSgiMTAwIikpOwor
ICAgIEFTU0VSVF9PSyhEZWxldGUoIjk5OSIpKTsKKyAgICBkYmZ1bGwoKS0+VEVTVF9Db21wYWN0
TWVtVGFibGUoKTsKKyAgICBBU1NFUlRfRVEoIjAsMSwxIiwgRmlsZXNQZXJMZXZlbCgpKTsKKwor
ICAgIC8vIE1ha2UgZmlsZXMgc3Bhbm5pbmcgdGhlIGZvbGxvd2luZyByYW5nZXMgaW4gbGV2ZWwt
MDoKKyAgICAvLyAgZmlsZXNbMF0gIDIwMCAuLiA5MDAKKyAgICAvLyAgZmlsZXNbMV0gIDMwMCAu
LiA1MDAKKyAgICAvLyBOb3RlIHRoYXQgZmlsZXMgYXJlIHNvcnRlZCBieSBzbWFsbGVzdCBrZXku
CisgICAgQVNTRVJUX09LKFB1dCgiMzAwIiwgInYzMDAiKSk7CisgICAgQVNTRVJUX09LKFB1dCgi
NTAwIiwgInY1MDAiKSk7CisgICAgZGJmdWxsKCktPlRFU1RfQ29tcGFjdE1lbVRhYmxlKCk7Cisg
ICAgQVNTRVJUX09LKFB1dCgiMjAwIiwgInYyMDAiKSk7CisgICAgQVNTRVJUX09LKFB1dCgiNjAw
IiwgInY2MDAiKSk7CisgICAgQVNTRVJUX09LKFB1dCgiOTAwIiwgInY5MDAiKSk7CisgICAgZGJm
dWxsKCktPlRFU1RfQ29tcGFjdE1lbVRhYmxlKCk7CisgICAgQVNTRVJUX0VRKCIyLDEsMSIsIEZp
bGVzUGVyTGV2ZWwoKSk7CisKKyAgICAvLyBDb21wYWN0IGF3YXkgdGhlIHBsYWNlaG9sZGVyIGZp
bGVzIHdlIGNyZWF0ZWQgaW5pdGlhbGx5CisgICAgZGJmdWxsKCktPlRFU1RfQ29tcGFjdFJhbmdl
KDEsIE5VTEwsIE5VTEwpOworICAgIGRiZnVsbCgpLT5URVNUX0NvbXBhY3RSYW5nZSgyLCBOVUxM
LCBOVUxMKTsKKyAgICBBU1NFUlRfRVEoIjIiLCBGaWxlc1BlckxldmVsKCkpOworCisgICAgLy8g
RG8gYSBtZW10YWJsZSBjb21wYWN0aW9uLiAgQmVmb3JlIGJ1Zy1maXgsIHRoZSBjb21wYWN0aW9u
IHdvdWxkCisgICAgLy8gbm90IGRldGVjdCB0aGUgb3ZlcmxhcCB3aXRoIGxldmVsLTAgZmlsZXMg
YW5kIHdvdWxkIGluY29ycmVjdGx5IHBsYWNlCisgICAgLy8gdGhlIGRlbGV0aW9uIGluIGEgZGVl
cGVyIGxldmVsLgorICAgIEFTU0VSVF9PSyhEZWxldGUoIjYwMCIpKTsKKyAgICBkYmZ1bGwoKS0+
VEVTVF9Db21wYWN0TWVtVGFibGUoKTsKKyAgICBBU1NFUlRfRVEoIjMiLCBGaWxlc1BlckxldmVs
KCkpOworICAgIEFTU0VSVF9FUSgiTk9UX0ZPVU5EIiwgR2V0KCI2MDAiKSk7CisgIH0gd2hpbGUg
KENoYW5nZU9wdGlvbnMoKSk7Cit9CisKK1RFU1QoREJUZXN0LCBMMF9Db21wYWN0aW9uQnVnX0lz
c3VlNDRfYSkgeworICBSZW9wZW4oKTsKKyAgQVNTRVJUX09LKFB1dCgiYiIsICJ2IikpOworICBS
ZW9wZW4oKTsKKyAgQVNTRVJUX09LKERlbGV0ZSgiYiIpKTsKKyAgQVNTRVJUX09LKERlbGV0ZSgi
YSIpKTsKKyAgUmVvcGVuKCk7CisgIEFTU0VSVF9PSyhEZWxldGUoImEiKSk7CisgIFJlb3Blbigp
OworICBBU1NFUlRfT0soUHV0KCJhIiwgInYiKSk7CisgIFJlb3BlbigpOworICBSZW9wZW4oKTsK
KyAgQVNTRVJUX0VRKCIoYS0+dikiLCBDb250ZW50cygpKTsKKyAgZW52Xy0+U2xlZXBGb3JNaWNy
b3NlY29uZHMoMTAwMDAwMCk7ICAvLyBXYWl0IGZvciBjb21wYWN0aW9uIHRvIGZpbmlzaAorICBB
U1NFUlRfRVEoIihhLT52KSIsIENvbnRlbnRzKCkpOworfQorCitURVNUKERCVGVzdCwgTDBfQ29t
cGFjdGlvbkJ1Z19Jc3N1ZTQ0X2IpIHsKKyAgUmVvcGVuKCk7CisgIFB1dCgiIiwiIik7CisgIFJl
b3BlbigpOworICBEZWxldGUoImUiKTsKKyAgUHV0KCIiLCIiKTsKKyAgUmVvcGVuKCk7CisgIFB1
dCgiYyIsICJjdiIpOworICBSZW9wZW4oKTsKKyAgUHV0KCIiLCIiKTsKKyAgUmVvcGVuKCk7Cisg
IFB1dCgiIiwiIik7CisgIGVudl8tPlNsZWVwRm9yTWljcm9zZWNvbmRzKDEwMDAwMDApOyAgLy8g
V2FpdCBmb3IgY29tcGFjdGlvbiB0byBmaW5pc2gKKyAgUmVvcGVuKCk7CisgIFB1dCgiZCIsImR2
Iik7CisgIFJlb3BlbigpOworICBQdXQoIiIsIiIpOworICBSZW9wZW4oKTsKKyAgRGVsZXRlKCJk
Iik7CisgIERlbGV0ZSgiYiIpOworICBSZW9wZW4oKTsKKyAgQVNTRVJUX0VRKCIoLT4pKGMtPmN2
KSIsIENvbnRlbnRzKCkpOworICBlbnZfLT5TbGVlcEZvck1pY3Jvc2Vjb25kcygxMDAwMDAwKTsg
IC8vIFdhaXQgZm9yIGNvbXBhY3Rpb24gdG8gZmluaXNoCisgIEFTU0VSVF9FUSgiKC0+KShjLT5j
dikiLCBDb250ZW50cygpKTsKK30KKworVEVTVChEQlRlc3QsIENvbXBhcmF0b3JDaGVjaykgewor
ICBjbGFzcyBOZXdDb21wYXJhdG9yIDogcHVibGljIENvbXBhcmF0b3IgeworICAgcHVibGljOgor
ICAgIHZpcnR1YWwgY29uc3QgY2hhciogTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJsZXZlbGRiLk5l
d0NvbXBhcmF0b3IiOyB9CisgICAgdmlydHVhbCBpbnQgQ29tcGFyZShjb25zdCBTbGljZSYgYSwg
Y29uc3QgU2xpY2UmIGIpIGNvbnN0IHsKKyAgICAgIHJldHVybiBCeXRld2lzZUNvbXBhcmF0b3Io
KS0+Q29tcGFyZShhLCBiKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIEZpbmRTaG9ydGVzdFNl
cGFyYXRvcihzdGQ6OnN0cmluZyogcywgY29uc3QgU2xpY2UmIGwpIGNvbnN0IHsKKyAgICAgIEJ5
dGV3aXNlQ29tcGFyYXRvcigpLT5GaW5kU2hvcnRlc3RTZXBhcmF0b3IocywgbCk7CisgICAgfQor
ICAgIHZpcnR1YWwgdm9pZCBGaW5kU2hvcnRTdWNjZXNzb3Ioc3RkOjpzdHJpbmcqIGtleSkgY29u
c3QgeworICAgICAgQnl0ZXdpc2VDb21wYXJhdG9yKCktPkZpbmRTaG9ydFN1Y2Nlc3NvcihrZXkp
OworICAgIH0KKyAgfTsKKyAgTmV3Q29tcGFyYXRvciBjbXA7CisgIE9wdGlvbnMgbmV3X29wdGlv
bnMgPSBDdXJyZW50T3B0aW9ucygpOworICBuZXdfb3B0aW9ucy5jb21wYXJhdG9yID0gJmNtcDsK
KyAgU3RhdHVzIHMgPSBUcnlSZW9wZW4oJm5ld19vcHRpb25zKTsKKyAgQVNTRVJUX1RSVUUoIXMu
b2soKSk7CisgIEFTU0VSVF9UUlVFKHMuVG9TdHJpbmcoKS5maW5kKCJjb21wYXJhdG9yIikgIT0g
c3RkOjpzdHJpbmc6Om5wb3MpCisgICAgICA8PCBzLlRvU3RyaW5nKCk7Cit9CisKK1RFU1QoREJU
ZXN0LCBDdXN0b21Db21wYXJhdG9yKSB7CisgIGNsYXNzIE51bWJlckNvbXBhcmF0b3IgOiBwdWJs
aWMgQ29tcGFyYXRvciB7CisgICBwdWJsaWM6CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBOYW1l
KCkgY29uc3QgeyByZXR1cm4gInRlc3QuTnVtYmVyQ29tcGFyYXRvciI7IH0KKyAgICB2aXJ0dWFs
IGludCBDb21wYXJlKGNvbnN0IFNsaWNlJiBhLCBjb25zdCBTbGljZSYgYikgY29uc3QgeworICAg
ICAgcmV0dXJuIFRvTnVtYmVyKGEpIC0gVG9OdW1iZXIoYik7CisgICAgfQorICAgIHZpcnR1YWwg
dm9pZCBGaW5kU2hvcnRlc3RTZXBhcmF0b3Ioc3RkOjpzdHJpbmcqIHMsIGNvbnN0IFNsaWNlJiBs
KSBjb25zdCB7CisgICAgICBUb051bWJlcigqcyk7ICAgICAvLyBDaGVjayBmb3JtYXQKKyAgICAg
IFRvTnVtYmVyKGwpOyAgICAgIC8vIENoZWNrIGZvcm1hdAorICAgIH0KKyAgICB2aXJ0dWFsIHZv
aWQgRmluZFNob3J0U3VjY2Vzc29yKHN0ZDo6c3RyaW5nKiBrZXkpIGNvbnN0IHsKKyAgICAgIFRv
TnVtYmVyKCprZXkpOyAgIC8vIENoZWNrIGZvcm1hdAorICAgIH0KKyAgIHByaXZhdGU6CisgICAg
c3RhdGljIGludCBUb051bWJlcihjb25zdCBTbGljZSYgeCkgeworICAgICAgLy8gQ2hlY2sgdGhh
dCB0aGVyZSBhcmUgbm8gZXh0cmEgY2hhcmFjdGVycy4KKyAgICAgIEFTU0VSVF9UUlVFKHguc2l6
ZSgpID49IDIgJiYgeFswXSA9PSAnWycgJiYgeFt4LnNpemUoKS0xXSA9PSAnXScpCisgICAgICAg
ICAgPDwgRXNjYXBlU3RyaW5nKHgpOworICAgICAgaW50IHZhbDsKKyAgICAgIGNoYXIgaWdub3Jl
ZDsKKyAgICAgIEFTU0VSVF9UUlVFKHNzY2FuZih4LlRvU3RyaW5nKCkuY19zdHIoKSwgIlslaV0l
YyIsICZ2YWwsICZpZ25vcmVkKSA9PSAxKQorICAgICAgICAgIDw8IEVzY2FwZVN0cmluZyh4KTsK
KyAgICAgIHJldHVybiB2YWw7CisgICAgfQorICB9OworICBOdW1iZXJDb21wYXJhdG9yIGNtcDsK
KyAgT3B0aW9ucyBuZXdfb3B0aW9ucyA9IEN1cnJlbnRPcHRpb25zKCk7CisgIG5ld19vcHRpb25z
LmNyZWF0ZV9pZl9taXNzaW5nID0gdHJ1ZTsKKyAgbmV3X29wdGlvbnMuY29tcGFyYXRvciA9ICZj
bXA7CisgIG5ld19vcHRpb25zLmZpbHRlcl9wb2xpY3kgPSBOVUxMOyAgICAgLy8gQ2Fubm90IHVz
ZSBibG9vbSBmaWx0ZXJzCisgIG5ld19vcHRpb25zLndyaXRlX2J1ZmZlcl9zaXplID0gMTAwMDsg
IC8vIENvbXBhY3QgbW9yZSBvZnRlbgorICBEZXN0cm95QW5kUmVvcGVuKCZuZXdfb3B0aW9ucyk7
CisgIEFTU0VSVF9PSyhQdXQoIlsxMF0iLCAidGVuIikpOworICBBU1NFUlRfT0soUHV0KCJbMHgx
NF0iLCAidHdlbnR5IikpOworICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgeworICAgIEFT
U0VSVF9FUSgidGVuIiwgR2V0KCJbMTBdIikpOworICAgIEFTU0VSVF9FUSgidGVuIiwgR2V0KCJb
MHhhXSIpKTsKKyAgICBBU1NFUlRfRVEoInR3ZW50eSIsIEdldCgiWzIwXSIpKTsKKyAgICBBU1NF
UlRfRVEoInR3ZW50eSIsIEdldCgiWzB4MTRdIikpOworICAgIEFTU0VSVF9FUSgiTk9UX0ZPVU5E
IiwgR2V0KCJbMTVdIikpOworICAgIEFTU0VSVF9FUSgiTk9UX0ZPVU5EIiwgR2V0KCJbMHhmXSIp
KTsKKyAgICBDb21wYWN0KCJbMF0iLCAiWzk5OTldIik7CisgIH0KKworICBmb3IgKGludCBydW4g
PSAwOyBydW4gPCAyOyBydW4rKykgeworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTAwMDsgaSsr
KSB7CisgICAgICBjaGFyIGJ1ZlsxMDBdOworICAgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVm
KSwgIlslZF0iLCBpKjEwKTsKKyAgICAgIEFTU0VSVF9PSyhQdXQoYnVmLCBidWYpKTsKKyAgICB9
CisgICAgQ29tcGFjdCgiWzBdIiwgIlsxMDAwMDAwXSIpOworICB9Cit9CisKK1RFU1QoREJUZXN0
LCBNYW51YWxDb21wYWN0aW9uKSB7CisgIEFTU0VSVF9FUShjb25maWc6OmtNYXhNZW1Db21wYWN0
TGV2ZWwsIDIpCisgICAgICA8PCAiTmVlZCB0byB1cGRhdGUgdGhpcyB0ZXN0IHRvIG1hdGNoIGtN
YXhNZW1Db21wYWN0TGV2ZWwiOworCisgIE1ha2VUYWJsZXMoMywgInAiLCAicSIpOworICBBU1NF
UlRfRVEoIjEsMSwxIiwgRmlsZXNQZXJMZXZlbCgpKTsKKworICAvLyBDb21wYWN0aW9uIHJhbmdl
IGZhbGxzIGJlZm9yZSBmaWxlcworICBDb21wYWN0KCIiLCAiYyIpOworICBBU1NFUlRfRVEoIjEs
MSwxIiwgRmlsZXNQZXJMZXZlbCgpKTsKKworICAvLyBDb21wYWN0aW9uIHJhbmdlIGZhbGxzIGFm
dGVyIGZpbGVzCisgIENvbXBhY3QoInIiLCAieiIpOworICBBU1NFUlRfRVEoIjEsMSwxIiwgRmls
ZXNQZXJMZXZlbCgpKTsKKworICAvLyBDb21wYWN0aW9uIHJhbmdlIG92ZXJsYXBzIGZpbGVzCisg
IENvbXBhY3QoInAxIiwgInA5Iik7CisgIEFTU0VSVF9FUSgiMCwwLDEiLCBGaWxlc1BlckxldmVs
KCkpOworCisgIC8vIFBvcHVsYXRlIGEgZGlmZmVyZW50IHJhbmdlCisgIE1ha2VUYWJsZXMoMywg
ImMiLCAiZSIpOworICBBU1NFUlRfRVEoIjEsMSwyIiwgRmlsZXNQZXJMZXZlbCgpKTsKKworICAv
LyBDb21wYWN0IGp1c3QgdGhlIG5ldyByYW5nZQorICBDb21wYWN0KCJiIiwgImYiKTsKKyAgQVNT
RVJUX0VRKCIwLDAsMiIsIEZpbGVzUGVyTGV2ZWwoKSk7CisKKyAgLy8gQ29tcGFjdCBhbGwKKyAg
TWFrZVRhYmxlcygxLCAiYSIsICJ6Iik7CisgIEFTU0VSVF9FUSgiMCwxLDIiLCBGaWxlc1Blckxl
dmVsKCkpOworICBkYl8tPkNvbXBhY3RSYW5nZShOVUxMLCBOVUxMKTsKKyAgQVNTRVJUX0VRKCIw
LDAsMSIsIEZpbGVzUGVyTGV2ZWwoKSk7Cit9CisKK1RFU1QoREJUZXN0LCBEQk9wZW5fT3B0aW9u
cykgeworICBzdGQ6OnN0cmluZyBkYm5hbWUgPSB0ZXN0OjpUbXBEaXIoKSArICIvZGJfb3B0aW9u
c190ZXN0IjsKKyAgRGVzdHJveURCKGRibmFtZSwgT3B0aW9ucygpKTsKKworICAvLyBEb2VzIG5v
dCBleGlzdCwgYW5kIGNyZWF0ZV9pZl9taXNzaW5nID09IGZhbHNlOiBlcnJvcgorICBEQiogZGIg
PSBOVUxMOworICBPcHRpb25zIG9wdHM7CisgIG9wdHMuY3JlYXRlX2lmX21pc3NpbmcgPSBmYWxz
ZTsKKyAgU3RhdHVzIHMgPSBEQjo6T3BlbihvcHRzLCBkYm5hbWUsICZkYik7CisgIEFTU0VSVF9U
UlVFKHN0cnN0cihzLlRvU3RyaW5nKCkuY19zdHIoKSwgImRvZXMgbm90IGV4aXN0IikgIT0gTlVM
TCk7CisgIEFTU0VSVF9UUlVFKGRiID09IE5VTEwpOworCisgIC8vIERvZXMgbm90IGV4aXN0LCBh
bmQgY3JlYXRlX2lmX21pc3NpbmcgPT0gdHJ1ZTogT0sKKyAgb3B0cy5jcmVhdGVfaWZfbWlzc2lu
ZyA9IHRydWU7CisgIHMgPSBEQjo6T3BlbihvcHRzLCBkYm5hbWUsICZkYik7CisgIEFTU0VSVF9P
SyhzKTsKKyAgQVNTRVJUX1RSVUUoZGIgIT0gTlVMTCk7CisKKyAgZGVsZXRlIGRiOworICBkYiA9
IE5VTEw7CisKKyAgLy8gRG9lcyBleGlzdCwgYW5kIGVycm9yX2lmX2V4aXN0cyA9PSB0cnVlOiBl
cnJvcgorICBvcHRzLmNyZWF0ZV9pZl9taXNzaW5nID0gZmFsc2U7CisgIG9wdHMuZXJyb3JfaWZf
ZXhpc3RzID0gdHJ1ZTsKKyAgcyA9IERCOjpPcGVuKG9wdHMsIGRibmFtZSwgJmRiKTsKKyAgQVNT
RVJUX1RSVUUoc3Ryc3RyKHMuVG9TdHJpbmcoKS5jX3N0cigpLCAiZXhpc3RzIikgIT0gTlVMTCk7
CisgIEFTU0VSVF9UUlVFKGRiID09IE5VTEwpOworCisgIC8vIERvZXMgZXhpc3QsIGFuZCBlcnJv
cl9pZl9leGlzdHMgPT0gZmFsc2U6IE9LCisgIG9wdHMuY3JlYXRlX2lmX21pc3NpbmcgPSB0cnVl
OworICBvcHRzLmVycm9yX2lmX2V4aXN0cyA9IGZhbHNlOworICBzID0gREI6Ok9wZW4ob3B0cywg
ZGJuYW1lLCAmZGIpOworICBBU1NFUlRfT0socyk7CisgIEFTU0VSVF9UUlVFKGRiICE9IE5VTEwp
OworCisgIGRlbGV0ZSBkYjsKKyAgZGIgPSBOVUxMOworfQorCitURVNUKERCVGVzdCwgTG9ja2lu
ZykgeworICBEQiogZGIyID0gTlVMTDsKKyAgU3RhdHVzIHMgPSBEQjo6T3BlbihDdXJyZW50T3B0
aW9ucygpLCBkYm5hbWVfLCAmZGIyKTsKKyAgQVNTRVJUX1RSVUUoIXMub2soKSkgPDwgIkxvY2tp
bmcgZGlkIG5vdCBwcmV2ZW50IHJlLW9wZW5pbmcgZGIiOworfQorCisvLyBDaGVjayB0aGF0IG51
bWJlciBvZiBmaWxlcyBkb2VzIG5vdCBncm93IHdoZW4gd2UgYXJlIG91dCBvZiBzcGFjZQorVEVT
VChEQlRlc3QsIE5vU3BhY2UpIHsKKyAgT3B0aW9ucyBvcHRpb25zID0gQ3VycmVudE9wdGlvbnMo
KTsKKyAgb3B0aW9ucy5lbnYgPSBlbnZfOworICBSZW9wZW4oJm9wdGlvbnMpOworCisgIEFTU0VS
VF9PSyhQdXQoImZvbyIsICJ2MSIpKTsKKyAgQVNTRVJUX0VRKCJ2MSIsIEdldCgiZm9vIikpOwor
ICBDb21wYWN0KCJhIiwgInoiKTsKKyAgY29uc3QgaW50IG51bV9maWxlcyA9IENvdW50RmlsZXMo
KTsKKyAgZW52Xy0+bm9fc3BhY2VfLlJlbGVhc2VfU3RvcmUoZW52Xyk7ICAgLy8gRm9yY2Ugb3V0
LW9mLXNwYWNlIGVycm9ycworICBlbnZfLT5zbGVlcF9jb3VudGVyXy5SZXNldCgpOworICBmb3Ig
KGludCBpID0gMDsgaSA8IDU7IGkrKykgeworICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwg
PCBjb25maWc6OmtOdW1MZXZlbHMtMTsgbGV2ZWwrKykgeworICAgICAgZGJmdWxsKCktPlRFU1Rf
Q29tcGFjdFJhbmdlKGxldmVsLCBOVUxMLCBOVUxMKTsKKyAgICB9CisgIH0KKyAgZW52Xy0+bm9f
c3BhY2VfLlJlbGVhc2VfU3RvcmUoTlVMTCk7CisgIEFTU0VSVF9MVChDb3VudEZpbGVzKCksIG51
bV9maWxlcyArIDMpOworCisgIC8vIENoZWNrIHRoYXQgY29tcGFjdGlvbiBhdHRlbXB0cyBzbGVw
dCBhZnRlciBlcnJvcnMKKyAgQVNTRVJUX0dFKGVudl8tPnNsZWVwX2NvdW50ZXJfLlJlYWQoKSwg
NSk7Cit9CisKK1RFU1QoREJUZXN0LCBOb25Xcml0YWJsZUZpbGVTeXN0ZW0pIHsKKyAgT3B0aW9u
cyBvcHRpb25zID0gQ3VycmVudE9wdGlvbnMoKTsKKyAgb3B0aW9ucy53cml0ZV9idWZmZXJfc2l6
ZSA9IDEwMDA7CisgIG9wdGlvbnMuZW52ID0gZW52XzsKKyAgUmVvcGVuKCZvcHRpb25zKTsKKyAg
QVNTRVJUX09LKFB1dCgiZm9vIiwgInYxIikpOworICBlbnZfLT5ub25fd3JpdGFibGVfLlJlbGVh
c2VfU3RvcmUoZW52Xyk7ICAvLyBGb3JjZSBlcnJvcnMgZm9yIG5ldyBmaWxlcworICBzdGQ6OnN0
cmluZyBiaWcoMTAwMDAwLCAneCcpOworICBpbnQgZXJyb3JzID0gMDsKKyAgZm9yIChpbnQgaSA9
IDA7IGkgPCAyMDsgaSsrKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJpdGVyICVkOyBlcnJvcnMg
JWRcbiIsIGksIGVycm9ycyk7CisgICAgaWYgKCFQdXQoImZvbyIsIGJpZykub2soKSkgeworICAg
ICAgZXJyb3JzKys7CisgICAgICBlbnZfLT5TbGVlcEZvck1pY3Jvc2Vjb25kcygxMDAwMDApOwor
ICAgIH0KKyAgfQorICBBU1NFUlRfR1QoZXJyb3JzLCAwKTsKKyAgZW52Xy0+bm9uX3dyaXRhYmxl
Xy5SZWxlYXNlX1N0b3JlKE5VTEwpOworfQorCitURVNUKERCVGVzdCwgTWFuaWZlc3RXcml0ZUVy
cm9yKSB7CisgIC8vIFRlc3QgZm9yIHRoZSBmb2xsb3dpbmcgcHJvYmxlbToKKyAgLy8gKGEpIENv
bXBhY3Rpb24gcHJvZHVjZXMgZmlsZSBGCisgIC8vIChiKSBMb2cgcmVjb3JkIGNvbnRhaW5pbmcg
RiBpcyB3cml0dGVuIHRvIE1BTklGRVNUIGZpbGUsIGJ1dCBTeW5jKCkgZmFpbHMKKyAgLy8gKGMp
IEdDIGRlbGV0ZXMgRgorICAvLyAoZCkgQWZ0ZXIgcmVvcGVuaW5nIERCLCByZWFkcyBmYWlsIHNp
bmNlIGRlbGV0ZWQgRiBpcyBuYW1lZCBpbiBsb2cgcmVjb3JkCisKKyAgLy8gV2UgaXRlcmF0ZSB0
d2ljZS4gIEluIHRoZSBzZWNvbmQgaXRlcmF0aW9uLCBldmVyeXRoaW5nIGlzIHRoZQorICAvLyBz
YW1lIGV4Y2VwdCB0aGUgbG9nIHJlY29yZCBuZXZlciBtYWtlcyBpdCB0byB0aGUgTUFOSUZFU1Qg
ZmlsZS4KKyAgZm9yIChpbnQgaXRlciA9IDA7IGl0ZXIgPCAyOyBpdGVyKyspIHsKKyAgICBwb3J0
OjpBdG9taWNQb2ludGVyKiBlcnJvcl90eXBlID0gKGl0ZXIgPT0gMCkKKyAgICAgICAgPyAmZW52
Xy0+bWFuaWZlc3Rfc3luY19lcnJvcl8KKyAgICAgICAgOiAmZW52Xy0+bWFuaWZlc3Rfd3JpdGVf
ZXJyb3JfOworCisgICAgLy8gSW5zZXJ0IGZvbz0+YmFyIG1hcHBpbmcKKyAgICBPcHRpb25zIG9w
dGlvbnMgPSBDdXJyZW50T3B0aW9ucygpOworICAgIG9wdGlvbnMuZW52ID0gZW52XzsKKyAgICBv
cHRpb25zLmNyZWF0ZV9pZl9taXNzaW5nID0gdHJ1ZTsKKyAgICBvcHRpb25zLmVycm9yX2lmX2V4
aXN0cyA9IGZhbHNlOworICAgIERlc3Ryb3lBbmRSZW9wZW4oJm9wdGlvbnMpOworICAgIEFTU0VS
VF9PSyhQdXQoImZvbyIsICJiYXIiKSk7CisgICAgQVNTRVJUX0VRKCJiYXIiLCBHZXQoImZvbyIp
KTsKKworICAgIC8vIE1lbXRhYmxlIGNvbXBhY3Rpb24gKHdpbGwgc3VjY2VlZCkKKyAgICBkYmZ1
bGwoKS0+VEVTVF9Db21wYWN0TWVtVGFibGUoKTsKKyAgICBBU1NFUlRfRVEoImJhciIsIEdldCgi
Zm9vIikpOworICAgIGNvbnN0IGludCBsYXN0ID0gY29uZmlnOjprTWF4TWVtQ29tcGFjdExldmVs
OworICAgIEFTU0VSVF9FUShOdW1UYWJsZUZpbGVzQXRMZXZlbChsYXN0KSwgMSk7ICAgLy8gZm9v
PT5iYXIgaXMgbm93IGluIGxhc3QgbGV2ZWwKKworICAgIC8vIE1lcmdpbmcgY29tcGFjdGlvbiAo
d2lsbCBmYWlsKQorICAgIGVycm9yX3R5cGUtPlJlbGVhc2VfU3RvcmUoZW52Xyk7CisgICAgZGJm
dWxsKCktPlRFU1RfQ29tcGFjdFJhbmdlKGxhc3QsIE5VTEwsIE5VTEwpOyAgLy8gU2hvdWxkIGZh
aWwKKyAgICBBU1NFUlRfRVEoImJhciIsIEdldCgiZm9vIikpOworCisgICAgLy8gUmVjb3Zlcnk6
IHNob3VsZCBub3QgbG9zZSBkYXRhCisgICAgZXJyb3JfdHlwZS0+UmVsZWFzZV9TdG9yZShOVUxM
KTsKKyAgICBSZW9wZW4oJm9wdGlvbnMpOworICAgIEFTU0VSVF9FUSgiYmFyIiwgR2V0KCJmb28i
KSk7CisgIH0KK30KKworVEVTVChEQlRlc3QsIEZpbGVzRGVsZXRlZEFmdGVyQ29tcGFjdGlvbikg
eworICBBU1NFUlRfT0soUHV0KCJmb28iLCAidjIiKSk7CisgIENvbXBhY3QoImEiLCAieiIpOwor
ICBjb25zdCBpbnQgbnVtX2ZpbGVzID0gQ291bnRGaWxlcygpOworICBmb3IgKGludCBpID0gMDsg
aSA8IDEwOyBpKyspIHsKKyAgICBBU1NFUlRfT0soUHV0KCJmb28iLCAidjIiKSk7CisgICAgQ29t
cGFjdCgiYSIsICJ6Iik7CisgIH0KKyAgQVNTRVJUX0VRKENvdW50RmlsZXMoKSwgbnVtX2ZpbGVz
KTsKK30KKworVEVTVChEQlRlc3QsIEJsb29tRmlsdGVyKSB7CisgIGVudl8tPmNvdW50X3JhbmRv
bV9yZWFkc18gPSB0cnVlOworICBPcHRpb25zIG9wdGlvbnMgPSBDdXJyZW50T3B0aW9ucygpOwor
ICBvcHRpb25zLmVudiA9IGVudl87CisgIG9wdGlvbnMuYmxvY2tfY2FjaGUgPSBOZXdMUlVDYWNo
ZSgwKTsgIC8vIFByZXZlbnQgY2FjaGUgaGl0cworICBvcHRpb25zLmZpbHRlcl9wb2xpY3kgPSBO
ZXdCbG9vbUZpbHRlclBvbGljeSgxMCk7CisgIFJlb3Blbigmb3B0aW9ucyk7CisKKyAgLy8gUG9w
dWxhdGUgbXVsdGlwbGUgbGF5ZXJzCisgIGNvbnN0IGludCBOID0gMTAwMDA7CisgIGZvciAoaW50
IGkgPSAwOyBpIDwgTjsgaSsrKSB7CisgICAgQVNTRVJUX09LKFB1dChLZXkoaSksIEtleShpKSkp
OworICB9CisgIENvbXBhY3QoImEiLCAieiIpOworICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkg
Kz0gMTAwKSB7CisgICAgQVNTRVJUX09LKFB1dChLZXkoaSksIEtleShpKSkpOworICB9CisgIGRi
ZnVsbCgpLT5URVNUX0NvbXBhY3RNZW1UYWJsZSgpOworCisgIC8vIFByZXZlbnQgYXV0byBjb21w
YWN0aW9ucyB0cmlnZ2VyZWQgYnkgc2Vla3MKKyAgZW52Xy0+ZGVsYXlfc3N0YWJsZV9zeW5jXy5S
ZWxlYXNlX1N0b3JlKGVudl8pOworCisgIC8vIExvb2t1cCBwcmVzZW50IGtleXMuICBTaG91bGQg
cmFyZWx5IHJlYWQgZnJvbSBzbWFsbCBzc3RhYmxlLgorICBlbnZfLT5yYW5kb21fcmVhZF9jb3Vu
dGVyXy5SZXNldCgpOworICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgeworICAgIEFTU0VS
VF9FUShLZXkoaSksIEdldChLZXkoaSkpKTsKKyAgfQorICBpbnQgcmVhZHMgPSBlbnZfLT5yYW5k
b21fcmVhZF9jb3VudGVyXy5SZWFkKCk7CisgIGZwcmludGYoc3RkZXJyLCAiJWQgcHJlc2VudCA9
PiAlZCByZWFkc1xuIiwgTiwgcmVhZHMpOworICBBU1NFUlRfR0UocmVhZHMsIE4pOworICBBU1NF
UlRfTEUocmVhZHMsIE4gKyAyKk4vMTAwKTsKKworICAvLyBMb29rdXAgcHJlc2VudCBrZXlzLiAg
U2hvdWxkIHJhcmVseSByZWFkIGZyb20gZWl0aGVyIHNzdGFibGUuCisgIGVudl8tPnJhbmRvbV9y
ZWFkX2NvdW50ZXJfLlJlc2V0KCk7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7Cisg
ICAgQVNTRVJUX0VRKCJOT1RfRk9VTkQiLCBHZXQoS2V5KGkpICsgIi5taXNzaW5nIikpOworICB9
CisgIHJlYWRzID0gZW52Xy0+cmFuZG9tX3JlYWRfY291bnRlcl8uUmVhZCgpOworICBmcHJpbnRm
KHN0ZGVyciwgIiVkIG1pc3NpbmcgPT4gJWQgcmVhZHNcbiIsIE4sIHJlYWRzKTsKKyAgQVNTRVJU
X0xFKHJlYWRzLCAzKk4vMTAwKTsKKworICBlbnZfLT5kZWxheV9zc3RhYmxlX3N5bmNfLlJlbGVh
c2VfU3RvcmUoTlVMTCk7CisgIENsb3NlKCk7CisgIGRlbGV0ZSBvcHRpb25zLmJsb2NrX2NhY2hl
OworICBkZWxldGUgb3B0aW9ucy5maWx0ZXJfcG9saWN5OworfQorCisvLyBNdWx0aS10aHJlYWRl
ZCB0ZXN0OgorbmFtZXNwYWNlIHsKKworc3RhdGljIGNvbnN0IGludCBrTnVtVGhyZWFkcyA9IDQ7
CitzdGF0aWMgY29uc3QgaW50IGtUZXN0U2Vjb25kcyA9IDEwOworc3RhdGljIGNvbnN0IGludCBr
TnVtS2V5cyA9IDEwMDA7CisKK3N0cnVjdCBNVFN0YXRlIHsKKyAgREJUZXN0KiB0ZXN0OworICBw
b3J0OjpBdG9taWNQb2ludGVyIHN0b3A7CisgIHBvcnQ6OkF0b21pY1BvaW50ZXIgY291bnRlcltr
TnVtVGhyZWFkc107CisgIHBvcnQ6OkF0b21pY1BvaW50ZXIgdGhyZWFkX2RvbmVba051bVRocmVh
ZHNdOworfTsKKworc3RydWN0IE1UVGhyZWFkIHsKKyAgTVRTdGF0ZSogc3RhdGU7CisgIGludCBp
ZDsKK307CisKK3N0YXRpYyB2b2lkIE1UVGhyZWFkQm9keSh2b2lkKiBhcmcpIHsKKyAgTVRUaHJl
YWQqIHQgPSByZWludGVycHJldF9jYXN0PE1UVGhyZWFkKj4oYXJnKTsKKyAgaW50IGlkID0gdC0+
aWQ7CisgIERCKiBkYiA9IHQtPnN0YXRlLT50ZXN0LT5kYl87CisgIHVpbnRwdHJfdCBjb3VudGVy
ID0gMDsKKyAgZnByaW50ZihzdGRlcnIsICIuLi4gc3RhcnRpbmcgdGhyZWFkICVkXG4iLCBpZCk7
CisgIFJhbmRvbSBybmQoMTAwMCArIGlkKTsKKyAgc3RkOjpzdHJpbmcgdmFsdWU7CisgIGNoYXIg
dmFsYnVmWzE1MDBdOworICB3aGlsZSAodC0+c3RhdGUtPnN0b3AuQWNxdWlyZV9Mb2FkKCkgPT0g
TlVMTCkgeworICAgIHQtPnN0YXRlLT5jb3VudGVyW2lkXS5SZWxlYXNlX1N0b3JlKHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KGNvdW50ZXIpKTsKKworICAgIGludCBrZXkgPSBybmQuVW5pZm9ybShr
TnVtS2V5cyk7CisgICAgY2hhciBrZXlidWZbMjBdOworICAgIHNucHJpbnRmKGtleWJ1Ziwgc2l6
ZW9mKGtleWJ1ZiksICIlMDE2ZCIsIGtleSk7CisKKyAgICBpZiAocm5kLk9uZUluKDIpKSB7Cisg
ICAgICAvLyBXcml0ZSB2YWx1ZXMgb2YgdGhlIGZvcm0gPGtleSwgbXkgaWQsIGNvdW50ZXI+Lgor
ICAgICAgLy8gV2UgYWRkIHNvbWUgcGFkZGluZyBmb3IgZm9yY2UgY29tcGFjdGlvbnMuCisgICAg
ICBzbnByaW50Zih2YWxidWYsIHNpemVvZih2YWxidWYpLCAiJWQuJWQuJS0xMDAwZCIsCisgICAg
ICAgICAgICAgICBrZXksIGlkLCBzdGF0aWNfY2FzdDxpbnQ+KGNvdW50ZXIpKTsKKyAgICAgIEFT
U0VSVF9PSyhkYi0+UHV0KFdyaXRlT3B0aW9ucygpLCBTbGljZShrZXlidWYpLCBTbGljZSh2YWxi
dWYpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgIC8vIFJlYWQgYSB2YWx1ZSBhbmQgdmVyaWZ5IHRo
YXQgaXQgbWF0Y2hlcyB0aGUgcGF0dGVybiB3cml0dGVuIGFib3ZlLgorICAgICAgU3RhdHVzIHMg
PSBkYi0+R2V0KFJlYWRPcHRpb25zKCksIFNsaWNlKGtleWJ1ZiksICZ2YWx1ZSk7CisgICAgICBp
ZiAocy5Jc05vdEZvdW5kKCkpIHsKKyAgICAgICAgLy8gS2V5IGhhcyBub3QgeWV0IGJlZW4gd3Jp
dHRlbgorICAgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgd3JpdGVyIHRo
cmVhZCBjb3VudGVyIGlzID49IHRoZSBjb3VudGVyIGluIHRoZSB2YWx1ZQorICAgICAgICBBU1NF
UlRfT0socyk7CisgICAgICAgIGludCBrLCB3LCBjOworICAgICAgICBBU1NFUlRfRVEoMywgc3Nj
YW5mKHZhbHVlLmNfc3RyKCksICIlZC4lZC4lZCIsICZrLCAmdywgJmMpKSA8PCB2YWx1ZTsKKyAg
ICAgICAgQVNTRVJUX0VRKGssIGtleSk7CisgICAgICAgIEFTU0VSVF9HRSh3LCAwKTsKKyAgICAg
ICAgQVNTRVJUX0xUKHcsIGtOdW1UaHJlYWRzKTsKKyAgICAgICAgQVNTRVJUX0xFKGMsIHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90PigKKyAgICAgICAgICAgIHQtPnN0YXRlLT5jb3VudGVyW3dd
LkFjcXVpcmVfTG9hZCgpKSk7CisgICAgICB9CisgICAgfQorICAgIGNvdW50ZXIrKzsKKyAgfQor
ICB0LT5zdGF0ZS0+dGhyZWFkX2RvbmVbaWRdLlJlbGVhc2VfU3RvcmUodCk7CisgIGZwcmludGYo
c3RkZXJyLCAiLi4uIHN0b3BwaW5nIHRocmVhZCAlZCBhZnRlciAlZCBvcHNcbiIsIGlkLCBpbnQo
Y291bnRlcikpOworfQorCit9ICAvLyBuYW1lc3BhY2UKKworVEVTVChEQlRlc3QsIE11bHRpVGhy
ZWFkZWQpIHsKKyAgZG8geworICAgIC8vIEluaXRpYWxpemUgc3RhdGUKKyAgICBNVFN0YXRlIG10
OworICAgIG10LnRlc3QgPSB0aGlzOworICAgIG10LnN0b3AuUmVsZWFzZV9TdG9yZSgwKTsKKyAg
ICBmb3IgKGludCBpZCA9IDA7IGlkIDwga051bVRocmVhZHM7IGlkKyspIHsKKyAgICAgIG10LmNv
dW50ZXJbaWRdLlJlbGVhc2VfU3RvcmUoMCk7CisgICAgICBtdC50aHJlYWRfZG9uZVtpZF0uUmVs
ZWFzZV9TdG9yZSgwKTsKKyAgICB9CisKKyAgICAvLyBTdGFydCB0aHJlYWRzCisgICAgTVRUaHJl
YWQgdGhyZWFkW2tOdW1UaHJlYWRzXTsKKyAgICBmb3IgKGludCBpZCA9IDA7IGlkIDwga051bVRo
cmVhZHM7IGlkKyspIHsKKyAgICAgIHRocmVhZFtpZF0uc3RhdGUgPSAmbXQ7CisgICAgICB0aHJl
YWRbaWRdLmlkID0gaWQ7CisgICAgICBlbnZfLT5TdGFydFRocmVhZChNVFRocmVhZEJvZHksICZ0
aHJlYWRbaWRdKTsKKyAgICB9CisKKyAgICAvLyBMZXQgdGhlbSBydW4gZm9yIGEgd2hpbGUKKyAg
ICBlbnZfLT5TbGVlcEZvck1pY3Jvc2Vjb25kcyhrVGVzdFNlY29uZHMgKiAxMDAwMDAwKTsKKwor
ICAgIC8vIFN0b3AgdGhlIHRocmVhZHMgYW5kIHdhaXQgZm9yIHRoZW0gdG8gZmluaXNoCisgICAg
bXQuc3RvcC5SZWxlYXNlX1N0b3JlKCZtdCk7CisgICAgZm9yIChpbnQgaWQgPSAwOyBpZCA8IGtO
dW1UaHJlYWRzOyBpZCsrKSB7CisgICAgICB3aGlsZSAobXQudGhyZWFkX2RvbmVbaWRdLkFjcXVp
cmVfTG9hZCgpID09IE5VTEwpIHsKKyAgICAgICAgZW52Xy0+U2xlZXBGb3JNaWNyb3NlY29uZHMo
MTAwMDAwKTsKKyAgICAgIH0KKyAgICB9CisgIH0gd2hpbGUgKENoYW5nZU9wdGlvbnMoKSk7Cit9
CisKK25hbWVzcGFjZSB7Cit0eXBlZGVmIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmlu
Zz4gS1ZNYXA7Cit9CisKK2NsYXNzIE1vZGVsREI6IHB1YmxpYyBEQiB7CisgcHVibGljOgorICBj
bGFzcyBNb2RlbFNuYXBzaG90IDogcHVibGljIFNuYXBzaG90IHsKKyAgIHB1YmxpYzoKKyAgICBL
Vk1hcCBtYXBfOworICB9OworCisgIGV4cGxpY2l0IE1vZGVsREIoY29uc3QgT3B0aW9ucyYgb3B0
aW9ucyk6IG9wdGlvbnNfKG9wdGlvbnMpIHsgfQorICB+TW9kZWxEQigpIHsgfQorICB2aXJ0dWFs
IFN0YXR1cyBQdXQoY29uc3QgV3JpdGVPcHRpb25zJiBvLCBjb25zdCBTbGljZSYgaywgY29uc3Qg
U2xpY2UmIHYpIHsKKyAgICByZXR1cm4gREI6OlB1dChvLCBrLCB2KTsKKyAgfQorICB2aXJ0dWFs
IFN0YXR1cyBEZWxldGUoY29uc3QgV3JpdGVPcHRpb25zJiBvLCBjb25zdCBTbGljZSYga2V5KSB7
CisgICAgcmV0dXJuIERCOjpEZWxldGUobywga2V5KTsKKyAgfQorICB2aXJ0dWFsIFN0YXR1cyBH
ZXQoY29uc3QgUmVhZE9wdGlvbnMmIG9wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICBjb25z
dCBTbGljZSYga2V5LCBzdGQ6OnN0cmluZyogdmFsdWUpIHsKKyAgICBhc3NlcnQoZmFsc2UpOyAg
ICAgIC8vIE5vdCBpbXBsZW1lbnRlZAorICAgIHJldHVybiBTdGF0dXM6Ok5vdEZvdW5kKGtleSk7
CisgIH0KKyAgdmlydHVhbCBJdGVyYXRvciogTmV3SXRlcmF0b3IoY29uc3QgUmVhZE9wdGlvbnMm
IG9wdGlvbnMpIHsKKyAgICBpZiAob3B0aW9ucy5zbmFwc2hvdCA9PSBOVUxMKSB7CisgICAgICBL
Vk1hcCogc2F2ZWQgPSBuZXcgS1ZNYXA7CisgICAgICAqc2F2ZWQgPSBtYXBfOworICAgICAgcmV0
dXJuIG5ldyBNb2RlbEl0ZXIoc2F2ZWQsIHRydWUpOworICAgIH0gZWxzZSB7CisgICAgICBjb25z
dCBLVk1hcCogc25hcHNob3Rfc3RhdGUgPQorICAgICAgICAgICYocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBNb2RlbFNuYXBzaG90Kj4ob3B0aW9ucy5zbmFwc2hvdCktPm1hcF8pOworICAgICAgcmV0
dXJuIG5ldyBNb2RlbEl0ZXIoc25hcHNob3Rfc3RhdGUsIGZhbHNlKTsKKyAgICB9CisgIH0KKyAg
dmlydHVhbCBjb25zdCBTbmFwc2hvdCogR2V0U25hcHNob3QoKSB7CisgICAgTW9kZWxTbmFwc2hv
dCogc25hcHNob3QgPSBuZXcgTW9kZWxTbmFwc2hvdDsKKyAgICBzbmFwc2hvdC0+bWFwXyA9IG1h
cF87CisgICAgcmV0dXJuIHNuYXBzaG90OworICB9CisKKyAgdmlydHVhbCB2b2lkIFJlbGVhc2VT
bmFwc2hvdChjb25zdCBTbmFwc2hvdCogc25hcHNob3QpIHsKKyAgICBkZWxldGUgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBNb2RlbFNuYXBzaG90Kj4oc25hcHNob3QpOworICB9CisgIHZpcnR1YWwg
U3RhdHVzIFdyaXRlKGNvbnN0IFdyaXRlT3B0aW9ucyYgb3B0aW9ucywgV3JpdGVCYXRjaCogYmF0
Y2gpIHsKKyAgICBjbGFzcyBIYW5kbGVyIDogcHVibGljIFdyaXRlQmF0Y2g6OkhhbmRsZXIgewor
ICAgICBwdWJsaWM6CisgICAgICBLVk1hcCogbWFwXzsKKyAgICAgIHZpcnR1YWwgdm9pZCBQdXQo
Y29uc3QgU2xpY2UmIGtleSwgY29uc3QgU2xpY2UmIHZhbHVlKSB7CisgICAgICAgICgqbWFwXylb
a2V5LlRvU3RyaW5nKCldID0gdmFsdWUuVG9TdHJpbmcoKTsKKyAgICAgIH0KKyAgICAgIHZpcnR1
YWwgdm9pZCBEZWxldGUoY29uc3QgU2xpY2UmIGtleSkgeworICAgICAgICBtYXBfLT5lcmFzZShr
ZXkuVG9TdHJpbmcoKSk7CisgICAgICB9CisgICAgfTsKKyAgICBIYW5kbGVyIGhhbmRsZXI7Cisg
ICAgaGFuZGxlci5tYXBfID0gJm1hcF87CisgICAgcmV0dXJuIGJhdGNoLT5JdGVyYXRlKCZoYW5k
bGVyKTsKKyAgfQorCisgIHZpcnR1YWwgYm9vbCBHZXRQcm9wZXJ0eShjb25zdCBTbGljZSYgcHJv
cGVydHksIHN0ZDo6c3RyaW5nKiB2YWx1ZSkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICB2
aXJ0dWFsIHZvaWQgR2V0QXBwcm94aW1hdGVTaXplcyhjb25zdCBSYW5nZSogciwgaW50IG4sIHVp
bnQ2NF90KiBzaXplcykgeworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAg
ICBzaXplc1tpXSA9IDA7CisgICAgfQorICB9CisgIHZpcnR1YWwgdm9pZCBDb21wYWN0UmFuZ2Uo
Y29uc3QgU2xpY2UqIHN0YXJ0LCBjb25zdCBTbGljZSogZW5kKSB7CisgIH0KKworIHByaXZhdGU6
CisgIGNsYXNzIE1vZGVsSXRlcjogcHVibGljIEl0ZXJhdG9yIHsKKyAgIHB1YmxpYzoKKyAgICBN
b2RlbEl0ZXIoY29uc3QgS1ZNYXAqIG1hcCwgYm9vbCBvd25lZCkKKyAgICAgICAgOiBtYXBfKG1h
cCksIG93bmVkXyhvd25lZCksIGl0ZXJfKG1hcF8tPmVuZCgpKSB7CisgICAgfQorICAgIH5Nb2Rl
bEl0ZXIoKSB7CisgICAgICBpZiAob3duZWRfKSBkZWxldGUgbWFwXzsKKyAgICB9CisgICAgdmly
dHVhbCBib29sIFZhbGlkKCkgY29uc3QgeyByZXR1cm4gaXRlcl8gIT0gbWFwXy0+ZW5kKCk7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgU2Vla1RvRmlyc3QoKSB7IGl0ZXJfID0gbWFwXy0+YmVnaW4oKTsg
fQorICAgIHZpcnR1YWwgdm9pZCBTZWVrVG9MYXN0KCkgeworICAgICAgaWYgKG1hcF8tPmVtcHR5
KCkpIHsKKyAgICAgICAgaXRlcl8gPSBtYXBfLT5lbmQoKTsKKyAgICAgIH0gZWxzZSB7CisgICAg
ICAgIGl0ZXJfID0gbWFwXy0+ZmluZChtYXBfLT5yYmVnaW4oKS0+Zmlyc3QpOworICAgICAgfQor
ICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgU2Vlayhjb25zdCBTbGljZSYgaykgeworICAgICAgaXRl
cl8gPSBtYXBfLT5sb3dlcl9ib3VuZChrLlRvU3RyaW5nKCkpOworICAgIH0KKyAgICB2aXJ0dWFs
IHZvaWQgTmV4dCgpIHsgKytpdGVyXzsgfQorICAgIHZpcnR1YWwgdm9pZCBQcmV2KCkgeyAtLWl0
ZXJfOyB9CisgICAgdmlydHVhbCBTbGljZSBrZXkoKSBjb25zdCB7IHJldHVybiBpdGVyXy0+Zmly
c3Q7IH0KKyAgICB2aXJ0dWFsIFNsaWNlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gaXRlcl8tPnNl
Y29uZDsgfQorICAgIHZpcnR1YWwgU3RhdHVzIHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIFN0YXR1
czo6T0soKTsgfQorICAgcHJpdmF0ZToKKyAgICBjb25zdCBLVk1hcCogY29uc3QgbWFwXzsKKyAg
ICBjb25zdCBib29sIG93bmVkXzsgIC8vIERvIHdlIG93biBtYXBfCisgICAgS1ZNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ZXJfOworICB9OworICBjb25zdCBPcHRpb25zIG9wdGlvbnNfOworICBLVk1h
cCBtYXBfOworfTsKKworc3RhdGljIHN0ZDo6c3RyaW5nIFJhbmRvbUtleShSYW5kb20qIHJuZCkg
eworICBpbnQgbGVuID0gKHJuZC0+T25lSW4oMykKKyAgICAgICAgICAgICA/IDEgICAgICAgICAg
ICAgICAgLy8gU2hvcnQgc29tZXRpbWVzIHRvIGVuY291cmFnZSBjb2xsaXNpb25zCisgICAgICAg
ICAgICAgOiAocm5kLT5PbmVJbigxMDApID8gcm5kLT5Ta2V3ZWQoMTApIDogcm5kLT5Vbmlmb3Jt
KDEwKSkpOworICByZXR1cm4gdGVzdDo6UmFuZG9tS2V5KHJuZCwgbGVuKTsKK30KKworc3RhdGlj
IGJvb2wgQ29tcGFyZUl0ZXJhdG9ycyhpbnQgc3RlcCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgREIqIG1vZGVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQiogZGIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNuYXBzaG90KiBtb2RlbF9zbmFwLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTbmFwc2hvdCogZGJfc25hcCkgewor
ICBSZWFkT3B0aW9ucyBvcHRpb25zOworICBvcHRpb25zLnNuYXBzaG90ID0gbW9kZWxfc25hcDsK
KyAgSXRlcmF0b3IqIG1pdGVyID0gbW9kZWwtPk5ld0l0ZXJhdG9yKG9wdGlvbnMpOworICBvcHRp
b25zLnNuYXBzaG90ID0gZGJfc25hcDsKKyAgSXRlcmF0b3IqIGRiaXRlciA9IGRiLT5OZXdJdGVy
YXRvcihvcHRpb25zKTsKKyAgYm9vbCBvayA9IHRydWU7CisgIGludCBjb3VudCA9IDA7CisgIGZv
ciAobWl0ZXItPlNlZWtUb0ZpcnN0KCksIGRiaXRlci0+U2Vla1RvRmlyc3QoKTsKKyAgICAgICBv
ayAmJiBtaXRlci0+VmFsaWQoKSAmJiBkYml0ZXItPlZhbGlkKCk7CisgICAgICAgbWl0ZXItPk5l
eHQoKSwgZGJpdGVyLT5OZXh0KCkpIHsKKyAgICBjb3VudCsrOworICAgIGlmIChtaXRlci0+a2V5
KCkuY29tcGFyZShkYml0ZXItPmtleSgpKSAhPSAwKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwg
InN0ZXAgJWQ6IEtleSBtaXNtYXRjaDogJyVzJyB2cy4gJyVzJ1xuIiwKKyAgICAgICAgICAgICAg
c3RlcCwKKyAgICAgICAgICAgICAgRXNjYXBlU3RyaW5nKG1pdGVyLT5rZXkoKSkuY19zdHIoKSwK
KyAgICAgICAgICAgICAgRXNjYXBlU3RyaW5nKGRiaXRlci0+a2V5KCkpLmNfc3RyKCkpOworICAg
ICAgb2sgPSBmYWxzZTsKKyAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChtaXRlci0+dmFs
dWUoKS5jb21wYXJlKGRiaXRlci0+dmFsdWUoKSkgIT0gMCkgeworICAgICAgZnByaW50ZihzdGRl
cnIsICJzdGVwICVkOiBWYWx1ZSBtaXNtYXRjaCBmb3Iga2V5ICclcyc6ICclcycgdnMuICclcydc
biIsCisgICAgICAgICAgICAgIHN0ZXAsCisgICAgICAgICAgICAgIEVzY2FwZVN0cmluZyhtaXRl
ci0+a2V5KCkpLmNfc3RyKCksCisgICAgICAgICAgICAgIEVzY2FwZVN0cmluZyhtaXRlci0+dmFs
dWUoKSkuY19zdHIoKSwKKyAgICAgICAgICAgICAgRXNjYXBlU3RyaW5nKG1pdGVyLT52YWx1ZSgp
KS5jX3N0cigpKTsKKyAgICAgIG9rID0gZmFsc2U7CisgICAgfQorICB9CisKKyAgaWYgKG9rKSB7
CisgICAgaWYgKG1pdGVyLT5WYWxpZCgpICE9IGRiaXRlci0+VmFsaWQoKSkgeworICAgICAgZnBy
aW50ZihzdGRlcnIsICJzdGVwICVkOiBNaXNtYXRjaCBhdCBlbmQgb2YgaXRlcmF0b3JzOiAlZCB2
cy4gJWRcbiIsCisgICAgICAgICAgICAgIHN0ZXAsIG1pdGVyLT5WYWxpZCgpLCBkYml0ZXItPlZh
bGlkKCkpOworICAgICAgb2sgPSBmYWxzZTsKKyAgICB9CisgIH0KKyAgZnByaW50ZihzdGRlcnIs
ICIlZCBlbnRyaWVzIGNvbXBhcmVkOiBvaz0lZFxuIiwgY291bnQsIG9rKTsKKyAgZGVsZXRlIG1p
dGVyOworICBkZWxldGUgZGJpdGVyOworICByZXR1cm4gb2s7Cit9CisKK1RFU1QoREJUZXN0LCBS
YW5kb21pemVkKSB7CisgIFJhbmRvbSBybmQodGVzdDo6UmFuZG9tU2VlZCgpKTsKKyAgZG8gewor
ICAgIE1vZGVsREIgbW9kZWwoQ3VycmVudE9wdGlvbnMoKSk7CisgICAgY29uc3QgaW50IE4gPSAx
MDAwMDsKKyAgICBjb25zdCBTbmFwc2hvdCogbW9kZWxfc25hcCA9IE5VTEw7CisgICAgY29uc3Qg
U25hcHNob3QqIGRiX3NuYXAgPSBOVUxMOworICAgIHN0ZDo6c3RyaW5nIGssIHY7CisgICAgZm9y
IChpbnQgc3RlcCA9IDA7IHN0ZXAgPCBOOyBzdGVwKyspIHsKKyAgICAgIGlmIChzdGVwICUgMTAw
ID09IDApIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJTdGVwICVkIG9mICVkXG4iLCBzdGVw
LCBOKTsKKyAgICAgIH0KKyAgICAgIC8vIFRPRE8oc2FuamF5KTogVGVzdCBHZXQoKSB3b3Jrcwor
ICAgICAgaW50IHAgPSBybmQuVW5pZm9ybSgxMDApOworICAgICAgaWYgKHAgPCA0NSkgeyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQdXQKKyAgICAgICAgayA9IFJhbmRvbUtleSgm
cm5kKTsKKyAgICAgICAgdiA9IFJhbmRvbVN0cmluZygmcm5kLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIHJuZC5PbmVJbigyMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICA/IDEwMCArIHJu
ZC5Vbmlmb3JtKDEwMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICA6IHJuZC5Vbmlmb3JtKDgp
KTsKKyAgICAgICAgQVNTRVJUX09LKG1vZGVsLlB1dChXcml0ZU9wdGlvbnMoKSwgaywgdikpOwor
ICAgICAgICBBU1NFUlRfT0soZGJfLT5QdXQoV3JpdGVPcHRpb25zKCksIGssIHYpKTsKKworICAg
ICAgfSBlbHNlIGlmIChwIDwgOTApIHsgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWxldGUK
KyAgICAgICAgayA9IFJhbmRvbUtleSgmcm5kKTsKKyAgICAgICAgQVNTRVJUX09LKG1vZGVsLkRl
bGV0ZShXcml0ZU9wdGlvbnMoKSwgaykpOworICAgICAgICBBU1NFUlRfT0soZGJfLT5EZWxldGUo
V3JpdGVPcHRpb25zKCksIGspKTsKKworCisgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIE11bHRpLWVsZW1lbnQgYmF0Y2gKKyAgICAgICAgV3JpdGVC
YXRjaCBiOworICAgICAgICBjb25zdCBpbnQgbnVtID0gcm5kLlVuaWZvcm0oOCk7CisgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKKyAgICAgICAgICBpZiAoaSA9PSAwIHx8
ICFybmQuT25lSW4oMTApKSB7CisgICAgICAgICAgICBrID0gUmFuZG9tS2V5KCZybmQpOworICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBQZXJpb2RpY2FsbHkgcmUtdXNlIHRoZSBz
YW1lIGtleSBmcm9tIHRoZSBwcmV2aW91cyBpdGVyLCBzbworICAgICAgICAgICAgLy8gd2UgaGF2
ZSBtdWx0aXBsZSBlbnRyaWVzIGluIHRoZSB3cml0ZSBiYXRjaCBmb3IgdGhlIHNhbWUga2V5Cisg
ICAgICAgICAgfQorICAgICAgICAgIGlmIChybmQuT25lSW4oMikpIHsKKyAgICAgICAgICAgIHYg
PSBSYW5kb21TdHJpbmcoJnJuZCwgcm5kLlVuaWZvcm0oMTApKTsKKyAgICAgICAgICAgIGIuUHV0
KGssIHYpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBiLkRlbGV0ZShrKTsKKyAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUX09LKG1vZGVsLldyaXRlKFdyaXRl
T3B0aW9ucygpLCAmYikpOworICAgICAgICBBU1NFUlRfT0soZGJfLT5Xcml0ZShXcml0ZU9wdGlv
bnMoKSwgJmIpKTsKKyAgICAgIH0KKworICAgICAgaWYgKChzdGVwICUgMTAwKSA9PSAwKSB7Cisg
ICAgICAgIEFTU0VSVF9UUlVFKENvbXBhcmVJdGVyYXRvcnMoc3RlcCwgJm1vZGVsLCBkYl8sIE5V
TEwsIE5VTEwpKTsKKyAgICAgICAgQVNTRVJUX1RSVUUoQ29tcGFyZUl0ZXJhdG9ycyhzdGVwLCAm
bW9kZWwsIGRiXywgbW9kZWxfc25hcCwgZGJfc25hcCkpOworICAgICAgICAvLyBTYXZlIGEgc25h
cHNob3QgZnJvbSBlYWNoIERCIHRoaXMgdGltZSB0aGF0IHdlJ2xsIHVzZSBuZXh0CisgICAgICAg
IC8vIHRpbWUgd2UgY29tcGFyZSB0aGluZ3MsIHRvIG1ha2Ugc3VyZSB0aGUgY3VycmVudCBzdGF0
ZSBpcworICAgICAgICAvLyBwcmVzZXJ2ZWQgd2l0aCB0aGUgc25hcHNob3QKKyAgICAgICAgaWYg
KG1vZGVsX3NuYXAgIT0gTlVMTCkgbW9kZWwuUmVsZWFzZVNuYXBzaG90KG1vZGVsX3NuYXApOwor
ICAgICAgICBpZiAoZGJfc25hcCAhPSBOVUxMKSBkYl8tPlJlbGVhc2VTbmFwc2hvdChkYl9zbmFw
KTsKKworICAgICAgICBSZW9wZW4oKTsKKyAgICAgICAgQVNTRVJUX1RSVUUoQ29tcGFyZUl0ZXJh
dG9ycyhzdGVwLCAmbW9kZWwsIGRiXywgTlVMTCwgTlVMTCkpOworCisgICAgICAgIG1vZGVsX3Nu
YXAgPSBtb2RlbC5HZXRTbmFwc2hvdCgpOworICAgICAgICBkYl9zbmFwID0gZGJfLT5HZXRTbmFw
c2hvdCgpOworICAgICAgfQorICAgIH0KKyAgICBpZiAobW9kZWxfc25hcCAhPSBOVUxMKSBtb2Rl
bC5SZWxlYXNlU25hcHNob3QobW9kZWxfc25hcCk7CisgICAgaWYgKGRiX3NuYXAgIT0gTlVMTCkg
ZGJfLT5SZWxlYXNlU25hcHNob3QoZGJfc25hcCk7CisgIH0gd2hpbGUgKENoYW5nZU9wdGlvbnMo
KSk7Cit9CisKK3N0ZDo6c3RyaW5nIE1ha2VLZXkodW5zaWduZWQgaW50IG51bSkgeworICBjaGFy
IGJ1ZlszMF07CisgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlMDE2dSIsIG51bSk7Cisg
IHJldHVybiBzdGQ6OnN0cmluZyhidWYpOworfQorCit2b2lkIEJNX0xvZ0FuZEFwcGx5KGludCBp
dGVycywgaW50IG51bV9iYXNlX2ZpbGVzKSB7CisgIHN0ZDo6c3RyaW5nIGRibmFtZSA9IHRlc3Q6
OlRtcERpcigpICsgIi9sZXZlbGRiX3Rlc3RfYmVuY2htYXJrIjsKKyAgRGVzdHJveURCKGRibmFt
ZSwgT3B0aW9ucygpKTsKKworICBEQiogZGIgPSBOVUxMOworICBPcHRpb25zIG9wdHM7CisgIG9w
dHMuY3JlYXRlX2lmX21pc3NpbmcgPSB0cnVlOworICBTdGF0dXMgcyA9IERCOjpPcGVuKG9wdHMs
IGRibmFtZSwgJmRiKTsKKyAgQVNTRVJUX09LKHMpOworICBBU1NFUlRfVFJVRShkYiAhPSBOVUxM
KTsKKworICBkZWxldGUgZGI7CisgIGRiID0gTlVMTDsKKworICBFbnYqIGVudiA9IEVudjo6RGVm
YXVsdCgpOworCisgIHBvcnQ6Ok11dGV4IG11OworICBNdXRleExvY2sgbCgmbXUpOworCisgIElu
dGVybmFsS2V5Q29tcGFyYXRvciBjbXAoQnl0ZXdpc2VDb21wYXJhdG9yKCkpOworICBPcHRpb25z
IG9wdGlvbnM7CisgIFZlcnNpb25TZXQgdnNldChkYm5hbWUsICZvcHRpb25zLCBOVUxMLCAmY21w
KTsKKyAgQVNTRVJUX09LKHZzZXQuUmVjb3ZlcigpKTsKKyAgVmVyc2lvbkVkaXQgdmJhc2U7Cisg
IHVpbnQ2NF90IGZudW0gPSAxOworICBmb3IgKGludCBpID0gMDsgaSA8IG51bV9iYXNlX2ZpbGVz
OyBpKyspIHsKKyAgICBJbnRlcm5hbEtleSBzdGFydChNYWtlS2V5KDIqZm51bSksIDEsIGtUeXBl
VmFsdWUpOworICAgIEludGVybmFsS2V5IGxpbWl0KE1ha2VLZXkoMipmbnVtKzEpLCAxLCBrVHlw
ZURlbGV0aW9uKTsKKyAgICB2YmFzZS5BZGRGaWxlKDIsIGZudW0rKywgMSAvKiBmaWxlIHNpemUg
Ki8sIHN0YXJ0LCBsaW1pdCk7CisgIH0KKyAgQVNTRVJUX09LKHZzZXQuTG9nQW5kQXBwbHkoJnZi
YXNlLCAmbXUpKTsKKworICB1aW50NjRfdCBzdGFydF9taWNyb3MgPSBlbnYtPk5vd01pY3Jvcygp
OworCisgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlcnM7IGkrKykgeworICAgIFZlcnNpb25FZGl0
IHZlZGl0OworICAgIHZlZGl0LkRlbGV0ZUZpbGUoMiwgZm51bSk7CisgICAgSW50ZXJuYWxLZXkg
c3RhcnQoTWFrZUtleSgyKmZudW0pLCAxLCBrVHlwZVZhbHVlKTsKKyAgICBJbnRlcm5hbEtleSBs
aW1pdChNYWtlS2V5KDIqZm51bSsxKSwgMSwga1R5cGVEZWxldGlvbik7CisgICAgdmVkaXQuQWRk
RmlsZSgyLCBmbnVtKyssIDEgLyogZmlsZSBzaXplICovLCBzdGFydCwgbGltaXQpOworICAgIHZz
ZXQuTG9nQW5kQXBwbHkoJnZlZGl0LCAmbXUpOworICB9CisgIHVpbnQ2NF90IHN0b3BfbWljcm9z
ID0gZW52LT5Ob3dNaWNyb3MoKTsKKyAgdW5zaWduZWQgaW50IHVzID0gc3RvcF9taWNyb3MgLSBz
dGFydF9taWNyb3M7CisgIGNoYXIgYnVmWzE2XTsKKyAgc25wcmludGYoYnVmLCBzaXplb2YoYnVm
KSwgIiVkIiwgbnVtX2Jhc2VfZmlsZXMpOworICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAi
Qk1fTG9nQW5kQXBwbHkvJS02cyAgICU4ZCBpdGVycyA6ICU5dSB1cyAoJTcuMGYgdXMgLyBpdGVy
KVxuIiwKKyAgICAgICAgICBidWYsIGl0ZXJzLCB1cywgKChmbG9hdCl1cykgLyBpdGVycyk7Cit9
CisKK30gIC8vIG5hbWVzcGFjZSBsZXZlbGRiCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiog
YXJndikgeworICBpZiAoYXJnYyA+IDEgJiYgc3RkOjpzdHJpbmcoYXJndlsxXSkgPT0gIi0tYmVu
Y2htYXJrIikgeworICAgIGxldmVsZGI6OkJNX0xvZ0FuZEFwcGx5KDEwMDAsIDEpOworICAgIGxl
dmVsZGI6OkJNX0xvZ0FuZEFwcGx5KDEwMDAsIDEwMCk7CisgICAgbGV2ZWxkYjo6Qk1fTG9nQW5k
QXBwbHkoMTAwMCwgMTAwMDApOworICAgIGxldmVsZGI6OkJNX0xvZ0FuZEFwcGx5KDEwMCwgMTAw
MDAwKTsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiBsZXZlbGRiOjp0ZXN0OjpSdW5B
bGxUZXN0cygpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9k
YmZvcm1hdC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvZGJmb3JtYXQuY2MKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMjhlMTFiMzk4ZDAzYmY4NTVjYzIzMjAzMGU0MDZlOTBmYTM1YzU0NAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvZGJmb3JtYXQuY2MKQEAg
LTAsMCArMSwxNDAgQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1
dG9ycy4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAiZGIvZGJmb3JtYXQuaCIKKyNp
bmNsdWRlICJwb3J0L3BvcnQuaCIKKyNpbmNsdWRlICJ1dGlsL2NvZGluZy5oIgorCituYW1lc3Bh
Y2UgbGV2ZWxkYiB7CisKK3N0YXRpYyB1aW50NjRfdCBQYWNrU2VxdWVuY2VBbmRUeXBlKHVpbnQ2
NF90IHNlcSwgVmFsdWVUeXBlIHQpIHsKKyAgYXNzZXJ0KHNlcSA8PSBrTWF4U2VxdWVuY2VOdW1i
ZXIpOworICBhc3NlcnQodCA8PSBrVmFsdWVUeXBlRm9yU2Vlayk7CisgIHJldHVybiAoc2VxIDw8
IDgpIHwgdDsKK30KKwordm9pZCBBcHBlbmRJbnRlcm5hbEtleShzdGQ6OnN0cmluZyogcmVzdWx0
LCBjb25zdCBQYXJzZWRJbnRlcm5hbEtleSYga2V5KSB7CisgIHJlc3VsdC0+YXBwZW5kKGtleS51
c2VyX2tleS5kYXRhKCksIGtleS51c2VyX2tleS5zaXplKCkpOworICBQdXRGaXhlZDY0KHJlc3Vs
dCwgUGFja1NlcXVlbmNlQW5kVHlwZShrZXkuc2VxdWVuY2UsIGtleS50eXBlKSk7Cit9CisKK3N0
ZDo6c3RyaW5nIFBhcnNlZEludGVybmFsS2V5OjpEZWJ1Z1N0cmluZygpIGNvbnN0IHsKKyAgY2hh
ciBidWZbNTBdOworICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJyBAICVsbHUgOiAlZCIs
CisgICAgICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHNlcXVlbmNlLAorICAgICAgICAgICBp
bnQodHlwZSkpOworICBzdGQ6OnN0cmluZyByZXN1bHQgPSAiJyI7CisgIHJlc3VsdCArPSB1c2Vy
X2tleS5Ub1N0cmluZygpOworICByZXN1bHQgKz0gYnVmOworICByZXR1cm4gcmVzdWx0OworfQor
CitzdGQ6OnN0cmluZyBJbnRlcm5hbEtleTo6RGVidWdTdHJpbmcoKSBjb25zdCB7CisgIHN0ZDo6
c3RyaW5nIHJlc3VsdDsKKyAgUGFyc2VkSW50ZXJuYWxLZXkgcGFyc2VkOworICBpZiAoUGFyc2VJ
bnRlcm5hbEtleShyZXBfLCAmcGFyc2VkKSkgeworICAgIHJlc3VsdCA9IHBhcnNlZC5EZWJ1Z1N0
cmluZygpOworICB9IGVsc2UgeworICAgIHJlc3VsdCA9ICIoYmFkKSI7CisgICAgcmVzdWx0LmFw
cGVuZChFc2NhcGVTdHJpbmcocmVwXykpOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKK2Nv
bnN0IGNoYXIqIEludGVybmFsS2V5Q29tcGFyYXRvcjo6TmFtZSgpIGNvbnN0IHsKKyAgcmV0dXJu
ICJsZXZlbGRiLkludGVybmFsS2V5Q29tcGFyYXRvciI7Cit9CisKK2ludCBJbnRlcm5hbEtleUNv
bXBhcmF0b3I6OkNvbXBhcmUoY29uc3QgU2xpY2UmIGFrZXksIGNvbnN0IFNsaWNlJiBia2V5KSBj
b25zdCB7CisgIC8vIE9yZGVyIGJ5OgorICAvLyAgICBpbmNyZWFzaW5nIHVzZXIga2V5IChhY2Nv
cmRpbmcgdG8gdXNlci1zdXBwbGllZCBjb21wYXJhdG9yKQorICAvLyAgICBkZWNyZWFzaW5nIHNl
cXVlbmNlIG51bWJlcgorICAvLyAgICBkZWNyZWFzaW5nIHR5cGUgKHRob3VnaCBzZXF1ZW5jZSMg
c2hvdWxkIGJlIGVub3VnaCB0byBkaXNhbWJpZ3VhdGUpCisgIGludCByID0gdXNlcl9jb21wYXJh
dG9yXy0+Q29tcGFyZShFeHRyYWN0VXNlcktleShha2V5KSwgRXh0cmFjdFVzZXJLZXkoYmtleSkp
OworICBpZiAociA9PSAwKSB7CisgICAgY29uc3QgdWludDY0X3QgYW51bSA9IERlY29kZUZpeGVk
NjQoYWtleS5kYXRhKCkgKyBha2V5LnNpemUoKSAtIDgpOworICAgIGNvbnN0IHVpbnQ2NF90IGJu
dW0gPSBEZWNvZGVGaXhlZDY0KGJrZXkuZGF0YSgpICsgYmtleS5zaXplKCkgLSA4KTsKKyAgICBp
ZiAoYW51bSA+IGJudW0pIHsKKyAgICAgIHIgPSAtMTsKKyAgICB9IGVsc2UgaWYgKGFudW0gPCBi
bnVtKSB7CisgICAgICByID0gKzE7CisgICAgfQorICB9CisgIHJldHVybiByOworfQorCit2b2lk
IEludGVybmFsS2V5Q29tcGFyYXRvcjo6RmluZFNob3J0ZXN0U2VwYXJhdG9yKAorICAgICAgc3Rk
OjpzdHJpbmcqIHN0YXJ0LAorICAgICAgY29uc3QgU2xpY2UmIGxpbWl0KSBjb25zdCB7CisgIC8v
IEF0dGVtcHQgdG8gc2hvcnRlbiB0aGUgdXNlciBwb3J0aW9uIG9mIHRoZSBrZXkKKyAgU2xpY2Ug
dXNlcl9zdGFydCA9IEV4dHJhY3RVc2VyS2V5KCpzdGFydCk7CisgIFNsaWNlIHVzZXJfbGltaXQg
PSBFeHRyYWN0VXNlcktleShsaW1pdCk7CisgIHN0ZDo6c3RyaW5nIHRtcCh1c2VyX3N0YXJ0LmRh
dGEoKSwgdXNlcl9zdGFydC5zaXplKCkpOworICB1c2VyX2NvbXBhcmF0b3JfLT5GaW5kU2hvcnRl
c3RTZXBhcmF0b3IoJnRtcCwgdXNlcl9saW1pdCk7CisgIGlmICh0bXAuc2l6ZSgpIDwgdXNlcl9z
dGFydC5zaXplKCkgJiYKKyAgICAgIHVzZXJfY29tcGFyYXRvcl8tPkNvbXBhcmUodXNlcl9zdGFy
dCwgdG1wKSA8IDApIHsKKyAgICAvLyBVc2VyIGtleSBoYXMgYmVjb21lIHNob3J0ZXIgcGh5c2lj
YWxseSwgYnV0IGxhcmdlciBsb2dpY2FsbHkuCisgICAgLy8gVGFjayBvbiB0aGUgZWFybGllc3Qg
cG9zc2libGUgbnVtYmVyIHRvIHRoZSBzaG9ydGVuZWQgdXNlciBrZXkuCisgICAgUHV0Rml4ZWQ2
NCgmdG1wLCBQYWNrU2VxdWVuY2VBbmRUeXBlKGtNYXhTZXF1ZW5jZU51bWJlcixrVmFsdWVUeXBl
Rm9yU2VlaykpOworICAgIGFzc2VydCh0aGlzLT5Db21wYXJlKCpzdGFydCwgdG1wKSA8IDApOwor
ICAgIGFzc2VydCh0aGlzLT5Db21wYXJlKHRtcCwgbGltaXQpIDwgMCk7CisgICAgc3RhcnQtPnN3
YXAodG1wKTsKKyAgfQorfQorCit2b2lkIEludGVybmFsS2V5Q29tcGFyYXRvcjo6RmluZFNob3J0
U3VjY2Vzc29yKHN0ZDo6c3RyaW5nKiBrZXkpIGNvbnN0IHsKKyAgU2xpY2UgdXNlcl9rZXkgPSBF
eHRyYWN0VXNlcktleSgqa2V5KTsKKyAgc3RkOjpzdHJpbmcgdG1wKHVzZXJfa2V5LmRhdGEoKSwg
dXNlcl9rZXkuc2l6ZSgpKTsKKyAgdXNlcl9jb21wYXJhdG9yXy0+RmluZFNob3J0U3VjY2Vzc29y
KCZ0bXApOworICBpZiAodG1wLnNpemUoKSA8IHVzZXJfa2V5LnNpemUoKSAmJgorICAgICAgdXNl
cl9jb21wYXJhdG9yXy0+Q29tcGFyZSh1c2VyX2tleSwgdG1wKSA8IDApIHsKKyAgICAvLyBVc2Vy
IGtleSBoYXMgYmVjb21lIHNob3J0ZXIgcGh5c2ljYWxseSwgYnV0IGxhcmdlciBsb2dpY2FsbHku
CisgICAgLy8gVGFjayBvbiB0aGUgZWFybGllc3QgcG9zc2libGUgbnVtYmVyIHRvIHRoZSBzaG9y
dGVuZWQgdXNlciBrZXkuCisgICAgUHV0Rml4ZWQ2NCgmdG1wLCBQYWNrU2VxdWVuY2VBbmRUeXBl
KGtNYXhTZXF1ZW5jZU51bWJlcixrVmFsdWVUeXBlRm9yU2VlaykpOworICAgIGFzc2VydCh0aGlz
LT5Db21wYXJlKCprZXksIHRtcCkgPCAwKTsKKyAgICBrZXktPnN3YXAodG1wKTsKKyAgfQorfQor
Citjb25zdCBjaGFyKiBJbnRlcm5hbEZpbHRlclBvbGljeTo6TmFtZSgpIGNvbnN0IHsKKyAgcmV0
dXJuIHVzZXJfcG9saWN5Xy0+TmFtZSgpOworfQorCit2b2lkIEludGVybmFsRmlsdGVyUG9saWN5
OjpDcmVhdGVGaWx0ZXIoY29uc3QgU2xpY2UqIGtleXMsIGludCBuLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBkc3QpIGNvbnN0IHsKKyAgLy8g
V2UgcmVseSBvbiB0aGUgZmFjdCB0aGF0IHRoZSBjb2RlIGluIHRhYmxlLmNjIGRvZXMgbm90IG1p
bmQgdXMKKyAgLy8gYWRqdXN0aW5nIGtleXNbXS4KKyAgU2xpY2UqIG1rZXkgPSBjb25zdF9jYXN0
PFNsaWNlKj4oa2V5cyk7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgbWtl
eVtpXSA9IEV4dHJhY3RVc2VyS2V5KGtleXNbaV0pOworICAgIC8vIFRPRE8oc2FuamF5KTogU3Vw
cHJlc3MgZHVwcz8KKyAgfQorICB1c2VyX3BvbGljeV8tPkNyZWF0ZUZpbHRlcihrZXlzLCBuLCBk
c3QpOworfQorCitib29sIEludGVybmFsRmlsdGVyUG9saWN5OjpLZXlNYXlNYXRjaChjb25zdCBT
bGljZSYga2V5LCBjb25zdCBTbGljZSYgZikgY29uc3QgeworICByZXR1cm4gdXNlcl9wb2xpY3lf
LT5LZXlNYXlNYXRjaChFeHRyYWN0VXNlcktleShrZXkpLCBmKTsKK30KKworTG9va3VwS2V5OjpM
b29rdXBLZXkoY29uc3QgU2xpY2UmIHVzZXJfa2V5LCBTZXF1ZW5jZU51bWJlciBzKSB7CisgIHNp
emVfdCB1c2l6ZSA9IHVzZXJfa2V5LnNpemUoKTsKKyAgc2l6ZV90IG5lZWRlZCA9IHVzaXplICsg
MTM7ICAvLyBBIGNvbnNlcnZhdGl2ZSBlc3RpbWF0ZQorICBjaGFyKiBkc3Q7CisgIGlmIChuZWVk
ZWQgPD0gc2l6ZW9mKHNwYWNlXykpIHsKKyAgICBkc3QgPSBzcGFjZV87CisgIH0gZWxzZSB7Cisg
ICAgZHN0ID0gbmV3IGNoYXJbbmVlZGVkXTsKKyAgfQorICBzdGFydF8gPSBkc3Q7CisgIGRzdCA9
IEVuY29kZVZhcmludDMyKGRzdCwgdXNpemUgKyA4KTsKKyAga3N0YXJ0XyA9IGRzdDsKKyAgbWVt
Y3B5KGRzdCwgdXNlcl9rZXkuZGF0YSgpLCB1c2l6ZSk7CisgIGRzdCArPSB1c2l6ZTsKKyAgRW5j
b2RlRml4ZWQ2NChkc3QsIFBhY2tTZXF1ZW5jZUFuZFR5cGUocywga1ZhbHVlVHlwZUZvclNlZWsp
KTsKKyAgZHN0ICs9IDg7CisgIGVuZF8gPSBkc3Q7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBsZXZl
bGRiCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2RiZm9ybWF0Lmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2RiZm9ybWF0LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjdm
NjRkYWZiNmQ1YjNkNjc2ZWNkZTlkMGZjODZhYjI5NDJiMjQ5NAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvZGJmb3JtYXQuaApAQCAtMCwwICsxLDIyNyBA
QAorLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgorCisjaWZu
ZGVmIFNUT1JBR0VfTEVWRUxEQl9EQl9GT1JNQVRfSF8KKyNkZWZpbmUgU1RPUkFHRV9MRVZFTERC
X0RCX0ZPUk1BVF9IXworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJsZXZlbGRiL2Nv
bXBhcmF0b3IuaCIKKyNpbmNsdWRlICJsZXZlbGRiL2RiLmgiCisjaW5jbHVkZSAibGV2ZWxkYi9m
aWx0ZXJfcG9saWN5LmgiCisjaW5jbHVkZSAibGV2ZWxkYi9zbGljZS5oIgorI2luY2x1ZGUgImxl
dmVsZGIvdGFibGVfYnVpbGRlci5oIgorI2luY2x1ZGUgInV0aWwvY29kaW5nLmgiCisjaW5jbHVk
ZSAidXRpbC9sb2dnaW5nLmgiCisKK25hbWVzcGFjZSBsZXZlbGRiIHsKKworLy8gR3JvdXBpbmcg
b2YgY29uc3RhbnRzLiAgV2UgbWF5IHdhbnQgdG8gbWFrZSBzb21lIG9mIHRoZXNlCisvLyBwYXJh
bWV0ZXJzIHNldCB2aWEgb3B0aW9ucy4KK25hbWVzcGFjZSBjb25maWcgeworc3RhdGljIGNvbnN0
IGludCBrTnVtTGV2ZWxzID0gNzsKKworLy8gTGV2ZWwtMCBjb21wYWN0aW9uIGlzIHN0YXJ0ZWQg
d2hlbiB3ZSBoaXQgdGhpcyBtYW55IGZpbGVzLgorc3RhdGljIGNvbnN0IGludCBrTDBfQ29tcGFj
dGlvblRyaWdnZXIgPSA0OworCisvLyBTb2Z0IGxpbWl0IG9uIG51bWJlciBvZiBsZXZlbC0wIGZp
bGVzLiAgV2Ugc2xvdyBkb3duIHdyaXRlcyBhdCB0aGlzIHBvaW50Lgorc3RhdGljIGNvbnN0IGlu
dCBrTDBfU2xvd2Rvd25Xcml0ZXNUcmlnZ2VyID0gODsKKworLy8gTWF4aW11bSBudW1iZXIgb2Yg
bGV2ZWwtMCBmaWxlcy4gIFdlIHN0b3Agd3JpdGVzIGF0IHRoaXMgcG9pbnQuCitzdGF0aWMgY29u
c3QgaW50IGtMMF9TdG9wV3JpdGVzVHJpZ2dlciA9IDEyOworCisvLyBNYXhpbXVtIGxldmVsIHRv
IHdoaWNoIGEgbmV3IGNvbXBhY3RlZCBtZW10YWJsZSBpcyBwdXNoZWQgaWYgaXQKKy8vIGRvZXMg
bm90IGNyZWF0ZSBvdmVybGFwLiAgV2UgdHJ5IHRvIHB1c2ggdG8gbGV2ZWwgMiB0byBhdm9pZCB0
aGUKKy8vIHJlbGF0aXZlbHkgZXhwZW5zaXZlIGxldmVsIDA9PjEgY29tcGFjdGlvbnMgYW5kIHRv
IGF2b2lkIHNvbWUKKy8vIGV4cGVuc2l2ZSBtYW5pZmVzdCBmaWxlIG9wZXJhdGlvbnMuICBXZSBk
byBub3QgcHVzaCBhbGwgdGhlIHdheSB0bworLy8gdGhlIGxhcmdlc3QgbGV2ZWwgc2luY2UgdGhh
dCBjYW4gZ2VuZXJhdGUgYSBsb3Qgb2Ygd2FzdGVkIGRpc2sKKy8vIHNwYWNlIGlmIHRoZSBzYW1l
IGtleSBzcGFjZSBpcyBiZWluZyByZXBlYXRlZGx5IG92ZXJ3cml0dGVuLgorc3RhdGljIGNvbnN0
IGludCBrTWF4TWVtQ29tcGFjdExldmVsID0gMjsKKworfSAgLy8gbmFtZXNwYWNlIGNvbmZpZwor
CitjbGFzcyBJbnRlcm5hbEtleTsKKworLy8gVmFsdWUgdHlwZXMgZW5jb2RlZCBhcyB0aGUgbGFz
dCBjb21wb25lbnQgb2YgaW50ZXJuYWwga2V5cy4KKy8vIERPIE5PVCBDSEFOR0UgVEhFU0UgRU5V
TSBWQUxVRVM6IHRoZXkgYXJlIGVtYmVkZGVkIGluIHRoZSBvbi1kaXNrCisvLyBkYXRhIHN0cnVj
dHVyZXMuCitlbnVtIFZhbHVlVHlwZSB7CisgIGtUeXBlRGVsZXRpb24gPSAweDAsCisgIGtUeXBl
VmFsdWUgPSAweDEKK307CisvLyBrVmFsdWVUeXBlRm9yU2VlayBkZWZpbmVzIHRoZSBWYWx1ZVR5
cGUgdGhhdCBzaG91bGQgYmUgcGFzc2VkIHdoZW4KKy8vIGNvbnN0cnVjdGluZyBhIFBhcnNlZElu
dGVybmFsS2V5IG9iamVjdCBmb3Igc2Vla2luZyB0byBhIHBhcnRpY3VsYXIKKy8vIHNlcXVlbmNl
IG51bWJlciAoc2luY2Ugd2Ugc29ydCBzZXF1ZW5jZSBudW1iZXJzIGluIGRlY3JlYXNpbmcgb3Jk
ZXIKKy8vIGFuZCB0aGUgdmFsdWUgdHlwZSBpcyBlbWJlZGRlZCBhcyB0aGUgbG93IDggYml0cyBp
biB0aGUgc2VxdWVuY2UKKy8vIG51bWJlciBpbiBpbnRlcm5hbCBrZXlzLCB3ZSBuZWVkIHRvIHVz
ZSB0aGUgaGlnaGVzdC1udW1iZXJlZAorLy8gVmFsdWVUeXBlLCBub3QgdGhlIGxvd2VzdCkuCitz
dGF0aWMgY29uc3QgVmFsdWVUeXBlIGtWYWx1ZVR5cGVGb3JTZWVrID0ga1R5cGVWYWx1ZTsKKwor
dHlwZWRlZiB1aW50NjRfdCBTZXF1ZW5jZU51bWJlcjsKKworLy8gV2UgbGVhdmUgZWlnaHQgYml0
cyBlbXB0eSBhdCB0aGUgYm90dG9tIHNvIGEgdHlwZSBhbmQgc2VxdWVuY2UjCisvLyBjYW4gYmUg
cGFja2VkIHRvZ2V0aGVyIGludG8gNjQtYml0cy4KK3N0YXRpYyBjb25zdCBTZXF1ZW5jZU51bWJl
ciBrTWF4U2VxdWVuY2VOdW1iZXIgPQorICAgICgoMHgxdWxsIDw8IDU2KSAtIDEpOworCitzdHJ1
Y3QgUGFyc2VkSW50ZXJuYWxLZXkgeworICBTbGljZSB1c2VyX2tleTsKKyAgU2VxdWVuY2VOdW1i
ZXIgc2VxdWVuY2U7CisgIFZhbHVlVHlwZSB0eXBlOworCisgIFBhcnNlZEludGVybmFsS2V5KCkg
eyB9ICAvLyBJbnRlbnRpb25hbGx5IGxlZnQgdW5pbml0aWFsaXplZCAoZm9yIHNwZWVkKQorICBQ
YXJzZWRJbnRlcm5hbEtleShjb25zdCBTbGljZSYgdSwgY29uc3QgU2VxdWVuY2VOdW1iZXImIHNl
cSwgVmFsdWVUeXBlIHQpCisgICAgICA6IHVzZXJfa2V5KHUpLCBzZXF1ZW5jZShzZXEpLCB0eXBl
KHQpIHsgfQorICBzdGQ6OnN0cmluZyBEZWJ1Z1N0cmluZygpIGNvbnN0OworfTsKKworLy8gUmV0
dXJuIHRoZSBsZW5ndGggb2YgdGhlIGVuY29kaW5nIG9mICJrZXkiLgoraW5saW5lIHNpemVfdCBJ
bnRlcm5hbEtleUVuY29kaW5nTGVuZ3RoKGNvbnN0IFBhcnNlZEludGVybmFsS2V5JiBrZXkpIHsK
KyAgcmV0dXJuIGtleS51c2VyX2tleS5zaXplKCkgKyA4OworfQorCisvLyBBcHBlbmQgdGhlIHNl
cmlhbGl6YXRpb24gb2YgImtleSIgdG8gKnJlc3VsdC4KK2V4dGVybiB2b2lkIEFwcGVuZEludGVy
bmFsS2V5KHN0ZDo6c3RyaW5nKiByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBQYXJzZWRJbnRlcm5hbEtleSYga2V5KTsKKworLy8gQXR0ZW1wdCB0byBwYXJzZSBh
biBpbnRlcm5hbCBrZXkgZnJvbSAiaW50ZXJuYWxfa2V5Ii4gIE9uIHN1Y2Nlc3MsCisvLyBzdG9y
ZXMgdGhlIHBhcnNlZCBkYXRhIGluICIqcmVzdWx0IiwgYW5kIHJldHVybnMgdHJ1ZS4KKy8vCisv
LyBPbiBlcnJvciwgcmV0dXJucyBmYWxzZSwgbGVhdmVzICIqcmVzdWx0IiBpbiBhbiB1bmRlZmlu
ZWQgc3RhdGUuCitleHRlcm4gYm9vbCBQYXJzZUludGVybmFsS2V5KGNvbnN0IFNsaWNlJiBpbnRl
cm5hbF9rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcnNlZEludGVybmFsS2V5
KiByZXN1bHQpOworCisvLyBSZXR1cm5zIHRoZSB1c2VyIGtleSBwb3J0aW9uIG9mIGFuIGludGVy
bmFsIGtleS4KK2lubGluZSBTbGljZSBFeHRyYWN0VXNlcktleShjb25zdCBTbGljZSYgaW50ZXJu
YWxfa2V5KSB7CisgIGFzc2VydChpbnRlcm5hbF9rZXkuc2l6ZSgpID49IDgpOworICByZXR1cm4g
U2xpY2UoaW50ZXJuYWxfa2V5LmRhdGEoKSwgaW50ZXJuYWxfa2V5LnNpemUoKSAtIDgpOworfQor
CitpbmxpbmUgVmFsdWVUeXBlIEV4dHJhY3RWYWx1ZVR5cGUoY29uc3QgU2xpY2UmIGludGVybmFs
X2tleSkgeworICBhc3NlcnQoaW50ZXJuYWxfa2V5LnNpemUoKSA+PSA4KTsKKyAgY29uc3Qgc2l6
ZV90IG4gPSBpbnRlcm5hbF9rZXkuc2l6ZSgpOworICB1aW50NjRfdCBudW0gPSBEZWNvZGVGaXhl
ZDY0KGludGVybmFsX2tleS5kYXRhKCkgKyBuIC0gOCk7CisgIHVuc2lnbmVkIGNoYXIgYyA9IG51
bSAmIDB4ZmY7CisgIHJldHVybiBzdGF0aWNfY2FzdDxWYWx1ZVR5cGU+KGMpOworfQorCisvLyBB
IGNvbXBhcmF0b3IgZm9yIGludGVybmFsIGtleXMgdGhhdCB1c2VzIGEgc3BlY2lmaWVkIGNvbXBh
cmF0b3IgZm9yCisvLyB0aGUgdXNlciBrZXkgcG9ydGlvbiBhbmQgYnJlYWtzIHRpZXMgYnkgZGVj
cmVhc2luZyBzZXF1ZW5jZSBudW1iZXIuCitjbGFzcyBJbnRlcm5hbEtleUNvbXBhcmF0b3IgOiBw
dWJsaWMgQ29tcGFyYXRvciB7CisgcHJpdmF0ZToKKyAgY29uc3QgQ29tcGFyYXRvciogdXNlcl9j
b21wYXJhdG9yXzsKKyBwdWJsaWM6CisgIGV4cGxpY2l0IEludGVybmFsS2V5Q29tcGFyYXRvcihj
b25zdCBDb21wYXJhdG9yKiBjKSA6IHVzZXJfY29tcGFyYXRvcl8oYykgeyB9CisgIHZpcnR1YWwg
Y29uc3QgY2hhciogTmFtZSgpIGNvbnN0OworICB2aXJ0dWFsIGludCBDb21wYXJlKGNvbnN0IFNs
aWNlJiBhLCBjb25zdCBTbGljZSYgYikgY29uc3Q7CisgIHZpcnR1YWwgdm9pZCBGaW5kU2hvcnRl
c3RTZXBhcmF0b3IoCisgICAgICBzdGQ6OnN0cmluZyogc3RhcnQsCisgICAgICBjb25zdCBTbGlj
ZSYgbGltaXQpIGNvbnN0OworICB2aXJ0dWFsIHZvaWQgRmluZFNob3J0U3VjY2Vzc29yKHN0ZDo6
c3RyaW5nKiBrZXkpIGNvbnN0OworCisgIGNvbnN0IENvbXBhcmF0b3IqIHVzZXJfY29tcGFyYXRv
cigpIGNvbnN0IHsgcmV0dXJuIHVzZXJfY29tcGFyYXRvcl87IH0KKworICBpbnQgQ29tcGFyZShj
b25zdCBJbnRlcm5hbEtleSYgYSwgY29uc3QgSW50ZXJuYWxLZXkmIGIpIGNvbnN0OworfTsKKwor
Ly8gRmlsdGVyIHBvbGljeSB3cmFwcGVyIHRoYXQgY29udmVydHMgZnJvbSBpbnRlcm5hbCBrZXlz
IHRvIHVzZXIga2V5cworY2xhc3MgSW50ZXJuYWxGaWx0ZXJQb2xpY3kgOiBwdWJsaWMgRmlsdGVy
UG9saWN5IHsKKyBwcml2YXRlOgorICBjb25zdCBGaWx0ZXJQb2xpY3kqIGNvbnN0IHVzZXJfcG9s
aWN5XzsKKyBwdWJsaWM6CisgIGV4cGxpY2l0IEludGVybmFsRmlsdGVyUG9saWN5KGNvbnN0IEZp
bHRlclBvbGljeSogcCkgOiB1c2VyX3BvbGljeV8ocCkgeyB9CisgIHZpcnR1YWwgY29uc3QgY2hh
ciogTmFtZSgpIGNvbnN0OworICB2aXJ0dWFsIHZvaWQgQ3JlYXRlRmlsdGVyKGNvbnN0IFNsaWNl
KiBrZXlzLCBpbnQgbiwgc3RkOjpzdHJpbmcqIGRzdCkgY29uc3Q7CisgIHZpcnR1YWwgYm9vbCBL
ZXlNYXlNYXRjaChjb25zdCBTbGljZSYga2V5LCBjb25zdCBTbGljZSYgZmlsdGVyKSBjb25zdDsK
K307CisKKy8vIE1vZHVsZXMgaW4gdGhpcyBkaXJlY3Rvcnkgc2hvdWxkIGtlZXAgaW50ZXJuYWwg
a2V5cyB3cmFwcGVkIGluc2lkZQorLy8gdGhlIGZvbGxvd2luZyBjbGFzcyBpbnN0ZWFkIG9mIHBs
YWluIHN0cmluZ3Mgc28gdGhhdCB3ZSBkbyBub3QKKy8vIGluY29ycmVjdGx5IHVzZSBzdHJpbmcg
Y29tcGFyaXNvbnMgaW5zdGVhZCBvZiBhbiBJbnRlcm5hbEtleUNvbXBhcmF0b3IuCitjbGFzcyBJ
bnRlcm5hbEtleSB7CisgcHJpdmF0ZToKKyAgc3RkOjpzdHJpbmcgcmVwXzsKKyBwdWJsaWM6Cisg
IEludGVybmFsS2V5KCkgeyB9ICAgLy8gTGVhdmUgcmVwXyBhcyBlbXB0eSB0byBpbmRpY2F0ZSBp
dCBpcyBpbnZhbGlkCisgIEludGVybmFsS2V5KGNvbnN0IFNsaWNlJiB1c2VyX2tleSwgU2VxdWVu
Y2VOdW1iZXIgcywgVmFsdWVUeXBlIHQpIHsKKyAgICBBcHBlbmRJbnRlcm5hbEtleSgmcmVwXywg
UGFyc2VkSW50ZXJuYWxLZXkodXNlcl9rZXksIHMsIHQpKTsKKyAgfQorCisgIHZvaWQgRGVjb2Rl
RnJvbShjb25zdCBTbGljZSYgcykgeyByZXBfLmFzc2lnbihzLmRhdGEoKSwgcy5zaXplKCkpOyB9
CisgIFNsaWNlIEVuY29kZSgpIGNvbnN0IHsKKyAgICBhc3NlcnQoIXJlcF8uZW1wdHkoKSk7Cisg
ICAgcmV0dXJuIHJlcF87CisgIH0KKworICBTbGljZSB1c2VyX2tleSgpIGNvbnN0IHsgcmV0dXJu
IEV4dHJhY3RVc2VyS2V5KHJlcF8pOyB9CisKKyAgdm9pZCBTZXRGcm9tKGNvbnN0IFBhcnNlZElu
dGVybmFsS2V5JiBwKSB7CisgICAgcmVwXy5jbGVhcigpOworICAgIEFwcGVuZEludGVybmFsS2V5
KCZyZXBfLCBwKTsKKyAgfQorCisgIHZvaWQgQ2xlYXIoKSB7IHJlcF8uY2xlYXIoKTsgfQorCisg
IHN0ZDo6c3RyaW5nIERlYnVnU3RyaW5nKCkgY29uc3Q7Cit9OworCitpbmxpbmUgaW50IEludGVy
bmFsS2V5Q29tcGFyYXRvcjo6Q29tcGFyZSgKKyAgICBjb25zdCBJbnRlcm5hbEtleSYgYSwgY29u
c3QgSW50ZXJuYWxLZXkmIGIpIGNvbnN0IHsKKyAgcmV0dXJuIENvbXBhcmUoYS5FbmNvZGUoKSwg
Yi5FbmNvZGUoKSk7Cit9CisKK2lubGluZSBib29sIFBhcnNlSW50ZXJuYWxLZXkoY29uc3QgU2xp
Y2UmIGludGVybmFsX2tleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFyc2VkSW50
ZXJuYWxLZXkqIHJlc3VsdCkgeworICBjb25zdCBzaXplX3QgbiA9IGludGVybmFsX2tleS5zaXpl
KCk7CisgIGlmIChuIDwgOCkgcmV0dXJuIGZhbHNlOworICB1aW50NjRfdCBudW0gPSBEZWNvZGVG
aXhlZDY0KGludGVybmFsX2tleS5kYXRhKCkgKyBuIC0gOCk7CisgIHVuc2lnbmVkIGNoYXIgYyA9
IG51bSAmIDB4ZmY7CisgIHJlc3VsdC0+c2VxdWVuY2UgPSBudW0gPj4gODsKKyAgcmVzdWx0LT50
eXBlID0gc3RhdGljX2Nhc3Q8VmFsdWVUeXBlPihjKTsKKyAgcmVzdWx0LT51c2VyX2tleSA9IFNs
aWNlKGludGVybmFsX2tleS5kYXRhKCksIG4gLSA4KTsKKyAgcmV0dXJuIChjIDw9IHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXI+KGtUeXBlVmFsdWUpKTsKK30KKworLy8gQSBoZWxwZXIgY2xhc3Mg
dXNlZnVsIGZvciBEQkltcGw6OkdldCgpCitjbGFzcyBMb29rdXBLZXkgeworIHB1YmxpYzoKKyAg
Ly8gSW5pdGlhbGl6ZSAqdGhpcyBmb3IgbG9va2luZyB1cCB1c2VyX2tleSBhdCBhIHNuYXBzaG90
IHdpdGgKKyAgLy8gdGhlIHNwZWNpZmllZCBzZXF1ZW5jZSBudW1iZXIuCisgIExvb2t1cEtleShj
b25zdCBTbGljZSYgdXNlcl9rZXksIFNlcXVlbmNlTnVtYmVyIHNlcXVlbmNlKTsKKworICB+TG9v
a3VwS2V5KCk7CisKKyAgLy8gUmV0dXJuIGEga2V5IHN1aXRhYmxlIGZvciBsb29rdXAgaW4gYSBN
ZW1UYWJsZS4KKyAgU2xpY2UgbWVtdGFibGVfa2V5KCkgY29uc3QgeyByZXR1cm4gU2xpY2Uoc3Rh
cnRfLCBlbmRfIC0gc3RhcnRfKTsgfQorCisgIC8vIFJldHVybiBhbiBpbnRlcm5hbCBrZXkgKHN1
aXRhYmxlIGZvciBwYXNzaW5nIHRvIGFuIGludGVybmFsIGl0ZXJhdG9yKQorICBTbGljZSBpbnRl
cm5hbF9rZXkoKSBjb25zdCB7IHJldHVybiBTbGljZShrc3RhcnRfLCBlbmRfIC0ga3N0YXJ0Xyk7
IH0KKworICAvLyBSZXR1cm4gdGhlIHVzZXIga2V5CisgIFNsaWNlIHVzZXJfa2V5KCkgY29uc3Qg
eyByZXR1cm4gU2xpY2Uoa3N0YXJ0XywgZW5kXyAtIGtzdGFydF8gLSA4KTsgfQorCisgcHJpdmF0
ZToKKyAgLy8gV2UgY29uc3RydWN0IGEgY2hhciBhcnJheSBvZiB0aGUgZm9ybToKKyAgLy8gICAg
a2xlbmd0aCAgdmFyaW50MzIgICAgICAgICAgICAgICA8LS0gc3RhcnRfCisgIC8vICAgIHVzZXJr
ZXkgIGNoYXJba2xlbmd0aF0gICAgICAgICAgPC0tIGtzdGFydF8KKyAgLy8gICAgdGFnICAgICAg
dWludDY0CisgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC0tIGVuZF8K
KyAgLy8gVGhlIGFycmF5IGlzIGEgc3VpdGFibGUgTWVtVGFibGUga2V5LgorICAvLyBUaGUgc3Vm
Zml4IHN0YXJ0aW5nIHdpdGggInVzZXJrZXkiIGNhbiBiZSB1c2VkIGFzIGFuIEludGVybmFsS2V5
LgorICBjb25zdCBjaGFyKiBzdGFydF87CisgIGNvbnN0IGNoYXIqIGtzdGFydF87CisgIGNvbnN0
IGNoYXIqIGVuZF87CisgIGNoYXIgc3BhY2VfWzIwMF07ICAgICAgLy8gQXZvaWQgYWxsb2NhdGlv
biBmb3Igc2hvcnQga2V5cworCisgIC8vIE5vIGNvcHlpbmcgYWxsb3dlZAorICBMb29rdXBLZXko
Y29uc3QgTG9va3VwS2V5Jik7CisgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IExvb2t1cEtleSYpOwor
fTsKKworaW5saW5lIExvb2t1cEtleTo6fkxvb2t1cEtleSgpIHsKKyAgaWYgKHN0YXJ0XyAhPSBz
cGFjZV8pIGRlbGV0ZVtdIHN0YXJ0XzsKK30KKworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKKwor
I2VuZGlmICAvLyBTVE9SQUdFX0xFVkVMREJfREJfRk9STUFUX0hfCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2RiZm9ybWF0X3Rlc3QuY2MgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9sZXZlbGRiL2RiL2RiZm9ybWF0X3Rlc3QuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWQ4MmY1ZDMxM2Zh
ZDg4ZWE0ZTFkMDc5NDI3YmJhMTNkZjY2N2NmZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xldmVsZGIvZGIvZGJmb3JtYXRfdGVzdC5jYwpAQCAtMCwwICsxLDExMiBAQAor
Ly8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBT
ZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgorCisjaW5jbHVk
ZSAiZGIvZGJmb3JtYXQuaCIKKyNpbmNsdWRlICJ1dGlsL2xvZ2dpbmcuaCIKKyNpbmNsdWRlICJ1
dGlsL3Rlc3RoYXJuZXNzLmgiCisKK25hbWVzcGFjZSBsZXZlbGRiIHsKKworc3RhdGljIHN0ZDo6
c3RyaW5nIElLZXkoY29uc3Qgc3RkOjpzdHJpbmcmIHVzZXJfa2V5LAorICAgICAgICAgICAgICAg
ICAgICAgICAgdWludDY0X3Qgc2VxLAorICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVUeXBl
IHZ0KSB7CisgIHN0ZDo6c3RyaW5nIGVuY29kZWQ7CisgIEFwcGVuZEludGVybmFsS2V5KCZlbmNv
ZGVkLCBQYXJzZWRJbnRlcm5hbEtleSh1c2VyX2tleSwgc2VxLCB2dCkpOworICByZXR1cm4gZW5j
b2RlZDsKK30KKworc3RhdGljIHN0ZDo6c3RyaW5nIFNob3J0ZW4oY29uc3Qgc3RkOjpzdHJpbmcm
IHMsIGNvbnN0IHN0ZDo6c3RyaW5nJiBsKSB7CisgIHN0ZDo6c3RyaW5nIHJlc3VsdCA9IHM7Cisg
IEludGVybmFsS2V5Q29tcGFyYXRvcihCeXRld2lzZUNvbXBhcmF0b3IoKSkuRmluZFNob3J0ZXN0
U2VwYXJhdG9yKCZyZXN1bHQsIGwpOworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgc3Rk
OjpzdHJpbmcgU2hvcnRTdWNjZXNzb3IoY29uc3Qgc3RkOjpzdHJpbmcmIHMpIHsKKyAgc3RkOjpz
dHJpbmcgcmVzdWx0ID0gczsKKyAgSW50ZXJuYWxLZXlDb21wYXJhdG9yKEJ5dGV3aXNlQ29tcGFy
YXRvcigpKS5GaW5kU2hvcnRTdWNjZXNzb3IoJnJlc3VsdCk7CisgIHJldHVybiByZXN1bHQ7Cit9
CisKK3N0YXRpYyB2b2lkIFRlc3RLZXkoY29uc3Qgc3RkOjpzdHJpbmcmIGtleSwKKyAgICAgICAg
ICAgICAgICAgICAgdWludDY0X3Qgc2VxLAorICAgICAgICAgICAgICAgICAgICBWYWx1ZVR5cGUg
dnQpIHsKKyAgc3RkOjpzdHJpbmcgZW5jb2RlZCA9IElLZXkoa2V5LCBzZXEsIHZ0KTsKKworICBT
bGljZSBpbihlbmNvZGVkKTsKKyAgUGFyc2VkSW50ZXJuYWxLZXkgZGVjb2RlZCgiIiwgMCwga1R5
cGVWYWx1ZSk7CisKKyAgQVNTRVJUX1RSVUUoUGFyc2VJbnRlcm5hbEtleShpbiwgJmRlY29kZWQp
KTsKKyAgQVNTRVJUX0VRKGtleSwgZGVjb2RlZC51c2VyX2tleS5Ub1N0cmluZygpKTsKKyAgQVNT
RVJUX0VRKHNlcSwgZGVjb2RlZC5zZXF1ZW5jZSk7CisgIEFTU0VSVF9FUSh2dCwgZGVjb2RlZC50
eXBlKTsKKworICBBU1NFUlRfVFJVRSghUGFyc2VJbnRlcm5hbEtleShTbGljZSgiYmFyIiksICZk
ZWNvZGVkKSk7Cit9CisKK2NsYXNzIEZvcm1hdFRlc3QgeyB9OworCitURVNUKEZvcm1hdFRlc3Qs
IEludGVybmFsS2V5X0VuY29kZURlY29kZSkgeworICBjb25zdCBjaGFyKiBrZXlzW10gPSB7ICIi
LCAiayIsICJoZWxsbyIsICJsb25nZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnIiB9OworICBjb25zdCB1
aW50NjRfdCBzZXFbXSA9IHsKKyAgICAxLCAyLCAzLAorICAgICgxdWxsIDw8IDgpIC0gMSwgMXVs
bCA8PCA4LCAoMXVsbCA8PCA4KSArIDEsCisgICAgKDF1bGwgPDwgMTYpIC0gMSwgMXVsbCA8PCAx
NiwgKDF1bGwgPDwgMTYpICsgMSwKKyAgICAoMXVsbCA8PCAzMikgLSAxLCAxdWxsIDw8IDMyLCAo
MXVsbCA8PCAzMikgKyAxCisgIH07CisgIGZvciAoaW50IGsgPSAwOyBrIDwgc2l6ZW9mKGtleXMp
IC8gc2l6ZW9mKGtleXNbMF0pOyBrKyspIHsKKyAgICBmb3IgKGludCBzID0gMDsgcyA8IHNpemVv
ZihzZXEpIC8gc2l6ZW9mKHNlcVswXSk7IHMrKykgeworICAgICAgVGVzdEtleShrZXlzW2tdLCBz
ZXFbc10sIGtUeXBlVmFsdWUpOworICAgICAgVGVzdEtleSgiaGVsbG8iLCAxLCBrVHlwZURlbGV0
aW9uKTsKKyAgICB9CisgIH0KK30KKworVEVTVChGb3JtYXRUZXN0LCBJbnRlcm5hbEtleVNob3J0
U2VwYXJhdG9yKSB7CisgIC8vIFdoZW4gdXNlciBrZXlzIGFyZSBzYW1lCisgIEFTU0VSVF9FUShJ
S2V5KCJmb28iLCAxMDAsIGtUeXBlVmFsdWUpLAorICAgICAgICAgICAgU2hvcnRlbihJS2V5KCJm
b28iLCAxMDAsIGtUeXBlVmFsdWUpLAorICAgICAgICAgICAgICAgICAgICBJS2V5KCJmb28iLCA5
OSwga1R5cGVWYWx1ZSkpKTsKKyAgQVNTRVJUX0VRKElLZXkoImZvbyIsIDEwMCwga1R5cGVWYWx1
ZSksCisgICAgICAgICAgICBTaG9ydGVuKElLZXkoImZvbyIsIDEwMCwga1R5cGVWYWx1ZSksCisg
ICAgICAgICAgICAgICAgICAgIElLZXkoImZvbyIsIDEwMSwga1R5cGVWYWx1ZSkpKTsKKyAgQVNT
RVJUX0VRKElLZXkoImZvbyIsIDEwMCwga1R5cGVWYWx1ZSksCisgICAgICAgICAgICBTaG9ydGVu
KElLZXkoImZvbyIsIDEwMCwga1R5cGVWYWx1ZSksCisgICAgICAgICAgICAgICAgICAgIElLZXko
ImZvbyIsIDEwMCwga1R5cGVWYWx1ZSkpKTsKKyAgQVNTRVJUX0VRKElLZXkoImZvbyIsIDEwMCwg
a1R5cGVWYWx1ZSksCisgICAgICAgICAgICBTaG9ydGVuKElLZXkoImZvbyIsIDEwMCwga1R5cGVW
YWx1ZSksCisgICAgICAgICAgICAgICAgICAgIElLZXkoImZvbyIsIDEwMCwga1R5cGVEZWxldGlv
bikpKTsKKworICAvLyBXaGVuIHVzZXIga2V5cyBhcmUgbWlzb3JkZXJlZAorICBBU1NFUlRfRVEo
SUtleSgiZm9vIiwgMTAwLCBrVHlwZVZhbHVlKSwKKyAgICAgICAgICAgIFNob3J0ZW4oSUtleSgi
Zm9vIiwgMTAwLCBrVHlwZVZhbHVlKSwKKyAgICAgICAgICAgICAgICAgICAgSUtleSgiYmFyIiwg
OTksIGtUeXBlVmFsdWUpKSk7CisKKyAgLy8gV2hlbiB1c2VyIGtleXMgYXJlIGRpZmZlcmVudCwg
YnV0IGNvcnJlY3RseSBvcmRlcmVkCisgIEFTU0VSVF9FUShJS2V5KCJnIiwga01heFNlcXVlbmNl
TnVtYmVyLCBrVmFsdWVUeXBlRm9yU2VlayksCisgICAgICAgICAgICBTaG9ydGVuKElLZXkoImZv
byIsIDEwMCwga1R5cGVWYWx1ZSksCisgICAgICAgICAgICAgICAgICAgIElLZXkoImhlbGxvIiwg
MjAwLCBrVHlwZVZhbHVlKSkpOworCisgIC8vIFdoZW4gc3RhcnQgdXNlciBrZXkgaXMgcHJlZml4
IG9mIGxpbWl0IHVzZXIga2V5CisgIEFTU0VSVF9FUShJS2V5KCJmb28iLCAxMDAsIGtUeXBlVmFs
dWUpLAorICAgICAgICAgICAgU2hvcnRlbihJS2V5KCJmb28iLCAxMDAsIGtUeXBlVmFsdWUpLAor
ICAgICAgICAgICAgICAgICAgICBJS2V5KCJmb29iYXIiLCAyMDAsIGtUeXBlVmFsdWUpKSk7CisK
KyAgLy8gV2hlbiBsaW1pdCB1c2VyIGtleSBpcyBwcmVmaXggb2Ygc3RhcnQgdXNlciBrZXkKKyAg
QVNTRVJUX0VRKElLZXkoImZvb2JhciIsIDEwMCwga1R5cGVWYWx1ZSksCisgICAgICAgICAgICBT
aG9ydGVuKElLZXkoImZvb2JhciIsIDEwMCwga1R5cGVWYWx1ZSksCisgICAgICAgICAgICAgICAg
ICAgIElLZXkoImZvbyIsIDIwMCwga1R5cGVWYWx1ZSkpKTsKK30KKworVEVTVChGb3JtYXRUZXN0
LCBJbnRlcm5hbEtleVNob3J0ZXN0U3VjY2Vzc29yKSB7CisgIEFTU0VSVF9FUShJS2V5KCJnIiwg
a01heFNlcXVlbmNlTnVtYmVyLCBrVmFsdWVUeXBlRm9yU2VlayksCisgICAgICAgICAgICBTaG9y
dFN1Y2Nlc3NvcihJS2V5KCJmb28iLCAxMDAsIGtUeXBlVmFsdWUpKSk7CisgIEFTU0VSVF9FUShJ
S2V5KCJceGZmXHhmZiIsIDEwMCwga1R5cGVWYWx1ZSksCisgICAgICAgICAgICBTaG9ydFN1Y2Nl
c3NvcihJS2V5KCJceGZmXHhmZiIsIDEwMCwga1R5cGVWYWx1ZSkpKTsKK30KKworfSAgLy8gbmFt
ZXNwYWNlIGxldmVsZGIKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KSB7CisgIHJl
dHVybiBsZXZlbGRiOjp0ZXN0OjpSdW5BbGxUZXN0cygpOworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9maWxlbmFtZS5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xl
dmVsZGIvZGIvZmlsZW5hbWUuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2M0ZDQ5ZjY0ZWI2ZGZiZjlkMzc0MGNi
ZmRhM2Y2YWQyMThhNGY1MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xl
dmVsZGIvZGIvZmlsZW5hbWUuY2MKQEAgLTAsMCArMSwxMzkgQEAKKy8vIENvcHlyaWdodCAoYykg
MjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZp
bGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5j
bHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJkYi9maWxlbmFtZS5oIgorI2luY2x1ZGUgImRiL2Ri
Zm9ybWF0LmgiCisjaW5jbHVkZSAibGV2ZWxkYi9lbnYuaCIKKyNpbmNsdWRlICJ1dGlsL2xvZ2dp
bmcuaCIKKworbmFtZXNwYWNlIGxldmVsZGIgeworCisvLyBBIHV0aWxpdHkgcm91dGluZTogd3Jp
dGUgImRhdGEiIHRvIHRoZSBuYW1lZCBmaWxlIGFuZCBTeW5jKCkgaXQuCitleHRlcm4gU3RhdHVz
IFdyaXRlU3RyaW5nVG9GaWxlU3luYyhFbnYqIGVudiwgY29uc3QgU2xpY2UmIGRhdGEsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZm5hbWUp
OworCitzdGF0aWMgc3RkOjpzdHJpbmcgTWFrZUZpbGVOYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBu
YW1lLCB1aW50NjRfdCBudW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIqIHN1ZmZpeCkgeworICBjaGFyIGJ1ZlsxMDBdOworICBzbnByaW50ZihidWYsIHNp
emVvZihidWYpLCAiLyUwNmxsdS4lcyIsCisgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVk
IGxvbmcgbG9uZz4obnVtYmVyKSwKKyAgICAgICAgICAgc3VmZml4KTsKKyAgcmV0dXJuIG5hbWUg
KyBidWY7Cit9CisKK3N0ZDo6c3RyaW5nIExvZ0ZpbGVOYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBu
YW1lLCB1aW50NjRfdCBudW1iZXIpIHsKKyAgYXNzZXJ0KG51bWJlciA+IDApOworICByZXR1cm4g
TWFrZUZpbGVOYW1lKG5hbWUsIG51bWJlciwgImxvZyIpOworfQorCitzdGQ6OnN0cmluZyBUYWJs
ZUZpbGVOYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCB1aW50NjRfdCBudW1iZXIpIHsKKyAg
YXNzZXJ0KG51bWJlciA+IDApOworICByZXR1cm4gTWFrZUZpbGVOYW1lKG5hbWUsIG51bWJlciwg
InNzdCIpOworfQorCitzdGQ6OnN0cmluZyBEZXNjcmlwdG9yRmlsZU5hbWUoY29uc3Qgc3RkOjpz
dHJpbmcmIGRibmFtZSwgdWludDY0X3QgbnVtYmVyKSB7CisgIGFzc2VydChudW1iZXIgPiAwKTsK
KyAgY2hhciBidWZbMTAwXTsKKyAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIi9NQU5JRkVT
VC0lMDZsbHUiLAorICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KG51
bWJlcikpOworICByZXR1cm4gZGJuYW1lICsgYnVmOworfQorCitzdGQ6OnN0cmluZyBDdXJyZW50
RmlsZU5hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIGRibmFtZSkgeworICByZXR1cm4gZGJuYW1lICsg
Ii9DVVJSRU5UIjsKK30KKworc3RkOjpzdHJpbmcgTG9ja0ZpbGVOYW1lKGNvbnN0IHN0ZDo6c3Ry
aW5nJiBkYm5hbWUpIHsKKyAgcmV0dXJuIGRibmFtZSArICIvTE9DSyI7Cit9CisKK3N0ZDo6c3Ry
aW5nIFRlbXBGaWxlTmFtZShjb25zdCBzdGQ6OnN0cmluZyYgZGJuYW1lLCB1aW50NjRfdCBudW1i
ZXIpIHsKKyAgYXNzZXJ0KG51bWJlciA+IDApOworICByZXR1cm4gTWFrZUZpbGVOYW1lKGRibmFt
ZSwgbnVtYmVyLCAiZGJ0bXAiKTsKK30KKworc3RkOjpzdHJpbmcgSW5mb0xvZ0ZpbGVOYW1lKGNv
bnN0IHN0ZDo6c3RyaW5nJiBkYm5hbWUpIHsKKyAgcmV0dXJuIGRibmFtZSArICIvTE9HIjsKK30K
KworLy8gUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBvbGQgaW5mbyBsb2cgZmlsZSBmb3IgImRibmFt
ZSIuCitzdGQ6OnN0cmluZyBPbGRJbmZvTG9nRmlsZU5hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIGRi
bmFtZSkgeworICByZXR1cm4gZGJuYW1lICsgIi9MT0cub2xkIjsKK30KKworCisvLyBPd25lZCBm
aWxlbmFtZXMgaGF2ZSB0aGUgZm9ybToKKy8vICAgIGRibmFtZS9DVVJSRU5UCisvLyAgICBkYm5h
bWUvTE9DSworLy8gICAgZGJuYW1lL0xPRworLy8gICAgZGJuYW1lL0xPRy5vbGQKKy8vICAgIGRi
bmFtZS9NQU5JRkVTVC1bMC05XSsKKy8vICAgIGRibmFtZS9bMC05XSsuKGxvZ3xzc3QpCitib29s
IFBhcnNlRmlsZU5hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIGZuYW1lLAorICAgICAgICAgICAgICAg
ICAgIHVpbnQ2NF90KiBudW1iZXIsCisgICAgICAgICAgICAgICAgICAgRmlsZVR5cGUqIHR5cGUp
IHsKKyAgU2xpY2UgcmVzdChmbmFtZSk7CisgIGlmIChyZXN0ID09ICJDVVJSRU5UIikgeworICAg
ICpudW1iZXIgPSAwOworICAgICp0eXBlID0ga0N1cnJlbnRGaWxlOworICB9IGVsc2UgaWYgKHJl
c3QgPT0gIkxPQ0siKSB7CisgICAgKm51bWJlciA9IDA7CisgICAgKnR5cGUgPSBrREJMb2NrRmls
ZTsKKyAgfSBlbHNlIGlmIChyZXN0ID09ICJMT0ciIHx8IHJlc3QgPT0gIkxPRy5vbGQiKSB7Cisg
ICAgKm51bWJlciA9IDA7CisgICAgKnR5cGUgPSBrSW5mb0xvZ0ZpbGU7CisgIH0gZWxzZSBpZiAo
cmVzdC5zdGFydHNfd2l0aCgiTUFOSUZFU1QtIikpIHsKKyAgICByZXN0LnJlbW92ZV9wcmVmaXgo
c3RybGVuKCJNQU5JRkVTVC0iKSk7CisgICAgdWludDY0X3QgbnVtOworICAgIGlmICghQ29uc3Vt
ZURlY2ltYWxOdW1iZXIoJnJlc3QsICZudW0pKSB7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIGlmICghcmVzdC5lbXB0eSgpKSB7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgICp0eXBlID0ga0Rlc2NyaXB0b3JGaWxlOworICAgICpudW1iZXIgPSBudW07CisgIH0gZWxz
ZSB7CisgICAgLy8gQXZvaWQgc3RydG91bGwoKSB0byBrZWVwIGZpbGVuYW1lIGZvcm1hdCBpbmRl
cGVuZGVudCBvZiB0aGUKKyAgICAvLyBjdXJyZW50IGxvY2FsZQorICAgIHVpbnQ2NF90IG51bTsK
KyAgICBpZiAoIUNvbnN1bWVEZWNpbWFsTnVtYmVyKCZyZXN0LCAmbnVtKSkgeworICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICBTbGljZSBzdWZmaXggPSByZXN0OworICAgIGlmIChzdWZm
aXggPT0gU2xpY2UoIi5sb2ciKSkgeworICAgICAgKnR5cGUgPSBrTG9nRmlsZTsKKyAgICB9IGVs
c2UgaWYgKHN1ZmZpeCA9PSBTbGljZSgiLnNzdCIpKSB7CisgICAgICAqdHlwZSA9IGtUYWJsZUZp
bGU7CisgICAgfSBlbHNlIGlmIChzdWZmaXggPT0gU2xpY2UoIi5kYnRtcCIpKSB7CisgICAgICAq
dHlwZSA9IGtUZW1wRmlsZTsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICAqbnVtYmVyID0gbnVtOworICB9CisgIHJldHVybiB0cnVlOworfQorCitTdGF0dXMg
U2V0Q3VycmVudEZpbGUoRW52KiBlbnYsIGNvbnN0IHN0ZDo6c3RyaW5nJiBkYm5hbWUsCisgICAg
ICAgICAgICAgICAgICAgICAgdWludDY0X3QgZGVzY3JpcHRvcl9udW1iZXIpIHsKKyAgLy8gUmVt
b3ZlIGxlYWRpbmcgImRibmFtZS8iIGFuZCBhZGQgbmV3bGluZSB0byBtYW5pZmVzdCBmaWxlIG5h
bWUKKyAgc3RkOjpzdHJpbmcgbWFuaWZlc3QgPSBEZXNjcmlwdG9yRmlsZU5hbWUoZGJuYW1lLCBk
ZXNjcmlwdG9yX251bWJlcik7CisgIFNsaWNlIGNvbnRlbnRzID0gbWFuaWZlc3Q7CisgIGFzc2Vy
dChjb250ZW50cy5zdGFydHNfd2l0aChkYm5hbWUgKyAiLyIpKTsKKyAgY29udGVudHMucmVtb3Zl
X3ByZWZpeChkYm5hbWUuc2l6ZSgpICsgMSk7CisgIHN0ZDo6c3RyaW5nIHRtcCA9IFRlbXBGaWxl
TmFtZShkYm5hbWUsIGRlc2NyaXB0b3JfbnVtYmVyKTsKKyAgU3RhdHVzIHMgPSBXcml0ZVN0cmlu
Z1RvRmlsZVN5bmMoZW52LCBjb250ZW50cy5Ub1N0cmluZygpICsgIlxuIiwgdG1wKTsKKyAgaWYg
KHMub2soKSkgeworICAgIHMgPSBlbnYtPlJlbmFtZUZpbGUodG1wLCBDdXJyZW50RmlsZU5hbWUo
ZGJuYW1lKSk7CisgIH0KKyAgaWYgKCFzLm9rKCkpIHsKKyAgICBlbnYtPkRlbGV0ZUZpbGUodG1w
KTsKKyAgfQorICByZXR1cm4gczsKK30KKworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvZmlsZW5hbWUuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xldmVsZGIvZGIvZmlsZW5hbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNWQwOWIxMTQ2ODEw
NTMyNDc2MTc2MTY2NWJiOGRiNzJhYmY5NTQwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvbGV2ZWxkYi9kYi9maWxlbmFtZS5oCkBAIC0wLDAgKzEsODAgQEAKKy8vIENvcHly
aWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBB
VVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKy8vCisvLyBGaWxlIG5hbWVz
IHVzZWQgYnkgREIgY29kZQorCisjaWZuZGVmIFNUT1JBR0VfTEVWRUxEQl9EQl9GSUxFTkFNRV9I
XworI2RlZmluZSBTVE9SQUdFX0xFVkVMREJfREJfRklMRU5BTUVfSF8KKworI2luY2x1ZGUgPHN0
ZGludC5oPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlICJsZXZlbGRiL3NsaWNlLmgiCisj
aW5jbHVkZSAibGV2ZWxkYi9zdGF0dXMuaCIKKyNpbmNsdWRlICJwb3J0L3BvcnQuaCIKKworbmFt
ZXNwYWNlIGxldmVsZGIgeworCitjbGFzcyBFbnY7CisKK2VudW0gRmlsZVR5cGUgeworICBrTG9n
RmlsZSwKKyAga0RCTG9ja0ZpbGUsCisgIGtUYWJsZUZpbGUsCisgIGtEZXNjcmlwdG9yRmlsZSwK
KyAga0N1cnJlbnRGaWxlLAorICBrVGVtcEZpbGUsCisgIGtJbmZvTG9nRmlsZSAgLy8gRWl0aGVy
IHRoZSBjdXJyZW50IG9uZSwgb3IgYW4gb2xkIG9uZQorfTsKKworLy8gUmV0dXJuIHRoZSBuYW1l
IG9mIHRoZSBsb2cgZmlsZSB3aXRoIHRoZSBzcGVjaWZpZWQgbnVtYmVyCisvLyBpbiB0aGUgZGIg
bmFtZWQgYnkgImRibmFtZSIuICBUaGUgcmVzdWx0IHdpbGwgYmUgcHJlZml4ZWQgd2l0aAorLy8g
ImRibmFtZSIuCitleHRlcm4gc3RkOjpzdHJpbmcgTG9nRmlsZU5hbWUoY29uc3Qgc3RkOjpzdHJp
bmcmIGRibmFtZSwgdWludDY0X3QgbnVtYmVyKTsKKworLy8gUmV0dXJuIHRoZSBuYW1lIG9mIHRo
ZSBzc3RhYmxlIHdpdGggdGhlIHNwZWNpZmllZCBudW1iZXIKKy8vIGluIHRoZSBkYiBuYW1lZCBi
eSAiZGJuYW1lIi4gIFRoZSByZXN1bHQgd2lsbCBiZSBwcmVmaXhlZCB3aXRoCisvLyAiZGJuYW1l
Ii4KK2V4dGVybiBzdGQ6OnN0cmluZyBUYWJsZUZpbGVOYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBk
Ym5hbWUsIHVpbnQ2NF90IG51bWJlcik7CisKKy8vIFJldHVybiB0aGUgbmFtZSBvZiB0aGUgZGVz
Y3JpcHRvciBmaWxlIGZvciB0aGUgZGIgbmFtZWQgYnkKKy8vICJkYm5hbWUiIGFuZCB0aGUgc3Bl
Y2lmaWVkIGluY2FybmF0aW9uIG51bWJlci4gIFRoZSByZXN1bHQgd2lsbCBiZQorLy8gcHJlZml4
ZWQgd2l0aCAiZGJuYW1lIi4KK2V4dGVybiBzdGQ6OnN0cmluZyBEZXNjcmlwdG9yRmlsZU5hbWUo
Y29uc3Qgc3RkOjpzdHJpbmcmIGRibmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdWludDY0X3QgbnVtYmVyKTsKKworLy8gUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBj
dXJyZW50IGZpbGUuICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIG5hbWUKKy8vIG9mIHRoZSBjdXJy
ZW50IG1hbmlmZXN0IGZpbGUuICBUaGUgcmVzdWx0IHdpbGwgYmUgcHJlZml4ZWQgd2l0aAorLy8g
ImRibmFtZSIuCitleHRlcm4gc3RkOjpzdHJpbmcgQ3VycmVudEZpbGVOYW1lKGNvbnN0IHN0ZDo6
c3RyaW5nJiBkYm5hbWUpOworCisvLyBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGxvY2sgZmlsZSBm
b3IgdGhlIGRiIG5hbWVkIGJ5CisvLyAiZGJuYW1lIi4gIFRoZSByZXN1bHQgd2lsbCBiZSBwcmVm
aXhlZCB3aXRoICJkYm5hbWUiLgorZXh0ZXJuIHN0ZDo6c3RyaW5nIExvY2tGaWxlTmFtZShjb25z
dCBzdGQ6OnN0cmluZyYgZGJuYW1lKTsKKworLy8gUmV0dXJuIHRoZSBuYW1lIG9mIGEgdGVtcG9y
YXJ5IGZpbGUgb3duZWQgYnkgdGhlIGRiIG5hbWVkICJkYm5hbWUiLgorLy8gVGhlIHJlc3VsdCB3
aWxsIGJlIHByZWZpeGVkIHdpdGggImRibmFtZSIuCitleHRlcm4gc3RkOjpzdHJpbmcgVGVtcEZp
bGVOYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBkYm5hbWUsIHVpbnQ2NF90IG51bWJlcik7CisKKy8v
IFJldHVybiB0aGUgbmFtZSBvZiB0aGUgaW5mbyBsb2cgZmlsZSBmb3IgImRibmFtZSIuCitleHRl
cm4gc3RkOjpzdHJpbmcgSW5mb0xvZ0ZpbGVOYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiBkYm5hbWUp
OworCisvLyBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIG9sZCBpbmZvIGxvZyBmaWxlIGZvciAiZGJu
YW1lIi4KK2V4dGVybiBzdGQ6OnN0cmluZyBPbGRJbmZvTG9nRmlsZU5hbWUoY29uc3Qgc3RkOjpz
dHJpbmcmIGRibmFtZSk7CisKKy8vIElmIGZpbGVuYW1lIGlzIGEgbGV2ZWxkYiBmaWxlLCBzdG9y
ZSB0aGUgdHlwZSBvZiB0aGUgZmlsZSBpbiAqdHlwZS4KKy8vIFRoZSBudW1iZXIgZW5jb2RlZCBp
biB0aGUgZmlsZW5hbWUgaXMgc3RvcmVkIGluICpudW1iZXIuICBJZiB0aGUKKy8vIGZpbGVuYW1l
IHdhcyBzdWNjZXNzZnVsbHkgcGFyc2VkLCByZXR1cm5zIHRydWUuICBFbHNlIHJldHVybiBmYWxz
ZS4KK2V4dGVybiBib29sIFBhcnNlRmlsZU5hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVuYW1l
LAorICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCogbnVtYmVyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICBGaWxlVHlwZSogdHlwZSk7CisKKy8vIE1ha2UgdGhlIENVUlJFTlQg
ZmlsZSBwb2ludCB0byB0aGUgZGVzY3JpcHRvciBmaWxlIHdpdGggdGhlCisvLyBzcGVjaWZpZWQg
bnVtYmVyLgorZXh0ZXJuIFN0YXR1cyBTZXRDdXJyZW50RmlsZShFbnYqIGVudiwgY29uc3Qgc3Rk
OjpzdHJpbmcmIGRibmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3Qg
ZGVzY3JpcHRvcl9udW1iZXIpOworCisKK30gIC8vIG5hbWVzcGFjZSBsZXZlbGRiCisKKyNlbmRp
ZiAgLy8gU1RPUkFHRV9MRVZFTERCX0RCX0ZJTEVOQU1FX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2ZpbGVuYW1lX3Rlc3QuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9sZXZlbGRiL2RiL2ZpbGVuYW1lX3Rlc3QuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDczNTNkNmM5YWFmNjk5
YmU4MmZjNjMyY2RiOGYwMGY4ZGFlNTBkMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xldmVsZGIvZGIvZmlsZW5hbWVfdGVzdC5jYwpAQCAtMCwwICsxLDEyMiBAQAorLy8g
Q29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUg
dGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgorCisjaW5jbHVkZSAi
ZGIvZmlsZW5hbWUuaCIKKworI2luY2x1ZGUgImRiL2RiZm9ybWF0LmgiCisjaW5jbHVkZSAicG9y
dC9wb3J0LmgiCisjaW5jbHVkZSAidXRpbC9sb2dnaW5nLmgiCisjaW5jbHVkZSAidXRpbC90ZXN0
aGFybmVzcy5oIgorCituYW1lc3BhY2UgbGV2ZWxkYiB7CisKK2NsYXNzIEZpbGVOYW1lVGVzdCB7
IH07CisKK1RFU1QoRmlsZU5hbWVUZXN0LCBQYXJzZSkgeworICBTbGljZSBkYjsKKyAgRmlsZVR5
cGUgdHlwZTsKKyAgdWludDY0X3QgbnVtYmVyOworCisgIC8vIFN1Y2Nlc3NmdWwgcGFyc2VzCisg
IHN0YXRpYyBzdHJ1Y3QgeworICAgIGNvbnN0IGNoYXIqIGZuYW1lOworICAgIHVpbnQ2NF90IG51
bWJlcjsKKyAgICBGaWxlVHlwZSB0eXBlOworICB9IGNhc2VzW10gPSB7CisgICAgeyAiMTAwLmxv
ZyIsICAgICAgICAgICAgMTAwLCAgIGtMb2dGaWxlIH0sCisgICAgeyAiMC5sb2ciLCAgICAgICAg
ICAgICAgMCwgICAgIGtMb2dGaWxlIH0sCisgICAgeyAiMC5zc3QiLCAgICAgICAgICAgICAgMCwg
ICAgIGtUYWJsZUZpbGUgfSwKKyAgICB7ICJDVVJSRU5UIiwgICAgICAgICAgICAwLCAgICAga0N1
cnJlbnRGaWxlIH0sCisgICAgeyAiTE9DSyIsICAgICAgICAgICAgICAgMCwgICAgIGtEQkxvY2tG
aWxlIH0sCisgICAgeyAiTUFOSUZFU1QtMiIsICAgICAgICAgMiwgICAgIGtEZXNjcmlwdG9yRmls
ZSB9LAorICAgIHsgIk1BTklGRVNULTciLCAgICAgICAgIDcsICAgICBrRGVzY3JpcHRvckZpbGUg
fSwKKyAgICB7ICJMT0ciLCAgICAgICAgICAgICAgICAwLCAgICAga0luZm9Mb2dGaWxlIH0sCisg
ICAgeyAiTE9HLm9sZCIsICAgICAgICAgICAgMCwgICAgIGtJbmZvTG9nRmlsZSB9LAorICAgIHsg
IjE4NDQ2NzQ0MDczNzA5NTUxNjE1LmxvZyIsIDE4NDQ2NzQ0MDczNzA5NTUxNjE1dWxsLCBrTG9n
RmlsZSB9LAorICB9OworICBmb3IgKGludCBpID0gMDsgaSA8IHNpemVvZihjYXNlcykgLyBzaXpl
b2YoY2FzZXNbMF0pOyBpKyspIHsKKyAgICBzdGQ6OnN0cmluZyBmID0gY2FzZXNbaV0uZm5hbWU7
CisgICAgQVNTRVJUX1RSVUUoUGFyc2VGaWxlTmFtZShmLCAmbnVtYmVyLCAmdHlwZSkpIDw8IGY7
CisgICAgQVNTRVJUX0VRKGNhc2VzW2ldLnR5cGUsIHR5cGUpIDw8IGY7CisgICAgQVNTRVJUX0VR
KGNhc2VzW2ldLm51bWJlciwgbnVtYmVyKSA8PCBmOworICB9CisKKyAgLy8gRXJyb3JzCisgIHN0
YXRpYyBjb25zdCBjaGFyKiBlcnJvcnNbXSA9IHsKKyAgICAiIiwKKyAgICAiZm9vIiwKKyAgICAi
Zm9vLWR4LTEwMC5sb2ciLAorICAgICIubG9nIiwKKyAgICAiIiwKKyAgICAibWFuaWZlc3QiLAor
ICAgICJDVVJSRU4iLAorICAgICJDVVJSRU5UWCIsCisgICAgIk1BTklGRVMiLAorICAgICJNQU5J
RkVTVCIsCisgICAgIk1BTklGRVNULSIsCisgICAgIlhNQU5JRkVTVC0zIiwKKyAgICAiTUFOSUZF
U1QtM3giLAorICAgICJMT0MiLAorICAgICJMT0NLeCIsCisgICAgIkxPIiwKKyAgICAiTE9HeCIs
CisgICAgIjE4NDQ2NzQ0MDczNzA5NTUxNjE2LmxvZyIsCisgICAgIjE4NDQ2NzQ0MDczNzA5NTUx
NjE1MC5sb2ciLAorICAgICIxMDAiLAorICAgICIxMDAuIiwKKyAgICAiMTAwLmxvcCIKKyAgfTsK
KyAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplb2YoZXJyb3JzKSAvIHNpemVvZihlcnJvcnNbMF0p
OyBpKyspIHsKKyAgICBzdGQ6OnN0cmluZyBmID0gZXJyb3JzW2ldOworICAgIEFTU0VSVF9UUlVF
KCFQYXJzZUZpbGVOYW1lKGYsICZudW1iZXIsICZ0eXBlKSkgPDwgZjsKKyAgfTsKK30KKworVEVT
VChGaWxlTmFtZVRlc3QsIENvbnN0cnVjdGlvbikgeworICB1aW50NjRfdCBudW1iZXI7CisgIEZp
bGVUeXBlIHR5cGU7CisgIHN0ZDo6c3RyaW5nIGZuYW1lOworCisgIGZuYW1lID0gQ3VycmVudEZp
bGVOYW1lKCJmb28iKTsKKyAgQVNTRVJUX0VRKCJmb28vIiwgc3RkOjpzdHJpbmcoZm5hbWUuZGF0
YSgpLCA0KSk7CisgIEFTU0VSVF9UUlVFKFBhcnNlRmlsZU5hbWUoZm5hbWUuY19zdHIoKSArIDQs
ICZudW1iZXIsICZ0eXBlKSk7CisgIEFTU0VSVF9FUSgwLCBudW1iZXIpOworICBBU1NFUlRfRVEo
a0N1cnJlbnRGaWxlLCB0eXBlKTsKKworICBmbmFtZSA9IExvY2tGaWxlTmFtZSgiZm9vIik7Cisg
IEFTU0VSVF9FUSgiZm9vLyIsIHN0ZDo6c3RyaW5nKGZuYW1lLmRhdGEoKSwgNCkpOworICBBU1NF
UlRfVFJVRShQYXJzZUZpbGVOYW1lKGZuYW1lLmNfc3RyKCkgKyA0LCAmbnVtYmVyLCAmdHlwZSkp
OworICBBU1NFUlRfRVEoMCwgbnVtYmVyKTsKKyAgQVNTRVJUX0VRKGtEQkxvY2tGaWxlLCB0eXBl
KTsKKworICBmbmFtZSA9IExvZ0ZpbGVOYW1lKCJmb28iLCAxOTIpOworICBBU1NFUlRfRVEoImZv
by8iLCBzdGQ6OnN0cmluZyhmbmFtZS5kYXRhKCksIDQpKTsKKyAgQVNTRVJUX1RSVUUoUGFyc2VG
aWxlTmFtZShmbmFtZS5jX3N0cigpICsgNCwgJm51bWJlciwgJnR5cGUpKTsKKyAgQVNTRVJUX0VR
KDE5MiwgbnVtYmVyKTsKKyAgQVNTRVJUX0VRKGtMb2dGaWxlLCB0eXBlKTsKKworICBmbmFtZSA9
IFRhYmxlRmlsZU5hbWUoImJhciIsIDIwMCk7CisgIEFTU0VSVF9FUSgiYmFyLyIsIHN0ZDo6c3Ry
aW5nKGZuYW1lLmRhdGEoKSwgNCkpOworICBBU1NFUlRfVFJVRShQYXJzZUZpbGVOYW1lKGZuYW1l
LmNfc3RyKCkgKyA0LCAmbnVtYmVyLCAmdHlwZSkpOworICBBU1NFUlRfRVEoMjAwLCBudW1iZXIp
OworICBBU1NFUlRfRVEoa1RhYmxlRmlsZSwgdHlwZSk7CisKKyAgZm5hbWUgPSBEZXNjcmlwdG9y
RmlsZU5hbWUoImJhciIsIDEwMCk7CisgIEFTU0VSVF9FUSgiYmFyLyIsIHN0ZDo6c3RyaW5nKGZu
YW1lLmRhdGEoKSwgNCkpOworICBBU1NFUlRfVFJVRShQYXJzZUZpbGVOYW1lKGZuYW1lLmNfc3Ry
KCkgKyA0LCAmbnVtYmVyLCAmdHlwZSkpOworICBBU1NFUlRfRVEoMTAwLCBudW1iZXIpOworICBB
U1NFUlRfRVEoa0Rlc2NyaXB0b3JGaWxlLCB0eXBlKTsKKworICBmbmFtZSA9IFRlbXBGaWxlTmFt
ZSgidG1wIiwgOTk5KTsKKyAgQVNTRVJUX0VRKCJ0bXAvIiwgc3RkOjpzdHJpbmcoZm5hbWUuZGF0
YSgpLCA0KSk7CisgIEFTU0VSVF9UUlVFKFBhcnNlRmlsZU5hbWUoZm5hbWUuY19zdHIoKSArIDQs
ICZudW1iZXIsICZ0eXBlKSk7CisgIEFTU0VSVF9FUSg5OTksIG51bWJlcik7CisgIEFTU0VSVF9F
UShrVGVtcEZpbGUsIHR5cGUpOworfQorCit9ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgorCitpbnQg
bWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpIHsKKyAgcmV0dXJuIGxldmVsZGI6OnRlc3Q6OlJ1
bkFsbFRlc3RzKCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2Ri
L2xldmVsZGJfbWFpbi5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvbGV2ZWxkYl9t
YWluLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjk5NWQ3NjEwN2ExNmVmZDk2NzdlYzZkMmMxMjVjMDQ1MDJmY2Vj
M2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2xldmVs
ZGJfbWFpbi5jYwpAQCAtMCwwICsxLDIzOCBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBM
ZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFt
ZXMgb2YgY29udHJpYnV0b3JzLgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJkYi9k
YmZvcm1hdC5oIgorI2luY2x1ZGUgImRiL2ZpbGVuYW1lLmgiCisjaW5jbHVkZSAiZGIvbG9nX3Jl
YWRlci5oIgorI2luY2x1ZGUgImRiL3ZlcnNpb25fZWRpdC5oIgorI2luY2x1ZGUgImRiL3dyaXRl
X2JhdGNoX2ludGVybmFsLmgiCisjaW5jbHVkZSAibGV2ZWxkYi9lbnYuaCIKKyNpbmNsdWRlICJs
ZXZlbGRiL2l0ZXJhdG9yLmgiCisjaW5jbHVkZSAibGV2ZWxkYi9vcHRpb25zLmgiCisjaW5jbHVk
ZSAibGV2ZWxkYi9zdGF0dXMuaCIKKyNpbmNsdWRlICJsZXZlbGRiL3RhYmxlLmgiCisjaW5jbHVk
ZSAibGV2ZWxkYi93cml0ZV9iYXRjaC5oIgorI2luY2x1ZGUgInV0aWwvbG9nZ2luZy5oIgorCitu
YW1lc3BhY2UgbGV2ZWxkYiB7CisKK25hbWVzcGFjZSB7CisKK2Jvb2wgR3Vlc3NUeXBlKGNvbnN0
IHN0ZDo6c3RyaW5nJiBmbmFtZSwgRmlsZVR5cGUqIHR5cGUpIHsKKyAgc2l6ZV90IHBvcyA9IGZu
YW1lLnJmaW5kKCcvJyk7CisgIHN0ZDo6c3RyaW5nIGJhc2VuYW1lOworICBpZiAocG9zID09IHN0
ZDo6c3RyaW5nOjpucG9zKSB7CisgICAgYmFzZW5hbWUgPSBmbmFtZTsKKyAgfSBlbHNlIHsKKyAg
ICBiYXNlbmFtZSA9IHN0ZDo6c3RyaW5nKGZuYW1lLmRhdGEoKSArIHBvcyArIDEsIGZuYW1lLnNp
emUoKSAtIHBvcyAtIDEpOworICB9CisgIHVpbnQ2NF90IGlnbm9yZWQ7CisgIHJldHVybiBQYXJz
ZUZpbGVOYW1lKGJhc2VuYW1lLCAmaWdub3JlZCwgdHlwZSk7Cit9CisKKy8vIE5vdGlmaWVkIHdo
ZW4gbG9nIHJlYWRlciBlbmNvdW50ZXJzIGNvcnJ1cHRpb24uCitjbGFzcyBDb3JydXB0aW9uUmVw
b3J0ZXIgOiBwdWJsaWMgbG9nOjpSZWFkZXI6OlJlcG9ydGVyIHsKKyBwdWJsaWM6CisgIHZpcnR1
YWwgdm9pZCBDb3JydXB0aW9uKHNpemVfdCBieXRlcywgY29uc3QgU3RhdHVzJiBzdGF0dXMpIHsK
KyAgICBwcmludGYoImNvcnJ1cHRpb246ICVkIGJ5dGVzOyAlc1xuIiwKKyAgICAgICAgICAgIHN0
YXRpY19jYXN0PGludD4oYnl0ZXMpLAorICAgICAgICAgICAgc3RhdHVzLlRvU3RyaW5nKCkuY19z
dHIoKSk7CisgIH0KK307CisKKy8vIFByaW50IGNvbnRlbnRzIG9mIGEgbG9nIGZpbGUuICgqZnVu
YykoKSBpcyBjYWxsZWQgb24gZXZlcnkgcmVjb3JkLgorYm9vbCBQcmludExvZ0NvbnRlbnRzKEVu
diogZW52LCBjb25zdCBzdGQ6OnN0cmluZyYgZm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAg
dm9pZCAoKmZ1bmMpKFNsaWNlKSkgeworICBTZXF1ZW50aWFsRmlsZSogZmlsZTsKKyAgU3RhdHVz
IHMgPSBlbnYtPk5ld1NlcXVlbnRpYWxGaWxlKGZuYW1lLCAmZmlsZSk7CisgIGlmICghcy5vaygp
KSB7CisgICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgcy5Ub1N0cmluZygpLmNfc3RyKCkpOwor
ICAgIHJldHVybiBmYWxzZTsKKyAgfQorICBDb3JydXB0aW9uUmVwb3J0ZXIgcmVwb3J0ZXI7Cisg
IGxvZzo6UmVhZGVyIHJlYWRlcihmaWxlLCAmcmVwb3J0ZXIsIHRydWUsIDApOworICBTbGljZSBy
ZWNvcmQ7CisgIHN0ZDo6c3RyaW5nIHNjcmF0Y2g7CisgIHdoaWxlIChyZWFkZXIuUmVhZFJlY29y
ZCgmcmVjb3JkLCAmc2NyYXRjaCkpIHsKKyAgICBwcmludGYoIi0tLSBvZmZzZXQgJWxsdTsgIiwK
KyAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihyZWFkZXIuTGFzdFJl
Y29yZE9mZnNldCgpKSk7CisgICAgKCpmdW5jKShyZWNvcmQpOworICB9CisgIGRlbGV0ZSBmaWxl
OworICByZXR1cm4gdHJ1ZTsKK30KKworLy8gQ2FsbGVkIG9uIGV2ZXJ5IGl0ZW0gZm91bmQgaW4g
YSBXcml0ZUJhdGNoLgorY2xhc3MgV3JpdGVCYXRjaEl0ZW1QcmludGVyIDogcHVibGljIFdyaXRl
QmF0Y2g6OkhhbmRsZXIgeworIHB1YmxpYzoKKyAgdWludDY0X3Qgb2Zmc2V0XzsKKyAgdWludDY0
X3Qgc2VxdWVuY2VfOworCisgIHZpcnR1YWwgdm9pZCBQdXQoY29uc3QgU2xpY2UmIGtleSwgY29u
c3QgU2xpY2UmIHZhbHVlKSB7CisgICAgcHJpbnRmKCIgIHB1dCAnJXMnICclcydcbiIsCisgICAg
ICAgICAgIEVzY2FwZVN0cmluZyhrZXkpLmNfc3RyKCksCisgICAgICAgICAgIEVzY2FwZVN0cmlu
Zyh2YWx1ZSkuY19zdHIoKSk7CisgIH0KKyAgdmlydHVhbCB2b2lkIERlbGV0ZShjb25zdCBTbGlj
ZSYga2V5KSB7CisgICAgcHJpbnRmKCIgIGRlbCAnJXMnXG4iLAorICAgICAgICAgICBFc2NhcGVT
dHJpbmcoa2V5KS5jX3N0cigpKTsKKyAgfQorfTsKKworCisvLyBDYWxsZWQgb24gZXZlcnkgbG9n
IHJlY29yZCAoZWFjaCBvbmUgb2Ygd2hpY2ggaXMgYSBXcml0ZUJhdGNoKQorLy8gZm91bmQgaW4g
YSBrTG9nRmlsZS4KK3N0YXRpYyB2b2lkIFdyaXRlQmF0Y2hQcmludGVyKFNsaWNlIHJlY29yZCkg
eworICBpZiAocmVjb3JkLnNpemUoKSA8IDEyKSB7CisgICAgcHJpbnRmKCJsb2cgcmVjb3JkIGxl
bmd0aCAlZCBpcyB0b28gc21hbGxcbiIsCisgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4ocmVj
b3JkLnNpemUoKSkpOworICAgIHJldHVybjsKKyAgfQorICBXcml0ZUJhdGNoIGJhdGNoOworICBX
cml0ZUJhdGNoSW50ZXJuYWw6OlNldENvbnRlbnRzKCZiYXRjaCwgcmVjb3JkKTsKKyAgcHJpbnRm
KCJzZXF1ZW5jZSAlbGx1XG4iLAorICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBs
b25nPihXcml0ZUJhdGNoSW50ZXJuYWw6OlNlcXVlbmNlKCZiYXRjaCkpKTsKKyAgV3JpdGVCYXRj
aEl0ZW1QcmludGVyIGJhdGNoX2l0ZW1fcHJpbnRlcjsKKyAgU3RhdHVzIHMgPSBiYXRjaC5JdGVy
YXRlKCZiYXRjaF9pdGVtX3ByaW50ZXIpOworICBpZiAoIXMub2soKSkgeworICAgIHByaW50Zigi
ICBlcnJvcjogJXNcbiIsIHMuVG9TdHJpbmcoKS5jX3N0cigpKTsKKyAgfQorfQorCitib29sIER1
bXBMb2coRW52KiBlbnYsIGNvbnN0IHN0ZDo6c3RyaW5nJiBmbmFtZSkgeworICByZXR1cm4gUHJp
bnRMb2dDb250ZW50cyhlbnYsIGZuYW1lLCBXcml0ZUJhdGNoUHJpbnRlcik7Cit9CisKKy8vIENh
bGxlZCBvbiBldmVyeSBsb2cgcmVjb3JkIChlYWNoIG9uZSBvZiB3aGljaCBpcyBhIFdyaXRlQmF0
Y2gpCisvLyBmb3VuZCBpbiBhIGtEZXNjcmlwdG9yRmlsZS4KK3N0YXRpYyB2b2lkIFZlcnNpb25F
ZGl0UHJpbnRlcihTbGljZSByZWNvcmQpIHsKKyAgVmVyc2lvbkVkaXQgZWRpdDsKKyAgU3RhdHVz
IHMgPSBlZGl0LkRlY29kZUZyb20ocmVjb3JkKTsKKyAgaWYgKCFzLm9rKCkpIHsKKyAgICBwcmlu
dGYoIiVzXG4iLCBzLlRvU3RyaW5nKCkuY19zdHIoKSk7CisgICAgcmV0dXJuOworICB9CisgIHBy
aW50ZigiJXMiLCBlZGl0LkRlYnVnU3RyaW5nKCkuY19zdHIoKSk7Cit9CisKK2Jvb2wgRHVtcERl
c2NyaXB0b3IoRW52KiBlbnYsIGNvbnN0IHN0ZDo6c3RyaW5nJiBmbmFtZSkgeworICByZXR1cm4g
UHJpbnRMb2dDb250ZW50cyhlbnYsIGZuYW1lLCBWZXJzaW9uRWRpdFByaW50ZXIpOworfQorCiti
b29sIER1bXBUYWJsZShFbnYqIGVudiwgY29uc3Qgc3RkOjpzdHJpbmcmIGZuYW1lKSB7CisgIHVp
bnQ2NF90IGZpbGVfc2l6ZTsKKyAgUmFuZG9tQWNjZXNzRmlsZSogZmlsZSA9IE5VTEw7CisgIFRh
YmxlKiB0YWJsZSA9IE5VTEw7CisgIFN0YXR1cyBzID0gZW52LT5HZXRGaWxlU2l6ZShmbmFtZSwg
JmZpbGVfc2l6ZSk7CisgIGlmIChzLm9rKCkpIHsKKyAgICBzID0gZW52LT5OZXdSYW5kb21BY2Nl
c3NGaWxlKGZuYW1lLCAmZmlsZSk7CisgIH0KKyAgaWYgKHMub2soKSkgeworICAgIC8vIFdlIHVz
ZSB0aGUgZGVmYXVsdCBjb21wYXJhdG9yLCB3aGljaCBtYXkgb3IgbWF5IG5vdCBtYXRjaCB0aGUK
KyAgICAvLyBjb21wYXJhdG9yIHVzZWQgaW4gdGhpcyBkYXRhYmFzZS4gSG93ZXZlciB0aGlzIHNo
b3VsZCBub3QgY2F1c2UKKyAgICAvLyBwcm9ibGVtcyBzaW5jZSB3ZSBvbmx5IHVzZSBUYWJsZSBv
cGVyYXRpb25zIHRoYXQgZG8gbm90IHJlcXVpcmUKKyAgICAvLyBhbnkgY29tcGFyaXNvbnMuICBJ
biBwYXJ0aWN1bGFyLCB3ZSBkbyBub3QgY2FsbCBTZWVrIG9yIFByZXYuCisgICAgcyA9IFRhYmxl
OjpPcGVuKE9wdGlvbnMoKSwgZmlsZSwgZmlsZV9zaXplLCAmdGFibGUpOworICB9CisgIGlmICgh
cy5vaygpKSB7CisgICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgcy5Ub1N0cmluZygpLmNfc3Ry
KCkpOworICAgIGRlbGV0ZSB0YWJsZTsKKyAgICBkZWxldGUgZmlsZTsKKyAgICByZXR1cm4gZmFs
c2U7CisgIH0KKworICBSZWFkT3B0aW9ucyBybzsKKyAgcm8uZmlsbF9jYWNoZSA9IGZhbHNlOwor
ICBJdGVyYXRvciogaXRlciA9IHRhYmxlLT5OZXdJdGVyYXRvcihybyk7CisgIGZvciAoaXRlci0+
U2Vla1RvRmlyc3QoKTsgaXRlci0+VmFsaWQoKTsgaXRlci0+TmV4dCgpKSB7CisgICAgUGFyc2Vk
SW50ZXJuYWxLZXkga2V5OworICAgIGlmICghUGFyc2VJbnRlcm5hbEtleShpdGVyLT5rZXkoKSwg
JmtleSkpIHsKKyAgICAgIHByaW50ZigiYmFka2V5ICclcycgPT4gJyVzJ1xuIiwKKyAgICAgICAg
ICAgICBFc2NhcGVTdHJpbmcoaXRlci0+a2V5KCkpLmNfc3RyKCksCisgICAgICAgICAgICAgRXNj
YXBlU3RyaW5nKGl0ZXItPnZhbHVlKCkpLmNfc3RyKCkpOworICAgIH0gZWxzZSB7CisgICAgICBj
aGFyIGtidWZbMjBdOworICAgICAgY29uc3QgY2hhciogdHlwZTsKKyAgICAgIGlmIChrZXkudHlw
ZSA9PSBrVHlwZURlbGV0aW9uKSB7CisgICAgICAgIHR5cGUgPSAiZGVsIjsKKyAgICAgIH0gZWxz
ZSBpZiAoa2V5LnR5cGUgPT0ga1R5cGVWYWx1ZSkgeworICAgICAgICB0eXBlID0gInZhbCI7Cisg
ICAgICB9IGVsc2UgeworICAgICAgICBzbnByaW50ZihrYnVmLCBzaXplb2Yoa2J1ZiksICIlZCIs
IHN0YXRpY19jYXN0PGludD4oa2V5LnR5cGUpKTsKKyAgICAgICAgdHlwZSA9IGtidWY7CisgICAg
ICB9CisgICAgICBwcmludGYoIiclcycgQCAlOGxsdSA6ICVzID0+ICclcydcbiIsCisgICAgICAg
ICAgICAgRXNjYXBlU3RyaW5nKGtleS51c2VyX2tleSkuY19zdHIoKSwKKyAgICAgICAgICAgICBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KGtleS5zZXF1ZW5jZSksCisgICAgICAgICAg
ICAgdHlwZSwKKyAgICAgICAgICAgICBFc2NhcGVTdHJpbmcoaXRlci0+dmFsdWUoKSkuY19zdHIo
KSk7CisgICAgfQorICB9CisgIHMgPSBpdGVyLT5zdGF0dXMoKTsKKyAgaWYgKCFzLm9rKCkpIHsK
KyAgICBwcmludGYoIml0ZXJhdG9yIGVycm9yOiAlc1xuIiwgcy5Ub1N0cmluZygpLmNfc3RyKCkp
OworICB9CisKKyAgZGVsZXRlIGl0ZXI7CisgIGRlbGV0ZSB0YWJsZTsKKyAgZGVsZXRlIGZpbGU7
CisgIHJldHVybiB0cnVlOworfQorCitib29sIER1bXBGaWxlKEVudiogZW52LCBjb25zdCBzdGQ6
OnN0cmluZyYgZm5hbWUpIHsKKyAgRmlsZVR5cGUgZnR5cGU7CisgIGlmICghR3Vlc3NUeXBlKGZu
YW1lLCAmZnR5cGUpKSB7CisgICAgZnByaW50ZihzdGRlcnIsICIlczogdW5rbm93biBmaWxlIHR5
cGVcbiIsIGZuYW1lLmNfc3RyKCkpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICBzd2l0Y2gg
KGZ0eXBlKSB7CisgICAgY2FzZSBrTG9nRmlsZTogICAgICAgICByZXR1cm4gRHVtcExvZyhlbnYs
IGZuYW1lKTsKKyAgICBjYXNlIGtEZXNjcmlwdG9yRmlsZTogIHJldHVybiBEdW1wRGVzY3JpcHRv
cihlbnYsIGZuYW1lKTsKKyAgICBjYXNlIGtUYWJsZUZpbGU6ICAgICAgIHJldHVybiBEdW1wVGFi
bGUoZW52LCBmbmFtZSk7CisKKyAgICBkZWZhdWx0OiB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwg
IiVzOiBub3QgYSBkdW1wLWFibGUgZmlsZSB0eXBlXG4iLCBmbmFtZS5jX3N0cigpKTsKKyAgICAg
IGJyZWFrOworICAgIH0KKyAgfQorICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSGFuZGxlRHVt
cENvbW1hbmQoRW52KiBlbnYsIGNoYXIqKiBmaWxlcywgaW50IG51bSkgeworICBib29sIG9rID0g
dHJ1ZTsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW07IGkrKykgeworICAgIG9rICY9IER1bXBG
aWxlKGVudiwgZmlsZXNbaV0pOworICB9CisgIHJldHVybiBvazsKK30KKworfQorfSAgLy8gbmFt
ZXNwYWNlIGxldmVsZGIKKworc3RhdGljIHZvaWQgVXNhZ2UoKSB7CisgIGZwcmludGYoCisgICAg
ICBzdGRlcnIsCisgICAgICAiVXNhZ2U6IGxldmVsZGJ1dGlsIGNvbW1hbmQuLi5cbiIKKyAgICAg
ICIgICBkdW1wIGZpbGVzLi4uICAgICAgICAgLS0gZHVtcCBjb250ZW50cyBvZiBzcGVjaWZpZWQg
ZmlsZXNcbiIKKyAgICAgICk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikg
eworICBsZXZlbGRiOjpFbnYqIGVudiA9IGxldmVsZGI6OkVudjo6RGVmYXVsdCgpOworICBib29s
IG9rID0gdHJ1ZTsKKyAgaWYgKGFyZ2MgPCAyKSB7CisgICAgVXNhZ2UoKTsKKyAgICBvayA9IGZh
bHNlOworICB9IGVsc2UgeworICAgIHN0ZDo6c3RyaW5nIGNvbW1hbmQgPSBhcmd2WzFdOworICAg
IGlmIChjb21tYW5kID09ICJkdW1wIikgeworICAgICAgb2sgPSBsZXZlbGRiOjpIYW5kbGVEdW1w
Q29tbWFuZChlbnYsIGFyZ3YrMiwgYXJnYy0yKTsKKyAgICB9IGVsc2UgeworICAgICAgVXNhZ2Uo
KTsKKyAgICAgIG9rID0gZmFsc2U7CisgICAgfQorICB9CisgIHJldHVybiAob2sgPyAwIDogMSk7
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2xvZ19mb3JtYXQu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvbG9nX2Zvcm1hdC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjI2OTBjYjk3ODllZTYzZTg1MjYwNTAwYTY3MzZlYzMwMmQyMmY5YjcKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2xvZ19mb3JtYXQuaApAQCAtMCwwICsx
LDM1IEBACisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCisv
LworLy8gTG9nIGZvcm1hdCBpbmZvcm1hdGlvbiBzaGFyZWQgYnkgcmVhZGVyIGFuZCB3cml0ZXIu
CisvLyBTZWUgLi4vZG9jL2xvZ19mb3JtYXQudHh0IGZvciBtb3JlIGRldGFpbC4KKworI2lmbmRl
ZiBTVE9SQUdFX0xFVkVMREJfREJfTE9HX0ZPUk1BVF9IXworI2RlZmluZSBTVE9SQUdFX0xFVkVM
REJfREJfTE9HX0ZPUk1BVF9IXworCituYW1lc3BhY2UgbGV2ZWxkYiB7CituYW1lc3BhY2UgbG9n
IHsKKworZW51bSBSZWNvcmRUeXBlIHsKKyAgLy8gWmVybyBpcyByZXNlcnZlZCBmb3IgcHJlYWxs
b2NhdGVkIGZpbGVzCisgIGtaZXJvVHlwZSA9IDAsCisKKyAga0Z1bGxUeXBlID0gMSwKKworICAv
LyBGb3IgZnJhZ21lbnRzCisgIGtGaXJzdFR5cGUgPSAyLAorICBrTWlkZGxlVHlwZSA9IDMsCisg
IGtMYXN0VHlwZSA9IDQKK307CitzdGF0aWMgY29uc3QgaW50IGtNYXhSZWNvcmRUeXBlID0ga0xh
c3RUeXBlOworCitzdGF0aWMgY29uc3QgaW50IGtCbG9ja1NpemUgPSAzMjc2ODsKKworLy8gSGVh
ZGVyIGlzIGNoZWNrc3VtICg0IGJ5dGVzKSwgdHlwZSAoMSBieXRlKSwgbGVuZ3RoICgyIGJ5dGVz
KS4KK3N0YXRpYyBjb25zdCBpbnQga0hlYWRlclNpemUgPSA0ICsgMSArIDI7CisKK30gIC8vIG5h
bWVzcGFjZSBsb2cKK30gIC8vIG5hbWVzcGFjZSBsZXZlbGRiCisKKyNlbmRpZiAgLy8gU1RPUkFH
RV9MRVZFTERCX0RCX0xPR19GT1JNQVRfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xldmVsZGIvZGIvbG9nX3JlYWRlci5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIv
bG9nX3JlYWRlci5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMzVmMTE1YWFkYWMyODA1NWIxNmZjZTZmMTMzYmQ1
MTQ4ZWNlYzE2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9k
Yi9sb2dfcmVhZGVyLmNjCkBAIC0wLDAgKzEsMjU5IEBACisvLyBDb3B5cmlnaHQgKGMpIDIwMTEg
VGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZv
ciBuYW1lcyBvZiBjb250cmlidXRvcnMuCisKKyNpbmNsdWRlICJkYi9sb2dfcmVhZGVyLmgiCisK
KyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgImxldmVsZGIvZW52LmgiCisjaW5jbHVkZSAi
dXRpbC9jb2RpbmcuaCIKKyNpbmNsdWRlICJ1dGlsL2NyYzMyYy5oIgorCituYW1lc3BhY2UgbGV2
ZWxkYiB7CituYW1lc3BhY2UgbG9nIHsKKworUmVhZGVyOjpSZXBvcnRlcjo6flJlcG9ydGVyKCkg
eworfQorCitSZWFkZXI6OlJlYWRlcihTZXF1ZW50aWFsRmlsZSogZmlsZSwgUmVwb3J0ZXIqIHJl
cG9ydGVyLCBib29sIGNoZWNrc3VtLAorICAgICAgICAgICAgICAgdWludDY0X3QgaW5pdGlhbF9v
ZmZzZXQpCisgICAgOiBmaWxlXyhmaWxlKSwKKyAgICAgIHJlcG9ydGVyXyhyZXBvcnRlciksCisg
ICAgICBjaGVja3N1bV8oY2hlY2tzdW0pLAorICAgICAgYmFja2luZ19zdG9yZV8obmV3IGNoYXJb
a0Jsb2NrU2l6ZV0pLAorICAgICAgYnVmZmVyXygpLAorICAgICAgZW9mXyhmYWxzZSksCisgICAg
ICBsYXN0X3JlY29yZF9vZmZzZXRfKDApLAorICAgICAgZW5kX29mX2J1ZmZlcl9vZmZzZXRfKDAp
LAorICAgICAgaW5pdGlhbF9vZmZzZXRfKGluaXRpYWxfb2Zmc2V0KSB7Cit9CisKK1JlYWRlcjo6
flJlYWRlcigpIHsKKyAgZGVsZXRlW10gYmFja2luZ19zdG9yZV87Cit9CisKK2Jvb2wgUmVhZGVy
OjpTa2lwVG9Jbml0aWFsQmxvY2soKSB7CisgIHNpemVfdCBvZmZzZXRfaW5fYmxvY2sgPSBpbml0
aWFsX29mZnNldF8gJSBrQmxvY2tTaXplOworICB1aW50NjRfdCBibG9ja19zdGFydF9sb2NhdGlv
biA9IGluaXRpYWxfb2Zmc2V0XyAtIG9mZnNldF9pbl9ibG9jazsKKworICAvLyBEb24ndCBzZWFy
Y2ggYSBibG9jayBpZiB3ZSdkIGJlIGluIHRoZSB0cmFpbGVyCisgIGlmIChvZmZzZXRfaW5fYmxv
Y2sgPiBrQmxvY2tTaXplIC0gNikgeworICAgIG9mZnNldF9pbl9ibG9jayA9IDA7CisgICAgYmxv
Y2tfc3RhcnRfbG9jYXRpb24gKz0ga0Jsb2NrU2l6ZTsKKyAgfQorCisgIGVuZF9vZl9idWZmZXJf
b2Zmc2V0XyA9IGJsb2NrX3N0YXJ0X2xvY2F0aW9uOworCisgIC8vIFNraXAgdG8gc3RhcnQgb2Yg
Zmlyc3QgYmxvY2sgdGhhdCBjYW4gY29udGFpbiB0aGUgaW5pdGlhbCByZWNvcmQKKyAgaWYgKGJs
b2NrX3N0YXJ0X2xvY2F0aW9uID4gMCkgeworICAgIFN0YXR1cyBza2lwX3N0YXR1cyA9IGZpbGVf
LT5Ta2lwKGJsb2NrX3N0YXJ0X2xvY2F0aW9uKTsKKyAgICBpZiAoIXNraXBfc3RhdHVzLm9rKCkp
IHsKKyAgICAgIFJlcG9ydERyb3AoYmxvY2tfc3RhcnRfbG9jYXRpb24sIHNraXBfc3RhdHVzKTsK
KyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIH0KKworICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBSZWFkZXI6OlJlYWRSZWNvcmQoU2xpY2UqIHJlY29yZCwgc3RkOjpzdHJpbmcqIHNjcmF0
Y2gpIHsKKyAgaWYgKGxhc3RfcmVjb3JkX29mZnNldF8gPCBpbml0aWFsX29mZnNldF8pIHsKKyAg
ICBpZiAoIVNraXBUb0luaXRpYWxCbG9jaygpKSB7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICB9CisKKyAgc2NyYXRjaC0+Y2xlYXIoKTsKKyAgcmVjb3JkLT5jbGVhcigpOworICBib29s
IGluX2ZyYWdtZW50ZWRfcmVjb3JkID0gZmFsc2U7CisgIC8vIFJlY29yZCBvZmZzZXQgb2YgdGhl
IGxvZ2ljYWwgcmVjb3JkIHRoYXQgd2UncmUgcmVhZGluZworICAvLyAwIGlzIGEgZHVtbXkgdmFs
dWUgdG8gbWFrZSBjb21waWxlcnMgaGFwcHkKKyAgdWludDY0X3QgcHJvc3BlY3RpdmVfcmVjb3Jk
X29mZnNldCA9IDA7CisKKyAgU2xpY2UgZnJhZ21lbnQ7CisgIHdoaWxlICh0cnVlKSB7CisgICAg
dWludDY0X3QgcGh5c2ljYWxfcmVjb3JkX29mZnNldCA9IGVuZF9vZl9idWZmZXJfb2Zmc2V0XyAt
IGJ1ZmZlcl8uc2l6ZSgpOworICAgIGNvbnN0IHVuc2lnbmVkIGludCByZWNvcmRfdHlwZSA9IFJl
YWRQaHlzaWNhbFJlY29yZCgmZnJhZ21lbnQpOworICAgIHN3aXRjaCAocmVjb3JkX3R5cGUpIHsK
KyAgICAgIGNhc2Uga0Z1bGxUeXBlOgorICAgICAgICBpZiAoaW5fZnJhZ21lbnRlZF9yZWNvcmQp
IHsKKyAgICAgICAgICAvLyBIYW5kbGUgYnVnIGluIGVhcmxpZXIgdmVyc2lvbnMgb2YgbG9nOjpX
cml0ZXIgd2hlcmUKKyAgICAgICAgICAvLyBpdCBjb3VsZCBlbWl0IGFuIGVtcHR5IGtGaXJzdFR5
cGUgcmVjb3JkIGF0IHRoZSB0YWlsIGVuZAorICAgICAgICAgIC8vIG9mIGEgYmxvY2sgZm9sbG93
ZWQgYnkgYSBrRnVsbFR5cGUgb3Iga0ZpcnN0VHlwZSByZWNvcmQKKyAgICAgICAgICAvLyBhdCB0
aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0IGJsb2NrLgorICAgICAgICAgIGlmIChzY3JhdGNoLT5l
bXB0eSgpKSB7CisgICAgICAgICAgICBpbl9mcmFnbWVudGVkX3JlY29yZCA9IGZhbHNlOworICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBSZXBvcnRDb3JydXB0aW9uKHNjcmF0Y2gtPnNp
emUoKSwgInBhcnRpYWwgcmVjb3JkIHdpdGhvdXQgZW5kKDEpIik7CisgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIHByb3NwZWN0aXZlX3JlY29yZF9vZmZzZXQgPSBwaHlzaWNhbF9yZWNv
cmRfb2Zmc2V0OworICAgICAgICBzY3JhdGNoLT5jbGVhcigpOworICAgICAgICAqcmVjb3JkID0g
ZnJhZ21lbnQ7CisgICAgICAgIGxhc3RfcmVjb3JkX29mZnNldF8gPSBwcm9zcGVjdGl2ZV9yZWNv
cmRfb2Zmc2V0OworICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgY2FzZSBrRmlyc3RUeXBl
OgorICAgICAgICBpZiAoaW5fZnJhZ21lbnRlZF9yZWNvcmQpIHsKKyAgICAgICAgICAvLyBIYW5k
bGUgYnVnIGluIGVhcmxpZXIgdmVyc2lvbnMgb2YgbG9nOjpXcml0ZXIgd2hlcmUKKyAgICAgICAg
ICAvLyBpdCBjb3VsZCBlbWl0IGFuIGVtcHR5IGtGaXJzdFR5cGUgcmVjb3JkIGF0IHRoZSB0YWls
IGVuZAorICAgICAgICAgIC8vIG9mIGEgYmxvY2sgZm9sbG93ZWQgYnkgYSBrRnVsbFR5cGUgb3Ig
a0ZpcnN0VHlwZSByZWNvcmQKKyAgICAgICAgICAvLyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBu
ZXh0IGJsb2NrLgorICAgICAgICAgIGlmIChzY3JhdGNoLT5lbXB0eSgpKSB7CisgICAgICAgICAg
ICBpbl9mcmFnbWVudGVkX3JlY29yZCA9IGZhbHNlOworICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBSZXBvcnRDb3JydXB0aW9uKHNjcmF0Y2gtPnNpemUoKSwgInBhcnRpYWwgcmVjb3Jk
IHdpdGhvdXQgZW5kKDIpIik7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHByb3Nw
ZWN0aXZlX3JlY29yZF9vZmZzZXQgPSBwaHlzaWNhbF9yZWNvcmRfb2Zmc2V0OworICAgICAgICBz
Y3JhdGNoLT5hc3NpZ24oZnJhZ21lbnQuZGF0YSgpLCBmcmFnbWVudC5zaXplKCkpOworICAgICAg
ICBpbl9mcmFnbWVudGVkX3JlY29yZCA9IHRydWU7CisgICAgICAgIGJyZWFrOworCisgICAgICBj
YXNlIGtNaWRkbGVUeXBlOgorICAgICAgICBpZiAoIWluX2ZyYWdtZW50ZWRfcmVjb3JkKSB7Cisg
ICAgICAgICAgUmVwb3J0Q29ycnVwdGlvbihmcmFnbWVudC5zaXplKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAibWlzc2luZyBzdGFydCBvZiBmcmFnbWVudGVkIHJlY29yZCgxKSIpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHNjcmF0Y2gtPmFwcGVuZChmcmFnbWVudC5kYXRh
KCksIGZyYWdtZW50LnNpemUoKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAg
IGNhc2Uga0xhc3RUeXBlOgorICAgICAgICBpZiAoIWluX2ZyYWdtZW50ZWRfcmVjb3JkKSB7Cisg
ICAgICAgICAgUmVwb3J0Q29ycnVwdGlvbihmcmFnbWVudC5zaXplKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAibWlzc2luZyBzdGFydCBvZiBmcmFnbWVudGVkIHJlY29yZCgyKSIpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHNjcmF0Y2gtPmFwcGVuZChmcmFnbWVudC5kYXRh
KCksIGZyYWdtZW50LnNpemUoKSk7CisgICAgICAgICAgKnJlY29yZCA9IFNsaWNlKCpzY3JhdGNo
KTsKKyAgICAgICAgICBsYXN0X3JlY29yZF9vZmZzZXRfID0gcHJvc3BlY3RpdmVfcmVjb3JkX29m
ZnNldDsKKyAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KworICAgICAgY2FzZSBrRW9mOgorICAgICAgICBpZiAoaW5fZnJhZ21lbnRlZF9yZWNvcmQpIHsK
KyAgICAgICAgICBSZXBvcnRDb3JydXB0aW9uKHNjcmF0Y2gtPnNpemUoKSwgInBhcnRpYWwgcmVj
b3JkIHdpdGhvdXQgZW5kKDMpIik7CisgICAgICAgICAgc2NyYXRjaC0+Y2xlYXIoKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgIGNhc2Uga0JhZFJlY29yZDoKKyAg
ICAgICAgaWYgKGluX2ZyYWdtZW50ZWRfcmVjb3JkKSB7CisgICAgICAgICAgUmVwb3J0Q29ycnVw
dGlvbihzY3JhdGNoLT5zaXplKCksICJlcnJvciBpbiBtaWRkbGUgb2YgcmVjb3JkIik7CisgICAg
ICAgICAgaW5fZnJhZ21lbnRlZF9yZWNvcmQgPSBmYWxzZTsKKyAgICAgICAgICBzY3JhdGNoLT5j
bGVhcigpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0OiB7Cisg
ICAgICAgIGNoYXIgYnVmWzQwXTsKKyAgICAgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwg
InVua25vd24gcmVjb3JkIHR5cGUgJXUiLCByZWNvcmRfdHlwZSk7CisgICAgICAgIFJlcG9ydENv
cnJ1cHRpb24oCisgICAgICAgICAgICAoZnJhZ21lbnQuc2l6ZSgpICsgKGluX2ZyYWdtZW50ZWRf
cmVjb3JkID8gc2NyYXRjaC0+c2l6ZSgpIDogMCkpLAorICAgICAgICAgICAgYnVmKTsKKyAgICAg
ICAgaW5fZnJhZ21lbnRlZF9yZWNvcmQgPSBmYWxzZTsKKyAgICAgICAgc2NyYXRjaC0+Y2xlYXIo
KTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiBmYWxzZTsK
K30KKwordWludDY0X3QgUmVhZGVyOjpMYXN0UmVjb3JkT2Zmc2V0KCkgeworICByZXR1cm4gbGFz
dF9yZWNvcmRfb2Zmc2V0XzsKK30KKwordm9pZCBSZWFkZXI6OlJlcG9ydENvcnJ1cHRpb24oc2l6
ZV90IGJ5dGVzLCBjb25zdCBjaGFyKiByZWFzb24pIHsKKyAgUmVwb3J0RHJvcChieXRlcywgU3Rh
dHVzOjpDb3JydXB0aW9uKHJlYXNvbikpOworfQorCit2b2lkIFJlYWRlcjo6UmVwb3J0RHJvcChz
aXplX3QgYnl0ZXMsIGNvbnN0IFN0YXR1cyYgcmVhc29uKSB7CisgIGlmIChyZXBvcnRlcl8gIT0g
TlVMTCAmJgorICAgICAgZW5kX29mX2J1ZmZlcl9vZmZzZXRfIC0gYnVmZmVyXy5zaXplKCkgLSBi
eXRlcyA+PSBpbml0aWFsX29mZnNldF8pIHsKKyAgICByZXBvcnRlcl8tPkNvcnJ1cHRpb24oYnl0
ZXMsIHJlYXNvbik7CisgIH0KK30KKwordW5zaWduZWQgaW50IFJlYWRlcjo6UmVhZFBoeXNpY2Fs
UmVjb3JkKFNsaWNlKiByZXN1bHQpIHsKKyAgd2hpbGUgKHRydWUpIHsKKyAgICBpZiAoYnVmZmVy
Xy5zaXplKCkgPCBrSGVhZGVyU2l6ZSkgeworICAgICAgaWYgKCFlb2ZfKSB7CisgICAgICAgIC8v
IExhc3QgcmVhZCB3YXMgYSBmdWxsIHJlYWQsIHNvIHRoaXMgaXMgYSB0cmFpbGVyIHRvIHNraXAK
KyAgICAgICAgYnVmZmVyXy5jbGVhcigpOworICAgICAgICBTdGF0dXMgc3RhdHVzID0gZmlsZV8t
PlJlYWQoa0Jsb2NrU2l6ZSwgJmJ1ZmZlcl8sIGJhY2tpbmdfc3RvcmVfKTsKKyAgICAgICAgZW5k
X29mX2J1ZmZlcl9vZmZzZXRfICs9IGJ1ZmZlcl8uc2l6ZSgpOworICAgICAgICBpZiAoIXN0YXR1
cy5vaygpKSB7CisgICAgICAgICAgYnVmZmVyXy5jbGVhcigpOworICAgICAgICAgIFJlcG9ydERy
b3Aoa0Jsb2NrU2l6ZSwgc3RhdHVzKTsKKyAgICAgICAgICBlb2ZfID0gdHJ1ZTsKKyAgICAgICAg
ICByZXR1cm4ga0VvZjsKKyAgICAgICAgfSBlbHNlIGlmIChidWZmZXJfLnNpemUoKSA8IGtCbG9j
a1NpemUpIHsKKyAgICAgICAgICBlb2ZfID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBjb250
aW51ZTsKKyAgICAgIH0gZWxzZSBpZiAoYnVmZmVyXy5zaXplKCkgPT0gMCkgeworICAgICAgICAv
LyBFbmQgb2YgZmlsZQorICAgICAgICByZXR1cm4ga0VvZjsKKyAgICAgIH0gZWxzZSB7CisgICAg
ICAgIHNpemVfdCBkcm9wX3NpemUgPSBidWZmZXJfLnNpemUoKTsKKyAgICAgICAgYnVmZmVyXy5j
bGVhcigpOworICAgICAgICBSZXBvcnRDb3JydXB0aW9uKGRyb3Bfc2l6ZSwgInRydW5jYXRlZCBy
ZWNvcmQgYXQgZW5kIG9mIGZpbGUiKTsKKyAgICAgICAgcmV0dXJuIGtFb2Y7CisgICAgICB9Cisg
ICAgfQorCisgICAgLy8gUGFyc2UgdGhlIGhlYWRlcgorICAgIGNvbnN0IGNoYXIqIGhlYWRlciA9
IGJ1ZmZlcl8uZGF0YSgpOworICAgIGNvbnN0IHVpbnQzMl90IGEgPSBzdGF0aWNfY2FzdDx1aW50
MzJfdD4oaGVhZGVyWzRdKSAmIDB4ZmY7CisgICAgY29uc3QgdWludDMyX3QgYiA9IHN0YXRpY19j
YXN0PHVpbnQzMl90PihoZWFkZXJbNV0pICYgMHhmZjsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQg
dHlwZSA9IGhlYWRlcls2XTsKKyAgICBjb25zdCB1aW50MzJfdCBsZW5ndGggPSBhIHwgKGIgPDwg
OCk7CisgICAgaWYgKGtIZWFkZXJTaXplICsgbGVuZ3RoID4gYnVmZmVyXy5zaXplKCkpIHsKKyAg
ICAgIHNpemVfdCBkcm9wX3NpemUgPSBidWZmZXJfLnNpemUoKTsKKyAgICAgIGJ1ZmZlcl8uY2xl
YXIoKTsKKyAgICAgIFJlcG9ydENvcnJ1cHRpb24oZHJvcF9zaXplLCAiYmFkIHJlY29yZCBsZW5n
dGgiKTsKKyAgICAgIHJldHVybiBrQmFkUmVjb3JkOworICAgIH0KKworICAgIGlmICh0eXBlID09
IGtaZXJvVHlwZSAmJiBsZW5ndGggPT0gMCkgeworICAgICAgLy8gU2tpcCB6ZXJvIGxlbmd0aCBy
ZWNvcmQgd2l0aG91dCByZXBvcnRpbmcgYW55IGRyb3BzIHNpbmNlCisgICAgICAvLyBzdWNoIHJl
Y29yZHMgYXJlIHByb2R1Y2VkIGJ5IHRoZSBtbWFwIGJhc2VkIHdyaXRpbmcgY29kZSBpbgorICAg
ICAgLy8gZW52X3Bvc2l4LmNjIHRoYXQgcHJlYWxsb2NhdGVzIGZpbGUgcmVnaW9ucy4KKyAgICAg
IGJ1ZmZlcl8uY2xlYXIoKTsKKyAgICAgIHJldHVybiBrQmFkUmVjb3JkOworICAgIH0KKworICAg
IC8vIENoZWNrIGNyYworICAgIGlmIChjaGVja3N1bV8pIHsKKyAgICAgIHVpbnQzMl90IGV4cGVj
dGVkX2NyYyA9IGNyYzMyYzo6VW5tYXNrKERlY29kZUZpeGVkMzIoaGVhZGVyKSk7CisgICAgICB1
aW50MzJfdCBhY3R1YWxfY3JjID0gY3JjMzJjOjpWYWx1ZShoZWFkZXIgKyA2LCAxICsgbGVuZ3Ro
KTsKKyAgICAgIGlmIChhY3R1YWxfY3JjICE9IGV4cGVjdGVkX2NyYykgeworICAgICAgICAvLyBE
cm9wIHRoZSByZXN0IG9mIHRoZSBidWZmZXIgc2luY2UgImxlbmd0aCIgaXRzZWxmIG1heSBoYXZl
CisgICAgICAgIC8vIGJlZW4gY29ycnVwdGVkIGFuZCBpZiB3ZSB0cnVzdCBpdCwgd2UgY291bGQg
ZmluZCBzb21lCisgICAgICAgIC8vIGZyYWdtZW50IG9mIGEgcmVhbCBsb2cgcmVjb3JkIHRoYXQg
anVzdCBoYXBwZW5zIHRvIGxvb2sKKyAgICAgICAgLy8gbGlrZSBhIHZhbGlkIGxvZyByZWNvcmQu
CisgICAgICAgIHNpemVfdCBkcm9wX3NpemUgPSBidWZmZXJfLnNpemUoKTsKKyAgICAgICAgYnVm
ZmVyXy5jbGVhcigpOworICAgICAgICBSZXBvcnRDb3JydXB0aW9uKGRyb3Bfc2l6ZSwgImNoZWNr
c3VtIG1pc21hdGNoIik7CisgICAgICAgIHJldHVybiBrQmFkUmVjb3JkOworICAgICAgfQorICAg
IH0KKworICAgIGJ1ZmZlcl8ucmVtb3ZlX3ByZWZpeChrSGVhZGVyU2l6ZSArIGxlbmd0aCk7CisK
KyAgICAvLyBTa2lwIHBoeXNpY2FsIHJlY29yZCB0aGF0IHN0YXJ0ZWQgYmVmb3JlIGluaXRpYWxf
b2Zmc2V0XworICAgIGlmIChlbmRfb2ZfYnVmZmVyX29mZnNldF8gLSBidWZmZXJfLnNpemUoKSAt
IGtIZWFkZXJTaXplIC0gbGVuZ3RoIDwKKyAgICAgICAgaW5pdGlhbF9vZmZzZXRfKSB7CisgICAg
ICByZXN1bHQtPmNsZWFyKCk7CisgICAgICByZXR1cm4ga0JhZFJlY29yZDsKKyAgICB9CisKKyAg
ICAqcmVzdWx0ID0gU2xpY2UoaGVhZGVyICsga0hlYWRlclNpemUsIGxlbmd0aCk7CisgICAgcmV0
dXJuIHR5cGU7CisgIH0KK30KKworfSAgLy8gbmFtZXNwYWNlIGxvZworfSAgLy8gbmFtZXNwYWNl
IGxldmVsZGIKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvbG9nX3Jl
YWRlci5oIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9sb2dfcmVhZGVyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uODJkNGJlZTY4ZDBlZWEzYTdmZGQyNzBlOTFiNDk1NDVhNTM2ZjQ1ZQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvbG9nX3JlYWRlci5oCkBAIC0w
LDAgKzEsMTA4IEBACisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRv
cnMuCisKKyNpZm5kZWYgU1RPUkFHRV9MRVZFTERCX0RCX0xPR19SRUFERVJfSF8KKyNkZWZpbmUg
U1RPUkFHRV9MRVZFTERCX0RCX0xPR19SRUFERVJfSF8KKworI2luY2x1ZGUgPHN0ZGludC5oPgor
CisjaW5jbHVkZSAiZGIvbG9nX2Zvcm1hdC5oIgorI2luY2x1ZGUgImxldmVsZGIvc2xpY2UuaCIK
KyNpbmNsdWRlICJsZXZlbGRiL3N0YXR1cy5oIgorCituYW1lc3BhY2UgbGV2ZWxkYiB7CisKK2Ns
YXNzIFNlcXVlbnRpYWxGaWxlOworCituYW1lc3BhY2UgbG9nIHsKKworY2xhc3MgUmVhZGVyIHsK
KyBwdWJsaWM6CisgIC8vIEludGVyZmFjZSBmb3IgcmVwb3J0aW5nIGVycm9ycy4KKyAgY2xhc3Mg
UmVwb3J0ZXIgeworICAgcHVibGljOgorICAgIHZpcnR1YWwgflJlcG9ydGVyKCk7CisKKyAgICAv
LyBTb21lIGNvcnJ1cHRpb24gd2FzIGRldGVjdGVkLiAgInNpemUiIGlzIHRoZSBhcHByb3hpbWF0
ZSBudW1iZXIKKyAgICAvLyBvZiBieXRlcyBkcm9wcGVkIGR1ZSB0byB0aGUgY29ycnVwdGlvbi4K
KyAgICB2aXJ0dWFsIHZvaWQgQ29ycnVwdGlvbihzaXplX3QgYnl0ZXMsIGNvbnN0IFN0YXR1cyYg
c3RhdHVzKSA9IDA7CisgIH07CisKKyAgLy8gQ3JlYXRlIGEgcmVhZGVyIHRoYXQgd2lsbCByZXR1
cm4gbG9nIHJlY29yZHMgZnJvbSAiKmZpbGUiLgorICAvLyAiKmZpbGUiIG11c3QgcmVtYWluIGxp
dmUgd2hpbGUgdGhpcyBSZWFkZXIgaXMgaW4gdXNlLgorICAvLworICAvLyBJZiAicmVwb3J0ZXIi
IGlzIG5vbi1OVUxMLCBpdCBpcyBub3RpZmllZCB3aGVuZXZlciBzb21lIGRhdGEgaXMKKyAgLy8g
ZHJvcHBlZCBkdWUgdG8gYSBkZXRlY3RlZCBjb3JydXB0aW9uLiAgIipyZXBvcnRlciIgbXVzdCBy
ZW1haW4KKyAgLy8gbGl2ZSB3aGlsZSB0aGlzIFJlYWRlciBpcyBpbiB1c2UuCisgIC8vCisgIC8v
IElmICJjaGVja3N1bSIgaXMgdHJ1ZSwgdmVyaWZ5IGNoZWNrc3VtcyBpZiBhdmFpbGFibGUuCisg
IC8vCisgIC8vIFRoZSBSZWFkZXIgd2lsbCBzdGFydCByZWFkaW5nIGF0IHRoZSBmaXJzdCByZWNv
cmQgbG9jYXRlZCBhdCBwaHlzaWNhbAorICAvLyBwb3NpdGlvbiA+PSBpbml0aWFsX29mZnNldCB3
aXRoaW4gdGhlIGZpbGUuCisgIFJlYWRlcihTZXF1ZW50aWFsRmlsZSogZmlsZSwgUmVwb3J0ZXIq
IHJlcG9ydGVyLCBib29sIGNoZWNrc3VtLAorICAgICAgICAgdWludDY0X3QgaW5pdGlhbF9vZmZz
ZXQpOworCisgIH5SZWFkZXIoKTsKKworICAvLyBSZWFkIHRoZSBuZXh0IHJlY29yZCBpbnRvICpy
ZWNvcmQuICBSZXR1cm5zIHRydWUgaWYgcmVhZAorICAvLyBzdWNjZXNzZnVsbHksIGZhbHNlIGlm
IHdlIGhpdCBlbmQgb2YgdGhlIGlucHV0LiAgTWF5IHVzZQorICAvLyAiKnNjcmF0Y2giIGFzIHRl
bXBvcmFyeSBzdG9yYWdlLiAgVGhlIGNvbnRlbnRzIGZpbGxlZCBpbiAqcmVjb3JkCisgIC8vIHdp
bGwgb25seSBiZSB2YWxpZCB1bnRpbCB0aGUgbmV4dCBtdXRhdGluZyBvcGVyYXRpb24gb24gdGhp
cworICAvLyByZWFkZXIgb3IgdGhlIG5leHQgbXV0YXRpb24gdG8gKnNjcmF0Y2guCisgIGJvb2wg
UmVhZFJlY29yZChTbGljZSogcmVjb3JkLCBzdGQ6OnN0cmluZyogc2NyYXRjaCk7CisKKyAgLy8g
UmV0dXJucyB0aGUgcGh5c2ljYWwgb2Zmc2V0IG9mIHRoZSBsYXN0IHJlY29yZCByZXR1cm5lZCBi
eSBSZWFkUmVjb3JkLgorICAvLworICAvLyBVbmRlZmluZWQgYmVmb3JlIHRoZSBmaXJzdCBjYWxs
IHRvIFJlYWRSZWNvcmQuCisgIHVpbnQ2NF90IExhc3RSZWNvcmRPZmZzZXQoKTsKKworIHByaXZh
dGU6CisgIFNlcXVlbnRpYWxGaWxlKiBjb25zdCBmaWxlXzsKKyAgUmVwb3J0ZXIqIGNvbnN0IHJl
cG9ydGVyXzsKKyAgYm9vbCBjb25zdCBjaGVja3N1bV87CisgIGNoYXIqIGNvbnN0IGJhY2tpbmdf
c3RvcmVfOworICBTbGljZSBidWZmZXJfOworICBib29sIGVvZl87ICAgLy8gTGFzdCBSZWFkKCkg
aW5kaWNhdGVkIEVPRiBieSByZXR1cm5pbmcgPCBrQmxvY2tTaXplCisKKyAgLy8gT2Zmc2V0IG9m
IHRoZSBsYXN0IHJlY29yZCByZXR1cm5lZCBieSBSZWFkUmVjb3JkLgorICB1aW50NjRfdCBsYXN0
X3JlY29yZF9vZmZzZXRfOworICAvLyBPZmZzZXQgb2YgdGhlIGZpcnN0IGxvY2F0aW9uIHBhc3Qg
dGhlIGVuZCBvZiBidWZmZXJfLgorICB1aW50NjRfdCBlbmRfb2ZfYnVmZmVyX29mZnNldF87CisK
KyAgLy8gT2Zmc2V0IGF0IHdoaWNoIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIHRoZSBmaXJzdCByZWNv
cmQgdG8gcmV0dXJuCisgIHVpbnQ2NF90IGNvbnN0IGluaXRpYWxfb2Zmc2V0XzsKKworICAvLyBF
eHRlbmQgcmVjb3JkIHR5cGVzIHdpdGggdGhlIGZvbGxvd2luZyBzcGVjaWFsIHZhbHVlcworICBl
bnVtIHsKKyAgICBrRW9mID0ga01heFJlY29yZFR5cGUgKyAxLAorICAgIC8vIFJldHVybmVkIHdo
ZW5ldmVyIHdlIGZpbmQgYW4gaW52YWxpZCBwaHlzaWNhbCByZWNvcmQuCisgICAgLy8gQ3VycmVu
dGx5IHRoZXJlIGFyZSB0aHJlZSBzaXR1YXRpb25zIGluIHdoaWNoIHRoaXMgaGFwcGVuczoKKyAg
ICAvLyAqIFRoZSByZWNvcmQgaGFzIGFuIGludmFsaWQgQ1JDIChSZWFkUGh5c2ljYWxSZWNvcmQg
cmVwb3J0cyBhIGRyb3ApCisgICAgLy8gKiBUaGUgcmVjb3JkIGlzIGEgMC1sZW5ndGggcmVjb3Jk
IChObyBkcm9wIGlzIHJlcG9ydGVkKQorICAgIC8vICogVGhlIHJlY29yZCBpcyBiZWxvdyBjb25z
dHJ1Y3RvcidzIGluaXRpYWxfb2Zmc2V0IChObyBkcm9wIGlzIHJlcG9ydGVkKQorICAgIGtCYWRS
ZWNvcmQgPSBrTWF4UmVjb3JkVHlwZSArIDIKKyAgfTsKKworICAvLyBTa2lwcyBhbGwgYmxvY2tz
IHRoYXQgYXJlIGNvbXBsZXRlbHkgYmVmb3JlICJpbml0aWFsX29mZnNldF8iLgorICAvLworICAv
LyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzcy4gSGFuZGxlcyByZXBvcnRpbmcuCisgIGJvb2wgU2tp
cFRvSW5pdGlhbEJsb2NrKCk7CisKKyAgLy8gUmV0dXJuIHR5cGUsIG9yIG9uZSBvZiB0aGUgcHJl
Y2VkaW5nIHNwZWNpYWwgdmFsdWVzCisgIHVuc2lnbmVkIGludCBSZWFkUGh5c2ljYWxSZWNvcmQo
U2xpY2UqIHJlc3VsdCk7CisKKyAgLy8gUmVwb3J0cyBkcm9wcGVkIGJ5dGVzIHRvIHRoZSByZXBv
cnRlci4KKyAgLy8gYnVmZmVyXyBtdXN0IGJlIHVwZGF0ZWQgdG8gcmVtb3ZlIHRoZSBkcm9wcGVk
IGJ5dGVzIHByaW9yIHRvIGludm9jYXRpb24uCisgIHZvaWQgUmVwb3J0Q29ycnVwdGlvbihzaXpl
X3QgYnl0ZXMsIGNvbnN0IGNoYXIqIHJlYXNvbik7CisgIHZvaWQgUmVwb3J0RHJvcChzaXplX3Qg
Ynl0ZXMsIGNvbnN0IFN0YXR1cyYgcmVhc29uKTsKKworICAvLyBObyBjb3B5aW5nIGFsbG93ZWQK
KyAgUmVhZGVyKGNvbnN0IFJlYWRlciYpOworICB2b2lkIG9wZXJhdG9yPShjb25zdCBSZWFkZXIm
KTsKK307CisKK30gIC8vIG5hbWVzcGFjZSBsb2cKK30gIC8vIG5hbWVzcGFjZSBsZXZlbGRiCisK
KyNlbmRpZiAgLy8gU1RPUkFHRV9MRVZFTERCX0RCX0xPR19SRUFERVJfSF8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvbG9nX3Rlc3QuY2MgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9sZXZlbGRiL2RiL2xvZ190ZXN0LmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRjNWNmODc1NzMzYzE2MTc1
NzQzMjI0ZTY0MmYwNTA3YTBkYTY2M2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9sZXZlbGRiL2RiL2xvZ190ZXN0LmNjCkBAIC0wLDAgKzEsNTAwIEBACisvLyBDb3B5cmln
aHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVU
SE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCisKKyNpbmNsdWRlICJkYi9sb2df
cmVhZGVyLmgiCisjaW5jbHVkZSAiZGIvbG9nX3dyaXRlci5oIgorI2luY2x1ZGUgImxldmVsZGIv
ZW52LmgiCisjaW5jbHVkZSAidXRpbC9jb2RpbmcuaCIKKyNpbmNsdWRlICJ1dGlsL2NyYzMyYy5o
IgorI2luY2x1ZGUgInV0aWwvcmFuZG9tLmgiCisjaW5jbHVkZSAidXRpbC90ZXN0aGFybmVzcy5o
IgorCituYW1lc3BhY2UgbGV2ZWxkYiB7CituYW1lc3BhY2UgbG9nIHsKKworLy8gQ29uc3RydWN0
IGEgc3RyaW5nIG9mIHRoZSBzcGVjaWZpZWQgbGVuZ3RoIG1hZGUgb3V0IG9mIHRoZSBzdXBwbGll
ZAorLy8gcGFydGlhbCBzdHJpbmcuCitzdGF0aWMgc3RkOjpzdHJpbmcgQmlnU3RyaW5nKGNvbnN0
IHN0ZDo6c3RyaW5nJiBwYXJ0aWFsX3N0cmluZywgc2l6ZV90IG4pIHsKKyAgc3RkOjpzdHJpbmcg
cmVzdWx0OworICB3aGlsZSAocmVzdWx0LnNpemUoKSA8IG4pIHsKKyAgICByZXN1bHQuYXBwZW5k
KHBhcnRpYWxfc3RyaW5nKTsKKyAgfQorICByZXN1bHQucmVzaXplKG4pOworICByZXR1cm4gcmVz
dWx0OworfQorCisvLyBDb25zdHJ1Y3QgYSBzdHJpbmcgZnJvbSBhIG51bWJlcgorc3RhdGljIHN0
ZDo6c3RyaW5nIE51bWJlclN0cmluZyhpbnQgbikgeworICBjaGFyIGJ1Zls1MF07CisgIHNucHJp
bnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZC4iLCBuKTsKKyAgcmV0dXJuIHN0ZDo6c3RyaW5nKGJ1
Zik7Cit9CisKKy8vIFJldHVybiBhIHNrZXdlZCBwb3RlbnRpYWxseSBsb25nIHN0cmluZworc3Rh
dGljIHN0ZDo6c3RyaW5nIFJhbmRvbVNrZXdlZFN0cmluZyhpbnQgaSwgUmFuZG9tKiBybmQpIHsK
KyAgcmV0dXJuIEJpZ1N0cmluZyhOdW1iZXJTdHJpbmcoaSksIHJuZC0+U2tld2VkKDE3KSk7Cit9
CisKK2NsYXNzIExvZ1Rlc3QgeworIHByaXZhdGU6CisgIGNsYXNzIFN0cmluZ0Rlc3QgOiBwdWJs
aWMgV3JpdGFibGVGaWxlIHsKKyAgIHB1YmxpYzoKKyAgICBzdGQ6OnN0cmluZyBjb250ZW50c187
CisKKyAgICB2aXJ0dWFsIFN0YXR1cyBDbG9zZSgpIHsgcmV0dXJuIFN0YXR1czo6T0soKTsgfQor
ICAgIHZpcnR1YWwgU3RhdHVzIEZsdXNoKCkgeyByZXR1cm4gU3RhdHVzOjpPSygpOyB9CisgICAg
dmlydHVhbCBTdGF0dXMgU3luYygpIHsgcmV0dXJuIFN0YXR1czo6T0soKTsgfQorICAgIHZpcnR1
YWwgU3RhdHVzIEFwcGVuZChjb25zdCBTbGljZSYgc2xpY2UpIHsKKyAgICAgIGNvbnRlbnRzXy5h
cHBlbmQoc2xpY2UuZGF0YSgpLCBzbGljZS5zaXplKCkpOworICAgICAgcmV0dXJuIFN0YXR1czo6
T0soKTsKKyAgICB9CisgIH07CisKKyAgY2xhc3MgU3RyaW5nU291cmNlIDogcHVibGljIFNlcXVl
bnRpYWxGaWxlIHsKKyAgIHB1YmxpYzoKKyAgICBTbGljZSBjb250ZW50c187CisgICAgYm9vbCBm
b3JjZV9lcnJvcl87CisgICAgYm9vbCByZXR1cm5lZF9wYXJ0aWFsXzsKKyAgICBTdHJpbmdTb3Vy
Y2UoKSA6IGZvcmNlX2Vycm9yXyhmYWxzZSksIHJldHVybmVkX3BhcnRpYWxfKGZhbHNlKSB7IH0K
KworICAgIHZpcnR1YWwgU3RhdHVzIFJlYWQoc2l6ZV90IG4sIFNsaWNlKiByZXN1bHQsIGNoYXIq
IHNjcmF0Y2gpIHsKKyAgICAgIEFTU0VSVF9UUlVFKCFyZXR1cm5lZF9wYXJ0aWFsXykgPDwgIm11
c3Qgbm90IFJlYWQoKSBhZnRlciBlb2YvZXJyb3IiOworCisgICAgICBpZiAoZm9yY2VfZXJyb3Jf
KSB7CisgICAgICAgIGZvcmNlX2Vycm9yXyA9IGZhbHNlOworICAgICAgICByZXR1cm5lZF9wYXJ0
aWFsXyA9IHRydWU7CisgICAgICAgIHJldHVybiBTdGF0dXM6OkNvcnJ1cHRpb24oInJlYWQgZXJy
b3IiKTsKKyAgICAgIH0KKworICAgICAgaWYgKGNvbnRlbnRzXy5zaXplKCkgPCBuKSB7CisgICAg
ICAgIG4gPSBjb250ZW50c18uc2l6ZSgpOworICAgICAgICByZXR1cm5lZF9wYXJ0aWFsXyA9IHRy
dWU7CisgICAgICB9CisgICAgICAqcmVzdWx0ID0gU2xpY2UoY29udGVudHNfLmRhdGEoKSwgbik7
CisgICAgICBjb250ZW50c18ucmVtb3ZlX3ByZWZpeChuKTsKKyAgICAgIHJldHVybiBTdGF0dXM6
Ok9LKCk7CisgICAgfQorCisgICAgdmlydHVhbCBTdGF0dXMgU2tpcCh1aW50NjRfdCBuKSB7Cisg
ICAgICBpZiAobiA+IGNvbnRlbnRzXy5zaXplKCkpIHsKKyAgICAgICAgY29udGVudHNfLmNsZWFy
KCk7CisgICAgICAgIHJldHVybiBTdGF0dXM6Ok5vdEZvdW5kKCJpbi1tZW1vcnkgZmlsZSBza2lw
ZXBkIHBhc3QgZW5kIik7CisgICAgICB9CisKKyAgICAgIGNvbnRlbnRzXy5yZW1vdmVfcHJlZml4
KG4pOworCisgICAgICByZXR1cm4gU3RhdHVzOjpPSygpOworICAgIH0KKyAgfTsKKworICBjbGFz
cyBSZXBvcnRDb2xsZWN0b3IgOiBwdWJsaWMgUmVhZGVyOjpSZXBvcnRlciB7CisgICBwdWJsaWM6
CisgICAgc2l6ZV90IGRyb3BwZWRfYnl0ZXNfOworICAgIHN0ZDo6c3RyaW5nIG1lc3NhZ2VfOwor
CisgICAgUmVwb3J0Q29sbGVjdG9yKCkgOiBkcm9wcGVkX2J5dGVzXygwKSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgQ29ycnVwdGlvbihzaXplX3QgYnl0ZXMsIGNvbnN0IFN0YXR1cyYgc3RhdHVzKSB7
CisgICAgICBkcm9wcGVkX2J5dGVzXyArPSBieXRlczsKKyAgICAgIG1lc3NhZ2VfLmFwcGVuZChz
dGF0dXMuVG9TdHJpbmcoKSk7CisgICAgfQorICB9OworCisgIFN0cmluZ0Rlc3QgZGVzdF87Cisg
IFN0cmluZ1NvdXJjZSBzb3VyY2VfOworICBSZXBvcnRDb2xsZWN0b3IgcmVwb3J0XzsKKyAgYm9v
bCByZWFkaW5nXzsKKyAgV3JpdGVyIHdyaXRlcl87CisgIFJlYWRlciByZWFkZXJfOworCisgIC8v
IFJlY29yZCBtZXRhZGF0YSBmb3IgdGVzdGluZyBpbml0aWFsIG9mZnNldCBmdW5jdGlvbmFsaXR5
CisgIHN0YXRpYyBzaXplX3QgaW5pdGlhbF9vZmZzZXRfcmVjb3JkX3NpemVzX1tdOworICBzdGF0
aWMgdWludDY0X3QgaW5pdGlhbF9vZmZzZXRfbGFzdF9yZWNvcmRfb2Zmc2V0c19bXTsKKworIHB1
YmxpYzoKKyAgTG9nVGVzdCgpIDogcmVhZGluZ18oZmFsc2UpLAorICAgICAgICAgICAgICB3cml0
ZXJfKCZkZXN0XyksCisgICAgICAgICAgICAgIHJlYWRlcl8oJnNvdXJjZV8sICZyZXBvcnRfLCB0
cnVlLypjaGVja3N1bSovLAorICAgICAgICAgICAgICAgICAgICAgIDAvKmluaXRpYWxfb2Zmc2V0
Ki8pIHsKKyAgfQorCisgIHZvaWQgV3JpdGUoY29uc3Qgc3RkOjpzdHJpbmcmIG1zZykgeworICAg
IEFTU0VSVF9UUlVFKCFyZWFkaW5nXykgPDwgIldyaXRlKCkgYWZ0ZXIgc3RhcnRpbmcgdG8gcmVh
ZCI7CisgICAgd3JpdGVyXy5BZGRSZWNvcmQoU2xpY2UobXNnKSk7CisgIH0KKworICBzaXplX3Qg
V3JpdHRlbkJ5dGVzKCkgY29uc3QgeworICAgIHJldHVybiBkZXN0Xy5jb250ZW50c18uc2l6ZSgp
OworICB9CisKKyAgc3RkOjpzdHJpbmcgUmVhZCgpIHsKKyAgICBpZiAoIXJlYWRpbmdfKSB7Cisg
ICAgICByZWFkaW5nXyA9IHRydWU7CisgICAgICBzb3VyY2VfLmNvbnRlbnRzXyA9IFNsaWNlKGRl
c3RfLmNvbnRlbnRzXyk7CisgICAgfQorICAgIHN0ZDo6c3RyaW5nIHNjcmF0Y2g7CisgICAgU2xp
Y2UgcmVjb3JkOworICAgIGlmIChyZWFkZXJfLlJlYWRSZWNvcmQoJnJlY29yZCwgJnNjcmF0Y2gp
KSB7CisgICAgICByZXR1cm4gcmVjb3JkLlRvU3RyaW5nKCk7CisgICAgfSBlbHNlIHsKKyAgICAg
IHJldHVybiAiRU9GIjsKKyAgICB9CisgIH0KKworICB2b2lkIEluY3JlbWVudEJ5dGUoaW50IG9m
ZnNldCwgaW50IGRlbHRhKSB7CisgICAgZGVzdF8uY29udGVudHNfW29mZnNldF0gKz0gZGVsdGE7
CisgIH0KKworICB2b2lkIFNldEJ5dGUoaW50IG9mZnNldCwgY2hhciBuZXdfYnl0ZSkgeworICAg
IGRlc3RfLmNvbnRlbnRzX1tvZmZzZXRdID0gbmV3X2J5dGU7CisgIH0KKworICB2b2lkIFNocmlu
a1NpemUoaW50IGJ5dGVzKSB7CisgICAgZGVzdF8uY29udGVudHNfLnJlc2l6ZShkZXN0Xy5jb250
ZW50c18uc2l6ZSgpIC0gYnl0ZXMpOworICB9CisKKyAgdm9pZCBGaXhDaGVja3N1bShpbnQgaGVh
ZGVyX29mZnNldCwgaW50IGxlbikgeworICAgIC8vIENvbXB1dGUgY3JjIG9mIHR5cGUvbGVuL2Rh
dGEKKyAgICB1aW50MzJfdCBjcmMgPSBjcmMzMmM6OlZhbHVlKCZkZXN0Xy5jb250ZW50c19baGVh
ZGVyX29mZnNldCs2XSwgMSArIGxlbik7CisgICAgY3JjID0gY3JjMzJjOjpNYXNrKGNyYyk7Cisg
ICAgRW5jb2RlRml4ZWQzMigmZGVzdF8uY29udGVudHNfW2hlYWRlcl9vZmZzZXRdLCBjcmMpOwor
ICB9CisKKyAgdm9pZCBGb3JjZUVycm9yKCkgeworICAgIHNvdXJjZV8uZm9yY2VfZXJyb3JfID0g
dHJ1ZTsKKyAgfQorCisgIHNpemVfdCBEcm9wcGVkQnl0ZXMoKSBjb25zdCB7CisgICAgcmV0dXJu
IHJlcG9ydF8uZHJvcHBlZF9ieXRlc187CisgIH0KKworICBzdGQ6OnN0cmluZyBSZXBvcnRNZXNz
YWdlKCkgY29uc3QgeworICAgIHJldHVybiByZXBvcnRfLm1lc3NhZ2VfOworICB9CisKKyAgLy8g
UmV0dXJucyBPSyBpZmYgcmVjb3JkZWQgZXJyb3IgbWVzc2FnZSBjb250YWlucyAibXNnIgorICBz
dGQ6OnN0cmluZyBNYXRjaEVycm9yKGNvbnN0IHN0ZDo6c3RyaW5nJiBtc2cpIGNvbnN0IHsKKyAg
ICBpZiAocmVwb3J0Xy5tZXNzYWdlXy5maW5kKG1zZykgPT0gc3RkOjpzdHJpbmc6Om5wb3MpIHsK
KyAgICAgIHJldHVybiByZXBvcnRfLm1lc3NhZ2VfOworICAgIH0gZWxzZSB7CisgICAgICByZXR1
cm4gIk9LIjsKKyAgICB9CisgIH0KKworICB2b2lkIFdyaXRlSW5pdGlhbE9mZnNldExvZygpIHsK
KyAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgeworICAgICAgc3RkOjpzdHJpbmcgcmVj
b3JkKGluaXRpYWxfb2Zmc2V0X3JlY29yZF9zaXplc19baV0sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8Y2hhcj4oJ2EnICsgaSkpOworICAgICAgV3JpdGUocmVjb3JkKTsK
KyAgICB9CisgIH0KKworICB2b2lkIENoZWNrT2Zmc2V0UGFzdEVuZFJldHVybnNOb1JlY29yZHMo
dWludDY0X3Qgb2Zmc2V0X3Bhc3RfZW5kKSB7CisgICAgV3JpdGVJbml0aWFsT2Zmc2V0TG9nKCk7
CisgICAgcmVhZGluZ18gPSB0cnVlOworICAgIHNvdXJjZV8uY29udGVudHNfID0gU2xpY2UoZGVz
dF8uY29udGVudHNfKTsKKyAgICBSZWFkZXIqIG9mZnNldF9yZWFkZXIgPSBuZXcgUmVhZGVyKCZz
b3VyY2VfLCAmcmVwb3J0XywgdHJ1ZS8qY2hlY2tzdW0qLywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFdyaXR0ZW5CeXRlcygpICsgb2Zmc2V0X3Bhc3RfZW5kKTsKKyAg
ICBTbGljZSByZWNvcmQ7CisgICAgc3RkOjpzdHJpbmcgc2NyYXRjaDsKKyAgICBBU1NFUlRfVFJV
RSghb2Zmc2V0X3JlYWRlci0+UmVhZFJlY29yZCgmcmVjb3JkLCAmc2NyYXRjaCkpOworICAgIGRl
bGV0ZSBvZmZzZXRfcmVhZGVyOworICB9CisKKyAgdm9pZCBDaGVja0luaXRpYWxPZmZzZXRSZWNv
cmQodWludDY0X3QgaW5pdGlhbF9vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBleHBlY3RlZF9yZWNvcmRfb2Zmc2V0KSB7CisgICAgV3JpdGVJbml0aWFsT2Zmc2V0
TG9nKCk7CisgICAgcmVhZGluZ18gPSB0cnVlOworICAgIHNvdXJjZV8uY29udGVudHNfID0gU2xp
Y2UoZGVzdF8uY29udGVudHNfKTsKKyAgICBSZWFkZXIqIG9mZnNldF9yZWFkZXIgPSBuZXcgUmVh
ZGVyKCZzb3VyY2VfLCAmcmVwb3J0XywgdHJ1ZS8qY2hlY2tzdW0qLywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxfb2Zmc2V0KTsKKyAgICBTbGljZSByZWNv
cmQ7CisgICAgc3RkOjpzdHJpbmcgc2NyYXRjaDsKKyAgICBBU1NFUlRfVFJVRShvZmZzZXRfcmVh
ZGVyLT5SZWFkUmVjb3JkKCZyZWNvcmQsICZzY3JhdGNoKSk7CisgICAgQVNTRVJUX0VRKGluaXRp
YWxfb2Zmc2V0X3JlY29yZF9zaXplc19bZXhwZWN0ZWRfcmVjb3JkX29mZnNldF0sCisgICAgICAg
ICAgICAgIHJlY29yZC5zaXplKCkpOworICAgIEFTU0VSVF9FUShpbml0aWFsX29mZnNldF9sYXN0
X3JlY29yZF9vZmZzZXRzX1tleHBlY3RlZF9yZWNvcmRfb2Zmc2V0XSwKKyAgICAgICAgICAgICAg
b2Zmc2V0X3JlYWRlci0+TGFzdFJlY29yZE9mZnNldCgpKTsKKyAgICBBU1NFUlRfRVEoKGNoYXIp
KCdhJyArIGV4cGVjdGVkX3JlY29yZF9vZmZzZXQpLCByZWNvcmQuZGF0YSgpWzBdKTsKKyAgICBk
ZWxldGUgb2Zmc2V0X3JlYWRlcjsKKyAgfQorCit9OworCitzaXplX3QgTG9nVGVzdDo6aW5pdGlh
bF9vZmZzZXRfcmVjb3JkX3NpemVzX1tdID0KKyAgICB7MTAwMDAsICAvLyBUd28gc2l6YWJsZSBy
ZWNvcmRzIGluIGZpcnN0IGJsb2NrCisgICAgIDEwMDAwLAorICAgICAyICogbG9nOjprQmxvY2tT
aXplIC0gMTAwMCwgIC8vIFNwYW4gdGhyZWUgYmxvY2tzCisgICAgIDF9OworCit1aW50NjRfdCBM
b2dUZXN0Ojppbml0aWFsX29mZnNldF9sYXN0X3JlY29yZF9vZmZzZXRzX1tdID0KKyAgICB7MCwK
KyAgICAga0hlYWRlclNpemUgKyAxMDAwMCwKKyAgICAgMiAqIChrSGVhZGVyU2l6ZSArIDEwMDAw
KSwKKyAgICAgMiAqIChrSGVhZGVyU2l6ZSArIDEwMDAwKSArCisgICAgICAgICAoMiAqIGxvZzo6
a0Jsb2NrU2l6ZSAtIDEwMDApICsgMyAqIGtIZWFkZXJTaXplfTsKKworCitURVNUKExvZ1Rlc3Qs
IEVtcHR5KSB7CisgIEFTU0VSVF9FUSgiRU9GIiwgUmVhZCgpKTsKK30KKworVEVTVChMb2dUZXN0
LCBSZWFkV3JpdGUpIHsKKyAgV3JpdGUoImZvbyIpOworICBXcml0ZSgiYmFyIik7CisgIFdyaXRl
KCIiKTsKKyAgV3JpdGUoInh4eHgiKTsKKyAgQVNTRVJUX0VRKCJmb28iLCBSZWFkKCkpOworICBB
U1NFUlRfRVEoImJhciIsIFJlYWQoKSk7CisgIEFTU0VSVF9FUSgiIiwgUmVhZCgpKTsKKyAgQVNT
RVJUX0VRKCJ4eHh4IiwgUmVhZCgpKTsKKyAgQVNTRVJUX0VRKCJFT0YiLCBSZWFkKCkpOworICBB
U1NFUlRfRVEoIkVPRiIsIFJlYWQoKSk7ICAvLyBNYWtlIHN1cmUgcmVhZHMgYXQgZW9mIHdvcmsK
K30KKworVEVTVChMb2dUZXN0LCBNYW55QmxvY2tzKSB7CisgIGZvciAoaW50IGkgPSAwOyBpIDwg
MTAwMDAwOyBpKyspIHsKKyAgICBXcml0ZShOdW1iZXJTdHJpbmcoaSkpOworICB9CisgIGZvciAo
aW50IGkgPSAwOyBpIDwgMTAwMDAwOyBpKyspIHsKKyAgICBBU1NFUlRfRVEoTnVtYmVyU3RyaW5n
KGkpLCBSZWFkKCkpOworICB9CisgIEFTU0VSVF9FUSgiRU9GIiwgUmVhZCgpKTsKK30KKworVEVT
VChMb2dUZXN0LCBGcmFnbWVudGF0aW9uKSB7CisgIFdyaXRlKCJzbWFsbCIpOworICBXcml0ZShC
aWdTdHJpbmcoIm1lZGl1bSIsIDUwMDAwKSk7CisgIFdyaXRlKEJpZ1N0cmluZygibGFyZ2UiLCAx
MDAwMDApKTsKKyAgQVNTRVJUX0VRKCJzbWFsbCIsIFJlYWQoKSk7CisgIEFTU0VSVF9FUShCaWdT
dHJpbmcoIm1lZGl1bSIsIDUwMDAwKSwgUmVhZCgpKTsKKyAgQVNTRVJUX0VRKEJpZ1N0cmluZygi
bGFyZ2UiLCAxMDAwMDApLCBSZWFkKCkpOworICBBU1NFUlRfRVEoIkVPRiIsIFJlYWQoKSk7Cit9
CisKK1RFU1QoTG9nVGVzdCwgTWFyZ2luYWxUcmFpbGVyKSB7CisgIC8vIE1ha2UgYSB0cmFpbGVy
IHRoYXQgaXMgZXhhY3RseSB0aGUgc2FtZSBsZW5ndGggYXMgYW4gZW1wdHkgcmVjb3JkLgorICBj
b25zdCBpbnQgbiA9IGtCbG9ja1NpemUgLSAyKmtIZWFkZXJTaXplOworICBXcml0ZShCaWdTdHJp
bmcoImZvbyIsIG4pKTsKKyAgQVNTRVJUX0VRKGtCbG9ja1NpemUgLSBrSGVhZGVyU2l6ZSwgV3Jp
dHRlbkJ5dGVzKCkpOworICBXcml0ZSgiIik7CisgIFdyaXRlKCJiYXIiKTsKKyAgQVNTRVJUX0VR
KEJpZ1N0cmluZygiZm9vIiwgbiksIFJlYWQoKSk7CisgIEFTU0VSVF9FUSgiIiwgUmVhZCgpKTsK
KyAgQVNTRVJUX0VRKCJiYXIiLCBSZWFkKCkpOworICBBU1NFUlRfRVEoIkVPRiIsIFJlYWQoKSk7
Cit9CisKK1RFU1QoTG9nVGVzdCwgTWFyZ2luYWxUcmFpbGVyMikgeworICAvLyBNYWtlIGEgdHJh
aWxlciB0aGF0IGlzIGV4YWN0bHkgdGhlIHNhbWUgbGVuZ3RoIGFzIGFuIGVtcHR5IHJlY29yZC4K
KyAgY29uc3QgaW50IG4gPSBrQmxvY2tTaXplIC0gMiprSGVhZGVyU2l6ZTsKKyAgV3JpdGUoQmln
U3RyaW5nKCJmb28iLCBuKSk7CisgIEFTU0VSVF9FUShrQmxvY2tTaXplIC0ga0hlYWRlclNpemUs
IFdyaXR0ZW5CeXRlcygpKTsKKyAgV3JpdGUoImJhciIpOworICBBU1NFUlRfRVEoQmlnU3RyaW5n
KCJmb28iLCBuKSwgUmVhZCgpKTsKKyAgQVNTRVJUX0VRKCJiYXIiLCBSZWFkKCkpOworICBBU1NF
UlRfRVEoIkVPRiIsIFJlYWQoKSk7CisgIEFTU0VSVF9FUSgwLCBEcm9wcGVkQnl0ZXMoKSk7Cisg
IEFTU0VSVF9FUSgiIiwgUmVwb3J0TWVzc2FnZSgpKTsKK30KKworVEVTVChMb2dUZXN0LCBTaG9y
dFRyYWlsZXIpIHsKKyAgY29uc3QgaW50IG4gPSBrQmxvY2tTaXplIC0gMiprSGVhZGVyU2l6ZSAr
IDQ7CisgIFdyaXRlKEJpZ1N0cmluZygiZm9vIiwgbikpOworICBBU1NFUlRfRVEoa0Jsb2NrU2l6
ZSAtIGtIZWFkZXJTaXplICsgNCwgV3JpdHRlbkJ5dGVzKCkpOworICBXcml0ZSgiIik7CisgIFdy
aXRlKCJiYXIiKTsKKyAgQVNTRVJUX0VRKEJpZ1N0cmluZygiZm9vIiwgbiksIFJlYWQoKSk7Cisg
IEFTU0VSVF9FUSgiIiwgUmVhZCgpKTsKKyAgQVNTRVJUX0VRKCJiYXIiLCBSZWFkKCkpOworICBB
U1NFUlRfRVEoIkVPRiIsIFJlYWQoKSk7Cit9CisKK1RFU1QoTG9nVGVzdCwgQWxpZ25lZEVvZikg
eworICBjb25zdCBpbnQgbiA9IGtCbG9ja1NpemUgLSAyKmtIZWFkZXJTaXplICsgNDsKKyAgV3Jp
dGUoQmlnU3RyaW5nKCJmb28iLCBuKSk7CisgIEFTU0VSVF9FUShrQmxvY2tTaXplIC0ga0hlYWRl
clNpemUgKyA0LCBXcml0dGVuQnl0ZXMoKSk7CisgIEFTU0VSVF9FUShCaWdTdHJpbmcoImZvbyIs
IG4pLCBSZWFkKCkpOworICBBU1NFUlRfRVEoIkVPRiIsIFJlYWQoKSk7Cit9CisKK1RFU1QoTG9n
VGVzdCwgUmFuZG9tUmVhZCkgeworICBjb25zdCBpbnQgTiA9IDUwMDsKKyAgUmFuZG9tIHdyaXRl
X3JuZCgzMDEpOworICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgeworICAgIFdyaXRlKFJh
bmRvbVNrZXdlZFN0cmluZyhpLCAmd3JpdGVfcm5kKSk7CisgIH0KKyAgUmFuZG9tIHJlYWRfcm5k
KDMwMSk7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CisgICAgQVNTRVJUX0VRKFJh
bmRvbVNrZXdlZFN0cmluZyhpLCAmcmVhZF9ybmQpLCBSZWFkKCkpOworICB9CisgIEFTU0VSVF9F
USgiRU9GIiwgUmVhZCgpKTsKK30KKworLy8gVGVzdHMgb2YgYWxsIHRoZSBlcnJvciBwYXRocyBp
biBsb2dfcmVhZGVyLmNjIGZvbGxvdzoKKworVEVTVChMb2dUZXN0LCBSZWFkRXJyb3IpIHsKKyAg
V3JpdGUoImZvbyIpOworICBGb3JjZUVycm9yKCk7CisgIEFTU0VSVF9FUSgiRU9GIiwgUmVhZCgp
KTsKKyAgQVNTRVJUX0VRKGtCbG9ja1NpemUsIERyb3BwZWRCeXRlcygpKTsKKyAgQVNTRVJUX0VR
KCJPSyIsIE1hdGNoRXJyb3IoInJlYWQgZXJyb3IiKSk7Cit9CisKK1RFU1QoTG9nVGVzdCwgQmFk
UmVjb3JkVHlwZSkgeworICBXcml0ZSgiZm9vIik7CisgIC8vIFR5cGUgaXMgc3RvcmVkIGluIGhl
YWRlcls2XQorICBJbmNyZW1lbnRCeXRlKDYsIDEwMCk7CisgIEZpeENoZWNrc3VtKDAsIDMpOwor
ICBBU1NFUlRfRVEoIkVPRiIsIFJlYWQoKSk7CisgIEFTU0VSVF9FUSgzLCBEcm9wcGVkQnl0ZXMo
KSk7CisgIEFTU0VSVF9FUSgiT0siLCBNYXRjaEVycm9yKCJ1bmtub3duIHJlY29yZCB0eXBlIikp
OworfQorCitURVNUKExvZ1Rlc3QsIFRydW5jYXRlZFRyYWlsaW5nUmVjb3JkKSB7CisgIFdyaXRl
KCJmb28iKTsKKyAgU2hyaW5rU2l6ZSg0KTsgICAvLyBEcm9wIGFsbCBwYXlsb2FkIGFzIHdlbGwg
YXMgYSBoZWFkZXIgYnl0ZQorICBBU1NFUlRfRVEoIkVPRiIsIFJlYWQoKSk7CisgIEFTU0VSVF9F
UShrSGVhZGVyU2l6ZSAtIDEsIERyb3BwZWRCeXRlcygpKTsKKyAgQVNTRVJUX0VRKCJPSyIsIE1h
dGNoRXJyb3IoInRydW5jYXRlZCByZWNvcmQgYXQgZW5kIG9mIGZpbGUiKSk7Cit9CisKK1RFU1Qo
TG9nVGVzdCwgQmFkTGVuZ3RoKSB7CisgIFdyaXRlKCJmb28iKTsKKyAgU2hyaW5rU2l6ZSgxKTsK
KyAgQVNTRVJUX0VRKCJFT0YiLCBSZWFkKCkpOworICBBU1NFUlRfRVEoa0hlYWRlclNpemUgKyAy
LCBEcm9wcGVkQnl0ZXMoKSk7CisgIEFTU0VSVF9FUSgiT0siLCBNYXRjaEVycm9yKCJiYWQgcmVj
b3JkIGxlbmd0aCIpKTsKK30KKworVEVTVChMb2dUZXN0LCBDaGVja3N1bU1pc21hdGNoKSB7Cisg
IFdyaXRlKCJmb28iKTsKKyAgSW5jcmVtZW50Qnl0ZSgwLCAxMCk7CisgIEFTU0VSVF9FUSgiRU9G
IiwgUmVhZCgpKTsKKyAgQVNTRVJUX0VRKDEwLCBEcm9wcGVkQnl0ZXMoKSk7CisgIEFTU0VSVF9F
USgiT0siLCBNYXRjaEVycm9yKCJjaGVja3N1bSBtaXNtYXRjaCIpKTsKK30KKworVEVTVChMb2dU
ZXN0LCBVbmV4cGVjdGVkTWlkZGxlVHlwZSkgeworICBXcml0ZSgiZm9vIik7CisgIFNldEJ5dGUo
Niwga01pZGRsZVR5cGUpOworICBGaXhDaGVja3N1bSgwLCAzKTsKKyAgQVNTRVJUX0VRKCJFT0Yi
LCBSZWFkKCkpOworICBBU1NFUlRfRVEoMywgRHJvcHBlZEJ5dGVzKCkpOworICBBU1NFUlRfRVEo
Ik9LIiwgTWF0Y2hFcnJvcigibWlzc2luZyBzdGFydCIpKTsKK30KKworVEVTVChMb2dUZXN0LCBV
bmV4cGVjdGVkTGFzdFR5cGUpIHsKKyAgV3JpdGUoImZvbyIpOworICBTZXRCeXRlKDYsIGtMYXN0
VHlwZSk7CisgIEZpeENoZWNrc3VtKDAsIDMpOworICBBU1NFUlRfRVEoIkVPRiIsIFJlYWQoKSk7
CisgIEFTU0VSVF9FUSgzLCBEcm9wcGVkQnl0ZXMoKSk7CisgIEFTU0VSVF9FUSgiT0siLCBNYXRj
aEVycm9yKCJtaXNzaW5nIHN0YXJ0IikpOworfQorCitURVNUKExvZ1Rlc3QsIFVuZXhwZWN0ZWRG
dWxsVHlwZSkgeworICBXcml0ZSgiZm9vIik7CisgIFdyaXRlKCJiYXIiKTsKKyAgU2V0Qnl0ZSg2
LCBrRmlyc3RUeXBlKTsKKyAgRml4Q2hlY2tzdW0oMCwgMyk7CisgIEFTU0VSVF9FUSgiYmFyIiwg
UmVhZCgpKTsKKyAgQVNTRVJUX0VRKCJFT0YiLCBSZWFkKCkpOworICBBU1NFUlRfRVEoMywgRHJv
cHBlZEJ5dGVzKCkpOworICBBU1NFUlRfRVEoIk9LIiwgTWF0Y2hFcnJvcigicGFydGlhbCByZWNv
cmQgd2l0aG91dCBlbmQiKSk7Cit9CisKK1RFU1QoTG9nVGVzdCwgVW5leHBlY3RlZEZpcnN0VHlw
ZSkgeworICBXcml0ZSgiZm9vIik7CisgIFdyaXRlKEJpZ1N0cmluZygiYmFyIiwgMTAwMDAwKSk7
CisgIFNldEJ5dGUoNiwga0ZpcnN0VHlwZSk7CisgIEZpeENoZWNrc3VtKDAsIDMpOworICBBU1NF
UlRfRVEoQmlnU3RyaW5nKCJiYXIiLCAxMDAwMDApLCBSZWFkKCkpOworICBBU1NFUlRfRVEoIkVP
RiIsIFJlYWQoKSk7CisgIEFTU0VSVF9FUSgzLCBEcm9wcGVkQnl0ZXMoKSk7CisgIEFTU0VSVF9F
USgiT0siLCBNYXRjaEVycm9yKCJwYXJ0aWFsIHJlY29yZCB3aXRob3V0IGVuZCIpKTsKK30KKwor
VEVTVChMb2dUZXN0LCBFcnJvckpvaW5zUmVjb3JkcykgeworICAvLyBDb25zaWRlciB0d28gZnJh
Z21lbnRlZCByZWNvcmRzOgorICAvLyAgICBmaXJzdChSMSkgbGFzdChSMSkgZmlyc3QoUjIpIGxh
c3QoUjIpCisgIC8vIHdoZXJlIHRoZSBtaWRkbGUgdHdvIGZyYWdtZW50cyBkaXNhcHBlYXIuICBX
ZSBkbyBub3Qgd2FudAorICAvLyBmaXJzdChSMSksbGFzdChSMikgdG8gZ2V0IGpvaW5lZCBhbmQg
cmV0dXJuZWQgYXMgYSB2YWxpZCByZWNvcmQuCisKKyAgLy8gV3JpdGUgcmVjb3JkcyB0aGF0IHNw
YW4gdHdvIGJsb2NrcworICBXcml0ZShCaWdTdHJpbmcoImZvbyIsIGtCbG9ja1NpemUpKTsKKyAg
V3JpdGUoQmlnU3RyaW5nKCJiYXIiLCBrQmxvY2tTaXplKSk7CisgIFdyaXRlKCJjb3JyZWN0Iik7
CisKKyAgLy8gV2lwZSB0aGUgbWlkZGxlIGJsb2NrCisgIGZvciAoaW50IG9mZnNldCA9IGtCbG9j
a1NpemU7IG9mZnNldCA8IDIqa0Jsb2NrU2l6ZTsgb2Zmc2V0KyspIHsKKyAgICBTZXRCeXRlKG9m
ZnNldCwgJ3gnKTsKKyAgfQorCisgIEFTU0VSVF9FUSgiY29ycmVjdCIsIFJlYWQoKSk7CisgIEFT
U0VSVF9FUSgiRU9GIiwgUmVhZCgpKTsKKyAgY29uc3QgaW50IGRyb3BwZWQgPSBEcm9wcGVkQnl0
ZXMoKTsKKyAgQVNTRVJUX0xFKGRyb3BwZWQsIDIqa0Jsb2NrU2l6ZSArIDEwMCk7CisgIEFTU0VS
VF9HRShkcm9wcGVkLCAyKmtCbG9ja1NpemUpOworfQorCitURVNUKExvZ1Rlc3QsIFJlYWRTdGFy
dCkgeworICBDaGVja0luaXRpYWxPZmZzZXRSZWNvcmQoMCwgMCk7Cit9CisKK1RFU1QoTG9nVGVz
dCwgUmVhZFNlY29uZE9uZU9mZikgeworICBDaGVja0luaXRpYWxPZmZzZXRSZWNvcmQoMSwgMSk7
Cit9CisKK1RFU1QoTG9nVGVzdCwgUmVhZFNlY29uZFRlblRob3VzYW5kKSB7CisgIENoZWNrSW5p
dGlhbE9mZnNldFJlY29yZCgxMDAwMCwgMSk7Cit9CisKK1RFU1QoTG9nVGVzdCwgUmVhZFNlY29u
ZFN0YXJ0KSB7CisgIENoZWNrSW5pdGlhbE9mZnNldFJlY29yZCgxMDAwNywgMSk7Cit9CisKK1RF
U1QoTG9nVGVzdCwgUmVhZFRoaXJkT25lT2ZmKSB7CisgIENoZWNrSW5pdGlhbE9mZnNldFJlY29y
ZCgxMDAwOCwgMik7Cit9CisKK1RFU1QoTG9nVGVzdCwgUmVhZFRoaXJkU3RhcnQpIHsKKyAgQ2hl
Y2tJbml0aWFsT2Zmc2V0UmVjb3JkKDIwMDE0LCAyKTsKK30KKworVEVTVChMb2dUZXN0LCBSZWFk
Rm91cnRoT25lT2ZmKSB7CisgIENoZWNrSW5pdGlhbE9mZnNldFJlY29yZCgyMDAxNSwgMyk7Cit9
CisKK1RFU1QoTG9nVGVzdCwgUmVhZEZvdXJ0aEZpcnN0QmxvY2tUcmFpbGVyKSB7CisgIENoZWNr
SW5pdGlhbE9mZnNldFJlY29yZChsb2c6OmtCbG9ja1NpemUgLSA0LCAzKTsKK30KKworVEVTVChM
b2dUZXN0LCBSZWFkRm91cnRoTWlkZGxlQmxvY2spIHsKKyAgQ2hlY2tJbml0aWFsT2Zmc2V0UmVj
b3JkKGxvZzo6a0Jsb2NrU2l6ZSArIDEsIDMpOworfQorCitURVNUKExvZ1Rlc3QsIFJlYWRGb3Vy
dGhMYXN0QmxvY2spIHsKKyAgQ2hlY2tJbml0aWFsT2Zmc2V0UmVjb3JkKDIgKiBsb2c6OmtCbG9j
a1NpemUgKyAxLCAzKTsKK30KKworVEVTVChMb2dUZXN0LCBSZWFkRm91cnRoU3RhcnQpIHsKKyAg
Q2hlY2tJbml0aWFsT2Zmc2V0UmVjb3JkKAorICAgICAgMiAqIChrSGVhZGVyU2l6ZSArIDEwMDAp
ICsgKDIgKiBsb2c6OmtCbG9ja1NpemUgLSAxMDAwKSArIDMgKiBrSGVhZGVyU2l6ZSwKKyAgICAg
IDMpOworfQorCitURVNUKExvZ1Rlc3QsIFJlYWRFbmQpIHsKKyAgQ2hlY2tPZmZzZXRQYXN0RW5k
UmV0dXJuc05vUmVjb3JkcygwKTsKK30KKworVEVTVChMb2dUZXN0LCBSZWFkUGFzdEVuZCkgewor
ICBDaGVja09mZnNldFBhc3RFbmRSZXR1cm5zTm9SZWNvcmRzKDUpOworfQorCit9ICAvLyBuYW1l
c3BhY2UgbG9nCit9ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgorCitpbnQgbWFpbihpbnQgYXJnYywg
Y2hhcioqIGFyZ3YpIHsKKyAgcmV0dXJuIGxldmVsZGI6OnRlc3Q6OlJ1bkFsbFRlc3RzKCk7Cit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2xvZ193cml0ZXIuY2Mg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2xvZ193cml0ZXIuY2MKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MmRhOTlhYzA4ODY2Mzk3MjcwNjYzYTEyMDMwNzU5NDQxNjJiYTI5MAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvbG9nX3dyaXRlci5jYwpAQCAtMCwwICsx
LDEwMyBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgor
CisjaW5jbHVkZSAiZGIvbG9nX3dyaXRlci5oIgorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5j
bHVkZSAibGV2ZWxkYi9lbnYuaCIKKyNpbmNsdWRlICJ1dGlsL2NvZGluZy5oIgorI2luY2x1ZGUg
InV0aWwvY3JjMzJjLmgiCisKK25hbWVzcGFjZSBsZXZlbGRiIHsKK25hbWVzcGFjZSBsb2cgewor
CitXcml0ZXI6OldyaXRlcihXcml0YWJsZUZpbGUqIGRlc3QpCisgICAgOiBkZXN0XyhkZXN0KSwK
KyAgICAgIGJsb2NrX29mZnNldF8oMCkgeworICBmb3IgKGludCBpID0gMDsgaSA8PSBrTWF4UmVj
b3JkVHlwZTsgaSsrKSB7CisgICAgY2hhciB0ID0gc3RhdGljX2Nhc3Q8Y2hhcj4oaSk7CisgICAg
dHlwZV9jcmNfW2ldID0gY3JjMzJjOjpWYWx1ZSgmdCwgMSk7CisgIH0KK30KKworV3JpdGVyOjp+
V3JpdGVyKCkgeworfQorCitTdGF0dXMgV3JpdGVyOjpBZGRSZWNvcmQoY29uc3QgU2xpY2UmIHNs
aWNlKSB7CisgIGNvbnN0IGNoYXIqIHB0ciA9IHNsaWNlLmRhdGEoKTsKKyAgc2l6ZV90IGxlZnQg
PSBzbGljZS5zaXplKCk7CisKKyAgLy8gRnJhZ21lbnQgdGhlIHJlY29yZCBpZiBuZWNlc3Nhcnkg
YW5kIGVtaXQgaXQuICBOb3RlIHRoYXQgaWYgc2xpY2UKKyAgLy8gaXMgZW1wdHksIHdlIHN0aWxs
IHdhbnQgdG8gaXRlcmF0ZSBvbmNlIHRvIGVtaXQgYSBzaW5nbGUKKyAgLy8gemVyby1sZW5ndGgg
cmVjb3JkCisgIFN0YXR1cyBzOworICBib29sIGJlZ2luID0gdHJ1ZTsKKyAgZG8geworICAgIGNv
bnN0IGludCBsZWZ0b3ZlciA9IGtCbG9ja1NpemUgLSBibG9ja19vZmZzZXRfOworICAgIGFzc2Vy
dChsZWZ0b3ZlciA+PSAwKTsKKyAgICBpZiAobGVmdG92ZXIgPCBrSGVhZGVyU2l6ZSkgeworICAg
ICAgLy8gU3dpdGNoIHRvIGEgbmV3IGJsb2NrCisgICAgICBpZiAobGVmdG92ZXIgPiAwKSB7Cisg
ICAgICAgIC8vIEZpbGwgdGhlIHRyYWlsZXIgKGxpdGVyYWwgYmVsb3cgcmVsaWVzIG9uIGtIZWFk
ZXJTaXplIGJlaW5nIDcpCisgICAgICAgIGFzc2VydChrSGVhZGVyU2l6ZSA9PSA3KTsKKyAgICAg
ICAgZGVzdF8tPkFwcGVuZChTbGljZSgiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIiwgbGVmdG92
ZXIpKTsKKyAgICAgIH0KKyAgICAgIGJsb2NrX29mZnNldF8gPSAwOworICAgIH0KKworICAgIC8v
IEludmFyaWFudDogd2UgbmV2ZXIgbGVhdmUgPCBrSGVhZGVyU2l6ZSBieXRlcyBpbiBhIGJsb2Nr
LgorICAgIGFzc2VydChrQmxvY2tTaXplIC0gYmxvY2tfb2Zmc2V0XyAtIGtIZWFkZXJTaXplID49
IDApOworCisgICAgY29uc3Qgc2l6ZV90IGF2YWlsID0ga0Jsb2NrU2l6ZSAtIGJsb2NrX29mZnNl
dF8gLSBrSGVhZGVyU2l6ZTsKKyAgICBjb25zdCBzaXplX3QgZnJhZ21lbnRfbGVuZ3RoID0gKGxl
ZnQgPCBhdmFpbCkgPyBsZWZ0IDogYXZhaWw7CisKKyAgICBSZWNvcmRUeXBlIHR5cGU7CisgICAg
Y29uc3QgYm9vbCBlbmQgPSAobGVmdCA9PSBmcmFnbWVudF9sZW5ndGgpOworICAgIGlmIChiZWdp
biAmJiBlbmQpIHsKKyAgICAgIHR5cGUgPSBrRnVsbFR5cGU7CisgICAgfSBlbHNlIGlmIChiZWdp
bikgeworICAgICAgdHlwZSA9IGtGaXJzdFR5cGU7CisgICAgfSBlbHNlIGlmIChlbmQpIHsKKyAg
ICAgIHR5cGUgPSBrTGFzdFR5cGU7CisgICAgfSBlbHNlIHsKKyAgICAgIHR5cGUgPSBrTWlkZGxl
VHlwZTsKKyAgICB9CisKKyAgICBzID0gRW1pdFBoeXNpY2FsUmVjb3JkKHR5cGUsIHB0ciwgZnJh
Z21lbnRfbGVuZ3RoKTsKKyAgICBwdHIgKz0gZnJhZ21lbnRfbGVuZ3RoOworICAgIGxlZnQgLT0g
ZnJhZ21lbnRfbGVuZ3RoOworICAgIGJlZ2luID0gZmFsc2U7CisgIH0gd2hpbGUgKHMub2soKSAm
JiBsZWZ0ID4gMCk7CisgIHJldHVybiBzOworfQorCitTdGF0dXMgV3JpdGVyOjpFbWl0UGh5c2lj
YWxSZWNvcmQoUmVjb3JkVHlwZSB0LCBjb25zdCBjaGFyKiBwdHIsIHNpemVfdCBuKSB7CisgIGFz
c2VydChuIDw9IDB4ZmZmZik7ICAvLyBNdXN0IGZpdCBpbiB0d28gYnl0ZXMKKyAgYXNzZXJ0KGJs
b2NrX29mZnNldF8gKyBrSGVhZGVyU2l6ZSArIG4gPD0ga0Jsb2NrU2l6ZSk7CisKKyAgLy8gRm9y
bWF0IHRoZSBoZWFkZXIKKyAgY2hhciBidWZba0hlYWRlclNpemVdOworICBidWZbNF0gPSBzdGF0
aWNfY2FzdDxjaGFyPihuICYgMHhmZik7CisgIGJ1Zls1XSA9IHN0YXRpY19jYXN0PGNoYXI+KG4g
Pj4gOCk7CisgIGJ1Zls2XSA9IHN0YXRpY19jYXN0PGNoYXI+KHQpOworCisgIC8vIENvbXB1dGUg
dGhlIGNyYyBvZiB0aGUgcmVjb3JkIHR5cGUgYW5kIHRoZSBwYXlsb2FkLgorICB1aW50MzJfdCBj
cmMgPSBjcmMzMmM6OkV4dGVuZCh0eXBlX2NyY19bdF0sIHB0ciwgbik7CisgIGNyYyA9IGNyYzMy
Yzo6TWFzayhjcmMpOyAgICAgICAgICAgICAgICAgLy8gQWRqdXN0IGZvciBzdG9yYWdlCisgIEVu
Y29kZUZpeGVkMzIoYnVmLCBjcmMpOworCisgIC8vIFdyaXRlIHRoZSBoZWFkZXIgYW5kIHRoZSBw
YXlsb2FkCisgIFN0YXR1cyBzID0gZGVzdF8tPkFwcGVuZChTbGljZShidWYsIGtIZWFkZXJTaXpl
KSk7CisgIGlmIChzLm9rKCkpIHsKKyAgICBzID0gZGVzdF8tPkFwcGVuZChTbGljZShwdHIsIG4p
KTsKKyAgICBpZiAocy5vaygpKSB7CisgICAgICBzID0gZGVzdF8tPkZsdXNoKCk7CisgICAgfQor
ICB9CisgIGJsb2NrX29mZnNldF8gKz0ga0hlYWRlclNpemUgKyBuOworICByZXR1cm4gczsKK30K
KworfSAgLy8gbmFtZXNwYWNlIGxvZworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvbG9nX3dyaXRlci5oIGIvU291cmNlL1Ro
aXJkUGFydHkvbGV2ZWxkYi9kYi9sb2dfd3JpdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTNhOTU0ZDk2NzMy
NTQyZmFjOWFlZjEzNDVlYmQ5NTIwNzVmNzM3YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xldmVsZGIvZGIvbG9nX3dyaXRlci5oCkBAIC0wLDAgKzEsNDggQEAKKy8vIENv
cHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRo
ZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2lmbmRlZiBTVE9S
QUdFX0xFVkVMREJfREJfTE9HX1dSSVRFUl9IXworI2RlZmluZSBTVE9SQUdFX0xFVkVMREJfREJf
TE9HX1dSSVRFUl9IXworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSAiZGIvbG9nX2Zv
cm1hdC5oIgorI2luY2x1ZGUgImxldmVsZGIvc2xpY2UuaCIKKyNpbmNsdWRlICJsZXZlbGRiL3N0
YXR1cy5oIgorCituYW1lc3BhY2UgbGV2ZWxkYiB7CisKK2NsYXNzIFdyaXRhYmxlRmlsZTsKKwor
bmFtZXNwYWNlIGxvZyB7CisKK2NsYXNzIFdyaXRlciB7CisgcHVibGljOgorICAvLyBDcmVhdGUg
YSB3cml0ZXIgdGhhdCB3aWxsIGFwcGVuZCBkYXRhIHRvICIqZGVzdCIuCisgIC8vICIqZGVzdCIg
bXVzdCBiZSBpbml0aWFsbHkgZW1wdHkuCisgIC8vICIqZGVzdCIgbXVzdCByZW1haW4gbGl2ZSB3
aGlsZSB0aGlzIFdyaXRlciBpcyBpbiB1c2UuCisgIGV4cGxpY2l0IFdyaXRlcihXcml0YWJsZUZp
bGUqIGRlc3QpOworICB+V3JpdGVyKCk7CisKKyAgU3RhdHVzIEFkZFJlY29yZChjb25zdCBTbGlj
ZSYgc2xpY2UpOworCisgcHJpdmF0ZToKKyAgV3JpdGFibGVGaWxlKiBkZXN0XzsKKyAgaW50IGJs
b2NrX29mZnNldF87ICAgICAgIC8vIEN1cnJlbnQgb2Zmc2V0IGluIGJsb2NrCisKKyAgLy8gY3Jj
MzJjIHZhbHVlcyBmb3IgYWxsIHN1cHBvcnRlZCByZWNvcmQgdHlwZXMuICBUaGVzZSBhcmUKKyAg
Ly8gcHJlLWNvbXB1dGVkIHRvIHJlZHVjZSB0aGUgb3ZlcmhlYWQgb2YgY29tcHV0aW5nIHRoZSBj
cmMgb2YgdGhlCisgIC8vIHJlY29yZCB0eXBlIHN0b3JlZCBpbiB0aGUgaGVhZGVyLgorICB1aW50
MzJfdCB0eXBlX2NyY19ba01heFJlY29yZFR5cGUgKyAxXTsKKworICBTdGF0dXMgRW1pdFBoeXNp
Y2FsUmVjb3JkKFJlY29yZFR5cGUgdHlwZSwgY29uc3QgY2hhciogcHRyLCBzaXplX3QgbGVuZ3Ro
KTsKKworICAvLyBObyBjb3B5aW5nIGFsbG93ZWQKKyAgV3JpdGVyKGNvbnN0IFdyaXRlciYpOwor
ICB2b2lkIG9wZXJhdG9yPShjb25zdCBXcml0ZXImKTsKK307CisKK30gIC8vIG5hbWVzcGFjZSBs
b2cKK30gIC8vIG5hbWVzcGFjZSBsZXZlbGRiCisKKyNlbmRpZiAgLy8gU1RPUkFHRV9MRVZFTERC
X0RCX0xPR19XUklURVJfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIv
ZGIvbWVtdGFibGUuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL21lbXRhYmxlLmNj
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmJmZWMwYTdlN2ExZGMyMTBiNDRkZDUyN2I5NTQ3ZTMzZTgyOWQ5YmIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL21lbXRhYmxlLmNj
CkBAIC0wLDAgKzEsMTQ1IEBACisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250
cmlidXRvcnMuCisKKyNpbmNsdWRlICJkYi9tZW10YWJsZS5oIgorI2luY2x1ZGUgImRiL2RiZm9y
bWF0LmgiCisjaW5jbHVkZSAibGV2ZWxkYi9jb21wYXJhdG9yLmgiCisjaW5jbHVkZSAibGV2ZWxk
Yi9lbnYuaCIKKyNpbmNsdWRlICJsZXZlbGRiL2l0ZXJhdG9yLmgiCisjaW5jbHVkZSAidXRpbC9j
b2RpbmcuaCIKKworbmFtZXNwYWNlIGxldmVsZGIgeworCitzdGF0aWMgU2xpY2UgR2V0TGVuZ3Ro
UHJlZml4ZWRTbGljZShjb25zdCBjaGFyKiBkYXRhKSB7CisgIHVpbnQzMl90IGxlbjsKKyAgY29u
c3QgY2hhciogcCA9IGRhdGE7CisgIHAgPSBHZXRWYXJpbnQzMlB0cihwLCBwICsgNSwgJmxlbik7
ICAvLyArNTogd2UgYXNzdW1lICJwIiBpcyBub3QgY29ycnVwdGVkCisgIHJldHVybiBTbGljZShw
LCBsZW4pOworfQorCitNZW1UYWJsZTo6TWVtVGFibGUoY29uc3QgSW50ZXJuYWxLZXlDb21wYXJh
dG9yJiBjbXApCisgICAgOiBjb21wYXJhdG9yXyhjbXApLAorICAgICAgcmVmc18oMCksCisgICAg
ICB0YWJsZV8oY29tcGFyYXRvcl8sICZhcmVuYV8pIHsKK30KKworTWVtVGFibGU6On5NZW1UYWJs
ZSgpIHsKKyAgYXNzZXJ0KHJlZnNfID09IDApOworfQorCitzaXplX3QgTWVtVGFibGU6OkFwcHJv
eGltYXRlTWVtb3J5VXNhZ2UoKSB7IHJldHVybiBhcmVuYV8uTWVtb3J5VXNhZ2UoKTsgfQorCitp
bnQgTWVtVGFibGU6OktleUNvbXBhcmF0b3I6Om9wZXJhdG9yKCkoY29uc3QgY2hhciogYXB0ciwg
Y29uc3QgY2hhciogYnB0cikKKyAgICBjb25zdCB7CisgIC8vIEludGVybmFsIGtleXMgYXJlIGVu
Y29kZWQgYXMgbGVuZ3RoLXByZWZpeGVkIHN0cmluZ3MuCisgIFNsaWNlIGEgPSBHZXRMZW5ndGhQ
cmVmaXhlZFNsaWNlKGFwdHIpOworICBTbGljZSBiID0gR2V0TGVuZ3RoUHJlZml4ZWRTbGljZShi
cHRyKTsKKyAgcmV0dXJuIGNvbXBhcmF0b3IuQ29tcGFyZShhLCBiKTsKK30KKworLy8gRW5jb2Rl
IGEgc3VpdGFibGUgaW50ZXJuYWwga2V5IHRhcmdldCBmb3IgInRhcmdldCIgYW5kIHJldHVybiBp
dC4KKy8vIFVzZXMgKnNjcmF0Y2ggYXMgc2NyYXRjaCBzcGFjZSwgYW5kIHRoZSByZXR1cm5lZCBw
b2ludGVyIHdpbGwgcG9pbnQKKy8vIGludG8gdGhpcyBzY3JhdGNoIHNwYWNlLgorc3RhdGljIGNv
bnN0IGNoYXIqIEVuY29kZUtleShzdGQ6OnN0cmluZyogc2NyYXRjaCwgY29uc3QgU2xpY2UmIHRh
cmdldCkgeworICBzY3JhdGNoLT5jbGVhcigpOworICBQdXRWYXJpbnQzMihzY3JhdGNoLCB0YXJn
ZXQuc2l6ZSgpKTsKKyAgc2NyYXRjaC0+YXBwZW5kKHRhcmdldC5kYXRhKCksIHRhcmdldC5zaXpl
KCkpOworICByZXR1cm4gc2NyYXRjaC0+ZGF0YSgpOworfQorCitjbGFzcyBNZW1UYWJsZUl0ZXJh
dG9yOiBwdWJsaWMgSXRlcmF0b3IgeworIHB1YmxpYzoKKyAgZXhwbGljaXQgTWVtVGFibGVJdGVy
YXRvcihNZW1UYWJsZTo6VGFibGUqIHRhYmxlKSA6IGl0ZXJfKHRhYmxlKSB7IH0KKworICB2aXJ0
dWFsIGJvb2wgVmFsaWQoKSBjb25zdCB7IHJldHVybiBpdGVyXy5WYWxpZCgpOyB9CisgIHZpcnR1
YWwgdm9pZCBTZWVrKGNvbnN0IFNsaWNlJiBrKSB7IGl0ZXJfLlNlZWsoRW5jb2RlS2V5KCZ0bXBf
LCBrKSk7IH0KKyAgdmlydHVhbCB2b2lkIFNlZWtUb0ZpcnN0KCkgeyBpdGVyXy5TZWVrVG9GaXJz
dCgpOyB9CisgIHZpcnR1YWwgdm9pZCBTZWVrVG9MYXN0KCkgeyBpdGVyXy5TZWVrVG9MYXN0KCk7
IH0KKyAgdmlydHVhbCB2b2lkIE5leHQoKSB7IGl0ZXJfLk5leHQoKTsgfQorICB2aXJ0dWFsIHZv
aWQgUHJldigpIHsgaXRlcl8uUHJldigpOyB9CisgIHZpcnR1YWwgU2xpY2Uga2V5KCkgY29uc3Qg
eyByZXR1cm4gR2V0TGVuZ3RoUHJlZml4ZWRTbGljZShpdGVyXy5rZXkoKSk7IH0KKyAgdmlydHVh
bCBTbGljZSB2YWx1ZSgpIGNvbnN0IHsKKyAgICBTbGljZSBrZXlfc2xpY2UgPSBHZXRMZW5ndGhQ
cmVmaXhlZFNsaWNlKGl0ZXJfLmtleSgpKTsKKyAgICByZXR1cm4gR2V0TGVuZ3RoUHJlZml4ZWRT
bGljZShrZXlfc2xpY2UuZGF0YSgpICsga2V5X3NsaWNlLnNpemUoKSk7CisgIH0KKworICB2aXJ0
dWFsIFN0YXR1cyBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBTdGF0dXM6Ok9LKCk7IH0KKworIHBy
aXZhdGU6CisgIE1lbVRhYmxlOjpUYWJsZTo6SXRlcmF0b3IgaXRlcl87CisgIHN0ZDo6c3RyaW5n
IHRtcF87ICAgICAgIC8vIEZvciBwYXNzaW5nIHRvIEVuY29kZUtleQorCisgIC8vIE5vIGNvcHlp
bmcgYWxsb3dlZAorICBNZW1UYWJsZUl0ZXJhdG9yKGNvbnN0IE1lbVRhYmxlSXRlcmF0b3ImKTsK
KyAgdm9pZCBvcGVyYXRvcj0oY29uc3QgTWVtVGFibGVJdGVyYXRvciYpOworfTsKKworSXRlcmF0
b3IqIE1lbVRhYmxlOjpOZXdJdGVyYXRvcigpIHsKKyAgcmV0dXJuIG5ldyBNZW1UYWJsZUl0ZXJh
dG9yKCZ0YWJsZV8pOworfQorCit2b2lkIE1lbVRhYmxlOjpBZGQoU2VxdWVuY2VOdW1iZXIgcywg
VmFsdWVUeXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICAgY29uc3QgU2xpY2UmIGtleSwKKyAg
ICAgICAgICAgICAgICAgICBjb25zdCBTbGljZSYgdmFsdWUpIHsKKyAgLy8gRm9ybWF0IG9mIGFu
IGVudHJ5IGlzIGNvbmNhdGVuYXRpb24gb2Y6CisgIC8vICBrZXlfc2l6ZSAgICAgOiB2YXJpbnQz
MiBvZiBpbnRlcm5hbF9rZXkuc2l6ZSgpCisgIC8vICBrZXkgYnl0ZXMgICAgOiBjaGFyW2ludGVy
bmFsX2tleS5zaXplKCldCisgIC8vICB2YWx1ZV9zaXplICAgOiB2YXJpbnQzMiBvZiB2YWx1ZS5z
aXplKCkKKyAgLy8gIHZhbHVlIGJ5dGVzICA6IGNoYXJbdmFsdWUuc2l6ZSgpXQorICBzaXplX3Qg
a2V5X3NpemUgPSBrZXkuc2l6ZSgpOworICBzaXplX3QgdmFsX3NpemUgPSB2YWx1ZS5zaXplKCk7
CisgIHNpemVfdCBpbnRlcm5hbF9rZXlfc2l6ZSA9IGtleV9zaXplICsgODsKKyAgY29uc3Qgc2l6
ZV90IGVuY29kZWRfbGVuID0KKyAgICAgIFZhcmludExlbmd0aChpbnRlcm5hbF9rZXlfc2l6ZSkg
KyBpbnRlcm5hbF9rZXlfc2l6ZSArCisgICAgICBWYXJpbnRMZW5ndGgodmFsX3NpemUpICsgdmFs
X3NpemU7CisgIGNoYXIqIGJ1ZiA9IGFyZW5hXy5BbGxvY2F0ZShlbmNvZGVkX2xlbik7CisgIGNo
YXIqIHAgPSBFbmNvZGVWYXJpbnQzMihidWYsIGludGVybmFsX2tleV9zaXplKTsKKyAgbWVtY3B5
KHAsIGtleS5kYXRhKCksIGtleV9zaXplKTsKKyAgcCArPSBrZXlfc2l6ZTsKKyAgRW5jb2RlRml4
ZWQ2NChwLCAocyA8PCA4KSB8IHR5cGUpOworICBwICs9IDg7CisgIHAgPSBFbmNvZGVWYXJpbnQz
MihwLCB2YWxfc2l6ZSk7CisgIG1lbWNweShwLCB2YWx1ZS5kYXRhKCksIHZhbF9zaXplKTsKKyAg
YXNzZXJ0KChwICsgdmFsX3NpemUpIC0gYnVmID09IGVuY29kZWRfbGVuKTsKKyAgdGFibGVfLklu
c2VydChidWYpOworfQorCitib29sIE1lbVRhYmxlOjpHZXQoY29uc3QgTG9va3VwS2V5JiBrZXks
IHN0ZDo6c3RyaW5nKiB2YWx1ZSwgU3RhdHVzKiBzKSB7CisgIFNsaWNlIG1lbWtleSA9IGtleS5t
ZW10YWJsZV9rZXkoKTsKKyAgVGFibGU6Okl0ZXJhdG9yIGl0ZXIoJnRhYmxlXyk7CisgIGl0ZXIu
U2VlayhtZW1rZXkuZGF0YSgpKTsKKyAgaWYgKGl0ZXIuVmFsaWQoKSkgeworICAgIC8vIGVudHJ5
IGZvcm1hdCBpczoKKyAgICAvLyAgICBrbGVuZ3RoICB2YXJpbnQzMgorICAgIC8vICAgIHVzZXJr
ZXkgIGNoYXJba2xlbmd0aF0KKyAgICAvLyAgICB0YWcgICAgICB1aW50NjQKKyAgICAvLyAgICB2
bGVuZ3RoICB2YXJpbnQzMgorICAgIC8vICAgIHZhbHVlICAgIGNoYXJbdmxlbmd0aF0KKyAgICAv
LyBDaGVjayB0aGF0IGl0IGJlbG9uZ3MgdG8gc2FtZSB1c2VyIGtleS4gIFdlIGRvIG5vdCBjaGVj
ayB0aGUKKyAgICAvLyBzZXF1ZW5jZSBudW1iZXIgc2luY2UgdGhlIFNlZWsoKSBjYWxsIGFib3Zl
IHNob3VsZCBoYXZlIHNraXBwZWQKKyAgICAvLyBhbGwgZW50cmllcyB3aXRoIG92ZXJseSBsYXJn
ZSBzZXF1ZW5jZSBudW1iZXJzLgorICAgIGNvbnN0IGNoYXIqIGVudHJ5ID0gaXRlci5rZXkoKTsK
KyAgICB1aW50MzJfdCBrZXlfbGVuZ3RoOworICAgIGNvbnN0IGNoYXIqIGtleV9wdHIgPSBHZXRW
YXJpbnQzMlB0cihlbnRyeSwgZW50cnkrNSwgJmtleV9sZW5ndGgpOworICAgIGlmIChjb21wYXJh
dG9yXy5jb21wYXJhdG9yLnVzZXJfY29tcGFyYXRvcigpLT5Db21wYXJlKAorICAgICAgICAgICAg
U2xpY2Uoa2V5X3B0ciwga2V5X2xlbmd0aCAtIDgpLAorICAgICAgICAgICAga2V5LnVzZXJfa2V5
KCkpID09IDApIHsKKyAgICAgIC8vIENvcnJlY3QgdXNlciBrZXkKKyAgICAgIGNvbnN0IHVpbnQ2
NF90IHRhZyA9IERlY29kZUZpeGVkNjQoa2V5X3B0ciArIGtleV9sZW5ndGggLSA4KTsKKyAgICAg
IHN3aXRjaCAoc3RhdGljX2Nhc3Q8VmFsdWVUeXBlPih0YWcgJiAweGZmKSkgeworICAgICAgICBj
YXNlIGtUeXBlVmFsdWU6IHsKKyAgICAgICAgICBTbGljZSB2ID0gR2V0TGVuZ3RoUHJlZml4ZWRT
bGljZShrZXlfcHRyICsga2V5X2xlbmd0aCk7CisgICAgICAgICAgdmFsdWUtPmFzc2lnbih2LmRh
dGEoKSwgdi5zaXplKCkpOworICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
ICAgIGNhc2Uga1R5cGVEZWxldGlvbjoKKyAgICAgICAgICAqcyA9IFN0YXR1czo6Tm90Rm91bmQo
U2xpY2UoKSk7CisgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9CisgICAgfQorICB9Cisg
IHJldHVybiBmYWxzZTsKK30KKworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvbWVtdGFibGUuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xldmVsZGIvZGIvbWVtdGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MmU5MGJiMDk5ZjMzNTY1MjBj
NDJkNmJiODg3YjJhMzVjNmJiZTM5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvbGV2ZWxkYi9kYi9tZW10YWJsZS5oCkBAIC0wLDAgKzEsOTEgQEAKKy8vIENvcHlyaWdodCAo
YykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JT
IGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2lmbmRlZiBTVE9SQUdFX0xFVkVM
REJfREJfTUVNVEFCTEVfSF8KKyNkZWZpbmUgU1RPUkFHRV9MRVZFTERCX0RCX01FTVRBQkxFX0hf
CisKKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSAibGV2ZWxkYi9kYi5oIgorI2luY2x1ZGUg
ImRiL2RiZm9ybWF0LmgiCisjaW5jbHVkZSAiZGIvc2tpcGxpc3QuaCIKKyNpbmNsdWRlICJ1dGls
L2FyZW5hLmgiCisKK25hbWVzcGFjZSBsZXZlbGRiIHsKKworY2xhc3MgSW50ZXJuYWxLZXlDb21w
YXJhdG9yOworY2xhc3MgTXV0ZXg7CitjbGFzcyBNZW1UYWJsZUl0ZXJhdG9yOworCitjbGFzcyBN
ZW1UYWJsZSB7CisgcHVibGljOgorICAvLyBNZW1UYWJsZXMgYXJlIHJlZmVyZW5jZSBjb3VudGVk
LiAgVGhlIGluaXRpYWwgcmVmZXJlbmNlIGNvdW50CisgIC8vIGlzIHplcm8gYW5kIHRoZSBjYWxs
ZXIgbXVzdCBjYWxsIFJlZigpIGF0IGxlYXN0IG9uY2UuCisgIGV4cGxpY2l0IE1lbVRhYmxlKGNv
bnN0IEludGVybmFsS2V5Q29tcGFyYXRvciYgY29tcGFyYXRvcik7CisKKyAgLy8gSW5jcmVhc2Ug
cmVmZXJlbmNlIGNvdW50LgorICB2b2lkIFJlZigpIHsgKytyZWZzXzsgfQorCisgIC8vIERyb3Ag
cmVmZXJlbmNlIGNvdW50LiAgRGVsZXRlIGlmIG5vIG1vcmUgcmVmZXJlbmNlcyBleGlzdC4KKyAg
dm9pZCBVbnJlZigpIHsKKyAgICAtLXJlZnNfOworICAgIGFzc2VydChyZWZzXyA+PSAwKTsKKyAg
ICBpZiAocmVmc18gPD0gMCkgeworICAgICAgZGVsZXRlIHRoaXM7CisgICAgfQorICB9CisKKyAg
Ly8gUmV0dXJucyBhbiBlc3RpbWF0ZSBvZiB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9mIGRhdGEgaW4g
dXNlIGJ5IHRoaXMKKyAgLy8gZGF0YSBzdHJ1Y3R1cmUuCisgIC8vCisgIC8vIFJFUVVJUkVTOiBl
eHRlcm5hbCBzeW5jaHJvbml6YXRpb24gdG8gcHJldmVudCBzaW11bHRhbmVvdXMKKyAgLy8gb3Bl
cmF0aW9ucyBvbiB0aGUgc2FtZSBNZW1UYWJsZS4KKyAgc2l6ZV90IEFwcHJveGltYXRlTWVtb3J5
VXNhZ2UoKTsKKworICAvLyBSZXR1cm4gYW4gaXRlcmF0b3IgdGhhdCB5aWVsZHMgdGhlIGNvbnRl
bnRzIG9mIHRoZSBtZW10YWJsZS4KKyAgLy8KKyAgLy8gVGhlIGNhbGxlciBtdXN0IGVuc3VyZSB0
aGF0IHRoZSB1bmRlcmx5aW5nIE1lbVRhYmxlIHJlbWFpbnMgbGl2ZQorICAvLyB3aGlsZSB0aGUg
cmV0dXJuZWQgaXRlcmF0b3IgaXMgbGl2ZS4gIFRoZSBrZXlzIHJldHVybmVkIGJ5IHRoaXMKKyAg
Ly8gaXRlcmF0b3IgYXJlIGludGVybmFsIGtleXMgZW5jb2RlZCBieSBBcHBlbmRJbnRlcm5hbEtl
eSBpbiB0aGUKKyAgLy8gZGIvZm9ybWF0LntoLGNjfSBtb2R1bGUuCisgIEl0ZXJhdG9yKiBOZXdJ
dGVyYXRvcigpOworCisgIC8vIEFkZCBhbiBlbnRyeSBpbnRvIG1lbXRhYmxlIHRoYXQgbWFwcyBr
ZXkgdG8gdmFsdWUgYXQgdGhlCisgIC8vIHNwZWNpZmllZCBzZXF1ZW5jZSBudW1iZXIgYW5kIHdp
dGggdGhlIHNwZWNpZmllZCB0eXBlLgorICAvLyBUeXBpY2FsbHkgdmFsdWUgd2lsbCBiZSBlbXB0
eSBpZiB0eXBlPT1rVHlwZURlbGV0aW9uLgorICB2b2lkIEFkZChTZXF1ZW5jZU51bWJlciBzZXEs
IFZhbHVlVHlwZSB0eXBlLAorICAgICAgICAgICBjb25zdCBTbGljZSYga2V5LAorICAgICAgICAg
ICBjb25zdCBTbGljZSYgdmFsdWUpOworCisgIC8vIElmIG1lbXRhYmxlIGNvbnRhaW5zIGEgdmFs
dWUgZm9yIGtleSwgc3RvcmUgaXQgaW4gKnZhbHVlIGFuZCByZXR1cm4gdHJ1ZS4KKyAgLy8gSWYg
bWVtdGFibGUgY29udGFpbnMgYSBkZWxldGlvbiBmb3Iga2V5LCBzdG9yZSBhIE5vdEZvdW5kKCkg
ZXJyb3IKKyAgLy8gaW4gKnN0YXR1cyBhbmQgcmV0dXJuIHRydWUuCisgIC8vIEVsc2UsIHJldHVy
biBmYWxzZS4KKyAgYm9vbCBHZXQoY29uc3QgTG9va3VwS2V5JiBrZXksIHN0ZDo6c3RyaW5nKiB2
YWx1ZSwgU3RhdHVzKiBzKTsKKworIHByaXZhdGU6CisgIH5NZW1UYWJsZSgpOyAgLy8gUHJpdmF0
ZSBzaW5jZSBvbmx5IFVucmVmKCkgc2hvdWxkIGJlIHVzZWQgdG8gZGVsZXRlIGl0CisKKyAgc3Ry
dWN0IEtleUNvbXBhcmF0b3IgeworICAgIGNvbnN0IEludGVybmFsS2V5Q29tcGFyYXRvciBjb21w
YXJhdG9yOworICAgIGV4cGxpY2l0IEtleUNvbXBhcmF0b3IoY29uc3QgSW50ZXJuYWxLZXlDb21w
YXJhdG9yJiBjKSA6IGNvbXBhcmF0b3IoYykgeyB9CisgICAgaW50IG9wZXJhdG9yKCkoY29uc3Qg
Y2hhciogYSwgY29uc3QgY2hhciogYikgY29uc3Q7CisgIH07CisgIGZyaWVuZCBjbGFzcyBNZW1U
YWJsZUl0ZXJhdG9yOworICBmcmllbmQgY2xhc3MgTWVtVGFibGVCYWNrd2FyZEl0ZXJhdG9yOwor
CisgIHR5cGVkZWYgU2tpcExpc3Q8Y29uc3QgY2hhciosIEtleUNvbXBhcmF0b3I+IFRhYmxlOwor
CisgIEtleUNvbXBhcmF0b3IgY29tcGFyYXRvcl87CisgIGludCByZWZzXzsKKyAgQXJlbmEgYXJl
bmFfOworICBUYWJsZSB0YWJsZV87CisKKyAgLy8gTm8gY29weWluZyBhbGxvd2VkCisgIE1lbVRh
YmxlKGNvbnN0IE1lbVRhYmxlJik7CisgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IE1lbVRhYmxlJik7
Cit9OworCit9ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgorCisjZW5kaWYgIC8vIFNUT1JBR0VfTEVW
RUxEQl9EQl9NRU1UQUJMRV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxk
Yi9kYi9yZXBhaXIuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL3JlcGFpci5jYwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4wMjJkNTJmM2RlYmUwYzBlODlhNjgyNWNhMzc3OGM1ODk0YzM3ODNjCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9yZXBhaXIuY2MKQEAg
LTAsMCArMSwzODkgQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1
dG9ycy4KKy8vCisvLyBXZSByZWNvdmVyIHRoZSBjb250ZW50cyBvZiB0aGUgZGVzY3JpcHRvciBm
cm9tIHRoZSBvdGhlciBmaWxlcyB3ZSBmaW5kLgorLy8gKDEpIEFueSBsb2cgZmlsZXMgYXJlIGZp
cnN0IGNvbnZlcnRlZCB0byB0YWJsZXMKKy8vICgyKSBXZSBzY2FuIGV2ZXJ5IHRhYmxlIHRvIGNv
bXB1dGUKKy8vICAgICAoYSkgc21hbGxlc3QvbGFyZ2VzdCBmb3IgdGhlIHRhYmxlCisvLyAgICAg
KGIpIGxhcmdlc3Qgc2VxdWVuY2UgbnVtYmVyIGluIHRoZSB0YWJsZQorLy8gKDMpIFdlIGdlbmVy
YXRlIGRlc2NyaXB0b3IgY29udGVudHM6CisvLyAgICAgIC0gbG9nIG51bWJlciBpcyBzZXQgdG8g
emVybworLy8gICAgICAtIG5leHQtZmlsZS1udW1iZXIgaXMgc2V0IHRvIDEgKyBsYXJnZXN0IGZp
bGUgbnVtYmVyIHdlIGZvdW5kCisvLyAgICAgIC0gbGFzdC1zZXF1ZW5jZS1udW1iZXIgaXMgc2V0
IHRvIGxhcmdlc3Qgc2VxdWVuY2UjIGZvdW5kIGFjcm9zcworLy8gICAgICAgIGFsbCB0YWJsZXMg
KHNlZSAyYykKKy8vICAgICAgLSBjb21wYWN0aW9uIHBvaW50ZXJzIGFyZSBjbGVhcmVkCisvLyAg
ICAgIC0gZXZlcnkgdGFibGUgZmlsZSBpcyBhZGRlZCBhdCBsZXZlbCAwCisvLworLy8gUG9zc2li
bGUgb3B0aW1pemF0aW9uIDE6CisvLyAgIChhKSBDb21wdXRlIHRvdGFsIHNpemUgYW5kIHVzZSB0
byBwaWNrIGFwcHJvcHJpYXRlIG1heC1sZXZlbCBNCisvLyAgIChiKSBTb3J0IHRhYmxlcyBieSBs
YXJnZXN0IHNlcXVlbmNlIyBpbiB0aGUgdGFibGUKKy8vICAgKGMpIEZvciBlYWNoIHRhYmxlOiBp
ZiBpdCBvdmVybGFwcyBlYXJsaWVyIHRhYmxlLCBwbGFjZSBpbiBsZXZlbC0wLAorLy8gICAgICAg
ZWxzZSBwbGFjZSBpbiBsZXZlbC1NLgorLy8gUG9zc2libGUgb3B0aW1pemF0aW9uIDI6CisvLyAg
IFN0b3JlIHBlci10YWJsZSBtZXRhZGF0YSAoc21hbGxlc3QsIGxhcmdlc3QsIGxhcmdlc3Qtc2Vx
IywgLi4uKQorLy8gICBpbiB0aGUgdGFibGUncyBtZXRhIHNlY3Rpb24gdG8gc3BlZWQgdXAgU2Nh
blRhYmxlLgorCisjaW5jbHVkZSAiZGIvYnVpbGRlci5oIgorI2luY2x1ZGUgImRiL2RiX2ltcGwu
aCIKKyNpbmNsdWRlICJkYi9kYmZvcm1hdC5oIgorI2luY2x1ZGUgImRiL2ZpbGVuYW1lLmgiCisj
aW5jbHVkZSAiZGIvbG9nX3JlYWRlci5oIgorI2luY2x1ZGUgImRiL2xvZ193cml0ZXIuaCIKKyNp
bmNsdWRlICJkYi9tZW10YWJsZS5oIgorI2luY2x1ZGUgImRiL3RhYmxlX2NhY2hlLmgiCisjaW5j
bHVkZSAiZGIvdmVyc2lvbl9lZGl0LmgiCisjaW5jbHVkZSAiZGIvd3JpdGVfYmF0Y2hfaW50ZXJu
YWwuaCIKKyNpbmNsdWRlICJsZXZlbGRiL2NvbXBhcmF0b3IuaCIKKyNpbmNsdWRlICJsZXZlbGRi
L2RiLmgiCisjaW5jbHVkZSAibGV2ZWxkYi9lbnYuaCIKKworbmFtZXNwYWNlIGxldmVsZGIgewor
CituYW1lc3BhY2UgeworCitjbGFzcyBSZXBhaXJlciB7CisgcHVibGljOgorICBSZXBhaXJlcihj
b25zdCBzdGQ6OnN0cmluZyYgZGJuYW1lLCBjb25zdCBPcHRpb25zJiBvcHRpb25zKQorICAgICAg
OiBkYm5hbWVfKGRibmFtZSksCisgICAgICAgIGVudl8ob3B0aW9ucy5lbnYpLAorICAgICAgICBp
Y21wXyhvcHRpb25zLmNvbXBhcmF0b3IpLAorICAgICAgICBpcG9saWN5XyhvcHRpb25zLmZpbHRl
cl9wb2xpY3kpLAorICAgICAgICBvcHRpb25zXyhTYW5pdGl6ZU9wdGlvbnMoZGJuYW1lLCAmaWNt
cF8sICZpcG9saWN5Xywgb3B0aW9ucykpLAorICAgICAgICBvd25zX2luZm9fbG9nXyhvcHRpb25z
Xy5pbmZvX2xvZyAhPSBvcHRpb25zLmluZm9fbG9nKSwKKyAgICAgICAgb3duc19jYWNoZV8ob3B0
aW9uc18uYmxvY2tfY2FjaGUgIT0gb3B0aW9ucy5ibG9ja19jYWNoZSksCisgICAgICAgIG5leHRf
ZmlsZV9udW1iZXJfKDEpIHsKKyAgICAvLyBUYWJsZUNhY2hlIGNhbiBiZSBzbWFsbCBzaW5jZSB3
ZSBleHBlY3QgZWFjaCB0YWJsZSB0byBiZSBvcGVuZWQgb25jZS4KKyAgICB0YWJsZV9jYWNoZV8g
PSBuZXcgVGFibGVDYWNoZShkYm5hbWVfLCAmb3B0aW9uc18sIDEwKTsKKyAgfQorCisgIH5SZXBh
aXJlcigpIHsKKyAgICBkZWxldGUgdGFibGVfY2FjaGVfOworICAgIGlmIChvd25zX2luZm9fbG9n
XykgeworICAgICAgZGVsZXRlIG9wdGlvbnNfLmluZm9fbG9nOworICAgIH0KKyAgICBpZiAob3du
c19jYWNoZV8pIHsKKyAgICAgIGRlbGV0ZSBvcHRpb25zXy5ibG9ja19jYWNoZTsKKyAgICB9Cisg
IH0KKworICBTdGF0dXMgUnVuKCkgeworICAgIFN0YXR1cyBzdGF0dXMgPSBGaW5kRmlsZXMoKTsK
KyAgICBpZiAoc3RhdHVzLm9rKCkpIHsKKyAgICAgIENvbnZlcnRMb2dGaWxlc1RvVGFibGVzKCk7
CisgICAgICBFeHRyYWN0TWV0YURhdGEoKTsKKyAgICAgIHN0YXR1cyA9IFdyaXRlRGVzY3JpcHRv
cigpOworICAgIH0KKyAgICBpZiAoc3RhdHVzLm9rKCkpIHsKKyAgICAgIHVuc2lnbmVkIGxvbmcg
bG9uZyBieXRlcyA9IDA7CisgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRhYmxlc18uc2l6
ZSgpOyBpKyspIHsKKyAgICAgICAgYnl0ZXMgKz0gdGFibGVzX1tpXS5tZXRhLmZpbGVfc2l6ZTsK
KyAgICAgIH0KKyAgICAgIExvZyhvcHRpb25zXy5pbmZvX2xvZywKKyAgICAgICAgICAiKioqKiBS
ZXBhaXJlZCBsZXZlbGRiICVzOyAiCisgICAgICAgICAgInJlY292ZXJlZCAlZCBmaWxlczsgJWxs
dSBieXRlcy4gIgorICAgICAgICAgICJTb21lIGRhdGEgbWF5IGhhdmUgYmVlbiBsb3N0LiAiCisg
ICAgICAgICAgIioqKioiLAorICAgICAgICAgIGRibmFtZV8uY19zdHIoKSwKKyAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQ+KHRhYmxlc18uc2l6ZSgpKSwKKyAgICAgICAgICBieXRlcyk7CisgICAg
fQorICAgIHJldHVybiBzdGF0dXM7CisgIH0KKworIHByaXZhdGU6CisgIHN0cnVjdCBUYWJsZUlu
Zm8geworICAgIEZpbGVNZXRhRGF0YSBtZXRhOworICAgIFNlcXVlbmNlTnVtYmVyIG1heF9zZXF1
ZW5jZTsKKyAgfTsKKworICBzdGQ6OnN0cmluZyBjb25zdCBkYm5hbWVfOworICBFbnYqIGNvbnN0
IGVudl87CisgIEludGVybmFsS2V5Q29tcGFyYXRvciBjb25zdCBpY21wXzsKKyAgSW50ZXJuYWxG
aWx0ZXJQb2xpY3kgY29uc3QgaXBvbGljeV87CisgIE9wdGlvbnMgY29uc3Qgb3B0aW9uc187Cisg
IGJvb2wgb3duc19pbmZvX2xvZ187CisgIGJvb2wgb3duc19jYWNoZV87CisgIFRhYmxlQ2FjaGUq
IHRhYmxlX2NhY2hlXzsKKyAgVmVyc2lvbkVkaXQgZWRpdF87CisKKyAgc3RkOjp2ZWN0b3I8c3Rk
OjpzdHJpbmc+IG1hbmlmZXN0c187CisgIHN0ZDo6dmVjdG9yPHVpbnQ2NF90PiB0YWJsZV9udW1i
ZXJzXzsKKyAgc3RkOjp2ZWN0b3I8dWludDY0X3Q+IGxvZ3NfOworICBzdGQ6OnZlY3RvcjxUYWJs
ZUluZm8+IHRhYmxlc187CisgIHVpbnQ2NF90IG5leHRfZmlsZV9udW1iZXJfOworCisgIFN0YXR1
cyBGaW5kRmlsZXMoKSB7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGZpbGVuYW1lczsK
KyAgICBTdGF0dXMgc3RhdHVzID0gZW52Xy0+R2V0Q2hpbGRyZW4oZGJuYW1lXywgJmZpbGVuYW1l
cyk7CisgICAgaWYgKCFzdGF0dXMub2soKSkgeworICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9
CisgICAgaWYgKGZpbGVuYW1lcy5lbXB0eSgpKSB7CisgICAgICByZXR1cm4gU3RhdHVzOjpJT0Vy
cm9yKGRibmFtZV8sICJyZXBhaXIgZm91bmQgbm8gZmlsZXMiKTsKKyAgICB9CisKKyAgICB1aW50
NjRfdCBudW1iZXI7CisgICAgRmlsZVR5cGUgdHlwZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGZpbGVuYW1lcy5zaXplKCk7IGkrKykgeworICAgICAgaWYgKFBhcnNlRmlsZU5hbWUoZmls
ZW5hbWVzW2ldLCAmbnVtYmVyLCAmdHlwZSkpIHsKKyAgICAgICAgaWYgKHR5cGUgPT0ga0Rlc2Ny
aXB0b3JGaWxlKSB7CisgICAgICAgICAgbWFuaWZlc3RzXy5wdXNoX2JhY2soZmlsZW5hbWVzW2ld
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBpZiAobnVtYmVyICsgMSA+IG5leHRfZmls
ZV9udW1iZXJfKSB7CisgICAgICAgICAgICBuZXh0X2ZpbGVfbnVtYmVyXyA9IG51bWJlciArIDE7
CisgICAgICAgICAgfQorICAgICAgICAgIGlmICh0eXBlID09IGtMb2dGaWxlKSB7CisgICAgICAg
ICAgICBsb2dzXy5wdXNoX2JhY2sobnVtYmVyKTsKKyAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUg
PT0ga1RhYmxlRmlsZSkgeworICAgICAgICAgICAgdGFibGVfbnVtYmVyc18ucHVzaF9iYWNrKG51
bWJlcik7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIElnbm9yZSBvdGhlciBm
aWxlcworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICByZXR1cm4g
c3RhdHVzOworICB9CisKKyAgdm9pZCBDb252ZXJ0TG9nRmlsZXNUb1RhYmxlcygpIHsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGxvZ3NfLnNpemUoKTsgaSsrKSB7CisgICAgICBzdGQ6OnN0
cmluZyBsb2duYW1lID0gTG9nRmlsZU5hbWUoZGJuYW1lXywgbG9nc19baV0pOworICAgICAgU3Rh
dHVzIHN0YXR1cyA9IENvbnZlcnRMb2dUb1RhYmxlKGxvZ3NfW2ldKTsKKyAgICAgIGlmICghc3Rh
dHVzLm9rKCkpIHsKKyAgICAgICAgTG9nKG9wdGlvbnNfLmluZm9fbG9nLCAiTG9nICMlbGx1OiBp
Z25vcmluZyBjb252ZXJzaW9uIGVycm9yOiAlcyIsCisgICAgICAgICAgICAodW5zaWduZWQgbG9u
ZyBsb25nKSBsb2dzX1tpXSwKKyAgICAgICAgICAgIHN0YXR1cy5Ub1N0cmluZygpLmNfc3RyKCkp
OworICAgICAgfQorICAgICAgQXJjaGl2ZUZpbGUobG9nbmFtZSk7CisgICAgfQorICB9CisKKyAg
U3RhdHVzIENvbnZlcnRMb2dUb1RhYmxlKHVpbnQ2NF90IGxvZykgeworICAgIHN0cnVjdCBMb2dS
ZXBvcnRlciA6IHB1YmxpYyBsb2c6OlJlYWRlcjo6UmVwb3J0ZXIgeworICAgICAgRW52KiBlbnY7
CisgICAgICBMb2dnZXIqIGluZm9fbG9nOworICAgICAgdWludDY0X3QgbG9nbnVtOworICAgICAg
dmlydHVhbCB2b2lkIENvcnJ1cHRpb24oc2l6ZV90IGJ5dGVzLCBjb25zdCBTdGF0dXMmIHMpIHsK
KyAgICAgICAgLy8gV2UgcHJpbnQgZXJyb3IgbWVzc2FnZXMgZm9yIGNvcnJ1cHRpb24sIGJ1dCBj
b250aW51ZSByZXBhaXJpbmcuCisgICAgICAgIExvZyhpbmZvX2xvZywgIkxvZyAjJWxsdTogZHJv
cHBpbmcgJWQgYnl0ZXM7ICVzIiwKKyAgICAgICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGxv
Z251bSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4oYnl0ZXMpLAorICAgICAgICAgICAg
cy5Ub1N0cmluZygpLmNfc3RyKCkpOworICAgICAgfQorICAgIH07CisKKyAgICAvLyBPcGVuIHRo
ZSBsb2cgZmlsZQorICAgIHN0ZDo6c3RyaW5nIGxvZ25hbWUgPSBMb2dGaWxlTmFtZShkYm5hbWVf
LCBsb2cpOworICAgIFNlcXVlbnRpYWxGaWxlKiBsZmlsZTsKKyAgICBTdGF0dXMgc3RhdHVzID0g
ZW52Xy0+TmV3U2VxdWVudGlhbEZpbGUobG9nbmFtZSwgJmxmaWxlKTsKKyAgICBpZiAoIXN0YXR1
cy5vaygpKSB7CisgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIC8vIENyZWF0ZSB0
aGUgbG9nIHJlYWRlci4KKyAgICBMb2dSZXBvcnRlciByZXBvcnRlcjsKKyAgICByZXBvcnRlci5l
bnYgPSBlbnZfOworICAgIHJlcG9ydGVyLmluZm9fbG9nID0gb3B0aW9uc18uaW5mb19sb2c7Cisg
ICAgcmVwb3J0ZXIubG9nbnVtID0gbG9nOworICAgIC8vIFdlIGludGVudGlhbGx5IG1ha2UgbG9n
OjpSZWFkZXIgZG8gY2hlY2tzdW1taW5nIHNvIHRoYXQKKyAgICAvLyBjb3JydXB0aW9ucyBjYXVz
ZSBlbnRpcmUgY29tbWl0cyB0byBiZSBza2lwcGVkIGluc3RlYWQgb2YKKyAgICAvLyBwcm9wYWdh
dGluZyBiYWQgaW5mb3JtYXRpb24gKGxpa2Ugb3Zlcmx5IGxhcmdlIHNlcXVlbmNlCisgICAgLy8g
bnVtYmVycykuCisgICAgbG9nOjpSZWFkZXIgcmVhZGVyKGxmaWxlLCAmcmVwb3J0ZXIsIGZhbHNl
LypkbyBub3QgY2hlY2tzdW0qLywKKyAgICAgICAgICAgICAgICAgICAgICAgMC8qaW5pdGlhbF9v
ZmZzZXQqLyk7CisKKyAgICAvLyBSZWFkIGFsbCB0aGUgcmVjb3JkcyBhbmQgYWRkIHRvIGEgbWVt
dGFibGUKKyAgICBzdGQ6OnN0cmluZyBzY3JhdGNoOworICAgIFNsaWNlIHJlY29yZDsKKyAgICBX
cml0ZUJhdGNoIGJhdGNoOworICAgIE1lbVRhYmxlKiBtZW0gPSBuZXcgTWVtVGFibGUoaWNtcF8p
OworICAgIG1lbS0+UmVmKCk7CisgICAgaW50IGNvdW50ZXIgPSAwOworICAgIHdoaWxlIChyZWFk
ZXIuUmVhZFJlY29yZCgmcmVjb3JkLCAmc2NyYXRjaCkpIHsKKyAgICAgIGlmIChyZWNvcmQuc2l6
ZSgpIDwgMTIpIHsKKyAgICAgICAgcmVwb3J0ZXIuQ29ycnVwdGlvbigKKyAgICAgICAgICAgIHJl
Y29yZC5zaXplKCksIFN0YXR1czo6Q29ycnVwdGlvbigibG9nIHJlY29yZCB0b28gc21hbGwiKSk7
CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorICAgICAgV3JpdGVCYXRjaEludGVybmFsOjpT
ZXRDb250ZW50cygmYmF0Y2gsIHJlY29yZCk7CisgICAgICBzdGF0dXMgPSBXcml0ZUJhdGNoSW50
ZXJuYWw6Okluc2VydEludG8oJmJhdGNoLCBtZW0pOworICAgICAgaWYgKHN0YXR1cy5vaygpKSB7
CisgICAgICAgIGNvdW50ZXIgKz0gV3JpdGVCYXRjaEludGVybmFsOjpDb3VudCgmYmF0Y2gpOwor
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgTG9nKG9wdGlvbnNfLmluZm9fbG9nLCAiTG9nICMlbGx1
OiBpZ25vcmluZyAlcyIsCisgICAgICAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBsb2csCisg
ICAgICAgICAgICBzdGF0dXMuVG9TdHJpbmcoKS5jX3N0cigpKTsKKyAgICAgICAgc3RhdHVzID0g
U3RhdHVzOjpPSygpOyAgLy8gS2VlcCBnb2luZyB3aXRoIHJlc3Qgb2YgZmlsZQorICAgICAgfQor
ICAgIH0KKyAgICBkZWxldGUgbGZpbGU7CisKKyAgICAvLyBEbyBub3QgcmVjb3JkIGEgdmVyc2lv
biBlZGl0IGZvciB0aGlzIGNvbnZlcnNpb24gdG8gYSBUYWJsZQorICAgIC8vIHNpbmNlIEV4dHJh
Y3RNZXRhRGF0YSgpIHdpbGwgYWxzbyBnZW5lcmF0ZSBlZGl0cy4KKyAgICBGaWxlTWV0YURhdGEg
bWV0YTsKKyAgICBtZXRhLm51bWJlciA9IG5leHRfZmlsZV9udW1iZXJfKys7CisgICAgSXRlcmF0
b3IqIGl0ZXIgPSBtZW0tPk5ld0l0ZXJhdG9yKCk7CisgICAgc3RhdHVzID0gQnVpbGRUYWJsZShk
Ym5hbWVfLCBlbnZfLCBvcHRpb25zXywgdGFibGVfY2FjaGVfLCBpdGVyLCAmbWV0YSk7CisgICAg
ZGVsZXRlIGl0ZXI7CisgICAgbWVtLT5VbnJlZigpOworICAgIG1lbSA9IE5VTEw7CisgICAgaWYg
KHN0YXR1cy5vaygpKSB7CisgICAgICBpZiAobWV0YS5maWxlX3NpemUgPiAwKSB7CisgICAgICAg
IHRhYmxlX251bWJlcnNfLnB1c2hfYmFjayhtZXRhLm51bWJlcik7CisgICAgICB9CisgICAgfQor
ICAgIExvZyhvcHRpb25zXy5pbmZvX2xvZywgIkxvZyAjJWxsdTogJWQgb3BzIHNhdmVkIHRvIFRh
YmxlICMlbGx1ICVzIiwKKyAgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgbG9nLAorICAgICAg
ICBjb3VudGVyLAorICAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBtZXRhLm51bWJlciwKKyAg
ICAgICAgc3RhdHVzLlRvU3RyaW5nKCkuY19zdHIoKSk7CisgICAgcmV0dXJuIHN0YXR1czsKKyAg
fQorCisgIHZvaWQgRXh0cmFjdE1ldGFEYXRhKCkgeworICAgIHN0ZDo6dmVjdG9yPFRhYmxlSW5m
bz4ga2VwdDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRhYmxlX251bWJlcnNfLnNpemUo
KTsgaSsrKSB7CisgICAgICBUYWJsZUluZm8gdDsKKyAgICAgIHQubWV0YS5udW1iZXIgPSB0YWJs
ZV9udW1iZXJzX1tpXTsKKyAgICAgIFN0YXR1cyBzdGF0dXMgPSBTY2FuVGFibGUoJnQpOworICAg
ICAgaWYgKCFzdGF0dXMub2soKSkgeworICAgICAgICBzdGQ6OnN0cmluZyBmbmFtZSA9IFRhYmxl
RmlsZU5hbWUoZGJuYW1lXywgdGFibGVfbnVtYmVyc19baV0pOworICAgICAgICBMb2cob3B0aW9u
c18uaW5mb19sb2csICJUYWJsZSAjJWxsdTogaWdub3JpbmcgJXMiLAorICAgICAgICAgICAgKHVu
c2lnbmVkIGxvbmcgbG9uZykgdGFibGVfbnVtYmVyc19baV0sCisgICAgICAgICAgICBzdGF0dXMu
VG9TdHJpbmcoKS5jX3N0cigpKTsKKyAgICAgICAgQXJjaGl2ZUZpbGUoZm5hbWUpOworICAgICAg
fSBlbHNlIHsKKyAgICAgICAgdGFibGVzXy5wdXNoX2JhY2sodCk7CisgICAgICB9CisgICAgfQor
ICB9CisKKyAgU3RhdHVzIFNjYW5UYWJsZShUYWJsZUluZm8qIHQpIHsKKyAgICBzdGQ6OnN0cmlu
ZyBmbmFtZSA9IFRhYmxlRmlsZU5hbWUoZGJuYW1lXywgdC0+bWV0YS5udW1iZXIpOworICAgIGlu
dCBjb3VudGVyID0gMDsKKyAgICBTdGF0dXMgc3RhdHVzID0gZW52Xy0+R2V0RmlsZVNpemUoZm5h
bWUsICZ0LT5tZXRhLmZpbGVfc2l6ZSk7CisgICAgaWYgKHN0YXR1cy5vaygpKSB7CisgICAgICBJ
dGVyYXRvciogaXRlciA9IHRhYmxlX2NhY2hlXy0+TmV3SXRlcmF0b3IoCisgICAgICAgICAgUmVh
ZE9wdGlvbnMoKSwgdC0+bWV0YS5udW1iZXIsIHQtPm1ldGEuZmlsZV9zaXplKTsKKyAgICAgIGJv
b2wgZW1wdHkgPSB0cnVlOworICAgICAgUGFyc2VkSW50ZXJuYWxLZXkgcGFyc2VkOworICAgICAg
dC0+bWF4X3NlcXVlbmNlID0gMDsKKyAgICAgIGZvciAoaXRlci0+U2Vla1RvRmlyc3QoKTsgaXRl
ci0+VmFsaWQoKTsgaXRlci0+TmV4dCgpKSB7CisgICAgICAgIFNsaWNlIGtleSA9IGl0ZXItPmtl
eSgpOworICAgICAgICBpZiAoIVBhcnNlSW50ZXJuYWxLZXkoa2V5LCAmcGFyc2VkKSkgeworICAg
ICAgICAgIExvZyhvcHRpb25zXy5pbmZvX2xvZywgIlRhYmxlICMlbGx1OiB1bnBhcnNhYmxlIGtl
eSAlcyIsCisgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHQtPm1ldGEubnVtYmVy
LAorICAgICAgICAgICAgICBFc2NhcGVTdHJpbmcoa2V5KS5jX3N0cigpKTsKKyAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGNvdW50ZXIrKzsKKyAgICAgICAgaWYgKGVt
cHR5KSB7CisgICAgICAgICAgZW1wdHkgPSBmYWxzZTsKKyAgICAgICAgICB0LT5tZXRhLnNtYWxs
ZXN0LkRlY29kZUZyb20oa2V5KTsKKyAgICAgICAgfQorICAgICAgICB0LT5tZXRhLmxhcmdlc3Qu
RGVjb2RlRnJvbShrZXkpOworICAgICAgICBpZiAocGFyc2VkLnNlcXVlbmNlID4gdC0+bWF4X3Nl
cXVlbmNlKSB7CisgICAgICAgICAgdC0+bWF4X3NlcXVlbmNlID0gcGFyc2VkLnNlcXVlbmNlOwor
ICAgICAgICB9CisgICAgICB9CisgICAgICBpZiAoIWl0ZXItPnN0YXR1cygpLm9rKCkpIHsKKyAg
ICAgICAgc3RhdHVzID0gaXRlci0+c3RhdHVzKCk7CisgICAgICB9CisgICAgICBkZWxldGUgaXRl
cjsKKyAgICB9CisgICAgTG9nKG9wdGlvbnNfLmluZm9fbG9nLCAiVGFibGUgIyVsbHU6ICVkIGVu
dHJpZXMgJXMiLAorICAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSB0LT5tZXRhLm51bWJlciwK
KyAgICAgICAgY291bnRlciwKKyAgICAgICAgc3RhdHVzLlRvU3RyaW5nKCkuY19zdHIoKSk7Cisg
ICAgcmV0dXJuIHN0YXR1czsKKyAgfQorCisgIFN0YXR1cyBXcml0ZURlc2NyaXB0b3IoKSB7Cisg
ICAgc3RkOjpzdHJpbmcgdG1wID0gVGVtcEZpbGVOYW1lKGRibmFtZV8sIDEpOworICAgIFdyaXRh
YmxlRmlsZSogZmlsZTsKKyAgICBTdGF0dXMgc3RhdHVzID0gZW52Xy0+TmV3V3JpdGFibGVGaWxl
KHRtcCwgJmZpbGUpOworICAgIGlmICghc3RhdHVzLm9rKCkpIHsKKyAgICAgIHJldHVybiBzdGF0
dXM7CisgICAgfQorCisgICAgU2VxdWVuY2VOdW1iZXIgbWF4X3NlcXVlbmNlID0gMDsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHRhYmxlc18uc2l6ZSgpOyBpKyspIHsKKyAgICAgIGlmICht
YXhfc2VxdWVuY2UgPCB0YWJsZXNfW2ldLm1heF9zZXF1ZW5jZSkgeworICAgICAgICBtYXhfc2Vx
dWVuY2UgPSB0YWJsZXNfW2ldLm1heF9zZXF1ZW5jZTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBl
ZGl0Xy5TZXRDb21wYXJhdG9yTmFtZShpY21wXy51c2VyX2NvbXBhcmF0b3IoKS0+TmFtZSgpKTsK
KyAgICBlZGl0Xy5TZXRMb2dOdW1iZXIoMCk7CisgICAgZWRpdF8uU2V0TmV4dEZpbGUobmV4dF9m
aWxlX251bWJlcl8pOworICAgIGVkaXRfLlNldExhc3RTZXF1ZW5jZShtYXhfc2VxdWVuY2UpOwor
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0YWJsZXNfLnNpemUoKTsgaSsrKSB7CisgICAg
ICAvLyBUT0RPKG9wdCk6IHNlcGFyYXRlIG91dCBpbnRvIG11bHRpcGxlIGxldmVscworICAgICAg
Y29uc3QgVGFibGVJbmZvJiB0ID0gdGFibGVzX1tpXTsKKyAgICAgIGVkaXRfLkFkZEZpbGUoMCwg
dC5tZXRhLm51bWJlciwgdC5tZXRhLmZpbGVfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgdC5t
ZXRhLnNtYWxsZXN0LCB0Lm1ldGEubGFyZ2VzdCk7CisgICAgfQorCisgICAgLy9mcHJpbnRmKHN0
ZGVyciwgIk5ld0Rlc2NyaXB0b3I6XG4lc1xuIiwgZWRpdF8uRGVidWdTdHJpbmcoKS5jX3N0cigp
KTsKKyAgICB7CisgICAgICBsb2c6OldyaXRlciBsb2coZmlsZSk7CisgICAgICBzdGQ6OnN0cmlu
ZyByZWNvcmQ7CisgICAgICBlZGl0Xy5FbmNvZGVUbygmcmVjb3JkKTsKKyAgICAgIHN0YXR1cyA9
IGxvZy5BZGRSZWNvcmQocmVjb3JkKTsKKyAgICB9CisgICAgaWYgKHN0YXR1cy5vaygpKSB7Cisg
ICAgICBzdGF0dXMgPSBmaWxlLT5DbG9zZSgpOworICAgIH0KKyAgICBkZWxldGUgZmlsZTsKKyAg
ICBmaWxlID0gTlVMTDsKKworICAgIGlmICghc3RhdHVzLm9rKCkpIHsKKyAgICAgIGVudl8tPkRl
bGV0ZUZpbGUodG1wKTsKKyAgICB9IGVsc2UgeworICAgICAgLy8gRGlzY2FyZCBvbGRlciBtYW5p
ZmVzdHMKKyAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWFuaWZlc3RzXy5zaXplKCk7IGkr
KykgeworICAgICAgICBBcmNoaXZlRmlsZShkYm5hbWVfICsgIi8iICsgbWFuaWZlc3RzX1tpXSk7
CisgICAgICB9CisKKyAgICAgIC8vIEluc3RhbGwgbmV3IG1hbmlmZXN0CisgICAgICBzdGF0dXMg
PSBlbnZfLT5SZW5hbWVGaWxlKHRtcCwgRGVzY3JpcHRvckZpbGVOYW1lKGRibmFtZV8sIDEpKTsK
KyAgICAgIGlmIChzdGF0dXMub2soKSkgeworICAgICAgICBzdGF0dXMgPSBTZXRDdXJyZW50Rmls
ZShlbnZfLCBkYm5hbWVfLCAxKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGVudl8tPkRlbGV0
ZUZpbGUodG1wKTsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHN0YXR1czsKKyAgfQorCisg
IHZvaWQgQXJjaGl2ZUZpbGUoY29uc3Qgc3RkOjpzdHJpbmcmIGZuYW1lKSB7CisgICAgLy8gTW92
ZSBpbnRvIGFub3RoZXIgZGlyZWN0b3J5LiAgRS5nLiwgZm9yCisgICAgLy8gICAgZGlyL2Zvbwor
ICAgIC8vIHJlbmFtZSB0bworICAgIC8vICAgIGRpci9sb3N0L2ZvbworICAgIGNvbnN0IGNoYXIq
IHNsYXNoID0gc3RycmNocihmbmFtZS5jX3N0cigpLCAnLycpOworICAgIHN0ZDo6c3RyaW5nIG5l
d19kaXI7CisgICAgaWYgKHNsYXNoICE9IE5VTEwpIHsKKyAgICAgIG5ld19kaXIuYXNzaWduKGZu
YW1lLmRhdGEoKSwgc2xhc2ggLSBmbmFtZS5kYXRhKCkpOworICAgIH0KKyAgICBuZXdfZGlyLmFw
cGVuZCgiL2xvc3QiKTsKKyAgICBlbnZfLT5DcmVhdGVEaXIobmV3X2Rpcik7ICAvLyBJZ25vcmUg
ZXJyb3IKKyAgICBzdGQ6OnN0cmluZyBuZXdfZmlsZSA9IG5ld19kaXI7CisgICAgbmV3X2ZpbGUu
YXBwZW5kKCIvIik7CisgICAgbmV3X2ZpbGUuYXBwZW5kKChzbGFzaCA9PSBOVUxMKSA/IGZuYW1l
LmNfc3RyKCkgOiBzbGFzaCArIDEpOworICAgIFN0YXR1cyBzID0gZW52Xy0+UmVuYW1lRmlsZShm
bmFtZSwgbmV3X2ZpbGUpOworICAgIExvZyhvcHRpb25zXy5pbmZvX2xvZywgIkFyY2hpdmluZyAl
czogJXNcbiIsCisgICAgICAgIGZuYW1lLmNfc3RyKCksIHMuVG9TdHJpbmcoKS5jX3N0cigpKTsK
KyAgfQorfTsKK30gIC8vIG5hbWVzcGFjZQorCitTdGF0dXMgUmVwYWlyREIoY29uc3Qgc3RkOjpz
dHJpbmcmIGRibmFtZSwgY29uc3QgT3B0aW9ucyYgb3B0aW9ucykgeworICBSZXBhaXJlciByZXBh
aXJlcihkYm5hbWUsIG9wdGlvbnMpOworICByZXR1cm4gcmVwYWlyZXIuUnVuKCk7Cit9CisKK30g
IC8vIG5hbWVzcGFjZSBsZXZlbGRiCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZl
bGRiL2RiL3NraXBsaXN0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL3NraXBsaXN0
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYWY4NWJlNmQwMTYyMWIyNDlmMTc1NmIyYWY1ZmQ2MDc4ZGQyZWUyNQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvc2tpcGxpc3Qu
aApAQCAtMCwwICsxLDM3OSBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29u
dHJpYnV0b3JzLgorLy8KKy8vIFRocmVhZCBzYWZldHkKKy8vIC0tLS0tLS0tLS0tLS0KKy8vCisv
LyBXcml0ZXMgcmVxdWlyZSBleHRlcm5hbCBzeW5jaHJvbml6YXRpb24sIG1vc3QgbGlrZWx5IGEg
bXV0ZXguCisvLyBSZWFkcyByZXF1aXJlIGEgZ3VhcmFudGVlIHRoYXQgdGhlIFNraXBMaXN0IHdp
bGwgbm90IGJlIGRlc3Ryb3llZAorLy8gd2hpbGUgdGhlIHJlYWQgaXMgaW4gcHJvZ3Jlc3MuICBB
cGFydCBmcm9tIHRoYXQsIHJlYWRzIHByb2dyZXNzCisvLyB3aXRob3V0IGFueSBpbnRlcm5hbCBs
b2NraW5nIG9yIHN5bmNocm9uaXphdGlvbi4KKy8vCisvLyBJbnZhcmlhbnRzOgorLy8KKy8vICgx
KSBBbGxvY2F0ZWQgbm9kZXMgYXJlIG5ldmVyIGRlbGV0ZWQgdW50aWwgdGhlIFNraXBMaXN0IGlz
CisvLyBkZXN0cm95ZWQuICBUaGlzIGlzIHRyaXZpYWxseSBndWFyYW50ZWVkIGJ5IHRoZSBjb2Rl
IHNpbmNlIHdlCisvLyBuZXZlciBkZWxldGUgYW55IHNraXAgbGlzdCBub2Rlcy4KKy8vCisvLyAo
MikgVGhlIGNvbnRlbnRzIG9mIGEgTm9kZSBleGNlcHQgZm9yIHRoZSBuZXh0L3ByZXYgcG9pbnRl
cnMgYXJlCisvLyBpbW11dGFibGUgYWZ0ZXIgdGhlIE5vZGUgaGFzIGJlZW4gbGlua2VkIGludG8g
dGhlIFNraXBMaXN0LgorLy8gT25seSBJbnNlcnQoKSBtb2RpZmllcyB0aGUgbGlzdCwgYW5kIGl0
IGlzIGNhcmVmdWwgdG8gaW5pdGlhbGl6ZQorLy8gYSBub2RlIGFuZCB1c2UgcmVsZWFzZS1zdG9y
ZXMgdG8gcHVibGlzaCB0aGUgbm9kZXMgaW4gb25lIG9yCisvLyBtb3JlIGxpc3RzLgorLy8KKy8v
IC4uLiBwcmV2IHZzLiBuZXh0IHBvaW50ZXIgb3JkZXJpbmcgLi4uCisKKyNpbmNsdWRlIDxhc3Nl
cnQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJwb3J0L3BvcnQuaCIKKyNpbmNs
dWRlICJ1dGlsL2FyZW5hLmgiCisjaW5jbHVkZSAidXRpbC9yYW5kb20uaCIKKworbmFtZXNwYWNl
IGxldmVsZGIgeworCitjbGFzcyBBcmVuYTsKKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCBjbGFz
cyBDb21wYXJhdG9yPgorY2xhc3MgU2tpcExpc3QgeworIHByaXZhdGU6CisgIHN0cnVjdCBOb2Rl
OworCisgcHVibGljOgorICAvLyBDcmVhdGUgYSBuZXcgU2tpcExpc3Qgb2JqZWN0IHRoYXQgd2ls
bCB1c2UgImNtcCIgZm9yIGNvbXBhcmluZyBrZXlzLAorICAvLyBhbmQgd2lsbCBhbGxvY2F0ZSBt
ZW1vcnkgdXNpbmcgIiphcmVuYSIuICBPYmplY3RzIGFsbG9jYXRlZCBpbiB0aGUgYXJlbmEKKyAg
Ly8gbXVzdCByZW1haW4gYWxsb2NhdGVkIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIHNraXBsaXN0
IG9iamVjdC4KKyAgZXhwbGljaXQgU2tpcExpc3QoQ29tcGFyYXRvciBjbXAsIEFyZW5hKiBhcmVu
YSk7CisKKyAgLy8gSW5zZXJ0IGtleSBpbnRvIHRoZSBsaXN0LgorICAvLyBSRVFVSVJFUzogbm90
aGluZyB0aGF0IGNvbXBhcmVzIGVxdWFsIHRvIGtleSBpcyBjdXJyZW50bHkgaW4gdGhlIGxpc3Qu
CisgIHZvaWQgSW5zZXJ0KGNvbnN0IEtleSYga2V5KTsKKworICAvLyBSZXR1cm5zIHRydWUgaWZm
IGFuIGVudHJ5IHRoYXQgY29tcGFyZXMgZXF1YWwgdG8ga2V5IGlzIGluIHRoZSBsaXN0LgorICBi
b29sIENvbnRhaW5zKGNvbnN0IEtleSYga2V5KSBjb25zdDsKKworICAvLyBJdGVyYXRpb24gb3Zl
ciB0aGUgY29udGVudHMgb2YgYSBza2lwIGxpc3QKKyAgY2xhc3MgSXRlcmF0b3IgeworICAgcHVi
bGljOgorICAgIC8vIEluaXRpYWxpemUgYW4gaXRlcmF0b3Igb3ZlciB0aGUgc3BlY2lmaWVkIGxp
c3QuCisgICAgLy8gVGhlIHJldHVybmVkIGl0ZXJhdG9yIGlzIG5vdCB2YWxpZC4KKyAgICBleHBs
aWNpdCBJdGVyYXRvcihjb25zdCBTa2lwTGlzdCogbGlzdCk7CisKKyAgICAvLyBSZXR1cm5zIHRy
dWUgaWZmIHRoZSBpdGVyYXRvciBpcyBwb3NpdGlvbmVkIGF0IGEgdmFsaWQgbm9kZS4KKyAgICBi
b29sIFZhbGlkKCkgY29uc3Q7CisKKyAgICAvLyBSZXR1cm5zIHRoZSBrZXkgYXQgdGhlIGN1cnJl
bnQgcG9zaXRpb24uCisgICAgLy8gUkVRVUlSRVM6IFZhbGlkKCkKKyAgICBjb25zdCBLZXkmIGtl
eSgpIGNvbnN0OworCisgICAgLy8gQWR2YW5jZXMgdG8gdGhlIG5leHQgcG9zaXRpb24uCisgICAg
Ly8gUkVRVUlSRVM6IFZhbGlkKCkKKyAgICB2b2lkIE5leHQoKTsKKworICAgIC8vIEFkdmFuY2Vz
IHRvIHRoZSBwcmV2aW91cyBwb3NpdGlvbi4KKyAgICAvLyBSRVFVSVJFUzogVmFsaWQoKQorICAg
IHZvaWQgUHJldigpOworCisgICAgLy8gQWR2YW5jZSB0byB0aGUgZmlyc3QgZW50cnkgd2l0aCBh
IGtleSA+PSB0YXJnZXQKKyAgICB2b2lkIFNlZWsoY29uc3QgS2V5JiB0YXJnZXQpOworCisgICAg
Ly8gUG9zaXRpb24gYXQgdGhlIGZpcnN0IGVudHJ5IGluIGxpc3QuCisgICAgLy8gRmluYWwgc3Rh
dGUgb2YgaXRlcmF0b3IgaXMgVmFsaWQoKSBpZmYgbGlzdCBpcyBub3QgZW1wdHkuCisgICAgdm9p
ZCBTZWVrVG9GaXJzdCgpOworCisgICAgLy8gUG9zaXRpb24gYXQgdGhlIGxhc3QgZW50cnkgaW4g
bGlzdC4KKyAgICAvLyBGaW5hbCBzdGF0ZSBvZiBpdGVyYXRvciBpcyBWYWxpZCgpIGlmZiBsaXN0
IGlzIG5vdCBlbXB0eS4KKyAgICB2b2lkIFNlZWtUb0xhc3QoKTsKKworICAgcHJpdmF0ZToKKyAg
ICBjb25zdCBTa2lwTGlzdCogbGlzdF87CisgICAgTm9kZSogbm9kZV87CisgICAgLy8gSW50ZW50
aW9uYWxseSBjb3B5YWJsZQorICB9OworCisgcHJpdmF0ZToKKyAgZW51bSB7IGtNYXhIZWlnaHQg
PSAxMiB9OworCisgIC8vIEltbXV0YWJsZSBhZnRlciBjb25zdHJ1Y3Rpb24KKyAgQ29tcGFyYXRv
ciBjb25zdCBjb21wYXJlXzsKKyAgQXJlbmEqIGNvbnN0IGFyZW5hXzsgICAgLy8gQXJlbmEgdXNl
ZCBmb3IgYWxsb2NhdGlvbnMgb2Ygbm9kZXMKKworICBOb2RlKiBjb25zdCBoZWFkXzsKKworICAv
LyBNb2RpZmllZCBvbmx5IGJ5IEluc2VydCgpLiAgUmVhZCByYWNpbHkgYnkgcmVhZGVycywgYnV0
IHN0YWxlCisgIC8vIHZhbHVlcyBhcmUgb2suCisgIHBvcnQ6OkF0b21pY1BvaW50ZXIgbWF4X2hl
aWdodF87ICAgLy8gSGVpZ2h0IG9mIHRoZSBlbnRpcmUgbGlzdAorCisgIGlubGluZSBpbnQgR2V0
TWF4SGVpZ2h0KCkgY29uc3QgeworICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KAorICAgICAg
ICByZWludGVycHJldF9jYXN0PGludHB0cl90PihtYXhfaGVpZ2h0Xy5Ob0JhcnJpZXJfTG9hZCgp
KSk7CisgIH0KKworICAvLyBSZWFkL3dyaXR0ZW4gb25seSBieSBJbnNlcnQoKS4KKyAgUmFuZG9t
IHJuZF87CisKKyAgTm9kZSogTmV3Tm9kZShjb25zdCBLZXkmIGtleSwgaW50IGhlaWdodCk7Cisg
IGludCBSYW5kb21IZWlnaHQoKTsKKyAgYm9vbCBFcXVhbChjb25zdCBLZXkmIGEsIGNvbnN0IEtl
eSYgYikgY29uc3QgeyByZXR1cm4gKGNvbXBhcmVfKGEsIGIpID09IDApOyB9CisKKyAgLy8gUmV0
dXJuIHRydWUgaWYga2V5IGlzIGdyZWF0ZXIgdGhhbiB0aGUgZGF0YSBzdG9yZWQgaW4gIm4iCisg
IGJvb2wgS2V5SXNBZnRlck5vZGUoY29uc3QgS2V5JiBrZXksIE5vZGUqIG4pIGNvbnN0OworCisg
IC8vIFJldHVybiB0aGUgZWFybGllc3Qgbm9kZSB0aGF0IGNvbWVzIGF0IG9yIGFmdGVyIGtleS4K
KyAgLy8gUmV0dXJuIE5VTEwgaWYgdGhlcmUgaXMgbm8gc3VjaCBub2RlLgorICAvLworICAvLyBJ
ZiBwcmV2IGlzIG5vbi1OVUxMLCBmaWxscyBwcmV2W2xldmVsXSB3aXRoIHBvaW50ZXIgdG8gcHJl
dmlvdXMKKyAgLy8gbm9kZSBhdCAibGV2ZWwiIGZvciBldmVyeSBsZXZlbCBpbiBbMC4ubWF4X2hl
aWdodF8tMV0uCisgIE5vZGUqIEZpbmRHcmVhdGVyT3JFcXVhbChjb25zdCBLZXkmIGtleSwgTm9k
ZSoqIHByZXYpIGNvbnN0OworCisgIC8vIFJldHVybiB0aGUgbGF0ZXN0IG5vZGUgd2l0aCBhIGtl
eSA8IGtleS4KKyAgLy8gUmV0dXJuIGhlYWRfIGlmIHRoZXJlIGlzIG5vIHN1Y2ggbm9kZS4KKyAg
Tm9kZSogRmluZExlc3NUaGFuKGNvbnN0IEtleSYga2V5KSBjb25zdDsKKworICAvLyBSZXR1cm4g
dGhlIGxhc3Qgbm9kZSBpbiB0aGUgbGlzdC4KKyAgLy8gUmV0dXJuIGhlYWRfIGlmIGxpc3QgaXMg
ZW1wdHkuCisgIE5vZGUqIEZpbmRMYXN0KCkgY29uc3Q7CisKKyAgLy8gTm8gY29weWluZyBhbGxv
d2VkCisgIFNraXBMaXN0KGNvbnN0IFNraXBMaXN0Jik7CisgIHZvaWQgb3BlcmF0b3I9KGNvbnN0
IFNraXBMaXN0Jik7Cit9OworCisvLyBJbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZvbGxvdwordGVt
cGxhdGU8dHlwZW5hbWUgS2V5LCBjbGFzcyBDb21wYXJhdG9yPgorc3RydWN0IFNraXBMaXN0PEtl
eSxDb21wYXJhdG9yPjo6Tm9kZSB7CisgIGV4cGxpY2l0IE5vZGUoY29uc3QgS2V5JiBrKSA6IGtl
eShrKSB7IH0KKworICBLZXkgY29uc3Qga2V5OworCisgIC8vIEFjY2Vzc29ycy9tdXRhdG9ycyBm
b3IgbGlua3MuICBXcmFwcGVkIGluIG1ldGhvZHMgc28gd2UgY2FuCisgIC8vIGFkZCB0aGUgYXBw
cm9wcmlhdGUgYmFycmllcnMgYXMgbmVjZXNzYXJ5LgorICBOb2RlKiBOZXh0KGludCBuKSB7Cisg
ICAgYXNzZXJ0KG4gPj0gMCk7CisgICAgLy8gVXNlIGFuICdhY3F1aXJlIGxvYWQnIHNvIHRoYXQg
d2Ugb2JzZXJ2ZSBhIGZ1bGx5IGluaXRpYWxpemVkCisgICAgLy8gdmVyc2lvbiBvZiB0aGUgcmV0
dXJuZWQgTm9kZS4KKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxOb2RlKj4obmV4dF9bbl0u
QWNxdWlyZV9Mb2FkKCkpOworICB9CisgIHZvaWQgU2V0TmV4dChpbnQgbiwgTm9kZSogeCkgewor
ICAgIGFzc2VydChuID49IDApOworICAgIC8vIFVzZSBhICdyZWxlYXNlIHN0b3JlJyBzbyB0aGF0
IGFueWJvZHkgd2hvIHJlYWRzIHRocm91Z2ggdGhpcworICAgIC8vIHBvaW50ZXIgb2JzZXJ2ZXMg
YSBmdWxseSBpbml0aWFsaXplZCB2ZXJzaW9uIG9mIHRoZSBpbnNlcnRlZCBub2RlLgorICAgIG5l
eHRfW25dLlJlbGVhc2VfU3RvcmUoeCk7CisgIH0KKworICAvLyBOby1iYXJyaWVyIHZhcmlhbnRz
IHRoYXQgY2FuIGJlIHNhZmVseSB1c2VkIGluIGEgZmV3IGxvY2F0aW9ucy4KKyAgTm9kZSogTm9C
YXJyaWVyX05leHQoaW50IG4pIHsKKyAgICBhc3NlcnQobiA+PSAwKTsKKyAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxOb2RlKj4obmV4dF9bbl0uTm9CYXJyaWVyX0xvYWQoKSk7CisgIH0KKyAg
dm9pZCBOb0JhcnJpZXJfU2V0TmV4dChpbnQgbiwgTm9kZSogeCkgeworICAgIGFzc2VydChuID49
IDApOworICAgIG5leHRfW25dLk5vQmFycmllcl9TdG9yZSh4KTsKKyAgfQorCisgcHJpdmF0ZToK
KyAgLy8gQXJyYXkgb2YgbGVuZ3RoIGVxdWFsIHRvIHRoZSBub2RlIGhlaWdodC4gIG5leHRfWzBd
IGlzIGxvd2VzdCBsZXZlbCBsaW5rLgorICBwb3J0OjpBdG9taWNQb2ludGVyIG5leHRfWzFdOwor
fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCBjbGFzcyBDb21wYXJhdG9yPgordHlwZW5hbWUg
U2tpcExpc3Q8S2V5LENvbXBhcmF0b3I+OjpOb2RlKgorU2tpcExpc3Q8S2V5LENvbXBhcmF0b3I+
OjpOZXdOb2RlKGNvbnN0IEtleSYga2V5LCBpbnQgaGVpZ2h0KSB7CisgIGNoYXIqIG1lbSA9IGFy
ZW5hXy0+QWxsb2NhdGVBbGlnbmVkKAorICAgICAgc2l6ZW9mKE5vZGUpICsgc2l6ZW9mKHBvcnQ6
OkF0b21pY1BvaW50ZXIpICogKGhlaWdodCAtIDEpKTsKKyAgcmV0dXJuIG5ldyAobWVtKSBOb2Rl
KGtleSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgY2xhc3MgQ29tcGFyYXRvcj4KK2lu
bGluZSBTa2lwTGlzdDxLZXksQ29tcGFyYXRvcj46Okl0ZXJhdG9yOjpJdGVyYXRvcihjb25zdCBT
a2lwTGlzdCogbGlzdCkgeworICBsaXN0XyA9IGxpc3Q7CisgIG5vZGVfID0gTlVMTDsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgS2V5LCBjbGFzcyBDb21wYXJhdG9yPgoraW5saW5lIGJvb2wgU2tp
cExpc3Q8S2V5LENvbXBhcmF0b3I+OjpJdGVyYXRvcjo6VmFsaWQoKSBjb25zdCB7CisgIHJldHVy
biBub2RlXyAhPSBOVUxMOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIGNsYXNzIENvbXBh
cmF0b3I+CitpbmxpbmUgY29uc3QgS2V5JiBTa2lwTGlzdDxLZXksQ29tcGFyYXRvcj46Okl0ZXJh
dG9yOjprZXkoKSBjb25zdCB7CisgIGFzc2VydChWYWxpZCgpKTsKKyAgcmV0dXJuIG5vZGVfLT5r
ZXk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgY2xhc3MgQ29tcGFyYXRvcj4KK2lubGlu
ZSB2b2lkIFNraXBMaXN0PEtleSxDb21wYXJhdG9yPjo6SXRlcmF0b3I6Ok5leHQoKSB7CisgIGFz
c2VydChWYWxpZCgpKTsKKyAgbm9kZV8gPSBub2RlXy0+TmV4dCgwKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgS2V5LCBjbGFzcyBDb21wYXJhdG9yPgoraW5saW5lIHZvaWQgU2tpcExpc3Q8S2V5
LENvbXBhcmF0b3I+OjpJdGVyYXRvcjo6UHJldigpIHsKKyAgLy8gSW5zdGVhZCBvZiB1c2luZyBl
eHBsaWNpdCAicHJldiIgbGlua3MsIHdlIGp1c3Qgc2VhcmNoIGZvciB0aGUKKyAgLy8gbGFzdCBu
b2RlIHRoYXQgZmFsbHMgYmVmb3JlIGtleS4KKyAgYXNzZXJ0KFZhbGlkKCkpOworICBub2RlXyA9
IGxpc3RfLT5GaW5kTGVzc1RoYW4obm9kZV8tPmtleSk7CisgIGlmIChub2RlXyA9PSBsaXN0Xy0+
aGVhZF8pIHsKKyAgICBub2RlXyA9IE5VTEw7CisgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
S2V5LCBjbGFzcyBDb21wYXJhdG9yPgoraW5saW5lIHZvaWQgU2tpcExpc3Q8S2V5LENvbXBhcmF0
b3I+OjpJdGVyYXRvcjo6U2Vlayhjb25zdCBLZXkmIHRhcmdldCkgeworICBub2RlXyA9IGxpc3Rf
LT5GaW5kR3JlYXRlck9yRXF1YWwodGFyZ2V0LCBOVUxMKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgS2V5LCBjbGFzcyBDb21wYXJhdG9yPgoraW5saW5lIHZvaWQgU2tpcExpc3Q8S2V5LENvbXBh
cmF0b3I+OjpJdGVyYXRvcjo6U2Vla1RvRmlyc3QoKSB7CisgIG5vZGVfID0gbGlzdF8tPmhlYWRf
LT5OZXh0KDApOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIGNsYXNzIENvbXBhcmF0b3I+
CitpbmxpbmUgdm9pZCBTa2lwTGlzdDxLZXksQ29tcGFyYXRvcj46Okl0ZXJhdG9yOjpTZWVrVG9M
YXN0KCkgeworICBub2RlXyA9IGxpc3RfLT5GaW5kTGFzdCgpOworICBpZiAobm9kZV8gPT0gbGlz
dF8tPmhlYWRfKSB7CisgICAgbm9kZV8gPSBOVUxMOworICB9Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEtleSwgY2xhc3MgQ29tcGFyYXRvcj4KK2ludCBTa2lwTGlzdDxLZXksQ29tcGFyYXRvcj46
OlJhbmRvbUhlaWdodCgpIHsKKyAgLy8gSW5jcmVhc2UgaGVpZ2h0IHdpdGggcHJvYmFiaWxpdHkg
MSBpbiBrQnJhbmNoaW5nCisgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQga0JyYW5jaGluZyA9
IDQ7CisgIGludCBoZWlnaHQgPSAxOworICB3aGlsZSAoaGVpZ2h0IDwga01heEhlaWdodCAmJiAo
KHJuZF8uTmV4dCgpICUga0JyYW5jaGluZykgPT0gMCkpIHsKKyAgICBoZWlnaHQrKzsKKyAgfQor
ICBhc3NlcnQoaGVpZ2h0ID4gMCk7CisgIGFzc2VydChoZWlnaHQgPD0ga01heEhlaWdodCk7Cisg
IHJldHVybiBoZWlnaHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgY2xhc3MgQ29tcGFy
YXRvcj4KK2Jvb2wgU2tpcExpc3Q8S2V5LENvbXBhcmF0b3I+OjpLZXlJc0FmdGVyTm9kZShjb25z
dCBLZXkmIGtleSwgTm9kZSogbikgY29uc3QgeworICAvLyBOVUxMIG4gaXMgY29uc2lkZXJlZCBp
bmZpbml0ZQorICByZXR1cm4gKG4gIT0gTlVMTCkgJiYgKGNvbXBhcmVfKG4tPmtleSwga2V5KSA8
IDApOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIGNsYXNzIENvbXBhcmF0b3I+Cit0eXBl
bmFtZSBTa2lwTGlzdDxLZXksQ29tcGFyYXRvcj46Ok5vZGUqIFNraXBMaXN0PEtleSxDb21wYXJh
dG9yPjo6RmluZEdyZWF0ZXJPckVxdWFsKGNvbnN0IEtleSYga2V5LCBOb2RlKiogcHJldikKKyAg
ICBjb25zdCB7CisgIE5vZGUqIHggPSBoZWFkXzsKKyAgaW50IGxldmVsID0gR2V0TWF4SGVpZ2h0
KCkgLSAxOworICB3aGlsZSAodHJ1ZSkgeworICAgIE5vZGUqIG5leHQgPSB4LT5OZXh0KGxldmVs
KTsKKyAgICBpZiAoS2V5SXNBZnRlck5vZGUoa2V5LCBuZXh0KSkgeworICAgICAgLy8gS2VlcCBz
ZWFyY2hpbmcgaW4gdGhpcyBsaXN0CisgICAgICB4ID0gbmV4dDsKKyAgICB9IGVsc2UgeworICAg
ICAgaWYgKHByZXYgIT0gTlVMTCkgcHJldltsZXZlbF0gPSB4OworICAgICAgaWYgKGxldmVsID09
IDApIHsKKyAgICAgICAgcmV0dXJuIG5leHQ7CisgICAgICB9IGVsc2UgeworICAgICAgICAvLyBT
d2l0Y2ggdG8gbmV4dCBsaXN0CisgICAgICAgIGxldmVsLS07CisgICAgICB9CisgICAgfQorICB9
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgY2xhc3MgQ29tcGFyYXRvcj4KK3R5cGVuYW1l
IFNraXBMaXN0PEtleSxDb21wYXJhdG9yPjo6Tm9kZSoKK1NraXBMaXN0PEtleSxDb21wYXJhdG9y
Pjo6RmluZExlc3NUaGFuKGNvbnN0IEtleSYga2V5KSBjb25zdCB7CisgIE5vZGUqIHggPSBoZWFk
XzsKKyAgaW50IGxldmVsID0gR2V0TWF4SGVpZ2h0KCkgLSAxOworICB3aGlsZSAodHJ1ZSkgewor
ICAgIGFzc2VydCh4ID09IGhlYWRfIHx8IGNvbXBhcmVfKHgtPmtleSwga2V5KSA8IDApOworICAg
IE5vZGUqIG5leHQgPSB4LT5OZXh0KGxldmVsKTsKKyAgICBpZiAobmV4dCA9PSBOVUxMIHx8IGNv
bXBhcmVfKG5leHQtPmtleSwga2V5KSA+PSAwKSB7CisgICAgICBpZiAobGV2ZWwgPT0gMCkgewor
ICAgICAgICByZXR1cm4geDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFN3aXRjaCB0byBu
ZXh0IGxpc3QKKyAgICAgICAgbGV2ZWwtLTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAg
eCA9IG5leHQ7CisgICAgfQorICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgY2xhc3Mg
Q29tcGFyYXRvcj4KK3R5cGVuYW1lIFNraXBMaXN0PEtleSxDb21wYXJhdG9yPjo6Tm9kZSogU2tp
cExpc3Q8S2V5LENvbXBhcmF0b3I+OjpGaW5kTGFzdCgpCisgICAgY29uc3QgeworICBOb2RlKiB4
ID0gaGVhZF87CisgIGludCBsZXZlbCA9IEdldE1heEhlaWdodCgpIC0gMTsKKyAgd2hpbGUgKHRy
dWUpIHsKKyAgICBOb2RlKiBuZXh0ID0geC0+TmV4dChsZXZlbCk7CisgICAgaWYgKG5leHQgPT0g
TlVMTCkgeworICAgICAgaWYgKGxldmVsID09IDApIHsKKyAgICAgICAgcmV0dXJuIHg7CisgICAg
ICB9IGVsc2UgeworICAgICAgICAvLyBTd2l0Y2ggdG8gbmV4dCBsaXN0CisgICAgICAgIGxldmVs
LS07CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIHggPSBuZXh0OworICAgIH0KKyAgfQor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIGNsYXNzIENvbXBhcmF0b3I+CitTa2lwTGlzdDxL
ZXksQ29tcGFyYXRvcj46OlNraXBMaXN0KENvbXBhcmF0b3IgY21wLCBBcmVuYSogYXJlbmEpCisg
ICAgOiBjb21wYXJlXyhjbXApLAorICAgICAgYXJlbmFfKGFyZW5hKSwKKyAgICAgIGhlYWRfKE5l
d05vZGUoMCAvKiBhbnkga2V5IHdpbGwgZG8gKi8sIGtNYXhIZWlnaHQpKSwKKyAgICAgIG1heF9o
ZWlnaHRfKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KDEpKSwKKyAgICAgIHJuZF8oMHhkZWFkYmVl
ZikgeworICBmb3IgKGludCBpID0gMDsgaSA8IGtNYXhIZWlnaHQ7IGkrKykgeworICAgIGhlYWRf
LT5TZXROZXh0KGksIE5VTEwpOworICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgY2xh
c3MgQ29tcGFyYXRvcj4KK3ZvaWQgU2tpcExpc3Q8S2V5LENvbXBhcmF0b3I+OjpJbnNlcnQoY29u
c3QgS2V5JiBrZXkpIHsKKyAgLy8gVE9ETyhvcHQpOiBXZSBjYW4gdXNlIGEgYmFycmllci1mcmVl
IHZhcmlhbnQgb2YgRmluZEdyZWF0ZXJPckVxdWFsKCkKKyAgLy8gaGVyZSBzaW5jZSBJbnNlcnQo
KSBpcyBleHRlcm5hbGx5IHN5bmNocm9uaXplZC4KKyAgTm9kZSogcHJldltrTWF4SGVpZ2h0XTsK
KyAgTm9kZSogeCA9IEZpbmRHcmVhdGVyT3JFcXVhbChrZXksIHByZXYpOworCisgIC8vIE91ciBk
YXRhIHN0cnVjdHVyZSBkb2VzIG5vdCBhbGxvdyBkdXBsaWNhdGUgaW5zZXJ0aW9uCisgIGFzc2Vy
dCh4ID09IE5VTEwgfHwgIUVxdWFsKGtleSwgeC0+a2V5KSk7CisKKyAgaW50IGhlaWdodCA9IFJh
bmRvbUhlaWdodCgpOworICBpZiAoaGVpZ2h0ID4gR2V0TWF4SGVpZ2h0KCkpIHsKKyAgICBmb3Ig
KGludCBpID0gR2V0TWF4SGVpZ2h0KCk7IGkgPCBoZWlnaHQ7IGkrKykgeworICAgICAgcHJldltp
XSA9IGhlYWRfOworICAgIH0KKyAgICAvL2ZwcmludGYoc3RkZXJyLCAiQ2hhbmdlIGhlaWdodCBm
cm9tICVkIHRvICVkXG4iLCBtYXhfaGVpZ2h0XywgaGVpZ2h0KTsKKworICAgIC8vIEl0IGlzIG9r
IHRvIG11dGF0ZSBtYXhfaGVpZ2h0XyB3aXRob3V0IGFueSBzeW5jaHJvbml6YXRpb24KKyAgICAv
LyB3aXRoIGNvbmN1cnJlbnQgcmVhZGVycy4gIEEgY29uY3VycmVudCByZWFkZXIgdGhhdCBvYnNl
cnZlcworICAgIC8vIHRoZSBuZXcgdmFsdWUgb2YgbWF4X2hlaWdodF8gd2lsbCBzZWUgZWl0aGVy
IHRoZSBvbGQgdmFsdWUgb2YKKyAgICAvLyBuZXcgbGV2ZWwgcG9pbnRlcnMgZnJvbSBoZWFkXyAo
TlVMTCksIG9yIGEgbmV3IHZhbHVlIHNldCBpbgorICAgIC8vIHRoZSBsb29wIGJlbG93LiAgSW4g
dGhlIGZvcm1lciBjYXNlIHRoZSByZWFkZXIgd2lsbAorICAgIC8vIGltbWVkaWF0ZWx5IGRyb3Ag
dG8gdGhlIG5leHQgbGV2ZWwgc2luY2UgTlVMTCBzb3J0cyBhZnRlciBhbGwKKyAgICAvLyBrZXlz
LiAgSW4gdGhlIGxhdHRlciBjYXNlIHRoZSByZWFkZXIgd2lsbCB1c2UgdGhlIG5ldyBub2RlLgor
ICAgIG1heF9oZWlnaHRfLk5vQmFycmllcl9TdG9yZShyZWludGVycHJldF9jYXN0PHZvaWQqPiho
ZWlnaHQpKTsKKyAgfQorCisgIHggPSBOZXdOb2RlKGtleSwgaGVpZ2h0KTsKKyAgZm9yIChpbnQg
aSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgeworICAgIC8vIE5vQmFycmllcl9TZXROZXh0KCkgc3Vm
ZmljZXMgc2luY2Ugd2Ugd2lsbCBhZGQgYSBiYXJyaWVyIHdoZW4KKyAgICAvLyB3ZSBwdWJsaXNo
IGEgcG9pbnRlciB0byAieCIgaW4gcHJldltpXS4KKyAgICB4LT5Ob0JhcnJpZXJfU2V0TmV4dChp
LCBwcmV2W2ldLT5Ob0JhcnJpZXJfTmV4dChpKSk7CisgICAgcHJldltpXS0+U2V0TmV4dChpLCB4
KTsKKyAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIGNsYXNzIENvbXBhcmF0b3I+Citi
b29sIFNraXBMaXN0PEtleSxDb21wYXJhdG9yPjo6Q29udGFpbnMoY29uc3QgS2V5JiBrZXkpIGNv
bnN0IHsKKyAgTm9kZSogeCA9IEZpbmRHcmVhdGVyT3JFcXVhbChrZXksIE5VTEwpOworICBpZiAo
eCAhPSBOVUxMICYmIEVxdWFsKGtleSwgeC0+a2V5KSkgeworICAgIHJldHVybiB0cnVlOworICB9
IGVsc2UgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorfQorCit9ICAvLyBuYW1lc3BhY2UgbGV2
ZWxkYgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9za2lwbGlzdF90
ZXN0LmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9za2lwbGlzdF90ZXN0LmNjCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmM3OGY0YjRmYjFhMGZjN2ZiNWFhZGJlZmEwZjdkMTllYWYwNmJhMWIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL3NraXBsaXN0X3Rlc3Qu
Y2MKQEAgLTAsMCArMSwzNzggQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNv
bnRyaWJ1dG9ycy4KKworI2luY2x1ZGUgImRiL3NraXBsaXN0LmgiCisjaW5jbHVkZSA8c2V0Pgor
I2luY2x1ZGUgImxldmVsZGIvZW52LmgiCisjaW5jbHVkZSAidXRpbC9hcmVuYS5oIgorI2luY2x1
ZGUgInV0aWwvaGFzaC5oIgorI2luY2x1ZGUgInV0aWwvcmFuZG9tLmgiCisjaW5jbHVkZSAidXRp
bC90ZXN0aGFybmVzcy5oIgorCituYW1lc3BhY2UgbGV2ZWxkYiB7CisKK3R5cGVkZWYgdWludDY0
X3QgS2V5OworCitzdHJ1Y3QgQ29tcGFyYXRvciB7CisgIGludCBvcGVyYXRvcigpKGNvbnN0IEtl
eSYgYSwgY29uc3QgS2V5JiBiKSBjb25zdCB7CisgICAgaWYgKGEgPCBiKSB7CisgICAgICByZXR1
cm4gLTE7CisgICAgfSBlbHNlIGlmIChhID4gYikgeworICAgICAgcmV0dXJuICsxOworICAgIH0g
ZWxzZSB7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIH0KK307CisKK2NsYXNzIFNraXBUZXN0
IHsgfTsKKworVEVTVChTa2lwVGVzdCwgRW1wdHkpIHsKKyAgQXJlbmEgYXJlbmE7CisgIENvbXBh
cmF0b3IgY21wOworICBTa2lwTGlzdDxLZXksIENvbXBhcmF0b3I+IGxpc3QoY21wLCAmYXJlbmEp
OworICBBU1NFUlRfVFJVRSghbGlzdC5Db250YWlucygxMCkpOworCisgIFNraXBMaXN0PEtleSwg
Q29tcGFyYXRvcj46Okl0ZXJhdG9yIGl0ZXIoJmxpc3QpOworICBBU1NFUlRfVFJVRSghaXRlci5W
YWxpZCgpKTsKKyAgaXRlci5TZWVrVG9GaXJzdCgpOworICBBU1NFUlRfVFJVRSghaXRlci5WYWxp
ZCgpKTsKKyAgaXRlci5TZWVrKDEwMCk7CisgIEFTU0VSVF9UUlVFKCFpdGVyLlZhbGlkKCkpOwor
ICBpdGVyLlNlZWtUb0xhc3QoKTsKKyAgQVNTRVJUX1RSVUUoIWl0ZXIuVmFsaWQoKSk7Cit9CisK
K1RFU1QoU2tpcFRlc3QsIEluc2VydEFuZExvb2t1cCkgeworICBjb25zdCBpbnQgTiA9IDIwMDA7
CisgIGNvbnN0IGludCBSID0gNTAwMDsKKyAgUmFuZG9tIHJuZCgxMDAwKTsKKyAgc3RkOjpzZXQ8
S2V5PiBrZXlzOworICBBcmVuYSBhcmVuYTsKKyAgQ29tcGFyYXRvciBjbXA7CisgIFNraXBMaXN0
PEtleSwgQ29tcGFyYXRvcj4gbGlzdChjbXAsICZhcmVuYSk7CisgIGZvciAoaW50IGkgPSAwOyBp
IDwgTjsgaSsrKSB7CisgICAgS2V5IGtleSA9IHJuZC5OZXh0KCkgJSBSOworICAgIGlmIChrZXlz
Lmluc2VydChrZXkpLnNlY29uZCkgeworICAgICAgbGlzdC5JbnNlcnQoa2V5KTsKKyAgICB9Cisg
IH0KKworICBmb3IgKGludCBpID0gMDsgaSA8IFI7IGkrKykgeworICAgIGlmIChsaXN0LkNvbnRh
aW5zKGkpKSB7CisgICAgICBBU1NFUlRfRVEoa2V5cy5jb3VudChpKSwgMSk7CisgICAgfSBlbHNl
IHsKKyAgICAgIEFTU0VSVF9FUShrZXlzLmNvdW50KGkpLCAwKTsKKyAgICB9CisgIH0KKworICAv
LyBTaW1wbGUgaXRlcmF0b3IgdGVzdHMKKyAgeworICAgIFNraXBMaXN0PEtleSwgQ29tcGFyYXRv
cj46Okl0ZXJhdG9yIGl0ZXIoJmxpc3QpOworICAgIEFTU0VSVF9UUlVFKCFpdGVyLlZhbGlkKCkp
OworCisgICAgaXRlci5TZWVrKDApOworICAgIEFTU0VSVF9UUlVFKGl0ZXIuVmFsaWQoKSk7Cisg
ICAgQVNTRVJUX0VRKCooa2V5cy5iZWdpbigpKSwgaXRlci5rZXkoKSk7CisKKyAgICBpdGVyLlNl
ZWtUb0ZpcnN0KCk7CisgICAgQVNTRVJUX1RSVUUoaXRlci5WYWxpZCgpKTsKKyAgICBBU1NFUlRf
RVEoKihrZXlzLmJlZ2luKCkpLCBpdGVyLmtleSgpKTsKKworICAgIGl0ZXIuU2Vla1RvTGFzdCgp
OworICAgIEFTU0VSVF9UUlVFKGl0ZXIuVmFsaWQoKSk7CisgICAgQVNTRVJUX0VRKCooa2V5cy5y
YmVnaW4oKSksIGl0ZXIua2V5KCkpOworICB9CisKKyAgLy8gRm9yd2FyZCBpdGVyYXRpb24gdGVz
dAorICBmb3IgKGludCBpID0gMDsgaSA8IFI7IGkrKykgeworICAgIFNraXBMaXN0PEtleSwgQ29t
cGFyYXRvcj46Okl0ZXJhdG9yIGl0ZXIoJmxpc3QpOworICAgIGl0ZXIuU2VlayhpKTsKKworICAg
IC8vIENvbXBhcmUgYWdhaW5zdCBtb2RlbCBpdGVyYXRvcgorICAgIHN0ZDo6c2V0PEtleT46Oml0
ZXJhdG9yIG1vZGVsX2l0ZXIgPSBrZXlzLmxvd2VyX2JvdW5kKGkpOworICAgIGZvciAoaW50IGog
PSAwOyBqIDwgMzsgaisrKSB7CisgICAgICBpZiAobW9kZWxfaXRlciA9PSBrZXlzLmVuZCgpKSB7
CisgICAgICAgIEFTU0VSVF9UUlVFKCFpdGVyLlZhbGlkKCkpOworICAgICAgICBicmVhazsKKyAg
ICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVF9UUlVFKGl0ZXIuVmFsaWQoKSk7CisgICAgICAg
IEFTU0VSVF9FUSgqbW9kZWxfaXRlciwgaXRlci5rZXkoKSk7CisgICAgICAgICsrbW9kZWxfaXRl
cjsKKyAgICAgICAgaXRlci5OZXh0KCk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgLy8gQmFj
a3dhcmQgaXRlcmF0aW9uIHRlc3QKKyAgeworICAgIFNraXBMaXN0PEtleSwgQ29tcGFyYXRvcj46
Okl0ZXJhdG9yIGl0ZXIoJmxpc3QpOworICAgIGl0ZXIuU2Vla1RvTGFzdCgpOworCisgICAgLy8g
Q29tcGFyZSBhZ2FpbnN0IG1vZGVsIGl0ZXJhdG9yCisgICAgZm9yIChzdGQ6OnNldDxLZXk+Ojpy
ZXZlcnNlX2l0ZXJhdG9yIG1vZGVsX2l0ZXIgPSBrZXlzLnJiZWdpbigpOworICAgICAgICAgbW9k
ZWxfaXRlciAhPSBrZXlzLnJlbmQoKTsKKyAgICAgICAgICsrbW9kZWxfaXRlcikgeworICAgICAg
QVNTRVJUX1RSVUUoaXRlci5WYWxpZCgpKTsKKyAgICAgIEFTU0VSVF9FUSgqbW9kZWxfaXRlciwg
aXRlci5rZXkoKSk7CisgICAgICBpdGVyLlByZXYoKTsKKyAgICB9CisgICAgQVNTRVJUX1RSVUUo
IWl0ZXIuVmFsaWQoKSk7CisgIH0KK30KKworLy8gV2Ugd2FudCB0byBtYWtlIHN1cmUgdGhhdCB3
aXRoIGEgc2luZ2xlIHdyaXRlciBhbmQgbXVsdGlwbGUKKy8vIGNvbmN1cnJlbnQgcmVhZGVycyAo
d2l0aCBubyBzeW5jaHJvbml6YXRpb24gb3RoZXIgdGhhbiB3aGVuIGEKKy8vIHJlYWRlcidzIGl0
ZXJhdG9yIGlzIGNyZWF0ZWQpLCB0aGUgcmVhZGVyIGFsd2F5cyBvYnNlcnZlcyBhbGwgdGhlCisv
LyBkYXRhIHRoYXQgd2FzIHByZXNlbnQgaW4gdGhlIHNraXAgbGlzdCB3aGVuIHRoZSBpdGVyYXRv
ciB3YXMKKy8vIGNvbnN0cnVjdG9yLiAgQmVjYXVzZSBpbnNlcnRpb25zIGFyZSBoYXBwZW5pbmcg
Y29uY3VycmVudGx5LCB3ZSBtYXkKKy8vIGFsc28gb2JzZXJ2ZSBuZXcgdmFsdWVzIHRoYXQgd2Vy
ZSBpbnNlcnRlZCBzaW5jZSB0aGUgaXRlcmF0b3Igd2FzCisvLyBjb25zdHJ1Y3RlZCwgYnV0IHdl
IHNob3VsZCBuZXZlciBtaXNzIGFueSB2YWx1ZXMgdGhhdCB3ZXJlIHByZXNlbnQKKy8vIGF0IGl0
ZXJhdG9yIGNvbnN0cnVjdGlvbiB0aW1lLgorLy8KKy8vIFdlIGdlbmVyYXRlIG11bHRpLXBhcnQg
a2V5czoKKy8vICAgICA8a2V5LGdlbixoYXNoPgorLy8gd2hlcmU6CisvLyAgICAga2V5IGlzIGlu
IHJhbmdlIFswLi5LLTFdCisvLyAgICAgZ2VuIGlzIGEgZ2VuZXJhdGlvbiBudW1iZXIgZm9yIGtl
eQorLy8gICAgIGhhc2ggaXMgaGFzaChrZXksZ2VuKQorLy8KKy8vIFRoZSBpbnNlcnRpb24gY29k
ZSBwaWNrcyBhIHJhbmRvbSBrZXksIHNldHMgZ2VuIHRvIGJlIDEgKyB0aGUgbGFzdAorLy8gZ2Vu
ZXJhdGlvbiBudW1iZXIgaW5zZXJ0ZWQgZm9yIHRoYXQga2V5LCBhbmQgc2V0cyBoYXNoIHRvIEhh
c2goa2V5LGdlbikuCisvLworLy8gQXQgdGhlIGJlZ2lubmluZyBvZiBhIHJlYWQsIHdlIHNuYXBz
aG90IHRoZSBsYXN0IGluc2VydGVkCisvLyBnZW5lcmF0aW9uIG51bWJlciBmb3IgZWFjaCBrZXku
ICBXZSB0aGVuIGl0ZXJhdGUsIGluY2x1ZGluZyByYW5kb20KKy8vIGNhbGxzIHRvIE5leHQoKSBh
bmQgU2VlaygpLiAgRm9yIGV2ZXJ5IGtleSB3ZSBlbmNvdW50ZXIsIHdlCisvLyBjaGVjayB0aGF0
IGl0IGlzIGVpdGhlciBleHBlY3RlZCBnaXZlbiB0aGUgaW5pdGlhbCBzbmFwc2hvdCBvciBoYXMK
Ky8vIGJlZW4gY29uY3VycmVudGx5IGFkZGVkIHNpbmNlIHRoZSBpdGVyYXRvciBzdGFydGVkLgor
Y2xhc3MgQ29uY3VycmVudFRlc3QgeworIHByaXZhdGU6CisgIHN0YXRpYyBjb25zdCB1aW50MzJf
dCBLID0gNDsKKworICBzdGF0aWMgdWludDY0X3Qga2V5KEtleSBrZXkpIHsgcmV0dXJuIChrZXkg
Pj4gNDApOyB9CisgIHN0YXRpYyB1aW50NjRfdCBnZW4oS2V5IGtleSkgeyByZXR1cm4gKGtleSA+
PiA4KSAmIDB4ZmZmZmZmZmZ1OyB9CisgIHN0YXRpYyB1aW50NjRfdCBoYXNoKEtleSBrZXkpIHsg
cmV0dXJuIGtleSAmIDB4ZmY7IH0KKworICBzdGF0aWMgdWludDY0X3QgSGFzaE51bWJlcnModWlu
dDY0X3QgaywgdWludDY0X3QgZykgeworICAgIHVpbnQ2NF90IGRhdGFbMl0gPSB7IGssIGcgfTsK
KyAgICByZXR1cm4gSGFzaChyZWludGVycHJldF9jYXN0PGNoYXIqPihkYXRhKSwgc2l6ZW9mKGRh
dGEpLCAwKTsKKyAgfQorCisgIHN0YXRpYyBLZXkgTWFrZUtleSh1aW50NjRfdCBrLCB1aW50NjRf
dCBnKSB7CisgICAgYXNzZXJ0KHNpemVvZihLZXkpID09IHNpemVvZih1aW50NjRfdCkpOworICAg
IGFzc2VydChrIDw9IEspOyAgLy8gV2Ugc29tZXRpbWVzIHBhc3MgSyB0byBzZWVrIHRvIHRoZSBl
bmQgb2YgdGhlIHNraXBsaXN0CisgICAgYXNzZXJ0KGcgPD0gMHhmZmZmZmZmZnUpOworICAgIHJl
dHVybiAoKGsgPDwgNDApIHwgKGcgPDwgOCkgfCAoSGFzaE51bWJlcnMoaywgZykgJiAweGZmKSk7
CisgIH0KKworICBzdGF0aWMgYm9vbCBJc1ZhbGlkS2V5KEtleSBrKSB7CisgICAgcmV0dXJuIGhh
c2goaykgPT0gKEhhc2hOdW1iZXJzKGtleShrKSwgZ2VuKGspKSAmIDB4ZmYpOworICB9CisKKyAg
c3RhdGljIEtleSBSYW5kb21UYXJnZXQoUmFuZG9tKiBybmQpIHsKKyAgICBzd2l0Y2ggKHJuZC0+
TmV4dCgpICUgMTApIHsKKyAgICAgIGNhc2UgMDoKKyAgICAgICAgLy8gU2VlayB0byBiZWdpbm5p
bmcKKyAgICAgICAgcmV0dXJuIE1ha2VLZXkoMCwgMCk7CisgICAgICBjYXNlIDE6CisgICAgICAg
IC8vIFNlZWsgdG8gZW5kCisgICAgICAgIHJldHVybiBNYWtlS2V5KEssIDApOworICAgICAgZGVm
YXVsdDoKKyAgICAgICAgLy8gU2VlayB0byBtaWRkbGUKKyAgICAgICAgcmV0dXJuIE1ha2VLZXko
cm5kLT5OZXh0KCkgJSBLLCAwKTsKKyAgICB9CisgIH0KKworICAvLyBQZXIta2V5IGdlbmVyYXRp
b24KKyAgc3RydWN0IFN0YXRlIHsKKyAgICBwb3J0OjpBdG9taWNQb2ludGVyIGdlbmVyYXRpb25b
S107CisgICAgdm9pZCBTZXQoaW50IGssIGludHB0cl90IHYpIHsKKyAgICAgIGdlbmVyYXRpb25b
a10uUmVsZWFzZV9TdG9yZShyZWludGVycHJldF9jYXN0PHZvaWQqPih2KSk7CisgICAgfQorICAg
IGludHB0cl90IEdldChpbnQgaykgeworICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8aW50
cHRyX3Q+KGdlbmVyYXRpb25ba10uQWNxdWlyZV9Mb2FkKCkpOworICAgIH0KKworICAgIFN0YXRl
KCkgeworICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBLOyBrKyspIHsKKyAgICAgICAgU2V0KGss
IDApOworICAgICAgfQorICAgIH0KKyAgfTsKKworICAvLyBDdXJyZW50IHN0YXRlIG9mIHRoZSB0
ZXN0CisgIFN0YXRlIGN1cnJlbnRfOworCisgIEFyZW5hIGFyZW5hXzsKKworICAvLyBTa2lwTGlz
dCBpcyBub3QgcHJvdGVjdGVkIGJ5IG11Xy4gIFdlIGp1c3QgdXNlIGEgc2luZ2xlIHdyaXRlcgor
ICAvLyB0aHJlYWQgdG8gbW9kaWZ5IGl0LgorICBTa2lwTGlzdDxLZXksIENvbXBhcmF0b3I+IGxp
c3RfOworCisgcHVibGljOgorICBDb25jdXJyZW50VGVzdCgpIDogbGlzdF8oQ29tcGFyYXRvcigp
LCAmYXJlbmFfKSB7IH0KKworICAvLyBSRVFVSVJFUzogRXh0ZXJuYWwgc3luY2hyb25pemF0aW9u
CisgIHZvaWQgV3JpdGVTdGVwKFJhbmRvbSogcm5kKSB7CisgICAgY29uc3QgdWludDMyX3QgayA9
IHJuZC0+TmV4dCgpICUgSzsKKyAgICBjb25zdCBpbnRwdHJfdCBnID0gY3VycmVudF8uR2V0KGsp
ICsgMTsKKyAgICBjb25zdCBLZXkga2V5ID0gTWFrZUtleShrLCBnKTsKKyAgICBsaXN0Xy5JbnNl
cnQoa2V5KTsKKyAgICBjdXJyZW50Xy5TZXQoaywgZyk7CisgIH0KKworICB2b2lkIFJlYWRTdGVw
KFJhbmRvbSogcm5kKSB7CisgICAgLy8gUmVtZW1iZXIgdGhlIGluaXRpYWwgY29tbWl0dGVkIHN0
YXRlIG9mIHRoZSBza2lwbGlzdC4KKyAgICBTdGF0ZSBpbml0aWFsX3N0YXRlOworICAgIGZvciAo
aW50IGsgPSAwOyBrIDwgSzsgaysrKSB7CisgICAgICBpbml0aWFsX3N0YXRlLlNldChrLCBjdXJy
ZW50Xy5HZXQoaykpOworICAgIH0KKworICAgIEtleSBwb3MgPSBSYW5kb21UYXJnZXQocm5kKTsK
KyAgICBTa2lwTGlzdDxLZXksIENvbXBhcmF0b3I+OjpJdGVyYXRvciBpdGVyKCZsaXN0Xyk7Cisg
ICAgaXRlci5TZWVrKHBvcyk7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgIEtleSBjdXJyZW50
OworICAgICAgaWYgKCFpdGVyLlZhbGlkKCkpIHsKKyAgICAgICAgY3VycmVudCA9IE1ha2VLZXko
SywgMCk7CisgICAgICB9IGVsc2UgeworICAgICAgICBjdXJyZW50ID0gaXRlci5rZXkoKTsKKyAg
ICAgICAgQVNTRVJUX1RSVUUoSXNWYWxpZEtleShjdXJyZW50KSkgPDwgY3VycmVudDsKKyAgICAg
IH0KKyAgICAgIEFTU0VSVF9MRShwb3MsIGN1cnJlbnQpIDw8ICJzaG91bGQgbm90IGdvIGJhY2t3
YXJkcyI7CisKKyAgICAgIC8vIFZlcmlmeSB0aGF0IGV2ZXJ5dGhpbmcgaW4gW3BvcyxjdXJyZW50
KSB3YXMgbm90IHByZXNlbnQgaW4KKyAgICAgIC8vIGluaXRpYWxfc3RhdGUuCisgICAgICB3aGls
ZSAocG9zIDwgY3VycmVudCkgeworICAgICAgICBBU1NFUlRfTFQoa2V5KHBvcyksIEspIDw8IHBv
czsKKworICAgICAgICAvLyBOb3RlIHRoYXQgZ2VuZXJhdGlvbiAwIGlzIG5ldmVyIGluc2VydGVk
LCBzbyBpdCBpcyBvayBpZgorICAgICAgICAvLyA8KiwwLCo+IGlzIG1pc3NpbmcuCisgICAgICAg
IEFTU0VSVF9UUlVFKChnZW4ocG9zKSA9PSAwKSB8fAorICAgICAgICAgICAgICAgICAgICAoZ2Vu
KHBvcykgPiBpbml0aWFsX3N0YXRlLkdldChrZXkocG9zKSkpCisgICAgICAgICAgICAgICAgICAg
ICkgPDwgImtleTogIiA8PCBrZXkocG9zKQorICAgICAgICAgICAgICAgICAgICAgIDw8ICI7IGdl
bjogIiA8PCBnZW4ocG9zKQorICAgICAgICAgICAgICAgICAgICAgIDw8ICI7IGluaXRnZW46ICIK
KyAgICAgICAgICAgICAgICAgICAgICA8PCBpbml0aWFsX3N0YXRlLkdldChrZXkocG9zKSk7CisK
KyAgICAgICAgLy8gQWR2YW5jZSB0byBuZXh0IGtleSBpbiB0aGUgdmFsaWQga2V5IHNwYWNlCisg
ICAgICAgIGlmIChrZXkocG9zKSA8IGtleShjdXJyZW50KSkgeworICAgICAgICAgIHBvcyA9IE1h
a2VLZXkoa2V5KHBvcykgKyAxLCAwKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBwb3Mg
PSBNYWtlS2V5KGtleShwb3MpLCBnZW4ocG9zKSArIDEpOworICAgICAgICB9CisgICAgICB9CisK
KyAgICAgIGlmICghaXRlci5WYWxpZCgpKSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisg
ICAgICBpZiAocm5kLT5OZXh0KCkgJSAyKSB7CisgICAgICAgIGl0ZXIuTmV4dCgpOworICAgICAg
ICBwb3MgPSBNYWtlS2V5KGtleShwb3MpLCBnZW4ocG9zKSArIDEpOworICAgICAgfSBlbHNlIHsK
KyAgICAgICAgS2V5IG5ld190YXJnZXQgPSBSYW5kb21UYXJnZXQocm5kKTsKKyAgICAgICAgaWYg
KG5ld190YXJnZXQgPiBwb3MpIHsKKyAgICAgICAgICBwb3MgPSBuZXdfdGFyZ2V0OworICAgICAg
ICAgIGl0ZXIuU2VlayhuZXdfdGFyZ2V0KTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAg
fQorfTsKK2NvbnN0IHVpbnQzMl90IENvbmN1cnJlbnRUZXN0OjpLOworCisvLyBTaW1wbGUgdGVz
dCB0aGF0IGRvZXMgc2luZ2xlLXRocmVhZGVkIHRlc3Rpbmcgb2YgdGhlIENvbmN1cnJlbnRUZXN0
CisvLyBzY2FmZm9sZGluZy4KK1RFU1QoU2tpcFRlc3QsIENvbmN1cnJlbnRXaXRob3V0VGhyZWFk
cykgeworICBDb25jdXJyZW50VGVzdCB0ZXN0OworICBSYW5kb20gcm5kKHRlc3Q6OlJhbmRvbVNl
ZWQoKSk7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgeworICAgIHRlc3QuUmVh
ZFN0ZXAoJnJuZCk7CisgICAgdGVzdC5Xcml0ZVN0ZXAoJnJuZCk7CisgIH0KK30KKworY2xhc3Mg
VGVzdFN0YXRlIHsKKyBwdWJsaWM6CisgIENvbmN1cnJlbnRUZXN0IHRfOworICBpbnQgc2VlZF87
CisgIHBvcnQ6OkF0b21pY1BvaW50ZXIgcXVpdF9mbGFnXzsKKworICBlbnVtIFJlYWRlclN0YXRl
IHsKKyAgICBTVEFSVElORywKKyAgICBSVU5OSU5HLAorICAgIERPTkUKKyAgfTsKKworICBleHBs
aWNpdCBUZXN0U3RhdGUoaW50IHMpCisgICAgICA6IHNlZWRfKHMpLAorICAgICAgICBxdWl0X2Zs
YWdfKE5VTEwpLAorICAgICAgICBzdGF0ZV8oU1RBUlRJTkcpLAorICAgICAgICBzdGF0ZV9jdl8o
Jm11Xykge30KKworICB2b2lkIFdhaXQoUmVhZGVyU3RhdGUgcykgeworICAgIG11Xy5Mb2NrKCk7
CisgICAgd2hpbGUgKHN0YXRlXyAhPSBzKSB7CisgICAgICBzdGF0ZV9jdl8uV2FpdCgpOworICAg
IH0KKyAgICBtdV8uVW5sb2NrKCk7CisgIH0KKworICB2b2lkIENoYW5nZShSZWFkZXJTdGF0ZSBz
KSB7CisgICAgbXVfLkxvY2soKTsKKyAgICBzdGF0ZV8gPSBzOworICAgIHN0YXRlX2N2Xy5TaWdu
YWwoKTsKKyAgICBtdV8uVW5sb2NrKCk7CisgIH0KKworIHByaXZhdGU6CisgIHBvcnQ6Ok11dGV4
IG11XzsKKyAgUmVhZGVyU3RhdGUgc3RhdGVfOworICBwb3J0OjpDb25kVmFyIHN0YXRlX2N2XzsK
K307CisKK3N0YXRpYyB2b2lkIENvbmN1cnJlbnRSZWFkZXIodm9pZCogYXJnKSB7CisgIFRlc3RT
dGF0ZSogc3RhdGUgPSByZWludGVycHJldF9jYXN0PFRlc3RTdGF0ZSo+KGFyZyk7CisgIFJhbmRv
bSBybmQoc3RhdGUtPnNlZWRfKTsKKyAgaW50NjRfdCByZWFkcyA9IDA7CisgIHN0YXRlLT5DaGFu
Z2UoVGVzdFN0YXRlOjpSVU5OSU5HKTsKKyAgd2hpbGUgKCFzdGF0ZS0+cXVpdF9mbGFnXy5BY3F1
aXJlX0xvYWQoKSkgeworICAgIHN0YXRlLT50Xy5SZWFkU3RlcCgmcm5kKTsKKyAgICArK3JlYWRz
OworICB9CisgIHN0YXRlLT5DaGFuZ2UoVGVzdFN0YXRlOjpET05FKTsKK30KKworc3RhdGljIHZv
aWQgUnVuQ29uY3VycmVudChpbnQgcnVuKSB7CisgIGNvbnN0IGludCBzZWVkID0gdGVzdDo6UmFu
ZG9tU2VlZCgpICsgKHJ1biAqIDEwMCk7CisgIFJhbmRvbSBybmQoc2VlZCk7CisgIGNvbnN0IGlu
dCBOID0gMTAwMDsKKyAgY29uc3QgaW50IGtTaXplID0gMTAwMDsKKyAgZm9yIChpbnQgaSA9IDA7
IGkgPCBOOyBpKyspIHsKKyAgICBpZiAoKGkgJSAxMDApID09IDApIHsKKyAgICAgIGZwcmludGYo
c3RkZXJyLCAiUnVuICVkIG9mICVkXG4iLCBpLCBOKTsKKyAgICB9CisgICAgVGVzdFN0YXRlIHN0
YXRlKHNlZWQgKyAxKTsKKyAgICBFbnY6OkRlZmF1bHQoKS0+U2NoZWR1bGUoQ29uY3VycmVudFJl
YWRlciwgJnN0YXRlKTsKKyAgICBzdGF0ZS5XYWl0KFRlc3RTdGF0ZTo6UlVOTklORyk7CisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBrU2l6ZTsgaSsrKSB7CisgICAgICBzdGF0ZS50Xy5Xcml0ZVN0
ZXAoJnJuZCk7CisgICAgfQorICAgIHN0YXRlLnF1aXRfZmxhZ18uUmVsZWFzZV9TdG9yZSgmc3Rh
dGUpOyAgLy8gQW55IG5vbi1OVUxMIGFyZyB3aWxsIGRvCisgICAgc3RhdGUuV2FpdChUZXN0U3Rh
dGU6OkRPTkUpOworICB9Cit9CisKK1RFU1QoU2tpcFRlc3QsIENvbmN1cnJlbnQxKSB7IFJ1bkNv
bmN1cnJlbnQoMSk7IH0KK1RFU1QoU2tpcFRlc3QsIENvbmN1cnJlbnQyKSB7IFJ1bkNvbmN1cnJl
bnQoMik7IH0KK1RFU1QoU2tpcFRlc3QsIENvbmN1cnJlbnQzKSB7IFJ1bkNvbmN1cnJlbnQoMyk7
IH0KK1RFU1QoU2tpcFRlc3QsIENvbmN1cnJlbnQ0KSB7IFJ1bkNvbmN1cnJlbnQoNCk7IH0KK1RF
U1QoU2tpcFRlc3QsIENvbmN1cnJlbnQ1KSB7IFJ1bkNvbmN1cnJlbnQoNSk7IH0KKworfSAgLy8g
bmFtZXNwYWNlIGxldmVsZGIKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KSB7Cisg
IHJldHVybiBsZXZlbGRiOjp0ZXN0OjpSdW5BbGxUZXN0cygpOworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9zbmFwc2hvdC5oIGIvU291cmNlL1RoaXJkUGFydHkv
bGV2ZWxkYi9kYi9zbmFwc2hvdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU3ZjhmZDJjMzdjZjhhNDgyYzQ1ZjU1
MjRhYTcyOWU3NGY3YjNhYTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
ZXZlbGRiL2RiL3NuYXBzaG90LmgKQEAgLTAsMCArMSw2NiBAQAorLy8gQ29weXJpZ2h0IChjKSAy
MDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmls
ZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgorCisjaWZuZGVmIFNUT1JBR0VfTEVWRUxEQl9E
Ql9TTkFQU0hPVF9IXworI2RlZmluZSBTVE9SQUdFX0xFVkVMREJfREJfU05BUFNIT1RfSF8KKwor
I2luY2x1ZGUgImxldmVsZGIvZGIuaCIKKworbmFtZXNwYWNlIGxldmVsZGIgeworCitjbGFzcyBT
bmFwc2hvdExpc3Q7CisKKy8vIFNuYXBzaG90cyBhcmUga2VwdCBpbiBhIGRvdWJseS1saW5rZWQg
bGlzdCBpbiB0aGUgREIuCisvLyBFYWNoIFNuYXBzaG90SW1wbCBjb3JyZXNwb25kcyB0byBhIHBh
cnRpY3VsYXIgc2VxdWVuY2UgbnVtYmVyLgorY2xhc3MgU25hcHNob3RJbXBsIDogcHVibGljIFNu
YXBzaG90IHsKKyBwdWJsaWM6CisgIFNlcXVlbmNlTnVtYmVyIG51bWJlcl87ICAvLyBjb25zdCBh
ZnRlciBjcmVhdGlvbgorCisgcHJpdmF0ZToKKyAgZnJpZW5kIGNsYXNzIFNuYXBzaG90TGlzdDsK
KworICAvLyBTbmFwc2hvdEltcGwgaXMga2VwdCBpbiBhIGRvdWJseS1saW5rZWQgY2lyY3VsYXIg
bGlzdAorICBTbmFwc2hvdEltcGwqIHByZXZfOworICBTbmFwc2hvdEltcGwqIG5leHRfOworCisg
IFNuYXBzaG90TGlzdCogbGlzdF87ICAgICAgICAgICAgICAgICAvLyBqdXN0IGZvciBzYW5pdHkg
Y2hlY2tzCit9OworCitjbGFzcyBTbmFwc2hvdExpc3QgeworIHB1YmxpYzoKKyAgU25hcHNob3RM
aXN0KCkgeworICAgIGxpc3RfLnByZXZfID0gJmxpc3RfOworICAgIGxpc3RfLm5leHRfID0gJmxp
c3RfOworICB9CisKKyAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGxpc3RfLm5leHRfID09
ICZsaXN0XzsgfQorICBTbmFwc2hvdEltcGwqIG9sZGVzdCgpIGNvbnN0IHsgYXNzZXJ0KCFlbXB0
eSgpKTsgcmV0dXJuIGxpc3RfLm5leHRfOyB9CisgIFNuYXBzaG90SW1wbCogbmV3ZXN0KCkgY29u
c3QgeyBhc3NlcnQoIWVtcHR5KCkpOyByZXR1cm4gbGlzdF8ucHJldl87IH0KKworICBjb25zdCBT
bmFwc2hvdEltcGwqIE5ldyhTZXF1ZW5jZU51bWJlciBzZXEpIHsKKyAgICBTbmFwc2hvdEltcGwq
IHMgPSBuZXcgU25hcHNob3RJbXBsOworICAgIHMtPm51bWJlcl8gPSBzZXE7CisgICAgcy0+bGlz
dF8gPSB0aGlzOworICAgIHMtPm5leHRfID0gJmxpc3RfOworICAgIHMtPnByZXZfID0gbGlzdF8u
cHJldl87CisgICAgcy0+cHJldl8tPm5leHRfID0gczsKKyAgICBzLT5uZXh0Xy0+cHJldl8gPSBz
OworICAgIHJldHVybiBzOworICB9CisKKyAgdm9pZCBEZWxldGUoY29uc3QgU25hcHNob3RJbXBs
KiBzKSB7CisgICAgYXNzZXJ0KHMtPmxpc3RfID09IHRoaXMpOworICAgIHMtPnByZXZfLT5uZXh0
XyA9IHMtPm5leHRfOworICAgIHMtPm5leHRfLT5wcmV2XyA9IHMtPnByZXZfOworICAgIGRlbGV0
ZSBzOworICB9CisKKyBwcml2YXRlOgorICAvLyBEdW1teSBoZWFkIG9mIGRvdWJseS1saW5rZWQg
bGlzdCBvZiBzbmFwc2hvdHMKKyAgU25hcHNob3RJbXBsIGxpc3RfOworfTsKKworfSAgLy8gbmFt
ZXNwYWNlIGxldmVsZGIKKworI2VuZGlmICAvLyBTVE9SQUdFX0xFVkVMREJfREJfU05BUFNIT1Rf
SF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvdGFibGVfY2FjaGUu
Y2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL3RhYmxlX2NhY2hlLmNjCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjQ5N2RiMjcwNzY2ZDg4NTdkZGIzNTVhZDA5ZWQwODkyZTRhYjJkYWEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL3RhYmxlX2NhY2hlLmNjCkBAIC0w
LDAgKzEsMTIxIEBACisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRv
cnMuCisKKyNpbmNsdWRlICJkYi90YWJsZV9jYWNoZS5oIgorCisjaW5jbHVkZSAiZGIvZmlsZW5h
bWUuaCIKKyNpbmNsdWRlICJsZXZlbGRiL2Vudi5oIgorI2luY2x1ZGUgImxldmVsZGIvdGFibGUu
aCIKKyNpbmNsdWRlICJ1dGlsL2NvZGluZy5oIgorCituYW1lc3BhY2UgbGV2ZWxkYiB7CisKK3N0
cnVjdCBUYWJsZUFuZEZpbGUgeworICBSYW5kb21BY2Nlc3NGaWxlKiBmaWxlOworICBUYWJsZSog
dGFibGU7Cit9OworCitzdGF0aWMgdm9pZCBEZWxldGVFbnRyeShjb25zdCBTbGljZSYga2V5LCB2
b2lkKiB2YWx1ZSkgeworICBUYWJsZUFuZEZpbGUqIHRmID0gcmVpbnRlcnByZXRfY2FzdDxUYWJs
ZUFuZEZpbGUqPih2YWx1ZSk7CisgIGRlbGV0ZSB0Zi0+dGFibGU7CisgIGRlbGV0ZSB0Zi0+Zmls
ZTsKKyAgZGVsZXRlIHRmOworfQorCitzdGF0aWMgdm9pZCBVbnJlZkVudHJ5KHZvaWQqIGFyZzEs
IHZvaWQqIGFyZzIpIHsKKyAgQ2FjaGUqIGNhY2hlID0gcmVpbnRlcnByZXRfY2FzdDxDYWNoZSo+
KGFyZzEpOworICBDYWNoZTo6SGFuZGxlKiBoID0gcmVpbnRlcnByZXRfY2FzdDxDYWNoZTo6SGFu
ZGxlKj4oYXJnMik7CisgIGNhY2hlLT5SZWxlYXNlKGgpOworfQorCitUYWJsZUNhY2hlOjpUYWJs
ZUNhY2hlKGNvbnN0IHN0ZDo6c3RyaW5nJiBkYm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IE9wdGlvbnMqIG9wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBlbnRy
aWVzKQorICAgIDogZW52XyhvcHRpb25zLT5lbnYpLAorICAgICAgZGJuYW1lXyhkYm5hbWUpLAor
ICAgICAgb3B0aW9uc18ob3B0aW9ucyksCisgICAgICBjYWNoZV8oTmV3TFJVQ2FjaGUoZW50cmll
cykpIHsKK30KKworVGFibGVDYWNoZTo6flRhYmxlQ2FjaGUoKSB7CisgIGRlbGV0ZSBjYWNoZV87
Cit9CisKK1N0YXR1cyBUYWJsZUNhY2hlOjpGaW5kVGFibGUodWludDY0X3QgZmlsZV9udW1iZXIs
IHVpbnQ2NF90IGZpbGVfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FjaGU6
OkhhbmRsZSoqIGhhbmRsZSkgeworICBTdGF0dXMgczsKKyAgY2hhciBidWZbc2l6ZW9mKGZpbGVf
bnVtYmVyKV07CisgIEVuY29kZUZpeGVkNjQoYnVmLCBmaWxlX251bWJlcik7CisgIFNsaWNlIGtl
eShidWYsIHNpemVvZihidWYpKTsKKyAgKmhhbmRsZSA9IGNhY2hlXy0+TG9va3VwKGtleSk7Cisg
IGlmICgqaGFuZGxlID09IE5VTEwpIHsKKyAgICBzdGQ6OnN0cmluZyBmbmFtZSA9IFRhYmxlRmls
ZU5hbWUoZGJuYW1lXywgZmlsZV9udW1iZXIpOworICAgIFJhbmRvbUFjY2Vzc0ZpbGUqIGZpbGUg
PSBOVUxMOworICAgIFRhYmxlKiB0YWJsZSA9IE5VTEw7CisgICAgcyA9IGVudl8tPk5ld1JhbmRv
bUFjY2Vzc0ZpbGUoZm5hbWUsICZmaWxlKTsKKyAgICBpZiAocy5vaygpKSB7CisgICAgICBzID0g
VGFibGU6Ok9wZW4oKm9wdGlvbnNfLCBmaWxlLCBmaWxlX3NpemUsICZ0YWJsZSk7CisgICAgfQor
CisgICAgaWYgKCFzLm9rKCkpIHsKKyAgICAgIGFzc2VydCh0YWJsZSA9PSBOVUxMKTsKKyAgICAg
IGRlbGV0ZSBmaWxlOworICAgICAgLy8gV2UgZG8gbm90IGNhY2hlIGVycm9yIHJlc3VsdHMgc28g
dGhhdCBpZiB0aGUgZXJyb3IgaXMgdHJhbnNpZW50LAorICAgICAgLy8gb3Igc29tZWJvZHkgcmVw
YWlycyB0aGUgZmlsZSwgd2UgcmVjb3ZlciBhdXRvbWF0aWNhbGx5LgorICAgIH0gZWxzZSB7Cisg
ICAgICBUYWJsZUFuZEZpbGUqIHRmID0gbmV3IFRhYmxlQW5kRmlsZTsKKyAgICAgIHRmLT5maWxl
ID0gZmlsZTsKKyAgICAgIHRmLT50YWJsZSA9IHRhYmxlOworICAgICAgKmhhbmRsZSA9IGNhY2hl
Xy0+SW5zZXJ0KGtleSwgdGYsIDEsICZEZWxldGVFbnRyeSk7CisgICAgfQorICB9CisgIHJldHVy
biBzOworfQorCitJdGVyYXRvciogVGFibGVDYWNoZTo6TmV3SXRlcmF0b3IoY29uc3QgUmVhZE9w
dGlvbnMmIG9wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0
X3QgZmlsZV9udW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0
X3QgZmlsZV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhYmxlKiog
dGFibGVwdHIpIHsKKyAgaWYgKHRhYmxlcHRyICE9IE5VTEwpIHsKKyAgICAqdGFibGVwdHIgPSBO
VUxMOworICB9CisKKyAgQ2FjaGU6OkhhbmRsZSogaGFuZGxlID0gTlVMTDsKKyAgU3RhdHVzIHMg
PSBGaW5kVGFibGUoZmlsZV9udW1iZXIsIGZpbGVfc2l6ZSwgJmhhbmRsZSk7CisgIGlmICghcy5v
aygpKSB7CisgICAgcmV0dXJuIE5ld0Vycm9ySXRlcmF0b3Iocyk7CisgIH0KKworICBUYWJsZSog
dGFibGUgPSByZWludGVycHJldF9jYXN0PFRhYmxlQW5kRmlsZSo+KGNhY2hlXy0+VmFsdWUoaGFu
ZGxlKSktPnRhYmxlOworICBJdGVyYXRvciogcmVzdWx0ID0gdGFibGUtPk5ld0l0ZXJhdG9yKG9w
dGlvbnMpOworICByZXN1bHQtPlJlZ2lzdGVyQ2xlYW51cCgmVW5yZWZFbnRyeSwgY2FjaGVfLCBo
YW5kbGUpOworICBpZiAodGFibGVwdHIgIT0gTlVMTCkgeworICAgICp0YWJsZXB0ciA9IHRhYmxl
OworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKK1N0YXR1cyBUYWJsZUNhY2hlOjpHZXQoY29u
c3QgUmVhZE9wdGlvbnMmIG9wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90
IGZpbGVfbnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBmaWxlX3NpemUs
CisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNsaWNlJiBrLAorICAgICAgICAgICAgICAg
ICAgICAgICB2b2lkKiBhcmcsCisgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpzYXZlciko
dm9pZCosIGNvbnN0IFNsaWNlJiwgY29uc3QgU2xpY2UmKSkgeworICBDYWNoZTo6SGFuZGxlKiBo
YW5kbGUgPSBOVUxMOworICBTdGF0dXMgcyA9IEZpbmRUYWJsZShmaWxlX251bWJlciwgZmlsZV9z
aXplLCAmaGFuZGxlKTsKKyAgaWYgKHMub2soKSkgeworICAgIFRhYmxlKiB0ID0gcmVpbnRlcnBy
ZXRfY2FzdDxUYWJsZUFuZEZpbGUqPihjYWNoZV8tPlZhbHVlKGhhbmRsZSkpLT50YWJsZTsKKyAg
ICBzID0gdC0+SW50ZXJuYWxHZXQob3B0aW9ucywgaywgYXJnLCBzYXZlcik7CisgICAgY2FjaGVf
LT5SZWxlYXNlKGhhbmRsZSk7CisgIH0KKyAgcmV0dXJuIHM7Cit9CisKK3ZvaWQgVGFibGVDYWNo
ZTo6RXZpY3QodWludDY0X3QgZmlsZV9udW1iZXIpIHsKKyAgY2hhciBidWZbc2l6ZW9mKGZpbGVf
bnVtYmVyKV07CisgIEVuY29kZUZpeGVkNjQoYnVmLCBmaWxlX251bWJlcik7CisgIGNhY2hlXy0+
RXJhc2UoU2xpY2UoYnVmLCBzaXplb2YoYnVmKSkpOworfQorCit9ICAvLyBuYW1lc3BhY2UgbGV2
ZWxkYgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi90YWJsZV9jYWNo
ZS5oIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi90YWJsZV9jYWNoZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjhjZjRhYWYxMmQ4ZWQxYTAyYmQ3ZDE5NjJiNzljYzg1MDY1NzViNmYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL3RhYmxlX2NhY2hlLmgKQEAgLTAs
MCArMSw2MSBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3Jz
LgorLy8KKy8vIFRocmVhZC1zYWZlIChwcm92aWRlcyBpbnRlcm5hbCBzeW5jaHJvbml6YXRpb24p
CisKKyNpZm5kZWYgU1RPUkFHRV9MRVZFTERCX0RCX1RBQkxFX0NBQ0hFX0hfCisjZGVmaW5lIFNU
T1JBR0VfTEVWRUxEQl9EQl9UQUJMRV9DQUNIRV9IXworCisjaW5jbHVkZSA8c3RyaW5nPgorI2lu
Y2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgImRiL2RiZm9ybWF0LmgiCisjaW5jbHVkZSAibGV2
ZWxkYi9jYWNoZS5oIgorI2luY2x1ZGUgImxldmVsZGIvdGFibGUuaCIKKyNpbmNsdWRlICJwb3J0
L3BvcnQuaCIKKworbmFtZXNwYWNlIGxldmVsZGIgeworCitjbGFzcyBFbnY7CisKK2NsYXNzIFRh
YmxlQ2FjaGUgeworIHB1YmxpYzoKKyAgVGFibGVDYWNoZShjb25zdCBzdGQ6OnN0cmluZyYgZGJu
YW1lLCBjb25zdCBPcHRpb25zKiBvcHRpb25zLCBpbnQgZW50cmllcyk7CisgIH5UYWJsZUNhY2hl
KCk7CisKKyAgLy8gUmV0dXJuIGFuIGl0ZXJhdG9yIGZvciB0aGUgc3BlY2lmaWVkIGZpbGUgbnVt
YmVyICh0aGUgY29ycmVzcG9uZGluZworICAvLyBmaWxlIGxlbmd0aCBtdXN0IGJlIGV4YWN0bHkg
ImZpbGVfc2l6ZSIgYnl0ZXMpLiAgSWYgInRhYmxlcHRyIiBpcworICAvLyBub24tTlVMTCwgYWxz
byBzZXRzICIqdGFibGVwdHIiIHRvIHBvaW50IHRvIHRoZSBUYWJsZSBvYmplY3QKKyAgLy8gdW5k
ZXJseWluZyB0aGUgcmV0dXJuZWQgaXRlcmF0b3IsIG9yIE5VTEwgaWYgbm8gVGFibGUgb2JqZWN0
IHVuZGVybGllcworICAvLyB0aGUgcmV0dXJuZWQgaXRlcmF0b3IuICBUaGUgcmV0dXJuZWQgIip0
YWJsZXB0ciIgb2JqZWN0IGlzIG93bmVkIGJ5CisgIC8vIHRoZSBjYWNoZSBhbmQgc2hvdWxkIG5v
dCBiZSBkZWxldGVkLCBhbmQgaXMgdmFsaWQgZm9yIGFzIGxvbmcgYXMgdGhlCisgIC8vIHJldHVy
bmVkIGl0ZXJhdG9yIGlzIGxpdmUuCisgIEl0ZXJhdG9yKiBOZXdJdGVyYXRvcihjb25zdCBSZWFk
T3B0aW9ucyYgb3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGZpbGVf
bnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgZmlsZV9zaXplLAorICAg
ICAgICAgICAgICAgICAgICAgICAgVGFibGUqKiB0YWJsZXB0ciA9IE5VTEwpOworCisgIC8vIElm
IGEgc2VlayB0byBpbnRlcm5hbCBrZXkgImsiIGluIHNwZWNpZmllZCBmaWxlIGZpbmRzIGFuIGVu
dHJ5LAorICAvLyBjYWxsICgqaGFuZGxlX3Jlc3VsdCkoYXJnLCBmb3VuZF9rZXksIGZvdW5kX3Zh
bHVlKS4KKyAgU3RhdHVzIEdldChjb25zdCBSZWFkT3B0aW9ucyYgb3B0aW9ucywKKyAgICAgICAg
ICAgICB1aW50NjRfdCBmaWxlX251bWJlciwKKyAgICAgICAgICAgICB1aW50NjRfdCBmaWxlX3Np
emUsCisgICAgICAgICAgICAgY29uc3QgU2xpY2UmIGssCisgICAgICAgICAgICAgdm9pZCogYXJn
LAorICAgICAgICAgICAgIHZvaWQgKCpoYW5kbGVfcmVzdWx0KSh2b2lkKiwgY29uc3QgU2xpY2Um
LCBjb25zdCBTbGljZSYpKTsKKworICAvLyBFdmljdCBhbnkgZW50cnkgZm9yIHRoZSBzcGVjaWZp
ZWQgZmlsZSBudW1iZXIKKyAgdm9pZCBFdmljdCh1aW50NjRfdCBmaWxlX251bWJlcik7CisKKyBw
cml2YXRlOgorICBFbnYqIGNvbnN0IGVudl87CisgIGNvbnN0IHN0ZDo6c3RyaW5nIGRibmFtZV87
CisgIGNvbnN0IE9wdGlvbnMqIG9wdGlvbnNfOworICBDYWNoZSogY2FjaGVfOworCisgIFN0YXR1
cyBGaW5kVGFibGUodWludDY0X3QgZmlsZV9udW1iZXIsIHVpbnQ2NF90IGZpbGVfc2l6ZSwgQ2Fj
aGU6OkhhbmRsZSoqKTsKK307CisKK30gIC8vIG5hbWVzcGFjZSBsZXZlbGRiCisKKyNlbmRpZiAg
Ly8gU1RPUkFHRV9MRVZFTERCX0RCX1RBQkxFX0NBQ0hFX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9sZXZlbGRiL2RiL3ZlcnNpb25fZWRpdC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xldmVsZGIvZGIvdmVyc2lvbl9lZGl0LmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYxMGEyZDU4YjIxMWNiMTZi
ZWNiMGFjMDI5ODIxMGYwZGFjYmQyYTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9sZXZlbGRiL2RiL3ZlcnNpb25fZWRpdC5jYwpAQCAtMCwwICsxLDI2NiBAQAorLy8gQ29w
eXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhl
IEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgorCisjaW5jbHVkZSAiZGIv
dmVyc2lvbl9lZGl0LmgiCisKKyNpbmNsdWRlICJkYi92ZXJzaW9uX3NldC5oIgorI2luY2x1ZGUg
InV0aWwvY29kaW5nLmgiCisKK25hbWVzcGFjZSBsZXZlbGRiIHsKKworLy8gVGFnIG51bWJlcnMg
Zm9yIHNlcmlhbGl6ZWQgVmVyc2lvbkVkaXQuICBUaGVzZSBudW1iZXJzIGFyZSB3cml0dGVuIHRv
CisvLyBkaXNrIGFuZCBzaG91bGQgbm90IGJlIGNoYW5nZWQuCitlbnVtIFRhZyB7CisgIGtDb21w
YXJhdG9yICAgICAgICAgICA9IDEsCisgIGtMb2dOdW1iZXIgICAgICAgICAgICA9IDIsCisgIGtO
ZXh0RmlsZU51bWJlciAgICAgICA9IDMsCisgIGtMYXN0U2VxdWVuY2UgICAgICAgICA9IDQsCisg
IGtDb21wYWN0UG9pbnRlciAgICAgICA9IDUsCisgIGtEZWxldGVkRmlsZSAgICAgICAgICA9IDYs
CisgIGtOZXdGaWxlICAgICAgICAgICAgICA9IDcsCisgIC8vIDggd2FzIHVzZWQgZm9yIGxhcmdl
IHZhbHVlIHJlZnMKKyAga1ByZXZMb2dOdW1iZXIgICAgICAgID0gOQorfTsKKwordm9pZCBWZXJz
aW9uRWRpdDo6Q2xlYXIoKSB7CisgIGNvbXBhcmF0b3JfLmNsZWFyKCk7CisgIGxvZ19udW1iZXJf
ID0gMDsKKyAgcHJldl9sb2dfbnVtYmVyXyA9IDA7CisgIGxhc3Rfc2VxdWVuY2VfID0gMDsKKyAg
bmV4dF9maWxlX251bWJlcl8gPSAwOworICBoYXNfY29tcGFyYXRvcl8gPSBmYWxzZTsKKyAgaGFz
X2xvZ19udW1iZXJfID0gZmFsc2U7CisgIGhhc19wcmV2X2xvZ19udW1iZXJfID0gZmFsc2U7Cisg
IGhhc19uZXh0X2ZpbGVfbnVtYmVyXyA9IGZhbHNlOworICBoYXNfbGFzdF9zZXF1ZW5jZV8gPSBm
YWxzZTsKKyAgZGVsZXRlZF9maWxlc18uY2xlYXIoKTsKKyAgbmV3X2ZpbGVzXy5jbGVhcigpOwor
fQorCit2b2lkIFZlcnNpb25FZGl0OjpFbmNvZGVUbyhzdGQ6OnN0cmluZyogZHN0KSBjb25zdCB7
CisgIGlmIChoYXNfY29tcGFyYXRvcl8pIHsKKyAgICBQdXRWYXJpbnQzMihkc3QsIGtDb21wYXJh
dG9yKTsKKyAgICBQdXRMZW5ndGhQcmVmaXhlZFNsaWNlKGRzdCwgY29tcGFyYXRvcl8pOworICB9
CisgIGlmIChoYXNfbG9nX251bWJlcl8pIHsKKyAgICBQdXRWYXJpbnQzMihkc3QsIGtMb2dOdW1i
ZXIpOworICAgIFB1dFZhcmludDY0KGRzdCwgbG9nX251bWJlcl8pOworICB9CisgIGlmIChoYXNf
cHJldl9sb2dfbnVtYmVyXykgeworICAgIFB1dFZhcmludDMyKGRzdCwga1ByZXZMb2dOdW1iZXIp
OworICAgIFB1dFZhcmludDY0KGRzdCwgcHJldl9sb2dfbnVtYmVyXyk7CisgIH0KKyAgaWYgKGhh
c19uZXh0X2ZpbGVfbnVtYmVyXykgeworICAgIFB1dFZhcmludDMyKGRzdCwga05leHRGaWxlTnVt
YmVyKTsKKyAgICBQdXRWYXJpbnQ2NChkc3QsIG5leHRfZmlsZV9udW1iZXJfKTsKKyAgfQorICBp
ZiAoaGFzX2xhc3Rfc2VxdWVuY2VfKSB7CisgICAgUHV0VmFyaW50MzIoZHN0LCBrTGFzdFNlcXVl
bmNlKTsKKyAgICBQdXRWYXJpbnQ2NChkc3QsIGxhc3Rfc2VxdWVuY2VfKTsKKyAgfQorCisgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgY29tcGFjdF9wb2ludGVyc18uc2l6ZSgpOyBpKyspIHsKKyAg
ICBQdXRWYXJpbnQzMihkc3QsIGtDb21wYWN0UG9pbnRlcik7CisgICAgUHV0VmFyaW50MzIoZHN0
LCBjb21wYWN0X3BvaW50ZXJzX1tpXS5maXJzdCk7ICAvLyBsZXZlbAorICAgIFB1dExlbmd0aFBy
ZWZpeGVkU2xpY2UoZHN0LCBjb21wYWN0X3BvaW50ZXJzX1tpXS5zZWNvbmQuRW5jb2RlKCkpOwor
ICB9CisKKyAgZm9yIChEZWxldGVkRmlsZVNldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGRlbGV0
ZWRfZmlsZXNfLmJlZ2luKCk7CisgICAgICAgaXRlciAhPSBkZWxldGVkX2ZpbGVzXy5lbmQoKTsK
KyAgICAgICArK2l0ZXIpIHsKKyAgICBQdXRWYXJpbnQzMihkc3QsIGtEZWxldGVkRmlsZSk7Cisg
ICAgUHV0VmFyaW50MzIoZHN0LCBpdGVyLT5maXJzdCk7ICAgLy8gbGV2ZWwKKyAgICBQdXRWYXJp
bnQ2NChkc3QsIGl0ZXItPnNlY29uZCk7ICAvLyBmaWxlIG51bWJlcgorICB9CisKKyAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBuZXdfZmlsZXNfLnNpemUoKTsgaSsrKSB7CisgICAgY29uc3QgRmls
ZU1ldGFEYXRhJiBmID0gbmV3X2ZpbGVzX1tpXS5zZWNvbmQ7CisgICAgUHV0VmFyaW50MzIoZHN0
LCBrTmV3RmlsZSk7CisgICAgUHV0VmFyaW50MzIoZHN0LCBuZXdfZmlsZXNfW2ldLmZpcnN0KTsg
IC8vIGxldmVsCisgICAgUHV0VmFyaW50NjQoZHN0LCBmLm51bWJlcik7CisgICAgUHV0VmFyaW50
NjQoZHN0LCBmLmZpbGVfc2l6ZSk7CisgICAgUHV0TGVuZ3RoUHJlZml4ZWRTbGljZShkc3QsIGYu
c21hbGxlc3QuRW5jb2RlKCkpOworICAgIFB1dExlbmd0aFByZWZpeGVkU2xpY2UoZHN0LCBmLmxh
cmdlc3QuRW5jb2RlKCkpOworICB9Cit9CisKK3N0YXRpYyBib29sIEdldEludGVybmFsS2V5KFNs
aWNlKiBpbnB1dCwgSW50ZXJuYWxLZXkqIGRzdCkgeworICBTbGljZSBzdHI7CisgIGlmIChHZXRM
ZW5ndGhQcmVmaXhlZFNsaWNlKGlucHV0LCAmc3RyKSkgeworICAgIGRzdC0+RGVjb2RlRnJvbShz
dHIpOworICAgIHJldHVybiB0cnVlOworICB9IGVsc2UgeworICAgIHJldHVybiBmYWxzZTsKKyAg
fQorfQorCitzdGF0aWMgYm9vbCBHZXRMZXZlbChTbGljZSogaW5wdXQsIGludCogbGV2ZWwpIHsK
KyAgdWludDMyX3QgdjsKKyAgaWYgKEdldFZhcmludDMyKGlucHV0LCAmdikgJiYKKyAgICAgIHYg
PCBjb25maWc6OmtOdW1MZXZlbHMpIHsKKyAgICAqbGV2ZWwgPSB2OworICAgIHJldHVybiB0cnVl
OworICB9IGVsc2UgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorfQorCitTdGF0dXMgVmVyc2lv
bkVkaXQ6OkRlY29kZUZyb20oY29uc3QgU2xpY2UmIHNyYykgeworICBDbGVhcigpOworICBTbGlj
ZSBpbnB1dCA9IHNyYzsKKyAgY29uc3QgY2hhciogbXNnID0gTlVMTDsKKyAgdWludDMyX3QgdGFn
OworCisgIC8vIFRlbXBvcmFyeSBzdG9yYWdlIGZvciBwYXJzaW5nCisgIGludCBsZXZlbDsKKyAg
dWludDY0X3QgbnVtYmVyOworICBGaWxlTWV0YURhdGEgZjsKKyAgU2xpY2Ugc3RyOworICBJbnRl
cm5hbEtleSBrZXk7CisKKyAgd2hpbGUgKG1zZyA9PSBOVUxMICYmIEdldFZhcmludDMyKCZpbnB1
dCwgJnRhZykpIHsKKyAgICBzd2l0Y2ggKHRhZykgeworICAgICAgY2FzZSBrQ29tcGFyYXRvcjoK
KyAgICAgICAgaWYgKEdldExlbmd0aFByZWZpeGVkU2xpY2UoJmlucHV0LCAmc3RyKSkgeworICAg
ICAgICAgIGNvbXBhcmF0b3JfID0gc3RyLlRvU3RyaW5nKCk7CisgICAgICAgICAgaGFzX2NvbXBh
cmF0b3JfID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBtc2cgPSAiY29tcGFy
YXRvciBuYW1lIjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBrTG9n
TnVtYmVyOgorICAgICAgICBpZiAoR2V0VmFyaW50NjQoJmlucHV0LCAmbG9nX251bWJlcl8pKSB7
CisgICAgICAgICAgaGFzX2xvZ19udW1iZXJfID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICBtc2cgPSAibG9nIG51bWJlciI7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisK
KyAgICAgIGNhc2Uga1ByZXZMb2dOdW1iZXI6CisgICAgICAgIGlmIChHZXRWYXJpbnQ2NCgmaW5w
dXQsICZwcmV2X2xvZ19udW1iZXJfKSkgeworICAgICAgICAgIGhhc19wcmV2X2xvZ19udW1iZXJf
ID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBtc2cgPSAicHJldmlvdXMgbG9n
IG51bWJlciI7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2Uga05leHRG
aWxlTnVtYmVyOgorICAgICAgICBpZiAoR2V0VmFyaW50NjQoJmlucHV0LCAmbmV4dF9maWxlX251
bWJlcl8pKSB7CisgICAgICAgICAgaGFzX25leHRfZmlsZV9udW1iZXJfID0gdHJ1ZTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICBtc2cgPSAibmV4dCBmaWxlIG51bWJlciI7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2Uga0xhc3RTZXF1ZW5jZToKKyAgICAgICAg
aWYgKEdldFZhcmludDY0KCZpbnB1dCwgJmxhc3Rfc2VxdWVuY2VfKSkgeworICAgICAgICAgIGhh
c19sYXN0X3NlcXVlbmNlXyA9IHRydWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgbXNn
ID0gImxhc3Qgc2VxdWVuY2UgbnVtYmVyIjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKwor
ICAgICAgY2FzZSBrQ29tcGFjdFBvaW50ZXI6CisgICAgICAgIGlmIChHZXRMZXZlbCgmaW5wdXQs
ICZsZXZlbCkgJiYKKyAgICAgICAgICAgIEdldEludGVybmFsS2V5KCZpbnB1dCwgJmtleSkpIHsK
KyAgICAgICAgICBjb21wYWN0X3BvaW50ZXJzXy5wdXNoX2JhY2soc3RkOjptYWtlX3BhaXIobGV2
ZWwsIGtleSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIG1zZyA9ICJjb21wYWN0aW9u
IHBvaW50ZXIiOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIGtEZWxl
dGVkRmlsZToKKyAgICAgICAgaWYgKEdldExldmVsKCZpbnB1dCwgJmxldmVsKSAmJgorICAgICAg
ICAgICAgR2V0VmFyaW50NjQoJmlucHV0LCAmbnVtYmVyKSkgeworICAgICAgICAgIGRlbGV0ZWRf
ZmlsZXNfLmluc2VydChzdGQ6Om1ha2VfcGFpcihsZXZlbCwgbnVtYmVyKSk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgbXNnID0gImRlbGV0ZWQgZmlsZSI7CisgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CisKKyAgICAgIGNhc2Uga05ld0ZpbGU6CisgICAgICAgIGlmIChHZXRMZXZlbCgm
aW5wdXQsICZsZXZlbCkgJiYKKyAgICAgICAgICAgIEdldFZhcmludDY0KCZpbnB1dCwgJmYubnVt
YmVyKSAmJgorICAgICAgICAgICAgR2V0VmFyaW50NjQoJmlucHV0LCAmZi5maWxlX3NpemUpICYm
CisgICAgICAgICAgICBHZXRJbnRlcm5hbEtleSgmaW5wdXQsICZmLnNtYWxsZXN0KSAmJgorICAg
ICAgICAgICAgR2V0SW50ZXJuYWxLZXkoJmlucHV0LCAmZi5sYXJnZXN0KSkgeworICAgICAgICAg
IG5ld19maWxlc18ucHVzaF9iYWNrKHN0ZDo6bWFrZV9wYWlyKGxldmVsLCBmKSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgbXNnID0gIm5ldy1maWxlIGVudHJ5IjsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgbXNnID0gInVua25vd24g
dGFnIjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgaWYgKG1zZyA9PSBOVUxMICYm
ICFpbnB1dC5lbXB0eSgpKSB7CisgICAgbXNnID0gImludmFsaWQgdGFnIjsKKyAgfQorCisgIFN0
YXR1cyByZXN1bHQ7CisgIGlmIChtc2cgIT0gTlVMTCkgeworICAgIHJlc3VsdCA9IFN0YXR1czo6
Q29ycnVwdGlvbigiVmVyc2lvbkVkaXQiLCBtc2cpOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9
CisKK3N0ZDo6c3RyaW5nIFZlcnNpb25FZGl0OjpEZWJ1Z1N0cmluZygpIGNvbnN0IHsKKyAgc3Rk
OjpzdHJpbmcgcjsKKyAgci5hcHBlbmQoIlZlcnNpb25FZGl0IHsiKTsKKyAgaWYgKGhhc19jb21w
YXJhdG9yXykgeworICAgIHIuYXBwZW5kKCJcbiAgQ29tcGFyYXRvcjogIik7CisgICAgci5hcHBl
bmQoY29tcGFyYXRvcl8pOworICB9CisgIGlmIChoYXNfbG9nX251bWJlcl8pIHsKKyAgICByLmFw
cGVuZCgiXG4gIExvZ051bWJlcjogIik7CisgICAgQXBwZW5kTnVtYmVyVG8oJnIsIGxvZ19udW1i
ZXJfKTsKKyAgfQorICBpZiAoaGFzX3ByZXZfbG9nX251bWJlcl8pIHsKKyAgICByLmFwcGVuZCgi
XG4gIFByZXZMb2dOdW1iZXI6ICIpOworICAgIEFwcGVuZE51bWJlclRvKCZyLCBwcmV2X2xvZ19u
dW1iZXJfKTsKKyAgfQorICBpZiAoaGFzX25leHRfZmlsZV9udW1iZXJfKSB7CisgICAgci5hcHBl
bmQoIlxuICBOZXh0RmlsZTogIik7CisgICAgQXBwZW5kTnVtYmVyVG8oJnIsIG5leHRfZmlsZV9u
dW1iZXJfKTsKKyAgfQorICBpZiAoaGFzX2xhc3Rfc2VxdWVuY2VfKSB7CisgICAgci5hcHBlbmQo
IlxuICBMYXN0U2VxOiAiKTsKKyAgICBBcHBlbmROdW1iZXJUbygmciwgbGFzdF9zZXF1ZW5jZV8p
OworICB9CisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29tcGFjdF9wb2ludGVyc18uc2l6ZSgp
OyBpKyspIHsKKyAgICByLmFwcGVuZCgiXG4gIENvbXBhY3RQb2ludGVyOiAiKTsKKyAgICBBcHBl
bmROdW1iZXJUbygmciwgY29tcGFjdF9wb2ludGVyc19baV0uZmlyc3QpOworICAgIHIuYXBwZW5k
KCIgIik7CisgICAgci5hcHBlbmQoY29tcGFjdF9wb2ludGVyc19baV0uc2Vjb25kLkRlYnVnU3Ry
aW5nKCkpOworICB9CisgIGZvciAoRGVsZXRlZEZpbGVTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIg
PSBkZWxldGVkX2ZpbGVzXy5iZWdpbigpOworICAgICAgIGl0ZXIgIT0gZGVsZXRlZF9maWxlc18u
ZW5kKCk7CisgICAgICAgKytpdGVyKSB7CisgICAgci5hcHBlbmQoIlxuICBEZWxldGVGaWxlOiAi
KTsKKyAgICBBcHBlbmROdW1iZXJUbygmciwgaXRlci0+Zmlyc3QpOworICAgIHIuYXBwZW5kKCIg
Iik7CisgICAgQXBwZW5kTnVtYmVyVG8oJnIsIGl0ZXItPnNlY29uZCk7CisgIH0KKyAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBuZXdfZmlsZXNfLnNpemUoKTsgaSsrKSB7CisgICAgY29uc3QgRmls
ZU1ldGFEYXRhJiBmID0gbmV3X2ZpbGVzX1tpXS5zZWNvbmQ7CisgICAgci5hcHBlbmQoIlxuICBB
ZGRGaWxlOiAiKTsKKyAgICBBcHBlbmROdW1iZXJUbygmciwgbmV3X2ZpbGVzX1tpXS5maXJzdCk7
CisgICAgci5hcHBlbmQoIiAiKTsKKyAgICBBcHBlbmROdW1iZXJUbygmciwgZi5udW1iZXIpOwor
ICAgIHIuYXBwZW5kKCIgIik7CisgICAgQXBwZW5kTnVtYmVyVG8oJnIsIGYuZmlsZV9zaXplKTsK
KyAgICByLmFwcGVuZCgiICIpOworICAgIHIuYXBwZW5kKGYuc21hbGxlc3QuRGVidWdTdHJpbmco
KSk7CisgICAgci5hcHBlbmQoIiAuLiAiKTsKKyAgICByLmFwcGVuZChmLmxhcmdlc3QuRGVidWdT
dHJpbmcoKSk7CisgIH0KKyAgci5hcHBlbmQoIlxufVxuIik7CisgIHJldHVybiByOworfQorCit9
ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2
ZWxkYi9kYi92ZXJzaW9uX2VkaXQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvdmVy
c2lvbl9lZGl0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWFlZjc3YjMyN2M2NGEzNzU2YTVmMjUxMmJjMTc4NjUz
MDkwN2NiZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIv
dmVyc2lvbl9lZGl0LmgKQEAgLTAsMCArMSwxMDcgQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBU
aGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9y
IG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2lmbmRlZiBTVE9SQUdFX0xFVkVMREJfREJfVkVS
U0lPTl9FRElUX0hfCisjZGVmaW5lIFNUT1JBR0VfTEVWRUxEQl9EQl9WRVJTSU9OX0VESVRfSF8K
KworI2luY2x1ZGUgPHNldD4KKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPHZlY3Rvcj4K
KyNpbmNsdWRlICJkYi9kYmZvcm1hdC5oIgorCituYW1lc3BhY2UgbGV2ZWxkYiB7CisKK2NsYXNz
IFZlcnNpb25TZXQ7CisKK3N0cnVjdCBGaWxlTWV0YURhdGEgeworICBpbnQgcmVmczsKKyAgaW50
IGFsbG93ZWRfc2Vla3M7ICAgICAgICAgIC8vIFNlZWtzIGFsbG93ZWQgdW50aWwgY29tcGFjdGlv
bgorICB1aW50NjRfdCBudW1iZXI7CisgIHVpbnQ2NF90IGZpbGVfc2l6ZTsgICAgICAgICAvLyBG
aWxlIHNpemUgaW4gYnl0ZXMKKyAgSW50ZXJuYWxLZXkgc21hbGxlc3Q7ICAgICAgIC8vIFNtYWxs
ZXN0IGludGVybmFsIGtleSBzZXJ2ZWQgYnkgdGFibGUKKyAgSW50ZXJuYWxLZXkgbGFyZ2VzdDsg
ICAgICAgIC8vIExhcmdlc3QgaW50ZXJuYWwga2V5IHNlcnZlZCBieSB0YWJsZQorCisgIEZpbGVN
ZXRhRGF0YSgpIDogcmVmcygwKSwgYWxsb3dlZF9zZWVrcygxIDw8IDMwKSwgZmlsZV9zaXplKDAp
IHsgfQorfTsKKworY2xhc3MgVmVyc2lvbkVkaXQgeworIHB1YmxpYzoKKyAgVmVyc2lvbkVkaXQo
KSB7IENsZWFyKCk7IH0KKyAgflZlcnNpb25FZGl0KCkgeyB9CisKKyAgdm9pZCBDbGVhcigpOwor
CisgIHZvaWQgU2V0Q29tcGFyYXRvck5hbWUoY29uc3QgU2xpY2UmIG5hbWUpIHsKKyAgICBoYXNf
Y29tcGFyYXRvcl8gPSB0cnVlOworICAgIGNvbXBhcmF0b3JfID0gbmFtZS5Ub1N0cmluZygpOwor
ICB9CisgIHZvaWQgU2V0TG9nTnVtYmVyKHVpbnQ2NF90IG51bSkgeworICAgIGhhc19sb2dfbnVt
YmVyXyA9IHRydWU7CisgICAgbG9nX251bWJlcl8gPSBudW07CisgIH0KKyAgdm9pZCBTZXRQcmV2
TG9nTnVtYmVyKHVpbnQ2NF90IG51bSkgeworICAgIGhhc19wcmV2X2xvZ19udW1iZXJfID0gdHJ1
ZTsKKyAgICBwcmV2X2xvZ19udW1iZXJfID0gbnVtOworICB9CisgIHZvaWQgU2V0TmV4dEZpbGUo
dWludDY0X3QgbnVtKSB7CisgICAgaGFzX25leHRfZmlsZV9udW1iZXJfID0gdHJ1ZTsKKyAgICBu
ZXh0X2ZpbGVfbnVtYmVyXyA9IG51bTsKKyAgfQorICB2b2lkIFNldExhc3RTZXF1ZW5jZShTZXF1
ZW5jZU51bWJlciBzZXEpIHsKKyAgICBoYXNfbGFzdF9zZXF1ZW5jZV8gPSB0cnVlOworICAgIGxh
c3Rfc2VxdWVuY2VfID0gc2VxOworICB9CisgIHZvaWQgU2V0Q29tcGFjdFBvaW50ZXIoaW50IGxl
dmVsLCBjb25zdCBJbnRlcm5hbEtleSYga2V5KSB7CisgICAgY29tcGFjdF9wb2ludGVyc18ucHVz
aF9iYWNrKHN0ZDo6bWFrZV9wYWlyKGxldmVsLCBrZXkpKTsKKyAgfQorCisgIC8vIEFkZCB0aGUg
c3BlY2lmaWVkIGZpbGUgYXQgdGhlIHNwZWNpZmllZCBudW1iZXIuCisgIC8vIFJFUVVJUkVTOiBU
aGlzIHZlcnNpb24gaGFzIG5vdCBiZWVuIHNhdmVkIChzZWUgVmVyc2lvblNldDo6U2F2ZVRvKQor
ICAvLyBSRVFVSVJFUzogInNtYWxsZXN0IiBhbmQgImxhcmdlc3QiIGFyZSBzbWFsbGVzdCBhbmQg
bGFyZ2VzdCBrZXlzIGluIGZpbGUKKyAgdm9pZCBBZGRGaWxlKGludCBsZXZlbCwgdWludDY0X3Qg
ZmlsZSwKKyAgICAgICAgICAgICAgIHVpbnQ2NF90IGZpbGVfc2l6ZSwKKyAgICAgICAgICAgICAg
IGNvbnN0IEludGVybmFsS2V5JiBzbWFsbGVzdCwKKyAgICAgICAgICAgICAgIGNvbnN0IEludGVy
bmFsS2V5JiBsYXJnZXN0KSB7CisgICAgRmlsZU1ldGFEYXRhIGY7CisgICAgZi5udW1iZXIgPSBm
aWxlOworICAgIGYuZmlsZV9zaXplID0gZmlsZV9zaXplOworICAgIGYuc21hbGxlc3QgPSBzbWFs
bGVzdDsKKyAgICBmLmxhcmdlc3QgPSBsYXJnZXN0OworICAgIG5ld19maWxlc18ucHVzaF9iYWNr
KHN0ZDo6bWFrZV9wYWlyKGxldmVsLCBmKSk7CisgIH0KKworICAvLyBEZWxldGUgdGhlIHNwZWNp
ZmllZCAiZmlsZSIgZnJvbSB0aGUgc3BlY2lmaWVkICJsZXZlbCIuCisgIHZvaWQgRGVsZXRlRmls
ZShpbnQgbGV2ZWwsIHVpbnQ2NF90IGZpbGUpIHsKKyAgICBkZWxldGVkX2ZpbGVzXy5pbnNlcnQo
c3RkOjptYWtlX3BhaXIobGV2ZWwsIGZpbGUpKTsKKyAgfQorCisgIHZvaWQgRW5jb2RlVG8oc3Rk
OjpzdHJpbmcqIGRzdCkgY29uc3Q7CisgIFN0YXR1cyBEZWNvZGVGcm9tKGNvbnN0IFNsaWNlJiBz
cmMpOworCisgIHN0ZDo6c3RyaW5nIERlYnVnU3RyaW5nKCkgY29uc3Q7CisKKyBwcml2YXRlOgor
ICBmcmllbmQgY2xhc3MgVmVyc2lvblNldDsKKworICB0eXBlZGVmIHN0ZDo6c2V0PCBzdGQ6OnBh
aXI8aW50LCB1aW50NjRfdD4gPiBEZWxldGVkRmlsZVNldDsKKworICBzdGQ6OnN0cmluZyBjb21w
YXJhdG9yXzsKKyAgdWludDY0X3QgbG9nX251bWJlcl87CisgIHVpbnQ2NF90IHByZXZfbG9nX251
bWJlcl87CisgIHVpbnQ2NF90IG5leHRfZmlsZV9udW1iZXJfOworICBTZXF1ZW5jZU51bWJlciBs
YXN0X3NlcXVlbmNlXzsKKyAgYm9vbCBoYXNfY29tcGFyYXRvcl87CisgIGJvb2wgaGFzX2xvZ19u
dW1iZXJfOworICBib29sIGhhc19wcmV2X2xvZ19udW1iZXJfOworICBib29sIGhhc19uZXh0X2Zp
bGVfbnVtYmVyXzsKKyAgYm9vbCBoYXNfbGFzdF9zZXF1ZW5jZV87CisKKyAgc3RkOjp2ZWN0b3I8
IHN0ZDo6cGFpcjxpbnQsIEludGVybmFsS2V5PiA+IGNvbXBhY3RfcG9pbnRlcnNfOworICBEZWxl
dGVkRmlsZVNldCBkZWxldGVkX2ZpbGVzXzsKKyAgc3RkOjp2ZWN0b3I8IHN0ZDo6cGFpcjxpbnQs
IEZpbGVNZXRhRGF0YT4gPiBuZXdfZmlsZXNfOworfTsKKworfSAgLy8gbmFtZXNwYWNlIGxldmVs
ZGIKKworI2VuZGlmICAvLyBTVE9SQUdFX0xFVkVMREJfREJfVkVSU0lPTl9FRElUX0hfCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL3ZlcnNpb25fZWRpdF90ZXN0LmNj
IGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi92ZXJzaW9uX2VkaXRfdGVzdC5jYwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4yODAzMTBiNDlkODQ2ZTI0NWRmMGQwMDBjYTE0MDc3MjQ1ODJkYWEyCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi92ZXJzaW9uX2VkaXRfdGVz
dC5jYwpAQCAtMCwwICsxLDQ2IEBACisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBj
b250cmlidXRvcnMuCisKKyNpbmNsdWRlICJkYi92ZXJzaW9uX2VkaXQuaCIKKyNpbmNsdWRlICJ1
dGlsL3Rlc3RoYXJuZXNzLmgiCisKK25hbWVzcGFjZSBsZXZlbGRiIHsKKworc3RhdGljIHZvaWQg
VGVzdEVuY29kZURlY29kZShjb25zdCBWZXJzaW9uRWRpdCYgZWRpdCkgeworICBzdGQ6OnN0cmlu
ZyBlbmNvZGVkLCBlbmNvZGVkMjsKKyAgZWRpdC5FbmNvZGVUbygmZW5jb2RlZCk7CisgIFZlcnNp
b25FZGl0IHBhcnNlZDsKKyAgU3RhdHVzIHMgPSBwYXJzZWQuRGVjb2RlRnJvbShlbmNvZGVkKTsK
KyAgQVNTRVJUX1RSVUUocy5vaygpKSA8PCBzLlRvU3RyaW5nKCk7CisgIHBhcnNlZC5FbmNvZGVU
bygmZW5jb2RlZDIpOworICBBU1NFUlRfRVEoZW5jb2RlZCwgZW5jb2RlZDIpOworfQorCitjbGFz
cyBWZXJzaW9uRWRpdFRlc3QgeyB9OworCitURVNUKFZlcnNpb25FZGl0VGVzdCwgRW5jb2RlRGVj
b2RlKSB7CisgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBrQmlnID0gMXVsbCA8PCA1MDsKKworICBW
ZXJzaW9uRWRpdCBlZGl0OworICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgeworICAgIFRl
c3RFbmNvZGVEZWNvZGUoZWRpdCk7CisgICAgZWRpdC5BZGRGaWxlKDMsIGtCaWcgKyAzMDAgKyBp
LCBrQmlnICsgNDAwICsgaSwKKyAgICAgICAgICAgICAgICAgSW50ZXJuYWxLZXkoImZvbyIsIGtC
aWcgKyA1MDAgKyBpLCBrVHlwZVZhbHVlKSwKKyAgICAgICAgICAgICAgICAgSW50ZXJuYWxLZXko
InpvbyIsIGtCaWcgKyA2MDAgKyBpLCBrVHlwZURlbGV0aW9uKSk7CisgICAgZWRpdC5EZWxldGVG
aWxlKDQsIGtCaWcgKyA3MDAgKyBpKTsKKyAgICBlZGl0LlNldENvbXBhY3RQb2ludGVyKGksIElu
dGVybmFsS2V5KCJ4Iiwga0JpZyArIDkwMCArIGksIGtUeXBlVmFsdWUpKTsKKyAgfQorCisgIGVk
aXQuU2V0Q29tcGFyYXRvck5hbWUoImZvbyIpOworICBlZGl0LlNldExvZ051bWJlcihrQmlnICsg
MTAwKTsKKyAgZWRpdC5TZXROZXh0RmlsZShrQmlnICsgMjAwKTsKKyAgZWRpdC5TZXRMYXN0U2Vx
dWVuY2Uoa0JpZyArIDEwMDApOworICBUZXN0RW5jb2RlRGVjb2RlKGVkaXQpOworfQorCit9ICAv
LyBuYW1lc3BhY2UgbGV2ZWxkYgorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpIHsK
KyAgcmV0dXJuIGxldmVsZGI6OnRlc3Q6OlJ1bkFsbFRlc3RzKCk7Cit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL3ZlcnNpb25fc2V0LmNjIGIvU291cmNlL1RoaXJk
UGFydHkvbGV2ZWxkYi9kYi92ZXJzaW9uX3NldC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZDBhNWRlMmI5ZjNl
MDU1OTQxN2E3MzIwNGU2NjY4YmJlZDE3OTNiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvbGV2ZWxkYi9kYi92ZXJzaW9uX3NldC5jYwpAQCAtMCwwICsxLDE0MzggQEAKKy8v
IENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2Vl
IHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2luY2x1ZGUg
ImRiL3ZlcnNpb25fc2V0LmgiCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8c3Rk
aW8uaD4KKyNpbmNsdWRlICJkYi9maWxlbmFtZS5oIgorI2luY2x1ZGUgImRiL2xvZ19yZWFkZXIu
aCIKKyNpbmNsdWRlICJkYi9sb2dfd3JpdGVyLmgiCisjaW5jbHVkZSAiZGIvbWVtdGFibGUuaCIK
KyNpbmNsdWRlICJkYi90YWJsZV9jYWNoZS5oIgorI2luY2x1ZGUgImxldmVsZGIvZW52LmgiCisj
aW5jbHVkZSAibGV2ZWxkYi90YWJsZV9idWlsZGVyLmgiCisjaW5jbHVkZSAidGFibGUvbWVyZ2Vy
LmgiCisjaW5jbHVkZSAidGFibGUvdHdvX2xldmVsX2l0ZXJhdG9yLmgiCisjaW5jbHVkZSAidXRp
bC9jb2RpbmcuaCIKKyNpbmNsdWRlICJ1dGlsL2xvZ2dpbmcuaCIKKworbmFtZXNwYWNlIGxldmVs
ZGIgeworCitzdGF0aWMgY29uc3QgaW50IGtUYXJnZXRGaWxlU2l6ZSA9IDIgKiAxMDQ4NTc2Owor
CisvLyBNYXhpbXVtIGJ5dGVzIG9mIG92ZXJsYXBzIGluIGdyYW5kcGFyZW50IChpLmUuLCBsZXZl
bCsyKSBiZWZvcmUgd2UKKy8vIHN0b3AgYnVpbGRpbmcgYSBzaW5nbGUgZmlsZSBpbiBhIGxldmVs
LT5sZXZlbCsxIGNvbXBhY3Rpb24uCitzdGF0aWMgY29uc3QgaW50NjRfdCBrTWF4R3JhbmRQYXJl
bnRPdmVybGFwQnl0ZXMgPSAxMCAqIGtUYXJnZXRGaWxlU2l6ZTsKKworLy8gTWF4aW11bSBudW1i
ZXIgb2YgYnl0ZXMgaW4gYWxsIGNvbXBhY3RlZCBmaWxlcy4gIFdlIGF2b2lkIGV4cGFuZGluZwor
Ly8gdGhlIGxvd2VyIGxldmVsIGZpbGUgc2V0IG9mIGEgY29tcGFjdGlvbiBpZiBpdCB3b3VsZCBt
YWtlIHRoZQorLy8gdG90YWwgY29tcGFjdGlvbiBjb3ZlciBtb3JlIHRoYW4gdGhpcyBtYW55IGJ5
dGVzLgorc3RhdGljIGNvbnN0IGludDY0X3Qga0V4cGFuZGVkQ29tcGFjdGlvbkJ5dGVTaXplTGlt
aXQgPSAyNSAqIGtUYXJnZXRGaWxlU2l6ZTsKKworc3RhdGljIGRvdWJsZSBNYXhCeXRlc0Zvckxl
dmVsKGludCBsZXZlbCkgeworICAvLyBOb3RlOiB0aGUgcmVzdWx0IGZvciBsZXZlbCB6ZXJvIGlz
IG5vdCByZWFsbHkgdXNlZCBzaW5jZSB3ZSBzZXQKKyAgLy8gdGhlIGxldmVsLTAgY29tcGFjdGlv
biB0aHJlc2hvbGQgYmFzZWQgb24gbnVtYmVyIG9mIGZpbGVzLgorICBkb3VibGUgcmVzdWx0ID0g
MTAgKiAxMDQ4NTc2LjA7ICAvLyBSZXN1bHQgZm9yIGJvdGggbGV2ZWwtMCBhbmQgbGV2ZWwtMQor
ICB3aGlsZSAobGV2ZWwgPiAxKSB7CisgICAgcmVzdWx0ICo9IDEwOworICAgIGxldmVsLS07Cisg
IH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHVpbnQ2NF90IE1heEZpbGVTaXplRm9y
TGV2ZWwoaW50IGxldmVsKSB7CisgIHJldHVybiBrVGFyZ2V0RmlsZVNpemU7ICAvLyBXZSBjb3Vs
ZCB2YXJ5IHBlciBsZXZlbCB0byByZWR1Y2UgbnVtYmVyIG9mIGZpbGVzPworfQorCitzdGF0aWMg
aW50NjRfdCBUb3RhbEZpbGVTaXplKGNvbnN0IHN0ZDo6dmVjdG9yPEZpbGVNZXRhRGF0YSo+JiBm
aWxlcykgeworICBpbnQ2NF90IHN1bSA9IDA7CisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmls
ZXMuc2l6ZSgpOyBpKyspIHsKKyAgICBzdW0gKz0gZmlsZXNbaV0tPmZpbGVfc2l6ZTsKKyAgfQor
ICByZXR1cm4gc3VtOworfQorCituYW1lc3BhY2Ugeworc3RkOjpzdHJpbmcgSW50U2V0VG9TdHJp
bmcoY29uc3Qgc3RkOjpzZXQ8dWludDY0X3Q+JiBzKSB7CisgIHN0ZDo6c3RyaW5nIHJlc3VsdCA9
ICJ7IjsKKyAgZm9yIChzdGQ6OnNldDx1aW50NjRfdD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcy5i
ZWdpbigpOworICAgICAgIGl0ICE9IHMuZW5kKCk7CisgICAgICAgKytpdCkgeworICAgIHJlc3Vs
dCArPSAocmVzdWx0LnNpemUoKSA+IDEpID8gIiwiIDogIiI7CisgICAgcmVzdWx0ICs9IE51bWJl
clRvU3RyaW5nKCppdCk7CisgIH0KKyAgcmVzdWx0ICs9ICJ9IjsKKyAgcmV0dXJuIHJlc3VsdDsK
K30KK30gIC8vIG5hbWVzcGFjZQorCitWZXJzaW9uOjp+VmVyc2lvbigpIHsKKyAgYXNzZXJ0KHJl
ZnNfID09IDApOworCisgIC8vIFJlbW92ZSBmcm9tIGxpbmtlZCBsaXN0CisgIHByZXZfLT5uZXh0
XyA9IG5leHRfOworICBuZXh0Xy0+cHJldl8gPSBwcmV2XzsKKworICAvLyBEcm9wIHJlZmVyZW5j
ZXMgdG8gZmlsZXMKKyAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGNvbmZpZzo6a051bUxl
dmVsczsgbGV2ZWwrKykgeworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsZXNfW2xldmVs
XS5zaXplKCk7IGkrKykgeworICAgICAgRmlsZU1ldGFEYXRhKiBmID0gZmlsZXNfW2xldmVsXVtp
XTsKKyAgICAgIGFzc2VydChmLT5yZWZzID4gMCk7CisgICAgICBmLT5yZWZzLS07CisgICAgICBp
ZiAoZi0+cmVmcyA8PSAwKSB7CisgICAgICAgIGRlbGV0ZSBmOworICAgICAgfQorICAgIH0KKyAg
fQorfQorCitpbnQgRmluZEZpbGUoY29uc3QgSW50ZXJuYWxLZXlDb21wYXJhdG9yJiBpY21wLAor
ICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEZpbGVNZXRhRGF0YSo+JiBmaWxlcywKKyAg
ICAgICAgICAgICBjb25zdCBTbGljZSYga2V5KSB7CisgIHVpbnQzMl90IGxlZnQgPSAwOworICB1
aW50MzJfdCByaWdodCA9IGZpbGVzLnNpemUoKTsKKyAgd2hpbGUgKGxlZnQgPCByaWdodCkgewor
ICAgIHVpbnQzMl90IG1pZCA9IChsZWZ0ICsgcmlnaHQpIC8gMjsKKyAgICBjb25zdCBGaWxlTWV0
YURhdGEqIGYgPSBmaWxlc1ttaWRdOworICAgIGlmIChpY21wLkludGVybmFsS2V5Q29tcGFyYXRv
cjo6Q29tcGFyZShmLT5sYXJnZXN0LkVuY29kZSgpLCBrZXkpIDwgMCkgeworICAgICAgLy8gS2V5
IGF0ICJtaWQubGFyZ2VzdCIgaXMgPCAidGFyZ2V0Ii4gIFRoZXJlZm9yZSBhbGwKKyAgICAgIC8v
IGZpbGVzIGF0IG9yIGJlZm9yZSAibWlkIiBhcmUgdW5pbnRlcmVzdGluZy4KKyAgICAgIGxlZnQg
PSBtaWQgKyAxOworICAgIH0gZWxzZSB7CisgICAgICAvLyBLZXkgYXQgIm1pZC5sYXJnZXN0IiBp
cyA+PSAidGFyZ2V0Ii4gIFRoZXJlZm9yZSBhbGwgZmlsZXMKKyAgICAgIC8vIGFmdGVyICJtaWQi
IGFyZSB1bmludGVyZXN0aW5nLgorICAgICAgcmlnaHQgPSBtaWQ7CisgICAgfQorICB9CisgIHJl
dHVybiByaWdodDsKK30KKworc3RhdGljIGJvb2wgQWZ0ZXJGaWxlKGNvbnN0IENvbXBhcmF0b3Iq
IHVjbXAsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2xpY2UqIHVzZXJfa2V5LCBjb25z
dCBGaWxlTWV0YURhdGEqIGYpIHsKKyAgLy8gTlVMTCB1c2VyX2tleSBvY2N1cnMgYmVmb3JlIGFs
bCBrZXlzIGFuZCBpcyB0aGVyZWZvcmUgbmV2ZXIgYWZ0ZXIgKmYKKyAgcmV0dXJuICh1c2VyX2tl
eSAhPSBOVUxMICYmCisgICAgICAgICAgdWNtcC0+Q29tcGFyZSgqdXNlcl9rZXksIGYtPmxhcmdl
c3QudXNlcl9rZXkoKSkgPiAwKTsKK30KKworc3RhdGljIGJvb2wgQmVmb3JlRmlsZShjb25zdCBD
b21wYXJhdG9yKiB1Y21wLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTbGljZSogdXNl
cl9rZXksIGNvbnN0IEZpbGVNZXRhRGF0YSogZikgeworICAvLyBOVUxMIHVzZXJfa2V5IG9jY3Vy
cyBhZnRlciBhbGwga2V5cyBhbmQgaXMgdGhlcmVmb3JlIG5ldmVyIGJlZm9yZSAqZgorICByZXR1
cm4gKHVzZXJfa2V5ICE9IE5VTEwgJiYKKyAgICAgICAgICB1Y21wLT5Db21wYXJlKCp1c2VyX2tl
eSwgZi0+c21hbGxlc3QudXNlcl9rZXkoKSkgPCAwKTsKK30KKworYm9vbCBTb21lRmlsZU92ZXJs
YXBzUmFuZ2UoCisgICAgY29uc3QgSW50ZXJuYWxLZXlDb21wYXJhdG9yJiBpY21wLAorICAgIGJv
b2wgZGlzam9pbnRfc29ydGVkX2ZpbGVzLAorICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEZpbGVNZXRh
RGF0YSo+JiBmaWxlcywKKyAgICBjb25zdCBTbGljZSogc21hbGxlc3RfdXNlcl9rZXksCisgICAg
Y29uc3QgU2xpY2UqIGxhcmdlc3RfdXNlcl9rZXkpIHsKKyAgY29uc3QgQ29tcGFyYXRvciogdWNt
cCA9IGljbXAudXNlcl9jb21wYXJhdG9yKCk7CisgIGlmICghZGlzam9pbnRfc29ydGVkX2ZpbGVz
KSB7CisgICAgLy8gTmVlZCB0byBjaGVjayBhZ2FpbnN0IGFsbCBmaWxlcworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgZmlsZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgIGNvbnN0IEZpbGVNZXRh
RGF0YSogZiA9IGZpbGVzW2ldOworICAgICAgaWYgKEFmdGVyRmlsZSh1Y21wLCBzbWFsbGVzdF91
c2VyX2tleSwgZikgfHwKKyAgICAgICAgICBCZWZvcmVGaWxlKHVjbXAsIGxhcmdlc3RfdXNlcl9r
ZXksIGYpKSB7CisgICAgICAgIC8vIE5vIG92ZXJsYXAKKyAgICAgIH0gZWxzZSB7CisgICAgICAg
IHJldHVybiB0cnVlOyAgLy8gT3ZlcmxhcAorICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFs
c2U7CisgIH0KKworICAvLyBCaW5hcnkgc2VhcmNoIG92ZXIgZmlsZSBsaXN0CisgIHVpbnQzMl90
IGluZGV4ID0gMDsKKyAgaWYgKHNtYWxsZXN0X3VzZXJfa2V5ICE9IE5VTEwpIHsKKyAgICAvLyBG
aW5kIHRoZSBlYXJsaWVzdCBwb3NzaWJsZSBpbnRlcm5hbCBrZXkgZm9yIHNtYWxsZXN0X3VzZXJf
a2V5CisgICAgSW50ZXJuYWxLZXkgc21hbGwoKnNtYWxsZXN0X3VzZXJfa2V5LCBrTWF4U2VxdWVu
Y2VOdW1iZXIsa1ZhbHVlVHlwZUZvclNlZWspOworICAgIGluZGV4ID0gRmluZEZpbGUoaWNtcCwg
ZmlsZXMsIHNtYWxsLkVuY29kZSgpKTsKKyAgfQorCisgIGlmIChpbmRleCA+PSBmaWxlcy5zaXpl
KCkpIHsKKyAgICAvLyBiZWdpbm5pbmcgb2YgcmFuZ2UgaXMgYWZ0ZXIgYWxsIGZpbGVzLCBzbyBu
byBvdmVybGFwLgorICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHJldHVybiAhQmVmb3JlRmls
ZSh1Y21wLCBsYXJnZXN0X3VzZXJfa2V5LCBmaWxlc1tpbmRleF0pOworfQorCisvLyBBbiBpbnRl
cm5hbCBpdGVyYXRvci4gIEZvciBhIGdpdmVuIHZlcnNpb24vbGV2ZWwgcGFpciwgeWllbGRzCisv
LyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZmlsZXMgaW4gdGhlIGxldmVsLiAgRm9yIGEgZ2l2ZW4g
ZW50cnksIGtleSgpCisvLyBpcyB0aGUgbGFyZ2VzdCBrZXkgdGhhdCBvY2N1cnMgaW4gdGhlIGZp
bGUsIGFuZCB2YWx1ZSgpIGlzIGFuCisvLyAxNi1ieXRlIHZhbHVlIGNvbnRhaW5pbmcgdGhlIGZp
bGUgbnVtYmVyIGFuZCBmaWxlIHNpemUsIGJvdGgKKy8vIGVuY29kZWQgdXNpbmcgRW5jb2RlRml4
ZWQ2NC4KK2NsYXNzIFZlcnNpb246OkxldmVsRmlsZU51bUl0ZXJhdG9yIDogcHVibGljIEl0ZXJh
dG9yIHsKKyBwdWJsaWM6CisgIExldmVsRmlsZU51bUl0ZXJhdG9yKGNvbnN0IEludGVybmFsS2V5
Q29tcGFyYXRvciYgaWNtcCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0
b3I8RmlsZU1ldGFEYXRhKj4qIGZsaXN0KQorICAgICAgOiBpY21wXyhpY21wKSwKKyAgICAgICAg
Zmxpc3RfKGZsaXN0KSwKKyAgICAgICAgaW5kZXhfKGZsaXN0LT5zaXplKCkpIHsgICAgICAgIC8v
IE1hcmtzIGFzIGludmFsaWQKKyAgfQorICB2aXJ0dWFsIGJvb2wgVmFsaWQoKSBjb25zdCB7Cisg
ICAgcmV0dXJuIGluZGV4XyA8IGZsaXN0Xy0+c2l6ZSgpOworICB9CisgIHZpcnR1YWwgdm9pZCBT
ZWVrKGNvbnN0IFNsaWNlJiB0YXJnZXQpIHsKKyAgICBpbmRleF8gPSBGaW5kRmlsZShpY21wXywg
KmZsaXN0XywgdGFyZ2V0KTsKKyAgfQorICB2aXJ0dWFsIHZvaWQgU2Vla1RvRmlyc3QoKSB7IGlu
ZGV4XyA9IDA7IH0KKyAgdmlydHVhbCB2b2lkIFNlZWtUb0xhc3QoKSB7CisgICAgaW5kZXhfID0g
Zmxpc3RfLT5lbXB0eSgpID8gMCA6IGZsaXN0Xy0+c2l6ZSgpIC0gMTsKKyAgfQorICB2aXJ0dWFs
IHZvaWQgTmV4dCgpIHsKKyAgICBhc3NlcnQoVmFsaWQoKSk7CisgICAgaW5kZXhfKys7CisgIH0K
KyAgdmlydHVhbCB2b2lkIFByZXYoKSB7CisgICAgYXNzZXJ0KFZhbGlkKCkpOworICAgIGlmIChp
bmRleF8gPT0gMCkgeworICAgICAgaW5kZXhfID0gZmxpc3RfLT5zaXplKCk7ICAvLyBNYXJrcyBh
cyBpbnZhbGlkCisgICAgfSBlbHNlIHsKKyAgICAgIGluZGV4Xy0tOworICAgIH0KKyAgfQorICBT
bGljZSBrZXkoKSBjb25zdCB7CisgICAgYXNzZXJ0KFZhbGlkKCkpOworICAgIHJldHVybiAoKmZs
aXN0XylbaW5kZXhfXS0+bGFyZ2VzdC5FbmNvZGUoKTsKKyAgfQorICBTbGljZSB2YWx1ZSgpIGNv
bnN0IHsKKyAgICBhc3NlcnQoVmFsaWQoKSk7CisgICAgRW5jb2RlRml4ZWQ2NCh2YWx1ZV9idWZf
LCAoKmZsaXN0XylbaW5kZXhfXS0+bnVtYmVyKTsKKyAgICBFbmNvZGVGaXhlZDY0KHZhbHVlX2J1
Zl8rOCwgKCpmbGlzdF8pW2luZGV4X10tPmZpbGVfc2l6ZSk7CisgICAgcmV0dXJuIFNsaWNlKHZh
bHVlX2J1Zl8sIHNpemVvZih2YWx1ZV9idWZfKSk7CisgIH0KKyAgdmlydHVhbCBTdGF0dXMgc3Rh
dHVzKCkgY29uc3QgeyByZXR1cm4gU3RhdHVzOjpPSygpOyB9CisgcHJpdmF0ZToKKyAgY29uc3Qg
SW50ZXJuYWxLZXlDb21wYXJhdG9yIGljbXBfOworICBjb25zdCBzdGQ6OnZlY3RvcjxGaWxlTWV0
YURhdGEqPiogY29uc3QgZmxpc3RfOworICB1aW50MzJfdCBpbmRleF87CisKKyAgLy8gQmFja2lu
ZyBzdG9yZSBmb3IgdmFsdWUoKS4gIEhvbGRzIHRoZSBmaWxlIG51bWJlciBhbmQgc2l6ZS4KKyAg
bXV0YWJsZSBjaGFyIHZhbHVlX2J1Zl9bMTZdOworfTsKKworc3RhdGljIEl0ZXJhdG9yKiBHZXRG
aWxlSXRlcmF0b3Iodm9pZCogYXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgUmVhZE9wdGlvbnMmIG9wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBTbGljZSYgZmlsZV92YWx1ZSkgeworICBUYWJsZUNhY2hlKiBjYWNoZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8VGFibGVDYWNoZSo+KGFyZyk7CisgIGlmIChmaWxlX3ZhbHVlLnNpemUo
KSAhPSAxNikgeworICAgIHJldHVybiBOZXdFcnJvckl0ZXJhdG9yKAorICAgICAgICBTdGF0dXM6
OkNvcnJ1cHRpb24oIkZpbGVSZWFkZXIgaW52b2tlZCB3aXRoIHVuZXhwZWN0ZWQgdmFsdWUiKSk7
CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIGNhY2hlLT5OZXdJdGVyYXRvcihvcHRpb25zLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVjb2RlRml4ZWQ2NChmaWxlX3ZhbHVlLmRhdGEo
KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWNvZGVGaXhlZDY0KGZpbGVfdmFs
dWUuZGF0YSgpICsgOCkpOworICB9Cit9CisKK0l0ZXJhdG9yKiBWZXJzaW9uOjpOZXdDb25jYXRl
bmF0aW5nSXRlcmF0b3IoY29uc3QgUmVhZE9wdGlvbnMmIG9wdGlvbnMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZXZlbCkgY29uc3QgeworICByZXR1
cm4gTmV3VHdvTGV2ZWxJdGVyYXRvcigKKyAgICAgIG5ldyBMZXZlbEZpbGVOdW1JdGVyYXRvcih2
c2V0Xy0+aWNtcF8sICZmaWxlc19bbGV2ZWxdKSwKKyAgICAgICZHZXRGaWxlSXRlcmF0b3IsIHZz
ZXRfLT50YWJsZV9jYWNoZV8sIG9wdGlvbnMpOworfQorCit2b2lkIFZlcnNpb246OkFkZEl0ZXJh
dG9ycyhjb25zdCBSZWFkT3B0aW9ucyYgb3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ZDo6dmVjdG9yPEl0ZXJhdG9yKj4qIGl0ZXJzKSB7CisgIC8vIE1lcmdlIGFsbCBsZXZl
bCB6ZXJvIGZpbGVzIHRvZ2V0aGVyIHNpbmNlIHRoZXkgbWF5IG92ZXJsYXAKKyAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBmaWxlc19bMF0uc2l6ZSgpOyBpKyspIHsKKyAgICBpdGVycy0+cHVzaF9i
YWNrKAorICAgICAgICB2c2V0Xy0+dGFibGVfY2FjaGVfLT5OZXdJdGVyYXRvcigKKyAgICAgICAg
ICAgIG9wdGlvbnMsIGZpbGVzX1swXVtpXS0+bnVtYmVyLCBmaWxlc19bMF1baV0tPmZpbGVfc2l6
ZSkpOworICB9CisKKyAgLy8gRm9yIGxldmVscyA+IDAsIHdlIGNhbiB1c2UgYSBjb25jYXRlbmF0
aW5nIGl0ZXJhdG9yIHRoYXQgc2VxdWVudGlhbGx5CisgIC8vIHdhbGtzIHRocm91Z2ggdGhlIG5v
bi1vdmVybGFwcGluZyBmaWxlcyBpbiB0aGUgbGV2ZWwsIG9wZW5pbmcgdGhlbQorICAvLyBsYXpp
bHkuCisgIGZvciAoaW50IGxldmVsID0gMTsgbGV2ZWwgPCBjb25maWc6OmtOdW1MZXZlbHM7IGxl
dmVsKyspIHsKKyAgICBpZiAoIWZpbGVzX1tsZXZlbF0uZW1wdHkoKSkgeworICAgICAgaXRlcnMt
PnB1c2hfYmFjayhOZXdDb25jYXRlbmF0aW5nSXRlcmF0b3Iob3B0aW9ucywgbGV2ZWwpKTsKKyAg
ICB9CisgIH0KK30KKworLy8gQ2FsbGJhY2sgZnJvbSBUYWJsZUNhY2hlOjpHZXQoKQorbmFtZXNw
YWNlIHsKK2VudW0gU2F2ZXJTdGF0ZSB7CisgIGtOb3RGb3VuZCwKKyAga0ZvdW5kLAorICBrRGVs
ZXRlZCwKKyAga0NvcnJ1cHQsCit9Oworc3RydWN0IFNhdmVyIHsKKyAgU2F2ZXJTdGF0ZSBzdGF0
ZTsKKyAgY29uc3QgQ29tcGFyYXRvciogdWNtcDsKKyAgU2xpY2UgdXNlcl9rZXk7CisgIHN0ZDo6
c3RyaW5nKiB2YWx1ZTsKK307Cit9CitzdGF0aWMgdm9pZCBTYXZlVmFsdWUodm9pZCogYXJnLCBj
b25zdCBTbGljZSYgaWtleSwgY29uc3QgU2xpY2UmIHYpIHsKKyAgU2F2ZXIqIHMgPSByZWludGVy
cHJldF9jYXN0PFNhdmVyKj4oYXJnKTsKKyAgUGFyc2VkSW50ZXJuYWxLZXkgcGFyc2VkX2tleTsK
KyAgaWYgKCFQYXJzZUludGVybmFsS2V5KGlrZXksICZwYXJzZWRfa2V5KSkgeworICAgIHMtPnN0
YXRlID0ga0NvcnJ1cHQ7CisgIH0gZWxzZSB7CisgICAgaWYgKHMtPnVjbXAtPkNvbXBhcmUocGFy
c2VkX2tleS51c2VyX2tleSwgcy0+dXNlcl9rZXkpID09IDApIHsKKyAgICAgIHMtPnN0YXRlID0g
KHBhcnNlZF9rZXkudHlwZSA9PSBrVHlwZVZhbHVlKSA/IGtGb3VuZCA6IGtEZWxldGVkOworICAg
ICAgaWYgKHMtPnN0YXRlID09IGtGb3VuZCkgeworICAgICAgICBzLT52YWx1ZS0+YXNzaWduKHYu
ZGF0YSgpLCB2LnNpemUoKSk7CisgICAgICB9CisgICAgfQorICB9Cit9CisKK3N0YXRpYyBib29s
IE5ld2VzdEZpcnN0KEZpbGVNZXRhRGF0YSogYSwgRmlsZU1ldGFEYXRhKiBiKSB7CisgIHJldHVy
biBhLT5udW1iZXIgPiBiLT5udW1iZXI7Cit9CisKK1N0YXR1cyBWZXJzaW9uOjpHZXQoY29uc3Qg
UmVhZE9wdGlvbnMmIG9wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IExvb2t1cEtl
eSYgaywKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcqIHZhbHVlLAorICAgICAgICAg
ICAgICAgICAgICBHZXRTdGF0cyogc3RhdHMpIHsKKyAgU2xpY2UgaWtleSA9IGsuaW50ZXJuYWxf
a2V5KCk7CisgIFNsaWNlIHVzZXJfa2V5ID0gay51c2VyX2tleSgpOworICBjb25zdCBDb21wYXJh
dG9yKiB1Y21wID0gdnNldF8tPmljbXBfLnVzZXJfY29tcGFyYXRvcigpOworICBTdGF0dXMgczsK
KworICBzdGF0cy0+c2Vla19maWxlID0gTlVMTDsKKyAgc3RhdHMtPnNlZWtfZmlsZV9sZXZlbCA9
IC0xOworICBGaWxlTWV0YURhdGEqIGxhc3RfZmlsZV9yZWFkID0gTlVMTDsKKyAgaW50IGxhc3Rf
ZmlsZV9yZWFkX2xldmVsID0gLTE7CisKKyAgLy8gV2UgY2FuIHNlYXJjaCBsZXZlbC1ieS1sZXZl
bCBzaW5jZSBlbnRyaWVzIG5ldmVyIGhvcCBhY3Jvc3MKKyAgLy8gbGV2ZWxzLiAgVGhlcmVmb3Jl
IHdlIGFyZSBndWFyYW50ZWVkIHRoYXQgaWYgd2UgZmluZCBkYXRhCisgIC8vIGluIGFuIHNtYWxs
ZXIgbGV2ZWwsIGxhdGVyIGxldmVscyBhcmUgaXJyZWxldmFudC4KKyAgc3RkOjp2ZWN0b3I8Rmls
ZU1ldGFEYXRhKj4gdG1wOworICBGaWxlTWV0YURhdGEqIHRtcDI7CisgIGZvciAoaW50IGxldmVs
ID0gMDsgbGV2ZWwgPCBjb25maWc6OmtOdW1MZXZlbHM7IGxldmVsKyspIHsKKyAgICBzaXplX3Qg
bnVtX2ZpbGVzID0gZmlsZXNfW2xldmVsXS5zaXplKCk7CisgICAgaWYgKG51bV9maWxlcyA9PSAw
KSBjb250aW51ZTsKKworICAgIC8vIEdldCB0aGUgbGlzdCBvZiBmaWxlcyB0byBzZWFyY2ggaW4g
dGhpcyBsZXZlbAorICAgIEZpbGVNZXRhRGF0YSogY29uc3QqIGZpbGVzID0gJmZpbGVzX1tsZXZl
bF1bMF07CisgICAgaWYgKGxldmVsID09IDApIHsKKyAgICAgIC8vIExldmVsLTAgZmlsZXMgbWF5
IG92ZXJsYXAgZWFjaCBvdGhlci4gIEZpbmQgYWxsIGZpbGVzIHRoYXQKKyAgICAgIC8vIG92ZXJs
YXAgdXNlcl9rZXkgYW5kIHByb2Nlc3MgdGhlbSBpbiBvcmRlciBmcm9tIG5ld2VzdCB0byBvbGRl
c3QuCisgICAgICB0bXAucmVzZXJ2ZShudW1fZmlsZXMpOworICAgICAgZm9yICh1aW50MzJfdCBp
ID0gMDsgaSA8IG51bV9maWxlczsgaSsrKSB7CisgICAgICAgIEZpbGVNZXRhRGF0YSogZiA9IGZp
bGVzW2ldOworICAgICAgICBpZiAodWNtcC0+Q29tcGFyZSh1c2VyX2tleSwgZi0+c21hbGxlc3Qu
dXNlcl9rZXkoKSkgPj0gMCAmJgorICAgICAgICAgICAgdWNtcC0+Q29tcGFyZSh1c2VyX2tleSwg
Zi0+bGFyZ2VzdC51c2VyX2tleSgpKSA8PSAwKSB7CisgICAgICAgICAgdG1wLnB1c2hfYmFjayhm
KTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgaWYgKHRtcC5lbXB0eSgpKSBjb250aW51ZTsK
KworICAgICAgc3RkOjpzb3J0KHRtcC5iZWdpbigpLCB0bXAuZW5kKCksIE5ld2VzdEZpcnN0KTsK
KyAgICAgIGZpbGVzID0gJnRtcFswXTsKKyAgICAgIG51bV9maWxlcyA9IHRtcC5zaXplKCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgIC8vIEJpbmFyeSBzZWFyY2ggdG8gZmluZCBlYXJsaWVzdCBpbmRl
eCB3aG9zZSBsYXJnZXN0IGtleSA+PSBpa2V5LgorICAgICAgdWludDMyX3QgaW5kZXggPSBGaW5k
RmlsZSh2c2V0Xy0+aWNtcF8sIGZpbGVzX1tsZXZlbF0sIGlrZXkpOworICAgICAgaWYgKGluZGV4
ID49IG51bV9maWxlcykgeworICAgICAgICBmaWxlcyA9IE5VTEw7CisgICAgICAgIG51bV9maWxl
cyA9IDA7CisgICAgICB9IGVsc2UgeworICAgICAgICB0bXAyID0gZmlsZXNbaW5kZXhdOworICAg
ICAgICBpZiAodWNtcC0+Q29tcGFyZSh1c2VyX2tleSwgdG1wMi0+c21hbGxlc3QudXNlcl9rZXko
KSkgPCAwKSB7CisgICAgICAgICAgLy8gQWxsIG9mICJ0bXAyIiBpcyBwYXN0IGFueSBkYXRhIGZv
ciB1c2VyX2tleQorICAgICAgICAgIGZpbGVzID0gTlVMTDsKKyAgICAgICAgICBudW1fZmlsZXMg
PSAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGZpbGVzID0gJnRtcDI7CisgICAgICAg
ICAgbnVtX2ZpbGVzID0gMTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIGZvciAo
dWludDMyX3QgaSA9IDA7IGkgPCBudW1fZmlsZXM7ICsraSkgeworICAgICAgaWYgKGxhc3RfZmls
ZV9yZWFkICE9IE5VTEwgJiYgc3RhdHMtPnNlZWtfZmlsZSA9PSBOVUxMKSB7CisgICAgICAgIC8v
IFdlIGhhdmUgaGFkIG1vcmUgdGhhbiBvbmUgc2VlayBmb3IgdGhpcyByZWFkLiAgQ2hhcmdlIHRo
ZSAxc3QgZmlsZS4KKyAgICAgICAgc3RhdHMtPnNlZWtfZmlsZSA9IGxhc3RfZmlsZV9yZWFkOwor
ICAgICAgICBzdGF0cy0+c2Vla19maWxlX2xldmVsID0gbGFzdF9maWxlX3JlYWRfbGV2ZWw7Cisg
ICAgICB9CisKKyAgICAgIEZpbGVNZXRhRGF0YSogZiA9IGZpbGVzW2ldOworICAgICAgbGFzdF9m
aWxlX3JlYWQgPSBmOworICAgICAgbGFzdF9maWxlX3JlYWRfbGV2ZWwgPSBsZXZlbDsKKworICAg
ICAgU2F2ZXIgc2F2ZXI7CisgICAgICBzYXZlci5zdGF0ZSA9IGtOb3RGb3VuZDsKKyAgICAgIHNh
dmVyLnVjbXAgPSB1Y21wOworICAgICAgc2F2ZXIudXNlcl9rZXkgPSB1c2VyX2tleTsKKyAgICAg
IHNhdmVyLnZhbHVlID0gdmFsdWU7CisgICAgICBzID0gdnNldF8tPnRhYmxlX2NhY2hlXy0+R2V0
KG9wdGlvbnMsIGYtPm51bWJlciwgZi0+ZmlsZV9zaXplLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpa2V5LCAmc2F2ZXIsIFNhdmVWYWx1ZSk7CisgICAgICBpZiAoIXMub2so
KSkgeworICAgICAgICByZXR1cm4gczsKKyAgICAgIH0KKyAgICAgIHN3aXRjaCAoc2F2ZXIuc3Rh
dGUpIHsKKyAgICAgICAgY2FzZSBrTm90Rm91bmQ6CisgICAgICAgICAgYnJlYWs7ICAgICAgLy8g
S2VlcCBzZWFyY2hpbmcgaW4gb3RoZXIgZmlsZXMKKyAgICAgICAgY2FzZSBrRm91bmQ6CisgICAg
ICAgICAgcmV0dXJuIHM7CisgICAgICAgIGNhc2Uga0RlbGV0ZWQ6CisgICAgICAgICAgcyA9IFN0
YXR1czo6Tm90Rm91bmQoU2xpY2UoKSk7ICAvLyBVc2UgZW1wdHkgZXJyb3IgbWVzc2FnZSBmb3Ig
c3BlZWQKKyAgICAgICAgICByZXR1cm4gczsKKyAgICAgICAgY2FzZSBrQ29ycnVwdDoKKyAgICAg
ICAgICBzID0gU3RhdHVzOjpDb3JydXB0aW9uKCJjb3JydXB0ZWQga2V5IGZvciAiLCB1c2VyX2tl
eSk7CisgICAgICAgICAgcmV0dXJuIHM7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJu
IFN0YXR1czo6Tm90Rm91bmQoU2xpY2UoKSk7ICAvLyBVc2UgYW4gZW1wdHkgZXJyb3IgbWVzc2Fn
ZSBmb3Igc3BlZWQKK30KKworYm9vbCBWZXJzaW9uOjpVcGRhdGVTdGF0cyhjb25zdCBHZXRTdGF0
cyYgc3RhdHMpIHsKKyAgRmlsZU1ldGFEYXRhKiBmID0gc3RhdHMuc2Vla19maWxlOworICBpZiAo
ZiAhPSBOVUxMKSB7CisgICAgZi0+YWxsb3dlZF9zZWVrcy0tOworICAgIGlmIChmLT5hbGxvd2Vk
X3NlZWtzIDw9IDAgJiYgZmlsZV90b19jb21wYWN0XyA9PSBOVUxMKSB7CisgICAgICBmaWxlX3Rv
X2NvbXBhY3RfID0gZjsKKyAgICAgIGZpbGVfdG9fY29tcGFjdF9sZXZlbF8gPSBzdGF0cy5zZWVr
X2ZpbGVfbGV2ZWw7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIGZh
bHNlOworfQorCit2b2lkIFZlcnNpb246OlJlZigpIHsKKyAgKytyZWZzXzsKK30KKwordm9pZCBW
ZXJzaW9uOjpVbnJlZigpIHsKKyAgYXNzZXJ0KHRoaXMgIT0gJnZzZXRfLT5kdW1teV92ZXJzaW9u
c18pOworICBhc3NlcnQocmVmc18gPj0gMSk7CisgIC0tcmVmc187CisgIGlmIChyZWZzXyA9PSAw
KSB7CisgICAgZGVsZXRlIHRoaXM7CisgIH0KK30KKworYm9vbCBWZXJzaW9uOjpPdmVybGFwSW5M
ZXZlbChpbnQgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNsaWNl
KiBzbWFsbGVzdF91c2VyX2tleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
U2xpY2UqIGxhcmdlc3RfdXNlcl9rZXkpIHsKKyAgcmV0dXJuIFNvbWVGaWxlT3ZlcmxhcHNSYW5n
ZSh2c2V0Xy0+aWNtcF8sIChsZXZlbCA+IDApLCBmaWxlc19bbGV2ZWxdLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNtYWxsZXN0X3VzZXJfa2V5LCBsYXJnZXN0X3VzZXJfa2V5KTsK
K30KKworaW50IFZlcnNpb246OlBpY2tMZXZlbEZvck1lbVRhYmxlT3V0cHV0KAorICAgIGNvbnN0
IFNsaWNlJiBzbWFsbGVzdF91c2VyX2tleSwKKyAgICBjb25zdCBTbGljZSYgbGFyZ2VzdF91c2Vy
X2tleSkgeworICBpbnQgbGV2ZWwgPSAwOworICBpZiAoIU92ZXJsYXBJbkxldmVsKDAsICZzbWFs
bGVzdF91c2VyX2tleSwgJmxhcmdlc3RfdXNlcl9rZXkpKSB7CisgICAgLy8gUHVzaCB0byBuZXh0
IGxldmVsIGlmIHRoZXJlIGlzIG5vIG92ZXJsYXAgaW4gbmV4dCBsZXZlbCwKKyAgICAvLyBhbmQg
dGhlICNieXRlcyBvdmVybGFwcGluZyBpbiB0aGUgbGV2ZWwgYWZ0ZXIgdGhhdCBhcmUgbGltaXRl
ZC4KKyAgICBJbnRlcm5hbEtleSBzdGFydChzbWFsbGVzdF91c2VyX2tleSwga01heFNlcXVlbmNl
TnVtYmVyLCBrVmFsdWVUeXBlRm9yU2Vlayk7CisgICAgSW50ZXJuYWxLZXkgbGltaXQobGFyZ2Vz
dF91c2VyX2tleSwgMCwgc3RhdGljX2Nhc3Q8VmFsdWVUeXBlPigwKSk7CisgICAgc3RkOjp2ZWN0
b3I8RmlsZU1ldGFEYXRhKj4gb3ZlcmxhcHM7CisgICAgd2hpbGUgKGxldmVsIDwgY29uZmlnOjpr
TWF4TWVtQ29tcGFjdExldmVsKSB7CisgICAgICBpZiAoT3ZlcmxhcEluTGV2ZWwobGV2ZWwgKyAx
LCAmc21hbGxlc3RfdXNlcl9rZXksICZsYXJnZXN0X3VzZXJfa2V5KSkgeworICAgICAgICBicmVh
azsKKyAgICAgIH0KKyAgICAgIEdldE92ZXJsYXBwaW5nSW5wdXRzKGxldmVsICsgMiwgJnN0YXJ0
LCAmbGltaXQsICZvdmVybGFwcyk7CisgICAgICBjb25zdCBpbnQ2NF90IHN1bSA9IFRvdGFsRmls
ZVNpemUob3ZlcmxhcHMpOworICAgICAgaWYgKHN1bSA+IGtNYXhHcmFuZFBhcmVudE92ZXJsYXBC
eXRlcykgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGxldmVsKys7CisgICAgfQor
ICB9CisgIHJldHVybiBsZXZlbDsKK30KKworLy8gU3RvcmUgaW4gIippbnB1dHMiIGFsbCBmaWxl
cyBpbiAibGV2ZWwiIHRoYXQgb3ZlcmxhcCBbYmVnaW4sZW5kXQordm9pZCBWZXJzaW9uOjpHZXRP
dmVybGFwcGluZ0lucHV0cygKKyAgICBpbnQgbGV2ZWwsCisgICAgY29uc3QgSW50ZXJuYWxLZXkq
IGJlZ2luLAorICAgIGNvbnN0IEludGVybmFsS2V5KiBlbmQsCisgICAgc3RkOjp2ZWN0b3I8Rmls
ZU1ldGFEYXRhKj4qIGlucHV0cykgeworICBpbnB1dHMtPmNsZWFyKCk7CisgIFNsaWNlIHVzZXJf
YmVnaW4sIHVzZXJfZW5kOworICBpZiAoYmVnaW4gIT0gTlVMTCkgeworICAgIHVzZXJfYmVnaW4g
PSBiZWdpbi0+dXNlcl9rZXkoKTsKKyAgfQorICBpZiAoZW5kICE9IE5VTEwpIHsKKyAgICB1c2Vy
X2VuZCA9IGVuZC0+dXNlcl9rZXkoKTsKKyAgfQorICBjb25zdCBDb21wYXJhdG9yKiB1c2VyX2Nt
cCA9IHZzZXRfLT5pY21wXy51c2VyX2NvbXBhcmF0b3IoKTsKKyAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBmaWxlc19bbGV2ZWxdLnNpemUoKTsgKSB7CisgICAgRmlsZU1ldGFEYXRhKiBmID0gZmls
ZXNfW2xldmVsXVtpKytdOworICAgIGNvbnN0IFNsaWNlIGZpbGVfc3RhcnQgPSBmLT5zbWFsbGVz
dC51c2VyX2tleSgpOworICAgIGNvbnN0IFNsaWNlIGZpbGVfbGltaXQgPSBmLT5sYXJnZXN0LnVz
ZXJfa2V5KCk7CisgICAgaWYgKGJlZ2luICE9IE5VTEwgJiYgdXNlcl9jbXAtPkNvbXBhcmUoZmls
ZV9saW1pdCwgdXNlcl9iZWdpbikgPCAwKSB7CisgICAgICAvLyAiZiIgaXMgY29tcGxldGVseSBi
ZWZvcmUgc3BlY2lmaWVkIHJhbmdlOyBza2lwIGl0CisgICAgfSBlbHNlIGlmIChlbmQgIT0gTlVM
TCAmJiB1c2VyX2NtcC0+Q29tcGFyZShmaWxlX3N0YXJ0LCB1c2VyX2VuZCkgPiAwKSB7CisgICAg
ICAvLyAiZiIgaXMgY29tcGxldGVseSBhZnRlciBzcGVjaWZpZWQgcmFuZ2U7IHNraXAgaXQKKyAg
ICB9IGVsc2UgeworICAgICAgaW5wdXRzLT5wdXNoX2JhY2soZik7CisgICAgICBpZiAobGV2ZWwg
PT0gMCkgeworICAgICAgICAvLyBMZXZlbC0wIGZpbGVzIG1heSBvdmVybGFwIGVhY2ggb3RoZXIu
ICBTbyBjaGVjayBpZiB0aGUgbmV3bHkKKyAgICAgICAgLy8gYWRkZWQgZmlsZSBoYXMgZXhwYW5k
ZWQgdGhlIHJhbmdlLiAgSWYgc28sIHJlc3RhcnQgc2VhcmNoLgorICAgICAgICBpZiAoYmVnaW4g
IT0gTlVMTCAmJiB1c2VyX2NtcC0+Q29tcGFyZShmaWxlX3N0YXJ0LCB1c2VyX2JlZ2luKSA8IDAp
IHsKKyAgICAgICAgICB1c2VyX2JlZ2luID0gZmlsZV9zdGFydDsKKyAgICAgICAgICBpbnB1dHMt
PmNsZWFyKCk7CisgICAgICAgICAgaSA9IDA7CisgICAgICAgIH0gZWxzZSBpZiAoZW5kICE9IE5V
TEwgJiYgdXNlcl9jbXAtPkNvbXBhcmUoZmlsZV9saW1pdCwgdXNlcl9lbmQpID4gMCkgeworICAg
ICAgICAgIHVzZXJfZW5kID0gZmlsZV9saW1pdDsKKyAgICAgICAgICBpbnB1dHMtPmNsZWFyKCk7
CisgICAgICAgICAgaSA9IDA7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KK30KKwor
c3RkOjpzdHJpbmcgVmVyc2lvbjo6RGVidWdTdHJpbmcoKSBjb25zdCB7CisgIHN0ZDo6c3RyaW5n
IHI7CisgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBjb25maWc6OmtOdW1MZXZlbHM7IGxl
dmVsKyspIHsKKyAgICAvLyBFLmcuLAorICAgIC8vICAgLS0tIGxldmVsIDEgLS0tCisgICAgLy8g
ICAxNzoxMjNbJ2EnIC4uICdkJ10KKyAgICAvLyAgIDIwOjQzWydlJyAuLiAnZyddCisgICAgci5h
cHBlbmQoIi0tLSBsZXZlbCAiKTsKKyAgICBBcHBlbmROdW1iZXJUbygmciwgbGV2ZWwpOworICAg
IHIuYXBwZW5kKCIgLS0tXG4iKTsKKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxGaWxlTWV0YURhdGEq
PiYgZmlsZXMgPSBmaWxlc19bbGV2ZWxdOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmls
ZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgIHIucHVzaF9iYWNrKCcgJyk7CisgICAgICBBcHBlbmRO
dW1iZXJUbygmciwgZmlsZXNbaV0tPm51bWJlcik7CisgICAgICByLnB1c2hfYmFjaygnOicpOwor
ICAgICAgQXBwZW5kTnVtYmVyVG8oJnIsIGZpbGVzW2ldLT5maWxlX3NpemUpOworICAgICAgci5h
cHBlbmQoIlsiKTsKKyAgICAgIHIuYXBwZW5kKGZpbGVzW2ldLT5zbWFsbGVzdC5EZWJ1Z1N0cmlu
ZygpKTsKKyAgICAgIHIuYXBwZW5kKCIgLi4gIik7CisgICAgICByLmFwcGVuZChmaWxlc1tpXS0+
bGFyZ2VzdC5EZWJ1Z1N0cmluZygpKTsKKyAgICAgIHIuYXBwZW5kKCJdXG4iKTsKKyAgICB9Cisg
IH0KKyAgcmV0dXJuIHI7Cit9CisKKy8vIEEgaGVscGVyIGNsYXNzIHNvIHdlIGNhbiBlZmZpY2ll
bnRseSBhcHBseSBhIHdob2xlIHNlcXVlbmNlCisvLyBvZiBlZGl0cyB0byBhIHBhcnRpY3VsYXIg
c3RhdGUgd2l0aG91dCBjcmVhdGluZyBpbnRlcm1lZGlhdGUKKy8vIFZlcnNpb25zIHRoYXQgY29u
dGFpbiBmdWxsIGNvcGllcyBvZiB0aGUgaW50ZXJtZWRpYXRlIHN0YXRlLgorY2xhc3MgVmVyc2lv
blNldDo6QnVpbGRlciB7CisgcHJpdmF0ZToKKyAgLy8gSGVscGVyIHRvIHNvcnQgYnkgdi0+Zmls
ZXNfW2ZpbGVfbnVtYmVyXS5zbWFsbGVzdAorICBzdHJ1Y3QgQnlTbWFsbGVzdEtleSB7CisgICAg
Y29uc3QgSW50ZXJuYWxLZXlDb21wYXJhdG9yKiBpbnRlcm5hbF9jb21wYXJhdG9yOworCisgICAg
Ym9vbCBvcGVyYXRvcigpKEZpbGVNZXRhRGF0YSogZjEsIEZpbGVNZXRhRGF0YSogZjIpIGNvbnN0
IHsKKyAgICAgIGludCByID0gaW50ZXJuYWxfY29tcGFyYXRvci0+Q29tcGFyZShmMS0+c21hbGxl
c3QsIGYyLT5zbWFsbGVzdCk7CisgICAgICBpZiAociAhPSAwKSB7CisgICAgICAgIHJldHVybiAo
ciA8IDApOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQnJlYWsgdGllcyBieSBmaWxlIG51
bWJlcgorICAgICAgICByZXR1cm4gKGYxLT5udW1iZXIgPCBmMi0+bnVtYmVyKTsKKyAgICAgIH0K
KyAgICB9CisgIH07CisKKyAgdHlwZWRlZiBzdGQ6OnNldDxGaWxlTWV0YURhdGEqLCBCeVNtYWxs
ZXN0S2V5PiBGaWxlU2V0OworICBzdHJ1Y3QgTGV2ZWxTdGF0ZSB7CisgICAgc3RkOjpzZXQ8dWlu
dDY0X3Q+IGRlbGV0ZWRfZmlsZXM7CisgICAgRmlsZVNldCogYWRkZWRfZmlsZXM7CisgIH07CisK
KyAgVmVyc2lvblNldCogdnNldF87CisgIFZlcnNpb24qIGJhc2VfOworICBMZXZlbFN0YXRlIGxl
dmVsc19bY29uZmlnOjprTnVtTGV2ZWxzXTsKKworIHB1YmxpYzoKKyAgLy8gSW5pdGlhbGl6ZSBh
IGJ1aWxkZXIgd2l0aCB0aGUgZmlsZXMgZnJvbSAqYmFzZSBhbmQgb3RoZXIgaW5mbyBmcm9tICp2
c2V0CisgIEJ1aWxkZXIoVmVyc2lvblNldCogdnNldCwgVmVyc2lvbiogYmFzZSkKKyAgICAgIDog
dnNldF8odnNldCksCisgICAgICAgIGJhc2VfKGJhc2UpIHsKKyAgICBiYXNlXy0+UmVmKCk7Cisg
ICAgQnlTbWFsbGVzdEtleSBjbXA7CisgICAgY21wLmludGVybmFsX2NvbXBhcmF0b3IgPSAmdnNl
dF8tPmljbXBfOworICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBjb25maWc6OmtOdW1M
ZXZlbHM7IGxldmVsKyspIHsKKyAgICAgIGxldmVsc19bbGV2ZWxdLmFkZGVkX2ZpbGVzID0gbmV3
IEZpbGVTZXQoY21wKTsKKyAgICB9CisgIH0KKworICB+QnVpbGRlcigpIHsKKyAgICBmb3IgKGlu
dCBsZXZlbCA9IDA7IGxldmVsIDwgY29uZmlnOjprTnVtTGV2ZWxzOyBsZXZlbCsrKSB7CisgICAg
ICBjb25zdCBGaWxlU2V0KiBhZGRlZCA9IGxldmVsc19bbGV2ZWxdLmFkZGVkX2ZpbGVzOworICAg
ICAgc3RkOjp2ZWN0b3I8RmlsZU1ldGFEYXRhKj4gdG9fdW5yZWY7CisgICAgICB0b191bnJlZi5y
ZXNlcnZlKGFkZGVkLT5zaXplKCkpOworICAgICAgZm9yIChGaWxlU2V0Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IGFkZGVkLT5iZWdpbigpOworICAgICAgICAgIGl0ICE9IGFkZGVkLT5lbmQoKTsgKytp
dCkgeworICAgICAgICB0b191bnJlZi5wdXNoX2JhY2soKml0KTsKKyAgICAgIH0KKyAgICAgIGRl
bGV0ZSBhZGRlZDsKKyAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCB0b191bnJlZi5zaXpl
KCk7IGkrKykgeworICAgICAgICBGaWxlTWV0YURhdGEqIGYgPSB0b191bnJlZltpXTsKKyAgICAg
ICAgZi0+cmVmcy0tOworICAgICAgICBpZiAoZi0+cmVmcyA8PSAwKSB7CisgICAgICAgICAgZGVs
ZXRlIGY7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgYmFzZV8tPlVucmVmKCk7Cisg
IH0KKworICAvLyBBcHBseSBhbGwgb2YgdGhlIGVkaXRzIGluICplZGl0IHRvIHRoZSBjdXJyZW50
IHN0YXRlLgorICB2b2lkIEFwcGx5KFZlcnNpb25FZGl0KiBlZGl0KSB7CisgICAgLy8gVXBkYXRl
IGNvbXBhY3Rpb24gcG9pbnRlcnMKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGVkaXQtPmNv
bXBhY3RfcG9pbnRlcnNfLnNpemUoKTsgaSsrKSB7CisgICAgICBjb25zdCBpbnQgbGV2ZWwgPSBl
ZGl0LT5jb21wYWN0X3BvaW50ZXJzX1tpXS5maXJzdDsKKyAgICAgIHZzZXRfLT5jb21wYWN0X3Bv
aW50ZXJfW2xldmVsXSA9CisgICAgICAgICAgZWRpdC0+Y29tcGFjdF9wb2ludGVyc19baV0uc2Vj
b25kLkVuY29kZSgpLlRvU3RyaW5nKCk7CisgICAgfQorCisgICAgLy8gRGVsZXRlIGZpbGVzCisg
ICAgY29uc3QgVmVyc2lvbkVkaXQ6OkRlbGV0ZWRGaWxlU2V0JiBkZWwgPSBlZGl0LT5kZWxldGVk
X2ZpbGVzXzsKKyAgICBmb3IgKFZlcnNpb25FZGl0OjpEZWxldGVkRmlsZVNldDo6Y29uc3RfaXRl
cmF0b3IgaXRlciA9IGRlbC5iZWdpbigpOworICAgICAgICAgaXRlciAhPSBkZWwuZW5kKCk7Cisg
ICAgICAgICArK2l0ZXIpIHsKKyAgICAgIGNvbnN0IGludCBsZXZlbCA9IGl0ZXItPmZpcnN0Owor
ICAgICAgY29uc3QgdWludDY0X3QgbnVtYmVyID0gaXRlci0+c2Vjb25kOworICAgICAgbGV2ZWxz
X1tsZXZlbF0uZGVsZXRlZF9maWxlcy5pbnNlcnQobnVtYmVyKTsKKyAgICB9CisKKyAgICAvLyBB
ZGQgbmV3IGZpbGVzCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBlZGl0LT5uZXdfZmlsZXNf
LnNpemUoKTsgaSsrKSB7CisgICAgICBjb25zdCBpbnQgbGV2ZWwgPSBlZGl0LT5uZXdfZmlsZXNf
W2ldLmZpcnN0OworICAgICAgRmlsZU1ldGFEYXRhKiBmID0gbmV3IEZpbGVNZXRhRGF0YShlZGl0
LT5uZXdfZmlsZXNfW2ldLnNlY29uZCk7CisgICAgICBmLT5yZWZzID0gMTsKKworICAgICAgLy8g
V2UgYXJyYW5nZSB0byBhdXRvbWF0aWNhbGx5IGNvbXBhY3QgdGhpcyBmaWxlIGFmdGVyCisgICAg
ICAvLyBhIGNlcnRhaW4gbnVtYmVyIG9mIHNlZWtzLiAgTGV0J3MgYXNzdW1lOgorICAgICAgLy8g
ICAoMSkgT25lIHNlZWsgY29zdHMgMTBtcworICAgICAgLy8gICAoMikgV3JpdGluZyBvciByZWFk
aW5nIDFNQiBjb3N0cyAxMG1zICgxMDBNQi9zKQorICAgICAgLy8gICAoMykgQSBjb21wYWN0aW9u
IG9mIDFNQiBkb2VzIDI1TUIgb2YgSU86CisgICAgICAvLyAgICAgICAgIDFNQiByZWFkIGZyb20g
dGhpcyBsZXZlbAorICAgICAgLy8gICAgICAgICAxMC0xMk1CIHJlYWQgZnJvbSBuZXh0IGxldmVs
IChib3VuZGFyaWVzIG1heSBiZSBtaXNhbGlnbmVkKQorICAgICAgLy8gICAgICAgICAxMC0xMk1C
IHdyaXR0ZW4gdG8gbmV4dCBsZXZlbAorICAgICAgLy8gVGhpcyBpbXBsaWVzIHRoYXQgMjUgc2Vl
a3MgY29zdCB0aGUgc2FtZSBhcyB0aGUgY29tcGFjdGlvbgorICAgICAgLy8gb2YgMU1CIG9mIGRh
dGEuICBJLmUuLCBvbmUgc2VlayBjb3N0cyBhcHByb3hpbWF0ZWx5IHRoZQorICAgICAgLy8gc2Ft
ZSBhcyB0aGUgY29tcGFjdGlvbiBvZiA0MEtCIG9mIGRhdGEuICBXZSBhcmUgYSBsaXR0bGUKKyAg
ICAgIC8vIGNvbnNlcnZhdGl2ZSBhbmQgYWxsb3cgYXBwcm94aW1hdGVseSBvbmUgc2VlayBmb3Ig
ZXZlcnkgMTZLQgorICAgICAgLy8gb2YgZGF0YSBiZWZvcmUgdHJpZ2dlcmluZyBhIGNvbXBhY3Rp
b24uCisgICAgICBmLT5hbGxvd2VkX3NlZWtzID0gKGYtPmZpbGVfc2l6ZSAvIDE2Mzg0KTsKKyAg
ICAgIGlmIChmLT5hbGxvd2VkX3NlZWtzIDwgMTAwKSBmLT5hbGxvd2VkX3NlZWtzID0gMTAwOwor
CisgICAgICBsZXZlbHNfW2xldmVsXS5kZWxldGVkX2ZpbGVzLmVyYXNlKGYtPm51bWJlcik7Cisg
ICAgICBsZXZlbHNfW2xldmVsXS5hZGRlZF9maWxlcy0+aW5zZXJ0KGYpOworICAgIH0KKyAgfQor
CisgIC8vIFNhdmUgdGhlIGN1cnJlbnQgc3RhdGUgaW4gKnYuCisgIHZvaWQgU2F2ZVRvKFZlcnNp
b24qIHYpIHsKKyAgICBCeVNtYWxsZXN0S2V5IGNtcDsKKyAgICBjbXAuaW50ZXJuYWxfY29tcGFy
YXRvciA9ICZ2c2V0Xy0+aWNtcF87CisgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGNv
bmZpZzo6a051bUxldmVsczsgbGV2ZWwrKykgeworICAgICAgLy8gTWVyZ2UgdGhlIHNldCBvZiBh
ZGRlZCBmaWxlcyB3aXRoIHRoZSBzZXQgb2YgcHJlLWV4aXN0aW5nIGZpbGVzLgorICAgICAgLy8g
RHJvcCBhbnkgZGVsZXRlZCBmaWxlcy4gIFN0b3JlIHRoZSByZXN1bHQgaW4gKnYuCisgICAgICBj
b25zdCBzdGQ6OnZlY3RvcjxGaWxlTWV0YURhdGEqPiYgYmFzZV9maWxlcyA9IGJhc2VfLT5maWxl
c19bbGV2ZWxdOworICAgICAgc3RkOjp2ZWN0b3I8RmlsZU1ldGFEYXRhKj46OmNvbnN0X2l0ZXJh
dG9yIGJhc2VfaXRlciA9IGJhc2VfZmlsZXMuYmVnaW4oKTsKKyAgICAgIHN0ZDo6dmVjdG9yPEZp
bGVNZXRhRGF0YSo+Ojpjb25zdF9pdGVyYXRvciBiYXNlX2VuZCA9IGJhc2VfZmlsZXMuZW5kKCk7
CisgICAgICBjb25zdCBGaWxlU2V0KiBhZGRlZCA9IGxldmVsc19bbGV2ZWxdLmFkZGVkX2ZpbGVz
OworICAgICAgdi0+ZmlsZXNfW2xldmVsXS5yZXNlcnZlKGJhc2VfZmlsZXMuc2l6ZSgpICsgYWRk
ZWQtPnNpemUoKSk7CisgICAgICBmb3IgKEZpbGVTZXQ6OmNvbnN0X2l0ZXJhdG9yIGFkZGVkX2l0
ZXIgPSBhZGRlZC0+YmVnaW4oKTsKKyAgICAgICAgICAgYWRkZWRfaXRlciAhPSBhZGRlZC0+ZW5k
KCk7CisgICAgICAgICAgICsrYWRkZWRfaXRlcikgeworICAgICAgICAvLyBBZGQgYWxsIHNtYWxs
ZXIgZmlsZXMgbGlzdGVkIGluIGJhc2VfCisgICAgICAgIGZvciAoc3RkOjp2ZWN0b3I8RmlsZU1l
dGFEYXRhKj46OmNvbnN0X2l0ZXJhdG9yIGJwb3MKKyAgICAgICAgICAgICAgICAgPSBzdGQ6OnVw
cGVyX2JvdW5kKGJhc2VfaXRlciwgYmFzZV9lbmQsICphZGRlZF9pdGVyLCBjbXApOworICAgICAg
ICAgICAgIGJhc2VfaXRlciAhPSBicG9zOworICAgICAgICAgICAgICsrYmFzZV9pdGVyKSB7Cisg
ICAgICAgICAgTWF5YmVBZGRGaWxlKHYsIGxldmVsLCAqYmFzZV9pdGVyKTsKKyAgICAgICAgfQor
CisgICAgICAgIE1heWJlQWRkRmlsZSh2LCBsZXZlbCwgKmFkZGVkX2l0ZXIpOworICAgICAgfQor
CisgICAgICAvLyBBZGQgcmVtYWluaW5nIGJhc2UgZmlsZXMKKyAgICAgIGZvciAoOyBiYXNlX2l0
ZXIgIT0gYmFzZV9lbmQ7ICsrYmFzZV9pdGVyKSB7CisgICAgICAgIE1heWJlQWRkRmlsZSh2LCBs
ZXZlbCwgKmJhc2VfaXRlcik7CisgICAgICB9CisKKyNpZm5kZWYgTkRFQlVHCisgICAgICAvLyBN
YWtlIHN1cmUgdGhlcmUgaXMgbm8gb3ZlcmxhcCBpbiBsZXZlbHMgPiAwCisgICAgICBpZiAobGV2
ZWwgPiAwKSB7CisgICAgICAgIGZvciAodWludDMyX3QgaSA9IDE7IGkgPCB2LT5maWxlc19bbGV2
ZWxdLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgY29uc3QgSW50ZXJuYWxLZXkmIHByZXZfZW5k
ID0gdi0+ZmlsZXNfW2xldmVsXVtpLTFdLT5sYXJnZXN0OworICAgICAgICAgIGNvbnN0IEludGVy
bmFsS2V5JiB0aGlzX2JlZ2luID0gdi0+ZmlsZXNfW2xldmVsXVtpXS0+c21hbGxlc3Q7CisgICAg
ICAgICAgaWYgKHZzZXRfLT5pY21wXy5Db21wYXJlKHByZXZfZW5kLCB0aGlzX2JlZ2luKSA+PSAw
KSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm92ZXJsYXBwaW5nIHJhbmdlcyBpbiBz
YW1lIGxldmVsICVzIHZzLiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgcHJldl9lbmQuRGVi
dWdTdHJpbmcoKS5jX3N0cigpLAorICAgICAgICAgICAgICAgICAgICB0aGlzX2JlZ2luLkRlYnVn
U3RyaW5nKCkuY19zdHIoKSk7CisgICAgICAgICAgICBhYm9ydCgpOworICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgfQorI2VuZGlmCisgICAgfQorICB9CisKKyAgdm9pZCBNYXliZUFkZEZp
bGUoVmVyc2lvbiogdiwgaW50IGxldmVsLCBGaWxlTWV0YURhdGEqIGYpIHsKKyAgICBpZiAobGV2
ZWxzX1tsZXZlbF0uZGVsZXRlZF9maWxlcy5jb3VudChmLT5udW1iZXIpID4gMCkgeworICAgICAg
Ly8gRmlsZSBpcyBkZWxldGVkOiBkbyBub3RoaW5nCisgICAgfSBlbHNlIHsKKyAgICAgIHN0ZDo6
dmVjdG9yPEZpbGVNZXRhRGF0YSo+KiBmaWxlcyA9ICZ2LT5maWxlc19bbGV2ZWxdOworICAgICAg
aWYgKGxldmVsID4gMCAmJiAhZmlsZXMtPmVtcHR5KCkpIHsKKyAgICAgICAgLy8gTXVzdCBub3Qg
b3ZlcmxhcAorICAgICAgICBhc3NlcnQodnNldF8tPmljbXBfLkNvbXBhcmUoKCpmaWxlcylbZmls
ZXMtPnNpemUoKS0xXS0+bGFyZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGYtPnNtYWxsZXN0KSA8IDApOworICAgICAgfQorICAgICAgZi0+cmVmcysrOworICAgICAg
ZmlsZXMtPnB1c2hfYmFjayhmKTsKKyAgICB9CisgIH0KK307CisKK1ZlcnNpb25TZXQ6OlZlcnNp
b25TZXQoY29uc3Qgc3RkOjpzdHJpbmcmIGRibmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgT3B0aW9ucyogb3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgVGFibGVDYWNo
ZSogdGFibGVfY2FjaGUsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludGVybmFsS2V5
Q29tcGFyYXRvciogY21wKQorICAgIDogZW52XyhvcHRpb25zLT5lbnYpLAorICAgICAgZGJuYW1l
XyhkYm5hbWUpLAorICAgICAgb3B0aW9uc18ob3B0aW9ucyksCisgICAgICB0YWJsZV9jYWNoZV8o
dGFibGVfY2FjaGUpLAorICAgICAgaWNtcF8oKmNtcCksCisgICAgICBuZXh0X2ZpbGVfbnVtYmVy
XygyKSwKKyAgICAgIG1hbmlmZXN0X2ZpbGVfbnVtYmVyXygwKSwgIC8vIEZpbGxlZCBieSBSZWNv
dmVyKCkKKyAgICAgIGxhc3Rfc2VxdWVuY2VfKDApLAorICAgICAgbG9nX251bWJlcl8oMCksCisg
ICAgICBwcmV2X2xvZ19udW1iZXJfKDApLAorICAgICAgZGVzY3JpcHRvcl9maWxlXyhOVUxMKSwK
KyAgICAgIGRlc2NyaXB0b3JfbG9nXyhOVUxMKSwKKyAgICAgIGR1bW15X3ZlcnNpb25zXyh0aGlz
KSwKKyAgICAgIGN1cnJlbnRfKE5VTEwpIHsKKyAgQXBwZW5kVmVyc2lvbihuZXcgVmVyc2lvbih0
aGlzKSk7Cit9CisKK1ZlcnNpb25TZXQ6On5WZXJzaW9uU2V0KCkgeworICBjdXJyZW50Xy0+VW5y
ZWYoKTsKKyAgYXNzZXJ0KGR1bW15X3ZlcnNpb25zXy5uZXh0XyA9PSAmZHVtbXlfdmVyc2lvbnNf
KTsgIC8vIExpc3QgbXVzdCBiZSBlbXB0eQorICBkZWxldGUgZGVzY3JpcHRvcl9sb2dfOworICBk
ZWxldGUgZGVzY3JpcHRvcl9maWxlXzsKK30KKwordm9pZCBWZXJzaW9uU2V0OjpBcHBlbmRWZXJz
aW9uKFZlcnNpb24qIHYpIHsKKyAgLy8gTWFrZSAidiIgY3VycmVudAorICBhc3NlcnQodi0+cmVm
c18gPT0gMCk7CisgIGFzc2VydCh2ICE9IGN1cnJlbnRfKTsKKyAgaWYgKGN1cnJlbnRfICE9IE5V
TEwpIHsKKyAgICBjdXJyZW50Xy0+VW5yZWYoKTsKKyAgfQorICBjdXJyZW50XyA9IHY7CisgIHYt
PlJlZigpOworCisgIC8vIEFwcGVuZCB0byBsaW5rZWQgbGlzdAorICB2LT5wcmV2XyA9IGR1bW15
X3ZlcnNpb25zXy5wcmV2XzsKKyAgdi0+bmV4dF8gPSAmZHVtbXlfdmVyc2lvbnNfOworICB2LT5w
cmV2Xy0+bmV4dF8gPSB2OworICB2LT5uZXh0Xy0+cHJldl8gPSB2OworfQorCitTdGF0dXMgVmVy
c2lvblNldDo6TG9nQW5kQXBwbHkoVmVyc2lvbkVkaXQqIGVkaXQsIHBvcnQ6Ok11dGV4KiBtdSkg
eworICBpZiAoZWRpdC0+aGFzX2xvZ19udW1iZXJfKSB7CisgICAgYXNzZXJ0KGVkaXQtPmxvZ19u
dW1iZXJfID49IGxvZ19udW1iZXJfKTsKKyAgICBhc3NlcnQoZWRpdC0+bG9nX251bWJlcl8gPCBu
ZXh0X2ZpbGVfbnVtYmVyXyk7CisgIH0gZWxzZSB7CisgICAgZWRpdC0+U2V0TG9nTnVtYmVyKGxv
Z19udW1iZXJfKTsKKyAgfQorCisgIGlmICghZWRpdC0+aGFzX3ByZXZfbG9nX251bWJlcl8pIHsK
KyAgICBlZGl0LT5TZXRQcmV2TG9nTnVtYmVyKHByZXZfbG9nX251bWJlcl8pOworICB9CisKKyAg
ZWRpdC0+U2V0TmV4dEZpbGUobmV4dF9maWxlX251bWJlcl8pOworICBlZGl0LT5TZXRMYXN0U2Vx
dWVuY2UobGFzdF9zZXF1ZW5jZV8pOworCisgIFZlcnNpb24qIHYgPSBuZXcgVmVyc2lvbih0aGlz
KTsKKyAgeworICAgIEJ1aWxkZXIgYnVpbGRlcih0aGlzLCBjdXJyZW50Xyk7CisgICAgYnVpbGRl
ci5BcHBseShlZGl0KTsKKyAgICBidWlsZGVyLlNhdmVUbyh2KTsKKyAgfQorICBGaW5hbGl6ZSh2
KTsKKworICAvLyBJbml0aWFsaXplIG5ldyBkZXNjcmlwdG9yIGxvZyBmaWxlIGlmIG5lY2Vzc2Fy
eSBieSBjcmVhdGluZworICAvLyBhIHRlbXBvcmFyeSBmaWxlIHRoYXQgY29udGFpbnMgYSBzbmFw
c2hvdCBvZiB0aGUgY3VycmVudCB2ZXJzaW9uLgorICBzdGQ6OnN0cmluZyBuZXdfbWFuaWZlc3Rf
ZmlsZTsKKyAgU3RhdHVzIHM7CisgIGlmIChkZXNjcmlwdG9yX2xvZ18gPT0gTlVMTCkgeworICAg
IC8vIE5vIHJlYXNvbiB0byB1bmxvY2sgKm11IGhlcmUgc2luY2Ugd2Ugb25seSBoaXQgdGhpcyBw
YXRoIGluIHRoZQorICAgIC8vIGZpcnN0IGNhbGwgdG8gTG9nQW5kQXBwbHkgKHdoZW4gb3Blbmlu
ZyB0aGUgZGF0YWJhc2UpLgorICAgIGFzc2VydChkZXNjcmlwdG9yX2ZpbGVfID09IE5VTEwpOwor
ICAgIG5ld19tYW5pZmVzdF9maWxlID0gRGVzY3JpcHRvckZpbGVOYW1lKGRibmFtZV8sIG1hbmlm
ZXN0X2ZpbGVfbnVtYmVyXyk7CisgICAgZWRpdC0+U2V0TmV4dEZpbGUobmV4dF9maWxlX251bWJl
cl8pOworICAgIHMgPSBlbnZfLT5OZXdXcml0YWJsZUZpbGUobmV3X21hbmlmZXN0X2ZpbGUsICZk
ZXNjcmlwdG9yX2ZpbGVfKTsKKyAgICBpZiAocy5vaygpKSB7CisgICAgICBkZXNjcmlwdG9yX2xv
Z18gPSBuZXcgbG9nOjpXcml0ZXIoZGVzY3JpcHRvcl9maWxlXyk7CisgICAgICBzID0gV3JpdGVT
bmFwc2hvdChkZXNjcmlwdG9yX2xvZ18pOworICAgIH0KKyAgfQorCisgIC8vIFVubG9jayBkdXJp
bmcgZXhwZW5zaXZlIE1BTklGRVNUIGxvZyB3cml0ZQorICB7CisgICAgbXUtPlVubG9jaygpOwor
CisgICAgLy8gV3JpdGUgbmV3IHJlY29yZCB0byBNQU5JRkVTVCBsb2cKKyAgICBpZiAocy5vaygp
KSB7CisgICAgICBzdGQ6OnN0cmluZyByZWNvcmQ7CisgICAgICBlZGl0LT5FbmNvZGVUbygmcmVj
b3JkKTsKKyAgICAgIHMgPSBkZXNjcmlwdG9yX2xvZ18tPkFkZFJlY29yZChyZWNvcmQpOworICAg
ICAgaWYgKHMub2soKSkgeworICAgICAgICBzID0gZGVzY3JpcHRvcl9maWxlXy0+U3luYygpOwor
ICAgICAgfQorICAgICAgaWYgKCFzLm9rKCkpIHsKKyAgICAgICAgTG9nKG9wdGlvbnNfLT5pbmZv
X2xvZywgIk1BTklGRVNUIHdyaXRlOiAlc1xuIiwgcy5Ub1N0cmluZygpLmNfc3RyKCkpOworICAg
ICAgICBpZiAoTWFuaWZlc3RDb250YWlucyhyZWNvcmQpKSB7CisgICAgICAgICAgTG9nKG9wdGlv
bnNfLT5pbmZvX2xvZywKKyAgICAgICAgICAgICAgIk1BTklGRVNUIGNvbnRhaW5zIGxvZyByZWNv
cmQgZGVzcGl0ZSBlcnJvcjsgYWR2YW5jaW5nIHRvIG5ldyAiCisgICAgICAgICAgICAgICJ2ZXJz
aW9uIHRvIHByZXZlbnQgbWlzbWF0Y2ggYmV0d2VlbiBpbi1tZW1vcnkgYW5kIGxvZ2dlZCBzdGF0
ZSIpOworICAgICAgICAgIHMgPSBTdGF0dXM6Ok9LKCk7CisgICAgICAgIH0KKyAgICAgIH0KKyAg
ICB9CisKKyAgICAvLyBJZiB3ZSBqdXN0IGNyZWF0ZWQgYSBuZXcgZGVzY3JpcHRvciBmaWxlLCBp
bnN0YWxsIGl0IGJ5IHdyaXRpbmcgYQorICAgIC8vIG5ldyBDVVJSRU5UIGZpbGUgdGhhdCBwb2lu
dHMgdG8gaXQuCisgICAgaWYgKHMub2soKSAmJiAhbmV3X21hbmlmZXN0X2ZpbGUuZW1wdHkoKSkg
eworICAgICAgcyA9IFNldEN1cnJlbnRGaWxlKGVudl8sIGRibmFtZV8sIG1hbmlmZXN0X2ZpbGVf
bnVtYmVyXyk7CisgICAgICAvLyBObyBuZWVkIHRvIGRvdWJsZS1jaGVjayBNQU5JRkVTVCBpbiBj
YXNlIG9mIGVycm9yIHNpbmNlIGl0CisgICAgICAvLyB3aWxsIGJlIGRpc2NhcmRlZCBiZWxvdy4K
KyAgICB9CisKKyAgICBtdS0+TG9jaygpOworICB9CisKKyAgLy8gSW5zdGFsbCB0aGUgbmV3IHZl
cnNpb24KKyAgaWYgKHMub2soKSkgeworICAgIEFwcGVuZFZlcnNpb24odik7CisgICAgbG9nX251
bWJlcl8gPSBlZGl0LT5sb2dfbnVtYmVyXzsKKyAgICBwcmV2X2xvZ19udW1iZXJfID0gZWRpdC0+
cHJldl9sb2dfbnVtYmVyXzsKKyAgfSBlbHNlIHsKKyAgICBkZWxldGUgdjsKKyAgICBpZiAoIW5l
d19tYW5pZmVzdF9maWxlLmVtcHR5KCkpIHsKKyAgICAgIGRlbGV0ZSBkZXNjcmlwdG9yX2xvZ187
CisgICAgICBkZWxldGUgZGVzY3JpcHRvcl9maWxlXzsKKyAgICAgIGRlc2NyaXB0b3JfbG9nXyA9
IE5VTEw7CisgICAgICBkZXNjcmlwdG9yX2ZpbGVfID0gTlVMTDsKKyAgICAgIGVudl8tPkRlbGV0
ZUZpbGUobmV3X21hbmlmZXN0X2ZpbGUpOworICAgIH0KKyAgfQorCisgIHJldHVybiBzOworfQor
CitTdGF0dXMgVmVyc2lvblNldDo6UmVjb3ZlcigpIHsKKyAgc3RydWN0IExvZ1JlcG9ydGVyIDog
cHVibGljIGxvZzo6UmVhZGVyOjpSZXBvcnRlciB7CisgICAgU3RhdHVzKiBzdGF0dXM7CisgICAg
dmlydHVhbCB2b2lkIENvcnJ1cHRpb24oc2l6ZV90IGJ5dGVzLCBjb25zdCBTdGF0dXMmIHMpIHsK
KyAgICAgIGlmICh0aGlzLT5zdGF0dXMtPm9rKCkpICp0aGlzLT5zdGF0dXMgPSBzOworICAgIH0K
KyAgfTsKKworICAvLyBSZWFkICJDVVJSRU5UIiBmaWxlLCB3aGljaCBjb250YWlucyBhIHBvaW50
ZXIgdG8gdGhlIGN1cnJlbnQgbWFuaWZlc3QgZmlsZQorICBzdGQ6OnN0cmluZyBjdXJyZW50Owor
ICBTdGF0dXMgcyA9IFJlYWRGaWxlVG9TdHJpbmcoZW52XywgQ3VycmVudEZpbGVOYW1lKGRibmFt
ZV8pLCAmY3VycmVudCk7CisgIGlmICghcy5vaygpKSB7CisgICAgcmV0dXJuIHM7CisgIH0KKyAg
aWYgKGN1cnJlbnQuZW1wdHkoKSB8fCBjdXJyZW50W2N1cnJlbnQuc2l6ZSgpLTFdICE9ICdcbicp
IHsKKyAgICByZXR1cm4gU3RhdHVzOjpDb3JydXB0aW9uKCJDVVJSRU5UIGZpbGUgZG9lcyBub3Qg
ZW5kIHdpdGggbmV3bGluZSIpOworICB9CisgIGN1cnJlbnQucmVzaXplKGN1cnJlbnQuc2l6ZSgp
IC0gMSk7CisKKyAgc3RkOjpzdHJpbmcgZHNjbmFtZSA9IGRibmFtZV8gKyAiLyIgKyBjdXJyZW50
OworICBTZXF1ZW50aWFsRmlsZSogZmlsZTsKKyAgcyA9IGVudl8tPk5ld1NlcXVlbnRpYWxGaWxl
KGRzY25hbWUsICZmaWxlKTsKKyAgaWYgKCFzLm9rKCkpIHsKKyAgICByZXR1cm4gczsKKyAgfQor
CisgIGJvb2wgaGF2ZV9sb2dfbnVtYmVyID0gZmFsc2U7CisgIGJvb2wgaGF2ZV9wcmV2X2xvZ19u
dW1iZXIgPSBmYWxzZTsKKyAgYm9vbCBoYXZlX25leHRfZmlsZSA9IGZhbHNlOworICBib29sIGhh
dmVfbGFzdF9zZXF1ZW5jZSA9IGZhbHNlOworICB1aW50NjRfdCBuZXh0X2ZpbGUgPSAwOworICB1
aW50NjRfdCBsYXN0X3NlcXVlbmNlID0gMDsKKyAgdWludDY0X3QgbG9nX251bWJlciA9IDA7Cisg
IHVpbnQ2NF90IHByZXZfbG9nX251bWJlciA9IDA7CisgIEJ1aWxkZXIgYnVpbGRlcih0aGlzLCBj
dXJyZW50Xyk7CisKKyAgeworICAgIExvZ1JlcG9ydGVyIHJlcG9ydGVyOworICAgIHJlcG9ydGVy
LnN0YXR1cyA9ICZzOworICAgIGxvZzo6UmVhZGVyIHJlYWRlcihmaWxlLCAmcmVwb3J0ZXIsIHRy
dWUvKmNoZWNrc3VtKi8sIDAvKmluaXRpYWxfb2Zmc2V0Ki8pOworICAgIFNsaWNlIHJlY29yZDsK
KyAgICBzdGQ6OnN0cmluZyBzY3JhdGNoOworICAgIHdoaWxlIChyZWFkZXIuUmVhZFJlY29yZCgm
cmVjb3JkLCAmc2NyYXRjaCkgJiYgcy5vaygpKSB7CisgICAgICBWZXJzaW9uRWRpdCBlZGl0Owor
ICAgICAgcyA9IGVkaXQuRGVjb2RlRnJvbShyZWNvcmQpOworICAgICAgaWYgKHMub2soKSkgewor
ICAgICAgICBpZiAoZWRpdC5oYXNfY29tcGFyYXRvcl8gJiYKKyAgICAgICAgICAgIGVkaXQuY29t
cGFyYXRvcl8gIT0gaWNtcF8udXNlcl9jb21wYXJhdG9yKCktPk5hbWUoKSkgeworICAgICAgICAg
IHMgPSBTdGF0dXM6OkludmFsaWRBcmd1bWVudCgKKyAgICAgICAgICAgICAgZWRpdC5jb21wYXJh
dG9yXyArICIgZG9lcyBub3QgbWF0Y2ggZXhpc3RpbmcgY29tcGFyYXRvciAiLAorICAgICAgICAg
ICAgICBpY21wXy51c2VyX2NvbXBhcmF0b3IoKS0+TmFtZSgpKTsKKyAgICAgICAgfQorICAgICAg
fQorCisgICAgICBpZiAocy5vaygpKSB7CisgICAgICAgIGJ1aWxkZXIuQXBwbHkoJmVkaXQpOwor
ICAgICAgfQorCisgICAgICBpZiAoZWRpdC5oYXNfbG9nX251bWJlcl8pIHsKKyAgICAgICAgbG9n
X251bWJlciA9IGVkaXQubG9nX251bWJlcl87CisgICAgICAgIGhhdmVfbG9nX251bWJlciA9IHRy
dWU7CisgICAgICB9CisKKyAgICAgIGlmIChlZGl0Lmhhc19wcmV2X2xvZ19udW1iZXJfKSB7Cisg
ICAgICAgIHByZXZfbG9nX251bWJlciA9IGVkaXQucHJldl9sb2dfbnVtYmVyXzsKKyAgICAgICAg
aGF2ZV9wcmV2X2xvZ19udW1iZXIgPSB0cnVlOworICAgICAgfQorCisgICAgICBpZiAoZWRpdC5o
YXNfbmV4dF9maWxlX251bWJlcl8pIHsKKyAgICAgICAgbmV4dF9maWxlID0gZWRpdC5uZXh0X2Zp
bGVfbnVtYmVyXzsKKyAgICAgICAgaGF2ZV9uZXh0X2ZpbGUgPSB0cnVlOworICAgICAgfQorCisg
ICAgICBpZiAoZWRpdC5oYXNfbGFzdF9zZXF1ZW5jZV8pIHsKKyAgICAgICAgbGFzdF9zZXF1ZW5j
ZSA9IGVkaXQubGFzdF9zZXF1ZW5jZV87CisgICAgICAgIGhhdmVfbGFzdF9zZXF1ZW5jZSA9IHRy
dWU7CisgICAgICB9CisgICAgfQorICB9CisgIGRlbGV0ZSBmaWxlOworICBmaWxlID0gTlVMTDsK
KworICBpZiAocy5vaygpKSB7CisgICAgaWYgKCFoYXZlX25leHRfZmlsZSkgeworICAgICAgcyA9
IFN0YXR1czo6Q29ycnVwdGlvbigibm8gbWV0YS1uZXh0ZmlsZSBlbnRyeSBpbiBkZXNjcmlwdG9y
Iik7CisgICAgfSBlbHNlIGlmICghaGF2ZV9sb2dfbnVtYmVyKSB7CisgICAgICBzID0gU3RhdHVz
OjpDb3JydXB0aW9uKCJubyBtZXRhLWxvZ251bWJlciBlbnRyeSBpbiBkZXNjcmlwdG9yIik7Cisg
ICAgfSBlbHNlIGlmICghaGF2ZV9sYXN0X3NlcXVlbmNlKSB7CisgICAgICBzID0gU3RhdHVzOjpD
b3JydXB0aW9uKCJubyBsYXN0LXNlcXVlbmNlLW51bWJlciBlbnRyeSBpbiBkZXNjcmlwdG9yIik7
CisgICAgfQorCisgICAgaWYgKCFoYXZlX3ByZXZfbG9nX251bWJlcikgeworICAgICAgcHJldl9s
b2dfbnVtYmVyID0gMDsKKyAgICB9CisKKyAgICBNYXJrRmlsZU51bWJlclVzZWQocHJldl9sb2df
bnVtYmVyKTsKKyAgICBNYXJrRmlsZU51bWJlclVzZWQobG9nX251bWJlcik7CisgIH0KKworICBp
ZiAocy5vaygpKSB7CisgICAgVmVyc2lvbiogdiA9IG5ldyBWZXJzaW9uKHRoaXMpOworICAgIGJ1
aWxkZXIuU2F2ZVRvKHYpOworICAgIC8vIEluc3RhbGwgcmVjb3ZlcmVkIHZlcnNpb24KKyAgICBG
aW5hbGl6ZSh2KTsKKyAgICBBcHBlbmRWZXJzaW9uKHYpOworICAgIG1hbmlmZXN0X2ZpbGVfbnVt
YmVyXyA9IG5leHRfZmlsZTsKKyAgICBuZXh0X2ZpbGVfbnVtYmVyXyA9IG5leHRfZmlsZSArIDE7
CisgICAgbGFzdF9zZXF1ZW5jZV8gPSBsYXN0X3NlcXVlbmNlOworICAgIGxvZ19udW1iZXJfID0g
bG9nX251bWJlcjsKKyAgICBwcmV2X2xvZ19udW1iZXJfID0gcHJldl9sb2dfbnVtYmVyOworICB9
CisKKyAgcmV0dXJuIHM7Cit9CisKK3ZvaWQgVmVyc2lvblNldDo6TWFya0ZpbGVOdW1iZXJVc2Vk
KHVpbnQ2NF90IG51bWJlcikgeworICBpZiAobmV4dF9maWxlX251bWJlcl8gPD0gbnVtYmVyKSB7
CisgICAgbmV4dF9maWxlX251bWJlcl8gPSBudW1iZXIgKyAxOworICB9Cit9CisKK3ZvaWQgVmVy
c2lvblNldDo6RmluYWxpemUoVmVyc2lvbiogdikgeworICAvLyBQcmVjb21wdXRlZCBiZXN0IGxl
dmVsIGZvciBuZXh0IGNvbXBhY3Rpb24KKyAgaW50IGJlc3RfbGV2ZWwgPSAtMTsKKyAgZG91Ymxl
IGJlc3Rfc2NvcmUgPSAtMTsKKworICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgY29uZmln
OjprTnVtTGV2ZWxzLTE7IGxldmVsKyspIHsKKyAgICBkb3VibGUgc2NvcmU7CisgICAgaWYgKGxl
dmVsID09IDApIHsKKyAgICAgIC8vIFdlIHRyZWF0IGxldmVsLTAgc3BlY2lhbGx5IGJ5IGJvdW5k
aW5nIHRoZSBudW1iZXIgb2YgZmlsZXMKKyAgICAgIC8vIGluc3RlYWQgb2YgbnVtYmVyIG9mIGJ5
dGVzIGZvciB0d28gcmVhc29uczoKKyAgICAgIC8vCisgICAgICAvLyAoMSkgV2l0aCBsYXJnZXIg
d3JpdGUtYnVmZmVyIHNpemVzLCBpdCBpcyBuaWNlIG5vdCB0byBkbyB0b28KKyAgICAgIC8vIG1h
bnkgbGV2ZWwtMCBjb21wYWN0aW9ucy4KKyAgICAgIC8vCisgICAgICAvLyAoMikgVGhlIGZpbGVz
IGluIGxldmVsLTAgYXJlIG1lcmdlZCBvbiBldmVyeSByZWFkIGFuZAorICAgICAgLy8gdGhlcmVm
b3JlIHdlIHdpc2ggdG8gYXZvaWQgdG9vIG1hbnkgZmlsZXMgd2hlbiB0aGUgaW5kaXZpZHVhbAor
ICAgICAgLy8gZmlsZSBzaXplIGlzIHNtYWxsIChwZXJoYXBzIGJlY2F1c2Ugb2YgYSBzbWFsbCB3
cml0ZS1idWZmZXIKKyAgICAgIC8vIHNldHRpbmcsIG9yIHZlcnkgaGlnaCBjb21wcmVzc2lvbiBy
YXRpb3MsIG9yIGxvdHMgb2YKKyAgICAgIC8vIG92ZXJ3cml0ZXMvZGVsZXRpb25zKS4KKyAgICAg
IHNjb3JlID0gdi0+ZmlsZXNfW2xldmVsXS5zaXplKCkgLworICAgICAgICAgIHN0YXRpY19jYXN0
PGRvdWJsZT4oY29uZmlnOjprTDBfQ29tcGFjdGlvblRyaWdnZXIpOworICAgIH0gZWxzZSB7Cisg
ICAgICAvLyBDb21wdXRlIHRoZSByYXRpbyBvZiBjdXJyZW50IHNpemUgdG8gc2l6ZSBsaW1pdC4K
KyAgICAgIGNvbnN0IHVpbnQ2NF90IGxldmVsX2J5dGVzID0gVG90YWxGaWxlU2l6ZSh2LT5maWxl
c19bbGV2ZWxdKTsKKyAgICAgIHNjb3JlID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihsZXZlbF9ieXRl
cykgLyBNYXhCeXRlc0ZvckxldmVsKGxldmVsKTsKKyAgICB9CisKKyAgICBpZiAoc2NvcmUgPiBi
ZXN0X3Njb3JlKSB7CisgICAgICBiZXN0X2xldmVsID0gbGV2ZWw7CisgICAgICBiZXN0X3Njb3Jl
ID0gc2NvcmU7CisgICAgfQorICB9CisKKyAgdi0+Y29tcGFjdGlvbl9sZXZlbF8gPSBiZXN0X2xl
dmVsOworICB2LT5jb21wYWN0aW9uX3Njb3JlXyA9IGJlc3Rfc2NvcmU7Cit9CisKK1N0YXR1cyBW
ZXJzaW9uU2V0OjpXcml0ZVNuYXBzaG90KGxvZzo6V3JpdGVyKiBsb2cpIHsKKyAgLy8gVE9ETzog
QnJlYWsgdXAgaW50byBtdWx0aXBsZSByZWNvcmRzIHRvIHJlZHVjZSBtZW1vcnkgdXNhZ2Ugb24g
cmVjb3Zlcnk/CisKKyAgLy8gU2F2ZSBtZXRhZGF0YQorICBWZXJzaW9uRWRpdCBlZGl0OworICBl
ZGl0LlNldENvbXBhcmF0b3JOYW1lKGljbXBfLnVzZXJfY29tcGFyYXRvcigpLT5OYW1lKCkpOwor
CisgIC8vIFNhdmUgY29tcGFjdGlvbiBwb2ludGVycworICBmb3IgKGludCBsZXZlbCA9IDA7IGxl
dmVsIDwgY29uZmlnOjprTnVtTGV2ZWxzOyBsZXZlbCsrKSB7CisgICAgaWYgKCFjb21wYWN0X3Bv
aW50ZXJfW2xldmVsXS5lbXB0eSgpKSB7CisgICAgICBJbnRlcm5hbEtleSBrZXk7CisgICAgICBr
ZXkuRGVjb2RlRnJvbShjb21wYWN0X3BvaW50ZXJfW2xldmVsXSk7CisgICAgICBlZGl0LlNldENv
bXBhY3RQb2ludGVyKGxldmVsLCBrZXkpOworICAgIH0KKyAgfQorCisgIC8vIFNhdmUgZmlsZXMK
KyAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGNvbmZpZzo6a051bUxldmVsczsgbGV2ZWwr
KykgeworICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEZpbGVNZXRhRGF0YSo+JiBmaWxlcyA9IGN1cnJl
bnRfLT5maWxlc19bbGV2ZWxdOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsZXMuc2l6
ZSgpOyBpKyspIHsKKyAgICAgIGNvbnN0IEZpbGVNZXRhRGF0YSogZiA9IGZpbGVzW2ldOworICAg
ICAgZWRpdC5BZGRGaWxlKGxldmVsLCBmLT5udW1iZXIsIGYtPmZpbGVfc2l6ZSwgZi0+c21hbGxl
c3QsIGYtPmxhcmdlc3QpOworICAgIH0KKyAgfQorCisgIHN0ZDo6c3RyaW5nIHJlY29yZDsKKyAg
ZWRpdC5FbmNvZGVUbygmcmVjb3JkKTsKKyAgcmV0dXJuIGxvZy0+QWRkUmVjb3JkKHJlY29yZCk7
Cit9CisKK2ludCBWZXJzaW9uU2V0OjpOdW1MZXZlbEZpbGVzKGludCBsZXZlbCkgY29uc3Qgewor
ICBhc3NlcnQobGV2ZWwgPj0gMCk7CisgIGFzc2VydChsZXZlbCA8IGNvbmZpZzo6a051bUxldmVs
cyk7CisgIHJldHVybiBjdXJyZW50Xy0+ZmlsZXNfW2xldmVsXS5zaXplKCk7Cit9CisKK2NvbnN0
IGNoYXIqIFZlcnNpb25TZXQ6OkxldmVsU3VtbWFyeShMZXZlbFN1bW1hcnlTdG9yYWdlKiBzY3Jh
dGNoKSBjb25zdCB7CisgIC8vIFVwZGF0ZSBjb2RlIGlmIGtOdW1MZXZlbHMgY2hhbmdlcworICBh
c3NlcnQoY29uZmlnOjprTnVtTGV2ZWxzID09IDcpOworICBzbnByaW50ZihzY3JhdGNoLT5idWZm
ZXIsIHNpemVvZihzY3JhdGNoLT5idWZmZXIpLAorICAgICAgICAgICAiZmlsZXNbICVkICVkICVk
ICVkICVkICVkICVkIF0iLAorICAgICAgICAgICBpbnQoY3VycmVudF8tPmZpbGVzX1swXS5zaXpl
KCkpLAorICAgICAgICAgICBpbnQoY3VycmVudF8tPmZpbGVzX1sxXS5zaXplKCkpLAorICAgICAg
ICAgICBpbnQoY3VycmVudF8tPmZpbGVzX1syXS5zaXplKCkpLAorICAgICAgICAgICBpbnQoY3Vy
cmVudF8tPmZpbGVzX1szXS5zaXplKCkpLAorICAgICAgICAgICBpbnQoY3VycmVudF8tPmZpbGVz
X1s0XS5zaXplKCkpLAorICAgICAgICAgICBpbnQoY3VycmVudF8tPmZpbGVzX1s1XS5zaXplKCkp
LAorICAgICAgICAgICBpbnQoY3VycmVudF8tPmZpbGVzX1s2XS5zaXplKCkpKTsKKyAgcmV0dXJu
IHNjcmF0Y2gtPmJ1ZmZlcjsKK30KKworLy8gUmV0dXJuIHRydWUgaWZmIHRoZSBtYW5pZmVzdCBj
b250YWlucyB0aGUgc3BlY2lmaWVkIHJlY29yZC4KK2Jvb2wgVmVyc2lvblNldDo6TWFuaWZlc3RD
b250YWlucyhjb25zdCBzdGQ6OnN0cmluZyYgcmVjb3JkKSBjb25zdCB7CisgIHN0ZDo6c3RyaW5n
IGZuYW1lID0gRGVzY3JpcHRvckZpbGVOYW1lKGRibmFtZV8sIG1hbmlmZXN0X2ZpbGVfbnVtYmVy
Xyk7CisgIExvZyhvcHRpb25zXy0+aW5mb19sb2csICJNYW5pZmVzdENvbnRhaW5zOiBjaGVja2lu
ZyAlc1xuIiwgZm5hbWUuY19zdHIoKSk7CisgIFNlcXVlbnRpYWxGaWxlKiBmaWxlID0gTlVMTDsK
KyAgU3RhdHVzIHMgPSBlbnZfLT5OZXdTZXF1ZW50aWFsRmlsZShmbmFtZSwgJmZpbGUpOworICBp
ZiAoIXMub2soKSkgeworICAgIExvZyhvcHRpb25zXy0+aW5mb19sb2csICJNYW5pZmVzdENvbnRh
aW5zOiAlc1xuIiwgcy5Ub1N0cmluZygpLmNfc3RyKCkpOworICAgIHJldHVybiBmYWxzZTsKKyAg
fQorICBsb2c6OlJlYWRlciByZWFkZXIoZmlsZSwgTlVMTCwgdHJ1ZS8qY2hlY2tzdW0qLywgMCk7
CisgIFNsaWNlIHI7CisgIHN0ZDo6c3RyaW5nIHNjcmF0Y2g7CisgIGJvb2wgcmVzdWx0ID0gZmFs
c2U7CisgIHdoaWxlIChyZWFkZXIuUmVhZFJlY29yZCgmciwgJnNjcmF0Y2gpKSB7CisgICAgaWYg
KHIgPT0gU2xpY2UocmVjb3JkKSkgeworICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICAgIGJyZWFr
OworICAgIH0KKyAgfQorICBkZWxldGUgZmlsZTsKKyAgTG9nKG9wdGlvbnNfLT5pbmZvX2xvZywg
Ik1hbmlmZXN0Q29udGFpbnM6IHJlc3VsdCA9ICVkXG4iLCByZXN1bHQgPyAxIDogMCk7CisgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3VpbnQ2NF90IFZlcnNpb25TZXQ6OkFwcHJveGltYXRlT2Zmc2V0
T2YoVmVyc2lvbiogdiwgY29uc3QgSW50ZXJuYWxLZXkmIGlrZXkpIHsKKyAgdWludDY0X3QgcmVz
dWx0ID0gMDsKKyAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGNvbmZpZzo6a051bUxldmVs
czsgbGV2ZWwrKykgeworICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEZpbGVNZXRhRGF0YSo+JiBmaWxl
cyA9IHYtPmZpbGVzX1tsZXZlbF07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxlcy5z
aXplKCk7IGkrKykgeworICAgICAgaWYgKGljbXBfLkNvbXBhcmUoZmlsZXNbaV0tPmxhcmdlc3Qs
IGlrZXkpIDw9IDApIHsKKyAgICAgICAgLy8gRW50aXJlIGZpbGUgaXMgYmVmb3JlICJpa2V5Iiwg
c28ganVzdCBhZGQgdGhlIGZpbGUgc2l6ZQorICAgICAgICByZXN1bHQgKz0gZmlsZXNbaV0tPmZp
bGVfc2l6ZTsKKyAgICAgIH0gZWxzZSBpZiAoaWNtcF8uQ29tcGFyZShmaWxlc1tpXS0+c21hbGxl
c3QsIGlrZXkpID4gMCkgeworICAgICAgICAvLyBFbnRpcmUgZmlsZSBpcyBhZnRlciAiaWtleSIs
IHNvIGlnbm9yZQorICAgICAgICBpZiAobGV2ZWwgPiAwKSB7CisgICAgICAgICAgLy8gRmlsZXMg
b3RoZXIgdGhhbiBsZXZlbCAwIGFyZSBzb3J0ZWQgYnkgbWV0YS0+c21hbGxlc3QsIHNvCisgICAg
ICAgICAgLy8gbm8gZnVydGhlciBmaWxlcyBpbiB0aGlzIGxldmVsIHdpbGwgY29udGFpbiBkYXRh
IGZvcgorICAgICAgICAgIC8vICJpa2V5Ii4KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gImlrZXkiIGZhbGxzIGluIHRoZSByYW5nZSBmb3Ig
dGhpcyB0YWJsZS4gIEFkZCB0aGUKKyAgICAgICAgLy8gYXBwcm94aW1hdGUgb2Zmc2V0IG9mICJp
a2V5IiB3aXRoaW4gdGhlIHRhYmxlLgorICAgICAgICBUYWJsZSogdGFibGVwdHI7CisgICAgICAg
IEl0ZXJhdG9yKiBpdGVyID0gdGFibGVfY2FjaGVfLT5OZXdJdGVyYXRvcigKKyAgICAgICAgICAg
IFJlYWRPcHRpb25zKCksIGZpbGVzW2ldLT5udW1iZXIsIGZpbGVzW2ldLT5maWxlX3NpemUsICZ0
YWJsZXB0cik7CisgICAgICAgIGlmICh0YWJsZXB0ciAhPSBOVUxMKSB7CisgICAgICAgICAgcmVz
dWx0ICs9IHRhYmxlcHRyLT5BcHByb3hpbWF0ZU9mZnNldE9mKGlrZXkuRW5jb2RlKCkpOworICAg
ICAgICB9CisgICAgICAgIGRlbGV0ZSBpdGVyOworICAgICAgfQorICAgIH0KKyAgfQorICByZXR1
cm4gcmVzdWx0OworfQorCit2b2lkIFZlcnNpb25TZXQ6OkFkZExpdmVGaWxlcyhzdGQ6OnNldDx1
aW50NjRfdD4qIGxpdmUpIHsKKyAgZm9yIChWZXJzaW9uKiB2ID0gZHVtbXlfdmVyc2lvbnNfLm5l
eHRfOworICAgICAgIHYgIT0gJmR1bW15X3ZlcnNpb25zXzsKKyAgICAgICB2ID0gdi0+bmV4dF8p
IHsKKyAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgY29uZmlnOjprTnVtTGV2ZWxzOyBs
ZXZlbCsrKSB7CisgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxGaWxlTWV0YURhdGEqPiYgZmlsZXMg
PSB2LT5maWxlc19bbGV2ZWxdOworICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxlcy5z
aXplKCk7IGkrKykgeworICAgICAgICBsaXZlLT5pbnNlcnQoZmlsZXNbaV0tPm51bWJlcik7Cisg
ICAgICB9CisgICAgfQorICB9Cit9CisKK2ludDY0X3QgVmVyc2lvblNldDo6TnVtTGV2ZWxCeXRl
cyhpbnQgbGV2ZWwpIGNvbnN0IHsKKyAgYXNzZXJ0KGxldmVsID49IDApOworICBhc3NlcnQobGV2
ZWwgPCBjb25maWc6OmtOdW1MZXZlbHMpOworICByZXR1cm4gVG90YWxGaWxlU2l6ZShjdXJyZW50
Xy0+ZmlsZXNfW2xldmVsXSk7Cit9CisKK2ludDY0X3QgVmVyc2lvblNldDo6TWF4TmV4dExldmVs
T3ZlcmxhcHBpbmdCeXRlcygpIHsKKyAgaW50NjRfdCByZXN1bHQgPSAwOworICBzdGQ6OnZlY3Rv
cjxGaWxlTWV0YURhdGEqPiBvdmVybGFwczsKKyAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8
IGNvbmZpZzo6a051bUxldmVscyAtIDE7IGxldmVsKyspIHsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGN1cnJlbnRfLT5maWxlc19bbGV2ZWxdLnNpemUoKTsgaSsrKSB7CisgICAgICBjb25z
dCBGaWxlTWV0YURhdGEqIGYgPSBjdXJyZW50Xy0+ZmlsZXNfW2xldmVsXVtpXTsKKyAgICAgIGN1
cnJlbnRfLT5HZXRPdmVybGFwcGluZ0lucHV0cyhsZXZlbCsxLCAmZi0+c21hbGxlc3QsICZmLT5s
YXJnZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvdmVybGFwcyk7
CisgICAgICBjb25zdCBpbnQ2NF90IHN1bSA9IFRvdGFsRmlsZVNpemUob3ZlcmxhcHMpOworICAg
ICAgaWYgKHN1bSA+IHJlc3VsdCkgeworICAgICAgICByZXN1bHQgPSBzdW07CisgICAgICB9Cisg
ICAgfQorICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKKy8vIFN0b3JlcyB0aGUgbWluaW1hbCBy
YW5nZSB0aGF0IGNvdmVycyBhbGwgZW50cmllcyBpbiBpbnB1dHMgaW4KKy8vICpzbWFsbGVzdCwg
Kmxhcmdlc3QuCisvLyBSRVFVSVJFUzogaW5wdXRzIGlzIG5vdCBlbXB0eQordm9pZCBWZXJzaW9u
U2V0OjpHZXRSYW5nZShjb25zdCBzdGQ6OnZlY3RvcjxGaWxlTWV0YURhdGEqPiYgaW5wdXRzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbEtleSogc21hbGxlc3QsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIEludGVybmFsS2V5KiBsYXJnZXN0KSB7CisgIGFzc2VydCghaW5w
dXRzLmVtcHR5KCkpOworICBzbWFsbGVzdC0+Q2xlYXIoKTsKKyAgbGFyZ2VzdC0+Q2xlYXIoKTsK
KyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbnB1dHMuc2l6ZSgpOyBpKyspIHsKKyAgICBGaWxl
TWV0YURhdGEqIGYgPSBpbnB1dHNbaV07CisgICAgaWYgKGkgPT0gMCkgeworICAgICAgKnNtYWxs
ZXN0ID0gZi0+c21hbGxlc3Q7CisgICAgICAqbGFyZ2VzdCA9IGYtPmxhcmdlc3Q7CisgICAgfSBl
bHNlIHsKKyAgICAgIGlmIChpY21wXy5Db21wYXJlKGYtPnNtYWxsZXN0LCAqc21hbGxlc3QpIDwg
MCkgeworICAgICAgICAqc21hbGxlc3QgPSBmLT5zbWFsbGVzdDsKKyAgICAgIH0KKyAgICAgIGlm
IChpY21wXy5Db21wYXJlKGYtPmxhcmdlc3QsICpsYXJnZXN0KSA+IDApIHsKKyAgICAgICAgKmxh
cmdlc3QgPSBmLT5sYXJnZXN0OworICAgICAgfQorICAgIH0KKyAgfQorfQorCisvLyBTdG9yZXMg
dGhlIG1pbmltYWwgcmFuZ2UgdGhhdCBjb3ZlcnMgYWxsIGVudHJpZXMgaW4gaW5wdXRzMSBhbmQg
aW5wdXRzMgorLy8gaW4gKnNtYWxsZXN0LCAqbGFyZ2VzdC4KKy8vIFJFUVVJUkVTOiBpbnB1dHMg
aXMgbm90IGVtcHR5Cit2b2lkIFZlcnNpb25TZXQ6OkdldFJhbmdlMihjb25zdCBzdGQ6OnZlY3Rv
cjxGaWxlTWV0YURhdGEqPiYgaW5wdXRzMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHN0ZDo6dmVjdG9yPEZpbGVNZXRhRGF0YSo+JiBpbnB1dHMyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgSW50ZXJuYWxLZXkqIHNtYWxsZXN0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgSW50ZXJuYWxLZXkqIGxhcmdlc3QpIHsKKyAgc3RkOjp2ZWN0b3I8RmlsZU1ldGFEYXRh
Kj4gYWxsID0gaW5wdXRzMTsKKyAgYWxsLmluc2VydChhbGwuZW5kKCksIGlucHV0czIuYmVnaW4o
KSwgaW5wdXRzMi5lbmQoKSk7CisgIEdldFJhbmdlKGFsbCwgc21hbGxlc3QsIGxhcmdlc3QpOwor
fQorCitJdGVyYXRvciogVmVyc2lvblNldDo6TWFrZUlucHV0SXRlcmF0b3IoQ29tcGFjdGlvbiog
YykgeworICBSZWFkT3B0aW9ucyBvcHRpb25zOworICBvcHRpb25zLnZlcmlmeV9jaGVja3N1bXMg
PSBvcHRpb25zXy0+cGFyYW5vaWRfY2hlY2tzOworICBvcHRpb25zLmZpbGxfY2FjaGUgPSBmYWxz
ZTsKKworICAvLyBMZXZlbC0wIGZpbGVzIGhhdmUgdG8gYmUgbWVyZ2VkIHRvZ2V0aGVyLiAgRm9y
IG90aGVyIGxldmVscywKKyAgLy8gd2Ugd2lsbCBtYWtlIGEgY29uY2F0ZW5hdGluZyBpdGVyYXRv
ciBwZXIgbGV2ZWwuCisgIC8vIFRPRE8ob3B0KTogdXNlIGNvbmNhdGVuYXRpbmcgaXRlcmF0b3Ig
Zm9yIGxldmVsLTAgaWYgdGhlcmUgaXMgbm8gb3ZlcmxhcAorICBjb25zdCBpbnQgc3BhY2UgPSAo
Yy0+bGV2ZWwoKSA9PSAwID8gYy0+aW5wdXRzX1swXS5zaXplKCkgKyAxIDogMik7CisgIEl0ZXJh
dG9yKiogbGlzdCA9IG5ldyBJdGVyYXRvcipbc3BhY2VdOworICBpbnQgbnVtID0gMDsKKyAgZm9y
IChpbnQgd2hpY2ggPSAwOyB3aGljaCA8IDI7IHdoaWNoKyspIHsKKyAgICBpZiAoIWMtPmlucHV0
c19bd2hpY2hdLmVtcHR5KCkpIHsKKyAgICAgIGlmIChjLT5sZXZlbCgpICsgd2hpY2ggPT0gMCkg
eworICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxGaWxlTWV0YURhdGEqPiYgZmlsZXMgPSBjLT5p
bnB1dHNfW3doaWNoXTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxlcy5zaXpl
KCk7IGkrKykgeworICAgICAgICAgIGxpc3RbbnVtKytdID0gdGFibGVfY2FjaGVfLT5OZXdJdGVy
YXRvcigKKyAgICAgICAgICAgICAgb3B0aW9ucywgZmlsZXNbaV0tPm51bWJlciwgZmlsZXNbaV0t
PmZpbGVfc2l6ZSk7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIC8vIENyZWF0
ZSBjb25jYXRlbmF0aW5nIGl0ZXJhdG9yIGZvciB0aGUgZmlsZXMgZnJvbSB0aGlzIGxldmVsCisg
ICAgICAgIGxpc3RbbnVtKytdID0gTmV3VHdvTGV2ZWxJdGVyYXRvcigKKyAgICAgICAgICAgIG5l
dyBWZXJzaW9uOjpMZXZlbEZpbGVOdW1JdGVyYXRvcihpY21wXywgJmMtPmlucHV0c19bd2hpY2hd
KSwKKyAgICAgICAgICAgICZHZXRGaWxlSXRlcmF0b3IsIHRhYmxlX2NhY2hlXywgb3B0aW9ucyk7
CisgICAgICB9CisgICAgfQorICB9CisgIGFzc2VydChudW0gPD0gc3BhY2UpOworICBJdGVyYXRv
ciogcmVzdWx0ID0gTmV3TWVyZ2luZ0l0ZXJhdG9yKCZpY21wXywgbGlzdCwgbnVtKTsKKyAgZGVs
ZXRlW10gbGlzdDsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworQ29tcGFjdGlvbiogVmVyc2lvblNl
dDo6UGlja0NvbXBhY3Rpb24oKSB7CisgIENvbXBhY3Rpb24qIGM7CisgIGludCBsZXZlbDsKKwor
ICAvLyBXZSBwcmVmZXIgY29tcGFjdGlvbnMgdHJpZ2dlcmVkIGJ5IHRvbyBtdWNoIGRhdGEgaW4g
YSBsZXZlbCBvdmVyCisgIC8vIHRoZSBjb21wYWN0aW9ucyB0cmlnZ2VyZWQgYnkgc2Vla3MuCisg
IGNvbnN0IGJvb2wgc2l6ZV9jb21wYWN0aW9uID0gKGN1cnJlbnRfLT5jb21wYWN0aW9uX3Njb3Jl
XyA+PSAxKTsKKyAgY29uc3QgYm9vbCBzZWVrX2NvbXBhY3Rpb24gPSAoY3VycmVudF8tPmZpbGVf
dG9fY29tcGFjdF8gIT0gTlVMTCk7CisgIGlmIChzaXplX2NvbXBhY3Rpb24pIHsKKyAgICBsZXZl
bCA9IGN1cnJlbnRfLT5jb21wYWN0aW9uX2xldmVsXzsKKyAgICBhc3NlcnQobGV2ZWwgPj0gMCk7
CisgICAgYXNzZXJ0KGxldmVsKzEgPCBjb25maWc6OmtOdW1MZXZlbHMpOworICAgIGMgPSBuZXcg
Q29tcGFjdGlvbihsZXZlbCk7CisKKyAgICAvLyBQaWNrIHRoZSBmaXJzdCBmaWxlIHRoYXQgY29t
ZXMgYWZ0ZXIgY29tcGFjdF9wb2ludGVyX1tsZXZlbF0KKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGN1cnJlbnRfLT5maWxlc19bbGV2ZWxdLnNpemUoKTsgaSsrKSB7CisgICAgICBGaWxlTWV0
YURhdGEqIGYgPSBjdXJyZW50Xy0+ZmlsZXNfW2xldmVsXVtpXTsKKyAgICAgIGlmIChjb21wYWN0
X3BvaW50ZXJfW2xldmVsXS5lbXB0eSgpIHx8CisgICAgICAgICAgaWNtcF8uQ29tcGFyZShmLT5s
YXJnZXN0LkVuY29kZSgpLCBjb21wYWN0X3BvaW50ZXJfW2xldmVsXSkgPiAwKSB7CisgICAgICAg
IGMtPmlucHV0c19bMF0ucHVzaF9iYWNrKGYpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAg
ICB9CisgICAgaWYgKGMtPmlucHV0c19bMF0uZW1wdHkoKSkgeworICAgICAgLy8gV3JhcC1hcm91
bmQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUga2V5IHNwYWNlCisgICAgICBjLT5pbnB1dHNfWzBd
LnB1c2hfYmFjayhjdXJyZW50Xy0+ZmlsZXNfW2xldmVsXVswXSk7CisgICAgfQorICB9IGVsc2Ug
aWYgKHNlZWtfY29tcGFjdGlvbikgeworICAgIGxldmVsID0gY3VycmVudF8tPmZpbGVfdG9fY29t
cGFjdF9sZXZlbF87CisgICAgYyA9IG5ldyBDb21wYWN0aW9uKGxldmVsKTsKKyAgICBjLT5pbnB1
dHNfWzBdLnB1c2hfYmFjayhjdXJyZW50Xy0+ZmlsZV90b19jb21wYWN0Xyk7CisgIH0gZWxzZSB7
CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICBjLT5pbnB1dF92ZXJzaW9uXyA9IGN1cnJlbnRf
OworICBjLT5pbnB1dF92ZXJzaW9uXy0+UmVmKCk7CisKKyAgLy8gRmlsZXMgaW4gbGV2ZWwgMCBt
YXkgb3ZlcmxhcCBlYWNoIG90aGVyLCBzbyBwaWNrIHVwIGFsbCBvdmVybGFwcGluZyBvbmVzCisg
IGlmIChsZXZlbCA9PSAwKSB7CisgICAgSW50ZXJuYWxLZXkgc21hbGxlc3QsIGxhcmdlc3Q7Cisg
ICAgR2V0UmFuZ2UoYy0+aW5wdXRzX1swXSwgJnNtYWxsZXN0LCAmbGFyZ2VzdCk7CisgICAgLy8g
Tm90ZSB0aGF0IHRoZSBuZXh0IGNhbGwgd2lsbCBkaXNjYXJkIHRoZSBmaWxlIHdlIHBsYWNlZCBp
bgorICAgIC8vIGMtPmlucHV0c19bMF0gZWFybGllciBhbmQgcmVwbGFjZSBpdCB3aXRoIGFuIG92
ZXJsYXBwaW5nIHNldAorICAgIC8vIHdoaWNoIHdpbGwgaW5jbHVkZSB0aGUgcGlja2VkIGZpbGUu
CisgICAgY3VycmVudF8tPkdldE92ZXJsYXBwaW5nSW5wdXRzKDAsICZzbWFsbGVzdCwgJmxhcmdl
c3QsICZjLT5pbnB1dHNfWzBdKTsKKyAgICBhc3NlcnQoIWMtPmlucHV0c19bMF0uZW1wdHkoKSk7
CisgIH0KKworICBTZXR1cE90aGVySW5wdXRzKGMpOworCisgIHJldHVybiBjOworfQorCit2b2lk
IFZlcnNpb25TZXQ6OlNldHVwT3RoZXJJbnB1dHMoQ29tcGFjdGlvbiogYykgeworICBjb25zdCBp
bnQgbGV2ZWwgPSBjLT5sZXZlbCgpOworICBJbnRlcm5hbEtleSBzbWFsbGVzdCwgbGFyZ2VzdDsK
KyAgR2V0UmFuZ2UoYy0+aW5wdXRzX1swXSwgJnNtYWxsZXN0LCAmbGFyZ2VzdCk7CisKKyAgY3Vy
cmVudF8tPkdldE92ZXJsYXBwaW5nSW5wdXRzKGxldmVsKzEsICZzbWFsbGVzdCwgJmxhcmdlc3Qs
ICZjLT5pbnB1dHNfWzFdKTsKKworICAvLyBHZXQgZW50aXJlIHJhbmdlIGNvdmVyZWQgYnkgY29t
cGFjdGlvbgorICBJbnRlcm5hbEtleSBhbGxfc3RhcnQsIGFsbF9saW1pdDsKKyAgR2V0UmFuZ2Uy
KGMtPmlucHV0c19bMF0sIGMtPmlucHV0c19bMV0sICZhbGxfc3RhcnQsICZhbGxfbGltaXQpOwor
CisgIC8vIFNlZSBpZiB3ZSBjYW4gZ3JvdyB0aGUgbnVtYmVyIG9mIGlucHV0cyBpbiAibGV2ZWwi
IHdpdGhvdXQKKyAgLy8gY2hhbmdpbmcgdGhlIG51bWJlciBvZiAibGV2ZWwrMSIgZmlsZXMgd2Ug
cGljayB1cC4KKyAgaWYgKCFjLT5pbnB1dHNfWzFdLmVtcHR5KCkpIHsKKyAgICBzdGQ6OnZlY3Rv
cjxGaWxlTWV0YURhdGEqPiBleHBhbmRlZDA7CisgICAgY3VycmVudF8tPkdldE92ZXJsYXBwaW5n
SW5wdXRzKGxldmVsLCAmYWxsX3N0YXJ0LCAmYWxsX2xpbWl0LCAmZXhwYW5kZWQwKTsKKyAgICBj
b25zdCBpbnQ2NF90IGlucHV0czBfc2l6ZSA9IFRvdGFsRmlsZVNpemUoYy0+aW5wdXRzX1swXSk7
CisgICAgY29uc3QgaW50NjRfdCBpbnB1dHMxX3NpemUgPSBUb3RhbEZpbGVTaXplKGMtPmlucHV0
c19bMV0pOworICAgIGNvbnN0IGludDY0X3QgZXhwYW5kZWQwX3NpemUgPSBUb3RhbEZpbGVTaXpl
KGV4cGFuZGVkMCk7CisgICAgaWYgKGV4cGFuZGVkMC5zaXplKCkgPiBjLT5pbnB1dHNfWzBdLnNp
emUoKSAmJgorICAgICAgICBpbnB1dHMxX3NpemUgKyBleHBhbmRlZDBfc2l6ZSA8IGtFeHBhbmRl
ZENvbXBhY3Rpb25CeXRlU2l6ZUxpbWl0KSB7CisgICAgICBJbnRlcm5hbEtleSBuZXdfc3RhcnQs
IG5ld19saW1pdDsKKyAgICAgIEdldFJhbmdlKGV4cGFuZGVkMCwgJm5ld19zdGFydCwgJm5ld19s
aW1pdCk7CisgICAgICBzdGQ6OnZlY3RvcjxGaWxlTWV0YURhdGEqPiBleHBhbmRlZDE7CisgICAg
ICBjdXJyZW50Xy0+R2V0T3ZlcmxhcHBpbmdJbnB1dHMobGV2ZWwrMSwgJm5ld19zdGFydCwgJm5l
d19saW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXhwYW5kZWQx
KTsKKyAgICAgIGlmIChleHBhbmRlZDEuc2l6ZSgpID09IGMtPmlucHV0c19bMV0uc2l6ZSgpKSB7
CisgICAgICAgIExvZyhvcHRpb25zXy0+aW5mb19sb2csCisgICAgICAgICAgICAiRXhwYW5kaW5n
QCVkICVkKyVkICglbGQrJWxkIGJ5dGVzKSB0byAlZCslZCAoJWxkKyVsZCBieXRlcylcbiIsCisg
ICAgICAgICAgICBsZXZlbCwKKyAgICAgICAgICAgIGludChjLT5pbnB1dHNfWzBdLnNpemUoKSks
CisgICAgICAgICAgICBpbnQoYy0+aW5wdXRzX1sxXS5zaXplKCkpLAorICAgICAgICAgICAgbG9u
ZyhpbnB1dHMwX3NpemUpLCBsb25nKGlucHV0czFfc2l6ZSksCisgICAgICAgICAgICBpbnQoZXhw
YW5kZWQwLnNpemUoKSksCisgICAgICAgICAgICBpbnQoZXhwYW5kZWQxLnNpemUoKSksCisgICAg
ICAgICAgICBsb25nKGV4cGFuZGVkMF9zaXplKSwgbG9uZyhpbnB1dHMxX3NpemUpKTsKKyAgICAg
ICAgc21hbGxlc3QgPSBuZXdfc3RhcnQ7CisgICAgICAgIGxhcmdlc3QgPSBuZXdfbGltaXQ7Cisg
ICAgICAgIGMtPmlucHV0c19bMF0gPSBleHBhbmRlZDA7CisgICAgICAgIGMtPmlucHV0c19bMV0g
PSBleHBhbmRlZDE7CisgICAgICAgIEdldFJhbmdlMihjLT5pbnB1dHNfWzBdLCBjLT5pbnB1dHNf
WzFdLCAmYWxsX3N0YXJ0LCAmYWxsX2xpbWl0KTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICAv
LyBDb21wdXRlIHRoZSBzZXQgb2YgZ3JhbmRwYXJlbnQgZmlsZXMgdGhhdCBvdmVybGFwIHRoaXMg
Y29tcGFjdGlvbgorICAvLyAocGFyZW50ID09IGxldmVsKzE7IGdyYW5kcGFyZW50ID09IGxldmVs
KzIpCisgIGlmIChsZXZlbCArIDIgPCBjb25maWc6OmtOdW1MZXZlbHMpIHsKKyAgICBjdXJyZW50
Xy0+R2V0T3ZlcmxhcHBpbmdJbnB1dHMobGV2ZWwgKyAyLCAmYWxsX3N0YXJ0LCAmYWxsX2xpbWl0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYy0+Z3JhbmRwYXJlbnRzXyk7
CisgIH0KKworICBpZiAoZmFsc2UpIHsKKyAgICBMb2cob3B0aW9uc18tPmluZm9fbG9nLCAiQ29t
cGFjdGluZyAlZCAnJXMnIC4uICclcyciLAorICAgICAgICBsZXZlbCwKKyAgICAgICAgc21hbGxl
c3QuRGVidWdTdHJpbmcoKS5jX3N0cigpLAorICAgICAgICBsYXJnZXN0LkRlYnVnU3RyaW5nKCku
Y19zdHIoKSk7CisgIH0KKworICAvLyBVcGRhdGUgdGhlIHBsYWNlIHdoZXJlIHdlIHdpbGwgZG8g
dGhlIG5leHQgY29tcGFjdGlvbiBmb3IgdGhpcyBsZXZlbC4KKyAgLy8gV2UgdXBkYXRlIHRoaXMg
aW1tZWRpYXRlbHkgaW5zdGVhZCBvZiB3YWl0aW5nIGZvciB0aGUgVmVyc2lvbkVkaXQKKyAgLy8g
dG8gYmUgYXBwbGllZCBzbyB0aGF0IGlmIHRoZSBjb21wYWN0aW9uIGZhaWxzLCB3ZSB3aWxsIHRy
eSBhIGRpZmZlcmVudAorICAvLyBrZXkgcmFuZ2UgbmV4dCB0aW1lLgorICBjb21wYWN0X3BvaW50
ZXJfW2xldmVsXSA9IGxhcmdlc3QuRW5jb2RlKCkuVG9TdHJpbmcoKTsKKyAgYy0+ZWRpdF8uU2V0
Q29tcGFjdFBvaW50ZXIobGV2ZWwsIGxhcmdlc3QpOworfQorCitDb21wYWN0aW9uKiBWZXJzaW9u
U2V0OjpDb21wYWN0UmFuZ2UoCisgICAgaW50IGxldmVsLAorICAgIGNvbnN0IEludGVybmFsS2V5
KiBiZWdpbiwKKyAgICBjb25zdCBJbnRlcm5hbEtleSogZW5kKSB7CisgIHN0ZDo6dmVjdG9yPEZp
bGVNZXRhRGF0YSo+IGlucHV0czsKKyAgY3VycmVudF8tPkdldE92ZXJsYXBwaW5nSW5wdXRzKGxl
dmVsLCBiZWdpbiwgZW5kLCAmaW5wdXRzKTsKKyAgaWYgKGlucHV0cy5lbXB0eSgpKSB7CisgICAg
cmV0dXJuIE5VTEw7CisgIH0KKworICAvLyBBdm9pZCBjb21wYWN0aW5nIHRvbyBtdWNoIGluIG9u
ZSBzaG90IGluIGNhc2UgdGhlIHJhbmdlIGlzIGxhcmdlLgorICBjb25zdCB1aW50NjRfdCBsaW1p
dCA9IE1heEZpbGVTaXplRm9yTGV2ZWwobGV2ZWwpOworICB1aW50NjRfdCB0b3RhbCA9IDA7Cisg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5wdXRzLnNpemUoKTsgaSsrKSB7CisgICAgdWludDY0
X3QgcyA9IGlucHV0c1tpXS0+ZmlsZV9zaXplOworICAgIHRvdGFsICs9IHM7CisgICAgaWYgKHRv
dGFsID49IGxpbWl0KSB7CisgICAgICBpbnB1dHMucmVzaXplKGkgKyAxKTsKKyAgICAgIGJyZWFr
OworICAgIH0KKyAgfQorCisgIENvbXBhY3Rpb24qIGMgPSBuZXcgQ29tcGFjdGlvbihsZXZlbCk7
CisgIGMtPmlucHV0X3ZlcnNpb25fID0gY3VycmVudF87CisgIGMtPmlucHV0X3ZlcnNpb25fLT5S
ZWYoKTsKKyAgYy0+aW5wdXRzX1swXSA9IGlucHV0czsKKyAgU2V0dXBPdGhlcklucHV0cyhjKTsK
KyAgcmV0dXJuIGM7Cit9CisKK0NvbXBhY3Rpb246OkNvbXBhY3Rpb24oaW50IGxldmVsKQorICAg
IDogbGV2ZWxfKGxldmVsKSwKKyAgICAgIG1heF9vdXRwdXRfZmlsZV9zaXplXyhNYXhGaWxlU2l6
ZUZvckxldmVsKGxldmVsKSksCisgICAgICBpbnB1dF92ZXJzaW9uXyhOVUxMKSwKKyAgICAgIGdy
YW5kcGFyZW50X2luZGV4XygwKSwKKyAgICAgIHNlZW5fa2V5XyhmYWxzZSksCisgICAgICBvdmVy
bGFwcGVkX2J5dGVzXygwKSB7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgY29uZmlnOjprTnVtTGV2
ZWxzOyBpKyspIHsKKyAgICBsZXZlbF9wdHJzX1tpXSA9IDA7CisgIH0KK30KKworQ29tcGFjdGlv
bjo6fkNvbXBhY3Rpb24oKSB7CisgIGlmIChpbnB1dF92ZXJzaW9uXyAhPSBOVUxMKSB7CisgICAg
aW5wdXRfdmVyc2lvbl8tPlVucmVmKCk7CisgIH0KK30KKworYm9vbCBDb21wYWN0aW9uOjpJc1Ry
aXZpYWxNb3ZlKCkgY29uc3QgeworICAvLyBBdm9pZCBhIG1vdmUgaWYgdGhlcmUgaXMgbG90cyBv
ZiBvdmVybGFwcGluZyBncmFuZHBhcmVudCBkYXRhLgorICAvLyBPdGhlcndpc2UsIHRoZSBtb3Zl
IGNvdWxkIGNyZWF0ZSBhIHBhcmVudCBmaWxlIHRoYXQgd2lsbCByZXF1aXJlCisgIC8vIGEgdmVy
eSBleHBlbnNpdmUgbWVyZ2UgbGF0ZXIgb24uCisgIHJldHVybiAobnVtX2lucHV0X2ZpbGVzKDAp
ID09IDEgJiYKKyAgICAgICAgICBudW1faW5wdXRfZmlsZXMoMSkgPT0gMCAmJgorICAgICAgICAg
IFRvdGFsRmlsZVNpemUoZ3JhbmRwYXJlbnRzXykgPD0ga01heEdyYW5kUGFyZW50T3ZlcmxhcEJ5
dGVzKTsKK30KKwordm9pZCBDb21wYWN0aW9uOjpBZGRJbnB1dERlbGV0aW9ucyhWZXJzaW9uRWRp
dCogZWRpdCkgeworICBmb3IgKGludCB3aGljaCA9IDA7IHdoaWNoIDwgMjsgd2hpY2grKykgewor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5wdXRzX1t3aGljaF0uc2l6ZSgpOyBpKyspIHsK
KyAgICAgIGVkaXQtPkRlbGV0ZUZpbGUobGV2ZWxfICsgd2hpY2gsIGlucHV0c19bd2hpY2hdW2ld
LT5udW1iZXIpOworICAgIH0KKyAgfQorfQorCitib29sIENvbXBhY3Rpb246OklzQmFzZUxldmVs
Rm9yS2V5KGNvbnN0IFNsaWNlJiB1c2VyX2tleSkgeworICAvLyBNYXliZSB1c2UgYmluYXJ5IHNl
YXJjaCB0byBmaW5kIHJpZ2h0IGVudHJ5IGluc3RlYWQgb2YgbGluZWFyIHNlYXJjaD8KKyAgY29u
c3QgQ29tcGFyYXRvciogdXNlcl9jbXAgPSBpbnB1dF92ZXJzaW9uXy0+dnNldF8tPmljbXBfLnVz
ZXJfY29tcGFyYXRvcigpOworICBmb3IgKGludCBsdmwgPSBsZXZlbF8gKyAyOyBsdmwgPCBjb25m
aWc6OmtOdW1MZXZlbHM7IGx2bCsrKSB7CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8RmlsZU1ldGFE
YXRhKj4mIGZpbGVzID0gaW5wdXRfdmVyc2lvbl8tPmZpbGVzX1tsdmxdOworICAgIGZvciAoOyBs
ZXZlbF9wdHJzX1tsdmxdIDwgZmlsZXMuc2l6ZSgpOyApIHsKKyAgICAgIEZpbGVNZXRhRGF0YSog
ZiA9IGZpbGVzW2xldmVsX3B0cnNfW2x2bF1dOworICAgICAgaWYgKHVzZXJfY21wLT5Db21wYXJl
KHVzZXJfa2V5LCBmLT5sYXJnZXN0LnVzZXJfa2V5KCkpIDw9IDApIHsKKyAgICAgICAgLy8gV2Un
dmUgYWR2YW5jZWQgZmFyIGVub3VnaAorICAgICAgICBpZiAodXNlcl9jbXAtPkNvbXBhcmUodXNl
cl9rZXksIGYtPnNtYWxsZXN0LnVzZXJfa2V5KCkpID49IDApIHsKKyAgICAgICAgICAvLyBLZXkg
ZmFsbHMgaW4gdGhpcyBmaWxlJ3MgcmFuZ2UsIHNvIGRlZmluaXRlbHkgbm90IGJhc2UgbGV2ZWwK
KyAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
ICB9CisgICAgICBsZXZlbF9wdHJzX1tsdmxdKys7CisgICAgfQorICB9CisgIHJldHVybiB0cnVl
OworfQorCitib29sIENvbXBhY3Rpb246OlNob3VsZFN0b3BCZWZvcmUoY29uc3QgU2xpY2UmIGlu
dGVybmFsX2tleSkgeworICAvLyBTY2FuIHRvIGZpbmQgZWFybGllc3QgZ3JhbmRwYXJlbnQgZmls
ZSB0aGF0IGNvbnRhaW5zIGtleS4KKyAgY29uc3QgSW50ZXJuYWxLZXlDb21wYXJhdG9yKiBpY21w
ID0gJmlucHV0X3ZlcnNpb25fLT52c2V0Xy0+aWNtcF87CisgIHdoaWxlIChncmFuZHBhcmVudF9p
bmRleF8gPCBncmFuZHBhcmVudHNfLnNpemUoKSAmJgorICAgICAgaWNtcC0+Q29tcGFyZShpbnRl
cm5hbF9rZXksCisgICAgICAgICAgICAgICAgICAgIGdyYW5kcGFyZW50c19bZ3JhbmRwYXJlbnRf
aW5kZXhfXS0+bGFyZ2VzdC5FbmNvZGUoKSkgPiAwKSB7CisgICAgaWYgKHNlZW5fa2V5Xykgewor
ICAgICAgb3ZlcmxhcHBlZF9ieXRlc18gKz0gZ3JhbmRwYXJlbnRzX1tncmFuZHBhcmVudF9pbmRl
eF9dLT5maWxlX3NpemU7CisgICAgfQorICAgIGdyYW5kcGFyZW50X2luZGV4XysrOworICB9Cisg
IHNlZW5fa2V5XyA9IHRydWU7CisKKyAgaWYgKG92ZXJsYXBwZWRfYnl0ZXNfID4ga01heEdyYW5k
UGFyZW50T3ZlcmxhcEJ5dGVzKSB7CisgICAgLy8gVG9vIG11Y2ggb3ZlcmxhcCBmb3IgY3VycmVu
dCBvdXRwdXQ7IHN0YXJ0IG5ldyBvdXRwdXQKKyAgICBvdmVybGFwcGVkX2J5dGVzXyA9IDA7Cisg
ICAgcmV0dXJuIHRydWU7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9Cit9CisK
K3ZvaWQgQ29tcGFjdGlvbjo6UmVsZWFzZUlucHV0cygpIHsKKyAgaWYgKGlucHV0X3ZlcnNpb25f
ICE9IE5VTEwpIHsKKyAgICBpbnB1dF92ZXJzaW9uXy0+VW5yZWYoKTsKKyAgICBpbnB1dF92ZXJz
aW9uXyA9IE5VTEw7CisgIH0KK30KKworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvdmVyc2lvbl9zZXQuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xldmVsZGIvZGIvdmVyc2lvbl9zZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZDA4NGZkYjdk
MDA1NzRjNjI3MjkxYjFhNDhlMDU5YTgwOTNkNWI0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvbGV2ZWxkYi9kYi92ZXJzaW9uX3NldC5oCkBAIC0wLDAgKzEsMzgzIEBACisv
LyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNl
ZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCisvLworLy8gVGhl
IHJlcHJlc2VudGF0aW9uIG9mIGEgREJJbXBsIGNvbnNpc3RzIG9mIGEgc2V0IG9mIFZlcnNpb25z
LiAgVGhlCisvLyBuZXdlc3QgdmVyc2lvbiBpcyBjYWxsZWQgImN1cnJlbnQiLiAgT2xkZXIgdmVy
c2lvbnMgbWF5IGJlIGtlcHQKKy8vIGFyb3VuZCB0byBwcm92aWRlIGEgY29uc2lzdGVudCB2aWV3
IHRvIGxpdmUgaXRlcmF0b3JzLgorLy8KKy8vIEVhY2ggVmVyc2lvbiBrZWVwcyB0cmFjayBvZiBh
IHNldCBvZiBUYWJsZSBmaWxlcyBwZXIgbGV2ZWwuICBUaGUKKy8vIGVudGlyZSBzZXQgb2YgdmVy
c2lvbnMgaXMgbWFpbnRhaW5lZCBpbiBhIFZlcnNpb25TZXQuCisvLworLy8gVmVyc2lvbixWZXJz
aW9uU2V0IGFyZSB0aHJlYWQtY29tcGF0aWJsZSwgYnV0IHJlcXVpcmUgZXh0ZXJuYWwKKy8vIHN5
bmNocm9uaXphdGlvbiBvbiBhbGwgYWNjZXNzZXMuCisKKyNpZm5kZWYgU1RPUkFHRV9MRVZFTERC
X0RCX1ZFUlNJT05fU0VUX0hfCisjZGVmaW5lIFNUT1JBR0VfTEVWRUxEQl9EQl9WRVJTSU9OX1NF
VF9IXworCisjaW5jbHVkZSA8bWFwPgorI2luY2x1ZGUgPHNldD4KKyNpbmNsdWRlIDx2ZWN0b3I+
CisjaW5jbHVkZSAiZGIvZGJmb3JtYXQuaCIKKyNpbmNsdWRlICJkYi92ZXJzaW9uX2VkaXQuaCIK
KyNpbmNsdWRlICJwb3J0L3BvcnQuaCIKKyNpbmNsdWRlICJwb3J0L3RocmVhZF9hbm5vdGF0aW9u
cy5oIgorCituYW1lc3BhY2UgbGV2ZWxkYiB7CisKK25hbWVzcGFjZSBsb2cgeyBjbGFzcyBXcml0
ZXI7IH0KKworY2xhc3MgQ29tcGFjdGlvbjsKK2NsYXNzIEl0ZXJhdG9yOworY2xhc3MgTWVtVGFi
bGU7CitjbGFzcyBUYWJsZUJ1aWxkZXI7CitjbGFzcyBUYWJsZUNhY2hlOworY2xhc3MgVmVyc2lv
bjsKK2NsYXNzIFZlcnNpb25TZXQ7CitjbGFzcyBXcml0YWJsZUZpbGU7CisKKy8vIFJldHVybiB0
aGUgc21hbGxlc3QgaW5kZXggaSBzdWNoIHRoYXQgZmlsZXNbaV0tPmxhcmdlc3QgPj0ga2V5Lgor
Ly8gUmV0dXJuIGZpbGVzLnNpemUoKSBpZiB0aGVyZSBpcyBubyBzdWNoIGZpbGUuCisvLyBSRVFV
SVJFUzogImZpbGVzIiBjb250YWlucyBhIHNvcnRlZCBsaXN0IG9mIG5vbi1vdmVybGFwcGluZyBm
aWxlcy4KK2V4dGVybiBpbnQgRmluZEZpbGUoY29uc3QgSW50ZXJuYWxLZXlDb21wYXJhdG9yJiBp
Y21wLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxGaWxlTWV0YURhdGEq
PiYgZmlsZXMsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNsaWNlJiBrZXkpOworCisvLyBS
ZXR1cm5zIHRydWUgaWZmIHNvbWUgZmlsZSBpbiAiZmlsZXMiIG92ZXJsYXBzIHRoZSB1c2VyIGtl
eSByYW5nZQorLy8gWypzbWFsbGVzdCwqbGFyZ2VzdF0uCisvLyBzbWFsbGVzdD09TlVMTCByZXBy
ZXNlbnRzIGEga2V5IHNtYWxsZXIgdGhhbiBhbGwga2V5cyBpbiB0aGUgREIuCisvLyBsYXJnZXN0
PT1OVUxMIHJlcHJlc2VudHMgYSBrZXkgbGFyZ2VzdCB0aGFuIGFsbCBrZXlzIGluIHRoZSBEQi4K
Ky8vIFJFUVVJUkVTOiBJZiBkaXNqb2ludF9zb3J0ZWRfZmlsZXMsIGZpbGVzW10gY29udGFpbnMg
ZGlzam9pbnQgcmFuZ2VzCisvLyAgICAgICAgICAgaW4gc29ydGVkIG9yZGVyLgorZXh0ZXJuIGJv
b2wgU29tZUZpbGVPdmVybGFwc1JhbmdlKAorICAgIGNvbnN0IEludGVybmFsS2V5Q29tcGFyYXRv
ciYgaWNtcCwKKyAgICBib29sIGRpc2pvaW50X3NvcnRlZF9maWxlcywKKyAgICBjb25zdCBzdGQ6
OnZlY3RvcjxGaWxlTWV0YURhdGEqPiYgZmlsZXMsCisgICAgY29uc3QgU2xpY2UqIHNtYWxsZXN0
X3VzZXJfa2V5LAorICAgIGNvbnN0IFNsaWNlKiBsYXJnZXN0X3VzZXJfa2V5KTsKKworY2xhc3Mg
VmVyc2lvbiB7CisgcHVibGljOgorICAvLyBBcHBlbmQgdG8gKml0ZXJzIGEgc2VxdWVuY2Ugb2Yg
aXRlcmF0b3JzIHRoYXQgd2lsbAorICAvLyB5aWVsZCB0aGUgY29udGVudHMgb2YgdGhpcyBWZXJz
aW9uIHdoZW4gbWVyZ2VkIHRvZ2V0aGVyLgorICAvLyBSRVFVSVJFUzogVGhpcyB2ZXJzaW9uIGhh
cyBiZWVuIHNhdmVkIChzZWUgVmVyc2lvblNldDo6U2F2ZVRvKQorICB2b2lkIEFkZEl0ZXJhdG9y
cyhjb25zdCBSZWFkT3B0aW9ucyYsIHN0ZDo6dmVjdG9yPEl0ZXJhdG9yKj4qIGl0ZXJzKTsKKwor
ICAvLyBMb29rdXAgdGhlIHZhbHVlIGZvciBrZXkuICBJZiBmb3VuZCwgc3RvcmUgaXQgaW4gKnZh
bCBhbmQKKyAgLy8gcmV0dXJuIE9LLiAgRWxzZSByZXR1cm4gYSBub24tT0sgc3RhdHVzLiAgRmls
bHMgKnN0YXRzLgorICAvLyBSRVFVSVJFUzogbG9jayBpcyBub3QgaGVsZAorICBzdHJ1Y3QgR2V0
U3RhdHMgeworICAgIEZpbGVNZXRhRGF0YSogc2Vla19maWxlOworICAgIGludCBzZWVrX2ZpbGVf
bGV2ZWw7CisgIH07CisgIFN0YXR1cyBHZXQoY29uc3QgUmVhZE9wdGlvbnMmLCBjb25zdCBMb29r
dXBLZXkmIGtleSwgc3RkOjpzdHJpbmcqIHZhbCwKKyAgICAgICAgICAgICBHZXRTdGF0cyogc3Rh
dHMpOworCisgIC8vIEFkZHMgInN0YXRzIiBpbnRvIHRoZSBjdXJyZW50IHN0YXRlLiAgUmV0dXJu
cyB0cnVlIGlmIGEgbmV3CisgIC8vIGNvbXBhY3Rpb24gbWF5IG5lZWQgdG8gYmUgdHJpZ2dlcmVk
LCBmYWxzZSBvdGhlcndpc2UuCisgIC8vIFJFUVVJUkVTOiBsb2NrIGlzIGhlbGQKKyAgYm9vbCBV
cGRhdGVTdGF0cyhjb25zdCBHZXRTdGF0cyYgc3RhdHMpOworCisgIC8vIFJlZmVyZW5jZSBjb3Vu
dCBtYW5hZ2VtZW50IChzbyBWZXJzaW9ucyBkbyBub3QgZGlzYXBwZWFyIG91dCBmcm9tCisgIC8v
IHVuZGVyIGxpdmUgaXRlcmF0b3JzKQorICB2b2lkIFJlZigpOworICB2b2lkIFVucmVmKCk7CisK
KyAgdm9pZCBHZXRPdmVybGFwcGluZ0lucHV0cygKKyAgICAgIGludCBsZXZlbCwKKyAgICAgIGNv
bnN0IEludGVybmFsS2V5KiBiZWdpbiwgICAgICAgICAvLyBOVUxMIG1lYW5zIGJlZm9yZSBhbGwg
a2V5cworICAgICAgY29uc3QgSW50ZXJuYWxLZXkqIGVuZCwgICAgICAgICAgIC8vIE5VTEwgbWVh
bnMgYWZ0ZXIgYWxsIGtleXMKKyAgICAgIHN0ZDo6dmVjdG9yPEZpbGVNZXRhRGF0YSo+KiBpbnB1
dHMpOworCisgIC8vIFJldHVybnMgdHJ1ZSBpZmYgc29tZSBmaWxlIGluIHRoZSBzcGVjaWZpZWQg
bGV2ZWwgb3ZlcmxhcHMKKyAgLy8gc29tZSBwYXJ0IG9mIFsqc21hbGxlc3RfdXNlcl9rZXksKmxh
cmdlc3RfdXNlcl9rZXldLgorICAvLyBzbWFsbGVzdF91c2VyX2tleT09TlVMTCByZXByZXNlbnRz
IGEga2V5IHNtYWxsZXIgdGhhbiBhbGwga2V5cyBpbiB0aGUgREIuCisgIC8vIGxhcmdlc3RfdXNl
cl9rZXk9PU5VTEwgcmVwcmVzZW50cyBhIGtleSBsYXJnZXN0IHRoYW4gYWxsIGtleXMgaW4gdGhl
IERCLgorICBib29sIE92ZXJsYXBJbkxldmVsKGludCBsZXZlbCwKKyAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBTbGljZSogc21hbGxlc3RfdXNlcl9rZXksCisgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgU2xpY2UqIGxhcmdlc3RfdXNlcl9rZXkpOworCisgIC8vIFJldHVybiB0aGUgbGV2
ZWwgYXQgd2hpY2ggd2Ugc2hvdWxkIHBsYWNlIGEgbmV3IG1lbXRhYmxlIGNvbXBhY3Rpb24KKyAg
Ly8gcmVzdWx0IHRoYXQgY292ZXJzIHRoZSByYW5nZSBbc21hbGxlc3RfdXNlcl9rZXksbGFyZ2Vz
dF91c2VyX2tleV0uCisgIGludCBQaWNrTGV2ZWxGb3JNZW1UYWJsZU91dHB1dChjb25zdCBTbGlj
ZSYgc21hbGxlc3RfdXNlcl9rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBTbGljZSYgbGFyZ2VzdF91c2VyX2tleSk7CisKKyAgaW50IE51bUZpbGVzKGludCBsZXZl
bCkgY29uc3QgeyByZXR1cm4gZmlsZXNfW2xldmVsXS5zaXplKCk7IH0KKworICAvLyBSZXR1cm4g
YSBodW1hbiByZWFkYWJsZSBzdHJpbmcgdGhhdCBkZXNjcmliZXMgdGhpcyB2ZXJzaW9uJ3MgY29u
dGVudHMuCisgIHN0ZDo6c3RyaW5nIERlYnVnU3RyaW5nKCkgY29uc3Q7CisKKyBwcml2YXRlOgor
ICBmcmllbmQgY2xhc3MgQ29tcGFjdGlvbjsKKyAgZnJpZW5kIGNsYXNzIFZlcnNpb25TZXQ7CisK
KyAgY2xhc3MgTGV2ZWxGaWxlTnVtSXRlcmF0b3I7CisgIEl0ZXJhdG9yKiBOZXdDb25jYXRlbmF0
aW5nSXRlcmF0b3IoY29uc3QgUmVhZE9wdGlvbnMmLCBpbnQgbGV2ZWwpIGNvbnN0OworCisgIFZl
cnNpb25TZXQqIHZzZXRfOyAgICAgICAgICAgIC8vIFZlcnNpb25TZXQgdG8gd2hpY2ggdGhpcyBW
ZXJzaW9uIGJlbG9uZ3MKKyAgVmVyc2lvbiogbmV4dF87ICAgICAgICAgICAgICAgLy8gTmV4dCB2
ZXJzaW9uIGluIGxpbmtlZCBsaXN0CisgIFZlcnNpb24qIHByZXZfOyAgICAgICAgICAgICAgIC8v
IFByZXZpb3VzIHZlcnNpb24gaW4gbGlua2VkIGxpc3QKKyAgaW50IHJlZnNfOyAgICAgICAgICAg
ICAgICAgICAgLy8gTnVtYmVyIG9mIGxpdmUgcmVmcyB0byB0aGlzIHZlcnNpb24KKworICAvLyBM
aXN0IG9mIGZpbGVzIHBlciBsZXZlbAorICBzdGQ6OnZlY3RvcjxGaWxlTWV0YURhdGEqPiBmaWxl
c19bY29uZmlnOjprTnVtTGV2ZWxzXTsKKworICAvLyBOZXh0IGZpbGUgdG8gY29tcGFjdCBiYXNl
ZCBvbiBzZWVrIHN0YXRzLgorICBGaWxlTWV0YURhdGEqIGZpbGVfdG9fY29tcGFjdF87CisgIGlu
dCBmaWxlX3RvX2NvbXBhY3RfbGV2ZWxfOworCisgIC8vIExldmVsIHRoYXQgc2hvdWxkIGJlIGNv
bXBhY3RlZCBuZXh0IGFuZCBpdHMgY29tcGFjdGlvbiBzY29yZS4KKyAgLy8gU2NvcmUgPCAxIG1l
YW5zIGNvbXBhY3Rpb24gaXMgbm90IHN0cmljdGx5IG5lZWRlZC4gIFRoZXNlIGZpZWxkcworICAv
LyBhcmUgaW5pdGlhbGl6ZWQgYnkgRmluYWxpemUoKS4KKyAgZG91YmxlIGNvbXBhY3Rpb25fc2Nv
cmVfOworICBpbnQgY29tcGFjdGlvbl9sZXZlbF87CisKKyAgZXhwbGljaXQgVmVyc2lvbihWZXJz
aW9uU2V0KiB2c2V0KQorICAgICAgOiB2c2V0Xyh2c2V0KSwgbmV4dF8odGhpcyksIHByZXZfKHRo
aXMpLCByZWZzXygwKSwKKyAgICAgICAgZmlsZV90b19jb21wYWN0XyhOVUxMKSwKKyAgICAgICAg
ZmlsZV90b19jb21wYWN0X2xldmVsXygtMSksCisgICAgICAgIGNvbXBhY3Rpb25fc2NvcmVfKC0x
KSwKKyAgICAgICAgY29tcGFjdGlvbl9sZXZlbF8oLTEpIHsKKyAgfQorCisgIH5WZXJzaW9uKCk7
CisKKyAgLy8gTm8gY29weWluZyBhbGxvd2VkCisgIFZlcnNpb24oY29uc3QgVmVyc2lvbiYpOwor
ICB2b2lkIG9wZXJhdG9yPShjb25zdCBWZXJzaW9uJik7Cit9OworCitjbGFzcyBWZXJzaW9uU2V0
IHsKKyBwdWJsaWM6CisgIFZlcnNpb25TZXQoY29uc3Qgc3RkOjpzdHJpbmcmIGRibmFtZSwKKyAg
ICAgICAgICAgICBjb25zdCBPcHRpb25zKiBvcHRpb25zLAorICAgICAgICAgICAgIFRhYmxlQ2Fj
aGUqIHRhYmxlX2NhY2hlLAorICAgICAgICAgICAgIGNvbnN0IEludGVybmFsS2V5Q29tcGFyYXRv
ciopOworICB+VmVyc2lvblNldCgpOworCisgIC8vIEFwcGx5ICplZGl0IHRvIHRoZSBjdXJyZW50
IHZlcnNpb24gdG8gZm9ybSBhIG5ldyBkZXNjcmlwdG9yIHRoYXQKKyAgLy8gaXMgYm90aCBzYXZl
ZCB0byBwZXJzaXN0ZW50IHN0YXRlIGFuZCBpbnN0YWxsZWQgYXMgdGhlIG5ldworICAvLyBjdXJy
ZW50IHZlcnNpb24uICBXaWxsIHJlbGVhc2UgKm11IHdoaWxlIGFjdHVhbGx5IHdyaXRpbmcgdG8g
dGhlIGZpbGUuCisgIC8vIFJFUVVJUkVTOiAqbXUgaXMgaGVsZCBvbiBlbnRyeS4KKyAgLy8gUkVR
VUlSRVM6IG5vIG90aGVyIHRocmVhZCBjb25jdXJyZW50bHkgY2FsbHMgTG9nQW5kQXBwbHkoKQor
ICBTdGF0dXMgTG9nQW5kQXBwbHkoVmVyc2lvbkVkaXQqIGVkaXQsIHBvcnQ6Ok11dGV4KiBtdSkK
KyAgICAgIEVYQ0xVU0lWRV9MT0NLU19SRVFVSVJFRChtdSk7CisKKyAgLy8gUmVjb3ZlciB0aGUg
bGFzdCBzYXZlZCBkZXNjcmlwdG9yIGZyb20gcGVyc2lzdGVudCBzdG9yYWdlLgorICBTdGF0dXMg
UmVjb3ZlcigpOworCisgIC8vIFJldHVybiB0aGUgY3VycmVudCB2ZXJzaW9uLgorICBWZXJzaW9u
KiBjdXJyZW50KCkgY29uc3QgeyByZXR1cm4gY3VycmVudF87IH0KKworICAvLyBSZXR1cm4gdGhl
IGN1cnJlbnQgbWFuaWZlc3QgZmlsZSBudW1iZXIKKyAgdWludDY0X3QgTWFuaWZlc3RGaWxlTnVt
YmVyKCkgY29uc3QgeyByZXR1cm4gbWFuaWZlc3RfZmlsZV9udW1iZXJfOyB9CisKKyAgLy8gQWxs
b2NhdGUgYW5kIHJldHVybiBhIG5ldyBmaWxlIG51bWJlcgorICB1aW50NjRfdCBOZXdGaWxlTnVt
YmVyKCkgeyByZXR1cm4gbmV4dF9maWxlX251bWJlcl8rKzsgfQorCisgIC8vIEFycmFuZ2UgdG8g
cmV1c2UgImZpbGVfbnVtYmVyIiB1bmxlc3MgYSBuZXdlciBmaWxlIG51bWJlciBoYXMKKyAgLy8g
YWxyZWFkeSBiZWVuIGFsbG9jYXRlZC4KKyAgLy8gUkVRVUlSRVM6ICJmaWxlX251bWJlciIgd2Fz
IHJldHVybmVkIGJ5IGEgY2FsbCB0byBOZXdGaWxlTnVtYmVyKCkuCisgIHZvaWQgUmV1c2VGaWxl
TnVtYmVyKHVpbnQ2NF90IGZpbGVfbnVtYmVyKSB7CisgICAgaWYgKG5leHRfZmlsZV9udW1iZXJf
ID09IGZpbGVfbnVtYmVyICsgMSkgeworICAgICAgbmV4dF9maWxlX251bWJlcl8gPSBmaWxlX251
bWJlcjsKKyAgICB9CisgIH0KKworICAvLyBSZXR1cm4gdGhlIG51bWJlciBvZiBUYWJsZSBmaWxl
cyBhdCB0aGUgc3BlY2lmaWVkIGxldmVsLgorICBpbnQgTnVtTGV2ZWxGaWxlcyhpbnQgbGV2ZWwp
IGNvbnN0OworCisgIC8vIFJldHVybiB0aGUgY29tYmluZWQgZmlsZSBzaXplIG9mIGFsbCBmaWxl
cyBhdCB0aGUgc3BlY2lmaWVkIGxldmVsLgorICBpbnQ2NF90IE51bUxldmVsQnl0ZXMoaW50IGxl
dmVsKSBjb25zdDsKKworICAvLyBSZXR1cm4gdGhlIGxhc3Qgc2VxdWVuY2UgbnVtYmVyLgorICB1
aW50NjRfdCBMYXN0U2VxdWVuY2UoKSBjb25zdCB7IHJldHVybiBsYXN0X3NlcXVlbmNlXzsgfQor
CisgIC8vIFNldCB0aGUgbGFzdCBzZXF1ZW5jZSBudW1iZXIgdG8gcy4KKyAgdm9pZCBTZXRMYXN0
U2VxdWVuY2UodWludDY0X3QgcykgeworICAgIGFzc2VydChzID49IGxhc3Rfc2VxdWVuY2VfKTsK
KyAgICBsYXN0X3NlcXVlbmNlXyA9IHM7CisgIH0KKworICAvLyBNYXJrIHRoZSBzcGVjaWZpZWQg
ZmlsZSBudW1iZXIgYXMgdXNlZC4KKyAgdm9pZCBNYXJrRmlsZU51bWJlclVzZWQodWludDY0X3Qg
bnVtYmVyKTsKKworICAvLyBSZXR1cm4gdGhlIGN1cnJlbnQgbG9nIGZpbGUgbnVtYmVyLgorICB1
aW50NjRfdCBMb2dOdW1iZXIoKSBjb25zdCB7IHJldHVybiBsb2dfbnVtYmVyXzsgfQorCisgIC8v
IFJldHVybiB0aGUgbG9nIGZpbGUgbnVtYmVyIGZvciB0aGUgbG9nIGZpbGUgdGhhdCBpcyBjdXJy
ZW50bHkKKyAgLy8gYmVpbmcgY29tcGFjdGVkLCBvciB6ZXJvIGlmIHRoZXJlIGlzIG5vIHN1Y2gg
bG9nIGZpbGUuCisgIHVpbnQ2NF90IFByZXZMb2dOdW1iZXIoKSBjb25zdCB7IHJldHVybiBwcmV2
X2xvZ19udW1iZXJfOyB9CisKKyAgLy8gUGljayBsZXZlbCBhbmQgaW5wdXRzIGZvciBhIG5ldyBj
b21wYWN0aW9uLgorICAvLyBSZXR1cm5zIE5VTEwgaWYgdGhlcmUgaXMgbm8gY29tcGFjdGlvbiB0
byBiZSBkb25lLgorICAvLyBPdGhlcndpc2UgcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBoZWFwLWFs
bG9jYXRlZCBvYmplY3QgdGhhdAorICAvLyBkZXNjcmliZXMgdGhlIGNvbXBhY3Rpb24uICBDYWxs
ZXIgc2hvdWxkIGRlbGV0ZSB0aGUgcmVzdWx0LgorICBDb21wYWN0aW9uKiBQaWNrQ29tcGFjdGlv
bigpOworCisgIC8vIFJldHVybiBhIGNvbXBhY3Rpb24gb2JqZWN0IGZvciBjb21wYWN0aW5nIHRo
ZSByYW5nZSBbYmVnaW4sZW5kXSBpbgorICAvLyB0aGUgc3BlY2lmaWVkIGxldmVsLiAgUmV0dXJu
cyBOVUxMIGlmIHRoZXJlIGlzIG5vdGhpbmcgaW4gdGhhdAorICAvLyBsZXZlbCB0aGF0IG92ZXJs
YXBzIHRoZSBzcGVjaWZpZWQgcmFuZ2UuICBDYWxsZXIgc2hvdWxkIGRlbGV0ZQorICAvLyB0aGUg
cmVzdWx0LgorICBDb21wYWN0aW9uKiBDb21wYWN0UmFuZ2UoCisgICAgICBpbnQgbGV2ZWwsCisg
ICAgICBjb25zdCBJbnRlcm5hbEtleSogYmVnaW4sCisgICAgICBjb25zdCBJbnRlcm5hbEtleSog
ZW5kKTsKKworICAvLyBSZXR1cm4gdGhlIG1heGltdW0gb3ZlcmxhcHBpbmcgZGF0YSAoaW4gYnl0
ZXMpIGF0IG5leHQgbGV2ZWwgZm9yIGFueQorICAvLyBmaWxlIGF0IGEgbGV2ZWwgPj0gMS4KKyAg
aW50NjRfdCBNYXhOZXh0TGV2ZWxPdmVybGFwcGluZ0J5dGVzKCk7CisKKyAgLy8gQ3JlYXRlIGFu
IGl0ZXJhdG9yIHRoYXQgcmVhZHMgb3ZlciB0aGUgY29tcGFjdGlvbiBpbnB1dHMgZm9yICIqYyIu
CisgIC8vIFRoZSBjYWxsZXIgc2hvdWxkIGRlbGV0ZSB0aGUgaXRlcmF0b3Igd2hlbiBubyBsb25n
ZXIgbmVlZGVkLgorICBJdGVyYXRvciogTWFrZUlucHV0SXRlcmF0b3IoQ29tcGFjdGlvbiogYyk7
CisKKyAgLy8gUmV0dXJucyB0cnVlIGlmZiBzb21lIGxldmVsIG5lZWRzIGEgY29tcGFjdGlvbi4K
KyAgYm9vbCBOZWVkc0NvbXBhY3Rpb24oKSBjb25zdCB7CisgICAgVmVyc2lvbiogdiA9IGN1cnJl
bnRfOworICAgIHJldHVybiAodi0+Y29tcGFjdGlvbl9zY29yZV8gPj0gMSkgfHwgKHYtPmZpbGVf
dG9fY29tcGFjdF8gIT0gTlVMTCk7CisgIH0KKworICAvLyBBZGQgYWxsIGZpbGVzIGxpc3RlZCBp
biBhbnkgbGl2ZSB2ZXJzaW9uIHRvICpsaXZlLgorICAvLyBNYXkgYWxzbyBtdXRhdGUgc29tZSBp
bnRlcm5hbCBzdGF0ZS4KKyAgdm9pZCBBZGRMaXZlRmlsZXMoc3RkOjpzZXQ8dWludDY0X3Q+KiBs
aXZlKTsKKworICAvLyBSZXR1cm4gdGhlIGFwcHJveGltYXRlIG9mZnNldCBpbiB0aGUgZGF0YWJh
c2Ugb2YgdGhlIGRhdGEgZm9yCisgIC8vICJrZXkiIGFzIG9mIHZlcnNpb24gInYiLgorICB1aW50
NjRfdCBBcHByb3hpbWF0ZU9mZnNldE9mKFZlcnNpb24qIHYsIGNvbnN0IEludGVybmFsS2V5JiBr
ZXkpOworCisgIC8vIFJldHVybiBhIGh1bWFuLXJlYWRhYmxlIHNob3J0IChzaW5nbGUtbGluZSkg
c3VtbWFyeSBvZiB0aGUgbnVtYmVyCisgIC8vIG9mIGZpbGVzIHBlciBsZXZlbC4gIFVzZXMgKnNj
cmF0Y2ggYXMgYmFja2luZyBzdG9yZS4KKyAgc3RydWN0IExldmVsU3VtbWFyeVN0b3JhZ2Ugewor
ICAgIGNoYXIgYnVmZmVyWzEwMF07CisgIH07CisgIGNvbnN0IGNoYXIqIExldmVsU3VtbWFyeShM
ZXZlbFN1bW1hcnlTdG9yYWdlKiBzY3JhdGNoKSBjb25zdDsKKworIHByaXZhdGU6CisgIGNsYXNz
IEJ1aWxkZXI7CisKKyAgZnJpZW5kIGNsYXNzIENvbXBhY3Rpb247CisgIGZyaWVuZCBjbGFzcyBW
ZXJzaW9uOworCisgIHZvaWQgRmluYWxpemUoVmVyc2lvbiogdik7CisKKyAgdm9pZCBHZXRSYW5n
ZShjb25zdCBzdGQ6OnZlY3RvcjxGaWxlTWV0YURhdGEqPiYgaW5wdXRzLAorICAgICAgICAgICAg
ICAgIEludGVybmFsS2V5KiBzbWFsbGVzdCwKKyAgICAgICAgICAgICAgICBJbnRlcm5hbEtleSog
bGFyZ2VzdCk7CisKKyAgdm9pZCBHZXRSYW5nZTIoY29uc3Qgc3RkOjp2ZWN0b3I8RmlsZU1ldGFE
YXRhKj4mIGlucHV0czEsCisgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEZpbGVN
ZXRhRGF0YSo+JiBpbnB1dHMyLAorICAgICAgICAgICAgICAgICBJbnRlcm5hbEtleSogc21hbGxl
c3QsCisgICAgICAgICAgICAgICAgIEludGVybmFsS2V5KiBsYXJnZXN0KTsKKworICB2b2lkIFNl
dHVwT3RoZXJJbnB1dHMoQ29tcGFjdGlvbiogYyk7CisKKyAgLy8gU2F2ZSBjdXJyZW50IGNvbnRl
bnRzIHRvICpsb2cKKyAgU3RhdHVzIFdyaXRlU25hcHNob3QobG9nOjpXcml0ZXIqIGxvZyk7CisK
KyAgdm9pZCBBcHBlbmRWZXJzaW9uKFZlcnNpb24qIHYpOworCisgIGJvb2wgTWFuaWZlc3RDb250
YWlucyhjb25zdCBzdGQ6OnN0cmluZyYgcmVjb3JkKSBjb25zdDsKKworICBFbnYqIGNvbnN0IGVu
dl87CisgIGNvbnN0IHN0ZDo6c3RyaW5nIGRibmFtZV87CisgIGNvbnN0IE9wdGlvbnMqIGNvbnN0
IG9wdGlvbnNfOworICBUYWJsZUNhY2hlKiBjb25zdCB0YWJsZV9jYWNoZV87CisgIGNvbnN0IElu
dGVybmFsS2V5Q29tcGFyYXRvciBpY21wXzsKKyAgdWludDY0X3QgbmV4dF9maWxlX251bWJlcl87
CisgIHVpbnQ2NF90IG1hbmlmZXN0X2ZpbGVfbnVtYmVyXzsKKyAgdWludDY0X3QgbGFzdF9zZXF1
ZW5jZV87CisgIHVpbnQ2NF90IGxvZ19udW1iZXJfOworICB1aW50NjRfdCBwcmV2X2xvZ19udW1i
ZXJfOyAgLy8gMCBvciBiYWNraW5nIHN0b3JlIGZvciBtZW10YWJsZSBiZWluZyBjb21wYWN0ZWQK
KworICAvLyBPcGVuZWQgbGF6aWx5CisgIFdyaXRhYmxlRmlsZSogZGVzY3JpcHRvcl9maWxlXzsK
KyAgbG9nOjpXcml0ZXIqIGRlc2NyaXB0b3JfbG9nXzsKKyAgVmVyc2lvbiBkdW1teV92ZXJzaW9u
c187ICAvLyBIZWFkIG9mIGNpcmN1bGFyIGRvdWJseS1saW5rZWQgbGlzdCBvZiB2ZXJzaW9ucy4K
KyAgVmVyc2lvbiogY3VycmVudF87ICAgICAgICAvLyA9PSBkdW1teV92ZXJzaW9uc18ucHJldl8K
KworICAvLyBQZXItbGV2ZWwga2V5IGF0IHdoaWNoIHRoZSBuZXh0IGNvbXBhY3Rpb24gYXQgdGhh
dCBsZXZlbCBzaG91bGQgc3RhcnQuCisgIC8vIEVpdGhlciBhbiBlbXB0eSBzdHJpbmcsIG9yIGEg
dmFsaWQgSW50ZXJuYWxLZXkuCisgIHN0ZDo6c3RyaW5nIGNvbXBhY3RfcG9pbnRlcl9bY29uZmln
OjprTnVtTGV2ZWxzXTsKKworICAvLyBObyBjb3B5aW5nIGFsbG93ZWQKKyAgVmVyc2lvblNldChj
b25zdCBWZXJzaW9uU2V0Jik7CisgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFZlcnNpb25TZXQmKTsK
K307CisKKy8vIEEgQ29tcGFjdGlvbiBlbmNhcHN1bGF0ZXMgaW5mb3JtYXRpb24gYWJvdXQgYSBj
b21wYWN0aW9uLgorY2xhc3MgQ29tcGFjdGlvbiB7CisgcHVibGljOgorICB+Q29tcGFjdGlvbigp
OworCisgIC8vIFJldHVybiB0aGUgbGV2ZWwgdGhhdCBpcyBiZWluZyBjb21wYWN0ZWQuICBJbnB1
dHMgZnJvbSAibGV2ZWwiCisgIC8vIGFuZCAibGV2ZWwrMSIgd2lsbCBiZSBtZXJnZWQgdG8gcHJv
ZHVjZSBhIHNldCBvZiAibGV2ZWwrMSIgZmlsZXMuCisgIGludCBsZXZlbCgpIGNvbnN0IHsgcmV0
dXJuIGxldmVsXzsgfQorCisgIC8vIFJldHVybiB0aGUgb2JqZWN0IHRoYXQgaG9sZHMgdGhlIGVk
aXRzIHRvIHRoZSBkZXNjcmlwdG9yIGRvbmUKKyAgLy8gYnkgdGhpcyBjb21wYWN0aW9uLgorICBW
ZXJzaW9uRWRpdCogZWRpdCgpIHsgcmV0dXJuICZlZGl0XzsgfQorCisgIC8vICJ3aGljaCIgbXVz
dCBiZSBlaXRoZXIgMCBvciAxCisgIGludCBudW1faW5wdXRfZmlsZXMoaW50IHdoaWNoKSBjb25z
dCB7IHJldHVybiBpbnB1dHNfW3doaWNoXS5zaXplKCk7IH0KKworICAvLyBSZXR1cm4gdGhlIGl0
aCBpbnB1dCBmaWxlIGF0ICJsZXZlbCgpK3doaWNoIiAoIndoaWNoIiBtdXN0IGJlIDAgb3IgMSku
CisgIEZpbGVNZXRhRGF0YSogaW5wdXQoaW50IHdoaWNoLCBpbnQgaSkgY29uc3QgeyByZXR1cm4g
aW5wdXRzX1t3aGljaF1baV07IH0KKworICAvLyBNYXhpbXVtIHNpemUgb2YgZmlsZXMgdG8gYnVp
bGQgZHVyaW5nIHRoaXMgY29tcGFjdGlvbi4KKyAgdWludDY0X3QgTWF4T3V0cHV0RmlsZVNpemUo
KSBjb25zdCB7IHJldHVybiBtYXhfb3V0cHV0X2ZpbGVfc2l6ZV87IH0KKworICAvLyBJcyB0aGlz
IGEgdHJpdmlhbCBjb21wYWN0aW9uIHRoYXQgY2FuIGJlIGltcGxlbWVudGVkIGJ5IGp1c3QKKyAg
Ly8gbW92aW5nIGEgc2luZ2xlIGlucHV0IGZpbGUgdG8gdGhlIG5leHQgbGV2ZWwgKG5vIG1lcmdp
bmcgb3Igc3BsaXR0aW5nKQorICBib29sIElzVHJpdmlhbE1vdmUoKSBjb25zdDsKKworICAvLyBB
ZGQgYWxsIGlucHV0cyB0byB0aGlzIGNvbXBhY3Rpb24gYXMgZGVsZXRlIG9wZXJhdGlvbnMgdG8g
KmVkaXQuCisgIHZvaWQgQWRkSW5wdXREZWxldGlvbnMoVmVyc2lvbkVkaXQqIGVkaXQpOworCisg
IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgaW5mb3JtYXRpb24gd2UgaGF2ZSBhdmFpbGFibGUgZ3Vh
cmFudGVlcyB0aGF0CisgIC8vIHRoZSBjb21wYWN0aW9uIGlzIHByb2R1Y2luZyBkYXRhIGluICJs
ZXZlbCsxIiBmb3Igd2hpY2ggbm8gZGF0YSBleGlzdHMKKyAgLy8gaW4gbGV2ZWxzIGdyZWF0ZXIg
dGhhbiAibGV2ZWwrMSIuCisgIGJvb2wgSXNCYXNlTGV2ZWxGb3JLZXkoY29uc3QgU2xpY2UmIHVz
ZXJfa2V5KTsKKworICAvLyBSZXR1cm5zIHRydWUgaWZmIHdlIHNob3VsZCBzdG9wIGJ1aWxkaW5n
IHRoZSBjdXJyZW50IG91dHB1dAorICAvLyBiZWZvcmUgcHJvY2Vzc2luZyAiaW50ZXJuYWxfa2V5
Ii4KKyAgYm9vbCBTaG91bGRTdG9wQmVmb3JlKGNvbnN0IFNsaWNlJiBpbnRlcm5hbF9rZXkpOwor
CisgIC8vIFJlbGVhc2UgdGhlIGlucHV0IHZlcnNpb24gZm9yIHRoZSBjb21wYWN0aW9uLCBvbmNl
IHRoZSBjb21wYWN0aW9uCisgIC8vIGlzIHN1Y2Nlc3NmdWwuCisgIHZvaWQgUmVsZWFzZUlucHV0
cygpOworCisgcHJpdmF0ZToKKyAgZnJpZW5kIGNsYXNzIFZlcnNpb247CisgIGZyaWVuZCBjbGFz
cyBWZXJzaW9uU2V0OworCisgIGV4cGxpY2l0IENvbXBhY3Rpb24oaW50IGxldmVsKTsKKworICBp
bnQgbGV2ZWxfOworICB1aW50NjRfdCBtYXhfb3V0cHV0X2ZpbGVfc2l6ZV87CisgIFZlcnNpb24q
IGlucHV0X3ZlcnNpb25fOworICBWZXJzaW9uRWRpdCBlZGl0XzsKKworICAvLyBFYWNoIGNvbXBh
Y3Rpb24gcmVhZHMgaW5wdXRzIGZyb20gImxldmVsXyIgYW5kICJsZXZlbF8rMSIKKyAgc3RkOjp2
ZWN0b3I8RmlsZU1ldGFEYXRhKj4gaW5wdXRzX1syXTsgICAgICAvLyBUaGUgdHdvIHNldHMgb2Yg
aW5wdXRzCisKKyAgLy8gU3RhdGUgdXNlZCB0byBjaGVjayBmb3IgbnVtYmVyIG9mIG9mIG92ZXJs
YXBwaW5nIGdyYW5kcGFyZW50IGZpbGVzCisgIC8vIChwYXJlbnQgPT0gbGV2ZWxfICsgMSwgZ3Jh
bmRwYXJlbnQgPT0gbGV2ZWxfICsgMikKKyAgc3RkOjp2ZWN0b3I8RmlsZU1ldGFEYXRhKj4gZ3Jh
bmRwYXJlbnRzXzsKKyAgc2l6ZV90IGdyYW5kcGFyZW50X2luZGV4XzsgIC8vIEluZGV4IGluIGdy
YW5kcGFyZW50X3N0YXJ0c18KKyAgYm9vbCBzZWVuX2tleV87ICAgICAgICAgICAgIC8vIFNvbWUg
b3V0cHV0IGtleSBoYXMgYmVlbiBzZWVuCisgIGludDY0X3Qgb3ZlcmxhcHBlZF9ieXRlc187ICAv
LyBCeXRlcyBvZiBvdmVybGFwIGJldHdlZW4gY3VycmVudCBvdXRwdXQKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGFuZCBncmFuZHBhcmVudCBmaWxlcworCisgIC8vIFN0YXRlIGZv
ciBpbXBsZW1lbnRpbmcgSXNCYXNlTGV2ZWxGb3JLZXkKKworICAvLyBsZXZlbF9wdHJzXyBob2xk
cyBpbmRpY2VzIGludG8gaW5wdXRfdmVyc2lvbl8tPmxldmVsc186IG91ciBzdGF0ZQorICAvLyBp
cyB0aGF0IHdlIGFyZSBwb3NpdGlvbmVkIGF0IG9uZSBvZiB0aGUgZmlsZSByYW5nZXMgZm9yIGVh
Y2gKKyAgLy8gaGlnaGVyIGxldmVsIHRoYW4gdGhlIG9uZXMgaW52b2x2ZWQgaW4gdGhpcyBjb21w
YWN0aW9uIChpLmUuIGZvcgorICAvLyBhbGwgTCA+PSBsZXZlbF8gKyAyKS4KKyAgc2l6ZV90IGxl
dmVsX3B0cnNfW2NvbmZpZzo6a051bUxldmVsc107Cit9OworCit9ICAvLyBuYW1lc3BhY2UgbGV2
ZWxkYgorCisjZW5kaWYgIC8vIFNUT1JBR0VfTEVWRUxEQl9EQl9WRVJTSU9OX1NFVF9IXwpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi92ZXJzaW9uX3NldF90ZXN0LmNj
IGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi92ZXJzaW9uX3NldF90ZXN0LmNjCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjUwMWUzNGQxMzM3ZDM5MTcxODViNzAzNjlkOTk4MmRiNTRlNzg3YWEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL3ZlcnNpb25fc2V0X3Rlc3Qu
Y2MKQEAgLTAsMCArMSwxNzkgQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNv
bnRyaWJ1dG9ycy4KKworI2luY2x1ZGUgImRiL3ZlcnNpb25fc2V0LmgiCisjaW5jbHVkZSAidXRp
bC9sb2dnaW5nLmgiCisjaW5jbHVkZSAidXRpbC90ZXN0aGFybmVzcy5oIgorI2luY2x1ZGUgInV0
aWwvdGVzdHV0aWwuaCIKKworbmFtZXNwYWNlIGxldmVsZGIgeworCitjbGFzcyBGaW5kRmlsZVRl
c3QgeworIHB1YmxpYzoKKyAgc3RkOjp2ZWN0b3I8RmlsZU1ldGFEYXRhKj4gZmlsZXNfOworICBi
b29sIGRpc2pvaW50X3NvcnRlZF9maWxlc187CisKKyAgRmluZEZpbGVUZXN0KCkgOiBkaXNqb2lu
dF9zb3J0ZWRfZmlsZXNfKHRydWUpIHsgfQorCisgIH5GaW5kRmlsZVRlc3QoKSB7CisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBmaWxlc18uc2l6ZSgpOyBpKyspIHsKKyAgICAgIGRlbGV0ZSBmaWxl
c19baV07CisgICAgfQorICB9CisKKyAgdm9pZCBBZGQoY29uc3QgY2hhciogc21hbGxlc3QsIGNv
bnN0IGNoYXIqIGxhcmdlc3QsCisgICAgICAgICAgIFNlcXVlbmNlTnVtYmVyIHNtYWxsZXN0X3Nl
cSA9IDEwMCwKKyAgICAgICAgICAgU2VxdWVuY2VOdW1iZXIgbGFyZ2VzdF9zZXEgPSAxMDApIHsK
KyAgICBGaWxlTWV0YURhdGEqIGYgPSBuZXcgRmlsZU1ldGFEYXRhOworICAgIGYtPm51bWJlciA9
IGZpbGVzXy5zaXplKCkgKyAxOworICAgIGYtPnNtYWxsZXN0ID0gSW50ZXJuYWxLZXkoc21hbGxl
c3QsIHNtYWxsZXN0X3NlcSwga1R5cGVWYWx1ZSk7CisgICAgZi0+bGFyZ2VzdCA9IEludGVybmFs
S2V5KGxhcmdlc3QsIGxhcmdlc3Rfc2VxLCBrVHlwZVZhbHVlKTsKKyAgICBmaWxlc18ucHVzaF9i
YWNrKGYpOworICB9CisKKyAgaW50IEZpbmQoY29uc3QgY2hhcioga2V5KSB7CisgICAgSW50ZXJu
YWxLZXkgdGFyZ2V0KGtleSwgMTAwLCBrVHlwZVZhbHVlKTsKKyAgICBJbnRlcm5hbEtleUNvbXBh
cmF0b3IgY21wKEJ5dGV3aXNlQ29tcGFyYXRvcigpKTsKKyAgICByZXR1cm4gRmluZEZpbGUoY21w
LCBmaWxlc18sIHRhcmdldC5FbmNvZGUoKSk7CisgIH0KKworICBib29sIE92ZXJsYXBzKGNvbnN0
IGNoYXIqIHNtYWxsZXN0LCBjb25zdCBjaGFyKiBsYXJnZXN0KSB7CisgICAgSW50ZXJuYWxLZXlD
b21wYXJhdG9yIGNtcChCeXRld2lzZUNvbXBhcmF0b3IoKSk7CisgICAgU2xpY2UgcyhzbWFsbGVz
dCAhPSBOVUxMID8gc21hbGxlc3QgOiAiIik7CisgICAgU2xpY2UgbChsYXJnZXN0ICE9IE5VTEwg
PyBsYXJnZXN0IDogIiIpOworICAgIHJldHVybiBTb21lRmlsZU92ZXJsYXBzUmFuZ2UoY21wLCBk
aXNqb2ludF9zb3J0ZWRfZmlsZXNfLCBmaWxlc18sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoc21hbGxlc3QgIT0gTlVMTCA/ICZzIDogTlVMTCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAobGFyZ2VzdCAhPSBOVUxMID8gJmwgOiBOVUxMKSk7CisgIH0KK307
CisKK1RFU1QoRmluZEZpbGVUZXN0LCBFbXB0eSkgeworICBBU1NFUlRfRVEoMCwgRmluZCgiZm9v
IikpOworICBBU1NFUlRfVFJVRSghIE92ZXJsYXBzKCJhIiwgInoiKSk7CisgIEFTU0VSVF9UUlVF
KCEgT3ZlcmxhcHMoTlVMTCwgInoiKSk7CisgIEFTU0VSVF9UUlVFKCEgT3ZlcmxhcHMoImEiLCBO
VUxMKSk7CisgIEFTU0VSVF9UUlVFKCEgT3ZlcmxhcHMoTlVMTCwgTlVMTCkpOworfQorCitURVNU
KEZpbmRGaWxlVGVzdCwgU2luZ2xlKSB7CisgIEFkZCgicCIsICJxIik7CisgIEFTU0VSVF9FUSgw
LCBGaW5kKCJhIikpOworICBBU1NFUlRfRVEoMCwgRmluZCgicCIpKTsKKyAgQVNTRVJUX0VRKDAs
IEZpbmQoInAxIikpOworICBBU1NFUlRfRVEoMCwgRmluZCgicSIpKTsKKyAgQVNTRVJUX0VRKDEs
IEZpbmQoInExIikpOworICBBU1NFUlRfRVEoMSwgRmluZCgieiIpKTsKKworICBBU1NFUlRfVFJV
RSghIE92ZXJsYXBzKCJhIiwgImIiKSk7CisgIEFTU0VSVF9UUlVFKCEgT3ZlcmxhcHMoInoxIiwg
InoyIikpOworICBBU1NFUlRfVFJVRShPdmVybGFwcygiYSIsICJwIikpOworICBBU1NFUlRfVFJV
RShPdmVybGFwcygiYSIsICJxIikpOworICBBU1NFUlRfVFJVRShPdmVybGFwcygiYSIsICJ6Iikp
OworICBBU1NFUlRfVFJVRShPdmVybGFwcygicCIsICJwMSIpKTsKKyAgQVNTRVJUX1RSVUUoT3Zl
cmxhcHMoInAiLCAicSIpKTsKKyAgQVNTRVJUX1RSVUUoT3ZlcmxhcHMoInAiLCAieiIpKTsKKyAg
QVNTRVJUX1RSVUUoT3ZlcmxhcHMoInAxIiwgInAyIikpOworICBBU1NFUlRfVFJVRShPdmVybGFw
cygicDEiLCAieiIpKTsKKyAgQVNTRVJUX1RSVUUoT3ZlcmxhcHMoInEiLCAicSIpKTsKKyAgQVNT
RVJUX1RSVUUoT3ZlcmxhcHMoInEiLCAicTEiKSk7CisKKyAgQVNTRVJUX1RSVUUoISBPdmVybGFw
cyhOVUxMLCAiaiIpKTsKKyAgQVNTRVJUX1RSVUUoISBPdmVybGFwcygiciIsIE5VTEwpKTsKKyAg
QVNTRVJUX1RSVUUoT3ZlcmxhcHMoTlVMTCwgInAiKSk7CisgIEFTU0VSVF9UUlVFKE92ZXJsYXBz
KE5VTEwsICJwMSIpKTsKKyAgQVNTRVJUX1RSVUUoT3ZlcmxhcHMoInEiLCBOVUxMKSk7CisgIEFT
U0VSVF9UUlVFKE92ZXJsYXBzKE5VTEwsIE5VTEwpKTsKK30KKworCitURVNUKEZpbmRGaWxlVGVz
dCwgTXVsdGlwbGUpIHsKKyAgQWRkKCIxNTAiLCAiMjAwIik7CisgIEFkZCgiMjAwIiwgIjI1MCIp
OworICBBZGQoIjMwMCIsICIzNTAiKTsKKyAgQWRkKCI0MDAiLCAiNDUwIik7CisgIEFTU0VSVF9F
USgwLCBGaW5kKCIxMDAiKSk7CisgIEFTU0VSVF9FUSgwLCBGaW5kKCIxNTAiKSk7CisgIEFTU0VS
VF9FUSgwLCBGaW5kKCIxNTEiKSk7CisgIEFTU0VSVF9FUSgwLCBGaW5kKCIxOTkiKSk7CisgIEFT
U0VSVF9FUSgwLCBGaW5kKCIyMDAiKSk7CisgIEFTU0VSVF9FUSgxLCBGaW5kKCIyMDEiKSk7Cisg
IEFTU0VSVF9FUSgxLCBGaW5kKCIyNDkiKSk7CisgIEFTU0VSVF9FUSgxLCBGaW5kKCIyNTAiKSk7
CisgIEFTU0VSVF9FUSgyLCBGaW5kKCIyNTEiKSk7CisgIEFTU0VSVF9FUSgyLCBGaW5kKCIyOTki
KSk7CisgIEFTU0VSVF9FUSgyLCBGaW5kKCIzMDAiKSk7CisgIEFTU0VSVF9FUSgyLCBGaW5kKCIz
NDkiKSk7CisgIEFTU0VSVF9FUSgyLCBGaW5kKCIzNTAiKSk7CisgIEFTU0VSVF9FUSgzLCBGaW5k
KCIzNTEiKSk7CisgIEFTU0VSVF9FUSgzLCBGaW5kKCI0MDAiKSk7CisgIEFTU0VSVF9FUSgzLCBG
aW5kKCI0NTAiKSk7CisgIEFTU0VSVF9FUSg0LCBGaW5kKCI0NTEiKSk7CisKKyAgQVNTRVJUX1RS
VUUoISBPdmVybGFwcygiMTAwIiwgIjE0OSIpKTsKKyAgQVNTRVJUX1RSVUUoISBPdmVybGFwcygi
MjUxIiwgIjI5OSIpKTsKKyAgQVNTRVJUX1RSVUUoISBPdmVybGFwcygiNDUxIiwgIjUwMCIpKTsK
KyAgQVNTRVJUX1RSVUUoISBPdmVybGFwcygiMzUxIiwgIjM5OSIpKTsKKworICBBU1NFUlRfVFJV
RShPdmVybGFwcygiMTAwIiwgIjE1MCIpKTsKKyAgQVNTRVJUX1RSVUUoT3ZlcmxhcHMoIjEwMCIs
ICIyMDAiKSk7CisgIEFTU0VSVF9UUlVFKE92ZXJsYXBzKCIxMDAiLCAiMzAwIikpOworICBBU1NF
UlRfVFJVRShPdmVybGFwcygiMTAwIiwgIjQwMCIpKTsKKyAgQVNTRVJUX1RSVUUoT3ZlcmxhcHMo
IjEwMCIsICI1MDAiKSk7CisgIEFTU0VSVF9UUlVFKE92ZXJsYXBzKCIzNzUiLCAiNDAwIikpOwor
ICBBU1NFUlRfVFJVRShPdmVybGFwcygiNDUwIiwgIjQ1MCIpKTsKKyAgQVNTRVJUX1RSVUUoT3Zl
cmxhcHMoIjQ1MCIsICI1MDAiKSk7Cit9CisKK1RFU1QoRmluZEZpbGVUZXN0LCBNdWx0aXBsZU51
bGxCb3VuZGFyaWVzKSB7CisgIEFkZCgiMTUwIiwgIjIwMCIpOworICBBZGQoIjIwMCIsICIyNTAi
KTsKKyAgQWRkKCIzMDAiLCAiMzUwIik7CisgIEFkZCgiNDAwIiwgIjQ1MCIpOworICBBU1NFUlRf
VFJVRSghIE92ZXJsYXBzKE5VTEwsICIxNDkiKSk7CisgIEFTU0VSVF9UUlVFKCEgT3ZlcmxhcHMo
IjQ1MSIsIE5VTEwpKTsKKyAgQVNTRVJUX1RSVUUoT3ZlcmxhcHMoTlVMTCwgTlVMTCkpOworICBB
U1NFUlRfVFJVRShPdmVybGFwcyhOVUxMLCAiMTUwIikpOworICBBU1NFUlRfVFJVRShPdmVybGFw
cyhOVUxMLCAiMTk5IikpOworICBBU1NFUlRfVFJVRShPdmVybGFwcyhOVUxMLCAiMjAwIikpOwor
ICBBU1NFUlRfVFJVRShPdmVybGFwcyhOVUxMLCAiMjAxIikpOworICBBU1NFUlRfVFJVRShPdmVy
bGFwcyhOVUxMLCAiNDAwIikpOworICBBU1NFUlRfVFJVRShPdmVybGFwcyhOVUxMLCAiODAwIikp
OworICBBU1NFUlRfVFJVRShPdmVybGFwcygiMTAwIiwgTlVMTCkpOworICBBU1NFUlRfVFJVRShP
dmVybGFwcygiMjAwIiwgTlVMTCkpOworICBBU1NFUlRfVFJVRShPdmVybGFwcygiNDQ5IiwgTlVM
TCkpOworICBBU1NFUlRfVFJVRShPdmVybGFwcygiNDUwIiwgTlVMTCkpOworfQorCitURVNUKEZp
bmRGaWxlVGVzdCwgT3ZlcmxhcFNlcXVlbmNlQ2hlY2tzKSB7CisgIEFkZCgiMjAwIiwgIjIwMCIs
IDUwMDAsIDMwMDApOworICBBU1NFUlRfVFJVRSghIE92ZXJsYXBzKCIxOTkiLCAiMTk5IikpOwor
ICBBU1NFUlRfVFJVRSghIE92ZXJsYXBzKCIyMDEiLCAiMzAwIikpOworICBBU1NFUlRfVFJVRShP
dmVybGFwcygiMjAwIiwgIjIwMCIpKTsKKyAgQVNTRVJUX1RSVUUoT3ZlcmxhcHMoIjE5MCIsICIy
MDAiKSk7CisgIEFTU0VSVF9UUlVFKE92ZXJsYXBzKCIyMDAiLCAiMjEwIikpOworfQorCitURVNU
KEZpbmRGaWxlVGVzdCwgT3ZlcmxhcHBpbmdGaWxlcykgeworICBBZGQoIjE1MCIsICI2MDAiKTsK
KyAgQWRkKCI0MDAiLCAiNTAwIik7CisgIGRpc2pvaW50X3NvcnRlZF9maWxlc18gPSBmYWxzZTsK
KyAgQVNTRVJUX1RSVUUoISBPdmVybGFwcygiMTAwIiwgIjE0OSIpKTsKKyAgQVNTRVJUX1RSVUUo
ISBPdmVybGFwcygiNjAxIiwgIjcwMCIpKTsKKyAgQVNTRVJUX1RSVUUoT3ZlcmxhcHMoIjEwMCIs
ICIxNTAiKSk7CisgIEFTU0VSVF9UUlVFKE92ZXJsYXBzKCIxMDAiLCAiMjAwIikpOworICBBU1NF
UlRfVFJVRShPdmVybGFwcygiMTAwIiwgIjMwMCIpKTsKKyAgQVNTRVJUX1RSVUUoT3ZlcmxhcHMo
IjEwMCIsICI0MDAiKSk7CisgIEFTU0VSVF9UUlVFKE92ZXJsYXBzKCIxMDAiLCAiNTAwIikpOwor
ICBBU1NFUlRfVFJVRShPdmVybGFwcygiMzc1IiwgIjQwMCIpKTsKKyAgQVNTRVJUX1RSVUUoT3Zl
cmxhcHMoIjQ1MCIsICI0NTAiKSk7CisgIEFTU0VSVF9UUlVFKE92ZXJsYXBzKCI0NTAiLCAiNTAw
IikpOworICBBU1NFUlRfVFJVRShPdmVybGFwcygiNDUwIiwgIjcwMCIpKTsKKyAgQVNTRVJUX1RS
VUUoT3ZlcmxhcHMoIjYwMCIsICI3MDAiKSk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBsZXZlbGRi
CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikgeworICByZXR1cm4gbGV2ZWxkYjo6
dGVzdDo6UnVuQWxsVGVzdHMoKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xl
dmVsZGIvZGIvd3JpdGVfYmF0Y2guY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL3dy
aXRlX2JhdGNoLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMzZjRhNDI1N2VhOTRlMDEwNWE5MzY4ZGU3OWQ3NjFh
YzdiZjk3OWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2Ri
L3dyaXRlX2JhdGNoLmNjCkBAIC0wLDAgKzEsMTQ3IEBACisvLyBDb3B5cmlnaHQgKGMpIDIwMTEg
VGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZv
ciBuYW1lcyBvZiBjb250cmlidXRvcnMuCisvLworLy8gV3JpdGVCYXRjaDo6cmVwXyA6PQorLy8g
ICAgc2VxdWVuY2U6IGZpeGVkNjQKKy8vICAgIGNvdW50OiBmaXhlZDMyCisvLyAgICBkYXRhOiBy
ZWNvcmRbY291bnRdCisvLyByZWNvcmQgOj0KKy8vICAgIGtUeXBlVmFsdWUgdmFyc3RyaW5nIHZh
cnN0cmluZyAgICAgICAgIHwKKy8vICAgIGtUeXBlRGVsZXRpb24gdmFyc3RyaW5nCisvLyB2YXJz
dHJpbmcgOj0KKy8vICAgIGxlbjogdmFyaW50MzIKKy8vICAgIGRhdGE6IHVpbnQ4W2xlbl0KKwor
I2luY2x1ZGUgImxldmVsZGIvd3JpdGVfYmF0Y2guaCIKKworI2luY2x1ZGUgImxldmVsZGIvZGIu
aCIKKyNpbmNsdWRlICJkYi9kYmZvcm1hdC5oIgorI2luY2x1ZGUgImRiL21lbXRhYmxlLmgiCisj
aW5jbHVkZSAiZGIvd3JpdGVfYmF0Y2hfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJ1dGlsL2NvZGlu
Zy5oIgorCituYW1lc3BhY2UgbGV2ZWxkYiB7CisKKy8vIFdyaXRlQmF0Y2ggaGVhZGVyIGhhcyBh
biA4LWJ5dGUgc2VxdWVuY2UgbnVtYmVyIGZvbGxvd2VkIGJ5IGEgNC1ieXRlIGNvdW50Lgorc3Rh
dGljIGNvbnN0IHNpemVfdCBrSGVhZGVyID0gMTI7CisKK1dyaXRlQmF0Y2g6OldyaXRlQmF0Y2go
KSB7CisgIENsZWFyKCk7Cit9CisKK1dyaXRlQmF0Y2g6On5Xcml0ZUJhdGNoKCkgeyB9CisKK1dy
aXRlQmF0Y2g6OkhhbmRsZXI6On5IYW5kbGVyKCkgeyB9CisKK3ZvaWQgV3JpdGVCYXRjaDo6Q2xl
YXIoKSB7CisgIHJlcF8uY2xlYXIoKTsKKyAgcmVwXy5yZXNpemUoa0hlYWRlcik7Cit9CisKK1N0
YXR1cyBXcml0ZUJhdGNoOjpJdGVyYXRlKEhhbmRsZXIqIGhhbmRsZXIpIGNvbnN0IHsKKyAgU2xp
Y2UgaW5wdXQocmVwXyk7CisgIGlmIChpbnB1dC5zaXplKCkgPCBrSGVhZGVyKSB7CisgICAgcmV0
dXJuIFN0YXR1czo6Q29ycnVwdGlvbigibWFsZm9ybWVkIFdyaXRlQmF0Y2ggKHRvbyBzbWFsbCki
KTsKKyAgfQorCisgIGlucHV0LnJlbW92ZV9wcmVmaXgoa0hlYWRlcik7CisgIFNsaWNlIGtleSwg
dmFsdWU7CisgIGludCBmb3VuZCA9IDA7CisgIHdoaWxlICghaW5wdXQuZW1wdHkoKSkgeworICAg
IGZvdW5kKys7CisgICAgY2hhciB0YWcgPSBpbnB1dFswXTsKKyAgICBpbnB1dC5yZW1vdmVfcHJl
Zml4KDEpOworICAgIHN3aXRjaCAodGFnKSB7CisgICAgICBjYXNlIGtUeXBlVmFsdWU6CisgICAg
ICAgIGlmIChHZXRMZW5ndGhQcmVmaXhlZFNsaWNlKCZpbnB1dCwgJmtleSkgJiYKKyAgICAgICAg
ICAgIEdldExlbmd0aFByZWZpeGVkU2xpY2UoJmlucHV0LCAmdmFsdWUpKSB7CisgICAgICAgICAg
aGFuZGxlci0+UHV0KGtleSwgdmFsdWUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHJl
dHVybiBTdGF0dXM6OkNvcnJ1cHRpb24oImJhZCBXcml0ZUJhdGNoIFB1dCIpOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBrVHlwZURlbGV0aW9uOgorICAgICAgICBpZiAo
R2V0TGVuZ3RoUHJlZml4ZWRTbGljZSgmaW5wdXQsICZrZXkpKSB7CisgICAgICAgICAgaGFuZGxl
ci0+RGVsZXRlKGtleSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcmV0dXJuIFN0YXR1
czo6Q29ycnVwdGlvbigiYmFkIFdyaXRlQmF0Y2ggRGVsZXRlIik7CisgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gU3RhdHVzOjpDb3JydXB0
aW9uKCJ1bmtub3duIFdyaXRlQmF0Y2ggdGFnIik7CisgICAgfQorICB9CisgIGlmIChmb3VuZCAh
PSBXcml0ZUJhdGNoSW50ZXJuYWw6OkNvdW50KHRoaXMpKSB7CisgICAgcmV0dXJuIFN0YXR1czo6
Q29ycnVwdGlvbigiV3JpdGVCYXRjaCBoYXMgd3JvbmcgY291bnQiKTsKKyAgfSBlbHNlIHsKKyAg
ICByZXR1cm4gU3RhdHVzOjpPSygpOworICB9Cit9CisKK2ludCBXcml0ZUJhdGNoSW50ZXJuYWw6
OkNvdW50KGNvbnN0IFdyaXRlQmF0Y2gqIGIpIHsKKyAgcmV0dXJuIERlY29kZUZpeGVkMzIoYi0+
cmVwXy5kYXRhKCkgKyA4KTsKK30KKwordm9pZCBXcml0ZUJhdGNoSW50ZXJuYWw6OlNldENvdW50
KFdyaXRlQmF0Y2gqIGIsIGludCBuKSB7CisgIEVuY29kZUZpeGVkMzIoJmItPnJlcF9bOF0sIG4p
OworfQorCitTZXF1ZW5jZU51bWJlciBXcml0ZUJhdGNoSW50ZXJuYWw6OlNlcXVlbmNlKGNvbnN0
IFdyaXRlQmF0Y2gqIGIpIHsKKyAgcmV0dXJuIFNlcXVlbmNlTnVtYmVyKERlY29kZUZpeGVkNjQo
Yi0+cmVwXy5kYXRhKCkpKTsKK30KKwordm9pZCBXcml0ZUJhdGNoSW50ZXJuYWw6OlNldFNlcXVl
bmNlKFdyaXRlQmF0Y2gqIGIsIFNlcXVlbmNlTnVtYmVyIHNlcSkgeworICBFbmNvZGVGaXhlZDY0
KCZiLT5yZXBfWzBdLCBzZXEpOworfQorCit2b2lkIFdyaXRlQmF0Y2g6OlB1dChjb25zdCBTbGlj
ZSYga2V5LCBjb25zdCBTbGljZSYgdmFsdWUpIHsKKyAgV3JpdGVCYXRjaEludGVybmFsOjpTZXRD
b3VudCh0aGlzLCBXcml0ZUJhdGNoSW50ZXJuYWw6OkNvdW50KHRoaXMpICsgMSk7CisgIHJlcF8u
cHVzaF9iYWNrKHN0YXRpY19jYXN0PGNoYXI+KGtUeXBlVmFsdWUpKTsKKyAgUHV0TGVuZ3RoUHJl
Zml4ZWRTbGljZSgmcmVwXywga2V5KTsKKyAgUHV0TGVuZ3RoUHJlZml4ZWRTbGljZSgmcmVwXywg
dmFsdWUpOworfQorCit2b2lkIFdyaXRlQmF0Y2g6OkRlbGV0ZShjb25zdCBTbGljZSYga2V5KSB7
CisgIFdyaXRlQmF0Y2hJbnRlcm5hbDo6U2V0Q291bnQodGhpcywgV3JpdGVCYXRjaEludGVybmFs
OjpDb3VudCh0aGlzKSArIDEpOworICByZXBfLnB1c2hfYmFjayhzdGF0aWNfY2FzdDxjaGFyPihr
VHlwZURlbGV0aW9uKSk7CisgIFB1dExlbmd0aFByZWZpeGVkU2xpY2UoJnJlcF8sIGtleSk7Cit9
CisKK25hbWVzcGFjZSB7CitjbGFzcyBNZW1UYWJsZUluc2VydGVyIDogcHVibGljIFdyaXRlQmF0
Y2g6OkhhbmRsZXIgeworIHB1YmxpYzoKKyAgU2VxdWVuY2VOdW1iZXIgc2VxdWVuY2VfOworICBN
ZW1UYWJsZSogbWVtXzsKKworICB2aXJ0dWFsIHZvaWQgUHV0KGNvbnN0IFNsaWNlJiBrZXksIGNv
bnN0IFNsaWNlJiB2YWx1ZSkgeworICAgIG1lbV8tPkFkZChzZXF1ZW5jZV8sIGtUeXBlVmFsdWUs
IGtleSwgdmFsdWUpOworICAgIHNlcXVlbmNlXysrOworICB9CisgIHZpcnR1YWwgdm9pZCBEZWxl
dGUoY29uc3QgU2xpY2UmIGtleSkgeworICAgIG1lbV8tPkFkZChzZXF1ZW5jZV8sIGtUeXBlRGVs
ZXRpb24sIGtleSwgU2xpY2UoKSk7CisgICAgc2VxdWVuY2VfKys7CisgIH0KK307Cit9ICAvLyBu
YW1lc3BhY2UKKworU3RhdHVzIFdyaXRlQmF0Y2hJbnRlcm5hbDo6SW5zZXJ0SW50byhjb25zdCBX
cml0ZUJhdGNoKiBiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZW1U
YWJsZSogbWVtdGFibGUpIHsKKyAgTWVtVGFibGVJbnNlcnRlciBpbnNlcnRlcjsKKyAgaW5zZXJ0
ZXIuc2VxdWVuY2VfID0gV3JpdGVCYXRjaEludGVybmFsOjpTZXF1ZW5jZShiKTsKKyAgaW5zZXJ0
ZXIubWVtXyA9IG1lbXRhYmxlOworICByZXR1cm4gYi0+SXRlcmF0ZSgmaW5zZXJ0ZXIpOworfQor
Cit2b2lkIFdyaXRlQmF0Y2hJbnRlcm5hbDo6U2V0Q29udGVudHMoV3JpdGVCYXRjaCogYiwgY29u
c3QgU2xpY2UmIGNvbnRlbnRzKSB7CisgIGFzc2VydChjb250ZW50cy5zaXplKCkgPj0ga0hlYWRl
cik7CisgIGItPnJlcF8uYXNzaWduKGNvbnRlbnRzLmRhdGEoKSwgY29udGVudHMuc2l6ZSgpKTsK
K30KKwordm9pZCBXcml0ZUJhdGNoSW50ZXJuYWw6OkFwcGVuZChXcml0ZUJhdGNoKiBkc3QsIGNv
bnN0IFdyaXRlQmF0Y2gqIHNyYykgeworICBTZXRDb3VudChkc3QsIENvdW50KGRzdCkgKyBDb3Vu
dChzcmMpKTsKKyAgYXNzZXJ0KHNyYy0+cmVwXy5zaXplKCkgPj0ga0hlYWRlcik7CisgIGRzdC0+
cmVwXy5hcHBlbmQoc3JjLT5yZXBfLmRhdGEoKSArIGtIZWFkZXIsIHNyYy0+cmVwXy5zaXplKCkg
LSBrSGVhZGVyKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvd3JpdGVfYmF0Y2hfaW50ZXJuYWwuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvd3JpdGVfYmF0Y2hfaW50ZXJuYWwuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li40NDIzYTdmMzE4NDI0NTdkZWE2MmQ0MzU0NzYxNmIyZjVlYzg1MmY4Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi93cml0ZV9iYXRjaF9pbnRlcm5hbC5o
CkBAIC0wLDAgKzEsNDkgQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRy
aWJ1dG9ycy4KKworI2lmbmRlZiBTVE9SQUdFX0xFVkVMREJfREJfV1JJVEVfQkFUQ0hfSU5URVJO
QUxfSF8KKyNkZWZpbmUgU1RPUkFHRV9MRVZFTERCX0RCX1dSSVRFX0JBVENIX0lOVEVSTkFMX0hf
CisKKyNpbmNsdWRlICJsZXZlbGRiL3dyaXRlX2JhdGNoLmgiCisKK25hbWVzcGFjZSBsZXZlbGRi
IHsKKworY2xhc3MgTWVtVGFibGU7CisKKy8vIFdyaXRlQmF0Y2hJbnRlcm5hbCBwcm92aWRlcyBz
dGF0aWMgbWV0aG9kcyBmb3IgbWFuaXB1bGF0aW5nIGEKKy8vIFdyaXRlQmF0Y2ggdGhhdCB3ZSBk
b24ndCB3YW50IGluIHRoZSBwdWJsaWMgV3JpdGVCYXRjaCBpbnRlcmZhY2UuCitjbGFzcyBXcml0
ZUJhdGNoSW50ZXJuYWwgeworIHB1YmxpYzoKKyAgLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgZW50
cmllcyBpbiB0aGUgYmF0Y2guCisgIHN0YXRpYyBpbnQgQ291bnQoY29uc3QgV3JpdGVCYXRjaCog
YmF0Y2gpOworCisgIC8vIFNldCB0aGUgY291bnQgZm9yIHRoZSBudW1iZXIgb2YgZW50cmllcyBp
biB0aGUgYmF0Y2guCisgIHN0YXRpYyB2b2lkIFNldENvdW50KFdyaXRlQmF0Y2gqIGJhdGNoLCBp
bnQgbik7CisKKyAgLy8gUmV0dXJuIHRoZSBzZXFldW5jZSBudW1iZXIgZm9yIHRoZSBzdGFydCBv
ZiB0aGlzIGJhdGNoLgorICBzdGF0aWMgU2VxdWVuY2VOdW1iZXIgU2VxdWVuY2UoY29uc3QgV3Jp
dGVCYXRjaCogYmF0Y2gpOworCisgIC8vIFN0b3JlIHRoZSBzcGVjaWZpZWQgbnVtYmVyIGFzIHRo
ZSBzZXFldW5jZSBudW1iZXIgZm9yIHRoZSBzdGFydCBvZgorICAvLyB0aGlzIGJhdGNoLgorICBz
dGF0aWMgdm9pZCBTZXRTZXF1ZW5jZShXcml0ZUJhdGNoKiBiYXRjaCwgU2VxdWVuY2VOdW1iZXIg
c2VxKTsKKworICBzdGF0aWMgU2xpY2UgQ29udGVudHMoY29uc3QgV3JpdGVCYXRjaCogYmF0Y2gp
IHsKKyAgICByZXR1cm4gU2xpY2UoYmF0Y2gtPnJlcF8pOworICB9CisKKyAgc3RhdGljIHNpemVf
dCBCeXRlU2l6ZShjb25zdCBXcml0ZUJhdGNoKiBiYXRjaCkgeworICAgIHJldHVybiBiYXRjaC0+
cmVwXy5zaXplKCk7CisgIH0KKworICBzdGF0aWMgdm9pZCBTZXRDb250ZW50cyhXcml0ZUJhdGNo
KiBiYXRjaCwgY29uc3QgU2xpY2UmIGNvbnRlbnRzKTsKKworICBzdGF0aWMgU3RhdHVzIEluc2Vy
dEludG8oY29uc3QgV3JpdGVCYXRjaCogYmF0Y2gsIE1lbVRhYmxlKiBtZW10YWJsZSk7CisKKyAg
c3RhdGljIHZvaWQgQXBwZW5kKFdyaXRlQmF0Y2gqIGRzdCwgY29uc3QgV3JpdGVCYXRjaCogc3Jj
KTsKK307CisKK30gIC8vIG5hbWVzcGFjZSBsZXZlbGRiCisKKworI2VuZGlmICAvLyBTVE9SQUdF
X0xFVkVMREJfREJfV1JJVEVfQkFUQ0hfSU5URVJOQUxfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xldmVsZGIvZGIvd3JpdGVfYmF0Y2hfdGVzdC5jYyBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xldmVsZGIvZGIvd3JpdGVfYmF0Y2hfdGVzdC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MDY0ZTNkODVl
YjM1ZjMyZDIwZWY0Yzc0NTZiMDg2NmQ1MjVhZWU4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvbGV2ZWxkYi9kYi93cml0ZV9iYXRjaF90ZXN0LmNjCkBAIC0wLDAgKzEsMTIw
IEBACisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCisKKyNp
bmNsdWRlICJsZXZlbGRiL2RiLmgiCisKKyNpbmNsdWRlICJkYi9tZW10YWJsZS5oIgorI2luY2x1
ZGUgImRiL3dyaXRlX2JhdGNoX2ludGVybmFsLmgiCisjaW5jbHVkZSAibGV2ZWxkYi9lbnYuaCIK
KyNpbmNsdWRlICJ1dGlsL2xvZ2dpbmcuaCIKKyNpbmNsdWRlICJ1dGlsL3Rlc3RoYXJuZXNzLmgi
CisKK25hbWVzcGFjZSBsZXZlbGRiIHsKKworc3RhdGljIHN0ZDo6c3RyaW5nIFByaW50Q29udGVu
dHMoV3JpdGVCYXRjaCogYikgeworICBJbnRlcm5hbEtleUNvbXBhcmF0b3IgY21wKEJ5dGV3aXNl
Q29tcGFyYXRvcigpKTsKKyAgTWVtVGFibGUqIG1lbSA9IG5ldyBNZW1UYWJsZShjbXApOworICBt
ZW0tPlJlZigpOworICBzdGQ6OnN0cmluZyBzdGF0ZTsKKyAgU3RhdHVzIHMgPSBXcml0ZUJhdGNo
SW50ZXJuYWw6Okluc2VydEludG8oYiwgbWVtKTsKKyAgaW50IGNvdW50ID0gMDsKKyAgSXRlcmF0
b3IqIGl0ZXIgPSBtZW0tPk5ld0l0ZXJhdG9yKCk7CisgIGZvciAoaXRlci0+U2Vla1RvRmlyc3Qo
KTsgaXRlci0+VmFsaWQoKTsgaXRlci0+TmV4dCgpKSB7CisgICAgUGFyc2VkSW50ZXJuYWxLZXkg
aWtleTsKKyAgICBBU1NFUlRfVFJVRShQYXJzZUludGVybmFsS2V5KGl0ZXItPmtleSgpLCAmaWtl
eSkpOworICAgIHN3aXRjaCAoaWtleS50eXBlKSB7CisgICAgICBjYXNlIGtUeXBlVmFsdWU6Cisg
ICAgICAgIHN0YXRlLmFwcGVuZCgiUHV0KCIpOworICAgICAgICBzdGF0ZS5hcHBlbmQoaWtleS51
c2VyX2tleS5Ub1N0cmluZygpKTsKKyAgICAgICAgc3RhdGUuYXBwZW5kKCIsICIpOworICAgICAg
ICBzdGF0ZS5hcHBlbmQoaXRlci0+dmFsdWUoKS5Ub1N0cmluZygpKTsKKyAgICAgICAgc3RhdGUu
YXBwZW5kKCIpIik7CisgICAgICAgIGNvdW50Kys7CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBrVHlwZURlbGV0aW9uOgorICAgICAgICBzdGF0ZS5hcHBlbmQoIkRlbGV0ZSgiKTsKKyAgICAg
ICAgc3RhdGUuYXBwZW5kKGlrZXkudXNlcl9rZXkuVG9TdHJpbmcoKSk7CisgICAgICAgIHN0YXRl
LmFwcGVuZCgiKSIpOworICAgICAgICBjb3VudCsrOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgc3RhdGUuYXBwZW5kKCJAIik7CisgICAgc3RhdGUuYXBwZW5kKE51bWJlclRvU3RyaW5nKGlr
ZXkuc2VxdWVuY2UpKTsKKyAgfQorICBkZWxldGUgaXRlcjsKKyAgaWYgKCFzLm9rKCkpIHsKKyAg
ICBzdGF0ZS5hcHBlbmQoIlBhcnNlRXJyb3IoKSIpOworICB9IGVsc2UgaWYgKGNvdW50ICE9IFdy
aXRlQmF0Y2hJbnRlcm5hbDo6Q291bnQoYikpIHsKKyAgICBzdGF0ZS5hcHBlbmQoIkNvdW50TWlz
bWF0Y2goKSIpOworICB9CisgIG1lbS0+VW5yZWYoKTsKKyAgcmV0dXJuIHN0YXRlOworfQorCitj
bGFzcyBXcml0ZUJhdGNoVGVzdCB7IH07CisKK1RFU1QoV3JpdGVCYXRjaFRlc3QsIEVtcHR5KSB7
CisgIFdyaXRlQmF0Y2ggYmF0Y2g7CisgIEFTU0VSVF9FUSgiIiwgUHJpbnRDb250ZW50cygmYmF0
Y2gpKTsKKyAgQVNTRVJUX0VRKDAsIFdyaXRlQmF0Y2hJbnRlcm5hbDo6Q291bnQoJmJhdGNoKSk7
Cit9CisKK1RFU1QoV3JpdGVCYXRjaFRlc3QsIE11bHRpcGxlKSB7CisgIFdyaXRlQmF0Y2ggYmF0
Y2g7CisgIGJhdGNoLlB1dChTbGljZSgiZm9vIiksIFNsaWNlKCJiYXIiKSk7CisgIGJhdGNoLkRl
bGV0ZShTbGljZSgiYm94IikpOworICBiYXRjaC5QdXQoU2xpY2UoImJheiIpLCBTbGljZSgiYm9v
IikpOworICBXcml0ZUJhdGNoSW50ZXJuYWw6OlNldFNlcXVlbmNlKCZiYXRjaCwgMTAwKTsKKyAg
QVNTRVJUX0VRKDEwMCwgV3JpdGVCYXRjaEludGVybmFsOjpTZXF1ZW5jZSgmYmF0Y2gpKTsKKyAg
QVNTRVJUX0VRKDMsIFdyaXRlQmF0Y2hJbnRlcm5hbDo6Q291bnQoJmJhdGNoKSk7CisgIEFTU0VS
VF9FUSgiUHV0KGJheiwgYm9vKUAxMDIiCisgICAgICAgICAgICAiRGVsZXRlKGJveClAMTAxIgor
ICAgICAgICAgICAgIlB1dChmb28sIGJhcilAMTAwIiwKKyAgICAgICAgICAgIFByaW50Q29udGVu
dHMoJmJhdGNoKSk7Cit9CisKK1RFU1QoV3JpdGVCYXRjaFRlc3QsIENvcnJ1cHRpb24pIHsKKyAg
V3JpdGVCYXRjaCBiYXRjaDsKKyAgYmF0Y2guUHV0KFNsaWNlKCJmb28iKSwgU2xpY2UoImJhciIp
KTsKKyAgYmF0Y2guRGVsZXRlKFNsaWNlKCJib3giKSk7CisgIFdyaXRlQmF0Y2hJbnRlcm5hbDo6
U2V0U2VxdWVuY2UoJmJhdGNoLCAyMDApOworICBTbGljZSBjb250ZW50cyA9IFdyaXRlQmF0Y2hJ
bnRlcm5hbDo6Q29udGVudHMoJmJhdGNoKTsKKyAgV3JpdGVCYXRjaEludGVybmFsOjpTZXRDb250
ZW50cygmYmF0Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2xpY2UoY29u
dGVudHMuZGF0YSgpLGNvbnRlbnRzLnNpemUoKS0xKSk7CisgIEFTU0VSVF9FUSgiUHV0KGZvbywg
YmFyKUAyMDAiCisgICAgICAgICAgICAiUGFyc2VFcnJvcigpIiwKKyAgICAgICAgICAgIFByaW50
Q29udGVudHMoJmJhdGNoKSk7Cit9CisKK1RFU1QoV3JpdGVCYXRjaFRlc3QsIEFwcGVuZCkgewor
ICBXcml0ZUJhdGNoIGIxLCBiMjsKKyAgV3JpdGVCYXRjaEludGVybmFsOjpTZXRTZXF1ZW5jZSgm
YjEsIDIwMCk7CisgIFdyaXRlQmF0Y2hJbnRlcm5hbDo6U2V0U2VxdWVuY2UoJmIyLCAzMDApOwor
ICBXcml0ZUJhdGNoSW50ZXJuYWw6OkFwcGVuZCgmYjEsICZiMik7CisgIEFTU0VSVF9FUSgiIiwK
KyAgICAgICAgICAgIFByaW50Q29udGVudHMoJmIxKSk7CisgIGIyLlB1dCgiYSIsICJ2YSIpOwor
ICBXcml0ZUJhdGNoSW50ZXJuYWw6OkFwcGVuZCgmYjEsICZiMik7CisgIEFTU0VSVF9FUSgiUHV0
KGEsIHZhKUAyMDAiLAorICAgICAgICAgICAgUHJpbnRDb250ZW50cygmYjEpKTsKKyAgYjIuQ2xl
YXIoKTsKKyAgYjIuUHV0KCJiIiwgInZiIik7CisgIFdyaXRlQmF0Y2hJbnRlcm5hbDo6QXBwZW5k
KCZiMSwgJmIyKTsKKyAgQVNTRVJUX0VRKCJQdXQoYSwgdmEpQDIwMCIKKyAgICAgICAgICAgICJQ
dXQoYiwgdmIpQDIwMSIsCisgICAgICAgICAgICBQcmludENvbnRlbnRzKCZiMSkpOworICBiMi5E
ZWxldGUoImZvbyIpOworICBXcml0ZUJhdGNoSW50ZXJuYWw6OkFwcGVuZCgmYjEsICZiMik7Cisg
IEFTU0VSVF9FUSgiUHV0KGEsIHZhKUAyMDAiCisgICAgICAgICAgICAiUHV0KGIsIHZiKUAyMDIi
CisgICAgICAgICAgICAiUHV0KGIsIHZiKUAyMDEiCisgICAgICAgICAgICAiRGVsZXRlKGZvbylA
MjAzIiwKKyAgICAgICAgICAgIFByaW50Q29udGVudHMoJmIxKSk7Cit9CisKK30gIC8vIG5hbWVz
cGFjZSBsZXZlbGRiCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikgeworICByZXR1
cm4gbGV2ZWxkYjo6dGVzdDo6UnVuQWxsVGVzdHMoKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xldmVsZGIvZG9jL2JlbmNoL2RiX2JlbmNoX3NxbGl0ZTMuY2MgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9sZXZlbGRiL2RvYy9iZW5jaC9kYl9iZW5jaF9zcWxpdGUzLmNjCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmU2M2FhYThkY2MyODk5MTUxNzZiMTI3NDlkZDllYzIxYjUwYWJhMDIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RvYy9iZW5jaC9kYl9iZW5jaF9zcWxp
dGUzLmNjCkBAIC0wLDAgKzEsNzE4IEBACisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVs
REIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBv
ZiBjb250cmlidXRvcnMuCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5o
PgorI2luY2x1ZGUgPHNxbGl0ZTMuaD4KKyNpbmNsdWRlICJ1dGlsL2hpc3RvZ3JhbS5oIgorI2lu
Y2x1ZGUgInV0aWwvcmFuZG9tLmgiCisjaW5jbHVkZSAidXRpbC90ZXN0dXRpbC5oIgorCisvLyBD
b21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBvcGVyYXRpb25zIHRvIHJ1biBpbiB0aGUgc3BlY2lmaWVk
IG9yZGVyCisvLyAgIEFjdHVhbCBiZW5jaG1hcmtzOgorLy8KKy8vICAgZmlsbHNlcSAgICAgICAt
LSB3cml0ZSBOIHZhbHVlcyBpbiBzZXF1ZW50aWFsIGtleSBvcmRlciBpbiBhc3luYyBtb2RlCisv
LyAgIGZpbGxzZXFzeW5jICAgLS0gd3JpdGUgTi8xMDAgdmFsdWVzIGluIHNlcXVlbnRpYWwga2V5
IG9yZGVyIGluIHN5bmMgbW9kZQorLy8gICBmaWxsc2VxYmF0Y2ggIC0tIGJhdGNoIHdyaXRlIE4g
dmFsdWVzIGluIHNlcXVlbnRpYWwga2V5IG9yZGVyIGluIGFzeW5jIG1vZGUKKy8vICAgZmlsbHJh
bmRvbSAgICAtLSB3cml0ZSBOIHZhbHVlcyBpbiByYW5kb20ga2V5IG9yZGVyIGluIGFzeW5jIG1v
ZGUKKy8vICAgZmlsbHJhbmRzeW5jICAtLSB3cml0ZSBOLzEwMCB2YWx1ZXMgaW4gcmFuZG9tIGtl
eSBvcmRlciBpbiBzeW5jIG1vZGUKKy8vICAgZmlsbHJhbmRiYXRjaCAtLSBiYXRjaCB3cml0ZSBO
IHZhbHVlcyBpbiBzZXF1ZW50aWFsIGtleSBvcmRlciBpbiBhc3luYyBtb2RlCisvLyAgIG92ZXJ3
cml0ZSAgICAgLS0gb3ZlcndyaXRlIE4gdmFsdWVzIGluIHJhbmRvbSBrZXkgb3JkZXIgaW4gYXN5
bmMgbW9kZQorLy8gICBmaWxscmFuZDEwMEsgIC0tIHdyaXRlIE4vMTAwMCAxMDBLIHZhbHVlcyBp
biByYW5kb20gb3JkZXIgaW4gYXN5bmMgbW9kZQorLy8gICBmaWxsc2VxMTAwSyAgIC0tIHdyaXRl
IE4vMTAwMCAxMDBLIHZhbHVlcyBpbiBzZXF1ZW50aWFsIG9yZGVyIGluIGFzeW5jIG1vZGUKKy8v
ICAgcmVhZHNlcSAgICAgICAtLSByZWFkIE4gdGltZXMgc2VxdWVudGlhbGx5CisvLyAgIHJlYWRy
YW5kb20gICAgLS0gcmVhZCBOIHRpbWVzIGluIHJhbmRvbSBvcmRlcgorLy8gICByZWFkcmFuZDEw
MEsgIC0tIHJlYWQgTi8xMDAwIDEwMEsgdmFsdWVzIGluIHNlcXVlbnRpYWwgb3JkZXIgaW4gYXN5
bmMgbW9kZQorc3RhdGljIGNvbnN0IGNoYXIqIEZMQUdTX2JlbmNobWFya3MgPQorICAgICJmaWxs
c2VxLCIKKyAgICAiZmlsbHNlcXN5bmMsIgorICAgICJmaWxsc2VxYmF0Y2gsIgorICAgICJmaWxs
cmFuZG9tLCIKKyAgICAiZmlsbHJhbmRzeW5jLCIKKyAgICAiZmlsbHJhbmRiYXRjaCwiCisgICAg
Im92ZXJ3cml0ZSwiCisgICAgIm92ZXJ3cml0ZWJhdGNoLCIKKyAgICAicmVhZHJhbmRvbSwiCisg
ICAgInJlYWRzZXEsIgorICAgICJmaWxscmFuZDEwMEssIgorICAgICJmaWxsc2VxMTAwSywiCisg
ICAgInJlYWRzZXEsIgorICAgICJyZWFkcmFuZDEwMEssIgorICAgIDsKKworLy8gTnVtYmVyIG9m
IGtleS92YWx1ZXMgdG8gcGxhY2UgaW4gZGF0YWJhc2UKK3N0YXRpYyBpbnQgRkxBR1NfbnVtID0g
MTAwMDAwMDsKKworLy8gTnVtYmVyIG9mIHJlYWQgb3BlcmF0aW9ucyB0byBkby4gIElmIG5lZ2F0
aXZlLCBkbyBGTEFHU19udW0gcmVhZHMuCitzdGF0aWMgaW50IEZMQUdTX3JlYWRzID0gLTE7CisK
Ky8vIFNpemUgb2YgZWFjaCB2YWx1ZQorc3RhdGljIGludCBGTEFHU192YWx1ZV9zaXplID0gMTAw
OworCisvLyBQcmludCBoaXN0b2dyYW0gb2Ygb3BlcmF0aW9uIHRpbWluZ3MKK3N0YXRpYyBib29s
IEZMQUdTX2hpc3RvZ3JhbSA9IGZhbHNlOworCisvLyBBcnJhbmdlIHRvIGdlbmVyYXRlIHZhbHVl
cyB0aGF0IHNocmluayB0byB0aGlzIGZyYWN0aW9uIG9mCisvLyB0aGVpciBvcmlnaW5hbCBzaXpl
IGFmdGVyIGNvbXByZXNzaW9uCitzdGF0aWMgZG91YmxlIEZMQUdTX2NvbXByZXNzaW9uX3JhdGlv
ID0gMC41OworCisvLyBQYWdlIHNpemUuIERlZmF1bHQgMSBLQi4KK3N0YXRpYyBpbnQgRkxBR1Nf
cGFnZV9zaXplID0gMTAyNDsKKworLy8gTnVtYmVyIG9mIHBhZ2VzLgorLy8gRGVmYXVsdCBjYWNo
ZSBzaXplID0gRkxBR1NfcGFnZV9zaXplICogRkxBR1NfbnVtX3BhZ2VzID0gNCBNQi4KK3N0YXRp
YyBpbnQgRkxBR1NfbnVtX3BhZ2VzID0gNDA5NjsKKworLy8gSWYgdHJ1ZSwgZG8gbm90IGRlc3Ry
b3kgdGhlIGV4aXN0aW5nIGRhdGFiYXNlLiAgSWYgeW91IHNldCB0aGlzCisvLyBmbGFnIGFuZCBh
bHNvIHNwZWNpZnkgYSBiZW5jaG1hcmsgdGhhdCB3YW50cyBhIGZyZXNoIGRhdGFiYXNlLCB0aGF0
CisvLyBiZW5jaG1hcmsgd2lsbCBmYWlsLgorc3RhdGljIGJvb2wgRkxBR1NfdXNlX2V4aXN0aW5n
X2RiID0gZmFsc2U7CisKKy8vIElmIHRydWUsIHdlIGFsbG93IGJhdGNoIHdyaXRlcyB0byBvY2N1
cgorc3RhdGljIGJvb2wgRkxBR1NfdHJhbnNhY3Rpb24gPSB0cnVlOworCisvLyBJZiB0cnVlLCB3
ZSBlbmFibGUgV3JpdGUtQWhlYWQgTG9nZ2luZworc3RhdGljIGJvb2wgRkxBR1NfV0FMX2VuYWJs
ZWQgPSB0cnVlOworCisvLyBVc2UgdGhlIGRiIHdpdGggdGhlIGZvbGxvd2luZyBuYW1lLgorc3Rh
dGljIGNvbnN0IGNoYXIqIEZMQUdTX2RiID0gTlVMTDsKKworaW5saW5lCitzdGF0aWMgdm9pZCBF
eGVjRXJyb3JDaGVjayhpbnQgc3RhdHVzLCBjaGFyICplcnJfbXNnKSB7CisgIGlmIChzdGF0dXMg
IT0gU1FMSVRFX09LKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJTUUwgZXJyb3I6ICVzXG4iLCBl
cnJfbXNnKTsKKyAgICBzcWxpdGUzX2ZyZWUoZXJyX21zZyk7CisgICAgZXhpdCgxKTsKKyAgfQor
fQorCitpbmxpbmUKK3N0YXRpYyB2b2lkIFN0ZXBFcnJvckNoZWNrKGludCBzdGF0dXMpIHsKKyAg
aWYgKHN0YXR1cyAhPSBTUUxJVEVfRE9ORSkgeworICAgIGZwcmludGYoc3RkZXJyLCAiU1FMIHN0
ZXAgZXJyb3I6IHN0YXR1cyA9ICVkXG4iLCBzdGF0dXMpOworICAgIGV4aXQoMSk7CisgIH0KK30K
KworaW5saW5lCitzdGF0aWMgdm9pZCBFcnJvckNoZWNrKGludCBzdGF0dXMpIHsKKyAgaWYgKHN0
YXR1cyAhPSBTUUxJVEVfT0spIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgInNxbGl0ZTMgZXJyb3I6
IHN0YXR1cyA9ICVkXG4iLCBzdGF0dXMpOworICAgIGV4aXQoMSk7CisgIH0KK30KKworaW5saW5l
CitzdGF0aWMgdm9pZCBXYWxDaGVja3BvaW50KHNxbGl0ZTMqIGRiXykgeworICAvLyBGbHVzaCBh
bGwgd3JpdGVzIHRvIGRpc2sKKyAgaWYgKEZMQUdTX1dBTF9lbmFibGVkKSB7CisgICAgc3FsaXRl
M193YWxfY2hlY2twb2ludF92MihkYl8sIE5VTEwsIFNRTElURV9DSEVDS1BPSU5UX0ZVTEwsIE5V
TEwsIE5VTEwpOworICB9Cit9CisKK25hbWVzcGFjZSBsZXZlbGRiIHsKKworLy8gSGVscGVyIGZv
ciBxdWlja2x5IGdlbmVyYXRpbmcgcmFuZG9tIGRhdGEuCituYW1lc3BhY2UgeworY2xhc3MgUmFu
ZG9tR2VuZXJhdG9yIHsKKyBwcml2YXRlOgorICBzdGQ6OnN0cmluZyBkYXRhXzsKKyAgaW50IHBv
c187CisKKyBwdWJsaWM6CisgIFJhbmRvbUdlbmVyYXRvcigpIHsKKyAgICAvLyBXZSB1c2UgYSBs
aW1pdGVkIGFtb3VudCBvZiBkYXRhIG92ZXIgYW5kIG92ZXIgYWdhaW4gYW5kIGVuc3VyZQorICAg
IC8vIHRoYXQgaXQgaXMgbGFyZ2VyIHRoYW4gdGhlIGNvbXByZXNzaW9uIHdpbmRvdyAoMzJLQiks
IGFuZCBhbHNvCisgICAgLy8gbGFyZ2UgZW5vdWdoIHRvIHNlcnZlIGFsbCB0eXBpY2FsIHZhbHVl
IHNpemVzIHdlIHdhbnQgdG8gd3JpdGUuCisgICAgUmFuZG9tIHJuZCgzMDEpOworICAgIHN0ZDo6
c3RyaW5nIHBpZWNlOworICAgIHdoaWxlIChkYXRhXy5zaXplKCkgPCAxMDQ4NTc2KSB7CisgICAg
ICAvLyBBZGQgYSBzaG9ydCBmcmFnbWVudCB0aGF0IGlzIGFzIGNvbXByZXNzaWJsZSBhcyBzcGVj
aWZpZWQKKyAgICAgIC8vIGJ5IEZMQUdTX2NvbXByZXNzaW9uX3JhdGlvLgorICAgICAgdGVzdDo6
Q29tcHJlc3NpYmxlU3RyaW5nKCZybmQsIEZMQUdTX2NvbXByZXNzaW9uX3JhdGlvLCAxMDAsICZw
aWVjZSk7CisgICAgICBkYXRhXy5hcHBlbmQocGllY2UpOworICAgIH0KKyAgICBwb3NfID0gMDsK
KyAgfQorCisgIFNsaWNlIEdlbmVyYXRlKGludCBsZW4pIHsKKyAgICBpZiAocG9zXyArIGxlbiA+
IGRhdGFfLnNpemUoKSkgeworICAgICAgcG9zXyA9IDA7CisgICAgICBhc3NlcnQobGVuIDwgZGF0
YV8uc2l6ZSgpKTsKKyAgICB9CisgICAgcG9zXyArPSBsZW47CisgICAgcmV0dXJuIFNsaWNlKGRh
dGFfLmRhdGEoKSArIHBvc18gLSBsZW4sIGxlbik7CisgIH0KK307CisKK3N0YXRpYyBTbGljZSBU
cmltU3BhY2UoU2xpY2UgcykgeworICBpbnQgc3RhcnQgPSAwOworICB3aGlsZSAoc3RhcnQgPCBz
LnNpemUoKSAmJiBpc3NwYWNlKHNbc3RhcnRdKSkgeworICAgIHN0YXJ0Kys7CisgIH0KKyAgaW50
IGxpbWl0ID0gcy5zaXplKCk7CisgIHdoaWxlIChsaW1pdCA+IHN0YXJ0ICYmIGlzc3BhY2Uoc1ts
aW1pdC0xXSkpIHsKKyAgICBsaW1pdC0tOworICB9CisgIHJldHVybiBTbGljZShzLmRhdGEoKSAr
IHN0YXJ0LCBsaW1pdCAtIHN0YXJ0KTsKK30KKworfSAgLy8gbmFtZXNwYWNlCisKK2NsYXNzIEJl
bmNobWFyayB7CisgcHJpdmF0ZToKKyAgc3FsaXRlMyogZGJfOworICBpbnQgZGJfbnVtXzsKKyAg
aW50IG51bV87CisgIGludCByZWFkc187CisgIGRvdWJsZSBzdGFydF87CisgIGRvdWJsZSBsYXN0
X29wX2ZpbmlzaF87CisgIGludDY0X3QgYnl0ZXNfOworICBzdGQ6OnN0cmluZyBtZXNzYWdlXzsK
KyAgSGlzdG9ncmFtIGhpc3RfOworICBSYW5kb21HZW5lcmF0b3IgZ2VuXzsKKyAgUmFuZG9tIHJh
bmRfOworCisgIC8vIFN0YXRlIGtlcHQgZm9yIHByb2dyZXNzIG1lc3NhZ2VzCisgIGludCBkb25l
XzsKKyAgaW50IG5leHRfcmVwb3J0XzsgICAgIC8vIFdoZW4gdG8gcmVwb3J0IG5leHQKKworICB2
b2lkIFByaW50SGVhZGVyKCkgeworICAgIGNvbnN0IGludCBrS2V5U2l6ZSA9IDE2OworICAgIFBy
aW50RW52aXJvbm1lbnQoKTsKKyAgICBmcHJpbnRmKHN0ZG91dCwgIktleXM6ICAgICAgICVkIGJ5
dGVzIGVhY2hcbiIsIGtLZXlTaXplKTsKKyAgICBmcHJpbnRmKHN0ZG91dCwgIlZhbHVlczogICAg
ICVkIGJ5dGVzIGVhY2hcbiIsIEZMQUdTX3ZhbHVlX3NpemUpOworICAgIGZwcmludGYoc3Rkb3V0
LCAiRW50cmllczogICAgJWRcbiIsIG51bV8pOworICAgIGZwcmludGYoc3Rkb3V0LCAiUmF3U2l6
ZTogICAgJS4xZiBNQiAoZXN0aW1hdGVkKVxuIiwKKyAgICAgICAgICAgICgoc3RhdGljX2Nhc3Q8
aW50NjRfdD4oa0tleVNpemUgKyBGTEFHU192YWx1ZV9zaXplKSAqIG51bV8pCisgICAgICAgICAg
ICAgLyAxMDQ4NTc2LjApKTsKKyAgICBQcmludFdhcm5pbmdzKCk7CisgICAgZnByaW50ZihzdGRv
dXQsICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIp
OworICB9CisKKyAgdm9pZCBQcmludFdhcm5pbmdzKCkgeworI2lmIGRlZmluZWQoX19HTlVDX18p
ICYmICFkZWZpbmVkKF9fT1BUSU1JWkVfXykKKyAgICBmcHJpbnRmKHN0ZG91dCwKKyAgICAgICAg
ICAgICJXQVJOSU5HOiBPcHRpbWl6YXRpb24gaXMgZGlzYWJsZWQ6IGJlbmNobWFya3MgdW5uZWNl
c3NhcmlseSBzbG93XG4iCisgICAgICAgICAgICApOworI2VuZGlmCisjaWZuZGVmIE5ERUJVRwor
ICAgIGZwcmludGYoc3Rkb3V0LAorICAgICAgICAgICAgIldBUk5JTkc6IEFzc2VydGlvbnMgYXJl
IGVuYWJsZWQ7IGJlbmNobWFya3MgdW5uZWNlc3NhcmlseSBzbG93XG4iKTsKKyNlbmRpZgorICB9
CisKKyAgdm9pZCBQcmludEVudmlyb25tZW50KCkgeworICAgIGZwcmludGYoc3RkZXJyLCAiU1FM
aXRlOiAgICAgdmVyc2lvbiAlc1xuIiwgU1FMSVRFX1ZFUlNJT04pOworCisjaWYgZGVmaW5lZChf
X2xpbnV4KQorICAgIHRpbWVfdCBub3cgPSB0aW1lKE5VTEwpOworICAgIGZwcmludGYoc3RkZXJy
LCAiRGF0ZTogICAgICAgJXMiLCBjdGltZSgmbm93KSk7ICAvLyBjdGltZSgpIGFkZHMgbmV3bGlu
ZQorCisgICAgRklMRSogY3B1aW5mbyA9IGZvcGVuKCIvcHJvYy9jcHVpbmZvIiwgInIiKTsKKyAg
ICBpZiAoY3B1aW5mbyAhPSBOVUxMKSB7CisgICAgICBjaGFyIGxpbmVbMTAwMF07CisgICAgICBp
bnQgbnVtX2NwdXMgPSAwOworICAgICAgc3RkOjpzdHJpbmcgY3B1X3R5cGU7CisgICAgICBzdGQ6
OnN0cmluZyBjYWNoZV9zaXplOworICAgICAgd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5l
KSwgY3B1aW5mbykgIT0gTlVMTCkgeworICAgICAgICBjb25zdCBjaGFyKiBzZXAgPSBzdHJjaHIo
bGluZSwgJzonKTsKKyAgICAgICAgaWYgKHNlcCA9PSBOVUxMKSB7CisgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIH0KKyAgICAgICAgU2xpY2Uga2V5ID0gVHJpbVNwYWNlKFNsaWNlKGxpbmUs
IHNlcCAtIDEgLSBsaW5lKSk7CisgICAgICAgIFNsaWNlIHZhbCA9IFRyaW1TcGFjZShTbGljZShz
ZXAgKyAxKSk7CisgICAgICAgIGlmIChrZXkgPT0gIm1vZGVsIG5hbWUiKSB7CisgICAgICAgICAg
KytudW1fY3B1czsKKyAgICAgICAgICBjcHVfdHlwZSA9IHZhbC5Ub1N0cmluZygpOworICAgICAg
ICB9IGVsc2UgaWYgKGtleSA9PSAiY2FjaGUgc2l6ZSIpIHsKKyAgICAgICAgICBjYWNoZV9zaXpl
ID0gdmFsLlRvU3RyaW5nKCk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGZjbG9zZShjcHVp
bmZvKTsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiQ1BVOiAgICAgICAgJWQgKiAlc1xuIiwgbnVt
X2NwdXMsIGNwdV90eXBlLmNfc3RyKCkpOworICAgICAgZnByaW50ZihzdGRlcnIsICJDUFVDYWNo
ZTogICAlc1xuIiwgY2FjaGVfc2l6ZS5jX3N0cigpKTsKKyAgICB9CisjZW5kaWYKKyAgfQorCisg
IHZvaWQgU3RhcnQoKSB7CisgICAgc3RhcnRfID0gRW52OjpEZWZhdWx0KCktPk5vd01pY3Jvcygp
ICogMWUtNjsKKyAgICBieXRlc18gPSAwOworICAgIG1lc3NhZ2VfLmNsZWFyKCk7CisgICAgbGFz
dF9vcF9maW5pc2hfID0gc3RhcnRfOworICAgIGhpc3RfLkNsZWFyKCk7CisgICAgZG9uZV8gPSAw
OworICAgIG5leHRfcmVwb3J0XyA9IDEwMDsKKyAgfQorCisgIHZvaWQgRmluaXNoZWRTaW5nbGVP
cCgpIHsKKyAgICBpZiAoRkxBR1NfaGlzdG9ncmFtKSB7CisgICAgICBkb3VibGUgbm93ID0gRW52
OjpEZWZhdWx0KCktPk5vd01pY3JvcygpICogMWUtNjsKKyAgICAgIGRvdWJsZSBtaWNyb3MgPSAo
bm93IC0gbGFzdF9vcF9maW5pc2hfKSAqIDFlNjsKKyAgICAgIGhpc3RfLkFkZChtaWNyb3MpOwor
ICAgICAgaWYgKG1pY3JvcyA+IDIwMDAwKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAibG9u
ZyBvcDogJS4xZiBtaWNyb3MlMzBzXHIiLCBtaWNyb3MsICIiKTsKKyAgICAgICAgZmZsdXNoKHN0
ZGVycik7CisgICAgICB9CisgICAgICBsYXN0X29wX2ZpbmlzaF8gPSBub3c7CisgICAgfQorCisg
ICAgZG9uZV8rKzsKKyAgICBpZiAoZG9uZV8gPj0gbmV4dF9yZXBvcnRfKSB7CisgICAgICBpZiAg
ICAgIChuZXh0X3JlcG9ydF8gPCAxMDAwKSAgIG5leHRfcmVwb3J0XyArPSAxMDA7CisgICAgICBl
bHNlIGlmIChuZXh0X3JlcG9ydF8gPCA1MDAwKSAgIG5leHRfcmVwb3J0XyArPSA1MDA7CisgICAg
ICBlbHNlIGlmIChuZXh0X3JlcG9ydF8gPCAxMDAwMCkgIG5leHRfcmVwb3J0XyArPSAxMDAwOwor
ICAgICAgZWxzZSBpZiAobmV4dF9yZXBvcnRfIDwgNTAwMDApICBuZXh0X3JlcG9ydF8gKz0gNTAw
MDsKKyAgICAgIGVsc2UgaWYgKG5leHRfcmVwb3J0XyA8IDEwMDAwMCkgbmV4dF9yZXBvcnRfICs9
IDEwMDAwOworICAgICAgZWxzZSBpZiAobmV4dF9yZXBvcnRfIDwgNTAwMDAwKSBuZXh0X3JlcG9y
dF8gKz0gNTAwMDA7CisgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRf
cmVwb3J0XyArPSAxMDAwMDA7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIi4uLiBmaW5pc2hlZCAl
ZCBvcHMlMzBzXHIiLCBkb25lXywgIiIpOworICAgICAgZmZsdXNoKHN0ZGVycik7CisgICAgfQor
ICB9CisKKyAgdm9pZCBTdG9wKGNvbnN0IFNsaWNlJiBuYW1lKSB7CisgICAgZG91YmxlIGZpbmlz
aCA9IEVudjo6RGVmYXVsdCgpLT5Ob3dNaWNyb3MoKSAqIDFlLTY7CisKKyAgICAvLyBQcmV0ZW5k
IGF0IGxlYXN0IG9uZSBvcCB3YXMgZG9uZSBpbiBjYXNlIHdlIGFyZSBydW5uaW5nIGEgYmVuY2ht
YXJrCisgICAgLy8gdGhhdCBkb2VzIG5vdCBjYWxsIEZpbmlzaGVkU2luZ2xlT3AoKS4KKyAgICBp
ZiAoZG9uZV8gPCAxKSBkb25lXyA9IDE7CisKKyAgICBpZiAoYnl0ZXNfID4gMCkgeworICAgICAg
Y2hhciByYXRlWzEwMF07CisgICAgICBzbnByaW50ZihyYXRlLCBzaXplb2YocmF0ZSksICIlNi4x
ZiBNQi9zIiwKKyAgICAgICAgICAgICAgIChieXRlc18gLyAxMDQ4NTc2LjApIC8gKGZpbmlzaCAt
IHN0YXJ0XykpOworICAgICAgaWYgKCFtZXNzYWdlXy5lbXB0eSgpKSB7CisgICAgICAgIG1lc3Nh
Z2VfICA9IHN0ZDo6c3RyaW5nKHJhdGUpICsgIiAiICsgbWVzc2FnZV87CisgICAgICB9IGVsc2Ug
eworICAgICAgICBtZXNzYWdlXyA9IHJhdGU7CisgICAgICB9CisgICAgfQorCisgICAgZnByaW50
ZihzdGRvdXQsICIlLTEycyA6ICUxMS4zZiBtaWNyb3Mvb3A7JXMlc1xuIiwKKyAgICAgICAgICAg
IG5hbWUuVG9TdHJpbmcoKS5jX3N0cigpLAorICAgICAgICAgICAgKGZpbmlzaCAtIHN0YXJ0Xykg
KiAxZTYgLyBkb25lXywKKyAgICAgICAgICAgIChtZXNzYWdlXy5lbXB0eSgpID8gIiIgOiAiICIp
LAorICAgICAgICAgICAgbWVzc2FnZV8uY19zdHIoKSk7CisgICAgaWYgKEZMQUdTX2hpc3RvZ3Jh
bSkgeworICAgICAgZnByaW50ZihzdGRvdXQsICJNaWNyb3NlY29uZHMgcGVyIG9wOlxuJXNcbiIs
IGhpc3RfLlRvU3RyaW5nKCkuY19zdHIoKSk7CisgICAgfQorICAgIGZmbHVzaChzdGRvdXQpOwor
ICB9CisKKyBwdWJsaWM6CisgIGVudW0gT3JkZXIgeworICAgIFNFUVVFTlRJQUwsCisgICAgUkFO
RE9NCisgIH07CisgIGVudW0gREJTdGF0ZSB7CisgICAgRlJFU0gsCisgICAgRVhJU1RJTkcKKyAg
fTsKKworICBCZW5jaG1hcmsoKQorICA6IGRiXyhOVUxMKSwKKyAgICBkYl9udW1fKDApLAorICAg
IG51bV8oRkxBR1NfbnVtKSwKKyAgICByZWFkc18oRkxBR1NfcmVhZHMgPCAwID8gRkxBR1NfbnVt
IDogRkxBR1NfcmVhZHMpLAorICAgIGJ5dGVzXygwKSwKKyAgICByYW5kXygzMDEpIHsKKyAgICBz
dGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZmlsZXM7CisgICAgc3RkOjpzdHJpbmcgdGVzdF9kaXI7
CisgICAgRW52OjpEZWZhdWx0KCktPkdldFRlc3REaXJlY3RvcnkoJnRlc3RfZGlyKTsKKyAgICBF
bnY6OkRlZmF1bHQoKS0+R2V0Q2hpbGRyZW4odGVzdF9kaXIsICZmaWxlcyk7CisgICAgaWYgKCFG
TEFHU191c2VfZXhpc3RpbmdfZGIpIHsKKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZXMu
c2l6ZSgpOyBpKyspIHsKKyAgICAgICAgaWYgKFNsaWNlKGZpbGVzW2ldKS5zdGFydHNfd2l0aCgi
ZGJiZW5jaF9zcWxpdGUzIikpIHsKKyAgICAgICAgICBzdGQ6OnN0cmluZyBmaWxlX25hbWUodGVz
dF9kaXIpOworICAgICAgICAgIGZpbGVfbmFtZSArPSAiLyI7CisgICAgICAgICAgZmlsZV9uYW1l
ICs9IGZpbGVzW2ldOworICAgICAgICAgIEVudjo6RGVmYXVsdCgpLT5EZWxldGVGaWxlKGZpbGVf
bmFtZS5jX3N0cigpKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisgIH5CZW5j
aG1hcmsoKSB7CisgICAgaW50IHN0YXR1cyA9IHNxbGl0ZTNfY2xvc2UoZGJfKTsKKyAgICBFcnJv
ckNoZWNrKHN0YXR1cyk7CisgIH0KKworICB2b2lkIFJ1bigpIHsKKyAgICBQcmludEhlYWRlcigp
OworICAgIE9wZW4oKTsKKworICAgIGNvbnN0IGNoYXIqIGJlbmNobWFya3MgPSBGTEFHU19iZW5j
aG1hcmtzOworICAgIHdoaWxlIChiZW5jaG1hcmtzICE9IE5VTEwpIHsKKyAgICAgIGNvbnN0IGNo
YXIqIHNlcCA9IHN0cmNocihiZW5jaG1hcmtzLCAnLCcpOworICAgICAgU2xpY2UgbmFtZTsKKyAg
ICAgIGlmIChzZXAgPT0gTlVMTCkgeworICAgICAgICBuYW1lID0gYmVuY2htYXJrczsKKyAgICAg
ICAgYmVuY2htYXJrcyA9IE5VTEw7CisgICAgICB9IGVsc2UgeworICAgICAgICBuYW1lID0gU2xp
Y2UoYmVuY2htYXJrcywgc2VwIC0gYmVuY2htYXJrcyk7CisgICAgICAgIGJlbmNobWFya3MgPSBz
ZXAgKyAxOworICAgICAgfQorCisgICAgICBieXRlc18gPSAwOworICAgICAgU3RhcnQoKTsKKwor
ICAgICAgYm9vbCBrbm93biA9IHRydWU7CisgICAgICBib29sIHdyaXRlX3N5bmMgPSBmYWxzZTsK
KyAgICAgIGlmIChuYW1lID09IFNsaWNlKCJmaWxsc2VxIikpIHsKKyAgICAgICAgV3JpdGUod3Jp
dGVfc3luYywgU0VRVUVOVElBTCwgRlJFU0gsIG51bV8sIEZMQUdTX3ZhbHVlX3NpemUsIDEpOwor
ICAgICAgICBXYWxDaGVja3BvaW50KGRiXyk7CisgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gU2xp
Y2UoImZpbGxzZXFiYXRjaCIpKSB7CisgICAgICAgIFdyaXRlKHdyaXRlX3N5bmMsIFNFUVVFTlRJ
QUwsIEZSRVNILCBudW1fLCBGTEFHU192YWx1ZV9zaXplLCAxMDAwKTsKKyAgICAgICAgV2FsQ2hl
Y2twb2ludChkYl8pOworICAgICAgfSBlbHNlIGlmIChuYW1lID09IFNsaWNlKCJmaWxscmFuZG9t
IikpIHsKKyAgICAgICAgV3JpdGUod3JpdGVfc3luYywgUkFORE9NLCBGUkVTSCwgbnVtXywgRkxB
R1NfdmFsdWVfc2l6ZSwgMSk7CisgICAgICAgIFdhbENoZWNrcG9pbnQoZGJfKTsKKyAgICAgIH0g
ZWxzZSBpZiAobmFtZSA9PSBTbGljZSgiZmlsbHJhbmRiYXRjaCIpKSB7CisgICAgICAgIFdyaXRl
KHdyaXRlX3N5bmMsIFJBTkRPTSwgRlJFU0gsIG51bV8sIEZMQUdTX3ZhbHVlX3NpemUsIDEwMDAp
OworICAgICAgICBXYWxDaGVja3BvaW50KGRiXyk7CisgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0g
U2xpY2UoIm92ZXJ3cml0ZSIpKSB7CisgICAgICAgIFdyaXRlKHdyaXRlX3N5bmMsIFJBTkRPTSwg
RVhJU1RJTkcsIG51bV8sIEZMQUdTX3ZhbHVlX3NpemUsIDEpOworICAgICAgICBXYWxDaGVja3Bv
aW50KGRiXyk7CisgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gU2xpY2UoIm92ZXJ3cml0ZWJhdGNo
IikpIHsKKyAgICAgICAgV3JpdGUod3JpdGVfc3luYywgUkFORE9NLCBFWElTVElORywgbnVtXywg
RkxBR1NfdmFsdWVfc2l6ZSwgMTAwMCk7CisgICAgICAgIFdhbENoZWNrcG9pbnQoZGJfKTsKKyAg
ICAgIH0gZWxzZSBpZiAobmFtZSA9PSBTbGljZSgiZmlsbHJhbmRzeW5jIikpIHsKKyAgICAgICAg
d3JpdGVfc3luYyA9IHRydWU7CisgICAgICAgIFdyaXRlKHdyaXRlX3N5bmMsIFJBTkRPTSwgRlJF
U0gsIG51bV8gLyAxMDAsIEZMQUdTX3ZhbHVlX3NpemUsIDEpOworICAgICAgICBXYWxDaGVja3Bv
aW50KGRiXyk7CisgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gU2xpY2UoImZpbGxzZXFzeW5jIikp
IHsKKyAgICAgICAgd3JpdGVfc3luYyA9IHRydWU7CisgICAgICAgIFdyaXRlKHdyaXRlX3N5bmMs
IFNFUVVFTlRJQUwsIEZSRVNILCBudW1fIC8gMTAwLCBGTEFHU192YWx1ZV9zaXplLCAxKTsKKyAg
ICAgICAgV2FsQ2hlY2twb2ludChkYl8pOworICAgICAgfSBlbHNlIGlmIChuYW1lID09IFNsaWNl
KCJmaWxscmFuZDEwMEsiKSkgeworICAgICAgICBXcml0ZSh3cml0ZV9zeW5jLCBSQU5ET00sIEZS
RVNILCBudW1fIC8gMTAwMCwgMTAwICogMTAwMCwgMSk7CisgICAgICAgIFdhbENoZWNrcG9pbnQo
ZGJfKTsKKyAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSBTbGljZSgiZmlsbHNlcTEwMEsiKSkgewor
ICAgICAgICBXcml0ZSh3cml0ZV9zeW5jLCBTRVFVRU5USUFMLCBGUkVTSCwgbnVtXyAvIDEwMDAs
IDEwMCAqIDEwMDAsIDEpOworICAgICAgICBXYWxDaGVja3BvaW50KGRiXyk7CisgICAgICB9IGVs
c2UgaWYgKG5hbWUgPT0gU2xpY2UoInJlYWRzZXEiKSkgeworICAgICAgICBSZWFkU2VxdWVudGlh
bCgpOworICAgICAgfSBlbHNlIGlmIChuYW1lID09IFNsaWNlKCJyZWFkcmFuZG9tIikpIHsKKyAg
ICAgICAgUmVhZChSQU5ET00sIDEpOworICAgICAgfSBlbHNlIGlmIChuYW1lID09IFNsaWNlKCJy
ZWFkcmFuZDEwMEsiKSkgeworICAgICAgICBpbnQgbiA9IHJlYWRzXzsKKyAgICAgICAgcmVhZHNf
IC89IDEwMDA7CisgICAgICAgIFJlYWQoUkFORE9NLCAxKTsKKyAgICAgICAgcmVhZHNfID0gbjsK
KyAgICAgIH0gZWxzZSB7CisgICAgICAgIGtub3duID0gZmFsc2U7CisgICAgICAgIGlmIChuYW1l
ICE9IFNsaWNlKCkpIHsgIC8vIE5vIGVycm9yIG1lc3NhZ2UgZm9yIGVtcHR5IG5hbWUKKyAgICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgInVua25vd24gYmVuY2htYXJrICclcydcbiIsIG5hbWUuVG9T
dHJpbmcoKS5jX3N0cigpKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgaWYgKGtub3duKSB7
CisgICAgICAgIFN0b3AobmFtZSk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgdm9pZCBPcGVu
KCkgeworICAgIGFzc2VydChkYl8gPT0gTlVMTCk7CisKKyAgICBpbnQgc3RhdHVzOworICAgIGNo
YXIgZmlsZV9uYW1lWzEwMF07CisgICAgY2hhciogZXJyX21zZyA9IE5VTEw7CisgICAgZGJfbnVt
XysrOworCisgICAgLy8gT3BlbiBkYXRhYmFzZQorICAgIHN0ZDo6c3RyaW5nIHRtcF9kaXI7Cisg
ICAgRW52OjpEZWZhdWx0KCktPkdldFRlc3REaXJlY3RvcnkoJnRtcF9kaXIpOworICAgIHNucHJp
bnRmKGZpbGVfbmFtZSwgc2l6ZW9mKGZpbGVfbmFtZSksCisgICAgICAgICAgICAgIiVzL2RiYmVu
Y2hfc3FsaXRlMy0lZC5kYiIsCisgICAgICAgICAgICAgdG1wX2Rpci5jX3N0cigpLAorICAgICAg
ICAgICAgIGRiX251bV8pOworICAgIHN0YXR1cyA9IHNxbGl0ZTNfb3BlbihmaWxlX25hbWUsICZk
Yl8pOworICAgIGlmIChzdGF0dXMpIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAib3BlbiBlcnJv
cjogJXNcbiIsIHNxbGl0ZTNfZXJybXNnKGRiXykpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisK
KyAgICAvLyBDaGFuZ2UgU1FMaXRlIGNhY2hlIHNpemUKKyAgICBjaGFyIGNhY2hlX3NpemVbMTAw
XTsKKyAgICBzbnByaW50ZihjYWNoZV9zaXplLCBzaXplb2YoY2FjaGVfc2l6ZSksICJQUkFHTUEg
Y2FjaGVfc2l6ZSA9ICVkIiwKKyAgICAgICAgICAgICBGTEFHU19udW1fcGFnZXMpOworICAgIHN0
YXR1cyA9IHNxbGl0ZTNfZXhlYyhkYl8sIGNhY2hlX3NpemUsIE5VTEwsIE5VTEwsICZlcnJfbXNn
KTsKKyAgICBFeGVjRXJyb3JDaGVjayhzdGF0dXMsIGVycl9tc2cpOworCisgICAgLy8gRkxBR1Nf
cGFnZV9zaXplIGlzIGRlZmF1bHRlZCB0byAxMDI0CisgICAgaWYgKEZMQUdTX3BhZ2Vfc2l6ZSAh
PSAxMDI0KSB7CisgICAgICBjaGFyIHBhZ2Vfc2l6ZVsxMDBdOworICAgICAgc25wcmludGYocGFn
ZV9zaXplLCBzaXplb2YocGFnZV9zaXplKSwgIlBSQUdNQSBwYWdlX3NpemUgPSAlZCIsCisgICAg
ICAgICAgICAgICBGTEFHU19wYWdlX3NpemUpOworICAgICAgc3RhdHVzID0gc3FsaXRlM19leGVj
KGRiXywgcGFnZV9zaXplLCBOVUxMLCBOVUxMLCAmZXJyX21zZyk7CisgICAgICBFeGVjRXJyb3JD
aGVjayhzdGF0dXMsIGVycl9tc2cpOworICAgIH0KKworICAgIC8vIENoYW5nZSBqb3VybmFsIG1v
ZGUgdG8gV0FMIGlmIFdBTCBlbmFibGVkIGZsYWcgaXMgb24KKyAgICBpZiAoRkxBR1NfV0FMX2Vu
YWJsZWQpIHsKKyAgICAgIHN0ZDo6c3RyaW5nIFdBTF9zdG10ID0gIlBSQUdNQSBqb3VybmFsX21v
ZGUgPSBXQUwiOworCisgICAgICAvLyBMZXZlbERCJ3MgZGVmYXVsdCBjYWNoZSBzaXplIGlzIGEg
Y29tYmluZWQgNCBNQgorICAgICAgc3RkOjpzdHJpbmcgV0FMX2NoZWNrcG9pbnQgPSAiUFJBR01B
IHdhbF9hdXRvY2hlY2twb2ludCA9IDQwOTYiOworICAgICAgc3RhdHVzID0gc3FsaXRlM19leGVj
KGRiXywgV0FMX3N0bXQuY19zdHIoKSwgTlVMTCwgTlVMTCwgJmVycl9tc2cpOworICAgICAgRXhl
Y0Vycm9yQ2hlY2soc3RhdHVzLCBlcnJfbXNnKTsKKyAgICAgIHN0YXR1cyA9IHNxbGl0ZTNfZXhl
YyhkYl8sIFdBTF9jaGVja3BvaW50LmNfc3RyKCksIE5VTEwsIE5VTEwsICZlcnJfbXNnKTsKKyAg
ICAgIEV4ZWNFcnJvckNoZWNrKHN0YXR1cywgZXJyX21zZyk7CisgICAgfQorCisgICAgLy8gQ2hh
bmdlIGxvY2tpbmcgbW9kZSB0byBleGNsdXNpdmUgYW5kIGNyZWF0ZSB0YWJsZXMvaW5kZXggZm9y
IGRhdGFiYXNlCisgICAgc3RkOjpzdHJpbmcgbG9ja2luZ19zdG10ID0gIlBSQUdNQSBsb2NraW5n
X21vZGUgPSBFWENMVVNJVkUiOworICAgIHN0ZDo6c3RyaW5nIGNyZWF0ZV9zdG10ID0KKyAgICAg
ICAgICAiQ1JFQVRFIFRBQkxFIHRlc3QgKGtleSBibG9iLCB2YWx1ZSBibG9iLCBQUklNQVJZIEtF
WShrZXkpKSI7CisgICAgc3RkOjpzdHJpbmcgc3RtdF9hcnJheVtdID0geyBsb2NraW5nX3N0bXQs
IGNyZWF0ZV9zdG10IH07CisgICAgaW50IHN0bXRfYXJyYXlfbGVuZ3RoID0gc2l6ZW9mKHN0bXRf
YXJyYXkpIC8gc2l6ZW9mKHN0ZDo6c3RyaW5nKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0
bXRfYXJyYXlfbGVuZ3RoOyBpKyspIHsKKyAgICAgIHN0YXR1cyA9IHNxbGl0ZTNfZXhlYyhkYl8s
IHN0bXRfYXJyYXlbaV0uY19zdHIoKSwgTlVMTCwgTlVMTCwgJmVycl9tc2cpOworICAgICAgRXhl
Y0Vycm9yQ2hlY2soc3RhdHVzLCBlcnJfbXNnKTsKKyAgICB9CisgIH0KKworICB2b2lkIFdyaXRl
KGJvb2wgd3JpdGVfc3luYywgT3JkZXIgb3JkZXIsIERCU3RhdGUgc3RhdGUsCisgICAgICAgICAg
ICAgaW50IG51bV9lbnRyaWVzLCBpbnQgdmFsdWVfc2l6ZSwgaW50IGVudHJpZXNfcGVyX2JhdGNo
KSB7CisgICAgLy8gQ3JlYXRlIG5ldyBkYXRhYmFzZSBpZiBzdGF0ZSA9PSBGUkVTSAorICAgIGlm
IChzdGF0ZSA9PSBGUkVTSCkgeworICAgICAgaWYgKEZMQUdTX3VzZV9leGlzdGluZ19kYikgewor
ICAgICAgICBtZXNzYWdlXyA9ICJza2lwcGluZyAoLS11c2VfZXhpc3RpbmdfZGIgaXMgdHJ1ZSki
OworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgICBzcWxpdGUzX2Nsb3NlKGRiXyk7Cisg
ICAgICBkYl8gPSBOVUxMOworICAgICAgT3BlbigpOworICAgICAgU3RhcnQoKTsKKyAgICB9CisK
KyAgICBpZiAobnVtX2VudHJpZXMgIT0gbnVtXykgeworICAgICAgY2hhciBtc2dbMTAwXTsKKyAg
ICAgIHNucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksICIoJWQgb3BzKSIsIG51bV9lbnRyaWVzKTsK
KyAgICAgIG1lc3NhZ2VfID0gbXNnOworICAgIH0KKworICAgIGNoYXIqIGVycl9tc2cgPSBOVUxM
OworICAgIGludCBzdGF0dXM7CisKKyAgICBzcWxpdGUzX3N0bXQgKnJlcGxhY2Vfc3RtdCwgKmJl
Z2luX3RyYW5zX3N0bXQsICplbmRfdHJhbnNfc3RtdDsKKyAgICBzdGQ6OnN0cmluZyByZXBsYWNl
X3N0ciA9ICJSRVBMQUNFIElOVE8gdGVzdCAoa2V5LCB2YWx1ZSkgVkFMVUVTICg/LCA/KSI7Cisg
ICAgc3RkOjpzdHJpbmcgYmVnaW5fdHJhbnNfc3RyID0gIkJFR0lOIFRSQU5TQUNUSU9OOyI7Cisg
ICAgc3RkOjpzdHJpbmcgZW5kX3RyYW5zX3N0ciA9ICJFTkQgVFJBTlNBQ1RJT047IjsKKworICAg
IC8vIENoZWNrIGZvciBzeW5jaHJvbm91cyBmbGFnIGluIG9wdGlvbnMKKyAgICBzdGQ6OnN0cmlu
ZyBzeW5jX3N0bXQgPSAod3JpdGVfc3luYykgPyAiUFJBR01BIHN5bmNocm9ub3VzID0gRlVMTCIg
OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQUkFHTUEgc3lu
Y2hyb25vdXMgPSBPRkYiOworICAgIHN0YXR1cyA9IHNxbGl0ZTNfZXhlYyhkYl8sIHN5bmNfc3Rt
dC5jX3N0cigpLCBOVUxMLCBOVUxMLCAmZXJyX21zZyk7CisgICAgRXhlY0Vycm9yQ2hlY2soc3Rh
dHVzLCBlcnJfbXNnKTsKKworICAgIC8vIFByZXBhcmluZyBzcWxpdGUzIHN0YXRlbWVudHMKKyAg
ICBzdGF0dXMgPSBzcWxpdGUzX3ByZXBhcmVfdjIoZGJfLCByZXBsYWNlX3N0ci5jX3N0cigpLCAt
MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJlcGxhY2Vfc3RtdCwgTlVMTCk7
CisgICAgRXJyb3JDaGVjayhzdGF0dXMpOworICAgIHN0YXR1cyA9IHNxbGl0ZTNfcHJlcGFyZV92
MihkYl8sIGJlZ2luX3RyYW5zX3N0ci5jX3N0cigpLCAtMSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJmJlZ2luX3RyYW5zX3N0bXQsIE5VTEwpOworICAgIEVycm9yQ2hlY2soc3Rh
dHVzKTsKKyAgICBzdGF0dXMgPSBzcWxpdGUzX3ByZXBhcmVfdjIoZGJfLCBlbmRfdHJhbnNfc3Ry
LmNfc3RyKCksIC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZW5kX3RyYW5z
X3N0bXQsIE5VTEwpOworICAgIEVycm9yQ2hlY2soc3RhdHVzKTsKKworICAgIGJvb2wgdHJhbnNh
Y3Rpb24gPSAoZW50cmllc19wZXJfYmF0Y2ggPiAxKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8
IG51bV9lbnRyaWVzOyBpICs9IGVudHJpZXNfcGVyX2JhdGNoKSB7CisgICAgICAvLyBCZWdpbiB3
cml0ZSB0cmFuc2FjdGlvbgorICAgICAgaWYgKEZMQUdTX3RyYW5zYWN0aW9uICYmIHRyYW5zYWN0
aW9uKSB7CisgICAgICAgIHN0YXR1cyA9IHNxbGl0ZTNfc3RlcChiZWdpbl90cmFuc19zdG10KTsK
KyAgICAgICAgU3RlcEVycm9yQ2hlY2soc3RhdHVzKTsKKyAgICAgICAgc3RhdHVzID0gc3FsaXRl
M19yZXNldChiZWdpbl90cmFuc19zdG10KTsKKyAgICAgICAgRXJyb3JDaGVjayhzdGF0dXMpOwor
ICAgICAgfQorCisgICAgICAvLyBDcmVhdGUgYW5kIGV4ZWN1dGUgU1FMIHN0YXRlbWVudHMKKyAg
ICAgIGZvciAoaW50IGogPSAwOyBqIDwgZW50cmllc19wZXJfYmF0Y2g7IGorKykgeworICAgICAg
ICBjb25zdCBjaGFyKiB2YWx1ZSA9IGdlbl8uR2VuZXJhdGUodmFsdWVfc2l6ZSkuZGF0YSgpOwor
CisgICAgICAgIC8vIENyZWF0ZSB2YWx1ZXMgZm9yIGtleS12YWx1ZSBwYWlyCisgICAgICAgIGNv
bnN0IGludCBrID0gKG9yZGVyID09IFNFUVVFTlRJQUwpID8gaSArIGogOgorICAgICAgICAgICAg
ICAgICAgICAgIChyYW5kXy5OZXh0KCkgJSBudW1fZW50cmllcyk7CisgICAgICAgIGNoYXIga2V5
WzEwMF07CisgICAgICAgIHNucHJpbnRmKGtleSwgc2l6ZW9mKGtleSksICIlMDE2ZCIsIGspOwor
CisgICAgICAgIC8vIEJpbmQgS1YgdmFsdWVzIGludG8gcmVwbGFjZV9zdG10CisgICAgICAgIHN0
YXR1cyA9IHNxbGl0ZTNfYmluZF9ibG9iKHJlcGxhY2Vfc3RtdCwgMSwga2V5LCAxNiwgU1FMSVRF
X1NUQVRJQyk7CisgICAgICAgIEVycm9yQ2hlY2soc3RhdHVzKTsKKyAgICAgICAgc3RhdHVzID0g
c3FsaXRlM19iaW5kX2Jsb2IocmVwbGFjZV9zdG10LCAyLCB2YWx1ZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsdWVfc2l6ZSwgU1FMSVRFX1NUQVRJQyk7CisgICAgICAg
IEVycm9yQ2hlY2soc3RhdHVzKTsKKworICAgICAgICAvLyBFeGVjdXRlIHJlcGxhY2Vfc3RtdAor
ICAgICAgICBieXRlc18gKz0gdmFsdWVfc2l6ZSArIHN0cmxlbihrZXkpOworICAgICAgICBzdGF0
dXMgPSBzcWxpdGUzX3N0ZXAocmVwbGFjZV9zdG10KTsKKyAgICAgICAgU3RlcEVycm9yQ2hlY2so
c3RhdHVzKTsKKworICAgICAgICAvLyBSZXNldCBTUUxpdGUgc3RhdGVtZW50IGZvciBhbm90aGVy
IHVzZQorICAgICAgICBzdGF0dXMgPSBzcWxpdGUzX2NsZWFyX2JpbmRpbmdzKHJlcGxhY2Vfc3Rt
dCk7CisgICAgICAgIEVycm9yQ2hlY2soc3RhdHVzKTsKKyAgICAgICAgc3RhdHVzID0gc3FsaXRl
M19yZXNldChyZXBsYWNlX3N0bXQpOworICAgICAgICBFcnJvckNoZWNrKHN0YXR1cyk7CisKKyAg
ICAgICAgRmluaXNoZWRTaW5nbGVPcCgpOworICAgICAgfQorCisgICAgICAvLyBFbmQgd3JpdGUg
dHJhbnNhY3Rpb24KKyAgICAgIGlmIChGTEFHU190cmFuc2FjdGlvbiAmJiB0cmFuc2FjdGlvbikg
eworICAgICAgICBzdGF0dXMgPSBzcWxpdGUzX3N0ZXAoZW5kX3RyYW5zX3N0bXQpOworICAgICAg
ICBTdGVwRXJyb3JDaGVjayhzdGF0dXMpOworICAgICAgICBzdGF0dXMgPSBzcWxpdGUzX3Jlc2V0
KGVuZF90cmFuc19zdG10KTsKKyAgICAgICAgRXJyb3JDaGVjayhzdGF0dXMpOworICAgICAgfQor
ICAgIH0KKworICAgIHN0YXR1cyA9IHNxbGl0ZTNfZmluYWxpemUocmVwbGFjZV9zdG10KTsKKyAg
ICBFcnJvckNoZWNrKHN0YXR1cyk7CisgICAgc3RhdHVzID0gc3FsaXRlM19maW5hbGl6ZShiZWdp
bl90cmFuc19zdG10KTsKKyAgICBFcnJvckNoZWNrKHN0YXR1cyk7CisgICAgc3RhdHVzID0gc3Fs
aXRlM19maW5hbGl6ZShlbmRfdHJhbnNfc3RtdCk7CisgICAgRXJyb3JDaGVjayhzdGF0dXMpOwor
ICB9CisKKyAgdm9pZCBSZWFkKE9yZGVyIG9yZGVyLCBpbnQgZW50cmllc19wZXJfYmF0Y2gpIHsK
KyAgICBpbnQgc3RhdHVzOworICAgIHNxbGl0ZTNfc3RtdCAqcmVhZF9zdG10LCAqYmVnaW5fdHJh
bnNfc3RtdCwgKmVuZF90cmFuc19zdG10OworCisgICAgc3RkOjpzdHJpbmcgcmVhZF9zdHIgPSAi
U0VMRUNUICogRlJPTSB0ZXN0IFdIRVJFIGtleSA9ID8iOworICAgIHN0ZDo6c3RyaW5nIGJlZ2lu
X3RyYW5zX3N0ciA9ICJCRUdJTiBUUkFOU0FDVElPTjsiOworICAgIHN0ZDo6c3RyaW5nIGVuZF90
cmFuc19zdHIgPSAiRU5EIFRSQU5TQUNUSU9OOyI7CisKKyAgICAvLyBQcmVwYXJpbmcgc3FsaXRl
MyBzdGF0ZW1lbnRzCisgICAgc3RhdHVzID0gc3FsaXRlM19wcmVwYXJlX3YyKGRiXywgYmVnaW5f
dHJhbnNfc3RyLmNfc3RyKCksIC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
YmVnaW5fdHJhbnNfc3RtdCwgTlVMTCk7CisgICAgRXJyb3JDaGVjayhzdGF0dXMpOworICAgIHN0
YXR1cyA9IHNxbGl0ZTNfcHJlcGFyZV92MihkYl8sIGVuZF90cmFuc19zdHIuY19zdHIoKSwgLTEs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlbmRfdHJhbnNfc3RtdCwgTlVMTCk7
CisgICAgRXJyb3JDaGVjayhzdGF0dXMpOworICAgIHN0YXR1cyA9IHNxbGl0ZTNfcHJlcGFyZV92
MihkYl8sIHJlYWRfc3RyLmNfc3RyKCksIC0xLCAmcmVhZF9zdG10LCBOVUxMKTsKKyAgICBFcnJv
ckNoZWNrKHN0YXR1cyk7CisKKyAgICBib29sIHRyYW5zYWN0aW9uID0gKGVudHJpZXNfcGVyX2Jh
dGNoID4gMSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWFkc187IGkgKz0gZW50cmllc19w
ZXJfYmF0Y2gpIHsKKyAgICAgIC8vIEJlZ2luIHJlYWQgdHJhbnNhY3Rpb24KKyAgICAgIGlmIChG
TEFHU190cmFuc2FjdGlvbiAmJiB0cmFuc2FjdGlvbikgeworICAgICAgICBzdGF0dXMgPSBzcWxp
dGUzX3N0ZXAoYmVnaW5fdHJhbnNfc3RtdCk7CisgICAgICAgIFN0ZXBFcnJvckNoZWNrKHN0YXR1
cyk7CisgICAgICAgIHN0YXR1cyA9IHNxbGl0ZTNfcmVzZXQoYmVnaW5fdHJhbnNfc3RtdCk7Cisg
ICAgICAgIEVycm9yQ2hlY2soc3RhdHVzKTsKKyAgICAgIH0KKworICAgICAgLy8gQ3JlYXRlIGFu
ZCBleGVjdXRlIFNRTCBzdGF0ZW1lbnRzCisgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGVudHJp
ZXNfcGVyX2JhdGNoOyBqKyspIHsKKyAgICAgICAgLy8gQ3JlYXRlIGtleSB2YWx1ZQorICAgICAg
ICBjaGFyIGtleVsxMDBdOworICAgICAgICBpbnQgayA9IChvcmRlciA9PSBTRVFVRU5USUFMKSA/
IGkgKyBqIDogKHJhbmRfLk5leHQoKSAlIHJlYWRzXyk7CisgICAgICAgIHNucHJpbnRmKGtleSwg
c2l6ZW9mKGtleSksICIlMDE2ZCIsIGspOworCisgICAgICAgIC8vIEJpbmQga2V5IHZhbHVlIGlu
dG8gcmVhZF9zdG10CisgICAgICAgIHN0YXR1cyA9IHNxbGl0ZTNfYmluZF9ibG9iKHJlYWRfc3Rt
dCwgMSwga2V5LCAxNiwgU1FMSVRFX1NUQVRJQyk7CisgICAgICAgIEVycm9yQ2hlY2soc3RhdHVz
KTsKKworICAgICAgICAvLyBFeGVjdXRlIHJlYWQgc3RhdGVtZW50CisgICAgICAgIHdoaWxlICgo
c3RhdHVzID0gc3FsaXRlM19zdGVwKHJlYWRfc3RtdCkpID09IFNRTElURV9ST1cpIHt9CisgICAg
ICAgIFN0ZXBFcnJvckNoZWNrKHN0YXR1cyk7CisKKyAgICAgICAgLy8gUmVzZXQgU1FMaXRlIHN0
YXRlbWVudCBmb3IgYW5vdGhlciB1c2UKKyAgICAgICAgc3RhdHVzID0gc3FsaXRlM19jbGVhcl9i
aW5kaW5ncyhyZWFkX3N0bXQpOworICAgICAgICBFcnJvckNoZWNrKHN0YXR1cyk7CisgICAgICAg
IHN0YXR1cyA9IHNxbGl0ZTNfcmVzZXQocmVhZF9zdG10KTsKKyAgICAgICAgRXJyb3JDaGVjayhz
dGF0dXMpOworICAgICAgICBGaW5pc2hlZFNpbmdsZU9wKCk7CisgICAgICB9CisKKyAgICAgIC8v
IEVuZCByZWFkIHRyYW5zYWN0aW9uCisgICAgICBpZiAoRkxBR1NfdHJhbnNhY3Rpb24gJiYgdHJh
bnNhY3Rpb24pIHsKKyAgICAgICAgc3RhdHVzID0gc3FsaXRlM19zdGVwKGVuZF90cmFuc19zdG10
KTsKKyAgICAgICAgU3RlcEVycm9yQ2hlY2soc3RhdHVzKTsKKyAgICAgICAgc3RhdHVzID0gc3Fs
aXRlM19yZXNldChlbmRfdHJhbnNfc3RtdCk7CisgICAgICAgIEVycm9yQ2hlY2soc3RhdHVzKTsK
KyAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0dXMgPSBzcWxpdGUzX2ZpbmFsaXplKHJlYWRfc3Rt
dCk7CisgICAgRXJyb3JDaGVjayhzdGF0dXMpOworICAgIHN0YXR1cyA9IHNxbGl0ZTNfZmluYWxp
emUoYmVnaW5fdHJhbnNfc3RtdCk7CisgICAgRXJyb3JDaGVjayhzdGF0dXMpOworICAgIHN0YXR1
cyA9IHNxbGl0ZTNfZmluYWxpemUoZW5kX3RyYW5zX3N0bXQpOworICAgIEVycm9yQ2hlY2soc3Rh
dHVzKTsKKyAgfQorCisgIHZvaWQgUmVhZFNlcXVlbnRpYWwoKSB7CisgICAgaW50IHN0YXR1czsK
KyAgICBzcWxpdGUzX3N0bXQgKnBTdG10OworICAgIHN0ZDo6c3RyaW5nIHJlYWRfc3RyID0gIlNF
TEVDVCAqIEZST00gdGVzdCBPUkRFUiBCWSBrZXkiOworCisgICAgc3RhdHVzID0gc3FsaXRlM19w
cmVwYXJlX3YyKGRiXywgcmVhZF9zdHIuY19zdHIoKSwgLTEsICZwU3RtdCwgTlVMTCk7CisgICAg
RXJyb3JDaGVjayhzdGF0dXMpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVhZHNfICYmIFNR
TElURV9ST1cgPT0gc3FsaXRlM19zdGVwKHBTdG10KTsgaSsrKSB7CisgICAgICBieXRlc18gKz0g
c3FsaXRlM19jb2x1bW5fYnl0ZXMocFN0bXQsIDEpICsgc3FsaXRlM19jb2x1bW5fYnl0ZXMocFN0
bXQsIDIpOworICAgICAgRmluaXNoZWRTaW5nbGVPcCgpOworICAgIH0KKworICAgIHN0YXR1cyA9
IHNxbGl0ZTNfZmluYWxpemUocFN0bXQpOworICAgIEVycm9yQ2hlY2soc3RhdHVzKTsKKyAgfQor
Cit9OworCit9ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgorCitpbnQgbWFpbihpbnQgYXJnYywgY2hh
cioqIGFyZ3YpIHsKKyAgc3RkOjpzdHJpbmcgZGVmYXVsdF9kYl9wYXRoOworICBmb3IgKGludCBp
ID0gMTsgaSA8IGFyZ2M7IGkrKykgeworICAgIGRvdWJsZSBkOworICAgIGludCBuOworICAgIGNo
YXIganVuazsKKyAgICBpZiAobGV2ZWxkYjo6U2xpY2UoYXJndltpXSkuc3RhcnRzX3dpdGgoIi0t
YmVuY2htYXJrcz0iKSkgeworICAgICAgRkxBR1NfYmVuY2htYXJrcyA9IGFyZ3ZbaV0gKyBzdHJs
ZW4oIi0tYmVuY2htYXJrcz0iKTsKKyAgICB9IGVsc2UgaWYgKHNzY2FuZihhcmd2W2ldLCAiLS1o
aXN0b2dyYW09JWQlYyIsICZuLCAmanVuaykgPT0gMSAmJgorICAgICAgICAgICAgICAgKG4gPT0g
MCB8fCBuID09IDEpKSB7CisgICAgICBGTEFHU19oaXN0b2dyYW0gPSBuOworICAgIH0gZWxzZSBp
ZiAoc3NjYW5mKGFyZ3ZbaV0sICItLWNvbXByZXNzaW9uX3JhdGlvPSVsZiVjIiwgJmQsICZqdW5r
KSA9PSAxKSB7CisgICAgICBGTEFHU19jb21wcmVzc2lvbl9yYXRpbyA9IGQ7CisgICAgfSBlbHNl
IGlmIChzc2NhbmYoYXJndltpXSwgIi0tdXNlX2V4aXN0aW5nX2RiPSVkJWMiLCAmbiwgJmp1bmsp
ID09IDEgJiYKKyAgICAgICAgICAgICAgIChuID09IDAgfHwgbiA9PSAxKSkgeworICAgICAgRkxB
R1NfdXNlX2V4aXN0aW5nX2RiID0gbjsKKyAgICB9IGVsc2UgaWYgKHNzY2FuZihhcmd2W2ldLCAi
LS1udW09JWQlYyIsICZuLCAmanVuaykgPT0gMSkgeworICAgICAgRkxBR1NfbnVtID0gbjsKKyAg
ICB9IGVsc2UgaWYgKHNzY2FuZihhcmd2W2ldLCAiLS1yZWFkcz0lZCVjIiwgJm4sICZqdW5rKSA9
PSAxKSB7CisgICAgICBGTEFHU19yZWFkcyA9IG47CisgICAgfSBlbHNlIGlmIChzc2NhbmYoYXJn
dltpXSwgIi0tdmFsdWVfc2l6ZT0lZCVjIiwgJm4sICZqdW5rKSA9PSAxKSB7CisgICAgICBGTEFH
U192YWx1ZV9zaXplID0gbjsKKyAgICB9IGVsc2UgaWYgKGxldmVsZGI6OlNsaWNlKGFyZ3ZbaV0p
ID09IGxldmVsZGI6OlNsaWNlKCItLW5vX3RyYW5zYWN0aW9uIikpIHsKKyAgICAgIEZMQUdTX3Ry
YW5zYWN0aW9uID0gZmFsc2U7CisgICAgfSBlbHNlIGlmIChzc2NhbmYoYXJndltpXSwgIi0tcGFn
ZV9zaXplPSVkJWMiLCAmbiwgJmp1bmspID09IDEpIHsKKyAgICAgIEZMQUdTX3BhZ2Vfc2l6ZSA9
IG47CisgICAgfSBlbHNlIGlmIChzc2NhbmYoYXJndltpXSwgIi0tbnVtX3BhZ2VzPSVkJWMiLCAm
biwgJmp1bmspID09IDEpIHsKKyAgICAgIEZMQUdTX251bV9wYWdlcyA9IG47CisgICAgfSBlbHNl
IGlmIChzc2NhbmYoYXJndltpXSwgIi0tV0FMX2VuYWJsZWQ9JWQlYyIsICZuLCAmanVuaykgPT0g
MSAmJgorICAgICAgICAgICAgICAgKG4gPT0gMCB8fCBuID09IDEpKSB7CisgICAgICBGTEFHU19X
QUxfZW5hYmxlZCA9IG47CisgICAgfSBlbHNlIGlmIChzdHJuY21wKGFyZ3ZbaV0sICItLWRiPSIs
IDUpID09IDApIHsKKyAgICAgIEZMQUdTX2RiID0gYXJndltpXSArIDU7CisgICAgfSBlbHNlIHsK
KyAgICAgIGZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBmbGFnICclcydcbiIsIGFyZ3ZbaV0pOwor
ICAgICAgZXhpdCgxKTsKKyAgICB9CisgIH0KKworICAvLyBDaG9vc2UgYSBsb2NhdGlvbiBmb3Ig
dGhlIHRlc3QgZGF0YWJhc2UgaWYgbm9uZSBnaXZlbiB3aXRoIC0tZGI9PHBhdGg+CisgIGlmIChG
TEFHU19kYiA9PSBOVUxMKSB7CisgICAgICBsZXZlbGRiOjpFbnY6OkRlZmF1bHQoKS0+R2V0VGVz
dERpcmVjdG9yeSgmZGVmYXVsdF9kYl9wYXRoKTsKKyAgICAgIGRlZmF1bHRfZGJfcGF0aCArPSAi
L2RiYmVuY2giOworICAgICAgRkxBR1NfZGIgPSBkZWZhdWx0X2RiX3BhdGguY19zdHIoKTsKKyAg
fQorCisgIGxldmVsZGI6OkJlbmNobWFyayBiZW5jaG1hcms7CisgIGJlbmNobWFyay5SdW4oKTsK
KyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2Rv
Yy9iZW5jaC9kYl9iZW5jaF90cmVlX2RiLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9k
b2MvYmVuY2gvZGJfYmVuY2hfdHJlZV9kYi5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZDg2ZjAzMWMyNWZlOTMx
YjBlM2EwNWY0NTAxMjY5YWZkMjMzZjAyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvbGV2ZWxkYi9kb2MvYmVuY2gvZGJfYmVuY2hfdHJlZV9kYi5jYwpAQCAtMCwwICsxLDUy
OCBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgorCisj
aW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxrY3BvbHlk
Yi5oPgorI2luY2x1ZGUgInV0aWwvaGlzdG9ncmFtLmgiCisjaW5jbHVkZSAidXRpbC9yYW5kb20u
aCIKKyNpbmNsdWRlICJ1dGlsL3Rlc3R1dGlsLmgiCisKKy8vIENvbW1hLXNlcGFyYXRlZCBsaXN0
IG9mIG9wZXJhdGlvbnMgdG8gcnVuIGluIHRoZSBzcGVjaWZpZWQgb3JkZXIKKy8vICAgQWN0dWFs
IGJlbmNobWFya3M6CisvLworLy8gICBmaWxsc2VxICAgICAgIC0tIHdyaXRlIE4gdmFsdWVzIGlu
IHNlcXVlbnRpYWwga2V5IG9yZGVyIGluIGFzeW5jIG1vZGUKKy8vICAgZmlsbHJhbmRvbSAgICAt
LSB3cml0ZSBOIHZhbHVlcyBpbiByYW5kb20ga2V5IG9yZGVyIGluIGFzeW5jIG1vZGUKKy8vICAg
b3ZlcndyaXRlICAgICAtLSBvdmVyd3JpdGUgTiB2YWx1ZXMgaW4gcmFuZG9tIGtleSBvcmRlciBp
biBhc3luYyBtb2RlCisvLyAgIGZpbGxzZXFzeW5jICAgLS0gd3JpdGUgTi8xMDAgdmFsdWVzIGlu
IHNlcXVlbnRpYWwga2V5IG9yZGVyIGluIHN5bmMgbW9kZQorLy8gICBmaWxscmFuZHN5bmMgIC0t
IHdyaXRlIE4vMTAwIHZhbHVlcyBpbiByYW5kb20ga2V5IG9yZGVyIGluIHN5bmMgbW9kZQorLy8g
ICBmaWxscmFuZDEwMEsgIC0tIHdyaXRlIE4vMTAwMCAxMDBLIHZhbHVlcyBpbiByYW5kb20gb3Jk
ZXIgaW4gYXN5bmMgbW9kZQorLy8gICBmaWxsc2VxMTAwSyAgIC0tIHdyaXRlIE4vMTAwMCAxMDBL
IHZhbHVlcyBpbiBzZXEgb3JkZXIgaW4gYXN5bmMgbW9kZQorLy8gICByZWFkc2VxICAgICAgIC0t
IHJlYWQgTiB0aW1lcyBzZXF1ZW50aWFsbHkKKy8vICAgcmVhZHNlcTEwMEsgICAtLSByZWFkIE4v
MTAwMCAxMDBLIHZhbHVlcyBpbiBzZXF1ZW50aWFsIG9yZGVyIGluIGFzeW5jIG1vZGUKKy8vICAg
cmVhZHJhbmQxMDBLICAtLSByZWFkIE4vMTAwMCAxMDBLIHZhbHVlcyBpbiBzZXF1ZW50aWFsIG9y
ZGVyIGluIGFzeW5jIG1vZGUKKy8vICAgcmVhZHJhbmRvbSAgICAtLSByZWFkIE4gdGltZXMgaW4g
cmFuZG9tIG9yZGVyCitzdGF0aWMgY29uc3QgY2hhciogRkxBR1NfYmVuY2htYXJrcyA9CisgICAg
ImZpbGxzZXEsIgorICAgICJmaWxsc2Vxc3luYywiCisgICAgImZpbGxyYW5kc3luYywiCisgICAg
ImZpbGxyYW5kb20sIgorICAgICJvdmVyd3JpdGUsIgorICAgICJyZWFkcmFuZG9tLCIKKyAgICAi
cmVhZHNlcSwiCisgICAgImZpbGxyYW5kMTAwSywiCisgICAgImZpbGxzZXExMDBLLCIKKyAgICAi
cmVhZHNlcTEwMEssIgorICAgICJyZWFkcmFuZDEwMEssIgorICAgIDsKKworLy8gTnVtYmVyIG9m
IGtleS92YWx1ZXMgdG8gcGxhY2UgaW4gZGF0YWJhc2UKK3N0YXRpYyBpbnQgRkxBR1NfbnVtID0g
MTAwMDAwMDsKKworLy8gTnVtYmVyIG9mIHJlYWQgb3BlcmF0aW9ucyB0byBkby4gIElmIG5lZ2F0
aXZlLCBkbyBGTEFHU19udW0gcmVhZHMuCitzdGF0aWMgaW50IEZMQUdTX3JlYWRzID0gLTE7CisK
Ky8vIFNpemUgb2YgZWFjaCB2YWx1ZQorc3RhdGljIGludCBGTEFHU192YWx1ZV9zaXplID0gMTAw
OworCisvLyBBcnJhbmdlIHRvIGdlbmVyYXRlIHZhbHVlcyB0aGF0IHNocmluayB0byB0aGlzIGZy
YWN0aW9uIG9mCisvLyB0aGVpciBvcmlnaW5hbCBzaXplIGFmdGVyIGNvbXByZXNzaW9uCitzdGF0
aWMgZG91YmxlIEZMQUdTX2NvbXByZXNzaW9uX3JhdGlvID0gMC41OworCisvLyBQcmludCBoaXN0
b2dyYW0gb2Ygb3BlcmF0aW9uIHRpbWluZ3MKK3N0YXRpYyBib29sIEZMQUdTX2hpc3RvZ3JhbSA9
IGZhbHNlOworCisvLyBDYWNoZSBzaXplLiBEZWZhdWx0IDQgTUIKK3N0YXRpYyBpbnQgRkxBR1Nf
Y2FjaGVfc2l6ZSA9IDQxOTQzMDQ7CisKKy8vIFBhZ2Ugc2l6ZS4gRGVmYXVsdCAxIEtCCitzdGF0
aWMgaW50IEZMQUdTX3BhZ2Vfc2l6ZSA9IDEwMjQ7CisKKy8vIElmIHRydWUsIGRvIG5vdCBkZXN0
cm95IHRoZSBleGlzdGluZyBkYXRhYmFzZS4gIElmIHlvdSBzZXQgdGhpcworLy8gZmxhZyBhbmQg
YWxzbyBzcGVjaWZ5IGEgYmVuY2htYXJrIHRoYXQgd2FudHMgYSBmcmVzaCBkYXRhYmFzZSwgdGhh
dAorLy8gYmVuY2htYXJrIHdpbGwgZmFpbC4KK3N0YXRpYyBib29sIEZMQUdTX3VzZV9leGlzdGlu
Z19kYiA9IGZhbHNlOworCisvLyBDb21wcmVzc2lvbiBmbGFnLiBJZiB0cnVlLCBjb21wcmVzc2lv
biBpcyBvbi4gSWYgZmFsc2UsIGNvbXByZXNzaW9uCisvLyBpcyBvZmYuCitzdGF0aWMgYm9vbCBG
TEFHU19jb21wcmVzc2lvbiA9IHRydWU7CisKKy8vIFVzZSB0aGUgZGIgd2l0aCB0aGUgZm9sbG93
aW5nIG5hbWUuCitzdGF0aWMgY29uc3QgY2hhciogRkxBR1NfZGIgPSBOVUxMOworCitpbmxpbmUK
K3N0YXRpYyB2b2lkIERCU3luY2hyb25pemUoa3lvdG9jYWJpbmV0OjpUcmVlREIqIGRiXykKK3sK
KyAgLy8gU3luY2hyb25pemUgd2lsbCBmbHVzaCB3cml0ZXMgdG8gZGlzaworICBpZiAoIWRiXy0+
c3luY2hyb25pemUoKSkgeworICAgIGZwcmludGYoc3RkZXJyLCAic3luY2hyb25pemUgZXJyb3I6
ICVzXG4iLCBkYl8tPmVycm9yKCkubmFtZSgpKTsKKyAgfQorfQorCituYW1lc3BhY2UgbGV2ZWxk
YiB7CisKKy8vIEhlbHBlciBmb3IgcXVpY2tseSBnZW5lcmF0aW5nIHJhbmRvbSBkYXRhLgorbmFt
ZXNwYWNlIHsKK2NsYXNzIFJhbmRvbUdlbmVyYXRvciB7CisgcHJpdmF0ZToKKyAgc3RkOjpzdHJp
bmcgZGF0YV87CisgIGludCBwb3NfOworCisgcHVibGljOgorICBSYW5kb21HZW5lcmF0b3IoKSB7
CisgICAgLy8gV2UgdXNlIGEgbGltaXRlZCBhbW91bnQgb2YgZGF0YSBvdmVyIGFuZCBvdmVyIGFn
YWluIGFuZCBlbnN1cmUKKyAgICAvLyB0aGF0IGl0IGlzIGxhcmdlciB0aGFuIHRoZSBjb21wcmVz
c2lvbiB3aW5kb3cgKDMyS0IpLCBhbmQgYWxzbworICAgIC8vIGxhcmdlIGVub3VnaCB0byBzZXJ2
ZSBhbGwgdHlwaWNhbCB2YWx1ZSBzaXplcyB3ZSB3YW50IHRvIHdyaXRlLgorICAgIFJhbmRvbSBy
bmQoMzAxKTsKKyAgICBzdGQ6OnN0cmluZyBwaWVjZTsKKyAgICB3aGlsZSAoZGF0YV8uc2l6ZSgp
IDwgMTA0ODU3NikgeworICAgICAgLy8gQWRkIGEgc2hvcnQgZnJhZ21lbnQgdGhhdCBpcyBhcyBj
b21wcmVzc2libGUgYXMgc3BlY2lmaWVkCisgICAgICAvLyBieSBGTEFHU19jb21wcmVzc2lvbl9y
YXRpby4KKyAgICAgIHRlc3Q6OkNvbXByZXNzaWJsZVN0cmluZygmcm5kLCBGTEFHU19jb21wcmVz
c2lvbl9yYXRpbywgMTAwLCAmcGllY2UpOworICAgICAgZGF0YV8uYXBwZW5kKHBpZWNlKTsKKyAg
ICB9CisgICAgcG9zXyA9IDA7CisgIH0KKworICBTbGljZSBHZW5lcmF0ZShpbnQgbGVuKSB7Cisg
ICAgaWYgKHBvc18gKyBsZW4gPiBkYXRhXy5zaXplKCkpIHsKKyAgICAgIHBvc18gPSAwOworICAg
ICAgYXNzZXJ0KGxlbiA8IGRhdGFfLnNpemUoKSk7CisgICAgfQorICAgIHBvc18gKz0gbGVuOwor
ICAgIHJldHVybiBTbGljZShkYXRhXy5kYXRhKCkgKyBwb3NfIC0gbGVuLCBsZW4pOworICB9Cit9
OworCitzdGF0aWMgU2xpY2UgVHJpbVNwYWNlKFNsaWNlIHMpIHsKKyAgaW50IHN0YXJ0ID0gMDsK
KyAgd2hpbGUgKHN0YXJ0IDwgcy5zaXplKCkgJiYgaXNzcGFjZShzW3N0YXJ0XSkpIHsKKyAgICBz
dGFydCsrOworICB9CisgIGludCBsaW1pdCA9IHMuc2l6ZSgpOworICB3aGlsZSAobGltaXQgPiBz
dGFydCAmJiBpc3NwYWNlKHNbbGltaXQtMV0pKSB7CisgICAgbGltaXQtLTsKKyAgfQorICByZXR1
cm4gU2xpY2Uocy5kYXRhKCkgKyBzdGFydCwgbGltaXQgLSBzdGFydCk7Cit9CisKK30gIC8vIG5h
bWVzcGFjZQorCitjbGFzcyBCZW5jaG1hcmsgeworIHByaXZhdGU6CisgIGt5b3RvY2FiaW5ldDo6
VHJlZURCKiBkYl87CisgIGludCBkYl9udW1fOworICBpbnQgbnVtXzsKKyAgaW50IHJlYWRzXzsK
KyAgZG91YmxlIHN0YXJ0XzsKKyAgZG91YmxlIGxhc3Rfb3BfZmluaXNoXzsKKyAgaW50NjRfdCBi
eXRlc187CisgIHN0ZDo6c3RyaW5nIG1lc3NhZ2VfOworICBIaXN0b2dyYW0gaGlzdF87CisgIFJh
bmRvbUdlbmVyYXRvciBnZW5fOworICBSYW5kb20gcmFuZF87CisgIGt5b3RvY2FiaW5ldDo6TFpP
Q29tcHJlc3NvcjxreW90b2NhYmluZXQ6OkxaTzo6UkFXPiBjb21wXzsKKworICAvLyBTdGF0ZSBr
ZXB0IGZvciBwcm9ncmVzcyBtZXNzYWdlcworICBpbnQgZG9uZV87CisgIGludCBuZXh0X3JlcG9y
dF87ICAgICAvLyBXaGVuIHRvIHJlcG9ydCBuZXh0CisKKyAgdm9pZCBQcmludEhlYWRlcigpIHsK
KyAgICBjb25zdCBpbnQga0tleVNpemUgPSAxNjsKKyAgICBQcmludEVudmlyb25tZW50KCk7Cisg
ICAgZnByaW50ZihzdGRvdXQsICJLZXlzOiAgICAgICAlZCBieXRlcyBlYWNoXG4iLCBrS2V5U2l6
ZSk7CisgICAgZnByaW50ZihzdGRvdXQsICJWYWx1ZXM6ICAgICAlZCBieXRlcyBlYWNoICglZCBi
eXRlcyBhZnRlciBjb21wcmVzc2lvbilcbiIsCisgICAgICAgICAgICBGTEFHU192YWx1ZV9zaXpl
LAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihGTEFHU192YWx1ZV9zaXplICogRkxBR1Nf
Y29tcHJlc3Npb25fcmF0aW8gKyAwLjUpKTsKKyAgICBmcHJpbnRmKHN0ZG91dCwgIkVudHJpZXM6
ICAgICVkXG4iLCBudW1fKTsKKyAgICBmcHJpbnRmKHN0ZG91dCwgIlJhd1NpemU6ICAgICUuMWYg
TUIgKGVzdGltYXRlZClcbiIsCisgICAgICAgICAgICAoKHN0YXRpY19jYXN0PGludDY0X3Q+KGtL
ZXlTaXplICsgRkxBR1NfdmFsdWVfc2l6ZSkgKiBudW1fKQorICAgICAgICAgICAgIC8gMTA0ODU3
Ni4wKSk7CisgICAgZnByaW50ZihzdGRvdXQsICJGaWxlU2l6ZTogICAlLjFmIE1CIChlc3RpbWF0
ZWQpXG4iLAorICAgICAgICAgICAgKCgoa0tleVNpemUgKyBGTEFHU192YWx1ZV9zaXplICogRkxB
R1NfY29tcHJlc3Npb25fcmF0aW8pICogbnVtXykKKyAgICAgICAgICAgICAvIDEwNDg1NzYuMCkp
OworICAgIFByaW50V2FybmluZ3MoKTsKKyAgICBmcHJpbnRmKHN0ZG91dCwgIi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisgIH0KKworICB2b2lk
IFByaW50V2FybmluZ3MoKSB7CisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19P
UFRJTUlaRV9fKQorICAgIGZwcmludGYoc3Rkb3V0LAorICAgICAgICAgICAgIldBUk5JTkc6IE9w
dGltaXphdGlvbiBpcyBkaXNhYmxlZDogYmVuY2htYXJrcyB1bm5lY2Vzc2FyaWx5IHNsb3dcbiIK
KyAgICAgICAgICAgICk7CisjZW5kaWYKKyNpZm5kZWYgTkRFQlVHCisgICAgZnByaW50ZihzdGRv
dXQsCisgICAgICAgICAgICAiV0FSTklORzogQXNzZXJ0aW9ucyBhcmUgZW5hYmxlZDsgYmVuY2ht
YXJrcyB1bm5lY2Vzc2FyaWx5IHNsb3dcbiIpOworI2VuZGlmCisgIH0KKworICB2b2lkIFByaW50
RW52aXJvbm1lbnQoKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJLeW90byBDYWJpbmV0OiAgICB2
ZXJzaW9uICVzLCBsaWIgdmVyICVkLCBsaWIgcmV2ICVkXG4iLAorICAgICAgICAgICAga3lvdG9j
YWJpbmV0OjpWRVJTSU9OLCBreW90b2NhYmluZXQ6OkxJQlZFUiwga3lvdG9jYWJpbmV0OjpMSUJS
RVYpOworCisjaWYgZGVmaW5lZChfX2xpbnV4KQorICAgIHRpbWVfdCBub3cgPSB0aW1lKE5VTEwp
OworICAgIGZwcmludGYoc3RkZXJyLCAiRGF0ZTogICAgICAgICAgICVzIiwgY3RpbWUoJm5vdykp
OyAgLy8gY3RpbWUoKSBhZGRzIG5ld2xpbmUKKworICAgIEZJTEUqIGNwdWluZm8gPSBmb3Blbigi
L3Byb2MvY3B1aW5mbyIsICJyIik7CisgICAgaWYgKGNwdWluZm8gIT0gTlVMTCkgeworICAgICAg
Y2hhciBsaW5lWzEwMDBdOworICAgICAgaW50IG51bV9jcHVzID0gMDsKKyAgICAgIHN0ZDo6c3Ry
aW5nIGNwdV90eXBlOworICAgICAgc3RkOjpzdHJpbmcgY2FjaGVfc2l6ZTsKKyAgICAgIHdoaWxl
IChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGNwdWluZm8pICE9IE5VTEwpIHsKKyAgICAgICAg
Y29uc3QgY2hhciogc2VwID0gc3RyY2hyKGxpbmUsICc6Jyk7CisgICAgICAgIGlmIChzZXAgPT0g
TlVMTCkgeworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIFNsaWNlIGtl
eSA9IFRyaW1TcGFjZShTbGljZShsaW5lLCBzZXAgLSAxIC0gbGluZSkpOworICAgICAgICBTbGlj
ZSB2YWwgPSBUcmltU3BhY2UoU2xpY2Uoc2VwICsgMSkpOworICAgICAgICBpZiAoa2V5ID09ICJt
b2RlbCBuYW1lIikgeworICAgICAgICAgICsrbnVtX2NwdXM7CisgICAgICAgICAgY3B1X3R5cGUg
PSB2YWwuVG9TdHJpbmcoKTsKKyAgICAgICAgfSBlbHNlIGlmIChrZXkgPT0gImNhY2hlIHNpemUi
KSB7CisgICAgICAgICAgY2FjaGVfc2l6ZSA9IHZhbC5Ub1N0cmluZygpOworICAgICAgICB9Cisg
ICAgICB9CisgICAgICBmY2xvc2UoY3B1aW5mbyk7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNQ
VTogICAgICAgICAgICAlZCAqICVzXG4iLCBudW1fY3B1cywgY3B1X3R5cGUuY19zdHIoKSk7Cisg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIkNQVUNhY2hlOiAgICAgICAlc1xuIiwgY2FjaGVfc2l6ZS5j
X3N0cigpKTsKKyAgICB9CisjZW5kaWYKKyAgfQorCisgIHZvaWQgU3RhcnQoKSB7CisgICAgc3Rh
cnRfID0gRW52OjpEZWZhdWx0KCktPk5vd01pY3JvcygpICogMWUtNjsKKyAgICBieXRlc18gPSAw
OworICAgIG1lc3NhZ2VfLmNsZWFyKCk7CisgICAgbGFzdF9vcF9maW5pc2hfID0gc3RhcnRfOwor
ICAgIGhpc3RfLkNsZWFyKCk7CisgICAgZG9uZV8gPSAwOworICAgIG5leHRfcmVwb3J0XyA9IDEw
MDsKKyAgfQorCisgIHZvaWQgRmluaXNoZWRTaW5nbGVPcCgpIHsKKyAgICBpZiAoRkxBR1NfaGlz
dG9ncmFtKSB7CisgICAgICBkb3VibGUgbm93ID0gRW52OjpEZWZhdWx0KCktPk5vd01pY3Jvcygp
ICogMWUtNjsKKyAgICAgIGRvdWJsZSBtaWNyb3MgPSAobm93IC0gbGFzdF9vcF9maW5pc2hfKSAq
IDFlNjsKKyAgICAgIGhpc3RfLkFkZChtaWNyb3MpOworICAgICAgaWYgKG1pY3JvcyA+IDIwMDAw
KSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAibG9uZyBvcDogJS4xZiBtaWNyb3MlMzBzXHIi
LCBtaWNyb3MsICIiKTsKKyAgICAgICAgZmZsdXNoKHN0ZGVycik7CisgICAgICB9CisgICAgICBs
YXN0X29wX2ZpbmlzaF8gPSBub3c7CisgICAgfQorCisgICAgZG9uZV8rKzsKKyAgICBpZiAoZG9u
ZV8gPj0gbmV4dF9yZXBvcnRfKSB7CisgICAgICBpZiAgICAgIChuZXh0X3JlcG9ydF8gPCAxMDAw
KSAgIG5leHRfcmVwb3J0XyArPSAxMDA7CisgICAgICBlbHNlIGlmIChuZXh0X3JlcG9ydF8gPCA1
MDAwKSAgIG5leHRfcmVwb3J0XyArPSA1MDA7CisgICAgICBlbHNlIGlmIChuZXh0X3JlcG9ydF8g
PCAxMDAwMCkgIG5leHRfcmVwb3J0XyArPSAxMDAwOworICAgICAgZWxzZSBpZiAobmV4dF9yZXBv
cnRfIDwgNTAwMDApICBuZXh0X3JlcG9ydF8gKz0gNTAwMDsKKyAgICAgIGVsc2UgaWYgKG5leHRf
cmVwb3J0XyA8IDEwMDAwMCkgbmV4dF9yZXBvcnRfICs9IDEwMDAwOworICAgICAgZWxzZSBpZiAo
bmV4dF9yZXBvcnRfIDwgNTAwMDAwKSBuZXh0X3JlcG9ydF8gKz0gNTAwMDA7CisgICAgICBlbHNl
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfcmVwb3J0XyArPSAxMDAwMDA7CisgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIi4uLiBmaW5pc2hlZCAlZCBvcHMlMzBzXHIiLCBkb25lXywgIiIp
OworICAgICAgZmZsdXNoKHN0ZGVycik7CisgICAgfQorICB9CisKKyAgdm9pZCBTdG9wKGNvbnN0
IFNsaWNlJiBuYW1lKSB7CisgICAgZG91YmxlIGZpbmlzaCA9IEVudjo6RGVmYXVsdCgpLT5Ob3dN
aWNyb3MoKSAqIDFlLTY7CisKKyAgICAvLyBQcmV0ZW5kIGF0IGxlYXN0IG9uZSBvcCB3YXMgZG9u
ZSBpbiBjYXNlIHdlIGFyZSBydW5uaW5nIGEgYmVuY2htYXJrCisgICAgLy8gdGhhdCBkb2VzIG5v
dCBjYWxsIEZpbmlzaGVkU2luZ2xlT3AoKS4KKyAgICBpZiAoZG9uZV8gPCAxKSBkb25lXyA9IDE7
CisKKyAgICBpZiAoYnl0ZXNfID4gMCkgeworICAgICAgY2hhciByYXRlWzEwMF07CisgICAgICBz
bnByaW50ZihyYXRlLCBzaXplb2YocmF0ZSksICIlNi4xZiBNQi9zIiwKKyAgICAgICAgICAgICAg
IChieXRlc18gLyAxMDQ4NTc2LjApIC8gKGZpbmlzaCAtIHN0YXJ0XykpOworICAgICAgaWYgKCFt
ZXNzYWdlXy5lbXB0eSgpKSB7CisgICAgICAgIG1lc3NhZ2VfICA9IHN0ZDo6c3RyaW5nKHJhdGUp
ICsgIiAiICsgbWVzc2FnZV87CisgICAgICB9IGVsc2UgeworICAgICAgICBtZXNzYWdlXyA9IHJh
dGU7CisgICAgICB9CisgICAgfQorCisgICAgZnByaW50ZihzdGRvdXQsICIlLTEycyA6ICUxMS4z
ZiBtaWNyb3Mvb3A7JXMlc1xuIiwKKyAgICAgICAgICAgIG5hbWUuVG9TdHJpbmcoKS5jX3N0cigp
LAorICAgICAgICAgICAgKGZpbmlzaCAtIHN0YXJ0XykgKiAxZTYgLyBkb25lXywKKyAgICAgICAg
ICAgIChtZXNzYWdlXy5lbXB0eSgpID8gIiIgOiAiICIpLAorICAgICAgICAgICAgbWVzc2FnZV8u
Y19zdHIoKSk7CisgICAgaWYgKEZMQUdTX2hpc3RvZ3JhbSkgeworICAgICAgZnByaW50ZihzdGRv
dXQsICJNaWNyb3NlY29uZHMgcGVyIG9wOlxuJXNcbiIsIGhpc3RfLlRvU3RyaW5nKCkuY19zdHIo
KSk7CisgICAgfQorICAgIGZmbHVzaChzdGRvdXQpOworICB9CisKKyBwdWJsaWM6CisgIGVudW0g
T3JkZXIgeworICAgIFNFUVVFTlRJQUwsCisgICAgUkFORE9NCisgIH07CisgIGVudW0gREJTdGF0
ZSB7CisgICAgRlJFU0gsCisgICAgRVhJU1RJTkcKKyAgfTsKKworICBCZW5jaG1hcmsoKQorICA6
IGRiXyhOVUxMKSwKKyAgICBudW1fKEZMQUdTX251bSksCisgICAgcmVhZHNfKEZMQUdTX3JlYWRz
IDwgMCA/IEZMQUdTX251bSA6IEZMQUdTX3JlYWRzKSwKKyAgICBieXRlc18oMCksCisgICAgcmFu
ZF8oMzAxKSB7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGZpbGVzOworICAgIHN0ZDo6
c3RyaW5nIHRlc3RfZGlyOworICAgIEVudjo6RGVmYXVsdCgpLT5HZXRUZXN0RGlyZWN0b3J5KCZ0
ZXN0X2Rpcik7CisgICAgRW52OjpEZWZhdWx0KCktPkdldENoaWxkcmVuKHRlc3RfZGlyLmNfc3Ry
KCksICZmaWxlcyk7CisgICAgaWYgKCFGTEFHU191c2VfZXhpc3RpbmdfZGIpIHsKKyAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgZmlsZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgaWYgKFNsaWNl
KGZpbGVzW2ldKS5zdGFydHNfd2l0aCgiZGJiZW5jaF9wb2x5REIiKSkgeworICAgICAgICAgIHN0
ZDo6c3RyaW5nIGZpbGVfbmFtZSh0ZXN0X2Rpcik7CisgICAgICAgICAgZmlsZV9uYW1lICs9ICIv
IjsKKyAgICAgICAgICBmaWxlX25hbWUgKz0gZmlsZXNbaV07CisgICAgICAgICAgRW52OjpEZWZh
dWx0KCktPkRlbGV0ZUZpbGUoZmlsZV9uYW1lLmNfc3RyKCkpOworICAgICAgICB9CisgICAgICB9
CisgICAgfQorICB9CisKKyAgfkJlbmNobWFyaygpIHsKKyAgICBpZiAoIWRiXy0+Y2xvc2UoKSkg
eworICAgICAgZnByaW50ZihzdGRlcnIsICJjbG9zZSBlcnJvcjogJXNcbiIsIGRiXy0+ZXJyb3Io
KS5uYW1lKCkpOworICAgIH0KKyAgfQorCisgIHZvaWQgUnVuKCkgeworICAgIFByaW50SGVhZGVy
KCk7CisgICAgT3BlbihmYWxzZSk7CisKKyAgICBjb25zdCBjaGFyKiBiZW5jaG1hcmtzID0gRkxB
R1NfYmVuY2htYXJrczsKKyAgICB3aGlsZSAoYmVuY2htYXJrcyAhPSBOVUxMKSB7CisgICAgICBj
b25zdCBjaGFyKiBzZXAgPSBzdHJjaHIoYmVuY2htYXJrcywgJywnKTsKKyAgICAgIFNsaWNlIG5h
bWU7CisgICAgICBpZiAoc2VwID09IE5VTEwpIHsKKyAgICAgICAgbmFtZSA9IGJlbmNobWFya3M7
CisgICAgICAgIGJlbmNobWFya3MgPSBOVUxMOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgbmFt
ZSA9IFNsaWNlKGJlbmNobWFya3MsIHNlcCAtIGJlbmNobWFya3MpOworICAgICAgICBiZW5jaG1h
cmtzID0gc2VwICsgMTsKKyAgICAgIH0KKworICAgICAgU3RhcnQoKTsKKworICAgICAgYm9vbCBr
bm93biA9IHRydWU7CisgICAgICBib29sIHdyaXRlX3N5bmMgPSBmYWxzZTsKKyAgICAgIGlmIChu
YW1lID09IFNsaWNlKCJmaWxsc2VxIikpIHsKKyAgICAgICAgV3JpdGUod3JpdGVfc3luYywgU0VR
VUVOVElBTCwgRlJFU0gsIG51bV8sIEZMQUdTX3ZhbHVlX3NpemUsIDEpOworICAgICAgICAKKyAg
ICAgIH0gZWxzZSBpZiAobmFtZSA9PSBTbGljZSgiZmlsbHJhbmRvbSIpKSB7CisgICAgICAgIFdy
aXRlKHdyaXRlX3N5bmMsIFJBTkRPTSwgRlJFU0gsIG51bV8sIEZMQUdTX3ZhbHVlX3NpemUsIDEp
OworICAgICAgICBEQlN5bmNocm9uaXplKGRiXyk7CisgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0g
U2xpY2UoIm92ZXJ3cml0ZSIpKSB7CisgICAgICAgIFdyaXRlKHdyaXRlX3N5bmMsIFJBTkRPTSwg
RVhJU1RJTkcsIG51bV8sIEZMQUdTX3ZhbHVlX3NpemUsIDEpOworICAgICAgICBEQlN5bmNocm9u
aXplKGRiXyk7CisgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gU2xpY2UoImZpbGxyYW5kc3luYyIp
KSB7CisgICAgICAgIHdyaXRlX3N5bmMgPSB0cnVlOworICAgICAgICBXcml0ZSh3cml0ZV9zeW5j
LCBSQU5ET00sIEZSRVNILCBudW1fIC8gMTAwLCBGTEFHU192YWx1ZV9zaXplLCAxKTsKKyAgICAg
ICAgREJTeW5jaHJvbml6ZShkYl8pOworICAgICAgfSBlbHNlIGlmIChuYW1lID09IFNsaWNlKCJm
aWxsc2Vxc3luYyIpKSB7CisgICAgICAgIHdyaXRlX3N5bmMgPSB0cnVlOworICAgICAgICBXcml0
ZSh3cml0ZV9zeW5jLCBTRVFVRU5USUFMLCBGUkVTSCwgbnVtXyAvIDEwMCwgRkxBR1NfdmFsdWVf
c2l6ZSwgMSk7CisgICAgICAgIERCU3luY2hyb25pemUoZGJfKTsKKyAgICAgIH0gZWxzZSBpZiAo
bmFtZSA9PSBTbGljZSgiZmlsbHJhbmQxMDBLIikpIHsKKyAgICAgICAgV3JpdGUod3JpdGVfc3lu
YywgUkFORE9NLCBGUkVTSCwgbnVtXyAvIDEwMDAsIDEwMCAqIDEwMDAsIDEpOworICAgICAgICBE
QlN5bmNocm9uaXplKGRiXyk7CisgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gU2xpY2UoImZpbGxz
ZXExMDBLIikpIHsKKyAgICAgICAgV3JpdGUod3JpdGVfc3luYywgU0VRVUVOVElBTCwgRlJFU0gs
IG51bV8gLyAxMDAwLCAxMDAgKiAxMDAwLCAxKTsKKyAgICAgICAgREJTeW5jaHJvbml6ZShkYl8p
OworICAgICAgfSBlbHNlIGlmIChuYW1lID09IFNsaWNlKCJyZWFkc2VxIikpIHsKKyAgICAgICAg
UmVhZFNlcXVlbnRpYWwoKTsKKyAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSBTbGljZSgicmVhZHJh
bmRvbSIpKSB7CisgICAgICAgIFJlYWRSYW5kb20oKTsKKyAgICAgIH0gZWxzZSBpZiAobmFtZSA9
PSBTbGljZSgicmVhZHJhbmQxMDBLIikpIHsKKyAgICAgICAgaW50IG4gPSByZWFkc187CisgICAg
ICAgIHJlYWRzXyAvPSAxMDAwOworICAgICAgICBSZWFkUmFuZG9tKCk7CisgICAgICAgIHJlYWRz
XyA9IG47CisgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gU2xpY2UoInJlYWRzZXExMDBLIikpIHsK
KyAgICAgICAgaW50IG4gPSByZWFkc187CisgICAgICAgIHJlYWRzXyAvPSAxMDAwOworICAgICAg
ICBSZWFkU2VxdWVudGlhbCgpOworICAgICAgICByZWFkc18gPSBuOworICAgICAgfSBlbHNlIHsK
KyAgICAgICAga25vd24gPSBmYWxzZTsKKyAgICAgICAgaWYgKG5hbWUgIT0gU2xpY2UoKSkgeyAg
Ly8gTm8gZXJyb3IgbWVzc2FnZSBmb3IgZW1wdHkgbmFtZQorICAgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAidW5rbm93biBiZW5jaG1hcmsgJyVzJ1xuIiwgbmFtZS5Ub1N0cmluZygpLmNfc3RyKCkp
OworICAgICAgICB9CisgICAgICB9CisgICAgICBpZiAoa25vd24pIHsKKyAgICAgICAgU3RvcChu
YW1lKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworIHByaXZhdGU6CisgICAgdm9pZCBPcGVuKGJv
b2wgc3luYykgeworICAgIGFzc2VydChkYl8gPT0gTlVMTCk7CisKKyAgICAvLyBJbml0aWFsaXpl
IGRiXworICAgIGRiXyA9IG5ldyBreW90b2NhYmluZXQ6OlRyZWVEQigpOworICAgIGNoYXIgZmls
ZV9uYW1lWzEwMF07CisgICAgZGJfbnVtXysrOworICAgIHN0ZDo6c3RyaW5nIHRlc3RfZGlyOwor
ICAgIEVudjo6RGVmYXVsdCgpLT5HZXRUZXN0RGlyZWN0b3J5KCZ0ZXN0X2Rpcik7CisgICAgc25w
cmludGYoZmlsZV9uYW1lLCBzaXplb2YoZmlsZV9uYW1lKSwKKyAgICAgICAgICAgICAiJXMvZGJi
ZW5jaF9wb2x5REItJWQua2N0IiwKKyAgICAgICAgICAgICB0ZXN0X2Rpci5jX3N0cigpLAorICAg
ICAgICAgICAgIGRiX251bV8pOworCisgICAgLy8gQ3JlYXRlIHR1bmluZyBvcHRpb25zIGFuZCBv
cGVuIHRoZSBkYXRhYmFzZQorICAgIGludCBvcGVuX29wdGlvbnMgPSBreW90b2NhYmluZXQ6OlBv
bHlEQjo6T1dSSVRFUiB8CisgICAgICAgICAgICAgICAgICAgICAgIGt5b3RvY2FiaW5ldDo6UG9s
eURCOjpPQ1JFQVRFOworICAgIGludCB0dW5lX29wdGlvbnMgPSBreW90b2NhYmluZXQ6OlRyZWVE
Qjo6VFNNQUxMIHwKKyAgICAgICAga3lvdG9jYWJpbmV0OjpUcmVlREI6OlRMSU5FQVI7CisgICAg
aWYgKEZMQUdTX2NvbXByZXNzaW9uKSB7CisgICAgICB0dW5lX29wdGlvbnMgfD0ga3lvdG9jYWJp
bmV0OjpUcmVlREI6OlRDT01QUkVTUzsKKyAgICAgIGRiXy0+dHVuZV9jb21wcmVzc29yKCZjb21w
Xyk7CisgICAgfQorICAgIGRiXy0+dHVuZV9vcHRpb25zKHR1bmVfb3B0aW9ucyk7CisgICAgZGJf
LT50dW5lX3BhZ2VfY2FjaGUoRkxBR1NfY2FjaGVfc2l6ZSk7CisgICAgZGJfLT50dW5lX3BhZ2Uo
RkxBR1NfcGFnZV9zaXplKTsKKyAgICBkYl8tPnR1bmVfbWFwKDI1NkxMPDwyMCk7CisgICAgaWYg
KHN5bmMpIHsKKyAgICAgIG9wZW5fb3B0aW9ucyB8PSBreW90b2NhYmluZXQ6OlBvbHlEQjo6T0FV
VE9TWU5DOworICAgIH0KKyAgICBpZiAoIWRiXy0+b3BlbihmaWxlX25hbWUsIG9wZW5fb3B0aW9u
cykpIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAib3BlbiBlcnJvcjogJXNcbiIsIGRiXy0+ZXJy
b3IoKS5uYW1lKCkpOworICAgIH0KKyAgfQorCisgIHZvaWQgV3JpdGUoYm9vbCBzeW5jLCBPcmRl
ciBvcmRlciwgREJTdGF0ZSBzdGF0ZSwKKyAgICAgICAgICAgICBpbnQgbnVtX2VudHJpZXMsIGlu
dCB2YWx1ZV9zaXplLCBpbnQgZW50cmllc19wZXJfYmF0Y2gpIHsKKyAgICAvLyBDcmVhdGUgbmV3
IGRhdGFiYXNlIGlmIHN0YXRlID09IEZSRVNICisgICAgaWYgKHN0YXRlID09IEZSRVNIKSB7Cisg
ICAgICBpZiAoRkxBR1NfdXNlX2V4aXN0aW5nX2RiKSB7CisgICAgICAgIG1lc3NhZ2VfID0gInNr
aXBwaW5nICgtLXVzZV9leGlzdGluZ19kYiBpcyB0cnVlKSI7CisgICAgICAgIHJldHVybjsKKyAg
ICAgIH0KKyAgICAgIGRlbGV0ZSBkYl87CisgICAgICBkYl8gPSBOVUxMOworICAgICAgT3Blbihz
eW5jKTsKKyAgICAgIFN0YXJ0KCk7ICAvLyBEbyBub3QgY291bnQgdGltZSB0YWtlbiB0byBkZXN0
cm95L29wZW4KKyAgICB9CisKKyAgICBpZiAobnVtX2VudHJpZXMgIT0gbnVtXykgeworICAgICAg
Y2hhciBtc2dbMTAwXTsKKyAgICAgIHNucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksICIoJWQgb3Bz
KSIsIG51bV9lbnRyaWVzKTsKKyAgICAgIG1lc3NhZ2VfID0gbXNnOworICAgIH0KKworICAgIC8v
IFdyaXRlIHRvIGRhdGFiYXNlCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1fZW50cmllczsg
aSsrKQorICAgIHsKKyAgICAgIGNvbnN0IGludCBrID0gKG9yZGVyID09IFNFUVVFTlRJQUwpID8g
aSA6IChyYW5kXy5OZXh0KCkgJSBudW1fZW50cmllcyk7CisgICAgICBjaGFyIGtleVsxMDBdOwor
ICAgICAgc25wcmludGYoa2V5LCBzaXplb2Yoa2V5KSwgIiUwMTZkIiwgayk7CisgICAgICBieXRl
c18gKz0gdmFsdWVfc2l6ZSArIHN0cmxlbihrZXkpOworICAgICAgc3RkOjpzdHJpbmcgY3BwX2tl
eSA9IGtleTsKKyAgICAgIGlmICghZGJfLT5zZXQoY3BwX2tleSwgZ2VuXy5HZW5lcmF0ZSh2YWx1
ZV9zaXplKS5Ub1N0cmluZygpKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInNldCBlcnJv
cjogJXNcbiIsIGRiXy0+ZXJyb3IoKS5uYW1lKCkpOworICAgICAgfQorICAgICAgRmluaXNoZWRT
aW5nbGVPcCgpOworICAgIH0KKyAgfQorCisgIHZvaWQgUmVhZFNlcXVlbnRpYWwoKSB7CisgICAg
a3lvdG9jYWJpbmV0OjpEQjo6Q3Vyc29yKiBjdXIgPSBkYl8tPmN1cnNvcigpOworICAgIGN1ci0+
anVtcCgpOworICAgIHN0ZDo6c3RyaW5nIGNrZXksIGN2YWx1ZTsKKyAgICB3aGlsZSAoY3VyLT5n
ZXQoJmNrZXksICZjdmFsdWUsIHRydWUpKSB7CisgICAgICBieXRlc18gKz0gY2tleS5zaXplKCkg
KyBjdmFsdWUuc2l6ZSgpOworICAgICAgRmluaXNoZWRTaW5nbGVPcCgpOworICAgIH0KKyAgICBk
ZWxldGUgY3VyOworICB9CisKKyAgdm9pZCBSZWFkUmFuZG9tKCkgeworICAgIHN0ZDo6c3RyaW5n
IHZhbHVlOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVhZHNfOyBpKyspIHsKKyAgICAgIGNo
YXIga2V5WzEwMF07CisgICAgICBjb25zdCBpbnQgayA9IHJhbmRfLk5leHQoKSAlIHJlYWRzXzsK
KyAgICAgIHNucHJpbnRmKGtleSwgc2l6ZW9mKGtleSksICIlMDE2ZCIsIGspOworICAgICAgZGJf
LT5nZXQoa2V5LCAmdmFsdWUpOworICAgICAgRmluaXNoZWRTaW5nbGVPcCgpOworICAgIH0KKyAg
fQorfTsKKworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKKworaW50IG1haW4oaW50IGFyZ2MsIGNo
YXIqKiBhcmd2KSB7CisgIHN0ZDo6c3RyaW5nIGRlZmF1bHRfZGJfcGF0aDsKKyAgZm9yIChpbnQg
aSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKKyAgICBkb3VibGUgZDsKKyAgICBpbnQgbjsKKyAgICBj
aGFyIGp1bms7CisgICAgaWYgKGxldmVsZGI6OlNsaWNlKGFyZ3ZbaV0pLnN0YXJ0c193aXRoKCIt
LWJlbmNobWFya3M9IikpIHsKKyAgICAgIEZMQUdTX2JlbmNobWFya3MgPSBhcmd2W2ldICsgc3Ry
bGVuKCItLWJlbmNobWFya3M9Iik7CisgICAgfSBlbHNlIGlmIChzc2NhbmYoYXJndltpXSwgIi0t
Y29tcHJlc3Npb25fcmF0aW89JWxmJWMiLCAmZCwgJmp1bmspID09IDEpIHsKKyAgICAgIEZMQUdT
X2NvbXByZXNzaW9uX3JhdGlvID0gZDsKKyAgICB9IGVsc2UgaWYgKHNzY2FuZihhcmd2W2ldLCAi
LS1oaXN0b2dyYW09JWQlYyIsICZuLCAmanVuaykgPT0gMSAmJgorICAgICAgICAgICAgICAgKG4g
PT0gMCB8fCBuID09IDEpKSB7CisgICAgICBGTEFHU19oaXN0b2dyYW0gPSBuOworICAgIH0gZWxz
ZSBpZiAoc3NjYW5mKGFyZ3ZbaV0sICItLW51bT0lZCVjIiwgJm4sICZqdW5rKSA9PSAxKSB7Cisg
ICAgICBGTEFHU19udW0gPSBuOworICAgIH0gZWxzZSBpZiAoc3NjYW5mKGFyZ3ZbaV0sICItLXJl
YWRzPSVkJWMiLCAmbiwgJmp1bmspID09IDEpIHsKKyAgICAgIEZMQUdTX3JlYWRzID0gbjsKKyAg
ICB9IGVsc2UgaWYgKHNzY2FuZihhcmd2W2ldLCAiLS12YWx1ZV9zaXplPSVkJWMiLCAmbiwgJmp1
bmspID09IDEpIHsKKyAgICAgIEZMQUdTX3ZhbHVlX3NpemUgPSBuOworICAgIH0gZWxzZSBpZiAo
c3NjYW5mKGFyZ3ZbaV0sICItLWNhY2hlX3NpemU9JWQlYyIsICZuLCAmanVuaykgPT0gMSkgewor
ICAgICAgRkxBR1NfY2FjaGVfc2l6ZSA9IG47CisgICAgfSBlbHNlIGlmIChzc2NhbmYoYXJndltp
XSwgIi0tcGFnZV9zaXplPSVkJWMiLCAmbiwgJmp1bmspID09IDEpIHsKKyAgICAgIEZMQUdTX3Bh
Z2Vfc2l6ZSA9IG47CisgICAgfSBlbHNlIGlmIChzc2NhbmYoYXJndltpXSwgIi0tY29tcHJlc3Np
b249JWQlYyIsICZuLCAmanVuaykgPT0gMSAmJgorICAgICAgICAgICAgICAgKG4gPT0gMCB8fCBu
ID09IDEpKSB7CisgICAgICBGTEFHU19jb21wcmVzc2lvbiA9IChuID09IDEpID8gdHJ1ZSA6IGZh
bHNlOworICAgIH0gZWxzZSBpZiAoc3RybmNtcChhcmd2W2ldLCAiLS1kYj0iLCA1KSA9PSAwKSB7
CisgICAgICBGTEFHU19kYiA9IGFyZ3ZbaV0gKyA1OworICAgIH0gZWxzZSB7CisgICAgICBmcHJp
bnRmKHN0ZGVyciwgIkludmFsaWQgZmxhZyAnJXMnXG4iLCBhcmd2W2ldKTsKKyAgICAgIGV4aXQo
MSk7CisgICAgfQorICB9CisKKyAgLy8gQ2hvb3NlIGEgbG9jYXRpb24gZm9yIHRoZSB0ZXN0IGRh
dGFiYXNlIGlmIG5vbmUgZ2l2ZW4gd2l0aCAtLWRiPTxwYXRoPgorICBpZiAoRkxBR1NfZGIgPT0g
TlVMTCkgeworICAgICAgbGV2ZWxkYjo6RW52OjpEZWZhdWx0KCktPkdldFRlc3REaXJlY3Rvcnko
JmRlZmF1bHRfZGJfcGF0aCk7CisgICAgICBkZWZhdWx0X2RiX3BhdGggKz0gIi9kYmJlbmNoIjsK
KyAgICAgIEZMQUdTX2RiID0gZGVmYXVsdF9kYl9wYXRoLmNfc3RyKCk7CisgIH0KKworICBsZXZl
bGRiOjpCZW5jaG1hcmsgYmVuY2htYXJrOworICBiZW5jaG1hcmsuUnVuKCk7CisgIHJldHVybiAw
OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kb2MvYmVuY2htYXJr
Lmh0bWwgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RvYy9iZW5jaG1hcmsuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5jNDYzOTc3MmMxNzViNDYzZjZmNDFlZWIwY2QwYzczZmU3YzE2ZDY4Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kb2MvYmVuY2htYXJrLmh0bWwK
QEAgLTAsMCArMSw0NTkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzx0aXRs
ZT5MZXZlbERCIEJlbmNobWFya3M8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1U
eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPgorPHN0eWxlPgorYm9keSB7
CisgIGZvbnQtZmFtaWx5OkhlbHZldGljYSxzYW5zLXNlcmlmOworICBwYWRkaW5nOjIwcHg7Cit9
CisKK2gyIHsKKyAgcGFkZGluZy10b3A6MzBweDsKK30KKwordGFibGUuYm4geworICB3aWR0aDo4
MDBweDsKKyAgYm9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlOworICBib3JkZXI6MDsKKyAgcGFkZGlu
ZzowOworfQorCit0YWJsZS5ibmJhc2UgeworICB3aWR0aDo2NTBweDsKK30KKwordGFibGUuYm4g
dGQgeworICBwYWRkaW5nOjJweCAwOworfQorCit0YWJsZS5ibiB0ZC5jMSB7CisgIGZvbnQtd2Vp
Z2h0OmJvbGQ7CisgIHdpZHRoOjE1MHB4OworfQorCit0YWJsZS5ibiB0ZC5jMSBkaXYuZSB7Cisg
IGZsb2F0OnJpZ2h0OworICBmb250LXdlaWdodDpub3JtYWw7Cit9CisKK3RhYmxlLmJuIHRkLmMy
IHsKKyAgd2lkdGg6MTUwcHg7CisgIHRleHQtYWxpZ246cmlnaHQ7CisgIHBhZGRpbmc6MnB4Owor
fQorCit0YWJsZS5ibiB0ZC5jMyB7CisgIHdpZHRoOjM1MHB4OworfQorCit0YWJsZS5ibiB0ZC5j
NCB7CisgIHdpZHRoOjE1MHB4OworICBmb250LXNpemU6c21hbGw7CisgIHBhZGRpbmctbGVmdDo0
cHg7Cit9CisKKy8qIGNoYXJ0IGJhcnMgKi8KK2Rpdi5ibGRiIHsKKyAgYmFja2dyb3VuZC1jb2xv
cjojMDI1NWRmOworfQorCitkaXYuYmtjdCB7CisgIGJhY2tncm91bmQtY29sb3I6I2RmNTU1NTsK
K30KKworZGl2LmJzcWwgeworICBiYWNrZ3JvdW5kLWNvbG9yOiNhYWRmNTU7Cit9CisKKy5jb2Rl
IHsKKyAgZm9udC1mYW1pbHk6bW9ub3NwYWNlOworICBmb250LXNpemU6bGFyZ2U7Cit9CisKKy50
b2RvIHsKKyAgY29sb3I6IHJlZDsKK30KKworPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGgx
PkxldmVsREIgQmVuY2htYXJrczwvaDE+Cis8cD5Hb29nbGUsIEp1bHkgMjAxMTwvcD4KKzxocj4K
KworPHA+SW4gb3JkZXIgdG8gdGVzdCBMZXZlbERCJ3MgcGVyZm9ybWFuY2UsIHdlIGJlbmNobWFy
ayBpdCBhZ2FpbnN0IG90aGVyIHdlbGwtZXN0YWJsaXNoZWQgZGF0YWJhc2UgaW1wbGVtZW50YXRp
b25zLiBXZSBjb21wYXJlIExldmVsREIgKHJldmlzaW9uIDM5KSBhZ2FpbnN0IDxhIGhyZWY9Imh0
dHA6Ly93d3cuc3FsaXRlLm9yZy8iPlNRTGl0ZTM8L2E+ICh2ZXJzaW9uIDMuNy42LjMpIGFuZCA8
YSBocmVmPSJodHRwOi8vZmFsbGFicy5jb20va3lvdG9jYWJpbmV0L3NwZXguaHRtbCI+S3lvdG8g
Q2FiaW5ldCdzPC9hPiAodmVyc2lvbiAxLjIuNjcpIFRyZWVEQiAoYSBCK1RyZWUgYmFzZWQga2V5
LXZhbHVlIHN0b3JlKS4gV2Ugd291bGQgbGlrZSB0byBhY2tub3dsZWRnZSBTY290dCBIZXNzIGFu
ZCBNaWtpbyBIaXJhYmF5YXNoaSBmb3IgdGhlaXIgc3VnZ2VzdGlvbnMgYW5kIGNvbnRyaWJ1dGlv
bnMgdG8gdGhlIFNRTGl0ZTMgYW5kIEt5b3RvIENhYmluZXQgYmVuY2htYXJrcywgcmVzcGVjdGl2
ZWx5LjwvcD4KKworPHA+QmVuY2htYXJrcyB3ZXJlIGFsbCBwZXJmb3JtZWQgb24gYSBzaXgtY29y
ZSBJbnRlbChSKSBYZW9uKFIpIENQVSBYNTY1MCBAIDIuNjdHSHosIHdpdGggMTIyODggS0Igb2Yg
dG90YWwgTDMgY2FjaGUgYW5kIDEyIEdCIG9mIEREUjMgUkFNIGF0IDEzMzMgTUh6LiAoTm90ZSB0
aGF0IExldmVsREIgdXNlcyBhdCBtb3N0IHR3byBDUFVzIHNpbmNlIHRoZSBiZW5jaG1hcmtzIGFy
ZSBzaW5nbGUgdGhyZWFkZWQ6IG9uZSB0byBydW4gdGhlIGJlbmNobWFyaywgYW5kIG9uZSBmb3Ig
YmFja2dyb3VuZCBjb21wYWN0aW9ucy4pIFdlIHJhbiB0aGUgYmVuY2htYXJrcyBvbiB0d28gbWFj
aGluZXMgKHdpdGggaWRlbnRpY2FsIHByb2Nlc3NvcnMpLCBvbmUgd2l0aCBhbiBFeHQzIGZpbGUg
c3lzdGVtIGFuZCBvbmUgd2l0aCBhbiBFeHQ0IGZpbGUgc3lzdGVtLiBUaGUgbWFjaGluZSB3aXRo
IHRoZSBFeHQzIGZpbGUgc3lzdGVtIGhhcyBhIFNBVEEgSGl0YWNoaSBIRFM3MjEwNTBDTEEzNjIg
aGFyZCBkcml2ZS4gVGhlIG1hY2hpbmUgd2l0aCB0aGUgRXh0NCBmaWxlIHN5c3RlbSBoYXMgYSBT
QVRBIFNhbXN1bmcgSEQ1MDJISiBoYXJkIGRyaXZlLiBCb3RoIGhhcmQgZHJpdmVzIHNwaW4gYXQg
NzIwMCBSUE0gYW5kIGhhdmUgaGFyZCBkcml2ZSB3cml0ZS1jYWNoaW5nIGVuYWJsZWQgKHVzaW5n
IGBoZHBhcm0gLVcgMSBbZGV2aWNlXWApLiBUaGUgbnVtYmVycyByZXBvcnRlZCBiZWxvdyBhcmUg
dGhlIG1lZGlhbiBvZiB0aHJlZSBtZWFzdXJlbWVudHMuPC9wPgorCis8aDQ+QmVuY2htYXJrIFNv
dXJjZSBDb2RlPC9oND4KKzxwPldlIHdyb3RlIGJlbmNobWFyayB0b29scyBmb3IgU1FMaXRlIGFu
ZCBLeW90byBUcmVlREIgYmFzZWQgb24gTGV2ZWxEQidzIDxzcGFuIGNsYXNzPSJjb2RlIj5kYl9i
ZW5jaDwvc3Bhbj4uIFRoZSBjb2RlIGZvciBlYWNoIG9mIHRoZSBiZW5jaG1hcmtzIHJlc2lkZXMg
aGVyZTo8L3A+Cis8dWw+CisJPGxpPiA8Yj5MZXZlbERCOjwvYj4gPGEgaHJlZj0iaHR0cDovL2Nv
ZGUuZ29vZ2xlLmNvbS9wL2xldmVsZGIvc291cmNlL2Jyb3dzZS90cnVuay9kYi9kYl9iZW5jaC5j
YyI+ZGIvZGJfYmVuY2guY2M8L2E+LjwvbGk+CisJPGxpPiA8Yj5TUUxpdGU6PC9iPiA8YSBocmVm
PSJodHRwOi8vY29kZS5nb29nbGUuY29tL3AvbGV2ZWxkYi9zb3VyY2UvYnJvd3NlLyNzdm4lMkZ0
cnVuayUyRmRvYyUyRmJlbmNoJTJGZGJfYmVuY2hfc3FsaXRlMy5jYyI+ZG9jL2JlbmNoL2RiX2Jl
bmNoX3NxbGl0ZTMuY2M8L2E+LjwvbGk+CisJPGxpPiA8Yj5LeW90byBUcmVlREI6PC9iPiA8YSBo
cmVmPSJodHRwOi8vY29kZS5nb29nbGUuY29tL3AvbGV2ZWxkYi9zb3VyY2UvYnJvd3NlLyNzdm4l
MkZ0cnVuayUyRmRvYyUyRmJlbmNoJTJGZGJfYmVuY2hfdHJlZV9kYi5jYyI+ZG9jL2JlbmNoL2Ri
X2JlbmNoX3RyZWVfZGIuY2M8L2E+LjwvbGk+Cis8L3VsPgorCis8aDQ+Q3VzdG9tIEJ1aWxkIFNw
ZWNpZmljYXRpb25zPC9oND4KKzx1bD4KKzxsaT5MZXZlbERCOiBMZXZlbERCIHdhcyBjb21waWxl
ZCB3aXRoIHRoZSA8YSBocmVmPSJodHRwOi8vY29kZS5nb29nbGUuY29tL3AvZ29vZ2xlLXBlcmZ0
b29scyI+dGNtYWxsb2M8L2E+IGxpYnJhcnkgYW5kIHRoZSA8YSBocmVmPSJodHRwOi8vY29kZS5n
b29nbGUuY29tL3Avc25hcHB5LyI+U25hcHB5PC9hPiBjb21wcmVzc2lvbiBsaWJyYXJ5IChyZXZp
c2lvbiAzMykuICBBc3NlcnRpb25zIHdlcmUgZGlzYWJsZWQuPC9saT4KKzxsaT5UcmVlREI6IFRy
ZWVEQiB3YXMgY29tcGlsZWQgdXNpbmcgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cub2Jlcmh1bWVy
LmNvbS9vcGVuc291cmNlL2x6by8iPkxaTzwvYT4gY29tcHJlc3Npb24gbGlicmFyeSAodmVyc2lv
biAyLjAzKS4gRnVydGhlcm1vcmUsIHdlIGVuYWJsZWQgdGhlIFRTTUFMTCBhbmQgVExJTkVBUiBv
cHRpb25zIHdoZW4gb3BlbmluZyB0aGUgZGF0YWJhc2UgaW4gb3JkZXIgdG8gcmVkdWNlIHRoZSBm
b290cHJpbnQgb2YgZWFjaCByZWNvcmQuPC9saT4KKzxsaT5TUUxpdGU6IFdlIHR1bmVkIFNRTGl0
ZSdzIHBlcmZvcm1hbmNlLCBieSBzZXR0aW5nIGl0cyBsb2NraW5nIG1vZGUgdG8gZXhjbHVzaXZl
LiAgV2UgYWxzbyBlbmFibGVkIFNRTGl0ZSdzIDxhIGhyZWY9Imh0dHA6Ly93d3cuc3FsaXRlLm9y
Zy9kcmFmdC93YWwuaHRtbCI+d3JpdGUtYWhlYWQgbG9nZ2luZzwvYT4uPC9saT4KKzwvdWw+CisK
KzxoMj4xLiBCYXNlbGluZSBQZXJmb3JtYW5jZTwvaDI+Cis8cD5UaGlzIHNlY3Rpb24gZ2l2ZXMg
dGhlIGJhc2VsaW5lIHBlcmZvcm1hbmNlIG9mIGFsbCB0aGUKK2RhdGFiYXNlcy4gIEZvbGxvd2lu
ZyBzZWN0aW9ucyBzaG93IGhvdyBwZXJmb3JtYW5jZSBjaGFuZ2VzIGFzIHZhcmlvdXMKK3BhcmFt
ZXRlcnMgYXJlIHZhcmllZC4gIEZvciB0aGUgYmFzZWxpbmU6PC9wPgorPHVsPgorCTxsaT4gRWFj
aCBkYXRhYmFzZSBpcyBhbGxvd2VkIDQgTUIgb2YgY2FjaGUgbWVtb3J5LjwvbGk+CisgICAgICAg
IDxsaT4gRGF0YWJhc2VzIGFyZSBvcGVuZWQgaW4gPGVtPmFzeW5jaHJvbm91czwvZW0+IHdyaXRl
IG1vZGUuCisgICAgICAgICAgICAgKExldmVsREIncyBzeW5jIG9wdGlvbiwgVHJlZURCJ3MgT0FV
VE9TWU5DIG9wdGlvbiwgYW5kCisgICAgICAgICAgICAgU1FMaXRlMydzIHN5bmNocm9ub3VzIG9w
dGlvbnMgYXJlIGFsbCB0dXJuZWQgb2ZmKS4gIEkuZS4sCisgICAgICAgICAgICAgZXZlcnkgd3Jp
dGUgaXMgcHVzaGVkIHRvIHRoZSBvcGVyYXRpbmcgc3lzdGVtLCBidXQgdGhlCisgICAgICAgICAg
ICAgYmVuY2htYXJrIGRvZXMgbm90IHdhaXQgZm9yIHRoZSB3cml0ZSB0byByZWFjaCB0aGUgZGlz
ay48L2xpPgorCTxsaT4gS2V5cyBhcmUgMTYgYnl0ZXMgZWFjaC48L2xpPgorICAgICAgICA8bGk+
IFZhbHVlIGFyZSAxMDAgYnl0ZXMgZWFjaCAod2l0aCBlbm91Z2ggcmVkdW5kYW5jeSBzbyB0aGF0
CisgICAgICAgICAgICAgYSBzaW1wbGUgY29tcHJlc3NvciBzaHJpbmtzIHRoZW0gdG8gNTAlIG9m
IHRoZWlyIG9yaWdpbmFsCisgICAgICAgICAgICAgc2l6ZSkuPC9saT4KKwk8bGk+IFNlcXVlbnRp
YWwgcmVhZHMvd3JpdGVzIHRyYXZlcnNlIHRoZSBrZXkgc3BhY2UgaW4gaW5jcmVhc2luZyBvcmRl
ci48L2xpPgorCTxsaT4gUmFuZG9tIHJlYWRzL3dyaXRlcyB0cmF2ZXJzZSB0aGUga2V5IHNwYWNl
IGluIHJhbmRvbSBvcmRlci48L2xpPgorPC91bD4KKworPGgzPkEuIFNlcXVlbnRpYWwgUmVhZHM8
L2gzPgorPHRhYmxlIGNsYXNzPSJibiBibmJhc2UiPgorPHRyPjx0ZCBjbGFzcz0iYzEiPkxldmVs
REI8L3RkPgorICAgIDx0ZCBjbGFzcz0iYzIiPjQsMDMwLDAwMCBvcHMvc2VjPC90ZD4KKyAgICA8
dGQgY2xhc3M9ImMzIj48ZGl2IGNsYXNzPSJibGRiIiBzdHlsZT0id2lkdGg6MzUwcHgiPiZuYnNw
OzwvZGl2PjwvdGQ+Cis8dHI+PHRkIGNsYXNzPSJjMSI+S3lvdG8gVHJlZURCPC90ZD4KKyAgICA8
dGQgY2xhc3M9ImMyIj4xLDAxMCwwMDAgb3BzL3NlYzwvdGQ+CisgICAgPHRkIGNsYXNzPSJjMyI+
PGRpdiBjbGFzcz0iYmtjdCIgc3R5bGU9IndpZHRoOjk1cHgiPiZuYnNwOzwvZGl2PjwvdGQ+Cis8
dHI+PHRkIGNsYXNzPSJjMSI+U1FMaXRlMzwvdGQ+CisgICAgPHRkIGNsYXNzPSJjMiI+MzgzLDAw
MCBvcHMvc2VjPC90ZD4KKyAgICA8dGQgY2xhc3M9ImMzIj48ZGl2IGNsYXNzPSJic3FsIiBzdHls
ZT0id2lkdGg6MzNweCI+Jm5ic3A7PC9kaXY+PC90ZD4KKzwvdGFibGU+Cis8aDM+Qi4gUmFuZG9t
IFJlYWRzPC9oMz4KKzx0YWJsZSBjbGFzcz0iYm4gYm5iYXNlIj4KKzx0cj48dGQgY2xhc3M9ImMx
Ij5MZXZlbERCPC90ZD4KKyAgICA8dGQgY2xhc3M9ImMyIj4xMjksMDAwIG9wcy9zZWM8L3RkPgor
ICAgIDx0ZCBjbGFzcz0iYzMiPjxkaXYgY2xhc3M9ImJsZGIiIHN0eWxlPSJ3aWR0aDoyOThweCI+
Jm5ic3A7PC9kaXY+PC90ZD4KKzx0cj48dGQgY2xhc3M9ImMxIj5LeW90byBUcmVlREI8L3RkPgor
ICAgIDx0ZCBjbGFzcz0iYzIiPjE1MSwwMDAgb3BzL3NlYzwvdGQ+CisgICAgPHRkIGNsYXNzPSJj
MyI+PGRpdiBjbGFzcz0iYmtjdCIgc3R5bGU9IndpZHRoOjM1MHB4Ij4mbmJzcDs8L2Rpdj48L3Rk
PgorPHRyPjx0ZCBjbGFzcz0iYzEiPlNRTGl0ZTM8L3RkPgorICAgIDx0ZCBjbGFzcz0iYzIiPjEz
NCwwMDAgb3BzL3NlYzwvdGQ+CisgICAgPHRkIGNsYXNzPSJjMyI+PGRpdiBjbGFzcz0iYnNxbCIg
c3R5bGU9IndpZHRoOjMxMHB4Ij4mbmJzcDs8L2Rpdj48L3RkPgorPC90YWJsZT4KKzxoMz5DLiBT
ZXF1ZW50aWFsIFdyaXRlczwvaDM+Cis8dGFibGUgY2xhc3M9ImJuIGJuYmFzZSI+Cis8dHI+PHRk
IGNsYXNzPSJjMSI+TGV2ZWxEQjwvdGQ+CisgICAgPHRkIGNsYXNzPSJjMiI+Nzc5LDAwMCBvcHMv
c2VjPC90ZD4KKyAgICA8dGQgY2xhc3M9ImMzIj48ZGl2IGNsYXNzPSJibGRiIiBzdHlsZT0id2lk
dGg6MzUwcHgiPiZuYnNwOzwvZGl2PjwvdGQ+Cis8dHI+PHRkIGNsYXNzPSJjMSI+S3lvdG8gVHJl
ZURCPC90ZD4KKyAgICA8dGQgY2xhc3M9ImMyIj4zNDIsMDAwIG9wcy9zZWM8L3RkPgorICAgIDx0
ZCBjbGFzcz0iYzMiPjxkaXYgY2xhc3M9ImJrY3QiIHN0eWxlPSJ3aWR0aDoxNTRweCI+Jm5ic3A7
PC9kaXY+PC90ZD4KKzx0cj48dGQgY2xhc3M9ImMxIj5TUUxpdGUzPC90ZD4KKyAgICA8dGQgY2xh
c3M9ImMyIj40OCw2MDAgb3BzL3NlYzwvdGQ+CisgICAgPHRkIGNsYXNzPSJjMyI+PGRpdiBjbGFz
cz0iYnNxbCIgc3R5bGU9IndpZHRoOjIycHgiPiZuYnNwOzwvZGl2PjwvdGQ+Cis8L3RhYmxlPgor
PGgzPkQuIFJhbmRvbSBXcml0ZXM8L2gzPgorPHRhYmxlIGNsYXNzPSJibiBibmJhc2UiPgorPHRy
Pjx0ZCBjbGFzcz0iYzEiPkxldmVsREI8L3RkPgorICAgIDx0ZCBjbGFzcz0iYzIiPjE2NCwwMDAg
b3BzL3NlYzwvdGQ+CisgICAgPHRkIGNsYXNzPSJjMyI+PGRpdiBjbGFzcz0iYmxkYiIgc3R5bGU9
IndpZHRoOjM1MHB4Ij4mbmJzcDs8L2Rpdj48L3RkPgorPHRyPjx0ZCBjbGFzcz0iYzEiPkt5b3Rv
IFRyZWVEQjwvdGQ+CisgICAgPHRkIGNsYXNzPSJjMiI+ODgsNTAwIG9wcy9zZWM8L3RkPgorICAg
IDx0ZCBjbGFzcz0iYzMiPjxkaXYgY2xhc3M9ImJrY3QiIHN0eWxlPSJ3aWR0aDoxODhweCI+Jm5i
c3A7PC9kaXY+PC90ZD4KKzx0cj48dGQgY2xhc3M9ImMxIj5TUUxpdGUzPC90ZD4KKyAgICA8dGQg
Y2xhc3M9ImMyIj45LDg2MCBvcHMvc2VjPC90ZD4KKyAgICA8dGQgY2xhc3M9ImMzIj48ZGl2IGNs
YXNzPSJic3FsIiBzdHlsZT0id2lkdGg6MjFweCI+Jm5ic3A7PC9kaXY+PC90ZD4KKzwvdGFibGU+
CisKKzxwPkxldmVsREIgb3V0cGVyZm9ybXMgYm90aCBTUUxpdGUzIGFuZCBUcmVlREIgaW4gc2Vx
dWVudGlhbCBhbmQgcmFuZG9tIHdyaXRlIG9wZXJhdGlvbnMgYW5kIHNlcXVlbnRpYWwgcmVhZCBv
cGVyYXRpb25zLiBLeW90byBDYWJpbmV0IGhhcyB0aGUgZmFzdGVzdCByYW5kb20gcmVhZCBvcGVy
YXRpb25zLjwvcD4KKworPGgyPjIuIFdyaXRlIFBlcmZvcm1hbmNlIHVuZGVyIERpZmZlcmVudCBD
b25maWd1cmF0aW9uczwvaDI+Cis8aDM+QS4gTGFyZ2UgVmFsdWVzIDwvaDM+Cis8cD5Gb3IgdGhp
cyBiZW5jaG1hcmssIHdlIHN0YXJ0IHdpdGggYW4gZW1wdHkgZGF0YWJhc2UsIGFuZCB3cml0ZSAx
MDAsMDAwIGJ5dGUgdmFsdWVzICh+NTAlIGNvbXByZXNzaWJsZSkuIFRvIGtlZXAgdGhlIGJlbmNo
bWFyayBydW5uaW5nIHRpbWUgcmVhc29uYWJsZSwgd2Ugc3RvcCBhZnRlciB3cml0aW5nIDEwMDAg
dmFsdWVzLjwvcD4KKzxoND5TZXF1ZW50aWFsIFdyaXRlczwvaDQ+Cis8dGFibGUgY2xhc3M9ImJu
IGJuYmFzZSI+Cis8dHI+PHRkIGNsYXNzPSJjMSI+TGV2ZWxEQjwvdGQ+CisgICAgPHRkIGNsYXNz
PSJjMiI+MSwxMDAgb3BzL3NlYzwvdGQ+CisgICAgPHRkIGNsYXNzPSJjMyI+PGRpdiBjbGFzcz0i
YmxkYiIgc3R5bGU9IndpZHRoOjIzNHB4Ij4mbmJzcDs8L2Rpdj48L3RkPjwvdHI+Cis8dHI+PHRk
IGNsYXNzPSJjMSI+S3lvdG8gVHJlZURCPC90ZD4KKyAgICA8dGQgY2xhc3M9ImMyIj4xLDAwMCBv
cHMvc2VjPC90ZD4KKyAgICA8dGQgY2xhc3M9ImMzIj48ZGl2IGNsYXNzPSJia2N0IiBzdHlsZT0i
d2lkdGg6MjI0cHgiPiZuYnNwOzwvZGl2PjwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9ImMxIj5T
UUxpdGUzPC90ZD4KKyAgICA8dGQgY2xhc3M9ImMyIj4xLDYwMCBvcHMvc2VjPC90ZD4KKyAgICA8
dGQgY2xhc3M9ImMzIj48ZGl2IGNsYXNzPSJic3FsIiBzdHlsZT0id2lkdGg6MzUwcHgiPiZuYnNw
OzwvZGl2PjwvdGQ+PC90cj4KKzwvdGFibGU+Cis8aDQ+UmFuZG9tIFdyaXRlczwvaDQ+Cis8dGFi
bGUgY2xhc3M9ImJuIGJuYmFzZSI+Cis8dHI+PHRkIGNsYXNzPSJjMSI+TGV2ZWxEQjwvdGQ+Cisg
ICAgPHRkIGNsYXNzPSJjMiI+NDgwIG9wcy9zZWM8L3RkPgorICAgIDx0ZCBjbGFzcz0iYzMiPjxk
aXYgY2xhc3M9ImJsZGIiIHN0eWxlPSJ3aWR0aDoxMDVweCI+Jm5ic3A7PC9kaXY+PC90ZD48L3Ry
PgorPHRyPjx0ZCBjbGFzcz0iYzEiPkt5b3RvIFRyZWVEQjwvdGQ+CisgICAgPHRkIGNsYXNzPSJj
MiI+MSwxMDAgb3BzL3NlYzwvdGQ+CisgICAgPHRkIGNsYXNzPSJjMyI+PGRpdiBjbGFzcz0iYmtj
dCIgc3R5bGU9IndpZHRoOjI0MHB4Ij4mbmJzcDs8L2Rpdj48L3RkPjwvdHI+Cis8dHI+PHRkIGNs
YXNzPSJjMSI+U1FMaXRlMzwvdGQ+CisgICAgPHRkIGNsYXNzPSJjMiI+MSw2MDAgb3BzL3NlYzwv
dGQ+CisgICAgPHRkIGNsYXNzPSJjMyI+PGRpdiBjbGFzcz0iYnNxbCIgc3R5bGU9IndpZHRoOjM1
MHB4Ij4mbmJzcDs8L2Rpdj48L3RkPjwvdHI+Cis8L3RhYmxlPgorPHA+TGV2ZWxEQiBkb2Vzbid0
IHBlcmZvcm0gYXMgd2VsbCB3aXRoIGxhcmdlIHZhbHVlcyBvZiAxMDAsMDAwIGJ5dGVzIGVhY2gu
IFRoaXMgaXMgYmVjYXVzZSBMZXZlbERCIHdyaXRlcyBrZXlzIGFuZCB2YWx1ZXMgYXQgbGVhc3Qg
dHdpY2U6IGZpcnN0IHRpbWUgdG8gdGhlIHRyYW5zYWN0aW9uIGxvZywgYW5kIHNlY29uZCB0aW1l
IChkdXJpbmcgYSBjb21wYWN0aW9uKSB0byBhIHNvcnRlZCBmaWxlLgorV2l0aCBsYXJnZXIgdmFs
dWVzLCBMZXZlbERCJ3MgcGVyLW9wZXJhdGlvbiBlZmZpY2llbmN5IGlzIHN3YW1wZWQgYnkgdGhl
Citjb3N0IG9mIGV4dHJhIGNvcGllcyBvZiBsYXJnZSB2YWx1ZXMuPC9wPgorPGgzPkIuIEJhdGNo
IFdyaXRlczwvaDM+Cis8cD5BIGJhdGNoIHdyaXRlIGlzIGEgc2V0IG9mIHdyaXRlcyB0aGF0IGFy
ZSBhcHBsaWVkIGF0b21pY2FsbHkgdG8gdGhlIHVuZGVybHlpbmcgZGF0YWJhc2UuIEEgc2luZ2xl
IGJhdGNoIG9mIE4gd3JpdGVzIG1heSBiZSBzaWduaWZpY2FudGx5IGZhc3RlciB0aGFuIE4gaW5k
aXZpZHVhbCB3cml0ZXMuIFRoZSBmb2xsb3dpbmcgYmVuY2htYXJrIHdyaXRlcyBvbmUgdGhvdXNh
bmQgYmF0Y2hlcyB3aGVyZSBlYWNoIGJhdGNoIGNvbnRhaW5zIG9uZSB0aG91c2FuZCAxMDAtYnl0
ZSB2YWx1ZXMuIFRyZWVEQiBkb2VzIG5vdCBzdXBwb3J0IGJhdGNoIHdyaXRlcyBhbmQgaXMgb21p
dHRlZCBmcm9tIHRoaXMgYmVuY2htYXJrLjwvcD4KKzxoND5TZXF1ZW50aWFsIFdyaXRlczwvaDQ+
Cis8dGFibGUgY2xhc3M9ImJuIj4KKzx0cj48dGQgY2xhc3M9ImMxIj5MZXZlbERCPC90ZD4KKyAg
ICA8dGQgY2xhc3M9ImMyIj44NDAsMDAwIGVudHJpZXMvc2VjPC90ZD4KKyAgICA8dGQgY2xhc3M9
ImMzIj48ZGl2IGNsYXNzPSJibGRiIiBzdHlsZT0id2lkdGg6MzUwcHgiPiZuYnNwOzwvZGl2Pjwv
dGQ+CisgICAgPHRkIGNsYXNzPSJjNCI+KDEuMDh4IGJhc2VsaW5lKTwvdGQ+PC90cj4KKzx0cj48
dGQgY2xhc3M9ImMxIj5TUUxpdGUzPC90ZD4KKyAgICA8dGQgY2xhc3M9ImMyIj4xMjQsMDAwIGVu
dHJpZXMvc2VjPC90ZD4KKyAgICA8dGQgY2xhc3M9ImMzIj48ZGl2IGNsYXNzPSJic3FsIiBzdHls
ZT0id2lkdGg6NTJweCI+Jm5ic3A7PC9kaXY+PC90ZD4KKyAgICA8dGQgY2xhc3M9ImM0Ij4oMi41
NXggYmFzZWxpbmUpPC90ZD48L3RyPgorPC90YWJsZT4KKzxoND5SYW5kb20gV3JpdGVzPC9oND4K
Kzx0YWJsZSBjbGFzcz0iYm4iPgorPHRyPjx0ZCBjbGFzcz0iYzEiPkxldmVsREI8L3RkPgorICAg
IDx0ZCBjbGFzcz0iYzIiPjIyMSwwMDAgZW50cmllcy9zZWM8L3RkPgorICAgIDx0ZCBjbGFzcz0i
YzMiPjxkaXYgY2xhc3M9ImJsZGIiIHN0eWxlPSJ3aWR0aDozNTBweCI+Jm5ic3A7PC9kaXY+PC90
ZD4KKyAgICA8dGQgY2xhc3M9ImM0Ij4oMS4zNXggYmFzZWxpbmUpPC90ZD48L3RyPgorPHRyPjx0
ZCBjbGFzcz0iYzEiPlNRTGl0ZTM8L3RkPgorICAgIDx0ZCBjbGFzcz0iYzIiPjIyLDAwMCBlbnRy
aWVzL3NlYzwvdGQ+CisgICAgPHRkIGNsYXNzPSJjMyI+PGRpdiBjbGFzcz0iYnNxbCIgc3R5bGU9
IndpZHRoOjM0cHgiPiZuYnNwOzwvZGl2PjwvdGQ+CisgICAgPHRkIGNsYXNzPSJjNCI+KDIuMjN4
IGJhc2VsaW5lKTwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxwPkJlY2F1c2Ugb2YgdGhlIHdheSBM
ZXZlbERCIHBlcnNpc3RlbnQgc3RvcmFnZSBpcyBvcmdhbml6ZWQsIGJhdGNoZXMgb2YKK3JhbmRv
bSB3cml0ZXMgYXJlIG5vdCBtdWNoIHNsb3dlciAob25seSBhIGZhY3RvciBvZiA0eCkgdGhhbiBi
YXRjaGVzCitvZiBzZXF1ZW50aWFsIHdyaXRlcy48L3A+CisKKzxoMz5DLiBTeW5jaHJvbm91cyBX
cml0ZXM8L2gzPgorPHA+SW4gdGhlIGZvbGxvd2luZyBiZW5jaG1hcmssIHdlIGVuYWJsZSB0aGUg
c3luY2hyb25vdXMgd3JpdGluZyBtb2Rlcworb2YgYWxsIG9mIHRoZSBkYXRhYmFzZXMuICBTaW5j
ZSB0aGlzIGNoYW5nZSBzaWduaWZpY2FudGx5IHNsb3dzIGRvd24gdGhlCitiZW5jaG1hcmssIHdl
IHN0b3AgYWZ0ZXIgMTAsMDAwIHdyaXRlcy4gRm9yIHN5bmNocm9ub3VzIHdyaXRlIHRlc3RzLCB3
ZSd2ZQorZGlzYWJsZWQgaGFyZCBkcml2ZSB3cml0ZS1jYWNoaW5nICh1c2luZyBgaGRwYXJtIC1X
IDAgW2RldmljZV1gKS48L3A+Cis8dWw+CisgICAgPGxpPkZvciBMZXZlbERCLCB3ZSBzZXQgV3Jp
dGVPcHRpb25zLnN5bmMgPSB0cnVlLjwvbGk+CisgICAgPGxpPkluIFRyZWVEQiwgd2UgZW5hYmxl
ZCBUcmVlREIncyBPQVVUT1NZTkMgb3B0aW9uLjwvbGk+CisgICAgPGxpPkZvciBTUUxpdGUzLCB3
ZSBzZXQgIlBSQUdNQSBzeW5jaHJvbm91cyA9IEZVTEwiLjwvbGk+Cis8L3VsPgorPGg0PlNlcXVl
bnRpYWwgV3JpdGVzPC9oND4KKzx0YWJsZSBjbGFzcz0iYm4iPgorPHRyPjx0ZCBjbGFzcz0iYzEi
PkxldmVsREI8L3RkPgorICAgIDx0ZCBjbGFzcz0iYzIiPjEwMCBvcHMvc2VjPC90ZD4KKyAgICA8
dGQgY2xhc3M9ImMzIj48ZGl2IGNsYXNzPSJibGRiIiBzdHlsZT0id2lkdGg6MzUwcHgiPiZuYnNw
OzwvZGl2PjwvdGQ+CisgICAgPHRkIGNsYXNzPSJjNCI+KDAuMDAzeCBiYXNlbGluZSk8L3RkPjwv
dHI+Cis8dHI+PHRkIGNsYXNzPSJjMSI+S3lvdG8gVHJlZURCPC90ZD4KKyAgICA8dGQgY2xhc3M9
ImMyIj43IG9wcy9zZWM8L3RkPgorICAgIDx0ZCBjbGFzcz0iYzMiPjxkaXYgY2xhc3M9ImJrY3Qi
IHN0eWxlPSJ3aWR0aDoyN3B4Ij4mbmJzcDs8L2Rpdj48L3RkPgorICAgIDx0ZCBjbGFzcz0iYzQi
PigwLjAwMDR4IGJhc2VsaW5lKTwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9ImMxIj5TUUxpdGUz
PC90ZD4KKyAgICA8dGQgY2xhc3M9ImMyIj44OCBvcHMvc2VjPC90ZD4KKyAgICA8dGQgY2xhc3M9
ImMzIj48ZGl2IGNsYXNzPSJic3FsIiBzdHlsZT0id2lkdGg6MzE1cHgiPiZuYnNwOzwvZGl2Pjwv
dGQ+CisgICAgPHRkIGNsYXNzPSJjNCI+KDAuMDAyeCBiYXNlbGluZSk8L3RkPjwvdHI+Cis8L3Rh
YmxlPgorPGg0PlJhbmRvbSBXcml0ZXM8L2g0PgorPHRhYmxlIGNsYXNzPSJibiI+Cis8dHI+PHRk
IGNsYXNzPSJjMSI+TGV2ZWxEQjwvdGQ+CisgICAgPHRkIGNsYXNzPSJjMiI+MTAwIG9wcy9zZWM8
L3RkPgorICAgIDx0ZCBjbGFzcz0iYzMiPjxkaXYgY2xhc3M9ImJsZGIiIHN0eWxlPSJ3aWR0aDoz
NTBweCI+Jm5ic3A7PC9kaXY+PC90ZD4KKyAgICA8dGQgY2xhc3M9ImM0Ij4oMC4wMTV4IGJhc2Vs
aW5lKTwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9ImMxIj5LeW90byBUcmVlREI8L3RkPgorICAg
IDx0ZCBjbGFzcz0iYzIiPjggb3BzL3NlYzwvdGQ+CisgICAgPHRkIGNsYXNzPSJjMyI+PGRpdiBj
bGFzcz0iYmtjdCIgc3R5bGU9IndpZHRoOjI5cHgiPiZuYnNwOzwvZGl2PjwvdGQ+CisgICAgPHRk
IGNsYXNzPSJjNCI+KDAuMDAxeCBiYXNlbGluZSk8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJj
MSI+U1FMaXRlMzwvdGQ+CisgICAgPHRkIGNsYXNzPSJjMiI+ODggb3BzL3NlYzwvdGQ+CisgICAg
PHRkIGNsYXNzPSJjMyI+PGRpdiBjbGFzcz0iYnNxbCIgc3R5bGU9IndpZHRoOjMxNHB4Ij4mbmJz
cDs8L2Rpdj48L3RkPgorICAgIDx0ZCBjbGFzcz0iYzQiPigwLjAwOXggYmFzZWxpbmUpPC90ZD48
L3RyPgorPC90YWJsZT4KKworPHA+QWxzbyBzZWUgdGhlIDxjb2RlPmV4dDQ8L2NvZGU+IHBlcmZv
cm1hbmNlIG51bWJlcnMgYmVsb3cKK3NpbmNlIHN5bmNocm9ub3VzIHdyaXRlcyBiZWhhdmUgc2ln
bmlmaWNhbnRseSBkaWZmZXJlbnRseQorb24gPGNvZGU+ZXh0MzwvY29kZT4gYW5kIDxjb2RlPmV4
dDQ8L2NvZGU+LjwvcD4KKworPGgzPkQuIFR1cm5pbmcgQ29tcHJlc3Npb24gT2ZmPC9oMz4KKwor
PHA+SW4gdGhlIGJhc2VsaW5lIG1lYXN1cmVtZW50cywgTGV2ZWxEQiBhbmQgVHJlZURCIHdlcmUg
dXNpbmcKK2xpZ2h0LXdlaWdodCBjb21wcmVzc2lvbgorKDxhIGhyZWY9Imh0dHA6Ly9jb2RlLmdv
b2dsZS5jb20vcC9zbmFwcHkvIj5TbmFwcHk8L2E+IGZvciBMZXZlbERCLAorYW5kIDxhIGhyZWY9
Imh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8iPkxaTzwvYT4gZm9yCitU
cmVlREIpLiBTUUxpdGUzLCBieSBkZWZhdWx0IGRvZXMgbm90IHVzZSBjb21wcmVzc2lvbi4gIFRo
ZQorZXhwZXJpbWVudHMgYmVsb3cgc2hvdyB3aGF0IGhhcHBlbnMgd2hlbiBjb21wcmVzc2lvbiBp
cyBkaXNhYmxlZCBpbgorYWxsIG9mIHRoZSBkYXRhYmFzZXMgKHRoZSBTUUxpdGUzIG51bWJlcnMg
YXJlIGp1c3QgYSBjb3B5IG9mCitpdHMgYmFzZWxpbmUgbWVhc3VyZW1lbnRzKTo8L3A+CisKKzxo
ND5TZXF1ZW50aWFsIFdyaXRlczwvaDQ+Cis8dGFibGUgY2xhc3M9ImJuIj4KKzx0cj48dGQgY2xh
c3M9ImMxIj5MZXZlbERCPC90ZD4KKyAgICA8dGQgY2xhc3M9ImMyIj41OTQsMDAwIG9wcy9zZWM8
L3RkPgorICAgIDx0ZCBjbGFzcz0iYzMiPjxkaXYgY2xhc3M9ImJsZGIiIHN0eWxlPSJ3aWR0aDoz
NTBweCI+Jm5ic3A7PC9kaXY+PC90ZD4KKyAgICA8dGQgY2xhc3M9ImM0Ij4oMC43NnggYmFzZWxp
bmUpPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0iYzEiPkt5b3RvIFRyZWVEQjwvdGQ+CisgICAg
PHRkIGNsYXNzPSJjMiI+NDg1LDAwMCBvcHMvc2VjPC90ZD4KKyAgICA8dGQgY2xhc3M9ImMzIj48
ZGl2IGNsYXNzPSJia2N0IiBzdHlsZT0id2lkdGg6MjM5cHgiPiZuYnNwOzwvZGl2PjwvdGQ+Cisg
ICAgPHRkIGNsYXNzPSJjNCI+KDEuNDJ4IGJhc2VsaW5lKTwvdGQ+PC90cj4KKzx0cj48dGQgY2xh
c3M9ImMxIj5TUUxpdGUzPC90ZD4KKyAgICA8dGQgY2xhc3M9ImMyIj40OCw2MDAgb3BzL3NlYzwv
dGQ+CisgICAgPHRkIGNsYXNzPSJjMyI+PGRpdiBjbGFzcz0iYnNxbCIgc3R5bGU9IndpZHRoOjI5
cHgiPiZuYnNwOzwvZGl2PjwvdGQ+CisgICAgPHRkIGNsYXNzPSJjNCI+KDEuMDB4IGJhc2VsaW5l
KTwvdGQ+PC90cj4KKzwvdGFibGU+Cis8aDQ+UmFuZG9tIFdyaXRlczwvaDQ+Cis8dGFibGUgY2xh
c3M9ImJuIj4KKzx0cj48dGQgY2xhc3M9ImMxIj5MZXZlbERCPC90ZD4KKyAgICA8dGQgY2xhc3M9
ImMyIj4xMzUsMDAwIG9wcy9zZWM8L3RkPgorICAgIDx0ZCBjbGFzcz0iYzMiPjxkaXYgY2xhc3M9
ImJsZGIiIHN0eWxlPSJ3aWR0aDoyOTZweCI+Jm5ic3A7PC9kaXY+PC90ZD4KKyAgICA8dGQgY2xh
c3M9ImM0Ij4oMC44MnggYmFzZWxpbmUpPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0iYzEiPkt5
b3RvIFRyZWVEQjwvdGQ+CisgICAgPHRkIGNsYXNzPSJjMiI+MTU5LDAwMCBvcHMvc2VjPC90ZD4K
KyAgICA8dGQgY2xhc3M9ImMzIj48ZGl2IGNsYXNzPSJia2N0IiBzdHlsZT0id2lkdGg6MzUwcHgi
PiZuYnNwOzwvZGl2PjwvdGQ+CisgICAgPHRkIGNsYXNzPSJjNCI+KDEuODB4IGJhc2VsaW5lKTwv
dGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9ImMxIj5TUUxpdGUzPC90ZD4KKyAgICA8dGQgY2xhc3M9
ImMyIj45LDg2MCBvcHMvc2VjPC90ZD4KKyAgICA8dGQgY2xhc3M9ImMzIj48ZGl2IGNsYXNzPSJi
c3FsIiBzdHlsZT0id2lkdGg6MjJweCI+Jm5ic3A7PC9kaXY+PC90ZD4KKyAgICA8dGQgY2xhc3M9
ImM0Ij4oMS4wMHggYmFzZWxpbmUpPC90ZD48L3RyPgorPC90YWJsZT4KKworPHA+TGV2ZWxEQidz
IHdyaXRlIHBlcmZvcm1hbmNlIGlzIGJldHRlciB3aXRoIGNvbXByZXNzaW9uIHRoYW4gd2l0aG91
dAorc2luY2UgY29tcHJlc3Npb24gZGVjcmVhc2VzIHRoZSBhbW91bnQgb2YgZGF0YSB0aGF0IGhh
cyB0byBiZSB3cml0dGVuCit0byBkaXNrLiAgVGhlcmVmb3JlIExldmVsREIgdXNlcnMgY2FuIGxl
YXZlIGNvbXByZXNzaW9uIGVuYWJsZWQgaW4KK21vc3Qgc2NlbmFyaW9zIHdpdGhvdXQgaGF2aW5n
IHdvcnJ5IGFib3V0IGEgdHJhZGVvZmYgYmV0d2VlbiBzcGFjZQordXNhZ2UgYW5kIHBlcmZvcm1h
bmNlLiAgVHJlZURCJ3MgcGVyZm9ybWFuY2Ugb24gdGhlIG90aGVyIGhhbmQgaXMKK2JldHRlciB3
aXRob3V0IGNvbXByZXNzaW9uIHRoYW4gd2l0aCBjb21wcmVzc2lvbi4gIFByZXN1bWFibHkgdGhp
cyBpcworYmVjYXVzZSBUcmVlREIncyBjb21wcmVzc2lvbiBsaWJyYXJ5IChMWk8pIGlzIG1vcmUg
ZXhwZW5zaXZlIHRoYW4KK0xldmVsREIncyBjb21wcmVzc2lvbiBsaWJyYXJ5IChTbmFwcHkpLjxw
PgorCis8aDM+RS4gVXNpbmcgTW9yZSBNZW1vcnk8L2gzPgorPHA+V2UgaW5jcmVhc2VkIHRoZSBv
dmVyYWxsIGNhY2hlIHNpemUgZm9yIGVhY2ggZGF0YWJhc2UgdG8gMTI4IE1CLiBGb3IgTGV2ZWxE
Qiwgd2UgcGFydGl0aW9uZWQgMTI4IE1CIGludG8gYSAxMjAgTUIgd3JpdGUgYnVmZmVyIGFuZCA4
IE1CIG9mIGNhY2hlICh1cCBmcm9tIDIgTUIgb2Ygd3JpdGUgYnVmZmVyIGFuZCAyIE1CIG9mIGNh
Y2hlKS4gRm9yIFNRTGl0ZTMsIHdlIGtlcHQgdGhlIHBhZ2Ugc2l6ZSBhdCAxMDI0IGJ5dGVzLCBi
dXQgaW5jcmVhc2VkIHRoZSBudW1iZXIgb2YgcGFnZXMgdG8gMTMxLDA3MiAodXAgZnJvbSA0MDk2
KS4gRm9yIFRyZWVEQiwgd2UgYWxzbyBrZXB0IHRoZSBwYWdlIHNpemUgYXQgMTAyNCBieXRlcywg
YnV0IGluY3JlYXNlZCB0aGUgY2FjaGUgc2l6ZSB0byAxMjggTUIgKHVwIGZyb20gNCBNQikuPC9w
PgorPGg0PlNlcXVlbnRpYWwgV3JpdGVzPC9oND4KKzx0YWJsZSBjbGFzcz0iYm4iPgorPHRyPjx0
ZCBjbGFzcz0iYzEiPkxldmVsREI8L3RkPgorICAgIDx0ZCBjbGFzcz0iYzIiPjgxMiwwMDAgb3Bz
L3NlYzwvdGQ+CisgICAgPHRkIGNsYXNzPSJjMyI+PGRpdiBjbGFzcz0iYmxkYiIgc3R5bGU9Indp
ZHRoOjM1MHB4Ij4mbmJzcDs8L2Rpdj48L3RkPgorICAgIDx0ZCBjbGFzcz0iYzQiPigxLjA0eCBi
YXNlbGluZSk8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJjMSI+S3lvdG8gVHJlZURCPC90ZD4K
KyAgICA8dGQgY2xhc3M9ImMyIj4zMjEsMDAwIG9wcy9zZWM8L3RkPgorICAgIDx0ZCBjbGFzcz0i
YzMiPjxkaXYgY2xhc3M9ImJrY3QiIHN0eWxlPSJ3aWR0aDoxMzhweCI+Jm5ic3A7PC9kaXY+PC90
ZD4KKyAgICA8dGQgY2xhc3M9ImM0Ij4oMC45NHggYmFzZWxpbmUpPC90ZD48L3RyPgorPHRyPjx0
ZCBjbGFzcz0iYzEiPlNRTGl0ZTM8L3RkPgorICAgIDx0ZCBjbGFzcz0iYzIiPjQ4LDUwMCBvcHMv
c2VjPC90ZD4KKyAgICA8dGQgY2xhc3M9ImMzIj48ZGl2IGNsYXNzPSJic3FsIiBzdHlsZT0id2lk
dGg6MjFweCI+Jm5ic3A7PC9kaXY+PC90ZD4KKyAgICA8dGQgY2xhc3M9ImM0Ij4oMS4wMHggYmFz
ZWxpbmUpPC90ZD48L3RyPgorPC90YWJsZT4KKzxoND5SYW5kb20gV3JpdGVzPC9oND4KKzx0YWJs
ZSBjbGFzcz0iYm4iPgorPHRyPjx0ZCBjbGFzcz0iYzEiPkxldmVsREI8L3RkPgorICAgIDx0ZCBj
bGFzcz0iYzIiPjM1NSwwMDAgb3BzL3NlYzwvdGQ+CisgICAgPHRkIGNsYXNzPSJjMyI+PGRpdiBj
bGFzcz0iYmxkYiIgc3R5bGU9IndpZHRoOjM1MHB4Ij4mbmJzcDs8L2Rpdj48L3RkPgorICAgIDx0
ZCBjbGFzcz0iYzQiPigyLjE2eCBiYXNlbGluZSk8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJj
MSI+S3lvdG8gVHJlZURCPC90ZD4KKyAgICA8dGQgY2xhc3M9ImMyIj4yODQsMDAwIG9wcy9zZWM8
L3RkPgorICAgIDx0ZCBjbGFzcz0iYzMiPjxkaXYgY2xhc3M9ImJrY3QiIHN0eWxlPSJ3aWR0aDoy
ODBweCI+Jm5ic3A7PC9kaXY+PC90ZD4KKyAgICA8dGQgY2xhc3M9ImM0Ij4oMy4yMXggYmFzZWxp
bmUpPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0iYzEiPlNRTGl0ZTM8L3RkPgorICAgIDx0ZCBj
bGFzcz0iYzIiPjksNjcwIG9wcy9zZWM8L3RkPgorICAgIDx0ZCBjbGFzcz0iYzMiPjxkaXYgY2xh
c3M9ImJzcWwiIHN0eWxlPSJ3aWR0aDoxMHB4Ij4mbmJzcDs8L2Rpdj48L3RkPgorICAgIDx0ZCBj
bGFzcz0iYzQiPigwLjk4eCBiYXNlbGluZSk8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8cD5TUUxp
dGUncyBwZXJmb3JtYW5jZSBkb2VzIG5vdCBjaGFuZ2Ugc3Vic3RhbnRpYWxseSB3aGVuIGNvbXBh
cmVkIHRvCit0aGUgYmFzZWxpbmUsIGJ1dCB0aGUgcmFuZG9tIHdyaXRlIHBlcmZvcm1hbmNlIGZv
ciBib3RoIExldmVsREIgYW5kCitUcmVlREIgaW5jcmVhc2VzIHNpZ25pZmljYW50bHkuICBMZXZl
bERCJ3MgcGVyZm9ybWFuY2UgaW1wcm92ZXMKK2JlY2F1c2UgYSBsYXJnZXIgd3JpdGUgYnVmZmVy
IHJlZHVjZXMgdGhlIG5lZWQgdG8gbWVyZ2Ugc29ydGVkIGZpbGVzCisoc2luY2UgaXQgY3JlYXRl
cyBhIHNtYWxsZXIgbnVtYmVyIG9mIGxhcmdlciBzb3J0ZWQgZmlsZXMpLiAgVHJlZURCJ3MKK3Bl
cmZvcm1hbmNlIGdvZXMgdXAgYmVjYXVzZSB0aGUgZW50aXJlIGRhdGFiYXNlIGlzIGF2YWlsYWJs
ZSBpbiBtZW1vcnkKK2ZvciBmYXN0IGluLXBsYWNlIHVwZGF0ZXMuPC9wPgorCisgIDxoMj4zLiBS
ZWFkIFBlcmZvcm1hbmNlIHVuZGVyIERpZmZlcmVudCBDb25maWd1cmF0aW9uczwvaDI+Cis8aDM+
QS4gTGFyZ2VyIENhY2hlczwvaDM+Cis8cD5XZSBpbmNyZWFzZWQgdGhlIG92ZXJhbGwgbWVtb3J5
IHVzYWdlIHRvIDEyOCBNQiBmb3IgZWFjaCBkYXRhYmFzZS4KK0ZvciBMZXZlbERCLCB3ZSBhbGxv
Y2F0ZWQgOCBNQiB0byBMZXZlbERCJ3Mgd3JpdGUgYnVmZmVyIGFuZCAxMjAgTUIKK3RvIExldmVs
REIncyBjYWNoZS4gVGhlIG90aGVyIGRhdGFiYXNlcyBkb24ndCBkaWZmZXJlbnRpYXRlIGJldHdl
ZW4gYQord3JpdGUgYnVmZmVyIGFuZCBhIGNhY2hlLCBzbyB3ZSBzaW1wbHkgc2V0IHRoZWlyIGNh
Y2hlIHNpemUgdG8gMTI4CitNQi48L3A+Cis8aDQ+U2VxdWVudGlhbCBSZWFkczwvaDQ+Cis8dGFi
bGUgY2xhc3M9ImJuIj4KKzx0cj48dGQgY2xhc3M9ImMxIj5MZXZlbERCPC90ZD4KKyAgICA8dGQg
Y2xhc3M9ImMyIj41LDIxMCwwMDAgb3BzL3NlYzwvdGQ+CisgICAgPHRkIGNsYXNzPSJjMyI+PGRp
diBjbGFzcz0iYmxkYiIgc3R5bGU9IndpZHRoOjM1MHB4Ij4mbmJzcDs8L2Rpdj48L3RkPgorICAg
IDx0ZCBjbGFzcz0iYzQiPigxLjI5eCBiYXNlbGluZSk8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNz
PSJjMSI+S3lvdG8gVHJlZURCPC90ZD4KKyAgICA8dGQgY2xhc3M9ImMyIj4xLDA3MCwwMDAgb3Bz
L3NlYzwvdGQ+CisgICAgPHRkIGNsYXNzPSJjMyI+PGRpdiBjbGFzcz0iYmtjdCIgc3R5bGU9Indp
ZHRoOjcycHgiPiZuYnNwOzwvZGl2PjwvdGQ+CisgICAgPHRkIGNsYXNzPSJjNCI+KDEuMDZ4IGJh
c2VsaW5lKTwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9ImMxIj5TUUxpdGUzPC90ZD4KKyAgICA8
dGQgY2xhc3M9ImMyIj42MDksMDAwIG9wcy9zZWM8L3RkPgorICAgIDx0ZCBjbGFzcz0iYzMiPjxk
aXYgY2xhc3M9ImJzcWwiIHN0eWxlPSJ3aWR0aDo0MXB4Ij4mbmJzcDs8L2Rpdj48L3RkPgorICAg
IDx0ZCBjbGFzcz0iYzQiPigxLjU5eCBiYXNlbGluZSk8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8
aDQ+UmFuZG9tIFJlYWRzPC9oND4KKzx0YWJsZSBjbGFzcz0iYm4iPgorPHRyPjx0ZCBjbGFzcz0i
YzEiPkxldmVsREI8L3RkPgorICAgIDx0ZCBjbGFzcz0iYzIiPjE5MCwwMDAgb3BzL3NlYzwvdGQ+
CisgICAgPHRkIGNsYXNzPSJjMyI+PGRpdiBjbGFzcz0iYmxkYiIgc3R5bGU9IndpZHRoOjE0NHB4
Ij4mbmJzcDs8L2Rpdj48L3RkPgorICAgIDx0ZCBjbGFzcz0iYzQiPigxLjQ3eCBiYXNlbGluZSk8
L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJjMSI+S3lvdG8gVHJlZURCPC90ZD4KKyAgICA8dGQg
Y2xhc3M9ImMyIj40NjMsMDAwIG9wcy9zZWM8L3RkPgorICAgIDx0ZCBjbGFzcz0iYzMiPjxkaXYg
Y2xhc3M9ImJrY3QiIHN0eWxlPSJ3aWR0aDozNTBweCI+Jm5ic3A7PC9kaXY+PC90ZD4KKyAgICA8
dGQgY2xhc3M9ImM0Ij4oMy4wN3ggYmFzZWxpbmUpPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0i
YzEiPlNRTGl0ZTM8L3RkPgorICAgIDx0ZCBjbGFzcz0iYzIiPjE4NiwwMDAgb3BzL3NlYzwvdGQ+
CisgICAgPHRkIGNsYXNzPSJjMyI+PGRpdiBjbGFzcz0iYnNxbCIgc3R5bGU9IndpZHRoOjE0MXB4
Ij4mbmJzcDs8L2Rpdj48L3RkPgorICAgIDx0ZCBjbGFzcz0iYzQiPigxLjM5eCBiYXNlbGluZSk8
L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8cD5BcyBleHBlY3RlZCwgdGhlIHJlYWQgcGVyZm9ybWFu
Y2Ugb2YgYWxsIG9mIHRoZSBkYXRhYmFzZXMgaW5jcmVhc2VzCit3aGVuIHRoZSBjYWNoZXMgYXJl
IGVubGFyZ2VkLiAgSW4gcGFydGljdWxhciwgVHJlZURCIHNlZW1zIHRvIG1ha2UKK3ZlcnkgZWZm
ZWN0aXZlIHVzZSBvZiBhIGNhY2hlIHRoYXQgaXMgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgdGhlIGVu
dGlyZQorZGF0YWJhc2UuPC9wPgorCis8aDM+Qi4gTm8gQ29tcHJlc3Npb24gUmVhZHMgPC9oMz4K
KzxwPkZvciB0aGlzIGJlbmNobWFyaywgd2UgcG9wdWxhdGVkIGEgZGF0YWJhc2Ugd2l0aCAxIG1p
bGxpb24gZW50cmllcyBjb25zaXN0aW5nIG9mIDE2IGJ5dGUga2V5cyBhbmQgMTAwIGJ5dGUgdmFs
dWVzLiBXZSBjb21waWxlZCBMZXZlbERCIGFuZCBLeW90byBDYWJpbmV0IHdpdGhvdXQgY29tcHJl
c3Npb24gc3VwcG9ydCwgc28gcmVzdWx0cyB0aGF0IGFyZSByZWFkIG91dCBmcm9tIHRoZSBkYXRh
YmFzZSBhcmUgYWxyZWFkeSB1bmNvbXByZXNzZWQuIFdlJ3ZlIGxpc3RlZCB0aGUgU1FMaXRlMyBi
YXNlbGluZSByZWFkIHBlcmZvcm1hbmNlIGFzIGEgcG9pbnQgb2YgY29tcGFyaXNvbi48L3A+Cis8
aDQ+U2VxdWVudGlhbCBSZWFkczwvaDQ+Cis8dGFibGUgY2xhc3M9ImJuIj4KKzx0cj48dGQgY2xh
c3M9ImMxIj5MZXZlbERCPC90ZD4KKyAgICA8dGQgY2xhc3M9ImMyIj40LDg4MCwwMDAgb3BzL3Nl
YzwvdGQ+CisgICAgPHRkIGNsYXNzPSJjMyI+PGRpdiBjbGFzcz0iYmxkYiIgc3R5bGU9IndpZHRo
OjM1MHB4Ij4mbmJzcDs8L2Rpdj48L3RkPgorICAgIDx0ZCBjbGFzcz0iYzQiPigxLjIxeCBiYXNl
bGluZSk8L3RkPjwvdHI+Cis8dHI+PHRkIGNsYXNzPSJjMSI+S3lvdG8gVHJlZURCPC90ZD4KKyAg
ICA8dGQgY2xhc3M9ImMyIj4xLDIzMCwwMDAgb3BzL3NlYzwvdGQ+CisgICAgPHRkIGNsYXNzPSJj
MyI+PGRpdiBjbGFzcz0iYmtjdCIgc3R5bGU9IndpZHRoOjg4cHgiPiZuYnNwOzwvZGl2PjwvdGQ+
CisgICAgPHRkIGNsYXNzPSJjNCI+KDMuNjB4IGJhc2VsaW5lKTwvdGQ+PC90cj4KKzx0cj48dGQg
Y2xhc3M9ImMxIj5TUUxpdGUzPC90ZD4KKyAgICA8dGQgY2xhc3M9ImMyIj4zODMsMDAwIG9wcy9z
ZWM8L3RkPgorICAgIDx0ZCBjbGFzcz0iYzMiPjxkaXYgY2xhc3M9ImJzcWwiIHN0eWxlPSJ3aWR0
aDoyN3B4Ij4mbmJzcDs8L2Rpdj48L3RkPgorICAgIDx0ZCBjbGFzcz0iYzQiPigxLjAweCBiYXNl
bGluZSk8L3RkPjwvdHI+Cis8L3RhYmxlPgorPGg0PlJhbmRvbSBSZWFkczwvaDQ+Cis8dGFibGUg
Y2xhc3M9ImJuIj4KKzx0cj48dGQgY2xhc3M9ImMxIj5MZXZlbERCPC90ZD4KKyAgICA8dGQgY2xh
c3M9ImMyIj4xNDksMDAwIG9wcy9zZWM8L3RkPgorICAgIDx0ZCBjbGFzcz0iYzMiPjxkaXYgY2xh
c3M9ImJsZGIiIHN0eWxlPSJ3aWR0aDozMDBweCI+Jm5ic3A7PC9kaXY+PC90ZD4KKyAgICA8dGQg
Y2xhc3M9ImM0Ij4oMS4xNnggYmFzZWxpbmUpPC90ZD48L3RyPgorPHRyPjx0ZCBjbGFzcz0iYzEi
Pkt5b3RvIFRyZWVEQjwvdGQ+CisgICAgPHRkIGNsYXNzPSJjMiI+MTc1LDAwMCBvcHMvc2VjPC90
ZD4KKyAgICA8dGQgY2xhc3M9ImMzIj48ZGl2IGNsYXNzPSJia2N0IiBzdHlsZT0id2lkdGg6MzUw
cHgiPiZuYnNwOzwvZGl2PjwvdGQ+CisgICAgPHRkIGNsYXNzPSJjNCI+KDEuMTZ4IGJhc2VsaW5l
KTwvdGQ+PC90cj4KKzx0cj48dGQgY2xhc3M9ImMxIj5TUUxpdGUzPC90ZD4KKyAgICA8dGQgY2xh
c3M9ImMyIj4xMzQsMDAwIG9wcy9zZWM8L3RkPgorICAgIDx0ZCBjbGFzcz0iYzMiPjxkaXYgY2xh
c3M9ImJzcWwiIHN0eWxlPSJ3aWR0aDoyNjhweCI+Jm5ic3A7PC9kaXY+PC90ZD4KKyAgICA8dGQg
Y2xhc3M9ImM0Ij4oMS4wMHggYmFzZWxpbmUpPC90ZD48L3RyPgorPC90YWJsZT4KKworPHA+UGVy
Zm9ybWFuY2Ugb2YgYm90aCBMZXZlbERCIGFuZCBUcmVlREIgaW1wcm92ZXMgYSBzbWFsbCBhbW91
bnQgd2hlbgorY29tcHJlc3Npb24gaXMgZGlzYWJsZWQuICBOb3RlIGhvd2V2ZXIgdGhhdCB1bmRl
ciBkaWZmZXJlbnQgd29ya2xvYWRzLAorcGVyZm9ybWFuY2UgbWF5IHZlcnkgd2VsbCBiZSBiZXR0
ZXIgd2l0aCBjb21wcmVzc2lvbiBpZiBpdCBhbGxvd3MgbW9yZQorb2YgdGhlIHdvcmtpbmcgc2V0
IHRvIGZpdCBpbiBtZW1vcnkuPC9wPgorCis8aDI+Tm90ZSBhYm91dCBFeHQ0IEZpbGVzeXN0ZW1z
PC9oMj4KKzxwPlRoZSBwcmVjZWRpbmcgbnVtYmVycyBhcmUgZm9yIGFuIGV4dDMgZmlsZSBzeXN0
ZW0uIFN5bmNocm9ub3VzIHdyaXRlcyBhcmUgbXVjaCBzbG93ZXIgdW5kZXIgPGEgaHJlZj0iaHR0
cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FeHQ0Ij5leHQ0PC9hPiAoTGV2ZWxEQiBkcm9wcyB0
byB+MzEgd3JpdGVzIC8gc2Vjb25kIGFuZCBUcmVlREIgZHJvcHMgdG8gfjUgd3JpdGVzIC8gc2Vj
b25kOyBTUUxpdGUzJ3Mgc3luY2hyb25vdXMgd3JpdGVzIGRvIG5vdCBub3RpY2VhYmx5IGRyb3Ap
IGR1ZSB0byBleHQ0J3MgZGlmZmVyZW50IGhhbmRsaW5nIG9mIDxzcGFuIGNsYXNzPSJjb2RlIj5m
c3luYzwvc3Bhbj4gLyA8c3BhbiBjbGFzcz0iY29kZSI+bXN5bmM8L3NwYW4+IGNhbGxzLiBFdmVu
IExldmVsREIncyBhc3luY2hyb25vdXMgd3JpdGUgcGVyZm9ybWFuY2UgZHJvcHMgc29tZXdoYXQg
c2luY2UgaXQgc3ByZWFkcyBpdHMgc3RvcmFnZSBhY3Jvc3MgbXVsdGlwbGUgZmlsZXMgYW5kIGlz
c3VlcyA8c3BhbiBjbGFzcz0iY29kZSI+ZnN5bmM8L3NwYW4+IGNhbGxzIHdoZW4gc3dpdGNoaW5n
IHRvIGEgbmV3IGZpbGUuPC9wPgorCis8aDI+QWNrbm93bGVkZ2VtZW50czwvaDI+Cis8cD5KZWZm
IERlYW4gYW5kIFNhbmpheSBHaGVtYXdhdCB3cm90ZSBMZXZlbERCLiBLZXZpbiBUc2VuZyB3cm90
ZSBhbmQgY29tcGlsZWQgdGhlc2UgYmVuY2htYXJrcy4gTWlraW8gSGlyYWJheWFzaGksIFNjb3R0
IEhlc3MsIGFuZCBHYWJvciBDc2VsbGUgcHJvdmlkZWQgaGVscCBhbmQgYWR2aWNlLjwvcD4KKzwv
Ym9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZG9j
L2RvYy5jc3MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RvYy9kb2MuY3NzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjcwMGM1NjRlNDMzODI3YzMxMWNkOGEyNjg5NmNlYWE3YzgyNjA4MTgKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RvYy9kb2MuY3NzCkBAIC0wLDAgKzEs
ODkgQEAKK2JvZHkgeworICBtYXJnaW4tbGVmdDogMC41aW47CisgIG1hcmdpbi1yaWdodDogMC41
aW47CisgIGJhY2tncm91bmQ6IHdoaXRlOworICBjb2xvcjogYmxhY2s7Cit9CisKK2gxIHsKKyAg
bWFyZ2luLWxlZnQ6IC0wLjJpbjsKKyAgZm9udC1zaXplOiAxNHB0OworfQoraDIgeworICBtYXJn
aW4tbGVmdDogLTBpbjsKKyAgZm9udC1zaXplOiAxMnB0OworfQoraDMgeworICBtYXJnaW4tbGVm
dDogLTBpbjsKK30KK2g0IHsKKyAgbWFyZ2luLWxlZnQ6IC0waW47Cit9CitociB7CisgIG1hcmdp
bi1sZWZ0OiAtMGluOworfQorCisvKiBEZWZpbml0aW9uIGxpc3RzOiBkZWZpbml0aW9uIHRlcm0g
Ym9sZCAqLworZHQgeworICBmb250LXdlaWdodDogYm9sZDsKK30KKworYWRkcmVzcyB7CisgIHRl
eHQtYWxpZ246IGNlbnRlcjsKK30KK2NvZGUsc2FtcCx2YXIgeworICBjb2xvcjogYmx1ZTsKK30K
K2tiZCB7CisgIGNvbG9yOiAjNjAwMDAwOworfQorZGl2Lm5vdGUgcCB7CisgIGZsb2F0OiByaWdo
dDsKKyAgd2lkdGg6IDNpbjsKKyAgbWFyZ2luLXJpZ2h0OiAwJTsKKyAgcGFkZGluZzogMXB4Owor
ICBib3JkZXI6IDJweCBzb2xpZCAjNjA2MGEwOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmYw
OworfQorCit1bCB7CisgIG1hcmdpbi10b3A6IC0wZW07CisgIG1hcmdpbi1ib3R0b206IC0wZW07
Cit9CisKK29sIHsKKyAgbWFyZ2luLXRvcDogLTBlbTsKKyAgbWFyZ2luLWJvdHRvbTogLTBlbTsK
K30KKworVUwubm9idWxsZXRzIHsKKyAgbGlzdC1zdHlsZS10eXBlOiBub25lOworICBsaXN0LXN0
eWxlLWltYWdlOiBub25lOworICBtYXJnaW4tbGVmdDogLTFlbTsKK30KKworcCB7CisgIG1hcmdp
bjogMWVtIDAgMWVtIDA7CisgIHBhZGRpbmc6IDAgMCAwIDA7Cit9CisKK3ByZSB7CisgIGxpbmUt
aGVpZ2h0OiAxLjNlbTsKKyAgcGFkZGluZzogMC40ZW0gMCAwLjhlbSAwOworICBtYXJnaW46ICAw
IDAgMCAwOworICBib3JkZXI6ICAwIDAgMCAwOworICBjb2xvcjogYmx1ZTsKK30KKworLmRhdGF0
YWJsZSB7CisgIG1hcmdpbi1sZWZ0OiBhdXRvOworICBtYXJnaW4tcmlnaHQ6IGF1dG87CisgIG1h
cmdpbi10b3A6IDJlbTsKKyAgbWFyZ2luLWJvdHRvbTogMmVtOworICBib3JkZXI6IDFweCBzb2xp
ZDsKK30KKworLmRhdGF0YWJsZSB0ZCx0aCB7CisgIHBhZGRpbmc6IDAgMC41ZW0gMCAwLjVlbTsK
KyAgdGV4dC1hbGlnbjogcmlnaHQ7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
ZXZlbGRiL2RvYy9pbXBsLmh0bWwgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RvYy9pbXBs
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZTg3MDc5NWQyMzE0NjNiMTY3ZDViNzllZmRjMTZiODAxMDdkZTkz
ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZG9jL2ltcGwu
aHRtbApAQCAtMCwwICsxLDIxMyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgor
PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iZG9jLmNzcyIgLz4K
Kzx0aXRsZT5MZXZlbGRiIGZpbGUgbGF5b3V0IGFuZCBjb21wYWN0aW9uczwvdGl0bGU+Cis8L2hl
YWQ+CisKKzxib2R5PgorCis8aDE+RmlsZXM8L2gxPgorCitUaGUgaW1wbGVtZW50YXRpb24gb2Yg
bGV2ZWxkYiBpcyBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUKK3JlcHJlc2VudGF0aW9uIG9mIGEg
c2luZ2xlCis8YSBocmVmPSJodHRwOi8vbGFicy5nb29nbGUuY29tL3BhcGVycy9iaWd0YWJsZS5o
dG1sIj4KK0JpZ3RhYmxlIHRhYmxldCAoc2VjdGlvbiA1LjMpPC9hPi4KK0hvd2V2ZXIgdGhlIG9y
Z2FuaXphdGlvbiBvZiB0aGUgZmlsZXMgdGhhdCBtYWtlIHVwIHRoZSByZXByZXNlbnRhdGlvbgor
aXMgc29tZXdoYXQgZGlmZmVyZW50IGFuZCBpcyBleHBsYWluZWQgYmVsb3cuCisKKzxwPgorRWFj
aCBkYXRhYmFzZSBpcyByZXByZXNlbnRlZCBieSBhIHNldCBvZiBmaWxlcyBzdG9yZWQgaW4gYSBk
aXJlY3RvcnkuCitUaGVyZSBhcmUgc2V2ZXJhbCBkaWZmZXJlbnQgdHlwZXMgb2YgZmlsZXMgYXMg
ZG9jdW1lbnRlZCBiZWxvdzoKKzxwPgorPGgyPkxvZyBmaWxlczwvaDI+Cis8cD4KK0EgbG9nIGZp
bGUgKCoubG9nKSBzdG9yZXMgYSBzZXF1ZW5jZSBvZiByZWNlbnQgdXBkYXRlcy4gIEVhY2ggdXBk
YXRlCitpcyBhcHBlbmRlZCB0byB0aGUgY3VycmVudCBsb2cgZmlsZS4gIFdoZW4gdGhlIGxvZyBm
aWxlIHJlYWNoZXMgYQorcHJlLWRldGVybWluZWQgc2l6ZSAoYXBwcm94aW1hdGVseSA0TUIgYnkg
ZGVmYXVsdCksIGl0IGlzIGNvbnZlcnRlZAordG8gYSBzb3J0ZWQgdGFibGUgKHNlZSBiZWxvdykg
YW5kIGEgbmV3IGxvZyBmaWxlIGlzIGNyZWF0ZWQgZm9yIGZ1dHVyZQordXBkYXRlcy4KKzxwPgor
QSBjb3B5IG9mIHRoZSBjdXJyZW50IGxvZyBmaWxlIGlzIGtlcHQgaW4gYW4gaW4tbWVtb3J5IHN0
cnVjdHVyZSAodGhlCis8Y29kZT5tZW10YWJsZTwvY29kZT4pLiAgVGhpcyBjb3B5IGlzIGNvbnN1
bHRlZCBvbiBldmVyeSByZWFkIHNvIHRoYXQgcmVhZAorb3BlcmF0aW9ucyByZWZsZWN0IGFsbCBs
b2dnZWQgdXBkYXRlcy4KKzxwPgorPGgyPlNvcnRlZCB0YWJsZXM8L2gyPgorPHA+CitBIHNvcnRl
ZCB0YWJsZSAoKi5zc3QpIHN0b3JlcyBhIHNlcXVlbmNlIG9mIGVudHJpZXMgc29ydGVkIGJ5IGtl
eS4KK0VhY2ggZW50cnkgaXMgZWl0aGVyIGEgdmFsdWUgZm9yIHRoZSBrZXksIG9yIGEgZGVsZXRp
b24gbWFya2VyIGZvciB0aGUKK2tleS4gIChEZWxldGlvbiBtYXJrZXJzIGFyZSBrZXB0IGFyb3Vu
ZCB0byBoaWRlIG9ic29sZXRlIHZhbHVlcworcHJlc2VudCBpbiBvbGRlciBzb3J0ZWQgdGFibGVz
KS4KKzxwPgorVGhlIHNldCBvZiBzb3J0ZWQgdGFibGVzIGFyZSBvcmdhbml6ZWQgaW50byBhIHNl
cXVlbmNlIG9mIGxldmVscy4gIFRoZQorc29ydGVkIHRhYmxlIGdlbmVyYXRlZCBmcm9tIGEgbG9n
IGZpbGUgaXMgcGxhY2VkIGluIGEgc3BlY2lhbCA8Y29kZT55b3VuZzwvY29kZT4KK2xldmVsIChh
bHNvIGNhbGxlZCBsZXZlbC0wKS4gIFdoZW4gdGhlIG51bWJlciBvZiB5b3VuZyBmaWxlcyBleGNl
ZWRzIGEKK2NlcnRhaW4gdGhyZXNob2xkIChjdXJyZW50bHkgZm91ciksIGFsbCBvZiB0aGUgeW91
bmcgZmlsZXMgYXJlIG1lcmdlZAordG9nZXRoZXIgd2l0aCBhbGwgb2YgdGhlIG92ZXJsYXBwaW5n
IGxldmVsLTEgZmlsZXMgdG8gcHJvZHVjZSBhCitzZXF1ZW5jZSBvZiBuZXcgbGV2ZWwtMSBmaWxl
cyAod2UgY3JlYXRlIGEgbmV3IGxldmVsLTEgZmlsZSBmb3IgZXZlcnkKKzJNQiBvZiBkYXRhLikK
KzxwPgorRmlsZXMgaW4gdGhlIHlvdW5nIGxldmVsIG1heSBjb250YWluIG92ZXJsYXBwaW5nIGtl
eXMuICBIb3dldmVyIGZpbGVzCitpbiBvdGhlciBsZXZlbHMgaGF2ZSBkaXN0aW5jdCBub24tb3Zl
cmxhcHBpbmcga2V5IHJhbmdlcy4gIENvbnNpZGVyCitsZXZlbCBudW1iZXIgTCB3aGVyZSBMID49
IDEuICBXaGVuIHRoZSBjb21iaW5lZCBzaXplIG9mIGZpbGVzIGluCitsZXZlbC1MIGV4Y2VlZHMg
KDEwXkwpIE1CIChpLmUuLCAxME1CIGZvciBsZXZlbC0xLCAxMDBNQiBmb3IgbGV2ZWwtMiwKKy4u
LiksIG9uZSBmaWxlIGluIGxldmVsLUwsIGFuZCBhbGwgb2YgdGhlIG92ZXJsYXBwaW5nIGZpbGVz
IGluCitsZXZlbC0oTCsxKSBhcmUgbWVyZ2VkIHRvIGZvcm0gYSBzZXQgb2YgbmV3IGZpbGVzIGZv
ciBsZXZlbC0oTCsxKS4KK1RoZXNlIG1lcmdlcyBoYXZlIHRoZSBlZmZlY3Qgb2YgZ3JhZHVhbGx5
IG1pZ3JhdGluZyBuZXcgdXBkYXRlcyBmcm9tCit0aGUgeW91bmcgbGV2ZWwgdG8gdGhlIGxhcmdl
c3QgbGV2ZWwgdXNpbmcgb25seSBidWxrIHJlYWRzIGFuZCB3cml0ZXMKKyhpLmUuLCBtaW5pbWl6
aW5nIGV4cGVuc2l2ZSBzZWVrcykuCisKKzxoMj5NYW5pZmVzdDwvaDI+Cis8cD4KK0EgTUFOSUZF
U1QgZmlsZSBsaXN0cyB0aGUgc2V0IG9mIHNvcnRlZCB0YWJsZXMgdGhhdCBtYWtlIHVwIGVhY2gK
K2xldmVsLCB0aGUgY29ycmVzcG9uZGluZyBrZXkgcmFuZ2VzLCBhbmQgb3RoZXIgaW1wb3J0YW50
IG1ldGFkYXRhLgorQSBuZXcgTUFOSUZFU1QgZmlsZSAod2l0aCBhIG5ldyBudW1iZXIgZW1iZWRk
ZWQgaW4gdGhlIGZpbGUgbmFtZSkKK2lzIGNyZWF0ZWQgd2hlbmV2ZXIgdGhlIGRhdGFiYXNlIGlz
IHJlb3BlbmVkLiAgVGhlIE1BTklGRVNUIGZpbGUgaXMKK2Zvcm1hdHRlZCBhcyBhIGxvZywgYW5k
IGNoYW5nZXMgbWFkZSB0byB0aGUgc2VydmluZyBzdGF0ZSAoYXMgZmlsZXMKK2FyZSBhZGRlZCBv
ciByZW1vdmVkKSBhcmUgYXBwZW5kZWQgdG8gdGhpcyBsb2cuCis8cD4KKzxoMj5DdXJyZW50PC9o
Mj4KKzxwPgorQ1VSUkVOVCBpcyBhIHNpbXBsZSB0ZXh0IGZpbGUgdGhhdCBjb250YWlucyB0aGUg
bmFtZSBvZiB0aGUgbGF0ZXN0CitNQU5JRkVTVCBmaWxlLgorPHA+Cis8aDI+SW5mbyBsb2dzPC9o
Mj4KKzxwPgorSW5mb3JtYXRpb25hbCBtZXNzYWdlcyBhcmUgcHJpbnRlZCB0byBmaWxlcyBuYW1l
ZCBMT0cgYW5kIExPRy5vbGQuCis8cD4KKzxoMj5PdGhlcnM8L2gyPgorPHA+CitPdGhlciBmaWxl
cyB1c2VkIGZvciBtaXNjZWxsYW5lb3VzIHB1cnBvc2VzIG1heSBhbHNvIGJlIHByZXNlbnQKKyhM
T0NLLCAqLmRidG1wKS4KKworPGgxPkxldmVsIDA8L2gxPgorV2hlbiB0aGUgbG9nIGZpbGUgZ3Jv
d3MgYWJvdmUgYSBjZXJ0YWluIHNpemUgKDFNQiBieSBkZWZhdWx0KToKKzx1bD4KKzxsaT5DcmVh
dGUgYSBicmFuZCBuZXcgbWVtdGFibGUgYW5kIGxvZyBmaWxlIGFuZCBkaXJlY3QgZnV0dXJlIHVw
ZGF0ZXMgaGVyZQorPGxpPkluIHRoZSBiYWNrZ3JvdW5kOgorPHVsPgorPGxpPldyaXRlIHRoZSBj
b250ZW50cyBvZiB0aGUgcHJldmlvdXMgbWVtdGFibGUgdG8gYW4gc3N0YWJsZQorPGxpPkRpc2Nh
cmQgdGhlIG1lbXRhYmxlCis8bGk+RGVsZXRlIHRoZSBvbGQgbG9nIGZpbGUgYW5kIHRoZSBvbGQg
bWVtdGFibGUKKzxsaT5BZGQgdGhlIG5ldyBzc3RhYmxlIHRvIHRoZSB5b3VuZyAobGV2ZWwtMCkg
bGV2ZWwuCis8L3VsPgorPC91bD4KKworPGgxPkNvbXBhY3Rpb25zPC9oMT4KKworPHA+CitXaGVu
IHRoZSBzaXplIG9mIGxldmVsIEwgZXhjZWVkcyBpdHMgbGltaXQsIHdlIGNvbXBhY3QgaXQgaW4g
YQorYmFja2dyb3VuZCB0aHJlYWQuICBUaGUgY29tcGFjdGlvbiBwaWNrcyBhIGZpbGUgZnJvbSBs
ZXZlbCBMIGFuZCBhbGwKK292ZXJsYXBwaW5nIGZpbGVzIGZyb20gdGhlIG5leHQgbGV2ZWwgTCsx
LiAgTm90ZSB0aGF0IGlmIGEgbGV2ZWwtTAorZmlsZSBvdmVybGFwcyBvbmx5IHBhcnQgb2YgYSBs
ZXZlbC0oTCsxKSBmaWxlLCB0aGUgZW50aXJlIGZpbGUgYXQKK2xldmVsLShMKzEpIGlzIHVzZWQg
YXMgYW4gaW5wdXQgdG8gdGhlIGNvbXBhY3Rpb24gYW5kIHdpbGwgYmUKK2Rpc2NhcmRlZCBhZnRl
ciB0aGUgY29tcGFjdGlvbi4gIEFzaWRlOiBiZWNhdXNlIGxldmVsLTAgaXMgc3BlY2lhbAorKGZp
bGVzIGluIGl0IG1heSBvdmVybGFwIGVhY2ggb3RoZXIpLCB3ZSB0cmVhdCBjb21wYWN0aW9ucyBm
cm9tCitsZXZlbC0wIHRvIGxldmVsLTEgc3BlY2lhbGx5OiBhIGxldmVsLTAgY29tcGFjdGlvbiBt
YXkgcGljayBtb3JlIHRoYW4KK29uZSBsZXZlbC0wIGZpbGUgaW4gY2FzZSBzb21lIG9mIHRoZXNl
IGZpbGVzIG92ZXJsYXAgZWFjaCBvdGhlci4KKworPHA+CitBIGNvbXBhY3Rpb24gbWVyZ2VzIHRo
ZSBjb250ZW50cyBvZiB0aGUgcGlja2VkIGZpbGVzIHRvIHByb2R1Y2UgYQorc2VxdWVuY2Ugb2Yg
bGV2ZWwtKEwrMSkgZmlsZXMuICBXZSBzd2l0Y2ggdG8gcHJvZHVjaW5nIGEgbmV3CitsZXZlbC0o
TCsxKSBmaWxlIGFmdGVyIHRoZSBjdXJyZW50IG91dHB1dCBmaWxlIGhhcyByZWFjaGVkIHRoZSB0
YXJnZXQKK2ZpbGUgc2l6ZSAoMk1CKS4gIFdlIGFsc28gc3dpdGNoIHRvIGEgbmV3IG91dHB1dCBm
aWxlIHdoZW4gdGhlIGtleQorcmFuZ2Ugb2YgdGhlIGN1cnJlbnQgb3V0cHV0IGZpbGUgaGFzIGdy
b3duIGVub3VnaCB0byBvdmVybGFwIG1vcmUgdGhlbgordGVuIGxldmVsLShMKzIpIGZpbGVzLiAg
VGhpcyBsYXN0IHJ1bGUgZW5zdXJlcyB0aGF0IGEgbGF0ZXIgY29tcGFjdGlvbgorb2YgYSBsZXZl
bC0oTCsxKSBmaWxlIHdpbGwgbm90IHBpY2sgdXAgdG9vIG11Y2ggZGF0YSBmcm9tIGxldmVsLShM
KzIpLgorCis8cD4KK1RoZSBvbGQgZmlsZXMgYXJlIGRpc2NhcmRlZCBhbmQgdGhlIG5ldyBmaWxl
cyBhcmUgYWRkZWQgdG8gdGhlIHNlcnZpbmcKK3N0YXRlLgorCis8cD4KK0NvbXBhY3Rpb25zIGZv
ciBhIHBhcnRpY3VsYXIgbGV2ZWwgcm90YXRlIHRocm91Z2ggdGhlIGtleSBzcGFjZS4gIEluCitt
b3JlIGRldGFpbCwgZm9yIGVhY2ggbGV2ZWwgTCwgd2UgcmVtZW1iZXIgdGhlIGVuZGluZyBrZXkg
b2YgdGhlIGxhc3QKK2NvbXBhY3Rpb24gYXQgbGV2ZWwgTC4gIFRoZSBuZXh0IGNvbXBhY3Rpb24g
Zm9yIGxldmVsIEwgd2lsbCBwaWNrIHRoZQorZmlyc3QgZmlsZSB0aGF0IHN0YXJ0cyBhZnRlciB0
aGlzIGtleSAod3JhcHBpbmcgYXJvdW5kIHRvIHRoZQorYmVnaW5uaW5nIG9mIHRoZSBrZXkgc3Bh
Y2UgaWYgdGhlcmUgaXMgbm8gc3VjaCBmaWxlKS4KKworPHA+CitDb21wYWN0aW9ucyBkcm9wIG92
ZXJ3cml0dGVuIHZhbHVlcy4gIFRoZXkgYWxzbyBkcm9wIGRlbGV0aW9uIG1hcmtlcnMKK2lmIHRo
ZXJlIGFyZSBubyBoaWdoZXIgbnVtYmVyZWQgbGV2ZWxzIHRoYXQgY29udGFpbiBhIGZpbGUgd2hv
c2UgcmFuZ2UKK292ZXJsYXBzIHRoZSBjdXJyZW50IGtleS4KKworPGgyPlRpbWluZzwvaDI+CisK
K0xldmVsLTAgY29tcGFjdGlvbnMgd2lsbCByZWFkIHVwIHRvIGZvdXIgMU1CIGZpbGVzIGZyb20g
bGV2ZWwtMCwgYW5kCithdCB3b3JzdCBhbGwgdGhlIGxldmVsLTEgZmlsZXMgKDEwTUIpLiAgSS5l
Liwgd2Ugd2lsbCByZWFkIDE0TUIgYW5kCit3cml0ZSAxNE1CLgorCis8cD4KK090aGVyIHRoYW4g
dGhlIHNwZWNpYWwgbGV2ZWwtMCBjb21wYWN0aW9ucywgd2Ugd2lsbCBwaWNrIG9uZSAyTUIgZmls
ZQorZnJvbSBsZXZlbCBMLiAgSW4gdGhlIHdvcnN0IGNhc2UsIHRoaXMgd2lsbCBvdmVybGFwIH4g
MTIgZmlsZXMgZnJvbQorbGV2ZWwgTCsxICgxMCBiZWNhdXNlIGxldmVsLShMKzEpIGlzIHRlbiB0
aW1lcyB0aGUgc2l6ZSBvZiBsZXZlbC1MLAorYW5kIGFub3RoZXIgdHdvIGF0IHRoZSBib3VuZGFy
aWVzIHNpbmNlIHRoZSBmaWxlIHJhbmdlcyBhdCBsZXZlbC1MCit3aWxsIHVzdWFsbHkgbm90IGJl
IGFsaWduZWQgd2l0aCB0aGUgZmlsZSByYW5nZXMgYXQgbGV2ZWwtTCsxKS4gIFRoZQorY29tcGFj
dGlvbiB3aWxsIHRoZXJlZm9yZSByZWFkIDI2TUIgYW5kIHdyaXRlIDI2TUIuICBBc3N1bWluZyBh
IGRpc2sKK0lPIHJhdGUgb2YgMTAwTUIvcyAoYmFsbHBhcmsgcmFuZ2UgZm9yIG1vZGVybiBkcml2
ZXMpLCB0aGUgd29yc3QKK2NvbXBhY3Rpb24gY29zdCB3aWxsIGJlIGFwcHJveGltYXRlbHkgMC41
IHNlY29uZC4KKworPHA+CitJZiB3ZSB0aHJvdHRsZSB0aGUgYmFja2dyb3VuZCB3cml0aW5nIHRv
IHNvbWV0aGluZyBzbWFsbCwgc2F5IDEwJSBvZgordGhlIGZ1bGwgMTAwTUIvcyBzcGVlZCwgYSBj
b21wYWN0aW9uIG1heSB0YWtlIHVwIHRvIDUgc2Vjb25kcy4gIElmIHRoZQordXNlciBpcyB3cml0
aW5nIGF0IDEwTUIvcywgd2UgbWlnaHQgYnVpbGQgdXAgbG90cyBvZiBsZXZlbC0wIGZpbGVzCiso
fjUwIHRvIGhvbGQgdGhlIDUqMTBNQikuICBUaGlzIG1heSBzaWduZmljYW50bHkgaW5jcmVhc2Ug
dGhlIGNvc3Qgb2YKK3JlYWRzIGR1ZSB0byB0aGUgb3ZlcmhlYWQgb2YgbWVyZ2luZyBtb3JlIGZp
bGVzIHRvZ2V0aGVyIG9uIGV2ZXJ5CityZWFkLgorCis8cD4KK1NvbHV0aW9uIDE6IFRvIHJlZHVj
ZSB0aGlzIHByb2JsZW0sIHdlIG1pZ2h0IHdhbnQgdG8gaW5jcmVhc2UgdGhlIGxvZworc3dpdGNo
aW5nIHRocmVzaG9sZCB3aGVuIHRoZSBudW1iZXIgb2YgbGV2ZWwtMCBmaWxlcyBpcyBsYXJnZS4g
IFRob3VnaAordGhlIGRvd25zaWRlIGlzIHRoYXQgdGhlIGxhcmdlciB0aGlzIHRocmVzaG9sZCwg
dGhlIG1vcmUgbWVtb3J5IHdlIHdpbGwKK25lZWQgdG8gaG9sZCB0aGUgY29ycmVzcG9uZGluZyBt
ZW10YWJsZS4KKworPHA+CitTb2x1dGlvbiAyOiBXZSBtaWdodCB3YW50IHRvIGRlY3JlYXNlIHdy
aXRlIHJhdGUgYXJ0aWZpY2lhbGx5IHdoZW4gdGhlCitudW1iZXIgb2YgbGV2ZWwtMCBmaWxlcyBn
b2VzIHVwLgorCis8cD4KK1NvbHV0aW9uIDM6IFdlIHdvcmsgb24gcmVkdWNpbmcgdGhlIGNvc3Qg
b2YgdmVyeSB3aWRlIG1lcmdlcy4KK1BlcmhhcHMgbW9zdCBvZiB0aGUgbGV2ZWwtMCBmaWxlcyB3
aWxsIGhhdmUgdGhlaXIgYmxvY2tzIHNpdHRpbmcKK3VuY29tcHJlc3NlZCBpbiB0aGUgY2FjaGUg
YW5kIHdlIHdpbGwgb25seSBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoZQorTyhOKSBjb21wbGV4aXR5
IGluIHRoZSBtZXJnaW5nIGl0ZXJhdG9yLgorCis8aDI+TnVtYmVyIG9mIGZpbGVzPC9oMj4KKwor
SW5zdGVhZCBvZiBhbHdheXMgbWFraW5nIDJNQiBmaWxlcywgd2UgY291bGQgbWFrZSBsYXJnZXIg
ZmlsZXMgZm9yCitsYXJnZXIgbGV2ZWxzIHRvIHJlZHVjZSB0aGUgdG90YWwgZmlsZSBjb3VudCwg
dGhvdWdoIGF0IHRoZSBleHBlbnNlIG9mCittb3JlIGJ1cnN0eSBjb21wYWN0aW9ucy4gIEFsdGVy
bmF0aXZlbHksIHdlIGNvdWxkIHNoYXJkIHRoZSBzZXQgb2YKK2ZpbGVzIGludG8gbXVsdGlwbGUg
ZGlyZWN0b3JpZXMuCisKKzxwPgorQW4gZXhwZXJpbWVudCBvbiBhbiA8Y29kZT5leHQzPC9jb2Rl
PiBmaWxlc3lzdGVtIG9uIEZlYiAwNCwgMjAxMSBzaG93cwordGhlIGZvbGxvd2luZyB0aW1pbmdz
IHRvIGRvIDEwMEsgZmlsZSBvcGVucyBpbiBkaXJlY3RvcmllcyB3aXRoCit2YXJ5aW5nIG51bWJl
ciBvZiBmaWxlczoKKzx0YWJsZSBjbGFzcz0iZGF0YXRhYmxlIj4KKzx0cj48dGg+RmlsZXMgaW4g
ZGlyZWN0b3J5PC90aD48dGg+TWljcm9zZWNvbmRzIHRvIG9wZW4gYSBmaWxlPC90aD48L3RyPgor
PHRyPjx0ZD4xMDAwPC90ZD48dGQ+OTwvdGQ+Cis8dHI+PHRkPjEwMDAwPC90ZD48dGQ+MTA8L3Rk
PgorPHRyPjx0ZD4xMDAwMDA8L3RkPjx0ZD4xNjwvdGQ+Cis8L3RhYmxlPgorU28gbWF5YmUgZXZl
biB0aGUgc2hhcmRpbmcgaXMgbm90IG5lY2Vzc2FyeSBvbiBtb2Rlcm4gZmlsZXN5c3RlbXM/CisK
KzxoMT5SZWNvdmVyeTwvaDE+CisKKzx1bD4KKzxsaT4gUmVhZCBDVVJSRU5UIHRvIGZpbmQgbmFt
ZSBvZiB0aGUgbGF0ZXN0IGNvbW1pdHRlZCBNQU5JRkVTVAorPGxpPiBSZWFkIHRoZSBuYW1lZCBN
QU5JRkVTVCBmaWxlCis8bGk+IENsZWFuIHVwIHN0YWxlIGZpbGVzCis8bGk+IFdlIGNvdWxkIG9w
ZW4gYWxsIHNzdGFibGVzIGhlcmUsIGJ1dCBpdCBpcyBwcm9iYWJseSBiZXR0ZXIgdG8gYmUgbGF6
eS4uLgorPGxpPiBDb252ZXJ0IGxvZyBjaHVuayB0byBhIG5ldyBsZXZlbC0wIHNzdGFibGUKKzxs
aT4gU3RhcnQgZGlyZWN0aW5nIG5ldyB3cml0ZXMgdG8gYSBuZXcgbG9nIGZpbGUgd2l0aCByZWNv
dmVyZWQgc2VxdWVuY2UjCis8L3VsPgorCis8aDE+R2FyYmFnZSBjb2xsZWN0aW9uIG9mIGZpbGVz
PC9oMT4KKworPGNvZGU+RGVsZXRlT2Jzb2xldGVGaWxlcygpPC9jb2RlPiBpcyBjYWxsZWQgYXQg
dGhlIGVuZCBvZiBldmVyeQorY29tcGFjdGlvbiBhbmQgYXQgdGhlIGVuZCBvZiByZWNvdmVyeS4g
IEl0IGZpbmRzIHRoZSBuYW1lcyBvZiBhbGwKK2ZpbGVzIGluIHRoZSBkYXRhYmFzZS4gIEl0IGRl
bGV0ZXMgYWxsIGxvZyBmaWxlcyB0aGF0IGFyZSBub3QgdGhlCitjdXJyZW50IGxvZyBmaWxlLiAg
SXQgZGVsZXRlcyBhbGwgdGFibGUgZmlsZXMgdGhhdCBhcmUgbm90IHJlZmVyZW5jZWQKK2Zyb20g
c29tZSBsZXZlbCBhbmQgYXJlIG5vdCB0aGUgb3V0cHV0IG9mIGFuIGFjdGl2ZSBjb21wYWN0aW9u
LgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZl
bGRiL2RvYy9pbmRleC5odG1sIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kb2MvaW5kZXgu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4zZWQwZWQ5ZDllMzA1ZWQ2MzBmMzlhMjAxZTMwMzRlMDBkODE1YjQz
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kb2MvaW5kZXgu
aHRtbApAQCAtMCwwICsxLDU0OSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgor
PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iZG9jLmNzcyIgLz4K
Kzx0aXRsZT5MZXZlbGRiPC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHk+Cis8aDE+TGV2ZWxkYjwv
aDE+Cis8YWRkcmVzcz5KZWZmIERlYW4sIFNhbmpheSBHaGVtYXdhdDwvYWRkcmVzcz4KKzxwPgor
VGhlIDxjb2RlPmxldmVsZGI8L2NvZGU+IGxpYnJhcnkgcHJvdmlkZXMgYSBwZXJzaXN0ZW50IGtl
eSB2YWx1ZSBzdG9yZS4gIEtleXMgYW5kCit2YWx1ZXMgYXJlIGFyYml0cmFyeSBieXRlIGFycmF5
cy4gIFRoZSBrZXlzIGFyZSBvcmRlcmVkIHdpdGhpbiB0aGUga2V5Cit2YWx1ZSBzdG9yZSBhY2Nv
cmRpbmcgdG8gYSB1c2VyLXNwZWNpZmllZCBjb21wYXJhdG9yIGZ1bmN0aW9uLgorCis8cD4KKzxo
MT5PcGVuaW5nIEEgRGF0YWJhc2U8L2gxPgorPHA+CitBIDxjb2RlPmxldmVsZGI8L2NvZGU+IGRh
dGFiYXNlIGhhcyBhIG5hbWUgd2hpY2ggY29ycmVzcG9uZHMgdG8gYSBmaWxlIHN5c3RlbQorZGly
ZWN0b3J5LiAgQWxsIG9mIHRoZSBjb250ZW50cyBvZiBkYXRhYmFzZSBhcmUgc3RvcmVkIGluIHRo
aXMKK2RpcmVjdG9yeS4gIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyBob3cgdG8gb3BlbiBh
IGRhdGFiYXNlLAorY3JlYXRpbmcgaXQgaWYgbmVjZXNzYXJ5OgorPHA+Cis8cHJlPgorICAjaW5j
bHVkZSAmbHQ7YXNzZXJ0Jmd0OworICAjaW5jbHVkZSAibGV2ZWxkYi9kYi5oIgorCisgIGxldmVs
ZGI6OkRCKiBkYjsKKyAgbGV2ZWxkYjo6T3B0aW9ucyBvcHRpb25zOworICBvcHRpb25zLmNyZWF0
ZV9pZl9taXNzaW5nID0gdHJ1ZTsKKyAgbGV2ZWxkYjo6U3RhdHVzIHN0YXR1cyA9IGxldmVsZGI6
OkRCOjpPcGVuKG9wdGlvbnMsICIvdG1wL3Rlc3RkYiIsICZhbXA7ZGIpOworICBhc3NlcnQoc3Rh
dHVzLm9rKCkpOworICAuLi4KKzwvcHJlPgorSWYgeW91IHdhbnQgdG8gcmFpc2UgYW4gZXJyb3Ig
aWYgdGhlIGRhdGFiYXNlIGFscmVhZHkgZXhpc3RzLCBhZGQKK3RoZSBmb2xsb3dpbmcgbGluZSBi
ZWZvcmUgdGhlIDxjb2RlPmxldmVsZGI6OkRCOjpPcGVuPC9jb2RlPiBjYWxsOgorPHByZT4KKyAg
b3B0aW9ucy5lcnJvcl9pZl9leGlzdHMgPSB0cnVlOworPC9wcmU+Cis8aDE+U3RhdHVzPC9oMT4K
KzxwPgorWW91IG1heSBoYXZlIG5vdGljZWQgdGhlIDxjb2RlPmxldmVsZGI6OlN0YXR1czwvY29k
ZT4gdHlwZSBhYm92ZS4gIFZhbHVlcyBvZiB0aGlzCit0eXBlIGFyZSByZXR1cm5lZCBieSBtb3N0
IGZ1bmN0aW9ucyBpbiA8Y29kZT5sZXZlbGRiPC9jb2RlPiB0aGF0IG1heSBlbmNvdW50ZXIgYW4K
K2Vycm9yLiAgWW91IGNhbiBjaGVjayBpZiBzdWNoIGEgcmVzdWx0IGlzIG9rLCBhbmQgYWxzbyBw
cmludCBhbgorYXNzb2NpYXRlZCBlcnJvciBtZXNzYWdlOgorPHA+Cis8cHJlPgorICAgbGV2ZWxk
Yjo6U3RhdHVzIHMgPSAuLi47CisgICBpZiAoIXMub2soKSkgY2VyciAmbHQ7Jmx0OyBzLlRvU3Ry
aW5nKCkgJmx0OyZsdDsgZW5kbDsKKzwvcHJlPgorPGgxPkNsb3NpbmcgQSBEYXRhYmFzZTwvaDE+
Cis8cD4KK1doZW4geW91IGFyZSBkb25lIHdpdGggYSBkYXRhYmFzZSwganVzdCBkZWxldGUgdGhl
IGRhdGFiYXNlIG9iamVjdC4KK0V4YW1wbGU6Cis8cD4KKzxwcmU+CisgIC4uLiBvcGVuIHRoZSBk
YiBhcyBkZXNjcmliZWQgYWJvdmUgLi4uCisgIC4uLiBkbyBzb21ldGhpbmcgd2l0aCBkYiAuLi4K
KyAgZGVsZXRlIGRiOworPC9wcmU+Cis8aDE+UmVhZHMgQW5kIFdyaXRlczwvaDE+Cis8cD4KK1Ro
ZSBkYXRhYmFzZSBwcm92aWRlcyA8Y29kZT5QdXQ8L2NvZGU+LCA8Y29kZT5EZWxldGU8L2NvZGU+
LCBhbmQgPGNvZGU+R2V0PC9jb2RlPiBtZXRob2RzIHRvCittb2RpZnkvcXVlcnkgdGhlIGRhdGFi
YXNlLiAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29kZQorbW92ZXMgdGhlIHZhbHVlIHN0
b3JlZCB1bmRlciBrZXkxIHRvIGtleTIuCis8cHJlPgorICBzdGQ6OnN0cmluZyB2YWx1ZTsKKyAg
bGV2ZWxkYjo6U3RhdHVzIHMgPSBkYi0mZ3Q7R2V0KGxldmVsZGI6OlJlYWRPcHRpb25zKCksIGtl
eTEsICZhbXA7dmFsdWUpOworICBpZiAocy5vaygpKSBzID0gZGItJmd0O1B1dChsZXZlbGRiOjpX
cml0ZU9wdGlvbnMoKSwga2V5MiwgdmFsdWUpOworICBpZiAocy5vaygpKSBzID0gZGItJmd0O0Rl
bGV0ZShsZXZlbGRiOjpXcml0ZU9wdGlvbnMoKSwga2V5MSk7Cis8L3ByZT4KKworPGgxPkF0b21p
YyBVcGRhdGVzPC9oMT4KKzxwPgorTm90ZSB0aGF0IGlmIHRoZSBwcm9jZXNzIGRpZXMgYWZ0ZXIg
dGhlIFB1dCBvZiBrZXkyIGJ1dCBiZWZvcmUgdGhlCitkZWxldGUgb2Yga2V5MSwgdGhlIHNhbWUg
dmFsdWUgbWF5IGJlIGxlZnQgc3RvcmVkIHVuZGVyIG11bHRpcGxlIGtleXMuCitTdWNoIHByb2Js
ZW1zIGNhbiBiZSBhdm9pZGVkIGJ5IHVzaW5nIHRoZSA8Y29kZT5Xcml0ZUJhdGNoPC9jb2RlPiBj
bGFzcyB0bworYXRvbWljYWxseSBhcHBseSBhIHNldCBvZiB1cGRhdGVzOgorPHA+Cis8cHJlPgor
ICAjaW5jbHVkZSAibGV2ZWxkYi93cml0ZV9iYXRjaC5oIgorICAuLi4KKyAgc3RkOjpzdHJpbmcg
dmFsdWU7CisgIGxldmVsZGI6OlN0YXR1cyBzID0gZGItJmd0O0dldChsZXZlbGRiOjpSZWFkT3B0
aW9ucygpLCBrZXkxLCAmYW1wO3ZhbHVlKTsKKyAgaWYgKHMub2soKSkgeworICAgIGxldmVsZGI6
OldyaXRlQmF0Y2ggYmF0Y2g7CisgICAgYmF0Y2guRGVsZXRlKGtleTEpOworICAgIGJhdGNoLlB1
dChrZXkyLCB2YWx1ZSk7CisgICAgcyA9IGRiLSZndDtXcml0ZShsZXZlbGRiOjpXcml0ZU9wdGlv
bnMoKSwgJmFtcDtiYXRjaCk7CisgIH0KKzwvcHJlPgorVGhlIDxjb2RlPldyaXRlQmF0Y2g8L2Nv
ZGU+IGhvbGRzIGEgc2VxdWVuY2Ugb2YgZWRpdHMgdG8gYmUgbWFkZSB0byB0aGUgZGF0YWJhc2Us
CithbmQgdGhlc2UgZWRpdHMgd2l0aGluIHRoZSBiYXRjaCBhcmUgYXBwbGllZCBpbiBvcmRlci4g
IE5vdGUgdGhhdCB3ZQorY2FsbGVkIDxjb2RlPkRlbGV0ZTwvY29kZT4gYmVmb3JlIDxjb2RlPlB1
dDwvY29kZT4gc28gdGhhdCBpZiA8Y29kZT5rZXkxPC9jb2RlPiBpcyBpZGVudGljYWwgdG8gPGNv
ZGU+a2V5MjwvY29kZT4sCit3ZSBkbyBub3QgZW5kIHVwIGVycm9uZW91c2x5IGRyb3BwaW5nIHRo
ZSB2YWx1ZSBlbnRpcmVseS4KKzxwPgorQXBhcnQgZnJvbSBpdHMgYXRvbWljaXR5IGJlbmVmaXRz
LCA8Y29kZT5Xcml0ZUJhdGNoPC9jb2RlPiBtYXkgYWxzbyBiZSB1c2VkIHRvCitzcGVlZCB1cCBi
dWxrIHVwZGF0ZXMgYnkgcGxhY2luZyBsb3RzIG9mIGluZGl2aWR1YWwgbXV0YXRpb25zIGludG8g
dGhlCitzYW1lIGJhdGNoLgorCis8aDE+U3luY2hyb25vdXMgV3JpdGVzPC9oMT4KK0J5IGRlZmF1
bHQsIGVhY2ggd3JpdGUgdG8gPGNvZGU+bGV2ZWxkYjwvY29kZT4gaXMgYXN5bmNocm9ub3VzOiBp
dAorcmV0dXJucyBhZnRlciBwdXNoaW5nIHRoZSB3cml0ZSBmcm9tIHRoZSBwcm9jZXNzIGludG8g
dGhlIG9wZXJhdGluZworc3lzdGVtLiAgVGhlIHRyYW5zZmVyIGZyb20gb3BlcmF0aW5nIHN5c3Rl
bSBtZW1vcnkgdG8gdGhlIHVuZGVybHlpbmcKK3BlcnNpc3RlbnQgc3RvcmFnZSBoYXBwZW5zIGFz
eW5jaHJvbm91c2x5LiAgVGhlIDxjb2RlPnN5bmM8L2NvZGU+IGZsYWcKK2NhbiBiZSB0dXJuZWQg
b24gZm9yIGEgcGFydGljdWxhciB3cml0ZSB0byBtYWtlIHRoZSB3cml0ZSBvcGVyYXRpb24KK25v
dCByZXR1cm4gdW50aWwgdGhlIGRhdGEgYmVpbmcgd3JpdHRlbiBoYXMgYmVlbiBwdXNoZWQgYWxs
IHRoZSB3YXkgdG8KK3BlcnNpc3RlbnQgc3RvcmFnZS4gIChPbiBQb3NpeCBzeXN0ZW1zLCB0aGlz
IGlzIGltcGxlbWVudGVkIGJ5IGNhbGxpbmcKK2VpdGhlciA8Y29kZT5mc3luYyguLi4pPC9jb2Rl
PiBvciA8Y29kZT5mZGF0YXN5bmMoLi4uKTwvY29kZT4gb3IKKzxjb2RlPm1zeW5jKC4uLiwgTVNf
U1lOQyk8L2NvZGU+IGJlZm9yZSB0aGUgd3JpdGUgb3BlcmF0aW9uIHJldHVybnMuKQorPHByZT4K
KyAgbGV2ZWxkYjo6V3JpdGVPcHRpb25zIHdyaXRlX29wdGlvbnM7CisgIHdyaXRlX29wdGlvbnMu
c3luYyA9IHRydWU7CisgIGRiLSZndDtQdXQod3JpdGVfb3B0aW9ucywgLi4uKTsKKzwvcHJlPgor
QXN5bmNocm9ub3VzIHdyaXRlcyBhcmUgb2Z0ZW4gbW9yZSB0aGFuIGEgdGhvdXNhbmQgdGltZXMg
YXMgZmFzdCBhcworc3luY2hyb25vdXMgd3JpdGVzLiAgVGhlIGRvd25zaWRlIG9mIGFzeW5jaHJv
bm91cyB3cml0ZXMgaXMgdGhhdCBhCitjcmFzaCBvZiB0aGUgbWFjaGluZSBtYXkgY2F1c2UgdGhl
IGxhc3QgZmV3IHVwZGF0ZXMgdG8gYmUgbG9zdC4gIE5vdGUKK3RoYXQgYSBjcmFzaCBvZiBqdXN0
IHRoZSB3cml0aW5nIHByb2Nlc3MgKGkuZS4sIG5vdCBhIHJlYm9vdCkgd2lsbCBub3QKK2NhdXNl
IGFueSBsb3NzIHNpbmNlIGV2ZW4gd2hlbiA8Y29kZT5zeW5jPC9jb2RlPiBpcyBmYWxzZSwgYW4g
dXBkYXRlCitpcyBwdXNoZWQgZnJvbSB0aGUgcHJvY2VzcyBtZW1vcnkgaW50byB0aGUgb3BlcmF0
aW5nIHN5c3RlbSBiZWZvcmUgaXQKK2lzIGNvbnNpZGVyZWQgZG9uZS4KKworPHA+CitBc3luY2hy
b25vdXMgd3JpdGVzIGNhbiBvZnRlbiBiZSB1c2VkIHNhZmVseS4gIEZvciBleGFtcGxlLCB3aGVu
Citsb2FkaW5nIGEgbGFyZ2UgYW1vdW50IG9mIGRhdGEgaW50byB0aGUgZGF0YWJhc2UgeW91IGNh
biBoYW5kbGUgbG9zdAordXBkYXRlcyBieSByZXN0YXJ0aW5nIHRoZSBidWxrIGxvYWQgYWZ0ZXIg
YSBjcmFzaC4gIEEgaHlicmlkIHNjaGVtZSBpcworYWxzbyBwb3NzaWJsZSB3aGVyZSBldmVyeSBO
dGggd3JpdGUgaXMgc3luY2hyb25vdXMsIGFuZCBpbiB0aGUgZXZlbnQKK29mIGEgY3Jhc2gsIHRo
ZSBidWxrIGxvYWQgaXMgcmVzdGFydGVkIGp1c3QgYWZ0ZXIgdGhlIGxhc3Qgc3luY2hyb25vdXMK
K3dyaXRlIGZpbmlzaGVkIGJ5IHRoZSBwcmV2aW91cyBydW4uICAoVGhlIHN5bmNocm9ub3VzIHdy
aXRlIGNhbiB1cGRhdGUKK2EgbWFya2VyIHRoYXQgZGVzY3JpYmVzIHdoZXJlIHRvIHJlc3RhcnQg
b24gYSBjcmFzaC4pCisKKzxwPgorPGNvZGU+V3JpdGVCYXRjaDwvY29kZT4gcHJvdmlkZXMgYW4g
YWx0ZXJuYXRpdmUgdG8gYXN5bmNocm9ub3VzIHdyaXRlcy4KK011bHRpcGxlIHVwZGF0ZXMgbWF5
IGJlIHBsYWNlZCBpbiB0aGUgc2FtZSA8Y29kZT5Xcml0ZUJhdGNoPC9jb2RlPiBhbmQKK2FwcGxp
ZWQgdG9nZXRoZXIgdXNpbmcgYSBzeW5jaHJvbm91cyB3cml0ZSAoaS5lLiwKKzxjb2RlPndyaXRl
X29wdGlvbnMuc3luYzwvY29kZT4gaXMgc2V0IHRvIHRydWUpLiAgVGhlIGV4dHJhIGNvc3Qgb2YK
K3RoZSBzeW5jaHJvbm91cyB3cml0ZSB3aWxsIGJlIGFtb3J0aXplZCBhY3Jvc3MgYWxsIG9mIHRo
ZSB3cml0ZXMgaW4KK3RoZSBiYXRjaC4KKworPHA+Cis8aDE+Q29uY3VycmVuY3k8L2gxPgorPHA+
CitBIGRhdGFiYXNlIG1heSBvbmx5IGJlIG9wZW5lZCBieSBvbmUgcHJvY2VzcyBhdCBhIHRpbWUu
CitUaGUgPGNvZGU+bGV2ZWxkYjwvY29kZT4gaW1wbGVtZW50YXRpb24gYWNxdWlyZXMgYSBsb2Nr
IGZyb20gdGhlCitvcGVyYXRpbmcgc3lzdGVtIHRvIHByZXZlbnQgbWlzdXNlLiAgV2l0aGluIGEg
c2luZ2xlIHByb2Nlc3MsIHRoZQorc2FtZSA8Y29kZT5sZXZlbGRiOjpEQjwvY29kZT4gb2JqZWN0
IG1heSBiZSBzYWZlbHkgc2hhcmVkIGJ5IG11bHRpcGxlCitjb25jdXJyZW50IHRocmVhZHMuICBJ
LmUuLCBkaWZmZXJlbnQgdGhyZWFkcyBtYXkgd3JpdGUgaW50byBvciBmZXRjaAoraXRlcmF0b3Jz
IG9yIGNhbGwgPGNvZGU+R2V0PC9jb2RlPiBvbiB0aGUgc2FtZSBkYXRhYmFzZSB3aXRob3V0IGFu
eQorZXh0ZXJuYWwgc3luY2hyb25pemF0aW9uICh0aGUgbGV2ZWxkYiBpbXBsZW1lbnRhdGlvbiB3
aWxsCithdXRvbWF0aWNhbGx5IGRvIHRoZSByZXF1aXJlZCBzeW5jaHJvbml6YXRpb24pLiAgSG93
ZXZlciBvdGhlciBvYmplY3RzCisobGlrZSBJdGVyYXRvciBhbmQgV3JpdGVCYXRjaCkgbWF5IHJl
cXVpcmUgZXh0ZXJuYWwgc3luY2hyb25pemF0aW9uLgorSWYgdHdvIHRocmVhZHMgc2hhcmUgc3Vj
aCBhbiBvYmplY3QsIHRoZXkgbXVzdCBwcm90ZWN0IGFjY2VzcyB0byBpdAordXNpbmcgdGhlaXIg
b3duIGxvY2tpbmcgcHJvdG9jb2wuICBNb3JlIGRldGFpbHMgYXJlIGF2YWlsYWJsZSBpbgordGhl
IHB1YmxpYyBoZWFkZXIgZmlsZXMuCis8cD4KKzxoMT5JdGVyYXRpb248L2gxPgorPHA+CitUaGUg
Zm9sbG93aW5nIGV4YW1wbGUgZGVtb25zdHJhdGVzIGhvdyB0byBwcmludCBhbGwga2V5LHZhbHVl
IHBhaXJzCitpbiBhIGRhdGFiYXNlLgorPHA+Cis8cHJlPgorICBsZXZlbGRiOjpJdGVyYXRvciog
aXQgPSBkYi0mZ3Q7TmV3SXRlcmF0b3IobGV2ZWxkYjo6UmVhZE9wdGlvbnMoKSk7CisgIGZvciAo
aXQtJmd0O1NlZWtUb0ZpcnN0KCk7IGl0LSZndDtWYWxpZCgpOyBpdC0mZ3Q7TmV4dCgpKSB7Cisg
ICAgY291dCAmbHQ7Jmx0OyBpdC0mZ3Q7a2V5KCkuVG9TdHJpbmcoKSAmbHQ7Jmx0OyAiOiAiICAm
bHQ7Jmx0OyBpdC0mZ3Q7dmFsdWUoKS5Ub1N0cmluZygpICZsdDsmbHQ7IGVuZGw7CisgIH0KKyAg
YXNzZXJ0KGl0LSZndDtzdGF0dXMoKS5vaygpKTsgIC8vIENoZWNrIGZvciBhbnkgZXJyb3JzIGZv
dW5kIGR1cmluZyB0aGUgc2NhbgorICBkZWxldGUgaXQ7Cis8L3ByZT4KK1RoZSBmb2xsb3dpbmcg
dmFyaWF0aW9uIHNob3dzIGhvdyB0byBwcm9jZXNzIGp1c3QgdGhlIGtleXMgaW4gdGhlCityYW5n
ZSA8Y29kZT5bc3RhcnQsbGltaXQpPC9jb2RlPjoKKzxwPgorPHByZT4KKyAgZm9yIChpdC0mZ3Q7
U2VlayhzdGFydCk7CisgICAgICAgaXQtJmd0O1ZhbGlkKCkgJmFtcDsmYW1wOyBpdC0mZ3Q7a2V5
KCkuVG9TdHJpbmcoKSAmbHQ7IGxpbWl0OworICAgICAgIGl0LSZndDtOZXh0KCkpIHsKKyAgICAu
Li4KKyAgfQorPC9wcmU+CitZb3UgY2FuIGFsc28gcHJvY2VzcyBlbnRyaWVzIGluIHJldmVyc2Ug
b3JkZXIuICAoQ2F2ZWF0OiByZXZlcnNlCitpdGVyYXRpb24gbWF5IGJlIHNvbWV3aGF0IHNsb3dl
ciB0aGFuIGZvcndhcmQgaXRlcmF0aW9uLikKKzxwPgorPHByZT4KKyAgZm9yIChpdC0mZ3Q7U2Vl
a1RvTGFzdCgpOyBpdC0mZ3Q7VmFsaWQoKTsgaXQtJmd0O1ByZXYoKSkgeworICAgIC4uLgorICB9
Cis8L3ByZT4KKzxoMT5TbmFwc2hvdHM8L2gxPgorPHA+CitTbmFwc2hvdHMgcHJvdmlkZSBjb25z
aXN0ZW50IHJlYWQtb25seSB2aWV3cyBvdmVyIHRoZSBlbnRpcmUgc3RhdGUgb2YKK3RoZSBrZXkt
dmFsdWUgc3RvcmUuICA8Y29kZT5SZWFkT3B0aW9uczo6c25hcHNob3Q8L2NvZGU+IG1heSBiZSBu
b24tTlVMTCB0byBpbmRpY2F0ZQordGhhdCBhIHJlYWQgc2hvdWxkIG9wZXJhdGUgb24gYSBwYXJ0
aWN1bGFyIHZlcnNpb24gb2YgdGhlIERCIHN0YXRlLgorSWYgPGNvZGU+UmVhZE9wdGlvbnM6OnNu
YXBzaG90PC9jb2RlPiBpcyBOVUxMLCB0aGUgcmVhZCB3aWxsIG9wZXJhdGUgb24gYW4KK2ltcGxp
Y2l0IHNuYXBzaG90IG9mIHRoZSBjdXJyZW50IHN0YXRlLgorPHA+CitTbmFwc2hvdHMgYXJlIGNy
ZWF0ZWQgYnkgdGhlIERCOjpHZXRTbmFwc2hvdCgpIG1ldGhvZDoKKzxwPgorPHByZT4KKyAgbGV2
ZWxkYjo6UmVhZE9wdGlvbnMgb3B0aW9uczsKKyAgb3B0aW9ucy5zbmFwc2hvdCA9IGRiLSZndDtH
ZXRTbmFwc2hvdCgpOworICAuLi4gYXBwbHkgc29tZSB1cGRhdGVzIHRvIGRiIC4uLgorICBsZXZl
bGRiOjpJdGVyYXRvciogaXRlciA9IGRiLSZndDtOZXdJdGVyYXRvcihvcHRpb25zKTsKKyAgLi4u
IHJlYWQgdXNpbmcgaXRlciB0byB2aWV3IHRoZSBzdGF0ZSB3aGVuIHRoZSBzbmFwc2hvdCB3YXMg
Y3JlYXRlZCAuLi4KKyAgZGVsZXRlIGl0ZXI7CisgIGRiLSZndDtSZWxlYXNlU25hcHNob3Qob3B0
aW9ucy5zbmFwc2hvdCk7Cis8L3ByZT4KK05vdGUgdGhhdCB3aGVuIGEgc25hcHNob3QgaXMgbm8g
bG9uZ2VyIG5lZWRlZCwgaXQgc2hvdWxkIGJlIHJlbGVhc2VkCit1c2luZyB0aGUgREI6OlJlbGVh
c2VTbmFwc2hvdCBpbnRlcmZhY2UuICBUaGlzIGFsbG93cyB0aGUKK2ltcGxlbWVudGF0aW9uIHRv
IGdldCByaWQgb2Ygc3RhdGUgdGhhdCB3YXMgYmVpbmcgbWFpbnRhaW5lZCBqdXN0IHRvCitzdXBw
b3J0IHJlYWRpbmcgYXMgb2YgdGhhdCBzbmFwc2hvdC4KKzxoMT5TbGljZTwvaDE+Cis8cD4KK1Ro
ZSByZXR1cm4gdmFsdWUgb2YgdGhlIDxjb2RlPml0LT5rZXkoKTwvY29kZT4gYW5kIDxjb2RlPml0
LT52YWx1ZSgpPC9jb2RlPiBjYWxscyBhYm92ZQorYXJlIGluc3RhbmNlcyBvZiB0aGUgPGNvZGU+
bGV2ZWxkYjo6U2xpY2U8L2NvZGU+IHR5cGUuICA8Y29kZT5TbGljZTwvY29kZT4gaXMgYSBzaW1w
bGUKK3N0cnVjdHVyZSB0aGF0IGNvbnRhaW5zIGEgbGVuZ3RoIGFuZCBhIHBvaW50ZXIgdG8gYW4g
ZXh0ZXJuYWwgYnl0ZQorYXJyYXkuICBSZXR1cm5pbmcgYSA8Y29kZT5TbGljZTwvY29kZT4gaXMg
YSBjaGVhcGVyIGFsdGVybmF0aXZlIHRvIHJldHVybmluZyBhCis8Y29kZT5zdGQ6OnN0cmluZzwv
Y29kZT4gc2luY2Ugd2UgZG8gbm90IG5lZWQgdG8gY29weSBwb3RlbnRpYWxseSBsYXJnZSBrZXlz
IGFuZAordmFsdWVzLiAgSW4gYWRkaXRpb24sIDxjb2RlPmxldmVsZGI8L2NvZGU+IG1ldGhvZHMg
ZG8gbm90IHJldHVybiBudWxsLXRlcm1pbmF0ZWQKK0Mtc3R5bGUgc3RyaW5ncyBzaW5jZSA8Y29k
ZT5sZXZlbGRiPC9jb2RlPiBrZXlzIGFuZCB2YWx1ZXMgYXJlIGFsbG93ZWQgdG8KK2NvbnRhaW4g
J1wwJyBieXRlcy4KKzxwPgorQysrIHN0cmluZ3MgYW5kIG51bGwtdGVybWluYXRlZCBDLXN0eWxl
IHN0cmluZ3MgY2FuIGJlIGVhc2lseSBjb252ZXJ0ZWQKK3RvIGEgU2xpY2U6Cis8cD4KKzxwcmU+
CisgICBsZXZlbGRiOjpTbGljZSBzMSA9ICJoZWxsbyI7CisKKyAgIHN0ZDo6c3RyaW5nIHN0cigi
d29ybGQiKTsKKyAgIGxldmVsZGI6OlNsaWNlIHMyID0gc3RyOworPC9wcmU+CitBIFNsaWNlIGNh
biBiZSBlYXNpbHkgY29udmVydGVkIGJhY2sgdG8gYSBDKysgc3RyaW5nOgorPHByZT4KKyAgIHN0
ZDo6c3RyaW5nIHN0ciA9IHMxLlRvU3RyaW5nKCk7CisgICBhc3NlcnQoc3RyID09IHN0ZDo6c3Ry
aW5nKCJoZWxsbyIpKTsKKzwvcHJlPgorQmUgY2FyZWZ1bCB3aGVuIHVzaW5nIFNsaWNlcyBzaW5j
ZSBpdCBpcyB1cCB0byB0aGUgY2FsbGVyIHRvIGVuc3VyZSB0aGF0Cit0aGUgZXh0ZXJuYWwgYnl0
ZSBhcnJheSBpbnRvIHdoaWNoIHRoZSBTbGljZSBwb2ludHMgcmVtYWlucyBsaXZlIHdoaWxlCit0
aGUgU2xpY2UgaXMgaW4gdXNlLiAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgaXMgYnVnZ3k6
Cis8cD4KKzxwcmU+CisgICBsZXZlbGRiOjpTbGljZSBzbGljZTsKKyAgIGlmICguLi4pIHsKKyAg
ICAgc3RkOjpzdHJpbmcgc3RyID0gLi4uOworICAgICBzbGljZSA9IHN0cjsKKyAgIH0KKyAgIFVz
ZShzbGljZSk7Cis8L3ByZT4KK1doZW4gdGhlIDxjb2RlPmlmPC9jb2RlPiBzdGF0ZW1lbnQgZ29l
cyBvdXQgb2Ygc2NvcGUsIDxjb2RlPnN0cjwvY29kZT4gd2lsbCBiZSBkZXN0cm95ZWQgYW5kIHRo
ZQorYmFja2luZyBzdG9yYWdlIGZvciA8Y29kZT5zbGljZTwvY29kZT4gd2lsbCBkaXNhcHBlYXIu
Cis8cD4KKzxoMT5Db21wYXJhdG9yczwvaDE+Cis8cD4KK1RoZSBwcmVjZWRpbmcgZXhhbXBsZXMg
dXNlZCB0aGUgZGVmYXVsdCBvcmRlcmluZyBmdW5jdGlvbiBmb3Iga2V5LAord2hpY2ggb3JkZXJz
IGJ5dGVzIGxleGljb2dyYXBoaWNhbGx5LiAgWW91IGNhbiBob3dldmVyIHN1cHBseSBhIGN1c3Rv
bQorY29tcGFyYXRvciB3aGVuIG9wZW5pbmcgYSBkYXRhYmFzZS4gIEZvciBleGFtcGxlLCBzdXBw
b3NlIGVhY2gKK2RhdGFiYXNlIGtleSBjb25zaXN0cyBvZiB0d28gbnVtYmVycyBhbmQgd2Ugc2hv
dWxkIHNvcnQgYnkgdGhlIGZpcnN0CitudW1iZXIsIGJyZWFraW5nIHRpZXMgYnkgdGhlIHNlY29u
ZCBudW1iZXIuICBGaXJzdCwgZGVmaW5lIGEgcHJvcGVyCitzdWJjbGFzcyBvZiA8Y29kZT5sZXZl
bGRiOjpDb21wYXJhdG9yPC9jb2RlPiB0aGF0IGV4cHJlc3NlcyB0aGVzZSBydWxlczoKKzxwPgor
PHByZT4KKyAgY2xhc3MgVHdvUGFydENvbXBhcmF0b3IgOiBwdWJsaWMgbGV2ZWxkYjo6Q29tcGFy
YXRvciB7CisgICBwdWJsaWM6CisgICAgLy8gVGhyZWUtd2F5IGNvbXBhcmlzb24gZnVuY3Rpb246
CisgICAgLy8gICBpZiBhICZsdDsgYjogbmVnYXRpdmUgcmVzdWx0CisgICAgLy8gICBpZiBhICZn
dDsgYjogcG9zaXRpdmUgcmVzdWx0CisgICAgLy8gICBlbHNlOiB6ZXJvIHJlc3VsdAorICAgIGlu
dCBDb21wYXJlKGNvbnN0IGxldmVsZGI6OlNsaWNlJmFtcDsgYSwgY29uc3QgbGV2ZWxkYjo6U2xp
Y2UmYW1wOyBiKSBjb25zdCB7CisgICAgICBpbnQgYTEsIGEyLCBiMSwgYjI7CisgICAgICBQYXJz
ZUtleShhLCAmYW1wO2ExLCAmYW1wO2EyKTsKKyAgICAgIFBhcnNlS2V5KGIsICZhbXA7YjEsICZh
bXA7YjIpOworICAgICAgaWYgKGExICZsdDsgYjEpIHJldHVybiAtMTsKKyAgICAgIGlmIChhMSAm
Z3Q7IGIxKSByZXR1cm4gKzE7CisgICAgICBpZiAoYTIgJmx0OyBiMikgcmV0dXJuIC0xOworICAg
ICAgaWYgKGEyICZndDsgYjIpIHJldHVybiArMTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKwor
ICAgIC8vIElnbm9yZSB0aGUgZm9sbG93aW5nIG1ldGhvZHMgZm9yIG5vdzoKKyAgICBjb25zdCBj
aGFyKiBOYW1lKCkgY29uc3QgeyByZXR1cm4gIlR3b1BhcnRDb21wYXJhdG9yIjsgfQorICAgIHZv
aWQgRmluZFNob3J0ZXN0U2VwYXJhdG9yKHN0ZDo6c3RyaW5nKiwgY29uc3QgbGV2ZWxkYjo6U2xp
Y2UmYW1wOykgY29uc3QgeyB9CisgICAgdm9pZCBGaW5kU2hvcnRTdWNjZXNzb3Ioc3RkOjpzdHJp
bmcqKSBjb25zdCB7IH0KKyAgfTsKKzwvcHJlPgorTm93IGNyZWF0ZSBhIGRhdGFiYXNlIHVzaW5n
IHRoaXMgY3VzdG9tIGNvbXBhcmF0b3I6Cis8cD4KKzxwcmU+CisgIFR3b1BhcnRDb21wYXJhdG9y
IGNtcDsKKyAgbGV2ZWxkYjo6REIqIGRiOworICBsZXZlbGRiOjpPcHRpb25zIG9wdGlvbnM7Cisg
IG9wdGlvbnMuY3JlYXRlX2lmX21pc3NpbmcgPSB0cnVlOworICBvcHRpb25zLmNvbXBhcmF0b3Ig
PSAmYW1wO2NtcDsKKyAgbGV2ZWxkYjo6U3RhdHVzIHN0YXR1cyA9IGxldmVsZGI6OkRCOjpPcGVu
KG9wdGlvbnMsICIvdG1wL3Rlc3RkYiIsICZhbXA7ZGIpOworICAuLi4KKzwvcHJlPgorPGgyPkJh
Y2t3YXJkcyBjb21wYXRpYmlsaXR5PC9oMj4KKzxwPgorVGhlIHJlc3VsdCBvZiB0aGUgY29tcGFy
YXRvcidzIDxjb2RlPk5hbWU8L2NvZGU+IG1ldGhvZCBpcyBhdHRhY2hlZCB0byB0aGUKK2RhdGFi
YXNlIHdoZW4gaXQgaXMgY3JlYXRlZCwgYW5kIGlzIGNoZWNrZWQgb24gZXZlcnkgc3Vic2VxdWVu
dAorZGF0YWJhc2Ugb3Blbi4gIElmIHRoZSBuYW1lIGNoYW5nZXMsIHRoZSA8Y29kZT5sZXZlbGRi
OjpEQjo6T3BlbjwvY29kZT4gY2FsbCB3aWxsCitmYWlsLiAgVGhlcmVmb3JlLCBjaGFuZ2UgdGhl
IG5hbWUgaWYgYW5kIG9ubHkgaWYgdGhlIG5ldyBrZXkgZm9ybWF0CithbmQgY29tcGFyaXNvbiBm
dW5jdGlvbiBhcmUgaW5jb21wYXRpYmxlIHdpdGggZXhpc3RpbmcgZGF0YWJhc2VzLCBhbmQKK2l0
IGlzIG9rIHRvIGRpc2NhcmQgdGhlIGNvbnRlbnRzIG9mIGFsbCBleGlzdGluZyBkYXRhYmFzZXMu
Cis8cD4KK1lvdSBjYW4gaG93ZXZlciBzdGlsbCBncmFkdWFsbHkgZXZvbHZlIHlvdXIga2V5IGZv
cm1hdCBvdmVyIHRpbWUgd2l0aAorYSBsaXR0bGUgYml0IG9mIHByZS1wbGFubmluZy4gIEZvciBl
eGFtcGxlLCB5b3UgY291bGQgc3RvcmUgYSB2ZXJzaW9uCitudW1iZXIgYXQgdGhlIGVuZCBvZiBl
YWNoIGtleSAob25lIGJ5dGUgc2hvdWxkIHN1ZmZpY2UgZm9yIG1vc3QgdXNlcykuCitXaGVuIHlv
dSB3aXNoIHRvIHN3aXRjaCB0byBhIG5ldyBrZXkgZm9ybWF0IChlLmcuLCBhZGRpbmcgYW4gb3B0
aW9uYWwKK3RoaXJkIHBhcnQgdG8gdGhlIGtleXMgcHJvY2Vzc2VkIGJ5IDxjb2RlPlR3b1BhcnRD
b21wYXJhdG9yPC9jb2RlPiksCisoYSkga2VlcCB0aGUgc2FtZSBjb21wYXJhdG9yIG5hbWUgKGIp
IGluY3JlbWVudCB0aGUgdmVyc2lvbiBudW1iZXIKK2ZvciBuZXcga2V5cyAoYykgY2hhbmdlIHRo
ZSBjb21wYXJhdG9yIGZ1bmN0aW9uIHNvIGl0IHVzZXMgdGhlCit2ZXJzaW9uIG51bWJlcnMgZm91
bmQgaW4gdGhlIGtleXMgdG8gZGVjaWRlIGhvdyB0byBpbnRlcnByZXQgdGhlbS4KKzxwPgorPGgx
PlBlcmZvcm1hbmNlPC9oMT4KKzxwPgorUGVyZm9ybWFuY2UgY2FuIGJlIHR1bmVkIGJ5IGNoYW5n
aW5nIHRoZSBkZWZhdWx0IHZhbHVlcyBvZiB0aGUKK3R5cGVzIGRlZmluZWQgaW4gPGNvZGU+aW5j
bHVkZS9sZXZlbGRiL29wdGlvbnMuaDwvY29kZT4uCisKKzxwPgorPGgyPkJsb2NrIHNpemU8L2gy
PgorPHA+Cis8Y29kZT5sZXZlbGRiPC9jb2RlPiBncm91cHMgYWRqYWNlbnQga2V5cyB0b2dldGhl
ciBpbnRvIHRoZSBzYW1lIGJsb2NrIGFuZCBzdWNoIGEKK2Jsb2NrIGlzIHRoZSB1bml0IG9mIHRy
YW5zZmVyIHRvIGFuZCBmcm9tIHBlcnNpc3RlbnQgc3RvcmFnZS4gIFRoZQorZGVmYXVsdCBibG9j
ayBzaXplIGlzIGFwcHJveGltYXRlbHkgNDA5NiB1bmNvbXByZXNzZWQgYnl0ZXMuCitBcHBsaWNh
dGlvbnMgdGhhdCBtb3N0bHkgZG8gYnVsayBzY2FucyBvdmVyIHRoZSBjb250ZW50cyBvZiB0aGUK
K2RhdGFiYXNlIG1heSB3aXNoIHRvIGluY3JlYXNlIHRoaXMgc2l6ZS4gIEFwcGxpY2F0aW9ucyB0
aGF0IGRvIGEgbG90CitvZiBwb2ludCByZWFkcyBvZiBzbWFsbCB2YWx1ZXMgbWF5IHdpc2ggdG8g
c3dpdGNoIHRvIGEgc21hbGxlciBibG9jaworc2l6ZSBpZiBwZXJmb3JtYW5jZSBtZWFzdXJlbWVu
dHMgaW5kaWNhdGUgYW4gaW1wcm92ZW1lbnQuICBUaGVyZSBpc24ndAorbXVjaCBiZW5lZml0IGlu
IHVzaW5nIGJsb2NrcyBzbWFsbGVyIHRoYW4gb25lIGtpbG9ieXRlLCBvciBsYXJnZXIgdGhhbgor
YSBmZXcgbWVnYWJ5dGVzLiAgQWxzbyBub3RlIHRoYXQgY29tcHJlc3Npb24gd2lsbCBiZSBtb3Jl
IGVmZmVjdGl2ZQord2l0aCBsYXJnZXIgYmxvY2sgc2l6ZXMuCis8cD4KKzxoMj5Db21wcmVzc2lv
bjwvaDI+Cis8cD4KK0VhY2ggYmxvY2sgaXMgaW5kaXZpZHVhbGx5IGNvbXByZXNzZWQgYmVmb3Jl
IGJlaW5nIHdyaXR0ZW4gdG8KK3BlcnNpc3RlbnQgc3RvcmFnZS4gIENvbXByZXNzaW9uIGlzIG9u
IGJ5IGRlZmF1bHQgc2luY2UgdGhlIGRlZmF1bHQKK2NvbXByZXNzaW9uIG1ldGhvZCBpcyB2ZXJ5
IGZhc3QsIGFuZCBpcyBhdXRvbWF0aWNhbGx5IGRpc2FibGVkIGZvcgordW5jb21wcmVzc2libGUg
ZGF0YS4gIEluIHJhcmUgY2FzZXMsIGFwcGxpY2F0aW9ucyBtYXkgd2FudCB0byBkaXNhYmxlCitj
b21wcmVzc2lvbiBlbnRpcmVseSwgYnV0IHNob3VsZCBvbmx5IGRvIHNvIGlmIGJlbmNobWFya3Mg
c2hvdyBhCitwZXJmb3JtYW5jZSBpbXByb3ZlbWVudDoKKzxwPgorPHByZT4KKyAgbGV2ZWxkYjo6
T3B0aW9ucyBvcHRpb25zOworICBvcHRpb25zLmNvbXByZXNzaW9uID0gbGV2ZWxkYjo6a05vQ29t
cHJlc3Npb247CisgIC4uLiBsZXZlbGRiOjpEQjo6T3BlbihvcHRpb25zLCBuYW1lLCAuLi4pIC4u
Li4KKzwvcHJlPgorPGgyPkNhY2hlPC9oMj4KKzxwPgorVGhlIGNvbnRlbnRzIG9mIHRoZSBkYXRh
YmFzZSBhcmUgc3RvcmVkIGluIGEgc2V0IG9mIGZpbGVzIGluIHRoZQorZmlsZXN5c3RlbSBhbmQg
ZWFjaCBmaWxlIHN0b3JlcyBhIHNlcXVlbmNlIG9mIGNvbXByZXNzZWQgYmxvY2tzLiAgSWYKKzxj
b2RlPm9wdGlvbnMuY2FjaGU8L2NvZGU+IGlzIG5vbi1OVUxMLCBpdCBpcyB1c2VkIHRvIGNhY2hl
IGZyZXF1ZW50bHkgdXNlZAordW5jb21wcmVzc2VkIGJsb2NrIGNvbnRlbnRzLgorPHA+Cis8cHJl
PgorICAjaW5jbHVkZSAibGV2ZWxkYi9jYWNoZS5oIgorCisgIGxldmVsZGI6Ok9wdGlvbnMgb3B0
aW9uczsKKyAgb3B0aW9ucy5jYWNoZSA9IGxldmVsZGI6Ok5ld0xSVUNhY2hlKDEwMCAqIDEwNDg1
NzYpOyAgLy8gMTAwTUIgY2FjaGUKKyAgbGV2ZWxkYjo6REIqIGRiOworICBsZXZlbGRiOjpEQjo6
T3BlbihvcHRpb25zLCBuYW1lLCAmZGIpOworICAuLi4gdXNlIHRoZSBkYiAuLi4KKyAgZGVsZXRl
IGRiCisgIGRlbGV0ZSBvcHRpb25zLmNhY2hlOworPC9wcmU+CitOb3RlIHRoYXQgdGhlIGNhY2hl
IGhvbGRzIHVuY29tcHJlc3NlZCBkYXRhLCBhbmQgdGhlcmVmb3JlIGl0IHNob3VsZAorYmUgc2l6
ZWQgYWNjb3JkaW5nIHRvIGFwcGxpY2F0aW9uIGxldmVsIGRhdGEgc2l6ZXMsIHdpdGhvdXQgYW55
CityZWR1Y3Rpb24gZnJvbSBjb21wcmVzc2lvbi4gIChDYWNoaW5nIG9mIGNvbXByZXNzZWQgYmxv
Y2tzIGlzIGxlZnQgdG8KK3RoZSBvcGVyYXRpbmcgc3lzdGVtIGJ1ZmZlciBjYWNoZSwgb3IgYW55
IGN1c3RvbSA8Y29kZT5FbnY8L2NvZGU+CitpbXBsZW1lbnRhdGlvbiBwcm92aWRlZCBieSB0aGUg
Y2xpZW50LikKKzxwPgorV2hlbiBwZXJmb3JtaW5nIGEgYnVsayByZWFkLCB0aGUgYXBwbGljYXRp
b24gbWF5IHdpc2ggdG8gZGlzYWJsZQorY2FjaGluZyBzbyB0aGF0IHRoZSBkYXRhIHByb2Nlc3Nl
ZCBieSB0aGUgYnVsayByZWFkIGRvZXMgbm90IGVuZCB1cAorZGlzcGxhY2luZyBtb3N0IG9mIHRo
ZSBjYWNoZWQgY29udGVudHMuICBBIHBlci1pdGVyYXRvciBvcHRpb24gY2FuIGJlCit1c2VkIHRv
IGFjaGlldmUgdGhpczoKKzxwPgorPHByZT4KKyAgbGV2ZWxkYjo6UmVhZE9wdGlvbnMgb3B0aW9u
czsKKyAgb3B0aW9ucy5maWxsX2NhY2hlID0gZmFsc2U7CisgIGxldmVsZGI6Okl0ZXJhdG9yKiBp
dCA9IGRiLSZndDtOZXdJdGVyYXRvcihvcHRpb25zKTsKKyAgZm9yIChpdC0mZ3Q7U2Vla1RvRmly
c3QoKTsgaXQtJmd0O1ZhbGlkKCk7IGl0LSZndDtOZXh0KCkpIHsKKyAgICAuLi4KKyAgfQorPC9w
cmU+Cis8aDI+S2V5IExheW91dDwvaDI+Cis8cD4KK05vdGUgdGhhdCB0aGUgdW5pdCBvZiBkaXNr
IHRyYW5zZmVyIGFuZCBjYWNoaW5nIGlzIGEgYmxvY2suICBBZGphY2VudAora2V5cyAoYWNjb3Jk
aW5nIHRvIHRoZSBkYXRhYmFzZSBzb3J0IG9yZGVyKSB3aWxsIHVzdWFsbHkgYmUgcGxhY2VkIGlu
Cit0aGUgc2FtZSBibG9jay4gIFRoZXJlZm9yZSB0aGUgYXBwbGljYXRpb24gY2FuIGltcHJvdmUg
aXRzIHBlcmZvcm1hbmNlCitieSBwbGFjaW5nIGtleXMgdGhhdCBhcmUgYWNjZXNzZWQgdG9nZXRo
ZXIgbmVhciBlYWNoIG90aGVyIGFuZCBwbGFjaW5nCitpbmZyZXF1ZW50bHkgdXNlZCBrZXlzIGlu
IGEgc2VwYXJhdGUgcmVnaW9uIG9mIHRoZSBrZXkgc3BhY2UuCis8cD4KK0ZvciBleGFtcGxlLCBz
dXBwb3NlIHdlIGFyZSBpbXBsZW1lbnRpbmcgYSBzaW1wbGUgZmlsZSBzeXN0ZW0gb24gdG9wCitv
ZiA8Y29kZT5sZXZlbGRiPC9jb2RlPi4gIFRoZSB0eXBlcyBvZiBlbnRyaWVzIHdlIG1pZ2h0IHdp
c2ggdG8gc3RvcmUgYXJlOgorPHA+Cis8cHJlPgorICAgZmlsZW5hbWUgLSZndDsgcGVybWlzc2lv
bi1iaXRzLCBsZW5ndGgsIGxpc3Qgb2YgZmlsZV9ibG9ja19pZHMKKyAgIGZpbGVfYmxvY2tfaWQg
LSZndDsgZGF0YQorPC9wcmU+CitXZSBtaWdodCB3YW50IHRvIHByZWZpeCA8Y29kZT5maWxlbmFt
ZTwvY29kZT4ga2V5cyB3aXRoIG9uZSBsZXR0ZXIgKHNheSAnLycpIGFuZCB0aGUKKzxjb2RlPmZp
bGVfYmxvY2tfaWQ8L2NvZGU+IGtleXMgd2l0aCBhIGRpZmZlcmVudCBsZXR0ZXIgKHNheSAnMCcp
IHNvIHRoYXQgc2NhbnMKK292ZXIganVzdCB0aGUgbWV0YWRhdGEgZG8gbm90IGZvcmNlIHVzIHRv
IGZldGNoIGFuZCBjYWNoZSBidWxreSBmaWxlCitjb250ZW50cy4KKzxwPgorPGgyPkZpbHRlcnM8
L2gyPgorPHA+CitCZWNhdXNlIG9mIHRoZSB3YXkgPGNvZGU+bGV2ZWxkYjwvY29kZT4gZGF0YSBp
cyBvcmdhbml6ZWQgb24gZGlzaywKK2Egc2luZ2xlIDxjb2RlPkdldCgpPC9jb2RlPiBjYWxsIG1h
eSBpbnZvbHZlIG11bHRpcGxlIHJlYWRzIGZyb20gZGlzay4KK1RoZSBvcHRpb25hbCA8Y29kZT5G
aWx0ZXJQb2xpY3k8L2NvZGU+IG1lY2hhbmlzbSBjYW4gYmUgdXNlZCB0byByZWR1Y2UKK3RoZSBu
dW1iZXIgb2YgZGlzayByZWFkcyBzdWJzdGFudGlhbGx5LgorPHByZT4KKyAgIGxldmVsZGI6Ok9w
dGlvbnMgb3B0aW9uczsKKyAgIG9wdGlvbnMuZmlsdGVyX3BvbGljeSA9IE5ld0Jsb29tRmlsdGVy
UG9saWN5KDEwKTsKKyAgIGxldmVsZGI6OkRCKiBkYjsKKyAgIGxldmVsZGI6OkRCOjpPcGVuKG9w
dGlvbnMsICIvdG1wL3Rlc3RkYiIsICZhbXA7ZGIpOworICAgLi4uIHVzZSB0aGUgZGF0YWJhc2Ug
Li4uCisgICBkZWxldGUgZGI7CisgICBkZWxldGUgb3B0aW9ucy5maWx0ZXJfcG9saWN5OworPC9w
cmU+CitUaGUgcHJlY2VkaW5nIGNvZGUgYXNzb2NpYXRlcyBhCis8YSBocmVmPSJodHRwOi8vZW4u
d2lraXBlZGlhLm9yZy93aWtpL0Jsb29tX2ZpbHRlciI+Qmxvb20gZmlsdGVyPC9hPgorYmFzZWQg
ZmlsdGVyaW5nIHBvbGljeSB3aXRoIHRoZSBkYXRhYmFzZS4gIEJsb29tIGZpbHRlciBiYXNlZAor
ZmlsdGVyaW5nIHJlbGllcyBvbiBrZWVwaW5nIHNvbWUgbnVtYmVyIG9mIGJpdHMgb2YgZGF0YSBp
biBtZW1vcnkgcGVyCitrZXkgKGluIHRoaXMgY2FzZSAxMCBiaXRzIHBlciBrZXkgc2luY2UgdGhh
dCBpcyB0aGUgYXJndW1lbnQgd2UgcGFzc2VkCit0byBOZXdCbG9vbUZpbHRlclBvbGljeSkuICBU
aGlzIGZpbHRlciB3aWxsIHJlZHVjZSB0aGUgbnVtYmVyIG9mIHVubmVjZXNzYXJ5CitkaXNrIHJl
YWRzIG5lZWRlZCBmb3IgPGNvZGU+R2V0KCk8L2NvZGU+IGNhbGxzIGJ5IGEgZmFjdG9yIG9mCith
cHByb3hpbWF0ZWx5IGEgMTAwLiAgSW5jcmVhc2luZyB0aGUgYml0cyBwZXIga2V5IHdpbGwgbGVh
ZCB0byBhCitsYXJnZXIgcmVkdWN0aW9uIGF0IHRoZSBjb3N0IG9mIG1vcmUgbWVtb3J5IHVzYWdl
LiAgV2UgcmVjb21tZW5kIHRoYXQKK2FwcGxpY2F0aW9ucyB3aG9zZSB3b3JraW5nIHNldCBkb2Vz
IG5vdCBmaXQgaW4gbWVtb3J5IGFuZCB0aGF0IGRvIGEKK2xvdCBvZiByYW5kb20gcmVhZHMgc2V0
IGEgZmlsdGVyIHBvbGljeS4KKzxwPgorSWYgeW91IGFyZSB1c2luZyBhIGN1c3RvbSBjb21wYXJh
dG9yLCB5b3Ugc2hvdWxkIGVuc3VyZSB0aGF0IHRoZSBmaWx0ZXIKK3BvbGljeSB5b3UgYXJlIHVz
aW5nIGlzIGNvbXBhdGlibGUgd2l0aCB5b3VyIGNvbXBhcmF0b3IuICBGb3IgZXhhbXBsZSwKK2Nv
bnNpZGVyIGEgY29tcGFyYXRvciB0aGF0IGlnbm9yZXMgdHJhaWxpbmcgc3BhY2VzIHdoZW4gY29t
cGFyaW5nIGtleXMuCis8Y29kZT5OZXdCbG9vbUZpbHRlclBvbGljeTwvY29kZT4gbXVzdCBub3Qg
YmUgdXNlZCB3aXRoIHN1Y2ggYSBjb21wYXJhdG9yLgorSW5zdGVhZCwgdGhlIGFwcGxpY2F0aW9u
IHNob3VsZCBwcm92aWRlIGEgY3VzdG9tIGZpbHRlciBwb2xpY3kgdGhhdAorYWxzbyBpZ25vcmVz
IHRyYWlsaW5nIHNwYWNlcy4gIEZvciBleGFtcGxlOgorPHByZT4KKyAgY2xhc3MgQ3VzdG9tRmls
dGVyUG9saWN5IDogcHVibGljIGxldmVsZGI6OkZpbHRlclBvbGljeSB7CisgICBwcml2YXRlOgor
ICAgIEZpbHRlclBvbGljeSogYnVpbHRpbl9wb2xpY3lfOworICAgcHVibGljOgorICAgIEN1c3Rv
bUZpbHRlclBvbGljeSgpIDogYnVpbHRpbl9wb2xpY3lfKE5ld0Jsb29tRmlsdGVyUG9saWN5KDEw
KSkgeyB9CisgICAgfkN1c3RvbUZpbHRlclBvbGljeSgpIHsgZGVsZXRlIGJ1aWx0aW5fcG9saWN5
XzsgfQorCisgICAgY29uc3QgY2hhciogTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJJZ25vcmVUcmFp
bGluZ1NwYWNlc0ZpbHRlciI7IH0KKworICAgIHZvaWQgQ3JlYXRlRmlsdGVyKGNvbnN0IFNsaWNl
KiBrZXlzLCBpbnQgbiwgc3RkOjpzdHJpbmcqIGRzdCkgY29uc3QgeworICAgICAgLy8gVXNlIGJ1
aWx0aW4gYmxvb20gZmlsdGVyIGNvZGUgYWZ0ZXIgcmVtb3ZpbmcgdHJhaWxpbmcgc3BhY2VzCisg
ICAgICBzdGQ6OnZlY3RvciZsdDtTbGljZSZndDsgdHJpbW1lZChuKTsKKyAgICAgIGZvciAoaW50
IGkgPSAwOyBpICZsdDsgbjsgaSsrKSB7CisgICAgICAgIHRyaW1tZWRbaV0gPSBSZW1vdmVUcmFp
bGluZ1NwYWNlcyhrZXlzW2ldKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBidWlsdGluX3BvbGlj
eV8tJmd0O0NyZWF0ZUZpbHRlcigmYW1wO3RyaW1tZWRbaV0sIG4sIGRzdCk7CisgICAgfQorCisg
ICAgYm9vbCBLZXlNYXlNYXRjaChjb25zdCBTbGljZSYga2V5LCBjb25zdCBTbGljZSYgZmlsdGVy
KSBjb25zdCB7CisgICAgICAvLyBVc2UgYnVpbHRpbiBibG9vbSBmaWx0ZXIgY29kZSBhZnRlciBy
ZW1vdmluZyB0cmFpbGluZyBzcGFjZXMKKyAgICAgIHJldHVybiBidWlsdGluX3BvbGljeV8tJmd0
O0tleU1heU1hdGNoKFJlbW92ZVRyYWlsaW5nU3BhY2VzKGtleSksIGZpbHRlcik7CisgICAgfQor
ICB9OworPC9wcmU+Cis8cD4KK0FkdmFuY2VkIGFwcGxpY2F0aW9ucyBtYXkgcHJvdmlkZSBhIGZp
bHRlciBwb2xpY3kgdGhhdCBkb2VzIG5vdCB1c2UKK2EgYmxvb20gZmlsdGVyIGJ1dCB1c2VzIHNv
bWUgb3RoZXIgbWVjaGFuaXNtIGZvciBzdW1tYXJpemluZyBhIHNldAorb2Yga2V5cy4gIFNlZSA8
Y29kZT5sZXZlbGRiL2ZpbHRlcl9wb2xpY3kuaDwvY29kZT4gZm9yIGRldGFpbC4KKzxwPgorPGgx
PkNoZWNrc3VtczwvaDE+Cis8cD4KKzxjb2RlPmxldmVsZGI8L2NvZGU+IGFzc29jaWF0ZXMgY2hl
Y2tzdW1zIHdpdGggYWxsIGRhdGEgaXQgc3RvcmVzIGluIHRoZSBmaWxlIHN5c3RlbS4KK1RoZXJl
IGFyZSB0d28gc2VwYXJhdGUgY29udHJvbHMgcHJvdmlkZWQgb3ZlciBob3cgYWdncmVzc2l2ZWx5
IHRoZXNlCitjaGVja3N1bXMgYXJlIHZlcmlmaWVkOgorPHA+Cis8dWw+Cis8bGk+IDxjb2RlPlJl
YWRPcHRpb25zOjp2ZXJpZnlfY2hlY2tzdW1zPC9jb2RlPiBtYXkgYmUgc2V0IHRvIHRydWUgdG8g
Zm9yY2UKKyAgY2hlY2tzdW0gdmVyaWZpY2F0aW9uIG9mIGFsbCBkYXRhIHRoYXQgaXMgcmVhZCBm
cm9tIHRoZSBmaWxlIHN5c3RlbSBvbgorICBiZWhhbGYgb2YgYSBwYXJ0aWN1bGFyIHJlYWQuICBC
eSBkZWZhdWx0LCBubyBzdWNoIHZlcmlmaWNhdGlvbiBpcworICBkb25lLgorPHA+Cis8bGk+IDxj
b2RlPk9wdGlvbnM6OnBhcmFub2lkX2NoZWNrczwvY29kZT4gbWF5IGJlIHNldCB0byB0cnVlIGJl
Zm9yZSBvcGVuaW5nIGEKKyAgZGF0YWJhc2UgdG8gbWFrZSB0aGUgZGF0YWJhc2UgaW1wbGVtZW50
YXRpb24gcmFpc2UgYW4gZXJyb3IgYXMgc29vbiBhcworICBpdCBkZXRlY3RzIGFuIGludGVybmFs
IGNvcnJ1cHRpb24uICBEZXBlbmRpbmcgb24gd2hpY2ggcG9ydGlvbiBvZiB0aGUKKyAgZGF0YWJh
c2UgaGFzIGJlZW4gY29ycnVwdGVkLCB0aGUgZXJyb3IgbWF5IGJlIHJhaXNlZCB3aGVuIHRoZSBk
YXRhYmFzZQorICBpcyBvcGVuZWQsIG9yIGxhdGVyIGJ5IGFub3RoZXIgZGF0YWJhc2Ugb3BlcmF0
aW9uLiAgQnkgZGVmYXVsdCwKKyAgcGFyYW5vaWQgY2hlY2tpbmcgaXMgb2ZmIHNvIHRoYXQgdGhl
IGRhdGFiYXNlIGNhbiBiZSB1c2VkIGV2ZW4gaWYKKyAgcGFydHMgb2YgaXRzIHBlcnNpc3RlbnQg
c3RvcmFnZSBoYXZlIGJlZW4gY29ycnVwdGVkLgorPHA+CisgIElmIGEgZGF0YWJhc2UgaXMgY29y
cnVwdGVkIChwZXJoYXBzIGl0IGNhbm5vdCBiZSBvcGVuZWQgd2hlbgorICBwYXJhbm9pZCBjaGVj
a2luZyBpcyB0dXJuZWQgb24pLCB0aGUgPGNvZGU+bGV2ZWxkYjo6UmVwYWlyREI8L2NvZGU+IGZ1
bmN0aW9uCisgIG1heSBiZSB1c2VkIHRvIHJlY292ZXIgYXMgbXVjaCBvZiB0aGUgZGF0YSBhcyBw
b3NzaWJsZQorPHA+Cis8L3VsPgorPGgxPkFwcHJveGltYXRlIFNpemVzPC9oMT4KKzxwPgorVGhl
IDxjb2RlPkdldEFwcHJveGltYXRlU2l6ZXM8L2NvZGU+IG1ldGhvZCBjYW4gdXNlZCB0byBnZXQg
dGhlIGFwcHJveGltYXRlCitudW1iZXIgb2YgYnl0ZXMgb2YgZmlsZSBzeXN0ZW0gc3BhY2UgdXNl
ZCBieSBvbmUgb3IgbW9yZSBrZXkgcmFuZ2VzLgorPHA+Cis8cHJlPgorICAgbGV2ZWxkYjo6UmFu
Z2UgcmFuZ2VzWzJdOworICAgcmFuZ2VzWzBdID0gbGV2ZWxkYjo6UmFuZ2UoImEiLCAiYyIpOwor
ICAgcmFuZ2VzWzFdID0gbGV2ZWxkYjo6UmFuZ2UoIngiLCAieiIpOworICAgdWludDY0X3Qgc2l6
ZXNbMl07CisgICBsZXZlbGRiOjpTdGF0dXMgcyA9IGRiLSZndDtHZXRBcHByb3hpbWF0ZVNpemVz
KHJhbmdlcywgMiwgc2l6ZXMpOworPC9wcmU+CitUaGUgcHJlY2VkaW5nIGNhbGwgd2lsbCBzZXQg
PGNvZGU+c2l6ZXNbMF08L2NvZGU+IHRvIHRoZSBhcHByb3hpbWF0ZSBudW1iZXIgb2YKK2J5dGVz
IG9mIGZpbGUgc3lzdGVtIHNwYWNlIHVzZWQgYnkgdGhlIGtleSByYW5nZSA8Y29kZT5bYS4uYyk8
L2NvZGU+IGFuZAorPGNvZGU+c2l6ZXNbMV08L2NvZGU+IHRvIHRoZSBhcHByb3hpbWF0ZSBudW1i
ZXIgb2YgYnl0ZXMgdXNlZCBieSB0aGUga2V5IHJhbmdlCis8Y29kZT5beC4ueik8L2NvZGU+Lgor
PHA+Cis8aDE+RW52aXJvbm1lbnQ8L2gxPgorPHA+CitBbGwgZmlsZSBvcGVyYXRpb25zIChhbmQg
b3RoZXIgb3BlcmF0aW5nIHN5c3RlbSBjYWxscykgaXNzdWVkIGJ5IHRoZQorPGNvZGU+bGV2ZWxk
YjwvY29kZT4gaW1wbGVtZW50YXRpb24gYXJlIHJvdXRlZCB0aHJvdWdoIGEgPGNvZGU+bGV2ZWxk
Yjo6RW52PC9jb2RlPiBvYmplY3QuCitTb3BoaXN0aWNhdGVkIGNsaWVudHMgbWF5IHdpc2ggdG8g
cHJvdmlkZSB0aGVpciBvd24gPGNvZGU+RW52PC9jb2RlPgoraW1wbGVtZW50YXRpb24gdG8gZ2V0
IGJldHRlciBjb250cm9sLiAgRm9yIGV4YW1wbGUsIGFuIGFwcGxpY2F0aW9uIG1heQoraW50cm9k
dWNlIGFydGlmaWNpYWwgZGVsYXlzIGluIHRoZSBmaWxlIElPIHBhdGhzIHRvIGxpbWl0IHRoZSBp
bXBhY3QKK29mIDxjb2RlPmxldmVsZGI8L2NvZGU+IG9uIG90aGVyIGFjdGl2aXRpZXMgaW4gdGhl
IHN5c3RlbS4KKzxwPgorPHByZT4KKyAgY2xhc3MgU2xvd0VudiA6IHB1YmxpYyBsZXZlbGRiOjpF
bnYgeworICAgIC4uIGltcGxlbWVudGF0aW9uIG9mIHRoZSBFbnYgaW50ZXJmYWNlIC4uLgorICB9
OworCisgIFNsb3dFbnYgZW52OworICBsZXZlbGRiOjpPcHRpb25zIG9wdGlvbnM7CisgIG9wdGlv
bnMuZW52ID0gJmFtcDtlbnY7CisgIFN0YXR1cyBzID0gbGV2ZWxkYjo6REI6Ok9wZW4ob3B0aW9u
cywgLi4uKTsKKzwvcHJlPgorPGgxPlBvcnRpbmc8L2gxPgorPHA+Cis8Y29kZT5sZXZlbGRiPC9j
b2RlPiBtYXkgYmUgcG9ydGVkIHRvIGEgbmV3IHBsYXRmb3JtIGJ5IHByb3ZpZGluZyBwbGF0Zm9y
bQorc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIG9mIHRoZSB0eXBlcy9tZXRob2RzL2Z1bmN0aW9u
cyBleHBvcnRlZCBieQorPGNvZGU+bGV2ZWxkYi9wb3J0L3BvcnQuaDwvY29kZT4uICBTZWUgPGNv
ZGU+bGV2ZWxkYi9wb3J0L3BvcnRfZXhhbXBsZS5oPC9jb2RlPiBmb3IgbW9yZQorZGV0YWlscy4K
KzxwPgorSW4gYWRkaXRpb24sIHRoZSBuZXcgcGxhdGZvcm0gbWF5IG5lZWQgYSBuZXcgZGVmYXVs
dCA8Y29kZT5sZXZlbGRiOjpFbnY8L2NvZGU+CitpbXBsZW1lbnRhdGlvbi4gIFNlZSA8Y29kZT5s
ZXZlbGRiL3V0aWwvZW52X3Bvc2l4Lmg8L2NvZGU+IGZvciBhbiBleGFtcGxlLgorCis8aDE+T3Ro
ZXIgSW5mb3JtYXRpb248L2gxPgorCis8cD4KK0RldGFpbHMgYWJvdXQgdGhlIDxjb2RlPmxldmVs
ZGI8L2NvZGU+IGltcGxlbWVudGF0aW9uIG1heSBiZSBmb3VuZCBpbgordGhlIGZvbGxvd2luZyBk
b2N1bWVudHM6Cis8dWw+Cis8bGk+IDxhIGhyZWY9ImltcGwuaHRtbCI+SW1wbGVtZW50YXRpb24g
bm90ZXM8L2E+Cis8bGk+IDxhIGhyZWY9InRhYmxlX2Zvcm1hdC50eHQiPkZvcm1hdCBvZiBhbiBp
bW11dGFibGUgVGFibGUgZmlsZTwvYT4KKzxsaT4gPGEgaHJlZj0ibG9nX2Zvcm1hdC50eHQiPkZv
cm1hdCBvZiBhIGxvZyBmaWxlPC9hPgorPC91bD4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kb2MvbG9nX2Zvcm1hdC50eHQgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RvYy9sb2dfZm9ybWF0LnR4dApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MjI4
ZjYyNGRlNDM0N2MxMTRiODc1MjBjMTJhMWFlMzk0MjVkNDExCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kb2MvbG9nX2Zvcm1hdC50eHQKQEAgLTAsMCArMSw3
NSBAQAorVGhlIGxvZyBmaWxlIGNvbnRlbnRzIGFyZSBhIHNlcXVlbmNlIG9mIDMyS0IgYmxvY2tz
LiAgVGhlIG9ubHkKK2V4Y2VwdGlvbiBpcyB0aGF0IHRoZSB0YWlsIG9mIHRoZSBmaWxlIG1heSBj
b250YWluIGEgcGFydGlhbCBibG9jay4KKworRWFjaCBibG9jayBjb25zaXN0cyBvZiBhIHNlcXVl
bmNlIG9mIHJlY29yZHM6CisgICBibG9jayA6PSByZWNvcmQqIHRyYWlsZXI/CisgICByZWNvcmQg
Oj0KKwljaGVja3N1bTogdWludDMyCS8vIGNyYzMyYyBvZiB0eXBlIGFuZCBkYXRhW10gOyBsaXR0
bGUtZW5kaWFuCisJbGVuZ3RoOiB1aW50MTYJCS8vIGxpdHRsZS1lbmRpYW4KKwl0eXBlOiB1aW50
OAkJLy8gT25lIG9mIEZVTEwsIEZJUlNULCBNSURETEUsIExBU1QKKwlkYXRhOiB1aW50OFtsZW5n
dGhdCisKK0EgcmVjb3JkIG5ldmVyIHN0YXJ0cyB3aXRoaW4gdGhlIGxhc3Qgc2l4IGJ5dGVzIG9m
IGEgYmxvY2sgKHNpbmNlIGl0Cit3b24ndCBmaXQpLiAgQW55IGxlZnRvdmVyIGJ5dGVzIGhlcmUg
Zm9ybSB0aGUgdHJhaWxlciwgd2hpY2ggbXVzdAorY29uc2lzdCBlbnRpcmVseSBvZiB6ZXJvIGJ5
dGVzIGFuZCBtdXN0IGJlIHNraXBwZWQgYnkgcmVhZGVycy4gIAorCitBc2lkZTogaWYgZXhhY3Rs
eSBzZXZlbiBieXRlcyBhcmUgbGVmdCBpbiB0aGUgY3VycmVudCBibG9jaywgYW5kIGEgbmV3Citu
b24temVybyBsZW5ndGggcmVjb3JkIGlzIGFkZGVkLCB0aGUgd3JpdGVyIG11c3QgZW1pdCBhIEZJ
UlNUIHJlY29yZAorKHdoaWNoIGNvbnRhaW5zIHplcm8gYnl0ZXMgb2YgdXNlciBkYXRhKSB0byBm
aWxsIHVwIHRoZSB0cmFpbGluZyBzZXZlbgorYnl0ZXMgb2YgdGhlIGJsb2NrIGFuZCB0aGVuIGVt
aXQgYWxsIG9mIHRoZSB1c2VyIGRhdGEgaW4gc3Vic2VxdWVudAorYmxvY2tzLgorCitNb3JlIHR5
cGVzIG1heSBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlLiAgU29tZSBSZWFkZXJzIG1heSBza2lwIHJl
Y29yZAordHlwZXMgdGhleSBkbyBub3QgdW5kZXJzdGFuZCwgb3RoZXJzIG1heSByZXBvcnQgdGhh
dCBzb21lIGRhdGEgd2FzCitza2lwcGVkLgorCitGVUxMID09IDEKK0ZJUlNUID09IDIKK01JRERM
RSA9PSAzCitMQVNUID09IDQKKworVGhlIEZVTEwgcmVjb3JkIGNvbnRhaW5zIHRoZSBjb250ZW50
cyBvZiBhbiBlbnRpcmUgdXNlciByZWNvcmQuCisKK0ZJUlNULCBNSURETEUsIExBU1QgYXJlIHR5
cGVzIHVzZWQgZm9yIHVzZXIgcmVjb3JkcyB0aGF0IGhhdmUgYmVlbgorc3BsaXQgaW50byBtdWx0
aXBsZSBmcmFnbWVudHMgKHR5cGljYWxseSBiZWNhdXNlIG9mIGJsb2NrIGJvdW5kYXJpZXMpLgor
RklSU1QgaXMgdGhlIHR5cGUgb2YgdGhlIGZpcnN0IGZyYWdtZW50IG9mIGEgdXNlciByZWNvcmQs
IExBU1QgaXMgdGhlCit0eXBlIG9mIHRoZSBsYXN0IGZyYWdtZW50IG9mIGEgdXNlciByZWNvcmQs
IGFuZCBNSUQgaXMgdGhlIHR5cGUgb2YgYWxsCitpbnRlcmlvciBmcmFnbWVudHMgb2YgYSB1c2Vy
IHJlY29yZC4KKworRXhhbXBsZTogY29uc2lkZXIgYSBzZXF1ZW5jZSBvZiB1c2VyIHJlY29yZHM6
CisgICBBOiBsZW5ndGggMTAwMAorICAgQjogbGVuZ3RoIDk3MjcwCisgICBDOiBsZW5ndGggODAw
MAorQSB3aWxsIGJlIHN0b3JlZCBhcyBhIEZVTEwgcmVjb3JkIGluIHRoZSBmaXJzdCBibG9jay4K
KworQiB3aWxsIGJlIHNwbGl0IGludG8gdGhyZWUgZnJhZ21lbnRzOiBmaXJzdCBmcmFnbWVudCBv
Y2N1cGllcyB0aGUgcmVzdAorb2YgdGhlIGZpcnN0IGJsb2NrLCBzZWNvbmQgZnJhZ21lbnQgb2Nj
dXBpZXMgdGhlIGVudGlyZXR5IG9mIHRoZQorc2Vjb25kIGJsb2NrLCBhbmQgdGhlIHRoaXJkIGZy
YWdtZW50IG9jY3VwaWVzIGEgcHJlZml4IG9mIHRoZSB0aGlyZAorYmxvY2suICBUaGlzIHdpbGwg
bGVhdmUgc2l4IGJ5dGVzIGZyZWUgaW4gdGhlIHRoaXJkIGJsb2NrLCB3aGljaCB3aWxsCitiZSBs
ZWZ0IGVtcHR5IGFzIHRoZSB0cmFpbGVyLgorCitDIHdpbGwgYmUgc3RvcmVkIGFzIGEgRlVMTCBy
ZWNvcmQgaW4gdGhlIGZvdXJ0aCBibG9jay4KKworPT09PT09PT09PT09PT09PT09PQorCitTb21l
IGJlbmVmaXRzIG92ZXIgdGhlIHJlY29yZGlvIGZvcm1hdDoKKworKDEpIFdlIGRvIG5vdCBuZWVk
IGFueSBoZXVyaXN0aWNzIGZvciByZXN5bmNpbmcgLSBqdXN0IGdvIHRvIG5leHQKK2Jsb2NrIGJv
dW5kYXJ5IGFuZCBzY2FuLiAgSWYgdGhlcmUgaXMgYSBjb3JydXB0aW9uLCBza2lwIHRvIHRoZSBu
ZXh0CitibG9jay4gIEFzIGEgc2lkZS1iZW5lZml0LCB3ZSBkbyBub3QgZ2V0IGNvbmZ1c2VkIHdo
ZW4gcGFydCBvZiB0aGUKK2NvbnRlbnRzIG9mIG9uZSBsb2cgZmlsZSBhcmUgZW1iZWRkZWQgYXMg
YSByZWNvcmQgaW5zaWRlIGFub3RoZXIgbG9nCitmaWxlLgorCisoMikgU3BsaXR0aW5nIGF0IGFw
cHJveGltYXRlIGJvdW5kYXJpZXMgKGUuZy4sIGZvciBtYXByZWR1Y2UpIGlzCitzaW1wbGU6IGZp
bmQgdGhlIG5leHQgYmxvY2sgYm91bmRhcnkgYW5kIHNraXAgcmVjb3JkcyB1bnRpbCB3ZQoraGl0
IGEgRlVMTCBvciBGSVJTVCByZWNvcmQuCisKKygzKSBXZSBkbyBub3QgbmVlZCBleHRyYSBidWZm
ZXJpbmcgZm9yIGxhcmdlIHJlY29yZHMuCisKK1NvbWUgZG93bnNpZGVzIGNvbXBhcmVkIHRvIHJl
Y29yZGlvIGZvcm1hdDoKKworKDEpIE5vIHBhY2tpbmcgb2YgdGlueSByZWNvcmRzLiAgVGhpcyBj
b3VsZCBiZSBmaXhlZCBieSBhZGRpbmcgYSBuZXcKK3JlY29yZCB0eXBlLCBzbyBpdCBpcyBhIHNo
b3J0Y29taW5nIG9mIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLAorbm90IG5lY2Vzc2FyaWx5
IHRoZSBmb3JtYXQuCisKKygyKSBObyBjb21wcmVzc2lvbi4gIEFnYWluLCB0aGlzIGNvdWxkIGJl
IGZpeGVkIGJ5IGFkZGluZyBuZXcgcmVjb3JkIHR5cGVzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvbGV2ZWxkYi9kb2MvdGFibGVfZm9ybWF0LnR4dCBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xldmVsZGIvZG9jL3RhYmxlX2Zvcm1hdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2E4ZjliNDQ2MGFkODVk
OWUwOWYxNGE5NTllZDQ3YmQyODEyZWRiNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xldmVsZGIvZG9jL3RhYmxlX2Zvcm1hdC50eHQKQEAgLTAsMCArMSwxMDQgQEAKK0Zp
bGUgZm9ybWF0Cis9PT09PT09PT09PQorCisgIDxiZWdpbm5pbmdfb2ZfZmlsZT4KKyAgW2RhdGEg
YmxvY2sgMV0KKyAgW2RhdGEgYmxvY2sgMl0KKyAgLi4uCisgIFtkYXRhIGJsb2NrIE5dCisgIFtt
ZXRhIGJsb2NrIDFdCisgIC4uLgorICBbbWV0YSBibG9jayBLXQorICBbbWV0YWluZGV4IGJsb2Nr
XQorICBbaW5kZXggYmxvY2tdCisgIFtGb290ZXJdICAgICAgICAoZml4ZWQgc2l6ZTsgc3RhcnRz
IGF0IGZpbGVfc2l6ZSAtIHNpemVvZihGb290ZXIpKQorICA8ZW5kX29mX2ZpbGU+CisKK1RoZSBm
aWxlIGNvbnRhaW5zIGludGVybmFsIHBvaW50ZXJzLiAgRWFjaCBzdWNoIHBvaW50ZXIgaXMgY2Fs
bGVkCithIEJsb2NrSGFuZGxlIGFuZCBjb250YWlucyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9u
OgorICBvZmZzZXQ6CSAgICB2YXJpbnQ2NAorICBzaXplOgkJICAgIHZhcmludDY0CitTZWUgaHR0
cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcHJvdG9jb2wtYnVmZmVycy9kb2NzL2VuY29kaW5n
I3ZhcmludHMKK2ZvciBhbiBleHBsYW5hdGlvbiBvZiB2YXJpbnQ2NCBmb3JtYXQuCisKKygxKSBU
aGUgc2VxdWVuY2Ugb2Yga2V5L3ZhbHVlIHBhaXJzIGluIHRoZSBmaWxlIGFyZSBzdG9yZWQgaW4g
c29ydGVkCitvcmRlciBhbmQgcGFydGl0aW9uZWQgaW50byBhIHNlcXVlbmNlIG9mIGRhdGEgYmxv
Y2tzLiAgVGhlc2UgYmxvY2tzCitjb21lIG9uZSBhZnRlciBhbm90aGVyIGF0IHRoZSBiZWdpbm5p
bmcgb2YgdGhlIGZpbGUuICBFYWNoIGRhdGEgYmxvY2sKK2lzIGZvcm1hdHRlZCBhY2NvcmRpbmcg
dG8gdGhlIGNvZGUgaW4gYmxvY2tfYnVpbGRlci5jYywgYW5kIHRoZW4KK29wdGlvbmFsbHkgY29t
cHJlc3NlZC4KKworKDIpIEFmdGVyIHRoZSBkYXRhIGJsb2NrcyB3ZSBzdG9yZSBhIGJ1bmNoIG9m
IG1ldGEgYmxvY2tzLiAgVGhlCitzdXBwb3J0ZWQgbWV0YSBibG9jayB0eXBlcyBhcmUgZGVzY3Jp
YmVkIGJlbG93LiAgTW9yZSBtZXRhIGJsb2NrIHR5cGVzCittYXkgYmUgYWRkZWQgaW4gdGhlIGZ1
dHVyZS4gIEVhY2ggbWV0YSBibG9jayBpcyBhZ2FpbiBmb3JtYXR0ZWQgdXNpbmcKK2Jsb2NrX2J1
aWxkZXIuY2MgYW5kIHRoZW4gb3B0aW9uYWxseSBjb21wcmVzc2VkLgorCisoMykgQSAibWV0YWlu
ZGV4IiBibG9jay4gIEl0IGNvbnRhaW5zIG9uZSBlbnRyeSBmb3IgZXZlcnkgb3RoZXIgbWV0YQor
YmxvY2sgd2hlcmUgdGhlIGtleSBpcyB0aGUgbmFtZSBvZiB0aGUgbWV0YSBibG9jayBhbmQgdGhl
IHZhbHVlIGlzIGEKK0Jsb2NrSGFuZGxlIHBvaW50aW5nIHRvIHRoYXQgbWV0YSBibG9jay4KKwor
KDQpIEFuICJpbmRleCIgYmxvY2suICBUaGlzIGJsb2NrIGNvbnRhaW5zIG9uZSBlbnRyeSBwZXIg
ZGF0YSBibG9jaywKK3doZXJlIHRoZSBrZXkgaXMgYSBzdHJpbmcgPj0gbGFzdCBrZXkgaW4gdGhh
dCBkYXRhIGJsb2NrIGFuZCBiZWZvcmUKK3RoZSBmaXJzdCBrZXkgaW4gdGhlIHN1Y2Nlc3NpdmUg
ZGF0YSBibG9jay4gIFRoZSB2YWx1ZSBpcyB0aGUKK0Jsb2NrSGFuZGxlIGZvciB0aGUgZGF0YSBi
bG9jay4KKworKDYpIEF0IHRoZSB2ZXJ5IGVuZCBvZiB0aGUgZmlsZSBpcyBhIGZpeGVkIGxlbmd0
aCBmb290ZXIgdGhhdCBjb250YWlucwordGhlIEJsb2NrSGFuZGxlIG9mIHRoZSBtZXRhaW5kZXgg
YW5kIGluZGV4IGJsb2NrcyBhcyB3ZWxsIGFzIGEgbWFnaWMgbnVtYmVyLgorICAgICAgIG1ldGFp
bmRleF9oYW5kbGU6IGNoYXJbcF07ICAgIC8vIEJsb2NrIGhhbmRsZSBmb3IgbWV0YWluZGV4Cisg
ICAgICAgaW5kZXhfaGFuZGxlOiAgICAgY2hhcltxXTsgICAgLy8gQmxvY2sgaGFuZGxlIGZvciBp
bmRleAorICAgICAgIHBhZGRpbmc6ICAgICAgICAgIGNoYXJbNDAtcC1xXTsgLy8gemVyb2VkIGJ5
dGVzIHRvIG1ha2UgZml4ZWQgbGVuZ3RoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyAoNDA9PTIqQmxvY2tIYW5kbGU6OmtNYXhFbmNvZGVkTGVuZ3RoKQorICAgICAg
IG1hZ2ljOiAgICAgICAgICAgIGZpeGVkNjQ7ICAgIC8vID09IDB4ZGI0Nzc1MjQ4YjgwZmI1NyAo
bGl0dGxlLWVuZGlhbikKKworImZpbHRlciIgTWV0YSBCbG9jaworLS0tLS0tLS0tLS0tLS0tLS0t
LQorCitJZiBhICJGaWx0ZXJQb2xpY3kiIHdhcyBzcGVjaWZpZWQgd2hlbiB0aGUgZGF0YWJhc2Ug
d2FzIG9wZW5lZCwgYQorZmlsdGVyIGJsb2NrIGlzIHN0b3JlZCBpbiBlYWNoIHRhYmxlLiAgVGhl
ICJtZXRhaW5kZXgiIGJsb2NrIGNvbnRhaW5zCithbiBlbnRyeSB0aGF0IG1hcHMgZnJvbSAiZmls
dGVyLjxOPiIgdG8gdGhlIEJsb2NrSGFuZGxlIGZvciB0aGUgZmlsdGVyCitibG9jayB3aGVyZSAi
PE4+IiBpcyB0aGUgc3RyaW5nIHJldHVybmVkIGJ5IHRoZSBmaWx0ZXIgcG9saWN5J3MKKyJOYW1l
KCkiIG1ldGhvZC4KKworVGhlIGZpbHRlciBibG9jayBzdG9yZXMgYSBzZXF1ZW5jZSBvZiBmaWx0
ZXJzLCB3aGVyZSBmaWx0ZXIgaSBjb250YWlucwordGhlIG91dHB1dCBvZiBGaWx0ZXJQb2xpY3k6
OkNyZWF0ZUZpbHRlcigpIG9uIGFsbCBrZXlzIHRoYXQgYXJlIHN0b3JlZAoraW4gYSBibG9jayB3
aG9zZSBmaWxlIG9mZnNldCBmYWxscyB3aXRoaW4gdGhlIHJhbmdlCisKKyAgICBbIGkqYmFzZSAu
Li4gKGkrMSkqYmFzZS0xIF0KKworQ3VycmVudGx5LCAiYmFzZSIgaXMgMktCLiAgU28gZm9yIGV4
YW1wbGUsIGlmIGJsb2NrcyBYIGFuZCBZIHN0YXJ0IGluCit0aGUgcmFuZ2UgWyAwS0IgLi4gMktC
LTEgXSwgYWxsIG9mIHRoZSBrZXlzIGluIFggYW5kIFkgd2lsbCBiZQorY29udmVydGVkIHRvIGEg
ZmlsdGVyIGJ5IGNhbGxpbmcgRmlsdGVyUG9saWN5OjpDcmVhdGVGaWx0ZXIoKSwgYW5kIHRoZQor
cmVzdWx0aW5nIGZpbHRlciB3aWxsIGJlIHN0b3JlZCBhcyB0aGUgZmlyc3QgZmlsdGVyIGluIHRo
ZSBmaWx0ZXIKK2Jsb2NrLgorCitUaGUgZmlsdGVyIGJsb2NrIGlzIGZvcm1hdHRlZCBhcyBmb2xs
b3dzOgorCisgICAgIFtmaWx0ZXIgMF0KKyAgICAgW2ZpbHRlciAxXQorICAgICBbZmlsdGVyIDJd
CisgICAgIC4uLgorICAgICBbZmlsdGVyIE4tMV0KKworICAgICBbb2Zmc2V0IG9mIGZpbHRlciAw
XSAgICAgICAgICAgICAgICAgIDogNCBieXRlcworICAgICBbb2Zmc2V0IG9mIGZpbHRlciAxXSAg
ICAgICAgICAgICAgICAgIDogNCBieXRlcworICAgICBbb2Zmc2V0IG9mIGZpbHRlciAyXSAgICAg
ICAgICAgICAgICAgIDogNCBieXRlcworICAgICAuLi4KKyAgICAgW29mZnNldCBvZiBmaWx0ZXIg
Ti0xXSAgICAgICAgICAgICAgICA6IDQgYnl0ZXMKKworICAgICBbb2Zmc2V0IG9mIGJlZ2lubmlu
ZyBvZiBvZmZzZXQgYXJyYXldIDogNCBieXRlcworICAgICBsZyhiYXNlKSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDogMSBieXRlCisKK1RoZSBvZmZzZXQgYXJyYXkgYXQgdGhlIGVuZCBv
ZiB0aGUgZmlsdGVyIGJsb2NrIGFsbG93cyBlZmZpY2llbnQKK21hcHBpbmcgZnJvbSBhIGRhdGEg
YmxvY2sgb2Zmc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIGZpbHRlci4KKworInN0YXRzIiBNZXRh
IEJsb2NrCistLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBtZXRhIGJsb2NrIGNvbnRhaW5zIGEg
YnVuY2ggb2Ygc3RhdHMuICBUaGUga2V5IGlzIHRoZSBuYW1lCitvZiB0aGUgc3RhdGlzdGljLiAg
VGhlIHZhbHVlIGNvbnRhaW5zIHRoZSBzdGF0aXN0aWMuCitUT0RPKHBvc3RyZWxlYXNlKTogcmVj
b3JkIGZvbGxvd2luZyBzdGF0cy4KKyAgZGF0YSBzaXplCisgIGluZGV4IHNpemUKKyAga2V5IHNp
emUgKHVuY29tcHJlc3NlZCkKKyAgdmFsdWUgc2l6ZSAodW5jb21wcmVzc2VkKQorICBudW1iZXIg
b2YgZW50cmllcworICBudW1iZXIgb2YgZGF0YSBibG9ja3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xldmVsZGIvaGVscGVycy9tZW1lbnYvbWVtZW52LmNjIGIvU291cmNlL1RoaXJk
UGFydHkvbGV2ZWxkYi9oZWxwZXJzL21lbWVudi9tZW1lbnYuY2MKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTg3OWRl
MTIxNDU2YTdjNWMxNjQ1N2ViMzZkODVjNjRhZDBhMWI2MQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvaGVscGVycy9tZW1lbnYvbWVtZW52LmNjCkBAIC0wLDAg
KzEsMzg0IEBACisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMu
CisKKyNpbmNsdWRlICJoZWxwZXJzL21lbWVudi9tZW1lbnYuaCIKKworI2luY2x1ZGUgImxldmVs
ZGIvZW52LmgiCisjaW5jbHVkZSAibGV2ZWxkYi9zdGF0dXMuaCIKKyNpbmNsdWRlICJwb3J0L3Bv
cnQuaCIKKyNpbmNsdWRlICJ1dGlsL211dGV4bG9jay5oIgorI2luY2x1ZGUgPG1hcD4KKyNpbmNs
dWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dmVjdG9yPgorCitu
YW1lc3BhY2UgbGV2ZWxkYiB7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIEZpbGVTdGF0ZSB7Cisg
cHVibGljOgorICAvLyBGaWxlU3RhdGVzIGFyZSByZWZlcmVuY2UgY291bnRlZC4gVGhlIGluaXRp
YWwgcmVmZXJlbmNlIGNvdW50IGlzIHplcm8KKyAgLy8gYW5kIHRoZSBjYWxsZXIgbXVzdCBjYWxs
IFJlZigpIGF0IGxlYXN0IG9uY2UuCisgIEZpbGVTdGF0ZSgpIDogcmVmc18oMCksIHNpemVfKDAp
IHt9CisKKyAgLy8gSW5jcmVhc2UgdGhlIHJlZmVyZW5jZSBjb3VudC4KKyAgdm9pZCBSZWYoKSB7
CisgICAgTXV0ZXhMb2NrIGxvY2soJnJlZnNfbXV0ZXhfKTsKKyAgICArK3JlZnNfOworICB9CisK
KyAgLy8gRGVjcmVhc2UgdGhlIHJlZmVyZW5jZSBjb3VudC4gRGVsZXRlIGlmIHRoaXMgaXMgdGhl
IGxhc3QgcmVmZXJlbmNlLgorICB2b2lkIFVucmVmKCkgeworICAgIGJvb2wgZG9fZGVsZXRlID0g
ZmFsc2U7CisKKyAgICB7CisgICAgICBNdXRleExvY2sgbG9jaygmcmVmc19tdXRleF8pOworICAg
ICAgLS1yZWZzXzsKKyAgICAgIGFzc2VydChyZWZzXyA+PSAwKTsKKyAgICAgIGlmIChyZWZzXyA8
PSAwKSB7CisgICAgICAgIGRvX2RlbGV0ZSA9IHRydWU7CisgICAgICB9CisgICAgfQorCisgICAg
aWYgKGRvX2RlbGV0ZSkgeworICAgICAgZGVsZXRlIHRoaXM7CisgICAgfQorICB9CisKKyAgdWlu
dDY0X3QgU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVfOyB9CisKKyAgU3RhdHVzIFJlYWQodWlu
dDY0X3Qgb2Zmc2V0LCBzaXplX3QgbiwgU2xpY2UqIHJlc3VsdCwgY2hhciogc2NyYXRjaCkgY29u
c3QgeworICAgIGlmIChvZmZzZXQgPiBzaXplXykgeworICAgICAgcmV0dXJuIFN0YXR1czo6SU9F
cnJvcigiT2Zmc2V0IGdyZWF0ZXIgdGhhbiBmaWxlIHNpemUuIik7CisgICAgfQorICAgIGNvbnN0
IHVpbnQ2NF90IGF2YWlsYWJsZSA9IHNpemVfIC0gb2Zmc2V0OworICAgIGlmIChuID4gYXZhaWxh
YmxlKSB7CisgICAgICBuID0gYXZhaWxhYmxlOworICAgIH0KKyAgICBpZiAobiA9PSAwKSB7Cisg
ICAgICAqcmVzdWx0ID0gU2xpY2UoKTsKKyAgICAgIHJldHVybiBTdGF0dXM6Ok9LKCk7CisgICAg
fQorCisgICAgc2l6ZV90IGJsb2NrID0gb2Zmc2V0IC8ga0Jsb2NrU2l6ZTsKKyAgICBzaXplX3Qg
YmxvY2tfb2Zmc2V0ID0gb2Zmc2V0ICUga0Jsb2NrU2l6ZTsKKworICAgIGlmIChuIDw9IGtCbG9j
a1NpemUgLSBibG9ja19vZmZzZXQpIHsKKyAgICAgIC8vIFRoZSByZXF1ZXN0ZWQgYnl0ZXMgYXJl
IGFsbCBpbiB0aGUgZmlyc3QgYmxvY2suCisgICAgICAqcmVzdWx0ID0gU2xpY2UoYmxvY2tzX1ti
bG9ja10gKyBibG9ja19vZmZzZXQsIG4pOworICAgICAgcmV0dXJuIFN0YXR1czo6T0soKTsKKyAg
ICB9CisKKyAgICBzaXplX3QgYnl0ZXNfdG9fY29weSA9IG47CisgICAgY2hhciogZHN0ID0gc2Ny
YXRjaDsKKworICAgIHdoaWxlIChieXRlc190b19jb3B5ID4gMCkgeworICAgICAgc2l6ZV90IGF2
YWlsID0ga0Jsb2NrU2l6ZSAtIGJsb2NrX29mZnNldDsKKyAgICAgIGlmIChhdmFpbCA+IGJ5dGVz
X3RvX2NvcHkpIHsKKyAgICAgICAgYXZhaWwgPSBieXRlc190b19jb3B5OworICAgICAgfQorICAg
ICAgbWVtY3B5KGRzdCwgYmxvY2tzX1tibG9ja10gKyBibG9ja19vZmZzZXQsIGF2YWlsKTsKKwor
ICAgICAgYnl0ZXNfdG9fY29weSAtPSBhdmFpbDsKKyAgICAgIGRzdCArPSBhdmFpbDsKKyAgICAg
IGJsb2NrKys7CisgICAgICBibG9ja19vZmZzZXQgPSAwOworICAgIH0KKworICAgICpyZXN1bHQg
PSBTbGljZShzY3JhdGNoLCBuKTsKKyAgICByZXR1cm4gU3RhdHVzOjpPSygpOworICB9CisKKyAg
U3RhdHVzIEFwcGVuZChjb25zdCBTbGljZSYgZGF0YSkgeworICAgIGNvbnN0IGNoYXIqIHNyYyA9
IGRhdGEuZGF0YSgpOworICAgIHNpemVfdCBzcmNfbGVuID0gZGF0YS5zaXplKCk7CisKKyAgICB3
aGlsZSAoc3JjX2xlbiA+IDApIHsKKyAgICAgIHNpemVfdCBhdmFpbDsKKyAgICAgIHNpemVfdCBv
ZmZzZXQgPSBzaXplXyAlIGtCbG9ja1NpemU7CisKKyAgICAgIGlmIChvZmZzZXQgIT0gMCkgewor
ICAgICAgICAvLyBUaGVyZSBpcyBzb21lIHJvb20gaW4gdGhlIGxhc3QgYmxvY2suCisgICAgICAg
IGF2YWlsID0ga0Jsb2NrU2l6ZSAtIG9mZnNldDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIC8v
IE5vIHJvb20gaW4gdGhlIGxhc3QgYmxvY2s7IHB1c2ggbmV3IG9uZS4KKyAgICAgICAgYmxvY2tz
Xy5wdXNoX2JhY2sobmV3IGNoYXJba0Jsb2NrU2l6ZV0pOworICAgICAgICBhdmFpbCA9IGtCbG9j
a1NpemU7CisgICAgICB9CisKKyAgICAgIGlmIChhdmFpbCA+IHNyY19sZW4pIHsKKyAgICAgICAg
YXZhaWwgPSBzcmNfbGVuOworICAgICAgfQorICAgICAgbWVtY3B5KGJsb2Nrc18uYmFjaygpICsg
b2Zmc2V0LCBzcmMsIGF2YWlsKTsKKyAgICAgIHNyY19sZW4gLT0gYXZhaWw7CisgICAgICBzcmMg
Kz0gYXZhaWw7CisgICAgICBzaXplXyArPSBhdmFpbDsKKyAgICB9CisKKyAgICByZXR1cm4gU3Rh
dHVzOjpPSygpOworICB9CisKKyBwcml2YXRlOgorICAvLyBQcml2YXRlIHNpbmNlIG9ubHkgVW5y
ZWYoKSBzaG91bGQgYmUgdXNlZCB0byBkZWxldGUgaXQuCisgIH5GaWxlU3RhdGUoKSB7CisgICAg
Zm9yIChzdGQ6OnZlY3RvcjxjaGFyKj46Oml0ZXJhdG9yIGkgPSBibG9ja3NfLmJlZ2luKCk7IGkg
IT0gYmxvY2tzXy5lbmQoKTsKKyAgICAgICAgICsraSkgeworICAgICAgZGVsZXRlIFtdICppOwor
ICAgIH0KKyAgfQorCisgIC8vIE5vIGNvcHlpbmcgYWxsb3dlZC4KKyAgRmlsZVN0YXRlKGNvbnN0
IEZpbGVTdGF0ZSYpOworICB2b2lkIG9wZXJhdG9yPShjb25zdCBGaWxlU3RhdGUmKTsKKworICBw
b3J0OjpNdXRleCByZWZzX211dGV4XzsKKyAgaW50IHJlZnNfOyAgLy8gUHJvdGVjdGVkIGJ5IHJl
ZnNfbXV0ZXhfOworCisgIC8vIFRoZSBmb2xsb3dpbmcgZmllbGRzIGFyZSBub3QgcHJvdGVjdGVk
IGJ5IGFueSBtdXRleC4gVGhleSBhcmUgb25seSBtdXRhYmxlCisgIC8vIHdoaWxlIHRoZSBmaWxl
IGlzIGJlaW5nIHdyaXR0ZW4sIGFuZCBjb25jdXJyZW50IGFjY2VzcyBpcyBub3QgYWxsb3dlZAor
ICAvLyB0byB3cml0YWJsZSBmaWxlcy4KKyAgc3RkOjp2ZWN0b3I8Y2hhcio+IGJsb2Nrc187Cisg
IHVpbnQ2NF90IHNpemVfOworCisgIGVudW0geyBrQmxvY2tTaXplID0gOCAqIDEwMjQgfTsKK307
CisKK2NsYXNzIFNlcXVlbnRpYWxGaWxlSW1wbCA6IHB1YmxpYyBTZXF1ZW50aWFsRmlsZSB7Cisg
cHVibGljOgorICBleHBsaWNpdCBTZXF1ZW50aWFsRmlsZUltcGwoRmlsZVN0YXRlKiBmaWxlKSA6
IGZpbGVfKGZpbGUpLCBwb3NfKDApIHsKKyAgICBmaWxlXy0+UmVmKCk7CisgIH0KKworICB+U2Vx
dWVudGlhbEZpbGVJbXBsKCkgeworICAgIGZpbGVfLT5VbnJlZigpOworICB9CisKKyAgdmlydHVh
bCBTdGF0dXMgUmVhZChzaXplX3QgbiwgU2xpY2UqIHJlc3VsdCwgY2hhciogc2NyYXRjaCkgewor
ICAgIFN0YXR1cyBzID0gZmlsZV8tPlJlYWQocG9zXywgbiwgcmVzdWx0LCBzY3JhdGNoKTsKKyAg
ICBpZiAocy5vaygpKSB7CisgICAgICBwb3NfICs9IHJlc3VsdC0+c2l6ZSgpOworICAgIH0KKyAg
ICByZXR1cm4gczsKKyAgfQorCisgIHZpcnR1YWwgU3RhdHVzIFNraXAodWludDY0X3Qgbikgewor
ICAgIGlmIChwb3NfID4gZmlsZV8tPlNpemUoKSkgeworICAgICAgcmV0dXJuIFN0YXR1czo6SU9F
cnJvcigicG9zXyA+IGZpbGVfLT5TaXplKCkiKTsKKyAgICB9CisgICAgY29uc3Qgc2l6ZV90IGF2
YWlsYWJsZSA9IGZpbGVfLT5TaXplKCkgLSBwb3NfOworICAgIGlmIChuID4gYXZhaWxhYmxlKSB7
CisgICAgICBuID0gYXZhaWxhYmxlOworICAgIH0KKyAgICBwb3NfICs9IG47CisgICAgcmV0dXJu
IFN0YXR1czo6T0soKTsKKyAgfQorCisgcHJpdmF0ZToKKyAgRmlsZVN0YXRlKiBmaWxlXzsKKyAg
c2l6ZV90IHBvc187Cit9OworCitjbGFzcyBSYW5kb21BY2Nlc3NGaWxlSW1wbCA6IHB1YmxpYyBS
YW5kb21BY2Nlc3NGaWxlIHsKKyBwdWJsaWM6CisgIGV4cGxpY2l0IFJhbmRvbUFjY2Vzc0ZpbGVJ
bXBsKEZpbGVTdGF0ZSogZmlsZSkgOiBmaWxlXyhmaWxlKSB7CisgICAgZmlsZV8tPlJlZigpOwor
ICB9CisKKyAgflJhbmRvbUFjY2Vzc0ZpbGVJbXBsKCkgeworICAgIGZpbGVfLT5VbnJlZigpOwor
ICB9CisKKyAgdmlydHVhbCBTdGF0dXMgUmVhZCh1aW50NjRfdCBvZmZzZXQsIHNpemVfdCBuLCBT
bGljZSogcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIHNjcmF0Y2gpIGNvbnN0
IHsKKyAgICByZXR1cm4gZmlsZV8tPlJlYWQob2Zmc2V0LCBuLCByZXN1bHQsIHNjcmF0Y2gpOwor
ICB9CisKKyBwcml2YXRlOgorICBGaWxlU3RhdGUqIGZpbGVfOworfTsKKworY2xhc3MgV3JpdGFi
bGVGaWxlSW1wbCA6IHB1YmxpYyBXcml0YWJsZUZpbGUgeworIHB1YmxpYzoKKyAgV3JpdGFibGVG
aWxlSW1wbChGaWxlU3RhdGUqIGZpbGUpIDogZmlsZV8oZmlsZSkgeworICAgIGZpbGVfLT5SZWYo
KTsKKyAgfQorCisgIH5Xcml0YWJsZUZpbGVJbXBsKCkgeworICAgIGZpbGVfLT5VbnJlZigpOwor
ICB9CisKKyAgdmlydHVhbCBTdGF0dXMgQXBwZW5kKGNvbnN0IFNsaWNlJiBkYXRhKSB7CisgICAg
cmV0dXJuIGZpbGVfLT5BcHBlbmQoZGF0YSk7CisgIH0KKworICB2aXJ0dWFsIFN0YXR1cyBDbG9z
ZSgpIHsgcmV0dXJuIFN0YXR1czo6T0soKTsgfQorICB2aXJ0dWFsIFN0YXR1cyBGbHVzaCgpIHsg
cmV0dXJuIFN0YXR1czo6T0soKTsgfQorICB2aXJ0dWFsIFN0YXR1cyBTeW5jKCkgeyByZXR1cm4g
U3RhdHVzOjpPSygpOyB9CisKKyBwcml2YXRlOgorICBGaWxlU3RhdGUqIGZpbGVfOworfTsKKwor
Y2xhc3MgTm9PcExvZ2dlciA6IHB1YmxpYyBMb2dnZXIgeworIHB1YmxpYzoKKyAgdmlydHVhbCB2
b2lkIExvZ3YoY29uc3QgY2hhciogZm9ybWF0LCB2YV9saXN0IGFwKSB7IH0KK307CisKK2NsYXNz
IEluTWVtb3J5RW52IDogcHVibGljIEVudldyYXBwZXIgeworIHB1YmxpYzoKKyAgZXhwbGljaXQg
SW5NZW1vcnlFbnYoRW52KiBiYXNlX2VudikgOiBFbnZXcmFwcGVyKGJhc2VfZW52KSB7IH0KKwor
ICB2aXJ0dWFsIH5Jbk1lbW9yeUVudigpIHsKKyAgICBmb3IgKEZpbGVTeXN0ZW06Oml0ZXJhdG9y
IGkgPSBmaWxlX21hcF8uYmVnaW4oKTsgaSAhPSBmaWxlX21hcF8uZW5kKCk7ICsraSl7CisgICAg
ICBpLT5zZWNvbmQtPlVucmVmKCk7CisgICAgfQorICB9CisKKyAgLy8gUGFydGlhbCBpbXBsZW1l
bnRhdGlvbiBvZiB0aGUgRW52IGludGVyZmFjZS4KKyAgdmlydHVhbCBTdGF0dXMgTmV3U2VxdWVu
dGlhbEZpbGUoY29uc3Qgc3RkOjpzdHJpbmcmIGZuYW1lLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTZXF1ZW50aWFsRmlsZSoqIHJlc3VsdCkgeworICAgIE11dGV4TG9jayBs
b2NrKCZtdXRleF8pOworICAgIGlmIChmaWxlX21hcF8uZmluZChmbmFtZSkgPT0gZmlsZV9tYXBf
LmVuZCgpKSB7CisgICAgICAqcmVzdWx0ID0gTlVMTDsKKyAgICAgIHJldHVybiBTdGF0dXM6OklP
RXJyb3IoZm5hbWUsICJGaWxlIG5vdCBmb3VuZCIpOworICAgIH0KKworICAgICpyZXN1bHQgPSBu
ZXcgU2VxdWVudGlhbEZpbGVJbXBsKGZpbGVfbWFwX1tmbmFtZV0pOworICAgIHJldHVybiBTdGF0
dXM6Ok9LKCk7CisgIH0KKworICB2aXJ0dWFsIFN0YXR1cyBOZXdSYW5kb21BY2Nlc3NGaWxlKGNv
bnN0IHN0ZDo6c3RyaW5nJiBmbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBSYW5kb21BY2Nlc3NGaWxlKiogcmVzdWx0KSB7CisgICAgTXV0ZXhMb2NrIGxvY2soJm11
dGV4Xyk7CisgICAgaWYgKGZpbGVfbWFwXy5maW5kKGZuYW1lKSA9PSBmaWxlX21hcF8uZW5kKCkp
IHsKKyAgICAgICpyZXN1bHQgPSBOVUxMOworICAgICAgcmV0dXJuIFN0YXR1czo6SU9FcnJvcihm
bmFtZSwgIkZpbGUgbm90IGZvdW5kIik7CisgICAgfQorCisgICAgKnJlc3VsdCA9IG5ldyBSYW5k
b21BY2Nlc3NGaWxlSW1wbChmaWxlX21hcF9bZm5hbWVdKTsKKyAgICByZXR1cm4gU3RhdHVzOjpP
SygpOworICB9CisKKyAgdmlydHVhbCBTdGF0dXMgTmV3V3JpdGFibGVGaWxlKGNvbnN0IHN0ZDo6
c3RyaW5nJiBmbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxl
RmlsZSoqIHJlc3VsdCkgeworICAgIE11dGV4TG9jayBsb2NrKCZtdXRleF8pOworICAgIGlmIChm
aWxlX21hcF8uZmluZChmbmFtZSkgIT0gZmlsZV9tYXBfLmVuZCgpKSB7CisgICAgICBEZWxldGVG
aWxlSW50ZXJuYWwoZm5hbWUpOworICAgIH0KKworICAgIEZpbGVTdGF0ZSogZmlsZSA9IG5ldyBG
aWxlU3RhdGUoKTsKKyAgICBmaWxlLT5SZWYoKTsKKyAgICBmaWxlX21hcF9bZm5hbWVdID0gZmls
ZTsKKworICAgICpyZXN1bHQgPSBuZXcgV3JpdGFibGVGaWxlSW1wbChmaWxlKTsKKyAgICByZXR1
cm4gU3RhdHVzOjpPSygpOworICB9CisKKyAgdmlydHVhbCBib29sIEZpbGVFeGlzdHMoY29uc3Qg
c3RkOjpzdHJpbmcmIGZuYW1lKSB7CisgICAgTXV0ZXhMb2NrIGxvY2soJm11dGV4Xyk7CisgICAg
cmV0dXJuIGZpbGVfbWFwXy5maW5kKGZuYW1lKSAhPSBmaWxlX21hcF8uZW5kKCk7CisgIH0KKwor
ICB2aXJ0dWFsIFN0YXR1cyBHZXRDaGlsZHJlbihjb25zdCBzdGQ6OnN0cmluZyYgZGlyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4qIHJlc3Vs
dCkgeworICAgIE11dGV4TG9jayBsb2NrKCZtdXRleF8pOworICAgIHJlc3VsdC0+Y2xlYXIoKTsK
KworICAgIGZvciAoRmlsZVN5c3RlbTo6aXRlcmF0b3IgaSA9IGZpbGVfbWFwXy5iZWdpbigpOyBp
ICE9IGZpbGVfbWFwXy5lbmQoKTsgKytpKXsKKyAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxl
bmFtZSA9IGktPmZpcnN0OworCisgICAgICBpZiAoZmlsZW5hbWUuc2l6ZSgpID49IGRpci5zaXpl
KCkgKyAxICYmIGZpbGVuYW1lW2Rpci5zaXplKCldID09ICcvJyAmJgorICAgICAgICAgIFNsaWNl
KGZpbGVuYW1lKS5zdGFydHNfd2l0aChTbGljZShkaXIpKSkgeworICAgICAgICByZXN1bHQtPnB1
c2hfYmFjayhmaWxlbmFtZS5zdWJzdHIoZGlyLnNpemUoKSArIDEpKTsKKyAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gU3RhdHVzOjpPSygpOworICB9CisKKyAgdm9pZCBEZWxldGVGaWxlSW50
ZXJuYWwoY29uc3Qgc3RkOjpzdHJpbmcmIGZuYW1lKSB7CisgICAgaWYgKGZpbGVfbWFwXy5maW5k
KGZuYW1lKSA9PSBmaWxlX21hcF8uZW5kKCkpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBmaWxlX21hcF9bZm5hbWVdLT5VbnJlZigpOworICAgIGZpbGVfbWFwXy5lcmFzZShmbmFtZSk7
CisgIH0KKworICB2aXJ0dWFsIFN0YXR1cyBEZWxldGVGaWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBm
bmFtZSkgeworICAgIE11dGV4TG9jayBsb2NrKCZtdXRleF8pOworICAgIGlmIChmaWxlX21hcF8u
ZmluZChmbmFtZSkgPT0gZmlsZV9tYXBfLmVuZCgpKSB7CisgICAgICByZXR1cm4gU3RhdHVzOjpJ
T0Vycm9yKGZuYW1lLCAiRmlsZSBub3QgZm91bmQiKTsKKyAgICB9CisKKyAgICBEZWxldGVGaWxl
SW50ZXJuYWwoZm5hbWUpOworICAgIHJldHVybiBTdGF0dXM6Ok9LKCk7CisgIH0KKworICB2aXJ0
dWFsIFN0YXR1cyBDcmVhdGVEaXIoY29uc3Qgc3RkOjpzdHJpbmcmIGRpcm5hbWUpIHsKKyAgICBy
ZXR1cm4gU3RhdHVzOjpPSygpOworICB9CisKKyAgdmlydHVhbCBTdGF0dXMgRGVsZXRlRGlyKGNv
bnN0IHN0ZDo6c3RyaW5nJiBkaXJuYW1lKSB7CisgICAgcmV0dXJuIFN0YXR1czo6T0soKTsKKyAg
fQorCisgIHZpcnR1YWwgU3RhdHVzIEdldEZpbGVTaXplKGNvbnN0IHN0ZDo6c3RyaW5nJiBmbmFt
ZSwgdWludDY0X3QqIGZpbGVfc2l6ZSkgeworICAgIE11dGV4TG9jayBsb2NrKCZtdXRleF8pOwor
ICAgIGlmIChmaWxlX21hcF8uZmluZChmbmFtZSkgPT0gZmlsZV9tYXBfLmVuZCgpKSB7CisgICAg
ICByZXR1cm4gU3RhdHVzOjpJT0Vycm9yKGZuYW1lLCAiRmlsZSBub3QgZm91bmQiKTsKKyAgICB9
CisKKyAgICAqZmlsZV9zaXplID0gZmlsZV9tYXBfW2ZuYW1lXS0+U2l6ZSgpOworICAgIHJldHVy
biBTdGF0dXM6Ok9LKCk7CisgIH0KKworICB2aXJ0dWFsIFN0YXR1cyBSZW5hbWVGaWxlKGNvbnN0
IHN0ZDo6c3RyaW5nJiBzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3Rk
OjpzdHJpbmcmIHRhcmdldCkgeworICAgIE11dGV4TG9jayBsb2NrKCZtdXRleF8pOworICAgIGlm
IChmaWxlX21hcF8uZmluZChzcmMpID09IGZpbGVfbWFwXy5lbmQoKSkgeworICAgICAgcmV0dXJu
IFN0YXR1czo6SU9FcnJvcihzcmMsICJGaWxlIG5vdCBmb3VuZCIpOworICAgIH0KKworICAgIERl
bGV0ZUZpbGVJbnRlcm5hbCh0YXJnZXQpOworICAgIGZpbGVfbWFwX1t0YXJnZXRdID0gZmlsZV9t
YXBfW3NyY107CisgICAgZmlsZV9tYXBfLmVyYXNlKHNyYyk7CisgICAgcmV0dXJuIFN0YXR1czo6
T0soKTsKKyAgfQorCisgIHZpcnR1YWwgU3RhdHVzIExvY2tGaWxlKGNvbnN0IHN0ZDo6c3RyaW5n
JiBmbmFtZSwgRmlsZUxvY2sqKiBsb2NrKSB7CisgICAgKmxvY2sgPSBuZXcgRmlsZUxvY2s7Cisg
ICAgcmV0dXJuIFN0YXR1czo6T0soKTsKKyAgfQorCisgIHZpcnR1YWwgU3RhdHVzIFVubG9ja0Zp
bGUoRmlsZUxvY2sqIGxvY2spIHsKKyAgICBkZWxldGUgbG9jazsKKyAgICByZXR1cm4gU3RhdHVz
OjpPSygpOworICB9CisKKyAgdmlydHVhbCBTdGF0dXMgR2V0VGVzdERpcmVjdG9yeShzdGQ6OnN0
cmluZyogcGF0aCkgeworICAgICpwYXRoID0gIi90ZXN0IjsKKyAgICByZXR1cm4gU3RhdHVzOjpP
SygpOworICB9CisKKyAgdmlydHVhbCBTdGF0dXMgTmV3TG9nZ2VyKGNvbnN0IHN0ZDo6c3RyaW5n
JiBmbmFtZSwgTG9nZ2VyKiogcmVzdWx0KSB7CisgICAgKnJlc3VsdCA9IG5ldyBOb09wTG9nZ2Vy
OworICAgIHJldHVybiBTdGF0dXM6Ok9LKCk7CisgIH0KKworIHByaXZhdGU6CisgIC8vIE1hcCBm
cm9tIGZpbGVuYW1lcyB0byBGaWxlU3RhdGUgb2JqZWN0cywgcmVwcmVzZW50aW5nIGEgc2ltcGxl
IGZpbGUgc3lzdGVtLgorICB0eXBlZGVmIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBGaWxlU3RhdGUq
PiBGaWxlU3lzdGVtOworICBwb3J0OjpNdXRleCBtdXRleF87CisgIEZpbGVTeXN0ZW0gZmlsZV9t
YXBfOyAgLy8gUHJvdGVjdGVkIGJ5IG11dGV4Xy4KK307CisKK30gIC8vIG5hbWVzcGFjZQorCitF
bnYqIE5ld01lbUVudihFbnYqIGJhc2VfZW52KSB7CisgIHJldHVybiBuZXcgSW5NZW1vcnlFbnYo
YmFzZV9lbnYpOworfQorCit9ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9oZWxwZXJzL21lbWVudi9tZW1lbnYuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xldmVsZGIvaGVscGVycy9tZW1lbnYvbWVtZW52LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDNi
ODhkZTc2MWRjNzMyZTA5ZGVjNTRiYWRkZDM0ZTk0ZWUxNzYxMwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvaGVscGVycy9tZW1lbnYvbWVtZW52LmgKQEAgLTAs
MCArMSwyMCBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3Jz
LgorCisjaWZuZGVmIFNUT1JBR0VfTEVWRUxEQl9IRUxQRVJTX01FTUVOVl9NRU1FTlZfSF8KKyNk
ZWZpbmUgU1RPUkFHRV9MRVZFTERCX0hFTFBFUlNfTUVNRU5WX01FTUVOVl9IXworCituYW1lc3Bh
Y2UgbGV2ZWxkYiB7CisKK2NsYXNzIEVudjsKKworLy8gUmV0dXJucyBhIG5ldyBlbnZpcm9ubWVu
dCB0aGF0IHN0b3JlcyBpdHMgZGF0YSBpbiBtZW1vcnkgYW5kIGRlbGVnYXRlcworLy8gYWxsIG5v
bi1maWxlLXN0b3JhZ2UgdGFza3MgdG8gYmFzZV9lbnYuIFRoZSBjYWxsZXIgbXVzdCBkZWxldGUg
dGhlIHJlc3VsdAorLy8gd2hlbiBpdCBpcyBubyBsb25nZXIgbmVlZGVkLgorLy8gKmJhc2VfZW52
IG11c3QgcmVtYWluIGxpdmUgd2hpbGUgdGhlIHJlc3VsdCBpcyBpbiB1c2UuCitFbnYqIE5ld01l
bUVudihFbnYqIGJhc2VfZW52KTsKKworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKKworI2VuZGlm
ICAvLyBTVE9SQUdFX0xFVkVMREJfSEVMUEVSU19NRU1FTlZfTUVNRU5WX0hfCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2hlbHBlcnMvbWVtZW52L21lbWVudl90ZXN0LmNj
IGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9oZWxwZXJzL21lbWVudi9tZW1lbnZfdGVzdC5j
YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5hNDQzMTBmZWQ4MGNkN2YyMTBkNjRiMmM4ZTc5Y2ViNzQyODQyMTdhCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9oZWxwZXJzL21lbWVu
di9tZW1lbnZfdGVzdC5jYwpAQCAtMCwwICsxLDIzMiBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDEx
IFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBm
b3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgorCisjaW5jbHVkZSAiaGVscGVycy9tZW1lbnYvbWVt
ZW52LmgiCisKKyNpbmNsdWRlICJkYi9kYl9pbXBsLmgiCisjaW5jbHVkZSAibGV2ZWxkYi9kYi5o
IgorI2luY2x1ZGUgImxldmVsZGIvZW52LmgiCisjaW5jbHVkZSAidXRpbC90ZXN0aGFybmVzcy5o
IgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKK25hbWVzcGFjZSBsZXZl
bGRiIHsKKworY2xhc3MgTWVtRW52VGVzdCB7CisgcHVibGljOgorICBFbnYqIGVudl87CisKKyAg
TWVtRW52VGVzdCgpCisgICAgICA6IGVudl8oTmV3TWVtRW52KEVudjo6RGVmYXVsdCgpKSkgewor
ICB9CisgIH5NZW1FbnZUZXN0KCkgeworICAgIGRlbGV0ZSBlbnZfOworICB9Cit9OworCitURVNU
KE1lbUVudlRlc3QsIEJhc2ljcykgeworICB1aW50NjRfdCBmaWxlX3NpemU7CisgIFdyaXRhYmxl
RmlsZSogd3JpdGFibGVfZmlsZTsKKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNoaWxkcmVu
OworCisgIEFTU0VSVF9PSyhlbnZfLT5DcmVhdGVEaXIoIi9kaXIiKSk7CisKKyAgLy8gQ2hlY2sg
dGhhdCB0aGUgZGlyZWN0b3J5IGlzIGVtcHR5LgorICBBU1NFUlRfVFJVRSghZW52Xy0+RmlsZUV4
aXN0cygiL2Rpci9ub25fZXhpc3RlbnQiKSk7CisgIEFTU0VSVF9UUlVFKCFlbnZfLT5HZXRGaWxl
U2l6ZSgiL2Rpci9ub25fZXhpc3RlbnQiLCAmZmlsZV9zaXplKS5vaygpKTsKKyAgQVNTRVJUX09L
KGVudl8tPkdldENoaWxkcmVuKCIvZGlyIiwgJmNoaWxkcmVuKSk7CisgIEFTU0VSVF9FUSgwLCBj
aGlsZHJlbi5zaXplKCkpOworCisgIC8vIENyZWF0ZSBhIGZpbGUuCisgIEFTU0VSVF9PSyhlbnZf
LT5OZXdXcml0YWJsZUZpbGUoIi9kaXIvZiIsICZ3cml0YWJsZV9maWxlKSk7CisgIGRlbGV0ZSB3
cml0YWJsZV9maWxlOworCisgIC8vIENoZWNrIHRoYXQgdGhlIGZpbGUgZXhpc3RzLgorICBBU1NF
UlRfVFJVRShlbnZfLT5GaWxlRXhpc3RzKCIvZGlyL2YiKSk7CisgIEFTU0VSVF9PSyhlbnZfLT5H
ZXRGaWxlU2l6ZSgiL2Rpci9mIiwgJmZpbGVfc2l6ZSkpOworICBBU1NFUlRfRVEoMCwgZmlsZV9z
aXplKTsKKyAgQVNTRVJUX09LKGVudl8tPkdldENoaWxkcmVuKCIvZGlyIiwgJmNoaWxkcmVuKSk7
CisgIEFTU0VSVF9FUSgxLCBjaGlsZHJlbi5zaXplKCkpOworICBBU1NFUlRfRVEoImYiLCBjaGls
ZHJlblswXSk7CisKKyAgLy8gV3JpdGUgdG8gdGhlIGZpbGUuCisgIEFTU0VSVF9PSyhlbnZfLT5O
ZXdXcml0YWJsZUZpbGUoIi9kaXIvZiIsICZ3cml0YWJsZV9maWxlKSk7CisgIEFTU0VSVF9PSyh3
cml0YWJsZV9maWxlLT5BcHBlbmQoImFiYyIpKTsKKyAgZGVsZXRlIHdyaXRhYmxlX2ZpbGU7CisK
KyAgLy8gQ2hlY2sgZm9yIGV4cGVjdGVkIHNpemUuCisgIEFTU0VSVF9PSyhlbnZfLT5HZXRGaWxl
U2l6ZSgiL2Rpci9mIiwgJmZpbGVfc2l6ZSkpOworICBBU1NFUlRfRVEoMywgZmlsZV9zaXplKTsK
KworICAvLyBDaGVjayB0aGF0IHJlbmFtaW5nIHdvcmtzLgorICBBU1NFUlRfVFJVRSghZW52Xy0+
UmVuYW1lRmlsZSgiL2Rpci9ub25fZXhpc3RlbnQiLCAiL2Rpci9nIikub2soKSk7CisgIEFTU0VS
VF9PSyhlbnZfLT5SZW5hbWVGaWxlKCIvZGlyL2YiLCAiL2Rpci9nIikpOworICBBU1NFUlRfVFJV
RSghZW52Xy0+RmlsZUV4aXN0cygiL2Rpci9mIikpOworICBBU1NFUlRfVFJVRShlbnZfLT5GaWxl
RXhpc3RzKCIvZGlyL2ciKSk7CisgIEFTU0VSVF9PSyhlbnZfLT5HZXRGaWxlU2l6ZSgiL2Rpci9n
IiwgJmZpbGVfc2l6ZSkpOworICBBU1NFUlRfRVEoMywgZmlsZV9zaXplKTsKKworICAvLyBDaGVj
ayB0aGF0IG9wZW5pbmcgbm9uLWV4aXN0ZW50IGZpbGUgZmFpbHMuCisgIFNlcXVlbnRpYWxGaWxl
KiBzZXFfZmlsZTsKKyAgUmFuZG9tQWNjZXNzRmlsZSogcmFuZF9maWxlOworICBBU1NFUlRfVFJV
RSghZW52Xy0+TmV3U2VxdWVudGlhbEZpbGUoIi9kaXIvbm9uX2V4aXN0ZW50IiwgJnNlcV9maWxl
KS5vaygpKTsKKyAgQVNTRVJUX1RSVUUoIXNlcV9maWxlKTsKKyAgQVNTRVJUX1RSVUUoIWVudl8t
Pk5ld1JhbmRvbUFjY2Vzc0ZpbGUoIi9kaXIvbm9uX2V4aXN0ZW50IiwgJnJhbmRfZmlsZSkub2so
KSk7CisgIEFTU0VSVF9UUlVFKCFyYW5kX2ZpbGUpOworCisgIC8vIENoZWNrIHRoYXQgZGVsZXRp
bmcgd29ya3MuCisgIEFTU0VSVF9UUlVFKCFlbnZfLT5EZWxldGVGaWxlKCIvZGlyL25vbl9leGlz
dGVudCIpLm9rKCkpOworICBBU1NFUlRfT0soZW52Xy0+RGVsZXRlRmlsZSgiL2Rpci9nIikpOwor
ICBBU1NFUlRfVFJVRSghZW52Xy0+RmlsZUV4aXN0cygiL2Rpci9nIikpOworICBBU1NFUlRfT0so
ZW52Xy0+R2V0Q2hpbGRyZW4oIi9kaXIiLCAmY2hpbGRyZW4pKTsKKyAgQVNTRVJUX0VRKDAsIGNo
aWxkcmVuLnNpemUoKSk7CisgIEFTU0VSVF9PSyhlbnZfLT5EZWxldGVEaXIoIi9kaXIiKSk7Cit9
CisKK1RFU1QoTWVtRW52VGVzdCwgUmVhZFdyaXRlKSB7CisgIFdyaXRhYmxlRmlsZSogd3JpdGFi
bGVfZmlsZTsKKyAgU2VxdWVudGlhbEZpbGUqIHNlcV9maWxlOworICBSYW5kb21BY2Nlc3NGaWxl
KiByYW5kX2ZpbGU7CisgIFNsaWNlIHJlc3VsdDsKKyAgY2hhciBzY3JhdGNoWzEwMF07CisKKyAg
QVNTRVJUX09LKGVudl8tPkNyZWF0ZURpcigiL2RpciIpKTsKKworICBBU1NFUlRfT0soZW52Xy0+
TmV3V3JpdGFibGVGaWxlKCIvZGlyL2YiLCAmd3JpdGFibGVfZmlsZSkpOworICBBU1NFUlRfT0so
d3JpdGFibGVfZmlsZS0+QXBwZW5kKCJoZWxsbyAiKSk7CisgIEFTU0VSVF9PSyh3cml0YWJsZV9m
aWxlLT5BcHBlbmQoIndvcmxkIikpOworICBkZWxldGUgd3JpdGFibGVfZmlsZTsKKworICAvLyBS
ZWFkIHNlcXVlbnRpYWxseS4KKyAgQVNTRVJUX09LKGVudl8tPk5ld1NlcXVlbnRpYWxGaWxlKCIv
ZGlyL2YiLCAmc2VxX2ZpbGUpKTsKKyAgQVNTRVJUX09LKHNlcV9maWxlLT5SZWFkKDUsICZyZXN1
bHQsIHNjcmF0Y2gpKTsgLy8gUmVhZCAiaGVsbG8iLgorICBBU1NFUlRfRVEoMCwgcmVzdWx0LmNv
bXBhcmUoImhlbGxvIikpOworICBBU1NFUlRfT0soc2VxX2ZpbGUtPlNraXAoMSkpOworICBBU1NF
UlRfT0soc2VxX2ZpbGUtPlJlYWQoMTAwMCwgJnJlc3VsdCwgc2NyYXRjaCkpOyAvLyBSZWFkICJ3
b3JsZCIuCisgIEFTU0VSVF9FUSgwLCByZXN1bHQuY29tcGFyZSgid29ybGQiKSk7CisgIEFTU0VS
VF9PSyhzZXFfZmlsZS0+UmVhZCgxMDAwLCAmcmVzdWx0LCBzY3JhdGNoKSk7IC8vIFRyeSByZWFk
aW5nIHBhc3QgRU9GLgorICBBU1NFUlRfRVEoMCwgcmVzdWx0LnNpemUoKSk7CisgIEFTU0VSVF9P
SyhzZXFfZmlsZS0+U2tpcCgxMDApKTsgLy8gVHJ5IHRvIHNraXAgcGFzdCBlbmQgb2YgZmlsZS4K
KyAgQVNTRVJUX09LKHNlcV9maWxlLT5SZWFkKDEwMDAsICZyZXN1bHQsIHNjcmF0Y2gpKTsKKyAg
QVNTRVJUX0VRKDAsIHJlc3VsdC5zaXplKCkpOworICBkZWxldGUgc2VxX2ZpbGU7CisKKyAgLy8g
UmFuZG9tIHJlYWRzLgorICBBU1NFUlRfT0soZW52Xy0+TmV3UmFuZG9tQWNjZXNzRmlsZSgiL2Rp
ci9mIiwgJnJhbmRfZmlsZSkpOworICBBU1NFUlRfT0socmFuZF9maWxlLT5SZWFkKDYsIDUsICZy
ZXN1bHQsIHNjcmF0Y2gpKTsgLy8gUmVhZCAid29ybGQiLgorICBBU1NFUlRfRVEoMCwgcmVzdWx0
LmNvbXBhcmUoIndvcmxkIikpOworICBBU1NFUlRfT0socmFuZF9maWxlLT5SZWFkKDAsIDUsICZy
ZXN1bHQsIHNjcmF0Y2gpKTsgLy8gUmVhZCAiaGVsbG8iLgorICBBU1NFUlRfRVEoMCwgcmVzdWx0
LmNvbXBhcmUoImhlbGxvIikpOworICBBU1NFUlRfT0socmFuZF9maWxlLT5SZWFkKDEwLCAxMDAs
ICZyZXN1bHQsIHNjcmF0Y2gpKTsgLy8gUmVhZCAiZCIuCisgIEFTU0VSVF9FUSgwLCByZXN1bHQu
Y29tcGFyZSgiZCIpKTsKKworICAvLyBUb28gaGlnaCBvZmZzZXQuCisgIEFTU0VSVF9UUlVFKCFy
YW5kX2ZpbGUtPlJlYWQoMTAwMCwgNSwgJnJlc3VsdCwgc2NyYXRjaCkub2soKSk7CisgIGRlbGV0
ZSByYW5kX2ZpbGU7Cit9CisKK1RFU1QoTWVtRW52VGVzdCwgTG9ja3MpIHsKKyAgRmlsZUxvY2sq
IGxvY2s7CisKKyAgLy8gVGhlc2UgYXJlIG5vLW9wcywgYnV0IHdlIHRlc3QgdGhleSByZXR1cm4g
c3VjY2Vzcy4KKyAgQVNTRVJUX09LKGVudl8tPkxvY2tGaWxlKCJzb21lIGZpbGUiLCAmbG9jaykp
OworICBBU1NFUlRfT0soZW52Xy0+VW5sb2NrRmlsZShsb2NrKSk7Cit9CisKK1RFU1QoTWVtRW52
VGVzdCwgTWlzYykgeworICBzdGQ6OnN0cmluZyB0ZXN0X2RpcjsKKyAgQVNTRVJUX09LKGVudl8t
PkdldFRlc3REaXJlY3RvcnkoJnRlc3RfZGlyKSk7CisgIEFTU0VSVF9UUlVFKCF0ZXN0X2Rpci5l
bXB0eSgpKTsKKworICBXcml0YWJsZUZpbGUqIHdyaXRhYmxlX2ZpbGU7CisgIEFTU0VSVF9PSyhl
bnZfLT5OZXdXcml0YWJsZUZpbGUoIi9hL2IiLCAmd3JpdGFibGVfZmlsZSkpOworCisgIC8vIFRo
ZXNlIGFyZSBuby1vcHMsIGJ1dCB3ZSB0ZXN0IHRoZXkgcmV0dXJuIHN1Y2Nlc3MuCisgIEFTU0VS
VF9PSyh3cml0YWJsZV9maWxlLT5TeW5jKCkpOworICBBU1NFUlRfT0sod3JpdGFibGVfZmlsZS0+
Rmx1c2goKSk7CisgIEFTU0VSVF9PSyh3cml0YWJsZV9maWxlLT5DbG9zZSgpKTsKKyAgZGVsZXRl
IHdyaXRhYmxlX2ZpbGU7Cit9CisKK1RFU1QoTWVtRW52VGVzdCwgTGFyZ2VXcml0ZSkgeworICBj
b25zdCBzaXplX3Qga1dyaXRlU2l6ZSA9IDMwMCAqIDEwMjQ7CisgIGNoYXIqIHNjcmF0Y2ggPSBu
ZXcgY2hhcltrV3JpdGVTaXplICogMl07CisKKyAgc3RkOjpzdHJpbmcgd3JpdGVfZGF0YTsKKyAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBrV3JpdGVTaXplOyArK2kpIHsKKyAgICB3cml0ZV9kYXRh
LmFwcGVuZCgxLCBzdGF0aWNfY2FzdDxjaGFyPihpKSk7CisgIH0KKworICBXcml0YWJsZUZpbGUq
IHdyaXRhYmxlX2ZpbGU7CisgIEFTU0VSVF9PSyhlbnZfLT5OZXdXcml0YWJsZUZpbGUoIi9kaXIv
ZiIsICZ3cml0YWJsZV9maWxlKSk7CisgIEFTU0VSVF9PSyh3cml0YWJsZV9maWxlLT5BcHBlbmQo
ImZvbyIpKTsKKyAgQVNTRVJUX09LKHdyaXRhYmxlX2ZpbGUtPkFwcGVuZCh3cml0ZV9kYXRhKSk7
CisgIGRlbGV0ZSB3cml0YWJsZV9maWxlOworCisgIFNlcXVlbnRpYWxGaWxlKiBzZXFfZmlsZTsK
KyAgU2xpY2UgcmVzdWx0OworICBBU1NFUlRfT0soZW52Xy0+TmV3U2VxdWVudGlhbEZpbGUoIi9k
aXIvZiIsICZzZXFfZmlsZSkpOworICBBU1NFUlRfT0soc2VxX2ZpbGUtPlJlYWQoMywgJnJlc3Vs
dCwgc2NyYXRjaCkpOyAvLyBSZWFkICJmb28iLgorICBBU1NFUlRfRVEoMCwgcmVzdWx0LmNvbXBh
cmUoImZvbyIpKTsKKworICBzaXplX3QgcmVhZCA9IDA7CisgIHN0ZDo6c3RyaW5nIHJlYWRfZGF0
YTsKKyAgd2hpbGUgKHJlYWQgPCBrV3JpdGVTaXplKSB7CisgICAgQVNTRVJUX09LKHNlcV9maWxl
LT5SZWFkKGtXcml0ZVNpemUgLSByZWFkLCAmcmVzdWx0LCBzY3JhdGNoKSk7CisgICAgcmVhZF9k
YXRhLmFwcGVuZChyZXN1bHQuZGF0YSgpLCByZXN1bHQuc2l6ZSgpKTsKKyAgICByZWFkICs9IHJl
c3VsdC5zaXplKCk7CisgIH0KKyAgQVNTRVJUX1RSVUUod3JpdGVfZGF0YSA9PSByZWFkX2RhdGEp
OworICBkZWxldGUgc2VxX2ZpbGU7CisgIGRlbGV0ZSBbXSBzY3JhdGNoOworfQorCitURVNUKE1l
bUVudlRlc3QsIERCVGVzdCkgeworICBPcHRpb25zIG9wdGlvbnM7CisgIG9wdGlvbnMuY3JlYXRl
X2lmX21pc3NpbmcgPSB0cnVlOworICBvcHRpb25zLmVudiA9IGVudl87CisgIERCKiBkYjsKKwor
ICBjb25zdCBTbGljZSBrZXlzW10gPSB7U2xpY2UoImFhYSIpLCBTbGljZSgiYmJiIiksIFNsaWNl
KCJjY2MiKX07CisgIGNvbnN0IFNsaWNlIHZhbHNbXSA9IHtTbGljZSgiZm9vIiksIFNsaWNlKCJi
YXIiKSwgU2xpY2UoImJheiIpfTsKKworICBBU1NFUlRfT0soREI6Ok9wZW4ob3B0aW9ucywgIi9k
aXIvZGIiLCAmZGIpKTsKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAzOyArK2kpIHsKKyAgICBB
U1NFUlRfT0soZGItPlB1dChXcml0ZU9wdGlvbnMoKSwga2V5c1tpXSwgdmFsc1tpXSkpOworICB9
CisKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAzOyArK2kpIHsKKyAgICBzdGQ6OnN0cmluZyBy
ZXM7CisgICAgQVNTRVJUX09LKGRiLT5HZXQoUmVhZE9wdGlvbnMoKSwga2V5c1tpXSwgJnJlcykp
OworICAgIEFTU0VSVF9UUlVFKHJlcyA9PSB2YWxzW2ldKTsKKyAgfQorCisgIEl0ZXJhdG9yKiBp
dGVyYXRvciA9IGRiLT5OZXdJdGVyYXRvcihSZWFkT3B0aW9ucygpKTsKKyAgaXRlcmF0b3ItPlNl
ZWtUb0ZpcnN0KCk7CisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMzsgKytpKSB7CisgICAgQVNT
RVJUX1RSVUUoaXRlcmF0b3ItPlZhbGlkKCkpOworICAgIEFTU0VSVF9UUlVFKGtleXNbaV0gPT0g
aXRlcmF0b3ItPmtleSgpKTsKKyAgICBBU1NFUlRfVFJVRSh2YWxzW2ldID09IGl0ZXJhdG9yLT52
YWx1ZSgpKTsKKyAgICBpdGVyYXRvci0+TmV4dCgpOworICB9CisgIEFTU0VSVF9UUlVFKCFpdGVy
YXRvci0+VmFsaWQoKSk7CisgIGRlbGV0ZSBpdGVyYXRvcjsKKworICBEQkltcGwqIGRiaSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8REJJbXBsKj4oZGIpOworICBBU1NFUlRfT0soZGJpLT5URVNUX0NvbXBh
Y3RNZW1UYWJsZSgpKTsKKworICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDM7ICsraSkgeworICAg
IHN0ZDo6c3RyaW5nIHJlczsKKyAgICBBU1NFUlRfT0soZGItPkdldChSZWFkT3B0aW9ucygpLCBr
ZXlzW2ldLCAmcmVzKSk7CisgICAgQVNTRVJUX1RSVUUocmVzID09IHZhbHNbaV0pOworICB9CisK
KyAgZGVsZXRlIGRiOworfQorCit9ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgorCitpbnQgbWFpbihp
bnQgYXJnYywgY2hhcioqIGFyZ3YpIHsKKyAgcmV0dXJuIGxldmVsZGI6OnRlc3Q6OlJ1bkFsbFRl
c3RzKCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2luY2x1ZGUv
bGV2ZWxkYi9jLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2luY2x1ZGUvbGV2ZWxkYi9j
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMWZhNTg4NjZjMzk1OGM2NmQ3YzY4YjI2NGFhNGVlNGNjZGY1MWM2OAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvaW5jbHVkZS9sZXZl
bGRiL2MuaApAQCAtMCwwICsxLDI5MSBAQAorLyogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZl
bERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyAgZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9m
IGNvbnRyaWJ1dG9ycy4KKworICBDIGJpbmRpbmdzIGZvciBsZXZlbGRiLiAgTWF5IGJlIHVzZWZ1
bCBhcyBhIHN0YWJsZSBBQkkgdGhhdCBjYW4gYmUKKyAgdXNlZCBieSBwcm9ncmFtcyB0aGF0IGtl
ZXAgbGV2ZWxkYiBpbiBhIHNoYXJlZCBsaWJyYXJ5LCBvciBmb3IKKyAgYSBKTkkgYXBpLgorCisg
IERvZXMgbm90IHN1cHBvcnQ6CisgIC4gZ2V0dGVycyBmb3IgdGhlIG9wdGlvbiB0eXBlcworICAu
IGN1c3RvbSBjb21wYXJhdG9ycyB0aGF0IGltcGxlbWVudCBrZXkgc2hvcnRlbmluZworICAuIGNh
cHR1cmluZyBwb3N0LXdyaXRlLXNuYXBzaG90CisgIC4gY3VzdG9tIGl0ZXIsIGRiLCBlbnYsIGNh
Y2hlIGltcGxlbWVudGF0aW9ucyB1c2luZyBqdXN0IHRoZSBDIGJpbmRpbmdzCisKKyAgU29tZSBj
b252ZW50aW9uczoKKworICAoMSkgV2UgZXhwb3NlIGp1c3Qgb3BhcXVlIHN0cnVjdCBwb2ludGVy
cyBhbmQgZnVuY3Rpb25zIHRvIGNsaWVudHMuCisgIFRoaXMgYWxsb3dzIHVzIHRvIGNoYW5nZSBp
bnRlcm5hbCByZXByZXNlbnRhdGlvbnMgd2l0aG91dCBoYXZpbmcgdG8KKyAgcmVjb21waWxlIGNs
aWVudHMuCisKKyAgKDIpIEZvciBzaW1wbGljaXR5LCB0aGVyZSBpcyBubyBlcXVpdmFsZW50IHRv
IHRoZSBTbGljZSB0eXBlLiAgSW5zdGVhZCwKKyAgdGhlIGNhbGxlciBoYXMgdG8gcGFzcyB0aGUg
cG9pbnRlciBhbmQgbGVuZ3RoIGFzIHNlcGFyYXRlCisgIGFyZ3VtZW50cy4KKworICAoMykgRXJy
b3JzIGFyZSByZXByZXNlbnRlZCBieSBhIG51bGwtdGVybWluYXRlZCBjIHN0cmluZy4gIE5VTEwK
KyAgbWVhbnMgbm8gZXJyb3IuICBBbGwgb3BlcmF0aW9ucyB0aGF0IGNhbiByYWlzZSBhbiBlcnJv
ciBhcmUgcGFzc2VkCisgIGEgImNoYXIqKiBlcnJwdHIiIGFzIHRoZSBsYXN0IGFyZ3VtZW50LiAg
T25lIG9mIHRoZSBmb2xsb3dpbmcgbXVzdAorICBiZSB0cnVlIG9uIGVudHJ5OgorICAgICAqZXJy
cHRyID09IE5VTEwKKyAgICAgKmVycnB0ciBwb2ludHMgdG8gYSBtYWxsb2MoKWVkIG51bGwtdGVy
bWluYXRlZCBlcnJvciBtZXNzYWdlCisgICAgICAgKE9uIFdpbmRvd3MsICplcnJwdHIgbXVzdCBo
YXZlIGJlZW4gbWFsbG9jKCktZWQgYnkgdGhpcyBsaWJyYXJ5LikKKyAgT24gc3VjY2VzcywgYSBs
ZXZlbGRiIHJvdXRpbmUgbGVhdmVzICplcnJwdHIgdW5jaGFuZ2VkLgorICBPbiBmYWlsdXJlLCBs
ZXZlbGRiIGZyZWVzIHRoZSBvbGQgdmFsdWUgb2YgKmVycnB0ciBhbmQKKyAgc2V0ICplcnJwdHIg
dG8gYSBtYWxsb2MoKWVkIGVycm9yIG1lc3NhZ2UuCisKKyAgKDQpIEJvb2xzIGhhdmUgdGhlIHR5
cGUgdW5zaWduZWQgY2hhciAoMCA9PSBmYWxzZTsgcmVzdCA9PSB0cnVlKQorCisgICg1KSBBbGwg
b2YgdGhlIHBvaW50ZXIgYXJndW1lbnRzIG11c3QgYmUgbm9uLU5VTEwuCisqLworCisjaWZuZGVm
IFNUT1JBR0VfTEVWRUxEQl9JTkNMVURFX0NfSF8KKyNkZWZpbmUgU1RPUkFHRV9MRVZFTERCX0lO
Q0xVREVfQ19IXworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisK
KyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRp
bnQuaD4KKworLyogRXhwb3J0ZWQgdHlwZXMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgbGV2ZWxkYl90
ICAgICAgICAgICAgICAgbGV2ZWxkYl90OwordHlwZWRlZiBzdHJ1Y3QgbGV2ZWxkYl9jYWNoZV90
ICAgICAgICAgbGV2ZWxkYl9jYWNoZV90OwordHlwZWRlZiBzdHJ1Y3QgbGV2ZWxkYl9jb21wYXJh
dG9yX3QgICAgbGV2ZWxkYl9jb21wYXJhdG9yX3Q7Cit0eXBlZGVmIHN0cnVjdCBsZXZlbGRiX2Vu
dl90ICAgICAgICAgICBsZXZlbGRiX2Vudl90OwordHlwZWRlZiBzdHJ1Y3QgbGV2ZWxkYl9maWxl
bG9ja190ICAgICAgbGV2ZWxkYl9maWxlbG9ja190OwordHlwZWRlZiBzdHJ1Y3QgbGV2ZWxkYl9m
aWx0ZXJwb2xpY3lfdCAgbGV2ZWxkYl9maWx0ZXJwb2xpY3lfdDsKK3R5cGVkZWYgc3RydWN0IGxl
dmVsZGJfaXRlcmF0b3JfdCAgICAgIGxldmVsZGJfaXRlcmF0b3JfdDsKK3R5cGVkZWYgc3RydWN0
IGxldmVsZGJfbG9nZ2VyX3QgICAgICAgIGxldmVsZGJfbG9nZ2VyX3Q7Cit0eXBlZGVmIHN0cnVj
dCBsZXZlbGRiX29wdGlvbnNfdCAgICAgICBsZXZlbGRiX29wdGlvbnNfdDsKK3R5cGVkZWYgc3Ry
dWN0IGxldmVsZGJfcmFuZG9tZmlsZV90ICAgIGxldmVsZGJfcmFuZG9tZmlsZV90OwordHlwZWRl
ZiBzdHJ1Y3QgbGV2ZWxkYl9yZWFkb3B0aW9uc190ICAgbGV2ZWxkYl9yZWFkb3B0aW9uc190Owor
dHlwZWRlZiBzdHJ1Y3QgbGV2ZWxkYl9zZXFmaWxlX3QgICAgICAgbGV2ZWxkYl9zZXFmaWxlX3Q7
Cit0eXBlZGVmIHN0cnVjdCBsZXZlbGRiX3NuYXBzaG90X3QgICAgICBsZXZlbGRiX3NuYXBzaG90
X3Q7Cit0eXBlZGVmIHN0cnVjdCBsZXZlbGRiX3dyaXRhYmxlZmlsZV90ICBsZXZlbGRiX3dyaXRh
YmxlZmlsZV90OwordHlwZWRlZiBzdHJ1Y3QgbGV2ZWxkYl93cml0ZWJhdGNoX3QgICAgbGV2ZWxk
Yl93cml0ZWJhdGNoX3Q7Cit0eXBlZGVmIHN0cnVjdCBsZXZlbGRiX3dyaXRlb3B0aW9uc190ICBs
ZXZlbGRiX3dyaXRlb3B0aW9uc190OworCisvKiBEQiBvcGVyYXRpb25zICovCisKK2V4dGVybiBs
ZXZlbGRiX3QqIGxldmVsZGJfb3BlbigKKyAgICBjb25zdCBsZXZlbGRiX29wdGlvbnNfdCogb3B0
aW9ucywKKyAgICBjb25zdCBjaGFyKiBuYW1lLAorICAgIGNoYXIqKiBlcnJwdHIpOworCitleHRl
cm4gdm9pZCBsZXZlbGRiX2Nsb3NlKGxldmVsZGJfdCogZGIpOworCitleHRlcm4gdm9pZCBsZXZl
bGRiX3B1dCgKKyAgICBsZXZlbGRiX3QqIGRiLAorICAgIGNvbnN0IGxldmVsZGJfd3JpdGVvcHRp
b25zX3QqIG9wdGlvbnMsCisgICAgY29uc3QgY2hhcioga2V5LCBzaXplX3Qga2V5bGVuLAorICAg
IGNvbnN0IGNoYXIqIHZhbCwgc2l6ZV90IHZhbGxlbiwKKyAgICBjaGFyKiogZXJycHRyKTsKKwor
ZXh0ZXJuIHZvaWQgbGV2ZWxkYl9kZWxldGUoCisgICAgbGV2ZWxkYl90KiBkYiwKKyAgICBjb25z
dCBsZXZlbGRiX3dyaXRlb3B0aW9uc190KiBvcHRpb25zLAorICAgIGNvbnN0IGNoYXIqIGtleSwg
c2l6ZV90IGtleWxlbiwKKyAgICBjaGFyKiogZXJycHRyKTsKKworZXh0ZXJuIHZvaWQgbGV2ZWxk
Yl93cml0ZSgKKyAgICBsZXZlbGRiX3QqIGRiLAorICAgIGNvbnN0IGxldmVsZGJfd3JpdGVvcHRp
b25zX3QqIG9wdGlvbnMsCisgICAgbGV2ZWxkYl93cml0ZWJhdGNoX3QqIGJhdGNoLAorICAgIGNo
YXIqKiBlcnJwdHIpOworCisvKiBSZXR1cm5zIE5VTEwgaWYgbm90IGZvdW5kLiAgQSBtYWxsb2Mo
KWVkIGFycmF5IG90aGVyd2lzZS4KKyAgIFN0b3JlcyB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSBp
biAqdmFsbGVuLiAqLworZXh0ZXJuIGNoYXIqIGxldmVsZGJfZ2V0KAorICAgIGxldmVsZGJfdCog
ZGIsCisgICAgY29uc3QgbGV2ZWxkYl9yZWFkb3B0aW9uc190KiBvcHRpb25zLAorICAgIGNvbnN0
IGNoYXIqIGtleSwgc2l6ZV90IGtleWxlbiwKKyAgICBzaXplX3QqIHZhbGxlbiwKKyAgICBjaGFy
KiogZXJycHRyKTsKKworZXh0ZXJuIGxldmVsZGJfaXRlcmF0b3JfdCogbGV2ZWxkYl9jcmVhdGVf
aXRlcmF0b3IoCisgICAgbGV2ZWxkYl90KiBkYiwKKyAgICBjb25zdCBsZXZlbGRiX3JlYWRvcHRp
b25zX3QqIG9wdGlvbnMpOworCitleHRlcm4gY29uc3QgbGV2ZWxkYl9zbmFwc2hvdF90KiBsZXZl
bGRiX2NyZWF0ZV9zbmFwc2hvdCgKKyAgICBsZXZlbGRiX3QqIGRiKTsKKworZXh0ZXJuIHZvaWQg
bGV2ZWxkYl9yZWxlYXNlX3NuYXBzaG90KAorICAgIGxldmVsZGJfdCogZGIsCisgICAgY29uc3Qg
bGV2ZWxkYl9zbmFwc2hvdF90KiBzbmFwc2hvdCk7CisKKy8qIFJldHVybnMgTlVMTCBpZiBwcm9w
ZXJ0eSBuYW1lIGlzIHVua25vd24uCisgICBFbHNlIHJldHVybnMgYSBwb2ludGVyIHRvIGEgbWFs
bG9jKCktZWQgbnVsbC10ZXJtaW5hdGVkIHZhbHVlLiAqLworZXh0ZXJuIGNoYXIqIGxldmVsZGJf
cHJvcGVydHlfdmFsdWUoCisgICAgbGV2ZWxkYl90KiBkYiwKKyAgICBjb25zdCBjaGFyKiBwcm9w
bmFtZSk7CisKK2V4dGVybiB2b2lkIGxldmVsZGJfYXBwcm94aW1hdGVfc2l6ZXMoCisgICAgbGV2
ZWxkYl90KiBkYiwKKyAgICBpbnQgbnVtX3JhbmdlcywKKyAgICBjb25zdCBjaGFyKiBjb25zdCog
cmFuZ2Vfc3RhcnRfa2V5LCBjb25zdCBzaXplX3QqIHJhbmdlX3N0YXJ0X2tleV9sZW4sCisgICAg
Y29uc3QgY2hhciogY29uc3QqIHJhbmdlX2xpbWl0X2tleSwgY29uc3Qgc2l6ZV90KiByYW5nZV9s
aW1pdF9rZXlfbGVuLAorICAgIHVpbnQ2NF90KiBzaXplcyk7CisKK2V4dGVybiB2b2lkIGxldmVs
ZGJfY29tcGFjdF9yYW5nZSgKKyAgICBsZXZlbGRiX3QqIGRiLAorICAgIGNvbnN0IGNoYXIqIHN0
YXJ0X2tleSwgc2l6ZV90IHN0YXJ0X2tleV9sZW4sCisgICAgY29uc3QgY2hhciogbGltaXRfa2V5
LCBzaXplX3QgbGltaXRfa2V5X2xlbik7CisKKy8qIE1hbmFnZW1lbnQgb3BlcmF0aW9ucyAqLwor
CitleHRlcm4gdm9pZCBsZXZlbGRiX2Rlc3Ryb3lfZGIoCisgICAgY29uc3QgbGV2ZWxkYl9vcHRp
b25zX3QqIG9wdGlvbnMsCisgICAgY29uc3QgY2hhciogbmFtZSwKKyAgICBjaGFyKiogZXJycHRy
KTsKKworZXh0ZXJuIHZvaWQgbGV2ZWxkYl9yZXBhaXJfZGIoCisgICAgY29uc3QgbGV2ZWxkYl9v
cHRpb25zX3QqIG9wdGlvbnMsCisgICAgY29uc3QgY2hhciogbmFtZSwKKyAgICBjaGFyKiogZXJy
cHRyKTsKKworLyogSXRlcmF0b3IgKi8KKworZXh0ZXJuIHZvaWQgbGV2ZWxkYl9pdGVyX2Rlc3Ry
b3kobGV2ZWxkYl9pdGVyYXRvcl90Kik7CitleHRlcm4gdW5zaWduZWQgY2hhciBsZXZlbGRiX2l0
ZXJfdmFsaWQoY29uc3QgbGV2ZWxkYl9pdGVyYXRvcl90Kik7CitleHRlcm4gdm9pZCBsZXZlbGRi
X2l0ZXJfc2Vla190b19maXJzdChsZXZlbGRiX2l0ZXJhdG9yX3QqKTsKK2V4dGVybiB2b2lkIGxl
dmVsZGJfaXRlcl9zZWVrX3RvX2xhc3QobGV2ZWxkYl9pdGVyYXRvcl90Kik7CitleHRlcm4gdm9p
ZCBsZXZlbGRiX2l0ZXJfc2VlayhsZXZlbGRiX2l0ZXJhdG9yX3QqLCBjb25zdCBjaGFyKiBrLCBz
aXplX3Qga2xlbik7CitleHRlcm4gdm9pZCBsZXZlbGRiX2l0ZXJfbmV4dChsZXZlbGRiX2l0ZXJh
dG9yX3QqKTsKK2V4dGVybiB2b2lkIGxldmVsZGJfaXRlcl9wcmV2KGxldmVsZGJfaXRlcmF0b3Jf
dCopOworZXh0ZXJuIGNvbnN0IGNoYXIqIGxldmVsZGJfaXRlcl9rZXkoY29uc3QgbGV2ZWxkYl9p
dGVyYXRvcl90Kiwgc2l6ZV90KiBrbGVuKTsKK2V4dGVybiBjb25zdCBjaGFyKiBsZXZlbGRiX2l0
ZXJfdmFsdWUoY29uc3QgbGV2ZWxkYl9pdGVyYXRvcl90Kiwgc2l6ZV90KiB2bGVuKTsKK2V4dGVy
biB2b2lkIGxldmVsZGJfaXRlcl9nZXRfZXJyb3IoY29uc3QgbGV2ZWxkYl9pdGVyYXRvcl90Kiwg
Y2hhcioqIGVycnB0cik7CisKKy8qIFdyaXRlIGJhdGNoICovCisKK2V4dGVybiBsZXZlbGRiX3dy
aXRlYmF0Y2hfdCogbGV2ZWxkYl93cml0ZWJhdGNoX2NyZWF0ZSgpOworZXh0ZXJuIHZvaWQgbGV2
ZWxkYl93cml0ZWJhdGNoX2Rlc3Ryb3kobGV2ZWxkYl93cml0ZWJhdGNoX3QqKTsKK2V4dGVybiB2
b2lkIGxldmVsZGJfd3JpdGViYXRjaF9jbGVhcihsZXZlbGRiX3dyaXRlYmF0Y2hfdCopOworZXh0
ZXJuIHZvaWQgbGV2ZWxkYl93cml0ZWJhdGNoX3B1dCgKKyAgICBsZXZlbGRiX3dyaXRlYmF0Y2hf
dCosCisgICAgY29uc3QgY2hhcioga2V5LCBzaXplX3Qga2xlbiwKKyAgICBjb25zdCBjaGFyKiB2
YWwsIHNpemVfdCB2bGVuKTsKK2V4dGVybiB2b2lkIGxldmVsZGJfd3JpdGViYXRjaF9kZWxldGUo
CisgICAgbGV2ZWxkYl93cml0ZWJhdGNoX3QqLAorICAgIGNvbnN0IGNoYXIqIGtleSwgc2l6ZV90
IGtsZW4pOworZXh0ZXJuIHZvaWQgbGV2ZWxkYl93cml0ZWJhdGNoX2l0ZXJhdGUoCisgICAgbGV2
ZWxkYl93cml0ZWJhdGNoX3QqLAorICAgIHZvaWQqIHN0YXRlLAorICAgIHZvaWQgKCpwdXQpKHZv
aWQqLCBjb25zdCBjaGFyKiBrLCBzaXplX3Qga2xlbiwgY29uc3QgY2hhciogdiwgc2l6ZV90IHZs
ZW4pLAorICAgIHZvaWQgKCpkZWxldGVkKSh2b2lkKiwgY29uc3QgY2hhciogaywgc2l6ZV90IGts
ZW4pKTsKKworLyogT3B0aW9ucyAqLworCitleHRlcm4gbGV2ZWxkYl9vcHRpb25zX3QqIGxldmVs
ZGJfb3B0aW9uc19jcmVhdGUoKTsKK2V4dGVybiB2b2lkIGxldmVsZGJfb3B0aW9uc19kZXN0cm95
KGxldmVsZGJfb3B0aW9uc190Kik7CitleHRlcm4gdm9pZCBsZXZlbGRiX29wdGlvbnNfc2V0X2Nv
bXBhcmF0b3IoCisgICAgbGV2ZWxkYl9vcHRpb25zX3QqLAorICAgIGxldmVsZGJfY29tcGFyYXRv
cl90Kik7CitleHRlcm4gdm9pZCBsZXZlbGRiX29wdGlvbnNfc2V0X2ZpbHRlcl9wb2xpY3koCisg
ICAgbGV2ZWxkYl9vcHRpb25zX3QqLAorICAgIGxldmVsZGJfZmlsdGVycG9saWN5X3QqKTsKK2V4
dGVybiB2b2lkIGxldmVsZGJfb3B0aW9uc19zZXRfY3JlYXRlX2lmX21pc3NpbmcoCisgICAgbGV2
ZWxkYl9vcHRpb25zX3QqLCB1bnNpZ25lZCBjaGFyKTsKK2V4dGVybiB2b2lkIGxldmVsZGJfb3B0
aW9uc19zZXRfZXJyb3JfaWZfZXhpc3RzKAorICAgIGxldmVsZGJfb3B0aW9uc190KiwgdW5zaWdu
ZWQgY2hhcik7CitleHRlcm4gdm9pZCBsZXZlbGRiX29wdGlvbnNfc2V0X3BhcmFub2lkX2NoZWNr
cygKKyAgICBsZXZlbGRiX29wdGlvbnNfdCosIHVuc2lnbmVkIGNoYXIpOworZXh0ZXJuIHZvaWQg
bGV2ZWxkYl9vcHRpb25zX3NldF9lbnYobGV2ZWxkYl9vcHRpb25zX3QqLCBsZXZlbGRiX2Vudl90
Kik7CitleHRlcm4gdm9pZCBsZXZlbGRiX29wdGlvbnNfc2V0X2luZm9fbG9nKGxldmVsZGJfb3B0
aW9uc190KiwgbGV2ZWxkYl9sb2dnZXJfdCopOworZXh0ZXJuIHZvaWQgbGV2ZWxkYl9vcHRpb25z
X3NldF93cml0ZV9idWZmZXJfc2l6ZShsZXZlbGRiX29wdGlvbnNfdCosIHNpemVfdCk7CitleHRl
cm4gdm9pZCBsZXZlbGRiX29wdGlvbnNfc2V0X21heF9vcGVuX2ZpbGVzKGxldmVsZGJfb3B0aW9u
c190KiwgaW50KTsKK2V4dGVybiB2b2lkIGxldmVsZGJfb3B0aW9uc19zZXRfY2FjaGUobGV2ZWxk
Yl9vcHRpb25zX3QqLCBsZXZlbGRiX2NhY2hlX3QqKTsKK2V4dGVybiB2b2lkIGxldmVsZGJfb3B0
aW9uc19zZXRfYmxvY2tfc2l6ZShsZXZlbGRiX29wdGlvbnNfdCosIHNpemVfdCk7CitleHRlcm4g
dm9pZCBsZXZlbGRiX29wdGlvbnNfc2V0X2Jsb2NrX3Jlc3RhcnRfaW50ZXJ2YWwobGV2ZWxkYl9v
cHRpb25zX3QqLCBpbnQpOworCitlbnVtIHsKKyAgbGV2ZWxkYl9ub19jb21wcmVzc2lvbiA9IDAs
CisgIGxldmVsZGJfc25hcHB5X2NvbXByZXNzaW9uID0gMQorfTsKK2V4dGVybiB2b2lkIGxldmVs
ZGJfb3B0aW9uc19zZXRfY29tcHJlc3Npb24obGV2ZWxkYl9vcHRpb25zX3QqLCBpbnQpOworCisv
KiBDb21wYXJhdG9yICovCisKK2V4dGVybiBsZXZlbGRiX2NvbXBhcmF0b3JfdCogbGV2ZWxkYl9j
b21wYXJhdG9yX2NyZWF0ZSgKKyAgICB2b2lkKiBzdGF0ZSwKKyAgICB2b2lkICgqZGVzdHJ1Y3Rv
cikodm9pZCopLAorICAgIGludCAoKmNvbXBhcmUpKAorICAgICAgICB2b2lkKiwKKyAgICAgICAg
Y29uc3QgY2hhciogYSwgc2l6ZV90IGFsZW4sCisgICAgICAgIGNvbnN0IGNoYXIqIGIsIHNpemVf
dCBibGVuKSwKKyAgICBjb25zdCBjaGFyKiAoKm5hbWUpKHZvaWQqKSk7CitleHRlcm4gdm9pZCBs
ZXZlbGRiX2NvbXBhcmF0b3JfZGVzdHJveShsZXZlbGRiX2NvbXBhcmF0b3JfdCopOworCisvKiBG
aWx0ZXIgcG9saWN5ICovCisKK2V4dGVybiBsZXZlbGRiX2ZpbHRlcnBvbGljeV90KiBsZXZlbGRi
X2ZpbHRlcnBvbGljeV9jcmVhdGUoCisgICAgdm9pZCogc3RhdGUsCisgICAgdm9pZCAoKmRlc3Ry
dWN0b3IpKHZvaWQqKSwKKyAgICBjaGFyKiAoKmNyZWF0ZV9maWx0ZXIpKAorICAgICAgICB2b2lk
KiwKKyAgICAgICAgY29uc3QgY2hhciogY29uc3QqIGtleV9hcnJheSwgY29uc3Qgc2l6ZV90KiBr
ZXlfbGVuZ3RoX2FycmF5LAorICAgICAgICBpbnQgbnVtX2tleXMsCisgICAgICAgIHNpemVfdCog
ZmlsdGVyX2xlbmd0aCksCisgICAgdW5zaWduZWQgY2hhciAoKmtleV9tYXlfbWF0Y2gpKAorICAg
ICAgICB2b2lkKiwKKyAgICAgICAgY29uc3QgY2hhcioga2V5LCBzaXplX3QgbGVuZ3RoLAorICAg
ICAgICBjb25zdCBjaGFyKiBmaWx0ZXIsIHNpemVfdCBmaWx0ZXJfbGVuZ3RoKSwKKyAgICBjb25z
dCBjaGFyKiAoKm5hbWUpKHZvaWQqKSk7CitleHRlcm4gdm9pZCBsZXZlbGRiX2ZpbHRlcnBvbGlj
eV9kZXN0cm95KGxldmVsZGJfZmlsdGVycG9saWN5X3QqKTsKKworZXh0ZXJuIGxldmVsZGJfZmls
dGVycG9saWN5X3QqIGxldmVsZGJfZmlsdGVycG9saWN5X2NyZWF0ZV9ibG9vbSgKKyAgICBpbnQg
Yml0c19wZXJfa2V5KTsKKworLyogUmVhZCBvcHRpb25zICovCisKK2V4dGVybiBsZXZlbGRiX3Jl
YWRvcHRpb25zX3QqIGxldmVsZGJfcmVhZG9wdGlvbnNfY3JlYXRlKCk7CitleHRlcm4gdm9pZCBs
ZXZlbGRiX3JlYWRvcHRpb25zX2Rlc3Ryb3kobGV2ZWxkYl9yZWFkb3B0aW9uc190Kik7CitleHRl
cm4gdm9pZCBsZXZlbGRiX3JlYWRvcHRpb25zX3NldF92ZXJpZnlfY2hlY2tzdW1zKAorICAgIGxl
dmVsZGJfcmVhZG9wdGlvbnNfdCosCisgICAgdW5zaWduZWQgY2hhcik7CitleHRlcm4gdm9pZCBs
ZXZlbGRiX3JlYWRvcHRpb25zX3NldF9maWxsX2NhY2hlKAorICAgIGxldmVsZGJfcmVhZG9wdGlv
bnNfdCosIHVuc2lnbmVkIGNoYXIpOworZXh0ZXJuIHZvaWQgbGV2ZWxkYl9yZWFkb3B0aW9uc19z
ZXRfc25hcHNob3QoCisgICAgbGV2ZWxkYl9yZWFkb3B0aW9uc190KiwKKyAgICBjb25zdCBsZXZl
bGRiX3NuYXBzaG90X3QqKTsKKworLyogV3JpdGUgb3B0aW9ucyAqLworCitleHRlcm4gbGV2ZWxk
Yl93cml0ZW9wdGlvbnNfdCogbGV2ZWxkYl93cml0ZW9wdGlvbnNfY3JlYXRlKCk7CitleHRlcm4g
dm9pZCBsZXZlbGRiX3dyaXRlb3B0aW9uc19kZXN0cm95KGxldmVsZGJfd3JpdGVvcHRpb25zX3Qq
KTsKK2V4dGVybiB2b2lkIGxldmVsZGJfd3JpdGVvcHRpb25zX3NldF9zeW5jKAorICAgIGxldmVs
ZGJfd3JpdGVvcHRpb25zX3QqLCB1bnNpZ25lZCBjaGFyKTsKKworLyogQ2FjaGUgKi8KKworZXh0
ZXJuIGxldmVsZGJfY2FjaGVfdCogbGV2ZWxkYl9jYWNoZV9jcmVhdGVfbHJ1KHNpemVfdCBjYXBh
Y2l0eSk7CitleHRlcm4gdm9pZCBsZXZlbGRiX2NhY2hlX2Rlc3Ryb3kobGV2ZWxkYl9jYWNoZV90
KiBjYWNoZSk7CisKKy8qIEVudiAqLworCitleHRlcm4gbGV2ZWxkYl9lbnZfdCogbGV2ZWxkYl9j
cmVhdGVfZGVmYXVsdF9lbnYoKTsKK2V4dGVybiB2b2lkIGxldmVsZGJfZW52X2Rlc3Ryb3kobGV2
ZWxkYl9lbnZfdCopOworCisvKiBVdGlsaXR5ICovCisKKy8qIENhbGxzIGZyZWUocHRyKS4KKyAg
IFJFUVVJUkVTOiBwdHIgd2FzIG1hbGxvYygpLWVkIGFuZCByZXR1cm5lZCBieSBvbmUgb2YgdGhl
IHJvdXRpbmVzCisgICBpbiB0aGlzIGZpbGUuICBOb3RlIHRoYXQgaW4gY2VydGFpbiBjYXNlcyAo
dHlwaWNhbGx5IG9uIFdpbmRvd3MpLCB5b3UKKyAgIG1heSBuZWVkIHRvIGNhbGwgdGhpcyByb3V0
aW5lIGluc3RlYWQgb2YgZnJlZShwdHIpIHRvIGRpc3Bvc2Ugb2YKKyAgIG1hbGxvYygpLWVkIG1l
bW9yeSByZXR1cm5lZCBieSB0aGlzIGxpYnJhcnkuICovCitleHRlcm4gdm9pZCBsZXZlbGRiX2Zy
ZWUodm9pZCogcHRyKTsKKworLyogUmV0dXJuIHRoZSBtYWpvciB2ZXJzaW9uIG51bWJlciBmb3Ig
dGhpcyByZWxlYXNlLiAqLworZXh0ZXJuIGludCBsZXZlbGRiX21ham9yX3ZlcnNpb24oKTsKKwor
LyogUmV0dXJuIHRoZSBtaW5vciB2ZXJzaW9uIG51bWJlciBmb3IgdGhpcyByZWxlYXNlLiAqLwor
ZXh0ZXJuIGludCBsZXZlbGRiX21pbm9yX3ZlcnNpb24oKTsKKworI2lmZGVmIF9fY3BsdXNwbHVz
Cit9ICAvKiBlbmQgZXh0ZXJuICJDIiAqLworI2VuZGlmCisKKyNlbmRpZiAgLyogU1RPUkFHRV9M
RVZFTERCX0lOQ0xVREVfQ19IXyAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2
ZWxkYi9pbmNsdWRlL2xldmVsZGIvY2FjaGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIv
aW5jbHVkZS9sZXZlbGRiL2NhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWUzYjQ3NjM3ZDQ5ZTlmOTYzYjE0
MWRjNWEwMTFlMTI3MjYxNTc1MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xldmVsZGIvaW5jbHVkZS9sZXZlbGRiL2NhY2hlLmgKQEAgLTAsMCArMSw5OSBAQAorLy8gQ29w
eXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhl
IEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgorLy8KKy8vIEEgQ2FjaGUg
aXMgYW4gaW50ZXJmYWNlIHRoYXQgbWFwcyBrZXlzIHRvIHZhbHVlcy4gIEl0IGhhcyBpbnRlcm5h
bAorLy8gc3luY2hyb25pemF0aW9uIGFuZCBtYXkgYmUgc2FmZWx5IGFjY2Vzc2VkIGNvbmN1cnJl
bnRseSBmcm9tCisvLyBtdWx0aXBsZSB0aHJlYWRzLiAgSXQgbWF5IGF1dG9tYXRpY2FsbHkgZXZp
Y3QgZW50cmllcyB0byBtYWtlIHJvb20KKy8vIGZvciBuZXcgZW50cmllcy4gIFZhbHVlcyBoYXZl
IGEgc3BlY2lmaWVkIGNoYXJnZSBhZ2FpbnN0IHRoZSBjYWNoZQorLy8gY2FwYWNpdHkuICBGb3Ig
ZXhhbXBsZSwgYSBjYWNoZSB3aGVyZSB0aGUgdmFsdWVzIGFyZSB2YXJpYWJsZQorLy8gbGVuZ3Ro
IHN0cmluZ3MsIG1heSB1c2UgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIGFzIHRoZSBjaGFyZ2Ug
Zm9yCisvLyB0aGUgc3RyaW5nLgorLy8KKy8vIEEgYnVpbHRpbiBjYWNoZSBpbXBsZW1lbnRhdGlv
biB3aXRoIGEgbGVhc3QtcmVjZW50bHktdXNlZCBldmljdGlvbgorLy8gcG9saWN5IGlzIHByb3Zp
ZGVkLiAgQ2xpZW50cyBtYXkgdXNlIHRoZWlyIG93biBpbXBsZW1lbnRhdGlvbnMgaWYKKy8vIHRo
ZXkgd2FudCBzb21ldGhpbmcgbW9yZSBzb3BoaXN0aWNhdGVkIChsaWtlIHNjYW4tcmVzaXN0YW5j
ZSwgYQorLy8gY3VzdG9tIGV2aWN0aW9uIHBvbGljeSwgdmFyaWFibGUgY2FjaGUgc2l6aW5nLCBl
dGMuKQorCisjaWZuZGVmIFNUT1JBR0VfTEVWRUxEQl9JTkNMVURFX0NBQ0hFX0hfCisjZGVmaW5l
IFNUT1JBR0VfTEVWRUxEQl9JTkNMVURFX0NBQ0hFX0hfCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4K
KyNpbmNsdWRlICJsZXZlbGRiL3NsaWNlLmgiCisKK25hbWVzcGFjZSBsZXZlbGRiIHsKKworY2xh
c3MgQ2FjaGU7CisKKy8vIENyZWF0ZSBhIG5ldyBjYWNoZSB3aXRoIGEgZml4ZWQgc2l6ZSBjYXBh
Y2l0eS4gIFRoaXMgaW1wbGVtZW50YXRpb24KKy8vIG9mIENhY2hlIHVzZXMgYSBsZWFzdC1yZWNl
bnRseS11c2VkIGV2aWN0aW9uIHBvbGljeS4KK2V4dGVybiBDYWNoZSogTmV3TFJVQ2FjaGUoc2l6
ZV90IGNhcGFjaXR5KTsKKworY2xhc3MgQ2FjaGUgeworIHB1YmxpYzoKKyAgQ2FjaGUoKSB7IH0K
KworICAvLyBEZXN0cm95cyBhbGwgZXhpc3RpbmcgZW50cmllcyBieSBjYWxsaW5nIHRoZSAiZGVs
ZXRlciIKKyAgLy8gZnVuY3Rpb24gdGhhdCB3YXMgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3Rvci4K
KyAgdmlydHVhbCB+Q2FjaGUoKTsKKworICAvLyBPcGFxdWUgaGFuZGxlIHRvIGFuIGVudHJ5IHN0
b3JlZCBpbiB0aGUgY2FjaGUuCisgIHN0cnVjdCBIYW5kbGUgeyB9OworCisgIC8vIEluc2VydCBh
IG1hcHBpbmcgZnJvbSBrZXktPnZhbHVlIGludG8gdGhlIGNhY2hlIGFuZCBhc3NpZ24gaXQKKyAg
Ly8gdGhlIHNwZWNpZmllZCBjaGFyZ2UgYWdhaW5zdCB0aGUgdG90YWwgY2FjaGUgY2FwYWNpdHku
CisgIC8vCisgIC8vIFJldHVybnMgYSBoYW5kbGUgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgbWFw
cGluZy4gIFRoZSBjYWxsZXIKKyAgLy8gbXVzdCBjYWxsIHRoaXMtPlJlbGVhc2UoaGFuZGxlKSB3
aGVuIHRoZSByZXR1cm5lZCBtYXBwaW5nIGlzIG5vCisgIC8vIGxvbmdlciBuZWVkZWQuCisgIC8v
CisgIC8vIFdoZW4gdGhlIGluc2VydGVkIGVudHJ5IGlzIG5vIGxvbmdlciBuZWVkZWQsIHRoZSBr
ZXkgYW5kCisgIC8vIHZhbHVlIHdpbGwgYmUgcGFzc2VkIHRvICJkZWxldGVyIi4KKyAgdmlydHVh
bCBIYW5kbGUqIEluc2VydChjb25zdCBTbGljZSYga2V5LCB2b2lkKiB2YWx1ZSwgc2l6ZV90IGNo
YXJnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqZGVsZXRlcikoY29uc3QgU2xp
Y2UmIGtleSwgdm9pZCogdmFsdWUpKSA9IDA7CisKKyAgLy8gSWYgdGhlIGNhY2hlIGhhcyBubyBt
YXBwaW5nIGZvciAia2V5IiwgcmV0dXJucyBOVUxMLgorICAvLworICAvLyBFbHNlIHJldHVybiBh
IGhhbmRsZSB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBtYXBwaW5nLiAgVGhlIGNhbGxlcgorICAv
LyBtdXN0IGNhbGwgdGhpcy0+UmVsZWFzZShoYW5kbGUpIHdoZW4gdGhlIHJldHVybmVkIG1hcHBp
bmcgaXMgbm8KKyAgLy8gbG9uZ2VyIG5lZWRlZC4KKyAgdmlydHVhbCBIYW5kbGUqIExvb2t1cChj
b25zdCBTbGljZSYga2V5KSA9IDA7CisKKyAgLy8gUmVsZWFzZSBhIG1hcHBpbmcgcmV0dXJuZWQg
YnkgYSBwcmV2aW91cyBMb29rdXAoKS4KKyAgLy8gUkVRVUlSRVM6IGhhbmRsZSBtdXN0IG5vdCBo
YXZlIGJlZW4gcmVsZWFzZWQgeWV0LgorICAvLyBSRVFVSVJFUzogaGFuZGxlIG11c3QgaGF2ZSBi
ZWVuIHJldHVybmVkIGJ5IGEgbWV0aG9kIG9uICp0aGlzLgorICB2aXJ0dWFsIHZvaWQgUmVsZWFz
ZShIYW5kbGUqIGhhbmRsZSkgPSAwOworCisgIC8vIFJldHVybiB0aGUgdmFsdWUgZW5jYXBzdWxh
dGVkIGluIGEgaGFuZGxlIHJldHVybmVkIGJ5IGEKKyAgLy8gc3VjY2Vzc2Z1bCBMb29rdXAoKS4K
KyAgLy8gUkVRVUlSRVM6IGhhbmRsZSBtdXN0IG5vdCBoYXZlIGJlZW4gcmVsZWFzZWQgeWV0Lgor
ICAvLyBSRVFVSVJFUzogaGFuZGxlIG11c3QgaGF2ZSBiZWVuIHJldHVybmVkIGJ5IGEgbWV0aG9k
IG9uICp0aGlzLgorICB2aXJ0dWFsIHZvaWQqIFZhbHVlKEhhbmRsZSogaGFuZGxlKSA9IDA7CisK
KyAgLy8gSWYgdGhlIGNhY2hlIGNvbnRhaW5zIGVudHJ5IGZvciBrZXksIGVyYXNlIGl0LiAgTm90
ZSB0aGF0IHRoZQorICAvLyB1bmRlcmx5aW5nIGVudHJ5IHdpbGwgYmUga2VwdCBhcm91bmQgdW50
aWwgYWxsIGV4aXN0aW5nIGhhbmRsZXMKKyAgLy8gdG8gaXQgaGF2ZSBiZWVuIHJlbGVhc2VkLgor
ICB2aXJ0dWFsIHZvaWQgRXJhc2UoY29uc3QgU2xpY2UmIGtleSkgPSAwOworCisgIC8vIFJldHVy
biBhIG5ldyBudW1lcmljIGlkLiAgTWF5IGJlIHVzZWQgYnkgbXVsdGlwbGUgY2xpZW50cyB3aG8g
YXJlCisgIC8vIHNoYXJpbmcgdGhlIHNhbWUgY2FjaGUgdG8gcGFydGl0aW9uIHRoZSBrZXkgc3Bh
Y2UuICBUeXBpY2FsbHkgdGhlCisgIC8vIGNsaWVudCB3aWxsIGFsbG9jYXRlIGEgbmV3IGlkIGF0
IHN0YXJ0dXAgYW5kIHByZXBlbmQgdGhlIGlkIHRvCisgIC8vIGl0cyBjYWNoZSBrZXlzLgorICB2
aXJ0dWFsIHVpbnQ2NF90IE5ld0lkKCkgPSAwOworCisgcHJpdmF0ZToKKyAgdm9pZCBMUlVfUmVt
b3ZlKEhhbmRsZSogZSk7CisgIHZvaWQgTFJVX0FwcGVuZChIYW5kbGUqIGUpOworICB2b2lkIFVu
cmVmKEhhbmRsZSogZSk7CisKKyAgc3RydWN0IFJlcDsKKyAgUmVwKiByZXBfOworCisgIC8vIE5v
IGNvcHlpbmcgYWxsb3dlZAorICBDYWNoZShjb25zdCBDYWNoZSYpOworICB2b2lkIG9wZXJhdG9y
PShjb25zdCBDYWNoZSYpOworfTsKKworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKKworI2VuZGlm
ICAvLyBTVE9SQUdFX0xFVkVMREJfVVRJTF9DQUNIRV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvbGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvY29tcGFyYXRvci5oIGIvU291cmNlL1Ro
aXJkUGFydHkvbGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvY29tcGFyYXRvci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjU1NmI5ODRjNzY5NGY2NTIwMDg4NzU0ZjMwMTdiZjU4YzdjYWZjOWQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2luY2x1ZGUvbGV2ZWxkYi9jb21wYXJhdG9y
LmgKQEAgLTAsMCArMSw2MyBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29u
dHJpYnV0b3JzLgorCisjaWZuZGVmIFNUT1JBR0VfTEVWRUxEQl9JTkNMVURFX0NPTVBBUkFUT1Jf
SF8KKyNkZWZpbmUgU1RPUkFHRV9MRVZFTERCX0lOQ0xVREVfQ09NUEFSQVRPUl9IXworCisjaW5j
bHVkZSA8c3RyaW5nPgorCituYW1lc3BhY2UgbGV2ZWxkYiB7CisKK2NsYXNzIFNsaWNlOworCisv
LyBBIENvbXBhcmF0b3Igb2JqZWN0IHByb3ZpZGVzIGEgdG90YWwgb3JkZXIgYWNyb3NzIHNsaWNl
cyB0aGF0IGFyZQorLy8gdXNlZCBhcyBrZXlzIGluIGFuIHNzdGFibGUgb3IgYSBkYXRhYmFzZS4g
IEEgQ29tcGFyYXRvciBpbXBsZW1lbnRhdGlvbgorLy8gbXVzdCBiZSB0aHJlYWQtc2FmZSBzaW5j
ZSBsZXZlbGRiIG1heSBpbnZva2UgaXRzIG1ldGhvZHMgY29uY3VycmVudGx5CisvLyBmcm9tIG11
bHRpcGxlIHRocmVhZHMuCitjbGFzcyBDb21wYXJhdG9yIHsKKyBwdWJsaWM6CisgIHZpcnR1YWwg
fkNvbXBhcmF0b3IoKTsKKworICAvLyBUaHJlZS13YXkgY29tcGFyaXNvbi4gIFJldHVybnMgdmFs
dWU6CisgIC8vICAgPCAwIGlmZiAiYSIgPCAiYiIsCisgIC8vICAgPT0gMCBpZmYgImEiID09ICJi
IiwKKyAgLy8gICA+IDAgaWZmICJhIiA+ICJiIgorICB2aXJ0dWFsIGludCBDb21wYXJlKGNvbnN0
IFNsaWNlJiBhLCBjb25zdCBTbGljZSYgYikgY29uc3QgPSAwOworCisgIC8vIFRoZSBuYW1lIG9m
IHRoZSBjb21wYXJhdG9yLiAgVXNlZCB0byBjaGVjayBmb3IgY29tcGFyYXRvcgorICAvLyBtaXNt
YXRjaGVzIChpLmUuLCBhIERCIGNyZWF0ZWQgd2l0aCBvbmUgY29tcGFyYXRvciBpcworICAvLyBh
Y2Nlc3NlZCB1c2luZyBhIGRpZmZlcmVudCBjb21wYXJhdG9yLgorICAvLworICAvLyBUaGUgY2xp
ZW50IG9mIHRoaXMgcGFja2FnZSBzaG91bGQgc3dpdGNoIHRvIGEgbmV3IG5hbWUgd2hlbmV2ZXIK
KyAgLy8gdGhlIGNvbXBhcmF0b3IgaW1wbGVtZW50YXRpb24gY2hhbmdlcyBpbiBhIHdheSB0aGF0
IHdpbGwgY2F1c2UKKyAgLy8gdGhlIHJlbGF0aXZlIG9yZGVyaW5nIG9mIGFueSB0d28ga2V5cyB0
byBjaGFuZ2UuCisgIC8vCisgIC8vIE5hbWVzIHN0YXJ0aW5nIHdpdGggImxldmVsZGIuIiBhcmUg
cmVzZXJ2ZWQgYW5kIHNob3VsZCBub3QgYmUgdXNlZAorICAvLyBieSBhbnkgY2xpZW50cyBvZiB0
aGlzIHBhY2thZ2UuCisgIHZpcnR1YWwgY29uc3QgY2hhciogTmFtZSgpIGNvbnN0ID0gMDsKKwor
ICAvLyBBZHZhbmNlZCBmdW5jdGlvbnM6IHRoZXNlIGFyZSB1c2VkIHRvIHJlZHVjZSB0aGUgc3Bh
Y2UgcmVxdWlyZW1lbnRzCisgIC8vIGZvciBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgbGlrZSBp
bmRleCBibG9ja3MuCisKKyAgLy8gSWYgKnN0YXJ0IDwgbGltaXQsIGNoYW5nZXMgKnN0YXJ0IHRv
IGEgc2hvcnQgc3RyaW5nIGluIFtzdGFydCxsaW1pdCkuCisgIC8vIFNpbXBsZSBjb21wYXJhdG9y
IGltcGxlbWVudGF0aW9ucyBtYXkgcmV0dXJuIHdpdGggKnN0YXJ0IHVuY2hhbmdlZCwKKyAgLy8g
aS5lLiwgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2QgdGhhdCBkb2VzIG5vdGhpbmcg
aXMgY29ycmVjdC4KKyAgdmlydHVhbCB2b2lkIEZpbmRTaG9ydGVzdFNlcGFyYXRvcigKKyAgICAg
IHN0ZDo6c3RyaW5nKiBzdGFydCwKKyAgICAgIGNvbnN0IFNsaWNlJiBsaW1pdCkgY29uc3QgPSAw
OworCisgIC8vIENoYW5nZXMgKmtleSB0byBhIHNob3J0IHN0cmluZyA+PSAqa2V5LgorICAvLyBT
aW1wbGUgY29tcGFyYXRvciBpbXBsZW1lbnRhdGlvbnMgbWF5IHJldHVybiB3aXRoICprZXkgdW5j
aGFuZ2VkLAorICAvLyBpLmUuLCBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1ldGhvZCB0aGF0
IGRvZXMgbm90aGluZyBpcyBjb3JyZWN0LgorICB2aXJ0dWFsIHZvaWQgRmluZFNob3J0U3VjY2Vz
c29yKHN0ZDo6c3RyaW5nKiBrZXkpIGNvbnN0ID0gMDsKK307CisKKy8vIFJldHVybiBhIGJ1aWx0
aW4gY29tcGFyYXRvciB0aGF0IHVzZXMgbGV4aWNvZ3JhcGhpYyBieXRlLXdpc2UKKy8vIG9yZGVy
aW5nLiAgVGhlIHJlc3VsdCByZW1haW5zIHRoZSBwcm9wZXJ0eSBvZiB0aGlzIG1vZHVsZSBhbmQK
Ky8vIG11c3Qgbm90IGJlIGRlbGV0ZWQuCitleHRlcm4gY29uc3QgQ29tcGFyYXRvciogQnl0ZXdp
c2VDb21wYXJhdG9yKCk7CisKK30gIC8vIG5hbWVzcGFjZSBsZXZlbGRiCisKKyNlbmRpZiAgLy8g
U1RPUkFHRV9MRVZFTERCX0lOQ0xVREVfQ09NUEFSQVRPUl9IXwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvZGIuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xldmVsZGIvaW5jbHVkZS9sZXZlbGRiL2RiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjlkMzY3NDQ3OTA3
MDYzOTc1NjA4ZDc0MmM4YTI5YTc5OTg0OGZiNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xldmVsZGIvaW5jbHVkZS9sZXZlbGRiL2RiLmgKQEAgLTAsMCArMSwxNjEgQEAK
Ky8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4g
U2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2lmbmRl
ZiBTVE9SQUdFX0xFVkVMREJfSU5DTFVERV9EQl9IXworI2RlZmluZSBTVE9SQUdFX0xFVkVMREJf
SU5DTFVERV9EQl9IXworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4K
KyNpbmNsdWRlICJsZXZlbGRiL2l0ZXJhdG9yLmgiCisjaW5jbHVkZSAibGV2ZWxkYi9vcHRpb25z
LmgiCisKK25hbWVzcGFjZSBsZXZlbGRiIHsKKworLy8gVXBkYXRlIE1ha2VmaWxlIGlmIHlvdSBj
aGFuZ2UgdGhlc2UKK3N0YXRpYyBjb25zdCBpbnQga01ham9yVmVyc2lvbiA9IDE7CitzdGF0aWMg
Y29uc3QgaW50IGtNaW5vclZlcnNpb24gPSA5OworCitzdHJ1Y3QgT3B0aW9uczsKK3N0cnVjdCBS
ZWFkT3B0aW9uczsKK3N0cnVjdCBXcml0ZU9wdGlvbnM7CitjbGFzcyBXcml0ZUJhdGNoOworCisv
LyBBYnN0cmFjdCBoYW5kbGUgdG8gcGFydGljdWxhciBzdGF0ZSBvZiBhIERCLgorLy8gQSBTbmFw
c2hvdCBpcyBhbiBpbW11dGFibGUgb2JqZWN0IGFuZCBjYW4gdGhlcmVmb3JlIGJlIHNhZmVseQor
Ly8gYWNjZXNzZWQgZnJvbSBtdWx0aXBsZSB0aHJlYWRzIHdpdGhvdXQgYW55IGV4dGVybmFsIHN5
bmNocm9uaXphdGlvbi4KK2NsYXNzIFNuYXBzaG90IHsKKyBwcm90ZWN0ZWQ6CisgIHZpcnR1YWwg
flNuYXBzaG90KCk7Cit9OworCisvLyBBIHJhbmdlIG9mIGtleXMKK3N0cnVjdCBSYW5nZSB7Cisg
IFNsaWNlIHN0YXJ0OyAgICAgICAgICAvLyBJbmNsdWRlZCBpbiB0aGUgcmFuZ2UKKyAgU2xpY2Ug
bGltaXQ7ICAgICAgICAgIC8vIE5vdCBpbmNsdWRlZCBpbiB0aGUgcmFuZ2UKKworICBSYW5nZSgp
IHsgfQorICBSYW5nZShjb25zdCBTbGljZSYgcywgY29uc3QgU2xpY2UmIGwpIDogc3RhcnQocyks
IGxpbWl0KGwpIHsgfQorfTsKKworLy8gQSBEQiBpcyBhIHBlcnNpc3RlbnQgb3JkZXJlZCBtYXAg
ZnJvbSBrZXlzIHRvIHZhbHVlcy4KKy8vIEEgREIgaXMgc2FmZSBmb3IgY29uY3VycmVudCBhY2Nl
c3MgZnJvbSBtdWx0aXBsZSB0aHJlYWRzIHdpdGhvdXQKKy8vIGFueSBleHRlcm5hbCBzeW5jaHJv
bml6YXRpb24uCitjbGFzcyBEQiB7CisgcHVibGljOgorICAvLyBPcGVuIHRoZSBkYXRhYmFzZSB3
aXRoIHRoZSBzcGVjaWZpZWQgIm5hbWUiLgorICAvLyBTdG9yZXMgYSBwb2ludGVyIHRvIGEgaGVh
cC1hbGxvY2F0ZWQgZGF0YWJhc2UgaW4gKmRicHRyIGFuZCByZXR1cm5zCisgIC8vIE9LIG9uIHN1
Y2Nlc3MuCisgIC8vIFN0b3JlcyBOVUxMIGluICpkYnB0ciBhbmQgcmV0dXJucyBhIG5vbi1PSyBz
dGF0dXMgb24gZXJyb3IuCisgIC8vIENhbGxlciBzaG91bGQgZGVsZXRlICpkYnB0ciB3aGVuIGl0
IGlzIG5vIGxvbmdlciBuZWVkZWQuCisgIHN0YXRpYyBTdGF0dXMgT3Blbihjb25zdCBPcHRpb25z
JiBvcHRpb25zLAorICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUs
CisgICAgICAgICAgICAgICAgICAgICBEQioqIGRicHRyKTsKKworICBEQigpIHsgfQorICB2aXJ0
dWFsIH5EQigpOworCisgIC8vIFNldCB0aGUgZGF0YWJhc2UgZW50cnkgZm9yICJrZXkiIHRvICJ2
YWx1ZSIuICBSZXR1cm5zIE9LIG9uIHN1Y2Nlc3MsCisgIC8vIGFuZCBhIG5vbi1PSyBzdGF0dXMg
b24gZXJyb3IuCisgIC8vIE5vdGU6IGNvbnNpZGVyIHNldHRpbmcgb3B0aW9ucy5zeW5jID0gdHJ1
ZS4KKyAgdmlydHVhbCBTdGF0dXMgUHV0KGNvbnN0IFdyaXRlT3B0aW9ucyYgb3B0aW9ucywKKyAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFNsaWNlJiBrZXksCisgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBTbGljZSYgdmFsdWUpID0gMDsKKworICAvLyBSZW1vdmUgdGhlIGRhdGFiYXNlIGVu
dHJ5IChpZiBhbnkpIGZvciAia2V5Ii4gIFJldHVybnMgT0sgb24KKyAgLy8gc3VjY2VzcywgYW5k
IGEgbm9uLU9LIHN0YXR1cyBvbiBlcnJvci4gIEl0IGlzIG5vdCBhbiBlcnJvciBpZiAia2V5Igor
ICAvLyBkaWQgbm90IGV4aXN0IGluIHRoZSBkYXRhYmFzZS4KKyAgLy8gTm90ZTogY29uc2lkZXIg
c2V0dGluZyBvcHRpb25zLnN5bmMgPSB0cnVlLgorICB2aXJ0dWFsIFN0YXR1cyBEZWxldGUoY29u
c3QgV3JpdGVPcHRpb25zJiBvcHRpb25zLCBjb25zdCBTbGljZSYga2V5KSA9IDA7CisKKyAgLy8g
QXBwbHkgdGhlIHNwZWNpZmllZCB1cGRhdGVzIHRvIHRoZSBkYXRhYmFzZS4KKyAgLy8gUmV0dXJu
cyBPSyBvbiBzdWNjZXNzLCBub24tT0sgb24gZmFpbHVyZS4KKyAgLy8gTm90ZTogY29uc2lkZXIg
c2V0dGluZyBvcHRpb25zLnN5bmMgPSB0cnVlLgorICB2aXJ0dWFsIFN0YXR1cyBXcml0ZShjb25z
dCBXcml0ZU9wdGlvbnMmIG9wdGlvbnMsIFdyaXRlQmF0Y2gqIHVwZGF0ZXMpID0gMDsKKworICAv
LyBJZiB0aGUgZGF0YWJhc2UgY29udGFpbnMgYW4gZW50cnkgZm9yICJrZXkiIHN0b3JlIHRoZQor
ICAvLyBjb3JyZXNwb25kaW5nIHZhbHVlIGluICp2YWx1ZSBhbmQgcmV0dXJuIE9LLgorICAvLwor
ICAvLyBJZiB0aGVyZSBpcyBubyBlbnRyeSBmb3IgImtleSIgbGVhdmUgKnZhbHVlIHVuY2hhbmdl
ZCBhbmQgcmV0dXJuCisgIC8vIGEgc3RhdHVzIGZvciB3aGljaCBTdGF0dXM6OklzTm90Rm91bmQo
KSByZXR1cm5zIHRydWUuCisgIC8vCisgIC8vIE1heSByZXR1cm4gc29tZSBvdGhlciBTdGF0dXMg
b24gYW4gZXJyb3IuCisgIHZpcnR1YWwgU3RhdHVzIEdldChjb25zdCBSZWFkT3B0aW9ucyYgb3B0
aW9ucywKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNsaWNlJiBrZXksIHN0ZDo6c3RyaW5n
KiB2YWx1ZSkgPSAwOworCisgIC8vIFJldHVybiBhIGhlYXAtYWxsb2NhdGVkIGl0ZXJhdG9yIG92
ZXIgdGhlIGNvbnRlbnRzIG9mIHRoZSBkYXRhYmFzZS4KKyAgLy8gVGhlIHJlc3VsdCBvZiBOZXdJ
dGVyYXRvcigpIGlzIGluaXRpYWxseSBpbnZhbGlkIChjYWxsZXIgbXVzdAorICAvLyBjYWxsIG9u
ZSBvZiB0aGUgU2VlayBtZXRob2RzIG9uIHRoZSBpdGVyYXRvciBiZWZvcmUgdXNpbmcgaXQpLgor
ICAvLworICAvLyBDYWxsZXIgc2hvdWxkIGRlbGV0ZSB0aGUgaXRlcmF0b3Igd2hlbiBpdCBpcyBu
byBsb25nZXIgbmVlZGVkLgorICAvLyBUaGUgcmV0dXJuZWQgaXRlcmF0b3Igc2hvdWxkIGJlIGRl
bGV0ZWQgYmVmb3JlIHRoaXMgZGIgaXMgZGVsZXRlZC4KKyAgdmlydHVhbCBJdGVyYXRvciogTmV3
SXRlcmF0b3IoY29uc3QgUmVhZE9wdGlvbnMmIG9wdGlvbnMpID0gMDsKKworICAvLyBSZXR1cm4g
YSBoYW5kbGUgdG8gdGhlIGN1cnJlbnQgREIgc3RhdGUuICBJdGVyYXRvcnMgY3JlYXRlZCB3aXRo
CisgIC8vIHRoaXMgaGFuZGxlIHdpbGwgYWxsIG9ic2VydmUgYSBzdGFibGUgc25hcHNob3Qgb2Yg
dGhlIGN1cnJlbnQgREIKKyAgLy8gc3RhdGUuICBUaGUgY2FsbGVyIG11c3QgY2FsbCBSZWxlYXNl
U25hcHNob3QocmVzdWx0KSB3aGVuIHRoZQorICAvLyBzbmFwc2hvdCBpcyBubyBsb25nZXIgbmVl
ZGVkLgorICB2aXJ0dWFsIGNvbnN0IFNuYXBzaG90KiBHZXRTbmFwc2hvdCgpID0gMDsKKworICAv
LyBSZWxlYXNlIGEgcHJldmlvdXNseSBhY3F1aXJlZCBzbmFwc2hvdC4gIFRoZSBjYWxsZXIgbXVz
dCBub3QKKyAgLy8gdXNlICJzbmFwc2hvdCIgYWZ0ZXIgdGhpcyBjYWxsLgorICB2aXJ0dWFsIHZv
aWQgUmVsZWFzZVNuYXBzaG90KGNvbnN0IFNuYXBzaG90KiBzbmFwc2hvdCkgPSAwOworCisgIC8v
IERCIGltcGxlbWVudGF0aW9ucyBjYW4gZXhwb3J0IHByb3BlcnRpZXMgYWJvdXQgdGhlaXIgc3Rh
dGUKKyAgLy8gdmlhIHRoaXMgbWV0aG9kLiAgSWYgInByb3BlcnR5IiBpcyBhIHZhbGlkIHByb3Bl
cnR5IHVuZGVyc3Rvb2QgYnkgdGhpcworICAvLyBEQiBpbXBsZW1lbnRhdGlvbiwgZmlsbHMgIip2
YWx1ZSIgd2l0aCBpdHMgY3VycmVudCB2YWx1ZSBhbmQgcmV0dXJucworICAvLyB0cnVlLiAgT3Ro
ZXJ3aXNlIHJldHVybnMgZmFsc2UuCisgIC8vCisgIC8vCisgIC8vIFZhbGlkIHByb3BlcnR5IG5h
bWVzIGluY2x1ZGU6CisgIC8vCisgIC8vICAibGV2ZWxkYi5udW0tZmlsZXMtYXQtbGV2ZWw8Tj4i
IC0gcmV0dXJuIHRoZSBudW1iZXIgb2YgZmlsZXMgYXQgbGV2ZWwgPE4+LAorICAvLyAgICAgd2hl
cmUgPE4+IGlzIGFuIEFTQ0lJIHJlcHJlc2VudGF0aW9uIG9mIGEgbGV2ZWwgbnVtYmVyIChlLmcu
ICIwIikuCisgIC8vICAibGV2ZWxkYi5zdGF0cyIgLSByZXR1cm5zIGEgbXVsdGktbGluZSBzdHJp
bmcgdGhhdCBkZXNjcmliZXMgc3RhdGlzdGljcworICAvLyAgICAgYWJvdXQgdGhlIGludGVybmFs
IG9wZXJhdGlvbiBvZiB0aGUgREIuCisgIC8vICAibGV2ZWxkYi5zc3RhYmxlcyIgLSByZXR1cm5z
IGEgbXVsdGktbGluZSBzdHJpbmcgdGhhdCBkZXNjcmliZXMgYWxsCisgIC8vICAgICBvZiB0aGUg
c3N0YWJsZXMgdGhhdCBtYWtlIHVwIHRoZSBkYiBjb250ZW50cy4KKyAgdmlydHVhbCBib29sIEdl
dFByb3BlcnR5KGNvbnN0IFNsaWNlJiBwcm9wZXJ0eSwgc3RkOjpzdHJpbmcqIHZhbHVlKSA9IDA7
CisKKyAgLy8gRm9yIGVhY2ggaSBpbiBbMCxuLTFdLCBzdG9yZSBpbiAic2l6ZXNbaV0iLCB0aGUg
YXBwcm94aW1hdGUKKyAgLy8gZmlsZSBzeXN0ZW0gc3BhY2UgdXNlZCBieSBrZXlzIGluICJbcmFu
Z2VbaV0uc3RhcnQgLi4gcmFuZ2VbaV0ubGltaXQpIi4KKyAgLy8KKyAgLy8gTm90ZSB0aGF0IHRo
ZSByZXR1cm5lZCBzaXplcyBtZWFzdXJlIGZpbGUgc3lzdGVtIHNwYWNlIHVzYWdlLCBzbworICAv
LyBpZiB0aGUgdXNlciBkYXRhIGNvbXByZXNzZXMgYnkgYSBmYWN0b3Igb2YgdGVuLCB0aGUgcmV0
dXJuZWQKKyAgLy8gc2l6ZXMgd2lsbCBiZSBvbmUtdGVudGggdGhlIHNpemUgb2YgdGhlIGNvcnJl
c3BvbmRpbmcgdXNlciBkYXRhIHNpemUuCisgIC8vCisgIC8vIFRoZSByZXN1bHRzIG1heSBub3Qg
aW5jbHVkZSB0aGUgc2l6ZXMgb2YgcmVjZW50bHkgd3JpdHRlbiBkYXRhLgorICB2aXJ0dWFsIHZv
aWQgR2V0QXBwcm94aW1hdGVTaXplcyhjb25zdCBSYW5nZSogcmFuZ2UsIGludCBuLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCogc2l6ZXMpID0gMDsKKworICAv
LyBDb21wYWN0IHRoZSB1bmRlcmx5aW5nIHN0b3JhZ2UgZm9yIHRoZSBrZXkgcmFuZ2UgWypiZWdp
biwqZW5kXS4KKyAgLy8gSW4gcGFydGljdWxhciwgZGVsZXRlZCBhbmQgb3ZlcndyaXR0ZW4gdmVy
c2lvbnMgYXJlIGRpc2NhcmRlZCwKKyAgLy8gYW5kIHRoZSBkYXRhIGlzIHJlYXJyYW5nZWQgdG8g
cmVkdWNlIHRoZSBjb3N0IG9mIG9wZXJhdGlvbnMKKyAgLy8gbmVlZGVkIHRvIGFjY2VzcyB0aGUg
ZGF0YS4gIFRoaXMgb3BlcmF0aW9uIHNob3VsZCB0eXBpY2FsbHkgb25seQorICAvLyBiZSBpbnZv
a2VkIGJ5IHVzZXJzIHdobyB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9u
LgorICAvLworICAvLyBiZWdpbj09TlVMTCBpcyB0cmVhdGVkIGFzIGEga2V5IGJlZm9yZSBhbGwg
a2V5cyBpbiB0aGUgZGF0YWJhc2UuCisgIC8vIGVuZD09TlVMTCBpcyB0cmVhdGVkIGFzIGEga2V5
IGFmdGVyIGFsbCBrZXlzIGluIHRoZSBkYXRhYmFzZS4KKyAgLy8gVGhlcmVmb3JlIHRoZSBmb2xs
b3dpbmcgY2FsbCB3aWxsIGNvbXBhY3QgdGhlIGVudGlyZSBkYXRhYmFzZToKKyAgLy8gICAgZGIt
PkNvbXBhY3RSYW5nZShOVUxMLCBOVUxMKTsKKyAgdmlydHVhbCB2b2lkIENvbXBhY3RSYW5nZShj
b25zdCBTbGljZSogYmVnaW4sIGNvbnN0IFNsaWNlKiBlbmQpID0gMDsKKworIHByaXZhdGU6Cisg
IC8vIE5vIGNvcHlpbmcgYWxsb3dlZAorICBEQihjb25zdCBEQiYpOworICB2b2lkIG9wZXJhdG9y
PShjb25zdCBEQiYpOworfTsKKworLy8gRGVzdHJveSB0aGUgY29udGVudHMgb2YgdGhlIHNwZWNp
ZmllZCBkYXRhYmFzZS4KKy8vIEJlIHZlcnkgY2FyZWZ1bCB1c2luZyB0aGlzIG1ldGhvZC4KK1N0
YXR1cyBEZXN0cm95REIoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIGNvbnN0IE9wdGlvbnMmIG9w
dGlvbnMpOworCisvLyBJZiBhIERCIGNhbm5vdCBiZSBvcGVuZWQsIHlvdSBtYXkgYXR0ZW1wdCB0
byBjYWxsIHRoaXMgbWV0aG9kIHRvCisvLyByZXN1cnJlY3QgYXMgbXVjaCBvZiB0aGUgY29udGVu
dHMgb2YgdGhlIGRhdGFiYXNlIGFzIHBvc3NpYmxlLgorLy8gU29tZSBkYXRhIG1heSBiZSBsb3N0
LCBzbyBiZSBjYXJlZnVsIHdoZW4gY2FsbGluZyB0aGlzIGZ1bmN0aW9uCisvLyBvbiBhIGRhdGFi
YXNlIHRoYXQgY29udGFpbnMgaW1wb3J0YW50IGluZm9ybWF0aW9uLgorU3RhdHVzIFJlcGFpckRC
KGNvbnN0IHN0ZDo6c3RyaW5nJiBkYm5hbWUsIGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMpOworCit9
ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgorCisjZW5kaWYgIC8vIFNUT1JBR0VfTEVWRUxEQl9JTkNM
VURFX0RCX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2luY2x1ZGUv
bGV2ZWxkYi9lbnYuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvaW5jbHVkZS9sZXZlbGRi
L2Vudi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmZhMzIyODlmNTgxZmQ0ZDIyMmRjNzRlYTE3N2E3ODEzOGI3MWZi
YzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2luY2x1ZGUv
bGV2ZWxkYi9lbnYuaApAQCAtMCwwICsxLDMzMyBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDExIFRo
ZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3Ig
bmFtZXMgb2YgY29udHJpYnV0b3JzLgorLy8KKy8vIEFuIEVudiBpcyBhbiBpbnRlcmZhY2UgdXNl
ZCBieSB0aGUgbGV2ZWxkYiBpbXBsZW1lbnRhdGlvbiB0byBhY2Nlc3MKKy8vIG9wZXJhdGluZyBz
eXN0ZW0gZnVuY3Rpb25hbGl0eSBsaWtlIHRoZSBmaWxlc3lzdGVtIGV0Yy4gIENhbGxlcnMKKy8v
IG1heSB3aXNoIHRvIHByb3ZpZGUgYSBjdXN0b20gRW52IG9iamVjdCB3aGVuIG9wZW5pbmcgYSBk
YXRhYmFzZSB0bworLy8gZ2V0IGZpbmUgZ2FpbiBjb250cm9sOyBlLmcuLCB0byByYXRlIGxpbWl0
IGZpbGUgc3lzdGVtIG9wZXJhdGlvbnMuCisvLworLy8gQWxsIEVudiBpbXBsZW1lbnRhdGlvbnMg
YXJlIHNhZmUgZm9yIGNvbmN1cnJlbnQgYWNjZXNzIGZyb20KKy8vIG11bHRpcGxlIHRocmVhZHMg
d2l0aG91dCBhbnkgZXh0ZXJuYWwgc3luY2hyb25pemF0aW9uLgorCisjaWZuZGVmIFNUT1JBR0Vf
TEVWRUxEQl9JTkNMVURFX0VOVl9IXworI2RlZmluZSBTVE9SQUdFX0xFVkVMREJfSU5DTFVERV9F
TlZfSF8KKworI2luY2x1ZGUgPGNzdGRhcmc+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUg
PHZlY3Rvcj4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlICJsZXZlbGRiL3N0YXR1cy5o
IgorCituYW1lc3BhY2UgbGV2ZWxkYiB7CisKK2NsYXNzIEZpbGVMb2NrOworY2xhc3MgTG9nZ2Vy
OworY2xhc3MgUmFuZG9tQWNjZXNzRmlsZTsKK2NsYXNzIFNlcXVlbnRpYWxGaWxlOworY2xhc3Mg
U2xpY2U7CitjbGFzcyBXcml0YWJsZUZpbGU7CisKK2NsYXNzIEVudiB7CisgcHVibGljOgorICBF
bnYoKSB7IH0KKyAgdmlydHVhbCB+RW52KCk7CisKKyAgLy8gUmV0dXJuIGEgZGVmYXVsdCBlbnZp
cm9ubWVudCBzdWl0YWJsZSBmb3IgdGhlIGN1cnJlbnQgb3BlcmF0aW5nCisgIC8vIHN5c3RlbS4g
IFNvcGhpc3RpY2F0ZWQgdXNlcnMgbWF5IHdpc2ggdG8gcHJvdmlkZSB0aGVpciBvd24gRW52Cisg
IC8vIGltcGxlbWVudGF0aW9uIGluc3RlYWQgb2YgcmVseWluZyBvbiB0aGlzIGRlZmF1bHQgZW52
aXJvbm1lbnQuCisgIC8vCisgIC8vIFRoZSByZXN1bHQgb2YgRGVmYXVsdCgpIGJlbG9uZ3MgdG8g
bGV2ZWxkYiBhbmQgbXVzdCBuZXZlciBiZSBkZWxldGVkLgorICBzdGF0aWMgRW52KiBEZWZhdWx0
KCk7CisKKyAgLy8gQ3JlYXRlIGEgYnJhbmQgbmV3IHNlcXVlbnRpYWxseS1yZWFkYWJsZSBmaWxl
IHdpdGggdGhlIHNwZWNpZmllZCBuYW1lLgorICAvLyBPbiBzdWNjZXNzLCBzdG9yZXMgYSBwb2lu
dGVyIHRvIHRoZSBuZXcgZmlsZSBpbiAqcmVzdWx0IGFuZCByZXR1cm5zIE9LLgorICAvLyBPbiBm
YWlsdXJlIHN0b3JlcyBOVUxMIGluICpyZXN1bHQgYW5kIHJldHVybnMgbm9uLU9LLiAgSWYgdGhl
IGZpbGUgZG9lcworICAvLyBub3QgZXhpc3QsIHJldHVybnMgYSBub24tT0sgc3RhdHVzLgorICAv
LworICAvLyBUaGUgcmV0dXJuZWQgZmlsZSB3aWxsIG9ubHkgYmUgYWNjZXNzZWQgYnkgb25lIHRo
cmVhZCBhdCBhIHRpbWUuCisgIHZpcnR1YWwgU3RhdHVzIE5ld1NlcXVlbnRpYWxGaWxlKGNvbnN0
IHN0ZDo6c3RyaW5nJiBmbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U2VxdWVudGlhbEZpbGUqKiByZXN1bHQpID0gMDsKKworICAvLyBDcmVhdGUgYSBicmFuZCBuZXcg
cmFuZG9tIGFjY2VzcyByZWFkLW9ubHkgZmlsZSB3aXRoIHRoZQorICAvLyBzcGVjaWZpZWQgbmFt
ZS4gIE9uIHN1Y2Nlc3MsIHN0b3JlcyBhIHBvaW50ZXIgdG8gdGhlIG5ldyBmaWxlIGluCisgIC8v
ICpyZXN1bHQgYW5kIHJldHVybnMgT0suICBPbiBmYWlsdXJlIHN0b3JlcyBOVUxMIGluICpyZXN1
bHQgYW5kCisgIC8vIHJldHVybnMgbm9uLU9LLiAgSWYgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3Qs
IHJldHVybnMgYSBub24tT0sKKyAgLy8gc3RhdHVzLgorICAvLworICAvLyBUaGUgcmV0dXJuZWQg
ZmlsZSBtYXkgYmUgY29uY3VycmVudGx5IGFjY2Vzc2VkIGJ5IG11bHRpcGxlIHRocmVhZHMuCisg
IHZpcnR1YWwgU3RhdHVzIE5ld1JhbmRvbUFjY2Vzc0ZpbGUoY29uc3Qgc3RkOjpzdHJpbmcmIGZu
YW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJhbmRvbUFjY2Vzc0Zp
bGUqKiByZXN1bHQpID0gMDsKKworICAvLyBDcmVhdGUgYW4gb2JqZWN0IHRoYXQgd3JpdGVzIHRv
IGEgbmV3IGZpbGUgd2l0aCB0aGUgc3BlY2lmaWVkCisgIC8vIG5hbWUuICBEZWxldGVzIGFueSBl
eGlzdGluZyBmaWxlIHdpdGggdGhlIHNhbWUgbmFtZSBhbmQgY3JlYXRlcyBhCisgIC8vIG5ldyBm
aWxlLiAgT24gc3VjY2Vzcywgc3RvcmVzIGEgcG9pbnRlciB0byB0aGUgbmV3IGZpbGUgaW4KKyAg
Ly8gKnJlc3VsdCBhbmQgcmV0dXJucyBPSy4gIE9uIGZhaWx1cmUgc3RvcmVzIE5VTEwgaW4gKnJl
c3VsdCBhbmQKKyAgLy8gcmV0dXJucyBub24tT0suCisgIC8vCisgIC8vIFRoZSByZXR1cm5lZCBm
aWxlIHdpbGwgb25seSBiZSBhY2Nlc3NlZCBieSBvbmUgdGhyZWFkIGF0IGEgdGltZS4KKyAgdmly
dHVhbCBTdGF0dXMgTmV3V3JpdGFibGVGaWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBmbmFtZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlRmlsZSoqIHJlc3VsdCkgPSAw
OworCisgIC8vIFJldHVybnMgdHJ1ZSBpZmYgdGhlIG5hbWVkIGZpbGUgZXhpc3RzLgorICB2aXJ0
dWFsIGJvb2wgRmlsZUV4aXN0cyhjb25zdCBzdGQ6OnN0cmluZyYgZm5hbWUpID0gMDsKKworICAv
LyBTdG9yZSBpbiAqcmVzdWx0IHRoZSBuYW1lcyBvZiB0aGUgY2hpbGRyZW4gb2YgdGhlIHNwZWNp
ZmllZCBkaXJlY3RvcnkuCisgIC8vIFRoZSBuYW1lcyBhcmUgcmVsYXRpdmUgdG8gImRpciIuCisg
IC8vIE9yaWdpbmFsIGNvbnRlbnRzIG9mICpyZXN1bHRzIGFyZSBkcm9wcGVkLgorICB2aXJ0dWFs
IFN0YXR1cyBHZXRDaGlsZHJlbihjb25zdCBzdGQ6OnN0cmluZyYgZGlyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4qIHJlc3VsdCkgPSAwOwor
CisgIC8vIERlbGV0ZSB0aGUgbmFtZWQgZmlsZS4KKyAgdmlydHVhbCBTdGF0dXMgRGVsZXRlRmls
ZShjb25zdCBzdGQ6OnN0cmluZyYgZm5hbWUpID0gMDsKKworICAvLyBDcmVhdGUgdGhlIHNwZWNp
ZmllZCBkaXJlY3RvcnkuCisgIHZpcnR1YWwgU3RhdHVzIENyZWF0ZURpcihjb25zdCBzdGQ6OnN0
cmluZyYgZGlybmFtZSkgPSAwOworCisgIC8vIERlbGV0ZSB0aGUgc3BlY2lmaWVkIGRpcmVjdG9y
eS4KKyAgdmlydHVhbCBTdGF0dXMgRGVsZXRlRGlyKGNvbnN0IHN0ZDo6c3RyaW5nJiBkaXJuYW1l
KSA9IDA7CisKKyAgLy8gU3RvcmUgdGhlIHNpemUgb2YgZm5hbWUgaW4gKmZpbGVfc2l6ZS4KKyAg
dmlydHVhbCBTdGF0dXMgR2V0RmlsZVNpemUoY29uc3Qgc3RkOjpzdHJpbmcmIGZuYW1lLCB1aW50
NjRfdCogZmlsZV9zaXplKSA9IDA7CisKKyAgLy8gUmVuYW1lIGZpbGUgc3JjIHRvIHRhcmdldC4K
KyAgdmlydHVhbCBTdGF0dXMgUmVuYW1lRmlsZShjb25zdCBzdGQ6OnN0cmluZyYgc3JjLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0YXJnZXQpID0gMDsK
KworICAvLyBMb2NrIHRoZSBzcGVjaWZpZWQgZmlsZS4gIFVzZWQgdG8gcHJldmVudCBjb25jdXJy
ZW50IGFjY2VzcyB0bworICAvLyB0aGUgc2FtZSBkYiBieSBtdWx0aXBsZSBwcm9jZXNzZXMuICBP
biBmYWlsdXJlLCBzdG9yZXMgTlVMTCBpbgorICAvLyAqbG9jayBhbmQgcmV0dXJucyBub24tT0su
CisgIC8vCisgIC8vIE9uIHN1Y2Nlc3MsIHN0b3JlcyBhIHBvaW50ZXIgdG8gdGhlIG9iamVjdCB0
aGF0IHJlcHJlc2VudHMgdGhlCisgIC8vIGFjcXVpcmVkIGxvY2sgaW4gKmxvY2sgYW5kIHJldHVy
bnMgT0suICBUaGUgY2FsbGVyIHNob3VsZCBjYWxsCisgIC8vIFVubG9ja0ZpbGUoKmxvY2spIHRv
IHJlbGVhc2UgdGhlIGxvY2suICBJZiB0aGUgcHJvY2VzcyBleGl0cywKKyAgLy8gdGhlIGxvY2sg
d2lsbCBiZSBhdXRvbWF0aWNhbGx5IHJlbGVhc2VkLgorICAvLworICAvLyBJZiBzb21lYm9keSBl
bHNlIGFscmVhZHkgaG9sZHMgdGhlIGxvY2ssIGZpbmlzaGVzIGltbWVkaWF0ZWx5CisgIC8vIHdp
dGggYSBmYWlsdXJlLiAgSS5lLiwgdGhpcyBjYWxsIGRvZXMgbm90IHdhaXQgZm9yIGV4aXN0aW5n
IGxvY2tzCisgIC8vIHRvIGdvIGF3YXkuCisgIC8vCisgIC8vIE1heSBjcmVhdGUgdGhlIG5hbWVk
IGZpbGUgaWYgaXQgZG9lcyBub3QgYWxyZWFkeSBleGlzdC4KKyAgdmlydHVhbCBTdGF0dXMgTG9j
a0ZpbGUoY29uc3Qgc3RkOjpzdHJpbmcmIGZuYW1lLCBGaWxlTG9jayoqIGxvY2spID0gMDsKKwor
ICAvLyBSZWxlYXNlIHRoZSBsb2NrIGFjcXVpcmVkIGJ5IGEgcHJldmlvdXMgc3VjY2Vzc2Z1bCBj
YWxsIHRvIExvY2tGaWxlLgorICAvLyBSRVFVSVJFUzogbG9jayB3YXMgcmV0dXJuZWQgYnkgYSBz
dWNjZXNzZnVsIExvY2tGaWxlKCkgY2FsbAorICAvLyBSRVFVSVJFUzogbG9jayBoYXMgbm90IGFs
cmVhZHkgYmVlbiB1bmxvY2tlZC4KKyAgdmlydHVhbCBTdGF0dXMgVW5sb2NrRmlsZShGaWxlTG9j
ayogbG9jaykgPSAwOworCisgIC8vIEFycmFuZ2UgdG8gcnVuICIoKmZ1bmN0aW9uKShhcmcpIiBv
bmNlIGluIGEgYmFja2dyb3VuZCB0aHJlYWQuCisgIC8vCisgIC8vICJmdW5jdGlvbiIgbWF5IHJ1
biBpbiBhbiB1bnNwZWNpZmllZCB0aHJlYWQuICBNdWx0aXBsZSBmdW5jdGlvbnMKKyAgLy8gYWRk
ZWQgdG8gdGhlIHNhbWUgRW52IG1heSBydW4gY29uY3VycmVudGx5IGluIGRpZmZlcmVudCB0aHJl
YWRzLgorICAvLyBJLmUuLCB0aGUgY2FsbGVyIG1heSBub3QgYXNzdW1lIHRoYXQgYmFja2dyb3Vu
ZCB3b3JrIGl0ZW1zIGFyZQorICAvLyBzZXJpYWxpemVkLgorICB2aXJ0dWFsIHZvaWQgU2NoZWR1
bGUoCisgICAgICB2b2lkICgqZnVuY3Rpb24pKHZvaWQqIGFyZyksCisgICAgICB2b2lkKiBhcmcp
ID0gMDsKKworICAvLyBTdGFydCBhIG5ldyB0aHJlYWQsIGludm9raW5nICJmdW5jdGlvbihhcmcp
IiB3aXRoaW4gdGhlIG5ldyB0aHJlYWQuCisgIC8vIFdoZW4gImZ1bmN0aW9uKGFyZykiIHJldHVy
bnMsIHRoZSB0aHJlYWQgd2lsbCBiZSBkZXN0cm95ZWQuCisgIHZpcnR1YWwgdm9pZCBTdGFydFRo
cmVhZCh2b2lkICgqZnVuY3Rpb24pKHZvaWQqIGFyZyksIHZvaWQqIGFyZykgPSAwOworCisgIC8v
ICpwYXRoIGlzIHNldCB0byBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgdGhhdCBjYW4gYmUgdXNlZCBm
b3IgdGVzdGluZy4gSXQgbWF5CisgIC8vIG9yIG1hbnkgbm90IGhhdmUganVzdCBiZWVuIGNyZWF0
ZWQuIFRoZSBkaXJlY3RvcnkgbWF5IG9yIG1heSBub3QgZGlmZmVyCisgIC8vIGJldHdlZW4gcnVu
cyBvZiB0aGUgc2FtZSBwcm9jZXNzLCBidXQgc3Vic2VxdWVudCBjYWxscyB3aWxsIHJldHVybiB0
aGUKKyAgLy8gc2FtZSBkaXJlY3RvcnkuCisgIHZpcnR1YWwgU3RhdHVzIEdldFRlc3REaXJlY3Rv
cnkoc3RkOjpzdHJpbmcqIHBhdGgpID0gMDsKKworICAvLyBDcmVhdGUgYW5kIHJldHVybiBhIGxv
ZyBmaWxlIGZvciBzdG9yaW5nIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMuCisgIHZpcnR1YWwgU3Rh
dHVzIE5ld0xvZ2dlcihjb25zdCBzdGQ6OnN0cmluZyYgZm5hbWUsIExvZ2dlcioqIHJlc3VsdCkg
PSAwOworCisgIC8vIFJldHVybnMgdGhlIG51bWJlciBvZiBtaWNyby1zZWNvbmRzIHNpbmNlIHNv
bWUgZml4ZWQgcG9pbnQgaW4gdGltZS4gT25seQorICAvLyB1c2VmdWwgZm9yIGNvbXB1dGluZyBk
ZWx0YXMgb2YgdGltZS4KKyAgdmlydHVhbCB1aW50NjRfdCBOb3dNaWNyb3MoKSA9IDA7CisKKyAg
Ly8gU2xlZXAvZGVsYXkgdGhlIHRocmVhZCBmb3IgdGhlIHBlcnNjcmliZWQgbnVtYmVyIG9mIG1p
Y3JvLXNlY29uZHMuCisgIHZpcnR1YWwgdm9pZCBTbGVlcEZvck1pY3Jvc2Vjb25kcyhpbnQgbWlj
cm9zKSA9IDA7CisKKyBwcml2YXRlOgorICAvLyBObyBjb3B5aW5nIGFsbG93ZWQKKyAgRW52KGNv
bnN0IEVudiYpOworICB2b2lkIG9wZXJhdG9yPShjb25zdCBFbnYmKTsKK307CisKKy8vIEEgZmls
ZSBhYnN0cmFjdGlvbiBmb3IgcmVhZGluZyBzZXF1ZW50aWFsbHkgdGhyb3VnaCBhIGZpbGUKK2Ns
YXNzIFNlcXVlbnRpYWxGaWxlIHsKKyBwdWJsaWM6CisgIFNlcXVlbnRpYWxGaWxlKCkgeyB9Cisg
IHZpcnR1YWwgflNlcXVlbnRpYWxGaWxlKCk7CisKKyAgLy8gUmVhZCB1cCB0byAibiIgYnl0ZXMg
ZnJvbSB0aGUgZmlsZS4gICJzY3JhdGNoWzAuLm4tMV0iIG1heSBiZQorICAvLyB3cml0dGVuIGJ5
IHRoaXMgcm91dGluZS4gIFNldHMgIipyZXN1bHQiIHRvIHRoZSBkYXRhIHRoYXQgd2FzCisgIC8v
IHJlYWQgKGluY2x1ZGluZyBpZiBmZXdlciB0aGFuICJuIiBieXRlcyB3ZXJlIHN1Y2Nlc3NmdWxs
eSByZWFkKS4KKyAgLy8gTWF5IHNldCAiKnJlc3VsdCIgdG8gcG9pbnQgYXQgZGF0YSBpbiAic2Ny
YXRjaFswLi5uLTFdIiwgc28KKyAgLy8gInNjcmF0Y2hbMC4ubi0xXSIgbXVzdCBiZSBsaXZlIHdo
ZW4gIipyZXN1bHQiIGlzIHVzZWQuCisgIC8vIElmIGFuIGVycm9yIHdhcyBlbmNvdW50ZXJlZCwg
cmV0dXJucyBhIG5vbi1PSyBzdGF0dXMuCisgIC8vCisgIC8vIFJFUVVJUkVTOiBFeHRlcm5hbCBz
eW5jaHJvbml6YXRpb24KKyAgdmlydHVhbCBTdGF0dXMgUmVhZChzaXplX3QgbiwgU2xpY2UqIHJl
c3VsdCwgY2hhciogc2NyYXRjaCkgPSAwOworCisgIC8vIFNraXAgIm4iIGJ5dGVzIGZyb20gdGhl
IGZpbGUuIFRoaXMgaXMgZ3VhcmFudGVlZCB0byBiZSBubworICAvLyBzbG93ZXIgdGhhdCByZWFk
aW5nIHRoZSBzYW1lIGRhdGEsIGJ1dCBtYXkgYmUgZmFzdGVyLgorICAvLworICAvLyBJZiBlbmQg
b2YgZmlsZSBpcyByZWFjaGVkLCBza2lwcGluZyB3aWxsIHN0b3AgYXQgdGhlIGVuZCBvZiB0aGUK
KyAgLy8gZmlsZSwgYW5kIFNraXAgd2lsbCByZXR1cm4gT0suCisgIC8vCisgIC8vIFJFUVVJUkVT
OiBFeHRlcm5hbCBzeW5jaHJvbml6YXRpb24KKyAgdmlydHVhbCBTdGF0dXMgU2tpcCh1aW50NjRf
dCBuKSA9IDA7CisKKyBwcml2YXRlOgorICAvLyBObyBjb3B5aW5nIGFsbG93ZWQKKyAgU2VxdWVu
dGlhbEZpbGUoY29uc3QgU2VxdWVudGlhbEZpbGUmKTsKKyAgdm9pZCBvcGVyYXRvcj0oY29uc3Qg
U2VxdWVudGlhbEZpbGUmKTsKK307CisKKy8vIEEgZmlsZSBhYnN0cmFjdGlvbiBmb3IgcmFuZG9t
bHkgcmVhZGluZyB0aGUgY29udGVudHMgb2YgYSBmaWxlLgorY2xhc3MgUmFuZG9tQWNjZXNzRmls
ZSB7CisgcHVibGljOgorICBSYW5kb21BY2Nlc3NGaWxlKCkgeyB9CisgIHZpcnR1YWwgflJhbmRv
bUFjY2Vzc0ZpbGUoKTsKKworICAvLyBSZWFkIHVwIHRvICJuIiBieXRlcyBmcm9tIHRoZSBmaWxl
IHN0YXJ0aW5nIGF0ICJvZmZzZXQiLgorICAvLyAic2NyYXRjaFswLi5uLTFdIiBtYXkgYmUgd3Jp
dHRlbiBieSB0aGlzIHJvdXRpbmUuICBTZXRzICIqcmVzdWx0IgorICAvLyB0byB0aGUgZGF0YSB0
aGF0IHdhcyByZWFkIChpbmNsdWRpbmcgaWYgZmV3ZXIgdGhhbiAibiIgYnl0ZXMgd2VyZQorICAv
LyBzdWNjZXNzZnVsbHkgcmVhZCkuICBNYXkgc2V0ICIqcmVzdWx0IiB0byBwb2ludCBhdCBkYXRh
IGluCisgIC8vICJzY3JhdGNoWzAuLm4tMV0iLCBzbyAic2NyYXRjaFswLi5uLTFdIiBtdXN0IGJl
IGxpdmUgd2hlbgorICAvLyAiKnJlc3VsdCIgaXMgdXNlZC4gIElmIGFuIGVycm9yIHdhcyBlbmNv
dW50ZXJlZCwgcmV0dXJucyBhIG5vbi1PSworICAvLyBzdGF0dXMuCisgIC8vCisgIC8vIFNhZmUg
Zm9yIGNvbmN1cnJlbnQgdXNlIGJ5IG11bHRpcGxlIHRocmVhZHMuCisgIHZpcnR1YWwgU3RhdHVz
IFJlYWQodWludDY0X3Qgb2Zmc2V0LCBzaXplX3QgbiwgU2xpY2UqIHJlc3VsdCwKKyAgICAgICAg
ICAgICAgICAgICAgICBjaGFyKiBzY3JhdGNoKSBjb25zdCA9IDA7CisKKyBwcml2YXRlOgorICAv
LyBObyBjb3B5aW5nIGFsbG93ZWQKKyAgUmFuZG9tQWNjZXNzRmlsZShjb25zdCBSYW5kb21BY2Nl
c3NGaWxlJik7CisgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFJhbmRvbUFjY2Vzc0ZpbGUmKTsKK307
CisKKy8vIEEgZmlsZSBhYnN0cmFjdGlvbiBmb3Igc2VxdWVudGlhbCB3cml0aW5nLiAgVGhlIGlt
cGxlbWVudGF0aW9uCisvLyBtdXN0IHByb3ZpZGUgYnVmZmVyaW5nIHNpbmNlIGNhbGxlcnMgbWF5
IGFwcGVuZCBzbWFsbCBmcmFnbWVudHMKKy8vIGF0IGEgdGltZSB0byB0aGUgZmlsZS4KK2NsYXNz
IFdyaXRhYmxlRmlsZSB7CisgcHVibGljOgorICBXcml0YWJsZUZpbGUoKSB7IH0KKyAgdmlydHVh
bCB+V3JpdGFibGVGaWxlKCk7CisKKyAgdmlydHVhbCBTdGF0dXMgQXBwZW5kKGNvbnN0IFNsaWNl
JiBkYXRhKSA9IDA7CisgIHZpcnR1YWwgU3RhdHVzIENsb3NlKCkgPSAwOworICB2aXJ0dWFsIFN0
YXR1cyBGbHVzaCgpID0gMDsKKyAgdmlydHVhbCBTdGF0dXMgU3luYygpID0gMDsKKworIHByaXZh
dGU6CisgIC8vIE5vIGNvcHlpbmcgYWxsb3dlZAorICBXcml0YWJsZUZpbGUoY29uc3QgV3JpdGFi
bGVGaWxlJik7CisgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFdyaXRhYmxlRmlsZSYpOworfTsKKwor
Ly8gQW4gaW50ZXJmYWNlIGZvciB3cml0aW5nIGxvZyBtZXNzYWdlcy4KK2NsYXNzIExvZ2dlciB7
CisgcHVibGljOgorICBMb2dnZXIoKSB7IH0KKyAgdmlydHVhbCB+TG9nZ2VyKCk7CisKKyAgLy8g
V3JpdGUgYW4gZW50cnkgdG8gdGhlIGxvZyBmaWxlIHdpdGggdGhlIHNwZWNpZmllZCBmb3JtYXQu
CisgIHZpcnR1YWwgdm9pZCBMb2d2KGNvbnN0IGNoYXIqIGZvcm1hdCwgdmFfbGlzdCBhcCkgPSAw
OworCisgcHJpdmF0ZToKKyAgLy8gTm8gY29weWluZyBhbGxvd2VkCisgIExvZ2dlcihjb25zdCBM
b2dnZXImKTsKKyAgdm9pZCBvcGVyYXRvcj0oY29uc3QgTG9nZ2VyJik7Cit9OworCisKKy8vIElk
ZW50aWZpZXMgYSBsb2NrZWQgZmlsZS4KK2NsYXNzIEZpbGVMb2NrIHsKKyBwdWJsaWM6CisgIEZp
bGVMb2NrKCkgeyB9CisgIHZpcnR1YWwgfkZpbGVMb2NrKCk7CisgcHJpdmF0ZToKKyAgLy8gTm8g
Y29weWluZyBhbGxvd2VkCisgIEZpbGVMb2NrKGNvbnN0IEZpbGVMb2NrJik7CisgIHZvaWQgb3Bl
cmF0b3I9KGNvbnN0IEZpbGVMb2NrJik7Cit9OworCisvLyBMb2cgdGhlIHNwZWNpZmllZCBkYXRh
IHRvICppbmZvX2xvZyBpZiBpbmZvX2xvZyBpcyBub24tTlVMTC4KK2V4dGVybiB2b2lkIExvZyhM
b2dnZXIqIGluZm9fbG9nLCBjb25zdCBjaGFyKiBmb3JtYXQsIC4uLikKKyMgICBpZiBkZWZpbmVk
KF9fR05VQ19fKSB8fCBkZWZpbmVkKF9fY2xhbmdfXykKKyAgICBfX2F0dHJpYnV0ZV9fKChfX2Zv
cm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpCisjICAgZW5kaWYKKyAgICA7CisKKy8vIEEgdXRp
bGl0eSByb3V0aW5lOiB3cml0ZSAiZGF0YSIgdG8gdGhlIG5hbWVkIGZpbGUuCitleHRlcm4gU3Rh
dHVzIFdyaXRlU3RyaW5nVG9GaWxlKEVudiogZW52LCBjb25zdCBTbGljZSYgZGF0YSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZuYW1lKTsKKwor
Ly8gQSB1dGlsaXR5IHJvdXRpbmU6IHJlYWQgY29udGVudHMgb2YgbmFtZWQgZmlsZSBpbnRvICpk
YXRhCitleHRlcm4gU3RhdHVzIFJlYWRGaWxlVG9TdHJpbmcoRW52KiBlbnYsIGNvbnN0IHN0ZDo6
c3RyaW5nJiBmbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmlu
ZyogZGF0YSk7CisKKy8vIEFuIGltcGxlbWVudGF0aW9uIG9mIEVudiB0aGF0IGZvcndhcmRzIGFs
bCBjYWxscyB0byBhbm90aGVyIEVudi4KKy8vIE1heSBiZSB1c2VmdWwgdG8gY2xpZW50cyB3aG8g
d2lzaCB0byBvdmVycmlkZSBqdXN0IHBhcnQgb2YgdGhlCisvLyBmdW5jdGlvbmFsaXR5IG9mIGFu
b3RoZXIgRW52LgorY2xhc3MgRW52V3JhcHBlciA6IHB1YmxpYyBFbnYgeworIHB1YmxpYzoKKyAg
Ly8gSW5pdGlhbGl6ZSBhbiBFbnZXcmFwcGVyIHRoYXQgZGVsZWdhdGVzIGFsbCBjYWxscyB0byAq
dAorICBleHBsaWNpdCBFbnZXcmFwcGVyKEVudiogdCkgOiB0YXJnZXRfKHQpIHsgfQorICB2aXJ0
dWFsIH5FbnZXcmFwcGVyKCk7CisKKyAgLy8gUmV0dXJuIHRoZSB0YXJnZXQgdG8gd2hpY2ggdGhp
cyBFbnYgZm9yd2FyZHMgYWxsIGNhbGxzCisgIEVudiogdGFyZ2V0KCkgY29uc3QgeyByZXR1cm4g
dGFyZ2V0XzsgfQorCisgIC8vIFRoZSBmb2xsb3dpbmcgdGV4dCBpcyBib2lsZXJwbGF0ZSB0aGF0
IGZvcndhcmRzIGFsbCBtZXRob2RzIHRvIHRhcmdldCgpCisgIFN0YXR1cyBOZXdTZXF1ZW50aWFs
RmlsZShjb25zdCBzdGQ6OnN0cmluZyYgZiwgU2VxdWVudGlhbEZpbGUqKiByKSB7CisgICAgcmV0
dXJuIHRhcmdldF8tPk5ld1NlcXVlbnRpYWxGaWxlKGYsIHIpOworICB9CisgIFN0YXR1cyBOZXdS
YW5kb21BY2Nlc3NGaWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBmLCBSYW5kb21BY2Nlc3NGaWxlKiog
cikgeworICAgIHJldHVybiB0YXJnZXRfLT5OZXdSYW5kb21BY2Nlc3NGaWxlKGYsIHIpOworICB9
CisgIFN0YXR1cyBOZXdXcml0YWJsZUZpbGUoY29uc3Qgc3RkOjpzdHJpbmcmIGYsIFdyaXRhYmxl
RmlsZSoqIHIpIHsKKyAgICByZXR1cm4gdGFyZ2V0Xy0+TmV3V3JpdGFibGVGaWxlKGYsIHIpOwor
ICB9CisgIGJvb2wgRmlsZUV4aXN0cyhjb25zdCBzdGQ6OnN0cmluZyYgZikgeyByZXR1cm4gdGFy
Z2V0Xy0+RmlsZUV4aXN0cyhmKTsgfQorICBTdGF0dXMgR2V0Q2hpbGRyZW4oY29uc3Qgc3RkOjpz
dHJpbmcmIGRpciwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+KiByKSB7CisgICAgcmV0dXJuIHRh
cmdldF8tPkdldENoaWxkcmVuKGRpciwgcik7CisgIH0KKyAgU3RhdHVzIERlbGV0ZUZpbGUoY29u
c3Qgc3RkOjpzdHJpbmcmIGYpIHsgcmV0dXJuIHRhcmdldF8tPkRlbGV0ZUZpbGUoZik7IH0KKyAg
U3RhdHVzIENyZWF0ZURpcihjb25zdCBzdGQ6OnN0cmluZyYgZCkgeyByZXR1cm4gdGFyZ2V0Xy0+
Q3JlYXRlRGlyKGQpOyB9CisgIFN0YXR1cyBEZWxldGVEaXIoY29uc3Qgc3RkOjpzdHJpbmcmIGQp
IHsgcmV0dXJuIHRhcmdldF8tPkRlbGV0ZURpcihkKTsgfQorICBTdGF0dXMgR2V0RmlsZVNpemUo
Y29uc3Qgc3RkOjpzdHJpbmcmIGYsIHVpbnQ2NF90KiBzKSB7CisgICAgcmV0dXJuIHRhcmdldF8t
PkdldEZpbGVTaXplKGYsIHMpOworICB9CisgIFN0YXR1cyBSZW5hbWVGaWxlKGNvbnN0IHN0ZDo6
c3RyaW5nJiBzLCBjb25zdCBzdGQ6OnN0cmluZyYgdCkgeworICAgIHJldHVybiB0YXJnZXRfLT5S
ZW5hbWVGaWxlKHMsIHQpOworICB9CisgIFN0YXR1cyBMb2NrRmlsZShjb25zdCBzdGQ6OnN0cmlu
ZyYgZiwgRmlsZUxvY2sqKiBsKSB7CisgICAgcmV0dXJuIHRhcmdldF8tPkxvY2tGaWxlKGYsIGwp
OworICB9CisgIFN0YXR1cyBVbmxvY2tGaWxlKEZpbGVMb2NrKiBsKSB7IHJldHVybiB0YXJnZXRf
LT5VbmxvY2tGaWxlKGwpOyB9CisgIHZvaWQgU2NoZWR1bGUodm9pZCAoKmYpKHZvaWQqKSwgdm9p
ZCogYSkgeworICAgIHJldHVybiB0YXJnZXRfLT5TY2hlZHVsZShmLCBhKTsKKyAgfQorICB2b2lk
IFN0YXJ0VGhyZWFkKHZvaWQgKCpmKSh2b2lkKiksIHZvaWQqIGEpIHsKKyAgICByZXR1cm4gdGFy
Z2V0Xy0+U3RhcnRUaHJlYWQoZiwgYSk7CisgIH0KKyAgdmlydHVhbCBTdGF0dXMgR2V0VGVzdERp
cmVjdG9yeShzdGQ6OnN0cmluZyogcGF0aCkgeworICAgIHJldHVybiB0YXJnZXRfLT5HZXRUZXN0
RGlyZWN0b3J5KHBhdGgpOworICB9CisgIHZpcnR1YWwgU3RhdHVzIE5ld0xvZ2dlcihjb25zdCBz
dGQ6OnN0cmluZyYgZm5hbWUsIExvZ2dlcioqIHJlc3VsdCkgeworICAgIHJldHVybiB0YXJnZXRf
LT5OZXdMb2dnZXIoZm5hbWUsIHJlc3VsdCk7CisgIH0KKyAgdWludDY0X3QgTm93TWljcm9zKCkg
eworICAgIHJldHVybiB0YXJnZXRfLT5Ob3dNaWNyb3MoKTsKKyAgfQorICB2b2lkIFNsZWVwRm9y
TWljcm9zZWNvbmRzKGludCBtaWNyb3MpIHsKKyAgICB0YXJnZXRfLT5TbGVlcEZvck1pY3Jvc2Vj
b25kcyhtaWNyb3MpOworICB9CisgcHJpdmF0ZToKKyAgRW52KiB0YXJnZXRfOworfTsKKworfSAg
Ly8gbmFtZXNwYWNlIGxldmVsZGIKKworI2VuZGlmICAvLyBTVE9SQUdFX0xFVkVMREJfSU5DTFVE
RV9FTlZfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvaW5jbHVkZS9s
ZXZlbGRiL2ZpbHRlcl9wb2xpY3kuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvaW5jbHVk
ZS9sZXZlbGRiL2ZpbHRlcl9wb2xpY3kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZmJhMDgwMDFmYzMzNWExNGJk
ZTkwZmE1YTFjNWQ1ODAyNWFlMDM4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvbGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvZmlsdGVyX3BvbGljeS5oCkBAIC0wLDAgKzEsNzAg
QEAKKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKy8vCisv
LyBBIGRhdGFiYXNlIGNhbiBiZSBjb25maWd1cmVkIHdpdGggYSBjdXN0b20gRmlsdGVyUG9saWN5
IG9iamVjdC4KKy8vIFRoaXMgb2JqZWN0IGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyBhIHNt
YWxsIGZpbHRlciBmcm9tIGEgc2V0CisvLyBvZiBrZXlzLiAgVGhlc2UgZmlsdGVycyBhcmUgc3Rv
cmVkIGluIGxldmVsZGIgYW5kIGFyZSBjb25zdWx0ZWQKKy8vIGF1dG9tYXRpY2FsbHkgYnkgbGV2
ZWxkYiB0byBkZWNpZGUgd2hldGhlciBvciBub3QgdG8gcmVhZCBzb21lCisvLyBpbmZvcm1hdGlv
biBmcm9tIGRpc2suIEluIG1hbnkgY2FzZXMsIGEgZmlsdGVyIGNhbiBjdXQgZG93biB0aGUKKy8v
IG51bWJlciBvZiBkaXNrIHNlZWtzIGZvcm0gYSBoYW5kZnVsIHRvIGEgc2luZ2xlIGRpc2sgc2Vl
ayBwZXIKKy8vIERCOjpHZXQoKSBjYWxsLgorLy8KKy8vIE1vc3QgcGVvcGxlIHdpbGwgd2FudCB0
byB1c2UgdGhlIGJ1aWx0aW4gYmxvb20gZmlsdGVyIHN1cHBvcnQgKHNlZQorLy8gTmV3Qmxvb21G
aWx0ZXJQb2xpY3koKSBiZWxvdykuCisKKyNpZm5kZWYgU1RPUkFHRV9MRVZFTERCX0lOQ0xVREVf
RklMVEVSX1BPTElDWV9IXworI2RlZmluZSBTVE9SQUdFX0xFVkVMREJfSU5DTFVERV9GSUxURVJf
UE9MSUNZX0hfCisKKyNpbmNsdWRlIDxzdHJpbmc+CisKK25hbWVzcGFjZSBsZXZlbGRiIHsKKwor
Y2xhc3MgU2xpY2U7CisKK2NsYXNzIEZpbHRlclBvbGljeSB7CisgcHVibGljOgorICB2aXJ0dWFs
IH5GaWx0ZXJQb2xpY3koKTsKKworICAvLyBSZXR1cm4gdGhlIG5hbWUgb2YgdGhpcyBwb2xpY3ku
ICBOb3RlIHRoYXQgaWYgdGhlIGZpbHRlciBlbmNvZGluZworICAvLyBjaGFuZ2VzIGluIGFuIGlu
Y29tcGF0aWJsZSB3YXksIHRoZSBuYW1lIHJldHVybmVkIGJ5IHRoaXMgbWV0aG9kCisgIC8vIG11
c3QgYmUgY2hhbmdlZC4gIE90aGVyd2lzZSwgb2xkIGluY29tcGF0aWJsZSBmaWx0ZXJzIG1heSBi
ZQorICAvLyBwYXNzZWQgdG8gbWV0aG9kcyBvZiB0aGlzIHR5cGUuCisgIHZpcnR1YWwgY29uc3Qg
Y2hhciogTmFtZSgpIGNvbnN0ID0gMDsKKworICAvLyBrZXlzWzAsbi0xXSBjb250YWlucyBhIGxp
c3Qgb2Yga2V5cyAocG90ZW50aWFsbHkgd2l0aCBkdXBsaWNhdGVzKQorICAvLyB0aGF0IGFyZSBv
cmRlcmVkIGFjY29yZGluZyB0byB0aGUgdXNlciBzdXBwbGllZCBjb21wYXJhdG9yLgorICAvLyBB
cHBlbmQgYSBmaWx0ZXIgdGhhdCBzdW1tYXJpemVzIGtleXNbMCxuLTFdIHRvICpkc3QuCisgIC8v
CisgIC8vIFdhcm5pbmc6IGRvIG5vdCBjaGFuZ2UgdGhlIGluaXRpYWwgY29udGVudHMgb2YgKmRz
dC4gIEluc3RlYWQsCisgIC8vIGFwcGVuZCB0aGUgbmV3bHkgY29uc3RydWN0ZWQgZmlsdGVyIHRv
ICpkc3QuCisgIHZpcnR1YWwgdm9pZCBDcmVhdGVGaWx0ZXIoY29uc3QgU2xpY2UqIGtleXMsIGlu
dCBuLCBzdGQ6OnN0cmluZyogZHN0KQorICAgICAgY29uc3QgPSAwOworCisgIC8vICJmaWx0ZXIi
IGNvbnRhaW5zIHRoZSBkYXRhIGFwcGVuZGVkIGJ5IGEgcHJlY2VkaW5nIGNhbGwgdG8KKyAgLy8g
Q3JlYXRlRmlsdGVyKCkgb24gdGhpcyBjbGFzcy4gIFRoaXMgbWV0aG9kIG11c3QgcmV0dXJuIHRy
dWUgaWYKKyAgLy8gdGhlIGtleSB3YXMgaW4gdGhlIGxpc3Qgb2Yga2V5cyBwYXNzZWQgdG8gQ3Jl
YXRlRmlsdGVyKCkuCisgIC8vIFRoaXMgbWV0aG9kIG1heSByZXR1cm4gdHJ1ZSBvciBmYWxzZSBp
ZiB0aGUga2V5IHdhcyBub3Qgb24gdGhlCisgIC8vIGxpc3QsIGJ1dCBpdCBzaG91bGQgYWltIHRv
IHJldHVybiBmYWxzZSB3aXRoIGEgaGlnaCBwcm9iYWJpbGl0eS4KKyAgdmlydHVhbCBib29sIEtl
eU1heU1hdGNoKGNvbnN0IFNsaWNlJiBrZXksIGNvbnN0IFNsaWNlJiBmaWx0ZXIpIGNvbnN0ID0g
MDsKK307CisKKy8vIFJldHVybiBhIG5ldyBmaWx0ZXIgcG9saWN5IHRoYXQgdXNlcyBhIGJsb29t
IGZpbHRlciB3aXRoIGFwcHJveGltYXRlbHkKKy8vIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGJp
dHMgcGVyIGtleS4gIEEgZ29vZCB2YWx1ZSBmb3IgYml0c19wZXJfa2V5CisvLyBpcyAxMCwgd2hp
Y2ggeWllbGRzIGEgZmlsdGVyIHdpdGggfiAxJSBmYWxzZSBwb3NpdGl2ZSByYXRlLgorLy8KKy8v
IENhbGxlcnMgbXVzdCBkZWxldGUgdGhlIHJlc3VsdCBhZnRlciBhbnkgZGF0YWJhc2UgdGhhdCBp
cyB1c2luZyB0aGUKKy8vIHJlc3VsdCBoYXMgYmVlbiBjbG9zZWQuCisvLworLy8gTm90ZTogaWYg
eW91IGFyZSB1c2luZyBhIGN1c3RvbSBjb21wYXJhdG9yIHRoYXQgaWdub3JlcyBzb21lIHBhcnRz
CisvLyBvZiB0aGUga2V5cyBiZWluZyBjb21wYXJlZCwgeW91IG11c3Qgbm90IHVzZSBOZXdCbG9v
bUZpbHRlclBvbGljeSgpCisvLyBhbmQgbXVzdCBwcm92aWRlIHlvdXIgb3duIEZpbHRlclBvbGlj
eSB0aGF0IGFsc28gaWdub3JlcyB0aGUKKy8vIGNvcnJlc3BvbmRpbmcgcGFydHMgb2YgdGhlIGtl
eXMuICBGb3IgZXhhbXBsZSwgaWYgdGhlIGNvbXBhcmF0b3IKKy8vIGlnbm9yZXMgdHJhaWxpbmcg
c3BhY2VzLCBpdCB3b3VsZCBiZSBpbmNvcnJlY3QgdG8gdXNlIGEKKy8vIEZpbHRlclBvbGljeSAo
bGlrZSBOZXdCbG9vbUZpbHRlclBvbGljeSkgdGhhdCBkb2VzIG5vdCBpZ25vcmUKKy8vIHRyYWls
aW5nIHNwYWNlcyBpbiBrZXlzLgorZXh0ZXJuIGNvbnN0IEZpbHRlclBvbGljeSogTmV3Qmxvb21G
aWx0ZXJQb2xpY3koaW50IGJpdHNfcGVyX2tleSk7CisKK30KKworI2VuZGlmICAvLyBTVE9SQUdF
X0xFVkVMREJfSU5DTFVERV9GSUxURVJfUE9MSUNZX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9sZXZlbGRiL2luY2x1ZGUvbGV2ZWxkYi9pdGVyYXRvci5oIGIvU291cmNlL1RoaXJk
UGFydHkvbGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvaXRlcmF0b3IuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZDU0
M2ViNDZjZGU5YWYzMGY5MjUwZWUyZWFhN2YwOTc5Y2MyOTk0Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvaXRlcmF0b3IuaApAQCAt
MCwwICsxLDEwMCBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0
b3JzLgorLy8KKy8vIEFuIGl0ZXJhdG9yIHlpZWxkcyBhIHNlcXVlbmNlIG9mIGtleS92YWx1ZSBw
YWlycyBmcm9tIGEgc291cmNlLgorLy8gVGhlIGZvbGxvd2luZyBjbGFzcyBkZWZpbmVzIHRoZSBp
bnRlcmZhY2UuICBNdWx0aXBsZSBpbXBsZW1lbnRhdGlvbnMKKy8vIGFyZSBwcm92aWRlZCBieSB0
aGlzIGxpYnJhcnkuICBJbiBwYXJ0aWN1bGFyLCBpdGVyYXRvcnMgYXJlIHByb3ZpZGVkCisvLyB0
byBhY2Nlc3MgdGhlIGNvbnRlbnRzIG9mIGEgVGFibGUgb3IgYSBEQi4KKy8vCisvLyBNdWx0aXBs
ZSB0aHJlYWRzIGNhbiBpbnZva2UgY29uc3QgbWV0aG9kcyBvbiBhbiBJdGVyYXRvciB3aXRob3V0
CisvLyBleHRlcm5hbCBzeW5jaHJvbml6YXRpb24sIGJ1dCBpZiBhbnkgb2YgdGhlIHRocmVhZHMg
bWF5IGNhbGwgYQorLy8gbm9uLWNvbnN0IG1ldGhvZCwgYWxsIHRocmVhZHMgYWNjZXNzaW5nIHRo
ZSBzYW1lIEl0ZXJhdG9yIG11c3QgdXNlCisvLyBleHRlcm5hbCBzeW5jaHJvbml6YXRpb24uCisK
KyNpZm5kZWYgU1RPUkFHRV9MRVZFTERCX0lOQ0xVREVfSVRFUkFUT1JfSF8KKyNkZWZpbmUgU1RP
UkFHRV9MRVZFTERCX0lOQ0xVREVfSVRFUkFUT1JfSF8KKworI2luY2x1ZGUgImxldmVsZGIvc2xp
Y2UuaCIKKyNpbmNsdWRlICJsZXZlbGRiL3N0YXR1cy5oIgorCituYW1lc3BhY2UgbGV2ZWxkYiB7
CisKK2NsYXNzIEl0ZXJhdG9yIHsKKyBwdWJsaWM6CisgIEl0ZXJhdG9yKCk7CisgIHZpcnR1YWwg
fkl0ZXJhdG9yKCk7CisKKyAgLy8gQW4gaXRlcmF0b3IgaXMgZWl0aGVyIHBvc2l0aW9uZWQgYXQg
YSBrZXkvdmFsdWUgcGFpciwgb3IKKyAgLy8gbm90IHZhbGlkLiAgVGhpcyBtZXRob2QgcmV0dXJu
cyB0cnVlIGlmZiB0aGUgaXRlcmF0b3IgaXMgdmFsaWQuCisgIHZpcnR1YWwgYm9vbCBWYWxpZCgp
IGNvbnN0ID0gMDsKKworICAvLyBQb3NpdGlvbiBhdCB0aGUgZmlyc3Qga2V5IGluIHRoZSBzb3Vy
Y2UuICBUaGUgaXRlcmF0b3IgaXMgVmFsaWQoKQorICAvLyBhZnRlciB0aGlzIGNhbGwgaWZmIHRo
ZSBzb3VyY2UgaXMgbm90IGVtcHR5LgorICB2aXJ0dWFsIHZvaWQgU2Vla1RvRmlyc3QoKSA9IDA7
CisKKyAgLy8gUG9zaXRpb24gYXQgdGhlIGxhc3Qga2V5IGluIHRoZSBzb3VyY2UuICBUaGUgaXRl
cmF0b3IgaXMKKyAgLy8gVmFsaWQoKSBhZnRlciB0aGlzIGNhbGwgaWZmIHRoZSBzb3VyY2UgaXMg
bm90IGVtcHR5LgorICB2aXJ0dWFsIHZvaWQgU2Vla1RvTGFzdCgpID0gMDsKKworICAvLyBQb3Np
dGlvbiBhdCB0aGUgZmlyc3Qga2V5IGluIHRoZSBzb3VyY2UgdGhhdCBhdCBvciBwYXN0IHRhcmdl
dAorICAvLyBUaGUgaXRlcmF0b3IgaXMgVmFsaWQoKSBhZnRlciB0aGlzIGNhbGwgaWZmIHRoZSBz
b3VyY2UgY29udGFpbnMKKyAgLy8gYW4gZW50cnkgdGhhdCBjb21lcyBhdCBvciBwYXN0IHRhcmdl
dC4KKyAgdmlydHVhbCB2b2lkIFNlZWsoY29uc3QgU2xpY2UmIHRhcmdldCkgPSAwOworCisgIC8v
IE1vdmVzIHRvIHRoZSBuZXh0IGVudHJ5IGluIHRoZSBzb3VyY2UuICBBZnRlciB0aGlzIGNhbGws
IFZhbGlkKCkgaXMKKyAgLy8gdHJ1ZSBpZmYgdGhlIGl0ZXJhdG9yIHdhcyBub3QgcG9zaXRpb25l
ZCBhdCB0aGUgbGFzdCBlbnRyeSBpbiB0aGUgc291cmNlLgorICAvLyBSRVFVSVJFUzogVmFsaWQo
KQorICB2aXJ0dWFsIHZvaWQgTmV4dCgpID0gMDsKKworICAvLyBNb3ZlcyB0byB0aGUgcHJldmlv
dXMgZW50cnkgaW4gdGhlIHNvdXJjZS4gIEFmdGVyIHRoaXMgY2FsbCwgVmFsaWQoKSBpcworICAv
LyB0cnVlIGlmZiB0aGUgaXRlcmF0b3Igd2FzIG5vdCBwb3NpdGlvbmVkIGF0IHRoZSBmaXJzdCBl
bnRyeSBpbiBzb3VyY2UuCisgIC8vIFJFUVVJUkVTOiBWYWxpZCgpCisgIHZpcnR1YWwgdm9pZCBQ
cmV2KCkgPSAwOworCisgIC8vIFJldHVybiB0aGUga2V5IGZvciB0aGUgY3VycmVudCBlbnRyeS4g
IFRoZSB1bmRlcmx5aW5nIHN0b3JhZ2UgZm9yCisgIC8vIHRoZSByZXR1cm5lZCBzbGljZSBpcyB2
YWxpZCBvbmx5IHVudGlsIHRoZSBuZXh0IG1vZGlmaWNhdGlvbiBvZgorICAvLyB0aGUgaXRlcmF0
b3IuCisgIC8vIFJFUVVJUkVTOiBWYWxpZCgpCisgIHZpcnR1YWwgU2xpY2Uga2V5KCkgY29uc3Qg
PSAwOworCisgIC8vIFJldHVybiB0aGUgdmFsdWUgZm9yIHRoZSBjdXJyZW50IGVudHJ5LiAgVGhl
IHVuZGVybHlpbmcgc3RvcmFnZSBmb3IKKyAgLy8gdGhlIHJldHVybmVkIHNsaWNlIGlzIHZhbGlk
IG9ubHkgdW50aWwgdGhlIG5leHQgbW9kaWZpY2F0aW9uIG9mCisgIC8vIHRoZSBpdGVyYXRvci4K
KyAgLy8gUkVRVUlSRVM6ICFBdEVuZCgpICYmICFBdFN0YXJ0KCkKKyAgdmlydHVhbCBTbGljZSB2
YWx1ZSgpIGNvbnN0ID0gMDsKKworICAvLyBJZiBhbiBlcnJvciBoYXMgb2NjdXJyZWQsIHJldHVy
biBpdC4gIEVsc2UgcmV0dXJuIGFuIG9rIHN0YXR1cy4KKyAgdmlydHVhbCBTdGF0dXMgc3RhdHVz
KCkgY29uc3QgPSAwOworCisgIC8vIENsaWVudHMgYXJlIGFsbG93ZWQgdG8gcmVnaXN0ZXIgZnVu
Y3Rpb24vYXJnMS9hcmcyIHRyaXBsZXMgdGhhdAorICAvLyB3aWxsIGJlIGludm9rZWQgd2hlbiB0
aGlzIGl0ZXJhdG9yIGlzIGRlc3Ryb3llZC4KKyAgLy8KKyAgLy8gTm90ZSB0aGF0IHVubGlrZSBh
bGwgb2YgdGhlIHByZWNlZGluZyBtZXRob2RzLCB0aGlzIG1ldGhvZCBpcworICAvLyBub3QgYWJz
dHJhY3QgYW5kIHRoZXJlZm9yZSBjbGllbnRzIHNob3VsZCBub3Qgb3ZlcnJpZGUgaXQuCisgIHR5
cGVkZWYgdm9pZCAoKkNsZWFudXBGdW5jdGlvbikodm9pZCogYXJnMSwgdm9pZCogYXJnMik7Cisg
IHZvaWQgUmVnaXN0ZXJDbGVhbnVwKENsZWFudXBGdW5jdGlvbiBmdW5jdGlvbiwgdm9pZCogYXJn
MSwgdm9pZCogYXJnMik7CisKKyBwcml2YXRlOgorICBzdHJ1Y3QgQ2xlYW51cCB7CisgICAgQ2xl
YW51cEZ1bmN0aW9uIGZ1bmN0aW9uOworICAgIHZvaWQqIGFyZzE7CisgICAgdm9pZCogYXJnMjsK
KyAgICBDbGVhbnVwKiBuZXh0OworICB9OworICBDbGVhbnVwIGNsZWFudXBfOworCisgIC8vIE5v
IGNvcHlpbmcgYWxsb3dlZAorICBJdGVyYXRvcihjb25zdCBJdGVyYXRvciYpOworICB2b2lkIG9w
ZXJhdG9yPShjb25zdCBJdGVyYXRvciYpOworfTsKKworLy8gUmV0dXJuIGFuIGVtcHR5IGl0ZXJh
dG9yICh5aWVsZHMgbm90aGluZykuCitleHRlcm4gSXRlcmF0b3IqIE5ld0VtcHR5SXRlcmF0b3Io
KTsKKworLy8gUmV0dXJuIGFuIGVtcHR5IGl0ZXJhdG9yIHdpdGggdGhlIHNwZWNpZmllZCBzdGF0
dXMuCitleHRlcm4gSXRlcmF0b3IqIE5ld0Vycm9ySXRlcmF0b3IoY29uc3QgU3RhdHVzJiBzdGF0
dXMpOworCit9ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgorCisjZW5kaWYgIC8vIFNUT1JBR0VfTEVW
RUxEQl9JTkNMVURFX0lURVJBVE9SX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
ZXZlbGRiL2luY2x1ZGUvbGV2ZWxkYi9vcHRpb25zLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZl
bGRiL2luY2x1ZGUvbGV2ZWxkYi9vcHRpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmRkYTcxOGQzMDkwNjM4
YzczNzhmNDQxOGU0ZDAyNGRkMmU2OGJkYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xldmVsZGIvaW5jbHVkZS9sZXZlbGRiL29wdGlvbnMuaApAQCAtMCwwICsxLDE5NSBA
QAorLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgorCisjaWZu
ZGVmIFNUT1JBR0VfTEVWRUxEQl9JTkNMVURFX09QVElPTlNfSF8KKyNkZWZpbmUgU1RPUkFHRV9M
RVZFTERCX0lOQ0xVREVfT1BUSU9OU19IXworCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKK25hbWVz
cGFjZSBsZXZlbGRiIHsKKworY2xhc3MgQ2FjaGU7CitjbGFzcyBDb21wYXJhdG9yOworY2xhc3Mg
RW52OworY2xhc3MgRmlsdGVyUG9saWN5OworY2xhc3MgTG9nZ2VyOworY2xhc3MgU25hcHNob3Q7
CisKKy8vIERCIGNvbnRlbnRzIGFyZSBzdG9yZWQgaW4gYSBzZXQgb2YgYmxvY2tzLCBlYWNoIG9m
IHdoaWNoIGhvbGRzIGEKKy8vIHNlcXVlbmNlIG9mIGtleSx2YWx1ZSBwYWlycy4gIEVhY2ggYmxv
Y2sgbWF5IGJlIGNvbXByZXNzZWQgYmVmb3JlCisvLyBiZWluZyBzdG9yZWQgaW4gYSBmaWxlLiAg
VGhlIGZvbGxvd2luZyBlbnVtIGRlc2NyaWJlcyB3aGljaAorLy8gY29tcHJlc3Npb24gbWV0aG9k
IChpZiBhbnkpIGlzIHVzZWQgdG8gY29tcHJlc3MgYSBibG9jay4KK2VudW0gQ29tcHJlc3Npb25U
eXBlIHsKKyAgLy8gTk9URTogZG8gbm90IGNoYW5nZSB0aGUgdmFsdWVzIG9mIGV4aXN0aW5nIGVu
dHJpZXMsIGFzIHRoZXNlIGFyZQorICAvLyBwYXJ0IG9mIHRoZSBwZXJzaXN0ZW50IGZvcm1hdCBv
biBkaXNrLgorICBrTm9Db21wcmVzc2lvbiAgICAgPSAweDAsCisgIGtTbmFwcHlDb21wcmVzc2lv
biA9IDB4MQorfTsKKworLy8gT3B0aW9ucyB0byBjb250cm9sIHRoZSBiZWhhdmlvciBvZiBhIGRh
dGFiYXNlIChwYXNzZWQgdG8gREI6Ok9wZW4pCitzdHJ1Y3QgT3B0aW9ucyB7CisgIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0KKyAgLy8gUGFyYW1ldGVycyB0aGF0IGFmZmVjdCBiZWhhdmlvcgorCisg
IC8vIENvbXBhcmF0b3IgdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGtleXMgaW4gdGhlIHRh
YmxlLgorICAvLyBEZWZhdWx0OiBhIGNvbXBhcmF0b3IgdGhhdCB1c2VzIGxleGljb2dyYXBoaWMg
Ynl0ZS13aXNlIG9yZGVyaW5nCisgIC8vCisgIC8vIFJFUVVJUkVTOiBUaGUgY2xpZW50IG11c3Qg
ZW5zdXJlIHRoYXQgdGhlIGNvbXBhcmF0b3Igc3VwcGxpZWQKKyAgLy8gaGVyZSBoYXMgdGhlIHNh
bWUgbmFtZSBhbmQgb3JkZXJzIGtleXMgKmV4YWN0bHkqIHRoZSBzYW1lIGFzIHRoZQorICAvLyBj
b21wYXJhdG9yIHByb3ZpZGVkIHRvIHByZXZpb3VzIG9wZW4gY2FsbHMgb24gdGhlIHNhbWUgREIu
CisgIGNvbnN0IENvbXBhcmF0b3IqIGNvbXBhcmF0b3I7CisKKyAgLy8gSWYgdHJ1ZSwgdGhlIGRh
dGFiYXNlIHdpbGwgYmUgY3JlYXRlZCBpZiBpdCBpcyBtaXNzaW5nLgorICAvLyBEZWZhdWx0OiBm
YWxzZQorICBib29sIGNyZWF0ZV9pZl9taXNzaW5nOworCisgIC8vIElmIHRydWUsIGFuIGVycm9y
IGlzIHJhaXNlZCBpZiB0aGUgZGF0YWJhc2UgYWxyZWFkeSBleGlzdHMuCisgIC8vIERlZmF1bHQ6
IGZhbHNlCisgIGJvb2wgZXJyb3JfaWZfZXhpc3RzOworCisgIC8vIElmIHRydWUsIHRoZSBpbXBs
ZW1lbnRhdGlvbiB3aWxsIGRvIGFnZ3Jlc3NpdmUgY2hlY2tpbmcgb2YgdGhlCisgIC8vIGRhdGEg
aXQgaXMgcHJvY2Vzc2luZyBhbmQgd2lsbCBzdG9wIGVhcmx5IGlmIGl0IGRldGVjdHMgYW55Cisg
IC8vIGVycm9ycy4gIFRoaXMgbWF5IGhhdmUgdW5mb3Jlc2VlbiByYW1pZmljYXRpb25zOiBmb3Ig
ZXhhbXBsZSwgYQorICAvLyBjb3JydXB0aW9uIG9mIG9uZSBEQiBlbnRyeSBtYXkgY2F1c2UgYSBs
YXJnZSBudW1iZXIgb2YgZW50cmllcyB0bworICAvLyBiZWNvbWUgdW5yZWFkYWJsZSBvciBmb3Ig
dGhlIGVudGlyZSBEQiB0byBiZWNvbWUgdW5vcGVuYWJsZS4KKyAgLy8gRGVmYXVsdDogZmFsc2UK
KyAgYm9vbCBwYXJhbm9pZF9jaGVja3M7CisKKyAgLy8gVXNlIHRoZSBzcGVjaWZpZWQgb2JqZWN0
IHRvIGludGVyYWN0IHdpdGggdGhlIGVudmlyb25tZW50LAorICAvLyBlLmcuIHRvIHJlYWQvd3Jp
dGUgZmlsZXMsIHNjaGVkdWxlIGJhY2tncm91bmQgd29yaywgZXRjLgorICAvLyBEZWZhdWx0OiBF
bnY6OkRlZmF1bHQoKQorICBFbnYqIGVudjsKKworICAvLyBBbnkgaW50ZXJuYWwgcHJvZ3Jlc3Mv
ZXJyb3IgaW5mb3JtYXRpb24gZ2VuZXJhdGVkIGJ5IHRoZSBkYiB3aWxsCisgIC8vIGJlIHdyaXR0
ZW4gdG8gaW5mb19sb2cgaWYgaXQgaXMgbm9uLU5VTEwsIG9yIHRvIGEgZmlsZSBzdG9yZWQKKyAg
Ly8gaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBEQiBjb250ZW50cyBpZiBpbmZvX2xvZyBp
cyBOVUxMLgorICAvLyBEZWZhdWx0OiBOVUxMCisgIExvZ2dlciogaW5mb19sb2c7CisKKyAgLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLQorICAvLyBQYXJhbWV0ZXJzIHRoYXQgYWZmZWN0IHBlcmZvcm1h
bmNlCisKKyAgLy8gQW1vdW50IG9mIGRhdGEgdG8gYnVpbGQgdXAgaW4gbWVtb3J5IChiYWNrZWQg
YnkgYW4gdW5zb3J0ZWQgbG9nCisgIC8vIG9uIGRpc2spIGJlZm9yZSBjb252ZXJ0aW5nIHRvIGEg
c29ydGVkIG9uLWRpc2sgZmlsZS4KKyAgLy8KKyAgLy8gTGFyZ2VyIHZhbHVlcyBpbmNyZWFzZSBw
ZXJmb3JtYW5jZSwgZXNwZWNpYWxseSBkdXJpbmcgYnVsayBsb2Fkcy4KKyAgLy8gVXAgdG8gdHdv
IHdyaXRlIGJ1ZmZlcnMgbWF5IGJlIGhlbGQgaW4gbWVtb3J5IGF0IHRoZSBzYW1lIHRpbWUsCisg
IC8vIHNvIHlvdSBtYXkgd2lzaCB0byBhZGp1c3QgdGhpcyBwYXJhbWV0ZXIgdG8gY29udHJvbCBt
ZW1vcnkgdXNhZ2UuCisgIC8vIEFsc28sIGEgbGFyZ2VyIHdyaXRlIGJ1ZmZlciB3aWxsIHJlc3Vs
dCBpbiBhIGxvbmdlciByZWNvdmVyeSB0aW1lCisgIC8vIHRoZSBuZXh0IHRpbWUgdGhlIGRhdGFi
YXNlIGlzIG9wZW5lZC4KKyAgLy8KKyAgLy8gRGVmYXVsdDogNE1CCisgIHNpemVfdCB3cml0ZV9i
dWZmZXJfc2l6ZTsKKworICAvLyBOdW1iZXIgb2Ygb3BlbiBmaWxlcyB0aGF0IGNhbiBiZSB1c2Vk
IGJ5IHRoZSBEQi4gIFlvdSBtYXkgbmVlZCB0bworICAvLyBpbmNyZWFzZSB0aGlzIGlmIHlvdXIg
ZGF0YWJhc2UgaGFzIGEgbGFyZ2Ugd29ya2luZyBzZXQgKGJ1ZGdldAorICAvLyBvbmUgb3BlbiBm
aWxlIHBlciAyTUIgb2Ygd29ya2luZyBzZXQpLgorICAvLworICAvLyBEZWZhdWx0OiAxMDAwCisg
IGludCBtYXhfb3Blbl9maWxlczsKKworICAvLyBDb250cm9sIG92ZXIgYmxvY2tzICh1c2VyIGRh
dGEgaXMgc3RvcmVkIGluIGEgc2V0IG9mIGJsb2NrcywgYW5kCisgIC8vIGEgYmxvY2sgaXMgdGhl
IHVuaXQgb2YgcmVhZGluZyBmcm9tIGRpc2spLgorCisgIC8vIElmIG5vbi1OVUxMLCB1c2UgdGhl
IHNwZWNpZmllZCBjYWNoZSBmb3IgYmxvY2tzLgorICAvLyBJZiBOVUxMLCBsZXZlbGRiIHdpbGwg
YXV0b21hdGljYWxseSBjcmVhdGUgYW5kIHVzZSBhbiA4TUIgaW50ZXJuYWwgY2FjaGUuCisgIC8v
IERlZmF1bHQ6IE5VTEwKKyAgQ2FjaGUqIGJsb2NrX2NhY2hlOworCisgIC8vIEFwcHJveGltYXRl
IHNpemUgb2YgdXNlciBkYXRhIHBhY2tlZCBwZXIgYmxvY2suICBOb3RlIHRoYXQgdGhlCisgIC8v
IGJsb2NrIHNpemUgc3BlY2lmaWVkIGhlcmUgY29ycmVzcG9uZHMgdG8gdW5jb21wcmVzc2VkIGRh
dGEuICBUaGUKKyAgLy8gYWN0dWFsIHNpemUgb2YgdGhlIHVuaXQgcmVhZCBmcm9tIGRpc2sgbWF5
IGJlIHNtYWxsZXIgaWYKKyAgLy8gY29tcHJlc3Npb24gaXMgZW5hYmxlZC4gIFRoaXMgcGFyYW1l
dGVyIGNhbiBiZSBjaGFuZ2VkIGR5bmFtaWNhbGx5LgorICAvLworICAvLyBEZWZhdWx0OiA0Swor
ICBzaXplX3QgYmxvY2tfc2l6ZTsKKworICAvLyBOdW1iZXIgb2Yga2V5cyBiZXR3ZWVuIHJlc3Rh
cnQgcG9pbnRzIGZvciBkZWx0YSBlbmNvZGluZyBvZiBrZXlzLgorICAvLyBUaGlzIHBhcmFtZXRl
ciBjYW4gYmUgY2hhbmdlZCBkeW5hbWljYWxseS4gIE1vc3QgY2xpZW50cyBzaG91bGQKKyAgLy8g
bGVhdmUgdGhpcyBwYXJhbWV0ZXIgYWxvbmUuCisgIC8vCisgIC8vIERlZmF1bHQ6IDE2CisgIGlu
dCBibG9ja19yZXN0YXJ0X2ludGVydmFsOworCisgIC8vIENvbXByZXNzIGJsb2NrcyB1c2luZyB0
aGUgc3BlY2lmaWVkIGNvbXByZXNzaW9uIGFsZ29yaXRobS4gIFRoaXMKKyAgLy8gcGFyYW1ldGVy
IGNhbiBiZSBjaGFuZ2VkIGR5bmFtaWNhbGx5LgorICAvLworICAvLyBEZWZhdWx0OiBrU25hcHB5
Q29tcHJlc3Npb24sIHdoaWNoIGdpdmVzIGxpZ2h0d2VpZ2h0IGJ1dCBmYXN0CisgIC8vIGNvbXBy
ZXNzaW9uLgorICAvLworICAvLyBUeXBpY2FsIHNwZWVkcyBvZiBrU25hcHB5Q29tcHJlc3Npb24g
b24gYW4gSW50ZWwoUikgQ29yZShUTSkyIDIuNEdIejoKKyAgLy8gICAgfjIwMC01MDBNQi9zIGNv
bXByZXNzaW9uCisgIC8vICAgIH40MDAtODAwTUIvcyBkZWNvbXByZXNzaW9uCisgIC8vIE5vdGUg
dGhhdCB0aGVzZSBzcGVlZHMgYXJlIHNpZ25pZmljYW50bHkgZmFzdGVyIHRoYW4gbW9zdAorICAv
LyBwZXJzaXN0ZW50IHN0b3JhZ2Ugc3BlZWRzLCBhbmQgdGhlcmVmb3JlIGl0IGlzIHR5cGljYWxs
eSBuZXZlcgorICAvLyB3b3J0aCBzd2l0Y2hpbmcgdG8ga05vQ29tcHJlc3Npb24uICBFdmVuIGlm
IHRoZSBpbnB1dCBkYXRhIGlzCisgIC8vIGluY29tcHJlc3NpYmxlLCB0aGUga1NuYXBweUNvbXBy
ZXNzaW9uIGltcGxlbWVudGF0aW9uIHdpbGwKKyAgLy8gZWZmaWNpZW50bHkgZGV0ZWN0IHRoYXQg
YW5kIHdpbGwgc3dpdGNoIHRvIHVuY29tcHJlc3NlZCBtb2RlLgorICBDb21wcmVzc2lvblR5cGUg
Y29tcHJlc3Npb247CisKKyAgLy8gSWYgbm9uLU5VTEwsIHVzZSB0aGUgc3BlY2lmaWVkIGZpbHRl
ciBwb2xpY3kgdG8gcmVkdWNlIGRpc2sgcmVhZHMuCisgIC8vIE1hbnkgYXBwbGljYXRpb25zIHdp
bGwgYmVuZWZpdCBmcm9tIHBhc3NpbmcgdGhlIHJlc3VsdCBvZgorICAvLyBOZXdCbG9vbUZpbHRl
clBvbGljeSgpIGhlcmUuCisgIC8vCisgIC8vIERlZmF1bHQ6IE5VTEwKKyAgY29uc3QgRmlsdGVy
UG9saWN5KiBmaWx0ZXJfcG9saWN5OworCisgIC8vIENyZWF0ZSBhbiBPcHRpb25zIG9iamVjdCB3
aXRoIGRlZmF1bHQgdmFsdWVzIGZvciBhbGwgZmllbGRzLgorICBPcHRpb25zKCk7Cit9OworCisv
LyBPcHRpb25zIHRoYXQgY29udHJvbCByZWFkIG9wZXJhdGlvbnMKK3N0cnVjdCBSZWFkT3B0aW9u
cyB7CisgIC8vIElmIHRydWUsIGFsbCBkYXRhIHJlYWQgZnJvbSB1bmRlcmx5aW5nIHN0b3JhZ2Ug
d2lsbCBiZQorICAvLyB2ZXJpZmllZCBhZ2FpbnN0IGNvcnJlc3BvbmRpbmcgY2hlY2tzdW1zLgor
ICAvLyBEZWZhdWx0OiBmYWxzZQorICBib29sIHZlcmlmeV9jaGVja3N1bXM7CisKKyAgLy8gU2hv
dWxkIHRoZSBkYXRhIHJlYWQgZm9yIHRoaXMgaXRlcmF0aW9uIGJlIGNhY2hlZCBpbiBtZW1vcnk/
CisgIC8vIENhbGxlcnMgbWF5IHdpc2ggdG8gc2V0IHRoaXMgZmllbGQgdG8gZmFsc2UgZm9yIGJ1
bGsgc2NhbnMuCisgIC8vIERlZmF1bHQ6IHRydWUKKyAgYm9vbCBmaWxsX2NhY2hlOworCisgIC8v
IElmICJzbmFwc2hvdCIgaXMgbm9uLU5VTEwsIHJlYWQgYXMgb2YgdGhlIHN1cHBsaWVkIHNuYXBz
aG90CisgIC8vICh3aGljaCBtdXN0IGJlbG9uZyB0byB0aGUgREIgdGhhdCBpcyBiZWluZyByZWFk
IGFuZCB3aGljaCBtdXN0CisgIC8vIG5vdCBoYXZlIGJlZW4gcmVsZWFzZWQpLiAgSWYgInNuYXBz
aG90IiBpcyBOVUxMLCB1c2UgYW4gaW1wbGlpY2l0CisgIC8vIHNuYXBzaG90IG9mIHRoZSBzdGF0
ZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoaXMgcmVhZCBvcGVyYXRpb24uCisgIC8vIERlZmF1bHQ6
IE5VTEwKKyAgY29uc3QgU25hcHNob3QqIHNuYXBzaG90OworCisgIFJlYWRPcHRpb25zKCkKKyAg
ICAgIDogdmVyaWZ5X2NoZWNrc3VtcyhmYWxzZSksCisgICAgICAgIGZpbGxfY2FjaGUodHJ1ZSks
CisgICAgICAgIHNuYXBzaG90KE5VTEwpIHsKKyAgfQorfTsKKworLy8gT3B0aW9ucyB0aGF0IGNv
bnRyb2wgd3JpdGUgb3BlcmF0aW9ucworc3RydWN0IFdyaXRlT3B0aW9ucyB7CisgIC8vIElmIHRy
dWUsIHRoZSB3cml0ZSB3aWxsIGJlIGZsdXNoZWQgZnJvbSB0aGUgb3BlcmF0aW5nIHN5c3RlbQor
ICAvLyBidWZmZXIgY2FjaGUgKGJ5IGNhbGxpbmcgV3JpdGFibGVGaWxlOjpTeW5jKCkpIGJlZm9y
ZSB0aGUgd3JpdGUKKyAgLy8gaXMgY29uc2lkZXJlZCBjb21wbGV0ZS4gIElmIHRoaXMgZmxhZyBp
cyB0cnVlLCB3cml0ZXMgd2lsbCBiZQorICAvLyBzbG93ZXIuCisgIC8vCisgIC8vIElmIHRoaXMg
ZmxhZyBpcyBmYWxzZSwgYW5kIHRoZSBtYWNoaW5lIGNyYXNoZXMsIHNvbWUgcmVjZW50CisgIC8v
IHdyaXRlcyBtYXkgYmUgbG9zdC4gIE5vdGUgdGhhdCBpZiBpdCBpcyBqdXN0IHRoZSBwcm9jZXNz
IHRoYXQKKyAgLy8gY3Jhc2hlcyAoaS5lLiwgdGhlIG1hY2hpbmUgZG9lcyBub3QgcmVib290KSwg
bm8gd3JpdGVzIHdpbGwgYmUKKyAgLy8gbG9zdCBldmVuIGlmIHN5bmM9PWZhbHNlLgorICAvLwor
ICAvLyBJbiBvdGhlciB3b3JkcywgYSBEQiB3cml0ZSB3aXRoIHN5bmM9PWZhbHNlIGhhcyBzaW1p
bGFyCisgIC8vIGNyYXNoIHNlbWFudGljcyBhcyB0aGUgIndyaXRlKCkiIHN5c3RlbSBjYWxsLiAg
QSBEQiB3cml0ZQorICAvLyB3aXRoIHN5bmM9PXRydWUgaGFzIHNpbWlsYXIgY3Jhc2ggc2VtYW50
aWNzIHRvIGEgIndyaXRlKCkiCisgIC8vIHN5c3RlbSBjYWxsIGZvbGxvd2VkIGJ5ICJmc3luYygp
Ii4KKyAgLy8KKyAgLy8gRGVmYXVsdDogZmFsc2UKKyAgYm9vbCBzeW5jOworCisgIFdyaXRlT3B0
aW9ucygpCisgICAgICA6IHN5bmMoZmFsc2UpIHsKKyAgfQorfTsKKworfSAgLy8gbmFtZXNwYWNl
IGxldmVsZGIKKworI2VuZGlmICAvLyBTVE9SQUdFX0xFVkVMREJfSU5DTFVERV9PUFRJT05TX0hf
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2luY2x1ZGUvbGV2ZWxkYi9z
bGljZS5oIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvc2xpY2Uu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi43NGVhOGZhNDlhZjY3ODJiNTRiYTA3NTI4ODQ0ZTY2NWU4ZWE4MDk1Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9pbmNsdWRlL2xldmVs
ZGIvc2xpY2UuaApAQCAtMCwwICsxLDEwOSBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBM
ZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFt
ZXMgb2YgY29udHJpYnV0b3JzLgorLy8KKy8vIFNsaWNlIGlzIGEgc2ltcGxlIHN0cnVjdHVyZSBj
b250YWluaW5nIGEgcG9pbnRlciBpbnRvIHNvbWUgZXh0ZXJuYWwKKy8vIHN0b3JhZ2UgYW5kIGEg
c2l6ZS4gIFRoZSB1c2VyIG9mIGEgU2xpY2UgbXVzdCBlbnN1cmUgdGhhdCB0aGUgc2xpY2UKKy8v
IGlzIG5vdCB1c2VkIGFmdGVyIHRoZSBjb3JyZXNwb25kaW5nIGV4dGVybmFsIHN0b3JhZ2UgaGFz
IGJlZW4KKy8vIGRlYWxsb2NhdGVkLgorLy8KKy8vIE11bHRpcGxlIHRocmVhZHMgY2FuIGludm9r
ZSBjb25zdCBtZXRob2RzIG9uIGEgU2xpY2Ugd2l0aG91dAorLy8gZXh0ZXJuYWwgc3luY2hyb25p
emF0aW9uLCBidXQgaWYgYW55IG9mIHRoZSB0aHJlYWRzIG1heSBjYWxsIGEKKy8vIG5vbi1jb25z
dCBtZXRob2QsIGFsbCB0aHJlYWRzIGFjY2Vzc2luZyB0aGUgc2FtZSBTbGljZSBtdXN0IHVzZQor
Ly8gZXh0ZXJuYWwgc3luY2hyb25pemF0aW9uLgorCisjaWZuZGVmIFNUT1JBR0VfTEVWRUxEQl9J
TkNMVURFX1NMSUNFX0hfCisjZGVmaW5lIFNUT1JBR0VfTEVWRUxEQl9JTkNMVURFX1NMSUNFX0hf
CisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxz
dHJpbmcuaD4KKyNpbmNsdWRlIDxzdHJpbmc+CisKK25hbWVzcGFjZSBsZXZlbGRiIHsKKworY2xh
c3MgU2xpY2UgeworIHB1YmxpYzoKKyAgLy8gQ3JlYXRlIGFuIGVtcHR5IHNsaWNlLgorICBTbGlj
ZSgpIDogZGF0YV8oIiIpLCBzaXplXygwKSB7IH0KKworICAvLyBDcmVhdGUgYSBzbGljZSB0aGF0
IHJlZmVycyB0byBkWzAsbi0xXS4KKyAgU2xpY2UoY29uc3QgY2hhciogZCwgc2l6ZV90IG4pIDog
ZGF0YV8oZCksIHNpemVfKG4pIHsgfQorCisgIC8vIENyZWF0ZSBhIHNsaWNlIHRoYXQgcmVmZXJz
IHRvIHRoZSBjb250ZW50cyBvZiAicyIKKyAgU2xpY2UoY29uc3Qgc3RkOjpzdHJpbmcmIHMpIDog
ZGF0YV8ocy5kYXRhKCkpLCBzaXplXyhzLnNpemUoKSkgeyB9CisKKyAgLy8gQ3JlYXRlIGEgc2xp
Y2UgdGhhdCByZWZlcnMgdG8gc1swLHN0cmxlbihzKS0xXQorICBTbGljZShjb25zdCBjaGFyKiBz
KSA6IGRhdGFfKHMpLCBzaXplXyhzdHJsZW4ocykpIHsgfQorCisgIC8vIFJldHVybiBhIHBvaW50
ZXIgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgcmVmZXJlbmNlZCBkYXRhCisgIGNvbnN0IGNoYXIq
IGRhdGEoKSBjb25zdCB7IHJldHVybiBkYXRhXzsgfQorCisgIC8vIFJldHVybiB0aGUgbGVuZ3Ro
IChpbiBieXRlcykgb2YgdGhlIHJlZmVyZW5jZWQgZGF0YQorICBzaXplX3Qgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIHNpemVfOyB9CisKKyAgLy8gUmV0dXJuIHRydWUgaWZmIHRoZSBsZW5ndGggb2Yg
dGhlIHJlZmVyZW5jZWQgZGF0YSBpcyB6ZXJvCisgIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJldHVy
biBzaXplXyA9PSAwOyB9CisKKyAgLy8gUmV0dXJuIHRoZSBpdGggYnl0ZSBpbiB0aGUgcmVmZXJl
bmNlZCBkYXRhLgorICAvLyBSRVFVSVJFUzogbiA8IHNpemUoKQorICBjaGFyIG9wZXJhdG9yW10o
c2l6ZV90IG4pIGNvbnN0IHsKKyAgICBhc3NlcnQobiA8IHNpemUoKSk7CisgICAgcmV0dXJuIGRh
dGFfW25dOworICB9CisKKyAgLy8gQ2hhbmdlIHRoaXMgc2xpY2UgdG8gcmVmZXIgdG8gYW4gZW1w
dHkgYXJyYXkKKyAgdm9pZCBjbGVhcigpIHsgZGF0YV8gPSAiIjsgc2l6ZV8gPSAwOyB9CisKKyAg
Ly8gRHJvcCB0aGUgZmlyc3QgIm4iIGJ5dGVzIGZyb20gdGhpcyBzbGljZS4KKyAgdm9pZCByZW1v
dmVfcHJlZml4KHNpemVfdCBuKSB7CisgICAgYXNzZXJ0KG4gPD0gc2l6ZSgpKTsKKyAgICBkYXRh
XyArPSBuOworICAgIHNpemVfIC09IG47CisgIH0KKworICAvLyBSZXR1cm4gYSBzdHJpbmcgdGhh
dCBjb250YWlucyB0aGUgY29weSBvZiB0aGUgcmVmZXJlbmNlZCBkYXRhLgorICBzdGQ6OnN0cmlu
ZyBUb1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6c3RyaW5nKGRhdGFfLCBzaXplXyk7IH0K
KworICAvLyBUaHJlZS13YXkgY29tcGFyaXNvbi4gIFJldHVybnMgdmFsdWU6CisgIC8vICAgPCAg
MCBpZmYgIip0aGlzIiA8ICAiYiIsCisgIC8vICAgPT0gMCBpZmYgIip0aGlzIiA9PSAiYiIsCisg
IC8vICAgPiAgMCBpZmYgIip0aGlzIiA+ICAiYiIKKyAgaW50IGNvbXBhcmUoY29uc3QgU2xpY2Um
IGIpIGNvbnN0OworCisgIC8vIFJldHVybiB0cnVlIGlmZiAieCIgaXMgYSBwcmVmaXggb2YgIip0
aGlzIgorICBib29sIHN0YXJ0c193aXRoKGNvbnN0IFNsaWNlJiB4KSBjb25zdCB7CisgICAgcmV0
dXJuICgoc2l6ZV8gPj0geC5zaXplXykgJiYKKyAgICAgICAgICAgIChtZW1jbXAoZGF0YV8sIHgu
ZGF0YV8sIHguc2l6ZV8pID09IDApKTsKKyAgfQorCisgcHJpdmF0ZToKKyAgY29uc3QgY2hhciog
ZGF0YV87CisgIHNpemVfdCBzaXplXzsKKworICAvLyBJbnRlbnRpb25hbGx5IGNvcHlhYmxlCit9
OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNsaWNlJiB4LCBjb25zdCBTbGljZSYg
eSkgeworICByZXR1cm4gKCh4LnNpemUoKSA9PSB5LnNpemUoKSkgJiYKKyAgICAgICAgICAobWVt
Y21wKHguZGF0YSgpLCB5LmRhdGEoKSwgeC5zaXplKCkpID09IDApKTsKK30KKworaW5saW5lIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBTbGljZSYgeCwgY29uc3QgU2xpY2UmIHkpIHsKKyAgcmV0dXJu
ICEoeCA9PSB5KTsKK30KKworaW5saW5lIGludCBTbGljZTo6Y29tcGFyZShjb25zdCBTbGljZSYg
YikgY29uc3QgeworICBjb25zdCBpbnQgbWluX2xlbiA9IChzaXplXyA8IGIuc2l6ZV8pID8gc2l6
ZV8gOiBiLnNpemVfOworICBpbnQgciA9IG1lbWNtcChkYXRhXywgYi5kYXRhXywgbWluX2xlbik7
CisgIGlmIChyID09IDApIHsKKyAgICBpZiAoc2l6ZV8gPCBiLnNpemVfKSByID0gLTE7CisgICAg
ZWxzZSBpZiAoc2l6ZV8gPiBiLnNpemVfKSByID0gKzE7CisgIH0KKyAgcmV0dXJuIHI7Cit9CisK
K30gIC8vIG5hbWVzcGFjZSBsZXZlbGRiCisKKworI2VuZGlmICAvLyBTVE9SQUdFX0xFVkVMREJf
SU5DTFVERV9TTElDRV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9p
bmNsdWRlL2xldmVsZGIvc3RhdHVzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2luY2x1
ZGUvbGV2ZWxkYi9zdGF0dXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMWRiZDRiNDdlZDM4ODNiN2RkNTA5MmMy
MTY4NTQ0MWY2MDAwYzI2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGV2
ZWxkYi9pbmNsdWRlL2xldmVsZGIvc3RhdHVzLmgKQEAgLTAsMCArMSwxMDYgQEAKKy8vIENvcHly
aWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBB
VVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKy8vCisvLyBBIFN0YXR1cyBl
bmNhcHN1bGF0ZXMgdGhlIHJlc3VsdCBvZiBhbiBvcGVyYXRpb24uICBJdCBtYXkgaW5kaWNhdGUg
c3VjY2VzcywKKy8vIG9yIGl0IG1heSBpbmRpY2F0ZSBhbiBlcnJvciB3aXRoIGFuIGFzc29jaWF0
ZWQgZXJyb3IgbWVzc2FnZS4KKy8vCisvLyBNdWx0aXBsZSB0aHJlYWRzIGNhbiBpbnZva2UgY29u
c3QgbWV0aG9kcyBvbiBhIFN0YXR1cyB3aXRob3V0CisvLyBleHRlcm5hbCBzeW5jaHJvbml6YXRp
b24sIGJ1dCBpZiBhbnkgb2YgdGhlIHRocmVhZHMgbWF5IGNhbGwgYQorLy8gbm9uLWNvbnN0IG1l
dGhvZCwgYWxsIHRocmVhZHMgYWNjZXNzaW5nIHRoZSBzYW1lIFN0YXR1cyBtdXN0IHVzZQorLy8g
ZXh0ZXJuYWwgc3luY2hyb25pemF0aW9uLgorCisjaWZuZGVmIFNUT1JBR0VfTEVWRUxEQl9JTkNM
VURFX1NUQVRVU19IXworI2RlZmluZSBTVE9SQUdFX0xFVkVMREJfSU5DTFVERV9TVEFUVVNfSF8K
KworI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlICJsZXZlbGRiL3NsaWNlLmgiCisKK25hbWVz
cGFjZSBsZXZlbGRiIHsKKworY2xhc3MgU3RhdHVzIHsKKyBwdWJsaWM6CisgIC8vIENyZWF0ZSBh
IHN1Y2Nlc3Mgc3RhdHVzLgorICBTdGF0dXMoKSA6IHN0YXRlXyhOVUxMKSB7IH0KKyAgflN0YXR1
cygpIHsgZGVsZXRlW10gc3RhdGVfOyB9CisKKyAgLy8gQ29weSB0aGUgc3BlY2lmaWVkIHN0YXR1
cy4KKyAgU3RhdHVzKGNvbnN0IFN0YXR1cyYgcyk7CisgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFN0
YXR1cyYgcyk7CisKKyAgLy8gUmV0dXJuIGEgc3VjY2VzcyBzdGF0dXMuCisgIHN0YXRpYyBTdGF0
dXMgT0soKSB7IHJldHVybiBTdGF0dXMoKTsgfQorCisgIC8vIFJldHVybiBlcnJvciBzdGF0dXMg
b2YgYW4gYXBwcm9wcmlhdGUgdHlwZS4KKyAgc3RhdGljIFN0YXR1cyBOb3RGb3VuZChjb25zdCBT
bGljZSYgbXNnLCBjb25zdCBTbGljZSYgbXNnMiA9IFNsaWNlKCkpIHsKKyAgICByZXR1cm4gU3Rh
dHVzKGtOb3RGb3VuZCwgbXNnLCBtc2cyKTsKKyAgfQorICBzdGF0aWMgU3RhdHVzIENvcnJ1cHRp
b24oY29uc3QgU2xpY2UmIG1zZywgY29uc3QgU2xpY2UmIG1zZzIgPSBTbGljZSgpKSB7CisgICAg
cmV0dXJuIFN0YXR1cyhrQ29ycnVwdGlvbiwgbXNnLCBtc2cyKTsKKyAgfQorICBzdGF0aWMgU3Rh
dHVzIE5vdFN1cHBvcnRlZChjb25zdCBTbGljZSYgbXNnLCBjb25zdCBTbGljZSYgbXNnMiA9IFNs
aWNlKCkpIHsKKyAgICByZXR1cm4gU3RhdHVzKGtOb3RTdXBwb3J0ZWQsIG1zZywgbXNnMik7Cisg
IH0KKyAgc3RhdGljIFN0YXR1cyBJbnZhbGlkQXJndW1lbnQoY29uc3QgU2xpY2UmIG1zZywgY29u
c3QgU2xpY2UmIG1zZzIgPSBTbGljZSgpKSB7CisgICAgcmV0dXJuIFN0YXR1cyhrSW52YWxpZEFy
Z3VtZW50LCBtc2csIG1zZzIpOworICB9CisgIHN0YXRpYyBTdGF0dXMgSU9FcnJvcihjb25zdCBT
bGljZSYgbXNnLCBjb25zdCBTbGljZSYgbXNnMiA9IFNsaWNlKCkpIHsKKyAgICByZXR1cm4gU3Rh
dHVzKGtJT0Vycm9yLCBtc2csIG1zZzIpOworICB9CisKKyAgLy8gUmV0dXJucyB0cnVlIGlmZiB0
aGUgc3RhdHVzIGluZGljYXRlcyBzdWNjZXNzLgorICBib29sIG9rKCkgY29uc3QgeyByZXR1cm4g
KHN0YXRlXyA9PSBOVUxMKTsgfQorCisgIC8vIFJldHVybnMgdHJ1ZSBpZmYgdGhlIHN0YXR1cyBp
bmRpY2F0ZXMgYSBOb3RGb3VuZCBlcnJvci4KKyAgYm9vbCBJc05vdEZvdW5kKCkgY29uc3QgeyBy
ZXR1cm4gY29kZSgpID09IGtOb3RGb3VuZDsgfQorCisgIC8vIFJldHVybnMgdHJ1ZSBpZmYgdGhl
IHN0YXR1cyBpbmRpY2F0ZXMgYSBDb3JydXB0aW9uIGVycm9yLgorICBib29sIElzQ29ycnVwdGlv
bigpIGNvbnN0IHsgcmV0dXJuIGNvZGUoKSA9PSBrQ29ycnVwdGlvbjsgfQorCisgIC8vIFJldHVy
bnMgdHJ1ZSBpZmYgdGhlIHN0YXR1cyBpbmRpY2F0ZXMgYW4gSU9FcnJvci4KKyAgYm9vbCBJc0lP
RXJyb3IoKSBjb25zdCB7IHJldHVybiBjb2RlKCkgPT0ga0lPRXJyb3I7IH0KKworICAvLyBSZXR1
cm4gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBzdGF0dXMgc3VpdGFibGUgZm9yIHBy
aW50aW5nLgorICAvLyBSZXR1cm5zIHRoZSBzdHJpbmcgIk9LIiBmb3Igc3VjY2Vzcy4KKyAgc3Rk
OjpzdHJpbmcgVG9TdHJpbmcoKSBjb25zdDsKKworIHByaXZhdGU6CisgIC8vIE9LIHN0YXR1cyBo
YXMgYSBOVUxMIHN0YXRlXy4gIE90aGVyd2lzZSwgc3RhdGVfIGlzIGEgbmV3W10gYXJyYXkKKyAg
Ly8gb2YgdGhlIGZvbGxvd2luZyBmb3JtOgorICAvLyAgICBzdGF0ZV9bMC4uM10gPT0gbGVuZ3Ro
IG9mIG1lc3NhZ2UKKyAgLy8gICAgc3RhdGVfWzRdICAgID09IGNvZGUKKyAgLy8gICAgc3RhdGVf
WzUuLl0gID09IG1lc3NhZ2UKKyAgY29uc3QgY2hhciogc3RhdGVfOworCisgIGVudW0gQ29kZSB7
CisgICAga09rID0gMCwKKyAgICBrTm90Rm91bmQgPSAxLAorICAgIGtDb3JydXB0aW9uID0gMiwK
KyAgICBrTm90U3VwcG9ydGVkID0gMywKKyAgICBrSW52YWxpZEFyZ3VtZW50ID0gNCwKKyAgICBr
SU9FcnJvciA9IDUKKyAgfTsKKworICBDb2RlIGNvZGUoKSBjb25zdCB7CisgICAgcmV0dXJuIChz
dGF0ZV8gPT0gTlVMTCkgPyBrT2sgOiBzdGF0aWNfY2FzdDxDb2RlPihzdGF0ZV9bNF0pOworICB9
CisKKyAgU3RhdHVzKENvZGUgY29kZSwgY29uc3QgU2xpY2UmIG1zZywgY29uc3QgU2xpY2UmIG1z
ZzIpOworICBzdGF0aWMgY29uc3QgY2hhciogQ29weVN0YXRlKGNvbnN0IGNoYXIqIHMpOworfTsK
KworaW5saW5lIFN0YXR1czo6U3RhdHVzKGNvbnN0IFN0YXR1cyYgcykgeworICBzdGF0ZV8gPSAo
cy5zdGF0ZV8gPT0gTlVMTCkgPyBOVUxMIDogQ29weVN0YXRlKHMuc3RhdGVfKTsKK30KK2lubGlu
ZSB2b2lkIFN0YXR1czo6b3BlcmF0b3I9KGNvbnN0IFN0YXR1cyYgcykgeworICAvLyBUaGUgZm9s
bG93aW5nIGNvbmRpdGlvbiBjYXRjaGVzIGJvdGggYWxpYXNpbmcgKHdoZW4gdGhpcyA9PSAmcyks
CisgIC8vIGFuZCB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgYm90aCBzIGFuZCAqdGhpcyBhcmUgb2su
CisgIGlmIChzdGF0ZV8gIT0gcy5zdGF0ZV8pIHsKKyAgICBkZWxldGVbXSBzdGF0ZV87CisgICAg
c3RhdGVfID0gKHMuc3RhdGVfID09IE5VTEwpID8gTlVMTCA6IENvcHlTdGF0ZShzLnN0YXRlXyk7
CisgIH0KK30KKworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKKworI2VuZGlmICAvLyBTVE9SQUdF
X0xFVkVMREJfSU5DTFVERV9TVEFUVVNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xldmVsZGIvaW5jbHVkZS9sZXZlbGRiL3RhYmxlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZl
bGRiL2luY2x1ZGUvbGV2ZWxkYi90YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE5NzQ2YzNmNWVhOTAyNTBk
OGJkZTEyZDllYzdlOTA5MWZkNWJkNTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9sZXZlbGRiL2luY2x1ZGUvbGV2ZWxkYi90YWJsZS5oCkBAIC0wLDAgKzEsODUgQEAKKy8v
IENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2Vl
IHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2lmbmRlZiBT
VE9SQUdFX0xFVkVMREJfSU5DTFVERV9UQUJMRV9IXworI2RlZmluZSBTVE9SQUdFX0xFVkVMREJf
SU5DTFVERV9UQUJMRV9IXworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSAibGV2ZWxk
Yi9pdGVyYXRvci5oIgorCituYW1lc3BhY2UgbGV2ZWxkYiB7CisKK2NsYXNzIEJsb2NrOworY2xh
c3MgQmxvY2tIYW5kbGU7CitjbGFzcyBGb290ZXI7CitzdHJ1Y3QgT3B0aW9uczsKK2NsYXNzIFJh
bmRvbUFjY2Vzc0ZpbGU7CitzdHJ1Y3QgUmVhZE9wdGlvbnM7CitjbGFzcyBUYWJsZUNhY2hlOwor
CisvLyBBIFRhYmxlIGlzIGEgc29ydGVkIG1hcCBmcm9tIHN0cmluZ3MgdG8gc3RyaW5ncy4gIFRh
YmxlcyBhcmUKKy8vIGltbXV0YWJsZSBhbmQgcGVyc2lzdGVudC4gIEEgVGFibGUgbWF5IGJlIHNh
ZmVseSBhY2Nlc3NlZCBmcm9tCisvLyBtdWx0aXBsZSB0aHJlYWRzIHdpdGhvdXQgZXh0ZXJuYWwg
c3luY2hyb25pemF0aW9uLgorY2xhc3MgVGFibGUgeworIHB1YmxpYzoKKyAgLy8gQXR0ZW1wdCB0
byBvcGVuIHRoZSB0YWJsZSB0aGF0IGlzIHN0b3JlZCBpbiBieXRlcyBbMC4uZmlsZV9zaXplKQor
ICAvLyBvZiAiZmlsZSIsIGFuZCByZWFkIHRoZSBtZXRhZGF0YSBlbnRyaWVzIG5lY2Vzc2FyeSB0
byBhbGxvdworICAvLyByZXRyaWV2aW5nIGRhdGEgZnJvbSB0aGUgdGFibGUuCisgIC8vCisgIC8v
IElmIHN1Y2Nlc3NmdWwsIHJldHVybnMgb2sgYW5kIHNldHMgIip0YWJsZSIgdG8gdGhlIG5ld2x5
IG9wZW5lZAorICAvLyB0YWJsZS4gIFRoZSBjbGllbnQgc2hvdWxkIGRlbGV0ZSAiKnRhYmxlIiB3
aGVuIG5vIGxvbmdlciBuZWVkZWQuCisgIC8vIElmIHRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBp
bml0aWFsaXppbmcgdGhlIHRhYmxlLCBzZXRzICIqdGFibGUiCisgIC8vIHRvIE5VTEwgYW5kIHJl
dHVybnMgYSBub24tb2sgc3RhdHVzLiAgRG9lcyBub3QgdGFrZSBvd25lcnNoaXAgb2YKKyAgLy8g
Iipzb3VyY2UiLCBidXQgdGhlIGNsaWVudCBtdXN0IGVuc3VyZSB0aGF0ICJzb3VyY2UiIHJlbWFp
bnMgbGl2ZQorICAvLyBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSByZXR1cm5lZCB0YWJsZSdzIGxp
ZmV0aW1lLgorICAvLworICAvLyAqZmlsZSBtdXN0IHJlbWFpbiBsaXZlIHdoaWxlIHRoaXMgVGFi
bGUgaXMgaW4gdXNlLgorICBzdGF0aWMgU3RhdHVzIE9wZW4oY29uc3QgT3B0aW9ucyYgb3B0aW9u
cywKKyAgICAgICAgICAgICAgICAgICAgIFJhbmRvbUFjY2Vzc0ZpbGUqIGZpbGUsCisgICAgICAg
ICAgICAgICAgICAgICB1aW50NjRfdCBmaWxlX3NpemUsCisgICAgICAgICAgICAgICAgICAgICBU
YWJsZSoqIHRhYmxlKTsKKworICB+VGFibGUoKTsKKworICAvLyBSZXR1cm5zIGEgbmV3IGl0ZXJh
dG9yIG92ZXIgdGhlIHRhYmxlIGNvbnRlbnRzLgorICAvLyBUaGUgcmVzdWx0IG9mIE5ld0l0ZXJh
dG9yKCkgaXMgaW5pdGlhbGx5IGludmFsaWQgKGNhbGxlciBtdXN0CisgIC8vIGNhbGwgb25lIG9m
IHRoZSBTZWVrIG1ldGhvZHMgb24gdGhlIGl0ZXJhdG9yIGJlZm9yZSB1c2luZyBpdCkuCisgIEl0
ZXJhdG9yKiBOZXdJdGVyYXRvcihjb25zdCBSZWFkT3B0aW9ucyYpIGNvbnN0OworCisgIC8vIEdp
dmVuIGEga2V5LCByZXR1cm4gYW4gYXBwcm94aW1hdGUgYnl0ZSBvZmZzZXQgaW4gdGhlIGZpbGUg
d2hlcmUKKyAgLy8gdGhlIGRhdGEgZm9yIHRoYXQga2V5IGJlZ2lucyAob3Igd291bGQgYmVnaW4g
aWYgdGhlIGtleSB3ZXJlCisgIC8vIHByZXNlbnQgaW4gdGhlIGZpbGUpLiAgVGhlIHJldHVybmVk
IHZhbHVlIGlzIGluIHRlcm1zIG9mIGZpbGUKKyAgLy8gYnl0ZXMsIGFuZCBzbyBpbmNsdWRlcyBl
ZmZlY3RzIGxpa2UgY29tcHJlc3Npb24gb2YgdGhlIHVuZGVybHlpbmcgZGF0YS4KKyAgLy8gRS5n
LiwgdGhlIGFwcHJveGltYXRlIG9mZnNldCBvZiB0aGUgbGFzdCBrZXkgaW4gdGhlIHRhYmxlIHdp
bGwKKyAgLy8gYmUgY2xvc2UgdG8gdGhlIGZpbGUgbGVuZ3RoLgorICB1aW50NjRfdCBBcHByb3hp
bWF0ZU9mZnNldE9mKGNvbnN0IFNsaWNlJiBrZXkpIGNvbnN0OworCisgcHJpdmF0ZToKKyAgc3Ry
dWN0IFJlcDsKKyAgUmVwKiByZXBfOworCisgIGV4cGxpY2l0IFRhYmxlKFJlcCogcmVwKSB7IHJl
cF8gPSByZXA7IH0KKyAgc3RhdGljIEl0ZXJhdG9yKiBCbG9ja1JlYWRlcih2b2lkKiwgY29uc3Qg
UmVhZE9wdGlvbnMmLCBjb25zdCBTbGljZSYpOworCisgIC8vIENhbGxzICgqaGFuZGxlX3Jlc3Vs
dCkoYXJnLCAuLi4pIHdpdGggdGhlIGVudHJ5IGZvdW5kIGFmdGVyIGEgY2FsbAorICAvLyB0byBT
ZWVrKGtleSkuICBNYXkgbm90IG1ha2Ugc3VjaCBhIGNhbGwgaWYgZmlsdGVyIHBvbGljeSBzYXlz
CisgIC8vIHRoYXQga2V5IGlzIG5vdCBwcmVzZW50LgorICBmcmllbmQgY2xhc3MgVGFibGVDYWNo
ZTsKKyAgU3RhdHVzIEludGVybmFsR2V0KAorICAgICAgY29uc3QgUmVhZE9wdGlvbnMmLCBjb25z
dCBTbGljZSYga2V5LAorICAgICAgdm9pZCogYXJnLAorICAgICAgdm9pZCAoKmhhbmRsZV9yZXN1
bHQpKHZvaWQqIGFyZywgY29uc3QgU2xpY2UmIGssIGNvbnN0IFNsaWNlJiB2KSk7CisKKworICB2
b2lkIFJlYWRNZXRhKGNvbnN0IEZvb3RlciYgZm9vdGVyKTsKKyAgdm9pZCBSZWFkRmlsdGVyKGNv
bnN0IFNsaWNlJiBmaWx0ZXJfaGFuZGxlX3ZhbHVlKTsKKworICAvLyBObyBjb3B5aW5nIGFsbG93
ZWQKKyAgVGFibGUoY29uc3QgVGFibGUmKTsKKyAgdm9pZCBvcGVyYXRvcj0oY29uc3QgVGFibGUm
KTsKK307CisKK30gIC8vIG5hbWVzcGFjZSBsZXZlbGRiCisKKyNlbmRpZiAgLy8gU1RPUkFHRV9M
RVZFTERCX0lOQ0xVREVfVEFCTEVfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xl
dmVsZGIvaW5jbHVkZS9sZXZlbGRiL3RhYmxlX2J1aWxkZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xldmVsZGIvaW5jbHVkZS9sZXZlbGRiL3RhYmxlX2J1aWxkZXIuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZmQx
ZGM3MWYxY2I3NTQxZWY2MjM5N2I2Nzk1OTQ2YWQ4YzIwNjUyCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvdGFibGVfYnVpbGRlci5o
CkBAIC0wLDAgKzEsOTIgQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRy
aWJ1dG9ycy4KKy8vCisvLyBUYWJsZUJ1aWxkZXIgcHJvdmlkZXMgdGhlIGludGVyZmFjZSB1c2Vk
IHRvIGJ1aWxkIGEgVGFibGUKKy8vIChhbiBpbW11dGFibGUgYW5kIHNvcnRlZCBtYXAgZnJvbSBr
ZXlzIHRvIHZhbHVlcykuCisvLworLy8gTXVsdGlwbGUgdGhyZWFkcyBjYW4gaW52b2tlIGNvbnN0
IG1ldGhvZHMgb24gYSBUYWJsZUJ1aWxkZXIgd2l0aG91dAorLy8gZXh0ZXJuYWwgc3luY2hyb25p
emF0aW9uLCBidXQgaWYgYW55IG9mIHRoZSB0aHJlYWRzIG1heSBjYWxsIGEKKy8vIG5vbi1jb25z
dCBtZXRob2QsIGFsbCB0aHJlYWRzIGFjY2Vzc2luZyB0aGUgc2FtZSBUYWJsZUJ1aWxkZXIgbXVz
dCB1c2UKKy8vIGV4dGVybmFsIHN5bmNocm9uaXphdGlvbi4KKworI2lmbmRlZiBTVE9SQUdFX0xF
VkVMREJfSU5DTFVERV9UQUJMRV9CVUlMREVSX0hfCisjZGVmaW5lIFNUT1JBR0VfTEVWRUxEQl9J
TkNMVURFX1RBQkxFX0JVSUxERVJfSF8KKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUg
ImxldmVsZGIvb3B0aW9ucy5oIgorI2luY2x1ZGUgImxldmVsZGIvc3RhdHVzLmgiCisKK25hbWVz
cGFjZSBsZXZlbGRiIHsKKworY2xhc3MgQmxvY2tCdWlsZGVyOworY2xhc3MgQmxvY2tIYW5kbGU7
CitjbGFzcyBXcml0YWJsZUZpbGU7CisKK2NsYXNzIFRhYmxlQnVpbGRlciB7CisgcHVibGljOgor
ICAvLyBDcmVhdGUgYSBidWlsZGVyIHRoYXQgd2lsbCBzdG9yZSB0aGUgY29udGVudHMgb2YgdGhl
IHRhYmxlIGl0IGlzCisgIC8vIGJ1aWxkaW5nIGluICpmaWxlLiAgRG9lcyBub3QgY2xvc2UgdGhl
IGZpbGUuICBJdCBpcyB1cCB0byB0aGUKKyAgLy8gY2FsbGVyIHRvIGNsb3NlIHRoZSBmaWxlIGFm
dGVyIGNhbGxpbmcgRmluaXNoKCkuCisgIFRhYmxlQnVpbGRlcihjb25zdCBPcHRpb25zJiBvcHRp
b25zLCBXcml0YWJsZUZpbGUqIGZpbGUpOworCisgIC8vIFJFUVVJUkVTOiBFaXRoZXIgRmluaXNo
KCkgb3IgQWJhbmRvbigpIGhhcyBiZWVuIGNhbGxlZC4KKyAgflRhYmxlQnVpbGRlcigpOworCisg
IC8vIENoYW5nZSB0aGUgb3B0aW9ucyB1c2VkIGJ5IHRoaXMgYnVpbGRlci4gIE5vdGU6IG9ubHkg
c29tZSBvZiB0aGUKKyAgLy8gb3B0aW9uIGZpZWxkcyBjYW4gYmUgY2hhbmdlZCBhZnRlciBjb25z
dHJ1Y3Rpb24uICBJZiBhIGZpZWxkIGlzCisgIC8vIG5vdCBhbGxvd2VkIHRvIGNoYW5nZSBkeW5h
bWljYWxseSBhbmQgaXRzIHZhbHVlIGluIHRoZSBzdHJ1Y3R1cmUKKyAgLy8gcGFzc2VkIHRvIHRo
ZSBjb25zdHJ1Y3RvciBpcyBkaWZmZXJlbnQgZnJvbSBpdHMgdmFsdWUgaW4gdGhlCisgIC8vIHN0
cnVjdHVyZSBwYXNzZWQgdG8gdGhpcyBtZXRob2QsIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIGFu
IGVycm9yCisgIC8vIHdpdGhvdXQgY2hhbmdpbmcgYW55IGZpZWxkcy4KKyAgU3RhdHVzIENoYW5n
ZU9wdGlvbnMoY29uc3QgT3B0aW9ucyYgb3B0aW9ucyk7CisKKyAgLy8gQWRkIGtleSx2YWx1ZSB0
byB0aGUgdGFibGUgYmVpbmcgY29uc3RydWN0ZWQuCisgIC8vIFJFUVVJUkVTOiBrZXkgaXMgYWZ0
ZXIgYW55IHByZXZpb3VzbHkgYWRkZWQga2V5IGFjY29yZGluZyB0byBjb21wYXJhdG9yLgorICAv
LyBSRVFVSVJFUzogRmluaXNoKCksIEFiYW5kb24oKSBoYXZlIG5vdCBiZWVuIGNhbGxlZAorICB2
b2lkIEFkZChjb25zdCBTbGljZSYga2V5LCBjb25zdCBTbGljZSYgdmFsdWUpOworCisgIC8vIEFk
dmFuY2VkIG9wZXJhdGlvbjogZmx1c2ggYW55IGJ1ZmZlcmVkIGtleS92YWx1ZSBwYWlycyB0byBm
aWxlLgorICAvLyBDYW4gYmUgdXNlZCB0byBlbnN1cmUgdGhhdCB0d28gYWRqYWNlbnQgZW50cmll
cyBuZXZlciBsaXZlIGluCisgIC8vIHRoZSBzYW1lIGRhdGEgYmxvY2suICBNb3N0IGNsaWVudHMg
c2hvdWxkIG5vdCBuZWVkIHRvIHVzZSB0aGlzIG1ldGhvZC4KKyAgLy8gUkVRVUlSRVM6IEZpbmlz
aCgpLCBBYmFuZG9uKCkgaGF2ZSBub3QgYmVlbiBjYWxsZWQKKyAgdm9pZCBGbHVzaCgpOworCisg
IC8vIFJldHVybiBub24tb2sgaWZmIHNvbWUgZXJyb3IgaGFzIGJlZW4gZGV0ZWN0ZWQuCisgIFN0
YXR1cyBzdGF0dXMoKSBjb25zdDsKKworICAvLyBGaW5pc2ggYnVpbGRpbmcgdGhlIHRhYmxlLiAg
U3RvcHMgdXNpbmcgdGhlIGZpbGUgcGFzc2VkIHRvIHRoZQorICAvLyBjb25zdHJ1Y3RvciBhZnRl
ciB0aGlzIGZ1bmN0aW9uIHJldHVybnMuCisgIC8vIFJFUVVJUkVTOiBGaW5pc2goKSwgQWJhbmRv
bigpIGhhdmUgbm90IGJlZW4gY2FsbGVkCisgIFN0YXR1cyBGaW5pc2goKTsKKworICAvLyBJbmRp
Y2F0ZSB0aGF0IHRoZSBjb250ZW50cyBvZiB0aGlzIGJ1aWxkZXIgc2hvdWxkIGJlIGFiYW5kb25l
ZC4gIFN0b3BzCisgIC8vIHVzaW5nIHRoZSBmaWxlIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3Ig
YWZ0ZXIgdGhpcyBmdW5jdGlvbiByZXR1cm5zLgorICAvLyBJZiB0aGUgY2FsbGVyIGlzIG5vdCBn
b2luZyB0byBjYWxsIEZpbmlzaCgpLCBpdCBtdXN0IGNhbGwgQWJhbmRvbigpCisgIC8vIGJlZm9y
ZSBkZXN0cm95aW5nIHRoaXMgYnVpbGRlci4KKyAgLy8gUkVRVUlSRVM6IEZpbmlzaCgpLCBBYmFu
ZG9uKCkgaGF2ZSBub3QgYmVlbiBjYWxsZWQKKyAgdm9pZCBBYmFuZG9uKCk7CisKKyAgLy8gTnVt
YmVyIG9mIGNhbGxzIHRvIEFkZCgpIHNvIGZhci4KKyAgdWludDY0X3QgTnVtRW50cmllcygpIGNv
bnN0OworCisgIC8vIFNpemUgb2YgdGhlIGZpbGUgZ2VuZXJhdGVkIHNvIGZhci4gIElmIGludm9r
ZWQgYWZ0ZXIgYSBzdWNjZXNzZnVsCisgIC8vIEZpbmlzaCgpIGNhbGwsIHJldHVybnMgdGhlIHNp
emUgb2YgdGhlIGZpbmFsIGdlbmVyYXRlZCBmaWxlLgorICB1aW50NjRfdCBGaWxlU2l6ZSgpIGNv
bnN0OworCisgcHJpdmF0ZToKKyAgYm9vbCBvaygpIGNvbnN0IHsgcmV0dXJuIHN0YXR1cygpLm9r
KCk7IH0KKyAgdm9pZCBXcml0ZUJsb2NrKEJsb2NrQnVpbGRlciogYmxvY2ssIEJsb2NrSGFuZGxl
KiBoYW5kbGUpOworICB2b2lkIFdyaXRlUmF3QmxvY2soY29uc3QgU2xpY2UmIGRhdGEsIENvbXBy
ZXNzaW9uVHlwZSwgQmxvY2tIYW5kbGUqIGhhbmRsZSk7CisKKyAgc3RydWN0IFJlcDsKKyAgUmVw
KiByZXBfOworCisgIC8vIE5vIGNvcHlpbmcgYWxsb3dlZAorICBUYWJsZUJ1aWxkZXIoY29uc3Qg
VGFibGVCdWlsZGVyJik7CisgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFRhYmxlQnVpbGRlciYpOwor
fTsKKworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKKworI2VuZGlmICAvLyBTVE9SQUdFX0xFVkVM
REJfSU5DTFVERV9UQUJMRV9CVUlMREVSX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9sZXZlbGRiL2luY2x1ZGUvbGV2ZWxkYi93cml0ZV9iYXRjaC5oIGIvU291cmNlL1RoaXJkUGFy
dHkvbGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvd3JpdGVfYmF0Y2guaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZTlh
YWI2OGUwZDgzZGM0ZDk0ODM1ZWUyMWNmOTI2YzFmZjBjMGRiCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvd3JpdGVfYmF0Y2guaApA
QCAtMCwwICsxLDY0IEBACisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmli
dXRvcnMuCisvLworLy8gV3JpdGVCYXRjaCBob2xkcyBhIGNvbGxlY3Rpb24gb2YgdXBkYXRlcyB0
byBhcHBseSBhdG9taWNhbGx5IHRvIGEgREIuCisvLworLy8gVGhlIHVwZGF0ZXMgYXJlIGFwcGxp
ZWQgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgYXJlIGFkZGVkCisvLyB0byB0aGUgV3JpdGVC
YXRjaC4gIEZvciBleGFtcGxlLCB0aGUgdmFsdWUgb2YgImtleSIgd2lsbCBiZSAidjMiCisvLyBh
ZnRlciB0aGUgZm9sbG93aW5nIGJhdGNoIGlzIHdyaXR0ZW46CisvLworLy8gICAgYmF0Y2guUHV0
KCJrZXkiLCAidjEiKTsKKy8vICAgIGJhdGNoLkRlbGV0ZSgia2V5Iik7CisvLyAgICBiYXRjaC5Q
dXQoImtleSIsICJ2MiIpOworLy8gICAgYmF0Y2guUHV0KCJrZXkiLCAidjMiKTsKKy8vCisvLyBN
dWx0aXBsZSB0aHJlYWRzIGNhbiBpbnZva2UgY29uc3QgbWV0aG9kcyBvbiBhIFdyaXRlQmF0Y2gg
d2l0aG91dAorLy8gZXh0ZXJuYWwgc3luY2hyb25pemF0aW9uLCBidXQgaWYgYW55IG9mIHRoZSB0
aHJlYWRzIG1heSBjYWxsIGEKKy8vIG5vbi1jb25zdCBtZXRob2QsIGFsbCB0aHJlYWRzIGFjY2Vz
c2luZyB0aGUgc2FtZSBXcml0ZUJhdGNoIG11c3QgdXNlCisvLyBleHRlcm5hbCBzeW5jaHJvbml6
YXRpb24uCisKKyNpZm5kZWYgU1RPUkFHRV9MRVZFTERCX0lOQ0xVREVfV1JJVEVfQkFUQ0hfSF8K
KyNkZWZpbmUgU1RPUkFHRV9MRVZFTERCX0lOQ0xVREVfV1JJVEVfQkFUQ0hfSF8KKworI2luY2x1
ZGUgPHN0cmluZz4KKyNpbmNsdWRlICJsZXZlbGRiL3N0YXR1cy5oIgorCituYW1lc3BhY2UgbGV2
ZWxkYiB7CisKK2NsYXNzIFNsaWNlOworCitjbGFzcyBXcml0ZUJhdGNoIHsKKyBwdWJsaWM6Cisg
IFdyaXRlQmF0Y2goKTsKKyAgfldyaXRlQmF0Y2goKTsKKworICAvLyBTdG9yZSB0aGUgbWFwcGlu
ZyAia2V5LT52YWx1ZSIgaW4gdGhlIGRhdGFiYXNlLgorICB2b2lkIFB1dChjb25zdCBTbGljZSYg
a2V5LCBjb25zdCBTbGljZSYgdmFsdWUpOworCisgIC8vIElmIHRoZSBkYXRhYmFzZSBjb250YWlu
cyBhIG1hcHBpbmcgZm9yICJrZXkiLCBlcmFzZSBpdC4gIEVsc2UgZG8gbm90aGluZy4KKyAgdm9p
ZCBEZWxldGUoY29uc3QgU2xpY2UmIGtleSk7CisKKyAgLy8gQ2xlYXIgYWxsIHVwZGF0ZXMgYnVm
ZmVyZWQgaW4gdGhpcyBiYXRjaC4KKyAgdm9pZCBDbGVhcigpOworCisgIC8vIFN1cHBvcnQgZm9y
IGl0ZXJhdGluZyBvdmVyIHRoZSBjb250ZW50cyBvZiBhIGJhdGNoLgorICBjbGFzcyBIYW5kbGVy
IHsKKyAgIHB1YmxpYzoKKyAgICB2aXJ0dWFsIH5IYW5kbGVyKCk7CisgICAgdmlydHVhbCB2b2lk
IFB1dChjb25zdCBTbGljZSYga2V5LCBjb25zdCBTbGljZSYgdmFsdWUpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgRGVsZXRlKGNvbnN0IFNsaWNlJiBrZXkpID0gMDsKKyAgfTsKKyAgU3RhdHVzIEl0
ZXJhdGUoSGFuZGxlciogaGFuZGxlcikgY29uc3Q7CisKKyBwcml2YXRlOgorICBmcmllbmQgY2xh
c3MgV3JpdGVCYXRjaEludGVybmFsOworCisgIHN0ZDo6c3RyaW5nIHJlcF87ICAvLyBTZWUgY29t
bWVudCBpbiB3cml0ZV9iYXRjaC5jYyBmb3IgdGhlIGZvcm1hdCBvZiByZXBfCisKKyAgLy8gSW50
ZW50aW9uYWxseSBjb3B5YWJsZQorfTsKKworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKKworI2Vu
ZGlmICAvLyBTVE9SQUdFX0xFVkVMREJfSU5DTFVERV9XUklURV9CQVRDSF9IXwpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9wb3J0L1JFQURNRSBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xldmVsZGIvcG9ydC9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDIyNTYzZTI1Y2UwMjMwZDkyMzcz
NjM3Nzk5ZGE4ZDI4YWI2MDIyMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xldmVsZGIvcG9ydC9SRUFETUUKQEAgLTAsMCArMSwxMCBAQAorVGhpcyBkaXJlY3RvcnkgY29u
dGFpbnMgaW50ZXJmYWNlcyBhbmQgaW1wbGVtZW50YXRpb25zIHRoYXQgaXNvbGF0ZSB0aGUKK3Jl
c3Qgb2YgdGhlIHBhY2thZ2UgZnJvbSBwbGF0Zm9ybSBkZXRhaWxzLgorCitDb2RlIGluIHRoZSBy
ZXN0IG9mIHRoZSBwYWNrYWdlIGluY2x1ZGVzICJwb3J0LmgiIGZyb20gdGhpcyBkaXJlY3Rvcnku
CisicG9ydC5oIiBpbiB0dXJuIGluY2x1ZGVzIGEgcGxhdGZvcm0gc3BlY2lmaWMgInBvcnRfPHBs
YXRmb3JtPi5oIiBmaWxlCit0aGF0IHByb3ZpZGVzIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyBpbXBs
ZW1lbnRhdGlvbi4KKworU2VlIHBvcnRfcG9zaXguaCBmb3IgYW4gZXhhbXBsZSBvZiB3aGF0IG11
c3QgYmUgcHJvdmlkZWQgaW4gYSBwbGF0Zm9ybQorc3BlY2lmaWMgaGVhZGVyIGZpbGUuCisKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvcG9ydC9hdG9taWNfcG9pbnRlci5o
IGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9wb3J0L2F0b21pY19wb2ludGVyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZTE3YmY0MzVlYWIzM2U1NWE4NzA0NmU3MDVhMWVjYjA0ZGFkN2UyNAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvcG9ydC9hdG9taWNfcG9pbnRlci5o
CkBAIC0wLDAgKzEsMjI0IEBACisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250
cmlidXRvcnMuCisKKy8vIEF0b21pY1BvaW50ZXIgcHJvdmlkZXMgc3RvcmFnZSBmb3IgYSBsb2Nr
LWZyZWUgcG9pbnRlci4KKy8vIFBsYXRmb3JtLWRlcGVuZGVudCBpbXBsZW1lbnRhdGlvbiBvZiBB
dG9taWNQb2ludGVyOgorLy8gLSBJZiB0aGUgcGxhdGZvcm0gcHJvdmlkZXMgYSBjaGVhcCBiYXJy
aWVyLCB3ZSB1c2UgaXQgd2l0aCByYXcgcG9pbnRlcnMKKy8vIC0gSWYgY3N0ZGF0b21pYyBpcyBw
cmVzZW50IChvbiBuZXdlciB2ZXJzaW9ucyBvZiBnY2MsIGl0IGlzKSwgd2UgdXNlCisvLyAgIGEg
Y3N0ZGF0b21pYy1iYXNlZCBBdG9taWNQb2ludGVyLiAgSG93ZXZlciB3ZSBwcmVmZXIgdGhlIG1l
bW9yeQorLy8gICBiYXJyaWVyIGJhc2VkIHZlcnNpb24sIGJlY2F1c2UgYXQgbGVhc3Qgb24gYSBn
Y2MgNC40IDMyLWJpdCBidWlsZAorLy8gICBvbiBsaW51eCwgd2UgaGF2ZSBlbmNvdW50ZXJlZCBh
IGJ1Z2d5IDxjc3RkYXRvbWljPgorLy8gICBpbXBsZW1lbnRhdGlvbi4gIEFsc28sIHNvbWUgPGNz
dGRhdG9taWM+IGltcGxlbWVudGF0aW9ucyBhcmUgbXVjaAorLy8gICBzbG93ZXIgdGhhbiBhIG1l
bW9yeS1iYXJyaWVyIGJhc2VkIGltcGxlbWVudGF0aW9uICh+MTZucyBmb3IKKy8vICAgPGNzdGRh
dG9taWM+IGJhc2VkIGFjcXVpcmUtbG9hZCB2cy4gfjFucyBmb3IgYSBiYXJyaWVyIGJhc2VkCisv
LyAgIGFjcXVpcmUtbG9hZCkuCisvLyBUaGlzIGNvZGUgaXMgYmFzZWQgb24gYXRvbWljb3BzLWlu
dGVybmFscy0qIGluIEdvb2dsZSdzIHBlcmZ0b29sczoKKy8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5j
b20vcC9nb29nbGUtcGVyZnRvb2xzL3NvdXJjZS9icm93c2UvI3N2biUyRnRydW5rJTJGc3JjJTJG
YmFzZQorCisjaWZuZGVmIFBPUlRfQVRPTUlDX1BPSU5URVJfSF8KKyNkZWZpbmUgUE9SVF9BVE9N
SUNfUE9JTlRFUl9IXworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaWZkZWYgTEVWRUxEQl9DU1RE
QVRPTUlDX1BSRVNFTlQKKyNpbmNsdWRlIDxjc3RkYXRvbWljPgorI2VuZGlmCisjaWZkZWYgT1Nf
V0lOCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2VuZGlmCisjaWZkZWYgT1NfTUFDT1NYCisjaW5j
bHVkZSA8bGlia2Vybi9PU0F0b21pYy5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9NX1g2NCkg
fHwgZGVmaW5lZChfX3g4Nl82NF9fKQorI2RlZmluZSBBUkNIX0NQVV9YODZfRkFNSUxZIDEKKyNl
bGlmIGRlZmluZWQoX01fSVg4NikgfHwgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX2kz
ODYpCisjZGVmaW5lIEFSQ0hfQ1BVX1g4Nl9GQU1JTFkgMQorI2VsaWYgZGVmaW5lZChfX0FSTUVM
X18pCisjZGVmaW5lIEFSQ0hfQ1BVX0FSTV9GQU1JTFkgMQorI2VsaWYgZGVmaW5lZChfX3BwY19f
KSB8fCBkZWZpbmVkKF9fcG93ZXJwY19fKSB8fCBkZWZpbmVkKF9fcG93ZXJwYzY0X18pCisjZGVm
aW5lIEFSQ0hfQ1BVX1BQQ19GQU1JTFkgMQorI2VuZGlmCisKK25hbWVzcGFjZSBsZXZlbGRiIHsK
K25hbWVzcGFjZSBwb3J0IHsKKworLy8gRGVmaW5lIE1lbW9yeUJhcnJpZXIoKSBpZiBhdmFpbGFi
bGUKKy8vIFdpbmRvd3Mgb24geDg2CisjaWYgZGVmaW5lZChPU19XSU4pICYmIGRlZmluZWQoQ09N
UElMRVJfTVNWQykgJiYgZGVmaW5lZChBUkNIX0NQVV9YODZfRkFNSUxZKQorLy8gd2luZG93cy5o
IGFscmVhZHkgcHJvdmlkZXMgYSBNZW1vcnlCYXJyaWVyKHZvaWQpIG1hY3JvCisvLyBodHRwOi8v
bXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM2ODQyMDgodj12cy44NSkuYXNweAor
I2RlZmluZSBMRVZFTERCX0hBVkVfTUVNT1JZX0JBUlJJRVIKKworLy8gR2NjIG9uIHg4NgorI2Vs
aWYgZGVmaW5lZChBUkNIX0NQVV9YODZfRkFNSUxZKSAmJiBkZWZpbmVkKF9fR05VQ19fKQoraW5s
aW5lIHZvaWQgTWVtb3J5QmFycmllcigpIHsKKyAgLy8gU2VlIGh0dHA6Ly9nY2MuZ251Lm9yZy9t
bC9nY2MvMjAwMy0wNC9tc2cwMTE4MC5odG1sIGZvciBhIGRpc2N1c3Npb24gb24KKyAgLy8gdGhp
cyBpZGlvbS4gQWxzbyBzZWUgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NZW1vcnlfb3Jk
ZXJpbmcuCisgIF9fYXNtX18gX192b2xhdGlsZV9fKCIiIDogOiA6ICJtZW1vcnkiKTsKK30KKyNk
ZWZpbmUgTEVWRUxEQl9IQVZFX01FTU9SWV9CQVJSSUVSCisKKy8vIFN1biBTdHVkaW8KKyNlbGlm
IGRlZmluZWQoQVJDSF9DUFVfWDg2X0ZBTUlMWSkgJiYgZGVmaW5lZChfX1NVTlBST19DQykKK2lu
bGluZSB2b2lkIE1lbW9yeUJhcnJpZXIoKSB7CisgIC8vIFNlZSBodHRwOi8vZ2NjLmdudS5vcmcv
bWwvZ2NjLzIwMDMtMDQvbXNnMDExODAuaHRtbCBmb3IgYSBkaXNjdXNzaW9uIG9uCisgIC8vIHRo
aXMgaWRpb20uIEFsc28gc2VlIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTWVtb3J5X29y
ZGVyaW5nLgorICBhc20gdm9sYXRpbGUoIiIgOiA6IDogIm1lbW9yeSIpOworfQorI2RlZmluZSBM
RVZFTERCX0hBVkVfTUVNT1JZX0JBUlJJRVIKKworLy8gTWFjIE9TCisjZWxpZiBkZWZpbmVkKE9T
X01BQ09TWCkKK2lubGluZSB2b2lkIE1lbW9yeUJhcnJpZXIoKSB7CisgIE9TTWVtb3J5QmFycmll
cigpOworfQorI2RlZmluZSBMRVZFTERCX0hBVkVfTUVNT1JZX0JBUlJJRVIKKworLy8gQVJNIExp
bnV4CisjZWxpZiBkZWZpbmVkKEFSQ0hfQ1BVX0FSTV9GQU1JTFkpICYmIGRlZmluZWQoX19saW51
eF9fKQordHlwZWRlZiB2b2lkICgqTGludXhLZXJuZWxNZW1vcnlCYXJyaWVyRnVuYykodm9pZCk7
CisvLyBUaGUgTGludXggQVJNIGtlcm5lbCBwcm92aWRlcyBhIGhpZ2hseSBvcHRpbWl6ZWQgZGV2
aWNlLXNwZWNpZmljIG1lbW9yeQorLy8gYmFycmllciBmdW5jdGlvbiBhdCBhIGZpeGVkIG1lbW9y
eSBhZGRyZXNzIHRoYXQgaXMgbWFwcGVkIGluIGV2ZXJ5CisvLyB1c2VyLWxldmVsIHByb2Nlc3Mu
CisvLworLy8gVGhpcyBiZWF0cyB1c2luZyBDUFUtc3BlY2lmaWMgaW5zdHJ1Y3Rpb25zIHdoaWNo
IGFyZSwgb24gc2luZ2xlLWNvcmUKKy8vIGRldmljZXMsIHVuLW5lY2Vzc2FyeSBhbmQgdmVyeSBj
b3N0bHkgKGUuZy4gQVJNdjctQSAiZG1iIiB0YWtlcyBtb3JlCisvLyB0aGFuIDE4MG5zIG9uIGEg
Q29ydGV4LUE4IGxpa2UgdGhlIG9uZSBvbiBhIE5leHVzIE9uZSkuIEJlbmNobWFya2luZworLy8g
c2hvd3MgdGhhdCB0aGUgZXh0cmEgZnVuY3Rpb24gY2FsbCBjb3N0IGlzIGNvbXBsZXRlbHkgbmVn
bGlnaWJsZSBvbgorLy8gbXVsdGktY29yZSBkZXZpY2VzLgorLy8KK2lubGluZSB2b2lkIE1lbW9y
eUJhcnJpZXIoKSB7CisgICgqKExpbnV4S2VybmVsTWVtb3J5QmFycmllckZ1bmMpMHhmZmZmMGZh
MCkoKTsKK30KKyNkZWZpbmUgTEVWRUxEQl9IQVZFX01FTU9SWV9CQVJSSUVSCisKKy8vIFBQQwor
I2VsaWYgZGVmaW5lZChBUkNIX0NQVV9QUENfRkFNSUxZKSAmJiBkZWZpbmVkKF9fR05VQ19fKQor
aW5saW5lIHZvaWQgTWVtb3J5QmFycmllcigpIHsKKyAgLy8gVE9ETyBmb3Igc29tZSBwb3dlcnBj
IGV4cGVydDogaXMgdGhlcmUgYSBjaGVhcGVyIHN1aXRhYmxlIHZhcmlhbnQ/CisgIC8vIFBlcmhh
cHMgYnkgaGF2aW5nIHNlcGFyYXRlIGJhcnJpZXJzIGZvciBhY3F1aXJlIGFuZCByZWxlYXNlIG9w
cy4KKyAgYXNtIHZvbGF0aWxlKCJzeW5jIiA6IDogOiAibWVtb3J5Iik7Cit9CisjZGVmaW5lIExF
VkVMREJfSEFWRV9NRU1PUllfQkFSUklFUgorCisjZW5kaWYKKworLy8gQXRvbWljUG9pbnRlciBi
dWlsdCB1c2luZyBwbGF0Zm9ybS1zcGVjaWZpYyBNZW1vcnlCYXJyaWVyKCkKKyNpZiBkZWZpbmVk
KExFVkVMREJfSEFWRV9NRU1PUllfQkFSUklFUikKK2NsYXNzIEF0b21pY1BvaW50ZXIgeworIHBy
aXZhdGU6CisgIHZvaWQqIHJlcF87CisgcHVibGljOgorICBBdG9taWNQb2ludGVyKCkgeyB9Cisg
IGV4cGxpY2l0IEF0b21pY1BvaW50ZXIodm9pZCogcCkgOiByZXBfKHApIHt9CisgIGlubGluZSB2
b2lkKiBOb0JhcnJpZXJfTG9hZCgpIGNvbnN0IHsgcmV0dXJuIHJlcF87IH0KKyAgaW5saW5lIHZv
aWQgTm9CYXJyaWVyX1N0b3JlKHZvaWQqIHYpIHsgcmVwXyA9IHY7IH0KKyAgaW5saW5lIHZvaWQq
IEFjcXVpcmVfTG9hZCgpIGNvbnN0IHsKKyAgICB2b2lkKiByZXN1bHQgPSByZXBfOworICAgIE1l
bW9yeUJhcnJpZXIoKTsKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisgIGlubGluZSB2b2lkIFJl
bGVhc2VfU3RvcmUodm9pZCogdikgeworICAgIE1lbW9yeUJhcnJpZXIoKTsKKyAgICByZXBfID0g
djsKKyAgfQorfTsKKworLy8gQXRvbWljUG9pbnRlciBiYXNlZCBvbiA8Y3N0ZGF0b21pYz4KKyNl
bGlmIGRlZmluZWQoTEVWRUxEQl9DU1REQVRPTUlDX1BSRVNFTlQpCitjbGFzcyBBdG9taWNQb2lu
dGVyIHsKKyBwcml2YXRlOgorICBzdGQ6OmF0b21pYzx2b2lkKj4gcmVwXzsKKyBwdWJsaWM6Cisg
IEF0b21pY1BvaW50ZXIoKSB7IH0KKyAgZXhwbGljaXQgQXRvbWljUG9pbnRlcih2b2lkKiB2KSA6
IHJlcF8odikgeyB9CisgIGlubGluZSB2b2lkKiBBY3F1aXJlX0xvYWQoKSBjb25zdCB7CisgICAg
cmV0dXJuIHJlcF8ubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKTsKKyAgfQorICBpbmxp
bmUgdm9pZCBSZWxlYXNlX1N0b3JlKHZvaWQqIHYpIHsKKyAgICByZXBfLnN0b3JlKHYsIHN0ZDo6
bWVtb3J5X29yZGVyX3JlbGVhc2UpOworICB9CisgIGlubGluZSB2b2lkKiBOb0JhcnJpZXJfTG9h
ZCgpIGNvbnN0IHsKKyAgICByZXR1cm4gcmVwXy5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4
ZWQpOworICB9CisgIGlubGluZSB2b2lkIE5vQmFycmllcl9TdG9yZSh2b2lkKiB2KSB7CisgICAg
cmVwXy5zdG9yZSh2LCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKKyAgfQorfTsKKworLy8g
QXRvbWljIHBvaW50ZXIgYmFzZWQgb24gc3BhcmMgbWVtb3J5IGJhcnJpZXJzCisjZWxpZiBkZWZp
bmVkKF9fc3BhcmN2OSkgJiYgZGVmaW5lZChfX0dOVUNfXykKK2NsYXNzIEF0b21pY1BvaW50ZXIg
eworIHByaXZhdGU6CisgIHZvaWQqIHJlcF87CisgcHVibGljOgorICBBdG9taWNQb2ludGVyKCkg
eyB9CisgIGV4cGxpY2l0IEF0b21pY1BvaW50ZXIodm9pZCogdikgOiByZXBfKHYpIHsgfQorICBp
bmxpbmUgdm9pZCogQWNxdWlyZV9Mb2FkKCkgY29uc3QgeworICAgIHZvaWQqIHZhbDsKKyAgICBf
X2FzbV9fIF9fdm9sYXRpbGVfXyAoCisgICAgICAgICJsZHggWyVbcmVwX11dLCAlW3ZhbF0gXG5c
dCIKKyAgICAgICAgICJtZW1iYXIgI0xvYWRMb2FkfCNMb2FkU3RvcmUgXG5cdCIKKyAgICAgICAg
OiBbdmFsXSAiPXIiICh2YWwpCisgICAgICAgIDogW3JlcF9dICJyIiAoJnJlcF8pCisgICAgICAg
IDogIm1lbW9yeSIpOworICAgIHJldHVybiB2YWw7CisgIH0KKyAgaW5saW5lIHZvaWQgUmVsZWFz
ZV9TdG9yZSh2b2lkKiB2KSB7CisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAorICAgICAgICAi
bWVtYmFyICNMb2FkU3RvcmV8I1N0b3JlU3RvcmUgXG5cdCIKKyAgICAgICAgInN0eCAlW3ZdLCBb
JVtyZXBfXV0gXG5cdCIKKyAgICAgICAgOgorICAgICAgICA6IFtyZXBfXSAiciIgKCZyZXBfKSwg
W3ZdICJyIiAodikKKyAgICAgICAgOiAibWVtb3J5Iik7CisgIH0KKyAgaW5saW5lIHZvaWQqIE5v
QmFycmllcl9Mb2FkKCkgY29uc3QgeyByZXR1cm4gcmVwXzsgfQorICBpbmxpbmUgdm9pZCBOb0Jh
cnJpZXJfU3RvcmUodm9pZCogdikgeyByZXBfID0gdjsgfQorfTsKKworLy8gQXRvbWljIHBvaW50
ZXIgYmFzZWQgb24gaWE2NCBhY3EvcmVsCisjZWxpZiBkZWZpbmVkKF9faWE2NCkgJiYgZGVmaW5l
ZChfX0dOVUNfXykKK2NsYXNzIEF0b21pY1BvaW50ZXIgeworIHByaXZhdGU6CisgIHZvaWQqIHJl
cF87CisgcHVibGljOgorICBBdG9taWNQb2ludGVyKCkgeyB9CisgIGV4cGxpY2l0IEF0b21pY1Bv
aW50ZXIodm9pZCogdikgOiByZXBfKHYpIHsgfQorICBpbmxpbmUgdm9pZCogQWNxdWlyZV9Mb2Fk
KCkgY29uc3QgeworICAgIHZvaWQqIHZhbCAgICA7CisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18g
KAorICAgICAgICAibGQ4LmFjcSAlW3ZhbF0gPSBbJVtyZXBfXV0gXG5cdCIKKyAgICAgICAgOiBb
dmFsXSAiPXIiICh2YWwpCisgICAgICAgIDogW3JlcF9dICJyIiAoJnJlcF8pCisgICAgICAgIDog
Im1lbW9yeSIKKyAgICAgICAgKTsKKyAgICByZXR1cm4gdmFsOworICB9CisgIGlubGluZSB2b2lk
IFJlbGVhc2VfU3RvcmUodm9pZCogdikgeworICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKKyAg
ICAgICAgInN0OC5yZWwgWyVbcmVwX11dID0gJVt2XSAgXG5cdCIKKyAgICAgICAgOgorICAgICAg
ICA6IFtyZXBfXSAiciIgKCZyZXBfKSwgW3ZdICJyIiAodikKKyAgICAgICAgOiAibWVtb3J5Igor
ICAgICAgICApOworICB9CisgIGlubGluZSB2b2lkKiBOb0JhcnJpZXJfTG9hZCgpIGNvbnN0IHsg
cmV0dXJuIHJlcF87IH0KKyAgaW5saW5lIHZvaWQgTm9CYXJyaWVyX1N0b3JlKHZvaWQqIHYpIHsg
cmVwXyA9IHY7IH0KK307CisKKy8vIFdlIGhhdmUgbmVpdGhlciBNZW1vcnlCYXJyaWVyKCksIG5v
ciA8Y3N0ZGF0b21pYz4KKyNlbHNlCisjZXJyb3IgUGxlYXNlIGltcGxlbWVudCBBdG9taWNQb2lu
dGVyIGZvciB0aGlzIHBsYXRmb3JtLgorCisjZW5kaWYKKworI3VuZGVmIExFVkVMREJfSEFWRV9N
RU1PUllfQkFSUklFUgorI3VuZGVmIEFSQ0hfQ1BVX1g4Nl9GQU1JTFkKKyN1bmRlZiBBUkNIX0NQ
VV9BUk1fRkFNSUxZCisjdW5kZWYgQVJDSF9DUFVfUFBDX0ZBTUlMWQorCit9ICAvLyBuYW1lc3Bh
Y2UgcG9ydAorfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKKworI2VuZGlmICAvLyBQT1JUX0FUT01J
Q19QT0lOVEVSX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3BvcnQv
cG9ydC5oIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9wb3J0L3BvcnQuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5lNjY3ZGI0MGQwZDUwNDZkYTJkNjhkNDVmMWU4M2Y4NTI5Y2VmYTRlCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9wb3J0L3BvcnQuaApAQCAtMCwwICsxLDE5
IEBACisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCisKKyNp
Zm5kZWYgU1RPUkFHRV9MRVZFTERCX1BPUlRfUE9SVF9IXworI2RlZmluZSBTVE9SQUdFX0xFVkVM
REJfUE9SVF9QT1JUX0hfCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLy8gSW5jbHVkZSB0aGUg
YXBwcm9wcmlhdGUgcGxhdGZvcm0gc3BlY2lmaWMgZmlsZSBiZWxvdy4gIElmIHlvdSBhcmUKKy8v
IHBvcnRpbmcgdG8gYSBuZXcgcGxhdGZvcm0sIHNlZSAicG9ydF9leGFtcGxlLmgiIGZvciBkb2N1
bWVudGF0aW9uCisvLyBvZiB3aGF0IHRoZSBuZXcgcG9ydF88cGxhdGZvcm0+LmggZmlsZSBtdXN0
IHByb3ZpZGUuCisjaWYgZGVmaW5lZChMRVZFTERCX1BMQVRGT1JNX1BPU0lYKQorIyAgaW5jbHVk
ZSAicG9ydC9wb3J0X3Bvc2l4LmgiCisjZWxpZiBkZWZpbmVkKExFVkVMREJfUExBVEZPUk1fQ0hS
T01JVU0pCisjICBpbmNsdWRlICJwb3J0L3BvcnRfY2hyb21pdW0uaCIKKyNlbmRpZgorCisjZW5k
aWYgIC8vIFNUT1JBR0VfTEVWRUxEQl9QT1JUX1BPUlRfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xldmVsZGIvcG9ydC9wb3J0X2V4YW1wbGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xldmVsZGIvcG9ydC9wb3J0X2V4YW1wbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYjllNDg5YjMyZDhlYjRl
YzhhNDNkYTA3YTIwYWQ5MTdmYjM1YTFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvbGV2ZWxkYi9wb3J0L3BvcnRfZXhhbXBsZS5oCkBAIC0wLDAgKzEsMTM1IEBACisvLyBD
b3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0
aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCisvLworLy8gVGhpcyBm
aWxlIGNvbnRhaW5zIHRoZSBzcGVjaWZpY2F0aW9uLCBidXQgbm90IHRoZSBpbXBsZW1lbnRhdGlv
bnMsCisvLyBvZiB0aGUgdHlwZXMvb3BlcmF0aW9ucy9ldGMuIHRoYXQgc2hvdWxkIGJlIGRlZmlu
ZWQgYnkgYSBwbGF0Zm9ybQorLy8gc3BlY2lmaWMgcG9ydF88cGxhdGZvcm0+LmggZmlsZS4gIFVz
ZSB0aGlzIGZpbGUgYXMgYSByZWZlcmVuY2UgZm9yCisvLyBob3cgdG8gcG9ydCB0aGlzIHBhY2th
Z2UgdG8gYSBuZXcgcGxhdGZvcm0uCisKKyNpZm5kZWYgU1RPUkFHRV9MRVZFTERCX1BPUlRfUE9S
VF9FWEFNUExFX0hfCisjZGVmaW5lIFNUT1JBR0VfTEVWRUxEQl9QT1JUX1BPUlRfRVhBTVBMRV9I
XworCituYW1lc3BhY2UgbGV2ZWxkYiB7CituYW1lc3BhY2UgcG9ydCB7CisKKy8vIFRPRE8oam9y
bG93KTogTWFueSBvZiB0aGVzZSBiZWxvbmcgbW9yZSBpbiB0aGUgZW52aXJvbm1lbnQgY2xhc3Mg
cmF0aGVyIHRoYW4KKy8vICAgICAgICAgICAgICAgaGVyZS4gV2Ugc2hvdWxkIHRyeSBtb3Zpbmcg
dGhlbSBhbmQgc2VlIGlmIGl0IGFmZmVjdHMgcGVyZi4KKworLy8gVGhlIGZvbGxvd2luZyBib29s
ZWFuIGNvbnN0YW50IG11c3QgYmUgdHJ1ZSBvbiBhIGxpdHRsZS1lbmRpYW4gbWFjaGluZQorLy8g
YW5kIGZhbHNlIG90aGVyd2lzZS4KK3N0YXRpYyBjb25zdCBib29sIGtMaXR0bGVFbmRpYW4gPSB0
cnVlIC8qIG9yIHNvbWUgb3RoZXIgZXhwcmVzc2lvbiAqLzsKKworLy8gLS0tLS0tLS0tLS0tLS0t
LS0tIFRocmVhZGluZyAtLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIEEgTXV0ZXggcmVwcmVzZW50
cyBhbiBleGNsdXNpdmUgbG9jay4KK2NsYXNzIE11dGV4IHsKKyBwdWJsaWM6CisgIE11dGV4KCk7
CisgIH5NdXRleCgpOworCisgIC8vIExvY2sgdGhlIG11dGV4LiAgV2FpdHMgdW50aWwgb3RoZXIg
bG9ja2VycyBoYXZlIGV4aXRlZC4KKyAgLy8gV2lsbCBkZWFkbG9jayBpZiB0aGUgbXV0ZXggaXMg
YWxyZWFkeSBsb2NrZWQgYnkgdGhpcyB0aHJlYWQuCisgIHZvaWQgTG9jaygpOworCisgIC8vIFVu
bG9jayB0aGUgbXV0ZXguCisgIC8vIFJFUVVJUkVTOiBUaGlzIG11dGV4IHdhcyBsb2NrZWQgYnkg
dGhpcyB0aHJlYWQuCisgIHZvaWQgVW5sb2NrKCk7CisKKyAgLy8gT3B0aW9uYWxseSBjcmFzaCBp
ZiB0aGlzIHRocmVhZCBkb2VzIG5vdCBob2xkIHRoaXMgbXV0ZXguCisgIC8vIFRoZSBpbXBsZW1l
bnRhdGlvbiBtdXN0IGJlIGZhc3QsIGVzcGVjaWFsbHkgaWYgTkRFQlVHIGlzCisgIC8vIGRlZmlu
ZWQuICBUaGUgaW1wbGVtZW50YXRpb24gaXMgYWxsb3dlZCB0byBza2lwIGFsbCBjaGVja3MuCisg
IHZvaWQgQXNzZXJ0SGVsZCgpOworfTsKKworY2xhc3MgQ29uZFZhciB7CisgcHVibGljOgorICBl
eHBsaWNpdCBDb25kVmFyKE11dGV4KiBtdSk7CisgIH5Db25kVmFyKCk7CisKKyAgLy8gQXRvbWlj
YWxseSByZWxlYXNlICptdSBhbmQgYmxvY2sgb24gdGhpcyBjb25kaXRpb24gdmFyaWFibGUgdW50
aWwKKyAgLy8gZWl0aGVyIGEgY2FsbCB0byBTaWduYWxBbGwoKSwgb3IgYSBjYWxsIHRvIFNpZ25h
bCgpIHRoYXQgcGlja3MKKyAgLy8gdGhpcyB0aHJlYWQgdG8gd2FrZXVwLgorICAvLyBSRVFVSVJF
UzogdGhpcyB0aHJlYWQgaG9sZHMgKm11CisgIHZvaWQgV2FpdCgpOworCisgIC8vIElmIHRoZXJl
IGFyZSBzb21lIHRocmVhZHMgd2FpdGluZywgd2FrZSB1cCBhdCBsZWFzdCBvbmUgb2YgdGhlbS4K
KyAgdm9pZCBTaWduYWwoKTsKKworICAvLyBXYWtlIHVwIGFsbCB3YWl0aW5nIHRocmVhZHMuCisg
IHZvaWQgU2lnbmFsbEFsbCgpOworfTsKKworLy8gVGhyZWFkLXNhZmUgaW5pdGlhbGl6YXRpb24u
CisvLyBVc2VkIGFzIGZvbGxvd3M6CisvLyAgICAgIHN0YXRpYyBwb3J0OjpPbmNlVHlwZSBpbml0
X2NvbnRyb2wgPSBMRVZFTERCX09OQ0VfSU5JVDsKKy8vICAgICAgc3RhdGljIHZvaWQgSW5pdGlh
bGl6ZXIoKSB7IC4uLiBkbyBzb21ldGhpbmcgLi4uOyB9CisvLyAgICAgIC4uLgorLy8gICAgICBw
b3J0OjpJbml0T25jZSgmaW5pdF9jb250cm9sLCAmSW5pdGlhbGl6ZXIpOwordHlwZWRlZiBpbnRw
dHJfdCBPbmNlVHlwZTsKKyNkZWZpbmUgTEVWRUxEQl9PTkNFX0lOSVQgMAorZXh0ZXJuIHZvaWQg
SW5pdE9uY2UocG9ydDo6T25jZVR5cGUqLCB2b2lkICgqaW5pdGlhbGl6ZXIpKCkpOworCisvLyBB
IHR5cGUgdGhhdCBob2xkcyBhIHBvaW50ZXIgdGhhdCBjYW4gYmUgcmVhZCBvciB3cml0dGVuIGF0
b21pY2FsbHkKKy8vIChpLmUuLCB3aXRob3V0IHdvcmQtdGVhcmluZy4pCitjbGFzcyBBdG9taWNQ
b2ludGVyIHsKKyBwcml2YXRlOgorICBpbnRwdHJfdCByZXBfOworIHB1YmxpYzoKKyAgLy8gSW5p
dGlhbGl6ZSB0byBhcmJpdHJhcnkgdmFsdWUKKyAgQXRvbWljUG9pbnRlcigpOworCisgIC8vIElu
aXRpYWxpemUgdG8gaG9sZCB2CisgIGV4cGxpY2l0IEF0b21pY1BvaW50ZXIodm9pZCogdikgOiBy
ZXBfKHYpIHsgfQorCisgIC8vIFJlYWQgYW5kIHJldHVybiB0aGUgc3RvcmVkIHBvaW50ZXIgd2l0
aCB0aGUgZ3VhcmFudGVlIHRoYXQgbm8KKyAgLy8gbGF0ZXIgbWVtb3J5IGFjY2VzcyAocmVhZCBv
ciB3cml0ZSkgYnkgdGhpcyB0aHJlYWQgY2FuIGJlCisgIC8vIHJlb3JkZXJlZCBhaGVhZCBvZiB0
aGlzIHJlYWQuCisgIHZvaWQqIEFjcXVpcmVfTG9hZCgpIGNvbnN0OworCisgIC8vIFNldCB2IGFz
IHRoZSBzdG9yZWQgcG9pbnRlciB3aXRoIHRoZSBndWFyYW50ZWUgdGhhdCBubyBlYXJsaWVyCisg
IC8vIG1lbW9yeSBhY2Nlc3MgKHJlYWQgb3Igd3JpdGUpIGJ5IHRoaXMgdGhyZWFkIGNhbiBiZSBy
ZW9yZGVyZWQKKyAgLy8gYWZ0ZXIgdGhpcyBzdG9yZS4KKyAgdm9pZCBSZWxlYXNlX1N0b3JlKHZv
aWQqIHYpOworCisgIC8vIFJlYWQgdGhlIHN0b3JlZCBwb2ludGVyIHdpdGggbm8gb3JkZXJpbmcg
Z3VhcmFudGVlcy4KKyAgdm9pZCogTm9CYXJyaWVyX0xvYWQoKSBjb25zdDsKKworICAvLyBTZXQg
dmEgYXMgdGhlIHN0b3JlZCBwb2ludGVyIHdpdGggbm8gb3JkZXJpbmcgZ3VhcmFudGVlcy4KKyAg
dm9pZCBOb0JhcnJpZXJfU3RvcmUodm9pZCogdik7Cit9OworCisvLyAtLS0tLS0tLS0tLS0tLS0t
LS0gQ29tcHJlc3Npb24gLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBTdG9yZSB0aGUgc25hcHB5
IGNvbXByZXNzaW9uIG9mICJpbnB1dFswLGlucHV0X2xlbmd0aC0xXSIgaW4gKm91dHB1dC4KKy8v
IFJldHVybnMgZmFsc2UgaWYgc25hcHB5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBwb3J0Lgor
ZXh0ZXJuIGJvb2wgU25hcHB5X0NvbXByZXNzKGNvbnN0IGNoYXIqIGlucHV0LCBzaXplX3QgaW5w
dXRfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKiBvdXRw
dXQpOworCisvLyBJZiBpbnB1dFswLGlucHV0X2xlbmd0aC0xXSBsb29rcyBsaWtlIGEgdmFsaWQg
c25hcHB5IGNvbXByZXNzZWQKKy8vIGJ1ZmZlciwgc3RvcmUgdGhlIHNpemUgb2YgdGhlIHVuY29t
cHJlc3NlZCBkYXRhIGluICpyZXN1bHQgYW5kCisvLyByZXR1cm4gdHJ1ZS4gIEVsc2UgcmV0dXJu
IGZhbHNlLgorZXh0ZXJuIGJvb2wgU25hcHB5X0dldFVuY29tcHJlc3NlZExlbmd0aChjb25zdCBj
aGFyKiBpbnB1dCwgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZV90KiByZXN1bHQpOworCisvLyBBdHRlbXB0IHRvIHNuYXBweSB1bmNv
bXByZXNzIGlucHV0WzAsaW5wdXRfbGVuZ3RoLTFdIGludG8gKm91dHB1dC4KKy8vIFJldHVybnMg
dHJ1ZSBpZiBzdWNjZXNzZnVsLCBmYWxzZSBpZiB0aGUgaW5wdXQgaXMgaW52YWxpZCBsaWdodHdl
aWdodAorLy8gY29tcHJlc3NlZCBkYXRhLgorLy8KKy8vIFJFUVVJUkVTOiBhdCBsZWFzdCB0aGUg
Zmlyc3QgIm4iIGJ5dGVzIG9mIG91dHB1dFtdIG11c3QgYmUgd3JpdGFibGUKKy8vIHdoZXJlICJu
IiBpcyB0aGUgcmVzdWx0IG9mIGEgc3VjY2Vzc2Z1bCBjYWxsIHRvCisvLyBTbmFwcHlfR2V0VW5j
b21wcmVzc2VkTGVuZ3RoLgorZXh0ZXJuIGJvb2wgU25hcHB5X1VuY29tcHJlc3MoY29uc3QgY2hh
ciogaW5wdXRfZGF0YSwgc2l6ZV90IGlucHV0X2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNoYXIqIG91dHB1dCk7CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxs
YW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gSWYgaGVhcCBwcm9maWxpbmcgaXMgbm90
IHN1cHBvcnRlZCwgcmV0dXJucyBmYWxzZS4KKy8vIEVsc2UgcmVwZWF0ZWRseSBjYWxscyAoKmZ1
bmMpKGFyZywgZGF0YSwgbikgYW5kIHRoZW4gcmV0dXJucyB0cnVlLgorLy8gVGhlIGNvbmNhdGVu
YXRpb24gb2YgYWxsICJkYXRhWzAsbi0xXSIgZnJhZ21lbnRzIGlzIHRoZSBoZWFwIHByb2ZpbGUu
CitleHRlcm4gYm9vbCBHZXRIZWFwUHJvZmlsZSh2b2lkICgqZnVuYykodm9pZCosIGNvbnN0IGNo
YXIqLCBpbnQpLCB2b2lkKiBhcmcpOworCit9ICAvLyBuYW1lc3BhY2UgcG9ydAorfSAgLy8gbmFt
ZXNwYWNlIGxldmVsZGIKKworI2VuZGlmICAvLyBTVE9SQUdFX0xFVkVMREJfUE9SVF9QT1JUX0VY
QU1QTEVfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvcG9ydC9wb3J0
X3Bvc2l4LmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9wb3J0L3BvcnRfcG9zaXguY2MK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNWJhMTI3YTViOTFiZmEwMzYxODlhYTI5ZWUyYWViOWIwMmEwMzRkOAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvcG9ydC9wb3J0X3Bvc2l4
LmNjCkBAIC0wLDAgKzEsNTQgQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNv
bnRyaWJ1dG9ycy4KKworI2luY2x1ZGUgInBvcnQvcG9ydF9wb3NpeC5oIgorCisjaW5jbHVkZSA8
Y3N0ZGxpYj4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1
ZGUgInV0aWwvbG9nZ2luZy5oIgorCituYW1lc3BhY2UgbGV2ZWxkYiB7CituYW1lc3BhY2UgcG9y
dCB7CisKK3N0YXRpYyB2b2lkIFB0aHJlYWRDYWxsKGNvbnN0IGNoYXIqIGxhYmVsLCBpbnQgcmVz
dWx0KSB7CisgIGlmIChyZXN1bHQgIT0gMCkgeworICAgIGZwcmludGYoc3RkZXJyLCAicHRocmVh
ZCAlczogJXNcbiIsIGxhYmVsLCBzdHJlcnJvcihyZXN1bHQpKTsKKyAgICBhYm9ydCgpOworICB9
Cit9CisKK011dGV4OjpNdXRleCgpIHsgUHRocmVhZENhbGwoImluaXQgbXV0ZXgiLCBwdGhyZWFk
X211dGV4X2luaXQoJm11XywgTlVMTCkpOyB9CisKK011dGV4Ojp+TXV0ZXgoKSB7IFB0aHJlYWRD
YWxsKCJkZXN0cm95IG11dGV4IiwgcHRocmVhZF9tdXRleF9kZXN0cm95KCZtdV8pKTsgfQorCit2
b2lkIE11dGV4OjpMb2NrKCkgeyBQdGhyZWFkQ2FsbCgibG9jayIsIHB0aHJlYWRfbXV0ZXhfbG9j
aygmbXVfKSk7IH0KKwordm9pZCBNdXRleDo6VW5sb2NrKCkgeyBQdGhyZWFkQ2FsbCgidW5sb2Nr
IiwgcHRocmVhZF9tdXRleF91bmxvY2soJm11XykpOyB9CisKK0NvbmRWYXI6OkNvbmRWYXIoTXV0
ZXgqIG11KQorICAgIDogbXVfKG11KSB7CisgICAgUHRocmVhZENhbGwoImluaXQgY3YiLCBwdGhy
ZWFkX2NvbmRfaW5pdCgmY3ZfLCBOVUxMKSk7Cit9CisKK0NvbmRWYXI6On5Db25kVmFyKCkgeyBQ
dGhyZWFkQ2FsbCgiZGVzdHJveSBjdiIsIHB0aHJlYWRfY29uZF9kZXN0cm95KCZjdl8pKTsgfQor
Cit2b2lkIENvbmRWYXI6OldhaXQoKSB7CisgIFB0aHJlYWRDYWxsKCJ3YWl0IiwgcHRocmVhZF9j
b25kX3dhaXQoJmN2XywgJm11Xy0+bXVfKSk7Cit9CisKK3ZvaWQgQ29uZFZhcjo6U2lnbmFsKCkg
eworICBQdGhyZWFkQ2FsbCgic2lnbmFsIiwgcHRocmVhZF9jb25kX3NpZ25hbCgmY3ZfKSk7Cit9
CisKK3ZvaWQgQ29uZFZhcjo6U2lnbmFsQWxsKCkgeworICBQdGhyZWFkQ2FsbCgiYnJvYWRjYXN0
IiwgcHRocmVhZF9jb25kX2Jyb2FkY2FzdCgmY3ZfKSk7Cit9CisKK3ZvaWQgSW5pdE9uY2UoT25j
ZVR5cGUqIG9uY2UsIHZvaWQgKCppbml0aWFsaXplcikoKSkgeworICBQdGhyZWFkQ2FsbCgib25j
ZSIsIHB0aHJlYWRfb25jZShvbmNlLCBpbml0aWFsaXplcikpOworfQorCit9ICAvLyBuYW1lc3Bh
Y2UgcG9ydAorfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xldmVsZGIvcG9ydC9wb3J0X3Bvc2l4LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZl
bGRiL3BvcnQvcG9ydF9wb3NpeC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYyYjg5YmZmYjk5YzIzMmMwMzkyMjgw
Njg2OGIwY2NmNjYzYmMxMTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
ZXZlbGRiL3BvcnQvcG9ydF9wb3NpeC5oCkBAIC0wLDAgKzEsMTU3IEBACisvLyBDb3B5cmlnaHQg
KGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9S
UyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCisvLworLy8gU2VlIHBvcnRfZXhhbXBs
ZS5oIGZvciBkb2N1bWVudGF0aW9uIGZvciB0aGUgZm9sbG93aW5nIHR5cGVzL2Z1bmN0aW9ucy4K
KworI2lmbmRlZiBTVE9SQUdFX0xFVkVMREJfUE9SVF9QT1JUX1BPU0lYX0hfCisjZGVmaW5lIFNU
T1JBR0VfTEVWRUxEQl9QT1JUX1BPUlRfUE9TSVhfSF8KKworI3VuZGVmIFBMQVRGT1JNX0lTX0xJ
VFRMRV9FTkRJQU4KKyNpZiBkZWZpbmVkKE9TX01BQ09TWCkKKyAgI2luY2x1ZGUgPG1hY2hpbmUv
ZW5kaWFuLmg+CisgICNpZiBkZWZpbmVkKF9fREFSV0lOX0xJVFRMRV9FTkRJQU4pICYmIGRlZmlu
ZWQoX19EQVJXSU5fQllURV9PUkRFUikKKyAgICAjZGVmaW5lIFBMQVRGT1JNX0lTX0xJVFRMRV9F
TkRJQU4gXAorICAgICAgICAoX19EQVJXSU5fQllURV9PUkRFUiA9PSBfX0RBUldJTl9MSVRUTEVf
RU5ESUFOKQorICAjZW5kaWYKKyNlbGlmIGRlZmluZWQoT1NfU09MQVJJUykKKyAgI2luY2x1ZGUg
PHN5cy9pc2FfZGVmcy5oPgorICAjaWZkZWYgX0xJVFRMRV9FTkRJQU4KKyAgICAjZGVmaW5lIFBM
QVRGT1JNX0lTX0xJVFRMRV9FTkRJQU4gdHJ1ZQorICAjZWxzZQorICAgICNkZWZpbmUgUExBVEZP
Uk1fSVNfTElUVExFX0VORElBTiBmYWxzZQorICAjZW5kaWYKKyNlbGlmIGRlZmluZWQoT1NfRlJF
RUJTRCkKKyAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICAjaW5jbHVkZSA8c3lzL2VuZGlhbi5o
PgorICAjZGVmaW5lIFBMQVRGT1JNX0lTX0xJVFRMRV9FTkRJQU4gKF9CWVRFX09SREVSID09IF9M
SVRUTEVfRU5ESUFOKQorI2VsaWYgZGVmaW5lZChPU19PUEVOQlNEKSB8fCBkZWZpbmVkKE9TX05F
VEJTRCkgfHxcCisgICAgICBkZWZpbmVkKE9TX0RSQUdPTkZMWUJTRCkKKyAgI2luY2x1ZGUgPHN5
cy90eXBlcy5oPgorICAjaW5jbHVkZSA8c3lzL2VuZGlhbi5oPgorI2VsaWYgZGVmaW5lZChPU19I
UFVYKQorICAjZGVmaW5lIFBMQVRGT1JNX0lTX0xJVFRMRV9FTkRJQU4gZmFsc2UKKyNlbGlmIGRl
ZmluZWQoT1NfQU5EUk9JRCkKKyAgLy8gRHVlIHRvIGEgYnVnIGluIHRoZSBOREsgeDg2IDxzeXMv
ZW5kaWFuLmg+IGRlZmluaXRpb24sCisgIC8vIF9CWVRFX09SREVSIG11c3QgYmUgdXNlZCBpbnN0
ZWFkIG9mIF9fQllURV9PUkRFUiBvbiBBbmRyb2lkLgorICAvLyBTZWUgaHR0cDovL2NvZGUuZ29v
Z2xlLmNvbS9wL2FuZHJvaWQvaXNzdWVzL2RldGFpbD9pZD0zOTgyNAorICAjaW5jbHVkZSA8ZW5k
aWFuLmg+CisgICNkZWZpbmUgUExBVEZPUk1fSVNfTElUVExFX0VORElBTiAgKF9CWVRFX09SREVS
ID09IF9MSVRUTEVfRU5ESUFOKQorI2Vsc2UKKyAgI2luY2x1ZGUgPGVuZGlhbi5oPgorI2VuZGlm
CisKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaWZkZWYgU05BUFBZCisjaW5jbHVkZSA8c25hcHB5
Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5j
bHVkZSAicG9ydC9hdG9taWNfcG9pbnRlci5oIgorCisjaWZuZGVmIFBMQVRGT1JNX0lTX0xJVFRM
RV9FTkRJQU4KKyNkZWZpbmUgUExBVEZPUk1fSVNfTElUVExFX0VORElBTiAoX19CWVRFX09SREVS
ID09IF9fTElUVExFX0VORElBTikKKyNlbmRpZgorCisjaWYgZGVmaW5lZChPU19NQUNPU1gpIHx8
IGRlZmluZWQoT1NfU09MQVJJUykgfHwgZGVmaW5lZChPU19GUkVFQlNEKSB8fFwKKyAgICBkZWZp
bmVkKE9TX05FVEJTRCkgfHwgZGVmaW5lZChPU19PUEVOQlNEKSB8fCBkZWZpbmVkKE9TX0RSQUdP
TkZMWUJTRCkgfHxcCisgICAgZGVmaW5lZChPU19BTkRST0lEKSB8fCBkZWZpbmVkKE9TX0hQVVgp
CisvLyBVc2UgZnJlYWQvZndyaXRlL2ZmbHVzaCBvbiBwbGF0Zm9ybXMgd2l0aG91dCBfdW5sb2Nr
ZWQgdmFyaWFudHMKKyNkZWZpbmUgZnJlYWRfdW5sb2NrZWQgZnJlYWQKKyNkZWZpbmUgZndyaXRl
X3VubG9ja2VkIGZ3cml0ZQorI2RlZmluZSBmZmx1c2hfdW5sb2NrZWQgZmZsdXNoCisjZW5kaWYK
KworI2lmIGRlZmluZWQoT1NfTUFDT1NYKSB8fCBkZWZpbmVkKE9TX0ZSRUVCU0QpIHx8XAorICAg
IGRlZmluZWQoT1NfT1BFTkJTRCkgfHwgZGVmaW5lZChPU19EUkFHT05GTFlCU0QpCisvLyBVc2Ug
ZnN5bmMoKSBvbiBwbGF0Zm9ybXMgd2l0aG91dCBmZGF0YXN5bmMoKQorI2RlZmluZSBmZGF0YXN5
bmMgZnN5bmMKKyNlbmRpZgorCisjaWYgZGVmaW5lZChPU19BTkRST0lEKSAmJiBfX0FORFJPSURf
QVBJX18gPCA5CisvLyBmZGF0YXN5bmMoKSB3YXMgb25seSBpbnRyb2R1Y2VkIGluIEFQSSBsZXZl
bCA5IG9uIEFuZHJvaWQuIFVzZSBmc3luYygpCisvLyB3aGVuIHRhcmdldHRpbmcgb2xkZXIgcGxh
dGZvcm1zLgorI2RlZmluZSBmZGF0YXN5bmMgZnN5bmMKKyNlbmRpZgorCituYW1lc3BhY2UgbGV2
ZWxkYiB7CituYW1lc3BhY2UgcG9ydCB7CisKK3N0YXRpYyBjb25zdCBib29sIGtMaXR0bGVFbmRp
YW4gPSBQTEFURk9STV9JU19MSVRUTEVfRU5ESUFOOworI3VuZGVmIFBMQVRGT1JNX0lTX0xJVFRM
RV9FTkRJQU4KKworY2xhc3MgQ29uZFZhcjsKKworY2xhc3MgTXV0ZXggeworIHB1YmxpYzoKKyAg
TXV0ZXgoKTsKKyAgfk11dGV4KCk7CisKKyAgdm9pZCBMb2NrKCk7CisgIHZvaWQgVW5sb2NrKCk7
CisgIHZvaWQgQXNzZXJ0SGVsZCgpIHsgfQorCisgcHJpdmF0ZToKKyAgZnJpZW5kIGNsYXNzIENv
bmRWYXI7CisgIHB0aHJlYWRfbXV0ZXhfdCBtdV87CisKKyAgLy8gTm8gY29weWluZworICBNdXRl
eChjb25zdCBNdXRleCYpOworICB2b2lkIG9wZXJhdG9yPShjb25zdCBNdXRleCYpOworfTsKKwor
Y2xhc3MgQ29uZFZhciB7CisgcHVibGljOgorICBleHBsaWNpdCBDb25kVmFyKE11dGV4KiBtdSk7
CisgIH5Db25kVmFyKCk7CisgIHZvaWQgV2FpdCgpOworICB2b2lkIFNpZ25hbCgpOworICB2b2lk
IFNpZ25hbEFsbCgpOworIHByaXZhdGU6CisgIHB0aHJlYWRfY29uZF90IGN2XzsKKyAgTXV0ZXgq
IG11XzsKK307CisKK3R5cGVkZWYgcHRocmVhZF9vbmNlX3QgT25jZVR5cGU7CisjZGVmaW5lIExF
VkVMREJfT05DRV9JTklUIFBUSFJFQURfT05DRV9JTklUCitleHRlcm4gdm9pZCBJbml0T25jZShP
bmNlVHlwZSogb25jZSwgdm9pZCAoKmluaXRpYWxpemVyKSgpKTsKKworaW5saW5lIGJvb2wgU25h
cHB5X0NvbXByZXNzKGNvbnN0IGNoYXIqIGlucHV0LCBzaXplX3QgbGVuZ3RoLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDo6c3RkOjpzdHJpbmcqIG91dHB1dCkgeworI2lmZGVmIFNOQVBQ
WQorICBvdXRwdXQtPnJlc2l6ZShzbmFwcHk6Ok1heENvbXByZXNzZWRMZW5ndGgobGVuZ3RoKSk7
CisgIHNpemVfdCBvdXRsZW47CisgIHNuYXBweTo6UmF3Q29tcHJlc3MoaW5wdXQsIGxlbmd0aCwg
Jigqb3V0cHV0KVswXSwgJm91dGxlbik7CisgIG91dHB1dC0+cmVzaXplKG91dGxlbik7CisgIHJl
dHVybiB0cnVlOworI2VuZGlmCisKKyAgcmV0dXJuIGZhbHNlOworfQorCitpbmxpbmUgYm9vbCBT
bmFwcHlfR2V0VW5jb21wcmVzc2VkTGVuZ3RoKGNvbnN0IGNoYXIqIGlucHV0LCBzaXplX3QgbGVu
Z3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QqIHJl
c3VsdCkgeworI2lmZGVmIFNOQVBQWQorICByZXR1cm4gc25hcHB5OjpHZXRVbmNvbXByZXNzZWRM
ZW5ndGgoaW5wdXQsIGxlbmd0aCwgcmVzdWx0KTsKKyNlbHNlCisgIHJldHVybiBmYWxzZTsKKyNl
bmRpZgorfQorCitpbmxpbmUgYm9vbCBTbmFwcHlfVW5jb21wcmVzcyhjb25zdCBjaGFyKiBpbnB1
dCwgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIG91
dHB1dCkgeworI2lmZGVmIFNOQVBQWQorICByZXR1cm4gc25hcHB5OjpSYXdVbmNvbXByZXNzKGlu
cHV0LCBsZW5ndGgsIG91dHB1dCk7CisjZWxzZQorICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30K
KworaW5saW5lIGJvb2wgR2V0SGVhcFByb2ZpbGUodm9pZCAoKmZ1bmMpKHZvaWQqLCBjb25zdCBj
aGFyKiwgaW50KSwgdm9pZCogYXJnKSB7CisgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1l
c3BhY2UgcG9ydAorfSAvLyBuYW1lc3BhY2UgbGV2ZWxkYgorCisjZW5kaWYgIC8vIFNUT1JBR0Vf
TEVWRUxEQl9QT1JUX1BPUlRfUE9TSVhfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xldmVsZGIvcG9ydC90aHJlYWRfYW5ub3RhdGlvbnMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xl
dmVsZGIvcG9ydC90aHJlYWRfYW5ub3RhdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZjliNmE3OTI0ZDY4
ZTE2OTQwMjU0ZDZkMjE4ODhlYWFlMmEyNDBkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvbGV2ZWxkYi9wb3J0L3RocmVhZF9hbm5vdGF0aW9ucy5oCkBAIC0wLDAgKzEsNTkg
QEAKKy8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2lm
bmRlZiBTVE9SQUdFX0xFVkVMREJfUE9SVF9USFJFQURfQU5OT1RBVElPTlNfSAorCisvLyBTb21l
IGVudmlyb25tZW50cyBwcm92aWRlIGN1c3RvbSBtYWNyb3MgdG8gYWlkIGluIHN0YXRpYyB0aHJl
YWQtc2FmZXR5CisvLyBhbmFseXNpcy4gIFByb3ZpZGUgZW1wdHkgZGVmaW5pdGlvbnMgb2Ygc3Vj
aCBtYWNyb3MgdW5sZXNzIHRoZXkgYXJlIGFscmVhZHkKKy8vIGRlZmluZWQuCisKKyNpZm5kZWYg
RVhDTFVTSVZFX0xPQ0tTX1JFUVVJUkVECisjZGVmaW5lIEVYQ0xVU0lWRV9MT0NLU19SRVFVSVJF
RCguLi4pCisjZW5kaWYKKworI2lmbmRlZiBTSEFSRURfTE9DS1NfUkVRVUlSRUQKKyNkZWZpbmUg
U0hBUkVEX0xPQ0tTX1JFUVVJUkVEKC4uLikKKyNlbmRpZgorCisjaWZuZGVmIExPQ0tTX0VYQ0xV
REVECisjZGVmaW5lIExPQ0tTX0VYQ0xVREVEKC4uLikKKyNlbmRpZgorCisjaWZuZGVmIExPQ0tf
UkVUVVJORUQKKyNkZWZpbmUgTE9DS19SRVRVUk5FRCh4KQorI2VuZGlmCisKKyNpZm5kZWYgTE9D
S0FCTEUKKyNkZWZpbmUgTE9DS0FCTEUKKyNlbmRpZgorCisjaWZuZGVmIFNDT1BFRF9MT0NLQUJM
RQorI2RlZmluZSBTQ09QRURfTE9DS0FCTEUKKyNlbmRpZgorCisjaWZuZGVmIEVYQ0xVU0lWRV9M
T0NLX0ZVTkNUSU9OCisjZGVmaW5lIEVYQ0xVU0lWRV9MT0NLX0ZVTkNUSU9OKC4uLikKKyNlbmRp
ZgorCisjaWZuZGVmIFNIQVJFRF9MT0NLX0ZVTkNUSU9OCisjZGVmaW5lIFNIQVJFRF9MT0NLX0ZV
TkNUSU9OKC4uLikKKyNlbmRpZgorCisjaWZuZGVmIEVYQ0xVU0lWRV9UUllMT0NLX0ZVTkNUSU9O
CisjZGVmaW5lIEVYQ0xVU0lWRV9UUllMT0NLX0ZVTkNUSU9OKC4uLikKKyNlbmRpZgorCisjaWZu
ZGVmIFNIQVJFRF9UUllMT0NLX0ZVTkNUSU9OCisjZGVmaW5lIFNIQVJFRF9UUllMT0NLX0ZVTkNU
SU9OKC4uLikKKyNlbmRpZgorCisjaWZuZGVmIFVOTE9DS19GVU5DVElPTgorI2RlZmluZSBVTkxP
Q0tfRlVOQ1RJT04oLi4uKQorI2VuZGlmCisKKyNpZm5kZWYgTk9fVEhSRUFEX1NBRkVUWV9BTkFM
WVNJUworI2RlZmluZSBOT19USFJFQURfU0FGRVRZX0FOQUxZU0lTCisjZW5kaWYKKworI2VuZGlm
ICAvLyBTVE9SQUdFX0xFVkVMREJfUE9SVF9USFJFQURfQU5OT1RBVElPTlNfSApkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9wb3J0L3dpbi9zdGRpbnQuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xldmVsZGIvcG9ydC93aW4vc3RkaW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzllZGQwZGIx
M2Y0MzZkYzU3ZGQyOGVkNDAxM2FiNGQ1NWEyOGEzMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xldmVsZGIvcG9ydC93aW4vc3RkaW50LmgKQEAgLTAsMCArMSwyNCBAQAor
Ly8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBT
ZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgorCisvLyBNU1ZD
IGRpZG4ndCBzaGlwIHdpdGggdGhpcyBmaWxlIHVudGlsIHRoZSAyMDEwIHZlcnNpb24uCisKKyNp
Zm5kZWYgU1RPUkFHRV9MRVZFTERCX1BPUlRfV0lOX1NURElOVF9IXworI2RlZmluZSBTVE9SQUdF
X0xFVkVMREJfUE9SVF9XSU5fU1RESU5UX0hfCisKKyNpZiAhZGVmaW5lZChfTVNDX1ZFUikKKyNl
cnJvciBUaGlzIGZpbGUgc2hvdWxkIG9ubHkgYmUgaW5jbHVkZWQgd2hlbiBjb21waWxpbmcgd2l0
aCBNU1ZDLgorI2VuZGlmCisKKy8vIERlZmluZSBDOTkgZXF1aXZhbGVudCB0eXBlcy4KK3R5cGVk
ZWYgc2lnbmVkIGNoYXIgICAgICAgICAgIGludDhfdDsKK3R5cGVkZWYgc2lnbmVkIHNob3J0ICAg
ICAgICAgIGludDE2X3Q7Cit0eXBlZGVmIHNpZ25lZCBpbnQgICAgICAgICAgICBpbnQzMl90Owor
dHlwZWRlZiBzaWduZWQgbG9uZyBsb25nICAgICAgaW50NjRfdDsKK3R5cGVkZWYgdW5zaWduZWQg
Y2hhciAgICAgICAgIHVpbnQ4X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICAgICAgICB1aW50
MTZfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50ICAgICAgICAgIHVpbnQzMl90OwordHlwZWRlZiB1
bnNpZ25lZCBsb25nIGxvbmcgICAgdWludDY0X3Q7CisKKyNlbmRpZiAgLy8gU1RPUkFHRV9MRVZF
TERCX1BPUlRfV0lOX1NURElOVF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2
ZWxkYi90YWJsZS9ibG9jay5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdGFibGUvYmxv
Y2suY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYWI4M2MxMTEyY2MxMGMwYWQ2NWU2MjhkYjkxY2RjYzI3ZGM5ZThj
NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdGFibGUvYmxv
Y2suY2MKQEAgLTAsMCArMSwyNjcgQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxE
QiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9m
IGNvbnRyaWJ1dG9ycy4KKy8vCisvLyBEZWNvZGVzIHRoZSBibG9ja3MgZ2VuZXJhdGVkIGJ5IGJs
b2NrX2J1aWxkZXIuY2MuCisKKyNpbmNsdWRlICJ0YWJsZS9ibG9jay5oIgorCisjaW5jbHVkZSA8
dmVjdG9yPgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlICJsZXZlbGRiL2NvbXBhcmF0
b3IuaCIKKyNpbmNsdWRlICJ0YWJsZS9mb3JtYXQuaCIKKyNpbmNsdWRlICJ1dGlsL2NvZGluZy5o
IgorI2luY2x1ZGUgInV0aWwvbG9nZ2luZy5oIgorCituYW1lc3BhY2UgbGV2ZWxkYiB7CisKK2lu
bGluZSB1aW50MzJfdCBCbG9jazo6TnVtUmVzdGFydHMoKSBjb25zdCB7CisgIGFzc2VydChzaXpl
XyA+PSAyKnNpemVvZih1aW50MzJfdCkpOworICByZXR1cm4gRGVjb2RlRml4ZWQzMihkYXRhXyAr
IHNpemVfIC0gc2l6ZW9mKHVpbnQzMl90KSk7Cit9CisKK0Jsb2NrOjpCbG9jayhjb25zdCBCbG9j
a0NvbnRlbnRzJiBjb250ZW50cykKKyAgICA6IGRhdGFfKGNvbnRlbnRzLmRhdGEuZGF0YSgpKSwK
KyAgICAgIHNpemVfKGNvbnRlbnRzLmRhdGEuc2l6ZSgpKSwKKyAgICAgIG93bmVkXyhjb250ZW50
cy5oZWFwX2FsbG9jYXRlZCkgeworICBpZiAoc2l6ZV8gPCBzaXplb2YodWludDMyX3QpKSB7Cisg
ICAgc2l6ZV8gPSAwOyAgLy8gRXJyb3IgbWFya2VyCisgIH0gZWxzZSB7CisgICAgcmVzdGFydF9v
ZmZzZXRfID0gc2l6ZV8gLSAoMSArIE51bVJlc3RhcnRzKCkpICogc2l6ZW9mKHVpbnQzMl90KTsK
KyAgICBpZiAocmVzdGFydF9vZmZzZXRfID4gc2l6ZV8gLSBzaXplb2YodWludDMyX3QpKSB7Cisg
ICAgICAvLyBUaGUgc2l6ZSBpcyB0b28gc21hbGwgZm9yIE51bVJlc3RhcnRzKCkgYW5kIHRoZXJl
Zm9yZQorICAgICAgLy8gcmVzdGFydF9vZmZzZXRfIHdyYXBwZWQgYXJvdW5kLgorICAgICAgc2l6
ZV8gPSAwOworICAgIH0KKyAgfQorfQorCitCbG9jazo6fkJsb2NrKCkgeworICBpZiAob3duZWRf
KSB7CisgICAgZGVsZXRlW10gZGF0YV87CisgIH0KK30KKworLy8gSGVscGVyIHJvdXRpbmU6IGRl
Y29kZSB0aGUgbmV4dCBibG9jayBlbnRyeSBzdGFydGluZyBhdCAicCIsCisvLyBzdG9yaW5nIHRo
ZSBudW1iZXIgb2Ygc2hhcmVkIGtleSBieXRlcywgbm9uX3NoYXJlZCBrZXkgYnl0ZXMsCisvLyBh
bmQgdGhlIGxlbmd0aCBvZiB0aGUgdmFsdWUgaW4gIipzaGFyZWQiLCAiKm5vbl9zaGFyZWQiLCBh
bmQKKy8vICIqdmFsdWVfbGVuZ3RoIiwgcmVzcGVjdGl2ZWx5LiAgV2lsbCBub3QgZGVyZWZlbmNl
IHBhc3QgImxpbWl0Ii4KKy8vCisvLyBJZiBhbnkgZXJyb3JzIGFyZSBkZXRlY3RlZCwgcmV0dXJu
cyBOVUxMLiAgT3RoZXJ3aXNlLCByZXR1cm5zIGEKKy8vIHBvaW50ZXIgdG8gdGhlIGtleSBkZWx0
YSAoanVzdCBwYXN0IHRoZSB0aHJlZSBkZWNvZGVkIHZhbHVlcykuCitzdGF0aWMgaW5saW5lIGNv
bnN0IGNoYXIqIERlY29kZUVudHJ5KGNvbnN0IGNoYXIqIHAsIGNvbnN0IGNoYXIqIGxpbWl0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCogc2hhcmVkLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCogbm9uX3NoYXJl
ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QqIHZhbHVl
X2xlbmd0aCkgeworICBpZiAobGltaXQgLSBwIDwgMykgcmV0dXJuIE5VTEw7CisgICpzaGFyZWQg
PSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihwKVswXTsKKyAgKm5vbl9z
aGFyZWQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihwKVsxXTsKKyAg
KnZhbHVlX2xlbmd0aCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KHAp
WzJdOworICBpZiAoKCpzaGFyZWQgfCAqbm9uX3NoYXJlZCB8ICp2YWx1ZV9sZW5ndGgpIDwgMTI4
KSB7CisgICAgLy8gRmFzdCBwYXRoOiBhbGwgdGhyZWUgdmFsdWVzIGFyZSBlbmNvZGVkIGluIG9u
ZSBieXRlIGVhY2gKKyAgICBwICs9IDM7CisgIH0gZWxzZSB7CisgICAgaWYgKChwID0gR2V0VmFy
aW50MzJQdHIocCwgbGltaXQsIHNoYXJlZCkpID09IE5VTEwpIHJldHVybiBOVUxMOworICAgIGlm
ICgocCA9IEdldFZhcmludDMyUHRyKHAsIGxpbWl0LCBub25fc2hhcmVkKSkgPT0gTlVMTCkgcmV0
dXJuIE5VTEw7CisgICAgaWYgKChwID0gR2V0VmFyaW50MzJQdHIocCwgbGltaXQsIHZhbHVlX2xl
bmd0aCkpID09IE5VTEwpIHJldHVybiBOVUxMOworICB9CisKKyAgaWYgKHN0YXRpY19jYXN0PHVp
bnQzMl90PihsaW1pdCAtIHApIDwgKCpub25fc2hhcmVkICsgKnZhbHVlX2xlbmd0aCkpIHsKKyAg
ICByZXR1cm4gTlVMTDsKKyAgfQorICByZXR1cm4gcDsKK30KKworY2xhc3MgQmxvY2s6Okl0ZXIg
OiBwdWJsaWMgSXRlcmF0b3IgeworIHByaXZhdGU6CisgIGNvbnN0IENvbXBhcmF0b3IqIGNvbnN0
IGNvbXBhcmF0b3JfOworICBjb25zdCBjaGFyKiBjb25zdCBkYXRhXzsgICAgICAvLyB1bmRlcmx5
aW5nIGJsb2NrIGNvbnRlbnRzCisgIHVpbnQzMl90IGNvbnN0IHJlc3RhcnRzXzsgICAgIC8vIE9m
ZnNldCBvZiByZXN0YXJ0IGFycmF5IChsaXN0IG9mIGZpeGVkMzIpCisgIHVpbnQzMl90IGNvbnN0
IG51bV9yZXN0YXJ0c187IC8vIE51bWJlciBvZiB1aW50MzJfdCBlbnRyaWVzIGluIHJlc3RhcnQg
YXJyYXkKKworICAvLyBjdXJyZW50XyBpcyBvZmZzZXQgaW4gZGF0YV8gb2YgY3VycmVudCBlbnRy
eS4gID49IHJlc3RhcnRzXyBpZiAhVmFsaWQKKyAgdWludDMyX3QgY3VycmVudF87CisgIHVpbnQz
Ml90IHJlc3RhcnRfaW5kZXhfOyAgLy8gSW5kZXggb2YgcmVzdGFydCBibG9jayBpbiB3aGljaCBj
dXJyZW50XyBmYWxscworICBzdGQ6OnN0cmluZyBrZXlfOworICBTbGljZSB2YWx1ZV87CisgIFN0
YXR1cyBzdGF0dXNfOworCisgIGlubGluZSBpbnQgQ29tcGFyZShjb25zdCBTbGljZSYgYSwgY29u
c3QgU2xpY2UmIGIpIGNvbnN0IHsKKyAgICByZXR1cm4gY29tcGFyYXRvcl8tPkNvbXBhcmUoYSwg
Yik7CisgIH0KKworICAvLyBSZXR1cm4gdGhlIG9mZnNldCBpbiBkYXRhXyBqdXN0IHBhc3QgdGhl
IGVuZCBvZiB0aGUgY3VycmVudCBlbnRyeS4KKyAgaW5saW5lIHVpbnQzMl90IE5leHRFbnRyeU9m
ZnNldCgpIGNvbnN0IHsKKyAgICByZXR1cm4gKHZhbHVlXy5kYXRhKCkgKyB2YWx1ZV8uc2l6ZSgp
KSAtIGRhdGFfOworICB9CisKKyAgdWludDMyX3QgR2V0UmVzdGFydFBvaW50KHVpbnQzMl90IGlu
ZGV4KSB7CisgICAgYXNzZXJ0KGluZGV4IDwgbnVtX3Jlc3RhcnRzXyk7CisgICAgcmV0dXJuIERl
Y29kZUZpeGVkMzIoZGF0YV8gKyByZXN0YXJ0c18gKyBpbmRleCAqIHNpemVvZih1aW50MzJfdCkp
OworICB9CisKKyAgdm9pZCBTZWVrVG9SZXN0YXJ0UG9pbnQodWludDMyX3QgaW5kZXgpIHsKKyAg
ICBrZXlfLmNsZWFyKCk7CisgICAgcmVzdGFydF9pbmRleF8gPSBpbmRleDsKKyAgICAvLyBjdXJy
ZW50XyB3aWxsIGJlIGZpeGVkIGJ5IFBhcnNlTmV4dEtleSgpOworCisgICAgLy8gUGFyc2VOZXh0
S2V5KCkgc3RhcnRzIGF0IHRoZSBlbmQgb2YgdmFsdWVfLCBzbyBzZXQgdmFsdWVfIGFjY29yZGlu
Z2x5CisgICAgdWludDMyX3Qgb2Zmc2V0ID0gR2V0UmVzdGFydFBvaW50KGluZGV4KTsKKyAgICB2
YWx1ZV8gPSBTbGljZShkYXRhXyArIG9mZnNldCwgMCk7CisgIH0KKworIHB1YmxpYzoKKyAgSXRl
cihjb25zdCBDb21wYXJhdG9yKiBjb21wYXJhdG9yLAorICAgICAgIGNvbnN0IGNoYXIqIGRhdGEs
CisgICAgICAgdWludDMyX3QgcmVzdGFydHMsCisgICAgICAgdWludDMyX3QgbnVtX3Jlc3RhcnRz
KQorICAgICAgOiBjb21wYXJhdG9yXyhjb21wYXJhdG9yKSwKKyAgICAgICAgZGF0YV8oZGF0YSks
CisgICAgICAgIHJlc3RhcnRzXyhyZXN0YXJ0cyksCisgICAgICAgIG51bV9yZXN0YXJ0c18obnVt
X3Jlc3RhcnRzKSwKKyAgICAgICAgY3VycmVudF8ocmVzdGFydHNfKSwKKyAgICAgICAgcmVzdGFy
dF9pbmRleF8obnVtX3Jlc3RhcnRzXykgeworICAgIGFzc2VydChudW1fcmVzdGFydHNfID4gMCk7
CisgIH0KKworICB2aXJ0dWFsIGJvb2wgVmFsaWQoKSBjb25zdCB7IHJldHVybiBjdXJyZW50XyA8
IHJlc3RhcnRzXzsgfQorICB2aXJ0dWFsIFN0YXR1cyBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBz
dGF0dXNfOyB9CisgIHZpcnR1YWwgU2xpY2Uga2V5KCkgY29uc3QgeworICAgIGFzc2VydChWYWxp
ZCgpKTsKKyAgICByZXR1cm4ga2V5XzsKKyAgfQorICB2aXJ0dWFsIFNsaWNlIHZhbHVlKCkgY29u
c3QgeworICAgIGFzc2VydChWYWxpZCgpKTsKKyAgICByZXR1cm4gdmFsdWVfOworICB9CisKKyAg
dmlydHVhbCB2b2lkIE5leHQoKSB7CisgICAgYXNzZXJ0KFZhbGlkKCkpOworICAgIFBhcnNlTmV4
dEtleSgpOworICB9CisKKyAgdmlydHVhbCB2b2lkIFByZXYoKSB7CisgICAgYXNzZXJ0KFZhbGlk
KCkpOworCisgICAgLy8gU2NhbiBiYWNrd2FyZHMgdG8gYSByZXN0YXJ0IHBvaW50IGJlZm9yZSBj
dXJyZW50XworICAgIGNvbnN0IHVpbnQzMl90IG9yaWdpbmFsID0gY3VycmVudF87CisgICAgd2hp
bGUgKEdldFJlc3RhcnRQb2ludChyZXN0YXJ0X2luZGV4XykgPj0gb3JpZ2luYWwpIHsKKyAgICAg
IGlmIChyZXN0YXJ0X2luZGV4XyA9PSAwKSB7CisgICAgICAgIC8vIE5vIG1vcmUgZW50cmllcwor
ICAgICAgICBjdXJyZW50XyA9IHJlc3RhcnRzXzsKKyAgICAgICAgcmVzdGFydF9pbmRleF8gPSBu
dW1fcmVzdGFydHNfOworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgICByZXN0YXJ0X2lu
ZGV4Xy0tOworICAgIH0KKworICAgIFNlZWtUb1Jlc3RhcnRQb2ludChyZXN0YXJ0X2luZGV4Xyk7
CisgICAgZG8geworICAgICAgLy8gTG9vcCB1bnRpbCBlbmQgb2YgY3VycmVudCBlbnRyeSBoaXRz
IHRoZSBzdGFydCBvZiBvcmlnaW5hbCBlbnRyeQorICAgIH0gd2hpbGUgKFBhcnNlTmV4dEtleSgp
ICYmIE5leHRFbnRyeU9mZnNldCgpIDwgb3JpZ2luYWwpOworICB9CisKKyAgdmlydHVhbCB2b2lk
IFNlZWsoY29uc3QgU2xpY2UmIHRhcmdldCkgeworICAgIC8vIEJpbmFyeSBzZWFyY2ggaW4gcmVz
dGFydCBhcnJheSB0byBmaW5kIHRoZSBsYXN0IHJlc3RhcnQgcG9pbnQKKyAgICAvLyB3aXRoIGEg
a2V5IDwgdGFyZ2V0CisgICAgdWludDMyX3QgbGVmdCA9IDA7CisgICAgdWludDMyX3QgcmlnaHQg
PSBudW1fcmVzdGFydHNfIC0gMTsKKyAgICB3aGlsZSAobGVmdCA8IHJpZ2h0KSB7CisgICAgICB1
aW50MzJfdCBtaWQgPSAobGVmdCArIHJpZ2h0ICsgMSkgLyAyOworICAgICAgdWludDMyX3QgcmVn
aW9uX29mZnNldCA9IEdldFJlc3RhcnRQb2ludChtaWQpOworICAgICAgdWludDMyX3Qgc2hhcmVk
LCBub25fc2hhcmVkLCB2YWx1ZV9sZW5ndGg7CisgICAgICBjb25zdCBjaGFyKiBrZXlfcHRyID0g
RGVjb2RlRW50cnkoZGF0YV8gKyByZWdpb25fb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGFfICsgcmVzdGFydHNfLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICZzaGFyZWQsICZub25fc2hhcmVkLCAmdmFsdWVfbGVuZ3Ro
KTsKKyAgICAgIGlmIChrZXlfcHRyID09IE5VTEwgfHwgKHNoYXJlZCAhPSAwKSkgeworICAgICAg
ICBDb3JydXB0aW9uRXJyb3IoKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgICAgU2xp
Y2UgbWlkX2tleShrZXlfcHRyLCBub25fc2hhcmVkKTsKKyAgICAgIGlmIChDb21wYXJlKG1pZF9r
ZXksIHRhcmdldCkgPCAwKSB7CisgICAgICAgIC8vIEtleSBhdCAibWlkIiBpcyBzbWFsbGVyIHRo
YW4gInRhcmdldCIuICBUaGVyZWZvcmUgYWxsCisgICAgICAgIC8vIGJsb2NrcyBiZWZvcmUgIm1p
ZCIgYXJlIHVuaW50ZXJlc3RpbmcuCisgICAgICAgIGxlZnQgPSBtaWQ7CisgICAgICB9IGVsc2Ug
eworICAgICAgICAvLyBLZXkgYXQgIm1pZCIgaXMgPj0gInRhcmdldCIuICBUaGVyZWZvcmUgYWxs
IGJsb2NrcyBhdCBvcgorICAgICAgICAvLyBhZnRlciAibWlkIiBhcmUgdW5pbnRlcmVzdGluZy4K
KyAgICAgICAgcmlnaHQgPSBtaWQgLSAxOworICAgICAgfQorICAgIH0KKworICAgIC8vIExpbmVh
ciBzZWFyY2ggKHdpdGhpbiByZXN0YXJ0IGJsb2NrKSBmb3IgZmlyc3Qga2V5ID49IHRhcmdldAor
ICAgIFNlZWtUb1Jlc3RhcnRQb2ludChsZWZ0KTsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAg
aWYgKCFQYXJzZU5leHRLZXkoKSkgeworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgICBp
ZiAoQ29tcGFyZShrZXlfLCB0YXJnZXQpID49IDApIHsKKyAgICAgICAgcmV0dXJuOworICAgICAg
fQorICAgIH0KKyAgfQorCisgIHZpcnR1YWwgdm9pZCBTZWVrVG9GaXJzdCgpIHsKKyAgICBTZWVr
VG9SZXN0YXJ0UG9pbnQoMCk7CisgICAgUGFyc2VOZXh0S2V5KCk7CisgIH0KKworICB2aXJ0dWFs
IHZvaWQgU2Vla1RvTGFzdCgpIHsKKyAgICBTZWVrVG9SZXN0YXJ0UG9pbnQobnVtX3Jlc3RhcnRz
XyAtIDEpOworICAgIHdoaWxlIChQYXJzZU5leHRLZXkoKSAmJiBOZXh0RW50cnlPZmZzZXQoKSA8
IHJlc3RhcnRzXykgeworICAgICAgLy8gS2VlcCBza2lwcGluZworICAgIH0KKyAgfQorCisgcHJp
dmF0ZToKKyAgdm9pZCBDb3JydXB0aW9uRXJyb3IoKSB7CisgICAgY3VycmVudF8gPSByZXN0YXJ0
c187CisgICAgcmVzdGFydF9pbmRleF8gPSBudW1fcmVzdGFydHNfOworICAgIHN0YXR1c18gPSBT
dGF0dXM6OkNvcnJ1cHRpb24oImJhZCBlbnRyeSBpbiBibG9jayIpOworICAgIGtleV8uY2xlYXIo
KTsKKyAgICB2YWx1ZV8uY2xlYXIoKTsKKyAgfQorCisgIGJvb2wgUGFyc2VOZXh0S2V5KCkgewor
ICAgIGN1cnJlbnRfID0gTmV4dEVudHJ5T2Zmc2V0KCk7CisgICAgY29uc3QgY2hhciogcCA9IGRh
dGFfICsgY3VycmVudF87CisgICAgY29uc3QgY2hhciogbGltaXQgPSBkYXRhXyArIHJlc3RhcnRz
XzsgIC8vIFJlc3RhcnRzIGNvbWUgcmlnaHQgYWZ0ZXIgZGF0YQorICAgIGlmIChwID49IGxpbWl0
KSB7CisgICAgICAvLyBObyBtb3JlIGVudHJpZXMgdG8gcmV0dXJuLiAgTWFyayBhcyBpbnZhbGlk
LgorICAgICAgY3VycmVudF8gPSByZXN0YXJ0c187CisgICAgICByZXN0YXJ0X2luZGV4XyA9IG51
bV9yZXN0YXJ0c187CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gRGVjb2Rl
IG5leHQgZW50cnkKKyAgICB1aW50MzJfdCBzaGFyZWQsIG5vbl9zaGFyZWQsIHZhbHVlX2xlbmd0
aDsKKyAgICBwID0gRGVjb2RlRW50cnkocCwgbGltaXQsICZzaGFyZWQsICZub25fc2hhcmVkLCAm
dmFsdWVfbGVuZ3RoKTsKKyAgICBpZiAocCA9PSBOVUxMIHx8IGtleV8uc2l6ZSgpIDwgc2hhcmVk
KSB7CisgICAgICBDb3JydXB0aW9uRXJyb3IoKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
IGVsc2UgeworICAgICAga2V5Xy5yZXNpemUoc2hhcmVkKTsKKyAgICAgIGtleV8uYXBwZW5kKHAs
IG5vbl9zaGFyZWQpOworICAgICAgdmFsdWVfID0gU2xpY2UocCArIG5vbl9zaGFyZWQsIHZhbHVl
X2xlbmd0aCk7CisgICAgICB3aGlsZSAocmVzdGFydF9pbmRleF8gKyAxIDwgbnVtX3Jlc3RhcnRz
XyAmJgorICAgICAgICAgICAgIEdldFJlc3RhcnRQb2ludChyZXN0YXJ0X2luZGV4XyArIDEpIDwg
Y3VycmVudF8pIHsKKyAgICAgICAgKytyZXN0YXJ0X2luZGV4XzsKKyAgICAgIH0KKyAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgfQorfTsKKworSXRlcmF0b3IqIEJsb2NrOjpOZXdJdGVyYXRv
cihjb25zdCBDb21wYXJhdG9yKiBjbXApIHsKKyAgaWYgKHNpemVfIDwgMipzaXplb2YodWludDMy
X3QpKSB7CisgICAgcmV0dXJuIE5ld0Vycm9ySXRlcmF0b3IoU3RhdHVzOjpDb3JydXB0aW9uKCJi
YWQgYmxvY2sgY29udGVudHMiKSk7CisgIH0KKyAgY29uc3QgdWludDMyX3QgbnVtX3Jlc3RhcnRz
ID0gTnVtUmVzdGFydHMoKTsKKyAgaWYgKG51bV9yZXN0YXJ0cyA9PSAwKSB7CisgICAgcmV0dXJu
IE5ld0VtcHR5SXRlcmF0b3IoKTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gbmV3IEl0ZXIoY21w
LCBkYXRhXywgcmVzdGFydF9vZmZzZXRfLCBudW1fcmVzdGFydHMpOworICB9Cit9CisKK30gIC8v
IG5hbWVzcGFjZSBsZXZlbGRiCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRi
L3RhYmxlL2Jsb2NrLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxlL2Jsb2NrLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMjQ5M2ViOWY5ZmQ5ZGE0MWFhZmNhYzgwMTgwYzNmODMxOTI4YTMyZAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdGFibGUvYmxvY2suaApA
QCAtMCwwICsxLDQ0IEBACisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmli
dXRvcnMuCisKKyNpZm5kZWYgU1RPUkFHRV9MRVZFTERCX1RBQkxFX0JMT0NLX0hfCisjZGVmaW5l
IFNUT1JBR0VfTEVWRUxEQl9UQUJMRV9CTE9DS19IXworCisjaW5jbHVkZSA8c3RkZGVmLmg+Cisj
aW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSAibGV2ZWxkYi9pdGVyYXRvci5oIgorCituYW1l
c3BhY2UgbGV2ZWxkYiB7CisKK3N0cnVjdCBCbG9ja0NvbnRlbnRzOworY2xhc3MgQ29tcGFyYXRv
cjsKKworY2xhc3MgQmxvY2sgeworIHB1YmxpYzoKKyAgLy8gSW5pdGlhbGl6ZSB0aGUgYmxvY2sg
d2l0aCB0aGUgc3BlY2lmaWVkIGNvbnRlbnRzLgorICBleHBsaWNpdCBCbG9jayhjb25zdCBCbG9j
a0NvbnRlbnRzJiBjb250ZW50cyk7CisKKyAgfkJsb2NrKCk7CisKKyAgc2l6ZV90IHNpemUoKSBj
b25zdCB7IHJldHVybiBzaXplXzsgfQorICBJdGVyYXRvciogTmV3SXRlcmF0b3IoY29uc3QgQ29t
cGFyYXRvciogY29tcGFyYXRvcik7CisKKyBwcml2YXRlOgorICB1aW50MzJfdCBOdW1SZXN0YXJ0
cygpIGNvbnN0OworCisgIGNvbnN0IGNoYXIqIGRhdGFfOworICBzaXplX3Qgc2l6ZV87CisgIHVp
bnQzMl90IHJlc3RhcnRfb2Zmc2V0XzsgICAgIC8vIE9mZnNldCBpbiBkYXRhXyBvZiByZXN0YXJ0
IGFycmF5CisgIGJvb2wgb3duZWRfOyAgICAgICAgICAgICAgICAgIC8vIEJsb2NrIG93bnMgZGF0
YV9bXQorCisgIC8vIE5vIGNvcHlpbmcgYWxsb3dlZAorICBCbG9jayhjb25zdCBCbG9jayYpOwor
ICB2b2lkIG9wZXJhdG9yPShjb25zdCBCbG9jayYpOworCisgIGNsYXNzIEl0ZXI7Cit9OworCit9
ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgorCisjZW5kaWYgIC8vIFNUT1JBR0VfTEVWRUxEQl9UQUJM
RV9CTE9DS19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi90YWJsZS9i
bG9ja19idWlsZGVyLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi90YWJsZS9ibG9ja19i
dWlsZGVyLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRiNjYwY2QwN2NmNTBhZDFiNTQzMTBjMjFiMjIxMDhhYjY5
OTQ4MDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxl
L2Jsb2NrX2J1aWxkZXIuY2MKQEAgLTAsMCArMSwxMDkgQEAKKy8vIENvcHlyaWdodCAoYykgMjAx
MSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUg
Zm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKy8vCisvLyBCbG9ja0J1aWxkZXIgZ2VuZXJhdGVz
IGJsb2NrcyB3aGVyZSBrZXlzIGFyZSBwcmVmaXgtY29tcHJlc3NlZDoKKy8vCisvLyBXaGVuIHdl
IHN0b3JlIGEga2V5LCB3ZSBkcm9wIHRoZSBwcmVmaXggc2hhcmVkIHdpdGggdGhlIHByZXZpb3Vz
CisvLyBzdHJpbmcuICBUaGlzIGhlbHBzIHJlZHVjZSB0aGUgc3BhY2UgcmVxdWlyZW1lbnQgc2ln
bmlmaWNhbnRseS4KKy8vIEZ1cnRoZXJtb3JlLCBvbmNlIGV2ZXJ5IEsga2V5cywgd2UgZG8gbm90
IGFwcGx5IHRoZSBwcmVmaXgKKy8vIGNvbXByZXNzaW9uIGFuZCBzdG9yZSB0aGUgZW50aXJlIGtl
eS4gIFdlIGNhbGwgdGhpcyBhICJyZXN0YXJ0CisvLyBwb2ludCIuICBUaGUgdGFpbCBlbmQgb2Yg
dGhlIGJsb2NrIHN0b3JlcyB0aGUgb2Zmc2V0cyBvZiBhbGwgb2YgdGhlCisvLyByZXN0YXJ0IHBv
aW50cywgYW5kIGNhbiBiZSB1c2VkIHRvIGRvIGEgYmluYXJ5IHNlYXJjaCB3aGVuIGxvb2tpbmcK
Ky8vIGZvciBhIHBhcnRpY3VsYXIga2V5LiAgVmFsdWVzIGFyZSBzdG9yZWQgYXMtaXMgKHdpdGhv
dXQgY29tcHJlc3Npb24pCisvLyBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGNvcnJlc3BvbmRp
bmcga2V5LgorLy8KKy8vIEFuIGVudHJ5IGZvciBhIHBhcnRpY3VsYXIga2V5LXZhbHVlIHBhaXIg
aGFzIHRoZSBmb3JtOgorLy8gICAgIHNoYXJlZF9ieXRlczogdmFyaW50MzIKKy8vICAgICB1bnNo
YXJlZF9ieXRlczogdmFyaW50MzIKKy8vICAgICB2YWx1ZV9sZW5ndGg6IHZhcmludDMyCisvLyAg
ICAga2V5X2RlbHRhOiBjaGFyW3Vuc2hhcmVkX2J5dGVzXQorLy8gICAgIHZhbHVlOiBjaGFyW3Zh
bHVlX2xlbmd0aF0KKy8vIHNoYXJlZF9ieXRlcyA9PSAwIGZvciByZXN0YXJ0IHBvaW50cy4KKy8v
CisvLyBUaGUgdHJhaWxlciBvZiB0aGUgYmxvY2sgaGFzIHRoZSBmb3JtOgorLy8gICAgIHJlc3Rh
cnRzOiB1aW50MzJbbnVtX3Jlc3RhcnRzXQorLy8gICAgIG51bV9yZXN0YXJ0czogdWludDMyCisv
LyByZXN0YXJ0c1tpXSBjb250YWlucyB0aGUgb2Zmc2V0IHdpdGhpbiB0aGUgYmxvY2sgb2YgdGhl
IGl0aCByZXN0YXJ0IHBvaW50LgorCisjaW5jbHVkZSAidGFibGUvYmxvY2tfYnVpbGRlci5oIgor
CisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgImxl
dmVsZGIvY29tcGFyYXRvci5oIgorI2luY2x1ZGUgImxldmVsZGIvdGFibGVfYnVpbGRlci5oIgor
I2luY2x1ZGUgInV0aWwvY29kaW5nLmgiCisKK25hbWVzcGFjZSBsZXZlbGRiIHsKKworQmxvY2tC
dWlsZGVyOjpCbG9ja0J1aWxkZXIoY29uc3QgT3B0aW9ucyogb3B0aW9ucykKKyAgICA6IG9wdGlv
bnNfKG9wdGlvbnMpLAorICAgICAgcmVzdGFydHNfKCksCisgICAgICBjb3VudGVyXygwKSwKKyAg
ICAgIGZpbmlzaGVkXyhmYWxzZSkgeworICBhc3NlcnQob3B0aW9ucy0+YmxvY2tfcmVzdGFydF9p
bnRlcnZhbCA+PSAxKTsKKyAgcmVzdGFydHNfLnB1c2hfYmFjaygwKTsgICAgICAgLy8gRmlyc3Qg
cmVzdGFydCBwb2ludCBpcyBhdCBvZmZzZXQgMAorfQorCit2b2lkIEJsb2NrQnVpbGRlcjo6UmVz
ZXQoKSB7CisgIGJ1ZmZlcl8uY2xlYXIoKTsKKyAgcmVzdGFydHNfLmNsZWFyKCk7CisgIHJlc3Rh
cnRzXy5wdXNoX2JhY2soMCk7ICAgICAgIC8vIEZpcnN0IHJlc3RhcnQgcG9pbnQgaXMgYXQgb2Zm
c2V0IDAKKyAgY291bnRlcl8gPSAwOworICBmaW5pc2hlZF8gPSBmYWxzZTsKKyAgbGFzdF9rZXlf
LmNsZWFyKCk7Cit9CisKK3NpemVfdCBCbG9ja0J1aWxkZXI6OkN1cnJlbnRTaXplRXN0aW1hdGUo
KSBjb25zdCB7CisgIHJldHVybiAoYnVmZmVyXy5zaXplKCkgKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFJhdyBkYXRhIGJ1ZmZlcgorICAgICAgICAgIHJlc3RhcnRzXy5zaXplKCkgKiBzaXpl
b2YodWludDMyX3QpICsgICAvLyBSZXN0YXJ0IGFycmF5CisgICAgICAgICAgc2l6ZW9mKHVpbnQz
Ml90KSk7ICAgICAgICAgICAgICAgICAgICAgIC8vIFJlc3RhcnQgYXJyYXkgbGVuZ3RoCit9CisK
K1NsaWNlIEJsb2NrQnVpbGRlcjo6RmluaXNoKCkgeworICAvLyBBcHBlbmQgcmVzdGFydCBhcnJh
eQorICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlc3RhcnRzXy5zaXplKCk7IGkrKykgeworICAg
IFB1dEZpeGVkMzIoJmJ1ZmZlcl8sIHJlc3RhcnRzX1tpXSk7CisgIH0KKyAgUHV0Rml4ZWQzMigm
YnVmZmVyXywgcmVzdGFydHNfLnNpemUoKSk7CisgIGZpbmlzaGVkXyA9IHRydWU7CisgIHJldHVy
biBTbGljZShidWZmZXJfKTsKK30KKwordm9pZCBCbG9ja0J1aWxkZXI6OkFkZChjb25zdCBTbGlj
ZSYga2V5LCBjb25zdCBTbGljZSYgdmFsdWUpIHsKKyAgU2xpY2UgbGFzdF9rZXlfcGllY2UobGFz
dF9rZXlfKTsKKyAgYXNzZXJ0KCFmaW5pc2hlZF8pOworICBhc3NlcnQoY291bnRlcl8gPD0gb3B0
aW9uc18tPmJsb2NrX3Jlc3RhcnRfaW50ZXJ2YWwpOworICBhc3NlcnQoYnVmZmVyXy5lbXB0eSgp
IC8vIE5vIHZhbHVlcyB5ZXQ/CisgICAgICAgICB8fCBvcHRpb25zXy0+Y29tcGFyYXRvci0+Q29t
cGFyZShrZXksIGxhc3Rfa2V5X3BpZWNlKSA+IDApOworICBzaXplX3Qgc2hhcmVkID0gMDsKKyAg
aWYgKGNvdW50ZXJfIDwgb3B0aW9uc18tPmJsb2NrX3Jlc3RhcnRfaW50ZXJ2YWwpIHsKKyAgICAv
LyBTZWUgaG93IG11Y2ggc2hhcmluZyB0byBkbyB3aXRoIHByZXZpb3VzIHN0cmluZworICAgIGNv
bnN0IHNpemVfdCBtaW5fbGVuZ3RoID0gc3RkOjptaW4obGFzdF9rZXlfcGllY2Uuc2l6ZSgpLCBr
ZXkuc2l6ZSgpKTsKKyAgICB3aGlsZSAoKHNoYXJlZCA8IG1pbl9sZW5ndGgpICYmIChsYXN0X2tl
eV9waWVjZVtzaGFyZWRdID09IGtleVtzaGFyZWRdKSkgeworICAgICAgc2hhcmVkKys7CisgICAg
fQorICB9IGVsc2UgeworICAgIC8vIFJlc3RhcnQgY29tcHJlc3Npb24KKyAgICByZXN0YXJ0c18u
cHVzaF9iYWNrKGJ1ZmZlcl8uc2l6ZSgpKTsKKyAgICBjb3VudGVyXyA9IDA7CisgIH0KKyAgY29u
c3Qgc2l6ZV90IG5vbl9zaGFyZWQgPSBrZXkuc2l6ZSgpIC0gc2hhcmVkOworCisgIC8vIEFkZCAi
PHNoYXJlZD48bm9uX3NoYXJlZD48dmFsdWVfc2l6ZT4iIHRvIGJ1ZmZlcl8KKyAgUHV0VmFyaW50
MzIoJmJ1ZmZlcl8sIHNoYXJlZCk7CisgIFB1dFZhcmludDMyKCZidWZmZXJfLCBub25fc2hhcmVk
KTsKKyAgUHV0VmFyaW50MzIoJmJ1ZmZlcl8sIHZhbHVlLnNpemUoKSk7CisKKyAgLy8gQWRkIHN0
cmluZyBkZWx0YSB0byBidWZmZXJfIGZvbGxvd2VkIGJ5IHZhbHVlCisgIGJ1ZmZlcl8uYXBwZW5k
KGtleS5kYXRhKCkgKyBzaGFyZWQsIG5vbl9zaGFyZWQpOworICBidWZmZXJfLmFwcGVuZCh2YWx1
ZS5kYXRhKCksIHZhbHVlLnNpemUoKSk7CisKKyAgLy8gVXBkYXRlIHN0YXRlCisgIGxhc3Rfa2V5
Xy5yZXNpemUoc2hhcmVkKTsKKyAgbGFzdF9rZXlfLmFwcGVuZChrZXkuZGF0YSgpICsgc2hhcmVk
LCBub25fc2hhcmVkKTsKKyAgYXNzZXJ0KFNsaWNlKGxhc3Rfa2V5XykgPT0ga2V5KTsKKyAgY291
bnRlcl8rKzsKK30KKworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xldmVsZGIvdGFibGUvYmxvY2tfYnVpbGRlci5oIGIvU291cmNlL1RoaXJk
UGFydHkvbGV2ZWxkYi90YWJsZS9ibG9ja19idWlsZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWI1NDViZDFh
ZmI0ZjRlNjVjMzZkODQzMGRkZTA5ZTBmNTQzMjU5ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xldmVsZGIvdGFibGUvYmxvY2tfYnVpbGRlci5oCkBAIC0wLDAgKzEsNTcg
QEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2lm
bmRlZiBTVE9SQUdFX0xFVkVMREJfVEFCTEVfQkxPQ0tfQlVJTERFUl9IXworI2RlZmluZSBTVE9S
QUdFX0xFVkVMREJfVEFCTEVfQkxPQ0tfQlVJTERFUl9IXworCisjaW5jbHVkZSA8dmVjdG9yPgor
CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSAibGV2ZWxkYi9zbGljZS5oIgorCituYW1l
c3BhY2UgbGV2ZWxkYiB7CisKK3N0cnVjdCBPcHRpb25zOworCitjbGFzcyBCbG9ja0J1aWxkZXIg
eworIHB1YmxpYzoKKyAgZXhwbGljaXQgQmxvY2tCdWlsZGVyKGNvbnN0IE9wdGlvbnMqIG9wdGlv
bnMpOworCisgIC8vIFJlc2V0IHRoZSBjb250ZW50cyBhcyBpZiB0aGUgQmxvY2tCdWlsZGVyIHdh
cyBqdXN0IGNvbnN0cnVjdGVkLgorICB2b2lkIFJlc2V0KCk7CisKKyAgLy8gUkVRVUlSRVM6IEZp
bmlzaCgpIGhhcyBub3QgYmVlbiBjYWxsbGVkIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gUmVzZXQo
KS4KKyAgLy8gUkVRVUlSRVM6IGtleSBpcyBsYXJnZXIgdGhhbiBhbnkgcHJldmlvdXNseSBhZGRl
ZCBrZXkKKyAgdm9pZCBBZGQoY29uc3QgU2xpY2UmIGtleSwgY29uc3QgU2xpY2UmIHZhbHVlKTsK
KworICAvLyBGaW5pc2ggYnVpbGRpbmcgdGhlIGJsb2NrIGFuZCByZXR1cm4gYSBzbGljZSB0aGF0
IHJlZmVycyB0byB0aGUKKyAgLy8gYmxvY2sgY29udGVudHMuICBUaGUgcmV0dXJuZWQgc2xpY2Ug
d2lsbCByZW1haW4gdmFsaWQgZm9yIHRoZQorICAvLyBsaWZldGltZSBvZiB0aGlzIGJ1aWxkZXIg
b3IgdW50aWwgUmVzZXQoKSBpcyBjYWxsZWQuCisgIFNsaWNlIEZpbmlzaCgpOworCisgIC8vIFJl
dHVybnMgYW4gZXN0aW1hdGUgb2YgdGhlIGN1cnJlbnQgKHVuY29tcHJlc3NlZCkgc2l6ZSBvZiB0
aGUgYmxvY2sKKyAgLy8gd2UgYXJlIGJ1aWxkaW5nLgorICBzaXplX3QgQ3VycmVudFNpemVFc3Rp
bWF0ZSgpIGNvbnN0OworCisgIC8vIFJldHVybiB0cnVlIGlmZiBubyBlbnRyaWVzIGhhdmUgYmVl
biBhZGRlZCBzaW5jZSB0aGUgbGFzdCBSZXNldCgpCisgIGJvb2wgZW1wdHkoKSBjb25zdCB7Cisg
ICAgcmV0dXJuIGJ1ZmZlcl8uZW1wdHkoKTsKKyAgfQorCisgcHJpdmF0ZToKKyAgY29uc3QgT3B0
aW9ucyogICAgICAgIG9wdGlvbnNfOworICBzdGQ6OnN0cmluZyAgICAgICAgICAgYnVmZmVyXzsg
ICAgICAvLyBEZXN0aW5hdGlvbiBidWZmZXIKKyAgc3RkOjp2ZWN0b3I8dWludDMyX3Q+IHJlc3Rh
cnRzXzsgICAgLy8gUmVzdGFydCBwb2ludHMKKyAgaW50ICAgICAgICAgICAgICAgICAgIGNvdW50
ZXJfOyAgICAgLy8gTnVtYmVyIG9mIGVudHJpZXMgZW1pdHRlZCBzaW5jZSByZXN0YXJ0CisgIGJv
b2wgICAgICAgICAgICAgICAgICBmaW5pc2hlZF87ICAgIC8vIEhhcyBGaW5pc2goKSBiZWVuIGNh
bGxlZD8KKyAgc3RkOjpzdHJpbmcgICAgICAgICAgIGxhc3Rfa2V5XzsKKworICAvLyBObyBjb3B5
aW5nIGFsbG93ZWQKKyAgQmxvY2tCdWlsZGVyKGNvbnN0IEJsb2NrQnVpbGRlciYpOworICB2b2lk
IG9wZXJhdG9yPShjb25zdCBCbG9ja0J1aWxkZXImKTsKK307CisKK30gIC8vIG5hbWVzcGFjZSBs
ZXZlbGRiCisKKyNlbmRpZiAgLy8gU1RPUkFHRV9MRVZFTERCX1RBQkxFX0JMT0NLX0JVSUxERVJf
SF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdGFibGUvZmlsdGVyX2Js
b2NrLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi90YWJsZS9maWx0ZXJfYmxvY2suY2MK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMjAzZTE1YzhiY2IxM2I4Nzc2ODQyMDUyYTcyNWFkMmEzOTA5ZmNmNQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdGFibGUvZmlsdGVyX2Js
b2NrLmNjCkBAIC0wLDAgKzEsMTExIEBACisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIExldmVs
REIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBv
ZiBjb250cmlidXRvcnMuCisKKyNpbmNsdWRlICJ0YWJsZS9maWx0ZXJfYmxvY2suaCIKKworI2lu
Y2x1ZGUgImxldmVsZGIvZmlsdGVyX3BvbGljeS5oIgorI2luY2x1ZGUgInV0aWwvY29kaW5nLmgi
CisKK25hbWVzcGFjZSBsZXZlbGRiIHsKKworLy8gU2VlIGRvYy90YWJsZV9mb3JtYXQudHh0IGZv
ciBhbiBleHBsYW5hdGlvbiBvZiB0aGUgZmlsdGVyIGJsb2NrIGZvcm1hdC4KKworLy8gR2VuZXJh
dGUgbmV3IGZpbHRlciBldmVyeSAyS0Igb2YgZGF0YQorc3RhdGljIGNvbnN0IHNpemVfdCBrRmls
dGVyQmFzZUxnID0gMTE7CitzdGF0aWMgY29uc3Qgc2l6ZV90IGtGaWx0ZXJCYXNlID0gMSA8PCBr
RmlsdGVyQmFzZUxnOworCitGaWx0ZXJCbG9ja0J1aWxkZXI6OkZpbHRlckJsb2NrQnVpbGRlcihj
b25zdCBGaWx0ZXJQb2xpY3kqIHBvbGljeSkKKyAgICA6IHBvbGljeV8ocG9saWN5KSB7Cit9CisK
K3ZvaWQgRmlsdGVyQmxvY2tCdWlsZGVyOjpTdGFydEJsb2NrKHVpbnQ2NF90IGJsb2NrX29mZnNl
dCkgeworICB1aW50NjRfdCBmaWx0ZXJfaW5kZXggPSAoYmxvY2tfb2Zmc2V0IC8ga0ZpbHRlckJh
c2UpOworICBhc3NlcnQoZmlsdGVyX2luZGV4ID49IGZpbHRlcl9vZmZzZXRzXy5zaXplKCkpOwor
ICB3aGlsZSAoZmlsdGVyX2luZGV4ID4gZmlsdGVyX29mZnNldHNfLnNpemUoKSkgeworICAgIEdl
bmVyYXRlRmlsdGVyKCk7CisgIH0KK30KKwordm9pZCBGaWx0ZXJCbG9ja0J1aWxkZXI6OkFkZEtl
eShjb25zdCBTbGljZSYga2V5KSB7CisgIFNsaWNlIGsgPSBrZXk7CisgIHN0YXJ0Xy5wdXNoX2Jh
Y2soa2V5c18uc2l6ZSgpKTsKKyAga2V5c18uYXBwZW5kKGsuZGF0YSgpLCBrLnNpemUoKSk7Cit9
CisKK1NsaWNlIEZpbHRlckJsb2NrQnVpbGRlcjo6RmluaXNoKCkgeworICBpZiAoIXN0YXJ0Xy5l
bXB0eSgpKSB7CisgICAgR2VuZXJhdGVGaWx0ZXIoKTsKKyAgfQorCisgIC8vIEFwcGVuZCBhcnJh
eSBvZiBwZXItZmlsdGVyIG9mZnNldHMKKyAgY29uc3QgdWludDMyX3QgYXJyYXlfb2Zmc2V0ID0g
cmVzdWx0Xy5zaXplKCk7CisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsdGVyX29mZnNldHNf
LnNpemUoKTsgaSsrKSB7CisgICAgUHV0Rml4ZWQzMigmcmVzdWx0XywgZmlsdGVyX29mZnNldHNf
W2ldKTsKKyAgfQorCisgIFB1dEZpeGVkMzIoJnJlc3VsdF8sIGFycmF5X29mZnNldCk7CisgIHJl
c3VsdF8ucHVzaF9iYWNrKGtGaWx0ZXJCYXNlTGcpOyAgLy8gU2F2ZSBlbmNvZGluZyBwYXJhbWV0
ZXIgaW4gcmVzdWx0CisgIHJldHVybiBTbGljZShyZXN1bHRfKTsKK30KKwordm9pZCBGaWx0ZXJC
bG9ja0J1aWxkZXI6OkdlbmVyYXRlRmlsdGVyKCkgeworICBjb25zdCBzaXplX3QgbnVtX2tleXMg
PSBzdGFydF8uc2l6ZSgpOworICBpZiAobnVtX2tleXMgPT0gMCkgeworICAgIC8vIEZhc3QgcGF0
aCBpZiB0aGVyZSBhcmUgbm8ga2V5cyBmb3IgdGhpcyBmaWx0ZXIKKyAgICBmaWx0ZXJfb2Zmc2V0
c18ucHVzaF9iYWNrKHJlc3VsdF8uc2l6ZSgpKTsKKyAgICByZXR1cm47CisgIH0KKworICAvLyBN
YWtlIGxpc3Qgb2Yga2V5cyBmcm9tIGZsYXR0ZW5lZCBrZXkgc3RydWN0dXJlCisgIHN0YXJ0Xy5w
dXNoX2JhY2soa2V5c18uc2l6ZSgpKTsgIC8vIFNpbXBsaWZ5IGxlbmd0aCBjb21wdXRhdGlvbgor
ICB0bXBfa2V5c18ucmVzaXplKG51bV9rZXlzKTsKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBu
dW1fa2V5czsgaSsrKSB7CisgICAgY29uc3QgY2hhciogYmFzZSA9IGtleXNfLmRhdGEoKSArIHN0
YXJ0X1tpXTsKKyAgICBzaXplX3QgbGVuZ3RoID0gc3RhcnRfW2krMV0gLSBzdGFydF9baV07Cisg
ICAgdG1wX2tleXNfW2ldID0gU2xpY2UoYmFzZSwgbGVuZ3RoKTsKKyAgfQorCisgIC8vIEdlbmVy
YXRlIGZpbHRlciBmb3IgY3VycmVudCBzZXQgb2Yga2V5cyBhbmQgYXBwZW5kIHRvIHJlc3VsdF8u
CisgIGZpbHRlcl9vZmZzZXRzXy5wdXNoX2JhY2socmVzdWx0Xy5zaXplKCkpOworICBwb2xpY3lf
LT5DcmVhdGVGaWx0ZXIoJnRtcF9rZXlzX1swXSwgbnVtX2tleXMsICZyZXN1bHRfKTsKKworICB0
bXBfa2V5c18uY2xlYXIoKTsKKyAga2V5c18uY2xlYXIoKTsKKyAgc3RhcnRfLmNsZWFyKCk7Cit9
CisKK0ZpbHRlckJsb2NrUmVhZGVyOjpGaWx0ZXJCbG9ja1JlYWRlcihjb25zdCBGaWx0ZXJQb2xp
Y3kqIHBvbGljeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBT
bGljZSYgY29udGVudHMpCisgICAgOiBwb2xpY3lfKHBvbGljeSksCisgICAgICBkYXRhXyhOVUxM
KSwKKyAgICAgIG9mZnNldF8oTlVMTCksCisgICAgICBudW1fKDApLAorICAgICAgYmFzZV9sZ18o
MCkgeworICBzaXplX3QgbiA9IGNvbnRlbnRzLnNpemUoKTsKKyAgaWYgKG4gPCA1KSByZXR1cm47
ICAvLyAxIGJ5dGUgZm9yIGJhc2VfbGdfIGFuZCA0IGZvciBzdGFydCBvZiBvZmZzZXQgYXJyYXkK
KyAgYmFzZV9sZ18gPSBjb250ZW50c1tuLTFdOworICB1aW50MzJfdCBsYXN0X3dvcmQgPSBEZWNv
ZGVGaXhlZDMyKGNvbnRlbnRzLmRhdGEoKSArIG4gLSA1KTsKKyAgaWYgKGxhc3Rfd29yZCA+IG4g
LSA1KSByZXR1cm47CisgIGRhdGFfID0gY29udGVudHMuZGF0YSgpOworICBvZmZzZXRfID0gZGF0
YV8gKyBsYXN0X3dvcmQ7CisgIG51bV8gPSAobiAtIDUgLSBsYXN0X3dvcmQpIC8gNDsKK30KKwor
Ym9vbCBGaWx0ZXJCbG9ja1JlYWRlcjo6S2V5TWF5TWF0Y2godWludDY0X3QgYmxvY2tfb2Zmc2V0
LCBjb25zdCBTbGljZSYga2V5KSB7CisgIHVpbnQ2NF90IGluZGV4ID0gYmxvY2tfb2Zmc2V0ID4+
IGJhc2VfbGdfOworICBpZiAoaW5kZXggPCBudW1fKSB7CisgICAgdWludDMyX3Qgc3RhcnQgPSBE
ZWNvZGVGaXhlZDMyKG9mZnNldF8gKyBpbmRleCo0KTsKKyAgICB1aW50MzJfdCBsaW1pdCA9IERl
Y29kZUZpeGVkMzIob2Zmc2V0XyArIGluZGV4KjQgKyA0KTsKKyAgICBpZiAoc3RhcnQgPD0gbGlt
aXQgJiYgbGltaXQgPD0gKG9mZnNldF8gLSBkYXRhXykpIHsKKyAgICAgIFNsaWNlIGZpbHRlciA9
IFNsaWNlKGRhdGFfICsgc3RhcnQsIGxpbWl0IC0gc3RhcnQpOworICAgICAgcmV0dXJuIHBvbGlj
eV8tPktleU1heU1hdGNoKGtleSwgZmlsdGVyKTsKKyAgICB9IGVsc2UgaWYgKHN0YXJ0ID09IGxp
bWl0KSB7CisgICAgICAvLyBFbXB0eSBmaWx0ZXJzIGRvIG5vdCBtYXRjaCBhbnkga2V5cworICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfQorICByZXR1cm4gdHJ1ZTsgIC8vIEVycm9ycyBh
cmUgdHJlYXRlZCBhcyBwb3RlbnRpYWwgbWF0Y2hlcworfQorCit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxlL2ZpbHRlcl9ibG9jay5oIGIvU291cmNlL1RoaXJk
UGFydHkvbGV2ZWxkYi90YWJsZS9maWx0ZXJfYmxvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNjdkMDEwYmQx
MDY3NTZjNDU2ZGVhMDEzYzViYWJkZjBhMTg0OTRmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvbGV2ZWxkYi90YWJsZS9maWx0ZXJfYmxvY2suaApAQCAtMCwwICsxLDY4IEBA
CisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
IFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCisvLworLy8g
QSBmaWx0ZXIgYmxvY2sgaXMgc3RvcmVkIG5lYXIgdGhlIGVuZCBvZiBhIFRhYmxlIGZpbGUuICBJ
dCBjb250YWlucworLy8gZmlsdGVycyAoZS5nLiwgYmxvb20gZmlsdGVycykgZm9yIGFsbCBkYXRh
IGJsb2NrcyBpbiB0aGUgdGFibGUgY29tYmluZWQKKy8vIGludG8gYSBzaW5nbGUgZmlsdGVyIGJs
b2NrLgorCisjaWZuZGVmIFNUT1JBR0VfTEVWRUxEQl9UQUJMRV9GSUxURVJfQkxPQ0tfSF8KKyNk
ZWZpbmUgU1RPUkFHRV9MRVZFTERCX1RBQkxFX0ZJTFRFUl9CTE9DS19IXworCisjaW5jbHVkZSA8
c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1
ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlICJsZXZlbGRiL3NsaWNlLmgiCisjaW5jbHVkZSAidXRpbC9o
YXNoLmgiCisKK25hbWVzcGFjZSBsZXZlbGRiIHsKKworY2xhc3MgRmlsdGVyUG9saWN5OworCisv
LyBBIEZpbHRlckJsb2NrQnVpbGRlciBpcyB1c2VkIHRvIGNvbnN0cnVjdCBhbGwgb2YgdGhlIGZp
bHRlcnMgZm9yIGEKKy8vIHBhcnRpY3VsYXIgVGFibGUuICBJdCBnZW5lcmF0ZXMgYSBzaW5nbGUg
c3RyaW5nIHdoaWNoIGlzIHN0b3JlZCBhcworLy8gYSBzcGVjaWFsIGJsb2NrIGluIHRoZSBUYWJs
ZS4KKy8vCisvLyBUaGUgc2VxdWVuY2Ugb2YgY2FsbHMgdG8gRmlsdGVyQmxvY2tCdWlsZGVyIG11
c3QgbWF0Y2ggdGhlIHJlZ2V4cDoKKy8vICAgICAgKFN0YXJ0QmxvY2sgQWRkS2V5KikqIEZpbmlz
aAorY2xhc3MgRmlsdGVyQmxvY2tCdWlsZGVyIHsKKyBwdWJsaWM6CisgIGV4cGxpY2l0IEZpbHRl
ckJsb2NrQnVpbGRlcihjb25zdCBGaWx0ZXJQb2xpY3kqKTsKKworICB2b2lkIFN0YXJ0QmxvY2so
dWludDY0X3QgYmxvY2tfb2Zmc2V0KTsKKyAgdm9pZCBBZGRLZXkoY29uc3QgU2xpY2UmIGtleSk7
CisgIFNsaWNlIEZpbmlzaCgpOworCisgcHJpdmF0ZToKKyAgdm9pZCBHZW5lcmF0ZUZpbHRlcigp
OworCisgIGNvbnN0IEZpbHRlclBvbGljeSogcG9saWN5XzsKKyAgc3RkOjpzdHJpbmcga2V5c187
ICAgICAgICAgICAgICAvLyBGbGF0dGVuZWQga2V5IGNvbnRlbnRzCisgIHN0ZDo6dmVjdG9yPHNp
emVfdD4gc3RhcnRfOyAgICAgLy8gU3RhcnRpbmcgaW5kZXggaW4ga2V5c18gb2YgZWFjaCBrZXkK
KyAgc3RkOjpzdHJpbmcgcmVzdWx0XzsgICAgICAgICAgICAvLyBGaWx0ZXIgZGF0YSBjb21wdXRl
ZCBzbyBmYXIKKyAgc3RkOjp2ZWN0b3I8U2xpY2U+IHRtcF9rZXlzXzsgICAvLyBwb2xpY3lfLT5D
cmVhdGVGaWx0ZXIoKSBhcmd1bWVudAorICBzdGQ6OnZlY3Rvcjx1aW50MzJfdD4gZmlsdGVyX29m
ZnNldHNfOworCisgIC8vIE5vIGNvcHlpbmcgYWxsb3dlZAorICBGaWx0ZXJCbG9ja0J1aWxkZXIo
Y29uc3QgRmlsdGVyQmxvY2tCdWlsZGVyJik7CisgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IEZpbHRl
ckJsb2NrQnVpbGRlciYpOworfTsKKworY2xhc3MgRmlsdGVyQmxvY2tSZWFkZXIgeworIHB1Ymxp
YzoKKyAvLyBSRVFVSVJFUzogImNvbnRlbnRzIiBhbmQgKnBvbGljeSBtdXN0IHN0YXkgbGl2ZSB3
aGlsZSAqdGhpcyBpcyBsaXZlLgorICBGaWx0ZXJCbG9ja1JlYWRlcihjb25zdCBGaWx0ZXJQb2xp
Y3kqIHBvbGljeSwgY29uc3QgU2xpY2UmIGNvbnRlbnRzKTsKKyAgYm9vbCBLZXlNYXlNYXRjaCh1
aW50NjRfdCBibG9ja19vZmZzZXQsIGNvbnN0IFNsaWNlJiBrZXkpOworCisgcHJpdmF0ZToKKyAg
Y29uc3QgRmlsdGVyUG9saWN5KiBwb2xpY3lfOworICBjb25zdCBjaGFyKiBkYXRhXzsgICAgLy8g
UG9pbnRlciB0byBmaWx0ZXIgZGF0YSAoYXQgYmxvY2stc3RhcnQpCisgIGNvbnN0IGNoYXIqIG9m
ZnNldF87ICAvLyBQb2ludGVyIHRvIGJlZ2lubmluZyBvZiBvZmZzZXQgYXJyYXkgKGF0IGJsb2Nr
LWVuZCkKKyAgc2l6ZV90IG51bV87ICAgICAgICAgIC8vIE51bWJlciBvZiBlbnRyaWVzIGluIG9m
ZnNldCBhcnJheQorICBzaXplX3QgYmFzZV9sZ187ICAgICAgLy8gRW5jb2RpbmcgcGFyYW1ldGVy
IChzZWUga0ZpbHRlckJhc2VMZyBpbiAuY2MgZmlsZSkKK307CisKK30KKworI2VuZGlmICAvLyBT
VE9SQUdFX0xFVkVMREJfVEFCTEVfRklMVEVSX0JMT0NLX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxlL2ZpbHRlcl9ibG9ja190ZXN0LmNjIGIvU291cmNlL1Ro
aXJkUGFydHkvbGV2ZWxkYi90YWJsZS9maWx0ZXJfYmxvY2tfdGVzdC5jYwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4z
YTJhMDdjZjUzY2E2MDZiMmQwZTk4OTBlNmI5Y2ZhMDJhNjc4Mzk4Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi90YWJsZS9maWx0ZXJfYmxvY2tfdGVzdC5jYwpA
QCAtMCwwICsxLDEyOCBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBMZXZlbERCIEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJp
YnV0b3JzLgorCisjaW5jbHVkZSAidGFibGUvZmlsdGVyX2Jsb2NrLmgiCisKKyNpbmNsdWRlICJs
ZXZlbGRiL2ZpbHRlcl9wb2xpY3kuaCIKKyNpbmNsdWRlICJ1dGlsL2NvZGluZy5oIgorI2luY2x1
ZGUgInV0aWwvaGFzaC5oIgorI2luY2x1ZGUgInV0aWwvbG9nZ2luZy5oIgorI2luY2x1ZGUgInV0
aWwvdGVzdGhhcm5lc3MuaCIKKyNpbmNsdWRlICJ1dGlsL3Rlc3R1dGlsLmgiCisKK25hbWVzcGFj
ZSBsZXZlbGRiIHsKKworLy8gRm9yIHRlc3Rpbmc6IGVtaXQgYW4gYXJyYXkgd2l0aCBvbmUgaGFz
aCB2YWx1ZSBwZXIga2V5CitjbGFzcyBUZXN0SGFzaEZpbHRlciA6IHB1YmxpYyBGaWx0ZXJQb2xp
Y3kgeworIHB1YmxpYzoKKyAgdmlydHVhbCBjb25zdCBjaGFyKiBOYW1lKCkgY29uc3QgeworICAg
IHJldHVybiAiVGVzdEhhc2hGaWx0ZXIiOworICB9CisKKyAgdmlydHVhbCB2b2lkIENyZWF0ZUZp
bHRlcihjb25zdCBTbGljZSoga2V5cywgaW50IG4sIHN0ZDo6c3RyaW5nKiBkc3QpIGNvbnN0IHsK
KyAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgeworICAgICAgdWludDMyX3QgaCA9IEhh
c2goa2V5c1tpXS5kYXRhKCksIGtleXNbaV0uc2l6ZSgpLCAxKTsKKyAgICAgIFB1dEZpeGVkMzIo
ZHN0LCBoKTsKKyAgICB9CisgIH0KKworICB2aXJ0dWFsIGJvb2wgS2V5TWF5TWF0Y2goY29uc3Qg
U2xpY2UmIGtleSwgY29uc3QgU2xpY2UmIGZpbHRlcikgY29uc3QgeworICAgIHVpbnQzMl90IGgg
PSBIYXNoKGtleS5kYXRhKCksIGtleS5zaXplKCksIDEpOworICAgIGZvciAoaW50IGkgPSAwOyBp
ICsgNCA8PSBmaWx0ZXIuc2l6ZSgpOyBpICs9IDQpIHsKKyAgICAgIGlmIChoID09IERlY29kZUZp
eGVkMzIoZmlsdGVyLmRhdGEoKSArIGkpKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
fQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CisgIH0KK307CisKK2NsYXNzIEZpbHRlckJsb2Nr
VGVzdCB7CisgcHVibGljOgorICBUZXN0SGFzaEZpbHRlciBwb2xpY3lfOworfTsKKworVEVTVChG
aWx0ZXJCbG9ja1Rlc3QsIEVtcHR5QnVpbGRlcikgeworICBGaWx0ZXJCbG9ja0J1aWxkZXIgYnVp
bGRlcigmcG9saWN5Xyk7CisgIFNsaWNlIGJsb2NrID0gYnVpbGRlci5GaW5pc2goKTsKKyAgQVNT
RVJUX0VRKCJcXHgwMFxceDAwXFx4MDBcXHgwMFxceDBiIiwgRXNjYXBlU3RyaW5nKGJsb2NrKSk7
CisgIEZpbHRlckJsb2NrUmVhZGVyIHJlYWRlcigmcG9saWN5XywgYmxvY2spOworICBBU1NFUlRf
VFJVRShyZWFkZXIuS2V5TWF5TWF0Y2goMCwgImZvbyIpKTsKKyAgQVNTRVJUX1RSVUUocmVhZGVy
LktleU1heU1hdGNoKDEwMDAwMCwgImZvbyIpKTsKK30KKworVEVTVChGaWx0ZXJCbG9ja1Rlc3Qs
IFNpbmdsZUNodW5rKSB7CisgIEZpbHRlckJsb2NrQnVpbGRlciBidWlsZGVyKCZwb2xpY3lfKTsK
KyAgYnVpbGRlci5TdGFydEJsb2NrKDEwMCk7CisgIGJ1aWxkZXIuQWRkS2V5KCJmb28iKTsKKyAg
YnVpbGRlci5BZGRLZXkoImJhciIpOworICBidWlsZGVyLkFkZEtleSgiYm94Iik7CisgIGJ1aWxk
ZXIuU3RhcnRCbG9jaygyMDApOworICBidWlsZGVyLkFkZEtleSgiYm94Iik7CisgIGJ1aWxkZXIu
U3RhcnRCbG9jaygzMDApOworICBidWlsZGVyLkFkZEtleSgiaGVsbG8iKTsKKyAgU2xpY2UgYmxv
Y2sgPSBidWlsZGVyLkZpbmlzaCgpOworICBGaWx0ZXJCbG9ja1JlYWRlciByZWFkZXIoJnBvbGlj
eV8sIGJsb2NrKTsKKyAgQVNTRVJUX1RSVUUocmVhZGVyLktleU1heU1hdGNoKDEwMCwgImZvbyIp
KTsKKyAgQVNTRVJUX1RSVUUocmVhZGVyLktleU1heU1hdGNoKDEwMCwgImJhciIpKTsKKyAgQVNT
RVJUX1RSVUUocmVhZGVyLktleU1heU1hdGNoKDEwMCwgImJveCIpKTsKKyAgQVNTRVJUX1RSVUUo
cmVhZGVyLktleU1heU1hdGNoKDEwMCwgImhlbGxvIikpOworICBBU1NFUlRfVFJVRShyZWFkZXIu
S2V5TWF5TWF0Y2goMTAwLCAiZm9vIikpOworICBBU1NFUlRfVFJVRSghIHJlYWRlci5LZXlNYXlN
YXRjaCgxMDAsICJtaXNzaW5nIikpOworICBBU1NFUlRfVFJVRSghIHJlYWRlci5LZXlNYXlNYXRj
aCgxMDAsICJvdGhlciIpKTsKK30KKworVEVTVChGaWx0ZXJCbG9ja1Rlc3QsIE11bHRpQ2h1bmsp
IHsKKyAgRmlsdGVyQmxvY2tCdWlsZGVyIGJ1aWxkZXIoJnBvbGljeV8pOworCisgIC8vIEZpcnN0
IGZpbHRlcgorICBidWlsZGVyLlN0YXJ0QmxvY2soMCk7CisgIGJ1aWxkZXIuQWRkS2V5KCJmb28i
KTsKKyAgYnVpbGRlci5TdGFydEJsb2NrKDIwMDApOworICBidWlsZGVyLkFkZEtleSgiYmFyIik7
CisKKyAgLy8gU2Vjb25kIGZpbHRlcgorICBidWlsZGVyLlN0YXJ0QmxvY2soMzEwMCk7CisgIGJ1
aWxkZXIuQWRkS2V5KCJib3giKTsKKworICAvLyBUaGlyZCBmaWx0ZXIgaXMgZW1wdHkKKworICAv
LyBMYXN0IGZpbHRlcgorICBidWlsZGVyLlN0YXJ0QmxvY2soOTAwMCk7CisgIGJ1aWxkZXIuQWRk
S2V5KCJib3giKTsKKyAgYnVpbGRlci5BZGRLZXkoImhlbGxvIik7CisKKyAgU2xpY2UgYmxvY2sg
PSBidWlsZGVyLkZpbmlzaCgpOworICBGaWx0ZXJCbG9ja1JlYWRlciByZWFkZXIoJnBvbGljeV8s
IGJsb2NrKTsKKworICAvLyBDaGVjayBmaXJzdCBmaWx0ZXIKKyAgQVNTRVJUX1RSVUUocmVhZGVy
LktleU1heU1hdGNoKDAsICJmb28iKSk7CisgIEFTU0VSVF9UUlVFKHJlYWRlci5LZXlNYXlNYXRj
aCgyMDAwLCAiYmFyIikpOworICBBU1NFUlRfVFJVRSghIHJlYWRlci5LZXlNYXlNYXRjaCgwLCAi
Ym94IikpOworICBBU1NFUlRfVFJVRSghIHJlYWRlci5LZXlNYXlNYXRjaCgwLCAiaGVsbG8iKSk7
CisKKyAgLy8gQ2hlY2sgc2Vjb25kIGZpbHRlcgorICBBU1NFUlRfVFJVRShyZWFkZXIuS2V5TWF5
TWF0Y2goMzEwMCwgImJveCIpKTsKKyAgQVNTRVJUX1RSVUUoISByZWFkZXIuS2V5TWF5TWF0Y2go
MzEwMCwgImZvbyIpKTsKKyAgQVNTRVJUX1RSVUUoISByZWFkZXIuS2V5TWF5TWF0Y2goMzEwMCwg
ImJhciIpKTsKKyAgQVNTRVJUX1RSVUUoISByZWFkZXIuS2V5TWF5TWF0Y2goMzEwMCwgImhlbGxv
IikpOworCisgIC8vIENoZWNrIHRoaXJkIGZpbHRlciAoZW1wdHkpCisgIEFTU0VSVF9UUlVFKCEg
cmVhZGVyLktleU1heU1hdGNoKDQxMDAsICJmb28iKSk7CisgIEFTU0VSVF9UUlVFKCEgcmVhZGVy
LktleU1heU1hdGNoKDQxMDAsICJiYXIiKSk7CisgIEFTU0VSVF9UUlVFKCEgcmVhZGVyLktleU1h
eU1hdGNoKDQxMDAsICJib3giKSk7CisgIEFTU0VSVF9UUlVFKCEgcmVhZGVyLktleU1heU1hdGNo
KDQxMDAsICJoZWxsbyIpKTsKKworICAvLyBDaGVjayBsYXN0IGZpbHRlcgorICBBU1NFUlRfVFJV
RShyZWFkZXIuS2V5TWF5TWF0Y2goOTAwMCwgImJveCIpKTsKKyAgQVNTRVJUX1RSVUUocmVhZGVy
LktleU1heU1hdGNoKDkwMDAsICJoZWxsbyIpKTsKKyAgQVNTRVJUX1RSVUUoISByZWFkZXIuS2V5
TWF5TWF0Y2goOTAwMCwgImZvbyIpKTsKKyAgQVNTRVJUX1RSVUUoISByZWFkZXIuS2V5TWF5TWF0
Y2goOTAwMCwgImJhciIpKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKKworaW50IG1h
aW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KSB7CisgIHJldHVybiBsZXZlbGRiOjp0ZXN0OjpSdW5B
bGxUZXN0cygpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi90YWJs
ZS9mb3JtYXQuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxlL2Zvcm1hdC5jYwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5jZGExZGVjZGYzNTQ3NmVjZDVjNDRkN2YzYThlNjkxMTFlNjIwMTI0Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi90YWJsZS9mb3JtYXQuY2MK
QEAgLTAsMCArMSwxNDUgQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRy
aWJ1dG9ycy4KKworI2luY2x1ZGUgInRhYmxlL2Zvcm1hdC5oIgorCisjaW5jbHVkZSAibGV2ZWxk
Yi9lbnYuaCIKKyNpbmNsdWRlICJwb3J0L3BvcnQuaCIKKyNpbmNsdWRlICJ0YWJsZS9ibG9jay5o
IgorI2luY2x1ZGUgInV0aWwvY29kaW5nLmgiCisjaW5jbHVkZSAidXRpbC9jcmMzMmMuaCIKKwor
bmFtZXNwYWNlIGxldmVsZGIgeworCit2b2lkIEJsb2NrSGFuZGxlOjpFbmNvZGVUbyhzdGQ6OnN0
cmluZyogZHN0KSBjb25zdCB7CisgIC8vIFNhbml0eSBjaGVjayB0aGF0IGFsbCBmaWVsZHMgaGF2
ZSBiZWVuIHNldAorICBhc3NlcnQob2Zmc2V0XyAhPSB+c3RhdGljX2Nhc3Q8dWludDY0X3Q+KDAp
KTsKKyAgYXNzZXJ0KHNpemVfICE9IH5zdGF0aWNfY2FzdDx1aW50NjRfdD4oMCkpOworICBQdXRW
YXJpbnQ2NChkc3QsIG9mZnNldF8pOworICBQdXRWYXJpbnQ2NChkc3QsIHNpemVfKTsKK30KKwor
U3RhdHVzIEJsb2NrSGFuZGxlOjpEZWNvZGVGcm9tKFNsaWNlKiBpbnB1dCkgeworICBpZiAoR2V0
VmFyaW50NjQoaW5wdXQsICZvZmZzZXRfKSAmJgorICAgICAgR2V0VmFyaW50NjQoaW5wdXQsICZz
aXplXykpIHsKKyAgICByZXR1cm4gU3RhdHVzOjpPSygpOworICB9IGVsc2UgeworICAgIHJldHVy
biBTdGF0dXM6OkNvcnJ1cHRpb24oImJhZCBibG9jayBoYW5kbGUiKTsKKyAgfQorfQorCit2b2lk
IEZvb3Rlcjo6RW5jb2RlVG8oc3RkOjpzdHJpbmcqIGRzdCkgY29uc3QgeworI2lmbmRlZiBOREVC
VUcKKyAgY29uc3Qgc2l6ZV90IG9yaWdpbmFsX3NpemUgPSBkc3QtPnNpemUoKTsKKyNlbmRpZgor
ICBtZXRhaW5kZXhfaGFuZGxlXy5FbmNvZGVUbyhkc3QpOworICBpbmRleF9oYW5kbGVfLkVuY29k
ZVRvKGRzdCk7CisgIGRzdC0+cmVzaXplKDIgKiBCbG9ja0hhbmRsZTo6a01heEVuY29kZWRMZW5n
dGgpOyAgLy8gUGFkZGluZworICBQdXRGaXhlZDMyKGRzdCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KGtUYWJsZU1hZ2ljTnVtYmVyICYgMHhmZmZmZmZmZnUpKTsKKyAgUHV0Rml4ZWQzMihkc3QsIHN0
YXRpY19jYXN0PHVpbnQzMl90PihrVGFibGVNYWdpY051bWJlciA+PiAzMikpOworICBhc3NlcnQo
ZHN0LT5zaXplKCkgPT0gb3JpZ2luYWxfc2l6ZSArIGtFbmNvZGVkTGVuZ3RoKTsKK30KKworU3Rh
dHVzIEZvb3Rlcjo6RGVjb2RlRnJvbShTbGljZSogaW5wdXQpIHsKKyAgY29uc3QgY2hhciogbWFn
aWNfcHRyID0gaW5wdXQtPmRhdGEoKSArIGtFbmNvZGVkTGVuZ3RoIC0gODsKKyAgY29uc3QgdWlu
dDMyX3QgbWFnaWNfbG8gPSBEZWNvZGVGaXhlZDMyKG1hZ2ljX3B0cik7CisgIGNvbnN0IHVpbnQz
Ml90IG1hZ2ljX2hpID0gRGVjb2RlRml4ZWQzMihtYWdpY19wdHIgKyA0KTsKKyAgY29uc3QgdWlu
dDY0X3QgbWFnaWMgPSAoKHN0YXRpY19jYXN0PHVpbnQ2NF90PihtYWdpY19oaSkgPDwgMzIpIHwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVpbnQ2NF90PihtYWdpY19s
bykpKTsKKyAgaWYgKG1hZ2ljICE9IGtUYWJsZU1hZ2ljTnVtYmVyKSB7CisgICAgcmV0dXJuIFN0
YXR1czo6SW52YWxpZEFyZ3VtZW50KCJub3QgYW4gc3N0YWJsZSAoYmFkIG1hZ2ljIG51bWJlciki
KTsKKyAgfQorCisgIFN0YXR1cyByZXN1bHQgPSBtZXRhaW5kZXhfaGFuZGxlXy5EZWNvZGVGcm9t
KGlucHV0KTsKKyAgaWYgKHJlc3VsdC5vaygpKSB7CisgICAgcmVzdWx0ID0gaW5kZXhfaGFuZGxl
Xy5EZWNvZGVGcm9tKGlucHV0KTsKKyAgfQorICBpZiAocmVzdWx0Lm9rKCkpIHsKKyAgICAvLyBX
ZSBza2lwIG92ZXIgYW55IGxlZnRvdmVyIGRhdGEgKGp1c3QgcGFkZGluZyBmb3Igbm93KSBpbiAi
aW5wdXQiCisgICAgY29uc3QgY2hhciogZW5kID0gbWFnaWNfcHRyICsgODsKKyAgICAqaW5wdXQg
PSBTbGljZShlbmQsIGlucHV0LT5kYXRhKCkgKyBpbnB1dC0+c2l6ZSgpIC0gZW5kKTsKKyAgfQor
ICByZXR1cm4gcmVzdWx0OworfQorCitTdGF0dXMgUmVhZEJsb2NrKFJhbmRvbUFjY2Vzc0ZpbGUq
IGZpbGUsCisgICAgICAgICAgICAgICAgIGNvbnN0IFJlYWRPcHRpb25zJiBvcHRpb25zLAorICAg
ICAgICAgICAgICAgICBjb25zdCBCbG9ja0hhbmRsZSYgaGFuZGxlLAorICAgICAgICAgICAgICAg
ICBCbG9ja0NvbnRlbnRzKiByZXN1bHQpIHsKKyAgcmVzdWx0LT5kYXRhID0gU2xpY2UoKTsKKyAg
cmVzdWx0LT5jYWNoYWJsZSA9IGZhbHNlOworICByZXN1bHQtPmhlYXBfYWxsb2NhdGVkID0gZmFs
c2U7CisKKyAgLy8gUmVhZCB0aGUgYmxvY2sgY29udGVudHMgYXMgd2VsbCBhcyB0aGUgdHlwZS9j
cmMgZm9vdGVyLgorICAvLyBTZWUgdGFibGVfYnVpbGRlci5jYyBmb3IgdGhlIGNvZGUgdGhhdCBi
dWlsdCB0aGlzIHN0cnVjdHVyZS4KKyAgc2l6ZV90IG4gPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGhh
bmRsZS5zaXplKCkpOworICBjaGFyKiBidWYgPSBuZXcgY2hhcltuICsga0Jsb2NrVHJhaWxlclNp
emVdOworICBTbGljZSBjb250ZW50czsKKyAgU3RhdHVzIHMgPSBmaWxlLT5SZWFkKGhhbmRsZS5v
ZmZzZXQoKSwgbiArIGtCbG9ja1RyYWlsZXJTaXplLCAmY29udGVudHMsIGJ1Zik7CisgIGlmICgh
cy5vaygpKSB7CisgICAgZGVsZXRlW10gYnVmOworICAgIHJldHVybiBzOworICB9CisgIGlmIChj
b250ZW50cy5zaXplKCkgIT0gbiArIGtCbG9ja1RyYWlsZXJTaXplKSB7CisgICAgZGVsZXRlW10g
YnVmOworICAgIHJldHVybiBTdGF0dXM6OkNvcnJ1cHRpb24oInRydW5jYXRlZCBibG9jayByZWFk
Iik7CisgIH0KKworICAvLyBDaGVjayB0aGUgY3JjIG9mIHRoZSB0eXBlIGFuZCB0aGUgYmxvY2sg
Y29udGVudHMKKyAgY29uc3QgY2hhciogZGF0YSA9IGNvbnRlbnRzLmRhdGEoKTsgICAgLy8gUG9p
bnRlciB0byB3aGVyZSBSZWFkIHB1dCB0aGUgZGF0YQorICBpZiAob3B0aW9ucy52ZXJpZnlfY2hl
Y2tzdW1zKSB7CisgICAgY29uc3QgdWludDMyX3QgY3JjID0gY3JjMzJjOjpVbm1hc2soRGVjb2Rl
Rml4ZWQzMihkYXRhICsgbiArIDEpKTsKKyAgICBjb25zdCB1aW50MzJfdCBhY3R1YWwgPSBjcmMz
MmM6OlZhbHVlKGRhdGEsIG4gKyAxKTsKKyAgICBpZiAoYWN0dWFsICE9IGNyYykgeworICAgICAg
ZGVsZXRlW10gYnVmOworICAgICAgcyA9IFN0YXR1czo6Q29ycnVwdGlvbigiYmxvY2sgY2hlY2tz
dW0gbWlzbWF0Y2giKTsKKyAgICAgIHJldHVybiBzOworICAgIH0KKyAgfQorCisgIHN3aXRjaCAo
ZGF0YVtuXSkgeworICAgIGNhc2Uga05vQ29tcHJlc3Npb246CisgICAgICBpZiAoZGF0YSAhPSBi
dWYpIHsKKyAgICAgICAgLy8gRmlsZSBpbXBsZW1lbnRhdGlvbiBnYXZlIHVzIHBvaW50ZXIgdG8g
c29tZSBvdGhlciBkYXRhLgorICAgICAgICAvLyBVc2UgaXQgZGlyZWN0bHkgdW5kZXIgdGhlIGFz
c3VtcHRpb24gdGhhdCBpdCB3aWxsIGJlIGxpdmUKKyAgICAgICAgLy8gd2hpbGUgdGhlIGZpbGUg
aXMgb3Blbi4KKyAgICAgICAgZGVsZXRlW10gYnVmOworICAgICAgICByZXN1bHQtPmRhdGEgPSBT
bGljZShkYXRhLCBuKTsKKyAgICAgICAgcmVzdWx0LT5oZWFwX2FsbG9jYXRlZCA9IGZhbHNlOwor
ICAgICAgICByZXN1bHQtPmNhY2hhYmxlID0gZmFsc2U7ICAvLyBEbyBub3QgZG91YmxlLWNhY2hl
CisgICAgICB9IGVsc2UgeworICAgICAgICByZXN1bHQtPmRhdGEgPSBTbGljZShidWYsIG4pOwor
ICAgICAgICByZXN1bHQtPmhlYXBfYWxsb2NhdGVkID0gdHJ1ZTsKKyAgICAgICAgcmVzdWx0LT5j
YWNoYWJsZSA9IHRydWU7CisgICAgICB9CisKKyAgICAgIC8vIE9rCisgICAgICBicmVhazsKKyAg
ICBjYXNlIGtTbmFwcHlDb21wcmVzc2lvbjogeworICAgICAgc2l6ZV90IHVsZW5ndGggPSAwOwor
ICAgICAgaWYgKCFwb3J0OjpTbmFwcHlfR2V0VW5jb21wcmVzc2VkTGVuZ3RoKGRhdGEsIG4sICZ1
bGVuZ3RoKSkgeworICAgICAgICBkZWxldGVbXSBidWY7CisgICAgICAgIHJldHVybiBTdGF0dXM6
OkNvcnJ1cHRpb24oImNvcnJ1cHRlZCBjb21wcmVzc2VkIGJsb2NrIGNvbnRlbnRzIik7CisgICAg
ICB9CisgICAgICBjaGFyKiB1YnVmID0gbmV3IGNoYXJbdWxlbmd0aF07CisgICAgICBpZiAoIXBv
cnQ6OlNuYXBweV9VbmNvbXByZXNzKGRhdGEsIG4sIHVidWYpKSB7CisgICAgICAgIGRlbGV0ZVtd
IGJ1ZjsKKyAgICAgICAgZGVsZXRlW10gdWJ1ZjsKKyAgICAgICAgcmV0dXJuIFN0YXR1czo6Q29y
cnVwdGlvbigiY29ycnVwdGVkIGNvbXByZXNzZWQgYmxvY2sgY29udGVudHMiKTsKKyAgICAgIH0K
KyAgICAgIGRlbGV0ZVtdIGJ1ZjsKKyAgICAgIHJlc3VsdC0+ZGF0YSA9IFNsaWNlKHVidWYsIHVs
ZW5ndGgpOworICAgICAgcmVzdWx0LT5oZWFwX2FsbG9jYXRlZCA9IHRydWU7CisgICAgICByZXN1
bHQtPmNhY2hhYmxlID0gdHJ1ZTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0Ogor
ICAgICAgZGVsZXRlW10gYnVmOworICAgICAgcmV0dXJuIFN0YXR1czo6Q29ycnVwdGlvbigiYmFk
IGJsb2NrIHR5cGUiKTsKKyAgfQorCisgIHJldHVybiBTdGF0dXM6Ok9LKCk7Cit9CisKK30gIC8v
IG5hbWVzcGFjZSBsZXZlbGRiCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRi
L3RhYmxlL2Zvcm1hdC5oIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi90YWJsZS9mb3JtYXQu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi42YzBiODBjMDE3OWM3ZmZmYmY2ZWUyYWY4MDJhMTBlYzAyZDczOTk4Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi90YWJsZS9mb3JtYXQu
aApAQCAtMCwwICsxLDEwOCBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29u
dHJpYnV0b3JzLgorCisjaWZuZGVmIFNUT1JBR0VfTEVWRUxEQl9UQUJMRV9GT1JNQVRfSF8KKyNk
ZWZpbmUgU1RPUkFHRV9MRVZFTERCX1RBQkxFX0ZPUk1BVF9IXworCisjaW5jbHVkZSA8c3RyaW5n
PgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgImxldmVsZGIvc2xpY2UuaCIKKyNpbmNs
dWRlICJsZXZlbGRiL3N0YXR1cy5oIgorI2luY2x1ZGUgImxldmVsZGIvdGFibGVfYnVpbGRlci5o
IgorCituYW1lc3BhY2UgbGV2ZWxkYiB7CisKK2NsYXNzIEJsb2NrOworY2xhc3MgUmFuZG9tQWNj
ZXNzRmlsZTsKK3N0cnVjdCBSZWFkT3B0aW9uczsKKworLy8gQmxvY2tIYW5kbGUgaXMgYSBwb2lu
dGVyIHRvIHRoZSBleHRlbnQgb2YgYSBmaWxlIHRoYXQgc3RvcmVzIGEgZGF0YQorLy8gYmxvY2sg
b3IgYSBtZXRhIGJsb2NrLgorY2xhc3MgQmxvY2tIYW5kbGUgeworIHB1YmxpYzoKKyAgQmxvY2tI
YW5kbGUoKTsKKworICAvLyBUaGUgb2Zmc2V0IG9mIHRoZSBibG9jayBpbiB0aGUgZmlsZS4KKyAg
dWludDY0X3Qgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gb2Zmc2V0XzsgfQorICB2b2lkIHNldF9v
ZmZzZXQodWludDY0X3Qgb2Zmc2V0KSB7IG9mZnNldF8gPSBvZmZzZXQ7IH0KKworICAvLyBUaGUg
c2l6ZSBvZiB0aGUgc3RvcmVkIGJsb2NrCisgIHVpbnQ2NF90IHNpemUoKSBjb25zdCB7IHJldHVy
biBzaXplXzsgfQorICB2b2lkIHNldF9zaXplKHVpbnQ2NF90IHNpemUpIHsgc2l6ZV8gPSBzaXpl
OyB9CisKKyAgdm9pZCBFbmNvZGVUbyhzdGQ6OnN0cmluZyogZHN0KSBjb25zdDsKKyAgU3RhdHVz
IERlY29kZUZyb20oU2xpY2UqIGlucHV0KTsKKworICAvLyBNYXhpbXVtIGVuY29kaW5nIGxlbmd0
aCBvZiBhIEJsb2NrSGFuZGxlCisgIGVudW0geyBrTWF4RW5jb2RlZExlbmd0aCA9IDEwICsgMTAg
fTsKKworIHByaXZhdGU6CisgIHVpbnQ2NF90IG9mZnNldF87CisgIHVpbnQ2NF90IHNpemVfOwor
fTsKKworLy8gRm9vdGVyIGVuY2Fwc3VsYXRlcyB0aGUgZml4ZWQgaW5mb3JtYXRpb24gc3RvcmVk
IGF0IHRoZSB0YWlsCisvLyBlbmQgb2YgZXZlcnkgdGFibGUgZmlsZS4KK2NsYXNzIEZvb3RlciB7
CisgcHVibGljOgorICBGb290ZXIoKSB7IH0KKworICAvLyBUaGUgYmxvY2sgaGFuZGxlIGZvciB0
aGUgbWV0YWluZGV4IGJsb2NrIG9mIHRoZSB0YWJsZQorICBjb25zdCBCbG9ja0hhbmRsZSYgbWV0
YWluZGV4X2hhbmRsZSgpIGNvbnN0IHsgcmV0dXJuIG1ldGFpbmRleF9oYW5kbGVfOyB9CisgIHZv
aWQgc2V0X21ldGFpbmRleF9oYW5kbGUoY29uc3QgQmxvY2tIYW5kbGUmIGgpIHsgbWV0YWluZGV4
X2hhbmRsZV8gPSBoOyB9CisKKyAgLy8gVGhlIGJsb2NrIGhhbmRsZSBmb3IgdGhlIGluZGV4IGJs
b2NrIG9mIHRoZSB0YWJsZQorICBjb25zdCBCbG9ja0hhbmRsZSYgaW5kZXhfaGFuZGxlKCkgY29u
c3QgeworICAgIHJldHVybiBpbmRleF9oYW5kbGVfOworICB9CisgIHZvaWQgc2V0X2luZGV4X2hh
bmRsZShjb25zdCBCbG9ja0hhbmRsZSYgaCkgeworICAgIGluZGV4X2hhbmRsZV8gPSBoOworICB9
CisKKyAgdm9pZCBFbmNvZGVUbyhzdGQ6OnN0cmluZyogZHN0KSBjb25zdDsKKyAgU3RhdHVzIERl
Y29kZUZyb20oU2xpY2UqIGlucHV0KTsKKworICAvLyBFbmNvZGVkIGxlbmd0aCBvZiBhIEZvb3Rl
ci4gIE5vdGUgdGhhdCB0aGUgc2VyaWFsaXphdGlvbiBvZiBhCisgIC8vIEZvb3RlciB3aWxsIGFs
d2F5cyBvY2N1cHkgZXhhY3RseSB0aGlzIG1hbnkgYnl0ZXMuICBJdCBjb25zaXN0cworICAvLyBv
ZiB0d28gYmxvY2sgaGFuZGxlcyBhbmQgYSBtYWdpYyBudW1iZXIuCisgIGVudW0geworICAgIGtF
bmNvZGVkTGVuZ3RoID0gMipCbG9ja0hhbmRsZTo6a01heEVuY29kZWRMZW5ndGggKyA4CisgIH07
CisKKyBwcml2YXRlOgorICBCbG9ja0hhbmRsZSBtZXRhaW5kZXhfaGFuZGxlXzsKKyAgQmxvY2tI
YW5kbGUgaW5kZXhfaGFuZGxlXzsKK307CisKKy8vIGtUYWJsZU1hZ2ljTnVtYmVyIHdhcyBwaWNr
ZWQgYnkgcnVubmluZworLy8gICAgZWNobyBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvbGV2ZWxk
Yi8gfCBzaGExc3VtCisvLyBhbmQgdGFraW5nIHRoZSBsZWFkaW5nIDY0IGJpdHMuCitzdGF0aWMg
Y29uc3QgdWludDY0X3Qga1RhYmxlTWFnaWNOdW1iZXIgPSAweGRiNDc3NTI0OGI4MGZiNTd1bGw7
CisKKy8vIDEtYnl0ZSB0eXBlICsgMzItYml0IGNyYworc3RhdGljIGNvbnN0IHNpemVfdCBrQmxv
Y2tUcmFpbGVyU2l6ZSA9IDU7CisKK3N0cnVjdCBCbG9ja0NvbnRlbnRzIHsKKyAgU2xpY2UgZGF0
YTsgICAgICAgICAgIC8vIEFjdHVhbCBjb250ZW50cyBvZiBkYXRhCisgIGJvb2wgY2FjaGFibGU7
ICAgICAgICAvLyBUcnVlIGlmZiBkYXRhIGNhbiBiZSBjYWNoZWQKKyAgYm9vbCBoZWFwX2FsbG9j
YXRlZDsgIC8vIFRydWUgaWZmIGNhbGxlciBzaG91bGQgZGVsZXRlW10gZGF0YS5kYXRhKCkKK307
CisKKy8vIFJlYWQgdGhlIGJsb2NrIGlkZW50aWZpZWQgYnkgImhhbmRsZSIgZnJvbSAiZmlsZSIu
ICBPbiBmYWlsdXJlCisvLyByZXR1cm4gbm9uLU9LLiAgT24gc3VjY2VzcyBmaWxsICpyZXN1bHQg
YW5kIHJldHVybiBPSy4KK2V4dGVybiBTdGF0dXMgUmVhZEJsb2NrKFJhbmRvbUFjY2Vzc0ZpbGUq
IGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZWFkT3B0aW9ucyYgb3B0aW9u
cywKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJsb2NrSGFuZGxlJiBoYW5kbGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICBCbG9ja0NvbnRlbnRzKiByZXN1bHQpOworCisvLyBJbXBs
ZW1lbnRhdGlvbiBkZXRhaWxzIGZvbGxvdy4gIENsaWVudHMgc2hvdWxkIGlnbm9yZSwKKworaW5s
aW5lIEJsb2NrSGFuZGxlOjpCbG9ja0hhbmRsZSgpCisgICAgOiBvZmZzZXRfKH5zdGF0aWNfY2Fz
dDx1aW50NjRfdD4oMCkpLAorICAgICAgc2l6ZV8ofnN0YXRpY19jYXN0PHVpbnQ2NF90PigwKSkg
eworfQorCit9ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgorCisjZW5kaWYgIC8vIFNUT1JBR0VfTEVW
RUxEQl9UQUJMRV9GT1JNQVRfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVs
ZGIvdGFibGUvaXRlcmF0b3IuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxlL2l0
ZXJhdG9yLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNkMWM4N2ZkZWNlNzNkNGMxZWYxNmEwYTc2MmY3MDA1OWI5
NDQzZTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxl
L2l0ZXJhdG9yLmNjCkBAIC0wLDAgKzEsNjcgQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUg
TGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5h
bWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2luY2x1ZGUgImxldmVsZGIvaXRlcmF0b3IuaCIKKwor
bmFtZXNwYWNlIGxldmVsZGIgeworCitJdGVyYXRvcjo6SXRlcmF0b3IoKSB7CisgIGNsZWFudXBf
LmZ1bmN0aW9uID0gTlVMTDsKKyAgY2xlYW51cF8ubmV4dCA9IE5VTEw7Cit9CisKK0l0ZXJhdG9y
Ojp+SXRlcmF0b3IoKSB7CisgIGlmIChjbGVhbnVwXy5mdW5jdGlvbiAhPSBOVUxMKSB7CisgICAg
KCpjbGVhbnVwXy5mdW5jdGlvbikoY2xlYW51cF8uYXJnMSwgY2xlYW51cF8uYXJnMik7CisgICAg
Zm9yIChDbGVhbnVwKiBjID0gY2xlYW51cF8ubmV4dDsgYyAhPSBOVUxMOyApIHsKKyAgICAgICgq
Yy0+ZnVuY3Rpb24pKGMtPmFyZzEsIGMtPmFyZzIpOworICAgICAgQ2xlYW51cCogbmV4dCA9IGMt
Pm5leHQ7CisgICAgICBkZWxldGUgYzsKKyAgICAgIGMgPSBuZXh0OworICAgIH0KKyAgfQorfQor
Cit2b2lkIEl0ZXJhdG9yOjpSZWdpc3RlckNsZWFudXAoQ2xlYW51cEZ1bmN0aW9uIGZ1bmMsIHZv
aWQqIGFyZzEsIHZvaWQqIGFyZzIpIHsKKyAgYXNzZXJ0KGZ1bmMgIT0gTlVMTCk7CisgIENsZWFu
dXAqIGM7CisgIGlmIChjbGVhbnVwXy5mdW5jdGlvbiA9PSBOVUxMKSB7CisgICAgYyA9ICZjbGVh
bnVwXzsKKyAgfSBlbHNlIHsKKyAgICBjID0gbmV3IENsZWFudXA7CisgICAgYy0+bmV4dCA9IGNs
ZWFudXBfLm5leHQ7CisgICAgY2xlYW51cF8ubmV4dCA9IGM7CisgIH0KKyAgYy0+ZnVuY3Rpb24g
PSBmdW5jOworICBjLT5hcmcxID0gYXJnMTsKKyAgYy0+YXJnMiA9IGFyZzI7Cit9CisKK25hbWVz
cGFjZSB7CitjbGFzcyBFbXB0eUl0ZXJhdG9yIDogcHVibGljIEl0ZXJhdG9yIHsKKyBwdWJsaWM6
CisgIEVtcHR5SXRlcmF0b3IoY29uc3QgU3RhdHVzJiBzKSA6IHN0YXR1c18ocykgeyB9CisgIHZp
cnR1YWwgYm9vbCBWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgIHZpcnR1YWwgdm9p
ZCBTZWVrKGNvbnN0IFNsaWNlJiB0YXJnZXQpIHsgfQorICB2aXJ0dWFsIHZvaWQgU2Vla1RvRmly
c3QoKSB7IH0KKyAgdmlydHVhbCB2b2lkIFNlZWtUb0xhc3QoKSB7IH0KKyAgdmlydHVhbCB2b2lk
IE5leHQoKSB7IGFzc2VydChmYWxzZSk7IH0KKyAgdmlydHVhbCB2b2lkIFByZXYoKSB7IGFzc2Vy
dChmYWxzZSk7IH0KKyAgU2xpY2Uga2V5KCkgY29uc3QgeyBhc3NlcnQoZmFsc2UpOyByZXR1cm4g
U2xpY2UoKTsgfQorICBTbGljZSB2YWx1ZSgpIGNvbnN0IHsgYXNzZXJ0KGZhbHNlKTsgcmV0dXJu
IFNsaWNlKCk7IH0KKyAgdmlydHVhbCBTdGF0dXMgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4gc3Rh
dHVzXzsgfQorIHByaXZhdGU6CisgIFN0YXR1cyBzdGF0dXNfOworfTsKK30gIC8vIG5hbWVzcGFj
ZQorCitJdGVyYXRvciogTmV3RW1wdHlJdGVyYXRvcigpIHsKKyAgcmV0dXJuIG5ldyBFbXB0eUl0
ZXJhdG9yKFN0YXR1czo6T0soKSk7Cit9CisKK0l0ZXJhdG9yKiBOZXdFcnJvckl0ZXJhdG9yKGNv
bnN0IFN0YXR1cyYgc3RhdHVzKSB7CisgIHJldHVybiBuZXcgRW1wdHlJdGVyYXRvcihzdGF0dXMp
OworfQorCit9ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGV2ZWxkYi90YWJsZS9pdGVyYXRvcl93cmFwcGVyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9sZXZlbGRiL3RhYmxlL2l0ZXJhdG9yX3dyYXBwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZTE2YjNkYmVk
ZWJlNjVmMzZmYmJmYTllMTgwZmQxZmE4MGU4NGEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvbGV2ZWxkYi90YWJsZS9pdGVyYXRvcl93cmFwcGVyLmgKQEAgLTAsMCArMSw2
MyBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgorCisj
aWZuZGVmIFNUT1JBR0VfTEVWRUxEQl9UQUJMRV9JVEVSQVRPUl9XUkFQUEVSX0hfCisjZGVmaW5l
IFNUT1JBR0VfTEVWRUxEQl9UQUJMRV9JVEVSQVRPUl9XUkFQUEVSX0hfCisKK25hbWVzcGFjZSBs
ZXZlbGRiIHsKKworLy8gQSBpbnRlcm5hbCB3cmFwcGVyIGNsYXNzIHdpdGggYW4gaW50ZXJmYWNl
IHNpbWlsYXIgdG8gSXRlcmF0b3IgdGhhdAorLy8gY2FjaGVzIHRoZSB2YWxpZCgpIGFuZCBrZXko
KSByZXN1bHRzIGZvciBhbiB1bmRlcmx5aW5nIGl0ZXJhdG9yLgorLy8gVGhpcyBjYW4gaGVscCBh
dm9pZCB2aXJ0dWFsIGZ1bmN0aW9uIGNhbGxzIGFuZCBhbHNvIGdpdmVzIGJldHRlcgorLy8gY2Fj
aGUgbG9jYWxpdHkuCitjbGFzcyBJdGVyYXRvcldyYXBwZXIgeworIHB1YmxpYzoKKyAgSXRlcmF0
b3JXcmFwcGVyKCk6IGl0ZXJfKE5VTEwpLCB2YWxpZF8oZmFsc2UpIHsgfQorICBleHBsaWNpdCBJ
dGVyYXRvcldyYXBwZXIoSXRlcmF0b3IqIGl0ZXIpOiBpdGVyXyhOVUxMKSB7CisgICAgU2V0KGl0
ZXIpOworICB9CisgIH5JdGVyYXRvcldyYXBwZXIoKSB7IGRlbGV0ZSBpdGVyXzsgfQorICBJdGVy
YXRvciogaXRlcigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJfOyB9CisKKyAgLy8gVGFrZXMgb3duZXJz
aGlwIG9mICJpdGVyIiBhbmQgd2lsbCBkZWxldGUgaXQgd2hlbiBkZXN0cm95ZWQsIG9yCisgIC8v
IHdoZW4gU2V0KCkgaXMgaW52b2tlZCBhZ2Fpbi4KKyAgdm9pZCBTZXQoSXRlcmF0b3IqIGl0ZXIp
IHsKKyAgICBkZWxldGUgaXRlcl87CisgICAgaXRlcl8gPSBpdGVyOworICAgIGlmIChpdGVyXyA9
PSBOVUxMKSB7CisgICAgICB2YWxpZF8gPSBmYWxzZTsKKyAgICB9IGVsc2UgeworICAgICAgVXBk
YXRlKCk7CisgICAgfQorICB9CisKKworICAvLyBJdGVyYXRvciBpbnRlcmZhY2UgbWV0aG9kcwor
ICBib29sIFZhbGlkKCkgY29uc3QgICAgICAgIHsgcmV0dXJuIHZhbGlkXzsgfQorICBTbGljZSBr
ZXkoKSBjb25zdCAgICAgICAgIHsgYXNzZXJ0KFZhbGlkKCkpOyByZXR1cm4ga2V5XzsgfQorICBT
bGljZSB2YWx1ZSgpIGNvbnN0ICAgICAgIHsgYXNzZXJ0KFZhbGlkKCkpOyByZXR1cm4gaXRlcl8t
PnZhbHVlKCk7IH0KKyAgLy8gTWV0aG9kcyBiZWxvdyByZXF1aXJlIGl0ZXIoKSAhPSBOVUxMCisg
IFN0YXR1cyBzdGF0dXMoKSBjb25zdCAgICAgeyBhc3NlcnQoaXRlcl8pOyByZXR1cm4gaXRlcl8t
PnN0YXR1cygpOyB9CisgIHZvaWQgTmV4dCgpICAgICAgICAgICAgICAgeyBhc3NlcnQoaXRlcl8p
OyBpdGVyXy0+TmV4dCgpOyAgICAgICAgVXBkYXRlKCk7IH0KKyAgdm9pZCBQcmV2KCkgICAgICAg
ICAgICAgICB7IGFzc2VydChpdGVyXyk7IGl0ZXJfLT5QcmV2KCk7ICAgICAgICBVcGRhdGUoKTsg
fQorICB2b2lkIFNlZWsoY29uc3QgU2xpY2UmIGspIHsgYXNzZXJ0KGl0ZXJfKTsgaXRlcl8tPlNl
ZWsoayk7ICAgICAgIFVwZGF0ZSgpOyB9CisgIHZvaWQgU2Vla1RvRmlyc3QoKSAgICAgICAgeyBh
c3NlcnQoaXRlcl8pOyBpdGVyXy0+U2Vla1RvRmlyc3QoKTsgVXBkYXRlKCk7IH0KKyAgdm9pZCBT
ZWVrVG9MYXN0KCkgICAgICAgICB7IGFzc2VydChpdGVyXyk7IGl0ZXJfLT5TZWVrVG9MYXN0KCk7
ICBVcGRhdGUoKTsgfQorCisgcHJpdmF0ZToKKyAgdm9pZCBVcGRhdGUoKSB7CisgICAgdmFsaWRf
ID0gaXRlcl8tPlZhbGlkKCk7CisgICAgaWYgKHZhbGlkXykgeworICAgICAga2V5XyA9IGl0ZXJf
LT5rZXkoKTsKKyAgICB9CisgIH0KKworICBJdGVyYXRvciogaXRlcl87CisgIGJvb2wgdmFsaWRf
OworICBTbGljZSBrZXlfOworfTsKKworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKKworI2VuZGlm
ICAvLyBTVE9SQUdFX0xFVkVMREJfVEFCTEVfSVRFUkFUT1JfV1JBUFBFUl9IXwpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi90YWJsZS9tZXJnZXIuY2MgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9sZXZlbGRiL3RhYmxlL21lcmdlci5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZGRlNGRjMjFmZGU5
ZDg2ZTk4ZjVhM2YzYjQ5Mzc0NWQwN2EyMmY3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvbGV2ZWxkYi90YWJsZS9tZXJnZXIuY2MKQEAgLTAsMCArMSwxOTcgQEAKKy8vIENv
cHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRo
ZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2luY2x1ZGUgInRh
YmxlL21lcmdlci5oIgorCisjaW5jbHVkZSAibGV2ZWxkYi9jb21wYXJhdG9yLmgiCisjaW5jbHVk
ZSAibGV2ZWxkYi9pdGVyYXRvci5oIgorI2luY2x1ZGUgInRhYmxlL2l0ZXJhdG9yX3dyYXBwZXIu
aCIKKworbmFtZXNwYWNlIGxldmVsZGIgeworCituYW1lc3BhY2UgeworY2xhc3MgTWVyZ2luZ0l0
ZXJhdG9yIDogcHVibGljIEl0ZXJhdG9yIHsKKyBwdWJsaWM6CisgIE1lcmdpbmdJdGVyYXRvcihj
b25zdCBDb21wYXJhdG9yKiBjb21wYXJhdG9yLCBJdGVyYXRvcioqIGNoaWxkcmVuLCBpbnQgbikK
KyAgICAgIDogY29tcGFyYXRvcl8oY29tcGFyYXRvciksCisgICAgICAgIGNoaWxkcmVuXyhuZXcg
SXRlcmF0b3JXcmFwcGVyW25dKSwKKyAgICAgICAgbl8obiksCisgICAgICAgIGN1cnJlbnRfKE5V
TEwpLAorICAgICAgICBkaXJlY3Rpb25fKGtGb3J3YXJkKSB7CisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBuOyBpKyspIHsKKyAgICAgIGNoaWxkcmVuX1tpXS5TZXQoY2hpbGRyZW5baV0pOworICAg
IH0KKyAgfQorCisgIHZpcnR1YWwgfk1lcmdpbmdJdGVyYXRvcigpIHsKKyAgICBkZWxldGVbXSBj
aGlsZHJlbl87CisgIH0KKworICB2aXJ0dWFsIGJvb2wgVmFsaWQoKSBjb25zdCB7CisgICAgcmV0
dXJuIChjdXJyZW50XyAhPSBOVUxMKTsKKyAgfQorCisgIHZpcnR1YWwgdm9pZCBTZWVrVG9GaXJz
dCgpIHsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG5fOyBpKyspIHsKKyAgICAgIGNoaWxkcmVu
X1tpXS5TZWVrVG9GaXJzdCgpOworICAgIH0KKyAgICBGaW5kU21hbGxlc3QoKTsKKyAgICBkaXJl
Y3Rpb25fID0ga0ZvcndhcmQ7CisgIH0KKworICB2aXJ0dWFsIHZvaWQgU2Vla1RvTGFzdCgpIHsK
KyAgICBmb3IgKGludCBpID0gMDsgaSA8IG5fOyBpKyspIHsKKyAgICAgIGNoaWxkcmVuX1tpXS5T
ZWVrVG9MYXN0KCk7CisgICAgfQorICAgIEZpbmRMYXJnZXN0KCk7CisgICAgZGlyZWN0aW9uXyA9
IGtSZXZlcnNlOworICB9CisKKyAgdmlydHVhbCB2b2lkIFNlZWsoY29uc3QgU2xpY2UmIHRhcmdl
dCkgeworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbl87IGkrKykgeworICAgICAgY2hpbGRyZW5f
W2ldLlNlZWsodGFyZ2V0KTsKKyAgICB9CisgICAgRmluZFNtYWxsZXN0KCk7CisgICAgZGlyZWN0
aW9uXyA9IGtGb3J3YXJkOworICB9CisKKyAgdmlydHVhbCB2b2lkIE5leHQoKSB7CisgICAgYXNz
ZXJ0KFZhbGlkKCkpOworCisgICAgLy8gRW5zdXJlIHRoYXQgYWxsIGNoaWxkcmVuIGFyZSBwb3Np
dGlvbmVkIGFmdGVyIGtleSgpLgorICAgIC8vIElmIHdlIGFyZSBtb3ZpbmcgaW4gdGhlIGZvcndh
cmQgZGlyZWN0aW9uLCBpdCBpcyBhbHJlYWR5CisgICAgLy8gdHJ1ZSBmb3IgYWxsIG9mIHRoZSBu
b24tY3VycmVudF8gY2hpbGRyZW4gc2luY2UgY3VycmVudF8gaXMKKyAgICAvLyB0aGUgc21hbGxl
c3QgY2hpbGQgYW5kIGtleSgpID09IGN1cnJlbnRfLT5rZXkoKS4gIE90aGVyd2lzZSwKKyAgICAv
LyB3ZSBleHBsaWNpdGx5IHBvc2l0aW9uIHRoZSBub24tY3VycmVudF8gY2hpbGRyZW4uCisgICAg
aWYgKGRpcmVjdGlvbl8gIT0ga0ZvcndhcmQpIHsKKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bl87IGkrKykgeworICAgICAgICBJdGVyYXRvcldyYXBwZXIqIGNoaWxkID0gJmNoaWxkcmVuX1tp
XTsKKyAgICAgICAgaWYgKGNoaWxkICE9IGN1cnJlbnRfKSB7CisgICAgICAgICAgY2hpbGQtPlNl
ZWsoa2V5KCkpOworICAgICAgICAgIGlmIChjaGlsZC0+VmFsaWQoKSAmJgorICAgICAgICAgICAg
ICBjb21wYXJhdG9yXy0+Q29tcGFyZShrZXkoKSwgY2hpbGQtPmtleSgpKSA9PSAwKSB7CisgICAg
ICAgICAgICBjaGlsZC0+TmV4dCgpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQor
ICAgICAgZGlyZWN0aW9uXyA9IGtGb3J3YXJkOworICAgIH0KKworICAgIGN1cnJlbnRfLT5OZXh0
KCk7CisgICAgRmluZFNtYWxsZXN0KCk7CisgIH0KKworICB2aXJ0dWFsIHZvaWQgUHJldigpIHsK
KyAgICBhc3NlcnQoVmFsaWQoKSk7CisKKyAgICAvLyBFbnN1cmUgdGhhdCBhbGwgY2hpbGRyZW4g
YXJlIHBvc2l0aW9uZWQgYmVmb3JlIGtleSgpLgorICAgIC8vIElmIHdlIGFyZSBtb3ZpbmcgaW4g
dGhlIHJldmVyc2UgZGlyZWN0aW9uLCBpdCBpcyBhbHJlYWR5CisgICAgLy8gdHJ1ZSBmb3IgYWxs
IG9mIHRoZSBub24tY3VycmVudF8gY2hpbGRyZW4gc2luY2UgY3VycmVudF8gaXMKKyAgICAvLyB0
aGUgbGFyZ2VzdCBjaGlsZCBhbmQga2V5KCkgPT0gY3VycmVudF8tPmtleSgpLiAgT3RoZXJ3aXNl
LAorICAgIC8vIHdlIGV4cGxpY2l0bHkgcG9zaXRpb24gdGhlIG5vbi1jdXJyZW50XyBjaGlsZHJl
bi4KKyAgICBpZiAoZGlyZWN0aW9uXyAhPSBrUmV2ZXJzZSkgeworICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBuXzsgaSsrKSB7CisgICAgICAgIEl0ZXJhdG9yV3JhcHBlciogY2hpbGQgPSAmY2hp
bGRyZW5fW2ldOworICAgICAgICBpZiAoY2hpbGQgIT0gY3VycmVudF8pIHsKKyAgICAgICAgICBj
aGlsZC0+U2VlayhrZXkoKSk7CisgICAgICAgICAgaWYgKGNoaWxkLT5WYWxpZCgpKSB7CisgICAg
ICAgICAgICAvLyBDaGlsZCBpcyBhdCBmaXJzdCBlbnRyeSA+PSBrZXkoKS4gIFN0ZXAgYmFjayBv
bmUgdG8gYmUgPCBrZXkoKQorICAgICAgICAgICAgY2hpbGQtPlByZXYoKTsKKyAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgLy8gQ2hpbGQgaGFzIG5vIGVudHJpZXMgPj0ga2V5KCkuICBQ
b3NpdGlvbiBhdCBsYXN0IGVudHJ5LgorICAgICAgICAgICAgY2hpbGQtPlNlZWtUb0xhc3QoKTsK
KyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGRpcmVjdGlvbl8gPSBrUmV2
ZXJzZTsKKyAgICB9CisKKyAgICBjdXJyZW50Xy0+UHJldigpOworICAgIEZpbmRMYXJnZXN0KCk7
CisgIH0KKworICB2aXJ0dWFsIFNsaWNlIGtleSgpIGNvbnN0IHsKKyAgICBhc3NlcnQoVmFsaWQo
KSk7CisgICAgcmV0dXJuIGN1cnJlbnRfLT5rZXkoKTsKKyAgfQorCisgIHZpcnR1YWwgU2xpY2Ug
dmFsdWUoKSBjb25zdCB7CisgICAgYXNzZXJ0KFZhbGlkKCkpOworICAgIHJldHVybiBjdXJyZW50
Xy0+dmFsdWUoKTsKKyAgfQorCisgIHZpcnR1YWwgU3RhdHVzIHN0YXR1cygpIGNvbnN0IHsKKyAg
ICBTdGF0dXMgc3RhdHVzOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbl87IGkrKykgeworICAg
ICAgc3RhdHVzID0gY2hpbGRyZW5fW2ldLnN0YXR1cygpOworICAgICAgaWYgKCFzdGF0dXMub2so
KSkgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHN0YXR1czsK
KyAgfQorCisgcHJpdmF0ZToKKyAgdm9pZCBGaW5kU21hbGxlc3QoKTsKKyAgdm9pZCBGaW5kTGFy
Z2VzdCgpOworCisgIC8vIFdlIG1pZ2h0IHdhbnQgdG8gdXNlIGEgaGVhcCBpbiBjYXNlIHRoZXJl
IGFyZSBsb3RzIG9mIGNoaWxkcmVuLgorICAvLyBGb3Igbm93IHdlIHVzZSBhIHNpbXBsZSBhcnJh
eSBzaW5jZSB3ZSBleHBlY3QgYSB2ZXJ5IHNtYWxsIG51bWJlcgorICAvLyBvZiBjaGlsZHJlbiBp
biBsZXZlbGRiLgorICBjb25zdCBDb21wYXJhdG9yKiBjb21wYXJhdG9yXzsKKyAgSXRlcmF0b3JX
cmFwcGVyKiBjaGlsZHJlbl87CisgIGludCBuXzsKKyAgSXRlcmF0b3JXcmFwcGVyKiBjdXJyZW50
XzsKKworICAvLyBXaGljaCBkaXJlY3Rpb24gaXMgdGhlIGl0ZXJhdG9yIG1vdmluZz8KKyAgZW51
bSBEaXJlY3Rpb24geworICAgIGtGb3J3YXJkLAorICAgIGtSZXZlcnNlCisgIH07CisgIERpcmVj
dGlvbiBkaXJlY3Rpb25fOworfTsKKwordm9pZCBNZXJnaW5nSXRlcmF0b3I6OkZpbmRTbWFsbGVz
dCgpIHsKKyAgSXRlcmF0b3JXcmFwcGVyKiBzbWFsbGVzdCA9IE5VTEw7CisgIGZvciAoaW50IGkg
PSAwOyBpIDwgbl87IGkrKykgeworICAgIEl0ZXJhdG9yV3JhcHBlciogY2hpbGQgPSAmY2hpbGRy
ZW5fW2ldOworICAgIGlmIChjaGlsZC0+VmFsaWQoKSkgeworICAgICAgaWYgKHNtYWxsZXN0ID09
IE5VTEwpIHsKKyAgICAgICAgc21hbGxlc3QgPSBjaGlsZDsKKyAgICAgIH0gZWxzZSBpZiAoY29t
cGFyYXRvcl8tPkNvbXBhcmUoY2hpbGQtPmtleSgpLCBzbWFsbGVzdC0+a2V5KCkpIDwgMCkgewor
ICAgICAgICBzbWFsbGVzdCA9IGNoaWxkOworICAgICAgfQorICAgIH0KKyAgfQorICBjdXJyZW50
XyA9IHNtYWxsZXN0OworfQorCit2b2lkIE1lcmdpbmdJdGVyYXRvcjo6RmluZExhcmdlc3QoKSB7
CisgIEl0ZXJhdG9yV3JhcHBlciogbGFyZ2VzdCA9IE5VTEw7CisgIGZvciAoaW50IGkgPSBuXy0x
OyBpID49IDA7IGktLSkgeworICAgIEl0ZXJhdG9yV3JhcHBlciogY2hpbGQgPSAmY2hpbGRyZW5f
W2ldOworICAgIGlmIChjaGlsZC0+VmFsaWQoKSkgeworICAgICAgaWYgKGxhcmdlc3QgPT0gTlVM
TCkgeworICAgICAgICBsYXJnZXN0ID0gY2hpbGQ7CisgICAgICB9IGVsc2UgaWYgKGNvbXBhcmF0
b3JfLT5Db21wYXJlKGNoaWxkLT5rZXkoKSwgbGFyZ2VzdC0+a2V5KCkpID4gMCkgeworICAgICAg
ICBsYXJnZXN0ID0gY2hpbGQ7CisgICAgICB9CisgICAgfQorICB9CisgIGN1cnJlbnRfID0gbGFy
Z2VzdDsKK30KK30gIC8vIG5hbWVzcGFjZQorCitJdGVyYXRvciogTmV3TWVyZ2luZ0l0ZXJhdG9y
KGNvbnN0IENvbXBhcmF0b3IqIGNtcCwgSXRlcmF0b3IqKiBsaXN0LCBpbnQgbikgeworICBhc3Nl
cnQobiA+PSAwKTsKKyAgaWYgKG4gPT0gMCkgeworICAgIHJldHVybiBOZXdFbXB0eUl0ZXJhdG9y
KCk7CisgIH0gZWxzZSBpZiAobiA9PSAxKSB7CisgICAgcmV0dXJuIGxpc3RbMF07CisgIH0gZWxz
ZSB7CisgICAgcmV0dXJuIG5ldyBNZXJnaW5nSXRlcmF0b3IoY21wLCBsaXN0LCBuKTsKKyAgfQor
fQorCit9ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGV2ZWxkYi90YWJsZS9tZXJnZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdGFi
bGUvbWVyZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTFkZGQ4MGZhYTM1YmZjZjdlZGI4MWVlMmYyMmVkM2Yy
OWI1OGY5OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdGFi
bGUvbWVyZ2VyLmgKQEAgLTAsMCArMSwyNiBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBM
ZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFt
ZXMgb2YgY29udHJpYnV0b3JzLgorCisjaWZuZGVmIFNUT1JBR0VfTEVWRUxEQl9UQUJMRV9NRVJH
RVJfSF8KKyNkZWZpbmUgU1RPUkFHRV9MRVZFTERCX1RBQkxFX01FUkdFUl9IXworCituYW1lc3Bh
Y2UgbGV2ZWxkYiB7CisKK2NsYXNzIENvbXBhcmF0b3I7CitjbGFzcyBJdGVyYXRvcjsKKworLy8g
UmV0dXJuIGFuIGl0ZXJhdG9yIHRoYXQgcHJvdmlkZWQgdGhlIHVuaW9uIG9mIHRoZSBkYXRhIGlu
CisvLyBjaGlsZHJlblswLG4tMV0uICBUYWtlcyBvd25lcnNoaXAgb2YgdGhlIGNoaWxkIGl0ZXJh
dG9ycyBhbmQKKy8vIHdpbGwgZGVsZXRlIHRoZW0gd2hlbiB0aGUgcmVzdWx0IGl0ZXJhdG9yIGlz
IGRlbGV0ZWQuCisvLworLy8gVGhlIHJlc3VsdCBkb2VzIG5vIGR1cGxpY2F0ZSBzdXBwcmVzc2lv
bi4gIEkuZS4sIGlmIGEgcGFydGljdWxhcgorLy8ga2V5IGlzIHByZXNlbnQgaW4gSyBjaGlsZCBp
dGVyYXRvcnMsIGl0IHdpbGwgYmUgeWllbGRlZCBLIHRpbWVzLgorLy8KKy8vIFJFUVVJUkVTOiBu
ID49IDAKK2V4dGVybiBJdGVyYXRvciogTmV3TWVyZ2luZ0l0ZXJhdG9yKAorICAgIGNvbnN0IENv
bXBhcmF0b3IqIGNvbXBhcmF0b3IsIEl0ZXJhdG9yKiogY2hpbGRyZW4sIGludCBuKTsKKworfSAg
Ly8gbmFtZXNwYWNlIGxldmVsZGIKKworI2VuZGlmICAvLyBTVE9SQUdFX0xFVkVMREJfVEFCTEVf
TUVSR0VSX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxlL3Rh
YmxlLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi90YWJsZS90YWJsZS5jYwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5kYmQ2ZDNhMWJmMDg2N2UyODVkZDUzMjA3ODc2NjA1Y2NhM2JjZjA3Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi90YWJsZS90YWJsZS5jYwpAQCAtMCww
ICsxLDI3NiBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3Jz
LgorCisjaW5jbHVkZSAibGV2ZWxkYi90YWJsZS5oIgorCisjaW5jbHVkZSAibGV2ZWxkYi9jYWNo
ZS5oIgorI2luY2x1ZGUgImxldmVsZGIvY29tcGFyYXRvci5oIgorI2luY2x1ZGUgImxldmVsZGIv
ZW52LmgiCisjaW5jbHVkZSAibGV2ZWxkYi9maWx0ZXJfcG9saWN5LmgiCisjaW5jbHVkZSAibGV2
ZWxkYi9vcHRpb25zLmgiCisjaW5jbHVkZSAidGFibGUvYmxvY2suaCIKKyNpbmNsdWRlICJ0YWJs
ZS9maWx0ZXJfYmxvY2suaCIKKyNpbmNsdWRlICJ0YWJsZS9mb3JtYXQuaCIKKyNpbmNsdWRlICJ0
YWJsZS90d29fbGV2ZWxfaXRlcmF0b3IuaCIKKyNpbmNsdWRlICJ1dGlsL2NvZGluZy5oIgorCitu
YW1lc3BhY2UgbGV2ZWxkYiB7CisKK3N0cnVjdCBUYWJsZTo6UmVwIHsKKyAgflJlcCgpIHsKKyAg
ICBkZWxldGUgZmlsdGVyOworICAgIGRlbGV0ZSBbXSBmaWx0ZXJfZGF0YTsKKyAgICBkZWxldGUg
aW5kZXhfYmxvY2s7CisgIH0KKworICBPcHRpb25zIG9wdGlvbnM7CisgIFN0YXR1cyBzdGF0dXM7
CisgIFJhbmRvbUFjY2Vzc0ZpbGUqIGZpbGU7CisgIHVpbnQ2NF90IGNhY2hlX2lkOworICBGaWx0
ZXJCbG9ja1JlYWRlciogZmlsdGVyOworICBjb25zdCBjaGFyKiBmaWx0ZXJfZGF0YTsKKworICBC
bG9ja0hhbmRsZSBtZXRhaW5kZXhfaGFuZGxlOyAgLy8gSGFuZGxlIHRvIG1ldGFpbmRleF9ibG9j
azogc2F2ZWQgZnJvbSBmb290ZXIKKyAgQmxvY2sqIGluZGV4X2Jsb2NrOworfTsKKworU3RhdHVz
IFRhYmxlOjpPcGVuKGNvbnN0IE9wdGlvbnMmIG9wdGlvbnMsCisgICAgICAgICAgICAgICAgICAg
UmFuZG9tQWNjZXNzRmlsZSogZmlsZSwKKyAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBzaXpl
LAorICAgICAgICAgICAgICAgICAgIFRhYmxlKiogdGFibGUpIHsKKyAgKnRhYmxlID0gTlVMTDsK
KyAgaWYgKHNpemUgPCBGb290ZXI6OmtFbmNvZGVkTGVuZ3RoKSB7CisgICAgcmV0dXJuIFN0YXR1
czo6SW52YWxpZEFyZ3VtZW50KCJmaWxlIGlzIHRvbyBzaG9ydCB0byBiZSBhbiBzc3RhYmxlIik7
CisgIH0KKworICBjaGFyIGZvb3Rlcl9zcGFjZVtGb290ZXI6OmtFbmNvZGVkTGVuZ3RoXTsKKyAg
U2xpY2UgZm9vdGVyX2lucHV0OworICBTdGF0dXMgcyA9IGZpbGUtPlJlYWQoc2l6ZSAtIEZvb3Rl
cjo6a0VuY29kZWRMZW5ndGgsIEZvb3Rlcjo6a0VuY29kZWRMZW5ndGgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAmZm9vdGVyX2lucHV0LCBmb290ZXJfc3BhY2UpOworICBpZiAoIXMub2soKSkg
cmV0dXJuIHM7CisKKyAgRm9vdGVyIGZvb3RlcjsKKyAgcyA9IGZvb3Rlci5EZWNvZGVGcm9tKCZm
b290ZXJfaW5wdXQpOworICBpZiAoIXMub2soKSkgcmV0dXJuIHM7CisKKyAgLy8gUmVhZCB0aGUg
aW5kZXggYmxvY2sKKyAgQmxvY2tDb250ZW50cyBjb250ZW50czsKKyAgQmxvY2sqIGluZGV4X2Js
b2NrID0gTlVMTDsKKyAgaWYgKHMub2soKSkgeworICAgIHMgPSBSZWFkQmxvY2soZmlsZSwgUmVh
ZE9wdGlvbnMoKSwgZm9vdGVyLmluZGV4X2hhbmRsZSgpLCAmY29udGVudHMpOworICAgIGlmIChz
Lm9rKCkpIHsKKyAgICAgIGluZGV4X2Jsb2NrID0gbmV3IEJsb2NrKGNvbnRlbnRzKTsKKyAgICB9
CisgIH0KKworICBpZiAocy5vaygpKSB7CisgICAgLy8gV2UndmUgc3VjY2Vzc2Z1bGx5IHJlYWQg
dGhlIGZvb3RlciBhbmQgdGhlIGluZGV4IGJsb2NrOiB3ZSdyZQorICAgIC8vIHJlYWR5IHRvIHNl
cnZlIHJlcXVlc3RzLgorICAgIFJlcCogcmVwID0gbmV3IFRhYmxlOjpSZXA7CisgICAgcmVwLT5v
cHRpb25zID0gb3B0aW9uczsKKyAgICByZXAtPmZpbGUgPSBmaWxlOworICAgIHJlcC0+bWV0YWlu
ZGV4X2hhbmRsZSA9IGZvb3Rlci5tZXRhaW5kZXhfaGFuZGxlKCk7CisgICAgcmVwLT5pbmRleF9i
bG9jayA9IGluZGV4X2Jsb2NrOworICAgIHJlcC0+Y2FjaGVfaWQgPSAob3B0aW9ucy5ibG9ja19j
YWNoZSA/IG9wdGlvbnMuYmxvY2tfY2FjaGUtPk5ld0lkKCkgOiAwKTsKKyAgICByZXAtPmZpbHRl
cl9kYXRhID0gTlVMTDsKKyAgICByZXAtPmZpbHRlciA9IE5VTEw7CisgICAgKnRhYmxlID0gbmV3
IFRhYmxlKHJlcCk7CisgICAgKCp0YWJsZSktPlJlYWRNZXRhKGZvb3Rlcik7CisgIH0gZWxzZSB7
CisgICAgaWYgKGluZGV4X2Jsb2NrKSBkZWxldGUgaW5kZXhfYmxvY2s7CisgIH0KKworICByZXR1
cm4gczsKK30KKwordm9pZCBUYWJsZTo6UmVhZE1ldGEoY29uc3QgRm9vdGVyJiBmb290ZXIpIHsK
KyAgaWYgKHJlcF8tPm9wdGlvbnMuZmlsdGVyX3BvbGljeSA9PSBOVUxMKSB7CisgICAgcmV0dXJu
OyAgLy8gRG8gbm90IG5lZWQgYW55IG1ldGFkYXRhCisgIH0KKworICAvLyBUT0RPKHNhbmpheSk6
IFNraXAgdGhpcyBpZiBmb290ZXIubWV0YWluZGV4X2hhbmRsZSgpIHNpemUgaW5kaWNhdGVzCisg
IC8vIGl0IGlzIGFuIGVtcHR5IGJsb2NrLgorICBSZWFkT3B0aW9ucyBvcHQ7CisgIEJsb2NrQ29u
dGVudHMgY29udGVudHM7CisgIGlmICghUmVhZEJsb2NrKHJlcF8tPmZpbGUsIG9wdCwgZm9vdGVy
Lm1ldGFpbmRleF9oYW5kbGUoKSwgJmNvbnRlbnRzKS5vaygpKSB7CisgICAgLy8gRG8gbm90IHBy
b3BhZ2F0ZSBlcnJvcnMgc2luY2UgbWV0YSBpbmZvIGlzIG5vdCBuZWVkZWQgZm9yIG9wZXJhdGlv
bgorICAgIHJldHVybjsKKyAgfQorICBCbG9jayogbWV0YSA9IG5ldyBCbG9jayhjb250ZW50cyk7
CisKKyAgSXRlcmF0b3IqIGl0ZXIgPSBtZXRhLT5OZXdJdGVyYXRvcihCeXRld2lzZUNvbXBhcmF0
b3IoKSk7CisgIHN0ZDo6c3RyaW5nIGtleSA9ICJmaWx0ZXIuIjsKKyAga2V5LmFwcGVuZChyZXBf
LT5vcHRpb25zLmZpbHRlcl9wb2xpY3ktPk5hbWUoKSk7CisgIGl0ZXItPlNlZWsoa2V5KTsKKyAg
aWYgKGl0ZXItPlZhbGlkKCkgJiYgaXRlci0+a2V5KCkgPT0gU2xpY2Uoa2V5KSkgeworICAgIFJl
YWRGaWx0ZXIoaXRlci0+dmFsdWUoKSk7CisgIH0KKyAgZGVsZXRlIGl0ZXI7CisgIGRlbGV0ZSBt
ZXRhOworfQorCit2b2lkIFRhYmxlOjpSZWFkRmlsdGVyKGNvbnN0IFNsaWNlJiBmaWx0ZXJfaGFu
ZGxlX3ZhbHVlKSB7CisgIFNsaWNlIHYgPSBmaWx0ZXJfaGFuZGxlX3ZhbHVlOworICBCbG9ja0hh
bmRsZSBmaWx0ZXJfaGFuZGxlOworICBpZiAoIWZpbHRlcl9oYW5kbGUuRGVjb2RlRnJvbSgmdiku
b2soKSkgeworICAgIHJldHVybjsKKyAgfQorCisgIC8vIFdlIG1pZ2h0IHdhbnQgdG8gdW5pZnkg
d2l0aCBSZWFkQmxvY2soKSBpZiB3ZSBzdGFydAorICAvLyByZXF1aXJpbmcgY2hlY2tzdW0gdmVy
aWZpY2F0aW9uIGluIFRhYmxlOjpPcGVuLgorICBSZWFkT3B0aW9ucyBvcHQ7CisgIEJsb2NrQ29u
dGVudHMgYmxvY2s7CisgIGlmICghUmVhZEJsb2NrKHJlcF8tPmZpbGUsIG9wdCwgZmlsdGVyX2hh
bmRsZSwgJmJsb2NrKS5vaygpKSB7CisgICAgcmV0dXJuOworICB9CisgIGlmIChibG9jay5oZWFw
X2FsbG9jYXRlZCkgeworICAgIHJlcF8tPmZpbHRlcl9kYXRhID0gYmxvY2suZGF0YS5kYXRhKCk7
ICAgICAvLyBXaWxsIG5lZWQgdG8gZGVsZXRlIGxhdGVyCisgIH0KKyAgcmVwXy0+ZmlsdGVyID0g
bmV3IEZpbHRlckJsb2NrUmVhZGVyKHJlcF8tPm9wdGlvbnMuZmlsdGVyX3BvbGljeSwgYmxvY2su
ZGF0YSk7Cit9CisKK1RhYmxlOjp+VGFibGUoKSB7CisgIGRlbGV0ZSByZXBfOworfQorCitzdGF0
aWMgdm9pZCBEZWxldGVCbG9jayh2b2lkKiBhcmcsIHZvaWQqIGlnbm9yZWQpIHsKKyAgZGVsZXRl
IHJlaW50ZXJwcmV0X2Nhc3Q8QmxvY2sqPihhcmcpOworfQorCitzdGF0aWMgdm9pZCBEZWxldGVD
YWNoZWRCbG9jayhjb25zdCBTbGljZSYga2V5LCB2b2lkKiB2YWx1ZSkgeworICBCbG9jayogYmxv
Y2sgPSByZWludGVycHJldF9jYXN0PEJsb2NrKj4odmFsdWUpOworICBkZWxldGUgYmxvY2s7Cit9
CisKK3N0YXRpYyB2b2lkIFJlbGVhc2VCbG9jayh2b2lkKiBhcmcsIHZvaWQqIGgpIHsKKyAgQ2Fj
aGUqIGNhY2hlID0gcmVpbnRlcnByZXRfY2FzdDxDYWNoZSo+KGFyZyk7CisgIENhY2hlOjpIYW5k
bGUqIGhhbmRsZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q2FjaGU6OkhhbmRsZSo+KGgpOworICBjYWNo
ZS0+UmVsZWFzZShoYW5kbGUpOworfQorCisvLyBDb252ZXJ0IGFuIGluZGV4IGl0ZXJhdG9yIHZh
bHVlIChpLmUuLCBhbiBlbmNvZGVkIEJsb2NrSGFuZGxlKQorLy8gaW50byBhbiBpdGVyYXRvciBv
dmVyIHRoZSBjb250ZW50cyBvZiB0aGUgY29ycmVzcG9uZGluZyBibG9jay4KK0l0ZXJhdG9yKiBU
YWJsZTo6QmxvY2tSZWFkZXIodm9pZCogYXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBSZWFkT3B0aW9ucyYgb3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgU2xpY2UmIGluZGV4X3ZhbHVlKSB7CisgIFRhYmxlKiB0YWJsZSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8VGFibGUqPihhcmcpOworICBDYWNoZSogYmxvY2tfY2FjaGUgPSB0YWJsZS0+cmVw
Xy0+b3B0aW9ucy5ibG9ja19jYWNoZTsKKyAgQmxvY2sqIGJsb2NrID0gTlVMTDsKKyAgQ2FjaGU6
OkhhbmRsZSogY2FjaGVfaGFuZGxlID0gTlVMTDsKKworICBCbG9ja0hhbmRsZSBoYW5kbGU7Cisg
IFNsaWNlIGlucHV0ID0gaW5kZXhfdmFsdWU7CisgIFN0YXR1cyBzID0gaGFuZGxlLkRlY29kZUZy
b20oJmlucHV0KTsKKyAgLy8gV2UgaW50ZW50aW9uYWxseSBhbGxvdyBleHRyYSBzdHVmZiBpbiBp
bmRleF92YWx1ZSBzbyB0aGF0IHdlCisgIC8vIGNhbiBhZGQgbW9yZSBmZWF0dXJlcyBpbiB0aGUg
ZnV0dXJlLgorCisgIGlmIChzLm9rKCkpIHsKKyAgICBCbG9ja0NvbnRlbnRzIGNvbnRlbnRzOwor
ICAgIGlmIChibG9ja19jYWNoZSAhPSBOVUxMKSB7CisgICAgICBjaGFyIGNhY2hlX2tleV9idWZm
ZXJbMTZdOworICAgICAgRW5jb2RlRml4ZWQ2NChjYWNoZV9rZXlfYnVmZmVyLCB0YWJsZS0+cmVw
Xy0+Y2FjaGVfaWQpOworICAgICAgRW5jb2RlRml4ZWQ2NChjYWNoZV9rZXlfYnVmZmVyKzgsIGhh
bmRsZS5vZmZzZXQoKSk7CisgICAgICBTbGljZSBrZXkoY2FjaGVfa2V5X2J1ZmZlciwgc2l6ZW9m
KGNhY2hlX2tleV9idWZmZXIpKTsKKyAgICAgIGNhY2hlX2hhbmRsZSA9IGJsb2NrX2NhY2hlLT5M
b29rdXAoa2V5KTsKKyAgICAgIGlmIChjYWNoZV9oYW5kbGUgIT0gTlVMTCkgeworICAgICAgICBi
bG9jayA9IHJlaW50ZXJwcmV0X2Nhc3Q8QmxvY2sqPihibG9ja19jYWNoZS0+VmFsdWUoY2FjaGVf
aGFuZGxlKSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBzID0gUmVhZEJsb2NrKHRhYmxlLT5y
ZXBfLT5maWxlLCBvcHRpb25zLCBoYW5kbGUsICZjb250ZW50cyk7CisgICAgICAgIGlmIChzLm9r
KCkpIHsKKyAgICAgICAgICBibG9jayA9IG5ldyBCbG9jayhjb250ZW50cyk7CisgICAgICAgICAg
aWYgKGNvbnRlbnRzLmNhY2hhYmxlICYmIG9wdGlvbnMuZmlsbF9jYWNoZSkgeworICAgICAgICAg
ICAgY2FjaGVfaGFuZGxlID0gYmxvY2tfY2FjaGUtPkluc2VydCgKKyAgICAgICAgICAgICAgICBr
ZXksIGJsb2NrLCBibG9jay0+c2l6ZSgpLCAmRGVsZXRlQ2FjaGVkQmxvY2spOworICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBzID0gUmVhZEJsb2Nr
KHRhYmxlLT5yZXBfLT5maWxlLCBvcHRpb25zLCBoYW5kbGUsICZjb250ZW50cyk7CisgICAgICBp
ZiAocy5vaygpKSB7CisgICAgICAgIGJsb2NrID0gbmV3IEJsb2NrKGNvbnRlbnRzKTsKKyAgICAg
IH0KKyAgICB9CisgIH0KKworICBJdGVyYXRvciogaXRlcjsKKyAgaWYgKGJsb2NrICE9IE5VTEwp
IHsKKyAgICBpdGVyID0gYmxvY2stPk5ld0l0ZXJhdG9yKHRhYmxlLT5yZXBfLT5vcHRpb25zLmNv
bXBhcmF0b3IpOworICAgIGlmIChjYWNoZV9oYW5kbGUgPT0gTlVMTCkgeworICAgICAgaXRlci0+
UmVnaXN0ZXJDbGVhbnVwKCZEZWxldGVCbG9jaywgYmxvY2ssIE5VTEwpOworICAgIH0gZWxzZSB7
CisgICAgICBpdGVyLT5SZWdpc3RlckNsZWFudXAoJlJlbGVhc2VCbG9jaywgYmxvY2tfY2FjaGUs
IGNhY2hlX2hhbmRsZSk7CisgICAgfQorICB9IGVsc2UgeworICAgIGl0ZXIgPSBOZXdFcnJvckl0
ZXJhdG9yKHMpOworICB9CisgIHJldHVybiBpdGVyOworfQorCitJdGVyYXRvciogVGFibGU6Ok5l
d0l0ZXJhdG9yKGNvbnN0IFJlYWRPcHRpb25zJiBvcHRpb25zKSBjb25zdCB7CisgIHJldHVybiBO
ZXdUd29MZXZlbEl0ZXJhdG9yKAorICAgICAgcmVwXy0+aW5kZXhfYmxvY2stPk5ld0l0ZXJhdG9y
KHJlcF8tPm9wdGlvbnMuY29tcGFyYXRvciksCisgICAgICAmVGFibGU6OkJsb2NrUmVhZGVyLCBj
b25zdF9jYXN0PFRhYmxlKj4odGhpcyksIG9wdGlvbnMpOworfQorCitTdGF0dXMgVGFibGU6Oklu
dGVybmFsR2V0KGNvbnN0IFJlYWRPcHRpb25zJiBvcHRpb25zLCBjb25zdCBTbGljZSYgaywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogYXJnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICB2b2lkICgqc2F2ZXIpKHZvaWQqLCBjb25zdCBTbGljZSYsIGNvbnN0IFNsaWNlJikpIHsK
KyAgU3RhdHVzIHM7CisgIEl0ZXJhdG9yKiBpaXRlciA9IHJlcF8tPmluZGV4X2Jsb2NrLT5OZXdJ
dGVyYXRvcihyZXBfLT5vcHRpb25zLmNvbXBhcmF0b3IpOworICBpaXRlci0+U2VlayhrKTsKKyAg
aWYgKGlpdGVyLT5WYWxpZCgpKSB7CisgICAgU2xpY2UgaGFuZGxlX3ZhbHVlID0gaWl0ZXItPnZh
bHVlKCk7CisgICAgRmlsdGVyQmxvY2tSZWFkZXIqIGZpbHRlciA9IHJlcF8tPmZpbHRlcjsKKyAg
ICBCbG9ja0hhbmRsZSBoYW5kbGU7CisgICAgaWYgKGZpbHRlciAhPSBOVUxMICYmCisgICAgICAg
IGhhbmRsZS5EZWNvZGVGcm9tKCZoYW5kbGVfdmFsdWUpLm9rKCkgJiYKKyAgICAgICAgIWZpbHRl
ci0+S2V5TWF5TWF0Y2goaGFuZGxlLm9mZnNldCgpLCBrKSkgeworICAgICAgLy8gTm90IGZvdW5k
CisgICAgfSBlbHNlIHsKKyAgICAgIFNsaWNlIGhhbmRsZSA9IGlpdGVyLT52YWx1ZSgpOworICAg
ICAgSXRlcmF0b3IqIGJsb2NrX2l0ZXIgPSBCbG9ja1JlYWRlcih0aGlzLCBvcHRpb25zLCBpaXRl
ci0+dmFsdWUoKSk7CisgICAgICBibG9ja19pdGVyLT5TZWVrKGspOworICAgICAgaWYgKGJsb2Nr
X2l0ZXItPlZhbGlkKCkpIHsKKyAgICAgICAgKCpzYXZlcikoYXJnLCBibG9ja19pdGVyLT5rZXko
KSwgYmxvY2tfaXRlci0+dmFsdWUoKSk7CisgICAgICB9CisgICAgICBzID0gYmxvY2tfaXRlci0+
c3RhdHVzKCk7CisgICAgICBkZWxldGUgYmxvY2tfaXRlcjsKKyAgICB9CisgIH0KKyAgaWYgKHMu
b2soKSkgeworICAgIHMgPSBpaXRlci0+c3RhdHVzKCk7CisgIH0KKyAgZGVsZXRlIGlpdGVyOwor
ICByZXR1cm4gczsKK30KKworCit1aW50NjRfdCBUYWJsZTo6QXBwcm94aW1hdGVPZmZzZXRPZihj
b25zdCBTbGljZSYga2V5KSBjb25zdCB7CisgIEl0ZXJhdG9yKiBpbmRleF9pdGVyID0KKyAgICAg
IHJlcF8tPmluZGV4X2Jsb2NrLT5OZXdJdGVyYXRvcihyZXBfLT5vcHRpb25zLmNvbXBhcmF0b3Ip
OworICBpbmRleF9pdGVyLT5TZWVrKGtleSk7CisgIHVpbnQ2NF90IHJlc3VsdDsKKyAgaWYgKGlu
ZGV4X2l0ZXItPlZhbGlkKCkpIHsKKyAgICBCbG9ja0hhbmRsZSBoYW5kbGU7CisgICAgU2xpY2Ug
aW5wdXQgPSBpbmRleF9pdGVyLT52YWx1ZSgpOworICAgIFN0YXR1cyBzID0gaGFuZGxlLkRlY29k
ZUZyb20oJmlucHV0KTsKKyAgICBpZiAocy5vaygpKSB7CisgICAgICByZXN1bHQgPSBoYW5kbGUu
b2Zmc2V0KCk7CisgICAgfSBlbHNlIHsKKyAgICAgIC8vIFN0cmFuZ2U6IHdlIGNhbid0IGRlY29k
ZSB0aGUgYmxvY2sgaGFuZGxlIGluIHRoZSBpbmRleCBibG9jay4KKyAgICAgIC8vIFdlJ2xsIGp1
c3QgcmV0dXJuIHRoZSBvZmZzZXQgb2YgdGhlIG1ldGFpbmRleCBibG9jaywgd2hpY2ggaXMKKyAg
ICAgIC8vIGNsb3NlIHRvIHRoZSB3aG9sZSBmaWxlIHNpemUgZm9yIHRoaXMgY2FzZS4KKyAgICAg
IHJlc3VsdCA9IHJlcF8tPm1ldGFpbmRleF9oYW5kbGUub2Zmc2V0KCk7CisgICAgfQorICB9IGVs
c2UgeworICAgIC8vIGtleSBpcyBwYXN0IHRoZSBsYXN0IGtleSBpbiB0aGUgZmlsZS4gIEFwcHJv
eGltYXRlIHRoZSBvZmZzZXQKKyAgICAvLyBieSByZXR1cm5pbmcgdGhlIG9mZnNldCBvZiB0aGUg
bWV0YWluZGV4IGJsb2NrICh3aGljaCBpcworICAgIC8vIHJpZ2h0IG5lYXIgdGhlIGVuZCBvZiB0
aGUgZmlsZSkuCisgICAgcmVzdWx0ID0gcmVwXy0+bWV0YWluZGV4X2hhbmRsZS5vZmZzZXQoKTsK
KyAgfQorICBkZWxldGUgaW5kZXhfaXRlcjsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAgLy8g
bmFtZXNwYWNlIGxldmVsZGIKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIv
dGFibGUvdGFibGVfYnVpbGRlci5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdGFibGUv
dGFibGVfYnVpbGRlci5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MjAwMmM4NGYyYjE4ZjQ3OWZkYjFjZDNhYjE0
MmMxNzllMWYzYTZmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxk
Yi90YWJsZS90YWJsZV9idWlsZGVyLmNjCkBAIC0wLDAgKzEsMjcwIEBACisvLyBDb3B5cmlnaHQg
KGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9S
UyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCisKKyNpbmNsdWRlICJsZXZlbGRiL3Rh
YmxlX2J1aWxkZXIuaCIKKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgImxldmVsZGIv
Y29tcGFyYXRvci5oIgorI2luY2x1ZGUgImxldmVsZGIvZW52LmgiCisjaW5jbHVkZSAibGV2ZWxk
Yi9maWx0ZXJfcG9saWN5LmgiCisjaW5jbHVkZSAibGV2ZWxkYi9vcHRpb25zLmgiCisjaW5jbHVk
ZSAidGFibGUvYmxvY2tfYnVpbGRlci5oIgorI2luY2x1ZGUgInRhYmxlL2ZpbHRlcl9ibG9jay5o
IgorI2luY2x1ZGUgInRhYmxlL2Zvcm1hdC5oIgorI2luY2x1ZGUgInV0aWwvY29kaW5nLmgiCisj
aW5jbHVkZSAidXRpbC9jcmMzMmMuaCIKKworbmFtZXNwYWNlIGxldmVsZGIgeworCitzdHJ1Y3Qg
VGFibGVCdWlsZGVyOjpSZXAgeworICBPcHRpb25zIG9wdGlvbnM7CisgIE9wdGlvbnMgaW5kZXhf
YmxvY2tfb3B0aW9uczsKKyAgV3JpdGFibGVGaWxlKiBmaWxlOworICB1aW50NjRfdCBvZmZzZXQ7
CisgIFN0YXR1cyBzdGF0dXM7CisgIEJsb2NrQnVpbGRlciBkYXRhX2Jsb2NrOworICBCbG9ja0J1
aWxkZXIgaW5kZXhfYmxvY2s7CisgIHN0ZDo6c3RyaW5nIGxhc3Rfa2V5OworICBpbnQ2NF90IG51
bV9lbnRyaWVzOworICBib29sIGNsb3NlZDsgICAgICAgICAgLy8gRWl0aGVyIEZpbmlzaCgpIG9y
IEFiYW5kb24oKSBoYXMgYmVlbiBjYWxsZWQuCisgIEZpbHRlckJsb2NrQnVpbGRlciogZmlsdGVy
X2Jsb2NrOworCisgIC8vIFdlIGRvIG5vdCBlbWl0IHRoZSBpbmRleCBlbnRyeSBmb3IgYSBibG9j
ayB1bnRpbCB3ZSBoYXZlIHNlZW4gdGhlCisgIC8vIGZpcnN0IGtleSBmb3IgdGhlIG5leHQgZGF0
YSBibG9jay4gIFRoaXMgYWxsb3dzIHVzIHRvIHVzZSBzaG9ydGVyCisgIC8vIGtleXMgaW4gdGhl
IGluZGV4IGJsb2NrLiAgRm9yIGV4YW1wbGUsIGNvbnNpZGVyIGEgYmxvY2sgYm91bmRhcnkKKyAg
Ly8gYmV0d2VlbiB0aGUga2V5cyAidGhlIHF1aWNrIGJyb3duIGZveCIgYW5kICJ0aGUgd2hvIi4g
IFdlIGNhbiB1c2UKKyAgLy8gInRoZSByIiBhcyB0aGUga2V5IGZvciB0aGUgaW5kZXggYmxvY2sg
ZW50cnkgc2luY2UgaXQgaXMgPj0gYWxsCisgIC8vIGVudHJpZXMgaW4gdGhlIGZpcnN0IGJsb2Nr
IGFuZCA8IGFsbCBlbnRyaWVzIGluIHN1YnNlcXVlbnQKKyAgLy8gYmxvY2tzLgorICAvLworICAv
LyBJbnZhcmlhbnQ6IHItPnBlbmRpbmdfaW5kZXhfZW50cnkgaXMgdHJ1ZSBvbmx5IGlmIGRhdGFf
YmxvY2sgaXMgZW1wdHkuCisgIGJvb2wgcGVuZGluZ19pbmRleF9lbnRyeTsKKyAgQmxvY2tIYW5k
bGUgcGVuZGluZ19oYW5kbGU7ICAvLyBIYW5kbGUgdG8gYWRkIHRvIGluZGV4IGJsb2NrCisKKyAg
c3RkOjpzdHJpbmcgY29tcHJlc3NlZF9vdXRwdXQ7CisKKyAgUmVwKGNvbnN0IE9wdGlvbnMmIG9w
dCwgV3JpdGFibGVGaWxlKiBmKQorICAgICAgOiBvcHRpb25zKG9wdCksCisgICAgICAgIGluZGV4
X2Jsb2NrX29wdGlvbnMob3B0KSwKKyAgICAgICAgZmlsZShmKSwKKyAgICAgICAgb2Zmc2V0KDAp
LAorICAgICAgICBkYXRhX2Jsb2NrKCZvcHRpb25zKSwKKyAgICAgICAgaW5kZXhfYmxvY2soJmlu
ZGV4X2Jsb2NrX29wdGlvbnMpLAorICAgICAgICBudW1fZW50cmllcygwKSwKKyAgICAgICAgY2xv
c2VkKGZhbHNlKSwKKyAgICAgICAgZmlsdGVyX2Jsb2NrKG9wdC5maWx0ZXJfcG9saWN5ID09IE5V
TEwgPyBOVUxMCisgICAgICAgICAgICAgICAgICAgICA6IG5ldyBGaWx0ZXJCbG9ja0J1aWxkZXIo
b3B0LmZpbHRlcl9wb2xpY3kpKSwKKyAgICAgICAgcGVuZGluZ19pbmRleF9lbnRyeShmYWxzZSkg
eworICAgIGluZGV4X2Jsb2NrX29wdGlvbnMuYmxvY2tfcmVzdGFydF9pbnRlcnZhbCA9IDE7Cisg
IH0KK307CisKK1RhYmxlQnVpbGRlcjo6VGFibGVCdWlsZGVyKGNvbnN0IE9wdGlvbnMmIG9wdGlv
bnMsIFdyaXRhYmxlRmlsZSogZmlsZSkKKyAgICA6IHJlcF8obmV3IFJlcChvcHRpb25zLCBmaWxl
KSkgeworICBpZiAocmVwXy0+ZmlsdGVyX2Jsb2NrICE9IE5VTEwpIHsKKyAgICByZXBfLT5maWx0
ZXJfYmxvY2stPlN0YXJ0QmxvY2soMCk7CisgIH0KK30KKworVGFibGVCdWlsZGVyOjp+VGFibGVC
dWlsZGVyKCkgeworICBhc3NlcnQocmVwXy0+Y2xvc2VkKTsgIC8vIENhdGNoIGVycm9ycyB3aGVy
ZSBjYWxsZXIgZm9yZ290IHRvIGNhbGwgRmluaXNoKCkKKyAgZGVsZXRlIHJlcF8tPmZpbHRlcl9i
bG9jazsKKyAgZGVsZXRlIHJlcF87Cit9CisKK1N0YXR1cyBUYWJsZUJ1aWxkZXI6OkNoYW5nZU9w
dGlvbnMoY29uc3QgT3B0aW9ucyYgb3B0aW9ucykgeworICAvLyBOb3RlOiBpZiBtb3JlIGZpZWxk
cyBhcmUgYWRkZWQgdG8gT3B0aW9ucywgdXBkYXRlCisgIC8vIHRoaXMgZnVuY3Rpb24gdG8gY2F0
Y2ggY2hhbmdlcyB0aGF0IHNob3VsZCBub3QgYmUgYWxsb3dlZCB0bworICAvLyBjaGFuZ2UgaW4g
dGhlIG1pZGRsZSBvZiBidWlsZGluZyBhIFRhYmxlLgorICBpZiAob3B0aW9ucy5jb21wYXJhdG9y
ICE9IHJlcF8tPm9wdGlvbnMuY29tcGFyYXRvcikgeworICAgIHJldHVybiBTdGF0dXM6OkludmFs
aWRBcmd1bWVudCgiY2hhbmdpbmcgY29tcGFyYXRvciB3aGlsZSBidWlsZGluZyB0YWJsZSIpOwor
ICB9CisKKyAgLy8gTm90ZSB0aGF0IGFueSBsaXZlIEJsb2NrQnVpbGRlcnMgcG9pbnQgdG8gcmVw
Xy0+b3B0aW9ucyBhbmQgdGhlcmVmb3JlCisgIC8vIHdpbGwgYXV0b21hdGljYWxseSBwaWNrIHVw
IHRoZSB1cGRhdGVkIG9wdGlvbnMuCisgIHJlcF8tPm9wdGlvbnMgPSBvcHRpb25zOworICByZXBf
LT5pbmRleF9ibG9ja19vcHRpb25zID0gb3B0aW9uczsKKyAgcmVwXy0+aW5kZXhfYmxvY2tfb3B0
aW9ucy5ibG9ja19yZXN0YXJ0X2ludGVydmFsID0gMTsKKyAgcmV0dXJuIFN0YXR1czo6T0soKTsK
K30KKwordm9pZCBUYWJsZUJ1aWxkZXI6OkFkZChjb25zdCBTbGljZSYga2V5LCBjb25zdCBTbGlj
ZSYgdmFsdWUpIHsKKyAgUmVwKiByID0gcmVwXzsKKyAgYXNzZXJ0KCFyLT5jbG9zZWQpOworICBp
ZiAoIW9rKCkpIHJldHVybjsKKyAgaWYgKHItPm51bV9lbnRyaWVzID4gMCkgeworICAgIGFzc2Vy
dChyLT5vcHRpb25zLmNvbXBhcmF0b3ItPkNvbXBhcmUoa2V5LCBTbGljZShyLT5sYXN0X2tleSkp
ID4gMCk7CisgIH0KKworICBpZiAoci0+cGVuZGluZ19pbmRleF9lbnRyeSkgeworICAgIGFzc2Vy
dChyLT5kYXRhX2Jsb2NrLmVtcHR5KCkpOworICAgIHItPm9wdGlvbnMuY29tcGFyYXRvci0+Rmlu
ZFNob3J0ZXN0U2VwYXJhdG9yKCZyLT5sYXN0X2tleSwga2V5KTsKKyAgICBzdGQ6OnN0cmluZyBo
YW5kbGVfZW5jb2Rpbmc7CisgICAgci0+cGVuZGluZ19oYW5kbGUuRW5jb2RlVG8oJmhhbmRsZV9l
bmNvZGluZyk7CisgICAgci0+aW5kZXhfYmxvY2suQWRkKHItPmxhc3Rfa2V5LCBTbGljZShoYW5k
bGVfZW5jb2RpbmcpKTsKKyAgICByLT5wZW5kaW5nX2luZGV4X2VudHJ5ID0gZmFsc2U7CisgIH0K
KworICBpZiAoci0+ZmlsdGVyX2Jsb2NrICE9IE5VTEwpIHsKKyAgICByLT5maWx0ZXJfYmxvY2st
PkFkZEtleShrZXkpOworICB9CisKKyAgci0+bGFzdF9rZXkuYXNzaWduKGtleS5kYXRhKCksIGtl
eS5zaXplKCkpOworICByLT5udW1fZW50cmllcysrOworICByLT5kYXRhX2Jsb2NrLkFkZChrZXks
IHZhbHVlKTsKKworICBjb25zdCBzaXplX3QgZXN0aW1hdGVkX2Jsb2NrX3NpemUgPSByLT5kYXRh
X2Jsb2NrLkN1cnJlbnRTaXplRXN0aW1hdGUoKTsKKyAgaWYgKGVzdGltYXRlZF9ibG9ja19zaXpl
ID49IHItPm9wdGlvbnMuYmxvY2tfc2l6ZSkgeworICAgIEZsdXNoKCk7CisgIH0KK30KKwordm9p
ZCBUYWJsZUJ1aWxkZXI6OkZsdXNoKCkgeworICBSZXAqIHIgPSByZXBfOworICBhc3NlcnQoIXIt
PmNsb3NlZCk7CisgIGlmICghb2soKSkgcmV0dXJuOworICBpZiAoci0+ZGF0YV9ibG9jay5lbXB0
eSgpKSByZXR1cm47CisgIGFzc2VydCghci0+cGVuZGluZ19pbmRleF9lbnRyeSk7CisgIFdyaXRl
QmxvY2soJnItPmRhdGFfYmxvY2ssICZyLT5wZW5kaW5nX2hhbmRsZSk7CisgIGlmIChvaygpKSB7
CisgICAgci0+cGVuZGluZ19pbmRleF9lbnRyeSA9IHRydWU7CisgICAgci0+c3RhdHVzID0gci0+
ZmlsZS0+Rmx1c2goKTsKKyAgfQorICBpZiAoci0+ZmlsdGVyX2Jsb2NrICE9IE5VTEwpIHsKKyAg
ICByLT5maWx0ZXJfYmxvY2stPlN0YXJ0QmxvY2soci0+b2Zmc2V0KTsKKyAgfQorfQorCit2b2lk
IFRhYmxlQnVpbGRlcjo6V3JpdGVCbG9jayhCbG9ja0J1aWxkZXIqIGJsb2NrLCBCbG9ja0hhbmRs
ZSogaGFuZGxlKSB7CisgIC8vIEZpbGUgZm9ybWF0IGNvbnRhaW5zIGEgc2VxdWVuY2Ugb2YgYmxv
Y2tzIHdoZXJlIGVhY2ggYmxvY2sgaGFzOgorICAvLyAgICBibG9ja19kYXRhOiB1aW50OFtuXQor
ICAvLyAgICB0eXBlOiB1aW50OAorICAvLyAgICBjcmM6IHVpbnQzMgorICBhc3NlcnQob2soKSk7
CisgIFJlcCogciA9IHJlcF87CisgIFNsaWNlIHJhdyA9IGJsb2NrLT5GaW5pc2goKTsKKworICBT
bGljZSBibG9ja19jb250ZW50czsKKyAgQ29tcHJlc3Npb25UeXBlIHR5cGUgPSByLT5vcHRpb25z
LmNvbXByZXNzaW9uOworICAvLyBUT0RPKHBvc3RyZWxlYXNlKTogU3VwcG9ydCBtb3JlIGNvbXBy
ZXNzaW9uIG9wdGlvbnM6IHpsaWI/CisgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2Uga05vQ29t
cHJlc3Npb246CisgICAgICBibG9ja19jb250ZW50cyA9IHJhdzsKKyAgICAgIGJyZWFrOworCisg
ICAgY2FzZSBrU25hcHB5Q29tcHJlc3Npb246IHsKKyAgICAgIHN0ZDo6c3RyaW5nKiBjb21wcmVz
c2VkID0gJnItPmNvbXByZXNzZWRfb3V0cHV0OworICAgICAgaWYgKHBvcnQ6OlNuYXBweV9Db21w
cmVzcyhyYXcuZGF0YSgpLCByYXcuc2l6ZSgpLCBjb21wcmVzc2VkKSAmJgorICAgICAgICAgIGNv
bXByZXNzZWQtPnNpemUoKSA8IHJhdy5zaXplKCkgLSAocmF3LnNpemUoKSAvIDh1KSkgeworICAg
ICAgICBibG9ja19jb250ZW50cyA9ICpjb21wcmVzc2VkOworICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgLy8gU25hcHB5IG5vdCBzdXBwb3J0ZWQsIG9yIGNvbXByZXNzZWQgbGVzcyB0aGFuIDEyLjUl
LCBzbyBqdXN0CisgICAgICAgIC8vIHN0b3JlIHVuY29tcHJlc3NlZCBmb3JtCisgICAgICAgIGJs
b2NrX2NvbnRlbnRzID0gcmF3OworICAgICAgICB0eXBlID0ga05vQ29tcHJlc3Npb247CisgICAg
ICB9CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgV3JpdGVSYXdCbG9jayhibG9ja19jb250
ZW50cywgdHlwZSwgaGFuZGxlKTsKKyAgci0+Y29tcHJlc3NlZF9vdXRwdXQuY2xlYXIoKTsKKyAg
YmxvY2stPlJlc2V0KCk7Cit9CisKK3ZvaWQgVGFibGVCdWlsZGVyOjpXcml0ZVJhd0Jsb2NrKGNv
bnN0IFNsaWNlJiBibG9ja19jb250ZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENvbXByZXNzaW9uVHlwZSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQmxvY2tIYW5kbGUqIGhhbmRsZSkgeworICBSZXAqIHIgPSByZXBfOworICBoYW5kbGUtPnNl
dF9vZmZzZXQoci0+b2Zmc2V0KTsKKyAgaGFuZGxlLT5zZXRfc2l6ZShibG9ja19jb250ZW50cy5z
aXplKCkpOworICByLT5zdGF0dXMgPSByLT5maWxlLT5BcHBlbmQoYmxvY2tfY29udGVudHMpOwor
ICBpZiAoci0+c3RhdHVzLm9rKCkpIHsKKyAgICBjaGFyIHRyYWlsZXJba0Jsb2NrVHJhaWxlclNp
emVdOworICAgIHRyYWlsZXJbMF0gPSB0eXBlOworICAgIHVpbnQzMl90IGNyYyA9IGNyYzMyYzo6
VmFsdWUoYmxvY2tfY29udGVudHMuZGF0YSgpLCBibG9ja19jb250ZW50cy5zaXplKCkpOworICAg
IGNyYyA9IGNyYzMyYzo6RXh0ZW5kKGNyYywgdHJhaWxlciwgMSk7ICAvLyBFeHRlbmQgY3JjIHRv
IGNvdmVyIGJsb2NrIHR5cGUKKyAgICBFbmNvZGVGaXhlZDMyKHRyYWlsZXIrMSwgY3JjMzJjOjpN
YXNrKGNyYykpOworICAgIHItPnN0YXR1cyA9IHItPmZpbGUtPkFwcGVuZChTbGljZSh0cmFpbGVy
LCBrQmxvY2tUcmFpbGVyU2l6ZSkpOworICAgIGlmIChyLT5zdGF0dXMub2soKSkgeworICAgICAg
ci0+b2Zmc2V0ICs9IGJsb2NrX2NvbnRlbnRzLnNpemUoKSArIGtCbG9ja1RyYWlsZXJTaXplOwor
ICAgIH0KKyAgfQorfQorCitTdGF0dXMgVGFibGVCdWlsZGVyOjpzdGF0dXMoKSBjb25zdCB7Cisg
IHJldHVybiByZXBfLT5zdGF0dXM7Cit9CisKK1N0YXR1cyBUYWJsZUJ1aWxkZXI6OkZpbmlzaCgp
IHsKKyAgUmVwKiByID0gcmVwXzsKKyAgRmx1c2goKTsKKyAgYXNzZXJ0KCFyLT5jbG9zZWQpOwor
ICByLT5jbG9zZWQgPSB0cnVlOworCisgIEJsb2NrSGFuZGxlIGZpbHRlcl9ibG9ja19oYW5kbGUs
IG1ldGFpbmRleF9ibG9ja19oYW5kbGUsIGluZGV4X2Jsb2NrX2hhbmRsZTsKKworICAvLyBXcml0
ZSBmaWx0ZXIgYmxvY2sKKyAgaWYgKG9rKCkgJiYgci0+ZmlsdGVyX2Jsb2NrICE9IE5VTEwpIHsK
KyAgICBXcml0ZVJhd0Jsb2NrKHItPmZpbHRlcl9ibG9jay0+RmluaXNoKCksIGtOb0NvbXByZXNz
aW9uLAorICAgICAgICAgICAgICAgICAgJmZpbHRlcl9ibG9ja19oYW5kbGUpOworICB9CisKKyAg
Ly8gV3JpdGUgbWV0YWluZGV4IGJsb2NrCisgIGlmIChvaygpKSB7CisgICAgQmxvY2tCdWlsZGVy
IG1ldGFfaW5kZXhfYmxvY2soJnItPm9wdGlvbnMpOworICAgIGlmIChyLT5maWx0ZXJfYmxvY2sg
IT0gTlVMTCkgeworICAgICAgLy8gQWRkIG1hcHBpbmcgZnJvbSAiZmlsdGVyLk5hbWUiIHRvIGxv
Y2F0aW9uIG9mIGZpbHRlciBkYXRhCisgICAgICBzdGQ6OnN0cmluZyBrZXkgPSAiZmlsdGVyLiI7
CisgICAgICBrZXkuYXBwZW5kKHItPm9wdGlvbnMuZmlsdGVyX3BvbGljeS0+TmFtZSgpKTsKKyAg
ICAgIHN0ZDo6c3RyaW5nIGhhbmRsZV9lbmNvZGluZzsKKyAgICAgIGZpbHRlcl9ibG9ja19oYW5k
bGUuRW5jb2RlVG8oJmhhbmRsZV9lbmNvZGluZyk7CisgICAgICBtZXRhX2luZGV4X2Jsb2NrLkFk
ZChrZXksIGhhbmRsZV9lbmNvZGluZyk7CisgICAgfQorCisgICAgLy8gVE9ETyhwb3N0cmVsZWFz
ZSk6IEFkZCBzdGF0cyBhbmQgb3RoZXIgbWV0YSBibG9ja3MKKyAgICBXcml0ZUJsb2NrKCZtZXRh
X2luZGV4X2Jsb2NrLCAmbWV0YWluZGV4X2Jsb2NrX2hhbmRsZSk7CisgIH0KKworICAvLyBXcml0
ZSBpbmRleCBibG9jaworICBpZiAob2soKSkgeworICAgIGlmIChyLT5wZW5kaW5nX2luZGV4X2Vu
dHJ5KSB7CisgICAgICByLT5vcHRpb25zLmNvbXBhcmF0b3ItPkZpbmRTaG9ydFN1Y2Nlc3Nvcigm
ci0+bGFzdF9rZXkpOworICAgICAgc3RkOjpzdHJpbmcgaGFuZGxlX2VuY29kaW5nOworICAgICAg
ci0+cGVuZGluZ19oYW5kbGUuRW5jb2RlVG8oJmhhbmRsZV9lbmNvZGluZyk7CisgICAgICByLT5p
bmRleF9ibG9jay5BZGQoci0+bGFzdF9rZXksIFNsaWNlKGhhbmRsZV9lbmNvZGluZykpOworICAg
ICAgci0+cGVuZGluZ19pbmRleF9lbnRyeSA9IGZhbHNlOworICAgIH0KKyAgICBXcml0ZUJsb2Nr
KCZyLT5pbmRleF9ibG9jaywgJmluZGV4X2Jsb2NrX2hhbmRsZSk7CisgIH0KKworICAvLyBXcml0
ZSBmb290ZXIKKyAgaWYgKG9rKCkpIHsKKyAgICBGb290ZXIgZm9vdGVyOworICAgIGZvb3Rlci5z
ZXRfbWV0YWluZGV4X2hhbmRsZShtZXRhaW5kZXhfYmxvY2tfaGFuZGxlKTsKKyAgICBmb290ZXIu
c2V0X2luZGV4X2hhbmRsZShpbmRleF9ibG9ja19oYW5kbGUpOworICAgIHN0ZDo6c3RyaW5nIGZv
b3Rlcl9lbmNvZGluZzsKKyAgICBmb290ZXIuRW5jb2RlVG8oJmZvb3Rlcl9lbmNvZGluZyk7Cisg
ICAgci0+c3RhdHVzID0gci0+ZmlsZS0+QXBwZW5kKGZvb3Rlcl9lbmNvZGluZyk7CisgICAgaWYg
KHItPnN0YXR1cy5vaygpKSB7CisgICAgICByLT5vZmZzZXQgKz0gZm9vdGVyX2VuY29kaW5nLnNp
emUoKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHItPnN0YXR1czsKK30KKwordm9pZCBUYWJsZUJ1
aWxkZXI6OkFiYW5kb24oKSB7CisgIFJlcCogciA9IHJlcF87CisgIGFzc2VydCghci0+Y2xvc2Vk
KTsKKyAgci0+Y2xvc2VkID0gdHJ1ZTsKK30KKwordWludDY0X3QgVGFibGVCdWlsZGVyOjpOdW1F
bnRyaWVzKCkgY29uc3QgeworICByZXR1cm4gcmVwXy0+bnVtX2VudHJpZXM7Cit9CisKK3VpbnQ2
NF90IFRhYmxlQnVpbGRlcjo6RmlsZVNpemUoKSBjb25zdCB7CisgIHJldHVybiByZXBfLT5vZmZz
ZXQ7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBsZXZlbGRiCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9sZXZlbGRiL3RhYmxlL3RhYmxlX3Rlc3QuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
ZXZlbGRiL3RhYmxlL3RhYmxlX3Rlc3QuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTdjZWEyNTMzNGUwNzUwMTc0
OGI1ZmRhYzVhODg3MmI4OWQzMWYxZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xldmVsZGIvdGFibGUvdGFibGVfdGVzdC5jYwpAQCAtMCwwICsxLDgzOCBAQAorLy8gQ29w
eXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhl
IEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgorCisjaW5jbHVkZSAibGV2
ZWxkYi90YWJsZS5oIgorCisjaW5jbHVkZSA8bWFwPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNs
dWRlICJkYi9kYmZvcm1hdC5oIgorI2luY2x1ZGUgImRiL21lbXRhYmxlLmgiCisjaW5jbHVkZSAi
ZGIvd3JpdGVfYmF0Y2hfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJsZXZlbGRiL2RiLmgiCisjaW5j
bHVkZSAibGV2ZWxkYi9lbnYuaCIKKyNpbmNsdWRlICJsZXZlbGRiL2l0ZXJhdG9yLmgiCisjaW5j
bHVkZSAibGV2ZWxkYi90YWJsZV9idWlsZGVyLmgiCisjaW5jbHVkZSAidGFibGUvYmxvY2suaCIK
KyNpbmNsdWRlICJ0YWJsZS9ibG9ja19idWlsZGVyLmgiCisjaW5jbHVkZSAidGFibGUvZm9ybWF0
LmgiCisjaW5jbHVkZSAidXRpbC9yYW5kb20uaCIKKyNpbmNsdWRlICJ1dGlsL3Rlc3RoYXJuZXNz
LmgiCisjaW5jbHVkZSAidXRpbC90ZXN0dXRpbC5oIgorCituYW1lc3BhY2UgbGV2ZWxkYiB7CisK
Ky8vIFJldHVybiByZXZlcnNlIG9mICJrZXkiLgorLy8gVXNlZCB0byB0ZXN0IG5vbi1sZXhpY29n
cmFwaGljIGNvbXBhcmF0b3JzLgorc3RhdGljIHN0ZDo6c3RyaW5nIFJldmVyc2UoY29uc3QgU2xp
Y2UmIGtleSkgeworICBzdGQ6OnN0cmluZyBzdHIoa2V5LlRvU3RyaW5nKCkpOworICBzdGQ6OnN0
cmluZyByZXYoIiIpOworICBmb3IgKHN0ZDo6c3RyaW5nOjpyZXZlcnNlX2l0ZXJhdG9yIHJpdCA9
IHN0ci5yYmVnaW4oKTsKKyAgICAgICByaXQgIT0gc3RyLnJlbmQoKTsgKytyaXQpIHsKKyAgICBy
ZXYucHVzaF9iYWNrKCpyaXQpOworICB9CisgIHJldHVybiByZXY7Cit9CisKK25hbWVzcGFjZSB7
CitjbGFzcyBSZXZlcnNlS2V5Q29tcGFyYXRvciA6IHB1YmxpYyBDb21wYXJhdG9yIHsKKyBwdWJs
aWM6CisgIHZpcnR1YWwgY29uc3QgY2hhciogTmFtZSgpIGNvbnN0IHsKKyAgICByZXR1cm4gImxl
dmVsZGIuUmV2ZXJzZUJ5dGV3aXNlQ29tcGFyYXRvciI7CisgIH0KKworICB2aXJ0dWFsIGludCBD
b21wYXJlKGNvbnN0IFNsaWNlJiBhLCBjb25zdCBTbGljZSYgYikgY29uc3QgeworICAgIHJldHVy
biBCeXRld2lzZUNvbXBhcmF0b3IoKS0+Q29tcGFyZShSZXZlcnNlKGEpLCBSZXZlcnNlKGIpKTsK
KyAgfQorCisgIHZpcnR1YWwgdm9pZCBGaW5kU2hvcnRlc3RTZXBhcmF0b3IoCisgICAgICBzdGQ6
OnN0cmluZyogc3RhcnQsCisgICAgICBjb25zdCBTbGljZSYgbGltaXQpIGNvbnN0IHsKKyAgICBz
dGQ6OnN0cmluZyBzID0gUmV2ZXJzZSgqc3RhcnQpOworICAgIHN0ZDo6c3RyaW5nIGwgPSBSZXZl
cnNlKGxpbWl0KTsKKyAgICBCeXRld2lzZUNvbXBhcmF0b3IoKS0+RmluZFNob3J0ZXN0U2VwYXJh
dG9yKCZzLCBsKTsKKyAgICAqc3RhcnQgPSBSZXZlcnNlKHMpOworICB9CisKKyAgdmlydHVhbCB2
b2lkIEZpbmRTaG9ydFN1Y2Nlc3NvcihzdGQ6OnN0cmluZyoga2V5KSBjb25zdCB7CisgICAgc3Rk
OjpzdHJpbmcgcyA9IFJldmVyc2UoKmtleSk7CisgICAgQnl0ZXdpc2VDb21wYXJhdG9yKCktPkZp
bmRTaG9ydFN1Y2Nlc3Nvcigmcyk7CisgICAgKmtleSA9IFJldmVyc2Uocyk7CisgIH0KK307Cit9
ICAvLyBuYW1lc3BhY2UKK3N0YXRpYyBSZXZlcnNlS2V5Q29tcGFyYXRvciByZXZlcnNlX2tleV9j
b21wYXJhdG9yOworCitzdGF0aWMgdm9pZCBJbmNyZW1lbnQoY29uc3QgQ29tcGFyYXRvciogY21w
LCBzdGQ6OnN0cmluZyoga2V5KSB7CisgIGlmIChjbXAgPT0gQnl0ZXdpc2VDb21wYXJhdG9yKCkp
IHsKKyAgICBrZXktPnB1c2hfYmFjaygnXDAnKTsKKyAgfSBlbHNlIHsKKyAgICBhc3NlcnQoY21w
ID09ICZyZXZlcnNlX2tleV9jb21wYXJhdG9yKTsKKyAgICBzdGQ6OnN0cmluZyByZXYgPSBSZXZl
cnNlKCprZXkpOworICAgIHJldi5wdXNoX2JhY2soJ1wwJyk7CisgICAgKmtleSA9IFJldmVyc2Uo
cmV2KTsKKyAgfQorfQorCisvLyBBbiBTVEwgY29tcGFyYXRvciB0aGF0IHVzZXMgYSBDb21wYXJh
dG9yCituYW1lc3BhY2Ugeworc3RydWN0IFNUTExlc3NUaGFuIHsKKyAgY29uc3QgQ29tcGFyYXRv
ciogY21wOworCisgIFNUTExlc3NUaGFuKCkgOiBjbXAoQnl0ZXdpc2VDb21wYXJhdG9yKCkpIHsg
fQorICBTVExMZXNzVGhhbihjb25zdCBDb21wYXJhdG9yKiBjKSA6IGNtcChjKSB7IH0KKyAgYm9v
bCBvcGVyYXRvcigpKGNvbnN0IHN0ZDo6c3RyaW5nJiBhLCBjb25zdCBzdGQ6OnN0cmluZyYgYikg
Y29uc3QgeworICAgIHJldHVybiBjbXAtPkNvbXBhcmUoU2xpY2UoYSksIFNsaWNlKGIpKSA8IDA7
CisgIH0KK307Cit9ICAvLyBuYW1lc3BhY2UKKworY2xhc3MgU3RyaW5nU2luazogcHVibGljIFdy
aXRhYmxlRmlsZSB7CisgcHVibGljOgorICB+U3RyaW5nU2luaygpIHsgfQorCisgIGNvbnN0IHN0
ZDo6c3RyaW5nJiBjb250ZW50cygpIGNvbnN0IHsgcmV0dXJuIGNvbnRlbnRzXzsgfQorCisgIHZp
cnR1YWwgU3RhdHVzIENsb3NlKCkgeyByZXR1cm4gU3RhdHVzOjpPSygpOyB9CisgIHZpcnR1YWwg
U3RhdHVzIEZsdXNoKCkgeyByZXR1cm4gU3RhdHVzOjpPSygpOyB9CisgIHZpcnR1YWwgU3RhdHVz
IFN5bmMoKSB7IHJldHVybiBTdGF0dXM6Ok9LKCk7IH0KKworICB2aXJ0dWFsIFN0YXR1cyBBcHBl
bmQoY29uc3QgU2xpY2UmIGRhdGEpIHsKKyAgICBjb250ZW50c18uYXBwZW5kKGRhdGEuZGF0YSgp
LCBkYXRhLnNpemUoKSk7CisgICAgcmV0dXJuIFN0YXR1czo6T0soKTsKKyAgfQorCisgcHJpdmF0
ZToKKyAgc3RkOjpzdHJpbmcgY29udGVudHNfOworfTsKKworCitjbGFzcyBTdHJpbmdTb3VyY2U6
IHB1YmxpYyBSYW5kb21BY2Nlc3NGaWxlIHsKKyBwdWJsaWM6CisgIFN0cmluZ1NvdXJjZShjb25z
dCBTbGljZSYgY29udGVudHMpCisgICAgICA6IGNvbnRlbnRzXyhjb250ZW50cy5kYXRhKCksIGNv
bnRlbnRzLnNpemUoKSkgeworICB9CisKKyAgdmlydHVhbCB+U3RyaW5nU291cmNlKCkgeyB9CisK
KyAgdWludDY0X3QgU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGNvbnRlbnRzXy5zaXplKCk7IH0KKwor
ICB2aXJ0dWFsIFN0YXR1cyBSZWFkKHVpbnQ2NF90IG9mZnNldCwgc2l6ZV90IG4sIFNsaWNlKiBy
ZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIHNjcmF0Y2gpIGNvbnN0IHsKKyAg
ICBpZiAob2Zmc2V0ID4gY29udGVudHNfLnNpemUoKSkgeworICAgICAgcmV0dXJuIFN0YXR1czo6
SW52YWxpZEFyZ3VtZW50KCJpbnZhbGlkIFJlYWQgb2Zmc2V0Iik7CisgICAgfQorICAgIGlmIChv
ZmZzZXQgKyBuID4gY29udGVudHNfLnNpemUoKSkgeworICAgICAgbiA9IGNvbnRlbnRzXy5zaXpl
KCkgLSBvZmZzZXQ7CisgICAgfQorICAgIG1lbWNweShzY3JhdGNoLCAmY29udGVudHNfW29mZnNl
dF0sIG4pOworICAgICpyZXN1bHQgPSBTbGljZShzY3JhdGNoLCBuKTsKKyAgICByZXR1cm4gU3Rh
dHVzOjpPSygpOworICB9CisKKyBwcml2YXRlOgorICBzdGQ6OnN0cmluZyBjb250ZW50c187Cit9
OworCit0eXBlZGVmIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZywgU1RMTGVzc1Ro
YW4+IEtWTWFwOworCisvLyBIZWxwZXIgY2xhc3MgZm9yIHRlc3RzIHRvIHVuaWZ5IHRoZSBpbnRl
cmZhY2UgYmV0d2VlbgorLy8gQmxvY2tCdWlsZGVyL1RhYmxlQnVpbGRlciBhbmQgQmxvY2svVGFi
bGUuCitjbGFzcyBDb25zdHJ1Y3RvciB7CisgcHVibGljOgorICBleHBsaWNpdCBDb25zdHJ1Y3Rv
cihjb25zdCBDb21wYXJhdG9yKiBjbXApIDogZGF0YV8oU1RMTGVzc1RoYW4oY21wKSkgeyB9Cisg
IHZpcnR1YWwgfkNvbnN0cnVjdG9yKCkgeyB9CisKKyAgdm9pZCBBZGQoY29uc3Qgc3RkOjpzdHJp
bmcmIGtleSwgY29uc3QgU2xpY2UmIHZhbHVlKSB7CisgICAgZGF0YV9ba2V5XSA9IHZhbHVlLlRv
U3RyaW5nKCk7CisgIH0KKworICAvLyBGaW5pc2ggY29uc3RydWN0aW5nIHRoZSBkYXRhIHN0cnVj
dHVyZSB3aXRoIGFsbCB0aGUga2V5cyB0aGF0IGhhdmUKKyAgLy8gYmVlbiBhZGRlZCBzbyBmYXIu
ICBSZXR1cm5zIHRoZSBrZXlzIGluIHNvcnRlZCBvcmRlciBpbiAiKmtleXMiCisgIC8vIGFuZCBz
dG9yZXMgdGhlIGtleS92YWx1ZSBwYWlycyBpbiAiKmt2bWFwIgorICB2b2lkIEZpbmlzaChjb25z
dCBPcHRpb25zJiBvcHRpb25zLAorICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmlu
Zz4qIGtleXMsCisgICAgICAgICAgICAgIEtWTWFwKiBrdm1hcCkgeworICAgICprdm1hcCA9IGRh
dGFfOworICAgIGtleXMtPmNsZWFyKCk7CisgICAgZm9yIChLVk1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBkYXRhXy5iZWdpbigpOworICAgICAgICAgaXQgIT0gZGF0YV8uZW5kKCk7CisgICAgICAg
ICArK2l0KSB7CisgICAgICBrZXlzLT5wdXNoX2JhY2soaXQtPmZpcnN0KTsKKyAgICB9CisgICAg
ZGF0YV8uY2xlYXIoKTsKKyAgICBTdGF0dXMgcyA9IEZpbmlzaEltcGwob3B0aW9ucywgKmt2bWFw
KTsKKyAgICBBU1NFUlRfVFJVRShzLm9rKCkpIDw8IHMuVG9TdHJpbmcoKTsKKyAgfQorCisgIC8v
IENvbnN0cnVjdCB0aGUgZGF0YSBzdHJ1Y3R1cmUgZnJvbSB0aGUgZGF0YSBpbiAiZGF0YSIKKyAg
dmlydHVhbCBTdGF0dXMgRmluaXNoSW1wbChjb25zdCBPcHRpb25zJiBvcHRpb25zLCBjb25zdCBL
Vk1hcCYgZGF0YSkgPSAwOworCisgIHZpcnR1YWwgSXRlcmF0b3IqIE5ld0l0ZXJhdG9yKCkgY29u
c3QgPSAwOworCisgIHZpcnR1YWwgY29uc3QgS1ZNYXAmIGRhdGEoKSB7IHJldHVybiBkYXRhXzsg
fQorCisgIHZpcnR1YWwgREIqIGRiKCkgY29uc3QgeyByZXR1cm4gTlVMTDsgfSAgLy8gT3ZlcnJp
ZGRlbiBpbiBEQkNvbnN0cnVjdG9yCisKKyBwcml2YXRlOgorICBLVk1hcCBkYXRhXzsKK307CisK
K2NsYXNzIEJsb2NrQ29uc3RydWN0b3I6IHB1YmxpYyBDb25zdHJ1Y3RvciB7CisgcHVibGljOgor
ICBleHBsaWNpdCBCbG9ja0NvbnN0cnVjdG9yKGNvbnN0IENvbXBhcmF0b3IqIGNtcCkKKyAgICAg
IDogQ29uc3RydWN0b3IoY21wKSwKKyAgICAgICAgY29tcGFyYXRvcl8oY21wKSwKKyAgICAgICAg
YmxvY2tfKE5VTEwpIHsgfQorICB+QmxvY2tDb25zdHJ1Y3RvcigpIHsKKyAgICBkZWxldGUgYmxv
Y2tfOworICB9CisgIHZpcnR1YWwgU3RhdHVzIEZpbmlzaEltcGwoY29uc3QgT3B0aW9ucyYgb3B0
aW9ucywgY29uc3QgS1ZNYXAmIGRhdGEpIHsKKyAgICBkZWxldGUgYmxvY2tfOworICAgIGJsb2Nr
XyA9IE5VTEw7CisgICAgQmxvY2tCdWlsZGVyIGJ1aWxkZXIoJm9wdGlvbnMpOworCisgICAgZm9y
IChLVk1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBkYXRhLmJlZ2luKCk7CisgICAgICAgICBpdCAh
PSBkYXRhLmVuZCgpOworICAgICAgICAgKytpdCkgeworICAgICAgYnVpbGRlci5BZGQoaXQtPmZp
cnN0LCBpdC0+c2Vjb25kKTsKKyAgICB9CisgICAgLy8gT3BlbiB0aGUgYmxvY2sKKyAgICBkYXRh
XyA9IGJ1aWxkZXIuRmluaXNoKCkuVG9TdHJpbmcoKTsKKyAgICBCbG9ja0NvbnRlbnRzIGNvbnRl
bnRzOworICAgIGNvbnRlbnRzLmRhdGEgPSBkYXRhXzsKKyAgICBjb250ZW50cy5jYWNoYWJsZSA9
IGZhbHNlOworICAgIGNvbnRlbnRzLmhlYXBfYWxsb2NhdGVkID0gZmFsc2U7CisgICAgYmxvY2tf
ID0gbmV3IEJsb2NrKGNvbnRlbnRzKTsKKyAgICByZXR1cm4gU3RhdHVzOjpPSygpOworICB9Cisg
IHZpcnR1YWwgSXRlcmF0b3IqIE5ld0l0ZXJhdG9yKCkgY29uc3QgeworICAgIHJldHVybiBibG9j
a18tPk5ld0l0ZXJhdG9yKGNvbXBhcmF0b3JfKTsKKyAgfQorCisgcHJpdmF0ZToKKyAgY29uc3Qg
Q29tcGFyYXRvciogY29tcGFyYXRvcl87CisgIHN0ZDo6c3RyaW5nIGRhdGFfOworICBCbG9jayog
YmxvY2tfOworCisgIEJsb2NrQ29uc3RydWN0b3IoKTsKK307CisKK2NsYXNzIFRhYmxlQ29uc3Ry
dWN0b3I6IHB1YmxpYyBDb25zdHJ1Y3RvciB7CisgcHVibGljOgorICBUYWJsZUNvbnN0cnVjdG9y
KGNvbnN0IENvbXBhcmF0b3IqIGNtcCkKKyAgICAgIDogQ29uc3RydWN0b3IoY21wKSwKKyAgICAg
ICAgc291cmNlXyhOVUxMKSwgdGFibGVfKE5VTEwpIHsKKyAgfQorICB+VGFibGVDb25zdHJ1Y3Rv
cigpIHsKKyAgICBSZXNldCgpOworICB9CisgIHZpcnR1YWwgU3RhdHVzIEZpbmlzaEltcGwoY29u
c3QgT3B0aW9ucyYgb3B0aW9ucywgY29uc3QgS1ZNYXAmIGRhdGEpIHsKKyAgICBSZXNldCgpOwor
ICAgIFN0cmluZ1Npbmsgc2luazsKKyAgICBUYWJsZUJ1aWxkZXIgYnVpbGRlcihvcHRpb25zLCAm
c2luayk7CisKKyAgICBmb3IgKEtWTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGRhdGEuYmVnaW4o
KTsKKyAgICAgICAgIGl0ICE9IGRhdGEuZW5kKCk7CisgICAgICAgICArK2l0KSB7CisgICAgICBi
dWlsZGVyLkFkZChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAgQVNTRVJUX1RSVUUoYnVp
bGRlci5zdGF0dXMoKS5vaygpKTsKKyAgICB9CisgICAgU3RhdHVzIHMgPSBidWlsZGVyLkZpbmlz
aCgpOworICAgIEFTU0VSVF9UUlVFKHMub2soKSkgPDwgcy5Ub1N0cmluZygpOworCisgICAgQVNT
RVJUX0VRKHNpbmsuY29udGVudHMoKS5zaXplKCksIGJ1aWxkZXIuRmlsZVNpemUoKSk7CisKKyAg
ICAvLyBPcGVuIHRoZSB0YWJsZQorICAgIHNvdXJjZV8gPSBuZXcgU3RyaW5nU291cmNlKHNpbmsu
Y29udGVudHMoKSk7CisgICAgT3B0aW9ucyB0YWJsZV9vcHRpb25zOworICAgIHRhYmxlX29wdGlv
bnMuY29tcGFyYXRvciA9IG9wdGlvbnMuY29tcGFyYXRvcjsKKyAgICByZXR1cm4gVGFibGU6Ok9w
ZW4odGFibGVfb3B0aW9ucywgc291cmNlXywgc2luay5jb250ZW50cygpLnNpemUoKSwgJnRhYmxl
Xyk7CisgIH0KKworICB2aXJ0dWFsIEl0ZXJhdG9yKiBOZXdJdGVyYXRvcigpIGNvbnN0IHsKKyAg
ICByZXR1cm4gdGFibGVfLT5OZXdJdGVyYXRvcihSZWFkT3B0aW9ucygpKTsKKyAgfQorCisgIHVp
bnQ2NF90IEFwcHJveGltYXRlT2Zmc2V0T2YoY29uc3QgU2xpY2UmIGtleSkgY29uc3QgeworICAg
IHJldHVybiB0YWJsZV8tPkFwcHJveGltYXRlT2Zmc2V0T2Yoa2V5KTsKKyAgfQorCisgcHJpdmF0
ZToKKyAgdm9pZCBSZXNldCgpIHsKKyAgICBkZWxldGUgdGFibGVfOworICAgIGRlbGV0ZSBzb3Vy
Y2VfOworICAgIHRhYmxlXyA9IE5VTEw7CisgICAgc291cmNlXyA9IE5VTEw7CisgIH0KKworICBT
dHJpbmdTb3VyY2UqIHNvdXJjZV87CisgIFRhYmxlKiB0YWJsZV87CisKKyAgVGFibGVDb25zdHJ1
Y3RvcigpOworfTsKKworLy8gQSBoZWxwZXIgY2xhc3MgdGhhdCBjb252ZXJ0cyBpbnRlcm5hbCBm
b3JtYXQga2V5cyBpbnRvIHVzZXIga2V5cworY2xhc3MgS2V5Q29udmVydGluZ0l0ZXJhdG9yOiBw
dWJsaWMgSXRlcmF0b3IgeworIHB1YmxpYzoKKyAgZXhwbGljaXQgS2V5Q29udmVydGluZ0l0ZXJh
dG9yKEl0ZXJhdG9yKiBpdGVyKSA6IGl0ZXJfKGl0ZXIpIHsgfQorICB2aXJ0dWFsIH5LZXlDb252
ZXJ0aW5nSXRlcmF0b3IoKSB7IGRlbGV0ZSBpdGVyXzsgfQorICB2aXJ0dWFsIGJvb2wgVmFsaWQo
KSBjb25zdCB7IHJldHVybiBpdGVyXy0+VmFsaWQoKTsgfQorICB2aXJ0dWFsIHZvaWQgU2Vlayhj
b25zdCBTbGljZSYgdGFyZ2V0KSB7CisgICAgUGFyc2VkSW50ZXJuYWxLZXkgaWtleSh0YXJnZXQs
IGtNYXhTZXF1ZW5jZU51bWJlciwga1R5cGVWYWx1ZSk7CisgICAgc3RkOjpzdHJpbmcgZW5jb2Rl
ZDsKKyAgICBBcHBlbmRJbnRlcm5hbEtleSgmZW5jb2RlZCwgaWtleSk7CisgICAgaXRlcl8tPlNl
ZWsoZW5jb2RlZCk7CisgIH0KKyAgdmlydHVhbCB2b2lkIFNlZWtUb0ZpcnN0KCkgeyBpdGVyXy0+
U2Vla1RvRmlyc3QoKTsgfQorICB2aXJ0dWFsIHZvaWQgU2Vla1RvTGFzdCgpIHsgaXRlcl8tPlNl
ZWtUb0xhc3QoKTsgfQorICB2aXJ0dWFsIHZvaWQgTmV4dCgpIHsgaXRlcl8tPk5leHQoKTsgfQor
ICB2aXJ0dWFsIHZvaWQgUHJldigpIHsgaXRlcl8tPlByZXYoKTsgfQorCisgIHZpcnR1YWwgU2xp
Y2Uga2V5KCkgY29uc3QgeworICAgIGFzc2VydChWYWxpZCgpKTsKKyAgICBQYXJzZWRJbnRlcm5h
bEtleSBrZXk7CisgICAgaWYgKCFQYXJzZUludGVybmFsS2V5KGl0ZXJfLT5rZXkoKSwgJmtleSkp
IHsKKyAgICAgIHN0YXR1c18gPSBTdGF0dXM6OkNvcnJ1cHRpb24oIm1hbGZvcm1lZCBpbnRlcm5h
bCBrZXkiKTsKKyAgICAgIHJldHVybiBTbGljZSgiY29ycnVwdGVkIGtleSIpOworICAgIH0KKyAg
ICByZXR1cm4ga2V5LnVzZXJfa2V5OworICB9CisKKyAgdmlydHVhbCBTbGljZSB2YWx1ZSgpIGNv
bnN0IHsgcmV0dXJuIGl0ZXJfLT52YWx1ZSgpOyB9CisgIHZpcnR1YWwgU3RhdHVzIHN0YXR1cygp
IGNvbnN0IHsKKyAgICByZXR1cm4gc3RhdHVzXy5vaygpID8gaXRlcl8tPnN0YXR1cygpIDogc3Rh
dHVzXzsKKyAgfQorCisgcHJpdmF0ZToKKyAgbXV0YWJsZSBTdGF0dXMgc3RhdHVzXzsKKyAgSXRl
cmF0b3IqIGl0ZXJfOworCisgIC8vIE5vIGNvcHlpbmcgYWxsb3dlZAorICBLZXlDb252ZXJ0aW5n
SXRlcmF0b3IoY29uc3QgS2V5Q29udmVydGluZ0l0ZXJhdG9yJik7CisgIHZvaWQgb3BlcmF0b3I9
KGNvbnN0IEtleUNvbnZlcnRpbmdJdGVyYXRvciYpOworfTsKKworY2xhc3MgTWVtVGFibGVDb25z
dHJ1Y3RvcjogcHVibGljIENvbnN0cnVjdG9yIHsKKyBwdWJsaWM6CisgIGV4cGxpY2l0IE1lbVRh
YmxlQ29uc3RydWN0b3IoY29uc3QgQ29tcGFyYXRvciogY21wKQorICAgICAgOiBDb25zdHJ1Y3Rv
cihjbXApLAorICAgICAgICBpbnRlcm5hbF9jb21wYXJhdG9yXyhjbXApIHsKKyAgICBtZW10YWJs
ZV8gPSBuZXcgTWVtVGFibGUoaW50ZXJuYWxfY29tcGFyYXRvcl8pOworICAgIG1lbXRhYmxlXy0+
UmVmKCk7CisgIH0KKyAgfk1lbVRhYmxlQ29uc3RydWN0b3IoKSB7CisgICAgbWVtdGFibGVfLT5V
bnJlZigpOworICB9CisgIHZpcnR1YWwgU3RhdHVzIEZpbmlzaEltcGwoY29uc3QgT3B0aW9ucyYg
b3B0aW9ucywgY29uc3QgS1ZNYXAmIGRhdGEpIHsKKyAgICBtZW10YWJsZV8tPlVucmVmKCk7Cisg
ICAgbWVtdGFibGVfID0gbmV3IE1lbVRhYmxlKGludGVybmFsX2NvbXBhcmF0b3JfKTsKKyAgICBt
ZW10YWJsZV8tPlJlZigpOworICAgIGludCBzZXEgPSAxOworICAgIGZvciAoS1ZNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gZGF0YS5iZWdpbigpOworICAgICAgICAgaXQgIT0gZGF0YS5lbmQoKTsK
KyAgICAgICAgICsraXQpIHsKKyAgICAgIG1lbXRhYmxlXy0+QWRkKHNlcSwga1R5cGVWYWx1ZSwg
aXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAgIHNlcSsrOworICAgIH0KKyAgICByZXR1cm4g
U3RhdHVzOjpPSygpOworICB9CisgIHZpcnR1YWwgSXRlcmF0b3IqIE5ld0l0ZXJhdG9yKCkgY29u
c3QgeworICAgIHJldHVybiBuZXcgS2V5Q29udmVydGluZ0l0ZXJhdG9yKG1lbXRhYmxlXy0+TmV3
SXRlcmF0b3IoKSk7CisgIH0KKworIHByaXZhdGU6CisgIEludGVybmFsS2V5Q29tcGFyYXRvciBp
bnRlcm5hbF9jb21wYXJhdG9yXzsKKyAgTWVtVGFibGUqIG1lbXRhYmxlXzsKK307CisKK2NsYXNz
IERCQ29uc3RydWN0b3I6IHB1YmxpYyBDb25zdHJ1Y3RvciB7CisgcHVibGljOgorICBleHBsaWNp
dCBEQkNvbnN0cnVjdG9yKGNvbnN0IENvbXBhcmF0b3IqIGNtcCkKKyAgICAgIDogQ29uc3RydWN0
b3IoY21wKSwKKyAgICAgICAgY29tcGFyYXRvcl8oY21wKSB7CisgICAgZGJfID0gTlVMTDsKKyAg
ICBOZXdEQigpOworICB9CisgIH5EQkNvbnN0cnVjdG9yKCkgeworICAgIGRlbGV0ZSBkYl87Cisg
IH0KKyAgdmlydHVhbCBTdGF0dXMgRmluaXNoSW1wbChjb25zdCBPcHRpb25zJiBvcHRpb25zLCBj
b25zdCBLVk1hcCYgZGF0YSkgeworICAgIGRlbGV0ZSBkYl87CisgICAgZGJfID0gTlVMTDsKKyAg
ICBOZXdEQigpOworICAgIGZvciAoS1ZNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZGF0YS5iZWdp
bigpOworICAgICAgICAgaXQgIT0gZGF0YS5lbmQoKTsKKyAgICAgICAgICsraXQpIHsKKyAgICAg
IFdyaXRlQmF0Y2ggYmF0Y2g7CisgICAgICBiYXRjaC5QdXQoaXQtPmZpcnN0LCBpdC0+c2Vjb25k
KTsKKyAgICAgIEFTU0VSVF9UUlVFKGRiXy0+V3JpdGUoV3JpdGVPcHRpb25zKCksICZiYXRjaCku
b2soKSk7CisgICAgfQorICAgIHJldHVybiBTdGF0dXM6Ok9LKCk7CisgIH0KKyAgdmlydHVhbCBJ
dGVyYXRvciogTmV3SXRlcmF0b3IoKSBjb25zdCB7CisgICAgcmV0dXJuIGRiXy0+TmV3SXRlcmF0
b3IoUmVhZE9wdGlvbnMoKSk7CisgIH0KKworICB2aXJ0dWFsIERCKiBkYigpIGNvbnN0IHsgcmV0
dXJuIGRiXzsgfQorCisgcHJpdmF0ZToKKyAgdm9pZCBOZXdEQigpIHsKKyAgICBzdGQ6OnN0cmlu
ZyBuYW1lID0gdGVzdDo6VG1wRGlyKCkgKyAiL3RhYmxlX3Rlc3RkYiI7CisKKyAgICBPcHRpb25z
IG9wdGlvbnM7CisgICAgb3B0aW9ucy5jb21wYXJhdG9yID0gY29tcGFyYXRvcl87CisgICAgU3Rh
dHVzIHN0YXR1cyA9IERlc3Ryb3lEQihuYW1lLCBvcHRpb25zKTsKKyAgICBBU1NFUlRfVFJVRShz
dGF0dXMub2soKSkgPDwgc3RhdHVzLlRvU3RyaW5nKCk7CisKKyAgICBvcHRpb25zLmNyZWF0ZV9p
Zl9taXNzaW5nID0gdHJ1ZTsKKyAgICBvcHRpb25zLmVycm9yX2lmX2V4aXN0cyA9IHRydWU7Cisg
ICAgb3B0aW9ucy53cml0ZV9idWZmZXJfc2l6ZSA9IDEwMDAwOyAgLy8gU29tZXRoaW5nIHNtYWxs
IHRvIGZvcmNlIG1lcmdpbmcKKyAgICBzdGF0dXMgPSBEQjo6T3BlbihvcHRpb25zLCBuYW1lLCAm
ZGJfKTsKKyAgICBBU1NFUlRfVFJVRShzdGF0dXMub2soKSkgPDwgc3RhdHVzLlRvU3RyaW5nKCk7
CisgIH0KKworICBjb25zdCBDb21wYXJhdG9yKiBjb21wYXJhdG9yXzsKKyAgREIqIGRiXzsKK307
CisKK2VudW0gVGVzdFR5cGUgeworICBUQUJMRV9URVNULAorICBCTE9DS19URVNULAorICBNRU1U
QUJMRV9URVNULAorICBEQl9URVNUCit9OworCitzdHJ1Y3QgVGVzdEFyZ3MgeworICBUZXN0VHlw
ZSB0eXBlOworICBib29sIHJldmVyc2VfY29tcGFyZTsKKyAgaW50IHJlc3RhcnRfaW50ZXJ2YWw7
Cit9OworCitzdGF0aWMgY29uc3QgVGVzdEFyZ3Mga1Rlc3RBcmdMaXN0W10gPSB7CisgIHsgVEFC
TEVfVEVTVCwgZmFsc2UsIDE2IH0sCisgIHsgVEFCTEVfVEVTVCwgZmFsc2UsIDEgfSwKKyAgeyBU
QUJMRV9URVNULCBmYWxzZSwgMTAyNCB9LAorICB7IFRBQkxFX1RFU1QsIHRydWUsIDE2IH0sCisg
IHsgVEFCTEVfVEVTVCwgdHJ1ZSwgMSB9LAorICB7IFRBQkxFX1RFU1QsIHRydWUsIDEwMjQgfSwK
KworICB7IEJMT0NLX1RFU1QsIGZhbHNlLCAxNiB9LAorICB7IEJMT0NLX1RFU1QsIGZhbHNlLCAx
IH0sCisgIHsgQkxPQ0tfVEVTVCwgZmFsc2UsIDEwMjQgfSwKKyAgeyBCTE9DS19URVNULCB0cnVl
LCAxNiB9LAorICB7IEJMT0NLX1RFU1QsIHRydWUsIDEgfSwKKyAgeyBCTE9DS19URVNULCB0cnVl
LCAxMDI0IH0sCisKKyAgLy8gUmVzdGFydCBpbnRlcnZhbCBkb2VzIG5vdCBtYXR0ZXIgZm9yIG1l
bXRhYmxlcworICB7IE1FTVRBQkxFX1RFU1QsIGZhbHNlLCAxNiB9LAorICB7IE1FTVRBQkxFX1RF
U1QsIHRydWUsIDE2IH0sCisKKyAgLy8gRG8gbm90IGJvdGhlciB3aXRoIHJlc3RhcnQgaW50ZXJ2
YWwgdmFyaWF0aW9ucyBmb3IgREIKKyAgeyBEQl9URVNULCBmYWxzZSwgMTYgfSwKKyAgeyBEQl9U
RVNULCB0cnVlLCAxNiB9LAorfTsKK3N0YXRpYyBjb25zdCBpbnQga051bVRlc3RBcmdzID0gc2l6
ZW9mKGtUZXN0QXJnTGlzdCkgLyBzaXplb2Yoa1Rlc3RBcmdMaXN0WzBdKTsKKworY2xhc3MgSGFy
bmVzcyB7CisgcHVibGljOgorICBIYXJuZXNzKCkgOiBjb25zdHJ1Y3Rvcl8oTlVMTCkgeyB9CisK
KyAgdm9pZCBJbml0KGNvbnN0IFRlc3RBcmdzJiBhcmdzKSB7CisgICAgZGVsZXRlIGNvbnN0cnVj
dG9yXzsKKyAgICBjb25zdHJ1Y3Rvcl8gPSBOVUxMOworICAgIG9wdGlvbnNfID0gT3B0aW9ucygp
OworCisgICAgb3B0aW9uc18uYmxvY2tfcmVzdGFydF9pbnRlcnZhbCA9IGFyZ3MucmVzdGFydF9p
bnRlcnZhbDsKKyAgICAvLyBVc2Ugc2hvcnRlciBibG9jayBzaXplIGZvciB0ZXN0cyB0byBleGVy
Y2lzZSBibG9jayBib3VuZGFyeQorICAgIC8vIGNvbmRpdGlvbnMgbW9yZS4KKyAgICBvcHRpb25z
Xy5ibG9ja19zaXplID0gMjU2OworICAgIGlmIChhcmdzLnJldmVyc2VfY29tcGFyZSkgeworICAg
ICAgb3B0aW9uc18uY29tcGFyYXRvciA9ICZyZXZlcnNlX2tleV9jb21wYXJhdG9yOworICAgIH0K
KyAgICBzd2l0Y2ggKGFyZ3MudHlwZSkgeworICAgICAgY2FzZSBUQUJMRV9URVNUOgorICAgICAg
ICBjb25zdHJ1Y3Rvcl8gPSBuZXcgVGFibGVDb25zdHJ1Y3RvcihvcHRpb25zXy5jb21wYXJhdG9y
KTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEJMT0NLX1RFU1Q6CisgICAgICAgIGNvbnN0
cnVjdG9yXyA9IG5ldyBCbG9ja0NvbnN0cnVjdG9yKG9wdGlvbnNfLmNvbXBhcmF0b3IpOworICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgTUVNVEFCTEVfVEVTVDoKKyAgICAgICAgY29uc3RydWN0
b3JfID0gbmV3IE1lbVRhYmxlQ29uc3RydWN0b3Iob3B0aW9uc18uY29tcGFyYXRvcik7CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBEQl9URVNUOgorICAgICAgICBjb25zdHJ1Y3Rvcl8gPSBu
ZXcgREJDb25zdHJ1Y3RvcihvcHRpb25zXy5jb21wYXJhdG9yKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICB9CisKKyAgfkhhcm5lc3MoKSB7CisgICAgZGVsZXRlIGNvbnN0cnVjdG9yXzsKKyAg
fQorCisgIHZvaWQgQWRkKGNvbnN0IHN0ZDo6c3RyaW5nJiBrZXksIGNvbnN0IHN0ZDo6c3RyaW5n
JiB2YWx1ZSkgeworICAgIGNvbnN0cnVjdG9yXy0+QWRkKGtleSwgdmFsdWUpOworICB9CisKKyAg
dm9pZCBUZXN0KFJhbmRvbSogcm5kKSB7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGtl
eXM7CisgICAgS1ZNYXAgZGF0YTsKKyAgICBjb25zdHJ1Y3Rvcl8tPkZpbmlzaChvcHRpb25zXywg
JmtleXMsICZkYXRhKTsKKworICAgIFRlc3RGb3J3YXJkU2NhbihrZXlzLCBkYXRhKTsKKyAgICBU
ZXN0QmFja3dhcmRTY2FuKGtleXMsIGRhdGEpOworICAgIFRlc3RSYW5kb21BY2Nlc3Mocm5kLCBr
ZXlzLCBkYXRhKTsKKyAgfQorCisgIHZvaWQgVGVzdEZvcndhcmRTY2FuKGNvbnN0IHN0ZDo6dmVj
dG9yPHN0ZDo6c3RyaW5nPiYga2V5cywKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgS1ZN
YXAmIGRhdGEpIHsKKyAgICBJdGVyYXRvciogaXRlciA9IGNvbnN0cnVjdG9yXy0+TmV3SXRlcmF0
b3IoKTsKKyAgICBBU1NFUlRfVFJVRSghaXRlci0+VmFsaWQoKSk7CisgICAgaXRlci0+U2Vla1Rv
Rmlyc3QoKTsKKyAgICBmb3IgKEtWTWFwOjpjb25zdF9pdGVyYXRvciBtb2RlbF9pdGVyID0gZGF0
YS5iZWdpbigpOworICAgICAgICAgbW9kZWxfaXRlciAhPSBkYXRhLmVuZCgpOworICAgICAgICAg
Kyttb2RlbF9pdGVyKSB7CisgICAgICBBU1NFUlRfRVEoVG9TdHJpbmcoZGF0YSwgbW9kZWxfaXRl
ciksIFRvU3RyaW5nKGl0ZXIpKTsKKyAgICAgIGl0ZXItPk5leHQoKTsKKyAgICB9CisgICAgQVNT
RVJUX1RSVUUoIWl0ZXItPlZhbGlkKCkpOworICAgIGRlbGV0ZSBpdGVyOworICB9CisKKyAgdm9p
ZCBUZXN0QmFja3dhcmRTY2FuKGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYga2V5cywK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEtWTWFwJiBkYXRhKSB7CisgICAgSXRlcmF0
b3IqIGl0ZXIgPSBjb25zdHJ1Y3Rvcl8tPk5ld0l0ZXJhdG9yKCk7CisgICAgQVNTRVJUX1RSVUUo
IWl0ZXItPlZhbGlkKCkpOworICAgIGl0ZXItPlNlZWtUb0xhc3QoKTsKKyAgICBmb3IgKEtWTWFw
Ojpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIG1vZGVsX2l0ZXIgPSBkYXRhLnJiZWdpbigpOworICAg
ICAgICAgbW9kZWxfaXRlciAhPSBkYXRhLnJlbmQoKTsKKyAgICAgICAgICsrbW9kZWxfaXRlcikg
eworICAgICAgQVNTRVJUX0VRKFRvU3RyaW5nKGRhdGEsIG1vZGVsX2l0ZXIpLCBUb1N0cmluZyhp
dGVyKSk7CisgICAgICBpdGVyLT5QcmV2KCk7CisgICAgfQorICAgIEFTU0VSVF9UUlVFKCFpdGVy
LT5WYWxpZCgpKTsKKyAgICBkZWxldGUgaXRlcjsKKyAgfQorCisgIHZvaWQgVGVzdFJhbmRvbUFj
Y2VzcyhSYW5kb20qIHJuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVj
dG9yPHN0ZDo6c3RyaW5nPiYga2V5cywKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEtW
TWFwJiBkYXRhKSB7CisgICAgc3RhdGljIGNvbnN0IGJvb2wga1ZlcmJvc2UgPSBmYWxzZTsKKyAg
ICBJdGVyYXRvciogaXRlciA9IGNvbnN0cnVjdG9yXy0+TmV3SXRlcmF0b3IoKTsKKyAgICBBU1NF
UlRfVFJVRSghaXRlci0+VmFsaWQoKSk7CisgICAgS1ZNYXA6OmNvbnN0X2l0ZXJhdG9yIG1vZGVs
X2l0ZXIgPSBkYXRhLmJlZ2luKCk7CisgICAgaWYgKGtWZXJib3NlKSBmcHJpbnRmKHN0ZGVyciwg
Ii0tLVxuIik7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyMDA7IGkrKykgeworICAgICAgY29u
c3QgaW50IHRvc3MgPSBybmQtPlVuaWZvcm0oNSk7CisgICAgICBzd2l0Y2ggKHRvc3MpIHsKKyAg
ICAgICAgY2FzZSAwOiB7CisgICAgICAgICAgaWYgKGl0ZXItPlZhbGlkKCkpIHsKKyAgICAgICAg
ICAgIGlmIChrVmVyYm9zZSkgZnByaW50ZihzdGRlcnIsICJOZXh0XG4iKTsKKyAgICAgICAgICAg
IGl0ZXItPk5leHQoKTsKKyAgICAgICAgICAgICsrbW9kZWxfaXRlcjsKKyAgICAgICAgICAgIEFT
U0VSVF9FUShUb1N0cmluZyhkYXRhLCBtb2RlbF9pdGVyKSwgVG9TdHJpbmcoaXRlcikpOworICAg
ICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgMTog
eworICAgICAgICAgIGlmIChrVmVyYm9zZSkgZnByaW50ZihzdGRlcnIsICJTZWVrVG9GaXJzdFxu
Iik7CisgICAgICAgICAgaXRlci0+U2Vla1RvRmlyc3QoKTsKKyAgICAgICAgICBtb2RlbF9pdGVy
ID0gZGF0YS5iZWdpbigpOworICAgICAgICAgIEFTU0VSVF9FUShUb1N0cmluZyhkYXRhLCBtb2Rl
bF9pdGVyKSwgVG9TdHJpbmcoaXRlcikpOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgY2FzZSAyOiB7CisgICAgICAgICAgc3RkOjpzdHJpbmcga2V5ID0gUGlja1JhbmRv
bUtleShybmQsIGtleXMpOworICAgICAgICAgIG1vZGVsX2l0ZXIgPSBkYXRhLmxvd2VyX2JvdW5k
KGtleSk7CisgICAgICAgICAgaWYgKGtWZXJib3NlKSBmcHJpbnRmKHN0ZGVyciwgIlNlZWsgJyVz
J1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXNjYXBlU3RyaW5nKGtleSku
Y19zdHIoKSk7CisgICAgICAgICAgaXRlci0+U2VlayhTbGljZShrZXkpKTsKKyAgICAgICAgICBB
U1NFUlRfRVEoVG9TdHJpbmcoZGF0YSwgbW9kZWxfaXRlciksIFRvU3RyaW5nKGl0ZXIpKTsKKyAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgMzogeworICAgICAgICAg
IGlmIChpdGVyLT5WYWxpZCgpKSB7CisgICAgICAgICAgICBpZiAoa1ZlcmJvc2UpIGZwcmludGYo
c3RkZXJyLCAiUHJldlxuIik7CisgICAgICAgICAgICBpdGVyLT5QcmV2KCk7CisgICAgICAgICAg
ICBpZiAobW9kZWxfaXRlciA9PSBkYXRhLmJlZ2luKCkpIHsKKyAgICAgICAgICAgICAgbW9kZWxf
aXRlciA9IGRhdGEuZW5kKCk7ICAgLy8gV3JhcCBhcm91bmQgdG8gaW52YWxpZCB2YWx1ZQorICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgLS1tb2RlbF9pdGVyOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgQVNTRVJUX0VRKFRvU3RyaW5nKGRhdGEsIG1vZGVsX2l0ZXIpLCBU
b1N0cmluZyhpdGVyKSk7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisKKyAgICAgICAgY2FzZSA0OiB7CisgICAgICAgICAgaWYgKGtWZXJib3NlKSBmcHJpbnRmKHN0
ZGVyciwgIlNlZWtUb0xhc3RcbiIpOworICAgICAgICAgIGl0ZXItPlNlZWtUb0xhc3QoKTsKKyAg
ICAgICAgICBpZiAoa2V5cy5lbXB0eSgpKSB7CisgICAgICAgICAgICBtb2RlbF9pdGVyID0gZGF0
YS5lbmQoKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3RkOjpzdHJpbmcgbGFz
dCA9IGRhdGEucmJlZ2luKCktPmZpcnN0OworICAgICAgICAgICAgbW9kZWxfaXRlciA9IGRhdGEu
bG93ZXJfYm91bmQobGFzdCk7CisgICAgICAgICAgfQorICAgICAgICAgIEFTU0VSVF9FUShUb1N0
cmluZyhkYXRhLCBtb2RlbF9pdGVyKSwgVG9TdHJpbmcoaXRlcikpOworICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIGRlbGV0ZSBpdGVyOworICB9CisKKyAg
c3RkOjpzdHJpbmcgVG9TdHJpbmcoY29uc3QgS1ZNYXAmIGRhdGEsIGNvbnN0IEtWTWFwOjpjb25z
dF9pdGVyYXRvciYgaXQpIHsKKyAgICBpZiAoaXQgPT0gZGF0YS5lbmQoKSkgeworICAgICAgcmV0
dXJuICJFTkQiOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gIiciICsgaXQtPmZpcnN0ICsg
Ii0+IiArIGl0LT5zZWNvbmQgKyAiJyI7CisgICAgfQorICB9CisKKyAgc3RkOjpzdHJpbmcgVG9T
dHJpbmcoY29uc3QgS1ZNYXAmIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEtW
TWFwOjpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yJiBpdCkgeworICAgIGlmIChpdCA9PSBkYXRhLnJl
bmQoKSkgeworICAgICAgcmV0dXJuICJFTkQiOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4g
IiciICsgaXQtPmZpcnN0ICsgIi0+IiArIGl0LT5zZWNvbmQgKyAiJyI7CisgICAgfQorICB9CisK
KyAgc3RkOjpzdHJpbmcgVG9TdHJpbmcoY29uc3QgSXRlcmF0b3IqIGl0KSB7CisgICAgaWYgKCFp
dC0+VmFsaWQoKSkgeworICAgICAgcmV0dXJuICJFTkQiOworICAgIH0gZWxzZSB7CisgICAgICBy
ZXR1cm4gIiciICsgaXQtPmtleSgpLlRvU3RyaW5nKCkgKyAiLT4iICsgaXQtPnZhbHVlKCkuVG9T
dHJpbmcoKSArICInIjsKKyAgICB9CisgIH0KKworICBzdGQ6OnN0cmluZyBQaWNrUmFuZG9tS2V5
KFJhbmRvbSogcm5kLCBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIGtleXMpIHsKKyAg
ICBpZiAoa2V5cy5lbXB0eSgpKSB7CisgICAgICByZXR1cm4gImZvbyI7CisgICAgfSBlbHNlIHsK
KyAgICAgIGNvbnN0IGludCBpbmRleCA9IHJuZC0+VW5pZm9ybShrZXlzLnNpemUoKSk7CisgICAg
ICBzdGQ6OnN0cmluZyByZXN1bHQgPSBrZXlzW2luZGV4XTsKKyAgICAgIHN3aXRjaCAocm5kLT5V
bmlmb3JtKDMpKSB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAvLyBSZXR1cm4gYW4gZXhp
c3Rpbmcga2V5CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMTogeworICAgICAgICAg
IC8vIEF0dGVtcHQgdG8gcmV0dXJuIHNvbWV0aGluZyBzbWFsbGVyIHRoYW4gYW4gZXhpc3Rpbmcg
a2V5CisgICAgICAgICAgaWYgKHJlc3VsdC5zaXplKCkgPiAwICYmIHJlc3VsdFtyZXN1bHQuc2l6
ZSgpLTFdID4gJ1wwJykgeworICAgICAgICAgICAgcmVzdWx0W3Jlc3VsdC5zaXplKCktMV0tLTsK
KyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSAy
OiB7CisgICAgICAgICAgLy8gUmV0dXJuIHNvbWV0aGluZyBsYXJnZXIgdGhhbiBhbiBleGlzdGlu
ZyBrZXkKKyAgICAgICAgICBJbmNyZW1lbnQob3B0aW9uc18uY29tcGFyYXRvciwgJnJlc3VsdCk7
CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorICB9CisKKyAgLy8gUmV0dXJucyBOVUxMIGlmIG5vdCBydW5uaW5nIGFnYWlu
c3QgYSBEQgorICBEQiogZGIoKSBjb25zdCB7IHJldHVybiBjb25zdHJ1Y3Rvcl8tPmRiKCk7IH0K
KworIHByaXZhdGU6CisgIE9wdGlvbnMgb3B0aW9uc187CisgIENvbnN0cnVjdG9yKiBjb25zdHJ1
Y3Rvcl87Cit9OworCisvLyBUZXN0IHRoZSBlbXB0eSBrZXkKK1RFU1QoSGFybmVzcywgU2ltcGxl
RW1wdHlLZXkpIHsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBrTnVtVGVzdEFyZ3M7IGkrKykgewor
ICAgIEluaXQoa1Rlc3RBcmdMaXN0W2ldKTsKKyAgICBSYW5kb20gcm5kKHRlc3Q6OlJhbmRvbVNl
ZWQoKSArIDEpOworICAgIEFkZCgiIiwgInYiKTsKKyAgICBUZXN0KCZybmQpOworICB9Cit9CisK
K1RFU1QoSGFybmVzcywgU2ltcGxlU2luZ2xlKSB7CisgIGZvciAoaW50IGkgPSAwOyBpIDwga051
bVRlc3RBcmdzOyBpKyspIHsKKyAgICBJbml0KGtUZXN0QXJnTGlzdFtpXSk7CisgICAgUmFuZG9t
IHJuZCh0ZXN0OjpSYW5kb21TZWVkKCkgKyAyKTsKKyAgICBBZGQoImFiYyIsICJ2Iik7CisgICAg
VGVzdCgmcm5kKTsKKyAgfQorfQorCitURVNUKEhhcm5lc3MsIFNpbXBsZU11bHRpKSB7CisgIGZv
ciAoaW50IGkgPSAwOyBpIDwga051bVRlc3RBcmdzOyBpKyspIHsKKyAgICBJbml0KGtUZXN0QXJn
TGlzdFtpXSk7CisgICAgUmFuZG9tIHJuZCh0ZXN0OjpSYW5kb21TZWVkKCkgKyAzKTsKKyAgICBB
ZGQoImFiYyIsICJ2Iik7CisgICAgQWRkKCJhYmNkIiwgInYiKTsKKyAgICBBZGQoImFjIiwgInYy
Iik7CisgICAgVGVzdCgmcm5kKTsKKyAgfQorfQorCitURVNUKEhhcm5lc3MsIFNpbXBsZVNwZWNp
YWxLZXkpIHsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBrTnVtVGVzdEFyZ3M7IGkrKykgeworICAg
IEluaXQoa1Rlc3RBcmdMaXN0W2ldKTsKKyAgICBSYW5kb20gcm5kKHRlc3Q6OlJhbmRvbVNlZWQo
KSArIDQpOworICAgIEFkZCgiXHhmZlx4ZmYiLCAidjMiKTsKKyAgICBUZXN0KCZybmQpOworICB9
Cit9CisKK1RFU1QoSGFybmVzcywgUmFuZG9taXplZCkgeworICBmb3IgKGludCBpID0gMDsgaSA8
IGtOdW1UZXN0QXJnczsgaSsrKSB7CisgICAgSW5pdChrVGVzdEFyZ0xpc3RbaV0pOworICAgIFJh
bmRvbSBybmQodGVzdDo6UmFuZG9tU2VlZCgpICsgNSk7CisgICAgZm9yIChpbnQgbnVtX2VudHJp
ZXMgPSAwOyBudW1fZW50cmllcyA8IDIwMDA7CisgICAgICAgICBudW1fZW50cmllcyArPSAobnVt
X2VudHJpZXMgPCA1MCA/IDEgOiAyMDApKSB7CisgICAgICBpZiAoKG51bV9lbnRyaWVzICUgMTAp
ID09IDApIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJjYXNlICVkIG9mICVkOiBudW1fZW50
cmllcyA9ICVkXG4iLAorICAgICAgICAgICAgICAgIChpICsgMSksIGludChrTnVtVGVzdEFyZ3Mp
LCBudW1fZW50cmllcyk7CisgICAgICB9CisgICAgICBmb3IgKGludCBlID0gMDsgZSA8IG51bV9l
bnRyaWVzOyBlKyspIHsKKyAgICAgICAgc3RkOjpzdHJpbmcgdjsKKyAgICAgICAgQWRkKHRlc3Q6
OlJhbmRvbUtleSgmcm5kLCBybmQuU2tld2VkKDQpKSwKKyAgICAgICAgICAgIHRlc3Q6OlJhbmRv
bVN0cmluZygmcm5kLCBybmQuU2tld2VkKDUpLCAmdikuVG9TdHJpbmcoKSk7CisgICAgICB9Cisg
ICAgICBUZXN0KCZybmQpOworICAgIH0KKyAgfQorfQorCitURVNUKEhhcm5lc3MsIFJhbmRvbWl6
ZWRMb25nREIpIHsKKyAgUmFuZG9tIHJuZCh0ZXN0OjpSYW5kb21TZWVkKCkpOworICBUZXN0QXJn
cyBhcmdzID0geyBEQl9URVNULCBmYWxzZSwgMTYgfTsKKyAgSW5pdChhcmdzKTsKKyAgaW50IG51
bV9lbnRyaWVzID0gMTAwMDAwOworICBmb3IgKGludCBlID0gMDsgZSA8IG51bV9lbnRyaWVzOyBl
KyspIHsKKyAgICBzdGQ6OnN0cmluZyB2OworICAgIEFkZCh0ZXN0OjpSYW5kb21LZXkoJnJuZCwg
cm5kLlNrZXdlZCg0KSksCisgICAgICAgIHRlc3Q6OlJhbmRvbVN0cmluZygmcm5kLCBybmQuU2tl
d2VkKDUpLCAmdikuVG9TdHJpbmcoKSk7CisgIH0KKyAgVGVzdCgmcm5kKTsKKworICAvLyBXZSBt
dXN0IGhhdmUgY3JlYXRlZCBlbm91Z2ggZGF0YSB0byBmb3JjZSBtZXJnaW5nCisgIGludCBmaWxl
cyA9IDA7CisgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBjb25maWc6OmtOdW1MZXZlbHM7
IGxldmVsKyspIHsKKyAgICBzdGQ6OnN0cmluZyB2YWx1ZTsKKyAgICBjaGFyIG5hbWVbMTAwXTsK
KyAgICBzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJsZXZlbGRiLm51bS1maWxlcy1hdC1s
ZXZlbCVkIiwgbGV2ZWwpOworICAgIEFTU0VSVF9UUlVFKGRiKCktPkdldFByb3BlcnR5KG5hbWUs
ICZ2YWx1ZSkpOworICAgIGZpbGVzICs9IGF0b2kodmFsdWUuY19zdHIoKSk7CisgIH0KKyAgQVNT
RVJUX0dUKGZpbGVzLCAwKTsKK30KKworY2xhc3MgTWVtVGFibGVUZXN0IHsgfTsKKworVEVTVChN
ZW1UYWJsZVRlc3QsIFNpbXBsZSkgeworICBJbnRlcm5hbEtleUNvbXBhcmF0b3IgY21wKEJ5dGV3
aXNlQ29tcGFyYXRvcigpKTsKKyAgTWVtVGFibGUqIG1lbXRhYmxlID0gbmV3IE1lbVRhYmxlKGNt
cCk7CisgIG1lbXRhYmxlLT5SZWYoKTsKKyAgV3JpdGVCYXRjaCBiYXRjaDsKKyAgV3JpdGVCYXRj
aEludGVybmFsOjpTZXRTZXF1ZW5jZSgmYmF0Y2gsIDEwMCk7CisgIGJhdGNoLlB1dChzdGQ6OnN0
cmluZygiazEiKSwgc3RkOjpzdHJpbmcoInYxIikpOworICBiYXRjaC5QdXQoc3RkOjpzdHJpbmco
ImsyIiksIHN0ZDo6c3RyaW5nKCJ2MiIpKTsKKyAgYmF0Y2guUHV0KHN0ZDo6c3RyaW5nKCJrMyIp
LCBzdGQ6OnN0cmluZygidjMiKSk7CisgIGJhdGNoLlB1dChzdGQ6OnN0cmluZygibGFyZ2VrZXki
KSwgc3RkOjpzdHJpbmcoInZsYXJnZSIpKTsKKyAgQVNTRVJUX1RSVUUoV3JpdGVCYXRjaEludGVy
bmFsOjpJbnNlcnRJbnRvKCZiYXRjaCwgbWVtdGFibGUpLm9rKCkpOworCisgIEl0ZXJhdG9yKiBp
dGVyID0gbWVtdGFibGUtPk5ld0l0ZXJhdG9yKCk7CisgIGl0ZXItPlNlZWtUb0ZpcnN0KCk7Cisg
IHdoaWxlIChpdGVyLT5WYWxpZCgpKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJrZXk6ICclcycg
LT4gJyVzJ1xuIiwKKyAgICAgICAgICAgIGl0ZXItPmtleSgpLlRvU3RyaW5nKCkuY19zdHIoKSwK
KyAgICAgICAgICAgIGl0ZXItPnZhbHVlKCkuVG9TdHJpbmcoKS5jX3N0cigpKTsKKyAgICBpdGVy
LT5OZXh0KCk7CisgIH0KKworICBkZWxldGUgaXRlcjsKKyAgbWVtdGFibGUtPlVucmVmKCk7Cit9
CisKK3N0YXRpYyBib29sIEJldHdlZW4odWludDY0X3QgdmFsLCB1aW50NjRfdCBsb3csIHVpbnQ2
NF90IGhpZ2gpIHsKKyAgYm9vbCByZXN1bHQgPSAodmFsID49IGxvdykgJiYgKHZhbCA8PSBoaWdo
KTsKKyAgaWYgKCFyZXN1bHQpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlZhbHVlICVsbHUgaXMg
bm90IGluIHJhbmdlIFslbGx1LCAlbGx1XVxuIiwKKyAgICAgICAgICAgICh1bnNpZ25lZCBsb25n
IGxvbmcpKHZhbCksCisgICAgICAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKShsb3cpLAorICAg
ICAgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykoaGlnaCkpOworICB9CisgIHJldHVybiByZXN1
bHQ7Cit9CisKK2NsYXNzIFRhYmxlVGVzdCB7IH07CisKK1RFU1QoVGFibGVUZXN0LCBBcHByb3hp
bWF0ZU9mZnNldE9mUGxhaW4pIHsKKyAgVGFibGVDb25zdHJ1Y3RvciBjKEJ5dGV3aXNlQ29tcGFy
YXRvcigpKTsKKyAgYy5BZGQoImswMSIsICJoZWxsbyIpOworICBjLkFkZCgiazAyIiwgImhlbGxv
MiIpOworICBjLkFkZCgiazAzIiwgc3RkOjpzdHJpbmcoMTAwMDAsICd4JykpOworICBjLkFkZCgi
azA0Iiwgc3RkOjpzdHJpbmcoMjAwMDAwLCAneCcpKTsKKyAgYy5BZGQoImswNSIsIHN0ZDo6c3Ry
aW5nKDMwMDAwMCwgJ3gnKSk7CisgIGMuQWRkKCJrMDYiLCAiaGVsbG8zIik7CisgIGMuQWRkKCJr
MDciLCBzdGQ6OnN0cmluZygxMDAwMDAsICd4JykpOworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmlu
Zz4ga2V5czsKKyAgS1ZNYXAga3ZtYXA7CisgIE9wdGlvbnMgb3B0aW9uczsKKyAgb3B0aW9ucy5i
bG9ja19zaXplID0gMTAyNDsKKyAgb3B0aW9ucy5jb21wcmVzc2lvbiA9IGtOb0NvbXByZXNzaW9u
OworICBjLkZpbmlzaChvcHRpb25zLCAma2V5cywgJmt2bWFwKTsKKworICBBU1NFUlRfVFJVRShC
ZXR3ZWVuKGMuQXBwcm94aW1hdGVPZmZzZXRPZigiYWJjIiksICAgICAgIDAsICAgICAgMCkpOwor
ICBBU1NFUlRfVFJVRShCZXR3ZWVuKGMuQXBwcm94aW1hdGVPZmZzZXRPZigiazAxIiksICAgICAg
IDAsICAgICAgMCkpOworICBBU1NFUlRfVFJVRShCZXR3ZWVuKGMuQXBwcm94aW1hdGVPZmZzZXRP
ZigiazAxYSIpLCAgICAgIDAsICAgICAgMCkpOworICBBU1NFUlRfVFJVRShCZXR3ZWVuKGMuQXBw
cm94aW1hdGVPZmZzZXRPZigiazAyIiksICAgICAgIDAsICAgICAgMCkpOworICBBU1NFUlRfVFJV
RShCZXR3ZWVuKGMuQXBwcm94aW1hdGVPZmZzZXRPZigiazAzIiksICAgICAgIDAsICAgICAgMCkp
OworICBBU1NFUlRfVFJVRShCZXR3ZWVuKGMuQXBwcm94aW1hdGVPZmZzZXRPZigiazA0IiksICAg
MTAwMDAsICAxMTAwMCkpOworICBBU1NFUlRfVFJVRShCZXR3ZWVuKGMuQXBwcm94aW1hdGVPZmZz
ZXRPZigiazA0YSIpLCAyMTAwMDAsIDIxMTAwMCkpOworICBBU1NFUlRfVFJVRShCZXR3ZWVuKGMu
QXBwcm94aW1hdGVPZmZzZXRPZigiazA1IiksICAyMTAwMDAsIDIxMTAwMCkpOworICBBU1NFUlRf
VFJVRShCZXR3ZWVuKGMuQXBwcm94aW1hdGVPZmZzZXRPZigiazA2IiksICA1MTAwMDAsIDUxMTAw
MCkpOworICBBU1NFUlRfVFJVRShCZXR3ZWVuKGMuQXBwcm94aW1hdGVPZmZzZXRPZigiazA3Iiks
ICA1MTAwMDAsIDUxMTAwMCkpOworICBBU1NFUlRfVFJVRShCZXR3ZWVuKGMuQXBwcm94aW1hdGVP
ZmZzZXRPZigieHl6IiksICA2MTAwMDAsIDYxMjAwMCkpOworCit9CisKK3N0YXRpYyBib29sIFNu
YXBweUNvbXByZXNzaW9uU3VwcG9ydGVkKCkgeworICBzdGQ6OnN0cmluZyBvdXQ7CisgIFNsaWNl
IGluID0gImFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEiOworICByZXR1cm4gcG9ydDo6
U25hcHB5X0NvbXByZXNzKGluLmRhdGEoKSwgaW4uc2l6ZSgpLCAmb3V0KTsKK30KKworVEVTVChU
YWJsZVRlc3QsIEFwcHJveGltYXRlT2Zmc2V0T2ZDb21wcmVzc2VkKSB7CisgIGlmICghU25hcHB5
Q29tcHJlc3Npb25TdXBwb3J0ZWQoKSkgeworICAgIGZwcmludGYoc3RkZXJyLCAic2tpcHBpbmcg
Y29tcHJlc3Npb24gdGVzdHNcbiIpOworICAgIHJldHVybjsKKyAgfQorCisgIFJhbmRvbSBybmQo
MzAxKTsKKyAgVGFibGVDb25zdHJ1Y3RvciBjKEJ5dGV3aXNlQ29tcGFyYXRvcigpKTsKKyAgc3Rk
OjpzdHJpbmcgdG1wOworICBjLkFkZCgiazAxIiwgImhlbGxvIik7CisgIGMuQWRkKCJrMDIiLCB0
ZXN0OjpDb21wcmVzc2libGVTdHJpbmcoJnJuZCwgMC4yNSwgMTAwMDAsICZ0bXApKTsKKyAgYy5B
ZGQoImswMyIsICJoZWxsbzMiKTsKKyAgYy5BZGQoImswNCIsIHRlc3Q6OkNvbXByZXNzaWJsZVN0
cmluZygmcm5kLCAwLjI1LCAxMDAwMCwgJnRtcCkpOworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmlu
Zz4ga2V5czsKKyAgS1ZNYXAga3ZtYXA7CisgIE9wdGlvbnMgb3B0aW9uczsKKyAgb3B0aW9ucy5i
bG9ja19zaXplID0gMTAyNDsKKyAgb3B0aW9ucy5jb21wcmVzc2lvbiA9IGtTbmFwcHlDb21wcmVz
c2lvbjsKKyAgYy5GaW5pc2gob3B0aW9ucywgJmtleXMsICZrdm1hcCk7CisKKyAgQVNTRVJUX1RS
VUUoQmV0d2VlbihjLkFwcHJveGltYXRlT2Zmc2V0T2YoImFiYyIpLCAgICAgICAwLCAgICAgIDAp
KTsKKyAgQVNTRVJUX1RSVUUoQmV0d2VlbihjLkFwcHJveGltYXRlT2Zmc2V0T2YoImswMSIpLCAg
ICAgICAwLCAgICAgIDApKTsKKyAgQVNTRVJUX1RSVUUoQmV0d2VlbihjLkFwcHJveGltYXRlT2Zm
c2V0T2YoImswMiIpLCAgICAgICAwLCAgICAgIDApKTsKKyAgQVNTRVJUX1RSVUUoQmV0d2Vlbihj
LkFwcHJveGltYXRlT2Zmc2V0T2YoImswMyIpLCAgICAyMDAwLCAgIDMwMDApKTsKKyAgQVNTRVJU
X1RSVUUoQmV0d2VlbihjLkFwcHJveGltYXRlT2Zmc2V0T2YoImswNCIpLCAgICAyMDAwLCAgIDMw
MDApKTsKKyAgQVNTRVJUX1RSVUUoQmV0d2VlbihjLkFwcHJveGltYXRlT2Zmc2V0T2YoInh5eiIp
LCAgICA0MDAwLCAgIDYwMDApKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKKworaW50
IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KSB7CisgIHJldHVybiBsZXZlbGRiOjp0ZXN0OjpS
dW5BbGxUZXN0cygpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi90
YWJsZS90d29fbGV2ZWxfaXRlcmF0b3IuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3Rh
YmxlL3R3b19sZXZlbF9pdGVyYXRvci5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ODIyZWJhYjljMzJjZTU3OWM0
MmY5NjIxNTQ1ZDcyODNlODMzMmI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvbGV2ZWxkYi90YWJsZS90d29fbGV2ZWxfaXRlcmF0b3IuY2MKQEAgLTAsMCArMSwxODIgQEAK
Ky8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4g
U2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2luY2x1
ZGUgInRhYmxlL3R3b19sZXZlbF9pdGVyYXRvci5oIgorCisjaW5jbHVkZSAibGV2ZWxkYi90YWJs
ZS5oIgorI2luY2x1ZGUgInRhYmxlL2Jsb2NrLmgiCisjaW5jbHVkZSAidGFibGUvZm9ybWF0Lmgi
CisjaW5jbHVkZSAidGFibGUvaXRlcmF0b3Jfd3JhcHBlci5oIgorCituYW1lc3BhY2UgbGV2ZWxk
YiB7CisKK25hbWVzcGFjZSB7CisKK3R5cGVkZWYgSXRlcmF0b3IqICgqQmxvY2tGdW5jdGlvbiko
dm9pZCosIGNvbnN0IFJlYWRPcHRpb25zJiwgY29uc3QgU2xpY2UmKTsKKworY2xhc3MgVHdvTGV2
ZWxJdGVyYXRvcjogcHVibGljIEl0ZXJhdG9yIHsKKyBwdWJsaWM6CisgIFR3b0xldmVsSXRlcmF0
b3IoCisgICAgSXRlcmF0b3IqIGluZGV4X2l0ZXIsCisgICAgQmxvY2tGdW5jdGlvbiBibG9ja19m
dW5jdGlvbiwKKyAgICB2b2lkKiBhcmcsCisgICAgY29uc3QgUmVhZE9wdGlvbnMmIG9wdGlvbnMp
OworCisgIHZpcnR1YWwgflR3b0xldmVsSXRlcmF0b3IoKTsKKworICB2aXJ0dWFsIHZvaWQgU2Vl
ayhjb25zdCBTbGljZSYgdGFyZ2V0KTsKKyAgdmlydHVhbCB2b2lkIFNlZWtUb0ZpcnN0KCk7Cisg
IHZpcnR1YWwgdm9pZCBTZWVrVG9MYXN0KCk7CisgIHZpcnR1YWwgdm9pZCBOZXh0KCk7CisgIHZp
cnR1YWwgdm9pZCBQcmV2KCk7CisKKyAgdmlydHVhbCBib29sIFZhbGlkKCkgY29uc3QgeworICAg
IHJldHVybiBkYXRhX2l0ZXJfLlZhbGlkKCk7CisgIH0KKyAgdmlydHVhbCBTbGljZSBrZXkoKSBj
b25zdCB7CisgICAgYXNzZXJ0KFZhbGlkKCkpOworICAgIHJldHVybiBkYXRhX2l0ZXJfLmtleSgp
OworICB9CisgIHZpcnR1YWwgU2xpY2UgdmFsdWUoKSBjb25zdCB7CisgICAgYXNzZXJ0KFZhbGlk
KCkpOworICAgIHJldHVybiBkYXRhX2l0ZXJfLnZhbHVlKCk7CisgIH0KKyAgdmlydHVhbCBTdGF0
dXMgc3RhdHVzKCkgY29uc3QgeworICAgIC8vIEl0J2QgYmUgbmljZSBpZiBzdGF0dXMoKSByZXR1
cm5lZCBhIGNvbnN0IFN0YXR1cyYgaW5zdGVhZCBvZiBhIFN0YXR1cworICAgIGlmICghaW5kZXhf
aXRlcl8uc3RhdHVzKCkub2soKSkgeworICAgICAgcmV0dXJuIGluZGV4X2l0ZXJfLnN0YXR1cygp
OworICAgIH0gZWxzZSBpZiAoZGF0YV9pdGVyXy5pdGVyKCkgIT0gTlVMTCAmJiAhZGF0YV9pdGVy
Xy5zdGF0dXMoKS5vaygpKSB7CisgICAgICByZXR1cm4gZGF0YV9pdGVyXy5zdGF0dXMoKTsKKyAg
ICB9IGVsc2UgeworICAgICAgcmV0dXJuIHN0YXR1c187CisgICAgfQorICB9CisKKyBwcml2YXRl
OgorICB2b2lkIFNhdmVFcnJvcihjb25zdCBTdGF0dXMmIHMpIHsKKyAgICBpZiAoc3RhdHVzXy5v
aygpICYmICFzLm9rKCkpIHN0YXR1c18gPSBzOworICB9CisgIHZvaWQgU2tpcEVtcHR5RGF0YUJs
b2Nrc0ZvcndhcmQoKTsKKyAgdm9pZCBTa2lwRW1wdHlEYXRhQmxvY2tzQmFja3dhcmQoKTsKKyAg
dm9pZCBTZXREYXRhSXRlcmF0b3IoSXRlcmF0b3IqIGRhdGFfaXRlcik7CisgIHZvaWQgSW5pdERh
dGFCbG9jaygpOworCisgIEJsb2NrRnVuY3Rpb24gYmxvY2tfZnVuY3Rpb25fOworICB2b2lkKiBh
cmdfOworICBjb25zdCBSZWFkT3B0aW9ucyBvcHRpb25zXzsKKyAgU3RhdHVzIHN0YXR1c187Cisg
IEl0ZXJhdG9yV3JhcHBlciBpbmRleF9pdGVyXzsKKyAgSXRlcmF0b3JXcmFwcGVyIGRhdGFfaXRl
cl87IC8vIE1heSBiZSBOVUxMCisgIC8vIElmIGRhdGFfaXRlcl8gaXMgbm9uLU5VTEwsIHRoZW4g
ImRhdGFfYmxvY2tfaGFuZGxlXyIgaG9sZHMgdGhlCisgIC8vICJpbmRleF92YWx1ZSIgcGFzc2Vk
IHRvIGJsb2NrX2Z1bmN0aW9uXyB0byBjcmVhdGUgdGhlIGRhdGFfaXRlcl8uCisgIHN0ZDo6c3Ry
aW5nIGRhdGFfYmxvY2tfaGFuZGxlXzsKK307CisKK1R3b0xldmVsSXRlcmF0b3I6OlR3b0xldmVs
SXRlcmF0b3IoCisgICAgSXRlcmF0b3IqIGluZGV4X2l0ZXIsCisgICAgQmxvY2tGdW5jdGlvbiBi
bG9ja19mdW5jdGlvbiwKKyAgICB2b2lkKiBhcmcsCisgICAgY29uc3QgUmVhZE9wdGlvbnMmIG9w
dGlvbnMpCisgICAgOiBibG9ja19mdW5jdGlvbl8oYmxvY2tfZnVuY3Rpb24pLAorICAgICAgYXJn
XyhhcmcpLAorICAgICAgb3B0aW9uc18ob3B0aW9ucyksCisgICAgICBpbmRleF9pdGVyXyhpbmRl
eF9pdGVyKSwKKyAgICAgIGRhdGFfaXRlcl8oTlVMTCkgeworfQorCitUd29MZXZlbEl0ZXJhdG9y
Ojp+VHdvTGV2ZWxJdGVyYXRvcigpIHsKK30KKwordm9pZCBUd29MZXZlbEl0ZXJhdG9yOjpTZWVr
KGNvbnN0IFNsaWNlJiB0YXJnZXQpIHsKKyAgaW5kZXhfaXRlcl8uU2Vlayh0YXJnZXQpOworICBJ
bml0RGF0YUJsb2NrKCk7CisgIGlmIChkYXRhX2l0ZXJfLml0ZXIoKSAhPSBOVUxMKSBkYXRhX2l0
ZXJfLlNlZWsodGFyZ2V0KTsKKyAgU2tpcEVtcHR5RGF0YUJsb2Nrc0ZvcndhcmQoKTsKK30KKwor
dm9pZCBUd29MZXZlbEl0ZXJhdG9yOjpTZWVrVG9GaXJzdCgpIHsKKyAgaW5kZXhfaXRlcl8uU2Vl
a1RvRmlyc3QoKTsKKyAgSW5pdERhdGFCbG9jaygpOworICBpZiAoZGF0YV9pdGVyXy5pdGVyKCkg
IT0gTlVMTCkgZGF0YV9pdGVyXy5TZWVrVG9GaXJzdCgpOworICBTa2lwRW1wdHlEYXRhQmxvY2tz
Rm9yd2FyZCgpOworfQorCit2b2lkIFR3b0xldmVsSXRlcmF0b3I6OlNlZWtUb0xhc3QoKSB7Cisg
IGluZGV4X2l0ZXJfLlNlZWtUb0xhc3QoKTsKKyAgSW5pdERhdGFCbG9jaygpOworICBpZiAoZGF0
YV9pdGVyXy5pdGVyKCkgIT0gTlVMTCkgZGF0YV9pdGVyXy5TZWVrVG9MYXN0KCk7CisgIFNraXBF
bXB0eURhdGFCbG9ja3NCYWNrd2FyZCgpOworfQorCit2b2lkIFR3b0xldmVsSXRlcmF0b3I6Ok5l
eHQoKSB7CisgIGFzc2VydChWYWxpZCgpKTsKKyAgZGF0YV9pdGVyXy5OZXh0KCk7CisgIFNraXBF
bXB0eURhdGFCbG9ja3NGb3J3YXJkKCk7Cit9CisKK3ZvaWQgVHdvTGV2ZWxJdGVyYXRvcjo6UHJl
digpIHsKKyAgYXNzZXJ0KFZhbGlkKCkpOworICBkYXRhX2l0ZXJfLlByZXYoKTsKKyAgU2tpcEVt
cHR5RGF0YUJsb2Nrc0JhY2t3YXJkKCk7Cit9CisKKwordm9pZCBUd29MZXZlbEl0ZXJhdG9yOjpT
a2lwRW1wdHlEYXRhQmxvY2tzRm9yd2FyZCgpIHsKKyAgd2hpbGUgKGRhdGFfaXRlcl8uaXRlcigp
ID09IE5VTEwgfHwgIWRhdGFfaXRlcl8uVmFsaWQoKSkgeworICAgIC8vIE1vdmUgdG8gbmV4dCBi
bG9jaworICAgIGlmICghaW5kZXhfaXRlcl8uVmFsaWQoKSkgeworICAgICAgU2V0RGF0YUl0ZXJh
dG9yKE5VTEwpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpbmRleF9pdGVyXy5OZXh0KCk7
CisgICAgSW5pdERhdGFCbG9jaygpOworICAgIGlmIChkYXRhX2l0ZXJfLml0ZXIoKSAhPSBOVUxM
KSBkYXRhX2l0ZXJfLlNlZWtUb0ZpcnN0KCk7CisgIH0KK30KKwordm9pZCBUd29MZXZlbEl0ZXJh
dG9yOjpTa2lwRW1wdHlEYXRhQmxvY2tzQmFja3dhcmQoKSB7CisgIHdoaWxlIChkYXRhX2l0ZXJf
Lml0ZXIoKSA9PSBOVUxMIHx8ICFkYXRhX2l0ZXJfLlZhbGlkKCkpIHsKKyAgICAvLyBNb3ZlIHRv
IG5leHQgYmxvY2sKKyAgICBpZiAoIWluZGV4X2l0ZXJfLlZhbGlkKCkpIHsKKyAgICAgIFNldERh
dGFJdGVyYXRvcihOVUxMKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgaW5kZXhfaXRlcl8u
UHJldigpOworICAgIEluaXREYXRhQmxvY2soKTsKKyAgICBpZiAoZGF0YV9pdGVyXy5pdGVyKCkg
IT0gTlVMTCkgZGF0YV9pdGVyXy5TZWVrVG9MYXN0KCk7CisgIH0KK30KKwordm9pZCBUd29MZXZl
bEl0ZXJhdG9yOjpTZXREYXRhSXRlcmF0b3IoSXRlcmF0b3IqIGRhdGFfaXRlcikgeworICBpZiAo
ZGF0YV9pdGVyXy5pdGVyKCkgIT0gTlVMTCkgU2F2ZUVycm9yKGRhdGFfaXRlcl8uc3RhdHVzKCkp
OworICBkYXRhX2l0ZXJfLlNldChkYXRhX2l0ZXIpOworfQorCit2b2lkIFR3b0xldmVsSXRlcmF0
b3I6OkluaXREYXRhQmxvY2soKSB7CisgIGlmICghaW5kZXhfaXRlcl8uVmFsaWQoKSkgeworICAg
IFNldERhdGFJdGVyYXRvcihOVUxMKTsKKyAgfSBlbHNlIHsKKyAgICBTbGljZSBoYW5kbGUgPSBp
bmRleF9pdGVyXy52YWx1ZSgpOworICAgIGlmIChkYXRhX2l0ZXJfLml0ZXIoKSAhPSBOVUxMICYm
IGhhbmRsZS5jb21wYXJlKGRhdGFfYmxvY2tfaGFuZGxlXykgPT0gMCkgeworICAgICAgLy8gZGF0
YV9pdGVyXyBpcyBhbHJlYWR5IGNvbnN0cnVjdGVkIHdpdGggdGhpcyBpdGVyYXRvciwgc28KKyAg
ICAgIC8vIG5vIG5lZWQgdG8gY2hhbmdlIGFueXRoaW5nCisgICAgfSBlbHNlIHsKKyAgICAgIEl0
ZXJhdG9yKiBpdGVyID0gKCpibG9ja19mdW5jdGlvbl8pKGFyZ18sIG9wdGlvbnNfLCBoYW5kbGUp
OworICAgICAgZGF0YV9ibG9ja19oYW5kbGVfLmFzc2lnbihoYW5kbGUuZGF0YSgpLCBoYW5kbGUu
c2l6ZSgpKTsKKyAgICAgIFNldERhdGFJdGVyYXRvcihpdGVyKTsKKyAgICB9CisgIH0KK30KKwor
fSAgLy8gbmFtZXNwYWNlCisKK0l0ZXJhdG9yKiBOZXdUd29MZXZlbEl0ZXJhdG9yKAorICAgIEl0
ZXJhdG9yKiBpbmRleF9pdGVyLAorICAgIEJsb2NrRnVuY3Rpb24gYmxvY2tfZnVuY3Rpb24sCisg
ICAgdm9pZCogYXJnLAorICAgIGNvbnN0IFJlYWRPcHRpb25zJiBvcHRpb25zKSB7CisgIHJldHVy
biBuZXcgVHdvTGV2ZWxJdGVyYXRvcihpbmRleF9pdGVyLCBibG9ja19mdW5jdGlvbiwgYXJnLCBv
cHRpb25zKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xldmVsZGIvdGFibGUvdHdvX2xldmVsX2l0ZXJhdG9yLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxlL3R3b19sZXZlbF9pdGVyYXRvci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjYyOWNhMzQ1MjU0MTQ1ODJlMzlkZjhhZDdhNDhlZmY3MmUwZTQ1MGYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxlL3R3b19sZXZlbF9pdGVyYXRvci5o
CkBAIC0wLDAgKzEsMzQgQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRy
aWJ1dG9ycy4KKworI2lmbmRlZiBTVE9SQUdFX0xFVkVMREJfVEFCTEVfVFdPX0xFVkVMX0lURVJB
VE9SX0hfCisjZGVmaW5lIFNUT1JBR0VfTEVWRUxEQl9UQUJMRV9UV09fTEVWRUxfSVRFUkFUT1Jf
SF8KKworI2luY2x1ZGUgImxldmVsZGIvaXRlcmF0b3IuaCIKKworbmFtZXNwYWNlIGxldmVsZGIg
eworCitzdHJ1Y3QgUmVhZE9wdGlvbnM7CisKKy8vIFJldHVybiBhIG5ldyB0d28gbGV2ZWwgaXRl
cmF0b3IuICBBIHR3by1sZXZlbCBpdGVyYXRvciBjb250YWlucyBhbgorLy8gaW5kZXggaXRlcmF0
b3Igd2hvc2UgdmFsdWVzIHBvaW50IHRvIGEgc2VxdWVuY2Ugb2YgYmxvY2tzIHdoZXJlCisvLyBl
YWNoIGJsb2NrIGlzIGl0c2VsZiBhIHNlcXVlbmNlIG9mIGtleSx2YWx1ZSBwYWlycy4gIFRoZSBy
ZXR1cm5lZAorLy8gdHdvLWxldmVsIGl0ZXJhdG9yIHlpZWxkcyB0aGUgY29uY2F0ZW5hdGlvbiBv
ZiBhbGwga2V5L3ZhbHVlIHBhaXJzCisvLyBpbiB0aGUgc2VxdWVuY2Ugb2YgYmxvY2tzLiAgVGFr
ZXMgb3duZXJzaGlwIG9mICJpbmRleF9pdGVyIiBhbmQKKy8vIHdpbGwgZGVsZXRlIGl0IHdoZW4g
bm8gbG9uZ2VyIG5lZWRlZC4KKy8vCisvLyBVc2VzIGEgc3VwcGxpZWQgZnVuY3Rpb24gdG8gY29u
dmVydCBhbiBpbmRleF9pdGVyIHZhbHVlIGludG8KKy8vIGFuIGl0ZXJhdG9yIG92ZXIgdGhlIGNv
bnRlbnRzIG9mIHRoZSBjb3JyZXNwb25kaW5nIGJsb2NrLgorZXh0ZXJuIEl0ZXJhdG9yKiBOZXdU
d29MZXZlbEl0ZXJhdG9yKAorICAgIEl0ZXJhdG9yKiBpbmRleF9pdGVyLAorICAgIEl0ZXJhdG9y
KiAoKmJsb2NrX2Z1bmN0aW9uKSgKKyAgICAgICAgdm9pZCogYXJnLAorICAgICAgICBjb25zdCBS
ZWFkT3B0aW9ucyYgb3B0aW9ucywKKyAgICAgICAgY29uc3QgU2xpY2UmIGluZGV4X3ZhbHVlKSwK
KyAgICB2b2lkKiBhcmcsCisgICAgY29uc3QgUmVhZE9wdGlvbnMmIG9wdGlvbnMpOworCit9ICAv
LyBuYW1lc3BhY2UgbGV2ZWxkYgorCisjZW5kaWYgIC8vIFNUT1JBR0VfTEVWRUxEQl9UQUJMRV9U
V09fTEVWRUxfSVRFUkFUT1JfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVs
ZGIvdXRpbC9hcmVuYS5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9hcmVuYS5j
YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi45NTUxZDZhM2EyN2M4YzJiZDEzY2M3ZTQ4ODgyYWFlY2RiNzViYTIwCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2FyZW5hLmNj
CkBAIC0wLDAgKzEsNjggQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRy
aWJ1dG9ycy4KKworI2luY2x1ZGUgInV0aWwvYXJlbmEuaCIKKyNpbmNsdWRlIDxhc3NlcnQuaD4K
KworbmFtZXNwYWNlIGxldmVsZGIgeworCitzdGF0aWMgY29uc3QgaW50IGtCbG9ja1NpemUgPSA0
MDk2OworCitBcmVuYTo6QXJlbmEoKSB7CisgIGJsb2Nrc19tZW1vcnlfID0gMDsKKyAgYWxsb2Nf
cHRyXyA9IE5VTEw7ICAvLyBGaXJzdCBhbGxvY2F0aW9uIHdpbGwgYWxsb2NhdGUgYSBibG9jawor
ICBhbGxvY19ieXRlc19yZW1haW5pbmdfID0gMDsKK30KKworQXJlbmE6On5BcmVuYSgpIHsKKyAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9ja3NfLnNpemUoKTsgaSsrKSB7CisgICAgZGVsZXRl
W10gYmxvY2tzX1tpXTsKKyAgfQorfQorCitjaGFyKiBBcmVuYTo6QWxsb2NhdGVGYWxsYmFjayhz
aXplX3QgYnl0ZXMpIHsKKyAgaWYgKGJ5dGVzID4ga0Jsb2NrU2l6ZSAvIDQpIHsKKyAgICAvLyBP
YmplY3QgaXMgbW9yZSB0aGFuIGEgcXVhcnRlciBvZiBvdXIgYmxvY2sgc2l6ZS4gIEFsbG9jYXRl
IGl0IHNlcGFyYXRlbHkKKyAgICAvLyB0byBhdm9pZCB3YXN0aW5nIHRvbyBtdWNoIHNwYWNlIGlu
IGxlZnRvdmVyIGJ5dGVzLgorICAgIGNoYXIqIHJlc3VsdCA9IEFsbG9jYXRlTmV3QmxvY2soYnl0
ZXMpOworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworICAvLyBXZSB3YXN0ZSB0aGUgcmVtYWlu
aW5nIHNwYWNlIGluIHRoZSBjdXJyZW50IGJsb2NrLgorICBhbGxvY19wdHJfID0gQWxsb2NhdGVO
ZXdCbG9jayhrQmxvY2tTaXplKTsKKyAgYWxsb2NfYnl0ZXNfcmVtYWluaW5nXyA9IGtCbG9ja1Np
emU7CisKKyAgY2hhciogcmVzdWx0ID0gYWxsb2NfcHRyXzsKKyAgYWxsb2NfcHRyXyArPSBieXRl
czsKKyAgYWxsb2NfYnl0ZXNfcmVtYWluaW5nXyAtPSBieXRlczsKKyAgcmV0dXJuIHJlc3VsdDsK
K30KKworY2hhciogQXJlbmE6OkFsbG9jYXRlQWxpZ25lZChzaXplX3QgYnl0ZXMpIHsKKyAgY29u
c3QgaW50IGFsaWduID0gc2l6ZW9mKHZvaWQqKTsgICAgLy8gV2UnbGwgYWxpZ24gdG8gcG9pbnRl
ciBzaXplCisgIGFzc2VydCgoYWxpZ24gJiAoYWxpZ24tMSkpID09IDApOyAgIC8vIFBvaW50ZXIg
c2l6ZSBzaG91bGQgYmUgYSBwb3dlciBvZiAyCisgIHNpemVfdCBjdXJyZW50X21vZCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihhbGxvY19wdHJfKSAmIChhbGlnbi0xKTsKKyAgc2l6ZV90
IHNsb3AgPSAoY3VycmVudF9tb2QgPT0gMCA/IDAgOiBhbGlnbiAtIGN1cnJlbnRfbW9kKTsKKyAg
c2l6ZV90IG5lZWRlZCA9IGJ5dGVzICsgc2xvcDsKKyAgY2hhciogcmVzdWx0OworICBpZiAobmVl
ZGVkIDw9IGFsbG9jX2J5dGVzX3JlbWFpbmluZ18pIHsKKyAgICByZXN1bHQgPSBhbGxvY19wdHJf
ICsgc2xvcDsKKyAgICBhbGxvY19wdHJfICs9IG5lZWRlZDsKKyAgICBhbGxvY19ieXRlc19yZW1h
aW5pbmdfIC09IG5lZWRlZDsKKyAgfSBlbHNlIHsKKyAgICAvLyBBbGxvY2F0ZUZhbGxiYWNrIGFs
d2F5cyByZXR1cm5lZCBhbGlnbmVkIG1lbW9yeQorICAgIHJlc3VsdCA9IEFsbG9jYXRlRmFsbGJh
Y2soYnl0ZXMpOworICB9CisgIGFzc2VydCgocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHJl
c3VsdCkgJiAoYWxpZ24tMSkpID09IDApOworICByZXR1cm4gcmVzdWx0OworfQorCitjaGFyKiBB
cmVuYTo6QWxsb2NhdGVOZXdCbG9jayhzaXplX3QgYmxvY2tfYnl0ZXMpIHsKKyAgY2hhciogcmVz
dWx0ID0gbmV3IGNoYXJbYmxvY2tfYnl0ZXNdOworICBibG9ja3NfbWVtb3J5XyArPSBibG9ja19i
eXRlczsKKyAgYmxvY2tzXy5wdXNoX2JhY2socmVzdWx0KTsKKyAgcmV0dXJuIHJlc3VsdDsKK30K
KworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xldmVsZGIvdXRpbC9hcmVuYS5oIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2Fy
ZW5hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOGY3ZGRlMjI2YzQ1MDc0NTY0NmYyOTk4NmQwMzAyNjMwZGI2ZjFm
NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9hcmVu
YS5oCkBAIC0wLDAgKzEsNjggQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNv
bnRyaWJ1dG9ycy4KKworI2lmbmRlZiBTVE9SQUdFX0xFVkVMREJfVVRJTF9BUkVOQV9IXworI2Rl
ZmluZSBTVE9SQUdFX0xFVkVMREJfVVRJTF9BUkVOQV9IXworCisjaW5jbHVkZSA8Y3N0ZGRlZj4K
KyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RkaW50
Lmg+CisKK25hbWVzcGFjZSBsZXZlbGRiIHsKKworY2xhc3MgQXJlbmEgeworIHB1YmxpYzoKKyAg
QXJlbmEoKTsKKyAgfkFyZW5hKCk7CisKKyAgLy8gUmV0dXJuIGEgcG9pbnRlciB0byBhIG5ld2x5
IGFsbG9jYXRlZCBtZW1vcnkgYmxvY2sgb2YgImJ5dGVzIiBieXRlcy4KKyAgY2hhciogQWxsb2Nh
dGUoc2l6ZV90IGJ5dGVzKTsKKworICAvLyBBbGxvY2F0ZSBtZW1vcnkgd2l0aCB0aGUgbm9ybWFs
IGFsaWdubWVudCBndWFyYW50ZWVzIHByb3ZpZGVkIGJ5IG1hbGxvYworICBjaGFyKiBBbGxvY2F0
ZUFsaWduZWQoc2l6ZV90IGJ5dGVzKTsKKworICAvLyBSZXR1cm5zIGFuIGVzdGltYXRlIG9mIHRo
ZSB0b3RhbCBtZW1vcnkgdXNhZ2Ugb2YgZGF0YSBhbGxvY2F0ZWQKKyAgLy8gYnkgdGhlIGFyZW5h
IChpbmNsdWRpbmcgc3BhY2UgYWxsb2NhdGVkIGJ1dCBub3QgeWV0IHVzZWQgZm9yIHVzZXIKKyAg
Ly8gYWxsb2NhdGlvbnMpLgorICBzaXplX3QgTWVtb3J5VXNhZ2UoKSBjb25zdCB7CisgICAgcmV0
dXJuIGJsb2Nrc19tZW1vcnlfICsgYmxvY2tzXy5jYXBhY2l0eSgpICogc2l6ZW9mKGNoYXIqKTsK
KyAgfQorCisgcHJpdmF0ZToKKyAgY2hhciogQWxsb2NhdGVGYWxsYmFjayhzaXplX3QgYnl0ZXMp
OworICBjaGFyKiBBbGxvY2F0ZU5ld0Jsb2NrKHNpemVfdCBibG9ja19ieXRlcyk7CisKKyAgLy8g
QWxsb2NhdGlvbiBzdGF0ZQorICBjaGFyKiBhbGxvY19wdHJfOworICBzaXplX3QgYWxsb2NfYnl0
ZXNfcmVtYWluaW5nXzsKKworICAvLyBBcnJheSBvZiBuZXdbXSBhbGxvY2F0ZWQgbWVtb3J5IGJs
b2NrcworICBzdGQ6OnZlY3RvcjxjaGFyKj4gYmxvY2tzXzsKKworICAvLyBCeXRlcyBvZiBtZW1v
cnkgaW4gYmxvY2tzIGFsbG9jYXRlZCBzbyBmYXIKKyAgc2l6ZV90IGJsb2Nrc19tZW1vcnlfOwor
CisgIC8vIE5vIGNvcHlpbmcgYWxsb3dlZAorICBBcmVuYShjb25zdCBBcmVuYSYpOworICB2b2lk
IG9wZXJhdG9yPShjb25zdCBBcmVuYSYpOworfTsKKworaW5saW5lIGNoYXIqIEFyZW5hOjpBbGxv
Y2F0ZShzaXplX3QgYnl0ZXMpIHsKKyAgLy8gVGhlIHNlbWFudGljcyBvZiB3aGF0IHRvIHJldHVy
biBhcmUgYSBiaXQgbWVzc3kgaWYgd2UgYWxsb3cKKyAgLy8gMC1ieXRlIGFsbG9jYXRpb25zLCBz
byB3ZSBkaXNhbGxvdyB0aGVtIGhlcmUgKHdlIGRvbid0IG5lZWQKKyAgLy8gdGhlbSBmb3Igb3Vy
IGludGVybmFsIHVzZSkuCisgIGFzc2VydChieXRlcyA+IDApOworICBpZiAoYnl0ZXMgPD0gYWxs
b2NfYnl0ZXNfcmVtYWluaW5nXykgeworICAgIGNoYXIqIHJlc3VsdCA9IGFsbG9jX3B0cl87Cisg
ICAgYWxsb2NfcHRyXyArPSBieXRlczsKKyAgICBhbGxvY19ieXRlc19yZW1haW5pbmdfIC09IGJ5
dGVzOworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKyAgcmV0dXJuIEFsbG9jYXRlRmFsbGJhY2so
Ynl0ZXMpOworfQorCit9ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgorCisjZW5kaWYgIC8vIFNUT1JB
R0VfTEVWRUxEQl9VVElMX0FSRU5BX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
ZXZlbGRiL3V0aWwvYXJlbmFfdGVzdC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRp
bC9hcmVuYV90ZXN0LmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYzZDE3NzgwMzQ1NTBhNzM5NDAyOWRmNDFkNmIy
NGY5MDUzZjU2NjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRi
L3V0aWwvYXJlbmFfdGVzdC5jYwpAQCAtMCwwICsxLDY4IEBACisvLyBDb3B5cmlnaHQgKGMpIDIw
MTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxl
IGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCisKKyNpbmNsdWRlICJ1dGlsL2FyZW5hLmgiCisK
KyNpbmNsdWRlICJ1dGlsL3JhbmRvbS5oIgorI2luY2x1ZGUgInV0aWwvdGVzdGhhcm5lc3MuaCIK
KworbmFtZXNwYWNlIGxldmVsZGIgeworCitjbGFzcyBBcmVuYVRlc3QgeyB9OworCitURVNUKEFy
ZW5hVGVzdCwgRW1wdHkpIHsKKyAgQXJlbmEgYXJlbmE7Cit9CisKK1RFU1QoQXJlbmFUZXN0LCBT
aW1wbGUpIHsKKyAgc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPHNpemVfdCwgY2hhcio+ID4gYWxsb2Nh
dGVkOworICBBcmVuYSBhcmVuYTsKKyAgY29uc3QgaW50IE4gPSAxMDAwMDA7CisgIHNpemVfdCBi
eXRlcyA9IDA7CisgIFJhbmRvbSBybmQoMzAxKTsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBp
KyspIHsKKyAgICBzaXplX3QgczsKKyAgICBpZiAoaSAlIChOIC8gMTApID09IDApIHsKKyAgICAg
IHMgPSBpOworICAgIH0gZWxzZSB7CisgICAgICBzID0gcm5kLk9uZUluKDQwMDApID8gcm5kLlVu
aWZvcm0oNjAwMCkgOgorICAgICAgICAgIChybmQuT25lSW4oMTApID8gcm5kLlVuaWZvcm0oMTAw
KSA6IHJuZC5Vbmlmb3JtKDIwKSk7CisgICAgfQorICAgIGlmIChzID09IDApIHsKKyAgICAgIC8v
IE91ciBhcmVuYSBkaXNhbGxvd3Mgc2l6ZSAwIGFsbG9jYXRpb25zLgorICAgICAgcyA9IDE7Cisg
ICAgfQorICAgIGNoYXIqIHI7CisgICAgaWYgKHJuZC5PbmVJbigxMCkpIHsKKyAgICAgIHIgPSBh
cmVuYS5BbGxvY2F0ZUFsaWduZWQocyk7CisgICAgfSBlbHNlIHsKKyAgICAgIHIgPSBhcmVuYS5B
bGxvY2F0ZShzKTsKKyAgICB9CisKKyAgICBmb3IgKGludCBiID0gMDsgYiA8IHM7IGIrKykgewor
ICAgICAgLy8gRmlsbCB0aGUgImkidGggYWxsb2NhdGlvbiB3aXRoIGEga25vd24gYml0IHBhdHRl
cm4KKyAgICAgIHJbYl0gPSBpICUgMjU2OworICAgIH0KKyAgICBieXRlcyArPSBzOworICAgIGFs
bG9jYXRlZC5wdXNoX2JhY2soc3RkOjptYWtlX3BhaXIocywgcikpOworICAgIEFTU0VSVF9HRShh
cmVuYS5NZW1vcnlVc2FnZSgpLCBieXRlcyk7CisgICAgaWYgKGkgPiBOLzEwKSB7CisgICAgICBB
U1NFUlRfTEUoYXJlbmEuTWVtb3J5VXNhZ2UoKSwgYnl0ZXMgKiAxLjEwKTsKKyAgICB9CisgIH0K
KyAgZm9yIChpbnQgaSA9IDA7IGkgPCBhbGxvY2F0ZWQuc2l6ZSgpOyBpKyspIHsKKyAgICBzaXpl
X3QgbnVtX2J5dGVzID0gYWxsb2NhdGVkW2ldLmZpcnN0OworICAgIGNvbnN0IGNoYXIqIHAgPSBh
bGxvY2F0ZWRbaV0uc2Vjb25kOworICAgIGZvciAoaW50IGIgPSAwOyBiIDwgbnVtX2J5dGVzOyBi
KyspIHsKKyAgICAgIC8vIENoZWNrIHRoZSAiaSJ0aCBhbGxvY2F0aW9uIGZvciB0aGUga25vd24g
Yml0IHBhdHRlcm4KKyAgICAgIEFTU0VSVF9FUShpbnQocFtiXSkgJiAweGZmLCBpICUgMjU2KTsK
KyAgICB9CisgIH0KK30KKworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKKworaW50IG1haW4oaW50
IGFyZ2MsIGNoYXIqKiBhcmd2KSB7CisgIHJldHVybiBsZXZlbGRiOjp0ZXN0OjpSdW5BbGxUZXN0
cygpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2Jsb29t
LmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2Jsb29tLmNjCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmQ3OTQxY2QyMWZhYjY0MDc5Y2JlZjFmNjIwNjBhNDhmMGQ4NmM3NGQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvYmxvb20uY2MKQEAgLTAsMCArMSw5
NSBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgorCisj
aW5jbHVkZSAibGV2ZWxkYi9maWx0ZXJfcG9saWN5LmgiCisKKyNpbmNsdWRlICJsZXZlbGRiL3Ns
aWNlLmgiCisjaW5jbHVkZSAidXRpbC9oYXNoLmgiCisKK25hbWVzcGFjZSBsZXZlbGRiIHsKKwor
bmFtZXNwYWNlIHsKK3N0YXRpYyB1aW50MzJfdCBCbG9vbUhhc2goY29uc3QgU2xpY2UmIGtleSkg
eworICByZXR1cm4gSGFzaChrZXkuZGF0YSgpLCBrZXkuc2l6ZSgpLCAweGJjOWYxZDM0KTsKK30K
KworY2xhc3MgQmxvb21GaWx0ZXJQb2xpY3kgOiBwdWJsaWMgRmlsdGVyUG9saWN5IHsKKyBwcml2
YXRlOgorICBzaXplX3QgYml0c19wZXJfa2V5XzsKKyAgc2l6ZV90IGtfOworCisgcHVibGljOgor
ICBleHBsaWNpdCBCbG9vbUZpbHRlclBvbGljeShpbnQgYml0c19wZXJfa2V5KQorICAgICAgOiBi
aXRzX3Blcl9rZXlfKGJpdHNfcGVyX2tleSkgeworICAgIC8vIFdlIGludGVudGlvbmFsbHkgcm91
bmQgZG93biB0byByZWR1Y2UgcHJvYmluZyBjb3N0IGEgbGl0dGxlIGJpdAorICAgIGtfID0gc3Rh
dGljX2Nhc3Q8c2l6ZV90PihiaXRzX3Blcl9rZXkgKiAwLjY5KTsgIC8vIDAuNjkgPX4gbG4oMikK
KyAgICBpZiAoa18gPCAxKSBrXyA9IDE7CisgICAgaWYgKGtfID4gMzApIGtfID0gMzA7CisgIH0K
KworICB2aXJ0dWFsIGNvbnN0IGNoYXIqIE5hbWUoKSBjb25zdCB7CisgICAgcmV0dXJuICJsZXZl
bGRiLkJ1aWx0aW5CbG9vbUZpbHRlciI7CisgIH0KKworICB2aXJ0dWFsIHZvaWQgQ3JlYXRlRmls
dGVyKGNvbnN0IFNsaWNlKiBrZXlzLCBpbnQgbiwgc3RkOjpzdHJpbmcqIGRzdCkgY29uc3Qgewor
ICAgIC8vIENvbXB1dGUgYmxvb20gZmlsdGVyIHNpemUgKGluIGJvdGggYml0cyBhbmQgYnl0ZXMp
CisgICAgc2l6ZV90IGJpdHMgPSBuICogYml0c19wZXJfa2V5XzsKKworICAgIC8vIEZvciBzbWFs
bCBuLCB3ZSBjYW4gc2VlIGEgdmVyeSBoaWdoIGZhbHNlIHBvc2l0aXZlIHJhdGUuICBGaXggaXQK
KyAgICAvLyBieSBlbmZvcmNpbmcgYSBtaW5pbXVtIGJsb29tIGZpbHRlciBsZW5ndGguCisgICAg
aWYgKGJpdHMgPCA2NCkgYml0cyA9IDY0OworCisgICAgc2l6ZV90IGJ5dGVzID0gKGJpdHMgKyA3
KSAvIDg7CisgICAgYml0cyA9IGJ5dGVzICogODsKKworICAgIGNvbnN0IHNpemVfdCBpbml0X3Np
emUgPSBkc3QtPnNpemUoKTsKKyAgICBkc3QtPnJlc2l6ZShpbml0X3NpemUgKyBieXRlcywgMCk7
CisgICAgZHN0LT5wdXNoX2JhY2soc3RhdGljX2Nhc3Q8Y2hhcj4oa18pKTsgIC8vIFJlbWVtYmVy
ICMgb2YgcHJvYmVzIGluIGZpbHRlcgorICAgIGNoYXIqIGFycmF5ID0gJigqZHN0KVtpbml0X3Np
emVdOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgICAvLyBVc2Ug
ZG91YmxlLWhhc2hpbmcgdG8gZ2VuZXJhdGUgYSBzZXF1ZW5jZSBvZiBoYXNoIHZhbHVlcy4KKyAg
ICAgIC8vIFNlZSBhbmFseXNpcyBpbiBbS2lyc2NoLE1pdHplbm1hY2hlciAyMDA2XS4KKyAgICAg
IHVpbnQzMl90IGggPSBCbG9vbUhhc2goa2V5c1tpXSk7CisgICAgICBjb25zdCB1aW50MzJfdCBk
ZWx0YSA9IChoID4+IDE3KSB8IChoIDw8IDE1KTsgIC8vIFJvdGF0ZSByaWdodCAxNyBiaXRzCisg
ICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGtfOyBqKyspIHsKKyAgICAgICAgY29uc3QgdWlu
dDMyX3QgYml0cG9zID0gaCAlIGJpdHM7CisgICAgICAgIGFycmF5W2JpdHBvcy84XSB8PSAoMSA8
PCAoYml0cG9zICUgOCkpOworICAgICAgICBoICs9IGRlbHRhOworICAgICAgfQorICAgIH0KKyAg
fQorCisgIHZpcnR1YWwgYm9vbCBLZXlNYXlNYXRjaChjb25zdCBTbGljZSYga2V5LCBjb25zdCBT
bGljZSYgYmxvb21fZmlsdGVyKSBjb25zdCB7CisgICAgY29uc3Qgc2l6ZV90IGxlbiA9IGJsb29t
X2ZpbHRlci5zaXplKCk7CisgICAgaWYgKGxlbiA8IDIpIHJldHVybiBmYWxzZTsKKworICAgIGNv
bnN0IGNoYXIqIGFycmF5ID0gYmxvb21fZmlsdGVyLmRhdGEoKTsKKyAgICBjb25zdCBzaXplX3Qg
Yml0cyA9IChsZW4gLSAxKSAqIDg7CisKKyAgICAvLyBVc2UgdGhlIGVuY29kZWQgayBzbyB0aGF0
IHdlIGNhbiByZWFkIGZpbHRlcnMgZ2VuZXJhdGVkIGJ5CisgICAgLy8gYmxvb20gZmlsdGVycyBj
cmVhdGVkIHVzaW5nIGRpZmZlcmVudCBwYXJhbWV0ZXJzLgorICAgIGNvbnN0IHNpemVfdCBrID0g
YXJyYXlbbGVuLTFdOworICAgIGlmIChrID4gMzApIHsKKyAgICAgIC8vIFJlc2VydmVkIGZvciBw
b3RlbnRpYWxseSBuZXcgZW5jb2RpbmdzIGZvciBzaG9ydCBibG9vbSBmaWx0ZXJzLgorICAgICAg
Ly8gQ29uc2lkZXIgaXQgYSBtYXRjaC4KKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IHVpbnQzMl90IGggPSBCbG9vbUhhc2goa2V5KTsKKyAgICBjb25zdCB1aW50MzJfdCBkZWx0YSA9
IChoID4+IDE3KSB8IChoIDw8IDE1KTsgIC8vIFJvdGF0ZSByaWdodCAxNyBiaXRzCisgICAgZm9y
IChzaXplX3QgaiA9IDA7IGogPCBrOyBqKyspIHsKKyAgICAgIGNvbnN0IHVpbnQzMl90IGJpdHBv
cyA9IGggJSBiaXRzOworICAgICAgaWYgKChhcnJheVtiaXRwb3MvOF0gJiAoMSA8PCAoYml0cG9z
ICUgOCkpKSA9PSAwKSByZXR1cm4gZmFsc2U7CisgICAgICBoICs9IGRlbHRhOworICAgIH0KKyAg
ICByZXR1cm4gdHJ1ZTsKKyAgfQorfTsKK30KKworY29uc3QgRmlsdGVyUG9saWN5KiBOZXdCbG9v
bUZpbHRlclBvbGljeShpbnQgYml0c19wZXJfa2V5KSB7CisgIHJldHVybiBuZXcgQmxvb21GaWx0
ZXJQb2xpY3koYml0c19wZXJfa2V5KTsKK30KKworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9ibG9vbV90ZXN0LmNjIGIv
U291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2Jsb29tX3Rlc3QuY2MKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MGJmOGU4ZDZlYmVhZTg2MGQ3ZDU1MzUzODUxMWVmMmFjNmU4MGYyMgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9ibG9vbV90ZXN0LmNjCkBAIC0wLDAg
KzEsMTYwIEBACisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIExldmVsREIgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMu
CisKKyNpbmNsdWRlICJsZXZlbGRiL2ZpbHRlcl9wb2xpY3kuaCIKKworI2luY2x1ZGUgInV0aWwv
Y29kaW5nLmgiCisjaW5jbHVkZSAidXRpbC9sb2dnaW5nLmgiCisjaW5jbHVkZSAidXRpbC90ZXN0
aGFybmVzcy5oIgorI2luY2x1ZGUgInV0aWwvdGVzdHV0aWwuaCIKKworbmFtZXNwYWNlIGxldmVs
ZGIgeworCitzdGF0aWMgY29uc3QgaW50IGtWZXJib3NlID0gMTsKKworc3RhdGljIFNsaWNlIEtl
eShpbnQgaSwgY2hhciogYnVmZmVyKSB7CisgIEVuY29kZUZpeGVkMzIoYnVmZmVyLCBpKTsKKyAg
cmV0dXJuIFNsaWNlKGJ1ZmZlciwgc2l6ZW9mKHVpbnQzMl90KSk7Cit9CisKK2NsYXNzIEJsb29t
VGVzdCB7CisgcHJpdmF0ZToKKyAgY29uc3QgRmlsdGVyUG9saWN5KiBwb2xpY3lfOworICBzdGQ6
OnN0cmluZyBmaWx0ZXJfOworICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4ga2V5c187CisKKyBw
dWJsaWM6CisgIEJsb29tVGVzdCgpIDogcG9saWN5XyhOZXdCbG9vbUZpbHRlclBvbGljeSgxMCkp
IHsgfQorCisgIH5CbG9vbVRlc3QoKSB7CisgICAgZGVsZXRlIHBvbGljeV87CisgIH0KKworICB2
b2lkIFJlc2V0KCkgeworICAgIGtleXNfLmNsZWFyKCk7CisgICAgZmlsdGVyXy5jbGVhcigpOwor
ICB9CisKKyAgdm9pZCBBZGQoY29uc3QgU2xpY2UmIHMpIHsKKyAgICBrZXlzXy5wdXNoX2JhY2so
cy5Ub1N0cmluZygpKTsKKyAgfQorCisgIHZvaWQgQnVpbGQoKSB7CisgICAgc3RkOjp2ZWN0b3I8
U2xpY2U+IGtleV9zbGljZXM7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrZXlzXy5zaXpl
KCk7IGkrKykgeworICAgICAga2V5X3NsaWNlcy5wdXNoX2JhY2soU2xpY2Uoa2V5c19baV0pKTsK
KyAgICB9CisgICAgZmlsdGVyXy5jbGVhcigpOworICAgIHBvbGljeV8tPkNyZWF0ZUZpbHRlcigm
a2V5X3NsaWNlc1swXSwga2V5X3NsaWNlcy5zaXplKCksICZmaWx0ZXJfKTsKKyAgICBrZXlzXy5j
bGVhcigpOworICAgIGlmIChrVmVyYm9zZSA+PSAyKSBEdW1wRmlsdGVyKCk7CisgIH0KKworICBz
aXplX3QgRmlsdGVyU2l6ZSgpIGNvbnN0IHsKKyAgICByZXR1cm4gZmlsdGVyXy5zaXplKCk7Cisg
IH0KKworICB2b2lkIER1bXBGaWx0ZXIoKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJGKCIpOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpKzEgPCBmaWx0ZXJfLnNpemUoKTsgaSsrKSB7CisgICAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgYyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oZmlsdGVy
X1tpXSk7CisgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDg7IGorKykgeworICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIiVjIiwgKGMgJiAoMSA8PGopKSA/ICcxJyA6ICcuJyk7CisgICAgICB9Cisg
ICAgfQorICAgIGZwcmludGYoc3RkZXJyLCAiKVxuIik7CisgIH0KKworICBib29sIE1hdGNoZXMo
Y29uc3QgU2xpY2UmIHMpIHsKKyAgICBpZiAoIWtleXNfLmVtcHR5KCkpIHsKKyAgICAgIEJ1aWxk
KCk7CisgICAgfQorICAgIHJldHVybiBwb2xpY3lfLT5LZXlNYXlNYXRjaChzLCBmaWx0ZXJfKTsK
KyAgfQorCisgIGRvdWJsZSBGYWxzZVBvc2l0aXZlUmF0ZSgpIHsKKyAgICBjaGFyIGJ1ZmZlcltz
aXplb2YoaW50KV07CisgICAgaW50IHJlc3VsdCA9IDA7CisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCAxMDAwMDsgaSsrKSB7CisgICAgICBpZiAoTWF0Y2hlcyhLZXkoaSArIDEwMDAwMDAwMDAsIGJ1
ZmZlcikpKSB7CisgICAgICAgIHJlc3VsdCsrOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4g
cmVzdWx0IC8gMTAwMDAuMDsKKyAgfQorfTsKKworVEVTVChCbG9vbVRlc3QsIEVtcHR5RmlsdGVy
KSB7CisgIEFTU0VSVF9UUlVFKCEgTWF0Y2hlcygiaGVsbG8iKSk7CisgIEFTU0VSVF9UUlVFKCEg
TWF0Y2hlcygid29ybGQiKSk7Cit9CisKK1RFU1QoQmxvb21UZXN0LCBTbWFsbCkgeworICBBZGQo
ImhlbGxvIik7CisgIEFkZCgid29ybGQiKTsKKyAgQVNTRVJUX1RSVUUoTWF0Y2hlcygiaGVsbG8i
KSk7CisgIEFTU0VSVF9UUlVFKE1hdGNoZXMoIndvcmxkIikpOworICBBU1NFUlRfVFJVRSghIE1h
dGNoZXMoIngiKSk7CisgIEFTU0VSVF9UUlVFKCEgTWF0Y2hlcygiZm9vIikpOworfQorCitzdGF0
aWMgaW50IE5leHRMZW5ndGgoaW50IGxlbmd0aCkgeworICBpZiAobGVuZ3RoIDwgMTApIHsKKyAg
ICBsZW5ndGggKz0gMTsKKyAgfSBlbHNlIGlmIChsZW5ndGggPCAxMDApIHsKKyAgICBsZW5ndGgg
Kz0gMTA7CisgIH0gZWxzZSBpZiAobGVuZ3RoIDwgMTAwMCkgeworICAgIGxlbmd0aCArPSAxMDA7
CisgIH0gZWxzZSB7CisgICAgbGVuZ3RoICs9IDEwMDA7CisgIH0KKyAgcmV0dXJuIGxlbmd0aDsK
K30KKworVEVTVChCbG9vbVRlc3QsIFZhcnlpbmdMZW5ndGhzKSB7CisgIGNoYXIgYnVmZmVyW3Np
emVvZihpbnQpXTsKKworICAvLyBDb3VudCBudW1iZXIgb2YgZmlsdGVycyB0aGF0IHNpZ25pZmlj
YW50bHkgZXhjZWVkIHRoZSBmYWxzZSBwb3NpdGl2ZSByYXRlCisgIGludCBtZWRpb2NyZV9maWx0
ZXJzID0gMDsKKyAgaW50IGdvb2RfZmlsdGVycyA9IDA7CisKKyAgZm9yIChpbnQgbGVuZ3RoID0g
MTsgbGVuZ3RoIDw9IDEwMDAwOyBsZW5ndGggPSBOZXh0TGVuZ3RoKGxlbmd0aCkpIHsKKyAgICBS
ZXNldCgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgIEFk
ZChLZXkoaSwgYnVmZmVyKSk7CisgICAgfQorICAgIEJ1aWxkKCk7CisKKyAgICBBU1NFUlRfTEUo
RmlsdGVyU2l6ZSgpLCAobGVuZ3RoICogMTAgLyA4KSArIDQwKSA8PCBsZW5ndGg7CisKKyAgICAv
LyBBbGwgYWRkZWQga2V5cyBtdXN0IG1hdGNoCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5n
dGg7IGkrKykgeworICAgICAgQVNTRVJUX1RSVUUoTWF0Y2hlcyhLZXkoaSwgYnVmZmVyKSkpCisg
ICAgICAgICAgPDwgIkxlbmd0aCAiIDw8IGxlbmd0aCA8PCAiOyBrZXkgIiA8PCBpOworICAgIH0K
KworICAgIC8vIENoZWNrIGZhbHNlIHBvc2l0aXZlIHJhdGUKKyAgICBkb3VibGUgcmF0ZSA9IEZh
bHNlUG9zaXRpdmVSYXRlKCk7CisgICAgaWYgKGtWZXJib3NlID49IDEpIHsKKyAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiRmFsc2UgcG9zaXRpdmVzOiAlNS4yZiUlIEAgbGVuZ3RoID0gJTZkIDsgYnl0
ZXMgPSAlNmRcbiIsCisgICAgICAgICAgICAgIHJhdGUqMTAwLjAsIGxlbmd0aCwgc3RhdGljX2Nh
c3Q8aW50PihGaWx0ZXJTaXplKCkpKTsKKyAgICB9CisgICAgQVNTRVJUX0xFKHJhdGUsIDAuMDIp
OyAgIC8vIE11c3Qgbm90IGJlIG92ZXIgMiUKKyAgICBpZiAocmF0ZSA+IDAuMDEyNSkgbWVkaW9j
cmVfZmlsdGVycysrOyAgLy8gQWxsb3dlZCwgYnV0IG5vdCB0b28gb2Z0ZW4KKyAgICBlbHNlIGdv
b2RfZmlsdGVycysrOworICB9CisgIGlmIChrVmVyYm9zZSA+PSAxKSB7CisgICAgZnByaW50Zihz
dGRlcnIsICJGaWx0ZXJzOiAlZCBnb29kLCAlZCBtZWRpb2NyZVxuIiwKKyAgICAgICAgICAgIGdv
b2RfZmlsdGVycywgbWVkaW9jcmVfZmlsdGVycyk7CisgIH0KKyAgQVNTRVJUX0xFKG1lZGlvY3Jl
X2ZpbHRlcnMsIGdvb2RfZmlsdGVycy81KTsKK30KKworLy8gRGlmZmVyZW50IGJpdHMtcGVyLWJ5
dGUKKworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIq
KiBhcmd2KSB7CisgIHJldHVybiBsZXZlbGRiOjp0ZXN0OjpSdW5BbGxUZXN0cygpOworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2NhY2hlLmNjIGIvU291cmNl
L1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2NhY2hlLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI0ZjFmNjNmNGYw
MDI4OWJlZDlhYzcwMGU1NjQzZTFmZjYyNmQwOTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvY2FjaGUuY2MKQEAgLTAsMCArMSwzMjggQEAKKy8vIENv
cHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRo
ZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2luY2x1ZGUgPGFz
c2VydC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNs
dWRlICJsZXZlbGRiL2NhY2hlLmgiCisjaW5jbHVkZSAicG9ydC9wb3J0LmgiCisjaW5jbHVkZSAi
dXRpbC9oYXNoLmgiCisjaW5jbHVkZSAidXRpbC9tdXRleGxvY2suaCIKKworbmFtZXNwYWNlIGxl
dmVsZGIgeworCitDYWNoZTo6fkNhY2hlKCkgeworfQorCituYW1lc3BhY2UgeworCisvLyBMUlUg
Y2FjaGUgaW1wbGVtZW50YXRpb24KKworLy8gQW4gZW50cnkgaXMgYSB2YXJpYWJsZSBsZW5ndGgg
aGVhcC1hbGxvY2F0ZWQgc3RydWN0dXJlLiAgRW50cmllcworLy8gYXJlIGtlcHQgaW4gYSBjaXJj
dWxhciBkb3VibHkgbGlua2VkIGxpc3Qgb3JkZXJlZCBieSBhY2Nlc3MgdGltZS4KK3N0cnVjdCBM
UlVIYW5kbGUgeworICB2b2lkKiB2YWx1ZTsKKyAgdm9pZCAoKmRlbGV0ZXIpKGNvbnN0IFNsaWNl
Jiwgdm9pZCogdmFsdWUpOworICBMUlVIYW5kbGUqIG5leHRfaGFzaDsKKyAgTFJVSGFuZGxlKiBu
ZXh0OworICBMUlVIYW5kbGUqIHByZXY7CisgIHNpemVfdCBjaGFyZ2U7ICAgICAgLy8gVE9ETyhv
cHQpOiBPbmx5IGFsbG93IHVpbnQzMl90PworICBzaXplX3Qga2V5X2xlbmd0aDsKKyAgdWludDMy
X3QgcmVmczsKKyAgdWludDMyX3QgaGFzaDsgICAgICAvLyBIYXNoIG9mIGtleSgpOyB1c2VkIGZv
ciBmYXN0IHNoYXJkaW5nIGFuZCBjb21wYXJpc29ucworICBjaGFyIGtleV9kYXRhWzFdOyAgIC8v
IEJlZ2lubmluZyBvZiBrZXkKKworICBTbGljZSBrZXkoKSBjb25zdCB7CisgICAgLy8gRm9yIGNo
ZWFwZXIgbG9va3Vwcywgd2UgYWxsb3cgYSB0ZW1wb3JhcnkgSGFuZGxlIG9iamVjdAorICAgIC8v
IHRvIHN0b3JlIGEgcG9pbnRlciB0byBhIGtleSBpbiAidmFsdWUiLgorICAgIGlmIChuZXh0ID09
IHRoaXMpIHsKKyAgICAgIHJldHVybiAqKHJlaW50ZXJwcmV0X2Nhc3Q8U2xpY2UqPih2YWx1ZSkp
OworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gU2xpY2Uoa2V5X2RhdGEsIGtleV9sZW5ndGgp
OworICAgIH0KKyAgfQorfTsKKworLy8gV2UgcHJvdmlkZSBvdXIgb3duIHNpbXBsZSBoYXNoIHRh
YmxlIHNpbmNlIGl0IHJlbW92ZXMgYSB3aG9sZSBidW5jaAorLy8gb2YgcG9ydGluZyBoYWNrcyBh
bmQgaXMgYWxzbyBmYXN0ZXIgdGhhbiBzb21lIG9mIHRoZSBidWlsdC1pbiBoYXNoCisvLyB0YWJs
ZSBpbXBsZW1lbnRhdGlvbnMgaW4gc29tZSBvZiB0aGUgY29tcGlsZXIvcnVudGltZSBjb21iaW5h
dGlvbnMKKy8vIHdlIGhhdmUgdGVzdGVkLiAgRS5nLiwgcmVhZHJhbmRvbSBzcGVlZHMgdXAgYnkg
fjUlIG92ZXIgdGhlIGcrKworLy8gNC40LjMncyBidWlsdGluIGhhc2h0YWJsZS4KK2NsYXNzIEhh
bmRsZVRhYmxlIHsKKyBwdWJsaWM6CisgIEhhbmRsZVRhYmxlKCkgOiBsZW5ndGhfKDApLCBlbGVt
c18oMCksIGxpc3RfKE5VTEwpIHsgUmVzaXplKCk7IH0KKyAgfkhhbmRsZVRhYmxlKCkgeyBkZWxl
dGVbXSBsaXN0XzsgfQorCisgIExSVUhhbmRsZSogTG9va3VwKGNvbnN0IFNsaWNlJiBrZXksIHVp
bnQzMl90IGhhc2gpIHsKKyAgICByZXR1cm4gKkZpbmRQb2ludGVyKGtleSwgaGFzaCk7CisgIH0K
KworICBMUlVIYW5kbGUqIEluc2VydChMUlVIYW5kbGUqIGgpIHsKKyAgICBMUlVIYW5kbGUqKiBw
dHIgPSBGaW5kUG9pbnRlcihoLT5rZXkoKSwgaC0+aGFzaCk7CisgICAgTFJVSGFuZGxlKiBvbGQg
PSAqcHRyOworICAgIGgtPm5leHRfaGFzaCA9IChvbGQgPT0gTlVMTCA/IE5VTEwgOiBvbGQtPm5l
eHRfaGFzaCk7CisgICAgKnB0ciA9IGg7CisgICAgaWYgKG9sZCA9PSBOVUxMKSB7CisgICAgICAr
K2VsZW1zXzsKKyAgICAgIGlmIChlbGVtc18gPiBsZW5ndGhfKSB7CisgICAgICAgIC8vIFNpbmNl
IGVhY2ggY2FjaGUgZW50cnkgaXMgZmFpcmx5IGxhcmdlLCB3ZSBhaW0gZm9yIGEgc21hbGwKKyAg
ICAgICAgLy8gYXZlcmFnZSBsaW5rZWQgbGlzdCBsZW5ndGggKDw9IDEpLgorICAgICAgICBSZXNp
emUoKTsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG9sZDsKKyAgfQorCisgIExSVUhhbmRs
ZSogUmVtb3ZlKGNvbnN0IFNsaWNlJiBrZXksIHVpbnQzMl90IGhhc2gpIHsKKyAgICBMUlVIYW5k
bGUqKiBwdHIgPSBGaW5kUG9pbnRlcihrZXksIGhhc2gpOworICAgIExSVUhhbmRsZSogcmVzdWx0
ID0gKnB0cjsKKyAgICBpZiAocmVzdWx0ICE9IE5VTEwpIHsKKyAgICAgICpwdHIgPSByZXN1bHQt
Pm5leHRfaGFzaDsKKyAgICAgIC0tZWxlbXNfOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0Owor
ICB9CisKKyBwcml2YXRlOgorICAvLyBUaGUgdGFibGUgY29uc2lzdHMgb2YgYW4gYXJyYXkgb2Yg
YnVja2V0cyB3aGVyZSBlYWNoIGJ1Y2tldCBpcworICAvLyBhIGxpbmtlZCBsaXN0IG9mIGNhY2hl
IGVudHJpZXMgdGhhdCBoYXNoIGludG8gdGhlIGJ1Y2tldC4KKyAgdWludDMyX3QgbGVuZ3RoXzsK
KyAgdWludDMyX3QgZWxlbXNfOworICBMUlVIYW5kbGUqKiBsaXN0XzsKKworICAvLyBSZXR1cm4g
YSBwb2ludGVyIHRvIHNsb3QgdGhhdCBwb2ludHMgdG8gYSBjYWNoZSBlbnRyeSB0aGF0CisgIC8v
IG1hdGNoZXMga2V5L2hhc2guICBJZiB0aGVyZSBpcyBubyBzdWNoIGNhY2hlIGVudHJ5LCByZXR1
cm4gYQorICAvLyBwb2ludGVyIHRvIHRoZSB0cmFpbGluZyBzbG90IGluIHRoZSBjb3JyZXNwb25k
aW5nIGxpbmtlZCBsaXN0LgorICBMUlVIYW5kbGUqKiBGaW5kUG9pbnRlcihjb25zdCBTbGljZSYg
a2V5LCB1aW50MzJfdCBoYXNoKSB7CisgICAgTFJVSGFuZGxlKiogcHRyID0gJmxpc3RfW2hhc2gg
JiAobGVuZ3RoXyAtIDEpXTsKKyAgICB3aGlsZSAoKnB0ciAhPSBOVUxMICYmCisgICAgICAgICAg
ICgoKnB0ciktPmhhc2ggIT0gaGFzaCB8fCBrZXkgIT0gKCpwdHIpLT5rZXkoKSkpIHsKKyAgICAg
IHB0ciA9ICYoKnB0ciktPm5leHRfaGFzaDsKKyAgICB9CisgICAgcmV0dXJuIHB0cjsKKyAgfQor
CisgIHZvaWQgUmVzaXplKCkgeworICAgIHVpbnQzMl90IG5ld19sZW5ndGggPSA0OworICAgIHdo
aWxlIChuZXdfbGVuZ3RoIDwgZWxlbXNfKSB7CisgICAgICBuZXdfbGVuZ3RoICo9IDI7CisgICAg
fQorICAgIExSVUhhbmRsZSoqIG5ld19saXN0ID0gbmV3IExSVUhhbmRsZSpbbmV3X2xlbmd0aF07
CisgICAgbWVtc2V0KG5ld19saXN0LCAwLCBzaXplb2YobmV3X2xpc3RbMF0pICogbmV3X2xlbmd0
aCk7CisgICAgdWludDMyX3QgY291bnQgPSAwOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkg
PCBsZW5ndGhfOyBpKyspIHsKKyAgICAgIExSVUhhbmRsZSogaCA9IGxpc3RfW2ldOworICAgICAg
d2hpbGUgKGggIT0gTlVMTCkgeworICAgICAgICBMUlVIYW5kbGUqIG5leHQgPSBoLT5uZXh0X2hh
c2g7CisgICAgICAgIFNsaWNlIGtleSA9IGgtPmtleSgpOworICAgICAgICB1aW50MzJfdCBoYXNo
ID0gaC0+aGFzaDsKKyAgICAgICAgTFJVSGFuZGxlKiogcHRyID0gJm5ld19saXN0W2hhc2ggJiAo
bmV3X2xlbmd0aCAtIDEpXTsKKyAgICAgICAgaC0+bmV4dF9oYXNoID0gKnB0cjsKKyAgICAgICAg
KnB0ciA9IGg7CisgICAgICAgIGggPSBuZXh0OworICAgICAgICBjb3VudCsrOworICAgICAgfQor
ICAgIH0KKyAgICBhc3NlcnQoZWxlbXNfID09IGNvdW50KTsKKyAgICBkZWxldGVbXSBsaXN0XzsK
KyAgICBsaXN0XyA9IG5ld19saXN0OworICAgIGxlbmd0aF8gPSBuZXdfbGVuZ3RoOworICB9Cit9
OworCisvLyBBIHNpbmdsZSBzaGFyZCBvZiBzaGFyZGVkIGNhY2hlLgorY2xhc3MgTFJVQ2FjaGUg
eworIHB1YmxpYzoKKyAgTFJVQ2FjaGUoKTsKKyAgfkxSVUNhY2hlKCk7CisKKyAgLy8gU2VwYXJh
dGUgZnJvbSBjb25zdHJ1Y3RvciBzbyBjYWxsZXIgY2FuIGVhc2lseSBtYWtlIGFuIGFycmF5IG9m
IExSVUNhY2hlCisgIHZvaWQgU2V0Q2FwYWNpdHkoc2l6ZV90IGNhcGFjaXR5KSB7IGNhcGFjaXR5
XyA9IGNhcGFjaXR5OyB9CisKKyAgLy8gTGlrZSBDYWNoZSBtZXRob2RzLCBidXQgd2l0aCBhbiBl
eHRyYSAiaGFzaCIgcGFyYW1ldGVyLgorICBDYWNoZTo6SGFuZGxlKiBJbnNlcnQoY29uc3QgU2xp
Y2UmIGtleSwgdWludDMyX3QgaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIHZh
bHVlLCBzaXplX3QgY2hhcmdlLAorICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKmRlbGV0
ZXIpKGNvbnN0IFNsaWNlJiBrZXksIHZvaWQqIHZhbHVlKSk7CisgIENhY2hlOjpIYW5kbGUqIExv
b2t1cChjb25zdCBTbGljZSYga2V5LCB1aW50MzJfdCBoYXNoKTsKKyAgdm9pZCBSZWxlYXNlKENh
Y2hlOjpIYW5kbGUqIGhhbmRsZSk7CisgIHZvaWQgRXJhc2UoY29uc3QgU2xpY2UmIGtleSwgdWlu
dDMyX3QgaGFzaCk7CisKKyBwcml2YXRlOgorICB2b2lkIExSVV9SZW1vdmUoTFJVSGFuZGxlKiBl
KTsKKyAgdm9pZCBMUlVfQXBwZW5kKExSVUhhbmRsZSogZSk7CisgIHZvaWQgVW5yZWYoTFJVSGFu
ZGxlKiBlKTsKKworICAvLyBJbml0aWFsaXplZCBiZWZvcmUgdXNlLgorICBzaXplX3QgY2FwYWNp
dHlfOworCisgIC8vIG11dGV4XyBwcm90ZWN0cyB0aGUgZm9sbG93aW5nIHN0YXRlLgorICBwb3J0
OjpNdXRleCBtdXRleF87CisgIHNpemVfdCB1c2FnZV87CisgIHVpbnQ2NF90IGxhc3RfaWRfOwor
CisgIC8vIER1bW15IGhlYWQgb2YgTFJVIGxpc3QuCisgIC8vIGxydS5wcmV2IGlzIG5ld2VzdCBl
bnRyeSwgbHJ1Lm5leHQgaXMgb2xkZXN0IGVudHJ5LgorICBMUlVIYW5kbGUgbHJ1XzsKKworICBI
YW5kbGVUYWJsZSB0YWJsZV87Cit9OworCitMUlVDYWNoZTo6TFJVQ2FjaGUoKQorICAgIDogdXNh
Z2VfKDApLAorICAgICAgbGFzdF9pZF8oMCkgeworICAvLyBNYWtlIGVtcHR5IGNpcmN1bGFyIGxp
bmtlZCBsaXN0CisgIGxydV8ubmV4dCA9ICZscnVfOworICBscnVfLnByZXYgPSAmbHJ1XzsKK30K
KworTFJVQ2FjaGU6On5MUlVDYWNoZSgpIHsKKyAgZm9yIChMUlVIYW5kbGUqIGUgPSBscnVfLm5l
eHQ7IGUgIT0gJmxydV87ICkgeworICAgIExSVUhhbmRsZSogbmV4dCA9IGUtPm5leHQ7CisgICAg
YXNzZXJ0KGUtPnJlZnMgPT0gMSk7ICAvLyBFcnJvciBpZiBjYWxsZXIgaGFzIGFuIHVucmVsZWFz
ZWQgaGFuZGxlCisgICAgVW5yZWYoZSk7CisgICAgZSA9IG5leHQ7CisgIH0KK30KKwordm9pZCBM
UlVDYWNoZTo6VW5yZWYoTFJVSGFuZGxlKiBlKSB7CisgIGFzc2VydChlLT5yZWZzID4gMCk7Cisg
IGUtPnJlZnMtLTsKKyAgaWYgKGUtPnJlZnMgPD0gMCkgeworICAgIHVzYWdlXyAtPSBlLT5jaGFy
Z2U7CisgICAgKCplLT5kZWxldGVyKShlLT5rZXkoKSwgZS0+dmFsdWUpOworICAgIGZyZWUoZSk7
CisgIH0KK30KKwordm9pZCBMUlVDYWNoZTo6TFJVX1JlbW92ZShMUlVIYW5kbGUqIGUpIHsKKyAg
ZS0+bmV4dC0+cHJldiA9IGUtPnByZXY7CisgIGUtPnByZXYtPm5leHQgPSBlLT5uZXh0OworfQor
Cit2b2lkIExSVUNhY2hlOjpMUlVfQXBwZW5kKExSVUhhbmRsZSogZSkgeworICAvLyBNYWtlICJl
IiBuZXdlc3QgZW50cnkgYnkgaW5zZXJ0aW5nIGp1c3QgYmVmb3JlIGxydV8KKyAgZS0+bmV4dCA9
ICZscnVfOworICBlLT5wcmV2ID0gbHJ1Xy5wcmV2OworICBlLT5wcmV2LT5uZXh0ID0gZTsKKyAg
ZS0+bmV4dC0+cHJldiA9IGU7Cit9CisKK0NhY2hlOjpIYW5kbGUqIExSVUNhY2hlOjpMb29rdXAo
Y29uc3QgU2xpY2UmIGtleSwgdWludDMyX3QgaGFzaCkgeworICBNdXRleExvY2sgbCgmbXV0ZXhf
KTsKKyAgTFJVSGFuZGxlKiBlID0gdGFibGVfLkxvb2t1cChrZXksIGhhc2gpOworICBpZiAoZSAh
PSBOVUxMKSB7CisgICAgZS0+cmVmcysrOworICAgIExSVV9SZW1vdmUoZSk7CisgICAgTFJVX0Fw
cGVuZChlKTsKKyAgfQorICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxDYWNoZTo6SGFuZGxlKj4o
ZSk7Cit9CisKK3ZvaWQgTFJVQ2FjaGU6OlJlbGVhc2UoQ2FjaGU6OkhhbmRsZSogaGFuZGxlKSB7
CisgIE11dGV4TG9jayBsKCZtdXRleF8pOworICBVbnJlZihyZWludGVycHJldF9jYXN0PExSVUhh
bmRsZSo+KGhhbmRsZSkpOworfQorCitDYWNoZTo6SGFuZGxlKiBMUlVDYWNoZTo6SW5zZXJ0KAor
ICAgIGNvbnN0IFNsaWNlJiBrZXksIHVpbnQzMl90IGhhc2gsIHZvaWQqIHZhbHVlLCBzaXplX3Qg
Y2hhcmdlLAorICAgIHZvaWQgKCpkZWxldGVyKShjb25zdCBTbGljZSYga2V5LCB2b2lkKiB2YWx1
ZSkpIHsKKyAgTXV0ZXhMb2NrIGwoJm11dGV4Xyk7CisKKyAgTFJVSGFuZGxlKiBlID0gcmVpbnRl
cnByZXRfY2FzdDxMUlVIYW5kbGUqPigKKyAgICAgIG1hbGxvYyhzaXplb2YoTFJVSGFuZGxlKS0x
ICsga2V5LnNpemUoKSkpOworICBlLT52YWx1ZSA9IHZhbHVlOworICBlLT5kZWxldGVyID0gZGVs
ZXRlcjsKKyAgZS0+Y2hhcmdlID0gY2hhcmdlOworICBlLT5rZXlfbGVuZ3RoID0ga2V5LnNpemUo
KTsKKyAgZS0+aGFzaCA9IGhhc2g7CisgIGUtPnJlZnMgPSAyOyAgLy8gT25lIGZyb20gTFJVQ2Fj
aGUsIG9uZSBmb3IgdGhlIHJldHVybmVkIGhhbmRsZQorICBtZW1jcHkoZS0+a2V5X2RhdGEsIGtl
eS5kYXRhKCksIGtleS5zaXplKCkpOworICBMUlVfQXBwZW5kKGUpOworICB1c2FnZV8gKz0gY2hh
cmdlOworCisgIExSVUhhbmRsZSogb2xkID0gdGFibGVfLkluc2VydChlKTsKKyAgaWYgKG9sZCAh
PSBOVUxMKSB7CisgICAgTFJVX1JlbW92ZShvbGQpOworICAgIFVucmVmKG9sZCk7CisgIH0KKwor
ICB3aGlsZSAodXNhZ2VfID4gY2FwYWNpdHlfICYmIGxydV8ubmV4dCAhPSAmbHJ1XykgeworICAg
IExSVUhhbmRsZSogb2xkID0gbHJ1Xy5uZXh0OworICAgIExSVV9SZW1vdmUob2xkKTsKKyAgICB0
YWJsZV8uUmVtb3ZlKG9sZC0+a2V5KCksIG9sZC0+aGFzaCk7CisgICAgVW5yZWYob2xkKTsKKyAg
fQorCisgIHJldHVybiByZWludGVycHJldF9jYXN0PENhY2hlOjpIYW5kbGUqPihlKTsKK30KKwor
dm9pZCBMUlVDYWNoZTo6RXJhc2UoY29uc3QgU2xpY2UmIGtleSwgdWludDMyX3QgaGFzaCkgewor
ICBNdXRleExvY2sgbCgmbXV0ZXhfKTsKKyAgTFJVSGFuZGxlKiBlID0gdGFibGVfLlJlbW92ZShr
ZXksIGhhc2gpOworICBpZiAoZSAhPSBOVUxMKSB7CisgICAgTFJVX1JlbW92ZShlKTsKKyAgICBV
bnJlZihlKTsKKyAgfQorfQorCitzdGF0aWMgY29uc3QgaW50IGtOdW1TaGFyZEJpdHMgPSA0Owor
c3RhdGljIGNvbnN0IGludCBrTnVtU2hhcmRzID0gMSA8PCBrTnVtU2hhcmRCaXRzOworCitjbGFz
cyBTaGFyZGVkTFJVQ2FjaGUgOiBwdWJsaWMgQ2FjaGUgeworIHByaXZhdGU6CisgIExSVUNhY2hl
IHNoYXJkX1trTnVtU2hhcmRzXTsKKyAgcG9ydDo6TXV0ZXggaWRfbXV0ZXhfOworICB1aW50NjRf
dCBsYXN0X2lkXzsKKworICBzdGF0aWMgaW5saW5lIHVpbnQzMl90IEhhc2hTbGljZShjb25zdCBT
bGljZSYgcykgeworICAgIHJldHVybiBIYXNoKHMuZGF0YSgpLCBzLnNpemUoKSwgMCk7CisgIH0K
KworICBzdGF0aWMgdWludDMyX3QgU2hhcmQodWludDMyX3QgaGFzaCkgeworICAgIHJldHVybiBo
YXNoID4+ICgzMiAtIGtOdW1TaGFyZEJpdHMpOworICB9CisKKyBwdWJsaWM6CisgIGV4cGxpY2l0
IFNoYXJkZWRMUlVDYWNoZShzaXplX3QgY2FwYWNpdHkpCisgICAgICA6IGxhc3RfaWRfKDApIHsK
KyAgICBjb25zdCBzaXplX3QgcGVyX3NoYXJkID0gKGNhcGFjaXR5ICsgKGtOdW1TaGFyZHMgLSAx
KSkgLyBrTnVtU2hhcmRzOworICAgIGZvciAoaW50IHMgPSAwOyBzIDwga051bVNoYXJkczsgcysr
KSB7CisgICAgICBzaGFyZF9bc10uU2V0Q2FwYWNpdHkocGVyX3NoYXJkKTsKKyAgICB9CisgIH0K
KyAgdmlydHVhbCB+U2hhcmRlZExSVUNhY2hlKCkgeyB9CisgIHZpcnR1YWwgSGFuZGxlKiBJbnNl
cnQoY29uc3QgU2xpY2UmIGtleSwgdm9pZCogdmFsdWUsIHNpemVfdCBjaGFyZ2UsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgdm9pZCAoKmRlbGV0ZXIpKGNvbnN0IFNsaWNlJiBrZXksIHZvaWQq
IHZhbHVlKSkgeworICAgIGNvbnN0IHVpbnQzMl90IGhhc2ggPSBIYXNoU2xpY2Uoa2V5KTsKKyAg
ICByZXR1cm4gc2hhcmRfW1NoYXJkKGhhc2gpXS5JbnNlcnQoa2V5LCBoYXNoLCB2YWx1ZSwgY2hh
cmdlLCBkZWxldGVyKTsKKyAgfQorICB2aXJ0dWFsIEhhbmRsZSogTG9va3VwKGNvbnN0IFNsaWNl
JiBrZXkpIHsKKyAgICBjb25zdCB1aW50MzJfdCBoYXNoID0gSGFzaFNsaWNlKGtleSk7CisgICAg
cmV0dXJuIHNoYXJkX1tTaGFyZChoYXNoKV0uTG9va3VwKGtleSwgaGFzaCk7CisgIH0KKyAgdmly
dHVhbCB2b2lkIFJlbGVhc2UoSGFuZGxlKiBoYW5kbGUpIHsKKyAgICBMUlVIYW5kbGUqIGggPSBy
ZWludGVycHJldF9jYXN0PExSVUhhbmRsZSo+KGhhbmRsZSk7CisgICAgc2hhcmRfW1NoYXJkKGgt
Pmhhc2gpXS5SZWxlYXNlKGhhbmRsZSk7CisgIH0KKyAgdmlydHVhbCB2b2lkIEVyYXNlKGNvbnN0
IFNsaWNlJiBrZXkpIHsKKyAgICBjb25zdCB1aW50MzJfdCBoYXNoID0gSGFzaFNsaWNlKGtleSk7
CisgICAgc2hhcmRfW1NoYXJkKGhhc2gpXS5FcmFzZShrZXksIGhhc2gpOworICB9CisgIHZpcnR1
YWwgdm9pZCogVmFsdWUoSGFuZGxlKiBoYW5kbGUpIHsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxMUlVIYW5kbGUqPihoYW5kbGUpLT52YWx1ZTsKKyAgfQorICB2aXJ0dWFsIHVpbnQ2NF90
IE5ld0lkKCkgeworICAgIE11dGV4TG9jayBsKCZpZF9tdXRleF8pOworICAgIHJldHVybiArKyhs
YXN0X2lkXyk7CisgIH0KK307CisKK30gIC8vIGVuZCBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK0Nh
Y2hlKiBOZXdMUlVDYWNoZShzaXplX3QgY2FwYWNpdHkpIHsKKyAgcmV0dXJuIG5ldyBTaGFyZGVk
TFJVQ2FjaGUoY2FwYWNpdHkpOworfQorCit9ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2NhY2hlX3Rlc3QuY2MgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvY2FjaGVfdGVzdC5jYwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40Mzcx
NjcxNWE4OWY0NzY3MDA4NDVjMzAzZTE2NTE0NDhlY2VmNjJjCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2NhY2hlX3Rlc3QuY2MKQEAgLTAsMCArMSwx
ODYgQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKwor
I2luY2x1ZGUgImxldmVsZGIvY2FjaGUuaCIKKworI2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRl
ICJ1dGlsL2NvZGluZy5oIgorI2luY2x1ZGUgInV0aWwvdGVzdGhhcm5lc3MuaCIKKworbmFtZXNw
YWNlIGxldmVsZGIgeworCisvLyBDb252ZXJzaW9ucyBiZXR3ZWVuIG51bWVyaWMga2V5cy92YWx1
ZXMgYW5kIHRoZSB0eXBlcyBleHBlY3RlZCBieSBDYWNoZS4KK3N0YXRpYyBzdGQ6OnN0cmluZyBF
bmNvZGVLZXkoaW50IGspIHsKKyAgc3RkOjpzdHJpbmcgcmVzdWx0OworICBQdXRGaXhlZDMyKCZy
ZXN1bHQsIGspOworICByZXR1cm4gcmVzdWx0OworfQorc3RhdGljIGludCBEZWNvZGVLZXkoY29u
c3QgU2xpY2UmIGspIHsKKyAgYXNzZXJ0KGsuc2l6ZSgpID09IDQpOworICByZXR1cm4gRGVjb2Rl
Rml4ZWQzMihrLmRhdGEoKSk7Cit9CitzdGF0aWMgdm9pZCogRW5jb2RlVmFsdWUodWludHB0cl90
IHYpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHYpOyB9CitzdGF0aWMgaW50IERl
Y29kZVZhbHVlKHZvaWQqIHYpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih2
KTsgfQorCitjbGFzcyBDYWNoZVRlc3QgeworIHB1YmxpYzoKKyAgc3RhdGljIENhY2hlVGVzdCog
Y3VycmVudF87CisKKyAgc3RhdGljIHZvaWQgRGVsZXRlcihjb25zdCBTbGljZSYga2V5LCB2b2lk
KiB2KSB7CisgICAgY3VycmVudF8tPmRlbGV0ZWRfa2V5c18ucHVzaF9iYWNrKERlY29kZUtleShr
ZXkpKTsKKyAgICBjdXJyZW50Xy0+ZGVsZXRlZF92YWx1ZXNfLnB1c2hfYmFjayhEZWNvZGVWYWx1
ZSh2KSk7CisgIH0KKworICBzdGF0aWMgY29uc3QgaW50IGtDYWNoZVNpemUgPSAxMDAwOworICBz
dGQ6OnZlY3RvcjxpbnQ+IGRlbGV0ZWRfa2V5c187CisgIHN0ZDo6dmVjdG9yPGludD4gZGVsZXRl
ZF92YWx1ZXNfOworICBDYWNoZSogY2FjaGVfOworCisgIENhY2hlVGVzdCgpIDogY2FjaGVfKE5l
d0xSVUNhY2hlKGtDYWNoZVNpemUpKSB7CisgICAgY3VycmVudF8gPSB0aGlzOworICB9CisKKyAg
fkNhY2hlVGVzdCgpIHsKKyAgICBkZWxldGUgY2FjaGVfOworICB9CisKKyAgaW50IExvb2t1cChp
bnQga2V5KSB7CisgICAgQ2FjaGU6OkhhbmRsZSogaGFuZGxlID0gY2FjaGVfLT5Mb29rdXAoRW5j
b2RlS2V5KGtleSkpOworICAgIGNvbnN0IGludCByID0gKGhhbmRsZSA9PSBOVUxMKSA/IC0xIDog
RGVjb2RlVmFsdWUoY2FjaGVfLT5WYWx1ZShoYW5kbGUpKTsKKyAgICBpZiAoaGFuZGxlICE9IE5V
TEwpIHsKKyAgICAgIGNhY2hlXy0+UmVsZWFzZShoYW5kbGUpOworICAgIH0KKyAgICByZXR1cm4g
cjsKKyAgfQorCisgIHZvaWQgSW5zZXJ0KGludCBrZXksIGludCB2YWx1ZSwgaW50IGNoYXJnZSA9
IDEpIHsKKyAgICBjYWNoZV8tPlJlbGVhc2UoY2FjaGVfLT5JbnNlcnQoRW5jb2RlS2V5KGtleSks
IEVuY29kZVZhbHVlKHZhbHVlKSwgY2hhcmdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmQ2FjaGVUZXN0OjpEZWxldGVyKSk7CisgIH0KKworICB2b2lkIEVyYXNlKGludCBr
ZXkpIHsKKyAgICBjYWNoZV8tPkVyYXNlKEVuY29kZUtleShrZXkpKTsKKyAgfQorfTsKK0NhY2hl
VGVzdCogQ2FjaGVUZXN0OjpjdXJyZW50XzsKKworVEVTVChDYWNoZVRlc3QsIEhpdEFuZE1pc3Mp
IHsKKyAgQVNTRVJUX0VRKC0xLCBMb29rdXAoMTAwKSk7CisKKyAgSW5zZXJ0KDEwMCwgMTAxKTsK
KyAgQVNTRVJUX0VRKDEwMSwgTG9va3VwKDEwMCkpOworICBBU1NFUlRfRVEoLTEsICBMb29rdXAo
MjAwKSk7CisgIEFTU0VSVF9FUSgtMSwgIExvb2t1cCgzMDApKTsKKworICBJbnNlcnQoMjAwLCAy
MDEpOworICBBU1NFUlRfRVEoMTAxLCBMb29rdXAoMTAwKSk7CisgIEFTU0VSVF9FUSgyMDEsIExv
b2t1cCgyMDApKTsKKyAgQVNTRVJUX0VRKC0xLCAgTG9va3VwKDMwMCkpOworCisgIEluc2VydCgx
MDAsIDEwMik7CisgIEFTU0VSVF9FUSgxMDIsIExvb2t1cCgxMDApKTsKKyAgQVNTRVJUX0VRKDIw
MSwgTG9va3VwKDIwMCkpOworICBBU1NFUlRfRVEoLTEsICBMb29rdXAoMzAwKSk7CisKKyAgQVNT
RVJUX0VRKDEsIGRlbGV0ZWRfa2V5c18uc2l6ZSgpKTsKKyAgQVNTRVJUX0VRKDEwMCwgZGVsZXRl
ZF9rZXlzX1swXSk7CisgIEFTU0VSVF9FUSgxMDEsIGRlbGV0ZWRfdmFsdWVzX1swXSk7Cit9CisK
K1RFU1QoQ2FjaGVUZXN0LCBFcmFzZSkgeworICBFcmFzZSgyMDApOworICBBU1NFUlRfRVEoMCwg
ZGVsZXRlZF9rZXlzXy5zaXplKCkpOworCisgIEluc2VydCgxMDAsIDEwMSk7CisgIEluc2VydCgy
MDAsIDIwMSk7CisgIEVyYXNlKDEwMCk7CisgIEFTU0VSVF9FUSgtMSwgIExvb2t1cCgxMDApKTsK
KyAgQVNTRVJUX0VRKDIwMSwgTG9va3VwKDIwMCkpOworICBBU1NFUlRfRVEoMSwgZGVsZXRlZF9r
ZXlzXy5zaXplKCkpOworICBBU1NFUlRfRVEoMTAwLCBkZWxldGVkX2tleXNfWzBdKTsKKyAgQVNT
RVJUX0VRKDEwMSwgZGVsZXRlZF92YWx1ZXNfWzBdKTsKKworICBFcmFzZSgxMDApOworICBBU1NF
UlRfRVEoLTEsICBMb29rdXAoMTAwKSk7CisgIEFTU0VSVF9FUSgyMDEsIExvb2t1cCgyMDApKTsK
KyAgQVNTRVJUX0VRKDEsIGRlbGV0ZWRfa2V5c18uc2l6ZSgpKTsKK30KKworVEVTVChDYWNoZVRl
c3QsIEVudHJpZXNBcmVQaW5uZWQpIHsKKyAgSW5zZXJ0KDEwMCwgMTAxKTsKKyAgQ2FjaGU6Okhh
bmRsZSogaDEgPSBjYWNoZV8tPkxvb2t1cChFbmNvZGVLZXkoMTAwKSk7CisgIEFTU0VSVF9FUSgx
MDEsIERlY29kZVZhbHVlKGNhY2hlXy0+VmFsdWUoaDEpKSk7CisKKyAgSW5zZXJ0KDEwMCwgMTAy
KTsKKyAgQ2FjaGU6OkhhbmRsZSogaDIgPSBjYWNoZV8tPkxvb2t1cChFbmNvZGVLZXkoMTAwKSk7
CisgIEFTU0VSVF9FUSgxMDIsIERlY29kZVZhbHVlKGNhY2hlXy0+VmFsdWUoaDIpKSk7CisgIEFT
U0VSVF9FUSgwLCBkZWxldGVkX2tleXNfLnNpemUoKSk7CisKKyAgY2FjaGVfLT5SZWxlYXNlKGgx
KTsKKyAgQVNTRVJUX0VRKDEsIGRlbGV0ZWRfa2V5c18uc2l6ZSgpKTsKKyAgQVNTRVJUX0VRKDEw
MCwgZGVsZXRlZF9rZXlzX1swXSk7CisgIEFTU0VSVF9FUSgxMDEsIGRlbGV0ZWRfdmFsdWVzX1sw
XSk7CisKKyAgRXJhc2UoMTAwKTsKKyAgQVNTRVJUX0VRKC0xLCBMb29rdXAoMTAwKSk7CisgIEFT
U0VSVF9FUSgxLCBkZWxldGVkX2tleXNfLnNpemUoKSk7CisKKyAgY2FjaGVfLT5SZWxlYXNlKGgy
KTsKKyAgQVNTRVJUX0VRKDIsIGRlbGV0ZWRfa2V5c18uc2l6ZSgpKTsKKyAgQVNTRVJUX0VRKDEw
MCwgZGVsZXRlZF9rZXlzX1sxXSk7CisgIEFTU0VSVF9FUSgxMDIsIGRlbGV0ZWRfdmFsdWVzX1sx
XSk7Cit9CisKK1RFU1QoQ2FjaGVUZXN0LCBFdmljdGlvblBvbGljeSkgeworICBJbnNlcnQoMTAw
LCAxMDEpOworICBJbnNlcnQoMjAwLCAyMDEpOworCisgIC8vIEZyZXF1ZW50bHkgdXNlZCBlbnRy
eSBtdXN0IGJlIGtlcHQgYXJvdW5kCisgIGZvciAoaW50IGkgPSAwOyBpIDwga0NhY2hlU2l6ZSAr
IDEwMDsgaSsrKSB7CisgICAgSW5zZXJ0KDEwMDAraSwgMjAwMCtpKTsKKyAgICBBU1NFUlRfRVEo
MjAwMCtpLCBMb29rdXAoMTAwMCtpKSk7CisgICAgQVNTRVJUX0VRKDEwMSwgTG9va3VwKDEwMCkp
OworICB9CisgIEFTU0VSVF9FUSgxMDEsIExvb2t1cCgxMDApKTsKKyAgQVNTRVJUX0VRKC0xLCBM
b29rdXAoMjAwKSk7Cit9CisKK1RFU1QoQ2FjaGVUZXN0LCBIZWF2eUVudHJpZXMpIHsKKyAgLy8g
QWRkIGEgYnVuY2ggb2YgbGlnaHQgYW5kIGhlYXZ5IGVudHJpZXMgYW5kIHRoZW4gY291bnQgdGhl
IGNvbWJpbmVkCisgIC8vIHNpemUgb2YgaXRlbXMgc3RpbGwgaW4gdGhlIGNhY2hlLCB3aGljaCBt
dXN0IGJlIGFwcHJveGltYXRlbHkgdGhlCisgIC8vIHNhbWUgYXMgdGhlIHRvdGFsIGNhcGFjaXR5
LgorICBjb25zdCBpbnQga0xpZ2h0ID0gMTsKKyAgY29uc3QgaW50IGtIZWF2eSA9IDEwOworICBp
bnQgYWRkZWQgPSAwOworICBpbnQgaW5kZXggPSAwOworICB3aGlsZSAoYWRkZWQgPCAyKmtDYWNo
ZVNpemUpIHsKKyAgICBjb25zdCBpbnQgd2VpZ2h0ID0gKGluZGV4ICYgMSkgPyBrTGlnaHQgOiBr
SGVhdnk7CisgICAgSW5zZXJ0KGluZGV4LCAxMDAwK2luZGV4LCB3ZWlnaHQpOworICAgIGFkZGVk
ICs9IHdlaWdodDsKKyAgICBpbmRleCsrOworICB9CisKKyAgaW50IGNhY2hlZF93ZWlnaHQgPSAw
OworICBmb3IgKGludCBpID0gMDsgaSA8IGluZGV4OyBpKyspIHsKKyAgICBjb25zdCBpbnQgd2Vp
Z2h0ID0gKGkgJiAxID8ga0xpZ2h0IDoga0hlYXZ5KTsKKyAgICBpbnQgciA9IExvb2t1cChpKTsK
KyAgICBpZiAociA+PSAwKSB7CisgICAgICBjYWNoZWRfd2VpZ2h0ICs9IHdlaWdodDsKKyAgICAg
IEFTU0VSVF9FUSgxMDAwK2ksIHIpOworICAgIH0KKyAgfQorICBBU1NFUlRfTEUoY2FjaGVkX3dl
aWdodCwga0NhY2hlU2l6ZSArIGtDYWNoZVNpemUvMTApOworfQorCitURVNUKENhY2hlVGVzdCwg
TmV3SWQpIHsKKyAgdWludDY0X3QgYSA9IGNhY2hlXy0+TmV3SWQoKTsKKyAgdWludDY0X3QgYiA9
IGNhY2hlXy0+TmV3SWQoKTsKKyAgQVNTRVJUX05FKGEsIGIpOworfQorCit9ICAvLyBuYW1lc3Bh
Y2UgbGV2ZWxkYgorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpIHsKKyAgcmV0dXJu
IGxldmVsZGI6OnRlc3Q6OlJ1bkFsbFRlc3RzKCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9sZXZlbGRiL3V0aWwvY29kaW5nLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxk
Yi91dGlsL2NvZGluZy5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMWUzMTg2ZDVkY2ZmOTg0YTExNTYzZmQwZDA5
YzcxNDQyNmEyOWMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxk
Yi91dGlsL2NvZGluZy5jYwpAQCAtMCwwICsxLDE5NCBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDEx
IFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBm
b3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgorCisjaW5jbHVkZSAidXRpbC9jb2RpbmcuaCIKKwor
bmFtZXNwYWNlIGxldmVsZGIgeworCit2b2lkIEVuY29kZUZpeGVkMzIoY2hhciogYnVmLCB1aW50
MzJfdCB2YWx1ZSkgeworICBpZiAocG9ydDo6a0xpdHRsZUVuZGlhbikgeworICAgIG1lbWNweShi
dWYsICZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSk7CisgIH0gZWxzZSB7CisgICAgYnVmWzBdID0gdmFs
dWUgJiAweGZmOworICAgIGJ1ZlsxXSA9ICh2YWx1ZSA+PiA4KSAmIDB4ZmY7CisgICAgYnVmWzJd
ID0gKHZhbHVlID4+IDE2KSAmIDB4ZmY7CisgICAgYnVmWzNdID0gKHZhbHVlID4+IDI0KSAmIDB4
ZmY7CisgIH0KK30KKwordm9pZCBFbmNvZGVGaXhlZDY0KGNoYXIqIGJ1ZiwgdWludDY0X3QgdmFs
dWUpIHsKKyAgaWYgKHBvcnQ6OmtMaXR0bGVFbmRpYW4pIHsKKyAgICBtZW1jcHkoYnVmLCAmdmFs
dWUsIHNpemVvZih2YWx1ZSkpOworICB9IGVsc2UgeworICAgIGJ1ZlswXSA9IHZhbHVlICYgMHhm
ZjsKKyAgICBidWZbMV0gPSAodmFsdWUgPj4gOCkgJiAweGZmOworICAgIGJ1ZlsyXSA9ICh2YWx1
ZSA+PiAxNikgJiAweGZmOworICAgIGJ1ZlszXSA9ICh2YWx1ZSA+PiAyNCkgJiAweGZmOworICAg
IGJ1Zls0XSA9ICh2YWx1ZSA+PiAzMikgJiAweGZmOworICAgIGJ1Zls1XSA9ICh2YWx1ZSA+PiA0
MCkgJiAweGZmOworICAgIGJ1Zls2XSA9ICh2YWx1ZSA+PiA0OCkgJiAweGZmOworICAgIGJ1Zls3
XSA9ICh2YWx1ZSA+PiA1NikgJiAweGZmOworICB9Cit9CisKK3ZvaWQgUHV0Rml4ZWQzMihzdGQ6
OnN0cmluZyogZHN0LCB1aW50MzJfdCB2YWx1ZSkgeworICBjaGFyIGJ1ZltzaXplb2YodmFsdWUp
XTsKKyAgRW5jb2RlRml4ZWQzMihidWYsIHZhbHVlKTsKKyAgZHN0LT5hcHBlbmQoYnVmLCBzaXpl
b2YoYnVmKSk7Cit9CisKK3ZvaWQgUHV0Rml4ZWQ2NChzdGQ6OnN0cmluZyogZHN0LCB1aW50NjRf
dCB2YWx1ZSkgeworICBjaGFyIGJ1ZltzaXplb2YodmFsdWUpXTsKKyAgRW5jb2RlRml4ZWQ2NChi
dWYsIHZhbHVlKTsKKyAgZHN0LT5hcHBlbmQoYnVmLCBzaXplb2YoYnVmKSk7Cit9CisKK2NoYXIq
IEVuY29kZVZhcmludDMyKGNoYXIqIGRzdCwgdWludDMyX3QgdikgeworICAvLyBPcGVyYXRlIG9u
IGNoYXJhY3RlcnMgYXMgdW5zaWduZWRzCisgIHVuc2lnbmVkIGNoYXIqIHB0ciA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGRzdCk7CisgIHN0YXRpYyBjb25zdCBpbnQgQiA9IDEy
ODsKKyAgaWYgKHYgPCAoMTw8NykpIHsKKyAgICAqKHB0cisrKSA9IHY7CisgIH0gZWxzZSBpZiAo
diA8ICgxPDwxNCkpIHsKKyAgICAqKHB0cisrKSA9IHYgfCBCOworICAgICoocHRyKyspID0gdj4+
NzsKKyAgfSBlbHNlIGlmICh2IDwgKDE8PDIxKSkgeworICAgICoocHRyKyspID0gdiB8IEI7Cisg
ICAgKihwdHIrKykgPSAodj4+NykgfCBCOworICAgICoocHRyKyspID0gdj4+MTQ7CisgIH0gZWxz
ZSBpZiAodiA8ICgxPDwyOCkpIHsKKyAgICAqKHB0cisrKSA9IHYgfCBCOworICAgICoocHRyKysp
ID0gKHY+PjcpIHwgQjsKKyAgICAqKHB0cisrKSA9ICh2Pj4xNCkgfCBCOworICAgICoocHRyKysp
ID0gdj4+MjE7CisgIH0gZWxzZSB7CisgICAgKihwdHIrKykgPSB2IHwgQjsKKyAgICAqKHB0cisr
KSA9ICh2Pj43KSB8IEI7CisgICAgKihwdHIrKykgPSAodj4+MTQpIHwgQjsKKyAgICAqKHB0cisr
KSA9ICh2Pj4yMSkgfCBCOworICAgICoocHRyKyspID0gdj4+Mjg7CisgIH0KKyAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHB0cik7Cit9CisKK3ZvaWQgUHV0VmFyaW50MzIoc3RkOjpz
dHJpbmcqIGRzdCwgdWludDMyX3QgdikgeworICBjaGFyIGJ1Zls1XTsKKyAgY2hhciogcHRyID0g
RW5jb2RlVmFyaW50MzIoYnVmLCB2KTsKKyAgZHN0LT5hcHBlbmQoYnVmLCBwdHIgLSBidWYpOwor
fQorCitjaGFyKiBFbmNvZGVWYXJpbnQ2NChjaGFyKiBkc3QsIHVpbnQ2NF90IHYpIHsKKyAgc3Rh
dGljIGNvbnN0IGludCBCID0gMTI4OworICB1bnNpZ25lZCBjaGFyKiBwdHIgPSByZWludGVycHJl
dF9jYXN0PHVuc2lnbmVkIGNoYXIqPihkc3QpOworICB3aGlsZSAodiA+PSBCKSB7CisgICAgKihw
dHIrKykgPSAodiAmIChCLTEpKSB8IEI7CisgICAgdiA+Pj0gNzsKKyAgfQorICAqKHB0cisrKSA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KHYpOworICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4ocHRyKTsKK30KKwordm9pZCBQdXRWYXJpbnQ2NChzdGQ6OnN0cmluZyogZHN0LCB1
aW50NjRfdCB2KSB7CisgIGNoYXIgYnVmWzEwXTsKKyAgY2hhciogcHRyID0gRW5jb2RlVmFyaW50
NjQoYnVmLCB2KTsKKyAgZHN0LT5hcHBlbmQoYnVmLCBwdHIgLSBidWYpOworfQorCit2b2lkIFB1
dExlbmd0aFByZWZpeGVkU2xpY2Uoc3RkOjpzdHJpbmcqIGRzdCwgY29uc3QgU2xpY2UmIHZhbHVl
KSB7CisgIFB1dFZhcmludDMyKGRzdCwgdmFsdWUuc2l6ZSgpKTsKKyAgZHN0LT5hcHBlbmQodmFs
dWUuZGF0YSgpLCB2YWx1ZS5zaXplKCkpOworfQorCitpbnQgVmFyaW50TGVuZ3RoKHVpbnQ2NF90
IHYpIHsKKyAgaW50IGxlbiA9IDE7CisgIHdoaWxlICh2ID49IDEyOCkgeworICAgIHYgPj49IDc7
CisgICAgbGVuKys7CisgIH0KKyAgcmV0dXJuIGxlbjsKK30KKworY29uc3QgY2hhciogR2V0VmFy
aW50MzJQdHJGYWxsYmFjayhjb25zdCBjaGFyKiBwLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyKiBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdWludDMyX3QqIHZhbHVlKSB7CisgIHVpbnQzMl90IHJlc3VsdCA9IDA7CisgIGZv
ciAodWludDMyX3Qgc2hpZnQgPSAwOyBzaGlmdCA8PSAyOCAmJiBwIDwgbGltaXQ7IHNoaWZ0ICs9
IDcpIHsKKyAgICB1aW50MzJfdCBieXRlID0gKihyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2ln
bmVkIGNoYXIqPihwKSk7CisgICAgcCsrOworICAgIGlmIChieXRlICYgMTI4KSB7CisgICAgICAv
LyBNb3JlIGJ5dGVzIGFyZSBwcmVzZW50CisgICAgICByZXN1bHQgfD0gKChieXRlICYgMTI3KSA8
PCBzaGlmdCk7CisgICAgfSBlbHNlIHsKKyAgICAgIHJlc3VsdCB8PSAoYnl0ZSA8PCBzaGlmdCk7
CisgICAgICAqdmFsdWUgPSByZXN1bHQ7CisgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBjaGFyKj4ocCk7CisgICAgfQorICB9CisgIHJldHVybiBOVUxMOworfQorCitib29sIEdl
dFZhcmludDMyKFNsaWNlKiBpbnB1dCwgdWludDMyX3QqIHZhbHVlKSB7CisgIGNvbnN0IGNoYXIq
IHAgPSBpbnB1dC0+ZGF0YSgpOworICBjb25zdCBjaGFyKiBsaW1pdCA9IHAgKyBpbnB1dC0+c2l6
ZSgpOworICBjb25zdCBjaGFyKiBxID0gR2V0VmFyaW50MzJQdHIocCwgbGltaXQsIHZhbHVlKTsK
KyAgaWYgKHEgPT0gTlVMTCkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfSBlbHNlIHsKKyAgICAq
aW5wdXQgPSBTbGljZShxLCBsaW1pdCAtIHEpOworICAgIHJldHVybiB0cnVlOworICB9Cit9CisK
K2NvbnN0IGNoYXIqIEdldFZhcmludDY0UHRyKGNvbnN0IGNoYXIqIHAsIGNvbnN0IGNoYXIqIGxp
bWl0LCB1aW50NjRfdCogdmFsdWUpIHsKKyAgdWludDY0X3QgcmVzdWx0ID0gMDsKKyAgZm9yICh1
aW50MzJfdCBzaGlmdCA9IDA7IHNoaWZ0IDw9IDYzICYmIHAgPCBsaW1pdDsgc2hpZnQgKz0gNykg
eworICAgIHVpbnQ2NF90IGJ5dGUgPSAqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQg
Y2hhcio+KHApKTsKKyAgICBwKys7CisgICAgaWYgKGJ5dGUgJiAxMjgpIHsKKyAgICAgIC8vIE1v
cmUgYnl0ZXMgYXJlIHByZXNlbnQKKyAgICAgIHJlc3VsdCB8PSAoKGJ5dGUgJiAxMjcpIDw8IHNo
aWZ0KTsKKyAgICB9IGVsc2UgeworICAgICAgcmVzdWx0IHw9IChieXRlIDw8IHNoaWZ0KTsKKyAg
ICAgICp2YWx1ZSA9IHJlc3VsdDsKKyAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0
IGNoYXIqPihwKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIE5VTEw7Cit9CisKK2Jvb2wgR2V0VmFy
aW50NjQoU2xpY2UqIGlucHV0LCB1aW50NjRfdCogdmFsdWUpIHsKKyAgY29uc3QgY2hhciogcCA9
IGlucHV0LT5kYXRhKCk7CisgIGNvbnN0IGNoYXIqIGxpbWl0ID0gcCArIGlucHV0LT5zaXplKCk7
CisgIGNvbnN0IGNoYXIqIHEgPSBHZXRWYXJpbnQ2NFB0cihwLCBsaW1pdCwgdmFsdWUpOworICBp
ZiAocSA9PSBOVUxMKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9IGVsc2UgeworICAgICppbnB1
dCA9IFNsaWNlKHEsIGxpbWl0IC0gcSk7CisgICAgcmV0dXJuIHRydWU7CisgIH0KK30KKworY29u
c3QgY2hhciogR2V0TGVuZ3RoUHJlZml4ZWRTbGljZShjb25zdCBjaGFyKiBwLCBjb25zdCBjaGFy
KiBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2xpY2UqIHJlc3Vs
dCkgeworICB1aW50MzJfdCBsZW47CisgIHAgPSBHZXRWYXJpbnQzMlB0cihwLCBsaW1pdCwgJmxl
bik7CisgIGlmIChwID09IE5VTEwpIHJldHVybiBOVUxMOworICBpZiAocCArIGxlbiA+IGxpbWl0
KSByZXR1cm4gTlVMTDsKKyAgKnJlc3VsdCA9IFNsaWNlKHAsIGxlbik7CisgIHJldHVybiBwICsg
bGVuOworfQorCitib29sIEdldExlbmd0aFByZWZpeGVkU2xpY2UoU2xpY2UqIGlucHV0LCBTbGlj
ZSogcmVzdWx0KSB7CisgIHVpbnQzMl90IGxlbjsKKyAgaWYgKEdldFZhcmludDMyKGlucHV0LCAm
bGVuKSAmJgorICAgICAgaW5wdXQtPnNpemUoKSA+PSBsZW4pIHsKKyAgICAqcmVzdWx0ID0gU2xp
Y2UoaW5wdXQtPmRhdGEoKSwgbGVuKTsKKyAgICBpbnB1dC0+cmVtb3ZlX3ByZWZpeChsZW4pOwor
ICAgIHJldHVybiB0cnVlOworICB9IGVsc2UgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorfQor
Cit9ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGV2ZWxkYi91dGlsL2NvZGluZy5oIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2Nv
ZGluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjM5OTNjNGE3NTVkZmE1YTBmOGI5NjZmMWE2OThhMzcxZmEwODU1
NmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvY29k
aW5nLmgKQEAgLTAsMCArMSwxMDQgQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxE
QiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9m
IGNvbnRyaWJ1dG9ycy4KKy8vCisvLyBFbmRpYW4tbmV1dHJhbCBlbmNvZGluZzoKKy8vICogRml4
ZWQtbGVuZ3RoIG51bWJlcnMgYXJlIGVuY29kZWQgd2l0aCBsZWFzdC1zaWduaWZpY2FudCBieXRl
IGZpcnN0CisvLyAqIEluIGFkZGl0aW9uIHdlIHN1cHBvcnQgdmFyaWFibGUgbGVuZ3RoICJ2YXJp
bnQiIGVuY29kaW5nCisvLyAqIFN0cmluZ3MgYXJlIGVuY29kZWQgcHJlZml4ZWQgYnkgdGhlaXIg
bGVuZ3RoIGluIHZhcmludCBmb3JtYXQKKworI2lmbmRlZiBTVE9SQUdFX0xFVkVMREJfVVRJTF9D
T0RJTkdfSF8KKyNkZWZpbmUgU1RPUkFHRV9MRVZFTERCX1VUSUxfQ09ESU5HX0hfCisKKyNpbmNs
dWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdHJpbmc+Cisj
aW5jbHVkZSAibGV2ZWxkYi9zbGljZS5oIgorI2luY2x1ZGUgInBvcnQvcG9ydC5oIgorCituYW1l
c3BhY2UgbGV2ZWxkYiB7CisKKy8vIFN0YW5kYXJkIFB1dC4uLiByb3V0aW5lcyBhcHBlbmQgdG8g
YSBzdHJpbmcKK2V4dGVybiB2b2lkIFB1dEZpeGVkMzIoc3RkOjpzdHJpbmcqIGRzdCwgdWludDMy
X3QgdmFsdWUpOworZXh0ZXJuIHZvaWQgUHV0Rml4ZWQ2NChzdGQ6OnN0cmluZyogZHN0LCB1aW50
NjRfdCB2YWx1ZSk7CitleHRlcm4gdm9pZCBQdXRWYXJpbnQzMihzdGQ6OnN0cmluZyogZHN0LCB1
aW50MzJfdCB2YWx1ZSk7CitleHRlcm4gdm9pZCBQdXRWYXJpbnQ2NChzdGQ6OnN0cmluZyogZHN0
LCB1aW50NjRfdCB2YWx1ZSk7CitleHRlcm4gdm9pZCBQdXRMZW5ndGhQcmVmaXhlZFNsaWNlKHN0
ZDo6c3RyaW5nKiBkc3QsIGNvbnN0IFNsaWNlJiB2YWx1ZSk7CisKKy8vIFN0YW5kYXJkIEdldC4u
LiByb3V0aW5lcyBwYXJzZSBhIHZhbHVlIGZyb20gdGhlIGJlZ2lubmluZyBvZiBhIFNsaWNlCisv
LyBhbmQgYWR2YW5jZSB0aGUgc2xpY2UgcGFzdCB0aGUgcGFyc2VkIHZhbHVlLgorZXh0ZXJuIGJv
b2wgR2V0VmFyaW50MzIoU2xpY2UqIGlucHV0LCB1aW50MzJfdCogdmFsdWUpOworZXh0ZXJuIGJv
b2wgR2V0VmFyaW50NjQoU2xpY2UqIGlucHV0LCB1aW50NjRfdCogdmFsdWUpOworZXh0ZXJuIGJv
b2wgR2V0TGVuZ3RoUHJlZml4ZWRTbGljZShTbGljZSogaW5wdXQsIFNsaWNlKiByZXN1bHQpOwor
CisvLyBQb2ludGVyLWJhc2VkIHZhcmlhbnRzIG9mIEdldFZhcmludC4uLiAgVGhlc2UgZWl0aGVy
IHN0b3JlIGEgdmFsdWUKKy8vIGluICp2IGFuZCByZXR1cm4gYSBwb2ludGVyIGp1c3QgcGFzdCB0
aGUgcGFyc2VkIHZhbHVlLCBvciByZXR1cm4KKy8vIE5VTEwgb24gZXJyb3IuICBUaGVzZSByb3V0
aW5lcyBvbmx5IGxvb2sgYXQgYnl0ZXMgaW4gdGhlIHJhbmdlCisvLyBbcC4ubGltaXQtMV0KK2V4
dGVybiBjb25zdCBjaGFyKiBHZXRWYXJpbnQzMlB0cihjb25zdCBjaGFyKiBwLGNvbnN0IGNoYXIq
IGxpbWl0LCB1aW50MzJfdCogdik7CitleHRlcm4gY29uc3QgY2hhciogR2V0VmFyaW50NjRQdHIo
Y29uc3QgY2hhciogcCxjb25zdCBjaGFyKiBsaW1pdCwgdWludDY0X3QqIHYpOworCisvLyBSZXR1
cm5zIHRoZSBsZW5ndGggb2YgdGhlIHZhcmludDMyIG9yIHZhcmludDY0IGVuY29kaW5nIG9mICJ2
IgorZXh0ZXJuIGludCBWYXJpbnRMZW5ndGgodWludDY0X3Qgdik7CisKKy8vIExvd2VyLWxldmVs
IHZlcnNpb25zIG9mIFB1dC4uLiB0aGF0IHdyaXRlIGRpcmVjdGx5IGludG8gYSBjaGFyYWN0ZXIg
YnVmZmVyCisvLyBSRVFVSVJFUzogZHN0IGhhcyBlbm91Z2ggc3BhY2UgZm9yIHRoZSB2YWx1ZSBi
ZWluZyB3cml0dGVuCitleHRlcm4gdm9pZCBFbmNvZGVGaXhlZDMyKGNoYXIqIGRzdCwgdWludDMy
X3QgdmFsdWUpOworZXh0ZXJuIHZvaWQgRW5jb2RlRml4ZWQ2NChjaGFyKiBkc3QsIHVpbnQ2NF90
IHZhbHVlKTsKKworLy8gTG93ZXItbGV2ZWwgdmVyc2lvbnMgb2YgUHV0Li4uIHRoYXQgd3JpdGUg
ZGlyZWN0bHkgaW50byBhIGNoYXJhY3RlciBidWZmZXIKKy8vIGFuZCByZXR1cm4gYSBwb2ludGVy
IGp1c3QgcGFzdCB0aGUgbGFzdCBieXRlIHdyaXR0ZW4uCisvLyBSRVFVSVJFUzogZHN0IGhhcyBl
bm91Z2ggc3BhY2UgZm9yIHRoZSB2YWx1ZSBiZWluZyB3cml0dGVuCitleHRlcm4gY2hhciogRW5j
b2RlVmFyaW50MzIoY2hhciogZHN0LCB1aW50MzJfdCB2YWx1ZSk7CitleHRlcm4gY2hhciogRW5j
b2RlVmFyaW50NjQoY2hhciogZHN0LCB1aW50NjRfdCB2YWx1ZSk7CisKKy8vIExvd2VyLWxldmVs
IHZlcnNpb25zIG9mIEdldC4uLiB0aGF0IHJlYWQgZGlyZWN0bHkgZnJvbSBhIGNoYXJhY3RlciBi
dWZmZXIKKy8vIHdpdGhvdXQgYW55IGJvdW5kcyBjaGVja2luZy4KKworaW5saW5lIHVpbnQzMl90
IERlY29kZUZpeGVkMzIoY29uc3QgY2hhciogcHRyKSB7CisgIGlmIChwb3J0OjprTGl0dGxlRW5k
aWFuKSB7CisgICAgLy8gTG9hZCB0aGUgcmF3IGJ5dGVzCisgICAgdWludDMyX3QgcmVzdWx0Owor
ICAgIG1lbWNweSgmcmVzdWx0LCBwdHIsIHNpemVvZihyZXN1bHQpKTsgIC8vIGdjYyBvcHRpbWl6
ZXMgdGhpcyB0byBhIHBsYWluIGxvYWQKKyAgICByZXR1cm4gcmVzdWx0OworICB9IGVsc2Ugewor
ICAgIHJldHVybiAoKHN0YXRpY19jYXN0PHVpbnQzMl90PihzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyPihwdHJbMF0pKSkKKyAgICAgICAgfCAoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXI+KHB0clsxXSkpIDw8IDgpCisgICAgICAgIHwgKHN0YXRpY19jYXN0
PHVpbnQzMl90PihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihwdHJbMl0pKSA8PCAxNikKKyAg
ICAgICAgfCAoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+
KHB0clszXSkpIDw8IDI0KSk7CisgIH0KK30KKworaW5saW5lIHVpbnQ2NF90IERlY29kZUZpeGVk
NjQoY29uc3QgY2hhciogcHRyKSB7CisgIGlmIChwb3J0OjprTGl0dGxlRW5kaWFuKSB7CisgICAg
Ly8gTG9hZCB0aGUgcmF3IGJ5dGVzCisgICAgdWludDY0X3QgcmVzdWx0OworICAgIG1lbWNweSgm
cmVzdWx0LCBwdHIsIHNpemVvZihyZXN1bHQpKTsgIC8vIGdjYyBvcHRpbWl6ZXMgdGhpcyB0byBh
IHBsYWluIGxvYWQKKyAgICByZXR1cm4gcmVzdWx0OworICB9IGVsc2UgeworICAgIHVpbnQ2NF90
IGxvID0gRGVjb2RlRml4ZWQzMihwdHIpOworICAgIHVpbnQ2NF90IGhpID0gRGVjb2RlRml4ZWQz
MihwdHIgKyA0KTsKKyAgICByZXR1cm4gKGhpIDw8IDMyKSB8IGxvOworICB9Cit9CisKKy8vIElu
dGVybmFsIHJvdXRpbmUgZm9yIHVzZSBieSBmYWxsYmFjayBwYXRoIG9mIEdldFZhcmludDMyUHRy
CitleHRlcm4gY29uc3QgY2hhciogR2V0VmFyaW50MzJQdHJGYWxsYmFjayhjb25zdCBjaGFyKiBw
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciog
bGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJf
dCogdmFsdWUpOworaW5saW5lIGNvbnN0IGNoYXIqIEdldFZhcmludDMyUHRyKGNvbnN0IGNoYXIq
IHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogbGltaXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QqIHZhbHVlKSB7Cisg
IGlmIChwIDwgbGltaXQpIHsKKyAgICB1aW50MzJfdCByZXN1bHQgPSAqKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KHApKTsKKyAgICBpZiAoKHJlc3VsdCAmIDEyOCkgPT0g
MCkgeworICAgICAgKnZhbHVlID0gcmVzdWx0OworICAgICAgcmV0dXJuIHAgKyAxOworICAgIH0K
KyAgfQorICByZXR1cm4gR2V0VmFyaW50MzJQdHJGYWxsYmFjayhwLCBsaW1pdCwgdmFsdWUpOwor
fQorCit9ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgorCisjZW5kaWYgIC8vIFNUT1JBR0VfTEVWRUxE
Ql9VVElMX0NPRElOR19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91
dGlsL2NvZGluZ190ZXN0LmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2NvZGlu
Z190ZXN0LmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJjNTJiMTdiNjAyYjhkYzFjYjM2YmQ0OWQyYmFmZWFiZDRh
MzVhZjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwv
Y29kaW5nX3Rlc3QuY2MKQEAgLTAsMCArMSwxOTYgQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBU
aGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9y
IG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2luY2x1ZGUgInV0aWwvY29kaW5nLmgiCisKKyNp
bmNsdWRlICJ1dGlsL3Rlc3RoYXJuZXNzLmgiCisKK25hbWVzcGFjZSBsZXZlbGRiIHsKKworY2xh
c3MgQ29kaW5nIHsgfTsKKworVEVTVChDb2RpbmcsIEZpeGVkMzIpIHsKKyAgc3RkOjpzdHJpbmcg
czsKKyAgZm9yICh1aW50MzJfdCB2ID0gMDsgdiA8IDEwMDAwMDsgdisrKSB7CisgICAgUHV0Rml4
ZWQzMigmcywgdik7CisgIH0KKworICBjb25zdCBjaGFyKiBwID0gcy5kYXRhKCk7CisgIGZvciAo
dWludDMyX3QgdiA9IDA7IHYgPCAxMDAwMDA7IHYrKykgeworICAgIHVpbnQzMl90IGFjdHVhbCA9
IERlY29kZUZpeGVkMzIocCk7CisgICAgQVNTRVJUX0VRKHYsIGFjdHVhbCk7CisgICAgcCArPSBz
aXplb2YodWludDMyX3QpOworICB9Cit9CisKK1RFU1QoQ29kaW5nLCBGaXhlZDY0KSB7CisgIHN0
ZDo6c3RyaW5nIHM7CisgIGZvciAoaW50IHBvd2VyID0gMDsgcG93ZXIgPD0gNjM7IHBvd2VyKysp
IHsKKyAgICB1aW50NjRfdCB2ID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KDEpIDw8IHBvd2VyOwor
ICAgIFB1dEZpeGVkNjQoJnMsIHYgLSAxKTsKKyAgICBQdXRGaXhlZDY0KCZzLCB2ICsgMCk7Cisg
ICAgUHV0Rml4ZWQ2NCgmcywgdiArIDEpOworICB9CisKKyAgY29uc3QgY2hhciogcCA9IHMuZGF0
YSgpOworICBmb3IgKGludCBwb3dlciA9IDA7IHBvd2VyIDw9IDYzOyBwb3dlcisrKSB7CisgICAg
dWludDY0X3QgdiA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PigxKSA8PCBwb3dlcjsKKyAgICB1aW50
NjRfdCBhY3R1YWw7CisgICAgYWN0dWFsID0gRGVjb2RlRml4ZWQ2NChwKTsKKyAgICBBU1NFUlRf
RVEodi0xLCBhY3R1YWwpOworICAgIHAgKz0gc2l6ZW9mKHVpbnQ2NF90KTsKKworICAgIGFjdHVh
bCA9IERlY29kZUZpeGVkNjQocCk7CisgICAgQVNTRVJUX0VRKHYrMCwgYWN0dWFsKTsKKyAgICBw
ICs9IHNpemVvZih1aW50NjRfdCk7CisKKyAgICBhY3R1YWwgPSBEZWNvZGVGaXhlZDY0KHApOwor
ICAgIEFTU0VSVF9FUSh2KzEsIGFjdHVhbCk7CisgICAgcCArPSBzaXplb2YodWludDY0X3QpOwor
ICB9Cit9CisKKy8vIFRlc3QgdGhhdCBlbmNvZGluZyByb3V0aW5lcyBnZW5lcmF0ZSBsaXR0bGUt
ZW5kaWFuIGVuY29kaW5ncworVEVTVChDb2RpbmcsIEVuY29kaW5nT3V0cHV0KSB7CisgIHN0ZDo6
c3RyaW5nIGRzdDsKKyAgUHV0Rml4ZWQzMigmZHN0LCAweDA0MDMwMjAxKTsKKyAgQVNTRVJUX0VR
KDQsIGRzdC5zaXplKCkpOworICBBU1NFUlRfRVEoMHgwMSwgc3RhdGljX2Nhc3Q8aW50Pihkc3Rb
MF0pKTsKKyAgQVNTRVJUX0VRKDB4MDIsIHN0YXRpY19jYXN0PGludD4oZHN0WzFdKSk7CisgIEFT
U0VSVF9FUSgweDAzLCBzdGF0aWNfY2FzdDxpbnQ+KGRzdFsyXSkpOworICBBU1NFUlRfRVEoMHgw
NCwgc3RhdGljX2Nhc3Q8aW50Pihkc3RbM10pKTsKKworICBkc3QuY2xlYXIoKTsKKyAgUHV0Rml4
ZWQ2NCgmZHN0LCAweDA4MDcwNjA1MDQwMzAyMDF1bGwpOworICBBU1NFUlRfRVEoOCwgZHN0LnNp
emUoKSk7CisgIEFTU0VSVF9FUSgweDAxLCBzdGF0aWNfY2FzdDxpbnQ+KGRzdFswXSkpOworICBB
U1NFUlRfRVEoMHgwMiwgc3RhdGljX2Nhc3Q8aW50Pihkc3RbMV0pKTsKKyAgQVNTRVJUX0VRKDB4
MDMsIHN0YXRpY19jYXN0PGludD4oZHN0WzJdKSk7CisgIEFTU0VSVF9FUSgweDA0LCBzdGF0aWNf
Y2FzdDxpbnQ+KGRzdFszXSkpOworICBBU1NFUlRfRVEoMHgwNSwgc3RhdGljX2Nhc3Q8aW50Pihk
c3RbNF0pKTsKKyAgQVNTRVJUX0VRKDB4MDYsIHN0YXRpY19jYXN0PGludD4oZHN0WzVdKSk7Cisg
IEFTU0VSVF9FUSgweDA3LCBzdGF0aWNfY2FzdDxpbnQ+KGRzdFs2XSkpOworICBBU1NFUlRfRVEo
MHgwOCwgc3RhdGljX2Nhc3Q8aW50Pihkc3RbN10pKTsKK30KKworVEVTVChDb2RpbmcsIFZhcmlu
dDMyKSB7CisgIHN0ZDo6c3RyaW5nIHM7CisgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCAoMzIg
KiAzMik7IGkrKykgeworICAgIHVpbnQzMl90IHYgPSAoaSAvIDMyKSA8PCAoaSAlIDMyKTsKKyAg
ICBQdXRWYXJpbnQzMigmcywgdik7CisgIH0KKworICBjb25zdCBjaGFyKiBwID0gcy5kYXRhKCk7
CisgIGNvbnN0IGNoYXIqIGxpbWl0ID0gcCArIHMuc2l6ZSgpOworICBmb3IgKHVpbnQzMl90IGkg
PSAwOyBpIDwgKDMyICogMzIpOyBpKyspIHsKKyAgICB1aW50MzJfdCBleHBlY3RlZCA9IChpIC8g
MzIpIDw8IChpICUgMzIpOworICAgIHVpbnQzMl90IGFjdHVhbDsKKyAgICBjb25zdCBjaGFyKiBz
dGFydCA9IHA7CisgICAgcCA9IEdldFZhcmludDMyUHRyKHAsIGxpbWl0LCAmYWN0dWFsKTsKKyAg
ICBBU1NFUlRfVFJVRShwICE9IE5VTEwpOworICAgIEFTU0VSVF9FUShleHBlY3RlZCwgYWN0dWFs
KTsKKyAgICBBU1NFUlRfRVEoVmFyaW50TGVuZ3RoKGFjdHVhbCksIHAgLSBzdGFydCk7CisgIH0K
KyAgQVNTRVJUX0VRKHAsIHMuZGF0YSgpICsgcy5zaXplKCkpOworfQorCitURVNUKENvZGluZywg
VmFyaW50NjQpIHsKKyAgLy8gQ29uc3RydWN0IHRoZSBsaXN0IG9mIHZhbHVlcyB0byBjaGVjawor
ICBzdGQ6OnZlY3Rvcjx1aW50NjRfdD4gdmFsdWVzOworICAvLyBTb21lIHNwZWNpYWwgdmFsdWVz
CisgIHZhbHVlcy5wdXNoX2JhY2soMCk7CisgIHZhbHVlcy5wdXNoX2JhY2soMTAwKTsKKyAgdmFs
dWVzLnB1c2hfYmFjayh+c3RhdGljX2Nhc3Q8dWludDY0X3Q+KDApKTsKKyAgdmFsdWVzLnB1c2hf
YmFjayh+c3RhdGljX2Nhc3Q8dWludDY0X3Q+KDApIC0gMSk7CisgIGZvciAodWludDMyX3QgayA9
IDA7IGsgPCA2NDsgaysrKSB7CisgICAgLy8gVGVzdCB2YWx1ZXMgbmVhciBwb3dlcnMgb2YgdHdv
CisgICAgY29uc3QgdWludDY0X3QgcG93ZXIgPSAxdWxsIDw8IGs7CisgICAgdmFsdWVzLnB1c2hf
YmFjayhwb3dlcik7CisgICAgdmFsdWVzLnB1c2hfYmFjayhwb3dlci0xKTsKKyAgICB2YWx1ZXMu
cHVzaF9iYWNrKHBvd2VyKzEpOworICB9OworCisgIHN0ZDo6c3RyaW5nIHM7CisgIGZvciAoaW50
IGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgaSsrKSB7CisgICAgUHV0VmFyaW50NjQoJnMsIHZh
bHVlc1tpXSk7CisgIH0KKworICBjb25zdCBjaGFyKiBwID0gcy5kYXRhKCk7CisgIGNvbnN0IGNo
YXIqIGxpbWl0ID0gcCArIHMuc2l6ZSgpOworICBmb3IgKGludCBpID0gMDsgaSA8IHZhbHVlcy5z
aXplKCk7IGkrKykgeworICAgIEFTU0VSVF9UUlVFKHAgPCBsaW1pdCk7CisgICAgdWludDY0X3Qg
YWN0dWFsOworICAgIGNvbnN0IGNoYXIqIHN0YXJ0ID0gcDsKKyAgICBwID0gR2V0VmFyaW50NjRQ
dHIocCwgbGltaXQsICZhY3R1YWwpOworICAgIEFTU0VSVF9UUlVFKHAgIT0gTlVMTCk7CisgICAg
QVNTRVJUX0VRKHZhbHVlc1tpXSwgYWN0dWFsKTsKKyAgICBBU1NFUlRfRVEoVmFyaW50TGVuZ3Ro
KGFjdHVhbCksIHAgLSBzdGFydCk7CisgIH0KKyAgQVNTRVJUX0VRKHAsIGxpbWl0KTsKKworfQor
CitURVNUKENvZGluZywgVmFyaW50MzJPdmVyZmxvdykgeworICB1aW50MzJfdCByZXN1bHQ7Cisg
IHN0ZDo6c3RyaW5nIGlucHV0KCJceDgxXHg4Mlx4ODNceDg0XHg4NVx4MTEiKTsKKyAgQVNTRVJU
X1RSVUUoR2V0VmFyaW50MzJQdHIoaW5wdXQuZGF0YSgpLCBpbnB1dC5kYXRhKCkgKyBpbnB1dC5z
aXplKCksICZyZXN1bHQpCisgICAgICAgICAgICAgID09IE5VTEwpOworfQorCitURVNUKENvZGlu
ZywgVmFyaW50MzJUcnVuY2F0aW9uKSB7CisgIHVpbnQzMl90IGxhcmdlX3ZhbHVlID0gKDF1IDw8
IDMxKSArIDEwMDsKKyAgc3RkOjpzdHJpbmcgczsKKyAgUHV0VmFyaW50MzIoJnMsIGxhcmdlX3Zh
bHVlKTsKKyAgdWludDMyX3QgcmVzdWx0OworICBmb3IgKGludCBsZW4gPSAwOyBsZW4gPCBzLnNp
emUoKSAtIDE7IGxlbisrKSB7CisgICAgQVNTRVJUX1RSVUUoR2V0VmFyaW50MzJQdHIocy5kYXRh
KCksIHMuZGF0YSgpICsgbGVuLCAmcmVzdWx0KSA9PSBOVUxMKTsKKyAgfQorICBBU1NFUlRfVFJV
RShHZXRWYXJpbnQzMlB0cihzLmRhdGEoKSwgcy5kYXRhKCkgKyBzLnNpemUoKSwgJnJlc3VsdCkg
IT0gTlVMTCk7CisgIEFTU0VSVF9FUShsYXJnZV92YWx1ZSwgcmVzdWx0KTsKK30KKworVEVTVChD
b2RpbmcsIFZhcmludDY0T3ZlcmZsb3cpIHsKKyAgdWludDY0X3QgcmVzdWx0OworICBzdGQ6OnN0
cmluZyBpbnB1dCgiXHg4MVx4ODJceDgzXHg4NFx4ODVceDgxXHg4Mlx4ODNceDg0XHg4NVx4MTEi
KTsKKyAgQVNTRVJUX1RSVUUoR2V0VmFyaW50NjRQdHIoaW5wdXQuZGF0YSgpLCBpbnB1dC5kYXRh
KCkgKyBpbnB1dC5zaXplKCksICZyZXN1bHQpCisgICAgICAgICAgICAgID09IE5VTEwpOworfQor
CitURVNUKENvZGluZywgVmFyaW50NjRUcnVuY2F0aW9uKSB7CisgIHVpbnQ2NF90IGxhcmdlX3Zh
bHVlID0gKDF1bGwgPDwgNjMpICsgMTAwdWxsOworICBzdGQ6OnN0cmluZyBzOworICBQdXRWYXJp
bnQ2NCgmcywgbGFyZ2VfdmFsdWUpOworICB1aW50NjRfdCByZXN1bHQ7CisgIGZvciAoaW50IGxl
biA9IDA7IGxlbiA8IHMuc2l6ZSgpIC0gMTsgbGVuKyspIHsKKyAgICBBU1NFUlRfVFJVRShHZXRW
YXJpbnQ2NFB0cihzLmRhdGEoKSwgcy5kYXRhKCkgKyBsZW4sICZyZXN1bHQpID09IE5VTEwpOwor
ICB9CisgIEFTU0VSVF9UUlVFKEdldFZhcmludDY0UHRyKHMuZGF0YSgpLCBzLmRhdGEoKSArIHMu
c2l6ZSgpLCAmcmVzdWx0KSAhPSBOVUxMKTsKKyAgQVNTRVJUX0VRKGxhcmdlX3ZhbHVlLCByZXN1
bHQpOworfQorCitURVNUKENvZGluZywgU3RyaW5ncykgeworICBzdGQ6OnN0cmluZyBzOworICBQ
dXRMZW5ndGhQcmVmaXhlZFNsaWNlKCZzLCBTbGljZSgiIikpOworICBQdXRMZW5ndGhQcmVmaXhl
ZFNsaWNlKCZzLCBTbGljZSgiZm9vIikpOworICBQdXRMZW5ndGhQcmVmaXhlZFNsaWNlKCZzLCBT
bGljZSgiYmFyIikpOworICBQdXRMZW5ndGhQcmVmaXhlZFNsaWNlKCZzLCBTbGljZShzdGQ6OnN0
cmluZygyMDAsICd4JykpKTsKKworICBTbGljZSBpbnB1dChzKTsKKyAgU2xpY2UgdjsKKyAgQVNT
RVJUX1RSVUUoR2V0TGVuZ3RoUHJlZml4ZWRTbGljZSgmaW5wdXQsICZ2KSk7CisgIEFTU0VSVF9F
USgiIiwgdi5Ub1N0cmluZygpKTsKKyAgQVNTRVJUX1RSVUUoR2V0TGVuZ3RoUHJlZml4ZWRTbGlj
ZSgmaW5wdXQsICZ2KSk7CisgIEFTU0VSVF9FUSgiZm9vIiwgdi5Ub1N0cmluZygpKTsKKyAgQVNT
RVJUX1RSVUUoR2V0TGVuZ3RoUHJlZml4ZWRTbGljZSgmaW5wdXQsICZ2KSk7CisgIEFTU0VSVF9F
USgiYmFyIiwgdi5Ub1N0cmluZygpKTsKKyAgQVNTRVJUX1RSVUUoR2V0TGVuZ3RoUHJlZml4ZWRT
bGljZSgmaW5wdXQsICZ2KSk7CisgIEFTU0VSVF9FUShzdGQ6OnN0cmluZygyMDAsICd4JyksIHYu
VG9TdHJpbmcoKSk7CisgIEFTU0VSVF9FUSgiIiwgaW5wdXQuVG9TdHJpbmcoKSk7Cit9CisKK30g
IC8vIG5hbWVzcGFjZSBsZXZlbGRiCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikg
eworICByZXR1cm4gbGV2ZWxkYjo6dGVzdDo6UnVuQWxsVGVzdHMoKTsKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9jb21wYXJhdG9yLmNjIGIvU291cmNlL1Ro
aXJkUGFydHkvbGV2ZWxkYi91dGlsL2NvbXBhcmF0b3IuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGI3YjU3MjRl
ZjNiZTVmNmM3ZWQ5Zjk1ZGNiNDdhOTlmMmVlMmY5YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9jb21wYXJhdG9yLmNjCkBAIC0wLDAgKzEsODEgQEAK
Ky8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4g
U2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2luY2x1
ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlICJsZXZlbGRiL2Nv
bXBhcmF0b3IuaCIKKyNpbmNsdWRlICJsZXZlbGRiL3NsaWNlLmgiCisjaW5jbHVkZSAicG9ydC9w
b3J0LmgiCisjaW5jbHVkZSAidXRpbC9sb2dnaW5nLmgiCisKK25hbWVzcGFjZSBsZXZlbGRiIHsK
KworQ29tcGFyYXRvcjo6fkNvbXBhcmF0b3IoKSB7IH0KKworbmFtZXNwYWNlIHsKK2NsYXNzIEJ5
dGV3aXNlQ29tcGFyYXRvckltcGwgOiBwdWJsaWMgQ29tcGFyYXRvciB7CisgcHVibGljOgorICBC
eXRld2lzZUNvbXBhcmF0b3JJbXBsKCkgeyB9CisKKyAgdmlydHVhbCBjb25zdCBjaGFyKiBOYW1l
KCkgY29uc3QgeworICAgIHJldHVybiAibGV2ZWxkYi5CeXRld2lzZUNvbXBhcmF0b3IiOworICB9
CisKKyAgdmlydHVhbCBpbnQgQ29tcGFyZShjb25zdCBTbGljZSYgYSwgY29uc3QgU2xpY2UmIGIp
IGNvbnN0IHsKKyAgICByZXR1cm4gYS5jb21wYXJlKGIpOworICB9CisKKyAgdmlydHVhbCB2b2lk
IEZpbmRTaG9ydGVzdFNlcGFyYXRvcigKKyAgICAgIHN0ZDo6c3RyaW5nKiBzdGFydCwKKyAgICAg
IGNvbnN0IFNsaWNlJiBsaW1pdCkgY29uc3QgeworICAgIC8vIEZpbmQgbGVuZ3RoIG9mIGNvbW1v
biBwcmVmaXgKKyAgICBzaXplX3QgbWluX2xlbmd0aCA9IHN0ZDo6bWluKHN0YXJ0LT5zaXplKCks
IGxpbWl0LnNpemUoKSk7CisgICAgc2l6ZV90IGRpZmZfaW5kZXggPSAwOworICAgIHdoaWxlICgo
ZGlmZl9pbmRleCA8IG1pbl9sZW5ndGgpICYmCisgICAgICAgICAgICgoKnN0YXJ0KVtkaWZmX2lu
ZGV4XSA9PSBsaW1pdFtkaWZmX2luZGV4XSkpIHsKKyAgICAgIGRpZmZfaW5kZXgrKzsKKyAgICB9
CisKKyAgICBpZiAoZGlmZl9pbmRleCA+PSBtaW5fbGVuZ3RoKSB7CisgICAgICAvLyBEbyBub3Qg
c2hvcnRlbiBpZiBvbmUgc3RyaW5nIGlzIGEgcHJlZml4IG9mIHRoZSBvdGhlcgorICAgIH0gZWxz
ZSB7CisgICAgICB1aW50OF90IGRpZmZfYnl0ZSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KCgqc3Rh
cnQpW2RpZmZfaW5kZXhdKTsKKyAgICAgIGlmIChkaWZmX2J5dGUgPCBzdGF0aWNfY2FzdDx1aW50
OF90PigweGZmKSAmJgorICAgICAgICAgIGRpZmZfYnl0ZSArIDEgPCBzdGF0aWNfY2FzdDx1aW50
OF90PihsaW1pdFtkaWZmX2luZGV4XSkpIHsKKyAgICAgICAgKCpzdGFydClbZGlmZl9pbmRleF0r
KzsKKyAgICAgICAgc3RhcnQtPnJlc2l6ZShkaWZmX2luZGV4ICsgMSk7CisgICAgICAgIGFzc2Vy
dChDb21wYXJlKCpzdGFydCwgbGltaXQpIDwgMCk7CisgICAgICB9CisgICAgfQorICB9CisKKyAg
dmlydHVhbCB2b2lkIEZpbmRTaG9ydFN1Y2Nlc3NvcihzdGQ6OnN0cmluZyoga2V5KSBjb25zdCB7
CisgICAgLy8gRmluZCBmaXJzdCBjaGFyYWN0ZXIgdGhhdCBjYW4gYmUgaW5jcmVtZW50ZWQKKyAg
ICBzaXplX3QgbiA9IGtleS0+c2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbjsg
aSsrKSB7CisgICAgICBjb25zdCB1aW50OF90IGJ5dGUgPSAoKmtleSlbaV07CisgICAgICBpZiAo
Ynl0ZSAhPSBzdGF0aWNfY2FzdDx1aW50OF90PigweGZmKSkgeworICAgICAgICAoKmtleSlbaV0g
PSBieXRlICsgMTsKKyAgICAgICAga2V5LT5yZXNpemUoaSsxKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgICAgfQorICAgIH0KKyAgICAvLyAqa2V5IGlzIGEgcnVuIG9mIDB4ZmZzLiAgTGVhdmUgaXQg
YWxvbmUuCisgIH0KK307Cit9ICAvLyBuYW1lc3BhY2UKKworc3RhdGljIHBvcnQ6Ok9uY2VUeXBl
IG9uY2UgPSBMRVZFTERCX09OQ0VfSU5JVDsKK3N0YXRpYyBjb25zdCBDb21wYXJhdG9yKiBieXRl
d2lzZTsKKworc3RhdGljIHZvaWQgSW5pdE1vZHVsZSgpIHsKKyAgYnl0ZXdpc2UgPSBuZXcgQnl0
ZXdpc2VDb21wYXJhdG9ySW1wbDsKK30KKworY29uc3QgQ29tcGFyYXRvciogQnl0ZXdpc2VDb21w
YXJhdG9yKCkgeworICBwb3J0OjpJbml0T25jZSgmb25jZSwgSW5pdE1vZHVsZSk7CisgIHJldHVy
biBieXRld2lzZTsKK30KKworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9jcmMzMmMuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9sZXZlbGRiL3V0aWwvY3JjMzJjLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZkYjllNzcwNzc0ZDdlYmMwYjBj
M2JjNGEyMzBiNWI4MjU0Y2QxZjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9sZXZlbGRiL3V0aWwvY3JjMzJjLmNjCkBAIC0wLDAgKzEsMzMyIEBACisvLyBDb3B5cmlnaHQg
KGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9S
UyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCisvLworLy8gQSBwb3J0YWJsZSBpbXBs
ZW1lbnRhdGlvbiBvZiBjcmMzMmMsIG9wdGltaXplZCB0byBoYW5kbGUKKy8vIGZvdXIgYnl0ZXMg
YXQgYSB0aW1lLgorCisjaW5jbHVkZSAidXRpbC9jcmMzMmMuaCIKKworI2luY2x1ZGUgPHN0ZGlu
dC5oPgorI2luY2x1ZGUgInV0aWwvY29kaW5nLmgiCisKK25hbWVzcGFjZSBsZXZlbGRiIHsKK25h
bWVzcGFjZSBjcmMzMmMgeworCitzdGF0aWMgY29uc3QgdWludDMyX3QgdGFibGUwX1syNTZdID0g
eworICAweDAwMDAwMDAwLCAweGYyNmI4MzAzLCAweGUxM2I3MGY3LCAweDEzNTBmM2Y0LAorICAw
eGM3OWE5NzFmLCAweDM1ZjExNDFjLCAweDI2YTFlN2U4LCAweGQ0Y2E2NGViLAorICAweDhhZDk1
OGNmLCAweDc4YjJkYmNjLCAweDZiZTIyODM4LCAweDk5ODlhYjNiLAorICAweDRkNDNjZmQwLCAw
eGJmMjg0Y2QzLCAweGFjNzhiZjI3LCAweDVlMTMzYzI0LAorICAweDEwNWVjNzZmLCAweGUyMzU0
NDZjLCAweGYxNjViNzk4LCAweDAzMGUzNDliLAorICAweGQ3YzQ1MDcwLCAweDI1YWZkMzczLCAw
eDM2ZmYyMDg3LCAweGM0OTRhMzg0LAorICAweDlhODc5ZmEwLCAweDY4ZWMxY2EzLCAweDdiYmNl
ZjU3LCAweDg5ZDc2YzU0LAorICAweDVkMWQwOGJmLCAweGFmNzY4YmJjLCAweGJjMjY3ODQ4LCAw
eDRlNGRmYjRiLAorICAweDIwYmQ4ZWRlLCAweGQyZDYwZGRkLCAweGMxODZmZTI5LCAweDMzZWQ3
ZDJhLAorICAweGU3MjcxOWMxLCAweDE1NGM5YWMyLCAweDA2MWM2OTM2LCAweGY0NzdlYTM1LAor
ICAweGFhNjRkNjExLCAweDU4MGY1NTEyLCAweDRiNWZhNmU2LCAweGI5MzQyNWU1LAorICAweDZk
ZmU0MTBlLCAweDlmOTVjMjBkLCAweDhjYzUzMWY5LCAweDdlYWViMmZhLAorICAweDMwZTM0OWIx
LCAweGMyODhjYWIyLCAweGQxZDgzOTQ2LCAweDIzYjNiYTQ1LAorICAweGY3NzlkZWFlLCAweDA1
MTI1ZGFkLCAweDE2NDJhZTU5LCAweGU0MjkyZDVhLAorICAweGJhM2ExMTdlLCAweDQ4NTE5Mjdk
LCAweDViMDE2MTg5LCAweGE5NmFlMjhhLAorICAweDdkYTA4NjYxLCAweDhmY2IwNTYyLCAweDlj
OWJmNjk2LCAweDZlZjA3NTk1LAorICAweDQxN2IxZGJjLCAweGIzMTA5ZWJmLCAweGEwNDA2ZDRi
LCAweDUyMmJlZTQ4LAorICAweDg2ZTE4YWEzLCAweDc0OGEwOWEwLCAweDY3ZGFmYTU0LCAweDk1
YjE3OTU3LAorICAweGNiYTI0NTczLCAweDM5YzljNjcwLCAweDJhOTkzNTg0LCAweGQ4ZjJiNjg3
LAorICAweDBjMzhkMjZjLCAweGZlNTM1MTZmLCAweGVkMDNhMjliLCAweDFmNjgyMTk4LAorICAw
eDUxMjVkYWQzLCAweGEzNGU1OWQwLCAweGIwMWVhYTI0LCAweDQyNzUyOTI3LAorICAweDk2YmY0
ZGNjLCAweDY0ZDRjZWNmLCAweDc3ODQzZDNiLCAweDg1ZWZiZTM4LAorICAweGRiZmM4MjFjLCAw
eDI5OTcwMTFmLCAweDNhYzdmMmViLCAweGM4YWM3MWU4LAorICAweDFjNjYxNTAzLCAweGVlMGQ5
NjAwLCAweGZkNWQ2NWY0LCAweDBmMzZlNmY3LAorICAweDYxYzY5MzYyLCAweDkzYWQxMDYxLCAw
eDgwZmRlMzk1LCAweDcyOTY2MDk2LAorICAweGE2NWMwNDdkLCAweDU0Mzc4NzdlLCAweDQ3Njc3
NDhhLCAweGI1MGNmNzg5LAorICAweGViMWZjYmFkLCAweDE5NzQ0OGFlLCAweDBhMjRiYjVhLCAw
eGY4NGYzODU5LAorICAweDJjODU1Y2IyLCAweGRlZWVkZmIxLCAweGNkYmUyYzQ1LCAweDNmZDVh
ZjQ2LAorICAweDcxOTg1NDBkLCAweDgzZjNkNzBlLCAweDkwYTMyNGZhLCAweDYyYzhhN2Y5LAor
ICAweGI2MDJjMzEyLCAweDQ0Njk0MDExLCAweDU3MzliM2U1LCAweGE1NTIzMGU2LAorICAweGZi
NDEwY2MyLCAweDA5MmE4ZmMxLCAweDFhN2E3YzM1LCAweGU4MTFmZjM2LAorICAweDNjZGI5YmRk
LCAweGNlYjAxOGRlLCAweGRkZTBlYjJhLCAweDJmOGI2ODI5LAorICAweDgyZjYzYjc4LCAweDcw
OWRiODdiLCAweDYzY2Q0YjhmLCAweDkxYTZjODhjLAorICAweDQ1NmNhYzY3LCAweGI3MDcyZjY0
LCAweGE0NTdkYzkwLCAweDU2M2M1ZjkzLAorICAweDA4MmY2M2I3LCAweGZhNDRlMGI0LCAweGU5
MTQxMzQwLCAweDFiN2Y5MDQzLAorICAweGNmYjVmNGE4LCAweDNkZGU3N2FiLCAweDJlOGU4NDVm
LCAweGRjZTUwNzVjLAorICAweDkyYThmYzE3LCAweDYwYzM3ZjE0LCAweDczOTM4Y2UwLCAweDgx
ZjgwZmUzLAorICAweDU1MzI2YjA4LCAweGE3NTllODBiLCAweGI0MDkxYmZmLCAweDQ2NjI5OGZj
LAorICAweDE4NzFhNGQ4LCAweGVhMWEyN2RiLCAweGY5NGFkNDJmLCAweDBiMjE1NzJjLAorICAw
eGRmZWIzM2M3LCAweDJkODBiMGM0LCAweDNlZDA0MzMwLCAweGNjYmJjMDMzLAorICAweGEyNGJi
NWE2LCAweDUwMjAzNmE1LCAweDQzNzBjNTUxLCAweGIxMWI0NjUyLAorICAweDY1ZDEyMmI5LCAw
eDk3YmFhMWJhLCAweDg0ZWE1MjRlLCAweDc2ODFkMTRkLAorICAweDI4OTJlZDY5LCAweGRhZjk2
ZTZhLCAweGM5YTk5ZDllLCAweDNiYzIxZTlkLAorICAweGVmMDg3YTc2LCAweDFkNjNmOTc1LCAw
eDBlMzMwYTgxLCAweGZjNTg4OTgyLAorICAweGIyMTU3MmM5LCAweDQwN2VmMWNhLCAweDUzMmUw
MjNlLCAweGExNDU4MTNkLAorICAweDc1OGZlNWQ2LCAweDg3ZTQ2NmQ1LCAweDk0YjQ5NTIxLCAw
eDY2ZGYxNjIyLAorICAweDM4Y2MyYTA2LCAweGNhYTdhOTA1LCAweGQ5Zjc1YWYxLCAweDJiOWNk
OWYyLAorICAweGZmNTZiZDE5LCAweDBkM2QzZTFhLCAweDFlNmRjZGVlLCAweGVjMDY0ZWVkLAor
ICAweGMzOGQyNmM0LCAweDMxZTZhNWM3LCAweDIyYjY1NjMzLCAweGQwZGRkNTMwLAorICAweDA0
MTdiMWRiLCAweGY2N2MzMmQ4LCAweGU1MmNjMTJjLCAweDE3NDc0MjJmLAorICAweDQ5NTQ3ZTBi
LCAweGJiM2ZmZDA4LCAweGE4NmYwZWZjLCAweDVhMDQ4ZGZmLAorICAweDhlY2VlOTE0LCAweDdj
YTU2YTE3LCAweDZmZjU5OWUzLCAweDlkOWUxYWUwLAorICAweGQzZDNlMWFiLCAweDIxYjg2MmE4
LCAweDMyZTg5MTVjLCAweGMwODMxMjVmLAorICAweDE0NDk3NmI0LCAweGU2MjJmNWI3LCAweGY1
NzIwNjQzLCAweDA3MTk4NTQwLAorICAweDU5MGFiOTY0LCAweGFiNjEzYTY3LCAweGI4MzFjOTkz
LCAweDRhNWE0YTkwLAorICAweDllOTAyZTdiLCAweDZjZmJhZDc4LCAweDdmYWI1ZThjLCAweDhk
YzBkZDhmLAorICAweGUzMzBhODFhLCAweDExNWIyYjE5LCAweDAyMGJkOGVkLCAweGYwNjA1YmVl
LAorICAweDI0YWEzZjA1LCAweGQ2YzFiYzA2LCAweGM1OTE0ZmYyLCAweDM3ZmFjY2YxLAorICAw
eDY5ZTlmMGQ1LCAweDliODI3M2Q2LCAweDg4ZDI4MDIyLCAweDdhYjkwMzIxLAorICAweGFlNzM2
N2NhLCAweDVjMThlNGM5LCAweDRmNDgxNzNkLCAweGJkMjM5NDNlLAorICAweGYzNmU2Zjc1LCAw
eDAxMDVlYzc2LCAweDEyNTUxZjgyLCAweGUwM2U5YzgxLAorICAweDM0ZjRmODZhLCAweGM2OWY3
YjY5LCAweGQ1Y2Y4ODlkLCAweDI3YTQwYjllLAorICAweDc5YjczN2JhLCAweDhiZGNiNGI5LCAw
eDk4OGM0NzRkLCAweDZhZTdjNDRlLAorICAweGJlMmRhMGE1LCAweDRjNDYyM2E2LCAweDVmMTZk
MDUyLCAweGFkN2Q1MzUxCit9Oworc3RhdGljIGNvbnN0IHVpbnQzMl90IHRhYmxlMV9bMjU2XSA9
IHsKKyAgMHgwMDAwMDAwMCwgMHgxM2EyOTg3NywgMHgyNzQ1MzBlZSwgMHgzNGU3YTg5OSwKKyAg
MHg0ZThhNjFkYywgMHg1ZDI4ZjlhYiwgMHg2OWNmNTEzMiwgMHg3YTZkYzk0NSwKKyAgMHg5ZDE0
YzNiOCwgMHg4ZWI2NWJjZiwgMHhiYTUxZjM1NiwgMHhhOWYzNmIyMSwKKyAgMHhkMzllYTI2NCwg
MHhjMDNjM2ExMywgMHhmNGRiOTI4YSwgMHhlNzc5MGFmZCwKKyAgMHgzZmM1ZjE4MSwgMHgyYzY3
NjlmNiwgMHgxODgwYzE2ZiwgMHgwYjIyNTkxOCwKKyAgMHg3MTRmOTA1ZCwgMHg2MmVkMDgyYSwg
MHg1NjBhYTBiMywgMHg0NWE4MzhjNCwKKyAgMHhhMmQxMzIzOSwgMHhiMTczYWE0ZSwgMHg4NTk0
MDJkNywgMHg5NjM2OWFhMCwKKyAgMHhlYzViNTNlNSwgMHhmZmY5Y2I5MiwgMHhjYjFlNjMwYiwg
MHhkOGJjZmI3YywKKyAgMHg3ZjhiZTMwMiwgMHg2YzI5N2I3NSwgMHg1OGNlZDNlYywgMHg0YjZj
NGI5YiwKKyAgMHgzMTAxODJkZSwgMHgyMmEzMWFhOSwgMHgxNjQ0YjIzMCwgMHgwNWU2MmE0NywK
KyAgMHhlMjlmMjBiYSwgMHhmMTNkYjhjZCwgMHhjNWRhMTA1NCwgMHhkNjc4ODgyMywKKyAgMHhh
YzE1NDE2NiwgMHhiZmI3ZDkxMSwgMHg4YjUwNzE4OCwgMHg5OGYyZTlmZiwKKyAgMHg0MDRlMTI4
MywgMHg1M2VjOGFmNCwgMHg2NzBiMjI2ZCwgMHg3NGE5YmExYSwKKyAgMHgwZWM0NzM1ZiwgMHgx
ZDY2ZWIyOCwgMHgyOTgxNDNiMSwgMHgzYTIzZGJjNiwKKyAgMHhkZDVhZDEzYiwgMHhjZWY4NDk0
YywgMHhmYTFmZTFkNSwgMHhlOWJkNzlhMiwKKyAgMHg5M2QwYjBlNywgMHg4MDcyMjg5MCwgMHhi
NDk1ODAwOSwgMHhhNzM3MTg3ZSwKKyAgMHhmZjE3YzYwNCwgMHhlY2I1NWU3MywgMHhkODUyZjZl
YSwgMHhjYmYwNmU5ZCwKKyAgMHhiMTlkYTdkOCwgMHhhMjNmM2ZhZiwgMHg5NmQ4OTczNiwgMHg4
NTdhMGY0MSwKKyAgMHg2MjAzMDViYywgMHg3MWExOWRjYiwgMHg0NTQ2MzU1MiwgMHg1NmU0YWQy
NSwKKyAgMHgyYzg5NjQ2MCwgMHgzZjJiZmMxNywgMHgwYmNjNTQ4ZSwgMHgxODZlY2NmOSwKKyAg
MHhjMGQyMzc4NSwgMHhkMzcwYWZmMiwgMHhlNzk3MDc2YiwgMHhmNDM1OWYxYywKKyAgMHg4ZTU4
NTY1OSwgMHg5ZGZhY2UyZSwgMHhhOTFkNjZiNywgMHhiYWJmZmVjMCwKKyAgMHg1ZGM2ZjQzZCwg
MHg0ZTY0NmM0YSwgMHg3YTgzYzRkMywgMHg2OTIxNWNhNCwKKyAgMHgxMzRjOTVlMSwgMHgwMGVl
MGQ5NiwgMHgzNDA5YTUwZiwgMHgyN2FiM2Q3OCwKKyAgMHg4MDljMjUwNiwgMHg5MzNlYmQ3MSwg
MHhhN2Q5MTVlOCwgMHhiNDdiOGQ5ZiwKKyAgMHhjZTE2NDRkYSwgMHhkZGI0ZGNhZCwgMHhlOTUz
NzQzNCwgMHhmYWYxZWM0MywKKyAgMHgxZDg4ZTZiZSwgMHgwZTJhN2VjOSwgMHgzYWNkZDY1MCwg
MHgyOTZmNGUyNywKKyAgMHg1MzAyODc2MiwgMHg0MGEwMWYxNSwgMHg3NDQ3Yjc4YywgMHg2N2U1
MmZmYiwKKyAgMHhiZjU5ZDQ4NywgMHhhY2ZiNGNmMCwgMHg5ODFjZTQ2OSwgMHg4YmJlN2MxZSwK
KyAgMHhmMWQzYjU1YiwgMHhlMjcxMmQyYywgMHhkNjk2ODViNSwgMHhjNTM0MWRjMiwKKyAgMHgy
MjRkMTczZiwgMHgzMWVmOGY0OCwgMHgwNTA4MjdkMSwgMHgxNmFhYmZhNiwKKyAgMHg2Y2M3NzZl
MywgMHg3ZjY1ZWU5NCwgMHg0YjgyNDYwZCwgMHg1ODIwZGU3YSwKKyAgMHhmYmMzZmFmOSwgMHhl
ODYxNjI4ZSwgMHhkYzg2Y2ExNywgMHhjZjI0NTI2MCwKKyAgMHhiNTQ5OWIyNSwgMHhhNmViMDM1
MiwgMHg5MjBjYWJjYiwgMHg4MWFlMzNiYywKKyAgMHg2NmQ3Mzk0MSwgMHg3NTc1YTEzNiwgMHg0
MTkyMDlhZiwgMHg1MjMwOTFkOCwKKyAgMHgyODVkNTg5ZCwgMHgzYmZmYzBlYSwgMHgwZjE4Njg3
MywgMHgxY2JhZjAwNCwKKyAgMHhjNDA2MGI3OCwgMHhkN2E0OTMwZiwgMHhlMzQzM2I5NiwgMHhm
MGUxYTNlMSwKKyAgMHg4YThjNmFhNCwgMHg5OTJlZjJkMywgMHhhZGM5NWE0YSwgMHhiZTZiYzIz
ZCwKKyAgMHg1OTEyYzhjMCwgMHg0YWIwNTBiNywgMHg3ZTU3ZjgyZSwgMHg2ZGY1NjA1OSwKKyAg
MHgxNzk4YTkxYywgMHgwNDNhMzE2YiwgMHgzMGRkOTlmMiwgMHgyMzdmMDE4NSwKKyAgMHg4NDQ4
MTlmYiwgMHg5N2VhODE4YywgMHhhMzBkMjkxNSwgMHhiMGFmYjE2MiwKKyAgMHhjYWMyNzgyNywg
MHhkOTYwZTA1MCwgMHhlZDg3NDhjOSwgMHhmZTI1ZDBiZSwKKyAgMHgxOTVjZGE0MywgMHgwYWZl
NDIzNCwgMHgzZTE5ZWFhZCwgMHgyZGJiNzJkYSwKKyAgMHg1N2Q2YmI5ZiwgMHg0NDc0MjNlOCwg
MHg3MDkzOGI3MSwgMHg2MzMxMTMwNiwKKyAgMHhiYjhkZTg3YSwgMHhhODJmNzAwZCwgMHg5Y2M4
ZDg5NCwgMHg4ZjZhNDBlMywKKyAgMHhmNTA3ODlhNiwgMHhlNmE1MTFkMSwgMHhkMjQyYjk0OCwg
MHhjMWUwMjEzZiwKKyAgMHgyNjk5MmJjMiwgMHgzNTNiYjNiNSwgMHgwMWRjMWIyYywgMHgxMjdl
ODM1YiwKKyAgMHg2ODEzNGExZSwgMHg3YmIxZDI2OSwgMHg0ZjU2N2FmMCwgMHg1Y2Y0ZTI4NywK
KyAgMHgwNGQ0M2NmZCwgMHgxNzc2YTQ4YSwgMHgyMzkxMGMxMywgMHgzMDMzOTQ2NCwKKyAgMHg0
YTVlNWQyMSwgMHg1OWZjYzU1NiwgMHg2ZDFiNmRjZiwgMHg3ZWI5ZjViOCwKKyAgMHg5OWMwZmY0
NSwgMHg4YTYyNjczMiwgMHhiZTg1Y2ZhYiwgMHhhZDI3NTdkYywKKyAgMHhkNzRhOWU5OSwgMHhj
NGU4MDZlZSwgMHhmMDBmYWU3NywgMHhlM2FkMzYwMCwKKyAgMHgzYjExY2Q3YywgMHgyOGIzNTUw
YiwgMHgxYzU0ZmQ5MiwgMHgwZmY2NjVlNSwKKyAgMHg3NTliYWNhMCwgMHg2NjM5MzRkNywgMHg1
MmRlOWM0ZSwgMHg0MTdjMDQzOSwKKyAgMHhhNjA1MGVjNCwgMHhiNWE3OTZiMywgMHg4MTQwM2Uy
YSwgMHg5MmUyYTY1ZCwKKyAgMHhlODhmNmYxOCwgMHhmYjJkZjc2ZiwgMHhjZmNhNWZmNiwgMHhk
YzY4Yzc4MSwKKyAgMHg3YjVmZGZmZiwgMHg2OGZkNDc4OCwgMHg1YzFhZWYxMSwgMHg0ZmI4Nzc2
NiwKKyAgMHgzNWQ1YmUyMywgMHgyNjc3MjY1NCwgMHgxMjkwOGVjZCwgMHgwMTMyMTZiYSwKKyAg
MHhlNjRiMWM0NywgMHhmNWU5ODQzMCwgMHhjMTBlMmNhOSwgMHhkMmFjYjRkZSwKKyAgMHhhOGMx
N2Q5YiwgMHhiYjYzZTVlYywgMHg4Zjg0NGQ3NSwgMHg5YzI2ZDUwMiwKKyAgMHg0NDlhMmU3ZSwg
MHg1NzM4YjYwOSwgMHg2M2RmMWU5MCwgMHg3MDdkODZlNywKKyAgMHgwYTEwNGZhMiwgMHgxOWIy
ZDdkNSwgMHgyZDU1N2Y0YywgMHgzZWY3ZTczYiwKKyAgMHhkOThlZWRjNiwgMHhjYTJjNzViMSwg
MHhmZWNiZGQyOCwgMHhlZDY5NDU1ZiwKKyAgMHg5NzA0OGMxYSwgMHg4NGE2MTQ2ZCwgMHhiMDQx
YmNmNCwgMHhhM2UzMjQ4MworfTsKK3N0YXRpYyBjb25zdCB1aW50MzJfdCB0YWJsZTJfWzI1Nl0g
PSB7CisgIDB4MDAwMDAwMDAsIDB4YTU0MTkyN2UsIDB4NGY2ZjUyMGQsIDB4ZWEyZWMwNzMsCisg
IDB4OWVkZWE0MWEsIDB4M2I5ZjM2NjQsIDB4ZDFiMWY2MTcsIDB4NzRmMDY0NjksCisgIDB4Mzg1
MTNlYzUsIDB4OWQxMGFjYmIsIDB4NzczZTZjYzgsIDB4ZDI3ZmZlYjYsCisgIDB4YTY4ZjlhZGYs
IDB4MDNjZTA4YTEsIDB4ZTllMGM4ZDIsIDB4NGNhMTVhYWMsCisgIDB4NzBhMjdkOGEsIDB4ZDVl
M2VmZjQsIDB4M2ZjZDJmODcsIDB4OWE4Y2JkZjksCisgIDB4ZWU3Y2Q5OTAsIDB4NGIzZDRiZWUs
IDB4YTExMzhiOWQsIDB4MDQ1MjE5ZTMsCisgIDB4NDhmMzQzNGYsIDB4ZWRiMmQxMzEsIDB4MDc5
YzExNDIsIDB4YTJkZDgzM2MsCisgIDB4ZDYyZGU3NTUsIDB4NzM2Yzc1MmIsIDB4OTk0MmI1NTgs
IDB4M2MwMzI3MjYsCisgIDB4ZTE0NGZiMTQsIDB4NDQwNTY5NmEsIDB4YWUyYmE5MTksIDB4MGI2
YTNiNjcsCisgIDB4N2Y5YTVmMGUsIDB4ZGFkYmNkNzAsIDB4MzBmNTBkMDMsIDB4OTViNDlmN2Qs
CisgIDB4ZDkxNWM1ZDEsIDB4N2M1NDU3YWYsIDB4OTY3YTk3ZGMsIDB4MzMzYjA1YTIsCisgIDB4
NDdjYjYxY2IsIDB4ZTI4YWYzYjUsIDB4MDhhNDMzYzYsIDB4YWRlNWExYjgsCisgIDB4OTFlNjg2
OWUsIDB4MzRhNzE0ZTAsIDB4ZGU4OWQ0OTMsIDB4N2JjODQ2ZWQsCisgIDB4MGYzODIyODQsIDB4
YWE3OWIwZmEsIDB4NDA1NzcwODksIDB4ZTUxNmUyZjcsCisgIDB4YTliN2I4NWIsIDB4MGNmNjJh
MjUsIDB4ZTZkOGVhNTYsIDB4NDM5OTc4MjgsCisgIDB4Mzc2OTFjNDEsIDB4OTIyODhlM2YsIDB4
NzgwNjRlNGMsIDB4ZGQ0N2RjMzIsCisgIDB4Yzc2NTgwZDksIDB4NjIyNDEyYTcsIDB4ODgwYWQy
ZDQsIDB4MmQ0YjQwYWEsCisgIDB4NTliYjI0YzMsIDB4ZmNmYWI2YmQsIDB4MTZkNDc2Y2UsIDB4
YjM5NWU0YjAsCisgIDB4ZmYzNGJlMWMsIDB4NWE3NTJjNjIsIDB4YjA1YmVjMTEsIDB4MTUxYTdl
NmYsCisgIDB4NjFlYTFhMDYsIDB4YzRhYjg4NzgsIDB4MmU4NTQ4MGIsIDB4OGJjNGRhNzUsCisg
IDB4YjdjN2ZkNTMsIDB4MTI4NjZmMmQsIDB4ZjhhOGFmNWUsIDB4NWRlOTNkMjAsCisgIDB4Mjkx
OTU5NDksIDB4OGM1OGNiMzcsIDB4NjY3NjBiNDQsIDB4YzMzNzk5M2EsCisgIDB4OGY5NmMzOTYs
IDB4MmFkNzUxZTgsIDB4YzBmOTkxOWIsIDB4NjViODAzZTUsCisgIDB4MTE0ODY3OGMsIDB4YjQw
OWY1ZjIsIDB4NWUyNzM1ODEsIDB4ZmI2NmE3ZmYsCisgIDB4MjYyMTdiY2QsIDB4ODM2MGU5YjMs
IDB4Njk0ZTI5YzAsIDB4Y2MwZmJiYmUsCisgIDB4YjhmZmRmZDcsIDB4MWRiZTRkYTksIDB4Zjc5
MDhkZGEsIDB4NTJkMTFmYTQsCisgIDB4MWU3MDQ1MDgsIDB4YmIzMWQ3NzYsIDB4NTExZjE3MDUs
IDB4ZjQ1ZTg1N2IsCisgIDB4ODBhZWUxMTIsIDB4MjVlZjczNmMsIDB4Y2ZjMWIzMWYsIDB4NmE4
MDIxNjEsCisgIDB4NTY4MzA2NDcsIDB4ZjNjMjk0MzksIDB4MTllYzU0NGEsIDB4YmNhZGM2MzQs
CisgIDB4Yzg1ZGEyNWQsIDB4NmQxYzMwMjMsIDB4ODczMmYwNTAsIDB4MjI3MzYyMmUsCisgIDB4
NmVkMjM4ODIsIDB4Y2I5M2FhZmMsIDB4MjFiZDZhOGYsIDB4ODRmY2Y4ZjEsCisgIDB4ZjAwYzlj
OTgsIDB4NTU0ZDBlZTYsIDB4YmY2M2NlOTUsIDB4MWEyMjVjZWIsCisgIDB4OGIyNzc3NDMsIDB4
MmU2NmU1M2QsIDB4YzQ0ODI1NGUsIDB4NjEwOWI3MzAsCisgIDB4MTVmOWQzNTksIDB4YjBiODQx
MjcsIDB4NWE5NjgxNTQsIDB4ZmZkNzEzMmEsCisgIDB4YjM3NjQ5ODYsIDB4MTYzN2RiZjgsIDB4
ZmMxOTFiOGIsIDB4NTk1ODg5ZjUsCisgIDB4MmRhOGVkOWMsIDB4ODhlOTdmZTIsIDB4NjJjN2Jm
OTEsIDB4Yzc4NjJkZWYsCisgIDB4ZmI4NTBhYzksIDB4NWVjNDk4YjcsIDB4YjRlYTU4YzQsIDB4
MTFhYmNhYmEsCisgIDB4NjU1YmFlZDMsIDB4YzAxYTNjYWQsIDB4MmEzNGZjZGUsIDB4OGY3NTZl
YTAsCisgIDB4YzNkNDM0MGMsIDB4NjY5NWE2NzIsIDB4OGNiYjY2MDEsIDB4MjlmYWY0N2YsCisg
IDB4NWQwYTkwMTYsIDB4Zjg0YjAyNjgsIDB4MTI2NWMyMWIsIDB4YjcyNDUwNjUsCisgIDB4NmE2
MzhjNTcsIDB4Y2YyMjFlMjksIDB4MjUwY2RlNWEsIDB4ODA0ZDRjMjQsCisgIDB4ZjRiZDI4NGQs
IDB4NTFmY2JhMzMsIDB4YmJkMjdhNDAsIDB4MWU5M2U4M2UsCisgIDB4NTIzMmIyOTIsIDB4Zjc3
MzIwZWMsIDB4MWQ1ZGUwOWYsIDB4YjgxYzcyZTEsCisgIDB4Y2NlYzE2ODgsIDB4NjlhZDg0ZjYs
IDB4ODM4MzQ0ODUsIDB4MjZjMmQ2ZmIsCisgIDB4MWFjMWYxZGQsIDB4YmY4MDYzYTMsIDB4NTVh
ZWEzZDAsIDB4ZjBlZjMxYWUsCisgIDB4ODQxZjU1YzcsIDB4MjE1ZWM3YjksIDB4Y2I3MDA3Y2Es
IDB4NmUzMTk1YjQsCisgIDB4MjI5MGNmMTgsIDB4ODdkMTVkNjYsIDB4NmRmZjlkMTUsIDB4Yzhi
ZTBmNmIsCisgIDB4YmM0ZTZiMDIsIDB4MTkwZmY5N2MsIDB4ZjMyMTM5MGYsIDB4NTY2MGFiNzEs
CisgIDB4NGM0MmY3OWEsIDB4ZTkwMzY1ZTQsIDB4MDMyZGE1OTcsIDB4YTY2YzM3ZTksCisgIDB4
ZDI5YzUzODAsIDB4NzdkZGMxZmUsIDB4OWRmMzAxOGQsIDB4MzhiMjkzZjMsCisgIDB4NzQxM2M5
NWYsIDB4ZDE1MjViMjEsIDB4M2I3YzliNTIsIDB4OWUzZDA5MmMsCisgIDB4ZWFjZDZkNDUsIDB4
NGY4Y2ZmM2IsIDB4YTVhMjNmNDgsIDB4MDBlM2FkMzYsCisgIDB4M2NlMDhhMTAsIDB4OTlhMTE4
NmUsIDB4NzM4ZmQ4MWQsIDB4ZDZjZTRhNjMsCisgIDB4YTIzZTJlMGEsIDB4MDc3ZmJjNzQsIDB4
ZWQ1MTdjMDcsIDB4NDgxMGVlNzksCisgIDB4MDRiMWI0ZDUsIDB4YTFmMDI2YWIsIDB4NGJkZWU2
ZDgsIDB4ZWU5Zjc0YTYsCisgIDB4OWE2ZjEwY2YsIDB4M2YyZTgyYjEsIDB4ZDUwMDQyYzIsIDB4
NzA0MWQwYmMsCisgIDB4YWQwNjBjOGUsIDB4MDg0NzllZjAsIDB4ZTI2OTVlODMsIDB4NDcyOGNj
ZmQsCisgIDB4MzNkOGE4OTQsIDB4OTY5OTNhZWEsIDB4N2NiN2ZhOTksIDB4ZDlmNjY4ZTcsCisg
IDB4OTU1NzMyNGIsIDB4MzAxNmEwMzUsIDB4ZGEzODYwNDYsIDB4N2Y3OWYyMzgsCisgIDB4MGI4
OTk2NTEsIDB4YWVjODA0MmYsIDB4NDRlNmM0NWMsIDB4ZTFhNzU2MjIsCisgIDB4ZGRhNDcxMDQs
IDB4NzhlNWUzN2EsIDB4OTJjYjIzMDksIDB4Mzc4YWIxNzcsCisgIDB4NDM3YWQ1MWUsIDB4ZTYz
YjQ3NjAsIDB4MGMxNTg3MTMsIDB4YTk1NDE1NmQsCisgIDB4ZTVmNTRmYzEsIDB4NDBiNGRkYmYs
IDB4YWE5YTFkY2MsIDB4MGZkYjhmYjIsCisgIDB4N2IyYmViZGIsIDB4ZGU2YTc5YTUsIDB4MzQ0
NGI5ZDYsIDB4OTEwNTJiYTgKK307CitzdGF0aWMgY29uc3QgdWludDMyX3QgdGFibGUzX1syNTZd
ID0geworICAweDAwMDAwMDAwLCAweGRkNDVhYWI4LCAweGJmNjcyMzgxLCAweDYyMjI4OTM5LAor
ICAweDdiMjIzMWYzLCAweGE2Njc5YjRiLCAweGM0NDUxMjcyLCAweDE5MDBiOGNhLAorICAweGY2
NDQ2M2U2LCAweDJiMDFjOTVlLCAweDQ5MjM0MDY3LCAweDk0NjZlYWRmLAorICAweDhkNjY1MjE1
LCAweDUwMjNmOGFkLCAweDMyMDE3MTk0LCAweGVmNDRkYjJjLAorICAweGU5NjRiMTNkLCAweDM0
MjExYjg1LCAweDU2MDM5MmJjLCAweDhiNDYzODA0LAorICAweDkyNDY4MGNlLCAweDRmMDMyYTc2
LCAweDJkMjFhMzRmLCAweGYwNjQwOWY3LAorICAweDFmMjBkMmRiLCAweGMyNjU3ODYzLCAweGEw
NDdmMTVhLCAweDdkMDI1YmUyLAorICAweDY0MDJlMzI4LCAweGI5NDc0OTkwLCAweGRiNjVjMGE5
LCAweDA2MjA2YTExLAorICAweGQ3MjUxNDhiLCAweDBhNjBiZTMzLCAweDY4NDIzNzBhLCAweGI1
MDc5ZGIyLAorICAweGFjMDcyNTc4LCAweDcxNDI4ZmMwLCAweDEzNjAwNmY5LCAweGNlMjVhYzQx
LAorICAweDIxNjE3NzZkLCAweGZjMjRkZGQ1LCAweDllMDY1NGVjLCAweDQzNDNmZTU0LAorICAw
eDVhNDM0NjllLCAweDg3MDZlYzI2LCAweGU1MjQ2NTFmLCAweDM4NjFjZmE3LAorICAweDNlNDFh
NWI2LCAweGUzMDQwZjBlLCAweDgxMjY4NjM3LCAweDVjNjMyYzhmLAorICAweDQ1NjM5NDQ1LCAw
eDk4MjYzZWZkLCAweGZhMDRiN2M0LCAweDI3NDExZDdjLAorICAweGM4MDVjNjUwLCAweDE1NDA2
Y2U4LCAweDc3NjJlNWQxLCAweGFhMjc0ZjY5LAorICAweGIzMjdmN2EzLCAweDZlNjI1ZDFiLCAw
eDBjNDBkNDIyLCAweGQxMDU3ZTlhLAorICAweGFiYTY1ZmU3LCAweDc2ZTNmNTVmLCAweDE0YzE3
YzY2LCAweGM5ODRkNmRlLAorICAweGQwODQ2ZTE0LCAweDBkYzFjNGFjLCAweDZmZTM0ZDk1LCAw
eGIyYTZlNzJkLAorICAweDVkZTIzYzAxLCAweDgwYTc5NmI5LCAweGUyODUxZjgwLCAweDNmYzBi
NTM4LAorICAweDI2YzAwZGYyLCAweGZiODVhNzRhLCAweDk5YTcyZTczLCAweDQ0ZTI4NGNiLAor
ICAweDQyYzJlZWRhLCAweDlmODc0NDYyLCAweGZkYTVjZDViLCAweDIwZTA2N2UzLAorICAweDM5
ZTBkZjI5LCAweGU0YTU3NTkxLCAweDg2ODdmY2E4LCAweDViYzI1NjEwLAorICAweGI0ODY4ZDNj
LCAweDY5YzMyNzg0LCAweDBiZTFhZWJkLCAweGQ2YTQwNDA1LAorICAweGNmYTRiY2NmLCAweDEy
ZTExNjc3LCAweDcwYzM5ZjRlLCAweGFkODYzNWY2LAorICAweDdjODM0YjZjLCAweGExYzZlMWQ0
LCAweGMzZTQ2OGVkLCAweDFlYTFjMjU1LAorICAweDA3YTE3YTlmLCAweGRhZTRkMDI3LCAweGI4
YzY1OTFlLCAweDY1ODNmM2E2LAorICAweDhhYzcyODhhLCAweDU3ODI4MjMyLCAweDM1YTAwYjBi
LCAweGU4ZTVhMWIzLAorICAweGYxZTUxOTc5LCAweDJjYTBiM2MxLCAweDRlODIzYWY4LCAweDkz
Yzc5MDQwLAorICAweDk1ZTdmYTUxLCAweDQ4YTI1MGU5LCAweDJhODBkOWQwLCAweGY3YzU3MzY4
LAorICAweGVlYzVjYmEyLCAweDMzODA2MTFhLCAweDUxYTJlODIzLCAweDhjZTc0MjliLAorICAw
eDYzYTM5OWI3LCAweGJlZTYzMzBmLCAweGRjYzRiYTM2LCAweDAxODExMDhlLAorICAweDE4ODFh
ODQ0LCAweGM1YzQwMmZjLCAweGE3ZTY4YmM1LCAweDdhYTMyMTdkLAorICAweDUyYTBjOTNmLCAw
eDhmZTU2Mzg3LCAweGVkYzdlYWJlLCAweDMwODI0MDA2LAorICAweDI5ODJmOGNjLCAweGY0Yzc1
Mjc0LCAweDk2ZTVkYjRkLCAweDRiYTA3MWY1LAorICAweGE0ZTRhYWQ5LCAweDc5YTEwMDYxLCAw
eDFiODM4OTU4LCAweGM2YzYyM2UwLAorICAweGRmYzY5YjJhLCAweDAyODMzMTkyLCAweDYwYTFi
OGFiLCAweGJkZTQxMjEzLAorICAweGJiYzQ3ODAyLCAweDY2ODFkMmJhLCAweDA0YTM1YjgzLCAw
eGQ5ZTZmMTNiLAorICAweGMwZTY0OWYxLCAweDFkYTNlMzQ5LCAweDdmODE2YTcwLCAweGEyYzRj
MGM4LAorICAweDRkODAxYmU0LCAweDkwYzViMTVjLCAweGYyZTczODY1LCAweDJmYTI5MmRkLAor
ICAweDM2YTIyYTE3LCAweGViZTc4MGFmLCAweDg5YzUwOTk2LCAweDU0ODBhMzJlLAorICAweDg1
ODVkZGI0LCAweDU4YzA3NzBjLCAweDNhZTJmZTM1LCAweGU3YTc1NDhkLAorICAweGZlYTdlYzQ3
LCAweDIzZTI0NmZmLCAweDQxYzBjZmM2LCAweDljODU2NTdlLAorICAweDczYzFiZTUyLCAweGFl
ODQxNGVhLCAweGNjYTY5ZGQzLCAweDExZTMzNzZiLAorICAweDA4ZTM4ZmExLCAweGQ1YTYyNTE5
LCAweGI3ODRhYzIwLCAweDZhYzEwNjk4LAorICAweDZjZTE2Yzg5LCAweGIxYTRjNjMxLCAweGQz
ODY0ZjA4LCAweDBlYzNlNWIwLAorICAweDE3YzM1ZDdhLCAweGNhODZmN2MyLCAweGE4YTQ3ZWZi
LCAweDc1ZTFkNDQzLAorICAweDlhYTUwZjZmLCAweDQ3ZTBhNWQ3LCAweDI1YzIyY2VlLCAweGY4
ODc4NjU2LAorICAweGUxODczZTljLCAweDNjYzI5NDI0LCAweDVlZTAxZDFkLCAweDgzYTViN2E1
LAorICAweGY5MDY5NmQ4LCAweDI0NDMzYzYwLCAweDQ2NjFiNTU5LCAweDliMjQxZmUxLAorICAw
eDgyMjRhNzJiLCAweDVmNjEwZDkzLCAweDNkNDM4NGFhLCAweGUwMDYyZTEyLAorICAweDBmNDJm
NTNlLCAweGQyMDc1Zjg2LCAweGIwMjVkNmJmLCAweDZkNjA3YzA3LAorICAweDc0NjBjNGNkLCAw
eGE5MjU2ZTc1LCAweGNiMDdlNzRjLCAweDE2NDI0ZGY0LAorICAweDEwNjIyN2U1LCAweGNkMjc4
ZDVkLCAweGFmMDUwNDY0LCAweDcyNDBhZWRjLAorICAweDZiNDAxNjE2LCAweGI2MDViY2FlLCAw
eGQ0MjczNTk3LCAweDA5NjI5ZjJmLAorICAweGU2MjY0NDAzLCAweDNiNjNlZWJiLCAweDU5NDE2
NzgyLCAweDg0MDRjZDNhLAorICAweDlkMDQ3NWYwLCAweDQwNDFkZjQ4LCAweDIyNjM1NjcxLCAw
eGZmMjZmY2M5LAorICAweDJlMjM4MjUzLCAweGYzNjYyOGViLCAweDkxNDRhMWQyLCAweDRjMDEw
YjZhLAorICAweDU1MDFiM2EwLCAweDg4NDQxOTE4LCAweGVhNjY5MDIxLCAweDM3MjMzYTk5LAor
ICAweGQ4NjdlMWI1LCAweDA1MjI0YjBkLCAweDY3MDBjMjM0LCAweGJhNDU2ODhjLAorICAweGEz
NDVkMDQ2LCAweDdlMDA3YWZlLCAweDFjMjJmM2M3LCAweGMxNjc1OTdmLAorICAweGM3NDczMzZl
LCAweDFhMDI5OWQ2LCAweDc4MjAxMGVmLCAweGE1NjViYTU3LAorICAweGJjNjUwMjlkLCAweDYx
MjBhODI1LCAweDAzMDIyMTFjLCAweGRlNDc4YmE0LAorICAweDMxMDM1MDg4LCAweGVjNDZmYTMw
LCAweDhlNjQ3MzA5LCAweDUzMjFkOWIxLAorICAweDRhMjE2MTdiLCAweDk3NjRjYmMzLCAweGY1
NDY0MmZhLCAweDI4MDNlODQyCit9OworCisvLyBVc2VkIHRvIGZldGNoIGEgbmF0dXJhbGx5LWFs
aWduZWQgMzItYml0IHdvcmQgaW4gbGl0dGxlIGVuZGlhbiBieXRlLW9yZGVyCitzdGF0aWMgaW5s
aW5lIHVpbnQzMl90IExFX0xPQUQzMihjb25zdCB1aW50OF90ICpwKSB7CisgIHJldHVybiBEZWNv
ZGVGaXhlZDMyKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHApKTsKK30KKwordWludDMy
X3QgRXh0ZW5kKHVpbnQzMl90IGNyYywgY29uc3QgY2hhciogYnVmLCBzaXplX3Qgc2l6ZSkgewor
ICBjb25zdCB1aW50OF90ICpwID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90ICo+KGJ1
Zik7CisgIGNvbnN0IHVpbnQ4X3QgKmUgPSBwICsgc2l6ZTsKKyAgdWludDMyX3QgbCA9IGNyYyBe
IDB4ZmZmZmZmZmZ1OworCisjZGVmaW5lIFNURVAxIGRvIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgaW50IGMgPSAobCAmIDB4ZmYpIF4gKnArKzsgICAgICAgICAgICAgICAg
ICBcCisgICAgbCA9IHRhYmxlMF9bY10gXiAobCA+PiA4KTsgICAgICAgICAgICAgICAgICBcCit9
IHdoaWxlICgwKQorI2RlZmluZSBTVEVQNCBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgIHVpbnQzMl90IGMgPSBsIF4gTEVfTE9BRDMyKHApOyAgICAgICAgICAgICAgXAor
ICAgIHAgKz0gNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGwg
PSB0YWJsZTNfW2MgJiAweGZmXSBeICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB0YWJs
ZTJfWyhjID4+IDgpICYgMHhmZl0gXiAgICAgICAgICAgICAgXAorICAgICAgICB0YWJsZTFfWyhj
ID4+IDE2KSAmIDB4ZmZdIF4gICAgICAgICAgICAgXAorICAgICAgICB0YWJsZTBfW2MgPj4gMjRd
OyAgICAgICAgICAgICAgICAgICAgICAgXAorfSB3aGlsZSAoMCkKKworICAvLyBQb2ludCB4IGF0
IGZpcnN0IDQtYnl0ZSBhbGlnbmVkIGJ5dGUgaW4gc3RyaW5nLiAgVGhpcyBtaWdodCBiZQorICAv
LyBqdXN0IHBhc3QgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLgorICBjb25zdCB1aW50cHRyX3QgcHZh
bCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihwKTsKKyAgY29uc3QgdWludDhfdCogeCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCgocHZhbCArIDMpID4+IDIpIDw8IDIp
OworICBpZiAoeCA8PSBlKSB7CisgICAgLy8gUHJvY2VzcyBieXRlcyB1bnRpbCBmaW5pc2hlZCBv
ciBwIGlzIDQtYnl0ZSBhbGlnbmVkCisgICAgd2hpbGUgKHAgIT0geCkgeworICAgICAgU1RFUDE7
CisgICAgfQorICB9CisgIC8vIFByb2Nlc3MgYnl0ZXMgMTYgYXQgYSB0aW1lCisgIHdoaWxlICgo
ZS1wKSA+PSAxNikgeworICAgIFNURVA0OyBTVEVQNDsgU1RFUDQ7IFNURVA0OworICB9CisgIC8v
IFByb2Nlc3MgYnl0ZXMgNCBhdCBhIHRpbWUKKyAgd2hpbGUgKChlLXApID49IDQpIHsKKyAgICBT
VEVQNDsKKyAgfQorICAvLyBQcm9jZXNzIHRoZSBsYXN0IGZldyBieXRlcworICB3aGlsZSAocCAh
PSBlKSB7CisgICAgU1RFUDE7CisgIH0KKyN1bmRlZiBTVEVQNAorI3VuZGVmIFNURVAxCisgIHJl
dHVybiBsIF4gMHhmZmZmZmZmZnU7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBjcmMzMmMKK30gIC8v
IG5hbWVzcGFjZSBsZXZlbGRiCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRi
L3V0aWwvY3JjMzJjLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvY3JjMzJjLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMWQ3ZTVjMDc1ZDg2ZDZjZjI1NTFjZmNkMGZkOWFjNWFkY2U2ZmMzOAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9jcmMzMmMuaApA
QCAtMCwwICsxLDQ1IEBACisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmli
dXRvcnMuCisKKyNpZm5kZWYgU1RPUkFHRV9MRVZFTERCX1VUSUxfQ1JDMzJDX0hfCisjZGVmaW5l
IFNUT1JBR0VfTEVWRUxEQl9VVElMX0NSQzMyQ19IXworCisjaW5jbHVkZSA8c3RkZGVmLmg+Cisj
aW5jbHVkZSA8c3RkaW50Lmg+CisKK25hbWVzcGFjZSBsZXZlbGRiIHsKK25hbWVzcGFjZSBjcmMz
MmMgeworCisvLyBSZXR1cm4gdGhlIGNyYzMyYyBvZiBjb25jYXQoQSwgZGF0YVswLG4tMV0pIHdo
ZXJlIGluaXRfY3JjIGlzIHRoZQorLy8gY3JjMzJjIG9mIHNvbWUgc3RyaW5nIEEuICBFeHRlbmQo
KSBpcyBvZnRlbiB1c2VkIHRvIG1haW50YWluIHRoZQorLy8gY3JjMzJjIG9mIGEgc3RyZWFtIG9m
IGRhdGEuCitleHRlcm4gdWludDMyX3QgRXh0ZW5kKHVpbnQzMl90IGluaXRfY3JjLCBjb25zdCBj
aGFyKiBkYXRhLCBzaXplX3Qgbik7CisKKy8vIFJldHVybiB0aGUgY3JjMzJjIG9mIGRhdGFbMCxu
LTFdCitpbmxpbmUgdWludDMyX3QgVmFsdWUoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IG4pIHsK
KyAgcmV0dXJuIEV4dGVuZCgwLCBkYXRhLCBuKTsKK30KKworc3RhdGljIGNvbnN0IHVpbnQzMl90
IGtNYXNrRGVsdGEgPSAweGEyODJlYWQ4dWw7CisKKy8vIFJldHVybiBhIG1hc2tlZCByZXByZXNl
bnRhdGlvbiBvZiBjcmMuCisvLworLy8gTW90aXZhdGlvbjogaXQgaXMgcHJvYmxlbWF0aWMgdG8g
Y29tcHV0ZSB0aGUgQ1JDIG9mIGEgc3RyaW5nIHRoYXQKKy8vIGNvbnRhaW5zIGVtYmVkZGVkIENS
Q3MuICBUaGVyZWZvcmUgd2UgcmVjb21tZW5kIHRoYXQgQ1JDcyBzdG9yZWQKKy8vIHNvbWV3aGVy
ZSAoZS5nLiwgaW4gZmlsZXMpIHNob3VsZCBiZSBtYXNrZWQgYmVmb3JlIGJlaW5nIHN0b3JlZC4K
K2lubGluZSB1aW50MzJfdCBNYXNrKHVpbnQzMl90IGNyYykgeworICAvLyBSb3RhdGUgcmlnaHQg
YnkgMTUgYml0cyBhbmQgYWRkIGEgY29uc3RhbnQuCisgIHJldHVybiAoKGNyYyA+PiAxNSkgfCAo
Y3JjIDw8IDE3KSkgKyBrTWFza0RlbHRhOworfQorCisvLyBSZXR1cm4gdGhlIGNyYyB3aG9zZSBt
YXNrZWQgcmVwcmVzZW50YXRpb24gaXMgbWFza2VkX2NyYy4KK2lubGluZSB1aW50MzJfdCBVbm1h
c2sodWludDMyX3QgbWFza2VkX2NyYykgeworICB1aW50MzJfdCByb3QgPSBtYXNrZWRfY3JjIC0g
a01hc2tEZWx0YTsKKyAgcmV0dXJuICgocm90ID4+IDE3KSB8IChyb3QgPDwgMTUpKTsKK30KKwor
fSAgLy8gbmFtZXNwYWNlIGNyYzMyYworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKKworI2VuZGlm
ICAvLyBTVE9SQUdFX0xFVkVMREJfVVRJTF9DUkMzMkNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xldmVsZGIvdXRpbC9jcmMzMmNfdGVzdC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xldmVsZGIvdXRpbC9jcmMzMmNfdGVzdC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40Yjk1N2VlMTIwYzhmODA1
YzAyNDBkM2Q5MGVhZjE2YTc1OTQzN2JhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvbGV2ZWxkYi91dGlsL2NyYzMyY190ZXN0LmNjCkBAIC0wLDAgKzEsNzIgQEAKKy8vIENv
cHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRo
ZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2luY2x1ZGUgInV0
aWwvY3JjMzJjLmgiCisjaW5jbHVkZSAidXRpbC90ZXN0aGFybmVzcy5oIgorCituYW1lc3BhY2Ug
bGV2ZWxkYiB7CituYW1lc3BhY2UgY3JjMzJjIHsKKworY2xhc3MgQ1JDIHsgfTsKKworVEVTVChD
UkMsIFN0YW5kYXJkUmVzdWx0cykgeworICAvLyBGcm9tIHJmYzM3MjAgc2VjdGlvbiBCLjQuCisg
IGNoYXIgYnVmWzMyXTsKKworICBtZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7CisgIEFTU0VS
VF9FUSgweDhhOTEzNmFhLCBWYWx1ZShidWYsIHNpemVvZihidWYpKSk7CisKKyAgbWVtc2V0KGJ1
ZiwgMHhmZiwgc2l6ZW9mKGJ1ZikpOworICBBU1NFUlRfRVEoMHg2MmE4YWI0MywgVmFsdWUoYnVm
LCBzaXplb2YoYnVmKSkpOworCisgIGZvciAoaW50IGkgPSAwOyBpIDwgMzI7IGkrKykgeworICAg
IGJ1ZltpXSA9IGk7CisgIH0KKyAgQVNTRVJUX0VRKDB4NDZkZDc5NGUsIFZhbHVlKGJ1Ziwgc2l6
ZW9mKGJ1ZikpKTsKKworICBmb3IgKGludCBpID0gMDsgaSA8IDMyOyBpKyspIHsKKyAgICBidWZb
aV0gPSAzMSAtIGk7CisgIH0KKyAgQVNTRVJUX0VRKDB4MTEzZmRiNWMsIFZhbHVlKGJ1Ziwgc2l6
ZW9mKGJ1ZikpKTsKKworICB1bnNpZ25lZCBjaGFyIGRhdGFbNDhdID0geworICAgIDB4MDEsIDB4
YzAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAw
eDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgxNCwg
MHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDA0LCAweDAwLAorICAgIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MTQsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKKyAgICAweDI4
LCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgw
MiwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICB9Owor
ICBBU1NFUlRfRVEoMHhkOTk2M2E1NiwgVmFsdWUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZGF0
YSksIHNpemVvZihkYXRhKSkpOworfQorCitURVNUKENSQywgVmFsdWVzKSB7CisgIEFTU0VSVF9O
RShWYWx1ZSgiYSIsIDEpLCBWYWx1ZSgiZm9vIiwgMykpOworfQorCitURVNUKENSQywgRXh0ZW5k
KSB7CisgIEFTU0VSVF9FUShWYWx1ZSgiaGVsbG8gd29ybGQiLCAxMSksCisgICAgICAgICAgICBF
eHRlbmQoVmFsdWUoImhlbGxvICIsIDYpLCAid29ybGQiLCA1KSk7Cit9CisKK1RFU1QoQ1JDLCBN
YXNrKSB7CisgIHVpbnQzMl90IGNyYyA9IFZhbHVlKCJmb28iLCAzKTsKKyAgQVNTRVJUX05FKGNy
YywgTWFzayhjcmMpKTsKKyAgQVNTRVJUX05FKGNyYywgTWFzayhNYXNrKGNyYykpKTsKKyAgQVNT
RVJUX0VRKGNyYywgVW5tYXNrKE1hc2soY3JjKSkpOworICBBU1NFUlRfRVEoY3JjLCBVbm1hc2so
VW5tYXNrKE1hc2soTWFzayhjcmMpKSkpKTsKK30KKworfSAgLy8gbmFtZXNwYWNlIGNyYzMyYwor
fSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2
KSB7CisgIHJldHVybiBsZXZlbGRiOjp0ZXN0OjpSdW5BbGxUZXN0cygpOworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2Vudi5jYyBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xldmVsZGIvdXRpbC9lbnYuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzI2MDBlOTY0YTI2MGM4N2YyMmFm
YzhjNWEzZTc3ODhiNGM3ZTM1MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xldmVsZGIvdXRpbC9lbnYuY2MKQEAgLTAsMCArMSw5NiBAQAorLy8gQ29weXJpZ2h0IChjKSAy
MDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmls
ZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgorCisjaW5jbHVkZSAibGV2ZWxkYi9lbnYuaCIK
KworbmFtZXNwYWNlIGxldmVsZGIgeworCitFbnY6On5FbnYoKSB7Cit9CisKK1NlcXVlbnRpYWxG
aWxlOjp+U2VxdWVudGlhbEZpbGUoKSB7Cit9CisKK1JhbmRvbUFjY2Vzc0ZpbGU6On5SYW5kb21B
Y2Nlc3NGaWxlKCkgeworfQorCitXcml0YWJsZUZpbGU6On5Xcml0YWJsZUZpbGUoKSB7Cit9CisK
K0xvZ2dlcjo6fkxvZ2dlcigpIHsKK30KKworRmlsZUxvY2s6On5GaWxlTG9jaygpIHsKK30KKwor
dm9pZCBMb2coTG9nZ2VyKiBpbmZvX2xvZywgY29uc3QgY2hhciogZm9ybWF0LCAuLi4pIHsKKyAg
aWYgKGluZm9fbG9nICE9IE5VTEwpIHsKKyAgICB2YV9saXN0IGFwOworICAgIHZhX3N0YXJ0KGFw
LCBmb3JtYXQpOworICAgIGluZm9fbG9nLT5Mb2d2KGZvcm1hdCwgYXApOworICAgIHZhX2VuZChh
cCk7CisgIH0KK30KKworc3RhdGljIFN0YXR1cyBEb1dyaXRlU3RyaW5nVG9GaWxlKEVudiogZW52
LCBjb25zdCBTbGljZSYgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBzdGQ6OnN0cmluZyYgZm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBzaG91bGRfc3luYykgeworICBXcml0YWJsZUZpbGUqIGZpbGU7CisgIFN0YXR1cyBz
ID0gZW52LT5OZXdXcml0YWJsZUZpbGUoZm5hbWUsICZmaWxlKTsKKyAgaWYgKCFzLm9rKCkpIHsK
KyAgICByZXR1cm4gczsKKyAgfQorICBzID0gZmlsZS0+QXBwZW5kKGRhdGEpOworICBpZiAocy5v
aygpICYmIHNob3VsZF9zeW5jKSB7CisgICAgcyA9IGZpbGUtPlN5bmMoKTsKKyAgfQorICBpZiAo
cy5vaygpKSB7CisgICAgcyA9IGZpbGUtPkNsb3NlKCk7CisgIH0KKyAgZGVsZXRlIGZpbGU7ICAv
LyBXaWxsIGF1dG8tY2xvc2UgaWYgd2UgZGlkIG5vdCBjbG9zZSBhYm92ZQorICBpZiAoIXMub2so
KSkgeworICAgIGVudi0+RGVsZXRlRmlsZShmbmFtZSk7CisgIH0KKyAgcmV0dXJuIHM7Cit9CisK
K1N0YXR1cyBXcml0ZVN0cmluZ1RvRmlsZShFbnYqIGVudiwgY29uc3QgU2xpY2UmIGRhdGEsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZuYW1lKSB7CisgIHJl
dHVybiBEb1dyaXRlU3RyaW5nVG9GaWxlKGVudiwgZGF0YSwgZm5hbWUsIGZhbHNlKTsKK30KKwor
U3RhdHVzIFdyaXRlU3RyaW5nVG9GaWxlU3luYyhFbnYqIGVudiwgY29uc3QgU2xpY2UmIGRhdGEs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmbmFtZSkg
eworICByZXR1cm4gRG9Xcml0ZVN0cmluZ1RvRmlsZShlbnYsIGRhdGEsIGZuYW1lLCB0cnVlKTsK
K30KKworU3RhdHVzIFJlYWRGaWxlVG9TdHJpbmcoRW52KiBlbnYsIGNvbnN0IHN0ZDo6c3RyaW5n
JiBmbmFtZSwgc3RkOjpzdHJpbmcqIGRhdGEpIHsKKyAgZGF0YS0+Y2xlYXIoKTsKKyAgU2VxdWVu
dGlhbEZpbGUqIGZpbGU7CisgIFN0YXR1cyBzID0gZW52LT5OZXdTZXF1ZW50aWFsRmlsZShmbmFt
ZSwgJmZpbGUpOworICBpZiAoIXMub2soKSkgeworICAgIHJldHVybiBzOworICB9CisgIHN0YXRp
YyBjb25zdCBpbnQga0J1ZmZlclNpemUgPSA4MTkyOworICBjaGFyKiBzcGFjZSA9IG5ldyBjaGFy
W2tCdWZmZXJTaXplXTsKKyAgd2hpbGUgKHRydWUpIHsKKyAgICBTbGljZSBmcmFnbWVudDsKKyAg
ICBzID0gZmlsZS0+UmVhZChrQnVmZmVyU2l6ZSwgJmZyYWdtZW50LCBzcGFjZSk7CisgICAgaWYg
KCFzLm9rKCkpIHsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBkYXRhLT5hcHBlbmQoZnJhZ21l
bnQuZGF0YSgpLCBmcmFnbWVudC5zaXplKCkpOworICAgIGlmIChmcmFnbWVudC5lbXB0eSgpKSB7
CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgZGVsZXRlW10gc3BhY2U7CisgIGRlbGV0ZSBm
aWxlOworICByZXR1cm4gczsKK30KKworRW52V3JhcHBlcjo6fkVudldyYXBwZXIoKSB7Cit9CisK
K30gIC8vIG5hbWVzcGFjZSBsZXZlbGRiCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
ZXZlbGRiL3V0aWwvZW52X3Bvc2l4LmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGls
L2Vudl9wb3NpeC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43OGUwOWM5NWM5OTkwMjM4M2IxNTJhNjMwZDUyMmY0
NjIwZjU2MjIyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91
dGlsL2Vudl9wb3NpeC5jYwpAQCAtMCwwICsxLDY5OCBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDEx
IFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBm
b3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgorCisjaW5jbHVkZSA8ZGVxdWU+CisjaW5jbHVkZSA8
c2V0PgorI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8
ZmNudGwuaD4KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNs
dWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMvbW1hbi5o
PgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRl
IDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+Cisj
aWYgZGVmaW5lZChMRVZFTERCX1BMQVRGT1JNX0FORFJPSUQpCisjaW5jbHVkZSA8c3lzL3N0YXQu
aD4KKyNlbmRpZgorI2luY2x1ZGUgImxldmVsZGIvZW52LmgiCisjaW5jbHVkZSAibGV2ZWxkYi9z
bGljZS5oIgorI2luY2x1ZGUgInBvcnQvcG9ydC5oIgorI2luY2x1ZGUgInV0aWwvbG9nZ2luZy5o
IgorI2luY2x1ZGUgInV0aWwvbXV0ZXhsb2NrLmgiCisjaW5jbHVkZSAidXRpbC9wb3NpeF9sb2dn
ZXIuaCIKKworbmFtZXNwYWNlIGxldmVsZGIgeworCituYW1lc3BhY2UgeworCitzdGF0aWMgU3Rh
dHVzIElPRXJyb3IoY29uc3Qgc3RkOjpzdHJpbmcmIGNvbnRleHQsIGludCBlcnJfbnVtYmVyKSB7
CisgIHJldHVybiBTdGF0dXM6OklPRXJyb3IoY29udGV4dCwgc3RyZXJyb3IoZXJyX251bWJlcikp
OworfQorCitjbGFzcyBQb3NpeFNlcXVlbnRpYWxGaWxlOiBwdWJsaWMgU2VxdWVudGlhbEZpbGUg
eworIHByaXZhdGU6CisgIHN0ZDo6c3RyaW5nIGZpbGVuYW1lXzsKKyAgRklMRSogZmlsZV87CisK
KyBwdWJsaWM6CisgIFBvc2l4U2VxdWVudGlhbEZpbGUoY29uc3Qgc3RkOjpzdHJpbmcmIGZuYW1l
LCBGSUxFKiBmKQorICAgICAgOiBmaWxlbmFtZV8oZm5hbWUpLCBmaWxlXyhmKSB7IH0KKyAgdmly
dHVhbCB+UG9zaXhTZXF1ZW50aWFsRmlsZSgpIHsgZmNsb3NlKGZpbGVfKTsgfQorCisgIHZpcnR1
YWwgU3RhdHVzIFJlYWQoc2l6ZV90IG4sIFNsaWNlKiByZXN1bHQsIGNoYXIqIHNjcmF0Y2gpIHsK
KyAgICBTdGF0dXMgczsKKyAgICBzaXplX3QgciA9IGZyZWFkX3VubG9ja2VkKHNjcmF0Y2gsIDEs
IG4sIGZpbGVfKTsKKyAgICAqcmVzdWx0ID0gU2xpY2Uoc2NyYXRjaCwgcik7CisgICAgaWYgKHIg
PCBuKSB7CisgICAgICBpZiAoZmVvZihmaWxlXykpIHsKKyAgICAgICAgLy8gV2UgbGVhdmUgc3Rh
dHVzIGFzIG9rIGlmIHdlIGhpdCB0aGUgZW5kIG9mIHRoZSBmaWxlCisgICAgICB9IGVsc2Ugewor
ICAgICAgICAvLyBBIHBhcnRpYWwgcmVhZCB3aXRoIGFuIGVycm9yOiByZXR1cm4gYSBub24tb2sg
c3RhdHVzCisgICAgICAgIHMgPSBJT0Vycm9yKGZpbGVuYW1lXywgZXJybm8pOworICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gczsKKyAgfQorCisgIHZpcnR1YWwgU3RhdHVzIFNraXAodWludDY0
X3QgbikgeworICAgIGlmIChmc2VlayhmaWxlXywgbiwgU0VFS19DVVIpKSB7CisgICAgICByZXR1
cm4gSU9FcnJvcihmaWxlbmFtZV8sIGVycm5vKTsKKyAgICB9CisgICAgcmV0dXJuIFN0YXR1czo6
T0soKTsKKyAgfQorfTsKKworLy8gcHJlYWQoKSBiYXNlZCByYW5kb20tYWNjZXNzCitjbGFzcyBQ
b3NpeFJhbmRvbUFjY2Vzc0ZpbGU6IHB1YmxpYyBSYW5kb21BY2Nlc3NGaWxlIHsKKyBwcml2YXRl
OgorICBzdGQ6OnN0cmluZyBmaWxlbmFtZV87CisgIGludCBmZF87CisKKyBwdWJsaWM6CisgIFBv
c2l4UmFuZG9tQWNjZXNzRmlsZShjb25zdCBzdGQ6OnN0cmluZyYgZm5hbWUsIGludCBmZCkKKyAg
ICAgIDogZmlsZW5hbWVfKGZuYW1lKSwgZmRfKGZkKSB7IH0KKyAgdmlydHVhbCB+UG9zaXhSYW5k
b21BY2Nlc3NGaWxlKCkgeyBjbG9zZShmZF8pOyB9CisKKyAgdmlydHVhbCBTdGF0dXMgUmVhZCh1
aW50NjRfdCBvZmZzZXQsIHNpemVfdCBuLCBTbGljZSogcmVzdWx0LAorICAgICAgICAgICAgICAg
ICAgICAgIGNoYXIqIHNjcmF0Y2gpIGNvbnN0IHsKKyAgICBTdGF0dXMgczsKKyAgICBzc2l6ZV90
IHIgPSBwcmVhZChmZF8sIHNjcmF0Y2gsIG4sIHN0YXRpY19jYXN0PG9mZl90PihvZmZzZXQpKTsK
KyAgICAqcmVzdWx0ID0gU2xpY2Uoc2NyYXRjaCwgKHIgPCAwKSA/IDAgOiByKTsKKyAgICBpZiAo
ciA8IDApIHsKKyAgICAgIC8vIEFuIGVycm9yOiByZXR1cm4gYSBub24tb2sgc3RhdHVzCisgICAg
ICBzID0gSU9FcnJvcihmaWxlbmFtZV8sIGVycm5vKTsKKyAgICB9CisgICAgcmV0dXJuIHM7Cisg
IH0KK307CisKKy8vIEhlbHBlciBjbGFzcyB0byBsaW1pdCBtbWFwIGZpbGUgdXNhZ2Ugc28gdGhh
dCB3ZSBkbyBub3QgZW5kIHVwCisvLyBydW5uaW5nIG91dCB2aXJ0dWFsIG1lbW9yeSBvciBydW5u
aW5nIGludG8ga2VybmVsIHBlcmZvcm1hbmNlCisvLyBwcm9ibGVtcyBmb3IgdmVyeSBsYXJnZSBk
YXRhYmFzZXMuCitjbGFzcyBNbWFwTGltaXRlciB7CisgcHVibGljOgorICAvLyBVcCB0byAxMDAw
IG1tYXBzIGZvciA2NC1iaXQgYmluYXJpZXM7IG5vbmUgZm9yIHNtYWxsZXIgcG9pbnRlciBzaXpl
cy4KKyAgTW1hcExpbWl0ZXIoKSB7CisgICAgU2V0QWxsb3dlZChzaXplb2Yodm9pZCopID49IDgg
PyAxMDAwIDogMCk7CisgIH0KKworICAvLyBJZiBhbm90aGVyIG1tYXAgc2xvdCBpcyBhdmFpbGFi
bGUsIGFjcXVpcmUgaXQgYW5kIHJldHVybiB0cnVlLgorICAvLyBFbHNlIHJldHVybiBmYWxzZS4K
KyAgYm9vbCBBY3F1aXJlKCkgeworICAgIGlmIChHZXRBbGxvd2VkKCkgPD0gMCkgeworICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBNdXRleExvY2sgbCgmbXVfKTsKKyAgICBpbnRwdHJf
dCB4ID0gR2V0QWxsb3dlZCgpOworICAgIGlmICh4IDw9IDApIHsKKyAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9IGVsc2UgeworICAgICAgU2V0QWxsb3dlZCh4IC0gMSk7CisgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgIH0KKworICAvLyBSZWxlYXNlIGEgc2xvdCBhY3F1aXJlZCBieSBhIHBy
ZXZpb3VzIGNhbGwgdG8gQWNxdWlyZSgpIHRoYXQgcmV0dXJuZWQgdHJ1ZS4KKyAgdm9pZCBSZWxl
YXNlKCkgeworICAgIE11dGV4TG9jayBsKCZtdV8pOworICAgIFNldEFsbG93ZWQoR2V0QWxsb3dl
ZCgpICsgMSk7CisgIH0KKworIHByaXZhdGU6CisgIHBvcnQ6Ok11dGV4IG11XzsKKyAgcG9ydDo6
QXRvbWljUG9pbnRlciBhbGxvd2VkXzsKKworICBpbnRwdHJfdCBHZXRBbGxvd2VkKCkgY29uc3Qg
eworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGludHB0cl90PihhbGxvd2VkXy5BY3F1aXJl
X0xvYWQoKSk7CisgIH0KKworICAvLyBSRVFVSVJFUzogbXVfIG11c3QgYmUgaGVsZAorICB2b2lk
IFNldEFsbG93ZWQoaW50cHRyX3QgdikgeworICAgIGFsbG93ZWRfLlJlbGVhc2VfU3RvcmUocmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4odikpOworICB9CisKKyAgTW1hcExpbWl0ZXIoY29uc3QgTW1h
cExpbWl0ZXImKTsKKyAgdm9pZCBvcGVyYXRvcj0oY29uc3QgTW1hcExpbWl0ZXImKTsKK307CisK
Ky8vIG1tYXAoKSBiYXNlZCByYW5kb20tYWNjZXNzCitjbGFzcyBQb3NpeE1tYXBSZWFkYWJsZUZp
bGU6IHB1YmxpYyBSYW5kb21BY2Nlc3NGaWxlIHsKKyBwcml2YXRlOgorICBzdGQ6OnN0cmluZyBm
aWxlbmFtZV87CisgIHZvaWQqIG1tYXBwZWRfcmVnaW9uXzsKKyAgc2l6ZV90IGxlbmd0aF87Cisg
IE1tYXBMaW1pdGVyKiBsaW1pdGVyXzsKKworIHB1YmxpYzoKKyAgLy8gYmFzZVswLGxlbmd0aC0x
XSBjb250YWlucyB0aGUgbW1hcHBlZCBjb250ZW50cyBvZiB0aGUgZmlsZS4KKyAgUG9zaXhNbWFw
UmVhZGFibGVGaWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBmbmFtZSwgdm9pZCogYmFzZSwgc2l6ZV90
IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1tYXBMaW1pdGVyKiBsaW1pdGVyKQor
ICAgICAgOiBmaWxlbmFtZV8oZm5hbWUpLCBtbWFwcGVkX3JlZ2lvbl8oYmFzZSksIGxlbmd0aF8o
bGVuZ3RoKSwKKyAgICAgICAgbGltaXRlcl8obGltaXRlcikgeworICB9CisKKyAgdmlydHVhbCB+
UG9zaXhNbWFwUmVhZGFibGVGaWxlKCkgeworICAgIG11bm1hcChtbWFwcGVkX3JlZ2lvbl8sIGxl
bmd0aF8pOworICAgIGxpbWl0ZXJfLT5SZWxlYXNlKCk7CisgIH0KKworICB2aXJ0dWFsIFN0YXR1
cyBSZWFkKHVpbnQ2NF90IG9mZnNldCwgc2l6ZV90IG4sIFNsaWNlKiByZXN1bHQsCisgICAgICAg
ICAgICAgICAgICAgICAgY2hhciogc2NyYXRjaCkgY29uc3QgeworICAgIFN0YXR1cyBzOworICAg
IGlmIChvZmZzZXQgKyBuID4gbGVuZ3RoXykgeworICAgICAgKnJlc3VsdCA9IFNsaWNlKCk7Cisg
ICAgICBzID0gSU9FcnJvcihmaWxlbmFtZV8sIEVJTlZBTCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICpyZXN1bHQgPSBTbGljZShyZWludGVycHJldF9jYXN0PGNoYXIqPihtbWFwcGVkX3JlZ2lvbl8p
ICsgb2Zmc2V0LCBuKTsKKyAgICB9CisgICAgcmV0dXJuIHM7CisgIH0KK307CisKKy8vIFdlIHBy
ZWFsbG9jYXRlIHVwIHRvIGFuIGV4dHJhIG1lZ2FieXRlIGFuZCB1c2UgbWVtY3B5IHRvIGFwcGVu
ZCBuZXcKKy8vIGRhdGEgdG8gdGhlIGZpbGUuICBUaGlzIGlzIHNhZmUgc2luY2Ugd2UgZWl0aGVy
IHByb3Blcmx5IGNsb3NlIHRoZQorLy8gZmlsZSBiZWZvcmUgcmVhZGluZyBmcm9tIGl0LCBvciBm
b3IgbG9nIGZpbGVzLCB0aGUgcmVhZGluZyBjb2RlCisvLyBrbm93cyBlbm91Z2ggdG8gc2tpcCB6
ZXJvIHN1ZmZpeGVzLgorY2xhc3MgUG9zaXhNbWFwRmlsZSA6IHB1YmxpYyBXcml0YWJsZUZpbGUg
eworIHByaXZhdGU6CisgIHN0ZDo6c3RyaW5nIGZpbGVuYW1lXzsKKyAgaW50IGZkXzsKKyAgc2l6
ZV90IHBhZ2Vfc2l6ZV87CisgIHNpemVfdCBtYXBfc2l6ZV87ICAgICAgIC8vIEhvdyBtdWNoIGV4
dHJhIG1lbW9yeSB0byBtYXAgYXQgYSB0aW1lCisgIGNoYXIqIGJhc2VfOyAgICAgICAgICAgIC8v
IFRoZSBtYXBwZWQgcmVnaW9uCisgIGNoYXIqIGxpbWl0XzsgICAgICAgICAgIC8vIExpbWl0IG9m
IHRoZSBtYXBwZWQgcmVnaW9uCisgIGNoYXIqIGRzdF87ICAgICAgICAgICAgIC8vIFdoZXJlIHRv
IHdyaXRlIG5leHQgIChpbiByYW5nZSBbYmFzZV8sbGltaXRfXSkKKyAgY2hhciogbGFzdF9zeW5j
XzsgICAgICAgLy8gV2hlcmUgaGF2ZSB3ZSBzeW5jZWQgdXAgdG8KKyAgdWludDY0X3QgZmlsZV9v
ZmZzZXRfOyAgLy8gT2Zmc2V0IG9mIGJhc2VfIGluIGZpbGUKKworICAvLyBIYXZlIHdlIGRvbmUg
YW4gbXVubWFwIG9mIHVuc3luY2VkIGRhdGE/CisgIGJvb2wgcGVuZGluZ19zeW5jXzsKKworICAv
LyBSb3VuZHVwIHggdG8gYSBtdWx0aXBsZSBvZiB5CisgIHN0YXRpYyBzaXplX3QgUm91bmR1cChz
aXplX3QgeCwgc2l6ZV90IHkpIHsKKyAgICByZXR1cm4gKCh4ICsgeSAtIDEpIC8geSkgKiB5Owor
ICB9CisKKyAgc2l6ZV90IFRydW5jYXRlVG9QYWdlQm91bmRhcnkoc2l6ZV90IHMpIHsKKyAgICBz
IC09IChzICYgKHBhZ2Vfc2l6ZV8gLSAxKSk7CisgICAgYXNzZXJ0KChzICUgcGFnZV9zaXplXykg
PT0gMCk7CisgICAgcmV0dXJuIHM7CisgIH0KKworICBib29sIFVubWFwQ3VycmVudFJlZ2lvbigp
IHsKKyAgICBib29sIHJlc3VsdCA9IHRydWU7CisgICAgaWYgKGJhc2VfICE9IE5VTEwpIHsKKyAg
ICAgIGlmIChsYXN0X3N5bmNfIDwgbGltaXRfKSB7CisgICAgICAgIC8vIERlZmVyIHN5bmNpbmcg
dGhpcyBkYXRhIHVudGlsIG5leHQgU3luYygpIGNhbGwsIGlmIGFueQorICAgICAgICBwZW5kaW5n
X3N5bmNfID0gdHJ1ZTsKKyAgICAgIH0KKyAgICAgIGlmIChtdW5tYXAoYmFzZV8sIGxpbWl0XyAt
IGJhc2VfKSAhPSAwKSB7CisgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgfQorICAgICAg
ZmlsZV9vZmZzZXRfICs9IGxpbWl0XyAtIGJhc2VfOworICAgICAgYmFzZV8gPSBOVUxMOworICAg
ICAgbGltaXRfID0gTlVMTDsKKyAgICAgIGxhc3Rfc3luY18gPSBOVUxMOworICAgICAgZHN0XyA9
IE5VTEw7CisKKyAgICAgIC8vIEluY3JlYXNlIHRoZSBhbW91bnQgd2UgbWFwIHRoZSBuZXh0IHRp
bWUsIGJ1dCBjYXBwZWQgYXQgMU1CCisgICAgICBpZiAobWFwX3NpemVfIDwgKDE8PDIwKSkgewor
ICAgICAgICBtYXBfc2l6ZV8gKj0gMjsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgfQorCisgIGJvb2wgTWFwTmV3UmVnaW9uKCkgeworICAgIGFzc2VydChiYXNlXyA9PSBO
VUxMKTsKKyAgICBpZiAoZnRydW5jYXRlKGZkXywgZmlsZV9vZmZzZXRfICsgbWFwX3NpemVfKSA8
IDApIHsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgdm9pZCogcHRyID0gbW1hcChO
VUxMLCBtYXBfc2l6ZV8sIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsCisgICAg
ICAgICAgICAgICAgICAgICBmZF8sIGZpbGVfb2Zmc2V0Xyk7CisgICAgaWYgKHB0ciA9PSBNQVBf
RkFJTEVEKSB7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGJhc2VfID0gcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4ocHRyKTsKKyAgICBsaW1pdF8gPSBiYXNlXyArIG1hcF9zaXplXzsK
KyAgICBkc3RfID0gYmFzZV87CisgICAgbGFzdF9zeW5jXyA9IGJhc2VfOworICAgIHJldHVybiB0
cnVlOworICB9CisKKyBwdWJsaWM6CisgIFBvc2l4TW1hcEZpbGUoY29uc3Qgc3RkOjpzdHJpbmcm
IGZuYW1lLCBpbnQgZmQsIHNpemVfdCBwYWdlX3NpemUpCisgICAgICA6IGZpbGVuYW1lXyhmbmFt
ZSksCisgICAgICAgIGZkXyhmZCksCisgICAgICAgIHBhZ2Vfc2l6ZV8ocGFnZV9zaXplKSwKKyAg
ICAgICAgbWFwX3NpemVfKFJvdW5kdXAoNjU1MzYsIHBhZ2Vfc2l6ZSkpLAorICAgICAgICBiYXNl
XyhOVUxMKSwKKyAgICAgICAgbGltaXRfKE5VTEwpLAorICAgICAgICBkc3RfKE5VTEwpLAorICAg
ICAgICBsYXN0X3N5bmNfKE5VTEwpLAorICAgICAgICBmaWxlX29mZnNldF8oMCksCisgICAgICAg
IHBlbmRpbmdfc3luY18oZmFsc2UpIHsKKyAgICBhc3NlcnQoKHBhZ2Vfc2l6ZSAmIChwYWdlX3Np
emUgLSAxKSkgPT0gMCk7CisgIH0KKworCisgIH5Qb3NpeE1tYXBGaWxlKCkgeworICAgIGlmIChm
ZF8gPj0gMCkgeworICAgICAgUG9zaXhNbWFwRmlsZTo6Q2xvc2UoKTsKKyAgICB9CisgIH0KKwor
ICB2aXJ0dWFsIFN0YXR1cyBBcHBlbmQoY29uc3QgU2xpY2UmIGRhdGEpIHsKKyAgICBjb25zdCBj
aGFyKiBzcmMgPSBkYXRhLmRhdGEoKTsKKyAgICBzaXplX3QgbGVmdCA9IGRhdGEuc2l6ZSgpOwor
ICAgIHdoaWxlIChsZWZ0ID4gMCkgeworICAgICAgYXNzZXJ0KGJhc2VfIDw9IGRzdF8pOworICAg
ICAgYXNzZXJ0KGRzdF8gPD0gbGltaXRfKTsKKyAgICAgIHNpemVfdCBhdmFpbCA9IGxpbWl0XyAt
IGRzdF87CisgICAgICBpZiAoYXZhaWwgPT0gMCkgeworICAgICAgICBpZiAoIVVubWFwQ3VycmVu
dFJlZ2lvbigpIHx8CisgICAgICAgICAgICAhTWFwTmV3UmVnaW9uKCkpIHsKKyAgICAgICAgICBy
ZXR1cm4gSU9FcnJvcihmaWxlbmFtZV8sIGVycm5vKTsKKyAgICAgICAgfQorICAgICAgfQorCisg
ICAgICBzaXplX3QgbiA9IChsZWZ0IDw9IGF2YWlsKSA/IGxlZnQgOiBhdmFpbDsKKyAgICAgIG1l
bWNweShkc3RfLCBzcmMsIG4pOworICAgICAgZHN0XyArPSBuOworICAgICAgc3JjICs9IG47Cisg
ICAgICBsZWZ0IC09IG47CisgICAgfQorICAgIHJldHVybiBTdGF0dXM6Ok9LKCk7CisgIH0KKwor
ICB2aXJ0dWFsIFN0YXR1cyBDbG9zZSgpIHsKKyAgICBTdGF0dXMgczsKKyAgICBzaXplX3QgdW51
c2VkID0gbGltaXRfIC0gZHN0XzsKKyAgICBpZiAoIVVubWFwQ3VycmVudFJlZ2lvbigpKSB7Cisg
ICAgICBzID0gSU9FcnJvcihmaWxlbmFtZV8sIGVycm5vKTsKKyAgICB9IGVsc2UgaWYgKHVudXNl
ZCA+IDApIHsKKyAgICAgIC8vIFRyaW0gdGhlIGV4dHJhIHNwYWNlIGF0IHRoZSBlbmQgb2YgdGhl
IGZpbGUKKyAgICAgIGlmIChmdHJ1bmNhdGUoZmRfLCBmaWxlX29mZnNldF8gLSB1bnVzZWQpIDwg
MCkgeworICAgICAgICBzID0gSU9FcnJvcihmaWxlbmFtZV8sIGVycm5vKTsKKyAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAoY2xvc2UoZmRfKSA8IDApIHsKKyAgICAgIGlmIChzLm9rKCkpIHsKKyAg
ICAgICAgcyA9IElPRXJyb3IoZmlsZW5hbWVfLCBlcnJubyk7CisgICAgICB9CisgICAgfQorCisg
ICAgZmRfID0gLTE7CisgICAgYmFzZV8gPSBOVUxMOworICAgIGxpbWl0XyA9IE5VTEw7CisgICAg
cmV0dXJuIHM7CisgIH0KKworICB2aXJ0dWFsIFN0YXR1cyBGbHVzaCgpIHsKKyAgICByZXR1cm4g
U3RhdHVzOjpPSygpOworICB9CisKKyAgdmlydHVhbCBTdGF0dXMgU3luYygpIHsKKyAgICBTdGF0
dXMgczsKKworICAgIGlmIChwZW5kaW5nX3N5bmNfKSB7CisgICAgICAvLyBTb21lIHVubWFwcGVk
IGRhdGEgd2FzIG5vdCBzeW5jZWQKKyAgICAgIHBlbmRpbmdfc3luY18gPSBmYWxzZTsKKyAgICAg
IGlmIChmZGF0YXN5bmMoZmRfKSA8IDApIHsKKyAgICAgICAgcyA9IElPRXJyb3IoZmlsZW5hbWVf
LCBlcnJubyk7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKGRzdF8gPiBsYXN0X3N5bmNfKSB7
CisgICAgICAvLyBGaW5kIHRoZSBiZWdpbm5pbmdzIG9mIHRoZSBwYWdlcyB0aGF0IGNvbnRhaW4g
dGhlIGZpcnN0IGFuZCBsYXN0CisgICAgICAvLyBieXRlcyB0byBiZSBzeW5jZWQuCisgICAgICBz
aXplX3QgcDEgPSBUcnVuY2F0ZVRvUGFnZUJvdW5kYXJ5KGxhc3Rfc3luY18gLSBiYXNlXyk7Cisg
ICAgICBzaXplX3QgcDIgPSBUcnVuY2F0ZVRvUGFnZUJvdW5kYXJ5KGRzdF8gLSBiYXNlXyAtIDEp
OworICAgICAgbGFzdF9zeW5jXyA9IGRzdF87CisgICAgICBpZiAobXN5bmMoYmFzZV8gKyBwMSwg
cDIgLSBwMSArIHBhZ2Vfc2l6ZV8sIE1TX1NZTkMpIDwgMCkgeworICAgICAgICBzID0gSU9FcnJv
cihmaWxlbmFtZV8sIGVycm5vKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gczsKKyAg
fQorfTsKKworc3RhdGljIGludCBMb2NrT3JVbmxvY2soaW50IGZkLCBib29sIGxvY2spIHsKKyAg
ZXJybm8gPSAwOworICBzdHJ1Y3QgZmxvY2sgZjsKKyAgbWVtc2V0KCZmLCAwLCBzaXplb2YoZikp
OworICBmLmxfdHlwZSA9IChsb2NrID8gRl9XUkxDSyA6IEZfVU5MQ0spOworICBmLmxfd2hlbmNl
ID0gU0VFS19TRVQ7CisgIGYubF9zdGFydCA9IDA7CisgIGYubF9sZW4gPSAwOyAgICAgICAgLy8g
TG9jay91bmxvY2sgZW50aXJlIGZpbGUKKyAgcmV0dXJuIGZjbnRsKGZkLCBGX1NFVExLLCAmZik7
Cit9CisKK2NsYXNzIFBvc2l4RmlsZUxvY2sgOiBwdWJsaWMgRmlsZUxvY2sgeworIHB1YmxpYzoK
KyAgaW50IGZkXzsKKyAgc3RkOjpzdHJpbmcgbmFtZV87Cit9OworCisvLyBTZXQgb2YgbG9ja2Vk
IGZpbGVzLiAgV2Uga2VlcCBhIHNlcGFyYXRlIHNldCBpbnN0ZWFkIG9mIGp1c3QKKy8vIHJlbHlp
bmcgb24gZmNudHJsKEZfU0VUTEspIHNpbmNlIGZjbnRsKEZfU0VUTEspIGRvZXMgbm90IHByb3Zp
ZGUKKy8vIGFueSBwcm90ZWN0aW9uIGFnYWluc3QgbXVsdGlwbGUgdXNlcyBmcm9tIHRoZSBzYW1l
IHByb2Nlc3MuCitjbGFzcyBQb3NpeExvY2tUYWJsZSB7CisgcHJpdmF0ZToKKyAgcG9ydDo6TXV0
ZXggbXVfOworICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gbG9ja2VkX2ZpbGVzXzsKKyBwdWJsaWM6
CisgIGJvb2wgSW5zZXJ0KGNvbnN0IHN0ZDo6c3RyaW5nJiBmbmFtZSkgeworICAgIE11dGV4TG9j
ayBsKCZtdV8pOworICAgIHJldHVybiBsb2NrZWRfZmlsZXNfLmluc2VydChmbmFtZSkuc2Vjb25k
OworICB9CisgIHZvaWQgUmVtb3ZlKGNvbnN0IHN0ZDo6c3RyaW5nJiBmbmFtZSkgeworICAgIE11
dGV4TG9jayBsKCZtdV8pOworICAgIGxvY2tlZF9maWxlc18uZXJhc2UoZm5hbWUpOworICB9Cit9
OworCitjbGFzcyBQb3NpeEVudiA6IHB1YmxpYyBFbnYgeworIHB1YmxpYzoKKyAgUG9zaXhFbnYo
KTsKKyAgdmlydHVhbCB+UG9zaXhFbnYoKSB7CisgICAgZnByaW50ZihzdGRlcnIsICJEZXN0cm95
aW5nIEVudjo6RGVmYXVsdCgpXG4iKTsKKyAgICBleGl0KDEpOworICB9CisKKyAgdmlydHVhbCBT
dGF0dXMgTmV3U2VxdWVudGlhbEZpbGUoY29uc3Qgc3RkOjpzdHJpbmcmIGZuYW1lLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXF1ZW50aWFsRmlsZSoqIHJlc3VsdCkgewor
ICAgIEZJTEUqIGYgPSBmb3BlbihmbmFtZS5jX3N0cigpLCAiciIpOworICAgIGlmIChmID09IE5V
TEwpIHsKKyAgICAgICpyZXN1bHQgPSBOVUxMOworICAgICAgcmV0dXJuIElPRXJyb3IoZm5hbWUs
IGVycm5vKTsKKyAgICB9IGVsc2UgeworICAgICAgKnJlc3VsdCA9IG5ldyBQb3NpeFNlcXVlbnRp
YWxGaWxlKGZuYW1lLCBmKTsKKyAgICAgIHJldHVybiBTdGF0dXM6Ok9LKCk7CisgICAgfQorICB9
CisKKyAgdmlydHVhbCBTdGF0dXMgTmV3UmFuZG9tQWNjZXNzRmlsZShjb25zdCBzdGQ6OnN0cmlu
ZyYgZm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmFuZG9tQWNj
ZXNzRmlsZSoqIHJlc3VsdCkgeworICAgICpyZXN1bHQgPSBOVUxMOworICAgIFN0YXR1cyBzOwor
ICAgIGludCBmZCA9IG9wZW4oZm5hbWUuY19zdHIoKSwgT19SRE9OTFkpOworICAgIGlmIChmZCA8
IDApIHsKKyAgICAgIHMgPSBJT0Vycm9yKGZuYW1lLCBlcnJubyk7CisgICAgfSBlbHNlIGlmICht
bWFwX2xpbWl0Xy5BY3F1aXJlKCkpIHsKKyAgICAgIHVpbnQ2NF90IHNpemU7CisgICAgICBzID0g
R2V0RmlsZVNpemUoZm5hbWUsICZzaXplKTsKKyAgICAgIGlmIChzLm9rKCkpIHsKKyAgICAgICAg
dm9pZCogYmFzZSA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFELCBNQVBfU0hBUkVELCBmZCwg
MCk7CisgICAgICAgIGlmIChiYXNlICE9IE1BUF9GQUlMRUQpIHsKKyAgICAgICAgICAqcmVzdWx0
ID0gbmV3IFBvc2l4TW1hcFJlYWRhYmxlRmlsZShmbmFtZSwgYmFzZSwgc2l6ZSwgJm1tYXBfbGlt
aXRfKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBzID0gSU9FcnJvcihmbmFtZSwgZXJy
bm8pOworICAgICAgICB9CisgICAgICB9CisgICAgICBjbG9zZShmZCk7CisgICAgICBpZiAoIXMu
b2soKSkgeworICAgICAgICBtbWFwX2xpbWl0Xy5SZWxlYXNlKCk7CisgICAgICB9CisgICAgfSBl
bHNlIHsKKyAgICAgICpyZXN1bHQgPSBuZXcgUG9zaXhSYW5kb21BY2Nlc3NGaWxlKGZuYW1lLCBm
ZCk7CisgICAgfQorICAgIHJldHVybiBzOworICB9CisKKyAgdmlydHVhbCBTdGF0dXMgTmV3V3Jp
dGFibGVGaWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBmbmFtZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFdyaXRhYmxlRmlsZSoqIHJlc3VsdCkgeworICAgIFN0YXR1cyBzOworICAg
IGNvbnN0IGludCBmZCA9IG9wZW4oZm5hbWUuY19zdHIoKSwgT19DUkVBVCB8IE9fUkRXUiB8IE9f
VFJVTkMsIDA2NDQpOworICAgIGlmIChmZCA8IDApIHsKKyAgICAgICpyZXN1bHQgPSBOVUxMOwor
ICAgICAgcyA9IElPRXJyb3IoZm5hbWUsIGVycm5vKTsKKyAgICB9IGVsc2UgeworICAgICAgKnJl
c3VsdCA9IG5ldyBQb3NpeE1tYXBGaWxlKGZuYW1lLCBmZCwgcGFnZV9zaXplXyk7CisgICAgfQor
ICAgIHJldHVybiBzOworICB9CisKKyAgdmlydHVhbCBib29sIEZpbGVFeGlzdHMoY29uc3Qgc3Rk
OjpzdHJpbmcmIGZuYW1lKSB7CisgICAgcmV0dXJuIGFjY2VzcyhmbmFtZS5jX3N0cigpLCBGX09L
KSA9PSAwOworICB9CisKKyAgdmlydHVhbCBTdGF0dXMgR2V0Q2hpbGRyZW4oY29uc3Qgc3RkOjpz
dHJpbmcmIGRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3Rk
OjpzdHJpbmc+KiByZXN1bHQpIHsKKyAgICByZXN1bHQtPmNsZWFyKCk7CisgICAgRElSKiBkID0g
b3BlbmRpcihkaXIuY19zdHIoKSk7CisgICAgaWYgKGQgPT0gTlVMTCkgeworICAgICAgcmV0dXJu
IElPRXJyb3IoZGlyLCBlcnJubyk7CisgICAgfQorICAgIHN0cnVjdCBkaXJlbnQqIGVudHJ5Owor
ICAgIHdoaWxlICgoZW50cnkgPSByZWFkZGlyKGQpKSAhPSBOVUxMKSB7CisgICAgICByZXN1bHQt
PnB1c2hfYmFjayhlbnRyeS0+ZF9uYW1lKTsKKyAgICB9CisgICAgY2xvc2VkaXIoZCk7CisgICAg
cmV0dXJuIFN0YXR1czo6T0soKTsKKyAgfQorCisgIHZpcnR1YWwgU3RhdHVzIERlbGV0ZUZpbGUo
Y29uc3Qgc3RkOjpzdHJpbmcmIGZuYW1lKSB7CisgICAgU3RhdHVzIHJlc3VsdDsKKyAgICBpZiAo
dW5saW5rKGZuYW1lLmNfc3RyKCkpICE9IDApIHsKKyAgICAgIHJlc3VsdCA9IElPRXJyb3IoZm5h
bWUsIGVycm5vKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfTsKKworICB2aXJ0dWFs
IFN0YXR1cyBDcmVhdGVEaXIoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpIHsKKyAgICBTdGF0dXMg
cmVzdWx0OworICAgIGlmIChta2RpcihuYW1lLmNfc3RyKCksIDA3NTUpICE9IDApIHsKKyAgICAg
IHJlc3VsdCA9IElPRXJyb3IobmFtZSwgZXJybm8pOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0
OworICB9OworCisgIHZpcnR1YWwgU3RhdHVzIERlbGV0ZURpcihjb25zdCBzdGQ6OnN0cmluZyYg
bmFtZSkgeworICAgIFN0YXR1cyByZXN1bHQ7CisgICAgaWYgKHJtZGlyKG5hbWUuY19zdHIoKSkg
IT0gMCkgeworICAgICAgcmVzdWx0ID0gSU9FcnJvcihuYW1lLCBlcnJubyk7CisgICAgfQorICAg
IHJldHVybiByZXN1bHQ7CisgIH07CisKKyAgdmlydHVhbCBTdGF0dXMgR2V0RmlsZVNpemUoY29u
c3Qgc3RkOjpzdHJpbmcmIGZuYW1lLCB1aW50NjRfdCogc2l6ZSkgeworICAgIFN0YXR1cyBzOwor
ICAgIHN0cnVjdCBzdGF0IHNidWY7CisgICAgaWYgKHN0YXQoZm5hbWUuY19zdHIoKSwgJnNidWYp
ICE9IDApIHsKKyAgICAgICpzaXplID0gMDsKKyAgICAgIHMgPSBJT0Vycm9yKGZuYW1lLCBlcnJu
byk7CisgICAgfSBlbHNlIHsKKyAgICAgICpzaXplID0gc2J1Zi5zdF9zaXplOworICAgIH0KKyAg
ICByZXR1cm4gczsKKyAgfQorCisgIHZpcnR1YWwgU3RhdHVzIFJlbmFtZUZpbGUoY29uc3Qgc3Rk
OjpzdHJpbmcmIHNyYywgY29uc3Qgc3RkOjpzdHJpbmcmIHRhcmdldCkgeworICAgIFN0YXR1cyBy
ZXN1bHQ7CisgICAgaWYgKHJlbmFtZShzcmMuY19zdHIoKSwgdGFyZ2V0LmNfc3RyKCkpICE9IDAp
IHsKKyAgICAgIHJlc3VsdCA9IElPRXJyb3Ioc3JjLCBlcnJubyk7CisgICAgfQorICAgIHJldHVy
biByZXN1bHQ7CisgIH0KKworICB2aXJ0dWFsIFN0YXR1cyBMb2NrRmlsZShjb25zdCBzdGQ6OnN0
cmluZyYgZm5hbWUsIEZpbGVMb2NrKiogbG9jaykgeworICAgICpsb2NrID0gTlVMTDsKKyAgICBT
dGF0dXMgcmVzdWx0OworICAgIGludCBmZCA9IG9wZW4oZm5hbWUuY19zdHIoKSwgT19SRFdSIHwg
T19DUkVBVCwgMDY0NCk7CisgICAgaWYgKGZkIDwgMCkgeworICAgICAgcmVzdWx0ID0gSU9FcnJv
cihmbmFtZSwgZXJybm8pOworICAgIH0gZWxzZSBpZiAoIWxvY2tzXy5JbnNlcnQoZm5hbWUpKSB7
CisgICAgICBjbG9zZShmZCk7CisgICAgICByZXN1bHQgPSBTdGF0dXM6OklPRXJyb3IoImxvY2sg
IiArIGZuYW1lLCAiYWxyZWFkeSBoZWxkIGJ5IHByb2Nlc3MiKTsKKyAgICB9IGVsc2UgaWYgKExv
Y2tPclVubG9jayhmZCwgdHJ1ZSkgPT0gLTEpIHsKKyAgICAgIHJlc3VsdCA9IElPRXJyb3IoImxv
Y2sgIiArIGZuYW1lLCBlcnJubyk7CisgICAgICBjbG9zZShmZCk7CisgICAgICBsb2Nrc18uUmVt
b3ZlKGZuYW1lKTsKKyAgICB9IGVsc2UgeworICAgICAgUG9zaXhGaWxlTG9jayogbXlfbG9jayA9
IG5ldyBQb3NpeEZpbGVMb2NrOworICAgICAgbXlfbG9jay0+ZmRfID0gZmQ7CisgICAgICBteV9s
b2NrLT5uYW1lXyA9IGZuYW1lOworICAgICAgKmxvY2sgPSBteV9sb2NrOworICAgIH0KKyAgICBy
ZXR1cm4gcmVzdWx0OworICB9CisKKyAgdmlydHVhbCBTdGF0dXMgVW5sb2NrRmlsZShGaWxlTG9j
ayogbG9jaykgeworICAgIFBvc2l4RmlsZUxvY2sqIG15X2xvY2sgPSByZWludGVycHJldF9jYXN0
PFBvc2l4RmlsZUxvY2sqPihsb2NrKTsKKyAgICBTdGF0dXMgcmVzdWx0OworICAgIGlmIChMb2Nr
T3JVbmxvY2sobXlfbG9jay0+ZmRfLCBmYWxzZSkgPT0gLTEpIHsKKyAgICAgIHJlc3VsdCA9IElP
RXJyb3IoInVubG9jayIsIGVycm5vKTsKKyAgICB9CisgICAgbG9ja3NfLlJlbW92ZShteV9sb2Nr
LT5uYW1lXyk7CisgICAgY2xvc2UobXlfbG9jay0+ZmRfKTsKKyAgICBkZWxldGUgbXlfbG9jazsK
KyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKyAgdmlydHVhbCB2b2lkIFNjaGVkdWxlKHZvaWQg
KCpmdW5jdGlvbikodm9pZCopLCB2b2lkKiBhcmcpOworCisgIHZpcnR1YWwgdm9pZCBTdGFydFRo
cmVhZCh2b2lkICgqZnVuY3Rpb24pKHZvaWQqIGFyZyksIHZvaWQqIGFyZyk7CisKKyAgdmlydHVh
bCBTdGF0dXMgR2V0VGVzdERpcmVjdG9yeShzdGQ6OnN0cmluZyogcmVzdWx0KSB7CisgICAgY29u
c3QgY2hhciogZW52ID0gZ2V0ZW52KCJURVNUX1RNUERJUiIpOworICAgIGlmIChlbnYgJiYgZW52
WzBdICE9ICdcMCcpIHsKKyAgICAgICpyZXN1bHQgPSBlbnY7CisgICAgfSBlbHNlIHsKKyAgICAg
IGNoYXIgYnVmWzEwMF07CisgICAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiL3RtcC9s
ZXZlbGRidGVzdC0lZCIsIGludChnZXRldWlkKCkpKTsKKyAgICAgICpyZXN1bHQgPSBidWY7Cisg
ICAgfQorICAgIC8vIERpcmVjdG9yeSBtYXkgYWxyZWFkeSBleGlzdAorICAgIENyZWF0ZURpcigq
cmVzdWx0KTsKKyAgICByZXR1cm4gU3RhdHVzOjpPSygpOworICB9CisKKyAgc3RhdGljIHVpbnQ2
NF90IGdldHRpZCgpIHsKKyAgICBwdGhyZWFkX3QgdGlkID0gcHRocmVhZF9zZWxmKCk7CisgICAg
dWludDY0X3QgdGhyZWFkX2lkID0gMDsKKyAgICBtZW1jcHkoJnRocmVhZF9pZCwgJnRpZCwgc3Rk
OjptaW4oc2l6ZW9mKHRocmVhZF9pZCksIHNpemVvZih0aWQpKSk7CisgICAgcmV0dXJuIHRocmVh
ZF9pZDsKKyAgfQorCisgIHZpcnR1YWwgU3RhdHVzIE5ld0xvZ2dlcihjb25zdCBzdGQ6OnN0cmlu
ZyYgZm5hbWUsIExvZ2dlcioqIHJlc3VsdCkgeworICAgIEZJTEUqIGYgPSBmb3BlbihmbmFtZS5j
X3N0cigpLCAidyIpOworICAgIGlmIChmID09IE5VTEwpIHsKKyAgICAgICpyZXN1bHQgPSBOVUxM
OworICAgICAgcmV0dXJuIElPRXJyb3IoZm5hbWUsIGVycm5vKTsKKyAgICB9IGVsc2UgeworICAg
ICAgKnJlc3VsdCA9IG5ldyBQb3NpeExvZ2dlcihmLCAmUG9zaXhFbnY6OmdldHRpZCk7CisgICAg
ICByZXR1cm4gU3RhdHVzOjpPSygpOworICAgIH0KKyAgfQorCisgIHZpcnR1YWwgdWludDY0X3Qg
Tm93TWljcm9zKCkgeworICAgIHN0cnVjdCB0aW1ldmFsIHR2OworICAgIGdldHRpbWVvZmRheSgm
dHYsIE5VTEwpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50NjRfdD4odHYudHZfc2VjKSAq
IDEwMDAwMDAgKyB0di50dl91c2VjOworICB9CisKKyAgdmlydHVhbCB2b2lkIFNsZWVwRm9yTWlj
cm9zZWNvbmRzKGludCBtaWNyb3MpIHsKKyAgICB1c2xlZXAobWljcm9zKTsKKyAgfQorCisgcHJp
dmF0ZToKKyAgdm9pZCBQdGhyZWFkQ2FsbChjb25zdCBjaGFyKiBsYWJlbCwgaW50IHJlc3VsdCkg
eworICAgIGlmIChyZXN1bHQgIT0gMCkgeworICAgICAgZnByaW50ZihzdGRlcnIsICJwdGhyZWFk
ICVzOiAlc1xuIiwgbGFiZWwsIHN0cmVycm9yKHJlc3VsdCkpOworICAgICAgZXhpdCgxKTsKKyAg
ICB9CisgIH0KKworICAvLyBCR1RocmVhZCgpIGlzIHRoZSBib2R5IG9mIHRoZSBiYWNrZ3JvdW5k
IHRocmVhZAorICB2b2lkIEJHVGhyZWFkKCk7CisgIHN0YXRpYyB2b2lkKiBCR1RocmVhZFdyYXBw
ZXIodm9pZCogYXJnKSB7CisgICAgcmVpbnRlcnByZXRfY2FzdDxQb3NpeEVudio+KGFyZyktPkJH
VGhyZWFkKCk7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICBzaXplX3QgcGFnZV9zaXplXzsK
KyAgcHRocmVhZF9tdXRleF90IG11XzsKKyAgcHRocmVhZF9jb25kX3QgYmdzaWduYWxfOworICBw
dGhyZWFkX3QgYmd0aHJlYWRfOworICBib29sIHN0YXJ0ZWRfYmd0aHJlYWRfOworCisgIC8vIEVu
dHJ5IHBlciBTY2hlZHVsZSgpIGNhbGwKKyAgc3RydWN0IEJHSXRlbSB7IHZvaWQqIGFyZzsgdm9p
ZCAoKmZ1bmN0aW9uKSh2b2lkKik7IH07CisgIHR5cGVkZWYgc3RkOjpkZXF1ZTxCR0l0ZW0+IEJH
UXVldWU7CisgIEJHUXVldWUgcXVldWVfOworCisgIFBvc2l4TG9ja1RhYmxlIGxvY2tzXzsKKyAg
TW1hcExpbWl0ZXIgbW1hcF9saW1pdF87Cit9OworCitQb3NpeEVudjo6UG9zaXhFbnYoKSA6IHBh
Z2Vfc2l6ZV8oZ2V0cGFnZXNpemUoKSksCisgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ZWRf
Ymd0aHJlYWRfKGZhbHNlKSB7CisgIFB0aHJlYWRDYWxsKCJtdXRleF9pbml0IiwgcHRocmVhZF9t
dXRleF9pbml0KCZtdV8sIE5VTEwpKTsKKyAgUHRocmVhZENhbGwoImN2YXJfaW5pdCIsIHB0aHJl
YWRfY29uZF9pbml0KCZiZ3NpZ25hbF8sIE5VTEwpKTsKK30KKwordm9pZCBQb3NpeEVudjo6U2No
ZWR1bGUodm9pZCAoKmZ1bmN0aW9uKSh2b2lkKiksIHZvaWQqIGFyZykgeworICBQdGhyZWFkQ2Fs
bCgibG9jayIsIHB0aHJlYWRfbXV0ZXhfbG9jaygmbXVfKSk7CisKKyAgLy8gU3RhcnQgYmFja2dy
b3VuZCB0aHJlYWQgaWYgbmVjZXNzYXJ5CisgIGlmICghc3RhcnRlZF9iZ3RocmVhZF8pIHsKKyAg
ICBzdGFydGVkX2JndGhyZWFkXyA9IHRydWU7CisgICAgUHRocmVhZENhbGwoCisgICAgICAgICJj
cmVhdGUgdGhyZWFkIiwKKyAgICAgICAgcHRocmVhZF9jcmVhdGUoJmJndGhyZWFkXywgTlVMTCwg
ICZQb3NpeEVudjo6QkdUaHJlYWRXcmFwcGVyLCB0aGlzKSk7CisgIH0KKworICAvLyBJZiB0aGUg
cXVldWUgaXMgY3VycmVudGx5IGVtcHR5LCB0aGUgYmFja2dyb3VuZCB0aHJlYWQgbWF5IGN1cnJl
bnRseSBiZQorICAvLyB3YWl0aW5nLgorICBpZiAocXVldWVfLmVtcHR5KCkpIHsKKyAgICBQdGhy
ZWFkQ2FsbCgic2lnbmFsIiwgcHRocmVhZF9jb25kX3NpZ25hbCgmYmdzaWduYWxfKSk7CisgIH0K
KworICAvLyBBZGQgdG8gcHJpb3JpdHkgcXVldWUKKyAgcXVldWVfLnB1c2hfYmFjayhCR0l0ZW0o
KSk7CisgIHF1ZXVlXy5iYWNrKCkuZnVuY3Rpb24gPSBmdW5jdGlvbjsKKyAgcXVldWVfLmJhY2so
KS5hcmcgPSBhcmc7CisKKyAgUHRocmVhZENhbGwoInVubG9jayIsIHB0aHJlYWRfbXV0ZXhfdW5s
b2NrKCZtdV8pKTsKK30KKwordm9pZCBQb3NpeEVudjo6QkdUaHJlYWQoKSB7CisgIHdoaWxlICh0
cnVlKSB7CisgICAgLy8gV2FpdCB1bnRpbCB0aGVyZSBpcyBhbiBpdGVtIHRoYXQgaXMgcmVhZHkg
dG8gcnVuCisgICAgUHRocmVhZENhbGwoImxvY2siLCBwdGhyZWFkX211dGV4X2xvY2soJm11Xykp
OworICAgIHdoaWxlIChxdWV1ZV8uZW1wdHkoKSkgeworICAgICAgUHRocmVhZENhbGwoIndhaXQi
LCBwdGhyZWFkX2NvbmRfd2FpdCgmYmdzaWduYWxfLCAmbXVfKSk7CisgICAgfQorCisgICAgdm9p
ZCAoKmZ1bmN0aW9uKSh2b2lkKikgPSBxdWV1ZV8uZnJvbnQoKS5mdW5jdGlvbjsKKyAgICB2b2lk
KiBhcmcgPSBxdWV1ZV8uZnJvbnQoKS5hcmc7CisgICAgcXVldWVfLnBvcF9mcm9udCgpOworCisg
ICAgUHRocmVhZENhbGwoInVubG9jayIsIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZtdV8pKTsKKyAg
ICAoKmZ1bmN0aW9uKShhcmcpOworICB9Cit9CisKK25hbWVzcGFjZSB7CitzdHJ1Y3QgU3RhcnRU
aHJlYWRTdGF0ZSB7CisgIHZvaWQgKCp1c2VyX2Z1bmN0aW9uKSh2b2lkKik7CisgIHZvaWQqIGFy
ZzsKK307Cit9CitzdGF0aWMgdm9pZCogU3RhcnRUaHJlYWRXcmFwcGVyKHZvaWQqIGFyZykgewor
ICBTdGFydFRocmVhZFN0YXRlKiBzdGF0ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8U3RhcnRUaHJlYWRT
dGF0ZSo+KGFyZyk7CisgIHN0YXRlLT51c2VyX2Z1bmN0aW9uKHN0YXRlLT5hcmcpOworICBkZWxl
dGUgc3RhdGU7CisgIHJldHVybiBOVUxMOworfQorCit2b2lkIFBvc2l4RW52OjpTdGFydFRocmVh
ZCh2b2lkICgqZnVuY3Rpb24pKHZvaWQqIGFyZyksIHZvaWQqIGFyZykgeworICBwdGhyZWFkX3Qg
dDsKKyAgU3RhcnRUaHJlYWRTdGF0ZSogc3RhdGUgPSBuZXcgU3RhcnRUaHJlYWRTdGF0ZTsKKyAg
c3RhdGUtPnVzZXJfZnVuY3Rpb24gPSBmdW5jdGlvbjsKKyAgc3RhdGUtPmFyZyA9IGFyZzsKKyAg
UHRocmVhZENhbGwoInN0YXJ0IHRocmVhZCIsCisgICAgICAgICAgICAgIHB0aHJlYWRfY3JlYXRl
KCZ0LCBOVUxMLCAgJlN0YXJ0VGhyZWFkV3JhcHBlciwgc3RhdGUpKTsKK30KKworfSAgLy8gbmFt
ZXNwYWNlCisKK3N0YXRpYyBwdGhyZWFkX29uY2VfdCBvbmNlID0gUFRIUkVBRF9PTkNFX0lOSVQ7
CitzdGF0aWMgRW52KiBkZWZhdWx0X2VudjsKK3N0YXRpYyB2b2lkIEluaXREZWZhdWx0RW52KCkg
eyBkZWZhdWx0X2VudiA9IG5ldyBQb3NpeEVudjsgfQorCitFbnYqIEVudjo6RGVmYXVsdCgpIHsK
KyAgcHRocmVhZF9vbmNlKCZvbmNlLCBJbml0RGVmYXVsdEVudik7CisgIHJldHVybiBkZWZhdWx0
X2VudjsKK30KKworfSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xldmVsZGIvdXRpbC9lbnZfdGVzdC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xl
dmVsZGIvdXRpbC9lbnZfdGVzdC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNzJjYjQ0Mzg0MjViY2E4M2Q5YTZj
YTBkMjA3ZGJjODU5MGVmYjJlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
bGV2ZWxkYi91dGlsL2Vudl90ZXN0LmNjCkBAIC0wLDAgKzEsMTA0IEBACisvLyBDb3B5cmlnaHQg
KGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9S
UyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCisKKyNpbmNsdWRlICJsZXZlbGRiL2Vu
di5oIgorCisjaW5jbHVkZSAicG9ydC9wb3J0LmgiCisjaW5jbHVkZSAidXRpbC90ZXN0aGFybmVz
cy5oIgorCituYW1lc3BhY2UgbGV2ZWxkYiB7CisKK3N0YXRpYyBjb25zdCBpbnQga0RlbGF5TWlj
cm9zID0gMTAwMDAwOworCitjbGFzcyBFbnZQb3NpeFRlc3QgeworIHByaXZhdGU6CisgIHBvcnQ6
Ok11dGV4IG11XzsKKyAgc3RkOjpzdHJpbmcgZXZlbnRzXzsKKworIHB1YmxpYzoKKyAgRW52KiBl
bnZfOworICBFbnZQb3NpeFRlc3QoKSA6IGVudl8oRW52OjpEZWZhdWx0KCkpIHsgfQorfTsKKwor
c3RhdGljIHZvaWQgU2V0Qm9vbCh2b2lkKiBwdHIpIHsKKyAgcmVpbnRlcnByZXRfY2FzdDxwb3J0
OjpBdG9taWNQb2ludGVyKj4ocHRyKS0+Tm9CYXJyaWVyX1N0b3JlKHB0cik7Cit9CisKK1RFU1Qo
RW52UG9zaXhUZXN0LCBSdW5JbW1lZGlhdGVseSkgeworICBwb3J0OjpBdG9taWNQb2ludGVyIGNh
bGxlZCAoTlVMTCk7CisgIGVudl8tPlNjaGVkdWxlKCZTZXRCb29sLCAmY2FsbGVkKTsKKyAgRW52
OjpEZWZhdWx0KCktPlNsZWVwRm9yTWljcm9zZWNvbmRzKGtEZWxheU1pY3Jvcyk7CisgIEFTU0VS
VF9UUlVFKGNhbGxlZC5Ob0JhcnJpZXJfTG9hZCgpICE9IE5VTEwpOworfQorCitURVNUKEVudlBv
c2l4VGVzdCwgUnVuTWFueSkgeworICBwb3J0OjpBdG9taWNQb2ludGVyIGxhc3RfaWQgKE5VTEwp
OworCisgIHN0cnVjdCBDQiB7CisgICAgcG9ydDo6QXRvbWljUG9pbnRlciogbGFzdF9pZF9wdHI7
ICAgLy8gUG9pbnRlciB0byBzaGFyZWQgc2xvdAorICAgIHVpbnRwdHJfdCBpZDsgICAgICAgICAg
ICAgLy8gT3JkZXIjIGZvciB0aGUgZXhlY3V0aW9uIG9mIHRoaXMgY2FsbGJhY2sKKworICAgIENC
KHBvcnQ6OkF0b21pY1BvaW50ZXIqIHAsIGludCBpKSA6IGxhc3RfaWRfcHRyKHApLCBpZChpKSB7
IH0KKworICAgIHN0YXRpYyB2b2lkIFJ1bih2b2lkKiB2KSB7CisgICAgICBDQiogY2IgPSByZWlu
dGVycHJldF9jYXN0PENCKj4odik7CisgICAgICB2b2lkKiBjdXIgPSBjYi0+bGFzdF9pZF9wdHIt
Pk5vQmFycmllcl9Mb2FkKCk7CisgICAgICBBU1NFUlRfRVEoY2ItPmlkLTEsIHJlaW50ZXJwcmV0
X2Nhc3Q8dWludHB0cl90PihjdXIpKTsKKyAgICAgIGNiLT5sYXN0X2lkX3B0ci0+UmVsZWFzZV9T
dG9yZShyZWludGVycHJldF9jYXN0PHZvaWQqPihjYi0+aWQpKTsKKyAgICB9CisgIH07CisKKyAg
Ly8gU2NoZWR1bGUgaW4gZGlmZmVyZW50IG9yZGVyIHRoYW4gc3RhcnQgdGltZQorICBDQiBjYjEo
Jmxhc3RfaWQsIDEpOworICBDQiBjYjIoJmxhc3RfaWQsIDIpOworICBDQiBjYjMoJmxhc3RfaWQs
IDMpOworICBDQiBjYjQoJmxhc3RfaWQsIDQpOworICBlbnZfLT5TY2hlZHVsZSgmQ0I6OlJ1biwg
JmNiMSk7CisgIGVudl8tPlNjaGVkdWxlKCZDQjo6UnVuLCAmY2IyKTsKKyAgZW52Xy0+U2NoZWR1
bGUoJkNCOjpSdW4sICZjYjMpOworICBlbnZfLT5TY2hlZHVsZSgmQ0I6OlJ1biwgJmNiNCk7CisK
KyAgRW52OjpEZWZhdWx0KCktPlNsZWVwRm9yTWljcm9zZWNvbmRzKGtEZWxheU1pY3Jvcyk7Cisg
IHZvaWQqIGN1ciA9IGxhc3RfaWQuQWNxdWlyZV9Mb2FkKCk7CisgIEFTU0VSVF9FUSg0LCByZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdD4oY3VyKSk7Cit9CisKK3N0cnVjdCBTdGF0ZSB7CisgIHBv
cnQ6Ok11dGV4IG11OworICBpbnQgdmFsOworICBpbnQgbnVtX3J1bm5pbmc7Cit9OworCitzdGF0
aWMgdm9pZCBUaHJlYWRCb2R5KHZvaWQqIGFyZykgeworICBTdGF0ZSogcyA9IHJlaW50ZXJwcmV0
X2Nhc3Q8U3RhdGUqPihhcmcpOworICBzLT5tdS5Mb2NrKCk7CisgIHMtPnZhbCArPSAxOworICBz
LT5udW1fcnVubmluZyAtPSAxOworICBzLT5tdS5VbmxvY2soKTsKK30KKworVEVTVChFbnZQb3Np
eFRlc3QsIFN0YXJ0VGhyZWFkKSB7CisgIFN0YXRlIHN0YXRlOworICBzdGF0ZS52YWwgPSAwOwor
ICBzdGF0ZS5udW1fcnVubmluZyA9IDM7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSsrKSB7
CisgICAgZW52Xy0+U3RhcnRUaHJlYWQoJlRocmVhZEJvZHksICZzdGF0ZSk7CisgIH0KKyAgd2hp
bGUgKHRydWUpIHsKKyAgICBzdGF0ZS5tdS5Mb2NrKCk7CisgICAgaW50IG51bSA9IHN0YXRlLm51
bV9ydW5uaW5nOworICAgIHN0YXRlLm11LlVubG9jaygpOworICAgIGlmIChudW0gPT0gMCkgewor
ICAgICAgYnJlYWs7CisgICAgfQorICAgIEVudjo6RGVmYXVsdCgpLT5TbGVlcEZvck1pY3Jvc2Vj
b25kcyhrRGVsYXlNaWNyb3MpOworICB9CisgIEFTU0VSVF9FUShzdGF0ZS52YWwsIDMpOworfQor
Cit9ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFy
Z3YpIHsKKyAgcmV0dXJuIGxldmVsZGI6OnRlc3Q6OlJ1bkFsbFRlc3RzKCk7Cit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvZmlsdGVyX3BvbGljeS5jYyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9maWx0ZXJfcG9saWN5LmNjCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjdiMDQ1YzhjOTFkNmY2ZDYwMDMwOGU1MDk2NmNjZjU2ZTUzNjM4YmYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvZmlsdGVyX3BvbGljeS5jYwpAQCAt
MCwwICsxLDExIEBACisvLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIExldmVsREIgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRv
cnMuCisKKyNpbmNsdWRlICJsZXZlbGRiL2ZpbHRlcl9wb2xpY3kuaCIKKworbmFtZXNwYWNlIGxl
dmVsZGIgeworCitGaWx0ZXJQb2xpY3k6On5GaWx0ZXJQb2xpY3koKSB7IH0KKworfSAgLy8gbmFt
ZXNwYWNlIGxldmVsZGIKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRp
bC9oYXNoLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2hhc2guY2MKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYmExODE4MDgyZGZmOTBhYTY0NzViYjI3MmZhMjVlZTBjMjJkNjI5MgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9oYXNoLmNjCkBAIC0wLDAg
KzEsNDUgQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4K
KworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgInV0aWwvY29kaW5nLmgiCisjaW5jbHVk
ZSAidXRpbC9oYXNoLmgiCisKK25hbWVzcGFjZSBsZXZlbGRiIHsKKwordWludDMyX3QgSGFzaChj
b25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbiwgdWludDMyX3Qgc2VlZCkgeworICAvLyBTaW1pbGFy
IHRvIG11cm11ciBoYXNoCisgIGNvbnN0IHVpbnQzMl90IG0gPSAweGM2YTRhNzkzOworICBjb25z
dCB1aW50MzJfdCByID0gMjQ7CisgIGNvbnN0IGNoYXIqIGxpbWl0ID0gZGF0YSArIG47CisgIHVp
bnQzMl90IGggPSBzZWVkIF4gKG4gKiBtKTsKKworICAvLyBQaWNrIHVwIGZvdXIgYnl0ZXMgYXQg
YSB0aW1lCisgIHdoaWxlIChkYXRhICsgNCA8PSBsaW1pdCkgeworICAgIHVpbnQzMl90IHcgPSBE
ZWNvZGVGaXhlZDMyKGRhdGEpOworICAgIGRhdGEgKz0gNDsKKyAgICBoICs9IHc7CisgICAgaCAq
PSBtOworICAgIGggXj0gKGggPj4gMTYpOworICB9CisKKyAgLy8gUGljayB1cCByZW1haW5pbmcg
Ynl0ZXMKKyAgc3dpdGNoIChsaW1pdCAtIGRhdGEpIHsKKyAgICBjYXNlIDM6CisgICAgICBoICs9
IGRhdGFbMl0gPDwgMTY7CisgICAgICAvLyBmYWxsIHRocm91Z2gKKyAgICBjYXNlIDI6CisgICAg
ICBoICs9IGRhdGFbMV0gPDwgODsKKyAgICAgIC8vIGZhbGwgdGhyb3VnaAorICAgIGNhc2UgMToK
KyAgICAgIGggKz0gZGF0YVswXTsKKyAgICAgIGggKj0gbTsKKyAgICAgIGggXj0gKGggPj4gcik7
CisgICAgICBicmVhazsKKyAgfQorICByZXR1cm4gaDsKK30KKworCit9ICAvLyBuYW1lc3BhY2Ug
bGV2ZWxkYgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2hhc2gu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9oYXNoLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODg4
OWQ1NmJlODBlMmY2MzQyYTFhMjkyYzZhMDA3NWQyNDgxZGU4MAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9oYXNoLmgKQEAgLTAsMCArMSwxOSBAQAor
Ly8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBT
ZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3JzLgorLy8KKy8vIFNp
bXBsZSBoYXNoIGZ1bmN0aW9uIHVzZWQgZm9yIGludGVybmFsIGRhdGEgc3RydWN0dXJlcworCisj
aWZuZGVmIFNUT1JBR0VfTEVWRUxEQl9VVElMX0hBU0hfSF8KKyNkZWZpbmUgU1RPUkFHRV9MRVZF
TERCX1VUSUxfSEFTSF9IXworCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW50
Lmg+CisKK25hbWVzcGFjZSBsZXZlbGRiIHsKKworZXh0ZXJuIHVpbnQzMl90IEhhc2goY29uc3Qg
Y2hhciogZGF0YSwgc2l6ZV90IG4sIHVpbnQzMl90IHNlZWQpOworCit9CisKKyNlbmRpZiAgLy8g
U1RPUkFHRV9MRVZFTERCX1VUSUxfSEFTSF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGV2ZWxkYi91dGlsL2hpc3RvZ3JhbS5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIv
dXRpbC9oaXN0b2dyYW0uY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmI5NWY1ODNlYWM2YTZmOTE2YTgzZTQwOTA0
NWYwYTIyNmJkOWFlNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVs
ZGIvdXRpbC9oaXN0b2dyYW0uY2MKQEAgLTAsMCArMSwxMzkgQEAKKy8vIENvcHlyaWdodCAoYykg
MjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZp
bGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNs
dWRlIDxzdGRpby5oPgorI2luY2x1ZGUgInBvcnQvcG9ydC5oIgorI2luY2x1ZGUgInV0aWwvaGlz
dG9ncmFtLmgiCisKK25hbWVzcGFjZSBsZXZlbGRiIHsKKworY29uc3QgZG91YmxlIEhpc3RvZ3Jh
bTo6a0J1Y2tldExpbWl0W2tOdW1CdWNrZXRzXSA9IHsKKyAgMSwgMiwgMywgNCwgNSwgNiwgNywg
OCwgOSwgMTAsIDEyLCAxNCwgMTYsIDE4LCAyMCwgMjUsIDMwLCAzNSwgNDAsIDQ1LAorICA1MCwg
NjAsIDcwLCA4MCwgOTAsIDEwMCwgMTIwLCAxNDAsIDE2MCwgMTgwLCAyMDAsIDI1MCwgMzAwLCAz
NTAsIDQwMCwgNDUwLAorICA1MDAsIDYwMCwgNzAwLCA4MDAsIDkwMCwgMTAwMCwgMTIwMCwgMTQw
MCwgMTYwMCwgMTgwMCwgMjAwMCwgMjUwMCwgMzAwMCwKKyAgMzUwMCwgNDAwMCwgNDUwMCwgNTAw
MCwgNjAwMCwgNzAwMCwgODAwMCwgOTAwMCwgMTAwMDAsIDEyMDAwLCAxNDAwMCwKKyAgMTYwMDAs
IDE4MDAwLCAyMDAwMCwgMjUwMDAsIDMwMDAwLCAzNTAwMCwgNDAwMDAsIDQ1MDAwLCA1MDAwMCwg
NjAwMDAsCisgIDcwMDAwLCA4MDAwMCwgOTAwMDAsIDEwMDAwMCwgMTIwMDAwLCAxNDAwMDAsIDE2
MDAwMCwgMTgwMDAwLCAyMDAwMDAsCisgIDI1MDAwMCwgMzAwMDAwLCAzNTAwMDAsIDQwMDAwMCwg
NDUwMDAwLCA1MDAwMDAsIDYwMDAwMCwgNzAwMDAwLCA4MDAwMDAsCisgIDkwMDAwMCwgMTAwMDAw
MCwgMTIwMDAwMCwgMTQwMDAwMCwgMTYwMDAwMCwgMTgwMDAwMCwgMjAwMDAwMCwgMjUwMDAwMCwK
KyAgMzAwMDAwMCwgMzUwMDAwMCwgNDAwMDAwMCwgNDUwMDAwMCwgNTAwMDAwMCwgNjAwMDAwMCwg
NzAwMDAwMCwgODAwMDAwMCwKKyAgOTAwMDAwMCwgMTAwMDAwMDAsIDEyMDAwMDAwLCAxNDAwMDAw
MCwgMTYwMDAwMDAsIDE4MDAwMDAwLCAyMDAwMDAwMCwKKyAgMjUwMDAwMDAsIDMwMDAwMDAwLCAz
NTAwMDAwMCwgNDAwMDAwMDAsIDQ1MDAwMDAwLCA1MDAwMDAwMCwgNjAwMDAwMDAsCisgIDcwMDAw
MDAwLCA4MDAwMDAwMCwgOTAwMDAwMDAsIDEwMDAwMDAwMCwgMTIwMDAwMDAwLCAxNDAwMDAwMDAs
IDE2MDAwMDAwMCwKKyAgMTgwMDAwMDAwLCAyMDAwMDAwMDAsIDI1MDAwMDAwMCwgMzAwMDAwMDAw
LCAzNTAwMDAwMDAsIDQwMDAwMDAwMCwKKyAgNDUwMDAwMDAwLCA1MDAwMDAwMDAsIDYwMDAwMDAw
MCwgNzAwMDAwMDAwLCA4MDAwMDAwMDAsIDkwMDAwMDAwMCwKKyAgMTAwMDAwMDAwMCwgMTIwMDAw
MDAwMCwgMTQwMDAwMDAwMCwgMTYwMDAwMDAwMCwgMTgwMDAwMDAwMCwgMjAwMDAwMDAwMCwKKyAg
MjUwMDAwMDAwMC4wLCAzMDAwMDAwMDAwLjAsIDM1MDAwMDAwMDAuMCwgNDAwMDAwMDAwMC4wLCA0
NTAwMDAwMDAwLjAsCisgIDUwMDAwMDAwMDAuMCwgNjAwMDAwMDAwMC4wLCA3MDAwMDAwMDAwLjAs
IDgwMDAwMDAwMDAuMCwgOTAwMDAwMDAwMC4wLAorICAxZTIwMCwKK307CisKK3ZvaWQgSGlzdG9n
cmFtOjpDbGVhcigpIHsKKyAgbWluXyA9IGtCdWNrZXRMaW1pdFtrTnVtQnVja2V0cy0xXTsKKyAg
bWF4XyA9IDA7CisgIG51bV8gPSAwOworICBzdW1fID0gMDsKKyAgc3VtX3NxdWFyZXNfID0gMDsK
KyAgZm9yIChpbnQgaSA9IDA7IGkgPCBrTnVtQnVja2V0czsgaSsrKSB7CisgICAgYnVja2V0c19b
aV0gPSAwOworICB9Cit9CisKK3ZvaWQgSGlzdG9ncmFtOjpBZGQoZG91YmxlIHZhbHVlKSB7Cisg
IC8vIExpbmVhciBzZWFyY2ggaXMgZmFzdCBlbm91Z2ggZm9yIG91ciB1c2FnZSBpbiBkYl9iZW5j
aAorICBpbnQgYiA9IDA7CisgIHdoaWxlIChiIDwga051bUJ1Y2tldHMgLSAxICYmIGtCdWNrZXRM
aW1pdFtiXSA8PSB2YWx1ZSkgeworICAgIGIrKzsKKyAgfQorICBidWNrZXRzX1tiXSArPSAxLjA7
CisgIGlmIChtaW5fID4gdmFsdWUpIG1pbl8gPSB2YWx1ZTsKKyAgaWYgKG1heF8gPCB2YWx1ZSkg
bWF4XyA9IHZhbHVlOworICBudW1fKys7CisgIHN1bV8gKz0gdmFsdWU7CisgIHN1bV9zcXVhcmVz
XyArPSAodmFsdWUgKiB2YWx1ZSk7Cit9CisKK3ZvaWQgSGlzdG9ncmFtOjpNZXJnZShjb25zdCBI
aXN0b2dyYW0mIG90aGVyKSB7CisgIGlmIChvdGhlci5taW5fIDwgbWluXykgbWluXyA9IG90aGVy
Lm1pbl87CisgIGlmIChvdGhlci5tYXhfID4gbWF4XykgbWF4XyA9IG90aGVyLm1heF87CisgIG51
bV8gKz0gb3RoZXIubnVtXzsKKyAgc3VtXyArPSBvdGhlci5zdW1fOworICBzdW1fc3F1YXJlc18g
Kz0gb3RoZXIuc3VtX3NxdWFyZXNfOworICBmb3IgKGludCBiID0gMDsgYiA8IGtOdW1CdWNrZXRz
OyBiKyspIHsKKyAgICBidWNrZXRzX1tiXSArPSBvdGhlci5idWNrZXRzX1tiXTsKKyAgfQorfQor
Citkb3VibGUgSGlzdG9ncmFtOjpNZWRpYW4oKSBjb25zdCB7CisgIHJldHVybiBQZXJjZW50aWxl
KDUwLjApOworfQorCitkb3VibGUgSGlzdG9ncmFtOjpQZXJjZW50aWxlKGRvdWJsZSBwKSBjb25z
dCB7CisgIGRvdWJsZSB0aHJlc2hvbGQgPSBudW1fICogKHAgLyAxMDAuMCk7CisgIGRvdWJsZSBz
dW0gPSAwOworICBmb3IgKGludCBiID0gMDsgYiA8IGtOdW1CdWNrZXRzOyBiKyspIHsKKyAgICBz
dW0gKz0gYnVja2V0c19bYl07CisgICAgaWYgKHN1bSA+PSB0aHJlc2hvbGQpIHsKKyAgICAgIC8v
IFNjYWxlIGxpbmVhcmx5IHdpdGhpbiB0aGlzIGJ1Y2tldAorICAgICAgZG91YmxlIGxlZnRfcG9p
bnQgPSAoYiA9PSAwKSA/IDAgOiBrQnVja2V0TGltaXRbYi0xXTsKKyAgICAgIGRvdWJsZSByaWdo
dF9wb2ludCA9IGtCdWNrZXRMaW1pdFtiXTsKKyAgICAgIGRvdWJsZSBsZWZ0X3N1bSA9IHN1bSAt
IGJ1Y2tldHNfW2JdOworICAgICAgZG91YmxlIHJpZ2h0X3N1bSA9IHN1bTsKKyAgICAgIGRvdWJs
ZSBwb3MgPSAodGhyZXNob2xkIC0gbGVmdF9zdW0pIC8gKHJpZ2h0X3N1bSAtIGxlZnRfc3VtKTsK
KyAgICAgIGRvdWJsZSByID0gbGVmdF9wb2ludCArIChyaWdodF9wb2ludCAtIGxlZnRfcG9pbnQp
ICogcG9zOworICAgICAgaWYgKHIgPCBtaW5fKSByID0gbWluXzsKKyAgICAgIGlmIChyID4gbWF4
XykgciA9IG1heF87CisgICAgICByZXR1cm4gcjsKKyAgICB9CisgIH0KKyAgcmV0dXJuIG1heF87
Cit9CisKK2RvdWJsZSBIaXN0b2dyYW06OkF2ZXJhZ2UoKSBjb25zdCB7CisgIGlmIChudW1fID09
IDAuMCkgcmV0dXJuIDA7CisgIHJldHVybiBzdW1fIC8gbnVtXzsKK30KKworZG91YmxlIEhpc3Rv
Z3JhbTo6U3RhbmRhcmREZXZpYXRpb24oKSBjb25zdCB7CisgIGlmIChudW1fID09IDAuMCkgcmV0
dXJuIDA7CisgIGRvdWJsZSB2YXJpYW5jZSA9IChzdW1fc3F1YXJlc18gKiBudW1fIC0gc3VtXyAq
IHN1bV8pIC8gKG51bV8gKiBudW1fKTsKKyAgcmV0dXJuIHNxcnQodmFyaWFuY2UpOworfQorCitz
dGQ6OnN0cmluZyBIaXN0b2dyYW06OlRvU3RyaW5nKCkgY29uc3QgeworICBzdGQ6OnN0cmluZyBy
OworICBjaGFyIGJ1ZlsyMDBdOworICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLAorICAgICAg
ICAgICAiQ291bnQ6ICUuMGYgIEF2ZXJhZ2U6ICUuNGYgIFN0ZERldjogJS4yZlxuIiwKKyAgICAg
ICAgICAgbnVtXywgQXZlcmFnZSgpLCBTdGFuZGFyZERldmlhdGlvbigpKTsKKyAgci5hcHBlbmQo
YnVmKTsKKyAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwKKyAgICAgICAgICAgIk1pbjogJS40
ZiAgTWVkaWFuOiAlLjRmICBNYXg6ICUuNGZcbiIsCisgICAgICAgICAgIChudW1fID09IDAuMCA/
IDAuMCA6IG1pbl8pLCBNZWRpYW4oKSwgbWF4Xyk7CisgIHIuYXBwZW5kKGJ1Zik7CisgIHIuYXBw
ZW5kKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS1cbiIpOworICBjb25zdCBkb3VibGUgbXVsdCA9IDEwMC4wIC8gbnVtXzsKKyAgZG91YmxlIHN1
bSA9IDA7CisgIGZvciAoaW50IGIgPSAwOyBiIDwga051bUJ1Y2tldHM7IGIrKykgeworICAgIGlm
IChidWNrZXRzX1tiXSA8PSAwLjApIGNvbnRpbnVlOworICAgIHN1bSArPSBidWNrZXRzX1tiXTsK
KyAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLAorICAgICAgICAgICAgICJbICU3LjBmLCAl
Ny4wZiApICU3LjBmICU3LjNmJSUgJTcuM2YlJSAiLAorICAgICAgICAgICAgICgoYiA9PSAwKSA/
IDAuMCA6IGtCdWNrZXRMaW1pdFtiLTFdKSwgICAgICAvLyBsZWZ0CisgICAgICAgICAgICAga0J1
Y2tldExpbWl0W2JdLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJpZ2h0CisgICAgICAg
ICAgICAgYnVja2V0c19bYl0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvdW50
CisgICAgICAgICAgICAgbXVsdCAqIGJ1Y2tldHNfW2JdLCAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHBlcmNlbnRhZ2UKKyAgICAgICAgICAgICBtdWx0ICogc3VtKTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gY3VtdWxhdGl2ZSBwZXJjZW50YWdlCisgICAgci5hcHBlbmQoYnVm
KTsKKworICAgIC8vIEFkZCBoYXNoIG1hcmtzIGJhc2VkIG9uIHBlcmNlbnRhZ2U7IDIwIG1hcmtz
IGZvciAxMDAlLgorICAgIGludCBtYXJrcyA9IHN0YXRpY19jYXN0PGludD4oMjAqKGJ1Y2tldHNf
W2JdIC8gbnVtXykgKyAwLjUpOworICAgIHIuYXBwZW5kKG1hcmtzLCAnIycpOworICAgIHIucHVz
aF9iYWNrKCdcbicpOworICB9CisgIHJldHVybiByOworfQorCit9ICAvLyBuYW1lc3BhY2UgbGV2
ZWxkYgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2hpc3RvZ3Jh
bS5oIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2hpc3RvZ3JhbS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjFlZjlmM2M4YWJkZmM1MDg1OGJlNDMzMTEwNjExMDg2YmIzYzBkYTYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvaGlzdG9ncmFtLmgKQEAgLTAs
MCArMSw0MiBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERCIEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2YgY29udHJpYnV0b3Jz
LgorCisjaWZuZGVmIFNUT1JBR0VfTEVWRUxEQl9VVElMX0hJU1RPR1JBTV9IXworI2RlZmluZSBT
VE9SQUdFX0xFVkVMREJfVVRJTF9ISVNUT0dSQU1fSF8KKworI2luY2x1ZGUgPHN0cmluZz4KKwor
bmFtZXNwYWNlIGxldmVsZGIgeworCitjbGFzcyBIaXN0b2dyYW0geworIHB1YmxpYzoKKyAgSGlz
dG9ncmFtKCkgeyB9CisgIH5IaXN0b2dyYW0oKSB7IH0KKworICB2b2lkIENsZWFyKCk7CisgIHZv
aWQgQWRkKGRvdWJsZSB2YWx1ZSk7CisgIHZvaWQgTWVyZ2UoY29uc3QgSGlzdG9ncmFtJiBvdGhl
cik7CisKKyAgc3RkOjpzdHJpbmcgVG9TdHJpbmcoKSBjb25zdDsKKworIHByaXZhdGU6CisgIGRv
dWJsZSBtaW5fOworICBkb3VibGUgbWF4XzsKKyAgZG91YmxlIG51bV87CisgIGRvdWJsZSBzdW1f
OworICBkb3VibGUgc3VtX3NxdWFyZXNfOworCisgIGVudW0geyBrTnVtQnVja2V0cyA9IDE1NCB9
OworICBzdGF0aWMgY29uc3QgZG91YmxlIGtCdWNrZXRMaW1pdFtrTnVtQnVja2V0c107CisgIGRv
dWJsZSBidWNrZXRzX1trTnVtQnVja2V0c107CisKKyAgZG91YmxlIE1lZGlhbigpIGNvbnN0Owor
ICBkb3VibGUgUGVyY2VudGlsZShkb3VibGUgcCkgY29uc3Q7CisgIGRvdWJsZSBBdmVyYWdlKCkg
Y29uc3Q7CisgIGRvdWJsZSBTdGFuZGFyZERldmlhdGlvbigpIGNvbnN0OworfTsKKworfSAgLy8g
bmFtZXNwYWNlIGxldmVsZGIKKworI2VuZGlmICAvLyBTVE9SQUdFX0xFVkVMREJfVVRJTF9ISVNU
T0dSQU1fSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9sb2dn
aW5nLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2xvZ2dpbmcuY2MKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMjJjZjI3ODUxMjNjNDVhYjc3ZmExNTgyNTZhNDVkOGU3MDBjMTQ2MwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9sb2dnaW5nLmNjCkBAIC0w
LDAgKzEsODEgQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9y
cy4KKworI2luY2x1ZGUgInV0aWwvbG9nZ2luZy5oIgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNp
bmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5o
PgorI2luY2x1ZGUgImxldmVsZGIvZW52LmgiCisjaW5jbHVkZSAibGV2ZWxkYi9zbGljZS5oIgor
CituYW1lc3BhY2UgbGV2ZWxkYiB7CisKK3ZvaWQgQXBwZW5kTnVtYmVyVG8oc3RkOjpzdHJpbmcq
IHN0ciwgdWludDY0X3QgbnVtKSB7CisgIGNoYXIgYnVmWzMwXTsKKyAgc25wcmludGYoYnVmLCBz
aXplb2YoYnVmKSwgIiVsbHUiLCAodW5zaWduZWQgbG9uZyBsb25nKSBudW0pOworICBzdHItPmFw
cGVuZChidWYpOworfQorCit2b2lkIEFwcGVuZEVzY2FwZWRTdHJpbmdUbyhzdGQ6OnN0cmluZyog
c3RyLCBjb25zdCBTbGljZSYgdmFsdWUpIHsKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1
ZS5zaXplKCk7IGkrKykgeworICAgIGNoYXIgYyA9IHZhbHVlW2ldOworICAgIGlmIChjID49ICcg
JyAmJiBjIDw9ICd+JykgeworICAgICAgc3RyLT5wdXNoX2JhY2soYyk7CisgICAgfSBlbHNlIHsK
KyAgICAgIGNoYXIgYnVmWzEwXTsKKyAgICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJc
XHglMDJ4IiwKKyAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oYykgJiAw
eGZmKTsKKyAgICAgIHN0ci0+YXBwZW5kKGJ1Zik7CisgICAgfQorICB9Cit9CisKK3N0ZDo6c3Ry
aW5nIE51bWJlclRvU3RyaW5nKHVpbnQ2NF90IG51bSkgeworICBzdGQ6OnN0cmluZyByOworICBB
cHBlbmROdW1iZXJUbygmciwgbnVtKTsKKyAgcmV0dXJuIHI7Cit9CisKK3N0ZDo6c3RyaW5nIEVz
Y2FwZVN0cmluZyhjb25zdCBTbGljZSYgdmFsdWUpIHsKKyAgc3RkOjpzdHJpbmcgcjsKKyAgQXBw
ZW5kRXNjYXBlZFN0cmluZ1RvKCZyLCB2YWx1ZSk7CisgIHJldHVybiByOworfQorCitib29sIENv
bnN1bWVDaGFyKFNsaWNlKiBpbiwgY2hhciBjKSB7CisgIGlmICghaW4tPmVtcHR5KCkgJiYgKCpp
bilbMF0gPT0gYykgeworICAgIGluLT5yZW1vdmVfcHJlZml4KDEpOworICAgIHJldHVybiB0cnVl
OworICB9IGVsc2UgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorfQorCitib29sIENvbnN1bWVE
ZWNpbWFsTnVtYmVyKFNsaWNlKiBpbiwgdWludDY0X3QqIHZhbCkgeworICB1aW50NjRfdCB2ID0g
MDsKKyAgaW50IGRpZ2l0cyA9IDA7CisgIHdoaWxlICghaW4tPmVtcHR5KCkpIHsKKyAgICBjaGFy
IGMgPSAoKmluKVswXTsKKyAgICBpZiAoYyA+PSAnMCcgJiYgYyA8PSAnOScpIHsKKyAgICAgICsr
ZGlnaXRzOworICAgICAgY29uc3QgaW50IGRlbHRhID0gKGMgLSAnMCcpOworICAgICAgc3RhdGlj
IGNvbnN0IHVpbnQ2NF90IGtNYXhVaW50NjQgPSB+c3RhdGljX2Nhc3Q8dWludDY0X3Q+KDApOwor
ICAgICAgaWYgKHYgPiBrTWF4VWludDY0LzEwIHx8CisgICAgICAgICAgKHYgPT0ga01heFVpbnQ2
NC8xMCAmJiBkZWx0YSA+IGtNYXhVaW50NjQlMTApKSB7CisgICAgICAgIC8vIE92ZXJmbG93Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKyAgICAgIHYgPSAodiAqIDEwKSArIGRlbHRh
OworICAgICAgaW4tPnJlbW92ZV9wcmVmaXgoMSk7CisgICAgfSBlbHNlIHsKKyAgICAgIGJyZWFr
OworICAgIH0KKyAgfQorICAqdmFsID0gdjsKKyAgcmV0dXJuIChkaWdpdHMgPiAwKTsKK30KKwor
fSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xl
dmVsZGIvdXRpbC9sb2dnaW5nLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvbG9n
Z2luZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmIwYzVkYTgxM2U4NjU4Yzk3MTJiNTUyOWY0YjIxOWNiMWE5NDU1
MDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvbG9n
Z2luZy5oCkBAIC0wLDAgKzEsNDcgQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxE
QiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9m
IGNvbnRyaWJ1dG9ycy4KKy8vCisvLyBNdXN0IG5vdCBiZSBpbmNsdWRlZCBmcm9tIGFueSAuaCBm
aWxlcyB0byBhdm9pZCBwb2xsdXRpbmcgdGhlIG5hbWVzcGFjZQorLy8gd2l0aCBtYWNyb3MuCisK
KyNpZm5kZWYgU1RPUkFHRV9MRVZFTERCX1VUSUxfTE9HR0lOR19IXworI2RlZmluZSBTVE9SQUdF
X0xFVkVMREJfVVRJTF9MT0dHSU5HX0hfCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUg
PHN0ZGludC5oPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlICJwb3J0L3BvcnQuaCIKKwor
bmFtZXNwYWNlIGxldmVsZGIgeworCitjbGFzcyBTbGljZTsKK2NsYXNzIFdyaXRhYmxlRmlsZTsK
KworLy8gQXBwZW5kIGEgaHVtYW4tcmVhZGFibGUgcHJpbnRvdXQgb2YgIm51bSIgdG8gKnN0cgor
ZXh0ZXJuIHZvaWQgQXBwZW5kTnVtYmVyVG8oc3RkOjpzdHJpbmcqIHN0ciwgdWludDY0X3QgbnVt
KTsKKworLy8gQXBwZW5kIGEgaHVtYW4tcmVhZGFibGUgcHJpbnRvdXQgb2YgInZhbHVlIiB0byAq
c3RyLgorLy8gRXNjYXBlcyBhbnkgbm9uLXByaW50YWJsZSBjaGFyYWN0ZXJzIGZvdW5kIGluICJ2
YWx1ZSIuCitleHRlcm4gdm9pZCBBcHBlbmRFc2NhcGVkU3RyaW5nVG8oc3RkOjpzdHJpbmcqIHN0
ciwgY29uc3QgU2xpY2UmIHZhbHVlKTsKKworLy8gUmV0dXJuIGEgaHVtYW4tcmVhZGFibGUgcHJp
bnRvdXQgb2YgIm51bSIKK2V4dGVybiBzdGQ6OnN0cmluZyBOdW1iZXJUb1N0cmluZyh1aW50NjRf
dCBudW0pOworCisvLyBSZXR1cm4gYSBodW1hbi1yZWFkYWJsZSB2ZXJzaW9uIG9mICJ2YWx1ZSIu
CisvLyBFc2NhcGVzIGFueSBub24tcHJpbnRhYmxlIGNoYXJhY3RlcnMgZm91bmQgaW4gInZhbHVl
Ii4KK2V4dGVybiBzdGQ6OnN0cmluZyBFc2NhcGVTdHJpbmcoY29uc3QgU2xpY2UmIHZhbHVlKTsK
KworLy8gSWYgKmluIHN0YXJ0cyB3aXRoICJjIiwgYWR2YW5jZXMgKmluIHBhc3QgdGhlIGZpcnN0
IGNoYXJhY3RlciBhbmQKKy8vIHJldHVybnMgdHJ1ZS4gIE90aGVyd2lzZSwgcmV0dXJucyBmYWxz
ZS4KK2V4dGVybiBib29sIENvbnN1bWVDaGFyKFNsaWNlKiBpbiwgY2hhciBjKTsKKworLy8gUGFy
c2UgYSBodW1hbi1yZWFkYWJsZSBudW1iZXIgZnJvbSAiKmluIiBpbnRvICp2YWx1ZS4gIE9uIHN1
Y2Nlc3MsCisvLyBhZHZhbmNlcyAiKmluIiBwYXN0IHRoZSBjb25zdW1lZCBudW1iZXIgYW5kIHNl
dHMgIip2YWwiIHRvIHRoZQorLy8gbnVtZXJpYyB2YWx1ZS4gIE90aGVyd2lzZSwgcmV0dXJucyBm
YWxzZSBhbmQgbGVhdmVzICppbiBpbiBhbgorLy8gdW5zcGVjaWZpZWQgc3RhdGUuCitleHRlcm4g
Ym9vbCBDb25zdW1lRGVjaW1hbE51bWJlcihTbGljZSogaW4sIHVpbnQ2NF90KiB2YWwpOworCit9
ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgorCisjZW5kaWYgIC8vIFNUT1JBR0VfTEVWRUxEQl9VVElM
X0xPR0dJTkdfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9t
dXRleGxvY2suaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9tdXRleGxvY2suaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4xZmY1YTllZmExNWVmYTE2NmI0MjdlZjk2MTFjY2M1OGM5NmEzOTg0Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL211dGV4bG9jay5o
CkBAIC0wLDAgKzEsNDEgQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRy
aWJ1dG9ycy4KKworI2lmbmRlZiBTVE9SQUdFX0xFVkVMREJfVVRJTF9NVVRFWExPQ0tfSF8KKyNk
ZWZpbmUgU1RPUkFHRV9MRVZFTERCX1VUSUxfTVVURVhMT0NLX0hfCisKKyNpbmNsdWRlICJwb3J0
L3BvcnQuaCIKKyNpbmNsdWRlICJwb3J0L3RocmVhZF9hbm5vdGF0aW9ucy5oIgorCituYW1lc3Bh
Y2UgbGV2ZWxkYiB7CisKKy8vIEhlbHBlciBjbGFzcyB0aGF0IGxvY2tzIGEgbXV0ZXggb24gY29u
c3RydWN0aW9uIGFuZCB1bmxvY2tzIHRoZSBtdXRleCB3aGVuCisvLyB0aGUgZGVzdHJ1Y3RvciBv
ZiB0aGUgTXV0ZXhMb2NrIG9iamVjdCBpcyBpbnZva2VkLgorLy8KKy8vIFR5cGljYWwgdXNhZ2U6
CisvLworLy8gICB2b2lkIE15Q2xhc3M6Ok15TWV0aG9kKCkgeworLy8gICAgIE11dGV4TG9jayBs
KCZtdV8pOyAgICAgICAvLyBtdV8gaXMgYW4gaW5zdGFuY2UgdmFyaWFibGUKKy8vICAgICAuLi4g
c29tZSBjb21wbGV4IGNvZGUsIHBvc3NpYmx5IHdpdGggbXVsdGlwbGUgcmV0dXJuIHBhdGhzIC4u
LgorLy8gICB9CisKK2NsYXNzIFNDT1BFRF9MT0NLQUJMRSBNdXRleExvY2sgeworIHB1YmxpYzoK
KyAgZXhwbGljaXQgTXV0ZXhMb2NrKHBvcnQ6Ok11dGV4ICptdSkgRVhDTFVTSVZFX0xPQ0tfRlVO
Q1RJT04obXUpCisgICAgICA6IG11XyhtdSkgIHsKKyAgICB0aGlzLT5tdV8tPkxvY2soKTsKKyAg
fQorICB+TXV0ZXhMb2NrKCkgVU5MT0NLX0ZVTkNUSU9OKCkgeyB0aGlzLT5tdV8tPlVubG9jaygp
OyB9CisKKyBwcml2YXRlOgorICBwb3J0OjpNdXRleCAqY29uc3QgbXVfOworICAvLyBObyBjb3B5
aW5nIGFsbG93ZWQKKyAgTXV0ZXhMb2NrKGNvbnN0IE11dGV4TG9jayYpOworICB2b2lkIG9wZXJh
dG9yPShjb25zdCBNdXRleExvY2smKTsKK307CisKK30gIC8vIG5hbWVzcGFjZSBsZXZlbGRiCisK
KworI2VuZGlmICAvLyBTVE9SQUdFX0xFVkVMREJfVVRJTF9NVVRFWExPQ0tfSF8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9vcHRpb25zLmNjIGIvU291cmNlL1Ro
aXJkUGFydHkvbGV2ZWxkYi91dGlsL29wdGlvbnMuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzZhZjViOTMwMmQ0
MzdkOTg0N2IyYTkzYzg3Njk3MjMyZDAyN2NhYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xldmVsZGIvdXRpbC9vcHRpb25zLmNjCkBAIC0wLDAgKzEsMjkgQEAKKy8vIENv
cHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRo
ZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2luY2x1ZGUgImxl
dmVsZGIvb3B0aW9ucy5oIgorCisjaW5jbHVkZSAibGV2ZWxkYi9jb21wYXJhdG9yLmgiCisjaW5j
bHVkZSAibGV2ZWxkYi9lbnYuaCIKKworbmFtZXNwYWNlIGxldmVsZGIgeworCitPcHRpb25zOjpP
cHRpb25zKCkKKyAgICA6IGNvbXBhcmF0b3IoQnl0ZXdpc2VDb21wYXJhdG9yKCkpLAorICAgICAg
Y3JlYXRlX2lmX21pc3NpbmcoZmFsc2UpLAorICAgICAgZXJyb3JfaWZfZXhpc3RzKGZhbHNlKSwK
KyAgICAgIHBhcmFub2lkX2NoZWNrcyhmYWxzZSksCisgICAgICBlbnYoRW52OjpEZWZhdWx0KCkp
LAorICAgICAgaW5mb19sb2coTlVMTCksCisgICAgICB3cml0ZV9idWZmZXJfc2l6ZSg0PDwyMCks
CisgICAgICBtYXhfb3Blbl9maWxlcygxMDAwKSwKKyAgICAgIGJsb2NrX2NhY2hlKE5VTEwpLAor
ICAgICAgYmxvY2tfc2l6ZSg0MDk2KSwKKyAgICAgIGJsb2NrX3Jlc3RhcnRfaW50ZXJ2YWwoMTYp
LAorICAgICAgY29tcHJlc3Npb24oa1NuYXBweUNvbXByZXNzaW9uKSwKKyAgICAgIGZpbHRlcl9w
b2xpY3koTlVMTCkgeworfQorCisKK30gIC8vIG5hbWVzcGFjZSBsZXZlbGRiCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvcG9zaXhfbG9nZ2VyLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvcG9zaXhfbG9nZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTc0MWIx
YWZhZDkzMDg0NGYyZmYwNDdkMjQ0YTQ4NjNlOGMwMTYxMwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9wb3NpeF9sb2dnZXIuaApAQCAtMCwwICsxLDk4
IEBACisvLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCisvLwor
Ly8gTG9nZ2VyIGltcGxlbWVudGF0aW9uIHRoYXQgY2FuIGJlIHNoYXJlZCBieSBhbGwgZW52aXJv
bm1lbnRzCisvLyB3aGVyZSBlbm91Z2ggcG9zaXggZnVuY3Rpb25hbGl0eSBpcyBhdmFpbGFibGUu
CisKKyNpZm5kZWYgU1RPUkFHRV9MRVZFTERCX1VUSUxfUE9TSVhfTE9HR0VSX0hfCisjZGVmaW5l
IFNUT1JBR0VfTEVWRUxEQl9VVElMX1BPU0lYX0xPR0dFUl9IXworCisjaW5jbHVkZSA8YWxnb3Jp
dGhtPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRl
IDx0aW1lLmg+CisjaW5jbHVkZSAibGV2ZWxkYi9lbnYuaCIKKworbmFtZXNwYWNlIGxldmVsZGIg
eworCitjbGFzcyBQb3NpeExvZ2dlciA6IHB1YmxpYyBMb2dnZXIgeworIHByaXZhdGU6CisgIEZJ
TEUqIGZpbGVfOworICB1aW50NjRfdCAoKmdldHRpZF8pKCk7ICAvLyBSZXR1cm4gdGhlIHRocmVh
ZCBpZCBmb3IgdGhlIGN1cnJlbnQgdGhyZWFkCisgcHVibGljOgorICBQb3NpeExvZ2dlcihGSUxF
KiBmLCB1aW50NjRfdCAoKmdldHRpZCkoKSkgOiBmaWxlXyhmKSwgZ2V0dGlkXyhnZXR0aWQpIHsg
fQorICB2aXJ0dWFsIH5Qb3NpeExvZ2dlcigpIHsKKyAgICBmY2xvc2UoZmlsZV8pOworICB9Cisg
IHZpcnR1YWwgdm9pZCBMb2d2KGNvbnN0IGNoYXIqIGZvcm1hdCwgdmFfbGlzdCBhcCkgeworICAg
IGNvbnN0IHVpbnQ2NF90IHRocmVhZF9pZCA9ICgqZ2V0dGlkXykoKTsKKworICAgIC8vIFdlIHRy
eSB0d2ljZTogdGhlIGZpcnN0IHRpbWUgd2l0aCBhIGZpeGVkLXNpemUgc3RhY2sgYWxsb2NhdGVk
IGJ1ZmZlciwKKyAgICAvLyBhbmQgdGhlIHNlY29uZCB0aW1lIHdpdGggYSBtdWNoIGxhcmdlciBk
eW5hbWljYWxseSBhbGxvY2F0ZWQgYnVmZmVyLgorICAgIGNoYXIgYnVmZmVyWzUwMF07CisgICAg
Zm9yIChpbnQgaXRlciA9IDA7IGl0ZXIgPCAyOyBpdGVyKyspIHsKKyAgICAgIGNoYXIqIGJhc2U7
CisgICAgICBpbnQgYnVmc2l6ZTsKKyAgICAgIGlmIChpdGVyID09IDApIHsKKyAgICAgICAgYnVm
c2l6ZSA9IHNpemVvZihidWZmZXIpOworICAgICAgICBiYXNlID0gYnVmZmVyOworICAgICAgfSBl
bHNlIHsKKyAgICAgICAgYnVmc2l6ZSA9IDMwMDAwOworICAgICAgICBiYXNlID0gbmV3IGNoYXJb
YnVmc2l6ZV07CisgICAgICB9CisgICAgICBjaGFyKiBwID0gYmFzZTsKKyAgICAgIGNoYXIqIGxp
bWl0ID0gYmFzZSArIGJ1ZnNpemU7CisKKyAgICAgIHN0cnVjdCB0aW1ldmFsIG5vd190djsKKyAg
ICAgIGdldHRpbWVvZmRheSgmbm93X3R2LCBOVUxMKTsKKyAgICAgIGNvbnN0IHRpbWVfdCBzZWNv
bmRzID0gbm93X3R2LnR2X3NlYzsKKyAgICAgIHN0cnVjdCB0bSB0OworICAgICAgbG9jYWx0aW1l
X3IoJnNlY29uZHMsICZ0KTsKKyAgICAgIHAgKz0gc25wcmludGYocCwgbGltaXQgLSBwLAorICAg
ICAgICAgICAgICAgICAgICAiJTA0ZC8lMDJkLyUwMmQtJTAyZDolMDJkOiUwMmQuJTA2ZCAlbGx4
ICIsCisgICAgICAgICAgICAgICAgICAgIHQudG1feWVhciArIDE5MDAsCisgICAgICAgICAgICAg
ICAgICAgIHQudG1fbW9uICsgMSwKKyAgICAgICAgICAgICAgICAgICAgdC50bV9tZGF5LAorICAg
ICAgICAgICAgICAgICAgICB0LnRtX2hvdXIsCisgICAgICAgICAgICAgICAgICAgIHQudG1fbWlu
LAorICAgICAgICAgICAgICAgICAgICB0LnRtX3NlYywKKyAgICAgICAgICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8aW50Pihub3dfdHYudHZfdXNlYyksCisgICAgICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PGxvbmcgbG9uZyB1bnNpZ25lZCBpbnQ+KHRocmVhZF9pZCkpOworCisgICAgICAvLyBQ
cmludCB0aGUgbWVzc2FnZQorICAgICAgaWYgKHAgPCBsaW1pdCkgeworICAgICAgICB2YV9saXN0
IGJhY2t1cF9hcDsKKyAgICAgICAgdmFfY29weShiYWNrdXBfYXAsIGFwKTsKKyAgICAgICAgcCAr
PSB2c25wcmludGYocCwgbGltaXQgLSBwLCBmb3JtYXQsIGJhY2t1cF9hcCk7CisgICAgICAgIHZh
X2VuZChiYWNrdXBfYXApOworICAgICAgfQorCisgICAgICAvLyBUcnVuY2F0ZSB0byBhdmFpbGFi
bGUgc3BhY2UgaWYgbmVjZXNzYXJ5CisgICAgICBpZiAocCA+PSBsaW1pdCkgeworICAgICAgICBp
ZiAoaXRlciA9PSAwKSB7CisgICAgICAgICAgY29udGludWU7ICAgICAgIC8vIFRyeSBhZ2FpbiB3
aXRoIGxhcmdlciBidWZmZXIKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBwID0gbGltaXQg
LSAxOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIC8vIEFkZCBuZXdsaW5lIGlmIG5lY2Vz
c2FyeQorICAgICAgaWYgKHAgPT0gYmFzZSB8fCBwWy0xXSAhPSAnXG4nKSB7CisgICAgICAgICpw
KysgPSAnXG4nOworICAgICAgfQorCisgICAgICBhc3NlcnQocCA8PSBsaW1pdCk7CisgICAgICBm
d3JpdGUoYmFzZSwgMSwgcCAtIGJhc2UsIGZpbGVfKTsKKyAgICAgIGZmbHVzaChmaWxlXyk7Cisg
ICAgICBpZiAoYmFzZSAhPSBidWZmZXIpIHsKKyAgICAgICAgZGVsZXRlW10gYmFzZTsKKyAgICAg
IH0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorfTsKKworfSAgLy8gbmFtZXNwYWNlIGxldmVs
ZGIKKworI2VuZGlmICAvLyBTVE9SQUdFX0xFVkVMREJfVVRJTF9QT1NJWF9MT0dHRVJfSF8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9yYW5kb20uaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9yYW5kb20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNzUzODI0MmVh
NTU5YWQzMTM5NmI5OTRhNTE3MmYxM2VjYjNkNzc1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL3JhbmRvbS5oCkBAIC0wLDAgKzEsNTkgQEAKKy8vIENv
cHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4gU2VlIHRo
ZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycy4KKworI2lmbmRlZiBTVE9S
QUdFX0xFVkVMREJfVVRJTF9SQU5ET01fSF8KKyNkZWZpbmUgU1RPUkFHRV9MRVZFTERCX1VUSUxf
UkFORE9NX0hfCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworbmFtZXNwYWNlIGxldmVsZGIgewor
CisvLyBBIHZlcnkgc2ltcGxlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLiAgTm90IGVzcGVjaWFs
bHkgZ29vZCBhdAorLy8gZ2VuZXJhdGluZyB0cnVseSByYW5kb20gYml0cywgYnV0IGdvb2QgZW5v
dWdoIGZvciBvdXIgbmVlZHMgaW4gdGhpcworLy8gcGFja2FnZS4KK2NsYXNzIFJhbmRvbSB7Cisg
cHJpdmF0ZToKKyAgdWludDMyX3Qgc2VlZF87CisgcHVibGljOgorICBleHBsaWNpdCBSYW5kb20o
dWludDMyX3QgcykgOiBzZWVkXyhzICYgMHg3ZmZmZmZmZnUpIHsgfQorICB1aW50MzJfdCBOZXh0
KCkgeworICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBNID0gMjE0NzQ4MzY0N0w7ICAgLy8gMl4z
MS0xCisgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IEEgPSAxNjgwNzsgIC8vIGJpdHMgMTQsIDgs
IDcsIDUsIDIsIDEsIDAKKyAgICAvLyBXZSBhcmUgY29tcHV0aW5nCisgICAgLy8gICAgICAgc2Vl
ZF8gPSAoc2VlZF8gKiBBKSAlIE0sICAgIHdoZXJlIE0gPSAyXjMxLTEKKyAgICAvLworICAgIC8v
IHNlZWRfIG11c3Qgbm90IGJlIHplcm8gb3IgTSwgb3IgZWxzZSBhbGwgc3Vic2VxdWVudCBjb21w
dXRlZCB2YWx1ZXMKKyAgICAvLyB3aWxsIGJlIHplcm8gb3IgTSByZXNwZWN0aXZlbHkuICBGb3Ig
YWxsIG90aGVyIHZhbHVlcywgc2VlZF8gd2lsbCBlbmQKKyAgICAvLyB1cCBjeWNsaW5nIHRocm91
Z2ggZXZlcnkgbnVtYmVyIGluIFsxLE0tMV0KKyAgICB1aW50NjRfdCBwcm9kdWN0ID0gc2VlZF8g
KiBBOworCisgICAgLy8gQ29tcHV0ZSAocHJvZHVjdCAlIE0pIHVzaW5nIHRoZSBmYWN0IHRoYXQg
KCh4IDw8IDMxKSAlIE0pID09IHguCisgICAgc2VlZF8gPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4o
KHByb2R1Y3QgPj4gMzEpICsgKHByb2R1Y3QgJiBNKSk7CisgICAgLy8gVGhlIGZpcnN0IHJlZHVj
dGlvbiBtYXkgb3ZlcmZsb3cgYnkgMSBiaXQsIHNvIHdlIG1heSBuZWVkIHRvCisgICAgLy8gcmVw
ZWF0LiAgbW9kID09IE0gaXMgbm90IHBvc3NpYmxlOyB1c2luZyA+IGFsbG93cyB0aGUgZmFzdGVy
CisgICAgLy8gc2lnbi1iaXQtYmFzZWQgdGVzdC4KKyAgICBpZiAoc2VlZF8gPiBNKSB7CisgICAg
ICBzZWVkXyAtPSBNOworICAgIH0KKyAgICByZXR1cm4gc2VlZF87CisgIH0KKyAgLy8gUmV0dXJu
cyBhIHVuaWZvcm1seSBkaXN0cmlidXRlZCB2YWx1ZSBpbiB0aGUgcmFuZ2UgWzAuLm4tMV0KKyAg
Ly8gUkVRVUlSRVM6IG4gPiAwCisgIHVpbnQzMl90IFVuaWZvcm0oaW50IG4pIHsgcmV0dXJuIE5l
eHQoKSAlIG47IH0KKworICAvLyBSYW5kb21seSByZXR1cm5zIHRydWUgfiIxL24iIG9mIHRoZSB0
aW1lLCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLgorICAvLyBSRVFVSVJFUzogbiA+IDAKKyAgYm9vbCBP
bmVJbihpbnQgbikgeyByZXR1cm4gKE5leHQoKSAlIG4pID09IDA7IH0KKworICAvLyBTa2V3ZWQ6
IHBpY2sgImJhc2UiIHVuaWZvcm1seSBmcm9tIHJhbmdlIFswLG1heF9sb2ddIGFuZCB0aGVuCisg
IC8vIHJldHVybiAiYmFzZSIgcmFuZG9tIGJpdHMuICBUaGUgZWZmZWN0IGlzIHRvIHBpY2sgYSBu
dW1iZXIgaW4gdGhlCisgIC8vIHJhbmdlIFswLDJebWF4X2xvZy0xXSB3aXRoIGV4cG9uZW50aWFs
IGJpYXMgdG93YXJkcyBzbWFsbGVyIG51bWJlcnMuCisgIHVpbnQzMl90IFNrZXdlZChpbnQgbWF4
X2xvZykgeworICAgIHJldHVybiBVbmlmb3JtKDEgPDwgVW5pZm9ybShtYXhfbG9nICsgMSkpOwor
ICB9Cit9OworCit9ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgorCisjZW5kaWYgIC8vIFNUT1JBR0Vf
TEVWRUxEQl9VVElMX1JBTkRPTV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGV2
ZWxkYi91dGlsL3N0YXR1cy5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9zdGF0
dXMuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYTQ0ZjM1YjMxNDlmYThmZTg4ZDljYTMyZGJmOTJmYmI5ZjZkNTM0
YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9zdGF0
dXMuY2MKQEAgLTAsMCArMSw3NSBAQAorLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBMZXZlbERC
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLiBTZWUgdGhlIEFVVEhPUlMgZmlsZSBmb3IgbmFtZXMgb2Yg
Y29udHJpYnV0b3JzLgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJwb3J0L3BvcnQu
aCIKKyNpbmNsdWRlICJsZXZlbGRiL3N0YXR1cy5oIgorCituYW1lc3BhY2UgbGV2ZWxkYiB7CisK
K2NvbnN0IGNoYXIqIFN0YXR1czo6Q29weVN0YXRlKGNvbnN0IGNoYXIqIHN0YXRlKSB7CisgIHVp
bnQzMl90IHNpemU7CisgIG1lbWNweSgmc2l6ZSwgc3RhdGUsIHNpemVvZihzaXplKSk7CisgIGNo
YXIqIHJlc3VsdCA9IG5ldyBjaGFyW3NpemUgKyA1XTsKKyAgbWVtY3B5KHJlc3VsdCwgc3RhdGUs
IHNpemUgKyA1KTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworU3RhdHVzOjpTdGF0dXMoQ29kZSBj
b2RlLCBjb25zdCBTbGljZSYgbXNnLCBjb25zdCBTbGljZSYgbXNnMikgeworICBhc3NlcnQoY29k
ZSAhPSBrT2spOworICBjb25zdCB1aW50MzJfdCBsZW4xID0gbXNnLnNpemUoKTsKKyAgY29uc3Qg
dWludDMyX3QgbGVuMiA9IG1zZzIuc2l6ZSgpOworICBjb25zdCB1aW50MzJfdCBzaXplID0gbGVu
MSArIChsZW4yID8gKDIgKyBsZW4yKSA6IDApOworICBjaGFyKiByZXN1bHQgPSBuZXcgY2hhcltz
aXplICsgNV07CisgIG1lbWNweShyZXN1bHQsICZzaXplLCBzaXplb2Yoc2l6ZSkpOworICByZXN1
bHRbNF0gPSBzdGF0aWNfY2FzdDxjaGFyPihjb2RlKTsKKyAgbWVtY3B5KHJlc3VsdCArIDUsIG1z
Zy5kYXRhKCksIGxlbjEpOworICBpZiAobGVuMikgeworICAgIHJlc3VsdFs1ICsgbGVuMV0gPSAn
Oic7CisgICAgcmVzdWx0WzYgKyBsZW4xXSA9ICcgJzsKKyAgICBtZW1jcHkocmVzdWx0ICsgNyAr
IGxlbjEsIG1zZzIuZGF0YSgpLCBsZW4yKTsKKyAgfQorICBzdGF0ZV8gPSByZXN1bHQ7Cit9CisK
K3N0ZDo6c3RyaW5nIFN0YXR1czo6VG9TdHJpbmcoKSBjb25zdCB7CisgIGlmIChzdGF0ZV8gPT0g
TlVMTCkgeworICAgIHJldHVybiAiT0siOworICB9IGVsc2UgeworICAgIGNoYXIgdG1wWzMwXTsK
KyAgICBjb25zdCBjaGFyKiB0eXBlOworICAgIHN3aXRjaCAoY29kZSgpKSB7CisgICAgICBjYXNl
IGtPazoKKyAgICAgICAgdHlwZSA9ICJPSyI7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBr
Tm90Rm91bmQ6CisgICAgICAgIHR5cGUgPSAiTm90Rm91bmQ6ICI7CisgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBrQ29ycnVwdGlvbjoKKyAgICAgICAgdHlwZSA9ICJDb3JydXB0aW9uOiAiOwor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2Uga05vdFN1cHBvcnRlZDoKKyAgICAgICAgdHlwZSA9
ICJOb3QgaW1wbGVtZW50ZWQ6ICI7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBrSW52YWxp
ZEFyZ3VtZW50OgorICAgICAgICB0eXBlID0gIkludmFsaWQgYXJndW1lbnQ6ICI7CisgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBrSU9FcnJvcjoKKyAgICAgICAgdHlwZSA9ICJJTyBlcnJvcjog
IjsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBzbnByaW50Zih0bXAs
IHNpemVvZih0bXApLCAiVW5rbm93biBjb2RlKCVkKTogIiwKKyAgICAgICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8aW50Pihjb2RlKCkpKTsKKyAgICAgICAgdHlwZSA9IHRtcDsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIHN0ZDo6c3RyaW5nIHJlc3VsdCh0eXBlKTsKKyAgICB1aW50MzJfdCBs
ZW5ndGg7CisgICAgbWVtY3B5KCZsZW5ndGgsIHN0YXRlXywgc2l6ZW9mKGxlbmd0aCkpOworICAg
IHJlc3VsdC5hcHBlbmQoc3RhdGVfICsgNSwgbGVuZ3RoKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
ICB9Cit9CisKK30gIC8vIG5hbWVzcGFjZSBsZXZlbGRiCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9sZXZlbGRiL3V0aWwvdGVzdGhhcm5lc3MuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
ZXZlbGRiL3V0aWwvdGVzdGhhcm5lc3MuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWIxYmRkNTU0YTNlYTJmMDZj
ZDQ1MDUzYWIzZGY4YzcxYzk2MTBhOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xldmVsZGIvdXRpbC90ZXN0aGFybmVzcy5jYwpAQCAtMCwwICsxLDc3IEBACisvLyBDb3B5
cmlnaHQgKGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUg
QVVUSE9SUyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCisKKyNpbmNsdWRlICJ1dGls
L3Rlc3RoYXJuZXNzLmgiCisKKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8c3RkbGliLmg+
CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworbmFtZXNw
YWNlIGxldmVsZGIgeworbmFtZXNwYWNlIHRlc3QgeworCituYW1lc3BhY2Ugeworc3RydWN0IFRl
c3QgeworICBjb25zdCBjaGFyKiBiYXNlOworICBjb25zdCBjaGFyKiBuYW1lOworICB2b2lkICgq
ZnVuYykoKTsKK307CitzdGQ6OnZlY3RvcjxUZXN0PiogdGVzdHM7Cit9CisKK2Jvb2wgUmVnaXN0
ZXJUZXN0KGNvbnN0IGNoYXIqIGJhc2UsIGNvbnN0IGNoYXIqIG5hbWUsIHZvaWQgKCpmdW5jKSgp
KSB7CisgIGlmICh0ZXN0cyA9PSBOVUxMKSB7CisgICAgdGVzdHMgPSBuZXcgc3RkOjp2ZWN0b3I8
VGVzdD47CisgIH0KKyAgVGVzdCB0OworICB0LmJhc2UgPSBiYXNlOworICB0Lm5hbWUgPSBuYW1l
OworICB0LmZ1bmMgPSBmdW5jOworICB0ZXN0cy0+cHVzaF9iYWNrKHQpOworICByZXR1cm4gdHJ1
ZTsKK30KKworaW50IFJ1bkFsbFRlc3RzKCkgeworICBjb25zdCBjaGFyKiBtYXRjaGVyID0gZ2V0
ZW52KCJMRVZFTERCX1RFU1RTIik7CisKKyAgaW50IG51bSA9IDA7CisgIGlmICh0ZXN0cyAhPSBO
VUxMKSB7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0ZXN0cy0+c2l6ZSgpOyBpKyspIHsKKyAg
ICAgIGNvbnN0IFRlc3QmIHQgPSAoKnRlc3RzKVtpXTsKKyAgICAgIGlmIChtYXRjaGVyICE9IE5V
TEwpIHsKKyAgICAgICAgc3RkOjpzdHJpbmcgbmFtZSA9IHQuYmFzZTsKKyAgICAgICAgbmFtZS5w
dXNoX2JhY2soJy4nKTsKKyAgICAgICAgbmFtZS5hcHBlbmQodC5uYW1lKTsKKyAgICAgICAgaWYg
KHN0cnN0cihuYW1lLmNfc3RyKCksIG1hdGNoZXIpID09IE5VTEwpIHsKKyAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZnByaW50ZihzdGRlcnIsICI9PT09IFRl
c3QgJXMuJXNcbiIsIHQuYmFzZSwgdC5uYW1lKTsKKyAgICAgICgqdC5mdW5jKSgpOworICAgICAg
KytudW07CisgICAgfQorICB9CisgIGZwcmludGYoc3RkZXJyLCAiPT09PSBQQVNTRUQgJWQgdGVz
dHNcbiIsIG51bSk7CisgIHJldHVybiAwOworfQorCitzdGQ6OnN0cmluZyBUbXBEaXIoKSB7Cisg
IHN0ZDo6c3RyaW5nIGRpcjsKKyAgU3RhdHVzIHMgPSBFbnY6OkRlZmF1bHQoKS0+R2V0VGVzdERp
cmVjdG9yeSgmZGlyKTsKKyAgQVNTRVJUX1RSVUUocy5vaygpKSA8PCBzLlRvU3RyaW5nKCk7Cisg
IHJldHVybiBkaXI7Cit9CisKK2ludCBSYW5kb21TZWVkKCkgeworICBjb25zdCBjaGFyKiBlbnYg
PSBnZXRlbnYoIlRFU1RfUkFORE9NX1NFRUQiKTsKKyAgaW50IHJlc3VsdCA9IChlbnYgIT0gTlVM
TCA/IGF0b2koZW52KSA6IDMwMSk7CisgIGlmIChyZXN1bHQgPD0gMCkgeworICAgIHJlc3VsdCA9
IDMwMTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCit9ICAvLyBuYW1lc3BhY2UgdGVzdAor
fSAgLy8gbmFtZXNwYWNlIGxldmVsZGIKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xl
dmVsZGIvdXRpbC90ZXN0aGFybmVzcy5oIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGls
L3Rlc3RoYXJuZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGE0ZmU2OGJiNGU3NmVlNjlhZjEzNmQ3NmY5NDE3
ZDM0OWZhOTYwNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIv
dXRpbC90ZXN0aGFybmVzcy5oCkBAIC0wLDAgKzEsMTM4IEBACisvLyBDb3B5cmlnaHQgKGMpIDIw
MTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9SUyBmaWxl
IGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCisKKyNpZm5kZWYgU1RPUkFHRV9MRVZFTERCX1VU
SUxfVEVTVEhBUk5FU1NfSF8KKyNkZWZpbmUgU1RPUkFHRV9MRVZFTERCX1VUSUxfVEVTVEhBUk5F
U1NfSF8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVk
ZSA8c3N0cmVhbT4KKyNpbmNsdWRlICJsZXZlbGRiL2Vudi5oIgorI2luY2x1ZGUgImxldmVsZGIv
c2xpY2UuaCIKKyNpbmNsdWRlICJ1dGlsL3JhbmRvbS5oIgorCituYW1lc3BhY2UgbGV2ZWxkYiB7
CituYW1lc3BhY2UgdGVzdCB7CisKKy8vIFJ1biBzb21lIG9mIHRoZSB0ZXN0cyByZWdpc3RlcmVk
IGJ5IHRoZSBURVNUKCkgbWFjcm8uICBJZiB0aGUKKy8vIGVudmlyb25tZW50IHZhcmlhYmxlICJM
RVZFTERCX1RFU1RTIiBpcyBub3Qgc2V0LCBydW5zIGFsbCB0ZXN0cy4KKy8vIE90aGVyd2lzZSwg
cnVucyBvbmx5IHRoZSB0ZXN0cyB3aG9zZSBuYW1lIGNvbnRhaW5zIHRoZSB2YWx1ZSBvZgorLy8g
IkxFVkVMREJfVEVTVFMiIGFzIGEgc3Vic3RyaW5nLiAgRS5nLiwgc3VwcG9zZSB0aGUgdGVzdHMg
YXJlOgorLy8gICAgVEVTVChGb28sIEhlbGxvKSB7IC4uLiB9CisvLyAgICBURVNUKEZvbywgV29y
bGQpIHsgLi4uIH0KKy8vIExFVkVMREJfVEVTVFM9SGVsbG8gd2lsbCBydW4gdGhlIGZpcnN0IHRl
c3QKKy8vIExFVkVMREJfVEVTVFM9byAgICAgd2lsbCBydW4gYm90aCB0ZXN0cworLy8gTEVWRUxE
Ql9URVNUUz1KdW5rICB3aWxsIHJ1biBubyB0ZXN0cworLy8KKy8vIFJldHVybnMgMCBpZiBhbGwg
dGVzdHMgcGFzcy4KKy8vIERpZXMgb3IgcmV0dXJucyBhIG5vbi16ZXJvIHZhbHVlIGlmIHNvbWUg
dGVzdCBmYWlscy4KK2V4dGVybiBpbnQgUnVuQWxsVGVzdHMoKTsKKworLy8gUmV0dXJuIHRoZSBk
aXJlY3RvcnkgdG8gdXNlIGZvciB0ZW1wb3Jhcnkgc3RvcmFnZS4KK2V4dGVybiBzdGQ6OnN0cmlu
ZyBUbXBEaXIoKTsKKworLy8gUmV0dXJuIGEgcmFuZG9taXphdGlvbiBzZWVkIGZvciB0aGlzIHJ1
bi4gIFR5cGljYWxseSByZXR1cm5zIHRoZQorLy8gc2FtZSBudW1iZXIgb24gcmVwZWF0ZWQgaW52
b2NhdGlvbnMgb2YgdGhpcyBiaW5hcnksIGJ1dCBhdXRvbWF0ZWQKKy8vIHJ1bnMgbWF5IGJlIGFi
bGUgdG8gdmFyeSB0aGUgc2VlZC4KK2V4dGVybiBpbnQgUmFuZG9tU2VlZCgpOworCisvLyBBbiBp
bnN0YW5jZSBvZiBUZXN0ZXIgaXMgYWxsb2NhdGVkIHRvIGhvbGQgdGVtcG9yYXJ5IHN0YXRlIGR1
cmluZworLy8gdGhlIGV4ZWN1dGlvbiBvZiBhbiBhc3NlcnRpb24uCitjbGFzcyBUZXN0ZXIgewor
IHByaXZhdGU6CisgIGJvb2wgb2tfOworICBjb25zdCBjaGFyKiBmbmFtZV87CisgIGludCBsaW5l
XzsKKyAgc3RkOjpzdHJpbmdzdHJlYW0gc3NfOworCisgcHVibGljOgorICBUZXN0ZXIoY29uc3Qg
Y2hhciogZiwgaW50IGwpCisgICAgICA6IG9rXyh0cnVlKSwgZm5hbWVfKGYpLCBsaW5lXyhsKSB7
CisgIH0KKworICB+VGVzdGVyKCkgeworICAgIGlmICghb2tfKSB7CisgICAgICBmcHJpbnRmKHN0
ZGVyciwgIiVzOiVkOiVzXG4iLCBmbmFtZV8sIGxpbmVfLCBzc18uc3RyKCkuY19zdHIoKSk7Cisg
ICAgICBleGl0KDEpOworICAgIH0KKyAgfQorCisgIFRlc3RlciYgSXMoYm9vbCBiLCBjb25zdCBj
aGFyKiBtc2cpIHsKKyAgICBpZiAoIWIpIHsKKyAgICAgIHNzXyA8PCAiIEFzc2VydGlvbiBmYWls
dXJlICIgPDwgbXNnOworICAgICAgb2tfID0gZmFsc2U7CisgICAgfQorICAgIHJldHVybiAqdGhp
czsKKyAgfQorCisgIFRlc3RlciYgSXNPayhjb25zdCBTdGF0dXMmIHMpIHsKKyAgICBpZiAoIXMu
b2soKSkgeworICAgICAgc3NfIDw8ICIgIiA8PCBzLlRvU3RyaW5nKCk7CisgICAgICBva18gPSBm
YWxzZTsKKyAgICB9CisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyNkZWZpbmUgQklOQVJZX09Q
KG5hbWUsb3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB0ZW1wbGF0ZSA8Y2xh
c3MgWCwgY2xhc3MgWT4gICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIFRlc3RlciYgbmFt
ZShjb25zdCBYJiB4LCBjb25zdCBZJiB5KSB7ICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoISAo
eCBvcCB5KSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgc3Nf
IDw8ICIgZmFpbGVkOiAiIDw8IHggPDwgKCIgIiAjb3AgIiAiKSA8PCB5OyAgICBcCisgICAgICBv
a18gPSBmYWxzZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
IHJldHVybiAqdGhpczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
IH0KKworICBCSU5BUllfT1AoSXNFcSwgPT0pCisgIEJJTkFSWV9PUChJc05lLCAhPSkKKyAgQklO
QVJZX09QKElzR2UsID49KQorICBCSU5BUllfT1AoSXNHdCwgPikKKyAgQklOQVJZX09QKElzTGUs
IDw9KQorICBCSU5BUllfT1AoSXNMdCwgPCkKKyN1bmRlZiBCSU5BUllfT1AKKworICAvLyBBdHRh
Y2ggdGhlIHNwZWNpZmllZCB2YWx1ZSB0byB0aGUgZXJyb3IgbWVzc2FnZSBpZiBhbiBlcnJvciBo
YXMgb2NjdXJyZWQKKyAgdGVtcGxhdGUgPGNsYXNzIFY+CisgIFRlc3RlciYgb3BlcmF0b3I8PChj
b25zdCBWJiB2YWx1ZSkgeworICAgIGlmICghb2tfKSB7CisgICAgICBzc18gPDwgIiAiIDw8IHZh
bHVlOworICAgIH0KKyAgICByZXR1cm4gKnRoaXM7CisgIH0KK307CisKKyNkZWZpbmUgQVNTRVJU
X1RSVUUoYykgOjpsZXZlbGRiOjp0ZXN0OjpUZXN0ZXIoX19GSUxFX18sIF9fTElORV9fKS5Jcygo
YyksICNjKQorI2RlZmluZSBBU1NFUlRfT0socykgOjpsZXZlbGRiOjp0ZXN0OjpUZXN0ZXIoX19G
SUxFX18sIF9fTElORV9fKS5Jc09rKChzKSkKKyNkZWZpbmUgQVNTRVJUX0VRKGEsYikgOjpsZXZl
bGRiOjp0ZXN0OjpUZXN0ZXIoX19GSUxFX18sIF9fTElORV9fKS5Jc0VxKChhKSwoYikpCisjZGVm
aW5lIEFTU0VSVF9ORShhLGIpIDo6bGV2ZWxkYjo6dGVzdDo6VGVzdGVyKF9fRklMRV9fLCBfX0xJ
TkVfXykuSXNOZSgoYSksKGIpKQorI2RlZmluZSBBU1NFUlRfR0UoYSxiKSA6OmxldmVsZGI6OnRl
c3Q6OlRlc3RlcihfX0ZJTEVfXywgX19MSU5FX18pLklzR2UoKGEpLChiKSkKKyNkZWZpbmUgQVNT
RVJUX0dUKGEsYikgOjpsZXZlbGRiOjp0ZXN0OjpUZXN0ZXIoX19GSUxFX18sIF9fTElORV9fKS5J
c0d0KChhKSwoYikpCisjZGVmaW5lIEFTU0VSVF9MRShhLGIpIDo6bGV2ZWxkYjo6dGVzdDo6VGVz
dGVyKF9fRklMRV9fLCBfX0xJTkVfXykuSXNMZSgoYSksKGIpKQorI2RlZmluZSBBU1NFUlRfTFQo
YSxiKSA6OmxldmVsZGI6OnRlc3Q6OlRlc3RlcihfX0ZJTEVfXywgX19MSU5FX18pLklzTHQoKGEp
LChiKSkKKworI2RlZmluZSBUQ09OQ0FUKGEsYikgVENPTkNBVDEoYSxiKQorI2RlZmluZSBUQ09O
Q0FUMShhLGIpIGEjI2IKKworI2RlZmluZSBURVNUKGJhc2UsbmFtZSkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorY2xhc3MgVENPTkNBVChfVGVzdF8s
bmFtZSkgOiBwdWJsaWMgYmFzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIHB1
YmxpYzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICB2b2lkIF9SdW4oKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBzdGF0aWMgdm9pZCBfUnVuSXQoKSB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFRD
T05DQVQoX1Rlc3RfLG5hbWUpIHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIHQuX1J1bigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfTsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorYm9vbCBUQ09OQ0FUKF9UZXN0X2lnbm9yZWRfLG5hbWUpID0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICA6OmxldmVsZGI6OnRlc3Q6OlJlZ2lzdGVyVGVz
dCgjYmFzZSwgI25hbWUsICZUQ09OQ0FUKF9UZXN0XyxuYW1lKTo6X1J1bkl0KTsgXAordm9pZCBU
Q09OQ0FUKF9UZXN0XyxuYW1lKTo6X1J1bigpCisKKy8vIFJlZ2lzdGVyIHRoZSBzcGVjaWZpZWQg
dGVzdC4gIFR5cGljYWxseSBub3QgdXNlZCBkaXJlY3RseSwgYnV0CisvLyBpbnZva2VkIHZpYSB0
aGUgbWFjcm8gZXhwYW5zaW9uIG9mIFRFU1QuCitleHRlcm4gYm9vbCBSZWdpc3RlclRlc3QoY29u
c3QgY2hhciogYmFzZSwgY29uc3QgY2hhciogbmFtZSwgdm9pZCAoKmZ1bmMpKCkpOworCisKK30g
IC8vIG5hbWVzcGFjZSB0ZXN0Cit9ICAvLyBuYW1lc3BhY2UgbGV2ZWxkYgorCisjZW5kaWYgIC8v
IFNUT1JBR0VfTEVWRUxEQl9VVElMX1RFU1RIQVJORVNTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvdGVzdHV0aWwuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
ZXZlbGRiL3V0aWwvdGVzdHV0aWwuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTM4ZDA5NTE2ZDIxN2Q2MTRhYzQ1
Y2VmZTM4YmIxNTAzZDNiMWQ1YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xldmVsZGIvdXRpbC90ZXN0dXRpbC5jYwpAQCAtMCwwICsxLDUxIEBACisvLyBDb3B5cmlnaHQg
KGMpIDIwMTEgVGhlIExldmVsREIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuIFNlZSB0aGUgQVVUSE9S
UyBmaWxlIGZvciBuYW1lcyBvZiBjb250cmlidXRvcnMuCisKKyNpbmNsdWRlICJ1dGlsL3Rlc3R1
dGlsLmgiCisKKyNpbmNsdWRlICJ1dGlsL3JhbmRvbS5oIgorCituYW1lc3BhY2UgbGV2ZWxkYiB7
CituYW1lc3BhY2UgdGVzdCB7CisKK1NsaWNlIFJhbmRvbVN0cmluZyhSYW5kb20qIHJuZCwgaW50
IGxlbiwgc3RkOjpzdHJpbmcqIGRzdCkgeworICBkc3QtPnJlc2l6ZShsZW4pOworICBmb3IgKGlu
dCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgKCpkc3QpW2ldID0gc3RhdGljX2Nhc3Q8Y2hh
cj4oJyAnICsgcm5kLT5Vbmlmb3JtKDk1KSk7ICAgLy8gJyAnIC4uICd+JworICB9CisgIHJldHVy
biBTbGljZSgqZHN0KTsKK30KKworc3RkOjpzdHJpbmcgUmFuZG9tS2V5KFJhbmRvbSogcm5kLCBp
bnQgbGVuKSB7CisgIC8vIE1ha2Ugc3VyZSB0byBnZW5lcmF0ZSBhIHdpZGUgdmFyaWV0eSBvZiBj
aGFyYWN0ZXJzIHNvIHdlCisgIC8vIHRlc3QgdGhlIGJvdW5kYXJ5IGNvbmRpdGlvbnMgZm9yIHNo
b3J0LWtleSBvcHRpbWl6YXRpb25zLgorICBzdGF0aWMgY29uc3QgY2hhciBrVGVzdENoYXJzW10g
PSB7CisgICAgJ1wwJywgJ1wxJywgJ2EnLCAnYicsICdjJywgJ2QnLCAnZScsICdceGZkJywgJ1x4
ZmUnLCAnXHhmZicKKyAgfTsKKyAgc3RkOjpzdHJpbmcgcmVzdWx0OworICBmb3IgKGludCBpID0g
MDsgaSA8IGxlbjsgaSsrKSB7CisgICAgcmVzdWx0ICs9IGtUZXN0Q2hhcnNbcm5kLT5Vbmlmb3Jt
KHNpemVvZihrVGVzdENoYXJzKSldOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKKworZXh0
ZXJuIFNsaWNlIENvbXByZXNzaWJsZVN0cmluZyhSYW5kb20qIHJuZCwgZG91YmxlIGNvbXByZXNz
ZWRfZnJhY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW4sIHN0
ZDo6c3RyaW5nKiBkc3QpIHsKKyAgaW50IHJhdyA9IHN0YXRpY19jYXN0PGludD4obGVuICogY29t
cHJlc3NlZF9mcmFjdGlvbik7CisgIGlmIChyYXcgPCAxKSByYXcgPSAxOworICBzdGQ6OnN0cmlu
ZyByYXdfZGF0YTsKKyAgUmFuZG9tU3RyaW5nKHJuZCwgcmF3LCAmcmF3X2RhdGEpOworCisgIC8v
IER1cGxpY2F0ZSB0aGUgcmFuZG9tIGRhdGEgdW50aWwgd2UgaGF2ZSBmaWxsZWQgImxlbiIgYnl0
ZXMKKyAgZHN0LT5jbGVhcigpOworICB3aGlsZSAoZHN0LT5zaXplKCkgPCBsZW4pIHsKKyAgICBk
c3QtPmFwcGVuZChyYXdfZGF0YSk7CisgIH0KKyAgZHN0LT5yZXNpemUobGVuKTsKKyAgcmV0dXJu
IFNsaWNlKCpkc3QpOworfQorCit9ICAvLyBuYW1lc3BhY2UgdGVzdAorfSAgLy8gbmFtZXNwYWNl
IGxldmVsZGIKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC90ZXN0
dXRpbC5oIGIvU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL3Rlc3R1dGlsLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uODI0ZTY1NWJkMmM1ZDc5NTVhYTgzODg3OTY2YWQwZjU0ZmI3NzE5MgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC90ZXN0dXRpbC5oCkBAIC0w
LDAgKzEsNTMgQEAKKy8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgTGV2ZWxEQiBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4gU2VlIHRoZSBBVVRIT1JTIGZpbGUgZm9yIG5hbWVzIG9mIGNvbnRyaWJ1dG9y
cy4KKworI2lmbmRlZiBTVE9SQUdFX0xFVkVMREJfVVRJTF9URVNUVVRJTF9IXworI2RlZmluZSBT
VE9SQUdFX0xFVkVMREJfVVRJTF9URVNUVVRJTF9IXworCisjaW5jbHVkZSAibGV2ZWxkYi9lbnYu
aCIKKyNpbmNsdWRlICJsZXZlbGRiL3NsaWNlLmgiCisjaW5jbHVkZSAidXRpbC9yYW5kb20uaCIK
KworbmFtZXNwYWNlIGxldmVsZGIgeworbmFtZXNwYWNlIHRlc3QgeworCisvLyBTdG9yZSBpbiAq
ZHN0IGEgcmFuZG9tIHN0cmluZyBvZiBsZW5ndGggImxlbiIgYW5kIHJldHVybiBhIFNsaWNlIHRo
YXQKKy8vIHJlZmVyZW5jZXMgdGhlIGdlbmVyYXRlZCBkYXRhLgorZXh0ZXJuIFNsaWNlIFJhbmRv
bVN0cmluZyhSYW5kb20qIHJuZCwgaW50IGxlbiwgc3RkOjpzdHJpbmcqIGRzdCk7CisKKy8vIFJl
dHVybiBhIHJhbmRvbSBrZXkgd2l0aCB0aGUgc3BlY2lmaWVkIGxlbmd0aCB0aGF0IG1heSBjb250
YWluIGludGVyZXN0aW5nCisvLyBjaGFyYWN0ZXJzIChlLmcuIFx4MDAsIFx4ZmYsIGV0Yy4pLgor
ZXh0ZXJuIHN0ZDo6c3RyaW5nIFJhbmRvbUtleShSYW5kb20qIHJuZCwgaW50IGxlbik7CisKKy8v
IFN0b3JlIGluICpkc3QgYSBzdHJpbmcgb2YgbGVuZ3RoICJsZW4iIHRoYXQgd2lsbCBjb21wcmVz
cyB0bworLy8gIk4qY29tcHJlc3NlZF9mcmFjdGlvbiIgYnl0ZXMgYW5kIHJldHVybiBhIFNsaWNl
IHRoYXQgcmVmZXJlbmNlcworLy8gdGhlIGdlbmVyYXRlZCBkYXRhLgorZXh0ZXJuIFNsaWNlIENv
bXByZXNzaWJsZVN0cmluZyhSYW5kb20qIHJuZCwgZG91YmxlIGNvbXByZXNzZWRfZnJhY3Rpb24s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW4sIHN0ZDo6c3RyaW5nKiBk
c3QpOworCisvLyBBIHdyYXBwZXIgdGhhdCBhbGxvd3MgaW5qZWN0aW9uIG9mIGVycm9ycy4KK2Ns
YXNzIEVycm9yRW52IDogcHVibGljIEVudldyYXBwZXIgeworIHB1YmxpYzoKKyAgYm9vbCB3cml0
YWJsZV9maWxlX2Vycm9yXzsKKyAgaW50IG51bV93cml0YWJsZV9maWxlX2Vycm9yc187CisKKyAg
RXJyb3JFbnYoKSA6IEVudldyYXBwZXIoRW52OjpEZWZhdWx0KCkpLAorICAgICAgICAgICAgICAg
d3JpdGFibGVfZmlsZV9lcnJvcl8oZmFsc2UpLAorICAgICAgICAgICAgICAgbnVtX3dyaXRhYmxl
X2ZpbGVfZXJyb3JzXygwKSB7IH0KKworICB2aXJ0dWFsIFN0YXR1cyBOZXdXcml0YWJsZUZpbGUo
Y29uc3Qgc3RkOjpzdHJpbmcmIGZuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV3JpdGFibGVGaWxlKiogcmVzdWx0KSB7CisgICAgaWYgKHdyaXRhYmxlX2ZpbGVfZXJyb3Jf
KSB7CisgICAgICArK251bV93cml0YWJsZV9maWxlX2Vycm9yc187CisgICAgICAqcmVzdWx0ID0g
TlVMTDsKKyAgICAgIHJldHVybiBTdGF0dXM6OklPRXJyb3IoZm5hbWUsICJmYWtlIGVycm9yIik7
CisgICAgfQorICAgIHJldHVybiB0YXJnZXQoKS0+TmV3V3JpdGFibGVGaWxlKGZuYW1lLCByZXN1
bHQpOworICB9Cit9OworCit9ICAvLyBuYW1lc3BhY2UgdGVzdAorfSAgLy8gbmFtZXNwYWNlIGxl
dmVsZGIKKworI2VuZGlmICAvLyBTVE9SQUdFX0xFVkVMREJfVVRJTF9URVNUVVRJTF9IXwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbQppbmRleCBmNDcxNGRkOGY3MmRjODE3M2NkMTAzNDU4OWE3MTQ1NzZmNjQz
OTcwLi4zMGVlNDViMDExYjYzZDYxODA5YzhlNTM4ZTQwMTNiNmRiMzFhMGM3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQpAQCAtMzM2LDYgKzMzNiwxMCBAQCBlbHNlCiBmZWF0dXJlX2RlZmluZXNfb3Zl
cnJpZGVzICs9IEVOQUJMRV9TUEVMTENIRUNLPTAKIGVuZGlmICAjIEVORCBFTkFCTEVfU1BFTExD
SEVDSwogCitpZiBFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRQord2ViY29yZV9jcHBmbGFncyArPSBc
CisJLURXVEZfVVNFX0xFVkVMREI9MQorZW5kaWYKIAogIyBGaWxsIHRoZSBmZWF0dXJlX2RlZmlu
ZXMgdmFyaWFibGUgd2l0aCBhbGwgdGhlIGRlZmluZXMsIG1ha2luZyBpdCBwb3NzaWJsZQogIyB0
byBvdmVycmlkZSB0aGUgZGVmYXVsdCBkZWZpbmUgdmFsdWUgKGFzIHNldCBpbiBmZWF0dXJlX2Rl
ZmluZXNfZGVmYXVsdHMpCkBAIC01NjQsNiArNTY4LDExIEBAIG5vaW5zdF9MVExJQlJBUklFUyAr
PSBcCiAJbGliV2ViQ29yZU1vZHVsZXMubGEgXAogCWxpYldlYkNvcmUubGEKIAoraWYgRU5BQkxF
X0lOREVYRURfREFUQUJBU0UKK25vaW5zdF9MVExJQlJBUklFUyArPSBcCisJbGliTGV2ZWxEQi5s
YQorZW5kaWYKKwogaWYgRU5BQkxFX1NWRwogbm9pbnN0X0xUTElCUkFSSUVTICs9IFwKIAlsaWJX
ZWJDb3JlU1ZHLmxhCkBAIC02MzQsMjQgKzY0MywzNiBAQCBlbmRpZgogCiBsaWJXZWJDb3JlTW9k
dWxlc19sYV9TT1VSQ0VTID0gXAogCSQod2ViY29yZV9tb2R1bGVzX3NvdXJjZXMpCi0KIGxpYldl
YkNvcmVNb2R1bGVzX2xhX0NYWEZMQUdTID0gJChsaWJXZWJDb3JlX2xhX0NYWEZMQUdTKQotCiBs
aWJXZWJDb3JlTW9kdWxlc19sYV9DRkxBR1MgPSAkKGxpYldlYkNvcmVfbGFfQ0ZMQUdTKQotCiBs
aWJXZWJDb3JlTW9kdWxlc19sYV9DUFBGTEFHUyA9ICQobGliV2ViQ29yZV9sYV9DUFBGTEFHUykK
IAorbGliTGV2ZWxEQl9sYV9DWFhGTEFHUyA9ICQoZ2xvYmFsX2N4eGZsYWdzKQorbGliTGV2ZWxE
Ql9sYV9DRkxBR1MgPSAkKGdsb2JhbF9jeGZsYWdzKQorbGliTGV2ZWxEQl9sYV9DUFBGTEFHUyA9
IFwKKwkkKGdsb2JhbF9jcHBmbGFncykgXAorCS1mbm8tYnVpbHRpbi1tZW1jbXAgXAorCS1JJChz
cmNkaXIpL1NvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIgXAorCS1JJChzcmNkaXIpL1NvdXJjZS9U
aGlyZFBhcnR5L2xldmVsZGIvaW5jbHVkZQorCitpZiBUQVJHRVRfV0lOMzIKK2xpYkxldmVsREJf
bGFfQ1BQRkxBR1MgKz0gXAorCS1ET1NfV0lOCitlbHNlCitsaWJMZXZlbERCX2xhX0NQUEZMQUdT
ICs9IFwKKwktcHRocmVhZCBcCisJLURPU19MSU5VWCBcCisJLURMRVZFTERCX1BMQVRGT1JNX1BP
U0lYCitlbmRpZgorCiBsaWJXZWJDb3JlUGxhdGZvcm1fbGFfU09VUkNFUyA9IFwKIAkkKHdlYmNv
cmVfcGxhdGZvcm1fc291cmNlcykKLQogbGliV2ViQ29yZVBsYXRmb3JtX2xhX0NYWEZMQUdTID0g
XAogCSQoU1lNQk9MX1ZJU0lCSUxJVFlfSU5MSU5FUykgXAogCSQoZ2xvYmFsX2N4eGZsYWdzKQot
CiBsaWJXZWJDb3JlUGxhdGZvcm1fbGFfQ0ZMQUdTID0gXAogCSQoU1lNQk9MX1ZJU0lCSUxJVFkp
IFwKIAkkKGdsb2JhbF9jZmxhZ3MpCi0KIGxpYldlYkNvcmVQbGF0Zm9ybV9sYV9DUFBGTEFHUyA9
IFwKIAktREJVSUxESU5HX1dFQktJVCBcCiAJJChnbG9iYWxfY3BwZmxhZ3MpIFwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IGMxMjVkZDQwM2Y5MWRjZTg5ODg3YTA0MDBhNDMyOTI4
ZmYwMTRjOWMuLmMwMWMwOTU2ZDY2N2M2ODJmNWU3NWM1NTIwMjk0ZGE5ODBjYTMwYzQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNjQ1MCwzICs2NDUwLDk1IEBAIHdlYmNvcmVf
c291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgKIGVuZGlmICAjIEVORCBVU0VfVEVYVFVSRV9NQVBQ
RVJfR0wKIGVuZGlmICAjIFVTRV9BQ0NFTEVSQVRFRF9DT01QT1NJVElORworCitsaWJMZXZlbERC
X2xhX1NPVVJDRVMgPSBcCisJU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9idWlsZGVyLmNj
XAorCVNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvYnVpbGRlci5oIFwKKwlTb3VyY2UvVGhp
cmRQYXJ0eS9sZXZlbGRiL2RiL2MuY2MgXAorCVNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIv
ZGJmb3JtYXQuY2MgXAorCVNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvZGJmb3JtYXQuaCBc
CisJU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9kYl9pbXBsLmNjIFwKKwlTb3VyY2UvVGhp
cmRQYXJ0eS9sZXZlbGRiL2RiL2RiX2ltcGwuaCBcCisJU291cmNlL1RoaXJkUGFydHkvbGV2ZWxk
Yi9kYi9kYl9pdGVyLmNjIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2RiX2l0ZXIu
aCBcCisJU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9maWxlbmFtZS5jYyBcCisJU291cmNl
L1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9maWxlbmFtZS5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9s
ZXZlbGRiL2RiL2xvZ19mb3JtYXQuaCBcCisJU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9s
b2dfcmVhZGVyLmNjIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2xvZ19yZWFkZXIu
aCBcCisJU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9sb2dfd3JpdGVyLmNjIFwKKwlTb3Vy
Y2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL2xvZ193cml0ZXIuaCBcCisJU291cmNlL1RoaXJkUGFy
dHkvbGV2ZWxkYi9kYi9tZW10YWJsZS5jYyBcCisJU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9k
Yi9tZW10YWJsZS5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2RiL3JlcGFpci5jYyBc
CisJU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi9za2lwbGlzdC5oIFwKKwlTb3VyY2UvVGhp
cmRQYXJ0eS9sZXZlbGRiL2RiL3NuYXBzaG90LmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L2xldmVs
ZGIvZGIvdGFibGVfY2FjaGUuY2MgXAorCVNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvdGFi
bGVfY2FjaGUuaCBcCisJU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi92ZXJzaW9uX2VkaXQu
Y2MgXAorCVNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvdmVyc2lvbl9lZGl0LmggXAorCVNv
dXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvZGIvdmVyc2lvbl9zZXQuY2MgXAorCVNvdXJjZS9UaGly
ZFBhcnR5L2xldmVsZGIvZGIvdmVyc2lvbl9zZXQuaCBcCisJU291cmNlL1RoaXJkUGFydHkvbGV2
ZWxkYi9kYi93cml0ZV9iYXRjaC5jYyBcCisJU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9kYi93
cml0ZV9iYXRjaF9pbnRlcm5hbC5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2hlbHBl
cnMvbWVtZW52L21lbWVudi5jYyBcCisJU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9oZWxwZXJz
L21lbWVudi9tZW1lbnYuaCBcCisJU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9pbmNsdWRlL2xl
dmVsZGIvY2FjaGUuaCBcCisJU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9pbmNsdWRlL2xldmVs
ZGIvYy5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2luY2x1ZGUvbGV2ZWxkYi9jb21w
YXJhdG9yLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvaW5jbHVkZS9sZXZlbGRiL2Ri
LmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvaW5jbHVkZS9sZXZlbGRiL2Vudi5oIFwK
KwlTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL2luY2x1ZGUvbGV2ZWxkYi9maWx0ZXJfcG9saWN5
LmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvaW5jbHVkZS9sZXZlbGRiL2l0ZXJhdG9y
LmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvaW5jbHVkZS9sZXZlbGRiL29wdGlvbnMu
aCBcCisJU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvc2xpY2UuaCBc
CisJU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvc3RhdHVzLmggXAor
CVNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvaW5jbHVkZS9sZXZlbGRiL3RhYmxlX2J1aWxkZXIu
aCBcCisJU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvdGFibGUuaCBc
CisJU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9pbmNsdWRlL2xldmVsZGIvd3JpdGVfYmF0Y2gu
aCBcCisJU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9wb3J0L2F0b21pY19wb2ludGVyLmggXAor
CVNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvcG9ydC9wb3J0X2V4YW1wbGUuaCBcCisJU291cmNl
L1RoaXJkUGFydHkvbGV2ZWxkYi9wb3J0L3BvcnQuaCBcCisJU291cmNlL1RoaXJkUGFydHkvbGV2
ZWxkYi9wb3J0L3BvcnRfcG9zaXguY2MgXAorCVNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvcG9y
dC9wb3J0X3Bvc2l4LmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvcG9ydC90aHJlYWRf
YW5ub3RhdGlvbnMuaCBcCisJU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi9wb3J0L3dpbi9zdGRp
bnQuaCBcCisJU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi90YWJsZS9ibG9ja19idWlsZGVyLmNj
IFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxlL2Jsb2NrX2J1aWxkZXIuaCBcCisJ
U291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi90YWJsZS9ibG9jay5jYyBcCisJU291cmNlL1RoaXJk
UGFydHkvbGV2ZWxkYi90YWJsZS9ibG9jay5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRi
L3RhYmxlL2ZpbHRlcl9ibG9jay5jYyBcCisJU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi90YWJs
ZS9maWx0ZXJfYmxvY2suaCBcCisJU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi90YWJsZS9mb3Jt
YXQuY2MgXAorCVNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdGFibGUvZm9ybWF0LmggXAorCVNv
dXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdGFibGUvaXRlcmF0b3IuY2MgXAorCVNvdXJjZS9UaGly
ZFBhcnR5L2xldmVsZGIvdGFibGUvaXRlcmF0b3Jfd3JhcHBlci5oIFwKKwlTb3VyY2UvVGhpcmRQ
YXJ0eS9sZXZlbGRiL3RhYmxlL21lcmdlci5jYyBcCisJU291cmNlL1RoaXJkUGFydHkvbGV2ZWxk
Yi90YWJsZS9tZXJnZXIuaCBcCisJU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi90YWJsZS90YWJs
ZV9idWlsZGVyLmNjIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxlL3RhYmxlLmNj
IFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3RhYmxlL3R3b19sZXZlbF9pdGVyYXRvci5j
YyBcCisJU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi90YWJsZS90d29fbGV2ZWxfaXRlcmF0b3Iu
aCBcCisJU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2FyZW5hLmNjIFwKKwlTb3VyY2Uv
VGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvYXJlbmEuaCBcCisJU291cmNlL1RoaXJkUGFydHkvbGV2
ZWxkYi91dGlsL2Jsb29tLmNjIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvY2Fj
aGUuY2MgXAorCVNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9jb2RpbmcuY2MgXAorCVNv
dXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9jb2RpbmcuaCBcCisJU291cmNlL1RoaXJkUGFy
dHkvbGV2ZWxkYi91dGlsL2NvbXBhcmF0b3IuY2MgXAorCVNvdXJjZS9UaGlyZFBhcnR5L2xldmVs
ZGIvdXRpbC9jcmMzMmMuY2MgXAorCVNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9jcmMz
MmMuaCBcCisJU291cmNlL1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2Vudi5jYyBcCisJU291cmNl
L1RoaXJkUGFydHkvbGV2ZWxkYi91dGlsL2Vudl9wb3NpeC5jYyBcCisJU291cmNlL1RoaXJkUGFy
dHkvbGV2ZWxkYi91dGlsL2ZpbHRlcl9wb2xpY3kuY2MgXAorCVNvdXJjZS9UaGlyZFBhcnR5L2xl
dmVsZGIvdXRpbC9oYXNoLmNjIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvaGFz
aC5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvaGlzdG9ncmFtLmNjIFwKKwlT
b3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvaGlzdG9ncmFtLmggXAorCVNvdXJjZS9UaGly
ZFBhcnR5L2xldmVsZGIvdXRpbC9sb2dnaW5nLmNjIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9sZXZl
bGRiL3V0aWwvbG9nZ2luZy5oIFwKKwlTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvbXV0
ZXhsb2NrLmggXAorCVNvdXJjZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9vcHRpb25zLmNjIFwK
KwlTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiL3V0aWwvcG9zaXhfbG9nZ2VyLmggXAorCVNvdXJj
ZS9UaGlyZFBhcnR5L2xldmVsZGIvdXRpbC9yYW5kb20uaCBcCisJU291cmNlL1RoaXJkUGFydHkv
bGV2ZWxkYi91dGlsL3N0YXR1cy5jYwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvR05V
bWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQppbmRleCBiZmE5
MzY2MDljZWRmMzc3YTg3ZDgwYTk3MjVkZWI1MTAzMzRmZGM4Li5hMWJmZTc5OGFjNWFhN2JkNzEw
ZDljMjAxNjQzNWYzZDFhNzMwMDM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9HTlVt
YWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQpAQCAtODgs
NiArODgsMTEgQEAgbGlid2Via2l0Z3RrX0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05AX0BX
RUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05AX2xhX0xJQkEKIAlsaWJXZWJDb3JlRE9NLmxhIFwK
IAlsaWJXZWJDb3JlR3RrLmxhCiAKK2lmIEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFCitsaWJ3ZWJr
aXRndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBfQFdFQktJVEdUS19BUElfTUlOT1Jf
VkVSU0lPTkBfbGFfTElCQUREICs9IFwKKwlsaWJMZXZlbERCLmxhCitlbmRpZgorCiBpZiBFTkFC
TEVfU1ZHCiBsaWJ3ZWJraXRndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBfQFdFQktJ
VEdUS19BUElfTUlOT1JfVkVSU0lPTkBfbGFfTElCQUREICs9IFwKIAlsaWJXZWJDb3JlU1ZHLmxh
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJL
aXQyL0dOVW1ha2VmaWxlLmFtCmluZGV4IGEwMTE4YjU3OGNmMDNhM2M1MWNkZWQxZjgzY2JjNDZl
MjM3NGQzZjAuLjcyZDY0MjQwNmIzYjE1ZDE3Y2UzYmVjNzE0YjA4MTMzZWY3Yzg0N2QgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQy
L0dOVW1ha2VmaWxlLmFtCkBAIC0xNzYsNiArMTc2LDExIEBAIGxpYndlYmtpdDJndGtfQFdFQktJ
VEdUS19BUElfTUFKT1JfVkVSU0lPTkBfQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkBfbGFf
TElCCiAJbGliV2ViQ29yZVBsYXRmb3JtLmxhIFwKIAlsaWJXZWJDb3JlTW9kdWxlcy5sYQogCitp
ZiBFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRQorbGlid2Via2l0Mmd0a19AV0VCS0lUR1RLX0FQSV9N
QUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQF9sYV9MSUJBREQgKz0g
XAorCWxpYkxldmVsREIubGEKK2VuZGlmCisKIGlmIEVOQUJMRV9TVkcKIGxpYndlYmtpdDJndGtf
QFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBfQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lP
TkBfbGFfTElCQUREICs9IFwKIAlsaWJXZWJDb3JlU1ZHLmxhCmRpZmYgLS1naXQgYS9Ub29scy9D
aGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYmMzMzEyNjJhMzAwYzhjNWQzNTNiMWU0
Yzg2Y2RjYTVjMTAwZDk0NC4uMjgyM2YyNzJiYmUwN2U1NmVhNjM5NWJmM2ZmODhhZWQ5MDg0ZGRh
OCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDEzIEBACisyMDEzLTAxLTE1ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdh
bGlhLmNvbT4KKworICAgICAgICBbR1RLXSBCdWlsZCB3aXRoIExldmVsREIgd2hlbiBJbmRleGVk
REIgaXMgZW5hYmxlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTAzMjIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHk6IERvIG5vdCBzdHlsZSBj
aGVjayB0aGUgbGV2ZWxkYiBzb3VyY2UgY29kZQorICAgICAgICBhcyBpdCBkb2VzIG5vdCBjb25m
b3JtIHRvIFdlYktpdCBzdHlsZS4KKwogMjAxMy0wMS0xNSAgTGV2aSBXZWludHJhdWIgIDxsZXZp
d0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSByb3V0ZSBtb3JlIHdlYmtpdF9z
dXBwb3J0IGFuZCB3ZWJ2aWV3aG9zdCBjYWxsYmFja3MgdGhyb3VnaCBXZWJUZXN0RGVsZWdhdGUK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weSBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQppbmRleCAzZWY2N2FjYzIxMTk1
ZDA4NDgyZTAzY2FjMWVmNTgzM2VlMWE1NGIyLi45NzQxM2RiZDUxYjNlYzVjYWRjOGExMGJjZmNk
OWRkOTJjZjk3YjUxIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2No
ZWNrZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CkBA
IC0zNDAsNiArMzQwLDcgQEAgX1NLSVBQRURfRklMRVNfV0lUSF9XQVJOSU5HID0gWwogIyB3aXRo
IEZpbGVUeXBlLk5PTkUgYXJlIGF1dG9tYXRpY2FsbHkgc2tpcHBlZCB3aXRob3V0IHdhcm5pbmcu
CiBfU0tJUFBFRF9GSUxFU19XSVRIT1VUX1dBUk5JTkcgPSBbCiAgICAgIkxheW91dFRlc3RzIiAr
IG9zLnBhdGguc2VwLAorICAgICJTb3VyY2UvVGhpcmRQYXJ0eS9sZXZlbGRiIiArIG9zLnBhdGgu
c2VwLAogICAgICMgUHJldmVudHMgdGhpcyBiZWluZyByZWNvZ25pemVkIGFzIGEgdGV4dCBmaWxl
LgogICAgICJTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5mZWF0dXJlcy5hbS5pbiIsCiAgICAg
XQpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IDRjY2NmMWJlZTIxZTI0
MTc3NTZiY2MxMDA2ODU0MjNlYmI4OTFiMDUuLjQzY2YwNGRjMDljYTg5MDMxYzk0NWYwZDI2MTMx
ZDYxZWFmOTNjNTYgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNCBAQAorMjAxMy0wMS0xNSAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxp
YS5jb20+CisKKyAgICAgICAgW0dUS10gQnVpbGQgd2l0aCBMZXZlbERCIHdoZW4gSW5kZXhlZERC
IGlzIGVuYWJsZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEwMzIyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogY29uZmlndXJlLmFjOiBEZXRlY3Qgd2hldGhlciB0aGUgSW5kZXhlZERhdGFiYXNlIGZl
YXR1cmUgaXMgZW5hYmxlZC4gV2UgY2Fubm90CisgICAgICAgIHVzZSB0aGUgdHlwaWNhbCBhcHBy
b2FjaCBmb3IgZmVhdHVyZSBkZXRlY3Rpb24gc2luY2Ugd2UgbmVlZCB0byBhZGp1c3QgdGhlIGF1
dG9tYWtlCisgICAgICAgIGZpbGUgb3V0cHV0IGJhc2VkIG9uIHdoZXRoZXIgb3Igbm90IEluZGV4
ZWREYXRhYmFzZSBpcyBlbmFibGVkLgorCiAyMDEzLTAxLTE1ICBaYW4gRG9iZXJzZWsgIDx6YW5k
b2JlcnNla0BnbWFpbC5jb20+CiAKICAgICAgICAgW0F1dG90b29sc10gQWRkIHN1cHBvcnQgZm9y
IFdlYktpdDItb25seSBidWlsZHMKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3Vy
ZS5hYwppbmRleCA5ZjM1OGFiM2Q0MzA4YjU4MTc1OTE4MmVkNGZlOTQzY2I5OGM4MDlmLi5kNDVk
M2M4NjQ3ODZjNTBmYjZkMmY1ZmIwNTYxZTY1YWU4OGNkMDdjIDEwMDY0NAotLS0gYS9jb25maWd1
cmUuYWMKKysrIGIvY29uZmlndXJlLmFjCkBAIC0xMTA4LDYgKzExMDgsMTAgQEAgaWYgdGVzdCAi
JGVuYWJsZV93ZWJraXQyIiA9ICJ5ZXMiOyB0aGVuCiAgICBBQ19TVUJTVChbQVRTUEkyX0xJQlNd
KQogZmkKIAorIyBGb3IgdGhlIG1vbWVudCB3ZSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90
IGluZGV4ZWQgZGF0YWJhc2UKKyMgaXMgZW5hYmxlZCBiZWNhdXNlIGl0IGRldGVybWluZXMgaWYg
d2UgYnVpbGQgbGV2ZWxkYiBvciBub3QuCitBTV9XRUJLSVRfRkVBVFVSRV9DT05ESVRJT05BTChb
RU5BQkxFX0lOREVYRURfREFUQUJBU0VdKQorCiAjIE9TIGNvbmRpdGlvbmFscwogQU1fQ09ORElU
SU9OQUwoW09TX1dJTjMyXSxbdGVzdCAiJG9zX3dpbjMyIiA9ICJ5ZXMiXSkKIEFNX0NPTkRJVElP
TkFMKFtPU19VTklYXSxbdGVzdCAiJG9zX3dpbjMyIiA9ICJubyJdKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>